%global appLoc serverName;
%let compiled_apploc=/Public/app/dc;
%let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc));
%let sasjs_clickmeservice=clickme;
%let syscc=0;
options ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax;
/* user supplied build vars */
/* user supplied build vars end */
/* system macro dependencies for build process */
%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
, errds=work.mp_abort_errds
, mode=REGULAR
)/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds;
iftrue='1=1';
length mac $100 msg $5000;
mac=symget('mac');
msg=symget('msg');
run;
data _null_;
abort cancel FILE;
run;
%return;
%end;
%end;
/* Web App Context */
%if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE
%then %do;
options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do;
options nosyntaxcheck;
%end;
%if &mode=INCLUDE %then %do;
%if %sysfunc(exist(&errds))=1 %then %do;
data _null_;
set &errds;
call symputx('iftrue',iftrue,'l');
call symputx('mac',mac,'l');
call symputx('msg',msg,'l');
putlog (_all_)(=);
run;
%if (&iftrue)=0 %then %return;
%end;
%else %do;
%put &sysmacroname: No include errors found;
%return;
%end;
%end;
/* extract log errs / warns, if exist */
%local logloc logline;
%global logmsg; /* capture global messages */
%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
%else %let logloc=%qsysfunc(getoption(LOG));
proc printto log=log;run;
%let logline=0;
%if %length(&logloc)>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input; putlog _infile_;
i=1;
retain logonce 0;
if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_);
logonce+1;
end;
run;
/* capture log including lines BEFORE the err */
%if &logline>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input;
i=1;
stoploop=0;
if _n_ ge &logline-15 and stoploop=0 then do until (i>22);
call symputx('logmsg',catx('\n',symget('logmsg'),_infile_));
input;
i+1;
stoploop=1;
end;
if stoploop=1 then stop;
run;
%end;
%end;
%if %symexist(SYS_JES_JOB_URI) %then %do;
/* setup webout for Viya */
options nobomfile;
%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;
filename _webout temp lrecl=999999 mod;
%end;
%else %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json" lrecl=999999 mod;
%end;
%end;
%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;
options nobomfile;
/* set up http header for SASjs Server */
%let fid=%sysfunc(fopen(&fref,A));
%if &fid=0 %then %do;
%put %str(ERR)OR: %sysfunc(sysmsg());
%return;
%end;
%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(&fref));
%end;
/* send response in SASjs JSON format */
data _null_;
file _webout mod lrecl=32000 encoding='utf-8';
length msg syswarningtext syserrortext $32767 mode $10 ;
sasdatetime=datetime();
msg=symget('msg');
%if &logline>0 %then %do;
msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg'));
%end;
/* escape the escapes */
msg=tranwrd(msg,'\','\\');
/* escape the quotes */
msg=tranwrd(msg,'"','\"');
/* ditch the CRLFs as chrome complains */
msg=compress(msg,,'kw');
/* quote without quoting the quotes (which are escaped instead) */
msg=cats('"',msg,'"');
if symexist('_debug') then debug=quote(trim(symget('_debug')));
else debug='""';
if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
if mode ne 'SASJS' then put '>>weboutBEGIN<<';
put '{"SYSDATE" : "' "&SYSDATE" '"';
put ',"SYSTIME" : "' "&SYSTIME" '"';
put ',"sasjsAbort" : [{';
put ' "MSG":' msg ;
put ' ,"MAC": "' "&mac" '"}]';
put ",""SYSUSERID"" : ""&sysuserid"" ";
put ',"_DEBUG":' debug ;
if symexist('_metauser') then do;
_METAUSER=quote(trim(symget('_METAUSER')));
put ",""_METAUSER"": " _METAUSER;
_METAPERSON=quote(trim(symget('_METAPERSON')));
put ',"_METAPERSON": ' _METAPERSON;
end;
if symexist('SYS_JES_JOB_URI') then do;
SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI')));
put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI;
end;
_PROGRAM=quote(trim(resolve(symget('_PROGRAM'))));
put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" ";
syserrortext=cats(symget('syserrortext'));
if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syserrortext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syserrortext)
)))))))))))))!!'"';
end;
else syserrortext=cats('"',syserrortext,'"');
put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" ";
put ",""SYSJOBID"" : ""&sysjobid"" ";
put ",""SYSSCPL"" : ""&sysscpl"" ";
put ",""SYSSITE"" : ""&syssite"" ";
sysvlong=quote(trim(symget('sysvlong')));
put ',"SYSVLONG" : ' sysvlong;
syswarningtext=cats(symget('syswarningtext'));
if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syswarningtext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syswarningtext)
)))))))))))))!!'"';
end;
else syswarningtext=cats('"',syswarningtext,'"');
put ",""SYSWARNINGTEXT"" : " syswarningtext;
put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
put "}" ;
if mode ne 'SASJS' then put '>>weboutEND<<';
run;
%put _all_;
%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
data _null_;
putlog 'stpsrvset program err and syscc';
rc=stpsrvset('program error', 0);
call symputx("syscc",0,"g");
run;
%if &sysscp=WIN
and 1=0 /* deprecating this logic until we figure out a consistent abort */
and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
/* skip approach (below) does not work in windows m6+ envs */
endsas;
%end;
%else %do;
/**
* endsas kills 9.4m3 deployments by orphaning multibridges.
* Abort variants are ungraceful (non zero return code)
* This approach lets SAS run silently until the end :-)
* Caution - fails when called within a %include within a macro
* Use mp_include() to handle this.
*/
filename skip temp;
data _null_;
file skip;
put '%macro skip();';
comment '%mend skip; -> fix lint ';
put '%macro skippy();';
comment '%mend skippy; -> fix lint ';
run;
%inc skip;
%end;
%end;
%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
/* endsas kills the session making it harder to fetch results */
data _null_;
syswarningtext=symget('syswarningtext');
syserrortext=symget('syserrortext');
abort_msg=symget('msg');
syscc=symget('syscc');
sysuserid=symget('sysuserid');
iftrue=symget('iftrue');
put (_all_)(/=);
call symputx('syscc',0);
abort cancel nolist;
run;
%end;
%else %do;
%abort cancel;
%end;
%end;
%else %do;
%put _all_;
%abort cancel;
%end;
%mend mp_abort;
/** @endcond */
%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);
%local rc fname;
%if &prefix=0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%end;
%else %do;
%local x len;
%let len=%eval(8-%length(&prefix));
%let x=0;
%do x=0 %to &maxtries;
%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);
%if %sysfunc(fileref(&fname)) > 0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%return;
%end;
%end;
%put unable to find available fileref after &maxtries attempts;
%end;
%mend mf_getuniquefileref;
%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
%macro mf_isblank(param
)/*/STORE SOURCE*/;
%sysevalf(%superq(param)=,boolean)
%mend mf_isblank;
%macro mf_mval(var);
%if %symexist(&var) %then %do;
%superq(&var)
%end;
%mend mf_mval;
%macro mf_trimstr(basestr,trimstr);
%local baselen trimlen trimval;
/* return if basestr is shorter than trimstr (or 0) */
%let baselen=%length(%superq(basestr));
%let trimlen=%length(%superq(trimstr));
%if &baselen < &trimlen or &baselen=0 %then %return;
/* obtain the characters from the end of basestr */
%let trimval=%qsubstr(%superq(basestr)
,%length(%superq(basestr))-&trimlen+1
,&trimlen);
/* compare and if matching, chop it off! */
%if %superq(basestr)=%superq(trimstr) %then %do;
%return;
%end;
%else %if %superq(trimval)=%superq(trimstr) %then %do;
%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)
%end;
%else %do;
&basestr
%end;
%mend mf_trimstr;
%macro mf_getplatform(switch
)/*/STORE SOURCE*/;
%local a b c;
%if &switch.NONE=NONE %then %do;
%if %symexist(sasjsprocessmode) %then %do;
%if &sasjsprocessmode=Stored Program %then %do;
SASJS
%return;
%end;
%end;
%if %symexist(sysprocessmode) %then %do;
%if "&sysprocessmode"="SAS Object Server"
or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA
%end;
%else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if &switch=SASSTUDIO %then %do;
/* return the version of SAS Studio else 0 */
%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;
%let a=%mf_mval(_CLIENTVERSION);
%let b=%scan(&a,1,.);
%if %eval(&b >2) %then %do;
&b
%end;
%else 0;
%end;
%else 0;
%end;
%else %if &switch=VIYARESTAPI %then %do;
%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)
%end;
%mend mf_getplatform;
%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)
)/des='ungraceful abort' /*STORE SOURCE*/;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mf_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%abort;
%mend mf_abort;
/** @endcond */
%macro mfv_existfolder(path
)/*/STORE SOURCE*/;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter mfv_existfolder.sas with syscc=&syscc
)
%local fref rc;
%let fref=%mf_getuniquefileref();
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;
1
%let rc=%sysfunc(filename(fref));
%end;
%else %do;
0
%let syscc=0;
%end;
%mend mfv_existfolder;
%macro mv_createfolder(path=
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%if %mfv_existfolder(&path)=1 %then %do;
%put &sysmacroname: &path already exists;
%return;
%end;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
options noquotelenmax;
%local subfolder_cnt; /* determine the number of subfolders */
%let subfolder_cnt=%sysfunc(countw(&path,/));
%local href; /* resource address (none for root) */
%let href="/folders/folders?parentFolderUri=/folders/folders/none";
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%local x newpath subfolder;
%do x=1 %to &subfolder_cnt;
%let subfolder=%scan(&path,&x,%str(/));
%let newpath=&newpath/&subfolder;
%local fname1;
%let fname1=%mf_getuniquefileref();
%put &sysmacroname checking to see if &newpath exists;
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&newpath";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
%mp_abort(
iftrue=(
&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 404
)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%if &mdebug=1 %then %do;
%put &sysmacroname following check to see if &newpath exists:;
%put _local_;
data _null_;
set &fname1;
input;
putlog _infile_;
run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE=200 %then %do;
%*put &sysmacroname &newpath exists so grab the follow on link ;
data _null_;
set &libref1..links;
if rel='createChild' then
call symputx('href',quote(cats("&base_uri",href)),'l');
run;
%end;
%else %if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;
%put &sysmacroname &newpath not found - creating it now;
%local fname2;
%let fname2=%mf_getuniquefileref();
data _null_;
length json $1000;
json=cats("'"
,'{"name":'
,quote(trim(symget('subfolder')))
,',"description":'
,quote("&subfolder, created by &sysmacroname")
,',"type":"folder"}'
,"'"
);
call symputx('json',json,'l');
run;
proc http method='POST'
in=&json
out=&fname2
&oauth_bearer
url=%unquote(%superq(href));
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
'Content-Type'='application/vnd.sas.content.folder+json'
'Accept'='application/vnd.sas.content.folder+json';
run;
%put &=SYS_PROCHTTP_STATUS_CODE;
%put &=SYS_PROCHTTP_STATUS_PHRASE;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
%put &sysmacroname &newpath now created. Grabbing the follow on link ;
data _null_;
set &libref2..links;
if rel='createChild' then do;
call symputx('href',quote(cats("&base_uri",href)),'l');
&dbg put (_all_)(=);
end;
run;
libname &libref2 clear;
filename &fname2 clear;
%end;
filename &fname1 clear;
libname &libref1 clear;
%end;
%mend mv_createfolder;
%macro mv_deletejes(path=
,name=
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
);
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1)
,mac=&sysmacroname
,msg=%str(name value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%put &sysmacroname: fetching details for &path ;
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&path";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;
%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;
%return;
%end;
%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%put &sysmacroname: grab the follow on link ;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..links;
if rel='members' then call symputx('mref',quote("&base_uri"!!trim(href)),'l');
run;
/* get the children */
%local fname1a;
%let fname1a=%mf_getuniquefileref();
proc http method='GET' out=&fname1a &oauth_bearer
url=%unquote(%superq(mref));
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%put &=SYS_PROCHTTP_STATUS_CODE;
%local libref1a;
%let libref1a=%mf_getuniquelibref();
libname &libref1a JSON fileref=&fname1a;
%local uri found;
%let found=0;
%put Getting object uri from &libref1a..items;
data _null_;
length contenttype name $1000;
set &libref1a..items;
if contenttype='jobDefinition' and upcase(name)="%upcase(&name)" then do;
call symputx('uri',cats("&base_uri",uri),'l');
call symputx('found',1,'l');
end;
run;
%if &found=0 %then %do;
%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;
%return;
%end;
proc http method="DELETE" url="&uri" &oauth_bearer;
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="*/*";/**/
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;
data _null_; infile &fname2; input; putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%else %put &sysmacroname: &path/&name successfully deleted;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
filename &fname1a clear;
libname &libref1a clear;
%mend mv_deletejes;
%macro mp_base64copy(
inref=0,
outref=0,
action=ENCODE
)/*/STORE SOURCE*/;
%let inref=%upcase(&inref);
%let outref=%upcase(&outref);
%let action=%upcase(&action);
%local infound outfound;
%let infound=0;
%let outfound=0;
data _null_;
set sashelp.vextfl(where=(fileref="&inref" or fileref="&outref"));
if fileref="&inref" then call symputx('infound',1,'l');
if fileref="&outref" then call symputx('outfound',1,'l');
run;
%mp_abort(iftrue= (&infound=0)
,mac=&sysmacroname
,msg=%str(INREF &inref NOT FOUND!)
)
%mp_abort(iftrue= (&outref=0)
,mac=&sysmacroname
,msg=%str(OUTREF NOT PROVIDED!)
)
%mp_abort(iftrue= (&action ne ENCODE and &action ne DECODE)
,mac=&sysmacroname
,msg=%str(Invalid action! Should be ENCODE OR DECODE)
)
%if &outfound=0 %then %do;
filename &outref temp lrecl=2097088;
%end;
%if &action=ENCODE %then %do;
data _null_;
length b64 $ 76 line $ 57;
retain line "";
infile &inref recfm=F lrecl= 1 end=eof;
input @1 stream $char1.;
file &outref recfm=N;
substr(line,(_N_-(CEIL(_N_/57)-1)*57),1) = byte(rank(stream));
if mod(_N_,57)=0 or EOF then do;
if eof then b64=put(trim(line),$base64X76.);
else b64=put(line, $base64X76.);
put b64 + (-1) @;
line="";
end;
run;
%end;
%else %if &action=DECODE %then %do;
data _null_;
length filein 8 fileout 8;
filein = fopen("&inref",'I',4,'B');
fileout = fopen("&outref",'O',3,'B');
char= '20'x;
do while(fread(filein)=0);
length raw $4;
do i=1 to 4;
rc=fget(filein,char,1);
substr(raw,i,1)=char;
end;
rc = fput(fileout,input(raw,$base64X4.));
rc = fwrite(fileout);
end;
rc = fclose(filein);
rc = fclose(fileout);
run;
%end;
%mend mp_base64copy;
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
run;
%if &inref = ____in %then %do;
filename &inref clear;
%end;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
/* system macro dependencies for build process end*/
/* system macros for build process */
%macro mv_createwebservice(path=
,name=
,desc=Created by the mv_createwebservice.sas macro
,precode=
,code=ft15f001
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,replace=YES
,adapter=sasjs
,mdebug=0
,contextname=
,debug=0 /* @TODO - Deprecate */
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
/* initial validation checking */
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1)
,mac=&sysmacroname
,msg=%str(name value must be provided)
)
options noquotelenmax;
* remove any trailing slash ;
%if "%substr(&path,%length(&path),1)" = "/" %then
%let path=%substr(&path,1,%length(&path)-1);
/* ensure folder exists */
%put &sysmacroname: Path &path being checked / created;
%mv_createfolder(path=&path)
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* fetching folder details for provided path */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&path";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%if &mdebug=1 %then %do;
data _null_;
infile &fname1;
input;
putlog _infile_;
run;
%end;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* path exists. Grab follow on link to check members */
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..links;
if rel='members' then
call symputx('membercheck',quote("&base_uri"!!trim(href)),'l');
else if rel='self' then call symputx('parentFolderUri',href,'l');
run;
data _null_;
set &libref1..root;
call symputx('folderid',id,'l');
run;
%local fname2;
%let fname2=%mf_getuniquefileref();
proc http method='GET'
out=&fname2
&oauth_bearer
url=%unquote(%superq(membercheck));
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
'Accept'='application/vnd.sas.collection+json'
'Accept-Language'='string';
%if &mdebug=1 %then %do;
debug level = 3;
%end;
run;
/*data _null_;infile &fname2;input;putlog _infile_;run;*/
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%if %upcase(&replace)=YES %then %do;
%mv_deletejes(path=&path, name=&name)
%end;
%else %do;
/* check that job does not already exist in that folder */
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
%local exists; %let exists=0;
data _null_;
set &libref2..items;
if contenttype='jobDefinition' and upcase(name)="%upcase(&name)" then
call symputx('exists',1,'l');
run;
%mp_abort(iftrue=(&exists=1)
,mac=&sysmacroname
,msg=%str(Job &name already exists in &path)
)
libname &libref2 clear;
%end;
/* set up the body of the request to create the service */
%local fname3;
%let fname3=%mf_getuniquefileref();
data _null_;
file &fname3 TERMSTR=' ';
length string $32767;
string=cats('{"version": 0,"name":"'
,"&name"
,'","type":"Compute","parameters":[{"name":"_addjesbeginendmacros"'
,',"type":"CHARACTER","defaultValue":"false"}');
context=quote(cats(symget('contextname')));
if context ne '""' then do;
string=cats(string,',{"version": 1,"name": "_contextName","defaultValue":'
,context,',"type":"CHARACTER","label":"Context Name","required": false}');
end;
string=cats(string,'],"code":"');
put string;
run;
/**
* Add webout macro
* These put statements are auto generated - to change the macro, change the
* source (mv_webout) and run `build.py`
*/
filename &adapter temp lrecl=3000;
data _null_;
file &adapter;
put "/* Created on %sysfunc(datetime(),datetime19.) by &sysuserid */";
/* WEBOUT BEGIN */
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y ';
put ' ,engine=DATASTEP ';
put ' ,missing=NULL ';
put ' ,showmeta=N ';
put ' ,maxobs=MAX ';
put ')/*/STORE SOURCE*/; ';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval ';
put ' tmpds1 tmpds2 tmpds3 tmpds4; ';
put '%let numcols=0; ';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;); ';
put ' ';
put '%if &action=OPEN %then %do; ';
put ' options nobomfile; ';
put ' data _null_;file &jref encoding=''utf-8'' lrecl=200; ';
put ' put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"''; ';
put ' run; ';
put '%end; ';
put '%else %if (&action=ARR or &action=OBJ) %then %do; ';
put ' /* force variable names to always be uppercase in the JSON */ ';
put ' options validvarname=upcase; ';
put ' /* To avoid issues with _webout on EBI - such as encoding diffs and truncation ';
put ' (https://support.sas.com/kb/49/325.html) we use temporary files */ ';
put ' filename _sjs1 temp lrecl=200 ; ';
put ' data _null_; file _sjs1 encoding=''utf-8''; ';
put ' put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":"; ';
put ' run; ';
put ' /* now write to _webout 1 char at a time */ ';
put ' data _null_; ';
put ' infile _sjs1 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs1 clear; ';
put ' ';
put ' /* grab col defs */ ';
put ' proc contents noprint data=&ds ';
put ' out=_data_(keep=name type length format formatl formatd varnum label); ';
put ' run; ';
put ' %let colinfo=%scan(&syslast,2,.); ';
put ' proc sort data=&colinfo; ';
put ' by varnum; ';
put ' run; ';
put ' /* move meta to mac vars */ ';
put ' data &colinfo; ';
put ' if _n_=1 then call symputx(''numcols'',nobs,''l''); ';
put ' set &colinfo end=last nobs=nobs; ';
put ' name=upcase(name); ';
put ' /* fix formats */ ';
put ' if type=2 or type=6 then do; ';
put ' typelong=''char''; ';
put ' length fmt $49.; ';
put ' if format='''' then fmt=cats(''$'',length,''.''); ';
put ' else if formatl=0 then fmt=cats(format,''.''); ';
put ' else fmt=cats(format,formatl,''.''); ';
put ' end; ';
put ' else do; ';
put ' typelong=''num''; ';
put ' if format='''' then fmt=''best.''; ';
put ' else if formatl=0 then fmt=cats(format,''.''); ';
put ' else if formatd=0 then fmt=cats(format,formatl,''.''); ';
put ' else fmt=cats(format,formatl,''.'',formatd); ';
put ' end; ';
put ' /* 32 char unique name */ ';
put ' newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27); ';
put ' ';
put ' call symputx(cats(''name'',_n_),name,''l''); ';
put ' call symputx(cats(''newname'',_n_),newname,''l''); ';
put ' call symputx(cats(''length'',_n_),length,''l''); ';
put ' call symputx(cats(''fmt'',_n_),fmt,''l''); ';
put ' call symputx(cats(''type'',_n_),type,''l''); ';
put ' call symputx(cats(''typelong'',_n_),typelong,''l''); ';
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
put ' run; ';
put ' ';
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' proc sql; ';
put ' select count(*) into: lastobs from &ds; ';
put ' %if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs)); ';
put ' ';
put ' %if &engine=PROCJSON %then %do; ';
put ' %if &missing=STRING %then %do; ';
put ' %put &sysmacroname: Special Missings not supported in proc json.; ';
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
put ' %goto datastep; ';
put ' %end; ';
put ' data &tempds; ';
put ' set &ds; ';
put ' &stmt_obs; ';
put ' %if &fmt=N %then format _numeric_ best32.;; ';
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
put ' filename _sjs2 temp lrecl=131068 encoding=''utf-8''; ';
put ' proc json out=_sjs2 pretty ';
put ' %if &action=ARR %then nokeys ; ';
put ' ;export &tempds / nosastags fmtnumeric; ';
put ' run; ';
put ' /* send back to webout */ ';
put ' data _null_; ';
put ' infile _sjs2 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs2 clear; ';
put ' %end; ';
put ' %else %if &engine=DATASTEP %then %do; ';
put ' %datastep: ';
put ' %if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1 ';
put ' %then %do; ';
put ' %put &sysmacroname: &ds NOT FOUND!!!; ';
put ' %return; ';
put ' %end; ';
put ' ';
put ' %if &fmt=Y %then %do; ';
put ' /** ';
put ' * Extract format definitions ';
put ' * First, by getting library locations from dictionary.formats ';
put ' * Then, by exporting the width using proc format ';
put ' * Cannot use maxw from sashelp.vformat as not always populated ';
put ' * Cannot use fmtinfo() as not supported in all flavours ';
put ' */ ';
put ' %let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' proc sql noprint; ';
put ' create table &tmpds1 as ';
put ' select cats(libname,''.'',memname) as FMTCAT, ';
put ' FMTNAME ';
put ' from dictionary.formats ';
put ' where fmttype=''F'' and libname is not null ';
put ' and fmtname in (select format from &colinfo where format is not null) ';
put ' order by 1; ';
put ' create table &tmpds2( ';
put ' FMTNAME char(32), ';
put ' LENGTH num ';
put ' ); ';
put ' %local catlist cat fmtlist i; ';
put ' select distinct fmtcat into: catlist separated by '' '' from &tmpds1; ';
put ' %do i=1 %to %sysfunc(countw(&catlist,%str( ))); ';
put ' %let cat=%scan(&catlist,&i,%str( )); ';
put ' proc sql; ';
put ' select distinct fmtname into: fmtlist separated by '' '' ';
put ' from &tmpds1 where fmtcat="&cat"; ';
put ' proc format lib=&cat cntlout=&tmpds3(keep=fmtname length); ';
put ' select &fmtlist; ';
put ' run; ';
put ' proc sql; ';
put ' insert into &tmpds2 select distinct fmtname,length from &tmpds3; ';
put ' %end; ';
put ' ';
put ' proc sql; ';
put ' create table &tmpds4 as ';
put ' select a.*, b.length as MAXW ';
put ' from &colinfo a ';
put ' left join &tmpds2 b ';
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
put ' order by a.varnum; ';
put ' data _null_; ';
put ' set &tmpds4; ';
put ' if not missing(maxw); ';
put ' call symputx( ';
put ' cats(''fmtlen'',_n_), ';
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
put ' ,''l'' ';
put ' ); ';
put ' run; ';
put ' ';
put ' /* configure varlenchk - as we are explicitly shortening the variables */ ';
put ' %let optval=%sysfunc(getoption(varlenchk)); ';
put ' options varlenchk=NOWARN; ';
put ' data _data_(compress=char); ';
put ' /* shorten the new vars */ ';
put ' length ';
put ' %do i=1 %to &numcols; ';
put ' &&name&i $&&fmtlen&i ';
put ' %end; ';
put ' ; ';
put ' /* rename on entry */ ';
put ' set &ds(rename=( ';
put ' %do i=1 %to &numcols; ';
put ' &&name&i=&&newname&i ';
put ' %end; ';
put ' )); ';
put ' &stmt_obs; ';
put ' ';
put ' drop ';
put ' %do i=1 %to &numcols; ';
put ' &&newname&i ';
put ' %end; ';
put ' ; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=num %then %do; ';
put ' &&name&i=cats(put(&&newname&i,&&fmt&i)); ';
put ' %end; ';
put ' %else %do; ';
put ' &&name&i=put(&&newname&i,&&fmt&i); ';
put ' %end; ';
put ' %end; ';
put ' if _error_ then do; ';
put ' call symputx(''syscc'',1012); ';
put ' stop; ';
put ' end; ';
put ' run; ';
put ' %let fmtds=&syslast; ';
put ' options varlenchk=&optval; ';
put ' %end; ';
put ' ';
put ' proc format; /* credit yabwon for special null removal */ ';
put ' value bart (default=40) ';
put ' %if &missing=NULL %then %do; ';
put ' ._ - .z = null ';
put ' %end; ';
put ' %else %do; ';
put ' ._ = [quote()] ';
put ' . = null ';
put ' .a - .z = [quote()] ';
put ' %end; ';
put ' other = [best.]; ';
put ' ';
put ' data &tempds; ';
put ' attrib _all_ label=''''; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
put ' length &&name&i $&&fmtlen&i...; ';
put ' format &&name&i $&&fmtlen&i...; ';
put ' %end; ';
put ' %end; ';
put ' %if &fmt=Y %then %do; ';
put ' set &fmtds; ';
put ' %end; ';
put ' %else %do; ';
put ' set &ds; ';
put ' %end; ';
put ' &stmt_obs; ';
put ' format _numeric_ bart.; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' &&name&i=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else &&name&i=quote(cats(&&name&i)); ';
put ' %end; ';
put ' %end; ';
put ' run; ';
put ' ';
put ' filename _sjs3 temp lrecl=131068 ; ';
put ' data _null_; ';
put ' file _sjs3 encoding=''utf-8''; ';
put ' if _n_=1 then put "["; ';
put ' set &tempds; ';
put ' if _n_>1 then put "," @; put ';
put ' %if &action=ARR %then "[" ; %else "{" ; ';
put ' %do i=1 %to &numcols; ';
put ' %if &i>1 %then "," ; ';
put ' %if &action=OBJ %then """&&name&i"":" ; ';
put ' "&&name&i"n /* name literal for reserved variable names */ ';
put ' %end; ';
put ' %if &action=ARR %then "]" ; %else "}" ; ; ';
put ' ';
put ' /* close out the table */ ';
put ' data _null_; ';
put ' file _sjs3 mod encoding=''utf-8''; ';
put ' put '']''; ';
put ' run; ';
put ' data _null_; ';
put ' infile _sjs3 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs3 clear; ';
put ' %end; ';
put ' ';
put ' proc sql; ';
put ' drop table &colinfo, &tempds; ';
put ' ';
put ' %if %substr(&showmeta,1,1)=Y %then %do; ';
put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; ';
put ' data _null_; ';
put ' file _sjs4; ';
put ' length label $350; ';
put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; ';
put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; ';
put ' put name '':{"format":'' format '',"label":'' label ';
put ' '',"length":'' length '',"type":'' type ''}''; ';
put ' end; ';
put ' put ''}}''; ';
put ' run; ';
put ' /* send back to webout */ ';
put ' data _null_; ';
put ' infile _sjs4 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs4 clear; ';
put ' %end; ';
put '%end; ';
put ' ';
put '%else %if &action=CLOSE %then %do; ';
put ' data _null_; file &jref encoding=''utf-8'' mod ; ';
put ' put "}"; ';
put ' run; ';
put '%end; ';
put '%mend mp_jsonout; ';
put ' ';
put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; ';
put ' %local user; ';
put ' ';
put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; ';
put ' %else %let user=&sysuserid; ';
put ' ';
put ' %quote(&user) ';
put ' ';
put '%mend mf_getuser; ';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL ';
put ' ,showmeta=N,maxobs=MAX,workobs=0 ';
put '); ';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name ';
put ' sasjs_tables SYS_JES_JOB_URI; ';
put '%if %index("&_debug",log) %then %let _debug=131; ';
put ' ';
put '%local i tempds table; ';
put '%let action=%upcase(&action); ';
put ' ';
put '%if &action=FETCH %then %do; ';
put ' %if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do; ';
put ' options mprint notes mprintnest; ';
put ' %end; ';
put ' ';
put ' %if not %symexist(_webin_fileuri1) %then %do; ';
put ' %let _webin_file_count=%eval(&_webin_file_count+0); ';
put ' %let _webin_fileuri1=&_webin_fileuri; ';
put ' %let _webin_name1=&_webin_name; ';
put ' %end; ';
put ' ';
put ' /* if the sasjs_tables param is passed, we expect param based upload */ ';
put ' %if %length(&sasjs_tables.X)>1 %then %do; ';
put ' ';
put ' /* convert data from macro variables to datasets */ ';
put ' %do i=1 %to %sysfunc(countw(&sasjs_tables)); ';
put ' %let table=%scan(&sasjs_tables,&i,%str( )); ';
put ' %if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1; ';
put ' data _null_; ';
put ' file "%sysfunc(pathname(work))/&table..csv" recfm=n; ';
put ' retain nrflg 0; ';
put ' length line $32767; ';
put ' do i=1 to &&sasjs&i.data0; ';
put ' if &&sasjs&i.data0=1 then line=symget("sasjs&i.data"); ';
put ' else line=symget(cats("sasjs&i.data",i)); ';
put ' if i=1 and substr(line,1,7)=''%nrstr('' then do; ';
put ' nrflg=1; ';
put ' line=substr(line,8); ';
put ' end; ';
put ' if i=&&sasjs&i.data0 and nrflg=1 then do; ';
put ' line=substr(line,1,length(line)-1); ';
put ' end; ';
put ' put line +(-1) @; ';
put ' end; ';
put ' run; ';
put ' data _null_; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' list; ';
put ' data work.&table; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd ';
put ' termstr=crlf; ';
put ' input &input_statement; ';
put ' run; ';
put ' %end; ';
put ' %end; ';
put ' %else %do i=1 %to &_webin_file_count; ';
put ' /* read in any files that are sent */ ';
put ' /* this part needs refactoring for wide files */ ';
put ' filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999; ';
put ' data _null_; ';
put ' infile indata termstr=crlf lrecl=32767; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' %if %str(&_debug) ge 131 %then %do; ';
put ' if _n_<20 then putlog _infile_; ';
put ' else stop; ';
put ' %end; ';
put ' %else %do; ';
put ' stop; ';
put ' %end; ';
put ' run; ';
put ' data &&_webin_name&i; ';
put ' infile indata firstobs=2 dsd termstr=crlf ; ';
put ' input &input_statement; ';
put ' run; ';
put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; ';
put ' %end; ';
put '%end; ';
put '%else %if &action=OPEN %then %do; ';
put ' /* setup webout */ ';
put ' OPTIONS NOBOMFILE; ';
put ' %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; ';
put ' filename _webout temp lrecl=999999 mod; ';
put ' %end; ';
put ' %else %do; ';
put ' filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" ';
put ' name="_webout.json" lrecl=999999 mod; ';
put ' %end; ';
put ' ';
put ' /* setup temp ref */ ';
put ' %if %upcase(&fref) ne _WEBOUT %then %do; ';
put ' filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---''; ';
put ' %end; ';
put ' ';
put ' /* setup json */ ';
put ' data _null_;file &fref; ';
put ' put ''{"SYSDATE" : "'' "&SYSDATE" ''"''; ';
put ' put '',"SYSTIME" : "'' "&SYSTIME" ''"''; ';
put ' run; ';
put '%end; ';
put '%else %if &action=ARR or &action=OBJ %then %do; ';
put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref ';
put ' ,engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs ';
put ' ) ';
put '%end; ';
put '%else %if &action=CLOSE %then %do; ';
put ' %if %str(&workobs) > 0 %then %do; ';
put ' /* send back first XX records of each work table for debugging */ ';
put ' data;run;%let tempds=%scan(&syslast,2,.); ';
put ' ods output Members=&tempds; ';
put ' proc datasets library=WORK memtype=data; ';
put ' %local wtcnt;%let wtcnt=0; ';
put ' data _null_; ';
put ' set &tempds; ';
put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ ';
put ' i+1; ';
put ' call symputx(cats(''wt'',i),name,''l''); ';
put ' call symputx(''wtcnt'',i,''l''); ';
put ' data _null_; file &fref mod; put ",""WORK"":{"; ';
put ' %do i=1 %to &wtcnt; ';
put ' %let wt=&&wt&i; ';
put ' data _null_; file &fref mod; ';
put ' dsid=open("WORK.&wt",''is''); ';
put ' nlobs=attrn(dsid,''NLOBS''); ';
put ' nvars=attrn(dsid,''NVARS''); ';
put ' rc=close(dsid); ';
put ' if &i>1 then put '',''@; ';
put ' put " ""&wt"" : {"; ';
put ' put ''"nlobs":'' nlobs; ';
put ' put '',"nvars":'' nvars; ';
put ' %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y ';
put ' ,maxobs=&workobs ';
put ' ) ';
put ' data _null_; file &fref mod;put "}"; ';
put ' %end; ';
put ' data _null_; file &fref mod;put "}";run; ';
put ' %end; ';
put ' ';
put ' /* close off json */ ';
put ' data _null_;file &fref mod; ';
put ' length SYSPROCESSNAME syserrortext syswarningtext autoexec $512; ';
put ' put ",""_DEBUG"" : ""&_debug"" "; ';
put ' _PROGRAM=quote(trim(resolve(symget(''_PROGRAM'')))); ';
put ' put '',"_PROGRAM" : '' _PROGRAM ; ';
put ' autoexec=quote(urlencode(trim(getoption(''autoexec'')))); ';
put ' put '',"AUTOEXEC" : '' autoexec; ';
put ' put ",""MF_GETUSER"" : ""%mf_getuser()"" "; ';
put ' SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI'')))); ';
put ' put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ; ';
put ' put ",""SYSJOBID"" : ""&sysjobid"" "; ';
put ' put ",""SYSCC"" : ""&syscc"" "; ';
put ' syserrortext=cats(symget(''syserrortext'')); ';
put ' if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' syserrortext=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,syserrortext) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else syserrortext=cats(''"'',syserrortext,''"''); ';
put ' put '',"SYSERRORTEXT" : '' syserrortext; ';
put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; ';
put ' put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" "; ';
put ' put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" "; ';
put ' SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME))); ';
put ' put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME; ';
put ' put ",""SYSJOBID"" : ""&sysjobid"" "; ';
put ' put ",""SYSSCPL"" : ""&sysscpl"" "; ';
put ' put ",""SYSSITE"" : ""&syssite"" "; ';
put ' put ",""SYSUSERID"" : ""&sysuserid"" "; ';
put ' sysvlong=quote(trim(symget(''sysvlong''))); ';
put ' put '',"SYSVLONG" : '' sysvlong; ';
put ' syswarningtext=cats(symget(''syswarningtext'')); ';
put ' if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' syswarningtext=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,syswarningtext) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else syswarningtext=cats(''"'',syswarningtext,''"''); ';
put ' put '',"SYSWARNINGTEXT" : '' syswarningtext; ';
put ' put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" ''; ';
put ' length memsize $32; ';
put ' memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)"; ';
put ' memsize=quote(cats(memsize)); ';
put ' put '',"MEMSIZE" : '' memsize; ';
put ' put "}"; ';
put ' ';
put ' %if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do; ';
put ' data _null_; rc=fcopy("&fref","_webout");run; ';
put ' %end; ';
put ' ';
put '%end; ';
put ' ';
put '%mend mv_webout; ';
/* WEBOUT END */
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so it is provided by SASjs instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put ' ';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO';
put ' ,maxobs=MAX';
put ');';
put ' %mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing';
put ' ,showmeta=&showmeta,maxobs=&maxobs';
put ' )';
put '%mend;';
run;
/* insert the code, escaping double quotes and carriage returns */
%&dbg.put &sysmacroname: Creating final input file;
%local x fref freflist;
%let freflist= &adapter &precode &code ;
%do x=1 %to %sysfunc(countw(&freflist));
%let fref=%scan(&freflist,&x);
%&dbg.put &sysmacroname: adding &fref fileref;
data _null_;
length filein 8 fileid 8;
filein = fopen("&fref","I",1,"B");
fileid = fopen("&fname3","A",1,"B");
rec = "20"x;
do while(fread(filein)=0);
rc = fget(filein,rec,1);
if rec='"' then do; /* DOUBLE QUOTE */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'"');rc =fwrite(fileid);
end;
else if rec='0A'x then do; /* LF */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'n');rc =fwrite(fileid);
end;
else if rec='0D'x then do; /* CR */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'r');rc =fwrite(fileid);
end;
else if rec='09'x then do; /* TAB */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'t');rc =fwrite(fileid);
end;
else if rec='5C'x then do; /* BACKSLASH */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'\');rc =fwrite(fileid);
end;
else if rec='01'x then do; /* Unprintable */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'1');rc =fwrite(fileid);
end;
else if rec='07'x then do; /* Bell Char */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'7');rc =fwrite(fileid);
end;
else if rec='1B'x then do; /* escape char */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'1');rc =fwrite(fileid);
rc =fput(fileid,'B');rc =fwrite(fileid);
end;
else do;
rc =fput(fileid,rec);
rc =fwrite(fileid);
end;
end;
rc=fclose(filein);
rc=fclose(fileid);
run;
%end;
/* finish off the body of the code file loaded to JES */
data _null_;
file &fname3 mod TERMSTR=' ';
put '"}';
run;
%if &mdebug=1 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;
%put &sysmacroname: input about to be POSTed;
data _null_;infile &fname3;input;putlog _infile_;run;
%end;
%&dbg.put &sysmacroname: Creating the actual service!;
%local fname4;
%let fname4=%mf_getuniquefileref();
proc http method='POST'
in=&fname3
out=&fname4
&oauth_bearer
url="&base_uri/jobDefinitions/definitions?parentFolderUri=&parentFolderUri";
headers 'Content-Type'='application/vnd.sas.job.definition+json'
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="application/vnd.sas.job.definition+json";
%if &mdebug=1 %then %do;
debug level = 3;
%end;
run;
%if &mdebug=1 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;
%put &sysmacroname: output from POSTing job definition;
data _null_;infile &fname4;input;putlog _infile_;run;
%end;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* get the url so we can give a helpful log message */
%local url;
data _null_;
if symexist('_baseurl') then do;
url=symget('_baseurl');
if subpad(url,length(url)-9,9)='SASStudio'
then url=substr(url,1,length(url)-11);
else url="&systcpiphostname";
end;
else url="&systcpiphostname";
call symputx('url',url);
run;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname1 clear;
filename &fname2 clear;
filename &fname3 clear;
filename &fname4 clear;
filename &adapter clear;
libname &libref1 clear;
%end;
%put &sysmacroname: Job &name successfully created in &path;
%put &sysmacroname:;
%put &sysmacroname: Check it out here:;
%put &sysmacroname:;%put;
%put &url/SASJobExecution?_PROGRAM=&path/&name;%put;
%put &sysmacroname:;
%put &sysmacroname:;
%mend mv_createwebservice;
/**
@file
@brief Creates a file in SAS Drive
@details Creates a file in SAS Drive and adds the appropriate content type.
If the parent folder does not exist, it is created.
Usage:
filename myfile temp;
data _null_;
file myfile;
put 'something';
run;
%mv_createfile(path=/Public/temp,name=newfile.txt,inref=myfile)
@param [in] path= The parent folder in which to create the file
@param [in] name= The name of the file to be created
@param [in] inref= The fileref pointing to the file to be uploaded
@param [in] intype= (BINARY) The type of the input data. Valid values:
@li BINARY File is copied byte for byte using the mp_binarycopy.sas macro.
@li BASE64 File will be first decoded using the mp_base64.sas macro, then
loaded byte by byte to SAS Drive.
@param [in] contentdisp= (inline) Content Disposition. Example values:
@li inline
@li attachment
@param [in] ctype= (0) Set a default HTTP Content-Type header to be returned
with the file when the content is retrieved from the Files service.
@param [in] access_token_var= The global macro variable to contain the access
token, if using authorization_code grant type.
@param [in] grant_type= (sas_services) Valid values are:
@li password
@li authorization_code
@li sas_services
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
@version VIYA V.03.05
@author Allan Bowe, source: https://github.com/sasjs/core
SAS Macros
@li mf_getuniquefileref.sas
@li mf_isblank.sas
@li mp_abort.sas
@li mp_base64copy.sas
@li mp_binarycopy.sas
@li mv_createfolder.sas
**/
%macro mv_createfile(path=
,name=
,inref=
,intype=BINARY
,contentdisp=inline
,ctype=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1 or %length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1 or %length(&name)=1)
,mac=&sysmacroname
,msg=%str(name value with length >1 must be provided)
)
/* create folder if it does not already exist */
%mv_createfolder(path=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,mdebug=&mdebug
)
/* create file with relevant options */
%local fref;
%let fref=%mf_getuniquefileref();
filename &fref filesrvc
folderPath="&path"
filename="&name"
cdisp="&contentdisp"
%if "&ctype" ne "0" %then %do;
ctype="&ctype"
%end;
lrecl=1048544;
%if &intype=BINARY %then %do;
%mp_binarycopy(inref=&inref, outref=&fref)
%end;
%else %if &intype=BASE64 %then %do;
%mp_base64copy(inref=&inref, outref=&fref, action=DECODE)
%end;
filename &fref clear;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%put &sysmacroname: File &name successfully created in &path;
%put &sysmacroname:;%put;
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
%put &sysmacroname:;
%mend mv_createfile;
/**
@file
@brief Performs a text substitution on a file
@details Performs a find and replace on a file, either in place or to a new
file. Can be used on files where lines are longer than 32767.
Works by reading in the file byte by byte, then marking the beginning and end
of each matched string, before finally doing the replace.
Full credit for this highly efficient and syntactically satisfying SAS logic
goes to [Bartosz Jabłoński](https://www.linkedin.com/in/yabwon), founder of
the [SAS Packages](https://github.com/yabwon/SAS_PACKAGES) framework.
Usage:
%let file="%sysfunc(pathname(work))/file.txt";
%let str=replace/me;
%let rep=with/this;
data _null_;
file &file;
put 'blahblah';
put "blahblah&str.blah";
put 'blahblahblah';
run;
%mp_replace(&file, findvar=str, replacevar=rep)
data _null_;
infile &file;
input;
list;
run;
Note - if you are running a version of SAS that will allow the io package in
LUA, you can also use this macro: mp_gsubfile.sas
@param [in] infile The QUOTED path to the file on which to perform the
substitution
@param [in] findvar= Macro variable NAME containing the string to search for
@param [in] replacevar= Macro variable NAME containing the replacement string
@param [out] outfile= (0) Optional QUOTED path to the adjusted output file (to
avoid overwriting the first file).
SAS Macros
@li mf_getuniquefileref.sas
@li mf_getuniquename.sas
Related Macros
@li mp_chop.sas
@li mp_gsubfile.sas
@li mp_replace.test.sas
@version 9.4
@author Bartosz Jabłoński
@author Allan Bowe
**/
%macro mp_replace(infile,
findvar=,
replacevar=,
outfile=0
)/*/STORE SOURCE*/;
%local inref dttm ds1;
%let inref=%mf_getuniquefileref();
%let outref=%mf_getuniquefileref();
%if &outfile=0 %then %let outfile=&infile;
%let ds1=%mf_getuniquename(prefix=allchars);
%let ds2=%mf_getuniquename(prefix=startmark);
/* START */
%let dttm=%sysfunc(datetime());
filename &inref &infile lrecl=1 recfm=n;
data &ds1;
infile &inref;
input sourcechar $char1. @@;
format sourcechar hex2.;
run;
data &ds2;
/* set find string to length in bytes to cover trailing spaces */
length string $ %length(%superq(&findvar));
string =symget("&findvar");
drop string;
firstchar=char(string,1);
findlen=lengthm(string); /* <- for trailing bytes */
do _N_=1 to nobs;
set &ds1 nobs=nobs point=_N_;
if sourcechar=firstchar then do;
pos=1;
s=0;
do point=_N_ to min(_N_ + findlen -1,nobs);
set &ds1 point=point;
if sourcechar=char(string, pos) then s + 1;
else goto _leave_;
pos+1;
end;
_leave_:
if s=findlen then do;
START =_N_;
_N_ =_N_+ s - 1;
STOP =_N_;
output;
end;
end;
end;
stop;
keep START STOP;
run;
data &ds1;
declare hash HS(dataset:"&ds2(keep=start)");
HS.defineKey("start");
HS.defineDone();
declare hash HE(dataset:"&ds2(keep=stop)");
HE.defineKey("stop");
HE.defineDone();
do until(eof);
set &ds1 end=eof curobs =n;
start = ^HS.check(key:n);
stop = ^HE.check(key:n);
length strt $ 1;
strt =put(start,best. -L);
retain out 1;
if out then output;
if start then out=0;
if stop then out=1;
end;
stop;
keep sourcechar strt;
run;
filename &outref &outfile recfm=n;
data _null_;
length replace $ %length(%superq(&replacevar));
replace=symget("&replacevar");
file &outref;
do until(eof);
set &ds1 end=eof;
if strt ="1" then put replace char.;
else put sourcechar char1.;
end;
stop;
run;
/* END */
%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;
%mend mp_replace;
/* system macros for build process end */
%macro mf_mval(var);
%if %symexist(&var) %then %do;
%superq(&var)
%end;
%mend mf_mval;
%macro mf_trimstr(basestr,trimstr);
%local baselen trimlen trimval;
/* return if basestr is shorter than trimstr (or 0) */
%let baselen=%length(%superq(basestr));
%let trimlen=%length(%superq(trimstr));
%if &baselen < &trimlen or &baselen=0 %then %return;
/* obtain the characters from the end of basestr */
%let trimval=%qsubstr(%superq(basestr)
,%length(%superq(basestr))-&trimlen+1
,&trimlen);
/* compare and if matching, chop it off! */
%if %superq(basestr)=%superq(trimstr) %then %do;
%return;
%end;
%else %if %superq(trimval)=%superq(trimstr) %then %do;
%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)
%end;
%else %do;
&basestr
%end;
%mend mf_trimstr;
%macro mf_getplatform(switch
)/*/STORE SOURCE*/;
%local a b c;
%if &switch.NONE=NONE %then %do;
%if %symexist(sasjsprocessmode) %then %do;
%if &sasjsprocessmode=Stored Program %then %do;
SASJS
%return;
%end;
%end;
%if %symexist(sysprocessmode) %then %do;
%if "&sysprocessmode"="SAS Object Server"
or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA
%end;
%else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if &switch=SASSTUDIO %then %do;
/* return the version of SAS Studio else 0 */
%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;
%let a=%mf_mval(_CLIENTVERSION);
%let b=%scan(&a,1,.);
%if %eval(&b >2) %then %do;
&b
%end;
%else 0;
%end;
%else 0;
%end;
%else %if &switch=VIYARESTAPI %then %do;
%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)
%end;
%mend mf_getplatform;
%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);
%local rc fname;
%if &prefix=0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%end;
%else %do;
%local x len;
%let len=%eval(8-%length(&prefix));
%let x=0;
%do x=0 %to &maxtries;
%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);
%if %sysfunc(fileref(&fname)) > 0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%return;
%end;
%end;
%put unable to find available fileref after &maxtries attempts;
%end;
%mend mf_getuniquefileref;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
, errds=work.mp_abort_errds
, mode=REGULAR
)/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds;
iftrue='1=1';
length mac $100 msg $5000;
mac=symget('mac');
msg=symget('msg');
run;
data _null_;
abort cancel FILE;
run;
%return;
%end;
%end;
/* Web App Context */
%if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE
%then %do;
options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do;
options nosyntaxcheck;
%end;
%if &mode=INCLUDE %then %do;
%if %sysfunc(exist(&errds))=1 %then %do;
data _null_;
set &errds;
call symputx('iftrue',iftrue,'l');
call symputx('mac',mac,'l');
call symputx('msg',msg,'l');
putlog (_all_)(=);
run;
%if (&iftrue)=0 %then %return;
%end;
%else %do;
%put &sysmacroname: No include errors found;
%return;
%end;
%end;
/* extract log errs / warns, if exist */
%local logloc logline;
%global logmsg; /* capture global messages */
%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
%else %let logloc=%qsysfunc(getoption(LOG));
proc printto log=log;run;
%let logline=0;
%if %length(&logloc)>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input; putlog _infile_;
i=1;
retain logonce 0;
if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_);
logonce+1;
end;
run;
/* capture log including lines BEFORE the err */
%if &logline>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input;
i=1;
stoploop=0;
if _n_ ge &logline-15 and stoploop=0 then do until (i>22);
call symputx('logmsg',catx('\n',symget('logmsg'),_infile_));
input;
i+1;
stoploop=1;
end;
if stoploop=1 then stop;
run;
%end;
%end;
%if %symexist(SYS_JES_JOB_URI) %then %do;
/* setup webout for Viya */
options nobomfile;
%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;
filename _webout temp lrecl=999999 mod;
%end;
%else %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json" lrecl=999999 mod;
%end;
%end;
%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;
options nobomfile;
/* set up http header for SASjs Server */
%let fid=%sysfunc(fopen(&fref,A));
%if &fid=0 %then %do;
%put %str(ERR)OR: %sysfunc(sysmsg());
%return;
%end;
%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(&fref));
%end;
/* send response in SASjs JSON format */
data _null_;
file _webout mod lrecl=32000 encoding='utf-8';
length msg syswarningtext syserrortext $32767 mode $10 ;
sasdatetime=datetime();
msg=symget('msg');
%if &logline>0 %then %do;
msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg'));
%end;
/* escape the escapes */
msg=tranwrd(msg,'\','\\');
/* escape the quotes */
msg=tranwrd(msg,'"','\"');
/* ditch the CRLFs as chrome complains */
msg=compress(msg,,'kw');
/* quote without quoting the quotes (which are escaped instead) */
msg=cats('"',msg,'"');
if symexist('_debug') then debug=quote(trim(symget('_debug')));
else debug='""';
if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
if mode ne 'SASJS' then put '>>weboutBEGIN<<';
put '{"SYSDATE" : "' "&SYSDATE" '"';
put ',"SYSTIME" : "' "&SYSTIME" '"';
put ',"sasjsAbort" : [{';
put ' "MSG":' msg ;
put ' ,"MAC": "' "&mac" '"}]';
put ",""SYSUSERID"" : ""&sysuserid"" ";
put ',"_DEBUG":' debug ;
if symexist('_metauser') then do;
_METAUSER=quote(trim(symget('_METAUSER')));
put ",""_METAUSER"": " _METAUSER;
_METAPERSON=quote(trim(symget('_METAPERSON')));
put ',"_METAPERSON": ' _METAPERSON;
end;
if symexist('SYS_JES_JOB_URI') then do;
SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI')));
put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI;
end;
_PROGRAM=quote(trim(resolve(symget('_PROGRAM'))));
put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" ";
syserrortext=cats(symget('syserrortext'));
if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syserrortext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syserrortext)
)))))))))))))!!'"';
end;
else syserrortext=cats('"',syserrortext,'"');
put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" ";
put ",""SYSJOBID"" : ""&sysjobid"" ";
put ",""SYSSCPL"" : ""&sysscpl"" ";
put ",""SYSSITE"" : ""&syssite"" ";
sysvlong=quote(trim(symget('sysvlong')));
put ',"SYSVLONG" : ' sysvlong;
syswarningtext=cats(symget('syswarningtext'));
if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syswarningtext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syswarningtext)
)))))))))))))!!'"';
end;
else syswarningtext=cats('"',syswarningtext,'"');
put ",""SYSWARNINGTEXT"" : " syswarningtext;
put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
put "}" ;
if mode ne 'SASJS' then put '>>weboutEND<<';
run;
%put _all_;
%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
data _null_;
putlog 'stpsrvset program err and syscc';
rc=stpsrvset('program error', 0);
call symputx("syscc",0,"g");
run;
%if &sysscp=WIN
and 1=0 /* deprecating this logic until we figure out a consistent abort */
and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
/* skip approach (below) does not work in windows m6+ envs */
endsas;
%end;
%else %do;
/**
* endsas kills 9.4m3 deployments by orphaning multibridges.
* Abort variants are ungraceful (non zero return code)
* This approach lets SAS run silently until the end :-)
* Caution - fails when called within a %include within a macro
* Use mp_include() to handle this.
*/
filename skip temp;
data _null_;
file skip;
put '%macro skip();';
comment '%mend skip; -> fix lint ';
put '%macro skippy();';
comment '%mend skippy; -> fix lint ';
run;
%inc skip;
%end;
%end;
%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
/* endsas kills the session making it harder to fetch results */
data _null_;
syswarningtext=symget('syswarningtext');
syserrortext=symget('syserrortext');
abort_msg=symget('msg');
syscc=symget('syscc');
sysuserid=symget('sysuserid');
iftrue=symget('iftrue');
put (_all_)(/=);
call symputx('syscc',0);
abort cancel nolist;
run;
%end;
%else %do;
%abort cancel;
%end;
%end;
%else %do;
%put _all_;
%abort cancel;
%end;
%mend mp_abort;
/** @endcond */
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
run;
%if &inref = ____in %then %do;
filename &inref clear;
%end;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;
%macro mp_chop(infile,
matchvar=,
matchpoint=START,
keep=FIRST,
offset=0,
mdebug=0,
outfile=0
)/*/STORE SOURCE*/;
%local fref0 dttm ds1 outref;
%let fref0=%mf_getuniquefileref();
%let ds1=%mf_getuniquename(prefix=allchars);
%let ds2=%mf_getuniquename(prefix=startmark);
%if &outfile=0 %then %let outfile=&infile;
%mp_abort(iftrue= (%length(%superq(&matchvar))=0)
,mac=mp_chop.sas
,msg=%str(&matchvar is an empty variable)
)
/* START */
%let dttm=%sysfunc(datetime());
filename &fref0 &infile lrecl=1 recfm=n;
/* create dataset with one char per row */
data &ds1;
infile &fref0;
input sourcechar $char1. @@;
format sourcechar hex2.;
run;
/* get start & stop position of first matchvar string (one row, two vars) */
data &ds2;
/* set find string to length in bytes to cover trailing spaces */
length string $ %length(%superq(&matchvar));
string =symget("&matchvar");
drop string;
firstchar=char(string,1);
findlen=lengthm(string); /* <- for trailing bytes */
do _N_=1 to nobs;
set &ds1 nobs=nobs point=_N_;
if sourcechar=firstchar then do;
pos=1;
s=0;
do point=_N_ to min(_N_ + findlen -1,nobs);
set &ds1 point=point;
if sourcechar=char(string, pos) then s + 1;
else goto _leave_;
pos+1;
end;
_leave_:
if s=findlen then do;
START =_N_;
_N_ =_N_+ s - 1;
STOP =_N_;
output;
/* matched! */
stop;
end;
end;
end;
stop;
keep START STOP;
run;
%local split;
%let split=0;
data _null_;
set &ds2;
if "&matchpoint"='START' then do;
if "&keep"='FIRST' then mp=start;
else if "&keep"='LAST' then mp=start-1;
end;
else if "&matchpoint"='END' then do;
if "&keep"='FIRST' then mp=stop+1;
else if "&keep"='LAST' then mp=stop;
end;
split=mp+&offset;
call symputx('split',split,'l');
%if &mdebug=1 %then %do;
put (_all_)(=);
%put &=offset;
%end;
run;
%if &split=0 %then %do;
%put &sysmacroname: No match found in &infile for string %superq(&matchvar);
%return;
%end;
data _null_;
file &outfile recfm=n;
set &ds1;
%if &keep=FIRST %then %do;
if _n_ ge &split then stop;
%end;
%else %do;
if _n_ gt &split;
%end;
put sourcechar char1.;
run;
%if &mdebug=0 %then %do;
filename &fref0 clear;
%end;
%else %do;
data _null_;
infile &outfile lrecl=32767;
input;
list;
if _n_>200 then stop;
run;
%end;
/* END */
%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;
%mend mp_chop;
%macro mcf_init(func
)/*/STORE SOURCE*/;
%if not (%symexist(SASJS_PREFIX)) %then %do;
%global SASJS_PREFIX;
%let SASJS_PREFIX=SASJS;
%end;
%let func=%upcase(&func);
/* the / character is just a seperator */
%global &sasjs_prefix._FUNCTIONS;
%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;
1
%return;
%end;
%else %do;
%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;
0
%end;
%mend mcf_init;
%macro mcf_getfmttype(wrap=NO
,insert_cmplib=DEPRECATED
,lib=WORK
,cat=SASJS
,pkg=UTILS
)/*/STORE SOURCE*/;
%local i var cmpval found;
%if %mcf_init(mcf_getfmttype)=1 %then %return;
%if &wrap=YES %then %do;
proc fcmp outlib=&lib..&cat..&pkg;
%end;
function mcf_getfmttype(fmtnm $) $8;
if substr(fmtnm,1,1)='$' then return('CHAR');
else do;
/* extract NAME */
length fmt $32;
fmt=scan(fmtnm,1,'.');
do while (
substr(fmt,length(fmt),1) in ('1','2','3','4','5','6','7','8','9','0')
);
if length(fmt)=1 then fmt='W';
else fmt=substr(fmt,1,length(fmt)-1);
end;
/* apply lookups */
if cats(fmt) in ('DATETIME','B8601DN','B8601DN','B8601DT','B8601DT'
,'B8601DZ','B8601DZ','DATEAMPM','DTDATE','DTMONYY','DTWKDATX','DTYEAR'
,'DTYYQC','E8601DN','E8601DN','E8601DT','E8601DT','E8601DZ','E8601DZ')
then return('DATETIME');
else if fmt in ('DATE','YYMMDD','B8601DA','B8601DA','DAY','DDMMYY'
,'DDMMYYB','DDMMYYC','DDMMYYD','DDMMYYN','DDMMYYP','DDMMYYS','DDMMYYx'
,'DOWNAME','E8601DA','E8601DA','JULDAY','JULIAN','MMDDYY','MMDDYYB'
,'MMDDYYC','MMDDYYD','MMDDYYN','MMDDYYP','MMDDYYS','MMDDYYx','MMYY'
,'MMYYC','MMYYD','MMYYN','MMYYP','MMYYS','MMYYx','MONNAME','MONTH'
,'MONYY','PDJULG','PDJULI','QTR','QTRR','WEEKDATE','WEEKDATX','WEEKDAY'
,'WEEKU','WEEKV','WEEKW','WORDDATE','WORDDATX','YEAR','YYMM','YYMMC'
,'YYMMD','YYMMDDB','YYMMDDC','YYMMDDD','YYMMDDN','YYMMDDP','YYMMDDS'
,'YYMMDDx','YYMMN','YYMMP','YYMMS','YYMMx','YYMON','YYQ','YYQC','YYQD'
,'YYQN','YYQP','YYQR','YYQRC','YYQRD','YYQRN','YYQRP','YYQRS','YYQRx'
,'YYQS','YYQx','YYQZ') then return('DATE');
else if fmt in ('TIME','B8601LZ','B8601LZ','B8601TM','B8601TM','B8601TZ'
,'B8601TZ','E8601LZ','E8601LZ','E8601TM','E8601TM','E8601TZ','E8601TZ'
,'HHMM','HOUR','MMSS','TIMEAMPM','TOD') then return('TIME');
else return('NUM');
end;
endsub;
%if &wrap=YES %then %do;
quit;
%end;
/* insert the CMPLIB if not already there */
%let cmpval=%sysfunc(getoption(cmplib));
%let found=0;
%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));
%let var=%scan(&cmpval,&i,%str( %(%)));
%if &var=&lib..&cat %then %let found=1;
%end;
%if &found=0 %then %do;
options insert=(CMPLIB=(&lib..&cat));
%end;
%mend mcf_getfmttype;
%macro mf_getVarFormat(libds /* two level ds name */
, var /* variable name from which to return the format */
, force=0
)/*/STORE SOURCE*/;
%local dsid vnum vformat rc vlen vtype;
/* Open dataset */
%let dsid = %sysfunc(open(&libds));
%if &dsid > 0 %then %do;
/* Get variable number */
%let vnum = %sysfunc(varnum(&dsid, &var));
/* Get variable format */
%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));
%else %do;
%put NOTE: Variable &var does not exist in &libds;
%let rc = %sysfunc(close(&dsid));
%return;
%end;
%end;
%else %do;
%put &sysmacroname: dataset &libds not opened! (rc=&dsid);
%put &sysmacroname: %sysfunc(sysmsg());
%return;
%end;
/* supply a default if no format available */
%if %length(&vformat)<2 & &force=1 %then %do;
%let vlen = %sysfunc(varlen(&dsid, &vnum));
%let vtype = %sysfunc(vartype(&dsid, &vnum.));
%if &vtype=C %then %let vformat=$&vlen..;
%else %let vformat=best.;
%end;
/* Close dataset */
%let rc = %sysfunc(close(&dsid));
/* Return variable format */
&vformat
%mend mf_getVarFormat;
%macro mf_getvarlist(libds
,dlm=%str( )
,quote=no
,typefilter=A
)/*/STORE SOURCE*/;
/* declare local vars */
%local outvar dsid nvars x rc dlm q var vtype;
/* credit Rowland Hale - byte34 is double quote, 39 is single quote */
%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));
%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));
/* open dataset in macro */
%let dsid=%sysfunc(open(&libds));
%if &dsid %then %do;
%let nvars=%sysfunc(attrn(&dsid,NVARS));
%if &nvars>0 %then %do;
/* add variables with supplied delimeter */
%do x=1 %to &nvars;
/* get variable type */
%let vtype=%sysfunc(vartype(&dsid,&x));
%if &vtype=&typefilter or &typefilter=A %then %do;
%let var=&q.%sysfunc(varname(&dsid,&x))&q.;
%if &var=&q&q %then %do;
%put &sysmacroname: Empty column found in &libds!;
%let var=&q. &q.;
%end;
%if %quote(&outvar)=%quote() %then %let outvar=&var;
%else %let outvar=&outvar.&dlm.&var.;
%end;
%end;
%end;
%let rc=%sysfunc(close(&dsid));
%end;
%else %do;
%put &sysmacroname: Unable to open &libds (rc=&dsid);
%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
%let rc=%sysfunc(close(&dsid));
%end;
%do;%unquote(&outvar)%end;
%mend mf_getvarlist;
%macro mf_getvartype(libds /* two level name */
, var /* variable name from which to return the type */
)/*/STORE SOURCE*/;
%local dsid vnum vtype rc;
/* Open dataset */
%let dsid = %sysfunc(open(&libds));
%if &dsid. > 0 %then %do;
/* Get variable number */
%let vnum = %sysfunc(varnum(&dsid, &var));
/* Get variable type (C/N) */
%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));
%else %do;
%put NOTE: Variable &var does not exist in &libds;
%let vtype = %str( );
%end;
%end;
%else %do;
%put &sysmacroname: dataset &libds not opened! (rc=&dsid);
%put &sysmacroname: %sysfunc(sysmsg());
%return;
%end;
/* Close dataset */
%let rc = %sysfunc(close(&dsid));
/* Return variable type */
&vtype
%mend mf_getvartype;
%macro mp_ds2csv(ds
,dlm=COMMA
,outref=0
,outfile=
,outencoding=0
,headerformat=LABEL
,termstr=CRLF
)/*/STORE SOURCE*/;
%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;
%if not %sysfunc(exist(&ds)) %then %do;
%put %str(WARN)ING: &ds does not exist;
%return;
%end;
%if %index(&ds,.)=0 %then %let ds=WORK.&ds;
%if &outencoding=0 %then %let outencoding=;
%else %let outencoding=encoding=&outencoding;
%if &outref=0 %then %let outloc=&outfile;
%else %let outloc=&outref;
%if &headerformat=SASJS %then %do;
%let delim=",";
%let termstr=CRLF;
%mcf_getfmttype(wrap=YES)
%end;
%else %if &dlm=COMMA %then %let delim=",";
%else %let delim=";";
/* credit to mjsq - https://stackoverflow.com/a/55642267 */
/* first get headers */
data _null_;
file &outloc &outencoding lrecl=32767 termstr=&termstr;
length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;
call missing(of _all_);
dsid=open("&ds.","i");
num=attrn(dsid,"nvars");
dlm=&delim;
do i=1 to num;
varnm=upcase(varname(dsid,i));
if i=num then dlm='';
%if &headerformat=NAME %then %do;
header=cats(varnm,dlm);
%end;
%else %if &headerformat=LABEL %then %do;
header = cats(coalescec(varlabel(dsid,i),varnm),dlm);
%end;
%else %if &headerformat=SASJS %then %do;
if vartype(dsid,i)='C' then header=cats(varnm,':$char',varlen(dsid,i),'.');
else do;
vfmt=coalescec(varfmt(dsid,i),'0');
fmttype=mcf_getfmttype(vfmt);
if fmttype='DATE' then header=cats(varnm,':date9.');
else if fmttype='DATETIME' then header=cats(varnm,':E8601DT26.6');
else if fmttype='TIME' then header=cats(varnm,':TIME12.');
else header=cats(varnm,':best.');
end;
%end;
%else %do;
%put &sysmacroname: Invalid headerformat value (&headerformat);
%return;
%end;
put header @;
end;
rc=close(dsid);
run;
%let varlist=%mf_getvarlist(&ds);
%let vcnt=%sysfunc(countw(&varlist));
/**
* The $quote modifier (without a width) will take the length from the variable
* and increase by two. However this will lead to truncation where the value
* contains double quotes (which are doubled up). To get around this, scan the
* data to see the max number of double quotes, so that the appropriate width
* can be applied in the subsequent step.
*/
data _null_;
set &ds end=last;
%do i=1 %to &vcnt;
%let var=%scan(&varlist,&i);
%if %mf_getvartype(&ds,&var)=C %then %do;
%let dsv1=%mf_getuniquename(prefix=csvcol1_);
%let dsv2=%mf_getuniquename(prefix=csvcol2_);
retain &dsv1 0;
&dsv2=length(&var)+countc(&var,'"');
if &dsv2>&dsv1 then &dsv1=&dsv2;
if last then call symputx(
"vlen&i"
/* should be no shorter than varlen, and no longer than 32767 */
,cats('$quote',min(&dsv1+2,32767),'.')
,'l'
);
%end;
%end;
%let vat=@;
%let vcom=&delim;
%let vmiss=%mf_getuniquename(prefix=csvcol3_);
/* next, export data */
data _null_;
set &ds.;
file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;
if _n_=1 then &vmiss=' ';
%do i=1 %to &vcnt;
%let var=%scan(&varlist,&i);
%if &i=&vcnt %then %do;
%let vat=;
%let vcom=;
%end;
%if %mf_getvartype(&ds,&var)=N %then %do;
%if &headerformat = SASJS %then %do;
%let vcom=&delim;
%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));
%if &fmttype=DATE %then %let vfmt=DATE9.;
%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;
%else %if &fmttype=TIME %then %let vfmt=TIME12.;
%else %do;
%let vfmt=;
%let vcom=;
%end;
%end;
%else %let vcom=;
/* must use period - in order to work in both 9.4 and Viya 3.5 */
if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;
&vmiss=cats('.',&var);
put &vmiss &vat;
end;
else put &var &vfmt &vcom &vat;
%end;
%else %do;
%if &i ne &vcnt %then %let vcom=&delim;
put &var &&vlen&i &vcom &vat;
%end;
%end;
run;
%mend mp_ds2csv;
%macro ms_runstp(pgm
,debug=131
,inputparams=_null_
,inputfiles=_null_
,outref=outweb
,outlogds=_null_
,mdebug=0
);
%local dbg mainref authref boundary;
%let mainref=%mf_getuniquefileref();
%let authref=%mf_getuniquefileref();
%let boundary=%mf_getuniquename();
%if &inputparams=0 %then %let inputparams=_null_;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%mp_abort(iftrue=("&pgm"="")
,mac=&sysmacroname
,msg=%str(Program not provided)
)
/* avoid sending bom marker to API */
%local optval;
%let optval=%sysfunc(getoption(bomfile));
options nobomfile;
/* add params */
data _null_;
file &mainref termstr=crlf lrecl=32767 mod;
length line $1000 name $32 value $32767;
if _n_=1 then call missing(of _all_);
set &inputparams;
put "--&boundary";
line=cats('Content-Disposition: form-data; name="',name,'"');
put line;
put ;
put value;
run;
/* parse input file list */
%local webcount;
%let webcount=0;
data _null_;
set &inputfiles end=last;
length fileref $8 name $32 filename $256;
call symputx(cats('webref',_n_),fileref,'l');
call symputx(cats('webname',_n_),name,'l');
call symputx(cats('webfilename',_n_),filename,'l');
if last then do;
call symputx('webcount',_n_);
call missing(of _all_);
end;
run;
/* write out the input files */
%local i;
%do i=1 %to &webcount;
data _null_;
file &mainref termstr=crlf lrecl=32767 mod;
infile &&webref&i lrecl=32767;
if _n_ = 1 then do;
length line $32767;
line=cats(
'Content-Disposition: form-data; name="'
,"&&webname&i"
,'"; filename="'
,"&&webfilename&i"
,'"'
);
put "--&boundary";
put line;
put "Content-Type: text/plain";
put ;
end;
input;
put _infile_; /* add the actual file to be sent */
run;
%end;
data _null_;
file &mainref termstr=crlf mod;
put "--&boundary--";
run;
data _null_;
file &authref lrecl=1000;
infile "&_sasjs_tokenfile" lrecl=1000;
input;
if _n_=1 then put "Content-Type: multipart/form-data; boundary=&boundary";
put _infile_;
run;
%if &mdebug=1 %then %do;
data _null_;
infile &authref;
input;
put _infile_;
data _null_;
infile &mainref;
input;
put _infile_;
run;
%end;
%local resp_path;
%let resp_path=%sysfunc(pathname(work))/%mf_getuniquename();
filename &outref "&resp_path" lrecl=32767;
/* prepare request*/
proc http method='POST' headerin=&authref in=&mainref out=&outref
url="&_sasjs_apiserverurl.&_sasjs_apipath?_program=&pgm%str(&)_debug=131";
%if &mdebug=1 %then %do;
debug level=2;
%end;
run;
%if (&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)
or &mdebug=1
%then %do;
data _null_;infile &outref;input;putlog _infile_;run;
%end;
%mp_abort(
iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* reset options */
options &optval;
%if &outlogds ne _null_ or &mdebug=1 %then %do;
%local matchstr chopout;
%let matchstr=SASJS_LOGS_SEPARATOR_163ee17b6ff24f028928972d80a26784;
%let chopout=%sysfunc(pathname(work))/%mf_getuniquename(prefix=chop);
%mp_chop("&resp_path"
,matchvar=matchstr
,keep=LAST
,matchpoint=END
,outfile="&chopout"
,mdebug=&mdebug
)
data &outlogds;
infile "&chopout" lrecl=2000;
length line $2000;
line=_infile_;
%if &mdebug=1 %then %do;
putlog line=;
%end;
run;
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &authref;
filename &mainref;
%end;
%mend ms_runstp;
%macro ms_testservice(program,
inputfiles=0,
inputdatasets=0,
inputparams=0,
debug=0,
mdebug=0,
outlib=0,
outref=0,
outlogds=_null_
)/*/STORE SOURCE*/;
%local dbg i var ds1 fref1 chopout1 chopout2;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
/* convert inputdatasets to filerefs */
%if "&inputdatasets" ne "0" %then %do;
%if %quote(&inputfiles)=0 %then %let inputfiles=;
%do i=1 %to %sysfunc(countw(&inputdatasets,%str( )));
%let var=%scan(&inputdatasets,&i,%str( ));
%local dsref&i;
%let dsref&i=%mf_getuniquefileref();
%mp_ds2csv(&var,outref=&&dsref&i,headerformat=SASJS)
%let inputfiles=&inputfiles &&dsref&i:%scan(&var,-1,.);
%end;
%end;
/* parse the filerefs - convert to a dataset */
%let ds1=%mf_getuniquename();
data &ds1;
length fileref $8 name $32 filename $256 var $300;
if "&inputfiles" ne "0" then do;
webcount=countw("&inputfiles");
do i=1 to webcount;
var=scan("&inputfiles",i,' ');
fileref=scan(var,1,':');
name=scan(var,2,':');
filename=cats(name,'.csv');
output;
end;
end;
run;
/* execute the STP */
%let fref1=%mf_getuniquefileref();
%ms_runstp(&program
,debug=&debug
,inputparams=&inputparams
,inputfiles=&ds1
,outref=&fref1
,mdebug=&mdebug
,outlogds=&outlogds
)
/* chop out JSON section */
%local matchstr chopout;
%let matchstr=SASJS_LOGS_SEPARATOR_163ee17b6ff24f028928972d80a26784;
%let chopout=%sysfunc(pathname(work))/%mf_getuniquename(prefix=chop);
%mp_chop("%sysfunc(pathname(&fref1,F))"
,matchvar=matchstr
,keep=FIRST
,matchpoint=START
,offset=-1
,outfile="&chopout"
,mdebug=&mdebug
)
%if &outlib ne 0 %then %do;
libname &outlib json "&chopout";
%end;
%if &outref ne 0 %then %do;
filename &outref "&chopout";
%end;
%if &mdebug=0 %then %do;
filename &webref clear;
filename &fref1 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend ms_testservice;
%macro mf_existfileref(fref
)/*/STORE SOURCE*/;
%local rc;
%let rc=%sysfunc(fileref(&fref));
%if &rc=0 %then %do;
1
%end;
%else %if &rc<0 %then %do;
%put &sysmacroname: Fileref &fref exists but the underlying file does not;
1
%end;
%else %do;
0
%end;
%mend mf_existfileref;
%macro mv_getjobresult(uri=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
,result=WEBOUT_JSON
,outref=0
,outlib=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
/* validation in datastep for better character safety */
%local errmsg errflg;
data _null_;
uri=symget('uri');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
if scan(uri,-1)='state' or scan(uri,1) ne 'jobExecution' then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /jobExecution/jobs/$$$$UUID$$$$"
!!" but is actually like: &uri",'l');
end;
run;
%mp_abort(iftrue=(&errflg=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
%if &outref ne 0 and %mf_existfileref(&outref) ne 1 %then %do;
filename &outref temp;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* fetch job info */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri&uri";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%if &mdebug=1 %then %do;
data _null_;
infile &fname1 lrecl=32767;
input;
putlog _infile_;
run;
%end;
/* extract results link */
%local lib1 resuri;
%let lib1=%mf_getuniquelibref();
libname &lib1 JSON fileref=&fname1;
data _null_;
set &lib1..results;
call symputx('resuri',_&result,'l');
&dbg putlog "&sysmacroname results: " (_all_)(=);
run;
%mp_abort(iftrue=("&resuri"=".")
,mac=&sysmacroname
,msg=%str(Variable _&result did not exist in the response json)
)
/* extract results */
%local fname2;
%let fname2=%mf_getuniquefileref();
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&resuri/content?limit=10000";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
/* send one char at a time as the json can be very wide */
data _null_;
infile &fname2 recfm=n;
input char $char1. ;
putlog char $char1. @;
run;
%end;
%if &outref ne 0 %then %do;
filename &outref temp;
%mp_binarycopy(inref=&fname2,outref=&outref)
%end;
%if &outlib ne 0 %then %do;
libname &outlib JSON fileref=&fname2;
%end;
%if &mdebug=0 %then %do;
filename &fname1 clear;
filename &fname2 clear;
libname &lib1 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_getjobresult;
%macro mf_getattrn(
libds
,attr
)/*/STORE SOURCE*/;
%local dsid rc;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid = 0 %then %do;
%put %str(WARN)ING: Cannot open %trim(&libds), system message below;
%put %sysfunc(sysmsg());
-1
%end;
%else %do;
%sysfunc(attrn(&dsid,&attr))
%let rc=%sysfunc(close(&dsid));
%end;
%mend mf_getattrn;
%macro mf_nobs(libds
)/*/STORE SOURCE*/;
%mf_getattrn(&libds,NLOBS)
%mend mf_nobs;
%macro mf_existvarlist(libds, varlist
)/*/STORE SOURCE*/;
%if %str(&libds)=%str() or %str(&varlist)=%str() %then %do;
%mf_abort(msg=No value provided to libds(&libds) or varlist (&varlist)!
,mac=mf_existvarlist.sas)
%end;
%local dsid rc i var found;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid=0 %then %do;
%put %str(WARN)ING: unable to open &libds in mf_existvarlist (&dsid);
%end;
%if %sysfunc(attrn(&dsid,NVARS))=0 %then %do;
%put MF_EXISTVARLIST: No variables in &libds ;
0
%return;
%end;
%else %do i=1 %to %sysfunc(countw(&varlist));
%let var=%scan(&varlist,&i);
%if %sysfunc(varnum(&dsid,&var))=0 %then %do;
%let found=&found &var;
%end;
%end;
%let rc=%sysfunc(close(&dsid));
%if %str(&found)=%str() %then %do;
1
%end;
%else %do;
0
%put Vars not found: &found;
%end;
%mend mf_existvarlist;
/** @endcond */
%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
/** @cond */
%macro mf_existvar(libds /* 2 part dataset name */
, var /* variable name */
)/*/STORE SOURCE*/;
%local dsid rc;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid=0 %then %do;
%put %sysfunc(sysmsg());
0
%end;
%else %if %length(&var)=0 %then %do;
0
%let rc=%sysfunc(close(&dsid));
%end;
%else %do;
%sysfunc(varnum(&dsid,&var))
%let rc=%sysfunc(close(&dsid));
%end;
%mend mf_existvar;
/** @endcond */
%macro mv_getjoblog(uri=0,outref=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg libref1 libref2 loglocation fname1 fname2;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
/* validation in datastep for better character safety */
%local errmsg errflg;
data _null_;
uri=symget('uri');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
if scan(uri,-1)='state' or scan(uri,1) ne 'jobExecution' then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /jobExecution/jobs/$$$$UUID$$$$"
!!" but is actually like:"!!uri,'l');
end;
run;
%mp_abort(iftrue=(&errflg=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
%mp_abort(iftrue=(&outref=0)
,mac=&sysmacroname
,msg=%str(Output fileref should be provided)
)
%if %mf_existfileref(&outref) ne 1 %then %do;
filename &outref temp;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* prepare request*/
%let fname1=%mf_getuniquefileref();
%let fname2=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri&uri";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log loc from &uri;
data _null_;infile &fname1;input;putlog _infile_;run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..root;
call symputx('loglocation',loglocation,'l');
run;
/* validate log path*/
%let errflg=1;
%let errmsg=No loglocation entry in &fname1 fileref;
data _null_;
uri=symget('loglocation');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
else if (scan(uri,1,'/') ne 'compute' or scan(uri,2,'/') ne 'sessions')
and (scan(uri,1,'/') ne 'files' or scan(uri,2,'/') ne 'files')
then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /compute/sessions/$$$$UUID$$$$/jobs/$$$$UUID$$$$"
!!" or /files/files/$$$$UUID$$$$"
!!" but is actually like:"!!uri,'l');
end;
else do;
call symputx('errflg',0,'l');
call symputx('logloc',uri,'l');
end;
run;
%mp_abort(iftrue=(%str(&errflg)=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
/* we have a log uri - now fetch the log */
%&dbg.put &sysmacroname: querying &base_uri&logloc/content;
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&logloc/content?limit=10000";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log content from &base_uri&logloc/content;
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE=400 %then %do;
/* fetch log from parent session */
%let logloc=%substr(&logloc,1,%index(&logloc,%str(/jobs/))-1);
%&dbg.put &sysmacroname: Now querying &base_uri&logloc/log/content;
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&logloc/log/content?limit=10000";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log content from &base_uri&logloc/log/content;
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%end;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
%then %do;
%if &mdebug ne 1 %then %do; /* have already output above */
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%mp_abort(mac=&sysmacroname
,msg=%str(logfetch: &SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
data _null_;
file &outref mod;
if _n_=1 then do;
put "/** SASJS Viya Job Log Extract start: &uri **/";
end;
set &libref2..items end=last;
%if &mdebug=1 %then %do;
putlog line;
%end;
put line;
if last then do;
put "/** SASJS Viya Job Log Extract end: &uri **/";
end;
run;
%if &mdebug=0 %then %do;
filename &fname1 clear;
filename &fname2 clear;
libname &libref1 clear;
libname &libref2 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_getjoblog;
%macro mv_jobwaitfor(action
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,inds=0
,outds=work.mv_jobwaitfor
,outref=0
,raise_err=0
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&inds"="0")
,mac=&sysmacroname
,msg=%str(input dataset not provided)
)
%mp_abort(iftrue=(%mf_existvar(&inds,uri)=0)
,mac=&sysmacroname
,msg=%str(The URI variable was not found in the input dataset(&inds))
)
%mp_abort(iftrue=(%mf_existvar(&inds,_program)=0)
,mac=&sysmacroname
,msg=%str(The _PROGRAM variable was not found in the input dataset(&inds))
)
%if %mf_nobs(&inds)=0 %then %do;
%put NOTE: Zero observations in &inds, &sysmacroname will now exit;
%return;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
data _null_;
length jobparams $32767;
set &inds end=last;
call symputx(cats('joburi',_n_),substr(uri,1,55),'l');
call symputx(cats('jobname',_n_),_program,'l');
call symputx(cats('jobparams',_n_),jobparams,'l');
if last then call symputx('uricnt',_n_,'l');
run;
%local runcnt;
%if &action=ALL %then %let runcnt=&uricnt;
%else %if &action=ANY %then %let runcnt=1;
%else %let runcnt=&uricnt;
%local fname0 ;
%let fname0=%mf_getuniquefileref();
data &outds;
format _program uri $128. state $32. stateDetails $32. timestamp datetime19.
jobparams $32767.;
call missing (of _all_);
stop;
run;
%local i;
%do i=1 %to &uricnt;
%if "&&joburi&i" ne "0" %then %do;
proc http method='GET' out=&fname0 &oauth_bearer url="&base_uri/&&joburi&i";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end; ;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
%then %do;
data _null_;infile &fname0;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let status=notset;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 json fileref=&fname0;
data _null_;
length state stateDetails $32;
set &libref1..root;
call symputx('status',state,'l');
call symputx('stateDetails',stateDetails,'l');
run;
libname &libref1 clear;
%if &status=completed or &status=failed or &status=canceled %then %do;
%local plainuri;
%let plainuri=%substr(&&joburi&i,1,55);
proc sql;
insert into &outds set
_program="&&jobname&i",
uri="&plainuri",
state="&status",
stateDetails=symget("stateDetails"),
timestamp=datetime(),
jobparams=symget("jobparams&i");
%let joburi&i=0; /* do not re-check */
/* fetch log */
%if %str(&outref) ne 0 %then %do;
%mv_getjoblog(uri=&plainuri,outref=&outref,mdebug=&mdebug)
%end;
%end;
%else %if &status=idle or &status=pending or &status=running %then %do;
data _null_;
call sleep(1,1);
run;
%end;
%else %do;
%mp_abort(mac=&sysmacroname
,msg=%str(status &status not expected!!)
)
%end;
%if (&raise_err) %then %do;
%if (&status = canceled or &status = failed or %length(&stateDetails)>0)
%then %do;
%if ("&stateDetails" = "%str(war)ning") %then %let SYSCC=4;
%else %let SYSCC=5;
%put %str(ERR)OR: Job &&jobname&i. did not complete. &stateDetails;
%return;
%end;
%end;
%end;
%if &i=&uricnt %then %do;
%local goback;
%let goback=0;
proc sql noprint;
select count(*) into:goback from &outds;
%if &goback lt &runcnt %then %let i=0;
%end;
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname0 clear;
%end;
%mend mv_jobwaitfor;
%macro mf_isblank(param
)/*/STORE SOURCE*/;
%sysevalf(%superq(param)=,boolean)
%mend mf_isblank;
%macro mv_getfoldermembers(root=/
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,outds=mv_getfolders
);
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%if %mf_isblank(&root)=1 %then %let root=/;
options noquotelenmax;
/* request the client details */
%local fname1 libref1;
%let fname1=%mf_getuniquefileref();
%let libref1=%mf_getuniquelibref();
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%if "&root"="/" %then %do;
/* if root just list root folders */
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/rootFolders?limit=1000";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
libname &libref1 JSON fileref=&fname1;
data &outds;
set &libref1..items;
run;
%end;
%else %do;
/* first get parent folder id */
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&root";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
libname &libref1 JSON fileref=&fname1;
/* now get the followon link to list members */
%local href cnt;
%let cnt=0;
data _null_;
length rel href $512;
call missing(rel,href);
set &libref1..links;
if rel='members' then do;
url=cats("'","&base_uri",href,"?limit=10000'");
call symputx('href',url,'l');
call symputx('cnt',1,'l');
end;
run;
%if &cnt=0 %then %do;
%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;
%return;
%end;
%local fname2 libref2;
%let fname2=%mf_getuniquefileref();
%let libref2=%mf_getuniquelibref();
proc http method='GET' out=&fname2 &oauth_bearer
url=%unquote(%superq(href));
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
libname &libref2 JSON fileref=&fname2;
data &outds;
length id $36 name $128 uri $64 type $32 description $256;
if _n_=1 then call missing (of _all_);
set &libref2..items;
run;
filename &fname2 clear;
libname &libref2 clear;
%end;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
%mend mv_getfoldermembers;
%macro mv_jobexecute(path=0
,name=0
,contextName=SAS Job Execution compute context
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,paramstring=0
,outds=work.mv_jobexecute
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&path"="0")
,mac=&sysmacroname
,msg=%str(Path not provided)
)
%mp_abort(iftrue=("&name"="0")
,mac=&sysmacroname
,msg=%str(Job Name not provided)
)
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
data;run;
%local foldermembers;
%let foldermembers=&syslast;
%mv_getfoldermembers(root=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,outds=&foldermembers
)
%local joburi;
%let joburi=0;
data _null_;
length name uri $512;
call missing(name,uri);
set &foldermembers;
if name="&name" and uri=:'/jobDefinitions/definitions'
then call symputx('joburi',uri);
run;
%mp_abort(iftrue=("&joburi"="0")
,mac=&sysmacroname
,msg=%str(Job &path/&name not found)
)
/* prepare request*/
%local fname0 fname1;
%let fname0=%mf_getuniquefileref();
%let fname1=%mf_getuniquefileref();
data _null_;
file &fname0;
length joburi contextname $128 paramstring $32765;
joburi=quote(trim(symget('joburi')));
contextname=quote(trim(symget('contextname')));
_program=quote("&path/&name");
paramstring=symget('paramstring');
put '{"jobDefinitionUri":' joburi ;
put ' ,"arguments":{"_contextName":' contextname;
put ' ,"_program":' _program;
if paramstring ne "0" then do;
put ' ,' paramstring;
end;
put '}}';
run;
proc http method='POST' in=&fname0 out=&fname1 &oauth_bearer
url="&base_uri/jobExecution/jobs";
headers "Content-Type"="application/vnd.sas.job.execution.job.request+json"
"Accept"="application/vnd.sas.job.execution.job+json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname0;input;putlog _infile_;run;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%local libref;
%let libref=%mf_getuniquelibref();
libname &libref JSON fileref=&fname1;
data &outds;
set &libref..links;
_program="&path/&name";
run;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname0 clear;
filename &fname1 clear;
libname &libref;
%end;
%mend mv_jobexecute;
%macro mv_jobflow(inds=0,outds=work.mv_jobflow
,maxconcurrency=8
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,outref=0
,raise_err=0
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%put inds vars:;
data _null_;
set &inds;
putlog (_all_)(=);
run;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&inds"="0")
,mac=&sysmacroname
,msg=%str(Input dataset was not provided)
)
%mp_abort(iftrue=(%mf_existVarList(&inds,_PROGRAM)=0)
,mac=&sysmacroname
,msg=%str(The _PROGRAM column must exist on input dataset &inds)
)
%mp_abort(iftrue=(&maxconcurrency<1)
,mac=&sysmacroname
,msg=%str(The maxconcurrency variable should be a positive integer)
)
/* set defaults if not provided */
%if %mf_existVarList(&inds,_CONTEXTNAME FLOW_ID)=0 %then %do;
data &inds;
%if %mf_existvarList(&inds,_CONTEXTNAME)=0 %then %do;
length _CONTEXTNAME $128;
retain _CONTEXTNAME "SAS Job Execution compute context";
%end;
%if %mf_existvarList(&inds,FLOW_ID)=0 %then %do;
retain FLOW_ID 0;
%end;
set &inds;
&dbg. putlog (_all_)(=);
run;
%end;
%local missings;
proc sql noprint;
select count(*) into: missings
from &inds
where flow_id is null or _program is null;
%mp_abort(iftrue=(&missings>0)
,mac=&sysmacroname
,msg=%str(input dataset has &missings missing values for FLOW_ID or _PROGRAM)
)
%if %mf_nobs(&inds)=0 %then %do;
%put No observations in &inds! Leaving macro &sysmacroname;
%return;
%end;
/* ensure output table is available */
data &outds;run;
proc sql;
drop table &outds;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* get flows */
proc sort data=&inds;
by flow_id;
run;
data _null_;
set &inds (keep=flow_id) end=last;
by flow_id;
if last.flow_id then do;
cnt+1;
call symputx(cats('flow',cnt),flow_id,'l');
end;
if last then call symputx('flowcnt',cnt,'l');
run;
/* prepare temporary datasets and frefs */
%local fid jid jds jjson jdsapp jdsrunning jdswaitfor jfref;
data;run;%let jds=&syslast;
data;run;%let jjson=&syslast;
data;run;%let jdsapp=&syslast;
data;run;%let jdsrunning=&syslast;
data;run;%let jdswaitfor=&syslast;
%let jfref=%mf_getuniquefileref();
/* start loop */
%do fid=1 %to &flowcnt;
%if not ( &raise_err and &syscc ) %then %do;
%put preparing job attributes for flow &&flow&fid;
%local jds jcnt;
data &jds(drop=_contextName _program);
set &inds(where=(flow_id=&&flow&fid));
if _contextName='' then _contextName="SAS Job Execution compute context";
call symputx(cats('job',_n_),_program,'l');
call symputx(cats('context',_n_),_contextName,'l');
call symputx('jcnt',_n_,'l');
&dbg. if _n_= 1 then putlog "Loop &fid";
&dbg. putlog (_all_)(=);
run;
%put exporting job variables in json format;
%do jid=1 %to &jcnt;
data &jjson;
set &jds;
if _n_=&jid then do;
output;
stop;
end;
run;
proc json out=&jfref;
export &jjson / nosastags fmtnumeric;
run;
data _null_;
infile &jfref lrecl=32767;
input;
jparams=cats('jparams',symget('jid'));
call symputx(jparams,substr(_infile_,3,length(_infile_)-4));
run;
%local jobuid&jid;
%let jobuid&jid=0; /* used in next loop */
%end;
%local concurrency completed;
%let concurrency=0;
%let completed=0;
proc sql; drop table &jdsrunning;
%do jid=1 %to &jcnt;
/**
* now we can execute the jobs up to the maxconcurrency setting
*/
%if "&&job&jid" ne "0" %then %do; /* this var is zero if job finished */
/* check to see if the job finished in the previous round */
%if %sysfunc(exist(&outds))=1 %then %do;
%local jobcheck; %let jobcheck=0;
proc sql noprint;
select count(*) into: jobcheck
from &outds where uuid="&&jobuid&jid";
%if &jobcheck>0 %then %do;
%put &&job&jid in flow &fid with uid &&jobuid&jid completed!;
%let job&jid=0;
%end;
%end;
/* check if job was triggered and, if
so, if we have enough slots to run? */
%if ("&&jobuid&jid"="0") and (&concurrency<&maxconcurrency) %then %do;
/* But only start if no issues detected so far */
%if not ( &raise_err and &syscc ) %then %do;
%local jobname jobpath;
%let jobname=%scan(&&job&jid,-1,/);
%let jobpath=
%substr(&&job&jid,1,%length(&&job&jid)-%length(&jobname)-1);
%put executing &jobpath/&jobname with paramstring &&jparams&jid;
%mv_jobexecute(path=&jobpath
,name=&jobname
,paramstring=%superq(jparams&jid)
,outds=&jdsapp
,contextname=&&context&jid
)
data &jdsapp;
format jobparams $32767.;
set &jdsapp(where=(method='GET' and rel='state'));
jobparams=symget("jparams&jid");
/* uri here has the /state suffix */
uuid=scan(uri,-2,'/');
call symputx("jobuid&jid",uuid,'l');
run;
proc append base=&jdsrunning data=&jdsapp;
run;
%let concurrency=%eval(&concurrency+1);
/* sleep one second after every request to smooth the impact */
data _null_;
call sleep(1,1);
run;
%end;
%else %do; /* Job was skipped due to problems */
%put jobid &&job&jid in flow &fid skipped due to SYSCC (&syscc);
%let completed = %eval(&completed+1);
%let job&jid=0; /* Indicate job has finished */
%end;
%end;
%end;
%if &jid=&jcnt %then %do;
/* we are at the end of the loop - check which jobs have finished */
%mv_jobwaitfor(ANY,inds=&jdsrunning,outds=&jdswaitfor,outref=&outref
,raise_err=&raise_err,mdebug=&mdebug)
%local done;
%let done=%mf_nobs(&jdswaitfor);
%if &done>0 %then %do;
%let completed=%eval(&completed+&done);
%let concurrency=%eval(&concurrency-&done);
data &jdsapp;
set &jdswaitfor;
flow_id=&&flow&fid;
uuid=scan(uri,-1,'/');
run;
proc append base=&outds data=&jdsapp;
run;
%end;
proc sql;
delete from &jdsrunning
where uuid in (select uuid from &outds
where state in ('canceled','completed','failed')
);
/* loop again if jobs are left */
%if &completed < &jcnt %then %do;
%let jid=0;
%put looping flow &fid again;
%put &completed of &jcnt jobs completed, &concurrency jobs running;
%end;
%end;
%end;
%end;
%else %do;
%put Flow &&flow&fid skipped due to SYSCC (&syscc);
%end;
/* back up and execute the next flow */
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_jobflow;
%macro mx_testservice(program,
inputfiles=0,
inputdatasets=0,
inputparams=0,
debug=log,
mdebug=0,
outlib=0,
outref=0,
viyaresult=WEBOUT_JSON,
viyacontext=SAS Job Execution compute context
);
%local dbg pcnt fref1 fref2 webref webrefpath i webcount var platform;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
/* sanitise inputparams */
%let pcnt=0;
%if &inputparams ne 0 %then %do;
data _null_;
set &inputparams;
if not nvalid(name,'v7') then putlog (_all_)(=);
else if name in (
'program','inputfiles','inputparams','debug','outlib','outref'
) then putlog (_all_)(=);
else do;
x+1;
call symputx(name,quote(cats(value)),'l');
call symputx(cats('pval',x),name,'l');
call symputx('pcnt',x,'l');
end;
run;
%mp_abort(iftrue= (%mf_nobs(&inputparams) ne &pcnt)
,mac=&sysmacroname
,msg=%str(Invalid values in &inputparams)
)
%end;
/* convert inputdatasets to filerefs */
%if "&inputdatasets" ne "0" %then %do;
%if %quote(&inputfiles)=0 %then %let inputfiles=;
%do i=1 %to %sysfunc(countw(&inputdatasets,%str( )));
%let var=%scan(&inputdatasets,&i,%str( ));
%local dsref&i;
%let dsref&i=%mf_getuniquefileref();
%mp_ds2csv(&var,outref=&&dsref&i,headerformat=SASJS)
%let inputfiles=&inputfiles &&dsref&i:%scan(&var,-1,.);
%end;
%end;
%let platform=%mf_getplatform();
%let fref1=%mf_getuniquefileref();
%let fref2=%mf_getuniquefileref();
%let webref=%mf_getuniquefileref();
%let webrefpath=%sysfunc(pathname(work))/%mf_getuniquename();
/* mp_chop requires a physical path as input */
filename &webref "&webrefpath";
%if &platform=SASMETA %then %do;
/* parse the input files */
%if %quote(&inputfiles) ne 0 %then %do;
%let webcount=%sysfunc(countw(&inputfiles));
%put &=webcount;
%do i=1 %to &webcount;
%let var=%scan(&inputfiles,&i,%str( ));
%local webfref&i webname&i;
%let webref&i=%scan(&var,1,%str(:));
%let webname&i=%scan(&var,2,%str(:));
%put webref&i=&&webref&i;
%put webname&i=&&webname&i;
%end;
%end;
%else %let webcount=0;
proc stp program="&program";
inputparam _program="&program"
%do i=1 %to &webcount;
%if &webcount=1 %then %do;
_webin_fileref="&&webref&i"
_webin_name="&&webname&i"
%end;
%else %do;
_webin_fileref&i="&&webref&i"
_webin_name&i="&&webname&i"
%end;
%end;
_webin_file_count="&webcount"
_debug="&debug"
%do i=1 %to &pcnt;
/* resolve name only, proc stp fetches value */
&&pval&i=&&&&&&pval&i
%end;
;
%do i=1 %to &webcount;
inputfile &&webref&i;
%end;
outputfile _webout=&webref;
run;
data _null_;
infile &webref;
file &fref1;
input;
length line $10000;
if index(_infile_,'>>weboutBEGIN<<') then do;
line=tranwrd(_infile_,'>>weboutBEGIN<<','');
put line;
end;
else if index(_infile_,'>>weboutEND<<') then do;
line=tranwrd(_infile_,'>>weboutEND<<','');
put line;
stop;
end;
else put _infile_;
run;
data _null_;
infile &fref1;
input;
put _infile_;
run;
%if &outlib ne 0 %then %do;
libname &outlib json (&fref1);
%end;
%if &outref ne 0 %then %do;
filename &outref temp;
%mp_binarycopy(inref=&webref,outref=&outref)
%end;
%end;
%else %if &platform=SASVIYA %then %do;
/* prepare inputparams */
%local ds1;
%let ds1=%mf_getuniquename();
%if "&inputparams" ne "0" %then %do;
proc transpose data=&inputparams out=&ds1;
id name;
var value;
run;
%end;
%else %do;
data &ds1;run;
%end;
/* parse the input files - convert to sasjs params */
%local webcount i var sasjs_tables;
%if %quote(&inputfiles) ne 0 %then %do;
%let webcount=%sysfunc(countw(&inputfiles));
%put &=webcount;
%do i=1 %to &webcount;
%let var=%scan(&inputfiles,&i,%str( ));
%local webfref&i webname&i sasjs&i.data;
%let webref&i=%scan(&var,1,%str(:));
%let webname&i=%scan(&var,2,%str(:));
%put webref&i=&&webref&i;
%put webname&i=&&webname&i;
%let sasjs_tables=&sasjs_tables &&webname&i;
data _null_;
infile &&webref&i lrecl=32767;
input;
if _n_=1 then call symputx("sasjs&i.data",_infile_);
else call symputx(
"sasjs&i.data",cats(symget("sasjs&i.data"),'0D0A'x,_infile_)
);
putlog "&sysmacroname infile: " _infile_;
run;
data &ds1;
set &ds1;
length sasjs&i.data $32767 sasjs_tables $1000;
sasjs&i.data=symget("sasjs&i.data");
sasjs_tables=symget("sasjs_tables");
run;
%end;
%end;
%else %let webcount=0;
data &ds1;
retain _program "&program";
retain _contextname "&viyacontext";
set &ds1;
putlog "&sysmacroname inputparams:";
putlog (_all_)(=);
run;
%mv_jobflow(inds=&ds1
,maxconcurrency=1
,outds=work.results
,outref=&fref1
,mdebug=&mdebug
)
/* show the log */
data _null_;
infile &fref1;
input;
putlog _infile_;
run;
/* get the uri to fetch results */
data _null_;
set work.results;
call symputx('uri',uri);
putlog "&sysmacroname: fetching results for " uri;
run;
/* fetch results from webout.json */
%mv_getjobresult(uri=&uri,
result=&viyaresult,
outref=&outref,
outlib=&outlib,
mdebug=&mdebug
)
%end;
%else %if &platform=SASJS %then %do;
%ms_testservice(&program
,inputfiles=&inputfiles
,inputdatasets=&inputdatasets
,inputparams=&inputparams
,debug=&debug
,mdebug=&mdebug
,outlib=&outlib
,outref=&outref
)
%end;
%else %do;
%put %str(ERR)OR: Unrecognised platform: &platform;
%end;
%if &mdebug=0 %then %do;
filename &fref1 clear;
%if &platform ne SASJS %then %do;
filename &fref2 clear;
filename &webref clear;
%end;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mx_testservice;
* BuildInit start;
/**
@file buildinitviya.sas
@brief initialisation for viya build program
**/
options nonotes nomprint;
* BuildInit end;
%let path=services;
%let filename=clickme.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1ldGEgbmFtZT0iZGVzY3Jp'@;
put 'cHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iPgogICAgPG1ldGEgaXRlbXByb3A9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZp'@;
put 'ZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8vZGVtby5kYXRh'@;
put 'Y29udHJvbGxlci5pbyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9u'@;
put 'IiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyI+CgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQi'@;
put 'IGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CiAgICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iL1NBU0pvYkV4ZWN1'@;
put 'dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2Zhdmljb24uaWNvIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3N0eWxlcy41OWRjMTE5NDdiODMxNDNj'@;
put 'LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIg'@;
put 'U0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNlci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1'@;
put 'cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3Rh'@;
put 'Z2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAgICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxib2R5IGNsYXNzPSJtLTAiPjxzYXNqcyBzZXJ2ZXJ1cmw9'@;
put 'IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTVklZQSIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91'@;
put 'cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI+CiAgPC9zYXNqcz4KCiAgCiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSIvU0FT'@;
put 'Sm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9ydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3Bv'@;
put 'bHlmaWxscy44N2RiYmQzZmFhYmVkNTEzLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9zY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPSIiPjwvc2NyaXB0Pjxz'@;
put 'Y3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9tYWluLjJjMWRkNWI0YTg5NjI4MTIuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+CgoKICAgIDwhLS0gCiAgICAgIFRvIHByZXZlbnQgcmVkaXJlY3RzIC8gcHJlc2VydmUgdGhl'@;
put 'IFVSTCB3aGVuIHN0cmVhbWluZyAKICAgICAgSFRNTCBmcm9tIFZpeWEsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgX2RlYnVnPTIgcGFyYW1ldGVyCiAgICAgIHdoaWNoIHdpbGwgc2VydmUgdGhlIGNvbnRlbnQgaW4gYW4gaWZyYW1lLiAgVGhlIGZvbGxvd2luZyAKICAgICAgY29kZSB3aWxs'@;
put 'IHRoZW4gbW9kaWZ5IHRoZSBwYXJlbnQgaWZyYW1lIHRvIHNlcnZlIHRoZSBjb250ZW50CiAgICAgIGluIGZ1bGwgc2NyZWVuLgogICAgLS0+CiAgICA8c2NyaXB0PgogICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpewogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlPSJoZWlnaHQ6'@;
put 'MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIjsKICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFsbG93ZnVsbHNjcmVlbiIsIiIpCiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJmcmFtZWJvcmRlciIsIjAiKQogICAgICB3aW5k'@;
put 'b3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpCiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW53aWR0aCIsIjAiKQogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwiYXV0byIp'@;
put 'CiAgICAgIHdpbmRvdy5mb2N1cygpCiAgICB9CiAgICA8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let path=services/admin;
%let service=exportconfig;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_ds2cards(base_ds, tgt_ds=';
put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"';
put ',maxobs=max';
put ',random_sample=NO';
put ',showlog=YES';
put ',outencoding=';
put ',append=NO';
put ')/*/STORE SOURCE*/;';
put '%local i setds nvars;';
put '%if not %sysfunc(exist(&base_ds)) %then %do;';
put '%put %str(WARN)ING: &base_ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;';
put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;';
put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);';
put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";';
put '%if ("&append" = "" or "&append" = "NO") %then %let append=;';
put '%else %let append=mod;';
put '/* get varcount */';
put '%let nvars=0;';
put 'proc sql noprint;';
put 'select count(*) into: nvars from dictionary.columns';
put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";';
put '%if &nvars=0 %then %do;';
put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;';
put '%return;';
put '%end;';
put '/* get indexes */';
put 'proc sort';
put 'data=sashelp.vindex(';
put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")';
put ')';
put 'out=_data_;';
put 'by indxname indxpos;';
put 'run;';
put '%local indexes;';
put 'data _null_;';
put 'set &syslast end=last;';
put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');';
put 'by indxname indxpos;';
put 'length vars $32767 nom uni $8;';
put 'retain vars;';
put 'if first.indxname then do;';
put 'idxcnt+1;';
put 'nom='''';';
put 'uni='''';';
put 'vars=name;';
put 'end;';
put 'else vars=catx('' '',vars,name);';
put 'if last.indxname then do;';
put 'if nomiss=''yes'' then nom=''/nomiss'';';
put 'if unique=''yes'' then uni=''/unique'';';
put 'call symputx(''indexes''';
put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)';
put ',''l'');';
put 'end;';
put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');';
put 'run;';
put 'data;run;';
put '%let setds=&syslast;';
put 'proc sql';
put '%if %datatyp(&maxobs)=NUMERIC %then %do;';
put 'outobs=&maxobs;';
put '%end;';
put ';';
put 'create table &setds as select * from &base_ds';
put '%if &random_sample=YES %then %do;';
put 'order by ranuni(42)';
put '%end;';
put ';';
put 'reset outobs=max;';
put 'create table datalines1 as';
put 'select name,type,length,varnum,format,label from dictionary.columns';
put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"';
put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";';
put '/**';
put 'Due to long decimals cannot use best. format';
put 'So - use bestd. format and then use character functions to strip trailing';
put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets';
put 'note2err when there are missings.';
put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0';
put ',put(VARIABLE,best32.)';
put ',substrn(put(VARIABLE,bestd32.),1';
put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));';
put '**/';
put 'data datalines_2;';
put 'format dataline $32000.;';
put 'set datalines1 (where=(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));';
put 'if type=''num'' then dataline=';
put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0';
put ',put('',name,'',best32.-l)';
put ',substrn(put('',name,'',bestd32.-l),1';
put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');';
put '/**';
put '* binary data must be converted, to store in text format. It is identified';
put '* by the presence of the $HEX keyword in the format.';
put '*/';
put 'else if upcase(format)=:''$HEX'' then';
put 'dataline=cats(''put(trim('',name,''),'',format,'')'');';
put '/**';
put '* There is no easy way to store line breaks in a cards file.';
put '* To discuss this, use: https://github.com/sasjs/core/issues/80';
put '* Removing all nonprintables with kw (keep writeable)';
put '*/';
put 'else dataline=cats(''compress('',name,'', ,"kw")'');';
put 'run;';
put 'proc sql noprint;';
put 'select dataline into: datalines separated by '','' from datalines_2;';
put '%local';
put 'process_dttm_flg';
put 'valid_from_dttm_flg';
put 'valid_to_dttm_flg';
put ';';
put '%let process_dttm_flg = N;';
put '%let valid_from_dttm_flg = N;';
put '%let valid_to_dttm_flg = N;';
put 'data _null_;';
put 'set datalines1 ;';
put '/* build attrib statement */';
put 'if type=''char'' then type2=''$'';';
put 'if strip(format) ne '''' then format2=cats(''format='',format);';
put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));';
put 'str1=catx('' '',(put(name,$33.)||''length='')';
put ',put(cats(type2,length),$7.)||format2,label2);';
put '/* Build input statement */';
put 'if upcase(format)=:''$HEX'' then type3='':''!!format;';
put 'else if type=''char'' then type3='':$char.'';';
put 'str2=put(name,$33.)||type3;';
put 'if(upcase(name) = "PROCESSED_DTTM") then';
put 'call symputx("process_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_FROM_DTTM") then';
put 'call symputx("valid_from_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_TO_DTTM") then';
put 'call symputx("valid_to_dttm_flg", "Y", "L");';
put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");';
put 'call symputx(cats("input_stmt_", put(_N_, 8.))';
put ', ifc(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");';
put 'run;';
put 'data _null_;';
put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;';
put 'length __attrib $32767;';
put 'if _n_=1 then do;';
put 'put ''/**'';';
put 'put '' @file'';';
put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";';
put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";';
put 'put " Source: https://github.com/sasjs/core";';
put 'put '' @cond '';';
put 'put ''**/'';';
put 'put "data &tgt_ds &indexes;";';
put 'put "attrib ";';
put '%do i = 1 %to &nvars;';
put '__attrib=symget("attrib_stmt_&i");';
put 'put __attrib;';
put '%end;';
put 'put ";";';
put '%if &process_dttm_flg. eq Y %then %do;';
put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';';
put '%end;';
put '%if &valid_from_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_FROM_DTTM &low_date;'';';
put '%end;';
put '%if &valid_to_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_TO_DTTM &high_date;'';';
put '%end;';
put 'if __nobs=0 then do;';
put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';';
put 'put ''stop;'';';
put 'put ''run;'';';
put 'end;';
put 'else do;';
put 'put "infile cards dsd;";';
put 'put "input ";';
put '%do i = 1 %to &nvars.;';
put '%if(%length(&&input_stmt_&i..)) %then';
put 'put " &&input_stmt_&i..";';
put ';';
put '%end;';
put 'put ";";';
put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';';
put 'put "datalines4;";';
put 'end;';
put 'end;';
put 'set &setds end=__lastobs nobs=__nobs;';
put '/* remove all formats for write purposes - some have long underlying decimals */';
put 'format _numeric_ best30.29;';
put 'length __dataline $32767;';
put '__dataline=catq(''cqtmb'',&datalines);';
put 'put __dataline;';
put 'if __lastobs then do;';
put 'put '';;;;'';';
put 'put ''run;'';';
put 'put ''/** @endcond **/'';';
put 'stop;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &setds;';
put 'quit;';
put '%if &showlog=YES %then %do;';
put 'data _null_;';
put 'infile &cards_file lrecl=32767;';
put 'input;';
put 'put _infile_;';
put 'run;';
put '%end;';
put '%put NOTE: CARDS FILE SAVED IN:;';
put '%put NOTE-;%put NOTE-;';
put '%put NOTE- %sysfunc(dequote(&cards_file.));';
put '%put NOTE-;%put NOTE-;';
put '%mend mp_ds2cards;';
put '/** @endcond **/';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Downloads zip file of DC customer configurations';
put '@details Zip contains several excel files, containing the customer specific';
put '(non-DC) configurations. Useful when migrating to a new instance of';
put 'Data Controller.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li mp_ds2cards.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let work=%sysfunc(pathname(work));';
put '/* excel does not work in all envs */';
put '%let mime=application/vnd.ms-excel;';
put '%let dbms=EXCEL;';
put '%let mime=application/csv;';
put '%let dbms=CSV;';
put '%let ext=csv;';
put '%macro conditional_export(ds);';
put '%if %mf_nobs(&ds)>0 %then %do;';
put 'PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext"';
put 'DBMS=&dbms REPLACE;';
put 'RUN;';
put 'ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime";';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%nrstr(syscc=&syscc after &ds prep)';
put ')';
put '%mend conditional_export;';
put 'ods package(ProdOutput) open nopf;';
put 'data MPE_ALERTS;';
put 'set &mpelib..MPE_ALERTS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_ALERTS)';
put 'data MPE_COLUMN_LEVEL_SECURITY;';
put 'set &mpelib..MPE_COLUMN_LEVEL_SECURITY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'where also CLS_LIBREF ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_COLUMN_LEVEL_SECURITY)';
put 'data MPE_CONFIG;';
put 'set &mpelib..MPE_CONFIG;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_CONFIG)';
put 'data MPE_DATADICTIONARY;';
put 'set &mpelib..MPE_DATADICTIONARY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'if DD_SOURCE=:"&mpelib" then do;';
put '/* nothing */';
put 'end;';
put 'else output;';
put 'run;';
put '%conditional_export(MPE_DATADICTIONARY)';
put 'data MPE_EMAILS;';
put 'set &mpelib..MPE_EMAILS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_EMAILS)';
put 'data MPE_EXCEL_CONFIG;';
put 'set &mpelib..MPE_EXCEL_CONFIG;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_EXCEL_CONFIG)';
put 'data MPE_GROUPS;';
put 'set &mpelib..MPE_GROUPS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_GROUPS)';
put 'data MPE_ROW_LEVEL_SECURITY;';
put 'set &mpelib..MPE_ROW_LEVEL_SECURITY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_ROW_LEVEL_SECURITY)';
put 'data MPE_SECURITY;';
put 'set &mpelib..MPE_SECURITY;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_SECURITY)';
put 'data MPE_SELECTBOX;';
put 'set &mpelib..MPE_SELECTBOX;';
put 'where &dc_dttmtfmt. le ver_to_dttm;';
put 'where also select_lib ne "&mpelib";';
put 'drop ver_: selectbox_rk;';
put 'run;';
put '%conditional_export(MPE_SELECTBOX)';
put 'data MPE_TABLES;';
put 'set &mpelib..MPE_TABLES;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'where also LIBREF ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_TABLES)';
put 'data MPE_VALIDATIONS;';
put 'set &mpelib..MPE_VALIDATIONS;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'where also BASE_LIB ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_VALIDATIONS)';
put '/* finish up zip file */';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name="DCBACKUP.zip" archive_path="&work");';
put 'ods package(ProdOutput) close;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%nrstr(syscc=&syscc after zip prep)';
put ')';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&work/DCBACKUP.zip)';
put ',outname=DCBACKUP.zip';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=exportdb;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_existfileref(fref';
put ')/*/STORE SOURCE*/;';
put '%local rc;';
put '%let rc=%sysfunc(fileref(&fref));';
put '%if &rc=0 %then %do;';
put '1';
put '%end;';
put '%else %if &rc<0 %then %do;';
put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;';
put '1';
put '%end;';
put '%else %do;';
put '0';
put '%end;';
put '%mend mf_existfileref;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema=';
put ',applydttm=NO';
put ')/*/STORE SOURCE*/;';
put '/* check fileref is assigned */';
put '%if %mf_existfileref(&fref)=0 %then %do;';
put 'filename &fref temp ;';
put '%end;';
put '%if %length(&libref)=0 %then %let libref=WORK;';
put '%let flavour=%upcase(&flavour);';
put 'proc sql noprint;';
put 'create table _data_ as';
put 'select * from dictionary.tables';
put 'where upcase(libname)="%upcase(&libref)"';
put 'and memtype=''DATA'' /* views not currently supported */';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local tabinfo; %let tabinfo=&syslast;';
put 'create table _data_ as';
put 'select * from dictionary.columns';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local colinfo; %let colinfo=&syslast;';
put '%local dsnlist;';
put 'select distinct upcase(memname) into: dsnlist';
put 'separated by '' ''';
put 'from &syslast';
put ';';
put 'create table _data_ as';
put 'select * from dictionary.indexes';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put 'order by idxusage, indxname, indxpos';
put ';';
put '%local idxinfo; %let idxinfo=&syslast;';
put '/* Extract all Primary Key and Unique data constraints */';
put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)';
put '%local colconst; %let colconst=&syslast;';
put '%macro addConst();';
put '%global constraints_used;';
put 'data _null_;';
put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;';
put 'set &colconst(';
put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))';
put ') end=last;';
put 'file &fref mod;';
put 'by constraint_type constraint_name;';
put 'retain constraints_used;';
put 'constraint_name_orig=constraint_name;';
put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';';
put 'else ctype=strip(constraint_type);';
put '%if &flavour=TSQL %then %do;';
put 'column_name=catt(''['',column_name,'']'');';
put 'constraint_name=catt(''['',constraint_name,'']'');';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'column_name=catt(''"'',column_name,''"'');';
put 'constraint_name=catt(''"'',constraint_name,''"'');';
put '%end;';
put 'if first.constraint_name then do;';
put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);';
put 'put " ,CONSTRAINT " constraint_name ctype "(" ;';
put 'put '' '' column_name;';
put 'end;';
put 'else put '' ,'' column_name;';
put 'if last.constraint_name then do;';
put 'put " )";';
put 'call symput(''constraints_used'',strip(constraints_used));';
put 'end;';
put 'run;';
put '%put &=constraints_used;';
put '%mend addConst;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";';
put 'run;';
put '%local x curds;';
put '%if &flavour=SAS %then %do;';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";';
put 'put "proc sql;";';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'length lab $1024 typ $20;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table &libref..&curds(";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view &libref..&curds(";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'if length(format)>1 then fmt=" format="!!cats(format);';
put 'if length(label)>1 then';
put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");';
put 'if notnull=''yes'' then notnul='' not null'';';
put 'if type=''char'' then typ=cats(''char('',length,'')'');';
put 'else if length ne 8 then typ=''num length=''!!cats(length);';
put 'else typ=''num'';';
put 'put name typ fmt notnul lab;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '/* ds=cats(libname,''.'',memname); */';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;';
put 'put '' '' name ;';
put 'end;';
put 'else put '' ,'' name ;';
put '*else put '' ,'' name ;';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '/*';
put 'ods output IntegrityConstraints=ic;';
put 'proc contents data=testali out2=info;';
put 'run;';
put '*/';
put '%end;';
put '%end;';
put '%else %if &flavour=TSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''SQLSVR'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* TSQL Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table [&schema].[&curds](";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view [&schema].[&curds](";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';';
put '%end;';
put 'else if type=''num'' then fmt=''[decimal](18,2)'';';
put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';';
put 'else fmt=cats(''[varchar](max)'');';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put 'put "[" name +(-1) "]" fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '*ds=cats(libname,''.'',memname);';
put 'if first.indxname then do;';
put '/* add nonclustered in case of multiple unique indexes */';
put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';';
put 'put '' ['' name +(-1) '']'';';
put 'end;';
put 'else put '' ,['' name +(-1) '']'';';
put 'if last.indxname then do;';
put 'put '' )'';';
put 'end;';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'put '')'';';
put 'put ''GO'';';
put 'run;';
put '/* add extended properties for labels */';
put 'data _null_;';
put 'file &fref mod;';
put 'length nm $64 lab $1024;';
put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;';
put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");';
put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");';
put 'put '' '';';
put 'put "EXEC sys.sp_addextendedproperty ";';
put 'put " @name=N''MS_Description'',@value=" lab ;';
put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";';
put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";';
put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;';
put 'if last then put ''GO'';';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''POSTGRES'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put 'data _null_;';
put 'file &fref mod;';
put 'put "CREATE SCHEMA &schema;";';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put '%local curdsvarcount;';
put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);';
put '%if &curdsvarcount>1600 %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &libref..&curds contains &curdsvarcount vars */";';
put 'put "/* Postgres cannot create tables with over 1600 vars */";';
put 'put "/* No DDL will be generated for this table";';
put 'run;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* Postgres Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'length fmt $32;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "CREATE TABLE &schema..&curds (";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "CREATE VIEW &schema..&curds (";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';';
put '%end;';
put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';';
put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put '/* quote column names in case they represent reserved words */';
put 'name2=quote(trim(name));';
put 'put name2 fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";';
put 'put '' "'' name +(-1) ''"'' ;';
put 'end;';
put 'else put '' ,"'' name +(-1) ''"'';';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%if %upcase(&showlog)=YES %then %do;';
put 'options ps=max;';
put 'data _null_;';
put 'infile &fref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_getddl;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max';
put ',applydttm=YES';
put ')/*/STORE SOURCE*/;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WAR)NING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WAR)NING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%let flavour=%upcase(&flavour);';
put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;';
put '%put %str(WAR)NING: &flavour is not supported;';
put '%return;';
put '%end;';
put '%if &outref=0 %then %do;';
put '%put %str(WAR)NING: Please provide a fileref;';
put '%return;';
put '%end;';
put '%if %mf_existfileref(&outref)=0 %then %do;';
put 'filename &outref temp lrecl=66000;';
put '%end;';
put '%if &schema=0 %then %let schema=;';
put '%else %let schema=&schema..;';
put '%if &outds=0 %then %let outds=%scan(&ds,2,.);';
put '%local nobs;';
put 'proc sql noprint;';
put 'select count(*) into: nobs TRIMMED from &ds;';
put '%if &nobs=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'put "/* No rows found in &ds */";';
put 'run;';
put '%end;';
put '%local vars;';
put '%let vars=%mf_getvarcount(&ds);';
put '%if &vars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'put "/* No columns found in &schema.&ds */";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &vars>1600 and &flavour=PGSQL %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &schema.&ds contains &vars vars */";';
put 'put "/* Postgres cannot handle tables with over 1600 vars */";';
put 'put "/* No inserts will be generated for this table */";';
put 'run;';
put '%return;';
put '%end;';
put '%local varlist varlistcomma;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let varlistcomma=%mf_getvarlist(&ds,dlm=%str(,),quote=double);';
put '/* next, export data */';
put 'data _null_;';
put 'file &outref mod ;';
put 'if _n_=1 then put "/* &schema.&outds (&nobs rows, &vars columns) */";';
put 'set &ds;';
put '%if &maxobs ne max %then %do;';
put 'if _n_>&maxobs then stop;';
put '%end;';
put 'length _____str $32767;';
put 'call missing(_____str);';
put 'format _numeric_ best.;';
put 'format _character_ ;';
put '%local i comma var vtype vfmt;';
put '%do i=1 %to %sysfunc(countw(&varlist));';
put '%let var=%scan(&varlist,&i);';
put '%let vtype=%mf_getvartype(&ds,&var);';
put '%let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1));';
put '%if &i=1 %then %do;';
put '%if &flavour=SAS %then %do;';
put 'put "insert into &schema.&outds set ";';
put 'put " &var="@;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '_____str=cats(';
put '"INSERT INTO &schema.&outds ("';
put ',symget(''varlistcomma'')';
put ',") VALUES ("';
put ');';
put 'put _____str;';
put 'put " "@;';
put '%end;';
put '%end;';
put '%else %do;';
put '%if &flavour=SAS %then %do;';
put 'put " ,&var="@;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'put " ,"@;';
put '%end;';
put '%end;';
put '%if &vtype=N %then %do;';
put '%if &flavour=SAS %then %do;';
put 'put &var;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'if missing(&var) then put ''NULL'';';
put '%if &applydttm=YES and "%substr(&vfmt.xxxxxxxx,1,8)"="DATETIME"';
put '%then %do;';
put 'else put "TIMESTAMP ''" &var E8601DT25.6 "''";';
put '%end;';
put '%else %do;';
put 'else put &var;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '_____str="''"!!trim(tranwrd(&var,"''","''''"))!!"''";';
put 'put _____str;';
put '%end;';
put '%end;';
put '%if &flavour=SAS %then %do;';
put 'put '';'';';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'put '');'';';
put '%end;';
put 'if _n_=&nobs then put /;';
put 'run;';
put '%mend mp_ds2inserts;';
put '%macro mp_lib2inserts(lib';
put ',flavour=SAS';
put ',outref=0';
put ',schema=0';
put ',maxobs=max';
put ',applydttm=YES';
put ')/*/STORE SOURCE*/;';
put '/* Find the tables */';
put '%local x ds memlist;';
put 'proc sql noprint;';
put 'select distinct lowcase(memname)';
put 'into: memlist';
put 'separated by '' ''';
put 'from dictionary.tables';
put 'where upcase(libname)="%upcase(&lib)"';
put 'and memtype=''DATA''; /* exclude views */';
put '%let flavour=%upcase(&flavour);';
put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;';
put '%put %str(WAR)NING: &flavour is not supported;';
put '%return;';
put '%end;';
put '/* create the inserts */';
put '%do x=1 %to %sysfunc(countw(&memlist));';
put '%let ds=%scan(&memlist,&x);';
put '%mp_ds2inserts(&lib..&ds';
put ',outref=&outref';
put ',schema=&schema';
put ',outds=&ds';
put ',flavour=&flavour';
put ',maxobs=&maxobs';
put ',applydttm=&applydttm';
put ')';
put '%end;';
put '%mend mp_lib2inserts;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Exports the data controller library in DB specific DDL';
put '@details If user is in the administrator group, they can call this';
put 'service directly adding the following URL params:';
put '@li &flavour= (only PGSQL supported at this time)';
put '@li &schema= (optional, if target schema is needed)';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mp_getddl.sas';
put '@li mp_lib2inserts.sas';
put '@li mp_streamfile.sas';
put '@li mpe_getgroups.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global flavour schema;';
put '/* if no flavour is specified, default to SAS */';
put '%let flavour=%sysfunc(coalescec(&flavour,SAS));';
put '/* if no schema var provided, DC Libref is used */';
put '%let schema=%sysfunc(coalescec(&schema,&dc_libref));';
put '/* check user is in admin group */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)';
put 'data work.admins;';
put 'set work.usergroups;';
put 'put (_all_)(=);';
put 'run;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into:cnt';
put 'from usergroups';
put 'where groupname="&mpeadmins";';
put '%put &=cnt;';
put '%mp_abort(iftrue= (&cnt=0)';
put ',mac=&_program';
put ',msg=%str(The &DC_LIBREF library can only be exported by &mpeadmins members)';
put ')';
put '%mp_getddl(&DC_LIBREF';
put ',flavour=&flavour';
put ',schema=&schema';
put ',applydttm=YES';
put ',fref=tmpref';
put ')';
put '%mp_lib2inserts(&DC_LIBREF,flavour=&flavour,schema=&schema, outref=tmpref)';
put '%mp_streamfile(contenttype=TEXT';
put ',inref=tmpref';
put ',outname=&dc_libref..ddl';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=makedata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_increment(macro_name,incr=1);';
put '/* iterate the value */';
put '%let ¯o_name=%eval(&&¯o_name+&incr);';
put '/* return the value */';
put '&&¯o_name';
put '%mend mf_increment;';
put '%macro mpe_makedata(lib=,mpeadmins=,path=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &lib..mpe_alerts set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',alert_event=''*ALL*''';
put ',alert_lib=''*ALL*''';
put ',alert_ds=''*ALL*''';
put ',alert_user="&sysuserid";';
put 'insert into &lib..mpe_column_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',CLS_SCOPE=''EDIT''';
put ',CLS_GROUP=''AllUsers''';
put ',CLS_LIBREF="&lib"';
put ',CLS_TABLE=''MPE_LOCKANYTABLE''';
put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD''';
put ',CLS_ACTIVE=1';
put ',CLS_HIDE=0;';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_EMAIL_ALERTS"';
put ',var_value=''NO''';
put ',var_active=1';
put ',var_desc=''YES or NO to enable email alerts. Note - this requires email ''';
put '!!''options to be preconfigured! They can be configured in the ''';
put '!!''settings stp if needed.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_VIEWLIB_CHECK"';
put ',var_value=''NO''';
put ',var_active=1';
put ',var_desc=';
put '''Set to YES to enable library validity checking in viewLibs service.''';
put '!!'' Note: this can make the service very slow if there are lots of ''';
put '!!''external libraries. If enabled, this removes empty libraries from ''';
put '!!''the viewer library dropdown. To switch off, set to NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_MACROS"';
put ',var_value=cats(symget(''path''),"/dc_macros")';
put ',var_active=1';
put ',var_desc=''Location of underlying macros - EUC feature.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_MAXOBS_WEBEDIT"';
put ',var_value="100"';
put ',var_active=1';
put ',var_desc=''This sets the maximum number of observations that can be loaded''';
put '!!'' into the browser for editing in the EDIT screen. A higher number''';
put '!!'' will require a decent browser (ie, not IE) and more memory on the''';
put '!!'' client side.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_RESTRICT_VIEWER"';
put ',var_value="NO"';
put ',var_active=1';
put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to''';
put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_RESTRICT_EDITRECORD"';
put ',var_value="NO"';
put ',var_active=1';
put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the''';
put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu''';
put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC_CATALOG"';
put ',var_name="DC_IGNORELIBS"';
put ',var_value="|MAPSSAS|MAPS|"';
put ',var_active=1';
put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when''';
put '!!'' running the Data Catalog refresh process. This can enable a clean''';
put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_LOCALE"';
put ',var_value="SYSTEM"';
put ',var_active=1';
put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system''';
put '!!'' value (which can be driven from the browser settings). This is ''';
put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs ''';
put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BULKLOAD"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_BUCKET"';
put ',var_value="''your-aws-bucket/Exchange''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) value of the AWS bucket to''';
put '!!'' use for s3 uploads in redshift'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_AWS_CREDENTIALS_FILE"';
put ',var_value="''/path/to/your/aws/s3/.credentials''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) value of the AWS creds file'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_REGION"';
put ',var_value="''eu-west-1''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) AWS region in use'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_COMPRESS"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_USE_SSL"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to use SSL encryption'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC_REVIEW"';
put ',var_name="HISTORY_ROWS"';
put ',var_value=''100''';
put ',var_active=1';
put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY ''';
put '!!''page'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_LICENCE_KEY"';
put ',var_value='' ''';
put ',var_active=1';
put ',var_desc=''Licence Key'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_ACTIVATION_KEY"';
put ',var_value='' ''';
put ',var_active=1';
put ',var_desc=''Activation Key'';';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''LIBRARY''';
put ',DD_SOURCE="&lib"';
put ',DD_SHORTDESC="Data Controller Control Tables"';
put ',DD_LONGDESC="# The Data Controller Library"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''TABLE''';
put ',DD_SOURCE="&lib..MPE_TABLES"';
put ',DD_SHORTDESC="Configuration of new tables for Data Controller"';
put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''COLUMN''';
put ',DD_SOURCE="&lib..MPE_TABLES.DSN"';
put ',DD_SHORTDESC="Dataset Name to be edited"';
put ',DD_LONGDESC="_DSN_ - must be UPCASE"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''DIRECTORY''';
put ',DD_SOURCE="/some/directory"';
put ',DD_SHORTDESC="Directory for some purpose"';
put ',DD_LONGDESC="This directory is great. It''s great directory.';
put 'It trumps all other directories."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''TABLE''';
put ',DD_SOURCE="&lib"';
put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"';
put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "';
put '!!"registered as a user in this table."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''COLUMN''';
put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"';
put ',DD_SHORTDESC="Set to 1 to make an option active"';
put ',DD_LONGDESC="This value is used as a filter by data controller whenever "';
put '!!"querying for option settings."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* mpe_xlmap_info';
put '*/';
put 'insert into &lib..mpe_xlmap_info set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_description=''Basel 3 Key Metrics report''';
put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";';
put '/**';
put '* mpe_xlmap_rules';
put '*/';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:b''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:c''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:d''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/b''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/c''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/d''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1a/e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1a/f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''ABSOLUTE D10'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/b''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''ABSOLUTE E10'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/c''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[6]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/d''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[8]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/e''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[9]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/f''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[10]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''ABSOLUTE H11''';
put ',xlmap_finish=''RELATIVE R[0]C[1]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:3''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''RELATIVE R[12]C[4]''';
put ',xlmap_finish=''ABSOLUTE I13'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-CR2''';
put ',xlmap_range_id=''CR2-sec1''';
put ',xlmap_sheet=''CR2''';
put ',xlmap_start=''ABSOLUTE D8''';
put ',xlmap_finish=''BLANKROW'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-CR2''';
put ',xlmap_range_id=''CR2-sec2''';
put ',xlmap_sheet=''CR2''';
put ',xlmap_start=''ABSOLUTE D18''';
put ',xlmap_finish=''LASTDOWN'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''SAMPLE''';
put ',xlmap_range_id=''header''';
put ',xlmap_sheet=''/1''';
put ',xlmap_start=''ABSOLUTE B3''';
put ',xlmap_finish=''ABSOLUTE B8'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''SAMPLE''';
put ',xlmap_range_id=''data''';
put ',xlmap_sheet=''/1''';
put ',xlmap_start=''ABSOLUTE B13''';
put ',xlmap_finish=''ABSOLUTE E16'';';
put '/**';
put '* MPE_GROUPS';
put '*/';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="allbow"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="dctestuser1"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="mihmed"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="DCTest"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_ROW_LEVEL_SECURITY';
put '*/';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=1';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_GROUPS"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''GROUP_NAME''';
put ',RLS_OPERATOR_NM=''NE''';
put ',RLS_RAW_VALUE="''-1''"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=2';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib"';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''RLS_RK''';
put ',RLS_OPERATOR_NM=''>''';
put ',RLS_RAW_VALUE=''0''';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=3';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''DC Demo Group''';
put ',RLS_LIBREF="&lib"';
put ',RLS_TABLE="MPE_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''ACCESS_LEVEL''';
put ',RLS_OPERATOR_NM=''NE''';
put ',RLS_RAW_VALUE="''N/A''"';
put ',RLS_ACTIVE=1;';
put '/**';
put '* MPE_SECURITY';
put '*/';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="dc-admin"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="dc-admin"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/* mpe_selectbox */';
put '%let rk=1;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=&rk';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_LOCKANYTABLE"';
put ',base_column="LOCK_STATUS_CD"';
put ',selectbox_value=''LOCKED''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_LOCKANYTABLE"';
put ',base_column="LOCK_STATUS_CD"';
put ',selectbox_value=''UNLOCKED''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''EDIT''';
put ',selectbox_order=0';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''APPROVE''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''VIEW''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''SIGNOFF''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''UPDATE''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''REPLACE''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''TXTEMPORAL''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''BITEMPORAL''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''FORMAT_CAT''';
put ',selectbox_order=5';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''*ALL*''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''SUBMITTED''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''APPROVED''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''REJECTED''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 1''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 2''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 3''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value="This is a long option. This option is very long. "';
put '!!"It is optional, though."';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="CASE"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="MINVAL"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="MAXVAL"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="HARDSELECT"';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="SOFTSELECT"';
put ',selectbox_order=5';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="NOTNULL"';
put ',selectbox_order=6';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="DSN"';
put ',selectbox_value="SOME_DATASET"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="DSN"';
put ',selectbox_value="EXAMPLE"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="COLUMN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="TABLE"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="LIBRARY"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="CATALOG"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="FORMAT"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="LIBREF"';
put ',selectbox_value=''*ALL*''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''AUDIT''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="HARDSELECT_HOOK"';
put ',selectbox_order=7';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="SOFTSELECT_HOOK"';
put ',selectbox_order=7';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="ALL"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="EDIT"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="VIEW"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_GROUP_LOGIC"';
put ',selectbox_value="AND"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_GROUP_LOGIC"';
put ',selectbox_value="OR"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SUBGROUP_LOGIC"';
put ',selectbox_value="AND"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SUBGROUP_LOGIC"';
put ',selectbox_value="OR"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="="';
put ',selectbox_order=0';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value=">"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="<"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="<="';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value=">="';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="BETWEEN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="IN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="NOT IN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="NE"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="CONTAINS"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_EXCEL_CONFIG"';
put ',base_column="XL_RULE"';
put ',selectbox_value="FORMULA"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_ACTIVE"';
put ',selectbox_value="1"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_ACTIVE"';
put ',selectbox_value="0"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_ACTIVE"';
put ',selectbox_value="1"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_ACTIVE"';
put ',selectbox_value="0"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="EDIT"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="VIEW"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="ALL"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_HIDE"';
put ',selectbox_value="0"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_HIDE"';
put ',selectbox_value="1"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_TABLES';
put '*/';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_COLUMN_LEVEL_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM''';
put ',notes=''Docs: https://docs.datacontroller.io/column-level-security''';
put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_INFO''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''XLMAP_ID''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_RULES''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''XLMAP_ID XLMAP_RANGE_ID''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_DATA''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_LOCKANYTABLE''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''LOCK_LIB LOCK_DS''';
put ',notes=''This table may be edited when a process failed and left a lock''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_TABLES''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''LIBREF DSN''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',notes=''This entry allows the MP Editor to edit itself!''';
put ',post_edit_hook=''services/hooks/mpe_tables_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',notes=''Determines which groups can view/edit/approve which tables''';
put ',post_edit_hook=''services/hooks/mpe_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_SELECTBOX''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''SELECTBOX_RK''';
put ',var_txfrom=''VER_FROM_DTTM''';
put ',var_txto=''VER_TO_DTTM''';
put ',notes=''Can configure dropdowns for the front end''';
put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_X_TEST''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''PRIMARY_KEY_FIELD''';
put ',notes=''Test table for controller''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_EMAILS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''USER_NAME''';
put ',notes=''Primary Emails Table (backup is metadata)''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_CONFIG''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''VAR_SCOPE VAR_NAME''';
put ',notes=''Configuration variables for Data Controller''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_ALERTS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER''';
put ',notes=''Configuration for alert email events''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_GROUPS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''GROUP_NAME USER_NAME''';
put ',notes=''Configuration for additional groups within Data Controller''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_VALIDATIONS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE''';
put ',notes=''Configuration of data quality rules in Editor component''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',post_edit_hook=''services/hooks/mpe_validations_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_DATADICTIONARY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''DD_TYPE DD_SOURCE''';
put ',notes=''Configuration of data dictionary''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_EXCEL_CONFIG''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN''';
put ',notes=''Configuration of the excel import rules''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_ROW_LEVEL_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''RLS_RK''';
put ',notes=''Configuration of Row Level Security''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC ''';
put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM ''';
put '!!''RLS_RAW_VALUE ''';
put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_X_CATALOG-FC''';
put ',num_of_approvals_required=1';
put ',loadtype=''FORMAT_CAT''';
put ',buskey=''TYPE FMTNAME FMTROW''';
put ',notes=''Sample Format Catalog''';
put ';';
put '/* mpe_validations */';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_SCOPE"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_TABLE"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_VARIABLE_NM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_VARIABLE_NM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_HIDE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ALERTS"';
put ',base_col="ALERT_LIB"';
put ',rule_type=''HARDSELECT_HOOK''';
put ',rule_value="services/validations/mpe_alerts.alert_lib"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_INFO"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_RULES"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''NOTNULL''';
put ',rule_value='' ''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''NOTNULL''';
put ',rule_value='' ''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="NUM_OF_APPROVALS_REQUIRED"';
put ',rule_type=''MINVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="BUSKEY"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="BUSKEY"';
put ',rule_type=''NOTNULL''';
put ',rule_value=" "';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXFROM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXTO"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSFROM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSTO"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value="UPCASE"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_PROCESSED"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="LIBREF"';
put ',rule_type=''HARDSELECT''';
put ',rule_value="&lib..MPE_TABLES.LIBREF"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="DSN"';
put ',rule_type=''CASE''';
put ',rule_value="UPCASE"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="DSN"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_TABLES.DSN"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="SAS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_LIB"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_DS"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_COL"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="RULE_ACTIVE"';
put ',rule_type=''MINVAL''';
put ',rule_value="0"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="RULE_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value="1"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_COLUMN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/mpe_tables.dsn"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXFROM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXTO"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSFROM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSTO"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_PROCESSED"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="SELECT_LIB"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="SELECT_DS"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="BASE_COLUMN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_SUBGROUP_ID"';
put ',rule_type=''MINVAL''';
put ',rule_value=''0''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_VARIABLE_NM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/* test softselect on numeric var (should be ordered numerically) */';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_X_TEST"';
put ',base_col="SOME_BESTNUM"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_X_TEST"';
put ',base_col="SOME_NUM"';
put ',rule_type=''HARDSELECT_HOOK''';
put ',rule_value="services/validations/mpe_x_test.some_num"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_ACTIVE"';
put ',rule_type=''MINVAL''';
put ',rule_value=''0''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_INFO"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_X_TEST';
put '*/';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=0';
put ',some_char=''this is dummy data''';
put ',some_dropdown=''Option 1''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=42';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=1';
put ',some_char=''more dummy data''';
put ',some_dropdown=''Option 2''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=422';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=2';
put ',some_char=''even more dummy data''';
put ',some_dropdown=''Option 3''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=142';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=3';
put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing''';
put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And''';
put '!!'' this, is the tale he told: '',3)';
put ',some_dropdown=''Option 2''';
put ',some_num=1613.001';
put ',some_date=423';
put ',some_datetime=423';
put ',some_time=44';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=4';
put ',some_char=''if you can fill the unforgiving minute''';
put ',some_dropdown=''Option 1''';
put ',some_num=1613.001123456';
put ',some_date=4231';
put ',some_datetime=423123123';
put ',some_time=412';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put '%do x=10 %to 500;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=10&x';
put ',some_char="&x bottles of beer on the wall"';
put ',some_dropdown=''Option 1''';
put ',some_num=ranuni(0)';
put ',some_date=round(ranuni(0)*1000,1)';
put ',some_datetime=round(ranuni(0)*50000,1)';
put ',some_time=round(ranuni(0)*100,1)';
put ',some_shortnum=round(ranuni(0)*100,1)';
put ',some_bestnum=round(ranuni(0)*100,1);';
put '%end;';
put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */';
put 'proc format library=&lib..mpe_x_catalog;';
put 'value otdate';
put '.Z = ''Some Zs''';
put '.N = ''Some 9s''';
put 'other = [date9.]';
put ';';
put 'invalue disc';
put '''ABC'' = 0.20';
put '''DEF'' = 0.25';
put '''XYZ'' = 0.00';
put 'other = 0.00';
put ';';
put 'invalue indate';
put '''00000000'' = .Z';
put '''99999999'' = .N';
put 'other = [yymmdd8.]';
put ';';
put 'value age(multilabel)';
put '20 - 29 = ''20 - 29''';
put '30 - 39 = ''30 - 39''';
put '40 - 49 = ''40 - 49''';
put '50 - 59 = ''50 - 59''';
put '60 - high = ''60 +++''';
put '20 - 35 = ''20 - 35''';
put '36 - 55 = ''36 - 55''';
put '55 - high = ''55 +++''';
put ';';
put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */';
put 'VALUE $GENDERLABEL';
put '"M" = "Male"';
put '"F" = "Female"';
put ';';
put 'VALUE LIKERT_SEVEN';
put '1 = "Strongly Disagree"';
put '2 = "Disagree"';
put '3 = "Slightly Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5 = "Slightly Agree"';
put '6 = "Agree"';
put '7 = "Strongly Agree"';
put ';';
put 'VALUE LIKERT7_ELEVEN';
put '1,2,3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5,6,7 = "Agree"';
put ';';
put 'VALUE LIKERT7_SISTERS';
put '1-3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5-7 = "Agree"';
put ';';
put 'VALUE INCOME';
put 'LOW -< 20000 = "Low"';
put '20000 -< 60000 = "Middle"';
put '60000 - HIGH = "High"';
put ';';
put 'VALUE RACE';
put '1 = "White"';
put '2 = "Black"';
put 'OTHER = "Other"';
put ';';
put 'VALUE GENDERCODE';
put '0 = ''Male''';
put '1 = ''Female'';';
put 'VALUE ATHLETECODE';
put '0 = ''Non-athlete''';
put '1 = ''Athlete'';';
put 'VALUE SMOKINGCODE';
put '0 = ''Nonsmoker''';
put '1 = ''Past smoker''';
put '2 = ''Current smoker'';';
put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */';
put 'value $state';
put '''Delaware''=''DE''';
put '''Florida''=''FL''';
put '''Ohio''=''OH'';';
put 'value MYfmt';
put '/* Format dates prior to 31DEC2011 using only a year. */';
put 'low-''31DEC2011''d=[year4.]';
put '/* Format 2012 dates using the month and year. */';
put '''01jan2012''d-''31DEC12''d=[monyy7.]';
put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */';
put '''01JAN2013''d-high=[date9.]';
put '/* Catch missing values. */';
put 'other=''n/a'';';
put 'value newfmt .=''N/A'' other=[12.1];';
put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */';
put 'value $genderml (multilabel)';
put '''1''=''Male''';
put '''2''=''Female''';
put '''1'',''2'','' ''=''Total people'';';
put 'value agemla (multilabel)';
put '1-4=''Preschool''';
put '1-18=''Children''';
put '19-120=''Adults'';';
put 'value agemlb (multilabel)';
put '19-120=''Adults''';
put '1-18=''Children''';
put '1-4=''Preschool'';';
put 'value agemlc (multilabel notsorted)';
put '19-120=''Adults''';
put '1-18=''Children''';
put '1-4=''Preschool'';';
put '%mend mpe_makedata;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mpe_makedatamodel(lib=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put '%local notnull;';
put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;';
put '%put &=notnull;';
put 'proc sql;';
put 'create table &lib..mpe_alerts(';
put 'tx_from num format=datetime19.3,';
put 'alert_event char(20),';
put 'alert_lib char(8),';
put 'alert_ds char(32),';
put 'alert_user char(100) ,';
put 'tx_to num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_alerts;';
put 'index create';
put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_audit(';
put 'load_ref char(36) label=''unique load reference'',';
put 'libref char(8) label=''Library Reference (8 chars)'',';
put 'dsn char(32) label=''Dataset Name (32 chars)'',';
put 'key_hash char(32) label=';
put '''MD5 Hash of primary key values (pipe seperated)'',';
put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'',';
put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'',';
put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'',';
put 'is_pk num label=''Is Primary Key Field? (1/0)'',';
put 'is_diff num label=';
put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'',';
put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'',';
put 'oldval_num num format=best32. label=''Old (numeric) value'',';
put 'newval_num num format=best32. label=''New (numeric) value'',';
put 'oldval_char char(32765) label=''Old (character) value'',';
put 'newval_char char(32765) label=''New (character) value''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_audit;';
put 'index create';
put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_column_level_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'CLS_SCOPE char(4) ¬null,';
put 'CLS_GROUP char(64) ¬null,';
put 'CLS_LIBREF char(8) ¬null,';
put 'CLS_TABLE char(32) ¬null,';
put 'CLS_VARIABLE_NM char(32) ¬null,';
put 'CLS_ACTIVE num ¬null,';
put 'CLS_HIDE num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_column_level_security;';
put 'index create';
put 'pk_mpe_column_level_security=';
put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_config(';
put 'tx_from num ¬null format=datetime19.3';
put ',tx_to num ¬null format=datetime19.3';
put ',var_scope varchar(10) ¬null';
put ',var_name varchar(32) ¬null';
put ',var_value varchar(5000)';
put ',var_active num';
put ',var_desc varchar(300)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_config;';
put 'index create';
put 'pk_mpe_config=(tx_to var_scope var_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_libs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Ref'',';
put 'engine char(32) label=''Library Engine'',';
put 'libname char(256) format=$256. label=''Library Name'',';
put 'paths char(8192) label=''Library Paths'',';
put 'perms char(500) label=''Library Permissions (if BASE)'',';
put 'owners char(500) label=''Library Owners (if BASE)'',';
put 'schemas char(500) label=''Library Schemas (if DB)'',';
put 'libid char(17) label=''LibraryId''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_libs;';
put 'index create';
put 'pk_mpe_datacatalog_libs=(libref tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_TABS(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Member Name'',';
put 'memtype char(8) label=''Member Type'',';
put 'dbms_memtype char(32) label=''DBMS Member Type'',';
put 'memlabel char(512) label=''Data Set Label'',';
put 'typemem char(8) label=''Data Set Type'',';
put 'nvar num label=''Number of Variables'',';
put 'compress char(8) label=''Compression Routine'',';
put 'pk_fields char(512)';
put 'label=''Primary Key Fields (identified by being in a constraint that is both Unique and Not Null)''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_TABS;';
put 'index create';
put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_vars(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Table Name'',';
put 'name char(64) label=''Column Name'',';
put 'memtype char(8) label=''Member Type'',';
put 'type char(16) label=''Column Type'',';
put 'length num label=''Column Length'',';
put 'varnum num label=''Column Number in Table'',';
put 'label char(512) label=''Column Label'',';
put 'format char(49) label=''Column Format'',';
put 'idxusage char(9) label=''Column Index Type'',';
put 'notnull char(3) label=''Not NULL?'',';
put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_vars;';
put 'index create';
put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datastatus_libs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'libsize num format=SIZEKMG. label=''Size of library'',';
put 'table_cnt num label=''Number of Tables''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_libs;';
put 'index create';
put 'pk_mpe_datastatus_libs=(libref tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datastatus_tabs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Member Name'',';
put 'filesize num format=SIZEKMG. label=''Size of file'',';
put 'crdate num format=DATETIME. informat=DATETIME. label=''Date Created'',';
put 'modate num format=DATETIME. informat=DATETIME. label=''Date Modified'',';
put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_tabs;';
put 'index create';
put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datadictionary';
put '(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'DD_TYPE char(16),';
put 'DD_SOURCE char(1024),';
put 'DD_SHORTDESC char(256),';
put 'DD_LONGDESC char(32767),';
put 'DD_OWNER char(128),';
put 'DD_RESPONSIBLE char(128),';
put 'DD_SENSITIVITY char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datadictionary;';
put 'index create';
put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_dataloads(';
put 'libref varchar(8) ¬null,';
put 'dsn varchar(32) ¬null,';
put 'etlsource varchar(100) ¬null,';
put 'loadtype varchar(20) ¬null,';
put 'changed_records int,';
put 'new_records int,';
put 'deleted_records int,';
put 'duration num,';
put 'user_nm varchar(50) ¬null,';
put 'processed_dttm num format=datetime19.3,';
put 'mac_ver varchar(5)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_dataloads;';
put 'index create';
put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_emails(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'user_name char(50) ¬null,';
put 'user_displayname char(100),';
put 'user_email char(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_emails;';
put 'index create';
put 'pk_mpe_emails=(tx_to user_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_excel_config(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'xl_libref char(8),';
put 'xl_table char(32),';
put 'xl_column char(32),';
put 'xl_rule char(32),';
put 'xl_active num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_excel_config;';
put 'index create';
put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_XLMAP_DATA(';
put 'LOAD_REF char(32) ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_RANGE_ID char(32) ¬null,';
put 'ROW_NO num ¬null,';
put 'COL_NO num ¬null,';
put 'VALUE_TXT char(4000)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify MPE_XLMAP_DATA;';
put 'index create';
put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_xlmap_info(';
put 'tx_from num ¬null,';
put 'tx_to num ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_DESCRIPTION char(1000) ¬null,';
put 'XLMAP_TARGETLIBDS char(41) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_xlmap_info;';
put 'index create';
put 'pk_mpe_xlmap_info=(tx_to xlmap_id)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_xlmap_rules(';
put 'tx_from num ¬null,';
put 'tx_to num ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_RANGE_ID char(32) ¬null,';
put 'XLMAP_SHEET char(32) ¬null,';
put 'XLMAP_START char(1000) ¬null,';
put 'XLMAP_FINISH char(1000)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_xlmap_rules;';
put 'index create';
put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_filteranytable(';
put 'filter_rk num ¬null,';
put 'filter_hash char(32) ¬null,';
put 'filter_table char(41) ¬null,';
put 'processed_dttm num ¬null format=datetime19.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_filteranytable;';
put 'index create filter_rk /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_filtersource(';
put 'filter_hash char(32) ¬null,';
put 'filter_line num ¬null,';
put 'group_logic char(3) ¬null,';
put 'subgroup_logic char(3) ¬null,';
put 'subgroup_id num ¬null,';
put 'variable_nm varchar(32) ¬null,';
put 'operator_nm varchar(12) ¬null,';
put 'raw_value varchar(4000) ¬null,';
put 'processed_dttm num ¬null format=datetime19.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_filtersource;';
put 'index create';
put 'pk_mpe_filtersource=(filter_hash filter_line)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_groups(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'group_name char(100) ¬null,';
put 'user_name char(50) ¬null,';
put 'group_desc char(256)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_groups;';
put 'index create';
put 'pk_mpe_groups=(tx_to group_name user_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_lineage_cols';
put '(';
put 'col_id char(32),';
put 'direction char(1),';
put 'sourcecoluri char(256),';
put 'map_type char(256),';
put 'map_transform char(256),';
put 'jobname char(256),';
put 'sourcetablename char(256),';
put 'sourcecolname char(256),';
put 'targettablename char(256),';
put 'targetcolname char(256),';
put 'targetcoluri char(256),';
put 'Derived_Rule char(500),';
put 'level int,';
put 'modified_dttm num format=datetime19.3,';
put 'modified_by char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lineage_cols;';
put 'index create';
put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_LINEAGE_TABS';
put '(';
put 'tx_from num ¬null format=datetime19.3,';
put 'jobid char(17),';
put 'srctableid char(17),';
put 'tgttableid char(17),';
put 'jobname char(128),';
put 'srctabletype char(16),';
put 'srctablename char(64),';
put 'srclibref char(8),';
put 'tgttabletype char(16),';
put 'tgttablename char(64),';
put 'tgtlibref char(8),';
put 'tx_to num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lineage_tabs;';
put 'index create';
put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_loads(';
put 'csv_dir char(255),';
put 'user_nm char(50) ,';
put 'status char(15) ,';
put 'duration num ,';
put 'processed_dttm num format=datetime19.3,';
put 'reason_txt char(2048) ,';
put 'approvals char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_loads;';
put 'index create csv_dir /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_lockanytable(';
put 'lock_lib varchar(8) ¬null ,';
put 'lock_ds varchar(32) ¬null,';
put 'lock_status_cd varchar(10) ¬null,';
put 'lock_user_nm varchar(100) ¬null ,';
put 'lock_ref varchar(200),';
put 'lock_pid varchar(10),';
put 'lock_start_dttm num format=E8601DT26.6,';
put 'lock_end_dttm num format=E8601DT26.6';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lockanytable;';
put 'index create';
put 'pk_mpe_lockanytable=(lock_lib lock_ds)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_maxkeyvalues(';
put 'keytable varchar(41) label=''Base table in libref.dataset format'',';
put 'keycolumn char(32) format=$32.';
put 'label=''The Surrogate / Retained key field containing the key values.'',';
put 'max_key num label=';
put '''Integer value representing current max RK or SK value in the KEYTABLE'',';
put 'processed_dttm num format=E8601DT26.6';
put 'label=''Datetime this value was last updated''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_maxkeyvalues;';
put 'index create keytable /nomiss unique;';
put 'quit;';
put '/* no PK defined as it is a transaction table */';
put 'proc sql;';
put 'create table &lib..mpe_requests(';
put 'request_dttm num ¬null format=datetime19.,';
put 'request_user char(64) ¬null,';
put 'request_service char(64) ¬null,';
put 'request_params char(128)';
put ');';
put 'proc sql;';
put 'create table &lib..mpe_review(';
put 'table_id varchar(32) ¬null,';
put 'reviewed_by_nm varchar(100) ¬null,';
put 'base_table varchar(41) ¬null,';
put 'review_status_id varchar(10) ¬null,';
put 'reviewed_on_dttm num ¬null format=datetime19.3,';
put 'review_reason_txt varchar(400)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_review;';
put 'index create';
put 'pk_mpe_review=(table_id reviewed_by_nm)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_row_level_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'RLS_RK num ¬null,';
put 'RLS_SCOPE char(8) ¬null,';
put 'RLS_GROUP char(128) ¬null,';
put 'RLS_LIBREF char(8) ¬null,';
put 'RLS_TABLE char(32) ¬null,';
put 'RLS_GROUP_LOGIC char(3) ¬null,';
put 'RLS_SUBGROUP_LOGIC char(3) ¬null,';
put 'RLS_SUBGROUP_ID num ¬null,';
put 'RLS_VARIABLE_NM varchar(32) ¬null,';
put 'RLS_OPERATOR_NM varchar(12) ¬null,';
put 'RLS_RAW_VALUE varchar(4000) ¬null,';
put 'RLS_ACTIVE num ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_row_level_security;';
put 'index create';
put 'pk_mpe_row_level_security=(tx_to RLS_RK)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'libref char(8) ¬null,';
put 'dsn char(32) ¬null,';
put 'access_level char(10) ¬null,';
put 'sas_group char(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_security;';
put 'index create';
put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_selectbox(';
put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/';
put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */';
put 'selectbox_rk num ¬null, /* surrogate key */';
put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/';
put 'select_ds varchar(32) ¬null,';
put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */';
put 'selectbox_value varchar(500) ¬null, /* selectbox value */';
put 'selectbox_order num , /* optional ordering (1 comes before 2) */';
put 'selectbox_type varchar(32) /* column type (blank for default, else';
put 'sas or js to indicate relevant system functions)*/';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_selectbox;';
put 'index create';
put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_signoffs(';
put 'tech_from_dttm num ¬null format=datetime19.3,';
put 'tech_to_dttm num ¬null format=datetime19.3,';
put 'signoff_table varchar(50) ¬null,';
put 'signoff_section_rk num ¬null,';
put 'signoff_version_rk num ¬null,';
put 'signoff_name varchar(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_signoffs;';
put 'index create';
put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)';
put '/nomiss unique;';
put 'quit;';
put '/* mpe_submit */';
put 'proc sql;';
put 'create table &lib..mpe_submit(';
put 'table_id varchar(32) ¬null,';
put 'submit_status_cd varchar(10) ¬null,';
put 'base_lib char(8) ¬null,';
put 'base_ds char(32) ¬null,';
put 'submitted_by_nm varchar(100) ¬null,';
put 'submitted_on_dttm num ¬null format=datetime19.3,';
put 'submitted_reason_txt varchar(400),';
put 'input_obs num,';
put 'input_vars num,';
put 'num_of_approvals_required num ¬null ,';
put 'num_of_approvals_remaining num ¬null ,';
put 'reviewed_by_nm char(100),';
put 'reviewed_on_dttm num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_submit;';
put 'index create table_id /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_tables(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'libref char(8) ¬null,';
put 'dsn char(32) ¬null,';
put 'num_of_approvals_required int,';
put 'loadtype char(12) ,';
put 'buskey char(1000) ,';
put 'var_txfrom char(32) ,';
put 'var_txto char(32) ,';
put 'var_busfrom char(32) ,';
put 'var_busto char(32) ,';
put 'var_processed char(32) ,';
put 'close_vars varchar(500),';
put 'pre_edit_hook char(200),';
put 'post_edit_hook char(200),';
put 'pre_approve_hook char(200) ,';
put 'post_approve_hook char(200) ,';
put 'signoff_cols varchar(500),';
put 'signoff_hook varchar(200),';
put 'notes char(1000) ,';
put 'rk_underlying char(1000) ,';
put 'audit_libds char(41)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_tables;';
put 'index create';
put 'pk_mpe_tables=(tx_to libref dsn)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_users(';
put 'user_id char(50) ¬null,';
put 'last_seen_dt num ¬null format=date9.,';
put 'registered_dt num ¬null format=date9.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_users;';
put 'index create user_id /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_VALIDATIONS';
put '(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'BASE_LIB varchar(8),';
put 'BASE_DS varchar(32),';
put 'BASE_COL varchar(32),';
put 'RULE_TYPE varchar(32),';
put 'RULE_VALUE varchar(128),';
put 'RULE_ACTIVE num ,';
put 'TX_TO num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_validations;';
put 'index create';
put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_x_test(';
put 'primary_key_field num ¬null,';
put 'some_char char(32767) ,';
put 'some_dropdown char(128),';
put 'some_num num ,';
put 'some_date num format=date9.,';
put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,';
put 'some_time num format=time8.,';
put 'some_shortnum num length=4,';
put 'some_bestnum num format=best.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_x_test;';
put 'index create primary_key_field /nomiss unique;';
put 'quit;';
put '%mend mpe_makedatamodel;';
put '%macro mpe_makesampledata(outlib=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put '%if &syssite ne 70221618 and &syssite ne 70253615 %then %do;';
put '%put syssite=&syssite, exiting &sysmacroname;';
put '%return;';
put '%end;';
put 'data &outlib..class(index=(name /unique));';
put 'set sashelp.class;';
put 'run;';
put 'data &outlib..cars(index=(carspk=(make model drivetrain) /unique));';
put 'set sashelp.cars;';
put 'run;';
put 'data &outlib..springs(index=(springspk=(name area latitude) /unique));';
put 'set sashelp.springs;';
put 'run;';
put 'data &outlib..fmt_checks;;';
put 'pk=1; E8601DA=date();';
put 'format E8601DA E8601DA10.;';
put 'run;';
put 'data append;';
put 'if 0 then set &dc_libref..mpe_tables;';
put 'TX_FROM=0;';
put 'TX_TO=''31DEC9999:23:59:59''dt;';
put 'LIBREF=%upcase("&outlib");';
put 'LOADTYPE=''UPDATE'';';
put 'NUM_OF_APPROVALS_REQUIRED=1;';
put 'DSN=''SPRINGS''; BUSKEY=''NAME AREA LATITUDE''; output;';
put 'DSN=''CARS''; BUSKEY=''MAKE MODEL DRIVETRAIN''; output;';
put 'DSN=''CLASS''; BUSKEY=''NAME''; output;';
put 'DSN=''FMT_CHECKS''; BUSKEY=''PK''; output;';
put 'run;';
put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;';
put 'run;';
put '/**';
put '* DC data extra';
put '*/';
put '%local lib;';
put '%let lib=&dc_libref;';
put 'proc sql;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=4';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_TABLES"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''NUM_OF_APPROVALS_REQUIRED''';
put ',RLS_OPERATOR_NM=''>''';
put ',RLS_RAW_VALUE=''0''';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=5';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=6';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=7';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=2';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=8';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=3';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=9';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=4';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=10';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=5';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=11';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=6';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=12';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=7';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=13';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=5';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=14';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=6';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=15';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=7';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=2';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=16';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=8';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=3';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=17';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=9';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=4';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=18';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=10';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=5';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=19';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=6';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=20';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=7';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put '/** create excel config */';
put 'insert into &lib..MPE_EXCEL_CONFIG set';
put 'tx_from=0';
put ',xl_libref="&lib"';
put ',xl_table="MPE_DATADICTIONARY"';
put ',xl_column="DD_LONGDESC"';
put ',xl_rule="FORMULA"';
put ',xl_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/** mpe_security table */';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="303001.DataController"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="303001.DataController"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'data append;';
put 'if 0 then set &dc_libref..mpe_tables;';
put 'TX_FROM=0;';
put 'TX_TO=''31DEC9999:23:59:59''dt;';
put 'LIBREF=%upcase("&dc_libref");';
put 'LOADTYPE=''UPDATE'';';
put 'NUM_OF_APPROVALS_REQUIRED=1;';
put 'DSN=''MPE_USERS''; BUSKEY=''USER_ID''; output;';
put 'run;';
put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;';
put 'run;';
put '%mend mpe_makesampledata;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_deletejes(path=';
put ',name=';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=(%mf_isblank(&path)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(path value must be provided)';
put ')';
put '%mp_abort(iftrue=(%mf_isblank(&name)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(name value must be provided)';
put ')';
put '%mp_abort(iftrue=(%length(&path)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(path value must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%put &sysmacroname: fetching details for &path ;';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&path";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;';
put '%return;';
put '%end;';
put '%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put '%put &sysmacroname: grab the follow on link ;';
put '%local libref1;';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data _null_;';
put 'set &libref1..links;';
put 'if rel=''members'' then call symputx(''mref'',quote("&base_uri"!!trim(href)),''l'');';
put 'run;';
put '/* get the children */';
put '%local fname1a;';
put '%let fname1a=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1a &oauth_bearer';
put 'url=%unquote(%superq(mref));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '%put &=SYS_PROCHTTP_STATUS_CODE;';
put '%local libref1a;';
put '%let libref1a=%mf_getuniquelibref();';
put 'libname &libref1a JSON fileref=&fname1a;';
put '%local uri found;';
put '%let found=0;';
put '%put Getting object uri from &libref1a..items;';
put 'data _null_;';
put 'length contenttype name $1000;';
put 'set &libref1a..items;';
put 'if contenttype=''jobDefinition'' and upcase(name)="%upcase(&name)" then do;';
put 'call symputx(''uri'',cats("&base_uri",uri),''l'');';
put 'call symputx(''found'',1,''l'');';
put 'end;';
put 'run;';
put '%if &found=0 %then %do;';
put '%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;';
put '%return;';
put '%end;';
put 'proc http method="DELETE" url="&uri" &oauth_bearer;';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="*/*";/**/';
put 'run;';
put '%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;';
put 'data _null_; infile &fname2; input; putlog _infile_;run;';
put '%mp_abort(mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put '%else %put &sysmacroname: &path/&name successfully deleted;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put 'filename &fname1a clear;';
put 'libname &libref1a clear;';
put '%mend mv_deletejes;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief self destructing setup service';
put '@details Will create the database and perform config activities';
put ' SAS Macros
';
put '@li mf_getapploc.sas';
put '@li mf_mkdir.sas';
put '@li mf_trimstr.sas';
put '@li mpe_getvars.sas';
put '@li mpe_makedata.sas';
put '@li mpe_makedatamodel.sas';
put '@li mpe_makesampledata.sas';
put '@li mv_deletejes.sas';
put '@version 3.5';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global dcpath ADMIN ;';
put '%webout(FETCH)';
put '/* enable vars to be passed as url params */';
put '%let exist=%sysfunc(exist(work.fromjs));';
put '%let inds=%sysfunc(ifc(&exist=1,fromjs,_null_));';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''dcpath'',dcpath);';
put 'call symputx(''ADMIN'',ADMIN);';
put 'run;';
put 'options noquotelenmax;';
put '%let dclib=%upcase(VIYA%substr(%sysevalf(%sysfunc(datetime())/60),3,4));';
put '%let dclibname=Data Controller (&dclib);';
put '%let DC_LIBREF=&dclib;';
put '%let work=%sysfunc(pathname(work));';
put '%let dcpath=%mf_trimstr(&dcpath,/)/&dclib;';
put '%put &=sysuserid;';
put '%put &=dcpath;';
put '%put &=admin;';
put '%mf_mkdir(&dcpath)';
put '%mf_mkdir(&dcpath/secret)';
put '%mf_mkdir(&dcpath/dc_staging)';
put 'libname &dclib "&dcpath";';
put '%global admin;';
put '%let admin=%sysfunc(coalescec(&admin,All Users));';
put '%mpe_makedatamodel(lib=&dclib)';
put '%mpe_makedata(lib=&dclib,mpeadmins=&admin,path=%str(&dcpath))';
put '/* sample data library */';
put '%mf_mkdir(&dcpath/dc_demo)';
put 'libname dcdemo "&dcpath/dc_demo";';
put '%mpe_makesampledata(outlib=DCDEMO)';
put '/* the DC precode is stored in the root of the project */';
put '%let root=%mf_getapploc(&_program)/services;';
put '%put &=root;';
put 'filename jobout filesrvc folderpath="&root";';
put 'data _null_;';
put 'file jobout(''settings.sas'');';
put 'put ''/* these values are ignored if DC_LIBREF was declared in autoexec */'';';
put 'put '' '';';
put 'put ''%global DC_LIBREF dc_admin_group dc_staging_area ;'';';
put 'put ''/* This library (libref) contains the control datasets for DC */'';';
put 'put ''/* If a different libref must be used, configure it below */'';';
put 'put ''%let DC_LIBREF='' "&dclib;";';
put 'put '' '';';
put 'put "libname &dclib ''&dcpath'' ;";';
put 'put '' '';';
put 'put ''/* This group has unrestricted access to Data Controller */'';';
put 'put ''%let dc_admin_group='' "&admin;";';
put 'put '' '';';
put 'put ''/* This physical location is used for staging data and audit history */'';';
put 'put ''%let dc_staging_area='' "&dcpath/dc_staging;";';
put 'put '' '';';
put 'if &syssite in (70221618,70253615) then do;';
put 'put "libname dcdemo ''&dcpath/dc_demo'';";';
put 'end;';
put 'run;';
put '/* create demo data';
put 'cas dcsession;';
put 'caslib _all_ assign;';
put 'caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic GLOBAL;';
put 'proc casutil;';
put 'LOAD DATA=dcdemo.cars';
put 'CASOUT="cars"';
put 'OUTCASLIB="casmusic" PROMOTE ;';
put 'run;';
put '*/';
put '/*';
put 'cas mysess;';
put 'caslib _all_ assign;';
put 'data casmusic.artists(promote=yes);';
put 'length name varchar(30);';
put 'do tracks=1 to 100;';
put 'name=''Phil Collins''!!cats(tracks);';
put 'output;';
put 'end;';
put 'run;';
put '*/';
put '/*';
put '%let url=http://millionsongdataset.com/sites/default/files/AdditionalFiles%trim(';
put ')/unique_tracks.txt;';
put 'filename test url "&url" lrecl=3000 ;';
put 'proc sql;';
put 'drop table casmusic.tunes;';
put 'data tracks;';
put 'infile test dlmstr='''' dsd end=lastobs;';
put 'input track_id:$32. song_id:$32. artist_nm:$128. title:$256.;';
put 'output;';
put 'if lastobs then do;';
put 'track_id=''dummyrecords'';';
put 'title=''none'';';
put 'artist_nm=''none'';';
put 'do x=1 to 4000000;';
put 'drop x;';
put 'song_id=cats(x);';
put 'output;';
put 'end;';
put 'stop;';
put 'end;';
put 'run;';
put 'proc casutil;';
put 'LOAD DATA=tracks';
put 'CASOUT="tunes"';
put 'OUTCASLIB="casmusic" PROMOTE ;';
put 'run;';
put '/*';
put 'data append;';
put 'if 0 then set &dclib..MPE_TABLES;';
put 'libref="CASMUSIC";';
put 'dsn=''TUNES'';';
put 'num_of_approvals_required=1;';
put 'loadtype=''UPDATE'';';
put 'buskey=''TRACK_ID SONG_ID'';';
put 'tx_from=0;';
put 'tx_to=''31DEC9999:23:59:59''dt;';
put 'output;';
put 'dsn=''ARTISTS'';';
put 'buskey=''NAME'';';
put 'output;';
put 'run;';
put 'proc append base=&dclib..MPE_tABLES data=append;';
put 'run;';
put '*/';
put '%mp_abort(iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Err during DB build)';
put ')';
put '%webout(OPEN)';
put 'data result;';
put 'dclib="&dclib";';
put 'admingroup="&admin";';
put 'dcpath="&dcpath";';
put 'run;';
put '%webout(OBJ,result)';
put '%webout(CLOSE)';
put '%mv_deletejes(path=&root/admin, name=makedata)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshcatalog;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mpe_refreshtables(lib,ds=#all);';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%local engine; %let engine=%mf_getengine(&lib);';
put '%local schema; %let schema=%mf_getschema(&lib);';
put '%put running &sysmacroname &lib(&engine &schema) for &ds;';
put 'proc sql;';
put 'create table cols as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib cols extraction)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.indexes as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table finalcols as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.indexes b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%local dsn;';
put '%if &ds = #ALL %then %let dsn=;';
put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table work.pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.constraints';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table work.sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table work.pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from work.sum a';
put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table work.pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data work.finalpks;';
put 'set pkdefault pk4sure pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table finalcols as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* load columns */';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_vars';
put ',append_dsn=finalcols';
put ',PK=LIBREF DSN NAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF DSN';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.tabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data tabs2;';
put 'set finalcols;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table work.finaltabs as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.tabs a';
put 'left join work.tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_tabs';
put ',append_dsn=finaltabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '/* prepare table frequently changing attributes */';
put 'proc sql;';
put '%if &engine=SQLSVR %then %do;';
put 'connect using &lib;';
put 'create table work.attrs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date';
put 'FROM sys.tables ;';
put ');';
put 'create table work.nobs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema''';
put ',A.Name, AVG(B.rows) AS ''RowCount''';
put 'FROM sys.objects A';
put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id';
put 'WHERE A.type = ''U''';
put 'GROUP BY A.schema_id, A.Name';
put ');';
put 'disconnect from &lib;';
put 'create table statustabs as select';
put 'a.libref';
put ',a.dsn';
put ',b.create_date as crdate';
put ',b.modify_date as modate';
put ',. as filesize';
put ',c.RowCount as nobs';
put 'from work.tabs a';
put 'left join work.attrs(where=(schema="&schema")) b';
put 'on upcase(a.dsn)=upcase(b.name)';
put 'left join work.nobs(where=(schema="&schema")) c';
put 'on upcase(a.dsn)=upcase(c.name);';
put '%end;';
put '%else %do;';
put 'create table statustabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',crdate';
put ',modate';
put ',filesize';
put ',nobs';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%end;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_tabs';
put ',append_dsn=statustabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '%if &ds = #ALL %then %do;';
put 'proc sql;';
put 'create table statuslibs as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_libs';
put ',append_dsn=statuslibs';
put ',PK=LIBREF';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put ')';
put '%end;';
put '%mend mpe_refreshtables;';
put '%macro dc_refreshcatalog();';
put '%mpe_refreshlibs()';
put 'filename executor catalog ''work.code.code.source'';';
put 'data libraries;';
put 'set &mpelib..mpe_datacatalog_libs;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'file executor;';
put 'str=cats(''%mpe_refreshtables('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%mend dc_refreshcatalog;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshcatalog.sas';
put '@brief Refreshes the library data catalog';
put '@details A library may be passed in a LIBREF url param.';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li dc_refreshcatalog.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global libref;';
put '%mpeinit()';
put '%dc_refreshcatalog(&libref)';
put 'data _null_;';
put 'file _webout;';
put 'put '' Catalog Refresh Complete
'';';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshlibs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshlibs.sas';
put '@brief Refreshes the library data catalog';
put '@details';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li mpe_refreshlibs.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mpe_refreshlibs()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=registerkey;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Register a new licence key';
put '@details';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li bitemporal_dataloader.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '@test';
put 'echo ''{"keyupload":[{"activation_key":"slfdjasfda;dslf","licence_key":"asdfasdlfkajsfdas"}]}''>in.json';
put 'sasjs request admin/registerkey -d in.json';
put '**/';
put '%mpeinit()';
put '/* determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%global admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from groups where groupname="&mpeadmins";';
put '%mp_abort(iftrue= (&admin_check = 0)';
put ',mac=%str(&_program)';
put ',msg=%str(Only members of &mpeadmins may register a key)';
put ')';
put '%global licencekey activation_key;';
put 'data _null_;';
put 'set work.keyupload;';
put 'call symputx(''activation_key'',activation_key);';
put 'call symputx(''licencekey'',licence_key);';
put 'call symputx(''activlen'',length(activation_key));';
put 'call symputx(''liclen'',length(licence_key));';
put 'run;';
put '%mp_abort(iftrue= (&activlen< 10)';
put ',mac=%str(&_program)';
put ',msg=%str(Invalid activation_key)';
put ')';
put '%mp_abort(iftrue= (&liclen < 10)';
put ',mac=%str(&_program)';
put ',msg=%str(Invalid licencekey)';
put ')';
put 'data work.loadme;';
put 'if 0 then set &mpelib..mpe_config;';
put 'VAR_SCOPE=''DC'';';
put 'VAR_NAME=''DC_ACTIVATION_KEY'';';
put 'VAR_VALUE=symget(''activation_key'');';
put 'VAR_ACTIVE=1;';
put 'output;';
put 'VAR_NAME=''DC_LICENCE_KEY'';';
put 'VAR_VALUE=symget(''licencekey'');';
put 'VAR_ACTIVE=1;';
put 'output;';
put 'keep VAR_: ;';
put 'run;';
put '%bitemporal_dataloader(';
put 'tech_from=tx_from';
put ',tech_to = tx_to';
put ',base_lib=&mpelib';
put ',base_dsn=mpe_config';
put ',append_lib=WORK';
put ',append_dsn=loadme';
put ',PK= VAR_SCOPE VAR_NAME';
put ',ETLSOURCE=%str(&_program STP)';
put ',LOADTYPE=TXTEMPORAL';
put ',dclib=&mpelib';
put ')';
put 'data work.return;';
put 'msg=''SUCCESS'';';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,return)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/approvers;
%let service=getapprovals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getapprovals.sas';
put '@brief Returns a list of staged data items that need to be approved';
put '@details';
put ' SAS Macros
';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* determine users group membership */';
put '%let user=%mf_getuser();';
put '%mpe_getgroups(user=&user,outds=work.groups)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put 'proc sql noprint;';
put 'create table out1 (rename=(SUBMITTED_ON_DTTM1=SUBMITTED_ON_DTTM)) as';
put 'select table_id';
put ',submit_status_cd as REVIEW_STATUS_ID';
put ',SUBMITTED_BY_NM';
put ',cats(base_lib,''.'',base_ds) as base_table';
put ',put(submitted_on_dttm,yymmddhhmmss.) as SUBMITTED_ON_DTTM1';
put ',submitted_on_dttm as SUBMITTED_ON_DTTM2';
put ',submitted_reason_txt';
put ',num_of_approvals_required';
put ',num_of_approvals_remaining';
put ',base_lib as libref';
put ',base_ds as dsn';
put 'from &mpelib..mpe_submit (where=(submit_status_cd=''SUBMITTED''))';
put '/* filter out any submits for which approval is already made */';
put 'where table_id not in (';
put 'select table_id from &mpelib..mpe_review where submitted_by_nm="&user"';
put ');';
put '%macro getapprovals();';
put '%local admin_check;';
put 'select count(*) into: admin_check';
put 'from groups';
put 'where groupname="&mpeadmins"';
put 'or groupname in (';
put 'select sas_group from &mpelib..mpe_security';
put 'where libref=''*ALL*''';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and access_level in (''APPROVE'')';
put ');';
put '%if &admin_check >0 %then %do;';
put 'create table fromSAS as';
put 'select distinct * from out1';
put 'order by SUBMITTED_ON_DTTM2 desc;';
put '%end;';
put '%else %do;';
put 'create table fromSAS as';
put 'select distinct a.*';
put 'from out1 a';
put 'inner join &mpelib..mpe_security b';
put 'on a.libref=b.libref';
put 'and (a.dsn=b.dsn or b.dsn=''*ALL*'')';
put 'and &dc_dttmtfmt. lt b.tx_to';
put 'and b.ACCESS_LEVEL =''APPROVE''';
put 'and b.SAS_GROUP in (select groupname from work.groups)';
put 'order by SUBMITTED_ON_DTTM2 desc;';
put '%end;';
put '%mend getapprovals;';
put '%getapprovals()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=gethistory;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Returns the list of previously approved / rejected items.';
put '@details History is taken from MPE_SUBMIT (where status_cd ne ''SUBMITTED'') and';
put 'filtered according to the groups in MPE_SECURITY (unless the user is in the';
put 'DC admin group).';
put ' SAS Macros
';
put '@li mpe_getvars.sas';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put ' Service Inputs
';
put ' BROWSERPARAMS
';
put 'The following variables MAY be provided from frontend (HIST can also be set';
put 'in MPE_CONFIG):';
put '@li HIST - number of records to return';
put '@li STARTROW - the starting row (default is 1)';
put ' Service Outputs
';
put ' FROMSAS
';
put 'This table is returned, starting from &STARTROW for &HIST rows (ordered';
put 'descending on SUBMITTED datetime)';
put '@li TABLE_ID';
put '@li BASE_TABLE';
put '@li SUBMITTED';
put '@li SUBMITTED_REASON_TXT';
put '@li SUBMITTER';
put '@li REVIEWED';
put '@li STATUS';
put '@li REVIEWED_ON_DTTM';
put '@li APPROVER';
put ' HISTPARAMS
';
put '@li HIST - rows returned';
put '@li STARTROW - starting row used';
put '@li NOBS - Number of observations (rows) available';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* hard coded HIST value */';
put '%let hist=40;';
put '%let startrow=1;';
put '/* load parameters from frontend (HIST and STARTROW) */';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC_REVIEW"';
put 'and var_name=''HISTORY_ROWS''';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(''hist'',var_value,''G'');';
put 'putlog ''mpe_config: '' var_name "=" var_value;';
put 'run;';
put '/* load parameters (override HIST again if provided) */';
put '%mpe_getvars(BrowserParams, BrowserParams)';
put '/* determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '/* check to see if the user is an admin, or has *ALL* access rights */';
put '%let authcheck=0;';
put 'proc sql noprint;';
put 'create table work.authcheck';
put 'as select *';
put 'from usergroups';
put 'where upcase(groupname)="%upcase(&mpeadmins)"';
put 'or upcase(groupname) in (';
put 'select upcase(sas_group) from &mpelib..mpe_security';
put 'where libref=''*ALL*'' and &dc_dttmtfmt. lt tx_to';
put ');';
put 'select count(*) into: authcheck from &syslast;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after auth check)';
put ')';
put '/* now get the previous &hist records from mpe_submit */';
put 'proc sql;';
put 'create view work.submits as';
put 'select distinct a.TABLE_ID';
put ',cats(a.base_lib,''.'',a.base_ds) as base_table';
put ',put(a.SUBMITTED_ON_DTTM,yymmddhhmmss.) as submitted';
put ',a.submitted_reason_txt';
put ',a.submitted_by_nm as submitter';
put ',put(a.REVIEWED_ON_DTTM,yymmddhhmmss.) as REVIEWED';
put ',a.submit_status_cd as status';
put ',a.reviewed_on_dttm';
put ',a.reviewed_by_nm as approver';
put 'from &mpelib..mpe_submit(where=(submit_status_cd ne ''SUBMITTED'')) a';
put '%macro gethistory();';
put '%if &authcheck=0 %then %do;';
put '/* filter for allowed items */';
put 'left join &mpelib..mpe_security(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.base_lib=b.libref';
put 'and (a.base_ds=b.dsn or b.dsn=''*ALL*'')';
put 'where upcase(b.SAS_GROUP) in (select upcase(groupname) from work.usergroups)';
put 'and b.access_level in (''VIEW'',''AUDIT'',''EDIT'',''APPROVE'')';
put '%end;';
put '%mend gethistory;';
put '%gethistory()';
put 'order by a.submitted_on_dttm desc;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after fetching submits)';
put ')';
put 'data work.fromsas;';
put 'set work.submits;';
put 'if _n_ ge &startrow;';
put 'n+1;';
put 'if n>&hist then stop;';
put 'drop n;';
put 'run;';
put 'proc sql noprint;';
put 'select count(*) into: nobs from work.submits;';
put 'data work.histparams;';
put 'hist=&hist;';
put 'startrow=&startrow;';
put 'nobs=&nobs;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(OBJ,histparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=rejection;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Removes a staged data package from approval screen';
put '@details';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_lockanytable.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_alerts.sas';
put '@li mpe_getvars.sas';
put '@li removecolsfromwork.sas';
put ' Service Outputs
';
put ' fromsas
';
put '@li TABLE_ID';
put '@li SUBMITTED_REASON_TXT';
put '@li RESPONSE';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global STP_ACTION TABLE STP_REASON;';
put '%mpeinit()';
put '%mpe_getvars(BrowserParams, BrowserParams)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '/* get current status and base table */';
put 'data _null_;';
put 'set &mpelib..mpe_submit(where=(TABLE_ID="&TABLE"));';
put 'call symputx(''BASE_TABLE'',cats(base_lib,''.'',base_ds));';
put 'call symputx(''submit_status_cd'',submit_status_cd);';
put 'run;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: base_table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%quote(&submit_status_cd)=%quote(REJECTED))';
put ',mac=&_program';
put ',msg=%str(&table is already rejected!)';
put ')';
put '%mp_abort(iftrue= (&syscc ge 4)';
put ',mac=&_program';
put ',msg=%str(Issue on setup)';
put ')';
put '/**';
put '* determine if user is authorised to reject table';
put '*/';
put '%let user=%mf_getuser();';
put '%global authcheck; %let authcheck=0;';
put '%mpe_accesscheck(&base_table,outds=authAPP,user=&user,access_level=APPROVE)';
put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);';
put '%mp_abort(iftrue= (&authcheck=0)';
put ',mac=&_program..sas';
put ',msg=%str(User &user does not have APPROVE rights on &base_table and is not';
put 'in the &mpeadmins group)';
put ')';
put '/* update the control table to show table as rejected (and why) */';
put '%let now=%sysfunc(datetime());';
put 'data work.reject;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&table";';
put 'BASE_TABLE="&base_table";';
put 'REVIEW_STATUS_ID="REJECTED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&now;';
put 'REVIEW_REASON_TXT=symget(''STP_REASON'');';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&table rejection),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.reject;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&table rejection),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set submit_status_cd=''REJECTED'',';
put 'num_of_approvals_remaining=0,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&now';
put 'where table_id="&table";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc AFTER update...)';
put ')';
put '%mpe_alerts(alert_event=REJECTED';
put ', alert_lib=%scan(&BASE_TABLE,1,.)';
put ', alert_ds=%scan(&BASE_TABLE,2,.)';
put ', dsid=&TABLE';
put ')';
put 'data fromSAS;';
put 'RESPONSE=''SUCCESS!'';';
put 'set REJECT;';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/auditors;
%let service=getauditfile;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getauditfile.sas';
put '@brief Downloads a zip file containing audit info.';
put '@details The staging location from the &mpelocapprovals location';
put 'is zipped and returned as a file download. A user can only request the';
put 'audit pack if they have EDIT or APPROVE rights on the target table.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_verifymacvars.sas';
put '@li mpe_accesscheck.sas';
put '@li mp_abort.sas';
put '@li mp_dirlist.sas';
put '@li mp_binarycopy.sas';
put '@li mf_getattrn.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'options mprint;';
put '/* security checks */';
put '%let user=%mf_getuser();';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: libds';
put 'from &mpelib..mpe_submit';
put 'where table_id="&table";';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(libds table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: libds table)';
put ')';
put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT);';
put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE);';
put '%mp_abort(';
put 'iftrue=(';
put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put ')';
put ',mac=mpestp_audit';
put ',msg=%str(&user not authorised to download audit data for &table)';
put ')';
put 'ods package(ProdOutput) open nopf;';
put 'options notes source2 mprint;';
put '%let table=%unquote(&table);';
put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE);';
put 'data _null_;';
put 'set dirs;';
put 'retain str1';
put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";';
put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";';
put 'call execute(cats(str1,filename,str2));';
put 'run;';
put '%let archive_path=%sysfunc(pathname(work));';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name= "&table..zip" archive_path="&archive_path");';
put 'ods package(ProdOutput) close;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%nrstr(syscc=&syscc)';
put ')';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&archive_path/&table..zip)';
put ',outname=&table..zip';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getdiffs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdiffs.sas';
put '@brief Retrieves the diff file for viewing';
put '@details';
put ' SAS Macros
';
put '@li mpe_getvars.sas';
put '@li mpe_accesscheck.sas';
put '@li mf_getattrn.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mpe_getvars(BrowserParams, BrowserParams);';
put '/* security checks */';
put '%let user=%mf_getuser();';
put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT)';
put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE)';
put '%macro mpestp_diffs();';
put '%if %mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put '%then %do;';
put '%mp_abort(msg=%str(';
put '&user not authorised to download diffs data for &stp_table)';
put ',mac=mpestp_diffs.sas);';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* stream diffs csv to client */';
put '%mp_streamfile(contenttype=EXCEL';
put ',inloc=%str(&mpelocapprovals/&TABLE/&STP_DIFFS_CSV)';
put ',outname=&STP_DIFFS_CSV';
put ')';
put '%mend mpestp_diffs;';
put '%mpestp_diffs()';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getstagetable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getstagetable.sas';
put '@brief Retrieves the actual table that is being sent for update';
put '@details';
put ' SAS Macros
';
put '@li mf_getvalue.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let table_id=%mf_getvalue(work.iwant,table_id);';
put 'libname loc "&mpelocapprovals/&table_id";';
put 'data stagetable;';
put 'set loc.&table_id;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,stagetable,missing=STRING)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=postdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_md5(cvars=,nvars=);';
put '%local i var sep;';
put 'put(md5(';
put '%do i=1 %to %sysfunc(countw(&cvars));';
put '%let var=%scan(&cvars,&i,%str( ));';
put '&sep put(md5(trim(&var)),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '%do i=1 %to %sysfunc(countw(&nvars));';
put '%let var=%scan(&nvars,&i,%str( ));';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '),$hex32.)';
put '%mend mp_md5;';
put '%macro mp_loadformat(libcat,libds';
put ',loadtarget=NO';
put ',auditlibds=0';
put ',locklibds=0';
put ',delete_col=_____DELETE__THIS__RECORD_____';
put ',outds_add=0';
put ',outds_del=0';
put ',outds_mod=0';
put ',mdebug=0';
put ');';
put '/* set up local macro variables and temporary tables (with a prefix) */';
put '%local err msg prefix dslist i var fmtlist ibufsize;';
put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;';
put '%if &outds_add=0 %then %let dslist=&dslist outds_add;';
put '%if &outds_del=0 %then %let dslist=&dslist outds_del;';
put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;';
put '%let prefix=%substr(%mf_getuniquename(),1,21);';
put '%do i=1 %to %sysfunc(countw(&dslist));';
put '%let var=%scan(&dslist,&i);';
put '%local &var;';
put '%let &var=%upcase(&prefix._&var);';
put '%end;';
put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */';
put '%let libcat=%scan(&libcat,1,-);';
put '/* perform input validations */';
put '%mp_abort(';
put 'iftrue=(%mf_existds(&libds)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(&libds could not be found)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(FMTROW not found in &libds)';
put ')';
put '%let err=0;';
put '%let msg=0;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'value=upcase(value);';
put 'if &mdebug=0 then put name ''='' value;';
put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;';
put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'else if name=''LIBCAT'' then do;';
put 'if exist(value,''CATALOG'') le 0 then do;';
put 'call symputx(''msg'',"Unable to open catalog: "!!value);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))';
put 'and missing(value) then do;';
put 'call symputx(''msg'',"missing value in var: "!!name);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'set &libds;';
put 'if missing(fmtrow) then do;';
put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'run;';
put '%mp_abort(';
put 'iftrue=(&err ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(&msg)';
put ')';
put '%local cnt;';
put 'proc sql noprint;';
put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;';
put '%mp_abort(';
put 'iftrue=(&cnt ne %mf_nobs(&libds))';
put ',mac=&sysmacroname';
put ',msg=%str(Non-unique primary key on &libds)';
put ')';
put '/**';
put '* First, extract only relevant formats from the catalog';
put '*/';
put 'proc sql noprint;';
put 'select distinct';
put 'case';
put 'when type=''N'' then upcase(fmtname)';
put 'when type=''C'' then cats(''$'',upcase(fmtname))';
put 'when type=''I'' then cats(''@'',upcase(fmtname))';
put 'when type=''J'' then cats(''@$'',upcase(fmtname))';
put 'else "&sysmacroname:UNHANDLED"';
put 'end';
put 'into: fmtlist separated by '' ''';
put 'from &libds;';
put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)';
put '/* get a hash of the row */';
put '%local cvars nvars;';
put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP';
put 'DIG3SEP DATATYPE LANGUAGE;';
put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;';
put 'data &base_fmts/note2err;';
put 'set &base_fmts;';
put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);';
put 'run;';
put '/**';
put '* Ensure input table and base_formats have consistent lengths and types';
put '*/';
put 'data &inlibds/nonote2err;';
put 'length &delete_col $3 FMTROW 8 start end label $32767;';
put 'if 0 then set &base_fmts;';
put 'set &libds;';
put 'by type fmtname notsorted;';
put 'if &delete_col='''' then &delete_col=''No'';';
put 'fmtname=upcase(fmtname);';
put 'type=upcase(type);';
put 'if missing(type) then do;';
put 'if substr(fmtname,1,1)=''@'' then do;';
put 'if substr(fmtname,2,1)=''$'' then type=''J'';';
put 'else type=''I'';';
put 'end;';
put 'else do;';
put 'if substr(fmtname,1,1)=''$'' then type=''C'';';
put 'else type=''N'';';
put 'end;';
put 'end;';
put 'if type in (''N'',''I'') then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);';
put 'run;';
put '/**';
put '* Identify new records';
put '*/';
put 'proc sql;';
put 'create table &outds_add(drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'left join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where b.fmtname is null';
put 'and upcase(a.&delete_col) ne "YES"';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify modified records';
put '*/';
put 'create table &outds_mod (drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'inner join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where upcase(a.&delete_col) ne "YES"';
put 'and a.fmthash ne b.fmthash';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify deleted records';
put '*/';
put 'create table &outds_del(drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'inner join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where upcase(a.&delete_col)="YES"';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify fully deleted formats (where every record is removed)';
put '* These require to be explicitly deleted in proc format';
put '* del1 - identify _partial_ deletes';
put '* del2 - exclude these, and also formats that come with _additions_';
put '*/';
put 'create table &del1 as';
put 'select a.*';
put 'from &base_fmts a';
put 'left join &outds_del b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where b.fmtrow is null;';
put 'create table &del2 as';
put 'select * from &outds_del';
put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)';
put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc prior to load prep)';
put ')';
put '%if &loadtarget=YES %then %do;';
put '/* new records plus base records that are not deleted or modified */';
put 'data &ds1;';
put 'merge &base_fmts(in=base)';
put '&outds_mod(in=mod)';
put '&outds_add(in=add)';
put '&outds_del(in=del);';
put 'if not del and not mod;';
put 'by type fmtname fmtrow;';
put 'run;';
put '/* add back the modified records */';
put 'data &stagedata;';
put 'set &ds1 &outds_mod;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put '%end;';
put '/* mp abort needs to run outside of conditional blocks */';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc prior to actual load)';
put ')';
put '%if &loadtarget=YES %then %do;';
put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;';
put '%put There are no changes to load in &libcat!;';
put '%return;';
put '%end;';
put '%if &locklibds ne 0 %then %do;';
put '/* prevent parallel updates */';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&libcat,1,.)';
put ',ds=%scan(&libcat,2,.)-FC';
put ',ref=MP_LOADFORMAT commencing format load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '/* do the actual load */';
put 'proc format lib=&libcat cntlin=&stagedata;';
put 'run;';
put '/* apply any full deletes */';
put '%if %mf_nobs(&del2)>0 %then %do;';
put '%local delfmtlist;';
put 'proc sql noprint;';
put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')';
put 'when type=''C'' then cats(fmtname,''.FORMATC'')';
put 'when type=''J'' then cats(fmtname,''.INFMTC'')';
put 'when type=''I'' then cats(fmtname,''.INFMT'')';
put 'else cats(fmtname,''.BADENTRY!!!'') end';
put 'into: delfmtlist';
put 'separated by '' ''';
put 'from &del2;';
put 'proc catalog catalog=&libcat;';
put 'delete &delfmtlist;';
put 'quit;';
put '%end;';
put '%if &locklibds ne 0 %then %do;';
put '/* unlock the table */';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&libcat,1,.)';
put ',ds=%scan(&libcat,2,.)-FC';
put ',ref=MP_LOADFORMAT completed format load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '/* track the changes */';
put '%if &auditlibds ne 0 %then %do;';
put '%if &locklibds ne 0 %then %do;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&auditlibds,1,.)';
put ',ds=%scan(&auditlibds,2,.)';
put ',ref=MP_LOADFORMAT commencing audit table load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '%mp_storediffs(&libcat-FC';
put ',&base_fmts';
put ',TYPE FMTNAME FMTROW';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=&storediffs';
put ',mdebug=&mdebug';
put ')';
put 'proc append base=&auditlibds data=&storediffs;';
put 'run;';
put '%if &locklibds ne 0 %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&auditlibds,1,.)';
put ',ds=%scan(&auditlibds,2,.)';
put ',ref=MP_LOADFORMAT commencing audit table load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '%end;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc after load)';
put ')';
put '%if &mdebug=0 %then %do;';
put 'proc datasets lib=work;';
put 'delete &prefix:;';
put 'run;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%mend mp_loadformat;';
put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */';
put ',now= %sysfunc(datetime()) /* static processed timestamp */';
put ',etlsource= /* process from whence the data came */';
put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should';
put 'be appended into the target. */';
put ',LOADTARGET=NO /* set to yes to actually load the target */';
put ',CLOSE_VARS= /* provide close vars to override defaults */';
put ',dclib=NOTPROVIDED';
put ',mdebug=0';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%local lib ds nobs;';
put '/**';
put '* if a format catalog (suffix "-FC") we assume the catalog has already been';
put '* created by the calling program with a libds of work.fmtextract';
put '*/';
put '%let orig_lib=%upcase(%scan(&libds,1,.));';
put '%let orig_ds=%upcase(%scan(&libds,2,.));';
put '%let orig_libds=&libds;';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%let lib=WORK;';
put '%let ds=FMTEXTRACT;';
put '%let libds=&lib..&ds;';
put '%end;';
put '%else %do;';
put '%let lib=&orig_lib;';
put '%let ds=&orig_ds;';
put '%end;';
put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)';
put ',mac=&sysmacroname';
put ',msg=%str(dclib=NOTPROVIDED)';
put ')';
put '/* get table attributes */';
put '%let nobs=0;';
put 'data work.sumo_config;';
put 'set &mpelib..mpe_tables;';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="&orig_lib"';
put 'and dsn="&orig_ds";';
put 'call symputx(''LOADTYPE'',loadtype,''l'');';
put 'call symputx(''BUSKEY'',buskey,''l'');';
put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');';
put 'call symputx(''VAR_TXTO'',var_txto,''l'');';
put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');';
put 'call symputx(''VAR_BUSTO'',var_busto,''l'');';
put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');';
put '%if %length(&CLOSE_VARS)=0 %then %do;';
put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');';
put '%end;';
put 'call symputx(''nobs'',_n_,''l'');';
put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";';
put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');';
put 'put (_all_)(=);';
put 'run;';
put '/* check if table is actually configured to load */';
put '%if &nobs ne 1 %then %do;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="%mf_getuser()"';
put ',STATUS=''FAILED (BAD DS)''';
put ',CSV_DIR=symget(''ETLSOURCE'')';
put ',PROCESSED_DTTM=&now;';
put '%end;';
put '%mp_abort(iftrue= (&nobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Table not registered in &mpelib..mpe_tables)';
put ')';
put '%mp_abort(iftrue= (&nobs>1)';
put ',mac=&sysmacroname';
put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)';
put ')';
put '%if &LOADTYPE=TXTEMPORAL %then %do;';
put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/';
put ',tech_from=&VAR_TXFROM';
put ',tech_to = &VAR_TXTO';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=&ETLSOURCE';
put ',LOADTYPE=&loadtype';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',CLOSE_VARS=&CLOSE_VARS';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %if &loadtype=REPLACE %then %do;';
put '%if &LOADTARGET=YES %then %do;';
put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put 'data WORK.&STAGING_DS;';
put 'set WORK.&STAGING_DS;';
put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;';
put '&VAR_PROCESSED = &now;';
put '%end;';
put 'drop _____DELETE__THIS__RECORD_____;';
put 'run;';
put 'proc sql; delete * from &libds;';
put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;';
put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)';
put '%end;';
put '%else %do;';
put '/* is full replace so treat all staged records as new in diff screen */';
put 'data work.outds_mod work.outds_add ;';
put 'set work.&staging_ds;';
put 'output work.outds_add;';
put 'run;';
put '/* previous table will be considered fully deleted */';
put 'data work.outds_del;';
put 'set &lib..&ds;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '%bitemporal_dataloader(bus_from=,bus_to=';
put ',tech_from= ,tech_to = /* explicitly empty*/';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=%superq(etlsource)';
put ',LOADTYPE=UPDATE';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %if &loadtype=FORMAT_CAT %then %do;';
put '/**';
put '* run mp_formatload';
put '* inputs:';
put '* - LOADTARGET';
put '* - CATALOG';
put '* - STAGEDATA';
put '* - LOADAUDIT';
put '* outputs:';
put '* work.outds_add';
put '* work.outds_del';
put '* work.outds_mod';
put '*/';
put '%mp_loadformat(&orig_libds';
put ',&staging_ds';
put ',loadtarget=&LOADTARGET';
put ',auditlibds=&AUDIT_LIBDS';
put ',locklibds=&dclib..mpe_lockanytable';
put ',delete_col=_____DELETE__THIS__RECORD_____';
put ',outds_add=outds_add';
put ',outds_del=outds_del';
put ',outds_mod=outds_mod';
put ',mdebug=&mdebug';
put ')';
put '%end;';
put '%else %if &loadtype=BITEMPORAL %then %do;';
put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO';
put ',tech_from=&VAR_TXFROM';
put ',tech_to = &VAR_TXTO';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=%superq(etlsource)';
put ',LOADTYPE=BITEMPORAL';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',CLOSE_VARS=&CLOSE_VARS';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %do;';
put '%put WARNING: LOADTYPE &LOADTYPE not supported;';
put '%let syscc=4;';
put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)';
put ')';
put '%mend mpe_targetloader;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file postdata.sas';
put '@brief Either returns the file diffs or actually loads the data to target';
put '@details Before loading the target, a check is made against the time the';
put 'target was last updated (backend) and the time the DIFF was generated';
put '(frontend). If the target was updated whilst the DIFF was on the screen,';
put 'then the provided diff may have been incorrect and so a new DIFF should be';
put 'generated and approved before load.';
put 'Only 100 rows (of each DIFF type) are displayed on the DIFF screen.';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|ACTION:$char10.|TABLE:$char32.|DIFFTIME:$char29.|';
put '|---|---|---|';
put '|SHOW_DIFFS|DC20220208T142124517_124703_1184|"Tue, 08 Feb 2022 14:23:05 GMT"|';
put ' SAS Macros
';
put '@li bitemporal_dataloader.sas';
put '@li dc_assignlib.sas';
put '@li mf_existds.sas';
put '@li mf_existvar.sas';
put '@li mf_getattrn.sas';
put '@li mf_getengine.sas';
put '@li mf_getquotedstr.sas';
put '@li mf_getuniquelibref.sas';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_lockanytable.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_alerts.sas';
put '@li mpe_runhook.sas';
put '@li mpe_targetloader.sas';
put '@li removecolsfromwork.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '/* this could be a config setting if required */';
put '%let maxdiff=100;';
put '%mpeinit()';
put '/* load parameters */';
put 'data _null_;';
put 'set work.sascontroltable;';
put 'call symputx(''ACTION'',ACTION);';
put 'call symputx(''LOAD_REF'',TABLE);';
put '/* DIFFTIME is when the DIFF was generated on the frontend */';
put 'call symputx(''DIFFTIME'',DIFFTIME);';
put 'run;';
put '%global action is_err err_msg msg;';
put '%let is_err=0;';
put '%let user=%mf_getuser();';
put '%let sastime=%sysfunc(datetime());';
put 'data sastime;';
put 'dt_sastime=&sastime;';
put 'run;';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */';
put '/* so we share much of the logic from the actual load process */';
put '%let isfmtcat=0;';
put 'data APPROVE1;';
put 'set &mpelib..mpe_submit;';
put 'where TABLE_ID="&LOAD_REF";';
put '/* fetch mpe_submit data */';
put 'libds=cats(base_lib,''.'',base_ds);';
put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);';
put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);';
put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);';
put '/* other stuff that''s useful to do in data step */';
put 'call symputx(''orig_libds'',libds);';
put 'call symputx(''libds'',libds);';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''isfmtcat'',1);';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'putlog (_all_)(=);';
put '/* convert provided string DIFFTIME back to a numeric SAS datetime */';
put 'if "&action" ne "SHOW_DIFFS" then do;';
put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));';
put 'end;';
put 'length difftime $32;';
put 'DIFFTIME=put(&sastime,datetime19.2);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&isfmtcat=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: difftime orig_libds libds load_ref)';
put ')';
put '/* security checks */';
put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)';
put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc Before entering postdata macro)';
put ')';
put '%mp_abort(';
put 'iftrue=(';
put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put ')';
put ',mac=&_program';
put ',msg=%str(&user not authorised to view approval screen for &orig_libds)';
put ')';
put '%macro quickmacro(inds,outds);';
put 'data &outds ;';
put '%if %length(&VAR_BUSFROM)>0 %then %do;';
put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;';
put '%end;';
put 'if 0 then set &emptybasetable;';
put 'set &inds;';
put '%if %mf_existvar(&libds,&var_txfrom) %then %do;';
put 'drop &var_txfrom &var_txto;';
put '%end;';
put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;';
put 'drop _____DELETE__THIS__RECORD_____;';
put '%end;';
put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;';
put 'drop &VAR_PROCESSED;';
put '%end;';
put 'run;';
put '%mend quickmacro;';
put '%macro postdata();';
put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)';
put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then';
put '%do;';
put 'data params; set approve1; run;';
put '%webout(OPEN)';
put '%webout(OBJ,PARAMS)';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if &action=APPROVE_TABLE %then %do;';
put '/* check user is authorised to approve table */';
put '/* user could be an editor but not an approver */';
put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)';
put ',mac=&_program';
put ',msg=%str(&user may not APPROVE changes)';
put ')';
put '/* see if this user has already submitted an approval */';
put '%let prev_upload_check=1;';
put 'proc sql;';
put 'select count(*) into: prev_upload_check from &mpelib..mpe_review';
put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"';
put 'and REVIEW_STATUS_ID ne "SUBMITTED";';
put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);';
put '%if &authcheck=0 or &prev_upload_check=1 %then %do;';
put '%put WARNING: authcheck=&authcheck prev_upload_check=&prev_upload_check;';
put 'data apPARAMS;';
put 'AUTHORISED=&authcheck;';
put 'PREV_UPLOAD_CHECK=&prev_upload_check;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,apPARAMS);';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '/* now check if table has been updated since DIFF screen shown */';
put '%local fmt_tm usernm last_load etlsource;';
put '%let last_load=0;';
put 'proc sql noprint;';
put 'select max(processed_dttm) format=16.2 into: last_load';
put 'from &mpelib..mpe_dataloads';
put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";';
put 'select processed_dttm format=datetime19., user_nm, etlsource';
put 'into: fmt_tm, :usernm, :etlsource';
put 'from &mpelib..mpe_dataloads';
put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"';
put 'and processed_dttm=&last_load;';
put '%put TIMECHECK: &last_load>&difftime;';
put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;';
put '%let is_err=1;';
put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource';
put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;';
put '%return;';
put '%end;';
put '%if &syscc ne 0 %then %do;';
put '%let is_err=1;';
put '%let err_msg=syscc=&syscc before logchange;';
put '%return;';
put '%end;';
put '/* upload about to commence so ensure logs */';
put 'options notes mprint source2;';
put '%local oldloc;';
put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;';
put '%else %let oldloc=%qsysfunc(getoption(LOG));';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto';
put 'log="&mpelocapprovals/&LOAD_REF/approval.log";';
put 'run;';
put 'data _null_;';
put 'if _n_=1 then do;';
put 'length oldloc $1000;';
put 'oldloc=symget(''oldloc'');';
put 'putlog "****** redirected:" oldloc " *****";';
put 'end;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc printto';
put 'log="&mpelocapprovals/&LOAD_REF/approval.log";';
put 'run;';
put '%end;';
put '%if &syscc ne 0 %then %do;';
put '%let is_err=1;';
put '%let err_msg=syscc=&syscc after logchange;';
put '%return;';
put '%end;';
put '%end;';
put '/**';
put '* upload the actual table';
put '*/';
put '%local libref ds;';
put '%let libref=%scan(&orig_libds,1,.);';
put '%let ds=%scan(&orig_libds,2,.);';
put 'proc sql noprint;';
put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto';
put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO';
put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)';
put ',VAR_PROCESSED';
put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto';
put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO';
put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT';
put ',:VAR_PROCESSED';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="&libref"';
put 'and dsn="&ds";';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: mpelocapprovals orig_libds)';
put ')';
put '/* get dataset from approvals location (has same name as load_ref) */';
put '%let tmplib=%mf_getuniquelibref();';
put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";';
put 'data STAGING_DS;';
put 'set &tmplib..&LOAD_REF;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc before preapprove)';
put ')';
put '%dc_assignlib(WRITE,&libref)';
put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */';
put '%mpe_runhook(PRE_APPROVE_HOOK)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after preapprove)';
put ')';
put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;';
put '/* append to mpe_review table */';
put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);';
put 'data work.append_review;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&LOAD_REF";';
put 'BASE_TABLE="&orig_libds";';
put 'REVIEW_STATUS_ID="APPROVED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&sastime;';
put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.append_review;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* update mpe_submit table */';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&sastime';
put 'where table_id="&LOAD_REF";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'data apReqd;';
put 'AUTHORISED=1;';
put 'ALREADY_UPDATED=0;';
put 'ALREADY_UPDATED_DTTM=.;';
put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,apReqd);';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc entering TARGETLOADER)';
put ')';
put '%mpe_targetloader(libds=&orig_libds';
put ',now= &sastime';
put ',etlsource=&LOAD_REF';
put ',STAGING_DS=STAGING_DS';
put ',dclib=&mpelib';
put '%if &action=APPROVE_TABLE %then %do;';
put ',LOADTARGET=YES';
put '%end;';
put '%else %do;';
put ',LOADTARGET=NO';
put '%end;';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;';
put '/* empty dataset! */';
put 'data out;';
put 'set STAGING_DS;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc entering SHOWDIFFS)';
put ')';
put '%if &action=SHOW_DIFFS %then %do;';
put '/**';
put '* Now prepare the SHOW DIFFS (approve) screen';
put '*/';
put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first';
put 'need to find out what version TIME to query it for.. */';
put 'proc sql noprint;';
put 'select max(processed_dttm)-1 format=datetime19. into: tstamp';
put 'from &mpelib..mpe_dataloads';
put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";';
put 'quit;';
put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);';
put '/**';
put '* now create the DIFFS dataset';
put '* If using a database, then utilise pass through!';
put '* Create a temporary table inside the database for joins..';
put '*/';
put 'options mprint;';
put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));';
put '%put &libds engine type = &engine_type;';
put '%local inner_table ;';
put '%if &engine_type=OLEDB %then %do;';
put '/* generate a unique ID for the temporary table */';
put 'data _null_;';
put 'call symputx(''UNIQUE_REF''';
put ',cats(round(datetime(),1)';
put ',''_''';
put ',round(ranuni(0)*100000,1)';
put ')';
put ',''l''';
put ');';
put 'run;';
put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;';
put 'proc sql;';
put 'create table &inner_table as';
put 'select * from work.outds_mod;';
put '%end;';
put '%else %let inner_table=work.outds_mod;';
put 'proc sql;';
put 'create view work.originals2 as';
put 'select b.*';
put 'from &inner_table a';
put 'inner join &libds';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '(where=("&tstamp"dt < &VAR_TXTO))';
put '%end;';
put 'b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&buskey));';
put '%let idx_val=%scan(&buskey,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)';
put ';';
put 'create view bitemp5c_updates2 as';
put 'select * from work.outds_mod';
put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)';
put ';';
put 'data; set &libds;stop;run;';
put '%let emptybasetable=&syslast;';
put 'options varlenchk=nowarn; /* for small numerics (<8) */';
put '%quickmacro(work.outds_del,deleted)';
put '%quickmacro(work.outds_add,new)';
put '%quickmacro(bitemp5c_updates2,updates)';
put '%quickmacro(originals2,originals)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc in quickmacro)';
put ')';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=work.updates';
put 'out=cols (keep=name type length varnum format);';
put 'run;';
put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;';
put 'data cols; set cols; name=upcase(name);run;';
put '%let tempDIFFS_CSV=tempDiffs_%trim(';
put '%sysfunc(datetime(),flatdate.)).csv;';
put '/**';
put '* Store temp tables so we have a record of diffs';
put '* do not change this libname or table name as it is used in some';
put '* post approve hooks';
put '*/';
put 'data TEMPDIFFS (compress=no) /* for realistic file size */;';
put 'length _____status $10;';
put 'set work.deleted (in=_____del)';
put 'work.new(in=_____new)';
put 'work.updates (in=_____upd)';
put 'work.originals2 (in=_____orig);';
put 'if _____del then _____status=''DELETED '';';
put 'else if _____new then _____status=''NEW'';';
put 'else if _____upd then _____status=''UPDATED'';';
put 'else if _____orig then _____status=''ORIGINAL'';';
put 'run;';
put 'proc export data=TEMPDIFFS dbms=csv replace';
put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;';
put 'run;';
put 'proc sql noprint;';
put 'select filesize format=sizekmg10.1, filesize as filesize_raw';
put 'into: filesize,:filesize_raw';
put 'from dictionary.tables';
put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';';
put 'data params;';
put 'set approve1;';
put 'DIFFS_CSV="&tempDIFFS_CSV";';
put 'FILESIZE="&filesize";';
put 'FILESIZE_RAW=&filesize_raw;';
put 'if %mf_nobs(work.originals)>&maxdiff';
put 'or %mf_nobs(work.new)>&maxdiff';
put 'or %mf_nobs(work.deleted)>&maxdiff';
put 'or %mf_nobs(work.updates)>&maxdiff';
put 'then TRUNCATED="YES";';
put 'else TRUNCATED="NO";';
put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);';
put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);';
put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);';
put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);';
put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;';
put 'ISAPPROVER=''YES'';';
put '%end;';
put '%else %do;';
put 'ISAPPROVER=''NO'';';
put '%end;';
put 'run;';
put '/*';
put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.';
put '* To ensure consistency in the DIFF screen, we should apply the same formats';
put '* to the base table. Limit rows at the same time.';
put '*/';
put 'data work.originals;';
put 'if 0 then set deleted new updates;';
put 'set work.originals;';
put 'if _n_>&maxdiff then stop;';
put 'run;';
put '/* get additional submits against the same base table */';
put 'proc sort data=&mpelib..mpe_submit(where=(';
put 'submit_status_cd=''SUBMITTED''';
put 'and cats(base_lib,''.'',base_ds)="&orig_libds"';
put 'and table_id ne "&LOAD_REF"';
put ')) out=submits;';
put 'by descending submitted_on_dttm;';
put 'run;';
put '/* filter last 10 */';
put 'data submits;';
put 'set submits;';
put 'if _n_>10 then stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,params)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,submits)';
put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)';
put '/* need same for formatted view */';
put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)';
put '%webout(CLOSE)';
put '%if &engine_type=OLEDB %then %do;';
put 'proc sql; /* needs to be dropped AFTER view execution */';
put 'drop table &inner_table;';
put '%end;';
put '%return;';
put '%end;';
put '%if &action=APPROVE_TABLE %then %do;';
put '%approve:';
put '/**';
put '* store temp tables so we have a record of diffs';
put '* do not change this libname or table name as it is used in some';
put '* post approve hooks';
put '* for REPLACE loads, temp tables not made, so make them';
put '*/';
put '%if &LOADTYPE=REPLACE %then %do;';
put 'data work.outds_add; run;';
put 'data work.outds_mod; run;';
put 'data work.outds_del; run;';
put '%end;';
put 'libname approve "&mpelocapprovals/&LOAD_REF";';
put 'data; set &libds;stop;run;';
put '%let emptybasetable=&syslast;';
put 'data approve.ActualDiffs;';
put 'length _____STATUS_____ $10;';
put 'if 0 then set &emptybasetable;';
put 'set work.outds_del (in=_____del)';
put 'work.outds_add (in=_____new)';
put 'work.outds_mod (in=_____upd);';
put 'if _____del then _____STATUS_____=''DELETED'';';
put 'else if _____new then _____STATUS_____=''NEW'';';
put 'else if _____upd then _____STATUS_____=''UPDATED'';';
put '%if %mf_existvar(&libds,&var_txfrom) %then %do;';
put 'drop &var_txfrom &var_txto;';
put '%end;';
put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;';
put 'drop &VAR_PROCESSED;';
put '%end;';
put 'run;';
put 'proc export data=approve.ActualDiffs';
put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control table to show table as approved */';
put '/* append to mpe_review table */';
put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);';
put 'data work.append_review;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&LOAD_REF";';
put 'BASE_TABLE="&orig_libds";';
put 'REVIEW_STATUS_ID="APPROVED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&sastime;';
put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.append_review;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* update mpe_submit table */';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set submit_status_cd=''APPROVED'',';
put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&sastime';
put 'where table_id="&LOAD_REF";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* run post-approve hook */';
put '%mpe_runhook(POST_APPROVE_HOOK)';
put 'data apPARAMS;';
put 'AUTHORISED=1;';
put 'ALREADY_UPDATED=0;';
put 'ALREADY_UPDATED_DTTM=.;';
put 'DIFFTIME="&difftime";';
put 'if &syscc=0 then RESPONSE=''SUCCESS!'';';
put 'else response="SYSCC=&syscc.";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program 582';
put ',msg=%superq(msg)';
put ')';
put '%mpe_alerts(alert_event=APPROVED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&LOAD_REF';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,apPARAMS)';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mend postdata;';
put '%postdata()';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(iftrue= (&is_err=1)';
put ',mac=&_program';
put ',msg=%superq(err_msg)';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/editors;
%let service=getdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds';
put ',mode=VIEW';
put ',groupds=work.groups';
put ',clsds=work.clsview';
put ',outds=CLSVIEW';
put ',outmeta=work.cls_rules';
put ');';
put '%local col_list is_admin;';
put '/* filter for the appropriate rules */';
put 'proc sql;';
put 'create table &outmeta as';
put 'select CLS_VARIABLE_NM,';
put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE';
put 'from &clsds';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("&mode",''ALL'')';
put 'and CLS_ACTIVE=1';
put '%if &mode=VIEW %then %do;';
put 'and CLS_HIDE ne 1';
put '%end;';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)';
put 'and CLS_LIBREF="%upcase(&tgtlib)"';
put 'and CLS_TABLE="%upcase(&tgtds)"';
put 'group by CLS_VARIABLE_NM;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";';
put '%put &sysmacroname: &=is_admin;';
put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;';
put '%put &sysmacroname: no CLS rules to apply;';
put '%put &=is_admin;';
put '/* copy using append for speed */';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '/* ensure CLS_RULES is empty in case of admin */';
put 'data &outmeta;';
put 'set &outmeta;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &mode=VIEW %then %do;';
put '/* just send back the relevant columns */';
put '%let col_list=0;';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=0;';
put '%if &col_list=0 %then %do;';
put '/*';
put 'We have columns that are set to CLS_HIDE=1 but we do not have any to';
put 'explicitly show. Therefore we assume all columns are to be shown except';
put 'those that are explicitly hidden.';
put '*/';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=1;';
put 'data &outds;';
put 'set &inds;';
put 'drop &col_list;';
put 'run;';
put '%end;';
put '%else %do;';
put 'data &outds;';
put 'set &inds;';
put 'keep &col_list;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &mode=EDIT %then %do;';
put '/*';
put 'In this case we pass all columns and the frontend will filter out the';
put 'ones that are not allowed to be edited.';
put '*/';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: invalid mode - &mode!;';
put '%abort;';
put '%end;';
put '%mend mpe_columnlevelsecurity;';
put '%macro mp_dsmeta(libds,outds=work.dsmeta);';
put '%local ds1 ds2;';
put 'data;run; %let ds1=&syslast;';
put 'data;run; %let ds2=&syslast;';
put '/* setup the ODS capture */';
put 'ods output attributes=&ds1 enginehost=&ds2;';
put '/* export the metadata */';
put 'proc contents data=&libds;';
put 'run;';
put '/* load it into a single table */';
put 'data &outds (keep=ods_table name value);';
put 'length ods_table $10 name label2 label1 label $100';
put 'value cvalue cvalue1 cvalue2 $1000';
put 'nvalue nvalue1 nvalue2 8;';
put 'if _n_=1 then call missing (of _all_);';
put '* putlog (_all_)(=);';
put 'set &ds1 (in=atrs) &ds2 (in=eng);';
put 'if atrs then do;';
put 'ods_table=''ATTRIBUTES'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'if label2 ne '''' then do;';
put 'name=label2;';
put 'value=coalescec(cvalue2,put(nvalue2,best.));';
put 'output;';
put 'end;';
put 'end;';
put 'else if eng then do;';
put 'ods_table=''ENGINEHOST'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &ds1, &ds2;';
put '%mend mp_dsmeta;';
put '%macro mpe_dsmeta(libds, outds=dsmeta);';
put '%local ddsd ddld notes lenstmt;';
put '%let lenstmt=length ods_table $18 name $100 value $1000;';
put '%let libds=%upcase(&libds);';
put '%mp_dsmeta(&libds, outds=&outds)';
put 'data _null_;';
put 'set &mpelib..mpe_datadictionary;';
put 'where &dc_dttmtfmt < tx_to & dd_source=%upcase("&libds") & dd_type=''TABLE'';';
put 'call symputx(''ddsd'',dd_shortdesc,''l'');';
put 'call symputx(''ddld'',dd_longdesc,''l'');';
put 'run;';
put 'data &outds;';
put '&lenstmt;';
put 'if last then do;';
put 'ODS_TABLE=''MPE_DATADICTIONARY'';';
put 'NAME=''DD_SHORTDESC'';';
put 'VALUE="&ddsd";';
put 'output;';
put 'NAME=''DD_LONGDESC'';';
put 'VALUE="&ddld";';
put 'output;';
put 'end;';
put 'set &outds end=last;';
put 'output;';
put 'run;';
put 'data _data_;';
put 'set &mpelib..mpe_tables;';
put 'where libref="%scan(&libds,1,.)"';
put '& dsn="%scan(&libds,2,.)"';
put '& &dc_dttmtfmt 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mv_getgroupmembers(group';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroupmembers';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups/&group/members?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: Group &group not found!!;';
put 'data &outds;';
put 'length id name $43;';
put 'call missing(of _all_);';
put 'run;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'length id name $43;';
put 'set &libref1..items;';
put 'run;';
put 'libname &libref1 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put '%mend mv_getgroupmembers;';
put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);';
put '%mv_getgroupmembers(%str(&group),outds=&outds)';
put 'data &outds ;';
put 'length membername $64;';
put 'set &outds(rename=(name=MemberName));';
put 'run;';
put '%mend dc_getgroupmembers;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_getcols(ds, outds=work.cols);';
put '%local dropds;';
put 'proc contents noprint data=&ds';
put 'out=_data_ (keep=name type length label varnum format:);';
put 'run;';
put '%let dropds=&syslast;';
put 'data &outds(keep=name type length varnum format label ddtype fmtname);';
put 'set &dropds(rename=(format=fmtname type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if fmtname='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else format=cats(fmtname,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if fmtname='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');';
put 'else format=cats(fmtname,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put 'proc sql;';
put 'drop table &dropds;';
put '%mend mp_getcols;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_length(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_length)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_length(var);';
put 'if var=. then len=0;';
put 'else if missing(var) or trunc(var,3)=var then len=3;';
put 'else if trunc(var,4)=var then len=4;';
put 'else if trunc(var,5)=var then len=5;';
put 'else if trunc(var,6)=var then len=6;';
put 'else if trunc(var,7)=var then len=7;';
put 'else len=8;';
put 'return(len);';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_length;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mp_getmaxvarlengths(';
put 'libds';
put ',num2char=NO';
put ',outds=work.mp_getmaxvarlengths';
put ')/*/STORE SOURCE*/;';
put '%local vars prefix x var fmt srcds;';
put '%let vars=%mf_getvarlist(libds=&libds);';
put '%let prefix=%substr(%mf_getuniquename(),1,25);';
put '%let num2char=%upcase(&num2char);';
put '%if &num2char=NO %then %do;';
put '/* compile length function for numeric fields */';
put '%mcf_length(wrap=YES, insert_cmplib=YES)';
put '%end;';
put '%if &num2char=NO';
put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")';
put 'and %mf_getvarcount(&libds,typefilter=N) gt 0';
put '%then %do;';
put '/* custom functions not supported in summary operations */';
put '%let srcds=%mf_getuniquename();';
put 'data &srcds/view=&srcds;';
put 'set &libds;';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let var=%scan(&vars,&x);';
put '%if %mf_getvartype(&libds,&var)=N %then %do;';
put '&prefix.&x=mcf_length(&var);';
put '%end;';
put '%end;';
put 'run;';
put '%end;';
put '%else %let srcds=&libds;';
put 'proc sql;';
put 'create table &outds (rename=(';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '&prefix.&x=%scan(&vars,&x)';
put '%end;';
put '))';
put 'as select';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let var=%scan(&vars,&x);';
put '%if &x>1 %then ,;';
put '%if %mf_getvartype(&libds,&var)=C %then %do;';
put 'max(lengthn(&var)) as &prefix.&x';
put '%end;';
put '%else %if &num2char=YES %then %do;';
put '%let fmt=%mf_getvarformat(&libds,&var);';
put '%put fmt=&fmt;';
put '%if %str(&fmt)=%str() %then %do;';
put 'max(lengthn(cats(&var))) as &prefix.&x';
put '%end;';
put '%else %do;';
put 'max(lengthn(put(&var,&fmt))) as &prefix.&x';
put '%end;';
put '%end;';
put '%else %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;';
put 'max(&prefix.&x) as &prefix.&x';
put '%end;';
put '%else %do;';
put 'max(mcf_length(&var)) as &prefix.&x';
put '%end;';
put '%end;';
put '%end;';
put 'from &srcds;';
put 'proc transpose data=&outds';
put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));';
put 'run;';
put '%mend mp_getmaxvarlengths;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdata.sas';
put '@brief Returns a dataset to the editor front end';
put '@details';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|FILTER_RK:$5.|';
put '|---|---|';
put '|DC258467.MPE_X_TEST|-1|';
put ' Service Outputs
';
put ' sasdata
';
put ' sasparams
';
put 'Contains info on the request. One row is returned.';
put '@li CLS_FLG - set to 0 if there are no CLS rules (everything editable)';
put 'else set to 1 (CLS rules exist)';
put '@li ISMAP - set to 1 if the target DS is an excel map target, else 0';
put ' approvers
';
put ' dqrules
';
put ' dqdata
';
put ' cols
';
put 'Contains column level attributes.';
put '@li NAME - column name';
put '@li VARNUM - variable position. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li LABEL - variable label. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li FMTNAME - derived format name. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li DDTYPE - derived dropdown type. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li CLS_RULE - values include:';
put '- EDIT - the column is editable';
put '- READ - the column should be readonly';
put '- HIDE - the column should be hidden';
put '@li memlabel';
put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label';
put '@li longdesc - from MPE_DATADICTIONARY';
put ' maxvarlengths
';
put ' xl_rules
';
put ' query
';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_getgroupmembers.sas';
put '@li mf_existvar.sas';
put '@li mf_getattrn.sas';
put '@li mf_getvarlist.sas';
put '@li mf_existds.sas';
put '@li mf_getquotedstr.sas';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_getcols.sas';
put '@li mp_getmaxvarlengths.sas';
put '@li mp_validatecol.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_columnlevelsecurity.sas';
put '@li mpe_dsmeta.sas';
put '@li mpe_getlabels.sas';
put '@li mpe_filtermaster.sas';
put '@li mpe_runhook.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* Validate inputs';
put '*/';
put 'data work.intest;';
put 'length filter_rk 8;';
put 'set work.SASCONTROLTABLE;';
put '/* validate filter_rk */';
put 'if filter_rk le 0 then filter_rk=-1;';
put 'call symputx(''orig_libds'',upcase(libds));';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'is_fmt=1;';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put 'if is_libds=0 then do;';
put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''filter_rk'',filter_rk);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(Some err with service inputs)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: libds filter_rk)';
put ')';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* stream back meta info, further calls will return col metadata and actual data';
put '*/';
put '%let libref=%upcase(%scan(&libds,1,.));';
put '%let dsn=%upcase(%scan(&libds,2,.));';
put '%dc_assignlib(WRITE,&libref)';
put '/**';
put '* First check user has access permission to edit the table';
put '*/';
put '%put checking access;';
put '%let user=%mf_getuser();';
put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)';
put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)';
put ',mac=mpestp_getdata.sas';
put ',msg=&user is not authorised to edit &orig_libds %trim(';
put ')in the &mpelib..MPE_SECURITY table';
put ')';
put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)';
put ',mac=mpestp_getdata.sas';
put ',msg=dataset &libds does not exist!!';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at line 60 )';
put ')';
put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype';
put 'sortpk;';
put '%put getting table attributes;';
put 'proc sql noprint;';
put 'select upcase(loadtype)';
put ',var_txfrom,var_txto';
put ',var_busfrom,var_busto';
put ',var_processed,rk_underlying,buskey';
put ',coalesce(rk_underlying,buskey)';
put ',pre_edit_hook';
put ',case when missing(rk_underlying) then buskey else rk_underlying end';
put 'into: loadtype,:var_txfrom,:var_txto';
put ',:var_busfrom ,:var_busto';
put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt TX_TO';
put 'and upcase(dsn)="%scan(&orig_libds,2,.)"';
put 'and upcase(libref)="%scan(&orig_libds,1,.)";';
put '%put preparing filter query:;';
put '%mpe_filtermaster(EDIT,&orig_libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter_rk,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%macro mpestp_getdata();';
put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;';
put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;';
put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;';
put '%put NOTE-;%put NOTE-;';
put '%global DC_MAXOBS_WEBEDIT;';
put '%let DC_MAXOBS_WEBEDIT=500;';
put '%end;';
put '/* for tables which use RKs/SKs then we just expose the business key to';
put 'users - this lets uploads be sent to multiple environments (with';
put 'potentially different RK/SK values for the same business key).';
put 'Note that the config table has the RK column in the buskey field in';
put 'this scenario. */';
put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;';
put '%else %let drop_rk=;';
put '/* always remove the PROCESSED_DTTM column, if it exists */';
put '%if %length(&var_processed)=0 %then %do;';
put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then';
put '%let var_processed=PROCESSED_DTTM;';
put '%end;';
put '/**';
put '* Now get the slice of the actual table';
put '*/';
put 'options obs=10000;';
put '%if &loadtype=BITEMPORAL %then %do;';
put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );';
put '_____DELETE__THIS__RECORD_____="No";';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put 'proc sort data=out;';
put 'by &pk &var_busfrom;';
put 'run;';
put 'data out;';
put 'set out;';
put 'by &pk &var_busfrom;';
put 'if last.%scan(&pk,-1);';
put 'run;';
put '%end;';
put '%else %do;';
put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);';
put '_____DELETE__THIS__RECORD_____="No";';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put '%end;';
put 'options obs=max;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Issue with filtering (line 165) )';
put ')';
put 'options obs=&DC_MAXOBS_WEBEDIT;';
put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));';
put 'proc sort data=work.out; by &sortPK; run;';
put 'options obs=max;';
put '%mpe_runhook(PRE_EDIT_HOOK)';
put '%let obscnt=%mf_getattrn(work.out,NLOBS);';
put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)';
put ',mac=&_program';
put ',msg=Table is too big (&obscnt rows) - please filter and try again!';
put ')';
put '/* order delete var and pk fields at start of table */';
put '%let sourcevars=%mf_wordsInStr1ButNotStr2(';
put 'Str1=%mf_getvarlist(work.out)';
put ',Str2= _____DELETE__THIS__RECORD_____ &pk';
put ');';
put '%put sourcevars=&sourcevars;';
put 'data outdata;';
put '/* delete & pk fields come first */';
put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';';
put '/* keep remaining variable order */';
put '%if %length(&sourcevars)>0 %then %do;';
put 'attrib &sourcevars label='''';';
put '%end;';
put '_____DELETE__THIS__RECORD_____="No ";';
put '%if %mf_nobs(work.out)=0 %then %do;';
put '/* send empty row if empty table to help with hot rendering */';
put 'output;';
put '%end;';
put 'set work.out ;';
put 'run;';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=outdata';
put 'out=vars(keep=name type length varnum format: label);';
put 'run;';
put 'proc sort;';
put 'by varnum;';
put 'run;';
put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");';
put 'if type2=2 or type2=6 then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,formatl,''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';';
put 'else format=cats(format2,formatl,''.'',formatd);';
put 'type=''num'';';
put 'end;';
put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))';
put 'then PK=''YES'';';
put 'length ctrlOptions $500;';
put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';';
put 'else ctrlOptions='''';';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n';
put '%superq(syserrortext)';
put ')';
put ')';
put '%global jsdttmvars jsdtvars jstmvars;';
put 'data _null_;';
put 'set vars3 end=last;';
put 'if _n_>1 then comma='','';';
put 'length coltype $500.;';
put 'format=upcase(format);';
put 'coltype=cats(comma,''{"data":"'',name,''"'');';
put 'if ctrlOptions ne '''' then';
put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");';
put 'else if type=''num'' then do;';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then do;';
put 'colType=cats(coltype';
put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"''';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat datetimes in javascript format */';
put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);';
put 'end;';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then do;';
put '/* see bottom of file for more date formats!! */';
put '/* also when updating, update stagedata.sas and mp_getcols.sas';
put 'and mpe_loader.sas */';
put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"''';
put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat as javascript dates */';
put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);';
put 'end;';
put 'else if format=:''TIME'' or format=:''HHMM'' then do;';
put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"''';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat as javascript times */';
put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);';
put 'end;';
put 'else do;';
put '/* is standard numeric but need to ascertain precision */';
put 'retain base ''000000000000000000'';';
put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));';
put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');';
put 'end;';
put 'end;';
put 'else colType=cats(coltype,''}'');';
put 'length concatcoltype $32767;';
put 'retain concatcoltype;';
put 'concatcoltype=cats(concatcoltype,coltype);';
put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)';
put ')';
put 'PROC FORMAT;';
put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s''';
put '(datatype=datetime);';
put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);';
put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);';
put 'RUN;';
put '/* before we send the data, need to rebuild all date & datetime vars as char*/';
put '%let finalvars=%mf_getvarlist(work.outdata);';
put 'data sasdata;';
put '/* set formats & col order ahead of rename+import */';
put 'informat &finalvars ;';
put '/* read dataset and rename date / datetime vars as necessary */';
put 'set outdata';
put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;';
put '(rename=(';
put '%local dtvarnum dtvar tmvar;';
put '/* temp datetime vars end in _____ */';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));';
put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);';
put '&dtvar=_____&dtvarnum._____';
put '%end;';
put '/* temp date vars do not end in _____ */';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));';
put '%let dtvar=%scan( &jsdtvars,&dtvarnum);';
put '&dtvar=_____&dtvarnum';
put '%end;';
put '/* temp time vars end in ___tm */';
put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));';
put '%let tmvar=%scan( &jstmvars,&tmvarnum);';
put '&tmvar=_____&tmvarnum.___tm';
put '%end;';
put '))';
put '%end;';
put ';';
put '%if %length(&jsdttmvars)>0 %then %do ;';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));';
put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);';
put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));';
put 'if &dtvar="ERROR" then call missing(&dtvar);';
put 'drop _____&dtvarnum._____;';
put '%end;';
put '%end;';
put '%if %length(&jsdtvars)>0 %then %do;';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));';
put '%let dtvar=%scan(&jsdtvars,&dtvarnum);';
put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));';
put 'if &dtvar="ERROR" then call missing(&dtvar);';
put 'drop _____&dtvarnum;';
put '%end;';
put '%end;';
put '%if %length(&jstmvars)>0 %then %do;';
put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));';
put '%let tmvar=%scan(&jstmvars,&tmvarnum);';
put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));';
put 'if &tmvar="ERROR" then call missing(&tmvar);';
put 'drop _____&tmvarnum.___tm;';
put '%end;';
put '%end;';
put 'output;';
put 'run;';
put '/* get the relevant approvers for the drop down */';
put '%put getting approvers;';
put '%local sas_groups sas_i sas_group;';
put 'proc sql noprint;';
put 'select distinct sas_Group into: sas_groups separated by "|"';
put 'from &mpelib..mpe_security';
put 'where libref="%scan(&orig_libds,1,.)"';
put 'and dsn="%scan(&orig_libds,2,.)"';
put 'and access_level=''APPROVE''';
put 'and &dc_dttmtfmt. lt TX_TO;';
put '%if %length(&sas_groups)=0 %then %do;';
put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)';
put '%end;';
put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));';
put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));';
put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)';
put 'proc append base=work.access1 data=work.temp&sas_i;run;';
put '%end;';
put '%mend mpestp_getdata;';
put '%mpestp_getdata()';
put '%mp_abort(mode=INCLUDE)';
put '/* extract column level security rules */';
put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata';
put ',mode=EDIT';
put ',clsds=&mpelib..mpe_column_level_security';
put ',groupds=work.groups /* was created in mpe_filtermaster */';
put ',outds=work.sasdata1';
put ',outmeta=work.cls_rules';
put ')';
put '/* get labels */';
put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc extracting spec info)';
put ')';
put '/* extract col info */';
put '%mp_getcols(&libds, outds=cols1)';
put '/* join with cls rules */';
put 'proc sql;';
put 'create table work.cols as';
put 'select a.NAME';
put ',a.VARNUM';
put ',a.LABEL';
put ',a.FMTNAME';
put ',a.DDTYPE';
put ',case b.cls_hide';
put 'when 1 then ''HIDE''';
put 'when 0 then ''EDIT''';
put 'else ''READ'' end as CLS_RULE';
put ',c.memlabel';
put ',c.desc';
put ',c.longdesc';
put 'from work.cols1 a';
put 'left join work.cls_rules b';
put 'on a.NAME=b.CLS_VARIABLE_NM';
put 'left join work.spec c';
put 'on a.NAME=c.NAME;';
put 'proc sql;';
put 'create table approvers as select distinct membername as personname';
put ',membername as email, membername as userid';
put 'from work.access1;';
put '/*';
put 'create table access3 as select b.userid,b.email';
put 'from access2 a';
put ',support.users b';
put 'where a.personname=b.userid';
put 'and a.personname ne "%mf_getuser()"';
put 'and %sysfunc(datetime()) lt b.tx_to_dttm';
put 'order by 1;';
put '*/';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'input;';
put 'length filter_text $32767;';
put 'retain filter_text;';
put 'filter_text=catx('' '',filter_text,_infile_);';
put 'if eof then do;';
put 'if cats(filter_text)=''1=1'' then filter_text='''';';
put 'call symputx(''filter_text'',filter_text);';
put 'end;';
put 'run;';
put '%put params;';
put '%let ismap=0;';
put 'proc sql noprint;';
put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;';
put 'data sasparams;';
put 'length colHeaders $20000 filter_text $32767;';
put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));';
put 'pkCnt=countw("&pk");';
put 'pk="&pk";';
put 'dtvars=compbl("&jsdtvars");';
put 'dttmvars=compbl("&jsdttmvars");';
put 'tmvars=compbl("&jstmvars");';
put 'length coltype $32000;';
put 'coltype=symget(''coltype'');';
put 'loadtype=symget(''loadtype'');';
put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;';
put 'else rk_flag=0;';
put 'filter_text=symget(''filter_text'');';
put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;';
put 'else cls_flag=1;';
put 'put (_all_)(=);';
put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;';
put 'else ismap=0;';
put 'run;';
put '/* Extract validation DQ Rules */';
put 'proc sort data=&mpelib..mpe_validations';
put '(where=(&dc_dttmtfmt. le TX_TO';
put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"';
put 'and rule_active=1))';
put 'out=dqrules (keep=base_col rule_type rule_value);';
put 'by base_col rule_type rule_value;';
put 'run;';
put '/* merge with NOTNULL constraints in the physical table */';
put 'proc sql;';
put 'create table _data_ as';
put 'select * from dqrules';
put 'union';
put 'select upcase(name) as base_col';
put ',''NOTNULL'' as rule_type';
put ','''' as rule_value';
put 'from dictionary.columns';
put 'where upcase(libname)="%scan(&orig_libds,1,.)"';
put 'and upcase(memname)="%scan(&orig_libds,2,.)"';
put 'and upcase(name) in (select name from vars3)';
put 'and notnull=''yes''';
put 'order by 1,2,3;';
put 'data dqrules;';
put 'set &syslast;';
put 'by base_col rule_type rule_value;';
put 'if last.rule_type;';
put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then';
put 'do;';
put 'retain x 0; x+1;';
put 'call symputx(cats(''source'',x),rule_value);';
put '%let sourcecnt=0;';
put 'call symputx(''sourcecnt'',x);';
put 'call symputx(cats(''base_col'',x),base_col);';
put 'end;';
put 'run;';
put 'proc sql;';
put 'create table dqdata as';
put 'select distinct base_column as base_col length=32';
put ',upcase(base_column) as rule_value length=74 /* deprecated */';
put ',selectbox_value as rule_data length=1000';
put ',selectbox_order';
put 'from &mpelib..mpe_selectbox';
put 'where &dc_dttmtfmt. lt ver_to_dttm';
put 'and select_lib="%scan(&orig_libds,1,.)"';
put 'and select_ds="%scan(&orig_libds,2,.)";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc during DQ rule validation)';
put ')';
put '/* extract selectbox data */';
put '%macro dq_selects();';
put '%local x source lib ds col;';
put '%do x=1 %to &sourcecnt;';
put '%let source=&&source&x;';
put '%let lib=%scan(&source,1,.);';
put '%let ds=%scan(&source,2,.);';
put '%let col=%scan(&source,3,.);';
put '%put &=source;';
put '%put &=lib;';
put '%dc_assignlib(READ,&lib)';
put 'proc sql;';
put 'create table dqdata&x as';
put 'select distinct "&&base_col&x" as base_col length=32';
put ',"&source" as rule_value length=74';
put ',cats(&col) as rule_data length=1000';
put ',&col as tmp_order';
put 'from &lib..&ds';
put 'order by tmp_order;';
put '/* ensure both numerics and char vals are ordered correctly */';
put 'data work.dqdata&x (drop=tmp_order);';
put 'set work.dqdata&x;';
put 'selectbox_order=_n_;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)';
put ')';
put 'proc append base=dqdata data=dqdata&x;run;';
put 'proc sql; drop table dqdata&x;';
put '%end;';
put '%mend dq_selects;';
put '%dq_selects()';
put 'proc sort data=dqdata;';
put '/* order by selectbox_order then the value */';
put 'by base_col selectbox_order rule_data;';
put 'run;';
put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)';
put 'data maxvarlengths;';
put 'set maxvarlengths;';
put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;';
put 'run;';
put 'data xl_rules;';
put 'set &mpelib..mpe_excel_config;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";';
put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";';
put 'where also xl_active=1;';
put 'keep xl_column xl_rule;';
put 'run;';
put '%mpe_dsmeta(&libds, outds=dsmeta)';
put '/* send to the client */';
put '%webout(OPEN)';
put '%webout(OBJ,approvers)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dqdata)';
put '%webout(OBJ,dqrules)';
put '%webout(OBJ,dsmeta)';
put '%webout(OBJ,maxvarlengths)';
put '%webout(OBJ,query)';
put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)';
put '%webout(OBJ,sasparams)';
put '%webout(OBJ,xl_rules)';
put '%webout(CLOSE)';
put '/*';
put '$N8601Bw';
put '$N8601BAw';
put '$N8601Ew';
put '$N8601EAw';
put '$N8601EHw';
put '$N8601EXw';
put '$N8601Hw';
put '$N8601Xw';
put 'B8601DAw';
put 'B8601DNw';
put 'B8601DTw';
put 'B8601DZw';
put 'B8601LZw';
put 'B8601TMw';
put 'B8601TZw';
put 'DATEw';
put 'DATEAMPMw';
put 'DATETIMEw';
put 'DAYw';
put 'DDMMYYw';
put 'DDMMYYxw';
put 'DOWNAMEw';
put 'DTDATEw';
put 'DTMONYYw';
put 'DTWKDATXw';
put 'DTYEARw';
put 'DTYYQCw';
put 'E8601DAw';
put 'E8601DNw';
put 'E8601DTw';
put 'E8601DZw';
put 'E8601LZw';
put 'E8601TMw';
put 'E8601TZw';
put 'HHMMw';
put 'HOURw';
put 'JULDAYw';
put 'JULIANw';
put 'MMDDYYw';
put 'MMDDYYxw';
put 'MMSSw';
put 'MMYYw';
put 'MMYYxw';
put 'MONNAMEw';
put 'MONTHw';
put 'MONYYw';
put 'PDJULGw';
put 'PDJULIw';
put 'QTRw';
put 'QTRRw';
put 'TIMEw';
put 'TIMEAMPMw';
put 'TODw';
put 'WEEKDATEw';
put 'WEEKDATXw';
put 'WEEKDAYw';
put 'WEEKUw';
put 'WEEKVw';
put 'WEEKWw';
put 'WORDDATEw';
put 'WORDDATXw';
put 'YEARw';
put 'YYMMw';
put 'YYMMxw';
put 'YYMMDDw';
put 'YYMMDDxw';
put 'YYMONw';
put 'YYQw';
put 'YYQxw';
put 'YYQRw';
put 'YYQRxw';
put '$N8601BAw';
put '$N8601Ew';
put '$N8601EAw';
put '$N8601EHw';
put '$N8601EXw';
put '$N8601Hw';
put '$N8601Xw';
put 'B8601DAw';
put 'B8601DNw';
put 'B8601DTw';
put 'B8601DZw';
put 'B8601LZw';
put 'B8601TMw';
put 'B8601TZw';
put 'E8601DAw';
put 'E8601DNw';
put 'E8601DTw';
put 'E8601DZw';
put 'E8601LZw';
put 'E8601TMw';
put 'E8601TZw';
put '*/';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getdynamiccolvals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdynamiccolvals.sas';
put '@brief Provide dynamic list of values according to a SAS program or service';
put '@details Configuration is made in the MPE_VALIDATIONS table, the dropdown';
put 'can be either a SOFTSELECT_HOOK or HARDSELECT_HOOK.';
put 'Results are sent in ARRAY format for efficiency.';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|VARIABLE_NM:$32.|';
put '|---|---|';
put '|DC258467.MPE_SECURITY|SAS_GROUP|';
put ' SOURCE_ROW
';
put 'This contains the raw values from the source table.';
put ' Service Outputs
';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_getservicecode.sas';
put '@li mf_nobs.sas';
put '@li mp_abort.sas';
put '@li mp_include.sas';
put '@li mp_validatecol.sas';
put '@li mf_getapploc.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* Validate inputs';
put '*/';
put '%let err_msg=;';
put 'data work.intest;';
put 'set work.SASCONTROLTABLE;';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put '/* validate varname */';
put 'is_name=nvalid(variable_nm,''v7'');';
put 'putlog (_all_)(=);';
put 'if is_libds ne 1 then do;';
put 'msg=''ERR''!!''OR: Invalid libds:''!!libds;';
put 'call symputx(''err_msg'',msg);';
put 'stop;';
put 'end;';
put 'else if is_name ne 1 then do;';
put 'msg=''ERR''!!''OR: Invalid name:''!!variable_nm;';
put 'call symputx(''err_msg'',msg);';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''variable_nm'',variable_nm);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after reading work.sascontroltable)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(&err_msg)';
put ')';
put '%dc_assignlib(READ,%scan(&libds,1,.))';
put '/* ensure that work.dynamic_extended_values exists */';
put 'data work.dynamic_extended_values;';
put 'run;';
put '/**';
put '* Get the code to execute';
put '*/';
put 'data work.codetest;';
put 'set &mpelib..MPE_VALIDATIONS;';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and base_lib="%scan(&libds,1,.)"';
put 'and base_ds="%scan(&libds,2,.)"';
put 'and base_col="&variable_nm"';
put 'and RULE_TYPE in (''HARDSELECT_HOOK'',''SOFTSELECT_HOOK'')';
put 'and RULE_ACTIVE=1;';
put 'putlog (_all_)(=);';
put 'if length(rule_value)>1 then do;';
put 'call symputx(''pgmloc'',rule_value);';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'output;';
put 'stop;';
put 'end;';
put 'else stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.codetest)=0)';
put ',mac=&_program';
put ',msg=%str(Hook not found in &mpelib..mpe_validations for &libds..&variable_nm)';
put ')';
put '%macro getdynamiccolvals();';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '%mend getdynamiccolvals;';
put '%getdynamiccolvals()';
put '/* execute the dynamic code */';
put '%mp_include(sascode)';
put '%mp_abort(mode=INCLUDE)';
put '/* ensure that the DISPLAY_INDEX variable exists */';
put 'data work.dynamic_values;';
put 'length DISPLAY_INDEX 8 DISPLAY_VALUE $32767;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.dynamic_values;';
put 'display_index=coalesce(display_index,_n_);';
put 'keep DISPLAY_INDEX DISPLAY_VALUE RAW_VALUE;';
put 'run;';
put '/* ensure that work.dynamic_extended_values exists with correct types */';
put 'data work.dynamic_extended_values;';
put 'length DISPLAY_INDEX 8 EXTRA_COL_NAME $32 DISPLAY_VALUE $5000 DISPLAY_TYPE $1';
put 'RAW_VALUE_NUM 8 RAW_VALUE_CHAR $5000 FORCED_VALUE 8;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.dynamic_extended_values;';
put 'run;';
put '%webout(OPEN)';
put '%webout(ARR,dynamic_values,fmt=N)';
put '%webout(ARR,dynamic_extended_values,fmt=N)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getlog;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getlog.sas';
put '@brief Downloads the submission, useful if there is an error';
put '@details';
put ' SAS Macros
';
put '@li mf_verifymacvars.sas';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mp_dirlist.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: table)';
put ')';
put '/* security checks */';
put '%let user=%mf_getuser();';
put '%let check_access=0;';
put 'proc sql noprint;';
put 'select count(*) into: check_access from &mpelib..mpe_loads';
put 'where csv_dir="&table" and user_nm="&user";';
put '%mp_abort(iftrue= (&check_access=0 )';
put ',msg=%str(&user not authorised to download audit data for &table)';
put ',mac=mpestp_getlog.sas';
put ')';
put 'ods package(ProdOutput) open nopf;';
put 'options notes source2 mprint;';
put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE)';
put 'data _null_;';
put 'set dirs;';
put 'if scan(filename,-1,''.'') not in (''sas7bdat'',''wpd'');';
put 'retain str1';
put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";';
put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";';
put 'call execute(cats(str1,filename,str2));';
put 'run;';
put '%let archive_path=%sysfunc(pathname(work));';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name= "&table..zip" archive_path="&archive_path");';
put 'ods package(ProdOutput) close;';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&archive_path/&table..zip)';
put ',outname=&table..zip';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getsubmits;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getsubmits.sas';
put '@brief Returns a list of staged data items that need to be approved';
put '@details';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put 'proc sql noprint;';
put 'create table work.fromsas (rename=(SUBMITTED_ON=SUBMITTED_ON_DTTM)) as';
put 'select table_id';
put ',cats(base_lib,''.'',base_ds) as base_table';
put ',input_vars';
put ',input_obs';
put ',submitted_by_nm';
put ',submitted_reason_txt';
put ',''DEPRECATED'' as approve_group';
put ',submit_status_cd as review_status_id';
put ',reviewed_by_nm';
put ',reviewed_on_dttm';
put ',cats(put(SUBMITTED_ON_DTTM,yymmddhhmmss.)) as SUBMITTED_ON';
put 'from &mpelib..mpe_submit';
put 'where submitted_by_nm="%mf_getuser()" and submit_status_cd=''SUBMITTED''';
put 'order by submitted_on_dttm desc;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getxlmaps;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getxlmaps.sas';
put '@brief Returns a list of rules and other info for a specific xlmap_id';
put ' Service Inputs
';
put ' getxlmaps_in
';
put '|XLMAP_ID|';
put '|---|';
put '|Sample|';
put ' Service Outputs
';
put ' xlmaprules
';
put 'Filtered output of the dc.MPE_XLMAP_RULES table';
put '|XLMAP_ID|XLMAP_RANGE_ID|XLMAP_SHEET|XLMAP_START|XLMAP_FINISH|';
put '|---|---|---|---|---|';
put '|Sample|Range1|Sheet1|ABSOLUTE A1| |';
put '|Sample|Range2|Sheet1|RELATIVE R[2]C[2]|ABSOLUTE H11|';
put ' xlmapinfo
';
put 'Extra info for a map id';
put '|TARGET_DS|';
put '|---|';
put '|DCXXX.MPE_XLMAP_DATA|';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'data _null_;';
put 'set work.getxlmaps_in;';
put 'putlog (_all_)(=);';
put 'call symputx(''xlmap_id'',xlmap_id);';
put 'run;';
put 'proc sql noprint;';
put 'create table work.xlmaprules as';
put 'select xlmap_id';
put ',XLMAP_RANGE_ID';
put ',XLMAP_SHEET';
put ',XLMAP_START';
put ',XLMAP_FINISH';
put 'from &mpelib..MPE_XLMAP_RULES';
put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id"';
put 'order by xlmap_sheet, xlmap_range_id;';
put '%global target_ds;';
put 'select XLMAP_TARGETLIBDS into: target_ds';
put 'from &mpelib..MPE_XLMAP_INFO';
put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'data work.xlmapinfo;';
put 'target_ds=coalescec("&target_ds","&mpelib..MPE_XLMAP_DATA");';
put 'output;';
put 'stop;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,xlmaprules)';
put '%webout(OBJ,xlmapinfo)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=loadfile;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now;';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* make sure that the variables we are importing, actually';
put 'exist on the target table */';
put '/** edit - extra variables are now simply ignored';
put '%local very_bad_vars;';
put 'select name into: very_bad_vars separated by '' ''';
put 'from vars_csv1';
put 'where name not in (select name from vars)';
put 'and name ne "_____DELETE__THIS__RECORD_____";';
put '%if %length(&very_bad_vars) > 0 %then %do;';
put '%let msg=%str(WARNING: The following vars are not defined in %trim(';
put ')&libref..&ds, yet they exist in &csv_dir/&ds..csv: &very_bad_vars);';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '**/';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warning */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);';
put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;';
put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;';
put '%return;';
put '%end;';
put '/* presence of a period(.) indicates a physical location */';
put '%if %index(&in,.) %then %let in="&in";';
put '%if %index(&out,.) %then %let out="&out";';
put '/**';
put '* convert all cr and crlf within quotes to lf';
put '* convert all other cr or lf to crlf';
put '*/';
put 'data _null_;';
put 'infile &in recfm=n ;';
put 'file &out recfm=n;';
put 'retain isq iscrlf 0 qchar &qchar;';
put 'input inchar $char1. ;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'if isq then do;';
put '/* inside a quote change cr and crlf to lf */';
put 'if inchar=''0D''x then do;';
put 'put ''0A''x;';
put 'input inchar $char1.;';
put 'if inchar ne ''0A''x then do;';
put 'put inchar $char1.;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'end;';
put 'end;';
put 'else put inchar $char1.;';
put 'end;';
put 'else do;';
put '/* outside a quote, change cr and lf to crlf */';
put 'if inchar=''0D''x then do;';
put 'crblank:';
put 'put ''0D0A''x;';
put 'input inchar $char1.;';
put 'if inchar=''0D''x then do;';
put '/* multiple CR indicates CR formatted file with blank lines */';
put 'goto crblank;';
put 'end;';
put 'else if inchar ne ''0A''x then do;';
put 'put inchar $char1.;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'end;';
put 'end;';
put 'else if inchar=''0A''x then put ''0D0A''x;';
put 'else put inchar $char1.;';
put 'end;';
put 'run;';
put '%mend mp_cleancsv;';
put '/** @endcond */';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file loadfile.sas';
put '@brief Loads a file';
put '@details';
put ' SAS Macros
';
put '@li mddl_sas_cntlout.sas';
put '@li mp_abort.sas';
put '@li mf_getplatform.sas';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_mkdir.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li dc_assignlib.sas';
put '@li mpe_getgroups.sas';
put '@li mp_lockfilecheck.sas';
put '@li mpe_loader.sas';
put '@li mp_cleancsv.sas';
put '@li mp_binarycopy.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global table dlm;';
put '%mpeinit(fetch=NO)';
put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2';
put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;';
put '%macro load();';
put '%if %mf_getplatform()=SASVIYA %then %do;';
put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;';
put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));';
put '%if "&_webin_fileuri1" ne "" %then %do;';
put '%put &=_webin_fileuri1;';
put 'filename sjfref1 filesrvc "&_webin_fileuri1";';
put '%let _WEBIN_FILEREF1=sjfref1;';
put '%end;';
put '%if "&_webin_fileuri2" ne "" %then %do;';
put '%put &=_webin_fileuri2;';
put 'filename sjfref2 filesrvc "&_webin_fileuri2";';
put '%let _WEBIN_FILEREF2=sjfref2;';
put '%end;';
put '%end;';
put '%mend load;';
put '%load()';
put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));';
put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));';
put '%let abort=0;';
put '/* we do not know if the excel file will be first or second fileref */';
put 'data _null_;';
put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));';
put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));';
put 'if ext1=''CSV'' then do;';
put 'csvname=symget(''_WEBIN_FILENAME1'');';
put 'csvref=symget(''_WEBIN_FILEREF1'');';
put 'xlsname=symget(''_WEBIN_FILENAME2'');';
put 'xlsref=symget(''_WEBIN_FILEREF2'');';
put 'end;';
put 'else if ext2=''CSV'' then do;';
put 'csvname=symget(''_WEBIN_FILENAME2'');';
put 'csvref=symget(''_WEBIN_FILEREF2'');';
put 'xlsname=symget(''_WEBIN_FILENAME1'');';
put 'xlsref=symget(''_WEBIN_FILEREF1'');';
put 'end;';
put 'else call symputx(''abort'',1);';
put 'call symputx(''csvname'',csvname);';
put 'call symputx(''csvref'',csvref);';
put 'call symputx(''xlsname'',xlsname);';
put 'call symputx(''xlsref'',coalescec(xlsref,''0''));';
put 'run;';
put '%mp_abort(iftrue= (&abort=1)';
put ',mac=&_program';
put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!';
put '(Comma separated with .csv extension))';
put ')';
put '%let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: table)';
put ')';
put '%let table=%upcase(%trim(&table));';
put '/* load parameters */';
put 'data _null_;';
put 'libds=upcase(symget(''table''));';
put 'call symputx(''orig_libds'',libds);';
put 'call symputx(''orig_lib'',scan(libds,1,''.''));';
put 'call symputx(''orig_ds'',scan(libds,2,''.''));';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');';
put 'is_fmt=1;';
put 'end;';
put 'else call symputx(''libds'',libds);';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '/* check that the user has the requisite access */';
put '%mpe_getgroups(user=&user,outds=groups)';
put 'proc sql;';
put 'create table accesscheck as';
put 'select * from groups';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="EDIT"';
put 'and (';
put '(libref="&orig_lib" and dsn="&orig_ds")';
put 'or (libref="&orig_lib" and dsn="*ALL*")';
put 'or (libref="*ALL*" and dsn="*ALL*")';
put 'or (libref="*ALL*" and dsn="&orig_ds")';
put '));';
put '%let nobs=;';
put 'select count(*) into: nobs from &syslast;';
put '%mp_abort(iftrue= (&nobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)';
put ')';
put '%dc_assignlib(WRITE,&orig_lib)';
put '%mp_abort(iftrue= (&syscc ge 4)';
put ',mac=loadfile';
put ',msg=%str(Issue assigning library &orig_lib)';
put ')';
put '%global txfrom txto processed rk;';
put 'data _null_;';
put 'set &mpelib..MPE_TABLES;';
put 'where libref="&orig_lib" and dsn="&orig_ds";';
put 'call symputx(''txfrom'',var_txfrom);';
put 'call symputx(''txto'',var_txto);';
put 'call symputx(''processed'',var_processed);';
put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);';
put 'run;';
put '%mp_lockfilecheck(libds=&orig_libds)';
put 'data compare;';
put 'set &libds(drop=&txfrom &txto &processed &rk);';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc line 80)';
put ')';
put '/* get line terminator, assume it''s the first cr, lf, or crlf */';
put 'data _null_;';
put 'length text $32767 term $4;';
put 'call missing (of _all_);';
put 'fid=fopen("&csvref",''I'',32767,''b'');';
put 'rc=fread(fid);';
put 'rc2=fget(fid,text,32767);';
put 'cr=find(text,''0D''x );';
put 'lf=find(text,''0A''x );';
put 'crlf=find(text,''0D0A''x);';
put 'rc=fclose(fid);';
put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';';
put 'else term=''CR'';';
put 'call symputx(''termstr'',term);';
put 'run;';
put 'data _null_;';
put 'infile &csvref lrecl=32000 dsd termstr=&termstr;';
put 'input;';
put 'length incols_unsorted $32000 dlm $1;';
put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');';
put '/* dlm has length 1 so will be the first non alpha / digit char */';
put '/* expectation is that there will not be any crazy characters in first col! */';
put 'dlm=compress(incols_unsorted,''_ '',''ad'');';
put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');';
put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');';
put 'call symputx(''incols_unsorted'',incols_unsorted);';
put 'call symputx(''dlm'',dlm);';
put 'putlog incols_unsorted=;';
put 'putlog dlm=;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc line 99)';
put ')';
put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));';
put '%let missing_cols=%trim(';
put '%mf_wordsInStr1ButNotStr2(';
put 'Str1=&basecols';
put ',Str2=&incols_unsorted';
put '));';
put '%let msg=';
put 'Expected cols: &basecols';
put 'Received cols: &incols_unsorted';
put 'Missing cols: &missing_cols';
put ';';
put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)';
put ',mac=mpestp_loadfile.sas';
put ',msg=%superq(msg)';
put ')';
put '%let msg=0;';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/* create a dataset key (datetime plus 6 digit random number plus PID) */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* Create package folder and redirect the log */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put '/* clean embedded line breaks and force CRLF line endings */';
put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(issue in mp_cleancsv)';
put ')';
put '%put; %put; %put log is being redirected;';
put '%let url=_program=%substr(&_program';
put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;';
put '%put to retrieve, visit this url:; %put;%put;';
put '%put &url;';
put '%put;';
put '/* proc printto log="&dir/weblog.txt";run; */';
put 'libname approve "&dir";';
put 'options mprint;';
put '%put &=mperef;';
put '%put &=termstr;';
put '%put &=dlm;';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=%quote(File upload: %superq(csvname))';
put ',dlm=%superq(dlm)';
put ',url=%superq(url)';
put ',termstr=CRLF';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)';
put ',mac=&_program';
put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mpestp_loadfile.sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename outref "&dir/BKP_&xlsname";';
put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc when backing up source file &xlsname)';
put ')';
put 'data sasparams;';
put 'STATUS=''SUCCESS'';';
put 'DSID="&mperef";';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,sasparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=stagedata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now;';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* make sure that the variables we are importing, actually';
put 'exist on the target table */';
put '/** edit - extra variables are now simply ignored';
put '%local very_bad_vars;';
put 'select name into: very_bad_vars separated by '' ''';
put 'from vars_csv1';
put 'where name not in (select name from vars)';
put 'and name ne "_____DELETE__THIS__RECORD_____";';
put '%if %length(&very_bad_vars) > 0 %then %do;';
put '%let msg=%str(WARNING: The following vars are not defined in %trim(';
put ')&libref..&ds, yet they exist in &csv_dir/&ds..csv: &very_bad_vars);';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '**/';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warning */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_getfmttype(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_getfmttype)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_getfmttype(fmtnm $) $8;';
put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');';
put 'else do;';
put '/* extract NAME */';
put 'length fmt $32;';
put 'fmt=scan(fmtnm,1,''.'');';
put 'do while (';
put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')';
put ');';
put 'if length(fmt)=1 then fmt=''W'';';
put 'else fmt=substr(fmt,1,length(fmt)-1);';
put 'end;';
put '/* apply lookups */';
put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT''';
put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR''';
put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'')';
put 'then return(''DATETIME'');';
put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY''';
put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx''';
put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB''';
put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY''';
put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH''';
put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY''';
put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC''';
put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS''';
put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD''';
put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx''';
put ',''YYQS'',''YYQx'',''YYQZ'') then return(''DATE'');';
put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ''';
put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ''';
put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');';
put 'else return(''NUM'');';
put 'end;';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_getfmttype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2csv(ds';
put ',dlm=COMMA';
put ',outref=0';
put ',outfile=';
put ',outencoding=0';
put ',headerformat=LABEL';
put ',termstr=CRLF';
put ')/*/STORE SOURCE*/;';
put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WARN)ING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%if &outencoding=0 %then %let outencoding=;';
put '%else %let outencoding=encoding=&outencoding;';
put '%if &outref=0 %then %let outloc=&outfile;';
put '%else %let outloc=&outref;';
put '%if &headerformat=SASJS %then %do;';
put '%let delim=",";';
put '%let termstr=CRLF;';
put '%mcf_getfmttype(wrap=YES)';
put '%end;';
put '%else %if &dlm=COMMA %then %let delim=",";';
put '%else %let delim=";";';
put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */';
put '/* first get headers */';
put 'data _null_;';
put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;';
put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;';
put 'call missing(of _all_);';
put 'dsid=open("&ds.","i");';
put 'num=attrn(dsid,"nvars");';
put 'dlm=&delim;';
put 'do i=1 to num;';
put 'varnm=upcase(varname(dsid,i));';
put 'if i=num then dlm='''';';
put '%if &headerformat=NAME %then %do;';
put 'header=cats(varnm,dlm);';
put '%end;';
put '%else %if &headerformat=LABEL %then %do;';
put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);';
put '%end;';
put '%else %if &headerformat=SASJS %then %do;';
put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',varlen(dsid,i),''.'');';
put 'else do;';
put 'vfmt=coalescec(varfmt(dsid,i),''0'');';
put 'fmttype=mcf_getfmttype(vfmt);';
put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');';
put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');';
put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');';
put 'else header=cats(varnm,'':best.'');';
put 'end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Invalid headerformat value (&headerformat);';
put '%return;';
put '%end;';
put 'put header @;';
put 'end;';
put 'rc=close(dsid);';
put 'run;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let vcnt=%sysfunc(countw(&varlist));';
put '/**';
put '* The $quote modifier (without a width) will take the length from the variable';
put '* and increase by two. However this will lead to truncation where the value';
put '* contains double quotes (which are doubled up). To get around this, scan the';
put '* data to see the max number of double quotes, so that the appropriate width';
put '* can be applied in the subsequent step.';
put '*/';
put 'data _null_;';
put 'set &ds end=last;';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%if %mf_getvartype(&ds,&var)=C %then %do;';
put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);';
put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);';
put 'retain &dsv1 0;';
put '&dsv2=length(&var)+countc(&var,''"'');';
put 'if &dsv2>&dsv1 then &dsv1=&dsv2;';
put 'if last then call symputx(';
put '"vlen&i"';
put '/* should be no shorter than varlen, and no longer than 32767 */';
put ',cats(''$quote'',min(&dsv1+2,32767),''.'')';
put ',''l''';
put ');';
put '%end;';
put '%end;';
put '%let vat=@;';
put '%let vcom=&delim;';
put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);';
put '/* next, export data */';
put 'data _null_;';
put 'set &ds.;';
put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;';
put 'if _n_=1 then &vmiss='' '';';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%if &i=&vcnt %then %do;';
put '%let vat=;';
put '%let vcom=;';
put '%end;';
put '%if %mf_getvartype(&ds,&var)=N %then %do;';
put '%if &headerformat = SASJS %then %do;';
put '%let vcom=&delim;';
put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));';
put '%if &fmttype=DATE %then %let vfmt=DATE9.;';
put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;';
put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;';
put '%else %do;';
put '%let vfmt=;';
put '%let vcom=;';
put '%end;';
put '%end;';
put '%else %let vcom=;';
put '/* must use period - in order to work in both 9.4 and Viya 3.5 */';
put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;';
put '&vmiss=cats(''.'',&var);';
put 'put &vmiss &vat;';
put 'end;';
put 'else put &var &vfmt &vcom &vat;';
put '%end;';
put '%else %do;';
put '%if &i ne &vcnt %then %let vcom=&delim;';
put 'put &var &&vlen&i &vcom &vat;';
put '%end;';
put '%end;';
put 'run;';
put '%mend mp_ds2csv;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sends a changeset to staging area';
put '@details This is the service that is called when submitting a new edit.';
put ' Service Inputs
';
put ' jsdata
';
put 'This is the staged data table, plus an _____DELETE__THIS__RECORD_____ column';
put ' SASControlTable
';
put '|ACTION:$char4.|MESSAGE:$char1.|LIBDS:$char19.|';
put '|---|---|---|';
put '|LOAD|User-Provided message|LIBREF.DATASET_NAME|';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li dc_assignlib.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_mkdir.sas';
put '@li mf_getuniquefileref.sas';
put '@li mpe_loader.sas';
put '@li mpe_filtermaster.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_cntlout.sas';
put '@li mp_ds2csv.sas';
put '@li mf_getplatform.sas';
put '@li removecolsfromwork.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global approver; %let approver=;';
put '%global libref; %let libref=;';
put '%global dsn; %let dsn=;';
put '%global user; %let user=;';
put '%let user=%mf_getuser();';
put '/* load parameters */';
put 'data _null_;';
put 'set work.sascontroltable;';
put 'call symputx(''action'',action);';
put 'call symputx(''message'',message);';
put 'libds=upcase(libds);';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'is_fmt=1;';
put 'end;';
put 'else call symputx(''libds'',libds);';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* stream back meta info, further jquery calls will return col metadata and';
put 'actual data */';
put '%let libref=%upcase(%scan(&libds,1,.));';
put '%let dsn=%upcase(%scan(&libds,2,.));';
put '%dc_assignlib(WRITE,&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc - unable to assign library &libref)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: mpelocapprovals libds)';
put ')';
put '%put Verify that the upload does not violate Row Level Security checks:;';
put '%mpe_filtermaster(ULOAD,&libds,';
put 'dclib=&mpelib,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc during filtering process)';
put ')';
put '/* prepare inverse query */';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'file &tempref;';
put 'if _n_=1 then put ''where not('';';
put 'input;';
put 'put _infile_;';
put 'if eof then put '')'';';
put 'run;';
put '/* apply the query */';
put 'data work.badrecords;';
put 'set work.jsdata;';
put '%inc &tempref/source2;;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)';
put ',mac=&_program';
put ',msg=%str(';
put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted';
put ')';
put ')';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/**';
put '* Create package folder and redirect the log';
put '*/';
put '/* create a dataset key (datetime plus 6 digit random number plus PID) */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* get web url */';
put '%global url;';
put '%let url=localhost/SASStoredProcess;';
put '%let platform=%mf_getplatform();';
put '%put &=platform;';
put 'data _null_;';
put 'length url $128;';
put '%macro stagedata();';
put '%if &platform=SASVIYA %then %do;';
put 'if symexist(''_baseurl'') then do;';
put 'url=symget(''_baseurl'');';
put 'if subpad(url,length(url)-9,9)=''SASStudio''';
put 'then url=substr(url,1,length(url)-11);';
put 'else url="&systcpiphostname/SASJobExecution";';
put 'end;';
put 'else url="&systcpiphostname/SASJobExecution";';
put '%end;';
put '%else %if &platform=SASMETA %then %do;';
put 'rc=METADATA_GETURI("Stored Process Web App",url);';
put '%end;';
put '%mend stagedata;';
put '%stagedata()';
put 'call symputx(''url'',url);';
put 'putlog url=;';
put 'run;';
put '/* Create package folder */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put '/* redirect the log */';
put '%put; %put; %put log is being redirected;';
put '%put to retrieve, visit this url:; %put;%put;';
put '%let url=&url?_program=%substr(&_program';
put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;';
put '%put &url;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to log redirection)';
put ')';
put 'proc printto log="&dir/weblog.txt";run;';
put 'options notes mprint;';
put 'libname approve "&dir";';
put '/* take copy of webin file */';
put 'data _null_;';
put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');';
put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */';
put 'else ref=''indata1'';';
put 'call symputx(''ref'',ref);';
put 'putlog ref=;';
put 'run;';
put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)';
put '/* take copy of macvars */';
put 'data _null_;';
put 'file "&dir/macvars.sas";';
put 'set sashelp.vmacro;';
put 'where scope=''GLOBAL'';';
put 'put ''%let '' name ''='' value '';'';';
put 'run;';
put 'data approve.jsdset;';
put 'length _____DELETE__THIS__RECORD_____ $3;';
put 'set jsdata;';
put 'run;';
put '/**';
put '* mf_getvarXXX functions will fail if the target is locked - so take a copy';
put '* and reference that (this will also explicitly throw the lock situation)';
put '*/';
put '%let dscopy=work.dscopy;';
put 'data &dscopy;';
put 'set &libds;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Issue getting lock on &libds)';
put ')';
put '%mp_ds2csv(approve.jsdset';
put ',dlm=COMMA';
put ',outfile="&dir/&orig_libds..csv"';
put ',outencoding="UTF-8"';
put ',headerformat=NAME';
put ',termstr=CRLF';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when writing the CSV)';
put ')';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=%superq(message)';
put ',approver=%quote(%trim(&approver))';
put ',url=%superq(url)';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)';
put ',mac=&_program..sas';
put ',msg=%str(mf_abort.error=1)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* send relevant SUCCESS values */';
put 'data sasparams;';
put 'STATUS=''SUCCESS'';';
put 'DSID="&mperef";';
put 'url="&url";';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,sasparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/hooks;
%let service=mpe_column_level_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_COLUMN_LEVEL_SECURITY table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming column_level_security settings to ensure';
put 'each individual filter is valid';
put '**/';
put '/* check scope values and ensure uppercasing */';
put '%let errflag=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'cls_scope=upcase(cls_scope);';
put 'CLS_LIBREF=upcase(CLS_LIBREF);';
put 'cls_table=upcase(CLS_TABLE);';
put 'CLS_VARIABLE_NM=upcase(CLS_VARIABLE_NM);';
put 'if cls_scope not in (''ALL'',''VIEW'',''EDIT'') then do;';
put 'call symputx(''errflag'',1);';
put 'call symputx(''errmsg'',"Invalid scope: "!!cls_scope);';
put 'stop;';
put 'end;';
put 'if cls_hide<1 then cls_hide=0;';
put 'else cls_hide=1;';
put 'if CLS_ACTIVE<1 then CLS_ACTIVE=0;';
put 'else CLS_ACTIVE=1;';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_column_level_security_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_row_level_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_ROW_LEVEL_SECURITY table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming row_level_security settings to ensure';
put 'each individual filter is';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mp_filtercheck.sas';
put ' Related Macros
';
put '@li mpe_loader.sas';
put '**/';
put '/* ignore scope and group for validation */';
put 'proc sql;';
put 'create table work.batches as';
put 'select distinct upcase(rls_libref) as rls_libref,';
put 'upcase(rls_table) as rls_table,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from work.staging_ds';
put 'where rls_active=1';
put 'order by rls_libref, rls_table;';
put '%let cnt=0;';
put 'data _null_;';
put 'set work.batches;';
put 'by rls_libref rls_table;';
put 'putlog (_all_)(=);';
put 'if last.rls_table then do;';
put 'x+1;';
put 'call symputx(cats(''libds'',x),cats(rls_libref,''.'',rls_table));';
put 'call symputx(''cnt'',x);';
put 'end;';
put 'run;';
put '%macro quickloop();';
put '%do i=1 %to &cnt;';
put 'data work.inds&i;';
put 'set work.batches;';
put 'if cats(rls_libref,''.'',rls_table)="&&libds&i";';
put 'keep group_logic subgroup_logic subgroup_id variable_nm operator_nm';
put 'raw_value;';
put 'run;';
put '%dc_assignlib(READ,%scan(&&libds&i,1,.))';
put '%mp_filtercheck(work.inds&i';
put ',targetds=&&libds&i';
put ',outds=work.badrecords';
put ',abort=YES';
put ')';
put '%end;';
put '%mend quickloop;';
put '%quickloop()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_SECURITY table';
put '@details Post edit hooks provide additional backend validation against';
put 'user-sourced data. The incoming dataset is always `work.staging_ds` and this';
put 'file is included from the mpe_loader.sas macro.';
put 'Available (at runtime) macro variables:';
put '@li DC_LIBREF - The DC control library for your site';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put '**/';
put '/* ensure upcase and check access level values*/';
put '%let errval=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'ACCESS_LEVEL=upcase(ACCESS_LEVEL);';
put 'if ACCESS_LEVEL not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;';
put 'putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;';
put 'call symputx(''errval'',1);';
put 'call symputx(''errmsg'',"Invalid ACCESS_LEVEL: "!!access_level);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&errval=1)';
put ',mac=mpe_security_postedit.sas';
put ',msg=%str(&errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_tables_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_TABLES table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks MPE_TABLES to ensure modified / added records are';
put 'valid. If a non-default AUDIT_LIBDS is being used, there is also a check';
put 'to ensure that this table already exists.';
put '**/';
put '%let errmsg=;';
put '%let errflag=0;';
put '/* ensure uppercasing */';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'loadtype=upcase(loadtype);';
put 'buskey=upcase(buskey);';
put 'var_txfrom=upcase(var_txfrom);';
put 'var_txto=upcase(var_txto);';
put 'var_busfrom=upcase(var_busfrom);';
put 'var_busto=upcase(var_busto);';
put 'var_processed=upcase(var_processed);';
put 'close_vars=upcase(close_vars);';
put 'audit_libds=upcase(audit_libds);';
put 'rk_underlying=upcase(rk_underlying);';
put '/* check for valid loadtype */';
put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')';
put 'then do;';
put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);';
put 'call symputx(''errflag'',1);';
put 'end;';
put '/* force correct BUSKEY and DSN when loading format catalogs */';
put 'if LOADTYPE=''FORMAT_CAT'' then do;';
put 'BUSKEY=''TYPE FMTNAME FMTROW'';';
put 'DSN=scan(dsn,1,''-'')!!''-FC'';';
put 'end;';
put '/* convert tabs into spaces */';
put 'buskey=translate(buskey," ","09"x);';
put 'rk_underlying=translate(rk_underlying," ","09"x);';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_tables_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '/* get distinct list of audit libs */';
put 'proc sql;';
put 'create table work.liblist as';
put 'select distinct audit_libds';
put 'from work.staging_ds';
put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")';
put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";';
put '/* assign the libs */';
put 'data _null_;';
put 'set work.liblist;';
put 'call symputx(cats(''lib'',_n_),audit_libds);';
put 'libref=scan(audit_libds,1,''.'');';
put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');';
put 'run;';
put '/* check the audit tables exist */';
put 'data _null_;';
put 'set work.liblist;';
put 'if exist(audit_libds,"DATA")=0 then do;';
put 'call symputx(''errmsg'',';
put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."';
put ');';
put 'call symputx(''errflag'',1);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_tables_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_validations_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_VALIDATIONS table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming mpe_validations settings to ensure';
put 'there are no columns that have both HARDSELECT_HOOK and SOFTSELECT_HOOK.';
put ' SAS Macros
';
put '@li mf_nobs.sas';
put ' Related Macros
';
put '@li mpe_loader.sas';
put '**/';
put '/** check to avoid a colum having both HARDSELECT_HOOK and SOFTSELECT_HOOK */';
put '/* need to merge with base table in the case of a single row being added */';
put '%global src_list1 src_list2;';
put '%let src_list1='''';';
put 'proc sql noprint;';
put 'create table work.check1 as';
put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source';
put ',rule_type';
put 'from work.staging_ds';
put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')';
put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";';
put 'select distinct cats(source) into: src_list1 separated by '',''';
put 'from work.check1;';
put 'create table work.check2 as';
put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source';
put ',rule_type';
put 'from &DC_LIBREF..MPE_VALIDATIONS';
put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and catx(''.'',base_lib,base_ds,base_col) in (&src_list1);';
put 'create table work.check3 as';
put 'select * from work.check1';
put 'union';
put 'select * from work.check2;';
put 'create table work.validation_checker as';
put 'select source';
put ',count(*) as cnt';
put 'from work.check3';
put 'group by 1';
put 'having cnt>1;';
put 'select distinct source into: src_list2 from work.validation_checker;';
put 'data _null_;';
put 'set work.validation_checker;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.validation_checker)>0)';
put ',mac=mpe_validations_postedit';
put ',msg=%str(The following vars have duplicate HOOKS: &src_list2)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_xlmap_info_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_XLMAP_INFO table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put ' SAS Macros
';
put '@li mf_existds.sas';
put '@li mf_getvarlist.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li dc_assignlib.sas';
put '@li mp_validatecol.sas';
put '**/';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* apply the first excel map to all cells */';
put 'length tgtds $41;';
put 'retain tgtds;';
put 'drop tgtds is_libds;';
put 'if _n_=1 then do;';
put 'if missing(XLMAP_TARGETLIBDS) then tgtds="&dc_libref..MPE_XLMAP_DATA";';
put 'else tgtds=upcase(XLMAP_TARGETLIBDS);';
put '%mp_validatecol(XLMAP_TARGETLIBDS,LIBDS,is_libds)';
put 'call symputx(''tgtds'',tgtds);';
put 'call symputx(''is_libds'',is_libds);';
put 'end;';
put 'XLMAP_TARGETLIBDS=tgtds;';
put 'run;';
put '%mp_abort(iftrue=(&is_libds ne 1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=Invalid target dataset (&tgtds)';
put ')';
put '/**';
put '* make sure that the supplied target dataset exists and';
put '* has the necessary columns';
put '*/';
put '%dc_assignlib(READ,%scan(&tgtds,1,.))';
put '%mp_abort(iftrue=(%mf_existds(libds=&tgtds) ne 1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=Target dataset (&tgtds) could not be opened';
put ')';
put '%let tgtvars=%upcase(%mf_getvarlist(&tgtds));';
put '%let srcvars=%upcase(%mf_getvarlist(&dc_libref..MPE_XLMAP_DATA));';
put '%let badvars1=%mf_wordsInStr1ButNotStr2(Str1=&srcvars,Str2=&tgtvars);';
put '%let badvars2=%mf_wordsInStr1ButNotStr2(Str1=&tgtvars,Str2=&srcvars);';
put '%mp_abort(iftrue=(%length(&badvars1.X)>1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=%str(Target dataset (&tgtds) has missing vars: &badvars1)';
put ')';
put '%mp_abort(iftrue=(%length(&badvars2.X)>1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=%str(Target dataset (&tgtds) has unrecognised vars: &badvars2)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_xlmap_rules_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_XLMAP_RULES table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put '**/';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* ensure uppercasing */';
put 'XLMAP_ID=upcase(XLMAP_ID);';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sample_xlmap_data_postapprove;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sample XLMAP Data hook program (sample_xlmap_data_postapprove)';
put '@details This hook script should NOT be modified in place, as the changes';
put 'would be lost in your next Data Controller deployment.';
put 'Instead, create a copy of this hook script and place it OUTSIDE the';
put 'Data Controller metadata folder.';
put 'Available macro variables:';
put '@li LOAD_REF - The Load Reference (unique upload id)';
put '@li ORIG_LIBDS - The target library.dataset that was just loaded';
put '**/';
put 'data _null_;';
put 'set work.staging_ds;';
put 'putlog ''load ref is in the staged data: '' load_ref;';
put 'stop;';
put 'run;';
put '%put the unique identifier (LOAD_REF) is also a macro variable: &LOAD_REF;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sample_xlmap_data_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sample XLMAP Data hook program';
put '@details This hook script should NOT be modified in place, as the changes';
put 'would be lost in your next Data Controller deployment.';
put 'Instead, create a copy of this hook script and place it OUTSIDE the';
put 'Data Controller metadata folder.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The target dataset being loaded';
put '**/';
put '%let abort=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'length errmsg $1000;';
put 'drop err:;';
put '/* KM1 validations */';
put 'if XLMAP_ID=''BASEL-KM1'' then do;';
put 'if XLMAP_RANGE_ID=''KM1:a'' & input(value_txt,8.)<100 then do;';
put 'errmsg=''Should be greater than 100'';';
put 'err=1;';
put 'end;';
put 'end;';
put '/* CR2 Validations */';
put 'if XLMAP_ID=''BASEL-CR2'' then do;';
put 'if XLMAP_RANGE_ID=''CR2-sec1'' & row_no=3 & input(value_txt,8.)>0 then do;';
put 'errmsg=''Should be negative'';';
put 'err=1;';
put 'end;';
put 'end;';
put '/* publish error message */';
put 'if err=1 then do;';
put 'errmsg=catx('' '',xlmap_range_id,'':'',value_txt,''->'',errmsg);';
put 'call symputx(''errmsg'',errmsg);';
put 'call symputx(''abort'',1);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&abort ne 0)';
put ',mac=xlmap_data_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/public;
%let service=getchangeinfo;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getchangeinfo.sas';
put '@brief Returns the details for an approval diff';
put '@details';
put ' SAS Macros
';
put '@li mf_getengine.sas';
put '@li dc_assignlib.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let table=;';
put 'data _null_;';
put 'set SASControlTable;';
put 'call symputx(''table'',table);';
put 'run;';
put '%dc_assignlib(WRITE,%scan(&table,1,.))';
put '%let max_ver_dttm=0;';
put 'data APPROVE1;';
put 'set &mpelib..mpe_submit';
put '(rename=(SUBMITTED_ON_DTTM=submitted_on REVIEWED_ON_DTTM=REVIEWED_ON));';
put 'where TABLE_ID="&TABLE";';
put 'TABLE_NM=cats(base_lib,''.'',base_ds);';
put 'BASE_TABLE=table_nm;';
put 'call symputx(''base_lib'',base_lib);';
put 'REVIEWED_ON_DTTM=put(reviewed_on,datetime19.);';
put 'SUBMITTED_ON_DTTM=put(submitted_on,datetime19.);';
put 'run;';
put 'data jsParams;';
put 'set approve1;';
put 'LIB_ENGINE="%mf_getEngine(&base_lib)";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,jsParams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getcols;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getcols.sas';
put '@brief Retrieves column info to enable population of dropdowns';
put '@details';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getvalue.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let ds=%mf_getvalue(work.iwant,libds);';
put '%dc_assignlib(READ,%scan(&ds,1,.))';
put 'proc contents noprint data=&ds';
put 'out=droplist1 (keep=name type length label varnum format:);';
put 'run;';
put 'data cols(keep=name type length varnum format label);';
put 'set droplist1(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(format2,''.'');';
put 'else format=cats(format2,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(format2,''.'');';
put 'else if formatd=0 then format=cats(format2,formatl,''.'');';
put 'else format=cats(format2,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,cols)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getcolvals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Retrieves column info to enable population of dropdowns';
put '@details An optional filterquery may be provided, if so then it is validated';
put 'and then used to filter the subsequent results.';
put ' Service Inputs
';
put ' IWANT
';
put 'The STARTROW and ROWS variables are used to fetch additional values beyond';
put 'the initial default (4000).';
put '|libds:$19.|col:$9.|STARTROW:8.|ROWS:8.|';
put '|---|---|---|---|';
put '|DC258467.MPE_X_TEST|SOME_TIME|4001|1000';
put ' FILTERQUERY
';
put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|';
put '|---|---|---|---|---|---|';
put '|AND|AND|1|SOME_BESTNUM|>|1|';
put '|AND|AND|1|SOME_TIME|=|77333|';
put ' Service Outputs
';
put ' VALS
';
put 'The type of this column actually depends on the underlying column type, so it can change';
put '|FORMATTED|UNFORMATTED|';
put '|---|---|';
put '|$44.00|44|';
put ' META
';
put '|COLUMN:$32.|SASFORMAT:$32.|STARTROW:8.|ROWS:8.|';
put '|---|---|---|---|';
put '|COL_NAME|DOLLAR8.2|4001|1000';
put ' SAS Macros
';
put '@li mf_existds.sas';
put '@li mf_getvalue.sas';
put '@li mf_verifymacvars.sas';
put '@li dc_assignlib.sas';
put '@li mf_getvarformat.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_filtercheck.sas';
put '@li mp_filtergenerate.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd.';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* input table may or may not exist */';
put 'data work.initvars;';
put 'length GROUP_LOGIC $3 SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $32767;';
put 'call missing(of _all_);';
put 'stop;';
put 'data work.filterquery;';
put 'set %sysfunc(ifc(';
put '%mf_existds(work.filterquery)=1';
put ',work.filterquery';
put ',work.initvars';
put '));';
put 'run;';
put '/* print data for debugging */';
put 'data _null_;';
put 'set work.iwant;';
put 'put (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set work.filterquery;';
put 'put (_all_)(=);';
put 'run;';
put '%let libds=%mf_getvalue(work.iwant,libds);';
put '%let col2=%mf_getvalue(work.iwant,col);';
put '%let is_fmt=0;';
put '%let startrow=1;';
put '%let rows=4000;';
put '%put &=libds;';
put '%put &=col2;';
put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Missing inputs from iwant. Libds=&libds col=&col2 )';
put ')';
put '%dc_assignlib(WRITE,%scan(&libds,1,.))';
put 'data _null_;';
put 'call missing(startrow,rows);';
put 'set work.iwant;';
put '/* check if the request is for a format catalog */';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''libds'',''work.fmtextract'');';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''startrow'',coalesce(startrow,&startrow));';
put 'call symputx(''rows'',coalesce(rows,&rows));';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/**';
put '* Validate the filter query';
put '*/';
put '%mp_filtercheck(work.filterquery,targetds=&libds,abort=YES)';
put '/**';
put '* Prepare the query';
put '*/';
put '%mp_filtergenerate(work.filterquery,outref=myfilter)';
put '/* cannot %inc in a sql where clause, only data step, so - use a view */';
put 'data work.vw_vals/view=work.vw_vals;';
put 'set &libds;';
put 'where %inc myfilter;;';
put 'run;';
put 'proc sql;';
put 'create view work.vw_vals_sorted as';
put 'select distinct';
put 'put(&col2,%mf_getVarFormat(&libds,&col2,force=1)) as formatted,';
put '&col2 as unformatted';
put 'from work.vw_vals;';
put '/* restrict num of output values */';
put 'data work.vals;';
put 'set work.vw_vals_sorted;';
put 'if _n_ ge &startrow;';
put 'x+1;';
put 'if x>&rows then stop;';
put 'drop x;';
put 'run;';
put 'data vals;';
put '/* ensure empty value if table is empty, for dropdowns */';
put 'if nobs=0 then output;';
put 'set vals nobs=nobs;';
put 'format unformatted ;';
put 'output;';
put 'run;';
put 'proc sql noprint;';
put 'select count(*) into: nobs from work.vw_vals_sorted;';
put 'data meta;';
put 'column="&col2";';
put 'sasformat="%mf_getVarFormat(&libds,&col2)";';
put 'startrow=&startrow;';
put 'rows=&rows;';
put 'nobs=&nobs;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,vals,missing=STRING,showmeta=YES)';
put '%webout(OBJ,meta)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getddl;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_existfileref(fref';
put ')/*/STORE SOURCE*/;';
put '%local rc;';
put '%let rc=%sysfunc(fileref(&fref));';
put '%if &rc=0 %then %do;';
put '1';
put '%end;';
put '%else %if &rc<0 %then %do;';
put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;';
put '1';
put '%end;';
put '%else %do;';
put '0';
put '%end;';
put '%mend mf_existfileref;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema=';
put ',applydttm=NO';
put ')/*/STORE SOURCE*/;';
put '/* check fileref is assigned */';
put '%if %mf_existfileref(&fref)=0 %then %do;';
put 'filename &fref temp ;';
put '%end;';
put '%if %length(&libref)=0 %then %let libref=WORK;';
put '%let flavour=%upcase(&flavour);';
put 'proc sql noprint;';
put 'create table _data_ as';
put 'select * from dictionary.tables';
put 'where upcase(libname)="%upcase(&libref)"';
put 'and memtype=''DATA'' /* views not currently supported */';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local tabinfo; %let tabinfo=&syslast;';
put 'create table _data_ as';
put 'select * from dictionary.columns';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local colinfo; %let colinfo=&syslast;';
put '%local dsnlist;';
put 'select distinct upcase(memname) into: dsnlist';
put 'separated by '' ''';
put 'from &syslast';
put ';';
put 'create table _data_ as';
put 'select * from dictionary.indexes';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put 'order by idxusage, indxname, indxpos';
put ';';
put '%local idxinfo; %let idxinfo=&syslast;';
put '/* Extract all Primary Key and Unique data constraints */';
put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)';
put '%local colconst; %let colconst=&syslast;';
put '%macro addConst();';
put '%global constraints_used;';
put 'data _null_;';
put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;';
put 'set &colconst(';
put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))';
put ') end=last;';
put 'file &fref mod;';
put 'by constraint_type constraint_name;';
put 'retain constraints_used;';
put 'constraint_name_orig=constraint_name;';
put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';';
put 'else ctype=strip(constraint_type);';
put '%if &flavour=TSQL %then %do;';
put 'column_name=catt(''['',column_name,'']'');';
put 'constraint_name=catt(''['',constraint_name,'']'');';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'column_name=catt(''"'',column_name,''"'');';
put 'constraint_name=catt(''"'',constraint_name,''"'');';
put '%end;';
put 'if first.constraint_name then do;';
put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);';
put 'put " ,CONSTRAINT " constraint_name ctype "(" ;';
put 'put '' '' column_name;';
put 'end;';
put 'else put '' ,'' column_name;';
put 'if last.constraint_name then do;';
put 'put " )";';
put 'call symput(''constraints_used'',strip(constraints_used));';
put 'end;';
put 'run;';
put '%put &=constraints_used;';
put '%mend addConst;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";';
put 'run;';
put '%local x curds;';
put '%if &flavour=SAS %then %do;';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";';
put 'put "proc sql;";';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'length lab $1024 typ $20;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table &libref..&curds(";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view &libref..&curds(";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'if length(format)>1 then fmt=" format="!!cats(format);';
put 'if length(label)>1 then';
put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");';
put 'if notnull=''yes'' then notnul='' not null'';';
put 'if type=''char'' then typ=cats(''char('',length,'')'');';
put 'else if length ne 8 then typ=''num length=''!!cats(length);';
put 'else typ=''num'';';
put 'put name typ fmt notnul lab;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '/* ds=cats(libname,''.'',memname); */';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;';
put 'put '' '' name ;';
put 'end;';
put 'else put '' ,'' name ;';
put '*else put '' ,'' name ;';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '/*';
put 'ods output IntegrityConstraints=ic;';
put 'proc contents data=testali out2=info;';
put 'run;';
put '*/';
put '%end;';
put '%end;';
put '%else %if &flavour=TSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''SQLSVR'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* TSQL Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table [&schema].[&curds](";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view [&schema].[&curds](";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';';
put '%end;';
put 'else if type=''num'' then fmt=''[decimal](18,2)'';';
put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';';
put 'else fmt=cats(''[varchar](max)'');';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put 'put "[" name +(-1) "]" fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '*ds=cats(libname,''.'',memname);';
put 'if first.indxname then do;';
put '/* add nonclustered in case of multiple unique indexes */';
put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';';
put 'put '' ['' name +(-1) '']'';';
put 'end;';
put 'else put '' ,['' name +(-1) '']'';';
put 'if last.indxname then do;';
put 'put '' )'';';
put 'end;';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'put '')'';';
put 'put ''GO'';';
put 'run;';
put '/* add extended properties for labels */';
put 'data _null_;';
put 'file &fref mod;';
put 'length nm $64 lab $1024;';
put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;';
put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");';
put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");';
put 'put '' '';';
put 'put "EXEC sys.sp_addextendedproperty ";';
put 'put " @name=N''MS_Description'',@value=" lab ;';
put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";';
put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";';
put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;';
put 'if last then put ''GO'';';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''POSTGRES'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put 'data _null_;';
put 'file &fref mod;';
put 'put "CREATE SCHEMA &schema;";';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put '%local curdsvarcount;';
put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);';
put '%if &curdsvarcount>1600 %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &libref..&curds contains &curdsvarcount vars */";';
put 'put "/* Postgres cannot create tables with over 1600 vars */";';
put 'put "/* No DDL will be generated for this table";';
put 'run;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* Postgres Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'length fmt $32;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "CREATE TABLE &schema..&curds (";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "CREATE VIEW &schema..&curds (";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';';
put '%end;';
put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';';
put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put '/* quote column names in case they represent reserved words */';
put 'name2=quote(trim(name));';
put 'put name2 fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";';
put 'put '' "'' name +(-1) ''"'' ;';
put 'end;';
put 'else put '' ,"'' name +(-1) ''"'';';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%if %upcase(&showlog)=YES %then %do;';
put 'options ps=max;';
put 'data _null_;';
put 'infile &fref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_getddl;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Download DDL for a table or entire library in a particular flavour.';
put '@details';
put ' SAS Macros
';
put '@li mddl_sas_cntlout.sas';
put '@li dc_assignlib.sas';
put '@li mf_existds.sas';
put '@li mp_abort.sas';
put '@li mp_getddl.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global libref ds flavour;';
put '%let flavour=%sysfunc(coalescec(&flavour,SAS));';
put '%mpeinit()';
put '%dc_assignlib(READ,&libref)';
put 'data _null_;';
put '/* check if the request is for a format catalog */';
put 'ds=symget(''ds'');';
put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;';
put 'ds=scan(ds,1,''-'');';
put 'libds=cats(symget(''libref''),''.'',ds);';
put 'putlog "Format Catalog Captured";';
put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');';
put 'call symputx(''libref'',''work'');';
put 'call symputx(''ds'',''fmtextract'');';
put 'end;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=("exist&ds" ne "exist" and %mf_existds(libds=&libref..&ds)<1)';
put ',mac=&_program';
put ',msg=%str(Dataset &libref..&ds was not found)';
put ')';
put '%let tmploc=%sysfunc(pathname(work))/temp.txt;';
put 'filename tmp "&tmploc";';
put '%mp_getddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES)';
put '%mp_streamfile(contenttype=TEXT';
put ',inloc=%str(&tmploc)';
put ',outname=&libref._&ds..ddl';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getgroups;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroups(access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroups';
put ');';
put '%local oauth_bearer base_uri fname1 libref1;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '/* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getgroups;';
put '%macro dc_getgroups(outds=mm_getgroups);';
put '%mv_getgroups(outds=&outds)';
put 'proc sort';
put 'data=&outds(rename=(id=groupuri name=groupname description=groupdesc))';
put 'out=&outds (keep=groupuri groupname groupdesc);';
put 'by groupname;';
put 'run;';
put '%mend dc_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getgroups.sas';
put '@brief List all SAS Groups';
put '@details Gets a list of all SAS Groups. Runs without mpeinit() so that it';
put 'can be available to the sasjs/server configurator';
put ' SAS Macros
';
put '@li dc_getgroups.sas';
put ' Data Outputs
';
put ' groups
';
put '|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|';
put '|---|---|---|';
put '|`SomeGroup `|`A group `|`1`|';
put '|`Another Group`|`this is a different group`|`2`|';
put '|`admin`|`Administrators `|`3`|';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%dc_getgroups(outds=groups)';
put '%webout(OPEN)';
put '%webout(OBJ,groups)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getrawdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_ds2cards(base_ds, tgt_ds=';
put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"';
put ',maxobs=max';
put ',random_sample=NO';
put ',showlog=YES';
put ',outencoding=';
put ',append=NO';
put ')/*/STORE SOURCE*/;';
put '%local i setds nvars;';
put '%if not %sysfunc(exist(&base_ds)) %then %do;';
put '%put %str(WARN)ING: &base_ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;';
put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;';
put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);';
put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";';
put '%if ("&append" = "" or "&append" = "NO") %then %let append=;';
put '%else %let append=mod;';
put '/* get varcount */';
put '%let nvars=0;';
put 'proc sql noprint;';
put 'select count(*) into: nvars from dictionary.columns';
put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";';
put '%if &nvars=0 %then %do;';
put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;';
put '%return;';
put '%end;';
put '/* get indexes */';
put 'proc sort';
put 'data=sashelp.vindex(';
put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")';
put ')';
put 'out=_data_;';
put 'by indxname indxpos;';
put 'run;';
put '%local indexes;';
put 'data _null_;';
put 'set &syslast end=last;';
put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');';
put 'by indxname indxpos;';
put 'length vars $32767 nom uni $8;';
put 'retain vars;';
put 'if first.indxname then do;';
put 'idxcnt+1;';
put 'nom='''';';
put 'uni='''';';
put 'vars=name;';
put 'end;';
put 'else vars=catx('' '',vars,name);';
put 'if last.indxname then do;';
put 'if nomiss=''yes'' then nom=''/nomiss'';';
put 'if unique=''yes'' then uni=''/unique'';';
put 'call symputx(''indexes''';
put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)';
put ',''l'');';
put 'end;';
put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');';
put 'run;';
put 'data;run;';
put '%let setds=&syslast;';
put 'proc sql';
put '%if %datatyp(&maxobs)=NUMERIC %then %do;';
put 'outobs=&maxobs;';
put '%end;';
put ';';
put 'create table &setds as select * from &base_ds';
put '%if &random_sample=YES %then %do;';
put 'order by ranuni(42)';
put '%end;';
put ';';
put 'reset outobs=max;';
put 'create table datalines1 as';
put 'select name,type,length,varnum,format,label from dictionary.columns';
put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"';
put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";';
put '/**';
put 'Due to long decimals cannot use best. format';
put 'So - use bestd. format and then use character functions to strip trailing';
put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets';
put 'note2err when there are missings.';
put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0';
put ',put(VARIABLE,best32.)';
put ',substrn(put(VARIABLE,bestd32.),1';
put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));';
put '**/';
put 'data datalines_2;';
put 'format dataline $32000.;';
put 'set datalines1 (where=(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));';
put 'if type=''num'' then dataline=';
put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0';
put ',put('',name,'',best32.-l)';
put ',substrn(put('',name,'',bestd32.-l),1';
put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');';
put '/**';
put '* binary data must be converted, to store in text format. It is identified';
put '* by the presence of the $HEX keyword in the format.';
put '*/';
put 'else if upcase(format)=:''$HEX'' then';
put 'dataline=cats(''put(trim('',name,''),'',format,'')'');';
put '/**';
put '* There is no easy way to store line breaks in a cards file.';
put '* To discuss this, use: https://github.com/sasjs/core/issues/80';
put '* Removing all nonprintables with kw (keep writeable)';
put '*/';
put 'else dataline=cats(''compress('',name,'', ,"kw")'');';
put 'run;';
put 'proc sql noprint;';
put 'select dataline into: datalines separated by '','' from datalines_2;';
put '%local';
put 'process_dttm_flg';
put 'valid_from_dttm_flg';
put 'valid_to_dttm_flg';
put ';';
put '%let process_dttm_flg = N;';
put '%let valid_from_dttm_flg = N;';
put '%let valid_to_dttm_flg = N;';
put 'data _null_;';
put 'set datalines1 ;';
put '/* build attrib statement */';
put 'if type=''char'' then type2=''$'';';
put 'if strip(format) ne '''' then format2=cats(''format='',format);';
put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));';
put 'str1=catx('' '',(put(name,$33.)||''length='')';
put ',put(cats(type2,length),$7.)||format2,label2);';
put '/* Build input statement */';
put 'if upcase(format)=:''$HEX'' then type3='':''!!format;';
put 'else if type=''char'' then type3='':$char.'';';
put 'str2=put(name,$33.)||type3;';
put 'if(upcase(name) = "PROCESSED_DTTM") then';
put 'call symputx("process_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_FROM_DTTM") then';
put 'call symputx("valid_from_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_TO_DTTM") then';
put 'call symputx("valid_to_dttm_flg", "Y", "L");';
put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");';
put 'call symputx(cats("input_stmt_", put(_N_, 8.))';
put ', ifc(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");';
put 'run;';
put 'data _null_;';
put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;';
put 'length __attrib $32767;';
put 'if _n_=1 then do;';
put 'put ''/**'';';
put 'put '' @file'';';
put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";';
put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";';
put 'put " Source: https://github.com/sasjs/core";';
put 'put '' @cond '';';
put 'put ''**/'';';
put 'put "data &tgt_ds &indexes;";';
put 'put "attrib ";';
put '%do i = 1 %to &nvars;';
put '__attrib=symget("attrib_stmt_&i");';
put 'put __attrib;';
put '%end;';
put 'put ";";';
put '%if &process_dttm_flg. eq Y %then %do;';
put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';';
put '%end;';
put '%if &valid_from_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_FROM_DTTM &low_date;'';';
put '%end;';
put '%if &valid_to_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_TO_DTTM &high_date;'';';
put '%end;';
put 'if __nobs=0 then do;';
put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';';
put 'put ''stop;'';';
put 'put ''run;'';';
put 'end;';
put 'else do;';
put 'put "infile cards dsd;";';
put 'put "input ";';
put '%do i = 1 %to &nvars.;';
put '%if(%length(&&input_stmt_&i..)) %then';
put 'put " &&input_stmt_&i..";';
put ';';
put '%end;';
put 'put ";";';
put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';';
put 'put "datalines4;";';
put 'end;';
put 'end;';
put 'set &setds end=__lastobs nobs=__nobs;';
put '/* remove all formats for write purposes - some have long underlying decimals */';
put 'format _numeric_ best30.29;';
put 'length __dataline $32767;';
put '__dataline=catq(''cqtmb'',&datalines);';
put 'put __dataline;';
put 'if __lastobs then do;';
put 'put '';;;;'';';
put 'put ''run;'';';
put 'put ''/** @endcond **/'';';
put 'stop;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &setds;';
put 'quit;';
put '%if &showlog=YES %then %do;';
put 'data _null_;';
put 'infile &cards_file lrecl=32767;';
put 'input;';
put 'put _infile_;';
put 'run;';
put '%end;';
put '%put NOTE: CARDS FILE SAVED IN:;';
put '%put NOTE-;%put NOTE-;';
put '%put NOTE- %sysfunc(dequote(&cards_file.));';
put '%put NOTE-;%put NOTE-;';
put '%mend mp_ds2cards;';
put '/** @endcond **/';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Downloads data in a variety of formats';
put '@details To enable direct download, this service runs in a dedicated stream';
put 'as a GET request using URL parameters as inputs.';
put 'The inputs are:';
put '@li table - the libds of the table to be downloaded';
put '@li type - either SAS, CSV, EXCEL, MARKDOWN, WEBCSV or WEBTAB';
put '@li filter - the filter RK if used';
put ' SAS Macros
';
put '@li mf_verifymacvars.sas';
put '@li mf_getuser.sas';
put '@li mf_existfeature.sas';
put '@li dc_assignlib.sas';
put '@li mp_ds2cards.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_cntlout.sas';
put '@li mp_streamfile.sas';
put '@li mpe_filtermaster.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global table type filter ds format is_fmt txfrom txto;';
put '%mpeinit()';
put '%let user=%mf_getuser();';
put '%let is_fmt=0;';
put '%mp_abort(iftrue= (%mf_verifymacvars(type table)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Invalid inputs: type table)';
put ')';
put '%let libds=%upcase(&table); /* actual source */';
put '%let table=%upcase(&table); /* used as label for fmt catalogs */';
put '%let lib=%scan(&table,1,.);';
put '%let ds=%scan(&table,2,.);';
put '%dc_assignlib(READ,&lib)';
put 'data _null_;';
put 'set &mpelib..MPE_TABLES;';
put 'where upcase(libref)="&lib" and upcase(dsn)="&ds";';
put '/* if a TXTEMPORAL table then filter as such */';
put 'call symputx(''txfrom'',var_txfrom);';
put 'call symputx(''txto'',var_txto);';
put 'ds=symget(''ds'');';
put 'is_fmt=0;';
put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;';
put 'ds=scan(ds,1,''-'');';
put 'table=cats("&lib..",ds);';
put 'putlog "Format Catalog Captured";';
put 'is_fmt=1;';
put 'call symputx(''libds'',''work.fmtextract'');';
put 'call symputx(''table'',table);';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&table';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%put preparing query;';
put '%mpe_filtermaster(DLOAD,&libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%put printing generated filterquery:;';
put 'data _null_;';
put 'infile filtref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put 'options obs=200000;/* stop limit */';
put 'data staged(drop=&txfrom &txto);';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put 'options obs=max;';
put 'options validvarname=upcase;';
put '%macro mpestp_getrawdata();';
put '%local outfile;';
put '%if &type=SAS %then %do;';
put '%let outfile=%sysfunc(pathname(work))/&table..sas;';
put '%mp_ds2cards(base_ds=staged';
put ', tgt_ds=&table';
put ', cards_file= "&outfile"';
put ', maxobs=100000)';
put '%let ext=sas;';
put '%let mimetype=text;';
put '%end;';
put '%else %if &type=CSV or (&type=EXCEL and %mf_existfeature(EXPORTXLS) ne 1)';
put '/* cannot proc export excel if PC Files is not licensed */';
put '%then %do;';
put '%let outfile=%sysfunc(pathname(work))/&table..csv;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= "&outfile"';
put 'DBMS=csv REPLACE;';
put 'RUN;';
put '%let ext=csv;';
put '%let mimetype=csv;';
put '%end;';
put '%else %if &type=EXCEL %then %do;';
put '%let ext=xlsx;';
put '%let outfile=%sysfunc(pathname(work))/&table..&ext;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= "&outfile"';
put 'DBMS=xlsx ;';
put 'RUN;';
put '%let mimetype=XLSX;';
put '%end;';
put '%else %if &type=MARKDOWN %then %do;';
put '%let ext=md;';
put '%let outfile=%sysfunc(pathname(work))/&table..&ext;';
put 'filename mdref "&outfile" lrecl=32767;';
put '%mp_ds2md(staged,outref=mdref,showlog=NO)';
put '%let mimetype=MARKDOWN;';
put '%end;';
put '%else %if &type=WEBCSV %then %do;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= _webout';
put 'DBMS=csv REPLACE;';
put 'RUN;';
put '/* don''t set headers */';
put '%return;';
put '%end;';
put '%else %if &type=WEBTAB %then %do;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= _webout';
put 'DBMS=tab REPLACE;';
put 'RUN;';
put '/* don''t set headers */';
put '%return;';
put '%end;';
put '%else %do;';
put '%mp_abort(msg=type &type not supported,mac=mpestp_getrawdata.sas);';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mp_streamfile(contenttype=&mimetype';
put ',inloc=%str(&outfile)';
put ',outname=&table..&ext';
put ')';
put '%mend mpestp_getrawdata;';
put '%mpestp_getrawdata()';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshlibinfo;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mpe_refreshtables(lib,ds=#all);';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%local engine; %let engine=%mf_getengine(&lib);';
put '%local schema; %let schema=%mf_getschema(&lib);';
put '%put running &sysmacroname &lib(&engine &schema) for &ds;';
put 'proc sql;';
put 'create table cols as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib cols extraction)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.indexes as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table finalcols as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.indexes b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%local dsn;';
put '%if &ds = #ALL %then %let dsn=;';
put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table work.pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.constraints';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table work.sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table work.pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from work.sum a';
put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table work.pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data work.finalpks;';
put 'set pkdefault pk4sure pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table finalcols as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* load columns */';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_vars';
put ',append_dsn=finalcols';
put ',PK=LIBREF DSN NAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF DSN';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.tabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data tabs2;';
put 'set finalcols;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table work.finaltabs as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.tabs a';
put 'left join work.tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_tabs';
put ',append_dsn=finaltabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '/* prepare table frequently changing attributes */';
put 'proc sql;';
put '%if &engine=SQLSVR %then %do;';
put 'connect using &lib;';
put 'create table work.attrs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date';
put 'FROM sys.tables ;';
put ');';
put 'create table work.nobs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema''';
put ',A.Name, AVG(B.rows) AS ''RowCount''';
put 'FROM sys.objects A';
put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id';
put 'WHERE A.type = ''U''';
put 'GROUP BY A.schema_id, A.Name';
put ');';
put 'disconnect from &lib;';
put 'create table statustabs as select';
put 'a.libref';
put ',a.dsn';
put ',b.create_date as crdate';
put ',b.modify_date as modate';
put ',. as filesize';
put ',c.RowCount as nobs';
put 'from work.tabs a';
put 'left join work.attrs(where=(schema="&schema")) b';
put 'on upcase(a.dsn)=upcase(b.name)';
put 'left join work.nobs(where=(schema="&schema")) c';
put 'on upcase(a.dsn)=upcase(c.name);';
put '%end;';
put '%else %do;';
put 'create table statustabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',crdate';
put ',modate';
put ',filesize';
put ',nobs';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%end;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_tabs';
put ',append_dsn=statustabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '%if &ds = #ALL %then %do;';
put 'proc sql;';
put 'create table statuslibs as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_libs';
put ',append_dsn=statuslibs';
put ',PK=LIBREF';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put ')';
put '%end;';
put '%mend mpe_refreshtables;';
put '%macro dc_refreshcatalog();';
put '%mpe_refreshlibs()';
put 'filename executor catalog ''work.code.code.source'';';
put 'data libraries;';
put 'set &mpelib..mpe_datacatalog_libs;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'file executor;';
put 'str=cats(''%mpe_refreshtables('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%mend dc_refreshcatalog;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshlibinfo.sas';
put '@brief Refresh the Data Catalog for a particular library';
put '@details When showing library info in the VIEW menu, the data is taken from';
put 'the Data Catalog tables. These may be empty or outdated, and so this service';
put 'allows end users to run a refresh of the data.';
put ' Service Inputs
';
put ' lib2refresh
';
put 'Should contain the libref to be refreshed.';
put '|libref:$8.|';
put '|---|';
put '|SOMELIB|';
put ' Service Outputs
';
put ' libinfo
';
put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |';
put '|---|---|---|---|---|---|---|---|---|';
put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_refreshcatalog.sas';
put '@li mp_abort.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%webout(FETCH)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem on startup)';
put ')';
put '%let libref=;';
put 'data _null_;';
put 'set work.lib2refresh;';
put 'call symputx(''libref'',libref);';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem with inputs - was lib2refresh object sent?)';
put ')';
put '%dc_assignlib(WRITE,&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc after lib assignment)';
put ')';
put '%dc_refreshcatalog(&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem when running the catalog refresh)';
put ')';
put '/* get libinfo */';
put 'proc sql;';
put 'create table work.libinfo as';
put 'select a.engine,';
put 'a.libname,';
put 'a.paths,';
put 'a.perms,';
put 'a.owners,';
put 'a.schemas,';
put 'a.libid,';
put 'b.libsize,';
put 'b.table_cnt';
put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'inner join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.libref=b.libref';
put 'where a.libref="&libref";';
put '%webout(OPEN)';
put '%webout(OBJ,libinfo)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=registeruser;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file registeruser.sas';
put '@brief Registers a new user in Data Controller';
put '@details New users are logged after accepting EULA terms.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let userid=%mf_getuser();';
put '/* confirm the user is not registered */';
put '%let isRegistered=0;';
put 'proc sql noprint;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem accessing &mpelib..mpe_users table)';
put ')';
put '%mp_abort(iftrue= (&isregistered > 0)';
put ',mac=&_program..sas';
put ',msg=%str(User &userid is already registered on &mpelib..mpe_users!)';
put ')';
put 'data work.append;';
put 'if 0 then set &mpelib..mpe_users;';
put 'user_id=symget(''userid'');';
put 'registered_dt=today();';
put 'last_seen_dt=today();';
put 'run;';
put 'proc append base=&mpelib..mpe_users data=work.append;';
put '%let isRegistered=0;';
put 'proc sql noprint;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '%mp_abort(iftrue= (&syscc ne 0 or &isregistered ne 1)';
put ',mac=&_program..sas';
put ',msg=%str(Problem appending to &mpelib..mpe_users table)';
put ')';
put 'data work.return;';
put 'msg=''SUCCESS'';';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,return)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=startupservice;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file startupservice.sas';
put '@brief List the libraries and tables the mp-editor user can access';
put '@details If user is in a control group (&mpeadmins, configured in mpeinit.sas)';
put 'then they have access to all libraries / tables. Otherwise a join is made';
put 'to the &mpelib..mpe_security table.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Issue on startup in startupService)';
put ')';
put '%let userid=%mf_getuser();';
put '%put userid is &userid;';
put '%mpe_getgroups(user=&userid,outds=groups)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Issue with Groups syscc=&syscc for user &userid)';
put ')';
put '/* check if user is an admin */';
put '%let admin_check=0;';
put 'proc sql noprint;';
put 'select count(*) into: admin_check';
put 'from groups';
put 'where groupname="&mpeadmins";';
put '/* check if user is registered or not */';
put '%let isRegistered=0;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '/* get number of registered users */';
put '%let registerCount=0;';
put 'select count(*) into: registercount';
put 'from &mpelib..mpe_users';
put 'where last_seen_dt>%sysfunc(today())-365;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem accessing &mpelib..mpe_users table)';
put ')';
put '%global dc_restrict_editrecord;';
put 'data work.globvars;';
put 'dclib="&mpelib";';
put 'sas9lineage_enabled=1;';
put 'isadmin=&admin_check;';
put 'isregistered=&isregistered;';
put 'registercount=®isterCount;';
put 'dc_admin_group="&mpeadmins";';
put '/* fetched from mpe_config in dc_getsettings */';
put 'licence_key="&dc_licence_key";';
put 'activation_key="&dc_activation_key";';
put 'dc_restrict_editrecord="&dc_restrict_editrecord";';
put 'run;';
put '%macro mstp_mpeditorstartup();';
put 'data _null_;';
put 'putlog "entering &sysmacroname";';
put 'run;';
put 'proc sql noprint;';
put '/* update last seen, if seen */';
put '%if &isregistered>0 %then %do;';
put 'update &mpelib..mpe_users';
put 'set last_seen_dt=%sysfunc(today())';
put 'where user_id="&userid";';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem updating &mpelib..mpe_users table)';
put ')';
put '%local all_cnt;';
put 'select count(*) into: all_cnt';
put 'from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and ACCESS_LEVEL in (''EDIT'')';
put 'and libref=''*ALL*''';
put 'and SAS_GROUP in (select groupname from groups);';
put '%if &admin_check >0 or &all_cnt>0 %then %do;';
put 'create table sasDatasets as';
put 'select distinct libref, dsn';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt tx_to';
put 'order by 1;';
put '%end;';
put '%else %do;';
put 'create table sasDatasets as';
put 'select distinct a.libref,a.dsn';
put 'from &mpelib..mpe_tables a';
put 'left join &mpelib..mpe_security b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn';
put 'where &dc_dttmtfmt. lt a.tx_to';
put 'and &dc_dttmtfmt. lt b.tx_to';
put 'and b.ACCESS_LEVEL in (''EDIT'')';
put 'and b.SAS_GROUP in (select groupname from groups)';
put 'order by 1;';
put '%end;';
put '%mend mstp_mpeditorstartup;';
put '%mstp_mpeditorstartup()';
put 'create table saslibs as';
put 'select distinct libref';
put 'from &syslast;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(issue with security validation)';
put ')';
put 'proc sql;';
put 'create table work.xlmaps as';
put 'select distinct a.XLMAP_ID';
put ',b.XLMAP_DESCRIPTION';
put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")';
put 'as XLMAP_TARGETLIBDS';
put 'from &mpelib..MPE_XLMAP_RULES a';
put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.XLMAP_ID=b.XLMAP_ID';
put 'where &dc_dttmtfmt. lt a.tx_to;';
put '/* we don''t want the XLMAP target datasets to be directly editable */';
put 'delete from sasdatasets';
put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);';
put '%webout(OPEN)';
put '%webout(OBJ,sasDatasets)';
put '%webout(OBJ,saslibs)';
put '%webout(OBJ,globvars)';
put '%webout(ARR,xlmaps)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tokenauth;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mv_tokenauth(inds=mv_registerclient';
put ',outds=mv_tokenauth';
put ',client_id=someclient';
put ',client_secret=somesecret';
put ',grant_type=authorization_code';
put ',code=';
put ',user=';
put ',pass=';
put ',access_token_var=ACCESS_TOKEN';
put ',refresh_token_var=REFRESH_TOKEN';
put ',base_uri=#NOTSET#';
put ');';
put '%global &access_token_var &refresh_token_var;';
put '%local fref1 fref2 libref;';
put '/* test the validity of inputs */';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_existds(&inds) %then %do;';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''client_id'',client_id,''l'');';
put 'call symputx(''client_secret'',client_secret,''l'');';
put 'if not missing(auth_code) then call symputx(''code'',auth_code,''l'');';
put 'run;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type=authorization_code and %str(&code)=%str())';
put ',mac=&sysmacroname';
put ',msg=%str(Authorization code required)';
put ')';
put '%mp_abort(iftrue=(';
put '&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))';
put ',mac=&sysmacroname';
put ',msg=%str(username / password required)';
put ')';
put '/* prepare appropriate grant type */';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'if "&grant_type"=''authorization_code'' then string=cats(';
put '''grant_type=authorization_code&code='',symget(''code''));';
put 'else string=cats(''grant_type=password&username='',symget(''user'')';
put ',''&password='',symget(pass));';
put 'call symputx(''grantstring'',cats("''",string,"''"));';
put 'run;';
put '/*data _null_;infile &fref1;input;put _infile_;run;*/';
put '/**';
put '* Request access token';
put '*/';
put '%if &base_uri=#NOTSET# %then %let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%let fref2=%mf_getuniquefileref();';
put 'proc http method=''POST'' in=&grantstring out=&fref2';
put 'url="&base_uri/SASLogon/oauth/token"';
put 'WEBUSERNAME="&client_id"';
put 'WEBPASSWORD="&client_secret"';
put 'AUTH_BASIC;';
put 'headers "Accept"="application/json"';
put '"Content-Type"="application/x-www-form-urlencoded";';
put 'run;';
put '/*data _null_;infile &fref2;input;put _infile_;run;*/';
put '/**';
put '* Extract access / refresh tokens';
put '*/';
put '%let libref=%mf_getuniquelibref();';
put 'libname &libref JSON fileref=&fref2;';
put '/* extract the tokens */';
put 'data &outds;';
put 'set &libref..root;';
put 'call symputx("&access_token_var",access_token);';
put 'call symputx("&refresh_token_var",refresh_token);';
put 'run;';
put 'libname &libref clear;';
put 'filename &fref1 clear;';
put 'filename &fref2 clear;';
put '%mend mv_tokenauth;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file tokenauth.sas';
put '@brief Get initial tokens using an auth code - DEPRECATED';
put ' SAS Macros
';
put '@li mv_tokenauth.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%webout(FETCH)';
put 'data _null_;';
put 'set work.fromjs;';
put 'call symputx(''viyasettings'',viyasettings);';
put 'call symputx(''client_id'',client_id);';
put 'call symputx(''auth_code'',auth_code);';
put 'run;';
put 'data authme;';
put '/* get client info from special location */';
put 'infile "&viyasettings" dsd;';
put 'input client_secret:$100.;';
put 'client_id="&client_id";';
put 'auth_code="&auth_code";';
put 'run;';
put '/* get tokens */';
put '%mv_tokenauth(inds=authme, outds=fromSAS(keep=access_token refresh_token))';
put '/* send back to frontend */';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tokenrefresh;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mv_tokenrefresh(inds=mv_registerclient';
put ',outds=mv_tokenrefresh';
put ',client_id=someclient';
put ',client_secret=somesecret';
put ',grant_type=authorization_code';
put ',user=';
put ',pass=';
put ',access_token_var=ACCESS_TOKEN';
put ',refresh_token_var=REFRESH_TOKEN';
put ');';
put '%global &access_token_var &refresh_token_var;';
put 'options noquotelenmax;';
put '%local fref1 libref;';
put '/* test the validity of inputs */';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(';
put 'iftrue=(&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))';
put ',mac=&sysmacroname';
put ',msg=%str(username / password required)';
put ')';
put '%if %mf_existds(&inds) %then %do;';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''client_id'',client_id,''l'');';
put 'call symputx(''client_secret'',client_secret,''l'');';
put 'call symputx("&refresh_token_var",&refresh_token_var,''l'');';
put 'run;';
put '%end;';
put '%mp_abort(iftrue=(%str(&client_id)=%str() or %str(&client_secret)=%str())';
put ',mac=&sysmacroname';
put ',msg=%str(client / secret must both be provided)';
put ')';
put '/**';
put '* Request access token';
put '*/';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%let fref1=%mf_getuniquefileref();';
put 'proc http method=''POST''';
put 'in="grant_type=refresh_token%nrstr(&)refresh_token=&&&refresh_token_var"';
put 'out=&fref1';
put 'url="&base_uri/SASLogon/oauth/token"';
put 'WEBUSERNAME="&client_id"';
put 'WEBPASSWORD="&client_secret"';
put 'AUTH_BASIC;';
put 'headers "Accept"="application/json"';
put '"Content-Type"="application/x-www-form-urlencoded";';
put 'run;';
put '/*data _null_;infile &fref1;input;put _infile_;run;*/';
put '/**';
put '* Extract access / refresh tokens';
put '*/';
put '%let libref=%mf_getuniquelibref();';
put 'libname &libref JSON fileref=&fref1;';
put '/* extract the token */';
put 'data &outds;';
put 'set &libref..root;';
put 'call symputx("&access_token_var",access_token);';
put 'call symputx("&refresh_token_var",refresh_token);';
put 'run;';
put 'libname &libref clear;';
put 'filename &fref1 clear;';
put '%mend mv_tokenrefresh;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file tokenauth.sas';
put '@brief Get initial tokens using an auth code - DEPRECATED';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li mv_tokenrefresh.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%webout(FETCH)';
put 'data _null_;';
put 'set work.fromjs;';
put 'call symputx(''viyasettings'',viyasettings);';
put 'call symputx(''client_id'',client_id);';
put 'call symputx(''refresh_token'',refresh_token);';
put 'run;';
put 'data authme;';
put '/* get client info from special location */';
put 'infile "&viyasettings" dsd;';
put 'input client_secret:$100.;';
put 'client_id="&client_id";';
put 'refresh_token="&refresh_token";';
put 'run;';
put '/* get tokens */';
put '%mv_tokenrefresh(inds=authme, outds=fromSAS(keep=refresh_token access_token))';
put '/* send back to frontend */';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=validatefilter;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_islibds(libds';
put ')/*/STORE SOURCE*/;';
put '%local regex;';
put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));';
put '%sysfunc(prxmatch(®ex,&libds))';
put '%mend mf_islibds;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '%macro mp_md5(cvars=,nvars=);';
put '%local i var sep;';
put 'put(md5(';
put '%do i=1 %to %sysfunc(countw(&cvars));';
put '%let var=%scan(&cvars,&i,%str( ));';
put '&sep put(md5(trim(&var)),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '%do i=1 %to %sysfunc(countw(&nvars));';
put '%let var=%scan(&nvars,&i,%str( ));';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '),$hex32.)';
put '%mend mp_md5;';
put '%macro mp_hashdataset(';
put 'libds,';
put 'outds=work._data_,';
put 'salt=,';
put 'iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local keyvar /* roll up the md5 */';
put 'prevkeyvar /* retain prev record md5 */';
put 'lastvar /* last var in input ds */';
put 'cvars nvars;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '/* avoid naming conflict for hash key vars */';
put '%let keyvar=%mf_getuniquename();';
put '%let prevkeyvar=%mf_getuniquename();';
put '%let lastvar=%mf_getuniquename();';
put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;';
put 'data &outds;';
put 'length hashkey $32;';
put 'hashkey=put(md5("&salt"),$hex32.);';
put 'output;';
put 'stop;';
put 'run;';
put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;';
put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;';
put '%end;';
put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;';
put '%put %str(ERR)OR: Dataset &libds is not a dataset;';
put '%end;';
put '%else %do;';
put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'length &prevkeyvar &keyvar $32;';
put 'retain &prevkeyvar;';
put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);';
put 'set &libds end=&lastvar;';
put '/* hash should include previous row */';
put '&keyvar=%mp_md5(';
put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,';
put 'nvars=%mf_getvarlist(&libds,typefilter=N)';
put ');';
put '&prevkeyvar=&keyvar;';
put 'if &lastvar then output;';
put 'run;';
put '%end;';
put '%mend mp_hashdataset;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '%macro mp_filterstore(libds=,';
put 'queryds=work.filterquery,';
put 'filter_summary=PERM.FILTER_SUMMARY,';
put 'filter_detail=PERM.FILTER_DETAIL,';
put 'lock_table=PERM.LOCK_TABLE,';
put 'maxkeytable=PERM.MAXKEYTABLE,';
put 'outresult=work.result,';
put 'outquery=work.query,';
put 'mdebug=1';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;';
put '%let libds=%upcase(&libds);';
put '%let orig_libds=&libds;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc on macro entry)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid filter_summary value: &filter_summary)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid filter_detail value: &filter_detail)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid lock_table value: &lock_table)';
put ')';
put '/**';
put '* validate query';
put '* use format catalog export, if a format';
put '*/';
put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;';
put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */';
put '%let ds0=%mf_getuniquename(prefix=fmtds_);';
put '%let libds=&ds0;';
put '/*';
put 'There is no need to export the entire format catalog here - the validations';
put 'are done against the data model, not the data values. So we can simply';
put 'hardcode the structure based on the cntlout dataset.';
put '*/';
put '%mddl_sas_cntlout(libds=&ds0)';
put '%end;';
put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)';
put '/* hash the result */';
put '%let ds1=%mf_getuniquename(prefix=hashds);';
put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)';
put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'putlog "filter_hash=&filter_hash";';
put 'set &ds1;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '/* check if data already exists for this hash */';
put 'data &outresult;';
put 'set &filter_summary;';
put 'where filter_hash="&filter_hash";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc after hash check)';
put ')';
put '%mp_abort(iftrue= ("&filter_hash "=" ")';
put ',mac=mp_filterstore';
put ',msg=%str(problem with filter_hash generation)';
put ')';
put '%if %mf_nobs(&outresult)=0 %then %do;';
put '/* first update summary table */';
put '%let ds3=%mf_getuniquename(prefix=filtersum);';
put 'data work.&ds3;';
put 'if 0 then set &filter_summary;';
put 'filter_table="&orig_libds";';
put 'filter_hash="&filter_hash";';
put 'PROCESSED_DTTM=%sysfunc(datetime());';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=%scan(&filter_summary,1,.)';
put ',ds=%scan(&filter_summary,2,.)';
put ',ref=MP_FILTERSTORE summary update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%let ds4=%mf_getuniquename(prefix=filtersumappend);';
put '%mp_retainedkey(';
put 'base_lib=%scan(&filter_summary,1,.)';
put ',base_dsn=%scan(&filter_summary,2,.)';
put ',append_lib=work';
put ',append_dsn=&ds3';
put ',retained_key=filter_rk';
put ',business_key=filter_hash';
put ',maxkeytable=&maxkeytable';
put ',locktable=&lock_table';
put ',outds=work.&ds4';
put ')';
put 'proc append base=&filter_summary data=&ds4;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=%scan(&filter_summary,1,.)';
put ',ds=%scan(&filter_summary,2,.)';
put ',ref=MP_FILTERSTORE summary update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%if &syscc ne 0 %then %do;';
put 'data _null_;';
put 'set &ds4;';
put 'putlog (_all_)(=);';
put 'run;';
put '%goto err;';
put '%end;';
put 'data &outresult;';
put 'set &filter_summary;';
put 'where filter_hash="&filter_hash";';
put 'run;';
put '/* Next, update detail table */';
put '%let ds2=%mf_getuniquename(prefix=filterdetail);';
put 'data &ds2;';
put 'if 0 then set &filter_detail;';
put 'set &queryds;';
put 'format filter_hash $hex32. filter_line 8.;';
put 'filter_hash="&filter_hash";';
put 'filter_line=_n_;';
put 'PROCESSED_DTTM=%sysfunc(datetime());';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=%scan(&filter_detail,1,.)';
put ',ds=%scan(&filter_detail,2,.)';
put ',ref=MP_FILTERSTORE update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put 'proc append base=&filter_detail data=&ds2;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=%scan(&filter_detail,1,.)';
put ',ds=%scan(&filter_detail,2,.)';
put ',ref=MP_FILTERSTORE detail update &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%if &syscc ne 0 %then %do;';
put 'data _null_;';
put 'set &ds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%goto err;';
put '%end;';
put '%end;';
put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;';
put 'by filter_line;';
put 'run;';
put '%err:';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc on macro exit)';
put ')';
put '%mend mp_filterstore;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Validates a filter clause before it gets hashified, returns the RK';
put '@details Used to generate a FILTER_RK from an input query dataset.';
put 'Raw values are stored in dc.mpe_filtersource and the meta values are stored';
put 'in dc.mpe_filteranytable';
put ' Service Inputs
';
put ' IWANT
';
put '|FILTER_TABLE:$41.|';
put '|---|';
put '|DC258467.MPE_X_TEST|';
put ' FILTERQUERY
';
put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|';
put '|---|---|---|---|---|---|';
put '|AND|AND|1|SOME_BESTNUM|>|1|';
put '|AND|AND|1|SOME_TIME|=|77333|';
put ' Service Outputs
';
put ' result
';
put '@li FILTER_HASH';
put '@li FILTER_RK';
put '@li FILTER_TABLE';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getvalue.sas';
put '@li mp_filterstore.sas';
put '@li removecolsfromwork.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let ds=%upcase(%mf_getvalue(work.iwant,filter_table));';
put '%dc_assignlib(WRITE,%scan(&ds,1,.))';
put '%mp_filterstore(';
put 'libds=&ds,';
put 'queryds=work.filterquery,';
put 'filter_summary=&dc_libref..mpe_filteranytable,';
put 'filter_detail=&dc_libref..mpe_filtersource,';
put 'lock_table=&dc_libref..mpe_lockanytable,';
put 'maxkeytable=&dc_libref..mpe_maxkeyvalues,';
put 'outresult=work.result,';
put 'outquery=work.query, /* not used */';
put 'mdebug=1';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put 'proc sql;';
put 'alter table work.result drop PROCESSED_DTTM;';
put '%webout(OPEN)';
put '%webout(OBJ,result)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds';
put ',mode=VIEW';
put ',groupds=work.groups';
put ',clsds=work.clsview';
put ',outds=CLSVIEW';
put ',outmeta=work.cls_rules';
put ');';
put '%local col_list is_admin;';
put '/* filter for the appropriate rules */';
put 'proc sql;';
put 'create table &outmeta as';
put 'select CLS_VARIABLE_NM,';
put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE';
put 'from &clsds';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("&mode",''ALL'')';
put 'and CLS_ACTIVE=1';
put '%if &mode=VIEW %then %do;';
put 'and CLS_HIDE ne 1';
put '%end;';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)';
put 'and CLS_LIBREF="%upcase(&tgtlib)"';
put 'and CLS_TABLE="%upcase(&tgtds)"';
put 'group by CLS_VARIABLE_NM;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";';
put '%put &sysmacroname: &=is_admin;';
put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;';
put '%put &sysmacroname: no CLS rules to apply;';
put '%put &=is_admin;';
put '/* copy using append for speed */';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '/* ensure CLS_RULES is empty in case of admin */';
put 'data &outmeta;';
put 'set &outmeta;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &mode=VIEW %then %do;';
put '/* just send back the relevant columns */';
put '%let col_list=0;';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=0;';
put '%if &col_list=0 %then %do;';
put '/*';
put 'We have columns that are set to CLS_HIDE=1 but we do not have any to';
put 'explicitly show. Therefore we assume all columns are to be shown except';
put 'those that are explicitly hidden.';
put '*/';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=1;';
put 'data &outds;';
put 'set &inds;';
put 'drop &col_list;';
put 'run;';
put '%end;';
put '%else %do;';
put 'data &outds;';
put 'set &inds;';
put 'keep &col_list;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &mode=EDIT %then %do;';
put '/*';
put 'In this case we pass all columns and the frontend will filter out the';
put 'ones that are not allowed to be edited.';
put '*/';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: invalid mode - &mode!;';
put '%abort;';
put '%end;';
put '%mend mpe_columnlevelsecurity;';
put '%macro mp_dsmeta(libds,outds=work.dsmeta);';
put '%local ds1 ds2;';
put 'data;run; %let ds1=&syslast;';
put 'data;run; %let ds2=&syslast;';
put '/* setup the ODS capture */';
put 'ods output attributes=&ds1 enginehost=&ds2;';
put '/* export the metadata */';
put 'proc contents data=&libds;';
put 'run;';
put '/* load it into a single table */';
put 'data &outds (keep=ods_table name value);';
put 'length ods_table $10 name label2 label1 label $100';
put 'value cvalue cvalue1 cvalue2 $1000';
put 'nvalue nvalue1 nvalue2 8;';
put 'if _n_=1 then call missing (of _all_);';
put '* putlog (_all_)(=);';
put 'set &ds1 (in=atrs) &ds2 (in=eng);';
put 'if atrs then do;';
put 'ods_table=''ATTRIBUTES'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'if label2 ne '''' then do;';
put 'name=label2;';
put 'value=coalescec(cvalue2,put(nvalue2,best.));';
put 'output;';
put 'end;';
put 'end;';
put 'else if eng then do;';
put 'ods_table=''ENGINEHOST'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &ds1, &ds2;';
put '%mend mp_dsmeta;';
put '%macro mpe_dsmeta(libds, outds=dsmeta);';
put '%local ddsd ddld notes lenstmt;';
put '%let lenstmt=length ods_table $18 name $100 value $1000;';
put '%let libds=%upcase(&libds);';
put '%mp_dsmeta(&libds, outds=&outds)';
put 'data _null_;';
put 'set &mpelib..mpe_datadictionary;';
put 'where &dc_dttmtfmt < tx_to & dd_source=%upcase("&libds") & dd_type=''TABLE'';';
put 'call symputx(''ddsd'',dd_shortdesc,''l'');';
put 'call symputx(''ddld'',dd_longdesc,''l'');';
put 'run;';
put 'data &outds;';
put '&lenstmt;';
put 'if last then do;';
put 'ODS_TABLE=''MPE_DATADICTIONARY'';';
put 'NAME=''DD_SHORTDESC'';';
put 'VALUE="&ddsd";';
put 'output;';
put 'NAME=''DD_LONGDESC'';';
put 'VALUE="&ddld";';
put 'output;';
put 'end;';
put 'set &outds end=last;';
put 'output;';
put 'run;';
put 'data _data_;';
put 'set &mpelib..mpe_tables;';
put 'where libref="%scan(&libds,1,.)"';
put '& dsn="%scan(&libds,2,.)"';
put '& &dc_dttmtfmt 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro dc_createdataset(libds=mm_getlibs);';
put 'data viewdata;';
put 'var1=''Table'';';
put 'var2="&libds";';
put 'var3="does not exist!";';
put 'run;';
put '%mend dc_createdataset;';
put '%macro dc_gettableid(libref=';
put ',ds=';
put ',outds=);';
put 'data &outds;';
put 'tableuri='''';';
put 'tablename="&ds";';
put 'run;';
put '%mend dc_gettableid;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_getcols(ds, outds=work.cols);';
put '%local dropds;';
put 'proc contents noprint data=&ds';
put 'out=_data_ (keep=name type length label varnum format:);';
put 'run;';
put '%let dropds=&syslast;';
put 'data &outds(keep=name type length varnum format label ddtype fmtname);';
put 'set &dropds(rename=(format=fmtname type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if fmtname='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else format=cats(fmtname,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if fmtname='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');';
put 'else format=cats(fmtname,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put 'proc sql;';
put 'drop table &dropds;';
put '%mend mp_getcols;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getpk(';
put 'lib,';
put 'ds=0,';
put 'outds=work.mp_getpk,';
put 'mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks';
put 'pkfromindex;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let engine=%mf_getengine(&lib);';
put '%let schema=%mf_getschema(&lib);';
put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);';
put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);';
put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);';
put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);';
put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);';
put '%let sum=%mf_getuniquename(prefix=getpk_sum);';
put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);';
put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);';
put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);';
put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put 'proc sql;';
put 'create table &ds1 as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.&ds2 as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table &ds3 as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.&ds1 a';
put 'left join work.&ds2 b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%if &ds = 0 %then %let dsn=;';
put '/* get all constraints, in constraint order*/';
put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table &pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.&ds2';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table &sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table &pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from &sum a';
put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table &pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data &finalpks;';
put 'set &pkdefault &pk4sure &pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table &ds3 as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.&ds1 a';
put 'left join work.&finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.&tabs1 as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data &tabs2;';
put 'set &ds3;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn constraint_order;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table &outds as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.&tabs1 a';
put 'left join work.&tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getpk;';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mp_searchdata(lib=';
put ',ds=';
put ',string= /* the query will use a contains (?) operator */';
put ',numval= /* numeric must match exactly */';
put ',outloc=0';
put ',outlib=MPSEARCH';
put ',outobs=-1';
put ',filter_text=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local table_list table table_num table colnum col start_tm check_tm vars type';
put 'coltype;';
put '%put process began at %sysfunc(datetime(),datetime19.);';
put '%if &syscc ge 4 %then %do;';
put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;';
put '%return;';
put '%end;';
put '%if &string = %then %let type=N;';
put '%else %let type=C;';
put '%if "&outloc"="0" %then %do;';
put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();';
put '%end;';
put '%mf_mkdir(&outloc)';
put 'libname &outlib "&outloc";';
put '/* get the list of tables in the library */';
put 'proc sql noprint;';
put 'select distinct memname into: table_list separated by '' ''';
put 'from dictionary.tables';
put 'where upcase(libname)="%upcase(&lib)"';
put '%if &ds ne %then %do;';
put 'and upcase(memname)=%upcase("&ds")';
put '%end;';
put ';';
put '/* check that we have something to check */';
put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;';
put '/* loop through each table */';
put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));';
put '%let table=%scan(&table_list,&table_num,%str( ));';
put '%let vars=%mf_getvarlist(&lib..&table);';
put '%if %length(&vars)=0 %then %do;';
put '%put NO COLUMNS IN &lib..&table! This will be skipped.;';
put '%end;';
put '%else %do;';
put '%let check_tm=%sysfunc(datetime());';
put '/* prep input */';
put 'data &outlib..&table;';
put 'set &lib..&table;';
put 'where %unquote(&filter_text) and ( 0';
put '/* loop through columns */';
put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let col=%scan(&vars,&colnum,%str( ));';
put '%let coltype=%mf_getvartype(&lib..&table,&col);';
put '%if &type=C and &coltype=C %then %do;';
put '/* if a char column, see if it contains the string */';
put 'or ("&col"n ? "&string")';
put '%end;';
put '%else %if &type=N and &coltype=N %then %do;';
put '/* if numeric match exactly */';
put 'or ("&col"n = &numval)';
put '%end;';
put '%end;';
put ');';
put '%if &outobs>-1 %then %do;';
put 'if _n_ > &outobs then stop;';
put '%end;';
put 'run;';
put '%put Search query for &table took';
put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;';
put '%if &syscc ne 0 %then %do;';
put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;';
put '%return;';
put '%end;';
put '%if %mf_nobs(&outlib..&table)=0 %then %do;';
put 'proc sql;';
put 'drop table &outlib..&table;';
put '%end;';
put '%end;';
put '%end;';
put '%put process finished at %sysfunc(datetime(),datetime19.);';
put '%mend mp_searchdata;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewdata.sas';
put '@brief Provide the raw view of the data';
put '@details Pass a LIBDS and FILTER_RK to return a dataset for viewing.';
put 'VIEW datasets include all columns / rows (unlike EDIT, which are filtered';
put 'for current records and don''t include the SCD2 etc cols).';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|FILTER_RK:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000';
put '|---|---|---|---';
put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|';
put ' Service Outputs
';
put ' cols
';
put '@li DDTYPE';
put '@li FORMAT';
put '@li LABEL';
put '@li LENGTH';
put '@li NAME';
put '@li TYPE';
put '@li VARNUM';
put ' sasparams
';
put '@li FILTER_TEXT';
put '@li NOBS';
put '@li PK_FIELDS - string seperated list of primary key fields, if they exist';
put '@li TABLENAME';
put '@li TABLEURI';
put '@li VARS';
put ' viewdata
';
put 'The raw data from the target table.';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_createdataset.sas';
put '@li dc_gettableid.sas';
put '@li mf_existds.sas';
put '@li mf_getvarcount.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_getcols.sas';
put '@li mp_getpk.sas';
put '@li mp_jsonout.sas';
put '@li mp_searchdata.sas';
put '@li mp_validatecol.sas';
put '@li mpe_columnlevelsecurity.sas';
put '@li mpe_dsmeta.sas';
put '@li mpe_filtermaster.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* configure macvars */';
put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;';
put '%let maxrows=250;';
put '/* avoid code injection */';
put '%let FMT_IND=0;';
put '%let SEARCHTYPE=;';
put '%let SEARCHVAL=;';
put '%let FILTER_RK=;';
put '%let LIBDS=;';
put '/**';
put '* Validate inputs';
put '*/';
put 'data work.intest;';
put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;';
put 'set work.SASCONTROLTABLE;';
put '/* validate filter_rk */';
put 'if filter_rk le 0 then filter_rk=-1;';
put '/* check if the request is for a format catalog */';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''fmt_ind'',1);';
put 'end;';
put 'putlog (_all_)(=);';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put 'if searchtype in (''CHAR'',''NUM'') then do;';
put 'searchval=tranwrd(searchval,''%'','''');';
put 'searchval=tranwrd(searchval,''&'','''');';
put 'searchval=tranwrd(searchval,'';'','''');';
put 'searchval=tranwrd(searchval,''"'','''');';
put 'call symputx(''searchtype'',searchtype);';
put 'call symputx(''searchval'',searchval);';
put 'end;';
put 'else if searchtype not in ('''',''NONE'') then do;';
put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;';
put 'stop;';
put 'end;';
put 'if is_libds=0 then do;';
put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''filter_rk'',filter_rk);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem with macro inputs)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(Some err with service inputs)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/**';
put '* assign the Library';
put '*/';
put '%dc_assignlib(READ,%scan(&LIBDS,1,.))';
put '/* abort if looking for a format and the catalog doesn''t exist */';
put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)';
put ',mac=&_program..sas';
put ',msg=%str(Catalog &libds does not exist!)';
put ')';
put '/**';
put 'check if dataset can actually be opened - as library may exist but it may not';
put 'be possible to assign, and even if it can, the physical table may not exist';
put '**/';
put 'data _null_;';
put 'if &fmt_ind=0 then do;';
put 'dsid=open("&libds");';
put 'rc=close(dsid);';
put 'end;';
put 'else dsid=42;';
put 'call symputx(''existds'',dsid,''l'');';
put 'putlog ''dataset exists check:'' dsid;';
put 'run;';
put '/**';
put '* get the data';
put '*/';
put '%global dsobs;';
put '%let dsobs=0;';
put '%macro x();';
put '%if &existds>0 %then %do;';
put '%if &fmt_ind=1 %then %do;';
put '/* export format and point the libds to the output table from here on */';
put '%mp_cntlout(';
put 'libcat=&libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%let libds=WORK.FMTEXTRACT;';
put 'proc datasets lib=work noprint;';
put 'modify FMTEXTRACT;';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%end;';
put 'proc sql noprint;';
put 'select count(*) into: dsobs from &libds;';
put '%put preparing query;';
put '%mpe_filtermaster(VIEW,&libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter_rk,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%put printing generated filterquery:;';
put 'data _null_;';
put 'infile filtref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;';
put '/* get row count */';
put 'filename rows temp;';
put 'data _null_;';
put 'file rows;';
put 'infile filtref end=eof;';
put 'input;';
put 'if _n_=1 then do;';
put 'put ''proc sql;'';';
put 'put "select count(*) into: dsobs from &libds where";';
put 'end;';
put 'put _infile_;';
put 'if eof then put '';'';';
put 'run;';
put 'data _null_;';
put 'infile rows;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%inc rows;';
put '/* send actual data, filtered and row-capped */';
put 'data work.viewdata;';
put 'set &libds;';
put 'where %inc filtref;;';
put 'if _n_>&maxrows then stop;';
put 'run;';
put '%if %mf_nobs(work.viewdata)=0 %then %do;';
put 'data work.viewdata;';
put '/* send empty row if empty table to help with hot rendering */';
put 'output;';
put 'set work.viewdata;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data work.vwsearch/view=work.vwsearch;';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put '%if %upcase(&searchtype)=CHAR %then %do;';
put '%mp_searchdata(lib=work';
put ',ds=vwsearch';
put ',string=%superq(searchval)';
put ',outobs=&maxrows';
put ')';
put '%end;';
put '%else %if %upcase(&searchtype)=NUM %then %do;';
put '%mp_searchdata(lib=work';
put ',ds=vwsearch';
put ',numval=%superq(searchval)';
put ',outobs=&maxrows';
put ')';
put '%end;';
put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;';
put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);';
put 'data viewdata;';
put 'set MPSEARCH.vwsearch;';
put 'if _n_<&maxrows;';
put 'run;';
put '%end;';
put '%else %do;';
put '%let dsobs=0;';
put 'data viewdata;';
put 'set &libds;';
put 'stop;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '/* physical table is not accessible so create from metatadata definition */';
put '%dc_createdataset(libds=&libds,outds=viewdata)';
put 'data viewData;';
put 'output;';
put 'set viewdata;';
put 'run;';
put '/* make filtref / work.query / work.groups to avoid downstream issues */';
put 'filename filtref temp;';
put 'data work.query;';
put 'file filtref;';
put 'x=0;';
put 'put x;';
put 'run;';
put 'data work.groups;';
put 'length groupuri groupname $32 groupdesc $128 ;';
put 'call missing (of _all_);';
put 'output;';
put 'stop;';
put 'run;';
put '%end;';
put '%mend x; %x()';
put '/* apply column level security */';
put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata';
put ',mode=VIEW';
put ',clsds=&mpelib..mpe_column_level_security';
put ',groupds=work.groups /* was created in mpe_filtermaster */';
put ',outds=work.viewdata2';
put ',outmeta=work.cls_rules';
put ')';
put '/* get table uri (if sas 9) to enable linking direct to lineage */';
put '%dc_gettableid(libref=%scan(&libds,1,.)';
put ',ds=%scan(&libds,2,.)';
put ',outds=work.parambase';
put ')';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'input;';
put 'length filter_text $32767;';
put 'retain filter_text;';
put 'filter_text=catx('' '',filter_text,_infile_);';
put 'if eof then do;';
put 'if cats(filter_text)=''1=1'' then filter_text='''';';
put 'call symputx(''filter_text'',filter_text);';
put 'end;';
put 'run;';
put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)';
put '%let pk_fields=;';
put 'data _null_;';
put 'set work.pk_fields;';
put 'call symputx(''pk_fields'',pk_fields);';
put 'run;';
put 'data work.sasparams;';
put 'set work.parambase;';
put 'format FILTER_TEXT $32767.;';
put 'FILTER_TEXT=symget(''FILTER_TEXT'');';
put 'length PK_FIELDS $512;';
put 'PK_FIELDS=symget(''PK_FIELDS'');';
put 'nobs=&dsobs;';
put 'vars=%mf_getvarcount(viewdata);';
put 'maxrows=&maxrows;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mp_getcols(&libds, outds=cols)';
put '%mpe_dsmeta(&libds, outds=dsmeta)';
put '%webout(OPEN)';
put '%webout(OBJ,cls_rules)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dsmeta)';
put '%webout(OBJ,query)';
put '%webout(OBJ,sasparams)';
put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewlibarray;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug';
put 'sasjs_tables;';
put '%local i tempds jsonengine;';
put '/* see https://github.com/sasjs/core/issues/41 */';
put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;';
put '%else %let jsonengine=DATASTEP;';
put '%if &action=FETCH %then %do;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '/* now read in the data */';
put '%do i=1 %to &_webin_file_count;';
put '%if &_webin_file_count=1 %then %do;';
put '%let _webin_fileref1=&_webin_fileref;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put 'data _null_;';
put 'infile &&_webin_fileref&i termstr=crlf;';
put 'input;';
put 'call symputx(''input_statement'',_infile_);';
put 'putlog "&&_webin_name&i input statement: " _infile_;';
put 'stop;';
put 'data &&_webin_name&i;';
put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';';
put 'input &input_statement;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put '%end;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* fix encoding */';
put 'OPTIONS NOBOMFILE;';
put '/**';
put '* check xengine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put 'data _null_;';
put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));';
put 'if xengine=''STREAM'' then do;';
put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");';
put 'end;';
put 'run;';
put '/* setup json */';
put 'data _null_;file &fref encoding=''utf-8'';';
put '%if %str(&_debug) ge 131 %then %do;';
put 'put ''>>weboutBEGIN<<'';';
put '%end;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '/* To avoid issues with _webout on EBI we use a temporary file */';
put 'filename _sjsref temp lrecl=131068;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* if debug mode, send back first XX records of each work table also */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put "}";';
put '%end;';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put "}";';
put 'run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file _sjsref mod encoding=''utf-8'';';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'put ",""SYSENCODING"" : ""&sysencoding"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}" @;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'put ''>>weboutEND<<'';';
put '%end;';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjsref lrecl=1 recfm=n;';
put 'file &fref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjsref clear;';
put '%end;';
put '%mend mm_webout;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewlibarray.sas';
put '@brief List the libraries for view access';
put '@details';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mm_webout.sas';
put '@li mf_existds.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let keepvars=libraryref libraryname;';
put 'data _null_;';
put 'length keepvars $32;';
put 'set %sysfunc(ifc(%mf_existds(iwant),iwant,_null_));';
put 'call symputx(''keepvars'',keepvars);';
put 'run;';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';';
put '%put securitygroupscount=&securitygroupscount;';
put '%put ALL_CNT=&ALL_CNT;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewlibs();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %do;';
put '%put user in admin group (scenario1=&scenario1);';
put '%return;';
put '%end;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put '%return;';
put '%end;';
put '/* scenario 3 - an *ALL* libref is listed */';
put '%if &all_cnt>0 %then %do;';
put '%put all_cnt=&all_cnt;';
put '%return;';
put '%end;';
put '/* scenario 4 - specific librefs listed */';
put '%if &securitygroupscount>0 %then %do;';
put '%put scenario 4;';
put '%put securitygroupscount=&securitygroupscount;';
put 'proc sql;';
put 'delete from mm_getLibs';
put 'where upcase(libraryref) not in (select upcase(libref) from matches);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic error!)';
put ')';
put '%mend mpestp_viewlibs;';
put '%mpestp_viewlibs()';
put '%global dc_viewlib_check;';
put '/**';
put '* deal with invalid and duplicate library definitions';
put '*/';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'by libraryref;';
put 'if symget(''dc_viewlib_check'')=''YES'' then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings';
put '*/';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sort data=mm_getlibs (keep=&keepvars);';
put 'by libraryname;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mm_webout(OPEN)';
put '%mm_webout(ARR, mm_getLibs)';
put '%mm_webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewlibs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewlibs.sas';
put '@brief List the libraries for view access';
put '@details';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt.lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';';
put '%put securitygroupscount=&securitygroupscount;';
put '%put ALL_CNT=&ALL_CNT;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewlibs();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %do;';
put '%put user in admin group (scenario1=&scenario1);';
put '%return;';
put '%end;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put '%return;';
put '%end;';
put '/* scenario 3 - an *ALL* libref is listed */';
put '%if &all_cnt>0 %then %do;';
put '%put all_cnt=&all_cnt;';
put '%return;';
put '%end;';
put '/* scenario 4 - specific librefs listed */';
put '%if &securitygroupscount>0 %then %do;';
put '%put scenario 4;';
put '%put securitygroupscount=&securitygroupscount;';
put 'proc sql;';
put 'delete from mm_getLibs';
put 'where upcase(libraryref) not in (select upcase(libref) from matches);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic err!)';
put ')';
put '%mend mpestp_viewlibs;';
put '%mpestp_viewlibs()';
put '%global dc_viewlib_check;';
put '/**';
put '* deal with invalid and duplicate library definitions';
put '*/';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'by libraryref;';
put 'if symget(''dc_viewlib_check'')=''YES'' then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings';
put '*/';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sort data=mm_getlibs out=saslibs;';
put 'by libraryname;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,saslibs)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewtables;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewtables.sas';
put '@brief List the tables and format catalogs the user can view';
put '@details Provide a library and get list of tables and catalogs. Also return';
put 'the libinfo details.';
put ' Service Inputs
';
put ' SASControlTable
';
put 'Just one input - MPLIB (the libref to get tables and info for)';
put '|MPLIB:$char8.|';
put '|---|';
put '|SOMELIB|';
put ' Service Outputs
';
put ' work.mptables
';
put '|MEMNAME:$char32.|';
put '|---|';
put '|DS1|';
put '|DS2|';
put '|DS3|';
put 'etc';
put ' work.libinfo
';
put 'If attributes are empty, they don''t need to be shown on screen.';
put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |';
put '|---|---|---|---|---|---|---|---|---|';
put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mpe_getvars.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global MPLIB;';
put '/* load parameters */';
put '%mpe_getvars(SASControlTable, SASControlTable)';
put '/**';
put '* assign the Library';
put '*/';
put '%put &=MPLIB;';
put '%dc_assignlib(READ,&MPLIB)';
put '%mp_abort(iftrue= (&syscc ne 0 )';
put ',mac=&_program..sas';
put ',msg=%str(Unable to assign &mplib library)';
put ')';
put '/**';
put '* get the tables';
put '*/';
put 'data members; /* empty table */';
put 'name='''';';
put 'memtype='''';';
put 'run;';
put 'ods output Members=Members;';
put 'proc datasets library=&mplib ;';
put 'quit;';
put '/* cannot avoid the proc datasets warn!ng for an empty lib */';
put '/* nolist means no output and nowarn has no effect */';
put '%put &=syscc;';
put 'data _null_;';
put 'if "&syscc" ne "0" then do;';
put 'putlog "Library &mplib is empty, setting syscc to zero";';
put 'call symputx(''syscc'',0);';
put 'end;';
put 'run;';
put '%put &=syscc;';
put 'proc sql;';
put 'create table work.mptables as';
put 'select distinct case when memtype=''CATALOG'' then cats(name,''-FC'')';
put 'else name end as memname';
put 'from members;';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'where also libref in (''*ALL*'',"%upcase(&mplib)");';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches';
put 'where libref=''*ALL*''';
put 'or (libref="&mplib" and dsn=''*ALL*'');';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewtables();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %return;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %return;';
put '/* scenario 3 - an *ALL* libref or DSN is listed */';
put '%if &all_cnt>0 %then %return;';
put '/* scenario 4 - specific tables listed */';
put '%if &securitygroupscount>0 %then %do;';
put 'proc sql;';
put 'delete from mptables';
put 'where upcase(memname) not in (select upcase(dsn) from sec);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put 'data mptables;';
put 'set mptables;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic error!)';
put ')';
put '%mend mpestp_viewtables;';
put '%mpestp_viewtables()';
put '/* get libinfo */';
put 'proc sql;';
put 'create table work.libinfo as';
put 'select a.engine,';
put 'a.libname,';
put 'a.paths,';
put 'a.perms,';
put 'a.owners,';
put 'a.schemas,';
put 'a.libid,';
put 'coalesce(b.libsize,0) as libsize,';
put 'coalesce(b.table_cnt,0) as table_cnt';
put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.libref=b.libref';
put 'where a.libref="&MPLIB";';
put '%webout(OPEN)';
put '%webout(OBJ,mptables)';
put '%webout(OBJ,libinfo)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/validations;
%let service=columns_in_libds;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for table columns';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Inputs
';
put ' work.sourcerow
';
put 'Has source table structure.';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getuniquename.sas';
put '@li mp_abort.sas';
put '@li mp_validatecol.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlibds=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlibds=%mf_getuniquename();';
put '%let var_is_libds=%mf_getuniquename();';
put 'data _null_;';
put 'length xl_libref base_lib select_lib rls_libref cls_libref libref $8';
put 'xl_table base_ds select_ds rls_table cls_table dsn $32;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.source_row;';
put '&varlibds=symget(''libds'');';
put 'if &varlibds="&mpelib..MPE_EXCEL_CONFIG"';
put 'then &vartgtlibds=cats(xl_libref,''.'',xl_table);';
put 'else if &varlibds="&mpelib..MPE_VALIDATIONS"';
put 'then &vartgtlibds=cats(BASE_LIB,''.'',BASE_DS);';
put 'else if &varlibds="&mpelib..MPE_SELECTBOX"';
put 'then &vartgtlibds=cats(select_lib,''.'',select_ds);';
put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"';
put 'then &vartgtlibds=cats(RLS_LIBREF,''.'',RLS_TABLE);';
put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"';
put 'then &vartgtlibds=cats(CLS_LIBREF,''.'',CLS_TABLE);';
put 'else if &varlibds="&mpelib..MPE_TABLES"';
put 'then &vartgtlibds=cats(LIBREF,''.'',DSN);';
put '/* validate libds */';
put '%mp_validatecol(&vartgtlibds,LIBDS,&var_is_libds)';
put 'if &var_is_libds=1 then call symputx(''tgtlibds'',&vartgtlibds);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlibds" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Unable to extract libds vars from &libds inputs for &variable_nm)';
put ')';
put '%dc_assignlib(READ,%scan(&tgtlibds,1,.))';
put 'proc contents noprint data=&tgtlibds';
put 'out=work.DYNAMIC_VALUES (keep=name rename=(name=display_value) );';
put 'run;';
put 'data work.DYNAMIC_VALUES;';
put 'set work.DYNAMIC_VALUES;';
put 'raw_value=upcase(display_value);';
put 'format raw_value;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=libraries_all;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct libraryname as display_value,';
put 'upcase(libraryref) as raw_value';
put 'from work.mm_getLibs';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=libraries_editable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for editable libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put '**/';
put '/* send back the raw and formatted values */';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct libref as display_value,';
put 'upcase(libref) as raw_value';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. < tx_to';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_alerts.alert_lib;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief fetch extended values for alert_lib';
put '@details Fetches libraries from mpe_tables, creates extended values for';
put 'alert_ds, and marks "*ALL*" as the forced (default) value.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put 'The FORCED_VALUE column can be used to force an extended value to be selected';
put 'by default when a particular value is chosen.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|';
put '|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|1|DISCOUNT_RT|"40%"|N|0.4||0|';
put '|1|DISCOUNT_RT|"30%"|N|0.3||1|';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|2|DISCOUNT_RT|"40%"|N|0.4||1|';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '%mp_abort(iftrue= ("%upcase(&libds)" ne "&DC_LIBREF..MPE_ALERTS" )';
put ',mac=&_program';
put ',msg=%str(';
put 'Invalid validation, expected MPE_ALERTS.ALERT_LIB, got %superq(libds)';
put ')';
put ')';
put 'proc sql;';
put 'create table work.source as';
put 'select libref,dsn';
put 'from &DC_LIBREF..MPE_TABLES';
put 'where tx_to > &dc_dttmtfmt.';
put 'order by 1,2;';
put 'data work.DYNAMIC_VALUES (keep=display_index raw_value display_value);';
put 'set work.source end=last;';
put 'by libref;';
put 'if last.libref then do;';
put 'display_index+1;';
put 'raw_value=libref;';
put 'display_value=libref;';
put 'output;';
put 'end;';
put 'if last then do;';
put 'display_index+1;';
put 'raw_value=''*ALL*'';';
put 'display_value=''*ALL*'';';
put 'output;';
put 'end;';
put 'run;';
put 'data work.dynamic_extended_values(keep=display_index extra_col_name display_type';
put 'display_value RAW_VALUE_CHAR raw_value_num forced_value);';
put 'set work.source end=last;';
put 'by libref dsn;';
put 'retain extra_col_name ''ALERT_DS'';';
put 'retain display_type ''C'';';
put 'retain raw_value_num .;';
put 'raw_value_char=dsn;';
put 'display_value=dsn;';
put 'forced_value=0;';
put 'if first.libref then display_index+1;';
put 'if last.libref then do;';
put 'display_value=''*ALL*'';';
put 'raw_value_char=''*ALL*'';';
put 'forced_value=1;';
put 'output;';
put 'end;';
put 'else output;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_tables.dsn;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief fetch extended values for DSN';
put '@details Fetches datasets in a library, and ALSO fetches a list of numeric';
put 'vars for each dataset for use in adjacent columns (such as VAR_PROCESSED,';
put 'TX_TO etc).';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put 'The FORCED_VALUE column can be used to force an extended value to be selected';
put 'by default when a particular value is chosen.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|';
put '|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|1|DISCOUNT_RT|"40%"|N|0.4||0|';
put '|1|DISCOUNT_RT|"30%"|N|0.3||1|';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|2|DISCOUNT_RT|"40%"|N|0.4||1|';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlib=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlib=%mf_getuniquename();';
put '%let var_is_lib=%mf_getuniquename();';
put 'data _null_;';
put 'length &varlibds $41 &vartgtlib $8;';
put 'set work.source_row;';
put '&varlibds=upcase(symget(''libds''));';
put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;';
put 'else putlog "something unexpected happened";';
put '/* validate name */';
put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);';
put 'call symputx(''vartgtlib'',&vartgtlib);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlib" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Invalid library - %superq(vartgtlib))';
put ',errds=work.dc_error_response';
put ')';
put '%dc_assignlib(READ,&tgtlib)';
put 'proc sql;';
put 'create table work.source as';
put 'select upcase(memname) as memname';
put ',upcase(name) as name';
put ',type';
put 'from dictionary.columns';
put 'where libname="&TGTLIB"';
put 'and memtype=''DATA'';';
put 'create table work.members as';
put 'select distinct memname as display_value';
put 'from work.source;';
put 'data work.DYNAMIC_VALUES;';
put 'set work.members;';
put 'raw_value=display_value;';
put 'display_index=_n_;';
put 'run;';
put 'proc sql;';
put 'create table work.dynamic_extended_values as';
put 'select a.display_index';
put ',b.name as display_value';
put ',"C" as display_type';
put ',b.name as RAW_VALUE_CHAR';
put ',. as RAW_VALUE_NUM';
put 'from work.dynamic_values a';
put 'left join work.source b';
put 'on a.display_value=b.memname';
put 'where b.type=''num'';';
put 'data work.dynamic_extended_values;';
put 'set work.DYNAMIC_EXTENDED_VALUES;';
put 'extra_col_name=''VAR_PROCESSED'';output;';
put 'extra_col_name=''VAR_TXFROM'';output;';
put 'extra_col_name=''VAR_TXTO'';output;';
put 'extra_col_name=''VAR_BUSFROM'';output;';
put 'extra_col_name=''VAR_BUSTO'';output;';
put 'run;';
put '/* set some force flags */';
put 'data work.dynamic_extended_values;';
put 'set work.DYNAMIC_EXTENDED_VALUES;';
put 'forced_value=0;';
put 'if extra_col_name=''VAR_TXFROM'' & raw_value_char=''TX_FROM'' then forced_value=1;';
put 'if extra_col_name=''VAR_TXTO'' & raw_value_char=''TX_TO'' then forced_value=1;';
put 'run;';
put 'proc sort;';
put 'by extra_col_name display_index;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_x_test.some_num;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put '|DISPLAY_VALUE:$|RAW_VALUE:??|';
put '|---|---|';
put '|$44.00|44|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct cats(some_num) as display_value,';
put 'some_num as raw_value';
put 'from &libds';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sas_groups;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroups(access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroups';
put ');';
put '%local oauth_bearer base_uri fname1 libref1;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '/* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getgroups;';
put '%macro dc_getgroups(outds=mm_getgroups);';
put '%mv_getgroups(outds=&outds)';
put 'proc sort';
put 'data=&outds(rename=(id=groupuri name=groupname description=groupdesc))';
put 'out=&outds (keep=groupuri groupname groupdesc);';
put 'by groupname;';
put 'run;';
put '%mend dc_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief validating the mpe_security.sas_group column';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_getgroups.sas';
put '**/';
put '%dc_getgroups(outds=groups)';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct groupname as display_value,';
put 'groupname as raw_value';
put 'from work.groups';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tables_all;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for tables in a library';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlib=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlib=%mf_getuniquename();';
put '%let var_is_lib=%mf_getuniquename();';
put 'data _null_;';
put 'length &varlibds $41 &vartgtlib $8 libref $8 rls_libref $8;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.source_row;';
put '&varlibds=upcase(symget(''libds''));';
put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;';
put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"';
put 'then &vartgtlib=RLS_LIBREF;';
put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"';
put 'then &vartgtlib=CLS_LIBREF;';
put '/* validate name */';
put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);';
put 'call symputx(''vartgtlib'',&vartgtlib);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlib" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Invalid library - %superq(vartgtlib))';
put ',errds=work.dc_error_response';
put ')';
put '%dc_assignlib(READ,&tgtlib)';
put 'data members; /* empty table */';
put 'name='' '';';
put 'run;';
put 'ods output Members=Members;';
put 'proc datasets library=&tgtlib ;';
put 'run;';
put '/* send back the raw and formatted values */';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct name as display_value,';
put 'upcase(name) as raw_value';
put 'from work.members';
put 'where MemType=''DATA''';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tables_editable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for editable libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Inputs
';
put ' work.source_row
';
put '|libref:$8|';
put '|somelib|';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5|` `|';
put '|1|DISCOUNT_RT|"40%"|N|0.4|` `|';
put '|1|DISCOUNT_RT|"30%"|N|0.3|` `|';
put '|1|CURRENCY_SYMBOL|"GBP"|C|` `|"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C|` `|"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5|` `|';
put '|2|DISCOUNT_RT|"40%"|N|0.4|` `|';
put '|2|CURRENCY_SYMBOL|"EUR"|C|` `|"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C|` `|"HKD"|';
put '**/';
put '/* send back the raw and formatted values */';
put 'data _null_;';
put 'var=symget(''variable_nm'');';
put 'libds=symget(''libds'');';
put 'if libds="&mpelib..MPE_EXCEL_CONFIG" and var=''XL_TABLE'' then do;';
put 'call symputx(''srccol'',''XL_LIBREF'');';
put 'end;';
put 'else call symputx(''srccol'',''libref'');';
put 'run;';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct dsn as display_value,';
put 'upcase(dsn) as raw_value';
put 'from &mpelib..mpe_tables';
put '(where=(&dc_dttmtfmt. < tx_to))';
put 'where libref in (select &srccol from work.source_row)';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/viya_users;
%let service=usergroupsbymember;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usergroupsbymember.sas';
put '@brief List the groups a member is in';
put '@details Runs without \%mpeinit() - this enables the dropdown to be populated';
put 'during configuration, when the settings service does not yet exist.';
put ' SAS Macros
';
put '@li mv_getusergroups.sas';
put '@li mf_getuser.sas';
put '@version 3.4';
put '@author 4GL Apps Ltd';
put '**/';
put '%mv_getusergroups(%mf_getuser(),outds=groups)';
put 'proc sort data=groups(rename=(id=uri name=groupname providerid=groupdesc))';
put 'out=groups;';
put 'by groupname;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,groups)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=usermembers;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusers(outds=work.mv_getusers';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users?limit=10000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var"';
put '"Accept"="application/json";';
put '%end;';
put '%else %do;';
put 'headers "Accept"="application/json";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusers;';
put '%macro dc_getusers(outds=mm_getlibs);';
put '%mv_getusers(outds=&outds)';
put 'proc sort data=&outds(rename=(id=uri)) out=&outds(keep=uri name);';
put 'by name;';
put 'run;';
put '%mend dc_getusers;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usermembers.sas';
put '@brief List all SAS users';
put '@details Gets a list of all SAS users';
put ' SAS Macros
';
put '@li dc_getusers.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%dc_getusers(outds=users)';
put '%webout(OPEN)';
put '%webout(OBJ,users)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=usermembersbygroup;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroupmembers(group';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroupmembers';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups/&group/members?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: Group &group not found!!;';
put 'data &outds;';
put 'length id name $43;';
put 'call missing(of _all_);';
put 'run;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'length id name $43;';
put 'set &libref1..items;';
put 'run;';
put 'libname &libref1 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put '%mend mv_getgroupmembers;';
put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);';
put '%mv_getgroupmembers(%str(&group),outds=&outds)';
put 'data &outds ;';
put 'length membername $64;';
put 'set &outds(rename=(name=MemberName));';
put 'run;';
put '%mend dc_getgroupmembers;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usermembersbygroup.sas';
put '@brief List the members of a group';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@li dc_getgroupmembers.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'data _null_;';
put 'set iwant;';
put 'call symputx(''groupid'',groupid);';
put 'run;';
put '%dc_getgroupmembers(%str(&groupid),outds=sasMembers)';
put 'proc sort data=sasMembers;';
put 'by membername;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,sasMembers)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/web;
%let filename=favicon.ico;
filename filecode temp lrecl=96132;
data _null_;
file filecode;
put 'iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP'@;
put 'AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/'@;
put 'P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1'@;
put 'wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h'@;
put 'zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS'@;
put 'O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ'@;
put 'CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD'@;
put 'mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy'@;
put 'n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY'@;
put 'SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR'@;
put 'PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01'@;
put '6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10'@;
put '3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi'@;
put 'p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4'@;
put 'nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy'@;
put 'Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj'@;
put 'Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0'@;
put 'N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv'@;
put 'Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA'@;
put 'n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y'@;
put 'Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp'@;
put 'b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB'@;
put 'VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ'@;
put 'eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ'@;
put 'AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB'@;
put 'TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z'@;
put 'UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg'@;
put 'ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p'@;
put 'qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe'@;
put 'EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN'@;
put 'TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS'@;
put 'Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu'@;
put '9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN'@;
put 'VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p'@;
put 'G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs'@;
put 'InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg'@;
put 'DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa'@;
put 'K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH'@;
put 'cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM'@;
put 'RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W'@;
put 'jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH'@;
put 'NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy'@;
put 'F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB'@;
put 'QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD'@;
put 'bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S'@;
put 'AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A'@;
put '3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc'@;
put 'uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN'@;
put 'Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B'@;
put 'CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm'@;
put '7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG'@;
put 'bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh'@;
put '3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV'@;
put 'ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL'@;
put 'LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg'@;
put 'a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp'@;
put 'P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp'@;
put 'QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5'@;
put 'RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh'@;
put 'KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu'@;
put '9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3'@;
put 't4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ'@;
put 'APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s'@;
put 'fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY'@;
put 'FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH'@;
put 'UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB'@;
put 'GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4'@;
put 'ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+'@;
put 'Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp'@;
put 'PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM'@;
put 'sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ'@;
put 'QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s'@;
put 'Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al'@;
put 'ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ'@;
put 'RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP'@;
put 'qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW'@;
put 'xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d'@;
put 'k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b'@;
put 'M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL'@;
put 'bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW'@;
put '/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm'@;
put 'LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl'@;
put 'YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v'@;
put 'iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf'@;
put 'az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1'@;
put 'MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30'@;
put 'tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN'@;
put 'YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl'@;
put '91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD'@;
put '20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk'@;
put 'QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K'@;
put 'LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5'@;
put 'kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt'@;
put 'gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9'@;
put 'bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX'@;
put 'C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7'@;
put 'BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw'@;
put 'cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM'@;
put 'xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN'@;
put 'P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s'@;
put '3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt'@;
put 'zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX'@;
put 'sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t'@;
put 'SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr'@;
put '1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895'@;
put 'TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn'@;
put 'vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz'@;
put 'vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx'@;
put 'hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy'@;
put 'OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb'@;
put '1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0'@;
put 'wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ'@;
put 'jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2'@;
put 'I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH'@;
put '2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5'@;
put 'JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt'@;
put 'urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ'@;
put 'Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ'@;
put 'yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w'@;
put 'JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ'@;
put 'oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537'@;
put 'XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q'@;
put 'XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6'@;
put '13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK'@;
put 'RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H'@;
put 'KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV'@;
put 'HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA'@;
put 'i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj'@;
put 'BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2'@;
put 'PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr'@;
put 'DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp'@;
put 'xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8'@;
put 'EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye'@;
put 'BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ'@;
put '2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk'@;
put 'T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA'@;
put 'Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK'@;
put '7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa'@;
put 'Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT'@;
put 'DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7'@;
put '9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv'@;
put 'wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ'@;
put 'AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG'@;
put 'x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6'@;
put 'VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj'@;
put 'O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI'@;
put 'fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca'@;
put '+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G'@;
put 'WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq'@;
put 'McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD'@;
put 'CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje'@;
put 'pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L'@;
put '/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re'@;
put 'qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm'@;
put 'y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583'@;
put 'P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p'@;
put 'QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE'@;
put 'ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh'@;
put '3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr'@;
put 'P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU'@;
put 'HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d'@;
put 'B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK'@;
put 'oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe'@;
put '+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu'@;
put '9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5'@;
put 'tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd'@;
put 'LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG'@;
put '7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP'@;
put '6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw'@;
put 'LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a'@;
put 'NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54'@;
put 'FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u'@;
put 'b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY'@;
put 'A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha'@;
put 'U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl'@;
put 'uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM'@;
put 'GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA'@;
put 'GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi'@;
put '0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+'@;
put '1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl'@;
put '+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN'@;
put 'alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp'@;
put 'JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL'@;
put 'kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy'@;
put 'uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm'@;
put 'UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw'@;
put '9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz'@;
put 'vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p'@;
put 'JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U'@;
put '70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95'@;
put 'EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24'@;
put '7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX'@;
put 'H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o'@;
put 'Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ'@;
put 'JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ'@;
put 'FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A'@;
put 'jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o'@;
put '+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf'@;
put '8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA'@;
put 'QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX'@;
put '09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC'@;
put '3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn'@;
put '/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS'@;
put 'RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt'@;
put '5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy'@;
put 'o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV'@;
put '8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E'@;
put '8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8'@;
put '8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0'@;
put 'VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK'@;
put '1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw'@;
put 'Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU'@;
put 'Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz'@;
put 'HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3'@;
put 'uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW'@;
put 'hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N'@;
put 'eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl'@;
put '4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0'@;
put 'xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP'@;
put '+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh'@;
put 'Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6'@;
put 'Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7'@;
put '7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw'@;
put 'PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze'@;
put 'hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK'@;
put 'qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz'@;
put '0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i'@;
put 'zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ'@;
put 'mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo'@;
put 'ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH'@;
put 'v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S'@;
put 'BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp'@;
put 'Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte'@;
put '/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku'@;
put '5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus'@;
put 'k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt'@;
put 'PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V'@;
put 'J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN'@;
put 'undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v'@;
put 'YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m'@;
put 'AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO'@;
put 'Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v'@;
put 'yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4'@;
put 'QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b'@;
put '1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl'@;
put '43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe'@;
put 'nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4'@;
put 'Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML'@;
put 'YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k'@;
put 'MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//'@;
put '/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO'@;
put '4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce'@;
put 'rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr'@;
put 'kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7'@;
put 'Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg'@;
put '4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp'@;
put 'mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f'@;
put '8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY'@;
put '9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo'@;
put 'soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx'@;
put '0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB'@;
put 'R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO'@;
put '/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn'@;
put 'RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i'@;
put 'wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y'@;
put 'FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR'@;
put 'G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm'@;
put 'k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj'@;
put 'HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW'@;
put 'cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm'@;
put '/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r'@;
put 'SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU'@;
put 'PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL'@;
put 'hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu'@;
put '1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV'@;
put '0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7'@;
put '9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ'@;
put 'P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm'@;
put 'SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3'@;
put 'z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL'@;
put 'bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV'@;
put 'jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV'@;
put 'WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI'@;
put 'G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH'@;
put 'i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e'@;
put 'v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt'@;
put 'AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum'@;
put 'wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1'@;
put '2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v'@;
put 'a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L'@;
put 'A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV'@;
put 'Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0'@;
put '9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T'@;
put 'Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO'@;
put 'bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw'@;
put '+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57'@;
put 'Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n'@;
put 'a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq'@;
put 'sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu'@;
put 'HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk'@;
put 'H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw'@;
put 'rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq'@;
put 'N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/'@;
put 'kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O'@;
put 'Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM'@;
put '8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ'@;
put 'wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM'@;
put '1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL'@;
put 'Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR'@;
put 'R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim'@;
put 'txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk'@;
put '7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj'@;
put '6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA'@;
put 'o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17'@;
put '9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm'@;
put 'UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8'@;
put '/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6'@;
put 'WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E'@;
put 'hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC'@;
put 'LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA'@;
put 'EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6'@;
put '0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy'@;
put 'oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC'@;
put 'GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/'@;
put 'Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz'@;
put 'jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w'@;
put '763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6'@;
put 'Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX'@;
put '3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb'@;
put 'YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ'@;
put 'vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7'@;
put 'yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz'@;
put '4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O'@;
put 'd1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL'@;
put 'AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc'@;
put 'PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g'@;
put 'IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI'@;
put 'aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9'@;
put '8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on'@;
put 'CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto'@;
put '59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx'@;
put 'P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb'@;
put 'nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP'@;
put 'M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K'@;
put '72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ'@;
put '8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE'@;
put 'gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n'@;
put 'M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d'@;
put 'eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF'@;
put 'IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ'@;
put 'TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn'@;
put 'aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X'@;
put 'iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L'@;
put '1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/'@;
put 'UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE'@;
put 'aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy'@;
put 'dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA'@;
put 'SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl'@;
put 'wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf'@;
put 'r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW'@;
put 'clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU'@;
put '3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd'@;
put 'nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2'@;
put 'EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v'@;
put 'ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul'@;
put 'JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm'@;
put '0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3'@;
put 'ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA'@;
put 'EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI'@;
put '9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T'@;
put 'JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ'@;
put 'M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn'@;
put 'LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb'@;
put 'fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H'@;
put 'DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH'@;
put 'VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m'@;
put 'qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b'@;
put 'hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X'@;
put '/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+'@;
put '/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu'@;
put 'PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS'@;
put 'qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN'@;
put 'V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p'@;
put 'pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt'@;
put 'D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y'@;
put 'dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU'@;
put 'aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a'@;
put 'ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd'@;
put 'undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk'@;
put 'WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd'@;
put 'RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw'@;
put 'a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz'@;
put '/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx'@;
put 'DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/'@;
put 'v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL'@;
put 'qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O'@;
put 'BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX'@;
put 'jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf'@;
put 'v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY'@;
put 'vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn'@;
put 'pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk'@;
put 'gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830'@;
put '8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2'@;
put 'STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs'@;
put 'qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL'@;
put 'vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV'@;
put 'AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3'@;
put 'Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84'@;
put 'rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li'@;
put 'lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT'@;
put '9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ'@;
put 'm+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le'@;
put 'p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl'@;
put 'OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0'@;
put 'GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi'@;
put 'Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh'@;
put 'RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef'@;
put 'HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w'@;
put '6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1'@;
put 'NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz'@;
put 'zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh'@;
put 'iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII'@;
put 'A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM'@;
put 'DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV'@;
put 'DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9'@;
put 'NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI'@;
put 'MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj'@;
put 'KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky'@;
put 'raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x'@;
put 'ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ'@;
put 'ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N'@;
put 'sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU'@;
put 'XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS'@;
put 'wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ'@;
put 'AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs'@;
put 'wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF'@;
put 'prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=index.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4KICAgIDx0aXRsZT5EYXRhIENvbnRyb2xsZXI8L3RpdGxlPgogICAgPCEtLSA8YmFzZSBocmVmPSIvIj4gLS0+CgogICAgPCEtLSBtZXRhIHRhZ3MgLS0+CiAgICA8bWV0YSBuYW1lPSJk'@;
put 'ZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVy'@;
put 'ZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9ImltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8v'@;
put 'ZGVtby5kYXRhY29udHJvbGxlci5pbyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iRGF0YSBDb250cm9sbGVyIGZvciBTQVPCriIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9n'@;
put 'OmRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciLz4KCiAgICA8bWV0YSBu'@;
put 'YW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhy'@;
put 'ZWY9ImltYWdlcy9mYXZpY29uLmljbyIvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGVzLjU5ZGMxMTk0N2I4MzE0M2MuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0'@;
put 'aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRlcGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxv'@;
put 'Z2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBXaGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBh'@;
put 'Y2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4'@;
put 'dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjIiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1'@;
put 'ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlv'@;
put 'biI+CiAgPC9zYXNqcz4KCiAgPGJvZHkgY2xhc3M9Im0tMCI+CiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSJydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InBvbHlmaWxscy44N2RiYmQzZmFhYmVkNTEz'@;
put 'LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJtYWluLjJjMWRkNWI0YTg5NjI4MTIuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PC9ib2R5Pgo8L2h0bWw+Cg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=main.2c1dd5b4a8962812.js;
filename filecode temp lrecl=11451676;
data _null_;
file filecode;
put 'KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1sxNzldLHs3NDA5MjpmdW5jdGlvbihhdCl7YXQuZXhwb3J0cz1mdW5jdGlvbihJZSl7dmFyIEY9e307ZnVuY3Rpb24gYWUoeCl7aWYoRlt4XSlyZXR1cm4g'@;
put 'Rlt4XS5leHBvcnRzO3ZhciBtPUZbeF09e2k6eCxsOiExLGV4cG9ydHM6e319O3JldHVybiBJZVt4XS5jYWxsKG0uZXhwb3J0cyxtLG0uZXhwb3J0cyxhZSksbS5sPSEwLG0uZXhwb3J0c31yZXR1cm4gYWUubT1JZSxhZS5jPUYsYWUuZD1mdW5jdGlvbih4LG0sbGUpe2FlLm8oeCxtKXx8T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KHgsbSx7ZW51bWVyYWJsZTohMCxnZXQ6bGV9KX0sYWUucj1mdW5jdGlvbih4KXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoeCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KHgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxhZS50PWZ1bmN0aW9uKHgsbSl7aWYoMSZtJiYoeD1hZSh4KSksOCZtfHw0Jm0mJiJvYmplY3QiPT10eXBlb2YgeCYmeCYmeC5fX2VzTW9kdWxlKXJldHVybiB4O3ZhciBsZT1PYmplY3QuY3JlYXRlKG51'@;
put 'bGwpO2lmKGFlLnIobGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6eH0pLDImbSYmInN0cmluZyIhPXR5cGVvZiB4KWZvcih2YXIgTSBpbiB4KWFlLmQobGUsTSxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0uYmluZChudWxsLE0pKTty'@;
put 'ZXR1cm4gbGV9LGFlLm49ZnVuY3Rpb24oeCl7dmFyIG09eCYmeC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHguZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4geH07cmV0dXJuIGFlLmQobSwiYSIsbSksbX0sYWUubz1mdW5jdGlvbih4LG0pe3JldHVybiBPYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5LmNhbGwoeCxtKX0sYWUucD0iIixhZShhZS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5k'@;
put 'ICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIHg9YWUoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2pl'@;
put 'Y3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLG09e30sbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTS5zaW5nbGVJbnN0YW5jZXx8'@;
put 'KE0uc2luZ2xlSW5zdGFuY2U9bmV3IE0pLE0uc2luZ2xlSW5zdGFuY2V9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksTS5wcm90b3R5cGUudmFsaWRhdGVOYW1lPWZ1bmN0aW9uKE8pe2lmKDA9PT1PLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMg'@;
put 'bXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7aWYoL1xzLy50ZXN0KE8pKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IG5vdCBjb250YWluIGFueSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMhIik7cmV0dXJuITB9LE0ucHJvdG90eXBlLm5vcm1hbGl6ZVNoYXBl'@;
put 'TmFtZT1mdW5jdGlvbihPKXtyZXR1cm4gTy50b0xvd2VyQ2FzZSgpfSxNLnByb3RvdHlwZS5zZXRJY29uVGVtcGxhdGU9ZnVuY3Rpb24oTyxSKXt2YXIgej1SLnRyaW0oKTt0aGlzLnZhbGlkYXRlTmFtZShPKSYmKE89dGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoTyksbVtPXSYmZGVsZXRlIG1b'@;
put 'T10sbVtPXT16LHguU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLmVtaXRDaGFuZ2VzKE8seikpfSxNLnByb3RvdHlwZS5zZXRJY29uQWxpYXNlcz1mdW5jdGlvbihPLFIseil7Zm9yKHZhciBLPTAsST16O0s8SS5sZW5ndGg7SysrKXt2YXIgaz1JW0tdO3RoaXMudmFsaWRhdGVOYW1l'@;
put 'KGspJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxrLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT1tSXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihPKXtpZigib2JqZWN0IiE9dHlwZW9mIE8pdGhyb3cgbmV3IEVycm9yKCdUaGUg'@;
put 'YXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiAic2hhcGUtdGVtcGxhdGUiIH0nKTtmb3IodmFyIFIgaW4gTylPLmhhc093blByb3BlcnR5KFIpJiZ0aGlzLnNl'@;
put 'dEljb25UZW1wbGF0ZShSLE9bUl0pfSxNLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oTyl7cmV0dXJuISFtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKE8pe2lmKCFPKXJldHVybiBtO2lmKCJzdHJpbmciIT10eXBlb2YgTyl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJPbmx5IHN0cmluZyBhcmd1bWVudCBpcyBhbGxvd2VkIGluIHRoaXMgbWV0aG9kLiIpO3JldHVybiBtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuYWxpYXM9ZnVuY3Rpb24oTyl7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXRocm93IG5ldyBFcnJv'@;
put 'cignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogWyJhbGlhcy1uYW1lIiwgLi4uXSB9Jyk7Zm9yKHZhciBSIGluIE8paWYoTy5oYXNPd25Qcm9wZXJ0'@;
put 'eShSKSl7aWYoIW0uaGFzT3duUHJvcGVydHkoUikpdGhyb3cgbmV3IEVycm9yKCdBbiBpY29uICInK1IrIlwiIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhbGlhc2VzIHRvIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIENsYXJpdHkgSWNvbnMgc2V0cyEiKTt0aGlzLnNldEljb25BbGlhc2VzKG0sUixP'@;
put 'W1JdKX19LE19KCk7Ri5DbGFyaXR5SWNvbnNBcGk9bGV9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2pl'@;
put 'Y3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLG09YWUoCi8q'@;
put 'ISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLGxlPTAsTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7TS5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBP'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gUigpe3ZhciB6PU8uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB6LmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK2xlLGxlKyssen0ib2JqZWN0Ij09dHlwZW9mIFJlZmxl'@;
put 'Y3QmJihPPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLEYuQ2xhcml0eUljb25FbGVtZW50PVIsUi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChSLnByb3RvdHlw'@;
put 'ZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpSfX0pKS5jb25zdHJ1Y3Rvcj1SLFIucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciB6PU0uY2xvbmVOb2Rl'@;
put 'KCExKTt6LmlkPXRoaXMuY2xySWNvblVuaXFJZCx6LnRleHRDb250ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKHopfSxSLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oeil7IU51bWJlcih6KXx8TnVtYmVyKHopPDA/KHRoaXMuc3R5bGUud2lk'@;
put 'dGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5zdHlsZS53aWR0aD16KyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9eisicHgiKX0sUi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKHope3JldHVybiB6LnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LFIu'@;
put 'cHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgi'@;
put 'c2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09SyYmKHRoaXMuY3VycmVudFNpemVBdHRyVmFsPUssdGhpcy5fc2V0SWNvblNpemUoSykpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgST10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hh'@;
put 'cGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhJLGZ1bmN0aW9uKGope3ouX2luamVjdFRlbXBsYXRlKGopfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPUksIXguQ2xhcml0eUljb25z'@;
put 'QXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgaz14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihrPT09dGhpcy5jdXJyZW50'@;
put 'U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1rfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgRT10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1FJiYodGhpcy5jdXJyZW50VGl0bGVB'@;
put 'dHRyVmFsPUUpLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbih6LEssSSl7dmFyIGs9dGhpcztpZigic2l6ZSI9PT16JiZ0aGlzLl9zZXRJY29uU2l6ZShJ'@;
put 'KSwic2hhcGUiPT09eil7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKEkpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv'@;
put 'bj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oRSl7ay5faW5qZWN0VGVtcGxhdGUoRSl9KSksIXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwp'@;
put 'KXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT16JiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUks'@;
put 'IXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxS'@;
put 'LnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24oKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksST10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO3o/eiYmei5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmSS5zZXRBdHRy'@;
put 'aWJ1dGUoImFyaWEtbGFiZWxsZWRieSIseisiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpJLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxSLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oeil7eiYmeiE9PXRoaXMuY3VycmVudFNo'@;
put 'YXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXopLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0s'@;
put 'Ui5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRz'@;
put 'IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8q'@;
put 'ISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksbT1hZSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksbGU9YWUoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9p'@;
put 'Y29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksTT14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZTtGLkNsYXJpdHlJY29ucz1NLE0uYWRkKGxlLkNvcmVTaGFwZXMpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKXx8KHdpbmRv'@;
put 'dy5DbGFyaXR5SWNvbnM9TSksY3VzdG9tRWxlbWVudHMuZ2V0KCJjbHItaWNvbiIpfHxjdXN0b21FbGVtZW50cy5kZWZpbmUoImNsci1pY29uIixtLkNsYXJpdHlJY29uRWxlbWVudCkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db3JlU2hhcGVzPUYuQ2xyU2hhcGVBcnJvdz1GLkNs'@;
put 'clNoYXBlU3RlcEZvcndhcmQyPUYuQ2xyU2hhcGVFeWVIaWRlPUYuQ2xyU2hhcGVFeWU9Ri5DbHJTaGFwZUV2ZW50PUYuQ2xyU2hhcGVDYWxlbmRhcj1GLkNsclNoYXBlQW5nbGVEb3VibGU9Ri5DbHJTaGFwZVZpZXdDb2x1bW5zPUYuQ2xyU2hhcGVTZWFyY2g9Ri5DbHJTaGFwZVZtQnVnPUYu'@;
put 'Q2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPUYuQ2xyU2hhcGVGaWx0ZXJHcmlkPUYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPUYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Ri5DbHJTaGFwZUNsb3VkPUYuQ2xyU2hhcGVJbWFnZT1GLkNsclNoYXBlQmVsbD1GLkNsclNoYXBlRm9sZGVy'@;
put 'T3Blbj1GLkNsclNoYXBlRm9sZGVyPUYuQ2xyU2hhcGVBbmdsZT1GLkNsclNoYXBlVXNlcj1GLkNsclNoYXBlQmFycz1GLkNsclNoYXBlSGVscEluZm89Ri5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1GLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1GLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPUYu'@;
put 'Q2xyU2hhcGVJbmZvU3RhbmRhcmQ9Ri5DbHJTaGFwZUluZm9DaXJjbGU9Ri5DbHJTaGFwZUNoZWNrQ2lyY2xlPUYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1GLkNsclNoYXBlVGltZXM9Ri5DbHJTaGFwZUNoZWNrPUYuQ2xyU2hhcGVD'@;
put 'b2c9Ri5DbHJTaGFwZUhvbWU9Ri5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2'@;
put 'Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVVbmtub3duU3RhdHVzPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4'@;
put 'PSIxNy41OCIgY3k9IjI2LjIzIiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0LjcsMTNhNS4xOCw1LjE4LDAsMCwwLTIuMTYtMy41Niw3LjI2LDcuMjYsMCwwLDAtNS43MS0xLjA5QTExLjM0'@;
put 'LDExLjM0LDAsMCwwLDEyLDEwLjQ0LDEsMSwwLDEsMCwxMy4yNiwxMmE5LjMyLDkuMzIsMCwwLDEsMy45NC0xLjcyLDUuMjksNS4yOSwwLDAsMSw0LjE2Ljc0LDMuMjEsMy4yMSwwLDAsMSwxLjM1LDIuMTljLjMzLDIuNjktMy4xOSwzLjc1LTUuMzIsNC4xNGwtLjgyLjE1djQuMzZhMSwxLDAs'@;
put 'MCwwLDIsMFYxOS4xN0MyNC42MSwxNy43OSwyNC44OCwxNC40MSwyNC43LDEzWiIvPicpLEYuQ2xyU2hhcGVIb21lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNzEsMTcuMjlsLTE1LTE1YTEsMSwwLDAs'@;
put 'MC0xLjQxLDBsLTE1LDE1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTgsNC40MSwzMi4yOSwxOC43MWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMzJoLTVWMjJIMTNW'@;
put 'MzJIOFYxOEw2LDIwVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NmwtMi0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywxOWExLDEsMCwwLDEtLjcxLS4yOUwxOCw0'@;
put 'LjQxLDMuNzEsMTguNzFhMSwxLDAsMCwxLTEuNDEtMS40MWwxNS0xNWExLDEsMCwwLDEsMS40MSwwbDE1LDE1QTEsMSwwLDAsMSwzMywxOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTgsNy43OSw2LDE5Ljgz'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NloiLz4nKSxGLkNsclNoYXBlQ29nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMSwxMWMtMy45LDAtNywzLjEtNyw3'@;
put 'czMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdTMjIsMTEsMTguMSwxMXogTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMi44LDAsNSwyLjIsNSw1UzIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjYtMS41bDEuNC0yLjZjMC4zLTAuNiwwLjItMS40LTAuMy0xLjlsLTIuNC0yLjRjLTAuNS0wLjUtMS4zLTAuNi0xLjktMC4zbC0yLjYsMS40bC0xLjUtMC42bC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRj'@;
put 'LTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwx'@;
put 'NS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4x'@;
put 'aDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwx'@;
put 'NS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6IE0zMiwxOS40bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0x'@;
put 'LjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmww'@;
put 'LjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjQsMC41LDIuMSwwLjlsMC41LDAuM2wzLjMtMS44bDIsMmwtMS44LDMuM2wwLjMsMC41YzAuNCwwLjcsMC43'@;
put 'LDEuNCwwLjksMi4xbDAuMSwwLjVsMy42LDEuMVYxOS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjEsMThjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN3Mt'@;
put 'My4xLTctNy03QzE0LjIsMTEsMTEuMSwxNC4xLDExLjEsMTh6IE0yMy4xLDE4YzAsMi44LTIuMiw1LTUsNWMtMi44LDAtNS0yLjItNS01czIuMi01LDUtNUMyMC45LDEzLDIzLjEsMTUuMiwyMy4xLDE4eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjEtMC4zYy0wLjgsMC0xLjYtMC4yLTIuNC0wLjRjMC4zLDAuNiwwLjYsMS4zLDAuOCwxLjlsMC4xLDAuNWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwx'@;
put 'LjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEu'@;
put 'OC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAu'@;
put 'MkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS4zLDAuNSwxLjksMC44Yy0wLjMtMC44LTAuNC0xLjYtMC40LTIuNWwtMC40LTAuMmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z'@;
put 'LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs'@;
put 'MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy'@;
put 'LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy43LDE1LjRoLTUuM3YwLjFsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwt'@;
put 'MC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAu'@;
put 'Mi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy40bDEuNC0yLjNsLTAuNi0yQzIxLDIuNCwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUt'@;
put 'MS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRj'@;
put 'MCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMt'@;
put 'MC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNiwzMy45LDE1LjcsMzMu'@;
put 'NywxNS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMwLjIsMCwwLjUsMCwwLjcsMC4xYy0wLjItMC42LTAu'@;
put 'My0xLjMtMC4yLTJoLTAuNWMtMy45LDAtNywzLjEtNyw3YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdjMC0wLjktMC4yLTEuOC0wLjUtMi42aC0yLjJjMC41LDAuOCwwLjcsMS42LDAuNywyLjVDMjMuMSwyMC44LDIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAu'@;
put 'NSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNTcs'@;
put 'MTUuNzJsLTMuMzUtMWExMS42NSwxMS42NSwwLDAsMC0uOTUtMi4zM2wxLjY0LTMuMDdhLjYxLjYxLDAsMCwwLS4xMS0uNzJMMjcuNDEsNi4yYS42MS42MSwwLDAsMC0uNzItLjExTDIzLjY0LDcuNzJhMTEuNjIsMTEuNjIsMCwwLDAtMi4zNi0xbC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5'@;
put 'LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEs'@;
put 'MCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0'@;
put 'bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYz'@;
put 'LDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTIuMTIsMTIuMTIsMCwwLDAtLjQ3LTEuMzIsNy40OSw3LjQ5LDAsMCwxLTYuMTQtNi4xNiwxMS44MiwxMS44MiwwLDAsMC0xLjMzLS40OGwtMS0zLjMxQS42'@;
put 'MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3'@;
put 'bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDEx'@;
put 'LjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcy'@;
put 'bC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMi41NywxNS43MiwzMS41LDE1LjRIMjIuODVBNS41LDUuNSwwLDEsMSwxOCwxMi41YTUuNTMsNS41MywwLDAsMSwuNjUsMEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwyLjA5LTMuNjItLjg2LTIuODNBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFh'@;
put 'LjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQz'@;
put 'LjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2Eu'@;
put 'NjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAs'@;
put 'MCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy'@;
put 'dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEzLjcyLDI3LjY5LDMuMjksMTcuMjdhMSwxLDAsMCwxLDEuNDEtMS40MWw5LDlMMzEuMjksNy4yOWExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicpLEYuQ2xyU2hhcGVUaW1lcz0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjQxLDE4bDguMjktOC4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDkuNzEsOC4yOUExLDEsMCwwLDAsOC4yOSw5LjcxTDE2LjU5LDE4LDguMjksMjYuMjlhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwxOCwxOS40MWw4LjI5LDguMjlhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxLjMyYTEu'@;
put 'MywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4zLDEuMywwLDAsMCwxOCwyMS4zMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0i'@;
put 'MS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0'@;
put 'LTQuNDNabS0xLjc4LDEuOTRhMSwxLDAsMCwxLS44Ni40OUg4LjIxYTEsMSwwLDAsMS0uODgtMS40OEwxNy4wNyw4LjU1YTEsMSwwLDAsMSwxLjc2LDBsOS43NCwxNy45NEExLDEsMCwwLDEsMjguNTUsMjcuNDhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1pNMTYuNDYsMTIuNzRhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40'@;
put 'OSwwLDEsMS0zLDBaTTE4LDI2LjI1YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI2LjI1WiIvPicpLEYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'ZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwxOCwyMC4wN1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTcuOTUi'@;
put 'IGN5PSIyMy4wMiIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTEuNDksNmExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40'@;
put 'OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjUuNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNS41WiIvPicpLEYuQ2xyU2hhcGVDaGVja0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i'@;
put 'TTE2LjM0LDIzLjc0bC01LTVhMSwxLDAsMCwxLDEuNDEtMS40MWwzLjU5LDMuNTksNi43OC02Ljc4YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDE4QTEyLDEyLDAsMSwx'@;
put 'LDE4LDYsMTIsMTIsMCwwLDEsMzAsMThabS00Ljc3LTIuMTZhMS40LDEuNCwwLDAsMC0yLTJsLTYuNzcsNi43N0wxMywxNy4xNmExLjQsMS40LDAsMCwwLTIsMmw1LjQ1LDUuNDVaIi8+JyksRi5DbHJTaGFwZUluZm9DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgIGN4PSIxNy45MyIgY3k9IjExLjkiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAgZD0iTTIxLDIzSDE5VjE1SDE2YTEsMSwwLDAsMCwwLDJo'@;
put 'MXY2SDE1YTEsMSwwLDEsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCww'@;
put 'LDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwy'@;
put 'LDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPicpLEYuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3Ljk3IiBjeT0iMTAuNDUiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjEsMjVIMTlWMTQuMUgxNmExLDEsMCwwLDAsMCwy'@;
put 'aDFWMjVIMTVhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwx'@;
put 'NCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEt'@;
put 'MiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwxLjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwxLDAsMi44WiIvPicpLEYuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9KDAsbS5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBMMTUuNDksMjMuMTVsLTYtNkExLDEsMCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUuNzgsNS43OEwyNi40NywxMC42NWEx'@;
put 'LjQsMS40LDAsMSwxLDIsMloiLz4nKSxGLkNsclNoYXBlRXJyb3JTdGFuZGFyZD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWk0xNi42LDguOGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI4LjZhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjguNloiLz4n'@;
put 'KSxGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg'@;
put 'ZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcuODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0'@;
put 'LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEsMzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMxLjc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIu'@;
put 'ODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYgTDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2'@;
put 'NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAz'@;
put 'Mi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQx'@;
put 'OSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2NjkyIDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4xNywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2'@;
put 'MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjkuODVaIi8+JyksRi5DbHJTaGFwZUhlbHBJbmZvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4zOSwyNS40NWExLDEsMCwwLDAtMS4zOC4yOWMtMS40'@;
put 'MSwyLjE2LTQsNC44MS02LjMxLDUuN3MtNC4xMi41Ny00Ljg0LDBjLS4zMS0uMjctMS4xMi0xLS40My0zLjQ5LjQ2LTEuNjYsMy4zMi05LjQ4LDQtMTEuMzhsLTIuMTguMjhjLS42OSwxLjg2LTMuMjksOC44NC0zLjc2LDEwLjU4LS42OCwyLjQ5LS4zNCw0LjMsMS4wOSw1LjU2QTUuNTksNS41'@;
put 'OSwwLDAsMCwxNSwzNGE5LjUzLDkuNTMsMCwwLDAsMy40NS0uN2MyLjc5LTEuMDksNS43Mi00LjEyLDcuMjYtNi40N0ExLDEsMCwwLDAsMjUuMzksMjUuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4z'@;
put 'LDExYTQuNSw0LjUsMCwxLDAtNC41LTQuNUE0LjUsNC41LDAsMCwwLDE5LjMsMTFabTAtN2EyLjUsMi41LDAsMSwxLTIuNSwyLjVBMi41LDIuNSwwLDAsMSwxOS4zLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xMS44MSwxNWMuMDYsMCw2LjI3LS44Miw3LjczLTEsLjY1LS4xLDEuMTQsMCwxLjMuMTVzLjIxLjgtLjA3LDEuNjhjLS42MSwxLjg2LTMuNjksMTEtNC41OSwxMy43MWE4LDgsMCwwLDAsMS4yOS0uMzgsNy4zMiw3LjMyLDAsMCwwLDEuMTUtLjZDMTkuODUsMjUsMjIuMTUsMTguMSwyMi42'@;
put 'NywxNi41MnMuMzktMi43OC0uMy0zLjZhMy4xNiwzLjE2LDAsMCwwLTMuMDgtLjgzYy0xLjQzLjE1LTcuNDcuOTQtNy43MywxYTEsMSwwLDAsMCwuMjYsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjAu'@;
put 'NzUiIGN5PSI2IiByPSI0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljg0LDI2LjIzYTEsMSwwLDAsMC0xLjQuMjksMTYuNiwxNi42LDAsMCwxLTMuNTEsMy43N2MtLjMzLjI1LTEuNTYsMS4yLTIuMDgsMS0uMzYt'@;
put 'LjExLS4xNS0uODItLjA4LTEuMTJsLjUzLTEuNTdjLjIyLS42NCw0LjA1LTEyLDQuNDctMTMuMy42Mi0xLjkuMzUtMy43Ny0yLjQ4LTMuMzItLjc3LjA4LTguNTgsMS4wOS04LjcyLDEuMWExLDEsMCwwLDAsLjEzLDJzMy0uMzksMy4zMy0uNDJhLjg4Ljg4LDAsMCwxLC44NS40NCwyLjQ3LDIu'@;
put 'NDcsMCwwLDEtLjA3LDEuNzFjLS4yNiwxLTQuMzcsMTIuNTgtNC41LDEzLjI1YTIuNzgsMi43OCwwLDAsMCwxLjE4LDMsNSw1LDAsMCwwLDMuMDguODNoMGE4LjUzLDguNTMsMCwwLDAsMy4wOS0uNjJjMi40OS0xLDUuMDktMy42Niw2LjQ2LTUuNzVBMSwxLDAsMCwwLDI0Ljg0LDI2LjIzWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDI5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEs'@;
put 'MCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMiw5SDRBMSwxLDAsMCwxLDQsN0gzMmExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVVc2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwxLDAtNy03QTcsNywwLDAsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEt'@;
put 'NSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5'@;
put 'YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3'@;
put 'YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMjAsMTQuNmE1LDUsMCwxLDEsMS4yNC04LjQybDEtMS43NkE3LDcsMCwxLDAsMTgs'@;
put 'MTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgs'@;
put 'MTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4x'@;
put 'NiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYx'@;
put 'LDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTAiIHI9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEs'@;
put 'MjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLjE2LTUuNDdBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4x'@;
put 'NFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41'@;
put 'LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcs'@;
put 'NywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS41MiwyMi41'@;
put 'MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPicpLEYuQ2xyU2hhcGVGb2xkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy'@;
put 'LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIu'@;
put 'NjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTFhNy41LDcuNSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMCwxNS40VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4x'@;
put 'MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVpNNiwxMVY3aDYuNDlsMi43Miw0'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks'@;
put 'NUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1p'@;
put 'LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjMuMTMsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMu'@;
put 'MjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+'@;
put 'JyksRi5DbHJTaGFwZUZvbGRlck9wZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41Miwx'@;
put 'LDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCww'@;
put 'LDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAs'@;
put 'MCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45'@;
put 'bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRoLS4zTDI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0aDkuNDJBMy42NywzLjY3LDAsMCwx'@;
put 'LDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40Mkwx'@;
put 'NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIu'@;
put 'NTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1'@;
put 'LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40'@;
put 'SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwx'@;
put 'OSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCww'@;
put 'LDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcx'@;
put 'LDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4zMS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy'@;
put 'LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmVsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjUxLDI3Ljgz'@;
put 'QTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYz'@;
put 'LDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaTTUuMTMsMjguOTRhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0'@;
put 'LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNWE4Ljc0LDguNzQsMCwxLDEsMTcuNDcsMHY0Ljk0YTE0LjI0LDE0LjI0LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBk'@;
put 'PSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5LDcuNDQsNy40NCwwLDAsMS0yLjI0LS44NCw4Ljg5LDguODksMCwwLDEsLjQsMi42NHY0Ljk0YTE0LjI0LDE0LjI0'@;
put 'LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNINS4xM2ExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1QTguOCw4LjgsMCwwLDEsMTgsNi4zMWE4LjYxLDguNjEsMCwwLDEsNC43NiwxLjQ0QTcuNDksNy40OSww'@;
put 'LDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTgsMTAuNTgsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwx'@;
put 'LTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWEx'@;
put 'Mi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40'@;
put 'LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTUuMzIsMzJhMi42NSwyLjY1LDAsMCwwLDUuMjUsMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5QTcuNSw3LjUsMCwwLDEs'@;
put 'MjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU3LDEwLjU3LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3'@;
put 'LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVJbWFnZT0oMCxt'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsMzBWNkgzMlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNOC45MiwxNGEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjkyLDE0Wm0wLTQuNkExLjYsMS42LDAsMSwxLDcuMzMsMTEsMS42LDEuNiwwLDAsMSw4LjkyLDkuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjc4LDE1LjM3bC01LjQsNS40LTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxQTEsMSwwLDAsMCwyMi43OCwxNS4zN1oiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTMsMTFhMywzLDAsMSwwLTMsM0EzLDMsMCwwLDAsMTEuOTMsMTFabS00LjYsMGExLjYsMS42LDAsMSwxLDEuNiwxLjZBMS42LDEuNiwwLDAsMSw3LjMzLDExWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuMzgsMjAuNzdsLTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUt'@;
put 'OC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxYTEsMSwwLDAsMC0xLjQxLDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjZIMjIuNWE3LjQ5LDcuNDksMCww'@;
put 'LDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgz'@;
put 'MmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwx'@;
put 'LjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEy'@;
put 'LjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSww'@;
put 'TDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzM0gxMC42MkM1LjY3LDMzLDEsMjguMTksMSwyMy4xYTEwLDEwLDAsMCwxLDgtOS43NSwxMC4x'@;
put 'OSwxMC4xOSwwLDAsMSwyMC4zMywxLjA2QTEwLjA3LDEwLjA3LDAsMCwxLDI5LDE2LjY2YTguMjksOC4yOSwwLDAsMSw2LDhDMzUsMjkuMSwzMS4zMywzMywyNy4xNCwzM1pNMTkuMDksNi4yM2E4LjI0LDguMjQsMCwwLDAtOC4xOSw4bDAsLjg3LS44Ni4xQTcuOTQsNy45NCwwLDAsMCwzLDIz'@;
put 'LjFjMCw0LDMuNzcsNy45LDcuNjIsNy45SDI3LjE0QzMwLjIxLDMxLDMzLDI4LDMzLDI0LjY1YTYuMzEsNi4zMSwwLDAsMC01LjM3LTYuMjZsLTEuMTgtLjE4LjM5LTEuMTNBOC4xOCw4LjE4LDAsMCwwLDE5LjA5LDYuMjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDUsNy40NSwwLDAsMS0yLjEtLjU0LDgsOCwwLDAsMS0uMyw0LjE2bC0uMzksMS4xMywxLjE4LjE4YTYu'@;
put 'MzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdhOC4yNCw4LjI0LDAsMCwxLDguMTktOEE4LjEzLDguMTMsMCwwLDEsMjIuNTgs'@;
put 'N2E3LjUzLDcuNTMsMCwwLDEtLjA4LTEsNy41MSw3LjUxLDAsMCwxLC4wOS0xLjEyQTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2'@;
put 'LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNCwxMC4xNCwwLDAsMCwuMi0xLjNoLTJhOC4yOCw4LjI4LDAsMCwxLS4zNywxLjcybC0uMzksMS4xMywxLjE4LjE4'@;
put 'YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdBOC4xNiw4LjE2LDAsMCwxLDIxLDYuNDdsMS0xLjhBMTAuMTksMTAuMTks'@;
put 'MCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1'@;
put 'LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjgu'@;
put 'MTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5'@;
put 'LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ0LDcuNDQsMCwwLDEtNi42LTguNThBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMs'@;
put 'MTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9'@;
put 'IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNSwxMC4xNSwwLDAsMCwuMi0xLjI2aC03QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5'@;
put 'bDMtNS4yMUExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCww'@;
put 'LDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjha'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSww'@;
put 'LDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLEYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCww'@;
put 'LTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCww'@;
put 'LDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0'@;
put 'LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVs'@;
put 'My45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlVm1CdWc9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iMyIg'@;
put 'ZmlsbD0iI2ZmZmZmZiIgb3BhY2l0eT0iMC4xNSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTMuNzksMTQuODNhMS4wOSwxLjA5LDAsMCwwLTEuNDctLjU2LDEuMDksMS4wOSwwLDAsMC0uNTQsMS40OWwyLjQ3LDUuNGMuMzkuODUuOCwxLjI5LDEuNTcsMS4yOVM3LDIy'@;
put 'LDcuMzksMjEuMTZsMi4xNy00Ljc3YS4zMy4zMywwLDAsMSwuMzEtLjIuMzUuMzUsMCwwLDEsLjM1LjM1djQuNjFhMS4xNSwxLjE1LDAsMCwwLDEuMTQsMS4zLDEuMTcsMS4xNywwLDAsMCwxLjE3LTEuM1YxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEu'@;
put 'MTgsMS4ydjMuNzdhMS4xNywxLjE3LDAsMSwwLDIuMzIsMFYxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNiwxLjE2LDAsMSwwLDIuMzEsMFYxNi44NmEyLjY5LDIuNjksMCwwLDAtMi43OC0yLjY5LDMuNTcsMy41NywwLDAs'@;
put 'MC0yLjQ3LDEuMDUsMi43NSwyLjc1LDAsMCwwLTIuMzgtMS4wNUEzLjkzLDMuOTMsMCwwLDAsMTIsMTUuMjJhMi44MiwyLjgyLDAsMCwwLTIuMDgtMS4wNUEyLjU1LDIuNTUsMCwwLDAsNy40LDE1Ljg5TDUuODIsMTkuNjNsLTItNC44IiBmaWxsPSIjZmZmZmZmIi8+PHBhdGggZD0iTTMzLDE0'@;
put 'LjE4QTEuMTQsMS4xNCwwLDAsMCwzMS45LDE1bC0xLjE5LDMuNzNMMjkuNSwxNS4wNWExLjE4LDEuMTgsMCwwLDAtMS4xNS0uODdoLS4xYTEuMiwxLjIsMCwwLDAtMS4xNS44N2wtMS4xOSwzLjcxLTEuMTgtMy43MWExLjE1LDEuMTUsMCwwLDAtMS4xMS0uODcsMS4wOCwxLjA4LDAsMCwwLTEu'@;
put 'MTIsMS4wNywxLjY4LDEuNjgsMCwwLDAsLjEuNTRsMiw1LjdhMS4yNywxLjI3LDAsMCwwLDEuMjcsMSwxLjI0LDEuMjQsMCwwLDAsMS4yLS45M2wxLjItMy42NCwxLjIsMy42NGExLjI1LDEuMjUsMCwwLDAsMS4yNi45M0ExLjI3LDEuMjcsMCwwLDAsMzIsMjEuNUwzNCwxNS43M2ExLjc3LDEu'@;
put 'NzcsMCwwLDAsLjA4LS40OEExLjA3LDEuMDcsMCwwLDAsMzMsMTQuMThaIiBmaWxsPSIjZmZmZmZmIi8+JyksRi5DbHJTaGFwZVNlYXJjaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjMzLDUuMDVBMTAu'@;
put 'OTUsMTAuOTUsMCwxLDEsNS4zOSwxNiwxMSwxMSwwLDAsMSwxNi4zMyw1LjA1bTAtMi4wNWExMywxMywwLDEsMCwxMywxMywxMywxMywwLDAsMC0xMy0xM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM1'@;
put 'LDMzLjI5bC03LjM3LTcuNDItMS40MiwxLjQxLDcuMzcsNy40MkExLDEsMCwxLDAsMzUsMzMuMjlaIi8+JyksRi5DbHJTaGFwZVZpZXdDb2x1bW5zPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsNUg1QTIs'@;
put 'MiwwLDAsMCwzLDdWMjlhMiwyLDAsMCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nKSxGLkNsclNoYXBlQW5nbGVEb3VibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOSwxOS40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCw4LjgzLDcuNzEsMTkuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCw2LDI5LjcxLDE3LjcxQTEsMSwwLDAsMSwyOSwxOS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+JyksRi5DbHJTaGFwZUNhbGVuZGFyPSgw'@;
put 'LG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu'@;
put 'NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjIwIiB5'@;
put 'PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0'@;
put 'PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC05IiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIHg9IjIwIiB5'@;
put 'PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiBk'@;
put 'PSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgy'@;
put 'OC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI4IiB5PSIxNCIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1i'@;
put 'YWRnZWQiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTki'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEyLS1iYWRnZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMu'@;
put 'NjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgeD0iMTQi'@;
put 'IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgeD0iMjYiIHk9IjE5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xMC0tYWxlcnRlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9seWdvbiBw'@;
put 'b2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0z'@;
put 'Mi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCww'@;
put 'LDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2'@;
put 'VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41'@;
put 'LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTEwLDI2'@;
put 'SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUEx'@;
put 'Ljc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0wLTVIMjZWMTloMloiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFdmVudD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywy'@;
put 'M2w4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5'@;
put 'QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xMCwxMGEx'@;
put 'LDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAs'@;
put 'MCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAtMS40MS0xLjQxTDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEs'@;
put 'MzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0i'@;
put 'TTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu'@;
put 'NEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjI1LDZoLTRWOWEy'@;
put 'LjIsMi4yLDAsMCwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZa'@;
put 'TTI1Ljk0LDE2LjU4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0zMy42OCwxNS40SDI2LjNhMS4zNCwxLjM0LDAsMCwxLS4zNiwxLjE4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4LDctN2gtMUEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo'@;
put 'LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0z'@;
put 'LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4'@;
put 'LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wm0tNC4wNiwzLjA4LTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUV5ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4y'@;
put 'My05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44'@;
put 'LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4'@;
put 'LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwxLDE4LjA5LDIyLjg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42Miwx'@;
put 'Ny41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjks'@;
put 'OC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0i'@;
put 'Ni44NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVFeWVIaWRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43'@;
put 'OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40Miwx'@;
put 'LjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40'@;
put 'OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYy'@;
put 'LDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEuNmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4'@;
put 'LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5'@;
put 'LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSww'@;
put 'LDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTcuMDgsNi41MmExLjY4LDEuNjgsMCwwLDAsMCwyLjRMMTYuNTEsMTgsNy4xMiwyNy4wOGExLjcsMS43LDAsMCwwLDIuMzYsMi40NGgwTDIxLjQsMTgsOS40OCw2LjQ3QTEuNjksMS42OSwwLDAsMCw3LjA4LDYuNTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIgLz48cGF0aCBkPSJNMjYuNDksNWExLjcsMS43LDAsMCwwLTEuNywxLjdWMjkuM2ExLjcsMS43LDAsMCwwLDMuNCwwVjYuN0ExLjcsMS43LDAsMCwwLDI2LjQ5LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQXJyb3c9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LjY2LDE1LjYxLDE4LDYsOC4zNCwxNS42MUExLDEsMCwxLDAsOS43NSwxN0wxNyw5LjgxVjI4Ljk0YTEsMSwwLDEsMCwyLDBWOS44MUwyNi4yNSwxN2ExLDEsMCwwLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiLz4nKSxGLkNvcmVTaGFwZXM9eyJ1bmtub3duLXN0YXR1cyI6Ri5DbHJTaGFwZVVua25vd25TdGF0dXMsaG9tZTpGLkNsclNoYXBlSG9tZSxjb2c6Ri5DbHJTaGFwZUNvZyxjaGVjazpGLkNsclNoYXBlQ2hlY2ssdGltZXM6Ri5DbHJTaGFwZVRpbWVzLCJleGNsYW1hdGlv'@;
put 'bi10cmlhbmdsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGUsImV4Y2xhbWF0aW9uLWNpcmNsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlLCJjaGVjay1jaXJjbGUiOkYuQ2xyU2hhcGVDaGVja0NpcmNsZSwiaW5mby1jaXJjbGUiOkYuQ2xyU2hhcGVJbmZvQ2lyY2xlLCJp'@;
put 'bmZvLXN0YW5kYXJkIjpGLkNsclNoYXBlSW5mb1N0YW5kYXJkLCJzdWNjZXNzLXN0YW5kYXJkIjpGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkLCJlcnJvci1zdGFuZGFyZCI6Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQsIndhcm5pbmctc3RhbmRhcmQiOkYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRh'@;
put 'cmQsImhlbHAtaW5mbyI6Ri5DbHJTaGFwZUhlbHBJbmZvLGJhcnM6Ri5DbHJTaGFwZUJhcnMsdXNlcjpGLkNsclNoYXBlVXNlcixhbmdsZTpGLkNsclNoYXBlQW5nbGUsZm9sZGVyOkYuQ2xyU2hhcGVGb2xkZXIsImZvbGRlci1vcGVuIjpGLkNsclNoYXBlRm9sZGVyT3BlbixiZWxsOkYuQ2xy'@;
put 'U2hhcGVCZWxsLGltYWdlOkYuQ2xyU2hhcGVJbWFnZSxjbG91ZDpGLkNsclNoYXBlQ2xvdWQsImVsbGlwc2lzLWhvcml6b250YWwiOkYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWwsImVsbGlwc2lzLXZlcnRpY2FsIjpGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbCwiZmlsdGVyLWdyaWQi'@;
put 'OkYuQ2xyU2hhcGVGaWx0ZXJHcmlkLCJmaWx0ZXItZ3JpZC1jaXJjbGUiOkYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlLCJ2bS1idWciOkYuQ2xyU2hhcGVWbUJ1ZyxzZWFyY2g6Ri5DbHJTaGFwZVNlYXJjaCwidmlldy1jb2x1bW5zIjpGLkNsclNoYXBlVmlld0NvbHVtbnMsImFuZ2xlLWRv'@;
put 'dWJsZSI6Ri5DbHJTaGFwZUFuZ2xlRG91YmxlLGNhbGVuZGFyOkYuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpGLkNsclNoYXBlRXZlbnQsZXllOkYuQ2xyU2hhcGVFeWUsImV5ZS1oaWRlIjpGLkNsclNoYXBlRXllSGlkZSwic3RlcC1mb3J3YXJkLTIiOkYuQ2xyU2hhcGVTdGVwRm9yd2FyZDIs'@;
put 'YXJyb3c6Ri5DbHJTaGFwZUFycm93fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJob3VzZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuaG9tZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsInNldHRpbmdzIiwoMCx4LmRlc2Ny'@;
put 'aXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jb2cpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzdWNjZXNzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jaGVjaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNsb3NlIiwo'@;
put 'MCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy50aW1lcykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIndhcm5pbmciLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi10cmlhbmdsZSJdKSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEYuQ29yZVNoYXBlcywiZXJyb3IiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImluZm8iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVz'@;
put 'WyJpbmZvLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibWVudSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmFycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImF2YXRhciIsKDAseC5kZXNjcmlwdG9yQ29u'@;
put 'ZmlnKShGLkNvcmVTaGFwZXMudXNlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNhcmV0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5hbmdsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImRpcmVjdG9yeSIsKDAseC5k'@;
put 'ZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuZm9sZGVyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibm90aWZpY2F0aW9uIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5iZWxsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBl'@;
put 'cywiY29sbGFwc2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJhbmdsZS1kb3VibGUiXSkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'Ki8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlv'@;
put 'biB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPUYuY2hh'@;
put 'bmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsRi5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe3RoaXMuY2FsbGJhY2tzPUYuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sImluc3RhbmNl'@;
put 'Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uc2luZ2xlSW5zdGFuY2V8fChtLnNpbmdsZUluc3RhbmNlPW5ldyBtKSxtLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG0ucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRo'@;
put 'aXM7cmV0dXJuIHRoaXMuY2FsbGJhY2tzW2xlXT8tMT09PXRoaXMuY2FsbGJhY2tzW2xlXS5pbmRleE9mKE0pJiZ0aGlzLmNhbGxiYWNrc1tsZV0ucHVzaChNKTp0aGlzLmNhbGxiYWNrc1tsZV09W01dLGZ1bmN0aW9uKCl7dmFyIFI9Ty5jYWxsYmFja3NbbGVdLmluZGV4T2YoTSk7Ty5jYWxs'@;
put 'YmFja3NbbGVdLnNwbGljZShSLDEpLDA9PT1PLmNhbGxiYWNrc1tsZV0ubGVuZ3RoJiZkZWxldGUgTy5jYWxsYmFja3NbbGVdfX0sbS5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24obGUsTSl7dGhpcy5jYWxsYmFja3NbbGVdJiZ0aGlzLmNhbGxiYWNrc1tsZV0ubWFwKGZ1bmN0aW9u'@;
put 'KE8pe08oTSl9KX0sbX0oKTtGLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj14fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAg'@;
put 'ICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz'@;
put 'IGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmNsckljb25TVkc9dm9pZCAwO0YuY2xySWNvblNWRz1mdW5jdGlvbiBNKE8pe3ZhciBSPSIiO3JldHVybiBPLmluZGV4T2YoIi0t'@;
put 'YmFkZ2VkIik+LTEmJihSKz0iY2FuLWJhZGdlICIpLE8uaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJihSKz0iY2FuLWFsZXJ0ICIpLE8uaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYmKFIrPSJoYXMtc29saWQgIiksKFI/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJytSKyciIHZpZXdC'@;
put 'b3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6'@;
put 'JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNh'@;
put 'YmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStPKyI8L3N2Zz4ifX19KX0sMzQyMDk6ZnVuY3Rpb24oYXQpe2F0LmV4cG9ydHM9ZnVuY3Rpb24oSWUpe3ZhciBGPXt9O2Z1bmN0aW9uIGFlKHgpe2lmKEZbeF0pcmV0dXJuIEZbeF0uZXhwb3J0czt2YXIgbT1GW3hdPXtpOngsbDohMSxleHBvcnRz'@;
put 'Ont9fTtyZXR1cm4gSWVbeF0uY2FsbChtLmV4cG9ydHMsbSxtLmV4cG9ydHMsYWUpLG0ubD0hMCxtLmV4cG9ydHN9cmV0dXJuIGFlLm09SWUsYWUuYz1GLGFlLmQ9ZnVuY3Rpb24oeCxtLGxlKXthZS5vKHgsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LG0se2VudW1lcmFibGU6ITAsZ2V0'@;
put 'OmxlfSl9LGFlLnI9ZnVuY3Rpb24oeCl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KX0sYWUudD1mdW5jdGlvbih4LG0pe2lmKDEmbSYmKHg9YWUoeCkpLDgmbXx8NCZtJiYib2JqZWN0Ij09dHlwZW9mIHgmJngmJnguX19lc01vZHVsZSlyZXR1cm4geDt2YXIgbGU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihhZS5yKGxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUs'@;
put 'ImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnh9KSwyJm0mJiJzdHJpbmciIT10eXBlb2YgeClmb3IodmFyIE0gaW4geClhZS5kKGxlLE0sZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119LmJpbmQobnVsbCxNKSk7cmV0dXJuIGxlfSxhZS5uPWZ1bmN0aW9uKHgpe3ZhciBtPXgmJnguX19l'@;
put 'c01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB4LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHh9O3JldHVybiBhZS5kKG0sImEiLG0pLG19LGFlLm89ZnVuY3Rpb24oeCxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsbSl9LGFlLnA9IiIsYWUoYWUu'@;
put 'cz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAg'@;
put 'ICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJ'@;
put 'ZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQWxsU2hhcGVzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2hhcnQtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRz'@;
put 'IiksbT1hZSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKSxNPWFlKAov'@;
put 'KiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLE89YWUoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLFI9YWUoCi8qISAuL3Nv'@;
put 'Y2lhbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIiksej1hZSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLEs9YWUoCi8qISAuL3RleHQt'@;
put 'ZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksST1hZSgKLyohIC4vdHJhdmVsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiKSxrPVtsZS5Db3JlU2hhcGVzLG0uQ29t'@;
put 'bWVyY2VTaGFwZXMsTS5Fc3NlbnRpYWxTaGFwZXMsTy5NZWRpYVNoYXBlcyxSLlNvY2lhbFNoYXBlcyx6LlRlY2hub2xvZ3lTaGFwZXMsSS5UcmF2ZWxTaGFwZXMseC5DaGFydFNoYXBlcyxLLlRleHRFZGl0U2hhcGVzXSxFPXt9O0YuQWxsU2hhcGVzPUU7Zm9yKHZhciBqPTAsVj1rO2o8Vi5s'@;
put 'ZW5ndGg7aisrKXt2YXIgQj1WW2pdO2Zvcih2YXIgWSBpbiBCKUIuaGFzT3duUHJvcGVydHkoWSkmJihFW1ldPUJbWV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChFKX0sIi4vcHJvamVj'@;
put 'dHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoq'@;
put 'KiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNoYXJ0U2hhcGVzPUYuQ2xyU2hhcGVCZWxsQ3VydmU9Ri5DbHJTaGFwZVRpY2tDaGFydD1GLkNsclNoYXBlU2NhdHRlclBsb3Q9Ri5DbHJTaGFwZVBpZUNoYXJ0PUYuQ2xyU2hhcGVMaW5lQ2hhcnQ9Ri5DbHJTaGFwZUhlYXRNYXA9Ri5DbHJTaGFwZUdy'@;
put 'aWRDaGFydD1GLkNsclNoYXBlQ3VydmVDaGFydD1GLkNsclNoYXBlQ2xvdWRDaGFydD1GLkNsclNoYXBlQnViYmxlQ2hhcnQ9Ri5DbHJTaGFwZUJveFBsb3Q9Ri5DbHJTaGFwZUJhckNoYXJ0PUYuQ2xyU2hhcGVBeGlzQ2hhcnQ9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3Jp'@;
put 'cHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hh'@;
put 'cGVBeGlzQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMz'@;
put 'LjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3'@;
put 'LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1'@;
put 'IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0'@;
put 'LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4y'@;
put 'MiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBM'@;
put 'IDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2LjAw'@;
put 'NyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkg'@;
put 'MTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1'@;
put 'IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjgu'@;
put 'MyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMx'@;
put 'IDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg'@;
put 'TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBj'@;
put 'bHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2'@;
put 'IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy'@;
put 'dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43'@;
put 'OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4'@;
put 'LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwg'@;
put 'MzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLEYu'@;
put 'Q2xyU2hhcGVCYXJDaGFydD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpN'@;
put 'NCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8'@;
put 'cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2'@;
put 'IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9'@;
put 'Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcg'@;
put 'MTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM'@;
put 'IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy'@;
put 'IDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYg'@;
put 'MjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUg'@;
put 'MjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3'@;
put 'IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2'@;
put 'IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBM'@;
put 'IDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAy'@;
put 'NiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAy'@;
put 'MyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAy'@;
put 'Ni44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQu'@;
put 'ODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3'@;
put 'LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYg'@;
put 'TCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIu'@;
put 'OTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQg'@;
put 'TCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxGLkNsclNoYXBlQm94UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1'@;
put 'SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40'@;
put 'IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5'@;
put 'IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIEwgMTkgMjQgWiBNIDIwLjYgMTEuNiBMIDI3LjQgMTEuNiBMIDI3LjQgMTcuMiBMIDIwLjYgMTcuMiBMIDIwLjYgMTEuNiBaIE0gMjcuNCAyMi40IEwgMjAuNiAyMi40IEwgMjAuNiAxOC44IEwgMjcuNCAxOC44IEwgMjcuNCAyMi40IFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMw'@;
put 'LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0'@;
put 'IFogTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBaIE0gMjEgMTIgTCAyNyAxMiBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIg'@;
put 'MjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYg'@;
put 'TCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMTAgTCAyMy43MjggMTAgQyAyNC4xMDUgMTAuNTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIwLjYgMTEuNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTIuOTg3IEMgMjcuOTA5IDEz'@;
put 'LjE3NyAyOC40NDUgMTMuMzEzIDI5IDEzLjM4NyBMIDI5IDI0IEwgMTkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5c'@;
put 'biAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYz'@;
put 'MyAxMCBMIDE5IDEwIEwgMTkgMjQgTCAyOSAyNCBMIDI5IDEzLjQyNyBDIDI5LjEwMyAxMy40NCAyOS4yMDYgMTMuNDUxIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAx'@;
put 'MiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDIxIDEyIEwgMjUuNDcyIDEyIEMgMjUuOTQgMTIuMzUyIDI2LjQ1MiAxMi42NSAyNyAxMi44ODUgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEg'@;
put 'MTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwg'@;
put 'NCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQg'@;
put 'MTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAyNCBMIDE5IDI0IEwgMTkgMTUuMzQ1IEMg'@;
put 'MTkuMDIxIDE1LjM0OCAyMC42IDE1LjM2IDIwLjYgMTUuMzYgTCAyMC42IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDE1LjM2IEwgMjkgMTUuMzU3IEwgMjkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBMIDI3LjQgMTguOCBaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAy'@;
put 'MS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0'@;
put 'LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl'@;
put 'cnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDE5IDEwIEwgMTkgMTAuMDQ4IEwgMTcuNjI1IDEyLjM5NSBD'@;
put 'IDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAx'@;
put 'NCBMIDE1IDE0IFogTSAyNyAxNyBMIDIxIDE3IEwgMjEgMTUuMzU3IEwgMjcgMTUuMzU3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xy'@;
put 'LWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAz'@;
put 'NS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLG0u'@;
put 'Y2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1'@;
put 'IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4z'@;
put 'NDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3'@;
put 'LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBD'@;
put 'IDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAx'@;
put 'My40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUg'@;
put 'MjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMg'@;
put 'MTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0'@;
put 'IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2'@;
put 'LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAy'@;
put 'OSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAy'@;
put 'Mi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBa'@;
put 'Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2'@;
put 'LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBa'@;
put 'IE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1'@;
put 'NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAy'@;
put 'MS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4'@;
put 'PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMw'@;
put 'LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEu'@;
put 'NzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3'@;
put 'IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAx'@;
put 'OCAyMCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBM'@;
put 'IDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4z'@;
put 'NDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAx'@;
put 'MSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDExLjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDEx'@;
put 'LjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIz'@;
put 'IEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5'@;
put 'LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4'@;
put 'NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAy'@;
put 'MS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNC41NzkgMTUuMzU3IEMgMjMuNjM5IDE1Ljg2MyAyMyAxNi44NTcgMjMgMTggQyAyMyAx'@;
put 'OS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2Ljg1NyAyOC4zNjEgMTUuODYzIDI3LjQyMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMg'@;
put 'MTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1'@;
put 'NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy'@;
put 'Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku'@;
put 'MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUNsb3VkQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0'@;
put 'QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAx'@;
put 'NS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1'@;
put 'OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDIwLjM4OCAxNy43NjUgMjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjgg'@;
put 'MjIgWiBNIDI1IDIwLjYgQyAyNC4yMjcgMjAuNiAyMy42IDIxLjIyNyAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI3IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNyAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEw'@;
put 'NSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEu'@;
put 'ODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAxMS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAxMC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1'@;
put 'IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41'@;
put 'NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQg'@;
put 'MzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMx'@;
put 'NCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAy'@;
put 'NC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1'@;
put 'IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iNyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu'@;
put 'ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIz'@;
put 'Ljk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAy'@;
put 'MiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44'@;
put 'OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1'@;
put 'LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuMDQ5IDEwLjY3OSAxNi40NTMgOS40OTIgMTguOTU2IDEwLjEyNCBMIDE4LjAwOCAxMS43NDEgQyAxNi4xOCAxMS41MTggMTMuNjk1IDEyLjU3OCAxMS42'@;
put 'MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDE5LjIyOCAxOC45MjUgMjAuMjM3IDE2Ljk5OCAyMC40NTYgMTUuMzU3IEwgMjIuMjIgMTUuMzU3IEMgMjIuMDA2IDE3'@;
put 'LjQ3NyAyMC44MzggMTkuODYxIDE4Ljg0OSAyMS44NDkgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUg'@;
put 'MjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40'@;
put 'IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQg'@;
put 'MTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQg'@;
put 'WiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAy'@;
put 'Ljg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTguOTU2IDEwLjEyNCBDIDE2LjQ1MyA5LjQ5MiAxMy4wNDkgMTAuNjc5IDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkg'@;
put 'QyAyMC44MzggMTkuODYxIDIyLjAwNiAxNy40NzcgMjIuMjIgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42'@;
put 'NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45Mjgg'@;
put 'MjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5'@;
put 'LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1'@;
put 'IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9w'@;
put 'YXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2'@;
put 'LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1'@;
put 'LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAx'@;
put 'NC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAu'@;
put 'OTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45'@;
put 'NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAy'@;
put 'Mi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAg'@;
put 'PHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIgNi4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcu'@;
put 'ODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAxOC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1'@;
put 'LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAxNi40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDEx'@;
put 'LjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5'@;
put 'NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMyAxMiBDIDE0Ljgx'@;
put 'NyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0'@;
put 'IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2'@;
put 'IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2'@;
put 'IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4y'@;
put 'IDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAy'@;
put 'OS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4y'@;
put 'MDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUg'@;
put 'MjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0'@;
put 'OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAy'@;
put 'IDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE3LjQ3NiAxMi42MTIgMTcuMzc5IDEyLjg0MyAxNy4zMyAxMy4wNzcgQyAxNy4yNjIgMTIuOTQ4IDE3LjE5MiAxMi44MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5'@;
put 'NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDExIEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBMIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTku'@;
put 'ODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC42NCAxNi41OTggMTguMzg1IDE1Ljc0'@;
put 'NCAxOC4xNDcgMTUuMDQ0IEMgMTguNDA3IDE1LjIxNSAxOC43MTcgMTUuMzI2IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMz'@;
put 'LjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4n'@;
put 'KSxGLkNsclNoYXBlR3JpZENoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwx'@;
put 'NSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoi'@;
put 'Lz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4g'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDMyIDYgQyAzMy4xMDUgNiAzNCA2Ljg5NSAzNCA4IEwgMzQgMTUg'@;
put 'QyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD'@;
put 'IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwg'@;
put 'MTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkgQyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMS1hbGVydGVkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1'@;
put 'LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtYWxlcnRlZCIg'@;
put 'ZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC1hbGVydGVkIiBk'@;
put 'PSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk'@;
put 'IGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4w'@;
put 'MzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUg'@;
put 'MTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4wMTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4z'@;
put 'NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcgQyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcgWiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3'@;
put 'IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkg'@;
put 'MjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAw'@;
put 'NCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIy'@;
put 'LjU5IDYuMDU2IEMgMjIuNTkgNi43MjkgMjIuNjggNy4zODEgMjIuODQ4IDggTCAyMSA4IEwgMjEgMTUgTCAzMiAxNSBMIDMyIDEzLjE3NSBDIDMyLjcxNyAxMi45NzIgMzMuMzg5IDEyLjY2NCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8'@;
put 'Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg'@;
put 'ZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2'@;
put 'LjA1NiBDIDIyLjU5IDEwLjE0MSAyNS45MDEgMTMuNDUyIDI5Ljk4NiAxMy40NTIgQyAzMS40NjYgMTMuNDUyIDMyLjg0NCAxMy4wMTggMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1'@;
put 'IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAz'@;
put 'MiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2'@;
put 'IiByPSI1Ii8+JyksRi5DbHJTaGFwZUhlYXRNYXA9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMx'@;
put 'IDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDI4IDEwIEwgMjggMjYgTCA4IDI2IFogTSA5LjYg'@;
put 'MjQgTCAxNC4xIDI0IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDI2IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAy'@;
put 'NiAxNy4yIFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4z'@;
put 'MzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+'@;
put 'XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDEyLjI4NyBDIDI2LjYxMSAxMi42NzkgMjcuMjg0IDEyLjk4MyAyOCAxMy4xODIgTCAyOCAy'@;
put 'NiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAxMS42IEwgMTUuNyAx'@;
put 'Ny4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBa'@;
put 'Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDE5LjAyOCAxMCBMIDE4LjA5MSAxMS42IEwgMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxNS4zNTcgTCAyMS45IDE1LjM1NyBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxNS4zNTcgTCAyOCAxNS4zNTcg'@;
put 'TCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAyNCBMIDIw'@;
put 'LjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2'@;
put 'OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQg'@;
put 'NyBaIE0gOCAyNiBMIDI4IDI2IEwgMjggMTAgTCA4IDEwIFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAy'@;
put 'NiAxMiBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAz'@;
put 'NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwg'@;
put 'MjggMTMuMjMyIEMgMjguNDIxIDEzLjM0NSAyOC44NTkgMTMuNDIyIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkg'@;
put 'TCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI1LjU4NCAxMiBDIDI1LjcxOSAxMi4xIDI1Ljg1OCAxMi4xOTYgMjYgMTIuMjg3IFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAx'@;
put 'NCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAg'@;
put 'TCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3'@;
put 'IEwgMjIgMTUuMzU3IEwgMjYgMTUuMzU3IFogTSAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgTCAxNy44NTYgMTIgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3'@;
put 'IEwgMjAgMTUuMzU3IFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAx'@;
put 'MS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDEx'@;
put 'LjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBa'@;
put 'IE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMw'@;
put 'LjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcG9seWdvbj5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIg'@;
put 'NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk2IDMzLjEwNSA1IDMyIDUgWiBNIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTku'@;
put 'MDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuNjUgMTMgTCAzMS4zNSAxNC4yOCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMy'@;
put 'IDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMx'@;
put 'IEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAy'@;
put 'MS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BvbHlnb24+XG4gIDxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzAu'@;
put 'MzIgMTMuNDggTCAzMS4zOCAxNC4yOCBMIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuMzEgMTMuNDYgQyAyNS4wNSAxMy4xIDIxLjk2OSA5LjIz'@;
put 'MyAyMi41NyA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgMTIuMzQgQyAzMi44OTUgMTMuMDM2IDMxLjYyNiAxMy40MjkgMzAuMzIgMTMuNDggWiI+PC9w'@;
put 'YXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMy'@;
put 'IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUuNjIgMTUuMjIyIEwgOS42MDIgMjMuOTY4IEwgNS41NSAyMC4zODQgTCA2LjYxIDE5LjE4NiBMIDkuMzA4IDIxLjU3MiBMIDE1LjYzNCAxMi4zOCBMIDIyLjM4NCAyMi4zOTUgTCAyNy43MTcgMTUuMzQ4IEwg'@;
put 'MjkuNzI0IDE1LjM0OCBMIDIyLjMwOCAyNS4xNDUgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5'@;
put 'IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUg'@;
put 'MTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjcuNDUyIDE1LjM1NyBMIDIyLjM4IDIyLjA2IEwgMTUuNjMgMTIgTCA5LjI4IDIxLjI4IEwgNi43NSAxOS4wNCBMIDUu'@;
put 'NDIgMjAuNTMgTCA5LjY1IDI0LjI4IEwgMTUuNjEgMTUuNTYgTCAyMi4yOCAyNS41IEwgMjkuOTU5IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi'@;
put 'IGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEu'@;
put 'OTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZVBpZUNoYXJ0PSgwLG0uY2xySWNvblNWRyko'@;
put 'J1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQg'@;
put 'NyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMu'@;
put 'NDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIz'@;
put 'LjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42'@;
put 'IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg'@;
put 'MzEgQyAzMiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBD'@;
put 'IDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM'@;
put 'IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy'@;
put 'IDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBM'@;
put 'IDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQg'@;
put 'MjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4x'@;
put 'OTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMg'@;
put 'MzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAz'@;
put 'Mi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4'@;
put 'IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAy'@;
put 'OSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBN'@;
put 'IDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI3IDE3IEwgMTkgMTcgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDE5LjA0MyAxNS4zNDkgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAx'@;
put 'IDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNi44MzEgMTUuMzU3IEMgMjYuOTQyIDE1Ljg4NyAyNyAxNi40MzcgMjcgMTcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2'@;
put 'IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1'@;
put 'NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAy'@;
put 'IDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDE3IEwgMjcgMTcgQyAyNyAxNi40MzcgMjYuOTQyIDE1Ljg4NyAyNi44MzEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBM'@;
put 'IDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2'@;
put 'OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVTY2F0dGVy'@;
put 'UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMx'@;
put 'IDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjEx'@;
put 'MSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5'@;
put 'MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBD'@;
put 'IDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9'@;
put 'Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcg'@;
put 'MTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBD'@;
put 'IDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAy'@;
put 'Ny41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41'@;
put 'ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45'@;
put 'MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMx'@;
put 'IDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45'@;
put 'NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAu'@;
put 'OTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAx'@;
put 'NC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44'@;
put 'MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4'@;
put 'LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg'@;
put 'MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42Mzcg'@;
put 'MjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4z'@;
put 'NzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAy'@;
put 'Mi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu'@;
put 'NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z'@;
put 'NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1'@;
put 'LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYg'@;
put 'MTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEz'@;
put 'OSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1LjE3'@;
put 'NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAy'@;
put 'NC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIg'@;
put 'MjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUg'@;
put 'MjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUu'@;
put 'NDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4'@;
put 'MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAy'@;
put 'Ljg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu'@;
put 'OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx'@;
put 'My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5'@;
put 'IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42'@;
put 'MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw'@;
put 'Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w'@;
put 'ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg'@;
put 'MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu'@;
put 'NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5'@;
put 'MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBj'@;
put 'eT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0g'@;
put 'OS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42'@;
put 'NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4w'@;
put 'NjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAx'@;
put 'OS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYz'@;
put 'NiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQu'@;
put 'ODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQu'@;
put 'MDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAy'@;
put 'Ny45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41'@;
put 'OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMu'@;
put 'MDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAx'@;
put 'Ny42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu'@;
put 'OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx'@;
put 'My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5'@;
put 'IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42'@;
put 'MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw'@;
put 'Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w'@;
put 'ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg'@;
put 'MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu'@;
put 'NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5'@;
put 'MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44'@;
put 'NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1'@;
put 'IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxG'@;
put 'LkNsclNoYXBlVGlja0NoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIg'@;
put 'MzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2IDI1IEwgOCAy'@;
put 'NSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40'@;
put 'NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAz'@;
put 'MSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMg'@;
put 'MjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg'@;
put 'MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg'@;
put 'WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIw'@;
put 'IDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAyNSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxjaXJjbGUg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0'@;
put 'IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDgg'@;
put 'QyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAy'@;
put 'MyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBM'@;
put 'IDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBM'@;
put 'IDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQg'@;
put 'MTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUg'@;
put 'TCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMg'@;
put 'MjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAyNS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEw'@;
put 'IDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQg'@;
put 'MTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4w'@;
put 'MDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxGLkNsclNoYXBlQmVsbEN1cnZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAs'@;
put 'MSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywxMmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxG'@;
put 'LkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6Ri5DbHJTaGFwZUF4aXNDaGFydCwiYmFyLWNoYXJ0IjpGLkNsclNoYXBlQmFyQ2hhcnQsImJ1YmJsZS1jaGFydCI6Ri5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6Ri5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpG'@;
put 'LkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6Ri5DbHJTaGFwZUdyaWRDaGFydCwibGluZS1jaGFydCI6Ri5DbHJTaGFwZUxpbmVDaGFydCwicGllLWNoYXJ0IjpGLkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOkYuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6'@;
put 'Ri5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6Ri5DbHJTaGFwZUJveFBsb3QsImhlYXQtbWFwIjpGLkNsclNoYXBlSGVhdE1hcCwiYmVsbC1jdXJ2ZSI6Ri5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAs'@;
put 'eC5kZXNjcmlwdG9yQ29uZmlnKShGLkNoYXJ0U2hhcGVzWyJsaW5lLWNoYXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAq'@;
put 'KiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db21tZXJjZVNoYXBlcz1GLkNsclNoYXBlRmFjdG9yeT1GLkNsclNoYXBlRW1wbG95ZWU9Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Ri5DbHJTaGFwZVJ1YmxlPUYuQ2xyU2hhcGVQZXNvPUYuQ2xyU2hhcGVDb2luQmFnPUYuQ2xyU2hhcGVCaXRj'@;
put 'b2luPUYuQ2xyU2hhcGVZZW49Ri5DbHJTaGFwZVdvbj1GLkNsclNoYXBlUnVwZWU9Ri5DbHJTaGFwZVBvdW5kPUYuQ2xyU2hhcGVFQ2hlY2s9Ri5DbHJTaGFwZURvbGxhckJpbGw9Ri5DbHJTaGFwZUJhbms9Ri5DbHJTaGFwZUNyZWRpdENhcmQ9Ri5DbHJTaGFwZURvbGxhcj1GLkNsclNoYXBl'@;
put 'RXVybz1GLkNsclNoYXBlU3RvcmU9Ri5DbHJTaGFwZVdhbGxldD1GLkNsclNoYXBlU2hvcHBpbmdDYXJ0PUYuQ2xyU2hhcGVQaWdneUJhbms9Ri5DbHJTaGFwZVNob3BwaW5nQmFnPUYuQ2xyU2hhcGVDYWxjdWxhdG9yPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3It'@;
put 'Y29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlQ2Fs'@;
put 'Y3VsYXRvcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk04LDMyVjRIMjhWMzJa'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEyLDhIMjUuNjdWNkgxMWExLDEsMCwwLDAtMSwxdjQuNjdoMloiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiBwb2ludHM9IjEyIDE2IDEwIDE2IDEwIDE4IDE0IDE4IDE0IDE0IDEyIDE0IDEyIDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNCAxNiAyMiAxNiAyMiAxOCAyNiAxOCAyNiAx'@;
put 'NCAyNCAxNCAyNCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHBvaW50cz0iMTggMTYgMTYgMTYgMTYgMTggMjAgMTggMjAgMTQgMTggMTQgMTggMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBwb2ludHM9IjEyIDIyIDEwIDIyIDEwIDI0IDE0IDI0IDE0IDIwIDEyIDIwIDEyIDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgcG9pbnRzPSIyNCAy'@;
put 'MiAyMiAyMiAyMiAyNCAyNiAyNCAyNiAyMCAyNCAyMCAyNCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHBvaW50cz0iMTggMjIgMTYgMjIgMTYgMjQgMjAgMjQgMjAgMjAgMTggMjAgMTggMjIiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiBwb2ludHM9IjEyIDI4IDEwIDI4IDEwIDMwIDE0IDMwIDE0IDI2IDEyIDI2IDEyIDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMTAiIHBvaW50cz0iMjQgMjggMjIgMjggMjIgMzAgMjYgMzAgMjYgMjYgMjQgMjYgMjQgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgcG9pbnRzPSIxOCAyOCAxNiAyOCAxNiAzMCAyMCAzMCAy'@;
put 'MCAyNiAxOCAyNiAxOCAyOCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMiwyOEgxMFYy'@;
put 'NmgyWm0wLTZIMTBWMjBoMlptMC02SDEwVjE0aDJabTcsMTJIMTdWMjZoMlptMC02SDE3VjIwaDJabTAtNkgxN1YxNGgyWm03LDEySDI0VjI2aDJabTAtNkgyNFYyMGgyWm0wLTZIMjRWMTRoMlptMC03SDEwVjVIMjZaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQmFnPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUsMTJWOS4wNWE3LDcsMCwxLDAtMTQsMHY3YTEsMSwwLDAsMCwyLDBWMTRoOFYxMkgxM1Y5LjA1YTUsNSwwLDEsMSwxMCwwVjE2YTEsMSwwLDEsMCwyLDBWMTRoNVYzMkg2VjE0SDlWMTJI'@;
put 'NFYzMi4wOUExLjkxLDEuOTEsMCwwLDAsNS45MSwzNEgzMC4wOUExLjkxLDEuOTEsMCwwLDAsMzIsMzIuMDlWMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTMsOS4yMmE1LDUsMCwxLDEsMTAsMFYxMmgyVjkuMjJh'@;
put 'Nyw3LDAsMSwwLTE0LDBWMTJoMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNSwxMnYzLjFhMSwxLDAsMSwxLTIsMFYxMkgxM3YzLjFhMSwxLDAsMCwxLTIsMFYxMkg0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs'@;
put 'MCwwLDItMlYxMloiLz4nKSxGLkNsclNoYXBlUGlnZ3lCYW5rPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNzIsMTAuNDdhMTEuNjUsMTEuNjUsMCwwLDAtNi4zMS41MkEuOC44LDAsMSwwLDE0LDEyLjQ4'@;
put 'LDEwLjExLDEwLjExLDAsMCwxLDE5LjQ0LDEyYS44LjgsMCwxLDAsLjI4LTEuNTdaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjUuMzgiIGN5PSIxNi43MSIgcj0iMS4zNiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNS41MSwxOC42M2ExLDEsMCwwLDAtLjg0LS40NCwzLjQyLDMuNDIsMCwwLDEtMi4wOS0xLjEyLDE3LjM1LDE3LjM1LDAsMCwxLTIuNjMtMy43OGwyLjg4LTQuNUExLjg5LDEuODksMCwwLDAsMzMsN2Ex'@;
put 'Ljc3LDEuNzcsMCwwLDAtMS4zMy0xLDEwLjEyLDEwLjEyLDAsMCwwLTUuMzkuNzUsMTIuNzIsMTIuNzIsMCwwLDAtMi43MiwxLjYzLDE2Ljk0LDE2Ljk0LDAsMCwwLTUuMTYtMS4zOUMxMS4zMSw2LjMsNC44MywxMC45LDQsMTdINGEyLjU2LDIuNTYsMCwwLDEtMS4zOC0xLjUzLDEuODEsMS44'@;
put 'MSwwLDAsMSwuMTQtMS40LDEuMTksMS4xOSwwLDAsMSwuNDMtLjQzLDEuMDgsMS4wOCwwLDAsMC0xLjEyLTEuODVBMy4zMSwzLjMxLDAsMCwwLC45MSwxM2E0LDQsMCwwLDAtLjMzLDMuMDhBNC43Niw0Ljc2LDAsMCwwLDMsMTguOTVsLjkyLjQ2YTE3LjU4LDE3LjU4LDAsMCwwLDEuODIsN2wu'@;
put 'MTcuMzhBMjMsMjMsMCwwLDAsOS4yLDMxLjg4YTEsMSwwLDAsMCwuNzUuMzRoNC41MmExLDEsMCwwLDAsLjkyLTEuMzhMMTUsMjkuOTRsMS4xOC4xM2EyMC4zMywyMC4zMywwLDAsMCw0LDBjLjM3LjYuNzcsMS4yLDEuMjEsMS43OWExLDEsMCwwLDAsLjguNDFoNC4zNGExLDEsMCwwLDAsLjky'@;
put 'LTEuMzljLS4xNy0uNC0uMzQtLjgzLS40Ny0xLjItLjE4LS41My0uMzItMS0uNDMtMS40NUExMy4xOCwxMy4xOCwwLDAsMCwyOS41NiwyNmExMi41LDEyLjUsMCwwLDAsMywwLDEsMSwwLDAsMCwuNzgtLjYybDIuMjYtNS44MUExLDEsMCwwLDAsMzUuNTEsMTguNjNabS0zLjc4LDUuNDRhMTEu'@;
put 'MzcsMTEuMzcsMCwwLDEtMi4zNS0uMTFoMGE4LjIsOC4yLDAsMCwxLTIuNTMtLjg3LDEsMSwwLDAsMC0uOTMsMS43NywxMS43MiwxMS43MiwwLDAsMCwxLjI5LjU4LDgsOCwwLDAsMS0xLjgsMS4xNmwtMS4wNi40OHMuNDksMi4xOS44MiwzLjE2SDIyLjc5Yy0uMjQtLjM0LTEuNDUtMi4zNi0x'@;
put 'LjQ1LTIuMzZsLS42Ny4wOWExOC41MywxOC41MywwLDAsMS00LjI1LjEyYy0uNjYtLjA2LTEuNzYtLjItMi42Mi0uMzVsLTEuNTUtLjI3cy42MywyLjQzLjc1LDIuNzR2MEgxMC40MkEyMC41NywyMC41NywwLDAsMSw3Ljc2LDI2bC0uMTgtLjM5QTE0LjYyLDE0LjYyLDAsMCwxLDYsMTcuNDhj'@;
put 'LjU0LTUuMTksNi4xMi05LjExLDEyLjE5LTguNTRhMTUuNDcsMTUuNDcsMCwwLDEsNS4wOCwxLjQ4bC42Mi4yOS41LS40N0ExMC4yOSwxMC4yOSwwLDAsMSwyNyw4LjU0YTguMjUsOC4yNSwwLDAsMSw0LS42NWwtMy4zOCw1LjI5LjI1LjVoMGEyMS4xNiwyMS4xNiwwLDAsMCwzLjMxLDQuODQs'@;
put 'Ni40OSw2LjQ5LDAsMCwwLDIuMTQsMS4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNSwxOC44N0E1LjgzLDUuODMsMCwwLDEsMzMsMTcuNjFhMjEuNjMsMjEuNjMsMCwwLDEtMy4yOS00Ljg0bDMuMzktNS4yOWEu'@;
put 'OS45LDAsMCwwLS41NC0xLjM4LDkuNjcsOS42NywwLDAsMC01LjEzLjcyLDEyLDEyLDAsMCwwLTMuMTMsMkExNy4zNywxNy4zNywwLDAsMCwxOC42LDcuMTVDMTEuOCw2LjUyLDUuMjcsMTAuOSw0LjU0LDE3bC0uMTQtLjA3QTIuNzYsMi43NiwwLDAsMSwyLjksMTUuMjlhMiwyLDAsMCwxLC4x'@;
put 'NS0xLjU1LDEuMzIsMS4zMiwwLDAsMSwuNDctLjQ4LDEuMDgsMS4wOCwwLDEsMC0xLjEyLTEuODUsMy40NSwzLjQ1LDAsMCwwLTEuMjMsMS4yNUE0LjE2LDQuMTYsMCwwLDAsLjg0LDE1LjlhNSw1LDAsMCwwLDIuNTcsM2wxLC41NGExOC42MiwxOC42MiwwLDAsMCwyLDcuMywyMywyMywwLDAs'@;
put 'MCwzLDQuNzksMSwxLDAsMCwwLC44LjM4aDMuNjFhLjUyLjUyLDAsMCwwLC40LS43NUwxNCwzMC4zOGExMSwxMSwwLDAsMS0uMzMtMS4xOGMuOTEuMTYsMi4wOC4zMSwyLjg3LjM4YTIwLjA3LDIwLjA3LDAsMCwwLDMuMTIsMGMuMzkuNy43OSwxLjMzLDEuMTUsMS44NWEuOTMuOTMsMCwwLDAs'@;
put 'Ljc3LjQxaDMuMTFhLjY1LjY1LDAsMCwwLC42MS0uODVjLS4yMy0uNzQtLjUzLTEuNzUtLjcxLTIuMzdhMTUuOSwxNS45LDAsMCwwLDMuNzUtMS43NmMuMTYtLjExLjMyLS4yNi40OC0uMzlhMTMuNzcsMTMuNzcsMCwwLDEtMi40Mi0xLC44LjgsMCwwLDEsLjc0LTEuNDIsMTEuNjQsMTEuNjQs'@;
put 'MCwwLDAsMy4xOCwxLjEsMTMuMzEsMTMuMzEsMCwwLDAsMi42OC4xMiwxLDEsMCwwLDAsLjktLjY2bDEuNzMtNC40NEExLDEsMCwwLDAsMzUsMTguODdaTTEzLjc5LDExLjU5YS44Ni44NiwwLDAsMS0uMy4wNS44NS44NSwwLDAsMS0uMy0xLjY0LDEyLjQxLDEyLjQxLDAsMCwxLDYuNjktLjU1'@;
put 'Ljg1Ljg1LDAsMSwxLS4zLDEuNjdBMTAuNzUsMTAuNzUsMCwwLDAsMTMuNzksMTEuNTlabTEyLjUyLDYuMTJhMS40NCwxLjQ0LDAsMSwxLDEuNDQtMS40NEExLjQ0LDEuNDQsMCwwLDEsMjYuMzIsMTcuNzJaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQ2FydD0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjA4LDUuMzdBMSwxLDAsMCwwLDMyLjMxLDVIMTEuNDlsLjY1LDJIMzFMMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVM'@;
put 'OS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDMuMTctMTRBMSwxLDAsMCwwLDMzLjA4LDUu'@;
put 'MzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwLjcxIDcgMjEuODcgNSAxMS40'@;
put 'OSA1IDEyLjE0IDcgMjAuNzEgNyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMTUsMTUuNCwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42'@;
put 'MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEs'@;
put 'MCwwLDAsMS0uNzhsMS4wOS00LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx'@;
put 'My4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTcsN2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDExLjQ5bC42NSwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVsLS40MiwwTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2'@;
put 'LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjU3LTYuOTFBNy41MSw3LjUxLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+'@;
put 'XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xLDYuMzlBMSwxLDAsMCwwLDMyLjMxLDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNB'@;
put 'Mi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMy4yLTEzQTEsMSwwLDAsMCwzMy4xLDYuMzlaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUi'@;
put 'IGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDkuMjFMOC43Niw0LjU3YTEsMSww'@;
put 'LDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYt'@;
put 'MWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuMTktNC44NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxj'@;
put 'aXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDku'@;
put 'OTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjcxLTdBNy40OSw3LjQ5LDAsMCwxLDMwLDEz'@;
put 'LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1p'@;
put 'LWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVXYWxsZXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgzMVY5YTEsMSwwLDAsMC0xLTFINmExLDEsMCwwLDEtMS0uODJWNi44MkExLDEsMCwwLDEsNiw2SDI5'@;
put 'LjU4YTEsMSwwLDAsMCwwLTJINkEzLDMsMCwwLDAsMyw3YTMuMDgsMy4wOCwwLDAsMCwwLC4zNlYyNy45M0E0LjEsNC4xLDAsMCwwLDcuMTMsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNWgxYTEsMSwwLDAsMCwxLTFWMTZBMSwxLDAsMCwwLDMyLDE1Wk0yOSwzMEg3LjEzQTIuMTEsMi4xMSwwLDAs'@;
put 'MSw1LDI3LjkzVjkuODhBMy4xMSwzLjExLDAsMCwwLDYsMTBIMjl2NUgyMmE1LDUsMCwwLDAsMCwxMGg3Wm0yLTdIMjJhMywzLDAsMCwxLDAtNkgzMVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMy4wMSIg'@;
put 'Y3k9IjIwIiByPSIxLjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi45NCwxNEgzMVY5YTEsMSwwLDAsMC0xLTFINkExLDEsMCwwLDEsNSw3SDVWN0ExLDEsMCwwLDEsNiw2SDI5LjZhMSwxLDAsMSwwLDAtMkg2QTIu'@;
put 'OTQsMi45NCwwLDAsMCwzLDYuODh2MjFBNC4xMyw0LjEzLDAsMCwwLDcuMTUsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNmgxLjk0YS45My45MywwLDAsMCwxLS45MXYtMTBBMS4wOCwxLjA4LDAsMCwwLDMyLjk0LDE0Wk0zMiwyNGwtOC41OCwwYTMuODcsMy44NywwLDAsMS0zLjczLTQsMy44Nywz'@;
put 'Ljg3LDAsMCwxLDMuNzMtNEwzMiwxNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjI0LjA0IiBjeT0iMTkuOTIiIHI9IjEuNSIvPicpLEYuQ2xyU2hhcGVTdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCww'@;
put 'LDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0zMCwxOC4xM0EyLjY4LDIuNjgsMCww'@;
put 'LDEsMjcuODIsMTdMMjcsMTUuODgsMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OCwyMC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDE1LDE1Ljg4LDE0LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OCw4LjE4LDE3QTIuNjgsMi42OCwwLDAs'@;
put 'MSw2LDE4LjEzYTIuNjQsMi42NCwwLDAsMS0yLS44OFYxNC4xN0w4LjA4LDZIMjcuOTJMMzIsMTQuMTZ2LjY3bDAsMi4zOUEyLjY3LDIuNjcsMCwwLDEsMzAsMTguMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjgs'@;
put 'MzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIs'@;
put 'NEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAs'@;
put 'NC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMTUsMTQuNHYxLjUyTDE0LjE4LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OFYxNC40TDExLjU5LDZIMTZabTEy'@;
put 'LDEuNDhMMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OGwwLDBWMTQuNEwyMCw2aDQuNDVMMjcsMTQuNFoiLz4nKSxGLkNsclNoYXBlRXVybz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i'@;
put 'TTMxLjQ4LDI4LjQ5YTEsMSwwLDAsMC0xLjM4LS4zMkExMiwxMiwwLDAsMSwxMi40NSwyMkgyNC4xNmExLDEsMCwwLDAsMC0ySDExLjkzYTExLjE2LDExLjE2LDAsMCwxLDAtNEgyNC4xNmExLDEsMCwwLDAsMC0ySDEyLjQ1QTEyLDEyLDAsMCwxLDMwLjA2LDcuOGExLDEsMCwwLDAsMS4wNi0x'@;
put 'LjdBMTQsMTQsMCwwLDAsMTAuMzQsMTRIMy41NGExLDEsMCwxLDAsMCwySDkuOTFhMTQsMTQsMCwwLDAtLjE2LDIsMTQsMTQsMCwwLDAsLjE2LDJIMy41NGExLDEsMCwxLDAsMCwyaDYuOGExNCwxNCwwLDAsMCwyMC44Myw3Ljg3QTEsMSwwLDAsMCwzMS40OCwyOC40OVoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNDIsMjUuMTZBMTAuODgsMTAuODgsMCwwLDEsOS4yMywyMUg1Ljg0YTEsMSwwLDAsMSwwLTJoM2MwLS4zNS0uMDUtLjcx'@;
put 'LS4wNS0xLjA3czAtLjYzLDAtLjkzaC0zYTEsMSwwLDAsMSwwLTJIOS4xOUExMC44NiwxMC44NiwwLDAsMSwyNS4zOCw4LjY5YTEuMjUsMS4yNSwwLDAsMS0xLjMyLDIuMTJBOC4zNiw4LjM2LDAsMCwwLDExLjgyLDE1aDkuMzZhMSwxLDAsMCwxLDAsMkgxMS4zM2E3LjcyLDcuNzIsMCwwLDAs'@;
put 'MCwyaDkuODJhMSwxLDAsMCwxLDAsMkgxMS44N2E4LjM2LDguMzYsMCwwLDAsMTIuMjIsNCwxLjI1LDEuMjUsMCwxLDEsMS4zMywyLjEyWiIvPicpLEYuQ2xyU2hhcGVEb2xsYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0yNiwyMS4xNWE2LjkxLDYuOTEsMCwwLDAtNC4zOC0zLjMyQTI2LDI2LDAsMCwwLDE5LDE3LjE5VjguMTJBMTAuMDUsMTAuMDUsMCwwLDEsMjMuODYsMTBhMSwxLDAsMCwwLDEuMzMtMS41QTExLjc1LDExLjc1LDAsMCwwLDE5LDYuMVYzYTEsMSwwLDAsMC0yLDBWNmMtNC40LjEt'@;
put 'Ni44MywyLjI5LTcuNTcsNC4xOEE1LjU2LDUuNTYsMCwwLDAsMTEuNjYsMTcsMTMuMiwxMy4yLDAsMCwwLDE3LDE4Ljg0VjI4YTEyLjMsMTIuMywwLDAsMS03LjE0LTIuNzRBMSwxLDAsMSwwLDguNDksMjYuNywxNC4wOSwxNC4wOSwwLDAsMCwxNywzMHYzYTEsMSwwLDAsMCwyLDBWMzBjMi44'@;
put 'Mi0uMTksNi4wNy0xLjA5LDcuMy00Ljc2QTUuMzMsNS4zMywwLDAsMCwyNiwyMS4xNVpNMTIuNzksMTUuMzJhMy41NywzLjU3LDAsMCwxLTEuNDktNC4zOUMxMS40MSwxMC42MywxMi41Myw4LjEyLDE3LDh2OC44QTEwLjcsMTAuNywwLDAsMSwxMi43OSwxNS4zMlpNMjQuNCwyNC41NmMtLjcy'@;
put 'LDIuMTQtMi4zMiwzLjE3LTUuNCwzLjRWMTkuMjNjLjY0LjE0LDEuMy4zLDIsLjUxYTUsNSwwLDAsMSwzLjE5LDIuMzJBMy4zNCwzLjM0LDAsMCwxLDI0LjQsMjQuNTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAg'@;
put 'ICAgICAgICAgIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNjUsMjEuNTljLTEsMy0zLjYxLDMuODQtNS45LDR2MmExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjcuNTlBMTEuNDcsMTEuNDcsMCwwLDEsMTEsMjVhMS4yNSwxLjI1LDAsMSwxLDEuNzEtMS44'@;
put 'Myw5LjExLDkuMTEsMCwwLDAsNC41NSwxLjk0VjE4LjgzYTkuNjMsOS42MywwLDAsMS0zLjczLTEuNDEsNC44LDQuOCwwLDAsMS0xLjkxLTUuODRjLjU5LTEuNTEsMi40Mi0zLjIzLDUuNjQtMy41MVY2LjI1YTEuMjUsMS4yNSwwLDAsMSwyLjUsMFY4LjExYTkuNjcsOS42NywwLDAsMSw0Ljks'@;
put 'MkExLjI1LDEuMjUsMCwwLDEsMjMsMTEuOTVhNy4xNCw3LjE0LDAsMCwwLTMuMjQtMS4zMXY2LjEzYy42LjEzLDEuMjQuMjcsMS45MS40OGE1Ljg1LDUuODUsMCwwLDEsMy42OSwyLjgyQTQuNjQsNC42NCwwLDAsMSwyNS42NSwyMy41OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC45MiwxOS42NGMtLjQtLjEyLS43OS0uMjItMS4xNy0uM3Y1Ljc2YzItLjIsMy4wNy0uOSwzLjUzLTIuM2EyLjE1LDIuMTUsMCwwLDAtLjE1LTEuNThBMy40OSwzLjQ5LDAsMCwwLDIwLjkyLDE5LjY0WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTEzLjk0LDEyLjQ4YTIuMzEsMi4zMSwwLDAsMCwxLDIuODcsNi41Myw2LjUzLDAsMCwwLDIuMzIuOTJWMTAuNTVDMTUuMTYsMTAuOCwxNC4xOSwxMS44NCwxMy45NCwxMi40OFoiLz4nKSxGLkNsclNo'@;
put 'YXBlQ3JlZGl0Q2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMiwwLDEySDRMNCw4Wk00LDI4VjI0SDMydjRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjMiIHdpZHRoPSIyMiIgaGVpZ2h0PSIzMCIgcng9IjAuOTYiIHJ5PSIwLjk2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNikgcm90YXRlKDkwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBz'@;
put 'dHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy'@;
put 'LDAsMCwwLDMyLDZabTAsMThINFYyMEgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJhbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMuNSwxMy41NiwxOCw1LjIzbDE0LjUsOC4zM2ExLDEsMCwwLDAsMS0xLjczTDE4LDIu'@;
put 'OTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1'@;
put 'SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFM'@;
put 'MTguNjUsNy43MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42'@;
put 'M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjIuNzcsOEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVBMy41MSwzLjUx'@;
put 'LDAsMCwxLDIwLDE0SDV2MkgzMVYxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDYsOS43NGwuNjgtMS4xNy0xLjQ5LS44NWEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44'@;
put 'NmgzLjIxbDMuOS0yLjI0LDEuMS42M0MxOS4zOSw5Ljg5LDE5LjQyLDkuODEsMTkuNDYsOS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMDUsNS4yNSwxOCwyLjkyLDIu'@;
put 'NSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjEuMDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTMuNSwxMy41Niw1LDEyLjY4VjE2SDMxVjEyLjcxbDEuNDguODVhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWk0xNy44NSw3LjExYS44LjgsMCwwLDEsLjgsMEwyNS4zNywxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFI'@;
put 'MTEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEu'@;
put 'MTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3'@;
put 'SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAs'@;
put 'MCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzksMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0bDYuNzItMy44'@;
put 'NmEuOC44LDAsMCwxLC44LDBsNSwyLjg3QTcuNDUsNy40NSwwLDAsMSwyMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0w1LDEyLjY4VjE2SDMxVjEzLjQyQTcuNTMsNy41MywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwxMy4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwy'@;
put 'N0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCww'@;
put 'LDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNWEzLjUxLDMuNTEsMCwwLDEtMy01LjI2bC4xNC0uMjQtMS4zNS0uNzhMMTQuMzUsMTFIMTEuMTRsNi43Mi0z'@;
put 'Ljg2YS44LjgsMCwwLDEsLjgsMGwxLjc1LDEsMS42NS0yLjg2TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlRG9sbGFyQmlsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJh'@;
put 'MiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCw2YTQuMjUsNC4yNSwwLDAsMS0zLjktNEgzMlptMCwxLjYydjQuODNBNS44Nyw1Ljg3LDAsMCwwLDI2LjQ5LDI2aC0xN0E1Ljg3LDUuODcsMCwwLDAsNCwyMC40NFYxNS42QTUuODcsNS44NywwLDAsMCw5LjUxLDEwaDE3QTUuODcs'@;
put 'NS44NywwLDAsMCwzMiwxNS42Wk03LjksMTBBNC4yNSw0LjI1LDAsMCwxLDQsMTRWMTBaTTQsMjIuMDZBNC4yNSw0LjI1LDAsMCwxLDcuOSwyNkg0Wk0yOC4xLDI2QTQuMjUsNC4yNSwwLDAsMSwzMiwyMi4wNlYyNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTAuODVjLTMuNDcsMC02LjMsMy4yMS02LjMsNy4xNXMyLjgzLDcuMTUsNi4zLDcuMTUsNi4zLTMuMjEsNi4zLTcuMTVTMjEuNDcsMTAuODUsMTgsMTAuODVabTAsMTIuNjljLTIuNTksMC00LjctMi40OS00LjctNS41NXMyLjExLTUuNTUs'@;
put 'NC43LTUuNTUsNC43LDIuNDksNC43LDUuNTVTMjAuNTksMjMuNTUsMTgsMjMuNTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs'@;
put 'Mi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk00LDI2VjIxLjE1QTUuMTgsNS4xOCwwLDAsMSw4Ljc5LDI2Wk00LDE0Ljg1VjEwSDguNzlBNS4xOCw1LjE4LDAsMCwxLDQsMTQuODVaTTE4LDI1LjE1Yy0zLjQ3LDAtNi4zLTMuMjEtNi4zLTcuMTVzMi44My03LjE1LDYuMy03LjE1LDYuMywzLjIxLDYu'@;
put 'Myw3LjE1UzIxLjQ3LDI1LjE1LDE4LDI1LjE1Wk0zMiwyNkgyNy4yNUE1LjE4LDUuMTgsMCwwLDEsMzIsMjEuMTVabTAtMTEuMTVBNS4xOCw1LjE4LDAsMCwxLDI3LjI1LDEwSDMyWiIvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIgY3g9IjE4IiBjeT0iMTgiIHJ4PSI0IiByeT0iNC43MiIvPicpLEYuQ2xyU2hhcGVFQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMCIgeT0iMjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM0'@;
put 'LDhIMTIuOTNhOC4zNSw4LjM1LDAsMCwxLC43OSwySDMzVjI2SDNWMTkuOWE3LjgzLDcuODMsMCwwLDEtMi0xLjM0VjI3YTEsMSwwLDAsMCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTQiIGQ9Ik02LjU3LDE4LjY4YTYuMTcsNi4xNywwLDAsMCw0LjMyLTEuNTksMS4yLDEuMiwwLDAsMCwuMzYtLjg0LDEuMDgsMS4wOCwwLDAsMC0xLjA5LTEuMTEsMSwxLDAsMCwwLS43MS4yNSw0LjMyLDQuMzIsMCwwLDEtMi44NCwxLDMuMzUsMy4zNSwwLDAsMS0z'@;
put 'LjQ2LTNoNy41M0ExLjI5LDEuMjksMCwwLDAsMTIsMTIuMDYsNS42OCw1LjY4LDAsMCwwLDYuMjcsNi4xNCw2LDYsMCwwLDAsLjQsMTIuNHYwQTYsNiwwLDAsMCw2LjU3LDE4LjY4Wk02LjI1LDguMzljMS44MiwwLDIuODcsMS4zOSwzLDMuMTZIMy4xM0MzLjM4LDkuNjksNC41Niw4LjM5LDYu'@;
put 'MjUsOC4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCw4SDEyLjkxYTguNjEsOC42MSwwLDAsMSwxLjIsNC4zOSw4LDgsMCwwLDEtNy43OCw4LjI3QTcuNTEsNy41MSwwLDAsMSwxLDE4LjQxVjI3YTEsMSwwLDAs'@;
put 'MCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4Wk0zMSwyM0gyMFYyMUgzMVptMC01SDE2VjE2SDMxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYuNTcsMTguNjhBNiw2LDAsMCwxLC40LDEyLjQ0'@;
put 'djBBNiw2LDAsMCwxLDYuMjcsNi4xNCw1LjY4LDUuNjgsMCwwLDEsMTIsMTIuMDZhMS4yOSwxLjI5LDAsMCwxLTEuMywxLjMySDMuMTVhMy4zNSwzLjM1LDAsMCwwLDMuNDYsMyw0LjMyLDQuMzIsMCwwLDAsMi44NC0xLDEsMSwwLDAsMSwuNzEtLjI1LDEuMDgsMS4wOCwwLDAsMSwxLjA5LDEu'@;
put 'MTEsMS4yLDEuMiwwLDAsMS0uMzYuODRBNi4xNyw2LjE3LDAsMCwxLDYuNTcsMTguNjhaTTkuMywxMS41NWMtLjE4LTEuNzctMS4yMy0zLjE2LTMtMy4xNnMtMi44NywxLjMtMy4xMiwzLjE2WiIvPicpLEYuQ2xyU2hhcGVQb3VuZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjksMzBIMTMuNEE4LjQ1LDguNDUsMCwwLDAsMTUsMjQuNjVWMjFoNC4zMWExLDEsMCwwLDAsMC0ySDE1VjExLjMxQTUuMjQsNS4yNCwwLDAsMSwyMC4yMSw2LDUuMTksNS4xOSwwLDAsMSwyNCw3LjczYTEsMSwwLDAsMCwx'@;
put 'LjQ4LTEuMzVBNy4xOSw3LjE5LDAsMCwwLDEzLDExLjMxVjE5SDguNzJhMSwxLDAsMSwwLDAsMkgxM3YzLjY1QzEzLDI5LjM4LDEwLjEyLDMwLDEwLDMwYTEsMSwwLDAsMCwuMTcsMkgyNy45YTEsMSwwLDEsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjUsMjUuOTJIMTEuNzRhMS4yNSwxLjI1LDAsMCwxLS4yMi0yLjQ4Yy4xNSwwLDEuNzItLjQ5LDEuNzItMy41NFYxOWgtMi41YTEsMSwwLDAsMSwwLTJoMi41VjExLjg4YTUu'@;
put 'ODUsNS44NSwwLDAsMSw1LjcyLTYsNS42Myw1LjYzLDAsMCwxLDQuMjEsMS45NEExLjI1LDEuMjUsMCwxLDEsMjEuMyw5LjUxLDMuMDgsMy4wOCwwLDAsMCwxOSw4LjQyYTMuMzUsMy4zNSwwLDAsMC0zLjIyLDMuNDZWMTdoM2ExLDEsMCwwLDEsMCwyaC0zdjIuOUE3LjY1LDcuNjUsMCwwLDEs'@;
put 'MTUsMjUuNDJIMjQuNWExLjI1LDEuMjUsMCwwLDEsMCwyLjVaIi8+JyksRi5DbHJTaGFwZVJ1cGVlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsOEgyNC4xNEE3LjUyLDcuNTIsMCwwLDAsMjIuNiw2SDI4'@;
put 'YTEsMSwwLDAsMCwwLTJIMTBhMSwxLDAsMCwwLDAsMmg3LjU1YTUuNDIsNS40MiwwLDAsMSw0LjIsMkgxMGExLDEsMCwwLDAsMCwySDIyLjc5QTUuNTQsNS41NCwwLDAsMSwyMywxMS41MSw1LjQ4LDUuNDgsMCwwLDEsMTcuNTUsMTdIMTEuMTRhMSwxLDAsMCwwLS43NSwxLjY2TDIyLjA2LDMy'@;
put 'YTEsMSwwLDEsMCwxLjUtMS4zMkwxMy4zNSwxOWg0LjIxYTcuNTEsNy41MSwwLDAsMCw3LjMtOUgyOGExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs'@;
put 'MTYsMCwwLDAsMTgsMlptNS44OCw5SDI2YTEsMSwwLDAsMSwwLDJIMjQuMjZjMCwuMDYsMCwuMTIsMCwuMTlhNi4wOSw2LjA5LDAsMCwxLTYsNi4yaC0ybDYuODIsOC4wNmExLjI1LDEuMjUsMCwwLDEtMS45MSwxLjYyTDEyLjYzLDE4Ljk0YTEuMjUsMS4yNSwwLDAsMSwxLTIuMDZoNC43MWEz'@;
put 'LjU5LDMuNTksMCwwLDAsMy40OC0zLjY5YzAtLjA3LDAtLjEzLDAtLjJoLTlhMSwxLDAsMCwxLDAtMmg4LjMyYTMuNDEsMy40MSwwLDAsMC0yLjc4LTEuNUgxMi43NWExLjI1LDEuMjUsMCwwLDEsMC0yLjVIMjZhMSwxLDAsMCwxLDAsMkgyMi42OEE2LjIzLDYuMjMsMCwwLDEsMjMuODgsMTFa'@;
put 'Ii8+JyksRi5DbHJTaGFwZVdvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE4SDI4Ljc1bC41LTJIMzNhMSwxLDAsMCwwLDAtMkgyOS43NGwyLjE3LTguNzZBMSwxLDAsMCwwLDMwLDQuNzZMMjcuNjgs'@;
put 'MTRIMjEuMzFMMTksNC43NmExLDEsMCwwLDAtMS45NCwwTDE0Ljc5LDE0SDguNDJMNi4xMyw0Ljc2YTEsMSwwLDAsMC0xLjk0LjQ4TDYuMzYsMTRIM2ExLDEsMCwwLDAsMCwySDYuODVsLjUsMkgzYTEsMSwwLDAsMCwwLDJINy44NGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMTUuMzYs'@;
put 'MjBoNS4zOGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMjguMjUsMjBIMzNhMSwxLDAsMCwwLDAtMlptLTUuODItMi0uNSwySDIyLjNsLS41LTJaTTE4LDkuMTYsMTkuMjUsMTRoLTIuNFpNOC45MSwxNmg1LjM4bC0uNSwySDkuNDFaTTExLjYsMjYuODQsOS45MSwyMEgxMy4zWk0xNS44'@;
put 'NSwxOGwuNS0yaDMuMzlsLjUsMlptOC42NCw4Ljg0TDIyLjgsMjBoMy4zOVoiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHBvaW50cz0iMTcuNzQgMTYgMTcuMjIgMTggMTguODUgMTggMTguMzIgMTYgMTcuNzQgMTYiLz5c'@;
put 'biAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHBvaW50cz0iMTEuOTQgMTggMTQuNjMgMTggMTUuMTYgMTYgMTEuNDEgMTYgMTEuOTQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMiIHBvaW50cz0iMTMuMjkgMjMuMSAxNC4xIDIwIDEyLjQ3IDIwIDEzLjI5IDIzLjEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHBvaW50cz0iMjEuNDQgMTggMjQuMTMgMTggMjQuNjYgMTYgMjAuOTEg'@;
put 'MTYgMjEuNDQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIHBvaW50cz0iMjIuNzggMjMuMSAyMy42IDIwIDIxLjk3IDIwIDIyLjc4IDIzLjEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTYiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LDIwSDI2LjE5TDI0LDI4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMMTkuMzgsMjBIMTYuNjlsLTIuMTksOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDkuODgsMjBI'@;
put 'N2ExLDEsMCwwLDEsMC0ySDkuMzVsLS41My0ySDdhMSwxLDAsMCwxLDAtMkg4LjNsLTEtMy42OGExLjI1LDEuMjUsMCwwLDEsMi40Mi0uNjRMMTAuODgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40MiwwTDIwLjM4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwx'@;
put 'LDIuNDIuNjRsLTEsMy42OEgyOWExLDEsMCwwLDEsMCwySDI3LjI0bC0uNTMsMkgyOWExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVZZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4zNCw0LjU1'@;
put 'YTEsMSwwLDEsMC0xLjY3LTEuMUwxOCwxOC4yMyw4LjMzLDMuNDVhMSwxLDAsMCwwLTEuNjcsMS4xTDE3LDIwLjM1VjIyLjJIMTJhLjguOCwwLDAsMCwwLDEuNmg1djIuNEgxMmEuOC44LDAsMCwwLDAsMS42aDVWMzJhMSwxLDAsMCwwLDIsMFYyNy44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYy'@;
put 'My44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYyMC4zNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMDcsNy45MUwxOS43NCwyMEgyMmExLDEs'@;
put 'MCwwLDEsMCwySDE5LjI1djJIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYyLjc1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNkgxNGExLDEsMCwxLDEsMC0yaDIuNzVWMjJIMTRhMSwxLDAsMSwxLDAtMmgyLjI2TDkuOTMsOS45MWExLjI1LDEuMjUsMCwxLDEsMi4xMi0xLjMzTDE4LDE4LjA4bDUu'@;
put 'OTUtOS40OWExLjI1LDEuMjUsMCwxLDEsMi4xMiwxLjMzWiIvPicpLEYuQ2xyU2hhcGVCaXRjb2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4xMSwxNi44OEE1LjQ5LDUuNDksMCwwLDAsMjEsN1Y0YTEsMSwwLDAsMC0yLDBWN0gxNlY0YTEsMSwwLDAsMC0yLDBWN0gxMWExLDEs'@;
put 'MCwwLDAtMSwxVjI4YTEsMSwwLDAsMCwxLDFoM3YzYTEsMSwwLDAsMCwyLDBWMjloM3YzYTEsMSwwLDAsMCwyLDBWMjloLjA4QTYuMDcsNi4wNywwLDAsMCwyNywyMi44MXYtLjYyQTYuMjUsNi4yNSwwLDAsMCwyNC4xMSwxNi44OFpNMTIsOWg4LjY5YTMuNTksMy41OSwwLDAsMSwzLjQzLDIu'@;
put 'MzZBMy41MSwzLjUxLDAsMCwxLDIwLjc5LDE2SDEyWk0yNSwyMi44MUE0LjA4LDQuMDgsMCwwLDEsMjEuMDYsMjdIMTJWMThoOS4wNkE0LjA4LDQuMDgsMCwwLDEsMjUsMjIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yMS4xOCwxOC40N0gxNC41djZoNi42OGEyLjcsMi43LDAsMCwwLDIuNjMtMi43N3YtLjQ4QTIuNzEsMi43MSwwLDAsMCwyMS4xOCwxOC40N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMTMuNzVh'@;
put 'Mi4yNCwyLjI0LDAsMCwwLTIuMjMtMi4yNUgxNC41VjE2aDYuM0EyLjIyLDIuMjIsMCwwLDAsMjMsMTMuNzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs'@;
put 'MTgsMlptOC4zMSwxOS43M0E1LjIyLDUuMjIsMCwwLDEsMjEuMTgsMjdIMjF2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTd2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTMuMjVBMS4yNSwxLjI1LDAsMCwxLDEyLDI1Ljc1VjE3LjIzaDB2LTdBMS4yNSwxLjI1LDAsMCwxLDEzLjI1LDlIMTVWNy4wN2Ex'@;
put 'LDEsMCwwLDEsMiwwVjloMlY3LjA3YTEsMSwwLDAsMSwyLDBWOWE0LjcyLDQuNzIsMCwwLDEsMy4yLDgsNS4zMSw1LjMxLDAsMCwxLDIuMTEsNC4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUNvaW5CYWc9KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTIxLjYsMjlhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjIuNTQsMjRoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAs'@;
put 'MCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIsMzJIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNywz'@;
put 'MmgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMy43LDI4aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjc0LDI2YTI4LDI4LDAsMCwwLTIuODItMTAuMTJBMjAuMjQsMjAuMjQsMCwwLDAsMjQuNiw4LjcxTDI3LDMuNDJhMSwxLDAsMCwwLS4wNy0xQTEsMSwwLDAsMCwyNi4xMywySDkuOGExLDEsMCwwLDAtLjkxLDEuNDJsMi40NSw1LjMxYTIwLjMz'@;
put 'LDIwLjMzLDAsMCwwLTYuMjgsNy4xNWMtMi4xNSw0LTIuODIsOC44OS0zLDEyLjI4YTMuNiwzLjYsMCwwLDAsMSwyLjcxQTMuNzksMy43OSwwLDAsMCw1LjgsMzEuOTRIMTJWMzBINS43MmExLjY4LDEuNjgsMCwwLDEtMS4yMS0uNTIsMS42MiwxLjYyLDAsMCwxLS40NS0xLjIzYy4xNC0yLjYx'@;
put 'LjY5LTcuNTgsMi43Ni0xMS40NUExOCwxOCwwLDAsMSwxMy4wOCwxMGgxYTMwLjgxLDMwLjgxLDAsMCwwLTEuODcsMi45MiwyMi43OCwyMi43OCwwLDAsMC0xLjQ3LDMuMzRsMS4zNy45MmEyNCwyNCwwLDAsMSwxLjQ5LTMuNDdBMjkuMSwyOS4xLDAsMCwxLDE2LjA1LDEwaDFhMjEuNDUsMjEu'@;
put 'NDUsMCwwLDEsMS40MSw1LDIyLjU0LDIyLjU0LDAsMCwxLC4zMiwzLjg2bDEuNTgtMS4xMWEyNC4xNSwyNC4xNSwwLDAsMC0uMzItM0EyNC44MiwyNC44MiwwLDAsMCwxOC43NiwxMGguNzhsLjkxLTJIMTMuMjFMMTEuMzYsNEgyNC41N2wtMi41LDUuNDdhOS45Myw5LjkzLDAsMCwxLDEuMjMu'@;
put 'NzgsMTguNjMsMTguNjMsMCwwLDEsNS44Niw2LjU3QTI2LjU5LDI2LjU5LDAsMCwxLDMxLjczLDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgPHBhdGggZD0iTTI0Ljg5LDI2aDcuODZjLS42Ni04LjcxLTQuNDEtMTQuMTItOS4yMi0xNy4z'@;
put 'MkwyNS43MiwzLjlhMSwxLDAsMCwwLS45MS0xLjRIMTEuMWExLDEsMCwwLDAtLjkxLDEuNGwxLjIsMi42SDIxLjUxbC0uOSwySDE4Ljc2QTI0LjksMjQuOSwwLDAsMSwyMCwxMy4xOWEyNC40OSwyNC40OSwwLDAsMSwuMzIsM2wtMS41OCwxLjExYTIyLjU0LDIyLjU0LDAsMCwwLS4zMi0zLjg2'@;
put 'QTIxLjc0LDIxLjc0LDAsMCwwLDE3LDguNWgtMWEyOC4yMiwyOC4yMiwwLDAsMC0yLjQ4LDMuNywyMy45MSwyMy45MSwwLDAsMC0xLjQ5LDMuNDZsLTEuMzctLjkxYTIyLjc4LDIyLjc4LDAsMCwxLDEuNDctMy4zNEEzMC44MSwzMC44MSwwLDAsMSwxNC4wNSw4LjVIMTIuM2wuMDguMTdDNy4w'@;
put 'OCwxMi4yLDMuMDUsMTguNCwzLjA1LDI4Ljc1QTEuNjUsMS42NSwwLDAsMCw0LjYxLDMwLjVoOEEyLjY3LDIuNjcsMCwwLDEsMTQuMjEsMjZhMi42NywyLjY3LDAsMCwxLS4zNy0xLjM0LDIuNywyLjcsMCwwLDEsMi43LTIuN2g2YTIuNywyLjcsMCwwLDEsMi43LDIuN0EyLjYzLDIuNjMsMCww'@;
put 'LDEsMjQuODksMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS42LDI4LjVhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjguNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiIC8+PHBhdGggZD0iTTIyLjU0LDIzLjVoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwzMS41SDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuNywzMS41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNywyNy41aC03YTEsMSwwLDAsMCwwLDJo'@;
put 'N2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlUGVzbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTMuMkgyNy44OUE2LjgxLDYuODEsMCwwLDAsMjgsMTJhNy44NSw3Ljg1LDAsMCwwLS4xLTEuMTlo'@;
put 'Mi45M2EuOC44LDAsMCwwLDAtMS42SDI3LjQ2QTguNDQsOC40NCwwLDAsMCwxOS41Nyw0SDExYTEsMSwwLDAsMC0xLDFWOS4ySDdhLjguOCwwLDAsMCwwLDEuNmgzdjIuNEg3YS44LjgsMCwwLDAsMCwxLjZoM1YzMWExLDEsMCwwLDAsMiwwVjIwaDcuNTdhOC40NSw4LjQ1LDAsMCwwLDcuODkt'@;
put 'NS4ySDMxYS44LjgsMCwwLDAsMC0xLjZaTTEyLDZoNy41N2E2LjUxLDYuNTEsMCwwLDEsNS42OCwzLjJIMTJabTAsNC44SDI1Ljg3YTUuNiw1LjYsMCwwLDEsMCwyLjRIMTJaTTE5LjU3LDE4SDEyVjE0LjhIMjUuMjVBNi41MSw2LjUxLDAsMCwxLDE5LjU3LDE4WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDEzLjhWMTZoOS40NWE1LjI2LDUuMjYsMCwwLDAsLjA4LS44OSw0LjcyLDQuNzIsMCwwLDAtLjItMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4'@;
put 'LDE5LjdoNS4xOWE0LjI4LDQuMjgsMCwwLDAsMy41LTEuOUgxNC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LjM3LDEwLjUxSDE0LjE4VjEyaDguMzdBNC4yMSw0LjIxLDAsMCwwLDE5LjM3LDEwLjUxWiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNjcsMmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxNy42NywyWm0xMC41LDE1LjhIMjUuN2E2Ljg3LDYuODcsMCwwLDEtNi4zMyw0LjRIMTQuMTh2Ni41NGExLjI1LDEuMjUsMCwxLDEtMi41LDBWMTcuOEg4Ljc2'@;
put 'YS45LjksMCwxLDEsMC0xLjhoMi45MlYxMy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjkuMjZBMS4yNSwxLjI1LDAsMCwxLDEyLjkzLDhoNi40NGE2Ljg0LDYuODQsMCwwLDEsNi4xNSw0aDIuNjVhLjkuOSwwLDAsMSwwLDEuOEgyNi4wOWE2LjkxLDYuOTEsMCwwLDEsLjEyLDEuMyw2'@;
put 'LjgsNi44LDAsMCwxLS4wNi45aDJhLjkuOSwwLDAsMSwwLDEuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVJ1YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC41NywyMEE4LjIzLDguMjMsMCwwLDAsMjksMTJhOC4yMyw4'@;
put 'LjIzLDAsMCwwLTguNDMtOEgxMmExLDEsMCwwLDAtMSwxVjE4SDlhMSwxLDAsMCwwLDAsMmgydjJIOWExLDEsMCwwLDAsMCwyaDJ2N2ExLDEsMCwwLDAsMiwwVjI0aDlhMSwxLDAsMCwwLDAtMkgxM1YyMFpNMTMsNmg3LjU3QTYuMjQsNi4yNCwwLDAsMSwyNywxMmE2LjIzLDYuMjMsMCwwLDEt'@;
put 'Ni40Myw2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIwLjc1LDkuMjVIMTV2OC44MWg1Ljc5YTQuNjYsNC42NiwwLDAsMCw0Ljg2LTQuNEE0LjY1LDQuNjUsMCwwLDAsMjAuNzUsOS4yNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMi43NSwxOC41NkgxNVYyMmg4LjI5YTEsMSwwLDAsMSwwLDJIMTV2NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjRIMTEuMjVhMSwxLDAsMCwxLDAtMmgxLjIxVjIw'@;
put 'LjU2SDExLjI1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNWgxLjIxVjhhMS4yNSwxLjI1LDAsMCwxLDEuMjUtMS4yNWg3YTcuMTQsNy4xNCwwLDAsMSw3LjM2LDYuOUE3LjE1LDcuMTUsMCwwLDEsMjAuNzUsMjAuNTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicp'@;
put 'LEYuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCwwLDAsMTgu'@;
put 'NDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0'@;
put 'LDMuNzQsMCwwLDAsMTguNDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS45MSwxNy42NWEyMC42LDIwLjYsMCwwLDAtMTMsMkExLjc3LDEuNzcsMCwwLDAsOCwyMS4yNXYzLjU2YTEsMSwwLDAsMCwyLDBWMjEuMzhh'@;
put 'MTguOTIsMTguOTIsMCwwLDEsMTItMS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMywyMkgyNi4zVjIwLjUyYTEsMSwwLDAsMC0yLDBWMjJIMTdhMSwxLDAsMCwwLTEsMVYzM2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAs'@;
put 'MCwxLTFWMjNBMSwxLDAsMCwwLDMzLDIyWk0zMiwzMkgxOFYyNGg2LjN2LjQxYTEsMSwwLDAsMCwyLDBWMjRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cmVjdCB4PSIyMS44MSIgeT0iMjcuNDIiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEu'@;
put 'NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEwLjg0LDEyLjI0YTE4LDE4LDAsMCwwLTcuOTUsMkExLjY3LDEuNjcsMCwwLDAsMiwxNS43MXYzLjFhMSwxLDAsMCwwLDIsMHYtMi45YTE2LDE2LDAsMCwxLDcuNTgtMS42N0E3LjI4'@;
put 'LDcuMjgsMCwwLDEsMTAuODQsMTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzMuMTEsMTQuMjNhMTcuOCwxNy44LDAsMCwwLTcuMTItMiw3LjQ2LDcuNDYsMCwwLDEtLjczLDJBMTUuODksMTUuODksMCwwLDEsMzIsMTUu'@;
put 'OTF2Mi45YTEsMSwwLDEsMCwyLDB2LTMuMUExLjY3LDEuNjcsMCwwLDAsMzMuMTEsMTQuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cGF0aCBkPSJNMTAuNjYsMTAuNjFjMC0uMjMsMC0uNDUsMC0uNjdhMy4wNywzLjA3LDAsMCwxLC41NC02'@;
put 'LjExLDMuMTUsMy4xNSwwLDAsMSwyLjIuODksOC4xNiw4LjE2LDAsMCwxLDEuNy0xLjA4LDUuMTMsNS4xMywwLDAsMC05LDMuMjcsNS4xLDUuMSwwLDAsMCw0LjcsNUE3LjQyLDcuNDIsMCwwLDEsMTAuNjYsMTAuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'OCIvPlxuICA8cGF0aCBkPSJNMjQuNzcsMS44M2E1LjE3LDUuMTcsMCwwLDAtMy42OSwxLjU1LDcuODcsNy44NywwLDAsMSwxLjksMSwzLjE0LDMuMTQsMCwwLDEsNC45MywyLjUyLDMuMDksMy4wOSwwLDAsMS0xLjc5LDIuNzcsNy4xNCw3LjE0LDAsMCwxLC4wNi45Myw3Ljg4LDcuODgsMCww'@;
put 'LDEtLjEsMS4yLDUuMSw1LjEsMCwwLDAsMy44My00LjlBNS4xMiw1LjEyLDAsMCwwLDI0Ljc3LDEuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICBcbiAgPGVsbGlwc2UgY3g9IjE4IiBjeT0iMTEuMjgiIHJ4PSI0Ljc2IiByeT0iNC43IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxMS43NWMuMTYsMCwuMzIsMCwuNDgsMCwwLS4xNSwwLS4yOCwwLS40M2E2LjcsNi43LDAsMCwxLDMuNzUtNiw0LjYyLDQuNjIsMCwxLDAtNC4yMSw2LjQ2WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjQuNzYsMTEuMjhjMCwuMTUsMCwuMjgsMCwuNDMuMTYsMCwuMzIsMCwuNDgsMEE0LjU4LDQuNTgsMCwxLDAsMjEsNS4yOSw2LjcsNi43LDAsMCwxLDI0Ljc2LDExLjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjIuMjksMTYuNDVhMjEuNDUsMjEuNDUsMCwwLDEsNS43MSwyLDIuNzEsMi43MSwwLDAsMSwuNjguNTNIMzRWMTUuNTZhLjcyLjcyLDAsMCwwLS4zOC0uNjQsMTgsMTgsMCwwLDAtOC40LTIuMDVsLS42NiwwQTYuNjYsNi42NiwwLDAsMSwyMi4yOSwx'@;
put 'Ni40NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTYuNTMsMjAuOTJBMi43NiwyLjc2LDAsMCwxLDgsMTguNDdhMjEuNDUsMjEuNDUsMCwwLDEsNS43MS0yLDYuNjYsNi42NiwwLDAsMS0yLjI3LTMuNTVsLS42NiwwYTE4LDE4LDAsMCww'@;
put 'LTguNCwyLjA1LjcyLjcyLDAsMCwwLS4zOC42NFYyMkg2LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIyMS40NiIgeT0iMjYuNjkiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzIuODEsMjEuMjZIMjUuOTR2LTFhMSwxLDAsMCwwLTIsMHYxSDIyVjE4LjQzQTIwLjE3LDIwLjE3LDAsMCwwLDE4LDE4YTE5LjI3LDE5LjI3LDAsMCwwLTkuMDYsMi4yMi43Ni43NiwwLDAsMC0uNDEuNjh2NS42MWg3LjExdjYuMDlhMSwxLDAsMCww'@;
put 'LDEsMUgzMi44MWExLDEsMCwwLDAsMS0xVjIyLjI2QTEsMSwwLDAsMCwzMi44MSwyMS4yNlptLTEsMTAuMzZIMTcuNjRWMjMuMjZoNi4zdi45MWExLDEsMCwwLDAsMiwwdi0uOTFoNS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTciLz4nKSxGLkNsclNoYXBlRW1w'@;
put 'bG95ZWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LjQzLDE2LjY5YTcsNywwLDEsMSw3LTdBNyw3LDAsMCwxLDE2LjQzLDE2LjY5Wm0wLTExLjkyYTUsNSwwLDEsMCw1LDVBNSw1LDAsMCwwLDE2LjQzLDQuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIvPlxuICA8cGF0aCBkPSJNMjIsMTcuOUEyNS40MSwyNS40MSwwLDAsMCw1Ljg4LDE5LjU3YTQuMDYsNC4wNiwwLDAsMC0yLjMxLDMuNjhWMjkuMmExLDEsMCwxLDAsMiwwVjIzLjI1YTIsMiwwLDAsMSwxLjE2LTEuODYsMjIuOTEsMjIuOTEsMCwwLDEsOS43LTIuMTEsMjMuNTgsMjMu'@;
put 'NTgsMCwwLDEsNS41Ny42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIyLjE0IiB5PSIyNy40MSIgd2lkdGg9IjYuMTQiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu'@;
put 'ICA8cGF0aCBkPSJNMzMuMTcsMjEuNDdIMjh2Mmg0LjE3djguMzdIMThWMjMuNDdoNi4zdi40MmExLDEsMCwwLDAsMiwwVjIwYTEsMSwwLDAsMC0yLDB2MS40N0gxN2ExLDEsMCwwLDAtMSwxVjMyLjg0YTEsMSwwLDAsMCwxLDFIMzMuMTdhMSwxLDAsMCwwLDEtMVYyMi40N0ExLDEsMCwwLDAs'@;
put 'MzMuMTcsMjEuNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICBcbiAgPGNpcmNsZSBjeD0iMTYuODYiIGN5PSI5LjczIiByPSI2LjQ2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIxIiB5PSIy'@;
put 'OCIgd2lkdGg9IjciIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xNSwzMHYzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM2ExLDEsMCwwLDAtMS0xSDI2VjIwLjUzYTEsMSwwLDAsMC0yLDBWMjJIMjJW'@;
put 'MTguNDJBMzIuMTIsMzIuMTIsMCwwLDAsMTYuODYsMThhMjYsMjYsMCwwLDAtMTEsMi4zOSwzLjI4LDMuMjgsMCwwLDAtMS44OCwzVjMwWm0xNywySDE3VjI0aDd2LjQyYTEsMSwwLDAsMCwyLDBWMjRoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNs'@;
put 'clNoYXBlRmFjdG9yeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDcsNy4zN2ExLDEsMCwwLDAtMSwuMDZMMjMsMTMuNzdWOC4yNmExLDEsMCwwLDAtMS42NC0uNzdMMTMuNDgsMTRIMTBWNC42MmExLDEsMCwwLDAtLjc4LTFsLTQtLjlhMSwxLDAsMCwwLS44NS4yQTEsMSwwLDAs'@;
put 'MCw0LDMuNzNWMTRIM2ExLDEsMCwwLDAtMSwxVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY4LjI2QTEsMSwwLDAsMCwzMy40Nyw3LjM3Wk02LDVsMiwuNDRWMTRINlpNMzIsMzBINFYxNmg5LjgzYTEsMSwwLDAsMCwuNjQtLjIzTDIxLDEwLjM3djUuMjhhMSwxLDAsMCwwLDEu'@;
put 'NTYuODNMMzIsMTAuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI2IiB5PSIxNy45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0i'@;
put 'NiIgeT0iMjEuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjI1Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIvPlxuICA8cmVjdCB4PSIxOSIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjI0Ljk5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zMi40NSw4LjQ0LDIyLDE1LjNWOS41MWExLDEsMCwwLDAtMS42My0uNzhMMTQuMDcsMTRIMTBWNC4wNkw0LDIuNzFWMTRIMlYzMWExLDEsMCwwLDAs'@;
put 'MSwxSDMzYTEsMSwwLDAsMCwxLTFWOS4yN0ExLDEsMCwwLDAsMzIuNDUsOC40NFpNMTQsMjlINlYyN2g4Wm0wLTRINlYyM2g4Wm0wLTRINlYxOWg4Wm04LDhIMjBWMjZoMlptMC02SDIwVjIwaDJabTQsNkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptNCw2SDI4VjI2aDJabTAtNkgyOFYyMGgyWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuQ29tbWVyY2VTaGFwZXM9e2NhbGN1bGF0b3I6Ri5DbHJTaGFwZUNhbGN1bGF0b3IsInBpZ2d5LWJhbmsiOkYuQ2xyU2hhcGVQaWdneUJhbmssInNob3BwaW5nLWJhZyI6Ri5DbHJTaGFwZVNob3BwaW5nQmFnLCJz'@;
put 'aG9wcGluZy1jYXJ0IjpGLkNsclNoYXBlU2hvcHBpbmdDYXJ0LHdhbGxldDpGLkNsclNoYXBlV2FsbGV0LHN0b3JlOkYuQ2xyU2hhcGVTdG9yZSxldXJvOkYuQ2xyU2hhcGVFdXJvLGRvbGxhcjpGLkNsclNoYXBlRG9sbGFyLHBlc286Ri5DbHJTaGFwZVBlc28sImNyZWRpdC1jYXJkIjpGLkNs'@;
put 'clNoYXBlQ3JlZGl0Q2FyZCxiYW5rOkYuQ2xyU2hhcGVCYW5rLCJkb2xsYXItYmlsbCI6Ri5DbHJTaGFwZURvbGxhckJpbGwsImUtY2hlY2siOkYuQ2xyU2hhcGVFQ2hlY2sscG91bmQ6Ri5DbHJTaGFwZVBvdW5kLHJ1cGVlOkYuQ2xyU2hhcGVSdXBlZSx3b246Ri5DbHJTaGFwZVdvbix5ZW46'@;
put 'Ri5DbHJTaGFwZVllbixiaXRjb2luOkYuQ2xyU2hhcGVCaXRjb2luLHJ1YmxlOkYuQ2xyU2hhcGVSdWJsZSwiY29pbi1iYWciOkYuQ2xyU2hhcGVDb2luQmFnLCJlbXBsb3llZS1ncm91cCI6Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXAsZW1wbG95ZWU6Ri5DbHJTaGFwZUVtcGxveWVlLGZhY3Rv'@;
put 'cnk6Ri5DbHJTaGFwZUZhY3Rvcnl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvbW1lcmNlU2hhcGVzLCJzYXZpbmdzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29tbWVyY2VTaGFwZXNbInBpZ2d5LWJhbmsiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy'@;
put 'dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLkNvbW1lcmNlU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc'@;
put 'CiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMg'@;
put 'Zm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ29yZVNoYXBlcz1GLkNsclNoYXBlQXJyb3c9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1GLkNsclNoYXBlRXllSGlkZT1GLkNsclNo'@;
put 'YXBlRXllPUYuQ2xyU2hhcGVFdmVudD1GLkNsclNoYXBlQ2FsZW5kYXI9Ri5DbHJTaGFwZUFuZ2xlRG91YmxlPUYuQ2xyU2hhcGVWaWV3Q29sdW1ucz1GLkNsclNoYXBlU2VhcmNoPUYuQ2xyU2hhcGVWbUJ1Zz1GLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1GLkNsclNoYXBlRmlsdGVyR3Jp'@;
put 'ZD1GLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1GLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPUYuQ2xyU2hhcGVDbG91ZD1GLkNsclNoYXBlSW1hZ2U9Ri5DbHJTaGFwZUJlbGw9Ri5DbHJTaGFwZUZvbGRlck9wZW49Ri5DbHJTaGFwZUZvbGRlcj1GLkNsclNoYXBlQW5nbGU9Ri5DbHJT'@;
put 'aGFwZVVzZXI9Ri5DbHJTaGFwZUJhcnM9Ri5DbHJTaGFwZUhlbHBJbmZvPUYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1GLkNsclNoYXBlSW5mb1N0YW5kYXJkPUYuQ2xyU2hhcGVJbmZvQ2lyY2xlPUYu'@;
put 'Q2xyU2hhcGVDaGVja0NpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Ri5DbHJTaGFwZVRpbWVzPUYuQ2xyU2hhcGVDaGVjaz1GLkNsclNoYXBlQ29nPUYuQ2xyU2hhcGVIb21lPUYuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZv'@;
put 'aWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4z'@;
put 'Miw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywx'@;
put 'M1oiLz4nKSxGLkNsclNoYXBlSG9tZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEs'@;
put 'MzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIs'@;
put 'MiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwx'@;
put 'LDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJW'@;
put 'MTkuNzZaIi8+JyksRi5DbHJTaGFwZUNvZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0x'@;
put 'OC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEu'@;
put 'NWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z'@;
put 'LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs'@;
put 'MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy'@;
put 'LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwy'@;
put 'OC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41'@;
put 'LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwx'@;
put 'LjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwx'@;
put 'OGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44'@;
put 'LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0w'@;
put 'LjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4x'@;
put 'LTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUs'@;
put 'MS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3'@;
put 'LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIu'@;
put 'NCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0w'@;
put 'LjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4x'@;
put 'bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0w'@;
put 'LjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMu'@;
put 'MiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUu'@;
put 'MkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIu'@;
put 'NmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMs'@;
put 'MS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEs'@;
put 'Nyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAu'@;
put 'NC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42'@;
put 'NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDEx'@;
put 'LjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywx'@;
put 'YTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAs'@;
put 'MCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40'@;
put 'My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i'@;
put 'YWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQz'@;
put 'bC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCww'@;
put 'LDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNo'@;
put 'My4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0x'@;
put 'YS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40'@;
put 'SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCww'@;
put 'LTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDEx'@;
put 'LjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQz'@;
put 'bDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYu'@;
put 'MzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy'@;
put 'Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxGLkNsclNoYXBlVGltZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEu'@;
put 'NDFaIi8+JyksRi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2'@;
put 'QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEs'@;
put 'MCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3'@;
put 'LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0x'@;
put 'LjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAs'@;
put 'MCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEu'@;
put 'MywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEu'@;
put 'NzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxGLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCww'@;
put 'LDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwz'@;
put 'LjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQs'@;
put 'MCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLEYuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMi'@;
put 'IGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEs'@;
put 'MSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxGLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIg'@;
put 'Y3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEu'@;
put 'NCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksRi5DbHJTaGFwZUVycm9yU3RhbmRh'@;
put 'cmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQs'@;
put 'MTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAs'@;
put 'MCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksRi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwx'@;
put 'LDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2'@;
put 'MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1'@;
put 'LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEu'@;
put 'MjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3'@;
put 'NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBD'@;
put 'MzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwy'@;
put 'LjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEs'@;
put 'My42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwx'@;
put 'LDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLEYuQ2xyU2hhcGVIZWxwSW5mbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEt'@;
put 'LjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0x'@;
put 'LjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4z'@;
put 'LDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0'@;
put 'LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4'@;
put 'LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0x'@;
put 'Miw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4y'@;
put 'NWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZUJhcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0'@;
put 'LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxGLkNsclNoYXBlVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pN'@;
put 'MjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0'@;
put 'VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCww'@;
put 'LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'Mi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUy'@;
put 'YTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAs'@;
put 'MCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYt'@;
put 'NkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcs'@;
put 'NywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUFuZ2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2'@;
put 'TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxGLkNsclNoYXBlRm9sZGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiww'@;
put 'LDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEt'@;
put 'MS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBk'@;
put 'PSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlh'@;
put 'MiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgx'@;
put 'Ni40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs'@;
put 'MCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs'@;
put 'MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBk'@;
put 'PSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcy'@;
put 'LDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLG0uY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCww'@;
put 'LDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMu'@;
put 'NzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43'@;
put 'MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks'@;
put 'NUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5'@;
put 'LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdW'@;
put 'MjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYu'@;
put 'NDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQs'@;
put 'MS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAs'@;
put 'MCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy'@;
put 'LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0y'@;
put 'LjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs'@;
put 'NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUJlbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0x'@;
put 'LjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45Mywx'@;
put 'LDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAs'@;
put 'MSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAs'@;
put 'MCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgs'@;
put 'MzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYz'@;
put 'LDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUu'@;
put 'MTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAs'@;
put 'MCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwx'@;
put 'LDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgx'@;
put 'LDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN'@;
put 'MzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0z'@;
put 'LjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlSW1hZ2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2'@;
put 'VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCww'@;
put 'LDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAs'@;
put 'MCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSww'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMy'@;
put 'YTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywz'@;
put 'LDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEs'@;
put 'MS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksRi5DbHJTaGFwZUNsb3VkPSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwy'@;
put 'OSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywy'@;
put 'OCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3'@;
put 'LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDkt'@;
put 'MS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMx'@;
put 'LDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0'@;
put 'LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwz'@;
put 'NSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42'@;
put 'NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4y'@;
put 'OSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCww'@;
put 'LDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRWxsaXBz'@;
put 'aXNIb3Jpem9udGFsPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIx'@;
put 'OCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEi'@;
put 'IHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+'@;
put 'JyksRi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAs'@;
put 'MC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4x'@;
put 'Mi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5'@;
put 'LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCww'@;
put 'LDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksRi5DbHJTaGFwZVZtQnVnPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRp'@;
put 'b246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1'@;
put 'LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4x'@;
put 'NSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45Mywz'@;
put 'LjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUs'@;
put 'MTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4y'@;
put 'NywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIg'@;
put 'ZmlsbD0iI2ZmZmZmZiIvPicpLEYuQ2xyU2hhcGVTZWFyY2g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4w'@;
put 'NW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAs'@;
put 'MSwwLDM1LDMzLjI5WiIvPicpLEYuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDIt'@;
put 'MlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksRi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43'@;
put 'MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWEx'@;
put 'LDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLEYuQ2xyU2hhcGVDYWxlbmRhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1'@;
put 'LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIy'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEw'@;
put 'YTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwx'@;
put 'LDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1'@;
put 'LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIx'@;
put 'OSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJl'@;
put 'Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwy'@;
put 'LDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9Ijgi'@;
put 'IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4y'@;
put 'LDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVI'@;
put 'OFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwx'@;
put 'LDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDks'@;
put 'M1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgt'@;
put 'NEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRo'@;
put 'MlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMu'@;
put 'NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJa'@;
put 'bTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRXZlbnQ9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAs'@;
put 'MCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs'@;
put 'MTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEs'@;
put 'MjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJW'@;
put 'MzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEs'@;
put 'MSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAs'@;
put 'LjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYg'@;
put 'MTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW'@;
put 'MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQi'@;
put 'IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwx'@;
put 'LTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcu'@;
put 'OCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiww'@;
put 'LDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0x'@;
put 'VjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwt'@;
put 'OS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAs'@;
put 'MCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMs'@;
put 'MTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41'@;
put 'QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMu'@;
put 'NVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVFeWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4'@;
put 'bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQy'@;
put 'LDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0'@;
put 'Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywy'@;
put 'LDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjgu'@;
put 'NTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi'@;
put 'Lz4nKSxGLkNsclNoYXBlRXllSGlkZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0'@;
put 'LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2'@;
put 'LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCww'@;
put 'LDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1'@;
put 'bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgu'@;
put 'MzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5'@;
put 'LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTku'@;
put 'OTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIz'@;
put 'LDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2Ex'@;
put 'Ny4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcu'@;
put 'MTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43'@;
put 'VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFycm93PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDgu'@;
put 'MzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksRi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0'@;
put 'dXMiOkYuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Ri5DbHJTaGFwZUhvbWUsY29nOkYuQ2xyU2hhcGVDb2csY2hlY2s6Ri5DbHJTaGFwZUNoZWNrLHRpbWVzOkYuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJl'@;
put 'eGNsYW1hdGlvbi1jaXJjbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpGLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpGLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Ri5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vz'@;
put 'cy1zdGFuZGFyZCI6Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOkYuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOkYuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOkYuQ2xy'@;
put 'U2hhcGVCYXJzLHVzZXI6Ri5DbHJTaGFwZVVzZXIsYW5nbGU6Ri5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpGLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Ri5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpGLkNsclNoYXBlQmVsbCxpbWFnZTpGLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Ri5DbHJT'@;
put 'aGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpGLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Ri5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpGLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpG'@;
put 'LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpGLkNsclNoYXBlVm1CdWcsc2VhcmNoOkYuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Ri5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOkYuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpGLkNsclNo'@;
put 'YXBlQ2FsZW5kYXIsZXZlbnQ6Ri5DbHJTaGFwZUV2ZW50LGV5ZTpGLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Ri5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpGLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OkYuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEYuQ29yZVNoYXBlcywiaG91c2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KEYuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMudGltZXMpKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImVycm9yIiwoMCx4LmRlc2NyaXB0b3JD'@;
put 'b25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJpbmZvIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNv'@;
put 'cmVTaGFwZXMsIm1lbnUiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoRi5Db3JlU2hhcGVzLCJjYXJldCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNo'@;
put 'YXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJv'@;
put 'amVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEll'@;
put 'LEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbHJTaGFwZUxvZ291dD1GLkNsclNoYXBlTG9naW49Ri5DbHJTaGFwZUhlbHA9Ri5DbHJTaGFwZUNvcHk9Ri5DbHJTaGFwZUNoaWxkQXJyb3c9Ri5DbHJTaGFwZUNp'@;
put 'cmNsZUFycm93PUYuQ2xyU2hhcGVBbGFybUNsb2NrPUYuQ2xyU2hhcGVDbG9jaz1GLkNsclNoYXBlSGlzdG9yeT1GLkNsclNoYXBlVGFncz1GLkNsclNoYXBlVGFnPUYuQ2xyU2hhcGVUcmFzaD1GLkNsclNoYXBlVGltZXNDaXJjbGU9Ri5DbHJTaGFwZUJhbj1GLkNsclNoYXBlUGx1c0NpcmNs'@;
put 'ZT1GLkNsclNoYXBlTWludXNDaXJjbGU9Ri5DbHJTaGFwZU1pbnVzPUYuQ2xyU2hhcGVQbHVzPUYuQ2xyU2hhcGVGaWxlPUYuQ2xyU2hhcGVQaW49Ri5DbHJTaGFwZUZpbHRlcj1GLkNsclNoYXBlUG9wT3V0PUYuQ2xyU2hhcGVVc2Vycz1GLkNsclNoYXBlVW5sb2NrPUYuQ2xyU2hhcGVMb2Nr'@;
put 'PUYuQ2xyU2hhcGVVcGxvYWQ9Ri5DbHJTaGFwZURvd25sb2FkPUYuQ2xyU2hhcGVMaWdodGJ1bGI9Ri5DbHJTaGFwZVZpZXdDYXJkcz1GLkNsclNoYXBlVmlld0xpc3Q9Ri5DbHJTaGFwZVN5bmM9Ri5DbHJTaGFwZVJlZnJlc2g9Ri5DbHJTaGFwZU5vdGU9Ri5DbHJTaGFwZVBlbmNpbD1GLkNs'@;
put 'clNoYXBlVGhlcm1vbWV0ZXI9Ri5DbHJTaGFwZUJ1Zz1GLkNsclNoYXBlU2Npc3NvcnM9Ri5DbHJTaGFwZUFzdGVyaXNrPUYuQ2xyU2hhcGVCb29rPUYuQ2xyU2hhcGVPYmplY3RzPUYuQ2xyU2hhcGVSZXNpemU9Ri5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz1GLkNsclNoYXBlQ3Vyc29ySGFu'@;
put 'ZD1GLkNsclNoYXBlQ3Vyc29yQXJyb3c9Ri5DbHJTaGFwZUdyaWRWaWV3PUYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj1GLkNsclNoYXBlTmV3PUYuQ2xyU2hhcGVBbGFybU9mZj1GLkNsclNoYXBlUGluYm9hcmQ9Ri5DbHJTaGFwZUFkZFRleHQ9dm9pZCAwLEYuQ2xyU2hhcGVDbG9uZT1G'@;
put 'LkNsclNoYXBlQ3Vyc29yTW92ZT1GLkNsclNoYXBlV2FuZD1GLkNsclNoYXBlU3VuPUYuQ2xyU2hhcGVNb29uPUYuQ2xyU2hhcGVGaWx0ZXIyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlPUYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQ9Ri5DbHJTaGFwZUNvbG9yUGlja2VyPUYuQ2xyU2hhcGVCcmll'@;
put 'ZmNhc2U9Ri5DbHJTaGFwZUV4cGFuZENhcmQ9Ri5DbHJTaGFwZUNvbGxhcHNlQ2FyZD1GLkNsclNoYXBlU29ydEJ5PUYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Mj1GLkNsclNoYXBlQWNjZXNzaWJpbGl0eTE9Ri5DbHJTaGFwZVNocmluaz1GLkNsclNoYXBlUGFwZXJjbGlwPUYuQ2xyU2hhcGVG'@;
put 'aWxlR3JvdXA9Ri5DbHJTaGFwZVJlcGVhdD1GLkNsclNoYXBlSWRCYWRnZT1GLkNsclNoYXBlQmFsYW5jZT1GLkNsclNoYXBlT3JnYW5pemF0aW9uPUYuQ2xyU2hhcGVOb0FjY2Vzcz1GLkNsclNoYXBlSG91cmdsYXNzPUYuQ2xyU2hhcGVGbGFtZT1GLkNsclNoYXBlVGFyZ2V0PUYuQ2xyU2hh'@;
put 'cGVCdWxsc2V5ZT1GLkNsclNoYXBlV3JlbmNoPUYuQ2xyU2hhcGVCb2x0PUYuQ2xyU2hhcGVMaWJyYXJ5PUYuQ2xyU2hhcGVLZXk9Ri5DbHJTaGFwZVpvb21PdXQ9Ri5DbHJTaGFwZVpvb21Jbj1GLkNsclNoYXBlV2luZG93UmVzdG9yZT1GLkNsclNoYXBlV2luZG93TWluPUYuQ2xyU2hhcGVX'@;
put 'aW5kb3dNYXg9Ri5DbHJTaGFwZVdpbmRvd0Nsb3NlPUYuQ2xyU2hhcGVUb29scz1GLkNsclNoYXBlU3dpdGNoPUYuQ2xyU2hhcGVUd29XYXlBcnJvd3M9Ri5DbHJTaGFwZUZpbGVTZXR0aW5ncz1GLkNsclNoYXBlU2Nyb2xsPUYuQ2xyU2hhcGVVbmRvPUYuQ2xyU2hhcGVSZWRvPUYuQ2xyU2hh'@;
put 'cGVMaXN0PUYuQ2xyU2hhcGVGaXJld2FsbD1GLkNsclNoYXBlQ2xpcGJvYXJkPUYuQ2xyU2hhcGVTbGlkZXI9Ri5DbHJTaGFwZVdvcmxkPUYuQ2xyU2hhcGVQcmludGVyPXZvaWQgMCxGLkVzc2VudGlhbFNoYXBlcz1GLkNsclNoYXBlQ29sb3JQYWxldHRlPUYuQ2xyU2hhcGVGaXJzdEFpZD1G'@;
put 'LkNsclNoYXBlQmV0YT1GLkNsclNoYXBlRG90Q2lyY2xlPUYuQ2xyU2hhcGVDaXJjbGU9Ri5DbHJTaGFwZUNyb3NzaGFpcnM9Ri5DbHJTaGFwZVZvbHVtZT1GLkNsclNoYXBlVGFibGU9Ri5DbHJTaGFwZVNub3dmbGFrZT1GLkNsclNoYXBlRnVlbD1GLkNsclNoYXBlRm9ybT1GLkNsclNoYXBl'@;
put 'RmlzaD1GLkNsclNoYXBlVHJlZT1GLkNsclNoYXBlUmVjeWNsZT1GLkNsclNoYXBlRmlsdGVyT2ZmPUYuQ2xyU2hhcGVGaWxlWmlwPUYuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj1GLkNsclNoYXBlQ3Vyc29ySGFuZEdyYWI9Ri5DbHJTaGFwZVRyZWVWaWV3PUYuQ2xyU2hhcGVQb3J0cmFpdD1G'@;
put 'LkNsclNoYXBlUGFzdGU9Ri5DbHJTaGFwZUxhbmRzY2FwZT1GLkNsclNoYXBlRXJhc2VyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPUYuQ2xyU2hhcGVEZXRhaWxzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsZT1hZSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO0YuQ2xyU2hhcGVBZGRUZXh0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYz'@;
put 'LjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxGLkNsclNoYXBlUGluYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMz'@;
put 'LjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUx'@;
put 'LDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjlj'@;
put 'Ljc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAs'@;
put 'MCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTIt'@;
put 'Ljg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLEYuQ2xyU2hh'@;
put 'cGVBbGFybU9mZj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40'@;
put 'NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45'@;
put 'MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIu'@;
put 'NzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0'@;
put 'LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEu'@;
put 'NDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1'@;
put 'LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wx'@;
put 'NywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43'@;
put 'Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQu'@;
put 'MTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLEYuQ2xyU2hhcGVOZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkz'@;
put 'LDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIu'@;
put 'ODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41'@;
put 'MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41'@;
put 'IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41'@;
put 'MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMu'@;
put 'MzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEu'@;
put 'MzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLEYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44Miww'@;
put 'LTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4z'@;
put 'NC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz'@;
put 'LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEs'@;
put 'MSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLEYuQ2xyU2hhcGVHcmlkVmlldz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAs'@;
put 'MCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIs'@;
put 'MiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0y'@;
put 'VjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIs'@;
put 'MCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIi'@;
put 'IGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JBcnJvdz0o'@;
put 'MCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcs'@;
put 'OC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2'@;
put 'YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwy'@;
put 'LjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JIYW5k'@;
put 'PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMu'@;
put 'NCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3'@;
put 'LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQu'@;
put 'MTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1'@;
put 'LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1'@;
put 'VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0u'@;
put 'NDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkz'@;
put 'LDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksRi5DbHJTaGFwZUN1'@;
put 'cnNvckhhbmRDbGljaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTEx'@;
put 'LjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywx'@;
put 'LjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYs'@;
put 'MTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUu'@;
put 'MkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4z'@;
put 'LTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYz'@;
put 'bDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAg'@;
put 'ICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksRi5DbHJTaGFwZVJlc2l6ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksRi5DbHJTaGFwZU9iamVjdHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0w'@;
put 'LDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEs'@;
put 'MSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwx'@;
put 'djRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxGLkNs'@;
put 'clNoYXBlQm9vaz0oMCxtLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlh'@;
put 'MSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5'@;
put 'Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjks'@;
put 'OFoiLz4nKSxGLkNsclNoYXBlQXN0ZXJpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00'@;
put 'LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMs'@;
put 'MCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcy'@;
put 'TDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwy'@;
put 'MC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQs'@;
put 'MS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksRi5DbHJTaGFwZVNjaXNzb3JzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwx'@;
put 'Ljc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2'@;
put 'LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYs'@;
put 'MCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0z'@;
put 'LjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksRi5DbHJTaGFwZUJ1Zz0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIy'@;
put 'LjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40'@;
put 'Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJh'@;
put 'MSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMu'@;
put 'NjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4x'@;
put 'Ny0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMs'@;
put 'My4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAs'@;
put 'Mkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0'@;
put 'bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgs'@;
put 'MS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwx'@;
put 'LjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDku'@;
put 'MDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLEYuQ2xyU2hhcGVU'@;
put 'aGVybW9tZXRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4z'@;
put 'Ni00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxGLkNsclNoYXBlUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwy'@;
put 'OCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wx'@;
put 'Ljc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUs'@;
put 'Mi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcy'@;
put 'LDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLEYuQ2xyU2hhcGVOb3RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAs'@;
put 'MCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAs'@;
put 'MCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2'@;
put 'LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIs'@;
put 'MiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVSZWZyZXNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAs'@;
put 'MSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLEYuQ2xyU2hhcGVTeW5jPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAs'@;
put 'MiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45'@;
put 'NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwx'@;
put 'LDAsMCwwLDMwLjA2LDFaIi8+JyksRi5DbHJTaGFwZVZpZXdMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIx'@;
put 'NCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCww'@;
put 'LDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLEYuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9'@;
put 'Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwx'@;
put 'N0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRh'@;
put 'MiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIs'@;
put 'MiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLEYuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgs'@;
put 'MTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEt'@;
put 'MS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4x'@;
put 'OSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSww'@;
put 'LDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEz'@;
put 'LTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwx'@;
put 'LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1'@;
put 'LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44Ljgs'@;
put 'MCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAs'@;
put 'MCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSww'@;
put 'LDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywz'@;
put 'LjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEz'@;
put 'bC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44Ljgs'@;
put 'MCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlRG93bmxvYWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJI'@;
put 'MzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDgu'@;
put 'ODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2'@;
put 'YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJTaGFwZVVwbG9hZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44'@;
put 'MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEz'@;
put 'LjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9'@;
put 'Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEs'@;
put 'MjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwx'@;
put 'NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVMb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIs'@;
put 'MCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMy'@;
put 'YTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksRi5DbHJTaGFwZVVubG9jaz0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIs'@;
put 'MCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgy'@;
put 'MFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxGLkNsclNoYXBlVXNlcnM9KDAsbS5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcu'@;
put 'M3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVo'@;
put 'MnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIu'@;
put 'MiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4y'@;
put 'LDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4'@;
put 'aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMw'@;
put 'LTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0x'@;
put 'LjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44'@;
put 'LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0w'@;
put 'LjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4w'@;
put 'OSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x'@;
put 'MywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2'@;
put 'Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUu'@;
put 'Mjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAs'@;
put 'MSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMu'@;
put 'NjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEs'@;
put 'NC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42'@;
put 'NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi'@;
put 'IGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcs'@;
put 'Mi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4y'@;
put 'OHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwx'@;
put 'LDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCww'@;
put 'LDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJN'@;
put 'MjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42'@;
put 'Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAu'@;
put 'M0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2'@;
put 'LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCww'@;
put 'LDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0'@;
put 'ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFs'@;
put 'ZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcs'@;
put 'OWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4y'@;
put 'MywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2'@;
put 'LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjgu'@;
put 'NTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4w'@;
put 'OSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wy'@;
put 'NS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSww'@;
put 'LDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUG9wT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNI'@;
put 'NWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjku'@;
put 'NTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxGLkNsclNoYXBlRmlsdGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEs'@;
put 'MSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSww'@;
put 'LDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAs'@;
put 'MCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTku'@;
put 'MTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBpbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5'@;
put 'QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4y'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwx'@;
put 'LjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksRi5DbHJTaGFwZUZpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUu'@;
put 'OTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUu'@;
put 'NFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww'@;
put 'LDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEu'@;
put 'ODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1'@;
put 'LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJo'@;
put 'MTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLEYuQ2xyU2hhcGVQbHVzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxGLkNsclNo'@;
put 'YXBlTWludXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41'@;
put 'LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdI'@;
put 'OS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCww'@;
put 'LDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTgu'@;
put 'NDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicp'@;
put 'LEYuQ2xyU2hhcGVCYW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1'@;
put 'LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLEYuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'ZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4w'@;
put 'OCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLEYuQ2xyU2hhcGVUcmFzaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'ZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEz'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAu'@;
put 'NzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxGLkNsclNoYXBlVGFnPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCww'@;
put 'LDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIi'@;
put 'IHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEs'@;
put 'MS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTku'@;
put 'OUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwy'@;
put 'LDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0'@;
put 'LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwx'@;
put 'NC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVUYWdzPSgwLG0uY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEEx'@;
put 'LjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5'@;
put 'LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMx'@;
put 'LjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1i'@;
put 'YWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRI'@;
put 'MjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5'@;
put 'LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMs'@;
put 'MS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMu'@;
put 'NjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEw'@;
put 'LDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4'@;
put 'LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42Nywx'@;
put 'MS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2Ex'@;
put 'LjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjcz'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEy'@;
put 'LjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEs'@;
put 'MSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI'@;
put 'MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksRi5DbHJTaGFwZUhpc3Rvcnk9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksRi5DbHJTaGFwZUNsb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCww'@;
put 'LDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCww'@;
put 'LDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEy'@;
put 'LjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4x'@;
put 'OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwz'@;
put 'LjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww'@;
put 'LDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2'@;
put 'LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwy'@;
put 'OS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwy'@;
put 'NC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwx'@;
put 'Ni4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEu'@;
put 'NjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTls'@;
put 'MS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4'@;
put 'LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTks'@;
put 'MTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAs'@;
put 'MCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjks'@;
put 'MTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEs'@;
put 'MSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4'@;
put 'LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3'@;
put 'LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2'@;
put 'YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1'@;
put 'LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMy'@;
put 'LDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUu'@;
put 'MjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIs'@;
put 'MEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFw'@;
put 'ZUNoaWxkQXJyb3c9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEs'@;
put 'MSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvcHk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYy'@;
put 'NEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41'@;
put 'QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYs'@;
put 'MCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0i'@;
put 'MjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlSGVscD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMw'@;
put 'QTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45'@;
put 'MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjlo'@;
put 'LjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgi'@;
put 'IGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4z'@;
put 'Mi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAs'@;
put 'MCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9'@;
put 'IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40'@;
put 'NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEu'@;
put 'NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x'@;
put 'LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs'@;
put 'Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwx'@;
put 'LDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0x'@;
put 'LjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwx'@;
put 'OS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTG9naW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt'@;
put 'MlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4'@;
put 'LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQx'@;
put 'LTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVMb2dvdXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0y'@;
put 'LTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIy'@;
put 'SDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAs'@;
put 'MCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4'@;
put 'LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlUHJpbnRlcj0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAt'@;
put 'MlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQg'@;
put 'MzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4x'@;
put 'My0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy'@;
put 'Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjci'@;
put 'IHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1Yx'@;
put 'M0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIy'@;
put 'LjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZW'@;
put 'MTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwx'@;
put 'OS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0x'@;
put 'SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i'@;
put 'MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVXb3JsZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRo'@;
put 'My42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEu'@;
put 'ODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4z'@;
put 'N0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcu'@;
put 'OSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5'@;
put 'LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFh'@;
put 'Ny40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQu'@;
put 'NzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAs'@;
put 'MCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTku'@;
put 'MzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4z'@;
put 'NmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1'@;
put 'VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVj'@;
put 'LS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIs'@;
put 'MCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRj'@;
put 'LjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4'@;
put 'LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2'@;
put 'LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYs'@;
put 'MjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjku'@;
put 'NTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjky'@;
put 'LDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4'@;
put 'YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44'@;
put 'Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcu'@;
put 'NDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVTbGlkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43'@;
put 'OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCww'@;
put 'LDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIs'@;
put 'MCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMu'@;
put 'MjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMu'@;
put 'MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMu'@;
put 'MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMx'@;
put 'QTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIu'@;
put 'MzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEx'@;
put 'IiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIy'@;
put 'NiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCww'@;
put 'VjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNyww'@;
put 'LDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5'@;
put 'VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEu'@;
put 'MzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4z'@;
put 'MVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCww'@;
put 'LDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZUZpcmV3YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMy'@;
put 'djYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEy'@;
put 'LDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhI'@;
put 'MjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45'@;
put 'VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi'@;
put 'IHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy'@;
put 'LDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhI'@;
put 'MTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRI'@;
put 'NFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdW'@;
put 'MTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9'@;
put 'IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwz'@;
put 'MEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0i'@;
put 'OSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIx'@;
put 'MSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5'@;
put 'LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy'@;
put 'LDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0x'@;
put 'MywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZI'@;
put 'MTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt'@;
put 'LWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVSZWRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVVbmRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40'@;
put 'Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVTY3JvbGw9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAs'@;
put 'NC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYt'@;
put 'Mi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww'@;
put 'djQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAs'@;
put 'Ni41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4'@;
put 'YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2'@;
put 'LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk'@;
put 'Z2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMu'@;
put 'MTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwx'@;
put 'NS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41'@;
put 'LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMu'@;
put 'NUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEu'@;
put 'MTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGEx'@;
put 'LjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0'@;
put 'LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiww'@;
put 'LDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQy'@;
put 'LTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIx'@;
put 'LDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMu'@;
put 'MDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTIt'@;
put 'MSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQu'@;
put 'MDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZW'@;
put 'NUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCww'@;
put 'LS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCww'@;
put 'LS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44Mywx'@;
put 'LjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmEx'@;
put 'LjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCww'@;
put 'LDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEt'@;
put 'MS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4y'@;
put 'Myw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5'@;
put 'LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2'@;
put 'LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4x'@;
put 'NSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3'@;
put 'LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCww'@;
put 'LDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0x'@;
put 'LjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2'@;
put 'LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4'@;
put 'bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEs'@;
put 'MSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAs'@;
put 'NC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t'@;
put 'YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgy'@;
put 'NnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCww'@;
put 'LDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0u'@;
put 'MjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJh'@;
put 'LjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVW'@;
put 'MjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu'@;
put 'NTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3'@;
put 'LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCww'@;
put 'LC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2'@;
put 'bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwz'@;
put 'My41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1'@;
put 'LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJh'@;
put 'LjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3'@;
put 'LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu'@;
put 'MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNyww'@;
put 'LDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksRi5DbHJTaGFwZVR3b1dheUFycm93'@;
put 'cz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMu'@;
put 'MjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5'@;
put 'LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4y'@;
put 'MSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVUb29scz0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYy'@;
put 'OGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgx'@;
put 'NmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4Ljky'@;
put 'LDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCww'@;
put 'LDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4'@;
put 'LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4n'@;
put 'KSxGLkNsclNoYXBlV2luZG93TWF4PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVdpbmRvd01pbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz4nKSxGLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIC8+JyksRi5DbHJTaGFwZVpvb21Jbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv'@;
put 'PicpLEYuQ2xyU2hhcGVab29tT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlS2V5PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMi'@;
put 'IHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcu'@;
put 'NDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4'@;
put 'LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykg'@;
put 'cm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwy'@;
put 'OC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03'@;
put 'LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy'@;
put 'dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEg'@;
put 'MTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4w'@;
put 'NywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywz'@;
put 'LDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUs'@;
put 'NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUu'@;
put 'NjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjgu'@;
put 'MjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAs'@;
put 'MC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCww'@;
put 'LDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu'@;
put 'MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwz'@;
put 'LjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFM'@;
put 'MTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlTGlicmFyeT0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBh'@;
put 'MSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJT'@;
put 'aGFwZUJvbHQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGEx'@;
put 'LDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1'@;
put 'aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVXcmVuY2g9KDAsbS5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCww'@;
put 'LDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4'@;
put 'LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJv'@;
put 'dGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSww'@;
put 'LDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUJ1bGxzZXllPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwy'@;
put 'LjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgs'@;
put 'NC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42'@;
put 'LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjks'@;
put 'NC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQu'@;
put 'MDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlVGFy'@;
put 'Z2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcs'@;
put 'MCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'OCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVGbGFtZT0o'@;
put 'MCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMs'@;
put 'MjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4y'@;
put 'MSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0'@;
put 'LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44'@;
put 'Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgy'@;
put 'Mi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43Nyww'@;
put 'LS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxG'@;
put 'LkNsclNoYXBlSG91cmdsYXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAs'@;
put 'MjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJI'@;
put 'N2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0u'@;
put 'NjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5'@;
put 'LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4z'@;
put 'Niw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAs'@;
put 'MCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEs'@;
put 'MCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMTho'@;
put 'MGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEu'@;
put 'MjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0'@;
put 'LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42'@;
put 'Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBh'@;
put 'Ni4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwx'@;
put 'LDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4w'@;
put 'NywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1'@;
put 'TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2'@;
put 'LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQu'@;
put 'NTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu'@;
put 'MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'YWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcs'@;
put 'NEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkx'@;
put 'LTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwx'@;
put 'MS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZU5vQWNjZXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0'@;
put 'LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3'@;
put 'LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4y'@;
put 'NSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYu'@;
put 'ODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZU9yZ2Fu'@;
put 'aXphdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4'@;
put 'LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIx'@;
put 'Ljg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0'@;
put 'IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZUJhbGFuY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEu'@;
put 'Ni44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCww'@;
put 'LDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTgu'@;
put 'MTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLEYuQ2xyU2hhcGVJZEJhZGdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAs'@;
put 'MCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiww'@;
put 'LDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAs'@;
put 'MCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y'@;
put 'Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4'@;
put 'LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y'@;
put 'OCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYu'@;
put 'ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2Ex'@;
put 'LjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJW'@;
put 'MzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEw'@;
put 'LjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4y'@;
put 'MyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAs'@;
put 'MCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAs'@;
put 'MCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgi'@;
put 'IGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwx'@;
put 'MC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41'@;
put 'QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZVJlcGVhdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4y'@;
put 'OCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02'@;
put 'LjFsLTIsMi4xMloiLz4nKSxGLkNsclNoYXBlRmlsZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFW'@;
put 'MzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg'@;
put 'ZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4Vjdh'@;
put 'MSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLEYuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMyww'@;
put 'LDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYs'@;
put 'MzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUt'@;
put 'LjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEs'@;
put 'MjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLEYuQ2xyU2hhcGVTaHJpbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0z'@;
put 'MiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEs'@;
put 'MCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksRi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43'@;
put 'LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4x'@;
put 'Miw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42'@;
put 'MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgs'@;
put 'MS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4y'@;
put 'OSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwx'@;
put 'MS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43'@;
put 'Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWEx'@;
put 'LDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcu'@;
put 'OTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCww'@;
put 'LC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVNvcnRCeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAt'@;
put 'Mmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEs'@;
put 'MSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAt'@;
put 'MS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAs'@;
put 'MC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9'@;
put 'IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4z'@;
put 'N2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjds'@;
put 'NC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEs'@;
put 'MSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcu'@;
put 'NzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcu'@;
put 'MzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43'@;
put 'OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQnJpZWZjYXNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQs'@;
put 'Ni43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYx'@;
put 'OEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43'@;
put 'YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEs'@;
put 'LjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1'@;
put 'LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4w'@;
put 'NywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBh'@;
put 'dGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42'@;
put 'LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAs'@;
put 'MCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwx'@;
put 'Ni43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQu'@;
put 'MDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcu'@;
put 'MzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0'@;
put 'aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43'@;
put 'MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgy'@;
put 'OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUg'@;
put 'Y3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9'@;
put 'IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVGaWx0ZXIyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2Ex'@;
put 'LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZU1vb249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQu'@;
put 'OTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwx'@;
put 'LDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIu'@;
put 'MDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZVN1bj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0x'@;
put 'OCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5'@;
put 'LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwx'@;
put 'LDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQx'@;
put 'YTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAs'@;
put 'MC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAu'@;
put 'MDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45'@;
put 'MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2'@;
put 'LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYu'@;
put 'NDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwy'@;
put 'Ni4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTks'@;
put 'OC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLEYuQ2xyU2hhcGVXYW5kPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwy'@;
put 'LjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMt'@;
put 'NS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywx'@;
put 'LjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41'@;
put 'MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAs'@;
put 'MCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wx'@;
put 'LjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksRi5DbHJTaGFwZUN1cnNvck1vdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUu'@;
put 'ODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFM'@;
put 'MTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz4nKSxGLkNsclNoYXBlQ2xvbmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIx'@;
put 'IDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCww'@;
put 'LDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwz'@;
put 'MCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRGV0YWlscz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCww'@;
put 'LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCww'@;
put 'LDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwx'@;
put 'LDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'Lz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBj'@;
put 'eD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVFcmFzZXI9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0'@;
put 'bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBs'@;
put 'Ny4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCww'@;
put 'LDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgs'@;
put 'MTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlTGFuZHNjYXBlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwy'@;
put 'SDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wt'@;
put 'MS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0x'@;
put 'LjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs'@;
put 'MCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0u'@;
put 'MzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBhc3RlPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJh'@;
put 'MiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0i'@;
put 'MiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQb3J0cmFpdD0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgt'@;
put 'MS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCww'@;
put 'LDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0y'@;
put 'VjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1'@;
put 'LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlVHJlZVZpZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAs'@;
put 'MS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2Ex'@;
put 'LDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJI'@;
put 'NFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEs'@;
put 'MCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAs'@;
put 'MC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2'@;
put 'LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01'@;
put 'LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwx'@;
put 'LDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJj'@;
put 'LjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4y'@;
put 'OC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMu'@;
put 'MTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwu'@;
put 'NDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZh'@;
put 'MS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVGaWxlWmlw'@;
put 'PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMw'@;
put 'LDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0x'@;
put 'My40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5'@;
put 'YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQs'@;
put 'MSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45'@;
put 'LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAu'@;
put 'NCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2'@;
put 'MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlsdGVyT2ZmPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJI'@;
put 'MzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIu'@;
put 'MSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVSZWN5Y2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAu'@;
put 'NS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42'@;
put 'LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0'@;
put 'XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43'@;
put 'LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAu'@;
put 'My0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAs'@;
put 'MC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4x'@;
put 'Yy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4y'@;
put 'LDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEu'@;
put 'OCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEt'@;
put 'MC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45'@;
put 'LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwt'@;
put 'Ni4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRj'@;
put 'LTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIy'@;
put 'LjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlVHJlZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0x'@;
put 'MywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40'@;
put 'LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQu'@;
put 'OSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcu'@;
put 'NywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wz'@;
put 'LjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBk'@;
put 'PSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlzaD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xl'@;
put 'IGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43'@;
put 'NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZj'@;
put 'LTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBh'@;
put 'MjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkEx'@;
put 'LDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVGb3JtPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwx'@;
put 'LDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCww'@;
put 'LDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFh'@;
put 'MSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMz'@;
put 'LjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCww'@;
put 'LDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlRnVl'@;
put 'bD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcu'@;
put 'ODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUs'@;
put 'My41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCww'@;
put 'LDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEs'@;
put 'MSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVTbm93Zmxha2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSww'@;
put 'LDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwx'@;
put 'LDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAu'@;
put 'ODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEs'@;
put 'MSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwy'@;
put 'LjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQu'@;
put 'OCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAs'@;
put 'MCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4y'@;
put 'NiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxw'@;
put 'YXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxGLkNsclNo'@;
put 'YXBlVGFibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAs'@;
put 'MCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45'@;
put 'NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCww'@;
put 'LDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN'@;
put 'MjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxGLkNsclNoYXBlQ3Jv'@;
put 'c3NoYWlycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwx'@;
put 'LDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQs'@;
put 'MTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJT'@;
put 'aGFwZURvdENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCww'@;
put 'LDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVCZXRhPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYx'@;
put 'LDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1'@;
put 'Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4z'@;
put 'OC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcu'@;
put 'MDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgx'@;
put 'OVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwx'@;
put 'Ny41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0w'@;
put 'LjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40'@;
put 'LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjkt'@;
put 'MC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4y'@;
put 'aC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC00Ii8+XG4nKSxGLkNsclNoYXBlRmlyc3RBaWQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy'@;
put 'LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgx'@;
put 'Ni43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCww'@;
put 'LDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQu'@;
put 'NWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41'@;
put 'aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxGLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSww'@;
put 'LDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEu'@;
put 'MUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAt'@;
put 'NC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgt'@;
put 'LjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYs'@;
put 'NCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4z'@;
put 'OS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5'@;
put 'LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAs'@;
put 'MCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYs'@;
put 'MS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwx'@;
put 'NS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgs'@;
put 'MSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43'@;
put 'OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwx'@;
put 'LC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwx'@;
put 'LjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEs'@;
put 'MCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAs'@;
put 'MCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQu'@;
put 'MUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIz'@;
put 'LDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwy'@;
put 'LjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4'@;
put 'LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEt'@;
put 'Mi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIs'@;
put 'My4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOkYuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYi'@;
put 'OkYuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpGLkNsclNoYXBlUGluYm9hcmQsbmV3OkYuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Ri5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOkYuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpGLkNs'@;
put 'clNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpGLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOkYuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOkYuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Ri5D'@;
put 'bHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Ri5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Ri5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpGLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Ri5DbHJTaGFwZU9iamVjdHMsYm9vazpGLkNsclNoYXBlQm9vayxhc3Rlcmlz'@;
put 'azpGLkNsclNoYXBlQXN0ZXJpc2ssYnVnOkYuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Ri5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOkYuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Ri5DbHJTaGFwZVBlbmNpbCxub3RlOkYuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Ri5DbHJTaGFwZVJl'@;
put 'ZnJlc2gsc3luYzpGLkNsclNoYXBlU3luYywidmlldy1saXN0IjpGLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOkYuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Ri5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpGLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOkYuQ2xy'@;
put 'U2hhcGVEb3dubG9hZCx1cGxvYWQ6Ri5DbHJTaGFwZVVwbG9hZCxsb2NrOkYuQ2xyU2hhcGVMb2NrLHVubG9jazpGLkNsclNoYXBlVW5sb2NrLHVzZXJzOkYuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Ri5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6Ri5DbHJTaGFwZUZpbHRlcixwaW46Ri5DbHJT'@;
put 'aGFwZVBpbixmaWxlOkYuQ2xyU2hhcGVGaWxlLHBsdXM6Ri5DbHJTaGFwZVBsdXMsbWludXM6Ri5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOkYuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOkYuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpGLkNsclNoYXBlQmFuLCJ0aW1l'@;
put 'cy1jaXJjbGUiOkYuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpGLkNsclNoYXBlVHJhc2gsY2lyY2xlOkYuQ2xyU2hhcGVDaXJjbGUsdGFnOkYuQ2xyU2hhcGVUYWcsdGFnczpGLkNsclNoYXBlVGFncyxoaXN0b3J5OkYuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOkYuQ2xyU2hhcGVDbG9jaywi'@;
put 'YWxhcm0tY2xvY2siOkYuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OmxlLkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6Ri5DbHJTaGFwZUNpcmNsZUFycm93LCJjaGlsZC1hcnJvdyI6Ri5DbHJTaGFwZUNoaWxkQXJyb3csY29weTpGLkNsclNoYXBlQ29weSxoZWxwOkYuQ2xyU2hhcGVI'@;
put 'ZWxwLGxvZ2luOkYuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6Ri5DbHJTaGFwZUxvZ291dCxwcmludGVyOkYuQ2xyU2hhcGVQcmludGVyLHdvcmxkOkYuQ2xyU2hhcGVXb3JsZCxzbGlkZXI6Ri5DbHJTaGFwZVNsaWRlcixjbGlwYm9hcmQ6Ri5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpGLkNs'@;
put 'clNoYXBlRmlyZXdhbGwsbGlzdDpGLkNsclNoYXBlTGlzdCxyZWRvOkYuQ2xyU2hhcGVSZWRvLHVuZG86Ri5DbHJTaGFwZVVuZG8sc2Nyb2xsOkYuQ2xyU2hhcGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOkYuQ2xyU2hhcGVGaWxlU2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpGLkNsclNoYXBl'@;
put 'VHdvV2F5QXJyb3dzLHN3aXRjaDpGLkNsclNoYXBlU3dpdGNoLHRvb2xzOkYuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpGLkNsclNoYXBlV2luZG93Q2xvc2UsIndpbmRvdy1tYXgiOkYuQ2xyU2hhcGVXaW5kb3dNYXgsIndpbmRvdy1taW4iOkYuQ2xyU2hhcGVXaW5kb3dNaW4sIndp'@;
put 'bmRvdy1yZXN0b3JlIjpGLkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6Ri5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOkYuQ2xyU2hhcGVab29tT3V0LGtleTpGLkNsclNoYXBlS2V5LGxpYnJhcnk6Ri5DbHJTaGFwZUxpYnJhcnksYm9sdDpGLkNsclNoYXBlQm9sdCx3cmVuY2g6'@;
put 'Ri5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpGLkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OkYuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6Ri5DbHJTaGFwZUZsYW1lLGhvdXJnbGFzczpGLkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nlc3MiOkYuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246'@;
put 'Ri5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOkYuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6Ri5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OkYuQ2xyU2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOkYuQ2xyU2hhcGVGaWxlR3JvdXAscGFwZXJjbGlwOkYuQ2xyU2hhcGVQYXBlcmNsaXAs'@;
put 'c2hyaW5rOkYuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6Ri5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOkYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6Ri5DbHJTaGFwZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6Ri5DbHJTaGFwZUNv'@;
put 'bGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOkYuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpGLkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIiOkYuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9hcmQiOkYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRl'@;
put 'ci0yIjpGLkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOkYuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246Ri5DbHJTaGFwZU1vb24sc3VuOkYuQ2xyU2hhcGVTdW4sd2FuZDpGLkNsclNoYXBlV2FuZCxjbG9uZTpGLkNsclNoYXBlQ2xvbmUsZGV0YWlsczpGLkNsclNoYXBlRGV0YWlscywi'@;
put 'ZHJhZy1oYW5kbGUtY29ybmVyIjpGLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6Ri5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6Ri5DbHJTaGFwZUxhbmRzY2FwZSxwYXN0ZTpGLkNsclNoYXBlUGFzdGUscG9ydHJhaXQ6Ri5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6Ri5D'@;
put 'bHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOkYuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpGLkNsclNoYXBlUmVjeWNsZSx0cmVlOkYuQ2xyU2hhcGVUcmVlLGZpc2g6Ri5DbHJTaGFwZUZpc2gsZm9ybTpGLkNsclNoYXBlRm9ybSxmdWVsOkYuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpG'@;
put 'LkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOkYuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6Ri5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6Ri5DbHJTaGFwZVZvbHVtZSxjcm9zc2hhaXJzOkYuQ2xyU2hhcGVDcm9zc2hhaXJzLGJldGE6Ri5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUi'@;
put 'OkYuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsIm5v'@;
put 'dGUtZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJncm91cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYWRkIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50'@;
put 'aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAs'@;
put 'eC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24taW4iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywibGlnaHRuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcp'@;
put 'KEYuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50'@;
put 'aWFsU2hhcGVzLCJhbGVydCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInBpbm5lZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlh'@;
put 'bFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMs'@;
put 'ImF0dGFjaG1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5zaHJp'@;
put 'bmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYm'@;
put 'd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAg'@;
put 'ICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlv'@;
put 'bihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuTWVkaWFTaGFwZXM9Ri5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPUYuQ2xyU2hhcGVNaWNyb3Bob25lPUYuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Ri5DbHJTaGFw'@;
put 'ZVJlcGxheU9uZT1GLkNsclNoYXBlUmVwbGF5QWxsPUYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Ri5DbHJTaGFwZU11c2ljTm90ZT1GLkNsclNoYXBlRmlsbVN0cmlwPUYuQ2xyU2hhcGVIZWFkcGhvbmVzPUYuQ2xyU2hhcGVWb2x1bWVNdXRlPUYuQ2xyU2hhcGVWb2x1bWVVcD1GLkNsclNoYXBl'@;
put 'Vm9sdW1lRG93bj1GLkNsclNoYXBlU2h1ZmZsZT1GLkNsclNoYXBlVmlkZW9DYW1lcmE9Ri5DbHJTaGFwZUNhbWVyYT1GLkNsclNoYXBlRmFzdEZvcndhcmQ9Ri5DbHJTaGFwZVJld2luZD1GLkNsclNoYXBlUG93ZXI9Ri5DbHJTaGFwZVN0b3A9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkPUYuQ2xy'@;
put 'U2hhcGVQYXVzZT1GLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlUGxheT0oMCx4LmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguMDcsMzEuNkEyLjA3LDIuMDcsMCwwLDEsNiwyOS41M1Y2LjMyQTIuMDcsMi4wNywwLDAsMSw5LDQuNDdMMzIuMjEsMTYuMDhhMi4wNywyLjA3LDAsMCwxLDAsMy43TDksMzEuMzhBMi4wNiwyLjA2LDAs'@;
put 'MCwxLDguMDcsMzEuNlptMC0yNS4zNEw4LDYuMzJWMjkuNTNsLjEuMDZMMzEuMzEsMThhLjA2LjA2LDAsMCwwLDAtLjA2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxNi4wOCw4Ljk0LDQuNDdBMi4w'@;
put 'NywyLjA3LDAsMCwwLDYsNi4zMlYyOS41M2EyLjA2LDIuMDYsMCwwLDAsMywxLjg1TDMyLjE2LDE5Ljc3YTIuMDcsMi4wNywwLDAsMCwwLTMuN1oiLz4nKSxGLkNsclNoYXBlUGF1c2U9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xMi45MywzMkg2LjA3QTIuMDcsMi4wNywwLDAsMSw0LDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDYuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwxNSw2LjA3VjI5LjkzQTIuMDcsMi4wNywwLDAsMSwxMi45MywzMlpNMTMsNkg2VjMwaDdaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOS45MywzMkgyMy4wN0EyLjA3LDIuMDcsMCwwLDEsMjEsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsMjMuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwzMiw2LjA3VjI5LjkzQTIu'@;
put 'MDcsMi4wNywwLDAsMSwyOS45MywzMlpNMzAsNkgyM1YzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+JyksRi5DbHJTaGFwZVN0ZXBGb3J3YXJkPSgwLHguY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNSwzMi4yM2EyLDIsMCwwLDEtMi0yVjUuNzdBMiwyLDAsMCwxLDYuMTcsNC4xNEwyMy4yMywxNi4zOGEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xNywzMS44NkEyLDIsMCwwLDEsNSwzMi4yM1pNNSw1Ljc3'@;
put 'VjMwLjIzTDIyLjA3LDE4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzEsMzJIMjhhMiwyLDAsMCwxLTItMlY2YTIsMiwwLDAsMSwyLTJoM2EyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMSwzMlpN'@;
put 'MjgsNlYzMGgzVjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUsMzEuOWEyLDIsMCwwLDEtMi0yVjUuNDRBMiwyLDAsMCwxLDYuMTIsMy44MUwyMy4xOCwxNmEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xMiwzMS41'@;
put 'MkEyLDIsMCwwLDEsNSwzMS45WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjI1Ljk1IiB5PSIzLjY3IiB3aWR0aD0iNyIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksRi5DbHJTaGFwZVN0b3A9KDAseC5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMkg2YTIsMiwwLDAsMS0yLTJWNkEyLDIsMCwwLDEsNiw0SDMwYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMwLDMyWk02LDZWMzBIMzBWNloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk2IiB5PSI0IiB3aWR0aD0iMjcuOTkiIGhlaWdodD0iMjgiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVQb3dlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4'@;
put 'LDM0LjE1YTE1LDE1LDAsMCwxLTcuNTItMjgsMSwxLDAsMCwxLDEsMS43MywxMywxMywwLDEsMCwxMywwLDEsMSwwLDEsMSwxLTEuNzMsMTUsMTUsMCwwLDEtNy41MiwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMCwxLTFWNGExLDEsMCwwLDAtMiwwVjIwQTEsMSwwLDAsMCwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCIgZD0iTTMyLjUxLDE1LjRIMzAuNDRhMTMsMTMsMCwxLDEtMTktNy41LDEsMSwwLDAsMC0xLTEuNzNBMTUsMTUsMCwxLDAsMzMsMTkuMTUsMTQuOSwxNC45LDAsMCwwLDMyLjUxLDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwyMWExLDEsMCwwLDEtMS0xVjRhMSwxLDAsMCwxLDIsMFYyMEExLDEsMCwwLDEsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWwtLjMxLDBBMTMsMTMsMCwxLDEsMTEuNDgsNy45YTEsMSwwLDAsMC0xLTEuNzMsMTUsMTUsMCwxLDAsMjEuMzEsNy4xQTcuNDksNy40OSwwLDAsMSwzMCwxMy41'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLjA2LDE3LjY4YTEuMjgsMS4yOCwwLDAsMS0xLjI5LTEuMjhWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwVjE4LjRBMS4yOCwxLjI4LDAsMCwxLDE4LjA2LDE5LjY4Wk0x'@;
put 'OCwyNy43OUE5Ljg4LDkuODgsMCwwLDEsMTIuMTcsOS44NWExLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjQsMS40LDAs'@;
put 'MCwxLDEuOTQtLjI5QTkuODgsOS44OCwwLDAsMSwxOCwyNy43OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtNkE5LjcsOS43LDAsMCwxLDI4LDE3Ljg5YTEw'@;
put 'LDEwLDAsMSwxLTE1LjgzLTgsMS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAsMTEuNDMsNS44LDcuMDgsNy4wOCwwLDAsMC0uNDUtMi40OUgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTR2NC40YTEuMjksMS4yOSwwLDAs'@;
put 'MS0yLjU4LDBWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwdi43MWwzLjc2LTYuNTFBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMy41Ny0uOUE5LjgzLDkuODMsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywx'@;
put 'LjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjM4LDEuMzgsMCwwLDEsMS41Mi0uNDksNy40NSw3LjQ1LDAsMCwxLS4zLTYuODMsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5'@;
put 'LjkzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi43Nyw4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNGExLjI5LDEuMjksMCwwLDEtMi41OCwwWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUmV3aW5kPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuMDksMzEuNThsLTE1LjMyLTEyYTIsMiwwLDAs'@;
put 'MSwwLTMuMTVsMTUuMzItMTJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTEuNzcsMS43NywwLDAsMSwyMCw2djYuN0wzMC44Myw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzQsNlYzMGEyLDIsMCwwLDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4y'@;
put 'MkwyMCwyMy4zMVYzMGExLjc3LDEuNzcsMCwwLDEtLjg1LDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWk0zMiwzMGwuMDYtMjRMMTgsMTYuOFY2TDMsMTgsMTgsMzBWMTkuMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik0xNi45MiwzMS41OCwxLjYsMTkuNTdhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMkExLjkzLDEuOTMsMCwwLDEsMTksNC4yLDEuODksMS44OSwwLDAsMSwyMCw2djYuN0wzMC42Niw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzMuODMsNlYzMGEyLDIsMCww'@;
put 'LDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMkwyMCwyMy4zMVYzMGExLjg5LDEuODksMCwwLDEtMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMloiLz4nKSxGLkNsclNoYXBlRmFzdEZvcndhcmQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy43NywzMS45MmEyLDIsMCwwLDEtLjg2LS4yQTEuODEsMS44MSwwLDAsMSwxNiwyOS45M3YtNi43TDUuMjQsMzEuNWExLjk0LDEuOTQsMCwwLDEtMi4wNi4yMiwyLDIsMCwwLDEtMS4xMS0xLjc5di0yNEEyLDIsMCwwLDEsMy4xOCw0'@;
put 'LjEyYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjYxVjUuOTFhMS44MSwxLjgxLDAsMCwxLC45MS0xLjc5QTEuOTMsMS45MywwLDAsMSwxOSw0LjM0bDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVMMTksMzEuNUEyLDIsMCwwLDEsMTcuNzcsMzEuOTJabTAtMTIuOFYyOS45M2wxNS4y'@;
put 'Ni0xMi0xNS4zMi0xMiwuMDYsMTAuODFMNCw1LjkxdjI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE3LjcxLDMyYTIsMiwwLDAsMS0uODYtLjJBMS43NywxLjc3LDAsMCwxLDE2LDMwdi02LjdMNS4xNywzMS41OGEx'@;
put 'Ljk0LDEuOTQsMCwwLDEtMi4wNi4yMkEyLDIsMCwwLDEsMiwzMFY2QTIsMiwwLDAsMSwzLjExLDQuMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42OVY2YTEuNzcsMS43NywwLDAsMSwuODUtMS43OSwxLjkzLDEuOTMsMCwwLDEsMi4wNi4yMmwxNS4zMiwxMmEyLDIsMCwwLDEsMCwz'@;
put 'LjE1bC0xNS4zMiwxMkEyLDIsMCwwLDEsMTcuNzEsMzJaIi8+JyksRi5DbHJTaGFwZUNhbWVyYT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwyLDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCww'@;
put 'LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwyMkg0VjEwaDguNjdsMS41NS00aDcuNTZsMS41NSw0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik05LDE5YTksOSwwLDEsMCw5LTlBOSw5LDAsMCwwLDksMTlabTE2LjQsMEE3LjQsNy40LDAsMSwxLDE4LDExLjYsNy40MSw3LjQxLDAsMCwxLDI1LjQsMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuMzcs'@;
put 'MTIuODNhLjguOCwwLDAsMC0uOC0uOEg2LjE3YS44LjgsMCwwLDAsMCwxLjZoMi40QS44LjgsMCwwLDAsOS4zNywxMi44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzQsMTlhNS41Nyw1LjU3LDAsMCww'@;
put 'LDMuMjQsNWwuODUtMS4zN2E0LDQsMCwxLDEsNC4xMS02LjYxbC44Ni0xLjM4QTUuNTYsNS41NiwwLDAsMCwxMi4zNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwy'@;
put 'LDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNi4xNywxMy42M2EuOC44LDAsMCwxLDAtMS42aDIuNGEuOC44LDAsMCwxLDAsMS42'@;
put 'Wk0xOCwyOGE5LDksMCwxLDEsOS05QTksOSwwLDAsMSwxOCwyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4xMSwxOS4wNmE3LjA3LDcuMDcsMCwwLDAsNC4xMSw2LjQxbDEuMDktMS43NGE1LDUsMCwxLDEsNS4y'@;
put 'Mi04LjM5bDEuMDktMS43NmE3LjA2LDcuMDYsMCwwLDAtMTEuNTEsNS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlVmlkZW9DYW1lcmE9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zNCwxMC4zNGEyLjExLDIuMTEsMCwwLDAtMS4xNi0xLjksMiwyLDAsMCwwLTIuMTMuMTVMMjYsMTEuNlY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjRhMiwyLDAsMCwwLDItMlYyNC40bDQuNjQsM2EyLjA3LDIuMDcs'@;
put 'MCwwLDAsMi4yLjJBMi4xMSwyLjExLDAsMCwwLDM0LDI1LjY2Wk0zMS45MywyNS43N2MtLjA2LDAtLjExLDAtLjE5LS4wNkwyNCwyMC43N1YyOEg2YTIsMiwwLDAsMS0yLTJWMTBBMiwyLDAsMCwxLDYsOEgyNHY3LjIzbDcuOC01YS4xMS4xMSwwLDAsMSwuMTMsMCwuMTEuMTEsMCwwLDEsLjA3'@;
put 'LjExVjI1LjY2QS4xMS4xMSwwLDAsMSwzMS45MywyNS43N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zLDkuMzUsMjYsMTIuOVY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0'@;
put 'LDRIMjRhMiwyLDAsMCwwLDItMlYyMy4wOGw2LjMsMy41NUExLjEsMS4xLDAsMCwwLDM0LDI1Ljc3VjEwLjJBMS4xLDEuMSwwLDAsMCwzMi4zLDkuMzVaIi8+JyksRi5DbHJTaGFwZVNodWZmbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0yMS42MSwxMWg4LjYybC0zLjMsMy4zYTEsMSwwLDEsMCwxLjQxLDEuNDJMMzQsMTAuMDhsLS43MS0uNzFoMEwyOC4zNCw0LjQzYTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTEsOUgyMWExLDEsMCwwLDAtLjg2LjVMMTcuNSwxNC4wOWwxLjE2LDJaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTExLjA3LDI1LjA3SDNhMSwxLDAsMCwwLDAsMmg4LjY1YTEsMSwwLDAsMCwuODYtLjVMMTUuMTgsMjIsMTQsMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI4LjM0LDIwLjE3YTEsMSwwLDAsMC0xLjQxLDEuNDJsMy41LDMuNUgyMS42MUwxMi41MSw5LjUzYTEsMSwwLDAsMC0uODYtLjVIM2ExLDEsMCwxLDAsMCwyaDguMDdsOS4xLDE1LjU1YTEsMSwwLDAsMCwuODYuNUgyOS45bC0zLDNhMSwx'@;
put 'LDAsMCwwLDEuNDEsMS40Mmw0Ljk1LTQuOTRoMGwuNzEtLjcxWiIvPicpLEYuQ2xyU2hhcGVWb2x1bWVEb3duPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1'@;
put 'LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwz'@;
put 'MmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy40MUEyLDIsMCwwLDEsMjAsNlYzMGEyLDIsMCwwLDEtMS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4yOEwxOCwz'@;
put 'MFY2bC03LjY1LDcuNjhhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSww'@;
put 'LDEsMSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOC4zNCwzLjg3LDksMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEsMSww'@;
put 'LDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWNC42MkExLDEsMCwwLDAsMTguMzQsMy44N1oiLz4nKSxGLkNsclNoYXBlVm9sdW1lVXA9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y'@;
put 'My40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzMi4wNmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy4zOUEyLDIsMCwwLDEsMjAsNnYyNGEyLDIsMCwwLDEt'@;
put 'MS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMi4wNlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4zTDE4LDMwLjA2VjZMMTAuMzUsMTMuN2ExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk'@;
put 'PSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEsLjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LjMzLDQsOS4wNywxMmgtNmExLDEsMCwwLDAtMSwxdjkuOTJhMSwxLDAsMCwwLDEsMUg4Ljg4bDkuNDYsOC4yNEExLDEsMCwwLDAsMjAsMzEuNDNWNC43MkExLDEsMCwwLDAsMTguMzMsNFoiLz4nKSxG'@;
put 'LkNsclNoYXBlVm9sdW1lTXV0ZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMuNjEsNi40MSw5LjE5LDEySDRhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJIOS4xNGw3LjQxLDcuNDdBMiwyLDAsMCww'@;
put 'LDE4LDMyYTIsMiwwLDAsMCwuNzYtLjE1QTIsMiwwLDAsMCwyMCwzMFYyMi43N2w1Ljg5LDUuODljLS4yNS4xNS0uNDkuMjktLjc1LjQyYTEsMSwwLDAsMCwuOSwxLjc5LDE0LjQsMTQuNCwwLDAsMCwxLjMxLS43NWwyLjI4LDIuMjhMMzEsMzEsNSw1Wk0xOCwzMGwtNy43My03Ljc3QTEsMSww'@;
put 'LDAsMCw5LjU2LDIySDRWMTRIOS42NGExLDEsMCwwLDAsLjcxLS4zbC4yNi0uMjZMMTgsMjAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0Ljg5LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjksMjYuMWwx'@;
put 'LjQyLDEuNDJBMTQuNDIsMTQuNDIsMCwwLDAsMjUuNzYsNC44OGExLDEsMCwxLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4x'@;
put 'Nyw2LjE3LDAsMCwxLTEuMjQsMy43MUwyNiwyMy4xM0E4LjE1LDguMTUsMCwwLDAsMjcuOCwxOGE4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBk'@;
put 'PSJNMTgsNnY5LjE1bDIsMlY2YTIsMiwwLDAsMC0zLjQyLTEuNDFMMTIsOS4xN2wxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjQuODcsNi42OUExMi40MiwxMi40MiwwLDAsMSwyOC43NSwyNi4zbDEu'@;
put 'NDIsMS40MkExNC40MywxNC40MywwLDAsMCwyNS43NCw0Ljg4YTEsMSwwLDAsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI3LjMsMjcuNjdoMGwtMy44NC0zLjg0LS41Ny0uNTdoMEw0LjYzLDUsMy4y'@;
put 'MSw2LjQxLDguOCwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVYyMy4ybDUuNTksNS41OWMtLjE3LjEtLjM0LjItLjUxLjI5YTEsMSwwLDAsMCwuOSwxLjc5Yy4zNy0uMTkuNzItLjQsMS4wOC0uNjJsMi4xNCwyLjE0'@;
put 'TDMwLjYxLDMxbC0zLjI1LTMuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4xNyw2LjE3LDAsMCwxLTEuNDIsMy45MmwxLjQyLDEuNDJhOC4xNiw4'@;
put 'LjE2LDAsMCwwLDItNS4zNCw4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yMCw0LjYyYTEsMSwwLDAsMC0xLjY2LS43NWwtNi40Miw1LjZMMjAs'@;
put 'MTcuNTRaIi8+JyksRi5DbHJTaGFwZUhlYWRwaG9uZXM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg5LjJBMi43NCwyLjc0LDAsMCwwLDEyLDI4LjMz'@;
put 'VjIxLjY3QTIuNzQsMi43NCwwLDAsMCw5LjIsMTlINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYxOUgyNi44QTIuNzQsMi43NCwwLDAsMCwyNCwyMS42N3Y2LjY3QTIuNzQsMi43NCwwLDAsMCwyNi44LDMxSDMyVjE3LjVBMTQuMjcsMTQu'@;
put 'MjcsMCwwLDAsMTgsM1pNOS4yLDIxYS43NS43NSwwLDAsMSwuOC42N3Y2LjY3YS43NS43NSwwLDAsMS0uOC42N0g2VjIxWk0yNiwyOC4zM1YyMS42N2EuNzUuNzUsMCwwLDEsLjgtLjY3SDMwdjhIMjYuOEEuNzUuNzUsMCwwLDEsMjYsMjguMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOC4yQTEuNzQsMS43NCwwLDAsMCwxMCwyOS4zM1YyMi42N0ExLjc0LDEuNzQsMCwwLDAsOC4yLDIxSDZWMTcuNUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3'@;
put 'LDEyLjI3LDAsMCwxLDMwLDE3LjVWMjFIMjcuOEExLjc0LDEuNzQsMCwwLDAsMjYsMjIuNjd2Ni42N0ExLjc0LDEuNzQsMCwwLDAsMjcuOCwzMUgzMlYxNy41QTE0LjI3LDE0LjI3LDAsMCwwLDE4LDNaIi8+JyksRi5DbHJTaGFwZUZpbG1TdHJpcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wm0wLDI2SDZWNkgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTQuNiwyMy4wN2ExLjI5LDEuMjksMCwwLDAsMS4yNC4wOWw4LjczLTRhMS4zLDEuMywwLDAsMCwwLTIuMzdoMGwtOC43My00QTEuMywxLjMsMCwwLDAsMTQsMTR2OEExLjI5LDEuMjksMCwwLDAsMTQuNiwyMy4wN1ptMS04LjZM'@;
put 'MjMuMzEsMTgsMTUuNiwyMS41MVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI4IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNCIgeD0iMTQiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyMCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjI2IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iOCIgeT0iMjYiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIxNCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC05IiB4PSIyMCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIwLDdoMnYzSDIwWk0xNCw3aDJ2M0gxNFpNMTAsMjlIOFYyNmgyWm0wLTE5'@;
put 'SDhWN2gyWm02LDE5SDE0VjI2aDJabTYsMEgyMFYyNmgyWm0zLjE2LTEwLjE2TDE1LjM5LDIzLjJBMSwxLDAsMCwxLDE0LDIyLjI4VjEzLjU3YTEsMSwwLDAsMSwxLjQxLS45MUwyNS4xNiwxN0ExLDEsMCwwLDEsMjUuMTYsMTguODRaTTI4LDI5SDI2VjI2aDJabTAtMTlIMjZWN2gyWiIvPicp'@;
put 'LEYuQ2xyU2hhcGVNdXNpY05vdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMzRhNS44OSw1'@;
put 'Ljg5LDAsMCwwLS44Mi0uNTYsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxQzcuNTcsMjIuNyw0LjkyLDI2LjUsNS43OCwyOS44NGE1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41N2MzLjY3LTEuMTgsNi4xNy00'@;
put 'LjMzLDYuMDYtNy4zNlY5LjM0YTI5LjE0LDI5LjE0LDAsMCwxLDYuNTUsMS40MywxLDEsMCwxLDAsLjcyLTEuODdBMzEuMzcsMzEuMzcsMCwwLDAsMjEsNy4zM1Y0LjE3YzMuMzMuMzYsOCwxLjM4LDguOTIsMywyLDMuNDEtMi4zMyw3LjM2LTIuMzcsNy40YTEsMSwwLDAsMCwxLjMzLDEuNDlD'@;
put 'MjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2Wk0xNC4zNSwzMS42N2E2LjQzLDYuNDMsMCwwLDEtNS0uMjYsMy4zMSwzLjMxLDAsMCwxLTEuNjktMi4wN2MtLjYtMi4zMywxLjQ1LTUuMDUsNC41OC02LjA2YTcuNTIsNy41MiwwLDAsMSwyLjMtLjM3LDUuNTIsNS41MiwwLDAsMSwyLjY1'@;
put 'LjYyLDMuMzEsMy4zMSwwLDAsMSwxLjY5LDIuMDdDMTkuNTQsMjcuOTQsMTcuNDksMzAuNjYsMTQuMzUsMzEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjky'@;
put 'LTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjI5YTUuODgsNS44OCwwLDAsMC0uODEtLjU1LDguMzMsOC4zMywwLDAsMC02LjUzLS40MWMtNC4xMiwxLjMzLTYuNzcsNS4xMy01LjkxLDguNDdhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5'@;
put 'LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTJjMy43LTEuMTksNi4yLTQuMzcsNi4wNi03LjQyLDAsMCwwLDAsMCwwVjguNDljMSwuMTIsMi4zNy4zMywzLjgyLjY0YTExLjE3LDExLjE3LDAsMCwxLDQuMDYsMS40NmMxLC42Ni4zOCwxLjkuMzMsMmExMS44LDExLjgsMCwwLDEtMS42NiwyLDEsMSww'@;
put 'LDAsMCwxLjMzLDEuNDlDMjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2WiIvPicpLEYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMu'@;
put 'ODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik04LjU2LDE5LjQ1YTMsMywwLDEsMC0zLTNB'@;
put 'MywzLDAsMCwwLDguNTYsMTkuNDVabTAtNC42QTEuNiwxLjYsMCwxLDEsNywxNi40NSwxLjYsMS42LDAsMCwxLDguNTYsMTQuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy45LDI4bDYtNiwzLjE4LDMuMThMMTQuMjYsMjhoMmw3'@;
put 'LjQ2LTcuNDZMMzAsMjYuNzd2LTJMMjQuMiwxOWEuNzEuNzEsMCwwLDAtMSwwbC01LjE2LDUuMTZMMTQuMzcsMjAuNWEuNzEuNzEsMCwwLDAtMSwwTDUuOTIsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSww'@;
put 'LDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwx'@;
put 'LDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwz'@;
put 'MC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTguNTYsMTMuNDVhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC41NiwxMy40NVpNMzAsMjhoLTI0bDcuNDYtNy40N2EuNzEuNzEsMCwwLDEsMSwwbDMuNjgsMy42OEwyMy4yMSwxOWEuNzEuNzEsMCwwLDEsMSwwTDMwLDI0Ljc5'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlUmVwbGF5QWxsPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy40NiwyNi4yMmExLjQsMS40LDAsMCwwLDEtLjQybDUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAsLjQyLTEsMS40Niwx'@;
put 'LjQ2LDAsMCwwLS40Mi0xbC01LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLTIuNDQsMVYyNC43OWExLjQxLDEuNDEsMCwwLDAsLjg4LDEuMzJBMS41NCwxLjU0LDAsMCwwLDE3LjQ2LDI2LjIyWm0uMTYtMTIuMTYsNS4xOSw1LjE2LTUuMTksNS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEuNDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEu'@;
put 'NzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVJlcGxheU9uZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTks'@;
put 'MjcuMjdhMSwxLDAsMCwwLDEtMVYxNGExLDEsMCwwLDAtMS0xSDE5YTMuOCwzLjgsMCwwLDAtMS4xLjIzbC0yLC42MmEuOTIuOTIsMCwwLDAtLjcyLjg2Ljg4Ljg4LDAsMCwwLC44OC44NiwxLjQ2LDEuNDYsMCwwLDAsLjQzLS4wOEwxOCwxNS4wN3YxMS4yQTEsMSwwLDAsMCwxOSwyNy4yN1oi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEu'@;
put 'NDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEuNzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVZpZGVvR2FsbGVyeT0oMCx4'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEy'@;
put 'SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9'@;
put 'Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTIuODIsMjYuNzlhMS43NCwxLjc0LDAsMCwwLC45My4yOCwxLjY4LDEuNjgsMCwwLDAsLjY5LS4x'@;
put 'NWw5Ljc3LTQuMzZhMS42OSwxLjY5LDAsMCwwLDAtMy4xTDE0LjQ0LDE1LjFhMS43LDEuNywwLDAsMC0yLjM5LDEuNTV2OC43MkExLjcsMS43LDAsMCwwLDEyLjgyLDI2Ljc5Wm0uNjMtMTAuMTRhLjI5LjI5LDAsMCwxLC4xNC0uMjUuMy4zLDAsMCwxLC4xNiwwLC4yNy4yNywwLDAsMSwuMTIs'@;
put 'MGw5Ljc3LDQuMzVhLjI5LjI5LDAsMCwxLC4xOC4yOC4yOC4yOCwwLDAsMS0uMTguMjdsLTkuNzcsNC4zNmEuMjguMjgsMCwwLDEtLjI4LDAsLjMxLjMxLDAsMCwxLS4xNC0uMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIs'@;
put 'MTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0yNC4xOCwyMS44M2wtOS43Nyw0LjM2QTEsMSwwLDAsMSwxMywyNS4y'@;
put 'OFYxNi41NmExLDEsMCwwLDEsMS40MS0uOTFMMjQuMTgsMjBBMSwxLDAsMCwxLDI0LjE4LDIxLjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlTWljcm9waG9uZT0o'@;
put 'MCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IE0xMyw5YzAtMi44LDIuMi01LDUtNXM1LDIuMiw1LDV2OFxuXHRcdGMwLDIuOC0yLjIsNS01LDVzLTUtMi4y'@;
put 'LTUtNVY5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMw'@;
put 'LjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDI0YzMuOSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywz'@;
put 'LjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSww'@;
put 'LjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT0oMCx4LmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsNGMyLjgsMCw1LDIuMiw1LDV2OGMwLDAu'@;
put 'NC0wLjEsMC44LTAuMiwxLjJsMS42LDEuNmMwLjQtMC45LDAuNi0xLjgsMC42LTIuOFY5YzAtMy45LTMuMi03LTcuMS02Ljlcblx0XHRjLTIuOSwwLTUuNiwxLjktNi41LDQuN0wxMyw4LjNDMTMuNSw1LjksMTUuNiw0LjIsMTgsNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40LDAuMi05LjgtNC4xLTEw'@;
put 'LTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnogTTEzLjgsMTkuN0MxMy4z'@;
put 'LDE4LjksMTMsMTgsMTMsMTd2LTIuNmw3LjEsNy4xQzE3LjksMjIuNSwxNS4yLDIxLjgsMTMuOCwxOS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAuNSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUs'@;
put 'MjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUsMTdWOWMwLTMuOS0zLjItNy03LjEtNi45Yy0yLjksMC01LjYsMS45LTYuNSw0LjdsMTMsMTNDMjQuOCwxOC45LDI1LDE3LjksMjUsMTd6IiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40'@;
put 'LDAuMi05LjgtNC4xLTEwLTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnoi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5NZWRpYVNoYXBlcz17cGxheTpGLkNsclNoYXBlUGxheSxwYXVzZTpGLkNsclNoYXBlUGF1c2UsInN0ZXAtZm9yd2FyZCI6Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkLHN0b3A6Ri5DbHJTaGFwZVN0b3AscG93ZXI6'@;
put 'Ri5DbHJTaGFwZVBvd2VyLHJld2luZDpGLkNsclNoYXBlUmV3aW5kLCJmYXN0LWZvcndhcmQiOkYuQ2xyU2hhcGVGYXN0Rm9yd2FyZCxjYW1lcmE6Ri5DbHJTaGFwZUNhbWVyYSwidmlkZW8tY2FtZXJhIjpGLkNsclNoYXBlVmlkZW9DYW1lcmEsc2h1ZmZsZTpGLkNsclNoYXBlU2h1ZmZsZSwi'@;
put 'dm9sdW1lLXVwIjpGLkNsclNoYXBlVm9sdW1lVXAsInZvbHVtZS1kb3duIjpGLkNsclNoYXBlVm9sdW1lRG93biwidm9sdW1lLW11dGUiOkYuQ2xyU2hhcGVWb2x1bWVNdXRlLGhlYWRwaG9uZXM6Ri5DbHJTaGFwZUhlYWRwaG9uZXMsImZpbG0tc3RyaXAiOkYuQ2xyU2hhcGVGaWxtU3RyaXAs'@;
put 'Im11c2ljLW5vdGUiOkYuQ2xyU2hhcGVNdXNpY05vdGUsImltYWdlLWdhbGxlcnkiOkYuQ2xyU2hhcGVJbWFnZUdhbGxlcnksInJlcGxheS1hbGwiOkYuQ2xyU2hhcGVSZXBsYXlBbGwsInJlcGxheS1vbmUiOkYuQ2xyU2hhcGVSZXBsYXlPbmUsInZpZGVvLWdhbGxlcnkiOkYuQ2xyU2hhcGVW'@;
put 'aWRlb0dhbGxlcnksbWljcm9waG9uZTpGLkNsclNoYXBlTWljcm9waG9uZSwibWljcm9waG9uZS1tdXRlIjpGLkNsclNoYXBlTWljcm9waG9uZU11dGV9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25z'@;
put 'LmFkZChGLk1lZGlhU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNv'@;
put 'bnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Tb2NpYWxTaGFwZXM9Ri5DbHJTaGFwZUhhc2h0YWc9Ri5DbHJTaGFwZUNyb3duPUYuQ2xyU2hhcGVUaHVtYnNEb3duPUYuQ2xyU2hhcGVUaHVtYnNVcD1GLkNsclNoYXBlU2FkRmFjZT1GLkNs'@;
put 'clNoYXBlTmV1dHJhbEZhY2U9Ri5DbHJTaGFwZUhhcHB5RmFjZT1GLkNsclNoYXBlUGljdHVyZT1GLkNsclNoYXBlQ2hhdEJ1YmJsZT1GLkNsclNoYXBlVGFsa0J1YmJsZXM9Ri5DbHJTaGFwZUhlYXJ0QnJva2VuPUYuQ2xyU2hhcGVIZWFydD1GLkNsclNoYXBlSW5ib3g9Ri5DbHJTaGFwZUZs'@;
put 'YWc9Ri5DbHJTaGFwZVRhc2tzPUYuQ2xyU2hhcGVFbnZlbG9wZT1GLkNsclNoYXBlQm9va21hcms9Ri5DbHJTaGFwZUhhbGZTdGFyPUYuQ2xyU2hhcGVTdGFyPUYuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9q'@;
put 'ZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtGLkNsclNoYXBlU2hhcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQs'@;
put 'MTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMs'@;
put 'MywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0y'@;
put 'Ny41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1'@;
put 'LDAsMSwwLDUtNVoiLz4nKSxGLkNsclNoYXBlU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwt'@;
put 'Ny40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4yMy4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNh'@;
put 'LjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAsMCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCww'@;
put 'LDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4zNWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwxLTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEu'@;
put 'NDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIuMjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiwwLDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEt'@;
put 'LjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIs'@;
put 'MCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0WiIvPicpLEYuQ2xyU2hhcGVIYWxmU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAs'@;
put 'MC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMx'@;
put 'LjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwxLjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCwwLDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwy'@;
put 'LjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4yNWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIsMCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0u'@;
put 'MTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcs'@;
put 'MGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIs'@;
put 'Mi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUtOC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIyLDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEs'@;
put 'LjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRhLjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMuMTFaIi8+JyksRi5DbHJTaGFwZUJvb2ttYXJrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAsMCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEyLDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wx'@;
put 'OCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMxLjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiww'@;
put 'LDAsMCwyNiwyWiIvPicpLEYuQ2xyU2hhcGVFbnZlbG9wZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIs'@;
put 'MiwwLDAsMCwzMiw2Wk0zMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBMMzIsOS4yMXYxNy41bC03LjM2LTcuMzYtMS40MSwxLjQxWk01LjMxLDhIMzAuMzhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMDhWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEy'@;
put 'LDIsMCwwLDAsMi44MiwwbDguODMtOC43OGE3LjQ0LDcuNDQsMCwwLDEtMi0uODVsLTguMjYsOC4yMUw1LjMxLDhIMjIuODFhNy40OSw3LjQ5LDAsMCwxLS4zMS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMkE3LjQ1LDcuNDUsMCwwLDEs'@;
put 'MzIsMTMuMDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuODYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjI2SDMyVjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQxTDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCww'@;
put 'LDIuODIsMGw2LjY2LTYuNjNIMjMuMDhsLTUuMjQsNS4yMUw1LjMxLDhIMjAuMDZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zMyw2YTIsMiwwLDAsMC0uNDEsMGgtMjhhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODEsNy4zOSwxOS4yNSwyMS44OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzMuODEsNy4zOVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4y'@;
put 'Ny03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNiwxMi4zNEE3LjQ5LDcu'@;
put 'NDksMCwwLDEsMjIuNSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI5'@;
put 'bC04LjcxLDguNjhhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAtLjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjEyLjM5QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMw'@;
put 'LjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjUuNzdsLTYuNTIsNi40OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiww'@;
put 'LDAsMCwyLTJWMTUuMzhaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yMi45NCwxNS40aC0uN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJT'@;
put 'aGFwZVRhc2tzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcsMS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1'@;
put 'QTEuNywxLjcsMCwwLDEsMzEsNi42OVYzMi4zMUExLjcsMS43LDAsMCwxLDI5LjI5LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuNjYsMjUuNzYsMTEuMywyMC40QTEsMSwwLDAsMSwxMi43Miwx'@;
put 'OWwzLjk0LDMuOTQsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNiwxMUgxMFY3LjMzQTIuMzQsMi4zNCwwLDAsMSwxMi4zMyw1aDEuNzlhNCw0LDAs'@;
put 'MCwxLDcuNzUsMGgxLjc5QTIuMzQsMi4zNCwwLDAsMSwyNiw3LjMzWk0xMiw5SDI0VjcuMzNBLjMzLjMzLDAsMCwwLDIzLjY3LDdIMjBWNmEyLDIsMCwwLDAtNCwwVjdIMTIuMzNhLjMzLjMzLDAsMCwwLS4zMy4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LDkuODksMTkuNTYsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aC43MWwxLjE2LTJhNCw0LDAsMCwwLTcuNzQsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAs'@;
put 'MTAsNy4zM1YxMWg4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjQuMTksMTUuNGwtNy41Myw3LjUzTDEyLjcyLDE5QTEs'@;
put 'MSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMCwuMi0uMzFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNS40VjMySDdWN0g5'@;
put 'VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUuMzYsNS4zNkwyNi43MSwxNS43MWExLDEsMCwwLDAtMS40MS0xLjQxbC04LjY0LDguNjRaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIs'@;
put 'Ny41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAs'@;
put 'MCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjkuMjksNC45NWgtNy4yYTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWNi42NEEx'@;
put 'LjcsMS43LDAsMCwwLDI5LjI5LDQuOTVabS0xOCwzYTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gzLjQ0YTEsMSwwLDAsMSwxLDFWOS44SDExLjI1Wm0xNC41Miw5LjIzLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwz'@;
put 'LjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjUuODgsMTUuNGExLjM4LDEuMzgsMCwwLDEtLjExLDEuODFsLTkuMTIsOS4x'@;
put 'Mi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDctN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwwLS4wOUgxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2guNDJMMjIsNC43NmE0LjMsNC4zLDAsMCwwLTgu'@;
put 'MDkuMTlIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02LjQ2LTMuN0gxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gyLjI2YTcuNTMs'@;
put 'Ny41MywwLDAsMS0uMDctMSw3LjUzLDcuNTMsMCwwLDEsLjA4LTEuMDVoLS41YTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTMuNDNBNy41Miw3'@;
put 'LjUyLDAsMCwxLDMwLDEzLjVabS00LjIzLDMuNzEtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlRmxhZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEt'@;
put 'MVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4x'@;
put 'MSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0xLjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUsNGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUs'@;
put 'MCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4LjkzLDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiww'@;
put 'LDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzksMTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwx'@;
put 'NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0'@;
put 'Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLEYuQ2xyU2hhcGVJbmJveD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwx'@;
put 'OCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYu'@;
put 'NUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQx'@;
put 'TDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAs'@;
put 'Ni41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIZWFydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJN'@;
put 'MTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40'@;
put 'OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0yLjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0'@;
put 'LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEzLDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMuNTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00'@;
put 'Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5'@;
put 'Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEs'@;
put 'MTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlSGVhcnRCcm9rZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44'@;
put 'NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcuNTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODks'@;
put 'Ni4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgxQTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTkuMzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSww'@;
put 'LDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYsMTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45'@;
put 'LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcu'@;
put 'NjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCwwLDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSww'@;
put 'LDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYsMGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwx'@;
put 'LDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlVGFsa0J1YmJsZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEz'@;
put 'VjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlW'@;
put 'N0EzLDMsMCwwLDAsMzEsNFpNMzIsMjIuOTQsMjguNSwyMC4yMWExLDEsMCwwLDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgzMUExLjEsMS4xLDAsMCwxLDMyLDcuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3'@;
put 'LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2OS43MkwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0x'@;
put 'LTFWN2ExLDEsMCwwLDEsMS0xSDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1i'@;
put 'YWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYs'@;
put 'MCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVs'@;
put 'NC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEyLjM3QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0i'@;
put 'NiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2hhdEJ1YmJsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0'@;
put 'LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI4LjI5LDI0LjYxYTEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAt'@;
put 'LjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMDgsMTEuMDgsMCwwLDEsMjguMjksMjQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yNSwxNS41SDExYTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjc1LDIwLjVoLTcuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEs'@;
put 'MCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMjgsMTIuNUgyNC43MmExLDEsMCwwLDAsMC0ySDExLjI4YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4zOCwxMi42OWE3LjQzLDcuNDMsMCwwLDEtMS44OS42NkExMC4zNSwxMC4zNSwwLDAsMSwzMiwxNi41YTExLjA4LDExLjA4LDAsMCwxLTMuNzEsOC4xMSwxLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwx'@;
put 'LDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMmExNiwxNiwwLDAsMSw0LjU1LjY2QTcuNDQsNy40NCwwLDAsMSwyMywzLjIyYTE4LDE4LDAsMCwwLTUtLjcyYy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2'@;
put 'LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0ExMi4zMiwxMi4zMiwwLDAsMCwzMy4zOCwxMi42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMSwxNS41YTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC4yNSwy'@;
put 'MC41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjgsMTEuNWExLDEsMCwwLDAsMSwxSDI0LjcyYTEsMSwwLDAsMCwu'@;
put 'ODMtLjQ3QTcuNTMsNy41MywwLDAsMSwyNCwxMC41SDExLjI4QTEsMSwwLDAsMCwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz'@;
put 'LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wm04LDE0YTEsMSwwLDAsMS0xLDFIMTFhMSwxLDAsMCwxLDAtMkgyNUExLDEsMCwwLDEsMjYsMTYuNVptLTMuMjUsNWExLDEsMCwwLDEtMSwxaC03LjVhMSwx'@;
put 'LDAsMCwxLDAtMmg3LjVBMSwxLDAsMCwxLDIyLjc1LDIxLjVabS0xMi40Ny0xMGExLDEsMCwwLDEsMS0xSDI0LjcyYTEsMSwwLDAsMSwwLDJIMTEuMjhBMSwxLDAsMCwxLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMwLDEzLjI1YTcuNDYsNy40NiwwLDAsMS00LjM1LTEuNCwxLDEsMCwwLDEtLjkzLjY1SDExLjI4YTEsMSwwLDAsMSwwLTJIMjQuMkE3LjQ2LDcuNDYsMCwwLDEsMjMsMy4yYTE4LDE4LDAsMCwwLTUtLjdjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgs'@;
put 'MTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3LDEyLjM0LDEyLjM0LDAsMCwwLS42OC00QTcuNDYsNy40NiwwLDAsMSwzMCwxMy4yNVpNMjEuNzUsMjIuNWgtNy41YTEsMSwwLDAsMSwwLTJoNy41YTEsMSwwLDAs'@;
put 'MSwwLDJabTMuMjUtNUgxMWExLDEsMCwwLDEsMC0ySDI1YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNS43NSIgcj0iNSIgIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVQaWN0dXJlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEy'@;
put 'LDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywx'@;
put 'MSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2'@;
put 'LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAt'@;
put 'MywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4z'@;
put 'OCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwz'@;
put 'MiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45'@;
put 'bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'MCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYu'@;
put 'MDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIYXBweUZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs'@;
put 'MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywy'@;
put 'OC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAsMCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww'@;
put 'LDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcsOC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwx'@;
put 'NS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTmV1dHJhbEZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1'@;
put 'LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv'@;
put 'PicpLEYuQ2xyU2hhcGVTYWRGYWNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAsMSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4x'@;
put 'NiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0'@;
put 'LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAsMC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFwZVRodW1ic1VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZh'@;
put 'Mi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4yMyw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAsMS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIu'@;
put 'MzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAsMS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwxLDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYz'@;
put 'LDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIsNS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcuOCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwx'@;
put 'LDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+'@;
put 'JyksRi5DbHJTaGFwZVRodW1ic0Rvd249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAsMSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42'@;
put 'OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAsMCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjksOS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEs'@;
put 'MSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQuMS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMsNiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCwwLDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43Niwx'@;
put 'MC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjkuNDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4zNUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ3Jvd249KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4zOSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUs'@;
put 'MjAuMzUsMCwwLDAtNC41OCwxLjQzLDIyLjcsMjIuNywwLDAsMC0zLjQ4LDIuMUExNy42OSwxNy42OSwwLDAsMSwyMiwxNi41N2E0Ny42NSw0Ny42NSwwLDAsMS0yLjgtNy42OSwxLDEsMCwwLDAtMS0uNzQsMSwxLDAsMCwwLTEsLjc0LDQ2LjcxLDQ2LjcxLDAsMCwxLTIuOCw3LjY5LDE3LDE3'@;
put 'LDAsMCwxLTEuNzYsMi44LDIyLjcsMjIuNywwLDAsMC0zLjQ4LTIuMSwyMC42NiwyMC42NiwwLDAsMC00LjU4LTEuNDMsMSwxLDAsMCwwLTEsLjM5LDEsMSwwLDAsMC0uMDksMS4wNUE1MC4xMyw1MC4xMywwLDAsMSw3LjgyLDMxLjE3YTEsMSwwLDAsMCwxLC44M0gyNy42MmExLDEsMCwwLDAs'@;
put 'MS0uODMsNTAuMTUsNTAuMTUsMCwwLDEsNC4yNi0xMy44OSwxLDEsMCwwLDAtLjA5LTEuMDVBMSwxLDAsMCwwLDMxLjgxLDE1Ljg0Wk0yNi43OSwzMEg5LjY0YTU1LjY2LDU1LjY2LDAsMCwwLTMuNC0xMS43MSwxNS43NSwxNS43NSwwLDAsMSwyLjA5Ljc4LDIwLDIwLDAsMCwxLDMuODUsMi40'@;
put 'NSwxLDEsMCwwLDAsMS4zOS0uMDksMTkuMjgsMTkuMjgsMCwwLDAsMi42Ny00LDQzLjQ2LDQzLjQ2LDAsMCwwLDItNC44OSw0MS43NCw0MS43NCwwLDAsMCwyLDQuODksMTkuOTIsMTkuOTIsMCwwLDAsMi42Niw0LDEsMSwwLDAsMCwxLjQuMDksMTkuMjEsMTkuMjEsMCwwLDEsMy44NS0yLjQ1'@;
put 'LDE0Ljc3LDE0Ljc3LDAsMCwxLDIuMDktLjc4QTU1LjA3LDU1LjA3LDAsMCwwLDI2Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCwwLDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0'@;
put 'aCBkPSJNMTguMjMsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4xLDEuMSwwLDAsMCwxOC4yMywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMi41OCwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUEx'@;
put 'LjEsMS4xLDAsMCwwLDEyLjU4LDI2LjM0WiIvPjxwYXRoIGQ9Ik0yMy44OSwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDIzLjg5LDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cblxuICA8cGF0aCBkPSJNMi42'@;
put 'LDExLjkzQTEuNCwxLjQsMCwxLDAsNCwxMy4zMywxLjQsMS40LDAsMCwwLDIuNiwxMS45M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjYzLDE2'@;
put 'LjFBMTguNjEsMTguNjEsMCwwLDAsMjgsMTcuMzRhMjEuNTcsMjEuNTcsMCwwLDAtNCwyLjQ5LDE5LjIsMTkuMiwwLDAsMS0yLjI2LTMuNDksNDguOTIsNDguOTIsMCwwLDEtMi41Mi02LjU4LDEsMSwwLDAsMC0xLS43MWgwYTEsMSwwLDAsMC0xLC43MSw0OC40Miw0OC40MiwwLDAsMS0yLjUy'@;
put 'LDYuNTgsMTguNjksMTguNjksMCwwLDEtMi4yNiwzLjQ4LDIyLjgxLDIyLjgxLDAsMCwwLTQtMi40OEExOC44MywxOC44MywwLDAsMCw0LjksMTYuMWExLDEsMCwwLDAtMSwuMzMsMSwxLDAsMCwwLS4xMywxLjA3LDU1LjksNTUuOSwwLDAsMSw0LDEzLjUsMSwxLDAsMCwwLDEsLjgzaDE5YTEs'@;
put 'MSwwLDAsMCwxLS44Myw1NS45LDU1LjksMCwwLDEsNC0xMy41LDEsMSwwLDAsMC0uMTMtMS4wN0ExLDEsMCwwLDAsMzEuNjMsMTYuMVpNMTEuMDgsMjguNTVhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwxMS4wOCwyOC41NVptNy4xNSwwYTEuMTEsMS4xMSwwLDAs'@;
put 'MSwwLTIuMjEsMS4xMSwxLjExLDAsMCwxLDAsMi4yMVptNy4xNiwwYTEuMTEsMS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMjUuMzksMjguNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gICcpLEYuQ2xyU2hhcGVIYXNodGFnPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDku'@;
put 'MTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAsMSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMu'@;
put 'MzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAs'@;
put 'MCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJI'@;
put 'OS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAsMS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLTho'@;
put 'NmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0xMiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLEYuU29jaWFsU2hhcGVzPXtjcm93bjpGLkNsclNoYXBlQ3Jvd24sc2hhcmU6Ri5DbHJT'@;
put 'aGFwZVNoYXJlLHN0YXI6Ri5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6Ri5DbHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOkYuQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpGLkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6bGUuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpsZS5DbHJTaGFwZUV2'@;
put 'ZW50LHRhc2tzOkYuQ2xyU2hhcGVUYXNrcyxmbGFnOkYuQ2xyU2hhcGVGbGFnLGluYm94OkYuQ2xyU2hhcGVJbmJveCxoYXNodGFnOkYuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OkYuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpGLkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxl'@;
put 'cyI6Ri5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Ri5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpGLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Ri5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpGLkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNl'@;
put 'IjpGLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpGLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpGLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lh'@;
put 'bFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAseC5kZXNjcmlw'@;
put 'dG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMv'@;
put 'dGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAg'@;
put 'ICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsclNoYXBlVk1XQXBwPUYuQ2xyU2hhcGVWTT1GLkNsclNoYXBlUm91dGVyPUYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPUYuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3M9Ri5DbHJTaGFwZU5ldHdvcmtHbG9iZT1GLkNsclNoYXBlVGFibGV0PUYuQ2xyU2hh'@;
put 'cGVNb2JpbGU9Ri5DbHJTaGFwZUJhdHRlcnk9Ri5DbHJTaGFwZUFwcGxpY2F0aW9uPUYuQ2xyU2hhcGVDb2RlPUYuQ2xyU2hhcGVUZXJtaW5hbD1GLkNsclNoYXBlRGlzcGxheT1GLkNsclNoYXBlQ29tcHV0ZXI9Ri5DbHJTaGFwZUZsb3BweT1GLkNsclNoYXBlUGx1Z2luPUYuQ2xyU2hhcGVE'@;
put 'b3dubG9hZENsb3VkPUYuQ2xyU2hhcGVVcGxvYWRDbG91ZD1GLkNsclNoYXBlRXhwb3J0PUYuQ2xyU2hhcGVJbXBvcnQ9Ri5DbHJTaGFwZVNoaWVsZFg9Ri5DbHJTaGFwZVNoaWVsZD1GLkNsclNoYXBlU2hpZWxkQ2hlY2s9Ri5DbHJTaGFwZVJlc291cmNlUG9vbD1GLkNsclNoYXBlRGF0YUNs'@;
put 'dXN0ZXI9Ri5DbHJTaGFwZU1lbW9yeT1GLkNsclNoYXBlQ1BVPUYuQ2xyU2hhcGVCdWlsZGluZz1GLkNsclNoYXBlQXBwbGljYXRpb25zPUYuQ2xyU2hhcGVDbHVzdGVyPUYuQ2xyU2hhcGVTdG9yYWdlPUYuQ2xyU2hhcGVIb3N0PUYuQ2xyU2hhcGVEYXNoYm9hcmQ9Ri5DbHJTaGFwZU1vdXNl'@;
put 'PUYuQ2xyU2hhcGVLZXlib2FyZD1GLkNsclNoYXBlRGV2aWNlcz1GLkNsclNoYXBlQmFja3VwPUYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlPUYuQ2xyU2hhcGVIYXJkRGlzaz1GLkNsclNoYXBlUmFja1NlcnZlcj1GLkNsclNoYXBlV2lmaT1GLkNsclNoYXBlQnVuZGxlPUYuQ2xyU2hhcGVCbG9j'@;
put 'a3NHcm91cD1GLkNsclNoYXBlQmxvY2s9Ri5DbHJTaGFwZUxheWVycz1GLkNsclNoYXBlVW5pbnN0YWxsPUYuQ2xyU2hhcGVJbnN0YWxsPUYuQ2xyU2hhcGVOb1dpZmk9Ri5DbHJTaGFwZVBob25lSGFuZHNldD1GLkNsclNoYXBlUnVsZXJQZW5jaWw9dm9pZCAwLEYuVGVjaG5vbG9neVNoYXBl'@;
put 'cz1GLkNsclNoYXBlRmlsZVNoYXJlMj1GLkNsclNoYXBlQ2lDZD1GLkNsclNoYXBlQW5pbWF0aW9uPUYuQ2xyU2hhcGVUYXBlRHJpdmU9Ri5DbHJTaGFwZU1lZGlhQ2hhbmdlcj1GLkNsckNvbnRyb2xMdW49Ri5DbHJTaGFwZVBvZD1GLkNsclNoYXBlTm9kZT1GLkNsclNoYXBlTmFtZXNwYWNl'@;
put 'PUYuQ2xyU2hhcGVOb2Rlcz1GLkNsclNoYXBlTm9kZUdyb3VwPUYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj1GLkNsclNoYXBlSG9zdEdyb3VwPUYuQ2xyU2hhcGVTcXVpZD1GLkNsclNoYXBlQ2FwYWNpdG9yPUYuQ2xyU2hhcGVSZXNpc3Rvcj1GLkNsclNoYXBlSW5kdWN0b3I9Ri5DbHJTaGFw'@;
put 'ZVJhZGFyPUYuQ2xyU2hhcGVVc2I9Ri5DbHJTaGFwZVFyQ29kZT1GLkNsclNoYXBlRmlsZVNoYXJlPUYuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9Ri5DbHJTaGFwZUNvbnRhaW5lcj1GLkNsclNoYXBlQ2REdmQ9Ri5DbHJTaGFwZUJhckNvZGU9Ri5DbHJTaGFwZUF0b209Ri5DbHJTaGFwZUFz'@;
put 'c2lnblVzZXI9Ri5DbHJTaGFwZVByb2Nlc3NPblZNPUYuQ2xyU2hhcGVCbHVldG9vdGhPZmY9Ri5DbHJTaGFwZUJsdWV0b290aD1GLkNsclNoYXBlU1NEPUYuQ2xyU2hhcGVOVk1lPUYuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz1GLkNsclNoYXBlSGFyZERyaXZlPUYuQ2xyU2hhcGVBZG1pbmlz'@;
put 'dHJhdG9yPUYuQ2xyU2hhcGVGbGFzaz1GLkNsclNoYXBlSGVsaXg9Ri5DbHJTaGFwZURlcGxveT1GLkNsclNoYXBlQ2xvdWRUcmFmZmljPUYuQ2xyU2hhcGVDbG91ZFNjYWxlPUYuQ2xyU2hhcGVDbG91ZE5ldHdvcms9Ri5DbHJTaGFwZVVubGluaz1GLkNsclNoYXBlTGluaz1GLkNsclNoYXBl'@;
put 'RGlzY29ubmVjdD1GLkNsclNoYXBlQ29ubmVjdD1GLkNsclNoYXBlVW5hcmNoaXZlPUYuQ2xyU2hhcGVBcmNoaXZlPUYuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Ri5DbHJTaGFwZVJ1bGVyUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29u'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBwb2ludHM9IjkgMTcuNDEgOSAyNyAxOC41OSAyNyAxNi41OSAyNSAxMSAyNSAxMSAxOS40MSA5IDE3LjQxIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgZD0iTTM0Ljg3LDMyLjI5LDMyLDI5LjM4VjMySDRWMjcuODVINnYtMS42SDRWMTkuNkg2VjE4SDRWMTEuNkg2VjEwSDRWNC40MUwxOS45NCwyMC4yNlYxNy40NEwzLjcxLDEuMjlBMSwxLDAsMCwwLDIsMlYzM2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjQsMzBoNGEyLDIsMCwwLDAsMi0yVjguN0wyNy43LDQuNDdhMiwyLDAsMCwwLTEuNzYtMWgwYTIsMiwwLDAsMC0xLjc2LDEuMDhMMjIsOC43MlYyOEEyLDIsMCwwLDAs'@;
put 'MjQsMzBaTTI0LDkuMmwxLjk0LTMuNzdMMjgsOS4yMVYyNEgyNFptMCwxNi40M2g0djIuNDRIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuODcsMzIuMjEsMzAsMjcuMzdWOC43NUwyNy43LDQuNTJhMiwyLDAs'@;
put 'MCwwLTMuNTQsMEwyMiw4Ljc2VjE5LjQxTDMuNzEsMS4yMUExLDEsMCwwLDAsMiwxLjkyVjEwSDQuMTd2MS42SDJWMThINC4xN3YxLjZIMnY2LjY1SDQuMTd2MS42SDJ2NS4wN2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVpNMTAsMjZWMTYuOTRMMTkuMDcsMjZabTE4'@;
put 'LDIuMTFIMjRWMjUuNjhoNFptMC00SDI0VjkuMjVsMS45NC0zLjc3TDI4LDkuMjZaIi8+XG4nKSxGLkNsclNoYXBlUGhvbmVIYW5kc2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuNzMsMzUuNDRhNC43'@;
put 'Miw0LjcyLDAsMCwxLTEtLjExLDMzLjkxLDMzLjkxLDAsMCwxLTE2LjYyLTguNzUsMzIuNzEsMzIuNzEsMCwwLDEtOS0xNi4yNUE0LjU4LDQuNTgsMCwwLDEsMi40Niw2LjA1bDQtMy44NUEyLDIsMCwwLDEsOCwxLjY2YTIsMiwwLDAsMSwxLjQ1Ljg3bDUsNy4zOWExLjYsMS42LDAsMCwxLS4x'@;
put 'MSwxLjlsLTIuNTEsM2ExOC45NCwxOC45NCwwLDAsMCw0LjE3LDUuODloMGExOS4yNiwxOS4yNiwwLDAsMCw2LjA3LDQuMDlsMy4xMS0yLjQ3YTEuNjQsMS42NCwwLDAsMSwxLjg2LS4xMmw3LjU1LDQuODhBMiwyLDAsMCwxLDM1LDMwLjJsLTMuOSwzLjg2QTQuNzQsNC43NCwwLDAsMSwyNy43'@;
put 'MywzNS40NFpNNy44NCwzLjY0bC00LDMuODVhMi41NCwyLjU0LDAsMCwwLS43NSwyLjQsMzAuNywzMC43LDAsMCwwLDguNDEsMTUuMjYsMzEuOSwzMS45LDAsMCwwLDE1LjY0LDguMjMsMi43NSwyLjc1LDAsMCwwLDIuNS0uNzRsMy45LTMuODYtNy4yOS00LjcxLTMuMzQsMi42NmExLDEsMCww'@;
put 'LDEtLjkyLjE3LDIwLjA2LDIwLjA2LDAsMCwxLTcuMzYtNC43NWgwYTE5LjQ5LDE5LjQ5LDAsMCwxLTQuODctNy4yQTEsMSwwLDAsMSwxMCwxNGwyLjctMy4yM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4yMiwy'@;
put 'MC42NGEyMC4zNywyMC4zNywwLDAsMCw3LjQsNC43OWwzLjc3LTNhLjY3LjY3LDAsMCwxLC43NiwwbDcsNC41MWEyLDIsMCwwLDEsLjMzLDMuMThsLTMuMjgsMy4yNGE0LDQsMCwwLDEtMy42MywxLjA3LDM1LjA5LDM1LjA5LDAsMCwxLTE3LjE1LTlBMzMuNzksMzMuNzksMCwwLDEsMS4xNSw4'@;
put 'LjZhMy43OCwzLjc4LDAsMCwxLDEuMS0zLjU1bDMuNC0zLjI4YTIsMiwwLDAsMSwzLjEyLjMyTDEzLjQzLDlhLjYzLjYzLDAsMCwxLDAsLjc1bC0zLjA3LDMuNjlBMTkuNzUsMTkuNzUsMCwwLDAsMTUuMjIsMjAuNjRaIi8+XG4nKSxGLkNsclNoYXBlTm9XaWZpPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuNDJhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMjQuNDJabTAsNmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwxOCwzMC40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuMjEsMjEuODVhMSwxLDAsMCwwLS4yMy0xLjQsMTMuNTYsMTMuNTYsMCwwLDAtNS0yLjIzbDMuODcsMy44N0ExLDEsMCwwLDAsMjYuMjEsMjEuODVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LjA1LDEwLjcyYTIwLjg4LDIwLjg4LDAsMCwwLTQuMTYuNDNsMS43NCwxLjc0YTE5LDE5LDAsMCwxLDIuNDItLjE3QTE4Ljc2LDE4Ljc2LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAs'@;
put 'MTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMzLjU1LDguMkEyOC4xMSwyOC4xMSwwLDAsMCw4LjExLDUuMzZMOS42OSw2LjkzQTI2LDI2LDAsMCwxLDMyLjQ1LDkuODdhMSwxLDAsMCwwLDEu'@;
put 'MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xLjg0LDQuNzUsNC4yNyw3LjE4Yy0uNjIuMzQtMS4yMy43LTEuODMsMS4xQTEsMSwwLDEsMCwzLjU2LDkuOTRDNC4yNiw5LjQ3LDUsOSw1Ljc0LDguNjVs'@;
put 'My44NywzLjg3QTIwLjU5LDIwLjU5LDAsMCwwLDYuMjMsMTQuNCwxLDEsMCwwLDAsNy4zNiwxNmExOC44MiwxOC44MiwwLDAsMSwzLjc3LTJsNC4xNiw0LjE2QTEzLjUxLDEzLjUxLDAsMCwwLDEwLDIwLjU1YTEsMSwwLDAsMCwxLjE4LDEuNjFBMTEuNTIsMTEuNTIsMCwwLDEsMTcsMjBsMTAu'@;
put 'OCwxMC44LDEuNDEtMS40MS0yNi0yNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjkuNTQiIHI9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTIiIGQ9Ik0yOS4xOCwxNy43MWwuMTEtLjE3YTEuNTEsMS41MSwwLDAsMC0uNDctMi4xQTIwLjU3LDIwLjU3LDAsMCwwLDE4LDEyLjM3Yy0uNTYsMC0xLjExLDAtMS42NS4wN2wzLjIxLDMuMjFhMTcuNDEsMTcuNDEsMCwwLDEsNy42LDIuNTJBMS40OSwxLjQ5LDAsMCwwLDI5LjE4LDE3'@;
put 'LjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjc2LDkuMzhBMjcuOSwyNy45LDAsMCwwLDEwLjE4LDYuMjdMMTIuODEsOC45QTI0LjY4LDI0LjY4LDAsMCwxLDMxLjEsMTIuMTJhMS40OSwxLjQ5LDAsMCwwLDIt'@;
put 'LjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMyw0Ljc1bDMuMSwzLjFBMjcuMjgsMjcuMjgsMCwwLDAsMy4xOCw5LjQyYTEuNTEsMS41MSwwLDAsMC0u'@;
put 'NDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY5LDI0LjY5LDAsMCwxLDMuNjctMS45bDMuMTQsMy4xNGEyMC42MywyMC42MywwLDAsMC00LjUzLDIuMDksMS41MSwxLjUxLDAsMCwwLS40NiwyLjFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NkExNy40NiwxNy40'@;
put 'NiwwLDAsMSwxNC4yNSwxNmwzLjYsMy42YTEzLjM5LDEzLjM5LDAsMCwwLTYuNzksMS45MywxLjUsMS41LDAsMCwwLS40NiwyLjA5bC4xLjE2YTEuNTIsMS41MiwwLDAsMCwyLjA2LjQ0LDEwLjIsMTAuMiwwLDAsMSw5LS43TDI5LDMwLjc1bDEuNDEtMS40MS0yNi0yNloiLz5cbicpLEYuQ2xy'@;
put 'U2hhcGVJbnN0YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBh'@;
put 'MiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCwwLDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEwLjMsMTguODdsNyw2Ljg5YTEsMSwwLDAsMCwxLjQsMGw3'@;
put 'LTYuODlhMSwxLDAsMCwwLTEuNC0xLjQzTDE5LDIyLjY1VjRhMSwxLDAsMCwwLTIsMFYyMi42NWwtNS4zLTUuMjFhMSwxLDAsMCwwLTEuNCwxLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk'@;
put 'IiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+PHBhdGggZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEs'@;
put 'MCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAs'@;
put 'MCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMi0tYWxlcnRlZCIgZD0iTTMxLDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs'@;
put 'MS4xNFoiLz5cbicpLEYuQ2xyU2hhcGVVbmluc3RhbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43'@;
put 'LDI1LjNsLTUuMjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCww'@;
put 'LDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUu'@;
put 'MjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEz'@;
put 'LjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTEuMjksMjYuNzJhMSwxLDAsMCwwLDEuNDEsMEwxOCwyMS40OWw1LjMsNS4yM0ExLDEsMCwwLDAsMjQuNywyNS4zbC01LjI4LTUuMjEsNC43NS00LjY5SDIyLjIzYTMuNjUsMy42NSwwLDAsMS0uODEtLjFMMTgsMTgu'@;
put 'NjhsLTUuMy01LjIzYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS4yOCw1LjIxTDExLjMsMjUuM0ExLDEsMCwwLDAsMTEuMjksMjYuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMx'@;
put 'LDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbicpLEYuQ2xyU2hh'@;
put 'cGVMYXllcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWEx'@;
put 'LDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVpNNS4zNCwxMi4xNmwxMi42Niw2LDEyLjY2LTZMMTgsNi4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjYuMTZhMSwxLDAs'@;
put 'MCwxLS40My0uMUwyLjU3LDE5YTEsMSwwLDEsMSwuODUtMS44MUwxOCwyNC4wNmwxNC41Ny02Ljg5QTEsMSwwLDEsMSwzMy40MywxOWwtMTUsNy4wOUExLDEsMCwwLDEsMTgsMjYuMTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWExLDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSww'@;
put 'LDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xOCwzMi4wN2ExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwuODUtMS44MUwxOCwzMGwxNC41Ny02Ljg5YTEsMSwwLDEsMSwuODUs'@;
put 'MS44MUwxOC40MywzMkExLDEsMCwwLDEsMTgsMzIuMDdaIi8+XG4nKSxGLkNsclNoYXBlQmxvY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQyLDkuMDlsLTEzLTZhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx'@;
put 'LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTBBMSwxLDAsMCwwLDMxLjQyLDkuMDlaTTE4LDUuMSwyOC42MSwxMCwxOCwxNC45LDcuMzksMTBaTTYsMTEuNTZsMTEsNS4wOHYxNC44TDYsMjYuMzZaTTE5LDMxLjQ0VjE2LjY0bDExLTUuMDh2MTQuOFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjUzVjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDIuNTctMS4xOWEzLjY3LDMuNjcsMCwwLDEtMi4xMS0xLjIyTDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsMy4wOCwxLjQyLDEtMS43NEwx'@;
put 'OC40MiwzLjA5YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjE1LjUzWk0xNywzMS40NCw2LDI2LjM2VjExLjU2bDExLDUuMDhaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxLjI2bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkySDMzLjdhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkyTDI5LjA4LDEuMjZBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDI2Ljg3LDEuMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3'@;
put 'LDcuNTcsMCwwLDEtMi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx'@;
put 'LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMt'@;
put 'NmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsMTQuOSw3LjM5LDEwLDE4LDUuMSwyOC42MSwxMFpNMzAsMjYu'@;
put 'MzYsMTksMzEuNDRWMTYuNjRsMTEtNS4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuMzh2MTFMMTksMzEuNDRWMTYuNjRsMi43OS0xLjI5YTMuNjgsMy42OCwwLDAsMS0yLjI1LTEuMTZMMTgsMTQuOSw3'@;
put 'LjM5LDEwLDE4LDUuMWwzLDEuMzksMS0xLjc1TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTIsMjEuMTMsMTFhMS4yNywxLjI3LDAsMCwwLDEuMSwxLjkxSDMzLjY4QTEuMjcsMS4yNywwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjEyQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3LDcuNTcsMCwwLDEt'@;
put 'Mi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0'@;
put 'LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUJsb2Nrc0dyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0z'@;
put 'LjQ1YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBs'@;
put 'Ny41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yLjgxLjkxTDI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1Wk0xOC4xLDQuMDhsNS4xMSwyLjM1TDE4LjEsOC43OCwxMyw2LjQzWk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIy'@;
put 'LDUuNDksMTkuNjdabTYuNSwxMS40OS02LjUsMy02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhaTTExLjYsMTUuNTdoMFY4bDYuMDgsMi44YTEsMSwwLDAsMCwuODQsMEwyNC42LDh2Ny41OGgwbC02LjUsM1pNMzIuMTEsMjguODFsLTYuNSwzLTYuNTEtM1Yy'@;
put 'MS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRsNi4wOC0yLjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3aC0ydjBsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCww'@;
put 'bC4yNC0uMTFhNC4xNyw0LjE3LDAsMCwxLC4yOS0uNjVsMS4zMy0yLjMxLTIuMjgsMUwxMyw2LjQzbDUuMS0yLjM1LDMuNDcsMS42LDEtMS43M0wxOC41LDIuMDhhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTgu'@;
put 'OTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEw'@;
put 'LjYsMjIsNS40OSwxOS42N1ptMCwxNC40OS02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTE1LTE0LjQ4LDUuMTEsMi4zNUwyNS42MSwyMiwyMC41LDE5LjY3Wm0wLDE0LjQ5LTYuNTEtM1YyMS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRs'@;
put 'Ni4wOC0yLjgsMCw3LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4x'@;
put 'LTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWMTIuN2E3LjU4'@;
put 'LDcuNTgsMCwwLDEtMi0xLjUxdjQuMzlsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDIzLDguNzJhNy4wNSw3LjA1LDAsMCwxLS40Ny0ybC00LjQ3LDJMMTMsNi40M2w1LjEtMi4zNSw0LjQ0LDJzMC0uMDYsMC0uMDlhNy41NSw3LjU1LDAsMCwxLC4yNy0ybC00LjMt'@;
put 'MmExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0z'@;
put 'LjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4x'@;
put 'MSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4'@;
put 'PSIzMC4wMyIgY3k9IjYuMDMiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0zLjQ1'@;
put 'YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41'@;
put 'LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1LDUuMTEsMi4zNVptLTEtNi40NC02LjQ0LDNWMTAuODdhMSwxLDAsMCwwLC4zNS0uMDhMMjQuNiw4djcuNThaTTE4LjEsNC4wOGw1LjExLDIu'@;
put 'MzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzaDBWMjQuMTFoMEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhabTE1LDAtNi40NiwzVjI0LjExQTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N3YwaC0ydjBsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOGwuMTQtLjA2QTMuMjMsMy4yMywwLDAsMSwxOSwxMGwxLjI4LTIuMjItMi4xNCwxTDEz'@;
put 'LDYuNDNsNS4xLTIuMzUsMy4zOSwxLjU2LDEtMS43My00LTEuODNhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTguOTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4'@;
put 'LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yOCwuOTEsNS4xMS0yLjM2LDUuMTEsMi4zNUwxMC42LDIyWk0xMC42LDMxLjhWMjQuMTFBMS4wOCwxLjA4LDAsMCwwLDExLDI0bDYu'@;
put 'MDgtMi44LDAsNy42Wm05LjktMTIuMTMsNS4xMS0yLjM1LDUuMTEsMi4zNUwyNS42MSwyMlpNMjUuNjQsMzEuOFYyNC4xMUEuODkuODksMCwwLDAsMjYsMjRsNi4wOC0yLjgsMCw3LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuPHBhdGggZD0iTTI2Ljg5LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjcsMTNIMzMuNzJhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjEsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODksMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi42OWE3LjY2LDcuNjYsMCwwLDEtMi0xLjQ3djQuMzRsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOEwyMyw4LjczYTcuNjUsNy42NSwwLDAs'@;
put 'MS0uNDgtMmwtNC40MiwyTDEzLDYuNDNsNS4xLTIuMzUsNC4zOCwyVjZhNy41NSw3LjU1LDAsMCwxLC4yNy0yTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwu'@;
put 'NTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYs'@;
put 'MzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuPGNpcmNsZSBjeD0iMjkuOTgiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQnVuZGxlPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEsMSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwu'@;
put 'ODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEyLjkxWk01LDEyLjEzLDE2LDE3LjRWMzEuNDZMNSwyNi4y'@;
put 'Wk0xOCwzMS40NVYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEs'@;
put 'MSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwuODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEy'@;
put 'LjkxWm0xLDE1LjhWMTcuMzZsMTMtNi4yOXYxNC4xWiIvPlxuJyksRi5DbHJTaGFwZVdpZmk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy41NSw4LjJhMjguMSwyOC4xLDAsMCwwLTMxLjExLjA4QTEsMSww'@;
put 'LDEsMCwzLjU2LDkuOTRhMjYuMTEsMjYuMTEsMCwwLDEsMjguODktLjA3LDEsMSwwLDAsMCwxLjEtMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTguMDUsMTAuNzJBMjAuNzQsMjAuNzQsMCwwLDAsNi4y'@;
put 'MywxNC40LDEsMSwwLDAsMCw3LjM2LDE2LDE4Ljg1LDE4Ljg1LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAsMTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MyIgZD0iTTE4LjA1LDE3LjlhMTMuNTEsMTMuNTEsMCwwLDAtOCwyLjY0LDEsMSwwLDAsMCwxLjE4LDEuNjEsMTEuNTYsMTEuNTYsMCwwLDEsMTMuNjItLjA4QTEsMSwwLDEsMCwyNiwyMC40NiwxMy41MiwxMy41MiwwLDAsMCwxOC4wNSwxNy45WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLjc2LDkuMzhhMjcuODcsMjcuODcsMCwwLDAtMjkuNTcsMCwxLjUxLDEuNTEsMCwwLDAt'@;
put 'LjQ4LDIuMTFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NiwyNC42OCwyNC42OCwwLDAsMSwyNi4yNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3QTEuNTEsMS41MSwwLDAsMCwzMi43Niw5LjM4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI4LjgyLDE1LjQ0YTIwLjU5LDIwLjU5LDAsMCwwLTIxLjcsMCwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDE3LjQsMTcuNCwwLDAsMSwxOC4zNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3'@;
put 'QTEuNTEsMS41MSwwLDAsMCwyOC44MiwxNS40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC44OCwyMS40OWExMy40MSwxMy40MSwwLDAsMC0xMy44MiwwLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41'@;
put 'MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMjcsMTAuMjcsMCwwLDEsMTAuNDIsMCwxLjUyLDEuNTIsMCwwLDAsMi4wNi0uNDVsLjEtLjE2QTEuNDksMS40OSwwLDAsMCwyNC44OCwyMS40OVoiLz5cbicpLEYuQ2xyU2hhcGVSYWNrU2VydmVyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YWxlcnRlZCIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjY0LDExQTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTB2MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYyMUg0VjE1SDIwLjU4QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41Nkg0VjdIMjAuNzFsMS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEy'@;
put 'LDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4x'@;
put 'MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTAiIHk9IjE3IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIx'@;
put 'NCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIGQ9Ik0xMCwxMUgyNHYtLjUxQTcuNDgsNy40OCwwLDAsMSwyMy4xMyw5SDEwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi42OC0uNUg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlh'@;
put 'MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjZINFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMTAiIHk9IjkiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9'@;
put 'IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDdIMzJ2Nkg0Wm0wLDhIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNiIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEwVjdIMjAuNzFsMS43My0zSDRBMiwyLDAsMCwwLDIsNnY2SDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5Wk04LDlINlY3SDhaIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMnY4SDM0VjE1LjM4Wk04LDE5SDZWMTdIOFptMTYsMEgxMFYxN0gyNFoiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMiwxNHY4SDM0VjE0Wm02LDVINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjQ5LDcuNDksMCwwLDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2djZIMjUuNTFBNy41Miw3LjUyLDAsMCwxLDIzLjEzLDlaTTgs'@;
put 'OUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDIySDM0VjE0SDJabTgtNUgyNHYySDEwWk02LDE3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2djZIMzRWNkEyLDIsMCwwLDAsMzIs'@;
put 'NFpNOCw5SDZWN0g4Wk0yNCw5SDEwVjdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4n'@;
put 'KSxGLkNsclNoYXBlSGFyZERpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0zNCwyMS4wOGwtMS40LTUuNjhIMzAuNTFsMS40OSw2VjI5SDRWMjEuNDRMNy4wNiw5aDEyLjVsMS4xNS0ySDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFB'@;
put 'MSwxLDAsMCwwLDM0LDIxLjA4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz'@;
put 'My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjAiIHdp'@;
put 'ZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzQsMjEuMDgsMzIsMTMuMjFhNy40OSw3LjQ5LDAsMCwxLTIsLjI5bDIsNy45NFYyOUg0VjIxLjQ0TDcuMDYsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4wNkEyLDIsMCwwLDAsNS4x'@;
put 'Myw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNCwyMS4wOCwzMC44Niw4LjQzQTIsMiwwLDAsMCwyOC45NCw3SDcuMDZBMiwyLDAsMCwwLDUu'@;
put 'MTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFBMSwxLDAsMCwwLDM0LDIxLjA4Wk00LDI5VjIxLjQ0TDcuMDYsOUgyOC45M0wzMiwyMS40NFYyOVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIxQTcuNDcsNy40NywwLDAsMSwyMi41Nyw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjg2'@;
put 'LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMiwyMnY3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt'@;
put 'MlYyMlptMjgsNUgyNlYyNWg0WiIvPlxuJyksRi5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEuNzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMxLjU4LDE1LjRIMjkuNDZjMSwyLjg1LDIuMzEsNi4zNywyLjU0LDcuMDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjks'@;
put 'MS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xMiwzNCwyMiwzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i'@;
put 'YWRnZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVh'@;
put 'MSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2Vk'@;
put 'IiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2Mmg3Ljk1QzMwLDE2Ljk0LDMxLjcyLDIxLjY1LDMyLDIyLjQ4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIMTVWMTJINy4wN2ExLjkyLDEuOTIs'@;
put 'MCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMSwzNCwyMiwzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEzLDkuOTIsMTcs'@;
put 'NlYxOWExLDEsMCwxLDAsMiwwVjZsNCwzLjk1QTEsMSwwLDEsMCwyNC4zOCw4LjVMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLjg0LDEzLjM3'@;
put 'QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIs'@;
put 'MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwy'@;
put 'SDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEu'@;
put 'NzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyMi4yM0EzLjYyLDMuNjIsMCwwLDEsMjEsMTUuMTZW'@;
put 'MThhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43OSwyMS40OSwzMy4yOCwyMC4wNywzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsNCwzLjk1YTEsMSwwLDAsMCwuNzEuMjlsLjExLDBhNy40Niw3LjQ2LDAsMCwxLTEuMjUtMy41MkwxOCwyLjE2LDExLjYxLDguNUExLDEs'@;
put 'MCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2NmEzLDMs'@;
put 'MCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc3LDIxLjQzLDMzLjE1LDE5LjcsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy'@;
put 'NFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45'@;
put 'LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTQsMTkuNjksMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSww'@;
put 'LDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbicpLEYuQ2xyU2hhcGVCYWNrdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOCwxOS44NGw0LjQ3LTQuNDRoLS4yM2EzLjY3LDMuNjcsMCwwLDEtMi0uNjFMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIy'@;
put 'LjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1'@;
put 'LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9'@;
put 'IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uMjQsMS4zaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBI'@;
put 'NFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAsMS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3'@;
put 'LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIlxu'@;
put 'ICAgICAgICAgICAgICAgIGQ9Ik0zMC44NCwxMy4zN0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS4xNCwyaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAs'@;
put 'MS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw0SDI2VjI2aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNS0uNTEtLjY1LTEuOTMtMi4zNS02LjZIMjUuM2wtNS44OSw1Ljg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'NC0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjQsMy42NCwwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEu'@;
put 'NDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42'@;
put 'OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNy0uNTctLjc5LTIuMy0zLjA2LTguNTVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNSw3LjQ2LDcuNDYsMCwwLDEtMy4z'@;
put 'NS0uOCwzLDMsMCwwLDEtLjg2LDIuMjFsLTYuMzgsNi4zNVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTkuNDEsMjEuMjZsLS43NC43NEgzMy45M2MtLjE3LS41Ny0uNzktMi4zMS0zLjA5LTguNjNBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDI2LjU1YTMsMywwLDAsMS0uNzYsMi45MloiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbicpLEYuQ2xyU2hhcGVEZXZpY2VzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyNkgyNFYxNVpNMjQsMzBWMjcuNmg4VjMwWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMCwyMkg0VjZIMjh2NWgyVjZhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMkgyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAsMjZIOWExLDEsMCwwLDAsMCwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDEzSDI0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAs'@;
put 'MCwyLTJWMTVBMiwyLDAsMCwwLDMyLDEzWm0wLDJWMjhIMjRWMTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjgsNEg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMmg4djJIOS4zMkExLjIsMS4yLDAsMCww'@;
put 'LDgsMjdhMS4yLDEuMiwwLDAsMCwxLjMyLDFIMTkuOTJ2LS4zN0gyMFYyMkg0VjZIMjh2NWgyVjZBMiwyLDAsMCwwLDI4LDRaIi8+XG4nKSxGLkNsclNoYXBlS2V5Ym9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsMThINFYxMEgzMloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI3IiB5'@;
put 'PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjExIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE1IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjE5IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjI3IiB5'@;
put 'PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMTEiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxOSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjMi'@;
put 'IHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI3IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiB4PSIyNyIgeT0iMjIiIHdpZHRoPSIxLjk0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgeD0iNyIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi'@;
put 'Lz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTEuMTMiIHk9IjIyIiB3aWR0aD0iMTMuNzUiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNMTksMTNoMnYySDE5Wm0wLDRoMnYySDE5Wm0tNC00aDJ2MkgxNVptMCw0aDJ2MkgxNVptLTQtNGgydjJIMTFaTTksMjRIN1YyMkg5Wm0wLTVIN1Yx'@;
put 'N0g5Wm0wLTRIN1YxM0g5Wm0yLDJoMnYySDExWm0xMy44OCw3SDExLjEzVjIySDI0Ljg4Wk0yNSwxOUgyM1YxN2gyWm0wLTRIMjNWMTNoMlptMy45NCw5SDI3VjIyaDEuOTRaTTI5LDE5SDI3VjE3aDJabTAtNEgyN1YxM2gyWiIvPlxuJyksRi5DbHJTaGFwZU1vdXNlPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMzRBMTAsMTAsMCwwLDEsOCwyNFYxMmExMCwxMCwwLDAsMSwyMCwwVjI0QTEwLDEwLDAsMCwxLDE4LDM0Wk0xOCw0YTgsOCwwLDAsMC04LDhWMjRhOCw4LDAsMCwwLDE2LDBWMTJBOCw4'@;
put 'LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDE1YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDIsMHY0QTEsMSwwLDAsMSwxOCwxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTEwLDEwLDAsMCwwLDgsMTJWMjRhMTAsMTAsMCwwLDAsMjAsMFYxMkExMCwxMCwwLDAsMCwxOCwyWm0xLjMsMTEuNDRhMS4zLDEuMywwLDAsMS0yLjYsMFYxMGExLjMsMS4zLDAsMCwxLDIuNiwwWiIvPlxuJyksRi5D'@;
put 'bHJTaGFwZURhc2hib2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LjE4LDEyLjMybC01LjkxLDUuODFhMywzLDAsMSwwLDEuNDEsMS40Mmw1LjkyLTUuODFaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTExLjM0LDI1LjVINi42NmExNC40MywxNC40MywwLDAsMS0z'@;
put 'LjExLTcuODRIN3YtMkgzLjU1QTE0LjQxLDE0LjQxLDAsMCwxLDcsMTEuMjlsMi40NSwyLjQ1LDEuNDEtMS40MUw4LjQzLDkuODdBMTQuNDEsMTQuNDEsMCwwLDEsMTcsNi4yOXYzLjVoMlY2LjNhMTQuNDcsMTQuNDcsMCwwLDEsMTMuNCwxMy42MUgyOC45MnYyaDMuNTNBMTQuNDMsMTQuNDMs'@;
put 'MCwwLDEsMjkuMzQsMjkuNzVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTUuODUsMTguNjlhMywzLDAsMSwwLDQuODMuODVsNS45Mi01LjgxLTEuNDEtMS40MS01LjkxLDUu'@;
put 'ODFBMywzLDAsMCwwLDE1Ljg1LDE4LjY5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjU4LDEzYTcuNDUsNy40NSwwLDAsMS0yLjA2LjQ0LDE0LjQsMTQuNCwwLDAsMSwx'@;
put 'LjkzLDYuNDNIMjguOTJ2MmgzLjUzYTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEsNy44NEg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAs'@;
put 'MSwxNyw2LjI5djMuNWgyVjYuM0ExNC40MSwxNC40MSwwLDAsMSwyMi41OCw3YTcuNTIsNy41MiwwLDAsMS0uMDgtMSw3LjUyLDcuNTIsMCwwLDEsLjA5LTEuMDlBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNloi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTguNiw5LjQ4LTUuOTIsNS44MWEzLDMsMCwxLDEtMS40MS0xLjQybDUuOTEtNS44MVptLTIzLDYuMTdIN3Yy'@;
put 'SDMuNTZjMC0uMzktLjA1LS43Ny0uMDUtMS4xN1MzLjUzLDIwLjE4LDMuNTUsMTkuOVptNC44OC0xMCwyLjQ2LDIuNDZMOS40NywxMy43NCw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N1pNMTksOS43OUgxN1Y2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1Wk0zMi40'@;
put 'OSwyMC43NGMwLC4zOSwwLC43OS0uMDUsMS4xN0gyOC45MnYtMmgzLjUzQzMyLjQ3LDIwLjE4LDMyLjQ5LDIwLjQ2LDMyLjQ5LDIwLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJN'@;
put 'MzIuNTgsMTNhNy40Niw3LjQ2LDAsMCwxLTEwLTguMTJBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNlpNMTcsNi4yOWMuMzIsMCwuNjMsMCwxLDBzLjcsMCwxLC4wNXYzLjVIMTdaTTcsMjEuOTFIMy41NmMwLS4z'@;
put 'OS0uMDUtLjc3LS4wNS0xLjE3czAtLjU2LDAtLjgzSDdabTIuNTEtOC4xNkw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N2wyLjQ2LDIuNDZabTEwLjYyLDkuMTlhMywzLDAsMSwxLS44Mi00LjgxbDUuOTEtNS44MSwxLjQxLDEuNDEtNS45Miw1LjgxQTMsMywwLDAsMSwyMC4w'@;
put 'OSwyMi45M1ptMTIuMzUtMUgyOC45MnYtMmgzLjUzYzAsLjI4LDAsLjU1LDAsLjgzUzMyLjQ3LDIxLjUyLDMyLjQ0LDIxLjkxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFk'@;
put 'Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVIb3N0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuM2EyLjQ4LDIuNDgsMCwxLDAsMi40OCwyLjQ3QTIuNDgsMi40OCwwLDAs'@;
put 'MCwxOCwyNC4zWm0wLDMuNmExLjEzLDEuMTMsMCwxLDEsMS4xMy0xLjEyQTEuMTMsMS4xMywwLDAsMSwxOCwyNy45WiIvPjxyZWN0IHg9IjEzLjUiIHk9IjIwLjciIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjY1LDMuNkgxMC4zNUExLjM1LDEuMzUsMCwwLDAsOSw0Ljk1VjMyLjRIMjdWNC45NUExLjM1LDEuMzUsMCwwLDAsMjUuNjUsMy42Wm0tLjQ1LDI3SDEwLjhWNS40SDI1LjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjEyLjYiIHk9IjcuMiIgd2lkdGg9IjEwLjgiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi42IiB5PSIxMC44IiB3aWR0'@;
put 'aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41'@;
put 'LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk'@;
put 'IiBwb2ludHM9IjIxLjMsNiAxMiw2IDEyLDcuNiAyMC40LDcuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTIsMTEuNmg2LjZjMC0wLjYsMC4yLTEuMSwwLjQtMS42aC03'@;
put 'VjExLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0yNiwxNS40VjMySDEwVjRoMTIuNWwxLjEtMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTUuNEgyNnoiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4y'@;
put 'aDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJz'@;
put 'MC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIxMyIgeT0iMjEiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yNCwxMC41Yy0wLjEtMC4yLTAuMi0wLjMtMC4zLTAuNUgxMnYxLjZoMTJWMTAuNXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xMiw2djEuNmgxMC43Yy0wLjEtMC41LTAuMi0xLjEtMC4yLTEuNkgxMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC01LS1iYWRnZWQiIGQ9Ik0yNiwxMi4zVjMySDEwVjRoMTIuOGMwLjItMC43LDAuNS0xLjQsMC45LTJIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjJDMjcuMywxMywyNi42LDEyLjcsMjYsMTIuM3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi41LDJoLTE3QzguNywy'@;
put 'LDgsMi43LDgsMy41VjM0aDIwVjMuNUMyOCwyLjcsMjcuMywyLDI2LjUsMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnogTTI0LDExLjZIMTJWMTBo'@;
put 'MTJWMTEuNnogTTI0LDcuNkgxMlY2aDEyVjcuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjNjLTIsMC0zLjctMS42LTMuNy0zLjdIMTJWMTBoNi45YzAtMC4xLDAuMS0wLjIsMC4xLTAuMmwxLjItMi4ySDEyVjZoOS4ybDIuMy00aC0xNEM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS4zSDIy'@;
put 'LjJ6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6IE0yMywyMi42SDEzVjIxaDEwVjIyLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxbC01Ljcs'@;
put 'OS45Yy0wLjMsMC42LTAuMSwxLjQsMC41LDEuN2MwLjIsMC4xLDAuNCwwLjIsMC42LDAuMmgxMS40YzAuNywwLDEuMy0wLjYsMS4zLTEuM2MwLTAuMi0wLjEtMC40LTAuMi0wLjZMMjkuMSwxYy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuNywyNywwLjgsMjYuOSwxeiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjQsMTAuM3YxLjJIMTJWMTBoMTEuOGMtMC41LTAuNy0wLjgtMS41LTEtMi40SDEyVjZoMTAuNWMwLDAsMC0wLjEsMC0wLjFjMC0xLjQsMC40LTIuNywx'@;
put 'LjEtMy45SDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxMy4xQzI2LjQsMTIuNiwyNSwxMS43LDI0LDEwLjN6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6TTIzLDIyLjZIMTNWMjFoMTBW'@;
put 'MjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1LjkiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVTdG9yYWdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMs'@;
put 'Ni42OWgwYy0uMTgtMy40MS05LjQ3LTQuMzMtMTUtNC4zM1MzLDMuMjksMyw2Ljc4VjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1Y2Ljc4czAsMCwwLDBTMzMsNi43LDMzLDYuNjlabS0yLDcuNTZjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwz'@;
put 'Ny40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzIsNDMuMzIsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMiw0My4zMiwwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40'@;
put 'OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjNy43NywwLDEyLjQ2LDEuNTMsMTMsMi4zNy0uNTIuODctNS4yMSwyLjM5LTEzLDIuMzlBMzcuNiwzNy42LDAsMCwxLDcsNy43NlY5Ljg1YTQzLjUz'@;
put 'LDQzLjUzLDAsMCwwLDExLDEuMjdjNCwwLDkuOTMtLjQ4LDEzLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xOS41MSw5LjA5LDE4LDkuMTFBMzcuNiwzNy42LDAsMCwx'@;
put 'LDcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjdoLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjguODMs'@;
put 'MTUuNEEzOC4zNywzOC4zNywwLDAsMSwxOCwxNi43LDM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMyw0My4zMywwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1'@;
put 'YTQzLjMzLDQzLjMzLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmMxLjUsMCwyLjg5LjA2LDQuMTUuMTZsMS4xLTEuOWMtMS44Ni0uMTgtMy43LS4y'@;
put 'Ni01LjI1LS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzdi0xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl'@;
put 'cnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjcsNTQuODIsNTQuODIsMCwwLDAsNi4yLS4zNiw3LjUsNy41LDAsMCwxLTEuMTMtMS44OGMtMS41LjE1LTMuMi4yNC01'@;
put 'LjA3LjI0QTM3LjYsMzcuNiwwLDAsMSw3LDcuNzZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDN2LjgyYy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUs'@;
put 'MzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0u'@;
put 'NDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNywwLDMuMjUuMDgsNC42NC4yYTcuNDQsNy40NCwwLDAsMSwuNjctMS45NGMtMS44OC0uMTgtMy43NS0uMjYtNS4zMS0uMjYtNS41NywwLTE1'@;
put 'LC45My0xNSw0LjQzVjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NFY4LjU5Yy0uNDMs'@;
put 'Mi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFDMjYsMTAuNTMsMzIuNTIsOC43OSwzMyw2LjYxaDBDMzIuOCwzLjIsMjMuNTIsMi4yOCwxOCwyLjI4UzMsMy4yMSwzLDYuNzFWMjkuMjljMCwzLjQ5LDkuNDMs'@;
put 'NC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4wOVYxNi4zNGMtLjQzLDIuMi03LDMuOTQt'@;
put 'MTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE3LjkxLDIw'@;
put 'LjI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yYTM5LjQsMzkuNCwwLDAsMCwxMS42NiwxLjUxYzYuOSwwLDEyLjctMS4yNywxNC41MS0zSDIyLjIzYTMuNjcsMy42NywwLDAsMS0zLjU1LTIuNzVoLS43N0EzOS40LDM5LjQsMCwwLDEsNi4yNSwxMVY5YTM5LjQsMzkuNCwwLDAsMCwx'@;
put 'MS42NiwxLjUxaC44MkEzLjY0LDMuNjQsMCwwLDEsMTksOS43NWw0LjE3LTcuMjJjLTEuODUtLjE4LTMuNjgtLjI1LTUuMjEtLjI1LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYs'@;
put 'MjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0QzMyLjU3LDE4LjUzLDI2LDIwLjI4LDE3LjkxLDIwLjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NHYtMS42YTcuNDcsNy40NywwLDAsMS03LjM4LS44'@;
put 'LDQ4LjMsNDguMywwLDAsMS03LjcxLjU5QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTEsNTEsNTEsMCwwLDAsNi0uMzQsNy40Niw3LjQ2LDAsMCwxLS41OS03LjY1Yy0xLjg3LS4xOC0zLjczLS4yNi01LjI4LS4yNi01LjU3LDAtMTUsLjkzLTE1'@;
put 'LDQuNDNWMjkuMjljMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4w'@;
put 'OVYxNi4zNGMtLjQzLDIuMi03LDMuOTQtMTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuJyksRi5DbHJTaGFwZUNsdXN0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjM2LDhIMjcuNXYySDMxVjMwSDI3LjV2MkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+PGVs'@;
put 'bGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEEx'@;
put 'LjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMjQsMzBIMTJWNkgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNSwxMEg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdWMzJIOC41VjMwSDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPjxl'@;
put 'bGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5bC4zOS0uNjhIMTMuNXYxLjZoNS4xN0Ez'@;
put 'LjY1LDMuNjUsMCwwLDEsMTksOS44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMzBIMTJWNmg5LjI5bDEuMTUtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYz'@;
put 'MkgyNlYxNS40SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzEgMTUuNCAzMSAzMCAyNy41IDMwIDI3LjUgMzIgMzMgMzIgMzMgMTUuNCAzMSAxNS40IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx'@;
put 'LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMs'@;
put 'OS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPjxlbGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI0LDEwLjQ5VjMwSDEyVjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzBIMjcuNXYySDMzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zNiw4SDI3LjVWMzJIMzNWOS42N0ExLjY1LDEuNjUsMCwwLDAs'@;
put 'MzEuMzYsOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEExLjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgy'@;
put 'M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl'@;
put 'cnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuNSIgeT0iMTUuNCIgd2lkdGg9IjUuNSIgaGVpZ2h0PSIxNi42IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMTMuNTZhMy42'@;
put 'OCwzLjY4LDAsMCwxLS4zMS0zSDEzVjloNi41NmwyLjg5LTVIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaTTE4LDI3Ljc5QTEuNzksMS43OSwwLDEsMSwxOS44MSwyNiwxLjgsMS44LDAsMCwxLDE4LDI3Ljc5'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAs'@;
put 'MCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy40'@;
put 'OSw3LjQ5LDAsMCwxLDIyLjUsNlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgyM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi41LS40NFYzMkgzM1YxMi44N0E3LjQ3LDcuNDcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBcHBsaWNhdGlvbnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQg'@;
put 'MTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDQgMzAgOCAyNiA4IDI2IDEwIDMyIDEwIDMyIDQgMzAgNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0'@;
put 'IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUgMzAgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cG9s'@;
put 'eWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkg'@;
put 'MzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIv'@;
put 'PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgOCAxNSA4'@;
put 'IDE1IDEwIDIxIDEwIDIxIDQgMTkgNCAxOSA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMTkgMTUgMTkgMTUgMjEgMjEgMjEgMjEgMTUgMTkgMTUgMTkgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDMwIDE1IDMwIDE1'@;
put 'IDMyIDIxIDMyIDIxIDI2IDE5IDI2IDE5IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCA4IDQgOCA0IDEwIDEwIDEwIDEwIDQgOCA0IDggOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0i'@;
put 'OCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAx'@;
put 'NSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTUgMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFs'@;
put 'ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv'@;
put 'biBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDhIMTV2Mmg0TDE5LDkuODksMjEsNi41'@;
put 'VjRIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43'@;
put 'OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWln'@;
put 'aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0'@;
put 'IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9'@;
put 'IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJl'@;
put 'Y3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMTBoNEwxOSw5Ljg5LDIxLDYuNVY0SDE1WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu'@;
put 'MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iNCIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC04LS1iYWRnZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC05LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUJ1aWxkaW5nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS44'@;
put 'OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0gyMlY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxOS44OCwzWk0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVj'@;
put 'dCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i'@;
put 'YWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2'@;
put 'IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4'@;
put 'LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzVjMxSDIz'@;
put 'djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9'@;
put 'IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIg'@;
put 'd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy'@;
put 'dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCww'@;
put 'LDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJWOC4yNGwyLTMuNDFBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjE1LjM4YTMuNjgsMy42OCwwLDAsMS0yLS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMxIDIzIDMxIDIzIDMzIDMzIDMzIDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4'@;
put 'LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw4SDIyVjMzSDMzVjEwQTIsMiwwLDAsMCwzMSw4Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBI'@;
put 'MjhWMjNoMlptMC01SDI4VjE4aDJabTAtNUgyOFYxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWNS4xMkEyLjEyLDIuMTIs'@;
put 'MCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVWOGgy'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWMTQuNjRhMy42NywzLjY3LDAsMCwxLTEtNC43NmwxLTEuNjVWNS4xMkEyLjEyLDIu'@;
put 'MTIsMCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVW'@;
put 'OGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRsLS4yMywwVjMzSDMzVjE1LjRaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm00LDVIMjhWMjNoMlptMC01SDI4'@;
put 'VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx'@;
put 'TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0'@;
put 'LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0w'@;
put 'LTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTVIMjhWMTMuMjJBNy41LDcuNSwwLDAsMSwyMi43OCw4SDIyVjMz'@;
put 'SDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBIMjhWMjNoMlptMC01SDI4VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjN2Mmg4VjMxSDIzdjJIMzNWMTBBMiwyLDAsMCww'@;
put 'LDMxLDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2'@;
put 'VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIy'@;
put 'MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIwIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDUFU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjA4LDIzLjA3aC0xMXYxLjVIMjMuODNhLjc1Ljc1LDAsMCwwLC43'@;
put 'NS0uNzVWMTEuMzNoLTEuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwxOC4xNWEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWOC4xQTIuMSwyLjEsMCwwLDAs'@;
put 'MjcuOSw2SDI2LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAs'@;
put 'MS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMw'@;
put 'LDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNFpNMjgsMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjcuOWEuMS4xLDAsMCwxLC4xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjA2LDI0LjU3SDIzLjgzYS43NS43NSwwLDAsMCwuNzUtLjc1VjExLjMzaC0xLjVWMjMuMDdoLTExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI4VjI3LjlhLjEuMSwwLDAsMS0uMS4xSDguMWEuMS4xLDAsMCwxLS4xLS4xVjguMUEuMS4xLDAsMCwxLDguMSw4SDIyLjc4YTcuNDksNy40OSww'@;
put 'LDAsMS0uMjgtMkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSww'@;
put 'LDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwx'@;
put 'LDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t'@;
put 'YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhoMTJsMS4x'@;
put 'NS0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZI'@;
put 'NlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEu'@;
put 'NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTUuNGgtMS41djcuNjdoLTExWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYx'@;
put 'NS40SDI1djguNDFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjE1LjRoLS43N0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4x'@;
put 'VjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMw'@;
put 'aDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ2LDcuNDYsMCwwLDEtNS0xLjkyVjIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgxLjQyQTcu'@;
put 'NDYsNy40NiwwLDAsMSwyMi41LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhh'@;
put 'LjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIu'@;
put 'MmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40'@;
put 'VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIu'@;
put 'MSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40'@;
put 'Wk0yNSwyMy44MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTFoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZU1lbW9yeT0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSI4IiB5PSIxMiIgd2lkdGg9IjQi'@;
put 'IGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjI0IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw3SDRBMiwyLDAsMCwwLDIsOXY0SDRWOUgzMnY0aDJWOUEyLDIsMCwwLDAsMzIsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTksMTMuNTZBMy42NiwzLjY2LDAsMCwxLDE4LjU3LDEySDE2djhoNFYxNC42NEEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iMjQiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjQuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMTkuNTZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOXY0'@;
put 'SDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx'@;
put 'MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0'@;
put 'PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyQTcuNDYsNy40NiwwLDAsMSwyNS41MSwx'@;
put 'MkgyNHY4aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMjMuMTNhNy40NSw3LjQ1LDAsMCwxLS41NS0ySDRBMiwyLDAsMCwwLDIsOXY0SDRaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzQsMTNWOWEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN0gzMlYxM1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFptOCwwSDI0VjEyaDRa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTUuMDdIMjhWMjBIMjRWMTUuMDdIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjMxVjIwSDE2VjEyaDIuNjFBMy42OCwzLjY4LDAsMCwxLDE5LDkuNTVMMjAu'@;
put 'NTIsN0g0QTIsMiwwLDAsMCwyLDl2NEg0djRIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1SDE5VjI5SDMyYTIsMiwwLDAsMCwyLTJWMTdaTTEyLDIwSDhWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yNi44NS44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNi44QTEuMjgsMS4yOCwwLDAsMCwyNi44NS44WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjEzLjIyYTcuMzMsNy4zMywwLDAsMS00LDBWMjBIMjRWMTJoMS41MWE3LjQ4LDcuNDgsMCwwLDEtMi45NC01SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJI'@;
put 'MTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcu'@;
put 'OTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMzIsNy4yNywzMiw3LjkxVjE4LjI0YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQu'@;
put 'MDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUy'@;
put 'LTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'OCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDks'@;
put 'MTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2'@;
put 'LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDE4LjI0VjcuOTFjMC0uNjUsMi4wOS0xLjg0LDUuNS0xLjg0UzE1LDcuMjcsMTUsNy45MVY5LjdhMTguNzUsMTguNzUsMCwwLDEsMi0uMlY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0'@;
put 'Ljc3LDIxLjY3LDcuOSwyMlYyMEM1LjQ2LDE5LjY4LDQsMTguNzgsNCwxOC4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuNjUsMTguNTJjLS44NSwxLTMuNDIsMi02LjY1'@;
put 'LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEy'@;
put 'Ljc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOGwuNzUsMGEzLjY5LDMuNjksMCwwLDEtLjA4LTJsLS42NiwwYy00LjkzLDAtOC42NSwxLjg4LTgu'@;
put 'NjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuNGgtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0x'@;
put 'Ljc1LjYzLTMsMS42OC0zLDMuMTJWOS41bC4yNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjIuODRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJj'@;
put 'My4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI'@;
put 'MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUu'@;
put 'NDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIs'@;
put 'NC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVptNi42NSw3LjY3Yy0uODUsMS0zLjQyLDItNi42NSwyQTE0LjQ5LDE0LjQ5LDAsMCwxLDE0LDIwdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYs'@;
put 'MTIuNzYsMCwwLDAsNi42NS0xLjU2djMuMTJjLS44NSwxLTMuNDIsMi02LjY1LDJhMTQuNDksMTQuNDksMCwwLDEtNC0uNTN2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2Mi4yOWMwLC45NS0yLjY1LDIuMzgtNi42NSwyLjM4cy02LjY1'@;
put 'LTEuNDMtNi42NS0yLjM4VjE1LjIzYzAtLjk1LDIuNjUtMi4zOCw2LjY1LTIuMzhzNi42NSwxLjQzLDYuNjUsMi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDcuOTFjMC0u'@;
put 'MzMuNTUtLjgsMS41NC0xLjE4LDAtLjI0LDAtLjQ4LDAtLjczYTcuNTIsNy41MiwwLDAsMSwuMTQtMS40MUMyMC41NSw1LjE5LDE5LDYuMywxOSw3LjkxVjkuNWExOC43NSwxOC43NSwwLDAsMSwyLC4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2NWMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1di01LjlBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI2LjUsNC4wOEMyMi43Nyw0LjA4LDE5LDUuNCwxOSw3LjkxVjkuNDhjNS4zLjI2LDksMi42LDksNS43NnY2LjdsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAs'@;
put 'MCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEu'@;
put 'MTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQt'@;
put 'Ny41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjM5LTIuN2wtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43'@;
put 'NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1'@;
put 'LTEuMTEsOC42My0zLjExVjE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDQuOGMtMS43NS42My0zLDEuNjgtMywzLjEy'@;
put 'VjkuNDhsLjI3LDBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOHY2LjUzbC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDkuNDhWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIs'@;
put 'Ny45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJMOCwyMS45M3YtNi43QzgsMTIuMDgsMTEuNyw5Ljc0LDE3LDkuNDhaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1'@;
put 'Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4y'@;
put 'MSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwx'@;
put 'MC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTQtMS40QzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS40OGExNS4zMywxNS4zMywwLDAs'@;
put 'MSw1LDFBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI3LjM1LDEzYTQsNCwwLDAsMSwuNywyLjIzdjYu'@;
put 'N2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxMi4zM0E3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNDlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljk5IiBy'@;
put 'PSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUmVzb3VyY2VQb29sPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxLjczYTE0LDE0LDAsMCwx'@;
put 'LC4yMiwxLjZIMTcuNDlMOC4zLDI4LjA3QTE0LDE0LDAsMCwxLDIyLjA5LDQuNjJsMS0xLjc2QTE2LDE2LDAsMSwwLDM0LDE4YTE2LDE2LDAsMCwwLS4yMy0yLjYxWk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAs'@;
put 'MCwwLDE4LDJaTTQsMThhMTQsMTQsMCwwLDEsMjcuOTUtMUgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsNCwxOFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yLDEzLjRhMTMuOTEsMTMuOTEsMCwwLDEsLjc1LDMuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuNjEsNC44YTcuNDMsNy40MywwLDAsMSwuNTgtMS45MiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDku'@;
put 'OTNBNy40Myw3LjQzLDAsMCwxLDMxLjIsMTMuNFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguNTcsMzAuOUExNiwxNiwwLDAsMCwzMy45NSwxOUgx'@;
put 'OC40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN0ExNiwxNiwwLDEsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN2ExNS45MSwxNS45MSwwLDAsMC0uODQtNC4xOCw3'@;
put 'LjQ5LDcuNDksMCwwLDEtOS45Mi05Ljk0QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE2LDE2LDAsMCwwLS4xOC0xLjYxSDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDQuMDYtN0ExNiwxNiwwLDAsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGRDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYu'@;
put 'NjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUu'@;
put 'MDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQs'@;
put 'NDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuODgsMTYuODdhMSwxLDAsMCwwLTEuNDEsMS40MWw2LDZMMjYuNCwxMy43N0ExLDEsMCwwLDAsMjUsMTIuMzNsLTkuNDcsOS4x'@;
put 'OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz'@;
put 'LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVptLTQuNTcsNi42NUwxNS41MSwyNC45LDkuMTksMTguNTdhMS40LDEuNCww'@;
put 'LDAsMSwyLTJMMTUuNTQsMjEsMjQuNzMsMTJhMS40LDEuNCwwLDEsMSwyLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43'@;
put 'OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQs'@;
put 'MCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44'@;
put 'MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMwLDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjR2LjUzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3'@;
put 'LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTNjMSwuNjQsMi4yLDEuMjcsMy40MywxLjg5bDEtMS43NGE0MS4xLDQxLjEsMCwwLDEtMy44OS0yLjE4TDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0'@;
put 'Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41djIuNDNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4'@;
put 'LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0Ni4xOSw0Ni4xOSwwLDAsMCw0LjUxLDIuNDJjMC0uMSwwLS4xOSwwLS4yOWE3LjQ5LDcuNDksMCwwLDEsLjIzLTEuODMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0'@;
put 'My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMu'@;
put 'NjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40Myw0'@;
put 'YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUs'@;
put 'MTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40Nyww'@;
put 'LDAsMS03LjI3LTkuMzMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMu'@;
put 'MTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZVNoaWVsZFg9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUs'@;
put 'MCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1'@;
put 'VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMw'@;
put 'LDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjgxLDEwLjc5LDE4LDE1LjYxbC00LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxN2wtNC44MSw0LjgxYTEsMSwwLDEsMCwxLjQxLDEu'@;
put 'NDFMMTgsMTguNDNsNC44MSw0LjgxYTEsMSwwLDAsMCwxLjQxLTEuNDFMMTkuNDEsMTdsNC44MS00LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjI1LDcuNGE0My43'@;
put 'OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4x'@;
put 'MmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTI0LjUxLDIxLjU1YTEuNCwxLjQsMCwwLDEtMiwyTDE4LDE5bC00LjUzLDQuNTNhMS40MywxLjQzLDAsMCwxLTIsMCwxLjQsMS40LDAsMCwxLDAtMkwxNiwxN2wtNC41My00LjUzYTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE1bDQu'@;
put 'NTMtNC41M2ExLjQsMS40LDAsMCwxLDIsMkwyMCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUltcG9ydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsNEgxNC44N0w4LDEwLjg2VjE1aDJWMTMuNjFoNy42'@;
put 'MVY2SDI4VjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaTTE2LDEySDEwdi0uMzJMMTUuNyw2SDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4y'@;
put 'OGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQs'@;
put 'MjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI4LDE1LjRWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42'@;
put 'MVY2aDMuNjhsMS4xNS0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFs'@;
put 'ZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQsMjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjE1aDJabTAtMS45MkwxNS43LDZIMTZ2NkgxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42'@;
put 'OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxNC44'@;
put 'N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhhMSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhh'@;
put 'MSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVFeHBvcnQ9KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDI0djguMzhoMlY2YTIsMiwwLDAsMC0yLTJIMTAuODdMNCwxMC44N1YzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJINlptMC0xLjkyTDExLjY5LDZIMTJ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNmg3LjY4bDEuMTUtMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQx'@;
put 'TDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMTIuMzRh'@;
put 'Ny41Myw3LjUzLDAsMCwxLTItMS44NXYzLjg5aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMC44N0w0'@;
put 'LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAs'@;
put 'MCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEu'@;
put 'NDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMxLjE2LDIx'@;
put 'SDI2djJoNS4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzUsMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjE1LjRIMjIuMjNB'@;
put 'My42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjEyLjM0QTcuNDYsNy40NiwwLDAsMSwyMi43OCw0SDEwLjg3TDQsMTAuODZWMzBh'@;
put 'MiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi'@;
put 'IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVXBsb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEs'@;
put 'MC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMs'@;
put 'OC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4y'@;
put 'OCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUu'@;
put 'NCw4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4'@;
put 'LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDIxdjJoNS4zOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUt'@;
put 'NSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCw0LjU0LTE0LjU2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwx'@;
put 'MC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42Niw3LjY2LDAsMCwxLDMuNiwxOC4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyks'@;
put 'Ri5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEsMC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5LjY1LDkuNjUsMCwwLDAsMTAuODksMjhhMywzLDAsMCwx'@;
put 'LDAtMkE3LjY1LDcuNjUsMCwwLDEsMTEsMTAuNzRsLjY3LDAsLjIzLS42M2E4LjQzLDguNDMsMCwwLDEsOC01LjQsOC4yNiw4LjI2LDAsMCwxLDguNDUsOCw3Ljc1LDcuNzUsMCwwLDEsMCwuOGwtLjA4LjcyLjY1LjNBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSwwLDJoMS4y'@;
put 'OGE4LDgsMCwwLDAsMy45My0xNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdB'@;
put 'MSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSww'@;
put 'LDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg3'@;
put 'LDQuNjlhOC44MSw4LjgxLDAsMCwxLDIsLjI1bDEtMS44YTEwLjgsMTAuOCwwLDAsMC0zLjA3LS40NSwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTgu'@;
put 'NDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSww'@;
put 'LDJoMS4yOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42'@;
put 'OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdBMSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwxMC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww'@;
put 'LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTguNDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCw0LjU0LTE0LjYxWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg'@;
put 'ICAgICAnKSxGLkNsclNoYXBlUGx1Z2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAs'@;
put 'MCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2Wm0yLjQxLDdBMywzLDAsMCwxLDMwLDI0SDI3djcuODNINFYy'@;
put 'NUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoOFYxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEs'@;
put 'MzIuMjIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyN1YxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEsMzIuMjIsMjMsMywzLDAsMCwxLDMwLDI0'@;
put 'SDI3djcuODNINFYyNUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoLjY2TDIxLDYuNTlBNS4xMiw1LjEyLDAsMCwwLDE2LjUx'@;
put 'LDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4x'@;
put 'NSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEs'@;
put 'MTZIMjlWMTMuNDNhNy40NSw3LjQ1LDAsMCwxLTItLjU1VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNo'@;
put 'OVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g0LjA2YTcuNDQsNy40NCwwLDAsMS0uNTEtMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEz'@;
put 'LjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWOC44M2EyLDIsMCwwLDAtMi0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1'@;
put 'LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgy'@;
put 'OXYtLjZIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwy'@;
put 'M0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWMTMuNDNhNy41LDcuNSwwLDAsMS02LjQ1LTYuNTlIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4x'@;
put 'MywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFw'@;
put 'ZUZsb3BweT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuMzYsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjguNzhaTTI1LDMwSDExVjIySDI1Wm01LDBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2'@;
put 'NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJIMTJWNkgyNi41MUwzMCw5LjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAs'@;
put 'MCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0xLjY4bC0uNDMtLjNIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwz'@;
put 'MCwxMy41Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAsMCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMmg3LjM1YTMuNTQsMy41NCwwLDAsMS0uNzctMkgxMlY2aDku'@;
put 'MjlsMS4xNS0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjUsMzBIMTFWMjJIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSww'@;
put 'LDAsMSwyNiwyMS41Wk0yNCwxNEgxMmEyLDIsMCwwLDEtMi0yVjZoMnY2SDI2QTIsMiwwLDAsMSwyNCwxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDYsNy40NiwwLDAsMS00LTEuMThBMiwyLDAs'@;
put 'MCwxLDI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjUuNTRhNy40NSw3LjQ1LDAsMCwxLTIuNzYtOEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUs'@;
put 'MCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZoNi41OEEzLjY3LDMuNjcsMCwwLDEsMTksOS44OUwyMi40NSw0SDZB'@;
put 'MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSwwLDAsMSwyNiwyMS41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ29tcHV0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjYgMjIuODggOS42IDEwLjYgMjQuNCAxMC42IDI1Ljk4IDkgOCA5IDgg'@;
put 'MjIuODggOS42IDIyLjg4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsN0gzMFYyM2gyVjYuNUExLjUsMS41LDAsMCwwLDMwLjUsNUg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4zNGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2'@;
put 'LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4z'@;
put 'NGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjYsMjIuODhWMTAuNmg5LjE0QTMuNjQsMy42NCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIOFYyMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDIwLjcxbDEuMTUtMkg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjMwIiB5PSIxNS40IiB3aWR0aD0iMiIgaGVpZ2h0PSI3LjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww'@;
put 'LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0'@;
put 'LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4wNy0xSDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZW'@;
put 'N0gyMi41N0E3LjUyLDcuNTIsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYyM2gyVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUg4VjIyLjg4SDkuNlYxMC42SDI0LjA4QTcuNDksNy40OSwwLDAsMSwyMy4xMyw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjlWMjRoM1Y3LjU3QTEuNTQsMS41NCwwLDAsMCwzMC41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yMy44MSwyNmMtLjM1LjktLjk0LDEuNS0xLjYxLDEuNUgxMy43NGMtLjY4LDAtMS4yNi0uNi0xLjYxLTEuNUgxdjEuNzVBMi40NSwyLjQ1LDAsMCwwLDMuNiwzMEgzMi40QTIuNDUsMi40NSwwLDAsMCwzNSwyNy43NVYyNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI5IiB5PSIxNS40IiB3aWR0aD0iMyIgaGVpZ2h0PSI4LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik03LDEwSDE5TDE5LDkuODksMjEuMjksNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LDEwSDIzLjY2QTcuNDYsNy40NiwwLDAsMSwyMi41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJhNy4xNCw3LjE0LDAsMCwxLTMsLjJWMjRoM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEaXNwbGF5PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwx'@;
put 'LjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzIsMjVINFY1SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxw'@;
put 'b2x5Z29uIHBvaW50cz0iNy43IDguNzYgMjguMTMgOC43NiAyOS45NCA3LjE2IDYuMSA3LjE2IDYuMSAyMyA3LjcgMjMgNy43IDguNzYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwz'@;
put 'LjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCww'@;
put 'LDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4x'@;
put 'NywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyNUg0VjVIMjEuODdMMjMsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTUu'@;
put 'MzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgMjMgNy43IDguNzYgMTkuNyA4Ljc2IDIwLjYyIDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUy'@;
put 'VjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwy'@;
put 'NiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuMSwyM0g3LjdWOC43NkgyM2E3LjQ0LDcuNDQsMCwwLDEtLjQzLTEuNkg2LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyNUg0VjVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCww'@;
put 'LDAsMzQsMjUuNVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwx'@;
put 'LDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwz'@;
put 'LjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzEsMjEuODNINVY3SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAs'@;
put 'MS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVy'@;
put 'dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMXY2LjQzSDVWN0gyMC43MUwyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx'@;
put 'LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwx'@;
put 'My40M3Y4LjQxSDVWN0gyMi41N2E3LjI5LDcuMjksMCwwLDEsLjU1LTRIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDQsNy40NCwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYu'@;
put 'Q2xyU2hhcGVUZXJtaW5hbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMlY5LjJINFpNNCwyOVYxMC44SDMyVjI5WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDE1'@;
put 'LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCAxMy43OSAxOC44IDcgMjEuOTEgNyAy'@;
put 'NC4xMSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOUg0VjEwLjhIMTguNjhBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwx'@;
put 'LjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu'@;
put 'MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNs'@;
put 'ci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjIzIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQu'@;
put 'MTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMjlI'@;
put 'NFYxMC44SDI0LjI0YTcuNTEsNy41MSwwLDAsMS0xLTEuNkg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwx'@;
put 'My4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJh'@;
put 'ZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNi44LDE1LjgxVjEzLjE3bDEwLDQuNTl2Mi4wOGwtMTAsNC41OVYyMS43OGw2LjUx'@;
put 'LTNaTTIzLjQsMjUuNEgxN1YyM2g2LjRaTTQsOS4yVjdIMzJWOS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bC40LS42OUg0VjdIMjAuNzFs'@;
put 'MS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE2LjgsMTkuODNsLTEwLDQuNTlWMjEuNzhsNi41MS0zLTYuNTEtM1YxMy4xN2wxMCw0LjU5Wm02LjYsNS41N0gxN1YyM2g2LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNi43OC00LjNINFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0u'@;
put 'MDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYu'@;
put 'Niw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDb2RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0x'@;
put 'LjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwz'@;
put 'LjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsOS44M2EuOS45LDAsMCwwLTEuMDkuNjZMMTUu'@;
put 'NDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhsMy40NC0xMy44MUEuOS45LDAsMCwwLDE5Ljk0LDkuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwx'@;
put 'Mi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTYsMTEuNjIsMTUuNDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhMMTkuNzMsMTQuNGEzLjU5LDMuNTksMCwwLDEtMS4xNi0yLjc5WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTItMS4zOEgyNC42NGwzLjI0LDIuMjEtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww'@;
put 'LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu'@;
put 'NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCww'@;
put 'LDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjIxLDE2Ljc4bC02LjUzLTQuNDVBMSwxLDAsMSwwLDIyLjU1LDE0bDUuMzIsMy42My01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45'@;
put 'LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUFwcGxpY2F0aW9uPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMyIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsNkgzMnY0LjJINFpNNCwzMFYxMS44SDMyVjMw'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRabTAsNi4ySDRWNkgzMloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAn'@;
put 'KSxGLkNsclNoYXBlQmF0dGVyeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4xMiw0SDIzVjMuNThBMS41OCwxLjU4LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44'@;
put 'OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWNS44OEExLjg4LDEuODgsMCwwLDAsMjUuMTIsNFpNMjUsMzJIMTFWNmg0VjRoNlY2aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRWMzJIMTFWNmg0VjRoNlY2aC4yOGwxLjY0LTIuODVBMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMu'@;
put 'NThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0x'@;
put 'LjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDEx'@;
put 'LjU4VjMySDExVjZoNFY0aDZWNkgyMi41QTcuNDcsNy40NywwLDAsMSwyMywzLjM4LDEuNTcsMS41NywwLDAsMCwyMS40MiwySDE0LjU4QTEuNTgsMS41OCwwLDAsMCwxMywzLjU4VjRIMTAuODhBMS44OCwxLjg4LDAsMCwwLDksNS44OFYzMi4xMkExLjg4LDEuODgsMCwwLDAsMTAuODgsMzRI'@;
put 'MjUuMTJBMS44OCwxLjg4LDAsMCwwLDI3LDMyLjEyVjEyLjg3QTcuNSw3LjUsMCwwLDEsMjUsMTEuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNFYyLjYyQS42LjYsMCww'@;
put 'LDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NHYtMjhBMS4wOSwxLjA5LDAsMCwwLDI2LDRaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEy'@;
put 'LjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42NiwzLjY2LDAsMCwxLDIwLjU1LDE1bDIuNzYsNC43OUwxNi45LDE4LjdsMy4zNiw2LjczYTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmwuMDkuMTVBMy42NiwzLjY2'@;
put 'LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjJWMi42MkEuNi42LDAsMCwwLDIxLjQyLDJIMTQuNThhLjYuNiwwLDAsMC0uNTguNjJWNEgxMEExLjA5LDEuMDksMCwwLDAsOSw1LjA3djI4QTEsMSwwLDAsMCwxMCwzNEgyNmExLDEsMCwwLDAsMS0uOTRWMTIuODdB'@;
put 'Ny41LDcuNSwwLDAsMSwyMi41LDZaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVNb2JpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTEsNkgyNVYyNEgxMVpt'@;
put 'MCwyNFYyNkgyNXY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTksMzBIMTdWMjhoMlptLTgtNFY2SDI1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgJyksRi5DbHJTaGFwZVRhYmxldD0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEy'@;
put 'LDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWm0wLDJWMjYuMzhINlY0Wk02LDMyVjI4SDMwdjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'MCwySDZBMiwyLDAsMCwwLDQsNFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMzAsMlpNMTksMzJIMTdWMzBoMlpNNiwyOFY0SDMwVjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFw'@;
put 'ZU5ldHdvcmtHbG9iZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJh'@;
put 'MTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWm0wLDJhMTIsMTIsMCwwLDEsOC40NCwzLjQ4YzAsLjMzLDAsLjY2LDAsMUExOC41MSwxOC41MSwwLDAsMCwxNCw4LjUzYTIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBj'@;
put 'LS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS45MiwxMS45MiwwLDAsMSwxNy43NSw0Wm0tMyw1Ljg3QTE3LDE3LDAsMCwxLDI1LjkyLDEwYTE2LjksMTYuOSwwLDAsMS0zLjExLDcsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42'@;
put 'M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3Wm0tNC0zLjZjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2'@;
put 'LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4y'@;
put 'Ny44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQz'@;
put 'LDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4Wm02LjUxLTguOWEyLjMzLDIuMzMsMCwwLDAtLjMzLTEuMTksMTguNCwxOC40LDAsMCwwLDMuMzktNy4zN3EuNzUuMzUsMS40'@;
put 'OC43OGExMiwxMiwwLDAsMSwuNDIsOC4yQTE2LDE2LDAsMCwxLDI0LjI3LDE5LjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRoLTJjMCwuMiwwLC40LDAsLjYxYTEyLDEyLDAsMCwxLS41MywzLjUyLDE2LDE2LDAsMCwxLTUtLjQxLDIuMzMsMi4z'@;
put 'MywwLDAsMC0uMzMtMS4xOSwxOC44NywxOC44NywwLDAsMCwxLjYyLTIuNTJIMjMuODNhMTcuMjksMTcuMjksMCwwLDEtMSwxLjU0LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43'@;
put 'N0ExNy4wOCwxNy4wOCwwLDAsMSwxOS41Niw5bC44Ny0xLjUxYTE4LjU5LDE4LjU5LDAsMCwwLTYuMzksMSwyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuODgsMTEuODgsMCwwLDEsMjIsNC43OUwy'@;
put 'MywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFptLTIxLTkuMTNjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCww'@;
put 'LTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODks'@;
put 'Mi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45'@;
put 'MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCww'@;
put 'LDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTVsLS41MSwwYTExLjkxLDExLjkxLDAsMCwxLS4yNSw2LDE2LDE2LDAs'@;
put 'MCwxLTUtLjQxLDIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC41OSwxOC41OSwwLDAsMCwyLjc4LTUuMTgsNy40OSw3LjQ5LDAsMCwxLTEuMzEtLjgyLDE3LDE3LDAsMCwxLTIuNjEsNSwyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQu'@;
put 'OTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzcsMTcsMTcsMCwwLDEsOC41My0uNjIsNy40Myw3LjQzLDAsMCwxLS41Ni0xLjU5QTE4LjU2LDE4LjU2LDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0u'@;
put 'MTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDIyLjU3LDVhNy40NSw3LjQ1LDAsMCwxLC41My0yQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00Wk0xMC43Niw2LjI3YzAsLjIxLjA2LjQzLjEuNjQuMDkuNDQu'@;
put 'MjEuODcuMzMsMS4zYTIuMjgsMi4yOCwwLDAsMC0xLjEsMi4yNUExOC4zMiwxOC4zMiwwLDAsMCw1LjksMTQuMjIsMTIsMTIsMCwwLDEsMTAuNzYsNi4yN1ptMCwxNS43MUEyLjM0LDIuMzQsMCwwLDAsOS4yLDIzLjc0bC0uNjQsMEExMS45NCwxMS45NCwwLDAsMSw1LjgsMTYuOTJsLjExLS4x'@;
put 'OWExNi45LDE2LjksMCwwLDEsNC44MS00Ljg5LDIuMzEsMi4zMSwwLDAsMCwyLjI4LjYzLDE3LjUzLDE3LjUzLDAsMCwwLDUuMzUsNS42NWMuNDEuMjcuODMuNTIsMS4yNS43NkEyLjMyLDIuMzIsMCwwLDAsMTkuNzgsMjBhMTYuOTQsMTYuOTQsMCwwLDEtNi4yLDMuMTFBMi4zNCwyLjM0LDAs'@;
put 'MCwwLDEwLjc2LDIyWm03LDZhMTEuOTIsMTEuOTIsMCwwLDEtNS44MS0xLjUxbC4yOC0uMDZhMi4zNCwyLjM0LDAsMCwwLDEuNTctMS43OSwxOC40MywxOC40MywwLDAsMCw3LTMuNSwyLjI5LDIuMjksMCwwLDAsMy0uNjIsMTcuNDEsMTcuNDEsMCwwLDAsNC4zMi41NmwuNTMsMEExMiwxMiww'@;
put 'LDAsMSwxNy43NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNi45LDE2LjksMCwwLDAsMy4xMS03QTE3LDE3LDAsMCwwLDE0LjcyLDkuODdaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJhMTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWk0yOC4xLDIxLjA5YTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjks'@;
put 'Mi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMzLDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIs'@;
put 'Mi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43'@;
put 'NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCww'@;
put 'LDEsMTQsOC41M2ExOC41MSwxOC41MSwwLDAsMSwxMi4xMS0uMDdjMC0uMzIsMC0uNjUsMC0xaDBhMTIsMTIsMCwwLDEsMi42MiwzLjg1aDBxLS43My0uNDMtMS40OC0uNzhhMTguNCwxOC40LDAsMCwxLTMuMzksNy4zNywyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwu'@;
put 'NDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRIMjUuNTZhMTguODcsMTguODcsMCwwLDEtMS42MiwyLjUyLDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAs'@;
put 'MS0uNjEsMS41M0gyOC4xYTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjksMi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMz'@;
put 'LDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIsMi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01'@;
put 'LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41'@;
put 'OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCwwLDEsMTQsOC41M2ExOC41OSwxOC41OSwwLDAsMSw2LjM5LTFMMjMsM0ExNCwxNCwwLDAsMCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBBMTQsMTQsMCwwLDAsMzEuNzYsMTZDMzEuNzYsMTUu'@;
put 'OCwzMS43NCwxNS42LDMxLjczLDE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI2LDExLjY0YTE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4y'@;
put 'OCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE3LjI5LDE3LjI5LDAsMCwwLDEtMS41NGgtMS42QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlhMTcuMDgsMTcuMDgsMCwwLDAtNC44NC44OCwyLjI1LDIuMjUsMCwwLDEtLjQ3LDEuNzdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx'@;
put 'LjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNSwxMy4zNWE3LjU0LDcuNTQsMCwwLDEtMS41LjE1LDcuNDYsNy40NiwwLDAsMS0zLjI4LS43NiwxOC41OSwxOC41OSwwLDAsMS0yLjc4LDUuMTgsMi4zMywyLjMzLDAsMCwx'@;
put 'LC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4w'@;
put 'NmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdh'@;
put 'Mi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMyww'@;
put 'LS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU2LDE4LjU2LDAsMCwxLDguNjUtLjg3LDcuNDUsNy40NSwwLDAsMSwuNDEtNC41OUExNCwxNCwwLDAs'@;
put 'MCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBhMTQsMTQsMCwxLDAsMjcuNjgtNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzIsOS44N2EyLjI1LDIuMjUsMCwwLDEt'@;
put 'LjQ3LDEuNzcsMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcsMTcsMCwwLDAsMi42MS01LDcuNTIsNy41MiwwLDAsMS0yLjE2LTIuNjdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xy'@;
put 'U2hhcGVOZXR3b3JrU2V0dGluZ3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjhjLjU0LS4xNCwxLjA2LS4zMiwxLjU5LS41MXYtMS4yYTIuNzcsMi43NywwLDAsMSwuMDYtLjUxLDE3LjQ0LDE3LjQ0LDAsMCwxLTEuODIu'@;
put 'NjIsMi4yOCwyLjI4LDAsMCwwLTQuMjguNjNsLS40NSwwaDBhMTEuOTMsMTEuOTMsMCwwLDEtMi44OC03LjI3LDE3Ljc5LDE3Ljc5LDAsMCwxLDUtNC43MiwyLjIzLDIuMjMsMCwwLDAsMi4yOS41NiwxOC41MiwxOC41MiwwLDAsMCw0LjQ3LDUsMi43NCwyLjc0LDAsMCwxLC4yMS0uMjRsLjk1'@;
put 'LS45MWExNi45LDE2LjksMCwwLDEtNC4zNS00Ljc5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNGwuMTksMGgxLjU2YTE5LDE5LDAsMCwwLC45MS0yLjcyYy40My4xOS44'@;
put 'NC40MSwxLjI2LjY0YTExLjk0LDExLjk0LDAsMCwxLDEsNC4wOWwwLDBBMi43NywyLjc3LDAsMCwxLDMwLDE2YTIuNzMsMi43MywwLDAsMSwuNjguMUExNCwxNCwwLDEsMCwxNi4wOCwzMWEyLjcyLDIuNzIsMCwwLDEsMC0yQTExLjkzLDExLjkzLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1'@;
put 'YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCwwLDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAs'@;
put 'MCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwxOS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI1LDIxLjE5QTMuODQsMy44NCwwLDEsMCwyOC44OCwyNSwzLjg3LDMuODcsMCwwLDAsMjUsMjEuMTlabTAsNi4wOEEyLjI0LDIuMjQsMCwxLDEsMjcuMjgsMjUsMi4yNiwyLjI2LDAsMCwxLDI1LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMTcsMjQuMTRhMS4xNCwxLjE0LDAsMCwwLS43LTEuMWwtMS41Ni0uNDZxLS4xMS0uMzItLjI2LS42M2wuNzItMS4zM2ExLjE0LDEuMTQsMCwwLDAtLjIxLTEuMzRsLTEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAtMS4zNC0uMmwtMS4zNC43'@;
put 'MWE3LjI4LDcuMjgsMCwwLDAtLjY3LS4yOEwyNywxNi43MWExLjE0LDEuMTQsMCwwLDAtMS4wOC0uNzZIMjRhMS4xNCwxLjE0LDAsMCwwLTEuMDguOGwtLjQ0LDEuNDNhNy4zMiw3LjMyLDAsMCwwLS42OC4yOGwtMS4zMi0uN2ExLjE0LDEuMTQsMCwwLDAtMS4zMy4xOWwtMS4zNywxLjMxYTEu'@;
put 'MTQsMS4xNCwwLDAsMC0uMjEsMS4zNWwuNywxLjI4cS0uMTYuMzItLjI4LjY1TDE2LjU4LDIzYTEuMTMsMS4xMywwLDAsMC0uODEsMS4wOXYxLjg3QTEuMTQsMS4xNCwwLDAsMCwxNi41OSwyN2wxLjQ3LjQ0cS4xMi4zMi4yOC42NGwtLjcyLDEuMzVhMS4xNCwxLjE0LDAsMCwwLC4yLDEuMzVs'@;
put 'MS4zNCwxLjMyYTEuMTQsMS4xNCwwLDAsMCwxLjM0LjJsMS4zNy0uNzJxLjMxLjE0LjYzLjI2bC40NCwxLjQ3YTEuMTQsMS4xNCwwLDAsMCwxLjA5LjhoMS45QTEuMTQsMS4xNCwwLDAsMCwyNywzMy4zMWwuNDQtMS40N2MuMjEtLjA3LjQyLS4xNi42Mi0uMjVsMS4zOC43M2ExLjE0LDEuMTQs'@;
put 'MCwwLDAsMS4zMy0uMmwxLjM0LTEuMzJhMS4xNCwxLjE0LDAsMCwwLC4yMS0xLjM1bC0uNzMtMS4zNHEuMTQtLjMuMjUtLjZsMS41LS40NEExLjEzLDEuMTMsMCwwLDAsMzQuMTcsMjZabS0xLjYsMS41LTIsLjU4LS4xMi40MkE1LjU1LDUuNTUsMCwwLDEsMzAsMjcuNzNsLS4yMS4zOCwxLDEu'@;
put 'NzktLjg2Ljg0LTEuODItMS0uMzcuMmE1Ljc4LDUuNzgsMCwwLDEtMS4xMi40NmwtLjQyLjEyLS41OSwySDI0LjM4bC0uNTktMS45NS0uNDItLjEyQTUuODYsNS44NiwwLDAsMSwyMi4yNCwzMGwtLjM3LS4yLTEuODEsMS0uODYtLjg1LDEtMS44Mi0uMjItLjM4YTUuNiw1LjYsMCwwLDEtLjQ5'@;
put 'LTEuMTNsLS4xMy0uNDEtMS45NS0uNThWMjQuNDJsMS45NC0uNTguMTItLjQxYTUuNTMsNS41MywwLDAsMSwuNDktMS4xNGwuMjItLjM5LTEtMS43My44Ny0uODQsMS43Ny45NC4zOC0uMjFhNS44LDUuOCwwLDAsMSwxLjE3LS40OWwuNDEtLjEyLjU5LTEuOTFoMS4yM2wuNTgsMS45LjQxLjEy'@;
put 'YTUuNzksNS43OSwwLDAsMSwxLjE2LjQ4bC4zOC4yMSwxLjgtLjk1Ljg2Ljg1LTEsMS43Ny4yMS4zOGE1LjUzLDUuNTMsMCwwLDEsLjQ3LDEuMTNsLjEyLjQyLDEuOTMuNTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0zNCwyMy42MywzMiwyM2E3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjksMTcuODZhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMWE3LDcsMCwwLDAtMS40My0uNjFsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4z'@;
put 'Ny4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxTDIwLDE3LjhhLjM3LjM3LDAsMCwwLS40NC4wN0wxOCwxOS4zMWEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LDcsMCwwLDAsMTguMzUsMjNsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCww'@;
put 'LDAsLjI2LjM1bDIsLjYxQTcsNywwLDAsMCwxOSwyOC4zN2wtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NGwxLjQ1LDEuNDVhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu'@;
put 'MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhBNyw3LDAsMCwwLDMxLjk1LDI3bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjI0QS4zNy4zNywwLDAsMCwzNCwy'@;
put 'My42M1ptLTguODMsNC43MkEzLjMzLDMuMzMsMCwxLDEsMjguNTMsMjUsMy4zMywzLjMzLDAsMCwxLDI1LjE5LDI4LjM0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44NSwyNy40NGEyLjI5LDIuMjksMCwwLDAs'@;
put 'MS43NC0xLjY4LDE5LjcxLDE5LjcxLDAsMCwwLDEuODktLjZWMjMuOTVhMiwyLDAsMCwxLC4wOS0uNTUsMTcuNDIsMTcuNDIsMCwwLDEtMi4xNy43OCwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEs'@;
put 'NS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNjUsNS4wOSwxLjkzLDEuOTMsMCwwLDEsLjIzLS4zMmwuODktLjg3YTE2Ljg5LDE2Ljg5LDAsMCwxLTQuNDktNC44OSwyLjI3LDIuMjcsMCwwLDAsLjM1LTEuMmMwLS4wNywwLS4xNCwwLS4yMkExNy42'@;
put 'OSwxNy42OSwwLDAsMSwyNSwxMWExNy40OSwxNy40OSwwLDAsMS0xLjE1LDMuMzUsMS45NCwxLjk0LDAsMCwxLC4zMS0uMDVoMS40NWExOS4wNiwxOS4wNiwwLDAsMCwuOS0yLjdjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTMsMTEuOTMsMCwwLDEsMSw0LjYzbDEtLjUxYTIsMiwwLDAsMSwu'@;
put 'OTItLjIzaC4wOEExNCwxNCwwLDEsMCwxNi40NCwzMWExLjk0LDEuOTQsMCwwLDEsLjEyLTEuNDZsLjI4LS41M2gtLjA3QTExLjkxLDExLjkxLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCww'@;
put 'LDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAsMCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwx'@;
put 'OS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMC43'@;
put 'OCw4LjQxQTIsMiwwLDAsMCwyOC44Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1pNMzIsMjdINFYxOS4wNkw3LjEzLDlIMjgu'@;
put 'ODdMMzIsMTkuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVj'@;
put 'dCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9'@;
put 'IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0'@;
put 'IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMywxNS40SDMwLjg2TDMyLDE5LjA2'@;
put 'VjI3SDRWMTkuMDZMNy4xMyw5SDE5LjU2bDEuMTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu'@;
put 'MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyLjEyIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i'@;
put 'YWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIi'@;
put 'IHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40N2wtMS42NS01LjMyYTcuNDksNy40OSwwLDAsMS0yLC4zM0wzMiwxOS4wNlYyN0g0VjE5LjA2TDcuMTMsOWgxNmE3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCww'@;
put 'LS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5'@;
put 'PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAs'@;
put 'NS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW'@;
put 'MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMTNBMiwyLDAs'@;
put 'MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW'@;
put 'MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMi4yNiwxMy4xNUE3LjQ5LDcuNDksMCwwLDEsMjIuNTcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNmEyLDIsMCwwLDAtLjA5LS41OVpNOC45MiwyNUg3'@;
put 'LjEyVjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMEgyMi4xVjIyaDEuOFptNSwwSDI3LjFWMjJoMS44Wk0zMSwxOS40SDVWMThIMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUm91dGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwx'@;
put 'NC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zOCwxNS40SDI4LjU0TDMwLjE1LDE3SDIyLjQ2YTEsMSwwLDEsMCwwLDJoNy42OWwtMi43MSwyLjY5YTEsMSwwLDAsMCwxLjQxLDEuNDJMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2wxLjE1LTEuMTYtLjEtLjE1QTMuNjgsMy42OCwwLDAsMSwxOSwxMFYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40'@;
put 'MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTQuODdsNS4xMS01LjE0'@;
put 'YTEsMSwwLDEsMC0xLjQyLTEuNDFMMTksMTFWMy4zM2ExLDEsMCwwLDAtMiwwVjExTDE0LjMxLDguMzJhMSwxLDAsMSwwLTEuNDIsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMTgsMS42N2ExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwxLjY3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1'@;
put 'LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEw'@;
put 'LjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44'@;
put 'LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44'@;
put 'MiwxNS4zOUgyOC42OEwzMSwxNy42N2wtNC4xOSw0LjA5YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMS41LTEuNDdIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTMtMS41MUwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDEsMSwxNSw5'@;
put 'LjkybDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2NC40OUEzLjY1LDMuNjUsMCwwLDEsMTksOS44OWw0LjIyLTcuMzFBMTYsMTYsMCwxLDAsMzQsMTcuNjcsMTYsMTYsMCwwLDAsMzMuODIsMTUuMzlabS0yMy41LDYuMzVhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQu'@;
put 'MDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUs'@;
put 'MjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy'@;
put 'MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4yMiwxMi43NkE3LjQ5LDcuNDksMCwwLDEsMjMuMzIsMi42YTE2LDE2LDAsMSwwLDkuOSwxMC4xN1pNMTMuODYsOS45MmEuOC44LDAsMCwxLDEuMTMsMGwyLjIxLDIuMTlWNS45M2EuOC44LDAsMCwxLDEuNiwwdjYuMThMMjEs'@;
put 'OS45MmEuOC44LDAsMSwxLDEuMTMsMS4xNEwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDAsMSwxMy44Niw5LjkyWk0xMC4zMiwyMS43NGEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAs'@;
put 'MS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAs'@;
put 'MCwxLDIyLjE0LDI1LjQxWm00LjY3LTMuNjZhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0yLjItMi4xNGEuOC44LDAsMSwxLDEuMTItMS4xNEwzMSwxNy42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVWTT0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBkPSJNMTEsNUgyNVY4aDJWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTBIMTd2Mmg4djZoMlYxMmgz'@;
put 'VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjEuODdMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djYuODVoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjE1LjQiIHdpZHRoPSIxLjk5IiBoZWlnaHQ9IjIuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNFYyNkgy'@;
put 'MlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMTB2MmgxLjU3QTMuNjcsMy42NywwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVoMFYyNkgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40'@;
put 'OSwwLDAsMSwzMCwxMy41Wk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMmg4djZoMlYxMi44N0E3'@;
put 'LjUyLDcuNTIsMCwwLDEsMjMuNjYsMTBIMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDI3VjVhMiwyLDAsMCwwLTItMkgxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxNy4xOWEyLDIsMCwwLDAtMiwydjEuNEgyMEEzLjYsMy42LDAsMCwxLDIzLjYsMTd2OEgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAs'@;
put 'MCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyQTIsMiwwLDAsMCwzMCwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42aDIuNzJMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4xOSwxMGEyLDIs'@;
put 'MCwwLDAtMiwydjEuNEgxOUEzLjY4LDMuNjgsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjIxLDE1LjRBMy41NSwzLjU1LDAsMCwxLDIzLjYsMTd2OEgyMlYx'@;
put 'N2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDIyLjlBNy40NSw3LjQ1LDAsMCwxLDIz'@;
put 'LjEzLDNIMTFBMiwyLDAsMCwwLDksNXY4LjRoNC41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OSw3LjQ5LDAsMCwxLDIzLjY2LDEwSDE3LjE5YTIsMiwwLDAsMC0y'@;
put 'LDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIs'@;
put 'MiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVk1XQXBwPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIg'@;
put 'MjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMCA0IDIwIDggMjIgOCAyMiA2IDMwIDYgMzAgMTQgMjggMTQgMjggMTYgMzIgMTYgMzIgNCAyMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIx'@;
put 'MSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02'@;
put 'IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI4IDIyIDMwIDIyIDMwIDMwIDIyIDMwIDIyIDI4IDIwIDI4IDIwIDMyIDMyIDMyIDMyIDIwIDI4IDIwIDI4IDIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl'@;
put 'cnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRo'@;
put 'PSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmwwLS4xVjE3aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRl'@;
put 'ZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjIuNDUgNCAyMCA0IDIwIDggMjAuMTQgOCAyMi40NSA0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIx'@;
put 'NS40IiB3aWR0aD0iNCIgaGVpZ2h0PSIwLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u'@;
put 'IHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50'@;
put 'cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0'@;
put 'IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDZoLjVhNy40OSw3LjQ5'@;
put 'LDAsMCwxLC4yOC0ySDIwVjhoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjE0SDI4djJoNFYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxMS41OGE3LjUzLDcuNTMsMCwwLDEtLjU4LS41OEgxOXY2aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ2VydGlmaWNh'@;
put 'dGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhINFY4SDMybDAsOC41NmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxVjhBMiwyLDAsMCwwLDMyLDZaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2'@;
put 'IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQt'@;
put 'MTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0i'@;
put 'MS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYs'@;
put 'Ni4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIN3YxLjZIMTkuMDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjEuMTZhOC40MSw4'@;
put 'LjQxLDAsMCwxLDIsMS44MXYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTls'@;
put 'LjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9Ijci'@;
put 'IHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIxNiIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAu'@;
put 'NjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2My4zNGE4LjQxLDgu'@;
put 'NDEsMCwwLDEsMiwxLjgxdi02QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI4VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0y'@;
put 'SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0TDIwLjQxLDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDMwSDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMzJhMiwyLDAsMCwxLDIsMlYxOC4zN2E4LjM0'@;
put 'LDguMzQsMCwwLDAtMTMuNDksOS43OWwtLjkzLDEuMTRaTTcsMTJ2MS42SDI0VjEyWm0wLDUuNkgxOFYxNkg3Wm0wLDdIMTdWMjNIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNTlhNi4zNyw2LjM3'@;
put 'LDAsMSwwLTEwLjc3LDQuNTlsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdBNi4zNCw2LjM0LDAsMCwwLDMzLjgzLDIzLjU5Wm0tMTAuNzQsMGE0LjM3LDQuMzcsMCwxLDEsNC4zNyw0LjMxQTQuMzUs'@;
put 'NC4zNSwwLDAsMSwyMy4xLDIzLjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2'@;
put 'LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjkuMjVhOC4zNiw4LjM2LDAsMCwxLDQuNzUsM3YtM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTkuMDcsMTMuNkg3VjEySDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRBOC4zNCw4LjM0LDAsMCwxLDI1LjY2LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAs'@;
put 'MCwxLDE5LjA3LDEzLjZaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww'@;
put 'LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjcuNDYsMTcuMjNhNi4zNiw2LjM2LDAsMCwwLTQuNCwxMWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN2E2LjM2LDYuMzYsMCwwLDAtNC40LTExWm0wLDEwLjY4YTQuMzEsNC4z'@;
put 'MSwwLDEsMSw0LjM3LTQuMzFBNC4zNSw0LjM1LDAsMCwxLDI3LjQ2LDI3LjkxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg0QTIsMiww'@;
put 'LDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMzQsMTguMzd2LTZBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThabTYtNEg3VjEySDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJT'@;
put 'aGFwZUFyY2hpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwxOEg2VjE0aDRhMywzLDAsMCwxLS42OC0xLjg3czAtLjA5LDAt'@;
put 'LjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNBMywzLDAsMCwxLDI2LDE0aDR2NEgyMmwtMiwySDMyVjEz'@;
put 'LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQxLDIwLjYsMTgsMjJsLTEuNDEtMS40TDE2LDIwSDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0y'@;
put 'VjIwSDIwWk0yMiwyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNhMywzLDAsMCwx'@;
put 'LS44OCwyLjEyTDIyLDE4SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yLDE0LjI1YTMsMywwLDAsMS0uODgtMi4xMnMwLS4wOSwwLS4xM0g1LjVBMS41LDEu'@;
put 'NSwwLDAsMCw0LDEzLjVWMThIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE5LjE4bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTEuNDFsLTQsMy45NVYzYTEsMSwwLDEsMC0yLDB2MTIuNGwtNC0zLjk1YTEs'@;
put 'MSwwLDAsMC0xLjQxLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVW5hcmNoaXZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkg3VjIySDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAs'@;
put 'Mi0yVjIySDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQsMjRhMSwxLDAsMCwwLDEsMWg2YTEsMSwwLDAsMCwwLTJIMTVBMSwxLDAsMCwwLDE0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMThINlYxNGg5VjEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNS43OEEzLDMsMCwwLDEsMTUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0zMC41LDEySDIxdjJoOXY0SDIxYTMsMywwLDAsMS0uNzgsMkgzMlYxMy41QTEuNSwxLjUsMCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDkuNTUsMTcsNS42'@;
put 'VjE4YTEsMSwwLDEsMCwyLDBWNS42bDQsMy45NWExLDEsMCwxLDAsMS40MS0xLjQyTDE4LDEuNzgsMTEuNjEsOC4xM0ExLDEsMCwwLDAsMTMsOS41NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxYTMs'@;
put 'MywwLDAsMS0yLjIyLTFINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjAuMjFBMywzLDAsMCwxLDE4LDIxWm00LDNhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwwLDEsMC0yaDZBMSwxLDAsMCwxLDIyLDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMkg1LjVBMS41LDEuNSwwLDAsMCw0LDEzLjVWMThIMTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2NkgzMlYxMy41QTEuNSwxLjUs'@;
put 'MCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEs'@;
put 'MSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNvbm5lY3Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDI4LjIzQTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxNC4xNWE2LjI1LDYu'@;
put 'MjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLDVIMjJhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFpNMTcuMDgsMjJIMTQuMTVhNC4xNyw0LjE3LDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00aDIuOTRaTTIyLDIySDE5VjE0aDNhNC4xNyw0'@;
put 'LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjIsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMkgxNC4xNWE2LjI1LDYuMjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiww'@;
put 'LDAsMCw2LjIyLDVIMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjIzLDE3QTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxOVYyNGgzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLTVIMzRWMTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRGlzY29ubmVjdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTcsNkE2LjIxLDYuMjEsMCwwLDAsNiwxMUgyLjEzdjJINmE2LjIzLDYuMjMsMCwwLDAsNi4yMSw1SDE3VjZaTTE1LjEsMTZI'@;
put 'MTIuMTdhNC4yLDQuMiwwLDAsMS00LjMxLTQsNC4xNyw0LjE3LDAsMCwxLDQuMzEtNEgxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTIsMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgx'@;
put 'OXYySDE0YTEsMSwwLDEsMCwwLDJoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAsNi4yMi01aDMuNzZabS0xMCw1SDIxVjIwaDIuOTRhNC4xNyw0LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjMuOTQsMjhaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiw2YTYuMjEsNi4yMSwwLDAsMC02LjIxLDVIMnYySDUuODNBNi4yMyw2LjIzLDAsMCwwLDEyLDE4SDE3VjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc5LDIzSDMwLjE0YTYuMjUsNi4yNSwwLDAsMC02LjIxLTVIMTl2MkgxNGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAs'@;
put 'Ni4yMi01aDMuNjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTGluaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTcuNiwyNC4zMmwtMi40NiwyLjQ0YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwx'@;
put 'LDAtNS41NWw0LjY5LTQuNjVhNCw0LDAsMCwxLDUuNjIsMCwzLjg2LDMuODYsMCwwLDEsMSwxLjcxQTIsMiwwLDAsMCwyMS4xLDE4bDEuMjktMS4yOGE1Ljg5LDUuODksMCwwLDAtMS4xNS0xLjYyLDYsNiwwLDAsMC04LjQ0LDBMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2'@;
put 'LDAsMCwwLDguNDQsMGwzLjY1LTMuNjJjLS4xNywwLS4zMywwLS41LDBBOCw4LDAsMCwxLDE3LjYsMjQuMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42MSw3LjgyYTYsNiwwLDAsMC04LjQ0LDBsLTMu'@;
put 'NjUsMy42MmMuMTcsMCwuMzMsMCwuNDksMGgwYTgsOCwwLDAsMSwyLjEuMjhsMi40Ni0yLjQ0YTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC42OSw0LjY1YTQsNCwwLDAsMS01LjYyLDAsMy44NiwzLjg2LDAsMCwxLTEtMS43MSwyLDIsMCwwLDAtLjI4LjIzbC0x'@;
put 'LjI5LDEuMjhhNS44OSw1Ljg5LDAsMCwwLDEuMTUsMS42Miw2LDYsMCwwLDAsOC40NCwwbDQuNjktNC42NWE1LjkyLDUuOTIsMCwwLDAsMC04LjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVVbmxpbms9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsNSwzLjU5LDYuNDFsOSw5TDguMSwxOS43OWE1LjkxLDUuOTEsMCwwLDAsMCw4LjM5LDYsNiwwLDAsMCw4LjQ0LDBMMjEsMjMuNzhsOC42Myw4LjYzTDMxLDMxWk0xNS4xMywyNi43NmE0LDQsMCwwLDEtNS42MiwwLDMuOTIsMy45MiwwLDAsMSww'@;
put 'LTUuNTVMMTQsMTYuNzlsNS41OCw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNTMsOS4yMmE0LDQsMCwwLDEsNS42MiwwLDMuOTIsMy45MiwwLDAsMSwwLDUuNTVsLTQuNzksNC43NkwyMy43OCwy'@;
put 'MWw0Ljc5LTQuNzZhNS45Miw1LjkyLDAsMCwwLDAtOC4zOSw2LDYsMCwwLDAtOC40NCwwbC00Ljc2LDQuNzRMMTYuNzgsMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNsb3VkTmV0d29yaz0oMCxtLmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMzAuNzEsMTUuMTh2LTFBMTEuMjgsMTEuMjgsMCwwLDAsMTkuNTYsMi44M2gtLjExYTExLjI4LDExLjI4LDAsMCwwLTExLDguOTMsNy40Nyw3LjQ3LDAsMCwwLDAsMTQuOTRIMjkuMTNhNS44Niw1Ljg2LDAsMCwwLDEuNTgtMTEuNTJaTTI5LjEzLDI0LjdIOC40'@;
put 'NmE1LjQ3LDUuNDcsMCwxLDEsMC0xMC45NGgxLjY5bC4xMS0uODdhOS4yNyw5LjI3LDAsMCwxLDE4LjQ1LDEuM3YxLjI4YzAsLjA5LDAsLjE4LDAsLjI3bC0uMDcsMS4xNS45NC4xMWEzLjg2LDMuODYsMCwwLDEtLjQzLDcuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41OCwzMS4xOEgxOC44NXYtMi40aC0ydjIuNEg2LjA4YTEsMSwwLDAsMCwwLDJoMjMuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYu'@;
put 'Q2xyU2hhcGVDbG91ZFNjYWxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjMyLDExLjExSDcuODRMOCwxMC4yNEE3LjE5LDcuMTksMCwwLDEsMTUuMDcsNGguMDdhNy4xNSw3LjE1LDAsMCwxLDQuNzEsMS44MywxMS4xLDExLjEsMCwwLDEsMy4wOS42NEE5LjE4LDkuMTgsMCwwLDAs'@;
put 'MTUuMTYsMmgtLjA5QTkuMiw5LjIsMCwwLDAsNi4xMyw5LjExLDYuMTUsNi4xNSwwLDAsMCwyLjMzLDE5Ljk1LDguMDksOC4wOSwwLDAsMSwzLDE3LjcxYTQuMTIsNC4xMiwwLDAsMS0uODEtMi40NEE0LjE2LDQuMTYsMCwwLDEsNi4zMiwxMS4xMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjQsMTYuOTFoMS41MkwxMiwxNmE3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjE3LDcuMTcsMCwwLDEsNS43LDIuOTIsMTEuMDUsMTEuMDUsMCwwLDEsMi43Mi43Nyw5LjIsOS4yLDAsMCwwLTgu'@;
put 'NC01LjY5aC0uMDlhOS4yLDkuMiwwLDAsMC04Ljk0LDcuMTIsNi4xNSw2LjE1LDAsMCwwLTMuNjQsMTEsOC4xMSw4LjExLDAsMCwxLC43OS0yLDQuMTQsNC4xNCwwLDAsMSwzLTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMi40MiwyNC40N3YtLjYyYTkuMTgsOS4xOCwwLDAsMC0xOC4xMy0yLjE2QTYuMTYsNi4xNiwwLDAsMCwxNC40OCwzNEgzMWE0Ljg4LDQuODgsMCwwLDAsMS40Ni05LjUzWk0zMSwzMkgxNC40OGE0LjE2LDQuMTYsMCwxLDEsMC04LjMySDE2bC4xMS0uODdhNy4xOSw3LjE5LDAs'@;
put 'MCwxLDcuMTItNi4yNWguMDdhNy4yMSw3LjIxLDAsMCwxLDcuMTIsNy4yNXYxYzAsLjA3LDAsLjEzLDAsLjJsLS4wNywxLjExLjk0LjExQTIuODgsMi44OCwwLDAsMSwzMSwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAnKSxGLkNs'@;
put 'clNoYXBlQ2xvdWRUcmFmZmljPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41NCwyMC44MmEuODguODgsMCwwLDAtLjg4LS44OEgyMC43NWwxLjEtMS4xQS44OC44OCwwLDAsMCwyMC42LDE3LjZsLTMuMjEsMy4yMkwyMC42LDI0YS44OC44OCwwLDEsMCwxLjI1LTEuMjRMMjAuNzYs'@;
put 'MjEuN2g0LjlBLjg4Ljg4LDAsMCwwLDI2LjU0LDIwLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjcsMjEuN2EuODguODgsMCwxLDAsMC0xLjc2aC0uNThhLjg4Ljg4LDAsMSwwLDAsMS43NloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIxLDIwaC0uMDZhLjg1Ljg1LDAsMCwwLS44NS44OC45MS45MSwwLDAsMCwuOTEuODguODguODgsMCwxLDAsMC0xLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuNTksMTFhLjg4Ljg4LDAsMCwwLTEuMjUsMS4yNGwxLjEsMS4xSDI3LjUzYS44OC44OCwwLDEsMCwwLDEuNzZoNC45bC0xLjA5LDEuMDlhLjg4Ljg4LDAsMCwwLDEuMjUsMS4yNGwzLjIxLTMuMjJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC41LDE1LjA3YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuOSwxNC4yN2EuODUuODUsMCwwLDAtLjg1LS44OEgyMWEuODguODgsMCwxLDAsMCwxLjc2QS45MS45MSwwLDAsMCwyMS45LDE0LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMzAuMzYsMjMuNjVjMCwuMTMsMCwuMjYsMCwuMzlhMy43NywzLjc3LDAsMCwxLTMuNjIsMy44OUg3LjI4YTUuMzIsNS4zMiwwLDAsMS01LjEzLTUuNDhBNS4zMiw1LjMyLDAsMCwxLDcuMjgsMTdIOC45MUw5LDE2LjEyYTguOTIsOC45MiwwLDAsMSw4LjYyLThoLjA4YTgu'@;
put 'NDksOC40OSwwLDAsMSw2LjU2LDMuMjloMi4zN2ExMC41NSwxMC41NSwwLDAsMC04LjkxLTUuMjVoLS4xMUExMC44MiwxMC44MiwwLDAsMCw3LjIyLDE1YTcuMjgsNy4yOCwwLDAsMC03LDcuNDMsNy4yNyw3LjI3LDAsMCwwLDcuMDgsNy40M0gyNi43N0E1LjcyLDUuNzIsMCwwLDAsMzIuMzUs'@;
put 'MjRhMy43NywzLjc3LDAsMCwwLDAtLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEZXBsb3k9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAsMCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIgZD0iTTExLjU0LDEwLjczbC05LDUuMTdhMSwxLDAsMCwwLS41Ljg3djExYTEsMSwwLDAsMCwuNS44N2w5LDUuMTVhMSwxLDAsMCwwLDEsMGw5LTUuMTVhMSwxLDAsMCwwLC41LS44N3YtMTFhMSwxLDAsMCwwLS41LS44N2wtOS01LjE3QTEsMSwwLDAsMCwxMS41NCwxMC43M1pN'@;
put 'MTEsMzEuMDhsLTctNFYxOC40NGw3LDRaTTEyLDIxLDQuODEsMTYuODcsMTIsMTIuNzhsNy4yMSw0LjEyWm04LDYuMDktNyw0VjIyLjQ0bDctNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAs'@;
put 'MCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTIuNDYsMTAuNzNhMSwx'@;
put 'LDAsMCwwLTEsMGwtOC42OCw1TDEyLDIxbDkuMTktNS4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDI3LjczYTEsMSwwLDAsMCwuNS44N0wxMSwzMy40NnYtMTFMMiwxNy4yOFoiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xMywzMy40Nmw4LjUtNC44NmExLDEsMCwwLDAsLjUtLjg3VjE3LjI5bC05LDUuMTVaIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIZWxpeD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODgsMTMuMDdhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDEsMSwxLDEuNTJMOS4zNywxMi45MkEuOS45LDAsMCwxLDguODgsMTMuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEzLjI1LDE1LjExYS45LjksMCwwLDEtLjQ5LTEuNjZMMTgsMTAuMDhhLjkuOSwwLDEsMSwxLDEuNTJMMTMuNzQsMTVBLjkuOSwwLDAsMSwxMy4yNSwxNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTkuNzIsMzAuMjNhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDAsMSwxLDEuNTJMMjAuMiwzMC4wOUEuOS45LDAsMCwxLDE5LjcyLDMwLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOC45MiwyNS45NGEuOS45LDAsMCwxLS40OS0xLjY2bDUuMjUtMy4zN2EuOS45LDAsMSwxLDEsMS41MUwxOS40LDI1LjhBLjg5Ljg5LDAsMCwxLDE4LjkyLDI1Ljk0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMS41Niw1LjY5YTMuNTksMy41OSwwLDAsMSwuMTUsMy41M0wxOC44MywxNWgyLjI1bDIuNDMtNC44N2E1LjYxLDUuNjEsMCwwLDAtNS04LjE0SDEzLjI2bC0xLDJoNi4yMkEzLjYxLDMuNjEsMCwwLDEsMjEuNTYsNS42OVoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuOTEsMjAuNzhBNS41Myw1LjUzLDAsMCwwLDI3LjY2LDE3SDkuMzFhMy41NCwzLjU0LDAsMCwxLTMuNTYtMy42NywzLjYxLDMuNjEsMCwwLDEsLjQyLTEuNTRsNC4yNi04LjQ5YTEsMSww'@;
put 'LDEsMC0xLjc5LS45TDQuNCwxMC44NEE1LjY3LDUuNjcsMCwwLDAsNCwxNS4yMiw1LjUzLDUuNTMsMCwwLDAsOS4yOCwxOWg3LjZsLTMuNDQsNi44N2E1LjY0LDUuNjQsMCwwLDAsMS41LDYuOTJBNS4zOCw1LjM4LDAsMCwwLDE4LjQxLDM0aDUuMjVsMS0ySDE4LjQzYTMuNTgsMy41OCwwLDAs'@;
put 'MS0zLjIyLTUuMjFMMTkuMTEsMTloOC41NGEzLjQyLDMuNDIsMCwwLDEsMi4xNS43MSwzLjU3LDMuNTcsMCwwLDEsMSw0LjQzbC00LjEyLDguMjJhMSwxLDAsMSwwLDEuNzkuOWw0LjA2LTguMUE1LjY3LDUuNjcsMCwwLDAsMzIuOTEsMjAuNzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMTYsMTkuNjNBNS41NSw1LjU1LDAsMCwwLDI3LjQyLDE3SDEwLjA2YTQuMzYsNC4zNiwwLDAsMS0zLjY3LTIsNC4wNyw0LjA3LDAsMCwxLS4xOS00LjEzbDMuNjItNywxLjQyLDEuNjMtMi43NCw1LjMsOC44NC01LjY2'@;
put 'YS45MS45MSwwLDAsMSwxLDEuNTNMNy44NCwxMy4zOGEyLjEzLDIuMTMsMCwwLDAsLjI0LjUyLDIuMjgsMi4yOCwwLDAsMCwxLjY1LDFMMTguMTEsOS41YS45MS45MSwwLDAsMSwxLDEuNTJMMTMsMTQuOTRIMjAuOGwyLjQxLTQuODJhNS42LDUuNiwwLDAsMC01LTguMTJIOWExLDEsMCwwLDAt'@;
put 'LjkuNTZMMy44OCwxMC44OWE1LjYsNS42LDAsMCwwLDUsOC4xMmg3LjY1bC0zLjQzLDYuODdhNS42LDUuNiwwLDAsMCw1LDguMTJoOS4yOGExLDEsMCwwLDAsLjkzLS42NWw0LjE0LTguMjRBNS41OCw1LjU4LDAsMCwwLDMyLjE2LDE5LjYzWk0xNy43NSwyNS41N0EuOTEuOTEsMCwwLDEsMTgs'@;
put 'MjQuMzFsNi0zLjg4QS45MS45MSwwLDEsMSwyNSwyMmwtNiwzLjg4YS45MS45MSwwLDAsMS0xLjI2LS4yN1pNMjksMjQuMzRsLTksNS43OGEuOTEuOTEsMCwxLDEtMS0xLjUzbDktNS43OGEuOTEuOTEsMCwxLDEsMSwxLjUzWiIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRmxhc2s9KDAsbS5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQzLDI3LjI4LDIzLDE0Ljg0VjRoMWExLDEsMCwwLDAsMC0ySDEyYTEsMSwwLDAsMCwwLDJoMVYxNC44NEw0LjUxLDI3LjM2QTQuMjksNC4yOSwwLDAsMCw1LDMyLjgsNC4zOCw0LjM4LDAsMCwwLDguMTUsMzRIMjhhNC4yNCw0LjI0LDAsMCwwLDMu'@;
put 'NDItNi43MlpNMjkuODUsMzFhMi42MiwyLjYyLDAsMCwxLTIsMUg4YTIuMiwyLjIsMCwwLDEtMi4wNi0xLjQxLDIuNjgsMi42OCwwLDAsMSwuMjktMi4xN2wzLTQuNDQsMTQsMC0xLjMxLTJIMTAuNTdMMTUsMTUuNDZWNGg2VjE1LjQ2bDguODQsMTMuMDVBMi4yMywyLjIzLDAsMCwxLDI5Ljg1'@;
put 'LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDksMjcuNCwyMywxNC45NFY0aDFhMSwxLDAsMCwwLDAtMkgxMi4wOGExLDEsMCwwLDAsMCwySDEzVjE0Ljk0TDQuNTgsMjcuMzFhNC4zMSw0LjMxLDAs'@;
put 'MCwwLS43OCwzQTQuMjMsNC4yMywwLDAsMCw4LDM0SDI3Ljg2QTQuMzYsNC4zNiwwLDAsMCwzMSwzMi44LDQuMjMsNC4yMywwLDAsMCwzMS40OSwyNy40Wk0xNSwxNS40OVY0aDZWMTUuNDlMMjYuMTUsMjNIOS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42OCwxNC44MWE2Ljc2LDYuNzYsMCwxLDEsNi43Ni02Ljc1QTYuNzcsNi43NywwLDAsMSwxNC42OCwxNC44MVptMC0xMS41MWE0Ljc2LDQuNzYsMCwxLDAsNC43Niw0Ljc2'@;
put 'QTQuNzYsNC43NiwwLDAsMCwxNC42OCwzLjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40MiwzMS42OEEyLjE0LDIuMTQsMCwwLDEsMTUuOCwzMEg0VjI0LjIyYTE0LjgxLDE0LjgxLDAsMCwxLDExLjA5'@;
put 'LTQuNjhsLjcyLDBhMi4yLDIuMiwwLDAsMSwuNjItMS44NWwuMTItLjExYy0uNDcsMC0xLS4wNi0xLjQ2LS4wNkExNi40NywxNi40NywwLDAsMCwyLjIsMjMuMjZhMSwxLDAsMCwwLS4yLjZWMzBhMiwyLDAsMCwwLDIsMkgxNi43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODcsMTYuMjlhLjM3LjM3LDAsMCwxLC4xNSwwLC40Mi40MiwwLDAsMC0uMTUsMFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwy'@;
put 'My4zMmwtMi0uNjFhNy4yMSw3LjIxLDAsMCwwLS41OC0xLjQxbDEtMS44NkEuMzguMzgsMCwwLDAsMzIsMTlsLTEuNDUtMS40NWEuMzYuMzYsMCwwLDAtLjQ0LS4wN2wtMS44NCwxYTcuMTUsNy4xNSwwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM2LjM2LDAsMCwwLS4zNi0uMjRIMjMuODJhLjM2'@;
put 'LjM2LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNmwtMS44Mi0xYS4zNS4zNSwwLDAsMC0uNDMuMDdMMTcuNjksMTlhLjM4LjM4LDAsMCwwLS4wNi40NGwxLDEuODJBNi43Nyw2Ljc3LDAsMCwwLDE4LDIyLjY5bC0yLC42YS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNUEuMzUu'@;
put 'MzUsMCwwLDAsMTYsMjZsMiwuNjFhNyw3LDAsMCwwLC42LDEuNDFsLTEsMS45MWEuMzYuMzYsMCwwLDAsLjA2LjQzbDEuNDUsMS40NWEuMzguMzgsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA5LDcuMDksMCwwLDAsMS40LjU3bC42LDJhLjM4LjM4LDAsMCwwLC4zNS4yNmgyLjA1YS4zNy4zNyww'@;
put 'LDAsMCwuMzUtLjI2bC42MS0yLjA1YTYuOTIsNi45MiwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM2LjM2LDAsMCwwLC40My0uMDdMMzIsMzAuNEEuMzUuMzUsMCwwLDAsMzIsMzBsLTEtMS44OGE3LDcsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM2LjM2LDAsMCwwLC4yNi0uMzVWMjMuNjdBLjM2'@;
put 'LjM2LDAsMCwwLDMzLjY4LDIzLjMyWk0yNC44NSwyOGEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjMzQTMuMzQsMy4zNCwwLDAsMSwyNC44NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTQuNjciIGN5'@;
put 'PSI4LjMiIHI9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTYuNDQsMzEuODJhMi4xNSwyLjE1LDAsMCwxLS4zOC0yLjU1bC41My0xLTEuMDktLjMzQTIuMTQsMi4xNCwwLDAsMSwxNCwyNS44NFYyMy43OWEyLjE2'@;
put 'LDIuMTYsMCwwLDEsMS41My0yLjA3bDEuMDktLjMzLS41Mi0xYTIuMTcsMi4xNywwLDAsMSwuMzUtMi41MiwxOC45MiwxOC45MiwwLDAsMC0yLjMyLS4xNkExNS41OCwxNS41OCwwLDAsMCwyLDIzLjA3djcuNzVhMSwxLDAsMCwwLDEsMUgxNi40NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNywyMy40NmwtMi0uNmE2LjczLDYuNzMsMCwwLDAtLjU4LTEuNDJsMS0xLjg2YS4zNS4zNSwwLDAsMC0uMDctLjQzbC0xLjQ1LTEuNDZhLjM4LjM4LDAsMCwwLS40My0uMDdsLTEuODUsMWE3Ljc0LDcuNzQsMCww'@;
put 'LDAtMS40My0uNmwtLjYxLTJhLjM4LjM4LDAsMCwwLS4zNi0uMjVIMjMuODRhLjM4LjM4LDAsMCwwLS4zNS4yNmwtLjYsMmE2Ljg1LDYuODUsMCwwLDAtMS40NS42MWwtMS44MS0xYS4zOC4zOCwwLDAsMC0uNDQuMDZsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LjI0'@;
put 'LDcuMjQsMCwwLDAsMTgsMjIuODNsLTIsLjYxYS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNWEuMzYuMzYsMCwwLDAsLjI2LjM1bDIsLjYxYTcuMjksNy4yOSwwLDAsMCwuNiwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LjE2LDMyYS4zOC4zOCwwLDAsMCwuNDQuMDZsMS44Ny0x'@;
put 'YTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMi4wNWEuMzguMzgsMCwwLDAsLjM2LjI2aDIuMDVhLjM4LjM4LDAsMCwwLC4zNS0uMjZsLjYtMi4wNWE2LjY4LDYuNjgsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zOC4zOCwwLDAsMCwuNDQtLjA2TDMyLDMwLjU1YS4zOC4zOCwwLDAsMCwuMDYt'@;
put 'LjQ0bC0xLTEuODhhNi45Miw2LjkyLDAsMCwwLC41Ny0xLjM4bDItLjYxYS4zOS4zOSwwLDAsMCwuMjctLjM1VjIzLjgyQS40LjQsMCwwLDAsMzMuNywyMy40NlptLTguODMsNC43MmEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjM0QTMuMzQsMy4zNCwwLDAsMSwyNC44NywyOC4xOFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIYXJkRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDhhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y'@;
put 'Wk0zMiwyOEg0VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS44OCwxOC4wOGEzLjU5'@;
put 'LDMuNTksMCwxLDAsMy41OS0zLjU5LDMuODQsMy44NCwwLDAsMC0uOTEuMTNMMTUsMTYuMTZhMi4wOCwyLjA4LDAsMCwxLC41LS4wNywyLDIsMCwxLDEtMiwyLDEuNjQsMS42NCwwLDAsMSwuMDgtLjVMMTIsMTcuMTZBMy41MywzLjUzLDAsMCwwLDExLjg4LDE4LjA4WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNDcsMjUuNzNhNy42Niw3LjY2LDAsMCwxLTcuNjUtNy42NSw3LjU1LDcuNTUsMCwwLDEsLjI3LTJMNi41NCwxNS43YTkuMjQsOS4yNCwwLDAsMCwxNy44LDQuOTVIMjIuNjZBNy42NCw3'@;
put 'LjY0LDAsMCwxLDE1LjQ3LDI1LjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjIsMTcuODNhLjguOCwwLDAsMC0uOC0uOEgyNC42NmE5LjI2LDkuMjYsMCwwLDAtOS4xOS04LjIsOS4zNiw5LjM2LDAs'@;
put 'MCwwLTIuMzguMzJsLjQyLDEuNTRhNy44Niw3Ljg2LDAsMCwxLDItLjI2QTcuNjYsNy42NiwwLDAsMSwyMywxN0gyMC45MmEuOC44LDAsMCwwLDAsMS42aDYuNUEuOC44LDAsMCwwLDI4LjIyLDE3LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEyLDE3LjE2bDEuNTQuNDJhMS42NCwxLjY0LDAsMCwwLS4wOC41LDIsMiwwLDEsMCwyLTIsMi4wOCwyLjA4LDAsMCwwLS41'@;
put 'LjA3bC0uNDEtMS41NGEzLjg0LDMuODQsMCwwLDEsLjkxLS4xMywzLjU5LDMuNTksMCwxLDEtMy41OSwzLjU5QTMuNTMsMy41MywwLDAsMSwxMiwxNy4xNlpNNS4zMSw4QTEuMjUsMS4yNSwwLDEsMSw0LjA2LDkuMjUsMS4yNSwxLjI1LDAsMCwxLDUuMzEsOFptMCwyMC4wNmExLjI1LDEuMjUs'@;
put 'MCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSw1LjMxLDI4LjA2Wm0xMC4xNi0uNzNBOS4yMiw5LjIyLDAsMCwxLDYuNTQsMTUuN2wxLjU1LjQxYTcuNTUsNy41NSwwLDAsMC0uMjcsMiw3LjY0LDcuNjQsMCwwLDAsMTQuODQsMi41N2gxLjY4QTkuMjUsOS4yNSwwLDAsMSwxNS40Nywy'@;
put 'Ny4zM1ptMTItOC43aC02LjVhLjguOCwwLDAsMSwwLTEuNkgyM2E3LjY2LDcuNjYsMCwwLDAtNy41Ny02LjYsNy44Niw3Ljg2LDAsMCwwLTIsLjI2bC0uNDItMS41NGE5LjM2LDkuMzYsMCwwLDEsMi4zOC0uMzJBOS4yNiw5LjI2LDAsMCwxLDI0LjY2LDE3aDIuNzZhLjguOCwwLDAsMSwwLDEu'@;
put 'NlptMy4zOSw5LjQzYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDI4LjA2Wm0wLTE3LjU2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDEwLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlSGFyZERyaXZlRGlza3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDUuNzRBMS43NCwxLjc0LDAsMCwwLDI0LjI2LDRIMy43NEExLjc0LDEuNzQsMCwwLDAsMiw1Ljc0VjIwLjI2QTEuNzQsMS43NCwwLDAsMCwzLjc0LDIySDRW'@;
put 'NkgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2'@;
put 'SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yNiwxMkgxMS43NEExLjc0LDEuNzQsMCwwLDAsMTAsMTMuNzRWMjguMjZBMS43NCwxLjc0LDAsMCwwLDExLjc0LDMwSDMyLjI2QTEuNzQsMS43'@;
put 'NCwwLDAsMCwzNCwyOC4yNlYxMy43NEExLjc0LDEuNzQsMCwwLDAsMzIuMjYsMTJaTTMyLDI4SDEyVjE0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsMjMuNjhhMi42NCwyLjY0LDAsMSwwLTIu'@;
put 'Ny0yLjYzQTIuNjcsMi42NywwLDAsMCwxOS45NCwyMy42OFptMC0zLjg3YTEuMjQsMS4yNCwwLDEsMS0xLjI5LDEuMjRBMS4yNywxLjI3LDAsMCwxLDE5Ljk0LDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMTkuOTQsMTYuMjJhNC45Myw0LjkzLDAsMCwxLDQuOTUsNC4zNUgyMy43MVYyMmg0LjQxYS43LjcsMCwwLDAsMC0xLjRIMjYuMzFhNi4zMyw2LjMzLDAsMCwwLTYuMzctNS43NSw2LjU4LDYuNTgsMCwwLDAtMS40OC4xN2wuMzUsMS4zN0E0LjczLDQuNzMsMCwwLDEsMTkuOTQsMTYuMjJa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyNy4yN2E2LjQyLDYuNDIsMCwwLDAsNS42Ny0zLjM1SDIzLjkzYTUsNSwwLDAsMS00LDEuOTUsNC45MSw0LjkxLDAsMCwxLTUtNC44Miw1LjE2LDUuMTYs'@;
put 'MCwwLDEsLjA4LS43OUwxMy42MywyMGE3LDcsMCwwLDAtLjA5LDFBNi4zMiw2LjMyLDAsMCwwLDE5Ljk0LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQu'@;
put 'MjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCw5Ljc0QTEuNzQsMS43NCwwLDAsMCwyOC4y'@;
put 'Niw4SDcuNzRBMS43NCwxLjc0LDAsMCwwLDYsOS43NFYyNC4yNkExLjc0LDEuNzQsMCwwLDAsNy43NCwyNkg4VjEwSDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS42MiwyMi42QTEuNTUsMS41NSwwLDEsMCwx'@;
put 'OCwyMS4wNSwxLjYsMS42LDAsMCwwLDE5LjYyLDIyLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEu'@;
put 'NzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMTkuNjIsMTcuNzRhMy4zMSwzLjMxLDAsMSwxLTMuMzgsMy4zMUEzLjM1LDMuMzUsMCwwLDEsMTkuNjIsMTcuNzRabTAsMTEuMTNhNy45NCw3Ljk0LDAsMCwxLTgtNy44'@;
put 'Miw3LjgzLDcuODMsMCwwLDEsLjExLTEuMjlsMS43NS4zYTUuMzYsNS4zNiwwLDAsMC0uMTEsMSw2LjE4LDYuMTgsMCwwLDAsNi4yOCw2LjA2LDYuMzUsNi4zNSwwLDAsMCw1LTIuNDZoMi4xQTguMDYsOC4wNiwwLDAsMSwxOS42MiwyOC44N1pNMjkuODksMjIuMkgyNC4zNlYyMC40NGgxLjQ4'@;
put 'QTYuMTksNi4xOSwwLDAsMCwxOS42MiwxNWE2LjQ4LDYuNDgsMCwwLDAtMS40MS4xNmwtLjQ1LTEuN2E4LjE2LDguMTYsMCwwLDEsMS44Ni0uMjIsOCw4LDAsMCwxLDgsNy4yMWgyLjI2YS44OC44OCwwLDAsMSwwLDEuNzZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00'@;
put 'IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTlZNZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjJWMTRhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkgyNUEyLDIsMCwwLDAsMjcsMjJaTTExLDE0SDI1djhIMTFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI1LjAxIiB5PSI2'@;
put 'IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LjgsOEgxNi44N1Y2aC0xMUw3Ljc4LDQuMDhhMSwxLDAsMCwwLDAtMS40MiwxLDEsMCwwLDAtMS40MSwwTDIsNyw2LjM3'@;
put 'LDExLjRhMSwxLDAsMCwwLDEuNDEsMCwxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuNjEsMjQuNjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQyTDMwLjEsMjhI'@;
put 'MTl2MkgzMC4ybC0yLDJhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsLjcuMjksMSwxLDAsMCwwLC43MS0uMjlMMzQsMjkuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSIyOCIgd2lkdGg9IjQi'@;
put 'IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSIyOCIgd2lkdGg9IjEuOTciIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAg'@;
put 'ICAgICcpLEYuQ2xyU2hhcGVTU0Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDE4LjYyYzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJzLS41MywxLjA5LTEuNTUsMS4wOWE0LDQsMCwwLDEt'@;
put 'Mi43MS0xLjExbC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MnMtMS4xNS0yLjA1LTIuODctMi40NGMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDEwLDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMUE0LjU4'@;
put 'LDQuNTgsMCwwLDAsMTAsMTMuNjljLTEuNzQsMC0zLDEuMDUtMywyLjQ5UzguMjYsMTguMjIsMTAsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44MywyMC45M2E0LDQsMCwwLDEtMi43MS0xLjEx'@;
put 'bC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MlMxOS43MywxNy42NSwxOCwxNy4yNmMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDE3LjQ4LDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMWE0LjU2LDQuNTYs'@;
put 'MCwwLDAtMy4xMi0xLjE1Yy0xLjczLDAtMywxLjA1LTMsMi40OXMxLjE5LDIsMi44OSwyLjQ0YzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJTMTguODUsMjAuOTMsMTcuODMsMjAuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0yOS45LDE4YzAtMi40MS0xLjkyLTQuMTItNC42NC00LjEyaC0yLjl2OC4yNGgyLjlDMjgsMjIuMDgsMjkuOSwyMC4zNywyOS45LDE4Wm0tNi0yLjc2aDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC04IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk01LjIxLDhBMS4yNSwxLjI1LDAsMSwxLDQsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4yMSw4Wm0w'@;
put 'LDIwYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMjEsMjhabTUuMDYtNS43OGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIu'@;
put 'ODktLjg5LTIuODktMi40NHMxLjIyLTIuNDksMy0yLjQ5YTQuNTgsNC41OCwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFBMy42OCwzLjY4LDAsMCwwLDEwLDE1YTEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRT'@;
put 'MTIuMjQsMjIuMjIsMTAuMjcsMjIuMjJabTcuNTEsMGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIuODktLjg5LTIuODktMi40NHMxLjIzLTIuNDksMy0yLjQ5'@;
put 'YTQuNTYsNC41NiwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFhMy42OCwzLjY4LDAsMCwwLTIuMzctMSwxLjI1LDEuMjUsMCwwLDAtMS4zOSwxLjA4YzAsLjY3LjYxLjkxLDEuOTIsMS4yMSwxLjcyLjM5LDIuODcuOTQsMi44NywyLjQ0UzE5Ljc1LDIyLjIyLDE3Ljc4LDIyLjIyWm00LjU4LS4x'@;
put 'NFYxMy44NGgyLjljMi43MiwwLDQuNjQsMS43MSw0LjY0LDQuMTJTMjgsMjIuMDgsMjUuMjYsMjIuMDhaTTMwLjY5LDI4YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjY5LDI4Wm0wLTE3LjVhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUs'@;
put 'MCwwLDEsMzAuNjksMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMTUuMmgxLjU2YTIuNzcsMi43NywwLDEsMSwwLDUuNTNIMjMuODZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQmx1ZXRvb3RoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi42NCwyNS4yNywxOSwxNy41MywxOSwzLDI1LjIxLDkuNGwtNS42NSw1Ljc5TDIxLDE2LjYybDUuNjgtNS44MmEyLDIsMCwwLDAsMC0yLjc4TDIwLjQ4LDEuN0EyLjA4'@;
put 'LDIuMDgsMCwwLDAsMTguODUsMSwyLDIsMCwwLDAsMTcsM1YxNS4zOEwxMC4wNSw4LjI3QTEsMSwwLDAsMCw4LjYyLDkuNjZMMTYuNzksMTgsOS4wNiwyNmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzM2EyLjA3LDIuMDcsMCww'@;
put 'LDAsLjcxLDEuNjJBMiwyLDAsMCwwLDE5LDM1YTEuOTQsMS45NCwwLDAsMCwxLjQyLS42bDYuMjMtNi4zOEEyLDIsMCwwLDAsMjYuNjQsMjUuMjdaTTE5LDMzLjA1VjIwLjI5bDYuMjEsNi4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICA8cGF0'@;
put 'aCBkPSJNMjYuNTIsMjQuNTJsLTUuNjUtNS44My0xLjQ2LTEuNXYtMTJMMjMuNzksOS43bC0zLjYsMy43MSwyLjI0LDIuMjksNC4wOS00LjIyYTIuNTQsMi41NCwwLDAsMCwwLTMuNTZMMjAuNTcsMS43OEEyLjU0LDIuNTQsMCwwLDAsMTYuMiwzLjU1VjEzLjg2bC01LjUzLTUuN2ExLjYsMS42'@;
put 'LDAsMSwwLTIuMywyLjIzTDE1Ljc1LDE4bC03LDcuMTlhMS42LDEuNiwwLDAsMCwwLDIuMjYsMS42MywxLjYzLDAsMCwwLDEuMTIuNDUsMS41OCwxLjU4LDAsMCwwLDEuMTUtLjQ5bDUuMTEtNS4yN1YzMi40NWEyLjUzLDIuNTMsMCwwLDAsMS41OSwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUu'@;
put 'MTksMi41NiwyLjU2LDAsMCwwLDEuODMtLjc3bDUuOTUtNi4xNUEyLjU0LDIuNTQsMCwwLDAsMjYuNTIsMjQuNTJaTTE5LjQsMzAuODNWMjEuNzdsNC4zOSw0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPSgw'@;
put 'LG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwzLDI1LjIyLDkuNGwtNS42Niw1LjhMMjEsMTYuNjNsNS42OC01LjgzYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIsMiwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzdjExLjRsMiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuNzcsNSwzLjM2LDYuNDIsMTUuODksMTksOS4wNiwyNmExLDEsMCwwLDAsLjcxLDEuNywxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzMi45NGEyLjA4LDIuMDgsMCwwLDAsLjcxLDEuNjNBMiwyLDAsMCwwLDE5LDM1YTIsMiwwLDAs'@;
put 'MCwxLjQyLS42bDUuNDEtNS41NCwzLjU0LDMuNTNMMzAuNzcsMzFaTTE5LDMzLjA1di0xMWw1LjQxLDUuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTkuMzEsNS4xNywyMy43LDkuN2wtMy41OSwzLjcxLDIuMjQsMi4yOSw0LjA5'@;
put 'LTQuMjJhMi41NiwyLjU2LDAsMCwwLDAtMy41NmwtNi02LjE0YTIuNTEsMi41MSwwLDAsMC0yLjc3LS41OSwyLjU0LDIuNTQsMCwwLDAtMS42LDIuMzZ2MTBsMy4yMSwzLjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC41LDUsMy4wOSw2'@;
put 'LjQyLDE1LjE3LDE4LjUxLDguNywyNS4xOUExLjYsMS42LDAsMCwwLDkuODUsMjcuOSwxLjU3LDEuNTcsMCwwLDAsMTEsMjcuNDFsNS4xMS01LjI3VjMyLjQ1YTIuNTQsMi41NCwwLDAsMCwxLjYsMi4zNiwyLjQ0LDIuNDQsMCwwLDAsLjk1LjE5LDIuNTUsMi41NSwwLDAsMCwxLjgyLS43N2w1'@;
put 'LjEyLTUuMjksMy40OSwzLjQ4TDMwLjUsMzFaTTE5LjgxLDMwLjgzVjIyLjY1bDQsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVByb2Nlc3NPblZNPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40OSwyNi4yOGExLDEsMCww'@;
put 'LDAtMS4yLS43bC0yLjQ5LjY3YTE0LjIzLDE0LjIzLDAsMCwwLDIuNC02Ljc1QTE0LjQ4LDE0LjQ4LDAsMCwwLDI3LjM3LDcuMzUsMSwxLDAsMCwwLDI2LDcuNDRhMSwxLDAsMCwwLC4wOSwxLjQxLDEyLjQ1LDEyLjQ1LDAsMCwxLDQuMTYsMTAuNDYsMTIuMTksMTIuMTksMCwwLDEtMiw1Ljc0'@;
put 'TDI4LDIyLjU0YTEsMSwwLDEsMC0xLjk1LjE2bC41LDYuNDQsNi4yNS0xLjY2QTEsMSwwLDAsMCwzMy40OSwyNi4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjMxLDE3LjA4YTEuMDYsMS4wNiwwLDAsMCwuNDQuMTYsMSwxLDAs'@;
put 'MCwwLDEuMTItLjg1QTEyLjIxLDEyLjIxLDAsMCwxLDE4LjY5LDUuODRMMTYuNDUsNy4zN2ExLDEsMCwwLDAsLjQ3LDEuNzlBMSwxLDAsMCwwLDE3LjU2LDlsNS4zMy0zLjY2TDE4LjMzLjc2YTEsMSwwLDEsMC0xLjM5LDEuMzhsMS43LDEuN0ExNC4yLDE0LjIsMCwwLDAsMy44OSwxNi4xMiwx'@;
put 'LDEsMCwwLDAsNC4zMSwxNy4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43MywyOS45M2ExMiwxMiwwLDAsMS00Ljg0LjUxLDEyLjMsMTIuMywwLDAsMS05LjU3LTYuM2wyLjQ5LjkzYTEsMSwwLDAsMCwuNjktMS44NGwtNC41'@;
put 'OS0xLjdoMEw0LjQ0LDIxLDMuMzMsMjcuMzVhMSwxLDAsMCwwLC43OSwxLjEzbC4xNywwYTEsMSwwLDAsMCwxLS44MWwuNDItMi40YTE0LjMsMTQuMywwLDAsMCwxMSw3LjE0LDEzLjkxLDEzLjkxLDAsMCwwLDUuNjMtLjYsMSwxLDAsMCwwLS42LTEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxM0gxNGExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTRBMSwxLDAsMCwwLDIyLDEzWm0tMSw4SDE1VjE1aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIgLz4nKSxGLkNsclNoYXBlQXNzaWduVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNy40Niw3LjQ2LDAsMSwwLTcuNDUtNy40NkE3LjQ2LDcuNDYsMCwwLDAsMTgsMTdaTTE4LDQuMDdhNS40Niw1LjQ2LDAsMSwxLTUuNDUsNS40NUE1LjQ2LDUuNDYsMCwwLDEsMTgs'@;
put 'NC4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxLjg5VjI1Ljc3YTE2LjEzLDE2LjEzLDAsMCwxLDEyLTUsMTYuNjEsMTYuNjEsMCwwLDEsOC43MSwyLjMzbDEuMzUtMS41MUExOC41MywxOC41MywwLDAsMCwxOCwxOC43NCwx'@;
put 'Ny43LDE3LjcsMCwwLDAsNC4yMSwyNC44YTEsMSwwLDAsMC0uMjEuNnY2LjQ5QTIuMDYsMi4wNiwwLDAsMCw2LDM0SDE4LjM5bC0xLjktMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMS44OSwzMCwzMkgyNi44NWwtMS44LDJI'@;
put 'MzBhMi4wNiwyLjA2LDAsMCwwLDItMi4wN1YyNi4ybC0yLDIuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzQuNzYsMTguNjJhMSwxLDAsMCwwLTEuNDEuMDhsLTExLjYyLDEzLTUuMi01LjU5QTEsMSwwLDAsMCwxNS4xMiwyNmEx'@;
put 'LDEsMCwwLDAtLjA2LDEuNDJsNi42OSw3LjJMMzQuODQsMjBBMSwxLDAsMCwwLDM0Ljc2LDE4LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxMC4zNiIgcj0iNi44MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTIsMjYuNjVhMi44LDIuOCwwLDAsMSw0Ljg1LTEuOEwyMC43MSwyOWw2Ljg0LTcuNjNBMTYuODEsMTYuODEsMCwwLDAsMTgsMTguNTUsMTYuMTMsMTYuMTMsMCwwLDAsNS41LDI0YTEsMSwwLDAsMC0uMi42MVYzMGEyLDIsMCwwLDAsMS45'@;
put 'NCwyaDguNTdsLTMuMDctMy4zQTIuODEsMi44MSwwLDAsMSwxMiwyNi42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI4Ljc2LDMyYTIsMiwwLDAsMCwxLjk0LTJWMjYuMjRMMjUuNTcsMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy43NywxOC42MmExLDEsMCwwLDAtMS40Mi4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE0LjEyLDI2YTEsMSwwLDAsMCwwLDEuNDJsNi42OCw3LjJMMzMuODQsMjBBMSwxLDAsMCwwLDMzLjc3LDE4LjYyWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQXRvbT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTQuMDVhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMTQuMDVabTAsNi40NGEyLjQyLDIuNDIsMCwxLDEsMi40Mi0yLjQyQTIuNDIsMi40MiwwLDAs'@;
put 'MSwxOCwyMC40OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNC4yMywxMS43MWEzOS4xNCwzOS4xNCwwLDAsMC00LjU3LTMuOTIsMjIuODYsMjIuODYsMCwwLDEsMy40OC0xLjcyYy4zMi0uMTIuNjItLjIxLjkyLS4zYTIuMjgsMi4y'@;
put 'OCwwLDAsMCwzLjgxLS40NiwzLjMxLDMuMzEsMCwwLDEsMS45Mi44NGMxLjE5LDEuMTksMS4yMiwzLjU5LjEsNi41OC40OS42NS45NCwxLjMxLDEuMzUsMiwuMTctLjQuMzUtLjc5LjQ5LTEuMTgsMS40Ny0zLjg1LDEuMjgtNy0uNTMtOC43OGE1LjI5LDUuMjksMCwwLDAtMy4zMy0xLjQ0LDIu'@;
put 'MjksMi4yOSwwLDAsMC00LjMxLjU0Yy0uMzcuMTEtLjc0LjIyLTEuMTMuMzdhMjUuNzksMjUuNzksMCwwLDAtNC41NywyLjM1QTI2LjIxLDI2LjIxLDAsMCwwLDEzLjI4LDQuMmMtMy44NS0xLjQ2LTctMS4yOC04Ljc3LjUzQzIuODUsNi40LDIuNTgsOS4xNywzLjY4LDEyLjU5YTIuMjgsMi4y'@;
put 'OCwwLDAsMCwxLjU5LDMuNjdjLjMyLjYxLjY3LDEuMjIsMS4wNiwxLjgyQTI1LjU0LDI1LjU0LDAsMCwwLDQsMjIuNjZjLTEuNDcsMy44NC0xLjI4LDcsLjUzLDguNzdhNS42Myw1LjYzLDAsMCwwLDQuMTIsMS41MSwxMy4zNCwxMy4zNCwwLDAsMCw0LjY1LTEsMjYuMjEsMjYuMjEsMCwwLDAs'@;
put 'NC41OC0yLjM1QTI1Ljc5LDI1Ljc5LDAsMCwwLDIyLjQzLDMyYTE0LjE2LDE0LjE2LDAsMCwwLDMuNjUuOUEyLjMsMi4zLDAsMCwwLDMwLjQ2LDMyYTQuNTUsNC41NSwwLDAsMCwuNzQtLjU3YzEuODEtMS44MSwyLTQuOTMuNTMtOC43N0EzMi42OCwzMi42OCwwLDAsMCwyNC4yMywxMS43MVpN'@;
put 'MTIuNTcsMzAuMDljLTMsMS4xNS01LjQ1LDEuMTMtNi42NS0uMDhzLTEuMjMtMy42Mi0uMDctNi42NGEyMi43NywyMi43NywwLDAsMSwxLjcxLTMuNDgsNDAuMTksNDAuMTksMCwwLDAsMy45Miw0LjU2Yy40My40My44Ny44NSwxLjMxLDEuMjVxLjktLjQ2LDEuODMtMS4wNWMtLjU4LS41Mi0x'@;
put 'LjE2LTEtMS43Mi0xLjYxYTM0LDM0LDAsMCwxLTUuNzQtNy40N0EyLjI5LDIuMjksMCwwLDAsNS41LDExLjY5aDBjLS43NS0yLjUtLjYyLTQuNDkuNDMtNS41NGEzLjcyLDMuNzIsMCwwLDEsMi43Mi0uOTIsMTEuNCwxMS40LDAsMCwxLDMuOTMuODQsMjIuODYsMjIuODYsMCwwLDEsMy40OCwx'@;
put 'LjcyLDM5LjE0LDM5LjE0LDAsMCwwLTQuNTcsMy45MmMtLjQ0LjQ0LS44Ny45LTEuMjksMS4zNmEyMC4yNywyMC4yNywwLDAsMCwxLDEuODVjLjU0LS42MSwxLjA5LTEuMjEsMS42OC0xLjhhMzYuMzMsMzYuMzMsMCwwLDEsNS00LjE3LDM2Ljg4LDM2Ljg4LDAsMCwxLDQuOTUsNC4xNywzNi4y'@;
put 'NiwzNi4yNiwwLDAsMSw0LjE3LDUsMzcsMzcsMCwwLDEtNC4xNyw1QTMwLjY4LDMwLjY4LDAsMCwxLDEyLjU3LDMwLjA5Wk0yOS43OSwzMGwtLjE2LjEzYTIuMjcsMi4yNywwLDAsMC0zLjUuNzIsMTIuNTcsMTIuNTcsMCwwLDEtMy0uNzcsMjIsMjIsMCwwLDEtMy40OC0xLjcyLDM5LjE0LDM5'@;
put 'LjE0LDAsMCwwLDQuNTctMy45MiwzOC4yNiwzOC4yNiwwLDAsMCwzLjkyLTQuNTYsMjIuODgsMjIuODgsMCwwLDEsMS43MiwzLjQ4QzMxLDI2LjM5LDMxLDI4LjgxLDI5Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LjIz'@;
put 'LDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1'@;
put 'Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVB'@;
put 'MjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40'@;
put 'NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCww'@;
put 'LDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAs'@;
put 'MCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIu'@;
put 'NS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCww'@;
put 'LDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5'@;
put 'Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMu'@;
put 'NDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE3Ljk5IiBjeT0iMTguMDciIHI9IjMuMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIuNjYgMy4xMSkgcm90YXRlKC05LjIyKSIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFyQ29kZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw3QTEsMSwwLDAsMCw0LDhWMzBhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSw3QTEsMSwwLDAsMCw4LDhWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs'@;
put 'MCwyLDBWOEExLDEsMCwwLDAsMTMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxNyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDIxLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs'@;
put 'MCwyLDBWOEExLDEsMCwwLDAsMjUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyOSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTMzLDdhMSwxLDAsMCwwLTEsMVYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDMzLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz4nKSxGLkNsclNoYXBlQ2REdmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi4zMywxOGE0LjQ2LDQuNDYs'@;
put 'MCwxLDAtNC40NSw0LjQ2QTQuNDYsNC40NiwwLDAsMCwyMi4zMywxOFpNMTcuODgsMjAuOUEyLjg2LDIuODYsMCwxLDEsMjAuNzMsMTgsMi44NiwyLjg2LDAsMCwxLDE3Ljg4LDIwLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTcu'@;
put 'ODgsNy40M0gxOFY1Ljg0aC0uMTJBMTIuMjEsMTIuMjEsMCwwLDAsNS42OCwxNy43NWgxLjZBMTAuNjEsMTAuNjEsMCwwLDEsMTcuODgsNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4wOCwxOEgyOC40OXYwQTEwLjYxLDEw'@;
put 'LjYxLDAsMCwxLDE4LjI1LDI4LjYzdjEuNkExMi4yMiwxMi4yMiwwLDAsMCwzMC4wOSwxOFMzMC4wOCwxOCwzMC4wOCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxMVY5LjQ0aC0uMTJhOC42Miw4LjYyLDAsMCwwLTguNiw4'@;
put 'LjMyaDEuNmE3LDcsMCwwLDEsNy02LjcyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE4LjI1LDI1djEuNkE4LjYxLDguNjEsMCwwLDAsMjYuNDgsMTh2MGgtMS42djBBNyw3LDAsMCwxLDE4LjI1LDI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE4LjE3LDEuOTJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTguMTcsMS45MlpNMjYuMjMsMThoMS41NGE5LjYxLDkuNjEsMCwwLDEtOS42LDkuNTNIMThWMjZoLjE3QTguMDcsOC4wNywwLDAsMCwyNi4yMywx'@;
put 'OFpNNi4wNSwxOEg0LjQ1di0uMDhBMTMuNzIsMTMuNzIsMCwwLDEsMTgsNC4yMXYxLjZBMTIuMTMsMTIuMTMsMCwwLDAsNi4wNSwxNy45MlptNC4wNSwwSDguNTZ2LS4wOEE5LjYxLDkuNjEsMCwwLDEsMTgsOC4zMlY5Ljg2YTguMDcsOC4wNywwLDAsMC03LjksOC4wNlptNC4zMi0uMDhhMy43'@;
put 'NSwzLjc1LDAsMSwxLDMuNzUsMy43NUEzLjc1LDMuNzUsMCwwLDEsMTQuNDIsMTcuOTJabTMuNzUsMTMuNzFIMThWMzBoLjE3QTEyLjEzLDEyLjEzLDAsMCwwLDMwLjI4LDE4aDEuNkExMy43MywxMy43MywwLDAsMSwxOC4xNywzMS42M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbnRhaW5lcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjI4QTIsMiwwLDAsMSwzMiwzMFpNNCw4VjI4SDMyVjhaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSw5LDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN'@;
put 'MTQuOTIsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMTQuOTIsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44Ljgs'@;
put 'MCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwyMSwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI3LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDI3LDI1LjNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTkuNjMsMjQuMjNhLjc5Ljc5LDAsMCwxLS44MS43N0EuNzkuNzksMCww'@;
put 'LDEsOCwyNC4yM1YxMS43N0EuNzkuNzksMCwwLDEsOC44MiwxMWEuNzkuNzksMCwwLDEsLjgxLjc3Wm02LDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4yMSwwYS43OS43OSww'@;
put 'LDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdabTYuMTIsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs'@;
put 'LjgyLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDE3LjU4YTMyLjM1LDMyLjM1LDAsMCwwLDYuMy45Miw0LjEzLDQuMTMsMCwwLDEsLjkyLTEuMzcs'@;
put 'MzAuOTQsMzAuOTQsMCwwLDEtNy4yMi0xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjhWOC4xOWMuMzQtLjc2LDQuMzEtMi4xMSwxMS0yLjExczEwLjY3LDEuMzUsMTEsMnYuM2MtLjgyLjc5LTQuNTgsMi4wNS0xMS4xMSwyLjA1'@;
put 'QTMzLjQ4LDMzLjQ4LDAsMCwxLDgsOS40NHYxLjQ0YTM1LjYsMzUuNiwwLDAsMCw4Ljg5LDFjNC4yOSwwLDguOC0uNTgsMTEuMTEtMS44MnY1LjA3YTUuMyw1LjMsMCwwLDEtMS44MS44OEgzMFY4LjEyYzAtMy4xOS04LjE3LTQtMTMtNHMtMTMsLjg1LTEzLDRWMjhDNCwzMC42Myw5LjM5LDMx'@;
put 'LjY4LDE0LDMyVjMwQzkuMTMsMjkuNjYsNi4yOCwyOC42Miw2LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTgsMjQuMjhhMzEuMywzMS4zLDAsMCwwLDYsLjg5di0xLjRhMjguOTMsMjguOTMsMCwwLDEtNi0uOTNaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwzMlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yMSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwwLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDIxLDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsMjEu'@;
put 'ODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40'@;
put 'LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwz'@;
put 'MlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LDIxLjgyYS43LjcsMCwwLDAtLjcuN1YzMGEuNy43LDAsMSwwLDEuNCwwVjIyLjUyQS43LjcsMCwwLDAsMjUsMjEuODJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAt'@;
put 'LjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxNkgyOFY4LjEyYzAtMS42OC01LjM4LTMtMTItM1M0LDYuNDQsNCw4LjEyVjI4YzAsMS41LDQuMzMs'@;
put 'Mi43NSwxMCwzVjI1LjIyYTI5LjE3LDI5LjE3LDAsMCwxLTgtMS4yOVYyMi40NGwuMjQuMUEyNi42MywyNi42MywwLDAsMCwxNCwyMy44MlYyMGE0LDQsMCwwLDEsLjI5LTEuNDdBMjkuMTksMjkuMTksMCwwLDEsNiwxNy4yM1YxNS43NWwuMjQuMDlhMjksMjksMCwwLDAsOSwxLjMyaDBBNCw0'@;
put 'LDAsMCwxLDE4LDE2Wk02LDEwLjU0VjkuMDVsLjI0LjA5QTMwLjEyLDMwLjEyLDAsMCwwLDE2LDEwLjQ3LDI4LjMzLDI4LjMzLDAsMCwwLDI2LDkuMDV2MS41YTMyLjUzLDMyLjUzLDAsMCwxLTEwLDEuMzJBMzIuNDQsMzIuNDQsMCwwLDEsNiwxMC41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUZpbGVTaGFyZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFB'@;
put 'MiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOTEsMjIuNDhhMi4wNiwyLjA2LDAs'@;
put 'MCwwLTEuNDQuNjJsLTUuNzItMi42NlYyMGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0LDIuMTIsMi4xMiwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVsLjA4LS4wOCw1LjY3LDIuNjZ2LjNhMi4wOSwyLjA5LDAsMSwwLDIu'@;
put 'MDgtMi4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAs'@;
put 'MCwzMCw5Wk02LDdoNi40OWwyLjcyLDRINlpNMjEuOTQsMjYuNjRhMi4wOSwyLjA5LDAsMCwxLTIuMTEtMi4wNmwwLS4zLTUuNjctMi42Ni0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMDgsMi4wOCwwLDEsMSwuNTgsMS40NkwxNC43NSwyMHYuNDds'@;
put 'NS43MiwyLjY2YTIuMDcsMi4wNywwLDEsMSwxLjQ3LDMuNTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVRckNvZGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUuNiw0QTEuNiwxLjYsMCwwLDAsNCw1LjZWMTJoOFY0Wk0xMCwx'@;
put 'MEg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDMwLjRBMS42LDEuNiwwLDAsMCw1LjYsMzJIMTJWMjRINFpNNiwyNmg0djRINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo'@;
put 'IGQ9Ik0yNCwzMmg2LjRBMS42LDEuNiwwLDAsMCwzMiwzMC40VjI0SDI0Wm0yLTZoNHY0SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQsNEgyNHY4aDhWNS42QTEuNiwxLjYsMCwwLDAsMzAuNCw0Wk0zMCwxMEgyNlY2aDRa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwIDEwIDIwIDggMTYgOCAxNiAxMiAxOCAxMiAxOCAxMCAyMCAxMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTIiIHk9'@;
put 'IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwb2x5Z29u'@;
put 'IHBvaW50cz0iMjAgNiAyMCA4IDIyIDggMjIgNCAxNCA0IDE0IDggMTYgOCAxNiA2IDIwIDYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxyZWN0IHg9IjQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtOSIgLz48cG9seWdvbiBwb2ludHM9IjEyIDE2IDEyIDE4IDEwIDE4IDEwIDE0IDggMTQgOCAxOCA2IDE4IDYgMjAgNCAyMCA0IDIyIDggMjIgOCAyMCAxMCAyMCAxMCAyMiAxMiAyMiAxMiAyMCAxNCAyMCAxNCAxNiAxMiAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEwIiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTYgMjIgMTYgMjIgMTggMjQgMTggMjQgMTYgMjYgMTYgMjYgMTQgMjIgMTQgMjIgMTAgMjAgMTAgMjAgMTIgMTggMTIgMTggMTQgMjAgMTQgMjAgMTYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xMSIgLz48cG9seWdvbiBwb2ludHM9IjE4IDMwIDE0IDMwIDE0IDMyIDIyIDMyIDIyIDMwIDIwIDMwIDIwIDI4IDE4IDI4IDE4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMiAyMCAyMiAxOCAyMCAx'@;
put 'OCAyMCAxNiAxOCAxNiAxOCAxOCAxNiAxOCAxNiAyMCAxOCAyMCAxOCAyMiAyMCAyMiAyMCAyMCAyMiAyMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiAvPjxyZWN0IHg9IjMwIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiAvPjxyZWN0IHg9IjIyIiB5PSIyMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiAvPjxwb2x5Z29uIHBvaW50cz0iMzAgMTQgMjggMTQgMjggMTYgMjYgMTYgMjYgMTgg'@;
put 'MjggMTggMjggMjAgMzAgMjAgMzAgMTggMzIgMTggMzIgMTYgMzAgMTYgMzAgMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgLz48cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xNyIgLz48cG9seWdvbiBwb2ludHM9IjE0IDI4IDE2IDI4IDE2IDI2IDE4IDI2IDE4IDI0IDE2IDI0IDE2IDIwIDE0IDIwIDE0IDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTgiIC8+JyksRi5DbHJTaGFwZVVzYj0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMTQuMjksMTEuNGExLjQ5LDEuNDksMCwwLDEsMS4yOC0uNzJoMWEyLjg5LDIuODksMCwwLDAsMi43NSwyLjA5LDMsMywwLDAsMCwwLTUuOTEsMi45LDIuOSwwLDAsMC0yLjY3LDEuODJIMTUuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42NmwtMyw0LjgzaDIuMzZabTUt'@;
put 'Mi45NEExLjM2LDEuMzYsMCwxLDEsMTgsOS44MSwxLjMyLDEuMzIsMCwwLDEsMTkuMzMsOC40NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zNC4zLDE3LjM3bC02LjExLTMuNjZhLjcuNywwLDAsMC0uNywwLC43MS43MSwwLDAsMC0u'@;
put 'MzYuNjFWMTdINi45MmEyLjMzLDIuMzMsMCwwLDEsLjMyLDEuMTcsMi40NywyLjQ3LDAsMSwxLTIuNDctMi40NiwyLjM3LDIuMzcsMCwwLDEsMS4xNS4zbC45My0xLjc2QTQuNDQsNC40NCwwLDEsMCw5LjE1LDE5aDMuNThsNC4xNyw2LjY1YTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMS42NnYx'@;
put 'LjI4YS43OS43OSwwLDAsMCwuOC43OWg0LjQ5YS43OS43OSwwLDAsMCwuOC0uNzl2LTQuNGEuNzkuNzksMCwwLDAtLjgtLjhIMjIuMzRhLjguOCwwLDAsMC0uOC44djEuMTJIMTkuODhhMS41MSwxLjUxLDAsMCwxLTEuMjgtLjcyTDE1LjA5LDE5aDEydjIuNjZhLjY5LjY5LDAsMCwwLC4zNi42'@;
put 'MS42Ny42NywwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDYuMTEtMy42NmEuNjkuNjksMCwwLDAsLjM0LS42QS43MS43MSwwLDAsMCwzNC4zLDE3LjM3Wk0yMy4xNCwyNUgyNnYyLjhIMjMuMTRabTUuMzktNC41NlYxNS41NWw0LDIuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQuNzIsMTcuMzdsLTUuNTEtMy4zMWEuNzEuNzEsMCwwLDAtMS4wNy42VjE3SDExLjc3bDMuNTItNS42YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxLjY0YTIuNDEsMi40MSwwLDAsMCwyLjI1LDEuNjEsMi40OCwyLjQ4LDAsMCww'@;
put 'LDAtNC45NSwyLjM4LDIuMzgsMCwwLDAtMi4xMywxLjM0SDE2LjU3YTMuNDksMy40OSwwLDAsMC0zLDEuNjZMOS40MSwxN0g4YTMuNDYsMy40NiwwLDEsMCwuMDgsMmg1LjY0bDQuMTUsNi42MmEzLjQ5LDMuNDksMCwwLDAsMywxLjY2aDIuNTl2LjkyaDQuNFYyMy44aC00LjR2MS40OEgyMC44'@;
put 'OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTYuMTEsMTloMTJ2Mi4yOGEuNy43LDAsMCwwLC4zNi42MS43Mi43MiwwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDUuNTItMy4zMWEuNy43LDAsMCwwLDAtMS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgLz4nKSxGLkNsclNoYXBlUmFkYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDE4YzAsNy43LTYuMywxNC0xNCwxNGMtNy43LDAtMTQtNi4zLTE0LTE0QzQsMTAuNiw5LjcsNC41LDE3LjEsNHYzLjdjLTUuNywwLjUtOS45LDUuNS05LjQsMTEuMnM1LjUsOS45LDExLjIsOS40'@;
put 'XG5cdGM1LjMtMC41LDkuNC00LjksOS40LTEwLjNoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zcy04LjMtMy43LTguMy04LjNjMC00LjIsMy4xLTcuOCw3LjMtOC4zdjQuNGMtMS44LDAuNC0zLjEsMi0zLjEsMy45XG5cdGMwLDIuMiwxLjgsNCw0LDRzNC0xLjgsNC00YzAtMS44LTEuMy0zLjQt'@;
put 'My0zLjhWMi4xQzE4LjYsMiwxOC4zLDIsMTgsMkM5LjIsMiwyLDkuMiwyLDE4czcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZIMzJ6IE0yMCwxOFxuXHRjMCwxLjEtMC45LDItMiwycy0yLTAuOS0yLTJzMC45LTIsMi0yUzIwLDE2LjksMjAsMTh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIsMThjMCw3LjctNi4yLDE0LTE0LDE0UzQsMjUuOCw0LDE4YzAtNy40LDUuNy0xMy41LDEzLjEtMTR2My43Yy01LjcsMC41LTkuOCw1LjUtOS4zLDExLjJzNS41LDkuOCwxMS4yLDkuM1xuXHRcdGM1LjMtMC41LDkuMy00LjksOS4zLTEw'@;
put 'LjJoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zUzkuNywyMi42LDkuNywxOGMwLTQuMiwzLjItNy44LDcuMy04LjJ2NC40Yy0yLjEsMC42LTMuNCwyLjctMi45LDQuOVxuXHRcdGMwLjYsMi4xLDIuNywzLjQsNC45LDIuOWMyLjEtMC42LDMuNC0yLjcsMi45LTQuOWMtMC40LTEuNC0xLjUtMi41'@;
put 'LTIuOS0yLjlWMmMtMC40LDAtMC43LDAtMS4xLDBjLTguOCwwLTE2LDcuMi0xNiwxNlxuXHRcdGMwLDguOCw3LjIsMTYsMTYsMTZzMTYtNy4yLDE2LTE2YzAsMCwwLDAsMCwwSDMyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlSW5kdWN0'@;
put 'b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjMxLDI1LjgxYy0xLjc1LDAtMy0yLjQ5LTMtNmExMi43OSwxMi43OSwwLDAsMSwxLjcyLTYuNywyLjU3LDIuNTcsMCwwLDAtMy43OSwwQTEyLjc5LDEyLjc5LDAsMCwxLDIxLDE5Ljc2YzAsMy41Ni0xLjIzLDYtMyw2cy0zLTIuNDkt'@;
put 'My02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDAsMTIuNzksMTIuNzksMCwwLDEsMS43Miw2LjdjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuODgsMTIuODgsMCwwLDEsMS43MS02LjcsMi43LDIuNywwLDAsMC0xLjg5LS44N0M3LjEs'@;
put 'MTIuMTksNS42OSwxMy43LDUsMTZsLS4yMy43SDJhMSwxLDAsMCwxLDAtMkgzLjI5YzEuMS0yLjgzLDMuMDYtNC41NSw1LjI0LTQuNTVhNC42Nyw0LjY3LDAsMCwxLDMuMTYsMS4zMiw0LjYyLDQuNjIsMCwwLDEsMy4xNS0xLjMyQTQuNjUsNC42NSwwLDAsMSwxOCwxMS41MWE0LjQzLDQuNDMs'@;
put 'MCwwLDEsNi4zMSwwLDQuNjcsNC42NywwLDAsMSwzLjE2LTEuMzJjMi4xOCwwLDQuMTQsMS43Miw1LjI0LDQuNTVIMzRhMSwxLDAsMCwxLDAsMkgzMS4yOGwtLjIzLS43Yy0uNzQtMi4zNC0yLjE1LTMuODUtMy41OC0zLjg1YTIuNywyLjcsMCwwLDAtMS44OS44NywxMi44OCwxMi44OCwwLDAs'@;
put 'MSwxLjcxLDYuN0MyNy4yOSwyMy4zMiwyNi4wNywyNS44MSwyNC4zMSwyNS44MVpNMTgsMTQuOTNhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEuNzEsMCwwLDAsMTgsMTQuOTNabTYuMzEsMGExMS43MSwxMS43'@;
put 'MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwyNC4zMSwxNC45M1ptLTEyLjYyLDBhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEu'@;
put 'NzEsMCwwLDAsMTEuNjksMTQuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlUmVzaXN0b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjQzLDI2LjM0aDBBMS40NywxLjQ3LDAsMCwxLDI4LDI1LjIyTDI0Ljg2LDEz'@;
put 'LjE1LDIxLjc0LDI1LjIyYTEuNDksMS40OSwwLDAsMS0xLjQ1LDEuMTJoMGExLjQ5LDEuNDksMCwwLDEtMS40Ni0xLjEyTDE1LjcxLDEzLjE1LDEyLjYsMjUuMjJhMS41MSwxLjUxLDAsMCwxLTIuOTEsMEw2LjU3LDEzLjE1LDUuMjIsMTguMzdIMmExLDEsMCwwLDEsMC0ySDMuNjdsMS40NS01'@;
put 'LjU5QTEuNDgsMS40OCwwLDAsMSw2LjU3LDkuNjZoMEExLjQ3LDEuNDcsMCwwLDEsOCwxMC43OGwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS40OSwxLjQ5LDAsMCwxLDEuNDUtMS4xMmgwYTEuNDksMS40OSwwLDAsMSwxLjQ2LDEuMTJsMy4xMiwxMi4wNywzLjEyLTEyLjA3YTEuNSwxLjUsMCww'@;
put 'LDEsMi45LDBsMy4xMiwxMi4wNywxLjM1LTUuMjJIMzRhMSwxLDAsMCwxLDAsMkgzMi4zM2wtMS40NSw1LjU5QTEuNDgsMS40OCwwLDAsMSwyOS40MywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVDYXBhY2l0b3I9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwxNSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwzNC4wNmExLDEsMCww'@;
put 'LDEtMS0xVjMuMTVhMSwxLDAsMSwxLDIsMFYzMy4wNkExLDEsMCwwLDEsMjEsMzQuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuNDYsMTlIM2ExLDEsMCwwLDEsMC0ySDE0LjQ2YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMTlIMjEuNTRhMSwxLDAsMCwxLDAtMkgzM2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVNxdWlkPSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCw3YTEsMSwwLDAsMS0xLTFWMy4xOWExLDEsMCwwLDEsMiwwVjZBMSwxLDAsMCwxLDE4LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRhMSwxLDAsMCwxLTEtMVYzMGExLDEsMCwwLDEsMiww'@;
put 'djNBMSwxLDAsMCwxLDE4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuNDEsMThsMS43OC0xLjc3YTEsMSwwLDEsMC0xLjQyLTEuNDJMNiwxNi41OSw0LjIzLDE0LjgxYTEsMSwwLDEsMC0xLjQyLDEuNDJMNC41OSwxOCwyLjgx'@;
put 'LDE5Ljc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUw2LDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBk'@;
put 'PSJNNiwxMy43NmwuMzYtLjM2YTMsMywwLDAsMSwyLjExLS44OCwxMSwxMSwwLDAsMSwxOSwwLDMsMywwLDAsMSwyLjEyLjg4bC4zNi4zNi4yLS4yYTEzLDEzLDAsMCwwLTI0LjQsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMCwy'@;
put 'Mi4yNGwtLjM2LjM2YTMsMywwLDAsMS0yLjEyLjg4LDExLDExLDAsMCwxLTE5LDAsMywzLDAsMCwxLTIuMTItLjg4TDYsMjIuMjRsLS4yLjJhMTMsMTMsMCwwLDAsMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQxLDE4'@;
put 'bDEuNzgtMS43N2ExLDEsMCwwLDAtMS40Mi0xLjQyTDMwLDE2LjU5bC0xLjc3LTEuNzhhMSwxLDAsMSwwLTEuNDIsMS40MkwyOC41OSwxOGwtMS43OCwxLjc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMCwxOS40MWwxLjc3LDEuNzhhMSwx'@;
put 'LDAsMCwwLDEuNDIsMCwxLDEsMCwwLDAsMC0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUhvc3RHcm91cD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuMDgsMzRoLTE0QTEuMDgsMS4wOCwwLDAsMSw2LDMzVjEy'@;
put 'YTEuMDgsMS4wOCwwLDAsMSwxLjA4LTEuMDhoMTRBMS4wOCwxLjA4LDAsMCwxLDIyLjE2LDEyVjMzQTEuMDgsMS4wOCwwLDAsMSwyMS4wOCwzNFpNOC4xNiwzMS44OEgyMFYxM0g4LjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cmVjdCB4PSIx'@;
put 'MC4wOCIgeT0iMTQuOTYiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNi4xLDI3LjgxaC0yVjloLTEyVjdoMTNhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLjA4LDIzaC0yVjVoLTExVjNoMTJhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxyZWN0IHg9IjEzLjA4IiB5PSIyNy44OCIgd2lkdGg9IjIiIGhlaWdodD0iMi4xNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4wOCwzMSBMMS4wOCwzMSBDMC41MTM0MjcxOTcsMzEuMDAxNTU2NCAwLjA0MTk2NjM3NjUsMzAuNTY1MDE4NiAwLDMwIEww'@;
put 'LDkgQzAsOC40MDM1MzI0NyAwLjQ4MzUzMjQ3LDcuOTIgMS4wOCw3LjkyIEwxNS4wOCw3LjkyIEMxNS42NzY0Njc1LDcuOTIgMTYuMTYsOC40MDM1MzI0NyAxNi4xNiw5IEwxNi4xNiwzMCBDMTYuMTE4MDMzNiwzMC41NjUwMTg2IDE1LjY0NjU3MjgsMzEuMDAxNTU2NCAxNS4wOCwzMSBaIE00'@;
put 'LjA4LDExLjk2IEw0LjA4LDEzLjk2IEwxMi4wOCwxMy45NiBMMTIuMDgsMTEuOTYgTDQuMDgsMTEuOTYgWiBNNy4wOCwyNC44OCBMNy4wOCwyNy4wNCBMOS4wOCwyNy4wNCBMOS4wOCwyNC44OCBMNy4wOCwyNC44OCBaIiAvPlxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgZD0iTTIwLjEsMjQuODEgTDE4LjEsMjQuODEgTDE4LjEsNiBMNi4xLDYgTDYuMSw0IEwxOS4xLDQgQzE5LjY1MjI4NDcsNCAyMC4xLDQuNDQ3NzE1MjUgMjAuMSw1IEwyMC4xLDI0LjgxIFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z'@;
put 'IiBkPSJNMjQuMDgsMjAgTDIyLjA4LDIwIEwyMi4wOCwyIEwxMS4wOCwyIEwxMS4wOCwwIEwyMy4wOCwwIEMyMy42MzIyODQ3LDAgMjQuMDgsMC40NDc3MTUyNSAyNC4wOCwxIEwyNC4wOCwyMCBaIiAvPicpLEYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNNi4wNiwzMGExLDEsMCwwLDEtMS0xVjhoLTJhMSwxLDAsMCwxLDAtMmg0VjI5QTEsMSwwLDAsMSw2LjA2LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMwLjA2LDI3aC0yNVY5aDI1YTMsMywwLDAsMSwzLDNWMjRB'@;
put 'MywzLDAsMCwxLDMwLjA2LDI3Wm0tMjMtMmgyM2ExLDEsMCwwLDAsMS0xVjEyYTEsMSwwLDAsMC0xLTFoLTIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjIuMDYiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOS4wNiwyMmgtOFYyMGg3VjE0aDJ2'@;
put 'N0ExLDEsMCwwLDEsMTkuMDYsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVOb2RlR3JvdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDIxLjU4bC00Ljk0LTIuODNWMTMuMDlhMSwxLDAsMCwwLS41MS0uODdM'@;
put 'MjIuNjQsOS4xYTEsMSwwLDAsMC0xLDBMMTYuMiwxMi4yMmExLDEsMCwwLDAtLjUxLjg3djUuNjZsLTQuOTQsMi44M2ExLDEsMCwwLDAtLjUuODd2Ni4yNGExLDEsMCwwLDAsLjUuODZsNS40NSwzLjEyYTEsMSwwLDAsMCwxLDBsNC45NS0yLjgzLDQuOTUsMi44M2ExLDEsMCwwLDAsLjUuMTQs'@;
put 'MSwxLDAsMCwwLC40OS0uMTRsNS40NS0zLjEyYTEsMSwwLDAsMCwuNS0uODZWMjIuNDVBMSwxLDAsMCwwLDMzLjUzLDIxLjU4Wk0yMi4xNCwxMS4xMmw0LjQ1LDIuNTVWMTlsLTQuNDYsMi41Ni00LjQ0LTIuNlYxMy42N1pNMTYuNjksMzAuNjVsLTQuNDQtMi41NFYyM2w0LjY4LTIuNjgsNC40'@;
put 'LDIuNTdWMjhaTTMyLDI4LjExbC00LjQ0LDIuNTRMMjIuOTMsMjhWMjIuOTNsNC40Ni0yLjU3TDMyLDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcsMjcuNDNhMSwxLDAsMCwxLTEtMVYxOS45QTEsMSwwLDAsMSw2LjUsMTls'@;
put 'NC45NS0yLjgzVjEwLjU0YTEsMSwwLDAsMSwuNS0uODdsNS4yMS0zYTEsMSwwLDAsMSwxLjM3LjM3LDEsMSwwLDAsMS0uMzgsMS4zN2wtNC43LDIuNjh2NS42NmExLDEsMCwwLDEtLjUxLjg3TDgsMjAuNDh2NS45NUExLDEsMCwwLDEsNywyNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zLDI1LjA1YTEsMSwwLDAsMS0xLTFWMTcuNTNhMSwxLDAsMCwxLC41LS44Nmw1LTIuODRWOC4xN0ExLDEsMCwwLDEsOCw3LjMxbDUuMjUtM2ExLDEsMCwwLDEsMSwxLjc0TDkuNDUsOC43NXY1LjY2YTEsMSwwLDAsMS0uNTEuODdM'@;
put 'NCwxOC4xMXY1Ljk0QTEsMSwwLDAsMSwzLDI1LjA1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUsMzQuMjksMiwyOS4zOVYxOS41OGw4LjUtNC45LDguNSw0Ljl2'@;
put 'OS44MVpNNCwyOC4yMywxMC41LDMyLDE3LDI4LjIzVjIwLjc0TDEwLjUsMTcsNCwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yNS41LDM0LjI5LDE3LDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk0xOSwy'@;
put 'OC4yMywyNS41LDMyLDMyLDI4LjIzVjIwLjc0TDI1LjUsMTcsMTksMjAuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTgsMjEuMzJsLTguNS00LjlWNi42MUwxOCwxLjcxbDguNSw0Ljl2OS44MVptLTYuNS02LjA2TDE4LDE5'@;
put 'bDYuNS0zLjc1VjcuNzdMMTgsNCwxMS41LDcuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVOYW1lc3BhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDQuMThhMSwxLDAsMSwwLTEsMS43M2w2LDMuNDdWMjYuNjJs'@;
put 'LTYsMy40N2ExLDEsMCwwLDAtLjM3LDEuMzYsMSwxLDAsMCwwLDEuMzcuMzdsNy00LjA1VjguMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNOS42OCwyOS45LDQsMjYuNjJWOS4zOEw5LjY4LDYuMWExLDEsMCwxLDAtMS0xLjcz'@;
put 'TDIsOC4yM1YyNy43N2w2LjY4LDMuODZhMSwxLDAsMCwwLDEuMzctLjM3QTEsMSwwLDAsMCw5LjY4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTAsMTJWMjRhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjEy'@;
put 'YTIsMiwwLDAsMC0yLTJIMTJBMiwyLDAsMCwwLDEwLDEyWm03LDB2NUgxMlYxMlptLTUsN2g1djVIMTJabTcsNVYxOWg1djVabTUtN0gxOVYxMmg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZT0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMzAuNjYsNywyNC4zM1YxMS42N0wxOCw1LjM0bDExLDYuMzNWMjQuMzNaTTksMjMuMThsOSw1LjE3LDktNS4xN1YxMi44MkwxOCw3LjY1LDksMTIuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLEYuQ2xyU2hhcGVQb2Q9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDMySDEwYTYsNiwwLDAsMS02LTZWMTBhNiw2LDAsMCwxLDYtNkgyNmE2LDYsMCwwLDEsNiw2VjI2QTYsNiwwLDAsMSwyNiwzMlpNMTAsNmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjZhNCw0LDAsMCwwLDQtNFYxMGE0LDQs'@;
put 'MCwwLDAtNC00WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI2LjU2LDE1SDE1LjQ0QTEuNDMsMS40MywwLDAsMCwxNCwxNi40NHY4LjEyQTEuNDMsMS40MywwLDAsMCwxNS40NCwyNkgyNi41NkExLjQzLDEuNDMsMCwwLDAsMjgs'@;
put 'MjQuNTZWMTYuNDRBMS40MywxLjQzLDAsMCwwLDI2LjU2LDE1Wk0yNiwyNEgxNlYxN0gyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMi40LDE5SDEwVjEySDIwdjEuNGgydi0yQTEuNDMsMS40MywwLDAsMCwyMC41NiwxMEg5'@;
put 'LjQ0QTEuNDMsMS40MywwLDAsMCw4LDExLjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDkuNDQsMjFoM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksRi5DbHJDb250cm9sTHVuPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNOCwyNC41OWEy'@;
put 'NS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4czkuMS0uNDUs'@;
put 'MTItMS44OHY1LjExYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlY4aDBzMCwwLDAtLjA3YzAtMy4zNS04LjgtNC4yNS0xNC00LjI1UzQsNC41'@;
put 'OCw0LDcuOTN2MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWk0xOCw1LjY4YzcuMTUsMCwxMS41MywxLjQ0LDEyLDIuMjUtLjQ2LjgxLTQuODQsMi4yNS0xMiwyLjI1UzYuMzEsOC42OSw2LDhDNi4zMSw3LjE4LDEwLjcx'@;
put 'LDUuNjgsMTgsNS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRs'@;
put 'LTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGgg'@;
put 'ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0xOCwxNy41NEEzNC44'@;
put 'MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjEzLjIyYTcuMzIsNy4zMiwwLDAsMS0yLC4yOHYxLjkxQzI5LjA5LDE2LjIzLDI1LDE3LjU0LDE4LDE3LjU0WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhhNDcuNjYsNDcuNjYsMCwwLDAsNy4wOS0uNTIsNy40NSw3LjQ1LDAsMCwxLTEuNTEtMS44LDQ3LjQsNDcuNCwwLDAsMS01'@;
put 'LjU4LjMyQzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjY2LDAsMy4xNi4wOCw0LjUxLjIxYTcuNTYsNy41NiwwLDAsMSwuMjktMmMtMS43LS4xNy0zLjM4LS4yNC00LjgtLjI0LTUuMiwwLTE0LC45LTE0LDQuMjV2MTkuNmMwLDIsMy4xNywzLjE0'@;
put 'LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTgsMjQuNTlhMjUuNSwyNS41LDAsMCwwLDIuNzUuNTlsMS4yMS0xLjQxYTI0LjEzLDI0LjEzLDAsMCwxLTQtLjgzWiIvPjxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40'@;
put 'MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRsLTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5c'@;
put 'biAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgs'@;
put 'MTIsMS44OGguNTlhMy41OSwzLjU5LDAsMCwxLC4zMi0ySDE4QzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjIyLDAsMi4zNS4wNSwzLjQxLjEybDEuMS0xLjkxYy0xLjYtLjE1LTMuMTctLjIxLTQuNTEtLjIxLTUuMiwwLTE0LC45LTE0LDQuMjV2'@;
put 'MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTgsMTYuMzNWMThhNDAuODYsNDAu'@;
put 'ODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTUuNEgzMGMtLjkxLjgyLTUsMi4xMy0xMiwyLjEzQTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl'@;
put 'ZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzIuMDks'@;
put 'MjFIMzJWMTcuMzJjLTEuOSwyLjkzLTEwLjQ2LDMuMy0xNCwzLjNBNDIuNDMsNDIuNDMsMCwwLDEsOCwxOS41NlYxNy44OEE0MC41OSw0MC41OSwwLDAsMCwxOCwxOWM1LDAsMTMuMi0uODIsMTQtMy44MlYxMC43MmMtMi4yMSwzLjM2LTEwLjQ5LDMuNDYtMTQsMy40NkE0Mi4xMiw0Mi4xMiww'@;
put 'LDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRjNSwwLDEzLjI4LS44MywxNC0zLjg4VjcuODNoMGMtLjE5LTMuMjctOC44NC00LjE1LTE0LTQuMTVTNC4yMSw0LjU2LDQsNy44M0g0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3'@;
put 'YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45'@;
put 'MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgydi0yYTcuMzQsNy4z'@;
put 'NCwwLDAsMS00LjEyLDAsMzkuNDcsMzkuNDcsMCwwLDEtOS44OCwxQTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNCw0Ny43Niw0Ny43NiwwLDAsMCw3LjA5LS41MkE3LjQ1LDcuNDUsMCwwLDEsMjIuOCwzLjkyYy0xLjctLjE3LTMuMzgtLjI0'@;
put 'LTQuOC0uMjQtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4y'@;
put 'NCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+'@;
put 'XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4'@;
put 'LDE5YzQuODUsMCwxMi44LS43OSwxMy45MS0zLjYySDIyLjIzYTMuNjgsMy42OCwwLDAsMS0yLjczLTEuMjNIMThBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0aC41OWEzLjYxLDMuNjEsMCwwLDEsLjQ2LTIuMjlsMy40Ni02Yy0xLjYtLjE1'@;
put 'LTMuMTctLjIxLTQuNTEtLjIxLTUuMTQsMC0xMy43OS44OC0xNCw0LjE1SDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwz'@;
put 'LjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlTWVkaWFDaGFuZ2VyPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAs'@;
put 'MCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wk02LDMwVjZIMzBWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBo'@;
put 'ZWlnaHQ9IjIiLz48cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMjcuMjIsMTBIMjB2NGEuOC44LDAsMSwwLDEuNTksMFYxMS42aDUuNjNh'@;
put 'LjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVj'@;
put 'dCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9'@;
put 'IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4'@;
put 'LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4'@;
put 'LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMCwxNGEuOC44LDAsMSwwLDEuNTksMFYxMS42SDI1QTcuNzQsNy43NCwwLDAsMSwyMy42NiwxMEgyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgPHBh'@;
put 'dGggZD0iTTMwLDEzLjVoMFYzMEg2VjZIMjIuNVY2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3'@;
put 'LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'Mi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTQiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC02LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9Ijgu'@;
put 'MTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjYiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDZWNkgyMS4yN2wxLjE4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwy'@;
put 'LTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFM'@;
put 'MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAs'@;
put 'MiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4Ljgx'@;
put 'VjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWm0wLTZIMjBWMTBoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cblxuICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNC0xLjE2VjE0'@;
put 'SDIwVjEwaDMuNjZBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmE3LjM3LDcuMzcsMCwwLDEsLjI4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJB'@;
put 'Ny4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRo'@;
put 'IGQ9Ik0yMi4yMywxNS40YTMuNjgsMy42OCwwLDAsMS0zLjE4LTUuNTFMMjIuNDUsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0xNywyOEg4'@;
put 'LjgxVjI2SDE3Wm0wLTRIOC44MVYyMkgxN1ptMC00SDguODFWMThIMTdabTAtNEg4LjgxVjE0SDE3Wm0wLTRIOC44MVYxMEgxN1pNMjIsMjRIMjBWMjJoMlptMC00SDIwVjE4aDJabTQsNEgyNFYyMmgyWm0wLTRIMjRWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLEYuQ2xyU2hhcGVUYXBlRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww'@;
put 'LDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCwyOFY4SDMyVjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEzLjMzLDEzLjM1YTQuNTIsNC41MiwwLDEsMCw0LjUzLDQuNTJBNC41Myw0LjUzLDAsMCwwLDEzLjMzLDEzLjM1'@;
put 'Wm0wLDcuNDRhMi45MiwyLjkyLDAsMSwxLDIuOTMtMi45MkEyLjkyLDIuOTIsMCwwLDEsMTMuMzMsMjAuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNjIsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTIsNC41MkE0LjUz'@;
put 'LDQuNTMsMCwwLDAsMjMuNjIsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45Mi0yLjkyQTIuOTIsMi45MiwwLDAsMSwyMy42MiwyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik02LDExVjIzLjU1SDhWMTJIMjku'@;
put 'MzRWMTBIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG5cbiAgPHBhdGggZD0iTTguODEsMTcuODdhNC41Myw0LjUzLDAsMSwwLDQuNTItNC41MkE0LjUzLDQuNTMsMCwwLDAsOC44MSwxNy44N1ptNy40NSwwQTIuOTMsMi45'@;
put 'MywwLDEsMSwxMy4zMywxNSwyLjkzLDIuOTMsMCwwLDEsMTYuMjYsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE5LjEsMTcuODdhNC41Miw0LjUyLDAsMSwwLDQuNTItNC41MkE0LjUzLDQu'@;
put 'NTMsMCwwLDAsMTkuMSwxNy44N1ptNy40NCwwQTIuOTIsMi45MiwwLDEsMSwyMy42MiwxNSwyLjkyLDIuOTIsMCwwLDEsMjYuNTQsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLDEzLjIy'@;
put 'VjI4SDRWOEgyMi43OGE3LjM3LDcuMzcsMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjY1LDcuNjUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyNS41MWE3LjY2LDcuNjYsMCwwLDEtMS44NS0ySDdBMSwxLDAsMCwwLDYsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx'@;
put 'LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik03LDEwYTEsMSwwLDAsMC0xLDFW'@;
put 'MjMuNTVIOFYxMkgxOC41N0EzLjcsMy43LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMjhINFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhW'@;
put 'MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTIyLjA5LDE1LjM5YTMuNjUsMy42NSwwLDAsMS0xLjgtLjU1LDQuNTEsNC41MSww'@;
put 'LDEsMCw3LjExLjU2SDI1LjE3YTIuOTIsMi45MiwwLDEsMS0zLjA4LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywx'@;
put 'M0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMy'@;
put 'LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMCwyNEg2VjEySDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1'@;
put 'LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIzLjc5LDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDIzLjc5LDIzWm0wLTdhMiwyLDAs'@;
put 'MSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG5cbiAgPHBhdGggZD0iTTEyLjIxLDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDEyLjIxLDIzWm0wLTdhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTIuMjEsMTZa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxMy41VjI0SDZWMTJIMjUuNTFhNy40OSw3LjQ5LDAsMCwxLTMtNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDksNy40'@;
put 'OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHIt'@;
put 'aS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik03LjIsMThhNSw1LDAsMSwwLDUtNUE1LDUsMCwwLDAsNy4yLDE4Wm03LDBhMiwyLDAsMSwxLTItMkEyLDIsMCwwLDEsMTQuMjIsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4g'@;
put 'IDxwYXRoIGQ9Ik0xOC43OCwxOGE1LDUsMCwxLDAsOS4yNy0yLjZIMjIuMjNhMy43MSwzLjcxLDAsMCwxLTIuMTctLjcxQTUsNSwwLDAsMCwxOC43OCwxOFptNS0yYTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMFYyNEg2VjEySDE4LjU3YTMuNjUsMy42NSwwLDAsMSwuNDgtMi4xMUwyMS4yOSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlQW5pbWF0aW9uPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC4xNiwzMS43MWE0LjQsNC40LDAsMCwx'@;
put 'LTQuNjQtMUE0LjM0LDQuMzQsMCwwLDEsNC4yMywyNy42YTQuNDEsNC40MSwwLDAsMSwuMTgtMS4yLDExLjYxLDExLjYxLDAsMCwxLTEtMi41Niw2LjQsNi40LDAsMCwwLDkuMzMsOC42M0ExMS41NSwxMS41NSwwLDAsMSwxMC4xNiwzMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MSwyNy42OGE3LjYxLDcuNjEsMCwwLDEtOS4wOC0xLjI2LDcuNTgsNy41OCwwLDAsMS0xLjI3LTkuMDYsMTQuMjYsMTQuMjYsMCwwLDEtLjM3LTIuODUsOS41OCw5LjU4LDAsMCwwLC4yMiwxMy4zMyw5LjYzLDkuNjMsMCwwLDAs'@;
put 'MTMuMzUuMjJBMTQuNDYsMTQuNDYsMCwwLDEsMTguNDEsMjcuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNjYsMjYuMjFhMTIuMSwxMi4xLDAsMSwxLDguNTctMy41NGgwQTEyLjExLDEyLjExLDAsMCwxLDIxLjY2LDI2'@;
put 'LjIxWk0yMS42Niw0QTEwLjExLDEwLjExLDAsMCwwLDExLjU0LDE0LjExYTEwLDEwLDAsMCwwLDMsNy4xNCwxMC4xMiwxMC4xMiwwLDAsMCwxNC4zMSwwQTEwLjExLDEwLjExLDAsMCwwLDIxLjY2LDRabTcuODYsMThoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIi8+XG4gIFxuICA8cGF0aCBkPSJNMy41LDIzLjc3YTYuNDEsNi40MSwwLDAsMCw5LjMzLDguNjdBMTEuNjUsMTEuNjUsMCwwLDEsMy41LDIzLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy42OCwxNC41M2E5LjYsOS42LDAs'@;
put 'MCwwLDEzLjQsMTMuN0ExNC4xMSwxNC4xMSwwLDAsMSw3LjY4LDE0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNzgsMkExMi4xMiwxMi4xMiwwLDEsMSw5LjY2LDE0LjE1LDEyLjEyLDEyLjEyLDAsMCwxLDIxLjc4LDIiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgJyksRi5DbHJTaGFwZUNpQ2Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjUzLDE5LjgxYTcuNDUsNy40NSwwLDAsMS0xLjY1LS4xOCwxMC40OCwxMC40OCwwLDAsMSwuNzIsMi4xM2MuMywwLC42MSwwLC45'@;
put 'MywwYTkuNTIsOS41MiwwLDAsMCwzLS40OWwtLjkzLTEuODFBNy42Nyw3LjY3LDAsMCwxLDIzLjUzLDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjM2LDE3Ljg3LDE4LDE3LjQ5YTcuNCw3LjQsMCwwLDEtMi4yLTUu'@;
put 'OTIsNy4zMSw3LjMxLDAsMCwxLDEuNTQtNEwxNy4yNiw5QTEsMSwwLDAsMCwxOC4xNywxMGguMDlhMSwxLDAsMCwwLDEtLjkxTDE5LjYsNWExLDEsMCwwLDAtLjI5LS43OUExLDEsMCwwLDAsMTguNTIsNGwtNC4wOS4zNWExLDEsMCwwLDAsLjE3LDJsMS4yOS0uMTFhOS40NSw5LjQ1LDAsMCww'@;
put 'LTIuMDUsNS4zMiw5LjI4LDkuMjgsMCwwLDAsMi42Nyw3LjI2bC4zMS4zN2E3LjMzLDcuMzMsMCwwLDEsMi4wNiw0LjkxLDcuMzksNy4zOSwwLDAsMS0uMjYsMi40N2wxLjguOTFhOC43Niw4Ljc2LDAsMCwwLC40NS0zLjUxQTkuMjgsOS4yOCwwLDAsMCwxOC4zNiwxNy44N1oiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi40LDE3LjkxLDMxLjE5LDE4QTkuNjUsOS42NSwwLDAsMCwyMy41MywyLjQ1YTkuMzMsOS4zMywwLDAsMC0zLC40OWwuOTEsMS44YTcuNjcsNy42NywwLDAsMSw5Ljc2LDcuMzksNy41OCw3LjU4LDAs'@;
put 'MCwxLTEuNjUsNC43MmwuMS0xLjU0YTEsMSwwLDEsMC0yLS4xM2wtLjI4LDQuMDhhMSwxLDAsMCwwLC4zMS43OC45NC45NCwwLDAsMCwuNjkuMjhoLjFsNC4wOC0uNDJhMSwxLDAsMCwwLC45LTEuMUExLDEsMCwwLDAsMzIuNCwxNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik00LjA3LDIwLjQ0aC4wOGw0LjA5LS4zNWExLDEsMCwxLDAtLjE3LTJsLTEuMzkuMTJhNy42Myw3LjYzLDAsMCwxLDQuNTItMS40OSw3LjksNy45LDAsMCwxLDEuNjMuMTgsMTAuMjMsMTAuMjMsMCwwLDEtLjcxLTIuMTNjLS4zLDAtLjYxLDAt'@;
put 'LjkyLDBhOS42Niw5LjY2LDAsMCwwLTUuOSwybC4xMi0xLjMxYTEsMSwwLDAsMC0uOTItMS4wOCwxLDEsMCwwLDAtMS4wOC45MWwtLjM1LDQuMDhhMSwxLDAsMCwwLDEsMS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC40'@;
put 'MiwyOC4yM2wtNC4wOS4yN2ExLDEsMCwwLDAsLjEzLDJMMTYsMzAuMzlhNy43MSw3LjcxLDAsMCwxLTEyLjU0LTYsNy42LDcuNiwwLDAsMSwuMjktMkwyLDIxLjQ2YTkuNTksOS41OSwwLDAsMC0uNDcsMi45NUE5LjcsOS43LDAsMCwwLDE3LjE5LDMybC0uMTIsMS4xOGExLDEsMCwwLDAsLjg5'@;
put 'LDEuMWguMTFhMSwxLDAsMCwwLDEtLjlsLjQyLTQuMDZhMSwxLDAsMCwwLTEuMDYtMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxGLkNsclNoYXBlRmlsZVNoYXJlMj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEg3LjgzQTEuODks'@;
put 'MS44OSwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OSwxLjg5LDAsMCwwLDcuODMsMzJIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjA5VjlaTTI0LDUuNzgsMjguMiwxMEgyNFpNOCwzMFY2SDIydjZoNlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+'@;
put 'XG4gIDxwYXRoIGQ9Ik0yMiwyMS44MWEyLjExLDIuMTEsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2di0uNDRsNS42Ni0yLjY1YTIuMDgsMi4wOCwwLDEsMCwuMDYtMi45NGgwYTIuMTQsMi4xNCwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVs'@;
put 'LjA4LS4wOCw1LjY3LDIuNjZ2LjNBMi4wOSwyLjA5LDAsMSwwLDIyLDIxLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0yNSw0LjA2SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNlYzMC4xNWExLjg5LDEuODksMCwwLDAs'@;
put 'MS44MywxLjkxSDI4LjE3QTEuODcsMS44NywwLDAsMCwzMCwzMC4xNVY5Wk0yMiwyNmEyLjA5LDIuMDksMCwwLDEtMi4xLTIuMDh2LS4zTDE0LjI3LDIxbC0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMTQsMi4xNCwwLDAsMSwuNjQtMS40OGgwYTIu'@;
put 'MDgsMi4wOCwwLDEsMS0uMDYsMi45NGwtNS42NiwyLjY1di40NGw1LjcyLDIuNjZBMi4xMSwyLjExLDAsMCwxLDIyLDIxLjgxbDAsMEEyLjA5LDIuMDksMCwwLDEsMjIsMjZabTItMTZWNS44NGw0LjIsNC4yMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxG'@;
put 'LlRlY2hub2xvZ3lTaGFwZXM9eyJydWxlci1wZW5jaWwiOkYuQ2xyU2hhcGVSdWxlclBlbmNpbCwicGhvbmUtaGFuZHNldCI6Ri5DbHJTaGFwZVBob25lSGFuZHNldCwibm8td2lmaSI6Ri5DbHJTaGFwZU5vV2lmaSxpbnN0YWxsOkYuQ2xyU2hhcGVJbnN0YWxsLHVuaW5zdGFsbDpGLkNsclNo'@;
put 'YXBlVW5pbnN0YWxsLGxheWVyczpGLkNsclNoYXBlTGF5ZXJzLGJsb2NrOkYuQ2xyU2hhcGVCbG9jaywiYmxvY2tzLWdyb3VwIjpGLkNsclNoYXBlQmxvY2tzR3JvdXAsYnVuZGxlOkYuQ2xyU2hhcGVCdW5kbGUsd2lmaTpGLkNsclNoYXBlV2lmaSwicmFjay1zZXJ2ZXIiOkYuQ2xyU2hhcGVS'@;
put 'YWNrU2VydmVyLCJoYXJkLWRpc2siOkYuQ2xyU2hhcGVIYXJkRGlzaywiYmFja3VwLXJlc3RvcmUiOkYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlLGJhY2t1cDpGLkNsclNoYXBlQmFja3VwLGRldmljZXM6Ri5DbHJTaGFwZURldmljZXMsa2V5Ym9hcmQ6Ri5DbHJTaGFwZUtleWJvYXJkLG1vdXNl'@;
put 'OkYuQ2xyU2hhcGVNb3VzZSxkYXNoYm9hcmQ6Ri5DbHJTaGFwZURhc2hib2FyZCxob3N0OkYuQ2xyU2hhcGVIb3N0LHN0b3JhZ2U6Ri5DbHJTaGFwZVN0b3JhZ2UsY2x1c3RlcjpGLkNsclNoYXBlQ2x1c3RlcixhcHBsaWNhdGlvbnM6Ri5DbHJTaGFwZUFwcGxpY2F0aW9ucyxidWlsZGluZzpG'@;
put 'LkNsclNoYXBlQnVpbGRpbmcsY3B1OkYuQ2xyU2hhcGVDUFUsbWVtb3J5OkYuQ2xyU2hhcGVNZW1vcnksImRhdGEtY2x1c3RlciI6Ri5DbHJTaGFwZURhdGFDbHVzdGVyLCJyZXNvdXJjZS1wb29sIjpGLkNsclNoYXBlUmVzb3VyY2VQb29sLHNoaWVsZDpGLkNsclNoYXBlU2hpZWxkLCJzaGll'@;
put 'bGQtY2hlY2siOkYuQ2xyU2hhcGVTaGllbGRDaGVjaywic2hpZWxkLXgiOkYuQ2xyU2hhcGVTaGllbGRYLGltcG9ydDpGLkNsclNoYXBlSW1wb3J0LGV4cG9ydDpGLkNsclNoYXBlRXhwb3J0LCJ1cGxvYWQtY2xvdWQiOkYuQ2xyU2hhcGVVcGxvYWRDbG91ZCwiZG93bmxvYWQtY2xvdWQiOkYu'@;
put 'Q2xyU2hhcGVEb3dubG9hZENsb3VkLHBsdWdpbjpGLkNsclNoYXBlUGx1Z2luLGZsb3BweTpGLkNsclNoYXBlRmxvcHB5LGNvbXB1dGVyOkYuQ2xyU2hhcGVDb21wdXRlcixkaXNwbGF5OkYuQ2xyU2hhcGVEaXNwbGF5LHRlcm1pbmFsOkYuQ2xyU2hhcGVUZXJtaW5hbCxjb2RlOkYuQ2xyU2hh'@;
put 'cGVDb2RlLGFwcGxpY2F0aW9uOkYuQ2xyU2hhcGVBcHBsaWNhdGlvbixiYXR0ZXJ5OkYuQ2xyU2hhcGVCYXR0ZXJ5LG1vYmlsZTpGLkNsclNoYXBlTW9iaWxlLHRhYmxldDpGLkNsclNoYXBlVGFibGV0LCJuZXR3b3JrLWdsb2JlIjpGLkNsclNoYXBlTmV0d29ya0dsb2JlLCJuZXR3b3JrLXNl'@;
put 'dHRpbmdzIjpGLkNsclNoYXBlTmV0d29ya1NldHRpbmdzLCJuZXR3b3JrLXN3aXRjaCI6Ri5DbHJTaGFwZU5ldHdvcmtTd2l0Y2gscm91dGVyOkYuQ2xyU2hhcGVSb3V0ZXIsdm06Ri5DbHJTaGFwZVZNLCJ2bXctYXBwIjpGLkNsclNoYXBlVk1XQXBwLGNlcnRpZmljYXRlOkYuQ2xyU2hhcGVD'@;
put 'ZXJ0aWZpY2F0ZSxhcmNoaXZlOkYuQ2xyU2hhcGVBcmNoaXZlLHVuYXJjaGl2ZTpGLkNsclNoYXBlVW5hcmNoaXZlLGNvbm5lY3Q6Ri5DbHJTaGFwZUNvbm5lY3QsZGlzY29ubmVjdDpGLkNsclNoYXBlRGlzY29ubmVjdCxsaW5rOkYuQ2xyU2hhcGVMaW5rLHVubGluazpGLkNsclNoYXBlVW5s'@;
put 'aW5rLCJjbG91ZC1uZXR3b3JrIjpGLkNsclNoYXBlQ2xvdWROZXR3b3JrLCJjbG91ZC1zY2FsZSI6Ri5DbHJTaGFwZUNsb3VkU2NhbGUsImNsb3VkLXRyYWZmaWMiOkYuQ2xyU2hhcGVDbG91ZFRyYWZmaWMsImNvbnRyb2wtbHVuIjpGLkNsckNvbnRyb2xMdW4sZGVwbG95OkYuQ2xyU2hhcGVE'@;
put 'ZXBsb3ksaGVsaXg6Ri5DbHJTaGFwZUhlbGl4LGZsYXNrOkYuQ2xyU2hhcGVGbGFzayxhZG1pbmlzdHJhdG9yOkYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yLCJoYXJkLWRyaXZlIjpGLkNsclNoYXBlSGFyZERyaXZlLCJoYXJkLWRyaXZlLWRpc2tzIjpGLkNsclNoYXBlSGFyZERyaXZlRGlza3Ms'@;
put 'bnZtZTpGLkNsclNoYXBlTlZNZSxzc2Q6Ri5DbHJTaGFwZVNTRCxibHVldG9vdGg6Ri5DbHJTaGFwZUJsdWV0b290aCwiYmx1ZXRvb3RoLW9mZiI6Ri5DbHJTaGFwZUJsdWV0b290aE9mZiwicHJvY2Vzcy1vbi12bSI6Ri5DbHJTaGFwZVByb2Nlc3NPblZNLCJhc3NpZ24tdXNlciI6Ri5DbHJT'@;
put 'aGFwZUFzc2lnblVzZXIsYXRvbTpGLkNsclNoYXBlQXRvbSwiYmFyLWNvZGUiOkYuQ2xyU2hhcGVCYXJDb2RlLCJjZC1kdmQiOkYuQ2xyU2hhcGVDZER2ZCxjb250YWluZXI6Ri5DbHJTaGFwZUNvbnRhaW5lciwiY29udGFpbmVyLXZvbHVtZSI6Ri5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZSwi'@;
put 'ZmlsZS1zaGFyZSI6Ri5DbHJTaGFwZUZpbGVTaGFyZSwicXItY29kZSI6Ri5DbHJTaGFwZVFyQ29kZSx1c2I6Ri5DbHJTaGFwZVVzYixyYWRhcjpGLkNsclNoYXBlUmFkYXIsY2FwYWNpdG9yOkYuQ2xyU2hhcGVDYXBhY2l0b3Isc3F1aWQ6Ri5DbHJTaGFwZVNxdWlkLGluZHVjdG9yOkYuQ2xy'@;
put 'U2hhcGVJbmR1Y3RvcixyZXNpc3RvcjpGLkNsclNoYXBlUmVzaXN0b3IsImhvc3QtZ3JvdXAiOkYuQ2xyU2hhcGVIb3N0R3JvdXAsInN0b3JhZ2UtYWRhcHRlciI6Ri5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyLCJub2RlLWdyb3VwIjpGLkNsclNoYXBlTm9kZUdyb3VwLG5vZGVzOkYuQ2xyU2hh'@;
put 'cGVOb2RlcyxuYW1lc3BhY2U6Ri5DbHJTaGFwZU5hbWVzcGFjZSxub2RlOkYuQ2xyU2hhcGVOb2RlLHBvZDpGLkNsclNoYXBlUG9kLCJtZWRpYS1jaGFuZ2VyIjpGLkNsclNoYXBlTWVkaWFDaGFuZ2VyLCJ0YXBlLWRyaXZlIjpGLkNsclNoYXBlVGFwZURyaXZlLGFuaW1hdGlvbjpGLkNsclNo'@;
put 'YXBlQW5pbWF0aW9uLCJjaS1jZCI6Ri5DbHJTaGFwZUNpQ2QsImZpbGUtc2hhcmUtMiI6Ri5DbHJTaGFwZUZpbGVTaGFyZTJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInNlcnZlciIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXMu'@;
put 'aG9zdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImNvbW1hbmQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLnRlcm1pbmFsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywibW9iaWxlLXBob25l'@;
put 'IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5tb2JpbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJsaWNlbnNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5jZXJ0aWZpY2F0ZSkpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImRpc2Nvbm5lY3RlZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXNbIm5vLXdpZmkiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInJlY2VpdmVyIiwoMCx4LmRl'@;
put 'c2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicGhvbmUtaGFuZHNldCJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZGVzaWduIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicnVsZXItcGVuY2lsIl0pKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJkbmEiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLmhlbGl4KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZm9sZGVyLXNoYXJlIiwoMCx4LmRlc2NyaXB0'@;
put 'b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1siZmlsZS1zaGFyZSJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGVjaG5vbG9neVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50'@;
put 'cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuVGV4dEVkaXRTaGFwZXM9Ri5DbHJTaGFwZVN1cGVyc2NyaXB0PUYuQ2xyU2hhcGVTdWJzY3JpcHQ9Ri5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Ri5DbHJTaGFwZUluZGVudD1GLkNsclNoYXBlT3V0ZGVudD1GLkNsclNoYXBlSGlnaGxpZ2h0'@;
put 'ZXI9Ri5DbHJTaGFwZVRleHRDb2xvcj1GLkNsclNoYXBlTGFuZ3VhZ2U9Ri5DbHJTaGFwZUFsaWduVG9wPUYuQ2xyU2hhcGVBbGlnbk1pZGRsZT1GLkNsclNoYXBlQWxpZ25Cb3R0b209Ri5DbHJTaGFwZVVuZGVybGluZT1GLkNsclNoYXBlVGV4dD1GLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9'@;
put 'Ri5DbHJTaGFwZUJsb2NrUXVvdGU9Ri5DbHJTaGFwZVBhaW50Um9sbGVyPUYuQ2xyU2hhcGVOdW1iZXJMaXN0PUYuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PUYuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1GLkNsclNoYXBlSXRhbGljPUYuQ2xyU2hhcGVBbGlnblJpZ2h0PUYuQ2xyU2hhcGVBbGlnbkxl'@;
put 'ZnQ9Ri5DbHJTaGFwZUFsaWduQ2VudGVyPUYuQ2xyU2hhcGVGb250U2l6ZT1GLkNsclNoYXBlQ2hlY2tib3hMaXN0PUYuQ2xyU2hhcGVDZW50ZXJUZXh0PUYuQ2xyU2hhcGVCdWxsZXRMaXN0PUYuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2Vu'@;
put 'ZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVCb2xkPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi40MywxNy41NGE0LjY3LDQuNjcsMCwwLDAsMi44LTQuMzd2LS4wNmE0LjQzLDQuNDMsMCwwLDAtMS4z'@;
put 'MS0zLjI1LDcuMDksNy4wOSwwLDAsMC01LjEzLTEuNzNoLTdBMS43MSwxLjcxLDAsMCwwLDEwLDkuODZWMjZhMS43MiwxLjcyLDAsMCwwLDEuNzQsMS43NGg3LjMzYzQuMzcsMCw3LjI1LTEuODgsNy4yNS01LjM4VjIyLjNDMjYuMzIsMTkuNjQsMjQuNzMsMTguMzIsMjIuNDMsMTcuNTRaTTEz'@;
put 'LjY4LDExLjRoNC41NGMyLDAsMy4xNS44OSwzLjE1LDIuMzN2LjA2YzAsMS42OC0xLjM2LDIuNDktMy4zOCwyLjQ5SDEzLjY4Wk0yMi4zNywyMmMwLDEuNTktMS4zMSwyLjQzLTMuNDYsMi40M0gxMy42OFYxOS42Mmg1YzIuNDksMCwzLjY5Ljg4LDMuNjksMi4zN1oiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVCdWxsZXRMaXN0PSgwLHguY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjUuMjEiIGN5PSI5LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSI1'@;
put 'LjIxIiBjeT0iMTcuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIyNS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlh'@;
put 'MSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlQ2VudGVyVGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuODgs'@;
put 'OEg1LjEyYTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNS41LDE2LjJhMS4xLDEuMSwwLDEsMCwwLTIuMmgtMTVhMS4xLDEuMSwwLDEsMCwwLDIuMloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMC4yNSwyMEg1Ljc1YTEuMSwxLjEsMCwwLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh'@;
put 'dGggZD0iTTI0Ljg4LDI2SDExLjEyYTEuMSwxLjEsMCwxLDAsMCwyLjJIMjQuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVDaGVja2JveExpc3Q9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTMxLjQzLDE2SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS40MywyNEgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIgLz48cGF0aCBkPSJNMTUuNDUsMTBoMTZhMSwxLDAsMCwwLDAtMmgtMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNSwzLjQyYTEuMDksMS4wOSwwLDAsMC0xLjU1LDBMNy44OSwxMS40OCw0LjUxLDcuODRBMS4x'@;
put 'LDEuMSwwLDEsMCwyLjksOS4zNGw0Ljk0LDUuM0wxNy41LDVBMS4xLDEuMSwwLDAsMCwxNy41LDMuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlRm9udFNpemU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIxLDkuMDhB'@;
put 'MS4xMywxLjEzLDAsMCwwLDE5Ljg2LDhINC42MmExLjEsMS4xLDAsMSwwLDAsMi4xOUgxMVYyN2ExLjA5LDEuMDksMCwwLDAsMi4xNywwVjEwLjE5aDYuNjlBMS4xNCwxLjE0LDAsMCwwLDIxLDkuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0'@;
put 'aCBkPSJNMzAuNjcsMTVIMjEuMTVhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMjVWMjYuNWExLjA5LDEuMDksMCwwLDAsMi4xNywwVjE3LjIzaDMuNTRhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBl'@;
put 'QWxpZ25DZW50ZXI9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDIwSDE5VjE2aDZhMSwxLDAsMCwwLDEtMVY3YTEsMSwwLDAsMC0xLTFIMTlWMmExLDEsMCwwLDAtMiwwVjZIMTFhMSwxLDAsMCwwLTEsMXY4YTEsMSwwLDAsMCwxLDFoNnY0SDVhMSwxLDAsMCwwLTEsMXY4YTEsMSww'@;
put 'LDAsMCwxLDFIMTd2NGExLDEsMCwwLDAsMiwwVjMwSDMxYTEsMSwwLDAsMCwxLTFWMjFBMSwxLDAsMCwwLDMxLDIwWk0xMiwxNFY4SDI0djZaTTMwLDI4SDZWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQWxpZ25MZWZ0'@;
put 'PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDFBMSwxLDAsMCwwLDQsMlYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDUsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwyMEg4VjMwSDMxYTEsMSwwLDAsMCwxLTFW'@;
put 'MjFBMSwxLDAsMCwwLDMxLDIwWm0tMSw4SDEwVjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDE1VjdhMSwxLDAsMCwwLTEtMUg4VjE2SDIzQTEsMSwwLDAsMCwyNCwxNVptLTItMUgxMFY4SDIyWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUFsaWduUmlnaHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDFhMSwxLDAsMCwwLTEsMVYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDMxLDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNCwyMXY4YTEsMSwwLDAsMCwxLDFIMjhWMjBINUExLDEsMCwwLDAsNCwyMVptMiwxSDI2djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMiw3djhhMSwxLDAsMCwwLDEsMUgy'@;
put 'OFY2SDEzQTEsMSwwLDAsMCwxMiw3Wm0yLDFIMjZ2NkgxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVJdGFsaWM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjQyLDhIMTcuMWExLjEsMS4xLDAsMSwwLDAsMi4xOWgy'@;
put 'LjEzTDEzLjExLDI1LjU1SDEwLjQ3YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDE3LjhhMS4xLDEuMSwwLDEsMCwwLTIuMTlIMTUuNTFsNi4xMy0xNS4zNmgyLjc4YTEuMSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5D'@;
put 'bHJTaGFwZUp1c3RpZnlUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDEwLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMkg2YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNzUs'@;
put 'MTRINmExLjEsMS4xLDAsMSwwLDAsMi4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzEuMTIsMjBINi42MmExLjEsMS4xLDAsMSwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDEsMCwwLTIu'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC40NSwyNS44M0g2LjZhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC40NWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi'@;
put 'IC8+JyksRi5DbHJTaGFwZUFsaWduTGVmdFRleHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjI1LDI2SDZ2Mi4ySDIwLjI1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMjBINnYy'@;
put 'LjJIMjhBMS4xLDEuMSwwLDAsMCwyOCwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi42LDE1LjFBMS4xLDEuMSwwLDAsMCwyMS41LDE0SDZ2Mi4ySDIxLjVBMS4xLDEuMSwwLDAsMCwyMi42LDE1LjFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjkuMjUsOEg2djIuMkgyOS4yNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZU51bWJlckxpc3Q9KDAseC5jbHJJY29u'@;
put 'U1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI1LjQ2IDcuNDEgNS40NiAxMS41NiA2LjY1IDExLjU2IDYuNjUgNi4wNSA1LjcgNi4wNSA0LjA1IDcuMTYgNC41MiA4IDUuNDYgNy40MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuNTcsMTQu'@;
put 'ODJhLjc2Ljc2LDAsMCwxLC44My43M2MwLC4zOC0uMjEuNzQtLjg3LDEuMjdsLTIsMS41N3YxSDcuNjdWMTguMjhINS4zM2wxLS43N2MxLS43LDEuMjgtMS4yNywxLjI4LTJhMS44MywxLjgzLDAsMCwwLTItMS43NiwyLjYzLDIuNjMsMCwwLDAtMi4xNCwxLjA4bC43Ni43M0ExLjc1LDEuNzUs'@;
put 'MCwwLDEsNS41NywxNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik02LjU2LDI0LjY0YTEuMzIsMS4zMiwwLDAsMCwxLTEuMjdjMC0uODctLjc4LTEuNTEtMi0xLjUxYTIuNjEsMi42MSwwLDAsMC0yLjEsMWwuNjkuNzJhMS43OCwx'@;
put 'Ljc4LDAsMCwxLDEuMy0uNjRjLjU0LDAsLjkyLjI2LjkyLjY2cy0uMzYuNjItMSwuNjJINC43OXYxaC42NGMuNzQsMCwxLjA3LjIxLDEuMDcuNjNzLS4zNS42OC0xLC42OGEyLDIsMCwwLDEtMS40Ni0uNjVsLS43Ljc4YTIuODUsMi44NSwwLDAsMCwyLjIxLjkzYzEuMjksMCwyLjEzLS42OSwy'@;
put 'LjEzLTEuNjRBMS4zMywxLjMzLDAsMCwwLDYuNTYsMjQuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQYWludFJvbGxlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTBWNGEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNHY2YTIsMiwwLDAsMCwyLDJIMjlBMiwyLDAsMCwwLDMx'@;
put 'LDEwWk02LDRIMjl2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yOUwxOC43LDE2LjU0YTEsMSwwLDAsMC0uNywxVjE5SDE2VjMzYTIsMiwwLDAsMCwyLDJoMmEyLDIsMCwwLDAsMi0yVjE5SDIwdi0uNzNMMzMu'@;
put 'MywxNGExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMCwzM0gxOFYyMWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHJlY3QgeD0iNCIgeT0iMiIgd2lkdGg9IjI3IiBoZWlnaHQ9IjEwIiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yNEwxOC43MSwxNi40NWExLDEsMCwwLDAtLjcxLDFWMTlIMTZWMzRhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTlIMjB2LS44MkwzMy4yOSwxNEExLDEsMCwwLDAsMzQsMTNWN0ExLDEsMCww'@;
put 'LDAsMzMsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJsb2NrUXVvdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTExLjg2LDE2LjU1YTQuMzEsNC4zMSwwLDAsMC0yLjExLjU2LDE0LjQ0LDE0LjQ0LDAsMCwxLDQuMzYtNiwx'@;
put 'LjEsMS4xLDAsMCwwLTEuNC0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NEE1LjA4LDUuMDgsMCwwLDAsMTAsMjQuNThhNC40LDQuNCwwLDAsMCwxLjg4LjQ0LDQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMjMsMTYuNTVhNC4yOSw0LjI5LDAsMCwwLTIuMTEuNTYsMTQuNSwxNC41LDAsMCwxLDQuMzUtNiwxLjEsMS4xLDAsMSwwLTEuMzktMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRhNS4wOCw1LjA4LDAsMCwwLDMsNC42MUE0LjM3LDQuMzcsMCwwLDAsMjMsMjVh'@;
put 'NC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNjUsMjcuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMjZI'@;
put 'MTUuNzVBMS4xLDEuMSwwLDAsMCwxNC42NSwyNy4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuOSwyMS4xQTEuMSwxLjEsMCwwLDAsOCwyMi4ySDMwVjIwSDhBMS4xLDEuMSwwLDAsMCw2LjksMjEuMVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMy40LDE1LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjE0SDE0LjVBMS4xLDEuMSwwLDAsMCwxMy40LDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJN'@;
put 'Ni43NSw4YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzBWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xOSw4Ljg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMWgtLjEyYTEu'@;
put 'NDYsMS40NiwwLDAsMC0xLjQyLDFMMS4xNCwyNi41NmExLjI5LDEuMjksMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMiwxLjEyLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4w'@;
put 'OCwxLjY0LDEuNjQsMCwwLDAtLjE0LS41N1pNNi4wOCwyMC43MWw0LjU5LTEwLjIyLDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yNCwxNC43OEE2LjM1LDYuMzUsMCwwLDAsMjcuNiwxMy4yYTExLjM2LDExLjM2'@;
put 'LDAsMCwwLTQuNywxLDEsMSwwLDAsMC0uNTguODksMSwxLDAsMCwwLC45NC45MiwxLjIzLDEuMjMsMCwwLDAsLjM5LS4wOCw4Ljg3LDguODcsMCwwLDEsMy43Mi0uODFjMi43LDAsNC4yOCwxLjMzLDQuMjgsMy45MnYuNWExNS4yOSwxNS4yOSwwLDAsMC00LjQyLS42MWMtMy42NCwwLTYuMTQs'@;
put 'MS42MS02LjE0LDQuNjR2LjA1YzAsMi45NSwyLjcsNC40OCw1LjM3LDQuNDhhNi4yOSw2LjI5LDAsMCwwLDUuMTktMi40OFYyNi45YTEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEtMS4wNlYxOUE1LjcxLDUuNzEsMCwwLDAsMzIuMjQsMTQuNzhabS0uNTYsNy43YzAsMi4yOC0yLjE3LDMuODkt'@;
put 'NC44MSwzLjg5LTEuOTQsMC0zLjYxLTEuMDYtMy42MS0yLjg2di0uMDZjMC0xLjgsMS41LTMsNC4yLTNhMTUuMiwxNS4yLDAsMCwxLDQuMjIuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlVW5kZXJsaW5lPSgwLHguY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCwyOC4xN2M1LjA4LDAsOC40OC0zLjA4LDguNDgtOVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44YzAsNC40NC0yLjM4LDYuNzEtNi4xMyw2Ljcxcy02LjIxLTIuNDctNi4yMS02Ljg1VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhDOS41'@;
put 'MywyNS4wOSwxMywyOC4xNywxOCwyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwzMEg1YTEuMTEsMS4xMSwwLDAsMCwwLDIuMjFIMzFBMS4xMSwxLjExLDAsMCwwLDMxLDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFsaWduQm90dG9tPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwzMEgyYTEsMSwwLDAsMCwwLDJIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xNiw1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjI4SDE2Wk0xNCwyNkg4VjZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwxM2ExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDFWMjhIMzBaTTI4LDI2'@;
put 'SDIyVjE0aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWxpZ25NaWRkbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDMwVjExYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMXY2SDE2VjVhMSwxLDAs'@;
put 'MCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMTdIMmExLDEsMCwwLDAsMCwySDZWMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNHY2YTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjE5aDRhMSwxLDAsMCwwLDAtMlpNMTQsMzBIOFY2aDZabTE0LTZIMjJWMTJoNloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVBbGlnblRvcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsNEgyQTEsMSwwLDAsMCwyLDZIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhINlpNOCwxMGg2VjMwSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMjNhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwx'@;
put 'LTFWOEgyMFptMi0xM2g2VjIySDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUxhbmd1YWdlPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzSDE0djVoMlY1aDE0YzAuNiwwLDEsMC40LDEsMXYxMWMwLDAuNi0wLjQs'@;
put 'MS0xLDFIMTd2N2gtNS4zTDgsMjcuOVYyNUg1Yy0wLjYsMC0xLTAuNC0xLTFWMTNjMC0wLjYsMC40LTEsMS0xaDEzdi0ySDVcblx0XHRjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUuMUgxOXYtN2gxMWMxLjcsMCwzLTEuMywzLTNWNkMzMyw0LjMsMzEu'@;
put 'NywzLDMwLDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi4yLDIyLjloMi40bDAuNi0xLjZoMy4xbDAuNiwxLjZoMi40TDExLjksMTRIOS41TDYuMiwyMi45eiBNMTAuNywxNi41bDEsMy4xaC0yTDEwLjcsMTYuNXoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwxN2MxLjEsMCwyLjYtMC4zLDQtMWMxLjQsMC43LDMsMSw0LDF2LTJjMCwwLTEsMC0yLjEtMC40YzEuMi0xLjIsMi4xLTMsMi4xLTUuNlY4aC0zVjZoLTJ2MmgtM3YyaDUuOVxuXHRcdGMtMC4yLDEuOC0x'@;
put 'LDIuOS0xLjksMy42Yy0wLjYtMC41LTEuMi0xLjItMS42LTIuMWgtMi4xYzAuNCwxLjMsMSwyLjMsMS44LDMuMUMyMS4xLDE1LDIwLjIsMTUsMjAsMTVWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cG9seWdvbiBwb2ludHM9IjExLDE2LjUgMTAs'@;
put 'MTkuNiAxMiwxOS42IDExLDE2LjUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjMsM2gtMTZ2NWg0djJoLTEzYy0xLjcsMC0zLDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFoNi43di03aDExYzEuNywwLDMt'@;
put 'MS4zLDMtM1Y2XG5cdFx0QzMzLjMsNC4zLDMyLDMsMzAuMywzeiBNMTMuMSwyMi45bC0wLjUtMS42SDkuNWwtMC42LDEuNkg2LjVMOS44LDE0aDIuNGwzLjMsOC45TDEzLjEsMjIuOXogTTI4LjMsMTV2MmMtMS4zLDAtMi43LTAuNC0zLjktMVxuXHRcdGMtMS4yLDAuNi0yLjYsMC45LTQsMWwt'@;
put 'MC4xLTJjMC43LDAsMS40LTAuMSwyLjEtMC4zYy0wLjktMC45LTEuNS0yLTEuOC0zLjJoMi4xYzAuMywwLjksMC45LDEuNiwxLjYsMi4yYzEuMS0wLjksMS44LTIuMiwxLjktMy43XG5cdFx0aC02VjhoM1Y2aDJ2MmgzLjNsMC4xLDFjMC4xLDIuMS0wLjcsNC4yLTIuMiw1LjdDMjcuMSwxNC45'@;
put 'LDI3LjcsMTUsMjguMywxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVRleHRDb2xvcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTkuNDcsMy44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFIMThhMS40NSwxLjQ1LDAsMCwwLTEu'@;
put 'NDIsMUw4LjQyLDIxLjU2YTEuMzUsMS4zNSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjExLDEuMTEsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNTksMS41OSwwLDAs'@;
put 'MC0uMTQtLjU3Wk0xMy4zNiwxNS43MSwxOCw1LjQ5bDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjQuMDYiIHk9IjI1IiB3aWR0aD0iMjgiIGhlaWdodD0iOCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVIaWdobGlnaHRlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuODIsMjYuMDZhMSwxLDAsMCwxLS43MS0uMjlMOC42NywxOS4zM2ExLDEsMCwwLDEtLjI5LS43MSwxLDEsMCwwLDEsLjI5LS43MUwyMywzLjU0'@;
put 'YTUuNTUsNS41NSwwLDEsMSw3Ljg1LDcuODZMMTYuNTMsMjUuNzdBMSwxLDAsMCwxLDE1LjgyLDI2LjA2Wm0tNS03LjQ0LDUsNUwyOS40OCwxMGEzLjU0LDMuNTQsMCwwLDAsMC01LDMuNjMsMy42MywwLDAsMC01LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIvPlxuICA8cGF0aCBkPSJNMTAuMzgsMjguMjhBMSwxLDAsMCwxLDkuNjcsMjhMNi40NSwyNC43N2ExLDEsMCwwLDEtLjIyLTEuMDlsMi4yMi01LjQ0YTEsMSwwLDAsMSwxLjYzLS4zM2w2LjQ1LDYuNDRBMSwxLDAsMCwxLDE2LjIsMjZsLTUuNDQsMi4yMkExLjMzLDEuMzMsMCwwLDEsMTAu'@;
put 'MzgsMjguMjhaTTguMzMsMjMuODJsMi4yOSwyLjI4LDMuNDMtMS40TDkuNzQsMjAuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNOC45NCwzMGgtNWExLDEsMCwwLDEtLjg0LTEuNTVsMy4yMi00Ljk0YTEsMSwwLDAsMSwxLjU1'@;
put 'LS4xNmwzLjIxLDMuMjJhMSwxLDAsMCwxLC4wNiwxLjM1TDkuNywyOS42NEExLDEsMCwwLDEsOC45NCwzMFpNNS43OCwyOEg4LjQ3TDksMjcuMzRsLTEuNy0xLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIzLjA2IiB5PSIzMSIg'@;
put 'd2lkdGg9IjMwIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+JyksRi5DbHJTaGFwZU91dGRlbnQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5'@;
put 'aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTkuNTYsMjIuNTRhMSwxLDAsMCwxLS43LS4z'@;
put 'TDQuNjEsMThsNC4yNS00LjI0YTEsMSwwLDAsMSwxLjQxLDEuNDFMNy40NCwxOGwyLjgzLDIuODNhMSwxLDAsMCwxLS43MSwxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxGLkNsclNoYXBlSW5kZW50PSgwLHguY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2Ex'@;
put 'LDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik01LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0xLjcxTDcuNjgsMTgsNC44NiwxNS4xN2ExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBMMTAuNTEsMTgsNi4yNywyMi4yNEExLDEsMCwwLDEsNS41NiwyMi41NFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksRi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjg4LDE5LjkyaC0zMGExLDEsMCwxLDEsMC0yaDMwYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy4yNywxNS44NmExMi45LDEyLjksMCwwLDEsMS4yOS0uNTJBNS42OSw1LjY5LDAsMCwxLDEwLjM5LDE1YTMuMTgsMy4xOCwwLDAsMSwyLjc1LDEuMTFBNC40NCw0LjQ0LDAsMCwxLDE0LDE4Ljg1di40OWExMy44MywxMy44MywwLDAsMC00'@;
put 'LjI5LS43NCw2LjE5LDYuMTksMCwwLDAtMi41OS41NEE1LDUsMCwwLDAsNS44MSwyMEgxNS44OFYxOC44NWE1LjY3LDUuNjcsMCwwLDAtMS4zNy00LDUuMTYsNS4xNiwwLDAsMC00LTEuNDksMTAsMTAsMCwwLDAtMy45MS44OC44Ny44NywwLDAsMC0uNDQsMS4xOEEuODQuODQsMCwwLDAsNy4y'@;
put 'NywxNS44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMSwyMGE1Ljk0LDUuOTQsMCwwLDEsLjU0LTIuMzEsNC4zNSw0LjM1LDAsMCwxLDEuNTgtMS44Myw0LjI3LDQuMjcsMCwwLDEsNC41OSwwLDQuNDcsNC40NywwLDAsMSwx'@;
put 'LjU3LDEuODNBNi4xMiw2LjEyLDAsMCwxLDI5Ljg1LDIwaDJhNy43Myw3LjczLDAsMCwwLS43OC0zLjE5LDYsNiwwLDAsMC0yLjE4LTIuNDUsNS43NCw1Ljc0LDAsMCwwLTMuMS0uODgsNS4zOSw1LjM5LDAsMCwwLTIuOC43Myw1LjU1LDUuNTUsMCwwLDAtMiwyLjA1VjEwYS44Ny44NywwLDAs'@;
put 'MC0uODYtLjg2SDIwYS44Ny44NywwLDAsMC0uODYuODZWMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjkuNjcsMjJhNS42MSw1LjYxLDAsMCwxLS4zNiwxLjA3LDQuNDcsNC40NywwLDAsMS0xLjU3LDEuODUsNC4zMiw0LjMy'@;
put 'LDAsMCwxLTQuNTksMCw0LjM1LDQuMzUsMCwwLDEtMS41OC0xLjg1QTUuNjQsNS42NCwwLDAsMSwyMS4yLDIySDE5LjA5djQuMTNBLjg3Ljg3LDAsMCwwLDIwLDI3aC4yYS44Ny44NywwLDAsMCwuODYtLjg2VjI0LjUxYTUuNTgsNS41OCwwLDAsMCwyLDIuMDYsNS40OCw1LjQ4LDAsMCwwLDIu'@;
put 'OC43Miw1LjY2LDUuNjYsMCwwLDAsMy4xLS44OEE1Ljg4LDUuODgsMCwwLDAsMzEuMDksMjQsNy4wOSw3LjA5LDAsMCwwLDMxLjczLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE0LDIydi43NmEzLjM0LDMuMzQsMCwwLDEt'@;
put 'MS42MiwyLDUuMzQsNS4zNCwwLDAsMS0yLjY5LjcyLDMuNzgsMy43OCwwLDAsMS0yLjM2LS43LDIuMjQsMi4yNCwwLDAsMS0uOTQtMS45LDIuMjksMi4yOSwwLDAsMSwuMi0uOTFINC42MmE0LDQsMCwwLDAtLjEzLDEsMy44MywzLjgzLDAsMCwwLDEuMzUsMy4wNkE1LjE1LDUuMTUsMCwwLDAs'@;
put 'OS4zMSwyNy4yLDYsNiwwLDAsMCwxMiwyNi41N2E0LjYyLDQuNjIsMCwwLDAsMi0xLjc0VjI2YS44Ni44NiwwLDAsMCwuODYuODZIMTVhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVTdWJz'@;
put 'Y3JpcHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjU1LDE4bDYuOCw4LjZhMS4xNywxLjE3LDAsMCwxLS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NEwxMywxOS45MSw2LjYsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45'@;
put 'TDExLjU1LDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4xNywxLjE3LDAsMCwxLDYuNjMsOGw2LjQ0LDguMTNMMTkuNSw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjMsMzEuOCwyNy40OSwyOGE5LjksOS45LDAsMCwwLDEuODgtMi4wNUEzLjQ0LDMuNDQsMCwwLDAsMzAsMjRhMi4zNSwyLjM1LDAsMCwwLS4zNS0xLjI3LDIuNDQsMi40NCwwLDAsMC0xLS44NCwyLjksMi45LDAsMCwwLTEuMjYtLjI4LDMu'@;
put 'MzYsMy4zNiwwLDAsMC0xLjgzLjUsNS42NCw1LjY0LDAsMCwwLTEuNDgsMS40MmwtMS0uODFhNS4xMSw1LjExLDAsMCwxLDQuMzYtMi4zNyw0LjM1LDQuMzUsMCwwLDEsMiwuNDUsMy40MywzLjQzLDAsMCwxLDIsMy4xOCw0LjQ1LDQuNDUsMCwwLDEtLjY4LDIuMzUsMTAuOSwxMC45LDAsMCwx'@;
put 'LTIuMjQsMi40NmwtMy4yNCwyLjgxSDMxLjVWMzNIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVTdXBlcnNjcmlwdD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNDMsMThsNi43OSw4LjZhMS4xNywxLjE3LDAsMCwx'@;
put 'LS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NGwtNi40NC04LjEzTDYuNDcsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45TDExLjQzLDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4yLDEuMiwwLDAsMSw2LjUx'@;
put 'LDhsNi40Myw4LjEzTDE5LjM4LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMi44NSwxNC40N2w0LjUxLTMuODVhOS4zNyw5LjM3LDAs'@;
put 'MCwwLDEuODgtMiwzLjQzLDMuNDMsMCwwLDAsLjU5LTEuODYsMi4yNywyLjI3LDAsMCwwLS4zNi0xLjI3LDIuMzgsMi4zOCwwLDAsMC0uOTUtLjgzLDIuNzcsMi43NywwLDAsMC0xLjI2LS4yOSwzLjM5LDMuMzksMCwwLDAtMS44My41LDUuODMsNS44MywwLDAsMC0xLjQ5LDEuNDJsLTEtLjgx'@;
put 'YTUuMTIsNS4xMiwwLDAsMSw0LjM2LTIuMzcsNC4zNiw0LjM2LDAsMCwxLDIsLjQ1LDMuNDcsMy40NywwLDAsMSwyLDMuMThBNC40NCw0LjQ0LDAsMCwxLDMwLjU4LDlhMTEuMTQsMTEuMTQsMCwwLDEtMi4yNCwyLjQ2TDI1LjEsMTQuMzFoNi4yOHYxLjMzSDIyLjg1WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxGLlRleHRFZGl0U2hhcGVzPXtib2xkOkYuQ2xyU2hhcGVCb2xkLCJidWxsZXQtbGlzdCI6Ri5DbHJTaGFwZUJ1bGxldExpc3QsImNoZWNrYm94LWxpc3QiOkYuQ2xyU2hhcGVDaGVja2JveExpc3QsIm51bWJlci1saXN0IjpGLkNs'@;
put 'clNoYXBlTnVtYmVyTGlzdCwiZm9udC1zaXplIjpGLkNsclNoYXBlRm9udFNpemUsaXRhbGljOkYuQ2xyU2hhcGVJdGFsaWMsImp1c3RpZnktdGV4dCI6Ri5DbHJTaGFwZUp1c3RpZnlUZXh0LCJjZW50ZXItdGV4dCI6Ri5DbHJTaGFwZUNlbnRlclRleHQsImFsaWduLWxlZnQtdGV4dCI6Ri5D'@;
put 'bHJTaGFwZUFsaWduTGVmdFRleHQsImFsaWduLXJpZ2h0LXRleHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dCwicGFpbnQtcm9sbGVyIjpGLkNsclNoYXBlUGFpbnRSb2xsZXIsImJsb2NrLXF1b3RlIjpGLkNsclNoYXBlQmxvY2tRdW90ZSx0ZXh0OkYuQ2xyU2hhcGVUZXh0LHVuZGVybGlu'@;
put 'ZTpGLkNsclNoYXBlVW5kZXJsaW5lLCJhbGlnbi1jZW50ZXIiOkYuQ2xyU2hhcGVBbGlnbkNlbnRlciwiYWxpZ24tbGVmdCI6Ri5DbHJTaGFwZUFsaWduTGVmdCwiYWxpZ24tcmlnaHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0LCJhbGlnbi1ib3R0b20iOkYuQ2xyU2hhcGVBbGlnbkJvdHRvbSwi'@;
put 'YWxpZ24tbWlkZGxlIjpGLkNsclNoYXBlQWxpZ25NaWRkbGUsImFsaWduLXRvcCI6Ri5DbHJTaGFwZUFsaWduVG9wLGxhbmd1YWdlOkYuQ2xyU2hhcGVMYW5ndWFnZSwidGV4dC1jb2xvciI6Ri5DbHJTaGFwZVRleHRDb2xvcixoaWdobGlnaHRlcjpGLkNsclNoYXBlSGlnaGxpZ2h0ZXIsaW5k'@;
put 'ZW50OkYuQ2xyU2hhcGVJbmRlbnQsb3V0ZGVudDpGLkNsclNoYXBlT3V0ZGVudCxzdHJpa2V0aHJvdWdoOkYuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoLHN1YnNjcmlwdDpGLkNsclNoYXBlU3Vic2NyaXB0LHN1cGVyc2NyaXB0OkYuQ2xyU2hhcGVTdXBlcnNjcmlwdH0sdHlwZW9mIHdpbmRvdzwi'@;
put 'dSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGV4dEVkaXRTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLlRyYXZlbFNoYXBlcz1GLkNsclNoYXBlT25Ib2xpZGF5PUYuQ2xyU2hhcGVU'@;
put 'cmFpbGVyPUYuQ2xyU2hhcGVGZXJyeT1GLkNsclNoYXBlQ2FyYXZhbj1GLkNsclNoYXBlQ2FtcGVydmFuPUYuQ2xyU2hhcGVCb2F0PUYuQ2xyU2hhcGVCaWN5Y2xlPUYuQ2xyU2hhcGVNYXBNYXJrZXI9Ri5DbHJTaGFwZUNvbXBhc3M9Ri5DbHJTaGFwZU1hcD1GLkNsclNoYXBlQ2FyPUYuQ2xy'@;
put 'U2hhcGVBaXJwbGFuZT1GLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJh'@;
put 'dG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVUcnVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCww'@;
put 'LTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMTkuN2E2LjQ1LDYuNDUsMCwwLDEsMS41Ni0uMmMuMTUsMCwuMjksMCwuNDQsMFYxNGg0YTIsMiwwLDAsMSwyLDJ2MUgyOHYyaDR2NUgyOS42YTQuNTQsNC41NCwwLDAsMC04LjM0LDBIMTQuNDNhNC41LDQuNSww'@;
put 'LDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDksNC40OSwwLDAsMCw4LjkyLDBIMzNhMSwxLDAsMCwwLDEtMVYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcs'@;
put 'MGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQzLDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwx'@;
put 'LDAsMCwwLDEsMUg0VjhIMjRWMjEuNDlBNC40NSw0LjQ1LDAsMCwwLDIxLjI1LDI0SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ4LDQuNDgsMCwwLDAsOC45MSwwSDM0VjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4z'@;
put 'OCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDIsMjhaTTMyLDE3SDI2VjE0aDRhMiwyLDAsMCwxLDIsMloiLz4nKSxGLkNsclNoYXBlQWlycGxhbmU9KDAsbS5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS43Nyw4LjE2YTIuNDMsMi40MywwLDAsMC0xLjktMkwyOCw0Ljg3YTQuNSw0LjUsMCwwLDAtMy42NS43OUw3LDE4LjMsMi4xNCwxOC4xQTEuODYsMS44NiwwLDAsMCwuOTEsMjEu'@;
put 'NDFsNSwzLjkzYy42LjczLDEsLjU5LDEwLjkzLTQuODJsLjkzLDkuNDJhMS4zNiwxLjM2LDAsMCwwLC44NSwxLjE4LDEuNDMsMS40MywwLDAsMCwuNTQuMSwxLjU0LDEuNTQsMCwwLDAsMS0uNDFsMi4zOS0yLjE4YTEuNTIsMS41MiwwLDAsMCwuNDYtLjgzTDI1LjIsMTUuOWMzLjU3LTIsNi45'@;
put 'NS0zLjg4LDkuMzYtNS4yNUEyLjQzLDIuNDMsMCwwLDAsMzUuNzcsOC4xNlptLTIuMi43NWMtMi41LDEuNDItNiwzLjQxLTkuNzYsNS40N2wtLjQxLjIzTDIxLjA3LDI3LjI4bC0xLjQ3LDEuMzRMMTguNSwxNy4zMiwxNy4xNywxOEMxMCwyMiw3LjYxLDIzLjE2LDYuNzksMjMuNTJsLTQuMy0z'@;
put 'LjQxLDUuMDguMjIsMTgtMTMuMDZhMi41MSwyLjUxLDAsMCwxLDItLjQ1bDUuODUsMS4yNmEuNDMuNDMsMCwwLDEsLjM1LjM3QS40Mi40MiwwLDAsMSwzMy41Nyw4LjkxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9'@;
put 'Ik03LDEyLjU0bDMuNTYsMSwxLjY0LTEuMTktNC0xLjE2TDEwLDEwLjA5bDUuNDctLjE2LDIuMy0xLjY3TDEwLDguNWExLjI1LDEuMjUsMCwwLDAtLjcuMTdMNi42NywxMC4yQTEuMjgsMS4yOCwwLDAsMCw3LDEyLjU0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTYuMjUsMTEuNSwxMiwxMy4xNmw2LjMyLTQuNTktOS4wNy4yNkEuNTIuNTIsMCwwLDAsOSw4LjkxTDYuMTMsMTAuNTZBLjUxLjUxLDAsMCwwLDYuMjUsMTEuNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTIiIGQ9Ik0zNC41Miw2LjM2LDI4LjIyLDVhMy43OCwzLjc4LDAsMCwwLTMuMDcuNjdMNi4xMiwxOS41bC00LjU3LS4yYTEuMjUsMS4yNSwwLDAsMC0uODMsMi4yMmw0LjQ1LDMuNTNhLjU1LjU1LDAsMCwwLC41My4wOWMxLjI3LS40OSw2LTMsMTEuNTktNi4wN2wxLjEyLDEx'@;
put 'LjUxYS41NS41NSwwLDAsMCwuOS4zN2wyLjUtMi4wOGEuNzYuNzYsMCwwLDAsLjI2LS40NWwyLjM3LTEzLjI5YzQtMi4yMiw3LjgyLTQuMzcsMTAuNTEtNS44OUExLjU1LDEuNTUsMCwwLDAsMzQuNTIsNi4zNloiLz4nKSxGLkNsclNoYXBlQ2FyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LjQ1LDE0LjE3QTIyLjEs'@;
put 'MjIuMSwwLDAsMCwxOS4zOCw3YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40Ny0uMTQuOTItLjIsMS4zNkE0LDQsMCwwLDAsMiwxOHY2LjEzYTIsMiwwLDAsMCwyLDJWMjBINFYxOGEyLDIsMCwwLDEsMi0ySDI0LjczQTcuMjgsNy4yOCwwLDAsMSwz'@;
put 'MiwyMy4yN1YyNGgtMmE0LjUzLDQuNTMsMCwxLDAsLjMzLDJIMzJhMiwyLDAsMCwwLDItMnYtLjczQTkuMjgsOS4yOCwwLDAsMCwyNi40NSwxNC4xN1pNMTEsMTRINi45M2MwLS4zMS4wOS0uNjMuMTUtMUE2LjUyLDYuNTIsMCwwLDEsMTEsOGgwWm0yLDBWNy41OGE4LjE3LDguMTcsMCwwLDEs'@;
put 'NS4zNiwxLjE2QTE5LDE5LDAsMCwxLDIzLjksMTRaTTI1LjgsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjUuOCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0'@;
put 'LjE3LDI0YTQuNTMsNC41MywwLDEsMCwuMzMsMmg1LjNjMC0uMDgsMC0uMTcsMC0uMjVBNiw2LDAsMCwxLDIwLDI0Wk0xMCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYuODcsMTQuMjhBMjIuMzYsMjIuMzYsMCwwLDAsMTkuNjUsNi45YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40OS0uMTUsMS0uMjEsMS40aC0xQTIuNTksMi41OSwwLDAsMCwyLDE2LjU5djguNTVh'@;
put 'Ljg2Ljg2LDAsMCwwLC44Ni44Nkg0LjU5YzAtLjEzLDAtLjI2LDAtLjM5YTUuNzcsNS43NywwLDAsMSw3LjcxLTUuNDVsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwxNC44MiwyNmg1LjQ4YzAtLjEzLDAtLjI2LDAtLjM5QTUu'@;
put 'NzcsNS43NywwLDAsMSwyOCwyMC4xNmwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDMwLjUzLDI2aDIuNjFhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjMuMzZBOS4zOSw5LjM5LDAsMCwwLDI2Ljg3LDE0LjI4Wk0xMiwxNEg4YzAt'@;
put 'LjM1LjEtLjcxLjE2LTEuMDdhNi41Miw2LjUyLDAsMCwxLDMuODctNWgwWk0xMC4zNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMC4zNiwyOC4zNlpNMTksMTlIMTZWMTdoM1ptLTYtNVY3LjQ3YTguMTYsOC4xNiwwLDAsMSw1LjQsMS4xNUExOS4xNSwxOS4x'@;
put 'NSwwLDAsMSwyNCwxNFpNMjYuMDYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjYuMDYsMjguMzZaIi8+JyksRi5DbHJTaGFwZU1hcD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i'@;
put 'TTMzLjU5LDYuMTlBMSwxLDAsMCwwLDMyLjcsNkwyMy4wOSw5LDEzLjQ2LDQuMTFhMSwxLDAsMCwwLS44NCwwTDIuNjIsOC4yQTEsMSwwLDAsMCwyLDkuMTNWMjkuNjFhMSwxLDAsMCwwLDEuMzguOTJMMTMsMjYuNThsOS41OSw0LjkyYTEsMSwwLDAsMCwuNDYuMTEsMSwxLDAsMCwwLC4zLDBs'@;
put 'MTAtMy4xMmExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMy41OSw2LjE5Wk0zMiwyNi43NWwtOC4zMiwyLjZWMjcuMDZoLTEuNnYybC04LjQtNC4zMVYyMy4wNmgtMS42djEuNzJMNCwyOC4xMVY5Ljc5bDguMDgtMy4zM1Y4LjgxaDEuNlY2LjQ3bDguNCw0LjN2Mi4xaDEuNlYxMUwzMiw4'@;
put 'LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMi4wOCIgeT0iMTUuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyMi4wOCIgeT0iMjEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi4wOCIgeT0iMTEuMDYiIHdpZHRoPSIx'@;
put 'LjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMi4wOCIgeT0iMTcuMTMiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy43NSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy4zMSw3LjM1LDI1LDkuOTRWMTRIMjNWMTAuMjlMMTQsNS42OFY5SDEyVjUuMjdsLTkuNjcsNEEuNTMuNTMsMCwwLDAsMiw5Ljc1VjMwLjQ1YS41My41MywwLDAsMCwuNzQuNDlMMTIsMjcuMTJWMjNoMnY0LjUzbDksNC42MVYy'@;
put 'OGgydjMuNzlsOC42My0yLjdhLjUzLjUzLDAsMCwwLC4zNy0uNTFWNy44NkEuNTMuNTMsMCwwLDAsMzMuMzEsNy4zNVpNMTQsMjFIMTJWMTdoMlptMC02SDEyVjExaDJaTTI1LDI2SDIzVjIyaDJabTAtNkgyM1YxNmgyWiIvPicpLEYuQ2xyU2hhcGVDb21wYXNzPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGQ9Ik0yMC44MiwxNS4zMWgwTDEwLjQ2LDljLS40Ni0uMjYtMS4xMS4zNy0uODYuODRsNi4xNSwxMC41NiwxMC41Niw2LjE1YS42Ni42NiwwLDAsMCwuODQtLjg2Wm0tNCw0LDMtMyw0LjU1LDcuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTEsMjkuOTVWMjkuNTNIMTd2Mi40MkExNCwxNCwwLDAsMSw0LjA1LDE5SDYuNDdWMTdINC4wNUExNCwxNCwwLDAsMSwxNyw0LjA1VjYuNDdoMlY0LjA1QTE0LDE0LDAsMCwx'@;
put 'LDMxLjk1LDE3SDI5LjUzdjJoMi40MkExNCwxNCwwLDAsMSwxOSwzMS45NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNi40NywxOUg0'@;
put 'LjA1YzAtLjMzLS4wNS0uNjYtLjA1LTFzMC0uNjcuMDUtMUg2LjQ3Wk0xNyw0LjA1Yy4zMywwLC42Ni0uMDUsMS0uMDVzLjY3LDAsMSwuMDVWNi40N0gxN1ptMiwyNy45Yy0uMzMsMC0uNjYuMDUtMSwuMDVzLS42NywwLTEtLjA1VjI5LjUzaDJabTgtNS41OGEuNTkuNTksMCwwLDEtLjY5LjE2'@;
put 'TDE1Ljc1LDIwLjM4LDkuNiw5LjgyYy0uMjUtLjQ3LjM5LTEuMS44Ni0uODRsMTAuMzcsNi4zM2gwbDYuMzMsMTAuMzdBLjU5LjU5LDAsMCwxLDI3LDI2LjM3Wk0yOS41MywxOVYxN2gyLjQyYzAsLjMzLjA1LjY2LjA1LDFzMCwuNjctLjA1LDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNi43NyAxOS4zNSAyNC4zNSAyMy43NyAxOS44IDE2LjMzIDE2Ljc3IDE5LjM1IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNYXBNYXJrZXI9KDAsbS5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43'@;
put 'MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYx'@;
put 'LDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAsMCwxOCwyWk0yMy41OSwyNGwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45'@;
put 'LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFhOS43OCw5Ljc4LDAsMSwxLDE5LjU2LDBDMjcuNzgsMTcuNzksMjUuMzYsMjEuNCwyMy41OSwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4x'@;
put 'N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OWE3LjQ5LDcuNDksMCwwLDEtMi0uMzNjMCwuMTksMCwuMzgsMCwuNTcsMCw0LjA2LTIuNDIsNy42Ny00LjE5'@;
put 'LDEwLjMxbC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMUE5Ljc3LDkuNzcsMCwwLDEsMjIuNTYsNS4wOWE3LjQ1LDcuNDUsMCwwLDEsLjUyLTJBMTEuNzUs'@;
put 'MTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43'@;
put 'OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5'@;
put 'OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlptMCwxN2E2LjU2LDYuNTYsMCwxLDEsNi41Ni02LjU2QTYuNTYsNi41NiwwLDAsMSwxOCwxOVoiLz5cbiAgICAgICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40'@;
put 'OUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzgsMTFhNi41OCw2LjU4LDAsMSwxLTEuNjEtMyw3LjQyLDcuNDIsMCwwLDEsLjMxLTQuODRBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwu'@;
put 'NzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9'@;
put 'IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmljeWNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOC41LDI5LjY1QTYuNTEsNi41MSwwLDAsMSwyLDIzLjE1YTYuMzksNi4zOSwwLDAsMSw2LjUtNi4zNkE2LjM5LDYuMzksMCwwLDEsMTUsMjMuMTUsNi41MSw2LjUxLDAsMCwxLDguNSwy'@;
put 'OS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDguNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNy41LDI5LjY1YTYuNTEsNi41MSwwLDAsMS02LjUtNi41LDYuNSw2LjUsMCwwLDEs'@;
put 'MTMsMEE2LjUxLDYuNTEsMCwwLDEsMjcuNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDI3LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjQuNjZIOGExLDEsMCwwLDEt'@;
put 'Ljg5LTEuNDVsNS0xMCwxLjc4LjlMOS42MiwyMi43M0gxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjEzIiB5PSIxMi42OCIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuOTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00IiAvPjxwYXRoIGQ9Ik0yOCwyNC42NmExLDEsMCwwLDEtLjk0LS42NkwyMi4yOSwxMC42NkgyMGExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLS45M2gzYS45NC45NCwwLDAsMSwuOTQuNmw1LDE0YTEsMSwwLDAsMS0uNiwxLjI3QTEsMSwwLDAsMSwyOCwyNC42NloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0xMywxNC42NmExLDEsMCwwLDEtLjcxLS4yOWwtMS43LTEuNzFIOGExLDEsMCwwLDEtMS0xLC45NC45NCwwLDAsMSwxLTFoM2ExLjA4LDEuMDgsMCwwLDEsLjc1LjI3bDIsMmExLDEsMCwwLDEsMCwxLjQxQTEs'@;
put 'MSwwLDAsMSwxMywxNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNSwyMS45Yy0wLjItMi0xLjItMy44LTIuOS00LjlsLTIuNSw0LjlIMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik03LjIsMjMuNGMtMC4yLTAuMy0wLjItMC43LDAtMWwzLjItNi4zYy0wLjYtMC4yLTEuMi0wLjItMS44LTAuMkM1LDE1LjksMiwxOC44LDIsMjIuNGMwLDMuNiwyLjksNi41LDYuNSw2LjVcblx0YzMsMCw1LjYtMi4xLDYuMy01SDhDNy43LDIzLjksNy4zLDIzLjcsNy4yLDIzLjR6IiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyMS45aC00YzAsMC4yLDAsMC4zLDAsMC41YzAsMC41LTAuMSwxLTAuMiwxLjVIMTlWMjEuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjUs'@;
put 'MTUuOWMtMC4zLDAtMC42LDAtMC45LDAuMWwyLjQsNi42YzAuMiwwLjUtMC4xLDEuMS0wLjYsMS4zYy0wLjEsMC0wLjIsMC4xLTAuMywwLjFjLTAuNCwwLTAuOC0wLjMtMC45LTAuN2wtMi40LTYuN1xuXHRjLTMuMiwxLjYtNC41LDUuNS0zLDguN2MxLjYsMy4yLDUuNSw0LjUsOC43LDNjMy4y'@;
put 'LTEuNiw0LjUtNS41LDMtOC43QzMyLjIsMTcuMywzMCwxNS45LDI3LjUsMTUuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTI0LjcsMTYuN2MwLjYtMC4zLDEuMy0wLjUsMS45LTAuNmwtMi43LTcuNEMyMy44LDguMiwyMy40LDgsMjMsNy45'@;
put 'aC0zYy0wLjYsMC0xLDAuNS0xLDEuMWMwLDAuNSwwLjQsMC45LDEsMC45XG5cdGMwLDAsMCwwLDAsMGgyLjNsMC43LDJoLTkuNmwtMS43LTEuN0MxMS41LDEwLjEsMTEuMywxMCwxMSwxMEg4Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDIuNmwxLjIsMS4ybC0xLjUsM1xuXHRjMC42LDAu'@;
put 'MiwxLjMsMC41LDEuOCwwLjhsMS42LTMuMmgxMEwyNC43LDE2Ljd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVCb2F0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4xLDI3LjFDMjgsMjcsMjYuOSwyNy40LDI2LDI4LjJjLTEu'@;
put 'MSwxLjEtMi45LDEuMS00LjEsMGMtMS0wLjctMi4xLTEuMS0zLjMtMS4xYy0xLjItMC4xLTIuNCwwLjMtMy4zLDEuMVxuXHRcdEMxNC43LDI4LjcsMTQsMjksMTMuMiwyOXMtMS41LTAuMy0yLjEtMC44Yy0xLTAuOC0yLjItMS4yLTMuNC0xLjJzLTIuNCwwLjQtMy40LDEuMkMzLjcsMjguNywy'@;
put 'LjgsMjksMiwyOXYyXG5cdFx0YzEuMywwLjEsMi42LTAuMywzLjYtMS4yQzYuMiwyOS4zLDcuMSwyOSw3LjksMjljMC43LDAsMS41LDAuMywyLjEsMC44YzEuOCwxLjYsNC42LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOFxuXHRcdGMwLjcsMCwxLjQsMC4zLDIsMC44YzEuOSwx'@;
put 'LjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhjMC43LDAsMS40LDAuMywxLjksMC44YzAuOSwwLjcsMS45LDEuMSwzLDEuMnYtMlxuXHRcdGMtMSwwLTEuMi0wLjQtMS43LTAuOEMzMS40LDI3LjUsMzAuMywyNy4xLDI5LjEsMjcuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDIzYzAtMC42LDAuNS0xLDEuMS0xSDMybC0zLjUsMy4xaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNy0wLjgsMC42LTIuMS0wLjItMi44XG5cdFx0QzMzLDIwLjIsMzIuNiwyMCwzMi4xLDIw'@;
put 'aC0yNWMtMS43LDAtMywxLjMtMywzdjMuMmMwLjUtMC41LDEuMi0wLjgsMS45LTEuMVYyM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjksMTlIMTV2LTcuOGMwLTAuNi0wLjMtMS4yLTAuOC0xLjZDMTMuMyw4LjksMTIsOS4xLDEx'@;
put 'LjQsMTBsLTQuMSw1LjljLTAuNCwwLjYtMC40LDEuNC0wLjEsMi4xQzcuNSwxOC42LDguMiwxOSw4LjksMTlcblx0XHR6IE0xMy4xLDExLjJMMTMsMTdIOC45TDEzLjEsMTEuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNiwxOGMw'@;
put 'LjQtMC42LDAuNC0xLjQsMC0yTDE5LjcsNS42Yy0wLjQtMC42LTEtMS0xLjctMWMtMS4xLDAtMiwwLjktMiwyVjE5aDguM0MyNSwxOSwyNS43LDE4LjYsMjYsMTh6IE0xNy45LDYuNlxuXHRcdGw2LjQsMTAuNWgtNi40VjYuNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00IiAvPjxwYXRoIGQ9Ik0zNCwzMWMtMS4xLTAuMS0yLjEtMC41LTMtMS4yYy0wLjUtMC41LTEuMi0wLjgtMi0wLjhjLTAuNywwLTEuNSwwLjMtMiwwLjhjLTAuOSwwLjgtMiwxLjEtMy4xLDEuMWMtMS4yLDAtMi40LTAuNC0zLjMtMS4xXG5cdGMtMS4yLTEuMS0zLTEuMS00LjEsMGMt'@;
put 'MC45LDAuOC0yLjEsMS4yLTMuNCwxLjJjLTEuMiwwLTIuMy0wLjQtMy4yLTEuMmMtMC42LTAuNS0xLjMtMC44LTItMC44Yy0wLjgsMC0xLjcsMC4zLTIuMywwLjhcblx0Yy0xLDAuOC0yLjMsMS4yLTMuNSwxLjFWMjljMC44LDAsMS43LTAuMywyLjMtMC45YzEtMC44LDIuMi0xLjIsMy40LTEu'@;
put 'MWMxLjIsMCwyLjQsMC40LDMuMywxLjJjMS4yLDEuMSwzLDEuMSw0LjIsMFxuXHRjMS45LTEuNiw0LjctMS42LDYuNSwwYzEuMiwxLjEsMywxLjEsNC4xLDBjMC45LTAuOCwyLjEtMS4yLDMuMy0xLjJjMS4xLDAsMi4yLDAuNCwzLDEuMkMzMi44LDI4LjcsMzMsMjksMzQsMjlMMzQsMzF6IiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjEsMjYuMmMwLjYtMC41LDEuMi0wLjgsMS45LTFWMjNjMC0wLjYsMC40LTEuMSwxLTEuMWgyNUwyOC40LDI1aDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yXG5cdGMwLjct'@;
put 'MC45LDAuNS0yLjEtMC40LTIuOEMzMi45LDIwLjEsMzIuNCwyMCwzMiwyMEg3Yy0xLjcsMC0zLDEuMy0zLDNMNC4xLDI2LjJMNC4xLDI2LjJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45LDE4LjlIOC45Yy0xLjEsMC0yLTAuOS0yLTJj'@;
put 'MC0wLjQsMC4xLTAuOCwwLjQtMS4ybDQuMS01LjhjMC42LTAuOSwxLjktMS4xLDIuOC0wLjVjMC41LDAuNCwwLjgsMSwwLjgsMS42VjE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC4zLDE4LjlIMTZWNi40YzAtMS4xLDAuOS0yLDIt'@;
put 'MmMwLjcsMCwxLjMsMC40LDEuNywxTDI2LDE1LjhjMC42LDEsMC4yLDIuMi0wLjcsMi43QzI1LDE4LjcsMjQuNiwxOC44LDI0LjMsMTguOVxuXHRMMjQuMywxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQ2FtcGVydmFuPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik05LjUsMjRDOS41LDI0LDkuNSwyNCw5LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVjMCwwLDAsMCwwLDBDNiwyOS40LDcuNiwzMSw5LjUsMzFjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzExLjQsMjQsOS41LDI0eiBNOS41LDI5QzguNywyOSw4'@;
put 'LDI4LjMsOCwyNy41UzguNywyNiw5LjUsMjZzMS41LDAuNywxLjUsMS41UzEwLjMsMjksOS41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLjUsMjRDMjMuNSwyNCwyMy41LDI0LDIzLjUsMjRjLTEuOSwwLTMuNSwxLjYtMy41'@;
put 'LDMuNWMwLDAsMCwwLDAsMGMwLDEuOSwxLjUsMy41LDMuNSwzLjVjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzI1LjQsMjQsMjMuNSwyNHogTTIzLjUsMjljLTAuOCwwLTEuNS0wLjctMS41LTEuNXMwLjctMS41LDEuNS0xLjVzMS41LDAuNywxLjUsMS41UzI0LjMsMjksMjMuNSwyOXoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMywyMC4xVjIwaC0wLjFsLTMuNS01LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4zVjkuN0MzMiw3LjEsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMs'@;
put 'MS4zLTMsM1xuXHRcdHYxN2gyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI0djloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwx'@;
put 'aC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wzMywyMC4xeiBNMjYsMjB2LTVoMS41bDMuMSw1SDI2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9IjkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjIsMjIgMjIsMTMgMTUsMTMgMTUsMjggMTcsMjggMTcsMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik02LDIwaDd2LTdINlYy'@;
put 'MHogTTgsMTVoM3YzSDhWMTV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41UzcuNiwzMSw5LjUsMzFjMCwwLDAsMCwwLDBjMS45LDAsMy41LTEuNiwzLjUtMy41YzAsMCwwLTAuMSwwLTAu'@;
put 'MUMxMywyNS41LDExLjQsMjQsOS41LDI0eiJcblx0XHQgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSIyMy41IiBjeT0iMjcuNSIgcj0iMy41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOS41'@;
put 'LDE0LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4yVjkuN2MwLDAsMCwwLDAtMC4xQzMyLDcsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM3YxN1xuXHRcdGgyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40'@;
put 'LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI3aC0zdjloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wyOS41LDE0LjV6IiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iNy45IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCwyMiAyMS45LDIyIDIxLjksMTMgMTUsMTMgMTUsMjggMTYuOSwyOCAx'@;
put 'Ni45LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxyZWN0IHg9IjYiIHk9IjEzIiB3aWR0aD0iNi45IiBoZWlnaHQ9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNhcmF2YW49KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjUsMjFDMTEsMjEsOSwyMyw5LDI1LjVzMiw0LjUsNC41LDQuNWMyLjUsMCw0LjUtMiw0LjUtNC41QzE4LDIzLDE2LDIxLDEzLjUsMjF6IE0xMy41LDI4Yy0xLjQsMC0yLjUtMS4xLTIuNS0yLjVcblx0XHRzMS4xLTIuNSwyLjUtMi41czIuNSwx'@;
put 'LjEsMi41LDIuNVMxNC45LDI4LDEzLjUsMjh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywy'@;
put 'LDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRcdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRc'@;
put 'dGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxMkg3djZoOVYxMnogTTE0LDE2SDl2LTJoNVYxNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'IiAvPjxwYXRoIGQ9Ik0xMy41LDMwQzExLDMwLDksMjgsOSwyNS41czItNC41LDQuNS00LjVzNC41LDIsNC41LDQuNUMxOCwyOCwxNiwzMCwxMy41LDMweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEt'@;
put 'MS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSww'@;
put 'LjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMThIN3YtNmg5VjE4eiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlRmVycnk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDI1LjFjLTEuMiwwLTIuMywwLjQtMy4zLDEuMWMwLDAsMCwwLDAsMGMtMS4xLDEuMS0zLDEuMS00LjEsMGMtMC45LTAuOC0yLjEtMS4yLTMuMy0x'@;
put 'LjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMlxuXHRcdGMtMS4yLDEuMS0zLDEuMS00LjIsMEMxMCwyNS40LDguOCwyNSw3LjYsMjVjLTEuMiwwLTIuNCwwLjQtMy40LDEuMUMzLjYsMjYuNywyLjgsMjcsMiwyN3YyYzEuMywwLjEsMi41LTAuNCwzLjQtMS4yXG5cdFx0QzYuMSwyNy4zLDYuOSwy'@;
put 'Nyw3LjcsMjdjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhcblx0XHRjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjUsMC4zLDIs'@;
put 'MC44YzAuOSwwLjcsMiwxLjEsMy4xLDEuMnYtMS45Yy0wLjcsMC0xLjQtMC4zLTEuOS0wLjlcblx0XHRDMzEuMywyNS40LDMwLjEsMjUsMjksMjUuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjksMjMuMlYyMEgzMmwtMy41LDNo'@;
put 'MC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC41LTAuNiwwLjUtMS40LDAuMi0yLjFjLTAuNC0wLjctMS0xLTEuOC0xaC00LjRcblx0XHRMMjIuNSwxMUgxN2MtMS43LDAtMywxLjMtMywzaC0yVjguMUg2djYuMWMtMS4yLDAuNC0yLDEuNS0yLDIuOHYxLjFWMjB2'@;
put 'NC4zbDAuMS0wLjFDNC42LDIzLjcsNS4yLDIzLjQsNS45LDIzLjJ6IE04LDEwaDJ2NEg4VjEwelxuXHRcdCBNNiwxN2MwLTAuNiwwLjQtMSwxLTFoOXYtMmMwLTAuNiwwLjQtMSwxLTFoNWwwLjYsMUgxOHYyaDUuOGwxLjIsMi4xSDZWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguMiwyNWMtMS4yLDAtMi40LDAuNC0zLjMsMS4yYy0xLjIsMS4xLTMsMS4xLTQuMSwwYy0xLjktMS42LTQuNi0xLjYtNi41LDBjLTEuMiwxLjEtMi45LDEuMS00LjEsMFxuXHRcdGMtMC45LTAuOC0yLTEuMi0zLjItMS4yYy0xLjIsMC0yLjMs'@;
put 'MC40LTMuMiwxLjJDMy40LDI2LjcsMi43LDI3LDIsMjd2MmMxLjEtMC4xLDIuMi0wLjUsMy4xLTEuMkM1LjYsMjcuMyw2LjMsMjcsNywyN1xuXHRcdGMwLjcsMCwxLjUsMC4zLDIsMC44YzEuOSwxLjYsNC43LDEuNiw2LjYsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4z'@;
put 'LDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwXG5cdFx0YzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNiwwLjMsMi4xLDAuOGMwLjksMC44LDIuMiwxLjMsMy40LDEuMnYtMmMtMC44LDAtMS42LTAuMy0yLjItMC44QzMwLjcsMjUuNCwyOS41LDI1LDI4LjIsMjV6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjgsMjMuMnYtMy4zaDI2LjFMMjguNCwyM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4xLTAuMmMwLjctMC45LDAuNS0yLjEtMC40LTIuOGMtMC4zLTAuMy0wLjgtMC40LTEuMi0wLjRc'@;
put 'blx0XHRoLTQuMWwtNS40LTdoLTUuNWMtMS43LDAtMywxLjMtMywzaC0yVjhINnY2LjJjLTEuMiwwLjQtMi4xLDEuNS0yLjEsMi44bDAsNy4ybDAuMSwwQzQuNSwyMy43LDUuMSwyMy40LDUuOCwyMy4yeiBNMTcuOSwxNGg0LjJcblx0XHRsMS40LDJoLTUuN1YxNHogTTcuOSwxMGgydjRoLTJW'@;
put 'MTB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVUcmFpbGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOFMxOC4yLDE5'@;
put 'LjIsMTUsMTkuMnogTTE1LDI5LjJjLTIuMywwLTQuMi0xLjktNC4yLTQuMlxuXHRcdHMxLjktNC4yLDQuMi00LjJzNC4yLDEuOSw0LjIsNC4yUzE3LjMsMjkuMiwxNSwyOS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHJlY3QgeD0iMTQiIHk9IjI0'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAs'@;
put 'MS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0XHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiBNMjYsMTNINHYtMmgyMlYxM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv'@;
put 'PjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjEx'@;
put 'aDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhsMCwwQzIwLjgsMjEuOCwxOC4y'@;
put 'LDE5LjIsMTUsMTkuMnogTTE2LDI2aC0ydi0yaDJWMjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVPbkhvbGlkYXk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA4LDIuMzRjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgs'@;
put 'MTQsMTYsMTRBMTcuOTEsMTcuOTEsMCwwLDAsMjMsMjkuNjZsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zLDEsMSwwLDAsMCwuMTYtLjU0VjI1LjYxYTEzLDEzLDAsMCwwLDQtOS4yN0MzNC4wOCw4LjYyLDI2LjksMi4zNCwxOC4wOCwyLjM0Wk0yOC4zNywyNC40NWExLDEsMCwwLDAtLjMy'@;
put 'LjczdjUuMzRsLTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMSwxNiwxNiwwLDAsMS00Ljc2LjcyYy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMSwxMS4xLDAsMCwxLDI4LjM3LDI0LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjEsMTUuODIsMzEsMTUuNjcsMjguNSwxMy40NGEzLjI1LDMuMjUsMCwwLDAtMi4zOS0uODRsLTUuMzguMzQtMy41OS0zYS44MS44MSwwLDAsMC0uNTItLjE5SDEzLjU2YS43OC43OCwwLDAsMC0uNjkuNC43Ny43NywwLDAsMCwwLC43'@;
put 'OWwxLjM2LDIuNDQtNC43MS4yOSwxLjMxLDEuNTIsMTUuMzktMWExLjY1LDEuNjUsMCwwLDEsMS4yMi40M2wyLjM2LDIuMTNhLjExLjExLDAsMCwxLDAsLjA3YzAsLjA2LS4wOS4wNS0uMS4wNkgyMS44MmwtLjM1LjM3LTUuMTksNS41M0gxNC42NGwyLjczLTUuOUg4LjU0TDcuMTMsMTQuMTYs'@;
put 'Ni41MSwxM2EuOC44LDAsMCwwLTEtLjJBLjgxLjgxLDAsMCwwLDUuMiwxMy45bDIsMy45NGExLjIxLDEuMjEsMCwwLDAsMS4wOC42NWg2LjU3bC0xLjk0LDQuMThBMS4yLDEuMiwwLDAsMCwxMywyMy44M2ExLjIyLDEuMjIsMCwwLDAsMSwuNTZoMi40M2ExLjE3LDEuMTcsMCwwLDAsLjg4LS4z'@;
put 'OWw1LjE4LTUuNTFoNy4xNmExLjY1LDEuNjUsMCwwLDAsMS41Mi0uOTFBMS43NCwxLjc0LDAsMCwwLDMxLjEsMTUuODJaTTE0LjkyLDExLjMxaDEuNDFsMi4wOSwxLjc3TDE2LDEzLjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRo'@;
put 'IGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTcuOTEsMTcuOTEsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zQTEsMSwwLDAsMCwzMCwzMi41VjI1Ljc3YTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwx'@;
put 'OCwyLjVaTTI5Ljg0LDE4SDIxLjUxYS40Mi40MiwwLDAsMC0uMy4xM2wtNS4zLDUuNjRhLjM5LjM5LDAsMCwxLS4yOS4xM0gxMy4xOWEuNDEuNDEsMCwwLDEtLjM3LS41OGwyLjQ3LTUuMzJINy40NmEuNDIuNDIsMCwwLDEtLjM2LS4yMmwtMi43LTVINi4yNGEuNTMuNTMsMCwwLDEsLjM5LjE4'@;
put 'bDEuNTYsMS42OWEuMzguMzgsMCwwLDAsLjMzLjE0bDYuMTgtLjM4LTItMy41NWgyLjg5YS40Ny40NywwLDAsMSwuMzEuMTFMMTkuNjMsMTRsNi42OS0uMzVhMi40NCwyLjQ0LDAsMCwxLDEuODEuNjNsMi40NywyLjIzQS45Mi45MiwwLDAsMSwyOS44NCwxOFoiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksRi5UcmF2ZWxTaGFwZXM9e3RydWNrOkYuQ2xyU2hhcGVUcnVjayxhaXJwbGFuZTpGLkNsclNoYXBlQWlycGxhbmUsY2FyOkYuQ2xyU2hhcGVDYXIsbWFwOkYuQ2xyU2hhcGVNYXAsY29tcGFzczpGLkNsclNoYXBlQ29tcGFzcywibWFwLW1h'@;
put 'cmtlciI6Ri5DbHJTaGFwZU1hcE1hcmtlcixiaWN5Y2xlOkYuQ2xyU2hhcGVCaWN5Y2xlLGJvYXQ6Ri5DbHJTaGFwZUJvYXQsY2FtcGVydmFuOkYuQ2xyU2hhcGVDYW1wZXJ2YW4sY2FyYXZhbjpGLkNsclNoYXBlQ2FyYXZhbixmZXJyeTpGLkNsclNoYXBlRmVycnksdHJhaWxlcjpGLkNsclNo'@;
put 'YXBlVHJhaWxlciwib24taG9saWRheSI6Ri5DbHJTaGFwZU9uSG9saWRheX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVHJhdmVsU2hhcGVzLCJwbGFuZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5haXJwbGFuZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRy'@;
put 'YXZlbFNoYXBlcywiYXV0byIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5jYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5UcmF2ZWxTaGFwZXMpfSwiLi9w'@;
put 'cm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3Jp'@;
put 'cHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3By'@;
put 'b2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFn'@;
put 'LWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuY2xySWNvblNWRz12b2lkIDA7Ri5jbHJJY29uU1ZHPWZ1bmN0aW9uIE0oTyl7dmFyIFI9IiI7cmV0dXJuIE8uaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKFIrPSJjYW4tYmFkZ2UgIiksTy5pbmRleE9mKCItLWFsZXJ0'@;
put 'ZWQiKT4tMSYmKFIrPSJjYW4tYWxlcnQgIiksTy5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoUis9Imhhcy1zb2xpZCAiKSwoUj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK1IrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0'@;
put 'IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVB'@;
put 'c3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK08rIjwvc3ZnPiJ9fX0pfSw4MjAyNToo'@;
put 'YXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPXt9O0YucihhZSksRi5kKGFlLHthcnJheUF2ZzooKT0+UkVlLGFycmF5RWFjaDooKT0+RG4sYXJyYXlGaWx0ZXI6KCk9Pl8xLGFycmF5RmxhdHRlbjooKT0+WGVlLGFycmF5TWFwOigpPT5jcyxhcnJheU1heDooKT0+SUVlLGFycmF5TWlu'@;
put 'OigpPT5MRWUsYXJyYXlSZWR1Y2U6KCk9PkFsLGFycmF5U3VtOigpPT5LZWUsYXJyYXlVbmlxdWU6KCk9PnJOLGV4dGVuZEFycmF5OigpPT5uTixnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmlOLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5PRWUsZ2V0VW5pb25PZkFycmF5czooKT0+'@;
put 'UEVlLHBpdm90OigpPT5LYixzdHJpbmdUb0FycmF5OigpPT5vTix0bzJkQXJyYXk6KCk9PnFlZX0pO3ZhciB4PXt9O0Yucih4KSxGLmQoeCx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5ydGUsaXNEZWZpbmVkOigpPT5LaSxpc0VtcHR5OigpPT5nYyxpc1JlZ0V4cDooKT0+SmVlLGlzVW5kZWZp'@;
put 'bmVkOigpPT5MYSxzdHJpbmdpZnk6KCk9Pl9sfSk7dmFyIG09e307Ri5yKG0pLEYuZChtLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5WRWUsaXNQZXJjZW50VmFsdWU6KCk9PmxOLHJhbmRvbVN0cmluZzooKT0+YU4sc2FuaXRpemU6KCk9PnJrLHN0cmlwVGFnczooKT0+dU4sc3Vic3RpdHV0ZToo'@;
put 'KT0+Y04sdG9VcHBlckNhc2VGaXJzdDooKT0+YnV9KTt2YXIgbGU9e307Ri5yKGxlKSxGLmQobGUse0hUTUxfQ0hBUkFDVEVSUzooKT0+bHRlLGFkZENsYXNzOigpPT5waSxhZGRFdmVudDooKT0+ekVlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+Zk4sY2xvc2VzdDooKT0+TnAsY2xvc2VzdERv'@;
put 'd246KCk9PnR5LGVtcHR5OigpPT5nMixmYXN0SW5uZXJIVE1MOigpPT5nZyxmYXN0SW5uZXJUZXh0OigpPT5qcCxnZXRDYXJldFBvc2l0aW9uOigpPT5oTixnZXRDb21wdXRlZFN0eWxlOigpPT56cCxnZXRDc3NUcmFuc2Zvcm06KCk9PllFZSxnZXRGcmFtZUVsZW1lbnQ6KCk9Pm90ZSxnZXRQ'@;
put 'YXJlbnQ6KCk9Pml0ZSxnZXRQYXJlbnRXaW5kb3c6KCk9PmV5LGdldFNjcm9sbExlZnQ6KCk9PmlrLGdldFNjcm9sbFRvcDooKT0+bnksZ2V0U2Nyb2xsYWJsZUVsZW1lbnQ6KCk9PnJ5LGdldFNjcm9sbGJhcldpZHRoOigpPT5MYyxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+Y3RlLGdl'@;
put 'dFNlbGVjdGlvblRleHQ6KCk9PnV0ZSxnZXRTdHlsZTooKT0+bjcsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PnZnLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9Pm1nLGdldFdpbmRvd1Njcm9sbFRvcDooKT0+dDcsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PkJFZSxoYXNDbGFzczooKT0+'@;
put 'Qm8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+aHRlLGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOigpPT5kdGUsaW5kZXg6KCk9PnN0ZSxpbm5lckhlaWdodDooKT0+amYsaW5uZXJXaWR0aDooKT0+aXksaXNDaGlsZE9mOigpPT5WcCxpc0RldGFjaGVkOigpPT5nTixpc0lucHV0OigpPT5heSxp'@;
put 'c091dHNpZGVJbnB1dDooKT0+c2ssaXNWaXNpYmxlOigpPT5lNyxtYXRjaGVzQ1NTUnVsZXM6KCk9PmpFZSxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9PnB0ZSxvZmZzZXQ6KCk9PktsLG91dGVySGVpZ2h0OigpPT5hbCxvdXRlcldpZHRoOigpPT53YSxvdmVybGF5Q29udGFpbnNF'@;
put 'bGVtZW50OigpPT5CcCxyZW1vdmVDbGFzczooKT0+V28scmVtb3ZlRXZlbnQ6KCk9PlVFZSxyZW1vdmVUZXh0Tm9kZXM6KCk9PmROLHJlc2V0Q3NzVHJhbnNmb3JtOigpPT5zeSxzZWxlY3RFbGVtZW50SWZBbGxvd2VkOigpPT5mdGUsc2V0Q2FyZXRQb3NpdGlvbjooKT0+b3ksc2V0T3Zlcmxh'@;
put 'eVBvc2l0aW9uOigpPT5va30pO3ZhciBNPXt9O0YucihNKSxGLmQoTSx7Y3Vycnk6KCk9Pm10ZSxjdXJyeVJpZ2h0OigpPT4kRWUsZGVib3VuY2U6KCk9Pm1OLGZhc3RDYWxsOigpPT5hayxpc0Z1bmN0aW9uOigpPT5SYSxwYXJ0aWFsOigpPT52TixwaXBlOigpPT5HRWUsdGhyb3R0bGU6KCk9'@;
put 'Pmd0ZSx0aHJvdHRsZUFmdGVySGl0czooKT0+V0VlfSk7dmFyIE89e307Ri5yKE8pLEYuZChPLHtjbG9uZTooKT0+V3UsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT5fZyxkZWVwQ2xvbmU6KCk9Pnl1LGRlZXBFeHRlbmQ6KCk9Pmx5LGRlZXBPYmplY3RTaXplOigpPT51ayxkZWZpbmVH'@;
put 'ZXR0ZXI6KCk9PmZoLGR1Y2tTY2hlbWE6KCk9PnI3LGV4dGVuZDooKT0+WGwsZ2V0UHJvcGVydHk6KCk9PnZ0ZSxoYXNPd25Qcm9wZXJ0eTooKT0+YmwsaW5oZXJpdDooKT0+emYsaXNPYmplY3Q6KCk9PnVzLGlzT2JqZWN0RXF1YWw6KCk9PmxrLG1peGluOigpPT5UYSxvYmplY3RFYWNoOigp'@;
put 'PT5kcyxzZXRQcm9wZXJ0eTooKT0+Y2t9KTt2YXIgUj17fTtGLnIoUiksRi5kKFIse2lzQ2hyb21lOigpPT5fTixpc0Nocm9tZVdlYktpdDooKT0+eXRlLGlzRWRnZTooKT0+Q3RlLGlzRWRnZVdlYktpdDooKT0+S0VlLGlzRmlyZWZveDooKT0+ZGssaXNGaXJlZm94V2ViS2l0OigpPT53dGUs'@;
put 'aXNJT1M6KCk9PmJOLGlzSXBhZE9TOigpPT55Tixpc0xpbnV4T1M6KCk9PlhFZSxpc01hY09TOigpPT5oayxpc01vYmlsZUJyb3dzZXI6KCk9Pm0yLGlzU2FmYXJpOigpPT5xRWUsaXNXaW5kb3dzT1M6KCk9PndOLHNldEJyb3dzZXJNZXRhOigpPT5fdGUsc2V0UGxhdGZvcm1NZXRhOigpPT5i'@;
put 'dGV9KTt2YXIgej17fTtGLnIoeiksRi5kKHose0tFWV9DT0RFUzooKT0+Y28saXNDdHJsS2V5OigpPT5RRWUsaXNDdHJsTWV0YUtleTooKT0+TXRlLGlzRnVuY3Rpb25LZXk6KCk9PkNOLGlzS2V5OigpPT5vNyxpc1ByaW50YWJsZUNoYXI6KCk9PlN0ZX0pO3ZhciBLPXt9O0YucihLKSxGLmQo'@;
put 'Syx7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9PmJnLGlzTGVmdENsaWNrOigpPT5mayxpc1JpZ2h0Q2xpY2s6KCk9PlVwLHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjooKT0+djJ9KTt2YXIgST17fTtGLnIoSSksRi5kKEkse19kYXRhVG9IVE1MOigpPT5ETixodG1sVG9Hcmlk'@;
put 'U2V0dGluZ3M6KCk9Pkl0ZSxpbnN0YW5jZVRvSFRNTDooKT0+VE59KTt2YXIgaz17fTtGLnIoayksRi5kKGsse2lzTnVtZXJpYzooKT0+R3UsaXNOdW1lcmljTGlrZTooKT0+THRlLHJhbmdlRWFjaDooKT0+dm8scmFuZ2VFYWNoUmV2ZXJzZTooKT0+dmssdmFsdWVBY2NvcmRpbmdQZXJjZW50'@;
put 'OigpPT5JTn0pO3ZhciBFPXt9O0YucihFKSxGLmQoRSx7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PmR5LGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+TnRlLGlzVG91Y2hTdXBwb3J0ZWQ6KCk9PkhOLHJlcXVlc3RBbmltYXRpb25GcmFtZTooKT0+eWt9KTt2YXIgaj17fTtGLnIoaiksRi5k'@;
put 'KGose2NvdW50Rmlyc3RSb3dLZXlzOigpPT5sVixjcmVhdGVFbXB0eVNwcmVhZHNoZWV0RGF0YTooKT0+bVRlLGNyZWF0ZVNwcmVhZHNoZWV0RGF0YTooKT0+cFRlLGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YTooKT0+Z1RlLGRhdGFSb3dUb0NoYW5nZXNBcnJheTooKT0+YVYsaXNBcnJh'@;
put 'eU9mQXJyYXlzOigpPT5wbmUsaXNBcnJheU9mT2JqZWN0czooKT0+Z25lLHNwcmVhZHNoZWV0Q29sdW1uSW5kZXg6KCk9PmZUZSxzcHJlYWRzaGVldENvbHVtbkxhYmVsOigpPT5Na30pO3ZhciBWPXt9O0YucihWKSxGLmQoVix7Q09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9Pk5W'@;
put 'LENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+elYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+cVYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+WlYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PldWLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT5VVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT4kVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PllWLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PkdWLENPTlRF'@;
put 'WFRNRU5VX0lURU1TX0JPUkRFUlM6KCk9PktWLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5RVixDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PmVCLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkpWLENPTlRFWFRNRU5VX0lURU1TX0JP'@;
put 'UkRFUlNfVE9QOigpPT5YVixDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9PkFWLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PlRWLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+TFYsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NP'@;
put 'TFVNTl9HUk9VUF9IRUFERVJTOigpPT5JVixDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PkRWLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+UlYsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5WVixDT05URVhUTUVOVV9JVEVNU19GUkVF'@;
put 'WkVfQ09MVU1OOigpPT5PVixDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+aUIsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9PnNCLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT53VixDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PkNWLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTOigpPT5GVixDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PnJCLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+bkIsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9'@;
put 'Pl9WLENPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+a1YsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmpWLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PkVWLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT50QixDT05URVhUTUVOVV9J'@;
put 'VEVNU19SRU1PVkVfQ09MVU1OOigpPT5NVixDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+QlYsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+U1YsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5iVixDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6'@;
put 'KCk9PnlWLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5vQixDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+YUIsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+eFYsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5QVixDT05URVhUTUVOVV9JVEVN'@;
put 'U19VTk1FUkdFX0NFTExTOigpPT5IVixDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5FbmUsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+UkIsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5JQixGSUxURVJTX0JVVFRPTlNfT0s6KCk9PkxCLEZJTFRFUlNfQlVUVE9OU19QTEFD'@;
put 'RUhPTERFUl9TRUFSQ0g6KCk9Pk9CLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PkZCLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+UEIsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PkRCLEZJTFRFUlNfQ09ORElUSU9OU19B'@;
put 'RlRFUjooKT0+Q0IsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+U0IsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5oQixGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+eUIsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5qVGUsRklMVEVSU19DT05E'@;
put 'SVRJT05TX0NPTlRBSU5TOigpPT5wQixGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PmxCLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmZCLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+dUIsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+bUIsRklM'@;
put 'VEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+dkIsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+X0IsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+YkIsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+eWwsRklM'@;
put 'VEVSU19DT05ESVRJT05TX05PTkU6KCk9PkxrLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+d0IsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5nQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5jQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VR'@;
put 'VUFMOigpPT5kQixGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9Pk1CLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+eEIsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+RUIsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PmtCLEZJTFRFUlNfRElW'@;
put 'U19GSUxURVJfQllfVkFMVUU6KCk9PkFCLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5UQixGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+UmssRklMVEVSU19OQU1FU1BBQ0U6KCk9PiR1LEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5Pa30pO3ZhciBCPXt9O2Z1'@;
put 'bmN0aW9uIFkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gWChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90'@;
put 'b3R5cGUuY29uc3RydWN0b3I9YSxhfUYucihCKSxGLmQoQix7Z2V0Tm9ybWFsaXplZERhdGU6KCk9PmRyZX0pO2NvbnN0IFU9WChjPT5mdW5jdGlvbihhKXtjKHRoaXMpLHRoaXMubWVzc2FnZT1hP2Ake2EubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxu'@;
put 'JHthLm1hcCgoZCxoKT0+YCR7aCsxfSkgJHtkLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1hfSk7ZnVuY3Rpb24gcShjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNl'@;
put 'KGEsMSl9fWNsYXNzIGVle2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtj'@;
put 'b25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihZKGQpKXRyeXtk'@;
put 'KCl9Y2F0Y2goZil7bD1mIGluc3RhbmNlb2YgVT9mLmVycm9yczpbZl19Y29uc3R7X2ZpbmFsaXplcnM6aH09dGhpcztpZihoKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGNvbnN0IGYgb2YgaCl0cnl7c2UoZil9Y2F0Y2goXyl7bD1sPz9bXSxfIGluc3RhbmNlb2YgVT9sPVsuLi5sLC4u'@;
put 'Ll8uZXJyb3JzXTpsLnB1c2goXyl9fWlmKGwpdGhyb3cgbmV3IFUobCl9fWFkZChsKXt2YXIgYTtpZihsJiZsIT09dGhpcylpZih0aGlzLmNsb3NlZClzZShsKTtlbHNle2lmKGwgaW5zdGFuY2VvZiBlZSl7aWYobC5jbG9zZWR8fGwuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47bC5fYWRkUGFy'@;
put 'ZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oYT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09YT9hOltdKS5wdXNoKGwpfX1faGFzUGFyZW50KGwpe2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztyZXR1cm4gYT09PWx8fEFycmF5LmlzQXJyYXkoYSkmJmEuaW5jbHVkZXMo'@;
put 'bCl9X2FkZFBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoYSk/KGEucHVzaChsKSxhKTphP1thLGxdOmx9X3JlbW92ZVBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7YT09PWw/dGhpcy5fcGFyZW50YWdlPW51'@;
put 'bGw6QXJyYXkuaXNBcnJheShhKSYmcShhLGwpfXJlbW92ZShsKXtjb25zdHtfZmluYWxpemVyczphfT10aGlzO2EmJnEoYSxsKSxsIGluc3RhbmNlb2YgZWUmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19ZWUuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgZWU7cmV0dXJuIGMuY2xvc2VkPSEwLGN9'@;
put 'KSgpO2NvbnN0IHRlPWVlLkVNUFRZO2Z1bmN0aW9uIG9lKGMpe3JldHVybiBjIGluc3RhbmNlb2YgZWV8fGMmJiJjbG9zZWQiaW4gYyYmWShjLnJlbW92ZSkmJlkoYy5hZGQpJiZZKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHNlKGMpe1koYyk/YygpOmMudW5zdWJzY3JpYmUoKX1jb25zdCBo'@;
put 'ZT17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSx1ZT17c2V0VGltZW91dChjLGwsLi4uYSl7Y29u'@;
put 'c3R7ZGVsZWdhdGU6ZH09dWU7cmV0dXJuIGQ/LnNldFRpbWVvdXQ/ZC5zZXRUaW1lb3V0KGMsbCwuLi5hKTpzZXRUaW1lb3V0KGMsbCwuLi5hKX0sY2xlYXJUaW1lb3V0KGMpe2NvbnN0e2RlbGVnYXRlOmx9PXVlO3JldHVybihsPy5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkoYyl9LGRl'@;
put 'bGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gY2UoYyl7dWUuc2V0VGltZW91dCgoKT0+e2NvbnN0e29uVW5oYW5kbGVkRXJyb3I6bH09aGU7aWYoIWwpdGhyb3cgYztsKGMpfSl9ZnVuY3Rpb24gRygpe31jb25zdCBiPU4oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIE4oYyxsLGEpe3JldHVy'@;
put 'bntraW5kOmMsdmFsdWU6bCxlcnJvcjphfX1sZXQgZz1udWxsO2Z1bmN0aW9uIEMoYyl7aWYoaGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7Y29uc3QgbD0hZztpZihsJiYoZz17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRo'@;
put 'cm93bjphLGVycm9yOmR9PWc7aWYoZz1udWxsLGEpdGhyb3cgZH19ZWxzZSBjKCl9Y2xhc3MgdiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLG9lKGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlv'@;
put 'bj1MZX1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IG5lKGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3hlKGZ1bmN0aW9uIEgoYyl7cmV0dXJuIE4oIk4iLGMsdm9pZCAwKX0obCksdGhpcyk6dGhpcy5fbmV4dChsKX1lcnJvcihsKXt0aGlzLmlzU3RvcHBlZD94ZShmdW5j'@;
put 'dGlvbiBEKGMpe3JldHVybiBOKCJFIix2b2lkIDAsYyl9KGwpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihsKSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD94ZShiLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgp'@;
put 'e3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfV9uZXh0KGwpe3RoaXMuZGVzdGluYXRpb24ubmV4dChsKX1fZXJyb3IobCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IobCl9ZmluYWxseXt0aGlzLnVu'@;
put 'c3Vic2NyaWJlKCl9fV9jb21wbGV0ZSgpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBwPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIHcoYyxsKXtyZXR1cm4gcC5jYWxsKGMsbCl9Y2xhc3MgSntjb25z'@;
put 'dHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7ZGUoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5'@;
put 'e2EuZXJyb3IobCl9Y2F0Y2goZCl7ZGUoZCl9ZWxzZSBkZShsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXtkZShhKX19fWNsYXNzIG5lIGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCl7'@;
put 'bGV0IGg7aWYoc3VwZXIoKSxZKGwpfHwhbCloPXtuZXh0Omw/P3ZvaWQgMCxlcnJvcjphPz92b2lkIDAsY29tcGxldGU6ZD8/dm9pZCAwfTtlbHNle2xldCBmO3RoaXMmJmhlLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8oZj1PYmplY3QuY3JlYXRlKGwpLGYudW5zdWJzY3JpYmU9KCk9PnRo'@;
put 'aXMudW5zdWJzY3JpYmUoKSxoPXtuZXh0OmwubmV4dCYmdyhsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmdyhsLmVycm9yLGYpLGNvbXBsZXRlOmwuY29tcGxldGUmJncobC5jb21wbGV0ZSxmKX0pOmg9bH10aGlzLmRlc3RpbmF0aW9uPW5ldyBKKGgpfX1mdW5jdGlvbiBkZShjKXtoZS51c2VE'@;
put 'ZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFMoYyl7aGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZyYmKGcuZXJyb3JUaHJvd249ITAsZy5lcnJvcj1jKX0oYyk6Y2UoYyl9ZnVuY3Rpb24geGUoYyxsKXtjb25zdHtvblN0b3BwZWRO'@;
put 'b3RpZmljYXRpb246YX09aGU7YSYmdWUuc2V0VGltZW91dCgoKT0+YShjLGwpKX1jb25zdCBMZT17Y2xvc2VkOiEwLG5leHQ6RyxlcnJvcjpmdW5jdGlvbiBmZShjKXt0aHJvdyBjfSxjb21wbGV0ZTpHfSxGZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8'@;
put 'IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gT2UoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gV2UoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9PZToxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBLZT0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBsdChjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHZ8fGZ1bmN0aW9u'@;
put 'IFFlKGMpe3JldHVybiBjJiZZKGMubmV4dCkmJlkoYy5lcnJvcikmJlkoYy5jb21wbGV0ZSl9KGMpJiZvZShjKX0oYSk/YTpuZXcgbmUoYSxkLGgpO3JldHVybiBDKCgpPT57Y29uc3R7b3BlcmF0b3I6Xyxzb3VyY2U6VH09dGhpcztmLmFkZChfP18uY2FsbChmLFQpOlQ/dGhpcy5fc3Vic2Ny'@;
put 'aWJlKGYpOnRoaXMuX3RyeVN1YnNjcmliZShmKSl9KSxmfV90cnlTdWJzY3JpYmUoYSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoYSl9Y2F0Y2goZCl7YS5lcnJvcihkKX19Zm9yRWFjaChhLGQpe3JldHVybiBuZXcoZD1ZZShkKSkoKGgsZik9Pntjb25zdCBfPW5ldyBuZSh7bmV4dDpU'@;
put 'PT57dHJ5e2EoVCl9Y2F0Y2goVyl7ZihXKSxfLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpmLGNvbXBsZXRlOmh9KTt0aGlzLnN1YnNjcmliZShfKX0pfV9zdWJzY3JpYmUoYSl7dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuc3Vic2NyaWJl'@;
put 'KGEpfVtGZV0oKXtyZXR1cm4gdGhpc31waXBlKC4uLmEpe3JldHVybiBXZShhKSh0aGlzKX10b1Byb21pc2UoYSl7cmV0dXJuIG5ldyhhPVllKGEpKSgoZCxoKT0+e2xldCBmO3RoaXMuc3Vic2NyaWJlKF89PmY9XyxfPT5oKF8pLCgpPT5kKGYpKX0pfX1yZXR1cm4gYy5jcmVhdGU9bD0+bmV3'@;
put 'IGMobCksY30pKCk7ZnVuY3Rpb24gWWUoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1jPz9oZS5Qcm9taXNlKSYmdm9pZCAwIT09bD9sOlByb21pc2V9Y29uc3QgUGU9WChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNz'@;
put 'YWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBiZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgS2V7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMu'@;
put 'aGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgQWUodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgUGV9bmV4dChhKXtDKCgpPT57aWYodGhpcy5fdGhyb3dJ'@;
put 'ZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpZC5uZXh0KGEpfX0pfWVycm9yKGEpe0MoKCk9'@;
put 'PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmhhc0Vycm9yPXRoaXMuaXNTdG9wcGVkPSEwLHRoaXMudGhyb3duRXJyb3I9YTtjb25zdHtvYnNlcnZlcnM6ZH09dGhpcztmb3IoO2QubGVuZ3RoOylkLnNoaWZ0KCkuZXJyb3IoYSl9fSl9Y29tcGxldGUo'@;
put 'KXtDKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlz'@;
put 'LmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhp'@;
put 'cy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0'@;
put 'e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/dGU6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgZWUoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxxKGYsYSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVz'@;
put 'ZXMoYSl7Y29uc3R7aGFzRXJyb3I6ZCx0aHJvd25FcnJvcjpoLGlzU3RvcHBlZDpmfT10aGlzO2Q/YS5lcnJvcihoKTpmJiZhLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7Y29uc3QgYT1uZXcgS2U7cmV0dXJuIGEuc291cmNlPXRoaXMsYX19cmV0dXJuIGMuY3JlYXRlPShsLGEpPT5uZXcg'@;
put 'QWUobCxhKSxjfSkoKTtjbGFzcyBBZSBleHRlbmRzIGJle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPWwsdGhpcy5zb3VyY2U9YX1uZXh0KGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6'@;
put 'YS5uZXh0KXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9ZXJyb3IobCl7dmFyIGEsZDtudWxsPT09KGQ9bnVsbD09PShhPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmVycm9yKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9Y29tcGxldGUoKXt2YXIgbCxhO251bGw9'@;
put 'PT0oYT1udWxsPT09KGw9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWw/dm9pZCAwOmwuY29tcGxldGUpfHx2b2lkIDA9PT1hfHxhLmNhbGwobCl9X3N1YnNjcmliZShsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGQ9bnVsbD09PShhPXRoaXMuc291cmNlKXx8dm9pZCAwPT09YT92b2lk'@;
put 'IDA6YS5zdWJzY3JpYmUobCkpJiZ2b2lkIDAhPT1kP2Q6dGV9fWNsYXNzIFRlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl92YWx1ZT1sfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZShsKXtjb25zdCBhPXN1cGVyLl9zdWJzY3Jp'@;
put 'YmUobCk7cmV0dXJuIWEuY2xvc2VkJiZsLm5leHQodGhpcy5fdmFsdWUpLGF9Z2V0VmFsdWUoKXtjb25zdHtoYXNFcnJvcjpsLHRocm93bkVycm9yOmEsX3ZhbHVlOmR9PXRoaXM7aWYobCl0aHJvdyBhO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksZH1uZXh0KGwpe3N1cGVyLm5leHQo'@;
put 'dGhpcy5fdmFsdWU9bCl9fWZ1bmN0aW9uIHFlKGMpe3JldHVybiBZKGM/LmxpZnQpfWZ1bmN0aW9uIFhlKGMpe3JldHVybiBsPT57aWYocWUobCkpcmV0dXJuIGwubGlmdChmdW5jdGlvbihhKXt0cnl7cmV0dXJuIGMoYSx0aGlzKX1jYXRjaChkKXt0aGlzLmVycm9yKGQpfX0pO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fWZ1bmN0aW9uIFVlKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBodChjLGwsYSxkLGgpfWNsYXNzIGh0IGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIobCksdGhpcy5vbkZp'@;
put 'bmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT1fLHRoaXMuX25leHQ9YT9mdW5jdGlvbihUKXt0cnl7YShUKX1jYXRjaChXKXtsLmVycm9yKFcpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihUKXt0cnl7aChUKX1jYXRjaChXKXtsLmVycm9yKFcpfWZpbmFsbHl7'@;
put 'dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKFQpe2wuZXJyb3IoVCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5z'@;
put 'aG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBNZShjLGwpe3Jl'@;
put 'dHVybiBYZSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoVWUoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1mdW5jdGlvbiBNdChjLGwsYSxkKXt2YXIgXyxoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny'@;
put 'aXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBUPWMubGVuZ3RoLTE7VD49MDtULS0pKF89Y1tUXSkmJihmPShoPDM/XyhmKTpo'@;
put 'PjM/XyhsLGEsZik6XyhsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIF90KGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgX3Q/KHRoaXMudj1jLHRoaXMpOm5ldyBfdChjKX1mdW5jdGlvbiBydChjKXtpZighU3ltYm9sLmFz'@;
put 'eW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEsbD1jW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbD9sLmNhbGwoYyk6KGM9ZnVuY3Rpb24gZnQoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGE9bCYmY1tsXSxkPTA7aWYoYSlyZXR1cm4gYS5jYWxsKGMpO2lmKGMmJiJudW1iZXIiPT10eXBlb2YgYy5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyYmZD49Yy5sZW5ndGgmJihjPXZvaWQgMCkse3ZhbHVlOmMmJmNbZCsr'@;
put 'XSxkb25lOiFjfX19O3Rocm93IG5ldyBUeXBlRXJyb3IobD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KGMpLGE9e30sZCgibmV4dCIpLGQoInRocm93IiksZCgicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpc30sYSk7ZnVuY3Rpb24gZChmKXthW2ZdPWNbZl0mJmZ1bmN0aW9uKF8pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihULFcpeyFmdW5jdGlvbiBoKGYsXyxULFcpe1Byb21pc2UucmVzb2x2ZShXKS50aGVuKGZ1bmN0aW9uKGllKXtmKHt2YWx1ZTppZSxk'@;
put 'b25lOlR9KX0sXyl9KFQsVywoXz1jW2ZdKF8pKS5kb25lLF8udmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7Y29uc3QgUm49Yz0+YyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIGM7ZnVu'@;
put 'Y3Rpb24gJHQoYyl7cmV0dXJuIFkoYz8udGhlbil9ZnVuY3Rpb24gRm4oYyl7cmV0dXJuIFkoY1tGZV0pfWZ1bmN0aW9uIG5pKGMpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmWShjPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBsbihjKXtyZXR1cm4gbmV3IFR5cGVF'@;
put 'cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg'@;
put 'QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHFyPWZ1bmN0aW9uIGpuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gZ2koYyl7cmV0dXJuIFko'@;
put 'Yz8uW3FyXSl9ZnVuY3Rpb24geHIoYyl7cmV0dXJuIGZ1bmN0aW9uIE50KGMsbCxhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGgsZD1hLmFwcGx5KGMsbHx8W10pLGY9W107'@;
put 'cmV0dXJuIGg9e30sXygibmV4dCIpLF8oInRocm93IiksXygicmV0dXJuIiksaFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saDtmdW5jdGlvbiBfKEVlKXtkW0VlXSYmKGhbRWVdPWZ1bmN0aW9uKFplKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o'@;
put 'aXQsZXQpe2YucHVzaChbRWUsWmUsaXQsZXRdKT4xfHxUKEVlLFplKX0pfSl9ZnVuY3Rpb24gVChFZSxaZSl7dHJ5eyFmdW5jdGlvbiBXKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIF90P1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKGllLHBlKTp3ZShmWzBdWzJdLEVlKX0oZFtF'@;
put 'ZV0oWmUpKX1jYXRjaChpdCl7d2UoZlswXVszXSxpdCl9fWZ1bmN0aW9uIGllKEVlKXtUKCJuZXh0IixFZSl9ZnVuY3Rpb24gcGUoRWUpe1QoInRocm93IixFZSl9ZnVuY3Rpb24gd2UoRWUsWmUpe0VlKFplKSxmLnNoaWZ0KCksZi5sZW5ndGgmJlQoZlswXVswXSxmWzBdWzFdKX19KHRoaXMs'@;
put 'YXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgX3QoYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIF90KHZvaWQgMCk7eWllbGQgeWllbGQgX3QoZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9j'@;
put 'aygpfX0pfWZ1bmN0aW9uIFVpKGMpe3JldHVybiBZKGM/LmdldFJlYWRlcil9ZnVuY3Rpb24gS3IoYyl7aWYoYyBpbnN0YW5jZW9mIEtlKXJldHVybiBjO2lmKG51bGwhPWMpe2lmKEZuKGMpKXJldHVybiBmdW5jdGlvbiBubyhjKXtyZXR1cm4gbmV3IEtlKGw9Pntjb25zdCBhPWNbRmVdKCk7'@;
put 'aWYoWShhLnN1YnNjcmliZSkpcmV0dXJuIGEuc3Vic2NyaWJlKGwpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0oYyk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIEhyKGMpe3Jl'@;
put 'dHVybiBuZXcgS2UobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gcWkoYyl7cmV0dXJuIG5ldyBLZShsPT57Yy50aGVuKGE9PntsLmNsb3NlZHx8KGwubmV4dChh'@;
put 'KSxsLmNvbXBsZXRlKCkpfSxhPT5sLmVycm9yKGEpKS50aGVuKG51bGwsY2UpfSl9KGMpO2lmKG5pKGMpKXJldHVybiBhbyhjKTtpZihnaShjKSlyZXR1cm4gZnVuY3Rpb24gSmkoYyl7cmV0dXJuIG5ldyBLZShsPT57Zm9yKGNvbnN0IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0'@;
put 'dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihVaShjKSlyZXR1cm4gZnVuY3Rpb24gcm8oYyl7cmV0dXJuIGFvKHhyKGMpKX0oYyl9dGhyb3cgbG4oYyl9ZnVuY3Rpb24gYW8oYyl7cmV0dXJuIG5ldyBLZShsPT57KGZ1bmN0aW9uIGlvKGMsbCl7dmFyIGEsZCxoLGY7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IFduKGMsbCxhLGQpe3JldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKGYsXyl7ZnVuY3Rpb24gVChwZSl7dHJ5e2llKGQubmV4dChwZSkpfWNhdGNoKHdlKXtfKHdlKX19ZnVuY3Rpb24gVyhwZSl7dHJ5e2llKGQudGhyb3cocGUpKX1jYXRjaCh3ZSl7Xyh3ZSl9fWZ1bmN0aW9u'@;
put 'IGllKHBlKXtwZS5kb25lP2YocGUudmFsdWUpOmZ1bmN0aW9uIGgoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBhP2Y6bmV3IGEoZnVuY3Rpb24oXyl7XyhmKX0pfShwZS52YWx1ZSkudGhlbihULFcpfWllKChkPWQuYXBwbHkoYyxsfHxbXSkpLm5leHQoKSl9KX0odGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKigpe3RyeXtmb3IoYT1ydChjKTshKGQ9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlmKGwubmV4dChkLnZhbHVlKSxsLmNsb3NlZClyZXR1cm59Y2F0Y2goXyl7aD17ZXJyb3I6X319ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKGY9YS5yZXR1cm4pJiYoeWllbGQgZi5jYWxsKGEp'@;
put 'KX1maW5hbGx5e2lmKGgpdGhyb3cgaC5lcnJvcn19bC5jb21wbGV0ZSgpfSl9KShjLGwpLmNhdGNoKGE9PmwuZXJyb3IoYSkpfSl9ZnVuY3Rpb24gR2koYyxsLGEsZD0wLGg9ITEpe2NvbnN0IGY9bC5zY2hlZHVsZShmdW5jdGlvbigpe2EoKSxoP2MuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxk'@;
put 'KSk6dGhpcy51bnN1YnNjcmliZSgpfSxkKTtpZihjLmFkZChmKSwhaClyZXR1cm4gZn1mdW5jdGlvbiB5cihjLGwsYT0xLzApe3JldHVybiBZKGwpP3lyKChkLGgpPT5NZSgoZixfKT0+bChkLGYsaCxfKSkoS3IoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksWGUoKGQs'@;
put 'aCk9PmZ1bmN0aW9uIGhvKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1bXTtsZXQgaWU9MCxwZT0wLHdlPSExO2NvbnN0IEVlPSgpPT57d2UmJiFXLmxlbmd0aCYmIWllJiZsLmNvbXBsZXRlKCl9LFplPWV0PT5pZTxkP2l0KGV0KTpXLnB1c2goZXQpLGl0PWV0PT57ZiYmbC5uZXh0KGV0KSxp'@;
put 'ZSsrO2xldCB5dD0hMTtLcihhKGV0LHBlKyspKS5zdWJzY3JpYmUoVWUobCxFdD0+e2g/LihFdCksZj9aZShFdCk6bC5uZXh0KEV0KX0sKCk9Pnt5dD0hMH0sdm9pZCAwLCgpPT57aWYoeXQpdHJ5e2ZvcihpZS0tO1cubGVuZ3RoJiZpZTxkOyl7Y29uc3QgRXQ9Vy5zaGlmdCgpO18/R2kobCxf'@;
put 'LCgpPT5pdChFdCkpOml0KEV0KX1FZSgpfWNhdGNoKEV0KXtsLmVycm9yKEV0KX19KSl9O3JldHVybiBjLnN1YnNjcmliZShVZShsLFplLCgpPT57d2U9ITAsRWUoKX0pKSwoKT0+e1Q/LigpfX0oZCxoLGMsYSkpKX1mdW5jdGlvbiBQaShjPTEvMCl7cmV0dXJuIHlyKE9lLGMpfWNvbnN0IExv'@;
put 'PW5ldyBLZShjPT5jLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIFJjKGMpe3JldHVybiBjJiZZKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIHVsKGMpe3JldHVybiBjW2MubGVuZ3RoLTFdfWZ1bmN0aW9uIE9jKGMpe3JldHVybiBZKHVsKGMpKT9jLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBOMChjKXtyZXR1'@;
put 'cm4gUmModWwoYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGsyKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PnthLnN1YnNjcmliZShVZShkLGg9PkdpKGQsYywoKT0+ZC5uZXh0KGgpLGwpLCgpPT5HaShkLGMsKCk9PmQuY29tcGxldGUoKSxsKSxoPT5HaShkLGMsKCk9PmQuZXJyb3IoaCks'@;
put 'bCkpKX0pfWZ1bmN0aW9uIGUwKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PntkLmFkZChjLnNjaGVkdWxlKCgpPT5hLnN1YnNjcmliZShkKSxsKSl9KX1mdW5jdGlvbiBBMihjLGwpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IEtl'@;
put 'KGE9PntHaShhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7R2koYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTphLm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIGVhKGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24g'@;
put 'UGgoYyxsKXtpZihudWxsIT1jKXtpZihGbihjKSlyZXR1cm4gZnVuY3Rpb24geHUoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIFBhKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVs'@;
put 'ZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gZnMoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYo'@;
put 'bmkoYykpcmV0dXJuIEEyKGMsbCk7aWYoZ2koYykpcmV0dXJuIGZ1bmN0aW9uIFNyKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ7cmV0dXJuIEdpKGEsbCwoKT0+e2Q9Y1txcl0oKSxHaShhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2go'@;
put 'Xyl7cmV0dXJuIHZvaWQgYS5lcnJvcihfKX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PlkoZD8ucmV0dXJuKSYmZC5yZXR1cm4oKX0pfShjLGwpO2lmKFVpKGMpKXJldHVybiBmdW5jdGlvbiBhMyhjLGwpe3JldHVybiBBMih4cihjKSxsKX0oYyxsKX10aHJvdyBsbihj'@;
put 'KX0oYyxsKTpLcihjKX1mdW5jdGlvbiBpcyguLi5jKXtjb25zdCBsPU4wKGMpLGE9ZnVuY3Rpb24gczMoYyxsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHVsKGMpP2MucG9wKCk6bH0oYywxLzApLGQ9YztyZXR1cm4gZC5sZW5ndGg/MT09PWQubGVuZ3RoP0tyKGRbMF0pOlBpKGEpKGVhKGQs'@;
put 'bCkpOkxvfWZ1bmN0aW9uIFdpKC4uLmMpe3JldHVybiBlYShjLE4wKGMpKX1mdW5jdGlvbiAkYShjPXt9KXtjb25zdHtjb25uZWN0b3I6bD0oKCk9Pm5ldyBiZSkscmVzZXRPbkVycm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmQ9ITAscmVzZXRPblJlZkNvdW50WmVybzpoPSEwfT1jO3JldHVy'@;
put 'biBmPT57bGV0IF8sVCxXLGllPTAscGU9ITEsd2U9ITE7Y29uc3QgRWU9KCk9PntUPy51bnN1YnNjcmliZSgpLFQ9dm9pZCAwfSxaZT0oKT0+e0VlKCksXz1XPXZvaWQgMCxwZT13ZT0hMX0saXQ9KCk9Pntjb25zdCBldD1fO1plKCksZXQ/LnVuc3Vic2NyaWJlKCl9O3JldHVybiBYZSgoZXQs'@;
put 'eXQpPT57aWUrKywhd2UmJiFwZSYmRWUoKTtjb25zdCBFdD1XPVc/P2woKTt5dC5hZGQoKCk9PntpZS0tLDA9PT1pZSYmIXdlJiYhcGUmJihUPXQwKGl0LGgpKX0pLEV0LnN1YnNjcmliZSh5dCksIV8mJmllPjAmJihfPW5ldyBuZSh7bmV4dDpTdD0+RXQubmV4dChTdCksZXJyb3I6U3Q9Pnt3'@;
put 'ZT0hMCxFZSgpLFQ9dDAoWmUsYSxTdCksRXQuZXJyb3IoU3QpfSxjb21wbGV0ZTooKT0+e3BlPSEwLEVlKCksVD10MChaZSxkKSxFdC5jb21wbGV0ZSgpfX0pLEtyKGV0KS5zdWJzY3JpYmUoXykpfSkoZil9fWZ1bmN0aW9uIHQwKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygp'@;
put 'O2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgbmUoe25leHQ6KCk9PntkLnVuc3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBLcihsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gU2EoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD1udWxsLGY9MCxfPSExO2NvbnN0IFQ9KCk9'@;
put 'Pl8mJiFoJiZkLmNvbXBsZXRlKCk7YS5zdWJzY3JpYmUoVWUoZCxXPT57aD8udW5zdWJzY3JpYmUoKTtsZXQgaWU9MDtjb25zdCBwZT1mKys7S3IoYyhXLHBlKSkuc3Vic2NyaWJlKGg9VWUoZCx3ZT0+ZC5uZXh0KGw/bChXLHdlLHBlLGllKyspOndlKSwoKT0+e2g9bnVsbCxUKCl9KSl9LCgp'@;
put 'PT57Xz0hMCxUKCl9KSl9KX1mdW5jdGlvbiBFdShjLGwpe3JldHVybiBjPT09bH1mdW5jdGlvbiBBcyhjKXtmb3IobGV0IGwgaW4gYylpZihjW2xdPT09QXMpcmV0dXJuIGw7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1m'@;
put 'dW5jdGlvbiBuMChjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmIWMuaGFzT3duUHJvcGVydHkoYSkmJihjW2FdPWxbYV0pfWZ1bmN0aW9uIHFhKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiJbIitj'@;
put 'Lm1hcChxYSkuam9pbigiLCAiKSsiXSI7aWYobnVsbD09YylyZXR1cm4iIitjO2lmKGMub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7Yy5vdmVycmlkZGVuTmFtZX1gO2lmKGMubmFtZSlyZXR1cm5gJHtjLm5hbWV9YDtjb25zdCBsPWMudG9TdHJpbmcoKTtpZihudWxsPT1sKXJldHVybiIiK2w7'@;
put 'Y29uc3QgYT1sLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1hP2w6bC5zdWJzdHJpbmcoMCxhKX1mdW5jdGlvbiBfYyhjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWM/bnVsbD09PWw/IiI6bDpudWxsPT1sfHwiIj09PWw/YzpjKyIgIitsfWNvbnN0IEhoPUFzKHtfX2ZvcndhcmRfcmVmX186'@;
put 'QXN9KTtmdW5jdGlvbiBJcyhjKXtyZXR1cm4gYy5fX2ZvcndhcmRfcmVmX189SXMsYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBxYSh0aGlzKCkpfSxjfWZ1bmN0aW9uIGJvKGMpe3JldHVybiByMChjKT9jKCk6Y31mdW5jdGlvbiByMChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'YyYmYy5oYXNPd25Qcm9wZXJ0eShIaCkmJmMuX19mb3J3YXJkX3JlZl9fPT09SXN9ZnVuY3Rpb24gVDIoYyl7cmV0dXJuIGMmJiEhYy5cdTAyNzVwcm92aWRlcnN9Y29uc3QgbDM9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiO2NsYXNzIEFyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0'@;
put 'b3IobCxhKXtzdXBlcihmdW5jdGlvbiBiYyhjLGwpe3JldHVybmBORzAke01hdGguYWJzKGMpfSR7bD8iOiAiK2w6IiJ9YH0obCxhKSksdGhpcy5jb2RlPWx9fWZ1bmN0aW9uIGtvKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0aW9uIFFp'@;
put 'KGMsbCl7dGhyb3cgbmV3IEFyKC0yMDEsITEpfWZ1bmN0aW9uIHByKGMsbCl7bnVsbD09YyYmZnVuY3Rpb24gSG8oYyxsLGEsZCl7dGhyb3cgbmV3IEVycm9yKGBBU1NFUlRJT04gRVJST1I6ICR7Y31gKyhudWxsPT1kPyIiOmAgW0V4cGVjdGVkPT4gJHthfSAke2R9ICR7bH0gPD1BY3R1YWxd'@;
put 'YCkpfShsLGMsbnVsbCwiIT0iKX1mdW5jdGlvbiBocihjKXtyZXR1cm57dG9rZW46Yy50b2tlbixwcm92aWRlZEluOmMucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OmMuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIG1pKGMpe3JldHVybntwcm92aWRlcnM6Yy5wcm92aWRlcnN8fFtd'@;
put 'LGltcG9ydHM6Yy5pbXBvcnRzfHxbXX19ZnVuY3Rpb24geGQoYyl7cmV0dXJuIEIwKGMsYzMpfHxCMChjLE5zKX1mdW5jdGlvbiBCMChjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KGwpP2NbbF06bnVsbH1mdW5jdGlvbiBubShjKXtyZXR1cm4gYyYmKGMuaGFzT3duUHJvcGVydHkoamgp'@;
put 'fHxjLmhhc093blByb3BlcnR5KEs3KSk/Y1tqaF06bnVsbH1jb25zdCBjMz1Bcyh7XHUwMjc1cHJvdjpBc30pLGpoPUFzKHtcdTAyNzVpbmo6QXN9KSxOcz1Bcyh7bmdJbmplY3RhYmxlRGVmOkFzfSksSzc9QXMoe25nSW5qZWN0b3JEZWY6QXN9KTt2YXIgbnM9ZnVuY3Rpb24oYyl7cmV0dXJu'@;
put 'IGNbYy5EZWZhdWx0PTBdPSJEZWZhdWx0IixjW2MuSG9zdD0xXT0iSG9zdCIsY1tjLlNlbGY9Ml09IlNlbGYiLGNbYy5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLGNbYy5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGN9KG5zfHx7fSk7bGV0IGg0O2Z1bmN0aW9uIGRpKGMpe2NvbnN0IGw9aDQ7cmV0'@;
put 'dXJuIGg0PWMsbH1mdW5jdGlvbiBXcyhjLGwsYSl7Y29uc3QgZD14ZChjKTtyZXR1cm4gZCYmInJvb3QiPT1kLnByb3ZpZGVkSW4/dm9pZCAwPT09ZC52YWx1ZT9kLnZhbHVlPWQuZmFjdG9yeSgpOmQudmFsdWU6YSZucy5PcHRpb25hbD9udWxsOnZvaWQgMCE9PWw/bDp2b2lkIFFpKHFhKGMp'@;
put 'KX1jb25zdCBPaT0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNl'@;
put 'b2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksczA9e30sazE9Il9fTkdfRElfRkxBR19fIixrdT0ibmdUZW1wVG9rZW5QYXRoIixyYz0vXG4vZ20sb209Il9fc291cmNlIjtsZXQga2Q7ZnVuY3Rpb24gQTEoYyl7Y29uc3QgbD1rZDtyZXR1cm4ga2Q9YyxsfWZ1bmN0aW9uIFg3KGMsbD1u'@;
put 'cy5EZWZhdWx0KXtpZih2b2lkIDA9PT1rZCl0aHJvdyBuZXcgQXIoLTIwMywhMSk7cmV0dXJuIG51bGw9PT1rZD9XcyhjLHZvaWQgMCxsKTprZC5nZXQoYyxsJm5zLk9wdGlvbmFsP251bGw6dm9pZCAwLGwpfWZ1bmN0aW9uIGFyKGMsbD1ucy5EZWZhdWx0KXtyZXR1cm4oZnVuY3Rpb24gc3Mo'@;
put 'KXtyZXR1cm4gaDR9KCl8fFg3KShibyhjKSxsKX1mdW5jdGlvbiBGaShjLGw9bnMuRGVmYXVsdCl7cmV0dXJuIGFyKGMsYTAobCkpfWZ1bmN0aW9uIGEwKGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9jOjB8KGMub3B0aW9uYWwmJjgpfChjLmhvc3QmJjEpfChj'@;
put 'LnNlbGYmJjIpfChjLnNraXBTZWxmJiY0KX1mdW5jdGlvbiBLYyhjKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWJvKGNbYV0pO2lmKEFycmF5LmlzQXJyYXkoZCkpe2lmKDA9PT1kLmxlbmd0aCl0aHJvdyBuZXcgQXIoOTAwLCExKTtsZXQgaCxmPW5z'@;
put 'LkRlZmF1bHQ7Zm9yKGxldCBfPTA7XzxkLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZFtfXSxXPXNtKFQpOyJudW1iZXIiPT10eXBlb2YgVz8tMT09PVc/aD1ULnRva2VuOmZ8PVc6aD1UfWwucHVzaChhcihoLGYpKX1lbHNlIGwucHVzaChhcihkKSl9cmV0dXJuIGx9ZnVuY3Rpb24gemgoYyxsKXty'@;
put 'ZXR1cm4gY1trMV09bCxjLnByb3RvdHlwZVtrMV09bCxjfWZ1bmN0aW9uIHNtKGMpe3JldHVybiBjW2sxXX1mdW5jdGlvbiBkdShjKXtyZXR1cm57dG9TdHJpbmc6Y30udG9TdHJpbmcoKX12YXIgVDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5PblB1c2g9MF09Ik9uUHVzaCIsY1tjLkRlZmF1'@;
put 'bHQ9MV09IkRlZmF1bHQiLGN9KFQxfHx7fSksUGM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLGNbYy5Ob25lPTJdPSJOb25lIixjW2MuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20iLGN9KFBjfHx7fSk7Y29uc3QgWGM9e30sU3M9W10sVGQ9QXMoe1x1MDI3'@;
put 'NWNtcDpBc30pLFVoPUFzKHtcdTAyNzVkaXI6QXN9KSxKYz1Bcyh7XHUwMjc1cGlwZTpBc30pLEQxPUFzKHtcdTAyNzVtb2Q6QXN9KSxsMD1Bcyh7XHUwMjc1ZmFjOkFzfSksWmg9QXMoe19fTkdfRUxFTUVOVF9JRF9fOkFzfSksbWE9QXMoe19fTkdfRU5WX0lEX186QXN9KTtmdW5jdGlvbiBG'@;
put 'YyhjLGwsYSl7bGV0IGQ9Yy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBoPWMuaW5kZXhPZihsLGEpO2lmKC0xPT09aClyZXR1cm4gaDtpZigwPT09aHx8Yy5jaGFyQ29kZUF0KGgtMSk8PTMyKXtjb25zdCBmPWwubGVuZ3RoO2lmKGgrZj09PWR8fGMuY2hhckNvZGVBdChoK2YpPD0zMilyZXR1cm4g'@;
put 'aH1hPWgrMX19ZnVuY3Rpb24gRGQoYyxsLGEpe2xldCBkPTA7Zm9yKDtkPGEubGVuZ3RoOyl7Y29uc3QgaD1hW2RdO2lmKCJudW1iZXIiPT10eXBlb2YgaCl7aWYoMCE9PWgpYnJlYWs7ZCsrO2NvbnN0IGY9YVtkKytdLF89YVtkKytdLFQ9YVtkKytdO2Muc2V0QXR0cmlidXRlKGwsXyxULGYp'@;
put 'fWVsc2V7Y29uc3QgZj1oLF89YVsrK2RdO2Y0KGYpP2Muc2V0UHJvcGVydHkobCxmLF8pOmMuc2V0QXR0cmlidXRlKGwsZixfKSxkKyt9fXJldHVybiBkfWZ1bmN0aW9uIFIyKGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIGY0KGMpe3JldHVybiA2ND09PWMuY2hhckNv'@;
put 'ZGVBdCgwKX1mdW5jdGlvbiBZaChjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9'@;
put 'aDowPT09YXx8cDQoYyxhLGgsbnVsbCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gcDQoYyxsLGEsZCxoKXtsZXQgZj0wLF89Yy5sZW5ndGg7aWYoLTE9PT1sKV89LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZisrXTtpZigibnVtYmVy'@;
put 'Ij09dHlwZW9mIFQpe2lmKFQ9PT1sKXtfPS0xO2JyZWFrfWlmKFQ+bCl7Xz1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBUKWJyZWFrO2lmKFQ9PT1hKXtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsIT09aCYmKGNbZisx'@;
put 'XT1oKSk7aWYoZD09PWNbZisxXSlyZXR1cm4gdm9pZChjW2YrMl09aCl9ZisrLG51bGwhPT1kJiZmKyssbnVsbCE9PWgmJmYrK30tMSE9PV8mJihjLnNwbGljZShfLDAsbCksZj1fKzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1kJiZjLnNwbGljZShmKyssMCxkKSxudWxsIT09aCYmYy5z'@;
put 'cGxpY2UoZisrLDAsaCl9Y29uc3QgZzQ9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiBKNyhjLGwsYSl7bGV0IGQ9MCxoPSEwO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZCsrXTtpZigic3RyaW5nIj09dHlwZW9mIGYmJmgpe2NvbnN0IF89Y1tkKytdO2lmKGEmJiJjbGFzcyI9PT1mJiYtMSE9'@;
put 'PUZjKF8udG9Mb3dlckNhc2UoKSxsLDApKXJldHVybiEwfWVsc2V7aWYoMT09PWYpe2Zvcig7ZDxjLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihmPWNbZCsrXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWwpcmV0dXJuITA7cmV0dXJuITF9Im51bWJlciI9PXR5cGVvZiBmJiYoaD0hMSl9fXJl'@;
put 'dHVybiExfWZ1bmN0aW9uIHUzKGMpe3JldHVybiA0PT09Yy50eXBlJiZjLnZhbHVlIT09ZzR9ZnVuY3Rpb24gTWEoYyxsLGEpe3JldHVybiBsPT09KDQhPT1jLnR5cGV8fGE/Yy52YWx1ZTpnNCl9ZnVuY3Rpb24gYzAoYyxsLGEpe2xldCBkPTQ7Y29uc3QgaD1jLmF0dHJzfHxbXSxmPWZ1bmN0'@;
put 'aW9uIFE3KGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKFIyKGNbbF0pKXJldHVybiBsO3JldHVybiBjLmxlbmd0aH0oaCk7bGV0IF89ITE7Zm9yKGxldCBUPTA7VDxsLmxlbmd0aDtUKyspe2NvbnN0IFc9bFtUXTtpZigibnVtYmVyIiE9dHlwZW9mIFcpe2lmKCFfKWlmKDQmZCl7'@;
put 'aWYoZD0yfDEmZCwiIiE9PVcmJiFNYShjLFcsYSl8fCIiPT09VyYmMT09PWwubGVuZ3RoKXtpZihIYyhkKSlyZXR1cm4hMTtfPSEwfX1lbHNle2NvbnN0IGllPTgmZD9XOmxbKytUXTtpZig4JmQmJm51bGwhPT1jLmF0dHJzKXtpZighSjcoYy5hdHRycyxpZSxhKSl7aWYoSGMoZCkpcmV0dXJu'@;
put 'ITE7Xz0hMH1jb250aW51ZX1jb25zdCB3ZT1kMyg4JmQ/ImNsYXNzIjpXLGgsdTMoYyksYSk7aWYoLTE9PT13ZSl7aWYoSGMoZCkpcmV0dXJuITE7Xz0hMDtjb250aW51ZX1pZigiIiE9PWllKXtsZXQgRWU7RWU9d2U+Zj8iIjpoW3dlKzFdLnRvTG93ZXJDYXNlKCk7Y29uc3QgWmU9OCZkP0Vl'@;
put 'Om51bGw7aWYoWmUmJi0xIT09RmMoWmUsaWUsMCl8fDImZCYmaWUhPT1FZSl7aWYoSGMoZCkpcmV0dXJuITE7Xz0hMH19fX1lbHNle2lmKCFfJiYhSGMoZCkmJiFIYyhXKSlyZXR1cm4hMTtpZihfJiZIYyhXKSljb250aW51ZTtfPSExLGQ9V3wxJmR9fXJldHVybiBIYyhkKXx8X31mdW5jdGlv'@;
put 'biBIYyhjKXtyZXR1cm4gMD09KDEmYyl9ZnVuY3Rpb24gZDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3QgXz1sW2hdO2lmKF89PT1jKXJldHVybiBoO2lmKDM9PT1ffHw2PT09XylmPSEwO2Vs'@;
put 'c2V7aWYoMT09PV98fDI9PT1fKXtsZXQgVD1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIFQ7KVQ9bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT1fKWJyZWFrO2lmKDA9PT1fKXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24gZTkoYyxsKXtsZXQgYT1j'@;
put 'LmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBtNChjLGwsYT0hMSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0'@;
put 'aDtkKyspaWYoYzAoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHY0KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKGNbaF0hPT1kW2hd'@;
put 'KWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIGRsKGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBhbShjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCBfPWNbYV07aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiBfKWlmKDImZCl7Y29uc3QgVD1jWysrYV07aCs9IlsiK18rKFQubGVuZ3RoPjA/Jz0iJytUKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIitfOjQmZCYmKGgrPSIgIitfKTtlbHNlIiIhPT1oJiYhSGMoXykmJihsKz1kbChmLGgpLGg9IiIpLGQ9XyxmPWZ8fCFIYyhkKTthKyt9'@;
put 'cmV0dXJuIiIhPT1oJiYobCs9ZGwoZixoKSksbH1mdW5jdGlvbiB3cihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3Rv'@;
put 'cnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09VDEuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3Rvcjpu'@;
put 'dWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fFBjLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8U3MsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGwsaWQ6IiJ9O2NtKGEpO2NvbnN0'@;
put 'IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1mMyhkLCExKSxhLnBpcGVEZWZzPWYzKGQsITApLGEuaWQ9ZnVuY3Rpb24gcjkoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RWYXJzLGMuaG9zdEF0dHJzLGMu'@;
put 'Y29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYy50eXBlLnByb3RvdHlw'@;
put 'ZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKTw8MDtyZXR1cm4gbCs9MjE0NzQ4MzY0OCwiYyIrbH0oYSksYX0pfWZ1bmN0aW9uIHk0KGMpe3JldHVybiBRbyhjKXx8'@;
put 'S2EoYyl9ZnVuY3Rpb24gbG0oYyl7cmV0dXJuIG51bGwhPT1jfWZ1bmN0aW9uIHZpKGMpe3JldHVybiBkdSgoKT0+KHt0eXBlOmMudHlwZSxib290c3RyYXA6Yy5ib290c3RyYXB8fFNzLGRlY2xhcmF0aW9uczpjLmRlY2xhcmF0aW9uc3x8U3MsaW1wb3J0czpjLmltcG9ydHN8fFNzLGV4cG9y'@;
put 'dHM6Yy5leHBvcnRzfHxTcyx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLGlkOmMuaWR8fG51bGx9KSl9ZnVuY3Rpb24gaDMoYyxsKXtpZihudWxsPT1jKXJldHVybiBYYztjb25zdCBhPXt9O2Zvcihjb25zdCBkIGluIGMpaWYoYy5oYXNPd25Q'@;
put 'cm9wZXJ0eShkKSl7bGV0IGg9Y1tkXSxmPWg7QXJyYXkuaXNBcnJheShoKSYmKGY9aFsxXSxoPWhbMF0pLGFbaF09ZCxsJiYobFtoXT1mKX1yZXR1cm4gYX1mdW5jdGlvbiBDcihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpO3JldHVybiBjbShsKSxsfSl9ZnVuY3Rpb24gTmEoYyl7'@;
put 'cmV0dXJue3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09Yy5wdXJlLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsb25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIFFvKGMpe3JldHVybiBjW1RkXXx8'@;
put 'bnVsbH1mdW5jdGlvbiBLYShjKXtyZXR1cm4gY1tVaF18fG51bGx9ZnVuY3Rpb24gT2woYyl7cmV0dXJuIGNbSmNdfHxudWxsfWZ1bmN0aW9uIE5jKGMsbCl7Y29uc3QgYT1jW0QxXXx8bnVsbDtpZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke3FhKGMpfSBkb2VzIG5vdCBo'@;
put 'YXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIEM0KGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhv'@;
put 'c3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fFhjLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGws'@;
put 'c3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8U3Msdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURl'@;
put 'ZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpoMyhjLmlucHV0cyxsKSxvdXRwdXRzOmgzKGMub3V0cHV0cyl9fWZ1bmN0aW9uIGNtKGMpe2MuZmVhdHVyZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gZjMoYyxsKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPWw/T2w6'@;
put 'eTQ7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcihsbSl9Y29uc3QgSGk9MCxCaT0xLERvPTIsdWE9MyxYYT00LEkxPTUsem89NixUdT03LFZhPTgsTGQ9OSxMMT0xMCxWbz0xMSxHaD0xMixTND0xMyxQbD0xNCxKYT0xNSxPMj0xNixQ'@;
put 'Mj0xNyxodT0xOCwkaD0xOSxSMT0yMCxPMT0yMSx1MD0yMixwMz0yMyxnMz0yNCxwcz0yNSxNND0xLHVtPTIsZDA9NyxIMj05LGljPTExO2Z1bmN0aW9uIFNjKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbTTRdfWZ1bmN0aW9uIG9jKGMpe3JldHVybiBB'@;
put 'cnJheS5pc0FycmF5KGMpJiYhMD09PWNbTTRdfWZ1bmN0aW9uIE9kKGMpe3JldHVybiAwIT0oNCZjLmZsYWdzKX1mdW5jdGlvbiBQMShjKXtyZXR1cm4gYy5jb21wb25lbnRPZmZzZXQ+LTF9ZnVuY3Rpb24gcWgoYyl7cmV0dXJuIDE9PSgxJmMuZmxhZ3MpfWZ1bmN0aW9uIFFjKGMpe3JldHVy'@;
put 'biEhYy50ZW1wbGF0ZX1mdW5jdGlvbiB4NChjKXtyZXR1cm4gMCE9KDUxMiZjW0RvXSl9ZnVuY3Rpb24gSDEoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShsMCk/Y1tsMF06bnVsbH1sZXQgSGQ9T2kuV2Vha1JlZj8/Y2xhc3MgajB7Y29uc3RydWN0b3IobCl7dGhpcy5yZWY9bH1kZXJl'@;
put 'Zigpe3JldHVybiB0aGlzLnJlZn19LG1tPTAsRHU9bnVsbCxtMz0hMTtmdW5jdGlvbiBmbChjKXtjb25zdCBsPUR1O3JldHVybiBEdT1jLGx9Y2xhc3MgdjN7Y29uc3RydWN0b3IoKXt0aGlzLmlkPW1tKyssdGhpcy5yZWY9ZnVuY3Rpb24gTjIoYyl7cmV0dXJuIG5ldyBIZChjKX0odGhpcyks'@;
put 'dGhpcy5wcm9kdWNlcnM9bmV3IE1hcCx0aGlzLmNvbnN1bWVycz1uZXcgTWFwLHRoaXMudHJhY2tpbmdWZXJzaW9uPTAsdGhpcy52YWx1ZVZlcnNpb249MH1jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKXtmb3IoY29uc3RbbCxhXW9mIHRoaXMucHJvZHVjZXJzKXtjb25zdCBkPWEu'@;
put 'cHJvZHVjZXJOb2RlLmRlcmVmKCk7aWYobnVsbCE9ZCYmYS5hdFRyYWNraW5nVmVyc2lvbj09PXRoaXMudHJhY2tpbmdWZXJzaW9uKXtpZihkLnByb2R1Y2VyUG9sbFN0YXR1cyhhLnNlZW5WYWx1ZVZlcnNpb24pKXJldHVybiEwfWVsc2UgdGhpcy5wcm9kdWNlcnMuZGVsZXRlKGwpLGQ/LmNv'@;
put 'bnN1bWVycy5kZWxldGUodGhpcy5pZCl9cmV0dXJuITF9cHJvZHVjZXJNYXlIYXZlQ2hhbmdlZCgpe2NvbnN0IGw9bTM7bTM9ITA7dHJ5e2Zvcihjb25zdFthLGRdb2YgdGhpcy5jb25zdW1lcnMpe2NvbnN0IGg9ZC5jb25zdW1lck5vZGUuZGVyZWYoKTtudWxsIT1oJiZoLnRyYWNraW5nVmVy'@;
put 'c2lvbj09PWQuYXRUcmFja2luZ1ZlcnNpb24/aC5vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCk6KHRoaXMuY29uc3VtZXJzLmRlbGV0ZShhKSxoPy5wcm9kdWNlcnMuZGVsZXRlKHRoaXMuaWQpKX19ZmluYWxseXttMz1sfX1wcm9kdWNlckFjY2Vzc2VkKCl7aWYobTMpdGhy'@;
put 'b3cgbmV3IEVycm9yKCIiKTtpZihudWxsPT09RHUpcmV0dXJuO2xldCBsPUR1LnByb2R1Y2Vycy5nZXQodGhpcy5pZCk7dm9pZCAwPT09bD8obD17Y29uc3VtZXJOb2RlOkR1LnJlZixwcm9kdWNlck5vZGU6dGhpcy5yZWYsc2VlblZhbHVlVmVyc2lvbjp0aGlzLnZhbHVlVmVyc2lvbixhdFRy'@;
put 'YWNraW5nVmVyc2lvbjpEdS50cmFja2luZ1ZlcnNpb259LER1LnByb2R1Y2Vycy5zZXQodGhpcy5pZCxsKSx0aGlzLmNvbnN1bWVycy5zZXQoRHUuaWQsbCkpOihsLnNlZW5WYWx1ZVZlcnNpb249dGhpcy52YWx1ZVZlcnNpb24sbC5hdFRyYWNraW5nVmVyc2lvbj1EdS50cmFja2luZ1ZlcnNp'@;
put 'b24pfWdldCBoYXNQcm9kdWNlcnMoKXtyZXR1cm4gdGhpcy5wcm9kdWNlcnMuc2l6ZT4wfWdldCBwcm9kdWNlclVwZGF0ZXNBbGxvd2VkKCl7cmV0dXJuITEhPT1EdT8uY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlc31wcm9kdWNlclBvbGxTdGF0dXMobCl7cmV0dXJuIHRoaXMudmFsdWVWZXJz'@;
put 'aW9uIT09bHx8KHRoaXMub25Qcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbigpLHRoaXMudmFsdWVWZXJzaW9uIT09bCl9fWxldCBMdT1udWxsO2Z1bmN0aW9uIEtoKGMpe2NvbnN0IGw9ZmwobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtmbChsKX19Y29uc3QgVTA9KCk9Pnt9O2NsYXNz'@;
put 'IF9tIGV4dGVuZHMgdjN7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCksdGhpcy53YXRjaD1sLHRoaXMuc2NoZWR1bGU9YSx0aGlzLmRpcnR5PSExLHRoaXMuY2xlYW51cEZuPVUwLHRoaXMucmVnaXN0ZXJPbkNsZWFudXA9aD0+e3RoaXMuY2xlYW51cEZuPWh9LHRoaXMuY29uc3VtZXJBbGxv'@;
put 'd1NpZ25hbFdyaXRlcz1kfW5vdGlmeSgpe3RoaXMuZGlydHl8fHRoaXMuc2NoZWR1bGUodGhpcyksdGhpcy5kaXJ0eT0hMH1vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCl7dGhpcy5ub3RpZnkoKX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fXJ1bigpe2lmKHRo'@;
put 'aXMuZGlydHk9ITEsMCE9PXRoaXMudHJhY2tpbmdWZXJzaW9uJiYhdGhpcy5jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKSlyZXR1cm47Y29uc3QgbD1mbCh0aGlzKTt0aGlzLnRyYWNraW5nVmVyc2lvbisrO3RyeXt0aGlzLmNsZWFudXBGbigpLHRoaXMuY2xlYW51cEZuPVUwLHRo'@;
put 'aXMud2F0Y2godGhpcy5yZWdpc3Rlck9uQ2xlYW51cCl9ZmluYWxseXtmbChsKX19Y2xlYW51cCgpe3RoaXMuY2xlYW51cEZuKCl9fWNsYXNzIG05e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnByZXZpb3VzVmFsdWU9bCx0aGlzLmN1cnJlbnRWYWx1ZT1hLHRoaXMuZmlyc3RDaGFuZ2U9ZH1p'@;
put 'c0ZpcnN0Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGFuZ2V9fWZ1bmN0aW9uIHZhKCl7cmV0dXJuIFQ0fWZ1bmN0aW9uIFQ0KGMpe3JldHVybiBjLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYoYy5zZXRJbnB1dD1fOSksdjl9ZnVuY3Rpb24gdjkoKXtjb25zdCBjPWJtKHRoaXMp'@;
put 'LGw9Yz8uY3VycmVudDtpZihsKXtjb25zdCBhPWMucHJldmlvdXM7aWYoYT09PVhjKWMucHJldmlvdXM9bDtlbHNlIGZvcihsZXQgZCBpbiBsKWFbZF09bFtkXTtjLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKGwpfX1mdW5jdGlvbiBfOShjLGwsYSxkKXtjb25zdCBoPXRoaXMuZGVj'@;
put 'bGFyZWRJbnB1dHNbYV0sZj1ibShjKXx8ZnVuY3Rpb24gWjAoYyxsKXtyZXR1cm4gY1tIbF09bH0oYyx7cHJldmlvdXM6WGMsY3VycmVudDpudWxsfSksXz1mLmN1cnJlbnR8fChmLmN1cnJlbnQ9e30pLFQ9Zi5wcmV2aW91cyxXPVRbaF07X1toXT1uZXcgbTkoVyYmVy5jdXJyZW50VmFsdWUs'@;
put 'bCxUPT09WGMpLGNbZF09bH12YS5uZ0luaGVyaXQ9ITA7Y29uc3QgSGw9Il9fbmdTaW1wbGVDaGFuZ2VzX18iO2Z1bmN0aW9uIGJtKGMpe3JldHVybiBjW0hsXXx8bnVsbH1jb25zdCBoMD1mdW5jdGlvbihjLGwsYSl7fTtmdW5jdGlvbiBfYShjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9'@;
put 'Y1tIaV07cmV0dXJuIGN9ZnVuY3Rpb24gWTAoYyxsKXtyZXR1cm4gX2EobFtjXSl9ZnVuY3Rpb24gTmwoYyxsKXtyZXR1cm4gX2EobFtjLmluZGV4XSl9ZnVuY3Rpb24ga2UoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uICRlKGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gbXQoYyxs'@;
put 'KXtjb25zdCBhPWxbY107cmV0dXJuIFNjKGEpP2E6YVtIaV19ZnVuY3Rpb24gRHIoYyxsKXtyZXR1cm4gbnVsbD09bD9udWxsOmNbbF19ZnVuY3Rpb24geW8oYyl7Y1tQMl09MH1mdW5jdGlvbiBlcyhjKXsxMDI0JmNbRG9dfHwoY1tEb118PTEwMjQsc2MoYywxKSl9ZnVuY3Rpb24genMoYyl7'@;
put 'MTAyNCZjW0RvXSYmKGNbRG9dJj0tMTAyNSxzYyhjLC0xKSl9ZnVuY3Rpb24gc2MoYyxsKXtsZXQgYT1jW3VhXTtpZihudWxsPT09YSlyZXR1cm47YVtJMV0rPWw7bGV0IGQ9YTtmb3IoYT1hW3VhXTtudWxsIT09YSYmKDE9PT1sJiYxPT09ZFtJMV18fC0xPT09bCYmMD09PWRbSTFdKTspYVtJ'@;
put 'MV0rPWwsZD1hLGE9YVt1YV19Y29uc3QgUG89e2xGcmFtZTpadyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtmdW5jdGlvbiBQdygpe3JldHVybiBQby5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gdzMoKXtyZXR1cm4gbnVsbCE9PVBvLnNr'@;
put 'aXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24gWHIoKXtyZXR1cm4gUG8ubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIFRzKCl7cmV0dXJuIFBvLmxGcmFtZS50Vmlld31mdW5jdGlvbiBCdChjKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlldz1jLGNbVmFdfWZ1bmN0aW9uIGp0KGMpe3Jl'@;
put 'dHVybiBQby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsY31mdW5jdGlvbiBNYygpe2xldCBjPUZ3KCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJlbnQ7cmV0dXJuIGN9ZnVuY3Rpb24gRncoKXtyZXR1cm4gUG8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBOMShj'@;
put 'LGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuY3VycmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIGI5KCl7cmV0dXJuIFBvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBDbSgpe1BvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBWYygpe2NvbnN0IGM9UG8ubEZyYW1lO2xldCBs'@;
put 'PWMuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWwmJihsPWMuYmluZGluZ1Jvb3RJbmRleD1jLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxsfWZ1bmN0aW9uIE5kKCl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gQzMoKXtyZXR1cm4gUG8ubEZyYW1lLmJpbmRp'@;
put 'bmdJbmRleCsrfWZ1bmN0aW9uIFYxKGMpe2NvbnN0IGw9UG8ubEZyYW1lLGE9bC5iaW5kaW5nSW5kZXg7cmV0dXJuIGwuYmluZGluZ0luZGV4PWwuYmluZGluZ0luZGV4K2MsYX1mdW5jdGlvbiBLVChjLGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuYmluZGluZ0luZGV4PWEuYmluZGluZ1Jvb3RJ'@;
put 'bmRleD1jLFNtKGwpfWZ1bmN0aW9uIFNtKGMpe1BvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9Y31mdW5jdGlvbiB3OShjKXtjb25zdCBsPVBvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1sP251bGw6Y1tsXX1mdW5jdGlvbiBCdygpe3JldHVybiBQby5s'@;
put 'RnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gQzkoYyl7UG8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PWN9ZnVuY3Rpb24gancoYyl7Y29uc3QgbD1jW0JpXTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZToxPT09bC50eXBlP2Nbem9dOm51bGx9ZnVuY3Rpb24gencoYyxs'@;
put 'LGEpe2lmKGEmbnMuU2tpcFNlbGYpe2xldCBoPWwsZj1jO2Zvcig7IShoPWgucGFyZW50LG51bGwhPT1ofHxhJm5zLkhvc3R8fChoPWp3KGYpLG51bGw9PT1ofHwoZj1mW1BsXSwxMCZoLnR5cGUpKSk7KTtpZihudWxsPT09aClyZXR1cm4hMTtsPWgsYz1mfWNvbnN0IGQ9UG8ubEZyYW1lPVV3'@;
put 'KCk7cmV0dXJuIGQuY3VycmVudFROb2RlPWwsZC5sVmlldz1jLCEwfWZ1bmN0aW9uIFM5KGMpe2NvbnN0IGw9VXcoKSxhPWNbQmldO1BvLmxGcmFtZT1sLGwuY3VycmVudFROb2RlPWEuZmlyc3RDaGlsZCxsLmxWaWV3PWMsbC50Vmlldz1hLGwuY29udGV4dExWaWV3PWMsbC5iaW5kaW5nSW5k'@;
put 'ZXg9YS5iaW5kaW5nU3RhcnRJbmRleCxsLmluSTE4bj0hMX1mdW5jdGlvbiBVdygpe2NvbnN0IGM9UG8ubEZyYW1lLGw9bnVsbD09PWM/bnVsbDpjLmNoaWxkO3JldHVybiBudWxsPT09bD9adyhjKTpsfWZ1bmN0aW9uIFp3KGMpe2NvbnN0IGw9e2N1cnJlbnRUTm9kZTpudWxsLGlzUGFyZW50'@;
put 'OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmlldzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFjZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSxj'@;
put 'dXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpjLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1cm4gbnVsbCE9PWMmJihjLmNoaWxkPWwpLGx9ZnVuY3Rpb24gWXcoKXtjb25zdCBjPVBvLmxGcmFtZTtyZXR1cm4gUG8ubEZyYW1lPWMucGFyZW50LGMuY3VycmVudFROb2RlPW51bGwsYy5sVmll'@;
put 'dz1udWxsLGN9Y29uc3QgV3c9WXc7ZnVuY3Rpb24gTW0oKXtjb25zdCBjPVl3KCk7Yy5pc1BhcmVudD0hMCxjLnRWaWV3PW51bGwsYy5zZWxlY3RlZEluZGV4PS0xLGMuY29udGV4dExWaWV3PW51bGwsYy5lbGVtZW50RGVwdGhDb3VudD0wLGMuY3VycmVudERpcmVjdGl2ZUluZGV4PS0xLGMu'@;
put 'Y3VycmVudE5hbWVzcGFjZT1udWxsLGMuYmluZGluZ1Jvb3RJbmRleD0tMSxjLmJpbmRpbmdJbmRleD0tMSxjLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gZXUoKXtyZXR1cm4gUG8ubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gWGgoYyl7UG8ubEZyYW1lLnNlbGVjdGVkSW5k'@;
put 'ZXg9Y31mdW5jdGlvbiBRYSgpe2NvbnN0IGM9UG8ubEZyYW1lO3JldHVybiBrZShjLnRWaWV3LGMuc2VsZWN0ZWRJbmRleCl9bGV0ICR3PSEwO2Z1bmN0aW9uIHhtKCl7cmV0dXJuICR3fWZ1bmN0aW9uIFZkKGMpeyR3PWN9ZnVuY3Rpb24gRW0oYyxsKXtmb3IobGV0IGE9bC5kaXJlY3RpdmVT'@;
put 'dGFydCxkPWwuZGlyZWN0aXZlRW5kO2E8ZDthKyspe2NvbnN0IGY9Yy5kYXRhW2FdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6XyxuZ0FmdGVyQ29udGVudENoZWNrZWQ6VCxuZ0FmdGVyVmlld0luaXQ6VyxuZ0FmdGVyVmlld0NoZWNrZWQ6aWUsbmdPbkRlc3Ryb3k6cGV9'@;
put 'PWY7XyYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsXyksVCYmKChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsVCksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLFQpKSxXJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxXKSxpZSYmKChjLnZpZXdIb29rcz8/'@;
put 'PVtdKS5wdXNoKGEsaWUpLChjLnZpZXdDaGVja0hvb2tzPz89W10pLnB1c2goYSxpZSkpLG51bGwhPXBlJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLHBlKX19ZnVuY3Rpb24ga20oYyxsLGEpe3F3KGMsbCwzLGEpfWZ1bmN0aW9uIEFtKGMsbCxhLGQpeygzJmNbRG9dKT09PWEmJnF3'@;
put 'KGMsbCxhLGQpfWZ1bmN0aW9uIE05KGMsbCl7bGV0IGE9Y1tEb107KDMmYSk9PT1sJiYoYSY9ODE5MSxhKz0xLGNbRG9dPWEpfWZ1bmN0aW9uIHF3KGMsbCxhLGQpe2NvbnN0IGY9ZD8/LTEsXz1sLmxlbmd0aC0xO2xldCBUPTA7Zm9yKGxldCBXPXZvaWQgMCE9PWQ/NjU1MzUmY1tQMl06MDtX'@;
put 'PF87VysrKWlmKCJudW1iZXIiPT10eXBlb2YgbFtXKzFdKXtpZihUPWxbV10sbnVsbCE9ZCYmVD49ZClicmVha31lbHNlIGxbV108MCYmKGNbUDJdKz02NTUzNiksKFQ8Znx8LTE9PWYpJiYoaUQoYyxhLGwsVyksY1tQMl09KDQyOTQ5MDE3NjAmY1tQMl0pK1crMiksVysrfWZ1bmN0aW9uIEt3'@;
put 'KGMsbCl7aDAoNCxjLGwpO2NvbnN0IGE9ZmwobnVsbCk7dHJ5e2wuY2FsbChjKX1maW5hbGx5e2ZsKGEpLGgwKDUsYyxsKX19ZnVuY3Rpb24gaUQoYyxsLGEsZCl7Y29uc3QgaD1hW2RdPDAsZj1hW2QrMV0sVD1jW2g/LWFbZF06YVtkXV07aD9jW0RvXT4+MTM8Y1tQMl0+PjE2JiYoMyZjW0Rv'@;
put 'XSk9PT1sJiYoY1tEb10rPTgxOTIsS3coVCxmKSk6S3coVCxmKX1jb25zdCBTMz0tMTtjbGFzcyBSNHtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9u'@;
put 'IFh3KGMpe3JldHVybiBjIT09UzN9ZnVuY3Rpb24gQjIoYyl7cmV0dXJuIDMyNzY3JmN9ZnVuY3Rpb24gTTMoYyxsKXtsZXQgYT1mdW5jdGlvbiBFOShjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW1BsXSxhLS07cmV0dXJuIGR9bGV0IE80PSEwO2Z1bmN0aW9uIEIxKGMp'@;
put 'e2NvbnN0IGw9TzQ7cmV0dXJuIE80PWMsbH1jb25zdCBUbT0yNTUsSnc9NTtsZXQgRG09MDtjb25zdCBqMT17fTtmdW5jdGlvbiBJbShjLGwpe2NvbnN0IGE9UXcoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0JpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRl'@;
put 'eD1sLmxlbmd0aCxKaChkLmRhdGEsYyksSmgobCxudWxsKSxKaChkLmJsdWVwcmludCxudWxsKSk7Y29uc3QgaD1BOShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKFh3KGgpKXtjb25zdCBfPUIyKGgpLFQ9TTMoaCxsKSxXPVRbQmldLmRhdGE7Zm9yKGxldCBpZT0wO2llPDg7aWUrKylsW2Yr'@;
put 'aWVdPVRbXytpZV18V1tfK2llXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBKaChjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gUXcoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmlu'@;
put 'amVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gQTkoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9'@;
put 'bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zQyhoKSxudWxsPT09ZClyZXR1cm4gUzM7aWYoYSsrLGg9aFtQbF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gUzN9ZnVuY3Rpb24gVDkoYyxsLGEpeyFmdW5jdGlvbiBrOShjLGwsYSl7bGV0'@;
put 'IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFzT3duUHJvcGVydHkoWmgpJiYoZD1hW1poXSksbnVsbD09ZCYmKGQ9YVtaaF09RG0rKyk7Y29uc3QgaD1kJlRtO2wuZGF0YVtjKyhoPj5KdyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gZUMoYyxsLGEpe2lm'@;
put 'KGEmbnMuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7UWkoKX1mdW5jdGlvbiB0QyhjLGwsYSxkKXtpZihhJm5zLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKG5zLlNlbGZ8bnMuSG9zdCkpKXtjb25zdCBoPWNbTGRdLGY9ZGkodm9pZCAwKTt0cnl7cmV0dXJuIGg/'@;
put 'aC5nZXQobCxkLGEmbnMuT3B0aW9uYWwpOldzKGwsZCxhJm5zLk9wdGlvbmFsKX1maW5hbGx5e2RpKGYpfX1yZXR1cm4gZUMoZCwwLGEpfWZ1bmN0aW9uIG5DKGMsbCxhLGQ9bnMuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW0RvXSYmIShkJm5zLlNlbGYpKXtjb25zdCBfPWZ1'@;
put 'bmN0aW9uIGREKGMsbCxhLGQsaCl7bGV0IGY9YyxfPWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PV8mJjIwNDgmX1tEb10mJiEoNTEyJl9bRG9dKTspe2NvbnN0IFQ9ckMoZixfLGEsZHxucy5TZWxmLGoxKTtpZihUIT09ajEpcmV0dXJuIFQ7bGV0IFc9Zi5wYXJlbnQ7aWYoIVcpe2NvbnN0IGll'@;
put 'PV9bUjFdO2lmKGllKXtjb25zdCBwZT1pZS5nZXQoYSxqMSxkKTtpZihwZSE9PWoxKXJldHVybiBwZX1XPXNDKF8pLF89X1tQbF19Zj1XfXJldHVybiBofShjLGwsYSxkLGoxKTtpZihfIT09ajEpcmV0dXJuIF99Y29uc3QgZj1yQyhjLGwsYSxkLGoxKTtpZihmIT09ajEpcmV0dXJuIGZ9cmV0'@;
put 'dXJuIHRDKGwsYSxkLGgpfWZ1bmN0aW9uIHJDKGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBjRChjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoWmgpP2NbWmhdOnZvaWQgMDtyZXR1cm4ibnVtYmVy'@;
put 'Ij09dHlwZW9mIGw/bD49MD9sJlRtOnVEOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtpZighencobCxjLGQpKXJldHVybiBkJm5zLkhvc3Q/ZUMoaCwwLGQpOnRDKGwsYSxkLGgpO3RyeXtjb25zdCBfPWYoZCk7aWYobnVsbCE9X3x8ZCZucy5PcHRpb25hbClyZXR1cm4gXztRaSgp'@;
put 'fWZpbmFsbHl7V3coKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCBfPW51bGwsVD1RdyhjLGwpLFc9UzMsaWU9ZCZucy5Ib3N0P2xbSmFdW3pvXTpudWxsO2ZvcigoLTE9PT1UfHxkJm5zLlNraXBTZWxmKSYmKFc9LTE9PT1UP0E5KGMsbCk6bFtUKzhdLFchPT1TMyYmb0MoZCwh'@;
put 'MSk/KF89bFtCaV0sVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTEpOy0xIT09VDspe2NvbnN0IHBlPWxbQmldO2lmKGlDKGYsVCxwZS5kYXRhKSl7Y29uc3Qgd2U9bEQoVCxsLGEsXyxkLGllKTtpZih3ZSE9PWoxKXJldHVybiB3ZX1XPWxbVCs4XSxXIT09UzMmJm9DKGQsbFtCaV0uZGF0YVtUKzhd'@;
put 'PT09aWUpJiZpQyhmLFQsbCk/KF89cGUsVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTF9fXJldHVybiBofWZ1bmN0aW9uIGxEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWxbQmldLFQ9Xy5kYXRhW2MrOF0scGU9TG0oVCxfLGEsbnVsbD09ZD9QMShUKSYmTzQ6ZCE9XyYmMCE9KDMmVC50eXBlKSxoJm5z'@;
put 'Lkhvc3QmJmY9PT1UKTtyZXR1cm4gbnVsbCE9PXBlP1FoKGwsXyxwZSxUKTpqMX1mdW5jdGlvbiBMbShjLGwsYSxkLGgpe2NvbnN0IGY9Yy5wcm92aWRlckluZGV4ZXMsXz1sLmRhdGEsVD0xMDQ4NTc1JmYsVz1jLmRpcmVjdGl2ZVN0YXJ0LHBlPWY+PjIwLEVlPWg/VCtwZTpjLmRpcmVjdGl2'@;
put 'ZUVuZDtmb3IobGV0IFplPWQ/VDpUK3BlO1plPEVlO1plKyspe2NvbnN0IGl0PV9bWmVdO2lmKFplPFcmJmE9PT1pdHx8WmU+PVcmJml0LnR5cGU9PT1hKXJldHVybiBaZX1pZihoKXtjb25zdCBaZT1fW1ddO2lmKFplJiZRYyhaZSkmJlplLnR5cGU9PT1hKXJldHVybiBXfXJldHVybiBudWxs'@;
put 'fWZ1bmN0aW9uIFFoKGMsbCxhLGQpe2xldCBoPWNbYV07Y29uc3QgZj1sLmRhdGE7aWYoZnVuY3Rpb24gb0QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBSNH0oaCkpe2NvbnN0IF89aDtfLnJlc29sdmluZyYmZnVuY3Rpb24gbzAoYyxsKXtjb25zdCBhPWw/YC4gRGVwZW5kZW5jeSBwYXRoOiAk'@;
put 'e2wuam9pbigiID4gIil9ID4gJHtjfWA6IiI7dGhyb3cgbmV3IEFyKC0yMDAsYENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWQgZm9yICR7Y30ke2F9YCl9KGZ1bmN0aW9uIENzKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFtZXx8Yy50b1N0cmluZygpOiJvYmpl'@;
put 'Y3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6a28oYyl9KGZbYV0pKTtjb25zdCBUPUIxKF8uY2FuU2VlVmlld1Byb3ZpZGVycyk7Xy5yZXNvbHZpbmc9ITA7Y29uc3QgVz1fLmluamVjdEltcGw/'@;
put 'ZGkoXy5pbmplY3RJbXBsKTpudWxsO3p3KGMsZCxucy5EZWZhdWx0KTt0cnl7aD1jW2FdPV8uZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiByRChjLGwsYSl7Y29uc3R7bmdPbkNoYW5nZXM6ZCxuZ09uSW5pdDpo'@;
put 'LG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IF89VDQobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsXyksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyxfKX1oJiYoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goMC1jLGgpLGYmJigo'@;
put 'YS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVcmJmRpKFcpLEIxKFQpLF8ucmVzb2x2aW5nPSExLFd3KCl9fXJldHVybiBofWZ1bmN0aW9uIGlDKGMsbCxhKXtyZXR1'@;
put 'cm4hIShhW2wrKGM+Pkp3KV0mMTw8Yyl9ZnVuY3Rpb24gb0MoYyxsKXtyZXR1cm4hKGMmbnMuU2VsZnx8YyZucy5Ib3N0JiZsKX1jbGFzcyB4M3tjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVybiBuQyh0aGlzLl90Tm9kZSx0aGlz'@;
put 'Ll9sVmlldyxsLGEwKGQpLGEpfX1mdW5jdGlvbiB1RCgpe3JldHVybiBuZXcgeDMoTWMoKSxYcigpKX1mdW5jdGlvbiB4YShjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtsMF18fEcwKGwpLGQ9T2JqZWN0LnByb3RvdHlwZTtsZXQgaD1PYmpl'@;
put 'Y3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbbDBdfHxHMChoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9KX1mdW5jdGlvbiBHMChjKXtyZXR1'@;
put 'cm4gcjAoYyk/KCk9Pntjb25zdCBsPUcwKGJvKGMpKTtyZXR1cm4gbCYmbCgpfTpIMShjKX1mdW5jdGlvbiBzQyhjKXtjb25zdCBsPWNbQmldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3pvXTpudWxsfWZ1bmN0aW9uIFA0KGMpe3JldHVybiBmdW5jdGlvbiBE'@;
put 'OShjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYoUjIoZikpYnJlYWs7aWYoMD09PWYp'@;
put 'aCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0oTWMoKSxjKX1jb25zdCBrMz0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIFQz'@;
put 'KGMsbCxhKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIFJtKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7Zm9yKGNvbnN0IGggaW4gZCl0aGlzW2hdPWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaCly'@;
put 'ZXR1cm4gZC5hcHBseSh0aGlzLGYpLHRoaXM7Y29uc3QgXz1uZXcgaCguLi5mKTtyZXR1cm4gVC5hbm5vdGF0aW9uPV8sVDtmdW5jdGlvbiBUKFcsaWUscGUpe2NvbnN0IHdlPVcuaGFzT3duUHJvcGVydHkoazMpP1dbazNdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLGszLHt2YWx1ZTpbXX0p'@;
put 'W2szXTtmb3IoO3dlLmxlbmd0aDw9cGU7KXdlLnB1c2gobnVsbCk7cmV0dXJuKHdlW3BlXT13ZVtwZV18fFtdKS5wdXNoKF8pLFd9fXJldHVybiBhJiYoaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0'@;
put 'aW9uQ2xzPWgsaH0pfWNvbnN0IE9tPUZ1bmN0aW9uO2Z1bmN0aW9uIEY0KGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/RjQoYSxsKTpsKGEpKX1mdW5jdGlvbiAkMChjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMuc3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBQbShjLGwp'@;
put 'e3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBCZChjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxjO2QrKylhLnB1c2gobCk7cmV0dXJuIGF9ZnVuY3Rpb24geGMoYyxsLGEpe2xldCBkPWpkKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRd'@;
put 'PWE6KGQ9fmQsZnVuY3Rpb24gbUQoYyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1ts'@;
put 'KzFdPWR9fShjLGQsbCxhKSksZH1mdW5jdGlvbiB0ZihjLGwpe2NvbnN0IGE9amQoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gamQoYyxsKXtyZXR1cm4gZnVuY3Rpb24gdkQoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyho'@;
put 'LWQ+PjEpLF89Y1tmPDxhXTtpZihsPT09XylyZXR1cm4gZjw8YTtfPmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCB6Mj16aChUMygiT3B0aW9uYWwiKSw4KSxnMD16aChUMygiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBZbShjKXtyZXR1cm4gMTI4PT0oMTI4JmMuZmxh'@;
put 'Z3MpfXZhciBZMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixjW2MuRGFzaENhc2U9Ml09IkRhc2hDYXNlIixjfShZMnx8e30pO2NvbnN0IGtEPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csQUQ9Lyg8fD4pLyxXbT0iXHUyMDBiJDFcdTIwMGIi'@;
put 'O2NvbnN0IEg5PW5ldyBNYXA7bGV0IE45PTA7Y29uc3QgQjk9Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIEJjKGMsbCl7U2MobCk/KGNbQjldPWxbJGhdLGZ1bmN0aW9uIGo0KGMpe0g5LnNldChjWyRoXSxjKX0obCkpOmNbQjldPWx9bGV0IGo5O2Z1bmN0aW9uIHo5KGMsbCl7cmV0dXJuIGo5'@;
put 'KGMsbCl9ZnVuY3Rpb24gWjQoYyl7Y29uc3QgbD1jW3VhXTtyZXR1cm4gb2MobCk/bFt1YV06bH1mdW5jdGlvbiBDQyhjKXtyZXR1cm4gR20oY1tHaF0pfWZ1bmN0aW9uIFNDKGMpe3JldHVybiBHbShjW1hhXSl9ZnVuY3Rpb24gR20oYyl7Zm9yKDtudWxsIT09YyYmIW9jKGMpOyljPWNbWGFd'@;
put 'O3JldHVybiBjfWZ1bmN0aW9uIHJmKGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsXz0hMTtvYyhkKT9mPWQ6U2MoZCkmJihfPSEwLGQ9ZFtIaV0pO2NvbnN0IFQ9X2EoZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/RzIobCxhLFQpOlkxKGwsYSxULGh8fG51bGwsITApOjE9PT1jJiZu'@;
put 'dWxsIT09YT9ZMShsLGEsVCxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiB0NihjLGwsYSl7Y29uc3QgZD1IMyhjLGwpO2QmJmZ1bmN0aW9uIE91KGMsbCxhLGQpe2MucmVtb3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxULF8pOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKFQpLG51bGwhPWYm'@;
put 'JmZ1bmN0aW9uIExDKGMsbCxhLGQsaCl7Y29uc3QgZj1hW2QwXTtmIT09X2EoYSkmJnJmKGwsYyxkLGYsaCk7Zm9yKGxldCBUPWljO1Q8YS5sZW5ndGg7VCsrKXtjb25zdCBXPWFbVF07RzQoV1tCaV0sVyxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIFU5KGMsbCl7cmV0dXJuIGMu'@;
put 'Y3JlYXRlQ29tbWVudChmdW5jdGlvbiBCNChjKXtyZXR1cm4gYy5yZXBsYWNlKGtELGw9PmwucmVwbGFjZShBRCxXbSkpfShsKSl9ZnVuY3Rpb24gcW0oYyxsLGEpe3JldHVybiBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiB4QyhjLGwpe2NvbnN0IGE9Y1tIMl0sZD1hLmluZGV4T2Yo'@;
put 'bCk7enMobCksYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBzZihjLGwpe2lmKGMubGVuZ3RoPD1pYylyZXR1cm47Y29uc3QgYT1pYytsLGQ9Y1thXTtpZihkKXtjb25zdCBoPWRbTzJdO251bGwhPT1oJiZoIT09YyYmeEMoaCxkKSxsPjAmJihjW2EtMV1bWGFdPWRbWGFdKTtjb25zdCBmPVBtKGMs'@;
put 'aWMrbCk7IWZ1bmN0aW9uIEJEKGMsbCl7RzQoYyxsLGxbVm9dLDIsbnVsbCxudWxsKSxsW0hpXT1udWxsLGxbem9dPW51bGx9KGRbQmldLGQpO2NvbnN0IF89ZltodV07bnVsbCE9PV8mJl8uZGV0YWNoVmlldyhmW0JpXSksZFt1YV09bnVsbCxkW1hhXT1udWxsLGRbRG9dJj0tMTI5fXJldHVy'@;
put 'biBkfWZ1bmN0aW9uIEttKGMsbCl7aWYoISgyNTYmbFtEb10pKXtjb25zdCBhPWxbVm9dO2xbcDNdPy5kZXN0cm95KCksbFtnM10/LmRlc3Ryb3koKSxhLmRlc3Ryb3lOb2RlJiZHNChjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gVUQoYyl7bGV0IGw9Y1tHaF07aWYoIWwpcmV0dXJuIFht'@;
put 'KGNbQmldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYoU2MobCkpYT1sW0doXTtlbHNle2NvbnN0IGQ9bFtpY107ZCYmKGE9ZCl9aWYoIWEpe2Zvcig7bCYmIWxbWGFdJiZsIT09YzspU2MobCkmJlhtKGxbQmldLGwpLGw9bFt1YV07bnVsbD09PWwmJihsPWMpLFNjKGwpJiZYbShsW0JpXSxs'@;
put 'KSxhPWwmJmxbWGFdfWw9YX19KGwpfX1mdW5jdGlvbiBYbShjLGwpe2lmKCEoMjU2JmxbRG9dKSl7bFtEb10mPS0xMjksbFtEb118PTI1NixmdW5jdGlvbiBrQyhjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2Qr'@;
put 'PTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBSNCkpe2NvbnN0IGY9YVtkKzFdO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKz0yKXtjb25zdCBUPWhbZltfXV0sVz1mW18rMV07aDAoNCxULFcpO3RyeXtXLmNhbGwoVCl9ZmluYWxseXto'@;
put 'MCg1LFQsVyl9fWVsc2V7aDAoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXtoMCg1LGgsZil9fX19fShjLGwpLGZ1bmN0aW9uIEVDKGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW1R1XTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09'@;
put 'dHlwZW9mIGFbZl0pe2NvbnN0IF89YVtmKzNdO18+PTA/ZFtfXSgpOmRbLV9dLnVuc3Vic2NyaWJlKCksZis9Mn1lbHNlIGFbZl0uY2FsbChkW2FbZisxXV0pO251bGwhPT1kJiYobFtUdV09bnVsbCk7Y29uc3QgaD1sW08xXTtpZihudWxsIT09aCl7bFtPMV09bnVsbDtmb3IobGV0IGY9MDtm'@;
put 'PGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFtCaV0udHlwZSYmbFtWb10uZGVzdHJveSgpO2NvbnN0IGE9bFtPMl07aWYobnVsbCE9PWEmJm9jKGxbdWFdKSl7YSE9PWxbdWFdJiZ4QyhhLGwpO2NvbnN0IGQ9bFtodV07bnVsbCE9PWQmJmQuZGV0YWNoVmlldyhjKX0hZnVu'@;
put 'Y3Rpb24gVEQoYyl7SDkuZGVsZXRlKGNbJGhdKX0obCl9fWZ1bmN0aW9uIEYzKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gWTQoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtIaV07e2NvbnN0e2NvbXBv'@;
put 'bmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRpb246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PVBjLk5vbmV8fGY9PT1QYy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gTmwoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWTEoYyxs'@;
put 'LGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBHMihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIEptKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WTEoYyxsLGEsZCxoKTpHMihjLGwsYSl9ZnVuY3Rpb24gSDMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwp'@;
put 'fWZ1bmN0aW9uIFcxKGMsbCxhKXtyZXR1cm4gVEMoYyxsLGEpfWxldCBRbSwkNCxHOSxuNixUQz1mdW5jdGlvbiBBQyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9ObChjLGEpOm51bGx9O2Z1bmN0aW9uIGU2KGMsbCxhLGQpe2NvbnN0IGg9RjMoYyxkLGwpLGY9bFtWb10sVD1XMShkLnBhcmVu'@;
put 'dHx8bFt6b10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxldCBXPTA7VzxhLmxlbmd0aDtXKyspSm0oZixoLGFbV10sVCwhMSk7ZWxzZSBKbShmLGgsYSxULCExKTt2b2lkIDAhPT1RbSYmUW0oZixkLGwsYSxoKX1mdW5jdGlvbiBXNChjLGwpe2lmKG51bGwhPT1s'@;
put 'KXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIE5sKGwsYyk7aWYoNCZhKXJldHVybiBZOSgtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gVzQoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBvYyhoKT9ZOSgtMSxoKTpf'@;
put 'YShoKX19aWYoMzImYSlyZXR1cm4gejkobCxjKSgpfHxfYShjW2wuaW5kZXhdKTt7Y29uc3QgZD1EQyhjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06VzQoWjQoY1tKYV0pLGQpOlc0KGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gREMoYyxsKXtyZXR1'@;
put 'cm4gbnVsbCE9PWw/Y1tKYV1bem9dLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFk5KGMsbCl7Y29uc3QgYT1pYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtCaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gVzQoZCxoKX1yZXR1cm4g'@;
put 'bFtkMF19ZnVuY3Rpb24gVzkoYyxsLGEsZCxoLGYsXyl7Zm9yKDtudWxsIT1hOyl7Y29uc3QgVD1kW2EuaW5kZXhdLFc9YS50eXBlO2lmKF8mJjA9PT1sJiYoVCYmQmMoX2EoVCksZCksYS5mbGFnc3w9MiksMzIhPSgzMiZhLmZsYWdzKSlpZig4JlcpVzkoYyxsLGEuY2hpbGQsZCxoLGYsITEp'@;
put 'LHJmKGwsYyxoLFQsZik7ZWxzZSBpZigzMiZXKXtjb25zdCBpZT16OShhLGQpO2xldCBwZTtmb3IoO3BlPWllKCk7KXJmKGwsYyxoLHBlLGYpO3JmKGwsYyxoLFQsZil9ZWxzZSAxNiZXP1dEKGMsbCxkLGEsaCxmKTpyZihsLGMsaCxULGYpO2E9Xz9hLnByb2plY3Rpb25OZXh0OmEubmV4dH19'@;
put 'ZnVuY3Rpb24gRzQoYyxsLGEsZCxoLGYpe1c5KGEsZCxjLmZpcnN0Q2hpbGQsbCxoLGYsITEpfWZ1bmN0aW9uIFdEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWFbSmFdLFc9X1t6b10ucHJvamVjdGlvbltkLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkoVykpZm9yKGxldCBpZT0wO2llPFcu'@;
put 'bGVuZ3RoO2llKyspcmYobCxjLGgsV1tpZV0sZik7ZWxzZXtsZXQgaWU9Vztjb25zdCBwZT1fW3VhXTtZbShkKSYmKGllLmZsYWdzfD0xMjgpLFc5KGMsbCxpZSxwZSxoLGYsITApfX1mdW5jdGlvbiBSQyhjLGwsYSl7IiI9PT1hP2MucmVtb3ZlQXR0cmlidXRlKGwsImNsYXNzIik6Yy5zZXRB'@;
put 'dHRyaWJ1dGUobCwiY2xhc3MiLGEpfWZ1bmN0aW9uIE9DKGMsbCxhKXtjb25zdHttZXJnZWRBdHRyczpkLGNsYXNzZXM6aCxzdHlsZXM6Zn09YTtudWxsIT09ZCYmRGQoYyxsLGQpLG51bGwhPT1oJiZSQyhjLGwsaCksbnVsbCE9PWYmJmZ1bmN0aW9uIEdEKGMsbCxhKXtjLnNldEF0dHJpYnV0'@;
put 'ZShsLCJzdHlsZSIsYSl9KGMsbCxmKX1mdW5jdGlvbiBOMyhjKXtyZXR1cm4gZnVuY3Rpb24gcTQoKXtpZih2b2lkIDA9PT0kNCYmKCQ0PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7JDQ9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6Yz0+Yyxj'@;
put 'cmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gJDR9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gSzQoKXtpZih2b2lkIDAhPT1HOSlyZXR1cm4gRzk7aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3'@;
put 'IEFyKDIxMCwhMSl9ZnVuY3Rpb24gJDkoKXtpZih2b2lkIDA9PT1uNiYmKG42PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7bjY9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNy'@;
put 'ZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiBuNn1mdW5jdGlvbiBIQyhjKXtyZXR1cm4gJDkoKT8uY3JlYXRlSFRNTChjKXx8Y31mdW5jdGlvbiBWQyhjKXtyZXR1cm4gJDkoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIEJDe2NvbnN0cnVjdG9yKGwpe3RoaXMuY2hh'@;
put 'bmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1sfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7bDN9KWB9fWZ1bmN0aW9uICQy'@;
put 'KGMpe3JldHVybiBjIGluc3RhbmNlb2YgQkM/Yy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OmN9ZnVuY3Rpb24gWDQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIHRJKGMpe3JldHVybiBjIGluc3RhbmNlb2YgQkMmJmMuZ2V0VHlwZU5hbWUoKXx8bnVsbH0oYyk7aWYobnVs'@;
put 'bCE9YSYmYSE9PWwpe2lmKCJSZXNvdXJjZVVSTCI9PT1hJiYiVVJMIj09PWwpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHtsfSwgZ290IGEgJHthfSAoc2VlICR7bDN9KWApfXJldHVybiBhPT09bH1jbGFzcyBxOXtjb25zdHJ1Y3RvcihsKXt0aGlzLmluZXJ0'@;
put 'RG9jdW1lbnRIZWxwZXI9bH1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2w9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+IitsO3RyeXtjb25zdCBhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE4zKGwpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09YT90aGlz'@;
put 'LmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudChsKTooYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpLGEpfWNhdGNoe3JldHVybiBudWxsfX19Y2xhc3MgSzl7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVm'@;
put 'YXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9TjMobCks'@;
put 'YX19Y29uc3Qgbkk9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rpb24gWDkoYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5tYXRjaChuSSk/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBHMShjKXtjb25zdCBsPXt9O2Zvcihjb25z'@;
put 'dCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIEJhKC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEgb2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBaZD1HMSgiYXJlYSxicixjb2ws'@;
put 'aHIsaW1nLHdiciIpLEo5PUcxKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksUTk9RzEoInJwLHJ0IiksZXY9QmEoWmQsQmEoSjksRzEoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRp'@;
put 'YWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLEJhKFE5LEcxKCJhLGFiYnIsYWNyb255bSxhdWRpbyxi'@;
put 'LGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8i'@;
put 'KSksQmEoUTksSjkpKSx0dj1HMSgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksekM9QmEodHYsRzEoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNl'@;
put 'bGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtp'@;
put 'bmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5'@;
put 'LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLEcxKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50'@;
put 'LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1kZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1n'@;
put 'cmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1v'@;
put 'cmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dz'@;
put 'cGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSxpST1HMSgic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3Mgb0l7Y29uc3RydWN0b3IoKXt0aGlzLnNhbml0'@;
put 'aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1zYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwO2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RF'@;
put 'P3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZClhPWEuZmlyc3RDaGlsZDtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBoPXRoaXMuY2hlY2tD'@;
put 'bG9iYmVyZWRFbGVtZW50KGEsYS5uZXh0U2libGluZyk7aWYoaCl7YT1oO2JyZWFrfWE9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoYSxhLnBhcmVudE5vZGUpfXJldHVybiB0aGlzLmJ1Zi5qb2luKCIiKX1zdGFydEVsZW1lbnQobCl7Y29uc3QgYT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNl'@;
put 'KCk7aWYoIWV2Lmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhaUkuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDto'@;
put 'Kyspe2NvbnN0IGY9ZC5pdGVtKGgpLF89Zi5uYW1lLFQ9Xy50b0xvd2VyQ2FzZSgpO2lmKCF6Qy5oYXNPd25Qcm9wZXJ0eShUKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IFc9Zi52YWx1ZTt0dltUXSYmKFc9WDkoVykpLHRoaXMuYnVmLnB1c2goIiAiLF8sJz0i'@;
put 'JyxVQyhXKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtldi5oYXNPd25Qcm9wZXJ0eShhKSYmIVpkLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5w'@;
put 'dXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaChVQyhsKSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KGwsYSl7aWYoYSYmKGwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5E'@;
put 'T0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHtsLm91dGVySFRNTH1gKTtyZXR1cm4gYX19Y29uc3Qgc0k9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAt'@;
put 'XHVERkZGXS9nLGFJPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBVQyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShzSSxmdW5jdGlvbihsKXtyZXR1cm4iJiMiKygxMDI0KihsLmNoYXJDb2RlQXQoMCktNTUyOTYpKyhsLmNoYXJDb2RlQXQoMSktNTYzMjApKzY1'@;
put 'NTM2KSsiOyJ9KS5yZXBsYWNlKGFJLGZ1bmN0aW9uKGwpe3JldHVybiImIyIrbC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWxldCByNjtmdW5jdGlvbiBudihjKXtyZXR1cm4iY29udGVudCJpbiBjJiZmdW5jdGlvbiBjSShj'@;
put 'KXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09Yy5ub2RlTmFtZX0oYyk/Yy5jb250ZW50Om51bGx9dmFyIFYzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLkhUTUw9MV09IkhUTUwiLGNbYy5TVFlMRT0yXT0iU1RZ'@;
put 'TEUiLGNbYy5TQ1JJUFQ9M109IlNDUklQVCIsY1tjLlVSTD00XT0iVVJMIixjW2MuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLGN9KFYzfHx7fSk7ZnVuY3Rpb24gcTIoYyl7Y29uc3QgbD1KNCgpO3JldHVybiBsP0hDKGwuc2FuaXRpemUoVjMuSFRNTCxjKXx8IiIpOlg0KGMsIkhU'@;
put 'TUwiKT9IQygkMihjKSk6ZnVuY3Rpb24gbEkoYyxsKXtsZXQgYT1udWxsO3RyeXtyNj1yNnx8ZnVuY3Rpb24gYWYoYyl7Y29uc3QgbD1uZXcgSzkoYyk7cmV0dXJuIGZ1bmN0aW9uIGpDKCl7dHJ5e3JldHVybiEhKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoTjMoIiIp'@;
put 'LCJ0ZXh0L2h0bWwiKX1jYXRjaHtyZXR1cm4hMX19KCk/bmV3IHE5KGwpOmx9KGMpO2xldCBkPWw/U3RyaW5nKGwpOiIiO2E9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKTtsZXQgaD01LGY9ZDtkb3tpZigwPT09aCl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJl'@;
put 'Y2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aC0tLGQ9ZixmPWEuaW5uZXJIVE1MLGE9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKX13aGlsZShkIT09Zik7cmV0dXJuIE4zKChuZXcgb0kpLnNhbml0aXplQ2hpbGRyZW4obnYoYSl8fGEpKX1maW5hbGx5e2lmKGEpe2NvbnN0IGQ9bnYo'@;
put 'YSl8fGE7Zm9yKDtkLmZpcnN0Q2hpbGQ7KWQucmVtb3ZlQ2hpbGQoZC5maXJzdENoaWxkKX19fShLNCgpLGtvKGMpKX1mdW5jdGlvbiBydihjKXtjb25zdCBsPUo0KCk7cmV0dXJuIGw/bC5zYW5pdGl6ZShWMy5VUkwsYyl8fCIiOlg0KGMsIlVSTCIpPyQyKGMpOlg5KGtvKGMpKX1mdW5jdGlv'@;
put 'biBaQyhjKXtjb25zdCBsPUo0KCk7aWYobClyZXR1cm4gVkMobC5zYW5pdGl6ZShWMy5SRVNPVVJDRV9VUkwsYyl8fCIiKTtpZihYNChjLCJSZXNvdXJjZVVSTCIpKXJldHVybiBWQygkMihjKSk7dGhyb3cgbmV3IEFyKDkwNCwhMSl9ZnVuY3Rpb24gSjQoKXtjb25zdCBjPVhyKCk7cmV0dXJu'@;
put 'IGMmJmNbTDFdLnNhbml0aXplcn1jbGFzcyBTaXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5cdTAyNzVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGE/dGhpcy5fX05HX0VMRU1FTlRfSURfXz1hOnZv'@;
put 'aWQgMCE9PWEmJih0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOnRoaXMscHJvdmlkZWRJbjphLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmEuZmFjdG9yeX0pKX1nZXQgbXVsdGkoKXtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9'@;
put 'YH19Y29uc3QgUTQ9bmV3IFNpKCJFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiIpLFdDPW5ldyBTaSgiSU5KRUNUT1IiLC0xKSxHQz1uZXcgU2koIklOSkVDVE9SX0RFRl9UWVBFUyIpO2NsYXNzICRDe2dldChsLGE9czApe2lmKGE9PT1zMCl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3Rv'@;
put 'ckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtxYShsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19ZnVuY3Rpb24gZ0koLi4uYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpxQygwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24gcUMo'@;
put 'YywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtyZXR1cm4gRjQobCxmPT57Y29uc3QgXz1mO292KF8sYSxbXSxkKSYmKGh8fD1bXSxoLnB1c2goXykpfSksdm9pZCAwIT09aCYmS0MoaCxhKSxhfWZ1bmN0aW9uIEtDKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2Nv'@;
put 'bnN0e3Byb3ZpZGVyczpofT1jW2FdO3N2KGgsZj0+e2wucHVzaChmKX0pfX1mdW5jdGlvbiBvdihjLGwsYSxkKXtpZighKGM9Ym8oYykpKXJldHVybiExO2xldCBoPW51bGwsZj1ubShjKTtjb25zdCBfPSFmJiZRbyhjKTtpZihmfHxfKXtpZihfJiYhXy5zdGFuZGFsb25lKXJldHVybiExO2g9'@;
put 'Y31lbHNle2NvbnN0IFc9Yy5uZ01vZHVsZTtpZihmPW5tKFcpLCFmKXJldHVybiExO2g9V31jb25zdCBUPWQuaGFzKGgpO2lmKF8pe2lmKFQpcmV0dXJuITE7aWYoZC5hZGQoaCksXy5kZXBlbmRlbmNpZXMpe2NvbnN0IFc9ImZ1bmN0aW9uIj09dHlwZW9mIF8uZGVwZW5kZW5jaWVzP18uZGVw'@;
put 'ZW5kZW5jaWVzKCk6Xy5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IGllIG9mIFcpb3YoaWUsbCxhLGQpfX1lbHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFUKXtsZXQgaWU7ZC5hZGQoaCk7dHJ5e0Y0KGYuaW1wb3J0cyxwZT0+e292KHBlLGwsYSxkKSYmKGllfHw9W10s'@;
put 'aWUucHVzaChwZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09aWUmJktDKGllLGwpfWlmKCFUKXtjb25zdCBpZT1IMShoKXx8KCgpPT5uZXcgaCk7bC5wdXNoKHtwcm92aWRlOmgsdXNlRmFjdG9yeTppZSxkZXBzOlNzfSx7cHJvdmlkZTpHQyx1c2VWYWx1ZTpoLG11bHRpOiEwfSx7cHJvdmlkZTpR'@;
put 'NCx1c2VWYWx1ZTooKT0+YXIoaCksbXVsdGk6ITB9KX1jb25zdCBXPWYucHJvdmlkZXJzO251bGw9PVd8fFR8fHN2KFcscGU9PntsLnB1c2gocGUpfSl9fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gc3YoYyxsKXtmb3IobGV0IGEgb2YgYylUMihhKSYmKGE9'@;
put 'YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/c3YoYSxsKTpsKGEpfWNvbnN0IG1JPUFzKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpBc30pO2Z1bmN0aW9uIGF2KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZtSSBpbiBjfWZ1bmN0aW9uIGxmKGMp'@;
put 'e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IHQ1PW5ldyBTaSgiU2V0IEluamVjdG9yIHNjb3BlLiIpLG82PXt9LHZJPXt9O2xldCBsdjtmdW5jdGlvbiBzNigpe3JldHVybiB2b2lkIDA9PT1sdiYmKGx2PW5ldyAkQyksbHZ9Y2xhc3MgcTB7fWNsYXNzIGN2IGV4dGVuZHMgcTB7'@;
put 'Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLnBhcmVudD1hLHRoaXMuc291cmNlPWQsdGhpcy5zY29wZXM9aCx0aGlzLnJlY29yZHM9bmV3IE1hcCx0aGlzLl9uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQsdGhp'@;
put 'cy5fb25EZXN0cm95SG9va3M9W10sdGhpcy5fZGVzdHJveWVkPSExLGR2KGwsXz0+dGhpcy5wcm9jZXNzUHJvdmlkZXIoXykpLHRoaXMucmVjb3Jkcy5zZXQoV0MsQjModm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChxMCxCMyh2b2lkIDAsdGhp'@;
put 'cykpO2NvbnN0IGY9dGhpcy5yZWNvcmRzLmdldCh0NSk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoR0MubXVsdGksU3MsbnMuU2VsZikpfWRlc3Ryb3koKXt0'@;
put 'aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX2Rlc3Ryb3llZD0hMDt0cnl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcylhLm5nT25EZXN0cm95KCk7Y29uc3QgbD10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3Qg'@;
put 'YSBvZiBsKWEoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19b25EZXN0cm95KGwpe3JldHVybiB0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX29uRGVzdHJveUhv'@;
put 'b2tzLnB1c2gobCksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGwpfXJ1bkluQ29udGV4dChsKXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2NvbnN0IGE9QTEodGhpcyksZD1kaSh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7QTEoYSksZGkoZCl9fWdldChsLGE9czAsZD1ucy5E'@;
put 'ZWZhdWx0KXtpZih0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGwuaGFzT3duUHJvcGVydHkobWEpKXJldHVybiBsW21hXSh0aGlzKTtkPWEwKGQpO2NvbnN0IGg9QTEodGhpcyksZj1kaSh2b2lkIDApO3RyeXtpZighKGQmbnMuU2tpcFNlbGYpKXtsZXQgVD10aGlzLnJlY29yZHMuZ2V0KGwp'@;
put 'O2lmKHZvaWQgMD09PVQpe2NvbnN0IFc9ZnVuY3Rpb24gQ0koYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIFNpfShsKSYmeGQobCk7VD1XJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKFcpP0IzKHV2KGwpLG82KTpudWxs'@;
put 'LHRoaXMucmVjb3Jkcy5zZXQobCxUKX1pZihudWxsIT1UKXJldHVybiB0aGlzLmh5ZHJhdGUobCxUKX1yZXR1cm4oZCZucy5TZWxmP3M2KCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZucy5PcHRpb25hbCYmYT09PXMwP251bGw6YSl9Y2F0Y2goXyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09'@;
put 'PV8ubmFtZSl7aWYoKF9ba3VdPV9ba3VdfHxbXSkudW5zaGlmdChxYShsKSksaCl0aHJvdyBfO3JldHVybiBmdW5jdGlvbiBBdShjLGwsYSxkKXtjb25zdCBoPWNba3VdO3Rocm93IGxbb21dJiZoLnVuc2hpZnQobFtvbV0pLGMubWVzc2FnZT1mdW5jdGlvbiBBZChjLGwsYSxkPW51bGwpe2M9'@;
put 'YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPXFhKGwpO2lmKEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChxYSkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IF8gaW4g'@;
put 'bClpZihsLmhhc093blByb3BlcnR5KF8pKXtsZXQgVD1sW19dO2YucHVzaChfKyI6IisoInN0cmluZyI9PXR5cGVvZiBUP0pTT04uc3RyaW5naWZ5KFQpOnFhKFQpKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNl'@;
put 'KHJjLCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW2t1XT1udWxsLGN9KF8sbCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgX31maW5hbGx5e2RpKGYpLEExKGgpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25z'@;
put 'dCBsPUExKHRoaXMpLGE9ZGkodm9pZCAwKTt0cnl7Y29uc3QgZD10aGlzLmdldChRNC5tdWx0aSxTcyxucy5TZWxmKTtmb3IoY29uc3QgaCBvZiBkKWgoKX1maW5hbGx5e0ExKGwpLGRpKGEpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5r'@;
put 'ZXlzKCkpbC5wdXNoKHFhKGQpKTtyZXR1cm5gUjNJbmplY3Rvclske2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPWxmKGw9Ym8obCkpP2w6Ym8obCYmbC5w'@;
put 'cm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIGJJKGMpe3JldHVybiBhdihjKT9CMyh2b2lkIDAsYy51c2VWYWx1ZSk6QjMoUUMoYyksbzYpfShsKTtpZihsZihsKXx8ITAhPT1sLm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoYSk7ZWxzZXtsZXQgaD10aGlzLnJlY29yZHMuZ2V0KGEpO2h8fChoPUIz'@;
put 'KHZvaWQgMCxvNiwhMCksaC5mYWN0b3J5PSgpPT5LYyhoLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGEsaCkpLGE9bCxoLm11bHRpLnB1c2gobCl9dGhpcy5yZWNvcmRzLnNldChhLGQpfWh5ZHJhdGUobCxhKXtyZXR1cm4gYS52YWx1ZT09PW82JiYoYS52YWx1ZT12SSxhLnZhbHVlPWEuZmFj'@;
put 'dG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGEudmFsdWUmJmEudmFsdWUmJmZ1bmN0aW9uIHdJKGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5uZ09uRGVzdHJveX0oYS52YWx1ZSkmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRk'@;
put 'KGEudmFsdWUpLGEudmFsdWV9aW5qZWN0YWJsZURlZkluU2NvcGUobCl7aWYoIWwucHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCBhPWJvKGwucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJhbnkiPT09YXx8dGhpcy5zY29wZXMuaGFzKGEpOnRoaXMuaW5qZWN0b3JEZWZU'@;
put 'eXBlcy5oYXMoYSl9cmVtb3ZlT25EZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3MuaW5kZXhPZihsKTstMSE9PWEmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZShhLDEpfX1mdW5jdGlvbiB1dihjKXtjb25zdCBsPXhkKGMpLGE9bnVsbCE9PWw/bC5mYWN0b3J5Okgx'@;
put 'KGMpO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKGMgaW5zdGFuY2VvZiBTaSl0aHJvdyBuZXcgQXIoMjA0LCExKTtpZihjIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIF9JKGMpe2NvbnN0IGw9Yy5sZW5ndGg7aWYobD4wKXRocm93IEJkKGwsIj8iKSxuZXcgQXIoMjA0LCEx'@;
put 'KTtjb25zdCBhPWZ1bmN0aW9uIEhzKGMpe3JldHVybiBjJiYoY1tjM118fGNbTnNdKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShjKTt0aHJvdyBuZXcgQXIoMjA0LCExKX1mdW5jdGlvbiBRQyhjLGwsYSl7bGV0IGQ7aWYobGYoYykpe2Nv'@;
put 'bnN0IGg9Ym8oYyk7cmV0dXJuIEgxKGgpfHx1dihoKX1pZihhdihjKSlkPSgpPT5ibyhjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIEpDKGMpe3JldHVybiEoIWN8fCFjLnVzZUZhY3RvcnkpfShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4uS2MoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVu'@;
put 'Y3Rpb24gWEMoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShjKSlkPSgpPT5hcihibyhjLnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBoPWJvKGMmJihjLnVzZUNsYXNzfHxjLnByb3ZpZGUpKTtpZighZnVuY3Rpb24geUkoYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVybiBIMSho'@;
put 'KXx8dXYoaCk7ZD0oKT0+bmV3IGgoLi4uS2MoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24gQjMoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZvaWQgMH19ZnVuY3Rpb24gZHYoYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/ZHYo'@;
put 'YSxsKTphJiZUMihhKT9kdihhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWNvbnN0IGE2PW5ldyBTaSgiQXBwSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TSX0pLFNJPSJuZyIsZVM9bmV3IFNpKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLEdzPW5ldyBTaSgiUGxhdGZvcm0g'@;
put 'SUQiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksdFM9bmV3IFNpKCJBbmltYXRpb25Nb2R1bGVUeXBlIiksbDY9bmV3IFNpKCJDU1Agbm9uY2UiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5LNCgpLmJvZHk/LnF1ZXJ5U2VsZWN0b3IoIltu'@;
put 'Z0NzcE5vbmNlXSIpPy5nZXRBdHRyaWJ1dGUoIm5nQ3NwTm9uY2UiKXx8bnVsbH0pO2xldCByUz0oYyxsKT0+bnVsbDtmdW5jdGlvbiBvUyhjLGwpe3JldHVybiByUyhjLGwpfWNsYXNzIGxTe31jbGFzcyBjU3t9Y2xhc3MgWjN7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7dGhyb3cgZnVu'@;
put 'Y3Rpb24geXYoYyl7Y29uc3QgbD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7cWEoYyl9LmApO3JldHVybiBsLm5nQ29tcG9uZW50PWMsbH0obCl9fWxldCBLMD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OVUxMPW5ldyBaMyxjfSkoKTtmdW5jdGlvbiB3digpe3Jl'@;
put 'dHVybiBZZChNYygpLFhyKCkpfWZ1bmN0aW9uIFlkKGMsbCl7cmV0dXJuIG5ldyBOaShObChjLGwpKX1sZXQgTmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9YX19cmV0dXJuIGMuX19OR19FTEVNRU5UX0lEX189d3YsY30pKCk7ZnVuY3Rpb24gZGYo'@;
put 'Yyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBOaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jbGFzcyBZM3t9bGV0IEZvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRlc3Ryb3lOb2RlPW51bGx9fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPSgpPT5mdW5jdGlvbiBndSgpe2NvbnN0IGM9'@;
put 'WHIoKSxhPW10KE1jKCkuaW5kZXgsYyk7cmV0dXJuKFNjKGEpP2E6YylbVm9dfSgpLGN9KSgpLHA2PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLGN9KSgpO2NsYXNzIHM1e2NvbnN0cnVj'@;
put 'dG9yKGwpe3RoaXMuZnVsbD1sLHRoaXMubWFqb3I9bC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9bC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9bC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgQUk9bmV3IHM1KCIxNi4xLjciKSxDdj17fTtmdW5jdGlvbiBhNShjKXtm'@;
put 'b3IoO2M7KXtjW0RvXXw9NjQ7Y29uc3QgbD1aNChjKTtpZih4NChjKSYmIWwpcmV0dXJuIGM7Yz1sfXJldHVybiBudWxsfWZ1bmN0aW9uIFN2KGMpe3JldHVybiBjLm5nT3JpZ2luYWxFcnJvcn1jbGFzcyBoZntjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJv'@;
put 'cihsKXtjb25zdCBhPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKGwpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixsKSxhJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsYSl9X2ZpbmRPcmlnaW5hbEVycm9yKGwpe2xldCBhPWwmJlN2KGwpO2Zvcig7YSYmU3YoYSk7'@;
put 'KWE9U3YoYSk7cmV0dXJuIGF8fG51bGx9fWNvbnN0IHh2PW5ldyBTaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5jdGlvbiBtNihjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGZmKGMpe3JldHVybiBjLm93bmVyRG9jdW1l'@;
put 'bnR9ZnVuY3Rpb24gRXYoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5ib2R5fWZ1bmN0aW9uIFdkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/YygpOmN9Y2xhc3MgdjYgZXh0ZW5kcyB2M3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25zdW1lckFs'@;
put 'bG93U2lnbmFsV3JpdGVzPSExLHRoaXMuX2xWaWV3PW51bGx9c2V0IGxWaWV3KGwpe3RoaXMuX2xWaWV3PWx9b25Db25zdW1lckRlcGVuZGVuY3lNYXlIYXZlQ2hhbmdlZCgpe2E1KHRoaXMuX2xWaWV3KX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fWdldCBoYXNSZWFkQVNpZ25h'@;
put 'bCgpe3JldHVybiB0aGlzLmhhc1Byb2R1Y2Vyc31ydW5JbkNvbnRleHQobCxhLGQpe2NvbnN0IGg9ZmwodGhpcyk7dGhpcy50cmFja2luZ1ZlcnNpb24rKzt0cnl7bChhLGQpfWZpbmFsbHl7ZmwoaCl9fWRlc3Ryb3koKXt0aGlzLnRyYWNraW5nVmVyc2lvbisrfX1sZXQgXzY9bnVsbDtmdW5j'@;
put 'dGlvbiBtUygpe3JldHVybiBfNj8/PW5ldyB2NixfNn1mdW5jdGlvbiB2UyhjLGwpe3JldHVybiBjW2xdPz9tUygpfWZ1bmN0aW9uIF9TKGMsbCl7Y29uc3QgYT1tUygpO2EuaGFzUmVhZEFTaWduYWwmJihjW2xdPV82LGEubFZpZXc9YyxfNj1uZXcgdjYpfWNvbnN0IFpvPXt9O2Z1bmN0aW9u'@;
put 'IENlKGMpe2t2KFRzKCksWHIoKSxldSgpK2MsITEpfWZ1bmN0aW9uIGt2KGMsbCxhLGQpe2lmKCFkKWlmKDM9PSgzJmxbRG9dKSl7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYma20obCxmLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJkFt'@;
put 'KGwsZiwwLGEpfVhoKGEpfWZ1bmN0aW9uIEF2KGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPVR2KGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gVHYoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxTcyxn'@;
put 'SShjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6cWEoYykpLG5ldyBjdihmLGx8fHM2KCksZHx8bnVsbCxoKX1sZXQgRWE9KCgpPT57Y2xhc3MgY3tzdGF0aWMgY3JlYXRlKGEsZCl7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gQXYoe25hbWU6IiJ9LGQsYSwi'@;
put 'Iik7e2NvbnN0IGg9YS5uYW1lPz8iIjtyZXR1cm4gQXYoe25hbWU6aH0sYS5wYXJlbnQsYS5wcm92aWRlcnMsaCl9fX1yZXR1cm4gYy5USFJPV19JRl9OT1RfRk9VTkQ9czAsYy5OVUxMPW5ldyAkQyxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoiYW55IixmYWN0b3J5Oigp'@;
put 'PT5hcihXQyl9KSxjLl9fTkdfRUxFTUVOVF9JRF9fPS0xLGN9KSgpO2Z1bmN0aW9uIHR0KGMsbD1ucy5EZWZhdWx0KXtjb25zdCBhPVhyKCk7cmV0dXJuIG51bGw9PT1hP2FyKGMsbCk6bkMoTWMoKSxhLGJvKGMpLGwpfWZ1bmN0aW9uIGI2KGMsbCxhLGQsaCxmLF8sVCxXLGllLHBlKXtjb25z'@;
put 'dCB3ZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiB3ZVtIaV09aCx3ZVtEb109MTQwfGQsKG51bGwhPT1pZXx8YyYmMjA0OCZjW0RvXSkmJih3ZVtEb118PTIwNDgpLHlvKHdlKSx3ZVt1YV09d2VbUGxdPWMsd2VbVmFdPWEsd2VbTDFdPV98fGMmJmNbTDFdLHdlW1ZvXT1UfHxjJiZjW1Zv'@;
put 'XSx3ZVtMZF09V3x8YyYmY1tMZF18fG51bGwsd2Vbem9dPWYsd2VbJGhdPWZ1bmN0aW9uIFcyKCl7cmV0dXJuIE45Kyt9KCksd2VbdTBdPXBlLHdlW1IxXT1pZSx3ZVtKYV09Mj09bC50eXBlP2NbSmFdOndlLHdlfWZ1bmN0aW9uIEczKGMsbCxhLGQsaCl7bGV0IGY9Yy5kYXRhW2xdO2lmKG51'@;
put 'bGw9PT1mKWY9ZnVuY3Rpb24gRHYoYyxsLGEsZCxoKXtjb25zdCBmPUZ3KCksXz1iOSgpLFc9Yy5kYXRhW2xdPWZ1bmN0aW9uIHc2KGMsbCxhLGQsaCxmKXtsZXQgXz1sP2wuaW5qZWN0b3JJbmRleDotMSxUPTA7cmV0dXJuIHczKCkmJihUfD0xMjgpLHt0eXBlOmEsaW5kZXg6ZCxpbnNlcnRC'@;
put 'ZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6XyxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczpULHByb3ZpZGVySW5kZXhlczowLHZhbHVlOmgs'@;
put 'YXR0cnM6ZixtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6bCxwcm9qZWN0'@;
put 'aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsXz9m'@;
put 'OmYmJmYucGFyZW50LGEsbCxkLGgpO3JldHVybiBudWxsPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPVcpLG51bGwhPT1mJiYoXz9udWxsPT1mLmNoaWxkJiZudWxsIT09Vy5wYXJlbnQmJihmLmNoaWxkPVcpOm51bGw9PT1mLm5leHQmJihmLm5leHQ9VyxXLnByZXY9ZikpLFd9KGMs'@;
put 'bCxhLGQsaCksZnVuY3Rpb24gcVQoKXtyZXR1cm4gUG8ubEZyYW1lLmluSTE4bn0oKSYmKGYuZmxhZ3N8PTMyKTtlbHNlIGlmKDY0JmYudHlwZSl7Zi50eXBlPWEsZi52YWx1ZT1kLGYuYXR0cnM9aDtjb25zdCBfPWZ1bmN0aW9uIEw0KCl7Y29uc3QgYz1Qby5sRnJhbWUsbD1jLmN1cnJlbnRU'@;
put 'Tm9kZTtyZXR1cm4gYy5pc1BhcmVudD9sOmwucGFyZW50fSgpO2YuaW5qZWN0b3JJbmRleD1udWxsPT09Xz8tMTpfLmluamVjdG9ySW5kZXh9cmV0dXJuIE4xKGYsITApLGZ9ZnVuY3Rpb24gbDUoYyxsLGEsZCl7aWYoMD09PWEpcmV0dXJuLTE7Y29uc3QgaD1sLmxlbmd0aDtmb3IobGV0IGY9'@;
put 'MDtmPGE7ZisrKWwucHVzaChkKSxjLmJsdWVwcmludC5wdXNoKGQpLGMuZGF0YS5wdXNoKG51bGwpO3JldHVybiBofWZ1bmN0aW9uIEVTKGMsbCxhLGQsaCl7Y29uc3QgZj12UyhsLHAzKSxfPWV1KCksVD0yJmQ7dHJ5e2lmKFhoKC0xKSxUJiZsLmxlbmd0aD5wcyYma3YoYyxsLHBzLCExKSxo'@;
put 'MChUPzI6MCxoKSxUKWYucnVuSW5Db250ZXh0KGEsZCxoKTtlbHNle2NvbnN0IGllPWZsKG51bGwpO3RyeXthKGQsaCl9ZmluYWxseXtmbChpZSl9fX1maW5hbGx5e1QmJm51bGw9PT1sW3AzXSYmX1MobCxwMyksWGgoXyksaDAoVD8zOjEsaCl9fWZ1bmN0aW9uIEl2KGMsbCxhKXtpZihPZChs'@;
put 'KSl7Y29uc3QgZD1mbChudWxsKTt0cnl7Y29uc3QgZj1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IF89bC5kaXJlY3RpdmVTdGFydDtfPGY7XysrKXtjb25zdCBUPWMuZGF0YVtfXTtULmNvbnRlbnRRdWVyaWVzJiZULmNvbnRlbnRRdWVyaWVzKDEsYVtfXSxfKX19ZmluYWxseXtmbChkKX19fWZ1'@;
put 'bmN0aW9uIEx2KGMsbCxhKXtQdygpJiYoZnVuY3Rpb24gWUkoYyxsLGEsZCl7Y29uc3QgaD1hLmRpcmVjdGl2ZVN0YXJ0LGY9YS5kaXJlY3RpdmVFbmQ7UDEoYSkmJmZ1bmN0aW9uIEpJKGMsbCxhKXtjb25zdCBkPU5sKGwsYyksaD1rUyhhKTtsZXQgXz0xNjthLnNpZ25hbHM/Xz00MDk2OmEu'@;
put 'b25QdXNoJiYoXz02NCk7Y29uc3QgVD1TNihjLGI2KGMsaCxudWxsLF8sZCxsLG51bGwsY1tMMV0ucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGQsYSksbnVsbCxudWxsLG51bGwpKTtjW2wuaW5kZXhdPVR9KGwsYSxjLmRhdGFbaCthLmNvbXBvbmVudE9mZnNldF0pLGMuZmlyc3RD'@;
put 'cmVhdGVQYXNzfHxJbShhLGwpLEJjKGQsbCk7Y29uc3QgXz1hLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBUPWg7VDxmO1QrKyl7Y29uc3QgVz1jLmRhdGFbVF0saWU9UWgobCxjLFQsYSk7QmMoaWUsbCksbnVsbCE9PV8mJlFJKDAsVC1oLGllLFcsMCxfKSxRYyhXKSYmKG10KGEuaW5kZXgsbClb'@;
put 'VmFdPVFoKGwsYyxULGEpKX19KGMsbCxhLE5sKGEsbCkpLDY0PT0oNjQmYS5mbGFncykmJlJTKGMsbCxhKSl9ZnVuY3Rpb24geTYoYyxsLGE9Tmwpe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtj'@;
put 'b25zdCBfPWRbZisxXSxUPS0xPT09Xz9hKGwsYyk6Y1tfXTtjW2grK109VH19fWZ1bmN0aW9uIGtTKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PSQzKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGly'@;
put 'ZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfWZ1bmN0aW9uICQzKGMsbCxhLGQsaCxmLF8sVCxXLGllLHBlKXtjb25zdCB3ZT1wcytkLEVlPXdlK2gsWmU9ZnVuY3Rpb24gQVMoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8'@;
put 'bDtkKyspYS5wdXNoKGQ8Yz9udWxsOlpvKTtyZXR1cm4gYX0od2UsRWUpLGl0PSJmdW5jdGlvbiI9PXR5cGVvZiBpZT9pZSgpOmllO3JldHVybiBaZVtCaV09e3R5cGU6YyxibHVlcHJpbnQ6WmUsdGVtcGxhdGU6YSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OlQsZGVjbFROb2RlOmwsZGF0YTpa'@;
put 'ZS5zbGljZSgpLmZpbGwobnVsbCx3ZSksYmluZGluZ1N0YXJ0SW5kZXg6d2UsZXhwYW5kb1N0YXJ0SW5kZXg6RWUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVl'@;
put 'cmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50'@;
put 'UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgZj9mKCk6ZixwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIF8/XygpOl8sZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6Vyxjb25zdHM6aXQsaW5jb21wbGV0ZUZpcnN0'@;
put 'UGFzczohMSxzc3JJZDpwZX19bGV0IFJ2PWM9Pm51bGw7ZnVuY3Rpb24gcGYoYyxsLGEsZCl7Zm9yKGxldCBoIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShoKSl7YT1udWxsPT09YT97fTphO2NvbnN0IGY9Y1toXTtudWxsPT09ZD9DNihhLGwsaCxmKTpkLmhhc093blByb3BlcnR5KGgpJiZD'@;
put 'NihhLGwsZFtoXSxmKX1yZXR1cm4gYX1mdW5jdGlvbiBDNihjLGwsYSxkKXtjLmhhc093blByb3BlcnR5KGEpP2NbYV0ucHVzaChsLGQpOmNbYV09W2wsZF19ZnVuY3Rpb24gUHUoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBXPU5sKGwsYSk7bGV0IHBlLGllPWwuaW5wdXRzOyFUJiZudWxsIT1p'@;
put 'ZSYmKHBlPWllW2RdKT8oTnYoYyxhLHBlLGQsaCksUDEobCkmJmZ1bmN0aW9uIGpJKGMsbCl7Y29uc3QgYT1tdChsLGMpOzE2JmFbRG9dfHwoYVtEb118PTY0KX0oYSxsLmluZGV4KSk6MyZsLnR5cGUmJihkPWZ1bmN0aW9uIExTKGMpe3JldHVybiJjbGFzcyI9PT1jPyJjbGFzc05hbWUiOiJm'@;
put 'b3IiPT09Yz8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09Yz8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT1jPyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT1jPyJyZWFkT25seSI6InRhYmluZGV4Ij09PWM/InRhYkluZGV4IjpjfShkKSxoPW51bGwhPV8/XyhoLGwudmFsdWV8fCIiLGQpOmgs'@;
put 'Zi5zZXRQcm9wZXJ0eShXLGQsaCkpfWZ1bmN0aW9uIE92KGMsbCxhLGQpe2lmKFB3KCkpe2NvbnN0IGg9bnVsbD09PWQ/bnVsbDp7IiI6LTF9LGY9ZnVuY3Rpb24gR0koYyxsKXtjb25zdCBhPWMuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGQ9bnVsbCxoPW51bGw7aWYoYSlmb3IobGV0IGY9MDtm'@;
put 'PGEubGVuZ3RoO2YrKyl7Y29uc3QgXz1hW2ZdO2lmKG00KGwsXy5zZWxlY3RvcnMsITEpKWlmKGR8fChkPVtdKSxRYyhfKSlpZihudWxsIT09Xy5maW5kSG9zdERpcmVjdGl2ZURlZnMpe2NvbnN0IFQ9W107aD1ofHxuZXcgTWFwLF8uZmluZEhvc3REaXJlY3RpdmVEZWZzKF8sVCxoKSxkLnVu'@;
put 'c2hpZnQoLi4uVCxfKSxQdihjLGwsVC5sZW5ndGgpfWVsc2UgZC51bnNoaWZ0KF8pLFB2KGMsbCwwKTtlbHNlIGg9aHx8bmV3IE1hcCxfLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8uKF8sZCxoKSxkLnB1c2goXyl9cmV0dXJuIG51bGw9PT1kP251bGw6W2QsaF19KGMsYSk7bGV0IF8sVDtudWxs'@;
put 'PT09Zj9fPVQ9bnVsbDpbXyxUXT1mLG51bGwhPT1fJiZjNShjLGwsYSxfLGgsVCksaCYmZnVuY3Rpb24gJEkoYyxsLGEpe2lmKGwpe2NvbnN0IGQ9Yy5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCs9Mil7Y29uc3QgZj1hW2xbaCsxXV07aWYobnVsbD09Zil0aHJvdyBu'@;
put 'ZXcgQXIoLTMwMSwhMSk7ZC5wdXNoKGxbaF0sZil9fX0oYSxkLGgpfWEubWVyZ2VkQXR0cnM9WWgoYS5tZXJnZWRBdHRycyxhLmF0dHJzKX1mdW5jdGlvbiBjNShjLGwsYSxkLGgsZil7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspVDkoSW0oYSxsKSxjLGRbaWVdLnR5cGUpOyFmdW5j'@;
put 'dGlvbiBLSShjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJbmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspe2NvbnN0IHBlPWRbaWVdO3BlLnByb3Zp'@;
put 'ZGVyc1Jlc29sdmVyJiZwZS5wcm92aWRlcnNSZXNvbHZlcihwZSl9bGV0IF89ITEsVD0hMSxXPWw1KGMsbCxkLmxlbmd0aCxudWxsKTtmb3IobGV0IGllPTA7aWU8ZC5sZW5ndGg7aWUrKyl7Y29uc3QgcGU9ZFtpZV07YS5tZXJnZWRBdHRycz1ZaChhLm1lcmdlZEF0dHJzLHBlLmhvc3RBdHRy'@;
put 'cyksWEkoYyxhLGwsVyxwZSkscUkoVyxwZSxoKSxudWxsIT09cGUuY29udGVudFF1ZXJpZXMmJihhLmZsYWdzfD00KSwobnVsbCE9PXBlLmhvc3RCaW5kaW5nc3x8bnVsbCE9PXBlLmhvc3RBdHRyc3x8MCE9PXBlLmhvc3RWYXJzKSYmKGEuZmxhZ3N8PTY0KTtjb25zdCB3ZT1wZS50eXBlLnBy'@;
put 'b3RvdHlwZTshXyYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ09uSW5pdHx8d2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChhLmluZGV4KSxfPSEwKSwhVCYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJDaGVja0hvb2tzPz89W10p'@;
put 'LnB1c2goYS5pbmRleCksVD0hMCksVysrfSFmdW5jdGlvbiBCSShjLGwsYSl7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZCxmPWMuZGF0YSxfPWwuYXR0cnMsVD1bXTtsZXQgVz1udWxsLGllPW51bGw7Zm9yKGxldCBwZT1sLmRpcmVjdGl2ZVN0YXJ0O3BlPGg7cGUrKyl7Y29uc3Qgd2U9ZltwZV0s'@;
put 'RWU9YT9hLmdldCh3ZSk6bnVsbCxpdD1FZT9FZS5vdXRwdXRzOm51bGw7Vz1wZih3ZS5pbnB1dHMscGUsVyxFZT9FZS5pbnB1dHM6bnVsbCksaWU9cGYod2Uub3V0cHV0cyxwZSxpZSxpdCk7Y29uc3QgZXQ9bnVsbD09PVd8fG51bGw9PT1ffHx1MyhsKT9udWxsOmVMKFcscGUsXyk7VC5wdXNo'@;
put 'KGV0KX1udWxsIT09VyYmKFcuaGFzT3duUHJvcGVydHkoImNsYXNzIikmJihsLmZsYWdzfD04KSxXLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYobC5mbGFnc3w9MTYpKSxsLmluaXRpYWxJbnB1dHM9VCxsLmlucHV0cz1XLGwub3V0cHV0cz1pZX0oYyxhLGYpfWZ1bmN0aW9uIFJTKGMsbCxh'@;
put 'KXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZCxmPWEuaW5kZXgsXz1mdW5jdGlvbiBWdygpe3JldHVybiBQby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXtYaChmKTtmb3IobGV0IFQ9ZDtUPGg7VCsrKXtjb25zdCBXPWMuZGF0YVtUXSxpZT1s'@;
put 'W1RdO1NtKFQpLChudWxsIT09Vy5ob3N0QmluZGluZ3N8fDAhPT1XLmhvc3RWYXJzfHxudWxsIT09Vy5ob3N0QXR0cnMpJiZXSShXLGllKX19ZmluYWxseXtYaCgtMSksU20oXyl9fWZ1bmN0aW9uIFdJKGMsbCl7bnVsbCE9PWMuaG9zdEJpbmRpbmdzJiZjLmhvc3RCaW5kaW5ncygxLGwpfWZ1'@;
put 'bmN0aW9uIFB2KGMsbCxhKXtsLmNvbXBvbmVudE9mZnNldD1hLChjLmNvbXBvbmVudHM/Pz1bXSkucHVzaChsLmluZGV4KX1mdW5jdGlvbiBxSShjLGwsYSl7aWYoYSl7aWYobC5leHBvcnRBcylmb3IobGV0IGQ9MDtkPGwuZXhwb3J0QXMubGVuZ3RoO2QrKylhW2wuZXhwb3J0QXNbZF1dPWM7'@;
put 'UWMobCkmJihhWyIiXT1jKX19ZnVuY3Rpb24gWEkoYyxsLGEsZCxoKXtjLmRhdGFbZF09aDtjb25zdCBmPWguZmFjdG9yeXx8KGguZmFjdG9yeT1IMShoLnR5cGUpKSxfPW5ldyBSNChmLFFjKGgpLHR0KTtjLmJsdWVwcmludFtkXT1fLGFbZF09XyxmdW5jdGlvbiBVSShjLGwsYSxkLGgpe2Nv'@;
put 'bnN0IGY9aC5ob3N0QmluZGluZ3M7aWYoZil7bGV0IF89Yy5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PV8mJihfPWMuaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtjb25zdCBUPX5sLmluZGV4OyhmdW5jdGlvbiBaSShjKXtsZXQgbD1jLmxlbmd0aDtmb3IoO2w+MDspe2NvbnN0IGE9Y1stLWxd'@;
put 'O2lmKCJudW1iZXIiPT10eXBlb2YgYSYmYTwwKXJldHVybiBhfXJldHVybiAwfSkoXykhPVQmJl8ucHVzaChUKSxfLnB1c2goYSxkLGYpfX0oYyxsLGQsbDUoYyxhLGguaG9zdFZhcnMsWm8pLGgpfWZ1bmN0aW9uICQxKGMsbCxhLGQsaCxmKXtjb25zdCBfPU5sKGMsbCk7IWZ1bmN0aW9uIEZ2'@;
put 'KGMsbCxhLGQsaCxmLF8pe2lmKG51bGw9PWYpYy5yZW1vdmVBdHRyaWJ1dGUobCxoLGEpO2Vsc2V7Y29uc3QgVD1udWxsPT1fP2tvKGYpOl8oZixkfHwiIixoKTtjLnNldEF0dHJpYnV0ZShsLGgsVCxhKX19KGxbVm9dLF8sZixjLnZhbHVlLGEsZCxoKX1mdW5jdGlvbiBRSShjLGwsYSxkLGgs'@;
put 'Zil7Y29uc3QgXz1mW2xdO2lmKG51bGwhPT1fKWZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7KU9TKGQsYSxfW1QrK10sX1tUKytdLF9bVCsrXSl9ZnVuY3Rpb24gT1MoYyxsLGEsZCxoKXtjb25zdCBmPWZsKG51bGwpO3RyeXtjb25zdCBfPWMuaW5wdXRUcmFuc2Zvcm1zO251bGwhPT1fJiZfLmhh'@;
put 'c093blByb3BlcnR5KGQpJiYoaD1fW2RdLmNhbGwobCxoKSksbnVsbCE9PWMuc2V0SW5wdXQ/Yy5zZXRJbnB1dChsLGgsYSxkKTpsW2RdPWh9ZmluYWxseXtmbChmKX19ZnVuY3Rpb24gZUwoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigw'@;
put 'IT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3QgXz1jW2ZdO2ZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7VCs9MilpZihfW1RdPT09bCl7ZC5wdXNoKGYsX1tUKzFdLGFbaCsxXSk7YnJl'@;
put 'YWt9fWgrPTJ9ZWxzZSBoKz0yO2Vsc2UgaCs9NH1yZXR1cm4gZH1mdW5jdGlvbiBQUyhjLGwsYSxkKXtyZXR1cm5bYywhMCwhMSxsLG51bGwsMCxkLGEsbnVsbCxudWxsLG51bGxdfWZ1bmN0aW9uIEZTKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2lmKG51bGwhPT1hKWZvcihsZXQg'@;
put 'ZD0wO2Q8YS5sZW5ndGg7ZCs9Mil7Y29uc3QgZj1hW2QrMV07aWYoLTEhPT1mKXtjb25zdCBfPWMuZGF0YVtmXTtDOShhW2RdKSxfLmNvbnRlbnRRdWVyaWVzKDIsbFtmXSxmKX19fWZ1bmN0aW9uIFM2KGMsbCl7cmV0dXJuIGNbR2hdP2NbUzRdW1hhXT1sOmNbR2hdPWwsY1tTNF09bCxsfWZ1'@;
put 'bmN0aW9uIEh2KGMsbCxhKXtDOSgwKTtjb25zdCBkPWZsKG51bGwpO3RyeXtsKGMsYSl9ZmluYWxseXtmbChkKX19ZnVuY3Rpb24gSFMoYyl7cmV0dXJuIGNbVHVdfHwoY1tUdV09W10pfWZ1bmN0aW9uIE5TKGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFZT'@;
put 'KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFFjKGMpKSYmKGE9ZnVuY3Rpb24gSTQoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW000XSlyZXR1cm4gYztjPWNbSGldfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtWb119ZnVuY3Rpb24gQlMoYyxs'@;
put 'KXtjb25zdCBhPWNbTGRdLGQ9YT9hLmdldChoZixudWxsKTpudWxsO2QmJmQuaGFuZGxlRXJyb3IobCl9ZnVuY3Rpb24gTnYoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3QgXz1hW2YrK10sVD1hW2YrK107T1MoYy5kYXRhW19dLGxbX10sZCxULGgpfX1mdW5jdGlv'@;
put 'biBHZChjLGwsYSl7Y29uc3QgZD1ZMChsLGMpOyFmdW5jdGlvbiBNQyhjLGwsYSl7Yy5zZXRWYWx1ZShsLGEpfShjW1ZvXSxkLGEpfWZ1bmN0aW9uIHRMKGMsbCl7Y29uc3QgYT1tdChsLGMpLGQ9YVtCaV07IWZ1bmN0aW9uIG5MKGMsbCl7Zm9yKGxldCBhPWwubGVuZ3RoO2E8Yy5ibHVlcHJp'@;
put 'bnQubGVuZ3RoO2ErKylsLnB1c2goYy5ibHVlcHJpbnRbYV0pfShkLGEpO2NvbnN0IGg9YVtIaV07bnVsbCE9PWgmJm51bGw9PT1hW3UwXSYmKGFbdTBdPW9TKGgsYVtMZF0pKSxWdihkLGEsYVtWYV0pfWZ1bmN0aW9uIFZ2KGMsbCxhKXtTOShsKTt0cnl7Y29uc3QgZD1jLnZpZXdRdWVyeTtu'@;
put 'dWxsIT09ZCYmSHYoMSxkLGEpO2NvbnN0IGg9Yy50ZW1wbGF0ZTtudWxsIT09aCYmRVMoYyxsLGgsMSxhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuZmlyc3RDcmVhdGVQYXNzPSExKSxjLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZGUyhjLGwpLGMuc3RhdGljVmlld1F1ZXJpZXMmJkh2KDIsYy52'@;
put 'aWV3UXVlcnksYSk7Y29uc3QgZj1jLmNvbXBvbmVudHM7bnVsbCE9PWYmJmZ1bmN0aW9uIGpTKGMsbCl7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspdEwoYyxsW2FdKX0obCxmKX1jYXRjaChkKXt0aHJvdyBjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5jb21wbGV0ZUZpcnN0UGFzcz0hMCxj'@;
put 'LmZpcnN0Q3JlYXRlUGFzcz0hMSksZH1maW5hbGx5e2xbRG9dJj0tNSxNbSgpfX1sZXQgelM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxsPW5ldyBTZXQsdGhpcy5xdWV1ZT1uZXcgTWFwfWNyZWF0ZShhLGQsaCl7Y29uc3QgZj10eXBlb2YgWm9uZT4idSI/bnVsbDpab25l'@;
put 'LmN1cnJlbnQsXz1uZXcgX20oYSxpZT0+e3RoaXMuYWxsLmhhcyhpZSkmJnRoaXMucXVldWUuc2V0KGllLGYpfSxoKTtsZXQgVDt0aGlzLmFsbC5hZGQoXyksXy5ub3RpZnkoKTtjb25zdCBXPSgpPT57Xy5jbGVhbnVwKCksVD8uKCksdGhpcy5hbGwuZGVsZXRlKF8pLHRoaXMucXVldWUuZGVs'@;
put 'ZXRlKF8pfTtyZXR1cm4gVD1kPy5vbkRlc3Ryb3koVykse2Rlc3Ryb3k6V319Zmx1c2goKXtpZigwIT09dGhpcy5xdWV1ZS5zaXplKWZvcihjb25zdFthLGRdb2YgdGhpcy5xdWV1ZSl0aGlzLnF1ZXVlLmRlbGV0ZShhKSxkP2QucnVuKCgpPT5hLnJ1bigpKTphLnJ1bigpfWdldCBpc1F1ZXVl'@;
put 'RW1wdHkoKXtyZXR1cm4gMD09PXRoaXMucXVldWUuc2l6ZX19cmV0dXJuIGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgY30pLGN9KSgpO2Z1bmN0aW9uIE02KGMsbCxhKXtsZXQgZD1hP2Muc3R5bGVzOm51bGwsaD1hP2MuY2xhc3Nl'@;
put 'czpudWxsLGY9MDtpZihudWxsIT09bClmb3IobGV0IF89MDtfPGwubGVuZ3RoO18rKyl7Y29uc3QgVD1sW19dOyJudW1iZXIiPT10eXBlb2YgVD9mPVQ6MT09Zj9oPV9jKGgsVCk6Mj09ZiYmKGQ9X2MoZCxUKyI6ICIrbFsrK19dKyI7IikpfWE/Yy5zdHlsZXM9ZDpjLnN0eWxlc1dpdGhvdXRI'@;
put 'b3N0PWQsYT9jLmNsYXNzZXM9aDpjLmNsYXNzZXNXaXRob3V0SG9zdD1ofWZ1bmN0aW9uIHU1KGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2NvbnN0IGY9bFthLmluZGV4XTtpZihudWxsIT09ZiYmZC5wdXNoKF9hKGYpKSxvYyhmKSl7Zm9yKGxldCBUPWljO1Q8Zi5sZW5ndGg7VCsr'@;
put 'KXtjb25zdCBXPWZbVF0saWU9V1tCaV0uZmlyc3RDaGlsZDtudWxsIT09aWUmJnU1KFdbQmldLFcsaWUsZCl9ZltkMF0hPT1mW0hpXSYmZC5wdXNoKGZbZDBdKX1jb25zdCBfPWEudHlwZTtpZig4Jl8pdTUoYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZfKXtjb25zdCBUPXo5KGEsbCk7bGV0'@;
put 'IFc7Zm9yKDtXPVQoKTspZC5wdXNoKFcpfWVsc2UgaWYoMTYmXyl7Y29uc3QgVD1EQyhsLGEpO2lmKEFycmF5LmlzQXJyYXkoVCkpZC5wdXNoKC4uLlQpO2Vsc2V7Y29uc3QgVz1aNChsW0phXSk7dTUoV1tCaV0sVyxULGQsITApfX1hPWg/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9cmV0dXJu'@;
put 'IGR9ZnVuY3Rpb24geDYoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0wxXS5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbiYmaC5iZWdpbigpO3RyeXtVUyhjLGwsYy50ZW1wbGF0ZSxhKX1jYXRjaChfKXt0aHJvdyBkJiZCUyhsLF8pLF99ZmluYWxseXtoLmVuZCYmaC5lbmQoKSxsW0wxXS5lZmZlY3RN'@;
put 'YW5hZ2VyPy5mbHVzaCgpfX1mdW5jdGlvbiBVUyhjLGwsYSxkKXtjb25zdCBoPWxbRG9dO2lmKDI1NiE9KDI1NiZoKSl7bFtMMV0uZWZmZWN0TWFuYWdlcj8uZmx1c2goKSxTOShsKTt0cnl7eW8obCksZnVuY3Rpb24gTncoYyl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXg9Y30oYy5i'@;
put 'aW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWEmJkVTKGMsbCxhLDIsZCk7Y29uc3QgXz0zPT0oMyZoKTtpZihfKXtjb25zdCBpZT1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUsbnVsbCl9ZWxzZXtjb25zdCBpZT1jLnByZU9yZGVySG9va3M7bnVsbCE9PWllJiZBbShs'@;
put 'LGllLDAsbnVsbCksTTkobCwwKX1pZihmdW5jdGlvbiBhTChjKXtmb3IobGV0IGw9Q0MoYyk7bnVsbCE9PWw7bD1TQyhsKSl7aWYoIWxbdW1dKWNvbnRpbnVlO2NvbnN0IGE9bFtIMl07Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2VzKGFbZF0pfX19KGwpLFpTKGwsMiksbnVsbCE9PWMu'@;
put 'Y29udGVudFF1ZXJpZXMmJkZTKGMsbCksXyl7Y29uc3QgaWU9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy5jb250ZW50SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDEpLE05KGwsMSl9IWZ1bmN0aW9uIHhTKGMsbCl7Y29uc3QgYT1jLmhv'@;
put 'c3RCaW5kaW5nT3BDb2RlcztpZihudWxsPT09YSlyZXR1cm47Y29uc3QgZD12UyhsLGczKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZihmPDApWGgofmYpO2Vsc2V7Y29uc3QgXz1mLFQ9YVsrK2hdLFc9YVsrK2hdO0tUKFQsXyksZC5ydW5JbkNvbnRl'@;
put 'eHQoVywyLGxbX10pfX19ZmluYWxseXtudWxsPT09bFtnM10mJl9TKGwsZzMpLFhoKC0xKX19KGMsbCk7Y29uc3QgVD1jLmNvbXBvbmVudHM7bnVsbCE9PVQmJldTKGwsVCwwKTtjb25zdCBXPWMudmlld1F1ZXJ5O2lmKG51bGwhPT1XJiZIdigyLFcsZCksXyl7Y29uc3QgaWU9Yy52aWV3Q2hl'@;
put 'Y2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy52aWV3SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDIpLE05KGwsMil9ITA9PT1jLmZpcnN0VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsW0RvXSY9LTczLHpzKGwpfWZpbmFsbHl7TW0oKX19fWZ1'@;
put 'bmN0aW9uIFpTKGMsbCl7Zm9yKGxldCBhPUNDKGMpO251bGwhPT1hO2E9U0MoYSkpZm9yKGxldCBkPWljO2Q8YS5sZW5ndGg7ZCsrKVlTKGFbZF0sbCl9ZnVuY3Rpb24gbEwoYyxsLGEpe1lTKG10KGwsYyksYSl9ZnVuY3Rpb24gWVMoYyxsKXtpZighZnVuY3Rpb24gR3QoYyl7cmV0dXJuIDEy'@;
put 'OD09KDEyOCZjW0RvXSl9KGMpKXJldHVybjtjb25zdCBhPWNbQmldO2lmKDgwJmNbRG9dJiYwPT09bHx8MTAyNCZjW0RvXXx8Mj09PWwpVVMoYSxjLGEudGVtcGxhdGUsY1tWYV0pO2Vsc2UgaWYoY1tJMV0+MCl7WlMoYywxKTtjb25zdCBoPWNbQmldLmNvbXBvbmVudHM7bnVsbCE9PWgmJldT'@;
put 'KGMsaCwxKX19ZnVuY3Rpb24gV1MoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWxMKGMsbFtkXSxhKX1jbGFzcyBkNXtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbQmldO3JldHVybiB1NShhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3Rvcihs'@;
put 'LGEpe3RoaXMuX2xWaWV3PWwsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWEsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbVmFdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3W1ZhXT1s'@;
put 'fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMjU2PT0oMjU2JnRoaXMuX2xWaWV3W0RvXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3'@;
put 'W3VhXTtpZihvYyhsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHNmKGwsZCksUG0oYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9S20odGhpcy5fbFZpZXdbQmldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7IWZ1bmN0aW9uIGYw'@;
put 'KGMsbCl7aWYoMjU2PT0oMjU2JmNbRG9dKSl0aHJvdyBuZXcgQXIoOTExLCExKTtudWxsPT09Y1tPMV0mJihjW08xXT1bXSksY1tPMV0ucHVzaChsKX0odGhpcy5fbFZpZXcsbCl9bWFya0ZvckNoZWNrKCl7YTUodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNo'@;
put 'KCl7dGhpcy5fbFZpZXdbRG9dJj0tMTI5fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbRG9dfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3g2KHRoaXMuX2xWaWV3W0JpXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lm'@;
put 'KHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgQXIoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZnVuY3Rpb24gekQoYyxsKXtHNChjLGwsbFtWb10sMixudWxsLG51bGwpfSh0aGlzLl9sVmlld1tCaV0s'@;
put 'dGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKGwpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBBcig5MDIsITEpO3RoaXMuX2FwcFJlZj1sfX1jbGFzcyBjTCBleHRlbmRzIGQ1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuX3ZpZXc9bH1kZXRlY3RD'@;
put 'aGFuZ2VzKCl7Y29uc3QgbD10aGlzLl92aWV3O3g2KGxbQmldLGwsbFtWYV0sITEpfWNoZWNrTm9DaGFuZ2VzKCl7fWdldCBjb250ZXh0KCl7cmV0dXJuIG51bGx9fWNsYXNzIEdTIGV4dGVuZHMgSzB7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPWx9cmVzb2x2ZUNvbXBv'@;
put 'bmVudEZhY3RvcnkobCl7Y29uc3QgYT1RbyhsKTtyZXR1cm4gbmV3IGg1KGEsdGhpcy5uZ01vZHVsZSl9fWZ1bmN0aW9uICRTKGMpe2NvbnN0IGw9W107Zm9yKGxldCBhIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShhKSYmbC5wdXNoKHtwcm9wTmFtZTpjW2FdLHRlbXBsYXRlTmFtZTphfSk7cmV0'@;
put 'dXJuIGx9Y2xhc3MgZEx7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1hMChkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsQ3YsZCk7cmV0dXJuIGghPT1Ddnx8YT09PUN2P2g6dGhpcy5wYXJlbnRJbmplY3Rv'@;
put 'ci5nZXQobCxhLGQpfX1jbGFzcyBoNSBleHRlbmRzIGNTe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD0kUyhsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgucHJvcE5hbWUp'@;
put 'JiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gJFModGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMuY29tcG9uZW50'@;
put 'VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiB0OShjKXtyZXR1cm4gYy5tYXAoYW0pLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMuaXNCb3VuZFRv'@;
put 'TW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7bGV0IGY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIHEwP2g6aD8uaW5qZWN0b3I7ZiYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKGY9dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9u'@;
put 'ZUluamVjdG9yKGYpfHxmKTtjb25zdCBfPWY/bmV3IGRMKGwsZik6bCxUPV8uZ2V0KFkzLG51bGwpO2lmKG51bGw9PT1UKXRocm93IG5ldyBBcig0MDcsITEpO2NvbnN0IHBlPXtyZW5kZXJlckZhY3Rvcnk6VCxzYW5pdGl6ZXI6Xy5nZXQocDYsbnVsbCksZWZmZWN0TWFuYWdlcjpfLmdldCh6'@;
put 'UyxudWxsKX0sd2U9VC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxFZT10aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLFplPWQ/ZnVuY3Rpb24gVFMoYyxsLGEsZCl7Y29uc3QgZj1kLmdldCh4diwhMSl8fGE9PT1QYy5TaGFkb3dEb20sXz1j'@;
put 'LnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIE5JKGMpe1J2KGMpfShfKSxffSh3ZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sXyk6cW0od2UsRWUsZnVuY3Rpb24gdUwoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJz'@;
put 'dmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEVlKSkseXQ9dGhpcy5jb21wb25lbnREZWYuc2lnbmFscz80NjA4OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaD81NzY6NTI4LEV0PSQzKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksU3Q9YjYobnVsbCxF'@;
put 'dCxudWxsLHl0LG51bGwsbnVsbCxwZSx3ZSxfLG51bGwsbnVsbCk7bGV0IEp0LG5uO1M5KFN0KTt0cnl7Y29uc3Qgdm49dGhpcy5jb21wb25lbnREZWY7bGV0IE5uLGNyPW51bGw7dm4uZmluZEhvc3REaXJlY3RpdmVEZWZzPyhObj1bXSxjcj1uZXcgTWFwLHZuLmZpbmRIb3N0RGlyZWN0aXZl'@;
put 'RGVmcyh2bixObixjciksTm4ucHVzaCh2bikpOk5uPVt2bl07Y29uc3QgSXI9ZnVuY3Rpb24gcVMoYyxsKXtjb25zdCBhPWNbQmldLGQ9cHM7cmV0dXJuIGNbZF09bCxHMyhhLGQsMiwiI2hvc3QiLG51bGwpfShTdCxaZSksRWk9ZnVuY3Rpb24gZkwoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1o'@;
put 'W0JpXTshZnVuY3Rpb24gcEwoYyxsLGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPVloKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYoTTYobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09YSYmT0MoZCxhLGwpKX0oZCxjLGwsXyk7'@;
put 'bGV0IFc9bnVsbDtudWxsIT09bCYmKFc9b1MobCxoW0xkXSkpO2NvbnN0IGllPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IHBlPTE2O2Euc2lnbmFscz9wZT00MDk2OmEub25QdXNoJiYocGU9NjQpO2NvbnN0IHdlPWI2KGgsa1MoYSksbnVsbCxwZSxoW2MuaW5k'@;
put 'ZXhdLGMsZixpZSxudWxsLG51bGwsVyk7cmV0dXJuIFQuZmlyc3RDcmVhdGVQYXNzJiZQdihULGMsZC5sZW5ndGgtMSksUzYoaCx3ZSksaFtjLmluZGV4XT13ZX0oSXIsWmUsdm4sTm4sU3QscGUsd2UpO25uPWtlKEV0LHBzKSxaZSYmZnVuY3Rpb24gbUwoYyxsLGEsZCl7aWYoZClEZChjLGEs'@;
put 'WyJuZy12ZXJzaW9uIixBSS5mdWxsXSk7ZWxzZXtjb25zdHthdHRyczpoLGNsYXNzZXM6Zn09ZnVuY3Rpb24gXzQoYyl7Y29uc3QgbD1bXSxhPVtdO2xldCBkPTEsaD0yO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZF07aWYoInN0cmluZyI9PXR5cGVvZiBmKTI9PT1oPyIiIT09ZiYmbC5w'@;
put 'dXNoKGYsY1srK2RdKTo4PT09aCYmYS5wdXNoKGYpO2Vsc2V7aWYoIUhjKGgpKWJyZWFrO2g9Zn1kKyt9cmV0dXJue2F0dHJzOmwsY2xhc3NlczphfX0obC5zZWxlY3RvcnNbMF0pO2gmJkRkKGMsYSxoKSxmJiZmLmxlbmd0aD4wJiZSQyhjLGEsZi5qb2luKCIgIikpfX0od2Usdm4sWmUsZCks'@;
put 'dm9pZCAwIT09YSYmZnVuY3Rpb24gdkwoYyxsLGEpe2NvbnN0IGQ9Yy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07ZC5wdXNoKG51bGwhPWY/QXJyYXkuZnJvbShmKTpudWxsKX19KG5uLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLEp0'@;
put 'PWZ1bmN0aW9uIGdMKGMsbCxhLGQsaCxmKXtjb25zdCBfPU1jKCksVD1oW0JpXSxXPU5sKF8saCk7YzUoVCxoLF8sYSxudWxsLGQpO2ZvcihsZXQgcGU9MDtwZTxhLmxlbmd0aDtwZSsrKUJjKFFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K3BlLF8pLGgpO1JTKFQsaCxfKSxXJiZCYyhXLGgpO2Nv'@;
put 'bnN0IGllPVFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K18uY29tcG9uZW50T2Zmc2V0LF8pO2lmKGNbVmFdPWhbVmFdPWllLG51bGwhPT1mKWZvcihjb25zdCBwZSBvZiBmKXBlKGllLGwpO3JldHVybiBJdihULF8sYyksaWV9KEVpLHZuLE5uLGNyLFN0LFtfTF0pLFZ2KEV0LFN0LG51bGwpfWZp'@;
put 'bmFsbHl7TW0oKX1yZXR1cm4gbmV3IGhMKHRoaXMuY29tcG9uZW50VHlwZSxKdCxZZChubixTdCksU3Qsbm4pfX1jbGFzcyBoTCBleHRlbmRzIGxTe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhpcy5fdE5vZGU9Zix0'@;
put 'aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBjTChoKSx0aGlzLmNvbXBvbmVudFR5cGU9bH1zZXRJbnB1dChsLGEpe2NvbnN0IGQ9dGhpcy5fdE5vZGUuaW5wdXRzO2xldCBoO2lmKG51'@;
put 'bGwhPT1kJiYoaD1kW2xdKSl7aWYodGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPz89bmV3IE1hcCx0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuaGFzKGwpJiZPYmplY3QuaXModGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmdldChsKSxhKSlyZXR1cm47Y29uc3QgZj10aGlzLl9yb290TFZpZXc7'@;
put 'TnYoZltCaV0sZixoLGwsYSksdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLnNldChsLGEpLGE1KG10KHRoaXMuX3ROb2RlLmluZGV4LGYpKX19Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyB4Myh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ryb3koKXt0aGlzLmhvc3RWaWV3LmRl'@;
put 'c3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIF9MKCl7Y29uc3QgYz1NYygpO0VtKFhyKClbQmldLGMpfWZ1bmN0aW9uIGVvKGMpe2xldCBsPWZ1bmN0aW9uIEtTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5'@;
put 'cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoUWMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0aHJvdyBuZXcgQXIoOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVz'@;
put 'aChoKTtjb25zdCBfPWM7Xy5pbnB1dHM9RTYoYy5pbnB1dHMpLF8uaW5wdXRUcmFuc2Zvcm1zPUU2KGMuaW5wdXRUcmFuc2Zvcm1zKSxfLmRlY2xhcmVkSW5wdXRzPUU2KGMuZGVjbGFyZWRJbnB1dHMpLF8ub3V0cHV0cz1FNihjLm91dHB1dHMpO2NvbnN0IFQ9aC5ob3N0QmluZGluZ3M7VCYm'@;
put 'd0woYyxUKTtjb25zdCBXPWgudmlld1F1ZXJ5LGllPWguY29udGVudFF1ZXJpZXM7aWYoVyYmYkwoYyxXKSxpZSYmeUwoYyxpZSksbjAoYy5pbnB1dHMsaC5pbnB1dHMpLG4wKGMuZGVjbGFyZWRJbnB1dHMsaC5kZWNsYXJlZElucHV0cyksbjAoYy5vdXRwdXRzLGgub3V0cHV0cyksbnVsbCE9'@;
put 'PWguaW5wdXRUcmFuc2Zvcm1zJiYobnVsbD09PV8uaW5wdXRUcmFuc2Zvcm1zJiYoXy5pbnB1dFRyYW5zZm9ybXM9e30pLG4wKF8uaW5wdXRUcmFuc2Zvcm1zLGguaW5wdXRUcmFuc2Zvcm1zKSksUWMoaCkmJmguZGF0YS5hbmltYXRpb24pe2NvbnN0IHBlPWMuZGF0YTtwZS5hbmltYXRpb249'@;
put 'KHBlLmFuaW1hdGlvbnx8W10pLmNvbmNhdChoLmRhdGEuYW5pbWF0aW9uKX19Y29uc3QgZj1oLmZlYXR1cmVzO2lmKGYpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZltfXTtUJiZULm5nSW5oZXJpdCYmVChjKSxUPT09ZW8mJihhPSExKX19bD1PYmplY3QuZ2V0UHJvdG90'@;
put 'eXBlT2YobCl9IWZ1bmN0aW9uIEJ2KGMpe2xldCBsPTAsYT1udWxsO2ZvcihsZXQgZD1jLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25zdCBoPWNbZF07aC5ob3N0VmFycz1sKz1oLmhvc3RWYXJzLGguaG9zdEF0dHJzPVloKGguaG9zdEF0dHJzLGE9WWgoYSxoLmhvc3RBdHRycykpfX0oZCl9ZnVu'@;
put 'Y3Rpb24gRTYoYyl7cmV0dXJuIGM9PT1YYz97fTpjPT09U3M/W106Y31mdW5jdGlvbiBiTChjLGwpe2NvbnN0IGE9Yy52aWV3UXVlcnk7Yy52aWV3UXVlcnk9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24geUwoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXM7Yy5jb250'@;
put 'ZW50UXVlcmllcz1hPyhkLGgsZik9PntsKGQsaCxmKSxhKGQsaCxmKX06bH1mdW5jdGlvbiB3TChjLGwpe2NvbnN0IGE9Yy5ob3N0QmluZGluZ3M7Yy5ob3N0QmluZGluZ3M9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24gZU0oYyl7Y29uc3QgbD1jLmlucHV0Q29uZmlnLGE9'@;
put 'e307Zm9yKGNvbnN0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKSYmaFsyXSYmKGFbZF09aFsyXSl9Yy5pbnB1dFRyYW5zZm9ybXM9YX1mdW5jdGlvbiBrNihjKXtyZXR1cm4hIUE2KGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShj'@;
put 'IGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEE2KGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1bmN0aW9uIHExKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIGpjKGMsbCxh'@;
put 'KXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIGdmKGMsbCxhLGQpe2NvbnN0IGg9amMoYyxsLGEpO3JldHVybiBqYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBUNihjLGwsYSxkLGgpe2NvbnN0IGY9Z2YoYyxsLGEsZCk7cmV0dXJuIGpjKGMsbCsyLGgpfHxm'@;
put 'fWZ1bmN0aW9uIG0wKGMsbCxhLGQsaCxmKXtjb25zdCBfPWdmKGMsbCxhLGQpO3JldHVybiBnZihjLGwrMixoLGYpfHxffWZ1bmN0aW9uIFRyKGMsbCxhLGQpe2NvbnN0IGg9WHIoKTtyZXR1cm4gamMoaCxDMygpLGwpJiYoVHMoKSwkMShRYSgpLGgsYyxsLGEsZCkpLFRyfWZ1bmN0aW9uIEsz'@;
put 'KGMsbCxhLGQpe3JldHVybiBqYyhjLEMzKCksYSk/bCtrbyhhKStkOlpvfWZ1bmN0aW9uIEplKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1YcigpLGllPVRzKCkscGU9Yytwcyx3ZT1pZS5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gV0woYyxsLGEsZCxoLGYsXyxULFcpe2NvbnN0IGllPWwu'@;
put 'Y29uc3RzLHBlPUczKGwsYyw0LF98fG51bGwsRHIoaWUsVCkpO092KGwsYSxwZSxEcihpZSxXKSksRW0obCxwZSk7Y29uc3Qgd2U9cGUudFZpZXc9JDMoMixwZSxkLGgsZixsLmRpcmVjdGl2ZVJlZ2lzdHJ5LGwucGlwZVJlZ2lzdHJ5LG51bGwsbC5zY2hlbWFzLGllLG51bGwpO3JldHVybiBu'@;
put 'dWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwscGUpLHdlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcocGUpKSxwZX0ocGUsaWUsVyxsLGEsZCxoLGYsXyk6aWUuZGF0YVtwZV07TjEod2UsITEpO2NvbnN0IEVlPUt2KGllLFcsd2UsYyk7eG0oKSYmZTYoaWUs'@;
put 'VyxFZSx3ZSksQmMoRWUsVyksUzYoVyxXW3BlXT1QUyhFZSxXLEVlLHdlKSkscWgod2UpJiZMdihpZSxXLHdlKSxudWxsIT1fJiZ5NihXLHdlLFQpfWxldCBLdj1mdW5jdGlvbiBYdihjLGwsYSxkKXtyZXR1cm4gVmQoITApLGxbVm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiAkaShj'@;
put 'KXtyZXR1cm4gJGUoZnVuY3Rpb24gJFQoKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlld30oKSxwcytjKX1mdW5jdGlvbiBSZShjLGwsYSl7Y29uc3QgZD1YcigpO3JldHVybiBqYyhkLEMzKCksbCkmJlB1KFRzKCksUWEoKSxkLGMsbCxkW1ZvXSxhLCExKSxSZX1mdW5jdGlvbiBKdihj'@;
put 'LGwsYSxkLGgpe2NvbnN0IF89aD8iY2xhc3MiOiJzdHlsZSI7TnYoYyxhLGwuaW5wdXRzW19dLF8sZCl9ZnVuY3Rpb24gbWUoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPXBzK2MsVD1oW1ZvXSxXPWYuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIHVNKGMsbCxhLGQsaCxmKXtjb25z'@;
put 'dCBfPWwuY29uc3RzLFc9RzMobCxjLDIsZCxEcihfLGgpKTtyZXR1cm4gT3YobCxhLFcsRHIoXyxmKSksbnVsbCE9PVcuYXR0cnMmJk02KFcsVy5hdHRycywhMSksbnVsbCE9PVcubWVyZ2VkQXR0cnMmJk02KFcsVy5tZXJnZWRBdHRycywhMCksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVz'@;
put 'LmVsZW1lbnRTdGFydChsLFcpLFd9KF8sZixoLGwsYSxkKTpmLmRhdGFbX10saWU9ZE0oZixoLFcsVCxsLGMpO2hbX109aWU7Y29uc3QgcGU9cWgoVyk7cmV0dXJuIE4xKFcsITApLE9DKFQsaWUsVyksMzIhPSgzMiZXLmZsYWdzKSYmeG0oKSYmZTYoZixoLGllLFcpLDA9PT1mdW5jdGlvbiBC'@;
put 'VCgpe3JldHVybiBQby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnR9KCkmJkJjKGllLGgpLGZ1bmN0aW9uIGpUKCl7UG8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCkscGUmJihMdihmLGgsVyksSXYoZixXLGgpKSxudWxsIT09ZCYmeTYoaCxXKSxtZX1mdW5jdGlvbiB5ZSgpe2xldCBj'@;
put 'PU1jKCk7YjkoKT9DbSgpOihjPWMucGFyZW50LE4xKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIFVUKGMpe3JldHVybiBQby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBHVCgpe1BvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiB6'@;
put 'VCgpe1BvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9VHMoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihFbShhLGMpLE9kKGMpJiZhLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbnVsbCE9bC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIHNEKGMpe3JldHVy'@;
put 'biAwIT0oOCZjLmZsYWdzKX0obCkmJkp2KGEsbCxYcigpLGwuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT1sLnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBhRChjKXtyZXR1cm4gMCE9KDE2JmMuZmxhZ3MpfShsKSYmSnYoYSxsLFhyKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSks'@;
put 'eWV9ZnVuY3Rpb24gcXQoYyxsLGEsZCl7cmV0dXJuIG1lKGMsbCxhLGQpLHllKCkscXR9bGV0IGRNPShjLGwsYSxkLGgsZik9PihWZCghMCkscW0oZCxoLGZ1bmN0aW9uIEd3KCl7cmV0dXJuIFBvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gVnIoYyxsLGEpe2NvbnN0'@;
put 'IGQ9WHIoKSxoPVRzKCksZj1jK3BzLF89aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gUXYoYyxsLGEsZCxoKXtjb25zdCBmPWwuY29uc3RzLF89RHIoZixkKSxUPUczKGwsYyw4LCJuZy1jb250YWluZXIiLF8pO3JldHVybiBudWxsIT09XyYmTTYoVCxfLCEwKSxPdihsLGEsVCxEcihmLGgp'@;
put 'KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsVCksVH0oZixoLGQsbCxhKTpoLmRhdGFbZl07TjEoXywhMCk7Y29uc3QgVD1mTShoLGQsXyxjKTtyZXR1cm4gZFtmXT1ULHhtKCkmJmU2KGgsZCxULF8pLEJjKFQsZCkscWgoXykmJihMdihoLGQsXyksSXYoaCxf'@;
put 'LGQpKSxudWxsIT1hJiZ5NihkLF8pLFZyfWZ1bmN0aW9uIHpyKCl7bGV0IGM9TWMoKTtjb25zdCBsPVRzKCk7cmV0dXJuIGI5KCk/Q20oKTooYz1jLnBhcmVudCxOMShjLCExKSksbC5maXJzdENyZWF0ZVBhc3MmJihFbShsLGMpLE9kKGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksenJ9'@;
put 'ZnVuY3Rpb24gamEoYyxsLGEpe3JldHVybiBWcihjLGwsYSksenIoKSxqYX1sZXQgZk09KGMsbCxhLGQpPT4oVmQoITApLFU5KGxbVm9dLCIiKSk7ZnVuY3Rpb24gVm4oKXtyZXR1cm4gWHIoKX1mdW5jdGlvbiB2NShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59ZnVu'@;
put 'Y3Rpb24gcE0oYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9ZnVuY3Rpb24geHQoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPU1jKCk7cmV0dXJuIGdNKGYsaCxoW1ZvXSxfLGMsbCxkKSx4dH1mdW5jdGlvbiBlXyhjLGwpe2NvbnN0IGE9TWMoKSxk'@;
put 'PVhyKCksaD1UcygpO3JldHVybiBnTShoLGQsVlModzkoaC5kYXRhKSxhLGQpLGEsYyxsKSxlX31mdW5jdGlvbiBnTShjLGwsYSxkLGgsZixfKXtjb25zdCBUPXFoKGQpLGllPWMuZmlyc3RDcmVhdGVQYXNzJiZOUyhjKSxwZT1sW1ZhXSx3ZT1IUyhsKTtsZXQgRWU9ITA7aWYoMyZkLnR5cGV8'@;
put 'fF8pe2NvbnN0IGV0PU5sKGQsbCkseXQ9Xz9fKGV0KTpldCxFdD13ZS5sZW5ndGgsU3Q9Xz9ubj0+XyhfYShubltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IEp0PW51bGw7aWYoIV8mJlQmJihKdD1mdW5jdGlvbiBYTChjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihs'@;
put 'ZXQgZj0wO2Y8aC5sZW5ndGgtMTtmKz0yKXtjb25zdCBfPWhbZl07aWYoXz09PWEmJmhbZisxXT09PWQpe2NvbnN0IFQ9bFtUdV0sVz1oW2YrMl07cmV0dXJuIFQubGVuZ3RoPlc/VFtXXTpudWxsfSJzdHJpbmciPT10eXBlb2YgXyYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4'@;
put 'KSksbnVsbCE9PUp0KShKdC5fX25nTGFzdExpc3RlbmVyRm5fX3x8SnQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsSnQuX19uZ0xhc3RMaXN0ZW5lckZuX189ZixFZT0hMTtlbHNle2Y9dk0oZCxsLHBlLGYsITEpO2NvbnN0IG5uPWEubGlzdGVuKHl0LGgsZik7d2UucHVzaChmLG5uKSxpZSYm'@;
put 'aWUucHVzaChoLFN0LEV0LEV0KzEpfX1lbHNlIGY9dk0oZCxsLHBlLGYsITEpO2NvbnN0IFplPWQub3V0cHV0cztsZXQgaXQ7aWYoRWUmJm51bGwhPT1aZSYmKGl0PVplW2hdKSl7Y29uc3QgZXQ9aXQubGVuZ3RoO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldDt5dCs9Mil7Y29uc3Qgdm49bFtp'@;
put 'dFt5dF1dW2l0W3l0KzFdXS5zdWJzY3JpYmUoZiksTm49d2UubGVuZ3RoO3dlLnB1c2goZix2biksaWUmJmllLnB1c2goaCxkLmluZGV4LE5uLC0oTm4rMSkpfX19ZnVuY3Rpb24gbU0oYyxsLGEsZCl7dHJ5e3JldHVybiBoMCg2LGwsYSksITEhPT1hKGQpfWNhdGNoKGgpe3JldHVybiBCUyhj'@;
put 'LGgpLCExfWZpbmFsbHl7aDAoNyxsLGEpfX1mdW5jdGlvbiB2TShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKF8pe2lmKF89PT1GdW5jdGlvbilyZXR1cm4gZDthNShjLmNvbXBvbmVudE9mZnNldD4tMT9tdChjLmluZGV4LGwpOmwpO2xldCBXPW1NKGwsYSxkLF8pLGllPWYuX19uZ05l'@;
put 'eHRMaXN0ZW5lckZuX187Zm9yKDtpZTspVz1tTShsLGEsaWUsXykmJlcsaWU9aWUuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09VyYmXy5wcmV2ZW50RGVmYXVsdCgpLFd9fWZ1bmN0aW9uIFZlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIFhUKGMpe3JldHVybihQby5sRnJhbWUu'@;
put 'Y29udGV4dExWaWV3PWZ1bmN0aW9uIEpUKGMsbCl7Zm9yKDtjPjA7KWw9bFtQbF0sYy0tO3JldHVybiBsfShjLFBvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtWYV19KGMpfWZ1bmN0aW9uIEpMKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBkPWZ1bmN0aW9uIFdoKGMpe2NvbnN0IGw9Yy5hdHRycztp'@;
put 'ZihudWxsIT1sKXtjb25zdCBhPWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxsPT09ZD9tNChjLGYsITApOnY0KGQsZikpcmV0dXJuIGh9'@;
put 'ZWxzZSBhPWh9cmV0dXJuIGF9ZnVuY3Rpb24gQWkoYyl7Y29uc3QgbD1YcigpW0phXVt6b107aWYoIWwucHJvamVjdGlvbil7Y29uc3QgZD1sLnByb2plY3Rpb249QmQoYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IF89'@;
put 'Yz9KTChmLGMpOjA7bnVsbCE9PV8mJihoW19dP2hbX10ucHJvamVjdGlvbk5leHQ9ZjpkW19dPWYsaFtfXT1mKSxmPWYubmV4dH19fWZ1bmN0aW9uIGtyKGMsbD0wLGEpe2NvbnN0IGQ9WHIoKSxoPVRzKCksZj1HMyhoLHBzK2MsMTYsbnVsbCxhfHxudWxsKTtudWxsPT09Zi5wcm9qZWN0aW9u'@;
put 'JiYoZi5wcm9qZWN0aW9uPWwpLENtKCksKCFkW3UwXXx8dzMoKSkmJjMyIT0oMzImZi5mbGFncykmJmZ1bmN0aW9uIFlEKGMsbCxhKXtXRChsW1ZvXSwwLGwsYSxGMyhjLGEsbCksVzEoYS5wYXJlbnR8fGxbem9dLGEsbCkpfShoLGQsZil9ZnVuY3Rpb24gRWMoYyxsLGEpe3JldHVybiBYMihj'@;
put 'LCIiLGwsIiIsYSksRWN9ZnVuY3Rpb24gWDIoYyxsLGEsZCxoKXtjb25zdCBmPVhyKCksXz1LMyhmLGwsYSxkKTtyZXR1cm4gXyE9PVpvJiZQdShUcygpLFFhKCksZixjLF8sZltWb10saCwhMSksWDJ9ZnVuY3Rpb24gYjUoYyxsKXtyZXR1cm4gYzw8MTd8bDw8Mn1mdW5jdGlvbiBYMChjKXty'@;
put 'ZXR1cm4gYz4+MTcmMzI3Njd9ZnVuY3Rpb24gdF8oYyl7cmV0dXJuIDJ8Y31mdW5jdGlvbiBKMChjKXtyZXR1cm4oMTMxMDY4JmMpPj4yfWZ1bmN0aW9uIG5fKGMsbCl7cmV0dXJuLTEzMTA2OSZjfGw8PDJ9ZnVuY3Rpb24gcl8oYyl7cmV0dXJuIDF8Y31mdW5jdGlvbiBNTShjLGwsYSxkLGgp'@;
put 'e2NvbnN0IGY9Y1thKzFdLF89bnVsbD09PWw7bGV0IFQ9ZD9YMChmKTpKMChmKSxXPSExO2Zvcig7MCE9PVQmJighMT09PVd8fF8pOyl7Y29uc3QgcGU9Y1tUKzFdO25SKGNbVF0sbCkmJihXPSEwLGNbVCsxXT1kP3JfKHBlKTp0XyhwZSkpLFQ9ZD9YMChwZSk6SjAocGUpfVcmJihjW2ErMV09'@;
put 'ZD90XyhmKTpyXyhmKSl9ZnVuY3Rpb24gblIoYyxsKXtyZXR1cm4gbnVsbD09PWN8fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlwZW9mIGwpJiZqZChjLGwpPj0wfWNvbnN0IEJsPXt0ZXh0RW5kOjAsa2V5'@;
put 'OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiB4TShjKXtyZXR1cm4gYy5zdWJzdHJpbmcoQmwua2V5LEJsLmtleUVuZCl9ZnVuY3Rpb24gRU0oYyxsKXtjb25zdCBhPUJsLnRleHRFbmQ7cmV0dXJuIGE9PT1sPy0xOihsPUJsLmtleUVuZD1mdW5jdGlvbiBzUihjLGws'@;
put 'YSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKT4zMjspbCsrO3JldHVybiBsfShjLEJsLmtleT1sLGEpLHZmKGMsbCxhKSl9ZnVuY3Rpb24gdmYoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMyOylsKys7cmV0dXJuIGx9ZnVuY3Rpb24gSHUoYyxsLGEpe3JldHVybiB2MChj'@;
put 'LGwsYSwhMSksSHV9ZnVuY3Rpb24gZHIoYyxsKXtyZXR1cm4gdjAoYyxsLG51bGwsITApLGRyfWZ1bmN0aW9uIEsxKGMsbCl7Zm9yKGxldCBhPWZ1bmN0aW9uIGlSKGMpe3JldHVybiBmdW5jdGlvbiBGdShjKXtCbC5rZXk9MCxCbC5rZXlFbmQ9MCxCbC52YWx1ZT0wLEJsLnZhbHVlRW5kPTAs'@;
put 'QmwudGV4dEVuZD1jLmxlbmd0aH0oYyksRU0oYyx2ZihjLDAsQmwudGV4dEVuZCkpfShsKTthPj0wO2E9RU0obCxhKSl4YyhjLHhNKGwpLCEwKX1mdW5jdGlvbiB2MChjLGwsYSxkKXtjb25zdCBoPVhyKCksZj1UcygpLF89VjEoMik7Zi5maXJzdFVwZGF0ZVBhc3MmJlgxKGYsYyxfLGQpLGwh'@;
put 'PT1abyYmamMoaCxfLGwpJiZjXyhmLGYuZGF0YVtldSgpXSxoLGhbVm9dLGMsaFtfKzFdPWZ1bmN0aW9uIExNKGMsbCl7cmV0dXJuIG51bGw9PWN8fCIiPT09Y3x8KCJzdHJpbmciPT10eXBlb2YgbD9jKz1sOiJvYmplY3QiPT10eXBlb2YgYyYmKGM9cWEoJDIoYykpKSksY30obCxhKSxkLF8p'@;
put 'fWZ1bmN0aW9uIERNKGMsbCl7cmV0dXJuIGw+PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gWDEoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW2V1KCldLF89RE0oYyxhKTt1XyhmLGQpJiZudWxsPT09bCYmIV8mJihsPSExKSxsPWZ1bmN0'@;
put 'aW9uIGxSKGMsbCxhLGQpe2NvbnN0IGg9dzkoYyk7bGV0IGY9ZD9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9eTUoYT1sXyhudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1u'@;
put 'dWxsKTtlbHNle2NvbnN0IF89bC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PV98fGNbX10hPT1oKWlmKGE9bF8oaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IFc9ZnVuY3Rpb24gY1IoYyxsLGEpe2NvbnN0IGQ9YT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1K'@;
put 'MChkKSlyZXR1cm4gY1tYMChkKV19KGMsbCxkKTt2b2lkIDAhPT1XJiZBcnJheS5pc0FycmF5KFcpJiYoVz1sXyhudWxsLGMsbCxXWzFdLGQpLFc9eTUoVyxsLmF0dHJzLGQpLGZ1bmN0aW9uIHVSKGMsbCxhLGQpe2NbWDAoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0o'@;
put 'YyxsLGQsVykpfWVsc2UgZj1mdW5jdGlvbiBkUihjLGwsYSl7bGV0IGQ7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD15NShkLGNbZl0uaG9zdEF0dHJzLGEpO3JldHVybiB5NShkLGwuYXR0cnMsYSl9KGMsbCxkKX1y'@;
put 'ZXR1cm4gdm9pZCAwIT09ZiYmKGQ/bC5yZXNpZHVhbENsYXNzZXM9ZjpsLnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIGVSKGMsbCxhLGQsaCxmKXtsZXQgXz1mP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MsVD1YMChfKSxXPUowKF8pO2NbZF09YTtsZXQg'@;
put 'cGUsaWU9ITE7aWYoQXJyYXkuaXNBcnJheShhKT8ocGU9YVsxXSwobnVsbD09PXBlfHxqZChhLHBlKT4wKSYmKGllPSEwKSk6cGU9YSxoKWlmKDAhPT1XKXtjb25zdCBFZT1YMChjW1QrMV0pO2NbZCsxXT1iNShFZSxUKSwwIT09RWUmJihjW0VlKzFdPW5fKGNbRWUrMV0sZCkpLGNbVCsxXT1m'@;
put 'dW5jdGlvbiBDaShjLGwpe3JldHVybiAxMzEwNzEmY3xsPDwxN30oY1tUKzFdLGQpfWVsc2UgY1tkKzFdPWI1KFQsMCksMCE9PVQmJihjW1QrMV09bl8oY1tUKzFdLGQpKSxUPWQ7ZWxzZSBjW2QrMV09YjUoVywwKSwwPT09VD9UPWQ6Y1tXKzFdPW5fKGNbVysxXSxkKSxXPWQ7aWUmJihjW2Qr'@;
put 'MV09dF8oY1tkKzFdKSksTU0oYyxwZSxkLCEwKSxNTShjLHBlLGQsITEpLGZ1bmN0aW9uIHRSKGMsbCxhLGQsaCl7Y29uc3QgZj1oP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBsJiZqZChmLGwpPj0wJiYoYVtkKzFdPXJfKGFb'@;
put 'ZCsxXSkpfShsLHBlLGMsZCxmKSxfPWI1KFQsVyksZj9sLmNsYXNzQmluZGluZ3M9XzpsLnN0eWxlQmluZGluZ3M9X30oaCxmLGwsYSxfLGQpfX1mdW5jdGlvbiBsXyhjLGwsYSxkLGgpe2xldCBmPW51bGw7Y29uc3QgXz1hLmRpcmVjdGl2ZUVuZDtsZXQgVD1hLmRpcmVjdGl2ZVN0eWxpbmdM'@;
put 'YXN0O2ZvcigtMT09PVQ/VD1hLmRpcmVjdGl2ZVN0YXJ0OlQrKztUPF8mJihmPWxbVF0sZD15NShkLGYuaG9zdEF0dHJzLGgpLGYhPT1jKTspVCsrO3JldHVybiBudWxsIT09YyYmKGEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9VCksZH1mdW5jdGlvbiB5NShjLGwsYSl7Y29uc3QgZD1hPzE6Mjts'@;
put 'ZXQgaD0tMTtpZihudWxsIT09bClmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7Y29uc3QgXz1sW2ZdOyJudW1iZXIiPT10eXBlb2YgXz9oPV86aD09PWQmJihBcnJheS5pc0FycmF5KGMpfHwoYz12b2lkIDA9PT1jP1tdOlsiIixjXSkseGMoYyxfLCEhYXx8bFsrK2ZdKSl9cmV0dXJuIHZv'@;
put 'aWQgMD09PWM/bnVsbDpjfWZ1bmN0aW9uIGNfKGMsbCxhLGQsaCxmLF8sVCl7aWYoISgzJmwudHlwZSkpcmV0dXJuO2NvbnN0IFc9Yy5kYXRhLGllPVdbVCsxXSxwZT1mdW5jdGlvbiBRTChjKXtyZXR1cm4gMT09KDEmYyl9KGllKT9lbChXLGwsYSxoLEowKGllKSxfKTp2b2lkIDA7SjEocGUp'@;
put 'fHwoSjEoZil8fGZ1bmN0aW9uIFNNKGMpe3JldHVybiAyPT0oMiZjKX0oaWUpJiYoZj1lbChXLG51bGwsYSxoLFQsXykpLGZ1bmN0aW9uIElaKGMsbCxhLGQsaCl7aWYobCloP2MuYWRkQ2xhc3MoYSxkKTpjLnJlbW92ZUNsYXNzKGEsZCk7ZWxzZXtsZXQgZj0tMT09PWQuaW5kZXhPZigiLSIp'@;
put 'P3ZvaWQgMDpZMi5EYXNoQ2FzZTtudWxsPT1oP2MucmVtb3ZlU3R5bGUoYSxkLGYpOigic3RyaW5nIj09dHlwZW9mIGgmJmguZW5kc1dpdGgoIiFpbXBvcnRhbnQiKSYmKGg9aC5zbGljZSgwLC0xMCksZnw9WTIuSW1wb3J0YW50KSxjLnNldFN0eWxlKGEsZCxoLGYpKX19KGQsXyxZMChldSgp'@;
put 'LGEpLGgsZikpfWZ1bmN0aW9uIGVsKGMsbCxhLGQsaCxmKXtjb25zdCBfPW51bGw9PT1sO2xldCBUO2Zvcig7aD4wOyl7Y29uc3QgVz1jW2hdLGllPUFycmF5LmlzQXJyYXkoVykscGU9aWU/V1sxXTpXLHdlPW51bGw9PT1wZTtsZXQgRWU9YVtoKzFdO0VlPT09Wm8mJihFZT13ZT9Tczp2b2lk'@;
put 'IDApO2xldCBaZT13ZT90ZihFZSxkKTpwZT09PWQ/RWU6dm9pZCAwO2lmKGllJiYhSjEoWmUpJiYoWmU9dGYoVyxkKSksSjEoWmUpJiYoVD1aZSxfKSlyZXR1cm4gVDtjb25zdCBpdD1jW2grMV07aD1fP1gwKGl0KTpKMChpdCl9aWYobnVsbCE9PWwpe2xldCBXPWY/bC5yZXNpZHVhbENsYXNz'@;
put 'ZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1XJiYoVD10ZihXLGQpKX1yZXR1cm4gVH1mdW5jdGlvbiBKMShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiB1XyhjLGwpe3JldHVybiAwIT0oYy5mbGFncyYobD84OjE2KSl9ZnVuY3Rpb24gTmUoYyxsPSIiKXtjb25zdCBhPVhyKCksZD1U'@;
put 'cygpLGg9YytwcyxmPWQuZmlyc3RDcmVhdGVQYXNzP0czKGQsaCwxLGwsbnVsbCk6ZC5kYXRhW2hdLF89ZF8oZCxhLGYsbCxjKTthW2hdPV8seG0oKSYmZTYoZCxhLF8sZiksTjEoZiwhMSl9bGV0IGRfPShjLGwsYSxkLGgpPT4oVmQoITApLGZ1bmN0aW9uICRtKGMsbCl7cmV0dXJuIGMuY3Jl'@;
put 'YXRlVGV4dChsKX0obFtWb10sZCkpO2Z1bmN0aW9uIG9yKGMpe3JldHVybiBncigiIixjLCIiKSxvcn1mdW5jdGlvbiBncihjLGwsYSl7Y29uc3QgZD1YcigpLGg9SzMoZCxjLGwsYSk7cmV0dXJuIGghPT1abyYmR2QoZCxldSgpLGgpLGdyfWZ1bmN0aW9uIHpjKGMsbCxhLGQsaCl7Y29uc3Qg'@;
put 'Zj1YcigpLF89ZnVuY3Rpb24gWDMoYyxsLGEsZCxoLGYpe2NvbnN0IFQ9Z2YoYyxOZCgpLGEsaCk7cmV0dXJuIFYxKDIpLFQ/bCtrbyhhKStkK2tvKGgpK2Y6Wm99KGYsYyxsLGEsZCxoKTtyZXR1cm4gXyE9PVpvJiZHZChmLGV1KCksXyksemN9ZnVuY3Rpb24gYjAoYyxsLGEsZCxoLGYsXyl7'@;
put 'Y29uc3QgVD1YcigpLFc9ZnVuY3Rpb24gSjMoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBpZT1UNihjLE5kKCksYSxoLF8pO3JldHVybiBWMSgzKSxpZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUOlpvfShULGMsbCxhLGQsaCxmLF8pO3JldHVybiBXIT09Wm8mJkdkKFQsZXUoKSxXKSxiMH1m'@;
put 'dW5jdGlvbiB3NShjLGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9WHIoKSxwZT1mdW5jdGlvbiBRMyhjLGwsYSxkLGgsZixfLFQsVyxpZSl7Y29uc3Qgd2U9bTAoYyxOZCgpLGEsaCxfLFcpO3JldHVybiBWMSg0KSx3ZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUK2tvKFcpK2llOlpvfShp'@;
put 'ZSxjLGwsYSxkLGgsZixfLFQsVyk7cmV0dXJuIHBlIT09Wm8mJkdkKGllLGV1KCkscGUpLHc1fWZ1bmN0aW9uIEZNKGMsbCxhKXshZnVuY3Rpb24gXzAoYyxsLGEsZCl7Y29uc3QgaD1UcygpLGY9VjEoMik7aC5maXJzdFVwZGF0ZVBhc3MmJlgxKGgsbnVsbCxmLGQpO2NvbnN0IF89WHIoKTtp'@;
put 'ZihhIT09Wm8mJmpjKF8sZixhKSl7Y29uc3QgVD1oLmRhdGFbZXUoKV07aWYodV8oVCxkKSYmIURNKGgsZikpe2xldCBXPWQ/VC5jbGFzc2VzV2l0aG91dEhvc3Q6VC5zdHlsZXNXaXRob3V0SG9zdDtudWxsIT09VyYmKGE9X2MoVyxhfHwiIikpLEp2KGgsVCxfLGEsZCl9ZWxzZSFmdW5jdGlv'@;
put 'biBhYyhjLGwsYSxkLGgsZixfLFQpe2g9PT1abyYmKGg9U3MpO2xldCBXPTAsaWU9MCxwZT0wPGgubGVuZ3RoP2hbMF06bnVsbCx3ZT0wPGYubGVuZ3RoP2ZbMF06bnVsbDtmb3IoO251bGwhPT1wZXx8bnVsbCE9PXdlOyl7Y29uc3QgRWU9VzxoLmxlbmd0aD9oW1crMV06dm9pZCAwLFplPWll'@;
put 'PGYubGVuZ3RoP2ZbaWUrMV06dm9pZCAwO2xldCBldCxpdD1udWxsO3BlPT09d2U/KFcrPTIsaWUrPTIsRWUhPT1aZSYmKGl0PXdlLGV0PVplKSk6bnVsbD09PXdlfHxudWxsIT09cGUmJnBlPHdlPyhXKz0yLGl0PXBlKTooaWUrPTIsaXQ9d2UsZXQ9WmUpLG51bGwhPT1pdCYmY18oYyxsLGEs'@;
put 'ZCxpdCxldCxfLFQpLHBlPVc8aC5sZW5ndGg/aFtXXTpudWxsLHdlPWllPGYubGVuZ3RoP2ZbaWVdOm51bGx9fShoLFQsXyxfW1ZvXSxfW2YrMV0sX1tmKzFdPWZ1bmN0aW9uIGhSKGMsbCxhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIFNzO2NvbnN0IGQ9W10saD0kMihhKTtpZihBcnJh'@;
put 'eS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxmLGhbZl0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGgmJmwoZCxoKTtyZXR1'@;
put 'cm4gZH0oYyxsLGEpLGQsZil9fSh4YyxLMSxLMyhYcigpLGMsbCxhKSwhMCl9ZnVuY3Rpb24gdDEoYyxsLGEpe2NvbnN0IGQ9WHIoKTtyZXR1cm4gamMoZCxDMygpLGwpJiZQdShUcygpLFFhKCksZCxjLGwsZFtWb10sYSwhMCksdDF9ZnVuY3Rpb24gUzUoYyxsLGEpe2NvbnN0IGQ9WHIoKTtp'@;
put 'ZihqYyhkLEMzKCksbCkpe2NvbnN0IGY9VHMoKSxfPVFhKCk7UHUoZixfLGQsYyxsLFZTKHc5KGYuZGF0YSksXyxkKSxhLCEwKX1yZXR1cm4gUzV9Y29uc3QgYmY9dm9pZCAwO3ZhciBINj1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGJmXSxbWyJBTSIsIlBNIl0sYmYsYmZdLFtbIlMi'@;
put 'LCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwi'@;
put 'VGgiLCJGciIsIlNhIl1dLGJmLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnki'@;
put 'LCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxiZixbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2Qv'@;
put 'eXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLGJmLCJ7MX0gJ2F0JyB7MH0iLGJmXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJc'@;
put 'eGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIHpNKGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3Ry'@;
put 'aW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1fV07bGV0ICRkPXt9O2Z1bmN0aW9uIGpsKGMpe2NvbnN0IGw9ZnVuY3Rpb24gRVIoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9X18o'@;
put 'bCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPV9fKGQpLGEpcmV0dXJuIGE7aWYoImVuIj09PWQpcmV0dXJuIEg2O3Rocm93IG5ldyBBcig3MDEsITEpfWZ1bmN0aW9uIF9fKGMpe3JldHVybiBjIGluICRkfHwoJGRbY109T2kubmcmJk9pLm5nLmNvbW1vbiYm'@;
put 'T2kubmcuY29tbW9uLmxvY2FsZXMmJk9pLm5nLmNvbW1vbi5sb2NhbGVzW2NdKSwkZFtjXX12YXIgcW89ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0'@;
put 'YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIixjW2MuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIsY1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0i'@;
put 'TW9udGhzU3RhbmRhbG9uZSIsY1tjLkVyYXM9N109IkVyYXMiLGNbYy5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRp'@;
put 'bWVGb3JtYXQiLGNbYy5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0IixjW2MuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tj'@;
put 'LkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLGNbYy5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0i'@;
put 'UGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSIsY30ocW98fHt9KTtjb25zdCBpcD0iZW4tVVMiO2xldCByZT1pcDtmdW5jdGlvbiBacihjLGwsYSxkLGgpe2lmKGM9Ym8oYyksQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKylacihjW2Zd'@;
put 'LGwsYSxkLGgpO2Vsc2V7Y29uc3QgZj1UcygpLF89WHIoKTtsZXQgVD1sZihjKT9jOmJvKGMucHJvdmlkZSksVz1RQyhjKTtjb25zdCBpZT1NYygpLHBlPTEwNDg1NzUmaWUucHJvdmlkZXJJbmRleGVzLHdlPWllLmRpcmVjdGl2ZVN0YXJ0LEVlPWllLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYo'@;
put 'bGYoYyl8fCFjLm11bHRpKXtjb25zdCBaZT1uZXcgUjQoVyxoLHR0KSxpdD1jaShULGwsaD9wZTpwZStFZSx3ZSk7LTE9PT1pdD8oVDkoSW0oaWUsXyksZixUKSxMcihmLGMsbC5sZW5ndGgpLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5w'@;
put 'cm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChaZSksXy5wdXNoKFplKSk6KGFbaXRdPVplLF9baXRdPVplKX1lbHNle2NvbnN0IFplPWNpKFQsbCxwZStFZSx3ZSksaXQ9Y2koVCxsLHBlLHBlK0VlKSx5dD1pdD49MCYmYVtpdF07aWYoaCYmIXl0fHwhaCYmIShaZT49MCYmYVtaZV0p'@;
put 'KXtUOShJbShpZSxfKSxmLFQpO2NvbnN0IEV0PWZ1bmN0aW9uIFVvKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUjQoYyxhLHR0KTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCxNaShmLGgsZCYmIWEpLGZ9KGg/cG86Q28sYS5sZW5ndGgsaCxkLFcp'@;
put 'OyFoJiZ5dCYmKGFbaXRdLnByb3ZpZGVyRmFjdG9yeT1FdCksTHIoZixjLGwubGVuZ3RoLDApLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChFdCksXy5wdXNoKEV0KX1lbHNlIExy'@;
put 'KGYsYyxaZT4tMT9aZTppdCxNaShhW2g/aXQ6WmVdLFcsIWgmJmQpKTshaCYmZCYmeXQmJmFbaXRdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gTHIoYyxsLGEsZCl7Y29uc3QgaD1sZihsKSxmPWZ1bmN0aW9uIGU1KGMpe3JldHVybiEhYy51c2VDbGFzc30obCk7aWYoaHx8Zil7'@;
put 'Y29uc3QgVz0oZj9ibyhsLnVzZUNsYXNzKTpsKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoVyl7Y29uc3QgaWU9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IHBlPWllLmluZGV4T2YoYSk7LTE9PT1wZT9pZS5wdXNoKGEsW2QsV10p'@;
put 'OmllW3BlKzFdLnB1c2goZCxXKX1lbHNlIGllLnB1c2goYSxXKX19fWZ1bmN0aW9uIE1pKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBjaShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJl'@;
put 'dHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIENvKGMsbCxhLGQpe3JldHVybiBWaSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBwbyhjLGwsYSxkKXtjb25zdCBoPXRoaXMubXVsdGk7bGV0IGY7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2NvbnN0IF89dGhpcy5wcm92aWRlckZhY3RvcnkuY29t'@;
put 'cG9uZW50UHJvdmlkZXJzLFQ9UWgoYSxhW0JpXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxkKTtmPVQuc2xpY2UoMCxfKSxWaShoLGYpO2ZvcihsZXQgVz1fO1c8VC5sZW5ndGg7VysrKWYucHVzaChUW1ddKX1lbHNlIGY9W10sVmkoaCxmKTtyZXR1cm4gZn1mdW5jdGlvbiBWaShjLGwp'@;
put 'e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKWwucHVzaCgoMCxjW2FdKSgpKTtyZXR1cm4gbH1mdW5jdGlvbiB0aShjLGw9W10pe3JldHVybiBhPT57YS5wcm92aWRlcnNSZXNvbHZlcj0oZCxoKT0+ZnVuY3Rpb24gYnIoYyxsLGEpe2NvbnN0IGQ9VHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFz'@;
put 'cyl7Y29uc3QgaD1RYyhjKTtacihhLGQuZGF0YSxkLmJsdWVwcmludCxoLCEwKSxacihsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWNsYXNzIFVse31jbGFzcyBjY3t9Y2xhc3Mgd2YgZXh0ZW5kcyBVbHtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlz'@;
put 'Ll9wYXJlbnQ9YSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVtdLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgR1ModGhpcyk7Y29uc3QgaD1OYyhsKTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVdkKGguYm9vdHN0cmFwKSx0aGlzLl9y'@;
put 'M0luamVjdG9yPVR2KGwsYSxbe3Byb3ZpZGU6VWwsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6SzAsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9LC4uLmRdLHFhKGwpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0'@;
put 'b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KGwpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3IzSW5qZWN0b3I7IWwuZGVzdHJveWVkJiZsLmRlc3Ryb3koKSx0aGlzLmRlc3Ry'@;
put 'b3lDYnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveShsKXt0aGlzLmRlc3Ryb3lDYnMucHVzaChsKX19Y2xhc3MgcWQgZXh0ZW5kcyBjY3tjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT1sfWNyZWF0ZShsKXtyZXR1cm4gbmV3IHdm'@;
put 'KHRoaXMubW9kdWxlVHlwZSxsLFtdKX19Y2xhc3MgUTEgZXh0ZW5kcyBVbHtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBHUyh0aGlzKSx0aGlzLmluc3RhbmNlPW51bGw7Y29uc3QgYT1uZXcgY3YoWy4uLmwucHJvdmlkZXJzLHtwcm92'@;
put 'aWRlOlVsLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOkswLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sbC5wYXJlbnR8fHM2KCksbC5kZWJ1Z05hbWUsbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPWEsbC5ydW5FbnZpcm9ubWVudEluaXRp'@;
put 'YWxpemVycyYmYS5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KGwpfX1mdW5jdGlvbiBBUihjLGwsYT1udWxsKXtyZXR1cm4gbmV3IFExKHtwcm92aWRlcnM6'@;
put 'YyxwYXJlbnQ6bCxkZWJ1Z05hbWU6YSxydW5FbnZpcm9ubWVudEluaXRpYWxpemVyczohMH0pLmluamVjdG9yfWxldCB4bGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs'@;
put 'b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPXFDKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/QVIoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51'@;
put 'bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz'@;
put 'LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IGMoYXIocTApKX0pLGN9KSgpO2Z1bmN0aW9uIHBZKGMpe2MuZ2V0U3RhbmRhbG9uZUluamVjdG9yPWw9PmwuZ2V0'@;
put 'KHhsZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoYyl9ZnVuY3Rpb24gJHMoYyxsLGEpe2NvbnN0IGQ9VmMoKStjLGg9WHIoKTtyZXR1cm4gaFtkXT09PVpvP3ExKGgsZCxhP2wuY2FsbChhKTpsKCkpOmZ1bmN0aW9uIGY1KGMsbCl7cmV0dXJuIGNbbF19KGgsZCl9ZnVuY3Rpb24g'@;
put 'SjIoYyxsLGEsZCl7cmV0dXJuIHdZKFhyKCksVmMoKSxjLGwsYSxkKX1mdW5jdGlvbiBRMihjLGwsYSxkLGgpe3JldHVybiBDWShYcigpLFZjKCksYyxsLGEsZCxoKX1mdW5jdGlvbiB5XyhjLGwsYSxkLGgsZil7cmV0dXJuIFNZKFhyKCksVmMoKSxjLGwsYSxkLGgsZil9ZnVuY3Rpb24gV00o'@;
put 'YyxsLGEsZCxoLGYsXyl7cmV0dXJuIGZ1bmN0aW9uIE1ZKGMsbCxhLGQsaCxmLF8sVCxXKXtjb25zdCBpZT1sK2E7cmV0dXJuIG0wKGMsaWUsaCxmLF8sVCk/cTEoYyxpZSs0LFc/ZC5jYWxsKFcsaCxmLF8sVCk6ZChoLGYsXyxUKSk6d18oYyxpZSs0KX0oWHIoKSxWYygpLGMsbCxhLGQsaCxm'@;
put 'LF8pfWZ1bmN0aW9uIHdfKGMsbCl7Y29uc3QgYT1jW2xdO3JldHVybiBhPT09Wm8/dm9pZCAwOmF9ZnVuY3Rpb24gd1koYyxsLGEsZCxoLGYpe2NvbnN0IF89bCthO3JldHVybiBqYyhjLF8saCk/cTEoYyxfKzEsZj9kLmNhbGwoZixoKTpkKGgpKTp3XyhjLF8rMSl9ZnVuY3Rpb24gQ1koYyxs'@;
put 'LGEsZCxoLGYsXyl7Y29uc3QgVD1sK2E7cmV0dXJuIGdmKGMsVCxoLGYpP3ExKGMsVCsyLF8/ZC5jYWxsKF8saCxmKTpkKGgsZikpOndfKGMsVCsyKX1mdW5jdGlvbiBTWShjLGwsYSxkLGgsZixfLFQpe2NvbnN0IFc9bCthO3JldHVybiBUNihjLFcsaCxmLF8pP3ExKGMsVyszLFQ/ZC5jYWxs'@;
put 'KFQsaCxmLF8pOmQoaCxmLF8pKTp3XyhjLFcrMyl9ZnVuY3Rpb24gYmEoYyxsKXtjb25zdCBhPVRzKCk7bGV0IGQ7Y29uc3QgaD1jK3BzO2EuZmlyc3RDcmVhdGVQYXNzPyhkPWZ1bmN0aW9uIFZsZShjLGwpe2lmKGwpZm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pe2NvbnN0IGQ9bFth'@;
put 'XTtpZihjPT09ZC5uYW1lKXJldHVybiBkfX0obCxhLnBpcGVSZWdpc3RyeSksYS5kYXRhW2hdPWQsZC5vbkRlc3Ryb3kmJihhLmRlc3Ryb3lIb29rcz8/PVtdKS5wdXNoKGgsZC5vbkRlc3Ryb3kpKTpkPWEuZGF0YVtoXTtjb25zdCBmPWQuZmFjdG9yeXx8KGQuZmFjdG9yeT1IMShkLnR5cGUp'@;
put 'KSxfPWRpKHR0KTt0cnl7Y29uc3QgVD1CMSghMSksVz1mKCk7cmV0dXJuIEIxKFQpLGZ1bmN0aW9uIEdMKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9KGEsWHIoKSxoLFcpLFd9ZmluYWxseXtkaShfKX19ZnVu'@;
put 'Y3Rpb24gWmwoYyxsLGEpe2NvbnN0IGQ9YytwcyxoPVhyKCksZj0kZShoLGQpO3JldHVybiBDXyhoLGQpP3dZKGgsVmMoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gTTUoYyxsLGEsZCl7Y29uc3QgaD1jK3BzLGY9WHIoKSxfPSRlKGYsaCk7cmV0dXJuIENf'@;
put 'KGYsaCk/Q1koZixWYygpLGwsXy50cmFuc2Zvcm0sYSxkLF8pOl8udHJhbnNmb3JtKGEsZCl9ZnVuY3Rpb24gRFIoYyxsLGEsZCxoKXtjb25zdCBmPWMrcHMsXz1YcigpLFQ9JGUoXyxmKTtyZXR1cm4gQ18oXyxmKT9TWShfLFZjKCksbCxULnRyYW5zZm9ybSxhLGQsaCxUKTpULnRyYW5zZm9y'@;
put 'bShhLGQsaCl9ZnVuY3Rpb24gQ18oYyxsKXtyZXR1cm4gY1tCaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIElSKGMpe3JldHVybiBsPT57c2V0VGltZW91dChjLHZvaWQgMCxsKX19Y29uc3QgRXI9Y2xhc3MgemxlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLl9f'@;
put 'aXNBc3luYz1sfWVtaXQobCl7c3VwZXIubmV4dChsKX1zdWJzY3JpYmUobCxhLGQpe2xldCBoPWwsZj1hfHwoKCk9Pm51bGwpLF89ZDtpZihsJiYib2JqZWN0Ij09dHlwZW9mIGwpe2NvbnN0IFc9bDtoPVcubmV4dD8uYmluZChXKSxmPVcuZXJyb3I/LmJpbmQoVyksXz1XLmNvbXBsZXRlPy5i'@;
put 'aW5kKFcpfXRoaXMuX19pc0FzeW5jJiYoZj1JUihmKSxoJiYoaD1JUihoKSksXyYmKF89SVIoXykpKTtjb25zdCBUPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpoLGVycm9yOmYsY29tcGxldGU6X30pO3JldHVybiBsIGluc3RhbmNlb2YgZWUmJmwuYWRkKFQpLFR9fTtmdW5jdGlvbiBVbGUoKXty'@;
put 'ZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgZWh7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEVyKX1jb25zdHJ1Y3RvcihsPSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGly'@;
put 'dHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtjb25zdCBhPWVoLnByb3RvdHlwZTthW1N5bWJvbC5pdGVyYXRvcl18fChhW1N5bWJv'@;
put 'bC5pdGVyYXRvcl09VWxlKX1nZXQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbbF19bWFwKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcChsKX1maWx0ZXIobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKGwpfWZpbmQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZChsKX1yZWR1'@;
put 'Y2UobCxhKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UobCxhKX1mb3JFYWNoKGwpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaChsKX1zb21lKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNvbWUobCl9dG9BcnJheSgpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9dG9TdHJpbmcoKXty'@;
put 'ZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfXJlc2V0KGwsYSl7Y29uc3QgZD10aGlzO2QuZGlydHk9ITE7Y29uc3QgaD1mdW5jdGlvbiBwMChjKXtyZXR1cm4gYy5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9u'@;
put 'IHoxKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShmKSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KGQuX3Jlc3VsdHMsaCxhKSkmJihkLl9yZXN1bHRz'@;
put 'PWgsZC5sZW5ndGg9aC5sZW5ndGgsZC5sYXN0PWhbdGhpcy5sZW5ndGgtMV0sZC5maXJzdD1oWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt0aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVt'@;
put 'aXQodGhpcyl9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwfWRlc3Ryb3koKXt0aGlzLmNoYW5nZXMuY29tcGxldGUoKSx0aGlzLmNoYW5nZXMudW5zdWJzY3JpYmUoKX19bGV0IHphPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPVdsZSxjfSkoKTtjb25zdCBabGU9'@;
put 'emEsWWxlPWNsYXNzIGV4dGVuZHMgWmxle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2RlY2xhcmF0aW9uTFZpZXc9bCx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXI9YSx0aGlzLmVsZW1lbnRSZWY9ZH1nZXQgc3NySWQoKXtyZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29u'@;
put 'dGFpbmVyLnRWaWV3Py5zc3JJZHx8bnVsbH1jcmVhdGVFbWJlZGRlZFZpZXcobCxhKXtyZXR1cm4gdGhpcy5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxudWxsKX1jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxkKXtjb25zdCBfPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmll'@;
put 'dyxUPWI2KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsXyxsLDQwOTYmdGhpcy5fZGVjbGFyYXRpb25MVmlld1tEb10/NDA5NjoxNixudWxsLF8uZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLGF8fG51bGwsZHx8bnVsbCk7VFtPMl09dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJh'@;
put 'dGlvblRDb250YWluZXIuaW5kZXhdO2NvbnN0IGllPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbaHVdO3JldHVybiBudWxsIT09aWUmJihUW2h1XT1pZS5jcmVhdGVFbWJlZGRlZFZpZXcoXykpLFZ2KF8sVCxsKSxuZXcgZDUoVCl9fTtmdW5jdGlvbiBXbGUoKXtyZXR1cm4gR00oTWMoKSxYcigp'@;
put 'KX1mdW5jdGlvbiBHTShjLGwpe3JldHVybiA0JmMudHlwZT9uZXcgWWxlKGwsYyxZZChjLGwpKTpudWxsfWxldCBhcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5fX05HX0VMRU1FTlRfSURfXz1RbGUsY30pKCk7ZnVuY3Rpb24gUWxlKCl7cmV0dXJuIElZKE1jKCksWHIoKSl9Y29uc3QgZWNl'@;
put 'PWFzLFRZPWNsYXNzIGV4dGVuZHMgZWNle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1nZXQgZWxlbWVudCgpe3JldHVybiBZZCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1n'@;
put 'ZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IHgzKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGw9QTkodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoWHcobCkpe2NvbnN0IGE9TTMobCx0aGlzLl9ob3N0TFZpZXcp'@;
put 'LGQ9QjIobCk7cmV0dXJuIG5ldyB4MyhhW0JpXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyB4MyhudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChsKXtjb25zdCBhPURZKHRoaXMuX2xDb250YWlu'@;
put 'ZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLWljfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVj'@;
put 'dG9yKTtjb25zdCBUPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoVCxoLGZhbHNlKSxUfWNyZWF0ZUNvbXBvbmVudChsLGEsZCxoLGYpe2NvbnN0IF89bCYmIWZ1bmN0aW9uIGVmKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBjfShsKTtsZXQgVDtpZihfKVQ9YTtlbHNle2NvbnN0IGV0PWF8fHt9O1Q9ZXQuaW5kZXgsZD1ldC5pbmplY3RvcixoPWV0LnByb2plY3RhYmxlTm9kZXMsZj1ldC5lbnZpcm9ubWVudEluamVjdG9yfHxldC5uZ01vZHVsZVJlZn1jb25zdCBXPV8/bDpuZXcgaDUoUW8obCkpLGllPWR8fHRo'@;
put 'aXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PVcubmdNb2R1bGUpe2NvbnN0IHl0PShfP2llOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChxMCxudWxsKTt5dCYmKGY9eXQpfVFvKFcuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IFplPVcuY3JlYXRlKGllLGgsbnVsbCxmKTtyZXR1cm4g'@;
put 'dGhpcy5pbnNlcnRJbXBsKFplLmhvc3RWaWV3LFQsZmFsc2UpLFplfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydEltcGwobCxhLCExKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3LGY9aFtCaV07aWYoZnVuY3Rpb24gVW4oYyl7cmV0dXJuIG9jKGNbdWFdKX0oaCkp'@;
put 'e2NvbnN0IFc9dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09Vyl0aGlzLmRldGFjaChXKTtlbHNle2NvbnN0IGllPWhbdWFdLHBlPW5ldyBUWShpZSxpZVt6b10saWVbdWFdKTtwZS5kZXRhY2gocGUuaW5kZXhPZihsKSl9fWNvbnN0IF89dGhpcy5fYWRqdXN0SW5kZXgoYSksVD10aGlzLl9sQ29u'@;
put 'dGFpbmVyO2lmKGZ1bmN0aW9uIGRhKGMsbCxhLGQpe2NvbnN0IGg9aWMrZCxmPWEubGVuZ3RoO2Q+MCYmKGFbaC0xXVtYYV09bCksZDxmLWljPyhsW1hhXT1hW2hdLCQwKGEsaWMrZCxsKSk6KGEucHVzaChsKSxsW1hhXT1udWxsKSxsW3VhXT1hO2NvbnN0IF89bFtPMl07bnVsbCE9PV8mJmEh'@;
put 'PT1fJiZmdW5jdGlvbiBEWihjLGwpe2NvbnN0IGE9Y1tIMl07bFtKYV0hPT1sW3VhXVt1YV1bSmFdJiYoY1t1bV09ITApLG51bGw9PT1hP2NbSDJdPVtsXTphLnB1c2gobCl9KF8sbCk7Y29uc3QgVD1sW2h1XTtudWxsIT09VCYmVC5pbnNlcnRWaWV3KGMpLGxbRG9dfD0xMjh9KGYsaCxULF8p'@;
put 'LCFkKXtjb25zdCBXPVk5KF8sVCksaWU9aFtWb10scGU9SDMoaWUsVFtkMF0pO251bGwhPT1wZSYmZnVuY3Rpb24gakQoYyxsLGEsZCxoLGYpe2RbSGldPWgsZFt6b109bCxHNChjLGQsYSwxLGgsZil9KGYsVFt6b10saWUsaCxwZSxXKX1yZXR1cm4gbC5hdHRhY2hUb1ZpZXdDb250YWluZXJS'@;
put 'ZWYoKSwkMChSUihUKSxfLGwpLGx9bW92ZShsLGEpe3JldHVybiB0aGlzLmluc2VydChsLGEpfWluZGV4T2YobCl7Y29uc3QgYT1EWSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWE/YS5pbmRleE9mKGwpOi0xfXJlbW92ZShsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGws'@;
put 'LTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtkJiYoUG0oUlIodGhpcy5fbENvbnRhaW5lciksYSksS20oZFtCaV0sZCkpfWRldGFjaChsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGwsLTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtyZXR1cm4gZCYmbnVsbCE9UG0oUlIodGhp'@;
put 'cy5fbENvbnRhaW5lciksYSk/bmV3IGQ1KGQpOm51bGx9X2FkanVzdEluZGV4KGwsYT0wKXtyZXR1cm4gbD8/dGhpcy5sZW5ndGgrYX19O2Z1bmN0aW9uIERZKGMpe3JldHVybiBjWzhdfWZ1bmN0aW9uIFJSKGMpe3JldHVybiBjWzhdfHwoY1s4XT1bXSl9ZnVuY3Rpb24gSVkoYyxsKXtsZXQg'@;
put 'YTtjb25zdCBkPWxbYy5pbmRleF07cmV0dXJuIG9jKGQpP2E9ZDooYT1QUyhkLGwsbnVsbCxjKSxsW2MuaW5kZXhdPWEsUzYobCxhKSksTFkoYSxsLGMsZCksbmV3IFRZKGEsYyxsKX1sZXQgTFk9ZnVuY3Rpb24gUlkoYyxsLGEsZCl7aWYoY1tkMF0pcmV0dXJuO2xldCBoO2g9OCZhLnR5cGU/'@;
put 'X2EoZCk6ZnVuY3Rpb24gdGNlKGMsbCl7Y29uc3QgYT1jW1ZvXSxkPWEuY3JlYXRlQ29tbWVudCgiIiksaD1ObChsLGMpO3JldHVybiBZMShhLEgzKGEsaCksZCxmdW5jdGlvbiBaRChjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbZDBdPWh9O2NsYXNz'@;
put 'IE9Se2NvbnN0cnVjdG9yKGwpe3RoaXMucXVlcnlMaXN0PWwsdGhpcy5tYXRjaGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IE9SKHRoaXMucXVlcnlMaXN0KX1zZXREaXJ0eSgpe3RoaXMucXVlcnlMaXN0LnNldERpcnR5KCl9fWNsYXNzIFBSe2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVl'@;
put 'cmllcz1sfWNyZWF0ZUVtYmVkZGVkVmlldyhsKXtjb25zdCBhPWwucXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1udWxsIT09bC5jb250ZW50UXVlcmllcz9sLmNvbnRlbnRRdWVyaWVzWzBdOmEubGVuZ3RoLGg9W107Zm9yKGxldCBmPTA7ZjxkO2YrKyl7Y29uc3QgXz1hLmdldEJ5SW5k'@;
put 'ZXgoZik7aC5wdXNoKHRoaXMucXVlcmllc1tfLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgUFIoaCl9cmV0dXJuIG51bGx9aW5zZXJ0VmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRldGFjaFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJp'@;
put 'ZXNXaXRoTWF0Y2hlcyhsKX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKW51bGwhPT1OWShsLGEpLm1hdGNoZXMmJnRoaXMucXVlcmllc1thXS5zZXREaXJ0eSgpfX1jbGFzcyBPWXtjb25zdHJ1Y3RvcihsLGEsZD1udWxs'@;
put 'KXt0aGlzLnByZWRpY2F0ZT1sLHRoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZH19Y2xhc3MgRlJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9ZWxlbWVudFN0YXJ0KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVuZ3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0uZWxlbWVu'@;
put 'dFN0YXJ0KGwsYSl9ZWxlbWVudEVuZChsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKXRoaXMucXVlcmllc1thXS5lbGVtZW50RW5kKGwpfWVtYmVkZGVkVFZpZXcobCl7bGV0IGE9bnVsbDtmb3IobGV0IGQ9MDtkPHRoaXMubGVuZ3RoO2QrKyl7Y29uc3QgaD1udWxs'@;
put 'IT09YT9hLmxlbmd0aDowLGY9dGhpcy5nZXRCeUluZGV4KGQpLmVtYmVkZGVkVFZpZXcobCxoKTtmJiYoZi5pbmRleEluRGVjbGFyYXRpb25WaWV3PWQsbnVsbCE9PWE/YS5wdXNoKGYpOmE9W2ZdKX1yZXR1cm4gbnVsbCE9PWE/bmV3IEZSKGEpOm51bGx9dGVtcGxhdGUobCxhKXtmb3IobGV0'@;
put 'IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS50ZW1wbGF0ZShsLGEpfWdldEJ5SW5kZXgobCl7cmV0dXJuIHRoaXMucXVlcmllc1tsXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sobCl7dGhpcy5xdWVyaWVzLnB1c2go'@;
put 'bCl9fWNsYXNzIEhSe2NvbnN0cnVjdG9yKGwsYT0tMSl7dGhpcy5tZXRhZGF0YT1sLHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0'@;
put 'aW9uTm9kZUluZGV4PWF9ZWxlbWVudFN0YXJ0KGwsYSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGEpJiZ0aGlzLm1hdGNoVE5vZGUobCxhKX1lbGVtZW50RW5kKGwpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09bC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1w'@;
put 'bGF0ZShsLGEpe3RoaXMuZWxlbWVudFN0YXJ0KGwsYSl9ZW1iZWRkZWRUVmlldyhsLGEpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUobCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtbC5pbmRleCxhKSxuZXcgSFIodGhpcy5tZXRhZGF0YSkpOm51bGx9'@;
put 'aXNBcHBseWluZ1RvTm9kZShsKXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2NvbnN0IGE9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylk'@;
put 'PWQucGFyZW50O3JldHVybiBhPT09KG51bGwhPT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKGwsYSl7Y29uc3QgZD10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7'@;
put 'aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGljZShhLGYpKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTG0oYSxsLGYsITEsITEpKX1lbHNlIGQ9PT16YT80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24o'@;
put 'bCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTG0oYSxsLGQsITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Tml8fGg9PT1hc3x8aD09'@;
put 'PXphJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1MbShhLGwsaCwhMSwhMSk7bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRj'@;
put 'aGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBpY2UoYyxsKXtjb25zdCBhPWMubG9jYWxOYW1lcztpZihudWxsIT09YSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpaWYoYVtkXT09PWwpcmV0dXJuIGFbZCsxXTtyZXR1cm4gbnVsbH1m'@;
put 'dW5jdGlvbiBzY2UoYyxsLGEsZCl7cmV0dXJuLTE9PT1hP2Z1bmN0aW9uIG9jZShjLGwpe3JldHVybiAxMSZjLnR5cGU/WWQoYyxsKTo0JmMudHlwZT9HTShjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIGFjZShjLGwsYSl7cmV0dXJuIGE9PT1OaT9ZZChsLGMpOmE9PT16YT9HTShs'@;
put 'LGMpOmE9PT1hcz9JWShsLGMpOnZvaWQgMH0oYyxsLGQpOlFoKGMsY1tCaV0sYSxsKX1mdW5jdGlvbiBQWShjLGwsYSxkKXtjb25zdCBoPWxbaHVdLnF1ZXJpZXNbZF07aWYobnVsbD09PWgubWF0Y2hlcyl7Y29uc3QgZj1jLmRhdGEsXz1hLm1hdGNoZXMsVD1bXTtmb3IobGV0IFc9MDtXPF8u'@;
put 'bGVuZ3RoO1crPTIpe2NvbnN0IGllPV9bV107VC5wdXNoKGllPDA/bnVsbDpzY2UobCxmW2llXSxfW1crMV0sYS5tZXRhZGF0YS5yZWFkKSl9aC5tYXRjaGVzPVR9cmV0dXJuIGgubWF0Y2hlc31mdW5jdGlvbiBOUihjLGwsYSxkKXtjb25zdCBoPWMucXVlcmllcy5nZXRCeUluZGV4KGEpLGY9'@;
put 'aC5tYXRjaGVzO2lmKG51bGwhPT1mKXtjb25zdCBfPVBZKGMsbCxoLGEpO2ZvcihsZXQgVD0wO1Q8Zi5sZW5ndGg7VCs9Mil7Y29uc3QgVz1mW1RdO2lmKFc+MClkLnB1c2goX1tULzJdKTtlbHNle2NvbnN0IGllPWZbVCsxXSxwZT1sWy1XXTtmb3IobGV0IHdlPWljO3dlPHBlLmxlbmd0aDt3'@;
put 'ZSsrKXtjb25zdCBFZT1wZVt3ZV07RWVbTzJdPT09RWVbdWFdJiZOUihFZVtCaV0sRWUsaWUsZCl9aWYobnVsbCE9PXBlW0gyXSl7Y29uc3Qgd2U9cGVbSDJdO2ZvcihsZXQgRWU9MDtFZTx3ZS5sZW5ndGg7RWUrKyl7Y29uc3QgWmU9d2VbRWVdO05SKFplW0JpXSxaZSxpZSxkKX19fX19cmV0'@;
put 'dXJuIGR9ZnVuY3Rpb24gYWkoYyl7Y29uc3QgbD1YcigpLGE9VHMoKSxkPUJ3KCk7QzkoZCsxKTtjb25zdCBoPU5ZKGEsZCk7aWYoYy5kaXJ0eSYmZnVuY3Rpb24gTHQoYyl7cmV0dXJuIDQ9PSg0JmNbRG9dKX0obCk9PT0oMj09KDImaC5tZXRhZGF0YS5mbGFncykpKXtpZihudWxsPT09aC5t'@;
put 'YXRjaGVzKWMucmVzZXQoW10pO2Vsc2V7Y29uc3QgZj1oLmNyb3NzZXNOZ1RlbXBsYXRlP05SKGEsbCxkLFtdKTpQWShhLGwsaCxkKTtjLnJlc2V0KGYsZGYpLGMubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUm8oYyxsLGEpe2NvbnN0IGQ9VHMoKTtkLmZp'@;
put 'cnN0Q3JlYXRlUGFzcyYmKEhZKGQsbmV3IE9ZKGMsbCxhKSwtMSksMj09KDImbCkmJihkLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSksRlkoZCxYcigpLGwpfWZ1bmN0aW9uIElvKGMsbCxhLGQpe2NvbnN0IGg9VHMoKTtpZihoLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgZj1NYygpO0hZKGgsbmV3'@;
put 'IE9ZKGwsYSxkKSxmLmluZGV4KSxmdW5jdGlvbiBjY2UoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXN8fChjLmNvbnRlbnRRdWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLDI9PSgyJmEpJiYo'@;
put 'aC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9RlkoaCxYcigpLGEpfWZ1bmN0aW9uIGxpKCl7cmV0dXJuIGZ1bmN0aW9uIGxjZShjLGwpe3JldHVybiBjW2h1XS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oWHIoKSxCdygpKX1mdW5jdGlvbiBGWShjLGwsYSl7Y29uc3QgZD1uZXcgZWgoND09KDQm'@;
put 'YSkpOyhmdW5jdGlvbiBWSShjLGwsYSxkKXtjb25zdCBoPUhTKGwpO2gucHVzaChhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmTlMoYykucHVzaChkLGgubGVuZ3RoLTEpfSkoYyxsLGQsZC5kZXN0cm95KSxudWxsPT09bFtodV0mJihsW2h1XT1uZXcgUFIpLGxbaHVdLnF1ZXJpZXMucHVzaChuZXcg'@;
put 'T1IoZCkpfWZ1bmN0aW9uIEhZKGMsbCxhKXtudWxsPT09Yy5xdWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBGUiksYy5xdWVyaWVzLnRyYWNrKG5ldyBIUihsLGEpKX1mdW5jdGlvbiBOWShjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiBrYyhjLGwpe3JldHVybiBH'@;
put 'TShjLGwpfWNvbnN0IFpSPW5ldyBTaSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKTtsZXQgWVI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29s'@;
put 'dmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJbml0cz1GaShaUix7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZih2NShm'@;
put 'KSlhLnB1c2goZik7ZWxzZSBpZihwTShmKSl7Y29uc3QgXz1uZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpULGVycm9yOld9KX0pO2EucHVzaChfKX19Y29uc3QgZD0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigo'@;
put 'KT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVjdChoKX0pLDA9PT1hLmxlbmd0aCYmZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3'@;
put 'NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLHRXPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53YXJuKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCk7Y29uc3QgS2Q9bmV3IFNpKCJMb2NhbGVJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkZpKEtkLG5zLk9wdGlvbmFsfG5zLlNraXBTZWxmKXx8ZnVuY3Rpb24gRGNlKCl7cmV0dXJu'@;
put 'IHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxpcH0oKX0pO2xldCBxTT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy50YXNrSWQ9MCx0aGlzLnBlbmRpbmdUYXNrcz1uZXcgU2V0LHRoaXMuaGFzUGVuZGluZ1Rhc2tzPW5ldyBUZSghMSl9YWRkKCl7dGhp'@;
put 'cy5oYXNQZW5kaW5nVGFza3MubmV4dCghMCk7Y29uc3QgYT10aGlzLnRhc2tJZCsrO3JldHVybiB0aGlzLnBlbmRpbmdUYXNrcy5hZGQoYSksYX1yZW1vdmUoYSl7dGhpcy5wZW5kaW5nVGFza3MuZGVsZXRlKGEpLDA9PT10aGlzLnBlbmRpbmdUYXNrcy5zaXplJiZ0aGlzLmhhc1BlbmRpbmdU'@;
put 'YXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y'@;
put 'eTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIFJjZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMubmdNb2R1bGVGYWN0b3J5PWwsdGhpcy5jb21wb25lbnRGYWN0b3JpZXM9YX19bGV0IG5XPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJu'@;
put 'IG5ldyBxZChhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9V2QoTmMoYSku'@;
put 'ZGVjbGFyYXRpb25zKS5yZWR1Y2UoKF8sVCk9Pntjb25zdCBXPVFvKFQpO3JldHVybiBXJiZfLnB1c2gobmV3IGg1KFcpKSxffSxbXSk7cmV0dXJuIG5ldyBSY2UoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5j'@;
put 'b21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBvVyguLi5jKXt9Y2xhc3MgTm97Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOmw9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjphPSExLHNob3VsZENvYWxlc2NlUnVu'@;
put 'Q2hhbmdlRGV0ZWN0aW9uOmQ9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEVyKCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyKCExKSx0aGlz'@;
put 'Lm9uU3RhYmxlPW5ldyBFcighMSksdGhpcy5vbkVycm9yPW5ldyBFcighMSksdHlwZW9mIFpvbmU+InUiKXRocm93IG5ldyBBcig5MDgsITEpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKTtjb25zdCBoPXRoaXM7aC5fbmVzdGluZz0wLGguX291dGVyPWguX2lubmVyPVpvbmUuY3VycmVudCxa'@;
put 'b25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLGwmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKGguX2lubmVyPWguX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVj'@;
put 'KSksaC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFkJiZhLGguc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249ZCxoLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxoLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbiBGY2UoKXtjb25z'@;
put 'dCBjPSJmdW5jdGlvbiI9PXR5cGVvZiBPaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGw9T2lbYz8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9T2lbYz8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQiXTtpZih0eXBlb2YgWm9uZTwidSImJmwm'@;
put 'JmEpe2NvbnN0IGQ9bFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZCYmKGw9ZCk7Y29uc3QgaD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtoJiYoYT1oKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmwsbmF0aXZlQ2FuY2Vs'@;
put 'QW5pbWF0aW9uRnJhbWU6YX19KCkubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIFZjZShjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIE5jZShjKXtjLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwoYy5sYXN0UmVx'@;
put 'dWVzdEFuaW1hdGlvbkZyYW1lSWQ9Yy5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChPaSwoKT0+e2MuZmFrZVRvcEV2ZW50VGFza3x8KGMuZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BFdmVudFRhc2siLCgpPT57Yy5sYXN0UmVx'@;
put 'dWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsR1IoYyksYy5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxXUihjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLGMuZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pLEdSKGMpKX0oYyl9O2MuX2lubmVyPWMu'@;
put 'X2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooYSxkLGgsZixfLFQpPT57dHJ5e3JldHVybiBzVyhjKSxhLmludm9rZVRhc2soaCxmLF8sVCl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0'@;
put 'ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmwoKSxhVyhjKX19LG9uSW52b2tlOihhLGQsaCxmLF8sVCxXKT0+e3RyeXtyZXR1cm4gc1coYyksYS5pbnZva2UoaCxmLF8sVCxXKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVz'@;
put 'Y2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmwoKSxhVyhjKX19LG9uSGFzVGFzazooYSxkLGgsZik9PnthLmhhc1Rhc2soaCxmKSxkPT09aCYmKCJtaWNyb1Rhc2siPT1mLmNoYW5nZT8oYy5faGFzUGVuZGluZ01pY3JvdGFza3M9Zi5taWNyb1Rhc2ssR1IoYyksV1IoYykpOiJtYWNyb1Rhc2siPT1m'@;
put 'LmNoYW5nZSYmKGMuaGFzUGVuZGluZ01hY3JvdGFza3M9Zi5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooYSxkLGgsZik9PihhLmhhbmRsZUVycm9yKGgsZiksYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vbkVycm9yLmVtaXQoZikpLCExKX0pfShoKX1zdGF0aWMgaXNJbkFuZ3VsYXJa'@;
put 'b25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighTm8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEFyKDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5n'@;
put 'dWxhclpvbmUoKXtpZihOby5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgQXIoOTA5LCExKX1ydW4obCxhLGQpe3JldHVybiB0aGlzLl9pbm5lci5ydW4obCxhLGQpfXJ1blRhc2sobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbm5lcixfPWYuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2'@;
put 'ZW50OiAiK2gsbCxIY2Usb1csb1cpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKF8sYSxkKX1maW5hbGx5e2YuY2FuY2VsVGFzayhfKX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9v'@;
put 'dXRlci5ydW4obCl9fWNvbnN0IEhjZT17fTtmdW5jdGlvbiBXUihjKXtpZigwPT1jLl9uZXN0aW5nJiYhYy5oYXNQZW5kaW5nTWljcm90YXNrcyYmIWMuaXNTdGFibGUpdHJ5e2MuX25lc3RpbmcrKyxjLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKGMuX25lc3Rpbmct'@;
put 'LSwhYy5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e2MuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBHUihjKXtjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tz'@;
put 'fHwoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1jLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gc1coYyl7Yy5fbmVzdGluZysrLGMuaXNTdGFibGUmJihjLmlzU3RhYmxl'@;
put 'PSExLGMub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBhVyhjKXtjLl9uZXN0aW5nLS0sV1IoYyl9Y2xhc3MgQmNle2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhp'@;
put 'cy5vblVuc3RhYmxlPW5ldyBFcix0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyLHRoaXMub25TdGFibGU9bmV3IEVyLHRoaXMub25FcnJvcj1uZXcgRXJ9cnVuKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bkd1YXJkZWQobCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuT3V0'@;
put 'c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFwcGx5KGEsZCl9fWNvbnN0IGxXPW5ldyBTaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpjV30pO2Z1bmN0aW9uIGNXKCl7Y29uc3QgYz1GaShObyk7bGV0IGw9ITA7cmV0dXJuIGlzKG5l'@;
put 'dyBLZShoPT57bD1jLmlzU3RhYmxlJiYhYy5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWMuaGFzUGVuZGluZ01pY3JvdGFza3MsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dChsKSxoLmNvbXBsZXRlKCl9KX0pLG5ldyBLZShoPT57bGV0IGY7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+'@;
put 'e2Y9Yy5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PnshbCYmIWMuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYobD0hMCxoLm5leHQoITApKX0pfSl9KTtjb25zdCBfPWMu'@;
put 'b25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnRJbkFuZ3VsYXJab25lKCksbCYmKGw9ITEsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dCghMSl9KSl9KTtyZXR1cm4oKT0+e2YudW5zdWJzY3JpYmUoKSxfLnVuc3Vic2NyaWJlKCl9fSkucGlwZSgkYSgpKSl9Y29uc3Qg'@;
put 'dVc9bmV3IFNpKCIiKSxLTT1uZXcgU2koIiIpO2xldCBLUiwkUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhp'@;
put 'cy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLEtSfHwoZnVuY3Rpb24gamNlKGMpe0tSPWN9KGgpLGguYWRkVG9XaW5kb3coZCkpLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLGEucnVuKCgpPT57dGhpcy50YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1'@;
put 'Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93YXRjaEFuZ3VsYXJFdmVudHMoKXt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57Tm8uYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHko'@;
put 'KX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5f'@;
put 'cGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10'@;
put 'aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rhc2soKCk9Pntmb3IoOzAhPT10aGlzLl9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2Fs'@;
put 'bGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IodGhpcy5fZGlkV29yayl9dGhpcy5fZGlkV29yaz0hMX0pO2Vsc2V7bGV0IGE9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihkPT4hZC51cGRh'@;
put 'dGVDYnx8IWQudXBkYXRlQ2IoYSl8fChjbGVhclRpbWVvdXQoZC50aW1lb3V0SWQpLCExKSksdGhpcy5fZGlkV29yaz0hMH19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3Vy'@;
put 'Y2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYmKGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKF89Pl8u'@;
put 'dGltZW91dElkIT09ZiksYSh0aGlzLl9kaWRXb3JrLHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZihoJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRo'@;
put 'cm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0'@;
put 'aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o'@;
put 'YSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihxUiksYXIoS00pKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxxUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXB9cmVnaXN0ZXJBcHBsaWNhdGlvbihhLGQpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQoYSxkKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o'@;
put 'YSl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZShhKX11bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHkoYSl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQoYSl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygp'@;
put 'e3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGEsZD0hMCl7cmV0dXJuIEtSPy5maW5kVGVzdGFi'@;
put 'aWxpdHlJblRyZWUodGhpcyxhLGQpPz9udWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCksc3A9bnVsbDtjb25z'@;
put 'dCBkVz1uZXcgU2koIkFsbG93TXVsdGlwbGVUb2tlbiIpLFhSPW5ldyBTaSgiUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzIiksSlI9bmV3IFNpKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO2NsYXNzIGZXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uYW1lPWwsdGhpcy50b2tlbj1hfX1mdW5jdGlv'@;
put 'biBnVyhjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IFNpKGQpO3JldHVybihmPVtdKT0+e2xldCBfPVFSKCk7aWYoIV98fF8uaW5qZWN0b3IuZ2V0KGRXLCExKSl7Y29uc3QgVD1bLi4uYSwuLi5mLHtwcm92aWRlOmgsdXNlVmFsdWU6ITB9XTtjP2MoVCk6ZnVuY3Rp'@;
put 'b24gWmNlKGMpe2lmKHNwJiYhc3AuZ2V0KGRXLCExKSl0aHJvdyBuZXcgQXIoNDAwLCExKTsoZnVuY3Rpb24gaFcoKXshZnVuY3Rpb24gZjkoYyl7THU9Y30oKCk9Pnt0aHJvdyBuZXcgQXIoNjAwLCExKX0pfSkoKSxzcD1jO2NvbnN0IGw9Yy5nZXQodlcpOyhmdW5jdGlvbiBwVyhjKXtjLmdl'@;
put 'dChlUyxudWxsKT8uZm9yRWFjaChhPT5hKCkpfSkoYyl9KGZ1bmN0aW9uIG1XKGM9W10sbCl7cmV0dXJuIEVhLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6dDUsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6WFIsdXNlVmFsdWU6bmV3IFNldChbKCk9PnNwPW51bGxd'@;
put 'KX0sLi4uY119KX0oVCxkKSl9cmV0dXJuIGZ1bmN0aW9uIFdjZShjKXtjb25zdCBsPVFSKCk7aWYoIWwpdGhyb3cgbmV3IEFyKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFFSKCl7cmV0dXJuIHNwPy5nZXQodlcpPz9udWxsfWxldCB2Vz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBHY2UoYz0iem9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9u'@;
put 'ZXcgQmNlOiJ6b25lLmpzIj09PWM/bmV3IE5vKGwpOmN9KGQ/Lm5nWm9uZSxmdW5jdGlvbiBfVyhjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVu'@;
put 'Q2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigoKT0+e2NvbnN0IGY9ZnVuY3Rpb24gYl8oYyxsLGEp'@;
put 'e3JldHVybiBuZXcgd2YoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBTVyhjKXtyZXR1cm5be3Byb3ZpZGU6Tm8sdXNlRmFjdG9yeTpjfSx7cHJvdmlkZTpRNCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShxY2Use29wdGlvbmFsOiEwfSk7'@;
put 'cmV0dXJuKCk9PmwuaW5pdGlhbGl6ZSgpfX0se3Byb3ZpZGU6Q1csdXNlRmFjdG9yeTokY2V9LHtwcm92aWRlOmxXLHVzZUZhY3Rvcnk6Y1d9XX0oKCk9PmgpKSxfPWYuaW5qZWN0b3IuZ2V0KGhmLG51bGwpO3JldHVybiBoLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgVD1oLm9uRXJy'@;
put 'b3Iuc3Vic2NyaWJlKHtuZXh0Olc9PntfLmhhbmRsZUVycm9yKFcpfX0pO2Yub25EZXN0cm95KCgpPT57WE0odGhpcy5fbW9kdWxlcyxmKSxULnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uIGJXKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIHY1KGQpP2QuY2F0Y2goaD0+e3Rocm93'@;
put 'IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fShfLGgsKCk9Pntjb25zdCBUPWYuaW5qZWN0b3IuZ2V0KFlSKTtyZXR1cm4gVC5ydW5Jbml0aWFs'@;
put 'aXplcnMoKSxULmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBnZShjKXtwcihjLCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIiksInN0cmluZyI9PXR5cGVvZiBjJiYocmU9Yy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oZi5pbmplY3Rvci5nZXQoS2Qs'@;
put 'aXApfHxpcCksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoZiksZikpfSl9KX1ib290c3RyYXBNb2R1bGUoYSxkPVtdKXtjb25zdCBoPXlXKHt9LGQpO3JldHVybiBmdW5jdGlvbiB6Y2UoYyxsLGEpe2NvbnN0IGQ9bmV3IHFkKGEpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZCl9KDAsMCxhKS50'@;
put 'aGVuKGY9PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShmLGgpKX1fbW9kdWxlRG9Cb290c3RyYXAoYSl7Y29uc3QgZD1hLmluamVjdG9yLmdldCh4NSk7aWYoYS5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MClhLl9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goaD0+ZC5ib290'@;
put 'c3RyYXAoaCkpO2Vsc2V7aWYoIWEuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgQXIoLTQwMywhMSk7YS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGQpfXRoaXMuX21vZHVsZXMucHVzaChhKX1vbkRlc3Ryb3koYSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpfWdldCBp'@;
put 'bmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBBcig0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZD0+ZCgp'@;
put 'KTtjb25zdCBhPXRoaXMuX2luamVjdG9yLmdldChYUixudWxsKTthJiYoYS5mb3JFYWNoKGQ9PmQoKSksYS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLGN9KSgpO2Z1bmN0aW9uIHlXKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoeVcsYyk6ey4uLmMsLi4ubH19'@;
put 'bGV0IHg1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5pbnRlcm5hbEVycm9ySGFu'@;
put 'ZGxlcj1GaShDVyksdGhpcy56b25lSXNTdGFibGU9RmkobFcpLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuaXNTdGFibGU9RmkocU0pLmhhc1BlbmRpbmdUYXNrcy5waXBlKFNhKGE9PmE/V2koITEpOnRoaXMuem9uZUlzU3RhYmxlKSxmdW5jdGlvbiBG'@;
put 'aChjLGw9T2Upe3JldHVybiBjPWM/P0V1LFhlKChhLGQpPT57bGV0IGgsZj0hMDthLnN1YnNjcmliZShVZShkLF89Pntjb25zdCBUPWwoXyk7KGZ8fCFjKGgsVCkpJiYoZj0hMSxoPVQsZC5uZXh0KF8pKX0pKX0pfSgpLCRhKCkpLHRoaXMuX2luamVjdG9yPUZpKHEwKX1nZXQgZGVzdHJveWVk'@;
put 'KCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgY1M7aWYoIXRoaXMuX2luamVjdG9yLmdldChZUikuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBJZChjKXtjb25zdCBs'@;
put 'PVFvKGMpfHxLYShjKXx8T2woYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBBcig0MDUsITEpO2xldCBfO189aD9hOnRoaXMuX2luamVjdG9yLmdldChLMCkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKF8uY29tcG9u'@;
put 'ZW50VHlwZSk7Y29uc3QgVD1mdW5jdGlvbiBVY2UoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfShfKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KFVsKSxpZT1fLmNyZWF0ZShFYS5OVUxMLFtdLGR8fF8uc2VsZWN0b3IsVCkscGU9aWUubG9jYXRpb24ubmF0aXZlRWxlbWVudCx3ZT1p'@;
put 'ZS5pbmplY3Rvci5nZXQodVcsbnVsbCk7cmV0dXJuIHdlPy5yZWdpc3RlckFwcGxpY2F0aW9uKHBlKSxpZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoaWUuaG9zdFZpZXcpLFhNKHRoaXMuY29tcG9uZW50cyxpZSksd2U/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihwZSl9KSx0aGlz'@;
put 'Ll9sb2FkQ29tcG9uZW50KGllKSxpZX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEFyKDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgYSBvZiB0aGlzLl92aWV3cylhLmRldGVjdENoYW5nZXMoKX1jYXRjaChhKXt0aGlzLmludGVybmFsRXJy'@;
put 'b3JIYW5kbGVyKGEpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITF9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2NvbnN0IGQ9YTtYTSh0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21B'@;
put 'cHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoSlIsW10pO2QucHVzaCguLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLGQuZm9y'@;
put 'RWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhp'@;
put 'cy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5YTSh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0'@;
put 'aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBYTShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNl'@;
put 'KGEsMSl9Y29uc3QgQ1c9bmV3IFNpKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5GaShoZikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7ZnVuY3Rpb24gJGNlKCl7Y29uc3QgYz1GaShObyksbD1GaShoZik7cmV0dXJuIGE9PmMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pmwu'@;
put 'aGFuZGxlRXJyb3IoYSkpfWxldCBxY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuem9uZT1GaShObyksdGhpcy5hcHBsaWNhdGlvblJlZj1GaSh4NSl9aW5pdGlhbGl6ZSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb258fCh0aGlzLl9vbk1pY3JvdGFza0Vt'@;
put 'cHR5U3Vic2NyaXB0aW9uPXRoaXMuem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKX0pfX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24/'@;
put 'LnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2xldCBVYT0oKCk9PntjbGFzcyBje31yZXR1cm4g'@;
put 'Yy5fX05HX0VMRU1FTlRfSURfXz1YY2UsY30pKCk7ZnVuY3Rpb24gWGNlKGMpe3JldHVybiBmdW5jdGlvbiBKY2UoYyxsLGEpe2lmKFAxKGMpJiYhYSl7Y29uc3QgZD1tdChjLmluZGV4LGwpO3JldHVybiBuZXcgZDUoZCxkKX1yZXR1cm4gNDcmYy50eXBlP25ldyBkNShsW0phXSxsKTpudWxs'@;
put 'fShNYygpLFhyKCksMTY9PSgxNiZjKSl9Y2xhc3Mga1d7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIGs2KGwpfWNyZWF0ZShsKXtyZXR1cm4gbmV3IGl1ZShsKX19Y29uc3QgcnVlPShjLGwpPT5sO2NsYXNzIGl1ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxlbmd0aD0wLHRoaXMu'@;
put 'X2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5f'@;
put 'bW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49bHx8'@;
put 'cnVlfWZvckVhY2hJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2l0SGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoT3BlcmF0aW9uKGwpe2xldCBhPXRoaXMuX2l0SGVhZCxkPXRoaXMuX3JlbW92YWxzSGVhZCxoPTAsZj1udWxsO2Zvcig7YXx8ZDspe2NvbnN0IF89IWR8fGEm'@;
put 'JmEuY3VycmVudEluZGV4PFRXKGQsaCxmKT9hOmQsVD1UVyhfLGgsZiksVz1fLmN1cnJlbnRJbmRleDtpZihfPT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxsPT1fLnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IGllPVQtaCxwZT1X'@;
put 'LWg7aWYoaWUhPXBlKXtmb3IobGV0IEVlPTA7RWU8aWU7RWUrKyl7Y29uc3QgWmU9RWU8Zi5sZW5ndGg/ZltFZV06ZltFZV09MCxpdD1aZStFZTtwZTw9aXQmJml0PGllJiYoZltFZV09WmUrMSl9ZltfLnByZXZpb3VzSW5kZXhdPXBlLWllfX1UIT09VyYmbChfLFQsVyl9fWZvckVhY2hQcmV2'@;
put 'aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNo'@;
put 'TW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX21vdmVzSGVhZDtudWxsIT09YTthPWEuX25leHRNb3ZlZClsKGEpfWZvckVhY2hSZW1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UmVtb3ZlZClsKGEpfWZvckVhY2hJZGVu'@;
put 'dGl0eUNoYW5nZShsKXtsZXQgYTtmb3IoYT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dElkZW50aXR5Q2hhbmdlKWwoYSl9ZGlmZihsKXtpZihudWxsPT1sJiYobD1bXSksIWs2KGwpKXRocm93IG5ldyBBcig5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGwp'@;
put 'P3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgaCxmLF8sYT10aGlzLl9pdEhlYWQsZD0hMTtpZihBcnJheS5pc0FycmF5KGwpKXt0aGlzLmxlbmd0aD1sLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylmPWxbVF0sXz10aGlzLl90'@;
put 'cmFja0J5Rm4oVCxmKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLF8pPyhkJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLGYsXyxUKSksT2JqZWN0LmlzKGEuaXRlbSxmKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxmKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxmLF8s'@;
put 'VCksZD0hMCksYT1hLl9uZXh0fWVsc2UgaD0wLGZ1bmN0aW9uIEFMKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7Y29uc3QgYT1jW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTsp'@;
put 'bChkLnZhbHVlKX19KGwsVD0+e189dGhpcy5fdHJhY2tCeUZuKGgsVCksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCxfKT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxULF8saCkpLE9iamVjdC5pcyhhLml0ZW0sVCl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEs'@;
put 'VCkpOihhPXRoaXMuX21pc21hdGNoKGEsVCxfLGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rpb249bCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9u'@;
put 'c0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKGw9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251'@;
put 'bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWls'@;
put 'PW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5f'@;
put 'aWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRhaWw6KGY9bC5fcHJldix0aGlzLl9yZW1vdmUobCkpLG51bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5r'@;
put 'ZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9yZWluc2VydEFmdGVyKGwsZixoKSk6bnVsbCE9PShsPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRz'@;
put 'P251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGwsZixoKSk6bD10aGlzLl9hZGRBZnRlcihuZXcgb3VlKGEsZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlv'@;
put 'bihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoZixsLl9wcmV2LGgpOmwuY3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50'@;
put 'SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGwsaCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpLGw9YX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJl'@;
put 'Y29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMu'@;
put 'X2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5n'@;
put 'ZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEsZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3ByZXZSZW1vdmVkLGY9bC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVh'@;
put 'ZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X21vdmVBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9p'@;
put 'bnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMu'@;
put 'X2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1sLGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgsbC5fcHJldj1hLG51bGw9PT1oP3RoaXMuX2l0VGFpbD1sOmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9p'@;
put 'dEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBBVyksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQobCksbC5jdXJyZW50SW5kZXg9ZCxsfV9yZW1vdmUobCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5f'@;
put 'dW5saW5rKGwpKX1fdW5saW5rKGwpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBhPWwuX3ByZXYsZD1sLl9uZXh0O3JldHVybiBudWxsPT09YT90aGlzLl9pdEhlYWQ9ZDphLl9uZXh0PWQsbnVsbD09PWQ/dGhpcy5faXRU'@;
put 'YWlsPWE6ZC5fcHJldj1hLGx9X2FkZFRvTW92ZXMobCxhKXtyZXR1cm4gbC5wcmV2aW91c0luZGV4PT09YXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD1sOnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPWwpLGx9X2FkZFRvUmVtb3Zh'@;
put 'bHMobCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IEFXKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNU'@;
put 'YWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVu'@;
put 'dGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9'@;
put 'bCxsfX1jbGFzcyBvdWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0'@;
put 'aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3Mgc3Vl'@;
put 'e2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxsLl9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10'@;
put 'aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0'@;
put 'dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1hOmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgQVd7Y29uc3RydWN0'@;
put 'b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXB1dChsKXtjb25zdCBhPWwudHJhY2tCeUlkO2xldCBkPXRoaXMubWFwLmdldChhKTtkfHwoZD1uZXcgc3VlLHRoaXMubWFwLnNldChhLGQpKSxkLmFkZChsKX1nZXQobCxhKXtjb25zdCBoPXRoaXMubWFwLmdldChsKTtyZXR1cm4gaD9oLmdldChsLGEp'@;
put 'Om51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChhKS5yZW1vdmUobCkmJnRoaXMubWFwLmRlbGV0ZShhKSxsfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24g'@;
put 'VFcoYyxsLGEpe2NvbnN0IGQ9Yy5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1kKXJldHVybiBkO2xldCBoPTA7cmV0dXJuIGEmJmQ8YS5sZW5ndGgmJihoPWFbZF0pLGQrbCtofWNsYXNzIERXe2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxBNihs'@;
put 'KX1jcmVhdGUoKXtyZXR1cm4gbmV3IGF1ZX19Y2xhc3MgYXVle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGws'@;
put 'dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNI'@;
put 'ZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3By'@;
put 'ZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlz'@;
put 'Ll9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8'@;
put 'fEE2KGwpKSl0aHJvdyBuZXcgQXIoOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2Zv'@;
put 'ckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBl'@;
put 'bmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShk'@;
put 'LmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1u'@;
put 'dWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtjb25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQm'@;
put 'JihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9'@;
put 'YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsXz1oLl9uZXh0'@;
put 'O3JldHVybiBmJiYoZi5fbmV4dD1fKSxfJiYoXy5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgbHVlKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChsLGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQo'@;
put 'KXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7'@;
put 'bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1u'@;
put 'dWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxsLmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJy'@;
put 'ZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRk'@;
put 'aXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wg'@;
put 'aW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgbHVle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlv'@;
put 'dXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVuY3Rpb24gSVcoKXtyZXR1cm4gbmV3IHo2KFtuZXcga1ddKX1sZXQgejY9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rv'@;
put 'cnk6ZD0+Yy5jcmVhdGUoYSxkfHxJVygpKSxkZXBzOltbYyxuZXcgZzAsbmV3IHoyXV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKG51bGwhPWQpcmV0dXJuIGQ7dGhyb3cgbmV3IEFyKDkwMSwhMSl9fXJldHVybiBjLlx1MDI3NXBy'@;
put 'b3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpJV30pLGN9KSgpO2Z1bmN0aW9uIExXKCl7cmV0dXJuIG5ldyBNXyhbbmV3IERXXSl9bGV0IE1fPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5mYWN0b3JpZXM9YX1zdGF0aWMgY3JlYXRlKGEsZCl7aWYo'@;
put 'ZCl7Y29uc3QgaD1kLmZhY3Rvcmllcy5zbGljZSgpO2E9YS5jb25jYXQoaCl9cmV0dXJuIG5ldyBjKGEpfXN0YXRpYyBleHRlbmQoYSl7cmV0dXJue3Byb3ZpZGU6Yyx1c2VGYWN0b3J5OmQ9PmMuY3JlYXRlKGEsZHx8TFcoKSksZGVwczpbW2MsbmV3IGcwLG5ldyB6Ml1dfX1maW5kKGEpe2Nv'@;
put 'bnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBBcig5MDEsITEpfX1yZXR1cm4gYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6TFd9KSxjfSkoKTtjb25zdCBkdWU9Z1cobnVs'@;
put 'bCwiY29yZSIsW10pO2xldCBodWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKHg1KSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCk7ZnVuY3Rp'@;
put 'b24gVTYoYyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYz9jOm51bGwhPWMmJiJmYWxzZSIhPT1jfWxldCBzTz1udWxsO2Z1bmN0aW9uIGFwKCl7cmV0dXJuIHNPfWNsYXNzIE11ZXt9Y29uc3QgTHM9bmV3IFNpKCJEb2N1bWVudFRva2VuIik7bGV0IGFPPSgoKT0+e2NsYXNzIGN7aGlzdG9y'@;
put 'eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShFdWUpfSxwcm92aWRlZEluOiJw'@;
put 'bGF0Zm9ybSJ9KSxjfSkoKTtjb25zdCB4dWU9bmV3IFNpKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO2xldCBFdWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFPe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9RmkoTHMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlz'@;
put 'Ll9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJhc2VIcmVmRnJvbURPTSgpe3JldHVybiBhcCgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVu'@;
put 'dExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJo'@;
put 'YXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1'@;
put 'cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxo'@;
put 'KX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxjfSkoKTtmdW5jdGlvbiBsTyhjLGwpe2lmKDA9PWMubGVuZ3RoKXJldHVybiBsO2lmKDA9PWwubGVuZ3Ro'@;
put 'KXJldHVybiBjO2xldCBhPTA7cmV0dXJuIGMuZW5kc1dpdGgoIi8iKSYmYSsrLGwuc3RhcnRzV2l0aCgiLyIpJiZhKyssMj09YT9jK2wuc3Vic3RyaW5nKDEpOjE9PWE/YytsOmMrIi8iK2x9ZnVuY3Rpb24gVlcoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMu'@;
put 'bGVuZ3RoO3JldHVybiBjLnNsaWNlKDAsYS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gQ2YoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgazU9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50'@;
put 'ZWQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIEZpKGpXKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBCVz1uZXcgU2koImFwcEJhc2VI'@;
put 'cmVmIik7bGV0IGpXPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhy'@;
put 'ZWZGcm9tRE9NKCk/P0ZpKExzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVz'@;
put 'aCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gbE8odGhpcy5fYmFzZUhyZWYsYSl9'@;
put 'cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrQ2YodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qg'@;
put 'Xz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsXyl9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IF89dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtDZihmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBs'@;
put 'YWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3Ro'@;
put 'aXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihCVyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi'@;
put 'fSksY30pKCksa3VlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09u'@;
put 'RGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5f'@;
put 'cGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7bGV0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1kJiYoZD0iIyIpLGQubGVuZ3RoPjA/ZC5zdWJzdHJpbmcoMSk6'@;
put 'ZH1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7Y29uc3QgZD1sTyh0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZC5sZW5ndGg+MD8iIyIrZDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZv'@;
put 'cm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLF8pfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRo'@;
put 'bmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2Nh'@;
put 'dGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihCVyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0'@;
put 'b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9zdWJqZWN0PW5ldyBFcix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1hO2Nv'@;
put 'bnN0IGQ9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VQYXRoPWZ1bmN0aW9uIER1ZShjKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChjKSl7Y29uc3RbLGFdPWMuc3BsaXQoL1wvXC9bXlwvXSsvKTtyZXR1cm4gYX1yZXR1cm4gY30o'@;
put 'VlcoelcoZCkpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUoaD0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOmguc3RhdGUsdHlwZTpoLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9u'@;
put 'Py51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGE9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoYSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1'@;
put 'cnJlbnRQYXRoRXF1YWxUbyhhLGQ9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoYStDZihkKSl9bm9ybWFsaXplKGEpe3JldHVybiBjLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiBUdWUoYyxsKXtpZighY3x8IWwuc3RhcnRzV2l0aChjKSlyZXR1cm4gbDtjb25z'@;
put 'dCBhPWwuc3Vic3RyaW5nKGMubGVuZ3RoKTtyZXR1cm4iIj09PWF8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGFbMF0pP2E6bH0odGhpcy5fYmFzZVBhdGgselcoYSkpKX1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIGEmJiIvIiE9PWFbMF0mJihhPSIvIithKSx0aGlzLl9sb2Nh'@;
put 'dGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChhKX1nbyhhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnB1c2hTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfXJl'@;
put 'cGxhY2VTdGF0ZShhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfWZvcndhcmQoKXt0aGlzLl9sb2NhdGlvblN0'@;
put 'cmF0ZWd5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5oaXN0b3J5R28/LihhKX1vblVybENoYW5nZShhKXtyZXR1cm4gdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnB1c2goYSksdGhp'@;
put 'cy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9ufHwodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZC51cmwsZC5zdGF0ZSl9KSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRl'@;
put 'eE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3Rp'@;
put 'ZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9fXJldHVybiBjLm5vcm1h'@;
put 'bGl6ZVF1ZXJ5UGFyYW1zPUNmLGMuam9pbldpdGhTbGFzaD1sTyxjLnN0cmlwVHJhaWxpbmdTbGFzaD1WVyxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGs1KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uIEF1ZSgpe3JldHVybiBuZXcgSmQoYXIoazUpKX0oKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiB6VyhjKXtyZXR1cm4gYy5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIEFjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRm9ybWF0PTBdPSJGb3JtYXQi'@;
put 'LGNbYy5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixjfShBY3x8e30pLG5hPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmFycm93PTBdPSJOYXJyb3ciLGNbYy5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGNbYy5XaWRlPTJdPSJXaWRlIixjW2MuU2hvcnQ9M109IlNob3J0IixjfShu'@;
put 'YXx8e30pLHkwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oeTB8fHt9KTtmdW5jdGlvbiBjTyhjLGwsYSl7Y29uc3QgZD1qbChjKSxmPXRkKFtkW3Fv'@;
put 'LkRheXNGb3JtYXRdLGRbcW8uRGF5c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gdGQoZixhKX1mdW5jdGlvbiB1TyhjLGwsYSl7Y29uc3QgZD1qbChjKSxmPXRkKFtkW3FvLk1vbnRoc0Zvcm1hdF0sZFtxby5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIHRkKGYsYSl9ZnVuY3Rpb24gdGQo'@;
put 'YyxsKXtmb3IobGV0IGE9bDthPi0xO2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIFhXKGMsbCl7bD1lbmNvZGVVUklDb21wb25lbnQobCk7Zm9yKGNvbnN0'@;
put 'IGEgb2YgYy5zcGxpdCgiOyIpKXtjb25zdCBkPWEuaW5kZXhPZigiPSIpLFtoLGZdPS0xPT1kP1thLCIiXTpbYS5zbGljZSgwLGQpLGEuc2xpY2UoZCsxKV07aWYoaC50cmltKCk9PT1sKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZil9cmV0dXJuIG51bGx9Y29uc3QgeU89L1xzKy8sSlc9'@;
put 'W107bGV0IGRjPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5faXRlcmFibGVEaWZmZXJzPWEsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWQsdGhpcy5fbmdFbD1oLHRoaXMuX3JlbmRlcmVyPWYsdGhpcy5pbml0aWFsQ2xhc3Nlcz1KVyx0aGlzLnN0YXRlTWFwPW5ldyBN'@;
put 'YXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRyaW0oKS5zcGxpdCh5Tyk6Sld9c2V0IG5nQ2xhc3MoYSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGE/YS50cmltKCkuc3BsaXQoeU8pOmF9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IGQgb2YgdGhp'@;
put 'cy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtjb25zdCBhPXRoaXMucmF3Q2xhc3M7aWYoQXJyYXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIFNldClmb3IoY29uc3QgZCBvZiBhKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2Vsc2UgaWYobnVsbCE9YSlmb3IoY29u'@;
put 'c3QgZCBvZiBPYmplY3Qua2V5cyhhKSl0aGlzLl91cGRhdGVTdGF0ZShkLCEhYVtkXSk7dGhpcy5fYXBwbHlTdGF0ZURpZmYoKX1fdXBkYXRlU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuc3RhdGVNYXAuZ2V0KGEpO3ZvaWQgMCE9PWg/KGguZW5hYmxlZCE9PWQmJihoLmNoYW5nZWQ9ITAsaC5l'@;
put 'bmFibGVkPWQpLGgudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoYSx7ZW5hYmxlZDpkLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCBhIG9mIHRoaXMuc3RhdGVNYXApe2NvbnN0IGQ9YVswXSxoPWFbMV07aC5jaGFuZ2VkPyh0aGlzLl90'@;
put 'b2dnbGVDbGFzcyhkLGguZW5hYmxlZCksaC5jaGFuZ2VkPSExKTpoLnRvdWNoZWR8fChoLmVuYWJsZWQmJnRoaXMuX3RvZ2dsZUNsYXNzKGQsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKGQpKSxoLnRvdWNoZWQ9ITF9fV90b2dnbGVDbGFzcyhhLGQpeyhhPWEudHJpbSgpKS5sZW5ndGg+MCYm'@;
put 'YS5zcGxpdCh5TykuZm9yRWFjaChoPT57ZD90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpKHR0KHo2KSx0dChNXyksdHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZToh'@;
put 'MH0pLGN9KSgpO2NsYXNzIGcwZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10'@;
put 'aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgeHM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnko'@;
put 'YSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdG'@;
put 'b3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZl'@;
put 'ciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdl'@;
put 'cyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsXyk9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGcwZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09'@;
put 'PV8/dm9pZCAwOl8pO2Vsc2UgaWYobnVsbD09XylkLnJlbW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgVD1kLmdldChmKTtkLm1vdmUoVCxfKSxlRyhULGgpfX0pO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKyl7Y29uc3QgVD1kLmdldChoKS5j'@;
put 'b250ZXh0O1QuaW5kZXg9aCxULmNvdW50PWYsVC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9YS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoaD0+e2VHKGQuZ2V0KGguY3VycmVudEluZGV4KSxoKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dCh6YSksdHQoejYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJu'@;
put 'Z0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksY30pKCk7ZnVuY3Rpb24gZUcoYyxsKXtjLmNvbnRleHQuJGltcGxpY2l0PWwuaXRlbX1sZXQgWmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3ZpZXdDb250YWlu'@;
put 'ZXI9YSx0aGlzLl9jb250ZXh0PW5ldyBtMGUsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1kfXNldCBuZ0lmKGEpe3Ro'@;
put 'aXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj1hLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4oYSl7dEcoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQg'@;
put 'bmdJZkVsc2UoYSl7dEcoIm5nSWZFbHNlIixhKSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9YSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0Nv'@;
put 'bnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5f'@;
put 'ZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVS'@;
put 'ZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoemEpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'IiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpO2NsYXNzIG0wZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9fWZ1bmN0aW9u'@;
put 'IHRHKGMsbCl7aWYobCYmIWwuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtjfSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtxYShsKX0nLmApfWNsYXNzIHdPe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1sLHRoaXMu'@;
put 'X3RlbXBsYXRlUmVmPWEsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVy'@;
put 'UmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKGwpe2wmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IWwmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX1sZXQgbmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWaWV3cz1bXSx0aGlzLl9kZWZhdWx0'@;
put 'VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChhKXt0aGlzLl9uZ1N3aXRjaD1hLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2Fk'@;
put 'ZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoYSl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2goYSl9X21hdGNoQ2FzZShhKXtjb25zdCBkPWE9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNo'@;
put 'ZWR8fGQsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0'@;
put 'Q2FzZXNNYXRjaGVkPSExKSxkfV91cGRhdGVEZWZhdWx0Q2FzZXMoYSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZhIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWQuZW5mb3JjZVN0YXRl'@;
put 'KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHRoPSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgd08oYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KHphKSx0dChuZCw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNl'@;
put 'In0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5f'@;
put 'bmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2Vz'@;
put 'KGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSxfPS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOlkyLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsXyk6dGhp'@;
put 'cy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsXyl9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNoQWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5'@;
put 'LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KE1fKSx0dChGbykpfSxjLlx1MDI3NWRpcj1D'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxjfSkoKSxyZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9YSx0aGlzLl92aWV3UmVmPW51bGws'@;
put 'dGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoYSl7aWYoYS5uZ1RlbXBsYXRlT3V0bGV0fHxhLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7Y29u'@;
put 'c3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXtjb25zdHtuZ1RlbXBsYXRlT3V0bGV0OmgsbmdUZW1wbGF0ZU91dGxldENvbnRleHQ6ZixuZ1RlbXBsYXRl'@;
put 'T3V0bGV0SW5qZWN0b3I6X309dGhpczt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KGgsZixfP3tpbmplY3RvcjpffTp2b2lkIDApfWVsc2UgdGhpcy5fdmlld1JlZj1udWxsfWVsc2UgdGhpcy5fdmlld1JlZiYmYS5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmdGhpcy5uZ1Rl'@;
put 'bXBsYXRlT3V0bGV0Q29udGV4dCYmKHRoaXMuX3ZpZXdSZWYuY29udGV4dD10aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0'@;
put 'SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBiMGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIEtoKCgpPT5sLnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQ9Pnt0aHJvdyBkfX0pKX1kaXNwb3NlKGwpe0toKCgpPT5sLnVuc3Vic2Ny'@;
put 'aWJlKCkpfX1jbGFzcyB5MGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIGwudGhlbihhLGQ9Pnt0aHJvdyBkfSl9ZGlzcG9zZShsKXt9fWNvbnN0IHcwZT1uZXcgeTBlLEMwZT1uZXcgYjBlO2xldCB1eD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xhdGVzdFZh'@;
put 'bHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtyZXR1cm4g'@;
put 'dGhpcy5fb2JqP2EhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybShhKSk6dGhpcy5fbGF0ZXN0VmFsdWU6KGEmJnRoaXMuX3N1YnNjcmliZShhKSx0aGlzLl9sYXRlc3RWYWx1ZSl9X3N1YnNjcmliZShhKXt0aGlzLl9vYmo9YSx0aGlzLl9zdHJhdGVneT10aGlz'@;
put 'Ll9zZWxlY3RTdHJhdGVneShhKSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKGEsZD0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKSl9X3NlbGVjdFN0cmF0ZWd5KGEpe2lmKHY1KGEpKXJldHVybiB3MGU7aWYocE0oYSkpcmV0dXJuIEMw'@;
put 'ZTt0aHJvdyBmdW5jdGlvbiBlMihjLGwpe3JldHVybiBuZXcgQXIoMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVs'@;
put 'bH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSwxNikpfSxjLlx1MDI3NXBpcGU9TmEo'@;
put 'e25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCksaUc9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1cGlwZT1OYSh7bmFtZToianNvbiIsdHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLGN9KSgpLGR4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49b0d9dHJhbnNmb3JtKGEsZD1vRyl7'@;
put 'aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKTtjb25zdCBoPXRoaXMuZGlmZmVyLmRpZmYoYSksZj1kIT09dGhpcy5jb21wYXJlRm47'@;
put 'cmV0dXJuIGgmJih0aGlzLmtleVZhbHVlcz1bXSxoLmZvckVhY2hJdGVtKF89Pnt0aGlzLmtleVZhbHVlcy5wdXNoKGZ1bmN0aW9uIE8wZShjLGwpe3JldHVybntrZXk6Yyx2YWx1ZTpsfX0oXy5rZXksXy5jdXJyZW50VmFsdWUpKX0pKSwoaHx8ZikmJih0aGlzLmtleVZhbHVlcy5zb3J0KGQp'@;
put 'LHRoaXMuY29tcGFyZUZuPWQpLHRoaXMua2V5VmFsdWVzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChNXywxNikpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImtleXZhbHVlIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCk7'@;
put 'ZnVuY3Rpb24gb0coYyxsKXtjb25zdCBhPWMua2V5LGQ9bC5rZXk7aWYoYT09PWQpcmV0dXJuIDA7aWYodm9pZCAwPT09YSlyZXR1cm4gMTtpZih2b2lkIDA9PT1kKXJldHVybi0xO2lmKG51bGw9PT1hKXJldHVybiAxO2lmKG51bGw9PT1kKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'YSYmInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgZClyZXR1cm4gYS1kO2lmKCJib29sZWFuIj09dHlwZW9mIGEmJiJib29sZWFuIj09dHlwZW9mIGQpcmV0dXJuIGE8ZD8tMToxO2NvbnN0IGg9U3RyaW5n'@;
put 'KGEpLGY9U3RyaW5nKGQpO3JldHVybiBoPT1mPzA6aDxmPy0xOjF9bGV0IG9vPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0'@;
put 'IHNHPSJicm93c2VyIjtmdW5jdGlvbiBScyhjKXtyZXR1cm4gYz09PXNHfWZ1bmN0aW9uIGFHKGMpe3JldHVybiJzZXJ2ZXIiPT09Y31sZXQgajBlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3'@;
put 'IHowZShhcihMcyksd2luZG93KX0pLGN9KSgpO2NsYXNzIHowZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZG9jdW1lbnQ9bCx0aGlzLndpbmRvdz1hLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheShsKT8oKT0+bDpsfWdldFNjcm9s'@;
put 'bFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlPZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxU'@;
put 'byhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGE9ZnVuY3Rpb24gVTBlKGMsbCl7Y29uc3QgYT1jLmdldEVsZW1lbnRCeUlkKGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYo'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5LmF0dGFjaFNoYWRvdyl7Y29uc3QgZD1jLmNyZWF0ZVRyZWVXYWxrZXIoYy5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2Rl'@;
put 'O2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IF89Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVyeVNlbGVjdG9yKGBbbmFtZT0iJHtsfSJdYCk7aWYoXylyZXR1cm4gX31oPWQubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRo'@;
put 'aXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe2NvbnN0IGE9dGhpcy53aW5kb3cuaGlzdG9yeTthJiZhLnNjcm9sbFJlc3RvcmF0aW9uJiYoYS5zY3JvbGxSZXN0'@;
put 'b3JhdGlvbj1sKX19c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxU'@;
put 'byhkLWZbMF0saC1mWzFdKX1zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKXt0cnl7aWYoIXRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKSlyZXR1cm4hMTtjb25zdCBsPWxHKHRoaXMud2luZG93Lmhpc3RvcnkpfHxsRyhPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy53aW5kb3cuaGlzdG9yeSkp'@;
put 'O3JldHVybiEoIWx8fCFsLndyaXRhYmxlJiYhbC5zZXQpfWNhdGNoe3JldHVybiExfX1zdXBwb3J0c1Njcm9sbGluZygpe3RyeXtyZXR1cm4hIXRoaXMud2luZG93JiYhIXRoaXMud2luZG93LnNjcm9sbFRvJiYicGFnZVhPZmZzZXQiaW4gdGhpcy53aW5kb3d9Y2F0Y2h7cmV0dXJuITF9fX1m'@;
put 'dW5jdGlvbiBsRyhjKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLCJzY3JvbGxSZXN0b3JhdGlvbiIpfWNsYXNzIGNHe31jbGFzcyBoMWUgZXh0ZW5kcyBNdWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9'@;
put 'ITB9fWNsYXNzIEVPIGV4dGVuZHMgaDFle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBTdWUoYyl7c098fChzTz1jKX0obmV3IEVPKX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9'@;
put 'fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwp'@;
put 'fWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5F'@;
put 'TEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VI'@;
put 'cmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gZjFlKCl7cmV0dXJuIFRfPVRffHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksVF8/VF8uZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIHAxZShjKXtweD1weHx8ZG9jdW1lbnQuY3Jl'@;
put 'YXRlRWxlbWVudCgiYSIpLHB4LnNldEF0dHJpYnV0ZSgiaHJlZiIsYyk7Y29uc3QgbD1weC5wYXRobmFtZTtyZXR1cm4iLyI9PT1sLmNoYXJBdCgwKT9sOmAvJHtsfWB9KGEpfXJlc2V0QmFzZUVsZW1lbnQoKXtUXz1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9y'@;
put 'LnVzZXJBZ2VudH1nZXRDb29raWUobCl7cmV0dXJuIFhXKGRvY3VtZW50LmNvb2tpZSxsKX19bGV0IHB4LFRfPW51bGwsbTFlPSgoKT0+e2NsYXNzIGN7YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBrTz1uZXcgU2koIkV2ZW50TWFuYWdlclBsdWdpbnMiKTtsZXQgcEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCx0aGlzLl9ldmVudE5hbWVU'@;
put 'b1BsdWdpbj1uZXcgTWFwLGEuZm9yRWFjaChoPT57aC5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWEuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZCkuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl9Z2V0Wm9u'@;
put 'ZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGEpe2xldCBkPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihkKXJldHVybiBkO2lmKGQ9dGhpcy5fcGx1Z2lucy5maW5kKGY9PmYuc3VwcG9ydHMoYSkpLCFkKXRocm93IG5ldyBBcig1MTAxLCExKTtyZXR1cm4g'@;
put 'dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGEsZCksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa08pLGFyKE5vKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgZ0d7Y29u'@;
put 'c3RydWN0b3IobCl7dGhpcy5fZG9jPWx9fWNvbnN0IEFPPSJuZy1hcHAtaWQiO2xldCBtRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGY9e30pe3RoaXMuZG9jPWEsdGhpcy5hcHBJZD1kLHRoaXMubm9uY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLnN0eWxlUmVmPW5ldyBN'@;
put 'YXAsdGhpcy5ob3N0Tm9kZXM9bmV3IFNldCx0aGlzLnN0eWxlTm9kZXNJbkRPTT10aGlzLmNvbGxlY3RTZXJ2ZXJSZW5kZXJlZFN0eWxlcygpLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1hRyhmKSx0aGlzLnJlc2V0SG9zdE5vZGVzKCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09'@;
put 'PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJlbW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMu'@;
put 'c3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRk'@;
put 'KGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9y'@;
put 'KGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1vdmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRl'@;
put 'cmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske0FPfT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFjaChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50'@;
put 'ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdlfXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltd'@;
put 'fSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShBTyksZjt7Y29uc3QgXz10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJz'@;
put 'dHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZfLnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLF8udGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJl8uc2V0QXR0cmlidXRlKEFPLHRoaXMuYXBwSWQpLF99fWFkZFN0eWxlVG9Ib3N0KGEsZCl7Y29uc3QgaD10aGlz'@;
put 'LmdldFN0eWxlRWxlbWVudChhLGQpO2EuYXBwZW5kQ2hpbGQoaCk7Y29uc3QgZj10aGlzLnN0eWxlUmVmLF89Zi5nZXQoZCk/LmVsZW1lbnRzO18/Xy5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVz'@;
put 'O2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTHMpLGFyKGE2KSxhcihsNiw4KSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp'@;
put 'O2NvbnN0IFRPPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxu'@;
put 'czoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LERPPS8lQ09NUCUvZyx5MWU9bmV3IFNpKCJSZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5j'@;
put 'dGlvbiBfRyhjLGwpe3JldHVybiBsLm1hcChhPT5hLnJlcGxhY2UoRE8sYykpfWxldCBJTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWU9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZCx0aGlzLmFwcElkPWgsdGhpcy5y'@;
put 'ZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWYsdGhpcy5kb2M9Xyx0aGlzLnBsYXRmb3JtSWQ9VCx0aGlzLm5nWm9uZT1XLHRoaXMubm9uY2U9aWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFHKFQpLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5l'@;
put 'dyBMTyhhLF8sVyx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIpfWNyZWF0ZVJlbmRlcmVyKGEsZCl7aWYoIWF8fCFkKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjt0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJmQuZW5jYXBzdWxhdGlvbj09PVBjLlNoYWRvd0RvbSYmKGQ9ey4uLmQsZW5jYXBzdWxh'@;
put 'dGlvbjpQYy5FbXVsYXRlZH0pO2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCk7cmV0dXJuIGggaW5zdGFuY2VvZiB5Rz9oLmFwcGx5VG9Ib3N0KGEpOmggaW5zdGFuY2VvZiBSTyYmaC5hcHBseVN0eWxlcygpLGh9Z2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpe2NvbnN0IGg9'@;
put 'dGhpcy5yZW5kZXJlckJ5Q29tcElkO2xldCBmPWguZ2V0KGQuaWQpO2lmKCFmKXtjb25zdCBfPXRoaXMuZG9jLFQ9dGhpcy5uZ1pvbmUsVz10aGlzLmV2ZW50TWFuYWdlcixpZT10aGlzLnNoYXJlZFN0eWxlc0hvc3QscGU9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LHdlPXRoaXMu'@;
put 'cGxhdGZvcm1Jc1NlcnZlcjtzd2l0Y2goZC5lbmNhcHN1bGF0aW9uKXtjYXNlIFBjLkVtdWxhdGVkOmY9bmV3IHlHKFcsaWUsZCx0aGlzLmFwcElkLHBlLF8sVCx3ZSk7YnJlYWs7Y2FzZSBQYy5TaGFkb3dEb206cmV0dXJuIG5ldyBNMWUoVyxpZSxhLGQsXyxULHRoaXMubm9uY2Usd2UpO2Rl'@;
put 'ZmF1bHQ6Zj1uZXcgUk8oVyxpZSxkLHBlLF8sVCx3ZSl9aC5zZXQoZC5pZCxmKX1yZXR1cm4gZn1uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihwRyksYXIobUcpLGFy'@;
put 'KGE2KSxhcih5MWUpLGFyKExzKSxhcihHcyksYXIoTm8pLGFyKGw2KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgTE97Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmda'@;
put 'b25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhUT1thXXx8YSxsKTp0aGlzLmRv'@;
put 'Yy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoYkcobCk/bC5jb250ZW50OmwpLmFwcGVuZENoaWxk'@;
put 'KGEpfWluc2VydEJlZm9yZShsLGEsZCl7bCYmKGJHKGwpP2wuY29udGVudDpsKS5pbnNlcnRCZWZvcmUoYSxkKX1yZW1vdmVDaGlsZChsLGEpe2wmJmwucmVtb3ZlQ2hpbGQoYSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtsZXQgZD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5kb2MucXVlcnlT'@;
put 'ZWxlY3RvcihsKTpsO2lmKCFkKXRocm93IG5ldyBBcigtNTEwNCwhMSk7cmV0dXJuIGF8fChkLnRleHRDb250ZW50PSIiKSxkfXBhcmVudE5vZGUobCl7cmV0dXJuIGwucGFyZW50Tm9kZX1uZXh0U2libGluZyhsKXtyZXR1cm4gbC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUobCxhLGQsaCl7'@;
put 'aWYoaCl7YT1oKyI6IithO2NvbnN0IGY9VE9baF07Zj9sLnNldEF0dHJpYnV0ZU5TKGYsYSxkKTpsLnNldEF0dHJpYnV0ZShhLGQpfWVsc2UgbC5zZXRBdHRyaWJ1dGUoYSxkKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe2lmKGQpe2NvbnN0IGg9VE9bZF07aD9sLnJlbW92ZUF0dHJpYnV0ZU5T'@;
put 'KGgsYSk6bC5yZW1vdmVBdHRyaWJ1dGUoYCR7ZH06JHthfWApfWVsc2UgbC5yZW1vdmVBdHRyaWJ1dGUoYSl9YWRkQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5hZGQoYSl9cmVtb3ZlQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5yZW1vdmUoYSl9c2V0U3R5bGUobCxhLGQsaCl7aCYoWTIuRGFzaENh'@;
put 'c2V8WTIuSW1wb3J0YW50KT9sLnN0eWxlLnNldFByb3BlcnR5KGEsZCxoJlkyLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6bC5zdHlsZVthXT1kfXJlbW92ZVN0eWxlKGwsYSxkKXtkJlkyLkRhc2hDYXNlP2wuc3R5bGUucmVtb3ZlUHJvcGVydHkoYSk6bC5zdHlsZVthXT0iIn1zZXRQcm9w'@;
put 'ZXJ0eShsLGEsZCl7bFthXT1kfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmIShsPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsbCkpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFy'@;
put 'Z2V0ICR7bH0gZm9yIGV2ZW50ICR7YX1gKTtyZXR1cm4gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLGEsdGhpcy5kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGQpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGwpe3JldHVybiBhPT57aWYoIl9fbmdVbndyYXBfXyI9PT1hKXJl'@;
put 'dHVybiBsOyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT5sKGEpKTpsKGEpKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gYkcoYyl7cmV0dXJuIlRFTVBMQVRFIj09PWMudGFnTmFtZSYmdm9pZCAwIT09Yy5jb250ZW50fWNsYXNz'@;
put 'IE0xZSBleHRlbmRzIExPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7c3VwZXIobCxmLF8sVyksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5ob3N0RWw9ZCx0aGlzLnNoYWRvd1Jvb3Q9ZC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0'@;
put 'LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtjb25zdCBpZT1fRyhoLmlkLGguc3R5bGVzKTtmb3IoY29uc3QgcGUgb2YgaWUpe2NvbnN0IHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7VCYmd2Uuc2V0QXR0cmlidXRlKCJub25jZSIsVCksd2UudGV4dENvbnRlbnQ9cGUsdGhp'@;
put 'cy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHdlKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDpsfWFwcGVuZENoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNl'@;
put 'cnRCZWZvcmUobCxhLGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRo'@;
put 'aXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX1jbGFzcyBSTyBleHRlbmRzIExPe2NvbnN0cnVjdG9yKGwsYSxkLGgs'@;
put 'ZixfLFQsVyl7c3VwZXIobCxmLF8sVCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWgsdGhpcy5zdHlsZXM9Vz9fRyhXLGQuc3R5bGVzKTpkLnN0eWxlc31hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMo'@;
put 'dGhpcy5zdHlsZXMpfWRlc3Ryb3koKXt0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kmJnRoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMpfX1jbGFzcyB5RyBleHRlbmRzIFJPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9aCsi'@;
put 'LSIrZC5pZDtzdXBlcihsLGEsZCxmLF8sVCxXLGllKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIHcxZShjKXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UoRE8sYyl9KGllKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIEMxZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJl'@;
put 'cGxhY2UoRE8sYyl9KGllKX1hcHBseVRvSG9zdChsKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUobCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1zdXBlci5jcmVhdGVFbGVtZW50KGwsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0'@;
put 'ZShkLHRoaXMuY29udGVudEF0dHIsIiIpLGR9fWxldCB4MWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGdHe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwo'@;
put 'KT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSl9LGMuXHUwMjc1cHJv'@;
put 'dj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qgd0c9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sRTFlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNj'@;
put 'OiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxrMWU9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtl'@;
put 'eSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgQTFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBnR3tjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4gbnVsbCE9Yy5wYXJzZUV2ZW50TmFtZShhKX1hZGRFdmVudExpc3RlbmVyKGEsZCxo'@;
put 'KXtjb25zdCBmPWMucGFyc2VFdmVudE5hbWUoZCksXz1jLmV2ZW50Q2FsbGJhY2soZi5mdWxsS2V5LGgsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmFwKCkub25BbmRDYW5jZWwoYSxmLmRvbUV2ZW50'@;
put 'TmFtZSxfKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGEpe2NvbnN0IGQ9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksaD1kLnNoaWZ0KCk7aWYoMD09PWQubGVuZ3RofHwia2V5ZG93biIhPT1oJiYia2V5dXAiIT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWMuX25vcm1hbGl6ZUtleShkLnBv'@;
put 'cCgpKTtsZXQgXz0iIixUPWQuaW5kZXhPZigiY29kZSIpO2lmKFQ+LTEmJihkLnNwbGljZShULDEpLF89ImNvZGUuIiksd0cuZm9yRWFjaChpZT0+e2NvbnN0IHBlPWQuaW5kZXhPZihpZSk7cGU+LTEmJihkLnNwbGljZShwZSwxKSxfKz1pZSsiLiIpfSksXys9ZiwwIT1kLmxlbmd0aHx8MD09'@;
put 'PWYubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IFc9e307cmV0dXJuIFcuZG9tRXZlbnROYW1lPWgsVy5mdWxsS2V5PV8sV31zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGEsZCl7bGV0IGg9RTFlW2Eua2V5XXx8YS5rZXksZj0iIjtyZXR1cm4gZC5pbmRleE9mKCJjb2RlLiIpPi0xJiYo'@;
put 'aD1hLmNvZGUsZj0iY29kZS4iKSwhKG51bGw9PWh8fCFoKSYmKGg9aC50b0xvd2VyQ2FzZSgpLCIgIj09PWg/aD0ic3BhY2UiOiIuIj09PWgmJihoPSJkb3QiKSx3Ry5mb3JFYWNoKF89PntfIT09aCYmKDAsazFlW19dKShhKSYmKGYrPV8rIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVu'@;
put 'dENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkmJmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IFNHPVt7cHJvdmlkZTpHcyx1c2VWYWx1ZTpzR30se3Byb3ZpZGU6ZVMsdXNlVmFsdWU6ZnVuY3Rpb24gVDFlKCl7RU8ubWFrZUN1cnJlbnQo'@;
put 'KX0sbXVsdGk6ITB9LHtwcm92aWRlOkxzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSTFlKCl7cmV0dXJuIGZ1bmN0aW9uIEZDKGMpe0c5PWN9KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLEwxZT1nVyhkdWUsImJyb3dzZXIiLFNHKSxSMWU9bmV3IFNpKCIiKSxNRz1be3Byb3ZpZGU6S00s'@;
put 'dXNlQ2xhc3M6Y2xhc3MgZzFle2FkZFRvV2luZG93KGwpe09pLmdldEFuZ3VsYXJUZXN0YWJpbGl0eT0oZCxoPSEwKT0+e2NvbnN0IGY9bC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZCxoKTtpZihudWxsPT1mKXRocm93IG5ldyBBcig1MTAzLCExKTtyZXR1cm4gZn0sT2kuZ2V0QWxsQW5ndWxh'@;
put 'clRlc3RhYmlsaXRpZXM9KCk9PmwuZ2V0QWxsVGVzdGFiaWxpdGllcygpLE9pLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PmwuZ2V0QWxsUm9vdEVsZW1lbnRzKCksT2kuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChPaS5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksT2kuZnJhbWV3b3Jr'@;
put 'U3RhYmlsaXplcnMucHVzaChkPT57Y29uc3QgaD1PaS5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpO2xldCBmPWgubGVuZ3RoLF89ITE7Y29uc3QgVD1mdW5jdGlvbihXKXtfPV98fFcsZi0tLDA9PWYmJmQoXyl9O2guZm9yRWFjaChXPT57Vy53aGVuU3RhYmxlKFQpfSl9KX1maW5kVGVz'@;
put 'dGFiaWxpdHlJblRyZWUobCxhLGQpe3JldHVybiBudWxsPT1hP251bGw6bC5nZXRUZXN0YWJpbGl0eShhKT8/KGQ/YXAoKS5pc1NoYWRvd1Jvb3QoYSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5wYXJlbnRF'@;
put 'bGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOnVXLHVzZUNsYXNzOiRSLGRlcHM6W05vLHFSLEtNXX0se3Byb3ZpZGU6JFIsdXNlQ2xhc3M6JFIsZGVwczpbTm8scVIsS01dfV0seEc9W3twcm92aWRlOnQ1LHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6aGYsdXNlRmFjdG9y'@;
put 'eTpmdW5jdGlvbiBEMWUoKXtyZXR1cm4gbmV3IGhmfSxkZXBzOltdfSx7cHJvdmlkZTprTyx1c2VDbGFzczp4MWUsbXVsdGk6ITAsZGVwczpbTHMsTm8sR3NdfSx7cHJvdmlkZTprTyx1c2VDbGFzczpBMWUsbXVsdGk6ITAsZGVwczpbTHNdfSxJTyxtRyxwRyx7cHJvdmlkZTpZMyx1c2VFeGlz'@;
put 'dGluZzpJT30se3Byb3ZpZGU6Y0csdXNlQ2xhc3M6bTFlLGRlcHM6W119LFtdXTtsZXQgRUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6YTYsdXNlVmFsdWU6'@;
put 'YS5hcHBJZH1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoUjFlLDEyKSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOlsuLi54RywuLi5NR10saW1wb3J0czpbb28saHVlXX0pLGN9KSgpLGtH'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jPWF9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fZG9jLnRpdGxlfXNldFRpdGxlKGEpe3RoaXMuX2RvYy50aXRsZT1hfHwiIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTHMp'@;
put 'KX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hP25ldyBhOmZ1bmN0aW9uIFAxZSgpe3JldHVybiBuZXcga0coYXIoTHMpKX0oKSxkfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3R5cGVvZiB3aW5kb3c8InUiJiZ3'@;
put 'aW5kb3c7Rig3NDA5MiksRigzNDIwOSk7Y29uc3QgUE89e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEduPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3Rh'@;
put 'cnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxlOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19'@;
put 'LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixs'@;
put 'aWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFyeUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJy'@;
put 'ZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAs'@;
put 'c2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJj'@;
put 'aDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4i'@;
put 'LCJOT1QgSU4iLCJORSJdfX07dmFyIEtvPUYoMTY2NzYpLElHPUYubihLbyk7ZnVuY3Rpb24gTEcoYyxsLGEsZCxoLGYsXyl7dHJ5e3ZhciBUPWNbZl0oXyksVz1ULnZhbHVlfWNhdGNoKGllKXtyZXR1cm4gdm9pZCBhKGllKX1ULmRvbmU/bChXKTpQcm9taXNlLnJlc29sdmUoVykudGhlbihk'@;
put 'LGgpfWZ1bmN0aW9uIGZpKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMsYT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsaCl7dmFyIGY9Yy5hcHBseShsLGEpO2Z1bmN0aW9uIF8oVyl7TEcoZixkLGgsXyxULCJuZXh0IixXKX1mdW5jdGlvbiBUKFcpe0xH'@;
put 'KGYsZCxoLF8sVCwidGhyb3ciLFcpfV8odm9pZCAwKX0pfX1mdW5jdGlvbiBGTyhjKXtyZXR1cm4hIWMmJihjIGluc3RhbmNlb2YgS2V8fFkoYy5saWZ0KSYmWShjLnN1YnNjcmliZSkpfWNvbnN0e2lzQXJyYXk6QjFlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6ajFlLHByb3RvdHlwZTp6MWUs'@;
put 'a2V5czpVMWV9PU9iamVjdDtmdW5jdGlvbiBSRyhjKXtpZigxPT09Yy5sZW5ndGgpe2NvbnN0IGw9Y1swXTtpZihCMWUobCkpcmV0dXJue2FyZ3M6bCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uIFoxZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiZqMWUoYyk9PT16MWV9KGwpKXtj'@;
put 'b25zdCBhPVUxZShsKTtyZXR1cm57YXJnczphLm1hcChkPT5sW2RdKSxrZXlzOmF9fX1yZXR1cm57YXJnczpjLGtleXM6bnVsbH19Y29uc3R7aXNBcnJheTpZMWV9PUFycmF5O2Z1bmN0aW9uIEhPKGMpe3JldHVybiBNZShsPT5mdW5jdGlvbiBXMWUoYyxsKXtyZXR1cm4gWTFlKGwpP2MoLi4u'@;
put 'bCk6YyhsKX0oYyxsKSl9ZnVuY3Rpb24gT0coYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gWTYoLi4uYyl7Y29uc3QgbD1OMChjKSxhPU9jKGMpLHthcmdzOmQsa2V5czpofT1SRyhjKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIGVhKFtd'@;
put 'LGwpO2NvbnN0IGY9bmV3IEtlKGZ1bmN0aW9uIEcxZShjLGwsYT1PZSl7cmV0dXJuIGQ9PntQRyhsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IF89aCxUPWg7Zm9yKGxldCBXPTA7VzxoO1crKylQRyhsLCgpPT57Y29uc3QgaWU9ZWEoY1tXXSxsKTtsZXQgcGU9'@;
put 'ITE7aWUuc3Vic2NyaWJlKFVlKGQsd2U9PntmW1ddPXdlLHBlfHwocGU9ITAsVC0tKSxUfHxkLm5leHQoYShmLnNsaWNlKCkpKX0sKCk9PnstLV98fGQuY29tcGxldGUoKX0pKX0sZCl9LGQpfX0oZCxsLGg/Xz0+T0coaCxfKTpPZSkpO3JldHVybiBhP2YucGlwZShITyhhKSk6Zn1mdW5jdGlv'@;
put 'biBQRyhjLGwsYSl7Yz9HaShhLGMsbCk6bCgpfWNvbnN0IGd4PVgoYz0+ZnVuY3Rpb24oKXtjKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBteCguLi5jKXtyZXR1cm4gZnVuY3Rpb24gJDFlKCl7'@;
put 'cmV0dXJuIFBpKDEpfSgpKGVhKGMsTjAoYykpKX1mdW5jdGlvbiBGRyhjKXtyZXR1cm4gbmV3IEtlKGw9PntLcihjKCkpLnN1YnNjcmliZShsKX0pfWZ1bmN0aW9uIERfKGMsbCl7Y29uc3QgYT1ZKGMpP2M6KCk9PmMsZD1oPT5oLmVycm9yKGEoKSk7cmV0dXJuIG5ldyBLZShsP2g9Pmwuc2No'@;
put 'ZWR1bGUoZCwwLGgpOmQpfWZ1bmN0aW9uIE5PKCl7cmV0dXJuIFhlKChjLGwpPT57bGV0IGE9bnVsbDtjLl9yZWZDb3VudCsrO2NvbnN0IGQ9VWUobCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFjfHxjLl9yZWZDb3VudDw9MHx8MDwtLWMuX3JlZkNvdW50KXJldHVybiB2b2lkKGE9'@;
put 'bnVsbCk7Y29uc3QgaD1jLl9jb25uZWN0aW9uLGY9YTthPW51bGwsaCYmKCFmfHxoPT09ZikmJmgudW5zdWJzY3JpYmUoKSxsLnVuc3Vic2NyaWJlKCl9KTtjLnN1YnNjcmliZShkKSxkLmNsb3NlZHx8KGE9Yy5jb25uZWN0KCkpfSl9Y2xhc3MgSEcgZXh0ZW5kcyBLZXtjb25zdHJ1Y3Rvcihs'@;
put 'LGEpe3N1cGVyKCksdGhpcy5zb3VyY2U9bCx0aGlzLnN1YmplY3RGYWN0b3J5PWEsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLHFlKGwpJiYodGhpcy5saWZ0PWwubGlmdCl9X3N1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5nZXRTdWJq'@;
put 'ZWN0KCkuc3Vic2NyaWJlKGwpfWdldFN1YmplY3QoKXtjb25zdCBsPXRoaXMuX3N1YmplY3Q7cmV0dXJuKCFsfHxsLmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2NvbnN0'@;
put 'e19jb25uZWN0aW9uOmx9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsbD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IGw9dGhpcy5fY29ubmVjdGlvbjtpZighbCl7bD10aGlzLl9jb25uZWN0aW9uPW5ldyBlZTtjb25zdCBhPXRoaXMuZ2V0U3ViamVjdCgp'@;
put 'O2wuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShVZShhLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksYS5jb21wbGV0ZSgpfSxkPT57dGhpcy5fdGVhcmRvd24oKSxhLmVycm9yKGQpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSxsLmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVs'@;
put 'bCxsPWVlLkVNUFRZKX1yZXR1cm4gbH1yZWZDb3VudCgpe3JldHVybiBOTygpKHRoaXMpfX1mdW5jdGlvbiBpZChjKXtyZXR1cm4gYzw9MD8oKT0+TG86WGUoKGwsYSk9PntsZXQgZD0wO2wuc3Vic2NyaWJlKFVlKGEsaD0+eysrZDw9YyYmKGEubmV4dChoKSxjPD1kJiZhLmNvbXBsZXRlKCkp'@;
put 'fSkpfSl9ZnVuY3Rpb24gY3AoLi4uYyl7Y29uc3QgbD1OMChjKTtyZXR1cm4gWGUoKGEsZCk9PnsobD9teChjLGEsbCk6bXgoYyxhKSkuc3Vic2NyaWJlKGQpfSl9ZnVuY3Rpb24gSWEoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD0wO2Euc3Vic2NyaWJlKFVlKGQsZj0+Yy5jYWxsKGws'@;
put 'ZixoKyspJiZkLm5leHQoZikpKX0pfWZ1bmN0aW9uIHZ4KGMpe3JldHVybiBYZSgobCxhKT0+e2xldCBkPSExO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+e2R8fGEubmV4dChjKSxhLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBORyhjPXExZSl7cmV0dXJuIFhl'@;
put 'KChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoVWUoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29tcGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIHExZSgpe3JldHVybiBuZXcgZ3h9ZnVuY3Rpb24gdXAoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7'@;
put 'cmV0dXJuIGQ9PmQucGlwZShjP0lhKChoLGYpPT5jKGgsZixkKSk6T2UsaWQoMSksYT92eChsKTpORygoKT0+bmV3IGd4KSl9ZnVuY3Rpb24gVzYoYyxsKXtyZXR1cm4gWShsKT95cihjLGwsMSk6eXIoYywxKX1mdW5jdGlvbiBVYyhjLGwsYSl7Y29uc3QgZD1ZKGMpfHxsfHxhP3tuZXh0OmMs'@;
put 'ZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1hlKChoLGYpPT57dmFyIF87bnVsbD09PShfPWQuc3Vic2NyaWJlKXx8dm9pZCAwPT09X3x8Xy5jYWxsKGQpO2xldCBUPSEwO2guc3Vic2NyaWJlKFVlKGYsVz0+e3ZhciBpZTtudWxsPT09KGllPWQubmV4dCl8fHZvaWQgMD09PWllfHxp'@;
put 'ZS5jYWxsKGQsVyksZi5uZXh0KFcpfSwoKT0+e3ZhciBXO1Q9ITEsbnVsbD09PShXPWQuY29tcGxldGUpfHx2b2lkIDA9PT1XfHxXLmNhbGwoZCksZi5jb21wbGV0ZSgpfSxXPT57dmFyIGllO1Q9ITEsbnVsbD09PShpZT1kLmVycm9yKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCxXKSxmLmVy'@;
put 'cm9yKFcpfSwoKT0+e3ZhciBXLGllO1QmJihudWxsPT09KFc9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PVd8fFcuY2FsbChkKSksbnVsbD09PShpZT1kLmZpbmFsaXplKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCl9KSl9KTpPZX1mdW5jdGlvbiBBNShjKXtyZXR1cm4gWGUoKGwsYSk9Pnts'@;
put 'ZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKFVlKGEsdm9pZCAwLHZvaWQgMCxfPT57Zj1LcihjKF8sQTUoYykobCkpKSxkPyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEp'@;
put 'KX0pfWZ1bmN0aW9uIFZPKGMpe3JldHVybiBjPD0wPygpPT5MbzpYZSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAs'@;
put 'KCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBJXyhjKXtyZXR1cm4gWGUoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxseXthLmFkZChjKX19KX1jb25zdCBscz0icHJpbWFyeSIsTF89U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3MgUTFle2NvbnN0cnVjdG9yKGwpe3RoaXMucGFy'@;
put 'YW1zPWx8fHt9fWhhcyhsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGwpfWdldChsKXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tsXTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9'@;
put 'Z2V0QWxsKGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6W2FdfXJldHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX19ZnVuY3Rpb24gRzYoYyl7cmV0dXJuIG5ldyBRMWUoYyl9'@;
put 'ZnVuY3Rpb24gZWRlKGMsbCxhKXtjb25zdCBkPWEucGF0aC5zcGxpdCgiLyIpO2lmKGQubGVuZ3RoPmMubGVuZ3RofHwiZnVsbCI9PT1hLnBhdGhNYXRjaCYmKGwuaGFzQ2hpbGRyZW4oKXx8ZC5sZW5ndGg8Yy5sZW5ndGgpKXJldHVybiBudWxsO2NvbnN0IGg9e307Zm9yKGxldCBmPTA7Zjxk'@;
put 'Lmxlbmd0aDtmKyspe2NvbnN0IF89ZFtmXSxUPWNbZl07aWYoXy5zdGFydHNXaXRoKCI6IikpaFtfLnN1YnN0cmluZygxKV09VDtlbHNlIGlmKF8hPT1ULnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOmMuc2xpY2UoMCxkLmxlbmd0aCkscG9zUGFyYW1zOmh9fWZ1bmN0aW9uIHJo'@;
put 'KGMsbCl7Y29uc3QgYT1jP09iamVjdC5rZXlzKGMpOnZvaWQgMCxkPWw/T2JqZWN0LmtleXMobCk6dm9pZCAwO2lmKCFhfHwhZHx8YS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2xldCBoO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKWlmKGg9YVtmXSwhQkcoY1toXSxsW2hdKSlyZXR1'@;
put 'cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBCRyhjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykmJkFycmF5LmlzQXJyYXkobCkpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Y29uc3QgYT1bLi4uY10uc29ydCgpLGQ9Wy4uLmxdLnNvcnQoKTtyZXR1cm4gYS5ldmVyeSgoaCxmKT0+ZFtm'@;
put 'XT09PWgpfXJldHVybiBjPT09bH1mdW5jdGlvbiBqRyhjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gZHAoYyl7cmV0dXJuIEZPKGMpP2M6djUoYyk/ZWEoUHJvbWlzZS5yZXNvbHZlKGMpKTpXaShjKX1jb25zdCBuZGU9e2V4YWN0OmZ1bmN0aW9uIFpH'@;
put 'KGMsbCxhKXtpZighVDUoYy5zZWdtZW50cyxsLnNlZ21lbnRzKXx8IV94KGMuc2VnbWVudHMsbC5zZWdtZW50cyxhKXx8Yy5udW1iZXJPZkNoaWxkcmVuIT09bC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcihjb25zdCBkIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5bZF18fCFa'@;
put 'RyhjLmNoaWxkcmVuW2RdLGwuY2hpbGRyZW5bZF0sYSkpcmV0dXJuITE7cmV0dXJuITB9LHN1YnNldDpZR30sekc9e2V4YWN0OmZ1bmN0aW9uIHJkZShjLGwpe3JldHVybiByaChjLGwpfSxzdWJzZXQ6ZnVuY3Rpb24gaWRlKGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLmxlbmd0aDw9T2Jq'@;
put 'ZWN0LmtleXMoYykubGVuZ3RoJiZPYmplY3Qua2V5cyhsKS5ldmVyeShhPT5CRyhjW2FdLGxbYV0pKX0saWdub3JlZDooKT0+ITB9O2Z1bmN0aW9uIFVHKGMsbCxhKXtyZXR1cm4gbmRlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZ6R1thLnF1ZXJ5UGFyYW1zXShj'@;
put 'LnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpJiYhKCJleGFjdCI9PT1hLmZyYWdtZW50JiZjLmZyYWdtZW50IT09bC5mcmFnbWVudCl9ZnVuY3Rpb24gWUcoYyxsLGEpe3JldHVybiBXRyhjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBXRyhjLGwsYSxkKXtpZihjLnNlZ21lbnRzLmxlbmd0'@;
put 'aD5hLmxlbmd0aCl7Y29uc3QgaD1jLnNlZ21lbnRzLnNsaWNlKDAsYS5sZW5ndGgpO3JldHVybiEoIVQ1KGgsYSl8fGwuaGFzQ2hpbGRyZW4oKXx8IV94KGgsYSxkKSl9aWYoYy5zZWdtZW50cy5sZW5ndGg9PT1hLmxlbmd0aCl7aWYoIVQ1KGMuc2VnbWVudHMsYSl8fCFfeChjLnNlZ21lbnRz'@;
put 'LGEsZCkpcmV0dXJuITE7Zm9yKGNvbnN0IGggaW4gbC5jaGlsZHJlbilpZighYy5jaGlsZHJlbltoXXx8IVlHKGMuY2hpbGRyZW5baF0sbC5jaGlsZHJlbltoXSxkKSlyZXR1cm4hMTtyZXR1cm4hMH17Y29uc3QgaD1hLnNsaWNlKDAsYy5zZWdtZW50cy5sZW5ndGgpLGY9YS5zbGljZShjLnNl'@;
put 'Z21lbnRzLmxlbmd0aCk7cmV0dXJuISEoVDUoYy5zZWdtZW50cyxoKSYmX3goYy5zZWdtZW50cyxoLGQpJiZjLmNoaWxkcmVuW2xzXSkmJldHKGMuY2hpbGRyZW5bbHNdLGwsZixkKX19ZnVuY3Rpb24gX3goYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT56R1thXShjW2hdLnBhcmFtZXRl'@;
put 'cnMsZC5wYXJhbWV0ZXJzKSl9Y2xhc3MgJDZ7Y29uc3RydWN0b3IobD1uZXcgeWEoW10se30pLGE9e30sZD1udWxsKXt0aGlzLnJvb3Q9bCx0aGlzLnF1ZXJ5UGFyYW1zPWEsdGhpcy5mcmFnbWVudD1kfWdldCBxdWVyeVBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0'@;
put 'aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuIGFkZS5zZXJpYWxpemUodGhpcyl9fWNsYXNzIHlhe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZWdtZW50cz1sLHRoaXMuY2hpbGRyZW49YSx0aGlzLnBh'@;
put 'cmVudD1udWxsLE9iamVjdC52YWx1ZXMoYSkuZm9yRWFjaChkPT5kLnBhcmVudD10aGlzKX1oYXNDaGlsZHJlbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH1nZXQgbnVtYmVyT2ZDaGlsZHJlbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9dG9T'@;
put 'dHJpbmcoKXtyZXR1cm4gYngodGhpcyl9fWNsYXNzIFJfe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5wYXRoPWwsdGhpcy5wYXJhbWV0ZXJzPWF9Z2V0IHBhcmFtZXRlck1hcCgpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXB8fCh0aGlzLl9wYXJhbWV0ZXJNYXA9RzYodGhpcy5wYXJhbWV0ZXJz'@;
put 'KSksdGhpcy5fcGFyYW1ldGVyTWFwfXRvU3RyaW5nKCl7cmV0dXJuIHFHKHRoaXMpfX1mdW5jdGlvbiBUNShjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBPXz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJPfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIEJPe3BhcnNlKGwpe2NvbnN0IGE9bmV3IF9kZShsKTtyZXR1cm4g'@;
put 'bmV3ICQ2KGEucGFyc2VSb290U2VnbWVudCgpLGEucGFyc2VRdWVyeVBhcmFtcygpLGEucGFyc2VGcmFnbWVudCgpKX1zZXJpYWxpemUobCl7Y29uc3QgYT1gLyR7UF8obC5yb290LCEwKX1gLGQ9ZnVuY3Rpb24gdWRlKGMpe2NvbnN0IGw9T2JqZWN0LmtleXMoYykubWFwKGE9Pntjb25zdCBk'@;
put 'PWNbYV07cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoaD0+YCR7eXgoYSl9PSR7eXgoaCl9YCkuam9pbigiJiIpOmAke3l4KGEpfT0ke3l4KGQpfWB9KS5maWx0ZXIoYT0+ISFhKTtyZXR1cm4gbC5sZW5ndGg/YD8ke2wuam9pbigiJiIpfWA6IiJ9KGwucXVlcnlQYXJhbXMpO3JldHVy'@;
put 'bmAke2F9JHtkfSR7InN0cmluZyI9PXR5cGVvZiBsLmZyYWdtZW50P2AjJHtmdW5jdGlvbiBsZGUoYyl7cmV0dXJuIGVuY29kZVVSSShjKX0obC5mcmFnbWVudCl9YDoiIn1gfX1jb25zdCBhZGU9bmV3IEJPO2Z1bmN0aW9uIGJ4KGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT5xRyhsKSku'@;
put 'am9pbigiLyIpfWZ1bmN0aW9uIFBfKGMsbCl7aWYoIWMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYngoYyk7aWYobCl7Y29uc3QgYT1jLmNoaWxkcmVuW2xzXT9QXyhjLmNoaWxkcmVuW2xzXSwhMSk6IiIsZD1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gs'@;
put 'Zl0pPT57aCE9PWxzJiZkLnB1c2goYCR7aH06JHtQXyhmLCExKX1gKX0pLGQubGVuZ3RoPjA/YCR7YX0oJHtkLmpvaW4oIi8vIil9KWA6YX17Y29uc3QgYT1mdW5jdGlvbiBzZGUoYyxsKXtsZXQgYT1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0p'@;
put 'PT57ZD09PWxzJiYoYT1hLmNvbmNhdChsKGgsZCkpKX0pLE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2QhPT1scyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxhfShjLChkLGgpPT5oPT09bHM/W1BfKGMuY2hpbGRyZW5bbHNdLCExKV06W2Ake2h9OiR7UF8o'@;
put 'ZCwhMSl9YF0pO3JldHVybiAxPT09T2JqZWN0LmtleXMoYy5jaGlsZHJlbikubGVuZ3RoJiZudWxsIT1jLmNoaWxkcmVuW2xzXT9gJHtieChjKX0vJHthWzBdfWA6YCR7YngoYyl9Lygke2Euam9pbigiLy8iKX0pYH19ZnVuY3Rpb24gR0coYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChj'@;
put 'KS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24geXgoYyl7cmV0dXJuIEdHKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIGpPKGMpe3JldHVybiBHRyhjKS5yZXBs'@;
put 'YWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYiKX1mdW5jdGlvbiB3eChjKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGMpfWZ1bmN0aW9uICRHKGMpe3JldHVybiB3eChjLnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBxRyhj'@;
put 'KXtyZXR1cm5gJHtqTyhjLnBhdGgpfSR7ZnVuY3Rpb24gY2RlKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5tYXAobD0+YDske2pPKGwpfT0ke2pPKGNbbF0pfWApLmpvaW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgZGRlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHpPKGMpe2NvbnN0'@;
put 'IGw9Yy5tYXRjaChkZGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgaGRlPS9eW15cLygpPzs9I10rLyxwZGU9L15bXj0/JiNdKy8sbWRlPS9eW14mI10rLztjbGFzcyBfZGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1'@;
put 'cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgeWEoW10se30pOm5ldyB5YShbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygp'@;
put 'e2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2Rl'@;
put 'VVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJz'@;
put 'ZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNX'@;
put 'aXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW2xz'@;
put 'XT1uZXcgeWEobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXpPKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgQXIoNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgUl8od3gobCksdGhpcy5wYXJzZU1h'@;
put 'dHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIGZkZShjKXtjb25zdCBsPWMubWF0Y2goaGRlKTty'@;
put 'ZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCBoPXpPKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFt3eChhKV09d3go'@;
put 'ZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gZ2RlKGMpe2NvbnN0IGw9Yy5tYXRjaChwZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9'@;
put 'Iikpe2NvbnN0IF89ZnVuY3Rpb24gdmRlKGMpe2NvbnN0IGw9Yy5tYXRjaChtZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtfJiYoZD1fLHRoaXMuY2FwdHVyZShkKSl9Y29uc3QgaD0kRyhhKSxmPSRHKGQpO2lmKGwuaGFzT3duUHJvcGVydHkoaCkpe2xldCBfPWxbaF07'@;
put 'QXJyYXkuaXNBcnJheShfKXx8KF89W19dLGxbaF09XyksXy5wdXNoKGYpfWVsc2UgbFtoXT1mfXBhcnNlUGFyZW5zKGwpe2NvbnN0IGE9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe2NvbnN0IGQ9'@;
put 'ek8odGhpcy5yZW1haW5pbmcpLGg9dGhpcy5yZW1haW5pbmdbZC5sZW5ndGhdO2lmKCIvIiE9PWgmJiIpIiE9PWgmJiI7IiE9PWgpdGhyb3cgbmV3IEFyKDQwMTAsITEpO2xldCBmO2QuaW5kZXhPZigiOiIpPi0xPyhmPWQuc2xpY2UoMCxkLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGYp'@;
put 'LHRoaXMuY2FwdHVyZSgiOiIpKTpsJiYoZj1scyk7Y29uc3QgXz10aGlzLnBhcnNlQ2hpbGRyZW4oKTthW2ZdPTE9PT1PYmplY3Qua2V5cyhfKS5sZW5ndGg/X1tsc106bmV3IHlhKFtdLF8pLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBhfXBlZWtTdGFydHNXaXRoKGwpe3Jl'@;
put 'dHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKGwpfWNvbnN1bWVPcHRpb25hbChsKXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgobCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcobC5sZW5ndGgpLCEwKX1jYXB0dXJlKGwpe2lmKCF0aGlzLmNvbnN1'@;
put 'bWVPcHRpb25hbChsKSl0aHJvdyBuZXcgQXIoNDAxMSwhMSl9fWZ1bmN0aW9uIEtHKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyB5YShbXSx7W2xzXTpjfSk6Y31mdW5jdGlvbiBYRyhjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBkIG9mIE9iamVjdC5rZXlzKGMuY2hpbGRyZW4p'@;
put 'KXtjb25zdCBmPVhHKGMuY2hpbGRyZW5bZF0pO2lmKGQ9PT1scyYmMD09PWYuc2VnbWVudHMubGVuZ3RoJiZmLmhhc0NoaWxkcmVuKCkpZm9yKGNvbnN0W18sVF1vZiBPYmplY3QuZW50cmllcyhmLmNoaWxkcmVuKSlsW19dPVQ7ZWxzZShmLnNlZ21lbnRzLmxlbmd0aD4wfHxmLmhhc0NoaWxk'@;
put 'cmVuKCkpJiYobFtkXT1mKX1yZXR1cm4gZnVuY3Rpb24gYmRlKGMpe2lmKDE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJmMuY2hpbGRyZW5bbHNdKXtjb25zdCBsPWMuY2hpbGRyZW5bbHNdO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cy5jb25jYXQobC5zZWdtZW50cyksbC5jaGlsZHJlbil9cmV0'@;
put 'dXJuIGN9KG5ldyB5YShjLnNlZ21lbnRzLGwpKX1mdW5jdGlvbiBENShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mICQ2fWZ1bmN0aW9uIEpHKGMpe2xldCBsO2NvbnN0IGg9S0coZnVuY3Rpb24gYShmKXtjb25zdCBfPXt9O2Zvcihjb25zdCBXIG9mIGYuY2hpbGRyZW4pe2NvbnN0IGllPWEoVyk7'@;
put 'X1tXLm91dGxldF09aWV9Y29uc3QgVD1uZXcgeWEoZi51cmwsXyk7cmV0dXJuIGY9PT1jJiYobD1UKSxUfShjLnJvb3QpKTtyZXR1cm4gbD8/aH1mdW5jdGlvbiBRRyhjLGwsYSxkKXtsZXQgaD1jO2Zvcig7aC5wYXJlbnQ7KWg9aC5wYXJlbnQ7aWYoMD09PWwubGVuZ3RoKXJldHVybiBVTyho'@;
put 'LGgsaCxhLGQpO2NvbnN0IGY9ZnVuY3Rpb24gd2RlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY1swXSYmMT09PWMubGVuZ3RoJiYiLyI9PT1jWzBdKXJldHVybiBuZXcgdCQoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLF8pPT57aWYoIm9iamVjdCI9PXR5cGVv'@;
put 'ZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IFQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW1csaWVdKT0+e1RbV109InN0cmluZyI9PXR5cGVvZiBpZT9pZS5zcGxpdCgiLyIpOmllfSksWy4uLmgse291dGxldHM6VH1dfWlmKGYuc2VnbWVu'@;
put 'dFBhdGgpcmV0dXJuWy4uLmgsZi5zZWdtZW50UGF0aF19cmV0dXJuInN0cmluZyIhPXR5cGVvZiBmP1suLi5oLGZdOjA9PT1fPyhmLnNwbGl0KCIvIikuZm9yRWFjaCgoVCxXKT0+ezA9PVcmJiIuIj09PVR8fCgwPT1XJiYiIj09PVQ/YT0hMDoiLi4iPT09VD9sKys6IiIhPVQmJmgucHVzaChU'@;
put 'KSl9KSxoKTpbLi4uaCxmXX0sW10pO3JldHVybiBuZXcgdCQoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBVTyhoLGgsbmV3IHlhKFtdLHt9KSxhLGQpO2NvbnN0IF89ZnVuY3Rpb24gQ2RlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBTeChsLCEwLDApO2lmKCFh'@;
put 'KXJldHVybiBuZXcgU3gobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFN4KGEsITAsMCk7Y29uc3QgZD1DeChjLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIFNkZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFy'@;
put 'ZW50LCFkKXRocm93IG5ldyBBcig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgU3goZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxUPV8ucHJvY2Vzc0NoaWxkcmVuP0hfKF8uc2VnbWVudEdyb3Vw'@;
put 'LF8uaW5kZXgsZi5jb21tYW5kcyk6biQoXy5zZWdtZW50R3JvdXAsXy5pbmRleCxmLmNvbW1hbmRzKTtyZXR1cm4gVU8oaCxfLnNlZ21lbnRHcm91cCxULGEsZCl9ZnVuY3Rpb24gQ3goYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYhYy5vdXRsZXRzJiYhYy5zZWdtZW50'@;
put 'UGF0aH1mdW5jdGlvbiBGXyhjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJmMub3V0bGV0c31mdW5jdGlvbiBVTyhjLGwsYSxkLGgpe2xldCBfLGY9e307ZCYmT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW1csaWVdKT0+e2ZbV109QXJyYXkuaXNBcnJheShpZSk/aWUu'@;
put 'bWFwKHBlPT5gJHtwZX1gKTpgJHtpZX1gfSksXz1jPT09bD9hOmUkKGMsbCxhKTtjb25zdCBUPUtHKFhHKF8pKTtyZXR1cm4gbmV3ICQ2KFQsZixoKX1mdW5jdGlvbiBlJChjLGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gsZl0p'@;
put 'PT57ZFtoXT1mPT09bD9hOmUkKGYsbCxhKX0pLG5ldyB5YShjLnNlZ21lbnRzLGQpfWNsYXNzIHQke2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZDeChkWzBdKSl0'@;
put 'aHJvdyBuZXcgQXIoNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoRl8pO2lmKGgmJmghPT1qRyhkKSl0aHJvdyBuZXcgQXIoNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19fWNsYXNz'@;
put 'IFN4e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnNlZ21lbnRHcm91cD1sLHRoaXMucHJvY2Vzc0NoaWxkcmVuPWEsdGhpcy5pbmRleD1kfX1mdW5jdGlvbiBuJChjLGwsYSl7aWYoY3x8KGM9bmV3IHlhKFtdLHt9KSksMD09PWMuc2VnbWVudHMubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCkpcmV0'@;
put 'dXJuIEhfKGMsbCxhKTtjb25zdCBkPWZ1bmN0aW9uIHhkZShjLGwsYSl7bGV0IGQ9MCxoPWw7Y29uc3QgZj17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2Zvcig7aDxjLnNlZ21lbnRzLmxlbmd0aDspe2lmKGQ+PWEubGVuZ3RoKXJldHVybiBmO2NvbnN0IF89Yy5zZWdt'@;
put 'ZW50c1toXSxUPWFbZF07aWYoRl8oVCkpYnJlYWs7Y29uc3QgVz1gJHtUfWAsaWU9ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO2lmKGg+MCYmdm9pZCAwPT09VylicmVhaztpZihXJiZpZSYmIm9iamVjdCI9PXR5cGVvZiBpZSYmdm9pZCAwPT09aWUub3V0bGV0cyl7aWYoIWkkKFcsaWUsXykp'@;
put 'cmV0dXJuIGY7ZCs9Mn1lbHNle2lmKCFpJChXLHt9LF8pKXJldHVybiBmO2QrK31oKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpoLGNvbW1hbmRJbmRleDpkfX0oYyxsLGEpLGg9YS5zbGljZShkLmNvbW1hbmRJbmRleCk7aWYoZC5tYXRjaCYmZC5wYXRoSW5kZXg8Yy5zZWdtZW50cy5s'@;
put 'ZW5ndGgpe2NvbnN0IGY9bmV3IHlhKGMuc2VnbWVudHMuc2xpY2UoMCxkLnBhdGhJbmRleCkse30pO3JldHVybiBmLmNoaWxkcmVuW2xzXT1uZXcgeWEoYy5zZWdtZW50cy5zbGljZShkLnBhdGhJbmRleCksYy5jaGlsZHJlbiksSF8oZiwwLGgpfXJldHVybiBkLm1hdGNoJiYwPT09aC5sZW5n'@;
put 'dGg/bmV3IHlhKGMuc2VnbWVudHMse30pOmQubWF0Y2gmJiFjLmhhc0NoaWxkcmVuKCk/Wk8oYyxsLGEpOmQubWF0Y2g/SF8oYywwLGgpOlpPKGMsbCxhKX1mdW5jdGlvbiBIXyhjLGwsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgeWEoYy5zZWdtZW50cyx7fSk7e2NvbnN0IGQ9ZnVu'@;
put 'Y3Rpb24gTWRlKGMpe3JldHVybiBGXyhjWzBdKT9jWzBdLm91dGxldHM6e1tsc106Y319KGEpLGg9e307aWYoIWRbbHNdJiZjLmNoaWxkcmVuW2xzXSYmMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmMD09PWMuY2hpbGRyZW5bbHNdLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1IXyhjLmNoaWxk'@;
put 'cmVuW2xzXSxsLGEpO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cyxmLmNoaWxkcmVuKX1yZXR1cm4gT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57InN0cmluZyI9PXR5cGVvZiBfJiYoXz1bX10pLG51bGwhPT1fJiYoaFtmXT1uJChjLmNoaWxkcmVuW2ZdLGwsXykpfSksT2Jq'@;
put 'ZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2YsX10pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09Xyl9KSxuZXcgeWEoYy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gWk8oYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7'@;
put 'Y29uc3QgZj1hW2hdO2lmKEZfKGYpKXtjb25zdCBXPUVkZShmLm91dGxldHMpO3JldHVybiBuZXcgeWEoZCxXKX1pZigwPT09aCYmQ3goYVswXSkpe2QucHVzaChuZXcgUl8oYy5zZWdtZW50c1tsXS5wYXRoLHIkKGFbMF0pKSksaCsrO2NvbnRpbnVlfWNvbnN0IF89Rl8oZik/Zi5vdXRsZXRz'@;
put 'W2xzXTpgJHtmfWAsVD1oPGEubGVuZ3RoLTE/YVtoKzFdOm51bGw7XyYmVCYmQ3goVCk/KGQucHVzaChuZXcgUl8oXyxyJChUKSkpLGgrPTIpOihkLnB1c2gobmV3IFJfKF8se30pKSxoKyspfXJldHVybiBuZXcgeWEoZCx7fSl9ZnVuY3Rpb24gRWRlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9i'@;
put 'amVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+eyJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKSxudWxsIT09ZCYmKGxbYV09Wk8obmV3IHlhKFtdLHt9KSwwLGQpKX0pLGx9ZnVuY3Rpb24gciQoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgo'@;
put 'W2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBpJChjLGwsYSl7cmV0dXJuIGM9PWEucGF0aCYmcmgobCxhLnBhcmFtZXRlcnMpfWNvbnN0IE5fPSJpbXBlcmF0aXZlIjtjbGFzcyBpaHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLnVybD1hfX1jbGFzcyBZTyBleHRlbmRz'@;
put 'IGloe2NvbnN0cnVjdG9yKGwsYSxkPSJpbXBlcmF0aXZlIixoPW51bGwpe3N1cGVyKGwsYSksdGhpcy50eXBlPTAsdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1kLHRoaXMucmVzdG9yZWRTdGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJs'@;
put 'OiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIGhwIGV4dGVuZHMgaWh7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMudHlwZT0xfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhp'@;
put 'cy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9JylgfX1jbGFzcyBNeCBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9Mn10b1N0cmluZygpe3JldHVy'@;
put 'bmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3MgVl8gZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPTE2fX1jbGFzcyBXTyBleHRlbmRz'@;
put 'IGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRoaXMudGFyZ2V0PWgsdGhpcy50eXBlPTN9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJyb3J9'@;
put 'KWB9fWNsYXNzIGtkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9NH10b1N0cmluZygpe3JldHVybmBSb3V0ZXNSZWNvZ25pemVkKGlkOiAke3RoaXMuaWR9LCB1cmw6ICck'@;
put 'e3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIEFkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRo'@;
put 'aXMuc3RhdGU9aCx0aGlzLnR5cGU9N310b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9'@;
put 'fWNsYXNzIFRkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMuc2hvdWxkQWN0aXZhdGU9Zix0aGlzLnR5cGU9OH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja0VuZChpZDog'@;
put 'JHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xhc3MgRGRlIGV4dGVuZHMgaWh7'@;
put 'Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT01fXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVTdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0'@;
put 'czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBJZGUgZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy50eXBlPTZ9dG9TdHJp'@;
put 'bmcoKXtyZXR1cm5gUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBMZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0'@;
put 'ZT1sLHRoaXMudHlwZT05fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBSZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT0xMH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xv'@;
put 'YWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIE9kZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTExfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRo'@;
put 'aXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBQZGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlwZT0xMn10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYm'@;
put 'dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIEZkZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTEzfXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0'@;
put 'aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgSGRle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9MTR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlz'@;
put 'LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgbyR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9MTV9dG9TdHJpbmcoKXtyZXR1cm5gU2Nyb2xsKGFuY2hvcjogJyR7dGhp'@;
put 'cy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhpcy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFzcyBOZGV7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldD1udWxsLHRoaXMucm91dGU9bnVsbCx0aGlzLmluamVjdG9yPW51'@;
put 'bGwsdGhpcy5jaGlsZHJlbj1uZXcgQl8sdGhpcy5hdHRhY2hSZWY9bnVsbH19bGV0IEJfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9b25DaGlsZE91dGxldENyZWF0ZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KGEpO2gu'@;
put 'b3V0bGV0PWQsdGhpcy5jb250ZXh0cy5zZXQoYSxoKX1vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGEpe2NvbnN0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO2QmJihkLm91dGxldD1udWxsLGQuYXR0YWNoUmVmPW51bGwpfW9uT3V0bGV0RGVhY3RpdmF0ZWQoKXtjb25zdCBhPXRoaXMuY29udGV4dHM7'@;
put 'cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCxhfW9uT3V0bGV0UmVBdHRhY2hlZChhKXt0aGlzLmNvbnRleHRzPWF9Z2V0T3JDcmVhdGVDb250ZXh0KGEpe2xldCBkPXRoaXMuZ2V0Q29udGV4dChhKTtyZXR1cm4gZHx8KGQ9bmV3IE5kZSx0aGlzLmNvbnRleHRzLnNldChhLGQpKSxkfWdl'@;
put 'dENvbnRleHQoYSl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KGEpfHxudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSko'@;
put 'KTtjbGFzcyBzJHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9yb290PWx9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX1wYXJlbnQobCl7Y29uc3QgYT10aGlzLnBhdGhGcm9tUm9vdChsKTtyZXR1cm4gYS5sZW5ndGg+MT9hW2EubGVuZ3RoLTJdOm51bGx9Y2hpbGRyZW4obCl7Y29u'@;
put 'c3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhP2EuY2hpbGRyZW4ubWFwKGQ9PmQudmFsdWUpOltdfWZpcnN0Q2hpbGQobCl7Y29uc3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH1zaWJsaW5ncyhs'@;
put 'KXtjb25zdCBhPSRPKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGEubGVuZ3RoPDI/W106YVthLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoaD0+aC52YWx1ZSkuZmlsdGVyKGg9PmghPT1sKX1wYXRoRnJvbVJvb3QobCl7cmV0dXJuICRPKGwsdGhpcy5fcm9vdCkubWFwKGE9PmEudmFsdWUpfX1mdW5j'@;
put 'dGlvbiBHTyhjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybiBsO2Zvcihjb25zdCBhIG9mIGwuY2hpbGRyZW4pe2NvbnN0IGQ9R08oYyxhKTtpZihkKXJldHVybiBkfXJldHVybiBudWxsfWZ1bmN0aW9uICRPKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuW2xdO2Zvcihjb25zdCBhIG9mIGwu'@;
put 'Y2hpbGRyZW4pe2NvbnN0IGQ9JE8oYyxhKTtpZihkLmxlbmd0aClyZXR1cm4gZC51bnNoaWZ0KGwpLGR9cmV0dXJuW119Y2xhc3MgeGZ7Y29uc3RydWN0b3IobCxhKXt0aGlzLnZhbHVlPWwsdGhpcy5jaGlsZHJlbj1hfXRvU3RyaW5nKCl7cmV0dXJuYFRyZWVOb2RlKCR7dGhpcy52YWx1ZX0p'@;
put 'YH19ZnVuY3Rpb24gcTYoYyl7Y29uc3QgbD17fTtyZXR1cm4gYyYmYy5jaGlsZHJlbi5mb3JFYWNoKGE9PmxbYS52YWx1ZS5vdXRsZXRdPWEpLGx9Y2xhc3MgYSQgZXh0ZW5kcyBzJHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwpLHRoaXMuc25hcHNob3Q9YSxxTyh0aGlzLGwpfXRvU3RyaW5n'@;
put 'KCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX19ZnVuY3Rpb24gbCQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIFZkZShjLGwpe2NvbnN0IF89bmV3IHh4KFtdLHt9LHt9LCIiLHt9LGxzLGwsbnVsbCx7fSk7cmV0dXJuIG5ldyB1JCgiIixuZXcgeGYoXyxbXSkpfSgwLGwpLGQ9bmV3'@;
put 'IFRlKFtuZXcgUl8oIiIse30pXSksaD1uZXcgVGUoe30pLGY9bmV3IFRlKHt9KSxfPW5ldyBUZSh7fSksVD1uZXcgVGUoIiIpLFc9bmV3IEdsKGQsaCxfLFQsZixscyxsLGEucm9vdCk7cmV0dXJuIFcuc25hcHNob3Q9YS5yb290LG5ldyBhJChuZXcgeGYoVyxbXSksYSl9Y2xhc3MgR2x7Y29u'@;
put 'c3RydWN0b3IobCxhLGQsaCxmLF8sVCxXKXt0aGlzLnVybFN1YmplY3Q9bCx0aGlzLnBhcmFtc1N1YmplY3Q9YSx0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdD1kLHRoaXMuZnJhZ21lbnRTdWJqZWN0PWgsdGhpcy5kYXRhU3ViamVjdD1mLHRoaXMub3V0bGV0PV8sdGhpcy5jb21wb25lbnQ9VCx0'@;
put 'aGlzLl9mdXR1cmVTbmFwc2hvdD1XLHRoaXMudGl0bGU9dGhpcy5kYXRhU3ViamVjdD8ucGlwZShNZShpZT0+aWVbTF9dKSk/P1dpKHZvaWQgMCksdGhpcy51cmw9bCx0aGlzLnBhcmFtcz1hLHRoaXMucXVlcnlQYXJhbXM9ZCx0aGlzLmZyYWdtZW50PWgsdGhpcy5kYXRhPWZ9Z2V0IHJvdXRl'@;
put 'Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4g'@;
put 'dGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9Z2V0IHBhdGhGcm9tUm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9Z2V0IHBhcmFtTWFw'@;
put 'KCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dGhpcy5wYXJhbXMucGlwZShNZShsPT5HNihsKSkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD10aGlzLnF1'@;
put 'ZXJ5UGFyYW1zLnBpcGUoTWUobD0+RzYobCkpKSksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIGMkKGMsbD0iZW1wdHlP'@;
put 'bmx5Iil7Y29uc3QgYT1jLnBhdGhGcm9tUm9vdDtsZXQgZD0wO2lmKCJhbHdheXMiIT09bClmb3IoZD1hLmxlbmd0aC0xO2Q+PTE7KXtjb25zdCBoPWFbZF0sZj1hW2QtMV07aWYoaC5yb3V0ZUNvbmZpZyYmIiI9PT1oLnJvdXRlQ29uZmlnLnBhdGgpZC0tO2Vsc2V7aWYoZi5jb21wb25lbnQp'@;
put 'YnJlYWs7ZC0tfX1yZXR1cm4gZnVuY3Rpb24gQmRlKGMpe3JldHVybiBjLnJlZHVjZSgobCxhKT0+KHtwYXJhbXM6ey4uLmwucGFyYW1zLC4uLmEucGFyYW1zfSxkYXRhOnsuLi5sLmRhdGEsLi4uYS5kYXRhfSxyZXNvbHZlOnsuLi5hLmRhdGEsLi4ubC5yZXNvbHZlLC4uLmEucm91dGVDb25m'@;
put 'aWc/LmRhdGEsLi4uYS5fcmVzb2x2ZWREYXRhfX0pLHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KGEuc2xpY2UoZCkpfWNsYXNzIHh4e2dldCB0aXRsZSgpe3JldHVybiB0aGlzLmRhdGE/LltMX119Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnVybD1sLHRo'@;
put 'aXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD1fLHRoaXMuY29tcG9uZW50PVQsdGhpcy5yb3V0ZUNvbmZpZz1XLHRoaXMuX3Jlc29sdmU9aWV9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9v'@;
put 'dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlz'@;
put 'KX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD1HNih0aGlzLnBhcmFtcykpLHRoaXMuX3BhcmFtTWFwfWdldCBxdWVyeVBhcmFt'@;
put 'TWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlKHVybDonJHt0aGlzLnVybC5tYXAoZD0+ZC50b1N0cmluZygpKS5qb2luKCIv'@;
put 'Iil9JywgcGF0aDonJHt0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIn0nKWB9fWNsYXNzIHUkIGV4dGVuZHMgcyR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLHFPKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gZCQodGhpcy5fcm9vdCl9fWZ1'@;
put 'bmN0aW9uIHFPKGMsbCl7bC52YWx1ZS5fcm91dGVyU3RhdGU9YyxsLmNoaWxkcmVuLmZvckVhY2goYT0+cU8oYyxhKSl9ZnVuY3Rpb24gZCQoYyl7Y29uc3QgbD1jLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke2MuY2hpbGRyZW4ubWFwKGQkKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7'@;
put 'Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBLTyhjKXtpZihjLnNuYXBzaG90KXtjb25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEscmgobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFy'@;
put 'YW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1YmplY3QubmV4dChhLmZyYWdtZW50KSxyaChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiB0ZGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVy'@;
put 'biExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFyaChjW2FdLGxbYV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxyaChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBz'@;
put 'aG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBYTyhjLGwpe2NvbnN0IGE9cmgoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBvZGUoYyxsKXtyZXR1cm4gVDUoYyxsKSYmYy5ldmVyeSgoYSxkKT0+cmgo'@;
put 'YS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxYTyhjLnBhcmVudCxsLnBhcmVudCkpfWxldCBmcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmF0ZWQ9'@;
put 'bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1scyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBFcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEVyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBFcix0aGlzLmRldGFjaEV2ZW50cz1uZXcgRXIsdGhpcy5wYXJlbnRDb250'@;
put 'ZXh0cz1GaShCXyksdGhpcy5sb2NhdGlvbj1GaShhcyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1GaShVYSksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPUZpKHEwKSx0aGlzLmlucHV0QmluZGVyPUZpKEV4LHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1'@;
put 'dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRl'@;
put 'eHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0'@;
put 'aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250'@;
put 'ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRl'@;
put 'ZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmplY3RvcikpfWdldCBpc0FjdGl2'@;
put 'YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBu'@;
put 'ZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhy'@;
put 'b3cgbmV3IEFyKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0YW5jZSksYX1hdHRhY2goYSxk'@;
put 'KXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hFdmVudHMuZW1pdChhLmluc3Rh'@;
put 'bmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdChhKX19YWN0'@;
put 'aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sXz1hLnNuYXBzaG90LmNvbXBvbmVudCxUPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0'@;
put 'KHRoaXMubmFtZSkuY2hpbGRyZW4sVz1uZXcgamRlKGEsVCxoLmluamVjdG9yKTt0aGlzLmFjdGl2YXRlZD1oLmNyZWF0ZUNvbXBvbmVudChfLHtpbmRleDpoLmxlbmd0aCxpbmplY3RvcjpXLGVudmlyb25tZW50SW5qZWN0b3I6ZD8/dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSksdGhpcy5j'@;
put 'aGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxvdXRwdXRzOnthY3RpdmF0ZUV2ZW50czoiYWN0aXZhdGUiLGRlYWN0aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0'@;
put 'dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdmFdfSksY30pKCk7Y2xhc3MgamRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhp'@;
put 'cy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PUdsP3RoaXMucm91dGU6bD09PUJfP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgRXg9bmV3IFNpKCIiKTtsZXQgaCQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0RGF0YVN1'@;
put 'YnNjcmlwdGlvbnM9bmV3IE1hcH1iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFT'@;
put 'dWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1hLGg9WTYoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlw'@;
put 'ZShTYSgoW2YsXyxUXSxXKT0+KFQ9ey4uLmYsLi4uXywuLi5UfSwwPT09Vz9XaShUKTpQcm9taXNlLnJlc29sdmUoVCkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29t'@;
put 'cG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpO2NvbnN0IF89ZnVuY3Rpb24gQ3VlKGMpe2NvbnN0IGw9UW8oYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgaDUobCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9y'@;
put 'fSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRh'@;
put 'bG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3JldHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKF8pZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpUfW9mIF8uaW5wdXRzKWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KFQsZltUXSk7ZWxzZSB0'@;
put 'aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh'@;
put 'Y30pLGN9KSgpO2Z1bmN0aW9uIGpfKGMsbCxhKXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBVZGUoYyxsLGEpe3JldHVybiBsLmNoaWxk'@;
put 'cmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gal8oYyxkLGgpO3JldHVybiBqXyhjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IHhmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNo'@;
put 'KGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IF89Zi5yb3V0ZTtyZXR1cm4gXy52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSxfLmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKFQ9PmpfKGMsVCkpLF99fWNvbnN0IGQ9ZnVuY3Rpb24g'@;
put 'WmRlKGMpe3JldHVybiBuZXcgR2wobmV3IFRlKGMudXJsKSxuZXcgVGUoYy5wYXJhbXMpLG5ldyBUZShjLnF1ZXJ5UGFyYW1zKSxuZXcgVGUoYy5mcmFnbWVudCksbmV3IFRlKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+al8o'@;
put 'YyxmKSk7cmV0dXJuIG5ldyB4ZihkLGgpfX1jb25zdCBKTz0ibmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IiO2Z1bmN0aW9uIGYkKGMsbCl7Y29uc3R7cmVkaXJlY3RUbzphLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6ZH09RDUobCk/e3JlZGlyZWN0VG86bCxuYXZpZ2F0aW9uQmVoYXZp'@;
put 'b3JPcHRpb25zOnZvaWQgMH06bCxoPXAkKCExLDAsbCk7cmV0dXJuIGgudXJsPWEsaC5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPWQsaH1mdW5jdGlvbiBwJChjLGwsYSl7Y29uc3QgZD1uZXcgRXJyb3IoIk5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogIisoY3x8IiIpKTtyZXR1cm4gZFtK'@;
put 'T109ITAsZC5jYW5jZWxsYXRpb25Db2RlPWwsYSYmKGQudXJsPWEpLGR9ZnVuY3Rpb24gZyQoYyl7cmV0dXJuIG0kKGMpJiZENShjLnVybCl9ZnVuY3Rpb24gbSQoYyl7cmV0dXJuIGMmJmNbSk9dfWxldCB2JD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3BZXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxk'@;
put 'ZXBlbmRlbmNpZXM6W2ZwXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtmdW5jdGlvbiBRTyhjKXtjb25zdCBsPWMuY2hpbGRyZW4mJmMuY2hpbGRyZW4ubWFwKFFPKSxhPWw/ey4uLmMsY2hpbGRyZW46bH06ey4uLmN9O3JldHVybiFhLmNvbXBvbmVudCYmIWEubG9hZENvbXBvbmVudCYmKGx8'@;
put 'fGEubG9hZENoaWxkcmVuKSYmYS5vdXRsZXQmJmEub3V0bGV0IT09bHMmJihhLmNvbXBvbmVudD12JCksYX1mdW5jdGlvbiB0MihjKXtyZXR1cm4gYy5vdXRsZXR8fGxzfWZ1bmN0aW9uIHpfKGMpe2lmKCFjKXJldHVybiBudWxsO2lmKGMucm91dGVDb25maWc/Ll9pbmplY3RvcilyZXR1cm4g'@;
put 'Yy5yb3V0ZUNvbmZpZy5faW5qZWN0b3I7Zm9yKGxldCBsPWMucGFyZW50O2w7bD1sLnBhcmVudCl7Y29uc3QgYT1sLnJvdXRlQ29uZmlnO2lmKGE/Ll9sb2FkZWRJbmplY3RvcilyZXR1cm4gYS5fbG9hZGVkSW5qZWN0b3I7aWYoYT8uX2luamVjdG9yKXJldHVybiBhLl9pbmplY3Rvcn1yZXR1'@;
put 'cm4gbnVsbH1jbGFzcyBYZGV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1sLHRoaXMuZnV0dXJlU3RhdGU9YSx0aGlzLmN1cnJTdGF0ZT1kLHRoaXMuZm9yd2FyZEV2ZW50PWgsdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPWZ9YWN0aXZhdGUobCl7Y29u'@;
put 'c3QgYT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LGQ9dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCksS08odGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpfWRl'@;
put 'YWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCl7Y29uc3QgaD1xNihhKTtsLmNoaWxkcmVuLmZvckVhY2goZj0+e2NvbnN0IF89Zi52YWx1ZS5vdXRsZXQ7dGhpcy5kZWFjdGl2YXRlUm91dGVzKGYsaFtfXSxkKSxkZWxldGUgaFtfXX0pLE9iamVjdC52YWx1ZXMoaCkuZm9yRWFjaChmPT57dGhp'@;
put 'cy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmLGQpfSl9ZGVhY3RpdmF0ZVJvdXRlcyhsLGEsZCl7Y29uc3QgaD1sLnZhbHVlLGY9YT9hLnZhbHVlOm51bGw7aWYoaD09PWYpaWYoaC5jb21wb25lbnQpe2NvbnN0IF89ZC5nZXRDb250ZXh0KGgub3V0bGV0KTtfJiZ0aGlzLmRlYWN0'@;
put 'aXZhdGVDaGlsZFJvdXRlcyhsLGEsXy5jaGlsZHJlbil9ZWxzZSB0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBmJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGEsZCl9ZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obCxhKXtsLnZhbHVlLmNv'@;
put 'bXBvbmVudCYmdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKGwudmFsdWUuc25hcHNob3QpP3RoaXMuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKTp0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpfWRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGws'@;
put 'YSl7Y29uc3QgZD1hLmdldENvbnRleHQobC52YWx1ZS5vdXRsZXQpLGg9ZCYmbC52YWx1ZS5jb21wb25lbnQ/ZC5jaGlsZHJlbjphLGY9cTYobCk7Zm9yKGNvbnN0IF8gb2YgT2JqZWN0LmtleXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmW19dLGgpO2lmKGQmJmQu'@;
put 'b3V0bGV0KXtjb25zdCBfPWQub3V0bGV0LmRldGFjaCgpLFQ9ZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUobC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOl8scm91dGU6bCxjb250ZXh0czpUfSl9fWRlYWN0aXZhdGVS'@;
put 'b3V0ZUFuZE91dGxldChsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPXE2KGwpO2Zvcihjb25zdCBfIG9mIE9iamVjdC5rZXlzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4o'@;
put 'ZltfXSxoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPXE2KGEpO2wuY2hpbGRyZW4uZm9y'@;
put 'RWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBIZGUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBQZGUobC52YWx1ZS5zbmFwc2hvdCkpfWFj'@;
put 'dGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihLTyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxfLmNoaWxkcmVuKX1l'@;
put 'bHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBUPXRoaXMucm91'@;
put 'dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksXy5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoVC5jb250ZXh0cyksXy5hdHRhY2hSZWY9VC5jb21wb25lbnRSZWYsXy5yb3V0ZT1ULnJv'@;
put 'dXRlLnZhbHVlLF8ub3V0bGV0JiZfLm91dGxldC5hdHRhY2goVC5jb21wb25lbnRSZWYsVC5yb3V0ZS52YWx1ZSksS08oVC5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCxfLmNoaWxkcmVuKX1lbHNle2NvbnN0IFQ9el8oaC5zbmFwc2hvdCk7Xy5hdHRhY2hS'@;
put 'ZWY9bnVsbCxfLnJvdXRlPWgsXy5pbmplY3Rvcj1ULF8ub3V0bGV0JiZfLm91dGxldC5hY3RpdmF0ZVdpdGgoaCxfLmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLF8uY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNs'@;
put 'YXNzIF8ke2NvbnN0cnVjdG9yKGwpe3RoaXMucGF0aD1sLHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19fWNsYXNzIGt4e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5jb21wb25lbnQ9bCx0aGlzLnJvdXRlPWF9fWZ1bmN0aW9uIEpkZShjLGwsYSl7Y29uc3QgZD1jLl9y'@;
put 'b290O3JldHVybiBVXyhkLGw/bC5fcm9vdDpudWxsLGEsW2QudmFsdWVdKX1mdW5jdGlvbiBLNihjLGwpe2NvbnN0IGE9U3ltYm9sKCksZD1sLmdldChjLGEpO3JldHVybiBkPT09YT8iZnVuY3Rpb24iIT10eXBlb2YgY3x8ZnVuY3Rpb24gcTcoYyl7cmV0dXJuIG51bGwhPT14ZChjKX0oYyk/'@;
put 'bC5nZXQoYyk6YzpkfWZ1bmN0aW9uIFVfKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9cTYobCk7cmV0dXJuIGMuY2hpbGRyZW4uZm9yRWFjaChfPT57KGZ1bmN0aW9uIGUyZShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVD'@;
put 'aGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWMudmFsdWUsXz1sP2wudmFsdWU6bnVsbCxUPWE/YS5nZXRDb250ZXh0KGMudmFsdWUub3V0bGV0KTpudWxsO2lmKF8mJmYucm91dGVDb25maWc9PT1fLnJvdXRlQ29uZmlnKXtjb25zdCBXPWZ1bmN0aW9uIHQyZShjLGws'@;
put 'YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpcmV0dXJuIGEoYyxsKTtzd2l0Y2goYSl7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4hVDUoYy51cmwsbC51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFUNShjLnVybCxsLnVybCl8fCFyaChjLnF1'@;
put 'ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFYTyhjLGwpfHwhcmgoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtkZWZhdWx0OnJldHVybiFYTyhjLGwpfX0oXyxmLGYucm91dGVD'@;
put 'b25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtXP2guY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgXyQoZCkpOihmLmRhdGE9Xy5kYXRhLGYuX3Jlc29sdmVkRGF0YT1fLl9yZXNvbHZlZERhdGEpLFVfKGMsbCxmLmNvbXBvbmVudD9UP1QuY2hpbGRyZW46bnVsbDphLGQsaCksVyYmVCYm'@;
put 'VC5vdXRsZXQmJlQub3V0bGV0LmlzQWN0aXZhdGVkJiZoLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcga3goVC5vdXRsZXQuY29tcG9uZW50LF8pKX1lbHNlIF8mJlpfKGwsVCxoKSxoLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IF8kKGQpKSxVXyhjLG51bGwsZi5jb21wb25lbnQ/'@;
put 'VD9ULmNoaWxkcmVuOm51bGw6YSxkLGgpfSkoXyxmW18udmFsdWUub3V0bGV0XSxhLGQuY29uY2F0KFtfLnZhbHVlXSksaCksZGVsZXRlIGZbXy52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW18sVF0pPT5aXyhULGEuZ2V0Q29udGV4dChfKSxoKSksaH1mdW5j'@;
put 'dGlvbiBaXyhjLGwsYSl7Y29uc3QgZD1xNihjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57Wl8oXyxoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcga3go'@;
put 'aC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxldC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gWV8oYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gYiQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBneHx8IkVtcHR5RXJy'@;
put 'b3IiPT09Yz8ubmFtZX1jb25zdCBBeD1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBYNigpe3JldHVybiBTYShjPT5ZNihjLm1hcChsPT5sLnBpcGUoaWQoMSksY3AoQXgpKSkpLnBpcGUoTWUobD0+e2Zvcihjb25zdCBhIG9mIGwpaWYoITAhPT1hKXtpZihhPT09QXgpcmV0dXJu'@;
put 'IEF4O2lmKCExPT09YXx8YSBpbnN0YW5jZW9mICQ2KXJldHVybiBhfXJldHVybiEwfSksSWEobD0+bCE9PUF4KSxpZCgxKSkpfWZ1bmN0aW9uIHkkKGMpe3JldHVybiBmdW5jdGlvbiBqZSguLi5jKXtyZXR1cm4gV2UoYyl9KFVjKGw9PntpZihENShsKSl0aHJvdyBmJCgwLGwpfSksTWUobD0+'@;
put 'ITA9PT1sKSl9Y2xhc3MgVHh7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9bHx8bnVsbH19Y2xhc3MgdyR7Y29uc3RydWN0b3IobCl7dGhpcy51cmxUcmVlPWx9fWZ1bmN0aW9uIEo2KGMpe3JldHVybiBEXyhuZXcgVHgoYykpfWZ1bmN0aW9uIEMkKGMpe3JldHVybiBEXyhuZXcg'@;
put 'dyQoYykpfWNsYXNzIHcyZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudXJsU2VyaWFsaXplcj1sLHRoaXMudXJsVHJlZT1hfW5vTWF0Y2hFcnJvcihsKXtyZXR1cm4gbmV3IEFyKDQwMDIsITEpfWxpbmVyYWxpemVTZWdtZW50cyhsLGEpe2xldCBkPVtdLGg9YS5yb290O2Zvcig7Oyl7aWYoZD1k'@;
put 'LmNvbmNhdChoLnNlZ21lbnRzKSwwPT09aC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBXaShkKTtpZihoLm51bWJlck9mQ2hpbGRyZW4+MXx8IWguY2hpbGRyZW5bbHNdKXJldHVybiBEXyhuZXcgQXIoNGUzLCExKSk7aD1oLmNoaWxkcmVuW2xzXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGws'@;
put 'YSxkKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKSxsLGQpfWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1'@;
put 'cm4gbmV3ICQ2KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9Pntp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBUPWYuc3Vic3RyaW5nKDEpO2RbaF09YVtUXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTts'@;
put 'ZXQgXz17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW1QsV10pPT57X1tUXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLFcsZCxoKX0pLG5ldyB5YShmLF8pfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRz'@;
put 'V2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQpKX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgQXIoNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7'@;
put 'bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3BsaWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBlUD17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25h'@;
put 'bFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIEMyZShjLGwsYSxkLGgpe2NvbnN0IGY9dFAoYyxsLGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gWWRlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1BUihjLnByb3ZpZGVycyxsLGBS'@;
put 'b3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIF8yZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9XaShoLm1hcChfPT57Y29uc3QgVD1LNihfLGMpO3JldHVybiBkcChmdW5jdGlvbiBhMmUoYyl7cmV0dXJu'@;
put 'IGMmJllfKGMuY2FuTWF0Y2gpfShUKT9ULmNhbk1hdGNoKGwsYSk6Yy5ydW5JbkNvbnRleHQoKCk9PlQobCxhKSkpfSkpLnBpcGUoWDYoKSx5JCgpKTpXaSghMCl9KGQsbCxhKS5waXBlKE1lKF89PiEwPT09Xz9mOnsuLi5lUH0pKSk6V2koZil9ZnVuY3Rpb24gdFAoYyxsLGEpe2lmKCIiPT09'@;
put 'bC5wYXRoKXJldHVybiJmdWxsIj09PWwucGF0aE1hdGNoJiYoYy5oYXNDaGlsZHJlbigpfHxhLmxlbmd0aD4wKT97Li4uZVB9OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6YSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9'@;
put 'fTtjb25zdCBoPShsLm1hdGNoZXJ8fGVkZSkoYSxjLGwpO2lmKCFoKXJldHVybnsuLi5lUH07Y29uc3QgZj17fTtPYmplY3QuZW50cmllcyhoLnBvc1BhcmFtcz8/e30pLmZvckVhY2goKFtULFddKT0+e2ZbVF09Vy5wYXRofSk7Y29uc3QgXz1oLmNvbnN1bWVkLmxlbmd0aD4wP3suLi5mLC4u'@;
put 'LmguY29uc3VtZWRbaC5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVyc306ZjtyZXR1cm57bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOmguY29uc3VtZWQscmVtYWluaW5nU2VnbWVudHM6YS5zbGljZShoLmNvbnN1bWVkLmxlbmd0aCkscGFyYW1ldGVyczpfLHBvc2l0aW9uYWxQYXJh'@;
put 'bVNlZ21lbnRzOmgucG9zUGFyYW1zPz97fX19ZnVuY3Rpb24gUyQoYyxsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjAmJmZ1bmN0aW9uIHgyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5EeChjLGwsZCkmJnQyKGQpIT09bHMpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEobCxNMmUoZCxu'@;
put 'ZXcgeWEoYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1bmN0aW9uIEUyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5EeChjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxTMmUoYywwLGEsZCxjLmNoaWxkcmVu'@;
put 'KSksc2xpY2VkU2VnbWVudHM6YX06e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxjLmNoaWxkcmVuKSxzbGljZWRTZWdtZW50czphfX1mdW5jdGlvbiBTMmUoYyxsLGEsZCxoKXtjb25zdCBmPXt9O2Zvcihjb25zdCBfIG9mIGQpaWYoRHgoYyxhLF8pJiYhaFt0MihfKV0pe2NvbnN0'@;
put 'IFQ9bmV3IHlhKFtdLHt9KTtmW3QyKF8pXT1UfXJldHVybnsuLi5oLC4uLmZ9fWZ1bmN0aW9uIE0yZShjLGwpe2NvbnN0IGE9e307YVtsc109bDtmb3IoY29uc3QgZCBvZiBjKWlmKCIiPT09ZC5wYXRoJiZ0MihkKSE9PWxzKXtjb25zdCBoPW5ldyB5YShbXSx7fSk7YVt0MihkKV09aH1yZXR1'@;
put 'cm4gYX1mdW5jdGlvbiBEeChjLGwsYSl7cmV0dXJuKCEoYy5oYXNDaGlsZHJlbigpfHxsLmxlbmd0aD4wKXx8ImZ1bGwiIT09YS5wYXRoTWF0Y2gpJiYiIj09PWEucGF0aH1jbGFzcyBEMmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCl7dGhpcy5pbmplY3Rvcj1sLHRoaXMuY29uZmlnTG9h'@;
put 'ZGVyPWEsdGhpcy5yb290Q29tcG9uZW50VHlwZT1kLHRoaXMuY29uZmlnPWgsdGhpcy51cmxUcmVlPWYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PV8sdGhpcy51cmxTZXJpYWxpemVyPVQsdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLmFwcGx5UmVkaXJlY3RzPW5ldyB3MmUo'@;
put 'dGhpcy51cmxTZXJpYWxpemVyLHRoaXMudXJsVHJlZSl9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgQXIoNDAwMiwhMSl9cmVjb2duaXplKCl7Y29uc3QgbD1TJCh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLnByb2Nlc3NT'@;
put 'ZWdtZW50R3JvdXAodGhpcy5pbmplY3Rvcix0aGlzLmNvbmZpZyxsLGxzKS5waXBlKEE1KGE9PntpZihhIGluc3RhbmNlb2YgdyQpcmV0dXJuIHRoaXMuYWxsb3dSZWRpcmVjdHM9ITEsdGhpcy51cmxUcmVlPWEudXJsVHJlZSx0aGlzLm1hdGNoKGEudXJsVHJlZSk7dGhyb3cgYSBpbnN0YW5j'@;
put 'ZW9mIFR4P3RoaXMubm9NYXRjaEVycm9yKGEpOmF9KSxNZShhPT57Y29uc3QgZD1uZXcgeHgoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGxzLHRoaXMucm9vdENvbXBvbmVu'@;
put 'dFR5cGUsbnVsbCx7fSksaD1uZXcgeGYoZCxhKSxmPW5ldyB1JCgiIixoKSxfPWZ1bmN0aW9uIHlkZShjLGwsYT1udWxsLGQ9bnVsbCl7cmV0dXJuIFFHKEpHKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gXy5x'@;
put 'dWVyeVBhcmFtcz10aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfKSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QpLHtzdGF0ZTpmLHRyZWU6X319KSl9bWF0Y2gobCl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRH'@;
put 'cm91cCh0aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGwucm9vdCxscykucGlwZShBNShkPT57dGhyb3cgZCBpbnN0YW5jZW9mIFR4P3RoaXMubm9NYXRjaEVycm9yKGQpOmR9KSl9aW5oZXJpdFBhcmFtc0FuZERhdGEobCl7Y29uc3QgYT1sLnZhbHVlLGQ9YyQoYSx0aGlzLnBhcmFtc0luaGVy'@;
put 'aXRhbmNlU3RyYXRlZ3kpO2EucGFyYW1zPU9iamVjdC5mcmVlemUoZC5wYXJhbXMpLGEuZGF0YT1PYmplY3QuZnJlZXplKGQuZGF0YSksbC5jaGlsZHJlbi5mb3JFYWNoKGg9PnRoaXMuaW5oZXJpdFBhcmFtc0FuZERhdGEoaCkpfXByb2Nlc3NTZWdtZW50R3JvdXAobCxhLGQsaCl7cmV0dXJu'@;
put 'IDA9PT1kLnNlZ21lbnRzLmxlbmd0aCYmZC5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKGwsYSxkKTp0aGlzLnByb2Nlc3NTZWdtZW50KGwsYSxkLGQuc2VnbWVudHMsaCwhMCl9cHJvY2Vzc0NoaWxkcmVuKGwsYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIE9iamVj'@;
put 'dC5rZXlzKGQuY2hpbGRyZW4pKSJwcmltYXJ5Ij09PWY/aC51bnNoaWZ0KGYpOmgucHVzaChmKTtyZXR1cm4gZWEoaCkucGlwZShXNihmPT57Y29uc3QgXz1kLmNoaWxkcmVuW2ZdLFQ9ZnVuY3Rpb24gcWRlKGMsbCl7Y29uc3QgYT1jLmZpbHRlcihkPT50MihkKT09PWwpO3JldHVybiBhLnB1'@;
put 'c2goLi4uYy5maWx0ZXIoZD0+dDIoZCkhPT1sKSksYX0oYSxmKTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKGwsVCxfLGYpfSksZnVuY3Rpb24gWDFlKGMsbCl7cmV0dXJuIFhlKGZ1bmN0aW9uIEsxZShjLGwsYSxkLGgpe3JldHVybihmLF8pPT57bGV0IFQ9YSxXPWwsaWU9MDtm'@;
put 'LnN1YnNjcmliZShVZShfLHBlPT57Y29uc3Qgd2U9aWUrKztXPVQ/YyhXLHBlLHdlKTooVD0hMCxwZSksZCYmXy5uZXh0KFcpfSxoJiYoKCk9PntUJiZfLm5leHQoVyksXy5jb21wbGV0ZSgpfSkpKX19KGMsbCxhcmd1bWVudHMubGVuZ3RoPj0yLCEwKSl9KChmLF8pPT4oZi5wdXNoKC4uLl8p'@;
put 'LGYpKSx2eChudWxsKSxmdW5jdGlvbiBKMWUoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP0lhKChoLGYpPT5jKGgsZixkKSk6T2UsVk8oMSksYT92eChsKTpORygoKT0+bmV3IGd4KSl9KCkseXIoZj0+e2lmKG51bGw9PT1mKXJldHVybiBKNihk'@;
put 'KTtjb25zdCBfPU0kKGYpO3JldHVybiBmdW5jdGlvbiBJMmUoYyl7Yy5zb3J0KChsLGEpPT5sLnZhbHVlLm91dGxldD09PWxzPy0xOmEudmFsdWUub3V0bGV0PT09bHM/MTpsLnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGEudmFsdWUub3V0bGV0KSl9KF8pLFdpKF8pfSkpfXByb2Nlc3NT'@;
put 'ZWdtZW50KGwsYSxkLGgsZixfKXtyZXR1cm4gZWEoYSkucGlwZShXNihUPT50aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKFQuX2luamVjdG9yPz9sLGEsVCxkLGgsZixfKS5waXBlKEE1KFc9PntpZihXIGluc3RhbmNlb2YgVHgpcmV0dXJuIFdpKG51bGwpO3Rocm93IFd9KSkpLHVw'@;
put 'KFQ9PiEhVCksQTUoVD0+e2lmKGIkKFQpKXJldHVybiBmdW5jdGlvbiBBMmUoYyxsLGEpe3JldHVybiAwPT09bC5sZW5ndGgmJiFjLmNoaWxkcmVuW2FdfShkLGgsZik/V2koW10pOko2KGQpO3Rocm93IFR9KSl9cHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUobCxhLGQsaCxmLF8sVCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIGsyZShjLGwsYSxkKXtyZXR1cm4hISh0MihjKT09PWR8fGQhPT1scyYmRHgobCxhLGMpKSYmKCIqKiI9PT1jLnBhdGh8fHRQKGwsYyxhKS5tYXRjaGVkKX0oZCxoLGYsXyk/dm9pZCAwPT09ZC5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGws'@;
put 'aCxkLGYsXyxUKTpUJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEsZCxmLF8pOko2KGgpOko2KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZixfKXtyZXR1cm4iKioi'@;
put 'PT09aC5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGQsaCxfKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl9ZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdh'@;
put 'aW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoKXtjb25zdCBmPXRoaXMuYXBwbHlSZWRpcmVjdHMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLGQucmVkaXJlY3RUbyx7fSk7cmV0dXJuIGQucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/QyQoZik6dGhpcy5hcHBseVJlZGlyZWN0cy5s'@;
put 'aW5lcmFsaXplU2VnbWVudHMoZCxmKS5waXBlKHlyKF89Pntjb25zdCBUPW5ldyB5YShfLHt9KTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudChsLGEsVCxfLGgsITEpfSkpfWV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl7Y29uc3R7'@;
put 'bWF0Y2hlZDpULGNvbnN1bWVkU2VnbWVudHM6VyxyZW1haW5pbmdTZWdtZW50czppZSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpwZX09dFAoYSxoLGYpO2lmKCFUKXJldHVybiBKNihhKTtjb25zdCB3ZT10aGlzLmFwcGx5UmVkaXJlY3RzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhXLGgucmVk'@;
put 'aXJlY3RUbyxwZSk7cmV0dXJuIGgucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/QyQod2UpOnRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsd2UpLnBpcGUoeXIoRWU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsRWUuY29uY2F0KGllKSxfLCExKSkpfW1hdGNo'@;
put 'U2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYsXyl7bGV0IFQ7aWYoIioqIj09PWQucGF0aCl7Y29uc3QgVz1oLmxlbmd0aD4wP2pHKGgpLnBhcmFtZXRlcnM6e307VD1XaSh7c25hcHNob3Q6bmV3IHh4KGgsVyxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9'@;
put 'KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQseCQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLEUkKGQpKSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdfSksYS5jaGlsZHJlbj17fX1lbHNlIFQ9QzJlKGEsZCxoLGwpLnBpcGUo'@;
put 'TWUoKHttYXRjaGVkOlcsY29uc3VtZWRTZWdtZW50czppZSxyZW1haW5pbmdTZWdtZW50czpwZSxwYXJhbWV0ZXJzOndlfSk9Plc/e3NuYXBzaG90Om5ldyB4eChpZSx3ZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQs'@;
put 'eCQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLEUkKGQpKSxjb25zdW1lZFNlZ21lbnRzOmllLHJlbWFpbmluZ1NlZ21lbnRzOnBlfTpudWxsKSk7cmV0dXJuIFQucGlwZShTYShXPT5udWxsPT09Vz9KNihhKTp0aGlzLmdldENoaWxkQ29uZmlnKGw9'@;
put 'ZC5faW5qZWN0b3I/P2wsZCxoKS5waXBlKFNhKCh7cm91dGVzOmllfSk9Pntjb25zdCBwZT1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7c25hcHNob3Q6d2UsY29uc3VtZWRTZWdtZW50czpFZSxyZW1haW5pbmdTZWdtZW50czpaZX09Vyx7c2VnbWVudEdyb3VwOml0LHNsaWNlZFNlZ21lbnRzOmV0'@;
put 'fT1TJChhLEVlLFplLGllKTtpZigwPT09ZXQubGVuZ3RoJiZpdC5oYXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihwZSxpZSxpdCkucGlwZShNZShFdD0+bnVsbD09PUV0P251bGw6W25ldyB4Zih3ZSxFdCldKSk7aWYoMD09PWllLmxlbmd0aCYmMD09PWV0Lmxlbmd0'@;
put 'aClyZXR1cm4gV2koW25ldyB4Zih3ZSxbXSldKTtjb25zdCB5dD10MihkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQocGUsaWUsaXQsZXQseXQ/bHM6ZiwhMCkucGlwZShNZShFdD0+W25ldyB4Zih3ZSxFdCldKSl9KSkpKX1nZXRDaGlsZENvbmZpZyhsLGEsZCl7cmV0dXJuIGEu'@;
put 'Y2hpbGRyZW4/V2koe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/V2koe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5jdGlvbiB2MmUoYyxsLGEsZCl7Y29u'@;
put 'c3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9XaSghMCk6V2koaC5tYXAoXz0+e2NvbnN0IFQ9SzYoXyxjKTtyZXR1cm4gZHAoZnVuY3Rpb24gcjJlKGMpe3JldHVybiBjJiZZXyhjLmNhbkxvYWQpfShUKT9ULmNhbkxvYWQobCxhKTpjLnJ1bkluQ29udGV4'@;
put 'dCgoKT0+VChsLGEpKSl9KSkucGlwZShYNigpLHkkKCkpfShsLGEsZCkucGlwZSh5cihoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoVWMoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVjdG9yfSkpOmZ1bmN0'@;
put 'aW9uIHkyZShjKXtyZXR1cm4gRF8ocCQoITEsMykpfSgpKSk6V2koe3JvdXRlczpbXSxpbmplY3RvcjpsfSl9fWZ1bmN0aW9uIEwyZShjKXtjb25zdCBsPWMudmFsdWUucm91dGVDb25maWc7cmV0dXJuIGwmJiIiPT09bC5wYXRofWZ1bmN0aW9uIE0kKGMpe2NvbnN0IGw9W10sYT1uZXcgU2V0'@;
put 'O2Zvcihjb25zdCBkIG9mIGMpe2lmKCFMMmUoZCkpe2wucHVzaChkKTtjb250aW51ZX1jb25zdCBoPWwuZmluZChmPT5kLnZhbHVlLnJvdXRlQ29uZmlnPT09Zi52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aD8oaC5jaGlsZHJlbi5wdXNoKC4uLmQuY2hpbGRyZW4pLGEuYWRkKGgpKTps'@;
put 'LnB1c2goZCl9Zm9yKGNvbnN0IGQgb2YgYSl7Y29uc3QgaD1NJChkLmNoaWxkcmVuKTtsLnB1c2gobmV3IHhmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIHgkKGMpe3JldHVybiBjLmRhdGF8fHt9fWZ1bmN0aW9uIEUkKGMpe3JldHVybiBjLnJl'@;
put 'c29sdmV8fHt9fWZ1bmN0aW9uIE8yZShjLGwpe3JldHVybiB5cihhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gV2koYSk7bGV0IGY9MDtyZXR1cm4gZWEoaCkucGlwZShXNihfPT5mdW5jdGlvbiBQ'@;
put 'MmUoYyxsLGEsZCl7Y29uc3QgaD1jLnJvdXRlQ29uZmlnLGY9Yy5fcmVzb2x2ZTtyZXR1cm4gdm9pZCAwIT09aD8udGl0bGUmJiFrJChoKSYmKGZbTF9dPWgudGl0bGUpLGZ1bmN0aW9uIEYyZShjLGwsYSxkKXtjb25zdCBoPWZ1bmN0aW9uIEgyZShjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMo'@;
put 'YyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19KGMpO2lmKDA9PT1oLmxlbmd0aClyZXR1cm4gV2koe30pO2NvbnN0IGY9e307cmV0dXJuIGVhKGgpLnBpcGUoeXIoXz0+ZnVuY3Rpb24gTjJlKGMsbCxhLGQpe2NvbnN0IGg9el8obCk/P2QsZj1LNihjLGgpO3JldHVybiBk'@;
put 'cChmLnJlc29sdmU/Zi5yZXNvbHZlKGwsYSk6aC5ydW5JbkNvbnRleHQoKCk9PmYobCxhKSkpfShjW19dLGwsYSxkKS5waXBlKHVwKCksVWMoVD0+e2ZbX109VH0pKSksVk8oMSksZnVuY3Rpb24gVkcoYyl7cmV0dXJuIE1lKCgpPT5jKX0oZiksQTUoXz0+YiQoXyk/TG86RF8oXykpKX0oZixj'@;
put 'LGwsZCkucGlwZShNZShfPT4oYy5fcmVzb2x2ZWREYXRhPV8sYy5kYXRhPWMkKGMsYSkucmVzb2x2ZSxoJiZrJChoKSYmKGMuZGF0YVtMX109aC50aXRsZSksbnVsbCkpKX0oXy5yb3V0ZSxkLGMsbCkpLFVjKCgpPT5mKyspLFZPKDEpLHlyKF89PmY9PT1oLmxlbmd0aD9XaShhKTpMbykpfSl9'@;
put 'ZnVuY3Rpb24gayQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjLnRpdGxlfHxudWxsPT09Yy50aXRsZX1mdW5jdGlvbiBuUChjKXtyZXR1cm4gU2EobD0+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9lYShhKS5waXBlKE1lKCgpPT5sKSk6V2kobCl9KX1jb25zdCBRNj1uZXcgU2koIlJPVVRF'@;
put 'UyIpO2xldCByUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9RmkoblcpfWxvYWRDb21wb25lbnQoYSl7aWYodGhpcy5jb21wb25lbnRMb2Fk'@;
put 'ZXJzLmdldChhKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKTtpZihhLl9sb2FkZWRDb21wb25lbnQpcmV0dXJuIFdpKGEuX2xvYWRlZENvbXBvbmVudCk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoYSk7Y29uc3QgZD1kcChh'@;
put 'LmxvYWRDb21wb25lbnQoKSkucGlwZShNZShBJCksVWMoZj0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoYSksYS5fbG9hZGVkQ29tcG9uZW50PWZ9KSxJXygoKT0+e3RoaXMuY29tcG9uZW50TG9hZGVycy5kZWxldGUoYSl9KSksaD1uZXcgSEcoZCwo'@;
put 'KT0+bmV3IGJlKS5waXBlKE5PKCkpO3JldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KGEsaCksaH1sb2FkQ2hpbGRyZW4oYSxkKXtpZih0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCkpcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKTtpZihkLl9sb2FkZWRSb3V0ZXMp'@;
put 'cmV0dXJuIFdpKHtyb3V0ZXM6ZC5fbG9hZGVkUm91dGVzLGluamVjdG9yOmQuX2xvYWRlZEluamVjdG9yfSk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZCk7Y29uc3QgZj10aGlzLmxvYWRNb2R1bGVGYWN0b3J5T3JSb3V0ZXMoZC5sb2FkQ2hp'@;
put 'bGRyZW4pLnBpcGUoTWUoVD0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoZCk7bGV0IFcsaWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoVCk/aWU9VDooVz1ULmNyZWF0ZShhKS5pbmplY3RvcixpZT1XLmdldChRNixbXSxucy5TZWxmfG5zLk9wdGlvbmFs'@;
put 'KS5mbGF0KCkpLHtyb3V0ZXM6aWUubWFwKFFPKSxpbmplY3RvcjpXfX0pLElfKCgpPT57dGhpcy5jaGlsZHJlbkxvYWRlcnMuZGVsZXRlKGQpfSkpLF89bmV3IEhHKGYsKCk9Pm5ldyBiZSkucGlwZShOTygpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsXyksX31sb2FkTW9k'@;
put 'dWxlRmFjdG9yeU9yUm91dGVzKGEpe3JldHVybiBkcChhKCkpLnBpcGUoTWUoQSQpLHlyKGQ9PmQgaW5zdGFuY2VvZiBjY3x8QXJyYXkuaXNBcnJheShkKT9XaShkKTplYSh0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyhkKSkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gQSQoYyl7cmV0dXJuIGZ1bmN0aW9uIFYyZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZGVm'@;
put 'YXVsdCJpbiBjfShjKT9jLmRlZmF1bHQ6Y31sZXQgSXg9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5sYXN0U3VjY2Vzc2Z1'@;
put 'bE5hdmlnYXRpb249bnVsbCx0aGlzLmV2ZW50cz1uZXcgYmUsdGhpcy5jb25maWdMb2FkZXI9RmkoclApLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1GaShxMCksdGhpcy51cmxTZXJpYWxpemVyPUZpKE9fKSx0aGlzLnJvb3RDb250ZXh0cz1GaShCXyksdGhpcy5pbnB1dEJpbmRpbmdFbmFi'@;
put 'bGVkPW51bGwhPT1GaShFeCx7b3B0aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5XaSh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2'@;
put 'ZW50cy5uZXh0KG5ldyBSZGUoaCkpLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgTGRlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3Qg'@;
put 'ZD0rK3RoaXMubmF2aWdhdGlvbklkO3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucz1uZXcgVGUoe2lkOjAsY3VycmVudFVybFRyZWU6YS5jdXJyZW50'@;
put 'VXJsVHJlZSxjdXJyZW50UmF3VXJsOmEuY3VycmVudFVybFRyZWUsZXh0cmFjdGVkVXJsOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUpLHVybEFmdGVyUmVkaXJlY3RzOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUp'@;
put 'LHJhd1VybDphLmN1cnJlbnRVcmxUcmVlLGV4dHJhczp7fSxyZXNvbHZlOm51bGwscmVqZWN0Om51bGwscHJvbWlzZTpQcm9taXNlLnJlc29sdmUoITApLHNvdXJjZTpOXyxyZXN0b3JlZFN0YXRlOm51bGwsY3VycmVudFNuYXBzaG90OmEucm91dGVyU3RhdGUuc25hcHNob3QsdGFyZ2V0U25h'@;
put 'cHNob3Q6bnVsbCxjdXJyZW50Um91dGVyU3RhdGU6YS5yb3V0ZXJTdGF0ZSx0YXJnZXRSb3V0ZXJTdGF0ZTpudWxsLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6W10sY2FuRGVhY3RpdmF0ZUNoZWNrczpbXX0sZ3VhcmRzUmVzdWx0Om51bGx9KSx0aGlzLnRyYW5zaXRpb25zLnBpcGUoSWEo'@;
put 'ZD0+MCE9PWQuaWQpLE1lKGQ9Pih7Li4uZCxleHRyYWN0ZWRVcmw6YS51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZC5yYXdVcmwpfSkpLFNhKGQ9PntsZXQgaD0hMSxmPSExO3JldHVybiBXaShkKS5waXBlKFVjKF89Pnt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXtpZDpfLmlkLGluaXRp'@;
put 'YWxVcmw6Xy5yYXdVcmwsZXh0cmFjdGVkVXJsOl8uZXh0cmFjdGVkVXJsLHRyaWdnZXI6Xy5zb3VyY2UsZXh0cmFzOl8uZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24scHJldmlv'@;
put 'dXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9fSksU2EoXz0+e2NvbnN0IFQ9YS5icm93c2VyVXJsVHJlZS50b1N0cmluZygpLFc9IWEubmF2aWdhdGVkfHxfLmV4dHJhY3RlZFVybC50b1N0cmluZygpIT09VHx8VCE9PWEuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTtpZighVyYmInJlbG9hZCIh'@;
put 'PT0oXy5leHRyYXMub25TYW1lVXJsTmF2aWdhdGlvbj8/YS5vblNhbWVVcmxOYXZpZ2F0aW9uKSl7Y29uc3QgcGU9IiI7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFZfKF8uaWQsYS5zZXJpYWxpemVVcmwoZC5yYXdVcmwpLHBlLDApKSxhLnJhd1VybFRyZWU9Xy5yYXdVcmwsXy5yZXNv'@;
put 'bHZlKG51bGwpLExvfWlmKGEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKF8ucmF3VXJsKSlyZXR1cm4gVCQoXy5zb3VyY2UpJiYoYS5icm93c2VyVXJsVHJlZT1fLmV4dHJhY3RlZFVybCksV2koXykucGlwZShTYShwZT0+e2NvbnN0IHdlPXRoaXMudHJhbnNpdGlvbnM/'@;
put 'LmdldFZhbHVlKCk7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFlPKHBlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUocGUuZXh0cmFjdGVkVXJsKSxwZS5zb3VyY2UscGUucmVzdG9yZWRTdGF0ZSkpLHdlIT09dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKT9MbzpQcm9t'@;
put 'aXNlLnJlc29sdmUocGUpfSksZnVuY3Rpb24gUjJlKGMsbCxhLGQsaCxmKXtyZXR1cm4geXIoXz0+ZnVuY3Rpb24gVDJlKGMsbCxhLGQsaCxmLF89ImVtcHR5T25seSIpe3JldHVybiBuZXcgRDJlKGMsbCxhLGQsaCxfLGYpLnJlY29nbml6ZSgpfShjLGwsYSxkLF8uZXh0cmFjdGVkVXJsLGgs'@;
put 'ZikucGlwZShNZSgoe3N0YXRlOlQsdHJlZTpXfSk9Pih7Li4uXyx0YXJnZXRTbmFwc2hvdDpULHVybEFmdGVyUmVkaXJlY3RzOld9KSkpKX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHRoaXMuY29uZmlnTG9hZGVyLHRoaXMucm9vdENvbXBvbmVudFR5cGUsYS5jb25maWcsdGhpcy51cmxT'@;
put 'ZXJpYWxpemVyLGEucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksVWMocGU9PntpZihkLnRhcmdldFNuYXBzaG90PXBlLnRhcmdldFNuYXBzaG90LGQudXJsQWZ0ZXJSZWRpcmVjdHM9cGUudXJsQWZ0ZXJSZWRpcmVjdHMsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17Li4udGhpcy5jdXJyZW50'@;
put 'TmF2aWdhdGlvbixmaW5hbFVybDpwZS51cmxBZnRlclJlZGlyZWN0c30sImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3kpe2lmKCFwZS5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBFZT1hLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UocGUudXJsQWZ0ZXJSZWRpcmVjdHMs'@;
put 'cGUucmF3VXJsKTthLnNldEJyb3dzZXJVcmwoRWUscGUpfWEuYnJvd3NlclVybFRyZWU9cGUudXJsQWZ0ZXJSZWRpcmVjdHN9Y29uc3Qgd2U9bmV3IGtkZShwZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHBlLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlh'@;
put 'bGl6ZShwZS51cmxBZnRlclJlZGlyZWN0cykscGUudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQod2UpfSkpO2lmKFcmJmEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKGEucmF3VXJsVHJlZSkpe2NvbnN0e2lkOnBlLGV4dHJhY3RlZFVybDp3ZSxzb3VyY2U6'@;
put 'RWUscmVzdG9yZWRTdGF0ZTpaZSxleHRyYXM6aXR9PV8sZXQ9bmV3IFlPKHBlLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUod2UpLEVlLFplKTt0aGlzLmV2ZW50cy5uZXh0KGV0KTtjb25zdCB5dD1sJCgwLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90O3JldHVybiBXaShk'@;
put 'PXsuLi5fLHRhcmdldFNuYXBzaG90Onl0LHVybEFmdGVyUmVkaXJlY3RzOndlLGV4dHJhczp7Li4uaXQsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSl9e2NvbnN0IHBlPSIiO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBWXyhfLmlkLGEuc2VyaWFsaXplVXJsKGQu'@;
put 'ZXh0cmFjdGVkVXJsKSxwZSwxKSksYS5yYXdVcmxUcmVlPV8ucmF3VXJsLF8ucmVzb2x2ZShudWxsKSxMb319KSxVYyhfPT57Y29uc3QgVD1uZXcgQWRlKF8uaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6'@;
put 'ZShfLnVybEFmdGVyUmVkaXJlY3RzKSxfLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KFQpfSksTWUoXz0+ZD17Li4uXyxndWFyZHM6SmRlKF8udGFyZ2V0U25hcHNob3QsXy5jdXJyZW50U25hcHNob3QsdGhpcy5yb290Q29udGV4dHMpfSksZnVuY3Rpb24gYzJlKGMsbCl7cmV0'@;
put 'dXJuIHlyKGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGN1cnJlbnRTbmFwc2hvdDpoLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6ZixjYW5EZWFjdGl2YXRlQ2hlY2tzOl99fT1hO3JldHVybiAwPT09Xy5sZW5ndGgmJjA9PT1mLmxlbmd0aD9XaSh7Li4uYSxndWFyZHNSZXN1bHQ6ITB9'@;
put 'KTpmdW5jdGlvbiB1MmUoYyxsLGEsZCl7cmV0dXJuIGVhKGMpLnBpcGUoeXIoaD0+ZnVuY3Rpb24gbTJlKGMsbCxhLGQsaCl7Y29uc3QgZj1sJiZsLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiBmJiYwIT09Zi5sZW5ndGg/V2koZi5tYXAoVD0+'@;
put 'e2NvbnN0IFc9el8obCk/P2gsaWU9SzYoVCxXKTtyZXR1cm4gZHAoZnVuY3Rpb24gczJlKGMpe3JldHVybiBjJiZZXyhjLmNhbkRlYWN0aXZhdGUpfShpZSk/aWUuY2FuRGVhY3RpdmF0ZShjLGwsYSxkKTpXLnJ1bkluQ29udGV4dCgoKT0+aWUoYyxsLGEsZCkpKS5waXBlKHVwKCkpfSkpLnBp'@;
put 'cGUoWDYoKSk6V2koITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksdXAoaD0+ITAhPT1oLCEwKSl9KF8sZCxoLGMpLnBpcGUoeXIoVD0+VCYmZnVuY3Rpb24gbjJlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KFQpP2Z1bmN0aW9uIGQyZShjLGwsYSxkKXtyZXR1cm4gZWEo'@;
put 'bCkucGlwZShXNihoPT5teChmdW5jdGlvbiBmMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IE9kZShjKSksV2koITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBoMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IEZkZShjKSksV2koITApfShoLnJvdXRlLGQp'@;
put 'LGZ1bmN0aW9uIGcyZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAoXz0+ZnVuY3Rpb24gUWRlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4g'@;
put 'bCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KF8pKS5maWx0ZXIoXz0+bnVsbCE9PV8pLm1hcChfPT5GRygoKT0+V2koXy5ndWFyZHMubWFwKFc9Pntjb25zdCBpZT16XyhfLm5vZGUpPz9hLHBlPUs2KFcsaWUpO3JldHVybiBkcChmdW5jdGlvbiBvMmUoYyl7cmV0dXJu'@;
put 'IGMmJllfKGMuY2FuQWN0aXZhdGVDaGlsZCl9KHBlKT9wZS5jYW5BY3RpdmF0ZUNoaWxkKGQsYyk6aWUucnVuSW5Db250ZXh0KCgpPT5wZShkLGMpKSkucGlwZSh1cCgpKX0pKS5waXBlKFg2KCkpKSk7cmV0dXJuIFdpKGYpLnBpcGUoWDYoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0aW9uIHAyZShj'@;
put 'LGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBXaSghMCk7Y29uc3QgaD1kLm1hcChmPT5GRygoKT0+e2NvbnN0IF89el8obCk/P2EsVD1LNihmLF8pO3JldHVybiBkcChmdW5jdGlvbiBp'@;
put 'MmUoYyl7cmV0dXJuIGMmJllfKGMuY2FuQWN0aXZhdGUpfShUKT9ULmNhbkFjdGl2YXRlKGwsYyk6Xy5ydW5JbkNvbnRleHQoKCk9PlQobCxjKSkpLnBpcGUodXAoKSl9KSk7cmV0dXJuIFdpKGgpLnBpcGUoWDYoKSl9KGMsaC5yb3V0ZSxhKSkpLHVwKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs'@;
put 'KTpXaShUKSksTWUoVD0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpUfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXz0+dGhpcy5ldmVudHMubmV4dChfKSksVWMoXz0+e2lmKGQuZ3VhcmRzUmVzdWx0PV8uZ3VhcmRzUmVzdWx0LEQ1KF8uZ3VhcmRzUmVzdWx0KSl0aHJvdyBmJCgwLF8u'@;
put 'Z3VhcmRzUmVzdWx0KTtjb25zdCBUPW5ldyBUZGUoXy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8udXJsQWZ0ZXJSZWRpcmVjdHMpLF8udGFyZ2V0U25hcHNob3QsISFfLmd1YXJkc1Jlc3VsdCk7'@;
put 'dGhpcy5ldmVudHMubmV4dChUKX0pLElhKF89PiEhXy5ndWFyZHNSZXN1bHR8fChhLnJlc3RvcmVIaXN0b3J5KF8pLHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oXywiIiwzKSwhMSkpLG5QKF89PntpZihfLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0dXJuIFdp'@;
put 'KF8pLnBpcGUoVWMoVD0+e2NvbnN0IFc9bmV3IERkZShULmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC51cmxBZnRlclJlZGlyZWN0cyksVC50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4'@;
put 'dChXKX0pLFNhKFQ9PntsZXQgVz0hMTtyZXR1cm4gV2koVCkucGlwZShPMmUoYS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LHRoaXMuZW52aXJvbm1lbnRJbmplY3RvciksVWMoe25leHQ6KCk9Plc9ITAsY29tcGxldGU6KCk9PntXfHwoYS5yZXN0b3JlSGlzdG9yeShUKSx0aGlzLmNhbmNl'@;
put 'bE5hdmlnYXRpb25UcmFuc2l0aW9uKFQsIiIsMikpfX0pKX0pLFVjKFQ9Pntjb25zdCBXPW5ldyBJZGUoVC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQudXJsQWZ0ZXJSZWRpcmVjdHMpLFQudGFy'@;
put 'Z2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoVyl9KSl9KSxuUChfPT57Y29uc3QgVD1XPT57Y29uc3QgaWU9W107Vy5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCYmIVcucm91dGVDb25maWcuX2xvYWRlZENvbXBvbmVudCYmaWUucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29t'@;
put 'cG9uZW50KFcucm91dGVDb25maWcpLnBpcGUoVWMocGU9PntXLmNvbXBvbmVudD1wZX0pLE1lKCgpPT57fSkpKTtmb3IoY29uc3QgcGUgb2YgVy5jaGlsZHJlbilpZS5wdXNoKC4uLlQocGUpKTtyZXR1cm4gaWV9O3JldHVybiBZNihUKF8udGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUodngo'@;
put 'KSxpZCgxKSl9KSxuUCgoKT0+dGhpcy5hZnRlclByZWFjdGl2YXRpb24oKSksTWUoXz0+e2NvbnN0IFQ9ZnVuY3Rpb24gemRlKGMsbCxhKXtjb25zdCBkPWpfKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAwKTtyZXR1cm4gbmV3IGEkKGQsbCl9KGEucm91dGVSZXVzZVN0cmF0ZWd5LF8udGFy'@;
put 'Z2V0U25hcHNob3QsXy5jdXJyZW50Um91dGVyU3RhdGUpO3JldHVybiBkPXsuLi5fLHRhcmdldFJvdXRlclN0YXRlOlR9fSksVWMoXz0+e2EuY3VycmVudFVybFRyZWU9Xy51cmxBZnRlclJlZGlyZWN0cyxhLnJhd1VybFRyZWU9YS51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKF8udXJsQWZ0'@;
put 'ZXJSZWRpcmVjdHMsXy5yYXdVcmwpLGEucm91dGVyU3RhdGU9Xy50YXJnZXRSb3V0ZXJTdGF0ZSwiZGVmZXJyZWQiPT09YS51cmxVcGRhdGVTdHJhdGVneSYmKF8uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8YS5zZXRCcm93c2VyVXJsKGEucmF3VXJsVHJlZSxfKSxhLmJyb3dzZXJVcmxU'@;
put 'cmVlPV8udXJsQWZ0ZXJSZWRpcmVjdHMpfSksKChjLGwsYSxkKT0+TWUoaD0+KG5ldyBYZGUobCxoLnRhcmdldFJvdXRlclN0YXRlLGguY3VycmVudFJvdXRlclN0YXRlLGEsZCkuYWN0aXZhdGUoYyksaCkpKSh0aGlzLnJvb3RDb250ZXh0cyxhLnJvdXRlUmV1c2VTdHJhdGVneSxfPT50aGlz'@;
put 'LmV2ZW50cy5uZXh0KF8pLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCksaWQoMSksVWMoe25leHQ6Xz0+e2g9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlvbixhLm5hdmlnYXRlZD0hMCx0aGlzLmV2ZW50cy5uZXh0KG5ldyBocChfLmlkLHRo'@;
put 'aXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoXy5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5jdXJyZW50VXJsVHJlZSkpKSxhLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKF8udGFyZ2V0Um91dGVyU3RhdGUuc25hcHNob3QpLF8ucmVzb2x2ZSghMCl9'@;
put 'LGNvbXBsZXRlOigpPT57aD0hMH19KSxJXygoKT0+e2h8fGZ8fHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZCwiIiwxKSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy5pZD09PWQuaWQmJih0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwpfSksQTUoXz0+e2lmKGY9ITAsbSQoXykp'@;
put 'e2ckKF8pfHwoYS5uYXZpZ2F0ZWQ9ITAsYS5yZXN0b3JlSGlzdG9yeShkLCEwKSk7Y29uc3QgVD1uZXcgTXgoZC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGQuZXh0cmFjdGVkVXJsKSxfLm1lc3NhZ2UsXy5jYW5jZWxsYXRpb25Db2RlKTtpZih0aGlzLmV2ZW50cy5uZXh0KFQp'@;
put 'LGckKF8pKXtjb25zdCBXPWEudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShfLnVybCxhLnJhd1VybFRyZWUpLGllPXtza2lwTG9jYXRpb25DaGFuZ2U6ZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6ImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3l8fFQkKGQuc291'@;
put 'cmNlKX07YS5zY2hlZHVsZU5hdmlnYXRpb24oVyxOXyxudWxsLGllLHtyZXNvbHZlOmQucmVzb2x2ZSxyZWplY3Q6ZC5yZWplY3QscHJvbWlzZTpkLnByb21pc2V9KX1lbHNlIGQucmVzb2x2ZSghMSl9ZWxzZXthLnJlc3RvcmVIaXN0b3J5KGQsITApO2NvbnN0IFQ9bmV3IFdPKGQuaWQsdGhp'@;
put 'cy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShkLmV4dHJhY3RlZFVybCksXyxkLnRhcmdldFNuYXBzaG90Pz92b2lkIDApO3RoaXMuZXZlbnRzLm5leHQoVCk7dHJ5e2QucmVzb2x2ZShhLmVycm9ySGFuZGxlcihfKSl9Y2F0Y2goVyl7ZC5yZWplY3QoVyl9fXJldHVybiBMb30pKX0pKX1jYW5j'@;
put 'ZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLGQsaCl7Y29uc3QgZj1uZXcgTXgoYS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEuZXh0cmFjdGVkVXJsKSxkLGgpO3RoaXMuZXZlbnRzLm5leHQoZiksYS5yZXNvbHZlKCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gVCQoYyl7cmV0dXJuIGMhPT1OX31sZXQgRCQ9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBkLGg9YS5y'@;
put 'b290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PWxzKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtMX119fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShCMmUpfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLEIyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRCR7Y29uc3RydWN0b3IoYSl7'@;
put 'c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa0cpKX0sYy5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxqMmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEZpKFUyZSl9LHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y2xhc3MgejJle3Nob3VsZERldGFjaChsKXtyZXR1cm4hMX1zdG9yZShsLGEpe31zaG91bGRBdHRhY2gobCl7cmV0dXJuITF9cmV0cmlldmUobCl7cmV0dXJuIG51bGx9c2hvdWxkUmV1c2VSb3V0ZShs'@;
put 'LGEpe3JldHVybiBsLnJvdXRlQ29uZmlnPT09YS5yb3V0ZUNvbmZpZ319bGV0IFUyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgejJle31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMu'@;
put 'XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3QgTHg9bmV3IFNpKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSk7bGV0IFoyZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gRmkoWTJlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxZMmU9KCgpPT57Y2xhc3MgY3tzaG91bGRQcm9jZXNzVXJsKGEpe3JldHVybiEw'@;
put 'fWV4dHJhY3QoYSl7cmV0dXJuIGF9bWVyZ2UoYSxkKXtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFy'@;
put 'IFdfPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQ09NUExFVEU9MF09IkNPTVBMRVRFIixjW2MuRkFJTEVEPTFdPSJGQUlMRUQiLGNbYy5SRURJUkVDVElORz0yXT0iUkVESVJFQ1RJTkciLGN9KFdffHx7fSk7ZnVuY3Rpb24gSSQoYyxsKXtjLmV2ZW50cy5waXBlKElhKGE9PmEgaW5zdGFuY2Vv'@;
put 'ZiBocHx8YSBpbnN0YW5jZW9mIE14fHxhIGluc3RhbmNlb2YgV098fGEgaW5zdGFuY2VvZiBWXyksTWUoYT0+YSBpbnN0YW5jZW9mIGhwfHxhIGluc3RhbmNlb2YgVl8/V18uQ09NUExFVEU6YSBpbnN0YW5jZW9mIE14JiYoMD09PWEuY29kZXx8MT09PWEuY29kZSk/V18uUkVESVJFQ1RJTkc6'@;
put 'V18uRkFJTEVEKSxJYShhPT5hIT09V18uUkVESVJFQ1RJTkcpLGlkKDEpKS5zdWJzY3JpYmUoKCk9PntsKCl9KX1mdW5jdGlvbiBXMmUoYyl7dGhyb3cgY31mdW5jdGlvbiBHMmUoYyxsLGEpe3JldHVybiBsLnBhcnNlKCIvIil9Y29uc3QgJDJlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJp'@;
put 'Z25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHEyZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBEcz0oKCk9PntjbGFzcyBje2dldCBuYXZp'@;
put 'Z2F0aW9uSWQoKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubmF2aWdhdGlvbklkfWdldCBicm93c2VyUGFnZUlkKCl7aWYoImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbilyZXR1cm4gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpPy5cdTAy'@;
put 'NzVyb3V0ZXJQYWdlSWR9Z2V0IGV2ZW50cygpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5ldmVudHN9Y29uc3RydWN0b3IoKXt0aGlzLmRpc3Bvc2VkPSExLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMuY29uc29sZT1GaSh0VyksdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEs'@;
put 'dGhpcy5vcHRpb25zPUZpKEx4LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLnBlbmRpbmdUYXNrcz1GaShxTSksdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8VzJlLHRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyPXRoaXMub3B0aW9ucy5tYWxmb3JtZWRV'@;
put 'cmlFcnJvckhhbmRsZXJ8fEcyZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PUZpKFoyZSksdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9RmkoajJlKSx0aGlzLnRpdGxlU3RyYXRlZ3k9RmkoRCQpLHRoaXMub25TYW1l'@;
put 'VXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1lVXJsTmF2aWdhdGlvbnx8Imlnbm9yZSIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5fHwiZW1wdHlPbmx5Iix0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PXRo'@;
put 'aXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLmNvbmZpZz1GaShRNix7b3B0aW9uYWw6ITB9KT8uZmxh'@;
put 'dCgpPz9bXSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1GaShJeCksdGhpcy51cmxTZXJpYWxpemVyPUZpKE9fKSx0aGlzLmxvY2F0aW9uPUZpKEpkKSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFGaShFeCx7b3B0aW9uYWw6ITB9KSx0aGlzLmlzTmdab25lRW5hYmxl'@;
put 'ZD1GaShObylpbnN0YW5jZW9mIE5vJiZOby5pc0luQW5ndWxhclpvbmUoKSx0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyAkNix0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmJyb3dzZXJVcmxUcmVlPXRoaXMuY3Vy'@;
put 'cmVudFVybFRyZWUsdGhpcy5yb3V0ZXJTdGF0ZT1sJCgwLG51bGwpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcykuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9YS5pZCx0aGlzLmN1cnJlbnRQYWdlSWQ9dGhpcy5icm93c2VyUGFn'@;
put 'ZUlkPz8wfSxhPT57dGhpcy5jb25zb2xlLndhcm4oYFVuaGFuZGxlZCBOYXZpZ2F0aW9uIEVycm9yOiAke2F9YCl9KX1yZXNldFJvb3RDb21wb25lbnRUeXBlKGEpe3RoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9YSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5yb290Q29tcG9u'@;
put 'ZW50VHlwZT1hfWluaXRpYWxOYXZpZ2F0aW9uKCl7aWYodGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSwhdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFzUmVxdWVzdGVkTmF2aWdhdGlvbil7Y29uc3QgYT10aGlzLmxvY2F0aW9uLmdldFN0YXRlKCk7dGhpcy5uYXZpZ2F0'@;
put 'ZVRvU3luY1dpdGhCcm93c2VyKHRoaXMubG9jYXRpb24ucGF0aCghMCksTl8sYSl9fXNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpe3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb258fCh0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPXRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGE9Pntjb25z'@;
put 'dCBkPSJwb3BzdGF0ZSI9PT1hLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSI7InBvcHN0YXRlIj09PWQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYS51cmwsZCxhLnN0YXRlKX0sMCl9KSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQs'@;
put 'aCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sXz1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IFc9ey4uLmh9O2RlbGV0ZSBXLm5hdmlnYXRpb25JZCxkZWxldGUgVy5cdTAyNzVyb3V0ZXJQYWdlSWQsMCE9PU9iamVjdC5rZXlzKFcpLmxlbmd0aCYmKGYuc3RhdGU9Vyl9Y29u'@;
put 'c3QgVD10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKFQsZCxfLGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlv'@;
put 'bnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWcoYSl7dGhpcy5jb25maWc9YS5tYXAoUU8pLHRoaXMubmF2aWdhdGVkPSEx'@;
put 'LHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMX1uZ09uRGVzdHJveSgpe3RoaXMuZGlzcG9zZSgpfWRpc3Bvc2UoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jb21wbGV0ZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2Ny'@;
put 'aWJlKCksdGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITB9Y3JlYXRlVXJsVHJlZShhLGQ9e30pe2NvbnN0e3JlbGF0aXZlVG86aCxxdWVyeVBhcmFtczpmLGZyYWdtZW50Ol8scXVlcnlQYXJhbXNIYW5kbGluZzpULHByZXNlcnZlRnJhZ21lbnQ6V309'@;
put 'ZCxpZT1XP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6XztsZXQgd2UscGU9bnVsbDtzd2l0Y2goVCl7Y2FzZSJtZXJnZSI6cGU9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6cGU9dGhpcy5jdXJyZW50VXJsVHJlZS5x'@;
put 'dWVyeVBhcmFtczticmVhaztkZWZhdWx0OnBlPWZ8fG51bGx9bnVsbCE9PXBlJiYocGU9dGhpcy5yZW1vdmVFbXB0eVByb3BzKHBlKSk7dHJ5e3dlPUpHKGg/aC5zbmFwc2hvdDp0aGlzLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpfWNhdGNoeygic3RyaW5nIiE9dHlwZW9mIGFbMF18fCFh'@;
put 'WzBdLnN0YXJ0c1dpdGgoIi8iKSkmJihhPVtdKSx3ZT10aGlzLmN1cnJlbnRVcmxUcmVlLnJvb3R9cmV0dXJuIFFHKHdlLGEscGUsaWU/P251bGwpfW5hdmlnYXRlQnlVcmwoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtjb25zdCBoPUQ1KGEpP2E6dGhpcy5wYXJzZVVybChhKSxmPXRo'@;
put 'aXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShoLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKGYsTl8sbnVsbCxkKX1uYXZpZ2F0ZShhLGQ9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe3JldHVybiBmdW5jdGlvbiBLMmUoYyl7Zm9yKGxldCBsPTA7'@;
put 'bDxjLmxlbmd0aDtsKyspaWYobnVsbD09Y1tsXSl0aHJvdyBuZXcgQXIoNDAwOCwhMSl9KGEpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUoYSxkKSxkKX1zZXJpYWxpemVVcmwoYSl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSl9cGFyc2VVcmwo'@;
put 'YSl7bGV0IGQ7dHJ5e2Q9dGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoKGgpe2Q9dGhpcy5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIoaCx0aGlzLnVybFNlcmlhbGl6ZXIsYSl9cmV0dXJuIGR9aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uJDJlfTohMT09PWQ/'@;
put 'ey4uLnEyZX06ZCxENShhKSlyZXR1cm4gVUcodGhpcy5jdXJyZW50VXJsVHJlZSxhLGgpO2NvbnN0IGY9dGhpcy5wYXJzZVVybChhKTtyZXR1cm4gVUcodGhpcy5jdXJyZW50VXJsVHJlZSxmLGgpfXJlbW92ZUVtcHR5UHJvcHMoYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEpLnJlZHVjZSgoZCxo'@;
put 'KT0+e2NvbnN0IGY9YVtoXTtyZXR1cm4gbnVsbCE9ZiYmKGRbaF09ZiksZH0se30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGQsaCxmLF8pe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IFQsVyxpZTtfPyhUPV8ucmVzb2x2ZSxXPV8ucmVqZWN0LGllPV8u'@;
put 'cHJvbWlzZSk6aWU9bmV3IFByb21pc2UoKHdlLEVlKT0+e1Q9d2UsVz1FZX0pO2NvbnN0IHBlPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiBJJCh0aGlzLCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShwZSkpfSksdGhpcy5uYXZpZ2F0aW9u'@;
put 'VHJhbnNpdGlvbnMuaGFuZGxlTmF2aWdhdGlvblJlcXVlc3Qoe3NvdXJjZTpkLHJlc3RvcmVkU3RhdGU6aCxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLGN1cnJlbnRSYXdVcmw6dGhpcy5jdXJyZW50VXJsVHJlZSxyYXdVcmw6YSxleHRyYXM6ZixyZXNvbHZlOlQscmVqZWN0'@;
put 'OlcscHJvbWlzZTppZSxjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLGllLmNhdGNoKHdlPT5Qcm9taXNlLnJlamVjdCh3ZSkpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2Vy'@;
put 'aWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3QgXz17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQp'@;
put 'fTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLF8pfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCwodGhpcy5icm93c2VyUGFnZUlkPz8wKSsxKX07dGhpcy5sb2NhdGlvbi5nbyhoLCIiLGYpfX1yZXN0b3Jl'@;
put 'SGlzdG9yeShhLGQ9ITEpe2lmKCJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pe2NvbnN0IGY9dGhpcy5jdXJyZW50UGFnZUlkLSh0aGlzLmJyb3dzZXJQYWdlSWQ/P3RoaXMuY3VycmVudFBhZ2VJZCk7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28o'@;
put 'Zik6dGhpcy5jdXJyZW50VXJsVHJlZT09PXRoaXMuZ2V0Q3VycmVudE5hdmlnYXRpb24oKT8uZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMuYnJvd3NlclVybFRyZWU9YS5jdXJyZW50VXJsVHJlZSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1lbHNl'@;
put 'InJlcGxhY2UiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uJiYoZCYmdGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfXJlc2V0U3RhdGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZT1hLmN1cnJlbnRSb3V0ZXJTdGF0ZSx0aGlzLmN1cnJl'@;
put 'bnRVcmxUcmVlPWEuY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEucmF3VXJsKX1yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVy'@;
put 'bFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIsdGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUodGhpcy5sYXN0U3VjY2Vzc2Z1bElkLHRoaXMuY3VycmVudFBhZ2VJZCkpfWdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShhLGQpe3JldHVybiJjb21wdXRlZCI9PT10aGlzLmNh'@;
put 'bmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/e25hdmlnYXRpb25JZDphLFx1MDI3NXJvdXRlclBhZ2VJZDpkfTp7bmF2aWdhdGlvbklkOmF9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxCdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9ZCx0aGlzLnRhYkluZGV4QXR0cmlidXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9Xyx0aGlzLmxv'@;
put 'Y2F0aW9uU3RyYXRlZ3k9VCx0aGlzLmhyZWY9bnVsbCx0aGlzLmNvbW1hbmRzPW51bGwsdGhpcy5vbkNoYW5nZXM9bmV3IGJlLHRoaXMucHJlc2VydmVGcmFnbWVudD0hMSx0aGlzLnNraXBMb2NhdGlvbkNoYW5nZT0hMSx0aGlzLnJlcGxhY2VVcmw9ITE7Y29uc3QgVz1fLm5hdGl2ZUVsZW1l'@;
put 'bnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKTt0aGlzLmlzQW5jaG9yRWxlbWVudD0iYSI9PT1XfHwiYXJlYSI9PT1XLHRoaXMuaXNBbmNob3JFbGVtZW50P3RoaXMuc3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShpZT0+e2llIGluc3RhbmNlb2YgaHAmJnRoaXMudXBkYXRlSHJlZigp'@;
put 'fSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09u'@;
put 'Q2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhpcy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25O'@;
put 'YXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZixfKXtyZXR1cm4hIShudWxsPT09dGhpcy51cmxUcmVlfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1hfHxkfHxofHxmfHxffHwi'@;
put 'c3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUse3NraXBMb2NhdGlvbkNoYW5nZTp0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOnRoaXMucmVwbGFjZVVybCxz'@;
put 'dGF0ZTp0aGlzLnN0YXRlfSksIXRoaXMuaXNBbmNob3JFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZUhyZWYoKXt0aGlzLmhyZWY9bnVsbCE9PXRoaXMudXJsVHJlZSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRp'@;
put 'b25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKTpudWxsO2NvbnN0IGE9bnVsbD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIFlDKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gcEkoYyxsKXtyZXR1cm4ic3JjIj09PWwm'@;
put 'JigiZW1iZWQiPT09Y3x8ImZyYW1lIj09PWN8fCJpZnJhbWUiPT09Y3x8Im1lZGlhIj09PWN8fCJzY3JpcHQiPT09Yyl8fCJocmVmIj09PWwmJigiYmFzZSI9PT1jfHwibGluayI9PT1jKT9aQzpydn0obCxhKShjKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lLnRv'@;
put 'TG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGEpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxkKXtjb25zdCBoPXRoaXMucmVuZGVyZXIsZj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWQ/aC5zZXRBdHRyaWJ1dGUoZixhLGQpOmgucmVtb3Zl'@;
put 'QXR0cmlidXRlKGYsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuY29tbWFuZHM/bnVsbDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0aGlzLnJvdXRl'@;
put 'LHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQoR2wpLFA0KCJ0YWJpbmRleCIpLHR0KEZvKSx0dChOaSksdHQoazUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYuYnV0dG9uLGYuY3RybEtleSxmLnNoaWZ0S2V5LGYuYWx0S2V5LGYubWV0YUtleSl9KSwyJmEmJlRyKCJ0YXJnZXQiLGQudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVlcnlQYXJhbXM6'@;
put 'InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1zSGFuZGxpbmciLHN0YXRlOiJzdGF0ZSIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbInByZXNlcnZlRnJhZ21lbnQiLCJwcmVzZXJ2ZUZyYWdt'@;
put 'ZW50IixVNl0sc2tpcExvY2F0aW9uQ2hhbmdlOlsic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixVNl0scmVwbGFjZVVybDpbInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixVNl0scm91dGVyTGluazoicm91dGVyTGluayJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6'@;
put 'W2VNLHZhXX0pLGN9KSgpLEdfPSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9Xyx0aGlz'@;
put 'LmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEVyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhw'@;
put 'JiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7V2kodGhpcy5saW5rcy5jaGFuZ2VzLFdpKG51bGwpKS5waXBlKFBpKCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExp'@;
put 'bmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1'@;
put 'YnNjcmlwdGlvbj1lYShhKS5waXBlKFBpKCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNw'@;
put 'bGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1'@;
put 'YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuX2lzQWN0aXZlIT09YSYmKHRoaXMuX2lzQWN0aXZlPWEsdGhpcy5jZHIubWFya0ZvckNoZWNr'@;
put 'KCksdGhpcy5jbGFzc2VzLmZvckVhY2goZD0+e2E/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpfSksYSYmdm9pZCAwIT09dGhpcy5hcmlhQ3Vy'@;
put 'cmVudFdoZW5BY3RpdmU/dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIsdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKSk6dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50'@;
put 'Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiBYMmUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtB'@;
put 'Y3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT4hIWgudXJsVHJlZSYmYS5pc0FjdGl2ZShoLnVybFRyZWUsZCl9aGFzQWN0aXZlTGlua3MoKXtjb25zdCBhPXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKTtyZXR1cm4gdGhp'@;
put 'cy5saW5rJiZhKHRoaXMubGluayl8fHRoaXMubGlua3Muc29tZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRHMpLHR0KE5pKSx0dChGbyksdHQoVWEpLHR0KEJ1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Iiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLEJ1LDUpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQubGlua3M9Zil9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0'@;
put 'aW9ucyIsYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUifSxvdXRwdXRzOntpc0FjdGl2ZUNoYW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3RpdmUiXSxzdGFu'@;
put 'ZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBMJHt9bGV0IEoyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmluamVjdG9yPWgsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9Zix0aGlzLmxvYWRlcj1ffXNldFVwUHJl'@;
put 'bG9hZGluZygpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKElhKGE9PmEgaW5zdGFuY2VvZiBocCksVzYoKCk9PnRoaXMucHJlbG9hZCgpKSkuc3Vic2NyaWJlKCgpPT57fSl9cHJlbG9hZCgpe3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModGhpcy5pbmplY3Rv'@;
put 'cix0aGlzLnJvdXRlci5jb25maWcpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJvY2Vzc1JvdXRlcyhhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgZCl7Zi5wcm92aWRlcnMmJiFmLl9pbmplY3RvciYmKGYu'@;
put 'X2luamVjdG9yPUFSKGYucHJvdmlkZXJzLGEsYFJvdXRlOiAke2YucGF0aH1gKSk7Y29uc3QgXz1mLl9pbmplY3Rvcj8/YSxUPWYuX2xvYWRlZEluamVjdG9yPz9fOyhmLmxvYWRDaGlsZHJlbiYmIWYuX2xvYWRlZFJvdXRlcyYmdm9pZCAwPT09Zi5jYW5Mb2FkfHxmLmxvYWRDb21wb25lbnQm'@;
put 'JiFmLl9sb2FkZWRDb21wb25lbnQpJiZoLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKF8sZikpLChmLmNoaWxkcmVufHxmLl9sb2FkZWRSb3V0ZXMpJiZoLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKFQsZi5jaGlsZHJlbj8/Zi5fbG9hZGVkUm91dGVzKSl9cmV0dXJuIGVhKGgpLnBpcGUoUGko'@;
put 'KSl9cHJlbG9hZENvbmZpZyhhLGQpe3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGQsKCk9PntsZXQgaDtoPWQubG9hZENoaWxkcmVuJiZ2b2lkIDA9PT1kLmNhbkxvYWQ/dGhpcy5sb2FkZXIubG9hZENoaWxkcmVuKGEsZCk6V2kobnVsbCk7Y29uc3QgZj1oLnBpcGUo'@;
put 'eXIoXz0+bnVsbD09PV8/V2kodm9pZCAwKTooZC5fbG9hZGVkUm91dGVzPV8ucm91dGVzLGQuX2xvYWRlZEluamVjdG9yPV8uaW5qZWN0b3IsdGhpcy5wcm9jZXNzUm91dGVzKF8uaW5qZWN0b3I/P2EsXy5yb3V0ZXMpKSkpO3JldHVybiBkLmxvYWRDb21wb25lbnQmJiFkLl9sb2FkZWRDb21w'@;
put 'b25lbnQ/ZWEoW2YsdGhpcy5sb2FkZXIubG9hZENvbXBvbmVudChkKV0pLnBpcGUoUGkoKSk6Zn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihEcyksYXIoblcpLGFyKHEwKSxhcihMJCksYXIoclApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBpUD1uZXcgU2koIiIpO2xldCBSJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXz17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmll'@;
put 'd3BvcnRTY3JvbGxlcj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz1fLHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LF8uc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj1fLnNjcm9sbFBvc2l0aW9uUmVz'@;
put 'dG9yYXRpb258fCJkaXNhYmxlZCIsXy5hbmNob3JTY3JvbGxpbmc9Xy5hbmNob3JTY3JvbGxpbmd8fCJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3Jv'@;
put 'bGxSZXN0b3JhdGlvbigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4g'@;
put 'dGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgWU8/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVz'@;
put 'dG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgaHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZy'@;
put 'YWdtZW50KSk6YSBpbnN0YW5jZW9mIFZfJiYwPT09YS5jb2RlJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Nyb2xs'@;
put 'RXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIG8kJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0'@;
put 'aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/'@;
put 'dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9sbEV2'@;
put 'ZW50KGEsZCl7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5uZXh0KG5ldyBvJChhLCJwb3BzdGF0ZSI9PT10aGlzLmxhc3RTb3VyY2U/dGhpcy5zdG9yZVt0aGlzLnJlc3Rv'@;
put 'cmVkSWRdOm51bGwsZCkpfSl9LDApfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpeyFmdW5j'@;
put 'dGlvbiBNUygpe3Rocm93IG5ldyBFcnJvcigiaW52YWxpZCIpfSgpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIEVmKGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRlcnM6bH19ZnVuY3Rpb24gUCQoKXtj'@;
put 'b25zdCBjPUZpKEVhKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQoeDUpO2lmKGwhPT1hLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoRHMpLGg9Yy5nZXQoRiQpOzE9PT1jLmdldChvUCkmJmQuaW5pdGlhbE5hdmlnYXRpb24oKSxjLmdldChIJCxudWxsLG5zLk9wdGlvbmFs'@;
put 'KT8uc2V0VXBQcmVsb2FkaW5nKCksYy5nZXQoaVAsbnVsbCxucy5PcHRpb25hbCk/LmluaXQoKSxkLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoYS5jb21wb25lbnRUeXBlc1swXSksaC5jbG9zZWR8fChoLm5leHQoKSxoLmNvbXBsZXRlKCksaC51bnN1YnNjcmliZSgpKX19Y29uc3QgRiQ9bmV3'@;
put 'IFNpKCIiLHtmYWN0b3J5OigpPT5uZXcgYmV9KSxvUD1uZXcgU2koIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxIJD1uZXcgU2koIiIpO2Z1bmN0aW9uIG5oZShjKXtyZXR1cm4gRWYoMCxbe3Byb3ZpZGU6SCQsdXNlRXhpc3Rpbmc6SjJlfSx7cHJvdmlkZTpMJCx1c2VF'@;
put 'eGlzdGluZzpjfV0pfWNvbnN0IE4kPW5ldyBTaSgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxpaGU9W0pkLHtwcm92aWRlOk9fLHVzZUNsYXNzOkJPfSxEcyxCXyx7cHJvdmlkZTpHbCx1c2VGYWN0b3J5OmZ1bmN0aW9uIE8kKGMpe3JldHVybiBjLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W0Rz'@;
put 'XX0sclAsW11dO2Z1bmN0aW9uIG9oZSgpe3JldHVybiBuZXcgZlcoIlJvdXRlciIsRHMpfWxldCBoYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbaWhlLFtdLHtwcm92aWRlOlE2LG11bHRpOiEw'@;
put 'LHVzZVZhbHVlOmF9LHtwcm92aWRlOk4kLHVzZUZhY3Rvcnk6Y2hlLGRlcHM6W1tEcyxuZXcgejIsbmV3IGcwXV19LHtwcm92aWRlOkx4LHVzZVZhbHVlOmR8fHt9fSxkPy51c2VIYXNoP3twcm92aWRlOms1LHVzZUNsYXNzOmt1ZX06e3Byb3ZpZGU6azUsdXNlQ2xhc3M6ald9LHtwcm92aWRl'@;
put 'OmlQLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPUZpKGowZSksbD1GaShObyksYT1GaShMeCksZD1GaShJeCksaD1GaShPXyk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IFIkKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/'@;
put 'bmhlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10se3Byb3ZpZGU6ZlcsbXVsdGk6ITAsdXNlRmFjdG9yeTpvaGV9LGQ/LmluaXRpYWxOYXZpZ2F0aW9uP3VoZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/RWYoOCxbaCQse3Byb3ZpZGU6RXgsdXNlRXhp'@;
put 'c3Rpbmc6aCR9XSkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpWJCx1c2VGYWN0b3J5OlAkfSx7cHJvdmlkZTpKUixtdWx0aTohMCx1c2VFeGlzdGluZzpWJH1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6UTYsbXVsdGk6'@;
put 'ITAsdXNlVmFsdWU6YX1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTiQsOCkpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2Z1bmN0aW9uIGNoZShjKXtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rp'@;
put 'b24gdWhlKGMpe3JldHVyblsiZGlzYWJsZWQiPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigzLFt7cHJvdmlkZTpaUixtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShEcyk7cmV0dXJuKCk9PntsLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpfX19LHtwcm92aWRlOm9Q'@;
put 'LHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmciPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigyLFt7cHJvdmlkZTpvUCx1c2VWYWx1ZTowfSx7cHJvdmlkZTpaUixtdWx0aTohMCxkZXBzOltFYV0sdXNlRmFjdG9yeTpsPT57Y29uc3QgYT1sLmdldCh4'@;
put 'dWUsUHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybigpPT5hLnRoZW4oKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPWwuZ2V0KERzKSxmPWwuZ2V0KEYkKTtJJChoLCgpPT57ZCghMCl9KSxsLmdldChJeCkuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/V2kodm9pZCAw'@;
put 'KTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgViQ9bmV3IFNpKCIiKTt2YXIgQiQ9RigzNjA3MiksaGhlPUYoNjYzMDQpO2NvbnN0IHNQPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19h'@;
put 'bGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDoh'@;
put 'MCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIG4xPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9y'@;
put 'b3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0'@;
put 'YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQi'@;
put 'LGNbYy5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30objF8fHt9KSxyMT1GKDU2MzIxKSxqJD1GLm4ocjEpLFpjPUYoNzY3NzEpO2xldCBlOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdz'@;
put 'KGEpe3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxhUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy51c2VyQ2hhbmdlPW5ldyBiZX1zZXQgdXNlcihhKXt0aGlzLl91c2VyPWEsdGhpcy51c2VyQ2hhbmdlLm5leHQoYSl9Z2V0IHVzZXIoKXtyZXR1cm4gdGhpcy5f'@;
put 'dXNlcn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbFA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBiZX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdmw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFsZXJ0c1NlcnZpY2U9YSx0aGlzLm9uU2lkZWJhclRv'@;
put 'Z2dsZT1uZXcgRXIsdGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkPW5ldyBFcix0aGlzLm9uU2hvd0Fib3J0TW9kYWw9bmV3IEVyLHRoaXMub25SZXF1ZXN0c01vZGFsT3Blbj1uZXcgRXIsdGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdz1uZXcgRXIsdGhpcy52aWV3TGFzdFVybD1udWxsLHRoaXMu'@;
put 'c2lkZWJhckNsb3NlTGltaXQ9MTI4MH1zaG93RGVtb0xpbWl0TW9kYWwoYSl7dGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdy5lbWl0KGEpfXNob3dJbmZvTW9kYWwoYT0iSW5mbyIsZCl7dGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQoe21vZGFsVGl0bGU6YSxtZXNzYWdlOmQsc2FzU2Vydmlj'@;
put 'ZToiIixkZXRhaWxzOm51bGx9KX1zaG93QWJvcnRNb2RhbChhLGQsaCxmPXZvaWQgMCl7aHx8KGg9bnVsbCk7bGV0IF89e3Nhc1NlcnZpY2U6YSxtZXNzYWdlOmQsZGV0YWlsczpofTtmJiYoXy5tb2RhbFRpdGxlPWYpLHRoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KF8pfW9wZW5SZXF1ZXN0'@;
put 'c01vZGFsKCl7dGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuLmVtaXQoITApfWNhdGNoUmVzcG9uc2VFcnJvcihhLGQpe2xldCBoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIjtpZihkLmVycm9yKXtsZXQgZjtoPWQuZXJyb3IubWVzc2FnZSxkLmVycm9yLmRldGFpbHMmJmQuZXJyb3IuZGV0'@;
put 'YWlscy5sb2cmJihmPWQuZXJyb3IuZGV0YWlscy5sb2cpLCghaHx8aC50cmltKCkubGVuZ3RoPDEpJiYoaD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLHRoaXMuc2hvd0Fib3J0TW9kYWwoYSxoLHtMT0c6Zn0sIlJlcXVlc3QgZXJyb3IiKX1lbHNlIHRoaXMuc2hvd0Fib3J0TW9kYWwo'@;
put 'YSxoKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCgpfWNsb3NlU2lkZWJhcigpe3dpbmRvdy5pbm5lcldpZHRoPHRoaXMuc2lkZWJhckNsb3NlTGltaXQmJnRoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITF9KX1vcGVuU2lkZWJhcigpe3RoaXMub25T'@;
put 'aWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITB9KX1zdGFydHVwRGF0YUxvYWRlZCgpe3RoaXMub25TdGFydHVwRGF0YUxvYWRlZC5lbWl0KCl9ZGlzcGF0Y2hFdmVudChhKXtsZXQgZDsiZnVuY3Rpb24iPT10eXBlb2YgRXZlbnQ/ZD1uZXcgRXZlbnQoYSk6KGQ9ZG9jdW1lbnQuY3JlYXRlRXZl'@;
put 'bnQoIkV2ZW50IiksZC5pbml0RXZlbnQoYSwhMCwhMCkpLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihsUCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92'@;
put 'aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIFJ4e31jbGFzcyBPeHt9Y2xhc3Mgb2h7Y29uc3RydWN0b3IobCl7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCxsPyJzdHJpbmciPT10eXBlb2YgbD90aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFk'@;
put 'ZXJzPW5ldyBNYXAsbC5zcGxpdCgiXG4iKS5mb3JFYWNoKGE9Pntjb25zdCBkPWEuaW5kZXhPZigiOiIpO2lmKGQ+MCl7Y29uc3QgaD1hLnNsaWNlKDAsZCksZj1oLnRvTG93ZXJDYXNlKCksXz1hLnNsaWNlKGQrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShoLGYpLHRo'@;
put 'aXMuaGVhZGVycy5oYXMoZik/dGhpcy5oZWFkZXJzLmdldChmKS5wdXNoKF8pOnRoaXMuaGVhZGVycy5zZXQoZixbX10pfX0pfTp0eXBlb2YgSGVhZGVyczwidSImJmwgaW5zdGFuY2VvZiBIZWFkZXJzPyh0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLmZvckVhY2goKGEsZCk9Pnt0aGlzLnNldEhl'@;
put 'YWRlckVudHJpZXMoZCxhKX0pKTp0aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZF0pPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGEsZCl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKGwpe3JldHVybiB0aGlz'@;
put 'LmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKGwudG9Mb3dlckNhc2UoKSl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpO3JldHVybiBhJiZhLmxlbmd0aD4wP2FbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5'@;
put 'LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiYSJ9KX1zZXQo'@;
put 'bCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxhKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoYSl8fHRoaXMu'@;
put 'bm9ybWFsaXplZE5hbWVzLnNldChhLGwpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIG9oP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxh'@;
put 'enlVcGRhdGUuZm9yRWFjaChsPT50aGlzLmFwcGx5VXBkYXRlKGwpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKGwpe2wuaW5pdCgpLEFycmF5LmZyb20obC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChhPT57dGhpcy5oZWFkZXJzLnNldChhLGwuaGVhZGVycy5nZXQoYSkpLHRo'@;
put 'aXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwubm9ybWFsaXplZE5hbWVzLmdldChhKSl9KX1jbG9uZShsKXtjb25zdCBhPW5ldyBvaDtyZXR1cm4gYS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2Ygb2g/dGhpcy5sYXp5SW5pdDp0aGlzLGEubGF6eVVw'@;
put 'ZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtsXSksYX1hcHBseVVwZGF0ZShsKXtjb25zdCBhPWwubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChsLm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IGQ9bC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksMD09PWQu'@;
put 'bGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobC5uYW1lLGEpO2NvbnN0IGg9KCJhIj09PWwub3A/dGhpcy5oZWFkZXJzLmdldChhKTp2b2lkIDApfHxbXTtoLnB1c2goLi4uZCksdGhpcy5oZWFkZXJzLnNldChhLGgpO2JyZWFrO2Nhc2UiZCI6Y29uc3QgZj1sLnZh'@;
put 'bHVlO2lmKGYpe2xldCBfPXRoaXMuaGVhZGVycy5nZXQoYSk7aWYoIV8pcmV0dXJuO189Xy5maWx0ZXIoVD0+LTE9PT1mLmluZGV4T2YoVCkpLDA9PT1fLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShhKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoYSkpOnRoaXMuaGVhZGVycy5z'@;
put 'ZXQoYSxfKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpfX1zZXRIZWFkZXJFbnRyaWVzKGwsYSl7Y29uc3QgZD0oQXJyYXkuaXNBcnJheShhKT9hOlthXSkubWFwKGY9PmYudG9TdHJpbmcoKSksaD1sLnRvTG93ZXJDYXNlKCk7dGhp'@;
put 'cy5oZWFkZXJzLnNldChoLGQpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShsLGgpfWZvckVhY2gobCl7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goYT0+bCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSksdGhpcy5oZWFk'@;
put 'ZXJzLmdldChhKSkpfX1jbGFzcyBmaGV7ZW5jb2RlS2V5KGwpe3JldHVybiB6JChsKX1lbmNvZGVWYWx1ZShsKXtyZXR1cm4geiQobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19'@;
put 'Y29uc3QgZ2hlPS8lKFxkW2EtZjAtOV0pL2dpLG1oZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24geiQoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKGdoZSwobCxhKT0+'@;
put 'bWhlW2FdPz9sKX1mdW5jdGlvbiBQeChjKXtyZXR1cm5gJHtjfWB9Y2xhc3MgcHB7Y29uc3RydWN0b3IobD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9bC5lbmNvZGVyfHxuZXcgZmhlLGwuZnJvbVN0cmluZyl7aWYobC5mcm9tT2Jq'@;
put 'ZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uIHBoZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYy5sZW5ndGg+MCYmYy5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZv'@;
put 'ckVhY2goaD0+e2NvbnN0IGY9aC5pbmRleE9mKCI9IiksW18sVF09LTE9PWY/W2wuZGVjb2RlS2V5KGgpLCIiXTpbbC5kZWNvZGVLZXkoaC5zbGljZSgwLGYpKSxsLmRlY29kZVZhbHVlKGguc2xpY2UoZisxKSldLFc9YS5nZXQoXyl8fFtdO1cucHVzaChUKSxhLnNldChfLFcpfSksYX0obC5m'@;
put 'cm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSBsLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMobC5mcm9tT2JqZWN0KS5mb3JFYWNoKGE9Pntjb25zdCBkPWwuZnJvbU9iamVjdFthXSxoPUFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoUHgpOltQeChkKV07dGhpcy5t'@;
put 'YXAuc2V0KGEsaCl9KSk6dGhpcy5tYXA9bnVsbH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhsKX1nZXQobCl7dGhpcy5pbml0KCk7Y29uc3QgYT10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGE/YVswXTpudWxsfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhp'@;
put 'cy5tYXAuZ2V0KGwpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6ImEifSl9YXBwZW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIE9iamVj'@;
put 'dC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9bFtkXTtBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaChmPT57YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmYsb3A6ImEifSl9KTphLnB1c2goe3BhcmFtOmQsdmFsdWU6aCxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoYSl9c2V0KGwsYSl7cmV0dXJu'@;
put 'IHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChsPT57Y29uc3QgYT10aGlzLmVuY29kZXIu'@;
put 'ZW5jb2RlS2V5KGwpO3JldHVybiB0aGlzLm1hcC5nZXQobCkubWFwKGQ9PmErIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShkKSkuam9pbigiJiIpfSkuZmlsdGVyKGw9PiIiIT09bCkuam9pbigiJiIpfWNsb25lKGwpe2NvbnN0IGE9bmV3IHBwKHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0p'@;
put 'O3JldHVybiBhLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxhLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChsKSxhfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5p'@;
put 'bml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2gobD0+dGhpcy5tYXAuc2V0KGwsdGhpcy5jbG9uZUZyb20ubWFwLmdldChsKSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKGw9Pntzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGE9KCJhIj09PWwub3A/dGhpcy5tYXAu'@;
put 'Z2V0KGwucGFyYW0pOnZvaWQgMCl8fFtdO2EucHVzaChQeChsLnZhbHVlKSksdGhpcy5tYXAuc2V0KGwucGFyYW0sYSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1sLnZhbHVlKXt0aGlzLm1hcC5kZWxldGUobC5wYXJhbSk7YnJlYWt9e2xldCBkPXRoaXMubWFwLmdldChsLnBhcmFtKXx8'@;
put 'W107Y29uc3QgaD1kLmluZGV4T2YoUHgobC52YWx1ZSkpOy0xIT09aCYmZC5zcGxpY2UoaCwxKSxkLmxlbmd0aD4wP3RoaXMubWFwLnNldChsLnBhcmFtLGQpOnRoaXMubWFwLmRlbGV0ZShsLnBhcmFtKX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX1jbGFzcyB2aGV7'@;
put 'Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldChsLGEpe3JldHVybiB0aGlzLm1hcC5zZXQobCxhKSx0aGlzfWdldChsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfHx0aGlzLm1hcC5zZXQobCxsLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQobCl9ZGVsZXRlKGwpe3JldHVy'@;
put 'biB0aGlzLm1hcC5kZWxldGUobCksdGhpc31oYXMobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19ZnVuY3Rpb24gVSQoYyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlv'@;
put 'biBaJChjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBZJChjKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmYyBpbnN0YW5jZW9mIEZvcm1EYXRhfWNsYXNzICRfe2NvbnN0cnVjdG9yKGwsYSxkLGgpe2xldCBmO2lmKHRoaXMudXJsPWEs'@;
put 'dGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uIF9oZShjKXtzd2l0Y2goYyl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpj'@;
put 'YXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8aD8odGhpcy5ib2R5PXZvaWQgMCE9PWQ/ZDpudWxsLGY9aCk6Zj1kLGYmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhZi5yZXBvcnRQcm9ncmVzcyx0aGlz'@;
put 'LndpdGhDcmVkZW50aWFscz0hIWYud2l0aENyZWRlbnRpYWxzLGYucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9Zi5yZXNwb25zZVR5cGUpLGYuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1mLmhlYWRlcnMpLGYuY29udGV4dCYmKHRoaXMuY29udGV4dD1mLmNvbnRleHQpLGYucGFy'@;
put 'YW1zJiYodGhpcy5wYXJhbXM9Zi5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG9oKSx0aGlzLmNvbnRleHR8fCh0aGlzLmNvbnRleHQ9bmV3IHZoZSksdGhpcy5wYXJhbXMpe2NvbnN0IF89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09Xy5sZW5ndGgpdGhp'@;
put 'cy51cmxXaXRoUGFyYW1zPWE7ZWxzZXtjb25zdCBUPWEuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1hKygtMT09PVQ/Ij8iOlQ8YS5sZW5ndGgtMT8iJiI6IiIpK199fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHBwLHRoaXMudXJsV2l0aFBhcmFtcz1hfXNlcmlhbGl6ZUJvZHkoKXty'@;
put 'ZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlUkKHRoaXMuYm9keSl8fFokKHRoaXMuYm9keSl8fFkkKHRoaXMuYm9keSl8fGZ1bmN0aW9uIGJoZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSl8'@;
put 'fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBwcD90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/'@;
put 'SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxZJCh0aGlzLmJvZHkpP251bGw6WiQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpVJCh0aGlzLmJvZHkp'@;
put 'P251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHBwPyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2Yg'@;
put 'dGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUobD17fSl7Y29uc3QgYT1sLm1ldGhvZHx8dGhpcy5tZXRob2QsZD1sLnVybHx8dGhpcy51cmwsaD1sLnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsZj12b2lk'@;
put 'IDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxfPXZvaWQgMCE9PWwud2l0aENyZWRlbnRpYWxzP2wud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLFQ9dm9pZCAwIT09bC5yZXBvcnRQcm9ncmVzcz9sLnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0'@;
put 'IFc9bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsaWU9bC5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IHBlPWwuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT1sLnNldEhlYWRlcnMmJihXPU9iamVjdC5rZXlzKGwuc2V0SGVhZGVycykucmVkdWNlKCh3ZSxFZSk9PndlLnNl'@;
put 'dChFZSxsLnNldEhlYWRlcnNbRWVdKSxXKSksbC5zZXRQYXJhbXMmJihpZT1PYmplY3Qua2V5cyhsLnNldFBhcmFtcykucmVkdWNlKCh3ZSxFZSk9PndlLnNldChFZSxsLnNldFBhcmFtc1tFZV0pLGllKSksbmV3ICRfKGEsZCxmLHtwYXJhbXM6aWUsaGVhZGVyczpXLGNvbnRleHQ6cGUscmVw'@;
put 'b3J0UHJvZ3Jlc3M6VCxyZXNwb25zZVR5cGU6aCx3aXRoQ3JlZGVudGlhbHM6X30pfX12YXIgdDg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TZW50PTBdPSJTZW50IixjW2MuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNl'@;
put 'SGVhZGVyIixjW2MuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsY1tjLlVzZXI9NV09IlVzZXIiLGN9KHQ4fHx7fSk7Y2xhc3MgY1B7Y29uc3RydWN0b3IobCxhPTIwMCxkPSJPSyIpe3RoaXMuaGVhZGVycz1sLmhlYWRl'@;
put 'cnN8fG5ldyBvaCx0aGlzLnN0YXR1cz12b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1sLnN0YXR1c1RleHR8fGQsdGhpcy51cmw9bC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIHVQIGV4dGVuZHMg'@;
put 'Y1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlSGVhZGVyfWNsb25lKGw9e30pe3JldHVybiBuZXcgdVAoe2hlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0'@;
put 'YXR1c1RleHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIG44IGV4dGVuZHMgY1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT1sLmJvZHk/'@;
put 'bC5ib2R5Om51bGx9Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBuOCh7Ym9keTp2b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0'@;
put 'Omwuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBXJCBleHRlbmRzIGNQe2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEs'@;
put 'dGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke2wu'@;
put 'c3RhdHVzfSAke2wuc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9bC5lcnJvcnx8bnVsbH19ZnVuY3Rpb24gZFAoYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVz'@;
put 'czpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHN9fWxldCBoUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5z'@;
put 'dGFuY2VvZiAkXylmPWE7ZWxzZXtsZXQgVyxpZTtXPWguaGVhZGVycyBpbnN0YW5jZW9mIG9oP2guaGVhZGVyczpuZXcgb2goaC5oZWFkZXJzKSxoLnBhcmFtcyYmKGllPWgucGFyYW1zIGluc3RhbmNlb2YgcHA/aC5wYXJhbXM6bmV3IHBwKHtmcm9tT2JqZWN0OmgucGFyYW1zfSkpLGY9bmV3'@;
put 'ICRfKGEsZCx2b2lkIDAhPT1oLmJvZHk/aC5ib2R5Om51bGwse2hlYWRlcnM6Vyxjb250ZXh0OmguY29udGV4dCxwYXJhbXM6aWUscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRo'@;
put 'Q3JlZGVudGlhbHN9KX1jb25zdCBfPVdpKGYpLnBpcGUoVzYoVz0+dGhpcy5oYW5kbGVyLmhhbmRsZShXKSkpO2lmKGEgaW5zdGFuY2VvZiAkX3x8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIF87Y29uc3QgVD1fLnBpcGUoSWEoVz0+VyBpbnN0YW5jZW9mIG44KSk7c3dpdGNoKGgub2Jz'@;
put 'ZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIFQucGlwZShNZShXPT57aWYobnVsbCE9PVcuYm9keSYmIShXLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBp'@;
put 'cyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIFcuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBULnBpcGUoTWUoVz0+e2lmKG51bGwhPT1XLmJvZHkmJiEoVy5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVy'@;
put 'biBXLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gVC5waXBlKE1lKFc9PntpZihudWxsIT09Vy5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIFcuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gVy5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIFQu'@;
put 'cGlwZShNZShXPT5XLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUi'@;
put 'LGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHBwKS5hcHBlbmQoZCwiSlNP'@;
put 'TlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLGRQKGgsZCkpfXBvc3QoYSxk'@;
put 'LGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsZFAoaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsZFAoaCxkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJ4KSl9LGMuXHUwMjc1cHJv'@;
put 'dj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gcSQoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiB3aGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IFNoZT1uZXcgU2koIiIpLHFfPW5ldyBT'@;
put 'aSgiIiksSyQ9bmV3IFNpKCIiKTtmdW5jdGlvbiBNaGUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShGaShTaGUse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodCh3aGUscSQpKTtjb25zdCBkPUZpKHFNKSxoPWQuYWRkKCk7cmV0dXJuIGMobCxhKS5waXBl'@;
put 'KElfKCgpPT5kLnJlbW92ZShoKSkpfX1sZXQgWCQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ4e2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPUZpKHFNKX1oYW5kbGUoYSl7aWYo'@;
put 'bnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdldChxXyksLi4udGhpcy5pbmplY3Rvci5nZXQoSyQsW10pXSkpO3RoaXMuY2hhaW49aC5yZWR1Y2VSaWdodCgoZixfKT0+ZnVuY3Rpb24gQ2hlKGMsbCxhKXtyZXR1cm4oZCxo'@;
put 'KT0+YS5ydW5JbkNvbnRleHQoKCk9PmwoZCxmPT5jKGYsaCkpKX0oZixfLHRoaXMuaW5qZWN0b3IpLHEkKX1jb25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZShoKSkucGlwZShJXygoKT0+dGhpcy5wZW5kaW5n'@;
put 'VGFza3MucmVtb3ZlKGQpKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE94KSxhcihxMCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IEFoZT0vXlwpXF1cfScsP1xuLztsZXQg'@;
put 'USQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnhockZhY3Rvcnk9YX1oYW5kbGUoYSl7aWYoIkpTT05QIj09PWEubWV0aG9kKXRocm93IG5ldyBBcigtMjgwMCwhMSk7Y29uc3QgZD10aGlzLnhockZhY3Rvcnk7cmV0dXJuKGQuXHUwMjc1bG9hZEltcGw/ZWEoZC5cdTAyNzVs'@;
put 'b2FkSW1wbCgpKTpXaShudWxsKSkucGlwZShTYSgoKT0+bmV3IEtlKGY9Pntjb25zdCBfPWQuYnVpbGQoKTtpZihfLm9wZW4oYS5tZXRob2QsYS51cmxXaXRoUGFyYW1zKSxhLndpdGhDcmVkZW50aWFscyYmKF8ud2l0aENyZWRlbnRpYWxzPSEwKSxhLmhlYWRlcnMuZm9yRWFjaCgoZXQseXQp'@;
put 'PT5fLnNldFJlcXVlc3RIZWFkZXIoZXQseXQuam9pbigiLCIpKSksYS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fF8uc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWEuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25z'@;
put 'dCBldD1hLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWV0JiZfLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZXQpfWlmKGEucmVzcG9uc2VUeXBlKXtjb25zdCBldD1hLnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO18ucmVzcG9uc2VUeXBlPSJqc29uIiE9PWV0'@;
put 'P2V0OiJ0ZXh0In1jb25zdCBUPWEuc2VyaWFsaXplQm9keSgpO2xldCBXPW51bGw7Y29uc3QgaWU9KCk9PntpZihudWxsIT09VylyZXR1cm4gVztjb25zdCBldD1fLnN0YXR1c1RleHR8fCJPSyIseXQ9bmV3IG9oKF8uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLEV0PWZ1bmN0aW9uIFRoZShj'@;
put 'KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShfKXx8YS51cmw7cmV0dXJu'@;
put 'IFc9bmV3IHVQKHtoZWFkZXJzOnl0LHN0YXR1czpfLnN0YXR1cyxzdGF0dXNUZXh0OmV0LHVybDpFdH0pLFd9LHBlPSgpPT57bGV0e2hlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6RXQsdXJsOlN0fT1pZSgpLEp0PW51bGw7MjA0IT09eXQmJihKdD10eXBlb2YgXy5yZXNwb25zZT4i'@;
put 'dSI/Xy5yZXNwb25zZVRleHQ6Xy5yZXNwb25zZSksMD09PXl0JiYoeXQ9SnQ/MjAwOjApO2xldCBubj15dD49MjAwJiZ5dDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgSnQpe2NvbnN0IHZuPUp0O0p0PUp0LnJlcGxhY2UoQWhlLCIiKTt0cnl7SnQ9'@;
put 'IiIhPT1KdD9KU09OLnBhcnNlKEp0KTpudWxsfWNhdGNoKE5uKXtKdD12bixubiYmKG5uPSExLEp0PXtlcnJvcjpObix0ZXh0Okp0fSl9fW5uPyhmLm5leHQobmV3IG44KHtib2R5Okp0LGhlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6RXQsdXJsOlN0fHx2b2lkIDB9KSksZi5jb21w'@;
put 'bGV0ZSgpKTpmLmVycm9yKG5ldyBXJCh7ZXJyb3I6SnQsaGVhZGVyczpldCxzdGF0dXM6eXQsc3RhdHVzVGV4dDpFdCx1cmw6U3R8fHZvaWQgMH0pKX0sd2U9ZXQ9Pntjb25zdHt1cmw6eXR9PWllKCksRXQ9bmV3IFckKHtlcnJvcjpldCxzdGF0dXM6Xy5zdGF0dXN8fDAsc3RhdHVzVGV4dDpf'@;
put 'LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6eXR8fHZvaWQgMH0pO2YuZXJyb3IoRXQpfTtsZXQgRWU9ITE7Y29uc3QgWmU9ZXQ9PntFZXx8KGYubmV4dChpZSgpKSxFZT0hMCk7bGV0IHl0PXt0eXBlOnQ4LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmV0LmxvYWRlZH07ZXQubGVu'@;
put 'Z3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSwidGV4dCI9PT1hLnJlc3BvbnNlVHlwZSYmXy5yZXNwb25zZVRleHQmJih5dC5wYXJ0aWFsVGV4dD1fLnJlc3BvbnNlVGV4dCksZi5uZXh0KHl0KX0saXQ9ZXQ9PntsZXQgeXQ9e3R5cGU6dDguVXBsb2FkUHJvZ3Jlc3MsbG9hZGVk'@;
put 'OmV0LmxvYWRlZH07ZXQubGVuZ3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSxmLm5leHQoeXQpfTtyZXR1cm4gXy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixwZSksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsd2UpLF8uYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2Up'@;
put 'LF8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHdlKSxhLnJlcG9ydFByb2dyZXNzJiYoXy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWmUpLG51bGwhPT1UJiZfLnVwbG9hZCYmXy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGl0KSksXy5zZW5kKFQpLGYubmV4dCh7'@;
put 'dHlwZTp0OC5TZW50fSksKCk9PntfLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix3ZSksXy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsd2UpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIscGUpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2UpLGEucmVwb3J0'@;
put 'UHJvZ3Jlc3MmJihfLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixaZSksbnVsbCE9PVQmJl8udXBsb2FkJiZfLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsaXQpKSxfLnJlYWR5U3RhdGUhPT1fLkRPTkUmJl8uYWJvcnQoKX19KSkpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihjRykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGZQPW5ldyBTaSgiWFNSRl9FTkFCTEVEIiksZXE9bmV3IFNpKCJYU1JGX0NPT0tJRV9OQU1FIix7cHJvdmlk'@;
put 'ZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlhTUkYtVE9LRU4ifSksdHE9bmV3IFNpKCJYU1JGX0hFQURFUl9OQU1FIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlgtWFNSRi1UT0tFTiJ9KTtjbGFzcyBucXt9bGV0IExoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo'@;
put 'KXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25z'@;
put 'dCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1YVyhhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWEpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcyksYXIoR3MpLGFyKGVxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gUmhlKGMsbCl7Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFG'@;
put 'aShmUCl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2NvbnN0IGQ9RmkobnEpLmdldFRva2VuKCksaD1GaSh0cSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRl'@;
put 'cnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoaCxkKX0pKSxsKGMpfXZhciBncD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMi'@;
put 'LGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09'@;
put 'IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30oZ3B8fHt9KTtmdW5jdGlvbiBJNShjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIE9oZSguLi5jKXtjb25zdCBsPVtoUCxRJCxYJCx7cHJvdmlkZTpSeCx1c2VF'@;
put 'eGlzdGluZzpYJH0se3Byb3ZpZGU6T3gsdXNlRXhpc3Rpbmc6USR9LHtwcm92aWRlOnFfLHVzZVZhbHVlOlJoZSxtdWx0aTohMH0se3Byb3ZpZGU6ZlAsdXNlVmFsdWU6ITB9LHtwcm92aWRlOm5xLHVzZUNsYXNzOkxoZX1dO2Zvcihjb25zdCBhIG9mIGMpbC5wdXNoKC4uLmEuXHUwMjc1cHJv'@;
put 'dmlkZXJzKTtyZXR1cm4gZnVuY3Rpb24gaXYoYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpjfX0obCl9Y29uc3QgcnE9bmV3IFNpKCJMRUdBQ1lfSU5URVJDRVBUT1JfRk4iKTtsZXQgRmhlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbT2hlKEk1KGdwLkxlZ2FjeUludGVyY2VwdG9ycyxbe3Byb3ZpZGU6cnEsdXNlRmFjdG9yeTpNaGV9LHtwcm92aWRlOnFfLHVzZUV4aXN0aW5nOnJxLG11bHRpOiEwfV0pKV19KSxjfSko'@;
put 'KSxpcT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3Rv'@;
put 'cmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1n'@;
put 'ZXRGaWxlRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJs'@;
put 'fS9mb2xkZXI/X2ZvbGRlclBhdGg9JHthfWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4g'@;
put 'bmV3IFByb21pc2UoKGQsaCk9Pnt0aGlzLmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBUPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChUKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2Yg'@;
put 'YS5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoaFApLGFyKGU4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj'@;
put 'LHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb2E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnVzZXJTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc2pzU2VydmljZT1mLHRoaXMubG9nZ2VyU2Vy'@;
put 'dmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBFcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhqJCgpKSx0aGlzLmFwcExv'@;
put 'Y0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBUZSghMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IFRlKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygp'@;
put 'LHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNBZGFwdGVyPW5ldyhqJCgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgWmMuRC5TYXNWaXlhOnRo'@;
put 'aXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBaYy5ELlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIFpjLkQuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95KCl9IlJlZGly'@;
put 'ZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5z'@;
put 'aG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxkKSxuZXcgUHJv'@;
put 'bWlzZSgoXyxUKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihXPT57aWYoITE9PT1XLmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxUKCExKSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmVy5N'@;
put 'Rl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpXLk1GX0dFVFVTRVJ9KSxXLlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoVy5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNp'@;
put 'dGVJZCgpLmluY2x1ZGVzKFcuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5lbWl0KFcuU1lTU0lURSkpKSw0MDQ9PT1XLnN0YXR1cyYmVCh7TUVTU0FHRTpXLmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSksdHlwZW9mIFcuc2FzanNBYm9ydDwidSIpe2Nv'@;
put 'bnN0IGllPVcscGU9aWUuc2FzanNBYm9ydFswXS5NU0csd2U9aWUuc2FzanNBYm9ydFswXS5NQUM7aWYocGUuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2Fk'@;
put 'ZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBUKHtlcnJvcjpwZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIikscGUse1NZU1dBUk5JTkdU'@;
put 'RVhUOmllLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDppZS5TWVNFUlJPUlRFWFQsTUFDOndlfSksVCh7ZXJyb3I6cGV9KX1fKFcpfSxXPT57aWYoY29uc29sZS5lcnJvcihXKSxXLmVycm9yKXtsZXQgcGUsaWU9Vy5lcnJvci5tZXNzYWdlO1cuZXJyb3IuZGV0YWlscyYmVy5lcnJvci5k'@;
put 'ZXRhaWxzLmxvZyYmKHBlPVcuZXJyb3IuZGV0YWlscy5sb2cpLCghaWV8fGllLnRyaW0oKS5sZW5ndGg8MSkmJihpZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLGllLHtM'@;
put 'T0c6cGV9LCJSZXF1ZXN0IGVycm9yIiksVCh7ZXJyb3I6aWV9KX1UKFcpfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIudXBsb2FkRmlsZShhLGQsaCl9bG9naW4oYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBmPWguZ2V0'@;
put 'U2VydmVyVHlwZSgpPT09WmMuRC5TYXNqcz8iY2xpZW50SUQxIjp2b2lkIDA7cmV0dXJuIGguc2FzanNBZGFwdGVyLmxvZ0luKGEsZCxmKS50aGVuKF89PihfLmlzTG9nZ2VkSW4mJihoLnVzZXJTZXJ2aWNlLnVzZXI9e3VzZXJuYW1lOl8udXNlck5hbWV9LGguYXBwTG9jQ2hlY2tQZW5kaW5n'@;
put 'JiYoaC5jaGVja1ZpeWFEZXBsb3koaC5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIiksaC5hcHBMb2NDaGVja1BlbmRpbmc9ITEpKSxoLnNob3VsZExvZ2luLm5leHQoIV8uaXNMb2dnZWRJbiksXy5pc0xvZ2dlZEluKSxfPT4oY29uc29sZS5lcnJvcihfKSxoLnNob3VsZExvZ2luLm5l'@;
put 'eHQoITApLCExKSkuY2F0Y2goXz0+KDQwMz09PV8mJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgaG9zdCIpLCExKSl9KSgpfWdldExpY2Vuc2VTaXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVf'@;
put 'aWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJD'@;
put 'b250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRl'@;
put 'ci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJyb3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKF89PnshMT09'@;
put 'PV8mJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJuKCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVw'@;
put 'RGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZmkoZnVuY3Rpb24qKGgsZil7'@;
put 'YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFsKGZpKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihfPT57XyYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKF8pKX0pLmNhdGNoKF89PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJ'@;
put 'bnRlcnZhbCksZihfKX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2Uo'@;
put 'KGQsaCk9Pntjb25zdCBfPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShfKS5zdWJzY3JpYmUoVD0+e1QuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITAp'@;
put 'fSxUPT57VC5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj0hMTtmPXR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiP3lpZWxk'@;
put 'IGQuYXBwTG9jQ2hlY2soYSk6eWllbGQgZC5hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSksZiYmZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKX0pKCl9YXBwTG9jQ2hlY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaD1maShm'@;
put 'dW5jdGlvbiooZixfKXtsZXQgVyxUPSExO3RyeXtXPXlpZWxkIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcihhKX1jYXRjaChpZSl7IkxvZ2luUmVxdWlyZWRFcnJvciI9PT1pZS5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoITEpKTpUPSEw'@;
put 'fWlmKFQpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGQuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGYoITEpO2YoITApfSk7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKGYsXyl7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCBfPSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRo'@;
put 'PSR7YX1gKS50aGVuKFQ9Pig0MDQ9PT1ULnN0YXR1cyYmKF89ITApLFQudGV4dCgpKSkudGhlbihUPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoVCkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKF8pcmV0dXJuIGNvbnNvbGUu'@;
put 'd2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2xldCBXPW51bGw7dHJ5e1c9SlNPTi5w'@;
put 'YXJzZShUKX1jYXRjaHt9aWYoVyYmVy5odHRwU3RhdHVzQ29kZSYmNDA0PT09Vy5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERh'@;
put 'dGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7ZCghMCl9fSkuY2F0Y2goVD0+e2QoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhp'@;
put 'cy5zYXNqc0FkYXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1'@;
put 'ZXN0cygpfXNldERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0'@;
put 'dXJuIGEuc2VydmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKGEuc2VydmVyVHlwZSl7Y2FzZSBaYy5ELlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2Fz'@;
put 'ZSBaYy5ELlNhczk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBaYy5ELlNhc2pzOnJldHVybiBhLnBhdGhTQVNKU319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGU4KSxhcihhUCksYXIodmwpLGFyKGlxKSxhcih3MCksYXIoRHMpKX0sYy5cdTAy'@;
put 'NzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx3MD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5k'@;
put 'ZWJ1ZyYmKGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2Yg'@;
put 'T2JqZWN0LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KG9hKTt0aGlzLnNhc2pzQ29u'@;
put 'ZmlnPWEuZ2V0U2FzanNDb25maWcoKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3Qgb3E9ZnVu'@;
put 'Y3Rpb24gWmhlKGMsbCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxIeD1mdW5jdGlvbiBZaGUoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihvcShjW2FdWzBdLGwpKXJldHVybiBhO3JldHVybi0xfTt2YXIgR2hlPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gcjgo'@;
put 'Yyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19cjgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHpoZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LHI4LnByb3RvdHlw'@;
put 'ZS5kZWxldGU9ZnVuY3Rpb24gJGhlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1IeChsLGMpO3JldHVybiEoYTwwfHwoYT09bC5sZW5ndGgtMT9sLnBvcCgpOkdoZS5jYWxsKGwsYSwxKSwtLXRoaXMuc2l6ZSwwKSl9LHI4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gS2hlKGMpe3ZhciBsPXRo'@;
put 'aXMuX19kYXRhX18sYT1IeChsLGMpO3JldHVybiBhPDA/dm9pZCAwOmxbYV1bMV19LHI4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSmhlKGMpe3JldHVybiBIeCh0aGlzLl9fZGF0YV9fLGMpPi0xfSxyOC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGVmZShjLGwpe3ZhciBhPXRoaXMuX19kYXRh'@;
put 'X18sZD1IeChhLGMpO3JldHVybiBkPDA/KCsrdGhpcy5zaXplLGEucHVzaChbYyxsXSkpOmFbZF1bMV09bCx0aGlzfTtjb25zdCBOeD1yOCxzcT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIGRmZT0ib2JqZWN0Ij09'@;
put 'dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHNoPXNxfHxkZmV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksbXA9c2guU3ltYm9sO3ZhciBhcT1PYmplY3QucHJvdG90eXBlLHBmZT1hcS5oYXNPd25Qcm9wZXJ0eSxnZmU9YXEudG9TdHJpbmcs'@;
put 'S189bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBiZmU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgbHE9bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO2NvbnN0IGk4PWZ1bmN0aW9uIE1mZShjKXtyZXR1cm4gbnVsbD09Yz92b2lkIDA9PT1jPyJbb2JqZWN0IFVuZGVmaW5lZF0i'@;
put 'OiJbb2JqZWN0IE51bGxdIjpscSYmbHEgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIG1mZShjKXt2YXIgbD1wZmUuY2FsbChjLEtfKSxhPWNbS19dO3RyeXtjW0tfXT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPWdmZS5jYWxsKGMpO3JldHVybiBkJiYobD9jW0tfXT1hOmRlbGV0ZSBjW0tf'@;
put 'XSksaH0oYyk6ZnVuY3Rpb24geWZlKGMpe3JldHVybiBiZmUuY2FsbChjKX0oYyl9LFhfPWZ1bmN0aW9uIHhmZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0sY3E9ZnVuY3Rpb24gRGZlKGMpe2lmKCFYXyhjKSlyZXR1cm4h'@;
put 'MTt2YXIgbD1pOChjKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IFByb3h5XSI9PWx9O3ZhciBjLElmZT1zaFsiX19jb3JlLWpzX3NoYXJlZF9fIl0sdXE9'@;
put 'KGM9L1teLl0rJC8uZXhlYyhJZmUmJklmZS5rZXlzJiZJZmUua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2M6IiI7dmFyIFBmZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgTDU9ZnVuY3Rpb24gRmZlKGMpe2lmKG51bGwhPWMpe3RyeXtyZXR1cm4gUGZl'@;
put 'LmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgTmZlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFVmZT1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy'@;
put 'dHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2NvbnN0IFlmZT1mdW5jdGlvbiBaZmUoYyl7cmV0dXJuISghWF8oYyl8fGZ1'@;
put 'bmN0aW9uIExmZShjKXtyZXR1cm4hIXVxJiZ1cSBpbiBjfShjKSkmJihjcShjKT9VZmU6TmZlKS50ZXN0KEw1KGMpKX0sUjU9ZnVuY3Rpb24gJGZlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gV2ZlKGMsbCl7cmV0dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gWWZlKGEpP2E6dm9pZCAwfSxKXz1SNShz'@;
put 'aCwiTWFwIiksUV89UjUoT2JqZWN0LCJjcmVhdGUiKTt2YXIgcjNlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGEzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG84KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlz'@;
put 'LmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fW84LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBYZmUoKXt0aGlzLl9fZGF0YV9fPVFfP1FfKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxvOC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFFmZShjKXt2YXIg'@;
put 'bD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sbzgucHJvdG90eXBlLmdldD1mdW5jdGlvbiBpM2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztpZihRXyl7dmFyIGE9bFtjXTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmlu'@;
put 'ZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiByM2UuY2FsbChsLGMpP2xbY106dm9pZCAwfSxvOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGwzZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3JldHVybiBRXz92b2lkIDAhPT1sW2NdOmEzZS5jYWxsKGwsYyl9LG84LnByb3RvdHlwZS5zZXQ9ZnVu'@;
put 'Y3Rpb24gZDNlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT1RXyYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6bCx0aGlzfTtjb25zdCBkcT1vOCxWeD1mdW5jdGlvbiB2M2UoYyxsKXt2YXIgYT1j'@;
put 'Ll9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBnM2UoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuInN0cmluZyI9PWx8fCJudW1iZXIiPT1sfHwic3ltYm9sIj09bHx8ImJvb2xlYW4iPT1sPyJfX3Byb3RvX18iIT09YzpudWxsPT09Y30obCk/YVsic3RyaW5nIj09dHlwZW9mIGw/InN0cmluZyI6'@;
put 'Imhhc2giXTphLm1hcH07ZnVuY3Rpb24gczgoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19czgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGYzZSgpe3RoaXMuc2l6ZT0wLHRo'@;
put 'aXMuX19kYXRhX189e2hhc2g6bmV3IGRxLG1hcDpuZXcoSl98fE54KSxzdHJpbmc6bmV3IGRxfX0sczgucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBfM2UoYyl7dmFyIGw9VngodGhpcyxjKS5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sczgucHJvdG90eXBlLmdldD1m'@;
put 'dW5jdGlvbiB5M2UoYyl7cmV0dXJuIFZ4KHRoaXMsYykuZ2V0KGMpfSxzOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIEMzZShjKXtyZXR1cm4gVngodGhpcyxjKS5oYXMoYyl9LHM4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTTNlKGMsbCl7dmFyIGE9VngodGhpcyxjKSxkPWEuc2l6ZTtyZXR1'@;
put 'cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3QgZ1A9czg7ZnVuY3Rpb24gYTgoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgTngoYyk7dGhpcy5zaXplPWwuc2l6ZX1hOC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gbmZlKCl7dGhpcy5fX2RhdGFf'@;
put 'Xz1uZXcgTngsdGhpcy5zaXplPTB9LGE4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gaWZlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplPWwuc2l6ZSxhfSxhOC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIHNmZShjKXtyZXR1cm4gdGhpcy5f'@;
put 'X2RhdGFfXy5nZXQoYyl9LGE4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gbGZlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sYTgucHJvdG90eXBlLnNldD1mdW5jdGlvbiBrM2UoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiBOeCl7dmFyIGQ9YS5fX2Rh'@;
put 'dGFfXztpZighSl98fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IGdQKGQpfXJldHVybiBhLnNldChjLGwpLHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29uc3QgVDNlPWE4O3ZhciBMM2U9ZnVuY3Rp'@;
put 'b24oKXt0cnl7dmFyIGM9UjUoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgaHE9TDNlLGZxPWZ1bmN0aW9uIFIzZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJmhxP2hxKGMsbCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6'@;
put 'ITAsdmFsdWU6YSx3cml0YWJsZTohMH0pOmNbbF09YX07dmFyIFAzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHBxPWZ1bmN0aW9uIEYzZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIVAzZS5jYWxsKGMsbCl8fCFvcShkLGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiZm'@;
put 'cShjLGwsYSl9LEJ4PWZ1bmN0aW9uIEgzZShjLGwsYSxkKXt2YXIgaD0hYTthfHwoYT17fSk7Zm9yKHZhciBmPS0xLF89bC5sZW5ndGg7KytmPF87KXt2YXIgVD1sW2ZdLFc9ZD9kKGFbVF0sY1tUXSxULGEsYyk6dm9pZCAwO3ZvaWQgMD09PVcmJihXPWNbVF0pLGg/ZnEoYSxULFcpOnBxKGEs'@;
put 'VCxXKX1yZXR1cm4gYX0sbDg9ZnVuY3Rpb24gQjNlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LGdxPWZ1bmN0aW9uIHozZShjKXtyZXR1cm4gbDgoYykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1pOChjKX07dmFyIG1xPU9iamVjdC5wcm90b3R5cGUsVTNlPW1xLmhh'@;
put 'c093blByb3BlcnR5LFozZT1tcS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxZM2U9Z3EoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9ncTpmdW5jdGlvbihjKXtyZXR1cm4gbDgoYykmJlUzZS5jYWxsKGMsImNhbGxlZSIpJiYhWjNlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0IFczZT1Z'@;
put 'M2UsYzg9QXJyYXkuaXNBcnJheTt2YXIgdnE9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxfcT12cSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGJxPV9xJiZfcS5l'@;
put 'eHBvcnRzPT09dnE/c2guQnVmZmVyOnZvaWQgMDtjb25zdCB5cT0oYnE/YnEuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24gJDNlKCl7cmV0dXJuITF9O3ZhciBlcGU9L14oPzowfFsxLTldXGQqKSQvO2NvbnN0IG5wZT1mdW5jdGlvbiB0cGUoYyxsKXt2YXIgYT10eXBlb2YgYztyZXR1cm4h'@;
put 'IShsPWw/PzkwMDcxOTkyNTQ3NDA5OTEpJiYoIm51bWJlciI9PWF8fCJzeW1ib2wiIT1hJiZlcGUudGVzdChjKSkmJmM+LTEmJmMlMT09MCYmYzxsfSx3cT1mdW5jdGlvbiBpcGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9'@;
put 'O3ZhciBubD17fTtubFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09bmxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW5sWyJbb2JqZWN0IEludDhBcnJheV0iXT1ubFsiW29iamVjdCBJbnQxNkFycmF5XSJdPW5sWyJbb2JqZWN0IEludDMyQXJyYXldIl09bmxbIltvYmplY3QgVWludDhBcnJh'@;
put 'eV0iXT1ubFsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxubFsiW29iamVjdCBBcmd1bWVudHNdIl09bmxbIltvYmplY3QgQXJyYXldIl09bmxbIltvYmplY3QgQXJyYXlCdWZmZXJd'@;
put 'Il09bmxbIltvYmplY3QgQm9vbGVhbl0iXT1ubFsiW29iamVjdCBEYXRhVmlld10iXT1ubFsiW29iamVjdCBEYXRlXSJdPW5sWyJbb2JqZWN0IEVycm9yXSJdPW5sWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW5sWyJbb2JqZWN0IE1hcF0iXT1ubFsiW29iamVjdCBOdW1iZXJdIl09bmxbIltvYmpl'@;
put 'Y3QgT2JqZWN0XSJdPW5sWyJbb2JqZWN0IFJlZ0V4cF0iXT1ubFsiW29iamVjdCBTZXRdIl09bmxbIltvYmplY3QgU3RyaW5nXSJdPW5sWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgbVA9ZnVuY3Rpb24gSXBlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBD'@;
put 'cT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGViPUNxJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsdlA9ZWImJmViLmV4cG9ydHM9PT1DcSYmc3EucHJvY2Vzcztj'@;
put 'b25zdCB1OD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZWImJmViLnJlcXVpcmUmJmViLnJlcXVpcmUoInV0aWwiKS50eXBlc3x8dlAmJnZQLmJpbmRpbmcmJnZQLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBTcT11OCYmdTguaXNUeXBlZEFycmF5O2NvbnN0IFBwZT1TcT9tUChTcSk6'@;
put 'ZnVuY3Rpb24gVHBlKGMpe3JldHVybiBsOChjKSYmd3EoYy5sZW5ndGgpJiYhIW5sW2k4KGMpXX07dmFyIEhwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IE1xPWZ1bmN0aW9uIE5wZShjLGwpe3ZhciBhPWM4KGMpLGQ9IWEmJlczZShjKSxoPSFhJiYhZCYmeXEoYyks'@;
put 'Zj0hYSYmIWQmJiFoJiZQcGUoYyksXz1hfHxkfHxofHxmLFQ9Xz9mdW5jdGlvbiBOM2UoYyxsKXtmb3IodmFyIGE9LTEsZD1BcnJheShjKTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBkfShjLmxlbmd0aCxTdHJpbmcpOltdLFc9VC5sZW5ndGg7Zm9yKHZhciBpZSBpbiBjKShsfHxIcGUuY2Fs'@;
put 'bChjLGllKSkmJighX3x8ISgibGVuZ3RoIj09aWV8fGgmJigib2Zmc2V0Ij09aWV8fCJwYXJlbnQiPT1pZSl8fGYmJigiYnVmZmVyIj09aWV8fCJieXRlTGVuZ3RoIj09aWV8fCJieXRlT2Zmc2V0Ij09aWUpfHxucGUoaWUsVykpKSYmVC5wdXNoKGllKTtyZXR1cm4gVH07dmFyIFZwZT1PYmpl'@;
put 'Y3QucHJvdG90eXBlO2NvbnN0IF9QPWZ1bmN0aW9uIEJwZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8VnBlKX0seHE9ZnVuY3Rpb24ganBlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwo'@;
put 'YSkpfX0sVXBlPXhxKE9iamVjdC5rZXlzLE9iamVjdCk7dmFyIFlwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IEVxPWZ1bmN0aW9uICRwZShjKXtyZXR1cm4gbnVsbCE9YyYmd3EoYy5sZW5ndGgpJiYhY3EoYyl9LGJQPWZ1bmN0aW9uIHFwZShjKXtyZXR1cm4gRXEo'@;
put 'Yyk/TXEoYyk6ZnVuY3Rpb24gV3BlKGMpe2lmKCFfUChjKSlyZXR1cm4gVXBlKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBPYmplY3QoYykpWXBlLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9yIiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIHQ0ZT1PYmplY3QucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5O2NvbnN0IHI0ZT1mdW5jdGlvbiBuNGUoYyl7aWYoIVhfKGMpKXJldHVybiBmdW5jdGlvbiBKcGUoYyl7dmFyIGw9W107aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9X1AoYyksYT1bXTtmb3IodmFyIGQg'@;
put 'aW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IXQ0ZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LHlQPWZ1bmN0aW9uIGk0ZShjKXtyZXR1cm4gRXEoYyk/TXEoYywhMCk6cjRlKGMpfTt2YXIga3E9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5u'@;
put 'b2RlVHlwZSYmZXhwb3J0cyxBcT1rcSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFRxPUFxJiZBcS5leHBvcnRzPT09a3E/c2guQnVmZmVyOnZvaWQgMCxEcT1UcT9UcS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgSXE9ZnVuY3Rp'@;
put 'b24gcDRlKCl7cmV0dXJuW119O3ZhciBtNGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxMcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHY0ZT1McT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24gaDRlKGMsbCl7'@;
put 'Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIF89Y1thXTtsKF8sYSxjKSYmKGZbaCsrXT1fKX1yZXR1cm4gZn0oTHEoYyksZnVuY3Rpb24obCl7cmV0dXJuIG00ZS5jYWxsKGMsbCl9KSl9OklxO2NvbnN0IHdQPXY0ZSxScT1mdW5jdGlvbiB5'@;
put 'NGUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2grYV09bFthXTtyZXR1cm4gY30sT3E9eHEoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIFM0ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIg'@;
put 'bD1bXTtjOylScShsLHdQKGMpKSxjPU9xKGMpO3JldHVybiBsfTpJcTtjb25zdCBQcT1TNGUsRnE9ZnVuY3Rpb24gRTRlKGMsbCxhKXt2YXIgZD1sKGMpO3JldHVybiBjOChjKT9kOlJxKGQsYShjKSl9LEE0ZT1mdW5jdGlvbiBrNGUoYyl7cmV0dXJuIEZxKGMsYlAsd1ApfSxENGU9ZnVuY3Rp'@;
put 'b24gVDRlKGMpe3JldHVybiBGcShjLHlQLFBxKX0sQ1A9UjUoc2gsIkRhdGFWaWV3IiksU1A9UjUoc2gsIlByb21pc2UiKSxNUD1SNShzaCwiU2V0IikseFA9UjUoc2gsIldlYWtNYXAiKTt2YXIgSHE9IltvYmplY3QgTWFwXSIsTnE9IltvYmplY3QgUHJvbWlzZV0iLFZxPSJbb2JqZWN0IFNl'@;
put 'dF0iLEJxPSJbb2JqZWN0IFdlYWtNYXBdIixqcT0iW29iamVjdCBEYXRhVmlld10iLEY0ZT1MNShDUCksSDRlPUw1KEpfKSxONGU9TDUoU1ApLFY0ZT1MNShNUCksQjRlPUw1KHhQKSxPNT1pODsoQ1AmJk81KG5ldyBDUChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9anF8fEpfJiZPNShuZXcgSl8p'@;
put 'IT1IcXx8U1AmJk81KFNQLnJlc29sdmUoKSkhPU5xfHxNUCYmTzUobmV3IE1QKSE9VnF8fHhQJiZPNShuZXcgeFApIT1CcSkmJihPNT1mdW5jdGlvbihjKXt2YXIgbD1pOChjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT9MNShhKToiIjtpZihkKXN3'@;
put 'aXRjaChkKXtjYXNlIEY0ZTpyZXR1cm4ganE7Y2FzZSBINGU6cmV0dXJuIEhxO2Nhc2UgTjRlOnJldHVybiBOcTtjYXNlIFY0ZTpyZXR1cm4gVnE7Y2FzZSBCNGU6cmV0dXJuIEJxfXJldHVybiBsfSk7Y29uc3QgRVA9TzU7dmFyIHo0ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5'@;
put 'O2NvbnN0IHpxPXNoLlVpbnQ4QXJyYXksa1A9ZnVuY3Rpb24gVzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyB6cShsKS5zZXQobmV3IHpxKGMpKSxsfTt2YXIgcTRlPS9cdyokLzt2YXIgVXE9bXA/bXAucHJvdG90eXBlOnZvaWQgMCxacT1V'@;
put 'cT9VcS52YWx1ZU9mOnZvaWQgMDtjb25zdCBDNWU9ZnVuY3Rpb24gdzVlKGMsbCxhKXt2YXIgZD1jLmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4ga1AoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJl'@;
put 'dHVybiBuZXcgZCgrYyk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIEc0ZShjLGwpe3ZhciBhPWw/a1AoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVj'@;
put 'dCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50'@;
put 'OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiBlNWUoYyxsKXt2YXIgYT1sP2tQKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQs'@;
put 'Yy5sZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBNYXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24g'@;
put 'SzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuc291cmNlLHE0ZS5leGVjKGMpKTtyZXR1cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBKNGUoYyl7cmV0dXJuIFpxP09iamVjdChacS5jYWxsKGMpKTp7'@;
put 'fX0oYyl9fTt2YXIgWXE9T2JqZWN0LmNyZWF0ZSxTNWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighWF8obCkpcmV0dXJue307aWYoWXEpcmV0dXJuIFlxKGwpO2MucHJvdG90eXBlPWw7dmFyIGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQg'@;
put 'MCxhfX0oKTtjb25zdCBNNWU9UzVlO3ZhciBXcT11OCYmdTguaXNNYXA7Y29uc3QgSTVlPVdxP21QKFdxKTpmdW5jdGlvbiBBNWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBNYXBdIj09RVAoYyl9O3ZhciBHcT11OCYmdTguaXNTZXQ7Y29uc3QgRjVlPUdxP21QKEdxKTpmdW5jdGlvbiBS'@;
put 'NWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBTZXRdIj09RVAoYyl9O3ZhciAkcT0iW29iamVjdCBBcmd1bWVudHNdIixxcT0iW29iamVjdCBGdW5jdGlvbl0iLEtxPSJbb2JqZWN0IE9iamVjdF0iLFlhPXt9O1lhWyRxXT1ZYVsiW29iamVjdCBBcnJheV0iXT1ZYVsiW29iamVjdCBBcnJh'@;
put 'eUJ1ZmZlcl0iXT1ZYVsiW29iamVjdCBEYXRhVmlld10iXT1ZYVsiW29iamVjdCBCb29sZWFuXSJdPVlhWyJbb2JqZWN0IERhdGVdIl09WWFbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQ4QXJyYXldIl09WWFbIltv'@;
put 'YmplY3QgSW50MTZBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IE1hcF0iXT1ZYVsiW29iamVjdCBOdW1iZXJdIl09WWFbS3FdPVlhWyJbb2JqZWN0IFJlZ0V4cF0iXT1ZYVsiW29iamVjdCBTZXRdIl09WWFbIltvYmplY3QgU3RyaW5nXSJdPVlhWyJbb2Jq'@;
put 'ZWN0IFN5bWJvbF0iXT1ZYVsiW29iamVjdCBVaW50OEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLFlhWyJbb2JqZWN0IEVycm9yXSJdPVlhW3FxXT1ZYVsiW29i'@;
put 'amVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IGNnZT1mdW5jdGlvbiBqeChjLGwsYSxkLGgsZil7dmFyIF8sVD0xJmwsVz0yJmwsaWU9NCZsO2lmKGEmJihfPWg/YShjLGQsaCxmKTphKGMpKSx2b2lkIDAhPT1fKXJldHVybiBfO2lmKCFYXyhjKSlyZXR1cm4gYzt2YXIgcGU9YzgoYyk7aWYocGUp'@;
put 'e2lmKF89ZnVuY3Rpb24gVTRlKGMpe3ZhciBsPWMubGVuZ3RoLGE9bmV3IGMuY29uc3RydWN0b3IobCk7cmV0dXJuIGwmJiJzdHJpbmciPT10eXBlb2YgY1swXSYmejRlLmNhbGwoYywiaW5kZXgiKSYmKGEuaW5kZXg9Yy5pbmRleCxhLmlucHV0PWMuaW5wdXQpLGF9KGMpLCFUKXJldHVybiBm'@;
put 'dW5jdGlvbiB1NGUoYyxsKXt2YXIgYT0tMSxkPWMubGVuZ3RoO2ZvcihsfHwobD1BcnJheShkKSk7KythPGQ7KWxbYV09Y1thXTtyZXR1cm4gbH0oYyxfKX1lbHNle3ZhciB3ZT1FUChjKSxFZT13ZT09cXF8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXdlO2lmKHlxKGMpKXJldHVy'@;
put 'biBmdW5jdGlvbiBsNGUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNlKCk7dmFyIGE9Yy5sZW5ndGgsZD1EcT9EcShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsVCk7aWYod2U9PUtxfHx3ZT09JHF8fEVlJiYhaCl7aWYoXz1XfHxFZT97fTpmdW5jdGlvbiB4'@;
put 'NWUoYyl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGMuY29uc3RydWN0b3J8fF9QKGMpP3t9Ok01ZShPcShjKSl9KGMpLCFUKXJldHVybiBXP2Z1bmN0aW9uIE00ZShjLGwpe3JldHVybiBCeChjLFBxKGMpLGwpfShjLGZ1bmN0aW9uIG80ZShjLGwpe3JldHVybiBjJiZCeChsLHlQKGwpLGMp'@;
put 'fShfLGMpKTpmdW5jdGlvbiBfNGUoYyxsKXtyZXR1cm4gQngoYyx3UChjKSxsKX0oYyxmdW5jdGlvbiBLcGUoYyxsKXtyZXR1cm4gYyYmQngobCxiUChsKSxjKX0oXyxjKSl9ZWxzZXtpZighWWFbd2VdKXJldHVybiBoP2M6e307Xz1DNWUoYyx3ZSxUKX19Znx8KGY9bmV3IFQzZSk7dmFyIFpl'@;
put 'PWYuZ2V0KGMpO2lmKFplKXJldHVybiBaZTtmLnNldChjLF8pLEY1ZShjKT9jLmZvckVhY2goZnVuY3Rpb24oeXQpe18uYWRkKGp4KHl0LGwsYSx5dCxjLGYpKX0pOkk1ZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKHl0LEV0KXtfLnNldChFdCxqeCh5dCxsLGEsRXQsYyxmKSl9KTt2YXIgZXQ9'@;
put 'cGU/dm9pZCAwOihpZT9XP0Q0ZTpBNGU6Vz95UDpiUCkoYyk7cmV0dXJuIGZ1bmN0aW9uIEQzZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0sYSxjKTspO30oZXR8fGMsZnVuY3Rpb24oeXQsRXQpe2V0JiYoeXQ9Y1tFdD15dF0pLHBx'@;
put 'KF8sRXQsangoeXQsbCxhLEV0LGMsZikpfSksX30seng9ZnVuY3Rpb24gaGdlKGMpe3JldHVybiBjZ2UoYyw1KX07dmFyIGZnZT1GKDkyODczKTtsZXQgVGM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5sb2FkTW9yZUNvdW50PTUwLHRo'@;
put 'aXMuaXNNaWNyb3NvZnQ9ITEsdGhpcy5pc01pY3Jvc29mdD10aGlzLmlzSUVvckVER0UoKSxjb25zb2xlLmxvZygiSXMgSUUgb3IgRWRnZT8iLHRoaXMuaXNNaWNyb3NvZnQpfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9YSBpbnN0YW5jZW9mIERhdGU/'@;
put 'YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRDKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IFc9ZiszMTU2MTkyZTU7c3dpdGNoKGQpe2Nhc2Ui'@;
put 'ZGF5cyI6e2xldCBpZT1XLzg2NGU1O3JldHVybiBpZT1NYXRoLmFicyhpZSksaWU9TWF0aC5mbG9vcihpZSksaWV9Y2FzZSJzZWNvbmRzIjpyZXR1cm4gVy8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBh'@;
put 'cnNlRmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBUPTFlMyphLTMxNTYxOTJlNTtyZXR1cm4gVCs9NjAqbmV3IERhdGUoVCkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoVCl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25GaWx0ZXIoYSxkKXts'@;
put 'ZXQgaD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixmPWQuc3BsaXQoIi4iKVswXSxfPWQuc3BsaXQoIi4iKVsxXSxUPWYrIkFsbCI7YVtmXSYmKGFbVF18fChhW1RdPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbVF0pLGgubGVuZ3RoPjAmJihh'@;
put 'W2ZdPWFbZl0uZmlsdGVyKF8/Vz0+V1tfXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6Vz0+Vy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9yRWFjaChmPT57Zlto'@;
put 'XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3JvdW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJpZXMoYSkpfWRpc3Bs'@;
put 'YXlMaWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMrPXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3duTGlicmFyaWVzO2gr'@;
put 'KylhW2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLGEuZm9y'@;
put 'RWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0hMCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdyb3VuZCYmZGVsZXRl'@;
put 'IGQuaW5Gb3JlZ3JvdW5kfSl9aXNJRW9yRURHRSgpe3ZhciBhPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBhLmluZGV4T2YoIk1TSUUgIik+MHx8KGEuaW5kZXhPZigiVHJpZGVudC8iKT4wPyhhLmluZGV4T2YoInJ2OiIpLCEwKTphLmluZGV4T2YoIkVkZ2UvIik+MCl9Y29u'@;
put 'dmVydE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihhPXRoaXMuZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhLmxlbmd0'@;
put 'aDwyPyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITApe2NvbnN0IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgXyBvZiBkKWRlbGV0ZSBmW19dO3JldHVybiBmZ2UoSlNPTi5zdHJpbmdpZnkoZikpLnRvU3RyaW5nKCl9ZG93bmxvYWRUZXh0RmlsZShhLGQpe2NvbnN0'@;
put 'IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2guc2V0QXR0cmlidXRlKCJocmVmIiwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoZCkpLGguc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYSsiLnR4dCIpLGguc3R5bGUuZGlzcGxheT0ibm9u'@;
put 'ZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxoLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX1jb252ZXJ0QXJyYXlWYWx1ZXMoYSxkKXtpZihhLmxlbmd0aDwxKXJldHVybltdO3N3aXRjaChkKXtjYXNlIm51bWJlciI6cmV0dXJuIGEubWFwKGg9PjEqaCk7Y2Fz'@;
put 'ZSJzdHJpbmciOnJldHVybiBhLnRvU3RyaW5nKCkuc3BsaXQoIiwiKX19ZGVib3VuY2VDYWxsKGEsZCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KGQsYSl9ZGVlcENsb25lKGEpe3JldHVybiB6eChhKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksQzA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5sb2dn'@;
put 'ZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlz'@;
put 'Ll9saWNlbmNlU3RhdGU9c1AsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19hbGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2lu'@;
put 'X2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0'@;
put 'aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6S28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVf'@;
put 'aWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcgVGUobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgVGUoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgVGUoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBUZSghMSksdGhpcy5s'@;
put 'aWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgVGUobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVyPW5ldyBUZSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgVGUobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IFRlKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IFRlKHRoaXMuX2xp'@;
put 'Y2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKFc9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgaWU9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3Nt'@;
put 'YXRjaCZtaXNzbWF0Y2hJZD0ke1d9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChpZSksdGhpcy5kZWFjdGl2YXRlQXBwKGllKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGlj'@;
put 'ZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVz'@;
put 'KGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3QgXz0nRXJyb3IgZ2V0dGluZyAi'@;
put 'R2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29sZS5lcnJvcihfKSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShf'@;
put 'KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2Vu'@;
put 'dCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tF'@;
put 'WT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZBVElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXt5'@;
put 'aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihULGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIF8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXtjb25zdCBXPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAk'@;
put 'e1R9YDtjb25zb2xlLmVycm9yKFcpO2NvbnN0IGllPWAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKFcpfSZmb3JjZT10cnVlYDtoLmxpY2VuY2VQcm9ibGVtLm5leHQoaWUpLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoaWUpLHNldFRpbWVvdXQoKCk9PmguYXBw'@;
put 'bGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVybiBmdW5jdGlvbihUKXtyZXR1cm4gXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQp'@;
put 'fSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCBfPXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5'@;
put 'OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO198fChfPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQoXyksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJz'@;
put 'QWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpULGRheXNUb0V4cGlyeTpXfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJ'@;
put 'bj1XLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChXKSxXPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoVCxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxk'@;
put 'JiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1'@;
put 'cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZh'@;
put 'bHVlKGRbbjEudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnN0YWdlX3Jvd3NfYWxsb3dl'@;
put 'ZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0'@;
put 'OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5saW5l'@;
put 'YWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW24xLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtuMS5lZGl0UmVj'@;
put 'b3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50'@;
put 'KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNlbnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1maShmdW5jdGlvbiooXyxUKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlw'@;
put 'dG8uc3VidGxlKXRyeXtsZXQgRWU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpO18oSlNPTi5wYXJzZShFZSkpfWNhdGNoKEVlKXtUKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitFZSl9bGV0IGllLFc9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVm'@;
put 'ZmVyKGEpLmNhdGNoKEVlPT57VChFZSl9KTtjb25zdCBwZT15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoZCkuY2F0Y2goRWU9PntUKEVlKX0pO2lmKCFwZSlyZXR1cm4gdm9pZCBUKCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IHdlO2llPXBlO3RyeXt3ZT15aWVsZCB3aW5kb3cu'@;
put 'Y3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixpZSx7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goRWUpe1QoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrRWUpfWlmKHdlKWlmKFcpdHJ5e3dpbmRvdy5jcnlwdG8u'@;
put 'c3VidGxlLmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LHdlLFcpLnRoZW4oRWU9PntsZXQgWmU9KG5ldyBoaGUuVGV4dERlY29kZXIpLmRlY29kZShFZSk7dHJ5e18oSlNPTi5wYXJzZShaZSkpfWNhdGNoKGl0KXtUKCJFcnJvciBwYXJzaW5nIGxpY2Vu'@;
put 'c2Uga2V5IGRhdGEuICIraXQpfX0sRWU9PntUKEVlKX0pfWNhdGNoKEVlKXtUKEVlKX1lbHNlIFQoIkxpY2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIFQoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbihfLFQpe3JldHVybiBmLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT1zUCx0aGlz'@;
put 'LmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtj'@;
put 'b25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPUtvKCkudmFsdWVPZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksXz1wYXJzZUludChkLnNwbGl0KCIs'@;
put 'IilbMV0pO3JldHVybiBLbyhmKS5pc1NhbWUoS28oKSwiZGF5Iik/Xz49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLF8rMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGlu'@;
put 'ZWFnZVJlbmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWZpKGZ1bmN0aW9uKihoLGYpe2goQiQuSihhKSl9KTtyZXR1cm4g'@;
put 'ZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoQiQuYyhhKSl9KX1zZXRTaXRlSWQoYSl7YS5zaXRlX2lkX211bHRpcGxlP3RoaXMuc2FzU2VydmljZS5zZXRM'@;
put 'aWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZF9tdWx0aXBsZSk6YS5zaXRlX2lkJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWQpfWhhbmRsZVNpdGVJZE1pc3NtYXRjaChhLGQsaCxmKXtsZXQgXz0hMSxUPSExO2lmKCghYS5zaXRlX2lkfHxhLnNpdGVfaWQhPT1oKSYm'@;
put 'KF89ITApLCghYS5zaXRlX2lkX211bHRpcGxlfHwhYS5zaXRlX2lkX211bHRpcGxlLmluY2x1ZGVzKGgpKSYmKFQ9ITApLF8mJlQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRoZSBrZXkgcHJvdmlkZWQgaXMgZm9yIGRpZmZlcmVudCBvcmdhbml6YXRpb24uIiksdm9pZCBzZXRUaW1lb3V0KCgp'@;
put 'PT57Y29uc3QgVz0iL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJmZvcmNlPXRydWUiO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChXKSx0aGlzLl9saWNlbmNlU3RhdGU9c1AsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCks'@;
put 'Znx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChXKX0pfWNhbGN1bGF0ZUV4cGlyeShhKXtsZXQgZD1LbyhhLnZhbGlkX3VudGlsLCJZWVlZLU1NLUREIikuc3RhcnRPZigiZGF5IiksaD1LbygpLnN0YXJ0T2YoImRheSIpLGY9ZC5kaWZmKGgsImRheXMiKTtyZXR1cm57ZXhwaXJ5X2RhdGU6'@;
put 'ZCxkYXlzVG9FeHBpcnk6Zn19aGFuZGxlRXhwaXJ5KGEsZCxoLGYpe3NldFRpbWVvdXQoKCk9Pntjb25zdCBfPWAvbGljZW5zaW5nL2tleT9mb3JjZT10cnVlJmVycm9yPWV4cGlyZWQmZGV0YWlscz0ke2J0b2EoIkV4cGlyeSBkYXRlOiAiK2EuZm9ybWF0KCJERC9NTS9ZWVlZIikpfWA7dGhp'@;
put 'cy5saWNlbmNlUHJvYmxlbS5uZXh0KF8pLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXyl9KX1oYW5kbGVVc2Vyc0FsbG93ZWQoYSl7YS5kZW1vJiZ2b2lkIDAhPT10aGlzLl9s'@;
put 'aWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCYmKGEudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWQ+MD9hLnVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQpLHRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZH1oYW5k'@;
put 'bGVVc2VyUmVnaXN0cmF0aW9uKGEsZCxoKXtpZih0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJihkLlJFR0lTVEVSQ09VTlQ+YS51c2Vyc19hbGxvd2VkPyhjb25zb2xlLndhcm4oIkFwcCBoYXMgbW9yZSB1c2VycyByZWdpc3RlcmVkIHRoZW4gbGljZW5zZWQuIiksdGhpcy5pc0FwcE92ZXJD'@;
put 'YXBhY2l0eS5uZXh0KCEwKSk6ZC5SRUdJU1RFUkNPVU5UPT09YS51c2Vyc19hbGxvd2VkJiZjb25zb2xlLndhcm4oIkFwcCBoYXMgaGl0IGxpbWl0IG9mIHVzZXJzIHJlZ2lzdGVyZWQuIikpLDEhPT1kLklTUkVHSVNURVJFRClyZXR1cm4gZC5SRUdJU1RFUkNPVU5UPGEudXNlcnNfYWxsb3dl'@;
put 'ZHx8IXRoaXMudXNlckNvdW50TGltaXRhdGlvbj8oY29uc29sZS5sb2coIlVzZXIgY2FuIHJlZ2lzdGVyIiksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITApLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv'@;
put 'bGljZW5zaW5nL3JlZ2lzdGVyIikpKToodGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITEpLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2xpbWl0IikpKTt0aGlzLmlzQXBwQWN0aXZhdGVk'@;
put 'Lm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcih3MCksYXIoZTgpLGFyKHZsKSxhcihvYSksYXIoVGMpLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi'@;
put 'fSksY30pKCksVXg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMucm91dGVyPV8sdGhpcy5zeXNzaXRlPW5ldyBUZShu'@;
put 'dWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz1udWxsLHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhwJiYiL2RlcGxveSI9PT1ULnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pfXNhc1NlcnZp'@;
put 'Y2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0'@;
put 'dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEp'@;
put 'LHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZmkoZnVu'@;
put 'Y3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLlNZU1NJVEVdKTtsZXQgXz1bXTtpZigoIWYuZ2xvYnZhcnN8fGYuZ2xvYnZhcnMmJiFmLmdsb2J2YXJzWzBdKSYmXy5wdXNoKCJHbG9idmFycyIpLGYuc2FzZGF0YXNldHN8fF8ucHVzaCgiU2FzZGF0YXNldHMiKSxmLnNhc2xpYnN8fF8ucHVz'@;
put 'aCgiU2FzbGlicyIpLGYueGxtYXBzfHxfLnB1c2goIlhMTWFwcyIpLF8ubGVuZ3RoPjApcmV0dXJuIGQ9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGAke18uam9pbigiLCAiKX0gYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZWApLHZvaWQgYS5s'@;
put 'aWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLlNZU1NJVEUsU1lTU0NQTDpmLlNZU1NDUEwsU1lTVENQSVBIT1NUTkFNRTpmLlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5TWVNWTE9ORyxNRU1TSVpFOmYuTUVNU0la'@;
put 'RSxTWVNQUk9DRVNTTU9ERTpmLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuU1lTSE9TVE5BTUUsU1lTSE9TVElORk9MT05HOmYuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuU1lTRU5DT0RJTkcsQVVUT0VYRUM6Zi5BVVRPRVhFQyxJU0FETUlOOmYuZ2xvYnZhcnNbMF0uSVNB'@;
put 'RE1JTixEQ19BRE1JTl9HUk9VUDpmLmdsb2J2YXJzWzBdLkRDX0FETUlOX0dST1VQfTtsZXQgaWUscGUsVD1mLnNhc2RhdGFzZXRzLFc9e307Zm9yKGxldCBpdCBvZiBUKVdbaXQuTElCUkVGXXx8KFdbaXQuTElCUkVGXT1bXSksV1tpdC5MSUJSRUZdLnB1c2goaXQuRFNOKTtsZXQgd2U9SlNP'@;
put 'Ti5wYXJzZShKU09OLnN0cmluZ2lmeShXKSksRWU9W107Zm9yKGxldCBpdCBvZiBPYmplY3Qua2V5cyh3ZSkpRWUucHVzaCh7TElCUkFSWVJFRjppdCx0YWJsZXM6d2VbaXRdfSk7bGV0IFplPUVlO2llPVcscGU9T2JqZWN0LmtleXMoVyksdm9pZCAwIT09aWUmJihHbi5lZGl0b3IubGlic0Fu'@;
put 'ZFRhYmxlcz1pZSksR24ueGxtYXBzPWYueGxtYXBzLm1hcChpdD0+KHtpZDppdFswXSxkZXNjcmlwdGlvbjppdFsxXSx0YXJnZXREUzppdFsyXX0pKSxHbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9WmUsR24uZWRpdG9yLmxpYnJhcmllcz1wZSxHbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxH'@;
put 'bi5kY0xpYj1mLmdsb2J2YXJzWzBdLkRDTElCLHlpZWxkIGEubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbihmKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFs'@;
put 'KCJFcnJvciIsIlRoZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRl'@;
put 'ZC52YWx1ZSksZHx8KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51'@;
put 'cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8YykoYXIoQzApLGFyKHZsKSxhcihvYSksYXIodzApLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgcGdle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5mbj1sLHRoaXMuc3Vic2NyaXB0aW9ucz1hfXVu'@;
put 'c3Vic2NyaWJlKCl7Y29uc3QgbD10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PWwmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UobCwxKX19ZnVuY3Rpb24gdnAoYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwv'@;
put 'cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBrZihjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHZwKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGQ4KGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50'@;
put 'cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIHZwKGEpP2w6a2YoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIHZwKGEpJiZ2cChkKT9sOnZwKGEpP2tmKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTp2cChkKT9rZihmdW5jdGlvbiho'@;
put 'KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19Y29uc3QgWng9ZDgoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiBZeChjLGwpe3Jl'@;
put 'dHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgWHE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztjb25zdCBKcT1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09WHEuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwpe3JldHVy'@;
put 'biJbb2JqZWN0IEFyZ3VtZW50c10iPT09WHEuY2FsbChsKX06ZnVuY3Rpb24obCl7cmV0dXJuIFl4KCJjYWxsZWUiLGwpfX0oKSxfZ2U9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJmwubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3Rv'@;
put 'dHlwZS50b1N0cmluZy5jYWxsKGwpfTtmdW5jdGlvbiBRcShjKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX12YXIgd2dlPWtmKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFz'@;
put 'eS1sYW5kL2VtcHR5Il0/bFsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpu'@;
put 'dWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5lbXB0eT9sLmVtcHR5KCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3IuZW1wdHk/bC5jb25zdHJ1Y3Rvci5lbXB0eSgpOl9nZShsKT9bXTpRcShsKT8iIjpmdW5jdGlvbiBi'@;
put 'Z2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OkpxKGwpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlvbiB5Z2UoYyl7dmFyIGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMp'@;
put 'O3JldHVybiJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IEludDE2QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQzMkFy'@;
put 'cmF5XSI9PT1sfHwiW29iamVjdCBVaW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT1sfShsKT9sLmNv'@;
put 'bnN0cnVjdG9yLmZyb20oIiIpOnZvaWQgMH0pO2NvbnN0IENnZT13Z2U7ZnVuY3Rpb24gZUsoYyl7Zm9yKHZhciBhLGw9W107IShhPWMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSk7cmV0dXJuIGx9ZnVuY3Rpb24gdEsoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5sZW5ndGg7ZDxoOyl7'@;
put 'aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgVFA9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gTWdlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgeGdlPSF7dG9TdHJpbmc6bnVs'@;
put 'bH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksbks9WyJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9mIiwidG9TdHJpbmciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc093blByb3BlcnR5IiwidG9Mb2NhbGVTdHJpbmciXSxySz1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoImxlbmd0aCIpfSgpLEVnZT1mdW5jdGlvbihsLGEpe2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7KXtpZihsW2RdPT09YSlyZXR1cm4hMDtkKz0xfXJldHVybiExfTtjb25zdCBpSz1rZigiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0'@;
put 'LmtleXN8fHJLP2Z1bmN0aW9uKGwpe2lmKE9iamVjdChsKSE9PWwpcmV0dXJuW107dmFyIGEsZCxoPVtdLGY9cksmJkpxKGwpO2ZvcihhIGluIGwpWXgoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoeGdlKWZvcihkPW5LLmxlbmd0aC0xO2Q+PTA7KVl4KGE9'@;
put 'bktbZF0sbCkmJiFFZ2UoaCxhKSYmKGhbaC5sZW5ndGhdPWEpLGQtPTE7cmV0dXJuIGh9OmZ1bmN0aW9uKGwpe3JldHVybiBPYmplY3QobCkhPT1sP1tdOk9iamVjdC5rZXlzKGwpfSksb0s9a2YoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxsIjp2b2lkIDA9PT1sPyJVbmRlZmlu'@;
put 'ZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIHNLKGMsbCxhLGQpe3ZhciBoPWVLKGMpO2Z1bmN0aW9uIF8oVCxXKXtyZXR1cm4gRFAoVCxXLGEuc2xpY2UoKSxkLnNsaWNlKCkpfXJldHVybiF0SyhmdW5jdGlvbihULFcpe3JldHVy'@;
put 'biF0SyhfLFcsVCl9LGVLKGwpLGgpfWZ1bmN0aW9uIERQKGMsbCxhLGQpe2lmKFRQKGMsbCkpcmV0dXJuITA7dmFyIGg9b0soYyk7aWYoaCE9PW9LKGwpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'WyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmY1siZmFudGFzeS1sYW5kL2VxdWFscyJdKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQv'@;
put 'ZXF1YWxzIl0oYyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzJiZjLmVxdWFscyhsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzJiZsLmVxdWFscyhjKTtzd2l0'@;
put 'Y2goaCl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gU2dlKGMpe3ZhciBsPVN0cmluZyhjKS5tYXRjaCgvXmZ1bmN0aW9uIChcdyopLyk7cmV0dXJuIG51bGw9'@;
put 'PWw/IiI6bFsxXX0oYy5jb25zdHJ1Y3RvcikpcmV0dXJuIGM9PT1sO2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgYyE9dHlwZW9mIGx8fCFUUChjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRlIjpp'@;
put 'ZighVFAoYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBjLm5hbWU9PT1sLm5hbWUmJmMubWVzc2FnZT09PWwubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYoYy5zb3VyY2UhPT1sLnNvdXJjZXx8Yy5nbG9iYWwhPT1sLmdsb2JhbHx8Yy5p'@;
put 'Z25vcmVDYXNlIT09bC5pZ25vcmVDYXNlfHxjLm11bHRpbGluZSE9PWwubXVsdGlsaW5lfHxjLnN0aWNreSE9PWwuc3RpY2t5fHxjLnVuaWNvZGUhPT1sLnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBmPWEubGVuZ3RoLTE7Zj49MDspe2lmKGFbZl09PT1jKXJldHVybiBkW2ZdPT09bDtmLT0x'@;
put 'fXN3aXRjaChoKXtjYXNlIk1hcCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmc0soYy5lbnRyaWVzKCksbC5lbnRyaWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIlNldCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmc0soYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29u'@;
put 'Y2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJlZ0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWlu'@;
put 'dDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7'@;
put 'ZGVmYXVsdDpyZXR1cm4hMX12YXIgXz1pSyhjKTtpZihfLmxlbmd0aCE9PWlLKGwpLmxlbmd0aClyZXR1cm4hMTt2YXIgVD1hLmNvbmNhdChbY10pLFc9ZC5jb25jYXQoW2xdKTtmb3IoZj1fLmxlbmd0aC0xO2Y+PTA7KXt2YXIgaWU9X1tmXTtpZighWXgoaWUsbCl8fCFEUChsW2llXSxjW2ll'@;
put 'XSxULFcpKXJldHVybiExO2YtPTF9cmV0dXJuITB9Y29uc3QgRGdlPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIERQKGwsYSxbXSxbXSl9KSxhSz1rZihmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmRGdlKGwsQ2dlKGwpKX0pO2Z1bmN0aW9uIHRiKGMpe3JldHVybiBudWxsPT1jfWZ1bmN0'@;
put 'aW9uIF9wKGMpe3JldHVybiB0YihjKXx8YUsoYyl9ZnVuY3Rpb24gSVAoYyl7cmV0dXJuIFp4KFN0cmluZyxjKX1mdW5jdGlvbiBXeChjKXtyZXR1cm4gWngoT2JqZWN0LGMpfWZ1bmN0aW9uIGNLKGMpe3JldHVybiBaeChNYXAsYyl9ZnVuY3Rpb24gdUsoYyxsKXtyZXR1cm4gYyE9PWx9ZnVu'@;
put 'Y3Rpb24gZEsoYyxsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lmeShsKX1mdW5jdGlvbiBoSyhjKXtjb25zdCBsPW5ldyBNYXA7Zm9yKGNvbnN0W2EsZF1vZiBjKWNLKGQpP2wuc2V0KGEsaEsoZCkpOmwuc2V0KGEsZCk7cmV0dXJuIGx9ZnVuY3Rpb24gSGdlKGMp'@;
put 'e3N3aXRjaCghMCl7Y2FzZSBjSyhjKTpyZXR1cm4gaEsoYyk7Y2FzZSBXeChjKSYmIUFycmF5LmlzQXJyYXkoYyk6cmV0dXJuIFA1KHt9LGMpO2RlZmF1bHQ6cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpfX1mdW5jdGlvbiBQNSguLi5jKXtjb25zdCBsPXt9O3JldHVybiBj'@;
put 'Lm1hcChhPT5XeChhKT97Li4uYX06e30pLmZvckVhY2goYT0+e09iamVjdC5rZXlzKGEpLmZvckVhY2goZD0+e2NvbnN0IGg9YVtkXTtsW2RdPUFycmF5LmlzQXJyYXkoaCk/QXJyYXkuZnJvbShoKTpXeChoKT9QNShsW2RdfHx7fSxoKTpofSl9KSxsfWZ1bmN0aW9uIHBLKGM9d2luZG93KXty'@;
put 'ZXR1cm4hdGIoYyl9bGV0IEd4LGdLLExQLFJQO2Z1bmN0aW9uIG1LKGM9ITApe2lmKCFjfHwhR3gpe2NvbnN0IGw9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuZy12ZXJzaW9uXSIpO0d4PWw/IiIrbC5nZXRBdHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJu'@;
put 'IEd4fWZ1bmN0aW9uIHpnZShjPSEwKXtyZXR1cm4gYyYmR3h8fChnSz13aW5kb3c/LmFuZ3VsYXI/LnZlcnNpb24/LmZ1bGwpLGdLfWZ1bmN0aW9uIHZLKGM9ITApe3JldHVybiBjJiZMUHx8KExQPXdpbmRvdz8uQ0RTPy5fcmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lv'@;
put 'bjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCksTFB9ZnVuY3Rpb24gX0soYz0hMCl7aWYoIWN8fCFSUCl7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIik7bGV0IGE7'@;
put 'Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYobFtkXS5fX3Z1ZV9fKXthPWxbZF07YnJlYWt9UlA9YT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDB9cmV0dXJuIFJQfWZ1bmN0aW9uIEY1KGMpe3JldHVybiBjLnJlcGxhY2UoL1tBLVpdL2csbD0+Ii0iK2wudG9Mb3dlckNhc2UoKSl9ZnVu'@;
put 'Y3Rpb24gd0soYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBxZ2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5zdXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1q'@;
put 'cyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9RjUoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEpPT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5z'@;
put 'ZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07ZnVuY3Rpb24gTUsoYyxsKXtzd2l0Y2goYyl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhLGQsaCxmKXty'@;
put 'ZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNjpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07'@;
put 'Y2FzZSA3OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLF8sVCxXKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDk6cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGEsZCxoLGYsXyxULFcsaWUscGUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSxwZSx3ZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmlyc3Qg'@;
put 'YXJndW1lbnQgdG8gX2FyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gdGVuIil9fWZ1bmN0aW9uIHhLKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9YyxfPTA7XzxsLmxlbmd0aHx8aDxhcmd1bWVudHMubGVuZ3Ro'@;
put 'Oyl7dmFyIFQ7XzxsLmxlbmd0aCYmKCF2cChsW19dKXx8aD49YXJndW1lbnRzLmxlbmd0aCk/VD1sW19dOihUPWFyZ3VtZW50c1toXSxoKz0xKSxkW19dPVQsdnAoVCl8fChmLT0xKSxfKz0xfXJldHVybiBmPD0wP2EuYXBwbHkodGhpcyxkKTpNSyhmLHhLKGMsZCxhKSl9fWNvbnN0IEVLPWQ4'@;
put 'KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIDE9PT1sP2tmKGEpOk1LKGwseEsobCxbXSxhKSl9KSxYZ2U9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24obCl7cmV0dXJuIGw8PDA9PT1sfSxRZ2U9ZDgoZnVuY3Rpb24obCxhKXt2YXIgZD1sPDA/YS5sZW5ndGgrbDpsO3JldHVybiBRcShhKT9hLmNo'@;
put 'YXJBdChkKTphW2RdfSksdG1lPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFwKGZ1bmN0aW9uKGQpe2Zvcih2YXIgXyxoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPVhnZShfPWRbZl0pP1FnZShfLGgpOmhbX10sZis9MX1yZXR1cm4gaH0pfSkscm1lPWQ4KGZ1'@;
put 'bmN0aW9uKGwsYSl7cmV0dXJuIHRtZShbbF0sYSlbMF19KSxvbWU9RUsoMiwoYyxsKT0+dm9pZCAwIT09cm1lKGMsbCkpLGtLPW9tZSh7IkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciI6ITB9LHdpbmRvdyk7Y2xhc3MgSDV7c3RhdGljIGxvZyguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLmxv'@;
put 'ZyguLi5sKX1zdGF0aWMgd2FybiguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe0ZQKCkmJlBQKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIFBQKCl7cmV0dXJuIWtLKFsiamFzbWluZSJdKX1mdW5jdGlvbiBGUCgpe3JldHVy'@;
put 'biF3aW5kb3cuQ0RTLmVudmlyb25tZW50LnByb2R1Y3Rpb259ZnVuY3Rpb24gQUsoKXtwSygpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOnFnZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRl'@;
put 'Ontmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpUSyxsb2dEZXRhaWxzOmFtZX0s'@;
put 'ZnVuY3Rpb24oKXtjb25zdCBjPSI2LjQuNiI7d2luZG93LkNEUy5fdmVyc2lvbi5pbmRleE9mKGMpPDAmJih3aW5kb3cuQ0RTLl92ZXJzaW9uLnB1c2goYyksZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpPy5zZXRBdHRyaWJ1dGUoImNkcy12ZXJzaW9uIix3aW5kb3cuQ0RTLl92ZXJz'@;
put 'aW9uLmpvaW4oIiAiKSkpLHdpbmRvdy5DRFMuX3ZlcnNpb24ubGVuZ3RoPjEmJkg1Lndhcm4oIlJ1bm5pbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIENsYXJpdHkgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLiBQbGVhc2UgZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgbG9hZGVk'@;
put 'LiIpfSgpLHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkfHwod2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWQ9ITAsd2luZG93LkNEUy5fc3RhdGU9bmV3IFByb3h5KHdpbmRvdy5DRFMuX3N0YXRlLHtzZXQ6KGMsbCxhKT0+e2NvbnN0IGQ9e2tleTpsLHByZXY6d2luZG93LkNEUy5fc3RhdGVb'@;
put 'bF0sY3VycmVudDphfTtyZXR1cm4gY1tsXT1hLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJDRFNfU1RBVEVfVVBEQVRFIix7ZGV0YWlsOmR9KSksITB9fSkpKX1mdW5jdGlvbiBUSygpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25t'@;
put 'ZW50OndpbmRvdy5DRFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246bUsoITEpLGFuZ3VsYXJKU1ZlcnNpb246emdlKCExKSxyZWFjdFZlcnNpb246dksoITEpLHZ1ZVZlcnNpb246'@;
put 'X0soITEpLHN0YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVn'@;
put 'aXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIGFtZSgpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShUSygpLG51bGwsMikpfWNvbnN0IEhQPW5ldyBjbGFzcyBnZ2V7Y29uc3RydWN0b3IoKXt0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGwpe2NvbnN0IGE9bmV3IHBnZShsLHRoaXMuc3Vic2NyaXB0aW9ucyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEpLGF9ZW1pdChsKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLmZuKGwpKX10b0V2ZW50T2Jz'@;
put 'ZXJ2YWJsZSgpe3JldHVybiB0aGlzfX07SFAubGlzdGVuZXI9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiQ0RTX1NUQVRFX1VQREFURSIsYz0+SFAuZW1pdChjLmRldGFpbCkpO2NsYXNzICRse3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gQUsoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0'@;
put 'aWMgZ2V0VmFsdWUobCl7cmV0dXJuICRsLnN0YXRlW2xdfXN0YXRpYyBzZXRWYWx1ZShsLGEpeyRsLnN0YXRlW2xdPWF9c3RhdGljIGxvZygpe0g1LmxvZyhKU09OLnN0cmluZ2lmeSgkbC5zdGF0ZSxudWxsLDIpKX19JGwuc3RhdGVVcGRhdGVzPUhQLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29u'@;
put 'c3QgbG1lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0i'@;
put 'Y2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyBWc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246bG1lWzFdLC4uLiRsLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpeyRsLnN0YXRlLmljb25S'@;
put 'ZWdpc3RyeT17Li4uJGwuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVZzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlZzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChb'@;
put 'ZCxoXSk9PmgubWFwKGY9PltmLFZzLnJlZ2lzdHJ5W2RdXSkpOyRsLnN0YXRlLmljb25SZWdpc3RyeT17Li4uJGwuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX1jb25zdCBoOD1b'@;
put 'ImFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+J31dLG8xPVsiZXhjbGFtYXRpb24tY2lyY2xlIix7b3V0bGlu'@;
put 'ZTonPHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz48cGF0aCBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkEx'@;
put 'LjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPjxjaXJjbGUgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40'@;
put 'OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nfV0sczE9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEw'@;
put 'LDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPjxwYXRoIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwx'@;
put 'OCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPid9XSxESz1bImVsbGlwc2lzLWhvcml6b250YWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIzMS4xIiBjeT0i'@;
put 'MTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+'@;
put 'PGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XSxuYj1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSwxOGw3LjI5LTcuMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSwxMC43MSw5LjI5YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTYuNTksMTgs'@;
put 'OS4yOSwyNS4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDcuMjksNy4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxjbWU9WyJldmVudCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42'@;
put 'NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+PHBhdGggZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwx'@;
put 'Ljc4LDAsMCwwLDMyLjI1LDZaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz48cmVjdCB4PSIx'@;
put 'MyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSww'@;
put 'LDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCww'@;
put 'LDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4x'@;
put 'NywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYz'@;
put 'MC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJN'@;
put 'MTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxwYXRoIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQs'@;
put 'MFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42'@;
put 'Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs'@;
put 'MTBaIi8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIs'@;
put 'MCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCww'@;
put 'LDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgs'@;
put 'MCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPid9XSx1bWU9WyJjYWxlbmRh'@;
put 'ciIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2'@;
put 'WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0'@;
put 'PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBo'@;
put 'ZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxyZWN0IHg9IjEzIiB5PSI2IiB3'@;
put 'aWR0aD0iMTAiIGhlaWdodD0iMiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1'@;
put 'LjM4WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9s'@;
put 'eWdvbiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx'@;
put 'Ljc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz48cmVjdCB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE5IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAs'@;
put 'MCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu'@;
put 'NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJa'@;
put 'bTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCww'@;
put 'LDAsMjYsMTBaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwz'@;
put 'Ljc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01'@;
put 'SDI2VjE5aDJaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0'@;
put 'aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1'@;
put 'LDAsMCwxLDMwLDEzLjVaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVI'@;
put 'MjZWMTRoMloiLz4nfV0sZG1lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0'@;
put 'LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiLz48cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0u'@;
put 'NDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiLz48cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwx'@;
put 'OGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAs'@;
put 'MSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiLz4nLHNvbGlkOic8cGF0aCBkPSJN'@;
put 'MTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIvPjxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCww'@;
put 'LDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIvPjxwYXRoIGQ9Ik00Ljg3LDUuNzhs'@;
put 'NC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42'@;
put 'LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIvPid9XSxobWU9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEw'@;
put 'UzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIs'@;
put 'MzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiLz48cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwx'@;
put 'LDE4LjA5LDIyLjg5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0x'@;
put 'Ny44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIvPjxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiLz4nfV0s'@;
put 'Zm1lPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9'@;
put 'IjE4IiBjeT0iNC45IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIvPid9XSxwbWU9WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzEsNUg1QTIsMiwwLDAsMCwzLDdWMjlhMiwyLDAs'@;
put 'MCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nfV0sZ21lPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFWMjgu'@;
put 'OTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIi8+J31dLElLPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDku'@;
put 'NzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxtbWU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2'@;
put 'LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywx'@;
put 'LjcsMCwwLDAsMjYuNDksNVoiLz4nfV0sTEs9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFa'@;
put 'Ii8+PHBhdGggZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+J31dLHZtZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRo'@;
put 'IGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFh'@;
put 'MS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs'@;
put 'MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz48cGF0aCBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40'@;
put 'MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+J31dLF9tZT1bImZpbHRlci1ncmlkIix7b3V0bGluZTonPHBhdGggZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw'@;
put 'LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+Jyxzb2xpZDon'@;
put 'PHBhdGggZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAs'@;
put 'MCwuMTUtLjM1VjExWiIvPid9XSxSSz1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPGNpcmNsZSBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz48cGF0aCBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+'@;
put 'PHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIs'@;
put 'MiwwLDEsMSwyLDJBMiwyLDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPid9XSxibWU9WyJleGNsYW1hdGlvbi10cmlhbmdsZSIse291dGxpbmU6JzxwYXRo'@;
put 'IGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+PGNpcmNsZSBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0iMS41Ii8+PHBhdGggZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCww'@;
put 'LDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAs'@;
put 'MSwyOC41NSwyNy40OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYu'@;
put 'ODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+J31dLHltZT1bImNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwz'@;
put 'NFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiLz4nfV0sd21lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwxMWE3LDcsMCwx'@;
put 'LDEtNyw3LDcsNywwLDAsMSw3LTciLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz4nfV0sT0s9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxjaXJjbGUgY3g9'@;
put 'IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz48cGF0aCBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0'@;
put 'LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44'@;
put 'LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPid9XSxDbWU9WyJzdWNjZXNzLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwx'@;
put 'OCwzMloiLz48cGF0aCBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYs'@;
put 'MCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+J31dO2NsYXNzIE1tZSBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKX1zY2hlZHVsZShs'@;
put 'LGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0ICR4PXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09JHg7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xlYXJJbnRlcnZhbChjKXtjb25zdHtk'@;
put 'ZWxlZ2F0ZTpsfT0keDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgTlAgZXh0ZW5kcyBNbWV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5n'@;
put 'PSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZixoLGEpKSx0aGlzLnBlbmRpbmc9'@;
put 'ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gJHguc2V0SW50ZXJ2YWwobC5mbHVzaC5iaW5kKGwsdGhpcyksZCl9'@;
put 'cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJiR4LmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBh'@;
put 'IGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51'@;
put 'bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGh9dW5zdWJzY3JpYmUoKXtpZigh'@;
put 'dGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxxKGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGws'@;
put 'bnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19Y29uc3QgVlA9e25vdzooKT0+KFZQLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIHJie2NvbnN0cnVjdG9yKGwsYT1yYi5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1s'@;
put 'LHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5zY2hlZHVsZShkLGEpfX1yYi5ub3c9VlAubm93O2NsYXNzIEJQIGV4dGVuZHMgcmJ7Y29uc3RydWN0b3IobCxhPXJiLm5vdyl7c3VwZXIobCxhKSx0aGlzLmFj'@;
put 'dGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2NvbnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9'@;
put 'YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDtsPWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9fX1jb25zdCBpYj1uZXcgQlAoTlApLHhtZT1pYjtmdW5jdGlvbiBmOChjLGw9aWIpe3JldHVybiBYZSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLF89bnVs'@;
put 'bDtjb25zdCBUPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgpLGg9bnVsbDtjb25zdCBpZT1mO2Y9bnVsbCxkLm5leHQoaWUpfX07ZnVuY3Rpb24gVygpe2NvbnN0IGllPV8rYyxwZT1sLm5vdygpO2lmKHBlPGllKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9pZCAwLGllLXBlKSx2b2lkIGQu'@;
put 'YWRkKGgpO1QoKX1hLnN1YnNjcmliZShVZShkLGllPT57Zj1pZSxfPWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShXLGMpLGQuYWRkKGgpKX0sKCk9PntUKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWZ1bmN0aW9uIGFoKGMpe3JldHVybiBYZSgobCxhKT0+e0ty'@;
put 'KGMpLnN1YnNjcmliZShVZShhLCgpPT5hLmNvbXBsZXRlKCksRykpLCFhLmNsb3NlZCYmbC5zdWJzY3JpYmUoYSl9KX1mdW5jdGlvbiBqUChjPTAsbCxhPXhtZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwhPWwmJihSYyhsKT9hPWw6ZD1sKSxuZXcgS2UoaD0+e2xldCBmPWZ1bmN0aW9uIGttZShj'@;
put 'KXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2MtYS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IF89MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KF8rKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRl'@;
put 'KCkpfSxmKX0pfWNvbnN0IFRtZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxEbWU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLEltZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gbjIoYyxsLGEsZCl7aWYoWShhKSYmKGQ9YSxhPXZvaWQgMCksZCly'@;
put 'ZXR1cm4gbjIoYyxsLGEpLnBpcGUoSE8oZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gT21lKGMpe3JldHVybiBZKGMuYWRkRXZlbnRMaXN0ZW5lcikmJlkoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/RG1lLm1hcChfPT5UPT5jW19dKGwsVCxhKSk6ZnVuY3Rpb24gTG1lKGMpe3JldHVybiBZ'@;
put 'KGMuYWRkTGlzdGVuZXIpJiZZKGMucmVtb3ZlTGlzdGVuZXIpfShjKT9UbWUubWFwKEZLKGMsbCkpOmZ1bmN0aW9uIFJtZShjKXtyZXR1cm4gWShjLm9uKSYmWShjLm9mZil9KGMpP0ltZS5tYXAoRksoYyxsKSk6W107aWYoIWgmJlJuKGMpKXJldHVybiB5cihfPT5uMihfLGwsYSkpKEtyKGMp'@;
put 'KTtpZighaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgS2UoXz0+e2NvbnN0IFQ9KC4uLlcpPT5fLm5leHQoMTxXLmxlbmd0aD9XOldbMF0pO3JldHVybiBoKFQpLCgpPT5mKFQpfSl9ZnVuY3Rpb24gRksoYyxsKXtyZXR1cm4gYT0+ZD0+'@;
put 'Y1thXShsLGQpfWNsYXNzIHF4IGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1WUCl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGlt'@;
put 'ZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29uc3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxf'@;
put 'dGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTpffT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK18pKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2NyaWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7'@;
put 'Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xpY2UoKTtmb3IobGV0IF89MDtfPGYubGVuZ3RoJiYhbC5jbG9zZWQ7Xys9ZD8xOjIpbC5uZXh0KGZbX10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXpl'@;
put 'ZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIpKmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiks'@;
put 'IWgpe2NvbnN0IF89YS5ub3coKTtsZXQgVD0wO2ZvcihsZXQgVz0xO1c8ZC5sZW5ndGgmJmRbV108PV87Vys9MilUPVc7VCYmZC5zcGxpY2UoMCxUKzEpfX19Y2xhc3MgSEt7fWNsYXNzIFBtZXt9Y29uc3QgQWY9IioiO2Z1bmN0aW9uIGExKGMsbCl7cmV0dXJue3R5cGU6NyxuYW1lOmMsZGVm'@;
put 'aW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBydShjLGw9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIE5LKGMsbD1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOmMsb3B0aW9uczpsfX1mdW5jdGlvbiBfcyhjKXtyZXR1cm57dHlwZTo2LHN0'@;
put 'eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBLeChjLGwsYSl7cmV0dXJue3R5cGU6MCxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiBGbWUoYyl7cmV0dXJue3R5cGU6NSxzdGVwczpjfX1mdW5jdGlvbiBmYyhjLGwsYT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6Yyxh'@;
put 'bmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIG9ie2NvbnN0cnVjdG9yKGw9MCxhPTApe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9'@;
put 'W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRo'@;
put 'aXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlz'@;
put 'Ll9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFz'@;
put 'aygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9Zmlu'@;
put 'aXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVz'@;
put 'dHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlv'@;
put 'bj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5f'@;
put 'b25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFZLe2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29u'@;
put 'RGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxkPTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXll'@;
put 'cnMuZm9yRWFjaChfPT57Xy5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSxfLm9uRGVzdHJveSgoKT0+eysrZD09ZiYmdGhpcy5fb25EZXN0cm95KCl9KSxfLm9uU3RhcnQoKCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5w'@;
put 'bGF5ZXJzLnJlZHVjZSgoXyxUKT0+TWF0aC5tYXgoXyxULnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVy'@;
put 'cy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRv'@;
put 'bmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBs'@;
put 'YXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChs'@;
put 'PT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMu'@;
put 'Zm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKGwpe2NvbnN0IGE9bCp0aGlz'@;
put 'LnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRpbWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChhLGQpPT5udWxsPT09YXx8ZC50'@;
put 'b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5iZWZvcmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayhsKXtjb25z'@;
put 'dCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19bGV0IEJLPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdl'@;
put 'PWg9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShh'@;
put 'KXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjfSksY30pKCks'@;
put 'TjU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEJLe31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsZmVhdHVyZXM6W2VvXX0pLGN9KSgpO2NvbnN0'@;
put 'IGxoPW5ldyBTaSgiTmdWYWx1ZUFjY2Vzc29yIiksTm1lPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5TMCksbXVsdGk6ITB9O2xldCBTMD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixhKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5w'@;
put 'dXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DaGFuZ2UoZi50YXJnZXQu'@;
put 'Y2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW05tZV0pLGVvXX0pLGN9KSgpO2NvbnN0IFZtZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+V2EpLG11bHRpOiEwfSxqbWU9bmV3IFNpKCJDb21wb3NpdGlvbkV2'@;
put 'ZW50TW9kZSIpO2xldCBXYT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQkt7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCksdGhpcy5fY29tcG9zaXRpb25Nb2RlPWgsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9k'@;
put 'ZT0hZnVuY3Rpb24gQm1lKCl7Y29uc3QgYz1hcCgpP2FwKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QoYy50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfV9oYW5kbGVJbnB1dChhKXso'@;
put 'IXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShhKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoYSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMu'@;
put 'X2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRm8pLHR0KE5pKSx0dChqbWUsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9s'@;
put 'TmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMs'@;
put 'InR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5faGFuZGxlSW5wdXQoZi50YXJnZXQudmFsdWUp'@;
put 'fSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbihmKXtyZXR1cm4gZC5fY29tcG9zaXRpb25FbmQoZi50YXJn'@;
put 'ZXQudmFsdWUpfSl9LGZlYXR1cmVzOlt0aShbVm1lXSksZW9dfSksY30pKCk7Y29uc3QgaXU9bmV3IFNpKCJOZ1ZhbGlkYXRvcnMiKSx5cD1uZXcgU2koIk5nQXN5bmNWYWxpZGF0b3JzIik7ZnVuY3Rpb24gS0soYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gWEsoYyl7cmV0dXJuIHY1KGMp'@;
put 'P2VhKGMpOmN9ZnVuY3Rpb24gSksoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBRSyhjLGwpe3JldHVybiBsLm1hcChhPT5hKGMpKX1mdW5jdGlvbiBlWChj'@;
put 'KXtyZXR1cm4gYy5tYXAobD0+ZnVuY3Rpb24gVW1lKGMpe3JldHVybiFjLnZhbGlkYXRlfShsKT9sOmE9PmwudmFsaWRhdGUoYSkpfWZ1bmN0aW9uIFVQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIHRYKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoS0spO3JldHVy'@;
put 'biAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBKSyhRSyhhLGwpKX19KGVYKGMpKTpudWxsfWZ1bmN0aW9uIFpQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIG5YKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoS0spO3JldHVybiAwPT1sLmxlbmd0'@;
put 'aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBIbWUoLi4uYyl7Y29uc3QgbD1PYyhjKSx7YXJnczphLGtleXM6ZH09UkcoYyksaD1uZXcgS2UoZj0+e2NvbnN0e2xlbmd0aDpffT1hO2lmKCFfKXJldHVybiB2b2lkIGYuY29tcGxldGUoKTtjb25zdCBUPW5ldyBBcnJheShfKTts'@;
put 'ZXQgVz1fLGllPV87Zm9yKGxldCBwZT0wO3BlPF87cGUrKyl7bGV0IHdlPSExO0tyKGFbcGVdKS5zdWJzY3JpYmUoVWUoZixFZT0+e3dlfHwod2U9ITAsaWUtLSksVFtwZV09RWV9LCgpPT5XLS0sdm9pZCAwLCgpPT57KCFXfHwhd2UpJiYoaWV8fGYubmV4dChkP09HKGQsVCk6VCksZi5jb21w'@;
put 'bGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoSE8obCkpOmh9KFFLKGEsbCkubWFwKFhLKSkucGlwZShNZShKSykpfX0oZVgoYykpOm51bGx9ZnVuY3Rpb24gclgoYyxsKXtyZXR1cm4gbnVsbD09PWM/W2xdOkFycmF5LmlzQXJyYXkoYyk/Wy4uLmMsbF06W2MsbF19ZnVuY3Rpb24gWVAo'@;
put 'Yyl7cmV0dXJuIGM/QXJyYXkuaXNBcnJheShjKT9jOltjXTpbXX1mdW5jdGlvbiBKeChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2MuaW5jbHVkZXMobCk6Yz09PWx9ZnVuY3Rpb24gc1goYyxsKXtjb25zdCBhPVlQKGwpO3JldHVybiBZUChjKS5mb3JFYWNoKGg9PntKeChhLGgpfHxh'@;
put 'LnB1c2goaCl9KSxhfWZ1bmN0aW9uIGFYKGMsbCl7cmV0dXJuIFlQKGwpLmZpbHRlcihhPT4hSngoYyxhKSl9Y2xhc3MgbFh7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119'@;
put 'Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWU6bnVsbH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxp'@;
put 'ZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucGVuZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro'@;
put 'aXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRo'@;
put 'aXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hl'@;
put 'ZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro'@;
put 'aXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfV9zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1VUCh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3Jz'@;
put 'KGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49WlAodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRh'@;
put 'dG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fcmVnaXN0ZXJPbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2gobCl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNo'@;
put 'KGw9PmwoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0KGw9dm9pZCAwKXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldChsKX1oYXNFcnJvcihsLGEpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IobCxhKX1nZXRFcnJvcihsLGEp'@;
put 'e3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKGwsYSk6bnVsbH19Y2xhc3MganUgZXh0ZW5kcyBsWHtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIHp1IGV4dGVuZHMgbFh7Y29uc3RydWN0b3IoKXtz'@;
put 'dXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyBjWHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9jZD1sfWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdl'@;
put 'dCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQo'@;
put 'KXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRo'@;
put 'aXMuX2NkPy5zdWJtaXR0ZWR9fWxldCBCcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgY1h7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHp1LDIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJuZy11bnRvdWNoZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlz'@;
put 'VG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRpbmcpfSxmZWF0dXJlczpbZW9dfSksY30pKCksd3A9KCgpPT57'@;
put 'Y2xhc3MgYyBleHRlbmRzIGNYe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChqdSwxMCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIi'@;
put 'LCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJuZy11bnRvdWNo'@;
put 'ZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRp'@;
put 'bmcpKCJuZy1zdWJtaXR0ZWQiLGQuaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y29uc3Qgc2I9IlZBTElEIixlRT0iSU5WQUxJRCIscDg9IlBFTkRJTkciLGFiPSJESVNBQkxFRCI7ZnVuY3Rpb24gJFAoYyl7cmV0dXJuKHRFKGMpP2MudmFsaWRhdG9yczpjKXx8bnVsbH1m'@;
put 'dW5jdGlvbiBxUChjLGwpe3JldHVybih0RShsKT9sLmFzeW5jVmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiB0RShjKXtyZXR1cm4gbnVsbCE9YyYmIUFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY31jbGFzcyBmWHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3BlbmRpbmdE'@;
put 'aXJ0eT0hMSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2Fi'@;
put 'bGVkQ2hhbmdlPVtdLHRoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGEpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29t'@;
put 'cG9zZWRWYWxpZGF0b3JGbj1sfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49bH1nZXQgcGFy'@;
put 'ZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1zYn1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWVFfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1wOH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5z'@;
put 'dGF0dXM9PT1hYn1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PWFifWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRh'@;
put 'dGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCl9c2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKX1hZGRWYWxpZGF0b3JzKGwpe3RoaXMu'@;
put 'c2V0VmFsaWRhdG9ycyhzWChsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoc1gobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhhWChsLHRo'@;
put 'aXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoYVgobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIEp4KHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFzQXN5bmNWYWxpZGF0'@;
put 'b3IobCl7cmV0dXJuIEp4KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSEw'@;
put 'LHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRv'@;
put 'dWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQo'@;
put 'bCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0FzUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFj'@;
put 'aENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPXA4LCExIT09bC5lbWl0RXZlbnQmJnRoaXMuc3Rh'@;
put 'dHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9YWIsdGhpcy5l'@;
put 'cnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0'@;
put 'aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlz'@;
put 'LnN0YXR1cz1zYix0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJp'@;
put 'c3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlzdGluZUNoZWNrfHx0'@;
put 'aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhpcy5fc2V0SW5pdGlh'@;
put 'bFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1z'@;
put 'Ynx8dGhpcy5zdGF0dXM9PT1wOCkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQm'@;
put 'JiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0'@;
put 'eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/YWI6c2J9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpu'@;
put 'dWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1wOCx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgYT1YSyh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJz'@;
put 'Y3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRo'@;
put 'aXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQo'@;
put 'bCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8fChhPWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEucmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdldEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJu'@;
put 'IGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xldCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1'@;
put 'cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgRXIsdGhp'@;
put 'cy5zdGF0dXNDaGFuZ2VzPW5ldyBFcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9hYjp0aGlzLmVycm9ycz9lRTp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhwOCk/cDg6'@;
put 'dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGVFKT9lRTpzYn1fYW55Q29udHJvbHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9h'@;
put 'bnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBk'@;
put 'YXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7'@;
put 'dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5KGwpe3RFKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQu'@;
put 'ZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQobCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rp'@;
put 'b24gR21lKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1VQKGMpOmN8fG51bGx9KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRB'@;
put 'c3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uICRtZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9aUChjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX1jbGFzcyBuRSBleHRlbmRzIGZYe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigkUChhKSxxUChkLGEpKSx0aGlzLmNv'@;
put 'bnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVy'@;
put 'Q29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29udHJvbHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxh'@;
put 'LGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9s'@;
put 'c1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30p'@;
put 'e3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpk'@;
put 'LmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5zKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gaFgoYyxsLGEpe2MuX2ZvckVhY2hD'@;
put 'aGlsZCgoZCxoKT0+e2lmKHZvaWQgMD09PWFbaF0pdGhyb3cgbmV3IEFyKDEwMDIsIiIpfSl9KSh0aGlzLDAsbCksT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57KGZ1bmN0aW9uIGRYKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlzKGQpOmQpLmxlbmd0aCl0'@;
put 'aHJvdyBuZXcgQXIoMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgQXIoMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9'@;
put 'cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlk'@;
put 'aXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobFtoXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFs'@;
put 'dWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3lu'@;
put 'Y1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChk'@;
put 'LGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVl'@;
put 'KCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+'@;
put 'KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZhbHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBP'@;
put 'YmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5'@;
put 'KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3QgVjU9bmV3IFNpKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmxifSksbGI9ImFsd2F5cyI7ZnVuY3Rpb24gY2IoYyxsLGE9bGIpe0tQKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRl'@;
put 'VmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gWG1lKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMu'@;
put 'X3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmcFgoYyxsKX0pfShjLGwpLGZ1bmN0aW9uIFFtZShjLGwpe2NvbnN0IGE9KGQsaCk9PntsLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShkKSxoJiZsLnZpZXdUb01vZGVsVXBkYXRlKGQp'@;
put 'fTtjLnJlZ2lzdGVyT25DaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25DaGFuZ2UoYSl9KX0oYyxsKSxmdW5jdGlvbiBKbWUoYyxsKXtsLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntjLl9wZW5kaW5nVG91Y2hlZD0hMCwiYmx1'@;
put 'ciI9PT1jLnVwZGF0ZU9uJiZjLl9wZW5kaW5nQ2hhbmdlJiZwWChjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBLbWUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1'@;
put 'ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gb0UoYyxsKXtjLmZvckVhY2goYT0+e2EucmVn'@;
put 'aXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gS1AoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIGlYKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKHJYKGEs'@;
put 'bC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgYSYmYy5zZXRWYWxpZGF0b3JzKFthXSk7Y29uc3QgZD1mdW5jdGlvbiBvWChjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9jLnNldEFzeW5jVmFsaWRhdG9ycyhyWChkLGwu'@;
put 'YXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtvRShsLl9yYXdWYWxpZGF0b3JzLGgpLG9FKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBw'@;
put 'WChjLGwpe2MuX3BlbmRpbmdEaXJ0eSYmYy5tYXJrQXNEaXJ0eSgpLGMuc2V0VmFsdWUoYy5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxsLnZpZXdUb01vZGVsVXBkYXRlKGMuX3BlbmRpbmdWYWx1ZSksYy5fcGVuZGluZ0NoYW5nZT0hMX1jb25zdCBpNmU9e3By'@;
put 'b3ZpZGU6anUsdXNlRXhpc3Rpbmc6SXMoKCk9PnIyKX0sdWI9KCgpPT5Qcm9taXNlLnJlc29sdmUoKSkoKTtsZXQgcjI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9aCx0aGlzLnN1Ym1pdHRlZD0h'@;
put 'MSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgRXIsdGhpcy5mb3JtPW5ldyBuRSh7fSxVUChhKSxaUChkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250'@;
put 'cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXt1Yi50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7YS5jb250cm9sPWQucmVnaXN0'@;
put 'ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLGNiKGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0pfWdldENvbnRyb2woYSl7cmV0dXJu'@;
put 'IHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe3ViLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0pfWFkZEZvcm1Hcm91cChhKXt1Yi50'@;
put 'aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgbkUoe30pOyhmdW5jdGlvbiBnWChjLGwpe0tQKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVt'@;
put 'b3ZlRm9ybUdyb3VwKGEpe3ViLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7dWIudGhlbigo'@;
put 'KT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsZnVuY3Rpb24gbVgoYyxsKXtjLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksbC5mb3JFYWNo'@;
put 'KGE9Pntjb25zdCBkPWEuY29udHJvbDsic3VibWl0Ij09PWQudXBkYXRlT24mJmQuX3BlbmRpbmdDaGFuZ2UmJihhLnZpZXdUb01vZGVsVXBkYXRlKGQuX3BlbmRpbmdWYWx1ZSksZC5fcGVuZGluZ0NoYW5nZT0hMSl9KX0odGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJt'@;
put 'aXQuZW1pdChhKSwiZGlhbG9nIj09PWE/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShhPXZvaWQgMCl7dGhpcy5mb3JtLnJlc2V0KGEpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9'@;
put 'dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKGEpe3JldHVybiBhLnBvcCgpLGEubGVuZ3RoP3RoaXMuZm9ybS5nZXQoYSk6dGhpcy5mb3JtfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKSh0dChpdSwxMCksdHQoeXAsMTApLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5k'@;
put 'aW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoInN1Ym1pdCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TdWJtaXQoZil9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25SZXNldCgpfSl9LGlucHV0czp7b3B0aW9uczpbIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6'@;
put 'e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W3RpKFtpNmVdKSxlb119KSxjfSkoKTtmdW5jdGlvbiB2WChjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gX1goYyl7cmV0dXJuIm9iamVjdCI9PXR5'@;
put 'cGVvZiBjJiZudWxsIT09YyYmMj09PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmInZhbHVlImluIGMmJiJkaXNhYmxlZCJpbiBjfWNvbnN0IGVGPWNsYXNzIGV4dGVuZHMgZlh7Y29uc3RydWN0b3IobD1udWxsLGEsZCl7c3VwZXIoJFAoYSkscVAoZCxhKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVs'@;
put 'bCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2'@;
put 'ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLHRFKGEpJiYoYS5ub25OdWxsYWJsZXx8YS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9X1gobCk/bC52YWx1ZTpsKX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhp'@;
put 'cy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxh'@;
put 'PXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFya0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5k'@;
put 'aW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXt2'@;
put 'WCh0aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXt2WCh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLGwpfV9mb3JFYWNoQ2hpbGQobCl7fV9zeW5jUGVu'@;
put 'ZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRW'@;
put 'YWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUobCl7X1gobCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxm'@;
put 'OiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LGE2ZT17cHJvdmlkZTp6dSx1c2VFeGlzdGluZzpJcygoKT0+T3MpfSx5WD0oKCk9PlByb21pc2UucmVzb2x2ZSgpKSgpO2xl'@;
put 'dCBPcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgenV7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9Xyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPVQsdGhpcy5jb250cm9sPW5ldyBlRix0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMubmFt'@;
put 'ZT0iIix0aGlzLnVwZGF0ZT1uZXcgRXIsdGhpcy5fcGFyZW50PWEsdGhpcy5fc2V0VmFsaWRhdG9ycyhkKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaCksdGhpcy52YWx1ZUFjY2Vzc29yPWZ1bmN0aW9uIFFQKGMsbCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGEsZCxoO3JldHVybiBBcnJh'@;
put 'eS5pc0FycmF5KGwpLGwuZm9yRWFjaChmPT57Zi5jb25zdHJ1Y3Rvcj09PVdhP2E9ZjpmdW5jdGlvbiBuNmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLmNvbnN0cnVjdG9yKT09PU41fShmKT9kPWY6aD1mfSksaHx8ZHx8YXx8bnVsbH0oMCxmKX1uZ09uQ2hhbmdlcyhhKXtp'@;
put 'Zih0aGlzLl9jaGVja0ZvckVycm9ycygpLCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBhKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7Y29uc3QgZD1hLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUu'@;
put 'cmVtb3ZlQ29udHJvbCh7bmFtZTpkLHBhdGg6dGhpcy5fZ2V0UGF0aChkKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGEmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGEpLGZ1bmN0aW9uIEpQKGMsbCl7aWYoIWMuaGFzT3duUHJvcGVydHkoIm1vZGVsIikpcmV0dXJuITE7'@;
put 'Y29uc3QgYT1jLm1vZGVsO3JldHVybiEhYS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXMobCxhLmN1cnJlbnRWYWx1ZSl9KGEsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0'@;
put 'aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3Rp'@;
put 'dmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShhKXt0aGlzLnZpZXdNb2RlbD1hLHRoaXMudXBkYXRlLmVtaXQoYSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGly'@;
put 'ZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFs'@;
put 'b25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXtjYih0aGlzLmNvbnRyb2wsdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRW'@;
put 'YWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25z'@;
put 'Lm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShhKXt5WC50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5t'@;
put 'YXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmVTYoZCk7eVgudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRp'@;
put 'c2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiByRShjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGp1LDkpLHR0KGl1LDEwKSx0dCh5cCwxMCksdHQobGgsMTApLHR0KFVhLDgpLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNv'@;
put 'bnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7'@;
put 'dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W3RpKFthNmVdKSxlbyx2YV19KSxjfSkoKSxDcD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRhdGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSksY30pKCk7Y29uc3QgbDZlPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5hRSksbXVsdGk6ITB9O2xldCBhRT0o'@;
put 'KCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57YSgiIj09ZD9udWxsOnBhcnNlRmxvYXQoZCkpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIs'@;
put 'ImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNoYW5nZShmLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW2w2ZV0pLGVvXX0pLGN9KSgpO2NvbnN0IGM2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+bEUpLG11bHRpOiEwfTtsZXQgd1g9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksdTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2goW2EsZF0pfXJlbW92ZShh'@;
put 'KXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChkPT57dGhpcy5faXNTYW1l'@;
put 'R3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5fcGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOndYfSksY30pKCksbEU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVn'@;
put 'aXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9RmkoVjUse29wdGlvbmFsOiEwfSk/P2xifW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rv'@;
put 'ci5nZXQoenUpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhpcy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0'@;
put 'eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVk'@;
put 'fHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tO'@;
put 'YW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KHU2ZSksdHQoRWEpKX0sYy5cdTAyNzVkaXI9'@;
put 'Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2'@;
put 'YWx1ZSJ9LGZlYXR1cmVzOlt0aShbYzZlXSksZW9dfSksY30pKCk7Y29uc3QgbkY9bmV3IFNpKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLHY2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+TTApLG11bHRpOiEwfTtmdW5jdGlvbiBFWChjLGwpe3JldHVybiBudWxs'@;
put 'PT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgTTA9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0'@;
put 'aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgaD1FWCh0aGlzLl9nZXRPcHRpb25JZChhKSxhKTt0aGlzLnNldFByb3BlcnR5KCJ2'@;
put 'YWx1ZSIsaCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGQpLGEodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQo'@;
put 'YSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLGEpKXJldHVybiBkO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZShhKXtjb25zdCBkPWZ1bmN0aW9uIF82ZShjKXtyZXR1cm4gYy5zcGxp'@;
put 'dCgiOiIpWzBdfShhKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhkKT90aGlzLl9vcHRpb25NYXAuZ2V0KGQpOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVk'@;
put 'aXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVh'@;
put 'dHVyZXM6W3RpKFt2NmVdKSxlb119KSxjfSkoKSxsMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24o'@;
put 'KSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKEVYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2'@;
put 'YWx1ZShhKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50'@;
put 'LCJ2YWx1ZSIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpKHR0KE5pKSx0dChGbyksdHQoTTAsOSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLGN9KSgpO2NvbnN0IGI2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJ'@;
put 'cygoKT0+ZGIpLG11bHRpOiEwfTtmdW5jdGlvbiBrWChjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgZGI9KCgp'@;
put 'PT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9'@;
put 'd3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZixfKT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZihfLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPShoLGYpPT57aC5f'@;
put 'c2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCBfPWY7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKysp'@;
put 'e2NvbnN0IGllPXRoaXMuX2dldE9wdGlvblZhbHVlKF9bVF0udmFsdWUpO2gucHVzaChpZSl9fWVsc2V7Y29uc3QgXz1kLm9wdGlvbnM7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKyspe2NvbnN0IFc9X1tUXTtpZihXLnNlbGVjdGVkKXtjb25zdCBpZT10aGlzLl9nZXRPcHRpb25WYWx1ZShX'@;
put 'LnZhbHVlKTtoLnB1c2goaWUpfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdpc3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRo'@;
put 'aXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24geTZlKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEp'@;
put 'O3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVkaXI9Q3Io'@;
put 'e3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0KX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W3RpKFtiNmVdKSxl'@;
put 'b119KSxjfSkoKSxjMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVl'@;
put 'KGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZWxlY3Q/KHRoaXMuX3ZhbHVlPWEsdGhp'@;
put 'cy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQu'@;
put 'bmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRl'@;
put 'bGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChkYiw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksY30pKCksSFg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWlu'@;
put 'aj1taSh7aW1wb3J0czpbd1hdfSksY30pKCkscWw9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKSxENmU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92'@;
put 'aWRlOm5GLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKTtmdW5jdGlvbiBJNmUoYyxsKXt0aGlzLnY9Yyx0aGlzLms9bH1mdW5jdGlvbiBkRShjKXt2YXIgbCxhO2Z1bmN0aW9uIGQoZixfKXt0cnl7dmFyIFQ9Y1tmXShfKSxXPVQudmFsdWUsaWU9VyBp'@;
put 'bnN0YW5jZW9mIEk2ZTtQcm9taXNlLnJlc29sdmUoaWU/Vy52OlcpLnRoZW4oZnVuY3Rpb24ocGUpe2lmKGllKXt2YXIgd2U9InJldHVybiI9PT1mPyJyZXR1cm4iOiJuZXh0IjtpZighVy5rfHxwZS5kb25lKXJldHVybiBkKHdlLHBlKTtwZT1jW3dlXShwZSkudmFsdWV9aChULmRvbmU/InJl'@;
put 'dHVybiI6Im5vcm1hbCIscGUpfSxmdW5jdGlvbihwZSl7ZCgidGhyb3ciLHBlKX0pfWNhdGNoKHBlKXtoKCJ0aHJvdyIscGUpfX1mdW5jdGlvbiBoKGYsXyl7c3dpdGNoKGYpe2Nhc2UicmV0dXJuIjpsLnJlc29sdmUoe3ZhbHVlOl8sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOmwucmVq'@;
put 'ZWN0KF8pO2JyZWFrO2RlZmF1bHQ6bC5yZXNvbHZlKHt2YWx1ZTpfLGRvbmU6ITF9KX0obD1sLm5leHQpP2QobC5rZXksbC5hcmcpOmE9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oZixfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVCxXKXt2YXIgaWU9e2tleTpmLGFyZzpfLHJl'@;
put 'c29sdmU6VCxyZWplY3Q6VyxuZXh0Om51bGx9O2E/YT1hLm5leHQ9aWU6KGw9YT1pZSxkKGYsXykpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBjLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9ZEUucHJvdG90eXBlWyJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0'@;
put 'ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZEUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsYyl9LGRFLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0'@;
put 'aHJvdyIsYyl9LGRFLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIixjKX07Y2xhc3MgaEV7c3RhdGljIGdldFRyYXBFbGVtZW50cygpe3JldHVyblsuLi4kbC5zdGF0ZS5mb2N1c1RyYXBJdGVtc119c3RhdGljIHNldFRyYXBFbGVtZW50'@;
put 'cyhsKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImh0bWwiKTtudWxsIT09YSYmZnVuY3Rpb24gc0YoYywuLi5sKXtjJiZsLmZvckVhY2goKFthLGRdKT0+eyExPT09ZHx8bnVsbD09PWQ/Yy5yZW1vdmVBdHRyaWJ1dGUoYSk6Yy5zZXRBdHRyaWJ1dGUoYSxkKyIiKX0pfShhLFsi'@;
put 'Y2RzLWZvY3VzLXRyYXAiLCEhbC5sZW5ndGgmJiIiXSksJGwuc3RhdGUuZm9jdXNUcmFwSXRlbXM9Wy4uLmxdfXN0YXRpYyByZW1vdmVUcmFwRWxlbWVudChsKXt0aGlzLmdldFRyYXBFbGVtZW50cygpLmxlbmd0aDwxfHx0aGlzLnNldFRyYXBFbGVtZW50cyhbLi4udGhpcy5nZXRUcmFwRWxl'@;
put 'bWVudHMoKS5maWx0ZXIoYT0+YS5mb2N1c1RyYXBJZCE9PWwuZm9jdXNUcmFwSWQpXSl9c3RhdGljIHNldEN1cnJlbnQobCl7bD8uZm9jdXNUcmFwSWQmJnRoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpLmZpbHRlcihhPT5hLmZvY3VzVHJhcElkIT09bC5m'@;
put 'b2N1c1RyYXBJZCksbF0pfXN0YXRpYyBhY3RpdmF0ZVByZXZpb3VzQ3VycmVudCgpe3RoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpXS5zbGljZSgwLC0xKSl9c3RhdGljIGdldEN1cnJlbnQoKXtyZXR1cm4gZnVuY3Rpb24gTDZlKGMpe3JldHVybiBjLmxl'@;
put 'bmd0aD9jW2MubGVuZ3RoLTFdOnZvaWQgMH0odGhpcy5nZXRUcmFwRWxlbWVudHMoKSl8fG51bGx9fWNvbnN0IFU2ZT1FSygzLChjLGwsYSk9PnshZnVuY3Rpb24gc21lKGMsbCl7cmV0dXJuIGx8fChsPXdpbmRvdyYmd2luZG93LmN1c3RvbUVsZW1lbnRzKSwhbHx8ISFsLmdldChjKX0oYyl8'@;
put 'fGZ1bmN0aW9uIFVnZSgpe3JldHVybiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmPy5pbmNsdWRlcygibG9jYWxob3N0OjYwMDYiKX0oKT8oYS5kZWZpbmUoYyxsKSxBSygpLHdpbmRvdyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09'@;
put 'YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6SDUud2FybihjKyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBWWChjLGwpe3BLKCkmJmtLKFsiY3VzdG9t'@;
put 'RWxlbWVudHMiXSkmJlU2ZShjLGwsd2luZG93LmN1c3RvbUVsZW1lbnRzKX1sZXQgQlg9ITE7ZnVuY3Rpb24gWjZlKGMpe2lmKChjPU1hdGgudHJ1bmMoYyl8fDApPDAmJihjKz10aGlzLmxlbmd0aCksIShjPDB8fGM+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tjXX1pZighQlgpe0JYPSEw'@;
put 'O2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WjZlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEw'@;
put 'fSl9bGV0IGpYPSExLHpYPSExO2Z1bmN0aW9uIFVYKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRyaWJ1dGUobCk6bnVsbH0s'@;
put 'c2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9alh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJyb2xlIil8fChVWChFbGVtZW50LnByb3RvdHlwZSwicm9sZSIsInJvbGUiKSxqWD0hMCks'@;
put 'elh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFiZWwiKXx8KHpYPSEwLFsiQWN0aXZlRGVzY2VuZGFudCIsIkF0b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJDb2xJbmRleCIsIkNvbFNwYW4iLCJDb250cm9scyIsIkN1'@;
put 'cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVkIiwiRmxvd1RvIiwiSGFzUG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJMYWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZlIiwiTW9kYWwi'@;
put 'LCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIsIlBvc0luU2V0IiwiUHJlc3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlwdGlvbiIsIlJvd0NvdW50IiwiUm93SW5kZXgiLCJSb3dT'@;
put 'cGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIsIlZhbHVlVGV4dCJdLmZvckVhY2goYz0+VVgoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2MpKSk7Y29uc3QgZkU9d2luZG93LGFG'@;
put 'PWZFLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1mRS5TaGFkeUNTU3x8ZkUuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLGxGPVN5bWJvbCgpLFpYPW5ldyBX'@;
put 'ZWFrTWFwO2NsYXNzIFlYe2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLl8kY3NzUmVzdWx0JD0hMCxkIT09bEYpdGhyb3cgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PWwsdGhp'@;
put 'cy50PWF9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgbD10aGlzLm87Y29uc3QgYT10aGlzLnQ7aWYoYUYmJnZvaWQgMD09PWwpe2NvbnN0IGQ9dm9pZCAwIT09YSYmMT09PWEubGVuZ3RoO2QmJihsPVpYLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVw'@;
put 'bGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZaWC5zZXQoYSxsKSl9cmV0dXJuIGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCBjRj0oYywuLi5sKT0+e2NvbnN0IGE9MT09PWMubGVuZ3RoP2NbMF06bC5yZWR1Y2UoKGQsaCxmKT0+ZCsoXz0+e2lmKCEwPT09Xy5fJGNz'@;
put 'c1Jlc3VsdCQpcmV0dXJuIF8uY3NzVGV4dDtpZigibnVtYmVyIj09dHlwZW9mIF8pcmV0dXJuIF87dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK18rIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mg'@;
put 'bm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkoaCkrY1tmKzFdLGNbMF0pO3JldHVybiBuZXcgWVgoYSxjLGxGKX0sV1g9YUY/Yz0+YzpjPT5jIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD8obD0+e2xldCBhPSIiO2Zvcihjb25z'@;
put 'dCBkIG9mIGwuY3NzUnVsZXMpYSs9ZC5jc3NUZXh0O3JldHVybihjPT5uZXcgWVgoInN0cmluZyI9PXR5cGVvZiBjP2M6YysiIix2b2lkIDAsbEYpKShhKX0pKGMpOmM7dmFyIHVGO2NvbnN0IHBFPXdpbmRvdyxHWD1wRS50cnVzdGVkVHlwZXMsRzZlPUdYP0dYLmVtcHR5U2NyaXB0OiIiLCRY'@;
put 'PXBFLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxkRj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9HNmU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9jOkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9t'@;
put 'QXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1y'@;
put 'ZXR1cm4gYX19LHFYPShjLGwpPT5sIT09YyYmKGw9PWx8fGM9PWMpLGhGPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmRGLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpxWH0sZkY9ImZpbmFsaXplZCI7Y2xhc3MgZzggZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigp'@;
put 'e3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEsdGhpcy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1udWxsLHRoaXMudSgpfXN0YXRpYyBhZGRJbml0aWFsaXplcihsKXt2YXIgYTt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0oYT10aGlzLmgpJiZ2b2lk'@;
put 'IDAhPT1hP2E6dGhpcy5oPVtdKS5wdXNoKGwpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fJEVwKGQsYSk7dm9pZCAwIT09'@;
put 'aCYmKHRoaXMuXyRFdi5zZXQoaCxkKSxsLnB1c2goaCkpfSksbH1zdGF0aWMgY3JlYXRlUHJvcGVydHkobCxhPWhGKXtpZihhLnN0YXRlJiYoYS5hdHRyaWJ1dGU9ITEpLHRoaXMuZmluYWxpemUoKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChsLGEpLCFhLm5vQWNjZXNzb3ImJiF0aGlz'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgZD0ic3ltYm9sIj09dHlwZW9mIGw/U3ltYm9sKCk6Il9fIitsLGg9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxkLGEpO3ZvaWQgMCE9PWgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxsLGgpfX1z'@;
put 'dGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsYSxkKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXtjb25zdCBmPXRoaXNbbF07dGhpc1thXT1oLHRoaXMucmVxdWVzdFVwZGF0ZShsLGYsZCl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0'@;
put 'UHJvcGVydHlPcHRpb25zKGwpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChsKXx8aEZ9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShmRikpcmV0dXJuITE7dGhpc1tmRl09ITA7Y29uc3QgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYo'@;
put 'bC5maW5hbGl6ZSgpLHZvaWQgMCE9PWwuaCYmKHRoaXMuaD1bLi4ubC5oXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGwuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgYT10aGlzLnBy'@;
put 'b3BlcnRpZXMsZD1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhhKV07Zm9yKGNvbnN0IGggb2YgZCl0aGlzLmNyZWF0ZVByb3BlcnR5KGgsYVtoXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXpl'@;
put 'U3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMobCl7Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBkPW5ldyBTZXQobC5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaCBvZiBkKWEudW5zaGlmdChXWChoKSl9ZWxzZSB2b2lkIDAh'@;
put 'PT1sJiZhLnB1c2goV1gobCkpO3JldHVybiBhfXN0YXRpYyBfJEVwKGwsYSl7Y29uc3QgZD1hLmF0dHJpYnV0ZTtyZXR1cm4hMT09PWQ/dm9pZCAwOiJzdHJpbmciPT10eXBlb2YgZD9kOiJzdHJpbmciPT10eXBlb2YgbD9sLnRvTG93ZXJDYXNlKCk6dm9pZCAwfXUoKXt2YXIgbDt0aGlzLl8k'@;
put 'RV89bmV3IFByb21pc2UoYT0+dGhpcy5lbmFibGVVcGRhdGluZz1hKSx0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLl8kRWcoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSxudWxsPT09KGw9dGhpcy5jb25zdHJ1Y3Rvci5oKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9PmEodGhpcykpfWFkZENvbnRy'@;
put 'b2xsZXIobCl7dmFyIGEsZDsobnVsbCE9PShhPXRoaXMuXyRFUykmJnZvaWQgMCE9PWE/YTp0aGlzLl8kRVM9W10pLnB1c2gobCksdm9pZCAwIT09dGhpcy5yZW5kZXJSb290JiZ0aGlzLmlzQ29ubmVjdGVkJiYobnVsbD09PShkPWwuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWR8fGQuY2Fs'@;
put 'bChsKSl9cmVtb3ZlQ29udHJvbGxlcihsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5zcGxpY2UodGhpcy5fJEVTLmluZGV4T2YobCk+Pj4wLDEpfV8kRWcoKXt0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGwsYSk9Pnt0aGlz'@;
put 'Lmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fJEVpLnNldChhLHRoaXNbYV0pLGRlbGV0ZSB0aGlzW2FdKX0pfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbDtjb25zdCBhPW51bGwhPT0obD10aGlzLnNoYWRvd1Jvb3QpJiZ2b2lkIDAhPT1sP2w6dGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25z'@;
put 'dHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7cmV0dXJuKChjLGwpPT57YUY/Yy5hZG9wdGVkU3R5bGVTaGVldHM9bC5tYXAoYT0+YSBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/YTphLnN0eWxlU2hlZXQpOmwuZm9yRWFjaChhPT57Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz'@;
put 'dHlsZSIpLGg9ZkUubGl0Tm9uY2U7dm9pZCAwIT09aCYmZC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixoKSxkLnRleHRDb250ZW50PWEuY3NzVGV4dCxjLmFwcGVuZENoaWxkKGQpfSl9KShhLHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksYX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBs'@;
put 'O3ZvaWQgMD09PXRoaXMucmVuZGVyUm9vdCYmKHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSksdGhpcy5lbmFibGVVcGRhdGluZyghMCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1h'@;
put 'Lmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1lbmFibGVVcGRhdGluZyhsKXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShk'@;
put 'PWEuaG9zdERpc2Nvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhsLGEsZCl7dGhpcy5fJEFLKGwsZCl9XyRFTyhsLGEsZD1oRil7dmFyIGg7Y29uc3QgZj10aGlzLmNvbnN0cnVjdG9yLl8kRXAobCxkKTtpZih2b2lkIDAh'@;
put 'PT1mJiYhMD09PWQucmVmbGVjdCl7Y29uc3QgXz0odm9pZCAwIT09KG51bGw9PT0oaD1kLmNvbnZlcnRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmgudG9BdHRyaWJ1dGUpP2QuY29udmVydGVyOmRGKS50b0F0dHJpYnV0ZShhLGQudHlwZSk7dGhpcy5fJEVsPWwsbnVsbD09Xz90aGlzLnJlbW92'@;
put 'ZUF0dHJpYnV0ZShmKTp0aGlzLnNldEF0dHJpYnV0ZShmLF8pLHRoaXMuXyRFbD1udWxsfX1fJEFLKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmNvbnN0cnVjdG9yLGY9aC5fJEV2LmdldChsKTtpZih2b2lkIDAhPT1mJiZ0aGlzLl8kRWwhPT1mKXtjb25zdCBfPWguZ2V0UHJvcGVydHlPcHRp'@;
put 'b25zKGYpLFQ9ImZ1bmN0aW9uIj09dHlwZW9mIF8uY29udmVydGVyP3tmcm9tQXR0cmlidXRlOl8uY29udmVydGVyfTp2b2lkIDAhPT0obnVsbD09PShkPV8uY29udmVydGVyKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5mcm9tQXR0cmlidXRlKT9fLmNvbnZlcnRlcjpkRjt0aGlzLl8kRWw9Zix0'@;
put 'aGlzW2ZdPVQuZnJvbUF0dHJpYnV0ZShhLF8udHlwZSksdGhpcy5fJEVsPW51bGx9fXJlcXVlc3RVcGRhdGUobCxhLGQpe2xldCBoPSEwO3ZvaWQgMCE9PWwmJigoKGQ9ZHx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRQcm9wZXJ0eU9wdGlvbnMobCkpLmhhc0NoYW5nZWR8fHFYKSh0aGlzW2xdLGEp'@;
put 'Pyh0aGlzLl8kQUwuaGFzKGwpfHx0aGlzLl8kQUwuc2V0KGwsYSksITA9PT1kLnJlZmxlY3QmJnRoaXMuXyRFbCE9PWwmJih2b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1hcCksdGhpcy5fJEVDLnNldChsLGQpKSk6aD0hMSksIXRoaXMuaXNVcGRhdGVQZW5kaW5nJiZoJiYo'@;
put 'dGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIGw9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bC5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e3lpZWxkIGwuXyRFX31jYXRjaChkKXtQcm9taXNlLnJlamVjdChkKX1jb25zdCBhPWwuc2NoZWR1bGVVcGRhdGUoKTtyZXR1cm4gbnVs'@;
put 'bCE9YSYmKHlpZWxkIGEpLCFsLmlzVXBkYXRlUGVuZGluZ30pKCl9c2NoZWR1bGVVcGRhdGUoKXtyZXR1cm4gdGhpcy5wZXJmb3JtVXBkYXRlKCl9cGVyZm9ybVVwZGF0ZSgpe3ZhciBsO2lmKCF0aGlzLmlzVXBkYXRlUGVuZGluZylyZXR1cm47dGhpcy5fJEVpJiYodGhpcy5fJEVpLmZvckVh'@;
put 'Y2goKGgsZik9PnRoaXNbZl09aCksdGhpcy5fJEVpPXZvaWQgMCk7bGV0IGE9ITE7Y29uc3QgZD10aGlzLl8kQUw7dHJ5e2E9dGhpcy5zaG91bGRVcGRhdGUoZCksYT8odGhpcy53aWxsVXBkYXRlKGQpLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goaD0+e3Zh'@;
put 'ciBmO3JldHVybiBudWxsPT09KGY9aC5ob3N0VXBkYXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5jYWxsKGgpfSksdGhpcy51cGRhdGUoZCkpOnRoaXMuXyRFaygpfWNhdGNoKGgpe3Rocm93IGE9ITEsdGhpcy5fJEVrKCksaH1hJiZ0aGlzLl8kQUUoZCl9d2lsbFVwZGF0ZShsKXt9XyRBRShs'@;
put 'KXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5mb3JFYWNoKGQ9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWQuaG9zdFVwZGF0ZWQpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNhbGwoZCl9KSx0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLmhhc1VwZGF0ZWQ9ITAsdGhp'@;
put 'cy5maXJzdFVwZGF0ZWQobCkpLHRoaXMudXBkYXRlZChsKX1fJEVrKCl7dGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITF9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0'@;
put 'aGlzLl8kRV99c2hvdWxkVXBkYXRlKGwpe3JldHVybiEwfXVwZGF0ZShsKXt2b2lkIDAhPT10aGlzLl8kRUMmJih0aGlzLl8kRUMuZm9yRWFjaCgoYSxkKT0+dGhpcy5fJEVPKGQsdGhpc1tkXSxhKSksdGhpcy5fJEVDPXZvaWQgMCksdGhpcy5fJEVrKCl9dXBkYXRlZChsKXt9Zmlyc3RVcGRh'@;
put 'dGVkKGwpe319dmFyIHBGO2c4W2ZGXT0hMCxnOC5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwLGc4LmVsZW1lbnRTdHlsZXM9W10sZzguc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifSwkWD8uKHtSZWFjdGl2ZUVsZW1lbnQ6Zzh9KSwobnVsbCE9PSh1Rj1wRS5yZWFjdGl2ZUVsZW1l'@;
put 'bnRWZXJzaW9ucykmJnZvaWQgMCE9PXVGP3VGOnBFLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMiIpO2NvbnN0IGdFPXdpbmRvdyxtOD1nRS50cnVzdGVkVHlwZXMsS1g9bTg/bTguY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6Yz0+Y30pOnZvaWQg'@;
put 'MCxtRT0iJGxpdCQiLFRmPWBsaXQkJHsoTWF0aC5yYW5kb20oKSsiIikuc2xpY2UoOSl9JGAsZ0Y9Ij8iK1RmLCQ2ZT1gPCR7Z0Z9PmAsajU9ZG9jdW1lbnQsaGI9KCk9Pmo1LmNyZWF0ZUNvbW1lbnQoIiIpLGZiPWM9Pm51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMmJiJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBjLFhYPUFycmF5LmlzQXJyYXksbUY9IlsgXHRcblxmXHJdIixwYj0vPCg/OighLS18XC9bXmEtekEtWl0pfChcLz9bYS16QS1aXVtePlxzXSopfChcLz8kKSkvZyxRWD0vLS0+L2csZUo9Lz4vZyx6NT1SZWdFeHAoYD58JHttRn0oPzooW15cXHMiJz49L10rKSgke21GfSo9JHtt'@;
put 'Rn0qKD86W14gXHRcblxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsImciKSx0Sj0vJy9nLG5KPS8iL2cscko9L14oPzpzY3JpcHR8c3R5bGV8dGV4dGFyZWF8dGl0bGUpJC9pLGlKPWM9PihsLC4uLmEpPT4oe18kbGl0VHlwZSQ6YyxzdHJpbmdzOmwsdmFsdWVzOmF9KSx2Rj1pSigxKSxxNmU9'@;
put 'aUooMiksdjg9U3ltYm9sLmZvcigibGl0LW5vQ2hhbmdlIiksRGM9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxvSj1uZXcgV2Vha01hcCxVNT1qNS5jcmVhdGVUcmVlV2Fsa2VyKGo1LDEyOSxudWxsLCExKTtmdW5jdGlvbiBzSihjLGwpe2lmKCFBcnJheS5pc0FycmF5KGMpfHwhYy5oYXNP'@;
put 'd25Qcm9wZXJ0eSgicmF3IikpdGhyb3cgRXJyb3IoImludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJheSIpO3JldHVybiB2b2lkIDAhPT1LWD9LWC5jcmVhdGVIVE1MKGwpOmx9Y2xhc3MgZ2J7Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFy'@;
put 'dHM9W107bGV0IGY9MCxfPTA7Y29uc3QgVD1sLmxlbmd0aC0xLFc9dGhpcy5wYXJ0cyxbaWUscGVdPSgoYyxsKT0+e2NvbnN0IGE9Yy5sZW5ndGgtMSxkPVtdO2xldCBoLGY9Mj09PWw/Ijxzdmc+IjoiIixfPXBiO2ZvcihsZXQgVD0wO1Q8YTtUKyspe2NvbnN0IFc9Y1tUXTtsZXQgaWUscGUs'@;
put 'd2U9LTEsRWU9MDtmb3IoO0VlPFcubGVuZ3RoJiYoXy5sYXN0SW5kZXg9RWUscGU9Xy5leGVjKFcpLG51bGwhPT1wZSk7KUVlPV8ubGFzdEluZGV4LF89PT1wYj8iIS0tIj09PXBlWzFdP189UVg6dm9pZCAwIT09cGVbMV0/Xz1lSjp2b2lkIDAhPT1wZVsyXT8ockoudGVzdChwZVsyXSkmJiho'@;
put 'PVJlZ0V4cCgiPC8iK3BlWzJdLCJnIikpLF89ejUpOnZvaWQgMCE9PXBlWzNdJiYoXz16NSk6Xz09PXo1PyI+Ij09PXBlWzBdPyhfPWg/P3BiLHdlPS0xKTp2b2lkIDA9PT1wZVsxXT93ZT0tMjood2U9Xy5sYXN0SW5kZXgtcGVbMl0ubGVuZ3RoLGllPXBlWzFdLF89dm9pZCAwPT09cGVbM10/'@;
put 'ejU6JyInPT09cGVbM10/bko6dEopOl89PT1uSnx8Xz09PXRKP189ejU6Xz09PVFYfHxfPT09ZUo/Xz1wYjooXz16NSxoPXZvaWQgMCk7Y29uc3QgWmU9Xz09PXo1JiZjW1QrMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9Xz09PXBiP1crJDZlOndlPj0wPyhkLnB1c2goaWUpLFcuc2xp'@;
put 'Y2UoMCx3ZSkrbUUrVy5zbGljZSh3ZSkrVGYrWmUpOlcrVGYrKC0yPT09d2U/KGQucHVzaCh2b2lkIDApLFQpOlplKX1yZXR1cm5bc0ooYyxmKyhjW2FdfHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9Z2IuY3JlYXRlRWxlbWVudChpZSxkKSxVNS5j'@;
put 'dXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsMj09PWEpe2NvbnN0IHdlPXRoaXMuZWwuY29udGVudCxFZT13ZS5maXJzdENoaWxkO0VlLnJlbW92ZSgpLHdlLmFwcGVuZCguLi5FZS5jaGlsZE5vZGVzKX1mb3IoO251bGwhPT0oaD1VNS5uZXh0Tm9kZSgpKSYmVy5sZW5ndGg8VDspe2lmKDE9'@;
put 'PT1oLm5vZGVUeXBlKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7Y29uc3Qgd2U9W107Zm9yKGNvbnN0IEVlIG9mIGguZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihFZS5lbmRzV2l0aChtRSl8fEVlLnN0YXJ0c1dpdGgoVGYpKXtjb25zdCBaZT1wZVtfKytdO2lmKHdlLnB1c2goRWUpLHZvaWQgMCE9'@;
put 'PVplKXtjb25zdCBpdD1oLmdldEF0dHJpYnV0ZShaZS50b0xvd2VyQ2FzZSgpK21FKS5zcGxpdChUZiksZXQ9LyhbLj9AXSk/KC4qKS8uZXhlYyhaZSk7Vy5wdXNoKHt0eXBlOjEsaW5kZXg6ZixuYW1lOmV0WzJdLHN0cmluZ3M6aXQsY3RvcjoiLiI9PT1ldFsxXT9jSjoiPyI9PT1ldFsxXT91'@;
put 'SjoiQCI9PT1ldFsxXT9kSjptYn0pfWVsc2UgVy5wdXNoKHt0eXBlOjYsaW5kZXg6Zn0pfWZvcihjb25zdCBFZSBvZiB3ZSloLnJlbW92ZUF0dHJpYnV0ZShFZSl9aWYockoudGVzdChoLnRhZ05hbWUpKXtjb25zdCB3ZT1oLnRleHRDb250ZW50LnNwbGl0KFRmKSxFZT13ZS5sZW5ndGgtMTtp'@;
put 'ZihFZT4wKXtoLnRleHRDb250ZW50PW04P204LmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgWmU9MDtaZTxFZTtaZSsrKWguYXBwZW5kKHdlW1plXSxoYigpKSxVNS5uZXh0Tm9kZSgpLFcucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKHdlW0VlXSxoYigpKX19fWVsc2UgaWYoOD09'@;
put 'PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09Z0YpVy5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IHdlPS0xO2Zvcig7LTEhPT0od2U9aC5kYXRhLmluZGV4T2YoVGYsd2UrMSkpOylXLnB1c2goe3R5cGU6NyxpbmRleDpmfSksd2UrPVRmLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0'@;
put 'ZUVsZW1lbnQobCxhKXtjb25zdCBkPWo1LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gWjUoYyxsLGE9YyxkKXt2YXIgaCxmLF8sVDtpZihsPT09djgpcmV0dXJuIGw7bGV0IFc9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8'@;
put 'dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgaWU9ZmIobCk/dm9pZCAwOmwuXyRsaXREaXJlY3RpdmUkO3JldHVybiBXPy5jb25zdHJ1Y3RvciE9PWllJiYobnVsbD09PShmPVc/Ll8kQU8pfHx2b2lkIDA9PT1mfHxmLmNhbGwoVywhMSksdm9pZCAwPT09aWU/Vz12b2lkIDA6'@;
put 'KFc9bmV3IGllKGMpLFcuXyRBVChjLGEsZCkpLHZvaWQgMCE9PWQ/KG51bGwhPT0oXz0oVD1hKS5fJENvKSYmdm9pZCAwIT09Xz9fOlQuXyRDbz1bXSlbZF09VzphLl8kQ2w9Vyksdm9pZCAwIT09VyYmKGw9WjUoYyxXLl8kQVMoYyxsLnZhbHVlcyksVyxkKSksbH1jbGFzcyBsSntjb25zdHJ1'@;
put 'Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2Nv'@;
put 'bnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOmo1KS5pbXBvcnROb2RlKGQsITApO1U1LmN1cnJlbnROb2RlPWY7bGV0IF89VTUubmV4dE5vZGUoKSxUPTAsVz0wLGllPWhbMF07Zm9yKDt2b2lkIDAhPT1pZTsp'@;
put 'e2lmKFQ9PT1pZS5pbmRleCl7bGV0IHBlOzI9PT1pZS50eXBlP3BlPW5ldyBfOChfLF8ubmV4dFNpYmxpbmcsdGhpcyxsKToxPT09aWUudHlwZT9wZT1uZXcgaWUuY3RvcihfLGllLm5hbWUsaWUuc3RyaW5ncyx0aGlzLGwpOjY9PT1pZS50eXBlJiYocGU9bmV3IGhKKF8sdGhpcyxsKSksdGhp'@;
put 'cy5fJEFWLnB1c2gocGUpLGllPWhbKytXXX1UIT09aWU/LmluZGV4JiYoXz1VNS5uZXh0Tm9kZSgpLFQrKyl9cmV0dXJuIFU1LmN1cnJlbnROb2RlPWo1LGZ9dihsKXtsZXQgYT0wO2Zvcihjb25zdCBkIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1kJiYodm9pZCAwIT09ZC5zdHJpbmdzPyhkLl8k'@;
put 'QUkobCxkLGEpLGErPWQuc3RyaW5ncy5sZW5ndGgtMik6ZC5fJEFJKGxbYV0pKSxhKyt9fWNsYXNzIF84e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3ZhciBmO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1EYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1sLHRoaXMuXyRBQj1hLHRoaXMuXyRBTT1k'@;
put 'LHRoaXMub3B0aW9ucz1oLHRoaXMuXyRDcD1udWxsPT09KGY9aD8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1mfHxmfWdldCBfJEFVKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0obD10aGlzLl8kQU0pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLl8kQVUpJiZ2b2lkIDAhPT1hP2E6'@;
put 'dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0IGw9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgYT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWEmJjExPT09bD8ubm9kZVR5cGUmJihsPWEucGFyZW50Tm9kZSksbH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQg'@;
put 'ZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShsLGE9dGhpcyl7bD1aNSh0aGlzLGwsYSksZmIobCk/bD09PURjfHxudWxsPT1sfHwiIj09PWw/KHRoaXMuXyRBSCE9PURjJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9RGMpOmwhPT10aGlzLl8kQUgmJmwhPT12OCYmdGhpcy5fKGwpOnZv'@;
put 'aWQgMCE9PWwuXyRsaXRUeXBlJD90aGlzLmcobCk6dm9pZCAwIT09bC5ub2RlVHlwZT90aGlzLiQobCk6KGM9PlhYKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRvcl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5v'@;
put 'ZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PURjJiZmYih0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKGo1LmNyZWF0ZVRl'@;
put 'eHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09PWguZWwmJihoLmVsPWdiLmNyZWF0ZUVsZW1lbnQoc0ooaC5oLGguaFswXSksdGhpcy5vcHRpb25z'@;
put 'KSksaCk7aWYoKG51bGw9PT0oYT10aGlzLl8kQUgpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLl8kQUQpPT09Zil0aGlzLl8kQUgudihkKTtlbHNle2NvbnN0IF89bmV3IGxKKGYsdGhpcyksVD1fLnUodGhpcy5vcHRpb25zKTtfLnYoZCksdGhpcy4kKFQpLHRoaXMuXyRBSD1ffX1fJEFDKGwpe2xl'@;
put 'dCBhPW9KLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZvSi5zZXQobC5zdHJpbmdzLGE9bmV3IGdiKGwpKSxhfVQobCl7WFgodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgYT10aGlzLl8kQUg7bGV0IGQsaD0wO2Zvcihjb25zdCBmIG9mIGwp'@;
put 'aD09PWEubGVuZ3RoP2EucHVzaChkPW5ldyBfOCh0aGlzLmsoaGIoKSksdGhpcy5rKGhiKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6ZD1hW2hdLGQuXyRBSShmKSxoKys7aDxhLmxlbmd0aCYmKHRoaXMuXyRBUihkJiZkLl8kQUIubmV4dFNpYmxpbmcsaCksYS5sZW5ndGg9aCl9XyRBUihsPXRo'@;
put 'aXMuXyRBQS5uZXh0U2libGluZyxhKXt2YXIgZDtmb3IobnVsbD09PShkPXRoaXMuXyRBUCl8fHZvaWQgMD09PWR8fGQuY2FsbCh0aGlzLCExLCEwLGEpO2wmJmwhPT10aGlzLl8kQUI7KXtjb25zdCBoPWwubmV4dFNpYmxpbmc7bC5yZW1vdmUoKSxsPWh9fXNldENvbm5lY3RlZChsKXt2YXIg'@;
put 'YTt2b2lkIDA9PT10aGlzLl8kQU0mJih0aGlzLl8kQ3A9bCxudWxsPT09KGE9dGhpcy5fJEFQKXx8dm9pZCAwPT09YXx8YS5jYWxsKHRoaXMsbCkpfX1jbGFzcyBtYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1EYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMu'@;
put 'ZWxlbWVudD1sLHRoaXMubmFtZT1hLHRoaXMuXyRBTT1oLHRoaXMub3B0aW9ucz1mLGQubGVuZ3RoPjJ8fCIiIT09ZFswXXx8IiIhPT1kWzFdPyh0aGlzLl8kQUg9QXJyYXkoZC5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9ZCk6dGhpcy5fJEFIPURjfWdldCB0YWdO'@;
put 'YW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCxhPXRoaXMsZCxoKXtjb25zdCBmPXRoaXMuc3RyaW5ncztsZXQgXz0hMTtpZih2b2lkIDA9PT1mKWw9WjUodGhpcyxsLGEsMCksXz0hZmIobCl8fGwhPT10aGlz'@;
put 'Ll8kQUgmJmwhPT12OCxfJiYodGhpcy5fJEFIPWwpO2Vsc2V7Y29uc3QgVD1sO2xldCBXLGllO2ZvcihsPWZbMF0sVz0wO1c8Zi5sZW5ndGgtMTtXKyspaWU9WjUodGhpcyxUW2QrV10sYSxXKSxpZT09PXY4JiYoaWU9dGhpcy5fJEFIW1ddKSxffHwoXz0hZmIoaWUpfHxpZSE9PXRoaXMuXyRB'@;
put 'SFtXXSksaWU9PT1EYz9sPURjOmwhPT1EYyYmKGwrPShpZT8/IiIpK2ZbVysxXSksdGhpcy5fJEFIW1ddPWllfV8mJiFoJiZ0aGlzLmoobCl9aihsKXtsPT09RGM/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5u'@;
put 'YW1lLGw/PyIiKX19Y2xhc3MgY0ogZXh0ZW5kcyBtYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09RGM/dm9pZCAwOmx9fWNvbnN0IEs2ZT1tOD9tOC5lbXB0eVNjcmlwdDoiIjtjbGFzcyB1SiBl'@;
put 'eHRlbmRzIG1ie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9NH1qKGwpe2wmJmwhPT1EYz90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxLNmUpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKX19Y2xhc3MgZEogZXh0'@;
put 'ZW5kcyBtYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGwsYSxkLGgsZiksdGhpcy50eXBlPTV9XyRBSShsLGE9dGhpcyl7dmFyIGQ7aWYoKGw9bnVsbCE9PShkPVo1KHRoaXMsbCxhLDApKSYmdm9pZCAwIT09ZD9kOkRjKT09PXY4KXJldHVybjtjb25zdCBoPXRoaXMuXyRBSCxmPWw9'@;
put 'PT1EYyYmaCE9PURjfHxsLmNhcHR1cmUhPT1oLmNhcHR1cmV8fGwub25jZSE9PWgub25jZXx8bC5wYXNzaXZlIT09aC5wYXNzaXZlLF89bCE9PURjJiYoaD09PURjfHxmKTtmJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxoKSxfJiZ0aGlzLmVsZW1l'@;
put 'bnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxsKSx0aGlzLl8kQUg9bH1oYW5kbGVFdmVudChsKXt2YXIgYSxkOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShkPW51bGw9PT0oYT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1hP3Zv'@;
put 'aWQgMDphLmhvc3QpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5lbGVtZW50LGwpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChsKX19Y2xhc3MgaEp7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVudD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25z'@;
put 'PWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtaNSh0aGlzLGwpfX1jb25zdCBmSj1nRS5saXRIdG1sUG9seWZpbGxTdXBwb3J0O2ZKPy4oZ2IsXzgpLChudWxsIT09KHBGPWdFLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PXBGP3BGOmdFLmxpdEh0bWxWZXJz'@;
put 'aW9ucz1bXSkucHVzaCgiMi43LjUiKTtjb25zdCBwSj0oYyxsLGEpPT57dmFyIGQsaDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgXz1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09Xyl7Y29uc3QgVD1udWxsIT09KGg9YT8ucmVuZGVyQmVm'@;
put 'b3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPV89bmV3IF84KGwuaW5zZXJ0QmVmb3JlKGhiKCksVCksVCx2b2lkIDAsYT8/e30pfXJldHVybiBfLl8kQUkoYyksX307dmFyIF9GLGJGO2NsYXNzIGI4IGV4dGVuZHMgZzh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVu'@;
put 'dHMpLHRoaXMucmVuZGVyT3B0aW9ucz17aG9zdDp0aGlzfSx0aGlzLl8kRG89dm9pZCAwfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbCxhO2NvbnN0IGQ9c3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO3JldHVybiBudWxsIT09KGw9KGE9dGhpcy5yZW5kZXJPcHRpb25zKS5yZW5kZXJCZWZvcmUp'@;
put 'JiZ2b2lkIDAhPT1sfHwoYS5yZW5kZXJCZWZvcmU9ZC5maXJzdENoaWxkKSxkfXVwZGF0ZShsKXtjb25zdCBhPXRoaXMucmVuZGVyKCk7dGhpcy5oYXNVcGRhdGVkfHwodGhpcy5yZW5kZXJPcHRpb25zLmlzQ29ubmVjdGVkPXRoaXMuaXNDb25uZWN0ZWQpLHN1cGVyLnVwZGF0ZShsKSx0aGlz'@;
put 'Ll8kRG89cEooYSx0aGlzLnJlbmRlclJvb3QsdGhpcy5yZW5kZXJPcHRpb25zKX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRD'@;
put 'YWxsYmFjaygpe3ZhciBsO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCExKX1yZW5kZXIoKXtyZXR1cm4gdjh9fWI4LmZpbmFsaXplZD0hMCxiOC5fJGxpdEVsZW1lbnQkPSEwLG51bGw9PT0oX0Y9'@;
put 'Z2xvYmFsVGhpcy5saXRFbGVtZW50SHlkcmF0ZVN1cHBvcnQpfHx2b2lkIDA9PT1fRnx8X0YuY2FsbChnbG9iYWxUaGlzLHtMaXRFbGVtZW50OmI4fSk7Y29uc3QgZ0o9Z2xvYmFsVGhpcy5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O2dKPy4oe0xpdEVsZW1lbnQ6Yjh9KSwobnVsbCE9PShi'@;
put 'Rj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PWJGP2JGOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMiIpO2NvbnN0IG1KPWNGYEBjaGFyc2V0ICJVVEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlv'@;
put 'dXQtc3BhY2UteHhzLCBjYWxjKDQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2Jh'@;
put 'bC1sYXlvdXQtc3BhY2Utc20sIGNhbGMoMTIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNk'@;
put 'cy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnLCBjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNhbGMoMzIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxh'@;
put 'eW91dH49IndyYXA6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWlt'@;
put 'cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2Rz'@;
put 'LWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1b'@;
put 'Y2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2Vu'@;
put 'dGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0'@;
put 'cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1s'@;
put 'YXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxh'@;
put 'eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXth'@;
put 'bGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0'@;
put 'OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2Fs'@;
put 'aWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXth'@;
put 'bGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2Zs'@;
put 'ZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2Fs'@;
put 'aWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxd'@;
put 'PltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMt'@;
put 'bGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1j'@;
put 'b250ZW50OnN0YXJ0O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0'@;
put 'byl9W2Nkcy1sYXlvdXR+PWdyaWRdPltjZHMtbGF5b3V0Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdo'@;
put 'dCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpz'@;
put 'dHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRj'@;
put 'aH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1p'@;
put 'dGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy'@;
put 'fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmlu'@;
put 'c2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9'@;
put 'ImdhcDp4eHMiXXtnYXA6dmFyKC0tzrQyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dh'@;
put 'cDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5'@;
put 'b3V0fj0icDpzbSJde3BhZGRpbmc6dmFyKC0tzrQ0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFk'@;
put 'ZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60Nikh'@;
put 'aW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRp'@;
put 'bmctbGVmdDp2YXIoLS3OtDUpIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBt'@;
put 'ZDp4bCJde21hcmdpbjp2YXIoLS3OtDcpIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpv'@;
put 'bnRhbC1zdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgt'@;
put 'Z3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4t'@;
put 'Ym90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRl'@;
put 'cn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6'@;
put 'YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91'@;
put 'dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy'@;
put 'dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRv'@;
put 'bTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6'@;
put 'cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl'@;
put 'ZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNh'@;
put 'bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6'@;
put 'OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRp'@;
put 'YSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJn'@;
put 'aW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1j'@;
put 'ZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9'@;
put 'ImFsaWduQG1kOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz'@;
put 'LWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNs'@;
put 'b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy'@;
put 'dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBv'@;
put 'cnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21h'@;
put 'cmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChb'@;
put 'Y2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZl'@;
put 'cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhv'@;
put 'cml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs'@;
put 'XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWlt'@;
put 'cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNl'@;
put 'bGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0p'@;
put 'e21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91'@;
put 'dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6'@;
put 'ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0p'@;
put 'e21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jp'@;
put 'em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpv'@;
put 'bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmln'@;
put 'aHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJv'@;
put 'dHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9u'@;
put 'dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRh'@;
put 'bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bkBtZDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDox'@;
put 'MjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNl'@;
put 'bnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDph'@;
put 'dXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb'@;
put 'Y2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpv'@;
put 'bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRl'@;
put 'ciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIi'@;
put 'XSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz'@;
put 'bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6'@;
put 'b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9y'@;
put 'dGFudH19W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49'@;
put 'Z3JpZF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNh'@;
put 'bF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNk'@;
put 'cy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkw'@;
put 'MCwjMjEzMzNiKSl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5s'@;
put 'aW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh'@;
put 'bC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigt'@;
put 'LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10'@;
put 'eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNw'@;
put 'bGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0t'@;
put 'Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQsNDAwKTtsaW5lLWhlaWdodDp2YXIoLS1j'@;
put 'ZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rp'@;
put 'c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2Vt'@;
put 'KSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4x'@;
put 'NDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwx'@;
put 'LjE2NjY3ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplLGNhbGMoMjAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2Vp'@;
put 'Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo'@;
put 'eS1zZWN0aW9uLWxldHRlci1zcGFjaW5nLC0uMDFlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo'@;
put 'dCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0'@;
put 'aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5'@;
put 'LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LXN1YnNlY3Rpb24tZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh'@;
put 'bC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS4yNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7'@;
put 'ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEu'@;
put 'MjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt'@;
put 'aGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9u'@;
put 'LWxpbmUtaGVpZ2h0LDEuMjVlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0LDQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1i'@;
put 'b2R5LWZvbnQtc2l6ZSxjYWxjKDE0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZywtLjAxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5'@;
put 'cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWln'@;
put 'aHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDow'@;
put 'O21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgt'@;
put 'aGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2Nv'@;
put 'bnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBv'@;
put 'Z3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuMjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz'@;
put 'LWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n'@;
put 'cmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5'@;
put 'OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1j'@;
put 'ZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWln'@;
put 'aHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnld'@;
put 'OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29u'@;
put 'ZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2Jh'@;
put 'bC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt'@;
put 'dHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwj'@;
put 'MDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy'@;
put 'YXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29s'@;
put 'b3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xv'@;
put 'ci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1m'@;
put 'YW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRl'@;
put 'bjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9y'@;
put 'dGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzou'@;
put 'MDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtj'@;
put 'ZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtj'@;
put 'b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJv'@;
put 'dHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp'@;
put 'ZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw'@;
put 'aHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jl'@;
put 'e2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10'@;
put 'ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt'@;
put 'YXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJp'@;
put 'dDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpu'@;
put 'b25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNw'@;
put 'bGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29s'@;
put 'b3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1'@;
put 'cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1l'@;
put 'dmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6'@;
put 'OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2li'@;
put 'bGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9j'@;
put 'dXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIHlGKGMpe3JldHVy'@;
put 'bmBjYWxjKCgke2N9IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y29uc3QgdDhlPShjLGwpPT4ibWV0aG9kIj09PWwua2luZCYmbC5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiBsLmRlc2NyaXB0b3IpP3suLi5sLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXks'@;
put 'Yyl9fTp7a2luZDoiZmllbGQiLGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpsLmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiBsLmluaXRpYWxpemVyJiYodGhpc1tsLmtleV09bC5pbml0aWFsaXplci5jYWxsKHRoaXMp'@;
put 'KX0sZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19LG44ZT0oYyxsLGEpPT57bC5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGMpfTtmdW5jdGlvbiB2SihjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9uOGUoYyxsLGEpOnQ4ZShjLGwpfWZ1bmN0aW9uIF9KKGMs'@;
put 'bCl7c3dpdGNoKGwmJmwudHlwZSl7Y2FzZSBBcnJheTpjYXNlIE9iamVjdDpyZXR1cm57cmVmbGVjdDohMSwuLi5sfTtjYXNlIFN0cmluZzpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hfHxudWxsfSwuLi5sfTtjYXNlIE51bWJl'@;
put 'cjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksLi4ubH07Y2FzZSBCb29sZWFuOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpGNShjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmE/IiI6bnVsbCxmcm9tQXR0cmlidXRlOmE9PmZ1bmN0aW9uIHo2ZShjKXtyZXR1cm4g'@;
put 'bnVsbCE9YyYmIiIrYyE9ImZhbHNlIn0oYSl9LC4uLmx9O2Nhc2UgRGF0ZTpyZXR1cm57cmVmbGVjdDohMSxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6YT0+bmV3IERhdGUoYSl9LC4uLmx9O2RlZmF1bHQ6cmV0dXJuey4uLmx9fX1mdW5jdGlvbiBrbChjKXtyZXR1cm4obCxhKT0+KGM/LnJl'@;
put 'cXVpcmVkJiZmdW5jdGlvbiByOGUoYyxsLGEpe2NvbnN0IGQ9Yy5maXJzdFVwZGF0ZWQ7Yy5maXJzdFVwZGF0ZWQ9ZnVuY3Rpb24oaCl7aWYoYSYmYS5yZXF1aXJlZCYmX3AodGhpc1tsXSkpe2NvbnN0IGY9YS5yZXF1aXJlZE1lc3NhZ2V8fGZ1bmN0aW9uKF89Indhcm5pbmciLFQsVyl7Y29u'@;
put 'c3QgaWU9Vy50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke3dLKF8pfTogJHtUfSBpcyByZXF1aXJlZCB0byB1c2UgJHtpZX0gY29tcG9uZW50LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhtSygpP2BBbmd1bGFyOiA8JHtpZX0gWyR7VH1dPSIuLi4i'@;
put 'PjwvJHtpZX0+XG5gOiIiKSsoX0soKT9gVnVlOiA8JHtpZX0gOiR7VH09Ii4uLiI+PC8ke2llfT5cbmA6IiIpKyh2SygpP2BSZWFjdDogPCR7ZnVuY3Rpb24gWWdlKGMpe3JldHVybiB3SyhmdW5jdGlvbiBaZ2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQo'@;
put 'MCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oaWUpfSAke3BlPVQscGUuc3RhcnRzV2l0aCgiYXJpYSIpP0Y1KHBlKTpwZX09ey4uLn0gLz5cbmA6IiIpK2BIVE1MOiA8JHtpZX0gJHtGNShUKX09Ii4uLiI+PC8ke2llfT5cbkphdmFT'@;
put 'Y3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7aWV9JykuJHtUfSA9ICcuLi4nO1xuXG5gO3ZhciBwZX0oYS5yZXF1aXJlZCxsLHRoaXMudGFnTmFtZSk7aWYoImVycm9yIj09PWEucmVxdWlyZWQpdGhyb3cgRXJyb3IoZik7SDUud2FybihmLHRoaXMpfWQmJmQuY2FsbCh0aGlzLGgp'@;
put 'fX0obCxhLGMpLHZKKF9KKGEsYykpKGwsYSkpfWZ1bmN0aW9uIGJKKGMpe3JldHVybihsLGEpPT57Y29uc3QgZD1fSihhLGMpO3JldHVybiBkJiYoZC5yZWZsZWN0PSEhYz8ucmVmbGVjdCYmYy5yZWZsZWN0LGQucmVmbGVjdCYmIWM/LmF0dHJpYnV0ZSYmKGQuYXR0cmlidXRlPSJfIitGNShh'@;
put 'KSkpLHZKKGQpKGwsYSl9fXZhciBjaCxzOGU9Y0ZgQGtleWZyYW1lcyBmYWRlSW5BbmRPdXR7MCUsdG97b3BhY2l0eTowfTc1JXtvcGFjaXR5OjF9fTpob3N0ey0tY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcs'@;
put 'Y2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYg'@;
put 'KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6dmFyKC0tY29sb3Ip'@;
put 'O2NvbG9yOnZhcigtLWNvbG9yKTtjb250YWluOnN0cmljdDtjdXJzb3I6aW5oZXJpdH1zdmd7ZGlzcGxheTpibG9ja306aG9zdChbc2l6ZSo9eHNdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lk'@;
put 'dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFy'@;
put 'KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXNtXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0'@;
put 'aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZh'@;
put 'cigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bWRdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dp'@;
put 'ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6'@;
put 'dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1sZ10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp'@;
put 'O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13'@;
put 'aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14bF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNl'@;
put 'LDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp'@;
put 'O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14eGxdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2Rz'@;
put 'LWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz'@;
put 'ZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp'@;
put 'KSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFy'@;
put 'KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpfTpob3N0KFtzaXplKj1maXRdKXtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2NvbnRhaW46bGF5b3V0fTpob3N0KFtzdGF0dXM9c3VjY2Vzc10pey0tY29sb3I6dmFyKC0tY2Rz'@;
put 'LWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtzdGF0dXM9ZGFuZ2VyXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAy'@;
put 'MjAwKSl9Omhvc3QoW3N0YXR1cz13YXJuaW5nXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbc3RhdHVzPWluZm9dKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z'@;
put 'dGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtzdGF0dXM9bmV1dHJhbF0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYx'@;
put 'NjkpKX06aG9zdChbaW52ZXJzZV0pey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCAjY2JkNGQ4KX06aG9zdChbZGlyZWN0aW9uPXVwXSl7dHJhbnNmb3JtOnJvdGF0ZSgwKX06aG9zdChbZGlyZWN0aW9uPWRvd25dKXt0cmFuc2Zvcm06cm90YXRlKDE4'@;
put 'MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1yaWdodF0pe3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTpob3N0KFtkaXJlY3Rpb249bGVmdF0pe3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX06aG9zdChbZmxpcD1ob3Jpem9udGFsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9'@;
put 'Omhvc3QoW2ZsaXA9dmVydGljYWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX0uYWxlcnQsLmJhZGdle2ZpbGw6dmFyKC0tYmFkZ2UtY29sb3IsdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDAp'@;
put 'KSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2U9ZGFuZ2VyXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxp'@;
put 'YXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04'@;
put 'MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2U9aW5oZXJpdF0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5'@;
put 'YWQpKX06aG9zdChbYmFkZ2U9bmV1dHJhbF0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbYmFkZ2U9aW5oZXJpdC10cmlhbmdsZV0pey0tYmFkZ2Ut'@;
put 'Y29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZV1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXVtpbnZlcnNlXSl7LS1i'@;
put 'YWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct'@;
put 'ZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2UqPWluaGVyaXRdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFs'@;
put 'aWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9LmNkcy1pbnRlcm5hbC1kb3QtMXthbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1pbiAwcyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ye2FuaW1hdGlvbjpmYWRlSW5B'@;
put 'bmRPdXQgMS44cyBlYXNlLW91dCAuNDIycyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91dCAuNjc1cyBpbmZpbml0ZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5jZHMtaW50ZXJuYWwtZG90LTEsLmNkcy1p'@;
put 'bnRlcm5hbC1kb3QtMiwuY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpub25lfX1gO2Z1bmN0aW9uIHU4ZShjLGwpe2xldCBhPSIiO3N3aXRjaChmdW5jdGlvbiBhOGUoYyl7c3dpdGNoKCEwKXtjYXNlIF9wKGMpOnJldHVybiBjaC5OaWxTaXplVmFsdWU7Y2FzZSBmdW5jdGlvbiB5Sihj'@;
put 'KXtyZXR1cm5bInh4cyIsInhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiXS5pbmRleE9mKGMpPi0xfShjKTpyZXR1cm4gY2guVmFsaWRTaXplU3RyaW5nO2Nhc2UgZnVuY3Rpb24gbEsoYyl7cmV0dXJuIElQKGMpJiYhYUsoYy50cmltKCkpJiYrYz09K2N9KGMpOnJldHVybiBjaC5WYWxp'@;
put 'ZE51bWVyaWNTdHJpbmc7ZGVmYXVsdDpyZXR1cm4gY2guQmFkU2l6ZVZhbHVlfX0oZnVuY3Rpb24gbDhlKGMpe3JldHVybiBfcChjKT8iIjpmdW5jdGlvbiBXZ2UoYyxsLGE9IiIpe2NvbnN0IGQ9Yy5zcGxpdCgiICIpLGg9IiI9PT1hP2QuZmlsdGVyKGY9PmYhPT1sKTpkLm1hcChmPT5mPT09'@;
put 'bD9hOmYpO3JldHVybiBoLmxlbmd0aD4wP2guam9pbigiICIpOiIifShjLCJmaXQiKX0obCkpKXtjYXNlIGNoLlZhbGlkTnVtZXJpY1N0cmluZzpyZXR1cm4gYT15RihwYXJzZUludChsKSksdm9pZCBmdW5jdGlvbiBRNmUoYywuLi5sKXtsLmZvckVhY2goKFthLGRdKT0+e2Muc3R5bGVbYV09'@;
put 'ZH0pfShjLC4uLmZ1bmN0aW9uIGM4ZShjLGwpe3JldHVybiF0YihjKSYmYy5pbmRleE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV06W1sid2lkdGgiLGxdLFsiaGVpZ2h0IixsXSxbIm1pbi13'@;
put 'aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV19KGwsYSkpO2Nhc2UgY2guVmFsaWRTaXplU3RyaW5nOmNhc2UgY2guTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIGU4ZShjLC4uLmwpe2wuZm9yRWFjaChhPT57Yy5zdHlsZVthXT0iIn0pfShjLCJ3aWR0aCIsImhlaWdodCIsIm1p'@;
put 'bi13aWR0aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gd0YoYyl7cmV0dXJuIGMuYmFkZ2UmJigiaW5oZXJpdC10cmlhbmdsZSI9PT1jLmJhZGdlfHwid2FybmluZy10cmlhbmdsZSI9PT1jLmJhZGdlKX0hZnVuY3Rpb24oYyl7Yy5CYWRTaXplVmFsdWU9ImJhZC12'@;
put 'YWx1ZSIsYy5WYWxpZFNpemVTdHJpbmc9InZhbHVlLWlzLXN0cmluZyIsYy5WYWxpZE51bWVyaWNTdHJpbmc9InZhbHVlLWlzLW51bWVyaWMiLGMuTmlsU2l6ZVZhbHVlPSJ2YWx1ZS1pcy1uaWwifShjaHx8KGNoPXt9KSk7Y2xhc3MgbzIgZXh0ZW5kcyBiOHtjb25zdHJ1Y3Rvcigpe3N1cGVy'@;
put 'KC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW21KLHM4ZV19Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuX3NoYXBlfXNldCBzaGFwZShsKXtpZihmdW5jdGlvbiBPZ2UoYyxs'@;
put 'KXtyZXR1cm4hX3AoYykmJnVLKGMsbCl9KGwsdGhpcy5fc2hhcGUpKXtjb25zdCBhPXRoaXMuX3NoYXBlO3RoaXMuX3NoYXBlPWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIsYSl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUobCl7aWYoZnVuY3Rpb24gUmdlKGMs'@;
put 'bCl7cmV0dXJuIGZ1bmN0aW9uIExnZShjKXtyZXR1cm4gWngoU3RyaW5nLGMpfHx0YihjKX0oYykmJnVLKGMsbCl9KGwsdGhpcy5fc2l6ZSkpe2NvbnN0IGE9dGhpcy5fc2l6ZTt0aGlzLl9zaXplPWwsdThlKHRoaXMsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaXplIixhKX19dXBkYXRlZChs'@;
put 'KXtpZihsLmhhcygiaW5uZXJPZmZzZXQiKSYmdGhpcy5pbm5lck9mZnNldD4wKXtjb25zdCBhPXlGKC0xKnRoaXMuaW5uZXJPZmZzZXQpLGQ9YGNhbGMoMTAwJSArICR7eUYoMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1kLHRoaXMuc3ZnLnN0eWxlLmhlaWdo'@;
put 'dD1kLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHthfSAwIDAgJHthfWB9fWZpcnN0VXBkYXRlZChsKXtpZihzdXBlci5maXJzdFVwZGF0ZWQobCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGE9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPSRsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZD0+'@;
put 'eyJpY29uUmVnaXN0cnkiPT09ZC5rZXkmJlZzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZhIT09dGhpcy5zaGFwZSYmKGE9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gSVAoVnMucmVnaXN0cnlbdGhpcy5zaGFwZV0pP3ZGYDxzcGFuIC5pbm5lckhUTUw9IiR7VnMucmVnaXN0cnlbdGhpcy5zaGFwZV19Ij48L3NwYW4+YDpxNmVgPHN2ZyAuaW5uZXJIVE1MPSIke2Z1bmN0aW9u'@;
put 'IGg4ZShjKXtjb25zdCBsPVZzLnJlZ2lzdHJ5W2Muc2hhcGVdPz9Wcy5yZWdpc3RyeS51bmtub3duO2xldCBhPWMuc29saWQmJmwuc29saWQ/bC5zb2xpZDpsLm91dGxpbmU7cmV0dXJuIGMuYmFkZ2UmJiF3RihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQmFkZ2VkPz9hOmwub3V0bGluZUJhZGdl'@;
put 'ZD8/YSksd0YoYykmJihhPWMuc29saWQ/bC5zb2xpZEFsZXJ0ZWQ/P2E6bC5vdXRsaW5lQWxlcnRlZD8/YSksYX0odGhpcykrZnVuY3Rpb24gZDhlKGMpe2xldCBsPSIiO3JldHVybiBjLmJhZGdlJiZ3RihjKT9sPSc8cGF0aCBkPSJNMjYuODUgMS4xNEwyMS4xMyAxMWExLjI4IDEuMjggMCAw'@;
put 'MDEuMSAyaDExLjQ1YTEuMjggMS4yOCAwIDAwMS4xLTJsLTUuNzItOS44NmExLjI4IDEuMjggMCAwMC0yLjIxIDB6IiBjbGFzcz0iYWxlcnQiIC8+JzpjLmJhZGdlJiYobD0nPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iYmFkZ2UiIC8+JyksbH0odGhpcyl9IiB2aWV3Qm94'@;
put 'PSIwIDAgMzYgMzYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3ZnPmB9fU10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsInNp'@;
put 'emUiLG51bGwpLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sbzIucHJvdG90eXBlLCJzb2xpZCIsdm9p'@;
put 'ZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLE10KFtrbCh7dHlwZTpCb29sZWFufSldLG8yLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCks'@;
put 'TXQoW2JKKHt0eXBlOk51bWJlcn0pXSxvMi5wcm90b3R5cGUsImlubmVyT2Zmc2V0Iix2b2lkIDApLE10KFtmdW5jdGlvbiBvOGUoYyxsKXtyZXR1cm4oKHtmaW5pc2hlcjpjLGRlc2NyaXB0b3I6bH0pPT4oYSxkKT0+e3ZhciBoO2lmKHZvaWQgMD09PWQpe2NvbnN0IGY9bnVsbCE9PShoPWEu'@;
put 'b3JpZ2luYWxLZXkpJiZ2b2lkIDAhPT1oP2g6YS5rZXksXz1udWxsIT1sP3traW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6ZixkZXNjcmlwdG9yOmwoYS5rZXkpfTp7Li4uYSxrZXk6Zn07cmV0dXJuIG51bGwhPWMmJihfLmZpbmlzaGVyPWZ1bmN0aW9uKFQpe2MoVCxm'@;
put 'KX0pLF99e2NvbnN0IGY9YS5jb25zdHJ1Y3Rvcjt2b2lkIDAhPT1sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLGwoZCkpLGM/LihmLGQpfX0pKHtkZXNjcmlwdG9yOmE9Pntjb25zdCBkPXtnZXQoKXt2YXIgaCxmO3JldHVybiBudWxsIT09KGY9bnVsbD09PShoPXRoaXMucmVuZGVyUm9v'@;
put 'dCl8fHZvaWQgMD09PWg/dm9pZCAwOmgucXVlcnlTZWxlY3RvcihjKSkmJnZvaWQgMCE9PWY/ZjpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYobCl7Y29uc3QgaD0ic3ltYm9sIj09dHlwZW9mIGE/U3ltYm9sKCk6Il9fIithO2QuZ2V0PWZ1bmN0aW9uKCl7dmFyIGYs'@;
put 'XztyZXR1cm4gdm9pZCAwPT09dGhpc1toXSYmKHRoaXNbaF09bnVsbCE9PShfPW51bGw9PT0oZj10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1fP186bnVsbCksdGhpc1toXX19cmV0dXJuIGR9fSl9KCJzdmciKV0sbzIu'@;
put 'cHJvdG90eXBlLCJzdmciLHZvaWQgMCksVlgoImNkcy1pY29uIixvMik7Y2xhc3MgcDhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXt2YXIgbD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXt5aWVsZCBs'@;
put 'Lmhvc3QudXBkYXRlQ29tcGxldGUsbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGE9PmwuZW11bGF0ZUFjdGl2ZShhKSksbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYT0+bC5lbXVsYXRlQWN0aXZlKGEpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5'@;
put 'dXAiLCgpPT5sLmVtdWxhdGVJbmFjdGl2ZSgpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PmwuZW11bGF0ZUluYWN0aXZlKCkpLGwuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+bC5lbXVsYXRlSW5hY3RpdmUoKSl9KSgpfWVtdWxhdGVBY3RpdmUobCl7'@;
put 'dGhpcy5ob3N0LmRpc2FibGVkfHx0aGlzLmhvc3Q/LnNldEF0dHJpYnV0ZSgiY2RzLWFjdGl2ZSIsIiIpLCJTcGFjZSI9PT1sLmNvZGUmJmwudGFyZ2V0PT09dGhpcy5ob3N0JiZsLnByZXZlbnREZWZhdWx0KCl9ZW11bGF0ZUluYWN0aXZlKCl7dGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgi'@;
put 'Y2RzLWFjdGl2ZSIpfX1jbGFzcyBtOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpeyh0aGlzLmhvc3QuaGFzQXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIil8fHRoaXMuaG9zdC5hcmlhQ29udHJvbHMpJiYo'@;
put 'dGhpcy5ob3N0LmFyaWFIYXNQb3B1cD0idHJ1ZSIsdGhpcy5ob3N0LmFyaWFFeHBhbmRlZD0iZmFsc2UiKX19Y2xhc3MgXzhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7bnVsbCE9PXRoaXMuaG9zdC5kaXNh'@;
put 'YmxlZCYmKHRoaXMuaG9zdC5hcmlhRGlzYWJsZWQ9dGhpcy5ob3N0LmRpc2FibGVkKSx0aGlzLmhvc3QucmVhZG9ubHkmJih0aGlzLmhvc3QuYXJpYURpc2FibGVkPW51bGwpfX1jbGFzcyB5OGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhp'@;
put 'cyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QucHJlc3NlZCYmKHRoaXMuaG9zdC5hcmlhUHJlc3NlZD10aGlzLmhvc3QucHJlc3NlZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFQcmVzc2VkPW51bGwpfX1jbGFzcyBDOGV7Y29uc3Ry'@;
put 'dWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpe3RoaXMuaG9zdC50YWJJbmRleD0wfWhvc3RVcGRhdGVkKCl7dGhpcy5ob3N0LnJvbGU9dGhpcy5ob3N0LnJlYWRvbmx5P251bGw6ImJ1dHRvbiIsdGhpcy5ob3N0LnRhYklu'@;
put 'ZGV4PXRoaXMuaG9zdC5kaXNhYmxlZD8tMTowLHRoaXMuaG9zdC5yZWFkb25seSYmdGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX19Y2xhc3MgTThle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWdldCBjdXJyZW50'@;
put 'QW5jaG9yKCl7cmV0dXJuIkEiPT09dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ/LnRhZ05hbWU/dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ6bnVsbH1ob3N0Q29ubmVjdGVkKCl7dGhpcy5zZXRBbmNob3IoKX1ob3N0VXBkYXRlZCgpe3RoaXMuc2V0QW5jaG9yKCl9c2V0QW5jaG9yKCl7dGhpcy5j'@;
put 'dXJyZW50QW5jaG9yJiZ0aGlzLmN1cnJlbnRBbmNob3IhPT10aGlzLnByZXZpb3VzQW5jaG9yJiYodGhpcy5wcmV2aW91c0FuY2hvcj10aGlzLmN1cnJlbnRBbmNob3IsdGhpcy5ob3N0LnJlYWRvbmx5PSEwLHRoaXMuY3VycmVudEFuY2hvci5zdHlsZS5saW5lSGVpZ2h0PSIwIix0aGlzLmN1'@;
put 'cnJlbnRBbmNob3Iuc3R5bGUudGV4dERlY29yYXRpb249Im5vbmUiKX19Y29uc3QgQ0Y9Yz0+Yz8/RGM7ZnVuY3Rpb24gd0ooYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCl9Y29uc3QgU0Y9bmV3IE1hcChbWyJhcnJvdy1sZWZ0IiwiQXJyb3dMZWZ0Il0sWyJhcnJv'@;
put 'dy1yaWdodCIsIkFycm93UmlnaHQiXSxbImFycm93LXVwIiwiQXJyb3dVcCJdLFsiYXJyb3ctZG93biIsIkFycm93RG93biJdLFsidGFiIiwiVGFiIl0sWyJlbnRlciIsIkVudGVyIl0sWyJlc2NhcGUiLCJFc2NhcGUiXSxbInNwYWNlIiwiICJdLFsiaG9tZSIsIkhvbWUiXSxbImVuZCIsIkVu'@;
put 'ZCJdXSk7Y2xhc3MgRThle3N0YXRpYyBnZXQga2V5Y29kZXMoKXtyZXR1cm4gSGdlKFNGKX1zdGF0aWMgYWRkKGwsYSl7U0Yuc2V0KGwsYSl9c3RhdGljIGhhcyhsKXtyZXR1cm4gU0YuaGFzKGwpfXN0YXRpYyBnZXRDb2RlKGwsYT10aGlzLmtleWNvZGVzKXtyZXR1cm4gZnVuY3Rpb24gazhl'@;
put 'KGMsbCl7cmV0dXJuIGwuZ2V0KGMpfHwiIn0obCxhKX19ZnVuY3Rpb24gTUYoYyxsKXtyZXR1cm4gRThlLmdldENvZGUobCk9PT1jLmtleX12YXIgdWg7IWZ1bmN0aW9uKGMpe2MuQXJyb3dVcD0iQXJyb3dVcCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5BcnJvd0xlZnQ9IkFycm93TGVm'@;
put 'dCIsYy5BcnJvd1JpZ2h0PSJBcnJvd1JpZ2h0IixjLkVuZD0iRW5kIixjLkhvbWU9IkhvbWUiLGMuUGFnZVVwPSJQYWdlVXAiLGMuUGFnZURvd249IlBhZ2VEb3duIn0odWh8fCh1aD17fSkpO2NsYXNzIE84ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvc3Q9bCx0aGlzLnRyaWdnZXJOYXRpdmVC'@;
put 'dXR0b25CZWhhdmlvckhhbmRsZXI9dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IuYmluZCh0aGlzKSx0aGlzLmVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3JIYW5kbGVyPXRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvci5iaW5kKHRoaXMpLHRoaXMuaG9zdC5hZGRD'@;
put 'b250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7dGhpcy5zZXRCdXR0b25UeXBlKCksdGhpcy5zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl9c2V0QnV0dG9uVHlwZSgpeyF0aGlzLmhvc3QudHlwZSYmdGhpcy5ob3N0LmNsb3Nlc3QoImZvcm0iKSYmKHRoaXMuaG9zdC50eXBlPSJzdWJt'@;
put 'aXQiKX1zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl7dGhpcy5ob3N0LnJlYWRvbmx5fHx0aGlzLmhvc3QuZGlzYWJsZWQ/KHRoaXMuaG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3JIYW5kbGVyKSx0aGlzLmhvc3QucmVt'@;
put 'b3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvckhhbmRsZXIpKToodGhpcy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvckhhbmRsZXIpLHRoaXMuaG9zdC5hZGRFdmVudExp'@;
put 'c3RlbmVyKCJrZXl1cCIsdGhpcy5lbXVsYXRlS2V5Qm9hcmRFdmVudEJlaGF2aW9ySGFuZGxlcikpfWVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3IobCl7IWZ1bmN0aW9uIEE4ZShjLGwsYSl7Yy5maWx0ZXIoZD0+TUYobCxkKSkubGVuZ3RoPjAmJmEoKX0oWyJlbnRlciIsInNwYWNlIl0s'@;
put 'bCwoKT0+eyJzdWJtaXQiPT09dGhpcy5ob3N0LnR5cGU/dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCk6dGhpcy5ob3N0LmNsaWNrKCksd0oobCl9KX10cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCl7aWYodGhpcy5ob3N0LmRpc2FibGVkKXdKKGwpO2Vsc2UgaWYoIWwu'@;
put 'ZGVmYXVsdFByZXZlbnRlZCl7Y29uc3QgYT1mdW5jdGlvbiBMOGUoYyxsLGEpe2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5hcHBlbmRDaGlsZChkKSxwSihjLGwse3JlbmRlckJlZm9yZTpkLC4uLmF9KTtjb25zdCBoPWQucHJldmlvdXNTaWJsaW5nO3JldHVybiBk'@;
put 'LnJlbW92ZSgpLGh9KHZGYDxidXR0b24gYXJpYS1oaWRkZW49InRydWUiIHJvbGU9InByZXNlbnRhdGlvbiIgP2Rpc2FibGVkPSIke3RoaXMuaG9zdC5kaXNhYmxlZH0iIHRhYmluZGV4PSItMSIgc3R5bGU9ImRpc3BsYXk6bm9uZSFpbXBvcnRhbnQiIHZhbHVlPSIke0NGKHRoaXMuaG9zdC52'@;
put 'YWx1ZSl9IiBuYW1lPSIke0NGKHRoaXMuaG9zdC5uYW1lKX0iIHR5cGU9IiR7Q0YodGhpcy5ob3N0LnR5cGUpfSI+PC9idXR0b24+YCx0aGlzLmhvc3QpO2E/LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIix7cmVsYXRlZFRhcmdldDp0aGlzLmhvc3QsY29tcG9zZWQ6ITB9'@;
put 'KSksYT8ucmVtb3ZlKCl9fX1jbGFzcyBGOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QuZXhwYW5kZWQmJih0aGlzLmhvc3QuYXJpYUV4cGFuZGVkPXRoaXMuaG9zdC5leHBhbmRl'@;
put 'ZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFFeHBhbmRlZD1udWxsKX19bGV0IHMyPWNsYXNzIGV4dGVuZHMgYjh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Rpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVy'@;
put 'biB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYyl7Y29uc3QgbD10aGlzLl9kaXNhYmxlZDt0aGlzLl9kaXNhYmxlZD1jLHRoaXMucmVxdWVzdFVwZGF0ZSgiZGlzYWJsZWQiLGwpfX07TXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJwcmVzc2VkIix2b2lkIDApLE10'@;
put 'KFtrbCh7dHlwZTpCb29sZWFufSldLHMyLnByb3RvdHlwZSwiZXhwYW5kZWQiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJyZWFkb25seSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSxNdChb'@;
put 'a2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJkaXNhYmxlZCIsbnVsbCksTXQoW2tsKHt0eXBl'@;
put 'OlN0cmluZ30pXSxzMi5wcm90b3R5cGUsInBvcHVwIix2b2lkIDApLHMyPU10KFtmdW5jdGlvbiBmOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgcDhlKGwpKX0oKSxmdW5jdGlvbiB3OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgQzhlKGwpKX0o'@;
put 'KSxmdW5jdGlvbiBiOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgeThlKGwpKX0oKSxmdW5jdGlvbiBQOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgRjhlKGwpKX0oKSxmdW5jdGlvbiB2OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihs'@;
put 'PT5uZXcgXzhlKGwpKX0oKSxmdW5jdGlvbiBnOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgbThlKGwpKX0oKSxmdW5jdGlvbiBSOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgTzhlKGwpKX0oKSxmdW5jdGlvbiBTOGUoKXtyZXR1cm4gYz0+Yy5h'@;
put 'ZGRJbml0aWFsaXplcihsPT5uZXcgTThlKGwpKX0oKV0sczIpO2NvbnN0IHZFPXthY3Rpb25zOntzb3J0OiJTb3J0IixleHBhbmQ6IkV4cGFuZCIsY2xvc2U6IkNsb3NlIixyZXNpemU6IlJlc2l6ZSIsZmlsdGVyOiJGaWx0ZXIifSxhbGVydDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3Nl'@;
put 'Iixsb2FkaW5nOiJMb2FkaW5nIixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIn0sZHJvcGRvd246e29wZW46Ik9wZW4ifSxmaWxlOnticm93c2U6ImJyb3dzZSIsZmlsZXM6ImZpbGVzIixyZW1vdmVGaWxlOiJyZW1vdmUgZmls'@;
put 'ZSJ9LG1vZGFsOntjbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgbW9kYWwiLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIG1vZGFsIGNvbnRlbnQiLGNvbnRlbnRCb3g6IlNjcm9sbGFibGUgbW9kYWwgYm9keSIsY29udGVudEVuZDoiRW5kIG9mIG1vZGFsIGNvbnRlbnQifSxuYXZpZ2F0'@;
put 'aW9uOntuYXZpZ2F0aW9uRWxlbWVudDoibmF2aWdhdGlvbiIsbmF2aWdhdGlvbkxhYmVsOiJuYXZpZ2F0aW9uIG1lbnUiLG5hdmlnYXRpb25BYnJpZGdlZFRleHQ6IlZpZXcgYWJyaWRnZWQgbWVudSIsbmF2aWdhdGlvblVuYWJyaWRnZWRUZXh0OiJWaWV3IHVuYWJyaWRnZWQgbWVudSJ9LG92'@;
put 'ZXJsYXk6e2Nsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBkaWFsb2ciLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIGRpYWxvZyBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgZGlhbG9nIGNvbnRlbnQifSxwb3B1cDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIHBvcHVwIixj'@;
put 'b250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBwb3B1cCBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgcG9wdXAgY29udGVudCJ9LHBhc3N3b3JkOntzaG93QnV0dG9uQXJpYUxhYmVsOiJTaG93IHBhc3N3b3JkIixoaWRlQnV0dG9uQXJpYUxhYmVsOiJIaWRlIHBhc3N3b3JkIn0scHJvZ3Jl'@;
put 'c3M6e2xvYWRpbmc6IkxvYWRpbmciLGxvb3Bpbmc6IkxvYWRpbmcifSx0cmVldmlldzp7bG9hZGluZzoiTG9hZGluZyJ9LGdyaWQ6e3Jlc2l6ZUNvbHVtbjoiUmVzaXplIENvbHVtbiIsY2xvc2VEZXRhaWxzOiJDbG9zZSBEZXRhaWxzIixub0RhdGE6Ik5vIFJlc3VsdHMgRm91bmQiLHJvd0Rl'@;
put 'dGFpbFN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIscm93RGV0YWlsRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLGZvb3RlckVuZDoiRW5kIG9mIGdyaWQgcm93cyIsYWN0aW9uOiJBY3Rpb24iLGRyb3BUYXJnZXQ6IkRyb3AgSXRlbSIscGFnaW5hdGlvbjp7bGFiZWw6ImdyaWQgcGFnaW5h'@;
put 'dGlvbiIsZmlyc3RQYWdlOiJnbyB0byBmaXJzdCBwYWdlIixwcmV2aW91c1BhZ2U6ImdvIHRvIHByZXZpb3VzIHBhZ2UiLG5leHRQYWdlOiJnbyB0byBuZXh0IHBhZ2UiLGxhc3RQYWdlOiJnbyB0byBsYXN0IHBhZ2UiLHBhZ2VTaXplOiJyb3dzIHBlciBwYWdlIixwYWdlOiJwYWdlIn19fTtj'@;
put 'bGFzcyBZNXtzdGF0aWMgZ2V0IGtleXMoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKCRsLnN0YXRlLmkxOG5SZWdpc3RyeSkubGVuZ3RoJiYoJGwuc3RhdGUuaTE4blJlZ2lzdHJ5PVA1KHZFLCRsLnN0YXRlLmkxOG5SZWdpc3RyeSkpLFA1KHZFLCRsLnN0YXRlLmkxOG5SZWdpc3RyeSl9c3Rh'@;
put 'dGljIGZpbmRLZXkobCl7Y29uc3QgYT1ZNS5rZXlzO3JldHVybiBPYmplY3Qua2V5cyhhKS5maW5kKGQ9PmRLKGFbZF0sbCkpfXN0YXRpYyBnZXQobCl7cmV0dXJuIGwmJlk1LmtleXNbbF18fHt9fXN0YXRpYyByZXNldCgpeyRsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh7fSx2RSl9c3RhdGlj'@;
put 'IGh5ZHJhdGUobCxhKXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiAkZ2UoYyxsLGEpe3JldHVybiBjLnJlcGxhY2UoL1wkXHsuKz9cfS9nLGQ9PmZ1bmN0aW9uIEZnZShjLGwsYT1gXCR7JHtjfX1gKXtyZXR1cm4gYy5zcGxpdCgiLiIpLnJlZHVjZSgoZCxoKT0+e3RyeXtjb25zdCBmPWRb'@;
put 'aF07c3dpdGNoKCEwKXtjYXNlIG51bGw9PT1mOmNhc2UhMT09PWY6Y2FzZSIiPT09ZjpjYXNlIDA9PT1mOnJldHVybiBmO2RlZmF1bHQ6cmV0dXJuIGZ8fGF9fWNhdGNoe3JldHVybiBhfX0sbCl9KGQuc3Vic3RyKDIsZC5sZW5ndGgtMykudHJpbSgpLGwsYSkpfShKU09OLnN0cmluZ2lmeShs'@;
put 'KSxhKSl9c3RhdGljIGxvY2FsaXplKGwpeyRsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh2RSwkbC5zdGF0ZS5pMThuUmVnaXN0cnksbCl9fXZhciBCOGU9Y0ZgOmhvc3R7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNywgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xv'@;
put 'YmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS13aWR0aDp2YXIoLS1pY29uLXdpZHRoKTstLWhlaWdodDp2YXIoLS1pY29uLXdpZHRoKTstLWN1cnNvcjpw'@;
put 'b2ludGVyOy0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwLCAjMmQ0MDQ4KSk7LS1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zLCBjYWxjKDEz'@;
put 'ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tcGFkZGluZzowOy0tb3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUsIEhpZ2hsaWdodCBzb2xpZCAycHgpOy0tb3V0bGluZS1vZmZz'@;
put 'ZXQ6Y2FsYyh2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LCAxcHgpICogLTEpO3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3V0bGluZTowIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dKXtwb2ludGVyLWV2ZW50'@;
put 'czppbml0aWFsO2N1cnNvcjp2YXIoLS1jdXJzb3IpIWltcG9ydGFudH06aG9zdChbc3RhdHVzPWFjdGl2ZV0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9OjpzbG90dGVkKFtzaGFwZT1jbG9z'@;
put 'ZV0pLDo6c2xvdHRlZChbc2hhcGU9aW5mby1jaXJjbGVdKSw6OnNsb3R0ZWQoW3NoYXBlPXRpbWVzXSksOmhvc3QoW3NoYXBlPWNsb3NlXSksOmhvc3QoW3NoYXBlPWluZm8tY2lyY2xlXSl7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCwgY2FsYygxOCAqIDFyZW0gLyB2'@;
put 'YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04LCBjYWxjKDE4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSl9Omhvc3QoOmhvdmVyKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh'@;
put 'Y3Rpb24tY29sb3ItaG92ZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDAsICMxYjJiMzIpKX06aG9zdCg6YWN0aXZlKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y'@;
put 'LWNvbnN0cnVjdGlvbi0xMDAwLCAjMWIyYjMyKSl9Omhvc3QoOmFjdGl2ZSkgLnByaXZhdGUtaG9zdHt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpLyAyKSl9Omhvc3Qo'@;
put 'W2Rpc2FibGVkXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDAsICNhZWI4YmMpKX0ucHJpdmF0ZS1ob3N0ey0taWNvbi1jb2xvcjp2YXIoLS1jb2xvcik7YmFj'@;
put 'a2dyb3VuZDp2YXIoLS1iYWNrZ3JvdW5kKTtwYWRkaW5nOnZhcigtLXBhZGRpbmcpO2NvbG9yOnZhcigtLWNvbG9yKTtmb250LXNpemU6dmFyKC0tZm9udC1zaXplKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOnZhcigt'@;
put 'LXdpZHRoKTttaW4taGVpZ2h0OnZhcigtLWhlaWdodCl9OjpzbG90dGVkKGNkcy1pY29uKSxjZHMtaWNvbnt3aWR0aDp2YXIoLS1pY29uLXdpZHRoKTtoZWlnaHQ6dmFyKC0taWNvbi1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmV9OjpzbG90dGVkKGNkcy1pY29uOm5vdChbc3RhdHVzXSkp'@;
put 'LGNkcy1pY29uey0tY29sb3I6dmFyKC0taWNvbi1jb2xvcil9Omhvc3QoW2Rpc2FibGVkXTphY3RpdmUpe3BvaW50ZXItZXZlbnRzOm5vbmUhaW1wb3J0YW50fS5wcml2YXRlLWhvc3Q6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKC0xKnZhcigtLXdpZHRo'@;
put 'KSAtIDEpO3RvcDpjYWxjKC0xKnZhcigtLWhlaWdodCkgLSAxKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXRvdWNoLXRhcmdldCxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi10b3VjaC10YXJnZXQsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW2Rpc2FibGVkXSkgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZTowIWltcG9ydGFudH06aG9zdCg6Zm9jdXMpIC5wcml2YXRlLWhvc3Q6OmFmdGVy'@;
put 'e291dGxpbmU6dmFyKC0tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tb3V0bGluZS1vZmZzZXQpfUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApezpob3N0KDpmb2N1cykgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3Vz'@;
put 'LXJpbmctY29sb3J9fWA7Y2xhc3MgVzUgZXh0ZW5kcyBzMntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pMThuPVk1LmtleXMuYWN0aW9ucyx0aGlzLmNkc0J1dHRvbkFjdGlvbj0hMH1yZW5kZXIoKXtyZXR1cm4gdkZgPGRpdiBjbGFzcz0icHJpdmF0ZS1ob3N0Ij48'@;
put 'c2xvdD48Y2RzLWljb24gLnNoYXBlPSIke3RoaXMuc2hhcGU/dGhpcy5zaGFwZToiZWxsaXBzaXMtdmVydGljYWwifSIgLnNpemU9IiR7dGhpcy5pY29uU2l6ZX0iID9zb2xpZD0iJHt0aGlzLnByZXNzZWR8fHRoaXMuZXhwYW5kZWR9IiBpbm5lci1vZmZzZXQ9IiR7MX0iPjwvY2RzLWljb24+'@;
put 'PC9zbG90PjwvZGl2PmB9dXBkYXRlZChsKXtzdXBlci51cGRhdGVkKGwpLHRoaXMuYXJpYUxhYmVsfHx0aGlzLnJlYWRvbmx5fHxINS53YXJuKCJBIGFyaWEtbGFiZWwgaXMgcmVxdWlyZWQgZm9yIGludGVyYWN0aXZlIGNkcy1idXR0b24tYWN0aW9uIHR5cGUiLHRoaXMpLGwuaGFzKCJyZWFk'@;
put 'b25seSIpJiYodGhpcy5hcmlhSGlkZGVuPXRoaXMucmVhZG9ubHkmJiF0aGlzLmhhc0F0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpPyJ0cnVlIjpudWxsKX19VzUuc3R5bGVzPVttSixCOGVdLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sVzUucHJvdG90eXBlLCJzaGFwZSIsdm9pZCAwKSxNdChba2wo'@;
put 'e3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sVzUucHJvdG90eXBlLCJhY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxXNS5wcm90b3R5cGUsImljb25TaXplIix2b2lkIDApLE10KFtmdW5jdGlvbiBIOGUoKXtyZXR1cm4oYyxsKT0+e2NvbnN0IGE9Yy5jb25uZWN0ZWRD'@;
put 'YWxsYmFjayxkPWMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7Yy5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe2MuX19pMThuU3ViPSRsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZj0+eyJpMThuUmVnaXN0cnkiPT09Zi5rZXkmJnRoaXMucmVxdWVzdFVwZGF0ZShsKX0pLGEmJmEuYXBwbHko'@;
put 'dGhpcyl9LGMuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtjLl9faTE4blN1Yi51bnN1YnNjcmliZSgpLGQmJmQuYXBwbHkodGhpcyl9O2NvbnN0IGg9e2dldCgpe2NvbnN0IGY9UDUoWTUua2V5c1t0aGlzLl9faTE4bktleV0sdGhpcy5fX2kxOG58fHt9KTtyZXR1cm4gWTUuaHlk'@;
put 'cmF0ZShmLHRoaXMpfSxzZXQoZil7Y29uc3QgXz1mdW5jdGlvbiBOOGUoYyxsKXtpZihfcChjKSl7bGV0IGE9e307aWYobC5oYXNBdHRyaWJ1dGUoImNkcy1pMThuIikpe2NvbnN0IGQ9bC5nZXRBdHRyaWJ1dGUoImNkcy1pMThuIikrIiI7aWYoX3AoZCkpYT17fTtlbHNlIHRyeXthPUpTT04u'@;
put 'cGFyc2UoZCl9Y2F0Y2h7SDUud2FybigiQ2xhcml0eSBpMThuOiBJbnZhbGlkIEpTT04gcGFzc2VkIHRvIGNkcy1pMThuIiksYT17fX19cmV0dXJuIGF9cmV0dXJuIGN9KGYsdGhpcyksVD1mdW5jdGlvbiBWOGUoYyxsLGEsZCl7cmV0dXJuIF9wKGMpP2RLKGEsZCk/e3VwZGF0ZTohMX06e3Vw'@;
put 'ZGF0ZTohMCx2YWx1ZXM6YX06Yz09PWw/e3VwZGF0ZTohMSx2YWx1ZXM6e319Ont1cGRhdGU6ITAsa2V5OmMsdmFsdWVzOnt9fX0oWTUuZmluZEtleShfKXx8IiIsdGhpcy5fX2kxOG5LZXksXyx0aGlzLl9faTE4bik7dm9pZCAwIT09VC5rZXkmJih0aGlzLl9faTE4bktleT1ULmtleSsiIiks'@;
put 'dm9pZCAwIT09VC52YWx1ZXMmJih0aGlzLl9faTE4bj17Li4uVC52YWx1ZXN9KSwhMD09PVQudXBkYXRlJiZ0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnJlcXVlc3RVcGRhdGUobCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdm9pZCAwIT09bD9mdW5jdGlvbihm'@;
put 'LF8sVCl7Y29uc3QgVz1PYmplY3QuZGVmaW5lUHJvcGVydHkoXyxULGYpO3JldHVybiBrbCh7dHlwZTpPYmplY3QsYXR0cmlidXRlOiJjZHMtaTE4biJ9KShXLFQpfShoLGMsbCk6ZnVuY3Rpb24oZixfKXtjb25zdCBUPXtraW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6'@;
put 'Xy5rZXksZGVzY3JpcHRvcjpmfTtyZXR1cm4ga2woe3R5cGU6T2JqZWN0fSkoVCl9KGgsYyl9fSgpXSxXNS5wcm90b3R5cGUsImkxOG4iLHZvaWQgMCksTXQoW2JKKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMCxhdHRyaWJ1dGU6ImNkcy1idXR0b24tYWN0aW9uIn0pXSxXNS5wcm90b3R5cGUs'@;
put 'ImNkc0J1dHRvbkFjdGlvbiIsdm9pZCAwKTtjbGFzcyBTSiBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNoYXBlPSJjbG9zZSJ9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYXJpYUxhYmVsPXRoaXMu'@;
put 'YXJpYUxhYmVsP3RoaXMuYXJpYUxhYmVsOnRoaXMuaTE4bi5jbG9zZX19TXQoW2tsKHt0eXBlOlN0cmluZ30pXSxTSi5wcm90b3R5cGUsInNoYXBlIix2b2lkIDApLFZYKCJjZHMtaW50ZXJuYWwtY2xvc2UtYnV0dG9uIixTSiksVnMuYWRkSWNvbnMoSUspLFZzLmFkZEFsaWFzZXMoWyJ0aW1l'@;
put 'cyIsWyJjbG9zZSJdXSk7Y29uc3QgRW89WyIqIl07ZnVuY3Rpb24gejhlKGMsbCl7aWYoMSZjJiYoVnIoMCksTmUoMSksenIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFU4ZShjLGwpe2lmKDEmYyYmKG1lKDAs'@;
put 'ImRpdiIsMTQpLEplKDEsejhlLDIsMSwibmctY29udGFpbmVyIiwwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWQuQWNjb3JkaW9uU3RhdHVzLkVycm9yKX19ZnVuY3Rpb24gWjhlKGMsbCl7aWYoMSZjJiYoVnIo'@;
put 'MCksTmUoMSksenIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFk4ZShjLGwpe2lmKDEmYyYmKFZyKDApLE5lKDEpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5'@;
put 'cy5zdWNjZXNzKX19ZnVuY3Rpb24gVzhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNSkseHQoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRv'@;
put 'bmUoaCkpfSksbWUoMSwiZGl2IiwxNiksa3IoMiwyKSx5ZSgpKCl9MiZjJiZSZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiBHOGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxKZSgxLFU4ZSwyLDEsImRpdiIsMSksbWUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImJ1dHRv'@;
put 'biIsNCw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlUGFuZWwoKSl9KSxiYSg2LCJhc3luYyIpLG1lKDcsInNwYW4iLDYpLEplKDgsWjhlLDIsMSwibmctY29udGFpbmVyIiwwKSxKZSg5LFk4ZSwyLDEsIm5nLWNvbnRhaW5lciIsMCkseWUoKSxt'@;
put 'ZSgxMCwic3BhbiIsNykscXQoMTEsImNkcy1pY29uIiw4KSgxMiwic3BhbiIsOSkoMTMsImNkcy1pY29uIiwxMCkoMTQsImNkcy1pY29uIiwxMSkseWUoKSxrcigxNSksa3IoMTYsMSkseWUoKSgpLG1lKDE3LCJkaXYiLDEyKSxKZSgxOCxXOGUsMywxLCJkaXYiLDEzKSx5ZSgpKCksenIoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO2xldCBoO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cyE9PWQuQWNjb3JkaW9uU3RhdHVzLkluYWN0aXZlKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKSksQ2UoMiksZHIoImNsci1hY2NvcmRpb24t'@;
put 'aGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShoPVpsKDYsMTYsZC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDpoLmxlbmd0aCl8fGQuYWNjb3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSxSZSgiaWQiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlk'@;
put 'KSkoImRpc2FibGVkIixkLmlzQWNjb3JkaW9uJiZhLmRpc2FibGVkKSxUcigiYXJpYS1kaXNhYmxlZCIsIWQuaXNBY2NvcmRpb24mJmEuZGlzYWJsZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldEFjY29yZGlvbkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSgiYXJpYS1leHBhbmRlZCIsYS5vcGVu'@;
put 'KSxDZSg0KSxSZSgibmdJZiIsYS5zdGF0dXM9PT1kLkFjY29yZGlvblN0YXR1cy5FcnJvciksQ2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09ZC5BY2NvcmRpb25TdGF0dXMuQ29tcGxldGUpLENlKDgpLFJlKCJAc2tpcEluaXRpYWxSZW5kZXIiLHZvaWQgMCkoImlkIixkLmdldEFjY29yZGlv'@;
put 'bkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSxUcigiYXJpYS1oaWRkZW4iLCFhLm9wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlkKSksQ2UoMSksUmUoIm5nSWYiLGEub3Blbil9fWNvbnN0IE1KPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxl'@;
put 'Il0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSwiKiJdLHhKPVsiY2xyLWFjY29yZGlvbi10aXRsZSwgY2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1k'@;
put 'ZXNjcmlwdGlvbiIsIioiXSxnN2U9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gbTdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLHF0KDEsInNwYW4iLDIpLHllKCkpLDImYyYmKENlKDEpLFJlKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gdjdlKGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PVZuKCk7bWUoMCwic3BhbiIpKDEsInNwYW4iLDMpLHh0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLHllKCkoKX0yJmMmJihDZSgxKSxSZSgiQHZh'@;
put 'bGlkYXRlZCIsdm9pZCAwKSl9ZnVuY3Rpb24gXzdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLGtyKDEpLHllKCkpLDImYyYmUmUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1bmN0aW9uIGI3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1jb25zdCB5N2U9W1tbIiIsImNsckNoZWNrYm94'@;
put 'IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sW1sibGFiZWwiXV1dLHc3ZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJlbCJdO2Z1bmN0aW9uIEM3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1mdW5jdGlvbiBTN2UoYyxsKXsxJmMmJmtyKDAsMixbIipuZ0lmIiwic2hvd0hl'@;
put 'bHBlciJdKX1mdW5jdGlvbiBNN2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiB4N2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBFN2UoYyxsKXsxJmMmJmtyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gazdlKGMsbCl7'@;
put 'MSZjJiZrcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBBN2U9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1j'@;
put 'b250cm9sLXN1Y2Nlc3MiXV1dLFQ3ZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sRDdlPVsiY2xyS2V5Rm9jdXMiLCIiXTtmdW5j'@;
put 'dGlvbiBQN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gRjdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gSDdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gTjdlKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxw'@;
put 'ZXIiXSl9ZnVuY3Rpb24gVjdlKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEI3ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgajdlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyJjbHIt'@;
put 'Y29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sejdlPVsibGFiZWwiLCJbY2xySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rp'@;
put 'b24gVTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtUcigiYXJpYS1sYWJlbCIsYS5kYXkpLENlKDEpLGdyKCIgIixhLm5hcnJvdywiICIpfX1mdW5jdGlvbiBaN2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNykscXQo'@;
put 'MSwiY2xyLWRheSIsOCkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24gWTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDUpLEplKDEsWjdlLDIsMSwidGQiLDYpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtD'@;
put 'ZSgxKSxSZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIFc3ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKCkuY2hhbmdlTW9udGgoZikpfSksTmUoMSkseWUoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoKTtkcigiaXMtc2VsZWN0ZWQiLGQ9PT1oLmNhbGVuZGFyTW9udGhJbmRleCksVHIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBHN2UoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jaGFuZ2VZZWFyKGYpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtkcigiaXMtc2Vs'@;
put 'ZWN0ZWQiLGE9PT1kLmNhbGVuZGFyWWVhciksVHIoInRhYmluZGV4IixkLmdldFRhYkluZGV4KGEpKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiAkN2UoYyxsKXsxJmMmJnF0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIHE3ZShjLGwpezEmYyYmcXQoMCwiY2xyLXllYXJw'@;
put 'aWNrZXIiKX1mdW5jdGlvbiBLN2UoYyxsKXsxJmMmJnF0KDAsImNsci1kYXlwaWNrZXIiKX1jb25zdCBYN2U9WyJhY3Rpb25CdXR0b24iXTtmdW5jdGlvbiBKN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gUTdlKGMsbCl7MSZjJiYobWUoMCwiYnV0dG9uIiw4LDkpLHF0KDIs'@;
put 'ImNkcy1pY29uIiwxMCkseWUoKSksMiZjJiZSZSgiZGlzYWJsZWQiLFZlKCkuaXNJbnB1dERhdGVEaXNhYmxlZCl9ZnVuY3Rpb24gZTllKGMsbCl7MSZjJiZxdCgwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDExKX1mdW5jdGlvbiB0OWUoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29u'@;
put 'IiwxMil9ZnVuY3Rpb24gbjllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uIHI5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGk5ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlv'@;
put 'biBvOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHM5ZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0s'@;
put 'YTllPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBsOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9Y29uc3QgYzllPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJl'@;
put 'bCJdXV0sdTllPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gZDllKGMsbCl7MSZjJiZxdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGg5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGY5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDUp'@;
put 'fWZ1bmN0aW9uIHA5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIGc5ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBtOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHY5ZT1bW1si'@;
put 'bGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLF85ZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJj'@;
put 'bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBiOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24geTllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gdzllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu'@;
put 'Y3Rpb24gQzllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gUzllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIE05ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg'@;
put 'eDllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEU5ZT1bImxhYmVsIiwiW2NsclNlbGVjdF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJj'@;
put 'bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBrOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gQTllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gVDllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu'@;
put 'Y3Rpb24gRDllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gSTllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEw5ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg'@;
put 'UjllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sTzllPVsibGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwiY2xyLWNvbnRyb2wtaGVscGVy'@;
put 'IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sUDllPVsiYW5jaG9yIl07ZnVuY3Rpb24gRjllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImJ1dHRvbiIsNikscXQoMywiY2RzLWljb24iLDcpLHllKCkoKSxrcig0KSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoKTtSZSgiaWQiLGEucG9wb3ZlcklkKSxUcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWwpLENlKDMpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1jb25zdCBIOWU9WyJp'@;
put 'bnB1dF9sb3ciXSxOOWU9WyJpbnB1dCJdLFY5ZT1bImNvbHVtblBvcnRhbCJdO2Z1bmN0aW9uIEI5ZShjLGwpezEmYyYma3IoMCl9Y29uc3QgajllPVsicmVzaXplVHJhY2tlciJdLHo5ZT1bImNvbHVtbkhhbmRsZSJdO2Z1bmN0aW9uIFU5ZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gWjll'@;
put 'KGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTApLDImYyYmVHIoImRpcmVjdGlvbiIsVmUoMikuc29ydERpcmVjdGlvbil9ZnVuY3Rpb24gWTllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkuc29ydCgpKX0pLEplKDEsVTllLDEsMCwibmctY29udGFpbmVyIiw4KSxKZSgyLFo5ZSwxLDEsImNkcy1pY29uIiw5KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9JGkoNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLENlKDEpLFJlKCJuZ0lmIixhLnNvcnREaXJl'@;
put 'Y3Rpb24pfX1mdW5jdGlvbiBXOWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDIm'@;
put 'Yyl7Y29uc3QgYT1WZSgpO1JlKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEc5ZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO21lKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO1JlKCJjbHJGaWx0ZXJNYXhQbGFj'@;
put 'ZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1'@;
put 'bmN0aW9uICQ5ZShjLGwpezEmYyYma3IoMCwxKX1mdW5jdGlvbiBxOWUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIEs5ZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEzKSxKZSgxLHE5ZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkseWUoKSksMiZjKXtWZSgpO2NvbnN0IGE9JGkoNik7Q2Uo'@;
put 'MSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiBYOWUoYyxsKXsxJmMmJnF0KDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIil9Y29uc3QgSjllPVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1d'@;
put 'LCIqIl0sUTllPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBldmUoYyxsKXsxJmMmJnF0KDAsImRpdiIsNCl9ZnVuY3Rpb24gdHZlKGMsbCl7MSZjJiZrcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdy'@;
put 'aWQiXSl9ZnVuY3Rpb24gbnZlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiYnV0dG9uIiwxKSxxdCgyLCJjZHMtaWNvbiIsMikseWUoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxUcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBydmU9WyJjZWxs'@;
put 'UG9ydGFsIl07ZnVuY3Rpb24gaXZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBvdmU9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBzdmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGF2ZT1bImRldGFpbEJ1dHRvbiJdLGx2ZT1bInN0aWNreUNlbGxzIl0sY3ZlPVsic2Nyb2xsYWJsZUNlbGxzIl0sdXZl'@;
put 'PVsiY2FsY3VsYXRlZENlbGxzIl07ZnVuY3Rpb24gZHZlKGMsbCl7fWZ1bmN0aW9uIGh2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksSmUoMSxkdmUsMCwwLCJuZy10ZW1wbGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLGQ9JGkoNik7'@;
put 'UmUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksQ2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBmdmUoYyxsKXt9ZnVuY3Rpb24gcHZlKGMsbCl7MSZjJiZKZSgwLGZ2ZSwwLDAsIm5nLXRlbXBsYXRlIiw4KSwyJmMmJihWZSgyKSxS'@;
put 'ZSgibmdUZW1wbGF0ZU91dGxldCIsJGkoNikpKX1mdW5jdGlvbiBndmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDYpLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rpb24o'@;
put 'aCl7QnQoYSk7Y29uc3QgZj1WZSgpO3JldHVybiBqdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxKZSgxLGh2ZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMSksSmUoMixwdmUsMSwxLG51bGwsMikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gbXZlKGMsbCl7fWZ1bmN0aW9uIHZ2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksSmUoMSxtdmUsMCwwLCJuZy10ZW1w'@;
put 'bGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCksZD0kaSg2KTtSZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIF92ZShjLGwpe31mdW5jdGlvbiBidmUoYyxsKXsxJmMmJkpl'@;
put 'KDAsX3ZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKCksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLCRpKDYpKSl9ZnVuY3Rpb24geXZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBFSj1mdW5jdGlvbihjKXtyZXR1cm57ImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiOmN9fTtmdW5jdGlv'@;
put 'biB3dmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE5KSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwyMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS50b2dnbGUoaCkpfSkseWUoKSxtZSgzLCJs'@;
put 'YWJlbCIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLG1lKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgibmdDbGFzcyIsSjIoNyxFSiwhYS5jbHJEZ1NlbGVjdGFi'@;
put 'bGUpKSxDZSgyKSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZCkoImlkIixhLmNoZWNrYm94SWQpKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxUcigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxDZSgxKSxSZSgiZm9yIixhLmNoZWNrYm94SWQp'@;
put 'LENlKDIpLG9yKGEuY2xyRGdSb3dBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIEN2ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTkpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDIzKSx4dCgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWgpfSkseWUoKSxtZSgzLCJsYWJlbCIsMjQpKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgibmdDbGFzcyIsSjIoMTAsRUos'@;
put 'IWEuY2xyRGdTZWxlY3RhYmxlKSksQ2UoMiksUmUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmds'@;
put 'ZT09PWEuaXRlbSkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLFRyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLENlKDEpLFJlKCJmb3IiLGEucmFkaW9JZCksQ2UoMiksb3IoYS5jbHJEZ1Jvd0FyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdz'@;
put 'LmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gU3ZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyNSksa3IoMSwyKSx5ZSgpKX1mdW5jdGlvbiBNdmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZl'@;
put 'KDQpLnRvZ2dsZUV4cGFuZCgpKX0pLHF0KDEsImNkcy1pY29uIiwzMCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoNCk7VHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5j'@;
put 'bHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5kYWJsZUlkKSxDZSgxKSxUcigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZTph'@;
put 'LmNvbW1vblN0cmluZ3Mua2V5cy5leHBhbmQpfX1mdW5jdGlvbiB4dmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItc3Bpbm5lciIsMzEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gRXZlKGMs'@;
put 'bCl7aWYoMSZjJiYoVnIoMCksSmUoMSxNdmUsMiw1LCJidXR0b24iLDI3KSxKZSgyLHh2ZSwyLDEsImNsci1zcGlubmVyIiwyOCksenIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIiwhYS5leHBhbmQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kLmxvYWRp'@;
put 'bmcpfX1mdW5jdGlvbiBrdmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDI2KSxKZSgxLEV2ZSwzLDIsIm5nLWNvbnRhaW5lciIsMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gQXZlKGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzMikoMSwiYnV0dG9uIiwzMywzNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMiksZj1WZSgyKTtyZXR1cm4ganQoZi5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShmLml0ZW0saCkpfSkscXQoMywiY2RzLWljb24iLDM1KSx5'@;
put 'ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGRyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFRyKCJhcmlhLWxhYmVsIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0Rl'@;
put 'dGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLGEuZGV0YWlsU2VydmljZS5pc09wZW4pKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLENlKDIpLFRyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRp'@;
put 'dGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIFR2ZShjLGwpe31mdW5jdGlvbiBEdmUoYyxsKXsxJmMmJkplKDAsVHZlLDAsMCwibmctdGVtcGxhdGUiLDgp'@;
put 'LDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWZ1bmN0aW9uIEl2ZShjLGwpe31mdW5jdGlvbiBMdmUoYyxsKXsxJmMmJkplKDAsSXZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWNvbnN0IFJ2'@;
put 'ZT1mdW5jdGlvbihjKXtyZXR1cm57ImlzLXJlcGxhY2VkIjpjfX07ZnVuY3Rpb24gT3ZlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJkaXYiLDEwKSxWcigyLG51bGwsMTEpLEplKDQsd3ZlLDYsOSwiZGl2IiwxMiksSmUoNSxDdmUsNiwxMiwiZGl2IiwxMiksSmUoNixTdmUsMiww'@;
put 'LCJkaXYiLDEzKSxKZSg3LGt2ZSwyLDEsImRpdiIsMTQpLEplKDgsQXZlLDQsNywiZGl2IiwxNSksenIoKSx5ZSgpLG1lKDksImRpdiIsMTYpKDEwLCJkaXYiLDE3KSxrcigxMSwxKSxqYSgxMixudWxsLDE4KSx5ZSgpLEplKDE0LER2ZSwxLDEsbnVsbCwyKSxKZSgxNSxMdmUsMSwxLG51bGws'@;
put 'MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFJlKCJpZCIsYS5pZCksQ2UoNCksUmUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9U'@;
put 'WVBFLk11bHRpKSxDZSgxKSxSZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxDZSgxKSxSZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLENlKDEpLFJlKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFi'@;
put 'bGUuaGFzRXhwYW5kYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGEuZGV0YWlsU2VydmljZS5lbmFibGVkKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoMTEsUnZlLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxDZSg1KSxSZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLENl'@;
put 'KDEpLFJlKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpfX1jb25zdCBQdmU9W1tbImNsci1kZy1yb3ctZGV0YWlsIl1dLFtbImNsci1kZy1jZWxsIl1dLFtbImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXV1dLEZ2ZT1bImNsci1kZy1yb3ctZGV0YWlsIiwiY2xyLWRnLWNl'@;
put 'bGwiLCJjbHItZGctYWN0aW9uLW92ZXJmbG93Il0sSHZlPVsiZGF0YWdyaWRUYWJsZSJdLE52ZT1bInNjcm9sbGFibGVDb2x1bW5zIl0sVnZlPVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiXSxCdmU9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSxqdmU9WyJkaXNwbGF5ZWRSb3dz'@;
put 'Il0senZlPVsiY2FsY3VsYXRpb25Sb3dzIl07ZnVuY3Rpb24gVXZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwyNCkseHQoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKTtyZXR1cm4gZi5hbGxTZWxlY3RlZD0hZi5hbGxTZWxlY3Rl'@;
put 'ZCxqdChoLnByZXZlbnREZWZhdWx0KCkpfSksbWUoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDI2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYWxsU2VsZWN0ZWQ9aCl9KSx5ZSgpLG1lKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjgpLE5lKDUp'@;
put 'LHllKCkoKSgpLHF0KDYsImRpdiIsMjkpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoImlkIixhLnNlbGVjdEFsbElkKSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksQ2UoMSksUmUoImZv'@;
put 'ciIsYS5zZWxlY3RBbGxJZCksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gWnZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMCkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jbHJEZ1NpbmdsZVNlbGVjdGlv'@;
put 'bkFyaWFMYWJlbCl9ZnVuY3Rpb24gWXZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMSkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwpfWZ1bmN0aW9uIFd2ZShjLGwpezEmYyYmKG1lKDAsImRpdiIs'@;
put 'MzIpLHF0KDEsImRpdiIsMjkpLHllKCkpLDImYyYmVHIoImFyaWEtbGFiZWwiLFZlKCkuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9ZnVuY3Rpb24gR3ZlKGMsbCl7MSZjJiZxdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiAkdmUoYyxsKXsxJmMmJihtZSgwLCJkaXYi'@;
put 'LDMzKSgxLCJjbHItc3Bpbm5lciIsMzQpLE5lKDIsIkxvYWRpbmciKSx5ZSgpKCkpfWNvbnN0IHF2ZT1bW1siY2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRh'@;
put 'aWwiXV1dLEt2ZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZvb3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdLEp2ZT1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gUXZlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiaDIiKSxO'@;
put 'ZSgyKSx5ZSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyl9fWZ1bmN0aW9uIGVfZShjLGwpe31mdW5jdGlvbiB0X2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13'@;
put 'cmFwcGVyIikoMiwiaW5wdXQiLDE0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKF8sIWgpKX0pLHllKCksbWUoMywibGFiZWwiKSxKZSg0LGVfZSwwLDAsIm5nLXRlbXBsYXRl'@;
put 'IiwxNSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMik7Q2UoMiksUmUoImRpc2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLENlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxl'@;
put 'VGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBuX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDE2KSx4dCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmFsbENvbHVtbnNTZWxlY3RlZCgp'@;
put 'KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKX19ZnVuY3Rpb24gcl9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyKSgxLCJkaXYiLDMpKDIsImRpdiIsNCw1KSxOZSg0KSx5ZSgpLEpl'@;
put 'KDUsUXZlLDMsMSwibmctY29udGFpbmVyIiw2KSxrcig2KSxtZSg3LCJidXR0b24iLDcpLHF0KDgsImNkcy1pY29uIiw4KSxtZSg5LCJzcGFuIiw5KSxOZSgxMCkseWUoKSgpKCksbWUoMTEsInVsIiwxMCksSmUoMTIsdF9lLDUsMywibGkiLDExKSx5ZSgpLG1lKDEzLCJkaXYiLDEyKSxrcigx'@;
put 'NCwxKSxKZSgxNSxuX2UsMiwxLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJpZCIsYS5wb3BvdmVySWQpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiks'@;
put 'Q2UoNCksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuY3VzdG9tVG9nZ2xlVGl0bGUpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksQ2UoMSksVHIoInRpdGxlIixhLmNvbW1vblN0'@;
put 'cmluZ3Mua2V5cy5jbG9zZSksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbiksQ2UoMyksUmUoIm5nSWYiLCFhLmN1c3RvbVRvZ2dsZUJ1dHRvbil9'@;
put 'fWNvbnN0IGlfZT1bW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dXSxvX2U9WyJjbHItZGctY29sdW1uLXRvZ2dsZS10aXRsZSIsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdO2Z1bmN0aW9uIGxfZShjLGwpe2lm'@;
put 'KDEmYyYmKFZyKDApLG1lKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLHF0KDMsImlucHV0IiwzKSxtZSg0LCJsYWJlbCIpLE5lKDUpLHllKCksbWUoNiwic3BhbiIsNCksTmUoNykseWUoKSgpKCksenIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoNSksb3IoYS5zZWxl'@;
put 'Y3Rpb24uY3VycmVudC5sZW5ndGgpLENlKDIpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIGNfZShjLGwpezEmYyYmcXQoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiB1X2UoYyxsKXtpZigxJmMmJihWcigwKSxrcigxLDEpLEplKDIs'@;
put 'Y19lLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLG1lKDMsImRpdiIsNSksa3IoNCwyKSx5ZSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyYmIWEudG9nZ2xlKX19Y29uc3QgZF9lPVtbWyJjbHItZGctcGFnaW5hdGlv'@;
put 'biJdXSxbWyJjbHItZGctY29sdW1uLXRvZ2dsZSJdXSwiKiJdLGhfZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLCIqIl07ZnVuY3Rpb24gZl9lKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w'@;
put 'bGljaXQ7UmUoIm5nVmFsdWUiLGEpLENlKDEpLG9yKGEpfX1jb25zdCBwX2U9WyJjdXJyZW50UGFnZUlucHV0Il07ZnVuY3Rpb24gZ19lKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0KSxrcigxLDEpLHllKCkpfWZ1bmN0aW9uIG1fZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImlu'@;
put 'cHV0IiwxNywxOCkseHQoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGgpKX0pLHllKCl9aWYoMiZj'@;
put 'KXtjb25zdCBhPVZlKDMpO1JlKCJzaXplIixhLnBhZ2UubGFzdC50b1N0cmluZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmN1cnJlbnRQYWdlKX19ZnVuY3Rpb24gdl9lKGMsbCl7aWYoMSZjJiYobWUoMCwi'@;
put 'c3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxvcihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIF9fZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNSkoMSwiYnV0dG9uIiw2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEp'@;
put 'LGp0KFZlKDIpLnBhZ2UuY3VycmVudD0xKX0pLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkscXQoNCwiY2RzLWljb24iLDgpLHllKCksbWUoNSwiYnV0dG9uIiw5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5w'@;
put 'YWdlLmN1cnJlbnQtMSl9KSxtZSg2LCJzcGFuIiw3KSxOZSg3KSx5ZSgpLHF0KDgsImNkcy1pY29uIiwxMCkseWUoKSxKZSg5LG1fZSwyLDMsImlucHV0IiwxMSksSmUoMTAsdl9lLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTIsa2MpLE5lKDEyLCIgXHhhMC9ceGEwIiksbWUoMTMsInNwYW4i'@;
put 'KSxOZSgxNCkseWUoKSxtZSgxNSwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGp0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksbWUoMTYsInNwYW4iLDcpLE5lKDE3KSx5ZSgpLHF0KDE4LCJjZHMtaWNvbiIs'@;
put 'MTQpLHllKCksbWUoMTksImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxtZSgyMCwic3BhbiIsNyksTmUoMjEpLHllKCkscXQoMjIsImNkcy1pY29uIiwxNikseWUoKSgp'@;
put 'fWlmKDImYyl7Y29uc3QgYT0kaSgxMSksZD1WZSgyKTtDZSgxKSxSZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxDZSgyKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLENlKDIp'@;
put 'LFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksQ2UoMiksUmUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFn'@;
put 'ZUlucHV0KSgibmdJZkVsc2UiLGEpLENlKDQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxDZSgxKSxvcihkLnBhZ2UubGFzdCksQ2UoMSksUmUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudD49ZC5wYWdlLmxhc3QpLFRyKCJhcmlhLWxhYmVsIixk'@;
put 'LmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksQ2UoMiksb3IoZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLENlKDIpLFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2Up'@;
put 'LENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24gYl9lKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxnX2UsMiwwLCJkaXYiLDEpLG1lKDIsImRpdiIsMiksa3IoMykseWUoKSxKZSg0LF9fZSwyMywxNiwiZGl2IiwzKSx6cigpKSwyJmMpe2NvbnN0IGE9'@;
put 'VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLENlKDMpLFJlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24geV9lKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiZGl2IiwxOSksTmUoMikseWUoKSxtZSgzLCJkaXYiLDUpKDQsImJ1'@;
put 'dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxtZSg1LCJzcGFuIiw3KSxOZSg2KSx5ZSgpLHF0KDcsImNkcy1pY29uIiwxMCkseWUoKSxtZSg4LCJzcGFuIiksTmUoOSks'@;
put 'eWUoKSxtZSgxMCwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxtZSgxMSwic3BhbiIsNyksTmUoMTIpLHllKCkscXQoMTMsImNkcy1pY29uIiwxNCkseWUoKSgp'@;
put 'LHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksYjAoIiAiLGEucGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxDZSgyKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIs'@;
put 'YS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDMpLG9yKGEucGFnZS5jdXJyZW50KSxDZSgxKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksVHIoImFyaWEtbGFi'@;
put 'ZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IHdfZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLENfZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gU19lKGMsbCl7MSZj'@;
put 'JiZxdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZUcigiZGlyZWN0aW9uIixWZSgpLmNhcmV0RGlyZWN0aW9uKX1mdW5jdGlvbiBNX2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5z'@;
put 'dGFja1ZpZXdDaGFuZ2VkKX19ZnVuY3Rpb24geF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSxrcigxLDIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0h1KCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLFRyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFi'@;
put 'ZWxsZWRieSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBFX2U9W1tbImNsci1zdGFjay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxrX2U9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl0sQV9lPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0s'@;
put 'VF9lPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBIX2UoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIE5fZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsSF9lLDEsMCwibmctY29udGFpbmVyIiwyKSx6cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgyKTtDZSgx'@;
put 'KSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIFZfZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsTl9lLDIsMiwibmctY29udGFpbmVy'@;
put 'IiwxKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3QgQl9lPVsiY29udGVudENvbnRhaW5lciJdO2Z1bmN0aW9uIGpfZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1WbigpO21lKDAsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxxdCgxLCJjZHMtaWNv'@;
put 'biIsMTApLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksVHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gel9lKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMSkscXQoMSwic3BhbiIsMTIpLHllKCkpfWZ1bmN0aW9u'@;
put 'IFVfZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCkseHQoImNoYW5nZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSko'@;
put 'ImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSx5ZSgpLHF0KDIsImxhYmVsIiwxNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxYMigiaWQiLCIiLGEubm9kZUlkLCItY2hlY2siKSxSZSgiY2hlY2tlZCIsYS5fbW9kZWwu'@;
put 'c2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuSU5ERVRFUk1JTkFURSksQ2UoMSksWDIoImZvciIsIiIsYS5ub2RlSWQsIi1jaGVjayIpfX1mdW5jdGlvbiBaX2UoYyxsKXsxJmMmJiht'@;
put 'ZSgwLCJzcGFuIiksTmUoMSwiIHNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gWV9lKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiB1bnNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gV19lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNiksSmUoMSxaX2UsMiwwLCJzcGFuIiwxNyks'@;
put 'SmUoMixZX2UsMiwwLCJzcGFuIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuYXJpYVNlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuYXJpYVNlbGVjdGVkKX19Y29uc3QgR19lPVsiKiIsW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFu'@;
put 'ZGVkIiwiIl1dXSwkX2U9WyIqIiwiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSJdO2Z1bmN0aW9uIHFfZShjLGwpezEmYyYmcXQoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZjJiZSZSgiY2hpbGRyZW4iLFZlKCkuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290'@;
put 'KX1mdW5jdGlvbiBLX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2UoKSl9KSxxdCgxLCJjZHMtaWNvbiIsNSkseWUoKX0yJmMmJlRyKCJhcmlhLWxhYmVsIixWZSgyKS5j'@;
put 'bHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVuY3Rpb24gWF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGtyKDIpLHllKCksSmUoMyxLX2UsMiwxLCJidXR0b24iLDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJhbGVydC1oaWRkZW4iLGEuaGlkZGVuKSgi'@;
put 'YWxlcnQtc20iLGEuaXNTbWFsbCkoImFsZXJ0LWFwcC1sZXZlbCIsYS5pc0FwcExldmVsKSxSZSgibmdDbGFzcyIsYS5hbGVydENsYXNzKSxDZSgzKSxSZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9uIEpfZShjLGwpezEmYyYmcXQoMCwiY2xyLWFsZXJ0cy1wYWdlciIsMSksMiZjJiZS'@;
put 'ZSgiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLFZlKCkuY3VycmVudEFsZXJ0SW5kZXgpfWNvbnN0IFFfZT1bW1siY2xyLWFsZXJ0Il1dXSxlYmU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiByYmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGliZT1bInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiXTtmdW5j'@;
put 'dGlvbiBvYmUoYyxsKXtpZigxJmMmJihtZSgwLCJzZWN0aW9uIiwxKSxrcigxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiYWN0aXZlIixhLmFjdGl2ZSksUmUoImlkIixhLnRhYkNvbnRlbnRJZCkoImhpZGRlbiIsIWEuYWN0aXZlKSxUcigiYXJpYS1sYWJlbGxlZGJ5IixhLmFyaWFM'@;
put 'YWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IHNiZT1bInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIl07ZnVuY3Rpb24gYWJlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwibGkiLDQpLGphKDIsNSkseWUoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGlj'@;
put 'aXQ7Q2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfX1mdW5jdGlvbiBsYmUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLGFiZSwzLDEsIm5nLWNvbnRhaW5lciIsMiksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUo'@;
put 'KTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIGNiZShjLGwpezEmYyYmamEoMCw1KSwyJmMmJlJlKCJuZ1RlbXBsYXRlT3V0bGV0IixWZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rp'@;
put 'b24gdWJlKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxjYmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSx6cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gZGJlKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMikseHQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLGZmKSgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEp'@;
put 'LFZlKCk7Y29uc3QgZj0kaSg0KTtyZXR1cm4ganQoVmUoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGgsZikpfSwhMSxmZikoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLEplKDEsdWJlLDIsMSwibmctY29udGFpbmVyIiwx'@;
put 'KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZlcyl9fWZ1bmN0aW9uIGhiZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImRpdiIsNikoMiwibGkiLDcpKDMsImJ1dHRvbiIsOCw5KSx4dCgibW91c2Vk'@;
put 'b3duIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xl'@;
put 'T3ZlcmZsb3dPbkNsaWNrKCkpfSkscXQoNSwiY2RzLWljb24iLDEwKSx5ZSgpKCksSmUoNixkYmUsMiwxLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDExKSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksZHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxDZSgy'@;
put 'KSxkcigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksVHIoInRhYmluZGV4IixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFhLnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUp'@;
put 'LENlKDIpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSksQ2UoMSksUmUoIm5nSWYiLGEudG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gZmJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlQnlCdXR0b24oKSl9KSxxdCgxLCJjZHMtaWNvbiIsNCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtkcigib24tY29sbGFwc2UiLGEuY29sbGFwc2VkKSxUcigiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLmNv'@;
put 'bW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksQ2UoMSksVHIoImRpcmVjdGlvbiIsYS5jb2xsYXBzZWQ/InJpZ2h0IjoibGVmdCIpKCJ0aXRsZSIsYS5jb2xsYXBzZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kOmEuY29tbW9uU3RyaW5ncy5rZXlzLmNvbGxhcHNlKX19'@;
put 'ZnVuY3Rpb24gcGJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY29sbGFwc2VkPSExKX0pLHllKCl9MiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jb21tb25TdHJpbmdzLmtleXMu'@;
put 'dmVydGljYWxOYXZUb2dnbGUpfWNvbnN0IHZiZT1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLF9iZT1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0sYmJlPVsiW2NsclZlcnRpY2FsTmF2SWNvbl0iLCIqIl07ZnVuY3Rpb24geWJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiYnV0dG9uIiwxMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZSgpKX0pLHF0KDEsImNkcy1pY29uIiwxMikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7VHIoImFyaWEtbGFiZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEu'@;
put 'Y29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gd2JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLHh0KCJAZmFkZURvd24uZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmFkZURvbmUoaCkpfSksbWUoMiwi'@;
put 'ZGl2IiwzKSxOZSgzKSx5ZSgpLG1lKDQsImRpdiIsNCksa3IoNSksbWUoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpKDgsImRpdiIsNyksa3IoOSwxKSx5ZSgpLEplKDEwLHliZSwyLDEsImJ1dHRvbiIsOCkseWUoKSxtZSgxMSwiZGl2Iiw5KSxrcigxMiwyKSx5ZSgpLGtyKDEzLDMpLHllKCkoKSxt'@;
put 'ZSgxNCwiZGl2IiwzKSxOZSgxNSkseWUoKSgpLG1lKDE2LCJkaXYiLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnN0YXRpY0JhY2tkcm9wfHxoLmNsb3NlKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGRyKCJt'@;
put 'b2RhbC1zbSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUpLFJlKCJAZmFkZURvd24iLGEuc2tpcEFuaW1hdGlvbiksVHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5KSxD'@;
put 'ZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoNSksRWMoImlkIixhLm1vZGFsSWQpLENlKDIpLFJlKCJuZ0lmIixhLmNsb3NhYmxlKSxDZSg1KSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpLENlKDEpLFJlKCJAZmFkZSIs'@;
put 'dm9pZCAwKX19Y29uc3QgQ2JlPVtbWyIiLDgsIm1vZGFsLW5hdiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0sU2JlPVsiLm1vZGFsLW5hdiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFs'@;
put 'LWZvb3RlciJdO2xldCBrYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWljb24iXV19KSxjfSkoKSxxcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RzLWljb24iXV19KSxjfSkoKSxzYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIHZie312YXIgVXU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNV'@;
put 'Q0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1IiLGN9KFV1fHx7fSk7bGV0IFp1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT1VdS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRl'@;
put 'fXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1hP2E9VXUuTE9BRElORzphfHwoYT1VdS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0'@;
put 'cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9VXUuREVGQVVMVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmIsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGlu'@;
put 'Z1N0YXRlOlsiY2xyTG9hZGluZyIsImxvYWRpbmdTdGF0ZSJdfX0pLGN9KSgpLFl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGFibGU9MCx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgYmV9Z2V0IGxvYWRp'@;
put 'bmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0'@;
put 'aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7'@;
put 'dGhpcy5sb2FkaW5nPWE9PT1VdS5MT0FESU5HfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxHYmU9MDtmdW5jdGlvbiBJYygpe3JldHVybiJjbHItaWQt'@;
put 'IitHYmUrK31sZXQga0o9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9u'@;
put 'Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5j'@;
put 'YXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCk7dmFyIERmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShEZnx8e30pO2NvbnN0IGEyPSIwLjJzIGVhc2UtaW4tb3V0Iiwk'@;
put 'YmU9W2ExKCJza2lwSW5pdGlhbFJlbmRlciIsW2ZjKCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtmYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSldKV0seEY9KGExKCJza2lwSW5pdGlhbFJlbmRlciIsW2Zj'@;
put 'KCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtmYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSksZmMoIiogPT4gdm9pZCIsW19zKHtkaXNwbGF5OiJibG9jayJ9KSxydShhMixfcyh7aGVpZ2h0OjAsZGlzcGxh'@;
put 'eToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQ'@;
put 'cmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1'@;
put 'bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJD'@;
put 'dXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVu'@;
put 'dEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9z'@;
put 'dENsb3NlOiJTaWducG9zdCBDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVy'@;
put 'IixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoiVG9nZ2xlIHtDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRG'@;
put 'aWx0ZXJEaWFsb2dBcmlhTGFiZWw6IkZpbHRlciBkaWFsb2ciLGNvbHVtblNlcGFyYXRvckFyaWFMYWJlbDoiQ29sdW1uIHJlc2l6ZSBoYW5kbGUiLGNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uOiJVc2UgbGVmdCBvciByaWdodCBrZXkgdG8gcmVzaXplIHRoZSBjb2x1bW4iLGFsZXJ0Q2xv'@;
put 'c2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGFsZXJ0IixhbGVydE5leHRBbGVydEFyaWFMYWJlbDoiTmV4dCBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsOiJQcmV2aW91cyBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yg'@;
put 'e0NPVU5UfSIsZGF0ZXBpY2tlckRpYWxvZ0xhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZToiVG9nZ2xlIGRhdGVwaWNrZXIiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFu'@;
put 'Z2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToi'@;
put 'UHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJf'@;
put 'TU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQu'@;
put 'IixyZXNwb25zaXZlTmF2VG9nZ2xlT3BlbjoiTmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6Ik5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9z'@;
put 'ZToiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51Iix2ZXJ0aWNhbE5hdkdyb3VwVG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiBncm91cCIsdmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3Rh'@;
put 'cnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9w'@;
put 'dGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3Blbjoi'@;
put 'U2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVS'@;
put 'b3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhp'@;
put 'cyBidXR0b24iLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0ZXBuYXZBcmlhTGFiZWw6IlN0ZXAgbmF2aWdhdGlvbiIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQiLHNl'@;
put 'bGVjdGVkUm93czoiU2VsZWN0ZWQgcm93cyJ9KTtsZXQgRXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ3M9eEZ9Z2V0IGtleXMoKXtyZXR1cm4gdGhpcy5fc3RyaW5nc31sb2NhbGl6ZShhKXt0aGlzLl9zdHJpbmdzPXsuLi50aGlzLl9zdHJpbmdzLC4uLmF9fXBh'@;
put 'cnNlKGEsZD17fSl7Y29uc3QgaD1PYmplY3Qua2V5cyhkKTtsZXQgZj1hO3JldHVybiBoLmxlbmd0aCYmaC5mb3JFYWNoKF89PntmPWYucmVwbGFjZShgeyR7X319YCxkW19dKX0pLGZ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBy'@;
put 'b3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3ZhciBfYj1mdW5jdGlvbihjKXtyZXR1cm4gYy5EZWZhdWx0PSJkZWZhdWx0IixjLk11bHRpPSJtdWx0aSIsY30oX2J8fHt9KTtsZXQgS2JlPTA7Y2xhc3MgWGJle2NvbnN0cnVjdG9y'@;
put 'KGwsYSl7dGhpcy5pZD1sLHRoaXMuYWNjb3JkaW9uSWQ9YSx0aGlzLnN0YXR1cz1EZi5JbmFjdGl2ZSx0aGlzLmluZGV4PW51bGwsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLm9wZW49ITEsdGhpcy50ZW1wbGF0ZUlkPWAke3RoaXMuaWR9LSR7dGhpcy5hY2NvcmRpb25JZH1gfX1jbGFzcyBBSntj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9X2IuRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PUtiZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFuZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7'@;
put 'dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1vdmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IFhiZShsLHRoaXMuYWNjb3JkaW9uQ291bnQp'@;
put 'LHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYmdGhpcy5zdHJhdGVneT09PV9iLkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2Fi'@;
put 'bGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9wYW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQo'@;
put 'ZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgYmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWNjb3JkaW9uPW5ldyBBSix0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBUZSh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBh'@;
put 'bmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKE1lKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCks'@;
put 'dGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRl'@;
put 'ZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksX0U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5hY2NvcmRp'@;
put 'b25TZXJ2aWNlPWQsdGhpcy5pZkV4cGFuZFNlcnZpY2U9aCx0aGlzLmRpc2FibGVkPSExLHRoaXMucGFuZWxPcGVuPSExLHRoaXMucGFuZWxPcGVuQ2hhbmdlPW5ldyBFcix0aGlzLkFjY29yZGlvblN0YXR1cz1EZix0aGlzLmlzQWNjb3JkaW9uPSEwLHRoaXMuX2lkPUljKCl9Z2V0IGlkKCl7'@;
put 'cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUoVWMoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2Uu'@;
put 'YWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0'@;
put 'aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2Fi'@;
put 'bGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlzYWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dn'@;
put 'bGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8i'@;
put 'Y2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25IZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9ZW1pdFBhbmVsQ2hhbmdl'@;
put 'KGEpe2Eub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKSh0dChFcyksdHQoYmIpLHR0KFl1KSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxrSiw0KSwyJmEpe2xldCBmO2FpKGY9bGko'@;
put 'KSkmJihkLmFjY29yZGlvbkRlc2NyaXB0aW9uPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uLXBhbmVsIiwhMCl9LGlucHV0czp7ZGlzYWJsZWQ6WyJjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkIiwiZGlzYWJsZWQiXSxw'@;
put 'YW5lbE9wZW46WyJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdGkoW1l1XSksdmFdLG5nQ29udGVudFNlbGVjdG9yczp4SixkZWNsczoyLHZhcnM6Myxj'@;
put 'b25zdHM6W1s0LCJuZ0lmIl0sWyJhcmlhLWxpdmUiLCJhc3NlcnRpdmUiLCJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIs'@;
put 'MywiaWQiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJoZWFkZXJCdXR0b24iLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsxLCJjbHItYWNj'@;
put 'b3JkaW9uLW51bWJlciJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNsci1hY2NvcmRpb24tZXJyb3ItaWNvbiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJjbHItYWNjb3JkaW9uLWNvbXBsZXRlLWlj'@;
put 'b24iXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsiYXJpYS1saXZlIiwiYXNzZXJ0aXZlIiwxLCJjbHItc3Itb25seSJdLFsxLCJjbHItYWNjb3JkaW9u'@;
put 'LWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoTUopLEplKDAsRzhlLDE5LDE4LCJuZy1jb250YWluZXIiLDApLGJhKDEsImFzeW5jIikpLDImYSYmUmUoIm5nSWYiLFpsKDEsMSxkLnBhbmVsKSl9LGRl'@;
put 'cGVuZGVuY2llczpbWmksZGMscXMsdXhdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246JGJlfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFRKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVy'@;
put 'Vmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2'@;
put 'aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9fYi5NdWx0aTpfYi5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShjcCh0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRl'@;
put 'UGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmIpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpm'@;
put 'dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLF9FLDUpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbImNsckFj'@;
put 'Y29yZGlvbk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LGZlYXR1cmVzOlt0aShbYmJdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp'@;
put 'b246MH0pLGN9KSgpLERKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLElKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1hY2NvcmRpb24tdGl0bGUi'@;
put 'LCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRp'@;
put 'c2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IGJlfWdldCBjaG9jb2xhdGUoKXtyZXR1cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUu'@;
put 'bmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLHc4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9'@;
put 'Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoeTgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLEVGPSgoKT0+e2NsYXNzIGMgZXh0ZW5k'@;
put 'cyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOltlb119KSxjfSko'@;
put 'KSxMSj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdl'@;
put 'dCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFVhKSx0dChFRiw4KSx0dChZdSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBh'@;
put 'bmVsIl1dLGZlYXR1cmVzOltlb119KSxjfSkoKSxSSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoaDgsbzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1'@;
put 'aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpLG55ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsUkpdLFJK'@;
put 'XX0pLGN9KSgpO3ZhciB3bz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIi'@;
put 'LGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0iRXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjfSh3b3x8e30pLEc1PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJv'@;
put 'd1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShHNXx8e30pO2Z1bmN0aW9uIGwyKGMpe3JldHVybiBjPT09d28uQXJyb3dVcHx8Yz09PUc1LkFycm93VXA/d28uQXJyb3dVcDpjPT09d28uQXJyb3dEb3dufHxjPT09'@;
put 'RzUuQXJyb3dEb3duP3dvLkFycm93RG93bjpjPT09d28uQXJyb3dSaWdodHx8Yz09PUc1LkFycm93UmlnaHQ/d28uQXJyb3dSaWdodDpjPT09d28uQXJyb3dMZWZ0fHxjPT09RzUuQXJyb3dMZWZ0P3dvLkFycm93TGVmdDpjPT09d28uU3BhY2V8fGM9PT1HNS5TcGFjZT93by5TcGFjZTpjPT09'@;
put 'd28uRXNjYXBlfHxjPT09RzUuRXNjYXBlP3dvLkVzY2FwZTpjfWZ1bmN0aW9uIFRGKGMpe2NvbnN0IGw9bDIoYy5rZXkpOyhsPT09d28uQXJyb3dVcHx8bD09PXdvLkFycm93RG93bnx8bD09PXdvLkFycm93TGVmdHx8bD09PXdvLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0'@;
put 'IEtzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IGJlLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgYmUsdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IGJlfWdldCBvcGVuQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5DaGFu'@;
put 'Z2UuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3Ro'@;
put 'aXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1hLHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUo'@;
put 'KX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlV2l0aEV2ZW50KGEpe1RGKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlckFsaWduZWRFbWl0KGEpe3RoaXMuX3BvcG92ZXJBbGln'@;
put 'bmVkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLElmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9'@;
put 'YSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2Y/'@;
put 'KHRoaXMuYWRkRXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMuaWdub3JlZEV2ZW50PWZ9KSl9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxlcj1uMih0aGlzLmRv'@;
put 'Y3VtZW50LCJzY3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoSWEodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5v'@;
put 'cGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xpY2tMaXN0ZW5lcigp'@;
put 'e3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMuc21hcnRPcGVuU2Vy'@;
put 'dmljZS5vcGVuPSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKSxk'@;
put 'ZWxldGUgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhp'@;
put 'cy5zZXRBbmNob3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5uYXRpdmVFbGVtZW50'@;
put 'LmZvY3VzKCl9c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHkiIT09ZC5wYXJlbnRFbGVtZW50'@;
put 'LmxvY2FsTmFtZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5yZW1vdmVDbGlj'@;
put 'a0xpc3RlbmVyKCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoS3MpLGFyKExzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCks'@;
put 'd2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KElmKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3Bv'@;
put 'dmVyQW5jaG9yIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEZKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNl'@;
put 'PWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5nZT1uZXcgRXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKElhKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9'@;
put 'KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxl'@;
put 'bWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSks'@;
put 'dHQoSWYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVD'@;
put 'bGljayhmKX0pLDImYSYmZHIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgdnU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJ'@;
put 'Wk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfSh2dXx8e30pLFBzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KFBzfHx7fSksQ2I9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09'@;
put 'IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30oQ2J8fHt9KTtjb25zdCBTcD1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxMZj0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8'@;
put 'YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gQzgoYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gdTEoYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9SEooYyxsLGEpLGgtPWEuaGVpZ2h0O2JyZWFrO2Nh'@;
put 'c2UgMTpkKz1ISihjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9TkooYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPU5KKGMsbCxhKX1yZXR1cm57eE9mZnNldDpkLHlPZmZzZXQ6aH19ZnVuY3Rpb24gSEooYyxsLGEpe2xldCBkPTA7c3dpdGNo'@;
put 'KGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIFBzLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgUHMuU1RBUlQ6YnJlYWs7Y2FzZSBQcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2Ug'@;
put 'UHMuRU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gTkooYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBQcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVu'@;
put 'dCl7Y2FzZSBQcy5TVEFSVDpicmVhaztjYXNlIFBzLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgUHMuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBTOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnBsYXRmb3JtSWQ9'@;
put 'ZCx0aGlzLl9zaG91bGRSZWFsaWduPW5ldyBiZSx0aGlzLnNob3VsZFJlYWxpZ249dGhpcy5fc2hvdWxkUmVhbGlnbi5hc09ic2VydmFibGUoKX1yZWFsaWduKCl7dGhpcy5fc2hvdWxkUmVhbGlnbi5uZXh0KCl9YWxpZ25Db250ZW50KGEpe2lmKCFScyh0aGlzLnBsYXRmb3JtSWQpKXJldHVy'@;
put 'bnt4T2Zmc2V0OjAseU9mZnNldDowfTt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHM9dGhpcy5ldmVudFNlcnZpY2UuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcz1hLmdldEJvdW5kaW5nQ2xpZW50'@;
put 'UmVjdCgpLHRoaXMuY29udGVudE9mZnNldHM9dTEodGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7Y29uc3QgZD1mdW5jdGlvbiBpeWUoYyxsKXtjb25zdCBhPVtdLGRfYm90dG9tPWMueU9mZnNldCtsLmhlaWdodCxkX2xl'@;
put 'ZnQ9Yy54T2Zmc2V0LGRfcmlnaHQ9Yy54T2Zmc2V0K2wud2lkdGg7cmV0dXJuIGMueU9mZnNldD49MHx8YS5wdXNoKENiLlRPUCksZF9sZWZ0Pj0wfHxhLnB1c2goQ2IuTEVGVCksZF9ib3R0b208PSh3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRI'@;
put 'ZWlnaHQpfHxhLnB1c2goQ2IuQk9UVE9NKSxkX3JpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl8fGEucHVzaChDYi5SSUdIVCksYX0odGhpcy5jb250ZW50T2Zmc2V0cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSxoPWQu'@;
put 'cmVkdWNlKChmLF8pPT5mK18sMCk7cmV0dXJuIDE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09dnUuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oaCk6MT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5IT1JJWk9OVEFMP3Ro'@;
put 'aXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5I'@;
put 'T1JJWk9OVEFMJiZ0aGlzLmhhbmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhoKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKFNwKHRoaXMucG9z'@;
put 'aXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz11MSh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlz'@;
put 'LmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9dTEoTGYodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29y'@;
put 'ZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9QzgoU3AsTGYsITApO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENv'@;
put 'b3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPUM4KFNwLExmLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2Ug'@;
put 'Mjp7Y29uc3QgZD1DOChTcCxMZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9QzgoU3AsTGYsITEpO3RoaXMuY29udGVudE9m'@;
put 'ZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRz'@;
put 'PXUxKFNwKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz11MShMZih0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy'@;
put 'ZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9dTEoTGYodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dp'@;
put 'dGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9QzgoU3AsTGYsITEpO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2Fz'@;
put 'ZSAyOmNhc2UgMTp7Y29uc3QgZD1DOChTcCxMZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKShhcihJZiksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRo'@;
put 'aXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT1fLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPVQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPVcsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhp'@;
put 'cy5zaG91bGRSZWFsaWduPSExLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IEVyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2Uo'@;
put 'YSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0'@;
put 'aGlzLnZpZXcmJnRoaXMuc2hvdWxkUmVhbGlnbiYmdGhpcy5jaGVja0NvbGxlY3Rvci5lbWl0KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgp'@;
put 'OnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRl'@;
put 'bnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sIm9wYWNpdHkiLCIxIil9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh'@;
put 'PT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVu'@;
put 'ZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVt'@;
put 'b3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNsaWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9k'@;
put 'eSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9k'@;
put 'ZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3KX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlv'@;
put 'blNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxl'@;
put 'ZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KExzKSx0dChhcyksdHQoemEpLHR0KEZvKSx0'@;
put 'dChTOCksdHQoSWYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbImNsclBvcG92ZXJDb250ZW50QXQiLCJjb250'@;
put 'ZW50QXQiXSxvdXRzaWRlQ2xpY2tDbG9zZTpbImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxNYj0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBFcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2Ny'@;
put 'aWJlKGQ9Pnt0aGlzLm9wZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChLcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZkcigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSx4Yj0oKCk9PntjbGFzcyBje31y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbXV19KSxjfSkoKTt2YXIgZDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVG'@;
put 'VD0ibGVmdCIsYy5SSUdIVD0icmlnaHQiLGN9KGQxfHx7fSk7bGV0IEViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChhKXt0aGlzLl9jdXJy'@;
put 'ZW50PWF9bGlzdGVuVG9BcnJvd0tleXMoYSl7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUoZDEuVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEs'@;
put 'ImtleWRvd24uYXJyb3dkb3duIiwoKT0+IXRoaXMubW92ZShkMS5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUoZDEuTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2go'@;
put 'dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZShkMS5SSUdIVCkpKX1yZWdpc3RlckNvbnRhaW5lcihhLGQ9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsZCksdGhpcy5saXN0ZW5Ub0Fycm93S2V5cyhh'@;
put 'KSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5zcGFjZSIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZW50ZXIiLCgpPT4h'@;
put 'dGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpfW1vdmVUbyhhKXt2b2lkIDAhPT1hJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnQuYmx1cigpLGEuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWEpfW1vdmUoYSl7bGV0IGQ9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBoPXRoaXMuY3VycmVudFth'@;
put 'XTtoJiYoRk8oaCk/aDpXaShoKSkuc3Vic2NyaWJlKF89PntfJiYodGhpcy5tb3ZlVG8oXyksZD0hMCl9KX1yZXR1cm4gZH1hY3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUoKSwwKSl9'@;
put 'ZGV0YWNoTGlzdGVuZXJzKCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7'@;
put 'Y29uc3Qgako9e3Byb3ZpZGU6RWIsdXNlRmFjdG9yeTpmdW5jdGlvbiBveWUoYyxsKXtyZXR1cm4gY3x8bmV3IEViKGwpfSxkZXBzOltbbmV3IHoyLG5ldyBnMCxFYl0sRm9dfTt2YXIgb2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CRUZPUkU9LTFdPSJCRUZPUkUiLGNbYy5BRlRFUj0xXT0i'@;
put 'QUZURVIiLGN9KG9kfHx7fSk7Y2xhc3MgeDB7fXgwWyJ0b3AtcmlnaHQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx4MFsidG9wLWxlZnQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMu'@;
put 'U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbImJvdHRvbS1yaWdodCJdPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQUZURVIsYW5jaG9yOlBzLkVORCxjb250ZW50OlBzLkVORH0seDBbImJvdHRvbS1sZWZ0Il09e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMu'@;
put 'U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbInJpZ2h0LXRvcCJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMuQ0VOVEVSLGNvbnRlbnQ6UHMuRU5EfSx4MFsicmlnaHQtYm90dG9tIl09e2F4aXM6dnUuSE9SSVpPTlRBTCxzaWRlOm9kLkFGVEVSLGFuY2hv'@;
put 'cjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx4MFsibGVmdC10b3AiXT17YXhpczp2dS5IT1JJWk9OVEFMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5DRU5URVIsY29udGVudDpQcy5FTkR9LHgwWyJsZWZ0LWJvdHRvbSJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5CRUZPUkUs'@;
put 'YW5jaG9yOlBzLlNUQVJULGNvbnRlbnQ6UHMuU1RBUlR9O2NsYXNzIElGe3N0YXRpYyBsaW5rUGFyZW50KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1hKX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgt'@;
put 'MSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxsW2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxldCBoMT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7YS5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXpl'@;
put 'cm8iKTtjb25zdCBkPXRoaXMuY2xpZW50UmVjdChhKS53aWR0aDtyZXR1cm4gYS5jbGFzc0xpc3QucmVtb3ZlKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkfXNjcm9sbEJhcldpZHRoKGEpe3JldHVybiBhLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGh9c2Nyb2xsV2lkdGgoYSl7cmV0'@;
put 'dXJuIGEuc2Nyb2xsV2lkdGh8fDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IiksMTApfWNsaWVudFJlY3QoYSl7Y29uc3QgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6'@;
put 'cGFyc2VJbnQoZC50b3AsMTApLGJvdHRvbTpwYXJzZUludChkLmJvdHRvbSwxMCksbGVmdDpwYXJzZUludChkLmxlZnQsMTApLHJpZ2h0OnBhcnNlSW50KGQucmlnaHQsMTApLHdpZHRoOnBhcnNlSW50KGQud2lkdGgsMTApLGhlaWdodDpwYXJzZUludChkLmhlaWdodCwxMCl9fW1pbldpZHRo'@;
put 'KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoIm1pbi13aWR0aCIpLDEwKX1mb2N1cyhhKXthLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFu'@;
put 'ZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uRG9uZSgpe3RoaXMudXBkYXRlU3RhcnRIZWlnaHQoKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhpcy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxl'@;
put 'bWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KGgxKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiJdXSxob3N0VmFyczoxLGhv'@;
put 'c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmZV8oIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hbmltYXRpb25Eb25lKCl9KSwyJmEmJlM1KCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dl'@;
put 'cjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOlt0aShbaDFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9jaztvdmVy'@;
put 'ZmxvdzpoaWRkZW59Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZXhwYW5kQW5pbWF0aW9uIixbZmMoInRydWUgPD0+IGZhbHNlIixbX3Moe2hlaWdodDoie3tzdGFydEhlaWdodH19cHgifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtoZWlnaHQ6IioifSkpXSldKV19fSksY30pKCksTEY9'@;
put 'KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxzeWU9MDtjb25zdCB4OD1uZXcgU2koIklGX0FDVElWRV9JRCIp'@;
put 'LGx5ZT17cHJvdmlkZTp4OCx1c2VGYWN0b3J5OmZ1bmN0aW9uIGF5ZSgpe3JldHVybisrc3llfX07bGV0ICQ1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jdXJyZW50Q2hhbmdlPW5ldyBiZX1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdl'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250'@;
put 'YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgRXIoITEpLHRoaXMud2FzQWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudENoYW5nZS5zdWJzY3JpYmUoXz0+e3RoaXMuY2hl'@;
put 'Y2tBbmRVcGRhdGVWaWV3KF8pfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1zZXQgYWN0aXZlKGEpe2EmJih0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp'@;
put 'b24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9Y2hlY2tBbmRVcGRhdGVWaWV3KGEpe2NvbnN0IGQ9YT09PXRoaXMuaWQ7ZCE9PXRoaXMud2FzQWN0aXZl'@;
put 'JiYodGhpcy51cGRhdGVWaWV3KGQpLHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoZCksdGhpcy53YXNBY3RpdmU9ZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dCh4OCksdHQoemEpLHR0KGFzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbIiIsImNscklmQWN0aXZlIiwiIl1dLGlucHV0czp7YWN0aXZlOlsiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9fSksY30pKCksYzI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7'@;
put 'dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9Pnt0aGlzLnVwZGF0ZVZpZXcoZiksdGhp'@;
put 'cy5vcGVuQ2hhbmdlLmVtaXQoZil9KX1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1zZXQgb3BlbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/'@;
put 'dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEtzKSx0dCh6YSksdHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siIiwiY2xySWZPcGVuIiwiIl1dLGlucHV0czp7b3BlbjpbImNscklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSx6Sj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy50ZW1w'@;
put 'bGF0ZT1hLHRoaXMuY29udGFpbmVyPWQsdGhpcy5lbD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmV4cGFuZD1fLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEVyKCEwKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChfLmV4'@;
put 'cGFuZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnVwZGF0ZVZpZXcoKSx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmQuZXhwYW5kZWQpfSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2Yg'@;
put 'YSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNo'@;
put 'KGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRl'@;
put 'bXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8YykodHQoemEsOCksdHQoYXMpLHR0KE5pKSx0dChGbyksdHQoWXUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOlsiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19'@;
put 'LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxjfSkoKSxzZD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtp'@;
put 'bXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIFJme2NvbnN0cnVjdG9yKGwpe3RoaXMuZHJhZ1Bvc2l0aW9uPWwuZHJhZ1Bvc2l0aW9uLHRoaXMuZ3JvdXA9bC5ncm91cCx0aGlzLmRyYWdEYXRhVHJhbnNmZXI9bC5kcmFnRGF0YVRyYW5zZmVyLHRoaXMuZHJvcFBvaW50UG9zaXRpb249bC5k'@;
put 'cm9wUG9pbnRQb3NpdGlvbn19dmFyIEUwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRFJBR19TVEFSVD0wXT0iRFJBR19TVEFSVCIsY1tjLkRSQUdfTU9WRT0xXT0iRFJBR19NT1ZFIixjW2MuRFJBR19FTkQ9Ml09IkRSQUdfRU5EIixjW2MuRFJBR19FTlRFUj0zXT0iRFJBR19FTlRFUiIsY1tj'@;
put 'LkRSQUdfTEVBVkU9NF09IkRSQUdfTEVBVkUiLGNbYy5EUk9QPTVdPSJEUk9QIixjfShFMHx8e30pO2xldCBVSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kcmFnU3RhcnQ9bmV3IGJlLHRoaXMuZHJhZ01vdmU9bmV3IGJlLHRoaXMuZHJhZ0VuZD1uZXcgYmUsdGhpcy5kcm9w'@;
put 'PW5ldyBiZX1nZXQgZHJhZ1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5kcmFnU3RhcnQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdNb3ZlZCgpe3JldHVybiB0aGlzLmRyYWdNb3ZlLmFzT2JzZXJ2YWJsZSgpfWdldCBkcmFnRW5kZWQoKXtyZXR1cm4gdGhpcy5kcmFnRW5kLmFzT2JzZXJ2YWJsZSgp'@;
put 'fWdldCBkcm9wcGVkKCl7cmV0dXJuIHRoaXMuZHJvcC5hc09ic2VydmFibGUoKX1icm9hZGNhc3QoYSl7c3dpdGNoKGEudHlwZSl7Y2FzZSBFMC5EUkFHX1NUQVJUOnRoaXMuZHJhZ1N0YXJ0Lm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUkFHX01PVkU6dGhpcy5kcmFnTW92ZS5uZXh0KGEpO2Jy'@;
put 'ZWFrO2Nhc2UgRTAuRFJBR19FTkQ6dGhpcy5kcmFnRW5kLm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUk9QOnRoaXMuZHJvcC5uZXh0KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksa2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5ldmVudEJ1cz1oLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLmhhc0RyYWdTdGFydGVkPSExLHRo'@;
put 'aXMuZHJhZ1N0YXJ0PW5ldyBiZSx0aGlzLmRyYWdNb3ZlPW5ldyBiZSx0aGlzLmRyYWdFbmQ9bmV3IGJlLHRoaXMubGlzdGVuZXJzPVtdfWdldCBkcmFnU3RhcnRlZCgpe3JldHVybiB0aGlzLmRyYWdTdGFydC5hc09ic2VydmFibGUoKX1nZXQgZHJhZ01vdmVkKCl7cmV0dXJuIHRoaXMuZHJh'@;
put 'Z01vdmUuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdFbmRlZCgpe3JldHVybiB0aGlzLmRyYWdFbmQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbFBvc2l0aW9ufWF0dGFjaERyYWdMaXN0ZW5lcnMoYSl7dGhpcy5kcmFnZ2FibGVFbD1h'@;
put 'LHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5jdXN0b21EcmFnRXZlbnQodGhpcy5kcmFnZ2FibGVFbCwibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIpKSx0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMuY3VzdG9tRHJhZ0V2ZW50KHRoaXMuZHJhZ2dhYmxlRWwsInRvdWNoc3RhcnQi'@;
put 'LCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpKX1kZXRhY2hEcmFnTGlzdGVuZXJzKCl7dGhpcy5saXN0ZW5lcnMmJnRoaXMubGlzdGVuZXJzLm1hcChhPT5hKCkpLHRoaXMubmVzdGVkTGlzdGVuZXJzJiZ0aGlzLm5lc3RlZExpc3RlbmVycy5tYXAoYT0+YSgpKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0'@;
put 'Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKX1nZXROYXRpdmVFdmVudE9iamVjdChhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsImNoYW5nZWRUb3VjaGVzIik/YS5jaGFuZ2VkVG91Y2hlc1swXTph'@;
put 'fWN1c3RvbURyYWdFdmVudChhLGQsaCxmKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4oYSxkLF89Pnt0aGlzLmluaXRpYWxQb3NpdGlvbj17cGFnZVg6dGhpcy5nZXROYXRpdmVFdmVudE9iamVjdChfKS5wYWdlWCxwYWdlWTp0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KF8pLnBhZ2VZ'@;
put 'fSx0aGlzLm5lc3RlZExpc3RlbmVycz1bXSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmVzdGVkTGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwic2VsZWN0c3RhcnQiLFQ9PntULnByZXZlbnREZWZhdWx0KCksVC5zdG9wSW1t'@;
put 'ZWRpYXRlUHJvcGFnYXRpb24oKX0pKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnkoaCksdGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0'@;
put 'ZW5lcigpLHRoaXMuaGFzRHJhZ1N0YXJ0ZWQ9ITAsdGhpcy5icm9hZGNhc3QoXyxFMC5EUkFHX1NUQVJUKSx0aGlzLm5lc3RlZExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsaCxUPT57VC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLmhhc0Ry'@;
put 'YWdTdGFydGVkJiZ0aGlzLmJyb2FkY2FzdChULEUwLkRSQUdfTU9WRSl9KSl9LHRoaXMuZHJhZ1N0YXJ0RGVsYXkpfSksdGhpcy5uZXN0ZWRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGYsVD0+e3RoaXMuaGFzRHJhZ1N0YXJ0ZWQmJih0aGlzLmhhc0Ry'@;
put 'YWdTdGFydGVkPSExLHRoaXMuYnJvYWRjYXN0KFQsRTAuRFJBR19FTkQpKSxjbGVhclRpbWVvdXQodGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQpLHRoaXMubmVzdGVkTGlzdGVuZXJzLm1hcChXPT5XKCkpLHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNr'@;
put 'RHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpfSkpfSl9Y2hlY2tEcmFnU3RhcnRCb3VuZGFyeShhKXt0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGEsZD0+e2NvbnN0IGg9TWF0aC5hYnModGhpcy5nZXROYXRpdmVF'@;
put 'dmVudE9iamVjdChkKS5wYWdlWC10aGlzLmluaXRpYWxQb3NpdGlvbi5wYWdlWCksZj1NYXRoLmFicyh0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KGQpLnBhZ2VZLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VZKTsoaD4xfHxmPjEpJiYoY2xlYXJUaW1lb3V0KHRoaXMuZHJhZ1N0YXJ0RGVs'@;
put 'YXlUaW1lb3V0KSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKSl9KX1icm9hZGNhc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2VuZXJhdGVEcmFnRXZlbnQoYSxkKTtzd2l0Y2goaC50eXBlKXtjYXNlIEUwLkRS'@;
put 'QUdfU1RBUlQ6dGhpcy5kcmFnU3RhcnQubmV4dChoKTticmVhaztjYXNlIEUwLkRSQUdfTU9WRTp0aGlzLmRyYWdNb3ZlLm5leHQoaCk7YnJlYWs7Y2FzZSBFMC5EUkFHX0VORDp0aGlzLmRyYWdFbmQubmV4dChoKX1oLmdob3N0RWxlbWVudD10aGlzLmdob3N0RWxlbWVudCxoLmRyb3BQb2lu'@;
put 'dFBvc2l0aW9uPXRoaXMuZHJvcFBvaW50UG9zaXRpb24sdGhpcy5ldmVudEJ1cy5icm9hZGNhc3QoaCl9Z2VuZXJhdGVEcmFnRXZlbnQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3QoYSk7cmV0dXJue3R5cGU6ZCxkcmFnUG9zaXRpb246e3BhZ2VYOmgucGFnZVgscGFn'@;
put 'ZVk6aC5wYWdlWSxtb3ZlWDpoLnBhZ2VYLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VYLG1vdmVZOmgucGFnZVktdGhpcy5pbml0aWFsUG9zaXRpb24ucGFnZVl9LGdyb3VwOnRoaXMuZ3JvdXAsZHJhZ0RhdGFUcmFuc2Zlcjp0aGlzLmRyYWdEYXRhVHJhbnNmZXIsZ2hvc3RFbGVtZW50OnRo'@;
put 'aXMuZ2hvc3RFbGVtZW50fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTm8pLGFyKEZvKSxhcihVSikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFJGPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSl7dGhpcy5kb21BZGFwdGVyPWF9Z2V0IGhhc0RyYWdnYWJsZVN0YXRlKCl7cmV0dXJuISF0aGlzLnNuYXBzaG90RHJhZ0V2ZW50JiYhIXRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdldCBjbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdl'@;
put 'dCBkcmFnRXZlbnQoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdERyYWdFdmVudH1jYXB0dXJlKGEsZCl7dGhpcy5kcmFnZ2FibGVFbENsaWVudFJlY3Q9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QoYSksdGhpcy5zbmFwc2hvdERyYWdFdmVudD1kfWRpc2NhcmQoKXtkZWxldGUgdGhpcy5kcmFn'@;
put 'Z2FibGVFbENsaWVudFJlY3QsZGVsZXRlIHRoaXMuc25hcHNob3REcmFnRXZlbnR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGgxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWko9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe2lmKHRoaXMuZWw9YSx0aGlzLmRyYWdFdmVudExpc3RlbmVyPWQsdGhpcy5kcmFnZ2FibGVTbmFwc2hvdD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLm5nWm9uZT1fLHRoaXMubGVhdmVBbmltQ29uZmlnPXt2YWx1ZTowLHBhcmFtczp7'@;
put 'dG9wOiIwcHgiLGxlZnQ6IjBweCJ9fSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmRyYWdnYWJsZVNuYXBzaG90KXRocm93IG5ldyBFcnJvcigiVGhlIGNsci1kcmFnZ2FibGUtZ2hvc3QgY29tcG9uZW50IGNhbiBvbmx5IGJlIHVzZWQgaW5z'@;
put 'aWRlIG9mIGEgY2xyRHJhZ2dhYmxlIGRpcmVjdGl2ZS4iKTt0aGlzLmRyYWdnYWJsZUdob3N0RWw9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5kcmFnZ2FibGVHaG9zdEVsLCJkcmFnZ2FibGUtZ2hvc3QiKSx0aGlzLmRyYWdFdmVudExpc3RlbmVy'@;
put 'Lmdob3N0RWxlbWVudD10aGlzLmRyYWdnYWJsZUdob3N0RWwsdGhpcy5zZXREZWZhdWx0R2hvc3RTaXplKHRoaXMuZHJhZ2dhYmxlR2hvc3RFbCk7Y29uc3QgVD17dG9wOnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFn'@;
put 'RXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VZLXRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC50b3A6MCxsZWZ0OnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFnRXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VYLXRo'@;
put 'aXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC5sZWZ0OjB9O2xldCBXPSExO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShpZT0+e1d8fCh0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRl'@;
put 'P3RoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QudG9wfXB4YCxgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QubGVmdH1weGApOnRoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRy'@;
put 'YWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCxgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCksVz0hMCk7Y29uc3QgcGU9dGhpcy5maW5kVG9wTGVmdFBvc2l0aW9uKGllLmRyYWdQb3NpdGlvbixUKTt0aGlzLnNldFBvc2l0aW9uU3R5bGUodGhp'@;
put 'cy5kcmFnZ2FibGVHaG9zdEVsLHBlLnBhZ2VYLHBlLnBhZ2VZKSx0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyb3BQb2ludFBvc2l0aW9uPXRoaXMuZmluZERyb3BQb2ludFBvc2l0aW9uKHBlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz'@;
put 'Y3JpYmUoKSl9c2V0RGVmYXVsdEdob3N0U2l6ZShhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlJiZ0aGlzLnNldFNpemVTdHlsZShhLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aCx0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJl'@;
put 'Y3QuaGVpZ2h0KX1hbmltYXRlVG9PbkxlYXZlKGEsZCl7dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5sZWF2ZUFuaW1Db25maWc9e3ZhbHVlOjAscGFyYW1zOnt0b3A6YSxsZWZ0OmR9fX0pfWZpbmRUb3BMZWZ0UG9zaXRpb24oYSxkKXtyZXR1cm57cGFnZVg6YS5wYWdlWC1kLmxlZnQscGFn'@;
put 'ZVk6YS5wYWdlWS1kLnRvcH19ZmluZERyb3BQb2ludFBvc2l0aW9uKGEpe3JldHVybiB0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlP3twYWdlWDphLnBhZ2VYK3RoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aC8yLHBhZ2VZOmEucGFnZVkrdGhp'@;
put 'cy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LmhlaWdodC8yfTphfXNldFNpemVTdHlsZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ3aWR0aCIsYCR7ZH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwiaGVpZ2h0IixgJHtofXB4YCl9c2V0UG9zaXRpb25TdHls'@;
put 'ZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IixgJHtkfXB4YCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLGAke2h9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsInZpc2liaWxpdHkiLCJ2aXNpYmxlIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChrYiw4KSx0dChSRiw4KSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyYWdnYWJsZS1naG9zdCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm'@;
put 'YSYmUzUoIkBsZWF2ZUFuaW1hdGlvbiIsZC5sZWF2ZUFuaW1Db25maWcpfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImxlYXZl'@;
put 'QW5pbWF0aW9uIixbZmMoIjpsZWF2ZSIsW19zKHtsZWZ0OiIqIix0b3A6IioifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHt0b3A6Int7dG9wfX0iLGxlZnQ6Int7bGVmdH19In0pKV0pXSldfX0pLGN9KSgpLFlKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe2lmKHRoaXMu'@;
put 'dGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXI9aCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmNvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIlRoZSAqY2xySWZEcmFnZ2VkIGRpcmVjdGl2ZSBjYW4g'@;
put 'b25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsckRyYWdnYWJsZSBkaXJlY3RpdmUuIik7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50'@;
put 'ZW1wbGF0ZSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRW5kZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5jb250YWluZXIuY2xlYXIoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3Jp'@;
put 'YmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHphKSx0dChhcywxMiksdHQoa2IsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkRyYWdnZWQiLCIiXV19KSxjfSkoKSxPRj0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lcj1hLHRoaXMucmVuZGVyZXI9ZH1nZXQgZGVmYXVsdEhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRIYW5kbGVFbH1zZXQgZGVmYXVsdEhhbmRsZUVsKGEpe3RoaXMuX2RlZmF1bHRIYW5kbGVFbD1hLHRoaXMuX2N1'@;
put 'c3RvbUhhbmRsZUVsfHx0aGlzLm1ha2VFbGVtZW50SGFuZGxlKHRoaXMuX2RlZmF1bHRIYW5kbGVFbCl9Z2V0IGN1c3RvbUhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2N1c3RvbUhhbmRsZUVsfXJlZ2lzdGVyQ3VzdG9tSGFuZGxlKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJh'@;
put 'Z0xpc3RlbmVycygpLHRoaXMuX2N1c3RvbUhhbmRsZUVsPWEsdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9jdXN0b21IYW5kbGVFbCl9dW5yZWdpc3RlckN1c3RvbUhhbmRsZSgpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpLHRoaXMucmVuZGVyZXIu'@;
put 'cmVtb3ZlQ2xhc3ModGhpcy5fY3VzdG9tSGFuZGxlRWwsImRyYWctaGFuZGxlIiksZGVsZXRlIHRoaXMuX2N1c3RvbUhhbmRsZUVsLHRoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9kZWZhdWx0SGFuZGxlRWwpfW1ha2VFbGVtZW50SGFuZGxlKGEp'@;
put 'e3RoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5fZGVmYXVsdEhhbmRsZUVsIT09YSYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9kZWZhdWx0SGFuZGxlRWwsImRyYWctaGFuZGxlIiksdGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5hdHRhY2hEcmFnTGlzdGVuZXJzKGEpLHRoaXMu'@;
put 'cmVuZGVyZXIuYWRkQ2xhc3MoYSwiZHJhZy1oYW5kbGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa2IpLGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksV0o9KCgpPT57Y2xh'@;
put 'c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnJlbmRlcmVyPWF9ZW50ZXIoKXt0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksImluLWRyYWciKX1leGl0KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCJpbi1kcmFnIil9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksR0o9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLmVsPWEsdGhpcy5kcmFnRXZl'@;
put 'bnRMaXN0ZW5lcj1kLHRoaXMuZHJhZ0hhbmRsZVJlZ2lzdHJhcj1oLHRoaXMudmlld0NvbnRhaW5lclJlZj1mLHRoaXMuY2ZyPV8sdGhpcy5pbmplY3Rvcj1ULHRoaXMuZHJhZ2dhYmxlU25hcHNob3Q9Vyx0aGlzLmdsb2JhbERyYWdNb2RlPWllLHRoaXMuZHJhZ1N0YXJ0RW1pdHRlcj1uZXcg'@;
put 'RXIsdGhpcy5kcmFnTW92ZUVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ0VuZEVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ09uPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRyYWdnYWJsZUVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLmNvbXBvbmVudEZhY3Rvcnk9dGhpcy5jZnIu'@;
put 'cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoWkopfXNldCBkYXRhVHJhbnNmZXIoYSl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRGF0YVRyYW5zZmVyPWF9c2V0IGdyb3VwKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZ3JvdXA9YX1zZXQgZHJhZ1N0YXJ0RGVsYXkoYSl7Im51bWJlciI9'@;
put 'PXR5cGVvZiBhP3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ1N0YXJ0RGVsYXk9YToic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydERlbGF5PXBhcnNlSW50KGEsMTApfHwwKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRyYWdIYW5kbGVS'@;
put 'ZWdpc3RyYXIuZGVmYXVsdEhhbmRsZUVsPXRoaXMuZHJhZ2dhYmxlRWwsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuZ2xvYmFsRHJhZ01vZGUuZW50ZXIoKSx0aGlzLmRyYWdPbj0hMCx0aGlzLmN1'@;
put 'c3RvbUdob3N0fHx0aGlzLmNyZWF0ZURlZmF1bHRHaG9zdChhKSx0aGlzLmRyYWdTdGFydEVtaXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShhPT57dGhpcy5kcmFnTW92ZUVt'@;
put 'aXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ0VuZGVkLnN1YnNjcmliZShhPT57dGhpcy5nbG9iYWxEcmFnTW9kZS5leGl0KCksdGhpcy5kcmFnT249ITEsdGhpcy5jdXN0b21HaG9zdHx8dGhpcy5kZXN0'@;
put 'cm95RGVmYXVsdEdob3N0KCksdGhpcy5kcmFnRW5kRW1pdHRlci5lbWl0KG5ldyBSZihhKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpfWNy'@;
put 'ZWF0ZURlZmF1bHRHaG9zdChhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNhcHR1cmUodGhpcy5kcmFnZ2FibGVFbCxhKSx0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50RmFjdG9yeSwwLHRoaXMuaW5qZWN0b3IsW1t0aGlzLmRyYWdnYWJsZUVs'@;
put 'LmNsb25lTm9kZSghMCldXSl9ZGVzdHJveURlZmF1bHRHaG9zdCgpe3RoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuZGlzY2FyZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoa2Ip'@;
put 'LHR0KE9GKSx0dChhcyksdHQoSzApLHR0KEVhKSx0dChSRiksdHQoV0opKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJhZ2dhYmxlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWUosNSksMiZhKXtsZXQgZjth'@;
put 'aShmPWxpKCkpJiYoZC5jdXN0b21HaG9zdD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZHJhZ2dhYmxlIiwhMCkoImJlaW5nLWRyYWdnZWQiLGQuZHJhZ09uKX0saW5wdXRzOntkYXRhVHJhbnNmZXI6WyJjbHJEcmFnZ2FibGUiLCJk'@;
put 'YXRhVHJhbnNmZXIiXSxncm91cDpbImNsckdyb3VwIiwiZ3JvdXAiXSxkcmFnU3RhcnREZWxheTpbImNsckRyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXX0sb3V0cHV0czp7ZHJhZ1N0YXJ0RW1pdHRlcjoiY2xyRHJhZ1N0YXJ0IixkcmFnTW92ZUVtaXR0ZXI6ImNsckRyYWdNb3Zl'@;
put 'IixkcmFnRW5kRW1pdHRlcjoiY2xyRHJhZ0VuZCJ9LGZlYXR1cmVzOlt0aShba2IsT0YsUkYsV0osaDFdKV19KSxjfSkoKSwkSj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu'@;
put 'XHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NvbnN0IHFKPW5ldyBTaSgiRk9DVVNfT05fVklFV19JTklUIiksdXllPXtwcm92aWRlOnFKLHVzZVZhbHVlOiEwfTtsZXQgUEY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5lbD1hLHRoaXMu'@;
put 'cGxhdGZvcm1JZD1kLHRoaXMuZm9jdXNPblZpZXdJbml0PWgsdGhpcy5yZW5kZXJlcj1fLHRoaXMuZGlyZWN0Rm9jdXM9ITAsdGhpcy5kZXN0cm95JD1uZXcgYmUsdGhpcy5faXNFbmFibGVkPXRoaXMuZm9jdXNPblZpZXdJbml0LHRoaXMuZG9jdW1lbnQ9ZixULnJ1bk91dHNpZGVBbmd1bGFy'@;
put 'KCgpPT5uMihhLm5hdGl2ZUVsZW1lbnQsImZvY3Vzb3V0IikucGlwZShhaCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5kaXJlY3RGb2N1c3x8KHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKSx0aGlzLnJl'@;
put 'bmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwib3V0bGluZSIsbnVsbCkpfSkpfXNldCBpc0VuYWJsZWQoYSl7dGhpcy5mb2N1c09uVmlld0luaXQmJiJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLl9pc0VuYWJsZWQ9YSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5mb2N1'@;
put 'cygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLl9pc0VuYWJsZWQmJnRoaXMuZG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZWwubmF0'@;
put 'aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZGlyZWN0Rm9jdXM9ITEsdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5y'@;
put 'ZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIm91dGxpbmUiLCJub25lIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEdzKSx0dChxSiksdHQoTHMp'@;
put 'LHR0KEZvKSx0dChObykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJGb2N1c09uVmlld0luaXQiLCIiXV0saW5wdXRzOntpc0VuYWJsZWQ6WyJjbHJGb2N1c09uVmlld0luaXQiLCJpc0VuYWJsZWQiXX19KSxjfSkoKSxxNT0oKCk9PntjbGFzcyBje31yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W3V5ZV0saW1wb3J0czpbW29vXV19KSxjfSkoKSxkeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3By'@;
put 'ZXZpb3VzRm9jdXNUcmFwcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wdXNoKHRoaXMuX2N1cnJlbnQpLHRoaXMuX2N1cnJlbnQ9YX1nZXQgbmJGb2N1c1RyYXBwZXJzKCl7cmV0dXJuIHRoaXMu'@;
put 'X3ByZXZpb3VzRm9jdXNUcmFwcy5sZW5ndGh9YWN0aXZhdGVQcmV2aW91c1RyYXBwZXIoKXt0aGlzLl9jdXJyZW50PXRoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wb3AoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksTXA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuZWw9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5mb2N1c1RyYXBzVHJhY2tlcj1oLHRoaXMucmVuZGVyZXI9Zix0aGlz'@;
put 'LnBsYXRmb3JtSWQ9Xyx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkPSExLHRoaXMuX2NvbmZpZz17c3RyaWN0OiEwfSx0aGlzLmRvY3VtZW50PXRoaXMuaW5qZWN0b3IuZ2V0KExzKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmN1cnJlbnQ9dGhpc31zZXQgY29uZmlnKGEpe3RoaXMuX2NvbmZpZz1P'@;
put 'YmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywiIj09PWE/e306YSl9Z2V0IHBvdGVudGlhbGx5Rm9jdXNhYmxlRWxzKCl7cmV0dXJuWy4uLnRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaHJlZl06bm90KFt0YWJpbmRleD0iLTEiXSksIGJ1dHRvbjpub3QoW2Rpc2Fi'@;
put 'bGVkXSk6bm90KFt0YWJpbmRleD0iLTEiXSksIGlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Ii0xIl0pLCBb'@;
put 'Y29udGVudGVkaXRhYmxlPSJ0cnVlIl06bm90KFt0YWJpbmRleD0iLTEiXSksIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD0iLTEiXSkgJyldfW5nT25Jbml0KCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi'@;
put 'dGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQ9dGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMucGFyZW50RWxlbWVudD10aGlz'@;
put 'LmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCksdGhpcy5hZGRSZWJvdW5kRWxzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZVJlYm91bmRFbHMoKSx0aGlzLnNldFByZXZpb3VzRm9jdXMoKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmFjdGl2YXRlUHJldmlvdXNUcmFwcGVyKCl9'@;
put 'b25Gb2N1c0luKGEpe2NvbnN0IGQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMuZm9jdXNUcmFwc1RyYWNrZXIuY3VycmVudCE9PXRoaXN8fCFScyh0aGlzLnBsYXRmb3JtSWQpfHx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8KGEudGFyZ2V0PT09dGhp'@;
put 'cy50b3BSZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhpcy5mb2N1c0xhc3RGb2N1c2FibGUoKSx0aGlzLmZvY3VzVHJhcEVsSWZPdXRzaWRlKCkpOmEudGFyZ2V0PT09dGhpcy5ib3R0b21SZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhp'@;
put 'cy5mb2N1c0ZpcnN0Rm9jdXNhYmxlKCksdGhpcy5mb2N1c1RyYXBFbElmT3V0c2lkZSgpKTp0aGlzLl9jb25maWcuc3RyaWN0P3RoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMubG9jYWxGb2N1c0VzY2FwZWQ9ITApfXNldFByZXZpb3VzRm9jdXMoKXt0aGlzLnByZXZpb3VzQWN0'@;
put 'aXZlRWxlbWVudCYmdGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMucHJldmlvdXNBY3RpdmVFbGVtZW50LmZvY3VzKCl9Y3JlYXRlRm9jdXNhYmxlT2ZmU2NyZWVuRWwoKXtjb25zdCBhPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiB0aGlz'@;
put 'LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsIjAiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGEsIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxhfWFkZFJlYm91bmRFbHMoKXtpZihScyh0aGlzLnBsYXRmb3JtSWQpKXt0aGlzLnRvcFJlYm91bmRFbD10aGlzLmNyZWF0'@;
put 'ZUZvY3VzYWJsZU9mZlNjcmVlbkVsKCksdGhpcy5ib3R0b21SZWJvdW5kRWw9dGhpcy5jcmVhdGVGb2N1c2FibGVPZmZTY3JlZW5FbCgpO2NvbnN0IGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50RWxlbWVudCx0aGlzLnRvcFJlYm91'@;
put 'bmRFbCxhKSxhLm5leHRTaWJsaW5nP3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCxhLm5leHRTaWJsaW5nKTp0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCl9fXJlbW92'@;
put 'ZVJlYm91bmRFbHMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRvcFJlYm91bmRFbCYmdGhpcy5ib3R0b21SZWJvdW5kRWwmJih0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy50b3BSZWJvdW5kRWwpLHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmJv'@;
put 'dHRvbVJlYm91bmRFbCksZGVsZXRlIHRoaXMudG9wUmVib3VuZEVsLGRlbGV0ZSB0aGlzLmJvdHRvbVJlYm91bmRFbCl9Zm9jdXNGaXJzdEZvY3VzYWJsZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVscy5sZW5ndGgmJih0aGlzLmZpcnN0Rm9jdXNhYmxlRWw9'@;
put 'dGhpcy5mb2N1c0VsZW1lbnQodGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVsc1thXSksIXRoaXMuZmlyc3RGb2N1c2FibGVFbCk7YSsrKTt9Zm9jdXNMYXN0Rm9jdXNhYmxlKCl7Zm9yKGxldCBhPXRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHMubGVuZ3RoLTE7YT49MCYmKHRoaXMubGFz'@;
put 'dEZvY3VzYWJsZUVsPXRoaXMuZm9jdXNFbGVtZW50KHRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHNbYV0pLCF0aGlzLmxhc3RGb2N1c2FibGVFbCk7YS0tKTt9Zm9jdXNUcmFwRWxJZk91dHNpZGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxl'@;
put 'bWVudCl8fHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpfWZvY3VzRWxlbWVudChhKXtyZXR1cm4gYSYmYS5mb2N1cyYmKGEuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09YSk/YTpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KSh0dChOaSksdHQoRWEpLHR0KGR5ZSksdHQoRm8pLHR0KEdzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckZvY3VzVHJhcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJmb2N1c2luIixmdW5jdGlvbihmKXtyZXR1cm4gZC5v'@;
put 'bkZvY3VzSW4oZil9LDAsZmYpfSxpbnB1dHM6e2NvbmZpZzpbImNsckZvY3VzVHJhcCIsImNvbmZpZyJdfX0pLGN9KSgpLHlFPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5c'@;
put 'dTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvb11dfSksY30pKCksZnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90ZXh0Q29udGVudENoYW5nZT1uZXcgYmV9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50fXNldCB0ZXh0Q29udGVudChhKXt0aGlz'@;
put 'Ll90ZXh0Q29udGVudD1hLHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLm5leHQoYSl9Z2V0IHRleHRDb250ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxweWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7'@;
put 'aW1wb3J0czpbW29vXV19KSxjfSkoKSxteWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHhiXV19KSxjfSkoKSxkaD0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmJ1dHRvblN0YXRlPVV1LHRoaXMuc3RhdGU9VXUuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMu'@;
put 'c3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSBVdS5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0'@;
put 'aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBVdS5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgVXUuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNl'@;
put 'IFV1LkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKFV1LkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll'@;
put 'bnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkaXNhYmxl'@;
put 'ZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTp2Yix1c2VFeGlzdGluZzpjfV0pXSxhdHRyczpnN2UsbmdDb250ZW50U2Vs'@;
put 'ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmKEFpKCksVnIoMCwwKSxKZSgxLG03ZSwyLDEsInNwYW4iLDEpLEplKDIsdjdlLDIsMSwic3BhbiIsMSksSmUoMyxfN2UsMiwxLCJzcGFuIiwxKSx6cigpKSwyJmEmJihSZSgibmdTd2l0Y2giLGQuc3RhdGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUu'@;
put 'TE9BRElORyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltuZCx0aF0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImRl'@;
put 'ZmF1bHRCdXR0b24iLFtmYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksZmMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjB9KV0pXSksYTEoInNwaW5uZXIiLFtmYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1'@;
put 'KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksZmMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pLGExKCJ2YWxpZGF0ZWQiLFtmYygiOmVudGVyIixbcnUoIjYwMG1zIixGbWUoW19zKHt0cmFu'@;
put 'c2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksX3Moe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksX3Moe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEp'@;
put 'IixvZmZzZXQ6MX0pXSkpXSksZmMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxfeWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9'@;
put 'LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxieWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKERLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbX3llLG15ZV19KSxjfSkoKSx5eWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIm5nLWNvbXBvbmVudCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe30sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksd0U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZp'@;
put 'KHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksd3llPTAsYWQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250cm9sLSIrICsrd3llLHRoaXMuX2lkQ2hhbmdlPW5ldyBUZSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lk'@;
put 'fXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0'@;
put 'b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxDeWU9MCxLNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRhaW5lci0iKyArK0N5ZSx0aGlzLl9pZENoYW5nZT1uZXcgVGUodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9p'@;
put 'ZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7bGV0IEZGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJhYnN0cmFjdCJ9Z2V0IGlkKCl7'@;
put 'cmV0dXJuIHRoaXMuY29udGFpbmVySWRTZXJ2aWNlP2Ake3RoaXMuY29udGFpbmVySWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6dGhpcy5jb250cm9sSWRTZXJ2aWNlP2Ake3RoaXMuY29udHJvbElkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOm51'@;
put 'bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLFN5ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMu'@;
put 'Y29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImVycm9yIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpj'@;
put 'LHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1lcnJvciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJpZCIsZC5pZCksZHIoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbZW9dLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6'@;
put 'MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIRj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRT'@;
put 'ZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImhlbHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtaGVscGVyIl1d'@;
put 'LGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxkcigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWko'@;
put 'KSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGswPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgYmUsdGhpcy5faGVscGVycz1uZXcgYmV9Z2V0IGNvbnRyb2xDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2xDaGFuZ2VzLmFz'@;
put 'T2JzZXJ2YWJsZSgpfWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sQ2hhbmdlcy5uZXh0KGEpfXNldEhlbHBlcnMoYSl7dGhpcy5faGVscGVycy5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgQTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuTk9ORT0iTk9ORSIsYy5WQUxJRD0iVkFMSUQiLGMuSU5WQUxJRD0iSU5WQUxJRCIsY30o'@;
put 'QTB8fHt9KTtsZXQgbGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3RhdHVzQ2hhbmdlcz1uZXcgVGUoQTAuTk9ORSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xT'@;
put 'ZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShkPT57ZCYmKHRoaXMuY29udHJvbD1kLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZSgpfSkpKX0pKX1nZXQgc3RhdHVz'@;
put 'Q2hhbmdlcygpe3JldHVybiB0aGlzLl9zdGF0dXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10cmlnZ2VyU3RhdHVzQ2hhbmdlKCl7aWYodGhpcy5jb250cm9sKXtjb25zdCBhPUEwW3Ro'@;
put 'aXMuY29udHJvbC5zdGF0dXNdO3RoaXMuX3N0YXR1c0NoYW5nZXMubmV4dChbIlZBTElEIiwiSU5WQUxJRCJdLmluY2x1ZGVzKGEpP2E6QTAuTk9ORSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihrMCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rv'@;
put 'a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBYNT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShYNXx8e30pO2xldCBPZj0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlzLmxheW91dD1YNS5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKFg1KS5tYXAoYT0+WDVbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4g'@;
put 'dGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlkKGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1'@;
put 'LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1LkhPUklaT05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09WDUuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlz'@;
put 'VmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJmE+PXRoaXMubWluTGFiZWxTaXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjfSksY30pKCksVXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPV8sdGhpcy5lbmFibGVH'@;
put 'cmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7KHRoaXMuY29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNl'@;
put 'KSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRo'@;
put 'aXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29s'@;
put 'LW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuZm9yQXR0cj1hKSl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhZCw4KSx0dChPZiw4KSx0dChrMCw4'@;
put 'KSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJmb3IiLGQuZm9yQXR0cil9LGlucHV0czp7Zm9yQXR0cjpbImZvciIsImZvckF0dHIiXX19KSxj'@;
put 'fSkoKSxNeWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZGe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxk'@;
put 'cigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9QTAuTk9ORSxkPSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIEEwLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIEEw'@;
put 'LklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNl'@;
put 'cnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxkKXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJj'@;
put 'bHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoT2YsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEE4PSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLl9keW5hbWljPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1'@;
put 'YnNjcmlwdGlvbnMucHVzaCh0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShfPT57dGhpcy5zdGF0ZT1fLHRoaXMudXBkYXRlSGVscGVycygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hh'@;
put 'bmdlcy5zdWJzY3JpYmUoXz0+e3RoaXMuY29udHJvbD1ffSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnQmJighIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudCYmKCF0aGlzLnRvdWNoZWR8fHRoaXMuc3RhdGU9PT1BMC5OT05FKXx8IXRo'@;
put 'aXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09QTAuSU5WQUxJRCl9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRCYm'@;
put 'ISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5JTlZBTElEJiYhIXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8udG91Y2hl'@;
put 'ZH1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3Mo'@;
put 'IXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BMC5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVy'@;
put 'dGljYWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQs'@;
put 'c2hvd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGxkKSx0dChPZiw4KSx0dChjZCksdHQoazApKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxjb250ZW50'@;
put 'UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoSW8oaCxVcyw1KSxJbyhoLE15ZSw1KSxJbyhoLFN5ZSw1KSxJbyhoLEhGLDUpKSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLGFpKGY9bGkoKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmly'@;
put 'c3QpLGFpKGY9bGkoKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxhaShmPWxpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBDRXtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3Is'@;
put 'IXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoSzApLGY9dGhpcy5pbmplY3Rvci5nZXQoTmkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoeXllKSk7Y29uc3QgXz1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5'@;
put 'KGwpLFQ9W107VFtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBXPWEuY3JlYXRlQ29tcG9uZW50KF8sdm9pZCAwLHZvaWQgMCxUKTthLnJlbW92ZSgwKSxXLmluc3RhbmNlLl9keW5hbWljPSEwLHRoaXMuaW5qZWN0b3I9Vy5pbmplY3Rvcn19Z2V0KGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0'@;
put 'b3IuZ2V0KGwsYSl9fWxldCBORj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZD1uZXcgYmV9Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZC5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZC5uZXh0KCl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFQ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMudmNyPWEsdGhpcy53cmFwcGVy'@;
put 'VHlwZT1kLHRoaXMubmdDb250cm9sPWYsdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbmRlcmVyPV8sdGhpcy5lbD1UO3RyeXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9aC5nZXQoazApLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGxkKSx0aGlzLmNv'@;
put 'bnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoY2QpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWguZ2V0KE5GKX1jYXRjaHt9dGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlJiZ0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuaW5pdENvbnRyb2xDbGFzcyhfLFQubmF0aXZlRWxlbWVudCksdGhpcy5tYXJr'@;
put 'Q29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5tYXJrQXNUb3VjaGVkKCl9KSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLm5nQ29udHJvbFNlcnZpY2UuaGVscGVyc0NoYW5nZS5zdWJzY3JpYmUoVz0+e3RoaXMuc2V0QXJpYURlc2NyaWJlZEJ5KFcpfSkpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJih0aGlzLmNvbnRyb2xJZFNl'@;
put 'cnZpY2UuaWQ9YSl9bmdPbkluaXQoKXt0aGlzLl9jb250YWluZXJJbmplY3Rvcj1uZXcgQ0UodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGFkKTt0cnl7dGhpcy5jb250YWluZXJJ'@;
put 'ZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KEs1KX1jYXRjaHt9dGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2Vy'@;
put 'dmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZp'@;
put 'Y2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNo'@;
put 'ZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRB'@;
put 'dHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtsZXQgZD0iaGVscGVyIjty'@;
put 'ZXR1cm4gYS5zaG93SW52YWxpZD9kPSJlcnJvciI6YS5zaG93VmFsaWQmJihkPSJzdWNjZXNzIiksdGhpcy5jb250YWluZXJJZFNlcnZpY2U/dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWQuY29uY2F0KCItIixkKTp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/dGhpcy5jb250cm9sSWRTZXJ2aWNl'@;
put 'LmlkLmNvbmNhdCgiLSIsZCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KE9tKSx0dChFYSksdHQoenUpLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1'@;
put 'bmN0aW9uKGEsZCl7MSZhJiZ4dCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZ0MSgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksWEo9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2Vydmlj'@;
put 'ZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJr'@;
put 'Q29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChPZiksdHQoTkYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpm'@;
put 'dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDUpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwy'@;
put 'JmEmJmRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbImNsckxhYmVsU2l6ZSIsImxhYmVs'@;
put 'U2l6ZSJdfSxmZWF0dXJlczpbdGkoW09mLE5GXSldfSksY30pKCksWWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxj'@;
put 'Llx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhXV19KSxjfSkoKTtjb25zdCBWRj1uZXcgU2koIklTX1RPR0dMRSIpLEF5ZT17cHJvdmlkZTpWRix1c2VGYWN0b3J5OmZ1bmN0aW9uIGt5ZSgpe3JldHVybiBuZXcgVGUoITEpfX07bGV0IFQwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSl7dGhpcy5fZHluYW1pYz0hMSx0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gt'@;
put 'd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsVXMsNyksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7'@;
put 'MiZhJiZkcigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbdGkoW2FkLEF5ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dzdlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSh5N2UpLGtyKDApLGtyKDEsMSksSmUoMixiN2UsMSwwLCJsYWJlbCIsMCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEMD0oKCk9PntjbGFzcyBjIGV4'@;
put 'dGVuZHMgVDh7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKGEsVDAsZCxoLGYsXyksdGhpcy50b2dnbGU9VH1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgYT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihWRixudWxsKTthJiZudWxsIT09dGhpcy50b2dnbGUm'@;
put 'JmEubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSksUDQoImNsclRvZ2dsZSIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyQ2hlY2ti'@;
put 'b3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxmZWF0dXJlczpbZW9dfSksY30pKCksRDg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRo'@;
put 'aXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9'@;
put 'bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNk'@;
put 'KSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxEMCw1KSwyJmEpe2xldCBm'@;
put 'O2FpKGY9bGkoKSkmJihkLmNoZWNrYm94ZXM9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9u'@;
put 'dWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbdGkoW2xkLGswLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpUN2UsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5n'@;
put 'SWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1'@;
put 'ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJh'@;
put 'cmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoQTdl'@;
put 'KSxrcigwKSxKZSgxLEM3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxKZSg1LFM3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDYsTTdlLDEsMCwiY2RzLWljb24iLDMpLEplKDcseDdlLDEsMCwiY2RzLWljb24iLDQpLEplKDgsRTdlLDEsMCwi'@;
put 'bmctY29udGVudCIsMCksSmUoOSxrN2UsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xh'@;
put 'c3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRl'@;
put 'bmNpZXM6W1ppLFVzLGRjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxUeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBl'@;
put 'OmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLFljLHdFXSxZY119KSxjfSkoKTtmdW5jdGlvbiB1ZChjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IHUyPSgoKT0+e2NsYXNzIGN7'@;
put 'Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9dWQoYSl9Z2V0IGludmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMu'@;
put 'X2ludmVyc2U9dWQoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXVkKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVybiF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVt'@;
put 'PXVkKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtYnVz'@;
put 'eSIsITApLGRyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5uZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRz'@;
put 'OntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3Io'@;
put 'MCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxBYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO3ZhciB4'@;
put 'cD1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfSh4cHx8e30pO2xldCBKSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5wbGF0Zm9ybUlk'@;
put 'PWR9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKSh0dChOaSksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXNJdGVtIiwiIl1dfSksY30pKCksSTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLmRpcmVjdGlvbj14cC5W'@;
put 'RVJUSUNBTCx0aGlzLmZvY3VzT25Mb2FkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBFcix0aGlzLl9jdXJyZW50PTB9Z2V0IGZvY3VzYWJsZUl0ZW1zKCl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuX2ZvY3VzYWJsZUl0ZW1zOnRoaXMu'@;
put 'Y2xyS2V5Rm9jdXNJdGVtcz90aGlzLmNscktleUZvY3VzSXRlbXMudG9BcnJheSgpOltdfXNldCBmb2N1c2FibGVJdGVtcyhhKXtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzYWJsZUl0ZW1zPWEsdGhpcy5pbml0aWFsaXplRm9jdXMoKSl9Z2V0IG5hdGl2ZUVsZW1l'@;
put 'bnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRJdGVtKCl7cmV0dXJuIHRoaXMuZm9jdXNh'@;
put 'YmxlSXRlbXNbdGhpcy5fY3VycmVudF19Z2V0IGN1cnJlbnRJdGVtRWxlbWVudCgpe3JldHVybiB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ/dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50OnRoaXMuY3VycmVudEl0ZW19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JJdGVtVXBkYXRlcygpKSx0aGlzLmluaXRpYWxpemVGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVLZXlib2FyZEV2ZW50KGEpe2lmKHRoaXMuY3VycmVu'@;
put 'dEl0ZW1FbGVtZW50IT09YS50YXJnZXQpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO3RoaXMucG9zaXRpb25JblJhbmdlKGQpJiYodGhpcy5jdXJyZW50PWQpfXRoaXMucHJldktleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKT90'@;
put 'aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQtMSk6dGhpcy5uZXh0S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50KzEpOmEuY29kZT09PXdvLkhvbWU/dGhpcy5tb3ZlVG8oMCk6YS5jb2RlPT09d28uRW5kJiZ0aGlz'@;
put 'Lm1vdmVUbyh0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSxURihhKX1zZXRDbGlja2VkSXRlbUN1cnJlbnQoYSl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7ZD4tMSYmdGhpcy5tb3ZlVG8oZCl9Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1'@;
put 'cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8oYSl7dGhpcy5wb3NpdGlvbkluUmFuZ2UoYSkmJih0aGlzLmN1cnJlbnQ9YSx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2UoYSl7cmV0dXJuIGE+PTAmJmE8dGhpcy5mb2N1c2FibGVJdGVt'@;
put 'cy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudC0xPj0wfWN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMu'@;
put 'Zm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD49dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJ'@;
put 'dGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KCkpKX1uZXh0S2V5UHJlc3NlZChhKXtjb25zdCBkPWwyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgeHAuVkVSVElDQUw6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd247Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBk'@;
put 'PT09d28uQXJyb3dSaWdodDtjYXNlIHhwLkJPVEg6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd258fGQ9PT13by5BcnJvd1JpZ2h0O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSB4cC5WRVJUSUNB'@;
put 'TDpyZXR1cm4gZD09PXdvLkFycm93VXA7Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBkPT09d28uQXJyb3dMZWZ0O2Nhc2UgeHAuQk9USDpyZXR1cm4gZD09PXdvLkFycm93VXB8fGQ9PT13by5BcnJvd0xlZnQ7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKGEpe3JldHVybiB0'@;
put 'aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoYSk6dGhpcy5mb2N1c2FibGVJdGVtcy5tYXAoZD0+ZC5uYXRpdmVFbGVtZW50KS5pbmRleE9mKGEpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2Vz'@;
put 'LnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1'@;
put 'ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxKSiw1KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXli'@;
put 'b2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246WyJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxmb2N1c09uTG9hZDpbImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxm'@;
put 'b2N1c2FibGVJdGVtczpbImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdlIn0sYXR0cnM6RDdlLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFp'@;
put 'KCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxCRj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp'@;
put 'O2NvbnN0IEw4PW5ldyBTaSgiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2NsYXNzIER5ZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwp'@;
put 'fWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10b1N0'@;
put 'cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xdP2hb'@;
put 'bF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3QgYT10'@;
put 'aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBJeWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1sfXVu'@;
put 'c2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0aGlz'@;
put 'Lm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBTRXt9ZnVuY3Rpb24gUUooYyl7cmV0dXJuW2Mse3Byb3ZpZGU6U0UsdXNlRXhpc3Rpbmc6Y31dfWNsYXNzIEx5ZSBleHRlbmRzIEl5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50'@;
put 'cyksdGhpcy5fZm9jdXNDaGFuZ2VkPW5ldyBUZShudWxsKX1nZXQgZm9jdXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QobCl7dGhpcy5tb2RlbCE9PWwmJih0aGlzLm1vZGVsPWwsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQobCkpfX1s'@;
put 'ZXQgUnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9ITEsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgVGUoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3IHF4KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0'@;
put 'Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1'@;
put 'dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgRHllfXNl'@;
put 'bGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVj'@;
put 'dGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMu'@;
put 'c2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNl'@;
put 'bGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO1FKKCgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWgsdGhpcy5wbGF0'@;
put 'Zm9ybUlkPWYsdGhpcy5wc2V1ZG9Gb2N1cz1uZXcgTHllLHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQg'@;
put 'dHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goYSl7dGhpcy5fbGlzdGJveD1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgdGV4dElu'@;
put 'cHV0KCl7cmV0dXJuIHRoaXMuX3RleHRJbnB1dH1zZXQgdGV4dElucHV0KGEpe3RoaXMuX3RleHRJbnB1dD1hLHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24iLGQ9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChkKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWZvY3VzSW5w'@;
put 'dXQoKXt0aGlzLnRleHRJbnB1dCYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhp'@;
put 'cy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBhO2E9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVj'@;
put 'dGlvbk1vZGVsLm1vZGVsO2NvbnN0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmQoaD0+aC52YWx1ZT09PWEpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KGR8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXMoYSl7'@;
put 'dGhpcy5vcHRpb25EYXRhPWF9aGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2F8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oYSl7bGV0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmRJ'@;
put 'bmRleChoPT5oLmVxdWFscyh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsKSk7YT09PWQxLlVQPy0xPT09ZHx8MD09PWQ/ZD10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ZC0tOmE9PT1kMS5ET1dOJiYoLTE9PT1kfHxkPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP2Q9MDpkKyspLHRoaXMucHNl'@;
put 'dWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVtkXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhhKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShp'@;
put 'ZCgxKSkuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLm1vdmVGb2N1c1RvKGEpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChhKXtsZXQgZD0hMTtjb25zdCBoPWwyKGEua2V5KTtpZihhKXN3aXRjaChoKXtjYXNlIHdvLkVudGVyOnRoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS5vcGVuJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5w'@;
put 'c2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSksZD0hMCk7YnJlYWs7Y2FzZSB3by5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLGQ9ITApO2JyZWFrO2Nhc2Ugd28uQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0'@;
put 'aGlzLm9wZW5BbmRNb3ZlVG8oZDEuVVApLGQ9ITA7YnJlYWs7Y2FzZSB3by5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKGQxLkRPV04pLGQ9ITA7YnJlYWs7ZGVmYXVsdDphLmtleSE9PXdvLlRhYiYmKCF0aGlzLnNlbGVjdGlv'@;
put 'blNlcnZpY2UubXVsdGlzZWxlY3RhYmxlfHxhLmtleSE9PXdvLkJhY2tzcGFjZSkmJmEua2V5IT09d28uRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIGR9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoYT0ic21vb3Ro'@;
put 'Iil7dGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5n'@;
put 'KGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl7UnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChkKSYmKHRo'@;
put 'aXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoYSl7Y29uc3QgZD1hLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0'@;
put 'aGlzLnRleHRJbnB1dC5jb250YWlucyhkKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKGQpfHx0aGlzLmxpc3Rib3guY29udGFpbnMoZCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoS3MpLGFyKFJ5ZSksYXIoR3MpKX0sYy5cdTAy'@;
put 'NzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSk7bGV0IE95ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsbmIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28scWwsc2EsQkYsWWMsc2QseGIsQWJdLFljLHNkXX0pLGN9KSgpLGpGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBOHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJj'@;
put 'bHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOlt0aShbbGQsazAsYWQsY2RdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOno3ZSxkZWNsczoxMCx2YXJzOjcsY29u'@;
put 'c3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlk'@;
put 'ZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJk'@;
put 'YW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoQWkoajdlKSxrcigwKSxKZSgxLFA3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksa3IoNCwxKSxKZSg1LEY3ZSwxLDAsImNkcy1pY29uIiwzKSxKZSg2LEg3ZSwxLDAsImNkcy1pY29uIiw0KSx5ZSgpLEplKDcsTjdlLDEsMCwibmctY29udGVudCIsMCksSmUo'@;
put 'OCxWN2UsMSwwLCJuZy1jb250ZW50IiwwKSxKZSg5LEI3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLFJlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxDZSgzKSxSZSgibmdJZiIsZC5zaG93'@;
put 'SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbWmksVXMsZGMscXNdLGVuY2Fwc3Vs'@;
put 'YXRpb246Mn0pLGN9KSgpLGYxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEsakYsZCxoLGYsXyksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0'@;
put 'KHp1LDEwKSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySW5wdXQiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLGVR'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxxbCxzYSxZY10sWWNd'@;
put 'fSksY30pKCksekY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IFRlKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFB5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sZVEsc2FdXX0pLGN9KSgpO2NvbnN0IEh5ZT0vZCsuK20rLit5Ky9pLE55ZT0vbSsuK2QrLit5Ky9pLFZ5ZT0vZCt8bSt8eSsvaSxCeWU9L1xk'@;
put 'Ky9nLGp5ZT0vTW9iaS9pLHp5ZT0vXHUyMDBmL2csVUY9IllZWVkiLE1FPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixVRl19LFdGPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkREIixVRl19LFV5ZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0'@;
put 'OltVRiwiTU0iLCJERCJdfTtmdW5jdGlvbiBuUShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3MgJHlle2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSxfPSExKXt0aGlzLmRheU1vZGVsPWwsdGhpcy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhj'@;
put 'bHVkZWQ9ZCx0aGlzLmlzRGlzYWJsZWQ9aCx0aGlzLmlzU2VsZWN0ZWQ9Zix0aGlzLmlzRm9jdXNhYmxlPV99Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgcDF7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlz'@;
put 'LmRhdGU9ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2Nv'@;
put 'bnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgcDEoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHAxKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21w'@;
put 'YXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6'@;
put 'YCR7bH1gfX1jbGFzcyBxeWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMuY2FsZW5kYXI9bCx0aGlzLnNlbGVjdGVkRGF5PWEsdGhpcy5mb2N1c2FibGVEYXk9ZCx0aGlzLnRvZGF5PWgsdGhpcy5maXJzdERheU9mV2Vlaz1mLHRoaXMuZXhjbHVkZWREYXRlcz1fLHRoaXMuY3Vyck1v'@;
put 'bnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9jYWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRG'@;
put 'b2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmll'@;
put 'dyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSxfPVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9u'@;
put 'dGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGg+MCYmKF89dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFy'@;
put 'VmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsXyksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29t'@;
put 'cGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSxfPWwudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuIShfPj1oJiZfPD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+bmV3ICR5ZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRl'@;
put 'ZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gWXllKGMs'@;
put 'bCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFy'@;
put 'LmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1bLi4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCBfPTA7Xzw2O18rKylmW19dPWguc2xpY2UoNypfLDcqKF8rMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2Vs'@;
put 'ZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbdGhpcy5zZWxlY3RlZERheS5kYXRlLTFdLmlzU2VsZWN0ZWQ9ITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhp'@;
put 'cy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5KT90aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVG'@;
put 'bGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhp'@;
put 'cy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IHAxKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vy'@;
put 'ck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfX1sZXQgVGI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3Jl'@;
put 'dHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1'@;
put 'cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVEYXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhp'@;
put 'cy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygp'@;
put 'fWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPWNPKHRoaXMubG9jYWxlLEFjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKSxoPWNPKHRoaXMubG9jYWxlLEFjLlN0YW5kYWxvbmUsbmEuTmFycm93KS5zbGljZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IF89'@;
put 'MDtfPDc7XysrKWEucHVzaCh7ZGF5OmRbX10sbmFycm93OmhbX119KTtpZihmPjApe2NvbnN0IF89YS5zcGxpY2UoMCxmKTthLnB1c2goLi4uXyl9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlh'@;
put 'dGVkPXVPKHRoaXMubG9jYWxlLEFjLlN0YW5kYWxvbmUsbmEuQWJicmV2aWF0ZWQpLnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPXVPKHRoaXMubG9jYWxlLEFjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXpl'@;
put 'Rmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBQdWUoYyl7cmV0dXJuIGpsKGMpW3FvLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiB4Xyhj'@;
put 'LGwpe3JldHVybiB0ZChqbChjKVtxby5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUseTAuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihLZCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p'@;
put 'LGN9KSgpO2NsYXNzIGQye2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVu'@;
put 'ZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBkMih0aGlzLnllYXItMSwxMSk6bmV3IGQyKHRoaXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3Jl'@;
put 'dHVybiAxMT09PXRoaXMubW9udGg/bmV3IGQyKHRoaXMueWVhcisxLDApOm5ldyBkMih0aGlzLnllYXIsdGhpcy5tb250aCsxKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPW5RKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5t'@;
put 'YXAoKGEsZCk9Pm5ldyBwMSh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgYmUsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJD'@;
put 'aGFuZ2U9bmV3IGJlLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgYmUsdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgYmV9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1n'@;
put 'ZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpc3BsYXllZENhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c09uQ2Fs'@;
put 'ZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c2VkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9bm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGEpe3RoaXMu'@;
put 'c2VsZWN0ZWREYXk9YSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5uZXh0KGEpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBkMih0'@;
put 'aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IGQyKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEp'@;
put 'KX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IGQyKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1t'@;
put 'b3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb0N1cnJlbnRNb250aCgpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpfHx0aGlz'@;
put 'LnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5mb2N1c2VkRGF5PXRoaXMuZm9jdXNlZERheS5pbmNyZW1lbnRCeShh'@;
put 'KSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy5mb2N1c2VkRGF5KT90aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLm5leHQodGhpcy5mb2N1c2VkRGF5KTp0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLmZvY3VzZWREYXkueWVhcix0aGlzLmZv'@;
put 'Y3VzZWREYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hh'@;
put 'bmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgcDEodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1'@;
put 'bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE84PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pv'@;
put 'bmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRl'@;
put 'eD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gUnModGhp'@;
put 'cy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodXAoKSxJYSgoKT0+UnModGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxQOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0'@;
put 'aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IHAxKDAsMCwxKSxtYXhEYXRlOm5ldyBwMSg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PU1FLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5j'@;
put 'bGRyTG9jYWxlRGF0ZUZvcm1hdD10aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0'@;
put 'dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcChfPT5wYXJzZUludChfLDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKGQsaC0x'@;
put 'LGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKF89PnBhcnNlSW50KF8sMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoZCxoLTEsZil9ZWxz'@;
put 'ZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoOTk5OSwxMSwzMSl9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0'@;
put 'cmluZygpOiIwIitkLF89aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TUU/Zit0aGlzLmRlbGltaXRlcnNbMF0rXyt0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PVdGP18r'@;
put 'dGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK18rdGhpcy5kZWxpbWl0ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWEpcmV0dXJu'@;
put 'IG51bGw7Y29uc3QgZD1hLm1hdGNoKEJ5ZSk7aWYoIWR8fDMhPT1kLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdFtoLGYsX109ZDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TUU/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoXyxmLGgpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1h'@;
put 'dD09PVdGP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKF8saCxmKTp0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShoLGYsXyl9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2Fs'@;
put 'ZURpc3BsYXlGb3JtYXQ9SHllLnRlc3QoYSk/TUU6TnllLnRlc3QoYSk/V0Y6VXllLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNl'@;
put 'KHp5ZSwiIikuc3BsaXQoVnllKTtkJiY0PT09ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQuIERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+'@;
put 'LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgpe3JldHVybiBoPjAmJmg8PW5RKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLF89K2QtMSxUPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aChfKXx8IXRoaXMuaXNWYWxpZERhdGUoZixfLFQpKXJldHVybiBudWxsO2Nv'@;
put 'bnN0IFc9ZnVuY3Rpb24gV3llKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDAp'@;
put 'LGR9KGYpO3JldHVybi0xIT09Vz9uZXcgRGF0ZShXLF8sVCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoVGIpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxEYj0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgYmUsdGhpcy5fZGlydHlDaGFuZ2U9bmV3IGJlfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rp'@;
put 'cnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHJRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdG9nZ2xlU2VydmljZT1k'@;
put 'LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mfWdldCBkYXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/'@;
put 'dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9b25E'@;
put 'YXlWaWV3Rm9jdXMoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWx9c2VsZWN0RGF5KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRheVZpZXcuZGF5TW9kZWwpLHRo'@;
put 'aXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoUGYpLHR0KEtzKSx0dChEYiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6WyJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxkZWNsczoyLHZhcnM6MTMsY29uc3RzOltbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdG'@;
put 'b2N1cygpfSksTmUoMSkseWUoKSksMiZhJiYoZHIoImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1Nl'@;
put 'bGVjdGVkKSxUcigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLENlKDEp'@;
put 'LGdyKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksaVE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlz'@;
put 'Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZGF0ZUlPU2VydmljZT1mLHRoaXMuX2VsUmVmPV8sdGhpcy5fc3Vicz1bXSx0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMu'@;
put 'X2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9'@;
put 'Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZv'@;
put 'Y3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChsMihhLmtleSkpe2Nhc2Ugd28uQXJyb3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhp'@;
put 'cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIHdvLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OmEu'@;
put 'cHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2Ugd28uQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1pbml0'@;
put 'aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNj'@;
put 'cmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX0pKX1nZW5lcmF0ZUNhbGVuZGFyVmlldygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IHF5ZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5mb2N1c2VkRGF5'@;
put 'LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYiksdHQoUGYpLHR0KE84KSx0dChQOCks'@;
put 'dHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6'@;
put 'W1sxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLCJyb2xlIiwiaGVhZGluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImNhbGVuZGFyLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9m'@;
put 'Il0sWyJyb2xlIiwiaGVhZGluZyIsMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJihtZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLEplKDIsVTdlLDIsMiwidGgiLDIpLHllKCksSmUoMyxZN2UsMiwxLCJ0ciIsMykseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQuY2FsZW5kYXJW'@;
put 'aWV3TW9kZWwuY2FsZW5kYXJWaWV3KSl9LGRlcGVuZGVuY2llczpbclEseHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHhFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSx0aGlzLl9kb2N1bWVudCYmKHRo'@;
put 'aXMuX2lzVXNlckFnZW50TW9iaWxlPWp5ZS50ZXN0KGEuZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5faW5uZXJXaWR0aD1hLmRlZmF1bHRWaWV3LmlubmVyV2lkdGgpfWdldCBpc0VuYWJsZWQoKXtyZXR1cm4hKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9pbm5lcldpZHRo'@;
put 'PDc2OCYmdGhpcy5faXNVc2VyQWdlbnRNb2JpbGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEY4PSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLnBvc2l0aW9uPXgwWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3Vy'@;
put 'cmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNo'@;
put 'YW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksb1E9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9ZCx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWYsdGhpcy5fZWxSZWY9Xyx0aGlzLl9mb2N1c2Vk'@;
put 'TW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlz'@;
put 'cGxheWVkQ2FsZW5kYXIubW9udGh9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPWwyKGEua2V5KTtkPT09d28uQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5k'@;
put 'ZXg+MD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVs'@;
put 'dCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8Nj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250'@;
put 'aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4KzYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD41JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRN'@;
put 'b250aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4LTYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19Y2hhbmdlTW9udGgoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGEpLHRoaXMuX3ZpZXdNYW5hZ2Vy'@;
put 'U2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gYT09PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4PzA6LTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEY4KSx0dChUYiksdHQoUGYpLHR0KE84KSx0dChOaSkp'@;
put 'fSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9udGhwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSwyJmEmJmRyKCJtb250aHBp'@;
put 'Y2tlciIsITApfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRo'@;
put 'IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmSmUoMCxXN2UsMiw0LCJidXR0b24iLDApLDImYSYmUmUoIm5nRm9yT2YiLGQubW9udGhOYW1lcyl9LGRlcGVuZGVuY2llczpbeHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIElie2NvbnN0cnVjdG9yKGwp'@;
put 'e3RoaXMueWVhcj1sLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgSWIodGhpcy55'@;
put 'ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgSWIodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBJYigobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZ'@;
put 'ZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IGFRPSgoKT0+e2NsYXNz'@;
put 'IGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnllYXJSYW5nZU1v'@;
put 'ZGVsPW5ldyBJYih0aGlzLmNhbGVuZGFyWWVhciksdGhpcy5fZm9jdXNlZFllYXI9dGhpcy5jYWxlbmRhclllYXJ9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlz'@;
put 'Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO2Q9PT13by5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMSkpOmQ9PT13by5BcnJvd0Rv'@;
put 'd24/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDEpKTpkPT09d28uQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoNSkpOmQ9PT13by5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5p'@;
put 'bmNyZW1lbnRGb2N1c1llYXJCeSgtNSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1wcmV2aW91c0RlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhp'@;
put 'cy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpfWN1cnJlbnREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5LnllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLmN1cnJl'@;
put 'bnREZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5leHREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwubmV4dERlY2FkZSgpfWdldFRhYkluZGV4KGEpe3JldHVybiB0aGlzLnllYXJSYW5n'@;
put 'ZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy5fZm9jdXNlZFllYXI9dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuY2FsZW5kYXJZZWFyKT90aGlzLmNhbGVuZGFyWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVllYXIpLHRoaXMuX2ZvY3VzZWRZ'@;
put 'ZWFyPT09YT8wOi0xfWluY3JlbWVudEZvY3VzWWVhckJ5KGEpe3RoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuX2ZvY3VzZWRZZWFyK2EsdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9YT4wP3RoaXMueWVhclJhbmdlTW9k'@;
put 'ZWwubmV4dERlY2FkZSgpOnRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQZiksdHQo'@;
put 'RjgpLHR0KE84KSx0dChOaSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXllYXJwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURv'@;
put 'd24oZil9KSwyJmEmJmRyKCJ5ZWFycGlja2VyIiwhMCl9LGRlY2xzOjksdmFyczo3LGNvbnN0czpbWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJs'@;
put 'ZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb'@;
put 'InR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJidXR0b24iLDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSkscXQoMiwi'@;
put 'Y2RzLWljb24iLDIpLHllKCksbWUoMywiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSkscXQoNCwiY2RzLWljb24iLDMpLHllKCksbWUoNSwiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2Fk'@;
put 'ZSgpfSkscXQoNiwiY2RzLWljb24iLDQpLHllKCkoKSxtZSg3LCJkaXYiLDUpLEplKDgsRzdlLDIsNCwiYnV0dG9uIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlKSxDZSgxKSxUcigidGl0'@;
put 'bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNr'@;
put 'ZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDEpLFRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDIpLFJlKCJuZ0Zvck9mIixkLnll'@;
put 'YXJSYW5nZU1vZGVsLnllYXJSYW5nZSkpfSxkZXBlbmRlbmNpZXM6W3FzLHhzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxsUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1k'@;
put 'LHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9N'@;
put 'T05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0'@;
put 'cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4g'@;
put 'dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5n'@;
put 'ZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5h'@;
put 'dmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGOCksdHQoUGYpLHR0KFRiKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2Vy'@;
put 'Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29uc3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJi'@;
put 'dXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIs'@;
put 'MSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUo'@;
put 'MCwiZGl2IiwwKSxOZSgxKSx5ZSgpLG1lKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksTmUoNSkseWUoKSxtZSg2LCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxOZSg3KSx5ZSgpKCksbWUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxxdCgxMCwiY2RzLWljb24iLDcpLHllKCksbWUoMTEsImJ1dHRvbiIsNikseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSkscXQoMTIsImNkcy1pY29uIiw4KSx5ZSgpLG1lKDEzLCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLHF0KDE0LCJjZHMtaWNvbiIsOSkseWUoKSgpKCkscXQo'@;
put 'MTUsImNsci1jYWxlbmRhciIpLG1lKDE2LCJkaXYiLDApLE5lKDE3KSx5ZSgpKSwyJmEmJihDZSgxKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoMyksVHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9udGhBdHRyU3Ry'@;
put 'aW5nKSxDZSgxKSxncigiICIsZC5jYWxlbmRhck1vbnRoLCIgIiksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksQ2UoMSksZ3IoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksQ2UoMiksVHIoImFyaWEtbGFiZWwiLGQuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRN'@;
put 'b250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu'@;
put 'a2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxDZSgzKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltpUSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksY1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9u'@;
put 'U3RyaW5ncz1hLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWR9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzTW9udGhWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXd9Z2V0IGlzRGF5'@;
put 'Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChGOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12'@;
put 'aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxk'@;
put 'cigiZGF0ZXBpY2tlciIsITApKX0sZmVhdHVyZXM6W3RpKFtPOF0pXSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoSmUoMCwkN2UsMSwwLCJjbHItbW9udGhwaWNrZXIiLDApLEplKDEscTdlLDEsMCwiY2xyLXllYXJwaWNr'@;
put 'ZXIiLDApLEplKDIsSzdlLDEsMCwiY2xyLWRheXBpY2tlciIsMCkpLDImYSYmKFJlKCJuZ0lmIixkLmlzTW9udGhWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc1llYXJWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc0RheVZpZXcpKX0sZGVwZW5kZW5jaWVzOltvUSxhUSxsUSxaaV0sZW5jYXBz'@;
put 'dWxhdGlvbjoyfSksY30pKCksTGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUscGUsd2UsRWUsWmUsaXQpe3N1cGVyKGl0LEVlLHdlLFplKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5kYXRlTmF2aWdhdGlv'@;
put 'blNlcnZpY2U9aCx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1mLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1fLHRoaXMuZGF0ZUlPU2VydmljZT1ULHRoaXMuY29tbW9uU3RyaW5ncz1XLHRoaXMuZm9jdXNTZXJ2aWNlPWllLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPXBlLHRo'@;
put 'aXMuY29udHJvbENsYXNzU2VydmljZT13ZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPVplLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWl0LHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c1NlcnZpY2UuZm9jdXND'@;
put 'aGFuZ2Uuc3Vic2NyaWJlKGV0PT57dGhpcy5mb2N1cz1ldH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfSkpfXNldCBjbHJQb3Np'@;
put 'dGlvbihhKXthJiZ4MFthXSYmKHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9uPXgwW2FdKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQg'@;
put 'b3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNh'@;
put 'YmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMu'@;
put 'aW5pdGlhbGl6ZUNhbGVuZGFyKCk6dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGF0ZUNoYW5nZXMoKSl9Z2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJ'@;
put 'T1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEudG9EYXRlKCkpO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbCx7U0VMRUNURURfREFURTpkfSl8fHRoaXMuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9bGlzdGVuRm9yRGF0ZUNoYW5nZXMoKXtyZXR1'@;
put 'cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShjcCh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkpLnN1YnNjcmliZShhPT57aWYodGhpcy5pc0VuYWJsZWQpe2NvbnN0IGQ9dGhpcy5nZXRUb2dnbGVCdXR0b25MYWJlbChh'@;
put 'KSxoPXRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQ7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwiYXJpYS1sYWJlbCIsZCksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwidGl0bGUiLGQpfX0pfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZGF0ZU5hdmlnYXRpb25T'@;
put 'ZXJ2aWNlLmluaXRpYWxpemVDYWxlbmRhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoS3MpLHR0KFBmKSx0dCh4RSksdHQoRGIpLHR0KFA4KSx0dChFcyksdHQoekYpLHR0KEY4KSx0dChjZCksdHQoT2YsOCksdHQoazApLHR0'@;
put 'KGxkKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKFg3ZSw1KSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJz'@;
put 'OjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1'@;
put 'dHM6e2NsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiJ9LGZlYXR1cmVzOlt0aShbYWQsS3MsSWYsUzgsVGIsY2QsekYsazAsUDgsUGYseEUsRGIsRjgsbGRdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOmE5ZSxkZWNsczoxMyx2YXJzOjE0LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRy'@;
put 'b2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwiY2xhc3MiLCJjbHItaW5wdXQtZ3Jv'@;
put 'dXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjbHJGb2N1c1RyYXAiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xs'@;
put 'VG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJj'@;
put 'bGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCJdLFsiYWN0aW9uQnV0dG9uIiwi'@;
put 'Il0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2xyRm9jdXNUcmFwIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hl'@;
put 'Y2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaShzOWUpLGtyKDApLEplKDEsSjdlLDEsMCwibGFiZWwiLDApLG1lKDIsImRpdiIsMSkoMywiZGl2Iiwy'@;
put 'KSg0LCJkaXYiLDMpLGtyKDUsMSksSmUoNixRN2UsMywxLCJidXR0b24iLDQpLEplKDcsZTllLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw1KSx5ZSgpLEplKDgsdDllLDEsMCwiY2RzLWljb24iLDYpLEplKDksbjllLDEsMCwiY2RzLWljb24iLDcpLHllKCksSmUoMTAscjll'@;
put 'LDEsMCwibmctY29udGVudCIsMCksSmUoMTEsaTllLDEsMCwibmctY29udGVudCIsMCksSmUoMTIsbzllLDEsMCwibmctY29udGVudCIsMCkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNz'@;
put 'KCkpLENlKDIpLGRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLENlKDIpLFJlKCJuZ0lmIixkLmlzRW5hYmxlZCksQ2UoMSksUmUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lk'@;
put 'ZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5z'@;
put 'aG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbY1EsWmksVXMsZGMsd2IsTWIscXMsU2IsTXBdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCRGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGll'@;
put 'LHBlLHdlLEVlLFplLGl0KXtzdXBlcihhLExiLGQsXyxmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPV8sdGhpcy5jb250YWluZXI9VCx0aGlzLmRhdGVJT1NlcnZpY2U9Vyx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1pZSx0aGlzLmRhdGVwaWNrZXJFbmFi'@;
put 'bGVkU2VydmljZT1wZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9d2UsdGhpcy5wbGF0Zm9ybUlkPUVlLHRoaXMuZm9jdXNTZXJ2aWNlPVplLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1pdCx0aGlzLmRhdGVDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmluZGV4PTF9c2V0IGRhdGUo'@;
put 'YSl7dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUodGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXNldCBtaW4oYSl7dGhpcy5k'@;
put 'YXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSl9c2V0IG1heChhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShhKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZDpudWxsfXNl'@;
put 'dCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5zZXREaXNhYmxlZCh1ZChhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9T'@;
put 'ZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIFJzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNv'@;
put 'bnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0'@;
put 'eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9u'@;
put 'KCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBp'@;
put 'Zih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsX109YS52YWx1ZS5zcGxpdCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCtfKSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1'@;
put 'cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5m'@;
put 'b2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoUDgpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJG'@;
put 'cm9tQ29udGFpbmVyKFBmKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcih4RSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKERiKSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMo'@;
put 'KXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11'@;
put 'cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7ZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UmJih0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj'@;
put 'ZS5zZWxlY3RlZERheT1oP25ldyBwMShoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLGguZ2V0RGF0ZSgpKTpudWxsKSx0aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmlu'@;
put 'ZyhhKTt0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNr'@;
put 'ZXJIYXNGb3JtQ29udHJvbCgpJiZkIT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5'@;
put 'KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1Nl'@;
put 'cnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uIEd5ZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYm'@;
put 'Yy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYo'@;
put 'dGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiBXaSh0aGlzLmRhdGVwaWNrZXJIYXNG'@;
put 'b3JtQ29udHJvbCgpKS5waXBlKElhKGE9PmEpLFNhKCgpPT50aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzKSxJYSgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVE'@;
put 'YXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpfWxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRl'@;
put 'RGF0ZShhLnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoSWEoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJv'@;
put 'bC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKElhKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNv'@;
put 'bnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShJYShhPT4hIWEpKS5zdWJzY3JpYmUoKCk9PnRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5m'@;
put 'b2N1c0lucHV0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0KE5pKSx0dChGbyksdHQoenUsMTApLHR0KExiLDgpLHR0KFA4LDgpLHR0KFBmLDgpLHR0KHhFLDgpLHR0KERiLDgp'@;
put 'LHR0KEdzKSx0dCh6Riw4KSx0dChPOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2V0Rm9jdXNTdGF0'@;
put 'ZXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblZhbHVlQ2hhbmdlKGYudGFyZ2V0KX0pLDImYSYmKHQxKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksVHIoInBsYWNlaG9sZGVyIixkLnBs'@;
put 'YWNlaG9sZGVyVGV4dCkoInR5cGUiLGQuaW5wdXRUeXBlKSxkcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGF0ZTpbImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4IixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntk'@;
put 'YXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFtPOF0pLGVvXX0pLGN9KSgpLHFGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlP'@;
put 'U2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8dGhpcy5kYXRl'@;
put 'SU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSlyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0Rh'@;
put 'dGUoKSlyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQOCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0'@;
put 'eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXV0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTppdSx1c2VFeGlzdGluZzpjLG11bHRpOiEwfV0pXX0pLGN9KSgpLFh5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsY21lLHVtZSl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyx3RSxzZCx4YixzYSx5RSxZY11dfSksY30pKCk7bmV3IFNpKHZvaWQgMCk7bGV0IGV3ZT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoZG1lLGhtZSxvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxxbCxzYSxZY10sWWNdfSksY30pKCks'@;
put 'S0Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDcpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezImYSYmZHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOlt0aShbYWRdKV0sbmdDb250ZW50U2VsZWN0b3JzOnU5ZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoYzllKSxrcigwKSxrcigxLDEp'@;
put 'LEplKDIsbDllLDEsMCwibGFiZWwiLDApKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltaaSxVc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWEY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxL'@;
put 'RixkLGgsZixfKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KEVhKSx0dCh6dSwxMCksdHQoRm8pLHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltl'@;
put 'b119KSxjfSkoKSx0d2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3Rh'@;
put 'dGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMo'@;
put 'KX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoT2YsOCksdHQoY2QpLHR0KGswKSx0dChsZCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWEYsNSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm'@;
put 'KFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxp'@;
put 'bmUifSxmZWF0dXJlczpbdGkoW2swLGxkLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpfOWUsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNs'@;
put 'YXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi'@;
put 'c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIs'@;
put 'InN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkodjllKSxrcigwKSxKZSgxLGQ5ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxKZSg1LGg5'@;
put 'ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDYsZjllLDEsMCwiY2RzLWljb24iLDMpLEplKDcscDllLDEsMCwiY2RzLWljb24iLDQpLEplKDgsZzllLDEsMCwibmctY29udGVudCIsMCksSmUoOSxtOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwh'@;
put 'ZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLGRjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxud2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp'@;
put 'e1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFljLHdFLHNhXSxZY119KSxjfSkoKSxyd2U9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFljLHdFLHNhXSxZY119KSxjfSkoKSxIOD0oKCk9'@;
put 'PntjbGFzcyBjIGV4dGVuZHMgQTh7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11'@;
put 'bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShhPT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgZGIsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJD'@;
put 'bGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNkKSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9'@;
put 'd3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxkYiw1KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W3RpKFtsZCxrMCxhZCxj'@;
put 'ZF0pLGVvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RTllLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFs'@;
put 'aWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKHg5ZSksa3IoMCksSmUoMSxiOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksSmUoNSx5OWUsMSwwLCJjZHMtaWNvbiIsMyksSmUoNix3OWUsMSwwLCJjZHMtaWNvbiIs'@;
put 'NCkseWUoKSxKZSg3LEM5ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDgsUzllLDEsMCwibmctY29udGVudCIsMCksSmUoOSxNOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIs'@;
put 'ZC5jb250cm9sQ2xhc3MoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLENlKDIpLFJlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dIZWxwZXIpLENlKDEpLFJlKCJuZ0lmIixkLnNo'@;
put 'b3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltaaSxVcyxkYyxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTjg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxIOCxkLGgsZixfKSx0'@;
put 'aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6'@;
put 'Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItc2VsZWN0IiwhMCl9LGZlYXR1cmVzOltlb119KSxjfSkoKSxpd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHFsLHNhLFljXSxZY119KSxjfSkoKSx1UT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQTh7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5j'@;
put 'dGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1mb3JtLWNvbnRyb2wi'@;
put 'LCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbdGkoW2xkLGswLGFkLGNkXSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpPOWUsZGVjbHM6MTAsdmFy'@;
put 'czo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIi'@;
put 'LCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwi'@;
put 'c3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKEFpKFI5ZSksa3IoMCksSmUoMSxrOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksSmUoNSxBOWUsMSwwLCJjZHMtaWNvbiIsMyksSmUoNixUOWUsMSwwLCJjZHMtaWNvbiIsNCkseWUoKSxKZSg3LEQ5ZSwxLDAsIm5nLWNvbnRl'@;
put 'bnQiLDApLEplKDgsSTllLDEsMCwibmctY29udGVudCIsMCksSmUoOSxMOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5n'@;
put 'SWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLGRjLHFz'@;
put 'XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxvd2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSx1USxkLGgsZixfKSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFz'@;
put 'KSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJl'@;
put 'czpbZW9dfSksY30pKCksc3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6'@;
put 'W1tvbyxxbCxzYSxZY10sWWNdfSksY30pKCksZFE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxZYyxUeWUsT3llLFh5ZSxl'@;
put 'USxld2UsbndlLGl3ZSxzd2UscndlLFB5ZV19KSxjfSkoKSxoUT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp'@;
put 'LGF3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIEVFe31sZXQgUmI9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBiZX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRo'@;
put 'aXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURl'@;
put 'Ym91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IGJlfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29u'@;
put 'c3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8'@;
put 'KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8'@;
put 'MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2Vp'@;
put 'bCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBj'@;
put 'dXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9u'@;
put 'ZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVy'@;
put 'biB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMu'@;
put 'Y3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihSYikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEZmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgYmUsdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdl'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxs'@;
put 'KWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBrRShhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1'@;
put 'YnNjcmliZSgpO2NvbnN0IF89dGhpcy5fYWxsLmZpbmRJbmRleChUPT5ULmZpbHRlcj09PWEpO18+PTAmJnRoaXMuX2FsbC5zcGxpY2UoXywxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChm'@;
put 'KSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRF'@;
put 'bWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoYXIoRXApLGFyKFJiKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3Mga0V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgQUU9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9m'@;
put 'IGtFP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLE9iPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBRXtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRU'@;
put 'b2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPV8sdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9SWMoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5B'@;
put 'RlRFUixhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKFQ9Pnt0aGlzLm9wZW49VCx0aGlzLmFyaWFFeHBhbmRlZD1UfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29w'@;
put 'ZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29wZW49YSl9'@;
put 'c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09u'@;
put 'RGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQt'@;
put 'Y29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8'@;
put 'fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChFcyksdHQoS3MpLHR0KEdzKSx0dChOaSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihh'@;
put 'LGQpe2lmKDEmYSYmUm8oUDllLDUsTmkpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOlsiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29w'@;
put 'ZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6RUUsdXNlRXhpc3Rpbmc6Y31dKSxlbyx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3Ii'@;
put 'LCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJhbmNob3IiLCIiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQ'@;
put 'b3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIs'@;
put 'MywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwi'@;
put 'YnV0dG9uIiwwLDEpLHF0KDIsImNkcy1pY29uIiwyKSx5ZSgpLEplKDMsRjllLDUsMywiZGl2IiwzKSksMiZhJiYoZHIoImRhdGFncmlkLWZpbHRlci1vcGVuIixkLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZC5hY3RpdmUpLFRyKCJhcmlhLWxhYmVsIixkLnRvZ2dsZUJ1dHRvbkFyaWFM'@;
put 'YWJlbCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpLENlKDIpLFRyKCJzdGF0dXMiLGQuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGQuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJjbGUiOiJmaWx0ZXItZ3JpZCIpLENlKDEp'@;
put 'LFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVz'@;
put 'Olt3YixNYixxcyxTYixNcCxGSl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgSkZ7Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsbC5pbmRleE9mKCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1sLnNwbGl0KCIuIikpfWdldFByb3BWYWx1ZShsKXtpZih0aGlzLnNwbGl0UHJvcCl7'@;
put 'bGV0IGE9bDtmb3IoY29uc3QgZCBvZiB0aGlzLnNwbGl0UHJvcCl7aWYobnVsbD09PWF8fHR5cGVvZiBhPiJ1Inx8dHlwZW9mIGFbZF0+InUiKXJldHVybjthPWFbZF19cmV0dXJuIGF9cmV0dXJuIGxbdGhpcy5wcm9wXX19Y2xhc3MgVEV7Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9'@;
put 'bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1hY2NlcHRzKGwsYSxkKXtjb25zdCBoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh2b2lkIDA9PT1ofHxudWxsIT09YSYmKCJudW1iZXIiIT10eXBlb2YgaHx8aDxhKXx8bnVsbCE9PWQmJigi'@;
put 'bnVtYmVyIiE9dHlwZW9mIGh8fGg+ZCkpfX1jbGFzcyBKNXtjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgYmUsdGhpcy5fbG93PW51bGwsdGhpcy5faGlnaD1udWxsfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxl'@;
put 'KCl9Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuX2xvdyx0aGlzLl9oaWdoXX1zZXQgdmFsdWUobCl7Y29uc3QgYT1sWzBdLGQ9bFsxXTsoYSE9PXRoaXMuX2xvd3x8ZCE9PXRoaXMuX2hpZ2gpJiYodGhpcy5fbG93PWEsdGhpcy5faGlnaD1kLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93'@;
put 'LHRoaXMuX2hpZ2hdKSl9Z2V0IGxvdygpe3JldHVybiB0aGlzLl9sb3d9c2V0IGxvdyhsKXtsIT09dGhpcy5fbG93JiYodGhpcy5fbG93PWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiB0aGlzLl9oaWdofXNldCBoaWdoKGwp'@;
put 'e2whPT10aGlzLl9oaWdoJiYodGhpcy5faGlnaD1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBURT97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLGxvdzp0aGlzLl9sb3cs'@;
put 'aGlnaDp0aGlzLl9oaWdofTp0aGlzfWlzQWN0aXZlKCl7cmV0dXJuIG51bGwhPT10aGlzLl9sb3d8fG51bGwhPT10aGlzLmhpZ2h9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5fbG93LHRoaXMuX2hpZ2gpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5j'@;
put 'ZW9mIEo1JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIFRFP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBURSYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLmxvdz09PXRoaXMuX2xvdyYmbC5oaWdoPT09dGhpcy5faGlnaDpsPT09dGhpcyl9fWxldCBmUT0oKCk9Pntj'@;
put 'bGFzcyBjIGV4dGVuZHMgQUV7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9Xyx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBFcix0aGlz'@;
put 'Lm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09dGhpcy5maWx0ZXIubG93fHxhWzFdIT09dGhp'@;
put 'cy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1'@;
put 'ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2Yga0U/YTpuZXcgSjUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZXMpfWdl'@;
put 'dCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1p'@;
put 'blZhbHVlfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxvdz8odGhpcy5maWx0'@;
put 'ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlz'@;
put 'LmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIu'@;
put 'aGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhp'@;
put 'cy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs'@;
put 'YXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2Ny'@;
put 'aWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpLHR0KGgxKSx0dChFcyksdHQoS3MpLHR0KE5vKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3UXVlcnk6'@;
put 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhIOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksYWkoaD1saSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbImNsckZpbHRlck1pblBs'@;
put 'YWNlaG9sZGVyIiwibWluUGxhY2Vob2xkZXIiXSxtYXhQbGFjZWhvbGRlcjpbImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSx2YWx1ZTpbImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOlsiY2xyRGdOdW1lcmljRmlsdGVyIiwi'@;
put 'Y3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOkVFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjYsdmFyczo4LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xy'@;
put 'RGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWxDaGFuZ2Ui'@;
put 'XSxbImlucHV0X2xvdyIsIiJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItaW5wdXQtc3BhY2VyIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIl0sWyJpbnB1dF9oaWdoIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLWRnLWZpbHRlciIsMCkseHQoImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3Blbj1mfSksbWUoMSwiaW5wdXQiLDEsMiks'@;
put 'eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmxvdz1mfSkseWUoKSxxdCgzLCJzcGFuIiwzKSxtZSg0LCJpbnB1dCIsNCw1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGlnaD1mfSkseWUoKSgpKSwyJmEmJihSZSgiY2xyRGdGaWx0ZXIi'@;
put 'LGQucmVnaXN0ZXJlZCkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5sb3cpKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxDZSgzKSxSZSgibmdNb2RlbCIsZC5o'@;
put 'aWdoKSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSksVHIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W09iLGFFLFdhLEJzLE9zXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBERXtjb25zdHJ1Y3RvcihsLGE9ITEp'@;
put 'e3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IEpGKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6'@;
put 'KCIiK2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIFE1e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBiZSx0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlz'@;
put 'Ll9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIERFP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1'@;
put 'ZX06dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0'@;
put 'KGwpKX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBRNSYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBERT90aGlzLmZp'@;
put 'bHRlckZuIGluc3RhbmNlb2YgREUmJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFsdWU6bD09PXRoaXMpfX1sZXQgUUY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEFFe2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSksdGhpcy5kb21B'@;
put 'ZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT1fLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEVyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRl'@;
put 'cihhIGluc3RhbmNlb2Yga0U/YTpuZXcgUTUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7'@;
put 'dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgp'@;
put 'e3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEu'@;
put 'dW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChoMSksdHQoRXMpLHR0KEtzKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3'@;
put 'UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhOOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksYWkoaD1saSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbImNsckZpbHRlclBs'@;
put 'YWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiXSxjdXN0b21TdHJpbmdGaWx0ZXI6WyJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVD'@;
put 'aGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOkVFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjMsdmFyczo1LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0'@;
put 'ZSIsIm9mZiIsIm5hbWUiLCJzZWFyY2giLDEsImNsci1pbnB1dCIsMywibmdNb2RlbCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbENoYW5nZSJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItZGctZmlsdGVyIiwwKSx4dCgiY2xyRGdGaWx0ZXJP'@;
put 'cGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuPWZ9KSxtZSgxLCJpbnB1dCIsMSwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudmFsdWU9Zn0pLHllKCkoKSksMiZhJiYoUmUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpKCJjbHJEZ0ZpbHRl'@;
put 'ck9wZW4iLGQub3BlbiksQ2UoMSksUmUoIm5nTW9kZWwiLGQudmFsdWUpKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5wbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbT2IsV2EsQnMsT3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgp'@;
put 'LGtwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQi'@;
put 'XV0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLFY4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFibGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudCsr'@;
put 'fXVucmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCOD0oKCk9PntjbGFzcyBjIGV4dGVuZHMg'@;
put 'dzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5yb3dBY3Rpb25zPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJvd0FjdGlv'@;
put 'bnMuaGFzQWN0aW9uYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KFY4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0'@;
put 'dXJlczpbZW9dfSksY30pKCksaDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9zdGF0ZT1uZXcgVGUodGhpcy50b2dnbGVTdGF0ZSl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5h'@;
put 'YmxlZChhKXt0aGlzLl9lbmFibGVkPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9Y2xvc2UoKXt0aGlzLnRvZ2ds'@;
put 'ZVN0YXRlPSExLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5idXR0b24mJih0aGlzLmJ1dHRvbi5mb2N1cygpLHRoaXMuYnV0dG9uPW51bGwpfW9wZW4oYSxkKXt0aGlzLmNhY2hlPWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRl'@;
put 'Lm5leHQodGhpcy50b2dnbGVTdGF0ZSl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4'@;
put 'cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihoMikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHo4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3OHtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGct'@;
put 'cm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KGo4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y2xhc3MgSUV7Y29uc3RydWN0b3IobCl7'@;
put 'dGhpcy5wcm9wPWwsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1jb21wYXJlKGwsYSl7bGV0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKSxoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUoYSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93ZXJDYXNl'@;
put 'KCkpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvd2VyQ2FzZSgpKSx0eXBlb2YgZD4idSJ8fG51bGw9PT1kP3R5cGVvZiBoPiJ1Inx8bnVsbD09PWg/MDoxOnR5cGVvZiBoPiJ1Inx8bnVsbD09PWh8fGQ8aD8tMTpkPmg/MTowfX12YXIgSTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5V'@;
put 'TlNPUlRFRD0wXT0iVU5TT1JURUQiLGNbYy5BU0M9MV09IkFTQyIsY1tjLkRFU0M9LTFdPSJERVNDIixjfShJMHx8e30pO2xldCBlSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1w'@;
put 'bGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3Jh'@;
put 'cHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhWOWUsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFs'@;
put 'IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxKZSgwLEI5ZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsa2MpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTEU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5f'@;
put 'cmV2ZXJzZT0hMSx0aGlzLl9jaGFuZ2U9bmV3IGJlfWdldCBjb21wYXJhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmF0b3J9c2V0IGNvbXBhcmF0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlz'@;
put 'LnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgcmV2ZXJzZSgpe3JldHVybiB0aGlzLl9yZXZlcnNlfXNldCByZXZlcnNlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9yZXZlcnNlPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNl'@;
put 'ci5jaGFuZ2VEb25lKCl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKGEsZCl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuY29tcGFyYXRvcj09PWE/dGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmR8fCF0aGlz'@;
put 'Ll9yZXZlcnNlOih0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmQpLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWNsZWFyKCl7dGhpcy5jb21wYXJhdG9yPW51bGx9Y29tcGFyZShhLGQpe3JldHVybih0aGlz'@;
put 'LnJldmVyc2U/LTE6MSkqdGhpcy5jb21wYXJhdG9yLmNvbXBhcmUoYSxkKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJiKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxm'@;
put 'YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIGYyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQUxJR05fQ09MVU1OUz0wXT0iQUxJR05fQ09MVU1OUyIsY1tjLkNBTENVTEFURV9NT0RFX09OPTFdPSJDQUxDVUxBVEVfTU9ERV9PTiIsY1tjLkNBTENVTEFURV9NT0RFX09GRj0yXT0iQ0FM'@;
put 'Q1VMQVRFX01PREVfT0ZGIixjW2MuQ0xFQVJfV0lEVEhTPTNdPSJDTEVBUl9XSURUSFMiLGNbYy5DT01QVVRFX0NPTFVNTl9XSURUSFM9NF09IkNPTVBVVEVfQ09MVU1OX1dJRFRIUyIsY30oZjJ8fHt9KTtsZXQgZWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlbmRlclN0'@;
put 'ZXA9bmV3IGJlLHRoaXMuYWxyZWFkeVNpemVkPSExfWdldCByZW5kZXJTdGVwKCl7cmV0dXJuIHRoaXMuX3JlbmRlclN0ZXAuYXNPYnNlcnZhYmxlKCl9ZmlsdGVyUmVuZGVyU3RlcHMoYSl7cmV0dXJuIHRoaXMucmVuZGVyU3RlcC5waXBlKElhKGQ9PmE9PT1kKSl9cmVzaXplKCl7dGhpcy5f'@;
put 'cmVuZGVyU3RlcC5uZXh0KGYyLkNBTENVTEFURV9NT0RFX09OKSx0aGlzLmFscmVhZHlTaXplZCYmdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNMRUFSX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0'@;
put 'KGYyLkFMSUdOX0NPTFVNTlMpLHRoaXMuYWxyZWFkeVNpemVkPSEwLHRoaXMuX3JlbmRlclN0ZXAubmV4dChmMi5DQUxDVUxBVEVfTU9ERV9PRkYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0SD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5vcmdhbml6ZXI9aCx0aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQg'@;
put 'bWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8fDk2fWdldCBtYXhSZXNpemVSYW5nZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNp'@;
put 'emUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9yZXNpemVkQnk9MCx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0ZVJlc2l6ZShhKXthPC10aGlzLm1heFJlc2l6ZVJhbmdlPyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6'@;
put 'ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PWEsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKGgxKSxhcihlZykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y'@;
put 'eTpjLlx1MDI3NWZhY30pLGN9KSgpLG5IPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWF9Z2V0IHRhYmxlUmVmKCl7cmV0dXJuIHRoaXMuX3RhYmxlUmVmfXNldCB0YWJsZVJlZihhKXt0aGlzLl90YWJsZVJlZj1hfXNldCB0YWJsZShhKXtScyh0aGlzLnBs'@;
put 'YXRmb3JtSWQpJiZhLm5hdGl2ZUVsZW1lbnQmJih0aGlzLnRhYmxlUmVmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSl9Z2V0Q29sdW1uRHJhZ0hlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlUmVmP2Ake3RoaXMudGFibGVSZWYuY2xpZW50SGVpZ2h0'@;
put 'fXB4YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3Ro'@;
put 'aXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Zix0aGlzLmNvbW1vblN0cmluZz1fLHRoaXMuZG9jdW1lbnQ9VCx0aGlzLmNvbHVtblNlcGFyYXRvcklkPUljKCksdGhpcy5yZXNpemVTdGFydGVkT25L'@;
put 'ZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50'@;
put 'fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMu'@;
put 'Y29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJhY2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAi'@;
put 'LGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZp'@;
put 'Y2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5j'@;
put 'b2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIu'@;
put 'c2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tl'@;
put 'ckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1RyYWNr'@;
put 'ZXJPbkZpcnN0S2V5RG93bihhKXshdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNz'@;
put 'KHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/dGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6'@;
put 'ZWRCeS0xMik6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMil9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRL'@;
put 'ZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0'@;
put 'aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1u'@;
put 'UmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRy'@;
put 'YWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIGwyKGEua2V5KT09PXdvLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gbDIoYS5rZXkpPT09d28uQXJyb3dSaWdodH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8YykodHQodEgpLHR0KEZvKSx0dChObyksdHQobkgpLHR0KEVzKSx0dChMcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhq'@;
put 'OWUsNSksUm8oejllLDUpKSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCksYWkoaD1saSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkYXRhZ3Jp'@;
put 'ZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo1LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJhZ2dhYmxlIiwiIiwxLCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjbHJHcm91cCIsImNsckRyYWdTdGFydCIsImNsckRyYWdNb3ZlIiwiY2xyRHJhZ0VuZCJd'@;
put 'LFsiY29sdW1uSGFuZGxlIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdLFsicmVzaXplVHJhY2tlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImJ1dHRvbiIsMCwxKSx4dCgiY2xyRHJhZ1N0YXJ0Iixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLnNob3dUcmFja2VyKCl9KSgiY2xyRHJhZ01vdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm1vdmVUcmFja2VyKGYuZHJhZ1Bvc2l0aW9uLm1vdmVYKX0pKCJjbHJEcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUcmFja2VyKCl9KSx5ZSgpLG1lKDIs'@;
put 'InNwYW4iLDIpLE5lKDMpLHllKCkscXQoNCwiZGl2IiwzLDQpKSwyJmEmJihSZSgiY2xyR3JvdXAiLGQuY29sdW1uU2VwYXJhdG9ySWQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVz'@;
put 'Y3JpcHRpb25JZCksQ2UoMiksVHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLENlKDEpLGdyKCIgIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W0dKXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx0Zz0oKCk9PntjbGFz'@;
put 'cyBjIGV4dGVuZHMgQUV7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihkKSx0aGlzLl9zb3J0PWEsdGhpcy52Y3I9aCx0aGlzLmRldGFpbFNlcnZpY2U9Zix0aGlzLmNoYW5nZURldGVjdG9yUmVmPV8sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IEVyLHRoaXMuZmlsdGVyVmFsdWVDaGFu'@;
put 'Z2U9bmV3IEVyLHRoaXMuc29ydGVkQ2hhbmdlPW5ldyBFcix0aGlzLnNob3dTZXBhcmF0b3I9ITAsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9STAuVU5TT1JURUQsdGhpcy5fc29ydGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1b'@;
put 'XSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKSl9Z2V0IGNvbFR5cGUoKXtyZXR1cm4gdGhpcy5fY29sVHlwZX1zZXQgY29sVHlwZShh'@;
put 'KXt0aGlzLl9jb2xUeXBlPWF9Z2V0IGZpZWxkKCl7cmV0dXJuIHRoaXMuX2ZpZWxkfXNldCBmaWVsZChhKXsic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLl9maWVsZD1hLHRoaXMuX3NvcnRCeXx8KHRoaXMuX3NvcnRCeT1uZXcgSUUoYSkpKX1nZXQgc29ydEJ5KCl7cmV0dXJuIHRoaXMuX3Nv'@;
put 'cnRCeX1zZXQgc29ydEJ5KGEpeyJzdHJpbmciPT10eXBlb2YgYT90aGlzLl9zb3J0Qnk9bmV3IElFKGEpOmE/dGhpcy5fc29ydEJ5PWE6dGhpcy5maWVsZD90aGlzLl9zb3J0Qnk9bmV3IElFKHRoaXMuZmllbGQpOmRlbGV0ZSB0aGlzLl9zb3J0Qnl9Z2V0IHNvcnRPcmRlcigpe3JldHVybiB0'@;
put 'aGlzLl9zb3J0T3JkZXJ9c2V0IHNvcnRPcmRlcihhKXtpZighKHR5cGVvZiBhPiJ1IikmJnRoaXMuX3NvcnRPcmRlciE9PWEpc3dpdGNoKGEpe2RlZmF1bHQ6Y2FzZSBJMC5VTlNPUlRFRDp0aGlzLl9zb3J0LmNsZWFyKCk7YnJlYWs7Y2FzZSBJMC5BU0M6dGhpcy5zb3J0KCExKTticmVhaztj'@;
put 'YXNlIEkwLkRFU0M6dGhpcy5zb3J0KCEwKX19Z2V0IHNvcnRlZCgpe3JldHVybiB0aGlzLl9zb3J0ZWR9c2V0IHNvcnRlZChhKXshYSYmdGhpcy5zb3J0ZWQ/KHRoaXMuX3NvcnRlZD0hMSx0aGlzLl9zb3J0LmNsZWFyKCkpOmEmJiF0aGlzLnNvcnRlZCYmdGhpcy5zb3J0KCl9c2V0IHVwZGF0'@;
put 'ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgUTU/KCghYXx8InN0cmluZyIhPXR5cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1JiYoKCFh'@;
put 'fHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYoYVswXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0'@;
put 'IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZpbHRlcj0hMCl9Z2V0IHNvcnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7ZGVmYXVsdDpjYXNlIEkwLlVOU09SVEVE'@;
put 'OnJldHVybiJub25lIjtjYXNlIEkwLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIEkwLkRFU0M6cmV0dXJuImRlc2NlbmRpbmcifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0'@;
put 'YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlz'@;
put 'LmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGVILHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IENFKGVILHRoaXMudmNyKX1u'@;
put 'Z09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5z'@;
put 'ZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBE'@;
put 'ZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlz'@;
put 'Ll9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT9JMC5ERVNDOkkwLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PUkwLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0SWNvbj10aGlzLl9zb3J0T3JkZXI9PT1JMC5ERVNDPyJhcnJv'@;
put 'dyBkb3duIjoiYXJyb3ciLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0ZWQ9ITAsdGhpcy5zb3J0ZWRDaGFuZ2UuZW1pdCghMCkpfWxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZUNo'@;
put 'YW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2hvd1NlcGFyYXRvciE9PSFhJiYodGhpcy5zaG93U2VwYXJhdG9yPSFhLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2Ny'@;
put 'aWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc29ydE9yZGVyIT09STAuVU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj1JMC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMu'@;
put 'X3NvcnRPcmRlciksdGhpcy5zb3J0SWNvbj1udWxsLHRoaXMuX3NvcnREaXJlY3Rpb249bnVsbCksdGhpcy5zb3J0ZWQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRlZD0hMSx0aGlzLnNvcnRlZENoYW5nZS5lbWl0KCExKSl9KX1zZXR1cERlZmF1bHRGaWx0ZXIo'@;
put 'YSxkKXsibnVtYmVyIj09PWQ/dGhpcy5zZXRGaWx0ZXIobmV3IEo1KG5ldyBURShhKSkpOiJzdHJpbmciPT09ZCYmdGhpcy5zZXRGaWx0ZXIobmV3IFE1KG5ldyBERShhKSkpLHRoaXMuZmlsdGVyJiZ0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9dGhpcy5p'@;
put 'bml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTEUpLHR0KEZmKSx0dChhcyksdHQoaDIpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxFRSw1KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSxob3N0VmFyczoz'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLGRyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciIsImZpbHRlclN0cmluZ1Bs'@;
put 'YWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZp'@;
put 'bHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbImNsckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOlsiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSxz'@;
put 'b3J0ZWQ6WyJjbHJEZ1NvcnRlZCIsInNvcnRlZCJdLHVwZGF0ZUZpbHRlclZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntzb3J0T3JkZXJDaGFuZ2U6ImNsckRnU29ydE9yZGVyQ2hhbmdlIixmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVy'@;
put 'VmFsdWVDaGFuZ2UiLHNvcnRlZENoYW5nZToiY2xyRGdTb3J0ZWRDaGFuZ2UifSxmZWF0dXJlczpbdGkoW1M4LElmLEtzXSksZW8sdmFdLG5nQ29udGVudFNlbGVjdG9yczpROWUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbMSwiZGF0YWdyaWQtY29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0'@;
put 'YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVy'@;
put 'TWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNvbHVtblRpdGxlIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIs'@;
put 'NCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJd'@;
put 'LFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9s'@;
put 'ZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKEo5ZSksbWUoMCwi'@;
put 'ZGl2IiwwKSxKZSgxLFk5ZSwzLDIsImJ1dHRvbiIsMSksa3IoMiksSmUoMyxXOWUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMiksSmUoNCxHOWUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDMpLEplKDUsJDllLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNCxrYyksSmUoNyxLOWUs'@;
put 'MiwxLCJzcGFuIiw1KSxKZSg4LFg5ZSwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsZC5zb3J0YWJsZSksQ2UoMiksUmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksQ2UoMSks'@;
put 'UmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmIm51bWJlciI9PWQuY29sVHlwZSksQ2UoMyksUmUoIm5nSWYiLCFkLnNvcnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbUUYsZlEsZ1EsWmkscmQscXNdLGVuY2Fwc3VsYXRp'@;
put 'b246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEFwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5f'@;
put 'Y2hhbmdlPW5ldyBiZSx0aGlzLl9hbGxDaGFuZ2VzPW5ldyBiZSx0aGlzLml0ZXJhdG9yVHJhY2tCeT0oZixfKT0+X31nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFu'@;
put 'Z2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdl'@;
put 'dCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYm'@;
put 'dGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRl'@;
put 'bXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlz'@;
put 'Ll9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWNhblRyYWNrQnkoKXtyZXR1cm4hIXRoaXMuZGF0YWdyaWRUcmFja0J5fHxBcnJheS5pc0FycmF5KHRoaXMuYWxsKX10cmFja0J5KGEsZCl7aWYodGhpcy5kYXRhZ3JpZFRyYWNrQnkpcmV0'@;
put 'dXJuIHRoaXMuZGF0YWdyaWRUcmFja0J5KGEpO2lmKEFycmF5LmlzQXJyYXkodGhpcy5hbGwpKXJldHVybiBkPWQ/P3RoaXMuYWxsLmluZGV4T2YoYSksdGhpcy5pdGVyYXRvclRyYWNrQnkoZCxhKTt0aHJvdyBuZXcgRXJyb3IoImltcHJvcGVyIGNhbGwgdG8gSXRlbXMjdHJhY2tCeSIpfWVt'@;
put 'aXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdlcy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmls'@;
put 'dGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9wYWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVk'@;
put 'fHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSksdGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9w'@;
put 'YWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5maXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZmKSxhcihMRSksYXIoRXApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxVOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRp'@;
put 'ZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy52Y3I9Zix0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgeHModGhpcy52Y3IsdGhpcy50ZW1wbGF0ZSx0aGlzLmRpZmZlcnMpLHRoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZShfPT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9Xyx0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMuaXRlcmF0b3JU'@;
put 'cmFja0J5PWEsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRl'@;
put 'KHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vi'@;
put 'c2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh6YSksdHQoejYpLHR0KEFwKSx0dChhcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlu'@;
put 'cHV0czp7cmF3SXRlbXM6WyJjbHJEZ0l0ZW1zT2YiLCJyYXdJdGVtcyJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxySD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEo'@;
put 'dGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbInJvbGUiLCJy'@;
put 'b3ciLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRl'@;
put 'ci1pbWFnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwiZGl2IiwwKSxKZSgxLGV2ZSwxLDAsImRpdiIsMSksbWUoMiwic3BhbiIsMiksSmUoMyx0dmUsMSwwLCJuZy1jb250ZW50IiwzKSx5ZSgpKCkpLDImYSYmKGRyKCJkYXRhZ3JpZC1lbXB0eSIsZC5lbXB0'@;
put 'eURhdGFncmlkKSxDZSgxKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSxDZSgyKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbWmldLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGlIPSgoKT0+e2NsYXNzIGN7c2V0IHRyaWdnZXJFbChhKXt0aGlzLl90cmln'@;
put 'Z2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSko'@;
put 'KSxvSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxSRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25wb3N0SWRT'@;
put 'ZXJ2aWNlPWYsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1fLHRoaXMucGxhdGZvcm1JZD1XLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PVR9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhp'@;
put 'cy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNp'@;
put 'Z25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKSx0aGlzLmFkZERlZmF1bHRBcmlhTGFiZWwodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25T'@;
put 'aWducG9zdFRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWFkZERlZmF1bHRBcmlhTGFiZWwoYSl7YS5oYXNBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuY29tbW9uU3RyaW5ncy5rZXlz'@;
put 'LnNpZ25wb3N0VG9nZ2xlKX1mb2N1c09uQ2xvc2UoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KE5pKSx0dChFcyksdHQob0gpLHR0KGlIKSx0dChMcyksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRy'@;
put 'czpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5k'@;
put 'ZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxkcigiYWN0aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLHNIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEp'@;
put 'e3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQs'@;
put 'aCl7aWYoMSZhJiZJbyhoLFJFLDUpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigic2lnbnBvc3QiLCEwKX0sZmVhdHVyZXM6W3RpKFtLcyxpSCx7cHJvdmlkZTpM'@;
put 'OCx1c2VFeGlzdGluZzpOaX0sb0hdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbWFsbCIsImJ0bi1s'@;
put 'aW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxKZSgwLG52ZSwzLDEsIm5nLWNvbnRhaW5lciIsMCksa3IoMSkpLDImYSYmUmUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W1ppLFJFLHFzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5j'@;
put 'ZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNlbGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhydmUsNSks'@;
put 'MiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksSmUoMCxpdmUsMSwwLCJuZy10'@;
put 'ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFRwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGFILHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgp'@;
put 'e3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBDRShhSCx0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVz'@;
put 'OmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsc0gsNCksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF0YWdyaWQtY2Vs'@;
put 'bCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1RPTAs'@;
put 'UGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFl1e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBUZSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgYmUsbVErKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIr'@;
put 'bVF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3Jl'@;
put 'dHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09VXUuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5u'@;
put 'ZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBaOD1mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30oWjh8fHt9KSxhYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11bHRpPTJdPSJNdWx0aSIsY30oYWF8fHt9'@;
put 'KTtsZXQgbEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8ob3ZlLDUpLDImYSl7bGV0IGg7YWkoaD1saSgp'@;
put 'KSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksSmUoMCxzdmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGN3ZT0wLFk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMuX2ZpbHRlcnM9ZCx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSExLHRoaXMucm93U2VsZWN0aW9uTW9kZT0h'@;
put 'MSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBiZSx0aGlzLl9zZWxlY3Rpb25UeXBlPWFhLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVj'@;
put 'dGlvbiIrY3dlKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLl9pdGVtcy5hbGxDaGFuZ2VzLnN1YnNjcmliZShoPT57Y29uc3QgZj1bXTtzd2l0Y2godGhpcy5zZWxlY3Rpb25UeXBlKXtjYXNlIGFhLk5vbmU6YnJlYWs7Y2FzZSBhYS5TaW5nbGU6e2xldCBfLFQ9ITE7dGhpcy5jdXJyZW50U2luZ2xlJiYhdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9u'@;
put 'UmVmJiZ0aGlzLl9pdGVtcy5jYW5UcmFja0J5KCkmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJhY2tCeSh0aGlzLmN1cnJlbnRTaW5nbGUpKSxoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgcGU9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKTt0aGlzLnByZXZT'@;
put 'aW5nbGVTZWxlY3Rpb25SZWY9PT1wZSYmKF89VyxUPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihwZSk+LTEmJmYucHVzaChwZSl9KSx0aGlzLl9pdGVtcy5zbWFydCYmIV8mJihUPSEwKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudFNpbmdsZT1fKX0sMCk7YnJlYWt9Y2Fz'@;
put 'ZSBhYS5NdWx0aTp7bGV0IF89dGhpcy5jdXJyZW50LnNsaWNlKCksVD0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAmJnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpJiYodGhpcy5wcmV2U2VsZWN0aW9u'@;
put 'UmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChXPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRoaXMuX2l0ZW1zLnRyYWNrQnkoVykpfSkpLGguZm9yRWFjaCgoVyxpZSk9Pntjb25zdCBwZT10aGlzLl9pdGVtcy50cmFja0J5KFcsaWUpO3RoaXMubG9ja2VkUmVmcy5pbmRleE9m'@;
put 'KHBlKT4tMSYmZi5wdXNoKHBlKX0pLF8ubGVuZ3RoPjAmJihoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgcGU9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKSx3ZT10aGlzLnByZXZTZWxlY3Rpb25SZWZzLmluZGV4T2YocGUpO3dlPi0xJiYoX1t3ZV09VyxUPSEwKX0pLHRoaXMuX2l0ZW1zLnNt'@;
put 'YXJ0JiYoXz1fLmZpbHRlcihXPT5oLmluZGV4T2YoVyk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT1fLmxlbmd0aCYmKFQ9ITApKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudD1fKX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1YnNjcmlwdGlvbnMu'@;
put 'cHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoZjgoMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVjdGlvblR5cGUmJih0'@;
put 'aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PWFhLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEwKX1nZXQgY3VycmVu'@;
put 'dFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLHRoaXMuX2l0ZW1zLmNhblRyYWNrQnkoKSYmYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10'@;
put 'aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlw'@;
put 'ZT09PWFhLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMu'@;
put 'c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlz'@;
put 'LmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9u'@;
put 'VHlwZSl7Y2FzZSBhYS5Ob25lOmNhc2UgYWEuU2luZ2xlOmJyZWFrO2Nhc2UgYWEuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTXVsdGl8fCF0'@;
put 'aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEu'@;
put 'bGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tl'@;
put 'ZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuTm9uZXx8dGhpcy5fc2VsZWN0aW9u'@;
put 'VHlwZT09PWFhLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9p'@;
put 'dGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLl9pdGVtcy5jYW5U'@;
put 'cmFja0J5KCkmJnRoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaCh0aGlzLl9pdGVtcy50cmFja0J5KGEpKX1kZXNlbGVjdEl0ZW0oYSl7aWYodGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5zbGljZSgwLGEpLmNvbmNhdCh0aGlzLmN1cnJlbnQuc2xpY2UoYSsxKSksYTx0aGlzLnByZXZTZWxl'@;
put 'Y3Rpb25SZWZzLmxlbmd0aCl7Y29uc3QgZD10aGlzLnByZXZTZWxlY3Rpb25SZWZzLnNwbGljZShhLDEpO3RoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGg9PmghPT1kWzBdKX19Y2FuSXRCZUxvY2tlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTm9u'@;
put 'ZSYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuU2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlz'@;
put 'LmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihBcCksYXIoRmYpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu'@;
put 'X3ZpZXc9bmV3IFRlKFo4LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChaOC5DQUxDVUxBVEUpKSksdGhpcy5z'@;
put 'dWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhmMi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFo4LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3Ro'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGVnKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdUg9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVl'@;
put 'cnlTZWxlY3RvcigiaW5wdXQiKS5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSxPRT0wLG5nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxwZSx3ZSxFZSxaZSl7dGhpcy5zZWxlY3Rpb249YSx0aGlz'@;
put 'LnJvd0FjdGlvblNlcnZpY2U9ZCx0aGlzLmdsb2JhbEV4cGFuZGFibGU9aCx0aGlzLmV4cGFuZD1mLHRoaXMuZGV0YWlsU2VydmljZT1fLHRoaXMuZGlzcGxheU1vZGU9VCx0aGlzLnZjcj1XLHRoaXMucmVuZGVyZXI9aWUsdGhpcy5lbD1wZSx0aGlzLmNvbW1vblN0cmluZ3M9d2UsdGhpcy5p'@;
put 'dGVtcz1FZSx0aGlzLmRvY3VtZW50PVplLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hMSx0aGlzLlNFTEVDVElPTl9UWVBFPWFhLHRo'@;
put 'aXMuaXRlbUNoYW5nZXM9bmV3IHF4KDEpLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2RldGFpbE9wZW5MYWJlbD0iIix0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPSIiLHRoaXMuX3Jvd0FyaWFMYWJlbD0iIix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2VsZWN0YWJsZT0hMCxPRSsrLHRo'@;
put 'aXMuaWQ9ImNsci1kZy1yb3ciK09FLHRoaXMucmFkaW9JZD0iY2xyLWRnLXJvdy1yZCIrT0UsdGhpcy5jaGVja2JveElkPSJjbHItZGctcm93LWNiIitPRSx0aGlzLmV4cGFuZGFibGVJZD1mLmV4cGFuZGFibGVJZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChZNih0aGlzLmV4cGFuZC5yZXBs'@;
put 'YWNlLHRoaXMuZXhwYW5kLmV4cGFuZENoYW5nZSkuc3Vic2NyaWJlKChbaXQsZXRdKT0+e2l0JiZldD8odGhpcy5yZXBsYWNlZD0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSEx'@;
put 'LHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSl9KSl9Z2V0IGl0ZW0oKXtyZXR1cm4gdGhpcy5faXRlbX1zZXQgaXRlbShhKXt0aGlzLl9pdGVtPWEsdGhpcy5pdGVtQ2hhbmdlcy5uZXh0KGEpLHRoaXMuY2xy'@;
put 'RGdTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGV9Z2V0IGNsckRnU2VsZWN0YWJsZSgpe3JldHVybiF0aGlzLnNlbGVjdGlvbi5pc0xvY2tlZCh0aGlzLml0ZW0pfXNldCBjbHJEZ1NlbGVjdGFibGUoYSl7dGhpcy5pdGVtJiZ0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sImZh'@;
put 'bHNlIj09PWF8fCExPT09YSksdGhpcy5fc2VsZWN0YWJsZT1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YWEuTm9uZT90aGlzLl9zZWxlY3RlZDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMuaXRlbSl9c2V0IHNlbGVjdGVkKGEp'@;
put 'e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5Ob25lP3RoaXMuX3NlbGVjdGVkPWE6KGEmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aT90aGlzLnJhbmdlU2VsZWN0KCk6dGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD1udWxsLHRoaXMuc2VsZWN0aW9u'@;
put 'LnNldFNlbGVjdGVkKHRoaXMuaXRlbSxhKSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfXNldCBleHBhbmRlZChhKXt0aGlzLmV4cGFuZC5leHBhbmRlZD1hfWdldCBjbHJEZ0RldGFpbE9wZW5MYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxPcGVuTGFiZWw/'@;
put 'dGhpcy5fZGV0YWlsT3BlbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW59c2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKGEpe3RoaXMuX2RldGFpbE9wZW5MYWJlbD1hfWdldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD90aGlz'@;
put 'Ll9kZXRhaWxDbG9zZUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlfXNldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoYSl7dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD1hfWdldCBjbHJEZ1Jvd0FyaWFMYWJlbCgpe3JldHVybiB0aGlzLl9yb3dBcmlhTGFiZWw/dGhpcy5fcm93QXJp'@;
put 'YUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdH1zZXQgY2xyRGdSb3dBcmlhTGFiZWwoYSl7dGhpcy5fcm93QXJpYUxhYmVsPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChsSCx0aGlzLnZjcikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMu'@;
put 'd3JhcHBlZEluamVjdG9yPW5ldyBDRShsSCx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCExPT09dGhpcy5jbHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZGdDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxs'@;
put 'cy5mb3JFYWNoKGE9PnthLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChhLl92aWV3KX0pfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRo'@;
put 'aXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0YWNoKCk7YT09PVo4LkNBTENVTEFURT8odGhp'@;
put 'cy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLmRpc3BsYXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95'@;
put 'ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoZC5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmltYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGUoYT0hdGhpcy5zZWxlY3RlZCl7YSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLnNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKSl9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJs'@;
put 'ZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWNsZWFyUmFuZ2VzKGEpe2Euc2hpZnRLZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVj'@;
put 'dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkpfXNlbGVjdFJvdyhhPSF0aGlzLnNlbGVjdGVkLGQpeyJMQUJFTCIhPT1kLnRhcmdldC50'@;
put 'YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2luZ2xlP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9nZ2xlKGEpKX1yYW5nZVNlbGVjdCgpe2NvbnN0IGE9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7'@;
put 'aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5jbHVkZXModGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNo'@;
put 'aWZ0UHJlc3NlZCYmLTEhPT1kKXtjb25zdCBoPWEuaW5kZXhPZih0aGlzLml0ZW0pLGY9bmV3IFNldCh0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmNvbmNhdChhLnNsaWNlKE1hdGgubWluKGQsaCksTWF0aC5tYXgoZCxoKSsxKSkpO3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhp'@;
put 'cy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmYpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10aGlzLml0ZW19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFk4KSx0dChWOCksdHQoajgpLHR0KFBiKSx0dChoMiksdHQoY0gpLHR0'@;
put 'KGFzKSx0dChGbyksdHQoTmkpLHR0KEVzKSx0dChBcCksdHQoTHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFRwLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYm'@;
put 'KGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKGJFLDUpLFJvKGF2ZSw1KSxSbyhsdmUsNSxhcyksUm8oY3ZlLDUsYXMpLFJvKHV2ZSw1LGFzKSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5leHBhbmRBbmltYXRpb249aC5maXJzdCksYWkoaD1s'@;
put 'aSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLGFpKGg9bGkoKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLGFpKGg9bGkoKSkmJihkLl9jYWxjdWxhdGVkQ2VsbHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJy'@;
put 'b2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLW93bnMiLGQuaWQpLGRyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntpdGVtOlsiY2xyRGdJdGVtIiwi'@;
put 'aXRlbSJdLGNsckRnU2VsZWN0YWJsZToiY2xyRGdTZWxlY3RhYmxlIixzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJE'@;
put 'Z0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dBcmlhTGFiZWw6ImNsckRnUm93QXJpYUxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9'@;
put 'LGZlYXR1cmVzOlt0aShbUGIse3Byb3ZpZGU6WXUsdXNlRXhpc3Rpbmc6UGJ9LHtwcm92aWRlOnZiLHVzZUV4aXN0aW5nOlBifV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RnZlLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNl'@;
put 'ZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwi'@;
put 'Y2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInN0aWNreUNlbGxzIiwiIl0s'@;
put 'WyJjbGFzcyIsImRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQt'@;
put 'Y2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJl'@;
put 'dCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSIsMywibmdDbGFzcyJdLFsxLCJkYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsicm9sZSIsImdyaWRjZWxsIiwx'@;
put 'LCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIiwzLCJuZ0NsYXNzIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbCIsImlkIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250'@;
put 'cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiLCJjbGljayJdLFsxLCJjbHItc3Itb25seSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLDMsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwi'@;
put 'Y2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZXhwYW5k'@;
put 'YWJsZS1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInR5cGUi'@;
put 'LCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1m'@;
put 'aXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oYXNwb3B1cCIsImRpYWxvZyIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsImRh'@;
put 'dGFncmlkLWRldGFpbC1jYXJldC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoUHZlKSxKZSgwLGd2ZSwzLDIsImRpdiIsMCksSmUoMSx2dmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEpLEplKDIsYnZlLDEsMSxudWxsLDIpLEplKDMseXZlLDEsMCwi'@;
put 'bmctdGVtcGxhdGUiLG51bGwsMyxrYyksSmUoNSxPdmUsMTYsMTMsIm5nLXRlbXBsYXRlIixudWxsLDQsa2MpLGphKDcsbnVsbCw1KSksMiZhJiYoUmUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLENlKDEpLFJlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9u'@;
put 'TW9kZSYmZC5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiYhZC5leHBhbmQuZXhwYW5kYWJsZSkpfSxkZXBlbmRlbmNpZXM6W2JFLFQwLEtGLHUyLFppLHJkLHVILGRjLFMwLEQwLEJzLE9zLFVzLGxFLFdhLFhGLHFzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgTDA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5XSURUSD0wXT0iV0lEVEgiLGNbYy5ISURERU49MV09IkhJRERFTiIsY30oTDB8fHt9KTtjb25zdCB2UT1PYmplY3Qua2V5cyhMMCkubWFwKGM9PkwwW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50'@;
put 'KGMsMTApKTtsZXQgSGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29sdW1ucz1bXSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlz'@;
put 'LmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlzLmNvbHVtbnMubWFwKGE9Pntjb25zdCBkPXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hhbmdlcyxkfSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hl'@;
put 'Lmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1tkXS5uZXh0KHsuLi5hLGNoYW5nZXM6dlF9KX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZCl7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0'@;
put 'ZUNoYW5nZSh0aGlzLmNvbHVtbnNbYV0sZCl9ZW1pdFN0YXRlQ2hhbmdlKGEsZCl7YS5uZXh0KHsuLi5hLnZhbHVlLC4uLmR9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1'@;
put 'ZmFjfSksY30pKCksX1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZpbHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRoaXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKE1lKCgpPT50aGlzLnN0YXRlKSl9'@;
put 'Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRoaXMucGFnZS5maXJzdEl0ZW0sdG86dGhpcy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3VycmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5jb21wYXJhdG9y'@;
put 'JiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2YgSUU/e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLnByb3AscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtjb25zdCBkPXRo'@;
put 'aXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtdO2Zvcihjb25zdCBoIG9mIGQpYS5maWx0ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShhcihGZiksYXIoTEUpLGFyKEVwKSxhcihSYikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kk'@;
put 'PW5ldyBiZSx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6Iltyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlcikiLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50'@;
put 'KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRdIn19Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5x'@;
put 'dWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5r'@;
put 'ZXlHcmlkQ2VsbHMpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFkZExpc3RlbmVycygpe3RoaXMubGlzdGVuZXJzQWRkZWR8fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntuMih0aGlzLmdyaWQsIm1vdXNlZG93'@;
put 'biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoMT09PWEuYnV0dG9ucyYmIWEuY3RybEtleSl7Y29uc3QgZD10aGlzLmNlbGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT5oPT09YS50YXJnZXR8fGg9PT1hLnRhcmdldC5jbG9zZXN0KHRoaXMuY29u'@;
put 'ZmlnLmtleUdyaWRDZWxscykpOm51bGw7ZCYmdGhpcy5zZXRBY3RpdmVDZWxsKGQpfX0pLG4yKHRoaXMuZ3JpZCwia2V5ZG93biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoKCFhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRyYWctaGFuZGxlIil8fCJB'@;
put 'cnJvd0xlZnQiIT09YS5jb2RlJiYiQXJyb3dSaWdodCIhPT1hLmNvZGUpJiYoIkFycm93VXAiPT09YS5jb2RlfHwiQXJyb3dEb3duIj09PWEuY29kZXx8IkFycm93TGVmdCI9PT1hLmNvZGV8fCJBcnJvd1JpZ2h0Ij09PWEuY29kZXx8IkVuZCI9PT1hLmNvZGV8fCJIb21lIj09PWEuY29kZXx8'@;
put 'IlBhZ2VVcCI9PT1hLmNvZGV8fCJQYWdlRG93biI9PT1hLmNvZGUpKXtjb25zdHt4OmQseTpofT10aGlzLmdldE5leHRJdGVtQ29vcmRpbmF0ZShhKSxmPXRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93c1toXS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykp'@;
put 'W2RdOm51bGw7ZiYmdGhpcy5zZXRBY3RpdmVDZWxsKGYpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMuaG9zdD1hLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdy'@;
put 'aWQoKXt0aGlzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmNlbGxzP3RoaXMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9c2V0QWN0aXZlQ2VsbChhKXtjb25zdCBkPXRoaXMuY2VsbHM/QXJyYXku'@;
put 'ZnJvbSh0aGlzLmNlbGxzKS5maW5kKF89PiIwIj09PV8uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsO2QmJmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpO2NvbnN0IGg9ZnVuY3Rpb24gdXdlKGMpe2NvbnN0IGw9WyJh'@;
put 'W2hyZWZdIiwiYXJlYVtocmVmXSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCIqW3RhYmluZGV4XSIsIipb'@;
put 'Y29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSkiXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGwpKX0oYSk7KCJjb2x1bW5oZWFkZXIiIT09YS5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmaFswXT9oWzBdOmEp'@;
put 'LmZvY3VzKCl9Z2V0TmV4dEl0ZW1Db29yZGluYXRlKGEpe2xldCBkPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKFplPT4iMCI9PT1aZS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7IlRhYiI9PT1hLmNvZGUmJihkPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQp'@;
put 'O2NvbnN0IGg9dGhpcy5yb3dzJiZkP0FycmF5LmZyb20odGhpcy5yb3dzKS5maW5kKFplPT5aZS5jb250YWlucyhkKSk6bnVsbCxmPXRoaXMucm93cz90aGlzLnJvd3MubGVuZ3RoLTE6MCxfPXRoaXMuY2VsbHM/dGhpcy5jZWxscy5sZW5ndGgvdGhpcy5yb3dzLmxlbmd0aC0xOjA7bGV0IFQ9'@;
put 'aCYmZD9BcnJheS5mcm9tKGgucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGQpOjAsVz1oJiZkJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoaCk6MDtjb25zdCBpZT10aGlzLmhvc3QuZGlyLHBlPSJydGwiPT09aWU/'@;
put 'IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiLHdlPSJydGwiPT09aWU/IkFycm93TGVmdCI6IkFycm93UmlnaHQiLEVlPU1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKS5jbGllbnRIZWlnaHQvdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCktMXx8MDtyZXR1'@;
put 'cm4iQXJyb3dVcCI9PT1hLmNvZGUmJjAhPT1XP1ctPTE6IkFycm93RG93biI9PT1hLmNvZGUmJlc8Zj9XKz0xOmEuY29kZT09PXBlJiYwIT09VD9ULT0xOmEuY29kZT09PXdlJiZUPF8/VCs9MToiRW5kIj09PWEuY29kZT8oVD1fLGEuY3RybEtleSYmKFc9ZikpOiJIb21lIj09PWEuY29kZT8o'@;
put 'VD0wLGEuY3RybEtleSYmKFc9MCkpOiJQYWdlVXAiPT09YS5jb2RlP1c9Vy1FZT4wP1ctRWU6MDoiUGFnZURvd24iPT09YS5jb2RlJiYoVz1XK0VlPGY/VytFZTpmKSx7eDpULHk6V319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSl9LGMu'@;
put 'XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVzg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLHBlLHdlLEVlLFplLGl0LGV0LHl0LEV0KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFi'@;
put 'bGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9Xyx0aGlzLnN0YXRlUHJvdmlkZXI9VCx0aGlzLmRpc3BsYXlNb2RlPVcsdGhpcy5yZW5kZXJlcj1pZSx0aGlzLmRldGFpbFNlcnZpY2U9cGUsdGhpcy5kb2N1bWVudD13ZSx0aGlzLmVsPUVlLHRoaXMucGFn'@;
put 'ZT1aZSx0aGlzLmNvbW1vblN0cmluZ3M9aXQsdGhpcy5jb2x1bW5zU2VydmljZT1ldCx0aGlzLmtleU5hdmlnYXRpb249eXQsdGhpcy56b25lPUV0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxh'@;
put 'YmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVB'@;
put 'cmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEVyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMucmVmcmVzaD1uZXcgRXIoITEpLHRoaXMuU0VMRUNUSU9OX1RZUEU9YWEsdGhpcy5fc3Vi'@;
put 'c2NyaXB0aW9ucz1bXTtjb25zdCBTdD1JYygpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxsLSIrU3QsdGhpcy5kZXRhaWxTZXJ2aWNlLmlkPVN0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRp'@;
put 'bmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hP2FhLk11bHRpOmFhLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChhLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hYS5TaW5nbGUs'@;
put 'YT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1z'@;
put 'ZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy5kYXRhZ3JpZFRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxT'@;
put 'ZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi50b2dnbGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoU2EoZD0+aXMoV2koZC5t'@;
put 'YXAoaD0+aC5pdGVtKSksWTYoZC5tYXAoaD0+aC5pdGVtQ2hhbmdlcykpLnBpcGUoZjgoMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJl'@;
put 'KCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShkKTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93'@;
put 'cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGQ9dGhpcy5pdGVtcy5jYW5UcmFja0J5KCk/dGhpcy5yb3dzLmZpbmQoaD0+dGhpcy5pdGVtcy50cmFja0J5KGguaXRlbSk9PT10aGlzLml0ZW1zLnRy'@;
put 'YWNrQnkodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlKSk6dm9pZCAwO2Q/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oZC5pdGVtLGQuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmtleU5hdmln'@;
put 'YXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJl'@;
put 'c2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYm'@;
put 'dGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygp'@;
put 'fSksWTYodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zKS5zdWJzY3JpYmUoKCk9PnRoaXMua2V5TmF2aWdhdGlvbj8ucmVzZXRLZXlHcmlkKCkpLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5n'@;
put 'dGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhp'@;
put 'cy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2E9PT1aOC5ESVNQTEFZPyh0aGlzLnJlbmRl'@;
put 'cmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMu'@;
put 'X2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5z'@;
put 'Lmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChuMih0aGlzLmRvY3VtZW50LmJvZHks'@;
put 'ImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSxuMih0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNz'@;
put 'ZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChlZyksdHQoQXApLHR0KGo4KSx0dChZOCksdHQoVjgpLHR0KF9RKSx0dChjSCksdHQoRm8pLHR0KGgyKSx0dChMcyksdHQoTmkpLHR0KEVwKSx0dChFcyksdHQoSGYpLHR0KGJRKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgsVTgsNSksSW8oaCxySCw1KSxJbyhoLHRnLDQpLElvKGgsbmcsNCkpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksYWkoZj1saSgp'@;
put 'KSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksYWkoZj1saSgpKSYmKGQuY29sdW1ucz1mKSxhaShmPWxpKCkpJiYoZC5yb3dzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oSHZlLDUsTmkpLFJvKE52ZSw1LGFzKSxSbyhWdmUsNSxhcyksUm8oQnZlLDUsYXMpLFJv'@;
put 'KGp2ZSw1LGFzKSxSbyh6dmUsNSxhcykpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aC5maXJzdCks'@;
put 'YWkoaD1saSgpKSYmKGQuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsyJmEmJmRyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xl'@;
put 'QWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsbG9hZGlu'@;
put 'ZzpbImNsckRnTG9hZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLHNpbmdsZVNlbGVjdGVkOlsiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVj'@;
put 'dGlvbiIscm93U2VsZWN0aW9uTW9kZTpbImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixzaW5nbGVTZWxlY3Rl'@;
put 'ZENoYW5nZWQ6ImNsckRnU2luZ2xlU2VsZWN0ZWRDaGFuZ2UiLHJlZnJlc2g6ImNsckRnUmVmcmVzaCJ9LGZlYXR1cmVzOlt0aShbWTgsTEUsRmYsRXAsQXAsZWcsVjgsajgsUmIsaDIsX1EsbkgsSGYsY0gsYlFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkt2ZSxkZWNsczozMix2YXJzOjcsY29u'@;
put 'c3RzOltbMSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWyJkYXRhZ3JpZCIsIiJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFwcGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRhYmluZGV4IiwiLTEiLDEsImRhdGFncmlk'@;
put 'LXRhYmxlIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImRhdGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1yb3ct'@;
put 'c3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQt'@;
put 'Y29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUi'@;
put 'LCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxbImRp'@;
put 'c3BsYXllZFJvd3MiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwi'@;
put 'Il0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidHlwZSIs'@;
put 'ImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywiaWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbInJvbGUi'@;
put 'LCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1'@;
put 'bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdLFsiY2xyTWVkaXVtIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYoQWkocXZlKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsImRpdiIsMSkoMywiZGl2IiwyLDMpKDUsImRpdiIsNCkoNiwiZGl2Iiw1LDYpKDgsImRpdiIsNykoOSwiZGl2Iiw4KSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksSmUoMTIsVXZlLDcsNSwiZGl2IiwxMSksSmUoMTMsWnZlLDIs'@;
put 'MSwiZGl2IiwxMiksSmUoMTQsWXZlLDIsMSwiZGl2IiwxMyksSmUoMTUsV3ZlLDIsMSwiZGl2IiwxNCkseWUoKSxtZSgxNiwiZGl2IiwxNSksamEoMTcsbnVsbCwxNikseWUoKSgpKCkoKSxqYSgxOSxudWxsLDE3KSxrcigyMSwxKSxKZSgyMixHdmUsMSwwLCJjbHItZGctcGxhY2Vob2xkZXIi'@;
put 'LDE4KSx5ZSgpKCkoKSxrcigyMywyKSxKZSgyNCwkdmUsMywwLCJkaXYiLDE5KSx5ZSgpLGtyKDI1LDMpLHllKCksbWUoMjYsImRpdiIsMjApKDI3LCJkaXYiLDIxKSxqYSgyOCxudWxsLDIyKSx5ZSgpLGphKDMwLG51bGwsMjMpLHllKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWhpZGRlbiIs'@;
put 'ISFkLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxsKSxDZSg5KSxSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLENlKDEpLFJlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5n'@;
put 'bGUpLENlKDEpLFJlKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLENlKDcpLFJlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciks'@;
put 'Q2UoMiksUmUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3JILHUyLFppLHVILFMwLEJzLE9zLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLmFsbFNlbGVjdGVkPW5l'@;
put 'dyBFcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RB'@;
put 'bGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W0wwLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhp'@;
put 'cy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoSGYpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dn'@;
put 'bGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJk'@;
put 'aXNhYmxlZCIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLGtyKDEpLHllKCkpLDImYSYmUmUoImRpc2FibGVkIixkLmFsbEhpZGVhYmxlc1Zpc2li'@;
put 'bGUpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx5UT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IHdRPWM9PmM7bGV0IGhIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5faXRlbXM9YX1z'@;
put 'ZXQgdHJhY2tCeShhKXthIT09d1EmJnRoaXMuX2l0ZW1zJiYodGhpcy5faXRlbXMuaXRlcmF0b3JUcmFja0J5PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBcCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs'@;
put 'Im5nRm9yVHJhY2tCeSIsIiJdXSxpbnB1dHM6e3RyYWNrQnk6WyJuZ0ZvclRyYWNrQnkiLCJ0cmFja0J5Il19fSksY30pKCksZkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3Zlcklk'@;
put 'PUljKCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj13USx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0'@;
put 'YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2Vydmlj'@;
put 'ZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9'@;
put 'PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0'@;
put 'ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W0wwLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0'@;
put 'aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChIZiksdHQoS3MpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVt'@;
put 'bi10b2dnbGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgseVEsNSksSW8oaCxkSCw1KSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5jdXN0b21Ub2dnbGVUaXRsZT1mLmZpcnN0KSxhaShmPWxpKCkpJiYoZC5jdXN0b21Ub2dnbGVCdXR0b249Zi5m'@;
put 'aXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKEp2ZSw1LE5pKSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLmFsbFNlbGVjdGVkRWxlbWVudD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY29sdW1uLXN3'@;
put 'aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIsZC5vcGVuU3RhdGUpfSxmZWF0dXJlczpbdGkoW0lmLFM4LEtzXSldLG5nQ29udGVudFNlbGVjdG9yczpvX2UsZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIs'@;
put 'IiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50Iiwi'@;
put 'Y2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNo'@;
put 'LWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImFsbFNlbGVjdGVkIiwiIl0sWzQsIm5nSWYiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9z'@;
put 'ZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3Rl'@;
put 'ciJdLFszLCJjbHJBbGxTZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImRpc2FibGVkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFszLCJjbHJBbGxTZWxlY3RlZCJdXSx0ZW1wbGF0ZTpm'@;
put 'dW5jdGlvbihhLGQpezEmYSYmKEFpKGlfZSksbWUoMCwiYnV0dG9uIiwwKSxOZSgxKSx5ZSgpLEplKDIscl9lLDE2LDEwLCJkaXYiLDEpKSwyJmEmJihUcigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLW93bnMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVu'@;
put 'U3RhdGUpLENlKDEpLGdyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLENlKDEpLFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVD'@;
put 'bGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1QwLGRILHdiLE1iLFNiLE1wLFppLEZKLHFzLHhzLGhILFMwLEQwLEJzLE9zLFVzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxTUT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLHRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3Vu'@;
put 'dC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGo4LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLFBFPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1hYX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1Nl'@;
put 'cnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCksdHQoaDIpLHR0KEhmKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZkgsNSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC50b2dnbGU9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLWZvb3RlciIsITApfSxuZ0NvbnRlbnRT'@;
put 'ZWxlY3RvcnM6aF9lLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCJdLFsxLCJkYXRhZ3JpZC1mb290ZXItc2VsZWN0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImNoZWNrZWQiLCJjaGVja2VkIiwi'@;
put 'ZGlzYWJsZWQiLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoZF9lKSxKZSgwLGxfZSw4LDIsIm5nLWNvbnRhaW5lciIsMCksSmUoMSx1X2UsNSwxLCJuZy1jb250YWluZXIiLDAp'@;
put 'LGtyKDIpKSwyJmEmJihSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkmJmQuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W1Qw'@;
put 'LGZILFppLEQwLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBwSD1uZXcgU2koIkNPTFVNTl9TVEFURSIpLHZ3ZT17cHJvdmlkZTpwSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIG13ZSgpe3JldHVybiBuZXcgVGUoe2NoYW5nZXM6W119KX19O2xldCBnSD0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEpe3RoaXMucGFnZT1hLHRoaXMucGFnZVNpemVPcHRpb25zSWQ9SWMoKX1uZ09uSW5pdCgpeyghdGhpcy5wYWdlU2l6ZU9wdGlvbnN8fDA9PT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpJiYodGhpcy5wYWdlU2l6ZU9wdGlvbnM9W3RoaXMucGFnZS5zaXplXSl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdlLXNpemUiXV0saW5wdXRzOntwYWdlU2l6ZU9wdGlvbnM6WyJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6'@;
put 'ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJpZCIsIm5nTW9kZWwiLCJu'@;
put 'Z01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsInNlbGVjdCIsMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLnBhZ2Uuc2l6ZT1mfSksSmUoMyxmX2UsMiwyLCJvcHRpb24iLDIpLHllKCkoKSksMiZhJiYoQ2UoMiksZHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksUmUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSgibmdNb2RlbCIsZC5wYWdlLnNpemUpLENlKDEpLFJlKCJuZ0Zvck9m'@;
put 'IixkLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W00wLEJzLE9zLHhzLGwxLGMxXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxGRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnBhZ2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmRldGFpbFNlcnZp'@;
put 'Y2U9aCx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5wYWdlLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5zaXplPWEpfWdldCB0b3RhbEl0ZW1z'@;
put 'KCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBh'@;
put 'JiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5maXJzdEl0'@;
put 'ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KSx0aGlzLnBhZ2Uu'@;
put 'Y3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY3VycmVu'@;
put 'dENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnByZXZpb3VzKCl9bmV4dCgpe3RoaXMu'@;
put 'cGFnZS5uZXh0KCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3QgZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5u'@;
put 'YXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFcCksdHQoRXMpLHR0KGgyKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1d'@;
put 'LGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZ0gsNSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5fcGFnZVNpemVDb21wb25lbnQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHBfZSw1KSwyJmEpe2xldCBoO2FpKGg9'@;
put 'bGkoKSkmJihkLmN1cnJlbnRQYWdlSW5wdXRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dDpbImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJk'@;
put 'aXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOlsiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0UGFnZTpbImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOlsiY2xyRGdQ'@;
put 'YWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczpDX2UsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFn'@;
put 'aW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsx'@;
put 'LCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0'@;
put 'eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsicmVhZE9ubHkiLCIiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIs'@;
put 'MywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsi'@;
put 'dHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0'@;
put 'aW9uKGEsZCl7MSZhJiYoQWkod19lKSxKZSgwLGJfZSw1LDIsIm5nLWNvbnRhaW5lciIsMCksSmUoMSx5X2UsMTQsMTAsIm5nLWNvbnRhaW5lciIsMCkpLDImYSYmKFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksQ2UoMSksUmUoIm5nSWYiLGQuZGV0YWlsU2VydmljZS5pc09w'@;
put 'ZW4pKX0sZGVwZW5kZW5jaWVzOltaaSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgRzg9ImRhdGFncmlkLWZpeGVkLXdpZHRoIixIRT0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IHJnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlz'@;
put 'LnJlbmRlcmVyPWQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9c2V0IGNvbHVtblN0YXRlKGEpe3RoaXMuc3RhdGVTdWJzY3Jp'@;
put 'cHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJ1bkFsbENoYW5nZXM9dlEsdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShkPT50aGlzLnN0YXRlQ2hhbmdlcyhkKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFj'@;
put 'aChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdGF0ZUNoYW5nZXMoYSl7dGhpcy5ydW5BbGxDaGFuZ2VzJiYoYS5jaGFuZ2VzPXRoaXMucnVuQWxsQ2hhbmdlcyxkZWxldGUgdGhpcy5ydW5B'@;
put 'bGxDaGFuZ2VzKSxhLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBMMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2JyZWFrO2Nhc2UgTDAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLnJl'@;
put 'bmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50LEc4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRl'@;
put 'cmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxIRSk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSEUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoRm8pLHR0KGVnKSl9LGMu'@;
put 'XHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksY30pKCksaWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5kb21BZGFwdGVyPWYsdGhp'@;
put 'cy5jb2x1bW5SZXNpemVyU2VydmljZT1fLHRoaXMuY29sdW1uc1NlcnZpY2U9VCx0aGlzLmNvbHVtblN0YXRlPVcsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBFcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25z'@;
put 'LnB1c2godGhpcy5vcmdhbml6ZXIuZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goVy5zdWJzY3JpYmUoaWU9PnRoaXMuc3RhdGVDaGFuZ2VzKGllKSkpfW5nT25EZXN0cm95'@;
put 'KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0'@;
put 'YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXN0YXRlQ2hhbmdlcyhhKXthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBMMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2Jy'@;
put 'ZWFrO2Nhc2UgTDAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLndpZHRoU2V0JiYhdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCks'@;
put 'dGhpcy5hdXRvU2V0JiZ0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCl9ZGV0ZWN0U3RyaWN0V2lkdGgoKXtyZXR1cm4gdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnk/dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS53aWR0aEFmdGVy'@;
put 'UmVzaXplOnRoaXMuYXV0b1NldD8wOnRoaXMuZG9tQWRhcHRlci51c2VyRGVmaW5lZFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl9Y29tcHV0ZVdpZHRoKGEpe2xldCBkPWE7cmV0dXJuIGR8fChkPXRoaXMuZG9tQWRhcHRlci5zY3JvbGxXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQp'@;
put 'KSxkfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJw'@;
put 'eCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEc4KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSEUpOnRoaXMucmVuZGVyZXIucmVt'@;
put 'b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEhFKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChlZyksdHQoaDEpLHR0KHRIKSx0dChIZiksdHQocEgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOlt0aShbdEgsdndlXSldfSksY30pKCksd3dlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXty'@;
put 'ZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG9nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0'@;
put 'aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENvbHVtblN0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q29sdW1uU3RhdGUoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0Q29sdW1uU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmKGEu'@;
put 'Y29sdW1uU3RhdGU9dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2RdKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChIZikpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93'@;
put 'LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLHJnLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpO2NvbnN0IEN3ZT1jPT5ScyhjKT9uZXcgaDE6bmV3IHd3ZTtsZXQgJDg9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLHBlLHdlKXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmVsPV8sdGhpcy5yZW5kZXJlcj1ULHRoaXMuZGV0YWlsU2VydmljZT1XLHRoaXMudGFibGVTaXplU2VydmljZT1pZSx0'@;
put 'aGlzLmNvbHVtbnNTZXJ2aWNlPXBlLHRoaXMubmdab25lPXdlLHRoaXMuX2hlaWdodFNldD0hMSx0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'b3JnYW5pemVyLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucGFnZS5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hl'@;
put 'aWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShFZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5lKEVlKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'aXRlbXMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlz'@;
put 'LnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1ucygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2hvdWxkU3RhYmlsaXpl'@;
put 'Q29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5z'@;
put 'dWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZCxo'@;
put 'KT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChoLHtjaGFuZ2VzOltMMC5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChh'@;
put 'LGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMucm93cy5mb3JFYWNoKGE9PmEuc2V0Q29sdW1uU3RhdGUoKSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRT'@;
put 'ZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5k'@;
put 'ZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSsicHgiKSx0aGlzLl9oZWlnaHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWlnaHRT'@;
put 'ZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IGE9dGhpcy5oZWFkZXJzLmxlbmd0aDtsZXQgZD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IF89e2NoYW5nZXM6W0wwLldJRFRIXSwuLi5oLmdldENvbHVtbldpZHRoU3RhdGUoKX07Xy5zdHJpY3RXaWR0aHx8'@;
put 'KGQ9ITEpLGE9PT1mKzEmJmQmJihfLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZixfKX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITEsIXRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiZ0aGlzLml0'@;
put 'ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3JnYW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoZWcpLHR0KEFwKSx0dChFcCksdHQoaDEpLHR0KE5pKSx0dChG'@;
put 'byksdHQoaDIpLHR0KG5IKSx0dChIZiksdHQoTm8pKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLGlnLDQpLElvKGgsb2csNSkpLDImYSl7bGV0IGY7YWkoZj1s'@;
put 'aSgpKSYmKGQuaGVhZGVycz1mKSxhaShmPWxpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpoMSx1c2VGYWN0b3J5OkN3ZSxkZXBzOltHc119XSldfSksY30pKCksU3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhmbWUscG1lLG5iLGdt'@;
put 'ZSxJSyxtbWUsTEssdm1lLF9tZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxkUSxxbCxMRixzZCxhd2UsaFEsJEosQWIseGIsQkYseUUscTVd'@;
put 'XX0pLGN9KSgpLE1RPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stY29udGVudCJdXX0pLGN9KSgpLG1IPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLl9nZW5lcmF0ZWRJZD1udWxsLHRoaXMuX2lkPW51bGx9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD0ic3RyaW5nIj09dHlwZW9mIGEmJiIiIT09YT9hOnRoaXMuX2dlbmVyYXRlZElkKyIifW5nT25Jbml0KCl7dGhpcy5fZ2VuZXJhdGVk'@;
put 'SWQ9ImNsci1zdGFjay1sYWJlbC0iK0ljKCksdGhpcy5pZHx8KHRoaXMuX2lkPXRoaXMuX2dlbmVyYXRlZElkKyIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1s'@;
put 'YWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5j'@;
put 'YXBzdWxhdGlvbjoyfSksY30pKCkseFE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZm9j'@;
put 'dXNlZD0hMSx0aGlzLnVuaXF1ZUlkPUljKCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhp'@;
put 'cy5fZnVsbHlJbml0aWFsaXplZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhw'@;
put 'YW5kZWR9Z2V0IG9uU3RhY2tMYWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5h'@;
put 'cmlhTGV2ZWw/dGhpcy5hcmlhTGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgo'@;
put 'KXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4'@;
put 'cGFuZGFibGU9ITB9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3Rh'@;
put 'Y2stY2hpbGRyZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYywxMiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsbUgsNSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsImhlYWRpbmciKSgiYXJp'@;
put 'YS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLGRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24t'@;
put 'Zm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbImNsclNiRXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6WyJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOlsiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxh'@;
put 'cmlhU2V0c2l6ZTpbImNsclN0YWNrVmlld1NldHNpemUiLCJhcmlhU2V0c2l6ZSJdLGFyaWFQb3NpbnNldDpbImNsclN0YWNrVmlld1Bvc2luc2V0IiwiYXJpYVBvc2luc2V0Il0sc2V0Q2hhbmdlZFZhbHVlOlsiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0'@;
put 'czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6a19lLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJpZCIsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3Bh'@;
put 'Y2UiLCJmb2N1cyIsImJsdXIiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2st'@;
put 'Y2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihBaShFX2UpLG1lKDAsImRpdiIsMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbigpe3JldHVybiBk'@;
put 'LnRvZ2dsZUV4cGFuZCgpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBmLnByZXZlbnREZWZhdWx0KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITF9KSxKZSgxLFNfZSwx'@;
put 'LDEsImNkcy1pY29uIiwxKSxKZSgyLE1fZSwyLDEsInNwYW4iLDIpLG1lKDMsImRpdiIsMyksa3IoNCkseWUoKSxtZSg1LCJkaXYiLDQpLGtyKDYsMSkseWUoKSgpLG1lKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksSmUoOCx4X2UsMiw0LCJkaXYiLDYpLHllKCkpLDImYSYmKFJl'@;
put 'KCJpZCIsZC51bmlxdWVJZCksVHIoInJvbGUiLGQucm9sZSkoInRhYmluZGV4IixkLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRhYmxlKSxDZSgx'@;
put 'KSxSZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLENlKDUpLFJlKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W2JFLFppLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9'@;
put 'Il19KSxjfSkoKSxxOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zYXZlPW5ldyBFcighMSksdGhpcy5lZGl0YWJsZT0hMSx0aGlzLmVkaXRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLl9lZGl0TW9kZT0hMX1nZXQgZWRpdGluZygpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0'@;
put 'aGlzLl9lZGl0TW9kZX1zZXQgZWRpdGluZyhhKXt0aGlzLmVkaXRhYmxlJiYodGhpcy5fZWRpdE1vZGU9YSx0aGlzLmVkaXRpbmdDaGFuZ2UuZW1pdChhKSxhfHx0aGlzLnNhdmUuZW1pdChudWxsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj'@;
put 'Llx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxvdXRwdXRzOntzYXZlOiJjbHJTdGFja1NhdmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6VF9lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihBaShBX2UpLGtyKDApLG1lKDEsImRpdiIsMCksa3IoMiwxKSx5ZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksRXdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxxbCxzYSxoUV1dfSksY30pKCksc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlz'@;
put 'LmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBiZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qga1E9e3Byb3ZpZGU6c2csdXNl'@;
put 'RmFjdG9yeTpmdW5jdGlvbiBrd2UoYyl7cmV0dXJuIGN8fG5ldyBzZ30sZGVwczpbW25ldyB6MixuZXcgZzAsc2ddXX07bGV0IEFRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2VydmljZT1kLGQmJih0aGlzLnN1YnNj'@;
put 'cmlwdGlvbj10aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRoaXMucGFyZW50JiYhdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXImJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfXNo'@;
put 'b3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5t'@;
put 'b2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQoWXUsOCkpfSxjLlx1MDI3NWNtcD13cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsImdyb3VwIil9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFy'@;
put 'czoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmSmUoMCxWX2UsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmUmUoIm5n'@;
put 'SWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W1ppLHhzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgcGM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRF'@;
put 'Uk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30ocGN8fHt9KTtjbGFzcyBUUXtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZyQ9bmV3IFRlKCExKSx0aGlzLnNlbGVjdGVkPW5ldyBUZShwYy5VTlNFTEVDVEVEKSx0aGlzLl9sb2FkaW5nPSExfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMu'@;
put 'X2xvYWRpbmd9c2V0IGxvYWRpbmcobCl7dGhpcy5fbG9hZGluZz1sLHRoaXMubG9hZGluZyQubmV4dChsKX1kZXN0cm95KCl7dGhpcy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxk'@;
put 'JiZsIT09cGMuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9Pmguc2V0U2VsZWN0ZWQobCwhMSwhMCkpLGEmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfXRvZ2dsZVNlbGVjdGlvbihs'@;
put 'KXt0aGlzLnNldFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQudmFsdWU9PT1wYy5TRUxFQ1RFRD9wYy5VTlNFTEVDVEVEOnBjLlNFTEVDVEVELCEwLGwpfV91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKXtjb25zdCBsPXRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCk7'@;
put 'bCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQobCksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9Y29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCl7bGV0IGw9ITEsYT0hMTtmb3IoY29uc3Qg'@;
put 'ZCBvZiB0aGlzLmNoaWxkcmVuKXN3aXRjaChkLnNlbGVjdGVkLnZhbHVlKXtjYXNlIHBjLklOREVURVJNSU5BVEU6cmV0dXJuIHBjLklOREVURVJNSU5BVEU7Y2FzZSBwYy5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuIHBjLklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwp'@;
put 'cmV0dXJuIHBjLklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT9wYy5VTlNFTEVDVEVEOnBjLlNFTEVDVEVEOnBjLlVOU0VMRUNURUR9fWNsYXNzIE5FIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9'@;
put 'aCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMSx0aGlzLl9jaGlsZHJlbj1bXSx0aGlzLm1vZGVsPWwsdGhpcy5wYXJlbnQ9YX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5mZXRjaENoaWxkcmVuKCksdGhpcy5fY2hpbGRyZW59c2V0IGNoaWxkcmVuKGwpe3RoaXMuX2NoaWxkcmVuPWx9ZGVz'@;
put 'dHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHN1cGVyLmRlc3Ryb3koKX1jbGVhckNoaWxkcmVuKCl7dGhpcy5fY2hpbGRyZW4uZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuLHRoaXMuY2hpbGRyZW5G'@;
put 'ZXRjaGVkPSExfWZldGNoQ2hpbGRyZW4oKXtpZih0aGlzLmNoaWxkcmVuRmV0Y2hlZClyZXR1cm47Y29uc3QgbD10aGlzLmdldENoaWxkcmVuKHRoaXMubW9kZWwpOyFmdW5jdGlvbiBBd2UoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59KGwpP0ZPKGwpPyh0aGlzLmxv'@;
put 'YWRpbmc9ITAsdGhpcy5zdWJzY3JpcHRpb249bC5zdWJzY3JpYmUoYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKTp0aGlzLl9jaGlsZHJlbj1sP3RoaXMud3JhcENoaWxkcmVuKGwpOltdOih0aGlzLmxvYWRpbmc9ITAsbC50aGVuKGE9'@;
put 'Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITAsdGhpcy5mZWF0dXJlc1NlcnZpY2UmJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5uZXh0KCl9d3JhcENoaWxkcmVuKGwpe3Jl'@;
put 'dHVybiBsLm1hcChhPT5uZXcgTkUoYSx0aGlzLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKX19bGV0IERRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNo'@;
put 'YW5nZXMoKXtsZXQgYTthPUFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IE5FKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBORSh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1'@;
put 'cmVzU2VydmljZSldLHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygp'@;
put 'fSkpLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoemEpLHR0KHNnKSx0dChVYSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOlsi'@;
put 'Y2xyUmVjdXJzaXZlRm9yT2YiLCJub2RlcyJdLGdldENoaWxkcmVuOlsiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbdmFdfSksY30pKCksdkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgYmUs'@;
put 'dGhpcy5fZm9jdXNDaGFuZ2U9bmV3IGJlfWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5f'@;
put 'Zm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVu'@;
put 'dCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVB'@;
put 'Ym92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3Rh'@;
put 'cnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2Nv'@;
put 'bnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4g'@;
put 'aDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2Rl'@;
put 'TW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVu'@;
put 'dDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5v'@;
put 'ZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNX'@;
put 'aXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IF89aC5pbmRleE9mKGQpKzE7XzxoLmxlbmd0aDtfKyspe2NvbnN0IFc9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoW19dKTtpZihXKXJldHVybiBXfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dp'@;
put 'dGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQp'@;
put 'e3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVT'@;
put 'dGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgVHdlIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnBhcmVudD1sLGwmJmwuX2FkZENoaWxk'@;
put 'KHRoaXMpLHRoaXMuY2hpbGRyZW49W119ZGVzdHJveSgpe3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fcmVtb3ZlQ2hpbGQodGhpcyksc3VwZXIuZGVzdHJveSgpfV9hZGRDaGlsZChsKXt0aGlzLmNoaWxkcmVuLnB1c2gobCl9X3JlbW92ZUNoaWxkKGwpe2NvbnN0IGE9dGhpcy5jaGlsZHJl'@;
put 'bi5pbmRleE9mKGwpO2E+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGEsMSl9fWxldCBEcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWw9YX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpfWFj'@;
put 'dGl2YXRlKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2smJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImNsci10cmVlbm9kZS1saW5rIl1dfSksY30pKCksZzE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZvclR5cGVBaGVhZFByb3ZpZGVyPWgsdGhpcy5mZWF0dXJlc1NlcnZp'@;
put 'Y2U9Zix0aGlzLmV4cGFuZFNlcnZpY2U9Xyx0aGlzLmNvbW1vblN0cmluZ3M9VCx0aGlzLmZvY3VzTWFuYWdlcj1XLHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBFcix0aGlzLlNUQVRFUz1wYyx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRo'@;
put 'aXMubm9kZUlkPUljKCksdGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9dGhp'@;
put 'cy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uP2llLnZpZXc/aWUudmlldy5jb250ZXh0LmNsck1vZGVsOmllLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgVHdlKGQ/ZC5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlz'@;
put 'Ll9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPXBjLlVOU0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9mIGEmJihhPWE/cGMuU0VMRUNURUQ6cGMuVU5TRUxF'@;
put 'Q1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFu'@;
put 'ZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PXBjLlNFTEVDVEVEOiEhdGhpcy50cmVlTm9k'@;
put 'ZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVu'@;
put 'Z3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoSWEoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGVkQ2hhbmdl'@;
put 'LmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'Zm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlzLnN1YnNjcmlwdGlv'@;
put 'bnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGY4KDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb3JUeXBlQWhlYWRQcm92aWRlciYmKHRoaXMuX21vZGVsLnRleHRDb250ZW50PXRoaXMuZm9yVHlwZUFo'@;
put 'ZWFkUHJvdmlkZXIudGV4dENvbnRlbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKGY4KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVh'@;
put 'ZEtleUJ1ZmZlcj0iIn0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxl'@;
put 'OiEhdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7UnMo'@;
put 'dGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYkluZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5m'@;
put 'b2N1c01hbmFnZXIuYnJvYWRjYXN0Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtzd2l0Y2goVEYoYSksbDIoYS5rZXkpKXtjYXNlIHdvLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2Ugd28uQXJyb3dE'@;
put 'b3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIHdvLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7'@;
put 'Y2FzZSB3by5Ib21lOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdvLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdv'@;
put 'LkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2Ugd28uU3BhY2U6Y2FzZSB3by5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50'@;
put 'ZXh0Q29udGVudCYmZnVuY3Rpb24gcnllKGMpe2NvbnN0IGw9Yy5rZXk7cmV0dXJuIGwudG9Mb3dlckNhc2UoKSE9PWwudG9VcHBlckNhc2UoKXx8bD49IjAiJiZsPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2'@;
put 'ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRl'@;
put 'eCIsYSl9Y2hlY2tUYWJJbmRleChhKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEpfXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmlzRXhwYW5kYWJs'@;
put 'ZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpfWV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCl7dGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFu'@;
put 'YWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5leHBhbmRlZD90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITE6dGhpcy5mb2N1'@;
put 'c01hbmFnZXIuZm9jdXNQYXJlbnQodGhpcy5fbW9kZWwpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVlTm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJl'@;
put 'c1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChHcyksdHQoYywxMiksdHQoZnllLDEwKSx0dChzZyksdHQoWXUpLHR0KEVzKSx0dCh2SCksdHQoRWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLXRyZWUtbm9kZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLERwLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQudHJlZU5vZGVMaW5rTGlzdD1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oQl9lLDcsTmkpLDImYSl7'@;
put 'bGV0IGg7YWkoaD1saSgpKSYmKGQuY29udGVudENvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLXRyZWUtbm9kZSIsITApfSxpbnB1dHM6e2V4cGFuZGFibGU6WyJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJd'@;
put 'LHNlbGVjdGVkOlsiY2xyU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOlt0'@;
put 'aShba1EsWXUse3Byb3ZpZGU6dmIsdXNlRXhpc3Rpbmc6WXV9XSldLG5nQ29udGVudFNlbGVjdG9yczokX2UsZGVjbHM6MTIsdmFyczo5LGNvbnN0czpbWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlk'@;
put 'b3duIiwiZm9jdXMiXSxbImNvbnRlbnRDb250YWluZXIiLCIiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRy'@;
put 'ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIGNsci10cmVlbm9kZS1jaGVja2JveCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2Vkb3duIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0'@;
put 'LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiXSxbInNoYXBlIiwiYW5nbGUiLDEs'@;
put 'ImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5uZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEtaGlkZGVu'@;
put 'IiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEsImNsci1jaGVja2JveCIsMywiaWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsImZvY3VzIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbNCwi'@;
put 'bmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKEdfZSksbWUoMCwiZGl2IiwwLDEpLHh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigp'@;
put 'fSksSmUoMixqX2UsMiwxLCJidXR0b24iLDIpLEplKDMsel9lLDIsMCwiZGl2IiwzKSxKZSg0LFVfZSwzLDQsImRpdiIsNCksbWUoNSwiZGl2Iiw1KSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzVHJlZU5vZGUoKX0pLGtyKDYpLEplKDcsV19lLDMsMiwiZGl2Iiw2'@;
put 'KSx5ZSgpKCksbWUoOCwiZGl2Iiw3KSxrcig5LDEpLGtyKDEwLDIpLHF0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSx5ZSgpKSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxl'@;
put 'Y3RlZCksQ2UoMiksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuZmVh'@;
put 'dHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLENlKDMpLFJlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfHxkLmFyaWFTZWxlY3RlZCksQ2UoMSksUmUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQi'@;
put 'KSxUcigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLENlKDMpLFJlKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbQVEsWmkscXNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2ExKCJ0'@;
put 'b2dnbGVDaGlsZHJlbkFuaW0iLFtmYygiY29sbGFwc2VkID0+IGV4cGFuZGVkIixbX3Moe2hlaWdodDowfSkscnUoMjAwLF9zKHtoZWlnaHQ6IioifSkpXSksZmMoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW19zKHtoZWlnaHQ6IioifSkscnUoMjAwLF9zKHtoZWlnaHQ6MH0pKV0pLEt4KCJl'@;
put 'eHBhbmRlZCIsX3Moe2hlaWdodDoiKiIsIm92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxLeCgiY29sbGFwc2VkIixfcyh7aGVpZ2h0OjB9KSldKV19fSksY30pKCksZGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQse25hdGl2ZUVsZW1lbnQ6aH0sZixfKXt0aGlzLmZlYXR1cmVzU2Vy'@;
put 'dmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBUPV8ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4yKGgsImZvY3VzaW4iKS5zdWJzY3JpYmUoVz0+e1cudGFyZ2V0PT09aCYmKHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5mb2N1c0Zp'@;
put 'cnN0VmlzaWJsZU5vZGUoKSxmLnJlbW92ZUF0dHJpYnV0ZShoLCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChUKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJl'@;
put 'c1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjB9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Um9vdE5vZGVz'@;
put 'KCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4h'@;
put 'YS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQodkgpLHR0KE5pKSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rp'@;
put 'b24oYSxkLGgpe2lmKDEmYSYmSW8oaCxnMSw0KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsInRyZWUiKSgiYXJpYS1t'@;
put 'dWx0aXNlbGVjdGFibGUiLGQuaXNNdWx0aVNlbGVjdGFibGUpfSxpbnB1dHM6e2xhenk6WyJjbHJMYXp5IiwibGF6eSJdfSxmZWF0dXJlczpbdGkoW2tRLHZIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsz'@;
put 'LCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3IoMCksSmUoMSxxX2UsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W0FR'@;
put 'LFppXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxMd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKGg4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1t'@;
put 'aSh7aW1wb3J0czpbW29vLHNhLExGXV19KSxjfSkoKSxSd2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbU3dlLEV3ZSxMd2VdfSks'@;
put 'Y30pKCk7ZnVuY3Rpb24gSVEoYyxsLGEpe3JldHVybiBLZS5jcmVhdGUoZD0+e2woZCk7Y29uc3QgaD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBfSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yZW5k'@;
put 'ZXJlcj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZpY2U9Zix0aGlzLnBsYXRmb3JtSWQ9Xyx0aGlzLmlkPUljKCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXI9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0'@;
put 'aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksdGhpcy5wYXJlbnR8fHRoaXMuaGFuZGxlUm9vdEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5w'@;
put 'dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2Uu'@;
put 'bGlzdGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZShkMS5MRUZUKSxkLnN0b3BQcm9wYWdhdGlv'@;
put 'bigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxp'@;
put 'c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hpbGRyZW4ucGlwZShpZCgxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaChfPT5fLmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJlJz'@;
put 'KHRoaXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0'@;
put 'aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+'@;
put 'e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P2QxLlJJR0hUOmQxLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlciYmdGhpcy5mb2N1cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcj1kfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNo'@;
put 'KCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3VzKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7UnModGhp'@;
put 'cy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IHF4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKE1lKGE9PmFbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFu'@;
put 'ZEdldENoaWxkcmVuKCkucGlwZShNZShhPT5hWzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTWUoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtJRi5saW5rVmVydGljYWwoYSksdGhpcy5wYXJlbnQmJklGLmxpbmtQYXJlbnQoYSx0aGlzLmNs'@;
put 'b3NlQW5kR2V0VGhpcygpLGQxLkxFRlQpLHRoaXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gSVEodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBJUShXaSh0aGlzKSwoKT0+'@;
put 'dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoYywxMiksYXIoS3MpLGFyKEViKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9'@;
put 'KSgpO2NvbnN0IE93ZT1RSihfSCk7bGV0IEZiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBiZX1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBGd2U9e3Byb3ZpZGU6RmIsdXNlRmFjdG9yeTpmdW5jdGlvbiBQd2UoYyl7cmV0dXJuIGN8fG5ldyBG'@;
put 'Yn0sZGVwczpbW25ldyB6MixuZXcgZzAsRmJdXX07bGV0IE5mPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5wYXJlbnQ9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmNkcj1oLHRoaXMuaXNNZW51Q2xvc2FibGU9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY2hhbmdlcy5zdWJzY3JpYmUoXz0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49XykpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKSl9bmdPbkRlc3Ryb3koKXt0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChjLDEyKSx0dChLcyksdHQoVWEpLHR0KEZiKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs'@;
put 'ci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwiaXNNZW51Q2xv'@;
put 'c2FibGUiXX0sZmVhdHVyZXM6W3RpKFtGd2Use3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LGpKLEtzLE93ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSks'@;
put 'Y30pKCk7Y29uc3QgSHdlPVt7cHJvdmlkZTpTRSx1c2VDbGFzczooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMucGxhdGZvcm1JZD1oLHRoaXMuaWQ9SWMoKSx0aGlzLmRpc2FibGVkPSExLGQuc2V0QXR0cmlidXRlKGEubmF0'@;
put 'aXZlRWxlbWVudCwiaWQiLHRoaXMuaWQpLGQuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIw'@;
put 'IiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSkpfWJsdXIoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJl'@;
put 'ci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKEZvKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpfV07bGV0IEs4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0'@;
put 'aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aCx0aGlzLnNldEJ5RGVwcmVjYXRlZERpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNh'@;
put 'YmxlZD0hIWF8fCIiPT09YX1nZXQgZGlzYWJsZWREZXByZWNhdGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWREZXByZWNhdGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YSx0aGlzLnNldEJ5RGVwcmVjYXRlZERp'@;
put 'c2FibGVkPSEwfWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVD'@;
put 'bG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFn'@;
put 'YXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8YykodHQoTmYpLHR0KEZiKSx0dChTRSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5v'@;
put 'bkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihUcigicm9sZSIsIm1lbnVpdGVtIiko'@;
put 'ImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCYmZC5zZXRCeURlcHJlY2F0ZWREaXNhYmxlZD8iIjpudWxsKSgiaWQiLGQuZHJvcGRvd25JdGVtSWQpLGRyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7'@;
put 'ZGlzYWJsZWQ6WyJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZGlzYWJsZWREZXByZWNhdGVkOlsiZGlzYWJsZWQiLCJkaXNhYmxlZERlcHJlY2F0ZWQiXSxkcm9wZG93bkl0ZW1JZDpbImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W3RpKFtId2VdKV19KSxjfSkoKTt2YXIgR3I9'@;
put 'ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9DRU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRd'@;
put 'PSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0i'@;
put 'TEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oR3J8fHt9KTtjb25zdCBMUT0iYWJzb2x1dGUiO2NsYXNzIEJ3ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmJvdW5kT25TY3JvbGxM'@;
put 'aXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249TFEsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9y'@;
put 'KGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQYXJlbnQ6Xz0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksXyYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IFQ9bC5nZXRCb3VuZGluZ0NsaWVudFJl'@;
put 'Y3QoKSxXPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgaWU9VC5sZWZ0LVcubGVmdCtoLHBlPVQudG9wLVcudG9wK2Y7c3dpdGNoKGEpe2Nhc2UgR3IuTEVGVF9UT1A6Y2FzZSBHci5UT1BfTEVGVDpicmVhaztjYXNlIEdyLlRPUF9DRU5URVI6aWUrPVQud2lkdGgv'@;
put 'MjticmVhaztjYXNlIEdyLlRPUF9SSUdIVDpjYXNlIEdyLlJJR0hUX1RPUDppZSs9VC53aWR0aDticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6cGUrPVQuaGVpZ2h0O2JyZWFrO2Nhc2UgR3IuQk9UVE9NX0NFTlRFUjpwZSs9VC5oZWlnaHQsaWUrPVQud2lk'@;
put 'dGgvMjticmVhaztjYXNlIEdyLkJPVFRPTV9SSUdIVDpjYXNlIEdyLlJJR0hUX0JPVFRPTTpwZSs9VC5oZWlnaHQsaWUrPVQud2lkdGg7YnJlYWs7Y2FzZSBHci5MRUZUX0NFTlRFUjpwZSs9VC5oZWlnaHQvMjticmVhaztjYXNlIEdyLlJJR0hUX0NFTlRFUjpwZSs9VC5oZWlnaHQvMixpZSs9'@;
put 'VC53aWR0aH1zd2l0Y2goZCl7Y2FzZSBHci5MRUZUX1RPUDpjYXNlIEdyLlRPUF9MRUZUOmJyZWFrO2Nhc2UgR3IuVE9QX0NFTlRFUjppZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuVE9QX1JJR0hUOmNhc2UgR3IuUklHSFRfVE9QOmllLT1XLndpZHRoO2JyZWFrO2Nhc2UgR3IuTEVGVF9C'@;
put 'T1RUT006Y2FzZSBHci5CT1RUT01fTEVGVDpwZS09Vy5oZWlnaHQ7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOnBlLT1XLmhlaWdodCxpZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuQk9UVE9NX1JJR0hUOmNhc2UgR3IuUklHSFRfQk9UVE9NOnBlLT1XLmhlaWdodCxpZS09Vy53aWR0'@;
put 'aDticmVhaztjYXNlIEdyLkxFRlRfQ0VOVEVSOnBlLT1XLmhlaWdodC8yO2JyZWFrO2Nhc2UgR3IuUklHSFRfQ0VOVEVSOnBlLT1XLmhlaWdodC8yLGllLT1XLndpZHRofWNvbnN0IHdlPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxFZT1wYXJzZUludCh3ZS5tYXJnaW5MZWZ0LDEw'@;
put 'KSxaZT1wYXJzZUludCh3ZS5tYXJnaW5SaWdodCwxMCksaXQ9cGFyc2VJbnQod2UubWFyZ2luVG9wLDEwKSxldD1wYXJzZUludCh3ZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIEdyLkxFRlRfVE9QOmNhc2UgR3IuVE9QX0xFRlQ6Y2FzZSBHci5UT1BfUklHSFQ6Y2FzZSBHci5S'@;
put 'SUdIVF9UT1A6KGQ9PT1Hci5CT1RUT01fUklHSFR8fGQ9PT1Hci5SSUdIVF9CT1RUT00pJiYocGUtPWV0LGllLT1aZSksKGQ9PT1Hci5CT1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKHBlLT1pdCxpZSs9RWUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihw'@;
put 'ZSs9aXQsaWUrPUVlKSwoZD09PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihwZSs9aXQsaWUtPVplKTticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6Y2FzZSBHci5CT1RUT01fUklHSFQ6Y2FzZSBHci5SSUdIVF9CT1RUT006KGQ9PT1Hci5C'@;
put 'T1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKHBlLT1ldCxpZSs9RWUpLChkPT09R3IuQk9UVE9NX1JJR0hUfHxkPT09R3IuUklHSFRfQk9UVE9NKSYmKHBlLT1ldCxpZS09WmUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihwZSs9aXQsaWUrPUVlKSwoZD09'@;
put 'PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihwZSs9aXQsaWUtPVplKTticmVhaztjYXNlIEdyLlRPUF9DRU5URVI6cGUtPWV0LGllKz1FZSxpZS09WmU7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOnBlKz1pdCxpZSs9RWUsaWUtPVplO2JyZWFrO2Nhc2UgR3IuTEVGVF9D'@;
put 'RU5URVI6cGUrPWl0LHBlLT1ldCxpZS09WmU7YnJlYWs7Y2FzZSBHci5SSUdIVF9DRU5URVI6cGUrPWl0LHBlLT1ldCxpZSs9RWV9cmV0dXJuIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGllKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91'@;
put 'bmQocGUpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0'@;
put 'aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHxhPT09TFF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVudCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBiZTtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1'@;
put 'bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92'@;
put 'ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3Jv'@;
put 'bGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8'@;
put 'ImF1dG8iPT09YS5vdmVyZmxvd1l9fWxldCBiSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnRIb3N0PWQsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSExLHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVT'@;
put 'Q0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2s9aD0+e3RoaXMuYW5jaG9yRWxlbS5jb250YWlucyhoLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LHRoaXMuZWw9YS5nZXQoTmkpLHRoaXMudG9nZ2xlU2VydmljZT1hLmdldChLcyks'@;
put 'dGhpcy5yZW5kZXJlcj1hLmdldChGbyksdGhpcy5uZ1pvbmU9YS5nZXQoTm8pLHRoaXMucmVmPWEuZ2V0KFVhKSx0aGlzLmFuY2hvckVsZW09ZC5uYXRpdmVFbGVtZW50LHRoaXMucG9wb3Zlckluc3RhbmNlPW5ldyBCd2UodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlv'@;
put 'bj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5h'@;
put 'bmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfWdldCBpc09mZlNjcmVlbigpe3JldHVybiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNl'@;
put 'LmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRl'@;
put 'c3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zl'@;
put 'ckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVu'@;
put 'KCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmbDIoYS5rZXkpPT09d28uRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9j'@;
put 'dW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50'@;
put 'JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYm'@;
put 'ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KE5p'@;
put 'LDQpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImlzLW9mZi1zY3JlZW4iLGQuaXNPZmZTY3JlZW4pfX0pLGN9KSgpLGFnPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmKXtp'@;
put 'ZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUdyLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUCk6KHRo'@;
put 'aXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRz'@;
put 'aWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUdyLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5h'@;
put 'bmNob3JQb2ludD1Hci5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxl'@;
put 'ZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1Hci5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1A7YnJlYWs7Y2Fz'@;
put 'ZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2Jy'@;
put 'ZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMu'@;
put 'aXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVz'@;
put 'ZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFYSksdHQoTDgsOCksdHQoYywxMiksdHQoX0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJp'@;
put 'ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxTRSw0KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsIm1lbnUiKSxkcigiZHJvcGRvd24tbWVudSIsITApKX0saW5w'@;
put 'dXRzOntwb3NpdGlvbjpbImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W2VvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbGc9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSEwLGEucGFyZW50JiYodGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMSksZi50cmlnZ2VyPWgubmF0aXZlRWxlbWVudH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRo'@;
put 'aXMudG9nZ2xlU2VydmljZS5vcGVufW9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmYpLHR0KEtzKSx0dChOaSksdHQoX0gpKX0s'@;
put 'Yy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyIiLCJjbHJEcm9wZG93blRvZ2dsZSIsIiJdXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJu'@;
put 'IGQub25Ecm9wZG93blRyaWdnZXJDbGljayhmKX0pLDImYSYmKFRyKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpKCJhcmlhLWV4cGFuZGVkIixkLmFjdGl2ZSksZHIoImRyb3Bkb3duLXRvZ2dsZSIsZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImRyb3Bkb3duLWl0ZW0iLCFkLmlzUm9vdExldmVsVG9n'@;
put 'Z2xlKSgiZXhwYW5kYWJsZSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJhY3RpdmUiLGQuYWN0aXZlKSl9fSksY30pKCkseUg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1'@;
put 'MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxzZCxzYV19KSxjfSkoKTtjb25zdCBqd2U9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiXTtsZXQgd0g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hh'@;
put 'cGU9ImluZm8tY2lyY2xlIix0aGlzLl9hbGVydEljb25TaGFwZT0iIix0aGlzLl9hbGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7andlLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFs'@;
put 'ZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydEljb25TaGFwZT90aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlzLl9hbGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0'@;
put 'aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25TaGFwZT0iIn1nZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBkPXtzaGFwZToiIixjc3NDbGFz'@;
put 'czoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6ZC5zaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5zaGFwZT0i'@;
put 'ZXhjbGFtYXRpb24tY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0iY2hlY2stY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRpdGxlPXRo'@;
put 'aXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgYmV9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhp'@;
put 'cy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5h'@;
put 'bGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0'@;
put 'aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEs'@;
put 'dGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhp'@;
put 'cy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdl'@;
put 'Lm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJl'@;
put 'bnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9j'@;
put 'dXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxIYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWNvblNlcnZpY2U9YSx0aGlzLmNkcj1kLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9aCx0aGlz'@;
put 'LmNvbW1vblN0cmluZ3M9Zix0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5n'@;
put 'ZWQ9bmV3IEVyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfXNldCBhbGVydEljb25TaGFw'@;
put 'ZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlPWF9c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMuY2xvc2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJv'@;
put 'bVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVydFR5cGUpLmNzc0NsYXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNldCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlz'@;
put 'Lm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhp'@;
put 'cy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xvc2UoKXtpZighdGhp'@;
put 'cy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1p'@;
put 'dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHdIKSx0dChVYSksdHQoVkUsOCksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbImNsckFsZXJ0U2l6'@;
put 'ZVNtYWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOlsiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNsckNsb3NlQnV0dG9uQXJpYUxhYmVsIixhbGVydFR5cGU6'@;
put 'WyJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbImNsckFsZXJ0SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOlsiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sZmVh'@;
put 'dHVyZXM6W3RpKFt3SF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1oaWRkZW4iLCJhbGVydC1zbSIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFz'@;
put 'cyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoQWkoKSxKZSgwLFhfZSw0LDgsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W1ppLGRjLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxQUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e3RoaXMuaWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQod0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJjZHMtaWNvbiIsMSkseWUo'@;
put 'KSxrcigyKSksMiZhJiYoQ2UoMSksVHIoInNoYXBlIixkLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsZC5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxOYj0oKCk9PntjbGFzcyBj'@;
put 'e31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJhbGVydC10ZXh0Il1dfSksY30pKCksRlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNl'@;
put 'cnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0'@;
put 'IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2Vy'@;
put 'dmljZS5jdXJyZW50PWF9Z2V0IHByZXZpb3VzQWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VS'@;
put 'UkVOVDooMT09PWE/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3Jl'@;
put 'dHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZp'@;
put 'Y2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hh'@;
put 'bmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3RpdmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5t'@;
put 'dWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RC'@;
put 'aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImFsZXJ0cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdLGN1cnJlbnRBbGVydEluZGV4OlsiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRl'@;
put 'eCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwi'@;
put 'YWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFu'@;
put 'Z2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZURvd24oKX0pLHF0KDMsImNkcy1pY29uIiwzKSx5ZSgpKCks'@;
put 'bWUoNCwiZGl2Iiw0KSxOZSg1KSx5ZSgpLG1lKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZVVwKCl9KSxxdCg4LCJjZHMtaWNvbiIsNikseWUoKSgpKCkpLDImYSYmKENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxl'@;
put 'cnRBcmlhTGFiZWwpLENlKDMpLHpjKCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0'@;
put 'aW9uOjJ9KSxjfSkoKSxIUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9'@;
put 'W119c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7'@;
put 'cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3Vy'@;
put 'cmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2'@;
put 'aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJy'@;
put 'ZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11'@;
put 'bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVkUpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7'@;
put 'aWYoMSZhJiZJbyhoLEhiLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSko'@;
put 'ImFsZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4Olsi'@;
put 'Y2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5kZXgiXSxjdXJyZW50QWxlcnQ6WyJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hh'@;
put 'bmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbVkVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmViZSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKFFfZSksSmUoMCxKX2UsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwwKSxrcigxKSksMiZhJiZSZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKX0sZGVwZW5kZW5jaWVzOltGUSxaaV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksTlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKHMxLFJLLG8xLGJtZSxuYil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSks'@;
put 'Yy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksendlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W05R'@;
put 'XX0pLGN9KSgpLFhzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLk5BVl9MRVZFTF8xPTEsYy5OQVZfTEVWRUxfMj0yLGMuTkFWX0NMT1NFX0FMTD0iTkFWX0NMT1NFX0FMTCIsYy5OQVZfT1BFTj0iTkFWX09QRU4iLGMuTkFWX0NMT1NFPSJOQVZfQ0xPU0UiLGMuTkFWX1RPR0dMRT0iTkFWX1RP'@;
put 'R0dMRSIsYy5OQVZfQ0xBU1NfSEFNQlVSR0VSX01FTlU9Im9wZW4taGFtYnVyZ2VyLW1lbnUiLGMuTkFWX0NMQVNTX09WRVJGTE9XX01FTlU9Im9wZW4tb3ZlcmZsb3ctbWVudSIsYy5OQVZfQ0xBU1NfVFJJR0dFUl8xPSJoZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIiLGMuTkFWX0NMQVNTX1RS'@;
put 'SUdHRVJfMj0iaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIiLGMuTkFWX0NMQVNTX0xFVkVMXzE9ImNsci1uYXYtbGV2ZWwtMSIsYy5OQVZfQ0xBU1NfTEVWRUxfMj0iY2xyLW5hdi1sZXZlbC0yIixjfSkoKTtjbGFzcyBWUXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2NvbnRyb2xDb2RlPWwsdGhp'@;
put 'cy5fbmF2TGV2ZWw9YX1nZXQgY29udHJvbENvZGUoKXtyZXR1cm4gdGhpcy5fY29udHJvbENvZGV9Z2V0IG5hdkxldmVsKCl7cmV0dXJuIHRoaXMuX25hdkxldmVsfX1sZXQgQkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMucmVzcG9uc2l2ZU5hdkxpc3Q9W10sdGhpcy5yZWdp'@;
put 'c3Rlck5hdlN1YmplY3Q9bmV3IHF4LHRoaXMuY29udHJvbE5hdlN1YmplY3Q9bmV3IGJlLHRoaXMuY2xvc2VBbGxOYXZzKCl9Z2V0IHJlZ2lzdGVyZWROYXZzKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfWdldCBuYXZDb250cm9sKCl7cmV0dXJuIHRo'@;
put 'aXMuY29udHJvbE5hdlN1YmplY3QuYXNPYnNlcnZhYmxlKCl9cmVnaXN0ZXJOYXYoYSl7IWF8fHRoaXMuaXNOYXZSZWdpc3RlcmVkKGEpfHwodGhpcy5yZXNwb25zaXZlTmF2TGlzdC5wdXNoKGEpLHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0Lm5leHQodGhpcy5yZXNwb25zaXZlTmF2TGlzdCkp'@;
put 'fWlzTmF2UmVnaXN0ZXJlZChhKXtyZXR1cm4gdGhpcy5yZXNwb25zaXZlTmF2TGlzdC5pbmRleE9mKGEpPi0xJiYoY29uc29sZS5lcnJvcigiTXVsdGlwbGUgY2xyLW5hdi1sZXZlbCAiK2ErIiBhdHRyaWJ1dGVzIGZvdW5kLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgZXhpc3Rz'@;
put 'IiksITApfXVucmVnaXN0ZXJOYXYoYSl7Y29uc3QgZD10aGlzLnJlc3BvbnNpdmVOYXZMaXN0LmluZGV4T2YoYSk7ZD4tMSYmKHRoaXMucmVzcG9uc2l2ZU5hdkxpc3Quc3BsaWNlKGQsMSksdGhpcy5yZWdpc3Rlck5hdlN1YmplY3QubmV4dCh0aGlzLnJlc3BvbnNpdmVOYXZMaXN0KSl9c2Vu'@;
put 'ZENvbnRyb2xNZXNzYWdlKGEsZCl7Y29uc3QgaD1uZXcgVlEoYSxkKTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoaCl9Y2xvc2VBbGxOYXZzKCl7Y29uc3QgYT1uZXcgVlEoWHMuTkFWX0NMT1NFX0FMTCwtOTk5KTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoYSl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFV3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpO2Z1bmN0aW9uIGpRKGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAi'@;
put 'KSxsLmNsYXNzTGlzdC5hZGQoIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxsfWNsYXNzIFh3ZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5hY3RpdmU9ITEsUnMoZCkmJih0aGlzLl9kb2N1bWVudD1hLmdldChMcykpLGguZm9jdXNUcmFwSWR8fChoLmZv'@;
put 'Y3VzVHJhcElkPWZ1bmN0aW9uIFBnZShjPSJfIil7cmV0dXJuYCR7Y30ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9KCkpLHRoaXMuZm9jdXNUcmFwRWxlbWVudD1ofWVuYWJsZUZvY3VzVHJhcCgpe2NvbnN0IGw9dGhpcy5mb2N1c1RyYXBFbGVtZW50LGE9bC5x'@;
put 'dWVyeVNlbGVjdG9yKCJbY2RzLWZpcnN0LWZvY3VzXSIpLGQ9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihoRS5nZXRDdXJyZW50KCk9PT1sKXRocm93IG5ldyBFcnJvcigiRm9jdXMgdHJhcCBpcyBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoaXMgaW5zdGFuY2UuIik7dGhpcy5maXJz'@;
put 'dEZvY3VzRWxlbWVudD1hfHx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsZnVuY3Rpb24gcXdlKGMsbCl7aWYobCYmIWwudG9wUmVib3VuZEVsZW1lbnQmJiFsLmJvdHRvbVJlYm91bmRFbGVtZW50KXtsLnRvcFJlYm91bmRFbGVtZW50PWpRKGMpLGwuYm90dG9tUmVib3VuZEVsZW1lbnQ9alEoYyk7'@;
put 'Y29uc3QgYT1sLnBhcmVudEVsZW1lbnQsZD1sLm5leHRTaWJsaW5nO2EmJihhLmluc2VydEJlZm9yZShsLnRvcFJlYm91bmRFbGVtZW50LGwpLGQ/YS5pbnNlcnRCZWZvcmUobC5ib3R0b21SZWJvdW5kRWxlbWVudCxkKTphLmFwcGVuZENoaWxkKGwuYm90dG9tUmVib3VuZEVsZW1lbnQpKX19'@;
put 'KHRoaXMuX2RvY3VtZW50LGwpLGZ1bmN0aW9uIEY2ZShjKXtzd2l0Y2goYy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaW5wdXQiOnJldHVybiJoaWRkZW4iIT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpJiYhYy5oYXNBdHRyaWJ1dGUo'@;
put 'InJlYWRvbmx5Iik7Y2FzZSJidXR0b24iOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpyZXR1cm4hYy5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIik7Y2FzZSJpZnJhbWUiOmNhc2UiZW1iZWQiOmNhc2Uib2JqZWN0IjpyZXR1cm4hMDtjYXNlImEiOmNhc2UiYXJlYSI6cmV0dXJuIGMuaGFz'@;
put 'QXR0cmlidXRlKCJocmVmIik7Y2FzZSJhdWRpbyI6Y2FzZSJ2aWRlbyI6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJjb250cm9scyIpO2RlZmF1bHQ6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHwidHJ1ZSI9PT1jLmdldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fCJi'@;
put 'dXR0b24iPT09Yy5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfX0obCl8fGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksZCYmZnVuY3Rpb24gVjZlKGMpe3JldHVybiEhYyYmYyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fShkKSYmKHRoaXMu'@;
put 'cHJldmlvdXNGb2N1cz1kKSxoRS5zZXRDdXJyZW50KGwpO2NvbnN0IGg9c2V0VGltZW91dCgoKT0+e3RoaXMuZmlyc3RGb2N1c0VsZW1lbnQuZm9jdXMoKSxjbGVhclRpbWVvdXQoaCl9LDEwKTt0aGlzLm9uRm9jdXNJbkV2ZW50PXRoaXMub25Gb2N1c0luLmJpbmQodGhpcyksdGhpcy51bmxp'@;
put 'c3Rlbj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLl9kb2N1bWVudCwiZm9jdXNpbiIsdGhpcy5vbkZvY3VzSW5FdmVudCksdGhpcy5hY3RpdmU9ITB9cmVtb3ZlRm9jdXNUcmFwKCl7dGhpcy51bmxpc3RlbiYmdGhpcy51bmxpc3RlbigpLGZ1bmN0aW9uIEt3ZShjKXtpZihjKXtjb25zdCBs'@;
put 'PWMucGFyZW50RWxlbWVudDtpZihsKXtjb25zdCBhPWMudG9wUmVib3VuZEVsZW1lbnQsZD1jLmJvdHRvbVJlYm91bmRFbGVtZW50O2EmJmwucmVtb3ZlQ2hpbGQoYSksZCYmbC5yZW1vdmVDaGlsZChkKX1kZWxldGUgYy50b3BSZWJvdW5kRWxlbWVudCxkZWxldGUgYy5ib3R0b21SZWJvdW5k'@;
put 'RWxlbWVudH19KHRoaXMuZm9jdXNUcmFwRWxlbWVudCksdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5mb2N1c1RyYXBFbGVtZW50LCJ0YWJpbmRleCIpLGhFLmFjdGl2YXRlUHJldmlvdXNDdXJyZW50KCksdGhpcy5hY3RpdmU9ITEsdGhpcy5wcmV2aW91c0ZvY3VzJiZ0aGlz'@;
put 'LnByZXZpb3VzRm9jdXMuZm9jdXMoKX1vbkZvY3VzSW4obCl7IWZ1bmN0aW9uIEd3ZShjLGwsYSl7Y29uc3QgZD1oRS5nZXRDdXJyZW50KCk9PT1sLGg9ZnVuY3Rpb24gJHdlKGMsbCl7cmV0dXJuIGM9PT1sLnRvcFJlYm91bmRFbGVtZW50fHxjPT09bC5ib3R0b21SZWJvdW5kRWxlbWVudHx8'@;
put 'IShsLmNvbnRhaW5zKGMpfHxudWxsIT09bCYmbC5jb250YWlucyhjKSl9KGMsbCk7ZCYmaD8oYT1hfHxsKS5mb2N1cygpOmMuZm9jdXMoKX0obC5jb21wb3NlZFBhdGgoKVswXSx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsdGhpcy5maXJzdEZvY3VzRWxlbWVudCl9fWxldCB6UT0oKCk9PntjbGFz'@;
put 'cyBjIGV4dGVuZHMgWHdle2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoZixfLGEsaC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlPWQsdGhpcy5lbGVtZW50UmVmPWgsdGhpcy5faXNPcGVuPSExLFJzKGEpJiYodGhpcy5fZG9jdW1lbnQ9Xy5nZXQoTHMpKSx0'@;
put 'aGlzLl9zdWJzY3JpcHRpb249ZC5uYXZDb250cm9sLnBpcGUoSWEoVD0+VC5uYXZMZXZlbD09PXRoaXMubGV2ZWwpLElhKCh7Y29udHJvbENvZGU6VH0pPT5UPT09WHMuTkFWX09QRU4mJiF0aGlzLmlzT3Blbnx8VD09PVhzLk5BVl9DTE9TRSYmdGhpcy5pc09wZW4pKS5zdWJzY3JpYmUoKHtj'@;
put 'b250cm9sQ29kZTpUfSk9PntUIT09WHMuTkFWX09QRU4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSksdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChkLm5hdkNvbnRyb2wucGlwZShJYSgoe2NvbnRyb2xDb2RlOlR9KT0+VD09PVhzLk5BVl9DTE9TRV9BTEwpKS5zdWJzY3JpYmUoKCk9PnRoaXMu'@;
put 'Y2xvc2UoKSkpfWdldCBsZXZlbCgpe3JldHVybiB0aGlzLl9sZXZlbH1nZXQgcmVzcG9uc2l2ZU5hdkNvZGVzKCl7cmV0dXJuIFhzfWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVufW5nT25Jbml0KCl7dGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbHx8KHRoaXMuY2xvc2VCdXR0b25B'@;
put 'cmlhTGFiZWw9dGhpcy5fbGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMT94Ri5yZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6eEYucmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2UpLHRoaXMubGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMXx8dGhpcy5sZXZlbD09PVhzLk5BVl9MRVZFTF8yPyh0aGlzLnJlc3Bv'@;
put 'bnNpdmVOYXZTZXJ2aWNlLnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuYWRkTmF2Q2xhc3ModGhpcy5sZXZlbCkpOmNvbnNvbGUuZXJyb3IoIk5hdiBMZXZlbCBjYW4gb25seSBiZSAxIG9yIDIiKX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPSgoYyxsKT0+e2NvbnN0IGE9dGhpcy5f'@;
put 'ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2RzLWludGVybmFsLWNsb3NlLWJ1dHRvbiIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgiaWNvbi1zaXplIiwiMzIiKSxhLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsbCksYS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGEuc2V0'@;
put 'QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIiksYS5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsInRydWUiKSxhLmNsYXNzTmFtZT0iY2xyLW5hdi1jbG9zZSIsYX0pKDAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbCk7dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLHRoaXMuY2xvc2UuYmlu'@;
put 'ZCh0aGlzKSksdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKSx0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoPDk5MiYmdGhpcy5jbG9zZSgpfW5nT25E'@;
put 'ZXN0cm95KCl7dGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS51bnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uUmVzaXplKGEpe2EudGFyZ2V0LmlubmVyV2lkdGg8OTkyJiZ0aGlzLmlzT3Blbj90aGlzLmNsb3NlKCk6dGhpcy5zaG93'@;
put 'TmF2aWdhdGlvbigpfW9uTW91c2VDbGljayhhKXtsZXQgZD1hO2NvbnN0IGg9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Zm9yKDtkOyl7aWYoZD09PWgpcmV0dXJuO2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5zKCJuYXYtbGluayIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdp'@;
put 'ZHRoPDk5MilyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7ZD1kLnBhcmVudE5vZGV9fWFkZE5hdkNsYXNzKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2E9PT1Ycy5OQVZfTEVWRUxfMT9kLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMSk6YT09PVhz'@;
put 'Lk5BVl9MRVZFTF8yJiZkLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMil9b3Blbigpe3RoaXMuX2lzT3Blbj0hMCx0aGlzLnNob3dOYXZpZ2F0aW9uKCksdGhpcy5lbmFibGVGb2N1c1RyYXAoKSx0aGlzLnNob3dDbG9zZUJ1dHRvbigpLHRoaXMucmVzcG9uc2l2ZU5hdlNlcnZpY2Uuc2VuZENv'@;
put 'bnRyb2xNZXNzYWdlKFhzLk5BVl9PUEVOLHRoaXMubGV2ZWwpfWNsb3NlKCl7dGhpcy5faXNPcGVuPSExLHRoaXMuaGlkZU5hdmlnYXRpb24oKSx0aGlzLnJlbW92ZUZvY3VzVHJhcCgpLHRoaXMuaGlkZUNsb3NlQnV0dG9uKCksdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5zZW5kQ29udHJv'@;
put 'bE1lc3NhZ2UoWHMuTkFWX0NMT1NFLHRoaXMubGV2ZWwpfWhpZGVOYXZpZ2F0aW9uKCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxl'@;
put 'bWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iLCJ0cnVlIil9c2hvd05hdmlnYXRpb24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRl'@;
put 'KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iKX1oaWRlQ2xvc2VCdXR0b24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUo'@;
put 'dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmNsci1uYXYtY2xvc2UiKSwiaGlkZGVuIiwidHJ1ZSIpfXNob3dDbG9zZUJ1dHRvbigpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0'@;
put 'b3IoIi5jbHItbmF2LWNsb3NlIiksImFyaWEtaGlkZGVuIiwiZmFsc2UiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuY2xyLW5hdi1jbG9zZSIpLCJoaWRkZW4iKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoR3MpLHR0KEJFKSx0dChOaSksdHQoRm8pLHR0KEVhKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsci1uYXYtbGV2ZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgicmVz'@;
put 'aXplIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblJlc2l6ZShmKX0sMCxtNikoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1vdXNlQ2xpY2soZi50YXJnZXQpfSl9LGlucHV0czp7X2xldmVsOlsiY2xyLW5hdi1sZXZlbCIsIl9sZXZlbCJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOlsi'@;
put 'Y2xvc2VBcmlhTGFiZWwiLCJjbG9zZUJ1dHRvbkFyaWFMYWJlbCJdfSxmZWF0dXJlczpbZW9dfSksY30pKCksUXdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp'@;
put 'bmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksVVE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6'@;
put 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHphLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLEplKDAscmJlLDEsMCwibmct'@;
put 'dGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGVDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9'@;
put 'KSgpLElwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJd'@;
put 'XSxmZWF0dXJlczpbZW9dfSksY30pKCksY2c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRhYi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRh'@;
put 'YnMiKTtzdXBlcihhLGQpLHRoaXMuaWZBY3RpdmU9Zix0aGlzLmlkPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoSXAsOCksdHQoeDgp'@;
put 'LHR0KCQ1KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7dmFyIHVnPWZ1bmN0aW9uKGMpe3JldHVybiBjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuVkVS'@;
put 'VElDQUw9InZlcnRpY2FsIixjfSh1Z3x8e30pO2xldCBWYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9dWcuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVy'@;
put 'biB0aGlzLmNoaWxkcmVuLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBvdmVyZmxvd1RhYnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT11Zy5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJl'@;
put 'bi5wdXNoKGEpfXVucmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLmNoaWxkcmVuLmluZGV4T2YoYSk7ZD4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZCwxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxm'@;
put 'YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdENlPTAsTHA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10'@;
put 'YWItY29udGVudC0iK3RDZSsrKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJDb250ZW50PT09dGhpcyk/LnRh'@;
put 'Ykxpbms/LnRhYkxpbmtJZH1zZXQgdGVtcGxhdGVSZWYoYSl7dGhpcy52aWV3UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3'@;
put 'Q29udGFpbmVyLmluZGV4T2YodGhpcy52aWV3UmVmKTthPi0xJiZ0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1'@;
put 'MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhpYmUsNyksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOlsi'@;
put 'aWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKEFpKCksSmUoMCxvYmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG5DZT0wO2NvbnN0IENIPW5ldyBTaSgiVEFCU19JRCIpLGlDZT17cHJvdmlkZTpDSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHJDZSgpe3JldHVybiJj'@;
put 'bHItdGFicy0iK25DZSsrfX07bGV0IG9DZT0wLFJwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMuY2ZyPWYsdGhpcy52aWV3Q29udGFpbmVyUmVmPV8sdGhpcy50YWJzU2Vydmlj'@;
put 'ZT1ULHRoaXMudGFic0lkPVcsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrb0NlKyspO2NvbnN0IGllPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFVRKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXRoaXMudmlld0NvbnRhaW5lclJl'@;
put 'Zi5jcmVhdGVDb21wb25lbnQoaWUsdm9pZCAwLHZvaWQgMCxbW3RoaXMuZWwubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PXVnLlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93'@;
put 'KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250'@;
put 'ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChOaSksdHQoSzApLHR0KGFzKSx0dChWYiksdHQoQ0gpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFi'@;
put 'IiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJih0MSgiaWQiLGQudGFiTGlua0lkKSxUcigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJv'@;
put 'bHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxkcigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOlsi'@;
put 'aWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OlsiY2xyVGFiTGlua0luT3ZlcmZsb3ciLCJpbk92ZXJmbG93Il19fSksY30pKCksT3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLGgu'@;
put 'cmVnaXN0ZXIodGhpcyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1uZ09uRGVzdHJveSgpe3RoaXMudGFic1NlcnZpY2UudW5yZWdpc3Rlcih0aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLFJwLDcpLElvKGgsTHAsNykpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQu'@;
put 'dGFiTGluaz1mLmZpcnN0KSxhaShmPWxpKCkpJiYoZC50YWJDb250ZW50PWYuZmlyc3QpfX0sZmVhdHVyZXM6W3RpKFtseWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGN9KSgpLFNIPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEs'@;
put 'dGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyh1ZykubWFwKGQ9PnVnW2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2Vy'@;
put 'dmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVU'@;
put 'YWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdl'@;
put 'dCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09dWcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9'@;
put 'Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0'@;
put 'ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBd'@;
put 'LmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlv'@;
put 'biYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlv'@;
put 'bi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25G'@;
put 'b2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFi'@;
put 'UG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxk'@;
put 'KXthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWxpc3RlbkZvclRhYkxp'@;
put 'bmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoY3AodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXM9dGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspLHRoaXMudGFiTGlua0VsZW1lbnRzPXRo'@;
put 'aXMuX3RhYkxpbmtEaXJlY3RpdmVzLm1hcChhPT5hLmVsLm5hdGl2ZUVsZW1lbnQpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dChLcyksdHQoVmIpLHR0KENIKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLE9wLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKEk4LDcpLFJvKFNILDUsTmkpLFJvKHNi'@;
put 'ZSw3LGFzKSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLGFpKGg9bGkoKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6'@;
put 'ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbImNsckxheW91dCIsImxheW91dCJdfSxmZWF0dXJlczpbdGkoWyQ1LEtzLFZiLGlDZV0pXSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sicm9sZSIsInRhYmxpc3QiLCJj'@;
put 'bHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNscktleUZvY3VzIiwiY2xyRm9jdXNDaGFuZ2UiLCJmb2N1c291dCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5h'@;
put 'di1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs'@;
put 'ImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJkcm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIiwic3RhdHVzIiwidG9nZ2xlU2VydmljZS5vcGVuID8g'@;
put 'J2luZm8nIDogbnVsbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm'@;
put 'JihtZSgwLCJ1bCIsMCkseHQoImNsckZvY3VzQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVPdmVyZmxvd09uUG9zaXRpb24oZil9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUoZil9KSxKZSgxLGxiZSwyLDEs'@;
put 'Im5nLWNvbnRhaW5lciIsMSksSmUoMixoYmUsNywxMCwibmctY29udGFpbmVyIiwyKSx5ZSgpLGphKDMsbnVsbCwzKSksMiZhJiYoUmUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQudGFiTGlua0RpcmVjdGl2ZXMpLENlKDEpLFJlKCJuZ0lm'@;
put 'IixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W0k4LFNILHhzLFppLHJkLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxzQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKERLKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNkLHNhLGVDZSxCRl0sc2RdfSksY30pKCksTUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJl'@;
put 'Z2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjfSksY30pKCkseEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IGJlLHRoaXMu'@;
put 'X2NvbGxhcHNlZENoYW5nZWQ9bmV3IGJlLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJsZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVy'@;
put 'biB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2'@;
put 'aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNp'@;
put 'YmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5leHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxaUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2Vydmlj'@;
put 'ZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IEVyKCEwKSx0aGlzLl9zdWI9dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWRDaGFuZ2VkLnN1YnNjcmliZShfPT57dGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5lbWl0KF8pfSl9Z2V0IGNvbGxhcHNpYmxl'@;
put 'KCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGU9YX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7dGhpcy5fbmF2'@;
put 'U2VydmljZS5jb2xsYXBzZWQ9YX1nZXQgaGFzTmF2R3JvdXBzKCl7cmV0dXJuIHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2VydmljZS5uYXZHcm91cENvdW50PjB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX25hdkljb25TZXJ2aWNlLmhhc0ljb25zfWdldCBhcmlhRXhwYW5kZWQo'@;
put 'KXtyZXR1cm4gdGhpcy5jb2xsYXBzaWJsZT90aGlzLmNvbGxhcHNlZD8iZmFsc2UiOiJ0cnVlIjpudWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQnlCdXR0b24oKXt0aGlzLmNvbGxhcHNlZD0hdGhpcy5jb2xsYXBzZWR9fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVIKSx0dCh4SCksdHQoTUgpLHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci12ZXJ0aWNhbC1uYXYiXV0saG9zdEF0dHJzOlsxLCJjbHItdmVydGljYWwtbmF2Il0saG9zdFZhcnM6Nixob3N0'@;
put 'QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJpcy1jb2xsYXBzZWQiLGQuY29sbGFwc2VkKSgiaGFzLW5hdi1ncm91cHMiLGQuaGFzTmF2R3JvdXBzKSgiaGFzLWljb25zIixkLmhhc0ljb25zKX0saW5wdXRzOntjb2xsYXBzaWJsZTpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2libGUi'@;
put 'LCJjb2xsYXBzaWJsZSJdLGNvbGxhcHNlZDpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbRUgseEgsTUhdKV0sbmdDb250ZW50U2Vs'@;
put 'ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIsMywib24tY29sbGFwc2UiLCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCJdLFsiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwi'@;
put 'dGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2VyLWljb24iXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDEs'@;
put 'Im5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxKZSgwLGZiZSwyLDYsImJ1dHRvbiIsMCksbWUoMSwiZGl2IiwxKSxrcigyKSxKZSgzLHBiZSwxLDEsImJ1dHRvbiIsMikseWUoKSksMiZhJiYoUmUoIm5nSWYiLGQuY29sbGFwc2libGUpLENl'@;
put 'KDMpLFJlKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W1ppLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBiZX1nZXQgZXhwYW5kQ2hhbmdlKCl7'@;
put 'cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1'@;
put 'MDI3NWZhY30pLGN9KSgpLFlRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IGJlLGgmJm4yKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKGFoKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNo'@;
put 'ZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoVWEpLHR0KGtILDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGlj'@;
put 'YWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczp2YmUsbmdDb250ZW50U2VsZWN0b3JzOmJiZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKF9iZSksa3IoMCksbWUoMSwic3Bh'@;
put 'biIsMCksa3IoMiwxKSx5ZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdUNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCxMSyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlw'@;
put 'ZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxzZCxxNV0sc2Qsc2EscTVdfSksY30pKCksZENlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp'@;
put 'bmo9bWkoe2ltcG9ydHM6W1V3ZSxRd2Usc0NlLHVDZV19KSxjfSkoKSxXUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvY3VtZW50PWF9c3RvcFNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgibm8tc2Nyb2xsaW5nIil9cmVzdW1lU2Ny'@;
put 'b2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoIm5vLXNjcm9sbGluZyIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoIm5vLXNjcm9sbGluZyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG91PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5tb2RhbElkPUljKCksdGhp'@;
put 'cy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0iZmFsc2UiLHRo'@;
put 'aXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBFcighMSksdGhpcy5sYWJlbGxlZEJ5PXRoaXMubW9kYWxJZH1uZ09uQ2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093'@;
put 'blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlP3RoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2Vydmlj'@;
put 'ZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCkpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9v'@;
put 'cGVuPSExLHRoaXMuZm9jdXNUcmFwLnNldFByZXZpb3VzRm9jdXMoKSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiZ0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoV1EpLHR0KEVzKSl9'@;
put 'LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKE1wLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuZm9jdXNUcmFwPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJnh0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0sMCxFdiksMiZhJiZkcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46WyJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOlsiY2xyTW9kYWxDbG9zYWJsZSIsImNs'@;
put 'b3NhYmxlIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6WyJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOlsiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOlsiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsInN0YXRpY0Jh'@;
put 'Y2tkcm9wIl0sc2tpcEFuaW1hdGlvbjpbImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxieXBhc3NTY3JvbGxTZXJ2aWNlOlsiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl0sc3RvcENsb3NlOlsiY2xyTW9kYWxQcmV2'@;
put 'ZW50Q2xvc2UiLCJzdG9wQ2xvc2UiXSxsYWJlbGxlZEJ5OlsiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOlt0aShb'@;
put 'XSxbV1FdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOlNiZSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xyRm9jdXNUcmFwIiwiIiwiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFsiY2xyRm9jdXNUcmFwIiwiIiwxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0'@;
put 'cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjbHJGb2N1c09uVmlld0luaXQiLCIiLDEsIm1vZGFsLXRpdGxlLXdyYXBw'@;
put 'ZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xv'@;
put 'c2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKENiZSksSmUoMCx3YmUsMTcsMTQsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLGQuX29wZW4pfSxkZXBlbmRlbmNpZXM6W1ppLE1wLFBGLHFzXSxzdHlsZXM6WyJb'@;
put 'X25naG9zdC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZmFkZURvd24iLFtmYygiKiA9PiBmYWxzZSIsW19zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSks'@;
put 'cnUoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGZjKCJmYWxzZSA9PiAqIixbcnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSldKSxhMSgiZmFkZSIsW2ZjKCJ2b2lkID0+ICoiLFtfcyh7b3BhY2l0eTowfSkscnUoIjAu'@;
put 'MnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5Oi44NX0pKV0pLGZjKCIqID0+IHZvaWQiLFtydSgiMC4ycyBlYXNlLWluLW91dCIsX3Moe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLHN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhv'@;
put 'c3Q9ZCx0aGlzLnRhYmluZGV4PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3Qu'@;
put 'bmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVs'@;
put 'ZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9'@;
put 'YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRh'@;
put 'YmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KE5vKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGN9KSgpLEdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhu'@;
put 'Yil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5RSxxNV0sc2EscTVdfSksY30pKCk7Y29uc3QgaENlPXsidG9wLWxlZnQiOnthbmNob3JQb2lu'@;
put 'dDpHci5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9w'@;
put 'LXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6R3IuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6R3IuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5MRUZUX0JPVFRPTSxvZmZzZXRZOjIs'@;
put 'b2Zmc2V0WDoxNH0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuTEVGVF9DRU5URVIsb2Zmc2V0WTo2LG9mZnNldFg6MTR9LCJyaWdodC1ib3R0b20iOnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50Okdy'@;
put 'LkxFRlRfVE9QLG9mZnNldFk6LTEsb2Zmc2V0WDoxNH0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9MRUZULG9mZnNldFk6OSxvZmZzZXRYOi0xfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9D'@;
put 'RU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9DRU5URVIsb2Zmc2V0WTo5LG9mZnNldFg6MTJ9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9SSUdIVCxvZmZzZXRZOjksb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNo'@;
put 'b3JQb2ludDpHci5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNH0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6R3IuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLlJJR0hUX0NFTlRFUixvZmZzZXRZOjQsb2Zmc2V0WDotMTR9'@;
put 'LCJsZWZ0LXRvcCI6e2FuY2hvclBvaW50OkdyLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE0fSxkZWZhdWx0OnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkxFRlRfQ0VOVEVSLG9mZnNldFk6'@;
put 'NixvZmZzZXRYOjE0fX0sZkNlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1pZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1p'@;
put 'ZGRsZSIsImxlZnQtdG9wIl07bGV0ICRRPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9Zix0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPV8s'@;
put 'dGhpcy5wbGF0Zm9ybUlkPVQsdGhpcy5zaWducG9zdENvbnRlbnRJZD1JYygpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRo'@;
put 'aXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLnNldElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9V31nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVt'@;
put 'b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMuX3Bvc2l0aW9uPWEmJmZDZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3Qg'@;
put 'ZD1oQ2VbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9z'@;
put 'ZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSxScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3Vz'@;
put 'TWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KEw4LDgpLHR0KEVzKSx0dChvSCksdHQoaUgpLHR0KEdzKSx0dChMcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt'@;
put 'c2lnbnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKHQxKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksZHIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7cG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19'@;
put 'LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpZ25wb3N0LXdyYXAiXSxbMSwicG9wb3Zlci1wb2ludGVyIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJzaWducG9zdC1hY3Rp'@;
put 'b24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJkaXYiLDEpLG1lKDIsImRpdiIsMikoMywiYnV0dG9uIiwz'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0pLHF0KDQsImNkcy1pY29uIiw0KSx5ZSgpKCksbWUoNSwiZGl2Iiw1KSxrcig2KSx5ZSgpKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJp'@;
put 'YS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxwQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25z'@;
put 'KG5iLFJLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHE1XSxzZF19KSxjfSkoKSxBSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWN9KSxjfSkoKSxUSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dl'@;
put 'cigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQo'@;
put 'KX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko'@;
put 'YXIoS3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOlt0aShbS3Mse3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LEFILFRIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6'@;
put 'MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBtQ2U9WyJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0sdkNlPVsieHMiLCJzbSIsIm1k'@;
put 'IiwibGciXTtsZXQgemI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGJIe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKHN1cGVyKGEsZCksdGhpcy50b29sdGlwSWRTZXJ2aWNlPWgsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWYsIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50'@;
put 'IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPUljKCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXtjb25zdCBkPWF8fCIiO3RoaXMuX2lkPWQsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGQpfWdldCBwb3NpdGlv'@;
put 'bigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLl9wb3NpdGlvbixoPW1DZS5pbmNsdWRlcyhhKT9hOiJyaWdodCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3'@;
put 'Q2xhc3M6YHRvb2x0aXAtJHtofWB9KSxoKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuVE9QX0NFTlRFUix0aGlzLnBv'@;
put 'cG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUdyLkJPVFRP'@;
put 'TV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1Hci5MRUZUX0NF'@;
put 'TlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gZ0NlKGMpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHZhbHVlOiAke2N9YCl9KGgpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhp'@;
put 'cy5fc2l6ZSxoPXZDZS5pbmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRp'@;
put 'b249dGhpcy5wb3NpdGlvbnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Mo'@;
put 'e29sZENsYXNzOmEsbmV3Q2xhc3M6ZH0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKSh0dChFYSksdHQoTDgsOCksdHQoQUgpLHR0KFRIKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNvbnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJtb3VzZWVudGVyIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJih0MSgiaWQiLGQuaWQpLFRyKCJyb2xlIiwidG9vbHRpcCIpLEh1KCJvcGFjaXR5IiwxKSxkcigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxp'@;
put 'bnB1dHM6e2lkOiJpZCIscG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigw'@;
put 'KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcElkU2VydmljZT1kLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaCh0'@;
put 'aGlzLnRvb2x0aXBJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRp'@;
put 'cCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KEFIKSx0dChUSCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhv'@;
put 'c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVy'@;
put 'KCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKFRyKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxkcigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfX0pLGN9KSgpLF9DZT0oKCk9Pntj'@;
put 'bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dLHNkLHNhXX0pLGN9KSgpLGJDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOlt5SCxwQ2UsX0NlXX0pLGN9KSgpLHlDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpLENDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoeW1lLHdtZSxPSyxDbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsQWJdLHNhLEFiXX0pLGN9KSgpLGtDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoT0spfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sR1EsTlFdXX0pLGN9KSgpLF91PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3'@;
put 'NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3p3ZSxSd2Usc2EsR1EsTEYsc2QseUUscTUscHllLGJ5ZSxkUSxkQ2UsYkNlLGtDZSwkSixueWUsQWIseUNlLHhiLENDZV19KSxjfSkoKTtmdW5jdGlvbiBBQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMCksTmUo'@;
put 'MSwibG9hZGluZyIpLHllKCkpfWZ1bmN0aW9uIFRDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDExKSxOZSgxLCJsb2FkZWQiKSx5ZSgpKX1mdW5jdGlvbiBEQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMiksTmUoMSwiZmFpbGVkIikseWUoKSl9ZnVuY3Rpb24gSUNlKGMsbCl7aWYoMSZj'@;
put 'JiYobWUoMCwicCIpKDEsImNvZGUiKSxOZSgyKSx5ZSgpLE5lKDMsIiBceGEwICIpLEplKDQsQUNlLDIsMCwic3BhbiIsNyksSmUoNSxUQ2UsMiwwLCJzcGFuIiw4KSxKZSg2LERDZSwyLDAsInNwYW4iLDkpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLnByb2dy'@;
put 'YW0pLENlKDIpLFJlKCJuZ0lmIixhLnJ1bm5pbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiYhYS5zdWNjZXNzZnVsKX19ZnVuY3Rpb24gTENlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXNpZ25wb3N0LWNv'@;
put 'bnRlbnQiLDUpLEplKDEsSUNlLDcsNCwicCIsNikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7UmUoImNsclBvc2l0aW9uIiwiYm90dG9tLW1pZGRsZSIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IFJDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2Fk'@;
put 'aW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgZWV9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNt'@;
put 'cD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0b3IiXV0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGluZy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJzcGlubmVyLWludmVyc2Ui'@;
put 'XSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiLDEsImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNsclBvc2l0aW9uIiw0LCJjbHJJZk9wZW4i'@;
put 'XSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInJ1bm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3VjY2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxbMSwic3VjY2VzcyJdLFsxLCJmYWlsIl1d'@;
put 'LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJjbHItc2lnbnBvc3QiKSxxdCgyLCJzcGFuIiwxKSgzLCJjbHItaWNvbiIsMikoNCwiY2xyLWljb24iLDMpLEplKDUsTENlLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDQpLHllKCkoKSksMiZhJiYoQ2Uo'@;
put 'MiksSHUoImRpc3BsYXkiLGQubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9uZSIpLENlKDEpLEh1KCJkaXNwbGF5IiwhZC5sb2FkaW5nJiZkLnJlcXVlc3RzLmxlbmd0aD4wJiZkLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxDZSgxKSxIdSgiZGlzcGxh'@;
put 'eSIsIWQubG9hZGluZyYmZC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWQucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxrYSxjMixzSCwkUSxSRV0sc3R5bGVzOlsiLmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICAuc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dmVydGljYWwtYWxpZ246bWlkZGxlfS5sb2Fk'@;
put 'aW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2ln'@;
put 'bnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBv'@;
put 'c3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25n'@;
put 'Y29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0l'@;
put 'Q09NUCVde21hcmdpbi1sZWZ0OjEwcHh9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5ydW5uaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv'@;
put 'cjojZTliZjA0fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYwYjUxNX0ubG9h'@;
put 'ZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmZhaWxbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjOTIxMDB9Il19KSxjfSkoKSxPQ2U9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgZWUsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFzczpudWxsfX1uZ09uSW5p'@;
put 'dCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoZD0+e3RoaXMuaXNBY3RpdmU9ZDtsZXQgaD1kb2N1bWVudC5xdWVy'@;
put 'eVNlbGVjdG9yKCJib2R5Iik7aCYmKGQ/aC5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpoLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgpe3RoaXMubG9hZGluZ3x8'@;
put 'KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLGF8fCh0aGlzLmVycm9yTXNnPSJVc2VybmFtZSBvciBwYXNzd29y'@;
put 'ZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9YSx0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KSh0dChvYSksdHQodzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLGRlY2xzOjIwLHZhcnM6OSxjb25zdHM6W1sxLCJsb2dpbi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIsInNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NB'@;
put 'U0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIsImFsdCIsIiIsMSwibG9naW4tbG9nbyJdLFsxLCJsb2dpbiIsMywibmdTdWJtaXQiXSxbMSwidGl0bGUiXSxbMSwid2VsY29tZSJdLFsxLCJoaW50Il0sWzEs'@;
put 'ImxvZ2luLWdyb3VwIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJ1c2VyIiwidHlwZSIsInRleHQiLCJwbGFjZWhvbGRlciIsIlVzZXJuYW1lIiwxLCJ1c2VybmFtZSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNscklucHV0IiwiIiwibmFtZSIsInBhc3MiLCJ0eXBlIiwicGFz'@;
put 'c3dvcmQiLCJwbGFjZWhvbGRlciIsIlBhc3N3b3JkIiwxLCJwYXNzd29yZCIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSJdLFsiY2xyLWFsZXJ0LWl0ZW0iLCIiLDEsImFsZXJ0LWl0'@;
put 'ZW0iXSxbMSwiYWxlcnQtdGV4dCJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEp'@;
put 'LHF0KDIsImltZyIsMiksbWUoMywiZm9ybSIsMykseHQoIm5nU3VibWl0IixmdW5jdGlvbigpe3JldHVybiBkLnN1Ym1pdCgpfSksbWUoNCwibGFiZWwiLDQpKDUsImgzIiw1KSxOZSg2LCJXZWxjb21lIHRvIikseWUoKSxOZSg3LCIgRGF0YSBDb250cm9sbGVyICIpLG1lKDgsImg1Iiw2KSxO'@;
put 'ZSg5LCJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIikseWUoKSgpLG1lKDEwLCJkaXYiLDcpKDExLCJpbnB1dCIsOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRhdGEudXNlcj1mfSkseWUoKSxtZSgxMiwiaW5wdXQiLDkpLHh0KCJuZ01vZGVsQ2hhbmdl'@;
put 'IixmdW5jdGlvbihmKXtyZXR1cm4gZC5kYXRhLnBhc3M9Zn0pLHllKCksbWUoMTMsImNsci1hbGVydCIsMTApLHh0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYWxlcnRDbG9zZWQ9Zn0pLG1lKDE0LCJkaXYiLDExKSgxNSwic3BhbiIsMTIpLE5lKDE2KSx5'@;
put 'ZSgpKCkoKSxtZSgxNywiYnV0dG9uIiwxMyksTmUoMTgsIiBMb2cgaW4gIikseWUoKSgpKCkoKSxxdCgxOSwiZGl2IiwxNCkseWUoKSksMiZhJiYoZHIoImFjdGl2ZSIsZC5pc0FjdGl2ZSksQ2UoMTEpLFJlKCJuZ01vZGVsIixkLmRhdGEudXNlciksQ2UoMSksUmUoIm5nTW9kZWwiLGQuZGF0'@;
put 'YS5wYXNzKSxDZSgxKSxSZSgiY2xyQWxlcnRUeXBlIiwiYWxlcnQtZGFuZ2VyIikoImNsckFsZXJ0Q2xvc2VkIixkLmFsZXJ0Q2xvc2VkKSxDZSgzKSxvcihkLmVycm9yTXNnKSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsZC5sb2FkaW5nKSgiZGlzYWJsZWQiLGQubG9hZGluZykpfSxkZXBlbmRl'@;
put 'bmNpZXM6W0NwLFdhLEJzLHdwLE9zLHIyLEhiLE5iLFp1LGRoLFVzLGYxXSxzdHlsZXM6WyIuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNlMGUwZTB9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBo'@;
put 'Mltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlMGUwZTB9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVd'@;
put 'e2JvcmRlci1jb2xvcjp3aGVhdCFpbXBvcnRhbnR9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7'@;
put 'cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMDAwMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+ICpbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOmF1dG99LmxvZ2luLXNpZGViYXItd3Jh'@;
put 'cHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzo0'@;
put 'MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTQwMHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0l'@;
put 'Q09NUCVde3otaW5kZXg6MTAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9n'@;
put 'aW5bX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MzJweDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MzZweH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53ZWxjb21lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjM2cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjQ4cHggMCAwfS5sb2dpbi1zaWRl'@;
put 'YmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tZ3JvdXBbX25nY29udGVudC0lQ09NUCVdID4gKltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjZw'@;
put 'eCAwIDE4cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7ei1pbmRleDoxMDF9LmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmVbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xl'@;
put 'ZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6cmdiYSgzMywzMywzMywuNSk7ei1pbmRleDoxMDB9ICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyLCAgIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdy'@;
put 'b3VwIC51c2VybmFtZSwgICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAucGFzc3dvcmR7d2lkdGg6MTAwJX0gIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX0gIC5sb2dpbi1zaWRlYmFyLXdy'@;
put 'YXBwZXIgLmxvZ2luLWdyb3VwIGJ1dHRvbnttYXgtd2lkdGg6bm9uZX0ubG9naW4tbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjIwMHB4fSJdfSksY30pKCk7ZnVuY3Rpb24gUENlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLHF0KDEsImltZyIsMTkpLHllKCkpLDImYyl7'@;
put 'Y29uc3QgYT1WZSgpO0NlKDEpLEVjKCJzcmMiLGEuZ2V0UGljdHVyZVVybCgpLHJ2KX19ZnVuY3Rpb24gRkNlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMjApLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJoaWRkZW4iLDA9PT1hLmZhaWxlZFJlcXMubGVuZ3RoKSxDZSgx'@;
put 'KSxvcihhLmZhaWxlZFJlcXMubGVuZ3RoKX19ZnVuY3Rpb24gSENlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMjEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJoaWRkZW4iLDA9PT1hLmRlYnVnTG9ncy5sZW5ndGgpLENlKDEpLG9yKGEuZGVidWdMb2dzLmxlbmd0aCl9'@;
put 'fWZ1bmN0aW9uIE5DZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDIyKX1mdW5jdGlvbiBWQ2UoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJhIiwzMykoMiwic3BhbiIsMzQpLE5lKDMsIkRvY3VtZW50YXRpb24iKSx5ZSgpKCksenIoKSl9ZnVuY3Rpb24gQkNlKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSgxLCJkaXYiLDI0LDI1KSgzLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMjYpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj0kaSgyKTtyZXR1cm4ganQoVmUoKS5vbkRlYnVnUm93Q2xpY2soaCxmKSl9KSxt'@;
put 'ZSg0LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg1LCJpbnB1dCIsMjcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5zYXNqc0NvbmZpZy5kZWJ1Zz1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9u'@;
put 'RGVidWdNb2RlQ2hhbmdlKCkpfSkseWUoKSxtZSg2LCJsYWJlbCIpLE5lKDcsIkRlYnVnIE1vZGUiKSx5ZSgpKCkoKSgpLG1lKDgsImEiLDI4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxtZSg5LCJzcGFuIiksTmUo'@;
put 'MTAsIlNBUyBSZXF1ZXN0cyIpLHllKCkoKSxKZSgxMSxWQ2UsNCwwLCJuZy1jb250YWluZXIiLDIpLHF0KDEyLCJkaXYiLDE1KSxtZSgxMywiYSIsMjkpKDE0LCJzcGFuIiksTmUoMTUsIlN5c3RlbSIpLHllKCkoKSxtZSgxNiwiYSIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJu'@;
put 'IEJ0KGEpLGp0KFZlKCkubG9nb3V0KGgpKX0pLG1lKDE3LCJzcGFuIiksTmUoMTgsIkxvZyBPdXQiKSx5ZSgpLHF0KDE5LCJjbHItaWNvbiIsMzEpLHllKCksbWUoMjAsImRpdiIsMzIpKDIxLCJzcGFuIiksTmUoMjIpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDUpLFJlKCJu'@;
put 'Z01vZGVsIixhLnNhc2pzQ29uZmlnLmRlYnVnKSxDZSg2KSxSZSgibmdJZiIsIWEuaXNEZXBsb3lQYWdlKSxDZSgxMSksZ3IoInYiLGEuY29tbWl0VmVyLCIiKX19Y29uc3QgakNlPWZ1bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtsZXQgekNlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy51c2VyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgZWUsdGhpcy51c2VyU3ViPW5ldyBlZSx0aGlzLmFwcExv'@;
put 'Z3M9W10sdGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRSZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIifW5nT25Jbml0KCl7dGhp'@;
put 'cy51c2VyU3ViPXRoaXMudXNlclNlcnZpY2UudXNlckNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudXNlck5hbWU9YS51c2VybmFtZX0pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU'@;
put 'eXBlJiYodGhpcy5pc1ZpeWE9ITApLHRoaXMuY29tbWl0VmVyPSJ2Ni42LjQiLnJlcGxhY2UoInYiLCIiKSsiLmc3YjViYmUwIn1uZ09uRGVzdHJveSgpe3RoaXMucmVxU3ViLnVuc3Vic2NyaWJlKCksdGhpcy51c2VyU3ViLnVuc3Vic2NyaWJlKCl9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlz'@;
put 'LmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW9uRGVidWdNb2RlQ2hhbmdlKGEpe3RoaXMuc2FzanNDb25maWcmJnRoaXMuc2FzU2VydmljZS5zZXREZWJ1Z1N0YXRlKHRoaXMuc2FzanNDb25maWcuZGVidWcpfW9uRGVidWdSb3dDbGljayhhLGQpe2Euc3RvcFByb3BhZ2F0aW9u'@;
put 'KCksc2V0VGltZW91dCgoKT0+e2QuY2xpY2soKX0sMzAwKX1sb2dvdXQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RyeXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9Y2F0Y2goZCl7Y29uc29sZS5lcnJvcihkKX19Z2V0UGljdHVyZVVybCgpe3JldHVybmAke3RoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVXJsfS9pZGVudGl0aWVzL3VzZXJzLyR7dGhpcy51c2VyTmFtZX0vYXZhdGFyL2NvbnRlbnRgfWdldCBpc0RlcGxveVBhZ2UoKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'YykodHQoYVApLHR0KG9hKSx0dCh2bCksdHQoRHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXItbmF2LWRyb3Bkb3duIl1dLGRlY2xzOjMyLHZhcnM6MTAsY29uc3RzOltbMSwiYXBwLW5hdi1kcm9wZG93biIsImQtbWQtYmxvY2siXSxbImNsckRyb3Bk'@;
put 'b3duVG9nZ2xlIiwiIiwxLCJuYXYtdGV4dCIsImNvbG9yLXdoaXRlIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtZGFuZ2VyIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtaW5mbyIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImNh'@;
put 'cmV0IGRvd24iLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbMSwiY29udGVudC1jb250YWluZXIiLCJoLWF1dG8iXSxbMSwic2lkZW5hdiIsImQtYmxvY2siLCJkLW1kLW5vbmUiLDMsImNsci1uYXYtbGV2ZWwiXSxbMSwic2lkZW5hdi1j'@;
put 'b250ZW50Il0sWyJocmVmIiwiLi4uIiwxLCJuYXYtbGluayIsImFjdGl2ZSJdLFsxLCJ0b2dnbGUtc3dpdGNoIl0sWyJpZCIsImRlYnVnLXRvZ2dsZTIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbImZvciIsImRlYnVn'@;
put 'LXRvZ2dsZTIiLDEsImRlYnVnLXRvZ2dsZS1sYWJlbCIsImNvbG9yLWRhcmstZ3JheSJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pbyIsMSwibmF2LWxpbmsiLCJkLWJsb2NrIl0sWzEsInNlcGFyYXRvciJdLFsicm91dGVyTGluayIs'@;
put 'Ii9zeXN0ZW0iLDEsIm5hdi1saW5rIiwiZC1ibG9jayJdLFsic2hhcGUiLCJsb2dvdXQiXSxbImhyZWYiLCIuLi4iLDEsIm5hdi1saW5rIiwiZC1ibG9jayIsMywiY2xpY2siXSxbImFsdCIsIiIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEs'@;
put 'ImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsiZHJvcGRvd25JdGVtRGVidWciLCIiXSxbMSwidG9nZ2xlLXN3aXRjaCIs'@;
put 'MywiY2xpY2siXSxbImlkIiwiZGVidWctdG9nZ2xlMSIsInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5rIiwiL3N5c3RlbSIs'@;
put 'ImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29u'@;
put 'dHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLWRyb3Bkb3duIiwwKSgxLCJidXR0b24iLDEpKDIsInNwYW4iKSxOZSgzKSx5ZSgpLEplKDQsUENlLDIsMSwic3BhbiIsMiks'@;
put 'SmUoNSxGQ2UsMiwzLCJzcGFuIiwzKSxKZSg2LEhDZSwyLDMsInNwYW4iLDQpLEplKDcsTkNlLDEsMCwiY2xyLWljb24iLDUpLHllKCksSmUoOCxCQ2UsMjMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDYpLHllKCksbWUoOSwiZGl2Iiw3KSgxMCwibmF2Iiw4KSgxMSwic2VjdGlvbiIsOSkoMTIs'@;
put 'ImEiLDEwKSxOZSgxMykseWUoKSxtZSgxNCwiZGl2IikoMTUsImZvcm0iKSgxNiwiZGl2IiwxMSkoMTcsImlucHV0IiwxMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNhc2pzQ29uZmlnLmRlYnVnPWZ9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gZC5vbkRlYnVnTW9kZUNoYW5nZSgpfSkseWUoKSxtZSgxOCwibGFiZWwiLDEzKSxOZSgxOSwiRGVidWcgTW9kZSIpLHllKCkoKSgpKCksbWUoMjAsImEiLDE0KSgyMSwic3BhbiIpLE5lKDIyLCJEb2N1bWVudGF0aW9uIikseWUoKSgpLHF0KDIzLCJkaXYiLDE1KSxtZSgyNCwiYSIsMTYp'@;
put 'KDI1LCJzcGFuIiksTmUoMjYsIlN5c3RlbSIpLHllKCkscXQoMjcsImNsci1pY29uIiwxNykseWUoKSxtZSgyOCwiYSIsMTgpLHh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQubG9nb3V0KGYpfSksbWUoMjksInNwYW4iKSxOZSgzMCwiTG9nIE91dCIpLHllKCkscXQoMzEsImNsci1p'@;
put 'Y29uIiwxNykseWUoKSgpKCkoKSksMiZhJiYoQ2UoMyksb3IoZC51c2VyTmFtZSksQ2UoMSksUmUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWQudXNlck5hbWUmJmQuaXNWaXlhKSxDZSgxKSxSZSgibmdJZiIsIWQuc2FzanNDb25maWcuZGVidWcpLENlKDEpLFJlKCJuZ0lmIixkLnNhc2pz'@;
put 'Q29uZmlnLmRlYnVnKSxDZSgxKSxSZSgibmdJZiIsIWQuaXNWaXlhKSxDZSgzKSxSZSgiY2xyLW5hdi1sZXZlbCIsMiksQ2UoMyksZ3IoIiAiLGQudXNlck5hbWUsIiAiKSxDZSg0KSxSZSgibmdNb2RlbCIsZC5zYXNqc0NvbmZpZy5kZWJ1ZykoIm5nTW9kZWxPcHRpb25zIiwkcyg5LGpDZSkp'@;
put 'KX0sZGVwZW5kZW5jaWVzOltaaSxDcCxTMCxCcyx3cCxPcyxyMixCdSxrYSxjMixVcyxEMCxEOCxUMCx6USxOZixhZyxsZyxLOF0sc3R5bGVzOlsnLmNvcHlSaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5jb3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVdICAgc3Bh'@;
put 'bltfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXJpZ2h0OjE1cHg7'@;
put 'bGluZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24uZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSA+IGJ1dHRvbi5kcm9wZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEw'@;
put 'cHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYmFkZ2UuaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OmhpZGRlbn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZXBhcmF0'@;
put 'b3JbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250'@;
put 'ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVu'@;
put 'dVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmRyb3Bkb3duLXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM1NjU2NTZ9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1l'@;
put 'bnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTVweDtyaWdodDoyNnB4O21hcmdpbi1yaWdodDowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3du'@;
put 'LW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYXBwLW5hdi1kcm9w'@;
put 'ZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWxvZ291dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MjBweDt0b3A6'@;
put 'MTVweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAw'@;
put 'JX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hlaWdodDox'@;
put 'MDAlO3BhZGRpbmc6MTBweCAyMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaW5wdXR7aW5zZXQ6MDt3aWR0aDoxMDAlO2hl'@;
put 'aWdodDoxMDAlO2N1cnNvcjpwb2ludGVyfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10b2dnbGUtd3JhcHBlciBpbnB1'@;
put 'dFt0eXBlPWNoZWNrYm94XStsYWJlbDphZnRlcnt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5kZWJ1Zy10b2dnbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctbGVmdDo0MnB4fUBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCl7LnNpZGVuYXYtY29udGVudFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBhLm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojNTY1NjU2fX0ubmF2LWxpbmsuZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtw'@;
put 'b3NpdGlvbjphYnNvbHV0ZX0uYXZhdGFyLWltZ1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tbGVmdDoxMHB4O2JvcmRlci1yYWRpdXM6NTBweH0nXX0pLGN9KSgpO2Z1bmN0aW9uIFVDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNs'@;
put 'ci1hbGVydCIsMikseHQoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LmNsb3NlZD1oKX0pKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25BbGVydENsb3NlKCkpfSksbWUo'@;
put 'MSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxOZSgzKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQpLENlKDMpLGdyKCIgIixhLm1lc3NhZ2Us'@;
put 'IiAiKX19ZnVuY3Rpb24gWkNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWFsZXJ0cyIpLEplKDEsVUNlLDQsNCwiY2xyLWFsZXJ0IiwxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQgWUNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBlZX1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1YnNjcmliZShhPT57dGhpcy5hbGVydHMu'@;
put 'cHVzaChhKSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVyciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKHR0KGxQKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENs'@;
put 'b3NlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCIsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmSmUoMCxaQ2UsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmEmJlJlKCJuZ0lmIixkLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbeHMsWmksSGIsSFEsTmJdLHN0eWxlczpbImNsci1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxq'@;
put 'RT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPSIifW5nT25Jbml0KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY29udGFjdC1saW5rIl1dLGlucHV0'@;
put 'czp7Y2xhc3NlczoiY2xhc3NlcyJ9LGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJocmVmIiwibWFpbHRvOnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8/c3ViamVjdD1MaWNlbmNlIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYSIsMCksTmUoMSwi'@;
put 'c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHllKCkpLDImYSYmKGRyKCJ1bnNldCIsIiIhPT1kLmNsYXNzZXMpLFJlKCJuZ0NsYXNzIixkLmNsYXNzZXMpKX0sZGVwZW5kZW5jaWVzOltkY10sc3R5bGVzOlsiLnVuc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp1bnNldH0iXX0pLGN9'@;
put 'KSgpLFliPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZpbGVPdmVyPSExLHRoaXMuZmlsZURyb3BwZWQ9bmV3IEVyLHRoaXMuZmlsZURyYWdnZWRPdmVyPW5ldyBFcn1vbkRyYWdPdmVyKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29u'@;
put 'dGFpbnNGaWxlcyhhKSYmIXRoaXMuZmlsZU92ZXImJih0aGlzLmZpbGVPdmVyPSEwLHRoaXMuZmlsZURyYWdnZWRPdmVyLmVtaXQoKSl9b25EcmFnTGVhdmUoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMX1vbmRyb3AoYSl7YS5wcmV2'@;
put 'ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyLmZpbGVzO2QubGVuZ3RoPjAmJnRoaXMuZmlsZURyb3BwZWQuZW1pdChkKX1jb250YWluc0ZpbGVzKGEpe2lmKGEmJmEuZGF0YVRyYW5zZmVyJiZhLmRhdGFUcmFu'@;
put 'c2Zlci50eXBlcylmb3IobGV0IGQ9MDtkPGEuZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aDtkKyspaWYoIkZpbGVzIj09YS5kYXRhVHJhbnNmZXIudHlwZXNbZF0pcmV0dXJuITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1D'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBEcmFnTmRyb3AiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJkcmFnb3ZlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EcmFnT3ZlcihmKX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLm9uRHJhZ0xlYXZlKGYpfSkoImRyb3AiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uZHJvcChmKX0pLDImYSYmZHIoImZpbGVvdmVyIixkLmZpbGVPdmVyKX0sb3V0cHV0czp7ZmlsZURyb3BwZWQ6ImZpbGVEcm9wcGVkIixmaWxlRHJhZ2dlZE92ZXI6ImZpbGVEcmFnZ2VkT3ZlciJ9'@;
put 'fSksY30pKCk7ZnVuY3Rpb24gV0NlKGMsbCl7MSZjJiYobWUoMCwicCIsNiksTmUoMSwiTm8gcmVxdWVzdHMgbWFkZSIpLHllKCkpfWZ1bmN0aW9uIEdDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxxdCgxLCJjbHItaWNvbiIsMTMpLHllKCkpfWZ1bmN0aW9uICRDZShjLGwpezEmYyYmKG1l'@;
put 'KDAsInNwYW4iKSxxdCgxLCJjbHItaWNvbiIsMTQpLHllKCkpfWZ1bmN0aW9uIHFDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1WZSgzKS5pbmRleDtyZXR1'@;
put 'cm4ganQoVmUoMikuZ29Ub0xvZ0xpbmUoZiwicmVxdWVzdF8iK18sImVycm9yIikpfSksbWUoMSwiYnV0dG9uIiwyMiksTmUoMikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxncigiICIsYSwiICIpfX1jb25zdCB1ZWU9ZnVuY3Rpb24oKXtyZXR1cm5bXX07ZnVu'@;
put 'Y3Rpb24gS0NlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLHF0KDEsImNsci1pY29uIiwxOSksTmUoMiksSmUoMyxxQ2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxncigiIEVycm9ycyAoIixh'@;
put 'LmxvZ0Vycm9ycy5sZW5ndGgsIikgIiksQ2UoMSksUmUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHwkcygyLHVlZSkpfX1mdW5jdGlvbiBYQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQo'@;
put 'YSkuJGltcGxpY2l0LF89VmUoMykuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLmdvVG9Mb2dMaW5lKGYsInJlcXVlc3RfIitfLCJ3YXJuaW5nIikpfSksbWUoMSwiYnV0dG9uIiwyMiksTmUoMikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxncigiICIsYSwiICIpfX1m'@;
put 'dW5jdGlvbiBKQ2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiwxOCkscXQoMSwiY2xyLWljb24iLDIzKSxOZSgyKSxKZSgzLFhDZSwzLDEsImNsci10cmVlLW5vZGUiLDIwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0O0NlKDIpLGdyKCIgV2FybmluZ3Mg'@;
put 'KCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksQ2UoMSksUmUoIm5nRm9yT2YiLGEubG9nV2FybmluZ3N8fCRzKDIsdWVlKSl9fWZ1bmN0aW9uIFFDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93bmxvYWRMb2coaC5sb2dGaWxlKSl9KSxOZSgxLCIgRG93bmxvYWQgIikseWUoKX19ZnVuY3Rpb24gZVNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiY2xyLXRyZWUiKSxKZSgyLEtDZSw0LDMs'@;
put 'ImNsci10cmVlLW5vZGUiLDE1KSxKZSgzLEpDZSw0LDMsImNsci10cmVlLW5vZGUiLDE1KSx5ZSgpLHF0KDQsImRpdiIsMTYpLEplKDUsUUNlLDIsMCwiYnV0dG9uIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ0lmIixhLmxvZ0Vycm9ycyksQ2Uo'@;
put 'MSksUmUoIm5nSWYiLGEubG9nV2FybmluZ3MpLENlKDEpLFJlKCJpbm5lckhUTUwiLGEubG9nRmlsZSxxMiksQ2UoMSksUmUoIm5nSWYiLChudWxsPT1hLmxvZ0ZpbGU/bnVsbDphLmxvZ0ZpbGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gdFNlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo'@;
put 'MCwiYnV0dG9uIiwyNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5kb3dubG9hZFNvdXJjZUNvZGUoaC5zb3VyY2VDb2RlKSl9KSxOZSgxLCIgRG93bmxvYWQgIikseWUoKX19ZnVuY3Rpb24gblNlKGMsbCl7aWYo'@;
put 'MSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyNSksTmUoMikseWUoKSxKZSgzLHRTZSwyLDAsImJ1dHRvbiIsMTcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLnNvdXJjZUNvZGUpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5zb3Vy'@;
put 'Y2VDb2RlP251bGw6YS5zb3VyY2VDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHJTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93'@;
put 'bmxvYWRHZW5lcmF0ZWRDb2RlKGguZ2VuZXJhdGVkQ29kZSkpfSksTmUoMSwiIERvd25sb2FkICIpLHllKCl9fWZ1bmN0aW9uIGlTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLE5lKDIpLHllKCksSmUoMyxyU2UsMiwwLCJidXR0b24iLDE3KSx5'@;
put 'ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMiksZ3IoIiAiLGEuZ2VuZXJhdGVkQ29kZSwiICIpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIG9TZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9Zi5rZXkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZHIo'@;
put 'InNlbGVjdGVkIixWZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxDZSgxKSxncigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gc1NlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxKZSgxLG9TZSwyLDMsImRpdiIsMzApLGJhKDIsImtleXZhbHVl'@;
put 'IikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdGb3JPZiIsWmwoMiwxLGEuU0FTV09SSykpfX1mdW5jdGlvbiBhU2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwzNSkoMSwic3Ryb25nIiksTmUoMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMykuJGlt'@;
put 'cGxpY2l0O0NlKDIpLGdyKCIiLGEuc2VsZWN0ZWRUYWJsZSwiIChmaXJzdCAxMCByb3dzKSAiKX19ZnVuY3Rpb24gbFNlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9u'@;
put 'IGNTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGRbYS5rZXldLCIgIil9fWZ1bmN0aW9uIHVTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiksSmUoMSxjU2UsMiwxLCJ0'@;
put 'ZCIsMzcpLGJhKDIsImtleXZhbHVlIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdGb3JPZiIsWmwoMiwxLGEuU0FTV09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSl9fWZ1bmN0aW9uIGRTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRh'@;
put 'YmxlIiwzNikoMSwidGhlYWQiKSgyLCJ0ciIpLEplKDMsbFNlLDIsMSwidGgiLDM3KSxiYSg0LCJrZXl2YWx1ZSIpLHllKCkoKSxtZSg1LCJ0Ym9keSIpLEplKDYsdVNlLDMsMywidHIiLDM3KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKS4kaW1wbGljaXQ7Q2UoMyksUmUoIm5nRm9yT2Yi'@;
put 'LFpsKDQsMixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpLENlKDMpLFJlKCJuZ0Zvck9mIixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93cyl9fWZ1bmN0aW9uIGhTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpLEpl'@;
put 'KDEsYVNlLDMsMSwicCIsMzIpLG1lKDIsImRpdiIsMzMpLEplKDMsZFNlLDcsNCwidGFibGUiLDM0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksQ2UoMiksUmUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSl9fWZ1'@;
put 'bmN0aW9uIGZTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI2KSgyLCJidXR0b24iLDI3KSxOZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLHF0KDQsImNsci1pY29uIiwyOCkseWUoKSxKZSg1LHNTZSwzLDMsImNsci1kcm9wZG93'@;
put 'bi1tZW51IiwyOSkseWUoKSxKZSg2LGhTZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMykudGFibGVzQWN0aXZlPWgpfSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoImNsckNs'@;
put 'b3NlTWVudU9uSXRlbUNsaWNrIiwhMCksQ2UoNSksUmUoImNscklmQWN0aXZlIixhLnRhYmxlc0FjdGl2ZSl9fWZ1bmN0aW9uIHBTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1zdGFjay1ibG9jayIsOCkoMSwiY2xyLXN0YWNrLWxhYmVsIiksTmUoMiksbWUoMywic3Bh'@;
put 'biIsOSksSmUoNCxHQ2UsMiwwLCJzcGFuIiw1KSxKZSg1LCRDZSwyLDAsInNwYW4iLDUpLHllKCkoKSxtZSg2LCJjbHItc3RhY2stY29udGVudCIpLE5lKDcpLHllKCksbWUoOCwiY2xyLXN0YWNrLWJsb2NrIiwxMCkoOSwiY2xyLXN0YWNrLWNvbnRlbnQiKSgxMCwiY2xyLXRhYnMiKSgxMSwi'@;
put 'Y2xyLXRhYiIpKDEyLCJidXR0b24iLDExKSxOZSgxMywiU0FTIExvZyIpLHllKCksSmUoMTQsZVNlLDYsNCwibmctdGVtcGxhdGUiLDEyKSx4dCgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5zYXNMb2dBY3RpdmU9aCl9KSx5ZSgpLG1lKDE1'@;
put 'LCJjbHItdGFiIikoMTYsImJ1dHRvbiIsMTEpLE5lKDE3LCJTQVMgU291cmNlIENvZGUiKSx5ZSgpLEplKDE4LG5TZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc2FzU291cmNlQ29kZUFjdGl2'@;
put 'ZT1oKX0pLHllKCksbWUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMSksTmUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLHllKCksSmUoMjIsaVNlLDQsMiwibmctdGVtcGxhdGUiLDEyKSx4dCgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgy'@;
put 'KS5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPWgpfSkseWUoKSxKZSgyMyxmU2UsNywyLCJjbHItdGFiIiw1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1WZSgyKTtSZSgiaWQiLCJyZXF1ZXN0XyIrZCkoImNsclN0YWNrVmlld0xldmVsIiwxKSgi'@;
put 'Y2xyU3RhY2tWaWV3U2V0c2l6ZSIsMykoImNsclN0YWNrVmlld1Bvc2luc2V0IiwzKSxDZSgyKSxncigiICIsYS5zZXJ2aWNlTGluaywiICIpLENlKDIpLFJlKCJuZ0lmIiwobnVsbD09YS5sb2dXYXJuaW5ncz9udWxsOmEubG9nV2FybmluZ3MubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIs'@;
put 'KG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxDZSgyKSxvcihhLnBhcnNlZFRpbWVzdGFtcCksQ2UoNyksUmUoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksQ2UoNCksUmUoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLENlKDQp'@;
put 'LFJlKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxDZSgxKSxSZSgibmdJZiIsYS5TQVNXT1JLKX19ZnVuY3Rpb24gZ1NlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXN0YWNrLXZpZXciKSxKZSgxLHBTZSwyNCwxMiwiY2xyLXN0YWNrLWJsb2NrIiw3KSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5zYXNqc1JlcXVlc3RzKX19bGV0IG1TZT0oKCk9PntjbGFzcyBje2dldCBvcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfXNldCBvcGVuZWQoYSl7dGhpcy5fb3BlbmVkPWEsYSYmdGhpcy5tb2RhbE9wZW5lZCgpLHRoaXMu'@;
put 'bG9nZ2VyU2VydmljZS5sb2codGhpcy5zYXNqc1JlcXVlc3RzKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBFcix0aGlzLnNh'@;
put 'c0xvZ0FjdGl2ZT0hMCx0aGlzLnNhc1NvdXJjZUNvZGVBY3RpdmU9ITEsdGhpcy5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPSExLHRoaXMudGFibGVzQWN0aXZlPSExLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zYXNqc1JlcXVlc3RzPVtd'@;
put 'fW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4gYS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0'@;
put 'VGltZXN0YW1wKGEpe3JldHVybiBLbyhhKS5mb3JtYXQoKT9LbyhhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBLbyhhKS5mb3JtYXQoKT9gICgke0tvKGEpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFu'@;
put 'Z2UoYSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VF'@;
put 'cnJvcnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGEsZCxoKXtsZXQgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9y'@;
put 'QWxsKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKSxfPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtmb3IobGV0IFQgb2YgZilULnRleHRDb250ZW50LmluY2x1ZGVzKGEpJiYoXy5zY3JvbGxUb3A9VC5vZmZzZXRUb3AtXy5vZmZz'@;
put 'ZXRUb3AsVC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiM2MWEyMjAyYiIsc2V0VGltZW91dCgoKT0+e1Quc3R5bGU9IiJ9LDNlMykpfXBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoIWF8fCFhLmxvZ0ZpbGV8fCJzdHJpbmciIT10'@;
put 'eXBlb2YgYS5sb2dGaWxlfHx2b2lkIDAhPT1hLmxvZ0Vycm9yc3x8dm9pZCAwIT09YS5sb2dXYXJuaW5ncylyZXR1cm47bGV0IGg9W10sZj1bXSxfPWEubG9nRmlsZS5zcGxpdCgiXG4iKTtmb3IobGV0IFQ9MDtUPF8ubGVuZ3RoO1QrKyl7aWYoLzwuKj5FUlJPUi9nbS50ZXN0KF9bVF0pKXts'@;
put 'ZXQgVz1fW1RdLnN1YnN0cmluZyhfW1RdLmluZGV4T2YoIkUiKSxfW1RdLmxlbmd0aC0xKTtoLnB1c2goVyl9ZWxzZS9eRVJST1IvZ20udGVzdChfW1RdKSYmKGgucHVzaChfW1RdKSxfW1RdPSI8Zm9udD4iK19bVF0rIjwvZm9udD4iKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdChfW1RdKSl7'@;
put 'bGV0IFc9X1tUXS5zdWJzdHJpbmcoX1tUXS5pbmRleE9mKCJXIiksX1tUXS5sZW5ndGgtMSk7Zi5wdXNoKFcpfWVsc2UvXldBUk5JTkcvZ20udGVzdChfW1RdKSYmKGYucHVzaChfW1RdKSxfW1RdPSI8Zm9udD4iK19bVF0rIjwvZm9udD4iKX1kLmxvZ2dlclNlcnZpY2UubG9nKGYpLGEubG9n'@;
put 'RmlsZT1fLmpvaW4oIlxuIiksYS5sb2dFcnJvcnM9aCxhLmxvZ1dhcm5pbmdzPWZ9KSgpfWRvd25sb2FkTG9nKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYGxvZ0ZpbGUtJHtkfWAsYSl9ZG93bmxvYWRTb3VyY2VD'@;
put 'b2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYHNvdXJjZUNvZGUtJHtkfWAsYSl9ZG93bmxvYWRHZW5lcmF0ZWRDb2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNl'@;
put 'LmRvd25sb2FkVGV4dEZpbGUoYGdlbmVyYXRlZENvZGUtJHtkfWAsYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dCh3MCksdHQoVGMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJlcXVlc3RzLW1v'@;
put 'ZGFsIl1dLGlucHV0czp7b3BlbmVkOiJvcGVuZWQifSxvdXRwdXRzOntvcGVuZWRDaGFuZ2U6Im9wZW5lZENoYW5nZSJ9LGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbHJNb2RhbFNpemUiLCJ4bCIsMSwicmVxdWVzdHMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNo'@;
put 'YW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtdC0wIiwiZC1pbmxpbmUtYmxvY2siXSxbMSwibW9kYWwtYm9keSIsImgtNzB2aCJdLFsiY2xhc3MiLCJuby1yZXFzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibm8tcmVxcyJdLFszLCJpZCIsImNsclN0YWNrVmlld0xldmVsIiwiY2xy'@;
put 'U3RhY2tWaWV3U2V0c2l6ZSIsImNsclN0YWNrVmlld1Bvc2luc2V0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsImNsclN0YWNrVmlld1NldHNpemUiLCJjbHJTdGFja1ZpZXdQb3NpbnNldCJdLFsxLCJtbC0xMCJdLFsxLCJjb250ZW50Il0sWyJj'@;
put 'bHJUYWJMaW5rIiwiIl0sWzMsImNscklmQWN0aXZlIiwiY2xySWZBY3RpdmVDaGFuZ2UiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJtYi01IiwiY29sb3ItZ3JlZW4iXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1yZWQiXSxbImNs'@;
put 'YXNzIiwiZXJyLWxpbmtzIiw0LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9u'@;
put 'LXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4i'@;
put 'LCJidG4tbGluayIsMywiY2xpY2siXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsclRhYkxpbmsiLCIiLDEsIndvcmstdGFibGVzLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwi'@;
put 'Y2xySWZPcGVuIl0sWyJjbGFzcyIsImRyb3Bkb3duLWl0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9wZG93bi1pdGVtIiwzLCJjbGljayJdLFsiY2xhc3MiLCJtdC0x'@;
put 'MCIsNCwibmdJZiJdLFsxLCJtaW4taC01MHZoIl0sWyJjbGFzcyIsInRhYmxlIG10LTEwIiw0LCJuZ0lmIl0sWzEsIm10LTEwIl0sWzEsInRhYmxlIiwibXQtMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiww'@;
put 'KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5tb2RhbE9wZW5DaGFuZ2UoZil9KSxtZSgxLCJoMyIsMSksTmUoMiwiIFJlcXVlc3QgSGlzdG9yeSAiKSxtZSgzLCJwIiwyKSxOZSg0KSx5ZSgpKCksbWUoNSwiZGl2IiwzKSxKZSg2LFdDZSwyLDAsInAiLDQp'@;
put 'LEplKDcsZ1NlLDIsMSwiY2xyLXN0YWNrLXZpZXciLDUpLHllKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5vcGVuZWQpLENlKDQpLGdyKCJBcHAgTG9jYXRpb246ICIsZC5zYXNqc0NvbmZpZy5hcHBMb2MsIiIpLENlKDIpLFJlKCJuZ0lmIiwobnVsbD09ZC5zYXNqc1JlcXVlc3Rz'@;
put 'P251bGw6ZC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk8MSksQ2UoMSksUmUoIm5nSWYiLGQub3BlbmVkJiYobnVsbD09ZC5zYXNqc1JlcXVlc3RzP251bGw6ZC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLHE4LHhRLG1ILE1RLGRkLGcxLERwLGthLG91LHN1'@;
put 'LEU4LGMyLExwLE9wLGRnLFJwLElwLGNnLE5mLGFnLGxnLEs4LGR4XSxzdHlsZXM6WyIucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9ICAucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGluZzoyMHB4'@;
put 'IDEwcHggNXB4fSAgLndvcmstdGFibGVzLWRyb3Bkb3duIGJ1dHRvbntjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstY29sb3IsICM4YzhjOGMpIWltcG9ydGFudH0gIC5zdGFjay12aWV3e2hlaWdodDphdXRvIWltcG9ydGFudDttYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50Oy13ZWJraXQtbWFz'@;
put 'ay1pbWFnZTpub25lIWltcG9ydGFudH0gIC5jb250ZW50IGNsci1pY29ue21hcmdpbi1ib3R0b206NXB4fSAgLmNvbnRlbnQgcHJle3dvcmQtYnJlYWs6YnJlYWstYWxsO3doaXRlLXNwYWNlOnByZS13cmFwO21heC1oZWlnaHQ6aW5pdGlhbDtvdmVyZmxvdzp2aXNpYmxlO2JvcmRlcjowfSAg'@;
put 'LmNvbnRlbnQgLnN0YWNrLWJsb2NrLWxhYmVse3dpZHRoOjEwMCU7cGFkZGluZy1sZWZ0Oi42cmVtIWltcG9ydGFudH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0gIC5lcnItbGlua3MgLmNsci10cmVlbm9kZS1j'@;
put 'aGlsZHJlbnttYXgtaGVpZ2h0OjU1cHg7b3ZlcmZsb3c6YXV0b30uZHJvcGRvd24taXRlbS5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZDhlM2U5fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJn'@;
put 'aW4tdG9wOjEwcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtoZWlnaHQ6NDh2aDtvdmVyZmxvdzphdXRvfS5uby1yZXFzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9w'@;
put 'OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMDE5NjA3ODQzKTtwYWRkaW5nLXRvcDo1cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Il19KSxjfSkoKTtjbGFzcyB2U2V7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVsbCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyBkZWV9fWNs'@;
put 'YXNzIGRlZXt9ZnVuY3Rpb24gX1NlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsOCksTmUoMSwiIFNBUyBTZXJ2aWNlOiAiKSxtZSgyLCJzdHJvbmciKSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEuZGF0YS5zYXNTZXJ2aWNlKX19ZnVuY3Rpb24gYlNlKGMsbCl7'@;
put 'aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJwIikoMiwic3Ryb25nIiksTmUoMywiU1lTV0FSTklOR1RFWFQ6IikseWUoKSxOZSg0KSx5ZSgpLG1lKDUsInAiKSg2LCJzdHJvbmciKSxOZSg3LCJTWVNFUlJPUlRFWFQ6IikseWUoKSxOZSg4KSx5ZSgpLG1lKDksInAiKSgxMCwic3Ryb25nIiks'@;
put 'TmUoMTEsIk1BQzoiKSx5ZSgpLE5lKDEyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLGdyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNXQVJOSU5HVEVYVCwiIiksQ2UoNCksZ3IoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU0VSUk9SVEVYVCwiIiksQ2UoNCksZ3IoIiAiLGEuZGF0YS5k'@;
put 'ZXRhaWxzLk1BQywiIil9fWZ1bmN0aW9uIHlTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vcGVuQ29uZmlndXJhdG9yKCkpfSksTmUoMSwiIE9wZW4gY29uZmlndXJhdG9yICIp'@;
put 'LHllKCl9fWZ1bmN0aW9uIHdTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLE5lKDEsIiBPcGVuIHJlcXVlc3RzIG1vZGFsICIpLHllKCl9'@;
put 'fWZ1bmN0aW9uIENTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5kb3dubG9hZExvZygpKX0pLE5lKDEsIiBEb3dubG9hZCBsb2cgIikseWUoKX19ZnVuY3Rpb24gU1NlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmNsb3NlQWJvcnRNb2RhbCgpKX0pLE5lKDEsIiBDbG9zZSAiKSx5ZSgpfX1mdW5jdGlvbiBNU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt'@;
put 'ZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucmVsb2FkKCkpfSksTmUoMSwiIFJlbG9hZCAiKSx5ZSgpfX1sZXQgeFNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5l'@;
put 'dmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMub25Db25maXJtTW9kYWxDbGljaz1uZXcgRXIsdGhpcy5kYXRhPW5ldyB2U2UsdGhpcy5mb3JjZVJlbG9hZD0hMSx0aGlzLm1vZGFsRW5hYmxlZD0hMCx0aGlzLmRlZmF1bHREYXRhPXttb2RhbFRpdGxl'@;
put 'OiJBYm9ydCBNZXNzYWdlIixzYXNTZXJ2aWNlOm51bGwsbWVzc2FnZToiIixkZXRhaWxzOm5ldyBkZWV9fW5nT25Jbml0KCl7bGV0IGE9ey4uLnRoaXMuZGVmYXVsdERhdGEsLi4udGhpcy5kYXRhfTt0aGlzLmRhdGE9YX1zaG93Q29uZmlndXJhdG9yQnV0dG9uKGEpe2NvbnN0IGQ9dGhpcy5z'@;
put 'YXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGE/LmluY2x1ZGVzKCJzdGFydHVwc2VydmljZSIpJiZkLnNlcnZlclR5cGU9PT1aYy5ELlNhczl9Y2xvc2VBYm9ydE1vZGFsKCl7dGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrLmVtaXQoKX1vcGVuQ29uZmlndXJhdG9yKCl7dGhpcy5l'@;
put 'dmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksdGhpcy5jbG9zZUFib3J0TW9kYWwoKX1kb3dubG9hZExvZygpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGAke3RoaXMuZGF0YS5zYXNTZXJ2aWNl'@;
put 'fS1MT0dgLHRoaXMuZGF0YS5kZXRhaWxzPy5MT0d8fCJFcnJvciBwYXJzaW5nIHRoZSBsb2ciKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9cmVsb2FkKCl7bG9jYXRpb24ucmVsb2FkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFRjKSx0dCh2bCksdHQob2EpLHR0KERzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1pbmZvLW1vZGFsIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsZm9yY2VSZWxvYWQ6ImZvcmNlUmVsb2FkIn0sb3V0cHV0czp7'@;
put 'b25Db25maXJtTW9kYWxDbGljazoib25Db25maXJtTW9kYWxDbGljayJ9LGRlY2xzOjEzLHZhcnM6MTIsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9k'@;
put 'YWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsInNhc1NlcnZpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBl'@;
put 'IiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiXSxbMSwic3lzdGV4dCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYobWUoMCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5tb2RhbEVuYWJsZWQ9Zn0pLG1lKDEsImgzIiwxKSxOZSgyKSxKZSgzLF9TZSw0LDEsInAiLDIpLHllKCksbWUoNCwiZGl2IiwzKSxxdCg1LCJkaXYiLDQpLEplKDYsYlNl'@;
put 'LDEzLDMsImRpdiIsNSkseWUoKSxtZSg3LCJkaXYiLDYpLEplKDgseVNlLDIsMCwiYnV0dG9uIiw3KSxKZSg5LHdTZSwyLDAsImJ1dHRvbiIsNyksSmUoMTAsQ1NlLDIsMCwiYnV0dG9uIiw3KSxKZSgxMSxTU2UsMiwwLCJidXR0b24iLDcpLEplKDEyLE1TZSwyLDAsImJ1dHRvbiIsNykseWUo'@;
put 'KSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLm1vZGFsRW5hYmxlZCkoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFkLmZvcmNlUmVsb2FkKSxDZSgyKSxncigiICIsZC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxDZSgxKSxSZSgibmdJZiIsZC5kYXRhLnNhc1Nl'@;
put 'cnZpY2UmJmQuZGF0YS5zYXNTZXJ2aWNlLmxlbmd0aD4wKSxDZSgyKSxSZSgiaW5uZXJIVE1MIixkLmRhdGEubWVzc2FnZSxxMiksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1kLmRhdGEuZGV0YWlscyksQ2UoMiksUmUoIm5nSWYiLGQuc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihkLmRhdGEuc2Fz'@;
put 'U2VydmljZSkpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09ZC5kYXRhLmRldGFpbHMpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09ZC5kYXRhLmRldGFpbHM/bnVsbDpkLmRhdGEuZGV0YWlscy5MT0cpJiYobnVsbD09ZC5kYXRhLmRldGFpbHN8fG51bGw9PWQuZGF0YS5kZXRhaWxzLkxPRz9udWxs'@;
put 'OmQuZGF0YS5kZXRhaWxzLkxPRy50cmltKCkubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIsIWQuZm9yY2VSZWxvYWQpLENlKDEpLFJlKCJuZ0lmIixkLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbWmksb3Usc3UsWWJdLHN0eWxlczpbIi5jbHItYWJvcnQtbW9kYWxbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgICAubW9kYWwtdGl0bGUtd3JhcHBlcnt3aWR0aDoxMDAlfS5jbHItYWJvcnQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWx7ei1pbmRleDoyMDUwfS5tb2RhbC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LnNhc1NlcnZp'@;
put 'Y2VbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7d29yZC13cmFwOmJyZWFrLXdv'@;
put 'cmR9Il19KSxjfSkoKTtmdW5jdGlvbiBFU2UoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIHRvIHVw'@;
put 'Z3JhZGUgY29udGFjdCAiKSxxdCg3LCJjb250YWN0LWxpbmsiLDI1KSx5ZSgpKCkoKSxtZSg4LCJhIiwyNiksTmUoOSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSx6cigpKX1mdW5jdGlvbiBrU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDIwKSgyLCJk'@;
put 'aXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIFByb2JsZW0gd2l0aCBsaWNlbmNlICIpLHllKCkoKSgpLG1lKDcsImEiLDI3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQoaC5saWNlbmNlUHJvYmxlbURldGFpbHMoaC5saWNlbmNlUHJvYmxlbS52YWx1ZSkpfSksTmUoOCwiTW9yZSBkZXRhaWxzIikseWUoKSx6cigpfX1mdW5jdGlvbiBBU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE5KSxKZSgxLEVTZSwx'@;
put 'MCwwLCJuZy1jb250YWluZXIiLDEpLEplKDIsa1NlLDksMCwibmctY29udGFpbmVyIiwxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGljZW5jZVByb2JsZW0u'@;
put 'dmFsdWUpfX1mdW5jdGlvbiBUU2UoYyxsKXsxJmMmJihtZSgwLCJhIiwyNiksTmUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSl9ZnVuY3Rpb24gRFNlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyOCkoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xy'@;
put 'LWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYpLHF0KDcsImNvbnRhY3QtbGluayIsMjUpLE5lKDgpLHllKCkoKSgpLEplKDksVFNlLDIsMCwiYSIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg2KSx6YygiIFRoaXMgbGljZW5zZSBrZXkgd2lsbCBleHBpcmUgaW4g'@;
put 'IixhLmxpY2Vuc2VFeHBpcmluZ0RheXMsIiAiLDE9PT1hLmxpY2Vuc2VFeHBpcmluZ0RheXM/ImRheSI6ImRheXMiLCIuIFBsZWFzZSBjb250YWN0ICIpLENlKDIpLGdyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lz'@;
put 'c2l0ZS5nZXRWYWx1ZSgpLCIuICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIElTZShjLGwpezEmYyYmKG1lKDAsImEiLDI2KSxOZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSx5ZSgpKX1mdW5jdGlvbiBMU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYi'@;
put 'LDI4KSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyBleGNlZWRzIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5zZS4g'@;
put 'UGxlYXNlIGNvbnRhY3QgIikscXQoNywiY29udGFjdC1saW5rIiwyNSksTmUoOCkseWUoKSgpKCksSmUoOSxJU2UsMiwwLCJhIiwyOSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDgpLGdyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Ig'@;
put 'c2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIFJTZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsQVNlLDMsMiwiZGl2IiwxNyksSmUoMixEU2UsMTAs'@;
put 'NCwiZGl2IiwxOCksSmUoMyxMU2UsMTAsMiwiZGl2IiwxOCksenIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuZnJlZVRpZXJCYW5uZXImJighYS5saWNlbnNlRXhwaXJpbmdEYXlzfHxhLmxpY2Vuc2VFeHBpcmluZ0RheXM8MCkpLENlKDEpLFJlKCJuZ0lmIixhLmxp'@;
put 'Y2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKSxDZSgxKSxSZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiBPU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkudG9nZ2xlU2lkZWJhcigpKX0pLHF0KDEsImNsci1pY29uIiwzMSkseWUoKX19Y29uc3QgUFNlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvIl19O2Z1bmN0aW9uIEZTZShjLGwpezEmYyYmKG1lKDAsImEiLDMyKSxxdCgxLCJpbWciLDMzKSgyLCJpbWciLDM0KSx5ZSgpKSwyJmMmJlJlKCJy'@;
put 'b3V0ZXJMaW5rIiwkcygxLFBTZSkpfWZ1bmN0aW9uIEhTZShjLGwpezEmYyYmKG1lKDAsImEiKSxxdCgxLCJzcGFuIiwzNSkseWUoKSl9Y29uc3QgaGVlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldyJdfSxmZWU9ZnVuY3Rpb24oKXtyZXR1cm5bIi9ob21lIl19LElIPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuWyIvcmV2aWV3L3N1Ym1pdHRlZCJdfTtmdW5jdGlvbiBOU2UoYyxsKXsxJmMmJihtZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDMpKDEsImEiLDQ0KSxOZSgyLCJWSUVXIikseWUoKSxtZSgzLCJhIiw0NCksTmUoNCwiTE9BRCIpLHllKCksbWUoNSwiYSIsNDQpLE5lKDYsIlJFVklFVyIp'@;
put 'LHllKCkoKSksMiZjJiYoQ2UoMSksUmUoInJvdXRlckxpbmsiLCRzKDMsaGVlKSksQ2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDQsZmVlKSksQ2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDUsSUgpKSl9ZnVuY3Rpb24gVlNlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiZGl2IiwzNikoMiwi'@;
put 'Y2xyLWRyb3Bkb3duIikoMywiYnV0dG9uIiwzNyksTmUoNCwiIE1lbnUgIikseWUoKSxKZSg1LE5TZSw3LDYsImNsci1kcm9wZG93bi1tZW51IiwzOCkseWUoKSgpLG1lKDYsImRpdiIsMzkpKDcsImEiLDQwKSxOZSg4LCJWSUVXIikseWUoKSxtZSg5LCJhIiw0MSksTmUoMTAsIkxPQUQiKSx5'@;
put 'ZSgpLG1lKDExLCJhIiw0MiksTmUoMTIsIlJFVklFVyIpLHllKCkoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg3KSxSZSgicm91dGVyTGluayIsJHMoNyxoZWUpKSxDZSgyKSxkcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImVkaXRvciIpfHxhLnJvdXRlci51cmwuaW5j'@;
put 'bHVkZXMoImVkaXQtcmVjb3JkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaG9tZSIpKSxSZSgicm91dGVyTGluayIsJHMoOCxmZWUpKSxDZSgyKSxkcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoInN1Ym1pdHRlZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUi'@;
put 'KXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJoaXN0b3J5IikpLFJlKCJyb3V0ZXJMaW5rIiwkcyg5LElIKSl9fWNvbnN0IEJTZT1mdW5jdGlvbigpe3JldHVyblsiL3Jldmlldy9hcHByb3ZlIl19LGpTZT1mdW5jdGlvbigpe3JldHVyblsiL3Jldmlldy9oaXN0b3J5Il19O2Z1bmN0aW9uIHpT'@;
put 'ZShjLGwpe2lmKDEmYyYmKG1lKDAsIm5hdiIsNDUpKDEsInVsIiw0NikoMiwibGkiLDQ3KSgzLCJhIiw0MCksTmUoNCwiU1VCTUlUIikseWUoKSgpLG1lKDUsImxpIiw0NykoNiwiYSIsNDApLE5lKDcsIkFQUFJPVkUiKSx5ZSgpKCksbWUoOCwibGkiLDQ3KSg5LCJhIiw0MCksTmUoMTAsIkhJ'@;
put 'U1RPUlkiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxSZSgicm91dGVyTGluayIsJHMoNSxJSCkpLENlKDMpLGRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpKSxSZSgicm91dGVyTGluayIsJHMoNixCU2UpKSxDZSgzKSxSZSgicm91dGVy'@;
put 'TGluayIsJHMoNyxqU2UpKX19ZnVuY3Rpb24gVVNlKGMsbCl7MSZjJiZxdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gWlNlKGMsbCl7MSZjJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9ZnVuY3Rpb24gWVNlKGMsbCl7MSZjJiZxdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gV1NlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLWluZm8tbW9kYWwiLDQ4KSx4dCgib25Db25maXJtTW9kYWxDbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jbG9zZUFib3J0TW9kYWwoZi5pZCkpfSkseWUoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9bC4kaW1wbGljaXQsZD1WZSgpO1JlKCJkYXRhIixhKSgiZm9yY2VSZWxvYWQiLCFkLnN0YXJ0dXBEYXRhTG9hZGVkJiYxPT09ZC5zYXNqc0Fib3J0cy5sZW5ndGgpfX1mdW5jdGlvbiBHU2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDUyKSxxdCgxLCJkaXYiLDUzKSgyLCJkaXYiLDU0KSgz'@;
put 'LCJkaXYiLDU1KSx5ZSgpKX1mdW5jdGlvbiAkU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ5KSxxdCgxLCJpbWciLDUwKSxKZSgyLEdTZSw0LDAsImRpdiIsNTEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixudWxsPT09YS5hcHBBY3RpdmUpfX1sZXQgcVNl'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxwZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMubG9jYXRpb249Xyx0aGlzLmV2ZW50U2VydmljZT1ULHRoaXMuYXBwU3RvcmVT'@;
put 'ZXJ2aWNlPVcsdGhpcy5jZHI9aWUsdGhpcy5lbGVtZW50UmVmPXBlLHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1udWxsLHRoaXMuc2FzanNBYm9ydHM9W10sdGhpcy5lZGl0b3JBY3RpdmU9ITEsdGhpcy5hcHByb3ZlQWN0aXZlPSExLHRoaXMuZnJlZVRpZXJCYW5uZXI9dGhpcy5saWNlbmNl'@;
put 'U2VydmljZS5pc0FwcEZyZWVUaWVyLnZhbHVlLHRoaXMubGljZW5jZVByb2JsZW09dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlUHJvYmxlbSx0aGlzLmFwcE92ZXJDYXBhY2l0eT0hMSx0aGlzLmFwcEFjdGl2ZT1udWxsLHRoaXMucmVxdWVzdHNNb2RhbD0hMSx0aGlzLnNob3dSZWdpc3Ry'@;
put 'YXRpb249ITAsdGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMSx0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMSxmZWF0dXJlTmFtZToiIn0sdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0'@;
put 'YXRlLHRoaXMucGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc29sZS50YWJsZSh7IkFkYXB0ZXIgdmVyc2lvbiI6IjQuMTAuMiIsIkFwcCB2ZXJzaW9uIjoidjYuNi40Ii5yZXBsYWNlKCJ2IiwiIiksIkJ1aWxkIHRpbWVzdGFtcCI6S28ocGFyc2VJbnQo'@;
put 'IjE3MTE5NjUxMzQ5MDgiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY2LjYuNCIucmVwbGFjZSgidiIsIiIpKyIuZzdiNWJiZTAiLGguZXZlbnRzLnN1YnNjcmliZSh3'@;
put 'ZT0+e2lmKHRoaXMucm91dGVVcmw9dGhpcy5yb3V0ZXIudXJsLHR5cGVvZiB0aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NCl7bGV0IEVlPXRoaXMucm91dGVVcmwuc3BsaXQoIi8iKVsxXTsiZWRpdG9yIj09PUVlPyh0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFj'@;
put 'dGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOiJob21lIj09PUVlPyh0aGlzLmVyclRvcD0hMSx0aGlzLmVkaXRvckFjdGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOih0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFjdGl2ZT0hMSksR24ucm9vdFBhcmFtPUVlfXR5cGVvZiB0'@;
put 'aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NiYmKHRoaXMuYXBwcm92ZUFjdGl2ZT0hIXRoaXMucm91dGVVcmwuaW5jbHVkZXMoImFwcHJvdmVEZXQiKXx8ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJ0b2FwcHJvdmUiKSl9KSx0aGlzLnN1YnNjcmliZVRvU2hvd0Fi'@;
put 'b3J0TW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpLHRoaXMuc3Vic2NyaWJlVG9BcHBBY3RpdmUoKSx0aGlzLnN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKSx3aW5kb3cuZnJhbWVFbGVtZW50JiYod2luZG93LmZy'@;
put 'YW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZSIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhbGxvd2Z1bGxzY3JlZW4iLCIiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgi'@;
put 'ZnJhbWVib3JkZXIiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbmhlaWdodCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2lud2lkdGgiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInNjcm9sbGlu'@;
put 'ZyIsImF1dG8iKSx3aW5kb3cuZm9jdXMoKSl9cGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2FzanMiKTtpZighYSlyZXR1cm4gdGhpcy5saWNlbmNlU2VydmljZS5kZWFjdGl2YXRlQXBwKCksdm9pZCBzZXRUaW1lb3V0KCgpPT57dGhp'@;
put 'cy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiUGxlYXNlIG1ha2Ugc3VyZSAnU0FTSlMnIHRhZyB3aXRoIGNvbmZpZyBhdHRyaWJ1dGVzIGlzIGFkZGVkIHRvIGluZGV4Lmh0bWwiLG51bGwsIlNBU2pzIENvbmZpZyBub3QgZm91bmQiKX0pO2NvbnN0IGQ9Zj0+YS5nZXRBdHRy'@;
put 'aWJ1dGUoZil8fHZvaWQgMCxoPXtzZXJ2ZXJVcmw6ZCgic2VydmVyVXJsIil8fCIiLGFwcExvYzpkKCJhcHBMb2MiKXx8IiIsc2VydmVyVHlwZTpkKCJzZXJ2ZXJUeXBlIiksbG9naW5NZWNoYW5pc206ZCgibG9naW5NZWNoYW5pc20iKXx8IiIsYWRtaW5Hcm91cDpkKCJhZG1pbkdyb3VwIil8'@;
put 'fCIiLGRjUGF0aDpkKCJkY1BhdGgiKXx8IiIsZGVidWc6InRydWUiPT09ZCgiZGVidWciKXx8ITEsdXNlQ29tcHV0ZUFwaTp0aGlzLnBhcnNlQ29tcHV0ZUFwaShkKCJ1c2VDb21wdXRlQXBpIikpLGNvbnRleHROYW1lOmQoImNvbnRleHROYW1lIil8fCIiLGhvdExpY2VuY2VLZXk6ZCgiaG90'@;
put 'TGljZW5jZUtleSIpfHwiIn07dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1oLHRoaXMuYXBwU3RvcmVTZXJ2aWNlLnNldERjQWRhcHRlclNldHRpbmdzKGgpLHRoaXMuYXBwU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfWxpY2VuY2VQcm9ibGVtRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0'@;
put 'ZUJ5VXJsKGEpfXBhcnNlQ29tcHV0ZUFwaShhKXtyZXR1cm4gdm9pZCAwPT09YXx8InVuZGVmaW5lZCI9PT1hfHwibnVsbCI9PT1hP251bGw6InRydWUiPT09YXx8ITF9c3Vic2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uRGVtb0xpbWl0TW9kYWxTaG93LnN1'@;
put 'YnNjcmliZShhPT57dGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITAsZmVhdHVyZU5hbWU6YX19KX1zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIuc3Vic2NyaWJlKGE9Pnt0aGlzLmZyZWVUaWVyQmFubmVyPWF9KSx0aGlzLmxp'@;
put 'Y2VuY2VTZXJ2aWNlLmxpY2Vuc2VFeHBpcmVzSW5EYXlzLnN1YnNjcmliZShhPT57YSYmYTw9MTQmJih0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9YSl9KSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwT3ZlckNhcGFjaXR5LnN1YnNjcmliZShhPT57dGhpcy5hcHBPdmVyQ2FwYWNpdHk9YX0p'@;
put 'fXN1YnNjcmliZVRvQXBwQWN0aXZlKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwQWN0aXZlPWF9KX1zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaG93QWJvcnRNb2RhbC5zdWJzY3JpYmUo'@;
put 'YT0+e2EuaWQ9dGhpcy5zYXNqc0Fib3J0cy5sZW5ndGgrMSx0aGlzLnNhc2pzQWJvcnRzLnB1c2goYSksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSl9c3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57'@;
put 'dGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMH0pfXN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uUmVxdWVzdHNNb2RhbE9wZW4uc3Vic2NyaWJlKGE9Pnt0aGlzLnJlcXVlc3RzTW9kYWw9ITB9KX1jbG9zZUFib3J0TW9kYWwoYSl7bGV0IGQ9dGhpcy5zYXNq'@;
put 'c0Fib3J0cy5maW5kSW5kZXgoaD0+aC5pZD09PWEpO3RoaXMuc2FzanNBYm9ydHMuc3BsaWNlKGQsMSl9dG9nZ2xlU2lkZWJhcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZVNpZGViYXIoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfW9wZW5M'@;
put 'aWNlbmNpbmdQYWdlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy91cGRhdGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVXgpLHR0KEMwKSx0dChEcyksdHQoR2wpLHR0KEpkKSx0dCh2bCksdHQoZTgpLHR0KFVh'@;
put 'KSx0dChOaSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJteS1hcHAiXV0sZGVjbHM6MjksdmFyczoxNyxjb25zdHM6W1sxLCJtYWluLWNvbnRhaW5lciJdLFs0LCJuZ0lmIl0sWzEsImFwcC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImN1cnNvci1w'@;
put 'b2ludGVyIHNlbGVjdC1ub25lIG1sLTEwIGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJsb2dvIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaHJlZiIsIiMiLCJjbGFz'@;
put 'cyIsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsIm5hdi10ZXh0Il0sWzEsImRyb3Bkb3duIl0sWyJjbGFzcyIsInN1Ym5hdiIsNCwibmdJZiJdLFszLCJvcGVuZWQiLCJvcGVuZWRDaGFuZ2UiXSxbMywiZGF0YSIsImZvcmNlUmVs'@;
put 'b2FkIiwib25Db25maXJtTW9kYWxDbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEs'@;
put 'Im1vZGFsLXRpdGxlIl0sWyJzaXplIiwiMjAiLCJzaGFwZSIsImxvY2siXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJhcHAtbG9hZGluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtd2FybmluZyIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xl'@;
put 'IiwiYWxlcnQiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LWRhbmdlciIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDQsIm5nSWYiXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBw'@;
put 'LWxldmVsIiwiYWxlcnQtd2FybmluZyJdLFsxLCJhbGVydC1pdGVtcyJdLFsxLCJhbGVydC1pdGVtIiwic3RhdGljIl0sWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwxLCJtdC0yIl0sWzEsImFsZXJ0LXRleHQiXSxbImNsYXNzZXMiLCJjb2xv'@;
put 'ci13aGl0ZSJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJ1cGRhdGUta2V5Il0sWzEsInVwZGF0ZS1rZXkiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBwLWxldmVs'@;
put 'IiwiYWxlcnQtZGFuZ2VyIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLCJjbGFzcyIsInVwZGF0ZS1rZXkiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImN1cnNvci1wb2ludGVyIiwic2VsZWN0LW5vbmUiLCJtbC0xMCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNv'@;
put 'bnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbInNpemUiLCIyNCIsInNoYXBlIiwidHJlZS12aWV3Il0sWyJocmVmIiwiIyIsMSwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9h'@;
put 'cHAvZGMvc2VydmljZXMvd2ViL2ltYWdlcy9kYy1sb2dvLnN2ZyIsMSwid2l0aG91dC10ZXh0IiwiZC1ibG9jayIsImQtbWQtbm9uZSJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIs'@;
put 'MSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5hdiIsImQtZmxleCIsImQtc20tbm9uZSJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsInRvZ2dsZSBzZXR0aW5n'@;
put 'cyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJoZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1mbGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCJuYXYtbGluayIsIm5h'@;
put 'di10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93'@;
put 'bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIl0sWzEsImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJs'@;
put 'aWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvZGF0YWNvbnRyb2xsZXIuc3ZnIiwxLCJsb2FkaW5nLWxvZ28iXSxbImNsYXNzIiwic2xpZGVyIiw0LCJuZ0lmIl0sWzEsInNsaWRlciJdLFsxLCJsaW5lIl0sWzEsInN1YmxpbmUiLCJpbmMiXSxbMSwic3VibGluZSIsImRlYyJdXSx0ZW1w'@;
put 'bGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCksSmUoMSxSU2UsNCwzLCJuZy1jb250YWluZXIiLDEpLG1lKDIsImhlYWRlciIsMiksSmUoMyxPU2UsMiwwLCJkaXYiLDMpLG1lKDQsImRpdiIsNCksSmUoNSxGU2UsMywyLCJhIiw1KSxKZSg2LEhTZSwyLDAsImEiLDEpLHll'@;
put 'KCksSmUoNyxWU2UsMTMsMTAsIm5nLWNvbnRhaW5lciIsMSksbWUoOCwiZGl2Iiw2KSg5LCJkaXYiLDcpLHF0KDEwLCJhcHAtbG9hZGluZy1pbmRpY2F0b3IiKSx5ZSgpLG1lKDExLCJkaXYiLDgpLHF0KDEyLCJhcHAtdXNlci1uYXYtZHJvcGRvd24iKSx5ZSgpKCkoKSxKZSgxMyx6U2UsMTEs'@;
put 'OCwibmF2Iiw5KSxKZSgxNCxVU2UsMSwwLCJhcHAtYWxlcnRzIiwxKSxtZSgxNSwiYXBwLXJlcXVlc3RzLW1vZGFsIiwxMCkseHQoIm9wZW5lZENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmVxdWVzdHNNb2RhbD1mfSkseWUoKSxKZSgxNixaU2UsMSwwLCJyb3V0ZXItb3V0bGV0Iiwx'@;
put 'KSxxdCgxNywiYXBwLWxvZ2luIiksSmUoMTgsWVNlLDEsMCwiYXBwLWFsZXJ0cyIsMSksSmUoMTksV1NlLDEsMiwiYXBwLWluZm8tbW9kYWwiLDExKSxtZSgyMCwiY2xyLW1vZGFsIiwxMikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZGVtb0xpbWl0Tm90'@;
put 'aWNlLm9wZW49Zn0pLG1lKDIxLCJoMyIsMTMpLE5lKDIyKSxxdCgyMywiY2xyLWljb24iLDE0KSx5ZSgpLG1lKDI0LCJkaXYiLDE1KSxOZSgyNSwiIENvbnRhY3QgIikscXQoMjYsImNvbnRhY3QtbGluayIpLE5lKDI3KSx5ZSgpKCkoKSxKZSgyOCwkU2UsMywxLCJkaXYiLDE2KSksMiZhJiYo'@;
put 'Q2UoMSksUmUoIm5nSWYiLCFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxDZSgyKSxSZSgibmdJZiIsZC5pc01haW5Sb3V0ZSgidmlldyIpfHxkLmlzTWFpblJvdXRlKCJob21lIikmJiFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxDZSgyKSxSZSgibmdJ'@;
put 'ZiIsIWQucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLENlKDEpLFJlKCJuZ0lmIixkLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxDZSgxKSxSZSgibmdJZiIsIWQucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vu'@;
put 'c2luZyIpKSxDZSg2KSxSZSgibmdJZiIsZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8ZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGQucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxDZSgxKSxSZSgibmdJZiIsIWQuZXJyVG9wKSxDZSgxKSxSZSgi'@;
put 'b3BlbmVkIixkLnJlcXVlc3RzTW9kYWwpLENlKDEpLFJlKCJuZ0lmIixkLnN0YXJ0dXBEYXRhTG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsZC5lcnJUb3ApLENlKDEpLFJlKCJuZ0Zvck9mIixkLnNhc2pzQWJvcnRzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmRlbW9MaW1pdE5vdGljZS5v'@;
put 'cGVuKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLENlKDIpLGdyKCIgTG9ja2VkIEZlYXR1cmUgKCIsZC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksQ2UoNSksZ3IoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixkLnN5c3NpdGUudmFsdWUsIikg'@;
put 'dG8gYWN0aXZhdGUhICIpLENlKDEpLFJlKCJuZ0lmIiwhZC5zdGFydHVwRGF0YUxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGZwLEJ1LEdfLFJDZSxPQ2UsekNlLFlDZSxqRSxOYixrYSxvdSxzdSxjMixOZixhZyxsZyxLOCxZYixtU2UseFNlXSxzdHlsZXM6WyJhcHAtcmVxdWVzdHMt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MTAwMDB9aGVhZGVyLmFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnQ7Y29sb3I6I2ZmZn0ubG9nb1tfbmdjb250ZW50LSVDT01QJV0gICBpbWcud2l0aG91dC10ZXh0W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4fS5sb2dvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGltZy53aXRoLXRleHRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIxMHB4fS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7YmFja2dyb3Vu'@;
put 'ZDp0cmFuc3BhcmVudDtib3JkZXI6MDttYXJnaW4tbGVmdDoxMHB4fS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO2hl'@;
put 'aWdodDoxMDB2aCFpbXBvcnRhbnQ7d2lkdGg6MTAwdnchaW1wb3J0YW50O3otaW5kZXg6MTA1O2JhY2tncm91bmQ6cmdiYSgzMywzMywzMywuNSl9LmRlbW8tZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV17Zmxl'@;
put 'eC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgLmV4'@;
put 'cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtbm90aWNlW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5tYWlsdG9bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM4ZGM1M2V9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC51cGRhdGUta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7'@;
put 'cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xNDkwMTk2MDc4KX0uYWxlcnQtaWNvbi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5uYXYtdGV4dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjIwcHh9LnNpZGVi'@;
put 'YXItdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmctbGVmdDoxMHB4fS5zaWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBv'@;
put 'aW50ZXI7d2lkdGg6MzBweDtoZWlnaHQ6MzBweH1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlci1hY3Rpb25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246dW5zZXR9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmFmYWZhO29wYWNpdHk6Ljk7bGluZS1oZWlnaHQ6MS40NXJlbX1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtb'@;
put 'X25nY29udGVudC0lQ09NUCVdOmhvdmVye2JveC1zaGFkb3c6aW5zZXQgMCAtM3B4IDAgdHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlLWlufWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdj'@;
put 'b250ZW50LSVDT01QJV06aG92ZXJ7Y29sb3I6I2ZhZmFmYTtvcGFjaXR5OjF9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojNjE3MTdEO29wYWNpdHk6MTti'@;
put 'b3gtc2hhZG93Omluc2V0IDAgLTNweCB0cmFuc3BhcmVudH1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWl0ZW1bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoxcmVtfS5ub3RmW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNr'@;
put 'Z3JvdW5kOiMxNmE1N2E7Y29sb3I6I2ZmZmNmYztmb250LXNpemU6MTJweH0uYnRuLmJ0bi1zdWNjZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzYyYTQyMDtiYWNrZ3JvdW5kLWNvbG9yOiMxNmE1N2EhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmJ0bi5idG4tc3VjY2Vzc1tf'@;
put 'bmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmFkZDM5O2NvbG9yOiNmZmZ9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVD'@;
put 'T01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01Q'@;
put 'JV17bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjByZW0gMXJlbSAxcmVtfS5j'@;
put 'b250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDowIWltcG9ydGFudH0ubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDojNDk1QTY3O2NvbG9yOiNmZmZ9QG1lZGlhIHNjcmVl'@;
put 'biBhbmQgKG1heC13aWR0aDogNzY4cHgpey5uYXZCYXJSZXNwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YmFja2dyb3VuZDojNDk1QTY3O2NvbG9yOiNmZmZ9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5z'@;
put 'dWItbmF2LmNsci1uYXYtbGV2ZWwtMVtfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTJbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtb'@;
put 'X25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn0uY2FyZC1ibG9j'@;
put 'a1tfbmdjb250ZW50LSVDT01QJV0sIC5jYXJkLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDAgMH0ubWFpbi1jb250YWluZXJbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MHJlbX19ICAuaHRJbnZhbGlke2JhY2tncm91bmQ6YmxhY2shaW1wb3J0YW50fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsgIGgye2ZvbnQtc2l6'@;
put 'ZTouN3JlbSFpbXBvcnRhbnR9ICBoM3tmb250LXNpemU6LjdyZW19fSAgLm5hdi1saW5re3BhZGRpbmc6MHJlbSAxcmVtfSAgLmJ0bi1wcmltYXJ5IC5idG4sICAgLmJ0bi5idG4tcHJpbWFyeXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Y29sb3I6I2Zm'@;
put 'Zn0gIC5idG57Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTtib3JkZXI6MXB4IHNvbGlkO21pbi13aWR0aDozcmVtO21heC13aWR0aDoxNXJlbTt3aGl0ZS1zcGFjZTpub3dy'@;
put 'YXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsaW5lLWhlaWdodDoxLjVyZW07bGV0dGVyLXNwYWNpbmc6LjEyZW07Zm9udC1zaXplOi41cmVtO2Zv'@;
put 'bnQtd2VpZ2h0OjUwMDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMTQzNTF9ICAuYnRuLmJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6'@;
put 'dHJhbnNwYXJlbnQ7Y29sb3I6IzMxNDM1MX0gIC5idG4uYnRuLW91dGxpbmU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojNDk1YTY3O2NvbG9yOiNmZmZ9ICAuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWVhNzFm'@;
put 'O2NvbG9yOiNmZmY3Zjc7Ym9yZGVyLWNvbG9yOiM5YTk2OTZ9ICAuaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLmlucHV0cyB0ZXh0YXJlYXtmb250LXNpemU6MTNwdDtib3JkZXI6MnB4IHNvbGlkICM0ODU5Njc7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Ym94'@;
put 'LXNoYWRvdzpub25lO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjAgMCAwIDE0cHg7cGFkZGluZzo3cHQ7d2lkdGg6MjkwcHh9ICAuaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4'@;
put 'O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyLmFjdGl2ZXtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMjBweDt3aWR0aDozNTBweH0gIC5oYW5kc29udGFibGV7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1y'@;
put 'YWRpdXM6M3B4fSAgLmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9ICAuaHRfY2xvbmVfbGVmdCB0aHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9ICAuaHRfY2xvbmVfdG9wIHRoe2JvcmRlci10b3A6MXB4IHNv'@;
put 'bGlkICNjY2M7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9ICAuaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIHRoe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30gIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUob2RkKT50ZHtiYWNr'@;
put 'Z3JvdW5kLWNvbG9yOiNmM2YzZjM7Ym9yZGVyOjFweCBzb2xpZCByZ2IoMTk3LDE5NywxOTcpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYigyMzYsMjM1LDIzNSl9ICAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBlKDJuKT50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBz'@;
put 'b2xpZCByZ2IoMTk3LDE5NywxOTcpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYigyMzYsMjM1LDIzNSl9ICAud3RCb3JkZXJ7YmFja2dyb3VuZC1jb2xvcjojNDk1YTY3IWltcG9ydGFudH0gIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7cGFk'@;
put 'ZGluZzowIWltcG9ydGFudDttYXJnaW46MDtib3JkZXItYm90dG9tOjNweCBzb2xpZCAjZDZkM2QzfSAgLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I0Y1RjZGRn0gIC5jYXJke2JveC1zaGFkb3c6MCAuMTI1cmVtICNkN2Q3ZDc7Ym9yZGVyLXJhZGl1czowcmVtO2JvcmRlcjoxcHgg'@;
put 'c29saWQgdHJhbnNwYXJlbnR9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTtiYWNrZ3JvdW5k'@;
put 'LWNvbG9yOiNmZmY7Y29sb3I6IzU2NTY1NjttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3QsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlk'@;
put 'LWZvb3R7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2hlaWdodDoxLjVyZW07cGFkZGluZzowIC41cmVtO2xpbmUtaGVpZ2h0OmNhbGMoMS41cmVtIC0gM3B4KTtmb250LXNpemU6LjQ1ODMzcmVtO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO2JvcmRl'@;
put 'ci1yYWRpdXM6MH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkLWZvb3Rlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxNXB4O3RvcDoycHh9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhl'@;
put 'YWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSAgLmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21hcmdpbi10b3A6LjA4'@;
put 'MzMzM3JlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JhY2tncm91bmQ6I2Y1ZjZmZjtwYWRkaW5nOi41cmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVt'@;
put 'O2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9ICAudGFibGV7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNTY1'@;
put 'NjU2O21hcmdpbjowO21hcmdpbi10b3A6MXJlbTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfSAgLnRhYmxlIHRoe2ZvbnQtc2l6ZTouNDU4MzNyZW07Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2JhY2tncm91bmQtY29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjpib3R0'@;
put 'b207Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9ICAubW9kYWwtaGVhZGVye2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbToxcmVtfSAgLm1haW4tY29udGFpbmVyIC5jb250'@;
put 'ZW50LWNvbnRhaW5lcnttaW4taGVpZ2h0OjBweDtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLWxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmxvYWRpbmctbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9Il19KSxjfSkoKTtmdW5jdGlvbiBwZWUo'@;
put 'Yyl7cmV0dXJuIG5ldyBBcigzZTMsITEpfWZ1bmN0aW9uIEZwKGMpe3N3aXRjaChjLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgb2I7Y2FzZSAxOnJldHVybiBjWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBWSyhjKX19ZnVuY3Rpb24gZ2VlKGMsbCxhPW5ldyBNYXAsZD1uZXcgTWFwKXtjb25z'@;
put 'dCBoPVtdLGY9W107bGV0IF89LTEsVD1udWxsO2lmKGwuZm9yRWFjaChXPT57Y29uc3QgaWU9Vy5nZXQoIm9mZnNldCIpLHBlPWllPT1fLHdlPXBlJiZUfHxuZXcgTWFwO1cuZm9yRWFjaCgoRWUsWmUpPT57bGV0IGl0PVplLGV0PUVlO2lmKCJvZmZzZXQiIT09WmUpc3dpdGNoKGl0PWMubm9y'@;
put 'bWFsaXplUHJvcGVydHlOYW1lKGl0LGgpLGV0KXtjYXNlIiEiOmV0PWEuZ2V0KFplKTticmVhaztjYXNlIEFmOmV0PWQuZ2V0KFplKTticmVhaztkZWZhdWx0OmV0PWMubm9ybWFsaXplU3R5bGVWYWx1ZShaZSxpdCxldCxoKX13ZS5zZXQoaXQsZXQpfSkscGV8fGYucHVzaCh3ZSksVD13ZSxf'@;
put 'PWllfSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gX01lKGMpe3JldHVybiBuZXcgQXIoMzUwMiwhMSl9KCk7cmV0dXJuIGZ9ZnVuY3Rpb24gTEgoYyxsLGEsZCl7c3dpdGNoKGwpe2Nhc2Uic3RhcnQiOmMub25TdGFydCgoKT0+ZChhJiZSSChhLCJzdGFydCIsYykpKTticmVhaztjYXNlImRv'@;
put 'bmUiOmMub25Eb25lKCgpPT5kKGEmJlJIKGEsImRvbmUiLGMpKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpjLm9uRGVzdHJveSgoKT0+ZChhJiZSSChhLCJkZXN0cm95IixjKSkpfX1mdW5jdGlvbiBSSChjLGwsYSl7Y29uc3QgZj1PSChjLmVsZW1lbnQsYy50cmlnZ2VyTmFtZSxjLmZyb21TdGF0'@;
put 'ZSxjLnRvU3RhdGUsbHx8Yy5waGFzZU5hbWUsYS50b3RhbFRpbWU/P2MudG90YWxUaW1lLCEhYS5kaXNhYmxlZCksXz1jLl9kYXRhO3JldHVybiBudWxsIT1fJiYoZi5fZGF0YT1fKSxmfWZ1bmN0aW9uIE9IKGMsbCxhLGQsaD0iIixmPTAsXyl7cmV0dXJue2VsZW1lbnQ6Yyx0cmlnZ2VyTmFt'@;
put 'ZTpsLGZyb21TdGF0ZTphLHRvU3RhdGU6ZCxwaGFzZU5hbWU6aCx0b3RhbFRpbWU6ZixkaXNhYmxlZDohIV99fWZ1bmN0aW9uIG0xKGMsbCxhKXtsZXQgZD1jLmdldChsKTtyZXR1cm4gZHx8Yy5zZXQobCxkPWEpLGR9ZnVuY3Rpb24gbWVlKGMpe2NvbnN0IGw9Yy5pbmRleE9mKCI6Iik7cmV0'@;
put 'dXJuW2Muc3Vic3RyaW5nKDEsbCksYy5zbGljZShsKzEpXX1jb25zdCBETWU9KCgpPT50eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSgpO2Z1bmN0aW9uIFBIKGMpe2NvbnN0IGw9Yy5wYXJlbnROb2RlfHxjLmhvc3R8fG51bGw7cmV0dXJuIGw9PT1E'@;
put 'TWU/bnVsbDpsfWxldCBoZz1udWxsLHZlZT0hMTtmdW5jdGlvbiBfZWUoYyxsKXtmb3IoO2w7KXtpZihsPT09YylyZXR1cm4hMDtsPVBIKGwpfXJldHVybiExfWZ1bmN0aW9uIGJlZShjLGwsYSl7aWYoYSlyZXR1cm4gQXJyYXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwobCkpO2NvbnN0IGQ9'@;
put 'Yy5xdWVyeVNlbGVjdG9yKGwpO3JldHVybiBkP1tkXTpbXX1sZXQgeWVlPSgoKT0+e2NsYXNzIGN7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGEpe3JldHVybiBmdW5jdGlvbiBMTWUoYyl7aGd8fChoZz1mdW5jdGlvbiBSTWUoKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5i'@;
put 'b2R5Om51bGx9KCl8fHt9LHZlZT0hIWhnLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBoZy5zdHlsZSk7bGV0IGw9ITA7cmV0dXJuIGhnLnN0eWxlJiYhZnVuY3Rpb24gSU1lKGMpe3JldHVybiJlYmtpdCI9PWMuc3Vic3RyaW5nKDEsNil9KGMpJiYobD1jIGluIGhnLnN0eWxlLCFsJiZ2'@;
put 'ZWUmJihsPSJXZWJraXQiK2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKWluIGhnLnN0eWxlKSksbH0oYSl9bWF0Y2hlc0VsZW1lbnQoYSxkKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoYSxkKXtyZXR1cm4gX2VlKGEsZCl9Z2V0UGFyZW50RWxlbWVudChhKXtyZXR1cm4g'@;
put 'UEgoYSl9cXVlcnkoYSxkLGgpe3JldHVybiBiZWUoYSxkLGgpfWNvbXB1dGVTdHlsZShhLGQsaCl7cmV0dXJuIGh8fCIifWFuaW1hdGUoYSxkLGgsZixfLFQ9W10sVyl7cmV0dXJuIG5ldyBvYihoLGYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxGSD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OT09QPW5ldyB5ZWUsY30pKCk7Y29uc3QgT01lPTFlMyxISD0ibmctZW50ZXIiLHpFPSJuZy1sZWF2ZSIsVUU9Im5nLXRyaWdnZXIiLFpFPSIubmct'@;
put 'dHJpZ2dlciIsQ2VlPSJuZy1hbmltYXRpbmciLE5IPSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiBCZihjKXtpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIGM7Y29uc3QgbD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFsfHxsLmxlbmd0aDwyPzA6VkgocGFyc2VGbG9h'@;
put 'dChsWzFdKSxsWzJdKX1mdW5jdGlvbiBWSChjLGwpe3JldHVybiJzIj09PWw/YypPTWU6Y31mdW5jdGlvbiBZRShjLGwsYSl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/YzpmdW5jdGlvbiBGTWUoYyxsLGEpe2xldCBoLGY9MCxfPSIiO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'Yyl7Y29uc3QgVD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09VClyZXR1cm4gbC5wdXNoKHBlZSgpKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiIn07aD1WSChw'@;
put 'YXJzZUZsb2F0KFRbMV0pLFRbMl0pO2NvbnN0IFc9VFszXTtudWxsIT1XJiYoZj1WSChwYXJzZUZsb2F0KFcpLFRbNF0pKTtjb25zdCBpZT1UWzVdO2llJiYoXz1pZSl9ZWxzZSBoPWM7aWYoIWEpe2xldCBUPSExLFc9bC5sZW5ndGg7aDwwJiYobC5wdXNoKGZ1bmN0aW9uIEtTZSgpe3JldHVy'@;
put 'biBuZXcgQXIoMzEwMCwhMSl9KCkpLFQ9ITApLGY8MCYmKGwucHVzaChmdW5jdGlvbiBYU2UoKXtyZXR1cm4gbmV3IEFyKDMxMDEsITEpfSgpKSxUPSEwKSxUJiZsLnNwbGljZShXLDAscGVlKCkpfXJldHVybntkdXJhdGlvbjpoLGRlbGF5OmYsZWFzaW5nOl99fShjLGwsYSl9ZnVuY3Rpb24g'@;
put 'V2IoYyxsPXt9KXtyZXR1cm4gT2JqZWN0LmtleXMoYykuZm9yRWFjaChhPT57bFthXT1jW2FdfSksbH1mdW5jdGlvbiBTZWUoYyl7Y29uc3QgbD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGE9PntsLnNldChhLGNbYV0pfSksbH1mdW5jdGlvbiBIcChjLGw9bmV3IE1h'@;
put 'cCxhKXtpZihhKWZvcihsZXRbZCxoXW9mIGEpbC5zZXQoZCxoKTtmb3IobGV0W2QsaF1vZiBjKWwuc2V0KGQsaCk7cmV0dXJuIGx9ZnVuY3Rpb24gaGgoYyxsLGEpe2wuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9akgoaCk7YSYmIWEuaGFzKGgpJiZhLnNldChoLGMuc3R5bGVbZl0pLGMuc3R5'@;
put 'bGVbZl09ZH0pfWZ1bmN0aW9uIGZnKGMsbCl7bC5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD1qSChkKTtjLnN0eWxlW2hdPSIifSl9ZnVuY3Rpb24gR2IoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/MT09Yy5sZW5ndGg/Y1swXTpOSyhjKTpjfWNvbnN0IEJIPW5ldyBSZWdFeHAoInt7XFxz'@;
put 'KiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIHhlZShjKXtsZXQgbD1bXTtpZigic3RyaW5nIj09dHlwZW9mIGMpe2xldCBhO2Zvcig7YT1CSC5leGVjKGMpOylsLnB1c2goYVsxXSk7QkgubGFzdEluZGV4PTB9cmV0dXJuIGx9ZnVuY3Rpb24gJGIoYyxsLGEpe2NvbnN0IGQ9Yy50b1N0cmlu'@;
put 'ZygpLGg9ZC5yZXBsYWNlKEJILChmLF8pPT57bGV0IFQ9bFtfXTtyZXR1cm4gbnVsbD09VCYmKGEucHVzaChmdW5jdGlvbiBRU2UoYyl7cmV0dXJuIG5ldyBBcigzMDAzLCExKX0oKSksVD0iIiksVC50b1N0cmluZygpfSk7cmV0dXJuIGg9PWQ/YzpofWZ1bmN0aW9uIFdFKGMpe2NvbnN0IGw9'@;
put 'W107bGV0IGE9Yy5uZXh0KCk7Zm9yKDshYS5kb25lOylsLnB1c2goYS52YWx1ZSksYT1jLm5leHQoKTtyZXR1cm4gbH1jb25zdCBWTWU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIGpIKGMpe3JldHVybiBjLnJlcGxhY2UoVk1lLCguLi5sKT0+bFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlv'@;
put 'biB2MShjLGwsYSl7c3dpdGNoKGwudHlwZSl7Y2FzZSA3OnJldHVybiBjLnZpc2l0VHJpZ2dlcihsLGEpO2Nhc2UgMDpyZXR1cm4gYy52aXNpdFN0YXRlKGwsYSk7Y2FzZSAxOnJldHVybiBjLnZpc2l0VHJhbnNpdGlvbihsLGEpO2Nhc2UgMjpyZXR1cm4gYy52aXNpdFNlcXVlbmNlKGwsYSk7'@;
put 'Y2FzZSAzOnJldHVybiBjLnZpc2l0R3JvdXAobCxhKTtjYXNlIDQ6cmV0dXJuIGMudmlzaXRBbmltYXRlKGwsYSk7Y2FzZSA1OnJldHVybiBjLnZpc2l0S2V5ZnJhbWVzKGwsYSk7Y2FzZSA2OnJldHVybiBjLnZpc2l0U3R5bGUobCxhKTtjYXNlIDg6cmV0dXJuIGMudmlzaXRSZWZlcmVuY2Uo'@;
put 'bCxhKTtjYXNlIDk6cmV0dXJuIGMudmlzaXRBbmltYXRlQ2hpbGQobCxhKTtjYXNlIDEwOnJldHVybiBjLnZpc2l0QW5pbWF0ZVJlZihsLGEpO2Nhc2UgMTE6cmV0dXJuIGMudmlzaXRRdWVyeShsLGEpO2Nhc2UgMTI6cmV0dXJuIGMudmlzaXRTdGFnZ2VyKGwsYSk7ZGVmYXVsdDp0aHJvdyBm'@;
put 'dW5jdGlvbiBlTWUoYyl7cmV0dXJuIG5ldyBBcigzMDA0LCExKX0oKX19ZnVuY3Rpb24gRWVlKGMsbCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2xdfWNvbnN0IEdFPSIqIjtmdW5jdGlvbiB6TWUoYyxsKXtjb25zdCBhPVtdO3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9j'@;
put 'LnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChkPT5mdW5jdGlvbiBVTWUoYyxsLGEpe2lmKCI6Ij09Y1swXSl7Y29uc3QgVz1mdW5jdGlvbiBaTWUoYyxsKXtzd2l0Y2goYyl7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNl'@;
put 'IjppbmNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPnBhcnNlRmxvYXQoYSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKTxwYXJzZUZsb2F0KGEpO2RlZmF1bHQ6cmV0dXJuIGwucHVzaChmdW5jdGlvbiBwTWUoYyl7cmV0dXJuIG5ldyBBcigz'@;
put 'MDE2LCExKX0oKSksIiogPT4gKiJ9fShjLGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBXKXJldHVybiB2b2lkIGwucHVzaChXKTtjPVd9Y29uc3QgZD1jLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1kfHxkLmxlbmd0aDw0KXJldHVy'@;
put 'biBhLnB1c2goZnVuY3Rpb24gZk1lKGMpe3JldHVybiBuZXcgQXIoMzAxNSwhMSl9KCkpLGw7Y29uc3QgaD1kWzFdLGY9ZFsyXSxfPWRbM107bC5wdXNoKGtlZShoLF8pKTsiPCI9PWZbMF0mJiEoaD09R0UmJl89PUdFKSYmbC5wdXNoKGtlZShfLGgpKX0oZCxhLGwpKTphLnB1c2goYyksYX1j'@;
put 'b25zdCAkRT1uZXcgU2V0KFsidHJ1ZSIsIjEiXSkscUU9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBrZWUoYyxsKXtjb25zdCBhPSRFLmhhcyhjKXx8cUUuaGFzKGMpLGQ9JEUuaGFzKGwpfHxxRS5oYXMobCk7cmV0dXJuKGgsZik9PntsZXQgXz1jPT1HRXx8Yz09aCxUPWw9PUdF'@;
put 'fHxsPT1mO3JldHVybiFfJiZhJiYiYm9vbGVhbiI9PXR5cGVvZiBoJiYoXz1oPyRFLmhhcyhjKTpxRS5oYXMoYykpLCFUJiZkJiYiYm9vbGVhbiI9PXR5cGVvZiBmJiYoVD1mPyRFLmhhcyhsKTpxRS5oYXMobCkpLF8mJlR9fWNvbnN0IFlNZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImci'@;
put 'KTtmdW5jdGlvbiB6SChjLGwsYSxkKXtyZXR1cm4gbmV3IFdNZShjKS5idWlsZChsLGEsZCl9Y2xhc3MgV01le2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RyaXZlcj1sfWJ1aWxkKGwsYSxkKXtjb25zdCBoPW5ldyBxTWUoYSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3Rh'@;
put 'dGUoaCksdjEodGhpcyxHYihsKSxoKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShsKXtsLmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLGwuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsbC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLGwuY3VycmVudFRpbWU9MH12aXNpdFRy'@;
put 'aWdnZXIobCxhKXtsZXQgZD1hLnF1ZXJ5Q291bnQ9MCxoPWEuZGVwQ291bnQ9MDtjb25zdCBmPVtdLF89W107cmV0dXJuIkAiPT1sLm5hbWUuY2hhckF0KDApJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIG5NZSgpe3JldHVybiBuZXcgQXIoMzAwNiwhMSl9KCkpLGwuZGVmaW5pdGlvbnMuZm9y'@;
put 'RWFjaChUPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShhKSwwPT1ULnR5cGUpe2NvbnN0IFc9VCxpZT1XLm5hbWU7aWUudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2gocGU9PntXLm5hbWU9cGUsZi5wdXNoKHRoaXMudmlzaXRTdGF0ZShXLGEpKX0p'@;
put 'LFcubmFtZT1pZX1lbHNlIGlmKDE9PVQudHlwZSl7Y29uc3QgVz10aGlzLnZpc2l0VHJhbnNpdGlvbihULGEpO2QrPVcucXVlcnlDb3VudCxoKz1XLmRlcENvdW50LF8ucHVzaChXKX1lbHNlIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gck1lKCl7cmV0dXJuIG5ldyBBcigzMDA3LCExKX0oKSl9'@;
put 'KSx7dHlwZTo3LG5hbWU6bC5uYW1lLHN0YXRlczpmLHRyYW5zaXRpb25zOl8scXVlcnlDb3VudDpkLGRlcENvdW50Omgsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKGwsYSl7Y29uc3QgZD10aGlzLnZpc2l0U3R5bGUobC5zdHlsZXMsYSksaD1sLm9wdGlvbnMmJmwub3B0aW9ucy5wYXJhbXN8'@;
put 'fG51bGw7aWYoZC5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGY9bmV3IFNldCxfPWh8fHt9O2Quc3R5bGVzLmZvckVhY2goVD0+e1QgaW5zdGFuY2VvZiBNYXAmJlQuZm9yRWFjaChXPT57eGVlKFcpLmZvckVhY2goaWU9PntfLmhhc093blByb3BlcnR5KGllKXx8Zi5hZGQoaWUpfSl9'@;
put 'KX0pLGYuc2l6ZSYmKFdFKGYudmFsdWVzKCkpLGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gaU1lKGMsbCl7cmV0dXJuIG5ldyBBcigzMDA4LCExKX0oKSkpfXJldHVybnt0eXBlOjAsbmFtZTpsLm5hbWUsc3R5bGU6ZCxvcHRpb25zOmg/e3BhcmFtczpofTpudWxsfX12aXNpdFRyYW5zaXRpb24o'@;
put 'bCxhKXthLnF1ZXJ5Q291bnQ9MCxhLmRlcENvdW50PTA7Y29uc3QgZD12MSh0aGlzLEdiKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOnpNZShsLmV4cHIsYS5lcnJvcnMpLGFuaW1hdGlvbjpkLHF1ZXJ5Q291bnQ6YS5xdWVyeUNvdW50LGRlcENvdW50OmEuZGVwQ291'@;
put 'bnQsb3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKGwsYSl7cmV0dXJue3R5cGU6MixzdGVwczpsLnN0ZXBzLm1hcChkPT52MSh0aGlzLGQsYSkpLG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZTtsZXQgaD0wO2Nv'@;
put 'bnN0IGY9bC5zdGVwcy5tYXAoXz0+e2EuY3VycmVudFRpbWU9ZDtjb25zdCBUPXYxKHRoaXMsXyxhKTtyZXR1cm4gaD1NYXRoLm1heChoLGEuY3VycmVudFRpbWUpLFR9KTtyZXR1cm4gYS5jdXJyZW50VGltZT1oLHt0eXBlOjMsc3RlcHM6ZixvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0'@;
put 'QW5pbWF0ZShsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gWE1lKGMsbCl7aWYoYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gYztpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIFVIKFlFKGMsbCkuZHVyYXRpb24sMCwiIik7Y29uc3QgYT1jO2lmKGEuc3BsaXQoL1xzKy8pLnNv'@;
put 'bWUoZj0+InsiPT1mLmNoYXJBdCgwKSYmInsiPT1mLmNoYXJBdCgxKSkpe2NvbnN0IGY9VUgoMCwwLCIiKTtyZXR1cm4gZi5keW5hbWljPSEwLGYuc3RyVmFsdWU9YSxmfWNvbnN0IGg9WUUoYSxsKTtyZXR1cm4gVUgoaC5kdXJhdGlvbixoLmRlbGF5LGguZWFzaW5nKX0obC50aW1pbmdzLGEu'@;
put 'ZXJyb3JzKTthLmN1cnJlbnRBbmltYXRlVGltaW5ncz1kO2xldCBoLGY9bC5zdHlsZXM/bC5zdHlsZXM6X3Moe30pO2lmKDU9PWYudHlwZSloPXRoaXMudmlzaXRLZXlmcmFtZXMoZixhKTtlbHNle2xldCBfPWwuc3R5bGVzLFQ9ITE7aWYoIV8pe1Q9ITA7Y29uc3QgaWU9e307ZC5lYXNpbmcm'@;
put 'JihpZS5lYXNpbmc9ZC5lYXNpbmcpLF89X3MoaWUpfWEuY3VycmVudFRpbWUrPWQuZHVyYXRpb24rZC5kZWxheTtjb25zdCBXPXRoaXMudmlzaXRTdHlsZShfLGEpO1cuaXNFbXB0eVN0ZXA9VCxoPVd9cmV0dXJuIGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdz'@;
put 'OmQsc3R5bGU6aCxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPXRoaXMuX21ha2VTdHlsZUFzdChsLGEpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGQsYSksZH1fbWFrZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1bXSxoPUFycmF5LmlzQXJyYXkobC5zdHlsZXMp'@;
put 'P2wuc3R5bGVzOltsLnN0eWxlc107Zm9yKGxldCBUIG9mIGgpInN0cmluZyI9PXR5cGVvZiBUP1Q9PT1BZj9kLnB1c2goVCk6YS5lcnJvcnMucHVzaChuZXcgQXIoMzAwMiwhMSkpOmQucHVzaChTZWUoVCkpO2xldCBmPSExLF89bnVsbDtyZXR1cm4gZC5mb3JFYWNoKFQ9PntpZihUIGluc3Rh'@;
put 'bmNlb2YgTWFwJiYoVC5oYXMoImVhc2luZyIpJiYoXz1ULmdldCgiZWFzaW5nIiksVC5kZWxldGUoImVhc2luZyIpKSwhZikpZm9yKGxldCBXIG9mIFQudmFsdWVzKCkpaWYoVy50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2Y9ITA7YnJlYWt9fSkse3R5cGU6NixzdHlsZXM6ZCxlYXNp'@;
put 'bmc6XyxvZmZzZXQ6bC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOmYsb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7bGV0IGg9YS5jdXJyZW50VGltZSxmPWEuY3VycmVudFRpbWU7ZCYmZj4wJiYoZi09ZC5k'@;
put 'dXJhdGlvbitkLmRlbGF5KSxsLnN0eWxlcy5mb3JFYWNoKF89Pnsic3RyaW5nIiE9dHlwZW9mIF8mJl8uZm9yRWFjaCgoVCxXKT0+e2NvbnN0IGllPWEuY29sbGVjdGVkU3R5bGVzLmdldChhLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxwZT1pZS5nZXQoVyk7bGV0IHdlPSEwO3BlJiYoZiE9aCYm'@;
put 'Zj49cGUuc3RhcnRUaW1lJiZoPD1wZS5lbmRUaW1lJiYoYS5lcnJvcnMucHVzaChmdW5jdGlvbiBzTWUoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IEFyKDMwMTAsITEpfSgpKSx3ZT0hMSksZj1wZS5zdGFydFRpbWUpLHdlJiZpZS5zZXQoVyx7c3RhcnRUaW1lOmYsZW5kVGltZTpofSksYS5vcHRp'@;
put 'b25zJiZmdW5jdGlvbiBOTWUoYyxsLGEpe2NvbnN0IGQ9bC5wYXJhbXN8fHt9LGg9eGVlKGMpO2gubGVuZ3RoJiZoLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZil8fGEucHVzaChmdW5jdGlvbiBKU2UoYyl7cmV0dXJuIG5ldyBBcigzMDAxLCExKX0oKSl9KX0oVCxhLm9wdGlvbnMs'@;
put 'YS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gYU1lKCl7cmV0dXJuIG5ldyBBcigzMDExLCExKX0oKSks'@;
put 'ZDtsZXQgZj0wO2NvbnN0IF89W107bGV0IFQ9ITEsVz0hMSxpZT0wO2NvbnN0IHBlPWwuc3RlcHMubWFwKEV0PT57Y29uc3QgU3Q9dGhpcy5fbWFrZVN0eWxlQXN0KEV0LGEpO2xldCBKdD1udWxsIT1TdC5vZmZzZXQ/U3Qub2Zmc2V0OmZ1bmN0aW9uIEtNZShjKXtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIGMpcmV0dXJuIG51bGw7bGV0IGw9bnVsbDtpZihBcnJheS5pc0FycmF5KGMpKWMuZm9yRWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmYS5oYXMoIm9mZnNldCIpKXtjb25zdCBkPWE7bD1wYXJzZUZsb2F0KGQuZ2V0KCJvZmZzZXQiKSksZC5kZWxldGUoIm9mZnNldCIpfX0pO2Vs'@;
put 'c2UgaWYoYyBpbnN0YW5jZW9mIE1hcCYmYy5oYXMoIm9mZnNldCIpKXtjb25zdCBhPWM7bD1wYXJzZUZsb2F0KGEuZ2V0KCJvZmZzZXQiKSksYS5kZWxldGUoIm9mZnNldCIpfXJldHVybiBsfShTdC5zdHlsZXMpLG5uPTA7cmV0dXJuIG51bGwhPUp0JiYoZisrLG5uPVN0Lm9mZnNldD1KdCks'@;
put 'Vz1XfHxubjwwfHxubj4xLFQ9VHx8bm48aWUsaWU9bm4sXy5wdXNoKG5uKSxTdH0pO1cmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gbE1lKCl7cmV0dXJuIG5ldyBBcigzMDEyLCExKX0oKSksVCYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBjTWUoKXtyZXR1cm4gbmV3IEFyKDMyMDAsITEpfSgp'@;
put 'KTtjb25zdCB3ZT1sLnN0ZXBzLmxlbmd0aDtsZXQgRWU9MDtmPjAmJmY8d2U/YS5lcnJvcnMucHVzaChmdW5jdGlvbiB1TWUoKXtyZXR1cm4gbmV3IEFyKDMyMDIsITEpfSgpKTowPT1mJiYoRWU9MS8od2UtMSkpO2NvbnN0IFplPXdlLTEsaXQ9YS5jdXJyZW50VGltZSxldD1hLmN1cnJlbnRB'@;
put 'bmltYXRlVGltaW5ncyx5dD1ldC5kdXJhdGlvbjtyZXR1cm4gcGUuZm9yRWFjaCgoRXQsU3QpPT57Y29uc3QgSnQ9RWU+MD9TdD09WmU/MTpFZSpTdDpfW1N0XSxubj1KdCp5dDthLmN1cnJlbnRUaW1lPWl0K2V0LmRlbGF5K25uLGV0LmR1cmF0aW9uPW5uLHRoaXMuX3ZhbGlkYXRlU3R5bGVB'@;
put 'c3QoRXQsYSksRXQub2Zmc2V0PUp0LGQuc3R5bGVzLnB1c2goRXQpfSksZH12aXNpdFJlZmVyZW5jZShsLGEpe3JldHVybnt0eXBlOjgsYW5pbWF0aW9uOnYxKHRoaXMsR2IobC5hbmltYXRpb24pLGEpLG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtyZXR1'@;
put 'cm4gYS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYobCxhKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixhKSxvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0UXVlcnkobCxh'@;
put 'KXtjb25zdCBkPWEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaD1sLm9wdGlvbnN8fHt9O2EucXVlcnlDb3VudCsrLGEuY3VycmVudFF1ZXJ5PWw7Y29uc3RbZixfXT1mdW5jdGlvbiBHTWUoYyl7Y29uc3QgbD0hIWMuc3BsaXQoL1xzKixccyovKS5maW5kKGE9PiI6c2VsZiI9PWEpO3JldHVybiBs'@;
put 'JiYoYz1jLnJlcGxhY2UoWU1lLCIiKSksYz1jLnJlcGxhY2UoL0BcKi9nLFpFKS5yZXBsYWNlKC9AXHcrL2csYT0+WkUrIi0iK2Euc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxOSCksW2MsbF19KGwuc2VsZWN0b3IpO2EuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZC5sZW5ndGg/ZCsi'@;
put 'ICIrZjpmLG0xKGEuY29sbGVjdGVkU3R5bGVzLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgVD12MSh0aGlzLEdiKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm4gYS5jdXJyZW50UXVlcnk9bnVsbCxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQse3R5cGU6MTEsc2VsZWN0b3I6'@;
put 'ZixsaW1pdDpoLmxpbWl0fHwwLG9wdGlvbmFsOiEhaC5vcHRpb25hbCxpbmNsdWRlU2VsZjpfLGFuaW1hdGlvbjpULG9yaWdpbmFsU2VsZWN0b3I6bC5zZWxlY3RvcixvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcihsLGEpe2EuY3VycmVudFF1ZXJ5fHxhLmVycm9ycy5wdXNo'@;
put 'KGZ1bmN0aW9uIGRNZSgpe3JldHVybiBuZXcgQXIoMzAxMywhMSl9KCkpO2NvbnN0IGQ9ImZ1bGwiPT09bC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06WUUobC50aW1pbmdzLGEuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246djEodGhpcyxH'@;
put 'YihsLmFuaW1hdGlvbiksYSksdGltaW5nczpkLG9wdGlvbnM6bnVsbH19fWNsYXNzIHFNZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVycm9ycz1sLHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVs'@;
put 'bCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5k'@;
put 'PW5ldyBTZXR9fWZ1bmN0aW9uIHBnKGMpe3JldHVybiBjPyhjPVdiKGMpKS5wYXJhbXMmJihjLnBhcmFtcz1mdW5jdGlvbiAkTWUoYyl7cmV0dXJuIGM/V2IoYyk6bnVsbH0oYy5wYXJhbXMpKTpjPXt9LGN9ZnVuY3Rpb24gVUgoYyxsLGEpe3JldHVybntkdXJhdGlvbjpjLGRlbGF5OmwsZWFz'@;
put 'aW5nOmF9fWZ1bmN0aW9uIFpIKGMsbCxhLGQsaCxmLF89bnVsbCxUPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6YyxrZXlmcmFtZXM6bCxwcmVTdHlsZVByb3BzOmEscG9zdFN0eWxlUHJvcHM6ZCxkdXJhdGlvbjpoLGRlbGF5OmYsdG90YWxUaW1lOmgrZixlYXNpbmc6XyxzdWJUaW1lbGlu'@;
put 'ZTpUfX1jbGFzcyBLRXtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldChsKXtyZXR1cm4gdGhpcy5fbWFwLmdldChsKXx8W119YXBwZW5kKGwsYSl7bGV0IGQ9dGhpcy5fbWFwLmdldChsKTtkfHx0aGlzLl9tYXAuc2V0KGwsZD1bXSksZC5wdXNoKC4uLmEpfWhhcyhsKXtyZXR1'@;
put 'cm4gdGhpcy5fbWFwLmhhcyhsKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX1jb25zdCBleGU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLG54ZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gWUgoYyxsLGEsZCxoLGY9bmV3IE1hcCxfPW5ldyBNYXAsVCxXLGllPVtdKXty'@;
put 'ZXR1cm4obmV3IHJ4ZSkuYnVpbGRLZXlmcmFtZXMoYyxsLGEsZCxoLGYsXyxULFcsaWUpfWNsYXNzIHJ4ZXtidWlsZEtleWZyYW1lcyhsLGEsZCxoLGYsXyxULFcsaWUscGU9W10pe2llPWllfHxuZXcgS0U7Y29uc3Qgd2U9bmV3IFdIKGwsYSxpZSxoLGYscGUsW10pO3dlLm9wdGlvbnM9Vztj'@;
put 'b25zdCBFZT1XLmRlbGF5P0JmKFcuZGVsYXkpOjA7d2UuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAoRWUpLHdlLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW19dLG51bGwsd2UuZXJyb3JzLFcpLHYxKHRoaXMsZCx3ZSk7Y29uc3QgWmU9d2UudGltZWxpbmVzLmZpbHRlcihpdD0+'@;
put 'aXQuY29udGFpbnNBbmltYXRpb24oKSk7aWYoWmUubGVuZ3RoJiZULnNpemUpe2xldCBpdDtmb3IobGV0IGV0PVplLmxlbmd0aC0xO2V0Pj0wO2V0LS0pe2NvbnN0IHl0PVplW2V0XTtpZih5dC5lbGVtZW50PT09YSl7aXQ9eXQ7YnJlYWt9fWl0JiYhaXQuYWxsb3dPbmx5VGltZWxpbmVTdHls'@;
put 'ZXMoKSYmaXQuc2V0U3R5bGVzKFtUXSxudWxsLHdlLmVycm9ycyxXKX1yZXR1cm4gWmUubGVuZ3RoP1plLm1hcChpdD0+aXQuYnVpbGRLZXlmcmFtZXMoKSk6W1pIKGEsW10sW10sW10sMCxFZSwiIiwhMSldfXZpc2l0VHJpZ2dlcihsLGEpe312aXNpdFN0YXRlKGwsYSl7fXZpc2l0VHJhbnNp'@;
put 'dGlvbihsLGEpe312aXNpdEFuaW1hdGVDaGlsZChsLGEpe2NvbnN0IGQ9YS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGEuZWxlbWVudCk7aWYoZCl7Y29uc3QgaD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKSxmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLF89dGhpcy5fdmlzaXRT'@;
put 'dWJJbnN0cnVjdGlvbnMoZCxoLGgub3B0aW9ucyk7ZiE9XyYmYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoXyl9YS5wcmV2aW91c05vZGU9bH12aXNpdEFuaW1hdGVSZWYobCxhKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2QudHJhbnNmb3JtSW50b05ld1RpbWVs'@;
put 'aW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW2wub3B0aW9ucyxsLmFuaW1hdGlvbi5vcHRpb25zXSxhLGQpLHRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sZCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUp'@;
put 'LGEucHJldmlvdXNOb2RlPWx9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGwsYSxkKXtmb3IoY29uc3QgaCBvZiBsKXtjb25zdCBmPWg/LmRlbGF5O2lmKGYpe2NvbnN0IF89Im51bWJlciI9PXR5cGVvZiBmP2Y6QmYoJGIoZixoPy5wYXJhbXM/P3t9LGEuZXJyb3JzKSk7ZC5kZWxheU5leHRT'@;
put 'dGVwKF8pfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGwsYSxkKXtsZXQgZj1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBfPW51bGwhPWQuZHVyYXRpb24/QmYoZC5kdXJhdGlvbik6bnVsbCxUPW51bGwhPWQuZGVsYXk/QmYoZC5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PV8m'@;
put 'JmwuZm9yRWFjaChXPT57Y29uc3QgaWU9YS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUoVyxfLFQpO2Y9TWF0aC5tYXgoZixpZS5kdXJhdGlvbitpZS5kZWxheSl9KSxmfXZpc2l0UmVmZXJlbmNlKGwsYSl7YS51cGRhdGVPcHRpb25zKGwub3B0aW9ucywhMCksdjEodGhpcyxsLmFuaW1h'@;
put 'dGlvbixhKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U2VxdWVuY2UobCxhKXtjb25zdCBkPWEuc3ViQ29udGV4dENvdW50O2xldCBoPWE7Y29uc3QgZj1sLm9wdGlvbnM7aWYoZiYmKGYucGFyYW1zfHxmLmRlbGF5KSYmKGg9YS5jcmVhdGVTdWJDb250ZXh0KGYpLGgudHJhbnNmb3JtSW50b05l'@;
put 'd1RpbWVsaW5lKCksbnVsbCE9Zi5kZWxheSkpezY9PWgucHJldmlvdXNOb2RlLnR5cGUmJihoLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxoLnByZXZpb3VzTm9kZT1YRSk7Y29uc3QgXz1CZihmLmRlbGF5KTtoLmRlbGF5TmV4dFN0ZXAoXyl9bC5zdGVwcy5sZW5n'@;
put 'dGgmJihsLnN0ZXBzLmZvckVhY2goXz0+djEodGhpcyxfLGgpKSxoLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxoLnN1YkNvbnRleHRDb3VudD5kJiZoLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0R3JvdXAobCxhKXtj'@;
put 'b25zdCBkPVtdO2xldCBoPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IGY9bC5vcHRpb25zJiZsLm9wdGlvbnMuZGVsYXk/QmYobC5vcHRpb25zLmRlbGF5KTowO2wuc3RlcHMuZm9yRWFjaChfPT57Y29uc3QgVD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKTtmJiZU'@;
put 'LmRlbGF5TmV4dFN0ZXAoZiksdjEodGhpcyxfLFQpLGg9TWF0aC5tYXgoaCxULmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZC5wdXNoKFQuY3VycmVudFRpbWVsaW5lKX0pLGQuZm9yRWFjaChfPT5hLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKF8p'@;
put 'KSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShoKSxhLnByZXZpb3VzTm9kZT1sfV92aXNpdFRpbWluZyhsLGEpe2lmKGwuZHluYW1pYyl7Y29uc3QgZD1sLnN0clZhbHVlO3JldHVybiBZRShhLnBhcmFtcz8kYihkLGEucGFyYW1zLGEuZXJyb3JzKTpkLGEuZXJyb3JzKX1yZXR1cm57ZHVy'@;
put 'YXRpb246bC5kdXJhdGlvbixkZWxheTpsLmRlbGF5LGVhc2luZzpsLmVhc2luZ319dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyhsLnRpbWluZ3MsYSksaD1hLmN1cnJlbnRUaW1lbGluZTtkLmRlbGF5JiYoYS5pbmNy'@;
put 'ZW1lbnRUaW1lKGQuZGVsYXkpLGguc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGY9bC5zdHlsZTs1PT1mLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpOihhLmluY3JlbWVudFRpbWUoZC5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGYsYSksaC5hcHBseVN0eWxlc1RvS2V5'@;
put 'ZnJhbWUoKSksYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLGg9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWgmJmQuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZkLmZvcndh'@;
put 'cmRGcmFtZSgpO2NvbnN0IGY9aCYmaC5lYXNpbmd8fGwuZWFzaW5nO2wuaXNFbXB0eVN0ZXA/ZC5hcHBseUVtcHR5U3RlcChmKTpkLnNldFN0eWxlcyhsLnN0eWxlcyxmLGEuZXJyb3JzLGEub3B0aW9ucyksYS5wcmV2aW91c05vZGU9bH12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9YS5j'@;
put 'dXJyZW50QW5pbWF0ZVRpbWluZ3MsaD1hLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixmPWQuZHVyYXRpb24sVD1hLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7VC5lYXNpbmc9ZC5lYXNpbmcsbC5zdHlsZXMuZm9yRWFjaChXPT57VC5mb3J3YXJkVGltZSgoVy5vZmZzZXR8'@;
put 'fDApKmYpLFQuc2V0U3R5bGVzKFcuc3R5bGVzLFcuZWFzaW5nLGEuZXJyb3JzLGEub3B0aW9ucyksVC5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoVCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCtm'@;
put 'KSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGg9bC5vcHRpb25zfHx7fSxmPWguZGVsYXk/QmYoaC5kZWxheSk6MDtmJiYoNj09PWEucHJldmlvdXNOb2RlLnR5cGV8fDA9PWQmJmEuY3VycmVudFRpbWVsaW5l'@;
put 'Lmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxhLnByZXZpb3VzTm9kZT1YRSk7bGV0IF89ZDtjb25zdCBUPWEuaW52b2tlUXVlcnkobC5zZWxlY3RvcixsLm9yaWdpbmFsU2VsZWN0b3IsbC5saW1pdCxsLmlu'@;
put 'Y2x1ZGVTZWxmLCEhaC5vcHRpb25hbCxhLmVycm9ycyk7YS5jdXJyZW50UXVlcnlUb3RhbD1ULmxlbmd0aDtsZXQgVz1udWxsO1QuZm9yRWFjaCgoaWUscGUpPT57YS5jdXJyZW50UXVlcnlJbmRleD1wZTtjb25zdCB3ZT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zLGllKTtmJiZ3ZS5k'@;
put 'ZWxheU5leHRTdGVwKGYpLGllPT09YS5lbGVtZW50JiYoVz13ZS5jdXJyZW50VGltZWxpbmUpLHYxKHRoaXMsbC5hbmltYXRpb24sd2UpLHdlLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxfPU1hdGgubWF4KF8sd2UuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1l'@;
put 'KX0pLGEuY3VycmVudFF1ZXJ5SW5kZXg9MCxhLmN1cnJlbnRRdWVyeVRvdGFsPTAsYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoXyksVyYmKGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoVyksYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50'@;
put 'U3R5bGVzKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdGFnZ2VyKGwsYSl7Y29uc3QgZD1hLnBhcmVudENvbnRleHQsaD1hLmN1cnJlbnRUaW1lbGluZSxmPWwudGltaW5ncyxfPU1hdGguYWJzKGYuZHVyYXRpb24pLFQ9XyooYS5jdXJyZW50UXVlcnlUb3RhbC0xKTtsZXQgVz1fKmEuY3Vy'@;
put 'cmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGYuZHVyYXRpb248MD8icmV2ZXJzZSI6Zi5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6Vz1ULVc7YnJlYWs7Y2FzZSJmdWxsIjpXPWQuY3VycmVudFN0YWdnZXJUaW1lfWNvbnN0IHBlPWEuY3VycmVudFRpbWVsaW5lO1cmJnBlLmRlbGF5TmV4dFN0ZXAoVyk7'@;
put 'Y29uc3Qgd2U9cGUuY3VycmVudFRpbWU7djEodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sLGQuY3VycmVudFN0YWdnZXJUaW1lPWguY3VycmVudFRpbWUtd2UrKGguc3RhcnRUaW1lLWQuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fWNvbnN0IFhFPXt9O2NsYXNzIFdI'@;
put 'e2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdWJJbnN0cnVjdGlvbnM9ZCx0aGlzLl9lbnRlckNsYXNzTmFtZT1oLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWYsdGhpcy5lcnJvcnM9Xyx0aGlzLnRpbWVsaW5lcz1ULHRoaXMu'@;
put 'cGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9WEUsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlz'@;
put 'LmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPVd8fG5ldyBKRSh0aGlzLl9kcml2ZXIsYSwwKSxULnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKGwsYSl7aWYoIWwp'@;
put 'cmV0dXJuO2NvbnN0IGQ9bDtsZXQgaD10aGlzLm9wdGlvbnM7bnVsbCE9ZC5kdXJhdGlvbiYmKGguZHVyYXRpb249QmYoZC5kdXJhdGlvbikpLG51bGwhPWQuZGVsYXkmJihoLmRlbGF5PUJmKGQuZGVsYXkpKTtjb25zdCBmPWQucGFyYW1zO2lmKGYpe2xldCBfPWgucGFyYW1zO198fChfPXRo'@;
put 'aXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKGYpLmZvckVhY2goVD0+eyghYXx8IV8uaGFzT3duUHJvcGVydHkoVCkpJiYoX1tUXT0kYihmW1RdLF8sdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtjb25zdCBsPXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgYT10aGlz'@;
put 'Lm9wdGlvbnMucGFyYW1zO2lmKGEpe2NvbnN0IGQ9bC5wYXJhbXM9e307T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57ZFtoXT1hW2hdfSl9fXJldHVybiBsfWNyZWF0ZVN1YkNvbnRleHQobD1udWxsLGEsZCl7Y29uc3QgaD1hfHx0aGlzLmVsZW1lbnQsZj1uZXcgV0godGhpcy5fZHJpdmVy'@;
put 'LGgsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhoLGR8fDApKTtyZXR1cm4gZi5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05v'@;
put 'ZGUsZi5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsZi5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksZi51cGRhdGVPcHRpb25zKGwpLGYuY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxmLmN1cnJlbnRRdWVyeVRvdGFs'@;
put 'PXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsZi5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxmfXRyYW5zZm9ybUludG9OZXdUaW1lbGluZShsKXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9WEUsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxp'@;
put 'bmUuZm9yayh0aGlzLmVsZW1lbnQsbCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwsYSxkKXtjb25zdCBoPXtkdXJhdGlvbjphPz9sLmR1cmF0aW9uLGRlbGF5OnRoaXMu'@;
put 'Y3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhkPz8wKStsLmRlbGF5LGVhc2luZzoiIn0sZj1uZXcgaXhlKHRoaXMuX2RyaXZlcixsLmVsZW1lbnQsbC5rZXlmcmFtZXMsbC5wcmVTdHlsZVByb3BzLGwucG9zdFN0eWxlUHJvcHMsaCxsLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1'@;
put 'cm4gdGhpcy50aW1lbGluZXMucHVzaChmKSxofWluY3JlbWVudFRpbWUobCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rbCl9ZGVsYXlOZXh0U3RlcChsKXtsPjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0'@;
put 'ZXAobCl9aW52b2tlUXVlcnkobCxhLGQsaCxmLF8pe2xldCBUPVtdO2lmKGgmJlQucHVzaCh0aGlzLmVsZW1lbnQpLGwubGVuZ3RoPjApe2w9KGw9bC5yZXBsYWNlKGV4ZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKG54ZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xl'@;
put 'dCBpZT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LGwsMSE9ZCk7MCE9PWQmJihpZT1kPDA/aWUuc2xpY2UoaWUubGVuZ3RoK2QsaWUubGVuZ3RoKTppZS5zbGljZSgwLGQpKSxULnB1c2goLi4uaWUpfXJldHVybiFmJiYwPT1ULmxlbmd0aCYmXy5wdXNoKGZ1bmN0aW9uIGhNZShj'@;
put 'KXtyZXR1cm4gbmV3IEFyKDMwMTQsITEpfSgpKSxUfX1jbGFzcyBKRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN0YXJ0VGltZT1kLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1oLHRoaXMuZHVyYXRpb249MCx0aGlz'@;
put 'LmVhc2luZz1udWxsLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9bmV3IE1hcCx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPW5ldyBNYXAsdGhpcy5f'@;
put 'cGVuZGluZ1N0eWxlcz1uZXcgTWFwLHRoaXMuX2JhY2tGaWxsPW5ldyBNYXAsdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMu'@;
put 'X2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGlu'@;
put 'ZVN0eWxlc0xvb2t1cC5zZXQoYSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRoaXMuaGFzQ3VycmVudFN0'@;
put 'eWxlUHJvcGVydGllcygpO2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbn1kZWxheU5leHRTdGVw'@;
put 'KGwpe2NvbnN0IGE9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8YT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK2wpLGEmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1l'@;
put 'Kz1sfWZvcmsobCxhKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgSkUodGhpcy5fZHJpdmVyLGwsYXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUm'@;
put 'Jih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5f'@;
put 'a2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUobCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPWws'@;
put 'dGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKGwsYSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KGwse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTph'@;
put 'fSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKGwpe2wmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGwpO2ZvcihsZXRbYSxkXW9m'@;
put 'IHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChhLGR8fEFmKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsQWYpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKGwsYSxkLGgpe2EmJnRo'@;
put 'aXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGEpO2NvbnN0IGY9aCYmaC5wYXJhbXN8fHt9LF89ZnVuY3Rpb24gb3hlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2xldCBkO3JldHVybiBjLmZvckVhY2goaD0+e2lmKCIqIj09PWgpe2Q9ZHx8bC5rZXlzKCk7Zm9yKGxldCBmIG9mIGQp'@;
put 'YS5zZXQoZixBZil9ZWxzZSBIcChoLGEpfSksYX0obCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFtULFddb2YgXyl7Y29uc3QgaWU9JGIoVyxmLGQpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KFQsaWUpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKFQpfHx0aGlz'@;
put 'Ll9iYWNrRmlsbC5zZXQoVCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQoVCk/P0FmKSx0aGlzLl91cGRhdGVTdHlsZShULGllKX19YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKChs'@;
put 'LGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5oYXMoYSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQo'@;
put 'YSxsKX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W2wsYV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGwsYSksdGhpcy5fdXBkYXRlU3R5bGUobCxhKX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1l'@;
put 'cy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgYSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpbC5wdXNoKGEpO3JldHVybiBsfW1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCl7bC5fc3R5bGVTdW1tYXJ5LmZvckVhY2goKGEsZCk9'@;
put 'Pntjb25zdCBoPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoZCk7KCFofHxhLnRpbWU+aC50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoZCxhLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCBsPW5ldyBTZXQsYT1uZXcgU2V0LGQ9MT09'@;
put 'PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgaD1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoVCxXKT0+e2NvbnN0IGllPUhwKFQsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7aWUuZm9yRWFjaCgocGUsd2UpPT57IiEiPT09cGU/bC5hZGQod2UpOnBlPT09'@;
put 'QWYmJmEuYWRkKHdlKX0pLGR8fGllLnNldCgib2Zmc2V0IixXL3RoaXMuZHVyYXRpb24pLGgucHVzaChpZSl9KTtjb25zdCBmPWwuc2l6ZT9XRShsLnZhbHVlcygpKTpbXSxfPWEuc2l6ZT9XRShhLnZhbHVlcygpKTpbXTtpZihkKXtjb25zdCBUPWhbMF0sVz1uZXcgTWFwKFQpO1Quc2V0KCJv'@;
put 'ZmZzZXQiLDApLFcuc2V0KCJvZmZzZXQiLDEpLGg9W1QsV119cmV0dXJuIFpIKHRoaXMuZWxlbWVudCxoLGYsXyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgaXhlIGV4dGVuZHMgSkV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVD0hMSl7c3Vw'@;
put 'ZXIobCxhLF8uZGVsYXkpLHRoaXMua2V5ZnJhbWVzPWQsdGhpcy5wcmVTdHlsZVByb3BzPWgsdGhpcy5wb3N0U3R5bGVQcm9wcz1mLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPVQsdGhpcy50aW1pbmdzPXtkdXJhdGlvbjpfLmR1cmF0aW9uLGRlbGF5Ol8uZGVsYXksZWFzaW5nOl8u'@;
put 'ZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBsPXRoaXMua2V5ZnJhbWVzLHtkZWxheTphLGR1cmF0aW9uOmQsZWFzaW5nOmh9PXRoaXMudGltaW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdL'@;
put 'ZXlmcmFtZSYmYSl7Y29uc3QgZj1bXSxfPWQrYSxUPWEvXyxXPUhwKGxbMF0pO1cuc2V0KCJvZmZzZXQiLDApLGYucHVzaChXKTtjb25zdCBpZT1IcChsWzBdKTtpZS5zZXQoIm9mZnNldCIsRGVlKFQpKSxmLnB1c2goaWUpO2NvbnN0IHBlPWwubGVuZ3RoLTE7Zm9yKGxldCB3ZT0xO3dlPD1w'@;
put 'ZTt3ZSsrKXtsZXQgRWU9SHAobFt3ZV0pO2NvbnN0IFplPUVlLmdldCgib2Zmc2V0Iik7RWUuc2V0KCJvZmZzZXQiLERlZSgoYStaZSpkKS9fKSksZi5wdXNoKEVlKX1kPV8sYT0wLGg9IiIsbD1mfXJldHVybiBaSCh0aGlzLmVsZW1lbnQsbCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0'@;
put 'U3R5bGVQcm9wcyxkLGEsaCwhMCl9fWZ1bmN0aW9uIERlZShjLGw9Myl7Y29uc3QgYT1NYXRoLnBvdygxMCxsLTEpO3JldHVybiBNYXRoLnJvdW5kKGMqYSkvYX1jbGFzcyBHSHt9Y29uc3Qgc3hlPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4'@;
put 'V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFy'@;
put 'Z2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2'@;
put 'ZSJdKTtjbGFzcyBheGUgZXh0ZW5kcyBHSHtub3JtYWxpemVQcm9wZXJ0eU5hbWUobCxhKXtyZXR1cm4gakgobCl9bm9ybWFsaXplU3R5bGVWYWx1ZShsLGEsZCxoKXtsZXQgZj0iIjtjb25zdCBfPWQudG9TdHJpbmcoKS50cmltKCk7aWYoc3hlLmhhcyhhKSYmMCE9PWQmJiIwIiE9PWQpaWYo'@;
put 'Im51bWJlciI9PXR5cGVvZiBkKWY9InB4IjtlbHNle2NvbnN0IFQ9ZC5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO1QmJjA9PVRbMV0ubGVuZ3RoJiZoLnB1c2goZnVuY3Rpb24gdE1lKGMsbCl7cmV0dXJuIG5ldyBBcigzMDA1LCExKX0oKSl9cmV0dXJuIF8rZn19ZnVuY3Rpb24g'@;
put 'SWVlKGMsbCxhLGQsaCxmLF8sVCxXLGllLHBlLHdlLEVlKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6Yyx0cmlnZ2VyTmFtZTpsLGlzUmVtb3ZhbFRyYW5zaXRpb246aCxmcm9tU3RhdGU6YSxmcm9tU3R5bGVzOmYsdG9TdGF0ZTpkLHRvU3R5bGVzOl8sdGltZWxpbmVzOlQscXVlcmllZEVsZW1l'@;
put 'bnRzOlcscHJlU3R5bGVQcm9wczppZSxwb3N0U3R5bGVQcm9wczpwZSx0b3RhbFRpbWU6d2UsZXJyb3JzOkVlfX1jb25zdCAkSD17fTtjbGFzcyBMZWV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3RyaWdnZXJOYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9zdGF0ZVN0eWxlcz1kfW1hdGNoKGws'@;
put 'YSxkLGgpe3JldHVybiBmdW5jdGlvbiBseGUoYyxsLGEsZCxoKXtyZXR1cm4gYy5zb21lKGY9PmYobCxhLGQsaCkpfSh0aGlzLmFzdC5tYXRjaGVycyxsLGEsZCxoKX1idWlsZFN0eWxlcyhsLGEsZCl7bGV0IGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KCIqIik7cmV0dXJuIHZvaWQgMCE9PWwm'@;
put 'JihoPXRoaXMuX3N0YXRlU3R5bGVzLmdldChsPy50b1N0cmluZygpKXx8aCksaD9oLmJ1aWxkU3R5bGVzKGEsZCk6bmV3IE1hcH1idWlsZChsLGEsZCxoLGYsXyxULFcsaWUscGUpe2NvbnN0IHdlPVtdLEVlPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHwkSCxp'@;
put 'dD10aGlzLmJ1aWxkU3R5bGVzKGQsVCYmVC5wYXJhbXN8fCRILHdlKSxldD1XJiZXLnBhcmFtc3x8JEgseXQ9dGhpcy5idWlsZFN0eWxlcyhoLGV0LHdlKSxFdD1uZXcgU2V0LFN0PW5ldyBNYXAsSnQ9bmV3IE1hcCxubj0idm9pZCI9PT1oLHZuPXtwYXJhbXM6Y3hlKGV0LEVlKSxkZWxheTp0'@;
put 'aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sTm49cGU/W106WUgobCxhLHRoaXMuYXN0LmFuaW1hdGlvbixmLF8saXQseXQsdm4saWUsd2UpO2xldCBjcj0wO2lmKE5uLmZvckVhY2goRWk9Pntjcj1NYXRoLm1heChFaS5kdXJhdGlvbitFaS5kZWxheSxjcil9KSx3ZS5sZW5ndGgpcmV0dXJuIEll'@;
put 'ZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxubixpdCx5dCxbXSxbXSxTdCxKdCxjcix3ZSk7Tm4uZm9yRWFjaChFaT0+e2NvbnN0IElpPUVpLmVsZW1lbnQsZnI9bTEoU3QsSWksbmV3IFNldCk7RWkucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGpyPT5mci5hZGQoanIpKTtjb25zdCBpaT1tMShK'@;
put 'dCxJaSxuZXcgU2V0KTtFaS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGpyPT5paS5hZGQoanIpKSxJaSE9PWEmJkV0LmFkZChJaSl9KTtjb25zdCBJcj1XRShFdC52YWx1ZXMoKSk7cmV0dXJuIEllZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxubixpdCx5dCxObixJcixTdCxKdCxjcil9fWZ1'@;
put 'bmN0aW9uIGN4ZShjLGwpe2NvbnN0IGE9V2IobCk7Zm9yKGNvbnN0IGQgaW4gYyljLmhhc093blByb3BlcnR5KGQpJiZudWxsIT1jW2RdJiYoYVtkXT1jW2RdKTtyZXR1cm4gYX1jbGFzcyB1eGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc3R5bGVzPWwsdGhpcy5kZWZhdWx0UGFyYW1zPWEs'@;
put 'dGhpcy5ub3JtYWxpemVyPWR9YnVpbGRTdHlsZXMobCxhKXtjb25zdCBkPW5ldyBNYXAsaD1XYih0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGY9Pntjb25zdCBfPWxbZl07bnVsbCE9PV8mJihoW2ZdPV8pfSksdGhpcy5zdHlsZXMuc3R5bGVzLmZv'@;
put 'ckVhY2goZj0+eyJzdHJpbmciIT10eXBlb2YgZiYmZi5mb3JFYWNoKChfLFQpPT57XyYmKF89JGIoXyxoLGEpKTtjb25zdCBXPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoVCxhKTtfPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKFQsVyxfLGEpLGQu'@;
put 'c2V0KFQsXyl9KX0pLGR9fWNsYXNzIGh4ZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsYS5zdGF0ZXMuZm9yRWFjaChoPT57dGhpcy5zdGF0'@;
put 'ZXMuc2V0KGgubmFtZSxuZXcgdXhlKGguc3R5bGUsaC5vcHRpb25zJiZoLm9wdGlvbnMucGFyYW1zfHx7fSxkKSl9KSxSZWUodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksUmVlKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxhLnRyYW5zaXRpb25zLmZvckVhY2goaD0+e3RoaXMudHJhbnNpdGlv'@;
put 'bkZhY3Rvcmllcy5wdXNoKG5ldyBMZWUobCxoLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiBmeGUoYyxsLGEpe3JldHVybiBuZXcgTGVlKGMse3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlso'@;
put 'XyxUKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sbCl9KGwsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJpZXMoKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfW1hdGNoVHJhbnNpdGlvbihsLGEsZCxoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9u'@;
put 'RmFjdG9yaWVzLmZpbmQoXz0+Xy5tYXRjaChsLGEsZCxoKSl8fG51bGx9bWF0Y2hTdHlsZXMobCxhLGQpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyhsLGEsZCl9fWZ1bmN0aW9uIFJlZShjLGwsYSl7Yy5oYXMobCk/Yy5oYXMoYSl8fGMuc2V0KGEsYy5nZXQo'@;
put 'bCkpOmMuaGFzKGEpJiZjLnNldChsLGMuZ2V0KGEpKX1jb25zdCBweGU9bmV3IEtFO2NsYXNzIGd4ZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuX2RyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVy'@;
put 'c0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIobCxhKXtjb25zdCBkPVtdLGY9ekgodGhpcy5fZHJpdmVyLGEsZCxbXSk7aWYoZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gYk1lKGMpe3JldHVybiBuZXcgQXIoMzUwMywhMSl9KCk7dGhpcy5fYW5pbWF0aW9ucy5zZXQobCxm'@;
put 'KX1fYnVpbGRQbGF5ZXIobCxhLGQpe2NvbnN0IGg9bC5lbGVtZW50LGY9Z2VlKHRoaXMuX25vcm1hbGl6ZXIsbC5rZXlmcmFtZXMsYSxkKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUoaCxmLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxbXSwhMCl9Y3JlYXRlKGwsYSxkPXt9KXtj'@;
put 'b25zdCBoPVtdLGY9dGhpcy5fYW5pbWF0aW9ucy5nZXQobCk7bGV0IF87Y29uc3QgVD1uZXcgTWFwO2lmKGY/KF89WUgodGhpcy5fZHJpdmVyLGEsZixISCx6RSxuZXcgTWFwLG5ldyBNYXAsZCxweGUsaCksXy5mb3JFYWNoKHBlPT57Y29uc3Qgd2U9bTEoVCxwZS5lbGVtZW50LG5ldyBNYXAp'@;
put 'O3BlLnBvc3RTdHlsZVByb3BzLmZvckVhY2goRWU9PndlLnNldChFZSxudWxsKSl9KSk6KGgucHVzaChmdW5jdGlvbiB5TWUoKXtyZXR1cm4gbmV3IEFyKDMzMDAsITEpfSgpKSxfPVtdKSxoLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiB3TWUoYyl7cmV0dXJuIG5ldyBBcigzNTA0LCExKX0oKTtU'@;
put 'LmZvckVhY2goKHBlLHdlKT0+e3BlLmZvckVhY2goKEVlLFplKT0+e3BlLnNldChaZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKHdlLFplLEFmKSl9KX0pO2NvbnN0IGllPUZwKF8ubWFwKHBlPT57Y29uc3Qgd2U9VC5nZXQocGUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVy'@;
put 'KHBlLG5ldyBNYXAsd2UpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQobCxpZSksaWUub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kobCkpLHRoaXMucGxheWVycy5wdXNoKGllKSxpZX1kZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UGxheWVyKGwpO2EuZGVzdHJveSgpLHRo'@;
put 'aXMuX3BsYXllcnNCeUlkLmRlbGV0ZShsKTtjb25zdCBkPXRoaXMucGxheWVycy5pbmRleE9mKGEpO2Q+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoZCwxKX1fZ2V0UGxheWVyKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIENNZShjKXty'@;
put 'ZXR1cm4gbmV3IEFyKDMzMDEsITEpfSgpO3JldHVybiBhfWxpc3RlbihsLGEsZCxoKXtjb25zdCBmPU9IKGEsIiIsIiIsIiIpO3JldHVybiBMSCh0aGlzLl9nZXRQbGF5ZXIobCksZCxmLGgpLCgpPT57fX1jb21tYW5kKGwsYSxkLGgpe2lmKCJyZWdpc3RlciI9PWQpcmV0dXJuIHZvaWQgdGhp'@;
put 'cy5yZWdpc3RlcihsLGhbMF0pO2lmKCJjcmVhdGUiPT1kKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKGwsYSxoWzBdfHx7fSk7Y29uc3QgZj10aGlzLl9nZXRQbGF5ZXIobCk7c3dpdGNoKGQpe2Nhc2UicGxheSI6Zi5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6Zi5wYXVzZSgpO2JyZWFrO2Nh'@;
put 'c2UicmVzZXQiOmYucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOmYucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpmLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6Zi5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6Zi5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGhbMF0pKTti'@;
put 'cmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveShsKX19fWNvbnN0IE9lZT0ibmctYW5pbWF0ZS1xdWV1ZWQiLHFIPSJuZy1hbmltYXRlLWRpc2FibGVkIix5eGU9W10sUGVlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiEx'@;
put 'LHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSx3eGU9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LHAyPSJfX25nX3JlbW92ZWQiO2NsYXNzIEtIe2dldCBwYXJhbXMoKXtyZXR1cm4g'@;
put 'dGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3RvcihsLGE9IiIpe3RoaXMubmFtZXNwYWNlSWQ9YTtjb25zdCBkPWwmJmwuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbiB4eGUoYyl7cmV0dXJuIGM/P251bGx9KGQ/bC52YWx1ZTpsKSxkKXtjb25zdCBm'@;
put 'PVdiKGwpO2RlbGV0ZSBmLnZhbHVlLHRoaXMub3B0aW9ucz1mfWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRpb25zKGwpe2NvbnN0IGE9bC5wYXJhbXM7aWYoYSl7Y29uc3QgZD10aGlzLm9wdGlvbnMu'@;
put 'cGFyYW1zO09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e251bGw9PWRbaF0mJihkW2hdPWFbaF0pfSl9fX1jb25zdCBxYj0idm9pZCIsWEg9bmV3IEtIKHFiKTtjbGFzcyBDeGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaWQ9bCx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQs'@;
put 'dGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK2wsaGQoYSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4obCxhLGQsaCl7aWYoIXRo'@;
put 'aXMuX3RyaWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiBTTWUoYyxsKXtyZXR1cm4gbmV3IEFyKDMzMDIsITEpfSgpO2lmKG51bGw9PWR8fDA9PWQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIE1NZShjKXtyZXR1cm4gbmV3IEFyKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiBFeGUoYyl7cmV0'@;
put 'dXJuInN0YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiB4TWUoYyxsKXtyZXR1cm4gbmV3IEFyKDM0MDAsITEpfSgpO2NvbnN0IGY9bTEodGhpcy5fZWxlbWVudExpc3RlbmVycyxsLFtdKSxfPXtuYW1lOmEscGhhc2U6ZCxjYWxsYmFjazpofTtmLnB1c2goXyk7Y29uc3Qg'@;
put 'VD1tMSh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIFQuaGFzKGEpfHwoaGQobCxVRSksaGQobCxVRSsiLSIrYSksVC5zZXQoYSxYSCkpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBXPWYuaW5kZXhPZihfKTtXPj0wJiZmLnNw'@;
put 'bGljZShXLDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8VC5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGwpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGwsYSksITApfV9nZXRUcmlnZ2VyKGwpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGwp'@;
put 'O2lmKCFhKXRocm93IGZ1bmN0aW9uIEVNZShjKXtyZXR1cm4gbmV3IEFyKDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29uc3QgZj10aGlzLl9nZXRUcmlnZ2VyKGEpLF89bmV3IEpIKHRoaXMuaWQsYSxsKTtsZXQgVD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVt'@;
put 'ZW50LmdldChsKTtUfHwoaGQobCxVRSksaGQobCxVRSsiLSIrYSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxUPW5ldyBNYXApKTtsZXQgVz1ULmdldChhKTtjb25zdCBpZT1uZXcgS0goZCx0aGlzLmlkKTtpZighKGQmJmQuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZX'@;
put 'JiZpZS5hYnNvcmJPcHRpb25zKFcub3B0aW9ucyksVC5zZXQoYSxpZSksV3x8KFc9WEgpLGllLnZhbHVlIT09cWImJlcudmFsdWU9PT1pZS52YWx1ZSl7aWYoIWZ1bmN0aW9uIFR4ZShjLGwpe2NvbnN0IGE9T2JqZWN0LmtleXMoYyksZD1PYmplY3Qua2V5cyhsKTtpZihhLmxlbmd0aCE9ZC5s'@;
put 'ZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZighbC5oYXNPd25Qcm9wZXJ0eShmKXx8Y1tmXSE9PWxbZl0pcmV0dXJuITF9cmV0dXJuITB9KFcucGFyYW1zLGllLnBhcmFtcykpe2NvbnN0IGV0PVtdLHl0PWYubWF0Y2hTdHlsZXMoVy52'@;
put 'YWx1ZSxXLnBhcmFtcyxldCksRXQ9Zi5tYXRjaFN0eWxlcyhpZS52YWx1ZSxpZS5wYXJhbXMsZXQpO2V0Lmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IoZXQpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57ZmcobCx5dCksaGgobCxFdCl9KX1yZXR1cm59Y29uc3QgRWU9bTEo'@;
put 'dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsbCxbXSk7RWUuZm9yRWFjaChldD0+e2V0Lm5hbWVzcGFjZUlkPT10aGlzLmlkJiZldC50cmlnZ2VyTmFtZT09YSYmZXQucXVldWVkJiZldC5kZXN0cm95KCl9KTtsZXQgWmU9Zi5tYXRjaFRyYW5zaXRpb24oVy52YWx1ZSxpZS52YWx1ZSxs'@;
put 'LGllLnBhcmFtcyksaXQ9ITE7aWYoIVplKXtpZighaClyZXR1cm47WmU9Zi5mYWxsYmFja1RyYW5zaXRpb24saXQ9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6YSx0cmFuc2l0aW9uOlpl'@;
put 'LGZyb21TdGF0ZTpXLHRvU3RhdGU6aWUscGxheWVyOl8saXNGYWxsYmFja1RyYW5zaXRpb246aXR9KSxpdHx8KGhkKGwsT2VlKSxfLm9uU3RhcnQoKCk9PntROChsLE9lZSl9KSksXy5vbkRvbmUoKCk9PntsZXQgZXQ9dGhpcy5wbGF5ZXJzLmluZGV4T2YoXyk7ZXQ+PTAmJnRoaXMucGxheWVy'@;
put 'cy5zcGxpY2UoZXQsMSk7Y29uc3QgeXQ9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKHl0KXtsZXQgRXQ9eXQuaW5kZXhPZihfKTtFdD49MCYmeXQuc3BsaWNlKEV0LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKF8pLEVlLnB1c2goXyksX31kZXJlZ2lzdGVyKGwpe3Ro'@;
put 'aXMuX3RyaWdnZXJzLmRlbGV0ZShsKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goYT0+YS5kZWxldGUobCkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGQsYS5maWx0ZXIoaD0+aC5uYW1lIT1s'@;
put 'KSl9KX1jbGVhckVsZW1lbnRDYWNoZShsKXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZShsKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZShsKTtjb25zdCBhPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiYoYS5mb3JFYWNoKGQ9PmQuZGVz'@;
put 'dHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUobCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeShsLFpFLCEwKTtkLmZvckVhY2goaD0+e2lmKGhbcDJdKXJldHVybjtjb25zdCBm'@;
put 'PXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQoaCk7Zi5zaXplP2YuZm9yRWFjaChfPT5fLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihoLGEsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgo'@;
put 'KT0+ZC5mb3JFYWNoKGg9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCkpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLGQsaCl7Y29uc3QgZj10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKSxfPW5ldyBNYXA7aWYoZil7Y29uc3QgVD1bXTtpZihmLmZvckVhY2goKFcsaWUp'@;
put 'PT57aWYoXy5zZXQoaWUsVy52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKGllKSl7Y29uc3QgcGU9dGhpcy50cmlnZ2VyKGwsaWUscWIsaCk7cGUmJlQucHVzaChwZSl9fSksVC5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITAsYSxf'@;
put 'KSxkJiZGcChUKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChsKSxkPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVs'@;
put 'ZW1lbnQuZ2V0KGwpO2lmKGEmJmQpe2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0IF89Zi5uYW1lO2lmKGguaGFzKF8pKXJldHVybjtoLmFkZChfKTtjb25zdCBXPXRoaXMuX3RyaWdnZXJzLmdldChfKS5mYWxsYmFja1RyYW5zaXRpb24saWU9ZC5nZXQoXyl8fFhILHBlPW5l'@;
put 'dyBLSChxYiksd2U9bmV3IEpIKHRoaXMuaWQsXyxsKTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDpsLHRyaWdnZXJOYW1lOl8sdHJhbnNpdGlvbjpXLGZyb21TdGF0ZTppZSx0b1N0YXRlOnBlLHBsYXllcjp3ZSxpc0ZhbGxiYWNr'@;
put 'VHJhbnNpdGlvbjohMH0pfSl9fXJlbW92ZU5vZGUobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZTtpZihsLmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSwhMCkpcmV0dXJuO2xl'@;
put 'dCBoPSExO2lmKGQudG90YWxBbmltYXRpb25zKXtjb25zdCBmPWQucGxheWVycy5sZW5ndGg/ZC5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk6W107aWYoZiYmZi5sZW5ndGgpaD0hMDtlbHNle2xldCBfPWw7Zm9yKDtfPV8ucGFyZW50Tm9kZTspaWYoZC5zdGF0ZXNCeUVsZW1lbnQu'@;
put 'Z2V0KF8pKXtoPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCksaClkLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsbCwhMSxhKTtlbHNle2NvbnN0IGY9bFtwMl07KCFmfHxmPT09UGVlKSYmKGQuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVh'@;
put 'ckVsZW1lbnRDYWNoZShsKSksZC5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpLGQuX29uUmVtb3ZhbENvbXBsZXRlKGwsYSkpfX1pbnNlcnROb2RlKGwsYSl7aGQobCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGwpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMu'@;
put 'X3F1ZXVlLmZvckVhY2goZD0+e2NvbnN0IGg9ZC5wbGF5ZXI7aWYoaC5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGY9ZC5lbGVtZW50LF89dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQoZik7XyYmXy5mb3JFYWNoKFQ9PntpZihULm5hbWU9PWQudHJpZ2dlck5hbWUpe2NvbnN0IFc9T0goZixk'@;
put 'LnRyaWdnZXJOYW1lLGQuZnJvbVN0YXRlLnZhbHVlLGQudG9TdGF0ZS52YWx1ZSk7Vy5fZGF0YT1sLExIKGQucGxheWVyLFQucGhhc2UsVyxULmNhbGxiYWNrKX19KSxoLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntoLmRlc3Ryb3koKX0pOmEucHVzaChk'@;
put 'KX0pLHRoaXMuX3F1ZXVlPVtdLGEuc29ydCgoZCxoKT0+e2NvbnN0IGY9ZC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxfPWgudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PWZ8fDA9PV8/Zi1fOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQuZWxlbWVudCxo'@;
put 'LmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KGwpe3RoaXMucGxheWVycy5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LGwpfX1jbGFzcyBTeGV7X29uUmVtb3ZhbENvbXBsZXRlKGwsYSl7dGhpcy5vblJl'@;
put 'bW92YWxDb21wbGV0ZShsLGEpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhp'@;
put 'cy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0'@;
put 'aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlz'@;
put 'Lm9uUmVtb3ZhbENvbXBsZXRlPShoLGYpPT57fX1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IGw9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaChhPT57YS5wbGF5ZXJzLmZvckVhY2goZD0+e2QucXVldWVkJiZsLnB1c2goZCl9KX0pLGx9Y3JlYXRlTmFtZXNwYWNlKGws'@;
put 'YSl7Y29uc3QgZD1uZXcgQ3hlKGwsYSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsYSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxhKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGEsZCksdGhpcy5j'@;
put 'b2xsZWN0RW50ZXJFbGVtZW50KGEpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF09ZH1fYmFsYW5jZU5hbWVzcGFjZUxpc3QobCxhKXtjb25zdCBkPXRoaXMuX25hbWVzcGFjZUxpc3QsaD10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGQubGVuZ3RoLTE+PTApe2xldCBfPSExLFQ9'@;
put 'dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChhKTtmb3IoO1Q7KXtjb25zdCBXPWguZ2V0KFQpO2lmKFcpe2NvbnN0IGllPWQuaW5kZXhPZihXKTtkLnNwbGljZShpZSsxLDAsbCksXz0hMDticmVha31UPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoVCl9X3x8ZC51bnNoaWZ0KGwp'@;
put 'fWVsc2UgZC5wdXNoKGwpO3JldHVybiBoLnNldChhLGwpLGx9cmVnaXN0ZXIobCxhKXtsZXQgZD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07cmV0dXJuIGR8fChkPXRoaXMuY3JlYXRlTmFtZXNwYWNlKGwsYSkpLGR9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkKXtsZXQgaD10aGlzLl9uYW1lc3Bh'@;
put 'Y2VMb29rdXBbbF07aCYmaC5yZWdpc3RlcihhLGQpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kobCxhKXtsJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9Pntjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3Ro'@;
put 'aXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGQuaG9zdEVsZW1lbnQpO2NvbnN0IGg9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGQpO2g+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGgsMSksZC5kZXN0cm95KGEpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29r'@;
put 'dXBbbF19KSl9X2ZldGNoTmFtZXNwYWNlKGwpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGwpe2NvbnN0IGE9bmV3IFNldCxkPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihkKWZvcihsZXQgaCBvZiBkLnZhbHVlcygpKWlm'@;
put 'KGgubmFtZXNwYWNlSWQpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoaC5uYW1lc3BhY2VJZCk7ZiYmYS5hZGQoZil9cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxoKXtpZihRRShhKSl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtpZihmKXJldHVybiBmLnRyaWdnZXIoYSxk'@;
put 'LGgpLCEwfXJldHVybiExfWluc2VydE5vZGUobCxhLGQsaCl7aWYoIVFFKGEpKXJldHVybjtjb25zdCBmPWFbcDJdO2lmKGYmJmYuc2V0Rm9yUmVtb3ZhbCl7Zi5zZXRGb3JSZW1vdmFsPSExLGYuc2V0Rm9yTW92ZT0hMDtjb25zdCBfPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRl'@;
put 'eE9mKGEpO18+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UoXywxKX1pZihsKXtjb25zdCBfPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO18mJl8uaW5zZXJ0Tm9kZShhLGQpfWgmJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKX1jb2xsZWN0RW50ZXJFbGVtZW50KGwp'@;
put 'e3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKGwpfW1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpe2E/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQobCksaGQobCxxSCkpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCkmJih0aGlzLmRp'@;
put 'c2FibGVkTm9kZXMuZGVsZXRlKGwpLFE4KGwscUgpKX1yZW1vdmVOb2RlKGwsYSxkKXtpZihRRShhKSl7Y29uc3QgaD1sP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpOm51bGw7aD9oLnJlbW92ZU5vZGUoYSxkKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSwhMSxkKTtjb25zdCBmPXRo'@;
put 'aXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGEpO2YmJmYuaWQhPT1sJiZmLnJlbW92ZU5vZGUoYSxkKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGEsZCl9bWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLGQsaCxmKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChh'@;
put 'KSxhW3AyXT17bmFtZXNwYWNlSWQ6bCxzZXRGb3JSZW1vdmFsOmgsaGFzQW5pbWF0aW9uOmQscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpmfX1saXN0ZW4obCxhLGQsaCxmKXtyZXR1cm4gUUUoYSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCkubGlzdGVu'@;
put 'KGEsZCxoLGYpOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbihsLGEsZCxoLGYpe3JldHVybiBsLnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsbC5lbGVtZW50LGwuZnJvbVN0YXRlLnZhbHVlLGwudG9TdGF0ZS52YWx1ZSxkLGgsbC5mcm9tU3RhdGUub3B0aW9ucyxsLnRvU3RhdGUub3B0'@;
put 'aW9ucyxhLGYpfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCl7bGV0IGE9dGhpcy5kcml2ZXIucXVlcnkobCxaRSwhMCk7YS5mb3JFYWNoKGQ9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGQpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihh'@;
put 'PXRoaXMuZHJpdmVyLnF1ZXJ5KGwsTkgsITApLGEuZm9yRWFjaChkPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoZCkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2Em'@;
put 'JmEuZm9yRWFjaChkPT57ZC5xdWV1ZWQ/ZC5tYXJrZWRGb3JEZXN0cm95PSEwOmQuZGVzdHJveSgpfSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT5kLmZp'@;
put 'bmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZShsPT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gRnAodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PmwoKSk7bCgpfSl9cHJvY2Vzc0xlYXZlTm9kZShsKXtjb25zdCBhPWxbcDJdO2lmKGEmJmEuc2V0'@;
put 'Rm9yUmVtb3ZhbCl7aWYobFtwMl09UGVlLGEubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKTtjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGEubmFtZXNwYWNlSWQpO2QmJmQuY2xlYXJFbGVtZW50Q2FjaGUobCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUo'@;
put 'bCxhLnNldEZvclJlbW92YWwpfWwuY2xhc3NMaXN0Py5jb250YWlucyhxSCkmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KGwsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChkPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQo'@;
put 'ZCwhMSl9KX1mbHVzaChsPS0xKXtsZXQgYT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoZCxoKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxoKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50'@;
put 'b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2QrKyloZCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbZF0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlz'@;
put 'Ll9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7Y29uc3QgZD1bXTt0cnl7YT10aGlzLl9mbHVzaEFuaW1hdGlvbnMoZCxsKX1maW5hbGx5e2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsr'@;
put 'KWRbaF0oKX19ZWxzZSBmb3IobGV0IGQ9MDtkPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7ZCsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbZF0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRF'@;
put 'bnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKGQ9PmQoKSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7Y29uc3QgZD10aGlzLl93aGVuUXVpZXRGbnM7dGhp'@;
put 'cy5fd2hlblF1aWV0Rm5zPVtdLGEubGVuZ3RoP0ZwKGEpLm9uRG9uZSgoKT0+e2QuZm9yRWFjaChoPT5oKCkpfSk6ZC5mb3JFYWNoKGg9PmgoKSl9fXJlcG9ydEVycm9yKGwpe3Rocm93IGZ1bmN0aW9uIGtNZShjKXtyZXR1cm4gbmV3IEFyKDM0MDIsITEpfSgpfV9mbHVzaEFuaW1hdGlvbnMo'@;
put 'bCxhKXtjb25zdCBkPW5ldyBLRSxoPVtdLGY9bmV3IE1hcCxfPVtdLFQ9bmV3IE1hcCxXPW5ldyBNYXAsaWU9bmV3IE1hcCxwZT1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKFFuPT57cGUuYWRkKFFuKTtjb25zdCBNcj10aGlzLmRyaXZlci5xdWVyeShRbiwiLm5nLWFuaW1h'@;
put 'dGUtcXVldWVkIiwhMCk7Zm9yKGxldCBfcj0wO19yPE1yLmxlbmd0aDtfcisrKXBlLmFkZChNcltfcl0pfSk7Y29uc3Qgd2U9dGhpcy5ib2R5Tm9kZSxFZT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksWmU9TmVlKEVlLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50'@;
put 'cyksaXQ9bmV3IE1hcDtsZXQgZXQ9MDtaZS5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj1ISCtldCsrO2l0LnNldChNcixfciksUW4uZm9yRWFjaCh2dD0+aGQodnQsX3IpKX0pO2NvbnN0IHl0PVtdLEV0PW5ldyBTZXQsU3Q9bmV3IFNldDtmb3IobGV0IFFuPTA7UW48dGhpcy5jb2xsZWN0'@;
put 'ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtRbisrKXtjb25zdCBNcj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbUW5dLF9yPU1yW3AyXTtfciYmX3Iuc2V0Rm9yUmVtb3ZhbCYmKHl0LnB1c2goTXIpLEV0LmFkZChNciksX3IuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KE1yLCIu'@;
put 'bmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2godnQ9PkV0LmFkZCh2dCkpOlN0LmFkZChNcikpfWNvbnN0IEp0PW5ldyBNYXAsbm49TmVlKEVlLEFycmF5LmZyb20oRXQpKTtubi5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj16RStldCsrO0p0LnNldChNcixfciksUW4uZm9yRWFjaCh2'@;
put 'dD0+aGQodnQsX3IpKX0pLGwucHVzaCgoKT0+e1plLmZvckVhY2goKFFuLE1yKT0+e2NvbnN0IF9yPWl0LmdldChNcik7UW4uZm9yRWFjaCh2dD0+UTgodnQsX3IpKX0pLG5uLmZvckVhY2goKFFuLE1yKT0+e2NvbnN0IF9yPUp0LmdldChNcik7UW4uZm9yRWFjaCh2dD0+UTgodnQsX3IpKX0p'@;
put 'LHl0LmZvckVhY2goUW49Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoUW4pfSl9KTtjb25zdCB2bj1bXSxObj1bXTtmb3IobGV0IFFuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7UW4+PTA7UW4tLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1FuXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGEp'@;
put 'LmZvckVhY2goX3I9Pntjb25zdCB2dD1fci5wbGF5ZXIsT3Q9X3IuZWxlbWVudDtpZih2bi5wdXNoKHZ0KSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtjb25zdCAkcj1PdFtwMl07aWYoJHImJiRyLnNldEZvck1vdmUpe2lmKCRyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMm'@;
put 'JiRyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKF9yLnRyaWdnZXJOYW1lKSl7Y29uc3QgWXI9JHIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5nZXQoX3IudHJpZ2dlck5hbWUpLE5yPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChfci5lbGVtZW50KTtpZihOciYmTnIuaGFzKF9yLnRyaWdn'@;
put 'ZXJOYW1lKSl7Y29uc3QgUmk9TnIuZ2V0KF9yLnRyaWdnZXJOYW1lKTtSaS52YWx1ZT1ZcixOci5zZXQoX3IudHJpZ2dlck5hbWUsUmkpfX1yZXR1cm4gdm9pZCB2dC5kZXN0cm95KCl9fWNvbnN0IGNuPSF3ZXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh3ZSxPdCksRW49SnQuZ2V0'@;
put 'KE90KSxQbj1pdC5nZXQoT3QpLEpuPXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oX3IsZCxQbixFbixjbik7aWYoSm4uZXJyb3JzJiZKbi5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIE5uLnB1c2goSm4pO2lmKGNuKXJldHVybiB2dC5vblN0YXJ0KCgpPT5mZyhPdCxKbi5mcm9tU3R5bGVzKSks'@;
put 'dnQub25EZXN0cm95KCgpPT5oaChPdCxKbi50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHZ0KTtpZihfci5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gdnQub25TdGFydCgoKT0+ZmcoT3QsSm4uZnJvbVN0eWxlcykpLHZ0Lm9uRGVzdHJveSgoKT0+aGgoT3QsSm4udG9TdHlsZXMpKSx2b2lk'@;
put 'IGgucHVzaCh2dCk7Y29uc3QgUHI9W107Sm4udGltZWxpbmVzLmZvckVhY2goJHI9Pnskci5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKCRyLmVsZW1lbnQpfHxQci5wdXNoKCRyKX0pLEpuLnRpbWVsaW5lcz1QcixkLmFwcGVuZChPdCxKbi50aW1l'@;
put 'bGluZXMpLF8ucHVzaCh7aW5zdHJ1Y3Rpb246Sm4scGxheWVyOnZ0LGVsZW1lbnQ6T3R9KSxKbi5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaCgkcj0+bTEoVCwkcixbXSkucHVzaCh2dCkpLEpuLnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoJHIsWXIpPT57aWYoJHIuc2l6ZSl7bGV0IE5yPVcuZ2V0'@;
put 'KFlyKTtOcnx8Vy5zZXQoWXIsTnI9bmV3IFNldCksJHIuZm9yRWFjaCgoUmksWG8pPT5Oci5hZGQoWG8pKX19KSxKbi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKCgkcixZcik9PntsZXQgTnI9aWUuZ2V0KFlyKTtOcnx8aWUuc2V0KFlyLE5yPW5ldyBTZXQpLCRyLmZvckVhY2goKFJpLFhvKT0+'@;
put 'TnIuYWRkKFhvKSl9KX0pO2lmKE5uLmxlbmd0aCl7Y29uc3QgUW49W107Tm4uZm9yRWFjaChNcj0+e1FuLnB1c2goZnVuY3Rpb24gQU1lKGMsbCl7cmV0dXJuIG5ldyBBcigzNTA1LCExKX0oKSl9KSx2bi5mb3JFYWNoKE1yPT5Nci5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoUW4pfWNv'@;
put 'bnN0IGNyPW5ldyBNYXAsSXI9bmV3IE1hcDtfLmZvckVhY2goUW49Pntjb25zdCBNcj1Rbi5lbGVtZW50O2QuaGFzKE1yKSYmKElyLnNldChNcixNciksdGhpcy5fYmVmb3JlQW5pbWF0aW9uQnVpbGQoUW4ucGxheWVyLm5hbWVzcGFjZUlkLFFuLmluc3RydWN0aW9uLGNyKSl9KSxoLmZvckVh'@;
put 'Y2goUW49Pntjb25zdCBNcj1Rbi5lbGVtZW50O3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhNciwhMSxRbi5uYW1lc3BhY2VJZCxRbi50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKHZ0PT57bTEoY3IsTXIsW10pLnB1c2godnQpLHZ0LmRlc3Ryb3koKX0pfSk7Y29uc3QgRWk9eXQuZmlsdGVy'@;
put 'KFFuPT5CZWUoUW4sVyxpZSkpLElpPW5ldyBNYXA7SGVlKElpLHRoaXMuZHJpdmVyLFN0LGllLEFmKS5mb3JFYWNoKFFuPT57QmVlKFFuLFcsaWUpJiZFaS5wdXNoKFFuKX0pO2NvbnN0IGlpPW5ldyBNYXA7WmUuZm9yRWFjaCgoUW4sTXIpPT57SGVlKGlpLHRoaXMuZHJpdmVyLG5ldyBTZXQo'@;
put 'UW4pLFcsIiEiKX0pLEVpLmZvckVhY2goUW49Pntjb25zdCBNcj1JaS5nZXQoUW4pLF9yPWlpLmdldChRbik7SWkuc2V0KFFuLG5ldyBNYXAoWy4uLk1yPy5lbnRyaWVzKCk/P1tdLC4uLl9yPy5lbnRyaWVzKCk/P1tdXSkpfSk7Y29uc3QganI9W10sT249W10sRnI9e307Xy5mb3JFYWNoKFFu'@;
put 'PT57Y29uc3R7ZWxlbWVudDpNcixwbGF5ZXI6X3IsaW5zdHJ1Y3Rpb246dnR9PVFuO2lmKGQuaGFzKE1yKSl7aWYocGUuaGFzKE1yKSlyZXR1cm4gX3Iub25EZXN0cm95KCgpPT5oaChNcix2dC50b1N0eWxlcykpLF9yLmRpc2FibGVkPSEwLF9yLm92ZXJyaWRlVG90YWxUaW1lKHZ0LnRvdGFs'@;
put 'VGltZSksdm9pZCBoLnB1c2goX3IpO2xldCBPdD1GcjtpZihJci5zaXplPjEpe2xldCBFbj1Ncjtjb25zdCBQbj1bXTtmb3IoO0VuPUVuLnBhcmVudE5vZGU7KXtjb25zdCBKbj1Jci5nZXQoRW4pO2lmKEpuKXtPdD1KbjticmVha31Qbi5wdXNoKEVuKX1Qbi5mb3JFYWNoKEpuPT5Jci5zZXQo'@;
put 'Sm4sT3QpKX1jb25zdCBjbj10aGlzLl9idWlsZEFuaW1hdGlvbihfci5uYW1lc3BhY2VJZCx2dCxjcixmLGlpLElpKTtpZihfci5zZXRSZWFsUGxheWVyKGNuKSxPdD09PUZyKWpyLnB1c2goX3IpO2Vsc2V7Y29uc3QgRW49dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChPdCk7RW4mJkVuLmxl'@;
put 'bmd0aCYmKF9yLnBhcmVudFBsYXllcj1GcChFbikpLGgucHVzaChfcil9fWVsc2UgZmcoTXIsdnQuZnJvbVN0eWxlcyksX3Iub25EZXN0cm95KCgpPT5oaChNcix2dC50b1N0eWxlcykpLE9uLnB1c2goX3IpLHBlLmhhcyhNcikmJmgucHVzaChfcil9KSxPbi5mb3JFYWNoKFFuPT57Y29uc3Qg'@;
put 'TXI9Zi5nZXQoUW4uZWxlbWVudCk7aWYoTXImJk1yLmxlbmd0aCl7Y29uc3QgX3I9RnAoTXIpO1FuLnNldFJlYWxQbGF5ZXIoX3IpfX0pLGguZm9yRWFjaChRbj0+e1FuLnBhcmVudFBsYXllcj9Rbi5zeW5jUGxheWVyRXZlbnRzKFFuLnBhcmVudFBsYXllcik6UW4uZGVzdHJveSgpfSk7Zm9y'@;
put 'KGxldCBRbj0wO1FuPHl0Lmxlbmd0aDtRbisrKXtjb25zdCBNcj15dFtRbl0sX3I9TXJbcDJdO2lmKFE4KE1yLHpFKSxfciYmX3IuaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCB2dD1bXTtpZihULnNpemUpe2xldCBjbj1ULmdldChNcik7Y24mJmNuLmxlbmd0aCYmdnQucHVzaCguLi5jbik7'@;
put 'bGV0IEVuPXRoaXMuZHJpdmVyLnF1ZXJ5KE1yLE5ILCEwKTtmb3IobGV0IFBuPTA7UG48RW4ubGVuZ3RoO1BuKyspe2xldCBKbj1ULmdldChFbltQbl0pO0puJiZKbi5sZW5ndGgmJnZ0LnB1c2goLi4uSm4pfX1jb25zdCBPdD12dC5maWx0ZXIoY249PiFjbi5kZXN0cm95ZWQpO090Lmxlbmd0'@;
put 'aD9reGUodGhpcyxNcixPdCk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKE1yKX1yZXR1cm4geXQubGVuZ3RoPTAsanIuZm9yRWFjaChRbj0+e3RoaXMucGxheWVycy5wdXNoKFFuKSxRbi5vbkRvbmUoKCk9PntRbi5kZXN0cm95KCk7Y29uc3QgTXI9dGhpcy5wbGF5ZXJzLmluZGV4T2YoUW4pO3Ro'@;
put 'aXMucGxheWVycy5zcGxpY2UoTXIsMSl9KSxRbi5wbGF5KCl9KSxqcn1hZnRlckZsdXNoKGwpe3RoaXMuX2ZsdXNoRm5zLnB1c2gobCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKGwpfV9nZXRQcmV2aW91c1BsYXllcnMobCxhLGQsaCxmKXts'@;
put 'ZXQgXz1bXTtpZihhKXtjb25zdCBUPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO1QmJihfPVQpfWVsc2V7Y29uc3QgVD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKFQpe2NvbnN0IFc9IWZ8fGY9PXFiO1QuZm9yRWFjaChpZT0+e2llLnF1ZXVlZHx8IVcmJmll'@;
put 'LnRyaWdnZXJOYW1lIT1ofHxfLnB1c2goaWUpfSl9fXJldHVybihkfHxoKSYmKF89Xy5maWx0ZXIoVD0+IShkJiZkIT1ULm5hbWVzcGFjZUlkfHxoJiZoIT1ULnRyaWdnZXJOYW1lKSkpLF99X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKGwsYSxkKXtjb25zdCBmPWEuZWxlbWVudCxfPWEuaXNSZW1v'@;
put 'dmFsVHJhbnNpdGlvbj92b2lkIDA6bCxUPWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6YS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgVyBvZiBhLnRpbWVsaW5lcyl7Y29uc3QgaWU9Vy5lbGVtZW50LHBlPWllIT09Zix3ZT1tMShkLGllLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMo'@;
put 'aWUscGUsXyxULGEudG9TdGF0ZSkuZm9yRWFjaChaZT0+e2NvbnN0IGl0PVplLmdldFJlYWxQbGF5ZXIoKTtpdC5iZWZvcmVEZXN0cm95JiZpdC5iZWZvcmVEZXN0cm95KCksWmUuZGVzdHJveSgpLHdlLnB1c2goWmUpfSl9ZmcoZixhLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihsLGEs'@;
put 'ZCxoLGYsXyl7Y29uc3QgVD1hLnRyaWdnZXJOYW1lLFc9YS5lbGVtZW50LGllPVtdLHBlPW5ldyBTZXQsd2U9bmV3IFNldCxFZT1hLnRpbWVsaW5lcy5tYXAoaXQ9Pntjb25zdCBldD1pdC5lbGVtZW50O3BlLmFkZChldCk7Y29uc3QgeXQ9ZXRbcDJdO2lmKHl0JiZ5dC5yZW1vdmVkQmVmb3Jl'@;
put 'UXVlcmllZClyZXR1cm4gbmV3IG9iKGl0LmR1cmF0aW9uLGl0LmRlbGF5KTtjb25zdCBFdD1ldCE9PVcsU3Q9ZnVuY3Rpb24gQXhlKGMpe2NvbnN0IGw9W107cmV0dXJuIFZlZShjLGwpLGx9KChkLmdldChldCl8fHl4ZSkubWFwKGNyPT5jci5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoY3I9'@;
put 'PiEhY3IuZWxlbWVudCYmY3IuZWxlbWVudD09PWV0KSxKdD1mLmdldChldCksbm49Xy5nZXQoZXQpLHZuPWdlZSh0aGlzLl9ub3JtYWxpemVyLGl0LmtleWZyYW1lcyxKdCxubiksTm49dGhpcy5fYnVpbGRQbGF5ZXIoaXQsdm4sU3QpO2lmKGl0LnN1YlRpbWVsaW5lJiZoJiZ3ZS5hZGQoZXQp'@;
put 'LEV0KXtjb25zdCBjcj1uZXcgSkgobCxULGV0KTtjci5zZXRSZWFsUGxheWVyKE5uKSxpZS5wdXNoKGNyKX1yZXR1cm4gTm59KTtpZS5mb3JFYWNoKGl0PT57bTEodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxpdC5lbGVtZW50LFtdKS5wdXNoKGl0KSxpdC5vbkRvbmUoKCk9PmZ1bmN0'@;
put 'aW9uIE14ZShjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7aWYoZCl7aWYoZC5sZW5ndGgpe2NvbnN0IGg9ZC5pbmRleE9mKGEpO2Quc3BsaWNlKGgsMSl9MD09ZC5sZW5ndGgmJmMuZGVsZXRlKGwpfXJldHVybiBkfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGl0LmVsZW1lbnQsaXQpKX0p'@;
put 'LHBlLmZvckVhY2goaXQ9PmhkKGl0LENlZSkpO2NvbnN0IFplPUZwKEVlKTtyZXR1cm4gWmUub25EZXN0cm95KCgpPT57cGUuZm9yRWFjaChpdD0+UTgoaXQsQ2VlKSksaGgoVyxhLnRvU3R5bGVzKX0pLHdlLmZvckVhY2goaXQ9PnttMShoLGl0LFtdKS5wdXNoKFplKX0pLFplfV9idWlsZFBs'@;
put 'YXllcihsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZShsLmVsZW1lbnQsYSxsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcsZCk6bmV3IG9iKGwuZHVyYXRpb24sbC5kZWxheSl9fWNsYXNzIEpIe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWVzcGFjZUlk'@;
put 'PWwsdGhpcy50cmlnZ2VyTmFtZT1hLHRoaXMuZWxlbWVudD1kLHRoaXMuX3BsYXllcj1uZXcgb2IsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5tYXJr'@;
put 'ZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRSZWFsUGxheWVyKGwpe3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj1sLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5mb3JFYWNoKChhLGQpPT57YS5m'@;
put 'b3JFYWNoKGg9PkxIKGwsZCx2b2lkIDAsaCkpfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmNsZWFyKCksdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUobC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX1nZXRSZWFsUGxheWVyKCl7cmV0dXJuIHRo'@;
put 'aXMuX3BsYXllcn1vdmVycmlkZVRvdGFsVGltZShsKXt0aGlzLnRvdGFsVGltZT1sfXN5bmNQbGF5ZXJFdmVudHMobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmwub25TdGFydCgoKT0+YS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLGwub25Eb25lKCgpPT50'@;
put 'aGlzLmZpbmlzaCgpKSxsLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KGwsYSl7bTEodGhpcy5fcXVldWVkQ2FsbGJhY2tzLGwsW10pLnB1c2goYSl9b25Eb25lKGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIixsKSx0aGlzLl9wbGF5ZXIu'@;
put 'b25Eb25lKGwpfW9uU3RhcnQobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0IixsKSx0aGlzLl9wbGF5ZXIub25TdGFydChsKX1vbkRlc3Ryb3kobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLGwpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3ko'@;
put 'bCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIu'@;
put 'cGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5f'@;
put 'cGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24obCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbihsKX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPXRoaXMu'@;
put 'X3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmYS50cmlnZ2VyQ2FsbGJhY2sobCl9fWZ1bmN0aW9uIFFFKGMpe3JldHVybiBjJiYxPT09Yy5ub2RlVHlwZX1mdW5jdGlvbiBGZWUoYyxsKXtjb25zdCBhPWMuc3R5bGUuZGlzcGxheTtyZXR1cm4gYy5zdHlsZS5kaXNwbGF5PWw/PyJub25lIixh'@;
put 'fWZ1bmN0aW9uIEhlZShjLGwsYSxkLGgpe2NvbnN0IGY9W107YS5mb3JFYWNoKFc9PmYucHVzaChGZWUoVykpKTtjb25zdCBfPVtdO2QuZm9yRWFjaCgoVyxpZSk9Pntjb25zdCBwZT1uZXcgTWFwO1cuZm9yRWFjaCh3ZT0+e2NvbnN0IEVlPWwuY29tcHV0ZVN0eWxlKGllLHdlLGgpO3BlLnNl'@;
put 'dCh3ZSxFZSksKCFFZXx8MD09RWUubGVuZ3RoKSYmKGllW3AyXT13eGUsXy5wdXNoKGllKSl9KSxjLnNldChpZSxwZSl9KTtsZXQgVD0wO3JldHVybiBhLmZvckVhY2goVz0+RmVlKFcsZltUKytdKSksX31mdW5jdGlvbiBOZWUoYyxsKXtjb25zdCBhPW5ldyBNYXA7aWYoYy5mb3JFYWNoKFQ9'@;
put 'PmEuc2V0KFQsW10pKSwwPT1sLmxlbmd0aClyZXR1cm4gYTtjb25zdCBoPW5ldyBTZXQobCksZj1uZXcgTWFwO2Z1bmN0aW9uIF8oVCl7aWYoIVQpcmV0dXJuIDE7bGV0IFc9Zi5nZXQoVCk7aWYoVylyZXR1cm4gVztjb25zdCBpZT1ULnBhcmVudE5vZGU7cmV0dXJuIFc9YS5oYXMoaWUpP2ll'@;
put 'OmguaGFzKGllKT8xOl8oaWUpLGYuc2V0KFQsVyksV31yZXR1cm4gbC5mb3JFYWNoKFQ9Pntjb25zdCBXPV8oVCk7MSE9PVcmJmEuZ2V0KFcpLnB1c2goVCl9KSxhfWZ1bmN0aW9uIGhkKGMsbCl7Yy5jbGFzc0xpc3Q/LmFkZChsKX1mdW5jdGlvbiBROChjLGwpe2MuY2xhc3NMaXN0Py5yZW1v'@;
put 'dmUobCl9ZnVuY3Rpb24ga3hlKGMsbCxhKXtGcChhKS5vbkRvbmUoKCk9PmMucHJvY2Vzc0xlYXZlTm9kZShsKSl9ZnVuY3Rpb24gVmVlKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXTtkIGluc3RhbmNlb2YgVks/VmVlKGQucGxheWVycyxsKTpsLnB1c2go'@;
put 'ZCl9fWZ1bmN0aW9uIEJlZShjLGwsYSl7Y29uc3QgZD1hLmdldChjKTtpZighZClyZXR1cm4hMTtsZXQgaD1sLmdldChjKTtyZXR1cm4gaD9kLmZvckVhY2goZj0+aC5hZGQoZikpOmwuc2V0KGMsZCksYS5kZWxldGUoYyksITB9Y2xhc3MgZWt7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuYm9k'@;
put 'eU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGgsZik9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IFN4ZShsLGEsZCksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGd4ZShs'@;
put 'LGEsZCksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShoLGYpfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCxoLGYpe2NvbnN0IF89bCsiLSIraDtsZXQgVD10aGlzLl90cmlnZ2VyQ2FjaGVbX107aWYoIVQpe2NvbnN0'@;
put 'IFc9W10scGU9ekgodGhpcy5fZHJpdmVyLGYsVyxbXSk7aWYoVy5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gdk1lKGMsbCl7cmV0dXJuIG5ldyBBcigzNDA0LCExKX0oKTtUPWZ1bmN0aW9uIGR4ZShjLGwsYSl7cmV0dXJuIG5ldyBoeGUoYyxsLGEpfShoLHBlLHRoaXMuX25vcm1hbGl6ZXIpLHRo'@;
put 'aXMuX3RyaWdnZXJDYWNoZVtfXT1UfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEsaCxUKX1yZWdpc3RlcihsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIobCxhKX1kZXN0cm95KGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGws'@;
put 'YSl9b25JbnNlcnQobCxhLGQsaCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKGwsYSxkLGgpfW9uUmVtb3ZlKGwsYSxkKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUobCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2lu'@;
put 'ZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKX1wcm9jZXNzKGwsYSxkLGgpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W2YsX109bWVlKGQpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQoZixhLF8saCl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIobCxhLGQs'@;
put 'aCl9bGlzdGVuKGwsYSxkLGgsZil7aWYoIkAiPT1kLmNoYXJBdCgwKSl7Y29uc3RbXyxUXT1tZWUoZCk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihfLGEsVCxmKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4obCxhLGQsaCxmKX1mbHVzaChsPS0xKXt0'@;
put 'aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKGwpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4uLnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzXX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5n'@;
put 'aW5lLndoZW5SZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpfX1sZXQgSXhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlz'@;
put 'Ll9zdGFydFN0eWxlcz1kLHRoaXMuX2VuZFN0eWxlcz1oLHRoaXMuX3N0YXRlPTA7bGV0IGY9Yy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChhKTtmfHxjLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGEsZj1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWZ9c3RhcnQoKXt0aGlz'@;
put 'Ll9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJmhoKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihoaCh0aGlzLl9lbGVtZW50LHRoaXMuX2lu'@;
put 'aXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKGhoKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKGMuaW5pdGlhbFN0eWxlc0J5RWxlbWVu'@;
put 'dC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRTdHlsZXMmJihmZyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoZmcodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0'@;
put 'eWxlcz1udWxsKSxoaCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1yZXR1cm4gYy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwLGN9KSgpO2Z1bmN0aW9uIFFIKGMpe2xldCBsPW51bGw7cmV0dXJuIGMuZm9yRWFjaCgoYSxkKT0+'@;
put 'eyhmdW5jdGlvbiBMeGUoYyl7cmV0dXJuImRpc3BsYXkiPT09Y3x8InBvc2l0aW9uIj09PWN9KShkKSYmKGw9bHx8bmV3IE1hcCxsLnNldChkLGEpKX0pLGx9Y2xhc3MgamVle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuZWxlbWVudD1sLHRoaXMua2V5ZnJhbWVzPWEsdGhpcy5vcHRpb25z'@;
put 'PWQsdGhpcy5fc3BlY2lhbFN0eWxlcz1oLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlz'@;
put 'Ll9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJlbnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWQuZHVyYXRpb24sdGhpcy5fZGVsYXk9ZC5kZWxheXx8MCx0'@;
put 'aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhp'@;
put 'cy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2NvbnN0IGw9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVs'@;
put 'ZW1lbnQsbCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpuZXcgTWFwLHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsKCk9PnRoaXMuX29uRmluaXNoKCkpfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0'@;
put 'aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJuIGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhkKSl9KSxhfV90cmlnZ2Vy'@;
put 'V2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChhKSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2lu'@;
put 'YWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0'@;
put 'aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMu'@;
put 'aW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNo'@;
put 'ZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2Vs'@;
put 'KCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0'@;
put 'aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMu'@;
put 'ZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtjb25zdCBs'@;
put 'PW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoZCxoKT0+eyJvZmZzZXQiIT09aCYmbC5zZXQoaCx0aGlzLl9maW5pc2hlZD9kOkVlZSh0aGlzLmVsZW1lbnQsaCkpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9bH10cmlnZ2VyQ2FsbGJhY2so'@;
put 'bCl7Y29uc3QgYT0ic3RhcnQiPT09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1jbGFzcyBSeGV7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVydHkobCl7'@;
put 'cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQobCxhKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQobCxhKXtyZXR1cm4gX2VlKGwsYSl9Z2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4gUEgobCl9cXVlcnkobCxhLGQpe3JldHVybiBiZWUobCxhLGQpfWNvbXB1dGVTdHlsZShsLGEsZCl7cmV0dXJu'@;
put 'IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGwpW2FdfWFuaW1hdGUobCxhLGQsaCxmLF89W10pe2NvbnN0IFc9e2R1cmF0aW9uOmQsZGVsYXk6aCxmaWxsOjA9PWg/ImJvdGgiOiJmb3J3YXJkcyJ9O2YmJihXLmVhc2luZz1mKTtjb25zdCBpZT1uZXcgTWFwLHBlPV8uZmlsdGVyKFplPT5aZSBp'@;
put 'bnN0YW5jZW9mIGplZSk7KGZ1bmN0aW9uIEJNZShjLGwpe3JldHVybiAwPT09Y3x8MD09PWx9KShkLGgpJiZwZS5mb3JFYWNoKFplPT57WmUuY3VycmVudFNuYXBzaG90LmZvckVhY2goKGl0LGV0KT0+aWUuc2V0KGV0LGl0KSl9KTtsZXQgd2U9ZnVuY3Rpb24gSE1lKGMpe3JldHVybiBjLmxl'@;
put 'bmd0aD9jWzBdaW5zdGFuY2VvZiBNYXA/YzpjLm1hcChsPT5TZWUobCkpOltdfShhKS5tYXAoWmU9PkhwKFplKSk7d2U9ZnVuY3Rpb24gak1lKGMsbCxhKXtpZihhLnNpemUmJmwubGVuZ3RoKXtsZXQgZD1sWzBdLGg9W107aWYoYS5mb3JFYWNoKChmLF8pPT57ZC5oYXMoXyl8fGgucHVzaChf'@;
put 'KSxkLnNldChfLGYpfSksaC5sZW5ndGgpZm9yKGxldCBmPTE7ZjxsLmxlbmd0aDtmKyspe2xldCBfPWxbZl07aC5mb3JFYWNoKFQ9Pl8uc2V0KFQsRWVlKGMsVCkpKX19cmV0dXJuIGx9KGwsd2UsaWUpO2NvbnN0IEVlPWZ1bmN0aW9uIER4ZShjLGwpe2xldCBhPW51bGwsZD1udWxsO3JldHVy'@;
put 'biBBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD8oYT1RSChsWzBdKSxsLmxlbmd0aD4xJiYoZD1RSChsW2wubGVuZ3RoLTFdKSkpOmwgaW5zdGFuY2VvZiBNYXAmJihhPVFIKGwpKSxhfHxkP25ldyBJeGUoYyxhLGQpOm51bGx9KGwsd2UpO3JldHVybiBuZXcgamVlKGwsd2UsVyxFZSl9fWxl'@;
put 'dCBPeGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEhLe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLl9uZXh0QW5pbWF0aW9uSWQ9MCx0aGlzLl9yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKGQuYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246UGMuTm9uZSxzdHlsZXM6W10sZGF0YTp7'@;
put 'YW5pbWF0aW9uOltdfX0pfWJ1aWxkKGEpe2NvbnN0IGQ9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7Y29uc3QgaD1BcnJheS5pc0FycmF5KGEpP05LKGEpOmE7cmV0dXJuIHplZSh0aGlzLl9yZW5kZXJlcixudWxsLGQsInJlZ2lzdGVy'@;
put 'IixbaF0pLG5ldyBQeGUoZCx0aGlzLl9yZW5kZXJlcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFkzKSxhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIFB4ZSBleHRl'@;
put 'bmRzIFBtZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5faWQ9bCx0aGlzLl9yZW5kZXJlcj1hfWNyZWF0ZShsLGEpe3JldHVybiBuZXcgRnhlKHRoaXMuX2lkLGwsYXx8e30sdGhpcy5fcmVuZGVyZXIpfX1jbGFzcyBGeGV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5pZD1sLHRo'@;
put 'aXMuZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWgsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixkKX1fbGlzdGVuKGwsYSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1l'@;
put 'bnQsYEBAJHt0aGlzLmlkfToke2x9YCxhKX1fY29tbWFuZChsLC4uLmEpe3JldHVybiB6ZWUodGhpcy5fcmVuZGVyZXIsdGhpcy5lbGVtZW50LHRoaXMuaWQsbCxhKX1vbkRvbmUobCl7dGhpcy5fbGlzdGVuKCJkb25lIixsKX1vblN0YXJ0KGwpe3RoaXMuX2xpc3Rlbigic3RhcnQiLGwpfW9u'@;
put 'RGVzdHJveShsKXt0aGlzLl9saXN0ZW4oImRlc3Ryb3kiLGwpfWluaXQoKXt0aGlzLl9jb21tYW5kKCJpbml0Iil9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLl9jb21tYW5kKCJwbGF5IiksdGhpcy5fc3RhcnRlZD0hMH1wYXVzZSgpe3RoaXMuX2NvbW1h'@;
put 'bmQoInBhdXNlIil9cmVzdGFydCgpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX1maW5pc2goKXt0aGlzLl9jb21tYW5kKCJmaW5pc2giKX1kZXN0cm95KCl7dGhpcy5fY29tbWFuZCgiZGVzdHJveSIpfXJlc2V0KCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKSx0aGlzLl9zdGFydGVkPSExfXNl'@;
put 'dFBvc2l0aW9uKGwpe3RoaXMuX2NvbW1hbmQoInNldFBvc2l0aW9uIixsKX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0/LmdldFBvc2l0aW9uKCk/PzB9fWZ1bmN0aW9uIHplZShjLGwsYSxkLGgpe3JldHVybiBjLnNldFByb3Bl'@;
put 'cnR5KGwsYEBAJHthfToke2R9YCxoKX1jb25zdCBVZWU9IkAuZGlzYWJsZWQiO2xldCBIeGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kZWxlZ2F0ZT1hLHRoaXMuZW5naW5lPWQsdGhpcy5fem9uZT1oLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lk'@;
put 'PTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCxkLm9uUmVtb3ZhbENvbXBsZXRlPShmLF8pPT57Y29uc3QgVD1fPy5wYXJlbnROb2RlKGYpO1QmJl8ucmVtb3ZlQ2hpbGQoVCxmKX19Y3Jl'@;
put 'YXRlUmVuZGVyZXIoYSxkKXtjb25zdCBmPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIoYSxkKTtpZighKGEmJmQmJmQuZGF0YSYmZC5kYXRhLmFuaW1hdGlvbikpe2xldCBwZT10aGlzLl9yZW5kZXJlckNhY2hlLmdldChmKTtyZXR1cm4gcGV8fChwZT1uZXcgWmVlKCIiLGYsdGhpcy5l'@;
put 'bmdpbmUsKCk9PnRoaXMuX3JlbmRlcmVyQ2FjaGUuZGVsZXRlKGYpKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChmLHBlKSkscGV9Y29uc3QgXz1kLmlkLFQ9ZC5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKFQsYSk7Y29uc3Qg'@;
put 'Vz1wZT0+e0FycmF5LmlzQXJyYXkocGUpP3BlLmZvckVhY2goVyk6dGhpcy5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKF8sVCxhLHBlLm5hbWUscGUpfTtyZXR1cm4gZC5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKFcpLG5ldyBOeGUodGhpcyxULGYsdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5f'@;
put 'Y2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhhLGQsaCl7YT49MCYmYTx0aGlz'@;
put 'Ll9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKT0+ZChoKSk6KDA9PXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5sZW5ndGgmJnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fem9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIuZm9yRWFjaChmPT57'@;
put 'Y29uc3RbXyxUXT1mO18oVCl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtkLGhdKSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1'@;
put 'bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53'@;
put 'aGVuUmVuZGVyaW5nRG9uZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoZWspLGFyKE5vKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgWmVle2NvbnN0cnVjdG9y'@;
put 'KGwsYSxkLGgpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLmRlbGVnYXRlPWEsdGhpcy5lbmdpbmU9ZCx0aGlzLl9vbkRlc3Ryb3k9aH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveU5vZGUobCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT8uKGwpfWRlc3Ry'@;
put 'b3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0pfSksdGhpcy5fb25EZXN0cm95Py4o'@;
put 'KX1jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChsLGEpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudChsKX1jcmVhdGVUZXh0KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQobCl9'@;
put 'YXBwZW5kQ2hpbGQobCxhKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKGwsYSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsITEpfWluc2VydEJlZm9yZShsLGEsZCxoPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShsLGEsZCksdGhpcy5lbmdpbmUu'@;
put 'b25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsaCl9cmVtb3ZlQ2hpbGQobCxhLGQpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsYSx0aGlzLmRlbGVnYXRlKX1zZWxlY3RSb290RWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVt'@;
put 'ZW50KGwsYSl9cGFyZW50Tm9kZShsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKGwpfW5leHRTaWJsaW5nKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKGwpfXNldEF0dHJpYnV0ZShsLGEsZCxoKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShsLGEsZCxo'@;
put 'KX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGwsYSxkKX1hZGRDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3MobCxhKX1yZW1vdmVDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3MobCxhKX1zZXRTdHlsZShsLGEs'@;
put 'ZCxoKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKGwsYSxkLGgpfXJlbW92ZVN0eWxlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKGwsYSxkKX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKSYmYT09VWVlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCwhIWQpOnRo'@;
put 'aXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfXNldFZhbHVlKGwsYSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZShsLGEpfWxpc3RlbihsLGEsZCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuZW5naW5lLmRpc2FibGVB'@;
put 'bmltYXRpb25zKGwsYSl9fWNsYXNzIE54ZSBleHRlbmRzIFplZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpLHRoaXMuZmFjdG9yeT1sLHRoaXMubmFtZXNwYWNlSWQ9YX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKT8iLiI9PWEuY2hhckF0KDEpJiZh'@;
put 'PT1VZWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLGQ9dm9pZCAwPT09ZHx8ISFkKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsbCxhLnNsaWNlKDEpLGQpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfWxpc3RlbihsLGEsZCl7aWYoIkAiPT1hLmNoYXJB'@;
put 'dCgwKSl7Y29uc3QgaD1mdW5jdGlvbiBWeGUoYyl7c3dpdGNoKGMpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIGN9fShsKTtsZXQgZj1hLnNsaWNl'@;
put 'KDEpLF89IiI7cmV0dXJuIkAiIT1mLmNoYXJBdCgwKSYmKFtmLF9dPWZ1bmN0aW9uIEJ4ZShjKXtjb25zdCBsPWMuaW5kZXhPZigiLiIpO3JldHVybltjLnN1YnN0cmluZygwLGwpLGMuc2xpY2UobCsxKV19KGYpKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxoLGYsXyxU'@;
put 'PT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhULl9kYXRhfHwtMSxkLFQpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX19bGV0IGp4ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZWt7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYS5ib2R5LGQs'@;
put 'aCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSxhcihGSCksYXIoR0gpLGFyKHg1KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29u'@;
put 'c3QgWWVlPVt7cHJvdmlkZTpISyx1c2VDbGFzczpPeGV9LHtwcm92aWRlOkdILHVzZUZhY3Rvcnk6ZnVuY3Rpb24genhlKCl7cmV0dXJuIG5ldyBheGV9fSx7cHJvdmlkZTplayx1c2VDbGFzczpqeGV9LHtwcm92aWRlOlkzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVXhlKGMsbCxhKXtyZXR1cm4g'@;
put 'bmV3IEh4ZShjLGwsYSl9LGRlcHM6W0lPLGVrLE5vXX1dLGVOPVt7cHJvdmlkZTpGSCx1c2VGYWN0b3J5OigpPT5uZXcgUnhlfSx7cHJvdmlkZTp0Uyx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5ZZWVdLFdlZT1be3Byb3ZpZGU6RkgsdXNlQ2xhc3M6eWVlfSx7cHJvdmlkZTp0'@;
put 'Uyx1c2VWYWx1ZToiTm9vcEFuaW1hdGlvbnMifSwuLi5ZZWVdO2xldCBaeGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6YS5kaXNhYmxlQW5pbWF0aW9ucz9XZWU6ZU59fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6ZU4saW1wb3J0czpbRUddfSksY30pKCksWXhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbm90LWZvdW5kIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsInAiKSxOZSgyLCI0MDQgLSBOb3QgRm91bmQiKSx5ZSgpKCkpfX0pLGN9KSgpLEdlZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7bGV0IGY9bmV3IEJsb2IoW2FdLHt0eXBl'@;
put 'OiJ0ZXh0L3BsYWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGYsYCR7ZH0uJHtofWApO2Vsc2V7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO18uaHJlZj0iZGF0YTp0'@;
put 'ZXh0L3BsYWluLCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpLF8uZG93bmxvYWQ9YCR7ZH0uJHtofWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfKSxfLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfKX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57'@;
put 'bGV0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9KCk9PntmLnJlc3VsdCYmZChKU09OLnBhcnNlKGYucmVzdWx0LnRvU3RyaW5nKCkpKX0sZi5yZWFkQXNUZXh0KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXthLnRhcmdldC52YWx1ZT0iIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gV3hlKGMsbCl7MSZjJiYoVnIoMCksbWUoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCks'@;
put 'bWUoMywicCIpLE5lKDQsIkRlcGxveWluZy4uLiIpLHllKCksenIoKSl9ZnVuY3Rpb24gR3hlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uICR4ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBxeGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29u'@;
put 'IiwzMCl9ZnVuY3Rpb24gS3hlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIFh4ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjIpLEplKDEscXhlLDEsMCwiY2xyLWljb24iLDIzKSxKZSgyLEt4ZSwxLDAsImNsci1pY29uIiwyNCksbWUoMywicCIpLE5lKDQsIkNy'@;
put 'ZWF0ZSBkYXRhYmFzZSIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLENlKDEpLFJlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIEp4ZShjLGwpezEm'@;
put 'YyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBReGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJwIiwyMCksTmUoMiwiRG9uZSIpLHllKCkscXQoMywiaHIiLDIxKSxtZSg0LCJkaXYiLDIyKSxKZSg1LEd4ZSwxLDAsImNsci1pY29uIiwyMyksSmUoNiwkeGUs'@;
put 'MSwwLCJjbHItaWNvbiIsMjQpLG1lKDcsInAiKSxOZSg4LCJEZXBsb3kgU0FTIEpvYnMiKSx5ZSgpKCksSmUoOSxYeGUsNSwyLCJkaXYiLDI1KSxxdCgxMCwiaHIiLDIxKSxtZSgxMSwiZGl2IiwyNikoMTIsImJ1dHRvbiIsMjcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxKZSgxMyxKeGUsMSwwLCJjbHItaWNvbiIsMjQpLE5lKDE0LCIgTEFVTkNIIC8gQ09ORklHVVJFICIpLHllKCksbWUoMTUsImJ1dHRvbiIsMjgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdCho'@;
put 'LmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxOZSgxNiwiIERvd25sb2FkIGxvZyAiKSx5ZSgpKCkscXQoMTcsImhyIiwyMSksbWUoMTgsImRpdiIsMjYpKDE5LCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5hdXRvZGVwbG95aW5nPSExLGp0KGguYXV0b2RlcGxveURvbmU9ITEpfSksTmUoMjAsIiBDbG9zZSAiKSx5ZSgpLG1lKDIxLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9wZW5TYXNS'@;
put 'ZXF1ZXN0c01vZGFsKCkpfSksTmUoMjIsIiBTQVMgUmVxdWVzdHMgIikseWUoKSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLFJlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLENlKDEpLFJlKCJuZ0lmIiwhYS5hdXRvRGVwbG95U3RhdHVz'@;
put 'LmRlcGxveVNlcnZpY2VQYWNrKSxDZSgzKSxSZSgibmdJZiIsbnVsbCE9PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSksQ2UoNCksUmUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrfHwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtl'@;
put 'RGF0YSl9fWZ1bmN0aW9uIGVFZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTYpKDEsImRpdiIsMTcpLEplKDIsV3hlLDUsMCwibmctY29udGFpbmVyIiwxOCksSmUoMyxReGUsMjMsNCwibmctY29udGFpbmVyIiwxOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJ'@;
put 'ZiIsIWEuYXV0b2RlcGxveURvbmUpLENlKDEpLFJlKCJuZ0lmIixhLmF1dG9kZXBsb3lEb25lKX19bGV0IHRFZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5kZXBsb3lTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5s'@;
put 'b2dnZXJTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBFcix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhp'@;
put 'cy5qc29uRmlsZT1udWxsLHRoaXMuYXV0b2RlcGxveWluZz0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2U9ITEs'@;
put 'dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5hdXRvRGVwbG95U3RhdHVzPXtkZXBsb3lTZXJ2aWNlUGFjazpudWxsLHJ1bk1ha2VEYXRhOm51bGx9fW5nT25Jbml0KCl7fWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5hdXRvZGVwbG95'@;
put 'aW5nPSEwLGEuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvYyx2b2lkIDAsdm9pZCAwLCEwKSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITAsYS5p'@;
put 'c0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITEsYS5ldmVu'@;
put 'dFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCksYS5hdXRvZGVwbG95aW5nPSExLHZvaWQoYS5hdXRvZGVwbG95RG9uZT0hMSl9YS5pc1N1Ym1pdHRpbmdKc29uPSExLGEucmVjcmVhdGVEYXRhYmFzZT9hLmNyZWF0ZURh'@;
put 'dGFiYXNlKCk6YS5hdXRvZGVwbG95RG9uZT0hMH0pKCl9Y3JlYXRlRGF0YWJhc2UoKXt0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21w'@;
put 'dXRlQXBpOiExLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihoPT57dGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpT'@;
put 'T04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1ofXRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hIShoLnJlc3VsdCYmaC5yZXN1bHQubGVuZ3RoPjApfSkuY2F0Y2goaD0+e3RoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hMSx0aGlz'@;
put 'LmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoaCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWh9fSl9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1vbkpz'@;
put 'b25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGgpfSkoKX1yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChhKXshMD09PWEudGFyZ2V0LmNo'@;
put 'ZWNrZWQmJih0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vcGVuU2FzUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9bmF2aWdh'@;
put 'dGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh2bCksdHQoR2VlKSx0dChvYSksdHQodzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9t'@;
put 'YXRpYy1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIixhcHBMb2M6ImFwcExvYyIsZGNQYXRoOiJkY1BhdGgiLHNlbGVjdGVkQWRtaW5Hcm91cDoic2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQ2LHZhcnM6MTAsY29uc3RzOltbImNsYXNzIiwiYXV0by1kZXBsb3kiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwi'@;
put 'Y2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwibXQtMCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5n'@;
put 'ZSIsImNsaWNrIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwz'@;
put 'LCJjbGljayJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNsaWNrIiwiY2hhbmdlIl0sWyJ1cGxvYWRKc29uQXV0byIsIiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFs'@;
put 'LWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiYXV0by1kZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxbNCwibmdJZiJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1tZCJdLFsxLCJt'@;
put 'LTAiLCJhbGlnbi1zZWxmLXN0YXJ0Il0sWzEsInctMTAwIl0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1lcnJvciIsInNoYXBlIiwidGltZXMtY2ly'@;
put 'Y2xlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1zdGF0dXMtcm93Iiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLDMs'@;
put 'ImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLCJhbGlnbi1zZWxmLWVuZCIsMywiY2xpY2siXSxbInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsMSwiZGVwbG95LXN1Y2Nlc3MiXSxbInNoYXBlIiwidGltZXMtY2lyY2xlIiwxLCJkZXBsb3kt'@;
put 'ZXJyb3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9Vm4oKTtKZSgwLGVFZSw0LDIsImRpdiIsMCksbWUoMSwiaDQiLDEpLE5lKDIsIlZpeWEgRGVwbG95IikseWUoKSxxdCgzLCJociIpLG1lKDQsImxhYmVsIiwyKSxOZSg1LCJBcHAgTG9jIikseWUoKSxtZSg2'@;
put 'LCJkaXYiLDMpKDcsImRpdiIsNCkoOCwicCIsNSksTmUoOSkseWUoKSgpKCksbWUoMTAsImxhYmVsIiwyKSxOZSgxMSwiREMgTG9jIikseWUoKSxtZSgxMiwiZGl2IiwzKSgxMywiZGl2Iiw0KSgxNCwicCIsNSksTmUoMTUpLHllKCkoKSgpLG1lKDE2LCJsYWJlbCIsMiksTmUoMTcsIlNBUyBB'@;
put 'ZG1pbiBncm91cCIpLHllKCksbWUoMTgsImRpdiIsMykoMTksImRpdiIsNCkoMjAsInAiLDUpLE5lKDIxKSx5ZSgpKCkoKSxtZSgyMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMywiaW5wdXQiLDYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5yZWNyZWF0ZURh'@;
put 'dGFiYXNlPV99KSgiY2xpY2siLGZ1bmN0aW9uKF8pe3JldHVybiBkLnJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKF8pfSkseWUoKSxtZSgyNCwibGFiZWwiKSxOZSgyNSwiUmVjcmVhdGUgZGF0YWJhc2UiKSx5ZSgpKCkscXQoMjYsImhyIiksbWUoMjcsImJ1dHRvbiIsNykseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLmV4ZWN1dGVKc29uKCl9KSxOZSgyOCkseWUoKSxtZSgyOSwiYnV0dG9uIiw4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGgpLGp0KCRpKDMyKS5jbGljaygpKX0pLE5lKDMwLCIgVXBsb2FkIGRpZmZlcmVudCBmaWxlIHRvIGRlcGxveVxuIiks'@;
put 'eWUoKSxtZSgzMSwiaW5wdXQiLDksMTApLHh0KCJjbGljayIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuY2xlYXJVcGxvYWRJbnB1dChfKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLm9uSnNvbkZpbGVDaGFuZ2UoXyl9KSx5ZSgpLG1lKDMzLCJjbHItbW9kYWwiLDExKSx4dCgiY2xy'@;
put 'TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9X30pLG1lKDM0LCJoMyIsMTIpLE5lKDM1LCJXYXJuaW5nIikseWUoKSxtZSgzNiwiZGl2IiwxMyksTmUoMzcsIiBUaGlzIGFjdGlvbiB3aWxsIHJlY3JlYXRlIHRoZSBkYXRhYmFzZSAo'@;
put 'aWYgaXQgZXhpc3RzKS4gRm9yIGFuIGluaXRpYWwgZGVwbG95bWVudCwgdGhpcyBpcyBleHBlY3RlZC4gSWYgdGhpcyBpcyBhIHJlLWRlcGxveW1lbnQsIHlvdSB3aWxsIGxvc2UgYW55IGV4aXN0aW5nIHRhYmxlcyBpbiAiKSxtZSgzOCwic3Ryb25nIiksTmUoMzkpLHllKCksTmUoNDAsIi4g'@;
put 'IikseWUoKSxtZSg0MSwiZGl2IiwxNCkoNDIsImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsZC5yZWNyZWF0ZURhdGFiYXNlPSExfSksTmUoNDMsIiBDYW5jZWwgIikseWUoKSxtZSg0NCwiYnV0dG9uIiwxNSkseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxkLnJlY3JlYXRlRGF0YWJhc2U9ITB9KSxOZSg0NSwiIE9rICIpLHllKCkoKSgpfTImYSYmKFJlKCJuZ0lmIixkLmF1dG9kZXBsb3lpbmcpLENlKDkpLG9yKGQuYXBwTG9jKSxDZSg2KSxvcihkLmRj'@;
put 'UGF0aCksQ2UoNiksb3IoZC5zZWxlY3RlZEFkbWluR3JvdXApLENlKDIpLFJlKCJuZ01vZGVsIixkLnJlY3JlYXRlRGF0YWJhc2UpLENlKDQpLFJlKCJkaXNhYmxlZCIsIWQuanNvbkZpbGUpLENlKDEpLGdyKCIgRGVwbG95ICIsZC5qc29uRmlsZT8iIjoiKGpzb24gZmlsZSBpcyBub3QgYXZh'@;
put 'aWxhYmxlKSIsIlxuIiksQ2UoNSksUmUoImNsck1vZGFsT3BlbiIsZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNiksb3IoZC5kY1BhdGgpKX0sZGVwZW5kZW5jaWVzOltaaSxTMCxCcyxPcyxrYSxvdSxzdSxVcyxEMCxUMF0sc3R5bGVzOlsiLmF1'@;
put 'dG8tZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjQpO3otaW5kZXg6MTAwfS5zcGlubmVyLWJveFtfbmdjb250'@;
put 'ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFw'@;
put 'eCA4cHggIzAwMDAwMDgyfS5zcGlubmVyLWJveFtfbmdjb250ZW50LSVDT01QJV0gICAuYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3dpZHRoOjEwMCV9LmRlcGxveS1zdGF0dXMtcm93W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH0uZGVwbG95LXN0YXR1cy1yb3dbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAwIDEwcHh9LmRlcGxveS1zdWNjZXNzW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtjb2xvcjojNmVjZjQ0fS5kZXBsb3ktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmRlcGxveS11bmRldGVybWluYXRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2NhY2FjYX1ocltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLWJv'@;
put 'dHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMjcwNTg4MjM1Myl9Il19KSxjfSkoKTtmdW5jdGlvbiBuRWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDYpKDEsInAiLDcpLE5lKDIsIlBsZWFzZSBsb2cgaW4gZmlyc3QiKSx5ZSgpLG1lKDMsImxhYmVsIiw4KSxOZSg0LCJVc2VybmFtZSIpLHll'@;
put 'KCksbWUoNSwiZGl2Iiw5KSg2LCJkaXYiLDEwKSxxdCg3LCJpbnB1dCIsMTEpLHllKCkoKSxtZSg4LCJsYWJlbCIsMTIpLE5lKDksIlBhc3N3b3JkIikseWUoKSxtZSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCkscXQoMTIsImlucHV0IiwxMykseWUoKSgpLG1lKDEzLCJidXR0b24iLDE0KSxO'@;
put 'ZSgxNCwiTG9nIGluIikseWUoKSgpKX1mdW5jdGlvbiByRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDM2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLmlkKSxDZSgxKSxncigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIGlFZShjLGwp'@;
put 'e2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBvRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDM2KSxOZSgxKSxKZSgyLGlF'@;
put 'ZSwyLDEsInNwYW4iLDUpLGJhKDMsImpzb24iKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLm5hbWUpLENlKDEpLGdyKCIgIixhLm5hbWUsIiAiKSxDZSgxKSxSZSgibmdJZiIsInt9IiE9WmwoMywzLGEuYXR0cmlidXRlcykpfX1mdW5jdGlvbiBzRWUoYyxs'@;
put 'KXsxJmMmJihtZSgwLCJzcGFuIiksTmUoMSwiSlNPTiBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5IikseWUoKSl9ZnVuY3Rpb24gYUVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5k'@;
put 'b3dubG9hZFNhc1ByZWNvZGVGaWxlKCkpfSkscXQoMSwiY2xyLWljb24iLDM4KSx5ZSgpfX1mdW5jdGlvbiBsRWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJwIiwzOSksTmUoMiwiRmlsZSBleGVjdXRlIGNvbXBsZXRlZCIpLHllKCkscXQoMywiaHIiKSxtZSg0LCJk'@;
put 'aXYiKSg1LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5kb3dubG9hZEZpbGUoaC5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxvZyIsInR4dCIpKX0pLE5lKDYsIiBEb3dubG9hZCBsb2cgIikseWUoKSgpLHpyKCl9fWZ1'@;
put 'bmN0aW9uIGNFZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxncigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIHVFZShjLGwpezEmYyYmKFZyKDApLG1lKDEsInNwYW4iLDI1KSxOZSgyLCIgVmFs'@;
put 'aWRhdGluZyBkZXBsb3kuLi4gIikseWUoKSxtZSgzLCJzcGFuIiksTmUoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLHllKCksenIoKSl9ZnVuY3Rpb24gZEVlKGMsbCl7MSZjJiYoVnIoMCkscXQoMSwiY2xyLWljb24iLDQ2KSxtZSgyLCJzcGFuIiksTmUoMywiIFZhbGlkYXRpb24gZmFp'@;
put 'bGVkICIpLHllKCksenIoKSl9ZnVuY3Rpb24gaEVlKGMsbCl7MSZjJiYoVnIoMCkscXQoMSwiY2xyLWljb24iLDQ3KSxtZSgyLCJzcGFuIiksTmUoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLHllKCksenIoKSl9ZnVuY3Rpb24gZkVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0NSks'@;
put 'SmUoMSx1RWUsNSwwLCJuZy1jb250YWluZXIiLDUpLEplKDIsZEVlLDQsMCwibmctY29udGFpbmVyIiw1KSxKZSgzLGhFZSw0LDAsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmlzVmFsaWRhdGluZyksQ2UoMSksUmUoIm5nSWYi'@;
put 'LCFhLmlzVmFsaWRhdGluZyYmImVycm9yIj09PWEudmFsaWRhdGlvblN0YXRlKSxDZSgxKSxSZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIHBFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsInAi'@;
put 'LDM5KSxOZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIikseWUoKSxxdCgzLCJociIpLEplKDQsY0VlLDIsMSwiZGl2Iiw0MSksbWUoNSwiYnV0dG9uIiw0MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLE5lKDYs'@;
put 'IiBMZXQncyBnZXQgc3RhcnRlZCAiKSx5ZSgpLG1lKDcsImJ1dHRvbiIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxO'@;
put 'ZSg4LCIgRG93bmxvYWQgbG9nICIpLHllKCksbWUoOSwiYnV0dG9uIiw0MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLE5lKDEwLCIgVmFsaWRhdGUgIikseWUoKSxKZSgxMSxmRWUsNCwzLCJkaXYiLDQzKSx6cigpfWlm'@;
put 'KDImYyl7Y29uc3QgYT1WZSgyKTtDZSg0KSxSZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKSxDZSg3KSxSZSgibmdJZiIsIm5vbmUiIT09YS52YWxpZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5nKX19Y29uc3QgdE49ZnVuY3Rpb24oKXtyZXR1cm57c3RhbmRhbG9uZToh'@;
put 'MH19O2Z1bmN0aW9uIGdFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImZvcm0iKSgyLCJkaXYiLDE1KSgzLCJsYWJlbCIsMTYpLE5lKDQsIkFkbWluIGdyb3VwIikseWUoKSxtZSg1LCJkaXYiLDE3KSg2LCJkaXYiLDE4KSg3LCJzZWxlY3QiLDE5KSx4dCgibmdNb2Rl'@;
put 'bENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuc2VsZWN0ZWRBZG1pbkdyb3VwPWgpfSksSmUoOCxyRWUsMiwyLCJvcHRpb24iLDIwKSx5ZSgpKCkoKSgpLG1lKDksImRpdiIsMTUpKDEwLCJkaXYiKSgxMSwibGFiZWwiLDE2KSxOZSgxMiwiQ29udGV4dCIpLHllKCks'@;
put 'bWUoMTMsImRpdiIsMTcpKDE0LCJkaXYiLDE4KSgxNSwic2VsZWN0IiwyMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnNlbGVjdGVkQ29udGV4dD1oKX0pLEplKDE2LG9FZSw0LDUsIm9wdGlvbiIsMjApLHllKCkoKSgpLG1lKDE3LCJidXR0'@;
put 'b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZXhlY3V0YWJsZUNvbnRleHQoKSl9KSxxdCgxOCwiY2xyLWljb24iLDIzKSx5ZSgpKCksbWUoMTksImRpdiIsMjQpKDIwLCJzcGFuIiwyNSksTmUoMjEsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLHll'@;
put 'KCksbWUoMjIsInNwYW4iKSxOZSgyMywiIExvYWRpbmcgY29udGV4dHMuLi4gIikseWUoKSgpLG1lKDI0LCJsYWJlbCIsMjYpLE5lKDI1LCJEQyBMb2MiKSx5ZSgpLG1lKDI2LCJkaXYiLDkpKDI3LCJkaXYiLDEwKSgyOCwiaW5wdXQiLDI3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'aCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZGNQYXRoPWgpfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNhdmVEY1BhdGgoKSl9KSx5ZSgpKCkoKSxtZSgyOSwicCIsMjgpLE5lKDMwLCIgU2VsZWN0IEpTT04gZmlsZSB0byB1cGxvYWQgKGpzb24gYnVpbGQg'@;
put 'ZmlsZSBwcmVsb2FkZWQpOiAiKSx5ZSgpLG1lKDMxLCJkaXYiLDI5KSgzMiwiaW5wdXQiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCku'@;
put 'b25Kc29uRmlsZUNoYW5nZShoKSl9KSx5ZSgpKCksbWUoMzMsImRpdiIsMzEpKDM0LCJidXR0b24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZXhlY3V0ZUpzb24oKSl9KSxOZSgzNSwiIFNVQk1JVCBKU09OICIpLHllKCksSmUoMzYsc0VlLDIsMCwi'@;
put 'c3BhbiIsNSkseWUoKSxtZSgzNywicCIsMjgpLE5lKDM4LCJTZWxlY3QgU0FTIGZpbGUgdG8gdXBsb2FkOiIpLHllKCksbWUoMzksImRpdiIsMjkpKDQwLCJpbnB1dCIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9'@;
put 'KSgiY2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCk7cmV0dXJuIGYub25TYXNGaWxlQ2hhbmdlKGgpLGp0KGYuZG93bmxvYWRGaWxlQnRuPSEwKX0pLHllKCksSmUoNDEsYUVlLDIsMCwiYnV0dG9uIiwzMykseWUoKSxtZSg0MiwiZGl2IiwzMSkoNDMsImJ1dHRvbiIsMzQp'@;
put 'LHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5leGVjdXRlU0FTKCkpfSksTmUoNDQsIiBTVUJNSVQgIikseWUoKSgpKCksSmUoNDUsbEVlLDcsMCwibmctY29udGFpbmVyIiw1KSxtZSg0NiwiYnV0dG9uIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBCdChhKSxqdChWZSgpLmNyZWF0ZURhdGFiYXNlKCkpfSksTmUoNDcsIiBDcmVhdGUgRGF0YWJhc2UgIikseWUoKSxKZSg0OCxwRWUsMTIsMiwibmctY29udGFpbmVyIiw1KSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNyksUmUoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwKSgibmdNb2RlbE9wdGlvbnMiLCRzKDE5LHROKSksQ2UoMSksUmUoIm5nRm9yT2YiLGEuYWRtaW5Hcm91cHMpLENlKDIpLGRyKCJoaWRkZW4iLGEuY29udGV4dHNMb2FkaW5nKSxDZSg1KSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZENvbnRleHQpKCJuZ01vZGVsT3B0aW9ucyIsJHMo'@;
put 'MjAsdE4pKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5hbGxDb250ZXh0cyksQ2UoMyksZHIoImhpZGRlbiIsIWEuY29udGV4dHNMb2FkaW5nKSxDZSg5KSxSZSgibmdNb2RlbCIsYS5kY1BhdGgpKCJuZ01vZGVsT3B0aW9ucyIsJHMoMjEsdE4pKSxDZSg2KSxSZSgiY2xyTG9hZGluZyIsYS5pc1N1'@;
put 'Ym1pdHRpbmdKc29uKSxDZSgyKSxSZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0ZWQpLENlKDUpLFJlKCJuZ0lmIixhLmRvd25sb2FkRmlsZUJ0biksQ2UoMiksUmUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2NyaXB0KSxDZSgyKSxSZSgibmdJZiIsYS5qb2JMb2cubGVuZ3RoPjApLENlKDEp'@;
put 'LFJlKCJjbHJMb2FkaW5nIixhLmNyZWF0ZURhdGFiYXNlTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCl9fWxldCBtRWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMuZGVwbG95U2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgRXIsdGhpcy5uZWVkc0xvZ2luPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5hbGxDb250ZXh0'@;
put 'cz1bXSx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLnNlbGVjdGVkQ29udGV4dD0iIix0aGlzLmpvYkxvZz0iIix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5saW5lc09mQ29kZT1bXSx0aGlzLmZpbGVOYW1lPSIiLHRo'@;
put 'aXMucHJlbG9hZGVkRmlsZT0hMCx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSExLHRoaXMuY29udGV4dHNMb2FkaW5nPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuZXhlY3V0aW5nU2NyaXB0PSExLHRoaXMuZG93bmxvYWRGaWxlQnRuPSExLHRoaXMuaXNWYWxpZGF0aW5n'@;
put 'PSExLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9Im5vbmUifW5nT25Jbml0KCl7fWV4ZWN1dGFibGVDb250ZXh0KCl7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe30pKCl9Y2xlYXJV'@;
put 'cGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vblNhc0ZpbGVDaGFuZ2UoYSl7dGhpcy5wcmVsb2FkZWRGaWxlPSExO2xldCBkPWEudGFyZ2V0LmZpbGVzWzBdO3RoaXMuZmlsZU5hbWU9ZC5uYW1lO2xldCBoPW5ldyBGaWxlUmVhZGVyO2gub25s'@;
put 'b2FkPSgpPT57aC5yZXN1bHQmJih0aGlzLmxpbmVzT2ZDb2RlPWgucmVzdWx0LnNwbGl0KCJcbiIpLHRoaXMubGluZXNPZkNvZGU9dGhpcy5saW5lc09mQ29kZS5maWx0ZXIoZj0+IiIhPT1mJiZudWxsIT09ZiksdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMCx0aGlzLmFkZFByZWNvZGVMaW5l'@;
put 'cygpKX0saC5yZWFkQXNUZXh0KGQpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfWFkZFByZWNvZGVMaW5lcygp'@;
put 'e3RoaXMubGluZXNPZkNvZGUudW5zaGlmdChgJWxldCBjb250ZXh0PSR7dGhpcy5zZWxlY3RlZENvbnRleHR9O2AsYCVsZXQgYXBwTG9jPSR7dGhpcy5hcHBMb2N9O2AsYCVsZXQgYWRtaW49JHt0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cH07YCxgJWxldCBkY3BhdGg9JHt0aGlzLmRjUGF0aH07'@;
put 'YCl9ZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpe2xldCBhPXRoaXMubGluZXNPZkNvZGUuam9pbigiXG4iKSxkPXRoaXMuZmlsZU5hbWUuc3BsaXQoIi4iKVswXTt0aGlzLmRvd25sb2FkRmlsZShhLGQsInNhcyIpfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNl'@;
put 'LmRvd25sb2FkRmlsZShhLGQsaCl9c2F2ZURjUGF0aCgpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJkZXBsb3lfZGNfbG9jIix0aGlzLmRjUGF0aCl9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEu'@;
put 'c2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHZvaWQgMCx2b2lkIDAsITApLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04u'@;
put 'c3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2Usdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1oP2g6ZH1gKX1hLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfWV4ZWN1dGVTQVMoKXt2YXIg'@;
put 'YT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmV4ZWN1dGluZ1NjcmlwdD0hMCxhLmpvYkxvZz0iIixhLm1ha2VEYXRhUmVzcG9uc2U9IiI7dHJ5e2xldCBkPXlpZWxkIGEuc2FzSnMuZXhlY3V0ZVNjcmlwdCh7ZmlsZU5hbWU6YS5maWxlTmFtZSxsaW5lc09mQ29kZTphLmxpbmVzT2ZD'@;
put 'b2RlLGNvbnRleHROYW1lOmEuc2VsZWN0ZWRDb250ZXh0fSk7YS5sb2dnZXJTZXJ2aWNlLmxvZyhkKSwic3RyaW5nIj09dHlwZW9mIGQubG9nJiYoZC5sb2c9SlNPTi5wYXJzZShkLmxvZykpLCJlcnJvciI9PT1kLmpvYlN0YXR1cz9hbGVydCgiRXJyb3IhIik6YS5qb2JMb2c9ZC5sb2cuaXRl'@;
put 'bXM/ZC5sb2cuaXRlbXMubWFwKGg9PmgubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShkLmxvZyksYS5leGVjdXRpbmdTY3JpcHQ9ITF9Y2F0Y2h7YS5leGVjdXRpbmdTY3JpcHQ9ITF9fSkoKX1jcmVhdGVEYXRhYmFzZShhPSEwKXtpZihhKXtsZXQgZj10aGlzLnNhc1NlcnZpY2Uu'@;
put 'Z2V0U2FzanNDb25maWcoKS5zZXJ2ZXJVcmwrIi9TQVNKb2JFeGVjdXRpb24vP19wcm9ncmFtPSIrdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiL2FkbWluL21ha2VkYXRhJkFETUlOPSIrdGhpcy5zZWxlY3RlZEFkbWluR3JvdXArIiZEQ1BBVEg9Iit0aGlzLmRjUGF0aCsiJl9k'@;
put 'ZWJ1Zz0xMzEiO3dpbmRvdy5vcGVuKGYsIl9ibGFuayIpfWVsc2UgdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITAsdGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERDUEFUSDp0aGlz'@;
put 'LmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTohMSxjb250ZXh0TmFtZTp0aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5z'@;
put 'dHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITF9KS5jYXRjaChmPT57dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITE7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0'@;
put 'aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9dmFsaWRhdGVEZXBsb3koKXt0aGlzLmlzVmFsaWRhdGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50'@;
put 'aGVuKGE9Pnt0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEpLHRoaXMudmFsaWRhdGlvblN0YXRlPWEuc2FzbGlicz8ic3VjY2VzcyI6ImVycm9yIix0aGlzLmlzVmFsaWRhdGluZz0hMX0pLmNhdGNoKGE9Pnt0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0iZXJyb3Ii'@;
put 'fSl9ZGVsZXRlS2V5cygpe2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJkZXBsb3lfZGNfbG9jIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dCh2bCksdHQodzApLHR0KEdlZSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJhcHAtbWFudWFsLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVj'@;
put 'bHM6OSx2YXJzOjMsY29uc3RzOltbMSwiY2FyZC1oZWFkZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJkLWlubGluZS1ibG9jayIsIm1sLTEwIiwibWItMTAiLCJtdC0wIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiY2xlYXItbWVtb3J5LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRl'@;
put 'IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIl0sWyJpZCIsImxvZ2luRm9ybSIsImNsYXNzIiwiZC1ub25lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImlkIiwibG9naW5Gb3JtIiwxLCJkLW5vbmUiXSxbMSwibWItMTAiXSxbImZvciIsInVzZXJuYW1lIiwxLCJjbHItY29udHJvbC1sYWJl'@;
put 'bCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsidHlwZSIsInRleHQiLCJpZCIsInVzZXJuYW1lIiwxLCJjbHItaW5wdXQiXSxbImZvciIsInBhc3N3b3JkIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsInBhc3N3'@;
put 'b3JkIiwiaWQiLCJwYXNzd29yZCIsMSwiY2xyLWlucHV0Il0sWyJpZCIsImxvZ2luQnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImQtbm9uZSJdLFsxLCJjbHItZm9ybS1jb250cm9sIl0sWyJmb3IiLCJzZWxlY3QtZnVsbCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRy'@;
put 'b2wtY29udGFpbmVyIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFsibmFtZSIsInNlbGVjdGVkQWRtaW5Hcm91cCIsImlkIiwiYWRtaW5Hcm91cHNTZWxlY3QiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFsdWUi'@;
put 'LDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibmFtZSIsInNlbGVjdGVkQ29udGV4dCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsImlkIiwiY29udGV4dHMtYnRuIiwxLCJidG4iLCJidG4taWNvbiIs'@;
put 'MywiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsxLCJkLWZsZXgiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwibXItMTAiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWyJuYW1lIiwiZGNQYXRoIiwidHlwZSIsInRleHQiLCJpZCIsImRj'@;
put 'bG9jIiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiLCJmb2N1c291dCJdLFsxLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsidHlwZSIsImZpbGUiLDMsImNsaWNrIiwiY2hhbmdlIl0sWzEsIm10LTIwIiwiZC1m'@;
put 'bGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsIiIsMSwibXQtMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJjbGFzcyIsImJ0biBidG4tc20gYnRuLWljb24gbWluLXctMCB3LTQwIiwzLCJjbGljayIsNCwibmdJZiJdLFsiaWQiLCJkZXBsb3kiLDEsIm10LTAiLDMsImNsckxv'@;
put 'YWRpbmciLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMywidmFsdWUiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwi'@;
put 'bWItMCIsIm10LTEwIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMCIsIm1yLTIwIiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWJhciIs'@;
put 'NCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJ2YWxpZGF0aW9uLWJhciJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImlzLWVycm9yIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiaXMtc3VjY2VzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1l'@;
put 'KDAsImRpdiIsMCksTmUoMSwiIENvbmZpZ3VyYXRvciAiKSxtZSgyLCJwIiwxKSxOZSgzKSx5ZSgpLG1lKDQsImJ1dHRvbiIsMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmRlbGV0ZUtleXMoKX0pLE5lKDUsIiBDbGVhciBtZW1vcnkgIikseWUoKSgpLG1lKDYsImRpdiIsMyks'@;
put 'SmUoNyxuRWUsMTUsMCwiZGl2Iiw0KSxKZSg4LGdFZSw0OSwyMiwibmctY29udGFpbmVyIiw1KSx5ZSgpKSwyJmEmJihDZSgzKSxncigiQXBwIExvY2F0aW9uOiAiLGQuYXBwTG9jLCIiKSxDZSg0KSxSZSgibmdJZiIsZC5uZWVkc0xvZ2luKSxDZSgxKSxSZSgibmdJZiIsIWQubmVlZHNMb2dp'@;
put 'bikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLENwLGwxLGMxLFdhLE0wLEJzLHdwLE9zLHIyLGthLFp1LGRoLFVzLGlHXSxzdHlsZXM6WyIuY2xlYXItbWVtb3J5LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cmlnaHQ6MTBweDt0b3A6MnB4fSJdfSksY30pKCk7ZnVuY3Rpb24gdkVlKGMsbCl7'@;
put 'MSZjJiYobWUoMCwiZGl2IiwxNSkscXQoMSwicHJvZ3Jlc3MiKSx5ZSgpKX1mdW5jdGlvbiBfRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDE2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLkdST1VQTkFNRSksQ2UoMSksemMoIiAiLGEu'@;
put 'R1JPVVBOQU1FLCIgLSAiLGEuR1JPVVBERVNDLCIgIil9fWxldCBiRWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zYXNqc1NlcnZpY2U9ZCx0aGlzLmxvY2F0aW9uPWgsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcs'@;
put 'dGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBFcix0aGlzLmRjRGlyZWN0b3J5PSIiLHRoaXMuZGNBZG1pbkdyb3VwPSJEQ0RFRkFVTFQiLHRoaXMuTUVUQVBFUlNPTj0ibi9hIix0aGlzLk1FVEFVU0VSPSJuL2EiLHRoaXMuU1lTVVNFUklEPSJuL2EiLHRoaXMuU1lTSE9TVE5BTUU9Im4vYSIs'@;
put 'dGhpcy5TWVNWTE9ORz0ibi9hIix0aGlzLmRjQWRtaW5Hcm91cExpc3Q9W10sdGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0xvZ291dD0hMSx0aGlzLnRtcERpcmVjdG9yaWVzPXtsaW51eDoiL3RtcC9EYXRhQ29udHJvbGxlciIsd2luZG93czoiQzpcXERhdGFDb250cm9sbGVyIn19bmdPbklu'@;
put 'aXQoKXt0aGlzLmdldFVzZXJHcm91cHMoKSx0aGlzLmdldFNlcnZlckluZm8oKX1nZXRTZXJ2ZXJJbmZvKCl7dGhpcy5zYXNqc1NlcnZpY2UuZ2V0U2VydmVySW5mbygpLnN1YnNjcmliZShhPT57ImRlc2t0b3AiIT09YS5tb2RlJiYodGhpcy5zaG93TG9nb3V0PSEwKX0pfWdldFVzZXJHcm91'@;
put 'cHMoKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIixudWxsKS50aGVuKGE9Pnt0aGlzLk1FVEFQRVJTT049YS5NRl9HRVRVU0VSLHRoaXMuU1lTVVNFUklEPWEuU1lTVVNFUklELHRoaXMuU1lTSE9TVE5BTUU9YS5T'@;
put 'WVNIT1NUTkFNRSx0aGlzLlNZU1ZMT05HPWEuU1lTVkxPTkcsdGhpcy5kY0RpcmVjdG9yeT10aGlzLnRtcERpcmVjdG9yaWVzW1siTCIsIkgiLCJBIiwiUyJdLmluY2x1ZGVzKGEuU1lTU0NQTC5zdWJzdHJpbmcoMCwxKSk/ImxpbnV4Ijoid2luZG93cyJdLHRoaXMuZGNBZG1pbkdyb3VwTGlz'@;
put 'dD1hLmdyb3Vwcyx0aGlzLmRjQWRtaW5Hcm91cD10aGlzLmRjQWRtaW5Hcm91cExpc3RbMF0uR1JPVVBOQU1FLHRoaXMubG9hZGluZz0hMX0sYT0+e3RoaXMubG9hZGluZz0hMX0pfW1ha2VEYXRhKCl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtjb25zdCBoPXRo'@;
put 'aXMuc2FzSnNDb25maWcuYXBwTG9jO2xldCBmPXRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsLF89dGhpcy5kY0RpcmVjdG9yeTt0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1aYy5ELlNhc2pzP3RoaXMuc2FzU2VydmljZS5zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKS50aGVuKFc9PntX'@;
put 'JiYodGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi8iKSxsb2NhdGlvbi5yZWxvYWQoKSl9KTp0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1aYy5ELlNhczkmJihmPSIiLGQ9d2luZG93LmxvY2F0aW9uLm9yaWdpbitkKyIvIixfPWVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRjRGly'@;
put 'ZWN0b3J5KSksd2luZG93Lm9wZW4oYCR7Znx8IiJ9JHtkfT9fcHJvZ3JhbT0ke2h9L3NlcnZpY2VzL2FkbWluL21ha2VkYXRhJmFkbWluPSR7dGhpcy5kY0FkbWluR3JvdXB9JnBhdGg9JHtffSBgLCJfYmxhbmsiKX1sb2dvdXQoKXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dChpcSksdHQoSmQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pz'@;
put 'Q29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDEsdmFyczo5LGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxv'@;
put 'b3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3Jh'@;
put 'cHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFs'@;
put 'dWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsIm10LTE1IiwidGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIs'@;
put 'Imxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihKZSgwLHZFZSwyLDAsImRpdiIsMCksbWUoMSwiaDQiLDEpLE5lKDIsIlNhc2pzIERlcGxveSIpLHllKCkscXQoMywiaHIiLDIpLG1lKDQsInAiLDMpLE5lKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250'@;
put 'cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6XG4iKSx5ZSgpLG1lKDYsInAiLDQpLE5lKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNpY2FsIGRpcmVjdG9yeSBiZWxvdywgdG8gd2hpY2ggdXNlciAiKSxtZSg4LCJzdHJvbmciKSxOZSg5'@;
put 'KSx5ZSgpLE5lKDEwLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBDb250cm9sbGVyOlxuIikseWUoKSxtZSgxMSwibGFiZWwiLDUpLE5lKDEyLCJEQyBEaXJlY3RvcnkiKSx5ZSgpLG1lKDEzLCJkaXYiLDYpKDE0LCJkaXYiLDcpKDE1LCJpbnB1dCIsOCkseHQoIm5nTW9kZWxDaGFu'@;
put 'Z2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRjRGlyZWN0b3J5PWZ9KSx5ZSgpKCkoKSxtZSgxNiwicCIsNCksTmUoMTcsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENv'@;
put 'bnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSx5ZSgpLG1lKDE4LCJsYWJlbCIsNSksTmUoMTksIkRhdGEgQ29udHJvbGxlciBBZG1pbiBncm91cCIpLHllKCksbWUoMjAs'@;
put 'ImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyMSwic2VsZWN0IiwxMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRjQWRtaW5Hcm91cD1mfSksSmUoMjIsX0VlLDIsMywib3B0aW9uIiwxMSkseWUoKSgpLG1lKDIzLCJwIiw0KSxOZSgyNCwiIE5vdywgY3JlYXRl'@;
put 'IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBkZXBsb3kgdGhlIGNvbnRyb2wgbGlicmFyeSB1c2luZyB0aGUgYWRtaW4gZ3JvdXAgc2VsZWN0ZWQgYWJvdmU6XG4iKSx5ZSgpLG1lKDI1LCJkaXYiLDEyKSgyNiwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm1h'@;
put 'a2VEYXRhKCl9KSxOZSgyNywiIFNVQk1JVCAiKSx5ZSgpKCkscXQoMjgsImhyIiwyKSxtZSgyOSwiZGl2IiwxNCkoMzAsInAiKSxOZSgzMSwiWW91IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWxzOiIpLHllKCksbWUoMzIsInVsIikoMzMsImxpIiksTmUoMzQp'@;
put 'LHllKCksbWUoMzUsImxpIiksTmUoMzYpLHllKCksbWUoMzcsImxpIiksTmUoMzgpLHllKCksbWUoMzksImxpIiksTmUoNDApLHllKCkoKSgpKSwyJmEmJihSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSg5KSxvcihkLlNZU1VTRVJJRCksQ2UoNiksUmUoIm5nTW9kZWwiLGQuZGNEaXJlY3Rvcnkp'@;
put 'LENlKDYpLFJlKCJuZ01vZGVsIixkLmRjQWRtaW5Hcm91cCksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZGNBZG1pbkdyb3VwTGlzdCksQ2UoMTIpLGdyKCJNRVRBUEVSU09OOiAiLGQuTUVUQVBFUlNPTiwiIiksQ2UoMiksZ3IoIlNZU1VTRVJJRDogIixkLlNZU1VTRVJJRCwiIiksQ2UoMiksZ3Io'@;
put 'IlNZU0hPU1ROQU1FOiAiLGQuU1lTSE9TVE5BTUUsIiIpLENlKDIpLGdyKCJTWVNWTE9ORzogIixkLlNZU1ZMT05HLCIiKSl9LGRlcGVuZGVuY2llczpbeHMsWmksbDEsYzEsV2EsTTAsQnMsT3MsVXMsTjgsSDhdLHN0eWxlczpbIi5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0l'@;
put 'Q09NUCVde3dpZHRoOjUwdnd9LmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50aGluUHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH0udGhpblByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0b3A6MH0iXX0pLGN9KSgpO2Z1bmN0aW9uIHlFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRp'@;
put 'diIsNCkoMSwiZGl2Iiw1KSxOZSgyLCJUZXJtcyBhbmQgQ29uZGl0aW9ucyIpLHllKCksbWUoMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsInAiKSxOZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJlZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBC'@;
put 'ZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byB0aGUgIiksbWUoNywiYSIsOCksTmUoOCwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdy'@;
put 'ZWVtZW50IikseWUoKSxOZSg5LCIuICIpLHllKCkoKSxxdCgxMCwiaHIiLDkpLG1lKDExLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEyLCJpbnB1dCIsMTApLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudGVybXNBZ3JlZUNoYW5nZSgpKX0pLHllKCksbWUo'@;
put 'MTMsImxhYmVsIiksTmUoMTQsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlICIpLG1lKDE1LCJhIiw4KSxOZSgxNiwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IikseWUoKSgpKCkoKSgpfX1mdW5jdGlvbiB3RWUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE1KSgxLCJhcHAtYXV0b21hdGljLWRlcGxveSIsMTYpLHh0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3Qg'@;
put 'YT1WZSgzKTtDZSgxKSxSZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIsYS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEu'@;
put 'c2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gQ0VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNykoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDE4KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykub25OYXZpZ2F0'@;
put 'ZVRvSG9tZSgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIFNFZShjLGwpe2lmKDEmYyYm'@;
put 'KFZyKDApLEplKDEsd0VlLDIsNiwiZGl2IiwxMyksSmUoMixDRWUsMiwzLCJkaXYiLDE0KSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLGEuYXV0b2RlcGxveSksQ2UoMSksUmUoIm5nSWYiLCFhLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiBNRWUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCkseHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx5ZSgpKCksenIoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9VmUoMik7Q2UoMiksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIHhFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImRpdiIs'@;
put 'MTUpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE4KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLHllKCkoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgic2FzSnMiLGEu'@;
put 'c2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gRUVlKGMsbCl7aWYoMSZjJiYoVnIoMCwxMSksSmUoMSxTRWUsMywyLCJuZy1jb250YWluZXIiLDEyKSxKZSgyLE1FZSwzLDMsIm5nLWNv'@;
put 'bnRhaW5lciIsMTIpLEplKDMseEVlLDMsMywibmctY29udGFpbmVyIiwxMiksenIoKSksMiZjKXtjb25zdCBhPVZlKCk7UmUoIm5nU3dpdGNoIiwhMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEp'@;
put 'LFJlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgJGVlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc3RlcD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5jbGllbnRfc2VjcmV0PSIiLHRo'@;
put 'aXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuYXV0b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPVpjLkQsdGhpcy5kY0FkYXB0ZXJT'@;
put 'ZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0aGlzLmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzSW5zdGFuY2UoKSx0aGlz'@;
put 'LnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuYXBwTG9jPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhpcy5jbGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQiKXx8IiIsdGhpcy5jbGllbnRf'@;
put 'c2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfc2VjcmV0X2tleSIpfHwiIix0aGlzLmRjUGF0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2RjX2xvYyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PVpjLkQuU2FzVml5YSYmZmV0'@;
put 'Y2goInNhc2J1aWxkL3ZpeWEuanNvbiIpLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkPW51bGw7dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmpzb25GaWxlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmpzb25GaWxl'@;
put 'KSl9KSx0aGlzLnNldERlcGxveURlZmF1bHRzKCl9c2V0RGVwbG95RGVmYXVsdHMoKXt0aGlzLmRjUGF0aD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5kY1BhdGh8fCIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFkbWluR3JvdXB8fCIiLHRoaXMu'@;
put 'c2VsZWN0ZWRBZG1pbkdyb3VwfHwodGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIil9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYXV0b2RlcGxveXx8dGhpcy5nZXRBZG1pbkdyb3VwcygpLHRoaXMuc3RlcCsrfWdldEFkbWluR3JvdXBzKCl7ZmV0Y2godGhpcy5z'@;
put 'YXNKc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9zb3J0Qnk9bmFtZSZsaW1pdD01MDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZDt0cnl7ZD1KU09OLnBhcnNlKGEpfWNhdGNoKGgp'@;
put 'e2NvbnNvbGUuZXJyb3IoaCl9ZCYmKHRoaXMuYWRtaW5Hcm91cHM9ZC5pdGVtcyx0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmFkbWluR3JvdXBzWzBdLmlkKX0pfW9uTmF2aWdhdGVUb0hvbWUoKXt3aW5kb3cub3Blbihsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0sIl9ibGFuayIp'@;
put 'fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChlOCksdHQob2EpLHR0KHcwKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGVwbG95Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxk'@;
put 'ZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJjbHItcm93Il0sWyJpZCIsIlRDUyIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsiaWQiLCJUQ1MiLDEsImNhcmQiXSxbMSwiY2Fy'@;
put 'ZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJjYXJkLXRleHQiXSxbImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0'@;
put 'eXBlIiwiY2hlY2tib3giLDMsImNoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiYXV0b2RlcGxveS1zZWN0aW9uIGNhcmQiLDQsIm5nSWYiXSxbImlkIiwibWFpbmJvZHkiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiYXV0b2RlcGxveS1z'@;
put 'ZWN0aW9uIiwiY2FyZCJdLFszLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJhcHBMb2MiLCJkY1BhdGgiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJvbk5hdmlnYXRlVG9Ib21lIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJkIl0sWzMsInNhc0pzIiwic2FzSnND'@;
put 'b25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyIsIm9uTmF2aWdhdGVUb0hvbWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSksSmUoMix5RWUsMTcsMCwiZGl2IiwyKSx5ZSgpLEplKDMsRUVlLDQsNCwibmctY29udGFpbmVyIiwzKSx5ZSgp'@;
put 'KSwyJmEmJihDZSgyKSxSZSgibmdJZiIsMD09PWQuc3RlcCksQ2UoMSksUmUoIm5nSWYiLGQuc3RlcD4wKSl9LGRlcGVuZGVuY2llczpbWmksbmQsdGgsVXMsRDAsVDAsdEVlLG1FZSxiRWVdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LmJ0bltfbmdj'@;
put 'b250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmMGYwZjA7Ym9yZGVyOjFweCBzb2xpZCAjYzljOWM5O3BhZGRpbmc6MTBweDtvdmVyZmxvdzphdXRvO3doaXRlLXNwYWNlOnByZS13cmFw'@;
put 'fSNjb250ZXh0cy1idG5bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4IDAgMDttaW4td2lkdGg6MzBweDttYXJnaW4tbGVmdDoxMHB4O2hlaWdodDozMHB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnZhbGlkYXRp'@;
put 'b24tYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udmFsaWRhdGlvbi1iYXJbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo1cHh9LmF1dG9kZXBs'@;
put 'b3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDE1cHh9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNoZWNrYm94LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4IDB9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuYnRuLWF1dG9kZXBsb3lbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjE1cHggMH0iXX0pLGN9KSgpO2NvbnN0IGtFZT1be3BhdGg6IiIsY29tcG9uZW50OiRlZX0se3BhdGg6Im1hbnVhbGRlcGxveSIsY29tcG9uZW50OiRlZX1dO2xl'@;
put 'dCBBRWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbaGMuZm9yQ2hpbGQoa0VlKSxoY119KSxjfSkoKSxURWU9KCgpPT57Y2xhc3Mg'@;
put 'Y3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28scWwsX3UsQUVlXX0pLGN9KSgpO0YoODcxMyksRig1NjU4KSxGKDkxOTQ1KTt2YXIgREVlPUYoNzA4OTYp'@;
put 'O2Z1bmN0aW9uIHFlZShjKXtjb25zdCBsPWMubGVuZ3RoO2xldCBhPTA7Zm9yKDthPGw7KWNbYV09W2NbYV1dLGErPTF9ZnVuY3Rpb24gbk4oYyxsKXtjb25zdCBhPWwubGVuZ3RoO2xldCBkPTA7Zm9yKDtkPGE7KWMucHVzaChsW2RdKSxkKz0xfWZ1bmN0aW9uIEtiKGMpe2NvbnN0IGw9W107'@;
put 'aWYoIWN8fDA9PT1jLmxlbmd0aHx8IWNbMF18fDA9PT1jWzBdLmxlbmd0aClyZXR1cm4gbDtjb25zdCBhPWMubGVuZ3RoLGQ9Y1swXS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhO2grKylmb3IobGV0IGY9MDtmPGQ7ZisrKWxbZl18fChsW2ZdPVtdKSxsW2ZdW2hdPWNbaF1bZl07cmV0dXJuIGx9'@;
put 'ZnVuY3Rpb24gQWwoYyxsLGEsZCl7bGV0IGg9LTEsZj1jLF89YTtBcnJheS5pc0FycmF5KGMpfHwoZj1BcnJheS5mcm9tKGMpKTtjb25zdCBUPWYubGVuZ3RoO2ZvcihkJiZUJiYoaCs9MSxfPWZbaF0pLGgrPTE7aDxUOylfPWwoXyxmW2hdLGgsZiksaCs9MTtyZXR1cm4gX31mdW5jdGlvbiBf'@;
put 'MShjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgXz0tMTtmb3IoO2E8aDspe2NvbnN0IFQ9ZFthXTtsKFQsYSxkKSYmKF8rPTEsZltfXT1UKSxhKz0xfXJldHVybiBmfWZ1bmN0aW9uIGNzKGMsbCl7'@;
put 'bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCBfPS0xO2Zvcig7YTxoOylfKz0xLGZbX109bChkW2FdLGEsZCksYSs9MTtyZXR1cm4gZn1mdW5jdGlvbiBEbihjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJy'@;
put 'YXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGg7Zm9yKDthPGgmJiExIT09bChkW2FdLGEsZCk7KWErPTE7cmV0dXJuIGN9ZnVuY3Rpb24gS2VlKGMpe3JldHVybiBBbChjLChsLGEpPT5sK2EsMCl9ZnVuY3Rpb24gSUVlKGMpe3JldHVybiBBbChjLChsLGEpPT5sPmE/'@;
put 'bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1bmN0aW9uIExFZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bDxhP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBSRWUoYyl7cmV0dXJuIGMubGVuZ3RoP0tlZShjKS9jLmxlbmd0aDowfWZ1bmN0aW9u'@;
put 'IFhlZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bC5jb25jYXQoQXJyYXkuaXNBcnJheShhKT9YZWUoYSk6YSksW10pfWZ1bmN0aW9uIHJOKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+ey0xPT09bC5pbmRleE9mKGEpJiZsLnB1c2goYSl9KSxsfWZ1bmN0aW9uIGlOKCl7Zm9yKHZhciBj'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gRG4oaCxfPT57Zj1mLmZpbHRlcihUPT4hXy5pbmNsdWRlcyhUKSl9KSxmfWZ1bmN0aW9uIE9FZSgpe2Zvcih2YXIg'@;
put 'Yz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIERuKGgsXz0+e2Y9Zi5maWx0ZXIoVD0+Xy5pbmNsdWRlcyhUKSl9KSxmfWZ1bmN0aW9uIFBFZSgpe2Zvcih2YXIg'@;
put 'Yz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdLGY9bmV3IFNldChkKTtyZXR1cm4gRG4oaCxfPT57RG4oXyxUPT57Zi5oYXMoVCl8fGYuYWRkKFQpfSl9KSxBcnJheS5mcm9tKGYpfWZ1bmN0'@;
put 'aW9uIG9OKGMpe3JldHVybiBjLnNwbGl0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiICIpfWZ1bmN0aW9uIEFhKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtk'@;
put 'LTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gQWwoYywoZixfLFQpPT5mK18ucmVwbGFjZSgvXHI/XG5ccyovZywiIikrKGFbVF0/YVtUXToiIiksIiIpLnRyaW0oKX1mdW5jdGlvbiBfbChjKXtsZXQgbDtzd2l0Y2godHlwZW9mIGMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bD1gJHtjfWA7'@;
put 'YnJlYWs7Y2FzZSJvYmplY3QiOmw9bnVsbD09PWM/IiI6Yy50b1N0cmluZygpO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPSIiO2JyZWFrO2RlZmF1bHQ6bD1jLnRvU3RyaW5nKCl9cmV0dXJuIGx9ZnVuY3Rpb24gS2koYyl7cmV0dXJuIHR5cGVvZiBjPCJ1In1mdW5jdGlvbiBMYShjKXtyZXR1'@;
put 'cm4gdHlwZW9mIGM+InUifWZ1bmN0aW9uIGdjKGMpe3JldHVybiBudWxsPT09Y3x8IiI9PT1jfHxMYShjKX1mdW5jdGlvbiBKZWUoYyl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9Y29uc3QgWGI9Imxlbmd0aCIsSmI9Yz0+cGFy'@;
put 'c2VJbnQoYywxNiksUWVlPWM9PnBhcnNlSW50KGMsMTApLG5rPShjLGwsYSk9PmMuc3Vic3RyKGwsYSksUWI9Yz0+Yy5jb2RlUG9pbnRBdCgwKS02NSxzTj1jPT5gJHtjfWAucmVwbGFjZSgvXC0vZywiIiksRkVlPWM9PkpiKG5rKHNOKGMpLEpiKCIxMiIpLFFiKCJGIikpKS8oSmIobmsoc04o'@;
put 'YyksUWIoIkIiKSx+fiFbXVtYYl0pKXx8OSksSEVlPSgpPT50eXBlb2YgbG9jYXRpb248InUiJiYvXihbYS16MC05XC1dK1wuKT9ceDY4XHg2MVx4NkVceDY0XHg3M1x4NkZceDZFXHg3NFx4NjFceDYyXHg2Q1x4NjVceDJFXHg2M1x4NkZceDZEJC9pLnRlc3QobG9jYXRpb24uaG9zdCk7bGV0'@;
put 'IGV0ZT0hMTtjb25zdCB0dGU9e2ludmFsaWQ6KCk9PkFhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxleHBpcmVkOmM9'@;
put 'PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBBYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4gUmVu'@;
put 'ZXcgeW91ciBsaWNlbnNlIGtleSBhdCBoYW5kc29udGFibGUuY29tIG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3JceDIwCiAgICB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzYWxlc0BoYW5kc29udGFibGUuY29tLmB9LG1pc3Np'@;
put 'bmc6KCk9PkFhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1'@;
put 'c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdFx4MjAKICAgIHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLG5v'@;
put 'bl9jb21tZXJjaWFsOigpPT4iIn0sbnRlPXtpbnZhbGlkOigpPT5BYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIg'@;
put 'dGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gb24gaG93IHRvXHgyMAogICAgaW5zdGFsbCBpdCBwcm9wZXJseSBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxleHBpcmVk'@;
put 'OmM9PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBBYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4g'@;
put 'PGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL3ByaWNpbmciIHRhcmdldD0iX2JsYW5rIj5SZW5ldzwvYT4geW91clx4MjAKICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3IgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55XHgyMAog'@;
put 'ICAgaGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c2FsZXNAaGFuZHNvbnRhYmxlLmNvbSI+c2FsZXNAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYH0sbWlzc2luZzooKT0+QWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91'@;
put 'ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29t'@;
put 'bWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gYWJvdXQgaXQgaW5ceDIwCiAgICB0aGUgZG9jdW1lbnRhdGlv'@;
put 'biBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9O2Z1bmN0aW9uIHJ0ZShjLGwpe2NvbnN0IGE9IWdjKGMpLGQ9InN0cmluZyI9PXR5cGVv'@;
put 'ZiBjJiYibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPT09Yy50b0xvd2VyQ2FzZSgpLGg9IjEzLjEuMCI7bGV0IGYsXz0iaW52YWxpZCIsVD0iaW52YWxpZCI7Y29uc3QgVz1mdW5jdGlvbiBORWUoYyl7bGV0IGw9W11bWGJdLGE9bDtpZihjW1hiXSE9PVFiKCJaIikpcmV0dXJuITE7'@;
put 'Zm9yKGxldCBkPSIiLGg9IkI8SDRQKyIuc3BsaXQoIiIpLGY9UWIoaC5zaGlmdCgpKTtmO2Y9UWIoaC5zaGlmdCgpfHwiQSIpKS0tZjwiIltYYl0/YXw9KFFlZShgJHtRZWUoSmIoZCkrKEpiKG5rKGMsTWF0aC5hYnMoZiksMikpK1tdKS5wYWRTdGFydCgyLCIwIikpfWApJTk3fHwyKT4+MTpk'@;
put 'PW5rKGMsZixmPzE9PT1oW1hiXT85Ojg6Nik7cmV0dXJuIGE9PT1sfShjPXNOKGN8fCIiKSk7aWYoYXx8ZHx8VylpZihXKXtjb25zdCBpZT1LbygiMzEvMDgvMjAyMyIsIkREL01NL1lZWVkiKSxwZT1NYXRoLmZsb29yKGllLnRvRGF0ZSgpLmdldFRpbWUoKS84NjRlNSksd2U9RkVlKGMpO2Y9'@;
put 'S28oODY0ZTUqKHdlKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIikscGU+d2U/KF89ImV4cGlyZWQiLFQ9ImV4cGlyZWQiKTooXz0idmFsaWQiLFQ9InZhbGlkIil9ZWxzZSBkPyhfPSJub25fY29tbWVyY2lhbCIsVD0idmFsaWQiKTooXz0iaW52YWxpZCIsVD0iaW52YWxpZCIpO2Vs'@;
put 'c2UgXz0ibWlzc2luZyIsVD0ibWlzc2luZyI7aWYoSEVlKCkmJihfPSJ2YWxpZCIsVD0idmFsaWQiKSwhZXRlJiYidmFsaWQiIT09XyYmKHR0ZVtfXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkmJmNvbnNvbGVbIm5vbl9jb21tZXJjaWFsIj09PV8/ImluZm8iOiJ3YXJuIl0o'@;
put 'dHRlW19dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSksZXRlPSEwKSwidmFsaWQiIT09VCYmbC5wYXJlbnROb2RlJiZudGVbVF0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKXtjb25zdCBwZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtwZS5jbGFz'@;
put 'c05hbWU9ImhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIscGUuaW5uZXJIVE1MPW50ZVtUXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSksbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwZSxsLm5leHRTaWJsaW5nKX19ZnVuY3Rpb24gYnUoYyl7cmV0dXJuIGNbMF0udG9VcHBl'@;
put 'ckNhc2UoKStjLnN1YnN0cigxKX1mdW5jdGlvbiBWRWUoKXtjb25zdCBjPVtdO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO2xldCBoPWEubGVuZ3RoO2Zvcig7aDspe2gtPTE7Y29uc3QgZj1fbChhW2hdKS50'@;
put 'b0xvd2VyQ2FzZSgpOy0xPT09Yy5pbmRleE9mKGYpJiZjLnB1c2goZil9cmV0dXJuIDE9PT1jLmxlbmd0aH1mdW5jdGlvbiBhTigpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1yZXR1cm4g'@;
put 'YygpK2MoKStjKCkrYygpfWZ1bmN0aW9uIGxOKGMpe3JldHVybi9eKFswLTldWzAtOV0/JSQpfCheMTAwJSQpLy50ZXN0KGMpfWZ1bmN0aW9uIGNOKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm5gJHtjfWAu'@;
put 'cmVwbGFjZSgvKD86XFwpP1xbKFteW1xdXSspXS9nLChhLGQpPT4iXFwiPT09YS5jaGFyQXQoMCk/YS5zdWJzdHIoMSxhLmxlbmd0aC0xKTp2b2lkIDA9PT1sW2RdPyIiOmxbZF0pfWZ1bmN0aW9uIHVOKGMpe3JldHVybiByayhgJHtjfWAse0FMTE9XRURfVEFHUzpbXX0pfWZ1bmN0aW9uIHJr'@;
put 'KGMsbCl7cmV0dXJuIERFZS5zYW5pdGl6ZShjLGwpfWZ1bmN0aW9uIGl0ZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPS0xLGQ9bnVsbCxoPWM7Zm9yKDtudWxsIT09aDspe2lmKGE9PT1sKXtkPWg7YnJlYWt9aC5o'@;
put 'b3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2g9aC5ob3N0OihhKz0xLGg9aC5wYXJlbnROb2RlKX1yZXR1cm4gZH1mdW5jdGlvbiBvdGUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCkmJmMuZnJhbWVFbGVtZW50fWZ1bmN0aW9u'@;
put 'IGV5KGMpe3JldHVybiBvdGUoYykmJmMucGFyZW50fWZ1bmN0aW9uIEJFZShjKXtyZXR1cm4hIU9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCl9ZnVuY3Rpb24gTnAoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltd'@;
put 'LGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7Y29uc3R7RUxFTUVOVF9OT0RFOmQsRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpofT1Ob2RlO2xldCBmPWM7Zm9yKDtudWxsIT1mJiZmIT09YTspe2NvbnN0e25vZGVUeXBlOl8sbm9kZU5hbWU6VH09ZjtpZihfPT09ZCYm'@;
put 'KGwuaW5jbHVkZXMoVCl8fGwuaW5jbHVkZXMoZikpKXJldHVybiBmO2NvbnN0e2hvc3Q6V309ZjtmPVcmJl89PT1oP1c6Zi5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIHR5KGMsbCxhKXtjb25zdCBkPVtdO2xldCBoPWM7Zm9yKDtoJiYoaD1OcChoLGwsYSksaCYmKCFhfHxhLmNv'@;
put 'bnRhaW5zKGgpKSk7KWQucHVzaChoKSxoPWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oLmhvc3Q6aC5wYXJlbnROb2RlO2NvbnN0IGY9ZC5sZW5ndGg7cmV0dXJuIGY/ZFtmLTFdOm51bGx9ZnVuY3Rpb24gVnAoYyxsKXtsZXQgYT1jLnBhcmVudE5v'@;
put 'ZGUsZD1bXTtmb3IoInN0cmluZyI9PXR5cGVvZiBsP2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kZWZhdWx0Vmlldz9jLnF1ZXJ5U2VsZWN0b3JBbGwobCk6Yy5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobCksMCk6ZC5wdXNoKGwpO251bGwhPT1hOyl7aWYoZC5pbmRl'@;
put 'eE9mKGEpPi0xKXJldHVybiEwO2E9YS5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIHN0ZShjKXtsZXQgbD0wLGE9YztpZihhLnByZXZpb3VzU2libGluZylmb3IoO2E9YS5wcmV2aW91c1NpYmxpbmc7KWwrPTE7cmV0dXJuIGx9ZnVuY3Rpb24gQnAoYyxsLGEpe2NvbnN0IGQ9YS5wYXJl'@;
put 'bnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5odF9jbG9uZV8ke2N9YCk7cmV0dXJuIGQ/ZC5jb250YWlucyhsKTpudWxsfWZ1bmN0aW9uIGF0ZShjKXtyZXR1cm4gYyYmYy5sZW5ndGg/Yy5maWx0ZXIobD0+ISFsKTpbXX1mdW5jdGlvbiBCbyhjLGwpe3JldHVybiB2b2lkIDAhPT1jLmNsYXNz'@;
put 'TGlzdCYmInN0cmluZyI9PXR5cGVvZiBsJiYiIiE9PWwmJmMuY2xhc3NMaXN0LmNvbnRhaW5zKGwpfWZ1bmN0aW9uIHBpKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsJiYobD1sLnNwbGl0KCIgIikpLChsPWF0ZShsKSkubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LmFkZCguLi5sKX1mdW5jdGlvbiBX'@;
put 'byhjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD1hdGUobCkpLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5yZW1vdmUoLi4ubCl9ZnVuY3Rpb24gZE4oYyl7aWYoMz09PWMubm9kZVR5cGUpYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO2Vsc2UgaWYoWyJUQUJM'@;
put 'RSIsIlRIRUFEIiwiVEJPRFkiLCJURk9PVCIsIlRSIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMSl7Y29uc3QgbD1jLmNoaWxkTm9kZXM7Zm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pZE4obFthXSl9fWZ1bmN0aW9uIGcyKGMpe2xldCBsO2Zvcig7bD1jLmxhc3RDaGlsZDspYy5yZW1v'@;
put 'dmVDaGlsZChsKX1jb25zdCBsdGU9Lyg8KC4qKT58JiguKik7KS87ZnVuY3Rpb24gZ2coYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2x0ZS50ZXN0KGwpP2MuaW5uZXJIVE1MPWE/cmsobCk6bDpqcChjLGwpfWZ1'@;
put 'bmN0aW9uIGpwKGMsbCl7Y29uc3QgYT1jLmZpcnN0Q2hpbGQ7YSYmMz09PWEubm9kZVR5cGUmJm51bGw9PT1hLm5leHRTaWJsaW5nP2EudGV4dENvbnRlbnQ9bDooZzIoYyksYy5hcHBlbmRDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobCkpKX1mdW5jdGlvbiBlNyhjKXtj'@;
put 'b25zdCBsPWMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7bGV0IGE9Yztmb3IoO2EhPT1sOyl7aWYobnVsbD09PWEpcmV0dXJuITE7aWYoYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7aWYoYS5ob3N0KXtpZihhLmhvc3QuaW1wbClyZXR1cm4gZTcoYS5o'@;
put 'b3N0LmltcGwpO2lmKGEuaG9zdClyZXR1cm4gZTcoYS5ob3N0KTt0aHJvdyBuZXcgRXJyb3IoIkxvc3QgaW4gV2ViIENvbXBvbmVudHMgd29ybGQiKX1yZXR1cm4hMX1pZihhLnN0eWxlJiYibm9uZSI9PT1hLnN0eWxlLmRpc3BsYXkpcmV0dXJuITE7YT1hLnBhcmVudE5vZGV9cmV0dXJuITB9'@;
put 'ZnVuY3Rpb24gS2woYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3LGQ9bC5kb2N1bWVudEVsZW1lbnQ7bGV0IGYsXyxULGg9Yztmb3IoZj1oLm9mZnNldExlZnQsXz1oLm9mZnNldFRvcCxUPWg7KGg9aC5vZmZzZXRQYXJlbnQpJiZoIT09bC5ib2R5OylmKz1oLm9m'@;
put 'ZnNldExlZnQsXys9aC5vZmZzZXRUb3AsVD1oO3JldHVybiBUJiYiZml4ZWQiPT09VC5zdHlsZS5wb3NpdGlvbiYmKGYrPWEucGFnZVhPZmZzZXR8fGQuc2Nyb2xsTGVmdCxfKz1hLnBhZ2VZT2Zmc2V0fHxkLnNjcm9sbFRvcCkse2xlZnQ6Zix0b3A6X319ZnVuY3Rpb24gdDcoKXtyZXR1cm4o'@;
put 'YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWX1mdW5jdGlvbiBtZygpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxYfWZ1'@;
put 'bmN0aW9uIG55KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP3Q3KGwpOmMuc2Nyb2xsVG9wfWZ1bmN0aW9uIGlrKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP21nKGwpOmMuc2Nyb2xsTGVmdH1mdW5jdGlvbiByeShjKXtsZXQgbD1jLm93bmVyRG9jdW1lbnQsYT1sP2wuZGVmYXVsdFZpZXc6dm9pZCAwO2x8fChsPWMuZG9jdW1lbnQ/Yy5kb2N1bWVudDpjLGE9bC5kZWZhdWx0'@;
put 'Vmlldyk7Y29uc3QgZD1bImF1dG8iLCJzY3JvbGwiXTtsZXQgaD1jLnBhcmVudE5vZGU7Zm9yKDtoJiZoLnN0eWxlJiZsLmJvZHkhPT1oOyl7bGV0e292ZXJmbG93OmYsb3ZlcmZsb3dYOl8sb3ZlcmZsb3dZOlR9PWguc3R5bGU7aWYoW2YsXyxUXS5pbmNsdWRlcygic2Nyb2xsIikpcmV0dXJu'@;
put 'IGg7aWYoKHtvdmVyZmxvdzpmLG92ZXJmbG93WDpfLG92ZXJmbG93WTpUfT1hLmdldENvbXB1dGVkU3R5bGUoaCkpLGQuaW5jbHVkZXMoZil8fGQuaW5jbHVkZXMoXyl8fGQuaW5jbHVkZXMoVCl8fGguY2xpZW50SGVpZ2h0PD1oLnNjcm9sbEhlaWdodCsxJiYoZC5pbmNsdWRlcyhUKXx8ZC5p'@;
put 'bmNsdWRlcyhmKSl8fGguY2xpZW50V2lkdGg8PWguc2Nyb2xsV2lkdGgrMSYmKGQuaW5jbHVkZXMoXyl8fGQuaW5jbHVkZXMoZikpKXJldHVybiBoO2g9aC5wYXJlbnROb2RlfXJldHVybiBhfWZ1bmN0aW9uIHZnKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0Vmlldzts'@;
put 'ZXQgZD1jLnBhcmVudE5vZGU7Zm9yKDtkJiZkLnN0eWxlJiZsLmJvZHkhPT1kOyl7aWYoInZpc2libGUiIT09ZC5zdHlsZS5vdmVyZmxvdyYmIiIhPT1kLnN0eWxlLm92ZXJmbG93KXJldHVybiBkO2NvbnN0IGg9enAoZCxhKSxmPVsic2Nyb2xsIiwiaGlkZGVuIiwiYXV0byJdLF89aC5nZXRQ'@;
put 'cm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpLFQ9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy15IiksVz1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXgiKTtpZihmLmluY2x1ZGVzKF8pfHxmLmluY2x1ZGVzKFQpfHxmLmluY2x1ZGVzKFcpKXJldHVybiBkO2Q9ZC5wYXJlbnROb2Rl'@;
put 'fXJldHVybiBhfWZ1bmN0aW9uIG43KGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOndpbmRvdztpZighYylyZXR1cm47aWYoYz09PWEpcmV0dXJuIndpZHRoIj09PWw/YCR7YS5pbm5lcldpZHRofXB4YDoiaGVpZ2h0Ij09'@;
put 'PWw/YCR7YS5pbm5lckhlaWdodH1weGA6dm9pZCAwO2NvbnN0IGQ9Yy5zdHlsZVtsXTtpZigiIiE9PWQmJnZvaWQgMCE9PWQpcmV0dXJuIGQ7Y29uc3QgaD16cChjLGEpO3JldHVybiIiIT09aFtsXSYmdm9pZCAwIT09aFtsXT9oW2xdOnZvaWQgMH1mdW5jdGlvbiBqRWUoYyxsKXtjb25zdHtz'@;
put 'ZWxlY3RvclRleHQ6YX09bDtsZXQgZD0hMTtyZXR1cm4gbC50eXBlPT09Q1NTUnVsZS5TVFlMRV9SVUxFJiZhJiYoYy5tc01hdGNoZXNTZWxlY3Rvcj9kPWMubXNNYXRjaGVzU2VsZWN0b3IoYSk6Yy5tYXRjaGVzJiYoZD1jLm1hdGNoZXMoYSkpKSxkfWZ1bmN0aW9uIHpwKGMpe2xldCBsPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGMuY3VycmVudFN0eWxlfHxsLmdldENvbXB1dGVkU3R5bGUoYyl9ZnVuY3Rpb24gd2EoYyl7cmV0dXJuIGMub2Zmc2V0V2lkdGh9ZnVuY3Rpb24gYWwoYyl7cmV0dXJuIGMu'@;
put 'b2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIGpmKGMpe3JldHVybiBjLmNsaWVudEhlaWdodHx8Yy5pbm5lckhlaWdodH1mdW5jdGlvbiBpeShjKXtyZXR1cm4gYy5jbGllbnRXaWR0aHx8Yy5pbm5lcldpZHRofWZ1bmN0aW9uIHpFZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVu'@;
put 'Y3Rpb24gVUVlKGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBoTihjKXtyZXR1cm4gYy5zZWxlY3Rpb25TdGFydD9jLnNlbGVjdGlvblN0YXJ0OjB9ZnVuY3Rpb24gY3RlKGMpe3JldHVybiBjLnNlbGVjdGlvbkVuZD9jLnNlbGVjdGlvbkVuZDowfWZ1bmN0'@;
put 'aW9uIHV0ZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Y29uc3QgbD1jLmRvY3VtZW50O2xldCBhPSIiO3JldHVybiBjLmdldFNlbGVjdGlvbj9hPWMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTpsLnNlbGVj'@;
put 'dGlvbiYmIkNvbnRyb2wiIT09bC5zZWxlY3Rpb24udHlwZSYmKGE9bC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0KSxhfWZ1bmN0aW9uIGZOKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjLmdldFNlbGVj'@;
put 'dGlvbiYmKGMuZ2V0U2VsZWN0aW9uKCkuZW1wdHk/Yy5nZXRTZWxlY3Rpb24oKS5lbXB0eSgpOmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzJiZjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpKX1mdW5jdGlvbiBveShjLGwsYSl7aWYodm9pZCAwPT09YSYmKGE9bCks'@;
put 'Yy5zZXRTZWxlY3Rpb25SYW5nZSl7Yy5mb2N1cygpO3RyeXtjLnNldFNlbGVjdGlvblJhbmdlKGwsYSl9Y2F0Y2h7Y29uc3QgaD1jLnBhcmVudE5vZGUsZj1oLnN0eWxlLmRpc3BsYXk7aC5zdHlsZS5kaXNwbGF5PSJibG9jayIsYy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpLGguc3R5bGUuZGlz'@;
put 'cGxheT1mfX19bGV0IHBOO2Z1bmN0aW9uIExjKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O3JldHVybiB2b2lkIDA9PT1wTiYmKHBOPWZ1bmN0aW9uIFpFZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZS5oZWlnaHQ9IjIwMHB4IixsLnN0eWxlLndpZHRoPSIxMDAlIjtjb25zdCBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS5ib3hTaXpp'@;
put 'bmc9ImNvbnRlbnQtYm94IixhLnN0eWxlLmhlaWdodD0iMTUwcHgiLGEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD0iMHB4IixhLnN0eWxlLndpZHRoPSIyMDBweCIsYS5zdHlsZS52aXNp'@;
put 'YmlsaXR5PSJoaWRkZW4iLGEuYXBwZW5kQ2hpbGQobCksKGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGEpO2NvbnN0IGQ9bC5vZmZzZXRXaWR0aDthLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2xldCBoPWwub2Zmc2V0V2lkdGg7cmV0dXJuIGQ9PT1oJiYoaD1hLmNs'@;
put 'aWVudFdpZHRoKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkucmVtb3ZlQ2hpbGQoYSksZC1ofShjKSkscE59ZnVuY3Rpb24gZHRlKGMpe3JldHVybiBjLm9mZnNldFdpZHRoIT09Yy5jbGllbnRXaWR0aH1mdW5jdGlvbiBodGUoYyl7cmV0dXJuIGMub2Zmc2V0SGVpZ2h0IT09Yy5jbGll'@;
put 'bnRIZWlnaHR9ZnVuY3Rpb24gb2soYyxsLGEpe2Muc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke2x9LCR7YX0sMClgfWZ1bmN0aW9uIFlFZShjKXtsZXQgbDtyZXR1cm4gYy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09KGw9Yy5zdHlsZS50cmFuc2Zvcm0pP1sidHJhbnNmb3JtIixsXTot'@;
put 'MX1mdW5jdGlvbiBzeShjKXtjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT1jLnN0eWxlLnRyYW5zZm9ybSYmKGMuc3R5bGUudHJhbnNmb3JtPSIiKX1mdW5jdGlvbiBheShjKXtyZXR1cm4gYyYmKFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTF8fCJ0'@;
put 'cnVlIj09PWMuY29udGVudEVkaXRhYmxlKX1mdW5jdGlvbiBzayhjKXtyZXR1cm4gYXkoYykmJiExPT09Yy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iil9ZnVuY3Rpb24gZnRlKGMpe3NrKGMub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8Yy5zZWxlY3QoKX1mdW5jdGlvbiBn'@;
put 'TihjKXtyZXR1cm4hYy5wYXJlbnROb2RlfWZ1bmN0aW9uIHB0ZShjLGwpe25ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZCxoKT0+e2QuZm9yRWFjaChmPT57Zi5pc0ludGVyc2VjdGluZyYmbnVsbCE9PWMub2Zmc2V0UGFyZW50JiYobCgpLGgudW5vYnNlcnZlKGMpKX0pfSx7cm9vdDpjLm93'@;
put 'bmVyRG9jdW1lbnQuYm9keX0pLm9ic2VydmUoYyl9ZnVuY3Rpb24gUmEoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gZ3RlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT0wO2NvbnN0IGQ9'@;
put 'e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaD1udWxsO3JldHVybiBmdW5jdGlvbiBmKCl7Zm9yKHZhciBfPWFyZ3VtZW50cy5sZW5ndGgsVD1uZXcgQXJyYXkoXyksVz0wO1c8XztXKyspVFtXXT1hcmd1bWVudHNbV107Y29uc3QgaWU9RGF0ZS5ub3coKTtsZXQgcGU9ITE7ZC5sYXN0Q2Fs'@;
put 'bFRocm90dGxlZD0hMCxhfHwoYT1pZSxwZT0hMCk7Y29uc3Qgd2U9bC0oaWUtYSk7cmV0dXJuIHBlPyhkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxUKSk6KGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoKCk9PntkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBw'@;
put 'bHkodGhpcyxUKSxhPTAsaD12b2lkIDB9LHdlKSksZH19ZnVuY3Rpb24gV0VlKGMpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDtjb25zdCBkPWd0ZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdP2FyZ3VtZW50c1sxXToyMDApO2xldCBoPWE7ZnVuY3Rpb24gXygpe2Zvcih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFQpLGllPTA7aWU8VDtpZSsrKVdbaWVdPWFyZ3VtZW50c1tpZV07cmV0dXJuIGg/KGgtPTEsYy5hcHBseSh0aGlzLFcpKTpkLmFwcGx5KHRoaXMs'@;
put 'Vyl9cmV0dXJuIF8uY2xlYXJIaXRzPWZ1bmN0aW9uIGYoKXtoPWF9LF99ZnVuY3Rpb24gbU4oYyl7bGV0IGQsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9bnVsbDtyZXR1cm4gZnVuY3Rpb24gaCgpe2Zvcih2YXIgZj1hcmd1'@;
put 'bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKV9bVF09YXJndW1lbnRzW1RdO3JldHVybiBhJiZjbGVhclRpbWVvdXQoYSksYT1zZXRUaW1lb3V0KCgpPT57ZD1jLmFwcGx5KHRoaXMsXyl9LGwpLGR9fWZ1bmN0aW9uIEdFZSgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVu'@;
put 'Z3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09bDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIF89YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShfKSxXPTA7VzxfO1crKylUW1ddPWFyZ3VtZW50c1tXXTtyZXR1cm4gQWwo'@;
put 'aCwoaWUscGUpPT5wZShpZSksZC5hcHBseSh0aGlzLFQpKX19ZnVuY3Rpb24gdk4oYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1'@;
put 'bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKV9bVF09YXJndW1lbnRzW1RdO3JldHVybiBjLmFwcGx5KHRoaXMsYS5jb25jYXQoXykpfX1mdW5jdGlvbiBtdGUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPTA7VDxmO1QrKylfW1RdPWFyZ3VtZW50c1tUXTtjb25zdCBXPWQuY29uY2F0KF8pO2xldCBpZTtyZXR1cm4gaWU9Vy5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLFcpOmEoVyksaWV9fShbXSl9ZnVuY3Rpb24gJEVlKGMp'@;
put 'e2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkoZiksVD0wO1Q8ZjtUKyspX1tUXT1hcmd1bWVudHNbVF07Y29uc3QgVz1kLmNvbmNhdChfLnJldmVyc2UoKSk7bGV0IGll'@;
put 'O3JldHVybiBpZT1XLmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsVyk6YShXKSxpZX19KFtdKX1mdW5jdGlvbiBhayhjLGwsYSxkLGgsZixfLFQpe3JldHVybiBLaShUKT9jLmNhbGwobCxhLGQsaCxmLF8sVCk6S2koXyk/Yy5jYWxsKGwsYSxkLGgsZixfKTpLaShmKT9jLmNhbGwobCxhLGQsaCxm'@;
put 'KTpLaShoKT9jLmNhbGwobCxhLGQsaCk6S2koZCk/Yy5jYWxsKGwsYSxkKTpLaShhKT9jLmNhbGwobCxhKTpjLmNhbGwobCl9ZnVuY3Rpb24gcjcoYyl7bGV0IGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/bD1jLmxlbmd0aD9uZXcgQXJyYXkoYy5sZW5ndGgpLmZpbGwobnVsbCk6W106KGw9'@;
put 'e30sZHMoYywoYSxkKT0+eyJfX2NoaWxkcmVuIiE9PWQmJihsW2RdPWEmJiJvYmplY3QiPT10eXBlb2YgYSYmIUFycmF5LmlzQXJyYXkoYSk/cjcoYSk6QXJyYXkuaXNBcnJheShhKT9hLmxlbmd0aCYmIm9iamVjdCI9PXR5cGVvZiBhWzBdJiYhQXJyYXkuaXNBcnJheShhWzBdKT9bcjcoYVsw'@;
put 'XSldOltdOm51bGwpfSkpLGx9ZnVuY3Rpb24gemYoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxjLnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24gWGwoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKTtyZXR1cm4g'@;
put 'ZHMobCwoaCxmKT0+eyghMT09PWR8fGEuaW5jbHVkZXMoZikpJiYoY1tmXT1oKX0pLGN9ZnVuY3Rpb24gbHkoYyxsKXtkcyhsLChhLGQpPT57bFtkXSYmIm9iamVjdCI9PXR5cGVvZiBsW2RdPyhjW2RdfHwoY1tkXT1BcnJheS5pc0FycmF5KGxbZF0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9i'@;
put 'amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsW2RdKT9sW2RdOnt9KSxseShjW2RdLGxbZF0pKTpjW2RdPWxbZF19KX1mdW5jdGlvbiB5dShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGM/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk6Y31mdW5jdGlvbiBXdShjKXtjb25zdCBs'@;
put 'PXt9O3JldHVybiBkcyhjLChhLGQpPT57bFtkXT1hfSksbH1mdW5jdGlvbiBUYShjKXtjLk1JWElOU3x8KGMuTUlYSU5TPVtdKTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIERu'@;
put 'KGEsaD0+e2MuTUlYSU5TLnB1c2goaC5NSVhJTl9OQU1FKSxkcyhoLChmLF8pPT57aWYodm9pZCAwIT09Yy5wcm90b3R5cGVbX10pdGhyb3cgbmV3IEVycm9yKGBNaXhpbiBjb25mbGljdC4gUHJvcGVydHkgJyR7X30nIGFscmVhZHkgZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5g'@;
put 'KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZiljLnByb3RvdHlwZVtfXT1mO2Vsc2V7Y29uc3QgVz1mdW5jdGlvbihwZSl7Y29uc3Qgd2U9YF8ke3BlfWA7cmV0dXJuIGZ1bmN0aW9uKEVlKXt0aGlzW3dlXT1FZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSxfLHtnZXQ6ZnVu'@;
put 'Y3Rpb24ocGUsd2Upe2NvbnN0IEVlPWBfJHtwZX1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzW0VlXSYmKHRoaXNbRWVdPShpdD0+e2xldCBldD1pdDtyZXR1cm4oQXJyYXkuaXNBcnJheShldCl8fHVzKGV0KSkmJihldD15dShldCkpLGV0fSkod2UpKSx0aGlzW0Vl'@;
put 'XX19KF8sZiksc2V0OlcoXyksY29uZmlndXJhYmxlOiEwfSl9fSl9KSxjfWZ1bmN0aW9uIGxrKGMsbCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGMpPT09SlNPTi5zdHJpbmdpZnkobCl9ZnVuY3Rpb24gdXMoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRv'@;
put 'U3RyaW5nLmNhbGwoYyl9ZnVuY3Rpb24gZmgoYyxsLGEsZCl7ZC52YWx1ZT1hLGQud3JpdGFibGU9ITEhPT1kLndyaXRhYmxlLGQuZW51bWVyYWJsZT0hMSE9PWQuZW51bWVyYWJsZSxkLmNvbmZpZ3VyYWJsZT0hMSE9PWQuY29uZmlndXJhYmxlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws'@;
put 'ZCl9ZnVuY3Rpb24gZHMoYyxsKXtmb3IoY29uc3QgYSBpbiBjKWlmKCghYy5oYXNPd25Qcm9wZXJ0eXx8Yy5oYXNPd25Qcm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSkpJiYhMT09PWwoY1thXSxhLGMpKWJyZWFrO3JldHVybiBjfWZ1bmN0aW9uIHZ0'@;
put 'ZShjLGwpe2NvbnN0IGE9bC5zcGxpdCgiLiIpO2xldCBkPWM7cmV0dXJuIGRzKGEsaD0+e2lmKGQ9ZFtoXSx2b2lkIDA9PT1kKXJldHVybiBkPXZvaWQgMCwhMX0pLGR9ZnVuY3Rpb24gY2soYyxsLGEpe2NvbnN0IGQ9bC5zcGxpdCgiLiIpO2xldCBoPWM7ZC5mb3JFYWNoKChmLF8pPT57XyE9'@;
put 'PWQubGVuZ3RoLTE/KGJsKGgsZil8fChoW2ZdPXt9KSxoPWhbZl0pOmhbZl09YX0pfWZ1bmN0aW9uIHVrKGMpe2lmKCF1cyhjKSlyZXR1cm4gMDtjb25zdCBsPWZ1bmN0aW9uKGEpe2xldCBkPTA7cmV0dXJuIHVzKGEpP2RzKGEsKGgsZik9PnsiX19jaGlsZHJlbiIhPT1mJiYoZCs9bChoKSl9'@;
put 'KTpkKz0xLGR9O3JldHVybiBsKGMpfWZ1bmN0aW9uIF9nKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidmFsdWUiO2NvbnN0IGE9YF8ke2x9YCxkPXtfdG91Y2hlZDohMSxbYV06Yyxpc1RvdWNoZWQoKXtyZXR1cm4gdGhp'@;
put 'cy5fdG91Y2hlZH19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1thXT1ofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGR9ZnVuY3Rpb24gYmwoYyxsKXtyZXR1cm4gT2Jq'@;
put 'ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl9RigxMzAwNik7Y29uc3QgZmQ9Yz0+e2NvbnN0IGw9e3ZhbHVlOiExLHRlc3Q6KGEsZCk9PntsLnZhbHVlPWMoYSxkKX19O3JldHVybiBsfSxVZj17Y2hyb21lOmZkKChjLGwpPT4vQ2hyb21lLy50ZXN0KGMpJiYvR29vZ2xl'@;
put 'Ly50ZXN0KGwpKSxjaHJvbWVXZWJLaXQ6ZmQoYz0+L0NyaU9TLy50ZXN0KGMpKSxlZGdlOmZkKGM9Pi9FZGdlLy50ZXN0KGMpKSxlZGdlV2ViS2l0OmZkKGM9Pi9FZGdpT1MvLnRlc3QoYykpLGZpcmVmb3g6ZmQoYz0+L0ZpcmVmb3gvLnRlc3QoYykpLGZpcmVmb3hXZWJLaXQ6ZmQoYz0+L0Z4'@;
put 'aU9TLy50ZXN0KGMpKSxtb2JpbGU6ZmQoYz0+L0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGMpKSxzYWZhcmk6ZmQoKGMsbCk9Pi9TYWZhcmkvLnRlc3QoYykmJi9BcHBsZSBDb21wdXRlci8udGVzdChsKSl9LGk3'@;
put 'PXttYWM6ZmQoYz0+L15NYWMvLnRlc3QoYykpLHdpbjpmZChjPT4vXldpbi8udGVzdChjKSksbGludXg6ZmQoYz0+L15MaW51eC8udGVzdChjKSksaW9zOmZkKGM9Pi9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChjKSl9O2Z1bmN0aW9uIF90ZSgpe2xldHt1c2VyQWdlbnQ6Yz1uYXZpZ2F0b3Iu'@;
put 'dXNlckFnZW50LHZlbmRvcjpsPW5hdmlnYXRvci52ZW5kb3J9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtkcyhVZixhPT57bGV0e3Rlc3Q6ZH09YTtkKGMsbCl9KX1mdW5jdGlvbiBidGUoKXtsZXR7cGxhdGZvcm06Yz1uYXZpZ2F0'@;
put 'b3IucGxhdGZvcm19PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtkcyhpNyxsPT57bGV0e3Rlc3Q6YX09bDthKGMpfSl9ZnVuY3Rpb24gX04oKXtyZXR1cm4gVWYuY2hyb21lLnZhbHVlfWZ1bmN0aW9uIHl0ZSgpe3JldHVybiBVZi5j'@;
put 'aHJvbWVXZWJLaXQudmFsdWV9ZnVuY3Rpb24gZGsoKXtyZXR1cm4gVWYuZmlyZWZveC52YWx1ZX1mdW5jdGlvbiB3dGUoKXtyZXR1cm4gVWYuZmlyZWZveFdlYktpdC52YWx1ZX1mdW5jdGlvbiBxRWUoKXtyZXR1cm4gVWYuc2FmYXJpLnZhbHVlfWZ1bmN0aW9uIEN0ZSgpe3JldHVybiBVZi5l'@;
put 'ZGdlLnZhbHVlfWZ1bmN0aW9uIEtFZSgpe3JldHVybiBVZi5lZGdlV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIG0yKCl7cmV0dXJuIFVmLm1vYmlsZS52YWx1ZX1mdW5jdGlvbiBiTigpe3JldHVybiBpNy5pb3MudmFsdWV9ZnVuY3Rpb24geU4oKXtsZXR7bWF4VG91Y2hQb2ludHM6Y309YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5hdmlnYXRvcjtyZXR1cm4gYz4yJiZpNy5tYWMudmFsdWV9ZnVuY3Rpb24gd04oKXtyZXR1cm4gaTcud2luLnZhbHVlfWZ1bmN0aW9uIGhrKCl7cmV0dXJuIGk3Lm1hYy52YWx1ZX1mdW5jdGlvbiBYRWUo'@;
put 'KXtyZXR1cm4gaTcubGludXgudmFsdWV9X3RlKCksYnRlKCk7Y29uc3QgY289e0FMVDoxOCxBUlJPV19ET1dOOjQwLEFSUk9XX0xFRlQ6MzcsQVJST1dfUklHSFQ6MzksQVJST1dfVVA6MzgsQVVESU9fRE9XTjpkaygpPzE4MjoxNzQsQVVESU9fTVVURTpkaygpPzE4MToxNzMsQVVESU9fVVA6'@;
put 'ZGsoKT8xODM6MTc1LEJBQ0tTUEFDRTo4LENBUFNfTE9DSzoyMCxDT01NQToxODgsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09NTUFORF9GSVJFRk9YOjIyNCxDT05UUk9MOjE3LERFTEVURTo0NixFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEYxOjExMixGMjoxMTMsRjM6'@;
put 'MTE0LEY0OjExNSxGNToxMTYsRjY6MTE3LEY3OjExOCxGODoxMTksRjk6MTIwLEYxMDoxMjEsRjExOjEyMixGMTI6MTIzLEYxMzoxMjQsRjE0OjEyNSxGMTU6MTI2LEYxNjoxMjcsRjE3OjEyOCxGMTg6MTI5LEYxOToxMzAsSE9NRTozNixJTlNFUlQ6NDUsTUVESUFfTkVYVDoxNzYsTUVESUFf'@;
put 'UExBWV9QQVVTRToxNzksTUVESUFfUFJFVjoxNzcsTUVESUFfU1RPUDoxNzgsTlVMTDowLE5VTV9MT0NLOjE0NCxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQQVVTRToxOSxQRVJJT0Q6MTkwLFNDUk9MTF9MT0NLOjE0NSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxBOjY1LEM6NjcsRDo2OCxG'@;
put 'OjcwLEw6NzYsTzo3OSxQOjgwLFM6ODMsVjo4NixYOjg4LFk6ODksWjo5MH0sSkVlPVtjby5BTFQsY28uQVJST1dfRE9XTixjby5BUlJPV19MRUZULGNvLkFSUk9XX1JJR0hULGNvLkFSUk9XX1VQLGNvLkFVRElPX0RPV04sY28uQVVESU9fTVVURSxjby5BVURJT19VUCxjby5CQUNLU1BBQ0Us'@;
put 'Y28uQ0FQU19MT0NLLGNvLkRFTEVURSxjby5FTkQsY28uRU5URVIsY28uRVNDQVBFLGNvLkYxLGNvLkYyLGNvLkYzLGNvLkY0LGNvLkY1LGNvLkY2LGNvLkY3LGNvLkY4LGNvLkY5LGNvLkYxMCxjby5GMTEsY28uRjEyLGNvLkYxMyxjby5GMTQsY28uRjE1LGNvLkYxNixjby5GMTcsY28uRjE4'@;
put 'LGNvLkYxOSxjby5IT01FLGNvLklOU0VSVCxjby5NRURJQV9ORVhULGNvLk1FRElBX1BMQVlfUEFVU0UsY28uTUVESUFfUFJFVixjby5NRURJQV9TVE9QLGNvLk5VTEwsY28uTlVNX0xPQ0ssY28uUEFHRV9ET1dOLGNvLlBBR0VfVVAsY28uUEFVU0UsY28uU0NST0xMX0xPQ0ssY28uU0hJRlQs'@;
put 'Y28uVEFCXTtmdW5jdGlvbiBTdGUoYyl7cmV0dXJuIDMyPT09Y3x8Yz49NDgmJmM8PTU3fHxjPj05NiYmYzw9MTExfHxjPj0xODYmJmM8PTE5Mnx8Yz49MjE5JiZjPD0yMjJ8fGM+PTIyNnx8Yz49NjUmJmM8PTkwfWZ1bmN0aW9uIENOKGMpe3JldHVybiBKRWUuaW5jbHVkZXMoYyl9ZnVuY3Rp'@;
put 'b24gUUVlKGMpe2NvbnN0IGw9W107cmV0dXJuIGhrKCk/bC5wdXNoKGNvLkNPTU1BTkRfTEVGVCxjby5DT01NQU5EX1JJR0hULGNvLkNPTU1BTkRfRklSRUZPWCk6bC5wdXNoKGNvLkNPTlRST0wpLGwuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gTXRlKGMpe3JldHVybltjby5DT05UUk9MLGNvLkNP'@;
put 'TU1BTkRfTEVGVCxjby5DT01NQU5EX1JJR0hULGNvLkNPTU1BTkRfRklSRUZPWF0uaW5jbHVkZXMoYyl9ZnVuY3Rpb24gbzcoYyxsKXtjb25zdCBhPWwuc3BsaXQoInwiKTtsZXQgZD0hMTtyZXR1cm4gRG4oYSxoPT57aWYoYz09PWNvW2hdKXJldHVybiBkPSEwLCExfSksZH1mdW5jdGlvbiB2'@;
put 'MihjKXtjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkPSExLGMuY2FuY2VsQnViYmxlPSEwfWZ1bmN0aW9uIGJnKGMpe3JldHVybiExPT09Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZH1mdW5jdGlvbiBVcChjKXtyZXR1cm4gMj09PWMuYnV0dG9ufWZ1bmN0aW9uIGZrKGMp'@;
put 'e3JldHVybiAwPT09Yy5idXR0b259ZnVuY3Rpb24gR2EoKXtLaShjb25zb2xlKSYmY29uc29sZS53YXJuKC4uLmFyZ3VtZW50cyl9ZnVuY3Rpb24gU04oKXtLaShjb25zb2xlKSYmY29uc29sZS5lcnJvciguLi5hcmd1bWVudHMpfWNvbnN0IHM3PVsiYWZ0ZXJDZWxsTWV0YVJlc2V0IiwiYWZ0'@;
put 'ZXJDaGFuZ2UiLCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIiwiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIiwiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLCJiZWZvcmVD'@;
put 'b250ZXh0TWVudVNob3ciLCJhZnRlckNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29weUxpbWl0IiwiYmVmb3JlQ3JlYXRlQ29sIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsImFmdGVyQ3JlYXRlQ29sIiwiYmVmb3JlQ3JlYXRlUm93IiwiYWZ0ZXJDcmVhdGVSb3ciLCJhZnRlckRlc2Vs'@;
put 'ZWN0IiwiYWZ0ZXJEZXN0cm95IiwiYWZ0ZXJEb2N1bWVudEtleURvd24iLCJhZnRlckRyYXdTZWxlY3Rpb24iLCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0Iiwi'@;
put 'YWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwiLCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLCJhZnRlck9uQ2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25D'@;
put 'ZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91c2VPdXQiLCJhZnRlclJlbW92ZUNvbCIsImFmdGVyUmVtb3ZlUm93IiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlclJlbmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImFmdGVyU2Nyb2xs'@;
put 'SG9yaXpvbnRhbGx5IiwiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwiYWZ0ZXJTZWxlY3Rpb24iLCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCJhZnRlclNldENlbGxNZXRhIiwiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIs'@;
put 'ImFmdGVyU2V0RGF0YUF0Q2VsbCIsImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsImFmdGVyVXBkYXRlU2V0dGluZ3MiLCJhZnRlclZhbGlkYXRlIiwiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLCJhZnRlckxhbmd1YWdlQ2hhbmdlIiwiYmVmb3JlQXV0'@;
put 'b2ZpbGwiLCJhZnRlckF1dG9maWxsIiwiYmVmb3JlQ2VsbEFsaWdubWVudCIsImJlZm9yZUNoYW5nZSIsImJlZm9yZUNoYW5nZVJlbmRlciIsImJlZm9yZURyYXdCb3JkZXJzIiwiYmVmb3JlR2V0Q2VsbE1ldGEiLCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsImJlZm9yZUluaXQiLCJiZWZvcmVJ'@;
put 'bml0V2Fsa29udGFibGUiLCJiZWZvcmVMb2FkRGF0YSIsImJlZm9yZVVwZGF0ZURhdGEiLCJiZWZvcmVLZXlEb3duIiwiYmVmb3JlT25DZWxsTW91c2VEb3duIiwiYmVmb3JlT25DZWxsTW91c2VVcCIsImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IiwiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwi'@;
put 'YmVmb3JlT25DZWxsTW91c2VPdXQiLCJiZWZvcmVSZW1vdmVDb2wiLCJiZWZvcmVSZW1vdmVSb3ciLCJiZWZvcmVWaWV3UmVuZGVyIiwiYWZ0ZXJWaWV3UmVuZGVyIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJiZWZvcmVTZXRDZWxsTWV0YSIsImJlZm9yZVNldFJhbmdlU3RhcnRP'@;
put 'bmx5IiwiYmVmb3JlU2V0UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRoIiwibW9kaWZ5'@;
put 'Um93SGVhZGVyIiwibW9kaWZ5Um93SGVpZ2h0IiwibW9kaWZ5RGF0YSIsIm1vZGlmeVNvdXJjZURhdGEiLCJtb2RpZnlSb3dEYXRhIiwibW9kaWZ5R2V0Q2VsbENvb3JkcyIsImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsInBl'@;
put 'cnNpc3RlbnRTdGF0ZUxvYWQiLCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJiZWZvcmVDb2x1bW5Tb3J0IiwiYWZ0ZXJDb2x1bW5Tb3J0IiwibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLCJiZWZvcmVDdXQiLCJhZnRlckN1'@;
put 'dCIsImJlZm9yZUNvcHkiLCJhZnRlckNvcHkiLCJiZWZvcmVQYXN0ZSIsImFmdGVyUGFzdGUiLCJiZWZvcmVDb2x1bW5GcmVlemUiLCJhZnRlckNvbHVtbkZyZWV6ZSIsImJlZm9yZUNvbHVtbk1vdmUiLCJhZnRlckNvbHVtbk1vdmUiLCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsImFmdGVyQ29s'@;
put 'dW1uVW5mcmVlemUiLCJiZWZvcmVSb3dNb3ZlIiwiYWZ0ZXJSb3dNb3ZlIiwiYmVmb3JlQ29sdW1uUmVzaXplIiwiYWZ0ZXJDb2x1bW5SZXNpemUiLCJiZWZvcmVSb3dSZXNpemUiLCJhZnRlclJvd1Jlc2l6ZSIsImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIiwiYWZ0ZXJHZXRSb3dI'@;
put 'ZWFkZXJSZW5kZXJlcnMiLCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLCJiZWZvcmVGaWx0ZXIiLCJhZnRlckZpbHRlciIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiwiYWZ0'@;
put 'ZXJTaGVldEFkZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3ZlZCIsIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsImFmdGVyVW5kbyIsImFmdGVyVW5k'@;
put 'b1N0YWNrQ2hhbmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsImFmdGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsIm1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyTW9kaWZ5'@;
put 'VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFm'@;
put 'dGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVmb3JlSGlkZUNvbHVtbnMiLCJhZnRlckhpZGVDb2x1bW5zIiwiYmVmb3JlVW5oaWRlQ29sdW1ucyIsImFmdGVyVW5oaWRlQ29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJi'@;
put 'ZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCJiZWZvcmVBZGRDaGlsZCIsImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVy'@;
put 'RGV0YWNoQ2hpbGQiLCJhZnRlckJlZ2luRWRpdGluZyIsImJlZm9yZU1lcmdlQ2VsbHMiLCJhZnRlck1lcmdlQ2VsbHMiLCJiZWZvcmVVbm1lcmdlQ2VsbHMiLCJhZnRlclVubWVyZ2VDZWxscyIsImFmdGVyTGlzdGVuIiwiYWZ0ZXJVbmxpc3RlbiIsImFmdGVyUmVmcmVzaERpbWVuc2lvbnMi'@;
put 'LCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZUNvbHVtbkNvbGxhcHNlIiwiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsImJlZm9yZUNvbHVtbkV4cGFuZCIsImFmdGVyQ29sdW1uRXhwYW5kIiwibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIl0sZWtlPUFhYFRoZSBwbHVnaW4gaG9vayAi'@;
put 'W2hvb2tOYW1lXSIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJzaW9uXS5ceDIwCiAgUGxlYXNlIGNvbnN1bHQgcmVsZWFzZSBub3RlcyBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9yZWxlYXNlcy90YWcvW3JlbW92ZWRJblZl'@;
put 'cnNpb25dIHRvXHgyMAogIGxlYXJuIGFib3V0IHRoZSBtaWdyYXRpb24gcGF0aC5gLE1OPW5ldyBNYXAoW1sibW9kaWZ5Um93IiwiOC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1vZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1vZGlmeUNvbCIsIjguMC4wIl0sWyJza2lwTGVuZ3Ro'@;
put 'Q2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl1dKSx4Tj1uZXcgTWFwKFtdKTtjbGFzcyB4dGV7c3RhdGljIGdldFNpbmdsZXRvbigpe3JldHVybiBmdW5jdGlvbiBua2UoKXtyZXR1cm4gdGtlfSgpfWNvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5nbG9iYWxCdWNrZXQ9dGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpfWNyZWF0ZUVtcHR5QnVja2V0KCl7Y29uc3QgbD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBEbihzNyxhPT5sW2FdPVtdKSxsfWdldEJ1Y2tldCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBsPyhsLnBsdWdpbkhvb2tCdWNrZXR8fChsLnBsdWdpbkhvb2tCdWNrZXQ9dGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpKSxsLnBsdWdpbkhvb2tCdWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZChsLGEpe2xldCBkPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKEFycmF5LmlzQXJyYXkoYSkpRG4oYSxoPT50aGlzLmFkZChsLGgsZCkpO2Vsc2V7TU4uaGFzKGwpJiZHYShjTihla2Use2hvb2tOYW1lOmwscmVtb3ZlZEluVmVyc2lvbjpNTi5nZXQobCl9KSks'@;
put 'eE4uaGFzKGwpJiZHYSh4Ti5nZXQobCkpO2NvbnN0IGg9dGhpcy5nZXRCdWNrZXQoZCk7aWYodHlwZW9mIGhbbF0+InUiJiYodGhpcy5yZWdpc3RlcihsKSxoW2xdPVtdKSxhLnNraXA9ITEsLTE9PT1oW2xdLmluZGV4T2YoYSkpe2xldCBmPSExO2EuaW5pdGlhbEhvb2smJkRuKGhbbF0sKF8s'@;
put 'VCk9PntpZihfLmluaXRpYWxIb29rKXJldHVybiBoW2xdW1RdPWEsZj0hMCwhMX0pLGZ8fGhbbF0ucHVzaChhKX19cmV0dXJuIHRoaXN9b25jZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO0FycmF5LmlzQXJy'@;
put 'YXkoYSk/RG4oYSxoPT50aGlzLm9uY2UobCxoLGQpKTooYS5ydW5PbmNlPSEwLHRoaXMuYWRkKGwsYSxkKSl9cmVtb3ZlKGwsYSl7Y29uc3QgaD10aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCk7cmV0dXJu'@;
put 'IHR5cGVvZiBoW2xdPCJ1IiYmaFtsXS5pbmRleE9mKGEpPj0wJiYoYS5za2lwPSEwLCEwKX1oYXMobCl7Y29uc3QgZD10aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCk7cmV0dXJuISh2b2lkIDA9PT1kW2xd'@;
put 'fHwhZFtsXS5sZW5ndGgpfXJ1bihsLGEsZCxoLGYsXyxULFcpe3tjb25zdCBpZT10aGlzLmdsb2JhbEJ1Y2tldFthXSxwZT1pZT9pZS5sZW5ndGg6MDtsZXQgd2U9MDtpZihwZSlmb3IoO3dlPHBlOyl7aWYoIWllW3dlXXx8aWVbd2VdLnNraXApe3dlKz0xO2NvbnRpbnVlfWNvbnN0IEVlPWFr'@;
put 'KGllW3dlXSxsLGQsaCxmLF8sVCxXKTt2b2lkIDAhPT1FZSYmKGQ9RWUpLGllW3dlXSYmaWVbd2VdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsaWVbd2VdKSx3ZSs9MX19e2NvbnN0IGllPXRoaXMuZ2V0QnVja2V0KGwpW2FdLHBlPWllP2llLmxlbmd0aDowO2xldCB3ZT0wO2lmKHBlKWZvcig7'@;
put 'd2U8cGU7KXtpZighaWVbd2VdfHxpZVt3ZV0uc2tpcCl7d2UrPTE7Y29udGludWV9Y29uc3QgRWU9YWsoaWVbd2VdLGwsZCxoLGYsXyxULFcpO3ZvaWQgMCE9PUVlJiYoZD1FZSksaWVbd2VdJiZpZVt3ZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxpZVt3ZV0sbCksd2UrPTF9fXJldHVybiBk'@;
put 'fWRlc3Ryb3koKXtkcyh0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCksKGEsZCxoKT0+aFtkXS5sZW5ndGg9MCl9cmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCl8fHM3LnB1c2gobCl9ZGVyZWdp'@;
put 'c3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKSYmczcuc3BsaWNlKHM3LmluZGV4T2YobCksMSl9aXNEZXByZWNhdGVkKGwpe3JldHVybiB4Ti5oYXMobCl8fE1OLmhhcyhsKX1pc1JlZ2lzdGVyZWQobCl7cmV0dXJuIHM3LmluZGV4T2YobCk+PTB9Z2V0UmVnaXN0ZXJlZCgpe3JldHVybiBz'@;
put 'N319Y29uc3QgdGtlPW5ldyB4dGUsc289eHRlLEVOPW5ldyBNYXA7ZnVuY3Rpb24gcGQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNvbW1vbiI7RU4uaGFzKGMpfHxFTi5zZXQoYyxuZXcgTWFwKTtjb25zdCBsPUVOLmdl'@;
put 'dChjKTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24gYShULFcpe2wuc2V0KFQsVyl9LGdldEl0ZW06ZnVuY3Rpb24gZChUKXtyZXR1cm4gbC5nZXQoVCl9LGhhc0l0ZW06ZnVuY3Rpb24gaChUKXtyZXR1cm4gbC5oYXMoVCl9LGdldE5hbWVzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4ubC5rZXlz'@;
put 'KCldfSxnZXRWYWx1ZXM6ZnVuY3Rpb24gXygpe3JldHVyblsuLi5sLnZhbHVlcygpXX19fWNvbnN0IGtOPW5ldyBXZWFrTWFwLHtyZWdpc3Rlcjpya2UsZ2V0SXRlbTpFdGUsaGFzSXRlbTprdGUsZ2V0TmFtZXM6aWtlfT1wZCgiZWRpdG9ycyIpO2Z1bmN0aW9uIG9rZShjKXtjb25zdCBsPXt9'@;
put 'LGE9Yzt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ3VpZCBpbiBsfHwobFtkLmd1aWRdPW5ldyBhKGQpKSxsW2QuZ3VpZF19LHNvLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95Iixm'@;
put 'dW5jdGlvbigpe2xbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gQXRlKGMsbCl7bGV0IGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpa04uZ2V0KGMpfHxSMChudWxsLGMpLGE9a04uZ2V0KGMpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBjKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3Mg'@;
put 'YW5kIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFtZXRlcicpO2E9RXRlKGMpfWlmKCFhKXRocm93IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1lICIke2N9ImApO3JldHVybiBhLmdldEluc3RhbmNlKGwpfWZ1bmN0aW9uIHBrKGMpe2lmKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFrdGUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIEV0ZShjKS5nZXRDb25zdHJ1Y3RvcigpfWZ1bmN0aW9uIFIwKGMsbCl7YyYmInN0cmluZyIhPXR5cGVv'@;
put 'ZiBjJiYoYz0obD1jKS5FRElUT1JfVFlQRSk7Y29uc3QgYT1uZXcgb2tlKGwpOyJzdHJpbmciPT10eXBlb2YgYyYmcmtlKGMsYSksa04uc2V0KGwsYSl9bGV0IGdrPTA7Y29uc3QgbGw9Y2xhc3Mgc2tle2NvbnN0cnVjdG9yKCl7dGhpcy5jb250ZXh0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMsdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzPVtdKX1hZGRFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2Z1bmN0aW9uIGYoXyl7ZC5jYWxsKHRoaXMsZnVuY3Rpb24gYWtlKGMpe2NvbnN0IGw9Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7bC5hcHBseSh0aGlzKSx2'@;
put 'Mih0aGlzKX0sY30oXykpfXJldHVybiB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMucHVzaCh7ZWxlbWVudDpsLGV2ZW50OmEsY2FsbGJhY2s6ZCxjYWxsYmFja1Byb3h5OmYsb3B0aW9uczpoLGV2ZW50TWFuYWdlcjp0aGlzfSksbC5hZGRFdmVudExpc3RlbmVyKGEsZixoKSxnays9MSwo'@;
put 'KT0+e3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl9fXJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpe2xldCBfLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxmPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7'@;
put 'Zm9yKDtmOylpZihmLT0xLF89dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2ZdLF8uZXZlbnQ9PT1hJiZfLmVsZW1lbnQ9PT1sKXtpZihkJiZkIT09Xy5jYWxsYmFja3x8aCYmXy5ldmVudE1hbmFnZXIhPT10aGlzKWNvbnRpbnVlO3RoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxp'@;
put 'Y2UoZiwxKSxfLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihfLmV2ZW50LF8uY2FsbGJhY2tQcm94eSxfLm9wdGlvbnMpLGdrLT0xfX1jbGVhckV2ZW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMu'@;
put 'Y29udGV4dClyZXR1cm47bGV0IGE9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2E7KXthLT0xO2NvbnN0IGQ9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2FdO2wmJmQuZXZlbnRNYW5hZ2VyIT09dGhpc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5z'@;
put 'cGxpY2UoYSwxKSxkLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLmV2ZW50LGQuY2FsbGJhY2tQcm94eSxkLm9wdGlvbnMpLGdrLT0xKX19Y2xlYXIoKXt0aGlzLmNsZWFyRXZlbnRzKCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJFdmVudHMoKSx0aGlzLmNvbnRleHQ9bnVsbH1kZXN0cm95'@;
put 'V2l0aE93bkV2ZW50c09ubHkoKXt0aGlzLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmNvbnRleHQ9bnVsbH1maXJlRXZlbnQobCxhKXtsZXQgZD1sLmRvY3VtZW50LGg9bDtkfHwoZD1sLm93bmVyRG9jdW1lbnQ/bC5vd25lckRvY3VtZW50OmwsaD1kLmRlZmF1bHRWaWV3KTtjb25zdCBmPXtidWJi'@;
put 'bGVzOiEwLGNhbmNlbGFibGU6Im1vdXNlbW92ZSIhPT1hLHZpZXc6aCxkZXRhaWw6MCxzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MSxjbGllbnRZOjEsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0OnZvaWQgMH07'@;
put 'bGV0IF87ZC5jcmVhdGVFdmVudD8oXz1kLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLF8uaW5pdE1vdXNlRXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlLGYudmlldyxmLmRldGFpbCxmLnNjcmVlblgsZi5zY3JlZW5ZLGYuY2xpZW50WCxmLmNsaWVudFksZi5jdHJsS2V5LGYuYWx0'@;
put 'S2V5LGYuc2hpZnRLZXksZi5tZXRhS2V5LGYuYnV0dG9uLGYucmVsYXRlZFRhcmdldHx8ZC5ib2R5LnBhcmVudE5vZGUpKTpfPWQuY3JlYXRlRXZlbnRPYmplY3QoKSxsLmRpc3BhdGNoRXZlbnQ/bC5kaXNwYXRjaEV2ZW50KF8pOmwuZmlyZUV2ZW50KGBvbiR7YX1gLF8pfX0sbWs9ImVkaXRv'@;
put 'ck1hbmFnZXIubmF2aWdhdGlvbiIsY3k9ImVkaXRvck1hbmFnZXIuaGFuZGxpbmdFZGl0b3IiO2NsYXNzIEFOe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmluc3RhbmNlPWwsdGhpcy50YWJsZU1ldGE9YSx0aGlzLnNlbGVjdGlvbj1kLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbChsKSx0aGlz'@;
put 'LmRlc3Ryb3llZD0hMSx0aGlzLmxvY2s9ITEsdGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwLHRoaXMuY2VsbFByb3BlcnRpZXM9dm9pZCAwLHRoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMu'@;
put 'aW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGY9PnRoaXMub25BZnRlckRvY3VtZW50S2V5RG93bihmKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNvbXBvc2l0aW9u'@;
put 'c3RhcnQiLGY9PnshdGhpcy5kZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UuaXNMaXN0ZW5pbmcoKSYmdGhpcy5vcGVuRWRpdG9yKCIiLGYpfSksdGhpcy5pbnN0YW5jZS52aWV3Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNrIiwoZixfLFQpPT50aGlzLm9uQ2VsbERibENsaWNrKGYsXyxUKSl9'@;
put 'cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYT1sLmdldENvbnRleHQoImdyaWQiKSxkPWwuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD17Z3JvdXA6Y3l9O2QuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIi'@;
put 'LCJTaGlmdCJdLFsiRW50ZXIiLCJDb250cm9sL01ldGEiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGYsXyk9Pnt0aGlzLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobC5pc0N0cmxQcmVzc2VkKCkpLHRoaXMubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIo'@;
put 'Xy5pbmNsdWRlcygic2hpZnQiKSl9fSx7a2V5czpbWyJFc2NhcGUiXSxbIkVzY2FwZSIsIkNvbnRyb2wvTWV0YSJdXSxjYWxsYmFjazooKT0+e3RoaXMuY2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShsLmlzQ3RybFByZXNzZWQoKSksdGhpcy5hY3RpdmVFZGl0b3IuZm9jdXMo'@;
put 'KX19XSxoKSxhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRjIiXV0sY2FsbGJhY2s6Zj0+e3RoaXMub3BlbkVkaXRvcihudWxsLGYsITApfX0se2tleXM6W1siQmFja3NwYWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLmVtcHR5U2VsZWN0ZWRDZWxscygpLHRo'@;
put 'aXMucHJlcGFyZUVkaXRvcigpfX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGYsXyk9Pnt0aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nP3RoaXMuY2VsbFByb3BlcnRpZXMucmVhZE9ubHk/dGhpcy5tb3ZlU2VsZWN0'@;
put 'aW9uQWZ0ZXJFbnRlcigpOnRoaXMub3BlbkVkaXRvcihudWxsLGYsITApOnRoaXMubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoXy5pbmNsdWRlcygic2hpZnQiKSksdjIoZil9fV0sey4uLmgscnVuT25seUlmOigpPT5LaSh0aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkKCkpfSl9bG9ja0VkaXRv'@;
put 'cigpe3RoaXMubG9jaz0hMH11bmxvY2tFZGl0b3IoKXt0aGlzLmxvY2s9ITF9ZGVzdHJveUVkaXRvcihsKXt0aGlzLmxvY2t8fHRoaXMuY2xvc2VFZGl0b3IobCl9Z2V0QWN0aXZlRWRpdG9yKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yfXByZXBhcmVFZGl0b3IoKXtpZih0aGlzLmxvY2sp'@;
put 'cmV0dXJuO2lmKHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSlyZXR1cm4gdm9pZCB0aGlzLmNsb3NlRWRpdG9yKCExLCExLFc9PntXJiZ0aGlzLnByZXBhcmVFZGl0b3IoKX0pO2NvbnN0e3JvdzpsLGNvbDphfT10aGlzLmluc3RhbmNlLmdldFNlbGVj'@;
put 'dGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LGQ9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsbCxhKTtsZXQgaD1sLGY9YTtBcnJheS5pc0FycmF5KGQpJiYoW2gsZl09ZCksdGhpcy5jZWxsUHJvcGVydGllcz10aGlzLmluc3RhbmNlLmdldENlbGxNZXRhKGgs'@;
put 'Zik7Y29uc3R7YWN0aXZlRWxlbWVudDpffT10aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudDtpZihfJiZzayhfKSYmXy5ibHVyKCksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgVD10aGlzLmluc3RhbmNlLmdldENlbGwo'@;
put 'bCxhLCEwKTtpZihUKXtjb25zdCBXPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSxpZT10aGlzLmluc3RhbmNlLmNvbFRvUHJvcChmKSxwZT10aGlzLmluc3RhbmNlLmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93'@;
put 'KGgpLGYpO3RoaXMuYWN0aXZlRWRpdG9yPUF0ZShXLHRoaXMuaW5zdGFuY2UpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUobCxhLGllLFQscGUsdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRv'@;
put 'ci5pc09wZW5lZCgpfW9wZW5FZGl0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKHRoaXMuaXNDZWxsRWRpdGFibGUoKSl7aWYoIXRoaXMuYWN0aXZlRWRpdG9yKXtjb25zdHtyb3c6aCxjb2w6Zn09dGhpcy5p'@;
put 'bnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCxfPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxUPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChmKTt0aGlzLmluc3RhbmNlLnZpZXcuc2Nyb2xsVmlld3BvcnQodGhpcy5pbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhfLFQpKSx0aGlzLmluc3RhbmNlLnZpZXcucmVuZGVyKCksdGhpcy5wcmVwYXJlRWRpdG9yKCl9dGhpcy5hY3RpdmVFZGl0b3ImJihkJiZ0aGlzLmFjdGl2ZUVkaXRv'@;
put 'ci5lbmFibGVGdWxsRWRpdE1vZGUoKSx0aGlzLmFjdGl2ZUVkaXRvci5iZWdpbkVkaXRpbmcobCxhKSl9ZWxzZSB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCl9Y2xvc2VFZGl0b3IobCxhLGQpe3RoaXMuYWN0aXZlRWRpdG9yP3RoaXMuYWN0aXZlRWRpdG9yLmZpbmlzaEVkaXRpbmcobCxhLGQp'@;
put 'OmQmJmQoITEpfWNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobCl7dGhpcy5jbG9zZUVkaXRvcighMSxsKX1jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGwpe3RoaXMuY2xvc2VFZGl0b3IoITAsbCl9Y2xlYXJBY3RpdmVFZGl0b3IoKXt0aGlzLmFjdGl2ZUVkaXRvcj12b2lk'@;
put 'IDB9aXNDZWxsRWRpdGFibGUoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSx7cm93OmEsY29sOmR9PXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQse3Jvd0luZGV4TWFwcGVyOmgsY29sdW1uSW5k'@;
put 'ZXhNYXBwZXI6Zn09dGhpcy5pbnN0YW5jZSxfPWguaXNIaWRkZW4odGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGEpKXx8Zi5pc0hpZGRlbih0aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oZCkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IWx8fF8pfW1v'@;
put 'dmVTZWxlY3Rpb25BZnRlckVudGVyKGwpe2NvbnN0IGE9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM/dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhldmVudCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcztsP3RoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0'@;
put 'YXJ0KC1hLnJvdywtYS5jb2wpOnRoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEucm93LGEuY29sLCEwKX1vbkFmdGVyRG9jdW1lbnRLZXlEb3duKGwpe2lmKCF0aGlzLmluc3RhbmNlLmlzTGlzdGVuaW5nKCkpcmV0dXJuO2NvbnN0e2tleUNvZGU6YX09bDtpZighdGhpcy5zZWxlY3Rp'@;
put 'b24uaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPShsLmN0cmxLZXl8fGwubWV0YUtleSkmJiFsLmFsdEtleTt0aGlzLmFjdGl2ZUVkaXRvciYmKCF0aGlzLmFjdGl2ZUVkaXRvcnx8dGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpfHxDTihhKXx8TXRlKGEpfHxkfHx0aGlzLmlzRWRp'@;
put 'dG9yT3BlbmVkKCl8fCh0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0s'@;
put 'e2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMSwwKX19LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqdGhp'@;
put 'cy5pbnN0YW5jZS5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCx0aGlzLmluc3RhbmNlLmdldERpcmVjdGlvbkZhY3RvcigpKX19XSx7cnVuT25seUlmOigp'@;
put 'PT5LaSh0aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkKCkpLGdyb3VwOm1rfSksdGhpcy5vcGVuRWRpdG9yKCIiLGwpKX1vbkNlbGxEYmxDbGljayhsLGEsZCl7IlREIj09PWQubm9kZU5hbWUmJnRoaXMub3BlbkVkaXRvcihudWxsLGwsITApfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNvbnN0IFR0ZT1uZXcgV2Vha01hcDtBTi5nZXRJbnN0YW5jZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9VHRlLmdldChjKTtyZXR1cm4gZHx8KGQ9bmV3IEFOKGMsbCxhKSxUdGUuc2V0KGMsZCkpLGR9O2NvbnN0IGNrZT1BTixEdGU9eyImbmJz'@;
put 'cDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiJ9LHVrZT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKER0ZSkubWFwKGM9PmAoJHtjfSlgKS5qb2luKCJ8IiksImdpIik7ZnVuY3Rpb24gVE4oYyl7Y29uc3QgbD1jLmhhc0NvbEhlYWRlcnMoKSxhPWMuaGFzUm93SGVhZGVy'@;
put 'cygpLGQ9W2w/LTE6MCxhPy0xOjAsYy5jb3VudFJvd3MoKS0xLGMuY291bnRDb2xzKCktMV0saD1jLmdldERhdGEoLi4uZCksZj1oLmxlbmd0aCxfPWY+MD9oWzBdLmxlbmd0aDowLFQ9WyI8dGFibGU+IiwiPC90YWJsZT4iXSxXPWw/WyI8dGhlYWQ+IiwiPC90aGVhZD4iXTpbXSxpZT1bIjx0'@;
put 'Ym9keT4iLCI8L3Rib2R5PiJdLHBlPWE/MTowLHdlPWw/MTowO2ZvcihsZXQgRWU9MDtFZTxmO0VlKz0xKXtjb25zdCBaZT1sJiYwPT09RWUsaXQ9W107Zm9yKGxldCB5dD0wO3l0PF87eXQrPTEpe2NvbnN0IEV0PSFaZSYmYSYmMD09PXl0O2xldCBTdD0iIjtpZihaZSlTdD1gPHRoPiR7Yy5n'@;
put 'ZXRDb2xIZWFkZXIoeXQtcGUpfTwvdGg+YDtlbHNlIGlmKEV0KVN0PWA8dGg+JHtjLmdldFJvd0hlYWRlcihFZS13ZSl9PC90aD5gO2Vsc2V7Y29uc3QgSnQ9aFtFZV1beXRdLHtoaWRkZW46bm4scm93c3Bhbjp2bixjb2xzcGFuOk5ufT1jLmdldENlbGxNZXRhKEVlLXdlLHl0LXBlKTtpZigh'@;
put 'bm4pe2NvbnN0IGNyPVtdO2lmKHZuJiZjci5wdXNoKGByb3dzcGFuPSIke3ZufSJgKSxObiYmY3IucHVzaChgY29sc3Bhbj0iJHtObn0iYCksZ2MoSnQpKVN0PWA8dGQgJHtjci5qb2luKCIgIil9PjwvdGQ+YDtlbHNle2NvbnN0IElyPUp0LnRvU3RyaW5nKCkucmVwbGFjZSgiPCIsIiZsdDsi'@;
put 'KS5yZXBsYWNlKCI+IiwiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtTdD1gPHRkICR7Y3Iuam9pbigiICIpfT4ke0lyfTwvdGQ+YH19'@;
put 'fWl0LnB1c2goU3QpfWNvbnN0IGV0PVsiPHRyPiIsLi4uaXQsIjwvdHI+Il0uam9pbigiIik7WmU/Vy5zcGxpY2UoMSwwLGV0KTppZS5zcGxpY2UoLTEsMCxldCl9cmV0dXJuIFQuc3BsaWNlKDEsMCxXLmpvaW4oIiIpLGllLmpvaW4oIiIpKSxULmpvaW4oIiIpfWZ1bmN0aW9uIEROKGMpe2Nv'@;
put 'bnN0IGw9Yy5sZW5ndGgsYT1bIjx0YWJsZT4iXTtmb3IobGV0IGQ9MDtkPGw7ZCs9MSl7Y29uc3QgaD1jW2RdLGY9aC5sZW5ndGgsXz1bXTswPT09ZCYmYS5wdXNoKCI8dGJvZHk+Iik7Zm9yKGxldCBUPTA7VDxmO1QrPTEpe2NvbnN0IFc9aFtUXSxpZT1nYyhXKT8iIjpXLnRvU3RyaW5nKCku'@;
put 'cmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwezIsfS9naSxwZT0+YDxzcGFuIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+JHsiJm5ic3A7'@;
put 'Ii5yZXBlYXQocGUubGVuZ3RoLTEpfSA8L3NwYW4+YCkucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtfLnB1c2goYDx0ZD4ke2llfTwvdGQ+YCl9YS5wdXNoKCI8dHI+IiwuLi5fLCI8L3RyPiIpLGQrMT09PWwmJmEucHVzaCgiPC90Ym9keT4iKX1yZXR1cm4gYS5wdXNoKCI8L3RhYmxlPiIpLGEu'@;
put 'am9pbigiIil9ZnVuY3Rpb24gSXRlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtjb25zdCBhPXt9LGQ9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBw'@;
put 'ZW5kQ2hpbGQoaCk7bGV0IGY9YztpZigic3RyaW5nIj09dHlwZW9mIGYpe2NvbnN0IEp0PWYucmVwbGFjZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9nLG5uPT57Y29uc3Qgdm49bm4ubWF0Y2goLzx0ZFxiW14+XSo/Pi9nKVswXTtyZXR1cm5gJHt2bn0ke25uLnN1YnN0cmlu'@;
put 'Zyh2bi5sZW5ndGgsbm4ubGFzdEluZGV4T2YoIjwiKSkucmVwbGFjZSgvKDwoPyFicikoW14+XSspPikvZ2ksIiIpfTwvdGQ+YH0pO2guaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgJHtKdH1gKSxmPWgucXVlcnlTZWxlY3RvcigidGFibGUiKX1pZighZnx8IWZ1bmN0aW9uIGRr'@;
put 'ZShjKXtyZXR1cm4iVEFCTEUiPT09KGMmJmMubm9kZU5hbWV8fCIiKX0oZikpcmV0dXJuO2NvbnN0IF89aC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWUkPSJlbmVyYXRvciJdJyksVD1udWxsIT09Zi5xdWVyeVNlbGVjdG9yKCJ0Ym9keSB0aCIpLFc9Zi5xdWVyeVNlbGVjdG9yKCJ0ciIpLGll'@;
put 'PVc/QXJyYXkuZnJvbShXLmNlbGxzKS5yZWR1Y2UoKEp0LG5uKT0+SnQrbm4uY29sU3BhbiwwKS0oVD8xOjApOjAscGU9Zi50Rm9vdCYmQXJyYXkuZnJvbShmLnRGb290LnJvd3MpfHxbXSx3ZT1bXTtsZXQgRWU9ITEsWmU9MCxpdD0wO2lmKGYudEhlYWQpe2NvbnN0IEp0PUFycmF5LmZyb20o'@;
put 'Zi50SGVhZC5yb3dzKS5maWx0ZXIobm49Pntjb25zdCB2bj1udWxsIT09bm4ucXVlcnlTZWxlY3RvcigidGQiKTtyZXR1cm4gdm4mJndlLnB1c2gobm4pLCF2bn0pO1plPUp0Lmxlbmd0aCxFZT1aZT4wLFplPjE/YS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20oSnQpLnJlZHVjZSgobm4sdm4p'@;
put 'PT57Y29uc3QgTm49QXJyYXkuZnJvbSh2bi5jZWxscykucmVkdWNlKChjcixJcixFaSk9PntpZihUJiYwPT09RWkpcmV0dXJuIGNyO2NvbnN0e2NvbFNwYW46SWksaW5uZXJIVE1MOmZyfT1JcjtyZXR1cm4gY3IucHVzaChJaT4xP3tsYWJlbDpmcixjb2xzcGFuOklpfTpmciksY3J9LFtdKTty'@;
put 'ZXR1cm4gbm4ucHVzaChObiksbm59LFtdKTpFZSYmKGEuY29sSGVhZGVycz1BcnJheS5mcm9tKEp0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKG5uLHZuLE5uKT0+KFQmJjA9PT1Obnx8bm4ucHVzaCh2bi5pbm5lckhUTUwpLG5uKSxbXSkpfXdlLmxlbmd0aCYmKGEuZml4ZWRSb3dzVG9wPXdlLmxl'@;
put 'bmd0aCkscGUubGVuZ3RoJiYoYS5maXhlZFJvd3NCb3R0b209cGUubGVuZ3RoKTtjb25zdCBldD1bLi4ud2UsLi4uQXJyYXkuZnJvbShmLnRCb2RpZXMpLnJlZHVjZSgoSnQsbm4pPT4oSnQucHVzaCguLi5BcnJheS5mcm9tKG5uLnJvd3MpKSxKdCksW10pLC4uLnBlXTtpdD1ldC5sZW5ndGg7'@;
put 'Y29uc3QgeXQ9bmV3IEFycmF5KGl0KTtmb3IobGV0IEp0PTA7SnQ8aXQ7SnQrKyl5dFtKdF09bmV3IEFycmF5KGllKTtjb25zdCBFdD1bXSxTdD1bXTtmb3IobGV0IEp0PTA7SnQ8aXQ7SnQrKyl7Y29uc3Qgdm49QXJyYXkuZnJvbShldFtKdF0uY2VsbHMpLE5uPXZuLmxlbmd0aDtmb3IobGV0'@;
put 'IGNyPTA7Y3I8Tm47Y3IrKyl7Y29uc3QgSXI9dm5bY3JdLHtub2RlTmFtZTpFaSxpbm5lckhUTUw6SWkscm93U3Bhbjpmcixjb2xTcGFuOmlpfT1Jcixqcj15dFtKdF0uZmluZEluZGV4KE9uPT52b2lkIDA9PT1Pbik7aWYoIlREIj09PUVpKXtpZihmcj4xfHxpaT4xKXtmb3IobGV0IE1yPUp0'@;
put 'O01yPEp0K2ZyO01yKyspaWYoTXI8aXQpZm9yKGxldCBfcj1qcjtfcjxqcitpaTtfcisrKXl0W01yXVtfcl09bnVsbDtjb25zdCBGcj1Jci5nZXRBdHRyaWJ1dGUoInN0eWxlIik7RnImJkZyLmluY2x1ZGVzKCJtc28taWdub3JlOmNvbHNwYW4iKXx8RXQucHVzaCh7Y29sOmpyLHJvdzpKdCxy'@;
put 'b3dzcGFuOmZyLGNvbHNwYW46aWl9KX1sZXQgT249IiI7T249XyYmL2V4Y2VsL2dpLnRlc3QoXy5jb250ZW50KT9JaS5yZXBsYWNlKC9bXHJcbl1bXHgyMF17MCwyfS9nLCIgIikucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dP1tceDIwXXswLDN9L2dpbSwiXHJcbiIpOklpLnJlcGxhY2Uo'@;
put 'Lzxicihccyp8XC8pPltcclxuXT8vZ2ltLCJcclxuIikseXRbSnRdW2pyXT1Pbi5yZXBsYWNlKHVrZSxGcj0+RHRlW0ZyXSl9ZWxzZSBTdC5wdXNoKElpKX19cmV0dXJuIEV0Lmxlbmd0aCYmKGEubWVyZ2VDZWxscz1FdCksU3QubGVuZ3RoJiYoYS5yb3dIZWFkZXJzPVN0KSx5dC5sZW5ndGgm'@;
put 'JihhLmRhdGE9eXQpLGF9ZnVuY3Rpb24gR3UoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2NvbnN0IGE9dHlwZW9mIGM7aWYoIm51bWJlciI9PT1hKXJldHVybiFpc05hTihjKSYmaXNGaW5pdGUoYyk7aWYoInN0cmlu'@;
put 'ZyI9PT1hKXtpZigwPT09Yy5sZW5ndGgpcmV0dXJuITE7aWYoMT09PWMubGVuZ3RoKXJldHVybi9cZC8udGVzdChjKTtjb25zdCBkPUFycmF5LmZyb20obmV3IFNldChbIi4iLC4uLmxdKSkubWFwKGg9PmBcXCR7aH1gKS5qb2luKCJ8Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF5bKy1dP1xccyoo'@;
put 'KCgke2R9KT9cXGQrKCgke2R9KVxcZCspPyhlWystXT9cXGQrKT8pfCgweFthLWZcXGRdKykpJGAsImkiKS50ZXN0KGMudHJpbSgpKX1yZXR1cm4ib2JqZWN0Ij09PWEmJiEoIWN8fCJudW1iZXIiIT10eXBlb2YgYy52YWx1ZU9mKCl8fGMgaW5zdGFuY2VvZiBEYXRlKX1mdW5jdGlvbiBMdGUo'@;
put 'Yyl7cmV0dXJuIEd1KGMsWyIsIl0pfWZ1bmN0aW9uIHZvKGMsbCxhKXtsZXQgZD0tMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGw/KGE9bCxsPWMpOmQ9Yy0xOysrZDw9bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIHZrKGMsbCxhKXtsZXQgZD1jKzE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'JiYoYT1sLGw9MCk7LS1kPj1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gSU4oYyxsKXtyZXR1cm4gbD1wYXJzZUludChsLnRvU3RyaW5nKCkucmVwbGFjZSgiJSIsIiIpLDEwKSxsPWlzTmFOKGwpPzA6bCxwYXJzZUludChjKmwvMTAwLDEwKX1jb25zdCBSdGU9bmV3IE1hcChbWyJhc2MiLFst'@;
put 'MSwxXV0sWyJkZXNjIixbMSwtMV1dXSksZmtlPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYCxwa2U9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgbm90IGEgbnVtYmVyLmAsbWtlPWM9PmBUaGUgaWQgJyR7Y30nIGlzIGFscmVhZHkgZGVj'@;
put 'bGFyZWQgaW4gYSBtYXAuYDtmdW5jdGlvbiBfaygpe2xldHtlcnJvcklkRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBNYXA7ZnVuY3Rpb24gVCgpe3JldHVyblsuLi5sXX1mdW5jdGlvbiBXKGll'@;
put 'KXtyZXR1cm4gbC5oYXMoaWUpfXJldHVybiBjPVJhKGMpP2M6bWtlLHthZGRJdGVtOmZ1bmN0aW9uIGEoaWUscGUpe2lmKFcoaWUpKXRocm93IG5ldyBFcnJvcihjKGllKSk7bC5zZXQoaWUscGUpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVhcigpfSxnZXRJZDpmdW5jdGlvbiBmKGllKXtj'@;
put 'b25zdFtwZV09VCgpLmZpbmQod2U9PntsZXRbRWUsWmVdPXdlO3JldHVybiBpZT09PVplJiZFZX0pfHxbbnVsbF07cmV0dXJuIHBlfSxnZXRJdGVtOmZ1bmN0aW9uIF8oaWUpe3JldHVybiBsLmdldChpZSl9LGdldEl0ZW1zOlQsaGFzSXRlbTpXLHJlbW92ZUl0ZW06ZnVuY3Rpb24gZChpZSl7'@;
put 'cmV0dXJuIGwuZGVsZXRlKGllKX19fWNvbnN0IHZrZT1jPT5gJyR7Y30nIHZhbHVlIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSB1bmlxdWUgc2V0LmAsUk49Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAiJHtjfSIgcGx1Z2luLmAsT3RlPWZ1bmN0aW9uIGdrZSgpe2xldHtlcnJv'@;
put 'clByaW9yaXR5RXhpc3RzOmMsZXJyb3JQcmlvcml0eU5hTjpsfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgYT1uZXcgTWFwO3JldHVybiBjPVJhKGMpP2M6ZmtlLGw9UmEobCk/bDpwa2Use2FkZEl0ZW06ZnVuY3Rpb24g'@;
put 'ZChmLF8pe2lmKCFHdShmKSl0aHJvdyBuZXcgRXJyb3IobChmKSk7aWYoYS5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2Euc2V0KGYsXyl9LGdldEl0ZW1zOmZ1bmN0aW9uIGgoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb'@;
put 'MF06ImFzYyI7Y29uc3RbXyxUXT1SdGUuZ2V0KGYpfHxSdGUuZ2V0KCJhc2MiKTtyZXR1cm5bLi4uYV0uc29ydCgoVyxpZSk9PldbMF08aWVbMF0/XzpUKS5tYXAoVz0+V1sxXSl9fX0oe2Vycm9yUHJpb3JpdHlFeGlzdHM6Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBwbHVnaW4g'@;
put 'b24gcHJpb3JpdHkgIiR7Y30iLmAsZXJyb3JQcmlvcml0eU5hTjpjPT5gVGhlIHByaW9yaXR5ICIke2N9IiBpcyBub3QgYSBudW1iZXIuYH0pLFB0ZT1mdW5jdGlvbiBfa2UoKXtsZXR7ZXJyb3JJdGVtRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'P2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBTZXQ7cmV0dXJuIGM9UmEoYyk/Yzp2a2Use2FkZEl0ZW06ZnVuY3Rpb24gYShmKXtpZihsLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7bC5hZGQoZil9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldEl0ZW1zOmZ1bmN0'@;
put 'aW9uIGQoKXtyZXR1cm5bLi4ubF19fX0oe2Vycm9ySXRlbUV4aXN0czpSTn0pLE9OPV9rKHtlcnJvcklkRXhpc3RzOlJOfSk7ZnVuY3Rpb24gUE4oKXtyZXR1cm5bLi4uT3RlLmdldEl0ZW1zKCksLi4uUHRlLmdldEl0ZW1zKCldfWZ1bmN0aW9uIHV5KGMpe2NvbnN0IGw9YnUoYyk7cmV0dXJu'@;
put 'IE9OLmdldEl0ZW0obCl9ZnVuY3Rpb24ganMoYyxsLGEpe1tjLGwsYV09ZnVuY3Rpb24gd2tlKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9KGw9YykuUExVR0lOX0tFWSxhPWwuUExVR0lOX1BSSU9SSVRZKSxbYyxsLGFdfShjLGwsYSksdm9pZCAwPT09dXkoYykmJmZ1'@;
put 'bmN0aW9uIHlrZShjLGwsYSl7Y29uc3QgZD1idShjKTtpZihPTi5oYXNJdGVtKGQpKXRocm93IG5ldyBFcnJvcihSTihkKSk7dm9pZCAwPT09YT9QdGUuYWRkSXRlbShkKTpPdGUuYWRkSXRlbShhLGQpLE9OLmFkZEl0ZW0oZCxsKX0oYyxsLGEpfWNvbnN0e3JlZ2lzdGVyOkNrZSxnZXRJdGVt'@;
put 'OlNrZSxoYXNJdGVtOkZ0ZSxnZXROYW1lczpNa2V9PXBkKCJyZW5kZXJlcnMiKTtmdW5jdGlvbiBiayhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighRnRlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyICIke2N9IiBuYW1l'@;
put 'YCk7cmV0dXJuIFNrZShjKX1mdW5jdGlvbiBwaChjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuUkVOREVSRVJfVFlQRSksQ2tlKGMsbCl9Y29uc3R7cmVnaXN0ZXI6eGtlLGdldEl0ZW06RWtlLGhhc0l0ZW06SHRlLGdldE5hbWVzOmtrZX09cGQoInZhbGlkYXRvcnMiKTtmdW5j'@;
put 'dGlvbiBGTihjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighSHRlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBFa2UoYyl9ZnVuY3Rpb24gYTcoYyxsKXsic3RyaW5nIiE9dHlwZW9m'@;
put 'IGMmJihjPShsPWMpLlZBTElEQVRPUl9UWVBFKSx4a2UoYyxsKX1mdW5jdGlvbiB5ayhjKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiBkeShjKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gSE4oKXtyZXR1cm4ib250b3Vj'@;
put 'aHN0YXJ0ImluIHdpbmRvd31sZXQgbDc7ZnVuY3Rpb24gTnRlKGMpe3JldHVybiBsN3x8KGw3PSJvYmplY3QiPT10eXBlb2YgSW50bD9uZXcgSW50bC5Db2xsYXRvcihjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuY29tcGFyZToi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlPyhhLGQpPT5gJHthfWAubG9jYWxlQ29tcGFyZShkKTooYSxkKT0+YT09PWQ/MDphPmQ/LTE6MSxsNyl9Y29uc3QgYzc9bmV3IFdlYWtNYXAsVnRlPWNsYXNzIEFrZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYs'@;
put 'Xyl7bGV0IFQ9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOm51bGw7dGhpcy53dFNldHRpbmdzPWQsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RUYWJsZT1mLHRoaXMuc2VsZWN0aW9ucz1fLHRoaXMucGFyZW50PVQsdGhpcy5ldmVudE1h'@;
put 'bmFnZXI9aCx0aGlzLmZhY2FkZUdldHRlcj1sLGM3LnNldCh0aGlzLHtzZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZDp2b2lkIDAsZGJsQ2xpY2tUaW1lb3V0OltudWxsLG51bGxdLGRibENsaWNrT3JpZ2luOltudWxsLG51bGxdfSksdGhpcy5yZWdpc3RlckV2ZW50cygpfXJlZ2lzdGVyRXZl'@;
put 'bnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJjb250ZXh0bWVudSIsZD0+dGhpcy5vbkNvbnRleHRNZW51KGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5UQUJMRSwibW91c2VvdmVy'@;
put 'IixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5UQUJMRSwibW91c2VvdXQiLGQ9PnRoaXMub25Nb3VzZU91dChkKSk7Y29uc3QgbD0oKT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhp'@;
put 'cy53dFRhYmxlLmhvbGRlciwidG91Y2hzdGFydCIsZD0+dGhpcy5vblRvdWNoU3RhcnQoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwidG91Y2hlbmQiLGQ9PnRoaXMub25Ub3VjaEVuZChkKSksdGhpcy5tb21lbnR1bVNjcm9sbGlu'@;
put 'Z3x8KHRoaXMubW9tZW50dW1TY3JvbGxpbmc9e30pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwic2Nyb2xsIiwoKT0+e2NsZWFyVGltZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xs'@;
put 'aW5nLm9uZ29pbmd8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVRvdWNoU2Nyb2xsIiksdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSEwLHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMudG91Y2hBcHBsaWVkfHwo'@;
put 'dGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSExLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkFmdGVyTW9tZW50dW1TY3JvbGwiKSl9LDIwMCl9KX07bTIoKT9sKCk6KEhOKCkmJmwoKSwoKCk9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RU'@;
put 'YWJsZS5ob2xkZXIsIm1vdXNldXAiLGQ9PnRoaXMub25Nb3VzZVVwKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSl9KSgpKX1zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGwp'@;
put 'e2NvbnN0IGE9YzcuZ2V0KHRoaXMpLGg9dGhpcy5wYXJlbnRDZWxsKGwpLmNvb3JkcztpZihhLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kJiZoKXtjb25zdFtmLF9dPVtoLnJvdyxhLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kLmZyb20ucm93XSxbVCxXXT1baC5jb2wsYS5zZWxlY3Rl'@;
put 'ZENlbGxCZWZvcmVUb3VjaEVuZC5mcm9tLmNvbF07cmV0dXJuIGY9PT1fJiZUPT09V31yZXR1cm4hMX1wYXJlbnRDZWxsKGwpe2NvbnN0IGE9e30saD10eShsLFsiVEQiLCJUSCJdLHRoaXMud3RUYWJsZS5UQUJMRSk7cmV0dXJuIGg/KGEuY29vcmRzPXRoaXMud3RUYWJsZS5nZXRDb29yZHMo'@;
put 'aCksYS5URD1oKTpCbyhsLCJ3dEJvcmRlciIpJiZCbyhsLCJjdXJyZW50Iik/KGEuY29vcmRzPXRoaXMuc2VsZWN0aW9ucy5nZXRDZWxsKCkuY2VsbFJhbmdlLmhpZ2hsaWdodCxhLlREPXRoaXMud3RUYWJsZS5nZXRDZWxsKGEuY29vcmRzKSk6Qm8obCwid3RCb3JkZXIiKSYmQm8obCwiYXJl'@;
put 'YSIpJiZ0aGlzLnNlbGVjdGlvbnMuY3JlYXRlT3JHZXRBcmVhKCkuY2VsbFJhbmdlJiYoYS5jb29yZHM9dGhpcy5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpLmNlbGxSYW5nZS50byxhLlREPXRoaXMud3RUYWJsZS5nZXRDZWxsKGEuY29vcmRzKSksYX1vbk1vdXNlRG93bihsKXtjb25z'@;
put 'dCBhPWM3LmdldCh0aGlzKSxkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsaD12TihpdGUsbC50YXJnZXQpLGY9bC50YXJnZXQ7aWYoZj09PWR8fGgoMCk9PT1kfHxoKDEpPT09ZClyZXR1cm47Y29uc3QgXz10aGlzLnBhcmVudENlbGwoZik7Qm8oZiwiY29y'@;
put 'bmVyIik/dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ2VsbENvcm5lck1vdXNlRG93biIsbCxmKTpfLlREJiZ0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxNb3VzZURvd24iKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlRG93biIsbCxfLmNvb3JkcyxfLlREKSwoMD09'@;
put 'PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJl8uVEQmJihhLmRibENsaWNrT3JpZ2luWzBdPV8uVEQsY2xlYXJUaW1lb3V0KGEuZGJsQ2xpY2tUaW1lb3V0WzBdKSxhLmRibENsaWNrVGltZW91dFswXT1zZXRUaW1lb3V0KCgpPT57YS5kYmxDbGlja09yaWdpblswXT1udWxsfSwxZTMp'@;
put 'KX1vbkNvbnRleHRNZW51KGwpe2lmKHRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbENvbnRleHRNZW51Iikpe2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTthLlREJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29udGV4dE1lbnUiLGwsYS5jb29yZHMsYS5URCl9fW9uTW91'@;
put 'c2VPdmVyKGwpe2lmKCF0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxNb3VzZU92ZXIiKSlyZXR1cm47Y29uc3QgYT10aGlzLnd0VGFibGUuVEFCTEUsZD10eShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPXRoaXMucGFyZW50fHx0aGlzO2QmJmQhPT1oLmxhc3RNb3VzZU92ZXImJlZwKGQs'@;
put 'YSkmJihoLmxhc3RNb3VzZU92ZXI9ZCx0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdmVyIixsLHRoaXMud3RUYWJsZS5nZXRDb29yZHMoZCksZCkpfW9uTW91c2VPdXQobCl7aWYoIXRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbE1vdXNlT3V0IikpcmV0dXJuO2NvbnN0IGE9dGhp'@;
put 'cy53dFRhYmxlLlRBQkxFLGQ9dHkobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD10eShsLnJlbGF0ZWRUYXJnZXQsWyJURCIsIlRIIl0sYSksZj10aGlzLnBhcmVudHx8dGhpcztkJiZkIT09aCYmVnAoZCxhKSYmKHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsbCx0aGlzLnd0'@;
put 'VGFibGUuZ2V0Q29vcmRzKGQpLGQpLG51bGw9PT1oJiYoZi5sYXN0TW91c2VPdmVyPW51bGwpKX1vbk1vdXNlVXAobCl7Y29uc3QgYT1jNy5nZXQodGhpcyksZD10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2QuVEQmJnRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbE1vdXNlVXAiKSYmdGhp'@;
put 'cy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlVXAiLGwsZC5jb29yZHMsZC5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiYoZC5URD09PWEuZGJsQ2xpY2tPcmlnaW5bMF0mJmQuVEQ9PT1hLmRibENsaWNrT3JpZ2luWzFdPyhCbyhsLnRhcmdldCwiY29ybmVyIik/dGhp'@;
put 'cy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvcm5lckRibENsaWNrIixsLGQuY29vcmRzLGQuVEQpOnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsbCxkLmNvb3JkcyxkLlREKSxhLmRibENsaWNrT3JpZ2luWzBdPW51bGwsYS5kYmxDbGlja09yaWdpblsxXT1udWxsKTpkLlREPT09'@;
put 'YS5kYmxDbGlja09yaWdpblswXSYmKGEuZGJsQ2xpY2tPcmlnaW5bMV09ZC5URCxjbGVhclRpbWVvdXQoYS5kYmxDbGlja1RpbWVvdXRbMV0pLGEuZGJsQ2xpY2tUaW1lb3V0WzFdPXNldFRpbWVvdXQoKCk9PnthLmRibENsaWNrT3JpZ2luWzFdPW51bGx9LDUwMCkpKX1vblRvdWNoU3RhcnQo'@;
put 'bCl7YzcuZ2V0KHRoaXMpLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kPXRoaXMuc2VsZWN0aW9ucy5nZXRDZWxsKCkuY2VsbFJhbmdlLHRoaXMudG91Y2hBcHBsaWVkPSEwLHRoaXMub25Nb3VzZURvd24obCl9b25Ub3VjaEVuZChsKXt2YXIgYTtjb25zdCBkPWwudGFyZ2V0LGg9bnVsbD09'@;
put 'PShhPXRoaXMucGFyZW50Q2VsbChkKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29vcmRzLGY9S2koaCkmJmgucm93Pj0wJiZoLmNvbD49MDtpZihsLmNhbmNlbGFibGUmJmYmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSl7Y29uc3QgVD1bIkEiLCJC'@;
put 'VVRUT04iLCJJTlBVVCJdO2JOKCkmJih5dGUoKXx8d3RlKCkpJiZ0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCkmJiFULmluY2x1ZGVzKGQudGFnTmFtZSk/bC5wcmV2ZW50RGVmYXVsdCgpOnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKXx8bC5wcmV2ZW50RGVmYXVsdCgpfXRo'@;
put 'aXMub25Nb3VzZVVwKGwpLHRoaXMudG91Y2hBcHBsaWVkPSExfWNhbGxMaXN0ZW5lcihsLGEsZCxoKXtjb25zdCBmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZShsKTtmJiZmKGEsZCxoLHRoaXMuZmFjYWRlR2V0dGVyKCkpfWRlc3Ryb3koKXtjb25zdCBsPWM3LmdldCh0aGlzKTtj'@;
put 'bGVhclRpbWVvdXQobC5kYmxDbGlja1RpbWVvdXRbMF0pLGNsZWFyVGltZW91dChsLmRibENsaWNrVGltZW91dFsxXSksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX07Y2xhc3MgQnRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdXJyZW50U2l6ZT0wLHRoaXMubmV4dFNpemU9MCx0aGlzLmN1'@;
put 'cnJlbnRPZmZzZXQ9MCx0aGlzLm5leHRPZmZzZXQ9MH1zZXRTaXplKGwpe3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3RoaXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhpcy5uZXh0T2Zmc2V0PWx9fWNsYXNzIE9r'@;
put 'ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2l6ZT1uZXcgQnRlLHRoaXMud29ya2luZ1NwYWNlPTAsdGhpcy5zaGFyZWRTaXplPW51bGx9c2V0U2l6ZShsKXt0aGlzLnNpemUuc2V0U2l6ZShsKX1zZXRPZmZzZXQobCl7dGhpcy5zaXplLnNldE9mZnNldChsKX1nZXRWaWV3U2l6ZSgpe3JldHVybiB0'@;
put 'aGlzLnNpemV9aXNTaGFyZWQoKXtyZXR1cm4gdGhpcy5zaGFyZWRTaXplIGluc3RhbmNlb2YgQnRlfWlzUGxhY2VPbihsKXtyZXR1cm4gdGhpcy53b3JraW5nU3BhY2U9PT1sfWFwcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0xLGwud29ya2luZ1NwYWNlPTIsdGhpcy5zaGFyZWRTaXplPWwu'@;
put 'Z2V0Vmlld1NpemUoKX1wcmVwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTIsbC53b3JraW5nU3BhY2U9MSx0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfX1jbGFzcyBqdGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hLHRoaXMuc2l6'@;
put 'ZVNldD1uZXcgT2tlLHRoaXMuY2hpbGROb2RlVHlwZT1kLnRvVXBwZXJDYXNlKCksdGhpcy52aXN1YWxJbmRleD0wLHRoaXMuY29sbGVjdGVkTm9kZXM9W119c2V0U2l6ZShsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldFNpemUobCksdGhpc31zZXRPZmZzZXQobCl7cmV0dXJuIHRoaXMuc2l6'@;
put 'ZVNldC5zZXRPZmZzZXQobCksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0Tm9kZShsKXtyZXR1cm4gbDx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlzLmNvbGxlY3RlZE5vZGVzW2xdOm51bGx9Z2V0Q3VycmVudE5vZGUoKXtj'@;
put 'b25zdCBsPXRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiBsPjA/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsLTFdOm51bGx9Z2V0UmVuZGVyZWRDaGlsZENvdW50KCl7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXM7bGV0IGQ9MDtpZih0aGlzLmlzU2hhcmVkVmlld1NldCgp'@;
put 'KXtsZXQgaD1sLmZpcnN0RWxlbWVudENoaWxkO2Zvcig7aDspe2lmKGgudGFnTmFtZT09PXRoaXMuY2hpbGROb2RlVHlwZSlkKz0xO2Vsc2UgaWYoYS5pc1BsYWNlT24oMSkpYnJlYWs7aD1oLm5leHRFbGVtZW50U2libGluZ319ZWxzZSBkPWwuY2hpbGRFbGVtZW50Q291bnQ7cmV0dXJuIGR9'@;
put 'c3RhcnQoKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMudmlzdWFsSW5kZXg9MDtjb25zdHtyb290Tm9kZTpsLHNpemVTZXQ6YX09dGhpcyxkPXRoaXMuaXNTaGFyZWRWaWV3U2V0KCkse25leHRTaXplOmh9PWEuZ2V0Vmlld1NpemUoKTtsZXQgZj10aGlzLmdldFJlbmRlcmVk'@;
put 'Q2hpbGRDb3VudCgpO2Zvcig7ZjxoOyl7Y29uc3QgVD10aGlzLm5vZGVzUG9vbCgpOyFkfHxkJiZhLmlzUGxhY2VPbigyKT9sLmFwcGVuZENoaWxkKFQpOmwuaW5zZXJ0QmVmb3JlKFQsbC5maXJzdENoaWxkKSxmKz0xfWNvbnN0IF89ZCYmYS5pc1BsYWNlT24oMSk7Zm9yKDtmPmg7KWwucmVt'@;
put 'b3ZlQ2hpbGQoXz9sLmZpcnN0Q2hpbGQ6bC5sYXN0Q2hpbGQpLGYtPTF9cmVuZGVyKCl7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXM7bGV0IGQ9dGhpcy52aXN1YWxJbmRleDt0aGlzLmlzU2hhcmVkVmlld1NldCgpJiZhLmlzUGxhY2VPbigyKSYmKGQrPWEuc2hhcmVkU2l6ZS5u'@;
put 'ZXh0U2l6ZSk7bGV0IGg9bC5jaGlsZE5vZGVzW2RdO2lmKGgudGFnTmFtZSE9PXRoaXMuY2hpbGROb2RlVHlwZSl7Y29uc3QgZj10aGlzLm5vZGVzUG9vbCgpO2wucmVwbGFjZUNoaWxkKGYsaCksaD1mfXRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChoKSx0aGlzLnZpc3VhbEluZGV4Kz0xfWVu'@;
put 'ZCgpe319Y2xhc3MgenRlIGV4dGVuZHMganRle3ByZXBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQucHJlcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5hcHBlbmQodGhpcy5zaXplU2V0KSx0aGlzfWFwcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5hcHBlbmQobC5zaXpl'@;
put 'U2V0KSxsLnNpemVTZXQucHJlcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fWNsYXNzIFBrZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm5vZGVUeXBlPWwudG9VcHBlckNhc2UoKX1zZXRSb290RG9jdW1lbnQobCl7dGhpcy5yb290RG9jdW1lbnQ9bH1vYnRhaW4oKXtyZXR1cm4gdGhpcy5yb290RG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm5vZGVUeXBlKX19Y2xhc3MgaHl7Y29uc3RydWN0b3IobCxhKXt0aGlzLm5vZGVzUG9vbD0ic3RyaW5nIj09dHlwZW9mIGw/bmV3IFBrZShsKTpudWxsLHRoaXMubm9kZVR5cGU9bCx0aGlzLnJvb3ROb2RlPWEsdGhpcy50YWJsZT1udWxsLHRoaXMu'@;
put 'cmVuZGVyZWROb2Rlcz0wfXNldFRhYmxlKGwpe3RoaXMubm9kZXNQb29sJiZ0aGlzLm5vZGVzUG9vbC5zZXRSb290RG9jdW1lbnQobC5yb290RG9jdW1lbnQpLHRoaXMudGFibGU9bH1hZGp1c3QoKXt9cmVuZGVyKCl7fX1jbGFzcyBGa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3Rvcigpe3N1cGVy'@;
put 'KCJUSCIpLHRoaXMub3JkZXJWaWV3cz1uZXcgV2Vha01hcCx0aGlzLnNvdXJjZVJvd0luZGV4PTB9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgenRlKGwsZD0+dGhpcy5ub2Rlc1Bv'@;
put 'b2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRlcnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10aGlz'@;
put 'LnRhYmxlO2ZvcihsZXQgXz0wO188bDtfKyspe2NvbnN0IFQ9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKF8pLFc9aC5nZXRSZW5kZXJlZE5vZGUoXyk7dGhpcy5zb3VyY2VSb3dJbmRleD1UO2NvbnN0IGllPXRoaXMub2J0YWluT3JkZXJWaWV3KFcpLHBlPWYub2J0YWluT3JkZXJW'@;
put 'aWV3KFcpO2llLmFwcGVuZFZpZXcocGUpLnNldFNpemUoZCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IHdlPTA7d2U8ZDt3ZSsrKXtpZS5yZW5kZXIoKTtjb25zdCBFZT1pZS5nZXRDdXJyZW50Tm9kZSgpO0VlLmNsYXNz'@;
put 'TmFtZT0iIixFZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksYVt3ZV0oVCxFZSx3ZSl9aWUuZW5kKCl9fX1jbGFzcyBIa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDph'@;
put 'fT10aGlzLnRhYmxlO2xldCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtmb3IobGV0IFQ9MCxXPWw7VDxXO1QrKyl7Zm9yKGQ9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW1RdLGR8fChkPXRoaXMudGFi'@;
put 'bGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQu'@;
put 'Y3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCBfPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYoXz5s'@;
put 'KWZvcihsZXQgVD1sO1Q8XztUKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZnMihkKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50YWJsZTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3R7Y29s'@;
put 'dW1uSGVhZGVyRnVuY3Rpb25zOmQsY29sdW1uc1RvUmVuZGVyOmgscm93SGVhZGVyc0NvdW50OmZ9PXRoaXMudGFibGUsXz10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbYV07Zm9yKGxldCBUPS0xKmY7VDxoO1QrPTEpe2NvbnN0IFc9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNl'@;
put 'KFQpLGllPV8uY2hpbGROb2Rlc1tUK2ZdO2llLmNsYXNzTmFtZT0iIixpZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksZFthXShXLGllLGEpfX19fWNsYXNzIE5rZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVy'@;
put 'Omwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGUsZD1sK2E7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM8ZDspdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7'@;
put 'dGhpcy5yZW5kZXJlZE5vZGVzPmQ7KXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1yZW5kZXIoKXt0aGlzLmFkanVzdCgpO2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlz'@;
put 'LnRhYmxlO2ZvcihsZXQgaD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLF89dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7X31weGB9'@;
put 'Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksXz10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2FdLnN0eWxlLndpZHRoPWAke199'@;
put 'cHhgfWNvbnN0IGQ9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO2QmJnBpKGQsInJvd0hlYWRlciIpfX1sZXQgVXRlPSExO2NsYXNzIFZrZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCksdGhpcy5vcmRlclZpZXc9bmV3IGp0ZShsLGE9PnRoaXMubm9kZXNQb29sLm9i'@;
put 'dGFpbihhKSx0aGlzLm5vZGVUeXBlKX1nZXRSZW5kZXJlZE5vZGUobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUobCl9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmx9PXRoaXMudGFibGU7IVV0ZSYmbD4xZTMmJihVdGU9ITAsR2EoQWFgUGVyZm9ybWFuY2UgdGlwOiBIYW5k'@;
put 'c29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSByb3dzLiBDb25zaWRlciBsaW1pdGluZ1x4MjAKICAgICAgICB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vciB0dXJuaW5nIG9mZiB0aGUgInJlbmRl'@;
put 'ckFsbFJvd3MiIG9wdGlvbi5gKSksdGhpcy5vcmRlclZpZXcuc2V0U2l6ZShsKS5zZXRPZmZzZXQodGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKDApKS5zdGFydCgpO2ZvcihsZXQgYT0wO2E8bDthKyspdGhpcy5vcmRlclZpZXcucmVuZGVyKCk7dGhpcy5vcmRlclZpZXcuZW5kKCl9'@;
put 'fWNsYXNzIEJrZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKCl7c3VwZXIoIlREIiksdGhpcy5vcmRlclZpZXdzPW5ldyBXZWFrTWFwLHRoaXMuc291cmNlUm93SW5kZXg9MH1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVy'@;
put 'Vmlld3MuZ2V0KGwpOihhPW5ldyB6dGUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVyOmEs'@;
put 'cm93czpkLHJvd0hlYWRlcnM6aH09dGhpcy50YWJsZTtmb3IobGV0IGY9MDtmPGw7ZisrKXtjb25zdCBfPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShmKSxUPWQuZ2V0UmVuZGVyZWROb2RlKGYpO3RoaXMuc291cmNlUm93SW5kZXg9Xztjb25zdCBXPXRoaXMub2J0YWluT3JkZXJW'@;
put 'aWV3KFQpLGllPWgub2J0YWluT3JkZXJWaWV3KFQpO1cucHJlcGVuZFZpZXcoaWUpLnNldFNpemUoYSkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IHBlPTA7cGU8YTtwZSsrKXtXLnJlbmRlcigpO2NvbnN0IHdlPVcuZ2V0'@;
put 'Q3VycmVudE5vZGUoKSxFZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UocGUpO0JvKHdlLCJoaWRlIil8fCh3ZS5jbGFzc05hbWU9IiIpLHdlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx3ZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpLHRoaXMudGFibGUuY2VsbFJlbmRlcmVy'@;
put 'KF8sRWUsd2UpfVcuZW5kKCl9fX1jbGFzcyBqa2V7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSZW5kZXJlcjphfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5yb290Tm9kZT1sLHRoaXMucm9vdERvY3VtZW50PXRoaXMucm9v'@;
put 'dE5vZGUub3duZXJEb2N1bWVudCx0aGlzLnJvd0hlYWRlcnM9bnVsbCx0aGlzLmNvbHVtbkhlYWRlcnM9bnVsbCx0aGlzLmNvbEdyb3VwPW51bGwsdGhpcy5yb3dzPW51bGwsdGhpcy5jZWxscz1udWxsLHRoaXMucm93RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVsbCx0aGlzLnJv'@;
put 'd1V0aWxzPW51bGwsdGhpcy5jb2x1bW5VdGlscz1udWxsLHRoaXMucm93c1RvUmVuZGVyPTAsdGhpcy5jb2x1bW5zVG9SZW5kZXI9MCx0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1bXSx0aGlzLnJvd0hlYWRlcnNDb3VudD0wLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPVtdLHRoaXMuY29s'@;
put 'dW1uSGVhZGVyc0NvdW50PTAsdGhpcy5jZWxsUmVuZGVyZXI9YX1zZXRBeGlzVXRpbHMobCxhKXt0aGlzLnJvd1V0aWxzPWwsdGhpcy5jb2x1bW5VdGlscz1hfXNldFZpZXdwb3J0U2l6ZShsLGEpe3RoaXMucm93c1RvUmVuZGVyPWwsdGhpcy5jb2x1bW5zVG9SZW5kZXI9YX1zZXRGaWx0ZXJz'@;
put 'KGwsYSl7dGhpcy5yb3dGaWx0ZXI9bCx0aGlzLmNvbHVtbkZpbHRlcj1hfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXt0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1sLHRoaXMucm93SGVhZGVyc0NvdW50PWwubGVuZ3RoLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPWEsdGhpcy5j'@;
put 'b2x1bW5IZWFkZXJzQ291bnQ9YS5sZW5ndGh9c2V0UmVuZGVyZXJzKCl7bGV0e3Jvd0hlYWRlcnM6bCxjb2x1bW5IZWFkZXJzOmEsY29sR3JvdXA6ZCxyb3dzOmgsY2VsbHM6Zn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2wuc2V0'@;
put 'VGFibGUodGhpcyksYS5zZXRUYWJsZSh0aGlzKSxkLnNldFRhYmxlKHRoaXMpLGguc2V0VGFibGUodGhpcyksZi5zZXRUYWJsZSh0aGlzKSx0aGlzLnJvd0hlYWRlcnM9bCx0aGlzLmNvbHVtbkhlYWRlcnM9YSx0aGlzLmNvbEdyb3VwPWQsdGhpcy5yb3dzPWgsdGhpcy5jZWxscz1mfXJlbmRl'@;
put 'cmVkUm93VG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9cmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1yZW5kZXIoKXt0aGlzLmNvbEdyb3VwLmFkanVzdCgpLHRo'@;
put 'aXMuY29sdW1uSGVhZGVycy5hZGp1c3QoKSx0aGlzLnJvd3MuYWRqdXN0KCksdGhpcy5yb3dIZWFkZXJzLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5yZW5kZXIoKSx0aGlzLnJvd3MucmVuZGVyKCksdGhpcy5yb3dIZWFkZXJzLnJlbmRlcigpLHRoaXMuY2VsbHMucmVuZGVyKCksdGhp'@;
put 'cy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKSx0aGlzLmNvbEdyb3VwLnJlbmRlcigpO2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd3M6YX09dGhpcztmb3IobGV0IGQ9MDtkPGw7ZCsrKXtjb25zdCBoPWEuZ2V0UmVuZGVyZWROb2RlKGQpO2lmKGguZmlyc3RDaGlsZCl7Y29uc3QgZj10'@;
put 'aGlzLnJlbmRlcmVkUm93VG9Tb3VyY2UoZCksXz10aGlzLnJvd1V0aWxzLmdldEhlaWdodChmKTtoLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PV8/Xy0xKyJweCI6IiJ9fX19Y2xhc3Mgemtle2NvbnN0cnVjdG9yKCl7bGV0e1RBQkxFOmwsVEhFQUQ6YSxDT0xHUk9VUDpkLFRCT0RZOmgscm93'@;
put 'VXRpbHM6Zixjb2x1bW5VdGlsczpfLGNlbGxSZW5kZXJlcjpUfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5yZW5kZXJlcj1uZXcgamtlKGwse2NlbGxSZW5kZXJlcjpUfSksdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJlcnMo'@;
put 'e3Jvd0hlYWRlcnM6bmV3IEZrZSxjb2x1bW5IZWFkZXJzOm5ldyBIa2UoYSksY29sR3JvdXA6bmV3IE5rZShkKSxyb3dzOm5ldyBWa2UoaCksY2VsbHM6bmV3IEJrZX0pLHRoaXMucmVuZGVyZXIuc2V0QXhpc1V0aWxzKGYsXyl9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVy'@;
put 'LnNldEZpbHRlcnMobCxhKSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJl'@;
put 'cnMobCxhKSx0aGlzfWFkanVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19Y2xhc3MgVWtle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWEsdGhpcy5oZWFkZXJXaWR0aHM9'@;
put 'bmV3IE1hcH1nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbldpZHRoIixsKXx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpfWdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhpcy5kYXRh'@;
put 'QWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I7bGV0IGQ9dGhpcy5nZXRXaWR0aChsKTtpZihhKXtjb25zdCBoPWEuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCxkKTtoJiYoZD1oKX1yZXR1cm4gZH1nZXRIZWFkZXJIZWlnaHQobCl7bGV0IGE9dGhpcy53'@;
put 'dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihhPWE/TWF0aC5tYXgoYSxkKTpkKSxhfWdldEhlYWRlcldpZHRo'@;
put 'KGwpe3JldHVybiB0aGlzLmhlYWRlcldpZHRocy5nZXQodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCkpfWNhbGN1bGF0ZVdpZHRocygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCxj'@;
put 'bG9uZVNvdXJjZTpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1oP2gud3RUYWJsZS5ob2xkZXI6YS5ob2xkZXIsXz1mLm9mZnNldEhlaWdodDxmLnNjcm9sbEhlaWdodD9MYygpOjA7bGV0IFQ9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGQuY29sdW1uc1JlbmRlckNhbGN1'@;
put 'bGF0b3IucmVmcmVzaFN0cmV0Y2hpbmcoZC5nZXRWaWV3cG9ydFdpZHRoKCktXyksVD1sLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLFQpLG51bGwhPVQpe2NvbnN0IFc9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLGllPWwuZ2V0U2V0dGluZygiZGVmYXVs'@;
put 'dENvbHVtbldpZHRoIik7Zm9yKGxldCBwZT0wO3BlPFc7cGUrKyl7bGV0IHdlPUFycmF5LmlzQXJyYXkoVCk/VFtwZV06VDt3ZT13ZT8/aWUsdGhpcy5oZWFkZXJXaWR0aHMuc2V0KHBlLHdlKX19fX1jbGFzcyBaa2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0'@;
put 'aGlzLnd0U2V0dGluZ3M9YX1nZXRIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsbCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT12b2lkIDA9'@;
put 'PT1hP2Q6TWF0aC5tYXgoYSxkKSksYX19Y29uc3QgeWc9InRvcCIsZ2g9ImJvdHRvbSIsd2c9ImlubGluZV9zdGFydCIsQ2c9InRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIixacD0iYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiLFlrZT1beWcsZ2gsd2csQ2csWnBdLFdrZT1uZXcgTWFwKFtb'@;
put 'eWcsYGh0X2Nsb25lXyR7eWd9YF0sW2doLGBodF9jbG9uZV8ke2dofWBdLFt3ZyxgaHRfY2xvbmVfJHt3Z30gaHRfY2xvbmVfbGVmdGBdLFtDZyxgaHRfY2xvbmVfJHtDZ30gaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyYF0sW1pwLGBodF9jbG9uZV8ke1pwfSBodF9jbG9uZV9ib3R0b21fbGVm'@;
put 'dF9jb3JuZXJgXV0pO2Z1bmN0aW9uIG1oKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBHa2UoYyl7dmFyIGw9ZnVuY3Rpb24gJGtlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7'@;
put 'dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMp'@;
put 'fShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgdTc9Y2xhc3Mg'@;
put 'cWtle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7bWgodGhpcywid3RTZXR0aW5ncyIsbnVsbCksbWgodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksbWgodGhpcywiVEJPRFkiLG51bGwpLG1oKHRoaXMsIlRIRUFEIixudWxsKSxtaCh0aGlzLCJDT0xHUk9VUCIsbnVsbCksbWgodGhpcywiaGFz'@;
put 'VGFibGVIZWlnaHQiLCEwKSxtaCh0aGlzLCJoYXNUYWJsZVdpZHRoIiwhMCksbWgodGhpcywiaXNUYWJsZVZpc2libGUiLCExKSxtaCh0aGlzLCJ0YWJsZU9mZnNldCIsMCksbWgodGhpcywiaG9sZGVyT2Zmc2V0IiwwKSx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5pc01hc3Rlcj0ibWFzdGVy'@;
put 'Ij09PWYsdGhpcy5uYW1lPWYsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxF'@;
put 'PWQucm9vdFRhYmxlLGROKHRoaXMuVEFCTEUpLHRoaXMuc3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxFKSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5ob2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53'@;
put 'dFJvb3RFbGVtZW50PXRoaXMuaG9sZGVyLnBhcmVudE5vZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJvd0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5j'@;
put 'b3JyZWN0SGVhZGVyV2lkdGg9ITE7Y29uc3QgXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hlYWRlcldpZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aChfKSksdGhpcy5yb3dVdGls'@;
put 'cz1uZXcgWmtlKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9bmV3IFVrZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxlUmVuZGVyZXI9bmV3IHprZSh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0'@;
put 'aGlzLlRIRUFELENPTEdST1VQOnRoaXMuQ09MR1JPVVAsVEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJvd1V0aWxzLGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIil9KX1p'@;
put 'cyhsKXtyZXR1cm4gdGhpcy5uYW1lPT09bH1maXhUYWJsZURvbVRyZWUoKXtjb25zdCBsPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50O3RoaXMuVEJPRFk9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0Ym9keSIpLHRoaXMuVEJPRFl8fCh0aGlzLlRCT0RZPWwuY3JlYXRlRWxlbWVu'@;
put 'dCgidGJvZHkiKSx0aGlzLlRBQkxFLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpKSx0aGlzLlRIRUFEPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGhlYWQiKSx0aGlzLlRIRUFEfHwodGhpcy5USEVBRD1sLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUo'@;
put 'dGhpcy5USEVBRCx0aGlzLlRCT0RZKSksdGhpcy5DT0xHUk9VUD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoImNvbGdyb3VwIiksdGhpcy5DT0xHUk9VUHx8KHRoaXMuQ09MR1JPVVA9bC5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuQ09M'@;
put 'R1JPVVAsdGhpcy5USEVBRCkpfWNyZWF0ZVNwcmVhZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0'@;
put 'ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dFNwcmVhZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkfWNyZWF0ZUhpZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8'@;
put 'YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dEhpZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQo'@;
put 'bCkpLGR9Y3JlYXRlSG9sZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp'@;
put 'LGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkLmNsYXNzTmFtZT0id3RIb2xkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksdGhpcy5pc01hc3RlciYmKGQucGFyZW50Tm9kZS5jbGFzc05hbWUrPSJodF9tYXN0ZXIgaGFuZHNvbnRhYmxlIixkLnBhcmVudE5vZGUuc2V0QXR0cmlidXRl'@;
put 'KCJkaXIiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSksZC5hcHBlbmRDaGlsZChsKSksZH1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRp'@;
put 'bmdzOmF9PXRoaXMse3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksXz1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLFQ9YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksVz1ULmxlbmd0aCxpZT1h'@;
put 'LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxwZT1pZS5sZW5ndGg7bGV0IHdlPSExLEVlPWw7aWYodGhpcy5pc01hc3RlciYmKHRoaXMuaG9sZGVyT2Zmc2V0PUtsKHRoaXMuaG9sZGVyKSxFZT1oLmNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKEVlKSxXJiYhYS5nZXRTZXR0aW5nKCJmaXhl'@;
put 'ZENvbHVtbnNTdGFydCIpKSl7Y29uc3QgaXQ9ZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxldD10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDt0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0wIT09aXQsZXQhPT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKEVlPSExKX1p'@;
put 'Zih0aGlzLmlzTWFzdGVyJiYod2U9ZC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCkpLEVlKXRoaXMuaXNNYXN0ZXImJmguY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksZCYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9LbCh0aGlzLlRBQkxFKTp0'@;
put 'aGlzLmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3QgaXQ9Zj4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpOjAsZXQ9Xz4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpOjA7dGhpcy5yb3dGaWx0ZXI9bmV3IGNsYXNzIElrZXtjb25zdHJ1Y3RvcihsLGEs'@;
put 'ZCl7dGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJj'@;
put 'ZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhsKXtyZXR1cm4gdGhpcy5y'@;
put 'ZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fShpdCxmLHBlKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgY2xhc3MgVGtl'@;
put 'e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZzZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5v'@;
put 'ZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNl'@;
put 'Q29sdW1uKGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19KGV0LF8sVyk7bGV0'@;
put 'IHl0PSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpO2NvbnN0IEV0PXt9O3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxFdCkseXQ9ITAhPT1FdC5za2lwUmVuZGVyfWlmKHl0KXtsZXQgRXQ7aWYo'@;
put 'dGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoVCxpZSksKHRoaXMuaXMoZ2gpfHx0aGlzLmlzKFpwKSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKFQsW10pLHRoaXMucmVzZXRPdmVyc2l6ZWRSb3dzKCksdGhpcy50YWJs'@;
put 'ZVJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZSh0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCksdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLHRoaXMuY29sdW1uRmlsdGVyKS5yZW5kZXIoKSx0aGlzLmlzTWFzdGVyJiYoRXQ9dGhpcy5k'@;
put 'YXRhQWNjZXNzT2JqZWN0LndvcmtzcGFjZVdpZHRoLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNvbnRhaW5lcldpZHRoPW51bGwsdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpKSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSwodGhpcy5pc01hc3Rl'@;
put 'cnx8dGhpcy5pcyhnaCkpJiZ0aGlzLm1hcmtPdmVyc2l6ZWRSb3dzKCksdGhpcy5pc01hc3Rlcil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMucmVmcmVzaCghMSksdGhp'@;
put 'cy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMuYXBwbHlUb0RPTSgpO2NvbnN0IFN0PXdhKHRoaXMuaGlkZXIpLEp0PXdhKHRoaXMuVEFCTEUpOzAhPT1TdCYmSnQhPT1TdCYmKHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhzKCksdGhpcy50YWJsZVJlbmRlcmVyLnJlbmRlcmVy'@;
put 'LmNvbEdyb3VwLnJlbmRlcigpKSxFdCE9PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5jb250YWluZXJXaWR0aD1udWxsLHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhz'@;
put 'KCksdGhpcy50YWJsZVJlbmRlcmVyLnJlbmRlcmVyLmNvbEdyb3VwLnJlbmRlcigpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCl9ZWxzZSB0aGlzLmlzKGdoKSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNsb25lU291cmNlLnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVu'@;
put 'dHNTaXplKCl9fWxldCBaZT0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKFplPWQudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbU92ZXJsYXkuY2xvbmUmJihaZT1kLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fFplKSxaZT1kLmlubGluZVN0YXJ0'@;
put 'T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8WmUsZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLmJvdHRvbUlubGluZVN0'@;
put 'YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkpLFplPyhkLnJlZnJlc2hBbGwoKSxkLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLnJlZnJlc2hTZWxlY3Rpb25zKEVlKSx3ZSYmZC5zeW5jU2Nyb2xs'@;
put 'V2l0aE1hc3RlcigpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCk7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVt'@;
put 'bkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpO2xldCBmLF8sVDtjb25zdCBXPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJIZWlnaHQiKXx8W107Zm9yKDtkOylkLT0xLGY9dGhpcy5n'@;
put 'ZXRDb2x1bW5IZWFkZXJIZWlnaHQoZCksXz10aGlzLmdldENvbHVtbkhlYWRlcihhLGQpLF8mJihUPWpmKF8pLCghZiYmaDxUfHxmPFQpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1UKSxBcnJheS5pc0FycmF5KFcpP251bGwh'@;
put 'PVdbZF0mJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPVdbZF0pOmlzTmFOKFcpfHwodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1XKSx0aGlzLmRhdGFBY2Nlc3NPYmpl'@;
put 'Y3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPChXW2RdfHxXKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09V1tkXXx8VykpfWFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKXtjb25zdHt3dFNldHRpbmdz'@;
put 'Omx9PXRoaXMsYT10aGlzLlRIRUFELmNoaWxkTm9kZXMsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzO2ZvcihsZXQgZj0wLF89bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2Y8XztmKyspaWYoZFtmXSl7aWYoIWFb'@;
put 'Zl18fDA9PT1hW2ZdLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjthW2ZdLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PWAke2RbZl19cHhgfX1yZXNldE92ZXJzaXplZFJvd3MoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0'@;
put 'O2lmKCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKGdoKSkmJiFsLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXtjb25zdCBkPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9T'@;
put 'b3VyY2UoaCk7YS5vdmVyc2l6ZWRSb3dzJiZhLm92ZXJzaXplZFJvd3NbZl0mJihhLm92ZXJzaXplZFJvd3NbZl09dm9pZCAwKX19fXJlbW92ZUNsYXNzRnJvbUNlbGxzKGwpe2NvbnN0IGE9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtsfWApO2ZvcihsZXQgZD0wLGg9YS5sZW5n'@;
put 'dGg7ZDxoO2QrKylXbyhhW2RdLGwpfXJlZnJlc2hTZWxlY3Rpb25zKGwpe2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyx7c2VsZWN0aW9uczpkfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuO2NvbnN0IGg9QXJyYXkuZnJvbShkKSxmPWgubGVuZ3RoO2lmKGwpe2NvbnN0IF89'@;
put 'W107Zm9yKGxldCBpZT0wO2llPGY7aWUrKyl7Y29uc3R7aGlnaGxpZ2h0SGVhZGVyQ2xhc3NOYW1lOnBlLGhpZ2hsaWdodFJvd0NsYXNzTmFtZTp3ZSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6RWV9PWhbaWVdLnNldHRpbmdzLFplPWhbaWVdLmNsYXNzTmFtZXMsaXQ9WmUubGVuZ3RoO2Zv'@;
put 'cihsZXQgZXQ9MDtldDxpdDtldCsrKV8uaW5jbHVkZXMoWmVbZXRdKXx8Xy5wdXNoKFplW2V0XSk7cGUmJiFfLmluY2x1ZGVzKHBlKSYmXy5wdXNoKHBlKSx3ZSYmIV8uaW5jbHVkZXMod2UpJiZfLnB1c2god2UpLEVlJiYhXy5pbmNsdWRlcyhFZSkmJl8ucHVzaChFZSl9Y29uc3QgVD1hLmdl'@;
put 'dFNldHRpbmcoIm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKTtpZihBcnJheS5pc0FycmF5KFQpKWZvcihsZXQgaWU9MDtpZTxULmxlbmd0aDtpZSsrKV8ucHVzaChUW2llXSk7Y29uc3QgVz1fLmxlbmd0aDtmb3IobGV0IGllPTA7aWU8VztpZSsrKXRoaXMucmVtb3ZlQ2xhc3NGcm9t'@;
put 'Q2VsbHMoX1tpZV0pfWZvcihsZXQgXz0wO188ZjtfKyspaFtfXS5kcmF3KHRoaXMuZmFjYWRlR2V0dGVyKCksbCl9Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsYSxkKTtpZiho'@;
put 'JiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztp'@;
put 'Zih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3QgXz1mLmNoaWxkTm9kZXNb'@;
put 'dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighXyYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIF99Z2V0Um93KGwpe2xldCBhPW51'@;
put 'bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRoaXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09'@;
put 'PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2Fy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7Y29uc3QgYT1b'@;
put 'XSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGlsZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVyKGwpe2xldCBh'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKDA9PT10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkpcmV0dXJuO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJy'@;
put 'b3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25zdCBoPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXTtyZXR1cm4gaD8uY2hpbGROb2Rlc1thXX1nZXRSb3dIZWFkZXJzKGwpe2lmKDA9PT10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VD'@;
put 'b2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkpcmV0dXJuW107Y29uc3QgYT1bXSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93Rmls'@;
put 'dGVyLnNvdXJjZVRvUmVuZGVyZWQobCldLF89Zj8uY2hpbGROb2Rlc1toXTtfJiZhLnB1c2goXyl9cmV0dXJuIGF9Z2V0Q29vcmRzKGwpe2xldCBhPWw7aWYoIlREIiE9PWEubm9kZU5hbWUmJiJUSCIhPT1hLm5vZGVOYW1lJiYoYT1OcChhLFsiVEQiLCJUSCJdKSksbnVsbD09PWEpcmV0dXJu'@;
put 'IG51bGw7Y29uc3QgZD1hLnBhcmVudE5vZGUsaD1kLnBhcmVudE5vZGU7bGV0IGY9c3RlKGQpLF89YS5jZWxsSW5kZXg7cmV0dXJuIEJwKENnLGEsdGhpcy53dFJvb3RFbGVtZW50KXx8QnAoeWcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYoZi09aC5jaGls'@;
put 'ZE5vZGVzLmxlbmd0aCk6Zj1CcChacCxhLHRoaXMud3RSb290RWxlbWVudCl8fEJwKGdoLGEsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFEP3RoaXMucm93RmlsdGVy'@;
put 'LnZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhmKTp0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpLF89QnAoQ2csYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxCcCh3ZyxhLHRoaXMud3RSb290RWxlbWVudCl8fEJwKFpwLGEsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLmNv'@;
put 'bHVtbkZpbHRlci5vZmZzZXR0ZWRUSChfKTp0aGlzLmNvbHVtbkZpbHRlci52aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4oXyksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLF8pfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'ImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXJldHVybjtsZXQgaCxmLF8sVCxXLGw9dGhpcy5UQk9EWS5jaGlsZE5vZGVzLmxlbmd0aDtpZihsKnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0IikhPWpmKHRoaXMuVEJPRFkpLTF8fHRoaXMud3RTZXR0aW5ncy5n'@;
put 'ZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSlmb3IoO2w7KWwtPTEsXz10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpLGg9dGhpcy5nZXRSb3dIZWlnaHQoXyksVD10aGlzLmdldFRyRm9yUm93KF8pLFc9VC5xdWVyeVNlbGVjdG9yKCJ0aCIpLGY9Vz9qZihXKTpqZihUKS0x'@;
put 'LCghaCYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTxmfHxoPGYpJiYoZis9MSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW19dPWYpfWdldFRyRm9yUm93KGwpe3JldHVybiB0aGlzLlRCT0RZLmNoaWxkTm9kZXNb'@;
put 'dGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV19aXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93SGVh'@;
put 'ZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5k'@;
put 'ZXJlZFJvdygpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNSb3dIZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNSb3dBZnRlclJlbmRlcmVkUm93cyhsKXtyZXR1cm4gbD50aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGwpe2NvbnN0IGE9dGhp'@;
put 'cy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpOmw8YX1pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RSZW5kZXJlZENvbHVt'@;
put 'bigpfWlzQ29sdW1uQWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpfWlzUm93QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfWlzQ29sdW1u'@;
put 'QmVmb3JlVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZ0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpPDAmJmw+PTB9aXNMYXN0Um93RnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKT09PXRoaXMuZ2V0TGFzdFJlbmRl'@;
put 'cmVkUm93KCl9aXNMYXN0Q29sdW1uRnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9YWxsUm93c0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93'@;
put 'cyIpPT09dGhpcy5nZXRWaXNpYmxlUm93c0NvdW50KCl9YWxsQ29sdW1uc0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPT09dGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl9Z2V0Um93SGVpZ2h0KGwpe3JldHVybiB0aGlz'@;
put 'LnJvd1V0aWxzLmdldEhlaWdodChsKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0SGVhZGVySGVpZ2h0KGwpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKGwpfWdldFN0cmV0Y2hlZENvbHVtbldp'@;
put 'ZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpfWhhc0RlZmluZWRTaXplKCl7cmV0dXJuIHRoaXMuaGFzVGFibGVIZWlnaHQmJnRoaXMuaGFzVGFibGVXaWR0aH1nZXRXaWR0aCgpe3JldHVybiB3YSh0aGlzLlRBQkxFKX1nZXRIZWlnaHQo'@;
put 'KXtyZXR1cm4gYWwodGhpcy5UQUJMRSl9Z2V0VG90YWxXaWR0aCgpe2NvbnN0IGw9d2EodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRXaWR0aCgpfWdldFRvdGFsSGVpZ2h0KCl7Y29uc3QgbD1hbCh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldEhlaWdodCgp'@;
put 'fWlzVmlzaWJsZSgpe3JldHVybiBlNyh0aGlzLlRBQkxFKX1fbW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9UmEobCk/bCgpOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGE9Wy4uLmFdLGFbYS5sZW5ndGgtMV09dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGFbYS5sZW5n'@;
put 'dGgtMV0pKTphPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhKSxhfV9jb3JyZWN0Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGwmJihhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKSksdGhpcy5jb3Jy'@;
put 'ZWN0SGVhZGVyV2lkdGgmJihhKz0xKSxhfX0sWnRlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygp'@;
put 'fSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxjKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9fTtmaChadGUsIk1JWElOX05BTUUiLCJz'@;
put 'dGlja3lSb3dzVG9wIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFl0ZT1adGUsV3RlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmly'@;
put 'c3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5kZXJlZDtyZXR1'@;
put 'cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu'@;
put 'Y291bnRDb2x1bW5zUmVuZGVyZWR9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1Zpc2libGV9fTtmaChXdGUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkQ29sdW1ucyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9'@;
put 'KTtjb25zdCBOTj1XdGU7Y2xhc3MgVk4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLHlnKX19VGEoVk4sWXRlKSxUYShWTixOTik7Y29uc3QgSmtlPVZOO2Z1bmN0aW9uIEJOKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBRa2UoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gZUFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gR3RlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBvQWUoYyl7dmFyIGw9ZnVuY3Rpb24gc0FlKGMsbCl7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt'@;
put 'dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph'@;
put 'LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gZnkoYyxsKXtyZXR1cm4gZnVuY3Rpb24gYUFlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYywkdGUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gJHRlKGMs'@;
put 'bCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBTZz1uZXcgV2Vha01hcDtjbGFzcyBqTntjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07R3RlKHRoaXMsInJvdyIsbnVsbCksR3RlKHRoaXMsImNvbCIsbnVsbCksZnVuY3Rpb24gckFlKGMsbCxhKXsoZnVuY3Rpb24gaUFlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu'@;
put 'bm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxTZyx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxmdW5jdGlvbiBsQWUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBjQWUoYyxsLGEpe2lmKGwu'@;
put 'c2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLCR0ZShjLGwsInNldCIpLGEpLGF9KHRoaXMsU2csZCksdHlwZW9mIGw8InUiJiZ0'@;
put 'eXBlb2YgYTwidSImJih0aGlzLnJvdz1sLHRoaXMuY29sPWEpfWlzVmFsaWQobCl7cmV0dXJuISh0aGlzLnJvdzwwfHx0aGlzLmNvbDwwfHx0aGlzLnJvdz49bC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKXx8dGhpcy5jb2w+PWwuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIikpfWlzRXF1YWwo'@;
put 'bCl7cmV0dXJuIGw9PT10aGlzfHx0aGlzLnJvdz09PWwucm93JiZ0aGlzLmNvbD09PWwuY29sfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJu'@;
put 'IHRoaXMucm93PD1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzU291dGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzTm9ydGhFYXN0T2Yo'@;
put 'bCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLnJvdz1udWxsPT09dGhpcy5yb3c/dGhpcy5yb3c6TWF0aC5tYXgodGhpcy5yb3csMCksdGhpcy5jb2w9bnVsbD09PXRo'@;
put 'aXMuY29sP3RoaXMuY29sOk1hdGgubWF4KHRoaXMuY29sLDApLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IGpOKHRoaXMucm93LHRoaXMuY29sLGZ5KHRoaXMsU2cpKX10b09iamVjdCgpe3JldHVybntyb3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX19Y29uc3QgU2s9ak47ZnVuY3Rpb24gek4o'@;
put 'YyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGhBZShjKXt2YXIgbD1mdW5jdGlvbiBmQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs'@;
put 'dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i'@;
put 'b2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB2aChjLGwpe3JldHVybiBmdW5jdGlvbiBwQWUoYyxs'@;
put 'KXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLHF0ZShjLGwsImdldCIpKX1mdW5jdGlvbiBxdGUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1'@;
put 'cm4gbC5nZXQoYyl9dmFyIGdkPW5ldyBXZWFrTWFwO2NsYXNzIFVOe2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJn'@;
put 'dW1lbnRzWzJdOmwsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3pOKHRoaXMsImhpZ2hsaWdodCIsbnVsbCksek4odGhpcywiZnJvbSIsbnVsbCksek4odGhpcywidG8iLG51bGwpLGZ1bmN0aW9uIHVBZShjLGwsYSl7KGZ1bmN0aW9u'@;
put 'IGRBZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsZ2Qse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksdGhpcy5o'@;
put 'aWdobGlnaHQ9bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLHRoaXMuZnJvbT1hLmNsb25lKCksdGhpcy50bz1kLmNsb25lKCksZnVuY3Rpb24gZ0FlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gbUFlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxxdGUoYyxsLCJzZXQiKSxhKSxhfSh0aGlzLGdkLGgpfXNldEhpZ2hsaWdodChsKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLm5vcm1hbGl6ZSgp'@;
put 'LHRoaXN9c2V0RnJvbShsKXtyZXR1cm4gdGhpcy5mcm9tPWwuY2xvbmUoKSx0aGlzfXNldFRvKGwpe3JldHVybiB0aGlzLnRvPWwuY2xvbmUoKSx0aGlzfWlzVmFsaWQobCl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGwpJiZ0aGlzLnRvLmlzVmFsaWQobCl9aXNTaW5nbGUoKXtyZXR1cm4g'@;
put 'dGhpcy5mcm9tLnJvdz49MCYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPj0wJiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9Z2V0T3V0ZXJIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyktTWF0aC5taW4odGhp'@;
put 'cy5mcm9tLnJvdyx0aGlzLnRvLnJvdykrMX1nZXRPdXRlcldpZHRoKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKzF9Z2V0SGVpZ2h0KCl7aWYodGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJv'@;
put 'dzwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLnJvdywwKSxhPU1hdGgubWF4KHRoaXMudG8ucm93LDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRXaWR0aCgpe2lmKHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MClyZXR1cm4gMDtj'@;
put 'b25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsMCksYT1NYXRoLm1heCh0aGlzLnRvLmNvbCwwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0Q2VsbHNDb3VudCgpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRIZWlnaHQoKX1pbmNsdWRlcyhsKXtj'@;
put 'b25zdHtyb3c6YSxjb2w6ZH09bCxoPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGY9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybiBoLnJvdzw9YSYmZi5yb3c+PWEmJmguY29sPD1kJiZmLmNvbD49ZH1pbmNsdWRlc1JhbmdlKGwpe3JldHVybiB0aGlzLmluY2x1'@;
put 'ZGVzKGwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSYmdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpfWlzRXF1YWwobCl7cmV0dXJuIE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdykmJk1h'@;
put 'dGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCkmJk1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50'@;
put 'by5jb2wpPT09TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCl9b3ZlcmxhcHMobCl7cmV0dXJuIGwuaXNTb3V0aEVhc3RPZih0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKSYmbC5pc05vcnRoV2VzdE9mKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1pc1NvdXRoRWFz'@;
put 'dE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzU291dGhFYXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzU291dGhFYXN0T2YobCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5p'@;
put 'c05vcnRoV2VzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfWlzT3ZlcmxhcHBpbmdIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5j'@;
put 'b2wmJnRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sfHx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigp'@;
put 'LmNvbD49bC5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2x9aXNPdmVybGFwcGluZ1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9tUmlnaHRD'@;
put 'b3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvd3x8dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRv'@;
put 'cFJpZ2h0Q29ybmVyKCkucm93fWV4cGFuZChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybihsLnJvdzxhLnJvd3x8bC5jb2w8YS5jb2x8fGwucm93PmQucm93fHxsLmNvbD5kLmNvbCkmJih0aGlz'@;
put 'LmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihhLnJvdyxsLnJvdyksTWF0aC5taW4oYS5jb2wsbC5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoZC5yb3csbC5yb3cpLE1hdGgubWF4KGQuY29sLGwuY29sKSksITApfWV4cGFuZEJ5UmFu'@;
put 'Z2UobCl7aWYodGhpcy5pbmNsdWRlc1JhbmdlKGwpfHwhdGhpcy5vdmVybGFwcyhsKSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGg9dGhpcy5nZXREaXJlY3Rpb24oKSxmPWwuZ2V0T3V0ZXJU'@;
put 'b3BTdGFydENvcm5lcigpLF89bC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLFQ9TWF0aC5taW4oYS5yb3csZi5yb3cpLFc9TWF0aC5taW4oYS5jb2wsZi5jb2wpLGllPU1hdGgubWF4KGQucm93LF8ucm93KSxwZT1NYXRoLm1heChkLmNvbCxfLmNvbCksd2U9dGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhULFcpLEVlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaWUscGUpO3JldHVybiB0aGlzLmZyb209d2UsdGhpcy50bz1FZSx0aGlzLnNldERpcmVjdGlvbihoKSx0aGlzLmhpZ2hsaWdodC5yb3c9PT10aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJiJOLVMiPT09dGhp'@;
put 'cy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCksdGhpcy5oaWdobGlnaHQuY29sPT09dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiYiVy1FIj09PXRoaXMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJl'@;
put 'Y3Rpb25Ib3Jpem9udGFsbHkoKSwhMH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tLmlzTm9ydGhXZXN0T2YodGhpcy50byk/Ik5XLVNFIjp0aGlzLmZyb20uaXNOb3J0aEVhc3RPZih0aGlzLnRvKT8iTkUtU1ciOnRoaXMuZnJvbS5pc1NvdXRoRWFzdE9mKHRoaXMudG8pPyJTRS1O'@;
put 'VyI6dGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50byk/IlNXLU5FIjp2b2lkIDB9c2V0RGlyZWN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIk5XLVNFIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENv'@;
put 'cm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90'@;
put 'dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpXX19Z2V0VmVydGljYWxEaXJl'@;
put 'Y3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUiOiJF'@;
put 'LVcifWZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMu'@;
put 'c2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpfX1mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2Jy'@;
put 'ZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX1nZXRUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlz'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIHZoKHRoaXMsZ2QpP3RoaXMuZ2V0VG9wRW5kQ29ybmVyKCk6'@;
put 'dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfWdldEJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRC'@;
put 'b3R0b21SaWdodENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1nZXRUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRo'@;
put 'aXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVyKCl9Z2V0Qm90dG9tU3RhcnRDb3Ju'@;
put 'ZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tTGVmdENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlz'@;
put 'LmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX1nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0'@;
put 'aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdl'@;
put 'dE91dGVyQm90dG9tRW5kQ29ybmVyKCl9Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BSaWdo'@;
put 'dENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5y'@;
put 'b3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpfWlz'@;
put 'Q29ybmVyKGwsYSl7cmV0dXJuISEoYSYmYS5pbmNsdWRlcyhsKSYmKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGEuZnJvbS5yb3csYS5mcm9tLmNvbCkpfHx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5pc0VxdWFsKHRo'@;
put 'aXMuX2NyZWF0ZUNlbGxDb29yZHMoYS5mcm9tLnJvdyxhLnRvLmNvbCkpfHx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLnRvLnJvdyxhLmZyb20uY29sKSl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlz'@;
put 'RXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLnRvLnJvdyxhLnRvLmNvbCkpKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21M'@;
put 'ZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWdldE9wcG9zaXRlQ29ybmVyKGwsYSl7aWYoIShsIGluc3RhbmNlb2YgU2spKXJldHVybiExO2lmKGEpe2NvbnN0e2Zyb206ZCx0bzpofT1hO2lmKGEuaW5jbHVkZXMobCkpe2lmKHRoaXMu'@;
put 'Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxkLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7aWYodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhkLnJvdyxoLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTtpZih0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csZC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlclRvcEVu'@;
put 'ZENvcm5lcigpO2lmKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csaC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9fXJldHVybiBsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUVu'@;
put 'ZENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpKT90aGlzLmdldE91dGVy'@;
put 'Qm90dG9tU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp2b2lkIDB9Z2V0Qm9yZGVyc1NoYXJlZFdpdGgobCl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShsKSlyZXR1cm5bXTtjb25zdCBh'@;
put 'X3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2JvdHRvbT1NYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2xlZnQ9TWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksYV9yaWdodD1NYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMu'@;
put 'dG8uY29sKSxkX3RvcD1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSxkX2JvdHRvbT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSxkX2xlZnQ9TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKSxoPVtdO3Jl'@;
put 'dHVybiBhX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGFfcmlnaHQ9PT1kX3JpZ2h0JiZoLnB1c2goInJpZ2h0IiksYV9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNoKCJib3R0b20iKSxhX2xlZnQ9PT1kX2xlZnQmJmgucHVzaCgibGVmdCIpLGh9Z2V0SW5uZXIoKXtjb25zdCBsPXRoaXMu'@;
put 'Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PWYpJiYodGhp'@;
put 'cy50by5yb3chPT1ofHx0aGlzLnRvLmNvbCE9PWYpJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1nZXRBbGwoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9y'@;
put 'KGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKWQucHVzaChsLnJvdz09PWgmJmwuY29sPT09Zj9sOmEucm93PT09aCYmYS5jb2w9PT1mP2E6dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1mb3JBbGwobCl7Y29uc3QgYT10'@;
put 'aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGg9YS5yb3c7aDw9ZC5yb3c7aCsrKWZvcihsZXQgZj1hLmNvbDtmPD1kLmNvbDtmKyspaWYoITE9PT1sKGgsZikpcmV0dXJufWNsb25lKCl7cmV0dXJuIG5ldyBVTih0'@;
put 'aGlzLmhpZ2hsaWdodCx0aGlzLmZyb20sdGhpcy50byx2aCh0aGlzLGdkKSl9dG9PYmplY3QoKXtyZXR1cm57ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlzLnRvLnRvT2JqZWN0KCl9fV9jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBTayhsLGEsdmgodGhpcyxnZCkp'@;
put 'fX1jb25zdCBaTj1VTjtmdW5jdGlvbiBfMihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gdkFlKGMpe3ZhciBsPWZ1bmN0aW9uIF9BZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp'@;
put 'e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj'@;
put 'KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFlOe2dldCBl'@;
put 'dmVudE1hbmFnZXIoKXtyZXR1cm4gbmV3IGxsKHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7XzIodGhpcywid3RUYWJsZSIsdm9pZCAwKSxfMih0aGlzLCJ3dFNjcm9sbCIsdm9pZCAwKSxfMih0aGlzLCJ3dFZpZXdwb3J0Iix2b2lkIDApLF8yKHRoaXMsInd0T3ZlcmxheXMiLHZvaWQgMCksXzIo'@;
put 'dGhpcywic2VsZWN0aW9ucyIsdm9pZCAwKSxfMih0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLF8yKHRoaXMsImd1aWQiLGB3dF8ke2FOKCl9YCksXzIodGhpcywiZHJhd0ludGVycnVwdGVkIiwhMSksXzIodGhpcywiZHJhd24iLCExKSxfMih0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxfMih0'@;
put 'aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RUYWJsZTpsLHJvb3REb2N1bWVudDpsLm93bmVyRG9jdW1lbnQscm9vdFdpbmRvdzpsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5ncz1hLHRoaXMud3RTY3JvbGw9bmV3IGNsYXNz'@;
put 'IHRBZXtjb25zdHJ1Y3RvcihsKXtCTih0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLEJOKHRoaXMsImxhc3RTY3JvbGxlZENvbHVtblBvcyIsLTEpLEJOKHRoaXMsImxhc3RTY3JvbGxlZFJvd1BvcyIsLTEpLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sfXNjcm9sbFZpZXdwb3J0KGws'@;
put 'YSxkLGgsZil7Y29uc3QgXz10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwuY29sLGQsZiksVD10aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLnJvdyxhLGgpO3JldHVybiBffHxUfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKXtjb25zdHtkcmF3bjpoLHRv'@;
put 'dGFsQ29sdW1uczpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWh8fCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+ZilyZXR1cm4hMTtjb25zdCBfPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksVD10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCksVz12b2lkIDA9PT1hJiZ2'@;
put 'b2lkIDA9PT1kLHtmaXhlZENvbHVtbnNTdGFydDppZSxpbmxpbmVTdGFydE92ZXJsYXk6cGV9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihXJiZsPGllKXJldHVybiExO2xldCB3ZT0hMTtyZXR1cm4tMT09PV8/d2U9cGUuc2Nyb2xsVG8obCxXP2w+dGhpcy5sYXN0U2Nyb2xsZWRDb2x1bW5Q'@;
put 'b3M6YSk6KFcmJihsPF98fGw+VCl8fCFXKSYmKHdlPXBlLnNjcm9sbFRvKGwsVz9sPlQ6YSkpLHdlJiYodGhpcy5sYXN0U2Nyb2xsZWRDb2x1bW5Qb3M9bCksd2V9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtjb25zdHtkcmF3bjpoLHRvdGFsUm93czpmfT10aGlzLmRhdGFBY2Nl'@;
put 'c3NPYmplY3Q7aWYoIWh8fCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+ZilyZXR1cm4hMTtjb25zdCBfPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksVD10aGlzLmdldExhc3RWaXNpYmxlUm93KCksVz12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtmaXhlZFJvd3NCb3R0b206aWUsZml4'@;
put 'ZWRSb3dzVG9wOnBlLHRvcE92ZXJsYXk6d2V9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihXJiYobDxwZXx8bD5mLWllLTEpKXJldHVybiExO2xldCBFZT0hMTtyZXR1cm4tMT09PV8/RWU9d2Uuc2Nyb2xsVG8obCxXP2w+dGhpcy5sYXN0U2Nyb2xsZWRSb3dQb3M6ZCk6KFcmJihsPF98fGw+'@;
put 'VCl8fCFXKSYmKEVlPXdlLnNjcm9sbFRvKGwsVz9sPlQ6ZCkpLEVlJiYodGhpcy5sYXN0U2Nyb2xsZWRSb3dQb3M9bCksRWV9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3R7dG9wT3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxSb3dzOmgsZml4ZWRSb3dzVG9wOmYscm9v'@;
put 'dFdpbmRvdzpffT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9YS5nZXRGaXJzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Xyl7Y29uc3QgVz1LbChhLnd0Um9vdEVsZW1lbnQpLGllPWpmKGEuaGlkZXIpLHBlPWpmKF8pLHdlPW55KF8sXyk7aWYo'@;
put 'Vy50b3AraWUtcGU8PXdlKXtsZXQgRWU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtFZSs9bC5zdW1DZWxsU2l6ZXMoMCxmKTtmb3IobGV0IFplPWg7WmU+MDtaZS0tKWlmKEVlKz1sLnN1bUNlbGxTaXplcyhaZS0xLFplKSxXLnRvcCtpZS1FZTw9d2Upe1Q9WmU7YnJlYWt9fX1yZXR1cm4g'@;
put 'VH1nZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBfPWEuZ2V0TGFzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVF'@;
put 'bGVtZW50PT09Zil7Y29uc3QgVD1LbChhLnd0Um9vdEVsZW1lbnQpLFc9bnkoZixmKTtpZihULnRvcD5XKXtjb25zdCBpZT1qZihmKTtsZXQgcGU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtmb3IobGV0IHdlPTE7d2U8PWg7d2UrKylpZihwZSs9bC5zdW1DZWxsU2l6ZXMod2UtMSx3ZSks'@;
put 'VC50b3ArcGUtVz49aWUpe189d2UtMjticmVha319fXJldHVybiBffWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0e2lubGluZVN0YXJ0T3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxDb2x1bW5zOmgscm9vdFdpbmRvdzpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7'@;
put 'bGV0IF89YS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Zil7Y29uc3QgVD1LbChhLnd0Um9vdEVsZW1lbnQpLFc9aXkoYS5oaWRlciksaWU9aXkoZikscGU9TWF0aC5hYnMoaWsoZixmKSk7aWYoVC5sZWZ0K1ctaWU8PXBlKXtsZXQg'@;
put 'd2U9ZC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgRWU9aDtFZT4wO0VlLS0paWYod2UrPWwuc3VtQ2VsbFNpemVzKEVlLTEsRWUpLFQubGVmdCtXLXdlPD1wZSl7Xz1FZTticmVha319fXJldHVybiBffWdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3R7d3RTZXR0aW5nczpsLGlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheTphLHd0VGFibGU6ZCx3dFZpZXdwb3J0OmgsdG90YWxDb2x1bW5zOmYscm9vdFdpbmRvdzpffT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9ZC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2lmKGEubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1fKXtsZXQgaWU9'@;
put 'bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3Qgd2U9ZC5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZT1NYXRoLmFicyh3ZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgp'@;
put 'fWVsc2UgaWU9S2woZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IHBlPU1hdGguYWJzKGlrKF8sXykpO2lmKGllPnBlKXtjb25zdCB3ZT1peShfKTtsZXQgRWU9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgWmU9MTtaZTw9ZjtaZSsrKWlmKEVlKz1hLnN1bUNlbGxTaXplcyhaZS0x'@;
put 'LFplKSxpZStFZS1wZT49d2Upe1Q9WmUtMjticmVha319fXJldHVybiBUfX0odGhpcy5jcmVhdGVTY3JvbGxEYW8oKSl9ZmluZE9yaWdpbmFsSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLnd0VGFibGUuVEhFQUQuY2hp'@;
put 'bGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCl7Zm9yKGxldCBhPTAsZD10aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKWwucHVzaCh0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2FdLmlubmVySFRN'@;
put 'TCk7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy51cGRhdGUoImNvbHVtbkhlYWRlcnMiLFtmdW5jdGlvbihhLGQpe2pwKGQsbFthXSl9XSl9fWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IFNrKGwsYSx0'@;
put 'aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiBuZXcgWk4obCxhLGQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZHJhd0ludGVycnVwdGVkPSExLGx8fHRoaXMud3RUYWJsZS5pc1Zpc2libGUoKT90aGlzLnd0VGFibGUuZHJhdyhsKTp0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMCx0aGlzfWdldENlbGwobCl7aWYoIShhcmd1bWVudHMubGVuZ3Ro'@;
put 'PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKSlyZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCk7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiks'@;
put 'Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihsLnJvdzxoJiZsLmNvbDxfKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVy'@;
put 'bGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxoKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5jb2w8XyYmbC5yb3c+PWQtZil7aWYodGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVy'@;
put 'T3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9ZWxzZXtpZihsLmNvbDxfKXJldHVybiB0'@;
put 'aGlzLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxkJiZsLnJvdz49ZC1mJiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RP'@;
put 'dmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1yZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCl9c2Nyb2xsVmlld3BvcnQobCxhLGQsaCxmKXtyZXR1cm4hKGwuY29sPDB8fGwucm93PDApJiZ0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0KGwsYSxk'@;
put 'LGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiEobDwwKSYmdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtyZXR1cm4hKGw8MCkmJnRoaXMud3RTY3JvbGwuc2Ny'@;
put 'b2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKX1nZXRWaWV3cG9ydCgpe3JldHVyblt0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJs'@;
put 'ZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpXX1kZXN0cm95KCl7dGhpcy53dE92ZXJsYXlzLmRlc3Ryb3koKSx0aGlzLnd0RXZlbnQuZGVzdHJveSgpfWNyZWF0ZVNjcm9sbERhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259LGdldCB0b3BPdmVybGF5'@;
put 'KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdw'@;
put 'b3J0fSxnZXQgd3RTZXR0aW5ncygpe3JldHVybiBsLnd0U2V0dGluZ3N9LGdldCByb290V2luZG93KCl7cmV0dXJuIGwuZG9tQmluZGluZ3Mucm9vdFdpbmRvd30sZ2V0IHRvdGFsUm93cygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIil9LGdldCB0b3RhbENv'@;
put 'bHVtbnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpfSxnZXQgZml4ZWRSb3dzVG9wKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX0sZ2V0IGZpeGVkUm93c0JvdHRvbSgpe3JldHVybiBsLnd0U2V0dGluZ3Mu'@;
put 'Z2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9LGdldCBmaXhlZENvbHVtbnNTdGFydCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKX19fWdldFRhYmxlRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdl'@;
put 'dCBwYXJlbnRUYWJsZU9mZnNldCgpe3JldHVybiBsLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBsLmNsb25lU291cmNlfSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9'@;
put 'LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gbC53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9ucygpe3JldHVybiBsLnNlbGVjdGlvbnN9LGdldCBkcmF3bigpe3JldHVybiBsLmRyYXdufSxzZXQgZHJhd24oYSl7bC5kcmF3bj1h'@;
put 'fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCBzdGFydENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29s'@;
put 'dW1uc1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNW'@;
put 'aXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBjb3VudENvbHVtbnNSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJs'@;
put 'ZUNhbGN1bGF0b3IuY291bnR9LGdldCBzdGFydFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93'@;
put 'fSxnZXQgZW5kUm93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBjb3VudFJvd3NSZW5kZXJlZCgp'@;
put 'e3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudFJvd3NWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9fX19ZnVuY3Rpb24gS3RlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBiQWUo'@;
put 'Yyl7dmFyIGw9ZnVuY3Rpb24geUFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0'@;
put 'dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwp'@;
put 'LGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgd0FlIGV4dGVuZHMgWU57Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksS3RlKHRoaXMsImNsb25lU291'@;
put 'cmNlIix2b2lkIDApLEt0ZSh0aGlzLCJjbG9uZU92ZXJsYXkiLHZvaWQgMCk7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLmNsb25lU291cmNlPWQuc291cmNlLHRoaXMuY2xvbmVPdmVybGF5PWQub3ZlcmxheSx0aGlzLnd0VGFibGU9dGhp'@;
put 'cy5jbG9uZU92ZXJsYXkuY3JlYXRlVGFibGUodGhpcy5nZXRUYWJsZURhbygpLGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1kLnZpZXdwb3J0LHRoaXMuc2VsZWN0aW9ucz1kLnNlbGVjdGlvbnMsdGhpcy53dEV2ZW50PW5ldyBWdGUoaCx0aGlz'@;
put 'LmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25zLGQuZXZlbnQpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfX1jbGFzcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpeyhmdW5jdGlvbiBDQWUoYyxsLGEp'@;
put 'e3JldHVybiBsPWZ1bmN0aW9uIFNBZShjKXt2YXIgbD1mdW5jdGlvbiBNQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10'@;
put 'eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLGZoKHRoaXMsIndvdCIsbCx7d3Jp'@;
put 'dGFibGU6ITF9KSx0aGlzLmRvbUJpbmRpbmdzPWYsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aDtjb25zdHtUQUJMRTpfLGhpZGVyOlQsc3ByZWFkZXI6Vyxob2xkZXI6aWUsd3RSb290RWxlbWVudDpwZX09dGhpcy53b3Qud3RUYWJsZTt0aGlzLmluc3RhbmNlPXRoaXMu'@;
put 'd290LHRoaXMudHlwZT1kLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9bnVsbCx0aGlzLlRBQkxFPV8sdGhpcy5oaWRlcj1ULHRoaXMuc3ByZWFkZXI9Vyx0aGlzLmhvbGRlcj1pZSx0aGlzLnd0Um9vdEVsZW1lbnQ9cGUsdGhpcy50cmltbWluZ0NvbnRhaW5lcj12Zyh0aGlzLmhp'@;
put 'ZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSksdGhpcy51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCksdGhpcy5jbG9uZT10aGlzLm1ha2VDbG9uZSgpfXVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXtjb25zdCBsPXRoaXMubmVlZEZ1bGxSZW5kZXI7dGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNo'@;
put 'b3VsZEJlUmVuZGVyZWQoKTtjb25zdCBhPWwhPT10aGlzLm5lZWRGdWxsUmVuZGVyO3JldHVybiBhJiYhdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5yZXNldCgpLGF9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiEwfXVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCl7dGhpcy50cmltbWluZ0Nv'@;
put 'bnRhaW5lcj12Zyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9'@;
put 'ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXI6cnkobC5UQUJMRSl9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb24obCxhLGQpe2lmKCExPT09dGhp'@;
put 'cy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250YWlucyhsKSlyZXR1cm4gdm9pZCBHYShgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlICR7dGhpcy50eXBlfSBvdmVybGF5YCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5k'@;
put 'b21CaW5kaW5ncy5yb290V2luZG93LGY9ZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxfPWE8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFQ9YT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIp'@;
put 'LXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxXPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixpZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24oVyksdG9wOlcub2Zmc2V0VG9wfSxwZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0'@;
put 'YXJ0UG9zaXRpb24obCksdG9wOmwub2Zmc2V0VG9wfTtsZXQgd2U9bnVsbDtyZXR1cm4gd2U9aD90aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KF8sZixwZSxpZSk6dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcihfLFQsZixwZSxpZSksd2V9'@;
put 'Z2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpe3JldHVybiB0aGlzLmlzUnRsKCk/bC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGgtbC5vZmZzZXRMZWZ0LWwub2Zmc2V0V2lkdGg6bC5vZmZzZXRMZWZ0fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KGwsYSxkLGgpe2NvbnN0'@;
put 'IGY9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBfPTAsVD0wO2lmKGEpe2xldCBXPWYubGVmdDt0aGlzLmlzUnRsKCkmJihXPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoLShmLmxlZnQrZi53aWR0aCtMYygp'@;
put 'KSksXz1XPD0wPy0xKlc6MH1lbHNlIF89aC5zdGFydDtyZXR1cm4gVD1sP3RoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtZi50b3A6aC50b3Ase3N0YXJ0OmQuc3RhcnQrXyx0b3A6ZC50b3ArVH19Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRo'@;
put 'aW5Ib2xkZXIobCxhLGQsaCxmKXtjb25zdCBfX2hvcml6b250YWw9dGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxfX3ZlcnRpY2FsPXRoaXMud290Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO2xldCBU'@;
put 'PTAsVz0wO2lmKGR8fChUPV9faG9yaXpvbnRhbC1mLnN0YXJ0KSxhKXtjb25zdCBpZT10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Vz0tMSp0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK2ll'@;
put 'LnRvcH1lbHNlIGx8fChXPV9fdmVydGljYWwtZi50b3ApO3JldHVybntzdGFydDpoLnN0YXJ0LVQsdG9wOmgudG9wLVd9fW1ha2VDbG9uZSgpe2lmKC0xPT09WWtlLmluZGV4T2YodGhpcy50eXBlKSl0aHJvdyBuZXcgRXJyb3IoYENsb25lIHR5cGUgIiR7dGhpcy50eXBlfSIgaXMgbm90IHN1'@;
put 'cHBvcnRlZC5gKTtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGY9YS5jcmVhdGVFbGVtZW50KCJUQUJMRSIpLF89bC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7'@;
put 'aC5jbGFzc05hbWU9YCR7V2tlLmdldCh0aGlzLnR5cGUpfSBoYW5kc29udGFibGVgLGguc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGwoKT8icnRsIjoibHRyIiksaC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGguc3R5bGUudG9wPTAsaC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIs'@;
put 'dGhpcy5pc1J0bCgpP2guc3R5bGUucmlnaHQ9MDpoLnN0eWxlLmxlZnQ9MCxmLmNsYXNzTmFtZT1sLlRBQkxFLmNsYXNzTmFtZSxoLmFwcGVuZENoaWxkKGYpLF8uYXBwZW5kQ2hpbGQoaCk7Y29uc3QgVD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7cmV0'@;
put 'dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1UfHwiaG9yaXpvbnRhbCI9PT1UJiZ0aGlzLnR5cGU9PT15Z3x8InZlcnRpY2FsIj09PVQmJnRoaXMudHlwZT09PXdnP2Q6ImhpZGRlbiI9PT1kLmdldENvbXB1dGVkU3R5bGUoXykuZ2V0UHJvcGVydHlWYWx1ZSgib3Zl'@;
put 'cmZsb3ciKT9sLmhvbGRlcjpyeShsLlRBQkxFKSxuZXcgd0FlKGYsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RFdmVudCxzZWxlY3Rpb25zOnRoaXMud290LnNlbGVjdGlv'@;
put 'bnN9KX1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBhPXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpO3RoaXMuY2xvbmUmJih0aGlzLm5lZWRGdWxsUmVuZGVyfHxhKSYmdGhpcy5jbG9uZS5kcmF3KGwp'@;
put 'LHRoaXMubmVlZEZ1bGxSZW5kZXI9YX1yZXNldCgpe2lmKCF0aGlzLmNsb25lKXJldHVybjtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7RG4oW2wuc3R5bGUsdGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLGwucGFyZW50Tm9kZS5zdHlsZV0sXz0+e18ud2lkdGg9IiIs'@;
put 'Xy5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpfWRlc3Ryb3koKXt0aGlzLmNsb25lLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNsYXNzIEFBZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSx5'@;
put 'ZyxkLGgpLGZ1bmN0aW9uIHhBZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gRUFlKGMpe3ZhciBsPWZ1bmN0aW9uIGtBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk'@;
put 'PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi'@;
put 'c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJv'@;
put 'd3NUb3AiLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTty'@;
put 'ZXR1cm4gbmV3IEprZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLndvdC53dFRhYmxlLmhv'@;
put 'bGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGg9MCxmPSExO2lm'@;
put 'KHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxkJiYidmVydGljYWwiPT09ZCloPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxzeShsKTtlbHNle2NvbnN0e3d0VGFibGU6VH09dGhpcy53b3QsVz1ULmhpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Y9TWF0aC5jZWlsKFcuYm90dG9t'@;
put 'KT09PWwub2Zmc2V0SGVpZ2h0LGg9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksb2sobCwiMHB4IixgJHtofXB4YCl9Y29uc3QgXz10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihoLGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLF99c2V0U2Nyb2xsUG9zaXRpb24o'@;
put 'bCl7Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c7bGV0IGQ9ITE7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1hJiZhLnNjcm9sbFkhPT1sPyhhLnNjcm9sbFRvKG1nKGEpLGwpLGQ9ITApOnRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQu'@;
put 'c2Nyb2xsVG9wIT09bCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPWwsZD0hMCksZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNl'@;
put 'dHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaCk7Zis9dm9pZCAwPT09Xz9kOl8saCs9MX1yZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8bCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6'@;
put 'ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1MYyhhKSxfPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxUPXRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09ZHx8Imhvcml6b250YWwiPT09VCl7bGV0IGllPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJh'@;
put 'clJpZ2h0JiYoaWUtPWgpLGllPU1hdGgubWluKGllLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksXy53aWR0aD1gJHtpZX1weGB9ZWxzZSBfLndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9Xy53aWR0aDtsZXQgVz1hbCh0aGlzLmNsb25lLnd0VGFi'@;
put 'bGUuVEFCTEUpO3RoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KFc9MCksXy5oZWlnaHQ9YCR7V31weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe3ZhciBsO2NvbnN0e2hvbGRlcjphfT10aGlzLmNsb25lLnd0VGFibGUse3NlbGVjdGlvbnM6ZH09dGhpcy53b3QsaD10aGlz'@;
put 'LmZhY2FkZUdldHRlcigpLGY9TWF0aC5hYnMobnVsbCE9PShsPWQ/LmdldENlbGwoKS5nZXRCb3JkZXIoaCkuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQpJiZ2b2lkIDAhPT1sP2w6MCk7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMuaGlkZXIuc3R5bGUud2lkdGgs'@;
put 'YS5zdHlsZS53aWR0aD1hLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsYS5zdHlsZS5oZWlnaHQ9YCR7cGFyc2VJbnQoYS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCwxMCkrZn1weGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lm'@;
put 'KCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtp'@;
put 'ZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3Zlcmxh'@;
put 'eU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3Vs'@;
put 'YXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtjb25zdHt3b3Q6ZCx3dFNldHRpbmdzOmh9PXRoaXMsXz0oZC5jbG9uZVNvdXJjZT9kLmNsb25lU291cmNlOmQp'@;
put 'Lnd0VGFibGUuaG9sZGVyO2xldCBUPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxXPTA7aWYoYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoYT0hMSksYSYmXy5vZmZzZXRIZWlnaHQhPT1fLmNs'@;
put 'aWVudEhlaWdodCYmKFc9TGModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhKXtjb25zdCBpZT1oLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHBlPWguZ2V0U2V0dGluZygidG90YWxSb3dzIik7VCs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLFQtPWQud3RWaWV3cG9y'@;
put 'dC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKHBlLWllLHBlKSxUKz0xfWVsc2UgVCs9dGhpcy5zdW1DZWxsU2l6ZXMoaC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsKTtyZXR1cm4gVCs9Vyx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKFQpfWdldFRhYmxlUGFyZW50'@;
put 'T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbnkodGhpcy5tYWluVGFibGVTY3JvbGxh'@;
put 'YmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1t'@;
put 'aW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpO2Q9TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFi'@;
put 'bGVQYXJlbnRPZmZzZXQoKSwwKSxkPl8mJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIu'@;
put 'cGFyZW50Tm9kZTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik/V28oZCwiZW1wdHlDb2x1bW5zIik6cGkoZCwiZW1wdHlDb2x1bW5zIik7bGV0IGY9ITE7aWYoIWEpe2NvbnN0IF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFQ9'@;
put 'dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3AhPT1fLFc9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtpZigoVHx8MD09PV8pJiZXLmxlbmd0aD4wKXtjb25zdCBpZT1CbyhkLCJpbm5lckJvcmRlclRvcCIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPXRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsfHwwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhwaShkLCJpbm5lckJvcmRlclRvcCIpLGY9IWllKTooV28oZCwiaW5uZXJCb3JkZXJUb3AiKSxmPWllKX19cmV0dXJuIGZ9fWNvbnN0IFh0ZT17'@;
put 'Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGE9Yy1sO3JldHVybiAwPT09Y3x8MD09PWw/LTE6YTwwPzA6YX0sZ2V0Rmlyc3RW'@;
put 'aXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVk'@;
put 'Um93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxjKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgp'@;
put 'e3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9fTtmaChYdGUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzQm90dG9tIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IEp0ZT1YdGU7Y2xhc3MgV04gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBl'@;
put 'cihsLGEsZCxoLGdoKX19VGEoV04sSnRlKSxUYShXTixOTik7Y29uc3QgREFlPVdOO2NsYXNzIE9BZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxnaCxkLGgpLGZ1bmN0aW9uIElBZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gTEFlKGMpe3ZhciBsPWZ1bmN0'@;
put 'aW9uIFJBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NCb3R0b20iLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygiZml4ZWRSb3dzQm90dG9tIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IERBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5k'@;
put 'b21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTthLnN0eWxlLnRvcD0iIjtsZXQgZD0wO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxoJiYidmVydGlj'@;
put 'YWwiPT09aD8oZD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpKTooZD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxhLnN0eWxlLmJvdHRvbT1gJHtkfXB4YCk7Y29uc3QgZj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihkKTtyZXR1cm4g'@;
put 'dGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxmfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBm'@;
put 'PTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1MYyhkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9c2V0U2Nyb2xs'@;
put 'UG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2xldCBkPSExO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09YT8oYS5zY3JvbGxUbyhtZyhhKSxsKSxkPSEwKTp0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9s'@;
put 'bFRvcCE9PWwmJih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcD1sLGQ9ITApLGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdHt3dFRhYmxlOmQsd3RTZXR0'@;
put 'aW5nczpofT10aGlzLndvdCxmPWguZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpO2xldCBfPWwsVD0wO2Zvcig7XzxhOyl7Y29uc3QgVz1kLmdldFJvd0hlaWdodChfKTtUKz12b2lkIDA9PT1XP2Y6VyxfKz0xfXJldHVybiBUfWFkanVzdEVsZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCh0aGlzLm5lZWRGdWxsUmVuZGVyfHxsKSYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXpl'@;
put 'KCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3MsZj1MYyhkKSxUPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHls'@;
put 'ZSxXPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8Imhvcml6b250YWwiPT09Vyl7bGV0IHBlPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJhclJpZ2h0'@;
put 'JiYocGUtPWYpLHBlPU1hdGgubWluKHBlLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksVC53aWR0aD1gJHtwZX1weGB9ZWxzZSBULndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9VC53aWR0aDtsZXQgaWU9YWwodGhpcy5jbG9uZS53dFRhYmxlLlRB'@;
put 'QkxFKTt0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChpZT0wKSxULmhlaWdodD1gJHtpZX1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGU7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRo'@;
put 'aXMuaGlkZXIuc3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYo'@;
put 'Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lm'@;
put 'KDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5'@;
put 'T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxh'@;
put 'dG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2xldCBkPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtjb25zdCBmPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90'@;
put 'aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXI7bGV0IF89MDthJiZmLm9mZnNldEhlaWdodCE9PWYuY2xpZW50SGVpZ2h0JiYoXz1MYyh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KGQrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxkLT10aGlz'@;
put 'LndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCksZCs9MSk6ZCs9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGwpLGQrPV8sdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJsZVBhcmVudE9mZnNldCgp'@;
put 'e3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIG55KHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1l'@;
put 'bnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRh'@;
put 'aW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBoPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxfPWgtdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksVD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xp'@;
put 'ZW50SGVpZ2h0O2Q9TWF0aC5tYXgodGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS1UK2gsMCksZD5fJiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu'@;
put 'ZygiZml4ZWRSb3dzQm90dG9tIiksZD10aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSE9PWEsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2xldCBmPSExO2lmKChkfHwwPT09YSkmJmgubGVuZ3RoPjApe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5ob2xk'@;
put 'ZXIucGFyZW50Tm9kZSxUPUJvKF8sImlubmVyQm9yZGVyQm90dG9tIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGx8fDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KHBp'@;
put 'KF8sImlubmVyQm9yZGVyQm90dG9tIiksZj0hVCk6KFdvKF8sImlubmVyQm9yZGVyQm90dG9tIiksZj1UKX1yZXR1cm4gZn19Y29uc3QgUXRlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09'@;
put 'PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJlZDty'@;
put 'ZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRS'@;
put 'b3dzUmVuZGVyZWR9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1Zpc2libGV9fTtmaChRdGUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkUm93cyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBlbmU9UXRlLHRu'@;
put 'ZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiAwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPy0xOjB9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFJlbmRlcmVk'@;
put 'Q29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoInRvdGFsQ29sdW1ucyIpO3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxjKX0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9fTtmaCh0bmUsIk1J'@;
put 'WElOX05BTUUiLCJzdGlja3lDb2x1bW5zU3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgR049dG5lO2NsYXNzICROIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCx3Zyl9fVRhKCROLGVuZSksVGEoJE4sR04pO2NvbnN0IEhBZT0k'@;
put 'TjtjbGFzcyBOQWUgZXh0ZW5kcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsd2csZCxoKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgSEFlKC4u'@;
put 'LmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Q7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCFs'@;
put 'LmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZj0wO3RoaXMu'@;
put 'dHJpbW1pbmdDb250YWluZXIhPT1hfHxoJiYiaG9yaXpvbnRhbCI9PT1oPyhmPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxzeShkKSk6KGY9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSxvayhkLGAke2Z9cHhgLCIwcHgiKSk7Y29uc3QgXz10aGlzLmFkanVz'@;
put 'dEhlYWRlckJvcmRlcnNQb3NpdGlvbihmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxffXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztsZXQgZD0hMTtyZXR1cm4gdGhpcy5pc1J0bCgpJiYobD0tbCksdGhpcy5tYWlu'@;
put 'VGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWEmJmEuc2Nyb2xsWCE9PWw/KGEuc2Nyb2xsVG8obCx0NyhhKSksZD0hMCk6dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0IT09bCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdD1sLGQ9'@;
put 'ITApLGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxWZXJ0aWNhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KWYr'@;
put 'PXRoaXMud290Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoaCl8fGQsaCs9MTtyZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdD'@;
put 'b250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8bCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxy'@;
put 'b290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1MYyhhKSxfPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxUPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09ZHx8InZl'@;
put 'cnRpY2FsIj09PVQpe2xldCBpZT10aGlzLndvdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpO3RoaXMud290Lnd0T3ZlcmxheXMuaGFzU2Nyb2xsYmFyQm90dG9tJiYoaWUtPWgpLGllPU1hdGgubWluKGllLGwud3RSb290RWxlbWVudC5zY3JvbGxIZWlnaHQpLF8uaGVpZ2h0PWAk'@;
put 'e2llfXB4YH1lbHNlIF8uaGVpZ2h0PSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUuaGVpZ2h0PV8uaGVpZ2h0O2NvbnN0IFc9d2EodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtfLndpZHRoPWAke1d9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXt2YXIgbDtjb25zdHto'@;
put 'b2xkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlLHtzZWxlY3Rpb25zOmR9PXRoaXMud290LGg9dGhpcy5mYWNhZGVHZXR0ZXIoKSxmPU1hdGguYWJzKG51bGwhPT0obD1kPy5nZXRDZWxsKCkuZ2V0Qm9yZGVyKGgpLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0KSYmdm9pZCAwIT09bD9sOjApO3Ro'@;
put 'aXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS5oZWlnaHQ9dGhpcy5oaWRlci5zdHlsZS5oZWlnaHQsYS5zdHlsZS5oZWlnaHQ9YS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCxhLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGEucGFyZW50Tm9kZS5zdHlsZS53aWR0aCwxMCkrZn1weGB9YXBw'@;
put 'bHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGE9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0'@;
put 'aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGVbYV09YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSBjb2x1bW5zUmVuZGVyQ2FsY3Vs'@;
put 'YXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGVbYV09IjAifXRoaXMuaXNSdGwoKT90aGlzLnNwcmVhZGVyLnN0eWxlLmxlZnQ9IiI6dGhpcy5zcHJlYWRlci5zdHlsZS5yaWdodD0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZz'@;
put 'ZXQoKXt0aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIuc3R5bGUudG9wPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQ'@;
put 'b3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQgZD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29uc3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCBfPTA7cmV0dXJuIGEmJnRoaXMud290'@;
put 'Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkmJihhPSExKSxhJiZmLm9mZnNldFdpZHRoIT09Zi5jbGllbnRXaWR0aCYmKF89TGModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhkKz10aGlzLnN1bUNlbGxT'@;
put 'aXplcygwLGwrMSksZC09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGwpLGQrPV8sdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJs'@;
put 'ZVBhcmVudE9mZnNldCgpe2xldCBhPTA7cmV0dXJuIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKGE9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQu'@;
put 'bGVmdCksYX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyhpayh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3Ms'@;
put 'YT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtyZXR1cm4gdGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGEmJiJob3Jpem9udGFsIj09PWF8fChkPXRoaXMuaXNSdGwoKT9NYXRoLmFicyhNYXRoLm1pbih0aGlzLmdldFRhYmxlUGFyZW50'@;
put 'T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLDApKTpNYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFs'@;
put 'V2lkdGgoKSYmKGQ9MCkpLGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi'@;
put 'Zml4ZWRDb2x1bW5zU3RhcnQiKTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/V28oYSwiZW1wdHlSb3dzIik6cGkoYSwiZW1wdHlSb3dzIik7bGV0IF89ITE7aWYoaCYmIWQubGVuZ3RoKXBpKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0'@;
put 'Iik7ZWxzZSBpZighaCYmZC5sZW5ndGgpe2NvbnN0IFQ9Qm8oYSwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2w/KHBpKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksXz0hVCk6KFdvKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0'@;
put 'IiksXz1UKX1yZXR1cm4gX319Y2xhc3MgcU4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLENnKX19VGEocU4sWXRlKSxUYShxTixHTik7Y29uc3QgVkFlPXFOO2Z1bmN0aW9uIG5uZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gQkFlKGMpe3ZhciBsPWZ1'@;
put 'bmN0aW9uIGpBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHpBZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXtzdXBlcihsLGEsQ2csZCxoKSxubmUodGhpcywidG9wT3Zl'@;
put 'cmxheSIsdm9pZCAwKSxubmUodGhpcywiaW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLHRoaXMudG9wT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PV99Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylh'@;
put 'W2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IFZBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVT'@;
put 'dGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dGhpcy50'@;
put 'cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz9vayhsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpKyJweCIsYCR7dGhpcy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKX1weGApOnN5'@;
put 'KGwpO2xldCBhPWFsKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgZD13YSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChhPTApLGwuc3R5bGUuaGVpZ2h0PWAke2F9cHhgLGwuc3R5bGUud2lkdGg9YCR7'@;
put 'ZH1weGAsITF9fWNsYXNzIEtOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxacCl9fVRhKEtOLEp0ZSksVGEoS04sR04pO2NvbnN0IFVBZT1LTjtjbGFzcyBaQWUgZXh0ZW5kcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIobCxhLFpwLGQs'@;
put 'aCksdGhpcy5ib3R0b21PdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9X31jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgVUFlKC4uLmEpfXNob3VsZEJl'@;
put 'UmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3dv'@;
put 'dDpsfT10aGlzO2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhbC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2lmKGEuc3R5bGUudG9wPSIiLHRoaXMudHJpbW1pbmdDb250YWlu'@;
put 'ZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpe2NvbnN0IGY9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLF89dGhpcy5ib3R0b21PdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTthLnN0eWxlW3RoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7'@;
put 'Zn1weGAsYS5zdHlsZS5ib3R0b209YCR7X31weGB9ZWxzZSBzeShhKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7bGV0IGQ9YWwodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBoPXdhKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFz'@;
put 'RGVmaW5lZFNpemUoKXx8KGQ9MCksYS5zdHlsZS5oZWlnaHQ9YCR7ZH1weGAsYS5zdHlsZS53aWR0aD1gJHtofXB4YCwhMX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxo'@;
put 'PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYo'@;
put 'Zis9TGMoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfX1mdW5jdGlvbiBaZihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gWUFlKGMpe3ZhciBsPWZ1bmN0aW9uIFdBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt'@;
put 'aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci'@;
put 'PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfWZ1bmN0aW9uIHJuZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gcUFlKGMpe3ZhciBsPWZ1bmN0aW9uIEtBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk'@;
put 'PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi'@;
put 'c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFhBZXtjb25zdHJ1Y3Rv'@;
put 'cihsKXtybmUodGhpcywic2V0dGluZ3MiLHt9KSxybmUodGhpcywiZGVmYXVsdHMiLE9iamVjdC5mcmVlemUodGhpcy5nZXREZWZhdWx0cygpKSksZHModGhpcy5kZWZhdWx0cywoYSxkKT0+e2lmKHZvaWQgMCE9PWxbZF0pdGhpcy5zZXR0aW5nc1tkXT1sW2RdO2Vsc2V7aWYodm9pZCAwPT09'@;
put 'YSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtkfSIgd2FzIG5vdCBwcm92aWRlZGApO3RoaXMuc2V0dGluZ3NbZF09YX19KX1nZXREZWZhdWx0cygpe3JldHVybntmYWNhZGU6dm9pZCAwLHRhYmxlOnZvaWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAsZXh0ZXJuYWxS'@;
put 'b3dDYWxjdWxhdG9yOiExLHN0cmV0Y2hIOiJub25lIixjdXJyZW50Um93Q2xhc3NOYW1lOm51bGwsY3VycmVudENvbHVtbkNsYXNzTmFtZTpudWxsLHByZXZlbnRPdmVyZmxvdzooKT0+ITEscHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZyZWV6ZU92ZXJsYXlzOiExLGZpeGVkQ29sdW1u'@;
put 'c1N0YXJ0OjAsZml4ZWRSb3dzVG9wOjAsZml4ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik+MHx8dGhpcy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVu'@;
put 'ZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKT4wfHx0aGlzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpPjAsbWlu'@;
put 'U3BhcmVSb3dzOjAscm93SGVhZGVyczooKT0+W10sY29sdW1uSGVhZGVyczooKT0+W10sdG90YWxSb3dzOnZvaWQgMCx0b3RhbENvbHVtbnM6dm9pZCAwLGNlbGxSZW5kZXJlcjoobCxhLGQpPT57anAoZCx0aGlzLmdldFNldHRpbmcoImRhdGEiLGwsYSk/PyIiKX0sY29sdW1uV2lkdGgoKXt9'@;
put 'LHJvd0hlaWdodCgpe30sZGVmYXVsdFJvd0hlaWdodDoyMyxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVy'@;
put 'cmlkZTpudWxsLG9uQ2VsbE1vdXNlRG93bjpudWxsLG9uQ2VsbENvbnRleHRNZW51Om51bGwsb25DZWxsTW91c2VPdmVyOm51bGwsb25DZWxsTW91c2VPdXQ6bnVsbCxvbkNlbGxNb3VzZVVwOm51bGwsb25DZWxsRGJsQ2xpY2s6bnVsbCxvbkNlbGxDb3JuZXJNb3VzZURvd246bnVsbCxvbkNl'@;
put 'bGxDb3JuZXJEYmxDbGljazpudWxsLGJlZm9yZURyYXc6bnVsbCxvbkRyYXc6bnVsbCxvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOm51bGwsb25BZnRlckRyYXdTZWxlY3Rpb246bnVsbCxvbkJlZm9yZURyYXdCb3JkZXJzOm51bGwsb25TY3JvbGxWZXJ0aWNhbGx5Om51bGwsb25TY3Jv'@;
put 'bGxIb3Jpem9udGFsbHk6bnVsbCxvbkJlZm9yZVRvdWNoU2Nyb2xsOm51bGwsb25BZnRlck1vbWVudHVtU2Nyb2xsOm51bGwsb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6bD0+bCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25C'@;
put 'ZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6bD0+bCxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjpsPT5sLG9uV2luZG93UmVzaXplOm51bGwsb25Db250YWluZXJFbGVtZW50UmVzaXplOm51bGwscmVuZGVyQWxsUm93czohMSxncm91cHM6ITEscm93SGVhZGVyV2lkdGg6bnVs'@;
put 'bCxjb2x1bW5IZWFkZXJIZWlnaHQ6bnVsbCxoZWFkZXJDbGFzc05hbWU6bnVsbCxydGxNb2RlOiExfX11cGRhdGUobCxhKXtyZXR1cm4gdm9pZCAwPT09YT9kcyhsLChkLGgpPT57dGhpcy5zZXR0aW5nc1toXT1kfSk6dGhpcy5zZXR0aW5nc1tsXT1hLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxo'@;
put 'LGYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzW2xdP3RoaXMuc2V0dGluZ3NbbF0oYSxkLGgsZik6dm9pZCAwIT09YSYmQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzW2xdKT90aGlzLnNldHRpbmdzW2xdW2FdOnRoaXMuc2V0dGluZ3NbbF19Z2V0U2V0dGluZ1B1'@;
put 'cmUobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NbbF19aGFzKGwpe3JldHVybiEhdGhpcy5zZXR0aW5nc1tsXX19Y2xhc3MgWE4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLCJtYXN0ZXIiKX1hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl7'@;
put 'Y29uc3QgbD12Zyh0aGlzLnd0Um9vdEVsZW1lbnQpLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7aWYobD09PWEpdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpfHwodGhpcy5ob2xkZXIuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMud3RS'@;
put 'b290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIpO2Vsc2V7Y29uc3QgZD1sLnBhcmVudEVsZW1lbnQsaD1uNyhsLCJoZWlnaHQiLGEpLGY9bjcobCwib3ZlcmZsb3ciLGEpLF89dGhpcy5ob2xkZXIuc3R5bGUse3Njcm9sbFdpZHRoOlQsc2Nyb2xsSGVpZ2h0Old9PWw7bGV0e3dp'@;
put 'ZHRoOmllLGhlaWdodDpwZX09bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihkJiZbImF1dG8iLCJoaWRkZW4iLCJzY3JvbGwiXS5pbmNsdWRlcyhmKSl7Y29uc3QgRWU9bC5jbG9uZU5vZGUoITEpO0VlLnN0eWxlLm92ZXJmbG93PSJhdXRvIixFZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1'@;
put 'dGUiLGwubmV4dEVsZW1lbnRTaWJsaW5nP2QuaW5zZXJ0QmVmb3JlKEVlLGwubmV4dEVsZW1lbnRTaWJsaW5nKTpkLmFwcGVuZENoaWxkKEVlKTtjb25zdCBaZT1wYXJzZUludCh6cChFZSxhKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQoRWUpLDA9PT1aZSYmKHBlPTApfXBlPU1hdGgubWlu'@;
put 'KHBlLFcpLF8uaGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke3BlfXB4YCxpZT1NYXRoLm1pbihpZSxUKSxfLndpZHRoPWAke2llfXB4YCxfLm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWlnaHQ9ImF1dG8iPT09Xy5oZWlnaHR8fHBlPjAsdGhpcy5oYXNUYWJsZVdpZHRoPWllPjB9dGhp'@;
put 'cy5pc1RhYmxlVmlzaWJsZT1lNyh0aGlzLlRBQkxFKX1tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZD0ibWFzdGVyIixmPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIp'@;
put 'Lmxlbmd0aDtpZihmJiYhYS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdKXtjb25zdCBUPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxXPXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IGllPTA7aWU8ZjtpZSsrKWZvcihsZXQgcGU9LTEq'@;
put 'VDtwZTxXO3BlKyspdGhpcy5tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIocGUpO2EuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXT0hMH19fVRhKFhOLGVuZSksVGEoWE4sTk4pO2NvbnN0IEpBZT1YTjtGKDUxMDEpO2NvbnN0IGluZT1uZXcgV2Vha01hcDtjbGFzcyBKTntz'@;
put 'dGF0aWMgZ2V0IERFRkFVTFRfSEVJR0hUKCl7cmV0dXJuIDIzfWNvbnN0cnVjdG9yKCl7bGV0e3ZpZXdwb3J0U2l6ZTpsLHNjcm9sbE9mZnNldDphLHRvdGFsSXRlbXM6ZCxpdGVtU2l6ZUZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLHNjcm9sbGJhckhlaWdodDpUfT1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307aW5lLnNldCh0aGlzLHt2aWV3cG9ydEhlaWdodDpsLHNjcm9sbE9mZnNldDphLHRvdGFsUm93czpkLHJvd0hlaWdodEZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLGhvcml6b250'@;
put 'YWxTY3JvbGxiYXJIZWlnaHQ6VH0pLHRoaXMuY291bnQ9MCx0aGlzLnN0YXJ0Um93PW51bGwsdGhpcy5lbmRSb3c9bnVsbCx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9ITEsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXtjb25z'@;
put 'dCBsPWluZS5nZXQodGhpcyksYT1sLmNhbGN1bGF0aW9uVHlwZSxkPWwub3ZlcnJpZGVGbixoPWwucm93SGVpZ2h0Rm4sZj1sLnNjcm9sbE9mZnNldCxfPU1hdGgubWF4KGwuc2Nyb2xsT2Zmc2V0LDApLFQ9bC50b3RhbFJvd3MsVz1sLnZpZXdwb3J0SGVpZ2h0LGllPWwuaG9yaXpvbnRhbFNj'@;
put 'cm9sbGJhckhlaWdodHx8MDtsZXQgcGU9MCx3ZT0hMDtjb25zdCBFZT1bXTtsZXQgWmUsaXQ9MCxldD0wO2ZvcihsZXQgSnQ9MDtKdDxUO0p0KyspaWYoWmU9aChKdCksaXNOYU4oWmUpJiYoWmU9Sk4uREVGQVVMVF9IRUlHSFQpLHBlPD1fJiYyIT09YSYmKHRoaXMuc3RhcnRSb3c9SnQsaXQ9'@;
put 'WmUpLHBlPj1fJiZwZSsoMj09PWE/WmU6MCk8PV8rVy1pZSYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1KdCxpdD1aZSksdGhpcy5lbmRSb3c9SnQpLEVlLnB1c2gocGUpLHBlKz1aZSxldD1aZSwyIT09YSYmKHRoaXMuZW5kUm93PUp0KSxwZT49XytXLWllKXt3ZT0h'@;
put 'MTticmVha31jb25zdCBTdD0yPT09YT8wOmV0O2lmKHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGYrVy1pZTwoMj09PWE/aXQ6MCl8fGY+RWUuYXQoLTEpK1N0KSx0aGlzLmVuZFJvdz09PVQtMSYmd2UpZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFy'@;
put 'dFJvdz4wOyl7Y29uc3QgSnQ9RWVbdGhpcy5lbmRSb3ddK1plLUVlW3RoaXMuc3RhcnRSb3ctMV07aWYoKEp0PD1XLWllfHwyIT09YSkmJih0aGlzLnN0YXJ0Um93LT0xKSxKdD49Vy1pZSlicmVha30xPT09YSYmbnVsbCE9PXRoaXMuc3RhcnRSb3cmJmQmJmQodGhpcyksdGhpcy5zdGFydFBv'@;
put 'c2l0aW9uPUVlW3RoaXMuc3RhcnRSb3ddLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsKSxUPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9VC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5z'@;
put 'dGFydFJvdysxKX19Y29uc3Qgb25lPUpOLGQ3PW5ldyBXZWFrTWFwO2NsYXNzIFFOe3N0YXRpYyBnZXQgREVGQVVMVF9XSURUSCgpe3JldHVybiA1MH1jb25zdHJ1Y3Rvcigpe2xldHt2aWV3cG9ydFNpemU6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbEl0ZW1zOmQsaXRlbVNpemVGbjpoLG92ZXJy'@;
put 'aWRlRm46ZixjYWxjdWxhdGlvblR5cGU6XyxzdHJldGNoTW9kZTpULHN0cmV0Y2hpbmdJdGVtV2lkdGhGbjpXPShwZT0+cGUpLGlubGluZVN0YXJ0T2Zmc2V0OmllfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZDcuc2V0KHRoaXMs'@;
put 'e3ZpZXdwb3J0V2lkdGg6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbENvbHVtbnM6ZCxjb2x1bW5XaWR0aEZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLHN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuOlcsaW5saW5lU3RhcnRPZmZzZXQ6aWV9KSx0aGlzLmNvdW50PTAsdGhpcy5zdGFy'@;
put 'dENvbHVtbj1udWxsLHRoaXMuZW5kQ29sdW1uPW51bGwsdGhpcy5zdGFydFBvc2l0aW9uPW51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSExLHRoaXMuc3RyZXRjaEFsbFJhdGlvPTAsdGhpcy5zdHJldGNoTGFzdFdpZHRoPTAsdGhpcy5zdHJldGNoPVQsdGhpcy50b3Rh'@;
put 'bFRhcmdldFdpZHRoPTAsdGhpcy5uZWVkVmVyaWZ5TGFzdENvbHVtbldpZHRoPSEwLHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aD1bXSx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe2xldCBsPTAsYT0hMDtjb25zdCBkPVtdO2xldCBoLGY9MCxfPTA7Y29uc3QgVD1kNy5nZXQodGhp'@;
put 'cyksVz1ULmNhbGN1bGF0aW9uVHlwZSxpZT1ULm92ZXJyaWRlRm4scGU9VC5zY3JvbGxPZmZzZXQsd2U9TWF0aC5tYXgoVC5zY3JvbGxPZmZzZXQsMCksRWU9VC50b3RhbENvbHVtbnMsWmU9VC52aWV3cG9ydFdpZHRoLGl0PXdlPjA/WmUrMTpaZTtmb3IobGV0IFN0PTA7U3Q8RWU7U3QrKylp'@;
put 'ZihoPXRoaXMuX2dldENvbHVtbldpZHRoKFN0KSxsPD13ZSYmMiE9PVcmJih0aGlzLnN0YXJ0Q29sdW1uPVN0LGY9aCksbD49d2UmJmwrKDI9PT1XP2g6MCk8PXdlK2l0JiYobnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49U3QsZj1oKSx0aGlzLmVuZENvbHVtbj1T'@;
put 'dCksZC5wdXNoKGwpLGwrPWgsXz1oLDIhPT1XJiYodGhpcy5lbmRDb2x1bW49U3QpLGw+PXdlK1plKXthPSExO2JyZWFrfWNvbnN0IHl0PTI9PT1XPzA6XyxFdD0yPT09Vz9mOjA7aWYodGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEocGUrWmUtaXQ8LTEqVC5pbmxpbmVTdGFy'@;
put 'dE9mZnNldHx8cGU+ZC5hdCgtMSkreXR8fC0xKlQuc2Nyb2xsT2Zmc2V0LVQudmlld3BvcnRXaWR0aD4tMSpFdCksdGhpcy5lbmRDb2x1bW49PT1FZS0xJiZhKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IFN0PWRbdGhpcy5l'@;
put 'bmRDb2x1bW5dK2gtZFt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKChTdDw9WmV8fDIhPT1XKSYmKHRoaXMuc3RhcnRDb2x1bW4tPTEpLFN0PlplKWJyZWFrfTE9PT1XJiZudWxsIT09dGhpcy5zdGFydENvbHVtbiYmaWUmJmllKHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbj1kW3RoaXMuc3RhcnRD'@;
put 'b2x1bW5dLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsKSxFZTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPUVlLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0'@;
put 'Q29sdW1uKzEpfXJlZnJlc2hTdHJldGNoaW5nKGwpe2lmKCJub25lIj09PXRoaXMuc3RyZXRjaClyZXR1cm47bGV0IGE9bDt0aGlzLnRvdGFsVGFyZ2V0V2lkdGg9YTtjb25zdCBkPWQ3LmdldCh0aGlzKSxoPWQudG90YWxDb2x1bW5zO2xldCBmPTA7Zm9yKGxldCBUPTA7VDxoO1QrKyl7Y29u'@;
put 'c3QgVz10aGlzLl9nZXRDb2x1bW5XaWR0aChUKSxpZT1kLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKHZvaWQgMCxUKTsibnVtYmVyIj09dHlwZW9mIGllP2EtPWllOmYrPVd9Y29uc3QgXz1hLWY7aWYoImFsbCI9PT10aGlzLnN0cmV0Y2gmJl8+MCl0aGlzLnN0cmV0Y2hBbGxSYXRpbz1hL2Ys'@;
put 'dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoPVtdLHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMDtlbHNlIGlmKCJsYXN0Ij09PXRoaXMuc3RyZXRjaCYmYSE9PTEvMCl7Y29uc3QgVD10aGlzLl9nZXRDb2x1bW5XaWR0aChoLTEpLFc9XytUO3RoaXMuc3RyZXRjaExhc3RXaWR0'@;
put 'aD1XPj0wP1c6VH19Z2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCxhKXtsZXQgZD1udWxsO3JldHVybiJhbGwiPT09dGhpcy5zdHJldGNoJiYwIT09dGhpcy5zdHJldGNoQWxsUmF0aW8/ZD10aGlzLl9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aChsLGEpOiJsYXN0Ij09PXRoaXMuc3RyZXRj'@;
put 'aCYmMCE9PXRoaXMuc3RyZXRjaExhc3RXaWR0aCYmKGQ9dGhpcy5fZ2V0U3RyZXRjaGVkTGFzdENvbHVtbldpZHRoKGwpKSxkfV9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aChsLGEpe2xldCBkPTA7Y29uc3QgaD1kNy5nZXQodGhpcyksZj1oLnRvdGFsQ29sdW1ucztpZighdGhpcy5zdHJl'@;
put 'dGNoQWxsQ29sdW1uc1dpZHRoW2xdKXtjb25zdCBfPU1hdGgucm91bmQoYSp0aGlzLnN0cmV0Y2hBbGxSYXRpbyksVD1oLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKF8sbCk7dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdPXZvaWQgMD09PVQ/Xzppc05hTihUKT90aGlzLl9nZXRDb2x1'@;
put 'bW5XaWR0aChsKTpUfWlmKHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGg9PT1mJiZ0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGgpe3RoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMTtmb3IobGV0IF89MDtfPHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5s'@;
put 'ZW5ndGg7XysrKWQrPXRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtfXTtkIT09dGhpcy50b3RhbFRhcmdldFdpZHRoJiYodGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW3RoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGgtMV0rPXRoaXMudG90YWxUYXJnZXRXaWR0aC1kKX1y'@;
put 'ZXR1cm4gdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdfV9nZXRTdHJldGNoZWRMYXN0Q29sdW1uV2lkdGgobCl7cmV0dXJuIGw9PT1kNy5nZXQodGhpcykudG90YWxDb2x1bW5zLTE/dGhpcy5zdHJldGNoTGFzdFdpZHRoOm51bGx9X2dldENvbHVtbldpZHRoKGwpe2xldCBhPWQ3Lmdl'@;
put 'dCh0aGlzKS5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKSYmKGE9UU4uREVGQVVMVF9XSURUSCksYX19Y29uc3QgZVY9UU47Y2xhc3MgdFRlIGV4dGVuZHMgWU57Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG5ldyBYQWUoYSkpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy53dFRhYmxlPW5ldyBKQWUodGhpcy5nZXRUYWJsZURhbygpLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1uZXcgY2xhc3MgUUFle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNz'@;
put 'T2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJz'@;
put 'aXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLmNvbnRhaW5lcldpZHRoPU5hTix0aGlzLnJvd0hlYWRlcldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhp'@;
put 'cy5ldmVudE1hbmFnZXI9aCx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdywicmVzaXplIiwoKT0+e3RoaXMuY2xpZW50SGVpZ2h0PXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9KX1nZXRXb3Jrc3BhY2VIZWlnaHQoKXtjb25z'@;
put 'dCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGQ9MDtyZXR1cm4gZD1hPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ6YWwo'@;
put 'YSk+MCYmYS5jbGllbnRIZWlnaHQ+MD9hLmNsaWVudEhlaWdodDoxLzAsZH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyLGY9YS5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgsXz1sLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLFQ9bC5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSxXPWwuZ2V0U2V0dGluZygicnRsTW9kZSIpLGllPXRoaXMud3RU'@;
put 'YWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx3ZT1mLShXP2llLnJpZ2h0LWY6aWUubGVmdCk7bGV0IEVlLFplO2lmKFQpcmV0dXJuIHdhKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50KTtpZihFZT1sLmdldFNldHRpbmcoImZyZWV6ZU92ZXJsYXlzIik/TWF0aC5taW4od2Us'@;
put 'Zik6TWF0aC5taW4odGhpcy5nZXRDb250YWluZXJGaWxsV2lkdGgoKSx3ZSxmKSxoPT09ZCYmXz4wJiZ0aGlzLnN1bUNvbHVtbldpZHRocygwLF8tMSk+RWUpcmV0dXJuIGEuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2lmKGghPT1kJiYoWmU9bjcodGhpcy5kYXRhQWNjZXNzT2JqZWN0'@;
put 'LmlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyLCJvdmVyZmxvdyIsZCksInNjcm9sbCI9PT1aZXx8ImhpZGRlbiI9PT1aZXx8ImF1dG8iPT09WmUpKXJldHVybiBNYXRoLm1heChFZSxoLmNsaWVudFdpZHRoKTtjb25zdCBpdD1sLmdldFNldHRpbmcoInN0cmV0Y2hIIik7cmV0'@;
put 'dXJuIm5vbmUiIT09aXQmJml0P0VlOk1hdGgubWF4KEVlLHdhKHRoaXMud3RUYWJsZS5UQUJMRSkpfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7cmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRIZWlnaHQ+dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX1oYXNIb3Jpem9udGFsU2Nyb2xsKCl7'@;
put 'cmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRXaWR0aD50aGlzLmdldFdvcmtzcGFjZVdpZHRoKCl9c3VtQ29sdW1uV2lkdGhzKGwsYSl7bGV0IGQ9MCxoPWw7Zm9yKDtoPGE7KWQrPXRoaXMud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKSxoKz0xO3JldHVybiBkfWdldENvbnRhaW5l'@;
put 'ckZpbGxXaWR0aCgpe2lmKHRoaXMuY29udGFpbmVyV2lkdGgpcmV0dXJuIHRoaXMuY29udGFpbmVyV2lkdGg7Y29uc3QgbD10aGlzLnd0VGFibGUuaG9sZGVyLGE9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS53aWR0aD0iMTAwJSIs'@;
put 'YS5zdHlsZS5oZWlnaHQ9IjFweCIsbC5hcHBlbmRDaGlsZChhKTtjb25zdCBkPWEub2Zmc2V0V2lkdGg7cmV0dXJuIHRoaXMuY29udGFpbmVyV2lkdGg9ZCxsLnJlbW92ZUNoaWxkKGEpLGR9Z2V0V29ya3NwYWNlT2Zmc2V0KCl7cmV0dXJuIEtsKHRoaXMud3RUYWJsZS5UQUJMRSl9Z2V0Q29s'@;
put 'dW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoP2lzTmFOKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0KSYmKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PWFsKHRoaXMud3RUYWJsZS5USEVBRCkpOnRoaXMuY29s'@;
put 'dW1uSGVhZGVySGVpZ2h0PTAsdGhpcy5jb2x1bW5IZWFkZXJIZWlnaHR9Z2V0Vmlld3BvcnRIZWlnaHQoKXtsZXQgbD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpO2lmKGw9PT0xLzApcmV0dXJuIGw7Y29uc3QgYT10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpO3JldHVybiBhPjAmJihs'@;
put 'LT1hKSxsfWdldFJvd0hlYWRlcldpZHRoKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKSxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIik7aWYobCl7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgZD0wLGg9'@;
put 'YS5sZW5ndGg7ZDxoO2QrKyl0aGlzLnJvd0hlYWRlcldpZHRoKz1sW2RdfHxsfWlmKGlzTmFOKHRoaXMucm93SGVhZGVyV2lkdGgpKWlmKGEubGVuZ3RoKXtsZXQgZD10aGlzLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvcigiVEgiKTt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCBo'@;
put 'PTAsZj1hLmxlbmd0aDtoPGY7aCsrKWQ/KHRoaXMucm93SGVhZGVyV2lkdGgrPXdhKGQpLGQ9ZC5uZXh0U2libGluZyk6dGhpcy5yb3dIZWFkZXJXaWR0aCs9NTB9ZWxzZSB0aGlzLnJvd0hlYWRlcldpZHRoPTA7cmV0dXJuIHRoaXMucm93SGVhZGVyV2lkdGg9dGhpcy53dFNldHRpbmdzLmdl'@;
put 'dFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHRoaXMucm93SGVhZGVyV2lkdGgpfHx0aGlzLnJvd0hlYWRlcldpZHRoLHRoaXMucm93SGVhZGVyV2lkdGh9Z2V0Vmlld3BvcnRXaWR0aCgpe2NvbnN0IGw9dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpO2lmKGw9PT0xLzApcmV0dXJu'@;
put 'IGw7Y29uc3QgYT10aGlzLmdldFJvd0hlYWRlcldpZHRoKCk7cmV0dXJuIGE+MD9sLWE6bH1jcmVhdGVSb3dzQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxl'@;
put 'OmR9PXRoaXM7bGV0IGgsZixfO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOLGg9YS5nZXRTZXR0aW5nKCJyZW5kZXJBbGxSb3dzIikmJjE9PT1sPzEvMDp0aGlzLmdldFZpZXdwb3J0SGVpZ2h0KCk7bGV0IFQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFNjcm9sbFBvc2l0aW9uLXRoaXMuZGF0'@;
put 'YUFjY2Vzc09iamVjdC50b3BQYXJlbnRPZmZzZXQ7Y29uc3QgVz1hLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGllPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikscGU9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gVyYmVD49MCYmKF89dGhpcy5kYXRhQWNjZXNz'@;
put 'T2JqZWN0LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsVyksVCs9XyxoLT1fKSxpZSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUmJihfPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyhwZS1pZSxwZSksaC09XyksZj1k'@;
put 'LmhvbGRlci5jbGllbnRIZWlnaHQ9PT1kLmhvbGRlci5vZmZzZXRIZWlnaHQ/MDpMYyh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCksbmV3IG9uZSh7dmlld3BvcnRTaXplOmgsc2Nyb2xsT2Zmc2V0OlQsdG90YWxJdGVtczphLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGl0ZW1TaXpl'@;
put 'Rm46d2U9PmQuZ2V0Um93SGVpZ2h0KHdlKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiksY2FsY3VsYXRpb25UeXBlOmwsc2Nyb2xsYmFySGVpZ2h0OmZ9KX1jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxlOmR9PXRoaXM7bGV0IGg9dGhpcy5nZXRWaWV3cG9ydFdpZHRoKCksZj1NYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRTY3JvbGxQ'@;
put 'b3NpdGlvbiktdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0O3RoaXMuY29sdW1uSGVhZGVySGVpZ2h0PU5hTjtjb25zdCBfPWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihfJiZmPj0wKXtjb25zdCBUPXRoaXMuZGF0YUFjY2Vzc09iamVj'@;
put 'dC5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsXyk7Zis9VCxoLT1UfXJldHVybiBkLmhvbGRlci5jbGllbnRXaWR0aCE9PWQuaG9sZGVyLm9mZnNldFdpZHRoJiYoaC09TGModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxuZXcgZVYoe3ZpZXdwb3J0U2l6ZTpoLHNj'@;
put 'cm9sbE9mZnNldDpmLHRvdGFsSXRlbXM6YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxpdGVtU2l6ZUZuOlQ9PmQuZ2V0Q29sdW1uV2lkdGgoVCksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIpLGNhbGN1bGF0aW9uVHlw'@;
put 'ZTpsLHN0cmV0Y2hNb2RlOmEuZ2V0U2V0dGluZygic3RyZXRjaEgiKSxzdHJldGNoaW5nSXRlbVdpZHRoRm46KFQsVyk9PmEuZ2V0U2V0dGluZygib25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLFQsVyksaW5saW5lU3RhcnRPZmZzZXQ6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGlu'@;
put 'ZVN0YXJ0UGFyZW50T2Zmc2V0fSl9Y3JlYXRlUmVuZGVyQ2FsY3VsYXRvcnMoKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKGEpe2NvbnN0IGQ9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigyKSxoPXRoaXMuY3JlYXRl'@;
put 'Q29sdW1uc0NhbGN1bGF0b3IoMik7dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGQpJiZ0aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQoaCl8fChhPSExKX1yZXR1cm4gYXx8KHRoaXMucm93c1JlbmRlckNhbGN1bGF0'@;
put 'b3I9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigxKSx0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoMSkpLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCxhfWNy'@;
put 'ZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpe3RoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoMiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigyKX1hcmVBbGxQcm9wb3NlZFZpc2libGVS'@;
put 'b3dzQWxyZWFkeVJlbmRlcmVkKGwpe2lmKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTtjb25zdHtzdGFydFJvdzphLGVuZFJvdzpkLGlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI6aH09bDtpZihudWxsPT09YSYmbnVsbD09PWQpcmV0dXJuIWg7Y29uc3R7c3RhcnRS'@;
put 'b3c6ZixlbmRSb3c6X309dGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcjtyZXR1cm4hKGE8Znx8YT09PWYmJmE+MHx8ZD5ffHxkPT09XyYmZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSl9YXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJl'@;
put 'ZChsKXtpZighdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7Y29uc3R7c3RhcnRDb2x1bW46YSxlbmRDb2x1bW46ZCxpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyOmh9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXJldHVybiFoO2NvbnN0e3N0YXJ0Q29sdW1uOmYs'@;
put 'ZW5kQ29sdW1uOl99PXRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I7cmV0dXJuIShhPGZ8fGE9PT1mJiZhPjB8fGQ+X3x8ZD09PV8mJmQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEpfXJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgp'@;
put 'e2RzKHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCwobCxhLGQpPT57ZFthXT12b2lkIDB9KX19KHRoaXMuZ2V0Vmlld3BvcnREYW8oKSx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuc2VsZWN0'@;
put 'aW9ucz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIpLHRoaXMud3RFdmVudD1uZXcgVnRlKGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9ucyksdGhpcy53dE92ZXJsYXlz'@;
put 'PW5ldyBjbGFzcyBHQWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe1pmKHRoaXMsIndvdCIsbnVsbCksWmYodGhpcywidG9wT3ZlcmxheSIsbnVsbCksWmYodGhpcywiYm90dG9tT3ZlcmxheSIsbnVsbCksWmYodGhpcywiaW5saW5lU3RhcnRPdmVybGF5IixudWxsKSxaZih0aGlzLCJ0b3BJ'@;
put 'bmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksWmYodGhpcywiYnJvd3NlckxpbmVIZWlnaHQiLHZvaWQgMCksWmYodGhpcywid3RTZXR0aW5ncyIsbnVsbCksWmYodGhpcywicmVzaXplT2JzZXJ2ZXIi'@;
put 'LG5ldyBSZXNpemVPYnNlcnZlcihwZT0+e3lrKCgpPT57IUFycmF5LmlzQXJyYXkocGUpfHwhcGUubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Db250YWluZXJFbGVtZW50UmVzaXplIil9KX0pKSx0aGlzLndvdD1sLHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuZG9tQmlu'@;
put 'ZGluZ3M9ZCx0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RUYWJsZT1fO2NvbnN0e3Jvb3REb2N1bWVudDpULHJvb3RXaW5kb3c6V309dGhpcy5kb21CaW5kaW5nczt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMuZXZlbnRNYW5hZ2VyPWYsdGhpcy5zY3JvbGxiYXJTaXplPUxjKFQpO2Nv'@;
put 'bnN0IGllPSJoaWRkZW4iPT09Vy5nZXRDb21wdXRlZFN0eWxlKF8ud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9aWU/Xy5ob2xkZXI6cnkoXy5UQUJMRSksdGhpcy5pbml0T3ZlcmxheXMoKSx0aGlz'@;
put 'Lmhhc1Njcm9sbGJhckJvdHRvbT0hMSx0aGlzLmhhc1Njcm9sbGJhclJpZ2h0PSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMua2V5UHJlc3NlZD0hMSx0aGlzLnNwcmVhZGVyTGFzdFNpemU9e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5o'@;
put 'b3Jpem9udGFsU2Nyb2xsaW5nPSExLHRoaXMuaW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHRoaXMubGFzdFNjcm9sbFg9Vy5zY3JvbGxYLHRoaXMubGFzdFNjcm9sbFk9Vy5zY3JvbGxZfWdldE92ZXJsYXlzKCl7Y29uc3QgYT1bdGhpcy50b3BPdmVy'@;
put 'bGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'JiZhcmd1bWVudHNbMF0mJmEucHVzaCh0aGlzLnd0VGFibGUpLGF9aW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3REb2N1bWVudDphfT10aGlzLmRvbUJpbmRpbmdzLGQ9bC5nZXRDb21wdXRlZFN0eWxlKGEuYm9keSksaD1wYXJzZUludChkLmxpbmVIZWln'@;
put 'aHQsMTApLGY9MS4yKnBhcnNlSW50KGQuZm9udFNpemUsMTApO3RoaXMuYnJvd3NlckxpbmVIZWlnaHQ9aHx8Zn1pbml0T3ZlcmxheXMoKXtjb25zdCBsPVt0aGlzLndvdCx0aGlzLmZhY2FkZUdldHRlcix0aGlzLnd0U2V0dGluZ3MsdGhpcy5kb21CaW5kaW5nc107dGhpcy50b3BPdmVybGF5'@;
put 'PW5ldyBBQWUoLi4ubCksdGhpcy5ib3R0b21PdmVybGF5PW5ldyBPQWUoLi4ubCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9bmV3IE5BZSguLi5sKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgekFlKC4uLmwsdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRP'@;
put 'dmVybGF5KSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgWkFlKC4uLmwsdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl7bGV0IGw9dGhpcy50b3BPdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5k'@;
put 'ZXJpbmcoKTtyZXR1cm4gbD10aGlzLmJvdHRvbU92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsLGw9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy50'@;
put 'b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYobD10aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8fGwpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKGw9dGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXku'@;
put 'dXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsKSksbH1yZWZyZXNoQWxsKCl7aWYodGhpcy53b3QuZHJhd24pe2lmKCF0aGlzLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuIHZvaWQgdGhpcy5kZXN0cm95KCk7dGhpcy53b3QuZHJhdyghMCksdGhpcy52ZXJ0aWNhbFNjcm9sbGlu'@;
put 'ZyYmdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcmJnRoaXMudG9wT3ZlcmxheS5vblNjcm9sbCgpLHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExfX1yZWdpc3Rlckxpc3RlbmVycygp'@;
put 'e2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6ZH09dGhpcy50b3BPdmVybGF5LHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpofT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheTt0aGlzLmV2ZW50'@;
put 'TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXlkb3duIix3ZT0+dGhpcy5vbktleURvd24od2UpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXl1cCIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsInZpc2liaWxpdHljaGFuZ2UiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkLCJzY3JvbGwiLHdlPT50aGlzLm9uVGFibGVTY3JvbGwod2UpLHtwYXNzaXZlOiEwfSksZCE9PWgmJnRo'@;
put 'aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwic2Nyb2xsIix3ZT0+dGhpcy5vblRhYmxlU2Nyb2xsKHdlKSx7cGFzc2l2ZTohMH0pO2NvbnN0IGY9YS5kZXZpY2VQaXhlbFJhdGlvJiZhLmRldmljZVBpeGVsUmF0aW8+MSxfPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1hLFQ9'@;
put 'dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRXaGVlbCIpLFc9e3Bhc3NpdmU6X307bGV0IHBlOyhUfHxmfHwhX04oKSkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQsIndoZWVsIix3ZT0+dGhpcy5vbkNsb25l'@;
put 'V2hlZWwod2UsVCksVyksW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLmZvckVhY2god2U9PntpZih3ZSYm'@;
put 'd2UubmVlZEZ1bGxSZW5kZXIpe2NvbnN0e2hvbGRlcjpFZX09d2UuY2xvbmUud3RUYWJsZTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKEVlLCJ3aGVlbCIsWmU9PnRoaXMub25DbG9uZVdoZWVsKFplLFQpLFcpfX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIoYSwicmVzaXplIiwoKT0+e2NsZWFyVGltZW91dChwZSkscGU9c2V0VGltZW91dCgoKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbldpbmRvd1Jlc2l6ZSIpfSwyMDApfSksX3x8dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50'@;
put 'LnBhcmVudEVsZW1lbnQpfWRlcmVnaXN0ZXJMaXN0ZW5lcnMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhckV2ZW50cyghMCl9b25UYWJsZVNjcm9sbChsKXtjb25zdCBhPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxkPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9s'@;
put 'bGFibGVFbGVtZW50LGg9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9bC50YXJnZXQ7dGhpcy5rZXlQcmVzc2VkJiYoaCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoaCl8fGQhPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGQpKXx8dGhp'@;
put 'cy5zeW5jU2Nyb2xsUG9zaXRpb25zKGwpfW9uQ2xvbmVXaGVlbChsLGEpe2NvbnN0e3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9s'@;
put 'bGFibGVFbGVtZW50LF89bC50YXJnZXQsVD1mIT09ZCYmXyE9PWQmJiFfLmNvbnRhaW5zKGYpLFc9aCE9PWQmJl8hPT1kJiYhXy5jb250YWlucyhoKTtpZih0aGlzLmtleVByZXNzZWQmJihUfHxXKSlyZXR1cm47Y29uc3QgaWU9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCk7'@;
put 'KGF8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQhPT1kJiZpZSkmJmwucHJldmVudERlZmF1bHQoKX1vbktleURvd24obCl7dGhpcy5rZXlQcmVzc2VkPW83KGwua2V5Q29kZSwiQVJST1dfVVB8QVJST1dfUklHSFR8QVJST1dfRE9XTnxBUlJPV19MRUZUIil9b25LZXlVcCgpe3RoaXMua2V5UHJl'@;
put 'c3NlZD0hMX10cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCl7bGV0IGE9aXNOYU4obC5kZWx0YVkpPy0xKmwud2hlZWxEZWx0YVk6bC5kZWx0YVksZD1pc05hTihsLmRlbHRhWCk/LTEqbC53aGVlbERlbHRhWDpsLmRlbHRhWDsxPT09bC5kZWx0YU1vZGUmJihkKz1kKnRoaXMuYnJvd3Nl'@;
put 'ckxpbmVIZWlnaHQsYSs9YSp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0KTtjb25zdCBoPXRoaXMuc2Nyb2xsVmVydGljYWxseShhKSxmPXRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGQpO3JldHVybiBofHxmfXNjcm9sbFZlcnRpY2FsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50'@;
put 'LnNjcm9sbFRvcDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3ArPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wfXNjcm9sbEhvcml6b250YWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdDtyZXR1cm4gdGhp'@;
put 'cy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Kz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnR9c3luY1Njcm9sbFBvc2l0aW9ucygpe2lmKHRoaXMuZGVzdHJveWVkKXJldHVybjtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnRv'@;
put 'cE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsZD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcixbaCxmXT1bdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0LHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXTtpZih0aGlzLmhvcml6'@;
put 'b250YWxTY3JvbGxpbmc9YS5zY3JvbGxMZWZ0IT09aHx8dGhpcy5sYXN0U2Nyb2xsWCE9PWwuc2Nyb2xsWCx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPWQuc2Nyb2xsVG9wIT09Znx8dGhpcy5sYXN0U2Nyb2xsWSE9PWwuc2Nyb2xsWSx0aGlzLmxhc3RTY3JvbGxYPWwuc2Nyb2xsWCx0aGlzLmxh'@;
put 'c3RTY3JvbGxZPWwuc2Nyb2xsWSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpe2Euc2Nyb2xsTGVmdD1oO2NvbnN0IF89dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyP3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjpudWxsO18mJihfLnNjcm9sbExlZnQ9'@;
put 'aCl9dGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmKGQuc2Nyb2xsVG9wPWYpLHRoaXMucmVmcmVzaEFsbCgpfXN5bmNTY3JvbGxXaXRoTWFzdGVyKCl7Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQse3Njcm9sbExlZnQ6YSxzY3JvbGxUb3A6ZH09bDt0'@;
put 'aGlzLnRvcE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xs'@;
put 'TGVmdD1hKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcD1kKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl7dGhpcy5kZXJlZ2lzdGVyTGlzdGVuZXJzKCks'@;
put 'dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZU1haW5T'@;
put 'Y3JvbGxhYmxlRWxlbWVudCgpO2NvbnN0e3d0VGFibGU6bH09dGhpcyx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5'@;
put 'VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6cnkobC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRlc3Ryb3koKSx0aGlz'@;
put 'LmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhp'@;
put 'cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaChsKSx0aGlz'@;
put 'LmlubGluZVN0YXJ0T3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJP'@;
put 'dmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKX11cGRhdGVMYXN0U3ByZWFkZXJTaXplKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuc3ByZWFkZXIsYT1sLmNsaWVudFdp'@;
put 'ZHRoLGQ9bC5jbGllbnRIZWlnaHQsaD1hIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxkIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDtyZXR1cm4gaCYmKHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aD1hLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ9ZCksaH1h'@;
put 'ZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0e3d0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3d0VGFibGU6ZH09dGhpcyxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENv'@;
put 'bHVtbnMiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxfPWEuZ2V0Um93SGVhZGVyV2lkdGgoKSxUPWEuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCksVz1kLmhpZGVyLnN0eWxlO2lmKFcud2lkdGg9YCR7Xyt0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxs'@;
put 'U2l6ZXMoMCxoKX1weGAsVy5oZWlnaHQ9YCR7VCt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsZikrMX1weGAsdGhpcy5zY3JvbGxiYXJTaXplPjApe2NvbnN0e3Njcm9sbEhlaWdodDppZSxzY3JvbGxXaWR0aDpwZX09ZC53dFJvb3RFbGVtZW50LHtzY3JvbGxIZWlnaHQ6d2Usc2Ny'@;
put 'b2xsV2lkdGg6RWV9PWQuaG9sZGVyO3RoaXMuaGFzU2Nyb2xsYmFyUmlnaHQ9aWU8d2UsdGhpcy5oYXNTY3JvbGxiYXJCb3R0b209cGU8RWUsdGhpcy5oYXNTY3JvbGxiYXJSaWdodCYmZC5oaWRlci5zY3JvbGxXaWR0aCt0aGlzLnNjcm9sbGJhclNpemU+cGU/dGhpcy5oYXNTY3JvbGxiYXJC'@;
put 'b3R0b209ITA6dGhpcy5oYXNTY3JvbGxiYXJCb3R0b20mJmQuaGlkZXIuc2Nyb2xsSGVpZ2h0K3RoaXMuc2Nyb2xsYmFyU2l6ZT5pZSYmKHRoaXMuaGFzU2Nyb2xsYmFyUmlnaHQ9ITApfXRoaXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUobCksdGhpcy5pbmxpbmVTdGFydE92ZXJs'@;
put 'YXkuYWRqdXN0RWxlbWVudHNTaXplKGwpLHRoaXMuYm90dG9tT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUobCl9YXBwbHlUb0RPTSgpe3RoaXMud3RUYWJsZS5pc1Zpc2libGUoKSYmKHRoaXMudG9wT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlz'@;
put 'LmJvdHRvbU92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFwcGx5VG9ET00oKSl9Z2V0UGFyZW50T3ZlcmxheShsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgZD1udWxsO3JldHVybiBEbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5'@;
put 'LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0saD0+e2gmJmguY2xvbmUmJmguY2xvbmUud3RUYWJsZS5UQUJMRS5jb250YWlucyhsKSYmKGQ9aC5jbG9uZSl9KSxkfXN5bmNPdmVy'@;
put 'bGF5VGFibGVDbGFzc05hbWVzKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuVEFCTEU7RG4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFy'@;
put 'dENvcm5lck92ZXJsYXldLGQ9PntkJiYoZC5jbG9uZS53dFRhYmxlLlRBQkxFLmNsYXNzTmFtZT1sLmNsYXNzTmFtZSl9KX19KHRoaXMsZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGluZ3NB'@;
put 'c0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe2NvbnN0IGE9W10sZD1bXTtkcyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaCxmKT0+e3RoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKGYpLmxlbmd0aCYmZC5wdXNoKGgpLGEucHVzaChoKX0pLFdvKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsYSkscGkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxkKX1nZXRWaWV3cG9ydERhbygpe2NvbnN0IGw9'@;
put 'dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgdG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4g'@;
put 'bC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IHRvcFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCB0b3BQYXJlbnRPZmZzZXQoKXtyZXR1cm4gbC53dE92ZXJs'@;
put 'YXlzLnRvcE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IGlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQoKXtyZXR1'@;
put 'cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRP'@;
put 'dmVybGF5fSxnZXQgYm90dG9tT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheX19fX1jbGFzcyB0Vntjb25zdHJ1Y3RvcihsKXtsIGluc3RhbmNlb2YgWU4/dGhpcy5fd290PWw6dGhpcy5faW5pdEZyb21TZXR0aW5ncyhsKX1faW5pdEZyb21TZXR0aW5ncyhsKXts'@;
put 'LmZhY2FkZT1hPT57Y29uc3QgZD1uZXcgdFYoYSk7cmV0dXJuKCk9PmR9LHRoaXMuX3dvdD1uZXcgdFRlKGwudGFibGUsbCl9Z2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5fd290Lmd1aWR9Z2V0IHJvb3REb2N1bWVudCgpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50'@;
put 'fWdldCByb290V2luZG93KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290V2luZG93fWdldCB3dFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzfWdldCBjbG9uZVNvdXJjZSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVTb3VyY2V9Z2V0IGNsb25lT3Zlcmxh'@;
put 'eSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5fWdldCBzZWxlY3Rpb25zKCl7cmV0dXJuIHRoaXMuX3dvdC5zZWxlY3Rpb25zfWdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC53dFZpZXdwb3J0fWdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIHRoaXMuX3dvdC53dE92ZXJs'@;
put 'YXlzfWdldCB3dFRhYmxlKCl7cmV0dXJuIHRoaXMuX3dvdC53dFRhYmxlfWdldCB3dEV2ZW50KCl7cmV0dXJuIHRoaXMuX3dvdC53dEV2ZW50fWdldCB3dFNjcm9sbCgpe3JldHVybiB0aGlzLl93b3Qud3RTY3JvbGx9Z2V0IGRyYXduKCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3bn1zZXQgZHJh'@;
put 'd24obCl7dGhpcy5fd290LmRyYXduPWx9Z2V0IGRyYXdJbnRlcnJ1cHRlZCgpe3JldHVybiB0aGlzLl93b3QuZHJhd0ludGVycnVwdGVkfXNldCBkcmF3SW50ZXJydXB0ZWQobCl7dGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZD1sfWdldCBsYXN0TW91c2VPdmVyKCl7cmV0dXJuIHRoaXMuX3dv'@;
put 'dC5sYXN0TW91c2VPdmVyfXNldCBsYXN0TW91c2VPdmVyKGwpe3RoaXMuX3dvdC5sYXN0TW91c2VPdmVyPWx9Z2V0IG1vbWVudHVtU2Nyb2xsaW5nKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ31zZXQgbW9tZW50dW1TY3JvbGxpbmcobCl7dGhpcy5fd290Lm1vbWVudHVt'@;
put 'U2Nyb2xsaW5nPWx9Z2V0IHRvdWNoQXBwbGllZCgpe3JldHVybiB0aGlzLl93b3QudG91Y2hBcHBsaWVkfXNldCB0b3VjaEFwcGxpZWQobCl7dGhpcy5fd290LnRvdWNoQXBwbGllZD1sfWdldCBkb21CaW5kaW5ncygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3N9Z2V0IGV2ZW50TGlz'@;
put 'dGVuZXJzKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudExpc3RlbmVyc31zZXQgZXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fd290LmV2ZW50TGlzdGVuZXJzPWx9Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRNYW5hZ2VyfWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1'@;
put 'cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxDb29yZHMobCxhKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbFJhbmdlKGwsYSxkKX1kcmF3KCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzBdJiZhcmd1bWVudHNbMF0pLHRoaXN9Z2V0Q2VsbChsKXtyZXR1cm4gdGhpcy5fd290LmdldENlbGwobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zY3JvbGxWaWV3cG9ydChsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Quc2Ny'@;
put 'b2xsVmlld3BvcnQobCxhLGQsaCxmKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZp'@;
put 'ZXdwb3J0VmVydGljYWxseShsLGEsZCl9Z2V0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGU6Im1hc3RlciJ9ZXhwb3J0U2V0dGlu'@;
put 'Z3NBc0NsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl9dXBkYXRlKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZShsLGEpLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0'@;
put 'aW5ncy5nZXRTZXR0aW5nKGwsYSxkLGgsZil9aGFzU2V0dGluZyhsKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhsKX1kZXN0cm95KCl7dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gc25lKGMpe2xldHtpc1NoaWZ0S2V5OmwsaXNMZWZ0Q2xpY2s6YSxpc1Jp'@;
put 'Z2h0Q2xpY2s6ZCxjb29yZHM6aCxzZWxlY3Rpb246Zixjb250cm9sbGVyOl8sY2VsbENvb3Jkc0ZhY3Rvcnk6VH09Yztjb25zdCBXPWYuaXNTZWxlY3RlZCgpP2YuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGllPWYuaXNTZWxlY3RlZEJ5Q29ybmVyKCkscGU9Zi5pc1NlbGVj'@;
put 'dGVkQnlSb3dIZWFkZXIoKTtpZihsJiZXKWgucm93Pj0wJiZoLmNvbD49MCYmIV8uY2VsbD9mLnNldFJhbmdlRW5kKGgpOihpZXx8cGUpJiZoLnJvdz49MCYmaC5jb2w+PTAmJiFfLmNlbGw/Zi5zZXRSYW5nZUVuZChUKGgucm93LGguY29sKSk6aWUmJmgucm93PDAmJiFfLmNvbHVtbj9mLnNl'@;
put 'dFJhbmdlRW5kKFQoVy50by5yb3csaC5jb2wpKTpwZSYmaC5jb2w8MCYmIV8ucm93P2Yuc2V0UmFuZ2VFbmQoVChoLnJvdyxXLnRvLmNvbCkpOighaWUmJiFwZSYmaC5jb2w8MHx8aWUmJmguY29sPDApJiYhXy5yb3c/Zi5zZWxlY3RSb3dzKE1hdGgubWF4KFcuZnJvbS5yb3csMCksaC5yb3cs'@;
put 'aC5jb2wpOighaWUmJiFwZSYmaC5yb3c8MHx8cGUmJmgucm93PDApJiYhXy5jb2x1bW4mJmYuc2VsZWN0Q29sdW1ucyhNYXRoLm1heChXLmZyb20uY29sLDApLGguY29sLGgucm93KTtlbHNle2NvbnN0IHdlPSFmLmluSW5TZWxlY3Rpb24oaCksRWU9YXx8ZCYmd2U7aC5yb3c8MCYmaC5jb2w+'@;
put 'PTAmJiFfLmNvbHVtbj9FZSYmZi5zZWxlY3RDb2x1bW5zKGguY29sLGguY29sLGgucm93KTpoLmNvbDwwJiZoLnJvdz49MCYmIV8ucm93P0VlJiZmLnNlbGVjdFJvd3MoaC5yb3csaC5yb3csaC5jb2wpOmguY29sPj0wJiZoLnJvdz49MCYmIV8uY2VsbD9FZSYmZi5zZXRSYW5nZVN0YXJ0KGgp'@;
put 'OmguY29sPDAmJmgucm93PDAmJmYuc2VsZWN0QWxsKCEwLCEwKX19Y29uc3QgclRlPW5ldyBNYXAoW1sibW91c2Vkb3duIixzbmVdLFsibW91c2VvdmVyIixmdW5jdGlvbiBuVGUoYyl7bGV0e2lzTGVmdENsaWNrOmwsY29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29y'@;
put 'ZHNGYWN0b3J5OmZ9PWM7aWYoIWwpcmV0dXJuO2NvbnN0IF89ZC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxUPWQuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksVz1kLnRhYmxlUHJvcHMuY291bnRDb2xzKCksaWU9ZC50YWJsZVByb3BzLmNvdW50Um93cygpO1QmJiFoLmNvbHVtbj9kLnNl'@;
put 'dFJhbmdlRW5kKGYoaWUtMSxhLmNvbCkpOl8mJiFoLnJvdz9kLnNldFJhbmdlRW5kKGYoYS5yb3csVy0xKSk6aC5jZWxsfHxkLnNldFJhbmdlRW5kKGEpfV0sWyJ0b3VjaHN0YXJ0IixzbmVdXSk7ZnVuY3Rpb24gYW5lKGMsbCl7bGV0e2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6'@;
put 'aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1sO3JUZS5nZXQoYy50eXBlKSh7Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmYsaXNTaGlmdEtleTpjLnNoaWZ0S2V5LGlzTGVmdENsaWNrOmZrKGMpfHwidG91Y2hzdGFydCI9PT1jLnR5cGUsaXNSaWdo'@;
put 'dENsaWNrOlVwKGMpfSl9Y29uc3QgbG5lPW5ldyBXZWFrTWFwLG5WPVN5bWJvbCgicm9vdEluc3RhbmNlIik7ZnVuY3Rpb24gclYoYyl7cmV0dXJuIGxuZS5oYXMoYyl9ZnVuY3Rpb24gY25lKGMsbCxhKXsoZnVuY3Rpb24gc1RlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZcChjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gYVRlKGMpe3ZhciBsPWZ1bmN0aW9uIGxUZShjLGwpe2lmKCJvYmplY3Qi'@;
put 'IT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp'@;
put 'dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs'@;
put 'dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHVuZShjLGwpe3JldHVybiBmdW5jdGlvbiBjVGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLGhuZShjLGwsImdldCIpKX1mdW5jdGlvbiBk'@;
put 'bmUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiB1VGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLGhuZShj'@;
put 'LGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gaG5lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IHhnPW5ldyBXZWFrTWFwO3ZhciBpVj1u'@;
put 'ZXcgV2Vha01hcCxvVj1uZXcgV2Vha01hcDtjb25zdCBoVGU9Y2xhc3MgZFRle2NvbnN0cnVjdG9yKGwpe1lwKHRoaXMsImluc3RhbmNlIix2b2lkIDApLFlwKHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxZcCh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxZcCh0aGlzLCJUSEVBRCIsdm9p'@;
put 'ZCAwKSxZcCh0aGlzLCJUQk9EWSIsdm9pZCAwKSxZcCh0aGlzLCJfd3QiLHZvaWQgMCksWXAodGhpcywiYWN0aXZlV3QiLHZvaWQgMCksY25lKHRoaXMsaVYse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxjbmUodGhpcyxvVix7d3JpdGFibGU6ITAsdmFsdWU6MH0pLFlwKHRoaXMsInBvc3Rwb25l'@;
put 'ZEFkanVzdEVsZW1lbnRzU2l6ZSIsITEpLHRoaXMuaW5zdGFuY2U9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcy5pbnN0YW5jZSksdGhpcy5zZXR0aW5ncz10aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkseGcuc2V0KHRoaXMse3NlbGVjdGlvbk1vdXNlRG93bjohMSxtb3VzZURv'@;
put 'd246dm9pZCAwLHRhYmxlOnZvaWQgMCxsYXN0V2lkdGg6MCxsYXN0SGVpZ2h0OjB9KSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl9cmVuZGVyKCl7dGhpcy5pbnN0YW5jZS5pc1JlbmRlclN1c3BlbmRlZCgp'@;
put 'fHwodGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlciksdGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUmJih0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMSx0aGlzLmFkanVzdEVsZW1lbnRzU2l6'@;
put 'ZSghMCkpLHRoaXMuX3d0LmRyYXcoIXRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbmRlciIsdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSExLHRoaXMuaW5zdGFu'@;
put 'Y2UucmVuZGVyQ2FsbD0hMSl9YWRqdXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLmluc3RhbmNlLmlzUmVuZGVyU3VzcGVuZGVkKCk/dGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1Np'@;
put 'emU9ITA6dGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUobCl9Z2V0Q2VsbEF0Q29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLl93dC5nZXRDZWxsKGwsYSk7cmV0dXJuIGQ8MD9udWxsOmR9c2Nyb2xsVmlld3BvcnQobCxhLGQsaCxmKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xs'@;
put 'Vmlld3BvcnQobCxhLGQsaCxmKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9y'@;
put 'dFZlcnRpY2FsbHkobCxhLGQpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3QgbD14Zy5nZXQodGhpcykse3Jvb3RFbGVtZW50OmEscm9vdERvY3VtZW50OmR9PXRoaXMuaW5zdGFuY2UsaD1hLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtoJiZhLnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbHN0eWxl'@;
put 'IixoKSxwaShhLCJoYW5kc29udGFibGUiKSxsLnRhYmxlPWQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKSxwaShsLnRhYmxlLCJodENvcmUiKSx0aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUmJnBpKGwudGFibGUsdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnRh'@;
put 'YmxlQ2xhc3NOYW1lKSx0aGlzLlRIRUFEPWQuY3JlYXRlRWxlbWVudCgiVEhFQUQiKSxsLnRhYmxlLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9ZC5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLGwudGFibGUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSksdGhpcy5pbnN0YW5jZS50'@;
put 'YWJsZT1sLnRhYmxlLHRoaXMuaW5zdGFuY2UuY29udGFpbmVyLmluc2VydEJlZm9yZShsLnRhYmxlLHRoaXMuaW5zdGFuY2UuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3QgbD14Zy5nZXQodGhpcykse3Jvb3RFbGVtZW50OmEscm9vdERvY3VtZW50OmQsc2Vs'@;
put 'ZWN0aW9uOmh9PXRoaXMuaW5zdGFuY2UsZj1kLmRvY3VtZW50RWxlbWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsXz0+e2lmKGwuc2VsZWN0aW9uTW91c2VEb3duPSEwLCF0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoXy50YXJnZXQpKXtj'@;
put 'b25zdHtyb290V2luZG93OlR9PXRoaXMuaW5zdGFuY2U7Zk4oVCksXy5wcmV2ZW50RGVmYXVsdCgpLFQuZm9jdXMoKX19KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLCgpPT57bC5zZWxlY3Rpb25Nb3VzZURvd249ITF9KSx0aGlzLmV2ZW50TWFuYWdl'@;
put 'ci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlbW92ZSIsXz0+e2wuc2VsZWN0aW9uTW91c2VEb3duJiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKF8udGFyZ2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmZOKHRoaXMuaW5zdGFuY2Uucm9vdFdpbmRvdyksXy5w'@;
put 'cmV2ZW50RGVmYXVsdCgpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwia2V5dXAiLF89PntoLmlzSW5Qcm9ncmVzcygpJiYhXy5zaGlmdEtleSYmaC5maW5pc2goKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2V1cCIsXz0+e2gu'@;
put 'aXNJblByb2dyZXNzKCkmJmZrKF8pJiZoLmZpbmlzaCgpLGwubW91c2VEb3duPSExLChzayhkLmFjdGl2ZUVsZW1lbnQpfHwhaC5pc1NlbGVjdGVkKCkmJiFoLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhYS5jb250YWlucyhfLnRhcmdldCkmJiFVcChfKSkmJnRoaXMuaW5zdGFuY2UudW5s'@;
put 'aXN0ZW4oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwiY29udGV4dG1lbnUiLF89PntoLmlzSW5Qcm9ncmVzcygpJiZVcChfKSYmKGguZmluaXNoKCksbC5tb3VzZURvd249ITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJ0b3VjaGVu'@;
put 'ZCIsKCk9PntoLmlzSW5Qcm9ncmVzcygpJiZoLmZpbmlzaCgpLGwubW91c2VEb3duPSExfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZWRvd24iLF89Pntjb25zdCBUPV8udGFyZ2V0LFc9Xy54fHxfLmNsaWVudFgsaWU9Xy55fHxfLmNsaWVudFk7bGV0IHBl'@;
put 'PV8udGFyZ2V0O2lmKGwubW91c2VEb3dufHwhYXx8IXRoaXMuaW5zdGFuY2UudmlldylyZXR1cm47Y29uc3R7aG9sZGVyOndlfT10aGlzLmluc3RhbmNlLnZpZXcuX3d0Lnd0VGFibGU7aWYocGU9PT13ZSl7Y29uc3QgWmU9TGMoZCk7aWYoZC5lbGVtZW50RnJvbVBvaW50KFcrWmUsaWUpIT09'@;
put 'd2V8fGQuZWxlbWVudEZyb21Qb2ludChXLGllK1plKSE9PXdlKXJldHVybn1lbHNlIGZvcig7cGUhPT1mOyl7aWYobnVsbD09PXBlKXtpZihfLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFrO3JldHVybn1pZihwZT09PWEpcmV0dXJuO3BlPXBlLnBhcmVudE5vZGV9KCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhUKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/dGhpcy5pbnN0YW5jZS5kZXNlbGVjdENlbGwoKTp0aGlzLmluc3RhbmNlLmRlc3Ry'@;
put 'b3lFZGl0b3IoITEsITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLnRhYmxlLCJzZWxlY3RzdGFydCIsXz0+e3RoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fGF5KF8udGFyZ2V0KXx8Xy5wcmV2ZW50RGVmYXVsdCgpfSl9dHJhbnNsYXRlRnJvbVJlbmRl'@;
put 'cmFibGVUb1Zpc3VhbENvb3JkcyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIHRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoYSxkKSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbElu'@;
put 'ZGV4KGwsYSl7bGV0IGQ9bD49MD90aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCk6bCxoPWE+PTA/dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7cmV0dXJuIG51'@;
put 'bGw9PT1kJiYoZD1sKSxudWxsPT09aCYmKGg9YSksW2QsaF19Y291bnRSZW5kZXJhYmxlSW5kZXhlcyhsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGEpLGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4gbnVsbD09'@;
put 'PWg/MDpsLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Q29scyl9Y291bnRSZW5k'@;
put 'ZXJhYmxlUm93cygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heFJvd3MpfWNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhs'@;
put 'LGEsdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHRo'@;
put 'aXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKX1jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLGQsaCl7aWYoaXNOYU4obCl8fGw8MClyZXR1cm4gMDtjb25zdCBmPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSksXz1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYo'@;
put 'IU51bWJlci5pc0ludGVnZXIoXykpcmV0dXJuIDA7bGV0IFQ9MDtyZXR1cm4gYTwwP1Q9XysxOmE+MCYmKFQ9aC1fKSxUfWNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNl'@;
put 'dHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpe2NvbnN0IGw9dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSxhPU1hdGgubWluKHBhcnNlSW50KHRo'@;
put 'aXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IGw9dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSxhPU1hdGgubWF4KGwtcGFyc2VJbnQo'@;
put 'dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20sMTApLDApO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLDEpfWlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpe2NvbnN0IGw9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpK3RoaXMu'@;
put 'Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxhPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpO3JldHVybiB0aGlzLmluc3RhbmNlLmNvdW50UmVuZGVyZWRSb3dzKCk+bCYmdGhpcy5pbnN0YW5jZS5jb3VudFJlbmRlcmVkQ29scygpPmF9aW5pdGlhbGl6ZVdh'@;
put 'bGtvbnRhYmxlKCl7Y29uc3QgbD14Zy5nZXQodGhpcyksYT17cnRsTW9kZTp0aGlzLmluc3RhbmNlLmlzUnRsKCksZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOnRoaXMuaW5zdGFuY2UuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpJiZ0aGlzLmluc3RhbmNlLmdldFBsdWdpbigiYXV0b1Jvd1NpemUi'@;
put 'KS5pc0VuYWJsZWQoKSx0YWJsZTpsLnRhYmxlLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+clYodGhpcy5pbnN0YW5jZSkscHJldmVudE92ZXJmbG93OigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRPdmVyZmxvdyxwcmV2ZW50V2hlZWw6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudFdoZWVsLHN0'@;
put 'cmV0Y2hIOigpPT50aGlzLnNldHRpbmdzLnN0cmV0Y2hILGRhdGE6KF8sVCk9PnRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbCguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpKSx0b3RhbFJvd3M6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlUm93cygp'@;
put 'LHRvdGFsQ29sdW1uczooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksZml4ZWRDb2x1bW5zU3RhcnQ6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpLGZpeGVkUm93c1RvcDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLGZpeGVk'@;
put 'Um93c0JvdHRvbTooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydD4wfHxhLnJvd0hlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVy'@;
put 'bGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcD4wfHxhLmNvbHVtbkhlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbT4wLG1pblNwYXJlUm93czooKT0+dGhpcy5zZXR0aW5ncy5taW5TcGFy'@;
put 'ZVJvd3MscmVuZGVyQWxsUm93czp0aGlzLnNldHRpbmdzLnJlbmRlckFsbFJvd3Mscm93SGVhZGVyczooKT0+e2NvbnN0IF89W107cmV0dXJuIHRoaXMuaW5zdGFuY2UuaGFzUm93SGVhZGVycygpJiZfLnB1c2goKFQsVyk9Pntjb25zdCBpZT1UPj0wP3RoaXMuaW5zdGFuY2Uucm93SW5kZXhN'@;
put 'YXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChUKTpUO3RoaXMuYXBwZW5kUm93SGVhZGVyKGllLFcpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLF8pLGRuZSh0aGlzLG9WLF8ubGVuZ3RoKSxffSxjb2x1bW5IZWFkZXJzOigp'@;
put 'PT57Y29uc3QgXz1bXTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5oYXNDb2xIZWFkZXJzKCkmJl8ucHVzaCgoVCxXKT0+e2NvbnN0IGllPVQ+PTA/dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFQpOlQ7dGhpcy5hcHBlbmRDb2xIZWFk'@;
put 'ZXIoaWUsVyl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsXyksZG5lKHRoaXMsaVYsXy5sZW5ndGgpLF99LGNvbHVtbldpZHRoOl89Pntjb25zdCBUPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJl'@;
put 'bmRlcmFibGVJbmRleChfKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRDb2xXaWR0aChudWxsPT09VD9fOlQpfSxyb3dIZWlnaHQ6Xz0+e2NvbnN0IFQ9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pO3JldHVybiB0aGlzLmluc3Rh'@;
put 'bmNlLmdldFJvd0hlaWdodChudWxsPT09VD9fOlQpfSxjZWxsUmVuZGVyZXI6KF8sVCxXKT0+e2NvbnN0W2llLHBlXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGll'@;
put 'LHBlKTtsZXQgRWU9aWUsWmU9cGU7QXJyYXkuaXNBcnJheSh3ZSkmJihbRWUsWmVdPXdlKTtjb25zdCBpdD10aGlzLmluc3RhbmNlLmdldENlbGxNZXRhKEVlLFplKSxldD10aGlzLmluc3RhbmNlLmNvbFRvUHJvcChaZSk7bGV0IHl0PXRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChF'@;
put 'ZSxldCk7dGhpcy5pbnN0YW5jZS5oYXNIb29rKCJiZWZvcmVWYWx1ZVJlbmRlciIpJiYoeXQ9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVmFsdWVSZW5kZXIiLHl0LGl0KSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVuZGVyZXIiLFcsaWUscGUsZXQseXQsaXQpLHRo'@;
put 'aXMuaW5zdGFuY2UuZ2V0Q2VsbFJlbmRlcmVyKGl0KSh0aGlzLmluc3RhbmNlLFcsaWUscGUsZXQseXQsaXQpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVuZGVyZXIiLFcsaWUscGUsZXQseXQsaXQpfSxzZWxlY3Rpb25zOnRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmhpZ2hsaWdo'@;
put 'dCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOigpPT50aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uLG9uV2luZG93UmVzaXplOigpPT57dGhpcy5pbnN0YW5jZSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UucmVmcmVzaERpbWVuc2lvbnMoKX0sb25D'@;
put 'b250YWluZXJFbGVtZW50UmVzaXplOigpPT57dGhpcy5pbnN0YW5jZSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UucmVmcmVzaERpbWVuc2lvbnMoKX0sb25DZWxsTW91c2VEb3duOihfLFQsVyxpZSk9Pntjb25zdCBwZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5k'@;
put 'ZXJhYmxlVG9WaXN1YWxDb29yZHMoVCksd2U9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5pbnN0YW5jZS5saXN0ZW4oKSx0aGlzLmFjdGl2ZVd0PWllLGwubW91c2VEb3duPSEwLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsXyxwZSxXLHdl'@;
put 'KSwhYmcoXykmJihhbmUoXyx7Y29vcmRzOnBlLHNlbGVjdGlvbjp0aGlzLmluc3RhbmNlLnNlbGVjdGlvbixjb250cm9sbGVyOndlLGNlbGxDb29yZHNGYWN0b3J5OihFZSxaZSk9PnRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoRWUsWmUpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29r'@;
put 'cygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLF8scGUsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvbnRleHRNZW51OihfLFQsVyxpZSk9Pntjb25zdCBwZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1pZSxsLm1v'@;
put 'dXNlRG93bj0hMSx0aGlzLmluc3RhbmNlLnNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSYmdGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24uZmluaXNoKCksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLF8scGUsVyksIWJnKF8pJiYodGhpcy5pbnN0YW5jZS5y'@;
put 'dW5Ib29rcygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsXyxwZSxXKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdXQ6KF8sVCxXLGllKT0+e2NvbnN0IHBlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKTt0aGlzLmFjdGl2ZVd0PWll'@;
put 'LHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3V0IixfLHBlLFcpLCFiZyhfKSYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdXQiLF8scGUsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3ZlcjooXyxULFcs'@;
put 'aWUpPT57Y29uc3QgcGU9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFQpLHdlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuYWN0aXZlV3Q9aWUsdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixfLHBlLFcsd2Up'@;
put 'LCFiZyhfKSYmKGwubW91c2VEb3duJiZhbmUoXyx7Y29vcmRzOnBlLHNlbGVjdGlvbjp0aGlzLmluc3RhbmNlLnNlbGVjdGlvbixjb250cm9sbGVyOndlLGNlbGxDb29yZHNGYWN0b3J5OihFZSxaZSk9PnRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoRWUsWmUpfSksdGhpcy5pbnN0'@;
put 'YW5jZS5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLF8scGUsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlVXA6KF8sVCxXLGllKT0+e2NvbnN0IHBlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKTt0aGlzLmFjdGl2ZVd0'@;
put 'PWllLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlVXAiLF8scGUsVyksIWJnKF8pJiYhdGhpcy5pbnN0YW5jZS5pc0Rlc3Ryb3llZCYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VVcCIsXyxwZSxXKSx0aGlzLmFjdGl2ZVd0PXRoaXMu'@;
put 'X3d0KX0sb25DZWxsQ29ybmVyTW91c2VEb3duOl89PntfLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLF8pfSxvbkNlbGxDb3JuZXJEYmxDbGljazpfPT57Xy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLF8pfSxiZWZvcmVEcmF3OihfLFQpPT50aGlzLmJlZm9yZVJlbmRlcihfLFQpLG9uRHJhdzpfPT50aGlzLmFmdGVyUmVuZGVyKF8pLG9uU2Nyb2xsVmVydGljYWxseTooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJT'@;
put 'Y3JvbGxWZXJ0aWNhbGx5Iiksb25TY3JvbGxIb3Jpem9udGFsbHk6KCk9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iiksb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2Vs'@;
put 'bENsYXNzTmFtZXMiKSxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcixwZT1pZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUhp'@;
put 'Z2hsaWdodGluZ1Jvd0hlYWRlciIscGUsVCxXKTtyZXR1cm4gaWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod2UsMSkpfSxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5pbnN0'@;
put 'YW5jZS5jb2x1bW5JbmRleE1hcHBlcixwZT1pZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIscGUsVCxXKTtyZXR1cm4gaWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod2UsMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooXyxULFcpPT57bGV0IGllO2NvbnN0W3BlLHdlXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpLEVlPXRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmdl'@;
put 'dFNlbGVjdGVkUmFuZ2UoKSxaZT1FZS5zaXplKCk7aWYoWmU+MCl7Y29uc3QgZXQ9RWUucGVla0J5SW5kZXgoKFc/PzApKzEtWmUpO2llPVtldC5mcm9tLnJvdyxldC5mcm9tLmNvbCxldC50by5yb3csZXQudG8uY29sXX1yZXR1cm4gdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJEcmF3'@;
put 'U2VsZWN0aW9uIixwZSx3ZSxpZSxXKX0sb25CZWZvcmVEcmF3Qm9yZGVyczooXyxUKT0+e2NvbnN0W1csaWUscGUsd2VdPV8sRWU9W3RoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChXKSx0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaWUpLHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChwZSksdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHdlKV07'@;
put 'cmV0dXJuIHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZURyYXdCb3JkZXJzIixFZSxUKX0sb25CZWZvcmVUb3VjaFNjcm9sbDooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVG91Y2hTY3JvbGwiKSxvbkFmdGVyTW9tZW50dW1TY3JvbGw6KCk9PnRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoImFmdGVyTW9tZW50dW1TY3JvbGwiKSxvbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDooXyxUKT0+e2NvbnN0IFc9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFQpO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1'@;
put 'bkhvb2tzKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLF8sVyl9LG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6Xz0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyV2lkdGgiLF8pLG9uTW9kaWZ5R2V0Q2VsbENvb3JkczooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5p'@;
put 'bnN0YW5jZS5yb3dJbmRleE1hcHBlcixwZT10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHdlPVQ+PTA/cGUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChUKTpULEVlPV8+PTA/aWUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChfKTpfLFplPXRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLEVlLHdlLFcpO2lmKEFycmF5LmlzQXJyYXkoWmUpKXtjb25zdFtpdCxldCx5dCxFdF09WmU7cmV0dXJuW2l0Pj0wP2llLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGl0LDEpKTpp'@;
put 'dCxldD49MD9wZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHBlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChldCwxKSk6ZXQseXQ+PTA/aWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoeXQsLTEpKTp5dCxFdD49MD9wZS5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHBlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFdCwtMSkpOkV0XX19LHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOl89PntsZXQgVD10aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PVQm'@;
put 'JnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wJiYoVD0xMCksVD4wfHwiYXV0byI9PT1UKXtjb25zdCBXPXRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpLGllPV8uc3RhcnRSb3cscGU9Xy5lbmRSb3c7aWYoIm51bWJlciI9PXR5cGVvZiBUKV8uc3RhcnRSb3c9TWF0aC5tYXgoaWUtVCwwKSxf'@;
put 'LmVuZFJvdz1NYXRoLm1pbihwZStULFctMSk7ZWxzZSBpZigiYXV0byI9PT1UKXtjb25zdCB3ZT1NYXRoLmNlaWwocGUvVyoxMik7Xy5zdGFydFJvdz1NYXRoLm1heChpZS13ZSwwKSxfLmVuZFJvdz1NYXRoLm1pbihwZSt3ZSxXLTEpfX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclZp'@;
put 'ZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixfKX0sdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6Xz0+e2xldCBUPXRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09VCYmdGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFy'@;
put 'dCYmKFQ9MTApLFQ+MHx8ImF1dG8iPT09VCl7Y29uc3QgVz10aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxpZT1fLnN0YXJ0Q29sdW1uLHBlPV8uZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgVCYmKF8uc3RhcnRDb2x1bW49TWF0aC5tYXgoaWUtVCwwKSxfLmVuZENvbHVtbj1N'@;
put 'YXRoLm1pbihwZStULFctMSkpLCJhdXRvIj09PVQpe2NvbnN0IHdlPU1hdGguY2VpbChwZS9XKjYpO18uc3RhcnRDb2x1bW49TWF0aC5tYXgoaWUtd2UsMCksXy5lbmRDb2x1bW49TWF0aC5taW4ocGUrd2UsVy0xKX19dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydENvbHVt'@;
put 'bkNhbGN1bGF0b3JPdmVycmlkZSIsXyl9LHJvd0hlYWRlcldpZHRoOigpPT50aGlzLnNldHRpbmdzLnJvd0hlYWRlcldpZHRoLGNvbHVtbkhlYWRlckhlaWdodDooKT0+e2NvbnN0IF89dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iik7cmV0dXJuIHRo'@;
put 'aXMuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxffX07dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixhKSx0aGlzLl93dD1uZXcgdFYoYSksdGhpcy5hY3RpdmVXdD10aGlzLl93dDtjb25zdCBkPXRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIse3dp'@;
put 'ZHRoOmgsaGVpZ2h0OmZ9PXRoaXMuaW5zdGFuY2Uucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zZXRMYXN0U2l6ZShoLGYpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwibW91c2Vkb3duIixfPT57Xy50YXJnZXQ9PT1kJiYzPT09Xy53aGlj'@;
put 'aCYmXy5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwiY29udGV4dG1lbnUiLF89PntfLnRhcmdldD09PWQmJjM9PT1fLndoaWNoJiZfLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0'@;
put 'aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmKHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMucmVuZGVyKCkp'@;
put 'fSl9aXNUZXh0U2VsZWN0aW9uQWxsb3dlZChsKXtpZihheShsKSlyZXR1cm4hMDtjb25zdCBhPVZwKGwsdGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFRhYmxlLnNwcmVhZGVyKTtyZXR1cm4hISghMD09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmF8fCJjZWxsIj09PXRoaXMu'@;
put 'c2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkmJmF8fCF0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzQ2VsbEVkaXRlZCgpJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpKX1pc01vdXNlRG93bigpe3JldHVybiB4Zy5n'@;
put 'ZXQodGhpcykubW91c2VEb3dufWlzU2VsZWN0ZWRPbmx5Q2VsbCgpe3ZhciBsLGE7cmV0dXJuIG51bGwhPT0obD1udWxsPT09KGE9dGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdm9pZCAwIT09bCYmbH1pc0Nl'@;
put 'bGxFZGl0ZWQoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0QWN0aXZlRWRpdG9yKCk7cmV0dXJuIGwmJmwuaXNPcGVuZWQoKX1iZWZvcmVSZW5kZXIobCxhKXtsJiZ0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVWaWV3UmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRl'@;
put 'cixhKX1hZnRlclJlbmRlcihsKXtsJiZ0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclZpZXdSZW5kZXIiLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKX1hcHBlbmRSb3dIZWFkZXIobCxhKXtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGQ9YS5maXJzdENoaWxkO2lmKCFCbyhkLCJy'@;
put 'ZWxhdGl2ZSIpKXJldHVybiBnMihhKSx2b2lkIHRoaXMuYXBwZW5kUm93SGVhZGVyKGwsYSk7dGhpcy51cGRhdGVDZWxsSGVhZGVyKGQucXVlcnlTZWxlY3RvcigiLnJvd0hlYWRlciIpLGwsdGhpcy5pbnN0YW5jZS5nZXRSb3dIZWFkZXIpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OmQsZ2V0'@;
put 'Um93SGVhZGVyOmh9PXRoaXMuaW5zdGFuY2UsZj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLF89ZC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5jbGFzc05hbWU9InJlbGF0aXZlIixfLmNsYXNzTmFtZT0icm93SGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoXyxsLGgpLGYuYXBwZW5kQ2hp'@;
put 'bGQoXyksYS5hcHBlbmRDaGlsZChmKX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsbCxhKX1hcHBlbmRDb2xIZWFkZXIobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5pbnN0YW5j'@;
put 'ZS5nZXRDb2xIZWFkZXIsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MDtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGY9YS5maXJzdENoaWxkO0JvKGYsInJlbGF0aXZlIik/dGhpcy51cGRhdGVDZWxsSGVhZGVyKGYucXVlcnlTZWxlY3Rv'@;
put 'cigiLmNvbEhlYWRlciIpLGwsZCxoKTooZzIoYSksdGhpcy5hcHBlbmRDb2xIZWFkZXIobCxhLGQsaCkpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaW5zdGFuY2UsXz1mLmNyZWF0ZUVsZW1lbnQoImRpdiIpLFQ9Zi5jcmVhdGVFbGVtZW50KCJzcGFuIik7Xy5jbGFzc05hbWU9'@;
put 'InJlbGF0aXZlIixULmNsYXNzTmFtZT0iY29sSGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoVCxsLGQsaCksXy5hcHBlbmRDaGlsZChUKSxhLmFwcGVuZENoaWxkKF8pfXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyR2V0Q29sSGVhZGVyIixsLGEsaCl9dXBkYXRlQ2VsbEhlYWRl'@;
put 'cihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsZj1hO2NvbnN0IF89dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpfHx0aGlzLl93dDtsLnBhcmVudE5vZGUmJihCbyhsLCJjb2xIZWFkZXIi'@;
put 'KT9mPV8ud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKTpCbyhsLCJyb3dIZWFkZXIiKSYmKGY9Xy53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpKSksZj4tMT9nZyhsLGQoYSxoKSk6KGpwKGwsU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKSxwaShs'@;
put 'LCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCktbDtyZXR1cm4gZD4wP2Q6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQobCl7Y29uc3QgZD10aGlzLl93dC53dFZp'@;
put 'ZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWw7cmV0dXJuIGQ+MD9kOjB9c2V0TGFzdFNpemUobCxhKXtjb25zdCBkPXhnLmdldCh0aGlzKTtbZC5sYXN0V2lkdGgsZC5sYXN0SGVpZ2h0XT1bbCxhXX1nZXRMYXN0U2l6ZSgpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpO3JldHVybnt3aWR0aDps'@;
put 'Lmxhc3RXaWR0aCxoZWlnaHQ6bC5sYXN0SGVpZ2h0fX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZp'@;
put 'c2libGVSb3coKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdEZ1'@;
put 'bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZUNv'@;
put 'bHVtbigpe3JldHVybiB0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdW5l'@;
put 'KHRoaXMsaVYpfWdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB1bmUodGhpcyxvVil9ZGVzdHJveSgpe3RoaXMuX3d0LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fSxmbmU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixzVj1mbmUubGVuZ3RoO2Z1bmN0aW9u'@;
put 'IE1rKGMpe2xldCBkLGw9YysxLGE9IiI7Zm9yKDtsPjA7KWQ9KGwtMSklc1YsYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K2QpK2EsbD1wYXJzZUludCgobC1kKS9zViwxMCk7cmV0dXJuIGF9ZnVuY3Rpb24gZlRlKGMpe2xldCBsPTA7aWYoYylmb3IobGV0IGE9MCxkPWMubGVuZ3RoLTE7YTxj'@;
put 'Lmxlbmd0aDthKz0xLGQtPTEpbCs9c1YqKmQqKGZuZS5pbmRleE9mKGNbYV0pKzEpO3JldHVybiBsLT0xLGx9ZnVuY3Rpb24gcFRlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9W107Zm9yKGg9MDtoPGw7aCsrKWYucHVzaChNayhoKSsoZCsxKSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIGdUZSgpe2xldCBjPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPXt9O2Zvciho'@;
put 'PTA7aDxsO2grKylmW2Bwcm9wJHtofWBdPU1rKGgpKyhkKzEpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiBtVGUoYyxsKXtjb25zdCBhPVtdO2xldCBkO2ZvcihsZXQgaD0wO2g8YztoKyspe2Q9W107Zm9yKGxldCBmPTA7ZjxsO2YrKylkLnB1c2goIiIpO2EucHVzaChkKX1yZXR1cm4g'@;
put 'YX1mdW5jdGlvbiBhVihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPWM7Y29uc3QgZD1bXTtyZXR1cm4oIUFycmF5LmlzQXJyYXkoYyl8fCFBcnJheS5pc0FycmF5KGNbMF0pKSYmKGE9W2NdKSxhLmZvckVhY2goKGgs'@;
put 'Zik9PntBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaCgoXyxUKT0+e2QucHVzaChbZitsLFQsX10pfSk6T2JqZWN0LmtleXMoaCkuZm9yRWFjaChfPT57ZC5wdXNoKFtmK2wsXyxoW19dXSl9KX0pLGR9ZnVuY3Rpb24gbFYoYyl7bGV0IGw9MDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmKGNb'@;
put 'MF0mJkFycmF5LmlzQXJyYXkoY1swXSk/bD1jWzBdLmxlbmd0aDpjWzBdJiZ1cyhjWzBdKSYmKGw9dWsoY1swXSkpKSxsfWZ1bmN0aW9uIHBuZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT5BcnJheS5pc0FycmF5KGwpKSl9ZnVuY3Rpb24gZ25l'@;
put 'KGMpe3JldHVybiEhKEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PiJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJm51bGwhPT1sKSl9Y29uc3QgX1RlPWNsYXNzIHZUZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107dGhpcy5ob3Q9bCx0aGlzLmRhdGE9YSx0aGlzLmRhdGFUeXBlPSJhcnJheSIsdGhpcy5jb2xUb1Byb3A9KCk9Pnt9LHRoaXMucHJvcFRvQ29sPSgpPT57fX1tb2RpZnlSb3dEYXRhKGwpe2xldCBhO3JldHVybiB0aGlzLmhvdC5o'@;
put 'YXNIb29rKCJtb2RpZnlSb3dEYXRhIikmJihhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixsKSksdm9pZCAwPT09YXx8TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF06YX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YSYmMCE9PXRoaXMuZGF0YS5sZW5ndGg/dGhp'@;
put 'cy5nZXRCeVJhbmdlKG51bGwsbnVsbCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKTp0aGlzLmRhdGF9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXRBdENvbHVtbihsKXtjb25zdCBhPVtdO3JldHVybiBEbih0aGlzLmRhdGEsKGQsaCk9'@;
put 'Pntjb25zdCBmPXRoaXMuZ2V0QXRDZWxsKGgsbCk7YS5wdXNoKGYpfSksYX1nZXRBdFJvdyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBmPXZvaWQgMD09PWEmJnZvaWQgMD09PWQ7bGV0IF89bnVsbCxU'@;
put 'PW51bGw7aWYoXz10aGlzLm1vZGlmeVJvd0RhdGEobCksQXJyYXkuaXNBcnJheShfKSlUPVtdLGY/Xy5mb3JFYWNoKChXLGllKT0+e1RbaWVdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxpZSxfKX0pOnZvKGEsZCxXPT57VFtXLWFdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxXLF8pfSk7'@;
put 'ZWxzZSBpZih1cyhfKXx8UmEoXykpaWYoVD1oP1tdOnt9LCFmfHxoKXtjb25zdCBpZT10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCktMTt2bygwLGllLHBlPT57Y29uc3Qgd2U9dGhpcy5jb2xUb1Byb3AocGUpO2lmKHBlPj0oYXx8MCkmJnBlPD0oZHx8aWUpJiYhTnVtYmVyLmlzSW50ZWdlcih3'@;
put 'ZSkpe2NvbnN0IEVlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx3ZSxfKTtoP1QucHVzaChFZSk6Y2soVCx3ZSxFZSl9fSl9ZWxzZSBkcyhfLChXLGllKT0+e2NrKFQsaWUsdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLGllLF8pKX0pO3JldHVybiBUfXNldEF0Q2VsbChsLGEsZCl7aWYoIShs'@;
put 'Pj10aGlzLmNvdW50Um93cygpfHxhPj10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkpKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGg9X2coZCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxoLCJzZXQiKSxoLmlzVG91Y2hl'@;
put 'ZCgpJiYoZD1oLnZhbHVlKX1OdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXVthXT1kOmNrKHRoaXMuZGF0YVtsXSxhLGQpfX1nZXRBdFBoeXNpY2FsQ2VsbChsLGEsZCl7bGV0IGg9bnVsbDtpZihkJiYoaD0ic3RyaW5nIj09dHlwZW9mIGE/dnRlKGQsYSk6ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGE/YShkKTpkW2FdKSx0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGY9X2coaCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxmLCJnZXQiKSxmLmlzVG91Y2hlZCgpJiYoaD1mLnZhbHVlKX1yZXR1cm4gaH1nZXRBdENlbGwo'@;
put 'bCxhKXtjb25zdCBkPXRoaXMubW9kaWZ5Um93RGF0YShsKTtyZXR1cm4gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHRoaXMuY29sVG9Qcm9wKGEpLGQpfWdldEJ5UmFuZ2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVs'@;
put 'bCxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9bnVsbCxfPW51bGwsVD1udWxsLFc9bnVsbDtudWxsPT09bHx8'@;
put 'bnVsbD09PWE/KGg9ITAsZj0wLFQ9dGhpcy5jb3VudFJvd3MoKS0xKTooZj1NYXRoLm1pbihsLnJvdyxhLnJvdyksXz1NYXRoLm1pbihsLmNvbCxhLmNvbCksVD1NYXRoLm1heChsLnJvdyxhLnJvdyksVz1NYXRoLm1heChsLmNvbCxhLmNvbCkpO2NvbnN0IGllPVtdO3JldHVybiB2byhmLFQs'@;
put 'cGU9PntpZS5wdXNoKGg/dGhpcy5nZXRBdFJvdyhwZSx2b2lkIDAsdm9pZCAwLGQpOnRoaXMuZ2V0QXRSb3cocGUsXyxXLGQpKX0pLGllfWNvdW50Um93cygpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXtjb25zdCBsPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2Rp'@;
put 'ZnlTb3VyY2VMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsfXJldHVybiB0aGlzLmRhdGEubGVuZ3RofWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIGxWKHRoaXMuZGF0YSl9ZGVzdHJveSgpe3RoaXMuZGF0YT1udWxsLHRoaXMuaG90PW51bGx9fSxtbmU9e19sb2Nh'@;
put 'bEhvb2tzOk9iamVjdC5jcmVhdGUobnVsbCksYWRkTG9jYWxIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3NbY118fCh0aGlzLl9sb2NhbEhvb2tzW2NdPVtdKSx0aGlzLl9sb2NhbEhvb2tzW2NdLnB1c2gobCksdGhpc30scnVuTG9jYWxIb29rcyhjLGwsYSxkLGgsZixfKXtpZih0'@;
put 'aGlzLl9sb2NhbEhvb2tzW2NdKXtjb25zdCBUPXRoaXMuX2xvY2FsSG9va3NbY10ubGVuZ3RoO2ZvcihsZXQgVz0wO1c8VDtXKyspYWsodGhpcy5fbG9jYWxIb29rc1tjXVtXXSx0aGlzLGwsYSxkLGgsZixfKX19LGNsZWFyTG9jYWxIb29rcygpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9'@;
put 'LHRoaXN9fTtmaChtbmUsIk1JWElOX05BTUUiLCJsb2NhbEhvb2tzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IE8wPW1uZTtjbGFzcyBFZ3tjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw'@;
put 'XTpudWxsO3RoaXMuaW5kZXhlZFZhbHVlcz1bXSx0aGlzLmluaXRWYWx1ZU9yRm49bH1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5pbmRleGVkVmFsdWVzfWdldFZhbHVlQXRJbmRleChsKXtjb25zdCBhPXRoaXMuaW5kZXhlZFZhbHVlcztpZihsPGEubGVuZ3RoKXJldHVybiBhW2xdfXNldFZh'@;
put 'bHVlcyhsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9bC5zbGljZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9c2V0VmFsdWVBdEluZGV4KGwsYSl7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1tsXT1hLHRoaXMucnVuTG9jYWxIb29r'@;
put 'cygiY2hhbmdlIiksITApfWNsZWFyKCl7dGhpcy5zZXREZWZhdWx0VmFsdWVzKCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCkubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu'@;
put 'dHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoPTAsUmEodGhpcy5pbml0VmFsdWVPckZuKT92byhsLTEsYT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKGEpKSk6dm8obC0xLCgpPT50aGlzLmluZGV4ZWRW'@;
put 'YWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4pKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWluaXQobCl7cmV0dXJuIHRoaXMuc2V0RGVmYXVsdFZhbHVlcyhsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKSx0aGlzfWluc2VydCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hh'@;
put 'bmdlIil9cmVtb3ZlKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmluZGV4ZWRWYWx1ZXM9bnVsbCx0aGlzLmluaXRWYWx1ZU9yRm49bnVsbH19ZnVuY3Rpb24gY1YoYyxsLGEpe3JldHVyblsuLi5jLnNsaWNlKDAs'@;
put 'bCksLi4uYSwuLi5jLnNsaWNlKGwpXX1mdW5jdGlvbiBneShjLGwpe3JldHVybiBfMShjLGE9PiExPT09bC5pbmNsdWRlcyhhKSl9ZnVuY3Rpb24gdVYoYyxsKXtyZXR1cm4gY3MoYyxhPT5hLWwuZmlsdGVyKGQ9PmQ8YSkubGVuZ3RoKX1mdW5jdGlvbiBkVihjLGwpe2NvbnN0IGE9bFswXSxk'@;
put 'PWwubGVuZ3RoO3JldHVybiBjcyhjLGg9Pmg+PWE/aCtkOmgpfVRhKEVnLE8wKTtjbGFzcyB2bmUgZXh0ZW5kcyBFZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9ZFYodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz1jVihkLGws'@;
put 'YSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9Z3kodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhlZFZhbHVlcz11VihhLGwpLHN1cGVyLnJlbW92ZShsKX19ZnVuY3Rpb24gaFYoYyxsLGEsZCl7Y29uc3QgaD1hLmxlbmd0aD9hWzBdOnZvaWQgMDtyZXR1cm5b'@;
put 'Li4uYy5zbGljZSgwLGgpLC4uLmEubWFwKChmLF8pPT5SYShkKT9kKGYsXyk6ZCksLi4udm9pZCAwPT09aD9bXTpjLnNsaWNlKGgpXX1mdW5jdGlvbiBmVihjLGwpe3JldHVybiBfMShjLChhLGQpPT4hMT09PWwuaW5jbHVkZXMoZCkpfWNsYXNzIFdwIGV4dGVuZHMgRWd7aW5zZXJ0KGwsYSl7'@;
put 'dGhpcy5pbmRleGVkVmFsdWVzPWhWKHRoaXMuaW5kZXhlZFZhbHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWZWKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9fWNsYXNzIHhrIGV4'@;
put 'dGVuZHMgV3B7Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRIaWRkZW5JbmRleGVzKCl7cmV0dXJuIEFsKHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNs'@;
put 'YXNzIEVrIGV4dGVuZHMgRWd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHlUZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gd1RlKGMpe3ZhciBsPWZ1bmN0aW9uIENUZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlck9mSW5kZXhlcyIsW10pfWdldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT50aGlzLmluZGV4ZWRWYWx1ZXNbbF0pfXNldFZhbHVlcyhsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsuLi5BcnJheShs'@;
put 'Lmxlbmd0aCkua2V5cygpXSxzdXBlci5zZXRWYWx1ZXMobCl9c2V0VmFsdWVBdEluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoO3JldHVybiBsPHRoaXMuaW5kZXhl'@;
put 'ZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSwhMT09PXRoaXMub3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMobCkmJnRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKGQsMCxsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhclZhbHVlKGwpe3RoaXMu'@;
put 'b3JkZXJPZkluZGV4ZXM9Z3kodGhpcy5vcmRlck9mSW5kZXhlcyxbbF0pLFJhKHRoaXMuaW5pdFZhbHVlT3JGbik/c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKGwpKTpzdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4pfWdldExlbmd0'@;
put 'aCgpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5vcmRlck9mSW5kZXhlcy5s'@;
put 'ZW5ndGg9MCxzdXBlci5zZXREZWZhdWx0VmFsdWVzKGwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1oVih0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1kVih0aGlzLm9yZGVyT2ZJbmRleGVzLGEpLHN1cGVyLmlu'@;
put 'c2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9ZlYodGhpcy5pbmRleGVkVmFsdWVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9Z3kodGhpcy5vcmRlck9mSW5kZXhlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPXVWKHRoaXMub3JkZXJPZkluZGV4ZXMsbCksc3VwZXIucmVt'@;
put 'b3ZlKGwpfWdldEVudHJpZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+W2wsdGhpcy5nZXRWYWx1ZUF0SW5kZXgobCldKX19Y2xhc3MgbXkgZXh0ZW5kcyBXcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'JiZhcmd1bWVudHNbMF0pfWdldFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIEFsKHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNvbnN0IF9uZT1uZXcgTWFwKFtbImhpZGluZyIseGtdLFsiaW5kZXgiLEVnXSxbImxpbmtlZFBoeXNpY2FsSW5kZXhUb1Zh'@;
put 'bHVlIixFa10sWyJwaHlzaWNhbEluZGV4VG9WYWx1ZSIsV3BdLFsidHJpbW1pbmciLG15XV0pO2xldCBwVj0wO2NsYXNzIGdWe2NvbnN0cnVjdG9yKCl7dGhpcy5jb2xsZWN0aW9uPW5ldyBNYXB9cmVnaXN0ZXIobCxhKXshMT09PXRoaXMuY29sbGVjdGlvbi5oYXMobCkmJih0aGlzLmNvbGxl'@;
put 'Y3Rpb24uc2V0KGwsYSksYS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSkscFYrPTEpfXVucmVnaXN0ZXIobCl7Y29uc3QgYT10aGlzLmNvbGxlY3Rpb24uZ2V0KGwpO0tpKGEpJiYoYS5kZXN0cm95KCksdGhpcy5jb2xsZWN0aW9uLmRl'@;
put 'bGV0ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkscFYtPTEpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgobCxhKT0+dGhpcy51bnJlZ2lzdGVyKGEpKSx0aGlzLmNvbGxlY3Rpb24uY2xlYXIoKX1nZXQobCl7cmV0dXJuIExhKGwpP0FycmF5LmZy'@;
put 'b20odGhpcy5jb2xsZWN0aW9uLnZhbHVlcygpKTp0aGlzLmNvbGxlY3Rpb24uZ2V0KGwpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmNvbGxlY3Rpb24uc2l6ZX1yZW1vdmVGcm9tRXZlcnkobCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goYT0+e2EucmVtb3ZlKGwpfSl9aW5zZXJ0VG9FdmVy'@;
put 'eShsLGEpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGQ9PntkLmluc2VydChsLGEpfSl9aW5pdEV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLmluaXQobCl9KX19VGEoZ1YsTzApO2NsYXNzIGJuZSBleHRlbmRzIGdWe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlz'@;
put 'Lm1lcmdlZFZhbHVlc0NhY2hlPVtdLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1sLHRoaXMuZmFsbGJhY2tWYWx1ZT1hfWdldE1lcmdlZFZhbHVlcygpe2lmKCEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pKXJldHVybiB0'@;
put 'aGlzLm1lcmdlZFZhbHVlc0NhY2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVybltdO2NvbnN0IGE9Y3ModGhpcy5nZXQoKSxmPT5mLmdldFZhbHVlcygpKSxkPVtdLGg9S2koYVswXSkmJmFbMF0ubGVuZ3RofHwwO2ZvcihsZXQgZj0wO2Y8aDtmKz0xKXtjb25zdCBfPVtdO2Zvcihs'@;
put 'ZXQgVD0wO1Q8dGhpcy5nZXRMZW5ndGgoKTtUKz0xKV8ucHVzaChhW1RdW2ZdKTtkLnB1c2goXyl9cmV0dXJuIGNzKGQsdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKGEpW2xdO3JldHVybiBL'@;
put 'aShkKT9kOnRoaXMuZmFsbGJhY2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2VkVmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoITEpfX1mdW5jdGlvbiB5bmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJp'@;
put 'dmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIG1WPW5ldyBXZWFrTWFwO2NsYXNzIHduZXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiB4VGUoYyxsLGEpeyhmdW5jdGlvbiBFVGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u'@;
put 'b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLG1WLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pfXN1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5hZGRMb2NhbEhvb2soImNoYW5nZSIsbCksdGhp'@;
put 'cy5fd3JpdGUoZnVuY3Rpb24gVFRlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIERUZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMseW5lKGMsbCwiZ2V0IikpfSh0aGlzLG1WKSksdGhpc311bnN1YnNjcmliZSgpe3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoInVu'@;
put 'c3Vic2NyaWJlIiksdGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzfV93cml0ZShsKXtyZXR1cm4gbC5sZW5ndGg+MCYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpLHRoaXN9X3dyaXRlSW5pdGlhbENoYW5nZXMobCl7IWZ1bmN0aW9uIGtUZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IEFUZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMseW5lKGMsbCwic2V0IiksYSksYX0odGhpcyxtVixs'@;
put 'KX19ZnVuY3Rpb24gQ25lKGMsbCl7Y29uc3QgYT1bXTtsZXQgZD0wLGg9MDtmb3IoO2Q8Yy5sZW5ndGgmJmg8bC5sZW5ndGg7ZCsrLGgrKyljW2RdIT09bFtoXSYmYS5wdXNoKHtvcDoicmVwbGFjZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2RdLG5ld1ZhbHVlOmxbaF19KTtmb3IoO2Q8bC5sZW5n'@;
put 'dGg7ZCsrKWEucHVzaCh7b3A6Imluc2VydCIsaW5kZXg6ZCxvbGRWYWx1ZTp2b2lkIDAsbmV3VmFsdWU6bFtkXX0pO2Zvcig7aDxjLmxlbmd0aDtoKyspYS5wdXNoKHtvcDoicmVtb3ZlIixpbmRleDpoLG9sZFZhbHVlOmNbaF0sbmV3VmFsdWU6dm9pZCAwfSk7cmV0dXJuIGF9ZnVuY3Rpb24g'@;
put 'dnkoYyxsLGEpeyhmdW5jdGlvbiBJVGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG1kKGMsbCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIExUZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsU25lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIGtrKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gUlRlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJs'@;
put 'ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxTbmUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFNuZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0'@;
put 'byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1UYSh3bmUsTzApO3ZhciBBaz1uZXcgV2Vha01hcCxfeT1uZXcgV2Vha01hcCxUaz1uZXcgV2Vha01hcCxEaz1uZXcgV2Vha01hcCxJaz1uZXcgV2Vha01hcDtjbGFzcyBPVGV7Y29uc3RydWN0'@;
put 'b3IoKXtsZXR7aW5pdGlhbEluZGV4VmFsdWU6bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3Z5KHRoaXMsQWsse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSx2eSh0aGlzLF95LHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLHZ5'@;
put 'KHRoaXMsVGsse3dyaXRhYmxlOiEwLHZhbHVlOltdfSksdnkodGhpcyxEayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx2eSh0aGlzLElrLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGtrKHRoaXMsSWssbD8/ITEpfWNyZWF0ZU9ic2VydmVyKCl7Y29uc3QgbD1uZXcgd25lO3JldHVybiBtZCh0'@;
put 'aGlzLEFrKS5hZGQobCksbC5hZGRMb2NhbEhvb2soInVuc3Vic2NyaWJlIiwoKT0+e21kKHRoaXMsQWspLmRlbGV0ZShsKX0pLGwuX3dyaXRlSW5pdGlhbENoYW5nZXMoQ25lKG1kKHRoaXMsX3kpLG1kKHRoaXMsVGspKSksbH1lbWl0KGwpe2xldCBhPW1kKHRoaXMsVGspOyghbWQodGhpcyxE'@;
put 'ayl8fG1kKHRoaXMsX3kpLmxlbmd0aCE9PWwubGVuZ3RoKSYmKDA9PT1sLmxlbmd0aD9sPW5ldyBBcnJheShhLmxlbmd0aCkuZmlsbChtZCh0aGlzLElrKSk6a2sodGhpcyxfeSxuZXcgQXJyYXkobC5sZW5ndGgpLmZpbGwobWQodGhpcyxJaykpKSxtZCh0aGlzLERrKXx8KGtrKHRoaXMsRGss'@;
put 'ITApLGE9bWQodGhpcyxfeSkpKTtjb25zdCBkPUNuZShhLGwpO21kKHRoaXMsQWspLmZvckVhY2goaD0+aC5fd3JpdGUoZCkpLGtrKHRoaXMsVGssbCl9fWNsYXNzIHZWe2NvbnN0cnVjdG9yKCl7dGhpcy5pbmRleGVzU2VxdWVuY2U9bmV3IHZuZSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rp'@;
put 'b249bmV3IGJuZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbj1uZXcgYm5lKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbj1uZXcgZ1YsdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZT1uZXcgT1Rl'@;
put 'KHtpbml0aWFsSW5kZXhWYWx1ZTohMX0pLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT1bXSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bXSx0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITEsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQg'@;
put 'MCx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExLHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPVtdLHRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGU9bmV3IE1hcCx0aGlzLmZyb21WaXN1YWxUb1Jl'@;
put 'bmRlcmFibGVJbmRleGVzQ2FjaGU9bmV3IE1hcCx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9Pnt0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiaW5kZXhlc1NlcXVlbmNlQ2hh'@;
put 'bmdlIix0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZSxudWxsKX0pLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMudHJpbW1lZEluZGV4ZXNDaGFu'@;
put 'Z2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9'@;
put 'ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0'@;
put 'aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbil9KX1zdXNwZW5kT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSEwfXJlc3VtZU9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLnVwZGF0ZUNhY2hlKCl9Y3JlYXRlQ2hhbmdlc09ic2VydmVyKGwpe2lmKCJoaWRpbmciIT09bCl0'@;
put 'aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlICIke2x9Ii5gKTtyZXR1cm4gdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5jcmVhdGVPYnNlcnZlcigpfWNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAobCxhLGQpe3JldHVybiB0aGlzLnJlZ2lzdGVyTWFwKGws'@;
put 'ZnVuY3Rpb24gU1RlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFfbmUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIG1hcCB0eXBlICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3Jl'@;
put 'dHVybiBuZXcoX25lLmdldChjKSkobCl9KGEsZCkpfXJlZ2lzdGVyTWFwKGwsYSl7aWYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmdldChsKSl0aHJvdyBFcnJv'@;
put 'cihgTWFwIHdpdGggbmFtZSAiJHtsfSIgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkLmApO2EgaW5zdGFuY2VvZiBteT90aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTphIGluc3RhbmNlb2YgeGs/dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3Rlcihs'@;
put 'LGEpOnRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk7Y29uc3QgZD10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3JldHVybiBkPjAmJmEuaW5pdChkKSxhfXVucmVnaXN0ZXJNYXAobCl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCksdGhp'@;
put 'cy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCl9dW5yZWdpc3RlckFsbCgpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51'@;
put 'bnJlZ2lzdGVyQWxsKCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpfWdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlW2xdO3JldHVybiBLaShhKT9hOm51bGx9Z2V0UGh5c2ljYWxGcm9tUmVu'@;
put 'ZGVyYWJsZUluZGV4KGwpe2NvbnN0IGE9dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGVbbF07cmV0dXJuIEtpKGEpP2E6bnVsbH1nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChsKXtjb25zdCBhPXRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuZ2V0KGwp'@;
put 'O3JldHVybiBLaShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKSl9Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChsKXtj'@;
put 'b25zdCBhPXRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIEtpKGEpP2E6bnVsbH1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd'@;
put 'O2lmKG51bGw9PT10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpKXJldHVybiBudWxsO2lmKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5oYXMobCkpcmV0dXJuIGw7Y29uc3QgZj1BcnJheS5mcm9tKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUlu'@;
put 'ZGV4ZXNDYWNoZS5rZXlzKCkpO2xldCBfPS0xO3JldHVybiBfPWE+MD9mLmZpbmRJbmRleChUPT5UPmwpOmYucmV2ZXJzZSgpLmZpbmRJbmRleChUPT5UPGwpLC0xPT09Xz9kP3RoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsLWEsITEpOm51bGw6ZltfXX1pbml0VG9MZW5ndGgoKXts'@;
put 'ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTt0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheShsKS5rZXlzKCldLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hl'@;
put 'PVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbml0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbml0KGwpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xs'@;
put 'ZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0'@;
put 'aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpfWZpdFRvTGVuZ3RoKGwpe2NvbnN0IGE9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtpZihsPGEpe2NvbnN0IGQ9Wy4uLkFycmF5KHRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCktbCkua2V5cygpXS5tYXAoaD0+aCtsKTt0aGlzLnJl'@;
put 'bW92ZUluZGV4ZXMoZCl9ZWxzZSB0aGlzLmluc2VydEluZGV4ZXMoYSxsLWEpfWdldEluZGV4ZXNTZXF1ZW5jZSgpe3JldHVybiB0aGlzLmluZGV4ZXNTZXF1ZW5jZS5nZXRWYWx1ZXMoKX1zZXRJbmRleGVzU2VxdWVuY2UobCl7dm9pZCAwPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYo'@;
put 'dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJ1cGRhdGUiKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5zZXRWYWx1ZXMobCksInVwZGF0ZSI9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwKX1nZXROb3RUcmltbWVkSW5kZXhlcygpe3Jl'@;
put 'dHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNUcmltbWVkKGQpKX1nZXROb3RU'@;
put 'cmltbWVkSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3RofWdldE5vdEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5v'@;
put 'dEhpZGRlbkluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNIaWRkZW4oZCkpfWdldE5vdEhpZGRlbkluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKCkubGVuZ3RofWdldFJlbmRlcmFibGVJbmRl'@;
put 'eGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU6dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNI'@;
put 'aWRkZW4oZCkpfWdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5sZW5ndGh9Z2V0TnVtYmVyT2ZJbmRleGVzKCl7cmV0dXJuIHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkubGVuZ3RofW1vdmVJbmRleGVzKGwsYSl7Im51bWJl'@;
put 'ciI9PXR5cGVvZiBsJiYobD1bbF0pO2NvbnN0IGQ9Y3MobCxpZT0+dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChpZSkpLGg9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGY9bC5sZW5ndGgsXz1neSh0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQpLFQ9Xy5maWx0'@;
put 'ZXIoaWU9PiExPT09dGhpcy5pc1RyaW1tZWQoaWUpKTtsZXQgVz1fLmluZGV4T2YoVFtULmxlbmd0aC0xXSkrMTthK2Y8aCYmKFc9Xy5pbmRleE9mKFRbYV0pKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMuc2V0SW5kZXhlc1NlcXVlbmNlKGNWKF8sVyxkKSksdGhpcy5p'@;
put 'bmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aXNIaWRkZW4obCl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4'@;
put 'KGwpfWluc2VydEluZGV4ZXMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKVtsXSxoPUtpKGQpP2Q6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSxmPXRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5jbHVkZXMoZCk/dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5p'@;
put 'bmRleE9mKGQpOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksXz1jcyhuZXcgQXJyYXkoYSkuZmlsbChoKSwoVCxXKT0+VCtXKTt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbnNlcnQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluc2VydChmLF8p'@;
put 'LHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZixfKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZixfKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5'@;
put 'KGYsXyksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9cmVtb3ZlSW5kZXhlcyhsKXt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZShsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9p'@;
put 'ZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygp'@;
put 'fXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkfHx0'@;
put 'aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMo'@;
put 'ITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygp'@;
put 'LHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxvY2FsSG9v'@;
put 'a3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2Vk'@;
put 'fSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVu'@;
put 'Z3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoYSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQoZCxhKX19'@;
put 'Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0'@;
put 'UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpLGg9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChkKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGgsYSl9fX1mdW5jdGlvbiBNbmUoYyl7Y29uc3QgYT0vXihbYS16QS1aXXsyfSktKFthLXpB'@;
put 'LVpdezJ9KSQvLmV4ZWMoYyk7cmV0dXJuIGE/YCR7YVsxXS50b0xvd2VyQ2FzZSgpfS0ke2FbMl0udG9VcHBlckNhc2UoKX1gOmN9ZnVuY3Rpb24geG5lKGMpe0tpKGMpJiZTTihBYWBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7Y30iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQgcmVnaXN0ZXIg'@;
put 'cGFydGljdWxhciBsYW5ndWFnZVx4MjAKICAgIGJlZm9yZSB1c2luZyBpdC4gUmVhZCBtb3JlIGFib3V0IHRoaXMgaXNzdWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfVRhKHZWLE8wKTtjb25zdHtyZWdpc3RlcjpIVGUs'@;
put 'Z2V0VmFsdWVzOk5UZX09cGQoInBocmFzZUZvcm1hdHRlcnMiKTshZnVuY3Rpb24gVlRlKGMsbCl7SFRlKGMsbCl9KCJwbHVyYWxpemUiLGZ1bmN0aW9uIEZUZShjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZOdW1iZXIuaXNJbnRlZ2VyKGwpP2NbbF06Y30pO2NvbnN0IEVuZT0iQ29u'@;
put 'dGV4dE1lbnU6aXRlbXMiLF9WPWAke0VuZX0ubm9JdGVtc2AsYlY9YCR7RW5lfS5pbnNlcnRSb3dBYm92ZWAseVY9YCR7RW5lfS5pbnNlcnRSb3dCZWxvd2Asd1Y9YCR7RW5lfS5pbnNlcnRDb2x1bW5PblRoZUxlZnRgLENWPWAke0VuZX0uaW5zZXJ0Q29sdW1uT25UaGVSaWdodGAsU1Y9YCR7'@;
put 'RW5lfS5yZW1vdmVSb3dgLE1WPWAke0VuZX0ucmVtb3ZlQ29sdW1uYCx4Vj1gJHtFbmV9LnVuZG9gLEVWPWAke0VuZX0ucmVkb2Asa1Y9YCR7RW5lfS5yZWFkT25seWAsQVY9YCR7RW5lfS5jbGVhckNvbHVtbmAsVFY9YCR7RW5lfS5jb3B5YCxEVj1gJHtFbmV9LmNvcHlXaXRoSGVhZGVyc2As'@;
put 'SVY9YCR7RW5lfS5jb3B5V2l0aEdyb3VwSGVhZGVyc2AsTFY9YCR7RW5lfS5jb3B5SGVhZGVyc09ubHlgLFJWPWAke0VuZX0uY3V0YCxPVj1gJHtFbmV9LmZyZWV6ZUNvbHVtbmAsUFY9YCR7RW5lfS51bmZyZWV6ZUNvbHVtbmAsRlY9YCR7RW5lfS5tZXJnZUNlbGxzYCxIVj1gJHtFbmV9LnVu'@;
put 'bWVyZ2VDZWxsc2AsTlY9YCR7RW5lfS5hZGRDb21tZW50YCxWVj1gJHtFbmV9LmVkaXRDb21tZW50YCxCVj1gJHtFbmV9LnJlbW92ZUNvbW1lbnRgLGpWPWAke0VuZX0ucmVhZE9ubHlDb21tZW50YCx6Vj1gJHtFbmV9LmFsaWduYCxVVj1gJHtFbmV9LmFsaWduLmxlZnRgLFpWPWAke0VuZX0u'@;
put 'YWxpZ24uY2VudGVyYCxZVj1gJHtFbmV9LmFsaWduLnJpZ2h0YCxXVj1gJHtFbmV9LmFsaWduLmp1c3RpZnlgLEdWPWAke0VuZX0uYWxpZ24udG9wYCwkVj1gJHtFbmV9LmFsaWduLm1pZGRsZWAscVY9YCR7RW5lfS5hbGlnbi5ib3R0b21gLEtWPWAke0VuZX0uYm9yZGVyc2AsWFY9YCR7RW5l'@;
put 'fS5ib3JkZXJzLnRvcGAsSlY9YCR7RW5lfS5ib3JkZXJzLnJpZ2h0YCxRVj1gJHtFbmV9LmJvcmRlcnMuYm90dG9tYCxlQj1gJHtFbmV9LmJvcmRlcnMubGVmdGAsdEI9YCR7RW5lfS5ib3JkZXJzLnJlbW92ZWAsbkI9YCR7RW5lfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxkUm93YCxyQj1g'@;
put 'JHtFbmV9Lm5lc3RlZEhlYWRlcnMuZGV0YWNoRnJvbVBhcmVudGAsaUI9YCR7RW5lfS5oaWRlQ29sdW1uYCxvQj1gJHtFbmV9LnNob3dDb2x1bW5gLHNCPWAke0VuZX0uaGlkZVJvd2AsYUI9YCR7RW5lfS5zaG93Um93YCwkdT0iRmlsdGVyczoiLHlsPWAkeyR1fWNvbmRpdGlvbnNgLExrPWAk'@;
put 'e3lsfS5ub25lYCxsQj1gJHt5bH0uaXNFbXB0eWAsY0I9YCR7eWx9LmlzTm90RW1wdHlgLHVCPWAke3lsfS5pc0VxdWFsVG9gLGRCPWAke3lsfS5pc05vdEVxdWFsVG9gLGhCPWAke3lsfS5iZWdpbnNXaXRoYCxmQj1gJHt5bH0uZW5kc1dpdGhgLHBCPWAke3lsfS5jb250YWluc2AsZ0I9YCR7'@;
put 'eWx9LmRvZXNOb3RDb250YWluYCxqVGU9YCR7eWx9LmJ5VmFsdWVgLG1CPWAke3lsfS5ncmVhdGVyVGhhbmAsdkI9YCR7eWx9LmdyZWF0ZXJUaGFuT3JFcXVhbFRvYCxfQj1gJHt5bH0ubGVzc1RoYW5gLGJCPWAke3lsfS5sZXNzVGhhbk9yRXF1YWxUb2AseUI9YCR7eWx9LmlzQmV0d2VlbmAs'@;
put 'd0I9YCR7eWx9LmlzTm90QmV0d2VlbmAsQ0I9YCR7eWx9LmFmdGVyYCxTQj1gJHt5bH0uYmVmb3JlYCxNQj1gJHt5bH0udG9kYXlgLHhCPWAke3lsfS50b21vcnJvd2AsRUI9YCR7eWx9Lnllc3RlcmRheWAsa0I9YCR7JHV9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxBQj1gJHskdX1sYWJl'@;
put 'bHMuZmlsdGVyQnlWYWx1ZWAsVEI9YCR7JHV9bGFiZWxzLmNvbmp1bmN0aW9uYCxSaz1gJHskdX1sYWJlbHMuZGlzanVuY3Rpb25gLE9rPWAkeyR1fXZhbHVlcy5ibGFua0NlbGxzYCxEQj1gJHskdX1idXR0b25zLnNlbGVjdEFsbGAsSUI9YCR7JHV9YnV0dG9ucy5jbGVhcmAsTEI9YCR7JHV9'@;
put 'YnV0dG9ucy5va2AsUkI9YCR7JHV9YnV0dG9ucy5jYW5jZWxgLE9CPWAkeyR1fWJ1dHRvbnMucGxhY2Vob2xkZXIuc2VhcmNoYCxQQj1gJHskdX1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYCxGQj1gJHskdX1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxrbmU9e2xhbmd1YWdl'@;
put 'Q29kZToiZW4tVVMiLFtfVl06Ik5vIGF2YWlsYWJsZSBvcHRpb25zIixbYlZdOiJJbnNlcnQgcm93IGFib3ZlIixbeVZdOiJJbnNlcnQgcm93IGJlbG93Iixbd1ZdOiJJbnNlcnQgY29sdW1uIGxlZnQiLFtDVl06Ikluc2VydCBjb2x1bW4gcmlnaHQiLFtTVl06WyJSZW1vdmUgcm93IiwiUmVt'@;
put 'b3ZlIHJvd3MiXSxbTVZdOlsiUmVtb3ZlIGNvbHVtbiIsIlJlbW92ZSBjb2x1bW5zIl0sW3hWXToiVW5kbyIsW0VWXToiUmVkbyIsW2tWXToiUmVhZCBvbmx5IixbQVZdOiJDbGVhciBjb2x1bW4iLFt6Vl06IkFsaWdubWVudCIsW1VWXToiTGVmdCIsW1pWXToiQ2VudGVyIixbWVZdOiJSaWdo'@;
put 'dCIsW1dWXToiSnVzdGlmeSIsW0dWXToiVG9wIixbJFZdOiJNaWRkbGUiLFtxVl06IkJvdHRvbSIsW09WXToiRnJlZXplIGNvbHVtbiIsW1BWXToiVW5mcmVlemUgY29sdW1uIixbS1ZdOiJCb3JkZXJzIixbWFZdOiJUb3AiLFtKVl06IlJpZ2h0IixbUVZdOiJCb3R0b20iLFtlQl06IkxlZnQi'@;
put 'LFt0Ql06IlJlbW92ZSBib3JkZXIocykiLFtOVl06IkFkZCBjb21tZW50IixbVlZdOiJFZGl0IGNvbW1lbnQiLFtCVl06IkRlbGV0ZSBjb21tZW50IixbalZdOiJSZWFkLW9ubHkgY29tbWVudCIsW0ZWXToiTWVyZ2UgY2VsbHMiLFtIVl06IlVubWVyZ2UgY2VsbHMiLFtUVl06IkNvcHkiLFtE'@;
put 'Vl06WyJDb3B5IHdpdGggaGVhZGVyIiwiQ29weSB3aXRoIGhlYWRlcnMiXSxbSVZdOlsiQ29weSB3aXRoIGdyb3VwIGhlYWRlciIsIkNvcHkgd2l0aCBncm91cCBoZWFkZXJzIl0sW0xWXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtSVl06IkN1dCIsW25CXToi'@;
put 'SW5zZXJ0IGNoaWxkIHJvdyIsW3JCXToiRGV0YWNoIGZyb20gcGFyZW50IixbaUJdOlsiSGlkZSBjb2x1bW4iLCJIaWRlIGNvbHVtbnMiXSxbb0JdOlsiU2hvdyBjb2x1bW4iLCJTaG93IGNvbHVtbnMiXSxbc0JdOlsiSGlkZSByb3ciLCJIaWRlIHJvd3MiXSxbYUJdOlsiU2hvdyByb3ciLCJT'@;
put 'aG93IHJvd3MiXSxbTGtdOiJOb25lIixbbEJdOiJJcyBlbXB0eSIsW2NCXToiSXMgbm90IGVtcHR5IixbdUJdOiJJcyBlcXVhbCB0byIsW2RCXToiSXMgbm90IGVxdWFsIHRvIixbaEJdOiJCZWdpbnMgd2l0aCIsW2ZCXToiRW5kcyB3aXRoIixbcEJdOiJDb250YWlucyIsW2dCXToiRG9lcyBu'@;
put 'b3QgY29udGFpbiIsW21CXToiR3JlYXRlciB0aGFuIixbdkJdOiJHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iLFtfQl06Ikxlc3MgdGhhbiIsW2JCXToiTGVzcyB0aGFuIG9yIGVxdWFsIHRvIixbeUJdOiJJcyBiZXR3ZWVuIixbd0JdOiJJcyBub3QgYmV0d2VlbiIsW0NCXToiQWZ0ZXIiLFtT'@;
put 'Ql06IkJlZm9yZSIsW01CXToiVG9kYXkiLFt4Ql06IlRvbW9ycm93IixbRUJdOiJZZXN0ZXJkYXkiLFtPa106IkJsYW5rIGNlbGxzIixba0JdOiJGaWx0ZXIgYnkgY29uZGl0aW9uIixbQUJdOiJGaWx0ZXIgYnkgdmFsdWUiLFtUQl06IkFuZCIsW1JrXToiT3IiLFtEQl06IlNlbGVjdCBhbGwi'@;
put 'LFtJQl06IkNsZWFyIixbTEJdOiJPSyIsW1JCXToiQ2FuY2VsIixbT0JdOiJTZWFyY2giLFtQQl06IlZhbHVlIixbRkJdOiJTZWNvbmQgdmFsdWUifSx6VGU9VixIQj1rbmUubGFuZ3VhZ2VDb2RlLHtyZWdpc3RlcjpVVGUsZ2V0SXRlbTpBbmUsaGFzSXRlbTpaVGUsZ2V0VmFsdWVzOllUZX09'@;
put 'cGQoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpO2Z1bmN0aW9uIFRuZShjLGwpe2xldCBhPWMsZD1sO3JldHVybiB1cyhjKSYmKGQ9YyxhPWQubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiBXVGUoYyxsKXtjIT09SEImJmZ1bmN0aW9uIFBUZShjLGwpe2RzKGwsKGEsZCk9PntMYShjW2RdKSYmKGNb'@;
put 'ZF09YSl9KX0obCxBbmUoSEIpKX0oYSxkKSxVVGUoYSx5dShkKSkseXUoZCl9ZnVuY3Rpb24gRG5lKGMpe3JldHVybiBOQihjKT95dShBbmUoYykpOm51bGx9ZnVuY3Rpb24gTkIoYyl7cmV0dXJuIFpUZShjKX1mdW5jdGlvbiBJbmUoYyxsLGEpe2NvbnN0IGQ9RG5lKGMpO2lmKG51bGw9PT1k'@;
put 'KXJldHVybiBudWxsO2NvbnN0IGg9ZFtsXTtpZihMYShoKSlyZXR1cm4gbnVsbDtjb25zdCBmPWZ1bmN0aW9uICRUZShjLGwpe2xldCBhPWM7cmV0dXJuIERuKGZ1bmN0aW9uIEJUZSgpe3JldHVybiBOVGUoKX0oKSxkPT57YT1kKGMsbCl9KSxhfShoLGEpO3JldHVybiBBcnJheS5pc0FycmF5'@;
put 'KGYpP2ZbMF06Zn1UbmUoa25lKTtjb25zdCBQaz0iYWN0aXZlLWhlYWRlciIsRms9ImFyZWEiLGJ5PSJjZWxsIixWQj0iZmlsbCIseXk9ImhlYWRlciIsQkI9ImN1c3RvbS1zZWxlY3Rpb24iLFFUZT1jbGFzcyBKVGV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnNldHRpbmdzPWwsdGhpcy5jZWxs'@;
put 'UmFuZ2U9YXx8bnVsbCx0aGlzLmluc3RhbmNlQm9yZGVycz17fSx0aGlzLmNsYXNzTmFtZXM9W3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lXSx0aGlzLmNsYXNzTmFtZUdlbmVyYXRvcj10aGlzLmxpbmVhckNsYXNzTmFtZUdlbmVyYXRvcih0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNl'@;
put 'dHRpbmdzLmxheWVyTGV2ZWwpfWdldEJvcmRlcihsKXtyZXR1cm4gdGhpcy5pbnN0YW5jZUJvcmRlcnNbbC5ndWlkXXx8KHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF09bmV3IGNsYXNzIEtUZXtjb25zdHJ1Y3RvcihsLGEpe2EmJih0aGlzLmV2ZW50TWFuYWdlcj1sLmV2ZW50TWFuYWdl'@;
put 'cix0aGlzLmluc3RhbmNlPWwsdGhpcy53b3Q9bCx0aGlzLnNldHRpbmdzPWEsdGhpcy5tb3VzZURvd249ITEsdGhpcy5tYWluPW51bGwsdGhpcy50b3A9bnVsbCx0aGlzLmJvdHRvbT1udWxsLHRoaXMuc3RhcnQ9bnVsbCx0aGlzLmVuZD1udWxsLHRoaXMudG9wU3R5bGU9bnVsbCx0aGlzLmJv'@;
put 'dHRvbVN0eWxlPW51bGwsdGhpcy5zdGFydFN0eWxlPW51bGwsdGhpcy5lbmRTdHlsZT1udWxsLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlPXt3aWR0aDoiNnB4IixoZWlnaHQ6IjZweCIsYm9yZGVyV2lkdGg6IjFweCIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjoiI0ZGRiJ9LHRo'@;
put 'aXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQ9LXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhhKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lz'@;
put 'dGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3Vz'@;
put 'ZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBhPTAsZD10aGlzLm1haW4uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdLCJtb3VzZWVudGVyIixmPT50aGlzLm9uTW91c2VF'@;
put 'bnRlcihmLHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdKSl9b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0hMH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIobCxhKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVy'@;
put 'T25Nb3VzZURvd25PdmVyIikpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx2MihsKTtjb25zdCBkPXRoaXMsaD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keSxmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24gVChXKXsoZnVuY3Rpb24gXyhXKXtpZihXLmNsaWVudFk8TWF0aC5mbG9vcihmLnRvcCl8fFcuY2xpZW50WT5NYXRoLmNlaWwoZi50b3ArZi5oZWlnaHQpfHxXLmNsaWVudFg8TWF0aC5mbG9vcihmLmxlZnQpfHxXLmNsaWVudFg+'@;
put 'TWF0aC5jZWlsKGYubGVmdCtmLndpZHRoKSlyZXR1cm4hMH0pKFcpJiYoZC5ldmVudE1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLFQpLGEuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnMobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMu'@;
put 'd290O3RoaXMubWFpbj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnN0IGQ9WyJ0b3AiLCJzdGFydCIsImJvdHRvbSIsImVuZCIsImNvcm5lciJdO2xldCBoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9MCxoLmxlZnQ9MDtmb3IobGV0IFQ9MDtUPDU7VCsr'@;
put 'KXtjb25zdCBXPWRbVF0saWU9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZS5jbGFzc05hbWU9YHd0Qm9yZGVyICR7dGhpcy5zZXR0aW5ncy5jbGFzc05hbWV8fCIifWAsdGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS5oaWRlJiYoaWUuY2xhc3NOYW1lKz0iIGhpZGRlbiIpLGg9'@;
put 'aWUuc3R5bGUsaC5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS5jb2xvcj90aGlzLnNldHRpbmdzW1ddLmNvbG9yOmwuYm9yZGVyLmNvbG9yLGguaGVpZ2h0PXRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10ud2lkdGg/YCR7dGhpcy5z'@;
put 'ZXR0aW5nc1tXXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lkdGh9cHhgLGgud2lkdGg9dGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW1ddLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsdGhpcy5tYWluLmFwcGVuZENoaWxk'@;
put 'KGllKX10aGlzLnRvcD10aGlzLm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5vZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5vZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGlsZE5vZGVzWzNdLHRoaXMudG9wU3R5bGU9dGhpcy50b3Au'@;
put 'c3R5bGUsdGhpcy5zdGFydFN0eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRvbS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxlLHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5vZGVzWzRdLHRoaXMuY29ybmVyLmNsYXNzTmFtZSs9IiBj'@;
put 'b3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmhlaWdodD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsdGhpcy5jb3JuZXJTdHls'@;
put 'ZS5ib3JkZXI9W3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIgIiksbTIoKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFu'@;
put 'ZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTpmfT10aGlzLndvdDtsZXQgXz1mLmJvcmRlcnNIb2xkZXI7X3x8KF89YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxfLmNsYXNzTmFtZT0iaHRCb3JkZXJzIixmLmJvcmRlcnNIb2xkZXI9XyxmLnNwcmVhZGVyLmFwcGVuZENoaWxk'@;
put 'KF8pKSxfLmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy53b3Q7dGhpcy5zZWxlY3Rpb25IYW5kbGVzPXt0b3A6bC5jcmVhdGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmwuY3JlYXRlRWxl'@;
put 'bWVudCgiRElWIiksYm90dG9tOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRoaXMu'@;
put 'c2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJvdHRv'@;
put 'bVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM9'@;
put 'e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLnN0eWxlLHRvcEhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uc3R5bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMu'@;
put 'Ym90dG9tSGl0QXJlYS5zdHlsZX0sZHMoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiI0MHB4Iix3aWR0aDoiNDBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDQwLzEuNSwxMCl9cHhgfSwoXyxUKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJl'@;
put 'YVtUXT1fLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYVtUXT1ffSksZHMoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiIxMHB4Iix3aWR0aDoiMTBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDEwLzEuNSwxMCl9cHhgLGJhY2tncm91bmQ6IiNGNUY1'@;
put 'RkYiLGJvcmRlcjoiMXB4IHNvbGlkICM0Mjg1YzgifSwoXyxUKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW1RdPV8sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbVF09X30pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMu'@;
put 'dG9wKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhp'@;
put 'dEFyZWEpfWlzUGFydFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLndvdC5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpO3JldHVybiEoIWQuY2VsbFJhbmdlfHxsPT09ZC5jZWxsUmFuZ2UudG8ucm93JiZhPT09ZC5jZWxsUmFuZ2UudG8uY29sKX11cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhh'@;
put 'bmRsZXNQb3NpdGlvbihsLGEsZCxoLGYsXyl7Y29uc3QgVz10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0Iix7dG9wOmllLHRvcEhpdEFyZWE6cGUsYm90dG9tOndlLGJvdHRvbUhpdEFyZWE6RWV9PXRoaXMuc2VsZWN0aW9uSGFuZGxlcy5z'@;
put 'dHlsZXMsWmU9cGFyc2VJbnQoaWUuYm9yZGVyV2lkdGgsMTApLGl0PXBhcnNlSW50KGllLndpZHRoLDEwKSxldD1wYXJzZUludChwZS53aWR0aCwxMCkseXQ9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0aCgpLEV0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7aWUudG9wPWAke3BhcnNl'@;
put 'SW50KGQtaXQtMSwxMCl9cHhgLGllW1ddPWAke3BhcnNlSW50KGgtaXQtMSwxMCl9cHhgLHBlLnRvcD1gJHtwYXJzZUludChkLWV0LzQqMywxMCl9cHhgLHBlW1ddPWAke3BhcnNlSW50KGgtZXQvNCozLDEwKX1weGA7Y29uc3QgU3Q9TWF0aC5taW4ocGFyc2VJbnQoaCtmLDEwKSx5dC1pdC0y'@;
put 'KlplKSxKdD1NYXRoLm1pbihwYXJzZUludChoK2YtZXQvNCwxMCkseXQtZXQtMipaZSk7d2VbV109YCR7U3R9cHhgLEVlW1ddPWAke0p0fXB4YDtjb25zdCBubj1NYXRoLm1pbihwYXJzZUludChkK18sMTApLEV0LWl0LTIqWmUpLHZuPU1hdGgubWluKHBhcnNlSW50KGQrXy1ldC80LDEwKSxF'@;
put 'dC1ldC0yKlplKTt3ZS50b3A9YCR7bm59cHhgLEVlLnRvcD1gJHt2bn1weGAsdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpPyhpZS5kaXNwbGF5PSJibG9jayIscGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaXNQ'@;
put 'YXJ0UmFuZ2UobCxhKT8od2UuZGlzcGxheT0ibm9uZSIsRWUuZGlzcGxheT0ibm9uZSIpOih3ZS5kaXNwbGF5PSJibG9jayIsRWUuZGlzcGxheT0iYmxvY2siKSk6KGllLmRpc3BsYXk9Im5vbmUiLHdlLmRpc3BsYXk9Im5vbmUiLHBlLmRpc3BsYXk9Im5vbmUiLEVlLmRpc3BsYXk9Im5vbmUi'@;
put 'KSxsPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKXx8YT09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT8oaWUuekluZGV4PSI5OTk5IixwZS56SW5kZXg9Ijk5OTkiKTooaWUuekluZGV4PSIiLHBlLnpJ'@;
put 'bmRleD0iIil9YXBwZWFyKGwpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2NvbnN0e3d0VGFibGU6YSxyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMud290O2xldCBmLF8sVCxXLGllLHBlO2NvbnN0IHdlPWEuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtmb3IobGV0IF9yPTA7X3I8'@;
put 'd2U7X3IrPTEpe2NvbnN0IHZ0PWEucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoX3IpO2lmKHZ0Pj1sWzBdJiZ2dDw9bFsyXSl7Zj12dCxpZT1sWzBdO2JyZWFrfX1mb3IobGV0IF9yPXdlLTE7X3I+PTA7X3ItPTEpe2NvbnN0IHZ0PWEucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoX3Ip'@;
put 'O2lmKHZ0Pj1sWzBdJiZ2dDw9bFsyXSl7Xz12dDticmVha319Y29uc3QgRWU9YS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgX3I9MDtfcjxFZTtfcis9MSl7Y29uc3QgdnQ9YS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShfcik7aWYodnQ+PWxbMV0mJnZ0PD1sWzNd'@;
put 'KXtUPXZ0LHBlPWxbMV07YnJlYWt9fWZvcihsZXQgX3I9RWUtMTtfcj49MDtfci09MSl7Y29uc3QgdnQ9YS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShfcik7aWYodnQ+PWxbMV0mJnZ0PD1sWzNdKXtXPXZ0O2JyZWFrfX1pZih2b2lkIDA9PT1mfHx2b2lkIDA9PT1UKXJldHVybiB2'@;
put 'b2lkIHRoaXMuZGlzYXBwZWFyKCk7bGV0IFplPWEuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGYsVCkpO2NvbnN0IGl0PWYhPT1ffHxUIT09VyxldD1pdD9hLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhfLFcpKTpaZSx5dD1LbChaZSksRXQ9aXQ/S2woZXQp'@;
put 'Onl0LFN0PUtsKGEuVEFCTEUpLEp0PXdhKGEuVEFCTEUpLG5uPXl0LnRvcCx2bj15dC5sZWZ0LE5uPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCBjcj0wLElyPTA7aWYoTm4pe2NvbnN0IF9yPXdhKFplKTtJcj12bitfci1FdC5sZWZ0LGNyPWguaW5uZXJX'@;
put 'aWR0aC12bi1fci0oaC5pbm5lcldpZHRoLVN0LmxlZnQtSnQpLTF9ZWxzZSBJcj1FdC5sZWZ0K3dhKGV0KS12bixjcj12bi1TdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGYsXykpe2NvbnN0IF9yPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMi'@;
put 'LFQsVyxpZSxTdCk7bGV0IHZ0PW51bGw7X3ImJihbdnQsY3IsSXJdPV9yKSx2dCYmKFplPXZ0KX1sZXQgRWk9bm4tU3QudG9wLTEsSWk9RXQudG9wK2FsKGV0KS1ubjtpZih0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoVCxXKSl7Y29uc3QgX3I9dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRl'@;
put 'cigicm93cyIsZixfLHBlLFN0KTtsZXQgdnQ9bnVsbDtfciYmKFt2dCxFaSxJaV09X3IpLHZ0JiYoWmU9dnQpfWNvbnN0IGZyPXpwKFplLGgpO3BhcnNlSW50KGZyLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoRWkrPTEsSWk9SWk+MD9JaS0xOjApLHBhcnNlSW50KGZyW05uPyJib3JkZXJSaWdo'@;
put 'dFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJihjcis9MSxJcj1Jcj4wP0lyLTE6MCk7Y29uc3QgaWk9Tm4/InJpZ2h0IjoibGVmdCI7dGhpcy50b3BTdHlsZS50b3A9YCR7RWl9cHhgLHRoaXMudG9wU3R5bGVbaWldPWAke2NyfXB4YCx0aGlzLnRvcFN0eWxlLndpZHRoPWAke0ly'@;
put 'fXB4YCx0aGlzLnRvcFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPWAke0VpfXB4YCx0aGlzLnN0YXJ0U3R5bGVbaWldPWAke2NyfXB4YCx0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0PWAke0lpfXB4YCx0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0'@;
put 'IGpyPU1hdGguZmxvb3IodGhpcy5zZXR0aW5ncy5ib3JkZXIud2lkdGgvMik7dGhpcy5ib3R0b21TdHlsZS50b3A9RWkrSWktanIrInB4Iix0aGlzLmJvdHRvbVN0eWxlW2lpXT1gJHtjcn1weGAsdGhpcy5ib3R0b21TdHlsZS53aWR0aD1gJHtJcn1weGAsdGhpcy5ib3R0b21TdHlsZS5kaXNw'@;
put 'bGF5PSJibG9jayIsdGhpcy5lbmRTdHlsZS50b3A9YCR7RWl9cHhgLHRoaXMuZW5kU3R5bGVbaWldPWNyK0lyLWpyKyJweCIsdGhpcy5lbmRTdHlsZS5oZWlnaHQ9YCR7SWkrMX1weGAsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJibG9jayI7bGV0IE9uPXRoaXMuc2V0dGluZ3MuYm9yZGVyLmNv'@;
put 'cm5lclZpc2libGU7T249ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uKHRoaXMuc2V0dGluZ3MubGF5ZXJMZXZlbCk6T247Y29uc3QgRnI9dGhpcy53b3QuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixfLFcpO2xldFtRbixNcl09W18sV107aWYoRnImJkFycmF5LmlzQXJyYXko'@;
put 'RnIpJiYoWywsUW4sTXJdPUZyKSxtMigpfHwhT258fHRoaXMuaXNQYXJ0UmFuZ2UoUW4sTXIpKXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7ZWxzZXt0aGlzLmNvcm5lclN0eWxlLnRvcD1FaStJaSt0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTErInB4Iix0aGlzLmNvcm5l'@;
put 'clN0eWxlW2lpXT1jcitJcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTErInB4Iix0aGlzLmNvcm5lclN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRT'@;
put 'dHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBfcj12ZyhhLlRBQkxFKTtjb25zdCB2dD1fcj09PWg7dnQmJihfcj1kLmRvY3VtZW50RWxlbWVudCk7Y29uc3QgT3Q9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsY249cGFy'@;
put 'c2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yO2lmKFc9PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKXtjb25zdCBFbj12dD9ldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OmV0Lm9mZnNldExlZnQ7bGV0IFBuPSExLEpuPTA7Tm4/'@;
put 'KEpuPUVuLXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLFBuPUpuPDApOihKbj1Fbit3YShldCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsUG49Sm4+PWl5KF9yKSksUG4mJih0aGlzLmNvcm5lclN0eWxlW2lpXT1gJHtN'@;
put 'YXRoLmZsb29yKGNyK0lyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtT3QpfXB4YCx0aGlzLmNvcm5lclN0eWxlW05uPyJib3JkZXJMZWZ0V2lkdGgiOiJib3JkZXJSaWdodFdpZHRoIl09MCl9Xz09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEmJih2dD9ldC5nZXRC'@;
put 'b3VuZGluZ0NsaWVudFJlY3QoKS50b3A6ZXQub2Zmc2V0VG9wKSthbChldCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yPj1qZihfcikmJih0aGlzLmNvcm5lclN0eWxlLnRvcD1gJHtNYXRoLmZsb29yKEVpK0lpK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRP'@;
put 'ZmZzZXQtY24pfXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPTApLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0iYmxvY2sifW0yKCkmJnRoaXMudXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24oXyxXLEVpLGNyLElyLElpKX1pc0VudGlyZUNvbHVt'@;
put 'blNlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNFbnRpcmVSb3dTZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRG'@;
put 'aXJzdFJlbmRlcmVkQ29sdW1uKCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWdldERpbWVuc2lvbnNGcm9tSGVhZGVyKGwsYSxkLGgsZil7Y29uc3R7d3RUYWJsZTpffT10aGlzLndvdCxUPV8ud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2xldCBXPW51'@;
put 'bGwsaWU9bnVsbCxwZT1udWxsLHdlPW51bGwsRWU9bnVsbCxaZT1udWxsLGl0PW51bGwsZXQ9bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpXPWZ1bmN0aW9uKCl7cmV0dXJuIF8uZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LGllPWZ1bmN0aW9uKCl7cmV0dXJuIGFsKC4uLmFyZ3VtZW50'@;
put 'cyl9LHBlPSJodF9fc2VsZWN0aW9uLS1yb3dzIixaZT0idG9wIjticmVhaztjYXNlImNvbHVtbnMiOlc9ZnVuY3Rpb24oKXtyZXR1cm4gXy5nZXRDb2x1bW5IZWFkZXIoLi4uYXJndW1lbnRzKX0saWU9ZnVuY3Rpb24oKXtyZXR1cm4gd2EoLi4uYXJndW1lbnRzKX0scGU9Imh0X19zZWxlY3Rp'@;
put 'b24tLWNvbHVtbnMiLFplPSJsZWZ0In1pZihULmNsYXNzTGlzdC5jb250YWlucyhwZSkpe2NvbnN0IHl0PXRoaXMud290LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoaXQ9VyhhLHl0LWgpLGV0PVcoZCx5dC1oKSwhaXR8fCFldClyZXR1cm4hMTtjb25zdCBFdD1LbChp'@;
put 'dCksU3Q9S2woZXQpO3JldHVybiBpdCYmZXQmJih3ZT1FdFtaZV0tZltaZV0tMSxFZT1TdFtaZV0raWUoZXQpLUV0W1plXSksW2l0LHdlLEVlXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxoPWFbbF07IWh8fGguaGlkZT9waSh0aGlzW2xd'@;
put 'LCJoaWRkZW4iKTooQm8odGhpc1tsXSwiaGlkZGVuIikmJldvKHRoaXNbbF0sImhpZGRlbiIpLGQuYmFja2dyb3VuZENvbG9yPWguY29sb3IsKCJ0b3AiPT09bHx8ImJvdHRvbSI9PT1sKSYmKGQuaGVpZ2h0PWAke2gud2lkdGh9cHhgKSwoInN0YXJ0Ij09PWx8fCJlbmQiPT09bCkmJihkLndp'@;
put 'ZHRoPWAke2gud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCl7Y29uc3QgZD10aGlzW2xdLnN0eWxlO2QuYmFja2dyb3VuZENvbG9yPSIjMDAwIixkLndpZHRoPSIxcHgiLGQuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKGwsYSl7dGhpcy5jaGFuZ2VCb3Jk'@;
put 'ZXJUb0RlZmF1bHRTdHlsZShsKSxhP3BpKHRoaXNbbF0sImhpZGRlbiIpOldvKHRoaXNbbF0sImhpZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9u'@;
put 'ZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLG0yKCkmJih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxh'@;
put 'eT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVu'@;
put 'dHNPbmx5KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19KGwsdGhpcy5zZXR0aW5ncykpLHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF19aXNFbXB0eSgpe3JldHVybiBudWxsPT09dGhpcy5jZWxsUmFuZ2V9YWRkKGwpe3JldHVybiB0aGlzLmlzRW1w'@;
put 'dHkoKT90aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLmNlbGxSYW5nZS5leHBhbmQobCksdGhpc31yZXBsYWNlKGwsYSl7aWYoIXRoaXMuaXNFbXB0eSgpKXtpZih0aGlzLmNlbGxSYW5nZS5mcm9tLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2Vs'@;
put 'bFJhbmdlLmZyb209YSwhMDtpZih0aGlzLmNlbGxSYW5nZS50by5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS50bz1hLCEwfXJldHVybiExfWNsZWFyKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGwsdGhpc31nZXRDb3JuZXJzKCl7Y29uc3QgbD10aGlzLmNlbGxSYW5nZS5n'@;
put 'ZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19YWRkQ2xhc3NBdENvb3JkcyhsLGEsZCxoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1s0XSYmYXJndW1lbnRzWzRdO2NvbnN0IF89bC53dFRhYmxlLmdldENlbGwodGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpO2lmKCJvYmplY3QiPT10eXBlb2YgXyl7bGV0IFQ9aDtmJiYoVD10aGlzLmNsYXNzTmFtZUdlbmVyYXRvcihfKSx0aGlzLmNsYXNzTmFtZXMu'@;
put 'aW5jbHVkZXMoVCl8fHRoaXMuY2xhc3NOYW1lcy5wdXNoKFQpKSxwaShfLFQpfXJldHVybiB0aGlzfWxpbmVhckNsYXNzTmFtZUdlbmVyYXRvcihsLGEpe3JldHVybiBmdW5jdGlvbiBkKGgpe2xldCBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50'@;
put 'c1sxXTotMTtpZigwPT09YXx8MD09PWYpcmV0dXJuIGw7bGV0IF89Zj49MD9mOmEsVD1sO3JldHVybiBfLT0xLFQ9Qm8oaCwwPT09Xz9sOmAke2x9LSR7X31gKT9gJHtsfS0ke18rMX1gOmQoaCxfKSxUfX1kcmF3KGwpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiB2b2lkKHRoaXMuc2V0dGlu'@;
put 'Z3MuYm9yZGVyJiZ0aGlzLmdldEJvcmRlcihsKS5kaXNhcHBlYXIoKSk7Y29uc3QgYT1sLnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxkPWwud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLGg9dGhpcy5nZXRDb3JuZXJzKCksW2YsXyxULFddPWgse2hpZ2hsaWdodEhl'@;
put 'YWRlckNsYXNzTmFtZTppZSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6cGUsaGlnaGxpZ2h0Um93Q2xhc3NOYW1lOndlLGhpZ2hsaWdodE9ubHlDbG9zZXN0SGVhZGVyOkVlLHNlbGVjdGlvblR5cGU6WmV9PXRoaXMuc2V0dGluZ3MsaXQ9dm9pZCAwPT09WmV8fFsiYWN0aXZlLWhlYWRlciIs'@;
put 'ImhlYWRlciJdLmluY2x1ZGVzKFplKTtpZihpdCYmbnVsbCE9PV8mJm51bGwhPT1XKXtsZXQgZXQ9MDtmb3IobGV0IHl0PTA7eXQ8ZDt5dCs9MSl7Y29uc3QgRXQ9bC53dFRhYmxlLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHl0KTtpZihFdD49XyYmRXQ8PVcpe2xldCBTdD1sLnd0'@;
put 'VGFibGUuZ2V0Q29sdW1uSGVhZGVycyhFdCk7Y29uc3QgSnQ9U3QubGVuZ3RoLTE7RWUmJlN0Lmxlbmd0aD4xJiYoU3Q9W1N0W0p0XV0pO2ZvcihsZXQgbm49MDtubjxTdC5sZW5ndGg7bm4rPTEpe2NvbnN0IHZuPVtdO2xldCBObj1TdFtubl07aWUmJnZuLnB1c2goaWUpLHBlJiZ2bi5wdXNo'@;
put 'KHBlKSxubj1FZT9KdDpubjtjb25zdCBjcj1sLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixFdCxubix7c2VsZWN0aW9uVHlwZTpaZSxjb2x1bW5DdXJzb3I6ZXQsc2VsZWN0aW9uV2lkdGg6Vy1fKzEsY2xhc3NOYW1lczp2bn0pO2NyIT09RXQmJihObj1s'@;
put 'Lnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKGNyLG5uKSkscGkoTm4sdm4pfWV0Kz0xfX19aWYobnVsbCE9PWYmJm51bGwhPT1UKXtsZXQgZXQ9MDtmb3IobGV0IHl0PTA7eXQ8YTt5dCs9MSl7Y29uc3QgRXQ9bC53dFRhYmxlLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHl0KTtpZihpdCYm'@;
put 'RXQ+PWYmJkV0PD1UKXtsZXQgU3Q9bC53dFRhYmxlLmdldFJvd0hlYWRlcnMoRXQpO2NvbnN0IEp0PVN0Lmxlbmd0aC0xO0VlJiZTdC5sZW5ndGg+MSYmKFN0PVtTdFtKdF1dKTtmb3IobGV0IG5uPTA7bm48U3QubGVuZ3RoO25uKz0xKXtjb25zdCB2bj1bXTtsZXQgTm49U3Rbbm5dO2llJiZ2'@;
put 'bi5wdXNoKGllKSx3ZSYmdm4ucHVzaCh3ZSksbm49RWU/SnQ6bm47Y29uc3QgY3I9bC5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsRXQsbm4se3NlbGVjdGlvblR5cGU6WmUscm93Q3Vyc29yOmV0LHNlbGVjdGlvbkhlaWdodDpULWYrMSxjbGFzc05hbWVzOnZu'@;
put 'fSk7Y3IhPT1FdCYmKE5uPWwud3RUYWJsZS5nZXRSb3dIZWFkZXIoY3Isbm4pKSxwaShObix2bil9ZXQrPTF9aWYobnVsbCE9PV8mJm51bGwhPT1XKWZvcihsZXQgU3Q9MDtTdDxkO1N0Kz0xKXtjb25zdCBKdD1sLnd0VGFibGUuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoU3QpO0V0'@;
put 'Pj1mJiZFdDw9VCYmSnQ+PV8mJkp0PD1XP3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxFdCxKdCx0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNldHRpbmdzLm1hcmtJbnRlcnNlY3Rpb25zKTpFdD49ZiYmRXQ8PVQ/d2UmJnRoaXMuYWRkQ2xh'@;
put 'c3NBdENvb3JkcyhsLEV0LEp0LHdlKTpKdD49XyYmSnQ8PVcmJnBlJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxFdCxKdCxwZSk7Y29uc3Qgbm49bC5nZXRTZXR0aW5nKCJvbkFmdGVyRHJhd1NlbGVjdGlvbiIsRXQsSnQsdGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTsic3RyaW5nIj09dHlw'@;
put 'ZW9mIG5uJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxFdCxKdCxubil9fX1sLmdldFNldHRpbmcoIm9uQmVmb3JlRHJhd0JvcmRlcnMiLGgsdGhpcy5zZXR0aW5ncy5jbGFzc05hbWUpLHRoaXMuc2V0dGluZ3MuYm9yZGVyJiZ0aGlzLmdldEJvcmRlcihsKS5hcHBlYXIoaCl9ZGVzdHJveSgp'@;
put 'e09iamVjdC52YWx1ZXModGhpcy5pbnN0YW5jZUJvcmRlcnMpLmZvckVhY2gobD0+bC5kZXN0cm95KCkpfX07Y29uc3QgaDc9Y2xhc3MgckRlIGV4dGVuZHMgUVRle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxudWxsKSxmdW5jdGlvbiBlRGUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHRE'@;
put 'ZShjKXt2YXIgbD1mdW5jdGlvbiBuRGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly'@;
put 'ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0o'@;
put 'bCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1hfHxudWxsLHRoaXMuY29t'@;
put 'bWl0KCl9YWRkKGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy52aXN1YWxD'@;
put 'ZWxsUmFuZ2U9bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhkLC0xKTtpZihudWxsPT09'@;
put 'aHx8bnVsbD09PWYpcmV0dXJuIG51bGw7aWYoaC5yb3c+Zi5yb3d8fGguY29sPmYuY29sKXtpZigiaGVhZGVyIiE9PXRoaXMuc2V0dGluZ3MudHlwZSYmImFjdGl2ZS1oZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlKXJldHVybiBudWxsO2g9YSxmPWR9cmV0dXJuIHRoaXMuc2V0dGluZ3Mu'@;
put 'Y3JlYXRlQ2VsbFJhbmdlKGgsaCxmKX1nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRp'@;
put 'bmdzLnJvd0luZGV4TWFwcGVyKCksbC5yb3csYSk7aWYobnVsbD09PWgpcmV0dXJuIG51bGw7Y29uc3QgZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLmNvbHVtbkluZGV4TWFwcGVyKCksbC5jb2wsZCk7cmV0dXJuIG51bGw9PT1mP251bGw6dGhpcy5zZXR0'@;
put 'aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSxkKXtpZihhPDApcmV0dXJuIGE7Y29uc3QgaD1sLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGQpO3JldHVybiJoZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlJiYiYWN0aXZlLWhlYWRl'@;
put 'ciIhPT10aGlzLnNldHRpbmdzLnR5cGV8fG51bGwhPT1oP2g6LTF9Y29tbWl0KCl7aWYobnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlKXJldHVybiB0aGlzO2NvbnN0IGw9dGhpcy50cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkodGhpcy52aXN1YWxDZWxsUmFuZ2UpO3JldHVybiB0aGlz'@;
put 'LmNlbGxSYW5nZT1udWxsPT09bD9udWxsOnRoaXMuY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLmZyb20sbC50byksdGhpc31zeW5jV2l0aChsKXtjb25zdCBhPSJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsZD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlv'@;
put 'bigpPzE6LTEsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMobC5mcm9tLmNsb25lKCkubm9ybWFsaXplKCksYSxkKTtpZihudWxsIT09aCYmbC5vdmVybGFwcyhoKSl7aWYobnVsbD09PXRoaXMuY2VsbFJhbmdlKXtjb25zdCBmPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJh'@;
put 'YmxlQ29vcmRzKGgpO3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGYpfXJldHVybiBsLnNldEhpZ2hsaWdodChoKSx0aGlzfXJldHVybiBsLnNldEhpZ2hsaWdodChsLmZyb20pLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmNl'@;
put 'bGxSYW5nZSxkPW51bGw9PT1sLnJvd3x8bnVsbD09PWEucm93LGg9bnVsbD09PWwuY29sfHxudWxsPT09YS5jb2wsZj10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoZD9udWxsOk1hdGgubWluKGwucm93LGEucm93KSxoP251bGw6TWF0aC5taW4obC5jb2wsYS5jb2wpKSxfPXRoaXMu'@;
put 'c2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhkP251bGw6TWF0aC5tYXgobC5yb3csYS5yb3cpLGg/bnVsbDpNYXRoLm1heChsLmNvbCxhLmNvbCkpO3JldHVybltmLnJvdyxmLmNvbCxfLnJvdyxfLmNvbF19Z2V0VmlzdWFsQ29ybmVycygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJh'@;
put 'YmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKSk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1j'@;
put 'cmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxoPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVybiB0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQs'@;
put 'aCl9fSx7cmVnaXN0ZXI6ZjcsZ2V0SXRlbTptRGV9PXBkKCJoaWdobGlnaHQvdHlwZXMiKTtmdW5jdGlvbiBwNyhjLGwpe3JldHVybiBtRGUoYykoe3R5cGU6YywuLi5sfSl9ZjcoUGssZnVuY3Rpb24gaURlKGMpe2xldHthY3RpdmVIZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBu'@;
put 'ZXcgaDcoe2hpZ2hsaWdodEhlYWRlckNsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTpQa30pfSksZjcoRmssZnVuY3Rpb24gc0RlKGMpe2xldHtsYXllckxldmVsOmwsYXJlYUNvcm5lclZpc2libGU6YSwuLi5kfT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiYXJlYSIsbWFya0lu'@;
put 'dGVyc2VjdGlvbnM6ITAsbGF5ZXJMZXZlbDpNYXRoLm1pbihsLDcpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTphfSwuLi5kLHNlbGVjdGlvblR5cGU6Rmt9KX0pLGY3KGJ5LGZ1bmN0aW9uIGxEZShjKXtsZXR7Y2VsbENvcm5lclZpc2libGU6bCwuLi5h'@;
put 'fT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiY3VycmVudCIsYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTpieX0pfSksZjcoQkIsZnVuY3Rpb24gdURlKGMpe2xldHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6'@;
put 'YSwuLi5kfT1jO3JldHVybiBuZXcgaDcoey4uLmwsLi4uZCxzZWxlY3Rpb25UeXBlOkJCfSxhKX0pLGY3KFZCLGZ1bmN0aW9uIGhEZShjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IGg3KHtjbGFzc05hbWU6ImZpbGwiLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiI2ZmMDAwMCJ9LC4uLmwsc2Vs'@;
put 'ZWN0aW9uVHlwZTpWQn0pfSksZjcoeXksZnVuY3Rpb24gcERlKGMpe2xldHtoZWFkZXJDbGFzc05hbWU6bCxyb3dDbGFzc05hbWU6YSxjb2x1bW5DbGFzc05hbWU6ZCwuLi5ofT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiaGlnaGxpZ2h0IixoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6'@;
put 'bCxoaWdobGlnaHRSb3dDbGFzc05hbWU6YSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6ZCwuLi5oLGhpZ2hsaWdodE9ubHlDbG9zZXN0SGVhZGVyOiEwLHNlbGVjdGlvblR5cGU6eXl9KX0pO2NsYXNzIHZEZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bCx0aGlzLmxheWVyTGV2ZWw9'@;
put 'MCx0aGlzLmNlbGw9cDcoYnksbCksdGhpcy5maWxsPXA3KFZCLGwpLHRoaXMuYXJlYXM9bmV3IE1hcCx0aGlzLmhlYWRlcnM9bmV3IE1hcCx0aGlzLmFjdGl2ZUhlYWRlcnM9bmV3IE1hcCx0aGlzLmN1c3RvbVNlbGVjdGlvbnM9W119aXNFbmFibGVkRm9yKGwsYSl7bGV0IGQ9bDtsPT09Ynkm'@;
put 'JihkPSJjdXJyZW50Iik7bGV0IGg9dGhpcy5vcHRpb25zLmRpc2FibGVkQ2VsbFNlbGVjdGlvbihhLnJvdyxhLmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pLCExPT09aHx8QXJyYXkuaXNBcnJheShoKSYmIWguaW5jbHVkZXMoZCl9dXNlTGF5ZXJMZXZlbCgpe3JldHVy'@;
put 'biB0aGlzLmxheWVyTGV2ZWw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsdGhpc31nZXRDZWxsKCl7cmV0dXJuIHRoaXMuY2VsbH1nZXRGaWxsKCl7cmV0dXJuIHRoaXMuZmlsbH1jcmVhdGVPckdldEFyZWEoKXtjb25zdCBsPXRoaXMu'@;
put 'bGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5hcmVhcy5oYXMobCk/YT10aGlzLmFyZWFzLmdldChsKTooYT1wNyhGayx7bGF5ZXJMZXZlbDpsLC4uLnRoaXMub3B0aW9uc30pLHRoaXMuYXJlYXMuc2V0KGwsYSkpLGF9Z2V0QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMo'@;
put 'KV19Y3JlYXRlT3JHZXRIZWFkZXIoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5oZWFkZXJzLmhhcyhsKT9hPXRoaXMuaGVhZGVycy5nZXQobCk6KGE9cDcoeXksey4uLnRoaXMub3B0aW9uc30pLHRoaXMuaGVhZGVycy5zZXQobCxhKSksYX1nZXRIZWFkZXJz'@;
put 'KCl7cmV0dXJuWy4uLnRoaXMuaGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlT3JHZXRBY3RpdmVIZWFkZXIoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5hY3RpdmVIZWFkZXJzLmhhcyhsKT9hPXRoaXMuYWN0aXZlSGVhZGVycy5nZXQobCk6KGE9cDcoUGssey4u'@;
put 'LnRoaXMub3B0aW9uc30pLHRoaXMuYWN0aXZlSGVhZGVycy5zZXQobCxhKSksYX1nZXRBY3RpdmVIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlSGVhZGVycy52YWx1ZXMoKV19Z2V0Q3VzdG9tU2VsZWN0aW9ucygpe3JldHVyblsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVz'@;
put 'KCldfWFkZEN1c3RvbVNlbGVjdGlvbihsKXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaChwNyhCQix7Li4udGhpcy5vcHRpb25zLC4uLmx9KSl9Y2xlYXIoKXt0aGlzLmNlbGwuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIoKSxEbih0aGlzLmFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9'@;
put 'KSxEbih0aGlzLmhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLERuKHRoaXMuYWN0aXZlSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm5bdGhpcy5jZWxsLHRoaXMuZmlsbCwuLi50aGlzLmFyZWFzLnZhbHVlcygpLC4uLnRo'@;
put 'aXMuaGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zXVtTeW1ib2wuaXRlcmF0b3JdKCl9fWNvbnN0IF9EZT12RGU7Y2xhc3MgYkRle2NvbnN0cnVjdG9yKGwpe3RoaXMucmFuZ2VzPVtdLHRoaXMuY3JlYXRlQ2Vs'@;
put 'bFJhbmdlPWx9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5zaXplKCl9c2V0KGwpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31hZGQobCl7cmV0dXJuIHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFu'@;
put 'Z2UobCkpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnBvcCgpLHRoaXN9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KDApfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgoLTEpfWluY2x1ZGVzKGwpe3JldHVybiB0aGlzLnJhbmdlcy5zb21lKGE9PmEu'@;
put 'aW5jbHVkZXMobCkpfWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9cGVla0J5SW5kZXgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtj'@;
put 'b25zdCBhPXRoaXMuc2l6ZSgpK2wtMTtsZXQgZDtyZXR1cm4gYT49MCYmKGQ9dGhpcy5yYW5nZXNbYV0pLGR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCB5RGU9YkRlO2NsYXNzIExuZXtjb25zdHJ1Y3RvcihsLGEpe3Ro'@;
put 'aXMucmFuZ2U9bCx0aGlzLm9wdGlvbnM9YX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD10aGlzLm9wdGlvbnMuY3JlYXRlQ2VsbENvb3JkcyhsLGEpLGY9dGhpcy5yYW5nZS5j'@;
put 'dXJyZW50KCkuaGlnaGxpZ2h0LHtyb3c6Xyxjb2w6VH09dGhpcy5vcHRpb25zLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhmKTtsZXQgVz1mLGllPTAscGU9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixoKSxudWxsIT09XyYmbnVsbCE9PVQpe2xldCB3'@;
put 'ZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCksRWU9dGhpcy5vcHRpb25zLmNvdW50Q29scygpO2NvbnN0IFplPXRoaXMub3B0aW9ucy5maXhlZFJvd3NCb3R0b20oKSxpdD10aGlzLm9wdGlvbnMubWluU3BhcmVSb3dzKCksZXQ9dGhpcy5vcHRpb25zLm1pblNwYXJlQ29scygpLHl0PXRoaXMu'@;
put 'b3B0aW9ucy5hdXRvV3JhcFJvdygpLEV0PXRoaXMub3B0aW9ucy5hdXRvV3JhcENvbCgpO18rbD53ZS0xP2QmJml0PjAmJiEoWmUmJl8+PXdlLVplLTEpPyh0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLHdlKSx3ZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCkpOkV0JiYo'@;
put 'aC5yb3c9MS13ZSxoLmNvbD1UK2guY29sPT09RWUtMT8xLUVlOjEpOkV0JiZfK2gucm93PDAmJlQraC5jb2w+PTAmJihoLnJvdz13ZS0xLGguY29sPVQraC5jb2w9PT0wP0VlLTE6LTEpLFQraC5jb2w+RWUtMT9kJiZldD4wPyh0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUi'@;
put 'LEVlKSxFZT10aGlzLm9wdGlvbnMuY291bnRDb2xzKCkpOnl0JiYoaC5yb3c9XytoLnJvdz09PXdlLTE/MS13ZToxLGguY29sPTEtRWUpOnl0JiZUK2guY29sPDAmJl8raC5yb3c+PTAmJihoLnJvdz1fK2gucm93PT09MD93ZS0xOi0xLGguY29sPUVlLTEpO2NvbnN0IFN0PXRoaXMub3B0aW9u'@;
put 'cy5jcmVhdGVDZWxsQ29vcmRzKF8raC5yb3csVCtoLmNvbCk7aWU9MCxwZT0wLFN0LnJvdzwwPyhpZT0tMSxTdC5yb3c9MCk6U3Qucm93PjAmJlN0LnJvdz49d2UmJihpZT0xLFN0LnJvdz13ZS0xKSxTdC5jb2w8MD8ocGU9LTEsU3QuY29sPTApOlN0LmNvbD4wJiZTdC5jb2w+PUVlJiYocGU9'@;
put 'MSxTdC5jb2w9RWUtMSksVz10aGlzLm9wdGlvbnMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFN0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixXLGllLHBlKSxXfXRyYW5zZm9ybUVuZChsLGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLmNyZWF0ZUNl'@;
put 'bGxDb29yZHMobCxhKSxoPXRoaXMucmFuZ2UuY3VycmVudCgpO2xldCBmPWgudG8sXz0wLFQ9MDt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsZCk7Y29uc3R7cm93OlcsY29sOmllfT10aGlzLm9wdGlvbnMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGguaGlnaGxp'@;
put 'Z2h0KTtpZihudWxsIT09VyYmbnVsbCE9PWllKXtjb25zdCBwZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCksd2U9dGhpcy5vcHRpb25zLmNvdW50Q29scygpLHtyb3c6RWUsY29sOlplfT10aGlzLm9wdGlvbnMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgudG8pLGl0PXRoaXMub3B0aW9u'@;
put 'cy5jcmVhdGVDZWxsQ29vcmRzKEVlK2Qucm93LFplK2QuY29sKTtfPTAsVD0wLGl0LnJvdzwwPyhfPS0xLGl0LnJvdz0wKTppdC5yb3c+MCYmaXQucm93Pj1wZSYmKF89MSxpdC5yb3c9cGUtMSksaXQuY29sPDA/KFQ9LTEsaXQuY29sPTApOml0LmNvbD4wJiZpdC5jb2w+PXdlJiYoVD0xLGl0'@;
put 'LmNvbD13ZS0xKSxmPXRoaXMub3B0aW9ucy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaXQpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtRW5kIixmLF8sVCksZn19VGEoTG5lLE8wKTtjb25zdCB3RGU9TG5lLENEZT1bMywyXSxTRGU9W1sibnVtYmVyIl0sWyJu'@;
put 'dW1iZXIiLCJzdHJpbmciXSxbIm51bWJlciIsInVuZGVmaW5lZCJdLFsibnVtYmVyIiwic3RyaW5nIiwidW5kZWZpbmVkIl1dLHpCPVN5bWJvbCgicm9vdCIpLE9uZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24gZzcoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1'@;
put 'bWVudHNbMV0/YXJndW1lbnRzWzFdOnpCO2lmKGwhPT16QiYmbCE9PU9uZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdXNlZCBpbnRlcm5hbGx5IG9ubHkgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4iKTtjb25zdCBhPUFycmF5LmlzQXJyYXkoYyksZD1sPT09'@;
put 'ekI7bGV0IGg9MDtpZihhKXtjb25zdCBmPWNbMF07MD09PWMubGVuZ3RoP2g9MTpkJiZmIGluc3RhbmNlb2YgWk4/aD0zOmQmJkFycmF5LmlzQXJyYXkoZik/aD1nNyhmLE9uZSk6Yy5sZW5ndGg+PTImJmMubGVuZ3RoPD00JiYhYy5zb21lKChULFcpPT4hU0RlW1ddLmluY2x1ZGVzKHR5cGVv'@;
put 'ZiBUKSkmJihoPTIpfXJldHVybiBofWZ1bmN0aW9uIHd5KGMpe2xldHtrZWVwRGlyZWN0aW9uOmw9ITEscHJvcFRvQ29sOmF9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighQ0RlLmluY2x1ZGVzKGMpKXRocm93IG5ldyBFcnJv'@;
put 'cigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGQpe2NvbnN0IGg9Mz09PWM7bGV0IGY9aD9kLmZyb20ucm93OmRbMF0sXz1oP2QuZnJvbS5jb2w6ZFsxXSxUPWg/ZC50by5yb3c6ZFsyXSxXPWg/ZC50by5j'@;
put 'b2w6ZFszXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSYmKCJzdHJpbmciPT10eXBlb2YgXyYmKF89YShfKSksInN0cmluZyI9PXR5cGVvZiBXJiYoVz1hKFcpKSksTGEoVCkmJihUPWYpLExhKFcpJiYoVz1fKSwhbCl7Y29uc3QgaWU9ZixwZT1fLHdlPVQsRWU9VztmPU1hdGgubWluKGllLHdl'@;
put 'KSxfPU1hdGgubWluKHBlLEVlKSxUPU1hdGgubWF4KGllLHdlKSxXPU1hdGgubWF4KHBlLEVlKX1yZXR1cm5bZixfLFQsV119fWZ1bmN0aW9uIEdwKGMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYyYmYz49MCYmYzwoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/'@;
put 'YXJndW1lbnRzWzFdOjEvMCl9Y2xhc3MgUG5le2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpczt0aGlzLnNldHRpbmdzPWwsdGhpcy50YWJsZVByb3BzPWEsdGhpcy5pblByb2dyZXNzPSExLHRoaXMuc2VsZWN0ZWRCeUNvcm5lcj0hMSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXI9bmV3IFNl'@;
put 'dCx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXI9bmV3IFNldCx0aGlzLnNlbGVjdGVkUmFuZ2U9bmV3IHlEZSgoaCxmLF8pPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZixfKSksdGhpcy5oaWdobGlnaHQ9bmV3IF9EZSh7aGVhZGVyQ2xhc3NOYW1lOmwuY3VycmVudEhl'@;
put 'YWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6bC5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xhc3NOYW1lOmwuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5DbGFzc05hbWU6bC5jdXJyZW50Q29sQ2xhc3NOYW1lLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjooaCxmKT0+dGhp'@;
put 'cy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKGgsZiksY2VsbENvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LGFyZWFDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNBcmVhQ29ybmVy'@;
put 'VmlzaWJsZSguLi5hcmd1bWVudHMpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyho'@;
put 'KSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGNyZWF0ZUNlbGxSYW5nZTooaCxmLF8pPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZixfKSxyb3dJbmRleE1hcHBlcjooKT0+dGhpcy50YWJsZVByb3BzLnJv'@;
put 'd0luZGV4TWFwcGVyKCksY29sdW1uSW5kZXhNYXBwZXI6KCk9PnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcigpfSksdGhpcy50cmFuc2Zvcm1hdGlvbj1uZXcgd0RlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7Y291bnRSb3dzOigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzVHJh'@;
put 'bnNsYXRlZCgpLGNvdW50Q29sczooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50Q29sc1RyYW5zbGF0ZWQoKSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhp'@;
put 'cy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+bC5maXhlZFJvd3NCb3R0b20sbWluU3BhcmVSb3dzOigpPT5sLm1pblNw'@;
put 'YXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PmwubWluU3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT5sLmF1dG9XcmFwUm93LGF1dG9XcmFwQ29sOigpPT5sLmF1dG9XcmFwQ29sfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxI'@;
put 'b29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYp'@;
put 'fSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJi'@;
put 'ZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRz'@;
put 'W19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgp'@;
put 'LF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsZj1uZXcgQXJyYXkoaCksXz0wO188aDtfKyspZltfXT1hcmd1bWVudHNbX107cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsLi4uZil9KX1nZXRTZWxlY3RlZFJhbmdlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZX1iZWdpbigpe3RoaXMuaW5Qcm9n'@;
put 'cmVzcz0hMH1maW5pc2goKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSksdGhpcy5pblByb2dyZXNzPSExfWlzSW5Qcm9ncmVzcygpe3JldHVybiB0aGlzLmluUHJvZ3Jlc3N9c2V0UmFuZ2VTdGFydChs'@;
put 'LGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLGY9TGEoYSk/dGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3Ry'@;
put 'bFByZXNzZWQoKTphLF89bC5yb3c8MCxUPWwuY29sPDAsVz1fJiZULGllPWwuY2xvbmUoKTt0aGlzLnNlbGVjdGVkQnlDb3JuZXI9Vyx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiKyhkPyJPbmx5IjoiIiksaWUpLCghaHx8aCYmIWYmJkxhKGEpKSYmdGhpcy5zZWxl'@;
put 'Y3RlZFJhbmdlLmNsZWFyKCksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChpZSksMD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmNsZWFyKCksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCkpLCFXJiZUJiZ0aGlzLnNlbGVjdGVkQnlS'@;
put 'b3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSwhVyYmXyYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksZHx8dGhpcy5zZXRSYW5nZUVuZChsKX1zZXRSYW5nZVN0YXJ0T25seShsLGEpe3RoaXMuc2V0UmFuZ2VTdGFydChsLGEs'@;
put 'ITApfXNldFJhbmdlRW5kKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9bC5jbG9uZSgpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLGEpLHRoaXMuYmVnaW4oKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50'@;
put 'KCk7InNpbmdsZSIhPT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUmJmQuc2V0VG8odGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYS5yb3csYS5jb2wpKSx0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoYnksZC5o'@;
put 'aWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuYWRkKHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChkKTtjb25zdCBoPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2g8dGhpcy5oaWdobGlnaHQubGF5ZXJMZXZlbCYmKERuKHRo'@;
put 'aXMuaGlnaGxpZ2h0LmdldEFyZWFzKCksVz0+e1cuY2xlYXIoKX0pLERuKHRoaXMuaGlnaGxpZ2h0LmdldEhlYWRlcnMoKSxXPT57Vy5jbGVhcigpfSksRG4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlSGVhZGVycygpLFc9PntXLmNsZWFyKCl9KSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJM'@;
put 'ZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QXJlYSgpLF89dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRIZWFkZXIoKSxUPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCk7aWYoZi5jbGVhcigpLF8uY2xlYXIoKSxULmNsZWFyKCksdGhp'@;
put 'cy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEZrLGQuaGlnaGxpZ2h0KSYmKHRoaXMuaXNNdWx0aXBsZSgpfHxoPj0xKSYmKGYuYWRkKGQuZnJvbSkuYWRkKGQudG8pLmNvbW1pdCgpLDE9PT1oKSl7Y29uc3QgVz10aGlzLnNlbGVjdGVkUmFuZ2UucHJldmlvdXMoKTt0aGlzLmhpZ2hsaWdodC51'@;
put 'c2VMYXllckxldmVsKGgtMSkuY3JlYXRlT3JHZXRBcmVhKCkuYWRkKFcuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoVyksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKX1pZih0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoeXksZC5oaWdobGlnaHQpKXtjb25zdCBXPTA9PT10aGlz'@;
put 'LnRhYmxlUHJvcHMuY291bnRSb3dzVHJhbnNsYXRlZCgpLGllPTA9PT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzVHJhbnNsYXRlZCgpO2xldCBwZT1kOyhXfHxpZSkmJihwZT1kLmNsb25lKCkpLFcmJihwZS5mcm9tLnJvdz0tMSksaWUmJihwZS5mcm9tLmNvbD0tMSksInNpbmdsZSI9PT10'@;
put 'aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KHRoaXMuaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkmJnBlLmZyb20ubm9ybWFsaXplKCksXy5hZGQocGUuZnJvbSkuY29tbWl0KCkpOl8uYWRkKHBlLmZyb20pLmFkZChwZS50bykuY29tbWl0KCksdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkm'@;
put 'JnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKT09PWQuZ2V0V2lkdGgoKSYmVC5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZC5mcm9tLnJvdywtMSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkLnRvLnJvdywtMSkpLmNvbW1pdCgpLHRoaXMu'@;
put 'aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpJiZ0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk9PT1kLmdldEhlaWdodCgpJiZULmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxkLmZyb20uY29sKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0x'@;
put 'LGQudG8uY29sKSkuY29tbWl0KCl9dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixsKX1pc011bHRpcGxlKCl7Y29uc3QgbD1fZyghdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5pc1NpbmdsZSgpKTtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlcklzTXVs'@;
put 'dGlwbGVTZWxlY3Rpb24iLGwpLGwudmFsdWV9dHJhbnNmb3JtU3RhcnQobCxhKXt0aGlzLnNldFJhbmdlU3RhcnQodGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1TdGFydChsLGEsYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSkpfXRy'@;
put 'YW5zZm9ybUVuZChsLGEpe3RoaXMuc2V0UmFuZ2VFbmQodGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1FbmQobCxhKSl9Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxlY3RlZCgpe3JldHVybiF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNF'@;
put 'bXB0eSgpfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIobCkmJnRoaXMuaXNFbnRpcmVSb3dT'@;
put 'ZWxlY3RlZChsKX1pc0VudGlyZVJvd1NlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybi0xPT09bD90aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuc2l6ZT4wOnRoaXMu'@;
put 'c2VsZWN0ZWRCeVJvd0hlYWRlci5oYXMobCl9aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpJiZ0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQobCl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4tMT09PWw/dGhpcy5zZWxl'@;
put 'Y3RlZEJ5Q29sdW1uSGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKGwpfWlzU2VsZWN0ZWRCeUFueUhlYWRlcigpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKC0xKXx8dGhpcy5p'@;
put 'c1NlbGVjdGVkQnlDb3JuZXIoKX1pc1NlbGVjdGVkQnlDb3JuZXIoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEJ5Q29ybmVyfWluSW5TZWxlY3Rpb24obCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5pbmNsdWRlcyhsKX1pc0NlbGxDb3JuZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuc2V0dGlu'@;
put 'Z3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiYhdGhpcy5pc011bHRpcGxlKCl9aXNBcmVhQ29ybmVyVmlzaWJsZShsKXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIobCl8fGw9PT10aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmls'@;
put 'bEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9ZGVzZWxlY3QoKXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVz'@;
put 'cz0hMSx0aGlzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2lmKCEobHx8YXx8MCE9PWQmJjAhPT1oKSlyZXR1cm47Y29uc3QgZj10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhPy0x'@;
put 'OjAsbD8tMTowKSxfPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQtMSxoLTEpO3RoaXMuY2xlYXIoKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGYpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2VsZWN0ZWRCeUNvbHVt'@;
put 'bkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoXyksdGhpcy5maW5pc2goKX1zZWxlY3RDZWxscyhsKXtjb25zdCBhPWc3KGwpO2lmKDE9PT1hKXJldHVybiExO2lmKDA9PT1hKXRocm93IG5ldyBFcnJvcihBYWBVbnN1cHBvcnRlZCBmb3JtYXQgb2Yg'@;
put 'dGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVzIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQvY29sdW1uUHJvcFN0YXJ0LCByb3dFbmQsXHgyMAogICAgICAg'@;
put 'IGNvbHVtbkVuZC9jb2x1bW5Qcm9wRW5kXV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGQ9d3koYSx7cHJvcFRvQ29sOlQ9PnRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woVCksa2VlcERpcmVjdGlvbjohMH0pLGg9dGhpcy50YWJsZVByb3BzLmNvdW50'@;
put 'Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLF89IWwuc29tZShUPT57Y29uc3RbVyxpZSxwZSx3ZV09ZChUKTtyZXR1cm4hKEdwKFcsaCkmJkdwKGllLGYpJiZHcChwZSxoKSYmR3Aod2UsZikpfSk7cmV0dXJuIF8mJih0aGlzLmNsZWFyKCksRG4obCxUPT57Y29uc3RbVyxp'@;
put 'ZSxwZSx3ZV09ZChUKTt0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFcsaWUpLCExKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHBlLHdlKSksdGhpcy5maW5pc2goKX0pKSxffXNlbGVjdENv'@;
put 'bHVtbnMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LTE7Y29uc3QgaD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy50'@;
put 'YWJsZVByb3BzLnByb3BUb0NvbChsKTpsLGY9InN0cmluZyI9PXR5cGVvZiBhP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woYSk6YSxfPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxUPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxXPUdwKGgsXykmJkdwKGYsXyk7cmV0dXJuIFcm'@;
put 'Jih0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLHRoaXMuc2V0UmFuZ2VFbmQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoVC0xLGYpKSx0aGlzLmZpbmlzaCgpKSxXfXNlbGVjdFJvd3MobCl7bGV0IGE9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LTE7Y29uc3QgaD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksZj10aGlzLnRhYmxlUHJvcHMu'@;
put 'Y291bnRDb2xzKCksXz1HcChsLGgpJiZHcChhLGgpO3JldHVybiBfJiYodGhpcy5zZXRSYW5nZVN0YXJ0T25seSh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLGQpKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsZi0xKSksdGhp'@;
put 'cy5maW5pc2goKSksX31yZWZyZXNoKCl7aWYodGhpcy5oaWdobGlnaHQuZ2V0Q3VzdG9tU2VsZWN0aW9ucygpLmZvckVhY2goaD0+e2guY29tbWl0KCl9KSwhdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5oaWdobGlnaHQuZ2V0Q2VsbCgpLGQ9dGhpcy5nZXRMYXllckxl'@;
put 'dmVsKCk7YS5jb21taXQoKS5zeW5jV2l0aCh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpKTtmb3IobGV0IGg9MDtoPHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk7aCs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9y'@;
put 'R2V0QXJlYSgpLF89dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRIZWFkZXIoKSxUPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCk7Zi5jb21taXQoKSxfLmNvbW1pdCgpLFQuY29tbWl0KCl9dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChkKX19VGEoUG5lLE8w'@;
put 'KTtjb25zdCBFRGU9UG5lLHtyZWdpc3RlcjprRGUsZ2V0SXRlbTpBRGUsaGFzSXRlbTpGbmUsZ2V0TmFtZXM6VERlfT1wZCgiY2VsbFR5cGVzIik7ZnVuY3Rpb24gVUIoYyl7aWYoIUZuZShjKSl0aHJvdyBFcnJvcihgWW91IGRlY2xhcmVkIGNlbGwgdHlwZSAiJHtjfSIgYXMgYSBzdHJpbmcg'@;
put 'dGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2Vs'@;
put 'bFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBBRGUoYyl9ZnVuY3Rpb24gYjIoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmEscmVuZGVyZXI6ZCx2YWxpZGF0b3I6aH09bDthJiZSMChjLGEpLGQmJnBoKGMs'@;
put 'ZCksaCYmYTcoYyxoKSxrRGUoYyxsKX1mdW5jdGlvbiBWayhjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpjO2NvbnN0IGQ9InN0cmluZyI9PXR5cGVvZiBsLnR5cGU/VUIobC50eXBlKTpsLnR5cGU7aWYoYy5fYXV0b21h'@;
put 'dGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiZkcyhsLChmLF8pPT57Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzLmRlbGV0ZShfKX0pLCF1cyhkKSlyZXR1cm47YT09PWMmJiFjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJihjLl9hdXRvbWF0aWNhbGx5QXNzaWdu'@;
put 'ZWRNZXRhUHJvcHM9bmV3IFNldCk7Y29uc3QgaD17fTtkcyhkLChmLF8pPT57dmFyIFQ7KGZ1bmN0aW9uIEREZShjLGwpe3ZhciBhO3JldHVybiJDRUxMX1RZUEUiIT09YyYmKChudWxsPT09KGE9bC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YT92b2lkIDA6'@;
put 'YS5oYXMoYykpfHwhYmwobCxjKSl9KShfLGEpJiYoaFtfXT1mLG51bGw9PT0oVD1jLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1UfHxULmFkZChfKSl9KSxYbChjLGgpfWZ1bmN0aW9uIEJrKGMpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPj0wfWZ1'@;
put 'bmN0aW9uIGprKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6ICR7bH1gKX1mdW5jdGlvbiB6ayhjKXtyZXR1cm4gbnVsbD09Y31jb25zdCBIbmU9KCk9Pih7X2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xh'@;
put 'c3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVtb3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGF1dG9Db2x1bW5TaXpl'@;
put 'OnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xs'@;
put 'YXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29sV2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21t'@;
put 'ZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRlckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3Vz'@;
put 'dG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhU2NoZW1hOnZvaWQgMCxkYXRlRm9ybWF0OiJERC9NTS9ZWVlZIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51'@;
put 'OnZvaWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVnaW5zRWRpdGluZzohMCxlbnRlck1vdmVzOntjb2w6MCxyb3c6MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVm'@;
put 'dDowLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzQm90dG9tOjAsZml4ZWRSb3dzVG9wOjAsZm9ybXVsYXM6dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05h'@;
put 'bWU6Imh0SW52YWxpZCIsaXNFbXB0eUNvbChjKXtsZXQgbCxhLGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMpLCExPT09Z2MoZCkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3coYyl7bGV0IGwsYSxkLGg7Zm9yKGw9'@;
put 'MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09Z2MoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlzLmdldENlbGxNZXRhKGMsbCksbGsodGhpcy5nZXRTY2hlbWEoKVtoLnByb3BdLGQpKTtyZXR1cm4hMH0sbGFi'@;
put 'ZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixtYW51YWxDb2x1bW5GcmVlemU6dm9pZCAwLG1hbnVhbENvbHVtbk1vdmU6dm9pZCAwLG1hbnVhbENvbHVtblJlc2l6ZTp2b2lkIDAsbWFu'@;
put 'dWFsUm93TW92ZTp2b2lkIDAsbWFudWFsUm93UmVzaXplOnZvaWQgMCxtYXhDb2xzOjEvMCxtYXhSb3dzOjEvMCxtZXJnZUNlbGxzOiExLG1pbkNvbHM6MCxtaW5Sb3dzOjAsbWluU3BhcmVDb2xzOjAsbWluU3BhcmVSb3dzOjAsbXVsdGlDb2x1bW5Tb3J0aW5nOnZvaWQgMCxuZXN0ZWRIZWFk'@;
put 'ZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6'@;
put 'dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0RGltbWVkIixyZW5kZXJBbGxSb3dzOnZvaWQgMCxyZW5kZXJlcjp2b2lkIDAs'@;
put 'cm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6dm9pZCAwLHJvd0hlaWdodHM6dm9pZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2RlOiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFzdGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZh'@;
put 'bmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRSb3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVDbGFzc05hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAs'@;
put 'dHJpbVdoaXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86dm9pZCAwLHZhbGlkYXRvcjp2b2lkIDAsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aXNpYmxlUm93'@;
put 'czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtjbGFzcyBSRGV7Y29uc3RydWN0b3IobCl7dGhpcy5tZXRhQ3Rvcj1jbGFzc3t9LHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxYbCh0aGlzLm1ldGEsSG5lKCkpLHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25z'@;
put 'dHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7WGwodGhpcy5tZXRhLGwpLFZrKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9'@;
put 'LGwpfX1jbGFzcyBPRGV7Y29uc3RydWN0b3IobCl7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe1hsKHRoaXMubWV0YSxsKSxWayh0aGlzLm1ldGEsbCxsKX19Y2xhc3MgWkJ7Y29u'@;
put 'c3RydWN0b3IobCl7dGhpcy52YWx1ZUZhY3Rvcnk9bCx0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVzPW5ldyBTZXR9b2J0YWluKGwpe2prKCgpPT5CayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4iKTtjb25zdCBhPXRoaXMuX2dldFN0b3JhZ2VJbmRleEJ5'@;
put 'S2V5KGwpO2xldCBkO2lmKGE+PTApZD10aGlzLmRhdGFbYV0sdm9pZCAwPT09ZCYmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5kYXRhW2FdPWQpO2Vsc2UgaWYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmhvbGVzLnNpemU+MCl7Y29uc3QgaD10aGlzLmhvbGVzLnZhbHVlcygp'@;
put 'Lm5leHQoKS52YWx1ZTt0aGlzLmhvbGVzLmRlbGV0ZShoKSx0aGlzLmRhdGFbaF09ZCx0aGlzLmluZGV4W2xdPWh9ZWxzZSB0aGlzLmRhdGEucHVzaChkKSx0aGlzLmluZGV4W2xdPXRoaXMuZGF0YS5sZW5ndGgtMTtyZXR1cm4gZH1pbnNlcnQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7amsoKCk9PkJrKGwpfHx6ayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPVtdLGg9dGhpcy5kYXRhLmxlbmd0aDtmb3IobGV0IF89MDtfPGE7'@;
put 'XysrKWQucHVzaChoK18pLHRoaXMuZGF0YS5wdXNoKHZvaWQgMCk7Y29uc3QgZj16ayhsKT90aGlzLmluZGV4Lmxlbmd0aDpsO3RoaXMuaW5kZXg9Wy4uLnRoaXMuaW5kZXguc2xpY2UoMCxmKSwuLi5kLC4uLnRoaXMuaW5kZXguc2xpY2UoZildfXJlbW92ZShsKXtsZXQgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtqaygoKT0+QmsobCl8fHprKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9dGhpcy5pbmRleC5zcGxpY2UoemsobCk/dGhpcy5p'@;
put 'bmRleC5sZW5ndGgtYTpsLGEpO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07Im51bWJlciI9PXR5cGVvZiBmJiZ0aGlzLmhvbGVzLmFkZChmKX19c2l6ZSgpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMuaG9sZXMuc2l6ZX12YWx1ZXMoKXtyZXR1cm4gXzEo'@;
put 'dGhpcy5kYXRhLChsLGEpPT4hdGhpcy5ob2xlcy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMuX2dldEtleUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmbC5wdXNo'@;
put 'KFtoLHRoaXMuZGF0YVtkXV0pfWxldCBhPTA7cmV0dXJue25leHQ6KCk9PntpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV07cmV0dXJuIGErPTEse3ZhbHVlOmQsZG9uZTohMX19cmV0dXJue2RvbmU6ITB9fX19Y2xlYXIoKXt0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVz'@;
put 'LmNsZWFyKCl9X2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpe3JldHVybiB0aGlzLmluZGV4Lmxlbmd0aD5sP3RoaXMuaW5kZXhbbF06LTF9X2dldEtleUJ5U3RvcmFnZUluZGV4KGwpe3JldHVybiB0aGlzLmluZGV4LmluZGV4T2YobCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5l'@;
put 'bnRyaWVzKCl9fWNvbnN0IFBEZT1bImRhdGEiLCJ3aWR0aCJdO2NsYXNzIEZEZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmdsb2JhbE1ldGE9bCx0aGlzLm1ldGFzPW5ldyBaQigoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKX11cGRhdGVNZXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldE1ldGEobCk7WGwo'@;
put 'ZCxhKSxWayhkLGEpfWNyZWF0ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1nZXRNZXRhKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKX1nZXRNZXRhQ29uc3RydWN0b3IobCl7cmV0dXJuIHRo'@;
put 'aXMubWV0YXMub2J0YWluKGwpLmNvbnN0cnVjdG9yfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZU1ldGEoKXtyZXR1cm4gZnVuY3Rpb24gSURlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtm'@;
put 'dW5jdGlvbiBhKCl7fXpmKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksUERlKS5wcm90b3R5cGV9fWNsYXNzIEhEZXtjb25zdHJ1Y3RvcihsKXt0aGlz'@;
put 'LmNvbHVtbk1ldGE9bCx0aGlzLm1ldGFzPW5ldyBaQigoKT0+dGhpcy5fY3JlYXRlUm93KCkpfXVwZGF0ZU1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7WGwoaCxkKSxWayhoLGQpfWNyZWF0ZVJvdyhsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1u'@;
put 'KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5zZXJ0KGwsYSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1yZW1vdmVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2Qr'@;
put 'Kyl0aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxoKXt2YXIgZjtjb25zdCBfPXRoaXMubWV0YXMub2J0YWluKGwp'@;
put 'Lm9idGFpbihhKTtudWxsPT09KGY9Xy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09Znx8Zi5kZWxldGUoZCksX1tkXT1ofXJlbW92ZU1ldGEobCxhLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBs'@;
put 'PVtdLGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylsLnB1c2goLi4uYVtkXS52YWx1ZXMoKSk7cmV0dXJuIGx9Z2V0TWV0YXNBdFJvdyhsKXtqaygoKT0+QmsobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29u'@;
put 'c3QgYT1uZXcgTWFwKHRoaXMubWV0YXMpO3JldHVybiBhLmhhcyhsKT9BcnJheS5mcm9tKGEuZ2V0KGwpLnZhbHVlcygpKTpbXX1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVSb3coKXtyZXR1cm4gbmV3IFpCKGw9PnRoaXMuX2NyZWF0ZU1ldGEobCkpfV9jcmVhdGVN'@;
put 'ZXRhKGwpe3JldHVybiBuZXcodGhpcy5jb2x1bW5NZXRhLmdldE1ldGFDb25zdHJ1Y3RvcihsKSl9fWNsYXNzIE5uZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107dGhpcy5ob3Q9bCx0aGlzLmdsb2JhbE1ldGE9bmV3IFJEZShsKSx0aGlzLnRhYmxlTWV0YT1uZXcgT0RlKHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jb2x1bW5NZXRhPW5ldyBGRGUodGhpcy5nbG9iYWxNZXRhKSx0aGlz'@;
put 'LmNlbGxNZXRhPW5ldyBIRGUodGhpcy5jb2x1bW5NZXRhKSxkLmZvckVhY2goaD0+bmV3IGgodGhpcykpLHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGEpfWdldEdsb2JhbE1ldGEoKXtyZXR1cm4gdGhpcy5nbG9iYWxNZXRhLmdldE1ldGEoKX11cGRhdGVHbG9iYWxNZXRhKGwpe3RoaXMu'@;
put 'Z2xvYmFsTWV0YS51cGRhdGVNZXRhKGwpfWdldFRhYmxlTWV0YSgpe3JldHVybiB0aGlzLnRhYmxlTWV0YS5nZXRNZXRhKCl9dXBkYXRlVGFibGVNZXRhKGwpe3RoaXMudGFibGVNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0Q29sdW1uTWV0YShsKXtyZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1l'@;
put 'dGEobCl9dXBkYXRlQ29sdW1uTWV0YShsLGEpe3RoaXMuY29sdW1uTWV0YS51cGRhdGVNZXRhKGwsYSl9Z2V0Q2VsbE1ldGEobCxhLGQpe2xldHt2aXN1YWxSb3c6aCx2aXN1YWxDb2x1bW46Zn09ZDtjb25zdCBfPXRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiBfLnZpc3VhbFJv'@;
put 'dz1oLF8udmlzdWFsQ29sPWYsXy5yb3c9bCxfLmNvbD1hLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsXyksX31nZXRDZWxsTWV0YUtleVZhbHVlKGwsYSxkKXtpZigic3RyaW5nIiE9dHlwZW9mIGQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGNlbGwgbWV0YSBv'@;
put 'YmplY3Qga2V5IGlzIG5vdCBhIHN0cmluZyIpO3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGEobCxhLGQpfXNldENlbGxNZXRhKGwsYSxkLGgpe3RoaXMuY2VsbE1ldGEuc2V0TWV0YShsLGEsZCxoKX11cGRhdGVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS51cGRhdGVNZXRhKGws'@;
put 'YSxkKX1yZW1vdmVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVNZXRhKGwsYSxkKX1nZXRDZWxsc01ldGEoKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhcygpfWdldENlbGxzTWV0YUF0Um93KGwpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzQXRSb3cobCl9'@;
put 'Y3JlYXRlUm93KGwpe3RoaXMuY2VsbE1ldGEuY3JlYXRlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfXJlbW92ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLnJlbW92ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1jcmVhdGVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5jcmVhdGVDb2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEuY3JlYXRlQ29s'@;
put 'dW1uKGwsYSl9cmVtb3ZlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEucmVtb3ZlQ29sdW1uKGwsYSksdGhpcy5jb2x1bW5NZXRhLnJlbW92ZUNvbHVtbihsLGEpfWNsZWFyQ2VsbHND'@;
put 'YWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpfWNsZWFyQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKSx0aGlzLmNvbHVtbk1ldGEuY2xlYXJDYWNoZSgpfX1UYShObmUsTzApO2NsYXNzIE5EZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5t'@;
put 'ZXRhU3luY01lbW89bmV3IE1hcCxsLmFkZExvY2FsSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsYT0+dGhpcy5leHRlbmRDZWxsTWV0YShhKSksc28uZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVSZW5kZXIiLGE9PnthJiZ0aGlzLm1ldGFTeW5jTWVtby5jbGVhcigpfSx0aGlzLm1ldGFNYW5h'@;
put 'Z2VyLmhvdCl9ZXh0ZW5kQ2VsbE1ldGEobCl7dmFyIGE7Y29uc3R7cm93OmQsY29sOmh9PWw7aWYobnVsbCE9PShhPXRoaXMubWV0YVN5bmNNZW1vLmdldChkKSkmJnZvaWQgMCE9PWEmJmEuaGFzKGgpKXJldHVybjtjb25zdHt2aXN1YWxSb3c6Zix2aXN1YWxDb2w6X309bCxUPXRoaXMubWV0'@;
put 'YU1hbmFnZXIuaG90LFc9VC5jb2xUb1Byb3AoXyk7bC5wcm9wPVcsVC5ydW5Ib29rcygiYmVmb3JlR2V0Q2VsbE1ldGEiLGYsXyxsKTtjb25zdCBpZT1ibChsLCJ0eXBlIik/bC50eXBlOm51bGw7bGV0IHBlPVJhKGwuY2VsbHMpP2wuY2VsbHMoZCxoLFcpOm51bGw7aWYoaWUpaWYocGUpe3Zh'@;
put 'ciB3ZTtwZS50eXBlPW51bGwhPT0od2U9cGUudHlwZSkmJnZvaWQgMCE9PXdlP3dlOmllfWVsc2UgcGU9e3R5cGU6aWV9O3BlJiZ0aGlzLm1ldGFNYW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKGQsaCxwZSksVC5ydW5Ib29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsZixfLGwpLHRoaXMubWV0YVN5bmNN'@;
put 'ZW1vLmhhcyhkKXx8dGhpcy5tZXRhU3luY01lbW8uc2V0KGQsbmV3IFNldCksdGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpLmFkZChoKX19Y2xhc3MgVkRle2NvbnN0cnVjdG9yKGwpe3RoaXMubWV0YU1hbmFnZXI9bCx0aGlzLnVzYWdlVHJhY2tlcj1uZXcgU2V0LHRoaXMucHJvcERlc2NyaXB0'@;
put 'b3JzPW5ldyBNYXAoW1siZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlKGEpe2lmKHRoaXMubWV0YU1hbmFnZXIuaG90LmlzUnRsKCkmJiJmaXhlZENvbHVtbnNMZWZ0Ij09PWEpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xl'@;
put 'ZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc0xlZnQiKSYmdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFydCIpKXRocm93'@;
put 'IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rpb24iLHtvbkNo'@;
put 'YW5nZShhLGQsaCl7aWYoIWgpdGhyb3cgbmV3IEVycm9yKGBUaGUgXGAke2F9XGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApfX1dXSksdGhpcy5leHRlbmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0aGlz'@;
put 'LnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7dGFyZ2V0OmQsb25DaGFuZ2U6aD0oKCk9Pnt9KX09bCxmPSJzdHJpbmciPT10eXBlb2YgZCxfPWY/ZDphLFQ9YF8ke199YDt0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtUXT10aGlzLm1ldGFNYW5hZ2VyLmds'@;
put 'b2JhbE1ldGEubWV0YVtfXSx0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLFQsaCksZiYmdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoZCxULGgpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xv'@;
put 'YmFsTWV0YS5tZXRhLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoZil7Y29uc3QgXz0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gudXNhZ2VUcmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsXyksdGhpc1thXT1mfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1jb25zdCBW'@;
put 'bmU9L14oXHJcbnxcblxyfFxyfFxuKS8sQkRlPS9eW15cdFxyXG5dKy8sQm5lPS9eXHQvO2Z1bmN0aW9uIEN5KGMpe2xldCBsLGEsZCxoLF8sZj0iIjtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVuZ3RoLGQ9MDtkPGg7ZCs9MSlkPjAmJihmKz0iXHQiKSxfPWNb'@;
put 'bF1bZF0sInN0cmluZyI9PXR5cGVvZiBfP18uaW5kZXhPZigiXG4iKT4tMT9mKz1gIiR7Xy5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9XzpmKz1udWxsPT1fPyIiOl87bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWNsYXNzIG03e3N0YXRpYyBnZXQgREVTVElOQVRJT05fUkVOREVSRVIo'@;
put 'KXtyZXR1cm4gMX1zdGF0aWMgZ2V0IERFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IoKXtyZXR1cm4gMn1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pbnN0YW5jZT1sLHRoaXMubWV0YU1hbmFnZXI9ZCx0aGlzLnRhYmxlTWV0YT1kLmdldFRhYmxlTWV0YSgpLHRoaXMuZGF0YVNvdXJj'@;
put 'ZT1hLHRoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKSx0aGlzLmNvbFRvUHJvcENhY2hlPXZvaWQgMCx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMCx0aGlzLmNyZWF0ZU1hcCgpfWNyZWF0ZU1hcCgpe2NvbnN0IGw9dGhpcy5nZXRTY2hlbWEoKTtpZih0eXBlb2YgbD4i'@;
put 'dSIpdGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IGE9dGhpcy50YWJsZU1ldGEuY29sdW1ucztsZXQgZDtpZih0aGlzLmNvbFRvUHJvcENhY2hlPVtd'@;
put 'LHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCxhKXtsZXQgaD0wLGY9MCxfPSExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtjb25zdCBUPXVrKGwpO2g9VD4wP1Q6dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLF89ITB9ZWxzZSBoPU1hdGgubWluKHRoaXMudGFibGVNZXRhLm1heENvbHMs'@;
put 'YS5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7Y29uc3QgVD1fP2EoZCk6YVtkXTtpZih1cyhUKSl7aWYodHlwZW9mIFQuZGF0YTwidSIpe2NvbnN0IFc9Xz9mOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtXXT1ULmRhdGEsdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoVC5kYXRhLFcpfWYrPTF9fX1l'@;
put 'bHNlIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMobCl9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gbFYodGhpcy5kYXRhU291cmNlKX1yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGEsZCl7bGV0IF8saD1hLGY9ZDtyZXR1cm4gdHlwZW9mIGg+InUiJiYoaD0wLGY9IiIpLCJvYmplY3QiPT10'@;
put 'eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJmRzKGwsKFQsVyk9PntudWxsPT09VD8oXz1mK1csdGhpcy5jb2xUb1Byb3BDYWNoZS5wdXNoKF8pLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KF8saCksaCs9MSk6aD10aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKFQsaCxgJHtXfS5gKX0pLGh9'@;
put 'Y29sVG9Qcm9wKGwpe2lmKCExPT09TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbDtjb25zdCBhPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWE/bDp0aGlzLmNvbFRvUHJvcENhY2hlJiZLaSh0aGlzLmNvbFRvUHJvcENhY2hlW2FdKT90aGlzLmNv'@;
put 'bFRvUHJvcENhY2hlW2FdOmF9cHJvcFRvQ29sKGwpe2NvbnN0IGE9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQobCk7aWYoS2koYSkpcmV0dXJuIHRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oYSk7Y29uc3QgZD10aGlzLmluc3RhbmNlLnRvVmlzdWFsQ29sdW1uKGwpO3JldHVybiBudWxs'@;
put 'PT09ZD9sOmR9Z2V0U2NoZW1hKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hO3JldHVybiBsPyJmdW5jdGlvbiI9PXR5cGVvZiBsP2woKTpsOnRoaXMuZHVja1NjaGVtYX1jcmVhdGVEdWNrU2NoZW1hKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5kYXRhU291cmNl'@;
put 'WzBdP3I3KHRoaXMuZGF0YVNvdXJjZVswXSk6e319cmVmcmVzaER1Y2tTY2hlbWEoKXt0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCl9Y3JlYXRlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTox'@;
put 'LHtzb3VyY2U6ZCxtb2RlOmg9ImFib3ZlIn09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGY9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsZXQgXz1mLFQ9MCxXPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgV3x8'@;
put 'Vz49ZikmJihXPWYpLFc8dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSYmKF89dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KFcpKSwhMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsVyxhLGQpfHxudWxsPT09XylyZXR1cm57ZGVsdGE6MH07Y29uc3QgcGU9'@;
put 'dGhpcy50YWJsZU1ldGEubWF4Um93cyx3ZT10aGlzLmdldFNjaGVtYSgpLmxlbmd0aCxFZT1bXTtmb3IoO1Q8YSYmZitUPHBlOyl7bGV0IGl0PW51bGw7ImFycmF5Ij09PXRoaXMuaW5zdGFuY2UuZGF0YVR5cGU/dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYT9pdD15dSh0aGlzLmdldFNjaGVt'@;
put 'YSgpKTooaXQ9W10sdm8od2UtMSwoKT0+aXQucHVzaChudWxsKSkpOiJmdW5jdGlvbiI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlP2l0PXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEoVytUKTooaXQ9e30sbHkoaXQsdGhpcy5nZXRTY2hlbWEoKSkpLEVlLnB1c2goaXQpLFQrPTF9dGhpcy5p'@;
put 'bnN0YW5jZS5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFcsVCksImJlbG93Ij09PWgmJihfPU1hdGgubWluKF8rMSxmKSksdGhpcy5zcGxpY2VEYXRhKF8sMCxFZSk7Y29uc3QgWmU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyhfKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb3VudFNv'@;
put 'dXJjZVJvd3MoKT09PUVlLmxlbmd0aCYmdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5pbnN0YW5jZS5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksVD4wJiYobnVsbD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhudWxsLFQpOiJhdXRvIiE9'@;
put 'PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KF8sYSkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixaZSxULGQpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHtkZWx0YTpULHN0YXJ0UGh5c2ljYWxJbmRleDpffX1jcmVhdGVDb2wobCl7bGV0'@;
put 'IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0ic3RhcnQifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYoIXRoaXMuaW5zdGFuY2UuaXND'@;
put 'b2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIG5ldyBjb2x1bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCB5b3UgY2FuIG9ubHkgaGF2ZSBhcyBtdWNoIGNvbHVtbnMgYXMgZGVmaW5lZCBpbiBmaXJzdCBkYXRhIHJvdywg'@;
put 'ZGF0YSBzY2hlbWEgb3IgaW4gdGhlICdjb2x1bW5zJyBzZXR0aW5nLklmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gYWRkIG5ldyBjb2x1bW5zLCB5b3UgaGF2ZSB0byB1c2UgYXJyYXkgZGF0YXNvdXJjZS4iKTtjb25zdCBmPXRoaXMuZGF0YVNvdXJjZSxfPXRoaXMudGFibGVNZXRhLm1heENv'@;
put 'bHMsVD10aGlzLmluc3RhbmNlLmNvdW50U291cmNlQ29scygpO2xldCBXPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgV3x8Vz49VCkmJihXPVQpLCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlQ29sIixXLGEsZCkpcmV0dXJue2RlbHRhOjB9O2xldCBwZT1UO1c8dGhp'@;
put 'cy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKHBlPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihXKSk7Y29uc3Qgd2U9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsZXQgRWU9dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSxaZT0wLGl0PXBlOyJlbmQiPT09aCYmKGl0PU1h'@;
put 'dGgubWluKGl0KzEsVCkpO2NvbnN0IGV0PWl0O2Zvcig7WmU8YSYmRWU8Xzspe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8Vz49RWUpaWYod2U+MClmb3IobGV0IEV0PTA7RXQ8d2U7RXQrPTEpdHlwZW9mIGZbRXRdPiJ1IiYmKGZbRXRdPVtdKSxmW0V0XS5wdXNoKG51bGwpO2Vsc2UgZi5wdXNo'@;
put 'KFtudWxsXSk7ZWxzZSBmb3IobGV0IEV0PTA7RXQ8d2U7RXQrKylmW0V0XS5zcGxpY2UoaXQsMCxudWxsKTtaZSs9MSxpdCs9MSxFZSs9MX10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoVyxaZSksWmU+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5j'@;
put 'cmVhdGVDb2x1bW4obnVsbCxaZSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4oZXQsYSkpO2NvbnN0IHl0PXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oZXQpO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIseXQsWmUs'@;
put 'ZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpaZSxzdGFydFBoeXNpY2FsSW5kZXg6ZXR9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb'@;
put 'MV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLF89dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtpZihoPShfK2gpJV8sITE9PT10'@;
put 'aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGgsZi5sZW5ndGgsZixkKSlyZXR1cm4hMTtjb25zdCBXPWYubGVuZ3RoO2lmKHRoaXMuZmlsdGVyRGF0YShoLFcsZiksaDx0aGlzLmluc3RhbmNlLmNvdW50Um93cygpKXt0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVy'@;
put 'LnJlbW92ZUluZGV4ZXMoZik7Y29uc3QgcGU9S2kodGhpcy50YWJsZU1ldGEuY29sdW1ucyl8fEtpKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpOzA9PT10aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJiExPT09cGUmJnRoaXMuaW5z'@;
put 'dGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKX1yZXR1cm4gZi5zbGljZSgwKS5zb3J0KChwZSx3ZSk9PndlLXBlKS5mb3JFYWNoKHBlPT57dGhpcy5tZXRhTWFuYWdlci5yZW1vdmVSb3cocGUsMSl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJl'@;
put 'bW92ZVJvdyIsaCxXLGYsZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsITB9cmVtb3ZlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2'@;
put 'b2lkIDA7aWYoIm9iamVjdCI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlfHx0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBzb3VyY2Ugb3IgY29sdW1ucyBvcHRpb24gc3BlY2lmaWVkIik7bGV0IGg9'@;
put 'Im51bWJlciIhPXR5cGVvZiBsPy1hOmw7aD0odGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKStoKSV0aGlzLmluc3RhbmNlLmNvdW50Q29scygpO2NvbnN0IGY9dGhpcy52aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChoLGEpLF89Zi5zbGljZSgwKS5zb3J0KCh3ZSxFZSk9PkVlLXdlKTtpZighMT09'@;
put 'PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlbW92ZUNvbCIsaCxhLGYsZCkpcmV0dXJuITE7bGV0IFc9ITA7Y29uc3QgaWU9Xy5sZW5ndGgscGU9dGhpcy5kYXRhU291cmNlO2ZvcihsZXQgd2U9MDt3ZTxpZTt3ZSsrKVcmJmZbMF0hPT1mW3dlXS13ZSYmKFc9ITEpO2lmKFcpZm9y'@;
put 'KGxldCB3ZT0wLEVlPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7d2U8RWU7d2UrKylwZVt3ZV0uc3BsaWNlKGZbMF0sYSksMD09PXdlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihmWzBdLGEpO2Vsc2UgZm9yKGxldCB3ZT0wLEVlPXRoaXMuaW5zdGFuY2UuY291bnRT'@;
put 'b3VyY2VSb3dzKCk7d2U8RWU7d2UrKylmb3IobGV0IFplPTA7WmU8aWU7WmUrKylwZVt3ZV0uc3BsaWNlKF9bWmVdLDEpLDA9PT13ZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oX1taZV0sMSk7cmV0dXJuIGg8dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKHRoaXMuaW5zdGFu'@;
put 'Y2UuY29sdW1uSW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKSwwPT09dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRoaXMuaW5z'@;
put 'dGFuY2UucnVuSG9va3MoImFmdGVyUmVtb3ZlQ29sIixoLGEsZixkKSx0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksITB9c3BsaWNlQ29sKGwsYSxkKXtjb25zdCBoPXRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Q29sKGwpLGY9aC5zbGlj'@;
put 'ZShhLGErZCksXz1oLnNsaWNlKGErZCk7Zm9yKHZhciBUPWFyZ3VtZW50cy5sZW5ndGgsVz1uZXcgQXJyYXkoVD4zP1QtMzowKSxpZT0zO2llPFQ7aWUrKylXW2llLTNdPWFyZ3VtZW50c1tpZV07bk4oVyxfKTtsZXQgcGU9MDtmb3IoO3BlPGQ7KVcucHVzaChudWxsKSxwZSs9MTtyZXR1cm4g'@;
put 'cWVlKFcpLHRoaXMuaW5zdGFuY2UucG9wdWxhdGVGcm9tQXJyYXkoYSxsLFcsbnVsbCxudWxsLCJzcGxpY2VDb2wiKSxmfXNwbGljZVJvdyhsLGEsZCl7Y29uc3QgaD10aGlzLmluc3RhbmNlLmdldFNvdXJjZURhdGFBdFJvdyhsKSxmPWguc2xpY2UoYSxhK2QpLF89aC5zbGljZShhK2QpO2Zv'@;
put 'cih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFQ+Mz9ULTM6MCksaWU9MztpZTxUO2llKyspV1tpZS0zXT1hcmd1bWVudHNbaWVdO25OKFcsXyk7bGV0IHBlPTA7Zm9yKDtwZTxkOylXLnB1c2gobnVsbCkscGUrPTE7cmV0dXJuIHRoaXMuaW5zdGFuY2UucG9wdWxhdGVGcm9t'@;
put 'QXJyYXkobCxhLFtXXSxudWxsLG51bGwsInNwbGljZVJvdyIpLGZ9c3BsaWNlRGF0YShsLGEsZCl7aWYoITEhPT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVEYXRhU3BsaWNlIixsLGEsZCkpe2NvbnN0IGY9Wy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLGwpLC4uLmQsLi4udGhp'@;
put 'cy5kYXRhU291cmNlLnNsaWNlKGwpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsZi5mb3JFYWNoKF89PnRoaXMuZGF0YVNvdXJjZS5wdXNoKF8pKX19ZmlsdGVyRGF0YShsLGEsZCl7bGV0IGg9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiZmlsdGVyRGF0YSIsbCxhLGQpOyExPT09QXJyYXku'@;
put 'aXNBcnJheShoKSYmKGg9dGhpcy5kYXRhU291cmNlLmZpbHRlcigoZixfKT0+LTE9PT1kLmluZGV4T2YoXykpKSx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5kYXRhU291cmNlLGgpfWdldChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5j'@;
put 'ZS50b1BoeXNpY2FsUm93KGwpO2xldCBoPXRoaXMuZGF0YVNvdXJjZVtkXTtjb25zdCBmPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGQpO2g9aXNOYU4oZik/ZjpoO2xldCBfPW51bGw7aWYoaCYmaC5oYXNPd25Qcm9wZXJ0eSYmYmwoaCxhKSlfPWhbYV07ZWxzZSBp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtjb25zdCBUPWEuc3BsaXQoIi4iKTtsZXQgVz1oO2lmKCFXKXJldHVybiBudWxsO2ZvcihsZXQgaWU9MCxwZT1ULmxlbmd0aDtpZTxwZTtpZSsrKWlmKFc9V1tUW2llXV0sdHlwZW9mIFc+InUiKXJldHVybiBudWxsO189'@;
put 'V31lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGEmJihfPWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVswXSkpO2lmKHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBUPV9nKF8pO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGQsdGhpcy5w'@;
put 'cm9wVG9Db2woYSksVCwiZ2V0IiksVC5pc1RvdWNoZWQoKSYmKF89VC52YWx1ZSl9cmV0dXJuIF99Z2V0Q29weWFibGUobCxhKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5jb3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNldChsLGEsZCl7'@;
put 'Y29uc3QgaD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3cobCk7bGV0IGY9ZCxfPXRoaXMuZGF0YVNvdXJjZVtoXTtjb25zdCBUPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGgpO2lmKF89aXNOYU4oVCk/VDpfLHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5'@;
put 'RGF0YSIpKXtjb25zdCBXPV9nKGYpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGgsdGhpcy5wcm9wVG9Db2woYSksVywic2V0IiksVy5pc1RvdWNoZWQoKSYmKGY9Vy52YWx1ZSl9aWYoXyYmXy5oYXNPd25Qcm9wZXJ0eSYmYmwoXyxhKSlfW2FdPWY7ZWxzZSBpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtjb25zdCBXPWEuc3BsaXQoIi4iKTtsZXQgd2UsaWU9XyxwZT0wO2ZvcihwZT0wLHdlPVcubGVuZ3RoLTE7cGU8d2U7cGUrKyl0eXBlb2YgaWVbV1twZV1dPiJ1IiYmKGllW1dbcGVdXT17fSksaWU9aWVbV1twZV1dO2llW1dbcGVd'@;
put 'XT1mfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgYT9hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sZik6X1thXT1mfXZpc3VhbFJvd3NUb1BoeXNpY2FsKGwsYSl7Y29uc3QgZD10aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpLGg9W107bGV0IFQsZj0oZCtsKSVkLF89YTtm'@;
put 'b3IoO2Y8ZCYmXzspVD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKFQpLF8tPTEsZis9MTtyZXR1cm4gaH12aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSxoPVtdO2xldCBmPShkK2wpJWQsXz1hO2Zvcig7'@;
put 'ZjxkJiZfOyl7Y29uc3QgVD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oZik7aC5wdXNoKFQpLF8tPTEsZis9MX1yZXR1cm4gaH1jbGVhcigpe2ZvcihsZXQgbD0wO2w8dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmluc3RhbmNl'@;
put 'LmNvdW50Q29scygpO2ErKyl0aGlzLnNldChsLHRoaXMuY29sVG9Qcm9wKGEpLCIiKX1nZXRMZW5ndGgoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLm1heFJvd3M7bGV0IGE7YT1sPDB8fDA9PT1sPzA6bHx8MS8wO2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXROb3RU'@;
put 'cmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGEpfWdldEFsbCgpe2NvbnN0IGw9e3JvdzowLGNvbDowfSxhPXtyb3c6TWF0aC5tYXgodGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRoLm1heCh0aGlzLmluc3RhbmNlLmNvdW50Q29scygpLTEsMCl9'@;
put 'O3JldHVybiBsLnJvdy1hLnJvdyE9MHx8dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119Y291bnRDYWNoZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJhbmdl'@;
put 'KGwsYSxkKXtjb25zdCBoPVtdO2xldCBmLF8sVDtjb25zdCBXPXRoaXMudGFibGVNZXRhLm1heFJvd3MsaWU9dGhpcy50YWJsZU1ldGEubWF4Q29scztpZigwPT09V3x8MD09PWllKXJldHVybltdO2NvbnN0IHBlPWQ9PT1tNy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMu'@;
put 'Z2V0Q29weWFibGU6dGhpcy5nZXQsd2U9TWF0aC5taW4oTWF0aC5tYXgoVy0xLDApLE1hdGgubWF4KGwucm93LGEucm93KSksRWU9TWF0aC5taW4oTWF0aC5tYXgoaWUtMSwwKSxNYXRoLm1heChsLmNvbCxhLmNvbCkpO2ZvcihmPU1hdGgubWluKGwucm93LGEucm93KTtmPD13ZTtmKyspe1Q9'@;
put 'W107Y29uc3QgWmU9Zj49MD90aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coZik6Zjtmb3IoXz1NYXRoLm1pbihsLmNvbCxhLmNvbCk7Xzw9RWUmJm51bGwhPT1aZTtfKyspVC5wdXNoKHBlLmNhbGwodGhpcyxmLHRoaXMuY29sVG9Qcm9wKF8pKSk7bnVsbCE9PVplJiZoLnB1c2goVCl9cmV0'@;
put 'dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9SRU5ERVJFUikpfWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJv'@;
put 'eSgpe3RoaXMuaW5zdGFuY2U9bnVsbCx0aGlzLm1ldGFNYW5hZ2VyPW51bGwsdGhpcy5kYXRhU291cmNlPW51bGwsdGhpcy5kdWNrU2NoZW1hPW51bGwsdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGg9MCx0aGlzLnByb3BUb0NvbENhY2hlLmNsZWFyKCksdGhpcy5wcm9wVG9Db2xDYWNoZT12'@;
put 'b2lkIDB9fWNvbnN0IHpEZT1tNztmdW5jdGlvbiBqbmUoYyxsLGEsZCl7Y29uc3R7aG90SW5zdGFuY2U6aCxkYXRhTWFwOmYsZGF0YVNvdXJjZTpfLGludGVybmFsU291cmNlOlQsc291cmNlOlcsbWV0YU1hbmFnZXI6aWUsZmlyc3RSdW46cGV9PWQsd2U9YnUoVCksRWU9aC5nZXRTZXR0aW5n'@;
put 'cygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheShFZS5kYXRhU2NoZW1hKT8iYXJyYXkiOlJhKEVlLmRhdGFTY2hlbWEpPyJmdW5jdGlvbiI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUke3dlfWAsYyxwZSxXKTtjb25zdCBaZT1uZXcgekRlKGgsYyxpZSk7'@;
put 'aWYobChaZSksIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyljLnB1c2gmJmMuc3BsaWNlfHwoYz1bY10pO2Vsc2V7aWYobnVsbCE9PWMpdGhyb3cgbmV3IEVycm9yKGAke1R9IG9ubHkgYWNjZXB0cyBhcnJheSBvZiBvYmplY3RzIG9yIGFycmF5IG9mIGFycmF5cyAoJHt0eXBlb2YgY30g'@;
put 'Z2l2ZW4pYCk7e2NvbnN0IGl0PVplLmdldFNjaGVtYSgpO2M9W107bGV0IGV0LHl0PTAsRXQ9MDtmb3IoeXQ9MCxFdD1FZS5zdGFydFJvd3M7eXQ8RXQ7eXQrKylpZigib2JqZWN0IiE9PWguZGF0YVR5cGUmJiJmdW5jdGlvbiIhPT1oLmRhdGFUeXBlfHwhRWUuZGF0YVNjaGVtYSlpZigiYXJy'@;
put 'YXkiPT09aC5kYXRhVHlwZSlldD15dShpdFswXSksYy5wdXNoKGV0KTtlbHNle2V0PVtdO2ZvcihsZXQgU3Q9MCxKdD1FZS5zdGFydENvbHM7U3Q8SnQ7U3QrKylldC5wdXNoKG51bGwpO2MucHVzaChldCl9ZWxzZSBldD15dShpdCksYy5wdXNoKGV0KX19QXJyYXkuaXNBcnJheShjWzBdKSYm'@;
put 'KGguZGF0YVR5cGU9ImFycmF5IiksRWUuZGF0YT1jLFplLmRhdGFTb3VyY2U9YyxfLmRhdGE9YyxfLmRhdGFUeXBlPWguZGF0YVR5cGUsXy5jb2xUb1Byb3A9WmUuY29sVG9Qcm9wLmJpbmQoWmUpLF8ucHJvcFRvQ29sPVplLnByb3BUb0NvbC5iaW5kKFplKSxfLmNvdW50Q2FjaGVkQ29sdW1u'@;
put 'cz1aZS5jb3VudENhY2hlZENvbHVtbnMuYmluZChaZSksYShaZSksaC5ydW5Ib29rcyhgYWZ0ZXIke3dlfWAsYyxwZSxXKSxwZXx8KGgucnVuSG9va3MoImFmdGVyQ2hhbmdlIixudWxsLFQpLGgucmVuZGVyKCkpfWNvbnN0IHpuZT1uZXcgTWFwKFtbIiAiLCJzcGFjZSJdLFsic3BhY2ViYXIi'@;
put 'LCJzcGFjZSJdLFsic2Nyb2xsIiwic2Nyb2xsbG9jayJdLFsiZGVsIiwiZGVsZXRlIl0sWyJlc2MiLCJlc2NhcGUiXSxbIm1lZGlhbmV4dHRyYWNrIiwibWVkaWF0cmFja25leHQiXSxbIm1lZGlhcHJldmlvdXN0cmFjayIsIm1lZGlhdHJhY2twcmV2aW91cyJdLFsidm9sdW1ldXAiLCJhdWRp'@;
put 'b3ZvbHVtZXVwIl0sWyJ2b2x1bWVkb3duIiwiYXVkaW92b2x1bWVkb3duIl0sWyJ2b2x1bWVtdXRlIiwiYXVkaW92b2x1bWVtdXRlIl0sWyJtdWx0aXBseSIsIioiXSxbImFkZCIsIisiXSxbImRpdmlkZSIsIi8iXSxbInN1YnRyYWN0IiwiLSJdLFsibGVmdCIsImFycm93bGVmdCJdLFsicmln'@;
put 'aHQiLCJhcnJvd3JpZ2h0Il0sWyJ1cCIsImFycm93dXAiXSxbImRvd24iLCJhcnJvd2Rvd24iXV0pLFVrPWM9PmMubWFwKGw9Pntjb25zdCBhPWwudG9Mb3dlckNhc2UoKTtyZXR1cm4gem5lLmhhcyhhKT96bmUuZ2V0KGEpOmF9KS5zb3J0KCkuam9pbigiKyIpLFVuZT1jPT5jLnRvTG93ZXJD'@;
put 'YXNlKCksV0RlPVsibWV0YSIsImFsdCIsInNoaWZ0IiwiY29udHJvbCJdLFN5PWZ1bmN0aW9uIFlEZSgpe2NvbnN0IGM9bmV3IFNldDtyZXR1cm57cHJlc3MobCl7Yy5hZGQobCl9LHJlbGVhc2UobCl7Yy5kZWxldGUobCl9LHJlbGVhc2VBbGwoKXtjLmNsZWFyKCl9LGlzUHJlc3NlZDpsPT5j'@;
put 'LmhhcyhsKX19KCksJERlPWM9PntsZXR7b3duZXJXaW5kb3c6bCxoYW5kbGVFdmVudDphLGJlZm9yZUtleURvd246ZCxhZnRlcktleURvd246aH09Yztjb25zdCBmPV9rKHtlcnJvcklkRXhpc3RzOlplPT5gVGhlICIke1plfSIgY29udGV4dCBuYW1lIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5g'@;
put 'fSk7bGV0IF89ImdyaWQiO2NvbnN0IFc9KCk9Pl8saWU9WmU9PmYuZ2V0SXRlbShaZSk7bGV0IHdlPSExO2NvbnN0IEVlPWZ1bmN0aW9uIEdEZShjLGwsYSxkLGgpe2NvbnN0IGY9RWU9PldEZS5pbmNsdWRlcyhFZSksXz1mdW5jdGlvbihFZSl7bGV0IFplPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgaXQ9W107cmV0dXJuIEVlLmFsdEtleSYmaXQucHVzaCgiYWx0IiksWmUmJihFZS5jdHJsS2V5fHxFZS5tZXRhS2V5KT9pdC5wdXNoKCJjb250cm9sL21ldGEiKTooRWUuY3RybEtleSYmaXQucHVzaCgiY29udHJvbCIp'@;
put 'LEVlLm1ldGFLZXkmJml0LnB1c2goIm1ldGEiKSksRWUuc2hpZnRLZXkmJml0LnB1c2goInNoaWZ0IiksaXR9LFQ9RWU9PntpZighMT09PWwoRWUpKXJldHVybjtjb25zdCBaZT1hKEVlKTtpZigyMjk9PT1FZS5rZXlDb2RlfHwhMT09PVplfHxiZyhFZSkpcmV0dXJuO2NvbnN0IGl0PVVuZShF'@;
put 'ZS5rZXkpO2xldCBldD1bXTtmKGl0KT9TeS5wcmVzcyhpdCk6ZXQ9XyhFZSk7Y29uc3QgeXQ9W2l0XS5jb25jYXQoZXQpOyFoKEVlLHl0KSYmKGhrKCkmJmV0LmluY2x1ZGVzKCJtZXRhIil8fCFoaygpJiZldC5pbmNsdWRlcygiY29udHJvbCIpKSYmaChFZSxbaXRdLmNvbmNhdChfKEVlLCEw'@;
put 'KSkpLGQoRWUpfSxXPUVlPT57aWYoITE9PT1sKEVlKSlyZXR1cm47Y29uc3QgWmU9VW5lKEVlLmtleSk7ITEhPT1mKFplKSYmU3kucmVsZWFzZShaZSl9LGllPSgpPT57U3kucmVsZWFzZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoO0VlOylFZS5kb2N1bWVudC5kb2N1'@;
put 'bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixXKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsaWUpLEVlPWV5KEVlKX0s'@;
put 'dW5tb3VudDooKT0+e2xldCBFZT1jO2Zvcig7RWU7KUVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixUKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFcpLEVlLmRvY3VtZW50LmRv'@;
put 'Y3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixpZSksRWU9ZXkoRWUpfSxpc1ByZXNzZWQ6RWU9PlN5LmlzUHJlc3NlZChFZSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5TeS5yZWxlYXNlQWxsKCl9fShsLGEsZCxoLChaZSxpdCk9Pntjb25zdCBldD1pZShXKCkpO2xl'@;
put 'dCB5dD0hMTtpZighZXQuaGFzU2hvcnRjdXQoaXQpKXJldHVybiB5dDtjb25zdCBFdD1ldC5nZXRTaG9ydGN1dHMoaXQpO2ZvcihsZXQgU3Q9MDtTdDxFdC5sZW5ndGg7U3QrKyl7Y29uc3R7Y2FsbGJhY2s6SnQscnVuT25seUlmOm5uLHByZXZlbnREZWZhdWx0OnZuLHN0b3BQcm9wYWdhdGlv'@;
put 'bjpObixjYXB0dXJlQ3RybDpjcn09RXRbU3RdO2lmKCExIT09bm4oWmUpJiYod2U9Y3IseXQ9ITE9PT1KdChaZSxpdCksd2U9ITEsdm4mJlplLnByZXZlbnREZWZhdWx0KCksTm4mJlplLnN0b3BQcm9wYWdhdGlvbigpLHl0KSlicmVha31yZXR1cm4geXR9KTtyZXR1cm4gRWUubW91bnQoKSx7'@;
put 'YWRkQ29udGV4dDpaZT0+e2NvbnN0IGl0PShjPT57Y29uc3QgbD1fayh7ZXJyb3JJZEV4aXN0czpXPT5gVGhlICIke1d9IiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxhPWZ1bmN0aW9uKCl7bGV0e2tleXM6VyxjYWxsYmFjazppZSxn'@;
put 'cm91cDpwZSxydW5Pbmx5SWY6d2U9KCgpPT4hMCksY2FwdHVyZUN0cmw6RWU9ITEscHJldmVudERlZmF1bHQ6WmU9ITAsc3RvcFByb3BhZ2F0aW9uOml0PSExLHJlbGF0aXZlVG9Hcm91cDpldCxwb3NpdGlvbjp5dH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/'@;
put 'YXJndW1lbnRzWzBdOnt9O2lmKExhKHBlKSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSB0aGUgc2hvcnRjdXQncyBncm91cC4iKTtpZighMT09PVJhKGllKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24u'@;
put 'Iik7aWYoITE9PT1BcnJheS5pc0FycmF5KFcpKXRocm93IG5ldyBFcnJvcihBYWBQYXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgaHR0cHM6Ly9k'@;
put 'ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3QgRXQ9e2NhbGxiYWNrOmllLGdyb3VwOnBlLHJ1bk9ubHlJZjp3ZSxjYXB0dXJlQ3RybDpFZSxwcmV2ZW50RGVmYXVsdDpaZSxzdG9wUHJvcGFnYXRpb246'@;
put 'aXR9O0tpKGV0KSYmKFtFdC5yZWxhdGl2ZVRvR3JvdXAsRXQucG9zaXRpb25dPVtldCx5dF0pLFcuZm9yRWFjaChTdD0+e2NvbnN0IEp0PVVrKFN0KTtpZihsLmhhc0l0ZW0oSnQpKXtjb25zdCB2bj1sLmdldEl0ZW0oSnQpO2xldCBObj12bi5maW5kSW5kZXgoY3I9PmNyLmdyb3VwPT09ZXQp'@;
put 'Oy0xIT09Tm4/ImJlZm9yZSI9PT15dD9Obi09MTpObis9MTpObj12bi5sZW5ndGgsdm4uc3BsaWNlKE5uLDAsRXQpfWVsc2UgbC5hZGRJdGVtKEp0LFtFdF0pfSl9LGg9Vz0+e2NvbnN0IGllPVVrKFcpO2wucmVtb3ZlSXRlbShpZSl9O3JldHVybnthZGRTaG9ydGN1dDphLGFkZFNob3J0Y3V0'@;
put 'czpmdW5jdGlvbihXKXtsZXQgaWU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O1cuZm9yRWFjaChwZT0+e2RzKGllLCh3ZSxFZSk9PnshMT09PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwZSxFZSkmJihwZVtF'@;
put 'ZV09aWVbRWVdKX0pLGEocGUpfSl9LGdldFNob3J0Y3V0czpXPT57Y29uc3QgaWU9VWsoVykscGU9bC5nZXRJdGVtKGllKTtyZXR1cm4gS2kocGUpP3BlLnNsaWNlKCk6W119LGhhc1Nob3J0Y3V0Olc9Pntjb25zdCBpZT1VayhXKTtyZXR1cm4gbC5oYXNJdGVtKGllKX0scmVtb3ZlU2hvcnRj'@;
put 'dXRzQnlLZXlzOmgscmVtb3ZlU2hvcnRjdXRzQnlHcm91cDpXPT57bC5nZXRJdGVtcygpLmZvckVhY2gocGU9PntsZXRbd2UsRWVdPXBlO2NvbnN0IFplPUVlLmZpbHRlcihpdD0+aXQuZ3JvdXAhPT1XKTswPT09WmUubGVuZ3RoP2goKGM9PmMuc3BsaXQoIisiKSkod2UpKTooRWUubGVuZ3Ro'@;
put 'PTAsRWUucHVzaCguLi5aZSkpfSl9fX0pKFplKTtyZXR1cm4gZi5hZGRJdGVtKFplLGl0KSxpdH0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6VyxnZXRDb250ZXh0OmllLHNldEFjdGl2ZUNvbnRleHROYW1lOlplPT57Xz1aZX0saXNDdHJsUHJlc3NlZDooKT0+IXdlJiYoRWUuaXNQcmVzc2VkKCJj'@;
put 'b250cm9sIil8fEVlLmlzUHJlc3NlZCgibWV0YSIpKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PkVlLnJlbGVhc2VQcmVzc2VkS2V5cygpLGRlc3Ryb3k6KCk9PkVlLnVubW91bnQoKX19LHFEZT0iZ3JpZERlZmF1bHQiO2xldCBZQj1udWxsO2Z1bmN0aW9uIFdCKGMsbCl7dmFyIGE7bGV0IGQ9'@;
put 'YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9dGhpcztjb25zdCBfPW5ldyBsbChmKTtsZXQgVCxXLGllLHBlLHdlPSEwOyhmdW5jdGlvbiBvVGUoYyl7cmV0dXJuIGM9PT1uVn0pKGQpJiZmdW5jdGlvbiBpVGUoYyl7bG5lLnNl'@;
put 'dChjLCEwKX0odGhpcyksdGhpcy5yb290RWxlbWVudD1jLHRoaXMucm9vdERvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcsdGhpcy5pc0Rlc3Ryb3llZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0'@;
put 'aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDtjb25zdCBFZT1udWxsIT09KGE9bD8ubGF5b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09YT9hOiJpbmhlcml0IixaZT1bInJ0bCIsImx0ciJdLmluY2x1ZGVzKEVlKT9FZTp0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlz'@;
put 'LnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpciIsWmUpLHRoaXMuaXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PVplfSx0aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0'@;
put 'b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9LGwubGFuZ3VhZ2U9ZnVuY3Rpb24gcVRlKGMpe2xldCBsPU1uZShjKTtyZXR1cm4gTkIobCl8fChsPUhCLHhuZShjKSksbH0obC5sYW5ndWFnZSk7Y29uc3QgaXQ9bmV3IE5uZShmLGwsW05EZSxWRGVdKSxldD1pdC5nZXRUYWJs'@;
put 'ZU1ldGEoKSx5dD1pdC5nZXRHbG9iYWxNZXRhKCksRXQ9X2soKTt0aGlzLmNvbnRhaW5lcj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJlbmRlckNhbGw9ITEsYy5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsYy5maXJzdENoaWxkKSxyVih0aGlzKSYm'@;
put 'cnRlKGwubGljZW5zZUtleSxjKSx0aGlzLmd1aWQ9YGh0XyR7YU4oKX1gLHRoaXMuY29sdW1uSW5kZXhNYXBwZXI9bmV3IHZWLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IHZWLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHZ0PT57'@;
put 'Zi5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdnQpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix2dCl9KSxXPW5ldyBfVGUoZiksKCF0'@;
put 'aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQpO2NvbnN0IFN0PXZ0PT57Y29uc3R7cm93Ok90LGNvbDpjbn09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoT3Q+'@;
put 'PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE90KTpPdCxjbj49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoY24pOmNuKX07bGV0IG5uPW5ldyBFRGUoZXQse3Jvd0luZGV4TWFwcGVyOigpPT5mLnJvd0lu'@;
put 'ZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOigpPT5mLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50Q29sczooKT0+Zi5jb3VudENvbHMoKSxjb3VudFJvd3M6KCk9PmYuY291bnRSb3dzKCkscHJvcFRvQ29sOnZ0PT5ULnByb3BUb0NvbCh2dCksaXNFZGl0b3JPcGVuZWQ6KCk9PiEhZi5nZXRB'@;
put 'Y3RpdmVFZGl0b3IoKSYmZi5nZXRBY3RpdmVFZGl0b3IoKS5pc09wZW5lZCgpLGNvdW50Q29sc1RyYW5zbGF0ZWQ6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksY291bnRSb3dzVHJhbnNsYXRlZDooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3MoKSxnZXRT'@;
put 'aG9ydGN1dE1hbmFnZXI6KCk9PmYuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksY3JlYXRlQ2VsbENvb3JkczoodnQsT3QpPT5mLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxjcmVhdGVDZWxsUmFuZ2U6KHZ0LE90LGNuKT0+Zi5fY3JlYXRlQ2VsbFJhbmdlKHZ0LE90LGNuKSx2aXN1YWxUb1JlbmRl'@;
put 'cmFibGVDb29yZHM6U3QscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOnZ0PT57Y29uc3R7cm93Ok90LGNvbDpjbn09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoT3Q+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE90KTpPdCxjbj49MD9mLmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoY24pOmNuKX0saXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KHZ0LE90KT0+Zi5nZXRDZWxsTWV0YSh2dCxPdCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbn0pO3RoaXMuc2VsZWN0aW9uPW5uO2NvbnN0IHZuPXZ0PT57'@;
put 'bGV0e2hpZGRlbkluZGV4ZXNDaGFuZ2VkOk90fT12dDtPdCYmdGhpcy5zZWxlY3Rpb24ucmVmcmVzaCgpfTtmdW5jdGlvbiBObih2dCl7Y29uc3QgT3Q9TW5lKHZ0KTtOQihPdCk/KGYucnVuSG9va3MoImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixPdCkseXQubGFuZ3VhZ2U9T3QsZi5ydW5Ib29r'@;
put 'cygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsT3QpKTp4bmUodnQpfWZ1bmN0aW9uIGNyKHZ0LE90KXtjb25zdCBjbj0iY2xhc3NOYW1lIj09PXZ0P2Yucm9vdEVsZW1lbnQ6Zi50YWJsZTtpZih3ZSlwaShjbixPdCk7ZWxzZXtsZXQgRW49W10sUG49W107eXRbdnRdJiYoRW49QXJyYXkuaXNBcnJh'@;
put 'eSh5dFt2dF0pP3l0W3Z0XTpvTih5dFt2dF0pKSxPdCYmKFBuPUFycmF5LmlzQXJyYXkoT3QpP090Om9OKE90KSk7Y29uc3QgSm49aU4oRW4sUG4pLFByPWlOKFBuLEVuKTtKbi5sZW5ndGgmJldvKGNuLEpuKSxQci5sZW5ndGgmJnBpKGNuLFByKX15dFt2dF09T3R9ZnVuY3Rpb24gSXIoKXts'@;
put 'ZXQgdnQ9ITE7cmV0dXJue3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEsdnQ9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3Jz'@;
put 'SW5RdWV1ZS0xPDA/MDp0aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PXZ0JiYodnQ9ITAsdGhpcy5vblF1ZXVlRW1w'@;
put 'dHkodGhpcy52YWxpZCkpfX19ZnVuY3Rpb24gRWkodnQpe2NvbnN0IE90PXZ0LnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0KE90KSk/cGFyc2VGbG9hdChPdCk6dnR9ZnVuY3Rpb24gSWkodnQsT3QsY24pe2lmKCF2dC5sZW5ndGgpcmV0dXJuO2NvbnN0IEVu'@;
put 'PWYuZ2V0QWN0aXZlRWRpdG9yKCksUG49bmV3IElyO2xldCBKbj0hMDtQbi5vblF1ZXVlRW1wdHk9UHI9PntFbiYmSm4mJkVuLmNhbmNlbENoYW5nZXMoKSxjbihQcil9O2ZvcihsZXQgUHI9dnQubGVuZ3RoLTE7UHI+PTA7UHItLSl7Y29uc3RbT3IsJHIsLFlyXT12dFtQcl0sTnI9VC5wcm9w'@;
put 'VG9Db2woJHIpLFJpPWYuZ2V0Q2VsbE1ldGEoT3IsTnIpOyJudW1lcmljIj09PVJpLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgWXImJkx0ZShZcikmJih2dFtQcl1bM109RWkoWXIpKSxmLmdldENlbGxWYWxpZGF0b3IoUmkpJiYoUG4uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVD'@;
put 'ZWxsKHZ0W1ByXVszXSxSaSxmdW5jdGlvbihYbyxHbyl7cmV0dXJuIGZ1bmN0aW9uKEpzKXtpZigiYm9vbGVhbiIhPXR5cGVvZiBKcyl0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpO2lmKCExPT09SnMmJiExPT09R28uYWxsb3dJbnZh'@;
put 'bGlkKXtKbj0hMSx2dC5zcGxpY2UoWG8sMSksR28udmFsaWQ9ITA7Y29uc3QgZ2E9Zi5nZXRDZWxsKEdvLnZpc3VhbFJvdyxHby52aXN1YWxDb2wpO251bGwhPT1nYSYmV28oZ2EsZXQuaW52YWxpZENlbGxDbGFzc05hbWUpfVBuLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0oUHIsUmkp'@;
put 'LE90KSl9UG4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9uIGZyKHZ0LE90KXtsZXQgY249dnQubGVuZ3RoLTE7aWYoY248MClyZXR1cm47Zm9yKDtjbj49MDtjbi0tKXtsZXQgUG49ITE7aWYobnVsbCE9PXZ0W2NuXSl7aWYobnVsbCE9dnRbY25dWzJdfHxudWxsIT12dFtjbl1bM10p'@;
put 'e2lmKGV0LmFsbG93SW5zZXJ0Um93KWZvcig7dnRbY25dWzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOkpufT1ULmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6T3R9KTtpZigwPT09Sm4pe1BuPSEwO2JyZWFrfX1pZigiYXJyYXkiPT09Zi5kYXRhVHlwZSYmKCFldC5j'@;
put 'b2x1bW5zfHwwPT09ZXQuY29sdW1ucy5sZW5ndGgpJiZldC5hbGxvd0luc2VydENvbHVtbilmb3IoO1QucHJvcFRvQ29sKHZ0W2NuXVsxXSk+Zi5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6Sm59PVQuY3JlYXRlQ29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZTpPdH0pO2lmKDA9PT1Kbil7'@;
put 'UG49ITA7YnJlYWt9fVBufHxULnNldCh2dFtjbl1bMF0sdnRbY25dWzFdLHZ0W2NuXVszXSl9fWVsc2UgdnQuc3BsaWNlKGNuLDEpfWYuZm9yY2VGdWxsUmVuZGVyPSEwLGllLmFkanVzdFJvd3NBbmRDb2xzKCksZi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlUmVuZGVyIix2dCxPdCkscGUubG9j'@;
put 'a0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLHBlLnVubG9ja0VkaXRvcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsdnQsT3R8fCJlZGl0Iik7Y29uc3QgRW49Zi5nZXRBY3RpdmVFZGl0b3IoKTtFbiYmS2koRW4ucmVmcmVz'@;
put 'aFZhbHVlKSYmRW4ucmVmcmVzaFZhbHVlKCl9ZnVuY3Rpb24gaWkodnQsT3QsY24pe3JldHVybiBBcnJheS5pc0FycmF5KHZ0KT92dDpbW3Z0LE90LGNuXV19ZnVuY3Rpb24ganIodnQsT3Qpe2NvbnN0IGNuPWYuZ2V0QWN0aXZlRWRpdG9yKCksRW49Zi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdl'@;
put 'Iix2dCxPdHx8ImVkaXQiKSxQbj12dC5maWx0ZXIoSm49Pm51bGwhPT1Kbik7cmV0dXJuITE9PT1Fbnx8MD09PVBuLmxlbmd0aD8oY24mJmNuLmNhbmNlbENoYW5nZXMoKSxbXSk6UG59dGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsdm4pLHRoaXMu'@;
put 'cm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHZuKSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLHZ0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9j'@;
put 'YWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5n'@;
put 'ZUVuZCIsdnQpLHZ0LnJvdzwwJiYodnQucm93PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSksdnQuY29sPDAmJih2dC5jb2w9dGhpcy52aWV3Ll93dC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9v'@;
put 'aygiYWZ0ZXJTZXRSYW5nZUVuZCIsdnQ9Pntjb25zdCBPdD1fZyghMSksY249dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOkVuLHRvOlBufT1jbi5jdXJyZW50KCksSm49Y24uc2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLEVuLnJvdyxFbi5j'@;
put 'b2wsUG4ucm93LFBuLmNvbCxPdCxKbiksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLEVuLnJvdyxmLmNvbFRvUHJvcChFbi5jb2wpLFBuLnJvdyxmLmNvbFRvUHJvcChQbi5jb2wpLE90LEpuKTtjb25zdCBQcj10aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlBbnlIZWFk'@;
put 'ZXIoKSxPcj10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtsZXQgJHI9ITA7aCYmKCRyPSExKSxPdC5pc1RvdWNoZWQoKSYmKCRyPSFPdC52YWx1ZSk7Y29uc3QgWXI9dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTnI9dGhpcy5zZWxlY3Rpb24u'@;
put 'aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7ITEhPT0kciYmKFByP1lyP3RoaXMudmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoZi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0LnJvdykpOk5yJiZ0aGlzLnZpZXcuc2Nyb2xsVmlld3BvcnRIb3Jp'@;
put 'em9udGFsbHkoZi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0LmNvbCkpOk9yJiYhdGhpcy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpP3RoaXMudmlldy5zY3JvbGxWaWV3cG9ydChTdChPci5mcm9tKSk6dGhpcy52aWV3LnNjcm9sbFZpZXdwb3J0KFN0'@;
put 'KHZ0KSkpLFlyJiZOcj9waSh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSk6WXI/KFdvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSxwaSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0'@;
put 'aW9uLS1yb3dzIikpOk5yPyhXbyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1yb3dzIikscGkodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpKTpXbyh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24t'@;
put 'LWNvbHVtbnMiXSksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLHZ0PT57Y29uc3QgT3Q9dnQubGVuZ3RoLTEse2Zyb206Y24sdG86RW59PXZ0W090XTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNl'@;
put 'bGVjdGlvbkVuZCIsY24ucm93LGNuLmNvbCxFbi5yb3csRW4uY29sLE90KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsY24ucm93LGYuY29sVG9Qcm9wKGNuLmNvbCksRW4ucm93LGYuY29sVG9Qcm9wKEVuLmNvbCksT3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9j'@;
put 'YWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0PT57Y29uc3QgT3Q9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dC52YWx1ZSk7dnQudmFsdWUmJih2dC52YWx1ZT1PdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlm'@;
put 'eVRyYW5zZm9ybVN0YXJ0Iix2dD0+e3RoaXMucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybVN0YXJ0Iix2dCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCh2dCxPdCxjbik9Pnt0aGlzLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5z'@;
put 'Zm9ybVN0YXJ0Iix2dCxPdCxjbil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLHZ0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlU'@;
put 'cmFuc2Zvcm1FbmQiLCh2dCxPdCxjbik9Pnt0aGlzLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsdnQsT3QsY24pfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckRlc2VsZWN0IiwoKT0+e3BlLmRlc3Ryb3lFZGl0b3IoKSx0aGlzLl9yZWZyZXNoQm9yZGVy'@;
put 'cygpLFdvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSx0aGlzLnJ1bkhvb2tzKCJhZnRlckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHZ0PT57dGhpcy5h'@;
put 'bHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdnQsMSwiYXV0byIpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIix2dD0+e3RoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHZ0LDEsImF1dG8iKX0pLGllPXthbHRlcih2dCxPdCl7dmFyIGNuLEVuO2xl'@;
put 'dCBQbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxKbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxQcj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBPcj0kcj0+e2lmKDA9'@;
put 'PT0kci5sZW5ndGgpcmV0dXJuW107Y29uc3QgWXI9Wy4uLiRyXTtyZXR1cm4gWXIuc29ydCgoUmksWG8pPT57bGV0W0dvXT1SaSxbSnNdPVhvO3JldHVybiBHbz09PUpzPzA6R28+SnM/MTotMX0pLEFsKFlyLChSaSxYbyk9PntsZXRbR28sSnNdPVhvO2NvbnN0IGdhPVJpW1JpLmxlbmd0aC0x'@;
put 'XSxbdW8sQXRdPWdhLERpPXVvK0F0O2lmKEdvPD1EaSl7Y29uc3QgUXM9TWF0aC5tYXgoSnMtKERpLUdvKSwwKTtnYVsxXSs9UXN9ZWxzZSBSaS5wdXNoKFtHbyxKc10pO3JldHVybiBSaX0sW1lyWzBdXSl9O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9y'@;
put 'b3dfYWJvdmUiOmNvbnN0ICRyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYoZXQubWF4Um93cz09PSRyKXJldHVybjtjb25zdCBZcj0iaW5zZXJ0X3Jvd19iZWxvdyI9PT12dD8iYmVsb3ciOiJhYm92ZSI7T3Q9bnVsbCE9PShjbj1PdCkmJnZvaWQgMCE9PWNuP2NuOiJiZWxvdyI9PT1Zcj8kcjow'@;
put 'O2NvbnN0e2RlbHRhOk5yLHN0YXJ0UGh5c2ljYWxJbmRleDpSaX09VC5jcmVhdGVSb3coT3QsUG4se3NvdXJjZTpKbixtb2RlOllyfSk7aWYoTnIpe2NvbnN0IEF0PW5uLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLERpPUF0Py5mcm9tLFFzPURpPy5yb3csbGE9Zi50b1Zpc3VhbFJvdyhSaSk7'@;
put 'aWYobm4uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKEtpKFFzKSYmUXM+PWxhKXtjb25zdHtyb3c6RnMsY29sOnRjfT1BdC50bztsZXQgQ2E9RGkuY29sO25uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYoQ2E9LTEpLG5uLmdldFNlbGVjdGVkUmFuZ2UoKS5w'@;
put 'b3AoKSxubi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKFFzK05yLENhKSwhMCksbm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhGcytOcix0YykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2Ui'@;
put 'aW5zZXJ0X2NvbF9lbmQiOmNvbnN0IFhvPSJpbnNlcnRfY29sX2VuZCI9PT12dD8iZW5kIjoic3RhcnQiO090PW51bGwhPT0oRW49T3QpJiZ2b2lkIDAhPT1Fbj9FbjoiZW5kIj09PVhvP2YuY291bnRTb3VyY2VDb2xzKCk6MDtjb25zdHtkZWx0YTpHbyxzdGFydFBoeXNpY2FsSW5kZXg6SnN9'@;
put 'PVQuY3JlYXRlQ29sKE90LFBuLHtzb3VyY2U6Sm4sbW9kZTpYb30pO2lmKEdvKXtpZihBcnJheS5pc0FycmF5KGV0LmNvbEhlYWRlcnMpKXtjb25zdCBGcz1bZi50b1Zpc3VhbENvbHVtbihKcyksMF07RnMubGVuZ3RoKz1HbyxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGV0LmNvbEhl'@;
put 'YWRlcnMsRnMpfWNvbnN0IEF0PW5uLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLERpPUF0Py5mcm9tLFFzPURpPy5jb2wsbGE9Zi50b1Zpc3VhbENvbHVtbihKcyk7aWYobm4uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKEtpKFFzKSYmUXM+PWxhKXtjb25zdHty'@;
put 'b3c6RnMsY29sOnRjfT1BdC50bztsZXQgQ2E9RGkucm93O25uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYoQ2E9LTEpLG5uLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKSxubi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKENhLFFzK0dvKSwhMCksbm4uc2V0UmFu'@;
put 'Z2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhGcyx0YytHbykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlInJlbW92ZV9yb3ciOmNvbnN0IGdhPUF0PT57bGV0IERpPTA7RG4oQXQsUXM9PntsZXRbbGEsRnNdPVFzO2NvbnN0IHRjPWdjKGxhKT9mLmNvdW50Um93cygpLTE6'@;
put 'TWF0aC5tYXgobGEtRGksMCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsYSkmJihsYT1NYXRoLm1heChsYS1EaSwwKSksIVQucmVtb3ZlUm93KGxhLEZzLEpuKSlyZXR1cm47Y29uc3QgUmg9Zi5jb3VudFJvd3MoKSxTMT1ldC5maXhlZFJvd3NUb3A7UzE+PXRjKzEmJihldC5maXhlZFJvd3NUb3At'@;
put 'PU1hdGgubWluKEZzLFMxLXRjKSk7Y29uc3QgSWw9ZXQuZml4ZWRSb3dzQm90dG9tO0lsJiZ0Yz49UmgtSWwmJihldC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKEZzLElsKSksRGkrPUZzfSl9O0FycmF5LmlzQXJyYXkoT3QpP2dhKE9yKE90KSk6Z2EoW1tPdCxQbl1dKSxpZS5hZGp1c3RS'@;
put 'b3dzQW5kQ29scygpLGYuX3JlZnJlc2hCb3JkZXJzKCk7YnJlYWs7Y2FzZSJyZW1vdmVfY29sIjpjb25zdCB1bz1BdD0+e2xldCBEaT0wO0RuKEF0LFFzPT57bGV0W2xhLEZzXT1Rcztjb25zdCB0Yz1nYyhsYSk/Zi5jb3VudENvbHMoKS0xOk1hdGgubWF4KGxhLURpLDApO2xldCBDYT1mLnRv'@;
put 'UGh5c2ljYWxDb2x1bW4odGMpO2lmKE51bWJlci5pc0ludGVnZXIobGEpJiYobGE9TWF0aC5tYXgobGEtRGksMCkpLCFULnJlbW92ZUNvbChsYSxGcyxKbikpcmV0dXJuO2NvbnN0IFMxPWV0LmZpeGVkQ29sdW1uc1N0YXJ0O1MxPj10YysxJiYoZXQuZml4ZWRDb2x1bW5zU3RhcnQtPU1hdGgu'@;
put 'bWluKEZzLFMxLXRjKSksQXJyYXkuaXNBcnJheShldC5jb2xIZWFkZXJzKSYmKHR5cGVvZiBDYT4idSImJihDYT0tMSksZXQuY29sSGVhZGVycy5zcGxpY2UoQ2EsRnMpKSxEaSs9RnN9KX07QXJyYXkuaXNBcnJheShPdCk/dW8oT3IoT3QpKTp1byhbW090LFBuXV0pLGllLmFkanVzdFJvd3NB'@;
put 'bmRDb2xzKCksZi5fcmVmcmVzaEJvcmRlcnMoKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc3VjaCBhY3Rpb24gIiR7dnR9ImApfVByfHxpZS5hZGp1c3RSb3dzQW5kQ29scygpfSxhZGp1c3RSb3dzQW5kQ29scygpe2NvbnN0IHZ0PWV0Lm1pblJvd3MsT3Q9'@;
put 'ZXQubWluU3BhcmVSb3dzLGNuPWV0Lm1pbkNvbHMsRW49ZXQubWluU3BhcmVDb2xzO2lmKDA9PT1mLmNvdW50Um93cygpJiYwPT09Zi5jb3VudENvbHMoKSYmbm4uZGVzZWxlY3QoKSx2dCl7Y29uc3QgUG49Zi5jb3VudFJvd3MoKTtQbjx2dCYmVC5jcmVhdGVSb3coUG4sdnQtUG4se3NvdXJj'@;
put 'ZToiYXV0byJ9KX1pZihPdCl7Y29uc3QgUG49Zi5jb3VudEVtcHR5Um93cyghMCk7aWYoUG48T3Qpe2NvbnN0IFByPU1hdGgubWluKE90LVBuLGV0Lm1heFJvd3MtZi5jb3VudFNvdXJjZVJvd3MoKSk7VC5jcmVhdGVSb3coZi5jb3VudFJvd3MoKSxQcix7c291cmNlOiJhdXRvIn0pfX17bGV0'@;
put 'IFBuOyhjbnx8RW4pJiYoUG49Zi5jb3VudEVtcHR5Q29scyghMCkpO2xldCBKbj1mLmNvdW50Q29scygpO2lmKGNuJiYhZXQuY29sdW1ucyYmSm48Y24pe2NvbnN0IFByPWNuLUpuO1BuKz1QcixULmNyZWF0ZUNvbChKbixQcix7c291cmNlOiJhdXRvIn0pfWlmKEVuJiYhZXQuY29sdW1ucyYm'@;
put 'ImFycmF5Ij09PWYuZGF0YVR5cGUmJlBuPEVuKXtKbj1mLmNvdW50Q29scygpO2NvbnN0IE9yPU1hdGgubWluKEVuLVBuLGV0Lm1heENvbHMtSm4pO1QuY3JlYXRlQ29sKEpuLE9yLHtzb3VyY2U6ImF1dG8ifSl9fWlmKG5uLmlzU2VsZWN0ZWQoKSl7Y29uc3QgUG49Zi5jb3VudFJvd3MoKSxK'@;
put 'bj1mLmNvdW50Q29scygpO0RuKG5uLnNlbGVjdGVkUmFuZ2UsUHI9PntsZXQgT3I9ITEsJHI9UHIuZnJvbS5yb3csWXI9UHIuZnJvbS5jb2wsTnI9UHIudG8ucm93LFJpPVByLnRvLmNvbDskcj5Qbi0xPygkcj1Qbi0xLE9yPSEwLE5yPiRyJiYoTnI9JHIpKTpOcj5Qbi0xJiYoTnI9UG4tMSxP'@;
put 'cj0hMCwkcj5OciYmKCRyPU5yKSksWXI+Sm4tMT8oWXI9Sm4tMSxPcj0hMCxSaT5ZciYmKFJpPVlyKSk6Umk+Sm4tMSYmKFJpPUpuLTEsT3I9ITAsWXI+UmkmJihZcj1SaSkpLE9yJiZmLnNlbGVjdENlbGwoJHIsWXIsTnIsUmkpfSl9Zi52aWV3JiZmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXpl'@;
put 'KCl9LHBvcHVsYXRlRnJvbUFycmF5KHZ0LE90LGNuLEVuLFBuKXtsZXQgSm4sUHIsT3IsJHI7Y29uc3QgWXI9W10sTnI9e30sUmk9W10sWG89dnQucm93LEdvPXZ0LmNvbDtpZihQcj1PdC5sZW5ndGgsMD09PVByKXJldHVybiExO2xldCBKcz0wLGdhPTA7c3dpdGNoKHVzKGNuKSYmKEpzPWNu'@;
put 'LmNvbC1HbysxLGdhPWNuLnJvdy1YbysxKSxQbil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCB1bz1LYihPdCksQXQ9dW8ubGVuZ3RoLERpPU1hdGgubWF4KEF0LEpzKSxRcz1mLmdldERhdGEoKS5zbGljZShYbyksbGE9S2IoUXMpLnNsaWNlKEdvLEdvK0RpKTtmb3IoT3I9MDtPcjxEaTtPcis9'@;
put 'MSlpZihPcjxBdCl7Zm9yKEpuPTAsUHI9dW9bT3JdLmxlbmd0aDtKbjxnYS1QcjtKbis9MSl1b1tPcl0ucHVzaCh1b1tPcl1bSm4lUHJdKTtSaS5wdXNoKHVvW09yXS5jb25jYXQoT3I8bGEubGVuZ3RoP2xhW09yXTpuZXcgQXJyYXkoUXMubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBSaS5w'@;
put 'dXNoKHVvW09yJUF0XS5jb25jYXQobGFbT3JdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheShYbyxHbyxLYihSaSkpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IEZzPU90Lmxlbmd0aCx0Yz1NYXRoLm1heChGcyxnYSksQ2E9Zi5nZXREYXRhKCkuc2xpY2UoWG8pLm1hcCgkYz0+JGMuc2xp'@;
put 'Y2UoR28pKTtmb3IoSm49MDtKbjx0YztKbis9MSlpZihKbjxGcyl7Zm9yKE9yPTAsJHI9T3RbSm5dLmxlbmd0aDtPcjxKcy0kcjtPcis9MSlPdFtKbl0ucHVzaChPdFtKbl1bT3IlJHJdKTtpZihKbjxDYS5sZW5ndGgpZm9yKGxldCAkYz0wOyRjPENhW0puXS5sZW5ndGg7JGMrPTEpT3RbSm5d'@;
put 'LnB1c2goQ2FbSm5dWyRjXSk7ZWxzZSBPdFtKbl0ucHVzaCguLi5uZXcgQXJyYXkoQ2FbMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIE90LnB1c2goT3RbSm4lUHJdLnNsaWNlKDAsdGMpLmNvbmNhdChDYVtKbl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KFhvLEdvLE90KTticmVhaztkZWZh'@;
put 'dWx0Ok5yLnJvdz12dC5yb3csTnIuY29sPXZ0LmNvbDtsZXQgeDIsUmg9MCxTMT0wLElsPSEwO2NvbnN0IHU0PWZ1bmN0aW9uKFNkKXtsZXQgSnU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3QgTTE9T3RbU2QlT3QubGVu'@;
put 'Z3RoXTtyZXR1cm4gbnVsbCE9PUp1P00xW0p1JU0xLmxlbmd0aF06TTF9LE9oPU90Lmxlbmd0aCxDZD1jbj9jbi5yb3ctdnQucm93KzE6MDtmb3IoUHI9Y24/Q2Q6TWF0aC5tYXgoT2gsQ2QpLEpuPTA7Sm48UHImJiEoY24mJk5yLnJvdz5jbi5yb3cmJkNkPk9ofHwhZXQuYWxsb3dJbnNlcnRS'@;
put 'b3cmJk5yLnJvdz5mLmNvdW50Um93cygpLTF8fE5yLnJvdz49ZXQubWF4Um93cyk7Sm4rKyl7Y29uc3QgJGM9Sm4tUmgsU2Q9dTQoJGMpLmxlbmd0aCxKdT1jbj9jbi5jb2wtdnQuY29sKzE6MDtpZigkcj1jbj9KdTpNYXRoLm1heChTZCxKdSksTnIuY29sPXZ0LmNvbCx4Mj1mLmdldENlbGxN'@;
put 'ZXRhKE5yLnJvdyxOci5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09RW4mJiJBdXRvZmlsbC5maWxsIiE9PUVufHwheDIuc2tpcFJvd09uUGFzdGUpe2ZvcihTMT0wLE9yPTA7T3I8JHImJiEoY24mJk5yLmNvbD5jbi5jb2wmJkp1PlNkfHwhZXQuYWxsb3dJbnNlcnRDb2x1bW4mJk5yLmNvbD5m'@;
put 'LmNvdW50Q29scygpLTF8fE5yLmNvbD49ZXQubWF4Q29scyk7T3IrKyl7aWYoeDI9Zi5nZXRDZWxsTWV0YShOci5yb3csTnIuY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Fbnx8IkF1dG9maWxsLmZpbGwiPT09RW4pJiZ4Mi5za2lwQ29sdW1uT25QYXN0ZSl7UzErPTEsTnIuY29sKz0xLCRy'@;
put 'Kz0xO2NvbnRpbnVlfWlmKHgyLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Fbil7TnIuY29sKz0xO2NvbnRpbnVlfWxldCBNdT11NCgkYyxPci1TMSksYXU9Zi5nZXREYXRhQXRDZWxsKE5yLnJvdyxOci5jb2wpO2lmKG51bGwhPT1NdSYmIm9iamVjdCI9PXR5cGVvZiBNdSlpZihBcnJh'@;
put 'eS5pc0FycmF5KE11KSYmbnVsbD09PWF1JiYoYXU9W10pLG51bGw9PT1hdXx8Im9iamVjdCIhPXR5cGVvZiBhdSlJbD0hMTtlbHNle2NvbnN0IHgxPXI3KEFycmF5LmlzQXJyYXkoYXUpP2F1OmF1WzBdfHxhdSksRTI9cjcoQXJyYXkuaXNBcnJheShNdSk/TXU6TXVbMF18fE11KTtsayh4MSxF'@;
put 'Mil8fEFycmF5LmlzQXJyYXkoeDEpJiZBcnJheS5pc0FycmF5KEUyKT9NdT15dShNdSk6SWw9ITF9ZWxzZSBudWxsIT09YXUmJiJvYmplY3QiPT10eXBlb2YgYXUmJihJbD0hMSk7SWwmJllyLnB1c2goW05yLnJvdyxOci5jb2wsTXVdKSxJbD0hMCxOci5jb2wrPTF9TnIucm93Kz0xfWVsc2Ug'@;
put 'UmgrPTEsTnIucm93Kz0xLFByKz0xfWYuc2V0RGF0YUF0Q2VsbChZcixudWxsLG51bGwsRW58fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe1cuc2V0RGF0YShldC5kYXRhKSxmLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKG0yKCl8fHlOKCkpJiZwaShmLnJv'@;
put 'b3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKGV0LCEwKSx0aGlzLnZpZXc9bmV3IGhUZSh0aGlzKSxwZT1ja2UuZ2V0SW5zdGFuY2UoZixldCxubiksZi5ydW5Ib29rcygiaW5pdCIpLHRoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMudmlldy5yZW5kZXIoKSx3ZSYm'@;
put 'bnVsbD09PWYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZwdGUoZi5yb290RWxlbWVudCwoKT0+e2Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCksZi5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9KSwib2JqZWN0Ij09dHlwZW9mIHdl'@;
put 'JiYoZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLHdlWzBdLHdlWzFdKSx3ZT0hMSksZi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9ZnVuY3Rpb24odnQsT3Qpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxDb29yZHModnQsT3QpfSx0aGlzLl9jcmVh'@;
put 'dGVDZWxsUmFuZ2U9ZnVuY3Rpb24odnQsT3QsY24pe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZSh2dCxPdCxjbil9LHRoaXMudmFsaWRhdGVDZWxsPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtsZXQgUG49Zi5nZXRDZWxsVmFsaWRhdG9yKE90KTtmdW5jdGlvbiBKbihQcil7aWYo'@;
put 'YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09T3QuaGlkZGVuKXJldHVybiB2b2lkIGNuKFByKTtjb25zdCAkcj1PdC52aXN1YWxDb2wsWXI9T3QudmlzdWFsUm93LE5yPWYuZ2V0Q2VsbChZciwkciwhMCk7aWYoTnImJiJUSCIh'@;
put 'PT1Oci5ub2RlTmFtZSl7Y29uc3QgUmk9Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFlyKSxYbz1mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoJHIpO2Yudmlldy5fd3QuZ2V0U2V0dGluZygiY2VsbFJlbmRlcmVy'@;
put 'IixSaSxYbyxOcil9Y24oUHIpfXZhciBQcjtKZWUoUG4pJiYoUHI9UG4sUG49ZnVuY3Rpb24oT3IsJHIpeyRyKFByLnRlc3QoT3IpKX0pLFJhKFBuKT8odnQ9Zi5ydW5Ib29rcygiYmVmb3JlVmFsaWRhdGUiLHZ0LE90LnZpc3VhbFJvdyxPdC5wcm9wLEVuKSxmLl9yZWdpc3RlckltbWVkaWF0'@;
put 'ZSgoKT0+e1BuLmNhbGwoT3QsdnQsUHI9PntmJiYoUHI9Zi5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsUHIsdnQsT3QudmlzdWFsUm93LE90LnByb3AsRW4pLE90LnZhbGlkPVByLEpuKFByKSxmLnJ1bkhvb2tzKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsUHIsdnQsT3QudmlzdWFsUm93LE90LnBy'@;
put 'b3AsRW4pKX0pfSkpOmYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57T3QudmFsaWQ9ITAsSm4oT3QudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgUG49aWkodnQsT3QsY24pLEpuPVtdO2xldCBPciwkcixZcixQcj1Fbjtmb3IoT3I9'@;
put 'MCwkcj1Qbi5sZW5ndGg7T3I8JHI7T3IrKyl7aWYoIm9iamVjdCIhPXR5cGVvZiBQbltPcl0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBjaGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7'@;
put 'aWYoIm51bWJlciIhPXR5cGVvZiBQbltPcl1bMV0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IGFuZCBjb2x1bW4gbnVtYmVyIGFzIGl0cyBwYXJhbWV0ZXJzLiBJZiB5b3Ugd2FudCB0byB1c2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUsIHVzZSBt'@;
put 'ZXRob2QgYHNldERhdGFBdFJvd1Byb3BgIik7WXI9UG5bT3JdWzFdPj10aGlzLmNvdW50Q29scygpP1BuW09yXVsxXTpULmNvbFRvUHJvcChQbltPcl1bMV0pLEpuLnB1c2goW1BuW09yXVswXSxZcixXLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coUG5bT3JdWzBdKSxQbltPcl1bMV0p'@;
put 'LFBuW09yXVsyXV0pfSFQciYmIm9iamVjdCI9PXR5cGVvZiB2dCYmKFByPU90KTtjb25zdCBOcj1qcihKbixFbik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRDZWxsIixOcixQciksSWkoTnIsUHIsKCk9PntmcihOcixQcil9KX0sdGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0'@;
put 'LE90LGNuLEVuKXtjb25zdCBQbj1paSh2dCxPdCxjbiksSm49W107bGV0IE9yLCRyLFByPUVuO2ZvcihPcj0wLCRyPVBuLmxlbmd0aDtPcjwkcjtPcisrKUpuLnB1c2goW1BuW09yXVswXSxQbltPcl1bMV0sVy5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KFBuW09yXVswXSksUG5bT3Jd'@;
put 'WzFdKSxQbltPcl1bMl1dKTshUHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihQcj1PdCk7Y29uc3QgWXI9anIoSm4sRW4pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsWXIsUHIpLElpKFlyLFByLCgpPT57ZnIoWXIsUHIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ZiYm'@;
put 'IWYuaXNMaXN0ZW5pbmcoKSYmKFlCPWYuZ3VpZCxmLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhpcy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKFlCPW51bGwsZi5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlv'@;
put 'bigpe3JldHVybiBZQj09PWYuZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7Zi5fcmVmcmVzaEJvcmRlcnMoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzFdKXx8YXJndW1lbnRzWzFdKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbih2dCxPdCxjbixFbixQbixKbixQcil7aWYoIm9iamVjdCIhPXR5cGVvZiBjbnx8Im9iamVjdCIhPXR5cGVvZiBjblswXSl0aHJvdyBuZXcgRXJyb3IoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFt'@;
put 'ZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29uc3QgT3I9Im51bWJlciI9PXR5cGVvZiBFbj9mLl9jcmVhdGVDZWxsQ29vcmRzKEVuLFBuKTpudWxsO3JldHVybiBpZS5wb3B1bGF0ZUZyb21BcnJheShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxjbixPcixK'@;
put 'bixQcil9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKHZ0LE90LGNuKXtmb3IodmFyIEVuPWFyZ3VtZW50cy5sZW5ndGgsUG49bmV3IEFycmF5KEVuPjM/RW4tMzowKSxKbj0zO0puPEVuO0puKyspUG5bSm4tM109YXJndW1lbnRzW0puXTtyZXR1cm4gVC5zcGxpY2VDb2wodnQsT3QsY24sLi4u'@;
put 'UG4pfSx0aGlzLnNwbGljZVJvdz1mdW5jdGlvbih2dCxPdCxjbil7Zm9yKHZhciBFbj1hcmd1bWVudHMubGVuZ3RoLFBuPW5ldyBBcnJheShFbj4zP0VuLTM6MCksSm49MztKbjxFbjtKbisrKVBuW0puLTNdPWFyZ3VtZW50c1tKbl07cmV0dXJuIFQuc3BsaWNlUm93KHZ0LE90LGNuLC4uLlBu'@;
put 'KX0sdGhpcy5nZXRTZWxlY3RlZD1mdW5jdGlvbigpe2lmKG5uLmlzU2VsZWN0ZWQoKSlyZXR1cm4gY3Mobm4uZ2V0U2VsZWN0ZWRSYW5nZSgpLHZ0PT57bGV0e2Zyb206T3QsdG86Y259PXZ0O3JldHVybltPdC5yb3csT3QuY29sLGNuLnJvdyxjbi5jb2xdfSl9LHRoaXMuZ2V0U2VsZWN0ZWRM'@;
put 'YXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBPdDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoT3Q9dnRbdnQubGVuZ3RoLTFdKSxPdH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlPWZ1bmN0aW9uKCl7aWYobm4uaXNTZWxlY3RlZCgpKXJldHVybiBBcnJheS5m'@;
put 'cm9tKG5uLmdldFNlbGVjdGVkUmFuZ2UoKSl9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgT3Q7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE90PXZ0W3Z0Lmxlbmd0aC0xXSksT3R9LHRoaXMuZW1wdHlT'@;
put 'ZWxlY3RlZENlbGxzPWZ1bmN0aW9uKHZ0KXtpZighbm4uaXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IE90PVtdO0RuKG5uLmdldFNlbGVjdGVkUmFuZ2UoKSxjbj0+e2NvbnN0IEVuPWNuLmdldFRvcFN0YXJ0Q29y'@;
put 'bmVyKCksUG49Y24uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dm8oRW4ucm93LFBuLnJvdyxKbj0+e3ZvKEVuLmNvbCxQbi5jb2wsUHI9Pnt0aGlzLmdldENlbGxNZXRhKEpuLFByKS5yZWFkT25seXx8T3QucHVzaChbSm4sUHIsbnVsbF0pfSl9KX0pLE90Lmxlbmd0aD4wJiZ0aGlzLnNldERhdGFB'@;
put 'dENlbGwoT3QsdnQpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRoaXMucmVzdW1lUmVuZGVy'@;
put 'PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KHZ0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkmJnZ0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiYodGhpcy5yZW5k'@;
put 'ZXJDYWxsP3RoaXMucmVuZGVyKCk6dGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMucmVuZGVyQ2FsbD0hMCx0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fChwZS5sb2NrRWRp'@;
put 'dG9yKCksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkscGUudW5sb2NrRWRpdG9yKCkpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgT3Q9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5pc0V4ZWN1dGlv'@;
put 'blN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJh'@;
put 'dGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgT3Q9dGhpcy5leGVjdXRp'@;
put 'b25TdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE90LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZPdD09PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8dnQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5y'@;
put 'ZXN1bWVPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3Bl'@;
put 'bmRFeGVjdXRpb24oKTtjb25zdCBjbj12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihPdCksY259LHRoaXMuYmF0Y2g9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IE90PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1l'@;
put 'RXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0e3dpZHRoOnZ0LGhlaWdodDpPdH09Zi52aWV3LmdldExhc3RTaXplKCkse3dpZHRoOmNuLGhlaWdodDpFbn09Zi5yb290RWxl'@;
put 'bWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxQbj1jbiE9PXZ0fHxFbiE9PU90OyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDp2dCxoZWlnaHQ6T3R9LHt3aWR0aDpjbixoZWlnaHQ6RW59LFBuKSYmKChQbnx8Zi52aWV3Ll93dC53dE92ZXJsYXlz'@;
put 'LnNjcm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKGYudmlldy5zZXRMYXN0U2l6ZShjbixFbiksZi5yZW5kZXIoKSksZi5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOnZ0LGhlaWdodDpPdH0se3dpZHRoOmNuLGhlaWdodDpFbn0sUG4pKX0sdGhpcy51'@;
put 'cGRhdGVEYXRhPWZ1bmN0aW9uKHZ0LE90KXtqbmUodnQsY249PntUPWNufSxjbj0+e1Q9Y24sZi5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxmLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dz'@;
put 'KCkpLGllLmFkanVzdFJvd3NBbmRDb2xzKCl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlcsaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNvdXJjZTpPdCxtZXRhTWFuYWdlcjppdCxmaXJzdFJ1bjp3ZX0pfSx0aGlzLmxvYWREYXRhPWZ1bmN0aW9uKHZ0LE90KXtq'@;
put 'bmUodnQsY249PntUPWNufSwoKT0+e2l0LmNsZWFyQ2VsbHNDYWNoZSgpLGYuaW5pdEluZGV4TWFwcGVycygpLGllLmFkanVzdFJvd3NBbmRDb2xzKCksd2UmJih3ZT1bbnVsbCwibG9hZERhdGEiXSl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlcsaW50ZXJuYWxTb3Vy'@;
put 'Y2U6ImxvYWREYXRhIixzb3VyY2U6T3QsbWV0YU1hbmFnZXI6aXQsZmlyc3RSdW46d2V9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtjb25zdCB2dD1ldC5jb2x1bW5zO2xldCBPdD0wO2lmKEFycmF5LmlzQXJyYXkodnQpKU90PXZ0Lmxlbmd0aDtlbHNlIGlmKFJh'@;
put 'KHZ0KSlpZigiYXJyYXkiPT09Zi5kYXRhVHlwZSl7Y29uc3QgY249dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtmb3IobGV0IEVuPTA7RW48Y247RW4rPTEpdnQoRW4pJiYoT3QrPTEpfWVsc2UoIm9iamVjdCI9PT1mLmRhdGFUeXBlfHwiZnVuY3Rpb24iPT09Zi5kYXRhVHlwZSkmJihPdD1ULmNv'@;
put 'bFRvUHJvcENhY2hlLmxlbmd0aCk7ZWxzZSBpZihLaShldC5kYXRhU2NoZW1hKSl7Y29uc3QgY249VC5nZXRTY2hlbWEoKTtPdD1BcnJheS5pc0FycmF5KGNuKT9jbi5sZW5ndGg6dWsoY24pfWVsc2UgT3Q9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gT3R9LHRoaXMuaW5pdEluZGV4'@;
put 'TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24o'@;
put 'dnQsT3QsY24sRW4pe3JldHVybiBMYSh2dCk/VC5nZXRBbGwoKTpULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pLFQuREVTVElOQVRJT05fUkVOREVSRVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbih2dCxPdCxj'@;
put 'bixFbil7cmV0dXJuIFQuZ2V0Q29weWFibGVUZXh0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pKX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24odnQsT3Qpe3JldHVybiBULmdldENvcHlhYmxlKHZ0LFQuY29sVG9Qcm9wKE90KSl9'@;
put 'LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIFQuZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGNuPSh3ZT9mLmxvYWRE'@;
put 'YXRhOmYudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtsZXQgUG4sSm4sRW49ITE7aWYoS2kodnQucm93cykpdGhyb3cgbmV3IEVycm9yKCdUaGUgInJvd3MiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7'@;
put 'aWYoS2kodnQuY29scykpdGhyb3cgbmV3IEVycm9yKCdUaGUgImNvbHMiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/Jyk7aWYoS2kodnQuZ2FudHRDaGFydCkpdGhyb3cgbmV3IEVycm9yKCdTaW5jZSA4'@;
put 'LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtmb3IoUG4gaW4gdnQpImRhdGEiPT09UG58fCgibGFuZ3VhZ2UiPT09UG4/Tm4odnQubGFuZ3VhZ2UpOiJjbGFzc05hbWUiPT09UG4/Y3IoImNsYXNzTmFtZSIsdnQuY2xhc3NOYW1lKToidGFi'@;
put 'bGVDbGFzc05hbWUiPT09UG4mJmYudGFibGU/KGNyKCJ0YWJsZUNsYXNzTmFtZSIsdnQudGFibGVDbGFzc05hbWUpLGYudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpKTpzby5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoUG4pfHxzby5nZXRTaW5n'@;
put 'bGV0b24oKS5pc0RlcHJlY2F0ZWQoUG4pPyhSYSh2dFtQbl0pfHxBcnJheS5pc0FycmF5KHZ0W1BuXSkpJiYodnRbUG5dLmluaXRpYWxIb29rPSEwLGYuYWRkSG9vayhQbix2dFtQbl0pKTohT3QmJmJsKHZ0LFBuKSYmKHl0W1BuXT12dFtQbl0pKTt2b2lkIDA9PT12dC5kYXRhJiZ2b2lkIDA9'@;
put 'PT1ldC5kYXRhP2NuKG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuZGF0YT9jbih2dC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmNvbHVtbnMmJihULmNyZWF0ZU1hcCgpLGYuaW5pdEluZGV4TWFwcGVycygpKTtjb25zdCBQcj1mLmNvdW50Q29scygpLE9y'@;
put 'PWV0LmNvbHVtbnM7aWYoT3ImJlJhKE9yKSYmKEVuPSEwKSwodm9pZCAwIT09dnQuY2VsbHx8dm9pZCAwIT09dnQuY2VsbHN8fHZvaWQgMCE9PXZ0LmNvbHVtbnMpJiZpdC5jbGVhckNhY2hlKCksUHI+MClmb3IoUG49MCxKbj0wO1BuPFByO1BuKyspe2lmKE9yKXtjb25zdCBOcj1Fbj9PcihQ'@;
put 'bik6T3JbSm5dO05yJiZpdC51cGRhdGVDb2x1bW5NZXRhKEpuLE5yKX1Kbis9MX1LaSh2dC5jZWxsKSYmZHModnQuY2VsbCxOcj0+e2Yuc2V0Q2VsbE1ldGFPYmplY3QoTnIucm93LE5yLmNvbCxOcil9KSxmLnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTtsZXQgJHI9Zi5yb290RWxl'@;
put 'bWVudC5zdHlsZS5oZWlnaHQ7IiIhPT0kciYmKCRyPXBhcnNlSW50KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7bGV0IFlyPXZ0LmhlaWdodDtpZihSYShZcikmJihZcj1ZcigpKSxPdCYmZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJmYucm9vdEVsZW1lbnQu'@;
put 'c2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT1Zcil7Y29uc3QgTnI9Zi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIik7TnImJihOci5pbmRleE9mKCJoZWlnaHQiKT4t'@;
put 'MXx8TnIuaW5kZXhPZigib3ZlcmZsb3ciKT4tMSk/Zi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixOcik6KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09WXImJihmLnJvb3RFbGVtZW50'@;
put 'LnN0eWxlLmhlaWdodD1pc05hTihZcik/YCR7WXJ9YDpgJHtZcn1weGAsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIHZ0LndpZHRoPCJ1Iil7bGV0IE5yPXZ0LndpZHRoO1JhKE5yKSYmKE5yPU5yKCkpLGYucm9vdEVsZW1lbnQuc3R5bGUud2lkdGg9'@;
put 'aXNOYU4oTnIpP2Ake05yfWA6YCR7TnJ9cHhgfU90fHwoZi52aWV3JiYoZi52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSksZi5ydW5Ib29rcygiYWZ0ZXJVcGRh'@;
put 'dGVTZXR0aW5ncyIsdnQpKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldyYmIXdlJiYoZi5mb3JjZUZ1bGxSZW5kZXI9ITAscGUubG9ja0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGYudmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSxwZS51bmxv'@;
put 'Y2tFZGl0b3IoKSksIU90JiZmLnZpZXcmJigiIj09PSRyfHwiIj09PVlyfHx2b2lkIDA9PT1ZcikmJiRyIT09WXImJmYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCB2dD1mLmdldFNlbGVj'@;
put 'dGVkTGFzdCgpO2lmKGV0LmdldFZhbHVlKXtpZihSYShldC5nZXRWYWx1ZSkpcmV0dXJuIGV0LmdldFZhbHVlLmNhbGwoZik7aWYodnQpcmV0dXJuIGYuZ2V0RGF0YSgpW3Z0WzBdWzBdXVtldC5nZXRWYWx1ZV19ZWxzZSBpZih2dClyZXR1cm4gZi5nZXREYXRhQXRDZWxsKHZ0WzBdLHZ0WzFd'@;
put 'KX0sdGhpcy5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiBldH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCksdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHMoKX0sdGhpcy5hbHRlcj1mdW5jdGlvbih2dCxPdCxjbixFbixQbil7aWUuYWx0ZXIodnQsT3QsY24sRW4s'@;
put 'UG4pfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24odnQsT3Qpe2xldCBjbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLEVuPU90LFBuPXZ0O2lmKE90Pj0wKXtpZih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlz'@;
put 'aWNhbENvbHVtbihPdCkpKXJldHVybiBudWxsO0VuPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChPdCl9aWYodnQ+PTApe2lmKHRoaXMucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsUm93KHZ0KSkpcmV0dXJuIG51bGw7'@;
put 'UG49dGhpcy5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0KX1yZXR1cm4gbnVsbD09PVBufHxudWxsPT09RW4/bnVsbDpmLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKGYuX2NyZWF0ZUNlbGxDb29yZHMoUG4sRW4pLGNuKX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rp'@;
put 'b24odnQpe2NvbnN0IE90PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHModnQpO2lmKG51bGw9PT1PdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6Y24sY29sOkVufT1PdDtsZXQgUG49Y24sSm49RW47cmV0dXJuIGNuPj0wJiYoUG49dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxG'@;
put 'cm9tUmVuZGVyYWJsZUluZGV4KGNuKSksRW4+PTAmJihKbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoRW4pKSxmLl9jcmVhdGVDZWxsQ29vcmRzKFBuLEpuKX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rpb24odnQpe3JldHVybiBULmNvbFRvUHJv'@;
put 'cCh2dCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVC5wcm9wVG9Db2wodnQpfSx0aGlzLnRvVmlzdWFsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvVmlzdWFsQ29sdW1uPXZ0PT50aGlzLmNvbHVt'@;
put 'bkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxSb3c9dnQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBl'@;
put 'ci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXQodnQsVC5jb2xUb1Byb3AoT3QpKX0sdGhpcy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXQodnQsT3QpfSx0aGlz'@;
put 'LmdldERhdGFBdENvbD1mdW5jdGlvbih2dCl7Y29uc3QgT3Q9W10sY249VC5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsdnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZXQuZGF0YS5sZW5ndGgtMSx2dCksVC5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBFbj0wO0VuPGNuLmxl'@;
put 'bmd0aDtFbis9MSlmb3IobGV0IFBuPTA7UG48Y25bRW5dLmxlbmd0aDtQbis9MSlPdC5wdXNoKGNuW0VuXVtQbl0pO3JldHVybiBPdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKHZ0KXtjb25zdCBPdD1bXSxjbj1ULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCxULnByb3BU'@;
put 'b0NvbCh2dCkpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZXQuZGF0YS5sZW5ndGgtMSxULnByb3BUb0NvbCh2dCkpLFQuREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgRW49MDtFbjxjbi5sZW5ndGg7RW4rPTEpZm9yKGxldCBQbj0wO1BuPGNuW0VuXS5sZW5ndGg7UG4rPTEpT3QucHVzaChj'@;
put 'bltFbl1bUG5dKTtyZXR1cm4gT3R9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IFBuO3JldHVybiBQbj12b2lkIDA9PT12dD9XLmdldERhdGEoKTpXLmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCksZi5fY3JlYXRlQ2VsbENvb3Jkcyhj'@;
put 'bixFbikpLFBufSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IFBuO3JldHVybiBQbj12b2lkIDA9PT12dD9XLmdldERhdGEoITApOlcuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLEVu'@;
put 'KSwhMCksUG59LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVy5nZXRBdENvbHVtbih2dCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgUG49aWkodnQsT3QsY24pLEpuPXRoaXMuaGFzSG9vaygiYWZ0ZXJT'@;
put 'ZXRTb3VyY2VEYXRhQXRDZWxsIiksUHI9W107Sm4mJkRuKFBuLCRyPT57bGV0W1lyLE5yLFJpXT0kcjtQci5wdXNoKFtZcixOcixXLmdldEF0Q2VsbChZcixOciksUmldKX0pLERuKFBuLCRyPT57bGV0W1lyLE5yLFJpXT0kcjtXLnNldEF0Q2VsbChZcixOcixSaSl9KSxKbiYmdGhpcy5ydW5I'@;
put 'b29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixQcixFbiksdGhpcy5yZW5kZXIoKTtjb25zdCBPcj1mLmdldEFjdGl2ZUVkaXRvcigpO09yJiZLaShPci5yZWZyZXNoVmFsdWUpJiZPci5yZWZyZXNoVmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3Jl'@;
put 'dHVybiBXLmdldEF0Um93KHZ0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVy5nZXRBdENlbGwodnQsT3QpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIFQuZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCwwKSxm'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKHZ0LHRoaXMuY291bnRDb2xzKCktMSksVC5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlzLmdldERhdGFUeXBlPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtjb25zdCBQbj12b2lkIDA9PT12dD9bMCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3Vu'@;
put 'dENvbHMoKV06W3Z0LE90LGNuLEVuXSxbSm4sUHJdPVBuO2xldFssLE9yLCRyXT1QbixZcj1udWxsLE5yPW51bGw7dm9pZCAwPT09T3ImJihPcj1Kbiksdm9pZCAwPT09JHImJigkcj1Qcik7bGV0IFJpPSJtaXhlZCI7cmV0dXJuIHZvKE1hdGgubWF4KE1hdGgubWluKEpuLE9yKSwwKSxNYXRo'@;
put 'Lm1heChKbixPciksWG89PntsZXQgR289ITA7cmV0dXJuIHZvKE1hdGgubWF4KE1hdGgubWluKFByLCRyKSwwKSxNYXRoLm1heChQciwkciksSnM9PihOcj10aGlzLmdldENlbGxNZXRhKFhvLEpzKS50eXBlLFlyP0dvPVlyPT09TnI6WXI9TnIsR28pKSxSaT1Hbz9OcjoibWl4ZWQiLEdvfSks'@;
put 'Uml9LHRoaXMucmVtb3ZlQ2VsbE1ldGE9ZnVuY3Rpb24odnQsT3QsY24pe2NvbnN0W0VuLFBuXT1bdGhpcy50b1BoeXNpY2FsUm93KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpXTtsZXQgSm49aXQuZ2V0Q2VsbE1ldGFLZXlWYWx1ZShFbixQbixjbik7ITEhPT1mLnJ1bkhvb2tzKCJi'@;
put 'ZWZvcmVSZW1vdmVDZWxsTWV0YSIsdnQsT3QsY24sSm4pJiYoaXQucmVtb3ZlQ2VsbE1ldGEoRW4sUG4sY24pLGYucnVuSG9va3MoImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLHZ0LE90LGNuLEpuKSksSm49bnVsbH0sdGhpcy5zcGxpY2VDZWxsc01ldGE9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtmb3IodmFyIGNuPWFyZ3VtZW50cy5sZW5ndGgsRW49bmV3IEFycmF5KGNuPjI/Y24tMjowKSxQbj0yO1BuPGNuO1BuKyspRW5bUG4tMl09YXJndW1lbnRzW1BuXTtpZihFbi5sZW5ndGg+MCYmIUFy'@;
put 'cmF5LmlzQXJyYXkoRW5bMF0pKXRocm93IG5ldyBFcnJvcigiVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3RzIGFycmF5LiIpO090PjAmJml0LnJlbW92ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3co'@;
put 'dnQpLE90KSxFbi5sZW5ndGg+MCYmRG4oRW4ucmV2ZXJzZSgpLEpuPT57aXQuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLERuKEpuLChQcixPcik9PnRoaXMuc2V0Q2VsbE1ldGFPYmplY3QodnQsT3IsUHIpKX0pLGYucmVuZGVyKCl9LHRoaXMuc2V0Q2VsbE1ldGFPYmplY3Q9'@;
put 'ZnVuY3Rpb24odnQsT3QsY24peyJvYmplY3QiPT10eXBlb2YgY24mJmRzKGNuLChFbixQbik9Pnt0aGlzLnNldENlbGxNZXRhKHZ0LE90LFBuLEVuKX0pfSx0aGlzLnNldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtpZighMT09PWYucnVuSG9va3MoImJlZm9yZVNldENlbGxNZXRh'@;
put 'Iix2dCxPdCxjbixFbikpcmV0dXJuO2xldCBKbj12dCxQcj1PdDt2dDx0aGlzLmNvdW50Um93cygpJiYoSm49dGhpcy50b1BoeXNpY2FsUm93KHZ0KSksT3Q8dGhpcy5jb3VudENvbHMoKSYmKFByPXRoaXMudG9QaHlzaWNhbENvbHVtbihPdCkpLGl0LnNldENlbGxNZXRhKEpuLFByLGNuLEVu'@;
put 'KSxmLnJ1bkhvb2tzKCJhZnRlclNldENlbGxNZXRhIix2dCxPdCxjbixFbil9LHRoaXMuZ2V0Q2VsbHNNZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIGl0LmdldENlbGxzTWV0YSgpfSx0aGlzLmdldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249dGhpcy50b1BoeXNpY2FsUm93KHZ0KSxF'@;
put 'bj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpO3JldHVybiBudWxsPT09Y24mJihjbj12dCksbnVsbD09PUVuJiYoRW49T3QpLGl0LmdldENlbGxNZXRhKGNuLEVuLHt2aXN1YWxSb3c6dnQsdmlzdWFsQ29sdW1uOk90fSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0'@;
put 'dXJuIGl0LmdldENlbGxzTWV0YUF0Um93KHZ0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ZXQuY29sdW1ucyl9LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0i'@;
put 'bnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLnJlbmRlcmVyOnZ0LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgY24/YmsoY24pOkxhKGNuKT9iaygidGV4dCIpOmNufSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24odnQsT3Qpe2NvbnN0IGNuPSJudW1i'@;
put 'ZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxPdCkuZWRpdG9yOnZ0LmVkaXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGNuP3BrKGNuKTpMYShjbik/cGsoInRleHQiKTpjbn0sdGhpcy5nZXRDZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0ibnVtYmVyIj09'@;
put 'dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLnZhbGlkYXRvcjp2dC52YWxpZGF0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjbj9GTihjbik6Y259LHRoaXMudmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCl7dGhpcy5fdmFsaWRhdGVDZWxscyh2dCl9LHRoaXMudmFsaWRhdGVSb3dz'@;
put 'PWZ1bmN0aW9uKHZ0LE90KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZVJvd3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhPdCx2dCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKHZ0'@;
put 'LE90KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZUNvbHVtbnMgcGFyYW1ldGVyIGBjb2x1bW5zYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhPdCx2b2lkIDAsdnQpfSx0aGlzLl92YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0'@;
put 'LE90LGNuKXtjb25zdCBFbj1uZXcgSXI7dnQmJihFbi5vblF1ZXVlRW1wdHk9dnQpO2xldCBQbj1mLmNvdW50Um93cygpLTE7Zm9yKDtQbj49MDspe2lmKHZvaWQgMCE9PU90JiYtMT09PU90LmluZGV4T2YoUG4pKXtQbi09MTtjb250aW51ZX1sZXQgSm49Zi5jb3VudENvbHMoKS0xO2Zvcig7'@;
put 'Sm4+PTA7KXZvaWQgMD09PWNufHwtMSE9PWNuLmluZGV4T2YoSm4pPyhFbi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwoZi5nZXREYXRhQXRDZWxsKFBuLEpuKSxmLmdldENlbGxNZXRhKFBuLEpuKSxQcj0+e2lmKCJib29sZWFuIiE9dHlwZW9mIFByKXRocm93IG5ldyBF'@;
put 'cnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1QciYmKEVuLnZhbGlkPSExKSxFbi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX0sInZhbGlkYXRlQ2VsbHMiKSxKbi09MSk6Sm4tPTE7UG4tPTF9RW4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0'@;
put 'aGlzLmdldFJvd0hlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE90PWV0LnJvd0hlYWRlcnMsY249dnQ7cmV0dXJuIHZvaWQgMCE9PWNuJiYoY249Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyIixjbikpLHZvaWQgMD09PWNuPyhPdD1bXSx2byhmLmNvdW50Um93cygpLTEsRW49PntPdC5wdXNo'@;
put 'KGYuZ2V0Um93SGVhZGVyKEVuKSl9KSk6QXJyYXkuaXNBcnJheShPdCkmJnZvaWQgMCE9PU90W2NuXT9PdD1PdFtjbl06UmEoT3QpP090PU90KGNuKTpPdCYmInN0cmluZyIhPXR5cGVvZiBPdCYmIm51bWJlciIhPXR5cGVvZiBPdCYmKE90PWNuKzEpLE90fSx0aGlzLmhhc1Jvd0hlYWRlcnM9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4hIWV0LnJvd0hlYWRlcnN9LHRoaXMuaGFzQ29sSGVhZGVycz1mdW5jdGlvbigpe2lmKG51bGwhPWV0LmNvbEhlYWRlcnMpcmV0dXJuISFldC5jb2xIZWFkZXJzO2ZvcihsZXQgdnQ9MCxPdD1mLmNvdW50Q29scygpO3Z0PE90O3Z0KyspaWYoZi5nZXRDb2xIZWFk'@;
put 'ZXIodnQpKXJldHVybiEwO3JldHVybiExfSx0aGlzLmdldENvbEhlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE90PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtjb25zdCBjbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xIZWFkZXIiLHZ0KTtp'@;
put 'Zih2b2lkIDA9PT1jbil7Y29uc3QgT3I9W10sJHI9Zi5jb3VudENvbHMoKTtmb3IobGV0IFlyPTA7WXI8JHI7WXIrKylPci5wdXNoKGYuZ2V0Q29sSGVhZGVyKFlyKSk7cmV0dXJuIE9yfWxldCBFbj1ldC5jb2xIZWFkZXJzO2NvbnN0IEpuPWYudG9QaHlzaWNhbENvbHVtbihjbiksUHI9ZnVu'@;
put 'Y3Rpb24oT3Ipe2NvbnN0ICRyPVtdLFlyPWYuY291bnRDb2xzKCk7bGV0IE5yPTA7Zm9yKDtOcjxZcjtOcisrKVJhKGV0LmNvbHVtbnMpJiZldC5jb2x1bW5zKE5yKSYmJHIucHVzaChOcik7cmV0dXJuICRyW09yXX0oSm4pO3JldHVybiExPT09ZXQuY29sSGVhZGVycz9Fbj1udWxsOmV0LmNv'@;
put 'bHVtbnMmJlJhKGV0LmNvbHVtbnMpJiZldC5jb2x1bW5zKFByKSYmZXQuY29sdW1ucyhQcikudGl0bGU/RW49ZXQuY29sdW1ucyhQcikudGl0bGU6ZXQuY29sdW1ucyYmZXQuY29sdW1uc1tKbl0mJmV0LmNvbHVtbnNbSm5dLnRpdGxlP0VuPWV0LmNvbHVtbnNbSm5dLnRpdGxlOkFycmF5Lmlz'@;
put 'QXJyYXkoZXQuY29sSGVhZGVycykmJnZvaWQgMCE9PWV0LmNvbEhlYWRlcnNbSm5dP0VuPWV0LmNvbEhlYWRlcnNbSm5dOlJhKGV0LmNvbEhlYWRlcnMpP0VuPWV0LmNvbEhlYWRlcnMoSm4pOmV0LmNvbEhlYWRlcnMmJiJzdHJpbmciIT10eXBlb2YgZXQuY29sSGVhZGVycyYmIm51bWJlciIh'@;
put 'PXR5cGVvZiBldC5jb2xIZWFkZXJzJiYoRW49TWsoY24pKSxFbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsRW4sdnQsT3QpLEVufSx0aGlzLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE90O2lmKHZ0Pj0wJiYoT3Q9Zi5nZXRDZWxsTWV0'@;
put 'YSgwLHZ0KS53aWR0aCksKHZvaWQgMD09PU90fHxPdD09PWV0LndpZHRoKSYmKE90PWV0LmNvbFdpZHRocyksbnVsbCE9T3Qpe3N3aXRjaCh0eXBlb2YgT3Qpe2Nhc2Uib2JqZWN0IjpPdD1PdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6T3Q9T3QodnQpfSJzdHJpbmciPT10eXBlb2YgT3Qm'@;
put 'JihPdD1wYXJzZUludChPdCwxMCkpfXJldHVybiBPdH0sdGhpcy5nZXRDb2xXaWR0aD1mdW5jdGlvbih2dCl7bGV0IE90PWYuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gT3Q9Zi5ydW5Ib29rcygibW9kaWZ5Q29sV2lkdGgiLE90LHZ0KSx2b2lkIDA9PT1PdCYmKE90PWVW'@;
put 'LkRFRkFVTFRfV0lEVEgpLE90fSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBPdD1ldC5yb3dIZWlnaHRzO2lmKG51bGwhPU90KXtzd2l0Y2godHlwZW9mIE90KXtjYXNlIm9iamVjdCI6T3Q9T3RbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOk90PU90'@;
put 'KHZ0KX0ic3RyaW5nIj09dHlwZW9mIE90JiYoT3Q9cGFyc2VJbnQoT3QsMTApKX1yZXR1cm4gT3R9LHRoaXMuZ2V0Um93SGVpZ2h0PWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9Zi5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gT3Q9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0'@;
put 'IixPdCx2dCksT3R9LHRoaXMuY291bnRTb3VyY2VSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIFcuY291bnRSb3dzKCl9LHRoaXMuY291bnRTb3VyY2VDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIFcuY291bnRGaXJzdFJvd0tleXMoKX0sdGhpcy5jb3VudFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gVC5n'@;
put 'ZXRMZW5ndGgoKX0sdGhpcy5jb3VudENvbHM9ZnVuY3Rpb24oKXtjb25zdCB2dD1ldC5tYXhDb2xzLE90PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4odnQsT3QpfSx0aGlzLmNvdW50UmVuZGVyZWRSb3dzPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlUm93'@;
put 'c0NvdW50KCk6LTF9LHRoaXMuY291bnRSZW5kZXJlZENvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmll'@;
put 'dy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudEVtcHR5Um93cz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE90PTA7cmV0dXJu'@;
put 'IHZrKGYuY291bnRSb3dzKCktMSxjbj0+e2lmKGYuaXNFbXB0eVJvdyhjbikpT3QrPTE7ZWxzZSBpZighMD09PXZ0KXJldHVybiExfSksT3R9LHRoaXMuY291bnRFbXB0eUNvbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFy'@;
put 'Z3VtZW50c1swXSxPdD0wO3JldHVybiB2ayhmLmNvdW50Q29scygpLTEsY249PntpZihmLmlzRW1wdHlDb2woY24pKU90Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE90fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBldC5pc0VtcHR5Um93LmNhbGwoZix2dCl9'@;
put 'LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih2dCl7cmV0dXJuIGV0LmlzRW1wdHlDb2wuY2FsbChmLHZ0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtsZXQgUG49IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0'@;
put 'XSxKbj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO3JldHVybiFMYSh2dCkmJiFMYShPdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1t2dCxPdCxjbixFbl1dLFBuLEpuKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCBjbj0h'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiYoaD0hMCk7Y29uc3QgRW49bm4uc2VsZWN0Q2VsbHMoYXJndW1lbnRz'@;
put 'Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltbXV0pO3JldHVybiBFbiYmY24mJmYubGlzdGVuKCksaD0hMSxFbn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gbm4uc2VsZWN0Q29sdW1ucyh2dCxhcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQpfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24odnQpe3JldHVybiBubi5zZWxlY3RSb3dzKHZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCl9LHRoaXMuZGVzZWxl'@;
put 'Y3RDZWxsPWZ1bmN0aW9uKCl7bm4uZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXtsZXQgdnQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtjb25zdCBPdD12dCYmdGhpcy5oYXNSb3dIZWFkZXJzKCksY249dnQm'@;
put 'JnRoaXMuaGFzQ29sSGVhZGVycygpO2g9ITAsbm4uc2VsZWN0QWxsKE90LGNuKSxoPSExfTtjb25zdCBPbj0odnQsT3QpPT52dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoT3QsMSwhMCk7dGhpcy5zY3JvbGxWaWV3cG9ydFRvPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249YXJndW1lbnRzLmxl'@;
put 'bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxFbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2NvbnN0IEpuPSFjbixQcj0hRW47bGV0IE9yPXZ0LCRyPU90O2lmKCEoYXJndW1lbnRzLmxlbmd0aD40JiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0pe2NvbnN0IFJpPU51bWJlci5pc0ludGVnZXIodnQpLFhvPU51bWJlci5pc0ludGVnZXIoT3QpLEdvPVJpP09uKHRoaXMucm93SW5kZXhNYXBwZXIsdnQpOnZvaWQgMCxKcz1Ybz9Pbih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLE90'@;
put 'KTp2b2lkIDA7aWYobnVsbD09PUdvfHxudWxsPT09SnMpcmV0dXJuITE7T3I9Umk/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEdvKTp2b2lkIDAsJHI9WG8/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEpzKTp2'@;
put 'b2lkIDB9Y29uc3QgWXI9TnVtYmVyLmlzSW50ZWdlcihPciksTnI9TnVtYmVyLmlzSW50ZWdlcigkcik7cmV0dXJuIFlyJiZOcj9mLnZpZXcuc2Nyb2xsVmlld3BvcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPciwkciksSm4sRW4sY24sUHIpOllyJiYhMT09PU5yP2Yudmlldy5zY3JvbGxWaWV3'@;
put 'cG9ydFZlcnRpY2FsbHkoT3IsSm4sY24pOiEoIU5yfHwhMSE9PVlyKSYmZi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KCRyLEVuLFByKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYoZi5fY2xlYXJUaW1lb3V0cygpLGYuX2NsZWFySW1tZWRpYXRlcygpLGYudmlldyYmZi52'@;
put 'aWV3LmRlc3Ryb3koKSxXJiZXLmRlc3Ryb3koKSxXPW51bGwsdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0cm95KCksaXQuY2xlYXJDYWNoZSgpLHJWKGYpKXtjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7'@;
put 'dnQmJnZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodnQpfWcyKGYucm9vdEVsZW1lbnQpLF8uZGVzdHJveSgpLHBlJiZwZS5kZXN0cm95KCksZi5iYXRjaEV4ZWN1dGlvbigoKT0+e2Yucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLGYuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rl'@;
put 'ckFsbCgpLEV0LmdldEl0ZW1zKCkuZm9yRWFjaCh2dD0+e2xldFssT3RdPXZ0O090LmRlc3Ryb3koKX0pLEV0LmNsZWFyKCksZi5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSxzby5nZXRTaW5nbGV0b24oKS5kZXN0cm95KGYpLGRzKGYsKHZ0LE90LGNuKT0+e1JhKHZ0KT9jbltPdF09'@;
put 'ZnVuY3Rpb24gRnIodnQpe3JldHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dnR9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApfX0oT3QpOiJndWlkIiE9PU90JiYoY25bT3RdPW51'@;
put 'bGwpfSksZi5pc0Rlc3Ryb3llZD0hMCxUJiZULmRlc3Ryb3koKSxUPW51bGwsaWU9bnVsbCxubj1udWxsLHBlPW51bGwsZj1udWxsfSx0aGlzLmdldEFjdGl2ZUVkaXRvcj1mdW5jdGlvbigpe3JldHVybiBwZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRQbHVnaW49ZnVuY3Rpb24odnQp'@;
put 'e2NvbnN0IE90PWJ1KHZ0KTtyZXR1cm4iVW5kb1JlZG8iPT09T3Q/dGhpcy51bmRvUmVkbzpFdC5nZXRJdGVtKE90KX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQ9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTpF'@;
put 'dC5nZXRJZCh2dCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZn0sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKHZ0LE90KXtzby5nZXRTaW5nbGV0b24oKS5hZGQodnQsT3QsZil9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbih2dCl7cmV0dXJuIHNvLmdldFNpbmdsZXRvbigpLmhh'@;
put 'cyh2dCxmKXx8c28uZ2V0U2luZ2xldG9uKCkuaGFzKHZ0KX0sdGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbih2dCxPdCl7c28uZ2V0U2luZ2xldG9uKCkub25jZSh2dCxPdCxmKX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKHZ0LE90KXtzby5nZXRTaW5nbGV0b24oKS5yZW1vdmUodnQsT3Qs'@;
put 'Zil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24odnQsT3QsY24sRW4sUG4sSm4sUHIpe3JldHVybiBzby5nZXRTaW5nbGV0b24oKS5ydW4oZix2dCxPdCxjbixFbixQbixKbixQcil9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih2dCxPdCl7cmV0dXJuIEluZShldC5sYW5ndWFn'@;
put 'ZSx2dCxPdCl9LHRoaXMudG9IVE1MPSgpPT5UTih0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHZ0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsVE4odGhpcykpLHZ0LmZp'@;
put 'cnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbih2dCl7bGV0IGNuPXZ0OyJmdW5jdGlvbiI9PXR5cGVvZiBjbiYmKGNuPXNldFRpbWVvdXQoY24sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn'@;
put 'dW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRzLnB1c2goY24pfSx0aGlzLl9jbGVhclRpbWVvdXRzPWZ1bmN0aW9uKCl7RG4odGhpcy50aW1lb3V0cyx2dD0+e2NsZWFyVGltZW91dCh2dCl9KX0sdGhpcy5pbW1lZGlhdGVzPVtdLHRoaXMuX3JlZ2lzdGVySW1tZWRpYXRlPWZ1bmN0aW9uKHZ0'@;
put 'KXt0aGlzLmltbWVkaWF0ZXMucHVzaChzZXRJbW1lZGlhdGUodnQpKX0sdGhpcy5fY2xlYXJJbW1lZGlhdGVzPWZ1bmN0aW9uKCl7RG4odGhpcy5pbW1lZGlhdGVzLHZ0PT57Y2xlYXJJbW1lZGlhdGUodnQpfSl9LHRoaXMuX3JlZnJlc2hCb3JkZXJzPWZ1bmN0aW9uKCl7bGV0IE90PSEoYXJn'@;
put 'dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07cGUuZGVzdHJveUVkaXRvcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSxmLnZpZXcucmVuZGVyKCksT3QmJm5uLmlzU2VsZWN0ZWQoKSYm'@;
put 'cGUucHJlcGFyZUVkaXRvcigpfSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1mLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnJvb3RFbGVtZW50KS5kaXJlY3Rpb259LHRoaXMuaXNMdHI9ZnVuY3Rpb24oKXtyZXR1cm4hZi5pc1J0bCgpfSx0aGlzLmdldERpcmVj'@;
put 'dGlvbkZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBmLmlzTHRyKCk/MTotMX07Y29uc3QgUW49JERlKHtoYW5kbGVFdmVudDp2dD0+Zi5pc0xpc3RlbmluZygpJiZ2b2lkIDAhPT12dD8ua2V5LGJlZm9yZUtleURvd246dnQ9PnRoaXMucnVuSG9va3MoImJlZm9yZUtleURvd24iLHZ0KSxhZnRl'@;
put 'cktleURvd246dnQ9Pnt0aGlzLmlzRGVzdHJveWVkfHxmLnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50S2V5RG93biIsdnQpfSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsdnQ9PnshMT09PXZ0LmN0cmxLZXkmJiExPT09'@;
put 'dnQubWV0YUtleSYmUW4ucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBRbn07Y29uc3QgTXI9UW4uYWRkQ29udGV4dCgiZ3JpZCIpLF9yPXtydW5Pbmx5SWY6KCk9PktpKGYuZ2V0U2VsZWN0ZWQoKSkmJmYuY291bnRSZW5k'@;
put 'ZXJlZFJvd3MoKT4wJiZmLmNvdW50UmVuZGVyZWRDb2xzKCk+MCxncm91cDpxRGV9O1FuLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiksTXIuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT57Zi5zZWxlY3RBbGwoKX19LHtrZXlzOltb'@;
put 'IkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlKCkse3JvdzpPdCxjb2w6Y259PXZ0W3Z0Lmxlbmd0aC0xXS5oaWdobGlnaHQsRW49Zi5nZXREYXRhQXRDZWxsKE90LGNuKSxQbj1uZXcgTWFwO2ZvcihsZXQgSm49MDtKbjx2'@;
put 'dC5sZW5ndGg7Sm4rKyl2dFtKbl0uZm9yQWxsKChQcixPcik9PntpZihQcj49MCYmT3I+PTAmJihQciE9PU90fHxPciE9PWNuKSl7Y29uc3R7cmVhZE9ubHk6JHJ9PWYuZ2V0Q2VsbE1ldGEoUHIsT3IpOyRyfHxQbi5zZXQoYCR7UHJ9eCR7T3J9YCxbUHIsT3IsRW5dKX19KTtmLnNldERhdGFB'@;
put 'dENlbGwoQXJyYXkuZnJvbShQbi52YWx1ZXMoKSkpfSxydW5Pbmx5SWY6KCk9PmYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRDZWxsc0NvdW50KCk+MX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0se2tleXM6W1siQXJyb3dV'@;
put 'cCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpLGYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGln'@;
put 'aHQuY29sKSl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntubi50cmFuc2Zvcm1FbmQoLTEsMCl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdHtmcm9tOnZ0LHRv'@;
put 'Ok90fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksY249Zi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKTtubi5zZXRSYW5nZVN0YXJ0KHZ0LmNsb25lKCkpLG5uLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sT3QuY29sKSl9LHJ1bk9ubHlJ'@;
put 'ZjooKT0+IShmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Zi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntubi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJyb3dEb3duIiwi'@;
put 'Q29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRSb3dzKCktMSwtMSksZi5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpLmhpZ2hsaWdodC5jb2wpKX19LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57bm4udHJhbnNmb3JtRW5kKDEsMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2Nv'@;
put 'bnN0e2Zyb206dnQsdG86T3R9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Um93cygpLTEsLTEpO25uLnNldFJhbmdlU3RhcnQodnQuY2xvbmUoKSksbm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhjbixPdC5jb2wpKX0scnVuT25seUlmOigpPT4hKGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybVN0YXJ0'@;
put 'KDAsLTEqZi5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd0xlZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxPdD1mLmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5mLmlzUnRsKCk/W2YuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCkpfX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntubi50'@;
put 'cmFuc2Zvcm1FbmQoMCwtMSpmLmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3R7ZnJvbTp2dCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNu'@;
put 'PWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bZi5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSk7bm4uc2V0UmFuZ2VTdGFydCh2dC5jbG9uZSgpKSxubi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LnJvdyxjbikpfSxy'@;
put 'dW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybVN0YXJ0KDAsZi5nZXREaXJlY3Rpb25GYWN0b3Io'@;
put 'KSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csT3Q9Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5k'@;
put 'ZXgoLi4uZi5pc1J0bCgpP1swLDFdOltmLmNvdW50Q29scygpLTEsLTFdKTtubi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpKX19LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybUVuZCgwLGYuZ2V0RGlyZWN0'@;
put 'aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3R7ZnJvbTp2dCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVh'@;
put 'cmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bMCwxXTpbZi5jb3VudENvbHMoKS0xLC0xXSk7bm4uc2V0UmFuZ2VTdGFydCh2dC5jbG9uZSgpKSxubi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LnJvdyxjbikpfSxydW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24u'@;
put 'aXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siSG9tZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0IHZ0PXBhcnNlSW50KGYuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksT3Q9'@;
put 'Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csY249Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodnQsMSk7bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LGNuKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3LmlzTWFp'@;
put 'blRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntubi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKG5uLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmZyb20ucm93LGYuY29sdW1uSW5kZXhNYXBwZXIu'@;
put 'Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSkpKX19LHtrZXlzOltbIkhvbWUiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1wYXJzZUludChmLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEwKSxPdD1wYXJzZUludChmLmdldFNl'@;
put 'dHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LDEpLEVuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LDEpO25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhjbixFbikpfSxydW5Pbmx5SWY6KCk9PmYudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKGYuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRDb2xzKCktMSwtMSkpKX0scnVuT25seUlmOigpPT5mLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtr'@;
put 'ZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57bm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3Jkcyhubi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5mcm9tLnJvdyxmLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Q29scygp'@;
put 'LTEsLTEpKSl9fSx7a2V5czpbWyJFbmQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1wYXJzZUludChmLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLDEwKSxPdD1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5J'@;
put 'bmRleChmLmNvdW50Um93cygpLXZ0LTEsLTEpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRDb2xzKCktMSwtMSk7bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LGNuKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3Lmlz'@;
put 'TWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9Pntubi50cmFuc2Zvcm1TdGFydCgtZi5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e2NvbnN0e3Rv'@;
put 'OnZ0fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksT3Q9TWF0aC5tYXgodnQucm93LWYuY291bnRWaXNpYmxlUm93cygpLDApLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LDEpO2lmKG51bGwhPT1jbil7Y29uc3QgRW49Zi5fY3JlYXRlQ2VsbENvb3Jk'@;
put 'cyhjbix2dC5jb2wpLFBuPXZ0LnJvdy1mLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxKbj1NYXRoLm1heChFbi5yb3ctUG4sMCk7bm4uc2V0UmFuZ2VFbmQoRW4pLGYuc2Nyb2xsVmlld3BvcnRUbyhKbil9fX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntubi50'@;
put 'cmFuc2Zvcm1TdGFydChmLmNvdW50VmlzaWJsZVJvd3MoKSwwKX19LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHt0bzp2dH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLE90PU1hdGgubWluKHZ0LnJvdytmLmNvdW50VmlzaWJsZVJvd3MoKSxmLmNv'@;
put 'dW50Um93cygpLTEpLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LC0xKTtpZihudWxsIT09Y24pe2NvbnN0IEVuPWYuX2NyZWF0ZUNlbGxDb29yZHMoY24sdnQuY29sKSxQbj12dC5yb3ctZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksSm49'@;
put 'TWF0aC5taW4oRW4ucm93LVBuLGYuY291bnRSb3dzKCktMSk7bm4uc2V0UmFuZ2VFbmQoRW4pLGYuc2Nyb2xsVmlld3BvcnRUbyhKbil9fX0se2tleXM6W1siVGFiIl1dLGNhbGxiYWNrOnZ0PT57Y29uc3QgT3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGV0LnRhYk1vdmVzP2V0LnRhYk1vdmVzKHZ0'@;
put 'KTpldC50YWJNb3Zlcztubi50cmFuc2Zvcm1TdGFydChPdC5yb3csT3QuY29sLCEwKX19LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOnZ0PT57Y29uc3QgT3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGV0LnRhYk1vdmVzP2V0LnRhYk1vdmVzKHZ0KTpldC50YWJNb3Zlcztubi50cmFu'@;
put 'c2Zvcm1TdGFydCgtT3Qucm93LC1PdC5jb2wpfX1dLF9yKSxQTigpLmZvckVhY2godnQ9Pntjb25zdCBPdD11eSh2dCk7RXQuYWRkSXRlbSh2dCxuZXcgT3QodGhpcykpfSksc28uZ2V0U2luZ2xldG9uKCkucnVuKGYsImNvbnN0cnVjdCIpfWNvbnN0IFpuZT17X2hvb2tzU3RvcmFnZTpPYmpl'@;
put 'Y3QuY3JlYXRlKG51bGwpLGFkZEhvb2soYyxsKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW2NdfHwodGhpcy5faG9va3NTdG9yYWdlW2NdPVtdKSx0aGlzLmhvdC5hZGRIb29rKGMsbCksdGhpcy5faG9va3NTdG9yYWdlW2NdLnB1c2gobCksdGhpc30scmVtb3ZlSG9va3NCeUtleShjKXtE'@;
put 'bih0aGlzLl9ob29rc1N0b3JhZ2VbY118fFtdLGw9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGMsbCl9KX0sY2xlYXJIb29rcygpe2RzKHRoaXMuX2hvb2tzU3RvcmFnZSwoYyxsKT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KGwpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtmaChabmUsIk1JWElO'@;
put 'X05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgWERlPVpuZSxXYz1PYmplY3QuZnJlZXplKHtWSVJHSU46IlNUQVRFX1ZJUkdJTiIsRURJVElORzoiU1RBVEVfRURJVElORyIsV0FJVElORzoiU1RBVEVfV0FJVElORyIsRklOSVNI'@;
put 'RUQ6IlNUQVRFX0ZJTklTSEVEIn0pLEdCPSJiYXNlRWRpdG9yIjtjbGFzcyB2N3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImJhc2UifWNvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5pbnN0YW5jZT1sLHRoaXMuc3RhdGU9V2MuVklSR0lOLHRoaXMuX29wZW5lZD0hMSx0'@;
put 'aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5fY2xvc2VDYWxsYmFjaz1udWxsLHRoaXMuVEQ9bnVsbCx0aGlzLnJvdz1udWxsLHRoaXMuY29sPW51bGwsdGhpcy5wcm9wPW51bGwsdGhpcy5vcmlnaW5hbFZhbHVlPW51bGwsdGhpcy5jZWxsUHJvcGVydGllcz1udWxsLHRoaXMuaW5pdCgpfV9m'@;
put 'aXJlQ2FsbGJhY2tzKGwpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9zZUNhbGxiYWNrKGwpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZh'@;
put 'bHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1w'@;
put 'bGVtZW50ZWQiKX1wcmVwYXJlKGwsYSxkLGgsZixfKXt0aGlzLlREPWgsdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucHJvcD1kLHRoaXMub3JpZ2luYWxWYWx1ZT1mLHRoaXMuY2VsbFByb3BlcnRpZXM9Xyx0aGlzLnN0YXRlPVdjLlZJUkdJTn1leHRlbmQoKXtyZXR1cm4gY2xhc3MgZXh0'@;
put 'ZW5kcyB0aGlzLmNvbnN0cnVjdG9ye319c2F2ZVZhbHVlKGwsYSl7bGV0IGQsaCxmLF87aWYoYSl7Y29uc3Qgd2U9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7ZD1NYXRoLm1heChNYXRoLm1pbih3ZVswXSx3ZVsyXSksMCksaD1NYXRoLm1heChNYXRoLm1pbih3ZVsxXSx3ZVszXSksMCks'@;
put 'Zj1NYXRoLm1heCh3ZVswXSx3ZVsyXSksXz1NYXRoLm1heCh3ZVsxXSx3ZVszXSl9ZWxzZVtkLGgsZixfXT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBUPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgpO0FycmF5LmlzQXJyYXkoVCkmJihb'@;
put 'ZCxoXT1UKTtjb25zdCBpZT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxwZT17cnVuT25seUlmOigpPT5LaSh0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKSxncm91cDpHQn07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJmllLmFkZFNob3J0Y3V0cyhb'@;
put 'e2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJy'@;
put 'b3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFy'@;
put 'dCgwLHRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpKX19XSxwZSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZCxoLGwsZixfLCJlZGl0Iil9YmVnaW5FZGl0aW5nKGwsYSl7aWYodGhpcy5zdGF0ZSE9PVdjLlZJUkdJTilyZXR1cm47Y29uc3QgZD10aGlzLmhvdCxoPWQucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksZj1kLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpO2lmKGQudmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpLHRoaXMu'@;
put 'c3RhdGU9V2MuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7Y29uc3QgXz0ic3RyaW5nIj09dHlwZW9mIGw/bDpfbCh0aGlzLm9yaWdpbmFsVmFsdWUpO3RoaXMuc2V0VmFsdWUoXyl9dGhpcy5vcGVuKGEpLHRoaXMuX29wZW5lZD0hMCx0aGlzLmZvY3VzKCksZC52aWV3LnJlbmRl'@;
put 'cigpLGQucnVuSG9va3MoImFmdGVyQmVnaW5FZGl0aW5nIix0aGlzLnJvdyx0aGlzLmNvbCl9ZmluaXNoRWRpdGluZyhsLGEsZCl7bGV0IGg7aWYoZCl7Y29uc3QgVD10aGlzLl9jbG9zZUNhbGxiYWNrO3RoaXMuX2Nsb3NlQ2FsbGJhY2s9Vz0+e1QmJlQoVyksZChXKSx0aGlzLmhvdC52aWV3'@;
put 'LnJlbmRlcigpfX1pZih0aGlzLmlzV2FpdGluZygpKXJldHVybjtjb25zdCBfPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO2lmKF8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChHQiksXy5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG1rKSx0aGlzLnN0'@;
put 'YXRlIT09V2MuVklSR0lOKXtpZih0aGlzLnN0YXRlPT09V2MuRURJVElORyl7aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9pZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IFQ9dGhpcy5nZXRWYWx1ZSgpO2g9dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFj'@;
put 'ZT9bWyJzdHJpbmciPT10eXBlb2YgVD9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChUfHwiIik6VF1dOltbVF1dLHRoaXMuc3RhdGU9V2MuV0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcyk/dGhpcy5ob3Qu'@;
put 'YWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIixXPT57dGhpcy5zdGF0ZT1XYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoVyl9KToodGhpcy5zdGF0ZT1XYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoITApKX19ZWxzZSB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgp'@;
put 'PT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KX1jYW5jZWxDaGFuZ2VzKCl7dGhpcy5zdGF0ZT1XYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoKX1kaXNjYXJkRWRpdG9yKGwpe3RoaXMuc3RhdGU9PT1XYy5GSU5JU0hFRCYmKCExPT09bCYmITAhPT10aGlzLmNlbGxQcm9wZXJ0aWVz'@;
put 'LmFsbG93SW52YWxpZD8odGhpcy5ob3Quc2VsZWN0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5mb2N1cygpLHRoaXMuc3RhdGU9V2MuRURJVElORyx0aGlzLl9maXJlQ2FsbGJhY2tzKCExKSk6KHRoaXMuY2xvc2UoKSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSEx'@;
put 'LHRoaXMuc3RhdGU9V2MuVklSR0lOLHRoaXMuX2ZpcmVDYWxsYmFja3MoITApLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIikpKX1lbmFibGVGdWxsRWRpdE1vZGUoKXt0aGlzLl9mdWxsRWRpdE1vZGU9ITB9aXNJbkZ1bGxFZGl0TW9k'@;
put 'ZSgpe3JldHVybiB0aGlzLl9mdWxsRWRpdE1vZGV9aXNPcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfWlzV2FpdGluZygpe3JldHVybiB0aGlzLnN0YXRlPT09V2MuV0FJVElOR31nZXRFZGl0ZWRDZWxsUmVjdCgpe3ZhciBsO2NvbnN0IGE9dGhpcy5nZXRFZGl0ZWRDZWxsKCk7aWYoIWEp'@;
put 'cmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuaG90LnZpZXcuX3d0LGY9dGhpcy5ob3Qucm9vdFdpbmRvdyxfPUtsKGEpLFQ9d2EoYSksVz1LbCh0aGlzLmhvdC5yb290RWxlbWVudCksaWU9d2EodGhpcy5ob3Qucm9vdEVsZW1lbnQpLHBlPWQudG9wT3Zlcmxh'@;
put 'eS5ob2xkZXIsd2U9ZC5pbmxpbmVTdGFydE92ZXJsYXkuaG9sZGVyLEVlPXBlIT09Zj9wZS5zY3JvbGxUb3A6MCxaZT13ZSE9PWY/d2Uuc2Nyb2xsTGVmdDowLGl0PWYuaW5uZXJXaWR0aC1XLmxlZnQtaWUse3d0VGFibGU6ZXR9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2'@;
put 'b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QseXQ9ZXQubmFtZSxFdD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKHl0KT9FZTowLFN0PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0uaW5jbHVkZXMoeXQpP1plOjA7bGV0IG5uPV8udG9wLVcudG9wLShfLnRvcD09PVcu'@;
put 'dG9wPzA6MSktRXQsdm49MDt2bj10aGlzLmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC1fLmxlZnQtVC1pdC0xK1N0Ol8ubGVmdC1XLmxlZnQtMS1TdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoeXQpJiYobm4rPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zm'@;
put 'c2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyh5dCkmJih2bis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSk7Y29uc3QgTm49dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLGNyPXRoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLElyPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLElpPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJ'@;
put 'bmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KE5uJiZjcjw9MHx8Y3I9PT1JaSkmJihubis9MSksSXI8PTAmJih2bis9MSk7Y29uc3QgZnI9aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLGlpPWguY29sdW1u'@;
put 'c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixqcj1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxPbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxGcj1MYyh0aGlzLmhvdC5yb290RG9jdW1lbnQpLFFuPWEub2Zmc2V0VG9w'@;
put 'K2ZyLU9uO2xldCBNcj0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IFlyPWEub2Zmc2V0TGVmdDtNcj1Zcj49MD9ldC5nZXRXaWR0aCgpLWEub2Zmc2V0TGVmdDpNYXRoLmFicyhZciksTXIrPWlpLWpyLVR9ZWxzZSBNcj1hLm9mZnNldExlZnQraWktanI7Y29uc3QgX3I9enAodGhpcy5U'@;
put 'RCx0aGlzLmhvdC5yb290V2luZG93KSx2dD10aGlzLmhvdC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixPdD1wYXJzZUludChfclt2dF0sMTApPjA/MDoxLGNuPXBhcnNlSW50KF9yLmJvcmRlclRvcFdpZHRoLDEwKT4wPzA6MSxFbj13YShhKStPdCxQbj1h'@;
put 'bChhKStjbixKbj1kdGUocGUpP0ZyOjAsUHI9aHRlKHdlKT9GcjowLE9yPXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoTXIpLUpuK090O3JldHVybnt0b3A6bm4sc3RhcnQ6dm4saGVpZ2h0OlBuLG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGlt'@;
put 'dW1WaXNpYmxlRWxlbWVudEhlaWdodChRbiktUHIrY24sMjMpLHdpZHRoOkVuLG1heFdpZHRoOk9yfX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Ns'@;
put 'b25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2Ui'@;
put 'dG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRD'@;
put 'ZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGE9IiI7cmV0dXJuIHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9'@;
put 'dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlzLnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93'@;
put 'c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0'@;
put 'IiksYX19ZnVuY3Rpb24gUURlKCl7dmFyIGwsYz17bWluSGVpZ2h0OjIwMCxtYXhIZWlnaHQ6MzAwLG1pbldpZHRoOjEwMCxtYXhXaWR0aDozMDB9LGE9ZG9jdW1lbnQuYm9keSxkPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNQQU4iKSxm'@;
put 'PWZ1bmN0aW9uKEVlLFplLGl0KXtFZS5hZGRFdmVudExpc3RlbmVyKFplLGl0LCExKX0sXz1mdW5jdGlvbihFZSxaZSxpdCl7RWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihaZSxpdCwhMSl9LFQ9ZnVuY3Rpb24oRWUpe3ZhciBaZSxpdDtFZT8vXlthLXpBLVogXC4sXFxcL1x8MC05XSQvLnRlc3Qo'@;
put 'RWUpfHwoRWU9Ii4iKTpFZT0iIix2b2lkIDAhPT1kLnRleHRDb250ZW50P2QudGV4dENvbnRlbnQ9bC52YWx1ZStFZTpkLmRhdGE9bC52YWx1ZStFZSxoLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC5zdHlsZS5mb250U2l6ZT13ZShsKS5mb250U2l6ZSxoLnN0eWxlLmZvbnRGYW1pbHk9'@;
put 'd2UobCkuZm9udEZhbWlseSxoLnN0eWxlLndoaXRlU3BhY2U9InByZSIsYS5hcHBlbmRDaGlsZChoKSxaZT1oLmNsaWVudFdpZHRoKzIsYS5yZW1vdmVDaGlsZChoKSxsLnN0eWxlLmhlaWdodD1jLm1pbkhlaWdodCsicHgiLGwuc3R5bGUud2lkdGg9Yy5taW5XaWR0aD5aZT9jLm1pbldpZHRo'@;
put 'KyJweCI6WmU+Yy5tYXhXaWR0aD9jLm1heFdpZHRoKyJweCI6WmUrInB4IixjLm1pbkhlaWdodD4oaXQ9bC5zY3JvbGxIZWlnaHQ/bC5zY3JvbGxIZWlnaHQtMTowKT9sLnN0eWxlLmhlaWdodD1jLm1pbkhlaWdodCsicHgiOmMubWF4SGVpZ2h0PGl0PyhsLnN0eWxlLmhlaWdodD1jLm1heEhl'@;
put 'aWdodCsicHgiLGwuc3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIik6bC5zdHlsZS5oZWlnaHQ9aXQrInB4In0sVz1mdW5jdGlvbigpe3dpbmRvdy5zZXRUaW1lb3V0KFQsMCl9O2Z1bmN0aW9uIHdlKEVlKXtyZXR1cm4gRWUuY3VycmVudFN0eWxlfHxkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRD'@;
put 'b21wdXRlZFN0eWxlKEVlKX1yZXR1cm57aW5pdDpmdW5jdGlvbihFZSxaZSxpdCl7IWZ1bmN0aW9uKEVlLFplLGl0KXtsPUVlLGZ1bmN0aW9uKEVlKXtpZihFZSYmRWUubWluSGVpZ2h0KWlmKCJpbmhlcml0Ij09RWUubWluSGVpZ2h0KWMubWluSGVpZ2h0PWwuY2xpZW50SGVpZ2h0O2Vsc2V7'@;
put 'dmFyIFplPXBhcnNlSW50KEVlLm1pbkhlaWdodCk7aXNOYU4oWmUpfHwoYy5taW5IZWlnaHQ9WmUpfWlmKEVlJiZFZS5tYXhIZWlnaHQpaWYoImluaGVyaXQiPT1FZS5tYXhIZWlnaHQpYy5tYXhIZWlnaHQ9bC5jbGllbnRIZWlnaHQ7ZWxzZXt2YXIgaXQ9cGFyc2VJbnQoRWUubWF4SGVpZ2h0'@;
put 'KTtpc05hTihpdCl8fChjLm1heEhlaWdodD1pdCl9aWYoRWUmJkVlLm1pbldpZHRoKWlmKCJpbmhlcml0Ij09RWUubWluV2lkdGgpYy5taW5XaWR0aD1sLmNsaWVudFdpZHRoO2Vsc2V7dmFyIGV0PXBhcnNlSW50KEVlLm1pbldpZHRoKTtpc05hTihldCl8fChjLm1pbldpZHRoPWV0KX1pZihF'@;
put 'ZSYmRWUubWF4V2lkdGgpaWYoImluaGVyaXQiPT1FZS5tYXhXaWR0aCljLm1heFdpZHRoPWwuY2xpZW50V2lkdGg7ZWxzZXt2YXIgeXQ9cGFyc2VJbnQoRWUubWF4V2lkdGgpO2lzTmFOKHl0KXx8KGMubWF4V2lkdGg9eXQpfWguZmlyc3RDaGlsZHx8KGguY2xhc3NOYW1lPSJhdXRvUmVzaXpl'@;
put 'IixoLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsaC5hcHBlbmRDaGlsZChkKSl9KFplKSwiVEVYVEFSRUEiPT1sLm5vZGVOYW1lJiYobC5zdHlsZS5yZXNpemU9Im5vbmUiLGwuc3R5bGUub3ZlcmZsb3dZPSIiLGwuc3R5bGUuaGVpZ2h0PWMubWluSGVpZ2h0KyJweCIsbC5zdHlsZS5t'@;
put 'aW5XaWR0aD1jLm1pbldpZHRoKyJweCIsbC5zdHlsZS5tYXhXaWR0aD1jLm1heFdpZHRoKyJweCIsbC5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLGl0JiYoZihsLCJjaGFuZ2UiLFQpLGYobCwiY3V0IixXKSxmKGwsInBhc3RlIixXKSxmKGwsImRyb3AiLFcpLGYobCwia2V5ZG93biIsVyks'@;
put 'ZihsLCJmb2N1cyIsVCksZihsLCJjb21wb3NpdGlvbnN0YXJ0IixXKSxmKGwsImNvbXBvc2l0aW9udXBkYXRlIixXKSxmKGwsImNvbXBvc2l0aW9uZW5kIixXKSksVCgpfShFZSxaZSxpdCl9LHVuT2JzZXJ2ZTpmdW5jdGlvbigpe18obCwiY2hhbmdlIixUKSxfKGwsImN1dCIsVyksXyhsLCJw'@;
put 'YXN0ZSIsVyksXyhsLCJkcm9wIixXKSxfKGwsImtleWRvd24iLFcpLF8obCwiZm9jdXMiLFQpLF8obCwiY29tcG9zaXRpb25zdGFydCIsVyksXyhsLCJjb21wb3NpdGlvbnVwZGF0ZSIsVyksXyhsLCJjb21wb3NpdGlvbmVuZCIsVyl9LHJlc2l6ZTpUfX1mdW5jdGlvbiBZbmUoYyxsKXtjb25z'@;
put 'dCBhPWhOKGwpLGQ9bC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaD1hLGY9MDtmb3IobGV0IF89MDtfPGQubGVuZ3RoO18rKyl7MCE9PV8mJihmKz1kW18tMV0ubGVuZ3RoKzEpO2NvbnN0IFc9ZitkW19dLmxlbmd0aDtpZigiaG9tZSI9PT1jP2g9ZjoiZW5kIj09PWMmJihoPVcpLGE8PVcpYnJl'@;
put 'YWt9b3kobCxoKX1UYSh2NyxYRGUpO2NvbnN0IFprPSJodF9lZGl0b3JfaGlkZGVuIixXbmU9InRleHRFZGl0b3IiO2NsYXNzIGtnIGV4dGVuZHMgdjd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0ZXh0In1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmV2ZW50TWFuYWdl'@;
put 'cj1uZXcgbGwodGhpcyksdGhpcy5hdXRvUmVzaXplPVFEZSgpLHRoaXMuVEVYVEFSRUE9dm9pZCAwLHRoaXMudGV4dGFyZWFTdHlsZT12b2lkIDAsdGhpcy5URVhUQVJFQV9QQVJFTlQ9dm9pZCAwLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT12b2lkIDAsdGhpcy5sYXllckNsYXNzPXZvaWQg'@;
put 'MCx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuVEVYVEFSRUEudmFs'@;
put 'dWU9bH1vcGVuKCl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT50'@;
put 'aGlzLm9uQWZ0ZXJEb2N1bWVudEtleURvd24oYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuVEVYVEFSRUEmJnRoaXMuaG90Lmxpc3RlbigpLHRo'@;
put 'aXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMucmVtb3ZlSG9va3NCeUtleSgiYWZ0ZXJEb2N1bWVudEtleURvd24iKX1wcmVwYXJlKGwsYSxkLGgsZixfKXtjb25zdCBUPXRoaXMuc3RhdGU7aWYoc3VwZXIucHJlcGFyZShsLGEsZCxoLGYs'@;
put 'XyksIV8ucmVhZE9ubHkpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoITApO2NvbnN0e2FsbG93SW52YWxpZDpXLGZyYWdtZW50U2VsZWN0aW9uOmllfT1fO1cmJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiKSxUIT09V2MuRklOSVNIRUQmJnRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLCFpZSYm'@;
put 'IW0yKCkmJnRoaXMuZm9jdXMoKX19YmVnaW5FZGl0aW5nKGwsYSl7dGhpcy5zdGF0ZT09PVdjLlZJUkdJTiYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIsc3VwZXIuYmVnaW5FZGl0aW5nKGwsYSkpfWZvY3VzKCl7dGhpcy5URVhUQVJFQS5zZWxlY3QoKSxveSh0aGlzLlRFWFRBUkVBLHRoaXMu'@;
put 'VEVYVEFSRUEudmFsdWUubGVuZ3RoKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLlRFWFRBUkVBPWwuY3JlYXRlRWxlbWVudCgiVEVYVEFSRUEiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlz'@;
put 'LlRFWFRBUkVBLnRhYkluZGV4PS0xLHBpKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHRoaXMudGV4dGFy'@;
put 'ZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVYVEFSRUFfUEFSRU5UPWwuY3JlYXRlRWxlbWVudCgiRElWIikscGkodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250YWJsZUlucHV0SG9sZGVyIiksQm8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSYm'@;
put 'V28odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxwaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxaayksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULnN0eWxlLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFS'@;
put 'RUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7Q3RlKCkmJih0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iLTk5OTk5cHgiKSx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNp'@;
put 'YmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4IixXbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULFprKX1zaG93RWRpdGFibGVFbGVt'@;
put 'ZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBvc2l0aW9uPSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJsZWZ0Ijoi'@;
put 'cmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiI7Y29uc3QgbD10aGlzLlRFWFRBUkVBX1BBUkVOVC5jaGlsZE5vZGVzO2xl'@;
put 'dCBhPSExO3ZvKGwubGVuZ3RoLTEsZD0+e2lmKEJvKGxbZF0sImhhbmRzb250YWJsZUVkaXRvciIpKXJldHVybiBhPSEwLCExfSksQm8odGhpcy5URVhUQVJFQV9QQVJFTlQsWmspJiZXbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCxaayksYT8odGhpcy5sYXllckNsYXNzPSJodF9lZGl0b3Jfdmlz'@;
put 'aWJsZSIscGkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSk6KHRoaXMubGF5ZXJDbGFzcz10aGlzLmdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhp'@;
put 'cy5ob3QudG9QaHlzaWNhbFJvdyh0aGlzLnJvdyksYT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsdGhpcy5jb2wpO3RoaXMub3JpZ2luYWxWYWx1ZT1hLHRoaXMuc2V0VmFsdWUoYSksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7bGV0IGw9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLnN0YXRlIT09V2MuRURJVElORyYmIWwpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQobHx8dGhpcy5jbG9zZSgpKTtjb25z'@;
put 'dHt0b3A6YSxzdGFydDpkLHdpZHRoOmgsbWF4V2lkdGg6ZixoZWlnaHQ6XyxtYXhIZWlnaHQ6VH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9YCR7YX1weGAsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/InJp'@;
put 'Z2h0IjoibGVmdCJdPWAke2R9cHhgLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpO2NvbnN0IFc9enAodGhpcy5URCx0aGlzLmhvdC5yb290V2luZG93KTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPVcuZm9udFNpemUsdGhpcy5URVhUQVJFQS5zdHlsZS5mb250RmFtaWx5PVcuZm9u'@;
put 'dEZhbWlseSx0aGlzLlRFWFRBUkVBLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcjtjb25zdCBpZT16cCh0aGlzLlRFWFRBUkVBKSxwZT1wYXJzZUludChpZS5wYWRkaW5nTGVmdCwxMCkrcGFyc2VJbnQoaWUucGFkZGluZ1JpZ2h0LDEwKSx3ZT1w'@;
put 'YXJzZUludChpZS5wYWRkaW5nVG9wLDEwKStwYXJzZUludChpZS5wYWRkaW5nQm90dG9tLDEwKSxaZT1fLXdlLGl0PWYtcGUsZXQ9VC13ZTt0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHttaW5XaWR0aDpNYXRoLm1pbihoLXBlLGl0KSxtaW5IZWlnaHQ6TWF0aC5taW4oWmUs'@;
put 'ZXQpLG1heFdpZHRoOml0LG1heEhlaWdodDpldH0sITApfWJpbmRFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuVEVYVEFSRUEsImN1dCIsbD0+bC5zdG9wUHJvcGFnYXRpb24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlz'@;
put 'LlRFWFRBUkVBLCJwYXN0ZSIsbD0+bC5zdG9wUHJvcGFnYXRpb24oKSksYk4oKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jp'@;
put 'em9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lv'@;
put 'bnMoKSx0aGlzLmZvY3VzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLmZvY3VzKCl9KX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24oKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlz'@;
put 'LmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2EuYWRkU2hv'@;
put 'cnRjdXRzKFt7a2V5czpbWyJUYWIiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxUPSJmdW5jdGlvbiI9PXR5cGVvZiBfLnRhYk1vdmVzP18udGFiTW92ZXMoZik6Xy50YWJNb3Zlczt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoVC5yb3cs'@;
put 'VC5jb2wsITApfX0se2tleXM6W1siU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxUPSJmdW5jdGlvbiI9PXR5cGVvZiBfLnRhYk1vdmVzP18udGFiTW92ZXMoZik6Xy50YWJNb3Zlczt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3Jt'@;
put 'U3RhcnQoLVQucm93LC1ULmNvbCl9fSx7a2V5czpbWyJDb250cm9sIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWYuYWx0S2V5LHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3Jl'@;
put 'In0se2tleXM6W1siTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6KCk9PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpLHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJh'@;
put 'Y2s6KCk9PihoKCksITEpLHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC10aGlzLmhvdC5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQ'@;
put 'YWdlRG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh0aGlzLmhvdC5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJIb21lIl1dLGNhbGxiYWNrOihmLF8pPT57bGV0W1RdPV87WW5lKFQsdGhpcy5URVhUQVJFQSl9fSx7a2V5czpb'@;
put 'WyJFbmQiXV0sY2FsbGJhY2s6KGYsXyk9PntsZXRbVF09XztZbmUoVCx0aGlzLlRFWFRBUkVBKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5hdXRvUmVzaXpl'@;
put 'LnJlc2l6ZSgpfSwxMCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5hdXRvUmVzaXplLnJlc2l6ZSgpfSwxMCl9fV0se3J1bk9ubHlJZjooKT0+'@;
put 'S2kodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6V25lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7YS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG1rKSxhLnJlbW92ZVNob3J0Y3V0'@;
put 'c0J5R3JvdXAoV25lKSxhLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoR0IpfW9uQWZ0ZXJEb2N1bWVudEtleURvd24obCl7LTE9PT1bY28uQVJST1dfVVAsY28uQVJST1dfUklHSFQsY28uQVJST1dfRE9XTixjby5BUlJPV19MRUZUXS5pbmRleE9mKGwua2V5Q29kZSkmJnRoaXMuYXV0b1Jlc2l6'@;
put 'ZS5yZXNpemUoU3RyaW5nLmZyb21DaGFyQ29kZShsLmtleUNvZGUpKX19ZnVuY3Rpb24gTXkoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1bXSxXPVtdO18uY2xhc3NOYW1lJiZwaShsLF8uY2xhc3NOYW1lKSxfLnJlYWRPbmx5JiZULnB1c2goXy5yZWFkT25seUNlbGxDbGFzc05hbWUpLCExPT09'@;
put 'Xy52YWxpZCYmXy5pbnZhbGlkQ2VsbENsYXNzTmFtZT9ULnB1c2goXy5pbnZhbGlkQ2VsbENsYXNzTmFtZSk6Vy5wdXNoKF8uaW52YWxpZENlbGxDbGFzc05hbWUpLCExPT09Xy53b3JkV3JhcCYmXy5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZULnB1c2goXy5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwh'@;
put 'ZiYmXy5wbGFjZWhvbGRlciYmVC5wdXNoKF8ucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSxXbyhsLFcpLHBpKGwsVCl9ZnVuY3Rpb24gJHAoYyxsLGEsZCxoLGYsXyl7TXkuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsX10pO2xldCBUPWY7aWYoIVQmJl8ucGxhY2Vob2xkZXImJihUPV8ucGxh'@;
put 'Y2Vob2xkZXIpLFQ9X2woVCksXy50cmltV2hpdGVzcGFjZSYmKFQ9VC50cmltKCkpLF8ucmVuZGVyZXJUZW1wbGF0ZSl7ZzIobCk7Y29uc3QgVz1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURU1QTEFURSIpO1cuc2V0QXR0cmlidXRlKCJiaW5kIiwie3t9fSIpLFcuaW5uZXJIVE1M'@;
put 'PV8ucmVuZGVyZXJUZW1wbGF0ZSxIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKFcpLFcubW9kZWw9Yy5nZXRTb3VyY2VEYXRhQXRSb3coYSksbC5hcHBlbmRDaGlsZChXKX1lbHNlIGpwKGwsVCl9TXkuUkVOREVSRVJfVFlQRT0iYmFzZSIsJHAuUkVOREVSRVJfVFlQRT0idGV4dCI7Y29u'@;
put 'c3QgR25lPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjprZyxyZW5kZXJlcjokcH07ZnVuY3Rpb24geTIoYyxsKXtjb25zdCBhPW5ldyBXQihjLGx8fHt9LG5WKTtyZXR1cm4gYS5pbml0KCksYX1iMihHbmUpLHkyLmVkaXRvcnM9e0Jhc2VFZGl0b3I6djd9LHkyLkNvcmU9ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIG5ldyBXQihjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuVil9LHkyLkRlZmF1bHRTZXR0aW5ncz1IbmUoKSx5Mi5ob29rcz1zby5nZXRTaW5nbGV0b24oKSx5Mi5DZWxsQ29vcmRzPVNrLHkyLkNlbGxSYW5nZT1aTix5'@;
put 'Mi5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIix5Mi5idWlsZERhdGU9IjMxLzA4LzIwMjMgMDg6MjM6MzMiLHkyLnZlcnNpb249IjEzLjEuMCIseTIubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czp6VGUsZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5OkRuZSxnZXRMYW5ndWFnZXNEaWN0aW9uYXJp'@;
put 'ZXM6ZnVuY3Rpb24gR1RlKCl7cmV0dXJuIFlUZSgpfSxyZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTpUbmUsZ2V0VHJhbnNsYXRlZFBocmFzZTpJbmV9O2NvbnN0IG1zPXkyLGlJZT1bImNvbnRhaW5lciJdLCRCPW5ldyBNYXAsJG5lPSJUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5k'@;
put 'IHRvIHRoaXMgY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIHByb3Blcmx5LiI7bGV0IEFnPSgoKT0+e2NsYXNzIGN7Z2V0SW5zdGFuY2UoYSl7Y29uc3QgZD0kQi5nZXQoYSk7cmV0dXJuIGQuaXNEZXN0cm95ZWQ/KGNvbnNvbGUud2FybigkbmUpLG51bGwpOmR9'@;
put 'cmVnaXN0ZXJJbnN0YW5jZShhLGQpe3JldHVybiAkQi5zZXQoYSxkKX1yZW1vdmVJbnN0YW5jZShhKXtyZXR1cm4gJEIuZGVsZXRlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c'@;
put 'dTAyNzVmYWN9KSxjfSkoKTtjb25zdCBvSWU9T2JqZWN0LmtleXMobXMuRGVmYXVsdFNldHRpbmdzKSxxbmU9bXMuaG9va3MuZ2V0UmVnaXN0ZXJlZCgpO2xldCBLbmU9KCgpPT57Y2xhc3MgY3ttZXJnZVNldHRpbmdzKGEpe2NvbnN0IGQ9InNldHRpbmdzImluIGEmJiJvYmplY3QiPT10eXBl'@;
put 'b2YgYS5zZXR0aW5ncyxoPWQ/YS5zZXR0aW5nczp7fTtyZXR1cm4gcW5lLmNvbmNhdChvSWUpLmZvckVhY2goXz0+e2NvbnN0IFQ9cW5lLmluZGV4T2YoXyk+LTE7bGV0IFc7ZCYmVCYmKFc9YS5zZXR0aW5nc1tfXSksdm9pZCAwIT09YVtfXSYmKFc9YVtfXSksdm9pZCAwIT09VyYmKGhbX109'@;
put 'Im5nWm9uZSJpbiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgVyYmVD9mdW5jdGlvbiguLi5pZSl7cmV0dXJuIGEubmdab25lLnJ1bigoKT0+Vy5hcHBseSh0aGlzLGllKSl9OlcpfSksaH1wcmVwYXJlQ2hhbmdlcyhhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGY9'@;
put 'PnthLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT1hW2ZdLmN1cnJlbnRWYWx1ZSl9KSxkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx4eT0oKCk9Pntj'@;
put 'bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXI9YSx0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLl9faG90SW5zdGFuY2U9bnVsbCx0aGlzLmNvbHVtbnNDb21wb25lbnRzPVtdLHRoaXMuaG90SWQ9IiJ9Z2V0IGhv'@;
put 'dEluc3RhbmNlKCl7cmV0dXJuIXRoaXMuX19ob3RJbnN0YW5jZXx8dGhpcy5fX2hvdEluc3RhbmNlJiYhdGhpcy5fX2hvdEluc3RhbmNlLmlzRGVzdHJveWVkP3RoaXMuX19ob3RJbnN0YW5jZToodGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpLGNv'@;
put 'bnNvbGUud2FybigkbmUpLG51bGwpfXNldCBob3RJbnN0YW5jZShhKXt0aGlzLl9faG90SW5zdGFuY2U9YX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyh0aGlzKTtpZih0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0'@;
put 'aD4wKXtjb25zdCBkPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57ZC5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSxhLmNvbHVtbnM9ZH10aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFu'@;
put 'Y2U9bmV3IG1zLkNvcmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCxhKSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVnaXN0ZXJJbnN0YW5jZSh0aGlzLmhvdElkLHRoaXMuaG90SW5zdGFuY2UpLHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpfSl9bmdPbkNoYW5n'@;
put 'ZXMoYSl7aWYobnVsbD09PXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuO2NvbnN0IGQ9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5wcmVwYXJlQ2hhbmdlcyhhKTt0aGlzLnVwZGF0ZUhvdFRhYmxlKGQpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0'@;
put 'aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLmRlc3Ryb3koKX0pLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKX11cGRhdGVIb3RUYWJsZShhKXt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLm5nWm9uZS5ydW5PdXRz'@;
put 'aWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3MoYSwhMSl9KX1vbkFmdGVyQ29sdW1uc0NoYW5nZSgpe2lmKHZvaWQgMCE9PXRoaXMuY29sdW1uc0NvbXBvbmVudHMmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGE9W107dGhpcy5j'@;
put 'b2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGg9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGgpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfX1vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpe2NvbnN0IGE9W107dGhpcy5jb2x1'@;
put 'bW5zQ29tcG9uZW50cy5sZW5ndGg+MCYmdGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGQ9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGQpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfWFkZENvbHVtbihhKXt0aGlzLmNv'@;
put 'bHVtbnNDb21wb25lbnRzLnB1c2goYSksdGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfXJlbW92ZUNvbHVtbihhKXtjb25zdCBkPXRoaXMuY29sdW1uc0NvbXBvbmVudHMuaW5kZXhPZihhKTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLnNwbGljZShkLDEpLHRoaXMub25BZnRlckNv'@;
put 'bHVtbnNOdW1iZXJDaGFuZ2UoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWcpLHR0KEtuZSksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQp'@;
put 'e2lmKDEmYSYmUm8oaUllLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuY29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3MiLGhvdElkOiJob3RJZCIsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJhY3RpdmVIZWFkZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6'@;
put 'ImFsbG93RW1wdHkiLGFsbG93SHRtbDoiYWxsb3dIdG1sIixhbGxvd0luc2VydENvbHVtbjoiYWxsb3dJbnNlcnRDb2x1bW4iLGFsbG93SW5zZXJ0Um93OiJhbGxvd0luc2VydFJvdyIsYWxsb3dJbnZhbGlkOiJhbGxvd0ludmFsaWQiLGFsbG93UmVtb3ZlQ29sdW1uOiJhbGxvd1JlbW92ZUNv'@;
put 'bHVtbiIsYWxsb3dSZW1vdmVSb3c6ImFsbG93UmVtb3ZlUm93IixhdXRvQ29sdW1uU2l6ZToiYXV0b0NvbHVtblNpemUiLGF1dG9Sb3dTaXplOiJhdXRvUm93U2l6ZSIsYXV0b1dyYXBDb2w6ImF1dG9XcmFwQ29sIixhdXRvV3JhcFJvdzoiYXV0b1dyYXBSb3ciLGJpbmRSb3dzV2l0aEhlYWRl'@;
put 'cnM6ImJpbmRSb3dzV2l0aEhlYWRlcnMiLGNlbGw6ImNlbGwiLGNlbGxzOiJjZWxscyIsY2hlY2tlZFRlbXBsYXRlOiJjaGVja2VkVGVtcGxhdGUiLGNsYXNzTmFtZToiY2xhc3NOYW1lIixjb2xIZWFkZXJzOiJjb2xIZWFkZXJzIixjb2xsYXBzaWJsZUNvbHVtbnM6ImNvbGxhcHNpYmxlQ29s'@;
put 'dW1ucyIsY29sdW1uSGVhZGVySGVpZ2h0OiJjb2x1bW5IZWFkZXJIZWlnaHQiLGNvbHVtbnM6ImNvbHVtbnMiLGNvbHVtblNvcnRpbmc6ImNvbHVtblNvcnRpbmciLGNvbHVtblN1bW1hcnk6ImNvbHVtblN1bW1hcnkiLGNvbFdpZHRoczoiY29sV2lkdGhzIixjb21tZW50ZWRDZWxsQ2xhc3NO'@;
put 'YW1lOiJjb21tZW50ZWRDZWxsQ2xhc3NOYW1lIixjb21tZW50czoiY29tbWVudHMiLGNvbnRleHRNZW51OiJjb250ZXh0TWVudSIsY29weWFibGU6ImNvcHlhYmxlIixjb3B5UGFzdGU6ImNvcHlQYXN0ZSIsY29ycmVjdEZvcm1hdDoiY29ycmVjdEZvcm1hdCIsY3VycmVudENvbENsYXNzTmFt'@;
put 'ZToiY3VycmVudENvbENsYXNzTmFtZSIsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VycmVudEhlYWRlckNsYXNzTmFtZSIsY3VycmVudFJvd0NsYXNzTmFtZToiY3VycmVudFJvd0NsYXNzTmFtZSIsY3VzdG9tQm9yZGVyczoiY3VzdG9tQm9yZGVycyIsZGF0YToiZGF0YSIsZGF0YVNjaGVt'@;
put 'YToiZGF0YVNjaGVtYSIsZGF0ZUZvcm1hdDoiZGF0ZUZvcm1hdCIsZGF0ZVBpY2tlckNvbmZpZzoiZGF0ZVBpY2tlckNvbmZpZyIsZGVmYXVsdERhdGU6ImRlZmF1bHREYXRlIixkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJkaXNhYmxlVmlzdWFsU2VsZWN0aW9uIixkcmFnVG9TY3JvbGw6ImRy'@;
put 'YWdUb1Njcm9sbCIsZHJvcGRvd25NZW51OiJkcm9wZG93bk1lbnUiLGVkaXRvcjoiZWRpdG9yIixlbnRlckJlZ2luc0VkaXRpbmc6ImVudGVyQmVnaW5zRWRpdGluZyIsZW50ZXJNb3ZlczoiZW50ZXJNb3ZlcyIsZmlsbEhhbmRsZToiZmlsbEhhbmRsZSIsZmlsdGVyOiJmaWx0ZXIiLGZpbHRl'@;
put 'cmluZ0Nhc2VTZW5zaXRpdmU6ImZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLGZpbHRlcnM6ImZpbHRlcnMiLGZpeGVkQ29sdW1uc0xlZnQ6ImZpeGVkQ29sdW1uc0xlZnQiLGZpeGVkQ29sdW1uc1N0YXJ0OiJmaXhlZENvbHVtbnNTdGFydCIsZml4ZWRSb3dzQm90dG9tOiJmaXhlZFJvd3NCb3R0'@;
put 'b20iLGZpeGVkUm93c1RvcDoiZml4ZWRSb3dzVG9wIixmb3JtdWxhczoiZm9ybXVsYXMiLGZyYWdtZW50U2VsZWN0aW9uOiJmcmFnbWVudFNlbGVjdGlvbiIsaGVpZ2h0OiJoZWlnaHQiLGhpZGRlbkNvbHVtbnM6ImhpZGRlbkNvbHVtbnMiLGhpZGRlblJvd3M6ImhpZGRlblJvd3MiLGludmFs'@;
put 'aWRDZWxsQ2xhc3NOYW1lOiJpbnZhbGlkQ2VsbENsYXNzTmFtZSIsbGFiZWw6ImxhYmVsIixsYW5ndWFnZToibGFuZ3VhZ2UiLGxheW91dERpcmVjdGlvbjoibGF5b3V0RGlyZWN0aW9uIixsaWNlbnNlS2V5OiJsaWNlbnNlS2V5Iixsb2NhbGU6ImxvY2FsZSIsbWFudWFsQ29sdW1uRnJlZXpl'@;
put 'OiJtYW51YWxDb2x1bW5GcmVlemUiLG1hbnVhbENvbHVtbk1vdmU6Im1hbnVhbENvbHVtbk1vdmUiLG1hbnVhbENvbHVtblJlc2l6ZToibWFudWFsQ29sdW1uUmVzaXplIixtYW51YWxSb3dNb3ZlOiJtYW51YWxSb3dNb3ZlIixtYW51YWxSb3dSZXNpemU6Im1hbnVhbFJvd1Jlc2l6ZSIsbWF4'@;
put 'Q29sczoibWF4Q29scyIsbWF4Um93czoibWF4Um93cyIsbWVyZ2VDZWxsczoibWVyZ2VDZWxscyIsbWluQ29sczoibWluQ29scyIsbWluUm93czoibWluUm93cyIsbWluU3BhcmVDb2xzOiJtaW5TcGFyZUNvbHMiLG1pblNwYXJlUm93czoibWluU3BhcmVSb3dzIixtdWx0aUNvbHVtblNvcnRp'@;
put 'bmc6Im11bHRpQ29sdW1uU29ydGluZyIsbmVzdGVkSGVhZGVyczoibmVzdGVkSGVhZGVycyIsbmVzdGVkUm93czoibmVzdGVkUm93cyIsbm9Xb3JkV3JhcENsYXNzTmFtZToibm9Xb3JkV3JhcENsYXNzTmFtZSIsbnVtZXJpY0Zvcm1hdDoibnVtZXJpY0Zvcm1hdCIsb2JzZXJ2ZURPTVZpc2li'@;
put 'aWxpdHk6Im9ic2VydmVET01WaXNpYmlsaXR5IixvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6Im91dHNpZGVDbGlja0Rlc2VsZWN0cyIscGVyc2lzdGVudFN0YXRlOiJwZXJzaXN0ZW50U3RhdGUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJwbGFj'@;
put 'ZWhvbGRlckNlbGxDbGFzc05hbWUiLHByZXZlbnRPdmVyZmxvdzoicHJldmVudE92ZXJmbG93IixwcmV2ZW50V2hlZWw6InByZXZlbnRXaGVlbCIscmVhZE9ubHk6InJlYWRPbmx5IixyZWFkT25seUNlbGxDbGFzc05hbWU6InJlYWRPbmx5Q2VsbENsYXNzTmFtZSIscmVuZGVyQWxsUm93czoi'@;
put 'cmVuZGVyQWxsUm93cyIscmVuZGVyZXI6InJlbmRlcmVyIixyb3dIZWFkZXJzOiJyb3dIZWFkZXJzIixyb3dIZWFkZXJXaWR0aDoicm93SGVhZGVyV2lkdGgiLHJvd0hlaWdodHM6InJvd0hlaWdodHMiLHNlYXJjaDoic2VhcmNoIixzZWxlY3Rpb25Nb2RlOiJzZWxlY3Rpb25Nb2RlIixzZWxl'@;
put 'Y3RPcHRpb25zOiJzZWxlY3RPcHRpb25zIixza2lwQ29sdW1uT25QYXN0ZToic2tpcENvbHVtbk9uUGFzdGUiLHNraXBSb3dPblBhc3RlOiJza2lwUm93T25QYXN0ZSIsc29ydEJ5UmVsZXZhbmNlOiJzb3J0QnlSZWxldmFuY2UiLHNvdXJjZToic291cmNlIixzdGFydENvbHM6InN0YXJ0Q29s'@;
put 'cyIsc3RhcnRSb3dzOiJzdGFydFJvd3MiLHN0cmV0Y2hIOiJzdHJldGNoSCIsc3RyaWN0OiJzdHJpY3QiLHRhYmxlQ2xhc3NOYW1lOiJ0YWJsZUNsYXNzTmFtZSIsdGFiTW92ZXM6InRhYk1vdmVzIix0aXRsZToidGl0bGUiLHRyaW1Ecm9wZG93bjoidHJpbURyb3Bkb3duIix0cmltUm93czoi'@;
put 'dHJpbVJvd3MiLHRyaW1XaGl0ZXNwYWNlOiJ0cmltV2hpdGVzcGFjZSIsdHlwZToidHlwZSIsdW5jaGVja2VkVGVtcGxhdGU6InVuY2hlY2tlZFRlbXBsYXRlIix1bmRvOiJ1bmRvIix2YWxpZGF0b3I6InZhbGlkYXRvciIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0'@;
put 'Q29sdW1uUmVuZGVyaW5nT2Zmc2V0Iix2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDoidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLHZpc2libGVSb3dzOiJ2aXNpYmxlUm93cyIsd2lkdGg6IndpZHRoIix3b3JkV3JhcDoid29yZFdyYXAiLGFmdGVyQWRkQ2hpbGQ6ImFmdGVyQWRkQ2hp'@;
put 'bGQiLGFmdGVyQXV0b2ZpbGw6ImFmdGVyQXV0b2ZpbGwiLGFmdGVyQmVnaW5FZGl0aW5nOiJhZnRlckJlZ2luRWRpdGluZyIsYWZ0ZXJDZWxsTWV0YVJlc2V0OiJhZnRlckNlbGxNZXRhUmVzZXQiLGFmdGVyQ2hhbmdlOiJhZnRlckNoYW5nZSIsYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ6ImFmdGVy'@;
put 'Q2hhbmdlc09ic2VydmVkIixhZnRlckNvbHVtbkNvbGxhcHNlOiJhZnRlckNvbHVtbkNvbGxhcHNlIixhZnRlckNvbHVtbkV4cGFuZDoiYWZ0ZXJDb2x1bW5FeHBhbmQiLGFmdGVyQ29sdW1uRnJlZXplOiJhZnRlckNvbHVtbkZyZWV6ZSIsYWZ0ZXJDb2x1bW5Nb3ZlOiJhZnRlckNvbHVtbk1v'@;
put 'dmUiLGFmdGVyQ29sdW1uUmVzaXplOiJhZnRlckNvbHVtblJlc2l6ZSIsYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZToiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJDb2x1bW5Tb3J0OiJhZnRlckNvbHVtblNvcnQiLGFmdGVyQ29sdW1uVW5mcmVlemU6ImFmdGVyQ29sdW1uVW5m'@;
put 'cmVlemUiLGFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhZnRlckNvbnRleHRNZW51SGlkZToiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLGFmdGVyQ29udGV4dE1lbnVTaG93OiJhZnRlckNvbnRleHRNZW51U2hvdyIsYWZ0ZXJD'@;
put 'b3B5OiJhZnRlckNvcHkiLGFmdGVyQ29weUxpbWl0OiJhZnRlckNvcHlMaW1pdCIsYWZ0ZXJDcmVhdGVDb2w6ImFmdGVyQ3JlYXRlQ29sIixhZnRlckNyZWF0ZVJvdzoiYWZ0ZXJDcmVhdGVSb3ciLGFmdGVyQ3V0OiJhZnRlckN1dCIsYWZ0ZXJEZXNlbGVjdDoiYWZ0ZXJEZXNlbGVjdCIsYWZ0'@;
put 'ZXJEZXN0cm95OiJhZnRlckRlc3Ryb3kiLGFmdGVyRGV0YWNoQ2hpbGQ6ImFmdGVyRGV0YWNoQ2hpbGQiLGFmdGVyRG9jdW1lbnRLZXlEb3duOiJhZnRlckRvY3VtZW50S2V5RG93biIsYWZ0ZXJEcmF3U2VsZWN0aW9uOiJhZnRlckRyYXdTZWxlY3Rpb24iLGFmdGVyRHJvcGRvd25NZW51RGVm'@;
put 'YXVsdE9wdGlvbnM6ImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGFmdGVyRHJvcGRvd25NZW51SGlkZToiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIixhZnRlckRyb3Bkb3duTWVudVNob3c6ImFmdGVyRHJvcGRvd25NZW51U2hvdyIsYWZ0ZXJGaWx0ZXI6ImFmdGVyRmlsdGVyIixh'@;
put 'ZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlOiJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixhZnRlckdldENlbGxNZXRhOiJhZnRlckdldENlbGxNZXRhIixhZnRlckdldENvbEhlYWRlcjoiYWZ0ZXJHZXRDb2xIZWFkZXIiLGFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzOiJhZnRlckdl'@;
put 'dENvbHVtbkhlYWRlclJlbmRlcmVycyIsYWZ0ZXJHZXRSb3dIZWFkZXI6ImFmdGVyR2V0Um93SGVhZGVyIixhZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGFmdGVySGlkZUNvbHVtbnM6ImFmdGVySGlkZUNvbHVtbnMiLGFmdGVySGlkZVJv'@;
put 'd3M6ImFmdGVySGlkZVJvd3MiLGFmdGVySW5pdDoiYWZ0ZXJJbml0IixhZnRlckxhbmd1YWdlQ2hhbmdlOiJhZnRlckxhbmd1YWdlQ2hhbmdlIixhZnRlckxpc3RlbjoiYWZ0ZXJMaXN0ZW4iLGFmdGVyTG9hZERhdGE6ImFmdGVyTG9hZERhdGEiLGFmdGVyTWVyZ2VDZWxsczoiYWZ0ZXJNZXJn'@;
put 'ZUNlbGxzIixhZnRlck1vZGlmeVRyYW5zZm9ybUVuZDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGFmdGVyTW9tZW50dW1TY3JvbGw6ImFmdGVyTW9tZW50dW1TY3JvbGwiLGFmdGVyTmFtZWRF'@;
put 'eHByZXNzaW9uQWRkZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixhZnRlck9uQ2VsbENvbnRleHRNZW51OiJhZnRlck9uQ2VsbENvbnRleHRNZW51IixhZnRlck9uQ2VsbENvcm5l'@;
put 'ckRibENsaWNrOiJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGFmdGVyT25DZWxsTW91c2VEb3duOiJhZnRlck9uQ2VsbE1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZU91dDoiYWZ0ZXJP'@;
put 'bkNlbGxNb3VzZU91dCIsYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6ImFmdGVyT25DZWxsTW91c2VPdmVyIixhZnRlck9uQ2VsbE1vdXNlVXA6ImFmdGVyT25DZWxsTW91c2VVcCIsYWZ0ZXJQYXN0ZToiYWZ0ZXJQYXN0ZSIsYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ6ImFmdGVyUGx1Z2luc0luaXRp'@;
put 'YWxpemVkIixhZnRlclJlZG86ImFmdGVyUmVkbyIsYWZ0ZXJSZWRvU3RhY2tDaGFuZ2U6ImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixhZnRlclJlZnJlc2hEaW1lbnNpb25zOiJhZnRlclJlZnJlc2hEaW1lbnNpb25zIixhZnRlclJlbW92ZUNlbGxNZXRhOiJhZnRlclJlbW92ZUNlbGxNZXRhIixh'@;
put 'ZnRlclJlbW92ZUNvbDoiYWZ0ZXJSZW1vdmVDb2wiLGFmdGVyUmVtb3ZlUm93OiJhZnRlclJlbW92ZVJvdyIsYWZ0ZXJSZW5kZXI6ImFmdGVyUmVuZGVyIixhZnRlclJlbmRlcmVyOiJhZnRlclJlbmRlcmVyIixhZnRlclJvd01vdmU6ImFmdGVyUm93TW92ZSIsYWZ0ZXJSb3dSZXNpemU6ImFm'@;
put 'dGVyUm93UmVzaXplIixhZnRlclJvd1NlcXVlbmNlQ2hhbmdlOiJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIixhZnRlclNjcm9sbEhvcml6b250YWxseToiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLGFmdGVyU2Nyb2xsVmVydGljYWxseToiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixhZnRlclNl'@;
put 'bGVjdGlvbjoiYWZ0ZXJTZWxlY3Rpb24iLGFmdGVyU2VsZWN0aW9uQnlQcm9wOiJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsYWZ0ZXJTZWxlY3Rpb25FbmQ6ImFmdGVyU2VsZWN0aW9uRW5kIixhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGFmdGVyU2V0'@;
put 'Q2VsbE1ldGE6ImFmdGVyU2V0Q2VsbE1ldGEiLGFmdGVyU2V0RGF0YUF0Q2VsbDoiYWZ0ZXJTZXREYXRhQXRDZWxsIixhZnRlclNldERhdGFBdFJvd1Byb3A6ImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsOiJhZnRlclNldFNvdXJjZURhdGFBdENlbGwi'@;
put 'LGFmdGVyU2hlZXRBZGRlZDoiYWZ0ZXJTaGVldEFkZGVkIixhZnRlclNoZWV0UmVuYW1lZDoiYWZ0ZXJTaGVldFJlbmFtZWQiLGFmdGVyU2hlZXRSZW1vdmVkOiJhZnRlclNoZWV0UmVtb3ZlZCIsYWZ0ZXJUcmltUm93OiJhZnRlclRyaW1Sb3ciLGFmdGVyVW5kbzoiYWZ0ZXJVbmRvIixhZnRl'@;
put 'clVuZG9TdGFja0NoYW5nZToiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGFmdGVyVW5oaWRlQ29sdW1uczoiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhZnRlclVuaGlkZVJvd3M6ImFmdGVyVW5oaWRlUm93cyIsYWZ0ZXJVbmxpc3RlbjoiYWZ0ZXJVbmxpc3RlbiIsYWZ0ZXJVbm1lcmdlQ2VsbHM6ImFm'@;
put 'dGVyVW5tZXJnZUNlbGxzIixhZnRlclVudHJpbVJvdzoiYWZ0ZXJVbnRyaW1Sb3ciLGFmdGVyVXBkYXRlRGF0YToiYWZ0ZXJVcGRhdGVEYXRhIixhZnRlclVwZGF0ZVNldHRpbmdzOiJhZnRlclVwZGF0ZVNldHRpbmdzIixhZnRlclZhbGlkYXRlOiJhZnRlclZhbGlkYXRlIixhZnRlclZpZXdw'@;
put 'b3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdSZW5kZXI6ImFmdGVyVmll'@;
put 'd1JlbmRlciIsYmVmb3JlQWRkQ2hpbGQ6ImJlZm9yZUFkZENoaWxkIixiZWZvcmVBdXRvZmlsbDoiYmVmb3JlQXV0b2ZpbGwiLGJlZm9yZUNlbGxBbGlnbm1lbnQ6ImJlZm9yZUNlbGxBbGlnbm1lbnQiLGJlZm9yZUNoYW5nZToiYmVmb3JlQ2hhbmdlIixiZWZvcmVDaGFuZ2VSZW5kZXI6ImJl'@;
put 'Zm9yZUNoYW5nZVJlbmRlciIsYmVmb3JlQ29sdW1uQ29sbGFwc2U6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixiZWZvcmVDb2x1bW5FeHBhbmQ6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYmVmb3JlQ29sdW1uRnJlZXplOiJiZWZvcmVDb2x1bW5GcmVlemUiLGJlZm9yZUNvbHVtbk1vdmU6ImJlZm9y'@;
put 'ZUNvbHVtbk1vdmUiLGJlZm9yZUNvbHVtblJlc2l6ZToiYmVmb3JlQ29sdW1uUmVzaXplIixiZWZvcmVDb2x1bW5Tb3J0OiJiZWZvcmVDb2x1bW5Tb3J0IixiZWZvcmVDb2x1bW5VbmZyZWV6ZToiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM6ImJlZm9y'@;
put 'ZUNvbnRleHRNZW51U2V0SXRlbXMiLGJlZm9yZUNvbnRleHRNZW51U2hvdzoiYmVmb3JlQ29udGV4dE1lbnVTaG93IixiZWZvcmVDb3B5OiJiZWZvcmVDb3B5IixiZWZvcmVDcmVhdGVDb2w6ImJlZm9yZUNyZWF0ZUNvbCIsYmVmb3JlQ3JlYXRlUm93OiJiZWZvcmVDcmVhdGVSb3ciLGJlZm9y'@;
put 'ZUN1dDoiYmVmb3JlQ3V0IixiZWZvcmVEZXRhY2hDaGlsZDoiYmVmb3JlRGV0YWNoQ2hpbGQiLGJlZm9yZURyYXdCb3JkZXJzOiJiZWZvcmVEcmF3Qm9yZGVycyIsYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM6ImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixiZWZvcmVEcm9wZG93bk1l'@;
put 'bnVTaG93OiJiZWZvcmVEcm9wZG93bk1lbnVTaG93IixiZWZvcmVGaWx0ZXI6ImJlZm9yZUZpbHRlciIsYmVmb3JlR2V0Q2VsbE1ldGE6ImJlZm9yZUdldENlbGxNZXRhIixiZWZvcmVIaWRlQ29sdW1uczoiYmVmb3JlSGlkZUNvbHVtbnMiLGJlZm9yZUhpZGVSb3dzOiJiZWZvcmVIaWRlUm93'@;
put 'cyIsYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixiZWZvcmVJbml0OiJiZWZvcmVJbml0IixiZWZvcmVJbml0V2Fsa29u'@;
put 'dGFibGU6ImJlZm9yZUluaXRXYWxrb250YWJsZSIsYmVmb3JlS2V5RG93bjoiYmVmb3JlS2V5RG93biIsYmVmb3JlTGFuZ3VhZ2VDaGFuZ2U6ImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixiZWZvcmVMb2FkRGF0YToiYmVmb3JlTG9hZERhdGEiLGJlZm9yZU1lcmdlQ2VsbHM6ImJlZm9yZU1lcmdl'@;
put 'Q2VsbHMiLGJlZm9yZU9uQ2VsbENvbnRleHRNZW51OiJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsYmVmb3JlT25DZWxsTW91c2VEb3duOiJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGJlZm9yZU9uQ2VsbE1vdXNlT3V0OiJiZWZvcmVPbkNlbGxNb3VzZU91dCIsYmVmb3JlT25DZWxsTW91c2VP'@;
put 'dmVyOiJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGJlZm9yZU9uQ2VsbE1vdXNlVXA6ImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGJlZm9yZVBhc3RlOiJiZWZvcmVQYXN0ZSIsYmVmb3JlUmVkbzoiYmVmb3JlUmVkbyIsYmVmb3JlUmVkb1N0YWNrQ2hhbmdlOiJiZWZvcmVSZWRvU3RhY2tDaGFuZ2Ui'@;
put 'LGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOiJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixiZWZvcmVSZW1vdmVDZWxsTWV0YToiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLGJlZm9yZVJlbW92ZUNv'@;
put 'bDoiYmVmb3JlUmVtb3ZlQ29sIixiZWZvcmVSZW1vdmVSb3c6ImJlZm9yZVJlbW92ZVJvdyIsYmVmb3JlUmVuZGVyOiJiZWZvcmVSZW5kZXIiLGJlZm9yZVJlbmRlcmVyOiJiZWZvcmVSZW5kZXJlciIsYmVmb3JlUm93TW92ZToiYmVmb3JlUm93TW92ZSIsYmVmb3JlUm93UmVzaXplOiJiZWZv'@;
put 'cmVSb3dSZXNpemUiLGJlZm9yZVNldENlbGxNZXRhOiJiZWZvcmVTZXRDZWxsTWV0YSIsYmVmb3JlU2V0UmFuZ2VFbmQ6ImJlZm9yZVNldFJhbmdlRW5kIixiZWZvcmVTZXRSYW5nZVN0YXJ0OiJiZWZvcmVTZXRSYW5nZVN0YXJ0IixiZWZvcmVTZXRSYW5nZVN0YXJ0T25seToiYmVmb3JlU2V0'@;
put 'UmFuZ2VTdGFydE9ubHkiLGJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDoiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixiZWZvcmVUb3VjaFNjcm9sbDoiYmVmb3JlVG91Y2hTY3JvbGwiLGJlZm9yZVRyaW1Sb3c6ImJlZm9yZVRyaW1Sb3ciLGJlZm9yZVVuZG86ImJlZm9yZVVuZG8i'@;
put 'LGJlZm9yZVVuZG9TdGFja0NoYW5nZToiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixiZWZvcmVVbmhpZGVDb2x1bW5zOiJiZWZvcmVVbmhpZGVDb2x1bW5zIixiZWZvcmVVbmhpZGVSb3dzOiJiZWZvcmVVbmhpZGVSb3dzIixiZWZvcmVVbm1lcmdlQ2VsbHM6ImJlZm9yZVVubWVyZ2VDZWxscyIs'@;
put 'YmVmb3JlVW50cmltUm93OiJiZWZvcmVVbnRyaW1Sb3ciLGJlZm9yZVVwZGF0ZURhdGE6ImJlZm9yZVVwZGF0ZURhdGEiLGJlZm9yZVZhbGlkYXRlOiJiZWZvcmVWYWxpZGF0ZSIsYmVmb3JlVmFsdWVSZW5kZXI6ImJlZm9yZVZhbHVlUmVuZGVyIixiZWZvcmVWaWV3UmVuZGVyOiJiZWZvcmVW'@;
put 'aWV3UmVuZGVyIixjb25zdHJ1Y3Q6ImNvbnN0cnVjdCIsaW5pdDoiaW5pdCIsbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkOiJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLG1vZGlmeUF1dG9maWxsUmFuZ2U6Im1vZGlmeUF1dG9maWxsUmFuZ2UiLG1vZGlmeUNvbEhlYWRlcjoibW9kaWZ5Q29s'@;
put 'SGVhZGVyIixtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ6Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsbW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU6Im1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixtb2RpZnlDb2xXaWR0aDoibW9kaWZ5Q29sV2lkdGgiLG1vZGlmeUNvcHlhYmxlUmFuZ2U6Im1v'@;
put 'ZGlmeUNvcHlhYmxlUmFuZ2UiLG1vZGlmeURhdGE6Im1vZGlmeURhdGEiLG1vZGlmeUdldENlbGxDb29yZHM6Im1vZGlmeUdldENlbGxDb29yZHMiLG1vZGlmeVJvd0RhdGE6Im1vZGlmeVJvd0RhdGEiLG1vZGlmeVJvd0hlYWRlcjoibW9kaWZ5Um93SGVhZGVyIixtb2RpZnlSb3dIZWFkZXJX'@;
put 'aWR0aDoibW9kaWZ5Um93SGVhZGVyV2lkdGgiLG1vZGlmeVJvd0hlaWdodDoibW9kaWZ5Um93SGVpZ2h0Iixtb2RpZnlTb3VyY2VEYXRhOiJtb2RpZnlTb3VyY2VEYXRhIixtb2RpZnlUcmFuc2Zvcm1FbmQ6Im1vZGlmeVRyYW5zZm9ybUVuZCIsbW9kaWZ5VHJhbnNmb3JtU3RhcnQ6Im1vZGlm'@;
put 'eVRyYW5zZm9ybVN0YXJ0IixwZXJzaXN0ZW50U3RhdGVMb2FkOiJwZXJzaXN0ZW50U3RhdGVMb2FkIixwZXJzaXN0ZW50U3RhdGVSZXNldDoicGVyc2lzdGVudFN0YXRlUmVzZXQiLHBlcnNpc3RlbnRTdGF0ZVNhdmU6InBlcnNpc3RlbnRTdGF0ZVNhdmUifSxmZWF0dXJlczpbdGkoW0FnLEtu'@;
put 'ZV0pLHZhXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJpZCJdLFsiY29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJkaXYiLDAsMSksMiZhJiZSZSgiaWQiLGQuaG90SWQpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfNz0oKCk9PntjbGFzcyBj'@;
put 'e3N0YXRpYyBmb3JSb290KCl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOltBZ119fX1yZXR1cm4gYy52ZXJzaW9uPSIxMy4xLjAiLGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSks'@;
put 'Y30pKCk7Y29uc3QgWG5lPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIHFCIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCksdGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5kZXN0cm95KCksIm5v'@;
put 'bmUiPT09dGhpcy5odENvbnRhaW5lci5zdHlsZS5kaXNwbGF5JiYodGhpcy5odENvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSIiKSx0aGlzLmh0RWRpdG9yPW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmh0Q29udGFpbmVyLHRoaXMuaHRPcHRpb25zKSx0aGlzLmh0RWRpdG9yLmluaXQo'@;
put 'KSx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3Q/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKDAsMCk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKSxveSh0aGlzLlRFWFRBUkVBLDAsdGhpcy5URVhUQVJFQS52'@;
put 'YWx1ZS5sZW5ndGgpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1jbG9zZSgpe3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpfXBy'@;
put 'ZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pO2NvbnN0IFQ9dGhpcyxXPXtzdGFydFJvd3M6MCxzdGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29sczowLGNsYXNzTmFtZToibGlzdGJveCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dT'@;
put 'aXplOiExLHJlYWRPbmx5OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYWZ0ZXJPbkNlbGxNb3VzZURvd24oaWUscGUpe2NvbnN0IHdlPXRoaXMuZ2V0U291cmNlRGF0YShwZS5yb3cscGUuY29sKTt2b2lkIDAhPT13ZSYmVC5zZXRWYWx1ZSh3ZSksVC5p'@;
put 'bnN0YW5jZS5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJlhsKFcsXy5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPVd9YmVnaW5F'@;
put 'ZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxzdXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQu'@;
put 'Y3JlYXRlRWxlbWVudCgiRElWIik7bC5jbGFzc05hbWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENvbnRhaW5lcj1sLHRoaXMuYXNzaWduSG9va3MoKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9y'@;
put 'JiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVuaW5nKCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpe2NvbnN0IGg9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLmdldFZhbHVlKCk7dm9pZCAwIT09aCYmdGhpcy5zZXRW'@;
put 'YWx1ZShoKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSxkKX1hc3NpZ25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKX0pfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5n'@;
put 'ZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2NvbnN0IGg9KGYsXyk9Pntjb25zdCBUPXRoaXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKTtpZih2b2lkIDAhPT1mJiYoZjwwfHxULmZsaXBwZWQmJmY+VC5jb3VudFJvd3Mo'@;
put 'KS0xP1QuZGVzZWxlY3RDZWxsKCk6VC5zZWxlY3RDZWxsKGYsMCksVC5nZXREYXRhKCkubGVuZ3RoKSlyZXR1cm4gXy5wcmV2ZW50RGVmYXVsdCgpLHYyKF8pLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuVEVYVEFSRUEuZm9jdXMoKSwhMX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93'@;
put 'VXAiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2xldCBULFc7cmV0dXJuIV8uZ2V0U2VsZWN0ZWRMYXN0KCkmJl8uZmxpcHBlZD9UPV8uY291bnRSb3dzKCktMTpfLmdldFNlbGVjdGVkTGFzdCgpJiYoXy5mbGlwcGVkPyhXPV8uZ2V0U2VsZWN0'@;
put 'ZWRMYXN0KClbMF0sVD1NYXRoLm1heCgwLFctMSkpOihXPV8uZ2V0U2VsZWN0ZWRMYXN0KClbMF0sVD1XLTEpKSxoKFQsZil9LHByZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2xl'@;
put 'dCBULFc7aWYoXy5nZXRTZWxlY3RlZExhc3QoKXx8Xy5mbGlwcGVkKXtpZihfLmdldFNlbGVjdGVkTGFzdCgpKWlmKF8uZmxpcHBlZClUPV8uZ2V0U2VsZWN0ZWRMYXN0KClbMF0rMTtlbHNlIGlmKCFfLmZsaXBwZWQpe2NvbnN0IGllPV8uY291bnRSb3dzKCktMTtXPV8uZ2V0U2VsZWN0ZWRM'@;
put 'YXN0KClbMF0sVD1NYXRoLm1pbihpZSxXKzEpfX1lbHNlIFQ9MDtyZXR1cm4gaChULGYpfSxwcmV2ZW50RGVmYXVsdDohMX1dLHtncm91cDpYbmUscmVsYXRpdmVUb0dyb3VwOm1rLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFhuZSl9fWNvbnN0IEtCPW5ldyBXZWFrTWFwO2NsYXNzIFhCIGV4dGVuZHMgcUJ7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJhdXRv'@;
put 'Y29tcGxldGUifWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIGFJZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gbEllKGMpe3ZhciBsPWZ1bmN0aW9uIGNJZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt'@;
put 'aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci'@;
put 'PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfSh0aGlzLCJzb3J0QnlSZWxldmFuY2UiLGZ1bmN0aW9uKGEsZCxoKXtjb25zdCBmPVtdLF89W10sVD1hLmxlbmd0aDtsZXQgaWUscGUsd2UsRWUsVz1kLmxlbmd0aDtpZigwPT09VCl7Zm9yKHdlPTA7d2U8Vzt3ZSsrKV8ucHVzaCh3ZSk7cmV0dXJuIF99Zm9yKHdlPTA7d2U8Vzt3'@;
put 'ZSsrKXtpZihwZT11TihfbChkW3dlXSkpLGgpRWU9cGUuaW5kZXhPZihhKTtlbHNle2NvbnN0IFplPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlO0VlPXBlLnRvTG9jYWxlTG93ZXJDYXNlKFplKS5pbmRleE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoWmUpKX0tMSE9PUVlJiYoaWU9cGUubGVu'@;
put 'Z3RoLUVlLVQsZi5wdXNoKHtiYXNlSW5kZXg6d2UsaW5kZXg6RWUsY2hhcnNMZWZ0OmllLHZhbHVlOnBlfSkpfWZvcihmLnNvcnQoKFplLGl0KT0+e2lmKC0xPT09aXQuaW5kZXgpcmV0dXJuLTE7aWYoLTE9PT1aZS5pbmRleClyZXR1cm4gMTtpZihaZS5pbmRleDxpdC5pbmRleClyZXR1cm4t'@;
put 'MTtpZihpdC5pbmRleDxaZS5pbmRleClyZXR1cm4gMTtpZihaZS5pbmRleD09PWl0LmluZGV4KXtpZihaZS5jaGFyc0xlZnQ8aXQuY2hhcnNMZWZ0KXJldHVybi0xO2lmKFplLmNoYXJzTGVmdD5pdC5jaGFyc0xlZnQpcmV0dXJuIDF9cmV0dXJuIDB9KSx3ZT0wLFc9Zi5sZW5ndGg7d2U8Vzt3'@;
put 'ZSsrKV8ucHVzaChmW3dlXS5iYXNlSW5kZXgpO3JldHVybiBffSksdGhpcy5xdWVyeT1udWxsLHRoaXMuc3RyaXBwZWRDaG9pY2VzPVtdLHRoaXMucmF3Q2hvaWNlcz1bXSxLQi5zZXQodGhpcyx7c2tpcE9uZTohMSxpc01hY09TOnRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRm'@;
put 'b3JtLmluZGV4T2YoIk1hYyIpPi0xfSl9Z2V0VmFsdWUoKXtjb25zdCBsPXRoaXMucmF3Q2hvaWNlcy5maW5kKGE9PnRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKGEpPT09dGhpcy5URVhUQVJFQS52YWx1ZSk7cmV0dXJuIEtpKGwpP2w6dGhpcy5URVhUQVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50'@;
put 'cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCkscGkodGhpcy5odENvbnRhaW5lciwiYXV0b2NvbXBsZXRlRWRpdG9yIikscGkodGhpcy5odENvbnRhaW5lciwtMT09PXRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPyIiOiJodE1hY1Njcm9sbCIp'@;
put 'fW9wZW4oKXtjb25zdCBsPUtCLmdldCh0aGlzKTtzdXBlci5vcGVuKCk7Y29uc3QgYT10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCksZD12b2lkIDA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bnx8dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd247dGhpcy5zaG93'@;
put 'RWRpdGFibGVFbGVtZW50KCksdGhpcy5mb2N1cygpO2xldCBoPUxjKCk7MD09PWgmJmwuaXNNYWNPUyYmKGgrPTE1KSx0aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLGY9PnRoaXMub25CZWZvcmVLZXlEb3duKGYpKSxhLnVwZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6ZD9bd2EodGhpcy5U'@;
put 'RVhUQVJFQSktMl06dm9pZCAwLHdpZHRoOmQ/d2EodGhpcy5URVhUQVJFQSkraDp2b2lkIDAscmVuZGVyZXI6KGYsXyxULFcsaWUscGUsd2UpPT57JHAoZixfLFQsVyxpZSxwZSx3ZSk7Y29uc3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTpFZSxhbGxvd0h0bWw6WmUsbG9jYWxlOml0fT10aGlz'@;
put 'LmNlbGxQcm9wZXJ0aWVzLGV0PXRoaXMucXVlcnk7bGV0IEV0LFN0LHl0PV9sKHBlKTt5dCYmIVplJiYoRXQ9ITA9PT1FZT95dC5pbmRleE9mKGV0KTp5dC50b0xvY2FsZUxvd2VyQ2FzZShpdCkuaW5kZXhPZihldC50b0xvY2FsZUxvd2VyQ2FzZShpdCkpLC0xIT09RXQmJihTdD15dC5zdWJz'@;
put 'dHIoRXQsZXQubGVuZ3RoKSx5dD15dC5yZXBsYWNlKFN0LGA8c3Ryb25nPiR7U3R9PC9zdHJvbmc+YCkpKSxfLmlubmVySFRNTD15dH0sYXV0b0NvbHVtblNpemU6ITB9KSxsLnNraXBPbmUmJihsLnNraXBPbmU9ITEpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5'@;
put 'Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0pfWNsb3NlKCl7dGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1kaXNjYXJkRWRpdG9yKGwpe3N1cGVyLmRpc2NhcmRFZGl0b3IobCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1xdWVyeUNob2lj'@;
put 'ZXMobCl7Y29uc3QgYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTt0aGlzLnF1ZXJ5PWwsImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5jYWxsKHRoaXMuY2VsbFByb3BlcnRpZXMsbCxkPT57dGhpcy5yYXdDaG9pY2VzPWQsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVz'@;
put 'SWZOZWVkZWQoZCkpfSk6QXJyYXkuaXNBcnJheShhKT8odGhpcy5yYXdDaG9pY2VzPWEsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoYSkpKTp0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KFtdKX11cGRhdGVDaG9pY2VzTGlzdChsKXtjb25zdCBhPWhOKHRo'@;
put 'aXMuVEVYVEFSRUEpLGQ9Y3RlKHRoaXMuVEVYVEFSRUEpLGg9dGhpcy5jZWxsUHJvcGVydGllcy5zb3J0QnlSZWxldmFuY2UsZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcjtsZXQgXz1udWxsLFQ9bnVsbCxXPWw7aCYmKF89dGhpcy5zb3J0QnlSZWxldmFuY2UodGhpcy5zdHJpcFZhbHVl'@;
put 'SWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxXLHRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSkpO2NvbnN0IGllPUFycmF5LmlzQXJyYXkoXyk/Xy5sZW5ndGg6MDtpZighMT09PWYpaWUmJihUPV9bMF0pO2Vsc2V7Y29uc3QgcGU9W107Zm9yKGxldCB3ZT0wLEVl'@;
put 'PVcubGVuZ3RoO3dlPEVlJiYhKGgmJmllPD13ZSk7d2UrKylwZS5wdXNoKGllP1dbX1t3ZV1dOldbd2VdKTtUPTAsVz1wZX10aGlzLnN0cmlwcGVkQ2hvaWNlcz1XLHRoaXMuaHRFZGl0b3IubG9hZERhdGEoS2IoW1ddKSksdGhpcy51cGRhdGVEcm9wZG93bkhlaWdodCgpLHRoaXMuZmxpcERy'@;
put 'b3Bkb3duSWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShUKSx0aGlzLmhvdC5saXN0ZW4oKSxveSh0aGlzLlRFWFRBUkVBLGEsYT09PWQ/dm9pZCAwOmQpfWZsaXBEcm9wZG93bklmTmVlZGVkKCl7Y29u'@;
put 'c3QgbD12Zyh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRBQkxFKSxhPWw9PT10aGlzLmhvdC5yb290V2luZG93LGQ9dGhpcy5jZWxsUHJvcGVydGllcy5wcmV2ZW50T3ZlcmZsb3c7aWYoYXx8IWEmJihkfHwiaG9yaXpvbnRhbCI9PT1kKSlyZXR1cm4hMTtjb25zdCBoPUtsKHRoaXMuVEVY'@;
put 'VEFSRUEpLGY9YWwodGhpcy5URVhUQVJFQSksXz10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCksVD1sLnNjcm9sbFRvcCxXPWFsKHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQpLGllPUtsKGwpLHBlPWgudG9wLWllLnRvcC1XK1Qsd2U9bC5zY3JvbGxIZWlnaHQtcGUtVy1mLEVlPV8+'@;
put 'd2UmJnBlPndlO3JldHVybiBFZT90aGlzLmZsaXBEcm9wZG93bihfKTp0aGlzLnVuZmxpcERyb3Bkb3duKCksdGhpcy5saW1pdERyb3Bkb3duSWZOZWVkZWQoRWU/cGU6d2UsXyksRWV9bGltaXREcm9wZG93bklmTmVlZGVkKGwsYSl7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPTAsXz1udWxsO2Rv'@;
put 'e2Y9dGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQoaCl8fHRoaXMuaHRFZGl0b3Iudmlldy5fd3QuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpLGQrPWYsaCs9MX13aGlsZShkPGwpO189ZC1mLHRoaXMuaHRFZGl0b3IuZmxpcHBlZCYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQu'@;
put 'c3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKSthLV8rInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChkLWYpfX1mbGlwRHJvcGRvd24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2EucG9zaXRpb249'@;
put 'ImFic29sdXRlIixhLnRvcD0tbCsicHgiLHRoaXMuaHRFZGl0b3IuZmxpcHBlZD0hMH11bmZsaXBEcm9wZG93bigpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC50b3A9IiIsdGhpcy5odEVkaXRvci5mbGlwcGVkPXZvaWQg'@;
put 'MH11cGRhdGVEcm9wZG93bkhlaWdodCgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKStMYyh0aGlzLmhvdC5yb290RG9jdW1lbnQpKzIsYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bjt0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhp'@;
put 'cy5nZXREcm9wZG93bkhlaWdodCgpLHdpZHRoOmE/dm9pZCAwOmx9KSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfXNldERyb3Bkb3duSGVpZ2h0KGwpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdo'@;
put 'dDpsfSl9aGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKGwpeyJudW1iZXIiPT10eXBlb2YgbD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwobCwwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCExKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpfWdldERyb3Bkb3duSGVpZ2h0KCl7Y29uc3Qg'@;
put 'bD10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCkuZ2V0Um93SGVpZ2h0KDApfHwyMyxhPXRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3M7cmV0dXJuIHRoaXMuc3RyaXBwZWRDaG9pY2VzLmxlbmd0aD49YT9hKmw6dGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKmwrOH1zdHJpcFZh'@;
put 'bHVlSWZOZWVkZWQobCl7cmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbbF0pWzBdfXN0cmlwVmFsdWVzSWZOZWVkZWQobCl7Y29uc3R7YWxsb3dIdG1sOmF9PXRoaXMuY2VsbFByb3BlcnRpZXMsZD1jcyhsLGY9Pl9sKGYpKTtyZXR1cm4gY3MoZCxmPT5hP2Y6dU4oZikpfWFsbG93'@;
put 'S2V5RXZlbnRQcm9wYWdhdGlvbihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkX3Jvdz1hP2EuZnJvbS5yb3c6LTE7bGV0IGg9ITE7cmV0dXJuIGw9PT1jby5BUlJPV19ET1dOJiZkX3Jvdz4wJiZkX3Jvdzx0aGlzLmh0RWRpdG9yLmNvdW50Um93cygp'@;
put 'LTEmJihoPSEwKSxsPT09Y28uQVJST1dfVVAmJmRfcm93Pi0xJiYoaD0hMCksaH1vbkJlZm9yZUtleURvd24obCl7Y29uc3QgYT1LQi5nZXQodGhpcyk7aWYoYS5za2lwT25lPSExLFN0ZShsLmtleUNvZGUpfHxsLmtleUNvZGU9PT1jby5CQUNLU1BBQ0V8fGwua2V5Q29kZT09PWNvLkRFTEVU'@;
put 'RXx8bC5rZXlDb2RlPT09Y28uSU5TRVJUKXtsZXQgZD0xMDtpZihsLmtleUNvZGU9PT1jby5DJiYobC5jdHJsS2V5fHxsLm1ldGFLZXkpKXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fChkKz0xMCksdGhpcy5odEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVl'@;
put 'cnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpLGEuc2tpcE9uZT0hMH0sZCl9fX1jbGFzcyBKbmUgZXh0ZW5kcyB2N3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImNoZWNrYm94In1iZWdpbkVkaXRpbmcobCxhKXtpZihhJiYibW91c2V1cCI9PT1hLnR5cGUpe2NvbnN0IGQ9'@;
put 'dGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyk7Qm8oZCwiaHRCYWRWYWx1ZSIpfHxkLmNsaWNrKCl9fWZpbmlzaEVkaXRpbmcoKXt9aW5pdCgpe31vcGVuKCl7fWNsb3NlKCl7fWdldFZhbHVlKCl7fXNldFZhbHVlKCl7fWZvY3VzKCl7fX12YXIgUW5lPUYo'@;
put 'MTc0ODApO2NvbnN0IGVyZT0iZGF0ZSIsdHJlPSJkYXRlRWRpdG9yIjtjbGFzcyBucmUgZXh0ZW5kcyBrZ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIGVyZX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmRlZmF1bHREYXRlRm9ybWF0PSJERC9NTS9ZWVlZIix0aGlzLmlz'@;
put 'Q2VsbEVkaXRlZD0hMSx0aGlzLnBhcmVudERlc3Ryb3llZD0hMSx0aGlzLiRkYXRlUGlja2VyPW51bGx9aW5pdCgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLbyl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgbW9tZW50LmpzIHRvIHlvdXIgcHJvamVjdC4iKTtpZigiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgUW5lKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gaW5jbHVkZSBQaWthZGF5IHRvIHlvdXIgcHJvamVjdC4iKTtzdXBlci5pbml0KCksdGhpcy5pbnN0YW5jZS5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWQ9ITAsdGhp'@;
put 'cy5kZXN0cm95RWxlbWVudHMoKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZGF0ZVBpY2tlclN0eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0'@;
put 'aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS56SW5kZXg9OTk5OSx0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRo'@;
put 'aXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLHBpKHRoaXMuZGF0ZVBpY2tlciwiaHREYXRlcGlja2VySG9sZGVyIiksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kYXRlUGlja2VyKSxuZXcgbGwodGhpcykuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRhdGVQ'@;
put 'aWNrZXIsIm1vdXNlZG93biIsYT0+YS5zdG9wUHJvcGFnYXRpb24oKSl9ZGVzdHJveUVsZW1lbnRzKCl7Y29uc3QgbD10aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuZGF0'@;
put 'ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsXyl7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsXyl9b3Blbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2Vy'@;
put 'KCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIub3BlbigpLHRoaXMuc2hvd0RhdGVwaWNrZXIobCksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazpoPT57aC5zdG9wUHJvcGFnYXRpb24oKX0sZ3JvdXA6dHJlfSl9Y2xvc2UoKXt2YXIgbDt0aGlzLl9vcGVuZWQ9'@;
put 'ITEsbnVsbCE9PShsPXRoaXMuJGRhdGVQaWNrZXIpJiZ2b2lkIDAhPT1sJiZsLmRlc3Ryb3kmJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLHRoaXMuaW5zdGFuY2UuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaW5zdGFuY2UuX3JlZnJlc2hCb3JkZXJzKCl9KSx0aGlzLmhvdC5nZXRT'@;
put 'aG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHRyZSksc3VwZXIuY2xvc2UoKX1maW5pc2hFZGl0aW5nKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYobCl7Y29uc3QgZD10aGlzLm9yaWdpbmFsVmFsdWU7dm9pZCAwIT09ZCYmdGhpcy5zZXRWYWx1ZShkKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSl9c2hvd0RhdGVwaWNrZXIobCl7Y29uc3QgYT10'@;
put 'aGlzLlRELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0fHx0aGlzLmRlZmF1bHREYXRlRm9ybWF0LGg9dGhpcy5pbnN0YW5jZS52aWV3LmlzTW91c2VEb3duKCksZj0hIWwmJkNOKGwua2V5Q29kZSk7bGV0IF87dGhpcy5kYXRlUGlja2Vy'@;
put 'LnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLiRkYXRlUGlja2VyPW5ldyBRbmUodGhpcy5nZXREYXRlUGlja2VyQ29uZmlnKCkpLHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe30sdGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5k'@;
put 'b3cucGFnZVlPZmZzZXQrYS50b3ArYWwodGhpcy5URCl9cHhgO2xldCBUPXRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXQ7VD10aGlzLmhvdC5pc1J0bCgpP2EucmlnaHQtd2EodGhpcy5kYXRlUGlja2VyKTphLmxlZnQsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD1gJHtUfXB4YCx0'@;
put 'aGlzLm9yaWdpbmFsVmFsdWU/KF89dGhpcy5vcmlnaW5hbFZhbHVlLEtvKF8sZCwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChLbyhfLGQpLCEwKSx0aGlzLmdldFZhbHVlKCkhPT10aGlzLm9yaWdpbmFsVmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5h'@;
put 'bFZhbHVlKSwhZiYmIWgmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlPyhfPXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGUsS28oXyxkLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KEtvKF8sZCksITApLCFm'@;
put 'JiYhaCYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuJGRhdGVQaWNrZXIuZ290b1RvZGF5KCl9aGlkZURhdGVwaWNrZXIoKXt0aGlzLmRhdGVQaWNrZXJTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRkYXRlUGlja2VyLmhpZGUoKX1nZXREYXRlUGlja2VyQ29uZmlnKCl7Y29uc3QgbD10aGlz'@;
put 'LlRFWFRBUkVBLGE9e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnJiZseShhLHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7Y29uc3QgZD1hLm9uU2VsZWN0LGg9YS5vbkNsb3NlO3JldHVybiBhLmZpZWxkPWws'@;
put 'YS50cmlnZ2VyPWwsYS5jb250YWluZXI9dGhpcy5kYXRlUGlja2VyLGEuYm91bmQ9ITEsYS5mb3JtYXQ9YS5mb3JtYXR8fHRoaXMuZGVmYXVsdERhdGVGb3JtYXQsYS5yZXBvc2l0aW9uPWEucmVwb3NpdGlvbnx8ITEsYS5pc1JUTD0hMSxhLm9uU2VsZWN0PWY9PntsZXQgXz1mO2lzTmFOKF8u'@;
put 'Z2V0VGltZSgpKXx8KF89S28oXykuZm9ybWF0KHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdHx8dGhpcy5kZWZhdWx0RGF0ZUZvcm1hdCkpLHRoaXMuc2V0VmFsdWUoXyksdGhpcy5oaWRlRGF0ZXBpY2tlcigpLGQmJmQoKX0sYS5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95'@;
put 'ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksaCYmaCgpfSxhfX1jbGFzcyBKQiBleHRlbmRzIFhCe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iZHJvcGRvd24ifXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pLHRoaXMuY2VsbFByb3BlcnRp'@;
put 'ZXMuZmlsdGVyPSExLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0PSEwfX1zby5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbihjLGwsYSl7Y29uc3QgZD10aGlzLmdldENlbGxNZXRhKGwsdGhpcy5wcm9wVG9Db2woYSkpO2QuZWRpdG9yPT09SkImJnZvaWQg'@;
put 'MD09PWQuc3RyaWN0JiYoZC5maWx0ZXI9ITEsZC5zdHJpY3Q9ITApfSk7Y2xhc3MgcnJlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xhc3MgaXJlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJwYXNzd29y'@;
put 'ZCJ9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFSRUE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEuc2V0'@;
put 'QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5kc29udGFibGVJbnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdo'@;
put 'dD0wLGcyKHRoaXMuVEVYVEFSRUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKX19Y29uc3QgUUI9Imh0X2VkaXRvcl92aXNpYmxlIixvcmU9InNlbGVjdEVkaXRvciI7Y2xhc3MgbUllIGV4dGVuZHMgdjd7c3RhdGljIGdldCBFRElUT1Jf'@;
put 'VFlQRSgpe3JldHVybiJzZWxlY3QifWluaXQoKXt0aGlzLnNlbGVjdD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIikscGkodGhpcy5zZWxlY3QsImh0U2VsZWN0RWRpdG9yIiksdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ob3Qucm9v'@;
put 'dEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuc2VsZWN0LnZhbHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNp'@;
put 'b25zKCksdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuc2VsZWN0LnN0eWxlLmRp'@;
put 'c3BsYXk9Im5vbmUiLEJvKHRoaXMuc2VsZWN0LFFCKSYmV28odGhpcy5zZWxlY3QsUUIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9s'@;
put 'bEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1l'@;
put 'bnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpfXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pO2NvbnN0IFQ9dGhpcy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBX'@;
put 'O1c9dGhpcy5wcmVwYXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBlb2YgVD9UKHRoaXMucm93LHRoaXMuY29sLHRoaXMucHJvcCk6VCksZzIodGhpcy5zZWxlY3QpLGRzKFcsKGllLHBlKT0+e2NvbnN0IHdlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTt3'@;
put 'ZS52YWx1ZT1wZSxnZyh3ZSxpZSksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQod2UpfSl9cHJlcGFyZU9wdGlvbnMobCl7bGV0IGE9e307aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGQ9MCxoPWwubGVuZ3RoO2Q8aDtkKyspYVtsW2RdXT1sW2RdO2Vsc2Uib2JqZWN0Ij09dHlwZW9mIGwm'@;
put 'JihhPWwpO3JldHVybiBhfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLnJvdyx0aGlzLnByb3ApO3RoaXMub3JpZ2luYWxWYWx1ZT1sLHRoaXMuc2V0VmFsdWUobCksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNp'@;
put 'b25zKCl7aWYodGhpcy5zdGF0ZSE9PVdjLkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDpsLHN0YXJ0OmEsd2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVj'@;
put 'dCgpLGY9dGhpcy5zZWxlY3Quc3R5bGU7Zi5oZWlnaHQ9YCR7aH1weGAsZi53aWR0aD1gJHtkfXB4YCxmLnRvcD1gJHtsfXB4YCxmW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2F9cHhgLGYubWFyZ2luPSIwcHgiLHBpKHRoaXMuc2VsZWN0LFFCKX1yZWdpc3RlclNob3J0'@;
put 'Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZD17Z3JvdXA6b3JlfTshMSE9PXRoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpJiZhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0'@;
put 'IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleC0xO2g+PTAmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgrMTtoPD10aGlzLnNlbGVjdC5sZW5ndGgtMSYm'@;
put 'KHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19XSxkKX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChvcmUpfX1jbGFzcyBzcmUgZXh0ZW5kcyBrZ3tzdGF0aWMg'@;
put 'Z2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRpbWUifXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pLHRoaXMuVEVYVEFSRUEuZGlyPSJsdHIifX1mdW5jdGlvbiBlaihjLGwsYSxkLGgsZixfKXtNeS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksZ2co'@;
put 'bCxmPz8iIiwhMSl9ZnVuY3Rpb24gYjcoYyxsLGEsZCxoLGYsXyl7Y29uc3R7cm9vdERvY3VtZW50OlR9PWMsVz1fLmFsbG93SHRtbD9lajokcCxpZT1ULmNyZWF0ZUVsZW1lbnQoIkRJViIpO2lmKGllLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIsaWUuYXBwZW5kQ2hpbGQoVC5j'@;
put 'cmVhdGVUZXh0Tm9kZShTdHJpbmcuZnJvbUNoYXJDb2RlKDk2NjApKSksVy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKFQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKSksbC5pbnNlcnRCZWZvcmUoaWUsbC5m'@;
put 'aXJzdENoaWxkKSxwaShsLCJodEF1dG9jb21wbGV0ZSIpLCFjLmFjQXJyb3dMaXN0ZW5lcil7Y29uc3QgcGU9bmV3IGxsKGMpO2MuYWNBcnJvd0xpc3RlbmVyPWZ1bmN0aW9uKHdlKXtCbyh3ZS50YXJnZXQsImh0QXV0b2NvbXBsZXRlQXJyb3ciKSYmYy52aWV3Ll93dC5nZXRTZXR0aW5nKCJv'@;
put 'bkNlbGxEYmxDbGljayIsbnVsbCxjLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksbCl9LHBlLmFkZEV2ZW50TGlzdGVuZXIoYy5yb290RWxlbWVudCwibW91c2Vkb3duIixjLmFjQXJyb3dMaXN0ZW5lciksYy5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e3BlLmRlc3Ryb3koKX0pfX1l'@;
put 'ai5SRU5ERVJFUl9UWVBFPSJodG1sIixiNy5SRU5ERVJFUl9UWVBFPSJhdXRvY29tcGxldGUiO2NvbnN0IGFyZT1uZXcgV2Vha01hcCxscmU9bmV3IFdlYWtNYXAsd0llPSJodEJhZFZhbHVlIix5Nz0iZGF0YS1yb3ciLHc3PSJkYXRhLWNvbCIsQ0llPSJjaGVja2JveFJlbmRlcmVyIjtmdW5j'@;
put 'dGlvbiB0aihjLGwsYSxkLGgsZixfKXtjb25zdHtyb290RG9jdW1lbnQ6VH09YztNeS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksZnVuY3Rpb24gU0llKGMpe2xldCBsPWxyZS5nZXQoYyk7aWYoIWwpe2NvbnN0e3Jvb3RFbGVtZW50OmF9PWM7bD1uZXcgbGwoYyksbC5hZGRFdmVudExp'@;
put 'c3RlbmVyKGEsImNsaWNrIixkPT5mdW5jdGlvbiBrSWUoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztpZighbmooYSl8fCFhLmhhc0F0dHJpYnV0ZSh5Nyl8fCFhLmhhc0F0dHJpYnV0ZSh3NykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoeTcpLDEwKSxoPXBhcnNlSW50'@;
put 'KGEuZ2V0QXR0cmlidXRlKHc3KSwxMCk7bC5nZXRDZWxsTWV0YShkLGgpLnJlYWRPbmx5JiZjLnByZXZlbnREZWZhdWx0KCl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIixkPT5mdW5jdGlvbiBFSWUoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztuaihhKSYmKCFhLmhhc0F0'@;
put 'dHJpYnV0ZSh5Nyl8fCFhLmhhc0F0dHJpYnV0ZSh3Nyl8fHNldFRpbWVvdXQobC5saXN0ZW4sMTApKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsImNoYW5nZSIsZD0+ZnVuY3Rpb24gQUllKGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIW5qKGEpfHwhYS5oYXNBdHRyaWJ1dGUoeTcp'@;
put 'fHwhYS5oYXNBdHRyaWJ1dGUodzcpKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKHk3KSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZSh3NyksMTApLGY9bC5nZXRDZWxsTWV0YShkLGgpO2lmKCFmLnJlYWRPbmx5KXtsZXQgXz1udWxsO189Yy50YXJnZXQuY2hl'@;
put 'Y2tlZD92b2lkIDA9PT1mLnVuY2hlY2tlZFRlbXBsYXRlfHxmLmNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAhPT1mLnVuY2hlY2tlZFRlbXBsYXRlJiZmLnVuY2hlY2tlZFRlbXBsYXRlLGwuc2V0RGF0YUF0Q2VsbChkLGgsXyl9fShkLGMpKSxscmUuc2V0KGMsbCl9fShjKTtsZXQgVz1mdW5jdGlv'@;
put 'biBNSWUoYyl7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGwuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJJbnB1dCIsbC50eXBlPSJjaGVja2JveCIsbC5zZXRBdHRyaWJ1dGUoImF1dG9jb21wbGV0ZSIsIm9mZiIpLGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRl'@;
put 'eCIsIi0xIiksbC5jbG9uZU5vZGUoITEpfShUKTtjb25zdCBpZT1fLmxhYmVsO2xldCBwZT0hMTtpZih0eXBlb2YgXy5jaGVja2VkVGVtcGxhdGU+InUiJiYoXy5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBfLnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKF8udW5jaGVja2VkVGVtcGxhdGU9'@;
put 'ITEpLGcyKGwpLGY9PT1fLmNoZWNrZWRUZW1wbGF0ZXx8X2woZikudG9Mb2NhbGVMb3dlckNhc2UoXy5sb2NhbGUpPT09X2woXy5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT9XLmNoZWNrZWQ9ITA6Zj09PV8udW5jaGVja2VkVGVtcGxhdGV8fF9sKGYpLnRv'@;
put 'TG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT09PV9sKF8udW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT9XLmNoZWNrZWQ9ITE6Z2MoZik/cGkoVywibm9WYWx1ZSIpOihXLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHBpKFcsd0llKSxwZT0hMCksVy5zZXRBdHRy'@;
put 'aWJ1dGUoeTcsYSksVy5zZXRBdHRyaWJ1dGUodzcsZCksIXBlJiZpZSl7bGV0IGl0PSIiO2lmKGllLnZhbHVlKWl0PSJmdW5jdGlvbiI9PXR5cGVvZiBpZS52YWx1ZT9pZS52YWx1ZS5jYWxsKHRoaXMsYSxkLGgsZik6aWUudmFsdWU7ZWxzZSBpZihpZS5wcm9wZXJ0eSl7Y29uc3QgeXQ9Yy5n'@;
put 'ZXREYXRhQXRSb3dQcm9wKGEsaWUucHJvcGVydHkpO2l0PW51bGwhPT15dD95dDoiIn1jb25zdCBldD1mdW5jdGlvbiB4SWUoYyxsLGEpe2NvbnN0IGQ9Yy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO3JldHVybiBkLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVyTGFiZWwgIisoYT8iZnVs'@;
put 'bFdpZHRoIjoiIiksZC5hcHBlbmRDaGlsZChjLmNyZWF0ZVRleHROb2RlKGwpKSxkLmNsb25lTm9kZSghMCl9KFQsaXQsITAhPT1pZS5zZXBhcmF0ZWQpOyJiZWZvcmUiPT09aWUucG9zaXRpb24/aWUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKGV0KSxsLmFwcGVuZENoaWxkKFcpKTooZXQu'@;
put 'YXBwZW5kQ2hpbGQoVyksVz1ldCk6KCFpZS5wb3NpdGlvbnx8ImFmdGVyIj09PWllLnBvc2l0aW9uKSYmKGllLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChXKSxsLmFwcGVuZENoaWxkKGV0KSk6KGV0Lmluc2VydEJlZm9yZShXLGV0LmZpcnN0Q2hpbGQpLFc9ZXQpKX1mdW5jdGlvbiBFZSgp'@;
put 'e2xldCBpdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IGV0PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldC5sZW5ndGg7eXQrKyl7Y29uc3R7cm93OkV0LGNvbDpTdH09ZXRbeXRdLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCkse3JvdzpKdCxjb2w6bm59PWV0W3l0XS5nZXRCb3R0b21FbmRDb3JuZXIoKSx2bj1bXTtmb3IobGV0IE5uPUV0O05uPD1KdDtObis9MSlmb3IobGV0IGNyPVN0O2NyPD1ubjtjcis9MSl7Y29uc3QgSXI9Yy5nZXRDZWxsTWV0YShObixjcik7aWYoImNoZWNrYm94IiE9'@;
put 'PUlyLnR5cGUpcmV0dXJuO2lmKCEwPT09SXIucmVhZE9ubHkpY29udGludWU7dHlwZW9mIElyLmNoZWNrZWRUZW1wbGF0ZT4idSImJihJci5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBJci51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihJci51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7Y29uc3Qg'@;
put 'RWk9Yy5nZXREYXRhQXRDZWxsKE5uLGNyKTshMT09PWl0P1tJci5jaGVja2VkVGVtcGxhdGUsSXIuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKEVpKT92bi5wdXNoKFtObixjcixJci51bmNoZWNrZWRUZW1wbGF0ZV0pOltJci51bmNoZWNrZWRUZW1wbGF0ZSxJci51bmNo'@;
put 'ZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpLG51bGwsdm9pZCAwXS5pbmNsdWRlcyhFaSkmJnZuLnB1c2goW05uLGNyLElyLmNoZWNrZWRUZW1wbGF0ZV0pOnZuLnB1c2goW05uLGNyLElyLnVuY2hlY2tlZFRlbXBsYXRlXSl9dm4ubGVuZ3RoPjAmJmMuc2V0RGF0YUF0Q2VsbCh2bil9fWZ1bmN0'@;
put 'aW9uIFplKCl7Y29uc3QgaXQ9Yy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoaXQpe2ZvcihsZXQgZXQ9MDtldDxpdC5sZW5ndGg7ZXQrKyl7Y29uc3QgeXQ9aXRbZXRdLmdldFRvcFN0YXJ0Q29ybmVyKCksRXQ9aXRbZXRdLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgU3Q9eXQucm93O1N0'@;
put 'PD1FdC5yb3c7U3QrKylmb3IobGV0IEp0PXl0LmNvbDtKdDw9RXQuY29sO0p0Kyspe2NvbnN0IG5uPWMuZ2V0Q2VsbE1ldGEoU3QsSnQpO2lmKCJjaGVja2JveCIhPT1ubi50eXBlKXJldHVybiExO2NvbnN0IHZuPWMuZ2V0Q2VsbChTdCxKdCk7aWYobnVsbD09dm4pcmV0dXJuITA7aWYodm4u'@;
put 'cXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MCYmIW5uLnJlYWRPbmx5KXJldHVybiEwfX1yZXR1cm4hMX19KCFpZXx8aWUmJiFpZS5zZXBhcmF0ZWQpJiZsLmFwcGVuZENoaWxkKFcpLHBlJiZsLmFwcGVuZENoaWxkKFQuY3JlYXRlVGV4dE5vZGUoIiNi'@;
put 'YWQtdmFsdWUjIikpLGFyZS5oYXMoYyl8fChhcmUuc2V0KGMsITApLGZ1bmN0aW9uIHdlKCl7Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCksIVplKCkpfSx7a2V5czpbWyJl'@;
put 'bnRlciJdXSxjYWxsYmFjazooKT0+KEVlKCksIVplKCkpLHJ1bk9ubHlJZjooKT0+Yy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZ30se2tleXM6W1siZGVsZXRlIl0sWyJiYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PihFZSghMCksIVplKCkpLHJlbGF0aXZlVG9Hcm91cDpjeSxw'@;
put 'b3NpdGlvbjoiYmVmb3JlIn1dLHtncm91cDpDSWV9KX0oKSl9ZnVuY3Rpb24gbmooYyl7cmV0dXJuIklOUFVUIj09PWMudGFnTmFtZSYmImNoZWNrYm94Ij09PWMuZ2V0QXR0cmlidXRlKCJ0eXBlIil9c28uZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1'@;
put 'bmN0aW9uKGMsbCxhKXtjb25zdHtsYWJlbDpkLHR5cGU6aCxyb3c6Zixjb2x1bW46Xyxwcm9wOlR9PWw7aWYoImNoZWNrYm94Ij09PWgpe2lmKGQpe2NvbnN0e3ZhbHVlOlcscHJvcGVydHk6aWV9PWQ7bGV0IHBlPWE7aWYoVylwZT0iZnVuY3Rpb24iPT10eXBlb2YgVz9XKGYsXyxULGEpOlc7'@;
put 'ZWxzZSBpZihpZSl7Y29uc3Qgd2U9dGhpcy5nZXREYXRhQXRSb3dQcm9wKGYsaWUpO3BlPW51bGwhPT13ZT93ZTphfWM9cGV9cmV0dXJuIGN9fSksdGouUkVOREVSRVJfVFlQRT0iY2hlY2tib3giO3ZhciBxcD1GKDExMTcwKSxUSWU9Ri5uKHFwKTtmdW5jdGlvbiByaihjLGwsYSxkLGgsZixf'@;
put 'KXtsZXQgVD1mO2lmKEd1KFQpKXtjb25zdCBXPV8ubnVtZXJpY0Zvcm1hdCxpZT1XJiZXLmN1bHR1cmV8fCItIixwZT1XJiZXLnBhdHRlcm4sd2U9Xy5jbGFzc05hbWV8fCIiLEVlPXdlLmxlbmd0aD93ZS5zcGxpdCgiICIpOltdO2lmKHR5cGVvZiBpZTwidSImJiFxcC5sYW5ndWFnZXMoKVtp'@;
put 'ZV0pe2NvbnN0IFplPWllLnJlcGxhY2UoIi0iLCIiKSxpdD1xcC5hbGxMYW5ndWFnZXM/cXAuYWxsTGFuZ3VhZ2VzW2llXTpxcFtaZV07aXQmJnFwLnJlZ2lzdGVyTGFuZ3VhZ2UoaXQpfXFwLnNldExhbmd1YWdlKGllKSxUPXFwKFQpLmZvcm1hdChwZXx8IjAiKSxFZS5pbmRleE9mKCJodExl'@;
put 'ZnQiKTwwJiZFZS5pbmRleE9mKCJodENlbnRlciIpPDAmJkVlLmluZGV4T2YoImh0UmlnaHQiKTwwJiZFZS5pbmRleE9mKCJodEp1c3RpZnkiKTwwJiZFZS5wdXNoKCJodFJpZ2h0IiksRWUuaW5kZXhPZigiaHROdW1lcmljIik8MCYmRWUucHVzaCgiaHROdW1lcmljIiksXy5jbGFzc05hbWU9'@;
put 'RWUuam9pbigiICIpLGwuZGlyPSJsdHIifSRwKGMsbCxhLGQsaCxULF8pfWZ1bmN0aW9uIGlqKGMsbCxhLGQsaCxmLF8peyRwLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLF9dKTtjb25zdCBXPV8uaGFzaFN5bWJvbHx8IioiO2xldCBpZT0iIjt2bygoXy5oYXNoTGVuZ3RofHxsLmlubmVySFRN'@;
put 'TC5sZW5ndGgpLTEsKCk9PntpZSs9V30pLGdnKGwsaWUpfWZ1bmN0aW9uIG9qKGMsbCxhLGQsaCxmLF8peyRwLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLF9dKSxsLmRpcj0ibHRyIn1mdW5jdGlvbiBFeShjLGwpe2xldCBhPWM7bnVsbD09YSYmKGE9IiIpLHRoaXMuYWxsb3dFbXB0eSYmIiI9'@;
put 'PT1hP2woITApOnRoaXMuc3RyaWN0JiZ0aGlzLnNvdXJjZT8iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2UoYSx1cmUoYSxsKSk6dXJlKGEsbCkodGhpcy5zb3VyY2UpOmwoITApfWZ1bmN0aW9uIHVyZShjLGwpe2NvbnN0IGE9YztyZXR1cm4gZnVuY3Rpb24oZCl7'@;
put 'bGV0IGg9ITE7Zm9yKGxldCBmPTAsXz1kLmxlbmd0aDtmPF87ZisrKWlmKGE9PT1kW2ZdKXtoPSEwO2JyZWFrfWwoaCl9fWZ1bmN0aW9uIGRyZShjKXtjb25zdCBsPW5ldyBEYXRlKGMpO3JldHVybiBpc05hTihuZXcgRGF0ZShgJHtjfVQwMDowMGApLmdldERhdGUoKSk/bDpuZXcgRGF0ZShs'@;
put 'LmdldFRpbWUoKSs2ZTQqbC5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBZayhjLGwpe2NvbnN0IGE9QXRlKGVyZSx0aGlzLmluc3RhbmNlKTtsZXQgZD1jLGg9ITA7bnVsbD09ZCYmKGQ9IiIpO2xldCBmPUtvKGQsdGhpcy5kYXRlRm9ybWF0fHxhLmRlZmF1bHREYXRlRm9ybWF0LCEw'@;
put 'KS5pc1ZhbGlkKCksXz1LbyhuZXcgRGF0ZShkKSkuaXNWYWxpZCgpfHxmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1kJiYoXz0hMCxmPSEwKSxffHwoaD0hMSksIV8mJmYmJihoPSEwKSxfJiYhZilpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgVD1mdW5jdGlvbiBGSWUoYyxs'@;
put 'KXtjb25zdCBhPUtvKGRyZShjKSksZD1LbyhjLGwpLGg9Yy5zZWFyY2goL1tBLXpdL2cpPi0xO2xldCBmO3JldHVybiBmPWEuaXNWYWxpZCgpJiZhLmZvcm1hdCgieCIpPT09ZC5mb3JtYXQoIngiKXx8IWQuaXNWYWxpZCgpfHxoP2E6ZCxmLmZvcm1hdChsKX0oZCx0aGlzLmRhdGVGb3JtYXQp'@;
put 'LFc9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyh0aGlzLnJvdyksaWU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbih0aGlzLmNvbCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKFcsaWUsVCwiZGF0ZVZhbGlkYXRvciIpLGg9ITB9ZWxzZSBoPSExO2woaCl9ZnVuY3Rpb24gc2oo'@;
put 'YyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSxsKCEoIXRoaXMuYWxsb3dFbXB0eXx8IiIhPT1hKXx8IiIhPT1hJiZHdShjKSl9cmouUkVOREVSRVJfVFlQRT0ibnVtZXJpYyIsaWouUkVOREVSRVJfVFlQRT0icGFzc3dvcmQiLG9qLlJFTkRFUkVSX1RZUEU9InRpbWUiLEV5LlZBTElEQVRP'@;
put 'Ul9UWVBFPSJhdXRvY29tcGxldGUiLFlrLlZBTElEQVRPUl9UWVBFPSJkYXRlIixzai5WQUxJREFUT1JfVFlQRT0ibnVtZXJpYyI7Y29uc3QgTkllPVsiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaIiwiWCIsIngiXTtmdW5jdGlvbiBXayhjLGwpe2NvbnN0IGE9dGhpcy50aW1lRm9ybWF0fHwi'@;
put 'aDptbTpzcyBhIjtsZXQgZD0hMCxoPWM7bnVsbD09PWgmJihoPSIiKSxoPS9eXGR7Myx9JC8udGVzdChoKT9wYXJzZUludChoLDEwKTpoO2NvbnN0IGY9L15cZHsxLDJ9JC8udGVzdChoKTtmJiYoaCs9IjowMCIpO2NvbnN0IF89S28oaCxOSWUsITApLmlzVmFsaWQoKT9LbyhoKTpLbyhoLGEp'@;
put 'O2xldCBUPV8uaXNWYWxpZCgpLFc9S28oaCxhLCEwKS5pc1ZhbGlkKCkmJiFmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1oJiYoVD0hMCxXPSEwKSxUfHwoZD0hMSksIVQmJlcmJihkPSEwKSxUJiYhVylpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgaWU9Xy5mb3JtYXQoYSks'@;
put 'cGU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyh0aGlzLnJvdyksd2U9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbih0aGlzLmNvbCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHBlLHdlLGllLCJ0aW1lVmFsaWRhdG9yIiksZD0hMH1lbHNlIGQ9ITE7bChkKX1Xay5WQUxJREFU'@;
put 'T1JfVFlQRT0idGltZSI7Y29uc3QgakllPXtDRUxMX1RZUEU6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOlhCLHJlbmRlcmVyOmI3LHZhbGlkYXRvcjpFeX0sekllPXtDRUxMX1RZUEU6ImNoZWNrYm94IixlZGl0b3I6Sm5lLHJlbmRlcmVyOnRqfSxVSWU9e0NFTExfVFlQRToiZGF0ZSIsZWRpdG9y'@;
put 'Om5yZSxyZW5kZXJlcjpiNyx2YWxpZGF0b3I6WWt9LFpJZT17Q0VMTF9UWVBFOiJkcm9wZG93biIsZWRpdG9yOkpCLHJlbmRlcmVyOmI3LHZhbGlkYXRvcjpFeX0sWUllPXtDRUxMX1RZUEU6ImhhbmRzb250YWJsZSIsZWRpdG9yOnFCLHJlbmRlcmVyOmI3fSxXSWU9e0NFTExfVFlQRToibnVt'@;
put 'ZXJpYyIsZWRpdG9yOnJyZSxyZW5kZXJlcjpyaix2YWxpZGF0b3I6c2osZGF0YVR5cGU6Im51bWJlciJ9LEdJZT17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOmlyZSxyZW5kZXJlcjppaixjb3B5YWJsZTohMX0sJEllPXtDRUxMX1RZUEU6InRpbWUiLGVkaXRvcjpzcmUscmVuZGVyZXI6'@;
put 'b2osdmFsaWRhdG9yOldrfTtjb25zdCBocmU9bmV3IE1hcChbWyJwbHVnaW4iLGZ1bmN0aW9uIGJrZShjKXtyZXR1cm4hIXV5KGMpfV0sWyJjZWxsLXR5cGUiLEZuZV0sWyJlZGl0b3IiLGt0ZV0sWyJyZW5kZXJlciIsRnRlXSxbInZhbGlkYXRvciIsSHRlXV0pLFRnPW5ldyBXZWFrTWFwLGFq'@;
put 'PVtdO2xldCBfaD1udWxsO3ZhciBmcmU9bmV3IFdlYWtTZXQ7Y2xhc3MgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImJhc2UifXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RoaXMuUExVR0lOX0tFWV19Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIEtJZShjLGwp'@;
put 'eyhmdW5jdGlvbiBYSWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsZnJlKSxmaCh0aGlzLCJob3QiLGwse3dy'@;
put 'aXRhYmxlOiExfSksVGcuc2V0KHRoaXMse2hvb2tzOnt9fSksX2g9bnVsbCx0aGlzLnBsdWdpbk5hbWU9bnVsbCx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcz1bXSx0aGlzLmlzUGx1Z2luc1JlYWR5PSExLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMu'@;
put 'aG90LmFkZEhvb2soImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+dGhpcy5vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGE9PnRoaXMub25VcGRhdGVTZXR0aW5ncyhhKSksdGhpcy5ob3QuYWRkSG9vaygiYmVm'@;
put 'b3JlSW5pdCIsKCk9PnRoaXMuaW5pdCgpKX1pbml0KCl7dGhpcy5wbHVnaW5OYW1lPXRoaXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyk7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9ERVBTLGE9QXJyYXkuaXNBcnJheShsKT9sOltdO2lmKGEubGVuZ3RoPjApe2NvbnN0IGg9W107'@;
put 'aWYoYS5mb3JFYWNoKGY9Pntjb25zdFtfLFRdPWYuc3BsaXQoIjoiKTtpZighaHJlLmhhcyhfKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAiJHtffSIgd2FzIGZvdW5kLmApO2hyZS5nZXQoXykoVCl8fGgucHVzaChgIC0gJHtUfSAoJHtffSlgKX0p'@;
put 'LGgubGVuZ3RoPjApe2NvbnN0IGY9W2BUaGUgJHt0aGlzLnBsdWdpbk5hbWV9IHBsdWdpbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6XG5gLGAke2guam9pbigiXG4iKX1cbmBdLmpvaW4oIiIpO2FqLnB1c2goZil9fWlmKF9ofHwoX2g9UE4oKSksX2guaW5kZXhPZigiVW5kb1Jl'@;
put 'ZG8iKT49MCYmX2guc3BsaWNlKF9oLmluZGV4T2YoIlVuZG9SZWRvIiksMSksX2guaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpPj0wJiZfaC5zcGxpY2UoX2guaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpLDEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIs'@;
put 'KCk9Pnt0aGlzLmlzRW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKX0pLDA9PT1faC5sZW5ndGgpe2lmKGFqLmxlbmd0aD4wKXtjb25zdCBoPVtgJHthai5qb2luKCJcbiIpfVxuYCwiWW91IGhhdmUgdG8gaW1wb3J0IGFuZCByZWdpc3RlciB0aGVtIG1hbnVh'@;
put 'bGx5LiJdLmpvaW4oIiIpO3Rocm93IG5ldyBFcnJvcihoKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiKX10aGlzLmluaXRpYWxpemVkPSEwfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZD0hMH1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ldmVudE1hbmFnZXIm'@;
put 'JnRoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCksdGhpcy5jbGVhckhvb2tzKCksdGhpcy5lbmFibGVkPSExfWFkZEhvb2sobCxhKXtUZy5nZXQodGhpcykuaG9va3NbbF09VGcuZ2V0KHRoaXMpLmhvb2tzW2xdfHxbXTtjb25zdCBkPVRnLmdldCh0aGlzKS5ob29rc1tsXTt0aGlzLmhvdC5hZGRI'@;
put 'b29rKGwsYSksZC5wdXNoKGEpLFRnLmdldCh0aGlzKS5ob29rc1tsXT1kfXJlbW92ZUhvb2tzKGwpe0RuKFRnLmdldCh0aGlzKS5ob29rc1tsXXx8W10sYT0+e3RoaXMuaG90LnJlbW92ZUhvb2sobCxhKX0pfWNsZWFySG9va3MoKXtjb25zdCBsPVRnLmdldCh0aGlzKS5ob29rcztkcyhsLChh'@;
put 'LGQpPT50aGlzLnJlbW92ZUhvb2tzKGQpKSxsLmxlbmd0aD0wfWNhbGxPblBsdWdpbnNSZWFkeShsKXt0aGlzLmlzUGx1Z2luc1JlYWR5P2woKTp0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5wdXNoKGwpfW9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKXtEbih0aGlzLnBsdWdp'@;
put 'bnNJbml0aWFsaXplZENhbGxiYWNrcyxsPT5sKCkpLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLmxlbmd0aD0wLHRoaXMuaXNQbHVnaW5zUmVhZHk9ITB9b25VcGRhdGVTZXR0aW5ncyhsKXtjb25zdCBhPWZ1bmN0aW9uIEpJZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX0odGhpcyxmcmUsZUxlKS5jYWxsKHRoaXMsbCk7dGhpcy5pc0VuYWJsZWQmJih0aGlzLmVuYWJsZWQmJiF0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmRpc2FibGVQbHVn'@;
put 'aW4oKSwhdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmYSYmdGhpcy51cGRhdGVQbHVnaW4obCkpfXVwZGF0ZVBsdWdpbigpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXImJnRoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKSxkcyh0aGlzLChsLGEpPT57ImhvdCIhPT1hJiYodGhpc1thXT1udWxsKX0pLGRlbGV0ZSB0aGlzLnQsZGVsZXRlIHRoaXMuaG90fX1mdW5jdGlvbiBlTGUoYyl7aWYoIWMpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNvbnN0'@;
put 'cnVjdG9yLlNFVFRJTkdfS0VZUztpZigiYm9vbGVhbiI9PXR5cGVvZiBsKXJldHVybiBsO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWlmKHZvaWQgMCE9PWNbbFthXV0pcmV0dXJuITA7cmV0dXJuITF9Y29uc3QgbGo9Y2xhc3MgdExle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhp'@;
put 'cy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExLHRoaXMucm93cz1bXSx0aGlzLmNvbHVtbnM9W10sdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5zZXR0aW5ncz17dXNlSGVhZGVyczohMH19YWRkUm93KGwsYSl7aWYodGhpcy5jb2x1bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRv'@;
put 'ZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMucm93cy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtyb3c6bH07dGhpcy5yb3dzLnB1c2goZCksdGhp'@;
put 'cy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLnRhYmxlLnRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlUm93'@;
put 'KGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWFkZENvbHVtbkhlYWRlcnNSb3cobCl7aWYobnVsbCE9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBkPXtyb3c6LTF9O3Ro'@;
put 'aXMucm93cy5wdXNoKGQpLHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSksdGhpcy5zYW1wbGVzPWwsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5j'@;
put 'b2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLmFwcGVuZENvbHVtbkhlYWRlcnNSb3coKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfX1hZGRD'@;
put 'b2x1bW4obCxhKXtpZih0aGlzLnJvd3MubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlIik7dGhpcy5jb2x1bW5zLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVt'@;
put 'ZW50LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e2NvbDpsfTt0aGlzLmNvbHVtbnMucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLmdldFNldHRpbmcoInVzZUhlYWRlcnMiKSYmbnVsbCE9PXRoaXMu'@;
put 'aG90LmdldENvbEhlYWRlcihsKSYmdGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIobCx0aGlzLnRhYmxlLnRoKSx0aGlzLnRhYmxlLnRCb2R5LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sKGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5m'@;
put 'cmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWdldEhlaWdodHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLERuKHRoaXMucm93cyxhPT57bChhLnJvdyxhbChhLnRhYmxlKS0xKX0pfWdldFdpZHRocyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRh'@;
put 'YmxlKCksRG4odGhpcy5jb2x1bW5zLGE9Pntjb25zdHt3aWR0aDpkfT1hLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYS5jb2wsTWF0aC5jZWlsKGQpKX0pfXNldFNldHRpbmdzKGwpe3RoaXMuc2V0dGluZ3M9bH1zZXRTZXR0aW5nKGwsYSl7dGhpcy5zZXR0aW5nc3x8KHRoaXMu'@;
put 'c2V0dGluZ3M9e30pLHRoaXMuc2V0dGluZ3NbbF09YX1nZXRTZXR0aW5ncygpe3JldHVybiB0aGlzLnNldHRpbmdzfWdldFNldHRpbmcobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3M/dGhpcy5zZXR0aW5nc1tsXTpudWxsfWNyZWF0ZUNvbEdyb3Vwc0NvbCgpe2NvbnN0IGw9dGhpcy5ob3Qucm9v'@;
put 'dERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZsLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudCgtMSkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGE9PntEbihhLnN0cmluZ3MsZD0+e2wuYXBwZW5kQ2hpbGQo'@;
put 'dGhpcy5jcmVhdGVDb2xFbGVtZW50KGQuY29sKSl9KX0pLGx9Y3JlYXRlUm93KGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkm'@;
put 'Jih0aGlzLmhvdC52aWV3LmFwcGVuZFJvd0hlYWRlcihsLGgpLGQuYXBwZW5kQ2hpbGQoaCkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGY9PntEbihmLnN0cmluZ3MsXz0+e2NvbnN0IFQ9Xy5jb2wsVz10aGlzLmhvdC5nZXRDZWxsTWV0YShsLFQpO1cuY29sPVQsVy5yb3c9bDtjb25zdCBpZT10'@;
put 'aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoVykscGU9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpO3BlLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLGllKHRoaXMuaG90LHBlLGwsVCx0aGlzLmhvdC5jb2xUb1Byb3AoVCksXy52YWx1ZSxXKSxkLmFwcGVuZENoaWxkKHBlKX0pfSksZH1hcHBl'@;
put 'bmRDb2x1bW5IZWFkZXJzUm93KCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZD1bXTtpZih0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkpe2NvbnN0IGg9bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbLTEsaF0pLGEuYXBw'@;
put 'ZW5kQ2hpbGQoaCl9dGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e0RuKGguc3RyaW5ncyxmPT57Y29uc3QgXz1mLmNvbCxUPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goW18sVF0pLGEuYXBwZW5kQ2hpbGQoVCl9KX0pLHRoaXMudGFibGUudEhlYWQuYXBwZW5kQ2hpbGQoYSksRG4oZCxo'@;
put 'PT57Y29uc3RbZixfXT1oO3RoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGYsXyl9KX1jcmVhdGVDb2wobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntEbihoLnN0'@;
put 'cmluZ3MsZj0+e2NvbnN0IF89Zi5yb3csVD10aGlzLmhvdC5nZXRDZWxsTWV0YShfLGwpO1QuY29sPWwsVC5yb3c9Xztjb25zdCBXPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihUKSxpZT1hLmNyZWF0ZUVsZW1lbnQoInRkIikscGU9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO2llLnNldEF0dHJp'@;
put 'YnV0ZSgiZ2hvc3QtdGFibGUiLDEpLFcodGhpcy5ob3QsaWUsXyxsLHRoaXMuaG90LmNvbFRvUHJvcChsKSxmLnZhbHVlLFQpLHBlLmFwcGVuZENoaWxkKGllKSxkLmFwcGVuZENoaWxkKHBlKX0pfSksZH1jbGVhbigpe3RoaXMucm93cy5sZW5ndGg9MCx0aGlzLnJvd3NbLTFdPXZvaWQgMCx0'@;
put 'aGlzLmNvbHVtbnMubGVuZ3RoPTAsdGhpcy5zYW1wbGVzJiZ0aGlzLnNhbXBsZXMuY2xlYXIoKSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnJlbW92ZVRhYmxlKCl9aW5qZWN0VGFibGUoKXt0aGlzLmluamVjdGVkfHwoKChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw'@;
put 'XT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMuaG90LnJvb3RFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lci5mcmFnbWVudCksdGhpcy5pbmplY3RlZD0hMCl9cmVtb3ZlVGFibGUoKXt0aGlzLmluamVjdGVkJiZ0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZSYm'@;
put 'KHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExKX1jcmVhdGVDb2xFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNy'@;
put 'ZWF0ZUVsZW1lbnQoImNvbCIpO3JldHVybiBhLnN0eWxlLndpZHRoPWAke3RoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCl9cHhgLGF9Y3JlYXRlVGFibGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9h'@;
put 'cmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksZj1hLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksXz1hLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksVD1hLmNyZWF0'@;
put 'ZUVsZW1lbnQoImNvbGdyb3VwIiksVz1hLmNyZWF0ZUVsZW1lbnQoInRyIiksaWU9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmlzVmVydGljYWwoKSYmaC5hcHBlbmRDaGlsZChUKSx0aGlzLmlzSG9yaXpvbnRhbCgpJiYoVy5hcHBlbmRDaGlsZChpZSksZi5hcHBlbmRDaGls'@;
put 'ZChXKSxoLnN0eWxlLnRhYmxlTGF5b3V0PSJhdXRvIixoLnN0eWxlLndpZHRoPSJhdXRvIiksaC5hcHBlbmRDaGlsZChmKSx0aGlzLmlzVmVydGljYWwoKSYmXy5hcHBlbmRDaGlsZChXKSxoLmFwcGVuZENoaWxkKF8pLHBpKGgsbCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCx0YWJs'@;
put 'ZTpoLHRIZWFkOmYsdEJvZHk6Xyxjb2xHcm91cDpULHRyOlcsdGg6aWV9fWNyZWF0ZUNvbnRhaW5lcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0'@;
put 'ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHBpKGgsYGh0R2hvc3RUYWJsZSBodEF1dG9TaXplICR7bC50cmltKCl9YCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCxjb250YWluZXI6aH19aXNWZXJ0aWNhbCgpe3JldHVybiEoIXRoaXMu'@;
put 'cm93cy5sZW5ndGh8fHRoaXMuY29sdW1ucy5sZW5ndGgpfWlzSG9yaXpvbnRhbCgpe3JldHVybiEoIXRoaXMuY29sdW1ucy5sZW5ndGh8fHRoaXMucm93cy5sZW5ndGgpfX07Y2xhc3MgY2p7c3RhdGljIGdldCBTQU1QTEVfQ09VTlQoKXtyZXR1cm4gM31jb25zdHJ1Y3RvcihsKXt0aGlzLnNh'@;
put 'bXBsZXM9bnVsbCx0aGlzLmRhdGFGYWN0b3J5PWwsdGhpcy5jdXN0b21TYW1wbGVDb3VudD1udWxsLHRoaXMuYWxsb3dEdXBsaWNhdGVzPSExfWdldFNhbXBsZUNvdW50KCl7cmV0dXJuIHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ/dGhpcy5jdXN0b21TYW1wbGVDb3VudDpjai5TQU1QTEVfQ09V'@;
put 'TlR9c2V0U2FtcGxlQ291bnQobCl7dGhpcy5jdXN0b21TYW1wbGVDb3VudD1sfXNldEFsbG93RHVwbGljYXRlcyhsKXt0aGlzLmFsbG93RHVwbGljYXRlcz1sfWdlbmVyYXRlUm93U2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygicm93IixhLGwpfWdlbmVyYXRlQ29s'@;
put 'dW1uU2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIixhLGwpfWdlbmVyYXRlU2FtcGxlcyhsLGEsZCl7Y29uc3QgaD1uZXcgTWFwLHtmcm9tOmYsdG86X309Im51bWJlciI9PXR5cGVvZiBkP3tmcm9tOmQsdG86ZH06ZDtyZXR1cm4gdm8oZixfLFQ9Pntjb25z'@;
put 'dCBXPXRoaXMuZ2VuZXJhdGVTYW1wbGUobCxhLFQpO2guc2V0KFQsVyl9KSxofWdlbmVyYXRlU2FtcGxlKGwsYSxkKXtpZigicm93IiE9PWwmJiJjb2wiIT09bCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNhbXBsZSB0eXBlIik7Y29uc3QgaD1uZXcgTWFwLGY9InJvdyI9PT1sPyJj'@;
put 'b2wiOiJyb3ciLF89W107cmV0dXJuIHZvKGEuZnJvbSxhLnRvLFQ9Pntjb25zdHt2YWx1ZTpXLGJ1bmRsZVNlZWQ6aWV9PSJyb3ciPT09bD90aGlzLmRhdGFGYWN0b3J5KGQsVCk6dGhpcy5kYXRhRmFjdG9yeShULGQpLHBlPSJzdHJpbmciPT10eXBlb2YgaWUmJmllLmxlbmd0aD4wO2xldCB3'@;
put 'ZTt3ZT1wZT9pZTp1cyhXKT9gJHtPYmplY3Qua2V5cyhXKS5sZW5ndGh9YDpBcnJheS5pc0FycmF5KFcpP2Ake1cubGVuZ3RofWA6YCR7X2woVykubGVuZ3RofWAsaC5oYXMod2UpfHxoLnNldCh3ZSx7bmVlZGVkOnRoaXMuZ2V0U2FtcGxlQ291bnQoKSxzdHJpbmdzOltdfSk7Y29uc3QgRWU9'@;
put 'aC5nZXQod2UpO0VlLm5lZWRlZCYmKCEoXy5pbmRleE9mKFcpPi0xKXx8dGhpcy5hbGxvd0R1cGxpY2F0ZXN8fHBlKSYmKEVlLnN0cmluZ3MucHVzaCh7dmFsdWU6VyxbZl06VH0pLF8ucHVzaChXKSxFZS5uZWVkZWQtPTEpfSksaH19Y29uc3QgcHJlPWNqO3NvLmdldFNpbmdsZXRvbigpLnJl'@;
put 'Z2lzdGVyKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKTtjb25zdCBreT0iYXV0b0NvbHVtblNpemUiLHVqPW5ldyBXZWFrTWFwO2NsYXNzIEF5IGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGt5fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJu'@;
put 'IDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx1ai5zZXQodGhpcyx7Y2Fj'@;
put 'aGVkQ29sdW1uSGVhZGVyczpbXX0pLHRoaXMuZ2hvc3RUYWJsZT1uZXcgbGoodGhpcy5ob3QpLHRoaXMuc2FtcGxlc0dlbmVyYXRvcj1uZXcgcHJlKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGQpO2xldCBmPSIiO2guc3Bhbm5lZHx8KGY9dGhpcy5ob3QuZ2V0RGF0'@;
put 'YUF0Q2VsbChhLGQpKTtsZXQgXz0iIjtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIikmJihfPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLF8saCxmKSkse3ZhbHVlOmYsYnVuZGxlU2VlZDpffX0pLHRoaXMuZmly'@;
put 'c3RDYWxjdWxhdGlvbj0hMCx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5tZWFzdXJlZENvbHVtbnM9MCx0aGlzLmNvbHVtbldpZHRoc01hcD1uZXcgV3AsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Db2x1bW5TaXplIix0aGlzLmNvbHVtbldpZHRoc01hcCks'@;
put 'dGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChhLGQsaCk9PnRoaXMub25CZWZvcmVDb2x1bW5SZXNpemUoYSxkLGgpKX1pc0VuYWJsZWQoKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClba3ldJiYhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5jb2xXaWR0aHN9ZW5h'@;
put 'YmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV07YSYmbnVsbCE9YS51c2VIZWFkZXJzJiZ0aGlzLmdob3N0VGFibGUuc2V0U2V0dGluZygidXNlSGVhZGVycyIsYS51c2VIZWFkZXJzKSx0aGlzLnNl'@;
put 'dFNhbXBsaW5nT3B0aW9ucygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixkPT50aGlzLm9uQmVmb3JlQ2hhbmdlKGQpKSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGQ9PnRoaXMub25BZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlKGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGQ9PnRoaXMub25CZWZvcmVWaWV3UmVuZGVyKGQpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdp'@;
put 'ZHRoIiwoZCxoKT0+dGhpcy5nZXRDb2x1bW5XaWR0aChoLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFu'@;
put 'Z2VkKCk7bC5sZW5ndGgmJih0aGlzLmNsZWFyQ2FjaGUobCksdGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCkpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUi'@;
put 'LChsLGEsZCk9PnRoaXMub25CZWZvcmVDb2x1bW5SZXNpemUobCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCl7aWYoIXRoaXMuaG90LmNvdW50Um93cygpKXJldHVybjtjb25zdCBhPXRoaXMuaG90LnJlbmRlckNhbGwsZD10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigp'@;
put 'LGg9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpOy0xPT09ZHx8LTE9PT1ofHx0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpkLHRvOmh9LHZvaWQgMCxhKX1jYWxjdWxhdGVDb2x1bW5zV2lkdGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4y'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVtYmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTphO3ZvKGguZnJvbSxoLnRvLF89PntsZXQgVD10aGlzLmhvdC50b1BoeXNpY2FsQ29s'@;
put 'dW1uKF8pO251bGw9PT1UJiYoVD1fKSwoZHx8bnVsbD09PXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChUKSYmIXRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhUKSkmJkRuKHRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXMoXyxm'@;
put 'KSxpZT0+e2xldFtwZSx3ZV09aWU7cmV0dXJuIHRoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW4ocGUsd2UpfSl9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aHMoKF8sVCk9Pntjb25z'@;
put 'dCBXPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oXyk7dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KFcsVCl9KX0sITApLHRoaXMubWVhc3VyZWRDb2x1bW5zPWgudG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9Y2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7bGV0'@;
put 'IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sYT0wO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCktMTtsZXQgaD1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCBm'@;
put 'PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBkeShoKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206YSx0bzpNYXRoLm1pbihhK0F5LkNBTENVTEFUSU9OX1NURVAsZCl9LGwpLGE9YStBeS5DQUxDVUxBVElPTl9TVEVQKzEsYTxkP2g9'@;
put 'eWsoZik6KGR5KGgpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0sXz10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7dGhpcy5maXJzdENhbGN1bGF0aW9uJiZfPj0wJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206'@;
put 'MCx0bzpffSxsKSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITEsYT1fKzEpLGE8ZD9mKCk6dGhpcy5pblByb2dyZXNzPSExfXNldFNhbXBsaW5nT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV0sYT1sJiZibChsLCJzYW1wbGluZ1JhdGlvIik/bC5zYW1wbGluZ1Jh'@;
put 'dGlvOnZvaWQgMCxkPWwmJmJsKGwsImFsbG93U2FtcGxlRHVwbGljYXRlcyIpP2wuYWxsb3dTYW1wbGVEdXBsaWNhdGVzOnZvaWQgMDthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksZCYmdGhpcy5zYW1wbGVzR2VuZXJh'@;
put 'dG9yLnNldEFsbG93RHVwbGljYXRlcyhkKX1yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe3RoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLmNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpKX1nZXRT'@;
put 'eW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV07bGV0IGE9QXkuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLTE7cmV0dXJuIHVzKGwpJiYoYT1sLnN5bmNMaW1pdCxsTihhKT9hPUlOKGQsYSk6'@;
put 'YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Q29sdW1uV2lkdGgobCl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxoPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2b2lk'@;
put 'IDA7cmV0dXJuIHZvaWQgMD09PWgmJihoPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkJiYibnVtYmVyIj09dHlwZW9mIGgmJihoPU1hdGgubWF4KGgsZVYuREVGQVVMVF9XSURUSCkpKSxofWdldEZpcnN0VmlzaWJs'@;
put 'ZUNvbHVtbigpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7aWYobC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5n'@;
put 'ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfWlmKGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpO2lmKC0xIT09YSlyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Vmlz'@;
put 'dWFsRnJvbVJlbmRlcmFibGVJbmRleChhKX1yZXR1cm4tMX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7aWYobC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4o'@;
put 'KTtpZigtMSE9PWEpcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9aWYobC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXtjb25zdCBhPWwud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKTtpZigt'@;
put 'MSE9PWEpcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9cmV0dXJuLTF9ZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldENvbEhlYWRlcigpLHtjYWNoZWRDb2x1bW5IZWFk'@;
put 'ZXJzOmF9PXVqLmdldCh0aGlzKTtyZXR1cm4gQWwobCwoaCxmLF8pPT57Y29uc3QgVD1hLmxlbmd0aDtyZXR1cm4oVC0xPF98fGFbX10hPT1mKSYmaC5wdXNoKF8pLFQtMTxfP2EucHVzaChmKTphW19dPWYsaH0sW10pfWNsZWFyQ2FjaGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107bC5sZW5ndGg/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntEbihsLGE9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6dGhpcy5jb2x1bW5XaWR0aHNNYXAuY2xlYXIoKX1p'@;
put 'c05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhXzEodGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkQ29sdW1ucyksbD0+bnVsbD09PWwpLmxlbmd0aH1vbkJlZm9yZVZpZXdSZW5kZXIoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lk'@;
put 'dGgoKSx0aGlzLmlzTmVlZFJlY2FsY3VsYXRlKCkmJiF0aGlzLmluUHJvZ3Jlc3MmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9b25BZnRlckxvYWREYXRhKCl7dGhpcy5ob3Qudmlldz90aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCk6c2V0VGltZW91dCgoKT0+e3Ro'@;
put 'aXMuaG90JiZ0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9LDApfW9uQmVmb3JlQ2hhbmdlKGwpe2NvbnN0IGE9Y3MobCxkPT57bGV0WyxoXT1kO3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHRoaXMuaG90LnByb3BUb0NvbChoKSl9KTt0aGlzLmNsZWFyQ2FjaGUo'@;
put 'QXJyYXkuZnJvbShuZXcgU2V0KGEpKSl9b25CZWZvcmVDb2x1bW5SZXNpemUobCxhLGQpe2xldCBoPWw7cmV0dXJuIGQmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aChhLHZvaWQgMCwhMCksaD10aGlzLmdldENvbHVtbldpZHRoKGEsdm9pZCAwLCExKSksaH1vbkFmdGVySW5pdCgpe3Vq'@;
put 'LmdldCh0aGlzKS5jYWNoZWRDb2x1bW5IZWFkZXJzPXRoaXMuaG90LmdldENvbEhlYWRlcigpfW9uQWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZShsKXtjb25zdCBkPWNzKF8xKGwsaD0+e3ZhciBmO3JldHVybiBLaShudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5j'@;
put 'b2wpfSksaD0+aC5hZGRyZXNzLmNvbCk7dGhpcy5jbGVhckNhY2hlKEFycmF5LmZyb20obmV3IFNldChkKSkpfWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IERnPXtob3Jpem9udGFsOiJob3Jpem9udGFsIix2ZXJ0aWNhbDoidmVydGlj'@;
put 'YWwifTtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b2ZpbGxSYW5nZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVBdXRvZmlsbCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckF1dG9maWxsIik7Y29uc3QgYUxlPVsiZmlsbEhhbmRs'@;
put 'ZSJdO2NsYXNzIHVMZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJhdXRvZmlsbCJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bImF1dG9maWxsIiwuLi5hTGVdfWNvbnN0cnVj'@;
put 'dG9yKGwpe3N1cGVyKGwpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITEsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlPSExLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5kaXJlY3Rpb25z'@;
put 'PVtdLHRoaXMuYXV0b0luc2VydFJvdz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMubWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRIb29rKCJh'@;
put 'ZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+dGhpcy5vbkFmdGVyQ2VsbENvcm5lck1vdXNlRG93bihsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixsPT50aGlzLm9uQ2VsbENvcm5lckRibENsaWNrKGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2Vs'@;
put 'bE1vdXNlT3ZlciIsKGwsYSk9PnRoaXMub25CZWZvcmVDZWxsTW91c2VPdmVyKGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7'@;
put 'dGhpcy5jbGVhck1hcHBlZFNldHRpbmdzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFNlbGVjdGlvbkRhdGEoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJv'@;
put 'dHRvbUVuZENvcm5lcigpLF89dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLFt7c3RhcnRSb3c6YSxzdGFydENvbDpkLGVuZFJvdzpoLGVuZENvbDpmfV0pLFQ9W10sVz1bXSxpZT1bXTtyZXR1cm4gRG4oXyxwZT0+e2ZvcihsZXQgd2U9cGUuc3RhcnRSb3c7d2U8PXBl'@;
put 'LmVuZFJvdzt3ZSs9MSktMT09PVQuaW5kZXhPZih3ZSkmJlQucHVzaCh3ZSk7Zm9yKGxldCB3ZT1wZS5zdGFydENvbDt3ZTw9cGUuZW5kQ29sO3dlKz0xKS0xPT09Vy5pbmRleE9mKHdlKSYmVy5wdXNoKHdlKX0pLERuKFQscGU9Pntjb25zdCB3ZT1bXTtEbihXLEVlPT57d2UucHVzaCh0aGlz'@;
put 'LmhvdC5nZXRDb3B5YWJsZURhdGEocGUsRWUpKX0pLGllLnB1c2god2UpfSksaWV9ZmlsbEluKCl7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0W2wsYSxkLGhdPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0'@;
put 'RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksXz1mLmdldFRvcFN0YXJ0Q29ybmVyKCksVD1mLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCk7Y29uc3QgVz1bXy5yb3csXy5jb2ws'@;
put 'VC5yb3csVC5jb2xdLGllPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixbTWF0aC5taW4oXy5yb3csbCksTWF0aC5taW4oXy5jb2wsYSksTWF0aC5tYXgoVC5yb3csZCksTWF0aC5tYXgoVC5jb2wsaCldLFcpLHtkaXJlY3Rpb25PZkRyYWc6cGUsc3RhcnRPZkRyYWdD'@;
put 'b29yZHM6d2UsZW5kT2ZEcmFnQ29vcmRzOkVlfT1mdW5jdGlvbiBpTGUoYyxsLGEpe2xldCBkLGgsZjtyZXR1cm4gbFswXT09PWNbMF0mJmxbMV08Y1sxXT8oZj0ibGVmdCIsZD1hKGxbMF0sbFsxXSksaD1hKGxbMl0sY1sxXS0xKSk6bFsyXT09PWNbMl0mJmxbMF09PT1jWzBdJiZsWzNdPmNb'@;
put 'M10/KGY9InJpZ2h0IixkPWEobFswXSxjWzNdKzEpLGg9YShsWzJdLGxbM10pKTpsWzBdPGNbMF0mJmxbMV09PT1jWzFdPyhmPSJ1cCIsZD1hKGxbMF0sbFsxXSksaD1hKGNbMF0tMSxsWzNdKSk6bFsyXT5jWzJdJiZsWzFdPT09Y1sxXSYmKGY9ImRvd24iLGQ9YShjWzJdKzEsbFsxXSksaD1h'@;
put 'KGxbMl0sbFszXSkpLGQmJmQubm9ybWFsaXplKCksaCYmaC5ub3JtYWxpemUoKSx7ZGlyZWN0aW9uT2ZEcmFnOmYsc3RhcnRPZkRyYWdDb29yZHM6ZCxlbmRPZkRyYWdDb29yZHM6aH19KFcsaWUsKFplLGl0KT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoWmUsaXQpKTtpZih3ZSYmd2Uu'@;
put 'cm93Pi0xJiZ3ZS5jb2w+LTEpe2NvbnN0IFplPXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLGl0PWYuY2xvbmUoKSxldD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHdlLHdlLEVlKSx5dD10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQXV0b2ZpbGwiLFplLGl0LGV0LHBlKTtpZighMT09PXl0'@;
put 'KXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLHRoaXMuaG90LnJlbmRlcigpLCExO2xldCBFdD15dDtjb25zdCBTdD15dDtpZihbInVwIiwibGVmdCJdLmluZGV4T2YocGUpPi0xJiYoMSE9PVN0Lmxlbmd0aHx8MCE9PVN0WzBdLmxlbmd0aCkp'@;
put 'aWYoRXQ9W10sInVwIj09PXBlKXtjb25zdCBKdD1FZS5yb3ctd2Uucm93KzEsbm49SnQlU3QubGVuZ3RoO2ZvcihsZXQgdm49MDt2bjxKdDt2bisrKUV0LnB1c2goU3RbKHZuKyhTdC5sZW5ndGgtbm4pKSVTdC5sZW5ndGhdKX1lbHNle2NvbnN0IEp0PUVlLmNvbC13ZS5jb2wrMSxubj1KdCVT'@;
put 'dFswXS5sZW5ndGg7Zm9yKGxldCB2bj0wO3ZuPFN0Lmxlbmd0aDt2bisrKXtFdC5wdXNoKFtdKTtmb3IobGV0IE5uPTA7Tm48SnQ7Tm4rKylFdFt2bl0ucHVzaChTdFt2bl1bKE5uKyhTdFt2bl0ubGVuZ3RoLW5uKSklU3Rbdm5dLmxlbmd0aF0pfX10aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJh'@;
put 'eSh3ZS5yb3csd2UuY29sLEV0LEVlLnJvdyxFZS5jb2wsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCxudWxsKSx0aGlzLnNldFNlbGVjdGlvbihpZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQXV0b2ZpbGwiLEV0LGl0LGV0LHBlKSx0aGlzLmhvdC5yZW5kZXIoKX1lbHNlIHRoaXMuaG90'@;
put 'Ll9yZWZyZXNoQm9yZGVycygpO3JldHVybiEwfXJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChsKXtyZXR1cm4gbC5yb3c8MCYmKGwucm93PTApLGwuY29sPDAmJihsLmNvbD0wKSxsfWdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZUxhc3QoKSxkPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IGg9bDtpZih0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoRGcudmVydGljYWwpJiZ0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoRGcuaG9yaXpvbnRhbCkpe2NvbnN0IGY9YS5nZXRUb3BTdGFydENvcm5lcigpOyhkLmNv'@;
put 'bDw9bC5jb2x8fGYuY29sPj1sLmNvbCkmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKSksKGQucm93PGwucm93fHxmLnJvdz5sLnJvdykmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKSl9ZWxzZSBpZih0aGlzLmRpcmVjdGlvbnMu'@;
put 'aW5jbHVkZXMoRGcudmVydGljYWwpKWg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpO2Vsc2V7aWYoIXRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhEZy5ob3Jpem9udGFsKSlyZXR1cm47aD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCl9cmV0'@;
put 'dXJuIHRoaXMucmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGgpfXNob3dCb3JkZXIobCl7Y29uc3QgYT10aGlzLmdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpO2EmJnRoaXMucmVkcmF3Qm9yZGVycyhhKX1hZGRSb3coKXt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57'@;
put 'dGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLHZvaWQgMCwxLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGApLHRoaXMuYWRkaW5nU3RhcnRlZD0hMX0sMjAwKX1hZGROZXdSb3dJZk5lZWRlZCgpe2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0Vt'@;
put 'cHR5KCkmJiExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmF1dG9JbnNlcnRSb3cpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZD10aGlzLmhvdC5jb3VudFJv'@;
put 'd3MoKTtsWzJdPGQtMSYmYVsyXT09PWQtMSYmKHRoaXMuYWRkaW5nU3RhcnRlZD0hMCx0aGlzLmFkZFJvdygpKX19Z2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0RGF0YSgpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGg7Zm9yKGxl'@;
put 'dCBmPWxbMl0rMTtmPGQ7ZisrKXtmb3IobGV0IFc9bFsxXTtXPD1sWzNdO1crKylpZihhW2ZdW1ddKXJldHVybi0xOyhhW2ZdW2xbMV0tMV18fGFbZl1bbFszXSsxXSkmJihoPWYpfXJldHVybiBofWFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKXt0aGlz'@;
put 'LmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxsWzNdKSkuY29tbWl0KCl9c2V0U2VsZWN0aW9uKGwpe3RoaXMuaG90LnNlbGVj'@;
put 'dENlbGwoLi4uY3MobCxhPT5NYXRoLm1heChhLDApKSwhMSwhMSl9c2VsZWN0QWRqYWNlbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCk7cmV0dXJuLTEhPT1hJiZ2b2lkIDAhPT1hJiYodGhp'@;
put 'cy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSksITApfXJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKX1yZWRyYXdC'@;
put 'b3JkZXJzKGwpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZnJvbSkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8pLmFkZChsKS5jb21taXQoKSx0aGlzLmhvdC52'@;
put 'aWV3LnJlbmRlcigpfWdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShsKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6YX09dGhpcy5ob3Qucm9vdERvY3VtZW50LGQ9S2wodGhpcy5ob3QudGFibGUpLnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldHx8YS5zY3JvbGxUb3ApK2Fs'@;
put 'KHRoaXMuaG90LnRhYmxlKSxoPUtsKHRoaXMuaG90LnRhYmxlKS5sZWZ0LSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0fHxhLnNjcm9sbExlZnQpK3dhKHRoaXMuaG90LnRhYmxlKTtyZXR1cm4gbC5jbGllbnRZPmQmJmwuY2xpZW50WDw9aH1yZWdpc3RlckV2ZW50cygpe2NvbnN0'@;
put 'e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PnRo'@;
put 'aXMub25Nb3VzZU1vdmUoYSkpfW9uQ2VsbENvcm5lckRibENsaWNrKCl7dGhpcy5zZWxlY3RBZGphY2VudCgpJiZ0aGlzLmZpbGxJbigpfW9uQWZ0ZXJDZWxsQ29ybmVyTW91c2VEb3duKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MSx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMH1v'@;
put 'bkJlZm9yZUNlbGxNb3VzZU92ZXIobCl7dGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXImJiF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCkmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMrPTEsdGhpcy5zaG93Qm9yZGVyKGwpLHRoaXMuYWRkTmV3'@;
put 'Um93SWZOZWVkZWQoKSl9b25Nb3VzZVVwKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4xJiZ0aGlzLmZpbGxJbigpLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEpfW9uTW91c2VNb3ZlKGwp'@;
put 'e2NvbnN0IGE9dGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCk7ITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjAmJmE/KHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMCx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITApOnRoaXMubW91c2VEcmFnT3V0'@;
put 'c2lkZT0hMSx0aGlzLm1vdXNlRHJhZ091dHNpZGUmJnRoaXMuYXV0b0luc2VydFJvdyYmdGhpcy5hZGRSb3coKX1jbGVhck1hcHBlZFNldHRpbmdzKCl7dGhpcy5kaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuYXV0b0luc2VydFJvdz0hMX1tYXBTZXR0aW5ncygpe2NvbnN0IGw9ZnVuY3Rpb24g'@;
put 'b0xlKGMpe2NvbnN0IGw9e307cmV0dXJuITA9PT1jPyhsLmRpcmVjdGlvbnM9T2JqZWN0LmtleXMoRGcpLGwuYXV0b0luc2VydFJvdz0hMCk6dXMoYyk/KGwuYXV0b0luc2VydFJvdz0hIUtpKGMuYXV0b0luc2VydFJvdykmJmMuZGlyZWN0aW9uIT09RGcuaG9yaXpvbnRhbCYmYy5hdXRvSW5z'@;
put 'ZXJ0Um93LGwuZGlyZWN0aW9ucz1LaShjLmRpcmVjdGlvbik/W2MuZGlyZWN0aW9uXTpPYmplY3Qua2V5cyhEZykpOiJzdHJpbmciPT10eXBlb2YgYz8obC5kaXJlY3Rpb25zPVtjXSxsLmF1dG9JbnNlcnRSb3c9ITApOihsLmRpcmVjdGlvbnM9W10sbC5hdXRvSW5zZXJ0Um93PSExKSxsfSh0'@;
put 'aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGUpO3RoaXMuZGlyZWN0aW9ucz1sLmRpcmVjdGlvbnMsdGhpcy5hdXRvSW5zZXJ0Um93PWwuYXV0b0luc2VydFJvd31kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBHaz0iYXV0b1Jvd1NpemUiO2NsYXNzIFR5IGV4dGVuZHMg'@;
put 'WnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEdrfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDQwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lO'@;
put 'Q19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5yb3dIZWlnaHRzTWFwPXZvaWQgMCx0aGlzLmhlYWRlckhlaWdodD1udWxsLHRoaXMuZ2hvc3RUYWJsZT1uZXcgbGoodGhpcy5ob3QpLHRoaXMuc2FtcGxlc0dlbmVyYXRvcj1uZXcg'@;
put 'cHJlKChhLGQpPT57bGV0IGg7cmV0dXJuIGE+PTA/aD10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCk6LTE9PT1hJiYoaD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoZCkpLHt2YWx1ZTpofX0pLHRoaXMuZmlyc3RDYWxjdWxhdGlvbj0hMCx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5tZWFzdXJl'@;
put 'ZFJvd3M9MCx0aGlzLnJvd0hlaWdodHNNYXA9bmV3IFdwLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGEsZCxoKT0+dGhpcy5vbkJlZm9yZVJvd1Jlc2l6'@;
put 'ZShhLGQsaCkpfWlzRW5hYmxlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHa107cmV0dXJuITA9PT1sfHx1cyhsKX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0U2FtcGxpbmdPcHRpb25zKCksdGhpcy5hZGRIb29rKCJhZnRlckxv'@;
put 'YWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLGE9PnRoaXMub25CZWZvcmVDaGFuZ2UoYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5y'@;
put 'ZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixhPT50aGlzLm9uQmVmb3JlVmlld1JlbmRlcihhKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChhLGQpPT50aGlzLmdldFJvd0hlaWdodChkLGEpKSx0aGlzLmFkZEhvb2so'@;
put 'Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsKCk9PnRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVS'@;
put 'b3dSZXNpemUiLChsLGEsZCk9PnRoaXMub25CZWZvcmVSb3dSZXNpemUobCxhLGQpKX1jYWxjdWxhdGVSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCkt'@;
put 'MX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVt'@;
put 'YmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtpZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBfPXRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoLTEsZik7dGhpcy5n'@;
put 'aG9zdFRhYmxlLmFkZENvbHVtbkhlYWRlcnNSb3coXy5nZXQoLTEpKX12byhoLmZyb20saC50byxfPT57KGR8fG51bGw9PT10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KF8pKSYmRG4odGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyhfLGYpLFc9Pnts'@;
put 'ZXRbaWUscGVdPVc7cmV0dXJuIHRoaXMuZ2hvc3RUYWJsZS5hZGRSb3coaWUscGUpfSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKChfLFQpPT57XzwwP3RoaXMuaGVhZGVySGVp'@;
put 'Z2h0PVQ6dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KF8pLFQpfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPTA7Y29uc3QgZD10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldCBoPW51bGw7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IGY9KCk9PntpZigh'@;
put 'dGhpcy5ob3QpcmV0dXJuIGR5KGgpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206YSx0bzpNYXRoLm1pbihhK1R5LkNBTENVTEFUSU9OX1NURVAsZCl9LGwpLGE9YStUeS5DQUxDVUxBVElPTl9TVEVQKzEsYTxkP2g9eWsoZik6KGR5KGgp'@;
put 'LHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVy'@;
put 'bGF5LmNsb25lLmRyYXcoKSl9LF89dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO3RoaXMuZmlyc3RDYWxjdWxhdGlvbiYmXz49MCYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTowLHRvOl99LGwpLHRoaXMuZmlyc3RDYWxjdWxhdGlvbj0hMSxhPV8rMSksYTxkP2YoKToo'@;
put 'dGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCExKSl9c2V0U2FtcGxpbmdPcHRpb25zKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0drXSxhPWwmJmJsKGwsInNhbXBsaW5nUmF0aW8iKT9sLnNhbXBsaW5nUmF0aW86dm9pZCAwLGQ9'@;
put 'bCYmYmwobCwiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIik/bC5hbGxvd1NhbXBsZUR1cGxpY2F0ZXM6dm9pZCAwO2EmJiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSxkJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dE'@;
put 'dXBsaWNhdGVzKGQpfXJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe2U3KHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEFCTEUpJiYodGhpcy5jbGVhckNhY2hlKCksdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlz'@;
put 'LmhvdC5nZXRTZXR0aW5ncygpW0drXTtsZXQgYT1UeS5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCktMTtyZXR1cm4gdXMobCkmJihhPWwuc3luY0xpbWl0LGxOKGEpP2E9SU4oZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRSb3dIZWlnaHQo'@;
put 'bCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZvaWQgMDtjb25zdCBkPWw8MD90aGlzLmhlYWRlckhlaWdodDp0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpO2xl'@;
put 'dCBoPWE7cmV0dXJuIG51bGwhPT1kJiZkPihhfHwwKSYmKGg9ZCksaH1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWFkZXJIZWlnaHR9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dDtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNp'@;
put 'YmxlQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCk6bC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yP2wud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCk6LTF9Z2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O3JldHVy'@;
put 'biBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yP2wud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpOmwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCk6LTF9Y2xlYXJDYWNoZSgpe3RoaXMuaGVhZGVySGVpZ2h0'@;
put 'PW51bGwsdGhpcy5yb3dIZWlnaHRzTWFwLmluaXQoKX1jbGVhckNhY2hlQnlSYW5nZShsKXtjb25zdHtmcm9tOmEsdG86ZH09Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bDt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3ZvKE1hdGgubWluKGEsZCksTWF0aC5tYXgoYSxk'@;
put 'KSxoPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLG51bGwpfSl9LCEwKX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhXzEodGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZFJvd3MpLGw9Pm51bGw9PT1sKS5sZW5ndGh9'@;
put 'b25CZWZvcmVWaWV3UmVuZGVyKCl7Y29uc3QgbD10aGlzLmhvdC5yZW5kZXJDYWxsLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sZD10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGg9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO2lmKC0xIT09ZCYmLTEhPT1oKXtp'@;
put 'Zih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206ZCx0bzpofSx2b2lkIDAsbCksYSl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKS0xO3RoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpmLWEsdG86Zn0pfXRoaXMuaXNOZWVkUmVjYWxjdWxhdGUoKSYmIXRoaXMuaW5Qcm9n'@;
put 'cmVzcyYmdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9fW9uQmVmb3JlUm93TW92ZShsLGEpe3RoaXMuY2xlYXJDYWNoZUJ5UmFuZ2Uoe2Zyb206bCx0bzphfSksdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9b25CZWZvcmVSb3dSZXNpemUobCxhLGQpe2xldCBoPWw7cmV0dXJu'@;
put 'IGQmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoYSx2b2lkIDAsITApLGg9dGhpcy5nZXRSb3dIZWlnaHQoYSkpLGh9b25BZnRlckxvYWREYXRhKCl7dGhpcy5ob3Qudmlldz90aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpOnNldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdCYmdGhpcy5y'@;
put 'ZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX0sMCl9b25CZWZvcmVDaGFuZ2UobCl7bGV0IGE9bnVsbDsxPT09bC5sZW5ndGg/YT1sWzBdWzBdOmwubGVuZ3RoPjEmJihhPXtmcm9tOmxbMF1bMF0sdG86bFtsLmxlbmd0aC0xXVswXX0pLG51bGwhPT1hJiZ0aGlzLmNsZWFyQ2FjaGVCeVJhbmdl'@;
put 'KGEpfWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IG1yZT1uZXcgTWFwKFtbImluZGV4ZXNTZXF1ZW5jZSIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpjVixnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpneX1dLFsicGh5c2ljYWxseUlu'@;
put 'ZGV4ZWQiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6aFYsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6ZlZ9XV0pLHZyZT1jPT57aWYoITE9PT1tcmUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgQWx0ZXIgc3RyYXRlZ3kgd2l0aCBJRCAnJHtjfScgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJu'@;
put 'IG1yZS5nZXQoYyl9LHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6ZkxlLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOnBMZX09dnJlKCJwaHlzaWNhbGx5SW5kZXhlZCIpLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6dkxlLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOl9MZX09dnJlKCJwaHlz'@;
put 'aWNhbGx5SW5kZXhlZCIpLGRqPSJiaW5kUm93c1dpdGhIZWFkZXJzIixTTGU9bmV3IE1hcChbWyJsb29zZSIsY2xhc3MgZ0xlIGV4dGVuZHMgRWd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPWRWKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4'@;
put 'ZWRWYWx1ZXM9ZkxlKGQsbCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9cExlKHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9dVYoYSxsKSxzdXBlci5yZW1vdmUobCl9fV0sWyJzdHJpY3QiLGNsYXNzIGJM'@;
put 'ZSBleHRlbmRzIEVne2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPXZMZSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCxhLChkLGgpPT50aGlzLmdldE5leHRWYWx1ZShoKSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhl'@;
put 'ZFZhbHVlcz1fTGUodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXROZXh0VmFsdWUobCl7cmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZ2V0VmFsdWVzKCkpKzErbH19XV0pO2NsYXNzIE1MZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBk'@;
put 'an1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5oZWFkZXJJbmRleGVzPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RqXX1lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJs'@;
put 'ZWQpcmV0dXJuO2xldCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbZGpdOyJzdHJpbmciIT10eXBlb2YgbCYmKGw9Imxvb3NlIik7Y29uc3QgYT1TTGUuZ2V0KGwpO3RoaXMuaGVhZGVySW5kZXhlcz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVh'@;
put 'ZGVycyIsbmV3IGEpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyIixkPT50aGlzLm9uTW9kaWZ5Um93SGVhZGVyKGQpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVh'@;
put 'ZGVycyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1vbk1vZGlmeVJvd0hlYWRlcihsKXtyZXR1cm4gdGhpcy5oZWFkZXJJbmRleGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBoaihjLGwsYSl7'@;
put 'cmV0dXJuIGw9ZnVuY3Rpb24ga0xlKGMpe3ZhciBsPWZ1bmN0aW9uIEFMZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo'@;
put 'Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5'@;
put 'cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIF9yZShjLGwpe3JldHVybiBmdW5jdGlvbiBUTGUoYyxsKXtyZXR1'@;
put 'cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLGJyZShjLGwsImdldCIpKX1mdW5jdGlvbiBmaihjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIERMZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0'@;
put 'ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsYnJlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBicmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBu'@;
put 'b24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9Y29uc3QgcGo9ImNvbGxhcHNpYmxlQ29sdW1ucyIsTExlPVsibmVzdGVkSGVhZGVycyJdLEM3PSJjb2xsYXBzaWJsZUluZGljYXRvciIseXJlPW5ldyBNYXAoW1siY29sbGFwc2UiLHtoaWRlQ29sdW1uOiEwLGJlZm9yZUhvb2s6ImJlZm9y'@;
put 'ZUNvbHVtbkNvbGxhcHNlIixhZnRlckhvb2s6ImFmdGVyQ29sdW1uQ29sbGFwc2UifV0sWyJleHBhbmQiLHtoaWRlQ29sdW1uOiExLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkV4cGFuZCJ9XV0pO3ZhciBTNz1uZXcgV2Vha01hcDtjbGFz'@;
put 'cyBSTGUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksaGoodGhpcywibmVzdGVkSGVhZGVyc1BsdWdpbiIsbnVsbCksaGoodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgbGwodGhpcykpLGhqKHRoaXMsImhlYWRlclN0YXRlTWFuYWdlciIsbnVsbCksZnVuY3Rp'@;
put 'b24geExlKGMsbCxhKXsoZnVuY3Rpb24gRUxlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxTNyx7d3JpdGFi'@;
put 'bGU6ITAsdmFsdWU6bnVsbH0pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyOTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOk5lc3RlZEhlYWRlcnMiXX1zdGF0aWMgZ2V0IFNFVFRJ'@;
put 'TkdfS0VZUygpe3JldHVybltwaiwuLi5MTGVdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwal19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGlu'@;
put 'Z3MoKTthfHxHYSgiWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuIiksZmoodGhpcyxTNyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRo'@;
put 'aXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29r'@;
put 'KCJpbml0IiwoKT0+dGhpcy5vbkluaXQoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFm'@;
put 'dGVyR2V0Q29sSGVhZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsKGQsaCxmKT0+dGhpcy5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihkLGgsZikpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1'@;
put 'Z2luKCl7aWYodGhpcy5ob3Qudmlldyl7aWYoIXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbi5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzKXtjb25zdHtjb2xsYXBzaWJsZUNvbHVtbnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsiYm9vbGVhbiI9PXR5cGVvZiBsP3RoaXMuaGVhZGVyU3Rh'@;
put 'dGVNYW5hZ2VyLm1hcFN0YXRlKGE9Pih7Y29sbGFwc2libGU6YS5vcmlnQ29sc3Bhbj4xfSkpOkFycmF5LmlzQXJyYXkobCkmJih0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZSgoKT0+KHtjb2xsYXBzaWJsZTohMX0pKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tZXJnZVN0YXRl'@;
put 'V2l0aChsKSl9c3VwZXIudXBkYXRlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksZmoodGhpcyxTNyxudWxsKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49bnVsbCx0aGlzLmNsZWFyQnV0'@;
put 'dG9ucygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1jbGVhckJ1dHRvbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5USEVBRCxk'@;
put 'PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGg9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENv'@;
put 'cm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsLGY9ZnVuY3Rpb24oXyl7XyYmXy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF8pfTt2bygwLGwtMSxfPT57Y29uc3QgVD1hLmNoaWxkTm9kZXNbX10sVz1kLmNoaWxkTm9kZXNbX10saWU9aD9oLmNoaWxkTm9kZXNbX106bnVsbDt2'@;
put 'bygwLFQuY2hpbGROb2Rlcy5sZW5ndGgtMSxwZT0+e2xldCB3ZT1ULmNoaWxkTm9kZXNbcGVdLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApO2Yod2UpLFcmJlcuY2hpbGROb2Rlc1twZV0mJih3ZT1XLmNoaWxkTm9kZXNbcGVdLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApLGYod2UpKSxoJiZpZSYm'@;
put 'aWUuY2hpbGROb2Rlc1twZV0mJih3ZT1pZS5jaGlsZE5vZGVzW3BlXS5xdWVyeVNlbGVjdG9yKGAuJHtDN31gKSxmKHdlKSl9KX0pfWV4cGFuZFNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKX1jb2xsYXBzZVNlY3Rpb24obCl7dGhpcy50b2dn'@;
put 'bGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpfXRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMobCl7Y29uc3QgYT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBOb2RlcyhkPT57Y29uc3R7Y29sbGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGhlYWRlckxldmVsOl8sY29s'@;
put 'dW1uSW5kZXg6VCxpc0NvbGxhcHNlZDpXfT1kO2lmKCEwPT09aCYmZj4xJiYoVyYmImV4cGFuZCI9PT1sfHwhVyYmImNvbGxhcHNlIj09PWwpKXJldHVybntyb3c6dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubGV2ZWxUb1Jvd0Nvb3JkcyhfKSxjb2w6VH19KTt0aGlzLnRvZ2dsZUNvbGxhcHNp'@;
put 'YmxlU2VjdGlvbihhLGwpfWNvbGxhcHNlQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJjb2xsYXBzZSIpfWV4cGFuZEFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiZXhwYW5kIil9dG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGwsYSl7aWYo'@;
put 'IXlyZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke2F9KS5gKTtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm47Y29uc3QgZD1fMShsLEVlPT57bGV0e3JvdzpaZX09RWU7cmV0dXJuIFplPDB9KTtsZXQgaD1kLmxlbmd0aD4wO0RuKGQs'@;
put 'RWU9Pnt2YXIgWmU7bGV0e3JvdzppdCxjb2w6ZXR9PUVlO2NvbnN0e2NvbGxhcHNpYmxlOnl0LGlzQ29sbGFwc2VkOkV0fT1udWxsIT09KFplPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKGl0LGV0KSkmJnZvaWQgMCE9PVplP1plOnt9O2lmKCF5dHx8RXQmJiJj'@;
put 'b2xsYXBzZSI9PT1hfHwhRXQmJiJleHBhbmQiPT09YSlyZXR1cm4gaD0hMSwhMX0pO2NvbnN0IGY9W10sXz1bXTtoJiZEbihkLEVlPT57bGV0e3JvdzpaZSxjb2w6aXR9PUVlO2NvbnN0e2NvbHNwYW5Db21wZW5zYXRpb246ZXQsYWZmZWN0ZWRDb2x1bW5zOnl0LHJvbGxiYWNrTW9kaWZpY2F0'@;
put 'aW9uOkV0fT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihhLFplLGl0KTtldD4wJiYoXy5wdXNoKC4uLnl0KSxmLnB1c2goRXQpKX0pO2NvbnN0IFQ9dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCk7bGV0IFc9W107ImNvbGxhcHNlIj09PWE/Vz1yTihb'@;
put 'Li4uVCwuLi5fXSk6ImV4cGFuZCI9PT1hJiYoVz1fMShULEVlPT4hXy5pbmNsdWRlcyhFZSkpKTtjb25zdCBpZT15cmUuZ2V0KGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoaWUuYmVmb3JlSG9vayxULFcsaCkpcmV0dXJuIHZvaWQgRG4oZixFZT0+e0VlKCl9KTt0aGlzLmhvdC5iYXRj'@;
put 'aEV4ZWN1dGlvbigoKT0+e0RuKF8sRWU9PntfcmUodGhpcyxTNykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRWUpLGllLmhpZGVDb2x1bW4pfSl9LCEwKTtjb25zdCB3ZT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGghPT1ULmxlbmd0aDt0aGlz'@;
put 'LmhvdC5ydW5Ib29rcyhpZS5hZnRlckhvb2ssVCxXLGgsd2UpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX1nZXRDb2xsYXBzZWRDb2x1bW5zKCl7cmV0dXJuIF9yZSh0aGlzLFM3KS5nZXRIaWRkZW5JbmRleGVzKCl9b25BZnRlckdldENv'@;
put 'bEhlYWRlcihsLGEsZCl7dmFyIGg7Y29uc3R7Y29sbGFwc2libGU6ZixvcmlnQ29sc3BhbjpfLGlzQ29sbGFwc2VkOlR9PW51bGwhPT0oaD10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhkLGwpKSYmdm9pZCAwIT09aD9oOnt9LFc9ZiYmXz4xJiZsPj10aGlzLmhv'@;
put 'dC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2xldCBpZT1hLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApO3ZhciBwZTtXPyhpZXx8KGllPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxwaShpZSxDNyksYS5xdWVyeVNlbGVjdG9yKCJkaXY6Zmlyc3Qt'@;
put 'Y2hpbGQiKS5hcHBlbmRDaGlsZChpZSkpLFdvKGllLFsiY29sbGFwc2VkIiwiZXhwYW5kZWQiXSksVD8ocGkoaWUsImNvbGxhcHNlZCIpLGpwKGllLCIrIikpOihwaShpZSwiZXhwYW5kZWQiKSxqcChpZSwiLSIpKSk6bnVsbD09PShwZT1pZSl8fHZvaWQgMD09PXBlfHxwZS5yZW1vdmUoKX1v'@;
put 'bkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEpe0JvKGwudGFyZ2V0LEM3KSYmKEJvKGwudGFyZ2V0LCJleHBhbmRlZCIpPyh0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQobC50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbYV0sImNvbGxhcHNlIikp'@;
put 'OkJvKGwudGFyZ2V0LCJjb2xsYXBzZWQiKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChsLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFthXSwiZXhwYW5kIikpLHYyKGwpKX1vbkluaXQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfW9uQWZ0ZXJM'@;
put 'b2FkRGF0YShsLGEpe2F8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZGVzdHJveSgpe2ZqKHRoaXMsUzcsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBPTGU9WyJzb3J0RW1wdHlDZWxscyIsImluZGljYXRvciIsImhlYWRlckFjdGlvbiIsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiXTtjbGFz'@;
put 'cyBOTGV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1sLHRoaXMuc29ydGluZ1N0YXRlcz1uZXcgRWssdGhpcy5zb3J0RW1wdHlDZWxscz0hMSx0aGlzLmluZGljYXRvcj0hMCx0aGlzLmhlYWRlckFjdGlvbj0hMCx0aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dm9pZCAwLHRoaXMubWFw'@;
put 'TmFtZT1hLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGEsdGhpcy5zb3J0aW5nU3RhdGVzKX11cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKXt1cyhsKSYmZHMobCwoYSxkKT0+e09MZS5pbmNsdWRlcyhkKSYmKHRoaXNbZF09YSl9KX1nZXRBbGxDb2x1bW5zUHJv'@;
put 'cGVydGllcygpe2NvbnN0IGw9e3NvcnRFbXB0eUNlbGxzOnRoaXMuc29ydEVtcHR5Q2VsbHMsaW5kaWNhdG9yOnRoaXMuaW5kaWNhdG9yLGhlYWRlckFjdGlvbjp0aGlzLmhlYWRlckFjdGlvbn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSYm'@;
put 'KGwuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT10aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpLGx9Z2V0U29ydE9yZGVyT2ZDb2x1bW4obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4o'@;
put 'bCkpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zb3J0T3JkZXJ9Z2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpe3JldHVybiBsPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksdGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5maW5kSW5kZXgoYT0+e2xldFtkXT1hO3JldHVy'@;
put 'biBkPT09bH0pfWdldE51bWJlck9mU29ydGVkQ29sdW1ucygpe3JldHVybiB0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0TGVuZ3RoKCl9aXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl9aXNDb2x1bW5Tb3J0ZWQobCl7'@;
put 'cmV0dXJuIHVzKHRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSkpfWdldFNvcnRTdGF0ZXMoKXtyZXR1cm4gbnVsbD09PXRoaXMuc29ydGluZ1N0YXRlcz9bXTp0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChh'@;
put 'PT57bGV0W2QsaF09YTtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGQpLC4uLmh9fSl9Z2V0Q29sdW1uU29ydFN0YXRlKGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihLaShhKSlyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOmF9fXNldFNv'@;
put 'cnRTdGF0ZXMobCl7dGhpcy5zb3J0aW5nU3RhdGVzLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKz0xKXRoaXMuc29ydGluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsW2FdLmNvbHVtbikse3NvcnRPcmRlcjpsW2FdLnNvcnRPcmRl'@;
put 'cn0pfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMubWFwTmFtZSksdGhpcy5zb3J0aW5nU3RhdGVzPW51bGx9fWNvbnN0ICRrPSJhc2MiLHFrPSJkZXNjIjtmdW5jdGlvbiB3cmUoYyl7aWYoYyE9PXFrKXJldHVybiBjPT09JGs/cWs6JGt9'@;
put 'ZnVuY3Rpb24gQ3JlKGMpe3JldHVybiBjLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKX1mdW5jdGlvbiBTcmUoYyxsKXtpZihjPDB8fCFsLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT1sLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO3JldHVybiBBcnJheS5mcm9tKGEp'@;
put 'LmluZGV4T2YobC5wYXJlbnROb2RlKS1hLmxlbmd0aD09LTF9ZnVuY3Rpb24gZ2ooYyxsLGEpe3JldHVybi0xPT09YyYmbD49MCYmITE9PT1VcChhKX1jb25zdCBNcmU9ImluZGljYXRvckRpc2FibGVkIix4cmU9ImNvbHVtblNvcnRpbmciLEVyZT0ic29ydEFjdGlvbiIsa3JlPW5ldyBNYXAo'@;
put 'W1skaywiYXNjZW5kaW5nIl0sW3FrLCJkZXNjZW5kaW5nIl1dKTtmdW5jdGlvbiBBcmUoYyxsLGEpe2NvbnN0IGQ9bC5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGgsZil7Y29uc3R7c29ydEVtcHR5Q2VsbHM6X309YTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb2NhbGVMb3dl'@;
put 'ckNhc2UoZCkpLCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi50b0xvY2FsZUxvd2VyQ2FzZShkKSksaD09PWY/MDpnYyhoKT9nYyhmKT8wOl8mJiJhc2MiPT09Yz8tMToxOmdjKGYpP18mJiJhc2MiPT09Yz8xOi0xOmlzTmFOKGgpJiYhaXNOYU4oZik/ImFzYyI9PT1jPzE6LTE6IWlzTmFOKGgp'@;
put 'JiZpc05hTihmKXx8KGlzTmFOKGgpfHxpc05hTihmKXx8KGg9cGFyc2VGbG9hdChoKSxmPXBhcnNlRmxvYXQoZikpLGg8Zik/ImFzYyI9PT1jPy0xOjE6aD5mPyJhc2MiPT09Yz8xOi0xOjB9fWNvbnN0e3JlZ2lzdGVyOktrLGdldEl0ZW06RHJlLGhhc0l0ZW06UUxlfT1wZCgic29ydGluZy5j'@;
put 'b21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOklyZSxnZXRJdGVtOmVSZX09cGQoInNvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yIik7ZnVuY3Rpb24gTHJlKGMpe3JldHVybiBRTGUoYyk/RHJlKGMpOkRyZSgiZGVmYXVsdCIpfUtrKCJudW1lcmljIixmdW5jdGlvbiBHTGUoYyxs'@;
put 'LGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0IGY9cGFyc2VGbG9hdChkKSxfPXBhcnNlRmxvYXQoaCkse3NvcnRFbXB0eUNlbGxzOlR9PWE7aWYoZj09PV98fGlzTmFOKGYpJiZpc05hTihfKSlyZXR1cm4gMDtpZihUKXtpZihnYyhkKSlyZXR1cm4iYXNjIj09PWM/LTE6MTtpZihnYyho'@;
put 'KSlyZXR1cm4iYXNjIj09PWM/MTotMX1yZXR1cm4gaXNOYU4oZik/MTppc05hTihfKT8tMTpmPF8/ImFzYyI9PT1jPy0xOjE6Zj5fPyJhc2MiPT09Yz8xOi0xOjB9fSksS2soImNoZWNrYm94IixmdW5jdGlvbiBxTGUoYyxsLGEpe2NvbnN0IGQ9bC5jaGVja2VkVGVtcGxhdGUsaD1sLnVuY2hl'@;
put 'Y2tlZFRlbXBsYXRlLHtzb3J0RW1wdHlDZWxsczpmfT1hO3JldHVybiBmdW5jdGlvbihfLFQpe2NvbnN0IFc9Z2MoXyksaWU9Z2MoVCkscGU9Vz9oOl8sd2U9aWU/aDpULEVlPXBlPT09aHx8cGU9PT1kLFplPXdlPT09aHx8d2U9PT1kO2lmKCExPT09Zil7aWYoVyYmITE9PT1pZSlyZXR1cm4g'@;
put 'MTtpZighMT09PVcmJmllKXJldHVybi0xfXJldHVybiExPT09RWUmJlplPyJhc2MiPT09Yz8tMToxOkVlJiYhMT09PVplPyJhc2MiPT09Yz8xOi0xOiExPT09RWUmJiExPT09WmU/QXJlKGMsbCxhKShfLFQpOnBlPT09aCYmd2U9PT1kPyJhc2MiPT09Yz8tMToxOnBlPT09ZCYmd2U9PT1oPyJh'@;
put 'c2MiPT09Yz8xOi0xOjB9fSksS2soImRhdGUiLGZ1bmN0aW9uIFhMZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6Zn09YTtpZihkPT09aClyZXR1cm4gMDtpZihnYyhkKSlyZXR1cm4gZ2MoaCk/MDpmJiYiYXNjIj09PWM/LTE6MTtpZihnYyhoKSly'@;
put 'ZXR1cm4gZiYmImFzYyI9PT1jPzE6LTE7Y29uc3QgXz1sLmRhdGVGb3JtYXQsVD1LbyhkLF8pLFc9S28oaCxfKTtyZXR1cm4gVC5pc1ZhbGlkKCk/Vy5pc1ZhbGlkKCk/Vy5pc0FmdGVyKFQpPyJhc2MiPT09Yz8tMToxOlcuaXNCZWZvcmUoVCk/ImFzYyI9PT1jPzE6LTE6MDotMToxfX0pLEtr'@;
put 'KCJkZWZhdWx0IixBcmUpO2NvbnN0IG1qPSJjb2x1bW5Tb3J0aW5nIjtJcmUobWosZnVuY3Rpb24gdFJlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3RbLC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbihUKXtjb25zdCBXPWNbMF0saWU9bFswXSxwZT1oWzBdLHdlPWZb'@;
put 'MF0sRWU9aWUuY29sdW1uU29ydGluZztyZXR1cm4oRWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9FZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OkxyZShpZS50eXBlKSkoVyxpZSxFZSkocGUsd2UpfSgpfX0pLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Tb3J0Iiks'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uU29ydCIpO2NsYXNzIE9yZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBtan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0'@;
put 'aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRoaXMucGx1Z2luS2V5PW1qLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVu'@;
put 'YWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW5ldyBOTGUodGhpcy5ob3QsYCR7dGhpcy5wbHVnaW5LZXl9LnNvcnRpbmdTdGF0ZXNgKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1uZXcgV3AoYT0+e2xldCBkPXRoaXMuaG90LnRv'@;
put 'VmlzdWFsQ29sdW1uKGEpO3JldHVybiBudWxsPT09ZCYmKGQ9YSksdGhpcy5nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhkKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCx0aGlzLmNvbHVtbk1ldGFDYWNoZSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PnRoaXMub25BZnRlckdldENvbEhlYWRlcihhLGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93biguLi5hcmd1bWVudHMp'@;
put 'fSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsKGEsZCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlRG93bihhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRh'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5ob3QudmlldyYmdGhpcy5sb2FkT3JTb3J0QnlTZXR0aW5ncygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7Y29uc3QgbD0oYSxkKT0+e2NvbnN0IGg9Q3JlKGQp'@;
put 'OyExPT09U3JlKGEsZCl8fG51bGw9PT1ofHx0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoaCl9O3RoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImFmdGVy'@;
put 'R2V0Q29sSGVhZGVyIixsKX0pLHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bnVsbCE9PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSks'@;
put 'dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSkpfSwhMCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWApLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5kZXN0cm95'@;
put 'KCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c29ydChsKXtjb25zdCBhPXRoaXMuZ2V0U29ydENvbmZpZygpLGQ9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCksaD10aGlzLmFyZVZh'@;
put 'bGlkU29ydENvbmZpZ3MoZCk7ITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uU29ydCIsYSxkLGgpJiYoMD09PWEubGVuZ3RoJiZudWxsPT09dGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSYmKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9dGhpcy5ob3Qucm93SW5kZXhNYXBw'@;
put 'ZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXksbmV3IHZuZSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5zZXRWYWx1ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpKSxoJiYodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMo'@;
put 'ZCksdGhpcy5zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKGQpLHRoaXMuc2F2ZUFsbFNvcnRTZXR0aW5ncyhkKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uU29ydCIsYSxoP2Q6YSxoKSxoJiYodGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSExLHRoaXMu'@;
put 'aG90LnZpZXcucmVuZGVyKCkpKX1jbGVhclNvcnQoKXt0aGlzLnNvcnQoW10pfWlzU29ydGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIEtpKGwpP3Ro'@;
put 'aXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRDb2x1bW5Tb3J0U3RhdGUobCk6dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRTdGF0ZXMoKX1zZXRTb3J0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCk7dGhpcy5hcmVWYWxpZFNvcnRDb25m'@;
put 'aWdzKGEpJiZ0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhhKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/'@;
put 'bC5zbGljZSgwLDEpOltsXX1hcmVWYWxpZFNvcnRDb25maWdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuIGZ1bmN0aW9uIGpMZShjKXtpZihjLnNvbWUoYT0+ITE9PT1mdW5jdGlvbiBCTGUoYyl7aWYoITE9PT11cyhjKSlyZXR1cm4hMTtjb25zdHtjb2x1bW46bCxz'@;
put 'b3J0T3JkZXI6YX09YztyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsKSYmWyRrLHFrXS5pbmNsdWRlcyhhKX0oYSkpKXJldHVybiExO2NvbnN0IGw9Yy5tYXAoYT0+e2xldHtjb2x1bW46ZH09YTtyZXR1cm4gZH0pO3JldHVybiBuZXcgU2V0KGwpLnNpemU9PT1sLmxlbmd0aH0obCkmJmwuZXZl'@;
put 'cnkoZD0+e2xldHtjb2x1bW46aH09ZDtyZXR1cm4gaDw9YSYmaD49MH0pfXNhdmVBbGxTb3J0U2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKTthLmluaXRpYWxDb25maWc9Y3MobCxoPT57bGV0e2NvbHVtbjpmLC4u'@;
put 'Ll99PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpLC4uLl99fSksdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJjb2x1bW5Tb3J0aW5nIixhKX1nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpe2NvbnN0IGw9e307dGhpcy5ob3QucnVu'@;
put 'SG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJjb2x1bW5Tb3J0aW5nIixsKTtjb25zdCBhPWwudmFsdWU7cmV0dXJuIEtpKGEpJiZBcnJheS5pc0FycmF5KGEuaW5pdGlhbENvbmZpZykmJihhLmluaXRpYWxDb25maWc9Y3MoYS5pbml0aWFsQ29uZmlnLGg9PntsZXR7Y29sdW1uOmYsLi4u'@;
put 'X309aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpLC4uLl99fSkpLGF9Z2V0Q29sdW1uTmV4dENvbmZpZyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihLaShhKSl7Y29uc3QgaD13cmUoYSk7cmV0'@;
put 'dXJuIEtpKGgpP3tjb2x1bW46bCxzb3J0T3JkZXI6aH06dm9pZCAwfWNvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSYmbD49MCYmbDxkKXJldHVybntjb2x1bW46bCxzb3J0T3JkZXI6d3JlKCl9fWdldE5leHRTb3J0Q29uZmlnKGwpe2xldCBhPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYXBwZW5kIjtjb25zdCBkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCksaD0tMSE9PWQsZj10aGlzLmdldFNvcnRDb25maWcoKSxfPXRoaXMu'@;
put 'Z2V0Q29sdW1uTmV4dENvbmZpZyhsKTtpZihoKXtpZihMYShfKSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKV07aWYoImFwcGVuZCI9PT1hKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpLF9dO2lmKCJyZXBsYWNlIj09PWEpcmV0dXJuWy4uLmYu'@;
put 'c2xpY2UoMCxkKSxfLC4uLmYuc2xpY2UoZCsxKV19cmV0dXJuIEtpKF8pP2YuY29uY2F0KF8pOmZ9Z2V0UGx1Z2luQ29sdW1uQ29uZmlnKGwpe2lmKHVzKGwpKXtjb25zdCBhPWxbdGhpcy5wbHVnaW5LZXldO2lmKHVzKGEpKXJldHVybiBhfXJldHVybnt9fWdldE1lcmdlZFBsdWdpblNldHRp'@;
put 'bmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0sZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKSxoPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaCk7cmV0'@;
put 'dXJuIEFycmF5LmlzQXJyYXkoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNvbHVtbnNbbF0pKTpSYShmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1ucyhsKSkpOk9i'@;
put 'amVjdC5hc3NpZ24oZCxhKX1nZXRGaXJzdENlbGxTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZD1PYmplY3QuY3JlYXRlKGEpO3JldHVybiBkW3RoaXMucGx1Z2luS2V5XT10aGlzLmNvbHVtbk1ldGFDYWNoZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3Qu'@;
put 'dG9QaHlzaWNhbENvbHVtbihsKSksZH1nZXROdW1iZXJPZlJvd3NUb1NvcnQobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3JldHVybiBhLm1heFJvd3M8PWw/YS5tYXhSb3dzOmwtYS5taW5TcGFyZVJvd3N9c29ydEJ5UHJlc2V0U29ydFN0YXRlcyhsKXtpZigwPT09bC5sZW5n'@;
put 'dGgpcmV0dXJuIHZvaWQgdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpO2NvbnN0IGE9W10sZD10aGlzLmhvdC5jb3VudFJvd3MoKSxoPWllPT5jcyhsLHBlPT50aGlzLmhvdC5nZXREYXRhQXRD'@;
put 'ZWxsKGllLHBlLmNvbHVtbikpO2ZvcihsZXQgaWU9MDtpZTx0aGlzLmdldE51bWJlck9mUm93c1RvU29ydChkKTtpZSs9MSlhLnB1c2goW3RoaXMuaG90LnRvUGh5c2ljYWxSb3coaWUpXS5jb25jYXQoaChpZSkpKTtjb25zdCBmPWNzKGEsaWU9PmllWzBdKTshZnVuY3Rpb24gV0xlKGMsbCl7'@;
put 'Y29uc3QgYT1lUmUobCk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRzW2ZdO2Muc29ydChhKC4uLmgpKX0oYSx0aGlzLnBsdWdpbktleSxjcyhsLGllPT5pZS5zb3J0T3JkZXIpLGNzKGwsaWU9PnRo'@;
put 'aXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoaWUuY29sdW1uKSkpO2ZvcihsZXQgaWU9YS5sZW5ndGg7aWU8ZDtpZSs9MSlhLnB1c2goW2llXS5jb25jYXQoaChpZSkpKTtjb25zdCBfPWNzKGEsaWU9PmllWzBdKSxUPW5ldyBNYXAoY3MoZiwoaWUscGUpPT5baWUsX1twZV1dKSksVz1jcyh0aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxpZT0+VC5oYXMoaWUpP1QuZ2V0KGllKTppZSk7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFcpfWxvYWRPclNvcnRCeVNldHRpbmdzKCl7Y29uc3QgbD10aGlzLmdldEFsbFNhdmVkU29y'@;
put 'dFNldHRpbmdzKCk7aWYodXMobCkpdGhpcy5zb3J0QnlTZXR0aW5ncyhsKTtlbHNle2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV07dGhpcy5zb3J0QnlTZXR0aW5ncyhhKX19c29ydEJ5U2V0dGluZ3MobCl7aWYodXMobCkpe3RoaXMuY29sdW1uU3RhdGVz'@;
put 'TWFuYWdlci51cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKTtjb25zdCBhPWwuaW5pdGlhbENvbmZpZzsoQXJyYXkuaXNBcnJheShhKXx8dXMoYSkpJiZ0aGlzLnNvcnQoYSl9ZWxzZSB0aGlzLmhvdC5yZW5kZXIoKX1vbkFmdGVyR2V0Q29sSGVhZGVyKGwsYSl7Y29uc3QgZD1DcmUoYSk7'@;
put 'aWYoITE9PT1TcmUobCxhKXx8bnVsbD09PWQpcmV0dXJuO2NvbnN0IGg9dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhsKVt0aGlzLnBsdWdpbktleV07dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGQsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLGwsaC5pbmRpY2F0b3IsaC5oZWFkZXJBY3Rp'@;
put 'b24pfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7aWYoV28obCxmdW5jdGlvbiBZTGUoKXtyZXR1cm4gQXJyYXkuZnJvbShrcmUudmFsdWVzKCkpLmNvbmNhdChFcmUsTXJlLHhyZSl9KCkpLCExIT09dGhpcy5lbmFibGVkKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShh'@;
put 'PjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07cGkobCxmdW5jdGlvbiBaTGUoYyxsLGEsZCl7Y29uc3QgaD1beHJlXTtpZihkJiZoLnB1c2goRXJlKSwhMT09PWEpcmV0dXJuIGgucHVzaChNcmUpLGg7Y29uc3QgZj1jLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO3Jl'@;
put 'dHVybiBLaShmKSYmaC5wdXNoKGtyZS5nZXQoZikpLGh9KC4uLmQpKX19b25VcGRhdGVTZXR0aW5ncyhsKXtzdXBlci5vblVwZGF0ZVNldHRpbmdzKCksbnVsbCE9PXRoaXMuY29sdW1uTWV0YUNhY2hlJiZ0aGlzLmNvbHVtbk1ldGFDYWNoZS5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldE51bWJlck9mSW5kZXhlcygpKSxLaShsW3RoaXMucGx1Z2luS2V5XSkmJnRoaXMuc29ydEJ5U2V0dGluZ3MobFt0aGlzLnBsdWdpbktleV0pfW9uQWZ0ZXJMb2FkRGF0YShsKXshMD09PWwmJnRoaXMuaG90LnZpZXcmJnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKX13YXNDbGlj'@;
put 'a2FibGVIZWFkZXJDbGlja2VkKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYSlbdGhpcy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmIlNQQU4iPT09bC50YXJnZXQubm9kZU5hbWV9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7ITEhPT1naihhLnJvdyxh'@;
put 'LmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpJiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihoLmNvbHVtbj0hMCl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpeyExIT09Z2ooYS5yb3csYS5jb2wsbCkmJnRo'@;
put 'aXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSYmKHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpKSx0aGlzLnNvcnQodGhpcy5nZXRDb2x1'@;
put 'bW5OZXh0Q29uZmlnKGEuY29sKSkpfWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB2aihjKXtyZXR1cm4gbnVsbD09Y3x8aXNOYU4oYyl9Y29uc3QgX2o9'@;
put 'ImNvbHVtblN1bW1hcnkiO2NsYXNzIGFSZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMjB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5lbmRwb2ludHM9bnVsbH1pc0VuYWJsZWQo'@;
put 'KXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX2pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW19qXSx0aGlzLmVuZHBvaW50cz1uZXcgY2xhc3MgaVJle2NvbnN0cnVjdG9yKGwsYSl7'@;
put 'dGhpcy5wbHVnaW49bCx0aGlzLmhvdD10aGlzLnBsdWdpbi5ob3QsdGhpcy5lbmRwb2ludHM9W10sdGhpcy5zZXR0aW5ncz1hLHRoaXMuc2V0dGluZ3NUeXBlPSJhcnJheSIsdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1nZXRFbmRwb2ludChsKXty'@;
put 'ZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKVtsXTp0aGlzLmVuZHBvaW50c1tsXX1nZXRBbGxFbmRwb2ludHMoKXtyZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxs'@;
put 'TWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKTp0aGlzLmVuZHBvaW50c31maWxsTWlzc2luZ0VuZHBvaW50RGF0YShsKXtyZXR1cm4gdGhpcy5wYXJzZVNldHRpbmdzKGwuY2FsbCh0aGlzKSl9cGFyc2VTZXR0aW5ncyhsKXtjb25zdCBhPVtdO2xldCBkPWw7aWYoZHx8ImZ1bmN0'@;
put 'aW9uIiE9dHlwZW9mIHRoaXMuc2V0dGluZ3MpcmV0dXJuIGR8fChkPXRoaXMuc2V0dGluZ3MpLERuKGQsaD0+e2NvbnN0IGY9e307dGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmFuZ2VzIixbWzAsdGhpcy5ob3QuY291bnRSb3dzKCktMV1dKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyZXZl'@;
put 'cnNlZFJvd0Nvb3JkcyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uUm93IixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gcm93IGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJv'@;
put 'cGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Db2x1bW4iLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiBjb2x1bW4gZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29y'@;
put 'ayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJzb3VyY2VDb2x1bW4iLGguZGVzdGluYXRpb25Db2x1bW4pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInR5cGUiLCJzdW0iKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJmb3JjZU51bWVyaWMiLCExKSx0aGlz'@;
put 'LmFzc2lnblNldHRpbmcoaCxmLCJzdXBwcmVzc0RhdGFUeXBlRXJyb3JzIiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImN1c3RvbUZ1bmN0aW9uIixudWxsKSx0aGlzLmFzc2lnblNldHRpbmco'@;
put 'aCxmLCJyZWFkT25seSIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJvdW5kRmxvYXQiLCExKSxhLnB1c2goZil9KSxhO3RoaXMuc2V0dGluZ3NUeXBlPSJmdW5jdGlvbiJ9YXNzaWduU2V0dGluZyhsLGEsZCxoKXtpZigicmFuZ2VzIiE9PWR8fHZvaWQgMCE9PWxbZF0pe2lmKCJyYW5n'@;
put 'ZXMiIT09ZHx8MCE9PWxbZF0ubGVuZ3RoKWlmKHZvaWQgMD09PWxbZF0pe2lmKGggaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBoO2FbZF09aH1lbHNlIGFbZF09ImRlc3RpbmF0aW9uUm93Ij09PWQmJmEucmV2ZXJzZWRSb3dDb29yZHM/dGhpcy5ob3QuY291bnRSb3dzKCktbFtkXS0xOmxbZF19'@;
put 'ZWxzZSBhW2RdPWh9cmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24obCxhLGQpe2lmKCJmdW5jdGlvbiIhPT10aGlzLnNldHRpbmdzVHlwZSlyZXR1cm47Y29uc3QgaD1sLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLGY9dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtEbihm'@;
put 'LF89Pnsicm93Ij09PWgmJl8uZGVzdGluYXRpb25Sb3c+PWEmJigiaW5zZXJ0X3JvdyI9PT1sP18uYWx0ZXJSb3dPZmZzZXQ9ZDoicmVtb3ZlX3JvdyI9PT1sJiYoXy5hbHRlclJvd09mZnNldD0tMSpkKSksImNvbCI9PT1oJiZfLmRlc3RpbmF0aW9uQ29sdW1uPj1hJiYoImluc2VydF9jb2wi'@;
put 'PT09bD9fLmFsdGVyQ29sdW1uT2Zmc2V0PWQ6InJlbW92ZV9jb2wiPT09bCYmKF8uYWx0ZXJDb2x1bW5PZmZzZXQ9LTEqZCkpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhmLCExKX1yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkLGgsZil7bGV0IF89IShhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtpZigiZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGUpe2NvbnN0IEVlPSgpPT4odGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlVmlld1JlbmRlciIsRWUpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50'@;
put 'cygpKTtyZXR1cm4gdm9pZCB0aGlzLmhvdC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIsRWUpfWNvbnN0IFQ9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixXPWwuaW5kZXhPZigicmVtb3ZlIik+LTE/LTE6MSxpZT10aGlzLmdldEFsbEVuZHBvaW50cygpLHBlPTA9PT1s'@;
put 'LmluZGV4T2YoIm1vdmVfcm93Iiksd2U9YTtEbihpZSxFZT0+eyJyb3ciPT09VCYmRWUuZGVzdGluYXRpb25Sb3c+PXdlJiYoRWUuYWx0ZXJSb3dPZmZzZXQ9VypkKSwiY29sIj09PVQmJkVlLmRlc3RpbmF0aW9uQ29sdW1uPj13ZSYmKEVlLmFsdGVyQ29sdW1uT2Zmc2V0PVcqZCl9KSx0aGlz'@;
put 'LnJlc2V0QWxsRW5kcG9pbnRzKGllLCFwZSksRG4oaWUscGU/RWU9Pnt0aGlzLmV4dGVuZEVuZHBvaW50UmFuZ2VzKEVlLHdlLGhbMF0saC5sZW5ndGgpLHRoaXMucmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhFZSksdGhpcy5jbGVhck9mZnNldEluZm9ybWF0aW9uKEVlKX06RWU9Pnt0aGlzLnNo'@;
put 'aWZ0RW5kcG9pbnRDb29yZGluYXRlcyhFZSx3ZSl9KSxfJiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGwpe2wuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50UmFuZ2VzKGwsYSxk'@;
put 'LGgpe0RuKGwucmFuZ2VzLGY9PntmWzFdJiYoYT49ZlswXSYmYTw9ZlsxXT9kPmZbMV0/ZlsxXSs9aDpkPGZbMF0mJihmWzBdLT1oKTpkPj1mWzBdJiZkPD1mWzFdJiYoZlsxXS09aCxhPD1mWzBdJiYoZlswXSs9MSxmWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhsKXtjb25z'@;
put 'dCBkPVtdLGg9W107RG4obC5yYW5nZXMsZj0+e2NvbnN0IF89W107aWYoZlsxXSlmb3IobGV0IFQ9ZlswXTtUPD1mWzFdO1QrKylfLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhUKSk7ZWxzZSBfLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmWzBdKSk7aC5wdXNoKF8pfSksRG4o'@;
put 'aCxmPT57bGV0IF89W107RG4oZiwoVCxXKT0+ezA9PT1XP18ucHVzaChUKTpmW1ddIT09ZltXLTFdKzEmJihfLnB1c2goZltXLTFdKSxkLnB1c2goXyksXz1bXSxfLnB1c2goVCkpLFc9PT1mLmxlbmd0aC0xJiYoXy5wdXNoKFQpLGQucHVzaChfKSl9KX0pLGwucmFuZ2VzPWR9c2hpZnRFbmRw'@;
put 'b2ludENvb3JkaW5hdGVzKGwsYSl7bC5hbHRlclJvd09mZnNldCYmMCE9PWwuYWx0ZXJSb3dPZmZzZXQ/KGwuZGVzdGluYXRpb25Sb3crPWwuYWx0ZXJSb3dPZmZzZXR8fDAsRG4obC5yYW5nZXMsZD0+e0RuKGQsKGgsZik9PntoPj1hJiYoZFtmXSs9bC5hbHRlclJvd09mZnNldHx8MCl9KX0p'@;
put 'KTpsLmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09bC5hbHRlckNvbHVtbk9mZnNldCYmKGwuZGVzdGluYXRpb25Db2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsbC5zb3VyY2VDb2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKCl7bGV0IGw9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2wuc29tZShoPT57Y29uc3QgXz1oLmFsdGVyQ29sdW1u'@;
put 'T2Zmc2V0fHwwO3JldHVybiBoLmRlc3RpbmF0aW9uUm93KyhoLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhpcy5ob3QuY291bnRSb3dzKCl8fGguZGVzdGluYXRpb25Db2x1bW4rXz49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtdLERuKGwsaD0+e3RoaXMu'@;
put 'cmVzZXRFbmRwb2ludFZhbHVlKGgsYSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10pfXJlZnJlc2hBbGxFbmRwb2ludHMoKXt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxE'@;
put 'bih0aGlzLmdldEFsbEVuZHBvaW50cygpLGw9Pnt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCwiaW5pdCIpfSksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMu'@;
put 'Y2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl7Y29uc3QgYT1bXTt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxEbihsLChkLGgsZik9PntgJHtkWzJdfHwiIn1gIT1gJHtkWzNdfWAm'@;
put 'JkRuKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksKF8sVCk9Pnt0aGlzLmhvdC5wcm9wVG9Db2woZltoXVsxXSk9PT1fLnNvdXJjZUNvbHVtbiYmLTE9PT1hLmluZGV4T2YoVCkmJmEucHVzaChUKX0pfSksRG4oYSxkPT57dGhpcy5yZWZyZXNoRW5kcG9pbnQodGhpcy5nZXRFbmRwb2ludChkKSl9'@;
put 'KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaEVuZHBvaW50KGwpe3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMu'@;
put 'c2V0RW5kcG9pbnRWYWx1ZShsKSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfXJlc2V0RW5kcG9pbnRWYWx1ZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGg9bC5hbHRlckNvbHVtbk9mZnNldHx8MDt0'@;
put 'aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFt0aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KyhhJiZsLmFsdGVyUm93T2Zmc2V0fHwwKSksdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obC5kZXN0aW5hdGlvbkNvbHVtbisoYT9oOjApKSwiIl0pfXNldEVuZHBvaW50VmFsdWUo'@;
put 'bCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobC5kZXN0aW5hdGlvblJvdz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGwuZGVzdGlu'@;
put 'YXRpb25Db2x1bW4+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybiB2b2lkIHRoaXMudGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKG51bGwhPT1mKXtjb25zdCBfPXRoaXMuaG90LmdldENlbGxNZXRh'@;
put 'KGYsbC5kZXN0aW5hdGlvbkNvbHVtbik7KCJpbml0Ij09PWF8fF8ucmVhZE9ubHkhPT1sLnJlYWRPbmx5KSYmKF8ucmVhZE9ubHk9bC5yZWFkT25seSxfLmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCIpfWwucm91bmRGbG9hdCYmIWlzTmFOKGwucmVzdWx0KSYmKGwucmVzdWx0PWwu'@;
put 'cmVzdWx0LnRvRml4ZWQobC5yb3VuZEZsb2F0KSksZD90aGlzLmhvdC5zZXREYXRhQXRDZWxsKGgsbC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdCwiQ29sdW1uU3VtbWFyeS5zZXQiKTp0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFtoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHRd'@;
put 'KSxsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH10aHJvd091dE9mQm91bmRzV2FybmluZygpe0dhKCJPbmUgb2YgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbnMnIGRlc3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0'@;
put 'YWJsZSBib3VuZGFyaWVzISIpfX0odGhpcyx0aGlzLnNldHRpbmdzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySW5pdCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFm'@;
put 'dGVyQ2hhbmdlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNy'@;
put 'ZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk'@;
put 'PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJD'@;
put 'cmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJT'@;
put 'dHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4g'@;
put 'bC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRb'@;
put 'aF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSb3dNb3ZlKC4uLmFyZ3VtZW50'@;
put 'cyl9KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGx9Y2FsY3VsYXRlKGwpe3N3aXRjaChsLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmwucmVz'@;
put 'dWx0PXRoaXMuY2FsY3VsYXRlU3VtKGwpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgobCxsLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmwucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKGwpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6bC5yZXN1'@;
put 'bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGwpO2JyZWFrO2Nhc2UiY3VzdG9tIjpsLnJlc3VsdD1sLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxsKX19Y2FsY3VsYXRlU3VtKGwpe2xldCBhPTA7cmV0dXJuIGRzKGwucmFuZ2VzLGQ9PnthKz10aGlzLmdldFBhcnRpYWxTdW0oZCxsLnNvdXJj'@;
put 'ZUNvbHVtbil9KSxhfWdldFBhcnRpYWxTdW0obCxhKXtsZXQgZD0wLGg9bFsxXXx8bFswXSxmPW51bGwsXz0wO2Rve2lmKGY9dGhpcy5nZXRDZWxsVmFsdWUoaCxhKSxmPXZqKGYpP251bGw6ZixudWxsIT09Zil7Y29uc3QgVD0oYCR7Zn1gLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7'@;
put 'VD5fJiYoXz1UKX1kKz1mfHwwLGgtPTF9d2hpbGUoaD49bFswXSk7cmV0dXJuIE1hdGgucm91bmQoZCoxMCoqXykvMTAqKl99Y2FsY3VsYXRlTWluTWF4KGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZHMobC5yYW5nZXMsaD0+e2NvbnN0IGY9dGhpcy5nZXRQYXJ0aWFsTWluTWF4KGgsbC5zb3Vy'@;
put 'Y2VDb2x1bW4sYSk7aWYobnVsbD09PWQmJm51bGwhPT1mJiYoZD1mKSxudWxsIT09Zilzd2l0Y2goYSl7Y2FzZSJtaW4iOmQ9TWF0aC5taW4oZCxmKTticmVhaztjYXNlIm1heCI6ZD1NYXRoLm1heChkLGYpfX0pLG51bGw9PT1kPyJOb3QgZW5vdWdoIGRhdGEiOmR9Z2V0UGFydGlhbE1pbk1h'@;
put 'eChsLGEsZCl7bGV0IF8saD1udWxsLGY9bFsxXXx8bFswXTtkb3tpZihfPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksXz12aihfKT9udWxsOl8sbnVsbD09PWgpaD1fO2Vsc2UgaWYobnVsbCE9PV8pc3dpdGNoKGQpe2Nhc2UibWluIjpoPU1hdGgubWluKGgsXyk7YnJlYWs7Y2FzZSJtYXgiOmg9'@;
put 'TWF0aC5tYXgoaCxfKX1mLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW1wdHkobCxhKXtsZXQgZCxoPTAsZj1sWzFdfHxsWzBdO2Rve2Q9dGhpcy5nZXRDZWxsVmFsdWUoZixhKSxkPXZqKGQpP251bGw6ZCxudWxsPT09ZCYmKGgrPTEpLGYtPTF9d2hpbGUoZj49bFswXSk7cmV0'@;
put 'dXJuIGh9Y291bnRFbnRyaWVzKGwpe2xldCBhPTA7cmV0dXJuIGRzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXZvaWQgMD09PWhbMV0/MTpoWzFdLWhbMF0rMSxfPXRoaXMuY291bnRFbXB0eShoLGwuc291cmNlQ29sdW1uKTthKz1mLGEtPV99KSxhfWNhbGN1bGF0ZUF2ZXJhZ2UobCl7cmV0dXJu'@;
put 'IHRoaXMuY2FsY3VsYXRlU3VtKGwpL3RoaXMuY291bnRFbnRyaWVzKGwpfWdldENlbGxWYWx1ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksaD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtsZXQgZj10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSksXz0i'@;
put 'IjtpZihudWxsIT09ZCYmbnVsbCE9PWgmJihfPXRoaXMuaG90LmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lfHwiIiksXy5pbmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYodGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYm'@;
put 'KCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi5yZXBsYWNlKC8sLywiLiIpKSxmPXBhcnNlRmxvYXQoZikpLGlzTmFOKGYpJiYhdGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVFcnJvcnMpdGhyb3cgbmV3IEVycm9yKEFhYENvbHVtblN1bW1hcnkgcGx1Z2lu'@;
put 'OiBjZWxsIGF0ICgke2x9LCAke2F9KSBpcyBub3QgaW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBmfW9uQWZ0ZXJJbml0KCl7dGhpcy5lbmRwb2ludHMuZW5kcG9pbnRzPXRoaXMuZW5kcG9pbnRzLnBhcnNlU2V0'@;
put 'dGluZ3MoKSx0aGlzLmVuZHBvaW50cy5yZWZyZXNoQWxsRW5kcG9pbnRzKCEwKX1vbkFmdGVyQ2hhbmdlKGwsYSl7bCYmIkNvbHVtblN1bW1hcnkucmVzZXQiIT09YSYmIkNvbHVtblN1bW1hcnkuc2V0IiE9PWEmJiJsb2FkRGF0YSIhPT1hJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2hhbmdl'@;
put 'ZEVuZHBvaW50cyhsKX1vbkFmdGVyUm93TW92ZShsLGEpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsbFswXSxsLmxlbmd0aCxsLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0'@;
put 'dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGEsbC5sZW5ndGgsbCx0aGlzLnBsdWdpbk5hbWUpfX1jbGFzcyBNN3tzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3RhdGljIGdldCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRD'@;
put 'b21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSl7dGhpcy5yb290RG9jdW1lbnQ9bCx0aGlzLmlzUnRsPWEsdGhpcy5jb250'@;
put 'YWluZXI9bnVsbCx0aGlzLmVkaXRvcj10aGlzLmNyZWF0ZUVkaXRvcigpLHRoaXMuZWRpdG9yU3R5bGU9dGhpcy5lZGl0b3Iuc3R5bGUsdGhpcy5oaWRkZW49ITAsdGhpcy5oaWRlKCl9c2V0UG9zaXRpb24obCxhKXt0aGlzLmVkaXRvclN0eWxlLmxlZnQ9YCR7bH1weGAsdGhpcy5lZGl0b3JT'@;
put 'dHlsZS50b3A9YCR7YX1weGB9c2V0U2l6ZShsLGEpe2lmKGwmJmEpe2NvbnN0IGQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtkLnN0eWxlLndpZHRoPWAke2x9cHhgLGQuc3R5bGUuaGVpZ2h0PWAke2F9cHhgfX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOndhKHRoaXMuZ2V0SW5wdXRFbGVtZW50'@;
put 'KCkpLGhlaWdodDphbCh0aGlzLmdldElucHV0RWxlbWVudCgpKX19cmVzZXRTaXplKCl7Y29uc3QgbD10aGlzLmdldElucHV0RWxlbWVudCgpO2wuc3R5bGUud2lkdGg9IiIsbC5zdHlsZS5oZWlnaHQ9IiJ9c2V0UmVhZE9ubHlTdGF0ZShsKXt0aGlzLmdldElucHV0RWxlbWVudCgpLnJlYWRP'@;
put 'bmx5PWx9c2hvdygpe3RoaXMuZWRpdG9yU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaGlkZGVuPSExfWhpZGUoKXt0aGlzLmhpZGRlbnx8KHRoaXMuZWRpdG9yU3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaGlkZGVuPSEwfWlzVmlzaWJsZSgpe3JldHVybiJibG9jayI9PT10aGlzLmVk'@;
put 'aXRvclN0eWxlLmRpc3BsYXl9c2V0VmFsdWUoKXtjb25zdCBhPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIpfHwiIjt0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlPWF9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRJbnB1dEVs'@;
put 'ZW1lbnQoKS52YWx1ZX1pc0ZvY3VzZWQoKXtyZXR1cm4gdGhpcy5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZ2V0SW5wdXRFbGVtZW50KCl9Zm9jdXMoKXt0aGlzLmdldElucHV0RWxlbWVudCgpLmZvY3VzKCl9Y3JlYXRlRWRpdG9yKCl7Y29uc3QgbD10aGlzLnJvb3REb2N1'@;
put 'bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGwuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250'@;
put 'YWluZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGw/InJ0bCI6Imx0ciIpLHBpKHRoaXMuY29udGFpbmVyLE03LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLHRoaXMucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpLHBpKGwsTTcuQ0xBU1NfRURJVE9S'@;
put 'KSxwaShhLE03LkNMQVNTX0lOUFVUKSxsLmFwcGVuZENoaWxkKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGwpLGx9Z2V0SW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoYC4ke003LkNMQVNTX0lOUFVUfWApfWRlc3Ryb3koKXtjb25zdCBsPXRo'@;
put 'aXMuY29udGFpbmVyP3RoaXMuY29udGFpbmVyLnBhcmVudE5vZGU6bnVsbDt0aGlzLmVkaXRvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWRpdG9yKSx0aGlzLmVkaXRvcj1udWxsLHRoaXMuZWRpdG9yU3R5bGU9bnVsbCxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX19'@;
put 'Y29uc3QgbFJlPU03LGdzPSItLS0tLS0tLS0iO2Z1bmN0aW9uIFhrKGMpe3JldHVybiBCbyhjLCJodFNlcGFyYXRvciIpfWZ1bmN0aW9uIEprKGMpe3JldHVybiBCbyhjLCJodERpc2FibGVkIil9ZnVuY3Rpb24gUWsoYyl7cmV0dXJuIEJvKGMsImh0U2VsZWN0aW9uRGlzYWJsZWQiKX1mdW5j'@;
put 'dGlvbiBJZyhjKXtjb25zdCBsPWMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bFswXTwwP251bGw6bH1mdW5jdGlvbiBMZyhjLGwpe2NvbnN0IGE9e307cmV0dXJuIERuKGMsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmKGFbaF18fChhW2hdPVtdKSxhW2hdW2ZdPWwoaCxmKSl9'@;
put 'KX0pLGF9ZnVuY3Rpb24gS3AoYyxsLGEsZCxoKXtEbihjLGY9PntmLmZvckFsbCgoXyxUKT0+e18+PTAmJlQ+PTAmJmZ1bmN0aW9uIHBSZShjLGwsYSxkLGgsZil7Y29uc3QgXz1oKGMsbCk7bGV0IFQ9ZDtfLmNsYXNzTmFtZSYmKFQ9InZlcnRpY2FsIj09PWE/ZnVuY3Rpb24gaFJlKGMsbCl7'@;
put 'cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFjZSgiaHRNaWRkbGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfShfLmNsYXNzTmFtZSxkKTpmdW5jdGlvbiBmUmUoYyxsKXtyZXR1cm4tMSE9'@;
put 'PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50ZXIiLCIiKS5yZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5IiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KF8uY2xhc3NOYW1lLGQpKSxmKGMsbCwiY2xhc3NO'@;
put 'YW1lIixUKX0oXyxULGwsYSxkLGgpfSl9KX1mdW5jdGlvbiB5aChjLGwpe2xldCBhPSExO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZEbihjLGQ9PihkLmZvckFsbCgoaCxmKT0+e2lmKGg+PTAmJmY+PTAmJmwoaCxmKSlyZXR1cm4gYT0hMCwhMX0pLGEpKSxhfWZ1bmN0aW9uIFlmKGMpe3Jl'@;
put 'dHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPiR7U3RyaW5nLmZyb21DaGFyQ29kZSgxMDAwMyl9PC9zcGFuPiR7Y31gfWZ1bmN0aW9uIFByZShjLGwpe2NvbnN0IGE9Yy5zbGljZSgwKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoJiZhW2RdLm5hbWU9PT1sOylhLnNoaWZ0KCk7cmV0dXJuIGF9'@;
put 'Y2xhc3MgRnJle2NvbnN0cnVjdG9yKGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkPW51bGwsdGhpcy5oaWRpbmdUaW1lcj1udWxsLHRoaXMudXBkYXRlRGVsYXkobCl9aGlkZSgpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5oaWRpbmdUaW1l'@;
put 'cj1zZXRUaW1lb3V0KCgpPT57ITE9PT10aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX1zaG93KGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkKGwpfWNhbmNlbEhpZGluZygpe3RoaXMud2FzTGFzdEFj'@;
put 'dGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheSgpe3RoaXMuc2hvd0RlYm91bmNlZD1tTihhPT57dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJzaG93IixhLmZyb20ucm93'@;
put 'LGEuZnJvbS5jb2wpfSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MjUwKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKX19VGEoRnJlLE8wKTtjb25zdCB3UmU9RnJlLGJqPSJjb21tZW50cyIsZUE9bmV3IFdlYWtNYXAsd2g9'@;
put 'ImNvbW1lbnQiLHg3PSJ2YWx1ZSIsdEE9InJlYWRPbmx5IjtjbGFzcyBTUmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gYmp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNjB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5lZGl0b3I9'@;
put 'bnVsbCx0aGlzLmRpc3BsYXlTd2l0Y2g9bnVsbCx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMucmFuZ2U9e30sdGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMSxlQS5zZXQodGhpcyx7dGVtcEVkaXRvckRpbWVuc2lvbnM6e30sY2VsbEJlbG93Q3Vyc29yOm51bGx9KX1pc0VuYWJs'@;
put 'ZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbYmpdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuZWRpdG9yfHwodGhpcy5lZGl0b3I9bmV3IGxSZSh0aGlzLmhvdC5yb290RG9jdW1lbnQsdGhpcy5ob3QuaXNSdGwoKSkpLHRoaXMuZXZlbnRNYW5hZ2VyfHwo'@;
put 'dGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpKSx0aGlzLmRpc3BsYXlTd2l0Y2h8fCh0aGlzLmRpc3BsYXlTd2l0Y2g9bmV3IHdSZSh0aGlzLmdldERpc3BsYXlEZWxheVNldHRpbmcoKSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlz'@;
put 'LmFkZFRvQ29udGV4dE1lbnUobCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsKGwsYSxkLGgsZixfKT0+dGhpcy5vbkFmdGVyUmVuZGVyZXIobCxfKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFm'@;
put 'dGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyQmVnaW5FZGl0aW5nIiwoKT0+dGhpcy5oaWRlKCkpLHRoaXMuZGlzcGxheVN3aXRjaC5hZGRMb2NhbEhvb2soImhpZGUiLCgpPT50aGlzLmhpZGUoKSksdGhpcy5kaXNwbGF5U3dpdGNoLmFk'@;
put 'ZExvY2FsSG9vaygic2hvdyIsKGwsYSk9PnRoaXMuc2hvd0F0Q2VsbChsLGEpKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCksdGhpcy5kaXNwbGF5U3dpdGNoLnVwZGF0ZURlbGF5KHRoaXMuZ2V0RGlzcGxheURlbGF5U2V0dGluZygpKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O3RoaXMuZXZl'@;
put 'bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixhPT50aGlzLm9uTW91c2VPdmVyKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsYT0+dGhpcy5vbk1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM'@;
put 'aXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmVkaXRvci5nZXRJbnB1dEVsZW1lbnQoKSwiYmx1ciIsKCk9PnRoaXMub25FZGl0b3JCbHVyKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50'@;
put 'TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCksIm1vdXNlZG93biIsYT0+dGhpcy5vbkVkaXRvck1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmVkaXRvci5nZXRJbnB1dEVsZW1lbnQoKSwibW91c2V1cCIsYT0+dGhpcy5v'@;
put 'bkVkaXRvck1vdXNlVXAoYSkpfXNldFJhbmdlKGwpe3RoaXMucmFuZ2U9bH1jbGVhclJhbmdlKCl7dGhpcy5yYW5nZT17fX10YXJnZXRJc0NlbGxXaXRoQ29tbWVudChsKXtjb25zdCBhPU5wKGwudGFyZ2V0LCJURCIsIlRCT0RZIik7cmV0dXJuISEoYSYmQm8oYSwiaHRDb21tZW50Q2VsbCIp'@;
put 'JiZOcChhLFt0aGlzLmhvdC5yb290RWxlbWVudF0pKX10YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShsKXtyZXR1cm4gdGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCk9PT1sLnRhcmdldH1zZXRDb21tZW50KGwpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUg'@;
put 'dXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdCBhPXRoaXMuZWRpdG9yLmdldFZhbHVlKCk7bGV0IGQ9IiI7bnVsbCE9bD9kPWw6bnVsbCE9YSYmKGQ9YSksdGhpcy51cGRhdGVDb21tZW50'@;
put 'TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse1t4N106ZH0pLHRoaXMuaG90LnJlbmRlcigpfXNldENvbW1lbnRBdENlbGwobCxhLGQpe3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2V0Q29tbWVu'@;
put 'dChkKX1yZW1vdmVDb21tZW50KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCBy'@;
put 'YW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7dGhpcy5ob3Quc2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHdoKSxsJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX1yZW1vdmVDb21tZW50QXRDZWxsKGws'@;
put 'YSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnJlbW92ZUNvbW1lbnQoZCl9Z2V0Q29tbWVudCgpe3JldHVybiB0'@;
put 'aGlzLmdldENvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx4Nyl9Z2V0Q29tbWVudEF0Q2VsbChsLGEpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGwsYSx4Nyl9c2hvdygpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdC'@;
put 'ZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtmcm9tOntyb3c6bCxjb2w6YX19PXRoaXMucmFuZ2U7aWYobDwwfHxsPnRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTF8fGE8'@;
put 'MHx8YT50aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKS0xKXJldHVybiExO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sKTtyZXR1cm4gdGhpcy5lZGl0b3Iuc2V0VmFsdWUoZFt3aF0/ZFt3aF1beDddOiIiKSx0aGlz'@;
put 'LmVkaXRvci5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2hvdygpfWhpZGUoKXt0aGlzLmVkaXRvci5oaWRlKCl9cmVmcmVzaEVk'@;
put 'aXRvcigpe3ZhciBsLGE7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLnJhbmdlLmZyb20mJnRoaXMuZWRpdG9yLmlzVmlzaWJsZSgpKSlyZXR1cm47Y29uc3R7cm93SW5kZXhNYXBwZXI6aCxjb2x1bW5JbmRleE1hcHBl'@;
put 'cjpmfT10aGlzLmhvdCx7cm93Ol8sY29sOlR9PXRoaXMucmFuZ2UuZnJvbTtsZXQgVz1oLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoXyksaWU9Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFQpO2NvbnN0IHBlPW51bGw9PT1XO3RoaXMuZWRpdG9yLnNldFBvc2l0aW9uKDAs'@;
put 'MCksbnVsbD09PVcmJihXPWguZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLC0xKSkpLG51bGw9PT1pZSYmKGllPWYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChULC0xKSkpO2Nv'@;
put 'bnN0IHdlPW51bGw9PT1XLEVlPW51bGw9PT1pZTtXPW51bGwhPT0obD1XKSYmdm9pZCAwIT09bD9sOjAsaWU9bnVsbCE9PShhPWllKSYmdm9pZCAwIT09YT9hOjA7Y29uc3R7cm9vdFdpbmRvdzpaZSx2aWV3Ontfd3Q6aXR9fT10aGlzLmhvdCx7d3RUYWJsZTpldH09aXQseXQ9aXQuZ2V0Q2Vs'@;
put 'bCh7cm93OlcsY29sOmllfSwhMCksRXQ9dGhpcy5nZXRDb21tZW50TWV0YShfLFQsInN0eWxlIik7RXQ/dGhpcy5lZGl0b3Iuc2V0U2l6ZShFdC53aWR0aCxFdC5oZWlnaHQpOnRoaXMuZWRpdG9yLnJlc2V0U2l6ZSgpO2NvbnN0IFN0PUVlPzA6ZXQuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgo'@;
put 'aWUpLEp0PXBlJiYhd2U/YWwoeXQpOjAse2xlZnQ6bm4sdG9wOnZuLHdpZHRoOk5uLGhlaWdodDpjcn09eXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOklyLGhlaWdodDpFaX09dGhpcy5lZGl0b3IuZ2V0U2l6ZSgpLHtpbm5lcldpZHRoOklpLGlubmVySGVpZ2h0OmZyfT10aGlz'@;
put 'LmhvdC5yb290V2luZG93LGlpPXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7bGV0IGpyPW5uK1plLnNjcm9sbFgrU3QsT249dm4rWmUuc2Nyb2xsWStKdDt0aGlzLmhvdC5pc1J0bCgpJiYoanItPUlyK1N0KSx0aGlzLmhvdC5pc0x0cigpJiZubitObitJcj5JaT9qcj1u'@;
put 'bitaZS5zY3JvbGxYLUlyLTE6dGhpcy5ob3QuaXNSdGwoKSYmanI8LShpaS5zY3JvbGxXaWR0aC1paS5jbGllbnRXaWR0aCkmJihqcj1ubitaZS5zY3JvbGxYK1N0KzEpLHZuK0VpPmZyJiYoT24tPUVpLWNyKzEpLHRoaXMuZWRpdG9yLnNldFBvc2l0aW9uKGpyLE9uKSx0aGlzLmVkaXRvci5z'@;
put 'ZXRSZWFkT25seVN0YXRlKHRoaXMuZ2V0Q29tbWVudE1ldGEoXyxULHRBKSl9Y2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybiExO2xldCBhPSExO2NvbnN0IGQ9bC5nZXRUb3BTdGFy'@;
put 'dENvcm5lcigpO3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGQucm93LGQuY29sLHg3KSYmKGE9ITApLGF9dXBkYXRlQ29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKVt3aF07bGV0IGY7aD8oZj15dShoKSxseShmLGQpKTpmPWQsdGhpcy5ob3Qu'@;
put 'c2V0Q2VsbE1ldGEobCxhLHdoLGYpfWdldENvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7aWYoaFt3aF0pcmV0dXJuIGhbd2hdW2RdfW9uTW91c2VEb3duKGwpe2lmKHRoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0JiYhdGhpcy5wcmV2'@;
put 'ZW50RWRpdG9yQXV0b1N3aXRjaCYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCkpe2NvbnN0IGE9TnAobC50YXJnZXQsIlREIiwiVEJPRFkiKTtsZXQgZD1udWxsO2EmJihkPXRoaXMuaG90LmdldENvb3JkcyhhKSksKCFhfHx0aGlzLnJhbmdlLmZyb20mJmQmJih0aGlzLnJhbmdl'@;
put 'LmZyb20ucm93IT09ZC5yb3d8fHRoaXMucmFuZ2UuZnJvbS5jb2whPT1kLmNvbCkpJiZ0aGlzLmhpZGUoKX19b25Nb3VzZU92ZXIobCl7Y29uc3QgYT1lQS5nZXQodGhpcykse3Jvb3REb2N1bWVudDpkfT10aGlzLmhvdDtpZighKHRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2h8fHRoaXMu'@;
put 'ZWRpdG9yLmlzRm9jdXNlZCgpfHxCbyhsLnRhcmdldCwid3RCb3JkZXIiKXx8YS5jZWxsQmVsb3dDdXJzb3I9PT1sLnRhcmdldCkmJnRoaXMuZWRpdG9yKWlmKGEuY2VsbEJlbG93Q3Vyc29yPWQuZWxlbWVudEZyb21Qb2ludChsLmNsaWVudFgsbC5jbGllbnRZKSx0aGlzLnRhcmdldElzQ2Vs'@;
put 'bFdpdGhDb21tZW50KGwpKXtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuZ2V0Q29vcmRzKGwudGFyZ2V0KSk7dGhpcy5kaXNwbGF5U3dpdGNoLnNob3coaCl9ZWxzZSBWcChsLnRhcmdldCxkKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCkmJnRo'@;
put 'aXMuZGlzcGxheVN3aXRjaC5oaWRlKCl9b25Nb3VzZVVwKCl7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMX1vbkFmdGVyUmVuZGVyZXIobCxhKXthW3doXSYmYVt3aF1beDddJiZwaShsLGEuY29tbWVudGVkQ2VsbENsYXNzTmFtZSl9b25FZGl0b3JCbHVyKCl7dGhpcy5zZXRDb21t'@;
put 'ZW50KCl9b25FZGl0b3JNb3VzZURvd24obCl7ZUEuZ2V0KHRoaXMpLnRlbXBFZGl0b3JEaW1lbnNpb25zPXt3aWR0aDp3YShsLnRhcmdldCksaGVpZ2h0OmFsKGwudGFyZ2V0KX19b25FZGl0b3JNb3VzZVVwKGwpe2NvbnN0IGE9ZUEuZ2V0KHRoaXMpLGQ9d2EobC50YXJnZXQpLGg9YWwobC50'@;
put 'YXJnZXQpOyhkIT09YS50ZW1wRWRpdG9yRGltZW5zaW9ucy53aWR0aCsxfHxoIT09YS50ZW1wRWRpdG9yRGltZW5zaW9ucy5oZWlnaHQrMikmJnRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtzdHlsZTp7d2lkdGg6ZCxoZWln'@;
put 'aHQ6aH19KX1vbkNvbnRleHRNZW51QWRkQ29tbWVudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEwLHRoaXMuZGlzcGxheVN3aXRjaC5jYW5jZWxIaWRpbmcoKSx0aGlzLnNldFJhbmdlKHtmcm9tOmwuaGln'@;
put 'aGxpZ2h0fSksdGhpcy5zaG93KCksdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5lZGl0b3IuZm9jdXMoKX1vbkNvbnRleHRNZW51UmVtb3ZlQ29tbWVudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEw'@;
put 'LGwuZm9yQWxsKChhLGQpPT57YT49MCYmZD49MCYmdGhpcy5yZW1vdmVDb21tZW50QXRDZWxsKGEsZCwhMSl9KSx0aGlzLmhvdC5yZW5kZXIoKX1vbkNvbnRleHRNZW51TWFrZVJlYWRPbmx5KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3RoaXMucHJldmVudEVk'@;
put 'aXRvckF1dG9Td2l0Y2g9ITAsbC5mb3JBbGwoKGEsZCk9PntpZihhPj0wJiZkPj0wKXtjb25zdCBoPSEhdGhpcy5nZXRDb21tZW50TWV0YShhLGQsdEEpO3RoaXMudXBkYXRlQ29tbWVudE1ldGEoYSxkLHtbdEFdOiFofSl9fSl9YWRkVG9Db250ZXh0TWVudShsKXtjb25zdCBhPSgpPT50aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpPjAmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk+MDtsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImNvbW1lbnRzQWRkRWRpdCIs'@;
put 'bmFtZTooKT0+dGhpcy5jaGVja1NlbGVjdGlvbkNvbW1lbnRzQ29uc2lzdGVuY3koKT90aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFZWKTp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKE5WKSxjYWxsYmFjazooKT0+dGhpcy5vbkNvbnRleHRNZW51QWRkQ29tbWVudCgpLGRpc2Fi'@;
put 'bGVkOigpPT4hYSgpfHwhKHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpJiYhdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX0se2tleToiY29tbWVudHNSZW1vdmUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEJWKX0sY2FsbGJhY2s6KCk9'@;
put 'PnRoaXMub25Db250ZXh0TWVudVJlbW92ZUNvbW1lbnQoKSxkaXNhYmxlZDooKT0+IWEoKXx8ISh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSYmIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHtrZXk6ImNvbW1lbnRzUmVhZE9ubHkiLG5hbWUoKXtsZXQgZD10'@;
put 'aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoalYpO3JldHVybiB5aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksKGYsXyk9PntsZXQgVD10aGlzLmdldENlbGxNZXRhKGYsXylbd2hdO2lmKFQmJihUPVRbdEFdKSxUKXJldHVybiEwfSkmJihkPVlmKGQpKSxkfSxjYWxsYmFjazooKT0+dGhp'@;
put 'cy5vbkNvbnRleHRNZW51TWFrZVJlYWRPbmx5KCksZGlzYWJsZWQ6KCk9PiFhKCl8fCEodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJnRoaXMuY2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCkpfSl9'@;
put 'Z2V0RGlzcGxheURlbGF5U2V0dGluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtial07aWYodXMobCkpcmV0dXJuIGwuZGlzcGxheURlbGF5fWRlc3Ryb3koKXt0aGlzLmVkaXRvciYmdGhpcy5lZGl0b3IuZGVzdHJveSgpLHRoaXMuZGlzcGxheVN3aXRjaCYmdGhpcy5kaXNw'@;
put 'bGF5U3dpdGNoLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fUYoMTYwMDEpO2NvbnN0IE5yZT1jbGFzcyBNUmV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9bCx0aGlzLmNvbW1hbmRzPXt9LHRoaXMuY29tbW9uQ2FsbGJhY2s9bnVsbH1yZWdpc3RlckNvbW1hbmQobCxhKXt0aGlzLmNvbW1h'@;
put 'bmRzW2xdPWF9c2V0Q29tbW9uQ2FsbGJhY2sobCl7dGhpcy5jb21tb25DYWxsYmFjaz1sfWV4ZWN1dGUobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO2NvbnN0IGY9bC5zcGxpdCgiOiIp'@;
put 'LF89ZlswXSxUPTI9PT1mLmxlbmd0aD9mWzFdOm51bGw7bGV0IFc9dGhpcy5jb21tYW5kc1tfXTtpZighVyl0aHJvdyBuZXcgRXJyb3IoYE1lbnUgY29tbWFuZCAnJHtffScgbm90IGV4aXN0cy5gKTtpZihUJiZXLnN1Ym1lbnUmJihXPWZ1bmN0aW9uIHhSZShjLGwpe2xldCBhO3JldHVybiBE'@;
put 'bihsLGQ9Pntjb25zdCBoPWQua2V5P2Qua2V5LnNwbGl0KCI6Iik6bnVsbDtpZihBcnJheS5pc0FycmF5KGgpJiZoWzFdPT09YylyZXR1cm4gYT1kLCExfSksYX0oVCxXLnN1Ym1lbnUuaXRlbXMpKSwhMD09PVcuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBXLmRpc2FibGVkJiYhMD09'@;
put 'PVcuZGlzYWJsZWQuY2FsbCh0aGlzLmhvdCl8fGJsKFcsInN1Ym1lbnUiKSlyZXR1cm47Y29uc3QgaWU9W107ImZ1bmN0aW9uIj09dHlwZW9mIFcuY2FsbGJhY2smJmllLnB1c2goVy5jYWxsYmFjayksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJhY2smJmllLnB1c2godGhp'@;
put 'cy5jb21tb25DYWxsYmFjayksZC51bnNoaWZ0KGYuam9pbigiOiIpKSxEbihpZSxwZT0+cGUuYXBwbHkodGhpcy5ob3QsZCkpfX0sdmQ9ImFsaWdubWVudCIsbkE9ImNsZWFyX2NvbHVtbiIsRHk9ImNvbF9sZWZ0IixJeT0iY29sX3JpZ2h0IixMeT0ibWFrZV9yZWFkX29ubHkiLHJBPSJyZWRv'@;
put 'IixSeT0icmVtb3ZlX2NvbCIsaUE9InJlbW92ZV9yb3ciLG9BPSJyb3dfYWJvdmUiLHNBPSJyb3dfYmVsb3ciLE95PSJub19pdGVtcyIsYUE9InVuZG8iLFZyZT1bb0Esc0EsRHksSXksbkEsaUEsUnksYUEsckEsTHksdmQsZ3MsT3ldLEJyZT17W2dzXTpmdW5jdGlvbiBjUmUoKXtyZXR1cm57'@;
put 'bmFtZTpnc319LFtPeV06ZnVuY3Rpb24gRlJlKCl7cmV0dXJue2tleTpPeSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfVil9LGRpc2FibGVkOiEwLGlzQ29tbWFuZDohMX19LFtvQV06ZnVuY3Rpb24gT1JlKCl7cmV0dXJue2tleTpvQSxuYW1lKCl7cmV0dXJuIHRo'@;
put 'aXMuZ2V0VHJhbnNsYXRlZFBocmFzZShiVil9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0Fib3ZlIil9LGRpc2FibGVk'@;
put 'KCl7cmV0dXJuIUlnKHRoaXMpfHwodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PXRoaXMuY291bnRSb3dzKCk6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuY291bnRSb3dzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dz'@;
put 'KX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbc0FdOmZ1bmN0aW9uIFBSZSgpe3JldHVybntrZXk6c0EsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeVYpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLmdldEJvdHRvbVJpZ2h0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QmVsb3ciKX0sZGlzYWJsZWQoKXtyZXR1cm4hSWcodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIo'@;
put 'KSYmKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmNvdW50Um93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW0R5XTpmdW5jdGlvbiBBUmUo'@;
put 'KXtyZXR1cm57a2V5OkR5LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHdWKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfZW5kIjoiaW5zZXJ0'@;
put 'X2NvbF9zdGFydCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtbkxlZnQiKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKXx8IUlnKHRoaXMpfHwodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09'@;
put 'PXRoaXMuY291bnRDb2xzKCk6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuY291bnRDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbSXld'@;
put 'OmZ1bmN0aW9uIFRSZSgpe3JldHVybntrZXk6SXksbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ1YpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcFJpZ2h0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9j'@;
put 'b2xfc3RhcnQiOiJpbnNlcnRfY29sX2VuZCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtblJpZ2h0Iil9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCl8fCFJZyh0aGlzKXx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0'@;
put 'ZWRCeUNvcm5lcigpJiYodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuY291bnRDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbbkFdOmZ1'@;
put 'bmN0aW9uIGtSZSgpe3JldHVybntrZXk6bkEsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQVYpfSxjYWxsYmFjayhjLGwpe2NvbnN0IGE9bFswXS5zdGFydC5jb2wsZD1sWzBdLmVuZC5jb2w7dGhpcy5jb3VudFJvd3MoKSYmdGhpcy5wb3B1bGF0ZUZyb21BcnJheSgw'@;
put 'LGEsW1tudWxsXV0sTWF0aC5tYXgobFswXS5zdGFydC5yb3csbFswXS5lbmQucm93KSxkLCJDb250ZXh0TWVudS5jbGVhckNvbHVtbiIpfSxkaXNhYmxlZCgpe3JldHVybiFJZyh0aGlzKXx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfX19LFtpQV06ZnVuY3Rp'@;
put 'b24gUlJlKCl7cmV0dXJue2tleTppQSxuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7bGV0IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEpbD0xO2Vsc2V7Y29uc3RbYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoU1YsbCl9LGNh'@;
put 'bGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX3JvdyIsZnVuY3Rpb24geERlKGMpe2NvbnN0IGw9ZzcoYyk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9d3kobCksZD1uZXcgU2V0O3JldHVybiBEbihjLF89Pntjb25zdFtULCxXXT1hKF8pLGllPU1hdGgubWF4KFQsMCk7RG4o'@;
put 'QXJyYXkuZnJvbShuZXcgQXJyYXkoVy1pZSsxKSwod2UsRWUpPT5pZStFZSksd2U9PntkLmhhcyh3ZSl8fGQuYWRkKHdlKX0pfSksQWwoQXJyYXkuZnJvbShkKS5zb3J0KChfLFQpPT5fLVQpLChfLFQsVyxpZSk9PigwIT09VyYmVD09PWllW1ctMV0rMT9fW18ubGVuZ3RoLTFdWzFdKz0xOl8u'@;
put 'cHVzaChbVCwxXSksXyksW10pfSh0aGlzLmdldFNlbGVjdGVkKCkpLDEsIkNvbnRleHRNZW51LnJlbW92ZVJvdyIpfSxkaXNhYmxlZCgpe2lmKCFJZyh0aGlzKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRSb3dzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZVJvd319fSxbUnldOmZ1bmN0aW9uIExSZSgpe3JldHVybntrZXk6UnksbmFtZSgpe2NvbnN0IGM9dGhp'@;
put 'cy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0WyxhLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNVixsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfY29sIixmdW5jdGlv'@;
put 'biBNRGUoYyl7Y29uc3QgbD1nNyhjKTtpZigwPT09bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT13eShsKSxkPW5ldyBTZXQ7cmV0dXJuIERuKGMsXz0+e2NvbnN0WyxULCxXXT1hKF8pLGllPU1hdGgubWF4KFQsMCk7RG4oQXJyYXkuZnJvbShuZXcgQXJyYXkoVy1pZSsxKSwod2UsRWUpPT5p'@;
put 'ZStFZSksd2U9PntkLmhhcyh3ZSl8fGQuYWRkKHdlKX0pfSksQWwoQXJyYXkuZnJvbShkKS5zb3J0KChfLFQpPT5fLVQpLChfLFQsVyxpZSk9PigwIT09VyYmVD09PWllW1ctMV0rMT9fW18ubGVuZ3RoLTFdWzFdKz0xOl8ucHVzaChbVCwxXSksXyksW10pfSh0aGlzLmdldFNlbGVjdGVkKCkp'@;
put 'LG51bGwsIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpfHwhSWcodGhpcykpcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Q29scygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD'@;
put 'b3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVDb2x1bW59fX0sW2FBXTpmdW5jdGlvbiBIUmUoKXtyZXR1cm57a2V5OmFBLG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHhWKX0sY2FsbGJhY2soKXt0aGlzLnVuZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVk'@;
put 'byIpLmlzVW5kb0F2YWlsYWJsZSgpfX19LFtyQV06ZnVuY3Rpb24gSVJlKCl7cmV0dXJue2tleTpyQSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShFVil9LGNhbGxiYWNrKCl7dGhpcy5yZWRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9S'@;
put 'ZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1JlZG9BdmFpbGFibGUoKX19fSxbTHldOmZ1bmN0aW9uIERSZSgpe3JldHVybntrZXk6THksbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBo'@;
put 'cmFzZShrVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eWgoYywoYSxkKT0+dGhpcy5nZXRDZWxs'@;
put 'TWV0YShhLGQpLnJlYWRPbmx5KTtEbihjLGE9PnthLmZvckFsbCgoZCxoKT0+e2Q+PTAmJmg+PTAmJnRoaXMuc2V0Q2VsbE1ldGEoZCxoLCJyZWFkT25seSIsIWwpfSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe3JldHVybiEoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpJiYwIT09dGhpcy5jb3VudFJvd3MoKSYmMCE9PXRoaXMuY291bnRDb2xzKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSxbdmRdOmZ1bmN0aW9uIEVSZSgpe3JldHVybntrZXk6dmQsbmFtZSgpe3JldHVybiB0aGlz'@;
put 'LmdldFRyYW5zbGF0ZWRQaHJhc2UoelYpfSxkaXNhYmxlZCgpe3JldHVybiAwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCl8fCEodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHN1Ym1lbnU6e2l0'@;
put 'ZW1zOlt7a2V5OmAke3ZkfTpsZWZ0YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFVWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4'@;
put 'T2YoImh0TGVmdCIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodExlZnQiO3RoaXMucnVuSG9v'@;
put 'a3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixfLFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06Y2VudGVyYCxuYW1lKCl7'@;
put 'bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFpWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0Q2VudGVyIikpcmV0dXJuITB9KSYmKGM9'@;
put 'WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0Q2VudGVyIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50Iixs'@;
put 'LGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7dmR9OnJpZ2h0YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhy'@;
put 'YXNlKFlWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0UmlnaHQiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBj'@;
put 'PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRSaWdodCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMu'@;
put 'Z2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke3ZkfTpqdXN0aWZ5YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFdWKTtyZXR1cm4geWgodGhpcy5nZXRT'@;
put 'ZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0SnVzdGlmeSIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCks'@;
put 'bD1MZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixf'@;
put 'LFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixfLFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6Z3N9LHtrZXk6YCR7dmR9OnRvcGAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShHVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChh'@;
put 'LGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodFRvcCIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MZyhjLChoLGYpPT50aGlzLmdl'@;
put 'dENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRUb3AiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixf'@;
put 'LFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06bWlkZGxlYCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKCRWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxk'@;
put 'KS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0TWlkZGxlIikpcmV0dXJuITB9KSYmKGM9WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZl'@;
put 'cnRpY2FsIixkPSJodE1pZGRsZSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVk'@;
put 'OiExfSx7a2V5OmAke3ZkfTpib3R0b21gLG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocVYpO3JldHVybiB5aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+e2NvbnN0IGg9dGhpcy5nZXRDZWxsTWV0YShhLGQpLmNsYXNzTmFtZTtpZihoJiYtMSE9PWguaW5k'@;
put 'ZXhPZigiaHRCb3R0b20iKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0Qm90dG9tIjt0aGlzLnJ1'@;
put 'bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24ganJlKCl7Y29u'@;
put 'c3QgYz17fTtyZXR1cm4gZHMoQnJlLChsLGEpPT57Y1thXT1sKCl9KSxjfWNvbnN0IHpyZT1jbGFzcyBOUmV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dGhpcy5ob3Q9bCx0aGlzLnByZWRl'@;
put 'ZmluZWRJdGVtcz1qcmUoKSx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm49YX1zZXRQcmVkZWZpbmVkSXRlbXMobCl7Y29uc3QgYT17fTt0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoPTAsZHMobCwoZCxoKT0+e2xldCBmPSIiO2QubmFtZT09PWdzPyhhW2dzXT1kLGY9Z3MpOmlzTmFO'@;
put 'KHBhcnNlSW50KGgsMTApKT8oZC5rZXk9dm9pZCAwPT09ZC5rZXk/aDpkLmtleSxhW2hdPWQsZj1kLmtleSk6KGFbZC5rZXldPWQsZj1kLmtleSksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goZil9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1hfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uIFZSZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBkPVtdO2xldCBoPWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBoJiZoLml0ZW1zP2g9aC5pdGVtczpBcnJheS5pc0FycmF5KGgpfHwoaD1sKSx1cyhoKT9kcyhoLChmLF8pPT57bGV0IFQ9YVsic3RyaW5nIj09dHlwZW9mIGY/ZjpfXTtUfHwoVD1mKSx1cyhmKT9Y'@;
put 'bChULGYpOiJzdHJpbmciPT10eXBlb2YgVCYmKFQ9e25hbWU6VH0pLHZvaWQgMD09PVQua2V5JiYoVC5rZXk9XyksZC5wdXNoKFQpfSk6RG4oaCwoZixfKT0+e2xldCBUPWFbZl07IVQmJlZyZS5pbmRleE9mKGYpPj0wfHwoVHx8KFQ9e25hbWU6ZixrZXk6YCR7X31gfSksdXMoZikmJlhsKFQs'@;
put 'Ziksdm9pZCAwPT09VC5rZXkmJihULmtleT1fKSxkLnB1c2goVCkpfSksZH0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19O2NsYXNzIGxBe2Nv'@;
put 'bnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9YXx8e3BhcmVudDpudWxsLG5hbWU6bnVsbCxjbGFzc05hbWU6IiIsa2VlcEluVmlld3BvcnQ6ITAsc3RhbmRhbG9uZTohMSxtaW5XaWR0aDoyMTUsY29udGFpbmVyOnRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVs'@;
put 'ZW1lbnR9LHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMubmFtZSksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5ob3RTdWJNZW51cz17fSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVu'@;
put 'dHx8bnVsbCx0aGlzLm1lbnVJdGVtcz1udWxsLHRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz1udWxsLHRoaXMua2V5RXZlbnQ9ITEsdGhpcy5vZmZzZXQ9e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0sdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1udWxsLHRoaXMucmVn'@;
put 'aXN0ZXJFdmVudHMoKX1yZWdpc3RlckV2ZW50cygpe2xldCBsPXRoaXMuaG90LnJvb3RXaW5kb3c7Zm9yKDtsOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsIm1vdXNlZG93biIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50'@;
put 'TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSksbD1leShsKX1zZXRNZW51SXRlbXMobCl7dGhpcy5tZW51SXRlbXM9bH1nZXRTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gdGhpcy5oYXNTZWxlY3Rl'@;
put 'ZEl0ZW0oKT90aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKVswXSk6bnVsbH1oYXNTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCkpfXNldE9mZnNldChsKXt0'@;
put 'aGlzLm9mZnNldFtsXT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MH1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVsbCE9PXRoaXMucGFyZW50TWVudX1vcGVuKCl7dmFyIGw9dGhpczt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU9wZW4iKSx0'@;
put 'aGlzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0IGE9bU4oRWU9PnRoaXMub3BlblN1Yk1lbnUoRWUpLDMwMCksZD10aGlzLm9wdGlvbnMubWluV2lkdGh8fDIxNTtsZXQgaD0hMSxmPV8xKHRoaXMu'@;
put 'bWVudUl0ZW1zLEVlPT4oRWUua2V5PT09T3kmJihoPSEwKSxmdW5jdGlvbiBnUmUoYyxsKXtyZXR1cm4hYy5oaWRkZW58fCEoImZ1bmN0aW9uIj09dHlwZW9mIGMuaGlkZGVuJiZjLmhpZGRlbi5jYWxsKGwpKX0oRWUsdGhpcy5ob3QpKSk7aWYoZi5sZW5ndGg8MSYmIWgpZi5wdXNoKGpyZSgp'@;
put 'W095XSk7ZWxzZSBpZigwPT09Zi5sZW5ndGgpcmV0dXJuO2Y9ZnVuY3Rpb24gX1JlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpncyxhPWMuc2xpY2UoMCk7cmV0dXJuIGE9UHJlKGEsbCksYT1mdW5jdGlvbiBtUmUoYyxs'@;
put 'KXtsZXQgYT1jLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPVByZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiB2UmUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gRG4oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3RoLTFdLm5hbWUhPT1hLm5hbWUmJmwucHVzaChhKTpsLnB1'@;
put 'c2goYSl9KSxsfShhKSxhfShmLGdzKTtsZXQgXz0hMTtjb25zdCBUPXtkYXRhOmYsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDpFZT0+S2koRWUpJiZFZTxkP2Q6RWUsYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZWRpdG9y'@;
put 'OiExLGNvcHlQYXN0ZTohMSxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5hbWUiLHJlbmRlcmVyOihFZSxaZSxpdCxldCx5dCxFdCk9PnRoaXMubWVudUl0ZW1SZW5kZXJlcihFZSxaZSxpdCxldCx5dCxFdCl9XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50U2VsZWN0aW9uOiExLG91dHNp'@;
put 'ZGVDbGlja0Rlc2VsZWN0czohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhZnRlck9uQ2VsbE1vdXNlT3ZlcjooRWUsWmUpPT57dGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCk/YShaZS5yb3cpOnRo'@;
put 'aXMub3BlblN1Yk1lbnUoWmUucm93KX0scm93SGVpZ2h0czpFZT0+ZltFZV0ubmFtZT09PWdzPzE6MjMsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpFZT0+e0VlLnByZXZlbnREZWZhdWx0KCksd04oKSYmXyYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5jbG9zZSghMCl9LGJlZm9yZU9u'@;
put 'Q2VsbE1vdXNlVXA6RWU9Pnt0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoXz0hdGhpcy5pc0NvbW1hbmRQYXNzaXZlKHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpLHRoaXMuZXhlY3V0ZUNvbW1hbmQoRWUpKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOkVlPT57KCF3TigpfHwhVXAoRWUpKSYmXyYmdGhp'@;
put 'cy5oYXNTZWxlY3RlZEl0ZW0oKSYmKG0yKCl8fHlOKCk/c2V0VGltZW91dCgoKT0+dGhpcy5jbG9zZSghMCksMzI1KTp0aGlzLmNsb3NlKCEwKSl9LGFmdGVyVW5saXN0ZW46KCk9PnshdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhvdE1lbnUubGlzdGVu'@;
put 'KCl9fTt0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9ITEsdGhpcy5ob3RNZW51PW5ldyBXQih0aGlzLmNvbnRhaW5lcixU'@;
put 'KSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+dGhpcy5vbkFmdGVySW5pdCgpKSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclNlbGVjdGlvbiguLi5hcmd1bWVudHMpfSksdGhpcy5ob3RNZW51Lmlu'@;
put 'aXQoKSx0aGlzLmhvdE1lbnUubGlzdGVuKCk7Y29uc3QgVz10aGlzLmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksaWU9Vy5hZGRDb250ZXh0KCJtZW51Iiksd2U9e2dyb3VwOiJtZW51IixydW5Pbmx5SWY6RWU9PiExPT09YXkoRWUudGFyZ2V0KXx8ITE9PT10aGlzLmNvbnRhaW5lci5j'@;
put 'b250YWlucyhFZS50YXJnZXQpfTtXLnNldEFjdGl2ZUNvbnRleHROYW1lKCJtZW51IiksaWUuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmtleUV2ZW50PSEwLHRoaXMuY2xvc2UoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siQXJyb3dE'@;
put 'b3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgRWU9dGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO3RoaXMua2V5RXZlbnQ9ITAsRWU/dGhpcy5zZWxlY3ROZXh0Q2VsbChFZVswXSxFZVsxXSk6dGhpcy5zZWxlY3RGaXJzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1si'@;
put 'QXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVlP3RoaXMuc2VsZWN0UHJldkNlbGwoRWVbMF0sRWVbMV0pOnRoaXMuc2VsZWN0TGFzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6'@;
put 'W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTtpZih0aGlzLmtleUV2ZW50PSEwLEVlKXtjb25zdCBaZT10aGlzLm9wZW5TdWJNZW51KEVlWzBdKTtaZSYmWmUuc2VsZWN0Rmlyc3RDZWxsKCl9dGhpcy5rZXlFdmVu'@;
put 'dD0hMX19LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVlJiZ0aGlzLmlzU3ViTWVudSgpJiYodGhpcy5jbG9zZSgpLHRoaXMucGFyZW50TWVudSYmdGhpcy5wYXJlbnRN'@;
put 'ZW51LmhvdE1lbnUubGlzdGVuKCkpLHRoaXMua2V5RXZlbnQ9ITF9fSx7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazpFZT0+e2NvbnN0IFplPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLHRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3coWmVb'@;
put 'MF0pLnN1Ym1lbnV8fCh0aGlzLmV4ZWN1dGVDb21tYW5kKEVlKSx0aGlzLmNsb3NlKCEwKSksdGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVl'@;
put 'P3RoaXMuaG90TWVudS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXRoaXMuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6dGhpcy5zZWxlY3RGaXJzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlz'@;
put 'LmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZT90aGlzLmhvdE1lbnUuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KHRoaXMuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6dGhpcy5zZWxlY3RMYXN0Q2VsbCgpLHRoaXMua2V5RXZlbnQ9ITF9fV0sd2Up'@;
put 'LHRoaXMuYmxvY2tNYWluVGFibGVDYWxsYmFja3MoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyT3BlbiIpfWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLmlzT3BlbmVkKCkmJihsJiZ0aGlzLnBhcmVu'@;
put 'dE1lbnU/dGhpcy5wYXJlbnRNZW51LmNsb3NlKCk6KHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMucmVsZWFzZU1haW5UYWJsZUNhbGxiYWNrcygpLHRoaXMuaG90TWVudS5kZXN0cm95KCksdGhpcy5ob3RNZW51PW51bGws'@;
put 'dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpLHRoaXMucGFyZW50TWVudSYmdGhpcy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCkpKX1vcGVu'@;
put 'U3ViTWVudShsKXtpZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIGRSZShjKXtyZXR1cm4gQm8oYywiaHRTdWJtZW51Iil9KGEpKXJldHVybiExO2NvbnN0IGQ9'@;
put 'dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxoPW5ldyBsQSh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9KTty'@;
put 'ZXR1cm4gaC5zZXRNZW51SXRlbXMoZC5zdWJtZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsaH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0'@;
put 'YUF0Um93KGwpLGQ9dGhpcy5ob3RTdWJNZW51c1thLmtleV07ZCYmKGQuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XSl9Y2xvc2VBbGxTdWJNZW51cygpe0RuKHRoaXMuaG90TWVudS5nZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1'@;
put 'Yk1lbnVzQ2xvc2VkKCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1'@;
put 'cm47Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lmKHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1bmN0aW9uIHVSZShjKXtyZXR1cm4g'@;
put 'Y3MoYyxsPT4oe3N0YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6bC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxI'@;
put 'b29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXNDb21tYW5kUGFzc2l2ZShsKXtjb25zdHtpc0NvbW1hbmQ6YSxuYW1lOmQsZGlzYWJsZWQ6aCxzdWJtZW51OmZ9PWwsXz0hMD09PWh8fCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYhMD09PWguY2FsbCh0aGlzLmhvdCk7cmV0dXJuITE9'@;
put 'PT1hfHxkPT09Z3N8fCEwPT09X3x8Zn1zZXRQb3NpdGlvbihsKXtjb25zdCBhPW5ldyBjbGFzcyBCUmV7Y29uc3RydWN0b3IobCxhKXtjb25zdCBkPXQ3KGEpLGg9bWcoYSk7bGV0IGYsXyxULFcsaWUscGU7dGhpcy5yb290V2luZG93PWEsdGhpcy50eXBlPXRoaXMuZ2V0U291cmNlVHlwZShs'@;
put 'KSwibGl0ZXJhbCI9PT10aGlzLnR5cGU/KGY9cGFyc2VJbnQobC50b3AsMTApLFQ9cGFyc2VJbnQobC5sZWZ0LDEwKSxpZT1sLmhlaWdodHx8MCxwZT1sLndpZHRofHwwLF89ZixXPVQsZis9ZCxUKz1oKToiZXZlbnQiPT09dGhpcy50eXBlJiYoZj1wYXJzZUludChsLnBhZ2VZLDEwKSxUPXBh'@;
put 'cnNlSW50KGwucGFnZVgsMTApLGllPWwudGFyZ2V0LmNsaWVudEhlaWdodCxwZT1sLnRhcmdldC5jbGllbnRXaWR0aCxfPWYtZCxXPVQtaCksdGhpcy50b3A9Zix0aGlzLnRvcFJlbGF0aXZlPV8sdGhpcy5sZWZ0PVQsdGhpcy5sZWZ0UmVsYXRpdmU9Vyx0aGlzLnNjcm9sbFRvcD1kLHRoaXMu'@;
put 'c2Nyb2xsTGVmdD1oLHRoaXMuY2VsbEhlaWdodD1pZSx0aGlzLmNlbGxXaWR0aD1wZX1nZXRTb3VyY2VUeXBlKGwpe2xldCBhPSJsaXRlcmFsIjtyZXR1cm4gbCBpbnN0YW5jZW9mIEV2ZW50JiYoYT0iZXZlbnQiKSxhfWZpdHNBYm92ZShsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZT49bC5v'@;
put 'ZmZzZXRIZWlnaHR9Zml0c0JlbG93KGwpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlK2wub2Zmc2V0SGVpZ2h0PD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lckhlaWdodCl9Zml0c09uUmlnaHQobCl7'@;
put 'cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlK3RoaXMuY2VsbFdpZHRoK2wub2Zmc2V0V2lkdGg8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5yb290V2luZG93LmlubmVyV2lkdGgpfWZpdHNPbkxlZnQobCl7cmV0dXJuIHRoaXMu'@;
put 'bGVmdFJlbGF0aXZlPj1sLm9mZnNldFdpZHRofX0obCx0aGlzLmNvbnRhaW5lci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KTt0aGlzLm9wdGlvbnMua2VlcEluVmlld3BvcnQ/KGEuZml0c0JlbG93KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSk6YS5m'@;
put 'aXRzQWJvdmUodGhpcy5jb250YWluZXIpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcihhKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSksdGhpcy5ob3QuaXNMdHIoKT90aGlzLnNldEhvcml6b250YWxQb3NpdGlvbkZvckx0cihhKTp0aGlzLnNldEhvcml6b250YWxQb3NpdGlv'@;
put 'bkZvclJ0bChhKSk6KHRoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcihhKSx0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKGEpKX1zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JSdGwobCl7bC5maXRzT25MZWZ0KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZD'@;
put 'dXJzb3IobCk6dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKX1zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JMdHIobCl7bC5maXRzT25SaWdodCh0aGlzLmNvbnRhaW5lcik/dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKTp0aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZD'@;
put 'dXJzb3IobCl9c2V0UG9zaXRpb25BYm92ZUN1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5hYm92ZStsLnRvcC10aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7dGhpcy5pc1N1Yk1lbnUoKSYmKGE9bC50b3ArbC5jZWxsSGVpZ2h0LXRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCszKSx0'@;
put 'aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9YCR7YX1weGB9c2V0UG9zaXRpb25CZWxvd0N1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5iZWxvdytsLnRvcCsxO3RoaXMuaXNTdWJNZW51KCkmJihhPWwudG9wLTEpLHRoaXMuY29udGFpbmVyLnN0eWxlLnRvcD1gJHthfXB4YH1zZXRQb3NpdGlv'@;
put 'bk9uUmlnaHRPZkN1cnNvcihsKXtsZXQgYT1sLmxlZnQ7aWYodGhpcy5pc1N1Yk1lbnUoKSl7Y29uc3R7cmlnaHQ6ZH09dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthKz1sLmNlbGxXaWR0aCtkLShsLmxlZnQrbC5jZWxsV2lkdGgpfWVsc2UgYSs9'@;
put 'dGhpcy5vZmZzZXQucmlnaHQ7dGhpcy5jb250YWluZXIuc3R5bGUubGVmdD1gJHthfXB4YH1zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKGwpe2xldCBhPXRoaXMub2Zmc2V0LmxlZnQrbC5sZWZ0LXRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO2lmKHRoaXMuaXNTdWJNZW51KCkpe2NvbnN0'@;
put 'e2xlZnQ6ZH09dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLT1sLmxlZnQtZH10aGlzLmNvbnRhaW5lci5zdHlsZS5sZWZ0PWAke2F9cHhgfXNlbGVjdEZpcnN0Q2VsbCgpe2NvbnN0IGw9dGhpcy5ob3RNZW51LmdldENlbGwoMCwwKTtYayhsKXx8'@;
put 'SmsobCl8fFFrKGwpP3RoaXMuc2VsZWN0TmV4dENlbGwoMCwwKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbCgwLDApfXNlbGVjdExhc3RDZWxsKCl7Y29uc3QgbD10aGlzLmhvdE1lbnUuY291bnRSb3dzKCktMSxhPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7WGsoYSl8fEprKGEpfHxRayhh'@;
put 'KT90aGlzLnNlbGVjdFByZXZDZWxsKGwsMCk6KHRoaXMuaG90TWVudS5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLCExKSx0aGlzLmhvdE1lbnUuc2Nyb2xsVmlld3BvcnRUbyhsLDAsITAsITEpKX1zZWxlY3ROZXh0Q2VsbChsLGEpe2NvbnN0IGQ9bCsxLGg9ZDx0aGlzLmhvdE1lbnUu'@;
put 'Y291bnRSb3dzKCk/dGhpcy5ob3RNZW51LmdldENlbGwoZCxhKTpudWxsO2gmJihYayhoKXx8SmsoaCl8fFFrKGgpP3RoaXMuc2VsZWN0TmV4dENlbGwoZCxhKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChkLGEpKX1zZWxlY3RQcmV2Q2VsbChsLGEpe2NvbnN0IGQ9bC0xLGg9ZD49MD90aGlz'@;
put 'LmhvdE1lbnUuZ2V0Q2VsbChkLGEpOm51bGw7aCYmKFhrKGgpfHxKayhoKXx8UWsoaCk/dGhpcy5zZWxlY3RQcmV2Q2VsbChkLGEpOnRoaXMuaG90TWVudS5zZWxlY3RDZWxsKGQsYSkpfW1lbnVJdGVtUmVuZGVyZXIobCxhLGQsaCxmLF8pe2NvbnN0IFQ9bC5nZXRTb3VyY2VEYXRhQXRSb3co'@;
put 'ZCksVz10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksRWU9aXQ9Pml0LmRpc2FibGVTZWxlY3Rpb247bGV0IFplPV87dmFyIGl0OyJmdW5jdGlvbiI9PXR5cGVvZiBaZSYmKFplPVplLmNhbGwodGhpcy5ob3QpKSxnMihhKSxwaShXLCJodEl0ZW1XcmFwcGVyIiks'@;
put 'YS5hcHBlbmRDaGlsZChXKSxpdD1ULG5ldyBSZWdFeHAoZ3MsImkiKS50ZXN0KGl0Lm5hbWUpP3BpKGEsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIFQucmVuZGVyZXI/KHBpKGEsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiksYS5hcHBlbmRDaGlsZChULnJlbmRlcmVyKGwsVyxk'@;
put 'LGgsZixaZSkpKTpnZyhXLFplKSwoaXQ9PiEwPT09aXQuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBpdC5kaXNhYmxlZCYmITA9PT1pdC5kaXNhYmxlZC5jYWxsKHRoaXMuaG90KSkoVCk/KHBpKGEsImh0RGlzYWJsZWQiKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVy'@;
put 'KGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKSk6RWUoVCk/KHBpKGEsImh0U2VsZWN0aW9uRGlzYWJsZWQiKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKSk6KGl0PT5ibChpdCwic3VibWVu'@;
put 'dSIpKShUKT8ocGkoYSwiaHRTdWJtZW51IiksRWUoVCk/dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVjdENlbGwoKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5zZWxl'@;
put 'Y3RDZWxsKGQsaCx2b2lkIDAsdm9pZCAwLCExLCExKSkpOihXbyhhLFsiaHRTdWJtZW51IiwiaHREaXNhYmxlZCJdKSxFZShUKT90aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKTp0aGlzLmV2ZW50TWFuYWdlci5h'@;
put 'ZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLnNlbGVjdENlbGwoZCxoLHZvaWQgMCx2b2lkIDAsITEsITEpKSl9Y3JlYXRlQ29udGFpbmVyKCl7Y29uc3QgYT10aGlzLm9wdGlvbnMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7bGV0IGgsZD1hcmd1bWVudHMubGVuZ3RoPjAm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZCYmKFJhKGQpJiYoZD1kLmNhbGwodGhpcy5ob3QpLGQ9bnVsbD09PWR8fExhKGQpPyIiOmQudG9TdHJpbmcoKSksZD1kLnJlcGxhY2UoL1teQS16MC05XS9nLCJfIiksZD1gJHt0aGlzLm9wdGlvbnMuY2xh'@;
put 'c3NOYW1lfVN1Yl8ke2R9YCxoPWEucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX0uJHtkfWApKSxofHwoaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHBpKGgsYGh0TWVudSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksZCYmcGkoaCxkKSx0aGlzLm9wdGlvbnMu'@;
put 'Y29udGFpbmVyLmFwcGVuZENoaWxkKGgpKSxofWJsb2NrTWFpblRhYmxlQ2FsbGJhY2tzKCl7dGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1mdW5jdGlvbigpe30sdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlz'@;
put 'LmhvdC5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayl9cmVsZWFzZU1haW5UYWJsZUNhbGxiYWNrcygpe3RoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2smJih0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHki'@;
put 'LHRoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2spLHRoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrPW51bGwpfW9uQWZ0ZXJJbml0KCl7Y29uc3R7d3RUYWJsZTpsfT10'@;
put 'aGlzLmhvdE1lbnUudmlldy5fd3QsYT10aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhLGQ9bC5oaWRlci5zdHlsZSxoPWwuaG9sZGVyLnN0eWxlLGY9cGFyc2VJbnQoZC53aWR0aCwxMCksXz1BbChhLChULFcpPT5UKyhXLm5hbWU9PT1ncz8xOjI2KSwwKTtoLndpZHRoPWAke2YrM31w'@;
put 'eGAsaC5oZWlnaHQ9YCR7XyszfXB4YCxkLmhlaWdodD1oLmhlaWdodH1vbkFmdGVyU2VsZWN0aW9uKGwsYSxkLGgsZil7ITE9PT10aGlzLmtleUV2ZW50JiYoZi52YWx1ZT0hMCl9b25Eb2N1bWVudE1vdXNlRG93bihsKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLm9wdGlvbnMuc3RhbmRhbG9u'@;
put 'ZSYmdGhpcy5ob3RNZW51JiYhVnAobC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KXx8KHRoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpfHx0aGlzLmlzU3ViTWVudSgpKSYmIVZwKGwudGFyZ2V0LCIuaHRNZW51IikpJiZ0aGlzLmNsb3NlKCEwKX1vbkRvY3VtZW50Q29udGV4dE1l'@;
put 'bnUobCl7dGhpcy5pc09wZW5lZCgpJiZCbyhsLnRhcmdldCwiaHRDb3JlIikmJlZwKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCkmJmwucHJldmVudERlZmF1bHQoKX19VGEobEEsTzApO2NvbnN0IHlqPWxBLGNBPSJjb250ZXh0TWVudSI7c28uZ2V0U2luZ2xldG9uKCkucmVn'@;
put 'aXN0ZXIoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb250ZXh0TWVudVNob3ciKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudVNob3ciKSxzby5nZXRTaW5nbGV0b24oKS5yZWdp'@;
put 'c3RlcigiYWZ0ZXJDb250ZXh0TWVudUhpZGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUV4ZWN1dGUiKTtsZXQgWlJlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gY0F9c3RhdGljIGdldCBQTFVH'@;
put 'SU5fUFJJT1JJVFkoKXtyZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW29BLHNBLGdzLER5LEl5LGdzLGlBLFJ5LGdzLGFBLHJBLGdzLEx5LGdzLHZkXX1jb25z'@;
put 'dHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5jb21tYW5kRXhlY3V0b3I9bmV3IE5yZSh0aGlzLmhvdCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCx0aGlzLm1lbnU9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbY0FdfWVuYWJsZVBsdWdpbigpe3ZhciBhPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbY0FdOyJmdW5jdGlvbiI9PXR5cGVvZiBkLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhk'@;
put 'LmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3IHlqKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0Q29udGV4dE1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjpkLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9y'@;
put 'ZU9wZW4iLCgpPT50aGlzLm9uTWVudUJlZm9yZU9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5vbk1lbnVBZnRlck9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25NZW51QWZ0ZXJDbG9zZSgpKSx0'@;
put 'aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gYS5leGVjdXRlQ29tbWFuZC5jYWxsKGEsLi4uZil9KSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGg9PnRoaXMub25BZnRlck9uQ2VsbENvbnRleHRNZW51KGgpKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdp'@;
put 'bigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW9wZW4oYSl7aWYoIXRoaXMubWVudXx8KHRoaXMucHJlcGFyZU1lbnVJdGVtcygpLHRoaXMubWVudS5vcGVu'@;
put 'KCksIXRoaXMubWVudS5pc09wZW5lZCgpKSlyZXR1cm47bGV0IGQ9MCxoPTA7aWYodGhpcy5ob3Qucm9vdERvY3VtZW50IT09dGhpcy5tZW51LmNvbnRhaW5lci5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6Zn09dGhpcy5ob3Qucm9vdFdpbmRvdyx7dG9wOl8sbGVmdDpUfT1m'@;
put 'LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Q9Xy10NyhhLnZpZXcpLGg9VC1tZyhhLnZpZXcpfWVsc2UgZD0tMSp0Nyh0aGlzLm1lbnUuaG90TWVudS5yb290V2luZG93KSxoPS0xKm1nKHRoaXMubWVudS5ob3RNZW51LnJvb3RXaW5kb3cpO3RoaXMubWVudS5zZXRQb3NpdGlvbih7dG9wOnBh'@;
put 'cnNlSW50KGEucGFnZVksMTApK2QsbGVmdDpwYXJzZUludChhLnBhZ2VYLDEwKStofSl9Y2xvc2UoKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUuY2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsKX1leGVjdXRlQ29tbWFuZChhKXtudWxsPT09dGhpcy5pdGVtc0ZhY3RvcnkmJnRoaXMucHJl'@;
put 'cGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+MT9kLTE6MCksZj0xO2Y8ZDtmKyspaFtmLTFdPWFyZ3VtZW50c1tmXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGEsLi4uaCl9cHJlcGFyZU1lbnVJdGVtcygpe3RoaXMuaXRlbXNG'@;
put 'YWN0b3J5PW5ldyB6cmUodGhpcy5ob3QsYy5ERUZBVUxUX0lURU1TKTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbY0FdLGQ9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpfTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25z'@;
put 'IixkKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoZC5pdGVtcyk7Y29uc3QgaD10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsaCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhoKSxE'@;
put 'bihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChmLmtleSxmKSl9b25BZnRlck9uQ2VsbENvbnRleHRNZW51KGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxoPWQucm93SGVhZGVycyxmPWQuY29sSGVhZGVycyxUPWEudGFyZ2V0O3RoaXMuY2xvc2Uo'@;
put 'KSwhQm8oVCwiaGFuZHNvbnRhYmxlSW5wdXQiKSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLChofHxmfHxmdW5jdGlvbiBfKFcpe3JldHVybiJURCI9PT1XLm5vZGVOYW1lfHwiVEQiPT09Vy5wYXJlbnROb2RlLm5vZGVOYW1lfShUKXx8Qm8oVCwiY3VycmVudCIp'@;
put 'JiZCbyhULCJ3dEJvcmRlciIpKSYmdGhpcy5vcGVuKGEpKX1vbk1lbnVCZWZvcmVPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVTaG93Iix0aGlz'@;
put 'KX1vbk1lbnVBZnRlckNsb3NlKCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVIaWRlIix0aGlzKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fXJldHVybiBj'@;
put 'LlNFUEFSQVRPUj17bmFtZTpnc30sY30pKCk7Y2xhc3MgS1Jle2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhPXt9fXNldERhdGEobCxhKXt0aGlzLmRhdGFbbF09YX1nZXREYXRhKGwpe3JldHVybiB0aGlzLmRhdGFbbF18fHZvaWQgMH19Y2xhc3MgWFJle2NvbnN0cnVjdG9yKCl7dGhpcy5jbGlw'@;
put 'Ym9hcmREYXRhPW5ldyBLUmV9fWNsYXNzIHdqe2NvbnN0cnVjdG9yKGwpe3RoaXMucm9vdERvY3VtZW50PWwuZGVmYXVsdFZpZXc/bDpsLm93bmVyRG9jdW1lbnQsdGhpcy5tYWluRWxlbWVudD1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmxpc3RlbmVyc0NvdW50'@;
put 'PW5ldyBXZWFrU2V0LHRoaXMuY29udGFpbmVyPWx9dXNlU2Vjb25kYXJ5RWxlbWVudCgpe2NvbnN0IGw9ZnVuY3Rpb24gZU9lKGMpe2NvbnN0IGw9ZEEuZ2V0KGMpO2lmKGwpcmV0dXJuIGwucGFyZW50RWxlbWVudHx8Yy5hcHBlbmRDaGlsZChsKSxsO2NvbnN0IGQ9KGMuZGVmYXVsdFZpZXc/'@;
put 'YzpjLm93bmVyRG9jdW1lbnQpLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGRBLnNldChjLGQpLGQuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLGQuY2xhc3NOYW1lPSJIYW5kc29udGFibGVDb3B5UGFzdGUiLGQudGFiSW5kZXg9LTEsZC5hdXRvY29tcGxldGU9'@;
put 'Im9mZiIsZC53cmFwPSJoYXJkIixkLnZhbHVlPSIgIixjLmFwcGVuZENoaWxkKGQpLGR9KHRoaXMuY29udGFpbmVyKTt0aGlzLmxpc3RlbmVyc0NvdW50LmhhcyhsKXx8KHRoaXMubGlzdGVuZXJzQ291bnQuYWRkKGwpLFlyZSh0aGlzLmV2ZW50TWFuYWdlcixsLHRoaXMpKSx0aGlzLm1haW5F'@;
put 'bGVtZW50PWx9c2V0Rm9jdXNhYmxlRWxlbWVudChsKXt0aGlzLmxpc3RlbmVyc0NvdW50LmhhcyhsKXx8KHRoaXMubGlzdGVuZXJzQ291bnQuYWRkKGwpLFlyZSh0aGlzLmV2ZW50TWFuYWdlcixsLHRoaXMpKSx0aGlzLm1haW5FbGVtZW50PWx9Z2V0Rm9jdXNhYmxlRWxlbWVudCgpe3JldHVy'@;
put 'biB0aGlzLm1haW5FbGVtZW50fWZvY3VzKCl7dGhpcy5tYWluRWxlbWVudC52YWx1ZT0iICIsbTIoKXx8ZnRlKHRoaXMubWFpbkVsZW1lbnQpfX1UYSh3aixPMCk7Y29uc3QgdUE9bmV3IFdlYWtNYXAsQ2o9KGMsbCk9PmE9PmwucnVuTG9jYWxIb29rcyhjLGEpO2Z1bmN0aW9uIFlyZShjLGws'@;
put 'YSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsImNvcHkiLENqKCJjb3B5IixhKSksYy5hZGRFdmVudExpc3RlbmVyKGwsImN1dCIsQ2ooImN1dCIsYSkpLGMuYWRkRXZlbnRMaXN0ZW5lcihsLCJwYXN0ZSIsQ2ooInBhc3RlIixhKSl9Y29uc3QgZEE9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gV3JlKGMp'@;
put 'e2lmKCEoYyBpbnN0YW5jZW9mIHdqKSlyZXR1cm47bGV0IGw9dUEuZ2V0KGMuY29udGFpbmVyKTtpZihsPWlzTmFOKGwpPzA6bCxsPjAmJihsLT0xKSxmdW5jdGlvbiBRUmUoYyl7Yy5ldmVudE1hbmFnZXIuY2xlYXIoKX0oYyksbDw9MCl7bD0wO2NvbnN0IGE9ZEEuZ2V0KGMuY29udGFpbmVy'@;
put 'KTthJiZhLnBhcmVudE5vZGUmJihhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksZEEuZGVsZXRlKGMuY29udGFpbmVyKSksYy5tYWluRWxlbWVudD1udWxsfXVBLnNldChjLmNvbnRhaW5lcixsKX1mdW5jdGlvbiBHcmUoYyxsKXskcmUoYyxsKSxsLmFkZChjKX1mdW5jdGlvbiBFNyhjLGws'@;
put 'YSl7JHJlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiAkcmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGhBKGMsbCxhKXtpZighbC5o'@;
put 'YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIHF1KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHRPZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMs'@;
put 'cXJlKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIGs3KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gbk9lKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZp'@;
put 'ZWxkIik7bC52YWx1ZT1hfX0oYyxxcmUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIHFyZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIg'@;
put 'WHA9bmV3IFdlYWtNYXAsU2o9bmV3IFdlYWtNYXAsUHk9bmV3IFdlYWtNYXAsTWo9bmV3IFdlYWtNYXAseGo9bmV3IFdlYWtNYXAsRnk9bmV3IFdlYWtNYXAsZkE9bmV3IFdlYWtTZXQsS3JlPW5ldyBXZWFrU2V0O2NsYXNzIHJPZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y291bnRSb3dzOmEsY291'@;
put 'bnRDb2x1bW5zOmQscm93c0xpbWl0OmgsY29sdW1uc0xpbWl0OmYsY291bnRDb2x1bW5IZWFkZXJzOl99PWw7R3JlKHRoaXMsS3JlKSxHcmUodGhpcyxmQSksRTcodGhpcyxYcCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxTaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAw'@;
put 'fSksRTcodGhpcyxQeSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxNaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyx4aix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxGeSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksazcodGhp'@;
put 'cyxTaixhKSxrNyh0aGlzLFB5LGQpLGs3KHRoaXMsTWosaCksazcodGhpcyx4aixmKSxrNyh0aGlzLEZ5LF8pfXNldFNlbGVjdGVkUmFuZ2UobCl7azcodGhpcyxYcCxsKX1nZXRDZWxsc1JhbmdlKCl7aWYoMD09PXF1KHRoaXMsU2opLmNhbGwodGhpcyl8fDA9PT1xdSh0aGlzLFB5KS5jYWxs'@;
put 'KHRoaXMpKXJldHVybiBudWxsO2NvbnN0e3JvdzpsLGNvbDphfT1xdSh0aGlzLFhwKS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6ZCxjb2w6aH09cXUodGhpcyxYcCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj1oQSh0aGlzLEtyZSxpT2UpLmNhbGwodGhpcyxsLGQpLF89aEEodGhpcyxmQSxF'@;
put 'aikuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09XyxzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOl99fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09cXUodGhpcyxQeSkuY2FsbCh0aGlzKXx8MD09PXF1'@;
put 'KHRoaXMsRnkpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PXF1KHRoaXMsWHApLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1xdSh0aGlzLFhwKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPWhBKHRoaXMsZkEsRWopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1Jhbmdl'@;
put 'VHJpbW1lZDphIT09ZCxzdGFydFJvdzotMSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PXF1KHRoaXMsUHkpLmNhbGwodGhpcyl8fDA9PT1xdSh0aGlzLEZ5KS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDps'@;
put 'fT1xdSh0aGlzLFhwKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09cXUodGhpcyxYcCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD1oQSh0aGlzLGZBLEVqKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LXF1KHRoaXMsRnkpLmNhbGwodGhp'@;
put 'cyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fX1mdW5jdGlvbiBFaihjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrcXUodGhpcyx4aikuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBpT2UoYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK3F1KHRoaXMs'@;
put 'TWopLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gWHJlKGMpe2NvbnN0IGw9W10sYT1bXTtyZXR1cm4gRG4oYyxkPT57dm8oTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJvdyksVz0+ey0xPT09bC5pbmRleE9mKFcpJiZsLnB1c2goVyl9'@;
put 'KSx2byhNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5kQ29sKSxNYXRoLm1heChkLnN0YXJ0Q29sLGQuZW5kQ29sKSxXPT57LTE9PT1hLmluZGV4T2YoVykmJmEucHVzaChXKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9uIFJnKGMsbCxhKXtKcmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0'@;
put 'aW9uIEpyZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQTcoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHNPZShjKXt2YXIgbD1mdW5j'@;
put 'dGlvbiBhT2UoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBiMShjLGwpe3JldHVybiBmdW5jdGlvbiBjT2UoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLFFy'@;
put 'ZShjLGwsImdldCIpKX1mdW5jdGlvbiBXZihjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIHVPZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVs'@;
put 'ZCIpO2wudmFsdWU9YX19KGMsUXJlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBRcmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9c28uZ2V0'@;
put 'U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weUxpbWl0Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ3V0Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ3V0'@;
put 'Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVBhc3RlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUGFzdGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29weSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHki'@;
put 'KTtjb25zdCBwQT0iY29weVBhc3RlIixoT2U9WyJmcmFnbWVudFNlbGVjdGlvbiJdLGVpZT1bJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iSGFuZHNvbnRhYmxlIi8+JywnPHN0eWxlIHR5cGU9InRleHQvY3NzIj50ZHt3aGl0ZS1zcGFjZTpub3JtYWx9YnJ7bXNvLWRhdGEtcGxh'@;
put 'Y2VtZW50OnNhbWUtY2VsbH08L3N0eWxlPiddLmpvaW4oIiIpO3ZhciBraj1uZXcgV2Vha01hcCxBaj1uZXcgV2Vha01hcCxUaj1uZXcgV2Vha01hcCxUNz1uZXcgV2Vha01hcCxnQT1uZXcgV2Vha01hcCxtQT1uZXcgV2Vha01hcCxENz1uZXcgV2Vha01hcCx0aWU9bmV3IFdlYWtTZXQ7Y2xh'@;
put 'c3MgZk9lIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG9PZShjLGwpe0pyZShjLGwpLGwuYWRkKGMpfSh0aGlzLHRpZSksQTcodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLEE3KHRoaXMsInJvd3NMaW1pdCIsMS8wKSxBNyh0aGlzLCJwYXN0'@;
put 'ZU1vZGUiLCJvdmVyd3JpdGUiKSxBNyh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpLFJnKHRoaXMsa2ose3dyaXRhYmxlOiEwLHZhbHVlOiExfSksUmcodGhpcyxBaix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxSZyh0aGlzLFRqLHt3cml0YWJsZTohMCx2'@;
put 'YWx1ZTohMX0pLFJnKHRoaXMsVDcse3dyaXRhYmxlOiEwLHZhbHVlOiJjZWxscy1vbmx5In0pLFJnKHRoaXMsZ0Ese3dyaXRhYmxlOiEwLHZhbHVlOiExfSksUmcodGhpcyxtQSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxSZyh0aGlzLEQ3LHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgck9lKHtj'@;
put 'b3VudFJvd3M6KCk9PnRoaXMuaG90LmNvdW50Um93cygpLGNvdW50Q29sdW1uczooKT0+dGhpcy5ob3QuY291bnRDb2xzKCkscm93c0xpbWl0OigpPT50aGlzLnJvd3NMaW1pdCxjb2x1bW5zTGltaXQ6KCk9PnRoaXMuY29sdW1uc0xpbWl0LGNvdW50Q29sdW1uSGVhZGVyczooKT0+dGhpcy5o'@;
put 'b3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0pfSksQTcodGhpcywiY29weWFibGVSYW5nZXMiLFtdKSxBNyh0aGlzLCJmb2N1c2FibGVFbGVtZW50Iix2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwQX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVy'@;
put 'bltwQSwuLi5oT2VdfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDgwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwQV19ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtbcEFdOmx9PXRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKCk7dmFyIGEsZDsib2JqZWN0Ij09dHlwZW9mIGwmJih0aGlzLnBhc3RlTW9kZT1udWxsIT09KGE9bC5wYXN0ZU1vZGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4obC5yb3dzTGltaXQpP3RoaXMucm93c0xpbWl0Omwucm93c0xpbWl0'@;
put 'LHRoaXMuY29sdW1uc0xpbWl0PWlzTmFOKGwuY29sdW1uc0xpbWl0KT90aGlzLmNvbHVtbnNMaW1pdDpsLmNvbHVtbnNMaW1pdCxXZih0aGlzLGtqLCEhbC5jb3B5Q29sdW1uSGVhZGVycyksV2YodGhpcyxBaiwhIWwuY29weUNvbHVtbkdyb3VwSGVhZGVycyksV2YodGhpcyxUaiwhIWwuY29w'@;
put 'eUNvbHVtbkhlYWRlcnNPbmx5KSx0aGlzLnVpQ29udGFpbmVyPW51bGwhPT0oZD1sLnVpQ29udGFpbmVyKSYmdm9pZCAwIT09ZD9kOnRoaXMudWlDb250YWluZXIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixoPT50aGlzLm9uQWZ0ZXJDb250ZXh0TWVu'@;
put 'dURlZmF1bHRPcHRpb25zKGgpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VVcCIsKCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlVXAoKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PnRoaXMub25BZnRlclNlbGVjdGlvbkVuZCgpKSx0aGlzLmFkZEhvb2so'@;
put 'ImJlZm9yZUtleURvd24iLCgpPT50aGlzLm9uQmVmb3JlS2V5RG93bigpKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9ZnVuY3Rpb24gSlJlKGMpe2NvbnN0IGw9bmV3IHdqKGMpO2xldCBhPXVBLmdldChjKTtyZXR1cm4gYT1pc05hTihhKT8wOmEsdUEuc2V0KGMsYSsxKSxsfSh0aGlzLnVpQ29u'@;
put 'dGFpbmVyKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuYWRkTG9jYWxIb29rKCJjb3B5IixoPT50aGlzLm9uQ29weShoKSkuYWRkTG9jYWxIb29rKCJjdXQiLGg9PnRoaXMub25DdXQoaCkpLmFkZExvY2FsSG9vaygicGFzdGUiLGg9PnRoaXMub25QYXN0ZShoKSksc3VwZXIuZW5hYmxlUGx1Z2lu'@;
put 'KCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmZvY3VzYWJsZUVsZW1lbnQmJldyZSh0aGlzLmZv'@;
put 'Y3VzYWJsZUVsZW1lbnQpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1jb3B5KCl7V2YodGhpcyxUNyxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNlbGxzLW9ubHkiKSxXZih0aGlzLGdBLCEwKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxl'@;
put 'RWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpLHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpfWNvcHlDZWxsc09ubHkoKXt0aGlzLmNvcHkoImNlbGxzLW9ubHkiKX1jb3B5Q29sdW1uSGVhZGVyc09ubHkoKXt0aGlzLmNvcHkoImNvbHVtbi1o'@;
put 'ZWFkZXJzLW9ubHkiKX1jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiKX1jb3B5V2l0aENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWhlYWRlcnMiKX1jdXQoKXtXZih0aGlzLG1BLCEwKSx0aGlzLmdl'@;
put 'dE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpLHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKGwpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlZERhdGEobCkpfWdldFJhbmdl'@;
put 'ZERhdGEobCl7Y29uc3QgYT1bXSx7cm93czpkLGNvbHVtbnM6aH09WHJlKGwpO3JldHVybiBEbihkLGY9Pntjb25zdCBfPVtdO0RuKGgsVD0+e18ucHVzaChmPDA/dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKFQsZik6dGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGYsVCkpfSksYS5wdXNoKF8pfSks'@;
put 'YX1wYXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29uc3QgZD1uZXcgWFJl'@;
put 'O2wmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixhKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMub25QYXN0ZShkKX1zZXRDb3B5YWJsZVRleHQoKXtjb25zdCBsPXRo'@;
put 'aXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2IxKHRoaXMsRDcpLnNldFNlbGVjdGVkUmFuZ2UobCk7Y29uc3QgYT1uZXcgTWFwKFtbImhlYWRlcnMiLG51bGxdLFsiY2VsbHMiLG51bGxdXSk7ImNvbHVtbi1oZWFkZXJzLW9ubHkiPT09YjEodGhpcyxUNyk/YS5z'@;
put 'ZXQoImhlYWRlcnMiLGIxKHRoaXMsRDcpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIj09PWIxKHRoaXMsVDcpP2Euc2V0KCJoZWFkZXJzIixiMSh0aGlzLEQ3KS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOiJ3aXRo'@;
put 'LWNvbHVtbi1ncm91cC1oZWFkZXJzIj09PWIxKHRoaXMsVDcpJiZhLnNldCgiaGVhZGVycyIsYjEodGhpcyxENykuZ2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCkpLGEuc2V0KCJjZWxscyIsYjEodGhpcyxENykuZ2V0Q2VsbHNSYW5nZSgpKSksdGhpcy5jb3B5YWJsZVJhbmdlcz1BcnJheS5m'@;
put 'cm9tKGEudmFsdWVzKCkpLmZpbHRlcihoPT5udWxsIT09aCkubWFwKGg9PntsZXR7c3RhcnRSb3c6ZixzdGFydENvbDpfLGVuZFJvdzpULGVuZENvbDpXfT1oO3JldHVybntzdGFydFJvdzpmLHN0YXJ0Q29sOl8sZW5kUm93OlQsZW5kQ29sOld9fSksdGhpcy5jb3B5YWJsZVJhbmdlcz10aGlz'@;
put 'LmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhpcy5jb3B5YWJsZVJhbmdlcyk7Y29uc3QgZD1hLmdldCgiY2VsbHMiKTtpZihudWxsIT09ZCYmZC5pc1JhbmdlVHJpbW1lZCl7Y29uc3R7c3RhcnRSb3c6aCxzdGFydENvbDpmLGVuZFJvdzpfLGVuZENvbDpUfT1kO3RoaXMu'@;
put 'aG90LnJ1bkhvb2tzKCJhZnRlckNvcHlMaW1pdCIsXy1oKzEsVC1mKzEsdGhpcy5yb3dzTGltaXQsdGhpcy5jb2x1bW5zTGltaXQpfX1nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQg'@;
put 'MD09PWw/dm9pZCAwOmwuVEVYVEFSRUE7YT90aGlzLmZvY3VzYWJsZUVsZW1lbnQuc2V0Rm9jdXNhYmxlRWxlbWVudChhKTp0aGlzLmZvY3VzYWJsZUVsZW1lbnQudXNlU2Vjb25kYXJ5RWxlbWVudCgpfWlzRWRpdG9yT3BlbmVkKCl7dmFyIGw7cmV0dXJuIG51bGw9PT0obD10aGlzLmhvdC5n'@;
put 'ZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNPcGVuZWQoKX1wb3B1bGF0ZVZhbHVlcyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigh'@;
put 'bC5sZW5ndGgpcmV0dXJuO2NvbnN0IGQ9bC5sZW5ndGgsaD1sWzBdLmxlbmd0aCxmPVtdLHtyb3c6Xyxjb2w6VH09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Vyxjb2w6aWV9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IHBlPV8sd2U9VCxFZT1fLFplPVQ7Zm9yKDtmLmxlbmd0aDxk'@;
put 'fHxwZTw9Vzspe2NvbnN0e3NraXBSb3dPblBhc3RlOml0LHZpc3VhbFJvdzpldH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEocGUsVCk7aWYocGU9ZXQrMSwhMD09PWl0KWNvbnRpbnVlO0VlPWV0LHdlPVQ7Y29uc3QgeXQ9W10sRXQ9Zi5sZW5ndGglZDtmb3IoO3l0Lmxlbmd0aDxofHx3ZTw9aWU7'@;
put 'KXtjb25zdHtza2lwQ29sdW1uT25QYXN0ZTpTdCx2aXN1YWxDb2w6SnR9PXRoaXMuaG90LmdldENlbGxNZXRhKF8sd2UpOyh3ZT1KdCsxLCEwIT09U3QpJiYoWmU9SnQseXQucHVzaChsW0V0XVt5dC5sZW5ndGglaF0pKX1mLnB1c2goeXQpfXJldHVybiB0aGlzLmhvdC5wb3B1bGF0ZUZyb21B'@;
put 'cnJheShfLFQsZix2b2lkIDAsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbXyxULEVlLFplXX1vbkNvcHkobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFiMSh0aGlzLGdBKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjt0aGlzLnNldENvcHlh'@;
put 'YmxlVGV4dCgpLFdmKHRoaXMsZ0EsITEpO2NvbnN0IGE9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpLGQ9ZnVuY3Rpb24gbE9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5v'@;
put 'bi1pbnN0YW5jZSIpO3JldHVybiBhfSh0aGlzLHRpZSxwT2UpLmNhbGwodGhpcyx0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29weSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzLGQpKXtjb25zdCBmPUN5KGEpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7'@;
put 'Y29uc3QgXz1ETihhKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsZiksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW2VpZSxfXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBi'@;
put 'b2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsZik7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzLGQpfVdmKHRoaXMsVDcsImNlbGxzLW9ubHkiKSxsLnByZXZlbnREZWZhdWx0KCl9b25DdXQobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFi'@;
put 'MSh0aGlzLG1BKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjt0aGlzLnNldENvcHlhYmxlVGV4dCgpLFdmKHRoaXMsbUEsITEpO2NvbnN0IGE9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDdXQiLGEsdGhp'@;
put 'cy5jb3B5YWJsZVJhbmdlcykpe2NvbnN0IGg9Q3koYSk7aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBmPUROKGEpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixoKSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbZWllLGZdLmpvaW4oIiIpKX1l'@;
put 'bHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixoKTt0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2VsbHMoIkNvcHlQYXN0ZS5jdXQiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDdXQiLGEsdGhpcy5j'@;
put 'b3B5YWJsZVJhbmdlcyl9bC5wcmV2ZW50RGVmYXVsdCgpfW9uUGFzdGUobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKSlyZXR1cm47bGV0IGE7aWYobCYmbC5wcmV2ZW50RGVmYXVsdCYmbC5wcmV2ZW50RGVmYXVsdCgpLGwmJnR5cGVvZiBsLmNs'@;
put 'aXBib2FyZERhdGE8InUiKXtjb25zdCBUPXJrKGwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L2h0bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWTohMH0pO2E9VCYmLyg8dGFibGUpfCg8VEFCTEUpL2cudGVzdChUKT9JdGUoVCx0aGlz'@;
put 'LmhvdC5yb290RG9jdW1lbnQpLmRhdGE6bC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnR5cGVvZiB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGE8InUiJiYoYT10aGlzLmhvdC5yb290V2luZG93LmNs'@;
put 'aXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJihhPWZ1bmN0aW9uIGpEZShjKXtjb25zdCBsPVtbIiJdXTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGw7bGV0IGgsYT0wLGQ9MDtmb3IoO2MubGVuZ3RoPjAmJmghPT1jLmxlbmd0aDspaWYoaD1jLmxl'@;
put 'bmd0aCxjLm1hdGNoKEJuZSkpYz1jLnJlcGxhY2UoQm5lLCIiKSxhKz0xLGxbZF1bYV09IiI7ZWxzZSBpZihjLm1hdGNoKFZuZSkpYz1jLnJlcGxhY2UoVm5lLCIiKSxhPTAsZCs9MSxsW2RdPVsiIl07ZWxzZXtsZXQgZj0iIjtpZihjLnN0YXJ0c1dpdGgoJyInKSl7bGV0IF89MCxUPSEwO2Zv'@;
put 'cig7VDspe2NvbnN0IFc9Yy5zbGljZSgwLDEpOyciJz09PVcmJihfKz0xKSxmKz1XLCgwPT09KGM9Yy5zbGljZSgxKSkubGVuZ3RofHxjLm1hdGNoKC9eW1x0XHJcbl0vKSYmXyUyPT0wKSYmKFQ9ITEpfWY9Zi5yZXBsYWNlKC9eIi8sIiIpLnJlcGxhY2UoLyIkLywiIikucmVwbGFjZSgvWyJd'@;
put 'Ki9nLFc9Pm5ldyBBcnJheShNYXRoLmZsb29yKFcubGVuZ3RoLzIpKS5maWxsKCciJykuam9pbigiIikpfWVsc2V7Y29uc3QgXz1jLm1hdGNoKEJEZSk7Zj1fP19bMF06IiIsYz1jLnNsaWNlKGYubGVuZ3RoKX1sW2RdW2FdPWZ9cmV0dXJuIGx9KGEpKSxhJiYwPT09YS5sZW5ndGh8fCExPT09'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixhLHRoaXMuY29weWFibGVSYW5nZXMpKXJldHVybjtjb25zdFtkLGgsZixfXT10aGlzLnBvcHVsYXRlVmFsdWVzKGEpO3RoaXMuaG90LnNlbGVjdENlbGwoZCxoLE1hdGgubWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsZiksTWF0aC5t'@;
put 'aW4odGhpcy5ob3QuY291bnRDb2xzKCktMSxfKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBZUmUo'@;
put 'Yyl7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVFYpfSxjYWxsYmFjaygpe2MuY29weUNlbGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLGIxKHRoaXMsa2opJiZsLml0ZW1zLnB1c2goZnVuY3Rpb24gJFJlKGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9NYXRoLm1pbihsLmdldFdpZHRoKCktMSwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRFYsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJz'@;
put 'KCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxiMSh0aGlzLEFqKSYmbC5pdGVtcy5wdXNoKGZ1bmN0aW9uIEdSZShjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2dyb3VwX2hlYWRlcnMi'@;
put 'LG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElWLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVk'@;
put 'KCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRlcnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxiMSh0aGlzLFRqKSYmbC5pdGVtcy5wdXNo'@;
put 'KGZ1bmN0aW9uIFdSZShjKXtyZXR1cm57a2V5OiJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKExW'@;
put 'LGEpfSxjYWxsYmFjaygpe2MuY29weUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFsfHxsLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksbC5pdGVtcy5w'@;
put 'dXNoKGZ1bmN0aW9uIHFSZShjKXtyZXR1cm57a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFJWKX0sY2FsbGJhY2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4h'@;
put 'MDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpfW9uQWZ0ZXJPbkNlbGxNb3VzZVVwKCl7IXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5m'@;
put 'cmFnbWVudFNlbGVjdGlvbnx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpfW9uQWZ0ZXJTZWxlY3Rpb25FbmQoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgp'@;
put 'LCghdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8dGhpcy5mb2N1c2FibGVFbGVtZW50LmdldEZvY3VzYWJsZUVsZW1lbnQoKT09PXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50fHwhdXRlKCkpJiYodGhpcy5zZXRDb3B5YWJsZVRleHQoKSx0aGlz'@;
put 'LmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSkpfW9uQmVmb3JlS2V5RG93bigpe2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsYT10aGlzLmhvdC5nZXRBY3Rp'@;
put 'dmVFZGl0b3IoKTshYXx8bCE9PXRoaXMuZm9jdXNhYmxlRWxlbWVudC5nZXRGb2N1c2FibGVFbGVtZW50KCkmJmwhPT1hLnNlbGVjdHx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpfWRlc3Ryb3koKXt0aGlzLmZvY3Vz'@;
put 'YWJsZUVsZW1lbnQmJihXcmUodGhpcy5mb2N1c2FibGVFbGVtZW50KSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9bnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBwT2UoYyl7Y29uc3R7cm93czpsfT1YcmUoYyk7bGV0IGE9MDtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoJiYhKGxbZF0+PTAp'@;
put 'O2QrKylhKz0xO3JldHVybntjb2x1bW5IZWFkZXJzQ291bnQ6YX19ZnVuY3Rpb24gbmllKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gRGooYyl7dmFyIGwsYTtyZXR1cm4oS2koYy5zdGFydCl8fEtpKGMubGVmdCkpJiYoYy5zdGFydD1udWxsIT09KGw9Yy5z'@;
put 'dGFydCkmJnZvaWQgMCE9PWw/bDpjLmxlZnQpLChLaShjLmVuZCl8fEtpKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGN9ZnVuY3Rpb24gTnkoYyl7cmV0dXJuIEtpKGMuc3RhcnQp'@;
put 'JiYoYy5sZWZ0PWMuc3RhcnQpLEtpKGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gSWooYyxsKXtyZXR1cm57aWQ6bmllKGMsbCksYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjMDAwIixjb3JuZXJWaXNpYmxlOiExfSxyb3c6Yyxjb2w6bCx0b3A6e2hpZGU6ITB9LGJvdHRvbTp7'@;
put 'aGlkZTohMH0sc3RhcnQ6e2hpZGU6ITB9LGVuZDp7aGlkZTohMH19fWZ1bmN0aW9uICRmKGMsbCl7bGV0IGE9ITE7cmV0dXJuIERuKGMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGQ9PntkLmZvckFsbCgoaCxmKT0+e2lmKGg8MHx8ZjwwKXJldHVybjtjb25zdCBfPWMuZ2V0Q2VsbE1ldGEoaCxmKS5i'@;
put 'b3JkZXJzO2lmKF8pe2lmKCFsKXJldHVybiBhPSEwLCExO2lmKCFibChfW2xdLCJoaWRlIil8fCExPT09X1tsXS5oaWRlKXJldHVybiBhPSEwLCExfX0pfSksYX1mdW5jdGlvbiB2QShjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj4ke1N0cmluZy5mcm9tQ2hhckNvZGUoMTAwMDMp'@;
put 'fTwvc3Bhbj4ke2N9YH1jb25zdCBiT2U9bmV3IE1hcChbWyJsZWZ0Iiwic3RhcnQiXSxbInJpZ2h0IiwiZW5kIl1dKTtmdW5jdGlvbiB5T2UoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1iT2UuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOmN9ZnVuY3Rpb24gd09lKGMpe3JldHVybntrZXk6ImJv'@;
put 'cmRlcnM6dG9wIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFhWKTtyZXR1cm4gJGYodGhpcywidG9wIikmJihsPXZBKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9JGYodGhpcywidG9wIik7Yy5wcmVwYXJlQm9yZGVyKGEsInRvcCIsZCl9fX1mdW5jdGlvbiBD'@;
put 'T2UoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJzdGFydCI6ImVuZCI7cmV0dXJue2tleToiYm9yZGVyczpyaWdodCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKVik7cmV0dXJuICRmKHRoaXMsbCkmJihhPXZBKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9'@;
put 'JGYodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gU09lKGMpe3JldHVybntrZXk6ImJvcmRlcnM6Ym90dG9tIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFFWKTtyZXR1cm4gJGYodGhpcywiYm90dG9tIikmJihsPXZBKGwpKSxsfSxjYWxs'@;
put 'YmFjayhsLGEpe2NvbnN0IGQ9JGYodGhpcywiYm90dG9tIik7Yy5wcmVwYXJlQm9yZGVyKGEsImJvdHRvbSIsZCl9fX1mdW5jdGlvbiBNT2UoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJlbmQiOiJzdGFydCI7cmV0dXJue2tleToiYm9yZGVyczpsZWZ0IixuYW1lKCl7bGV0IGE9dGhpcy5n'@;
put 'ZXRUcmFuc2xhdGVkUGhyYXNlKGVCKTtyZXR1cm4gJGYodGhpcyxsKSYmKGE9dkEoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD0kZih0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiB4T2UoYyl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1l'@;
put 'KCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh0Qil9LGNhbGxiYWNrKGwsYSl7Yy5wcmVwYXJlQm9yZGVyKGEsIm5vQm9yZGVycyIpfSxkaXNhYmxlZCgpe3JldHVybiEkZih0aGlzKX19fWNvbnN0IF9BPSJjdXN0b21Cb3JkZXJzIjtjbGFzcyBET2UgZXh0ZW5kcyBac3tjb25z'@;
put 'dHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRU9lKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBrT2UoYyl7dmFyIGw9ZnVuY3Rpb24gQU9lKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s'@;
put 'P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'LGN9KHRoaXMsInNhdmVkQm9yZGVycyIsW10pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfQX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA5MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX0FdfWVuYWJsZVBsdWdpbigpe3Ro'@;
put 'aXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlzLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT50aGlzLm9uQWZ0ZXJJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdp'@;
put 'bigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlQm9yZGVycygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKSxzdXBlci51cGRhdGVQbHVnaW4o'@;
put 'KX1zZXRCb3JkZXJzKGwsYSl7bGV0IGQ9WyJ0b3AiLCJib3R0b20iLCJzdGFydCIsImVuZCJdLGg9bnVsbDthJiYodGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oW2FdKSxkPU9iamVjdC5rZXlzKGEpLGg9RGooYSkpO2NvbnN0IF89d3koZzcobCkpO0RuKGwsVD0+e2NvbnN0W1csaWUscGUs'@;
put 'd2VdPV8oVCk7Zm9yKGxldCBFZT1XO0VlPD1wZTtFZSs9MSlmb3IobGV0IFplPWllO1plPD13ZTtaZSs9MSlEbihkLGl0PT57dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKEVlLFplLGgseU9lKGl0KSl9KX0pLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0Qm9yZGVycyhsKXtp'@;
put 'ZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnM7Y29uc3QgZD13eShnNyhsKSksaD1bXTtyZXR1cm4gRG4obCxmPT57Y29uc3RbXyxULFcsaWVdPWQoZik7Zm9yKGxldCBwZT1fO3BlPD1XO3BlKz0xKWZvcihsZXQgd2U9VDt3ZTw9aWU7d2UrPTEpRG4odGhpcy5z'@;
put 'YXZlZEJvcmRlcnMsRWU9PntFZS5yb3c9PT1wZSYmRWUuY29sPT09d2UmJmgucHVzaChOeShFZSkpfSl9KSxofWNsZWFyQm9yZGVycyhsKXtsP3RoaXMuc2V0Qm9yZGVycyhsKTooRG4odGhpcy5zYXZlZEJvcmRlcnMsYT0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdz'@;
put 'KGEuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoYS5yb3csYS5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX1pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MobCxhKXt0aGlzLmNoZWNrU2F2ZWRCb3JkZXJzKGwp'@;
put 'fHx0aGlzLnNhdmVkQm9yZGVycy5wdXNoKGwpO2NvbnN0IGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCkpO3RoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zKGwsaCxhKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdo'@;
put 'dC5hZGRDdXN0b21TZWxlY3Rpb24oe2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTpofSl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmNvdW50Um93cygpLF89dGhpcy5ob3QuY291bnRDb2xzKCk7aWYobD49Znx8YT49XylyZXR1cm47bGV0'@;
put 'IFQ9SWoobCxhKTtkJiYoVD1mdW5jdGlvbiBtT2UoYyxsKXtyZXR1cm4gYmwobCwiYm9yZGVyIikmJmwuYm9yZGVyJiYoYy5ib3JkZXI9bC5ib3JkZXIpLGJsKGwsInRvcCIpJiZLaShsLnRvcCkmJihsLnRvcD8odXMobC50b3ApfHwobC50b3A9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy50'@;
put 'b3A9bC50b3ApOihsLnRvcD17aGlkZTohMH0sYy50b3A9bC50b3ApKSxibChsLCJib3R0b20iKSYmS2kobC5ib3R0b20pJiYobC5ib3R0b20/KHVzKGwuYm90dG9tKXx8KGwuYm90dG9tPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuYm90dG9tPWwuYm90dG9tKToobC5ib3R0b209e2hpZGU6'@;
put 'ITB9LGMuYm90dG9tPWwuYm90dG9tKSksYmwobCwic3RhcnQiKSYmS2kobC5zdGFydCkmJihsLnN0YXJ0Pyh1cyhsLnN0YXJ0KXx8KGwuc3RhcnQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5zdGFydD1sLnN0YXJ0KToobC5zdGFydD17aGlkZTohMH0sYy5zdGFydD1sLnN0YXJ0KSksYmwo'@;
put 'bCwiZW5kIikmJktpKGwuZW5kKSYmKGwuZW5kPyh1cyhsLmVuZCl8fChsLmVuZD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmVuZD1sLmVuZCk6KGwuZW5kPXtoaWRlOiEwfSxjLmVuZD1sLmVuZCkpLGN9KFQsZCksRG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxl'@;
put 'Y3Rpb25zLFc9PntpZihULmlkPT09Vy5zZXR0aW5ncy5pZClyZXR1cm4gT2JqZWN0LmFzc2lnbihXLnNldHRpbmdzLGQpLFQuaWQ9Vy5zZXR0aW5ncy5pZCxULnRvcD1XLnNldHRpbmdzLnRvcCxULmJvdHRvbT1XLnNldHRpbmdzLmJvdHRvbSxULnN0YXJ0PVcuc2V0dGluZ3Muc3RhcnQsVC5l'@;
put 'bmQ9Vy5zZXR0aW5ncy5lbmQsITF9KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixOeShUKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoVCxoKX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UobCxhKXtjb25zdCBkPU1hdGgubWluKGwudG8ucm93'@;
put 'LHRoaXMuaG90LmNvdW50Um93cygpLTEpLGg9TWF0aC5taW4obC50by5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCktMSk7dm8obC5mcm9tLnJvdyxkLGY9Pnt2byhsLmZyb20uY29sLGgsXz0+e2NvbnN0IFQ9SWooZixfKTtsZXQgVz0wO2Y9PT1sLmZyb20ucm93JiZibChhLCJ0b3AiKSYmKFcr'@;
put 'PTEsVC50b3A9YS50b3ApLGY9PT1sLnRvLnJvdyYmYmwoYSwiYm90dG9tIikmJihXKz0xLFQuYm90dG9tPWEuYm90dG9tKSxfPT09bC5mcm9tLmNvbCYmYmwoYSwic3RhcnQiKSYmKFcrPTEsVC5zdGFydD1hLnN0YXJ0KSxfPT09bC50by5jb2wmJmJsKGEsImVuZCIpJiYoVys9MSxULmVuZD1h'@;
put 'LmVuZCksVz4wJiYodGhpcy5ob3Quc2V0Q2VsbE1ldGEoZixfLCJib3JkZXJzIixOeShUKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoVCkpfSl9KX1yZW1vdmVBbGxCb3JkZXJzKGwsYSl7Y29uc3QgZD1uaWUobCxhKTt0aGlzLnNwbGljZUJvcmRlcihkKSx0aGlzLmNsZWFyQm9y'@;
put 'ZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGwsYSwiYm9yZGVycyIpfXNldEJvcmRlcihsLGEsZCxoKXtsZXQgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpLmJvcmRlcnM7Zj1mJiZ2b2lkIDAh'@;
put 'PT1mLmJvcmRlcj9EaihmKTpJaihsLGEpLGg/KGZbZF09e2hpZGU6ITB9LDQ9PT10aGlzLmNvdW50SGlkZShmKT90aGlzLnJlbW92ZUFsbEJvcmRlcnMobCxhKToodGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9T'@;
put 'ZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLE55KGYpKSkpOihmW2RdPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0sdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhm'@;
put 'KSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLE55KGYpKSl9cHJlcGFyZUJvcmRlcihsLGEsZCl7RG4obCxoPT57bGV0e3N0YXJ0OmYsZW5kOl99PWg7aWYoZi5yb3c9PT1fLnJvdyYmZi5jb2w9PT1fLmNvbCkibm9Cb3JkZXJzIj09PWE/dGhpcy5yZW1vdmVBbGxCb3JkZXJz'@;
put 'KGYucm93LGYuY29sKTp0aGlzLnNldEJvcmRlcihmLnJvdyxmLmNvbCxhLGQpO2Vsc2Ugc3dpdGNoKGEpe2Nhc2Uibm9Cb3JkZXJzIjp2byhmLmNvbCxfLmNvbCxUPT57dm8oZi5yb3csXy5yb3csVz0+e3RoaXMucmVtb3ZlQWxsQm9yZGVycyhXLFQpfSl9KTticmVhaztjYXNlInRvcCI6dm8o'@;
put 'Zi5jb2wsXy5jb2wsVD0+e3RoaXMuc2V0Qm9yZGVyKGYucm93LFQsYSxkKX0pO2JyZWFrO2Nhc2UiYm90dG9tIjp2byhmLmNvbCxfLmNvbCxUPT57dGhpcy5zZXRCb3JkZXIoXy5yb3csVCxhLGQpfSk7YnJlYWs7Y2FzZSJzdGFydCI6dm8oZi5yb3csXy5yb3csVD0+e3RoaXMuc2V0Qm9yZGVy'@;
put 'KFQsZi5jb2wsYSxkKX0pO2JyZWFrO2Nhc2UiZW5kIjp2byhmLnJvdyxfLnJvdyxUPT57dGhpcy5zZXRCb3JkZXIoVCxfLmNvbCxhLGQpfSl9fSl9Y3JlYXRlQ3VzdG9tQm9yZGVycyhsKXtEbihsLGE9Pntjb25zdCBkPURqKGEpO2EucmFuZ2U/dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3Rv'@;
put 'bUFkZGVkUmFuZ2UoYS5yYW5nZSxkKTp0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoYS5yb3csYS5jb2wsZCl9KX1jb3VudEhpZGUobCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsc3RhcnQ6aCxlbmQ6Zn09bDtyZXR1cm4gQWwoW2EsZCxoLGZdLChULFcpPT57bGV0IGllPVQ7cmV0'@;
put 'dXJuIFcmJlcuaGlkZSYmKGllKz0xKSxpZX0sMCl9Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwpe2NvbnN0IGE9Y3ModGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGQ9PmQuc2V0dGluZ3MuaWQpLmluZGV4T2YobCk7YT4tMSYmdGhpcy5o'@;
put 'b3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmNsZWFyKCl9Y2xlYXJOdWxsQ2VsbFJhbmdlKCl7RG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLChsLGEpPT57aWYobnVsbD09PWwuY2VsbFJhbmdlKXJldHVybiB0aGlzLmhv'@;
put 'dC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbYV0uZGVzdHJveSgpLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucy5zcGxpY2UoYSwxKSwhMX0pfWhpZGVCb3JkZXJzKCl7RG4odGhpcy5zYXZlZEJvcmRlcnMsbD0+e3RoaXMuY2xlYXJC'@;
put 'b3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCl9KX1zcGxpY2VCb3JkZXIobCl7Y29uc3QgYT1jcyh0aGlzLnNhdmVkQm9yZGVycyxkPT5kLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuc2F2ZWRCb3JkZXJzLnNwbGljZShhLDEpfWNo'@;
put 'ZWNrU2F2ZWRCb3JkZXJzKGwpe2xldCBhPSExO3JldHVybiA0PT09dGhpcy5jb3VudEhpZGUobCk/KHRoaXMuc3BsaWNlQm9yZGVyKGwuaWQpLGE9ITApOkRuKHRoaXMuc2F2ZWRCb3JkZXJzLChoLGYpPT57aWYobC5pZD09PWguaWQpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzW2ZdPWwsYT0h'@;
put 'MCwhMX0pLGF9Y2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGwsYSxkKXtsZXQgaD0hMTtyZXR1cm4gRG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGY9PntpZihsLmlkPT09Zi5zZXR0aW5ncy5pZClyZXR1cm4gZHMoZi5pbnN0YW5j'@;
put 'ZUJvcmRlcnMsXz0+e18udG9nZ2xlSGlkZGVuQ2xhc3MoYSxkKX0pLGg9ITAsITF9KSxofWNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmNvdW50SGlkZShsKTtsZXQgZj0hMTtyZXR1cm4gND09PWg/KHRoaXMucmVtb3ZlQWxsQm9yZGVycyhsLnJvdyxsLmNvbCks'@;
put 'Zj0hMCk6RG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLF89PntpZihsLmlkPT09Xy5zZXR0aW5ncy5pZClyZXR1cm4gXy52aXN1YWxDZWxsUmFuZ2U9YSxfLmNvbW1pdCgpLGQmJmRzKF8uaW5zdGFuY2VCb3JkZXJzLFQ9PntULmNoYW5nZUJvcmRlclN0'@;
put 'eWxlKGQsbCl9KSxmPSEwLCExfSksZn1jaGFuZ2VCb3JkZXJTZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfQV07aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT15dShsKTt0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihhKSxhLmxlbmd0aHx8KHRoaXMuc2F2'@;
put 'ZWRCb3JkZXJzPWEpLHRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyhhKX1lbHNlIHZvaWQgMCE9PWwmJnRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyh0aGlzLnNhdmVkQm9yZGVycyl9Y2hlY2tTZXR0aW5nc0NvaGVzaW9uKGwpe2NvbnN0IGE9ZnVuY3Rpb24gdk9lKGMpe3JldHVybiBjLnNvbWUo'@;
put 'bD0+S2kobC5sZWZ0KXx8S2kobC5yaWdodCkpfShsKSxkPWZ1bmN0aW9uIF9PZShjKXtyZXR1cm4gYy5zb21lKGw9PktpKGwuc3RhcnQpfHxLaShsLmVuZCkpfShsKTtpZihhJiZkKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIGFuZCAic3RhcnQiLyJlbmQiIG9wdGlvbnMg'@;
put 'c2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpO2lmKHRoaXMuaG90LmlzUnRsKCkmJmEpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCBmb3Ig'@;
put 'UlRMLiBQbGVhc2UgdXNlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe3RoaXMuaG90LmdldFNldHRpbmdzKClbX0FdJiZsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImJvcmRlcnMiLG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEtWKX0sZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LHN1Ym1lbnU6e2l0ZW1zOlt3T2UodGhpcyksQ09lKHRoaXMpLFNPZSh0aGlzKSxNT2UodGhpcykseE9lKHRoaXMpXX19KX1vbkFmdGVySW5p'@;
put 'dCgpe3RoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCByaWU9ImRyYWdUb1Njcm9sbCI7Y2xhc3MgTE9lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHJpZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklU'@;
put 'WSgpe3JldHVybiAxMDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYm91bmRhcmllcz1udWxsLHRoaXMuY2FsbGJhY2s9bnVsbCx0aGlzLmxpc3RlbmluZz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbcmllXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixsPT50aGlzLnNldHVwTGlzdGVuaW5nKGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT50aGlzLnNldHVwTGlzdGVu'@;
put 'aW5nKGwpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlckV2ZW50'@;
put 'cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zZXRCb3VuZGFyaWVzKGwpe3RoaXMuYm91bmRhcmllcz1sfXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1jaGVjayhsLGEpe2xldCBkPTAsaD0wO2E8dGhpcy5ib3VuZGFyaWVzLnRvcD9oPWEtdGhpcy5ib3VuZGFyaWVzLnRvcDphPnRo'@;
put 'aXMuYm91bmRhcmllcy5ib3R0b20mJihoPWEtdGhpcy5ib3VuZGFyaWVzLmJvdHRvbSksbDx0aGlzLmJvdW5kYXJpZXMubGVmdD9kPWwtdGhpcy5ib3VuZGFyaWVzLmxlZnQ6bD50aGlzLmJvdW5kYXJpZXMucmlnaHQmJihkPWwtdGhpcy5ib3VuZGFyaWVzLnJpZ2h0KSx0aGlzLmNhbGxiYWNr'@;
put 'KGQsaCl9bGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITB9dW5saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMX1pc0xpc3RlbmluZygpe3JldHVybiB0aGlzLmxpc3RlbmluZ31yZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5ob3Q7bGV0IGE9bDtmb3IoO2E7KXRoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwiY29udGV4dG1lbnUiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2V1cCIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1h'@;
put 'bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLGE9ZXkoYSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9c2V0dXBMaXN0ZW5pbmcobCl7aWYoVXAobCkpcmV0dXJuO2NvbnN0IGE9'@;
put 'dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5ob2xkZXI7YSE9PXRoaXMuaG90LnJvb3RXaW5kb3cmJih0aGlzLnNldEJvdW5kYXJpZXMoYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdGhpcy5zZXRDYWxsYmFjaygoZCxoKT0+e2Q8MD9hLnNjcm9sbExlZnQtPTUwOmQ+MCYmKGEuc2Nyb2xs'@;
put 'TGVmdCs9NTApLGg8MD9hLnNjcm9sbFRvcC09MjA6aD4wJiYoYS5zY3JvbGxUb3ArPTIwKX0pLHRoaXMubGlzdGVuKCkpfW9uTW91c2VNb3ZlKGwpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmdGhpcy5jaGVjayhsLmNsaWVudFgsbC5jbGllbnRZKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1z'@;
put 'by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51U2hvdyIp'@;
put 'LHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7Y29uc3QgTGo9ImRyb3Bkb3duTWVudSIsUmo9ImNoYW5nZVR5cGUiO2xldCBPT2U9KCgpPT57Y2xh'@;
put 'c3MgYyBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBMan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxU'@;
put 'X0lURU1TKCl7cmV0dXJuW0R5LEl5LGdzLFJ5LGdzLG5BLGdzLEx5LGdzLHZkXX1jb25zdHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5jb21tYW5kRXhlY3V0b3I9bmV3IE5yZSh0aGlzLmhvdCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCx0'@;
put 'aGlzLm1lbnU9bnVsbCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGQsaCk9PnRoaXMub25BZnRlckdldENvbEhlYWRlcihkLGgpKX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtMal19ZW5hYmxlUGx1Z2luKCl7dmFyIGE9dGhpcztpZih0'@;
put 'aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuaXRlbXNGYWN0b3J5PW5ldyB6cmUodGhpcy5ob3QsYy5ERUZBVUxUX0lURU1TKTtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbTGpdLGg9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGQpfTt0aGlzLnJlZ2lzdGVyRXZlbnRz'@;
put 'KCksImZ1bmN0aW9uIj09dHlwZW9mIGQuY2FsbGJhY2smJnRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKGQuY2FsbGJhY2spLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRv'@;
put 'd25NZW51RGVmYXVsdE9wdGlvbnMiLGgpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhoLml0ZW1zKTtjb25zdCBmPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGQpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IHlqKHRoaXMuaG90'@;
put 'LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6ZC51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGYpLHRoaXMubWVudS5zZXRN'@;
put 'ZW51SXRlbXMoZiksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PnRoaXMub25NZW51QmVmb3JlT3BlbigpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT50aGlzLm9uTWVudUFmdGVyT3BlbigpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJh'@;
put 'ZnRlckNsb3NlIiwoKT0+dGhpcy5vbk1lbnVBZnRlckNsb3NlKCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgXz1hcmd1bWVudHMubGVuZ3RoLFQ9bmV3IEFycmF5KF8pLFc9MDtXPF87VysrKVRbV109YXJndW1lbnRzW1ddO3Jl'@;
put 'dHVybiBhLmV4ZWN1dGVDb21tYW5kLmNhbGwoYSwuLi5UKX0pLERuKGYsXz0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKF8ua2V5LF8pKX0pfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RWxlbWVudCwiY2xp'@;
put 'Y2siLGE9PnRoaXMub25UYWJsZUNsaWNrKGEpKX1vcGVuKGEpe3RoaXMubWVudSYmKHRoaXMubWVudS5vcGVuKCksYS53aWR0aCYmdGhpcy5tZW51LnNldE9mZnNldCgibGVmdCIsYS53aWR0aCksdGhpcy5tZW51LnNldFBvc2l0aW9uKGEpKX1jbG9zZSgpe3RoaXMubWVudSYmdGhpcy5tZW51'@;
put 'LmNsb3NlKCl9ZXhlY3V0ZUNvbW1hbmQoYSl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4xP2QtMTowKSxmPTE7ZjxkO2YrKyloW2YtMV09YXJndW1lbnRzW2ZdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUoYSwuLi5oKX1zZXRMaXN0ZW5pbmcoKXtsZXQg'@;
put 'YT0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMubWVudS5pc09wZW5lZCgpJiYoYT90aGlzLm1lbnUuaG90TWVudS5saXN0ZW4oKTp0aGlzLm1lbnUuaG90TWVudS51bmxpc3RlbigpKX1vblRhYmxlQ2xpY2soYSl7aWYoYS5z'@;
put 'dG9wUHJvcGFnYXRpb24oKSxCbyhhLnRhcmdldCxSaikmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKSl7bGV0IGQ9MCxoPTA7aWYodGhpcy5ob3Qucm9vdERvY3VtZW50IT09dGhpcy5tZW51LmNvbnRhaW5lci5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6X309dGhpcy5ob3Qucm9v'@;
put 'dFdpbmRvdyx7dG9wOlQsbGVmdDpXfT1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Q9VCxoPVd9Y29uc3QgZj1hLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6Zi5sZWZ0K2gsdG9wOmYudG9wK2EudGFyZ2V0Lm9mZnNldEhlaWdodCszK2Qsd2lkdGg6'@;
put 'Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHR9KX19b25BZnRlckdldENvbEhlYWRlcihhLGQpe2NvbnN0IGg9ZC5wYXJlbnROb2RlO2lmKCFoKXJldHVybjtjb25zdCBmPWgucGFyZW50Tm9kZS5jaGlsZE5vZGVzLF89QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChmLGgpO2lmKGE8MHx8XyE9'@;
put 'PWYubGVuZ3RoLTEpcmV0dXJuO2NvbnN0IFQ9ZC5xdWVyeVNlbGVjdG9yKGAuJHtSan1gKTtpZih0aGlzLmVuYWJsZWQmJlQpcmV0dXJuO2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQoVCYmVC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFQpKTtjb25zdCBXPXRoaXMuaG90LnJvb3REb2N1'@;
put 'bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtXLmNsYXNzTmFtZT1SaixXLnR5cGU9ImJ1dHRvbiIsVy5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGQuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUoVyxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCl9b25NZW51QmVmb3JlT3Blbigpe3Ro'@;
put 'aXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iix0aGlzKX1vbk1lbnVBZnRlck9wZW4oKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93Iix0aGlzKX1vbk1lbnVBZnRlckNsb3NlKCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImFmdGVyRHJvcGRvd25NZW51SGlkZSIsdGhpcyl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1yZXR1cm4gYy5TRVBBUkFUT1I9e25hbWU6Z3N9LGN9KSgpO2NsYXNzIE9qe3N0YXRpYyBnZXQgREVGQVVM'@;
put 'VF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQiLGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sdW1uSGVhZGVyczohMSxyb3dIZWFkZXJzOiExLGV4cG9ydEhp'@;
put 'ZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Y29uc3RydWN0b3IobCxhKXt0aGlzLmRhdGFQcm92aWRlcj1sLHRoaXMub3B0aW9ucz10aGlzLl9tZXJnZU9wdGlvbnMoYSksdGhpcy5kYXRhUHJvdmlkZXIuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpfV9tZXJn'@;
put 'ZU9wdGlvbnMobCl7bGV0IGE9V3UodGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX09QVElPTlMpO2NvbnN0IGQ9bmV3IERhdGU7cmV0dXJuIGE9WGwoV3UoT2ouREVGQVVMVF9PUFRJT05TKSxhKSxhPVhsKGEsbCksYS5maWxlbmFtZT1jTihhLmZpbGVuYW1lLHtZWVlZOmQuZ2V0RnVsbFllYXIo'@;
put 'KSxNTTpgJHtkLmdldE1vbnRoKCkrMX1gLnBhZFN0YXJ0KDIsIjAiKSxERDpgJHtkLmdldERhdGUoKX1gLnBhZFN0YXJ0KDIsIjAiKX0pLGF9fWNvbnN0IEhPZT1PaixOT2U9U3RyaW5nLmZyb21DaGFyQ29kZSgxMyksVk9lPVN0cmluZy5mcm9tQ2hhckNvZGUoMzQpLEJPZT1TdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlKDEwKSxQaj17Y3N2OmNsYXNzIGpPZSBleHRlbmRzIEhPZXtzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9jc3YiLGZpbGVFeHRlbnNpb246ImNzdiIsYm9tOiEwLGNvbHVtbkRlbGltaXRlcjoiLCIscm93RGVsaW1pdGVyOiJcclxu'@;
put 'In19ZXhwb3J0KCl7Y29uc3QgbD10aGlzLm9wdGlvbnMsYT10aGlzLmRhdGFQcm92aWRlci5nZXREYXRhKCk7bGV0IGQ9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Q29sdW1uSGVhZGVycygpO2NvbnN0IGg9ZC5sZW5ndGg+MCxmPXRoaXMuZGF0YVByb3ZpZGVyLmdldFJvd0hlYWRlcnMoKSxfPWYu'@;
put 'bGVuZ3RoPjA7bGV0IFQ9bC5ib20/U3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSk6IiI7cmV0dXJuIGgmJihkPWNzKGQsVz0+dGhpcy5fZXNjYXBlQ2VsbChXLCEwKSksXyYmKFQrPWwuY29sdW1uRGVsaW1pdGVyKSxUKz1kLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpLFQrPWwucm93RGVsaW1p'@;
put 'dGVyKSxEbihhLChXLGllKT0+e2llPjAmJihUKz1sLnJvd0RlbGltaXRlciksXyYmKFQrPXRoaXMuX2VzY2FwZUNlbGwoZltpZV0pK2wuY29sdW1uRGVsaW1pdGVyKSxUKz1XLm1hcChwZT0+dGhpcy5fZXNjYXBlQ2VsbChwZSkpLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpfSksVH1fZXNjYXBl'@;
put 'Q2VsbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9X2wobCk7cmV0dXJuIiIhPT1kJiYoYXx8ZC5pbmRleE9mKE5PZSk+PTB8fGQuaW5kZXhPZihWT2UpPj0wfHxkLmluZGV4T2YoQk9lKT49MHx8ZC5pbmRleE9mKHRo'@;
put 'aXMub3B0aW9ucy5jb2x1bW5EZWxpbWl0ZXIpPj0wKSYmKGQ9ZC5yZXBsYWNlKG5ldyBSZWdFeHAoJyInLCJnIiksJyIiJyksZD1gIiR7ZH0iYCksZH19fTtjbGFzcyBHT2UgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iZXhwb3J0RmlsZSJ9c3RhdGljIGdldCBQ'@;
put 'TFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjQwfWlzRW5hYmxlZCgpe3JldHVybiEwfWV4cG9ydEFzU3RyaW5nKGwpe3JldHVybiB0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5leHBv'@;
put 'cnQoKX1leHBvcnRBc0Jsb2IobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUJsb2IodGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkpfWRvd25sb2FkRmlsZShsKXtsZXQgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3R7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmhvdCxmPXRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhKSxfPXRoaXMuX2NyZWF0ZUJsb2IoZiksVD1oLlVSTHx8aC53ZWJraXRV'@;
put 'UkwsVz1kLmNyZWF0ZUVsZW1lbnQoImEiKSxpZT1gJHtmLm9wdGlvbnMuZmlsZW5hbWV9LiR7Zi5vcHRpb25zLmZpbGVFeHRlbnNpb259YDtpZih2b2lkIDAhPT1XLmRvd25sb2FkKXtjb25zdCBwZT1ULmNyZWF0ZU9iamVjdFVSTChfKTtXLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFcuc2V0QXR0'@;
put 'cmlidXRlKCJocmVmIixwZSksVy5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixpZSksZC5ib2R5LmFwcGVuZENoaWxkKFcpLFcuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksZC5ib2R5LnJlbW92ZUNoaWxkKFcpLHNldFRpbWVvdXQoKCk9PntULnJldm9rZU9iamVjdFVS'@;
put 'TChwZSl9LDEwMCl9ZWxzZSBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoXyxpZSl9X2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9'@;
put 'O2lmKCFQaltsXSl0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBmb3JtYXQgdHlwZSAiJHtsfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZnVuY3Rpb24gWk9lKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUGpbY10/bmV3IFBqW2NdKGwsYSk6bnVsbH0obCxuZXcgY2xhc3Mg'@;
put 'UE9le2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5vcHRpb25zPXt9fXNldE9wdGlvbnMobCl7dGhpcy5vcHRpb25zPWx9Z2V0RGF0YSgpe2NvbnN0e3N0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZCxlbmRDb2w6aH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksZj10aGlzLm9wdGlv'@;
put 'bnMsXz1bXTtyZXR1cm4gdm8obCxkLFQ9Pntjb25zdCBXPVtdOyFmLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KFQpfHwodm8oYSxoLGllPT57IWYuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oaWUpfHxXLnB1c2godGhpcy5ob3QuZ2V0RGF0'@;
put 'YUF0Q2VsbChULGllKSl9KSxfLnB1c2goVykpfSksX31nZXRSb3dIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMucm93SGVhZGVycyl7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRSb3dIZWFkZXIoKTt2byhh'@;
put 'LGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coZil8fGwucHVzaChoW2ZdKX0pfXJldHVybiBsfWdldENvbHVtbkhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5IZWFkZXJzKXtjb25zdHtzdGFydENvbDphLGVu'@;
put 'ZENvbDpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldENvbEhlYWRlcigpO3ZvKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9X2dldERhdGFSYW5nZSgp'@;
put 'e2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCktMSxhPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0W2Q9MCxoPTAsZj1hLF89bF09dGhpcy5vcHRpb25zLnJhbmdlO3JldHVybiBkPU1hdGgubWF4KGQsMCksaD1NYXRoLm1heChoLDApLGY9TWF0aC5taW4oZixhKSxfPU1hdGgubWluKF8s'@;
put 'bCkse3N0YXJ0Um93OmQsc3RhcnRDb2w6aCxlbmRSb3c6ZixlbmRDb2w6X319X2lzSGlkZGVuUm93KGwpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1faXNIaWRkZW5Db2x1bW4obCl7cmV0dXJuIHRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfX0odGhpcy5ob3QpLGEpfV9jcmVhdGVCbG9iKGwpe2xldCBhPW51bGw7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmKGE9bmV3IEJsb2IoW2wuZXhwb3J0KCldLHt0eXBlOmAke2wub3B0aW9ucy5t'@;
put 'aW1lVHlwZX07Y2hhcnNldD0ke2wub3B0aW9ucy5lbmNvZGluZ31gfSkpLGF9fWNsYXNzIGlpZXtjb25zdHJ1Y3RvcihsLGEpe2xldHtpZDpkLHN0YXRlbGVzczpoPSEwfT1hO3RoaXMuaG90PWwsdGhpcy5pZD1kLHRoaXMuZWxlbWVudHM9W10sdGhpcy5oaWRkZW49ITEsdGhpcy5zdGF0ZUlk'@;
put 'PWBGaWx0ZXJzLmNvbXBvbmVudC4ke3RoaXMuaWR9YCx0aGlzLnN0YXRlPWg/bnVsbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQsbmV3IEVrKX1yZXNldCgpe0RuKHRoaXMuZWxlbWVudHMsbD0+bC5yZXNldCgpKX1oaWRlKCl7dGhpcy5oaWRk'@;
put 'ZW49ITB9c2hvdygpe3RoaXMuaGlkZGVuPSExfWlzSGlkZGVuKCl7cmV0dXJuIG51bGw9PT10aGlzLmhvdHx8dGhpcy5oaWRkZW59cmVzdG9yZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgobCkpfXNldFN0YXRlKCl7dGhyb3cg'@;
put 'bmV3IEVycm9yKCJUaGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1zYXZlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmdldFN0YXRlKCkpfWdldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUg'@;
put 'Z2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2FsSG9va3MoKSxEbih0aGlzLmVsZW1lbnRzLGw9PmwuZGVzdHJveSgpKSx0aGlzLnN0'@;
put 'YXRlPW51bGwsdGhpcy5lbGVtZW50cz1udWxsLHRoaXMuaG90PW51bGx9fVRhKGlpZSxPMCk7Y29uc3QgYkE9aWllLFZ5PXt9O2Z1bmN0aW9uIEpwKGMsbCl7aWYoIVZ5W2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdHtjb25k'@;
put 'aXRpb246YSxkZXNjcmlwdG9yOmR9PVZ5W2NdO2xldCBoPWw7cmV0dXJuIGQuaW5wdXRWYWx1ZXNEZWNvcmF0b3ImJihoPWQuaW5wdXRWYWx1ZXNEZWNvcmF0b3IoaCkpLGZ1bmN0aW9uKGYpe3JldHVybiBhLmFwcGx5KGYubWV0YS5pbnN0YW5jZSxbXS5jb25jYXQoW2ZdLFtoXSkpfX1mdW5j'@;
put 'dGlvbiBPZyhjKXtpZighVnlbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBWeVtjXS5kZXNjcmlwdG9yfWZ1bmN0aW9uIEpsKGMsbCxhKXthLmtleT1jLFZ5W2NdPXtjb25kaXRpb246bCxkZXNjcmlwdG9yOmF9fWNvbnN0'@;
put 'IEdjPSJub25lIjtKbChHYyxmdW5jdGlvbiAkT2UoKXtyZXR1cm4hMH0se25hbWU6TGssaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiExfSk7Y29uc3QgQnk9ImVtcHR5IjtKbChCeSxmdW5jdGlvbiBxT2UoYyl7cmV0dXJuIGdjKGMudmFsdWUpfSx7bmFtZTpsQixpbnB1dHNDb3VudDow'@;
put 'LHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB5QT0ibm90X2VtcHR5IjtKbCh5QSxmdW5jdGlvbiBLT2UoYyxsKXtyZXR1cm4hSnAoQnksbCkoYyl9LHtuYW1lOmNCLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGp5PSJlcSI7SmwoanksZnVuY3Rpb24gWE9lKGMsbCl7'@;
put 'bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpPT09X2woYSl9LHtuYW1lOnVCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHdBPSJuZXEiO0psKHdBLGZ1bmN0aW9uIEpPZShjLGwpe3JldHVybiFKcChqeSxs'@;
put 'KShjKX0se25hbWU6ZEIsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksSmwoImd0IixmdW5jdGlvbiBRT2UoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+ZH0se25hbWU6bUIsaW5wdXRz'@;
put 'Q291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksSmwoImd0ZSIsZnVuY3Rpb24gZVBlKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPj1kfSx7bmFtZTp2QixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRv'@;
put 'cnM6ITB9KSxKbCgibHQiLGZ1bmN0aW9uIHRQZShjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTxkfSx7bmFtZTpfQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxKbCgibHRlIixmdW5j'@;
put 'dGlvbiBuUGUoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8PWR9LHtuYW1lOmJCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEZqPSJkYXRlX2FmdGVyIjtKbChGaixmdW5j'@;
put 'dGlvbiByUGUoYyxsKXtsZXRbYV09bDtjb25zdCBkPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9S28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKT49MH0se25hbWU6Q0IsaW5wdXRzQ291bnQ6MSxzaG93'@;
put 'T3BlcmF0b3JzOiEwfSk7Y29uc3QgSGo9ImRhdGVfYmVmb3JlIjtKbChIaixmdW5jdGlvbiBpUGUoYyxsKXtsZXRbYV09bDtjb25zdCBkPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9S28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFs'@;
put 'aWQoKSkmJmQuZGlmZihoKTw9MH0se25hbWU6U0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgQ0E9ImJldHdlZW4iO0psKENBLGZ1bmN0aW9uIG9QZShjLGwpe2xldFthLGRdPWwsaD1hLGY9ZDtpZigibnVtZXJpYyI9PT1jLm1ldGEudHlwZSl7Y29uc3QgXz1wYXJz'@;
put 'ZUZsb2F0KGgsMTApLFQ9cGFyc2VGbG9hdChmLDEwKTtoPU1hdGgubWluKF8sVCksZj1NYXRoLm1heChfLFQpfWVsc2UgaWYoImRhdGUiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IF89SnAoSGosW2ZdKSxUPUpwKEZqLFtoXSk7cmV0dXJuIF8oYykmJlQoYyl9cmV0dXJuIGMudmFsdWU+PWgmJmMu'@;
put 'dmFsdWU8PWZ9LHtuYW1lOnlCLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGNpZT0ibm90X2JldHdlZW4iO0psKGNpZSxmdW5jdGlvbiBzUGUoYyxsKXtyZXR1cm4hSnAoQ0EsbCkoYyl9LHtuYW1lOndCLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2Nv'@;
put 'bnN0IHVpZT0iYmVnaW5zX3dpdGgiO0psKHVpZSxmdW5jdGlvbiBhUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gX2woYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChfbChhKSl9LHtuYW1lOmhCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczoh'@;
put 'MH0pLEpsKCJlbmRzX3dpdGgiLGZ1bmN0aW9uIGxQZShjLGwpe2xldFthXT1sO3JldHVybiBfbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5lbmRzV2l0aChfbChhKSl9LHtuYW1lOmZCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IE5q'@;
put 'PSJjb250YWlucyI7SmwoTmosZnVuY3Rpb24gY1BlKGMsbCl7bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmluZGV4T2YoX2woYSkpPj0wfSx7bmFtZTpwQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBo'@;
put 'aWU9Im5vdF9jb250YWlucyI7SmwoaGllLGZ1bmN0aW9uIHVQZShjLGwpe3JldHVybiFKcChOaixsKShjKX0se25hbWU6Z0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZmllPSJkYXRlX3RvbW9ycm93IjtKbChmaWUsZnVuY3Rpb24gZFBlKGMpe2NvbnN0IGw9S28o'@;
put 'Yy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdWJ0cmFjdCgtMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOnhCLGlucHV0c0NvdW50OjB9KTtjb25zdCBwaWU9ImRhdGVfdG9kYXkiO0psKHBpZSxmdW5jdGlv'@;
put 'biBoUGUoYyl7Y29uc3QgbD1LbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShLbygpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOk1CLGlucHV0c0NvdW50OjB9KTtjb25zdCBnaWU9ImRhdGVfeWVzdGVyZGF5IjtKbChnaWUsZnVu'@;
put 'Y3Rpb24gZlBlKGMpe2NvbnN0IGw9S28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdWJ0cmFjdCgxLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6RUIsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IHZpZT17bnVt'@;
put 'ZXJpYzpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsImd0IiwiZ3RlIiwibHQiLCJsdGUiLENBLGNpZV0sdGV4dDpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsdWllLCJlbmRzX3dpdGgiLGdzLE5qLGhpZV0sZGF0ZTpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsSGosRmosQ0EsZ3MsZmllLHBp'@;
put 'ZSxnaWVdfSxWaj0iYnVpbHQiLEJqPSJidWlsZGluZyIsX2llPVsiY2xpY2siLCJpbnB1dCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwiZm9jdXMiLCJibHVyIiwiY2hhbmdlIl07Y2xhc3MgU0F7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiIiLHZh'@;
put 'bHVlOiIiLHRhZ05hbWU6ImRpdiIsY2hpbGRyZW46W10sd3JhcEl0OiEwfSl9Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1sLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLm9wdGlvbnM9WGwoU0EuREVGQVVMVFMsYSksdGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMud3JhcEl0PyJkaXYiOnRoaXMub3B0aW9ucy50YWdOYW1lKSx0aGlzLmJ1aWxkU3RhdGU9bnVsbH1zZXRWYWx1ZShsKXt0aGlzLm9wdGlvbnMudmFsdWU9bCx0aGlzLnVwZGF0ZSgpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMub3B0aW9u'@;
put 'cy52YWx1ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1Caj90aGlzLl9lbGVtZW50OnRoaXMuYnVpbGRTdGF0ZT09PVZqPyh0aGlzLnVwZGF0ZSgpLHRoaXMuX2VsZW1lbnQpOih0aGlzLmJ1aWxkU3RhdGU9QmosdGhpcy5idWlsZCgpLHRoaXMuYnVpbGRTdGF0ZT1W'@;
put 'aix0aGlzLl9lbGVtZW50KX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PVZqfXRyYW5zbGF0ZUlmUG9zc2libGUobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiZsLnN0YXJ0c1dpdGgoJHUpP3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UobCk6bH1idWlsZCgpe2Nv'@;
put 'bnN0IGw9KGEsZCk9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsZCxoPT50aGlzLnJ1bkxvY2FsSG9va3MoZCxoLHRoaXMpKX07aWYodGhpcy5idWlsZFN0YXRlfHwodGhpcy5idWlsZFN0YXRlPUJqKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZwaSh0aGlzLl9lbGVt'@;
put 'ZW50LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbi5sZW5ndGgpRG4odGhpcy5vcHRpb25zLmNoaWxkcmVuLGE9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYS5lbGVtZW50KSk7ZWxzZSBpZih0aGlzLm9wdGlvbnMud3JhcEl0KXtjb25zdCBhPXRoaXMu'@;
put 'aG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTtkcyh0aGlzLm9wdGlvbnMsKGQsaCk9Pnt2b2lkIDAhPT1hW2hdJiYiY2xhc3NOYW1lIiE9PWgmJiJ0YWdOYW1lIiE9PWgmJiJjaGlsZHJlbiIhPT1oJiYoYVtoXT10aGlzLnRyYW5zbGF0ZUlmUG9z'@;
put 'c2libGUoZCkpfSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSxEbihfaWUsZD0+bChhLGQpKX1lbHNlIERuKF9pZSxhPT5sKHRoaXMuX2VsZW1lbnQsYSkpfXVwZGF0ZSgpe31yZXNldCgpe3RoaXMub3B0aW9ucy52YWx1ZT0iIix0aGlzLnVwZGF0ZSgpfXNob3coKXt0aGlzLmVsZW1l'@;
put 'bnQuc3R5bGUuZGlzcGxheT0iIn1oaWRlKCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUifWZvY3VzKCl7fWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLmhvdD1udWxsLHRoaXMuX2VsZW1lbnQucGFyZW50'@;
put 'Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbH19VGEoU0EsTzApO2NvbnN0IFFwPVNBLE1BPW5ldyBXZWFrTWFwO2NsYXNzIGpqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBX'@;
put 'dSh7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQifSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLFhsKGpqLkRFRkFVTFRTLGEpKSxNQS5zZXQodGhpcyx7fSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJj'@;
put 'bGljayIsKCk9PnRoaXMub25DbGljaygpKSx0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGw9PnRoaXMub25LZXl1cChsKSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9TUEuZ2V0KHRoaXMpLGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuaW5w'@;
put 'dXQ9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkLHBpKHRoaXMuX2VsZW1lbnQsImh0VUlJbnB1dCIpLHBpKGEsImh0VUlJbnB1dEljb24iKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtjb25zdCBs'@;
put 'PU1BLmdldCh0aGlzKS5pbnB1dDtsLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsbC5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSxsLnZhbHVlPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpfWZv'@;
put 'Y3VzKCl7dGhpcy5pc0J1aWx0KCkmJk1BLmdldCh0aGlzKS5pbnB1dC5mb2N1cygpfW9uQ2xpY2soKXt9b25LZXl1cChsKXt0aGlzLm9wdGlvbnMudmFsdWU9bC50YXJnZXQudmFsdWV9fWNvbnN0IEk3PWpqLHhBPW5ldyBXZWFrTWFwO2NsYXNzIHpqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBE'@;
put 'RUZBVUxUUygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsWGwoemouREVGQVVMVFMsYSkpLHhBLnNldCh0aGlzLHt9KSx0aGlzLm1lbnU9bnVsbCx0aGlzLml0ZW1zPVtdLHRoaXMucmVnaXN0ZXJIb29rcygp'@;
put 'fXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygiY2xpY2siLCgpPT50aGlzLm9uQ2xpY2soKSl9c2V0SXRlbXMobCl7dGhpcy5pdGVtcz10aGlzLnRyYW5zbGF0ZU5hbWVzKGwpLHRoaXMubWVudSYmdGhpcy5tZW51LnNldE1lbnVJdGVtcyh0aGlzLml0ZW1zKX10cmFuc2xhdGVO'@;
put 'YW1lcyhsKXtyZXR1cm4gRG4obCxhPT57YS5uYW1lPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShhLm5hbWUpfSksbH1idWlsZCgpe3N1cGVyLmJ1aWxkKCksdGhpcy5tZW51PW5ldyB5aih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFNlbGVjdFVJIGh0RmlsdGVyc0NvbmRpdGlvbnNNZW51Iixr'@;
put 'ZWVwSW5WaWV3cG9ydDohMSxzdGFuZGFsb25lOiEwLGNvbnRhaW5lcjp0aGlzLm9wdGlvbnMubWVudUNvbnRhaW5lcn0pLHRoaXMubWVudS5zZXRNZW51SXRlbXModGhpcy5pdGVtcyk7Y29uc3QgbD1uZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdENhcHRpb24ifSksYT1u'@;
put 'ZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pLGQ9eEEuZ2V0KHRoaXMpO2QuY2FwdGlvbj1sLGQuY2FwdGlvbkVsZW1lbnQ9bC5lbGVtZW50LGQuZHJvcGRvd249YSxEbihbbCxhXSxoPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGguZWxlbWVudCkp'@;
put 'LHRoaXMubWVudS5hZGRMb2NhbEhvb2soInNlbGVjdCIsaD0+dGhpcy5vbk1lbnVTZWxlY3QoaCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uTWVudUNsb3NlZCgpKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1'@;
put 'cm47bGV0IGw7bD10aGlzLm9wdGlvbnMudmFsdWU/dGhpcy5vcHRpb25zLnZhbHVlLm5hbWU6dGhpcy5tZW51LmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKExrKSx4QS5nZXQodGhpcykuY2FwdGlvbkVsZW1lbnQudGV4dENvbnRlbnQ9bCxzdXBlci51cGRhdGUoKX1vcGVuT3B0aW9ucygpe2Nv'@;
put 'bnN0IGw9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMubWVudSYmKHRoaXMubWVudS5vcGVuKCksdGhpcy5tZW51LnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMuaG90LmlzTHRyKCk/bC5sZWZ0LTU6bC5sZWZ0LTMxLHRvcDpsLnRvcC0xLHdpZHRoOmwud2lkdGgsaGVp'@;
put 'Z2h0OmwuaGVpZ2h0fSkpfWNsb3NlT3B0aW9ucygpe3RoaXMubWVudSYmdGhpcy5tZW51LmNsb3NlKCl9b25NZW51U2VsZWN0KGwpe2wubmFtZSE9PWdzJiYodGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRhdGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsdGhpcy5vcHRpb25z'@;
put 'LnZhbHVlKSl9b25NZW51Q2xvc2VkKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIil9b25DbGljaygpe3RoaXMub3Blbk9wdGlvbnMoKX1kZXN0cm95KCl7dGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCk7Y29uc3R7Y2FwdGlvbjpsLGRyb3Bk'@;
put 'b3duOmF9PXhBLmdldCh0aGlzKTtsJiZsLmRlc3Ryb3koKSxhJiZhLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IGJpZT16aixVaj1jbGFzcyB2UGUgZXh0ZW5kcyBiQXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksdGhpcy5uYW1lPWEu'@;
put 'bmFtZSx0aGlzLmFkZFNlcGFyYXRvcj1hLmFkZFNlcGFyYXRvcix0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGJpZSh0aGlzLmhvdCx7bWVudUNvbnRhaW5lcjphLm1lbnVDb250YWluZXJ9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBJNyh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6UEJ9KSksdGhp'@;
put 'cy5lbGVtZW50cy5wdXNoKG5ldyBJNyh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6RkJ9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygic2VsZWN0IixsPT50aGlzLm9uQ29uZGl0aW9uU2VsZWN0KGwpKSx0'@;
put 'aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksRG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksbD0+e2wuYWRkTG9jYWxIb29rKCJrZXlkb3duIixhPT50aGlzLm9uSW5wdXRLZXlEb3duKGEpKX0pfXNl'@;
put 'dFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSwhbClyZXR1cm47Y29uc3QgYT1XdShsLmNvbW1hbmQpO2EubmFtZS5zdGFydHNXaXRoKHlsKSYmKGEubmFtZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGEubmFtZSkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGEpLERu'@;
put 'KGwuYXJncywoZCxoKT0+e2lmKGg+YS5pbnB1dHNDb3VudC0xKXJldHVybiExO2NvbnN0IGY9dGhpcy5nZXRJbnB1dEVsZW1lbnQoaCk7Zi5zZXRWYWx1ZShkKSxmW2EuaW5wdXRzQ291bnQ+aD8ic2hvdyI6ImhpZGUiXSgpLGh8fHNldFRpbWVvdXQoKCk9PmYuZm9jdXMoKSwxMCl9KX1nZXRT'@;
put 'dGF0ZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuZ2V0VmFsdWUoKXx8T2coR2MpLGE9W107cmV0dXJuIERuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLChkLGgpPT57bC5pbnB1dHNDb3VudD5oJiZhLnB1c2goZC5nZXRWYWx1ZSgpKX0pLHtjb21tYW5kOmwsYXJnczphfX11'@;
put 'cGRhdGVTdGF0ZShsLGEpe2NvbnN0IGQ9T2cobD9sLm5hbWU6R2MpO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGEse2NvbW1hbmQ6ZCxhcmdzOmw/bC5hcmdzOltdfSksbHx8RG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksaD0+aC5zZXRWYWx1ZShudWxsKSl9Z2V0U2VsZWN0RWxlbWVu'@;
put 'dCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgYmllKVswXX1nZXRJbnB1dEVsZW1lbnQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnRz'@;
put 'KClbbF19Z2V0SW5wdXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgSTcpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxo'@;
put 'aWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLF8pPT57cGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51Q29uZGl0aW9uIiksdGhpcy5hZGRTZXBhcmF0b3ImJnBpKGEucGFyZW50Tm9kZSwiYm9yZGVyIik7Y29uc3QgVD10aGlzLmhvdC5yb290RG9jdW1l'@;
put 'bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHBpKFQsImh0RmlsdGVyc01lbnVMYWJlbCIpLFQudGV4dENvbnRlbnQ9XyxhLmFwcGVuZENoaWxkKFQpLGEucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fERuKHRoaXMuZWxlbWVudHMsVz0+YS5hcHBlbmRDaGls'@;
put 'ZChXLmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bGV0IGE9W09nKEdjKV07aWYobnVsbCE9PWwpe2NvbnN0e3Zpc3VhbEluZGV4OmR9PWw7YT1mdW5jdGlvbiBtUGUoYyl7Y29uc3QgbD1bXTts'@;
put 'ZXQgYT1jO3JldHVybiB2aWVbYV18fChhPSJ0ZXh0IiksRG4odmllW2FdLGQ9PntsZXQgaDtoPWQ9PT1ncz97bmFtZTpnc306V3UoT2coZCkpLGwucHVzaChoKX0pLGx9KHRoaXMuaG90LmdldERhdGFUeXBlKDAsZCx0aGlzLmhvdC5jb3VudFJvd3MoKSxkKSl9RG4odGhpcy5nZXRJbnB1dEVs'@;
put 'ZW1lbnRzKCksZD0+ZC5oaWRlKCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGEpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYVswXSl9b25Db25kaXRpb25TZWxlY3QobCl7RG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGEsZCk9'@;
put 'PnthW2wuaW5wdXRzQ291bnQ+ZD8ic2hvdyI6ImhpZGUiXSgpLDA9PT1kJiZzZXRUaW1lb3V0KCgpPT5hLmZvY3VzKCksMTApfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpfW9uU2VsZWN0VUlDbG9zZWQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX1vbklucHV0'@;
put 'S2V5RG93bihsKXtvNyhsLmtleUNvZGUsIkVOVEVSIik/KHRoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0IiksdjIobCkpOm83KGwua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLHYyKGwpKX19LHp5PXt9O2Z1bmN0aW9uIGJQZShjKXtyZXR1cm4genlb'@;
put 'Y10ubmFtZX1mdW5jdGlvbiBaaihjLGwsYSl7enlbY109e25hbWU6bCxmdW5jOmF9fWNvbnN0IGU0PSJjb25qdW5jdGlvbiI7WmooZTQsVEIsZnVuY3Rpb24gd1BlKGMsbCl7cmV0dXJuIGMuZXZlcnkoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IEVBPSJkaXNqdW5jdGlvbiI7WmooRUEsUmssZnVu'@;
put 'Y3Rpb24gU1BlKGMsbCl7cmV0dXJuIGMuc29tZShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgWWo9ImRpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uIjtaaihZaixSayxmdW5jdGlvbiB4UGUoYyxsKXtpZihjLmxlbmd0aDwzKXRocm93IEVycm9yKCJPcGVyYXRpb24gZG9lc24ndCB3b3JrIG9u'@;
put 'IGxlc3MgdGhlbiB0aHJlZSBjb25kaXRpb25zLiIpO3JldHVybiBjLnNsaWNlKDAsYy5sZW5ndGgtMSkuc29tZShhPT5hLmZ1bmMobCkpJiZjW2MubGVuZ3RoLTFdLmZ1bmMobCl9KTtjb25zdCBrQT1uZXcgV2Vha01hcDtjbGFzcyBXaiBleHRlbmRzIFFwe3N0YXRpYyBnZXQgREVGQVVMVFMo'@;
put 'KXtyZXR1cm4gV3Uoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xhc3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLFhsKFdqLkRFRkFVTFRTLGEpKSxrQS5zZXQodGhpcyx7fSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9'@;
put 'a0EuZ2V0KHRoaXMpO2wuaW5wdXQ9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkO2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7YS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250'@;
put 'ZW50KSxhLmh0bWxGb3I9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9yKSxsLmxhYmVsPWEsdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1cm47Y29uc3QgbD1r'@;
put 'QS5nZXQodGhpcyk7bC5pbnB1dC5jaGVja2VkPXRoaXMub3B0aW9ucy5jaGVja2VkLGwubGFiZWwudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCl9aXNDaGVja2VkKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jaGVja2Vk'@;
put 'fXNldENoZWNrZWQoKXt0aGlzLm9wdGlvbnMuY2hlY2tlZD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLHRoaXMudXBkYXRlKCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYma0EuZ2V0KHRoaXMpLmlucHV0LmZvY3VzKCl9fWNvbnN0'@;
put 'IHlpZT1XaixrUGU9Y2xhc3MgRVBlIGV4dGVuZHMgYkF7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5idWlsZE9wZXJhdG9yc0VsZW1lbnQoKX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRo'@;
put 'aXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihwaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVPcGVyYXRvcnMiKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRl'@;
put 'KCJnaG9zdC10YWJsZSIpfHxEbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpe2NvbnN0IGw9W2U0LEVBXTtEbihsLGE9Pntjb25zdCBkPW5ldyB5aWUodGhpcy5ob3Qse25hbWU6Im9wZXJhdG9yIixsYWJlbDp7'@;
put 'aHRtbEZvcjphLHRleHRDb250ZW50OmJQZShhKX0sdmFsdWU6YSxjaGVja2VkOmE9PT1sWzBdLGlkOmF9KTtkLmFkZExvY2FsSG9vaygiY2hhbmdlIixoPT50aGlzLm9uUmFkaW9JbnB1dENoYW5nZShoKSksdGhpcy5lbGVtZW50cy5wdXNoKGQpfSl9c2V0Q2hlY2tlZChsKXtpZih0aGlzLmVs'@;
put 'ZW1lbnRzLmxlbmd0aDxsKXRocm93IEVycm9yKEFhYFJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICR7bH0gZG9lc24ndCBleGlzdC5gKTtEbih0aGlzLmVsZW1lbnRzLChhLGQpPT57YS5zZXRDaGVja2VkKGQ9PT1sKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7Y29uc3QgbD10aGlzLmVsZW1l'@;
put 'bnRzLmZpbmQoYT0+YSBpbnN0YW5jZW9mIHlpZSYmYS5pc0NoZWNrZWQoKSk7cmV0dXJuIGw/bC5nZXRWYWx1ZSgpOmU0fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKX1zZXRTdGF0ZShsKXt0aGlzLnJlc2V0KCksbCYmdGhpcy5nZXRBY3RpdmVPcGVyYXRp'@;
put 'b25JZCgpIT09bCYmRG4odGhpcy5lbGVtZW50cyxhPT57YS5zZXRDaGVja2VkKGEuZ2V0VmFsdWUoKT09PWwpfSl9dXBkYXRlU3RhdGUoKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZTQ7ZD09PVlqJiYoZD1FQSksdGhpcy5z'@;
put 'dGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZCl9cmVzZXQoKXt0aGlzLnNldENoZWNrZWQoMCl9b25SYWRpb0lucHV0Q2hhbmdlKGwpe3RoaXMuc2V0U3RhdGUobC50YXJnZXQudmFsdWUpfX07ZnVuY3Rpb24gVFBlKGMsbCl7bGV0'@;
put 'IGE9YztyZXR1cm4iIj09PWEmJihhPWAoJHtsfSlgKSxhfU50ZSgpO2NvbnN0IEdqPW5ldyBTZXQoWzFdKS5oYXMoMSksRFBlPUdqJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXkuZnJvbTtmdW5jdGlvbiBVeShjKXtsZXQgbD1jO3JldHVybiBHaiYmKGw9bmV3IFNldChsKSksZnVuY3Rpb24o'@;
put 'YSl7bGV0IGQ7cmV0dXJuIGQ9R2o/bC5oYXMoYSk6ISF+bC5pbmRleE9mKGEpLGR9fWZ1bmN0aW9uIENpZShjKXtyZXR1cm4gYz8/IiJ9ZnVuY3Rpb24gJGooYyl7bGV0IGw9YztyZXR1cm4gbD1EUGU/QXJyYXkuZnJvbShuZXcgU2V0KGwpKTpyTihsKSxsPWwuc29ydCgoYSxkKT0+Im51bWJl'@;
put 'ciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGQ/YS1kOmE9PT1kPzA6YT5kPzE6LTEpLGx9ZnVuY3Rpb24gU2llKGMsbCxhLGQpe2NvbnN0IGg9W10sZj1jPT09bDtsZXQgXztyZXR1cm4gZnx8KF89VXkobCkpLERuKGMsVD0+e2xldCBXPSExOyhmfHxfKFQpKSYmKFc9ITApO2NvbnN0'@;
put 'IGllPXtjaGVja2VkOlcsdmFsdWU6VCx2aXN1YWxWYWx1ZTpUUGUoVCxhKX07ZCYmZChpZSksaC5wdXNoKGllKX0pLGh9Y29uc3QgcWo9bmV3IFdlYWtNYXA7Y2xhc3MgS2ogZXh0ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHtocmVmOiIjIix0YWdOYW1lOiJhIn0p'@;
put 'fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxYbChLai5ERUZBVUxUUyxhKSkscWouc2V0KHRoaXMse30pfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxxai5nZXQodGhpcykubGluaz10aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGR9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihxai5nZXQodGhpcyku'@;
put 'bGluay50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnRleHRDb250ZW50KSl9fWNvbnN0IE1pZT1LaixJUGU9bmV3IFdlYWtNYXA7Y2xhc3MgWGogZXh0ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHtjbGFzc05hbWU6Imh0'@;
put 'VUlNdWx0aXBsZVNlbGVjdCIsdmFsdWU6W119KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsWGwoWGouREVGQVVMVFMsYSkpLElQZS5zZXQodGhpcyx7fSksdGhpcy5zZWFyY2hJbnB1dD1uZXcgSTcodGhpcy5ob3Qse3BsYWNlaG9sZGVyOk9CLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2Vs'@;
put 'ZWN0U2VhcmNoIn0pLHRoaXMuc2VsZWN0QWxsVUk9bmV3IE1pZSh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6REIsY2xhc3NOYW1lOiJodFVJU2VsZWN0QWxsIn0pLHRoaXMuY2xlYXJBbGxVST1uZXcgTWllKHRoaXMuaG90LHt0ZXh0Q29udGVudDpJQixjbGFzc05hbWU6Imh0VUlDbGVhckFsbCJ9'@;
put 'KSx0aGlzLml0ZW1zPVtdLHRoaXMuaXRlbXNCb3g9bnVsbCx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5zZWFyY2hJbnB1dC5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnRoaXMub25JbnB1dEtleURvd24obCkpLHRoaXMuc2VhcmNoSW5wdXQuYWRkTG9jYWxI'@;
put 'b29rKCJpbnB1dCIsbD0+dGhpcy5vbklucHV0KGwpKSx0aGlzLnNlbGVjdEFsbFVJLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnRoaXMub25TZWxlY3RBbGxDbGljayhsKSksdGhpcy5jbGVhckFsbFVJLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnRoaXMub25DbGVhckFsbENsaWNrKGwpKX1z'@;
put 'ZXRJdGVtcyhsKXt0aGlzLml0ZW1zPWwsdGhpcy5pdGVtc0JveCYmdGhpcy5pdGVtc0JveC5sb2FkRGF0YSh0aGlzLml0ZW1zKX1zZXRMb2NhbGUobCl7dGhpcy5sb2NhbGU9bH1nZXRMb2NhbGUoKXtyZXR1cm4gdGhpcy5sb2NhbGV9Z2V0SXRlbXMoKXtyZXR1cm5bLi4udGhpcy5pdGVtc119'@;
put 'Z2V0VmFsdWUoKXtyZXR1cm4gZnVuY3Rpb24gT1BlKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+e2EuY2hlY2tlZCYmbC5wdXNoKGEudmFsdWUpfSksbH0odGhpcy5pdGVtcyl9aXNTZWxlY3RlZEFsbFZhbHVlcygpe3JldHVybiB0aGlzLml0ZW1zLmxlbmd0aD09PXRoaXMuZ2V0VmFs'@;
put 'dWUoKS5sZW5ndGh9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1uZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbdGhpcy5zZWxlY3RB'@;
put 'bGxVSSx0aGlzLmNsZWFyQWxsVUldfSk7dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlYXJjaElucHV0LmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpO2NvbnN0IGg9Zj0+e3RoaXMuX2VsZW1l'@;
put 'bnQmJih0aGlzLml0ZW1zQm94JiZ0aGlzLml0ZW1zQm94LmRlc3Ryb3koKSxwaShmLCJodFVJTXVsdGlwbGVTZWxlY3RIb3QiKSx0aGlzLml0ZW1zQm94PW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3RvcihmLHtkYXRhOnRoaXMuaXRlbXMsY29sdW1uczpbe2RhdGE6ImNoZWNrZWQiLHR5cGU6ImNo'@;
put 'ZWNrYm94IixsYWJlbDp7cHJvcGVydHk6InZpc3VhbFZhbHVlIixwb3NpdGlvbjoiYWZ0ZXIifX1dLGJlZm9yZVJlbmRlcmVyOihXLGllLHBlLHdlLEVlLFplKT0+e1cudGl0bGU9WmUuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChpZSxaZS5sYWJlbC5wcm9wZXJ0eSl9LG1heENvbHM6MSxh'@;
put 'dXRvV3JhcENvbDohMCxoZWlnaHQ6MTEwLGNvbFdpZHRoczooKT0+dGhpcy5pdGVtc0JveC5jb250YWluZXIuc2Nyb2xsV2lkdGgtTGMobCksY29weVBhc3RlOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGZpbGxIYW5kbGU6ITEsZnJhZ21lbnRTZWxlY3Rpb246ImNlbGwiLHRh'@;
put 'Yk1vdmVzOntyb3c6MSxjb2w6MH0sbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9KSx0aGlzLml0ZW1zQm94LmluaXQoKSx0aGlzLml0ZW1zQm94LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJF'@;
put 'c2NhcGUiXV0sY2FsbGJhY2s6Vz0+e3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsVyx0aGlzKX0sZ3JvdXA6Im11bHRpcGxlU2VsZWN0Lml0ZW1Cb3gifSkpfTtoKGEpLHNldFRpbWVvdXQoKCk9PmgoYSksMTAwKX1yZXNldCgpe3RoaXMuc2VhcmNoSW5wdXQucmVzZXQoKSx0aGlzLnNl'@;
put 'bGVjdEFsbFVJLnJlc2V0KCksdGhpcy5jbGVhckFsbFVJLnJlc2V0KCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJih0aGlzLml0ZW1zQm94LmxvYWREYXRhKGZ1bmN0aW9uIFJQZShjLGwpe2NvbnN0IGE9VXkobCk7cmV0dXJuIGNzKGMsZD0+KGQuY2hlY2tlZD1hKGQudmFsdWUpLGQpKX0o'@;
put 'dGhpcy5pdGVtcyx0aGlzLm9wdGlvbnMudmFsdWUpKSxzdXBlci51cGRhdGUoKSl9ZGVzdHJveSgpe3RoaXMuaXRlbXNCb3gmJnRoaXMuaXRlbXNCb3guZGVzdHJveSgpLHRoaXMuc2VhcmNoSW5wdXQuZGVzdHJveSgpLHRoaXMuY2xlYXJBbGxVSS5kZXN0cm95KCksdGhpcy5zZWxlY3RBbGxV'@;
put 'SS5kZXN0cm95KCksdGhpcy5zZWFyY2hJbnB1dD1udWxsLHRoaXMuY2xlYXJBbGxVST1udWxsLHRoaXMuc2VsZWN0QWxsVUk9bnVsbCx0aGlzLml0ZW1zQm94PW51bGwsdGhpcy5pdGVtcz1udWxsLHN1cGVyLmRlc3Ryb3koKX1vbklucHV0KGwpe2NvbnN0IGE9bC50YXJnZXQudmFsdWUudG9M'@;
put 'b2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSk7bGV0IGQ7ZD0iIj09PWE/Wy4uLnRoaXMuaXRlbXNdOl8xKHRoaXMuaXRlbXMsaD0+YCR7aC52YWx1ZX1gLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpLmluZGV4T2YoYSk+PTApLHRoaXMuaXRlbXNCb3gubG9hZERh'@;
put 'dGEoZCl9b25JbnB1dEtleURvd24obCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixsLHRoaXMpLHZOKG83LGwua2V5Q29kZSkoIkFSUk9XX0RPV058VEFCIikmJiF0aGlzLml0ZW1zQm94LmlzTGlzdGVuaW5nKCkmJih2MihsKSx0aGlzLml0ZW1zQm94Lmxpc3RlbigpLHRoaXMuaXRl'@;
put 'bXNCb3guc2VsZWN0Q2VsbCgwLDApKX1vblNlbGVjdEFsbENsaWNrKGwpe2NvbnN0IGE9W107bC5wcmV2ZW50RGVmYXVsdCgpLERuKHRoaXMuaXRlbXNCb3guZ2V0U291cmNlRGF0YSgpLChkLGgpPT57ZC5jaGVja2VkPSEwLGEucHVzaChhVihkLGgpWzBdKX0pLHRoaXMuaXRlbXNCb3guc2V0'@;
put 'U291cmNlRGF0YUF0Q2VsbChhKX1vbkNsZWFyQWxsQ2xpY2sobCl7Y29uc3QgYT1bXTtsLnByZXZlbnREZWZhdWx0KCksRG4odGhpcy5pdGVtc0JveC5nZXRTb3VyY2VEYXRhKCksKGQsaCk9PntkLmNoZWNrZWQ9ITEsYS5wdXNoKGFWKGQsaClbMF0pfSksdGhpcy5pdGVtc0JveC5zZXRTb3Vy'@;
put 'Y2VEYXRhQXRDZWxsKGEpfX1jb25zdCB4aWU9WGosUGc9ImJ5X3ZhbHVlIjtKbChQZyxmdW5jdGlvbiBQUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3VudDowLGlucHV0VmFsdWVzRGVjb3JhdG9yKGMpe2xldFtsXT1jO3JldHVy'@;
put 'bltVeShsKV19LHNob3dPcGVyYXRvcnM6ITF9KTtjb25zdCBIUGU9Y2xhc3MgRlBlIGV4dGVuZHMgYkF7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyB4aWUodGhpcy5ob3QpKSx0'@;
put 'aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnRoaXMub25JbnB1dEtleURvd24obCkpfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSxsJiZsLmNvbW1hbmQua2V5PT09'@;
put 'UGcpe2NvbnN0IGE9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTthLnNldEl0ZW1zKGwuaXRlbXNTbmFwc2hvdCksYS5zZXRWYWx1ZShsLmFyZ3NbMF0pLGEuc2V0TG9jYWxlKGwubG9jYWxlKX19Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50'@;
put 'KCksYT1sLmdldEl0ZW1zKCk7cmV0dXJue2NvbW1hbmQ6e2tleTpsLmlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXx8IWEubGVuZ3RoP0djOlBnfSxhcmdzOltsLmdldFZhbHVlKCldLGl0ZW1zU25hcHNob3Q6YX19dXBkYXRlU3RhdGUobCl7Y29uc3QgYT0oZCxoLGYsXyxUKT0+e2NvbnN0W1ddPV8x'@;
put 'KGgsd2U9PndlLm5hbWU9PT1QZyksaWU9e30scGU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShPayk7aWYoVyl7Y29uc3Qgd2U9JGooY3MoXyhkLFQpLGV0PT5ldC52YWx1ZSkpO2YmJihXLmFyZ3NbMF09Zik7Y29uc3QgRWU9W10sWmU9U2llKHdlLFcuYXJnc1swXSxwZSxldD0+e2V0'@;
put 'LmNoZWNrZWQmJkVlLnB1c2goZXQudmFsdWUpfSk7aWUubG9jYWxlPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4pLmxvY2FsZSxpZS5hcmdzPVtFZV0saWUuY29tbWFuZD1PZyhQZyksaWUuaXRlbXNTbmFwc2hvdD1aZX1lbHNlIGllLmFyZ3M9'@;
put 'W10saWUuY29tbWFuZD1PZyhHYyk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoZCxpZSl9O2EobC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4sbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3Rvcnkp'@;
put 'LGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzLmxlbmd0aCYmYShsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb2x1bW4sbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5LGwuZWRp'@;
put 'dGVkQ29uZGl0aW9uU3RhY2spfWdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgeGllKVswXX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5k'@;
put 'OiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZixfKT0+e3BpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudVZhbHVlIik7Y29uc3QgVD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7'@;
put 'cmV0dXJuIHBpKFQsImh0RmlsdGVyc01lbnVMYWJlbCIpLFQudGV4dENvbnRlbnQ9XyxhLmFwcGVuZENoaWxkKFQpLGEucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fERuKHRoaXMuZWxlbWVudHMsVz0+YS5hcHBlbmRDaGlsZChXLmVsZW1lbnQpKSxhfX19cmVzZXQo'@;
put 'KXtjb25zdCBsPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoT2spLGE9JGoodGhpcy5fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpKSxkPVNpZShhLGEsbCk7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyhkKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0TXVsdGlw'@;
put 'bGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYSk7Y29uc3QgaD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1oJiZ0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldExvY2FsZSh0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGgu'@;
put 'dmlzdWFsSW5kZXgpLmxvY2FsZSl9b25JbnB1dEtleURvd24obCl7bzcobC5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksdjIobCkpfV9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5n'@;
put 'ZXRTZWxlY3RlZENvbHVtbigpO3JldHVybiBudWxsPT09bD9bXTpjcyh0aGlzLmhvdC5nZXREYXRhQXRDb2wobC52aXN1YWxJbmRleCksYT0+Q2llKGEpKX19O2NsYXNzIFp5IGV4dGVuZHMgYkF7c3RhdGljIGdldCBCVVRUT05fT0soKXtyZXR1cm4ib2sifXN0YXRpYyBnZXQgQlVUVE9OX0NB'@;
put 'TkNFTCgpe3JldHVybiJjYW5jZWwifWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITB9KSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgSTcodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6TEIsY2xhc3NOYW1lOiJodFVJQnV0'@;
put 'dG9uIGh0VUlCdXR0b25PSyIsaWRlbnRpZmllcjpaeS5CVVRUT05fT0t9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBJNyh0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpSQixjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbkNhbmNlbCIsaWRlbnRpZmllcjpaeS5CVVRUT05f'@;
put 'Q0FOQ0VMfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXtEbih0aGlzLmVsZW1lbnRzLGw9PntsLmFkZExvY2FsSG9vaygiY2xpY2siLChhLGQpPT50aGlzLm9uQnV0dG9uQ2xpY2soYSxkKSl9KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMu'@;
put 'aWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihwaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVBY3Rpb25CYXIiKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJn'@;
put 'aG9zdC10YWJsZSIpfHxEbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWFjY2VwdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0Iil9Y2FuY2VsKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKX1vbkJ1dHRvbkNsaWNrKGwsYSl7YS5vcHRp'@;
put 'b25zLmlkZW50aWZpZXI9PT1aeS5CVVRUT05fT0s/dGhpcy5hY2NlcHQoKTp0aGlzLmNhbmNlbCgpfX1jb25zdCBOUGU9WnksRWllPSJDb25kaXRpb25Db2xsZWN0aW9uLmZpbHRlcmluZ1N0YXRlcyI7Y2xhc3Mga2lle2NvbnN0cnVjdG9yKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07dGhpcy5ob3Q9bCx0aGlzLmlzTWFwUmVnaXN0cmFibGU9YSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1uZXcgRWssITA9PT10aGlzLmlzTWFwUmVnaXN0cmFibGU/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJN'@;
put 'YXAoRWllLHRoaXMuZmlsdGVyaW5nU3RhdGVzKTp0aGlzLmZpbHRlcmluZ1N0YXRlcy5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aH1pc01hdGNo'@;
put 'KGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgoYSksZj1udWxsIT09KGQ9aD8uY29uZGl0aW9ucykmJnZvaWQgMCE9PWQ/ZDpbXSxfPWg/Lm9wZXJhdGlvbjtyZXR1cm4gdGhpcy5pc01hdGNoSW5Db25kaXRpb25zKGYsbCxfKX1pc01hdGNo'@;
put 'SW5Db25kaXRpb25zKGwsYSl7cmV0dXJuIWwubGVuZ3RofHxmdW5jdGlvbiBfUGUoYyl7aWYoIXp5W2NdKXRocm93IEVycm9yKGBPcGVyYXRpb24gd2l0aCBpZCAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3QgbD16eVtjXS5mdW5jO3JldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBs'@;
put 'KGEsZCl9fShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ZTQpKGwsYSl9YWRkQ29uZGl0aW9uKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmU0LGg9YXJndW1lbnRz'@;
put 'Lmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLmxvY2FsZSxfPWNzKGEuYXJncyxwZT0+InN0cmluZyI9PXR5cGVvZiBwZT9wZS50b0xvY2FsZUxvd2VyQ2FzZShmKTpwZSksVD1hLm5hbWV8fGEuY29tbWFuZC5rZXk7dGhpcy5y'@;
put 'dW5Mb2NhbEhvb2tzKCJiZWZvcmVBZGQiLGwpO2NvbnN0IFc9dGhpcy5nZXRPcGVyYXRpb24obCk7aWYoVyl7aWYoVyE9PWQpdGhyb3cgRXJyb3IoQWFgVGhlIGNvbHVtbiBvZiBpbmRleCAke2x9IGhhcyBiZWVuIGFscmVhZHkgYXBwbGllZCB3aXRoIGEgXGAke1d9XGBceDIwCiAgICAgICAg'@;
put 'ZmlsdGVyIG9wZXJhdGlvbi4gVXNlIFxgcmVtb3ZlQ29uZGl0aW9uc1xgIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMgYW5kIHRoZW4gYWRkIG5ldyBvbmVzLlx4MjAKICAgICAgICBNaW5kIHRoYXQgeW91IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mIG9wZXJhdGlvbnMg'@;
put 'KGZvciBpbnN0YW5jZSwgaWYgeW91IHVzZSBcYGNvbmp1bmN0aW9uXGAsXHgyMAogICAgICAgIHVzZSBpdCBjb25zZXF1ZW50bHkgZm9yIGEgcGFydGljdWxhciBjb2x1bW4pLmApfWVsc2UgaWYoTGEoenlbZF0pKXRocm93IG5ldyBFcnJvcihBYWBVbmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1l'@;
put 'ZCBcYCR7ZH1cYC4gUG9zc2libGUgb25lcyBhcmVceDIwCiAgICAgICAgXGBkaXNqdW5jdGlvblxgIGFuZCBcYGNvbmp1bmN0aW9uXGAuYCk7Y29uc3QgaWU9dGhpcy5nZXRDb25kaXRpb25zKGwpOzA9PT1pZS5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KGws'@;
put 'e29wZXJhdGlvbjpkLGNvbmRpdGlvbnM6W3tuYW1lOlQsYXJnczpfLGZ1bmM6SnAoVCxfKX1dfSxoKTppZS5wdXNoKHtuYW1lOlQsYXJnczpfLGZ1bmM6SnAoVCxfKX0pLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJBZGQiLGwpfWdldENvbmRpdGlvbnMobCl7dmFyIGEsZDtyZXR1cm4gbnVs'@;
put 'bCE9PShhPW51bGw9PT0oZD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1hP2E6W119Z2V0T3BlcmF0aW9uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5maWx0ZXJpbmdTdGF0'@;
put 'ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vcGVyYXRpb259Z2V0RmlsdGVyZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAobD0+e2xldFthXT1sO3JldHVybiBhfSl9Z2V0Q29sdW1uU3RhY2tQb3NpdGlv'@;
put 'bihsKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5pbmRleE9mKGwpfWV4cG9ydEFsbENvbmRpdGlvbnMoKXtyZXR1cm4gQWwodGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLChsLGEpPT57bGV0W2Qse29wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zn1dPWE7cmV0dXJu'@;
put 'IGwucHVzaCh7Y29sdW1uOmQsb3BlcmF0aW9uOmgsY29uZGl0aW9uczpjcyhmLF89PntsZXR7bmFtZTpULGFyZ3M6V309XztyZXR1cm57bmFtZTpULGFyZ3M6V319KX0pLGx9LFtdKX1pbXBvcnRBbGxDb25kaXRpb25zKGwpe3RoaXMuY2xlYW4oKSxEbihsLGE9PntEbihhLmNvbmRpdGlvbnMs'@;
put 'ZD0+dGhpcy5hZGRDb25kaXRpb24oYS5jb2x1bW4sZCkpfSl9cmVtb3ZlQ29uZGl0aW9ucyhsKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJlbW92ZSIsbCksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJWYWx1ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyUmVtb3ZlIixsKX1j'@;
put 'bGVhbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ2xlYW4iKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbGVhbiIpfWhhc0NvbmRpdGlvbnMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTtyZXR1cm4gYT9kLnNv'@;
put 'bWUoaD0+aC5uYW1lPT09YSk6ZC5sZW5ndGg+MH1kZXN0cm95KCl7dGhpcy5pc01hcFJlZ2lzdHJhYmxlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKEVpZSksdGhpcy5maWx0ZXJpbmdTdGF0ZXM9bnVsbCx0aGlzLmNsZWFyTG9jYWxIb29rcygpfX1UYShraWUs'@;
put 'TzApO2NvbnN0IEFpZT1raWUsVGllPWNsYXNzIFZQZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06KCk9PltdO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1sLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9'@;
put 'YX1maWx0ZXIoKXtsZXQgbD1bXTtyZXR1cm4gRG4odGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpLChhLGQpPT57bGV0IGg9dGhpcy5jb2x1bW5EYXRhRmFjdG9yeShhKTtkJiYoaD10aGlzLl9nZXRJbnRlcnNlY3REYXRhKGgsbCkpLGw9dGhpcy5maWx0ZXJC'@;
put 'eUNvbHVtbihhLGgpfSksbH1maWx0ZXJCeUNvbHVtbihsKXtjb25zdCBkPVtdO3JldHVybiBEbihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD0+e3ZvaWQgMCE9PWgmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc01hdGNoKGgs'@;
put 'bCkmJmQucHVzaChoKX0pLGR9X2dldEludGVyc2VjdERhdGEobCxhKXtjb25zdCBkPVtdO3JldHVybiBEbihhLGg9Pntjb25zdCBmPWgubWV0YS52aXN1YWxSb3c7dm9pZCAwIT09bFtmXSYmKGRbZl09bFtmXSl9KSxkfX07Y2xhc3MgRGlle2NvbnN0cnVjdG9yKGwsYSl7bGV0IGQ9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOigpPT5bXTt0aGlzLmhvdD1sLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1hLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9ZCx0aGlzLmNoYW5nZXM9W10sdGhpcy5ncm91cGluZz0hMSx0aGlzLmxhdGVzdEVk'@;
put 'aXRlZENvbHVtblBvc2l0aW9uPS0xLHRoaXMubGF0ZXN0T3JkZXJTdGFjaz1bXSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVSZW1vdmUiLGg9PnRoaXMuX29uQ29uZGl0aW9uQmVmb3JlTW9kaWZ5KGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRk'@;
put 'TG9jYWxIb29rKCJhZnRlclJlbW92ZSIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJBZGQiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5h'@;
put 'ZGRMb2NhbEhvb2soImJlZm9yZUNsZWFuIiwoKT0+dGhpcy5fb25Db25kaXRpb25CZWZvcmVDbGVhbigpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckNsZWFuIiwoKT0+dGhpcy5fb25Db25kaXRpb25BZnRlckNsZWFuKCkpfWdyb3VwQ2hhbmdlcygpe3Ro'@;
put 'aXMuZ3JvdXBpbmc9ITB9Zmx1c2goKXt0aGlzLmdyb3VwaW5nPSExLERuKHRoaXMuY2hhbmdlcyxsPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihsKX0pLHRoaXMuY2hhbmdlcy5sZW5ndGg9MH1fb25Db25kaXRpb25CZWZvcmVNb2RpZnkobCl7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Q'@;
put 'b3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKX11cGRhdGVTdGF0ZXNBdENvbHVtbihsLGEpe3ZhciBkPXRoaXM7aWYodGhpcy5ncm91cGluZylyZXR1cm4gdm9pZCgtMT09PXRoaXMuY2hhbmdlcy5pbmRleE9mKGwpJiZ0aGlzLmNoYW5n'@;
put 'ZXMucHVzaChsKSk7Y29uc3QgaD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpO2xldCBmPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpOy0xPT09ZiYmKGY9dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlv'@;
put 'bik7Y29uc3QgXz1oLnNsaWNlKDAsZiksVD1oLnNsaWNlKGYpO1QubGVuZ3RoJiZUWzBdLmNvbHVtbj09PWwmJlQuc2hpZnQoKTtjb25zdCBXPW10ZShmdW5jdGlvbihwZSx3ZSl7bGV0IEVlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpb'@;
put 'XTtjb25zdCBaZT1uZXcgQWllKGQuaG90LCExKSxpdD1bXS5jb25jYXQocGUsRWUpO1plLmltcG9ydEFsbENvbmRpdGlvbnMoaXQpO2NvbnN0IGV0PWQuY29sdW1uRGF0YUZhY3Rvcnkod2UpO2xldCB5dDt5dD1aZS5pc0VtcHR5KCk/ZXQ6bmV3IFRpZShaZSxTdD0+ZC5jb2x1bW5EYXRhRmFj'@;
put 'dG9yeShTdCkpLmZpbHRlcigpLHl0PWNzKHl0LFN0PT5TdC5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgRXQ9VXkoeXQpO3JldHVybiBaZS5kZXN0cm95KCksXzEoZXQsU3Q9PkV0KFN0Lm1ldGEudmlzdWFsUm93KSl9KShfKSxpZT1bXS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdl'@;
put 'dENvbmRpdGlvbnMobCkpO3RoaXMucnVuTG9jYWxIb29rcygidXBkYXRlIix7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbHVtbjpsLGNvbmRpdGlvbnM6aWV9LGRlcGVuZGVudENvbmRpdGlvblN0YWNrczpULGZpbHRlcmVkUm93c0ZhY3Rvcnk6Vyxjb25kaXRpb25BcmdzQ2hhbmdlOmF9KX1f'@;
put 'b25Db25kaXRpb25CZWZvcmVDbGVhbigpe3RoaXMubGF0ZXN0T3JkZXJTdGFjaz10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCl9X29uQ29uZGl0aW9uQWZ0ZXJDbGVhbigpe0RuKHRoaXMubGF0ZXN0T3JkZXJTdGFjayxsPT57dGhpcy51cGRhdGVTdGF0ZXNB'@;
put 'dENvbHVtbihsKX0pfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLGRzKHRoaXMsKGwsYSk9Pnt0aGlzW2FdPW51bGx9KX19VGEoRGllLE8wKTtjb25zdCBCUGU9RGllO2NsYXNzIHpQZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJmaWx0ZXJzIn1z'@;
put 'dGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5l'@;
put 'dmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luPW51bGwsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW51bGwsdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1udWxsLHRoaXMuY29tcG9uZW50cz1uZXcgTWFwKFtbImZpbHRlcl9ieV9jb25kaXRpb24i'@;
put 'LG51bGxdLFsiZmlsdGVyX29wZXJhdG9ycyIsbnVsbF0sWyJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbnVsbF0sWyJmaWx0ZXJfYnlfdmFsdWUiLG51bGxdLFsiZmlsdGVyX2FjdGlvbl9iYXIiLG51bGxdXSksdGhpcy5maWx0ZXJzUm93c01hcD1udWxsLHRoaXMuaG90LmFkZEhvb2soImFmdGVy'@;
put 'R2V0Q29sSGVhZGVyIiwoYSxkKT0+dGhpcy5vbkFmdGVyR2V0Q29sSGVhZGVyKGEsZCkpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWx0ZXJzfWVuYWJsZVBsdWdpbigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5maWx0ZXJzUm93c01hcD10aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsbmV3IG15KSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oImRyb3Bkb3duTWVudSIpO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsYT1sJiZs'@;
put 'LnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSxkPV89PihfLmFkZExvY2FsSG9vaygiYWNjZXB0IiwoKT0+dGhpcy5vbkFjdGlvbkJhclN1Ym1pdCgiYWNjZXB0IikpLF8uYWRkTG9jYWxIb29rKCJjYW5jZWwiLCgpPT50aGlzLm9uQWN0aW9uQmFyU3VibWl0KCJjYW5j'@;
put 'ZWwiKSksXy5hZGRMb2NhbEhvb2soImNoYW5nZSIsVD0+dGhpcy5vbkNvbXBvbmVudENoYW5nZShfLFQpKSxfKSxoPSgpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGtCKX06YDtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBf'@;
put 'PW5ldyBVaih0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24iLG5hbWU6aCxhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5lcjphfSk7Xy5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmls'@;
put 'dGVyX2J5X2NvbmRpdGlvbiIsZChfKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfb3BlcmF0b3JzIixuZXcga1BlKHRoaXMuaG90LHtpZDoiZmlsdGVyX29wZXJhdG9ycyIsbmFtZToiT3BlcmF0b3JzIn0p'@;
put 'KSwhdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKSl7Y29uc3QgXz1uZXcgVWoodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbmFtZToiIixhZGRTZXBhcmF0b3I6ITAsbWVudUNvbnRhaW5lcjphfSk7Xy5hZGRMb2NhbEhvb2soImFmdGVyQ2xv'@;
put 'c2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLGQoXykpfXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGQobmV3'@;
put 'IEhQZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTooKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShBQil9OmB9KSkpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9hY3Rpb25fYmFyIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9hY3Rpb25f'@;
put 'YmFyIixkKG5ldyBOUGUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYWN0aW9uX2JhciIsbmFtZToiQWN0aW9uIGJhciJ9KSkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbnx8KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1uZXcgQWllKHRoaXMuaG90KSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNl'@;
put 'cnZlcnx8KHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXI9bmV3IEJQZSh0aGlzLmhvdCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sXz0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oXykpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCJ1cGRhdGUiLF89PnRo'@;
put 'aXMudXBkYXRlQ29tcG9uZW50cyhfKSkpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKF89Pl8uc2hvdygpKSx0aGlzLmFkZEhvb2soImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixfPT50aGlzLm9uQmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMoXykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJE'@;
put 'cm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsXz0+dGhpcy5vbkFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMoXykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwoKT0+dGhpcy5vbkFmdGVyRHJvcGRvd25NZW51U2hvdygpKSx0aGlzLmFkZEhvb2soImFmdGVy'@;
put 'RHJvcGRvd25NZW51SGlkZSIsKCk9PnRoaXMub25BZnRlckRyb3Bkb3duTWVudUhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsXz0+dGhpcy5vbkFmdGVyQ2hhbmdlKF8pKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSYmdGhpcy5kcm9wZG93bk1lbnVQbHVn'@;
put 'aW4mJih0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5kaXNhYmxlUGx1Z2luKCksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlUGx1Z2luKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbDt0aGlzLmVuYWJsZWQmJihudWxsIT09KGw9dGhpcy5kcm9wZG93'@;
put 'bk1lbnVQbHVnaW4pJiZ2b2lkIDAhPT1sJiZsLmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGEsZCk9PnthLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGQsbnVsbCl9KSx0aGlzLmNv'@;
put 'bmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWFkZENvbmRpdGlvbihsLGEsZCl7bGV0IGg9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOmU0O2NvbnN0IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYse2NvbW1hbmQ6e2tleTphfSxhcmdzOmR9LGgpfXJlbW92'@;
put 'ZUNvbmRpdGlvbnMobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfWNsZWFyQ29uZGl0aW9ucyhsKXtpZih2b2lkIDA9PT1sKXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5jbGVhbigpO2Vs'@;
put 'c2V7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfX1maWx0ZXIoKXtjb25zdCBsPXRoaXMuX2NyZWF0ZURhdGFGaWx0ZXIoKSxhPSF0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgp'@;
put 'O2xldCBkPVtdO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtpZighMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVGaWx0ZXIiLGgpKWlmKGEpe2NvbnN0IF89W107dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmZpbHRl'@;
put 'cnNSb3dzTWFwLmNsZWFyKCksZD1jcyhsLmZpbHRlcigpLFc9PlcubWV0YS52aXN1YWxSb3cpO2NvbnN0IFQ9VXkoZCk7dm8odGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMSxXPT57VChXKXx8Xy5wdXNoKFcpfSksRG4oXyxXPT57dGhpcy5maWx0ZXJzUm93c01hcC5zZXRWYWx1ZUF0SW5k'@;
put 'ZXgoVywhMCl9KX0sITApLGQubGVuZ3RofHx0aGlzLmhvdC5kZXNlbGVjdENlbGwoKX1lbHNlIHRoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGaWx0ZXIiLGgpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSx0aGlzLmhvdC5y'@;
put 'ZW5kZXIoKSx0aGlzLmNsZWFyQ29sdW1uU2VsZWN0aW9uKCl9Z2V0U2VsZWN0ZWRDb2x1bW4oKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGE/e3Zpc3VhbEluZGV4'@;
put 'OmEuY29sLHBoeXNpY2FsSW5kZXg6dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhLmNvbCl9Om51bGx9Y2xlYXJDb2x1bW5TZWxlY3Rpb24oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09bCYmdGhpcy5ob3Quc2VsZWN0Q2VsbCgwLGwudmlzdWFsSW5kZXgpfWdl'@;
put 'dERhdGFNYXBBdENvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpLGQ9W107cmV0dXJuIERuKHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENvbChhKSwoaCxmKT0+e3ZhciBfO2NvbnN0e3JvdzpULGNvbDpXLHZpc3VhbENvbDppZSx2aXN1YWxSb3c6cGUsdHlwZTp3'@;
put 'ZSxpbnN0YW5jZTpFZSxkYXRlRm9ybWF0OlplLGxvY2FsZTppdH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKSxldD1udWxsIT09KF89dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhmKSxhKSkmJnZvaWQgMCE9PV8/XzpoO2QucHVzaCh7bWV0YTp7cm93OlQs'@;
put 'Y29sOlcsdmlzdWFsQ29sOmllLHZpc3VhbFJvdzpwZSx0eXBlOndlLGluc3RhbmNlOkVlLGRhdGVGb3JtYXQ6WmUsbG9jYWxlOml0fSx2YWx1ZTpDaWUoZXQpfSl9KSxkfW9uQWZ0ZXJDaGFuZ2UobCl7bCYmRG4obCxhPT57Y29uc3RbLGRdPWEsaD10aGlzLmhvdC5wcm9wVG9Db2woZCk7dGhp'@;
put 'cy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoaCkmJnRoaXMudXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24oaCl9KX11cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihsKXtjb25zdCBkPSRqKHRoaXMuaG90LmdldERhdGFBdENvbChsKSk7dGhpcy5jb25kaXRpb25V'@;
put 'cGRhdGVPYnNlcnZlci51cGRhdGVTdGF0ZXNBdENvbHVtbihsLGQpfXJlc3RvcmVDb21wb25lbnRzKGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucGh5c2ljYWxJbmRleDtsLmZvckVhY2goaD0+e2guaXNI'@;
put 'aWRkZW4oKXx8aC5yZXN0b3JlU3RhdGUoZCl9KSx0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl9b25BZnRlckRyb3Bkb3duTWVudVNob3coKXt0aGlzLnJlc3RvcmVDb21wb25lbnRzKEFycmF5LmZyb20odGhpcy5jb21wb25lbnRzLnZhbHVlcygpKSl9b25BZnRl'@;
put 'ckRyb3Bkb3duTWVudUhpZGUoKXt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3Nl'@;
put 'T3B0aW9ucygpfW9uQmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9Pnt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUudXBk'@;
put 'YXRlU2V0dGluZ3Moe2hpZGRlblJvd3M6ITB9KX0pfW9uQWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyhsKXtsLml0ZW1zLnB1c2goe25hbWU6Z3N9KSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChhPT57bC5pdGVtcy5wdXNoKGEuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9Z2V0'@;
put 'T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyhsLGEsZCxoKXtsZXQgZj1sO3JldHVybiBmPT09RUEmJmEuY29tbWFuZC5rZXkhPT1HYyYmZC5jb21tYW5kLmtleSE9PUdjJiZoLmNvbW1hbmQua2V5IT09R2M/Zj1ZajpoLmNvbW1hbmQua2V5IT09R2MmJihhLmNvbW1hbmQua2V5PT09R2N8fGQu'@;
put 'Y29tbWFuZC5rZXk9PT1HYykmJihmPWU0KSxmfW9uQWN0aW9uQmFyU3VibWl0KGwpe3ZhciBhO2lmKCJhY2NlcHQiPT09bCl7Y29uc3QgaD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7dmFyIGQ7aWYobnVsbD09PWgpcmV0dXJuIHZvaWQobnVsbD09PShkPXRoaXMuZHJvcGRvd25NZW51UGx1'@;
put 'Z2luKXx8dm9pZCAwPT09ZHx8ZC5jbG9zZSgpKTtjb25zdHtwaHlzaWNhbEluZGV4OmZ9PWgsXz10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U3RhdGUoKSxUPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U3RhdGUo'@;
put 'KSxXPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmdldFN0YXRlKCksaWU9dGhpcy5nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS5nZXRBY3RpdmVPcGVyYXRpb25JZCgpLF8sVCxXKTt0aGlz'@;
put 'LmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmdyb3VwQ2hhbmdlcygpO2xldCBwZT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihmKTstMT09PXBlJiYocGU9dm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhmKSxf'@;
put 'LmNvbW1hbmQua2V5IT09R2MmJih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYsXyxpZSxwZSksVC5jb21tYW5kLmtleSE9PUdjJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYsVCxpZSxwZSkpLFcuY29tbWFuZC5rZXkhPT1HYyYmdGhpcy5j'@;
put 'b25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLFcsaWUscGUpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCh3ZT0+d2Uuc2F2ZVN0YXRlKGYpKSx0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCksdGhpcy5maWx0ZXIo'@;
put 'KX1udWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1hfHxhLmNsb3NlKCl9b25Db21wb25lbnRDaGFuZ2UobCxhKXt0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCksbC5jb25zdHJ1Y3Rvcj09PVVqJiYhYS5pbnB1dHNDb3VudCYmdGhp'@;
put 'cy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1vblNlbGVjdFVJQ2xvc2VkKCl7dGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uc2V0TGlzdGVu'@;
put 'aW5nKCl9dXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSx7Y29tbWFuZDphfT1sLmdldFN0YXRlKCksZD1bdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIi'@;
put 'KSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIildO2Euc2hvd09wZXJhdG9ycz90aGlzLnNob3dDb21wb25lbnRzKC4uLmQpOnRoaXMuaGlkZUNvbXBvbmVudHMoLi4uZCl9b25BZnRlckdldENvbEhlYWRlcihsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENv'@;
put 'bHVtbihsKTt0aGlzLmVuYWJsZWQmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpP3BpKGEsImh0RmlsdGVyc0FjdGl2ZSIpOldvKGEsImh0RmlsdGVyc0FjdGl2ZSIpfV9jcmVhdGVEYXRhRmlsdGVyKCl7cmV0dXJuIG5ldyBUaWUoYXJndW1lbnRzLmxlbmd0aD4w'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixhPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihhKSl9dXBkYXRlQ29tcG9uZW50cyhsKXt2YXIgYTtpZihudWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9'@;
put 'PT1hfHwhYS5lbmFibGVkKXJldHVybjtjb25zdHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29uZGl0aW9uczpkLGNvbHVtbjpofX09bCxmPWQuZmlsdGVyKFQ9PlQubmFtZT09PVBnKSxfPWQuZmlsdGVyKFQ9PlQubmFtZSE9PVBnKTtpZihmLmxlbmd0aD49Mnx8Xy5sZW5ndGg+PTMpR2EoQWFg'@;
put 'VGhlIGZpbHRlciBjb25kaXRpb25zIGhhdmUgYmVlbiBhcHBsaWVkIHByb3Blcmx5LCBidXQgY291bGRu4oCZdCBiZSBkaXNwbGF5ZWQgdmlzdWFsbHkuXHgyMAogICAgICAgIFRoZSBvdmVyYWxsIGFtb3VudCBvZiBjb25kaXRpb25zIGV4Y2VlZCB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgZHJv'@;
put 'cGRvd24gbWVudS5ceDIwCiAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGRvY3VtZW50YXRpb24uYCk7ZWxzZXtjb25zdCBUPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRPcGVyYXRpb24oaCk7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLnVw'@;
put 'ZGF0ZVN0YXRlKF9bMF0saCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS51cGRhdGVTdGF0ZShfWzFdLGgpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS51cGRhdGVTdGF0ZShULGgpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRl'@;
put 'cl9ieV92YWx1ZSIpLnVwZGF0ZVN0YXRlKGwpfX1nZXRJbmRleGVzT2ZDb21wb25lbnRzKCl7Y29uc3QgbD1bXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuIGw7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'LGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBEbihoLF89PntEbihhLm1lbnVJdGVtcywoVCxXKT0+e1Qua2V5PT09Xy5nZXRNZW51SXRlbURlc2NyaXB0b3IoKS5rZXkmJmwucHVzaChXKX0pfSksbH1jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0'@;
put 'eSgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybjtjb25zdCBkPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuaG90TWVudSxoPWQuZ2V0UGx1Z2luKCJo'@;
put 'aWRkZW5Sb3dzIik7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkoZj4xP2YtMTowKSxUPTE7VDxmO1QrKylfW1QtMV09YXJndW1lbnRzW1RdO2NvbnN0IFc9dGhpcy5nZXRJbmRleGVzT2ZDb21wb25lbnRzKC4uLl8pO2w/aC5zaG93Um93cyhXKTpoLmhpZGVSb3dzKFcp'@;
put 'LGQucmVuZGVyKCl9aGlkZUNvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCExLC4uLmEpfXNob3dDb21wb25lbnRzKCl7Zm9yKHZh'@;
put 'ciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMCwuLi5hKX1kZXN0cm95KCl7dGhpcy5lbmFibGVkJiYodGhpcy5jb21wb25lbnRzLmZvckVhY2goKGwsYSk9Pntu'@;
put 'dWxsIT09bCYmKGwuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoYSxudWxsKSl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZGVzdHJveSgpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAo'@;
put 'dGhpcy5wbHVnaW5OYW1lKSksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBMaWU9ImludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUiLEpqPXtsaWNlbnNlS2V5OkxpZSx1c2VBcnJheUFyaXRobWV0aWM6ITAsdXNlQ29sdW1uSW5kZXg6ITEsdXNlU3RhdHM6ITEsZXZhbHVhdGVOdWxsVG9aZXJv'@;
put 'OiEwLHByZWNpc2lvbkVwc2lsb246MWUtMTMscHJlY2lzaW9uUm91bmRpbmc6MTQsc21hcnRSb3VuZGluZzohMCxsZWFwWWVhcjE5MDA6ITEsbnVsbERhdGU6e3llYXI6MTg5OSxtb250aDoxMixkYXk6MzB9LG51bGxZZWFyOjMwLGRhdGVGb3JtYXRzOlsiREQvTU0vWVlZWSIsIkREL01NL1lZ'@;
put 'Il0sdGltZUZvcm1hdHM6WyJoaDptbSIsImhoOm1tOnNzLnNzcyJdLG1hdGNoV2hvbGVDZWxsOiEwLHVzZVJlZ3VsYXJFeHByZXNzaW9uczohMSx1c2VXaWxkY2FyZHM6ITAsZnVuY3Rpb25BcmdTZXBhcmF0b3I6IiwiLHRob3VzYW5kU2VwYXJhdG9yOiIiLGRlY2ltYWxTZXBhcmF0b3I6Ii4i'@;
put 'LGxhbmd1YWdlOiJlbkdCIn07ZnVuY3Rpb24gUmllKGMpe3ZhciBsO3JldHVybnttYXhDb2x1bW5zOmMubWF4Q29sdW1ucyxtYXhSb3dzOmMubWF4Um93cyxsYW5ndWFnZTpudWxsPT09KGw9Y1tDdV0pfHx2b2lkIDA9PT1sfHxudWxsPT09KGw9bC5sYW5ndWFnZSl8fHZvaWQgMD09PWw/dm9p'@;
put 'ZCAwOmwubGFuZ0NvZGV9fWZ1bmN0aW9uIE9pZShjKXtyZXR1cm4gT2JqZWN0LmtleXMoYykucmVkdWNlKChsLGEpPT4oImh5cGVyZm9ybXVsYSIhPT1hJiYobFthXT1jW2FdKSxsKSx7fSl9ZnVuY3Rpb24gQUEoKXtjb25zdCBjPSJlbmdpbmVfcmVsYXRpb25zaGlwIixsPXBkKEN1KTtyZXR1'@;
put 'cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIFFqKCl7Y29uc3QgYz0ic2hhcmVkX2VuZ2luZV91c2FnZSIsbD1wZChDdSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5j'@;
put 'dGlvbiBQaWUoYyl7dmFyIGw7Y29uc3QgYT1BQSgpLGQ9MD09PWEuc2l6ZT9bXTpBcnJheS5mcm9tKG51bGwhPT0obD1hLmdldChjKSkmJnZvaWQgMCE9PWw/bDpbXSk7cmV0dXJuIG5ldyBNYXAoZC5tYXAoaD0+W2guZ2V0UGx1Z2luKCJmb3JtdWxhcyIpLnNoZWV0SWQsaF0pKX1mdW5jdGlv'@;
put 'biBGaWUoYyxsKXtpZihjKXtjb25zdCBhPUFBKCksZD1hLmdldChjKSxoPVFqKCksZj1oLmdldChjKTtkJiZkLmluY2x1ZGVzKGwpJiYoZC5zcGxpY2UoZC5pbmRleE9mKGwpLDEpLDA9PT1kLmxlbmd0aCYmYS5kZWxldGUoYykpLGYmJmYuaW5jbHVkZXMobC5ndWlkKSYmKGYuc3BsaWNlKGYu'@;
put 'aW5kZXhPZihsLmd1aWQpLDEpLDA9PT1mLmxlbmd0aCYmKGguZGVsZXRlKGMpLGMuZGVzdHJveSgpKSl9fWNvbnN0IEhpZT0iREQvTU0vWVlZWSI7ZnVuY3Rpb24gTmllKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmIiciPT09Yy5jaGFyQXQoMCkmJiI9Ij09PWMuY2hhckF0KDEpfWZ1'@;
put 'bmN0aW9uIGV6KGMsbCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiZGF0ZSI9PT1sfWZ1bmN0aW9uIFZpZShjLGwpe3JldHVybiBLbyhjLGwsITApLmlzVmFsaWQoKX1mdW5jdGlvbiBCaWUoYyxsKXtyZXR1cm4gS28oYyxsLCEwKS5mb3JtYXQoSGllKX1mdW5jdGlvbiBlRmUoYyxsKXty'@;
put 'ZXR1cm4gS28oYyxIaWUsITApLmZvcm1hdChsKX1mdW5jdGlvbiBqaWUoYyxsKXtjb25zdCBkPW5ldyBEYXRlKERhdGUuVVRDKDAsMCxjKy0xKSk7cmV0dXJuIEtvKGQpLmZvcm1hdChsKX1mdW5jdGlvbiBGZyhjLGwsYSl7KGZ1bmN0aW9uIHRGZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcmwoYyxsKXtyZXR1cm4gZnVuY3Rpb24gbkZlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6'@;
put 'bC52YWx1ZX0oYyx6aWUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gdDQoYyxsLGEpe3JldHVybiBmdW5jdGlvbiByRmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5'@;
put 'IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHppZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gemllKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwu'@;
put 'Z2V0KGMpfXZhciBZeT1uZXcgV2Vha01hcCxuND1uZXcgV2Vha01hcCx5MT1uZXcgV2Vha01hcCxUQT1uZXcgV2Vha01hcCx0ej1uZXcgV2Vha01hcCxuej1uZXcgV2Vha01hcCxEQT1uZXcgV2Vha01hcDtjb25zdCBVaWU9Y2xhc3MgaUZle2NvbnN0cnVjdG9yKGwsYSxkKXtGZyh0aGlzLFl5'@;
put 'LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLG40LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLHkxLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLFRBLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEZnKHRoaXMsdHose3dyaXRhYmxlOiEw'@;
put 'LHZhbHVlOltdfSksRmcodGhpcyxueix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyxEQSx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx0NCh0aGlzLFl5LGwpLHQ0KHRoaXMsbjQsYSksdDQodGhpcyx5MSxkKX1zZXRSZW1vdmVkSGZJbmRleGVzKGwpe3JldHVybiB0NCh0aGlz'@;
put 'LERBLGwubWFwKGE9Pntjb25zdCBkPXJsKHRoaXMsbjQpLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGEpO3JldHVybiB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCl9KSkscmwodGhpcyxEQSl9Z2V0UmVtb3ZlZEhmSW5kZXhlcygpe3JldHVybiBybCh0aGlzLERBKX1nZXRI'@;
put 'ZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9cmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZD1ybCh0aGlzLG40KS5nZXROb3RUcmltbWVkSW5kZXhlcygpO3JldHVybiBhLmluZGV4T2YoZFtsXSl9c3luY01vdmVzKGwpe2NvbnN0IGQ9YG1vdmUke2J1KHJsKHRoaXMs'@;
put 'WXkpKX1zYDtybCh0aGlzLHkxKS5nZXRFbmdpbmUoKS5iYXRjaCgoKT0+e2wuZm9yRWFjaChoPT57aC5mcm9tIT09aC50byYmaC5mcm9tKzEhPT1oLnRvJiZybCh0aGlzLHkxKS5nZXRFbmdpbmUoKVtkXShybCh0aGlzLHkxKS5nZXRTaGVldElkKCksaC5mcm9tLDEsaC50byl9KX0pfXN0b3Jl'@;
put 'TW92ZXNJbmZvcm1hdGlvbihsLGEsZCl7ITEhPT1kJiYodDQodGhpcyx0eixsLm1hcChoPT50aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCkpKSx0NCh0aGlzLG56LHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSkpfWdldE1vdmVMaW5lKGwsYSl7Y29uc3QgZD1ybCh0'@;
put 'aGlzLG40KS5nZXROdW1iZXJPZkluZGV4ZXMoKSxoPUFycmF5LmZyb20oQXJyYXkoZCkua2V5cygpKS5maWx0ZXIoXz0+ITE9PT1sLmluY2x1ZGVzKF8pKTt2YXIgZjtyZXR1cm4gMD09PWE/bnVsbCE9PShmPWhbYV0pJiZ2b2lkIDAhPT1mP2Y6MDpoW2EtMV0rMX1nZXRJbml0aWFsbHlDYWxj'@;
put 'dWxhdGVkTW92ZXMobCxhKXtsZXQgZD10aGlzLmdldE1vdmVMaW5lKGwsYSk7Y29uc3QgaD1bXTtyZXR1cm4gbC5mb3JFYWNoKGY9Pntjb25zdCBfPXtmcm9tOmYsdG86ZH07aC5mb3JFYWNoKFQ9PntULmZyb20+Xy5mcm9tJiZULnRvPD1fLmZyb20mJlQuZnJvbT5ULnRvJiYoXy5mcm9tKz0x'@;
put 'KX0pLF8uZnJvbT49ZCYmKGQrPTEpLGgucHVzaChfKX0pLGh9YWRqdXN0ZWRDYWxjdWxhdGVkTW92ZXMobCl7cmV0dXJuIGwuZm9yRWFjaCgoYSxkKT0+e2wuc2xpY2UoZCsxKS5mb3JFYWNoKGY9PntmLmZyb20+YS5mcm9tJiZmLmZyb208Zi50byYmKGYuZnJvbS09MSl9KX0pLGx9Y2FsY3Vs'@;
put 'YXRlQW5kU3luY01vdmVzKGwsYSl7aWYocmwodGhpcyx5MSkuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKXx8ITE9PT1sfHwhMT09PWEpcmV0dXJuO2NvbnN0IGQ9dGhpcy5hZGp1c3RlZENhbGN1bGF0ZWRNb3Zlcyh0aGlzLmdldEluaXRpYWxseUNhbGN1bGF0ZWRNb3ZlcyhybCh0aGlzLHR6KSxy'@;
put 'bCh0aGlzLG56KSkpO251bGw9PT1ybCh0aGlzLHkxKS5nZXRTaGVldElkKCk/cmwodGhpcyx5MSkuZ2V0UG9zdHBvbmVBY3Rpb24oKCk9PnRoaXMuc3luY01vdmVzKGQpKTp0aGlzLnN5bmNNb3ZlcyhkKX1nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpe2NvbnN0IGw9YHNldCR7YnUocmwo'@;
put 'dGhpcyxZeSkpfU9yZGVyYDtyZXR1cm4gYT0+e2lmKHJsKHRoaXMseTEpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCkpcmV0dXJuO2NvbnN0IGQ9cmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7aWYoInVwZGF0ZSI9PT1hKXtjb25zdCBoPXJsKHRoaXMsVEEpLm1hcChXPT5kLmluZGV4'@;
put 'T2YoVykpLGY9cmwodGhpcyx5MSkuZ2V0RW5naW5lKCkuZ2V0U2hlZXREaW1lbnNpb25zKHJsKHRoaXMseTEpLmdldFNoZWV0SWQoKSk7bGV0IF87Xz0icm93Ij09PXJsKHRoaXMsWXkpP2YuaGVpZ2h0OmYud2lkdGg7Zm9yKGxldCBXPWgubGVuZ3RoO1c8XztXKz0xKWgucHVzaChXKTtybCh0'@;
put 'aGlzLHkxKS5nZXRFbmdpbmUoKVtsXShybCh0aGlzLHkxKS5nZXRTaGVldElkKCksaCl9dDQodGhpcyxUQSxkKX19aW5pdCgpe3Q0KHRoaXMsVEEscmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfX07ZnVuY3Rpb24gSGcoYyxsLGEpeyhmdW5jdGlvbiBvRmUoYyxsKXtpZihsLmhh'@;
put 'cyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHFmKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHNGZShjLGwpe3JldHVybiBsLmdldD9s'@;
put 'LmdldC5jYWxsKGMpOmwudmFsdWV9KGMsWmllKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIE5nKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gYUZlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8g'@;
put 'c2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxaaWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFppZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5j'@;
put 'ZSIpO3JldHVybiBsLmdldChjKX12YXIgSUE9bmV3IFdlYWtNYXAsTEE9bmV3IFdlYWtNYXAscno9bmV3IFdlYWtNYXAsaXo9bmV3IFdlYWtNYXAsb3o9bmV3IFdlYWtNYXAsc3o9bmV3IFdlYWtNYXAsYXo9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTDcoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9u'@;
put 'IHVGZShjKXt2YXIgbD1mdW5jdGlvbiBkRmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg'@;
put 'ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhs'@;
put 'KX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBseihjLGwsYSl7KGZ1bmN0aW9uIGhGZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcjQoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBmRmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNl'@;
put 'e2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLFlpZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gUjcoYyxsKXtyZXR1cm4gZnVuY3Rpb24gcEZlKGMsbCl7cmV0dXJuIGwu'@;
put 'Z2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxZaWUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gWWllKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMp'@;
put 'fWNvbnN0IEN1PSJmb3JtdWxhcyIsZ0ZlPVsibWF4Um93cyIsIm1heENvbHVtbnMiLCJsYW5ndWFnZSJdO3NvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9u'@;
put 'UmVtb3ZlZCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0QWRkZWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbW92ZWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbmFtZWQiKSxzby5nZXRTaW5nbGV0'@;
put 'b24oKS5yZWdpc3RlcigiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIpO2NvbnN0IE83PWM9PiJVbmRvUmVkby51bmRvIj09PWN8fCJVbmRvUmVkby5yZWRvIj09PWN8fCJhdXRvIj09PWM7dmFyIEtmPW5ldyBXZWFrTWFwLGN6PW5ldyBXZWFrTWFwLFd5PW5ldyBXZWFrTWFwO2NsYXNzIHZG'@;
put 'ZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7dmFyIGw7c3VwZXIoLi4uYXJndW1lbnRzKSxsPXRoaXMsbHoodGhpcyxLZix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxseih0aGlzLGN6LHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGx6KHRoaXMsV3kse3dyaXRhYmxlOiEwLHZhbHVlOltbInZh'@;
put 'bHVlc1VwZGF0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVWYWx1ZXNVcGRhdGVkKC4uLmFyZ3VtZW50cyl9XSxbIm5hbWVkRXhwcmVzc2lvbkFkZGVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lTmFtZWRFeHByZXNzaW9uc0FkZGVkKC4uLmFyZ3VtZW50cyl9XSxbIm5h'@;
put 'bWVkRXhwcmVzc2lvblJlbW92ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVOYW1lZEV4cHJlc3Npb25zUmVtb3ZlZCguLi5hcmd1bWVudHMpfV0sWyJzaGVldEFkZGVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRBZGRlZCguLi5hcmd1bWVudHMpfV0sWyJzaGVl'@;
put 'dFJlbmFtZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVTaGVldFJlbmFtZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRSZW1vdmVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRSZW1vdmVkKC4uLmFyZ3VtZW50cyl9XV19KSxMNyh0aGlzLCJzdGF0aWNSZWdpc3Rl'@;
put 'ciIscGQoImZvcm11bGFzIikpLEw3KHRoaXMsImVuZ2luZSIsbnVsbCksTDcodGhpcywic2hlZXROYW1lIixudWxsKSxMNyh0aGlzLCJpbmRleFN5bmNlciIsbnVsbCksTDcodGhpcywicm93QXhpc1N5bmNlciIsbnVsbCksTDcodGhpcywiY29sdW1uQXhpc1N5bmNlciIsbnVsbCl9c3RhdGlj'@;
put 'IGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEN1fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI2MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltDdSwuLi5nRmVdfWdldCBzaGVldElkKCl7cmV0dXJuIG51bGw9PT10aGlzLnNoZWV0TmFtZT9udWxsOnRoaXMu'@;
put 'ZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYT10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe2lmKHRoaXMuZW5naW5lPW51bGwhPT0obD1mdW5jdGlvbiBXUGUo'@;
put 'Yyl7Y29uc3QgbD1jLmdldFNldHRpbmdzKCksYT1sW0N1XSxkPWE/LmVuZ2luZTtpZighMD09PWF8fExhKGQpKXJldHVybiBudWxsO3ZhciBoO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkLmh5cGVyZm9ybXVsYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGQpcmV0dXJuIGZ1bmN0aW9uIEdQZShjLGws'@;
put 'YSl7Y29uc3QgZD1sW0N1XSxoPWZ1bmN0aW9uIFVQZShjKXt2YXIgbDtjb25zdCBhPWNbQ3VdLGQ9T2llKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSxoPVJpZShjKTtyZXR1cm57Li4uSmosLi4uZCwuLi5ofX0o'@;
put 'bCksZj1BQSgpLF89UWooKTsoZnVuY3Rpb24gJFBlKGMsbCl7bCYmbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQscGx1Z2luOmgsdHJhbnNsYXRpb25zOmZ9PWE7dHJ5e2MucmVnaXN0ZXJGdW5jdGlvbihkLGgsZil9Y2F0Y2goXyl7R2EoXy5tZXNzYWdlKX19KX0pKGMsZC5mdW5jdGlvbnMp'@;
put 'LGZ1bmN0aW9uIHFQZShjLGwpe2lmKGwpe2NvbnN0e2xhbmdDb2RlOmF9PWw7dHJ5e2MucmVnaXN0ZXJMYW5ndWFnZShhLGwpfWNhdGNoKGQpe0dhKGQubWVzc2FnZSl9fX0oYyxkLmxhbmd1YWdlKTtjb25zdCBUPWMuYnVpbGRFbXB0eShoKTtyZXR1cm4gZi5zZXQoVCxbYV0pLF8uc2V0KFQs'@;
put 'W2EuZ3VpZF0pLGZ1bmN0aW9uIEtQZShjLGwpe2wmJihjLnN1c3BlbmRFdmFsdWF0aW9uKCksbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQsZXhwcmVzc2lvbjpoLHNjb3BlOmYsb3B0aW9uczpffT1hO3RyeXtjLmFkZE5hbWVkRXhwcmVzc2lvbihkLGgsZixfKX1jYXRjaChUKXtHYShULm1l'@;
put 'c3NhZ2UpfX0pLGMucmVzdW1lRXZhbHVhdGlvbigpKX0oVCxkLm5hbWVkRXhwcmVzc2lvbnMpLFQub24oInNoZWV0QWRkZWQiLCgpPT57VC5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLFQub24oInNoZWV0UmVtb3ZlZCIsKCk9PntULnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksVH0obnVs'@;
put 'bCE9PShoPWQuaHlwZXJmb3JtdWxhKSYmdm9pZCAwIT09aD9oOmQsbCxjKTtpZigib2JqZWN0Ij09dHlwZW9mIGQmJkxhKGQuaHlwZXJmb3JtdWxhKSl7Y29uc3QgZj1BQSgpLF89UWooKS5nZXQoZCk7cmV0dXJuIGYuaGFzKGQpfHxmLnNldChkLFtdKSxmLmdldChkKS5wdXNoKGMpLF8mJl8u'@;
put 'cHVzaChjLmd1aWQpLGQuZ2V0Q29uZmlnKCkubGljZW5zZUtleXx8ZC51cGRhdGVDb25maWcoe2xpY2Vuc2VLZXk6TGllfSksKGQuZ2V0Q29uZmlnKCkubGVhcFllYXIxOTAwIT09SmoubGVhcFllYXIxOTAwfHwhMT09PWxrKGQuZ2V0Q29uZmlnKCkubnVsbERhdGUsSmoubnVsbERhdGUpKSYm'@;
put 'R2EoQWFgSWYgeW91IHVzZSBIeXBlckZvcm11bGEgd2l0aCBIYW5kc29udGFibGUsIGtlZXAgdGhlIGRlZmF1bHQgXGBsZWFwWWVhcjE5MDBcYCBhbmQgXGBudWxsRGF0ZVxgIAogICAgICBzZXR0aW5ncy4gT3RoZXJ3aXNlLCBIeXBlckZvcm11bGEncyBkYXRlcyBtYXkgbm90IHN5bmMgY29y'@;
put 'cmVjdGx5IHdpdGggSGFuZHNvbnRhYmxlJ3MgZGF0ZXMuYCksZH1yZXR1cm4gbnVsbH0odGhpcy5ob3QpKSYmdm9pZCAwIT09bD9sOnRoaXMuZW5naW5lLCF0aGlzLmVuZ2luZSlyZXR1cm4gdm9pZCBHYSgiTWlzc2luZyB0aGUgcmVxdWlyZWQgYGVuZ2luZWAga2V5IGluIHRoZSBGb3JtdWxh'@;
put 'cyBzZXR0aW5ncy4gUGxlYXNlIGZpbGwgaXQgd2l0aCBlaXRoZXIgYW4gZW5naW5lIGNsYXNzIG9yIGFuIGVuZ2luZSBpbnN0YW5jZS4iKTtpZihudWxsIT09dGhpcy5zaGVldE5hbWUmJiF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpe2NvbnN0IGQ9dGhpcy5h'@;
put 'ZGRTaGVldCh0aGlzLnNoZWV0TmFtZSx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKSk7ITEhPT1kJiYodGhpcy5zaGVldE5hbWU9ZCl9dGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0'@;
put 'aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVMb2FkRGF0YSguLi5hcmd1bWVudHMpfSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25Nb2RpZnlEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFk'@;
put 'ZEhvb2soIm1vZGlmeVNvdXJjZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25Nb2RpZnlTb3VyY2VEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbigpe3JldHVybiBhLm9uQmVmb3JlVmFsaWRhdGUoLi4uYXJndW1lbnRzKX0pLHRo'@;
put 'aXMuYWRkSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyU2V0'@;
put 'RGF0YUF0Q2VsbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclNldERhdGFBdENlbGwoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBhLm9uQmVmb3JlQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUNyZWF0ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gYS5vbkFmdGVyQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlv'@;
put 'bigpe3JldHVybiBhLm9uQmVmb3JlUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZVJlbW92ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJSZW1vdmVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuaW5kZXhTeW5jZXI9bmV3IGNsYXNzIGxGZXtj'@;
put 'b25zdHJ1Y3RvcihsLGEsZCl7SGcodGhpcyxJQSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxMQSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxyeix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxpeix7d3JpdGFibGU6ITAsdmFsdWU6'@;
put 'ITF9KSxIZyh0aGlzLG96LHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLEhnKHRoaXMsc3ose3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxIZyh0aGlzLGF6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksTmcodGhpcyxJQSxuZXcgVWllKCJyb3ciLGwsdGhpcykpLE5nKHRoaXMsTEEsbmV3IFVp'@;
put 'ZSgiY29sdW1uIixhLHRoaXMpKSxOZyh0aGlzLHJ6LGQpfWdldEZvckF4aXMobCl7cmV0dXJuIHFmKHRoaXMsInJvdyI9PT1sP0lBOkxBKX1zZXRQZXJmb3JtVW5kbyhsKXtOZyh0aGlzLGl6LGwpfXNldFBlcmZvcm1SZWRvKGwpe05nKHRoaXMsb3osbCl9aXNQZXJmb3JtaW5nVW5kb1JlZG8o'@;
put 'KXtyZXR1cm4gcWYodGhpcyxpeil8fHFmKHRoaXMsb3opfWdldFNoZWV0SWQoKXtyZXR1cm4gcWYodGhpcyxheil9Z2V0RW5naW5lKCl7cmV0dXJuIHFmKHRoaXMsc3opfWdldFBvc3Rwb25lQWN0aW9uKCl7cmV0dXJuIHFmKHRoaXMscnopfXNldHVwU3luY0VuZHBvaW50KGwsYSl7TmcodGhp'@;
put 'cyxzeixsKSxOZyh0aGlzLGF6LGEpLHFmKHRoaXMsSUEpLmluaXQoKSxxZih0aGlzLExBKS5pbml0KCl9fSh0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixkPT57dGhpcy5ob3QuYWRkSG9va09uY2UoImluaXQiLCgpPT57ZCgpfSl9KSx0aGlzLnJv'@;
put 'd0F4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJyb3ciKSx0aGlzLmNvbHVtbkF4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJjb2x1bW4iKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix0aGlzLnJvd0F4aXNTeW5j'@;
put 'ZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChk'@;
put 'LGgsZixfKT0+e3RoaXMucm93QXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oZCxoLF8pfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGQsaCxmLF8pPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsXyl9KSx0aGlz'@;
put 'LmhvdC5hZGRIb29rKCJhZnRlclJvd01vdmUiLChkLGgsZixfLFQpPT57dGhpcy5yb3dBeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhfLFQpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5Nb3ZlIiwoZCxoLGYsXyxUKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxj'@;
put 'dWxhdGVBbmRTeW5jTW92ZXMoXyxUKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LGgpfSks'@;
put 'dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2Vy'@;
put 'LnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVz'@;
put 'KGgsaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2VsbE1ldGFSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyQ2VsbE1ldGFSZXNldCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITAp'@;
put 'LHRoaXMuZW5naW5lLnVuZG8oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVkbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCEwKSx0aGlzLmVuZ2luZS5yZWRvKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZv'@;
put 'cm1VbmRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJEZXRhY2hDaGlsZCguLi5hcmd1bWVudHMp'@;
put 'fSksdGhpcy5hZGRIb29rKCJiZWZvcmVBdXRvZmlsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUF1dG9maWxsKC4uLmFyZ3VtZW50cyl9KSxSNyh0aGlzLFd5KS5mb3JFYWNoKGQ9PntsZXRbaCxmXT1kO3JldHVybiB0aGlzLmVuZ2luZS5vbihoLGYpfSksc3VwZXIuZW5hYmxlUGx1'@;
put 'Z2luKCl9fWRpc2FibGVQbHVnaW4oKXtSNyh0aGlzLFd5KS5mb3JFYWNoKGw9PntsZXRbYSxkXT1sO3JldHVybiB0aGlzLmVuZ2luZS5vZmYoYSxkKX0pLEZpZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2lu'@;
put 'KGwpe2NvbnN0IGE9ZnVuY3Rpb24gWlBlKGMpe3ZhciBsO2NvbnN0IGE9Y1tDdV07cmV0dXJuey4uLk9pZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksLi4uUmllKGMpfX0odGhpcy5ob3QuZ2V0U2V0dGluZ3Mo'@;
put 'KSk7KGZ1bmN0aW9uIFlQZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5zb21lKGE9PnZvaWQgMCE9PWxbYV0mJmxbYV0hPT1jW2FdKX0pKHRoaXMuZW5naW5lLmdldENvbmZpZygpLGEpJiZ0aGlzLmVuZ2luZS51cGRhdGVDb25maWcoYSk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5n'@;
put 'cygpW0N1XTtpZihLaShkKSYmS2koZC5zaGVldE5hbWUpJiZkLnNoZWV0TmFtZSE9PXRoaXMuc2hlZXROYW1lJiZ0aGlzLnN3aXRjaFNoZWV0KGQuc2hlZXROYW1lKSwhbC5kYXRhJiZudWxsPT09dGhpcy5zaGVldE5hbWUpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV0uc2hl'@;
put 'ZXROYW1lO2gmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGgpP3RoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpOnRoaXMuc2hlZXROYW1lPXRoaXMuYWRkU2hlZXQoaD8/dm9pZCAwLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKX1zdXBlci51cGRhdGVQbHVnaW4obCl9'@;
put 'ZGVzdHJveSgpe1I3KHRoaXMsV3kpLmZvckVhY2gobD0+e3ZhciBhO2xldFtkLGhdPWw7cmV0dXJuIG51bGw9PT0oYT10aGlzLmVuZ2luZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub2ZmKGQsaCl9KSxyNCh0aGlzLFd5LG51bGwpLEZpZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdp'@;
put 'bmU9bnVsbCxzdXBlci5kZXN0cm95KCl9YWRkU2hlZXQobCxhKXtpZihLaShhKSYmIXBuZShhKSlyZXR1cm4gR2EoIlRoZSBwcm92aWRlZCBkYXRhIHNob3VsZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuIiksITE7aWYobnVsbCE9bCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0'@;
put 'dXJuIEdhKCJTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFNoZWV0KGw/P3ZvaWQgMCk7cmV0dXJuIGEmJnRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLmVuZ2luZS5nZXRTaGVldElkKGQp'@;
put 'LGEpLGR9Y2F0Y2goZCl7cmV0dXJuIEdhKGQubWVzc2FnZSksITF9fXN3aXRjaFNoZWV0KGwpe2lmKCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gdm9pZCBTTihgVGhlIHNoZWV0IG5hbWVkIFxgJHtsfVxgIGRvZXMgbm90IGV4aXN0LCBzd2l0Y2ggYWJvcnRlZC5gKTt0'@;
put 'aGlzLnNoZWV0TmFtZT1sO2NvbnN0IGE9dGhpcy5lbmdpbmUuZ2V0U2hlZXRTZXJpYWxpemVkKHRoaXMuc2hlZXRJZCk7YS5sZW5ndGg+MCYmdGhpcy5ob3QubG9hZERhdGEoYSxgJHtidShDdSl9LnN3aXRjaFNoZWV0YCl9Z2V0Q2VsbFR5cGUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkO2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7cmV0dXJuIG51bGwhPT1oJiZudWxsIT09Zj90aGlzLmVuZ2luZS5nZXRDZWxsVHlw'@;
put 'ZSh7c2hlZXQ6ZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSk6IkVNUFRZIn1pc0Zvcm11bGFDZWxsVHlwZShsLGEpe3JldHVybiB0aGlzLmVu'@;
put 'Z2luZS5kb2VzQ2VsbEhhdmVGb3JtdWxhKHtzaGVldDphcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1'@;
put 'bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KX1yZW5kZXJEZXBlbmRlbnRTaGVldHMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPW5ldyBTZXQ7bC5mb3JFYWNoKGg9Pnt2YXIg'@;
put 'Zjtjb25zdCBfPW51bGw9PWh8fG51bGw9PT0oZj1oLmFkZHJlc3MpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNoZWV0O3ZvaWQgMCE9PV8mJihkLmhhcyhfKXx8ZC5hZGQoXykpfSksUGllKHRoaXMuZW5naW5lKS5mb3JFYWNoKChoLGYpPT57dmFyIF87KGF8fGYhPT10aGlzLnNoZWV0SWQpJiZk'@;
put 'LmhhcyhmKSYmKGgucmVuZGVyKCksbnVsbD09PShfPWgudmlldyl8fHZvaWQgMD09PV98fF8uYWRqdXN0RWxlbWVudHNTaXplKCkpfSl9dmFsaWRhdGVEZXBlbmRlbnRDZWxscyhsKXtjb25zdCBkPWY9Pnt2YXIgXztjb25zdHtyb3c6VCxjb2w6VyxzaGVldDppZX09bnVsbCE9PShfPWY/LmFk'@;
put 'ZHJlc3MpJiZ2b2lkIDAhPT1fP186e307cmV0dXJuIEtpKGllKT9gJHtpZX06JHtUfXgke1d9YDoiIn0saD1uZXcgU2V0KChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10pLm1hcChmPT5kKGYpKSk7bC5mb3JFYWNoKGY9Pnt2YXIgXyxU'@;
put 'O2NvbnN0e3JvdzpXLGNvbDppZX09bnVsbCE9PShfPWYuYWRkcmVzcykmJnZvaWQgMCE9PV8/Xzp7fTtpZighMT09PUtpKFcpfHwhMT09PUtpKGllKXx8Vz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGllPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgcGU9bnVsbD09Znx8bnVs'@;
put 'bD09PShUPWYuYWRkcmVzcyl8fHZvaWQgMD09PVQ/dm9pZCAwOlQuc2hlZXQsd2U9ZChmKTtpZih2b2lkIDAhPT1wZSYmIWguaGFzKHdlKSl7Y29uc3QgRWU9UGllKHRoaXMuZW5naW5lKS5nZXQocGUpO2lmKCFFZSlyZXR1cm47RWUudmFsaWRhdGVDZWxsKEVlLmdldERhdGFBdENlbGwoVyxp'@;
put 'ZSksRWUuZ2V0Q2VsbE1ldGEoVyxpZSksKCk9Pnt9KX19KX1zeW5jQ2hhbmdlV2l0aEVuZ2luZShsLGEsZCl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21W'@;
put 'aXN1YWxJbmRleChhKSxzaGVldDp0aGlzLnNoZWV0SWR9O2lmKCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhoKSlyZXR1cm4gdm9pZCBHYShgTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShoKX1gKTtjb25zdCBmPXRo'@;
put 'aXMuaG90LmdldENlbGxNZXRhKGwsYSk7cmV0dXJuIGV6KGQsZi50eXBlKSYmKFZpZShkLGYuZGF0ZUZvcm1hdCk/ZD1CaWUoZCxmLmRhdGVGb3JtYXQpOiExPT09ZnVuY3Rpb24gUVBlKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmYy5zdGFydHNXaXRoKCI9Iil9KGQpJiYoZD1gJyR7'@;
put 'ZH1gKSksdGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKGgsZCl9b25CZWZvcmVWYWxpZGF0ZShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5wcm9wVG9Db2woZCk7aWYodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShhLGgpKXtjb25zdCBmPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5k'@;
put 'ZXhGcm9tVmlzdWFsSW5kZXgoYSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLHNoZWV0OnRoaXMuc2hlZXRJZH0sXz10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGgpO2xldCBUPXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShmKTtyZXR1cm4i'@;
put 'ZGF0ZSI9PT1fLnR5cGUmJkd1KFQpJiYoVD1qaWUoVCxfLmRhdGVGb3JtYXQpKSwib2JqZWN0Ij09dHlwZW9mIFQmJm51bGwhPT1UP1QudmFsdWU6VH1yZXR1cm4gbH1vbkJlZm9yZUF1dG9maWxsKGwsYSxkKXtjb25zdHtyb3c6aCxjb2w6Zn09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6'@;
put 'Xyxjb2w6VH09YS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7cm93OlcsY29sOmllfT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpwZSxjb2w6d2V9PWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksRWU9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5k'@;
put 'ZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoXyksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5n'@;
put 'ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFQpLHNoZWV0OnRoaXMuc2hlZXRJZH19LFplPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFcpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChp'@;
put 'ZSksc2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChwZSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHdlKSxzaGVldDp0aGlzLnNoZWV0SWR9fTtpZighMT09'@;
put 'PXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKFplKSlyZXR1cm4hMTtjb25zdCBpdD10aGlzLmVuZ2luZS5nZXRGaWxsUmFuZ2VEYXRhKEVlLFplKSx7cm93OmV0LGNvbDp5dH09RWUuc3RhcnQse3JvdzpFdCxjb2w6U3R9PUVlLmVuZCxKdD1FdC1ldCsxLG5uPVN0'@;
put 'LXl0KzE7Zm9yKGxldCB2bj0wO3ZuPGl0Lmxlbmd0aDt2bis9MSlmb3IobGV0IE5uPTA7Tm48aXRbdm5dLmxlbmd0aDtObis9MSl7Y29uc3QgY3I9aXRbdm5dW05uXSxJcj12biVKdCxFaT1ObiVubixJaT10aGlzLmhvdC5nZXRDZWxsTWV0YShJcixFaSk7ZXooY3IsSWkudHlwZSkmJihjci5z'@;
put 'dGFydHNXaXRoKCInIik/aXRbdm5dW05uXT1jci5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoSXIsRWksdGhpcy5zaGVldElkKSYmKGl0W3ZuXVtObl09ZUZlKGNyLElpLmRhdGVGb3JtYXQpKSl9cmV0dXJuIGl0fW9uQmVmb3JlTG9hZERhdGEobCxhKXsoYXJndW1lbnRz'@;
put 'Lmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhidShDdSkpfHxyNCh0aGlzLGN6LExhKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfW9uQWZ0ZXJDZWxsTWV0YVJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRh'@;
put 'QXJyYXkoKTtsZXQgYT0hMTtsLmZvckVhY2goKGQsaCk9PntkLmZvckVhY2goKGYsXyk9Pntjb25zdCBUPXRoaXMuaG90LmdldENlbGxNZXRhKGgsXyksVz1ULmRhdGVGb3JtYXQ7ZXooZixULnR5cGUpJiYoYT0hMCxWaWUoZixXKT9sW2hdW19dPUJpZShmLFcpOiExPT09dGhpcy5pc0Zvcm11'@;
put 'bGFDZWxsVHlwZShoLF8pJiYobFtoXVtfXT1gJyR7Zn1gKSl9KX0pLCEwPT09YSYmKHI0KHRoaXMsS2YsITApLHRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsbCkscjQodGhpcyxLZiwhMSkpfW9uQWZ0ZXJMb2FkRGF0YShsLGEpe2lmKCEoYXJndW1lbnRzLmxlbmd0'@;
put 'aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhidShDdSkpKWlmKHRoaXMuc2hlZXROYW1lPWZ1bmN0aW9uIFhQZShjLGwpe3JldHVybihMYShsKXx8IWMuZG9lc1NoZWV0RXhpc3QobCkpJiYobD1jLmFkZFNoZWV0KGwpKSxsfSh0aGlzLmVuZ2lu'@;
put 'ZSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0N1XS5zaGVldE5hbWUpLFI3KHRoaXMsY3opKXRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKTtpZih0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlcGxhY2VT'@;
put 'aGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpKXtyNCh0aGlzLEtmLCEwKTtjb25zdCBmPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsaCk7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVu'@;
put 'ZGVyRGVwZW5kZW50U2hlZXRzKGYpLHI0KHRoaXMsS2YsITEpfX19b25Nb2RpZnlEYXRhKGwsYSxkLGgpe2lmKCJnZXQiIT09aHx8UjcodGhpcyxLZil8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29u'@;
put 'c3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsKTtpZihudWxsPT09Znx8bnVsbD09PWEpcmV0dXJuO2lmKCF0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGYsYSkmJiJBUlJBWSIhPT10aGlzLmdldENlbGxUeXBlKGYsYSkpcmV0dXJuIHZvaWQoTmllKGQudmFsdWUpJiYoZC52YWx1ZT1mdW5jdGlv'@;
put 'biBKUGUoYyl7cmV0dXJuIE5pZShjKT9jLnN1YnN0cigxKTpjfShkLnZhbHVlKSkpO2NvbnN0IFQ9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSks'@;
put 'c2hlZXQ6dGhpcy5zaGVldElkfTtsZXQgVz10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoVCk7Y29uc3QgaWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKTsiZGF0ZSI9PT1pZS50eXBlJiZHdShXKSYmKFc9amllKFcsaWUuZGF0ZUZvcm1hdCkpLGQudmFsdWU9Im9iamVjdCI9PXR5cGVvZiBX'@;
put 'JiZudWxsIT09Vz9XLnZhbHVlOld9b25Nb2RpZnlTb3VyY2VEYXRhKGwsYSxkLGgpe2lmKCJnZXQiIT09aHx8UjcodGhpcyxLZil8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29uc3QgZj10aGlzLmhv'@;
put 'dC50b1Zpc3VhbFJvdyhsKSxfPXRoaXMuaG90LnByb3BUb0NvbChhKTtpZihudWxsPT09Znx8bnVsbD09PV98fCF0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGYsXykmJiJBUlJBWSIhPT10aGlzLmdldENlbGxUeXBlKGYsXykpcmV0dXJuO2NvbnN0IFc9dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1l'@;
put 'bnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwPT09Vy53aWR0aCYmMD09PVcuaGVpZ2h0KXJldHVybjtjb25zdCBpZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNT'@;
put 'eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChfKSxzaGVldDp0aGlzLnNoZWV0SWR9O2QudmFsdWU9dGhpcy5lbmdpbmUuZ2V0Q2VsbFNlcmlhbGl6ZWQoaWUpfW9uQWZ0ZXJTZXREYXRhQXRDZWxsKGwsYSl7aWYoTzcoYSkpcmV0dXJuO2NvbnN0IGQ9W10saD1bXSxmPXRoaXMuZW5n'@;
put 'aW5lLmJhdGNoKCgpPT57bC5mb3JFYWNoKF89PntsZXRbVCxXLCxpZV09Xztjb25zdCBwZT10aGlzLmhvdC5wcm9wVG9Db2woVyksd2U9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhUKSxFZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHBlKSxaZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5n'@;
put 'ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFQpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChwZSksc2hlZXQ6dGhpcy5zaGVldElkfTtudWxsIT09d2UmJm51bGwhPT1FZT90aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKFQscGUsaWUpOmQucHVz'@;
put 'aChbVCxwZSxpZV0pLGgucHVzaCh7YWRkcmVzczpaZX0pfSl9KTtkLmxlbmd0aCYmdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IF89dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntkLmZvckVhY2goVD0+e2xldFtXLGllLHBlXT1UO3RoaXMuc3luY0NoYW5nZVdp'@;
put 'dGhFbmdpbmUoVyxpZSxwZSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKF8sITApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGYsaCl9b25BZnRlclNldFNvdXJjZURhdGFBdENlbGwobCxhKXtpZihPNyhhKSlyZXR1'@;
put 'cm47Y29uc3QgZD1bXSxoPVtdO2wuZm9yRWFjaChmPT57bGV0W18sVCwsV109Zjtjb25zdCBpZT10aGlzLmhvdC5wcm9wVG9Db2woVCk7aWYoIUd1KGllKSlyZXR1cm47Y29uc3QgcGU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChfKSxjb2w6dGhp'@;
put 'cy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaWUpLHNoZWV0OnRoaXMuc2hlZXRJZH07dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMocGUpPyhoLnB1c2goe2FkZHJlc3M6cGV9KSxkLnB1c2goLi4udGhpcy5lbmdpbmUuc2V0Q2Vs'@;
put 'bENvbnRlbnRzKHBlLFcpKSk6R2EoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KHBlKX1gKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhkLGgpfW9uQmVmb3JlQ3JlYXRl'@;
put 'Um93KGwsYSl7bGV0IGQ9dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCk7aWYobD49dGhpcy5ob3QuY291bnRSb3dzKCkmJihkPWwpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0'@;
put 'aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5zaGVldElkLFtkLGFdKSlyZXR1cm4hMX1vbkJlZm9yZUNyZWF0ZUNvbChsLGEpe2xldCBkPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpO2lmKGw+PXRoaXMuaG90LmNvdW50Q29s'@;
put 'cygpJiYoZD1sKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbZCxhXSkpcmV0dXJuITF9b25CZWZvcmVSZW1vdmVSb3cobCxh'@;
put 'LGQpe3JldHVybiExIT09dGhpcy5yb3dBeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoZCkuZXZlcnkoXz0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbXywxXSkpJiZ2b2lkIDB9b25CZWZvcmVSZW1vdmVDb2wobCxhLGQpe3JldHVybiEx'@;
put 'IT09dGhpcy5jb2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoZCkuZXZlcnkoXz0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbXywxXSkpJiZ2b2lkIDB9b25BZnRlckNyZWF0ZVJvdyhsLGEsZCl7aWYoTzcoZCkpcmV0dXJu'@;
put 'O2NvbnN0IGg9dGhpcy5lbmdpbmUuYWRkUm93cyh0aGlzLnNoZWV0SWQsW3RoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGFdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKX1vbkFmdGVyQ3JlYXRlQ29sKGwsYSxkKXtpZihPNyhkKSlyZXR1cm47'@;
put 'Y29uc3QgaD10aGlzLmVuZ2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksYV0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGgpfW9uQWZ0ZXJSZW1vdmVSb3cobCxhLGQsaCl7aWYoTzcoaCkp'@;
put 'cmV0dXJuO2NvbnN0IGY9dGhpcy5yb3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCkucmV2ZXJzZSgpLF89dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntmLmZvckVhY2goVD0+e3RoaXMuZW5naW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLFtULDFdKX0pfSk7dGhpcy5y'@;
put 'ZW5kZXJEZXBlbmRlbnRTaGVldHMoXyl9b25BZnRlclJlbW92ZUNvbChsLGEsZCxoKXtpZihPNyhoKSlyZXR1cm47Y29uc3QgZj10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKS5yZXZlcnNlKCksXz10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2YuZm9y'@;
put 'RWFjaChUPT57dGhpcy5lbmdpbmUucmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW1QsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhfKX1vbkFmdGVyRGV0YWNoQ2hpbGQobCxhLGQpe3ZhciBoO3I0KHRoaXMsS2YsITApO2NvbnN0IGY9dGhpcy5ob3QuZ2V0U291cmNlRGF0'@;
put 'YUFycmF5KGQsMCxkKygobnVsbD09PShoPWEuX19jaGlsZHJlbil8fHZvaWQgMD09PWg/dm9pZCAwOmgubGVuZ3RoKXx8MCksdGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCkpO3I0KHRoaXMsS2YsITEpLGYuZm9yRWFjaCgoXyxUKT0+e18uZm9yRWFjaCgoVyxpZSk9Pnt0aGlzLmVuZ2luZS5z'@;
put 'ZXRDZWxsQ29udGVudHMoe2NvbDppZSxyb3c6ZCtULHNoZWV0OnRoaXMuc2hlZXRJZH0sW1tXXV0pfSl9KX1vbkVuZ2luZVZhbHVlc1VwZGF0ZWQobCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGwpfW9uRW5naW5lTmFtZWRFeHByZXNzaW9uc0FkZGVk'@;
put 'KGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGwsYSl9b25FbmdpbmVOYW1lZEV4cHJlc3Npb25zUmVtb3ZlZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGwsYSl9b25FbmdpbmVTaGVldEFkZGVk'@;
put 'KGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0QWRkZWQiLGwpfW9uRW5naW5lU2hlZXRSZW5hbWVkKGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW5hbWVkIixsLGEpfW9uRW5naW5lU2hlZXRSZW1vdmVkKGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hl'@;
put 'ZXRSZW1vdmVkIixsLGEpfX1mdW5jdGlvbiBXaWUoYyxsLGEpeyhmdW5jdGlvbiB5RmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNl'@;
put 'dChjLGEpfWZ1bmN0aW9uIHcxKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHdGZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsR2llKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIEd5KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gQ0ZlKGMsbCxhKXtpZihsLnNldClsLnNldC5j'@;
put 'YWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxHaWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIEdpZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1zby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZUNvbHVtbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJI'@;
put 'aWRlQ29sdW1ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVDb2x1bW5zIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO2NvbnN0IHV6PSJoaWRkZW5Db2x1bW5zIjt2YXIgQ2g9bmV3IFdlYWtNYXAsU2g9bmV3IFdl'@;
put 'YWtNYXA7Y2xhc3MgTUZlIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLFdpZSh0aGlzLENoLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLFdpZSh0aGlzLFNoLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu'@;
put 'IHV6fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMxMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdXpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbdXpdO3VzKGEpJiYoR3kodGhpcyxDaCxhKSxMYShhLmNvcHlQYXN0ZUVuYWJsZWQpJiYoYS5jb3B5UGFzdGVFbmFibGVkPSEwKSksR3kodGhpcyxTaCxuZXcgeGspLHcxKHRoaXMsU2gpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSx3MSh0aGlzLFNoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoLi4uYXJndW1l'@;
put 'bnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsKGQsaCxmKT0+dGhpcy5vbkFmdGVyR2V0Q2VsbE1ldGEoZCxoLGYpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoZCxoKT0+dGhpcy5vbk1vZGlmeUNvbFdpZHRoKGQsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJH'@;
put 'ZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldENvbEhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixkPT50aGlzLm9uTW9kaWZ5Q29weWFibGVSYW5nZShkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRl'@;
put 'UGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLEd5KHRoaXMsQ2gse30pLHN1cGVy'@;
put 'LmRpc2FibGVQbHVnaW4oKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dzEodGhpcyxTaCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxfPWwubGVu'@;
put 'Z3RoPjA7ZCYmXyYmKERuKGwubWFwKGllPT50aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGllKSksaWU9PntmW2llXT0hMX0pLGg9QWwoZiwoaWUscGUsd2UpPT4ocGUmJmllLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4od2UpKSxpZSksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tz'@;
put 'KCJiZWZvcmVVbmhpZGVDb2x1bW5zIixhLGgsZCYmXykmJihkJiZfJiZ3MSh0aGlzLFNoKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhLGgsZCYmXyxkJiZoLmxlbmd0aDxhLmxl'@;
put 'bmd0aCkpfXNob3dDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dDb2x1bW5zKGEpfWhpZGVDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlz'@;
put 'LmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZUNvbHVtbnMiLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxfPT57dzEodGhp'@;
put 'cyxTaCkuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oXyksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlQ29sdW1ucyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX1oaWRlQ29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5n'@;
put 'dGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5oaWRlQ29sdW1ucyhhKX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIGNzKHcxKHRoaXMsU2gpLmdldEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSl9aXNIaWRk'@;
put 'ZW4obCl7cmV0dXJuIHcxKHRoaXMsU2gpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPjApJiZsLmV2'@;
put 'ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxsc01ldGEoKXtEbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bCYmKGwuc2tpcENvbHVtbk9uUGFzdGU9ITEpfSl9b25Nb2RpZnlDb2xXaWR0aChsLGEpe3JldHVybiB0aGlzLmlzSGlkZGVuKGEpPzA6'@;
put 'dzEodGhpcyxDaCkuaW5kaWNhdG9ycyYmKHRoaXMuaXNIaWRkZW4oYSsxKXx8dGhpcy5pc0hpZGRlbihhLTEpKSYmIm51bWJlciI9PXR5cGVvZiBsJiZ0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCk/bCsxNTp2b2lkIDB9b25BZnRlckdldENlbGxNZXRhKGwsYSxkKXtpZighMT09PXcxKHRoaXMs'@;
put 'Q2gpLmNvcHlQYXN0ZUVuYWJsZWQmJnRoaXMuaXNIaWRkZW4oYSkmJihkLnNraXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGEtMSkpZC5jbGFzc05hbWU9ZC5jbGFzc05hbWV8fCIiLC0xPT09ZC5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKGQuY2xh'@;
put 'c3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihkLmNsYXNzTmFtZSl7Y29uc3QgaD1kLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGgubGVuZ3RoPjApe2NvbnN0IGY9aC5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpO2Y+LTEmJmguc3BsaWNlKGYsMSksZC5jbGFzc05h'@;
put 'bWU9aC5qb2luKCIgIil9fX1vbk1vZGlmeUNvcHlhYmxlUmFuZ2UobCl7aWYodzEodGhpcyxDaCkuY29weVBhc3RlRW5hYmxlZClyZXR1cm4gbDtjb25zdCBhPVtdLGQ9KGgsZixfLFQpPT57YS5wdXNoKHtzdGFydFJvdzpoLGVuZFJvdzpmLHN0YXJ0Q29sOl8sZW5kQ29sOlR9KX07cmV0dXJu'@;
put 'IERuKGwsaD0+e2xldCBmPSEwLF89MDt2byhoLnN0YXJ0Q29sLGguZW5kQ29sLFQ9Pnt0aGlzLmlzSGlkZGVuKFQpPyhmfHxkKGguc3RhcnRSb3csaC5lbmRSb3csXyxULTEpLGY9ITApOihmJiYoXz1UKSxUPT09aC5lbmRDb2wmJmQoaC5zdGFydFJvdyxoLmVuZFJvdyxfLFQpLGY9ITEpfSl9'@;
put 'KSxhfW9uQWZ0ZXJHZXRDb2xIZWFkZXIobCxhKXtpZighdzEodGhpcyxDaCkuaW5kaWNhdG9yc3x8bDwwKXJldHVybjtjb25zdCBkPVtdO2w+PTEmJnRoaXMuaXNIaWRkZW4obC0xKSYmZC5wdXNoKCJhZnRlckhpZGRlbkNvbHVtbiIpLGw8dGhpcy5ob3QuY291bnRDb2xzKCktMSYmdGhpcy5p'@;
put 'c0hpZGRlbihsKzEpJiZkLnB1c2goImJlZm9yZUhpZGRlbkNvbHVtbiIpLHBpKGEsZCl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOmdzfSxmdW5jdGlvbiBfRmUoYyl7cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfaGlkZSIsbmFtZSgp'@;
put 'e2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0WyxkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpQixhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5jb2wsYS5jb2wpLDApLGg9TWF0aC5tYXgobC5jb2wsYS5jb2wpLGY9W107Zm9yKGxldCBXPWQ7Vzw9aDtXKz0xKWYucHVzaChXKTtjLmhpZGVDb2x1bW5zKGYpO2NvbnN0IFQ9dGhpcy5jb2x1bW5JbmRleE1hcHBl'@;
put 'ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKFQpJiZUPj0wP3RoaXMuc2VsZWN0Q29sdW1ucyhUKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGRp'@;
put 'c2FibGVkOiExLGhpZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBiRmUoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fY29s'@;
put 'dW1uc19zaG93IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShvQixsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMuY29sdW1uSW5k'@;
put 'ZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudENvbHMoKS0xLGMuc2hv'@;
put 'd0NvbHVtbnMobCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSxmLWgrMT09PXRoaXMuY291bnRDb2xzKCl8fHRoaXMuc2VsZWN0Q29sdW1ucyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPWNzKGMuZ2V0SGlkZGVuQ29sdW1ucygpLHdl'@;
put 'PT50aGlzLnRvUGh5c2ljYWxDb2x1bW4od2UpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLF89dGhpcy5jb2x1bW5JbmRleE1hcHBlcixUPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxXPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChmKSxpZT1fLmdldE5vdFRyaW1tZWRJbmRleGVzKCkscGU9W107aWYoaCE9PWYpe2lmKGYtaCsxPlctVCsxKXtjb25zdCBaZT1pZS5zbGljZShoLGYrMSk7cGUucHVzaCguLi5aZS5maWx0ZXIoaXQ9PmEuaW5jbHVkZXMoaXQpKSl9fWVsc2UgaWYoMD09PVQmJlQ8aClwZS5wdXNoKC4uLmll'@;
put 'LnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PVQpcGUucHVzaCguLi5pZS5zbGljZSgwLHRoaXMuY291bnRDb2xzKCkpKTtlbHNle2NvbnN0IHdlPXRoaXMuY291bnRDb2xzKCktMTtXPT09Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4'@;
put 'KHdlLC0xKSkmJndlPmYmJnBlLnB1c2goLi4uaWUuc2xpY2UoZisxKSl9cmV0dXJuIERuKHBlLHdlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxDb2x1bW4od2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9b25NYXBJbml0KCl7QXJyYXkuaXNBcnJheSh3MSh0aGlzLENoKS5jb2x1bW5zKSYm'@;
put 'dGhpcy5oaWRlQ29sdW1ucyh3MSh0aGlzLENoKS5jb2x1bW5zKX1kZXN0cm95KCl7R3kodGhpcyxDaCxudWxsKSxHeSh0aGlzLFNoLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gJGllKGMsbCxhKXsoZnVuY3Rpb24ga0ZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBfZChjLGwpe3JldHVybiBmdW5jdGlvbiBBRmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVl'@;
put 'fShjLHFpZShjLGwsImdldCIpKX1mdW5jdGlvbiAkeShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIFRGZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0'@;
put 'ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMscWllKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBxaWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVSb3dzIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZVJvd3MiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlUm93cyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJh'@;
put 'ZnRlclVuaGlkZVJvd3MiKTtjb25zdCBkej0iaGlkZGVuUm93cyI7dmFyIFhmPW5ldyBXZWFrTWFwLE1oPW5ldyBXZWFrTWFwO2NsYXNzIElGZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSwkaWUodGhpcyxYZix7d3JpdGFibGU6ITAsdmFsdWU6e319KSwk'@;
put 'aWUodGhpcyxNaCx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBken1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2R6XX1lbmFibGVQ'@;
put 'bHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2R6XTt1cyhhKSYmKCR5KHRoaXMsWGYsYSksTGEoYS5jb3B5UGFzdGVFbmFibGVkKSYmKGEuY29weVBhc3RlRW5hYmxlZD0hMCkpLCR5KHRoaXMsTWgsbmV3IHhr'@;
put 'KSxfZCh0aGlzLE1oKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsX2QodGhpcyxNaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25z'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChkLGgsZik9PnRoaXMub25BZnRlckdldENlbGxNZXRhKGQsaCxmKSksdGhpcy5hZGRIb29rKCJtb2RpZnlS'@;
put 'b3dIZWlnaHQiLChkLGgpPT50aGlzLm9uTW9kaWZ5Um93SGVpZ2h0KGQsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJh'@;
put 'bmdlIixkPT50aGlzLm9uTW9kaWZ5Q29weWFibGVSYW5nZShkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93'@;
put 'SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLCR5KHRoaXMsWGYse30pLHN1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd1Jvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhs'@;
put 'KTtsZXQgaD1hO2NvbnN0IGY9X2QodGhpcyxNaCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxfPWwubGVuZ3RoPjA7ZCYmXyYmKERuKGwubWFwKGllPT50aGlzLmhvdC50b1BoeXNpY2FsUm93KGllKSksaWU9PntmW2llXT0hMX0pLGg9QWwoZiwoaWUscGUsd2UpPT4ocGUmJmllLnB1c2godGhpcy5o'@;
put 'b3QudG9WaXN1YWxSb3cod2UpKSxpZSksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVSb3dzIixhLGgsZCYmXykmJihkJiZfJiZfZCh0aGlzLE1oKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlUm93cyIsYSxoLGQmJl8sZCYmaC5s'@;
put 'ZW5ndGg8YS5sZW5ndGgpKX1zaG93Um93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Um93cyhhKX1oaWRlUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5p'@;
put 'c1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVSb3dzIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsXz0+e19kKHRoaXMsTWgp'@;
put 'LnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KF8pLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZVJvd3MiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5'@;
put 'KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZVJvd3MoYSl9Z2V0SGlkZGVuUm93cygpe3JldHVybiBjcyhfZCh0aGlzLE1oKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxSb3cobCkpfWlzSGlkZGVuKGwpe3JldHVybiBfZCh0aGlzLE1o'@;
put 'KS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFJvd3MoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQp'@;
put 'JiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7RG4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wmJihsLnNraXBSb3dPblBhc3RlPSExKX0pfW9uTW9kaWZ5Um93SGVpZ2h0KGwsYSl7cmV0dXJuIHRoaXMuaXNIaWRkZW4oYSk/MDpsfW9uQWZ0ZXJHZXRDZWxsTWV0YShsLGEsZCl7'@;
put 'aWYoITE9PT1fZCh0aGlzLFhmKS5jb3B5UGFzdGVFbmFibGVkJiZ0aGlzLmlzSGlkZGVuKGwpJiYoZC5za2lwUm93T25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihsLTEpKWQuY2xhc3NOYW1lPWQuY2xhc3NOYW1lfHwiIiwtMT09PWQuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuUm93'@;
put 'IikmJihkLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlblJvdyIpO2Vsc2UgaWYoZC5jbGFzc05hbWUpe2NvbnN0IGg9ZC5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihoLmxlbmd0aD4wKXtjb25zdCBmPWguaW5kZXhPZigiYWZ0ZXJIaWRkZW5Sb3ciKTtmPi0xJiZoLnNwbGljZShmLDEpLGQuY2xh'@;
put 'c3NOYW1lPWguam9pbigiICIpfX19b25Nb2RpZnlDb3B5YWJsZVJhbmdlKGwpe2lmKF9kKHRoaXMsWGYpLmNvcHlQYXN0ZUVuYWJsZWQpcmV0dXJuIGw7Y29uc3QgYT1bXSxkPShoLGYsXyxUKT0+e2EucHVzaCh7c3RhcnRSb3c6aCxlbmRSb3c6ZixzdGFydENvbDpfLGVuZENvbDpUfSl9O3Jl'@;
put 'dHVybiBEbihsLGg9PntsZXQgZj0hMCxfPTA7dm8oaC5zdGFydFJvdyxoLmVuZFJvdyxUPT57dGhpcy5pc0hpZGRlbihUKT8oZnx8ZChfLFQtMSxoLnN0YXJ0Q29sLGguZW5kQ29sKSxmPSEwKTooZiYmKF89VCksVD09PWguZW5kUm93JiZkKF8sVCxoLnN0YXJ0Q29sLGguZW5kQ29sKSxmPSEx'@;
put 'KX0pfSksYX1vbkFmdGVyR2V0Um93SGVhZGVyKGwsYSl7aWYoIV9kKHRoaXMsWGYpLmluZGljYXRvcnN8fGw8MClyZXR1cm47Y29uc3QgZD1bXTtsPj0xJiZ0aGlzLmlzSGlkZGVuKGwtMSkmJmQucHVzaCgiYWZ0ZXJIaWRkZW5Sb3ciKSxsPHRoaXMuaG90LmNvdW50Um93cygpLTEmJnRoaXMu'@;
put 'aXNIaWRkZW4obCsxKSYmZC5wdXNoKCJiZWZvcmVIaWRkZW5Sb3ciKSxwaShhLGQpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe2wuaXRlbXMucHVzaCh7bmFtZTpnc30sZnVuY3Rpb24geEZlKGMpe3JldHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFtkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShzQixhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5yb3csYS5yb3cpLDApLGg9TWF0aC5tYXgobC5yb3csYS5yb3cpLGY9W107Zm9yKGxldCBXPWQ7Vzw9aDtXKz0xKWYucHVzaChXKTtjLmhpZGVSb3dzKGYpO2NvbnN0IFQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0'@;
put 'Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKFQpJiZUPj0wP3RoaXMuc2VsZWN0Um93cyhUKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGRpc2FibGVkOiExLGhpZGRl'@;
put 'bigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBFRmUoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19zaG93IixuYW1lKCl7cmV0'@;
put 'dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShhQixsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhp'@;
put 'ZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudFJvd3MoKS0xLGMuc2hvd1Jvd3MobCksdGhpcy5yZW5kZXIoKSx0aGlz'@;
put 'LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSxmLWgrMT09PXRoaXMuY291bnRSb3dzKCl8fHRoaXMuc2VsZWN0Um93cyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPWNzKGMuZ2V0SGlkZGVuUm93cygpLHdlPT50aGlzLnRvUGh5c2ljYWxSb3cod2UpKTtpZighdGhpcy5z'@;
put 'ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJv'@;
put 'dyxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93LF89dGhpcy5yb3dJbmRleE1hcHBlcixUPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxXPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKSxpZT1fLmdldE5vdFRyaW1tZWRJbmRleGVzKCkscGU9W107aWYoaCE9'@;
put 'PWYpe2lmKGYtaCsxPlctVCsxKXtjb25zdCBaZT1pZS5zbGljZShoLGYrMSk7cGUucHVzaCguLi5aZS5maWx0ZXIoaXQ9PmEuaW5jbHVkZXMoaXQpKSl9fWVsc2UgaWYoMD09PVQmJlQ8aClwZS5wdXNoKC4uLmllLnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PVQpcGUucHVzaCguLi5pZS5z'@;
put 'bGljZSgwLHRoaXMuY291bnRSb3dzKCkpKTtlbHNle2NvbnN0IHdlPXRoaXMuY291bnRSb3dzKCktMTtXPT09Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHdlLC0xKSkmJndlPmYmJnBlLnB1c2goLi4uaWUuc2xpY2UoZisxKSl9cmV0'@;
put 'dXJuIERuKHBlLHdlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxSb3cod2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9b25NYXBJbml0KCl7QXJyYXkuaXNBcnJheShfZCh0aGlzLFhmKS5yb3dzKSYmdGhpcy5oaWRlUm93cyhfZCh0aGlzLFhmKS5yb3dzKX1kZXN0cm95KCl7JHkodGhpcyxY'@;
put 'ZixudWxsKSwkeSh0aGlzLE1oLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy'@;
put 'KCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3QgS2llPSJtYW51YWxDb2x1bW5GcmVlemUiLHF5PW5ldyBXZWFrTWFwO2NsYXNzIFBGZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgp'@;
put 'e3JldHVybiBLaWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHF5LnNldCh0aGlzLHthZnRlckZpcnN0VXNlOiExfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0tpZV19ZW5hYmxlUGx1'@;
put 'Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGw9PnRoaXMuYWRkQ29udGV4dE1lbnVFbnRyeShsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwobCxhKT0+dGhpcy5vbkJlZm9yZUNvbHVtbk1vdmUobCxh'@;
put 'KSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtxeS5nZXQodGhpcykuYWZ0ZXJGaXJzdFVzZT0hMSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVn'@;
put 'aW4oKX1mcmVlemVDb2x1bW4obCl7Y29uc3QgYT1xeS5nZXQodGhpcyksZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGg9ZC5maXhlZENvbHVtbnNTdGFydDx0aGlzLmhvdC5jb3VudENvbHMoKSYmbD5kLmZpeGVkQ29sdW1uc1N0YXJ0LTE7YS5hZnRlckZpcnN0VXNlfHwoYS5hZnRlckZpcnN0'@;
put 'VXNlPSEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUiLGwsaCkmJihoJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxkLmZpeGVkQ29sdW1uc1N0YXJ0KSxkLl9maXhlZENvbHVtbnNTdGFydCs9MSksdGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImFmdGVyQ29sdW1uRnJlZXplIixsLGgpKX11bmZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXF5LmdldCh0aGlzKSxkPXRoaXMuaG90LmdldFNldHRpbmdzKCksaD1kLmZpeGVkQ29sdW1uc1N0YXJ0PjAmJmw8PWQuZml4ZWRDb2x1bW5zU3RhcnQtMTthLmFmdGVyRmlyc3RVc2V8fChhLmFm'@;
put 'dGVyRmlyc3RVc2U9ITApLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblVuZnJlZXplIixsLGgpJiYoaCYmKGQuX2ZpeGVkQ29sdW1uc1N0YXJ0LT0xLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsZC5maXhlZENvbHVtbnNTdGFydCkpLHRoaXMu'@;
put 'aG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblVuZnJlZXplIixsLGgpKX1hZGRDb250ZXh0TWVudUVudHJ5KGwpe2wuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gTEZlKGMpe3JldHVybntrZXk6ImZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFu'@;
put 'c2xhdGVkUGhyYXNlKE9WKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTts'@;
put 'ZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPD10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSkmJihhPSEwKSxhfX19KHRoaXMpLGZ1bmN0aW9uIFJGZShjKXtyZXR1cm57'@;
put 'a2V5OiJ1bmZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFBWKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy51bmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1Np'@;
put 'emUoITApfSxoaWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w+PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNT'@;
put 'dGFydCkmJihhPSEwKSxhfX19KHRoaXMpKX1vbkJlZm9yZUNvbHVtbk1vdmUobCxhKXtpZihxeS5nZXQodGhpcykuYWZ0ZXJGaXJzdFVzZSl7Y29uc3QgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2lmKGE8aHx8bC5zb21lKGY9PmY8aCkpcmV0dXJuITF9fX1j'@;
put 'b25zdCBQNz0icHgiLFFpZT1jbGFzcyBGRmV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9bCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wLHRoaXMuaW5saW5lUHJvcGVydHk9bC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxl'@;
put 'bWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRF'@;
put 'bGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXtHdShsKSYmKHRoaXMuX2Vs'@;
put 'ZW1lbnQuc3R5bGUudG9wPWwrUDcpLEd1KGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZVt0aGlzLmlubGluZVByb3BlcnR5XT1hK1A3KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHlsZTtyZXR1cm57dG9wOmwudG9wP3BhcnNlSW50KGwudG9wLDEwKTowLHN0YXJ0Omxb'@;
put 'dGhpcy5pbmxpbmVQcm9wZXJ0eV0/cGFyc2VJbnQobFt0aGlzLmlubGluZVByb3BlcnR5XSwxMCk6MH19c2V0U2l6ZShsLGEpe0d1KGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK1A3KSxHdShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErUDcpfWdldFNpemUoKXty'@;
put 'ZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0'@;
put 'KGwsYSl7R3UobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1sK1A3KSxHdShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbYG1hcmdpbiR7YnUodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YF09YStQNyl9Z2V0T2Zmc2V0KCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlLGE9YG1h'@;
put 'cmdpbiR7YnUodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YDtyZXR1cm57dG9wOmwubWFyZ2luVG9wP3BhcnNlSW50KGwubWFyZ2luVG9wLDEwKTowLHN0YXJ0OmxbYV0/cGFyc2VJbnQobFthXSwxMCk6MH19fSxWRmU9Y2xhc3MgTkZlIGV4dGVuZHMgUWlle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxw'@;
put 'aSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0Iil9fSx6RmU9Y2xhc3MgakZlIGV4dGVuZHMgUWlle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lIil9fTtzby5nZXRTaW5n'@;
put 'bGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uTW92ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbk1vdmUiKTtjb25zdCBmej0ibWFudWFsQ29sdW1uTW92ZSIsaTQ9bmV3IFdlYWtNYXAsZW9lPSJodF9fbWFudWFsQ29sdW1uTW92ZSIsUkE9InNob3ctdWki'@;
put 'LHB6PSJvbi1tb3ZpbmctLWNvbHVtbnMiLGd6PSJhZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMiO2NsYXNzIFpGZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBmen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMjB9Y29uc3RydWN0b3IobCl7'@;
put 'c3VwZXIobCksaTQuc2V0KHRoaXMse2NvbHVtbnNUb01vdmU6W10sY291bnRDb2xzOjAsZml4ZWRDb2x1bW5zOjAscHJlc3NlZDp2b2lkIDAsdGFyZ2V0OntldmVudFBhZ2VYOnZvaWQgMCxjb29yZHM6dm9pZCAwLFREOnZvaWQgMCxjb2w6dm9pZCAwfSxjYWNoZWREcm9wSW5kZXg6dm9pZCAw'@;
put 'fSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYmFja2xpZ2h0PW5ldyBWRmUobCksdGhpcy5ndWlkZWxpbmU9bmV3IHpGZShsKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbZnpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5l'@;
put 'bmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9u'@;
put 'QmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMub25BZnRlclNjcm9sbFZlcnRpY2FsbHkoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0'@;
put 'ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LGVvZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5h'@;
put 'YmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtXbyh0aGlzLmhvdC5yb290RWxlbWVudCxlb2UpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLHRoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRl'@;
put 'bGluZS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5tb3ZlQ29sdW1ucyhbbF0sYSl9bW92ZUNvbHVtbnMobCxhKXtjb25zdCBkPWk0LmdldCh0aGlzKSxoPWQuY2FjaGVkRHJvcEluZGV4LGY9dGhpcy5pc01vdmVQb3NzaWJsZShs'@;
put 'LGEpLF89dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtbk1vdmUiLGwsYSxoLGYpO2lmKGQuY2FjaGVkRHJvcEluZGV4PXZvaWQgMCwhMT09PV8pcmV0dXJuO2YmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3QgVD1mJiZ0aGlzLmlzQ29sdW1u'@;
put 'T3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbk1vdmUiLGwsYSxoLGYsVCksVH1kcmFnQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMuZHJhZ0NvbHVtbnMoW2xdLGEpfWRyYWdDb2x1bW5zKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRl'@;
put 'eChsLGEpO3JldHVybiBpNC5nZXQodGhpcykuY2FjaGVkRHJvcEluZGV4PWEsdGhpcy5tb3ZlQ29sdW1ucyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5k'@;
put 'LGY9YTwwLF89bC5zb21lKFc9Plc8MCksVD1sLnNvbWUoVz0+Vz49ZCk7cmV0dXJuIShofHxmfHxffHxUKX1pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9QWwobCwoaCxmKT0+KGY8YSYm'@;
put 'KGgrPTEpLGgpLDApO3JldHVybiBhLWR9Z2V0Q29sdW1uc1dpZHRoKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7Zis9MSl7Y29uc3QgXz1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7ZjwwP2grPXRoaXMu'@;
put 'aG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKXx8MDpudWxsIT09XyYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoXyl8fDApfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhv'@;
put 'dC5nZXRTZXR0aW5ncygpW2Z6XTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZUNvbHVtbnMobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoYSwwKX19aXNGaXhlZENvbHVtbnNT'@;
put 'dGFydChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy'@;
put 'LmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxDb2x1bW5Nb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmlu'@;
put 'ZyhsLGEpe2NvbnN0IGQ9W107cmV0dXJuIHZvKGwsYSxoPT57ZC5wdXNoKGgpfSksZH1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD1pNC5nZXQodGhpcyksYT10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KGwuaG92'@;
put 'ZXJlZENvbHVtbikmJmE+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh2b2lkIDAsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEtMSwtMSkpO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxoPXRoaXMuaG90LnZpZXcuX3d0'@;
put 'Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQsZj0ibnVtYmVyIj09dHlwZW9mIGguc2Nyb2xsWD9oLnNjcm9sbFg6aC5zY3JvbGxMZWZ0O2xldCBfPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0TGVmdCt0aGlzLmdldENvbHVtbnNXaWR0aCgwLGwuaG92ZXJlZENvbHVtbi0xKTtjb25z'@;
put 'dCBUPWQuaGlkZXIub2Zmc2V0V2lkdGgsVz1kLlRCT0RZLm9mZnNldExlZnQsaWU9dGhpcy5iYWNrbGlnaHQuZ2V0T2Zmc2V0KCkuc3RhcnQscGU9dGhpcy5iYWNrbGlnaHQuZ2V0U2l6ZSgpLndpZHRoO2xldCB3ZT0wLEVlPTA7aWYodGhpcy5ob3QuaXNSdGwoKSl7Y29uc3QgZXQ9dGhpcy5o'@;
put 'b3Qucm9vdFdpbmRvdyx5dD13YSh0aGlzLmhvdC5yb290RWxlbWVudCk7RWU9ZXQuaW5uZXJXaWR0aC1sLnRhcmdldC5ldmVudFBhZ2VYLShldC5pbm5lcldpZHRoLWwucm9vdEVsZW1lbnRPZmZzZXQteXQpLSh2b2lkIDA9PT1oLnNjcm9sbFg/ZjowKX1lbHNlIEVlPWwudGFyZ2V0LmV2ZW50'@;
put 'UGFnZVgtKGwucm9vdEVsZW1lbnRPZmZzZXQtKHZvaWQgMD09PWguc2Nyb2xsWD9mOjApKTtsLmhhc1Jvd0hlYWRlcnMmJih3ZT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zmc2V0V2lk'@;
put 'dGgpLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydChsLmhvdmVyZWRDb2x1bW4pJiYoXys9ZiksXys9d2UsbC5ob3ZlcmVkQ29sdW1uPDA/bC50YXJnZXQuY29sPWwuZml4ZWRDb2x1bW5zU3RhcnQ+MD8wOmE+MD9hLTE6YTpsLnRhcmdldC5URC5vZmZzZXRXaWR0aC8yK188PUVlPyhsLnRhcmdl'@;
put 'dC5jb2w9KGwuaG92ZXJlZENvbHVtbj49bC5jb3VudENvbHM/bC5jb3VudENvbHMtMTpsLmhvdmVyZWRDb2x1bW4pKzEsXys9bC50YXJnZXQuVEQub2Zmc2V0V2lkdGgpOmwudGFyZ2V0LmNvbD1sLmhvdmVyZWRDb2x1bW47bGV0IFplPUVlLGl0PV87RWUrcGUraWU+PVQ/WmU9VC1wZS1pZTpF'@;
put 'ZStpZTxXK3dlJiYoWmU9Vyt3ZStNYXRoLmFicyhpZSkpLF8+PVQtMT9pdD1ULTE6MD09PWl0P2l0PTE6dm9pZCAwIT09aC5zY3JvbGxYJiZsLmhvdmVyZWRDb2x1bW48bC5maXhlZENvbHVtbnNTdGFydCYmKGl0LT1sLnJvb3RFbGVtZW50T2Zmc2V0PD1oLnNjcm9sbFg/bC5yb290RWxlbWVu'@;
put 'dE9mZnNldDowKSx0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLFplKSx0aGlzLmd1aWRlbGluZS5zZXRQb3NpdGlvbihudWxsLGl0KX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIu'@;
put 'YWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PnRoaXMub25Nb3VzZU1vdmUoYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVh'@;
put 'cigpfW9uQmVmb3JlT25DZWxsTW91c2VEb3duKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxfPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxUPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksVz1pNC5nZXQodGhp'@;
put 'cyksaWU9Qm8obC50YXJnZXQsInNvcnRBY3Rpb24iKTtpZighVHx8IV98fFcucHJlc3NlZHx8MCE9PWwuYnV0dG9ufHxpZSlyZXR1cm4gVy5wcmVzc2VkPSExLFcuY29sdW1uc1RvTW92ZS5sZW5ndGg9MCx2b2lkIFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtweixSQV0pO2NvbnN0IHBlPXRo'@;
put 'aXMuZ3VpZGVsaW5lLmlzQnVpbHQoKSYmIXRoaXMuZ3VpZGVsaW5lLmlzQXBwZW5kZWQoKSx3ZT10aGlzLmJhY2tsaWdodC5pc0J1aWx0KCkmJiF0aGlzLmJhY2tsaWdodC5pc0FwcGVuZGVkKCk7cGUmJndlJiYodGhpcy5ndWlkZWxpbmUuYXBwZW5kVG8oZi5oaWRlciksdGhpcy5iYWNrbGln'@;
put 'aHQuYXBwZW5kVG8oZi5oaWRlcikpO2NvbnN0e2Zyb206RWUsdG86WmV9PVQsaXQ9TWF0aC5taW4oRWUuY29sLFplLmNvbCksZXQ9TWF0aC5tYXgoRWUuY29sLFplLmNvbCk7aWYoYS5yb3c8MCYmYS5jb2w+PWl0JiZhLmNvbDw9ZXQpe2guY29sdW1uPSEwLFcucHJlc3NlZD0hMCxXLnRhcmdl'@;
put 'dC5ldmVudFBhZ2VYPWwucGFnZVgsVy50YXJnZXQuZXZlbnRPZmZzZXRYPWwub2Zmc2V0WCxXLmhvdmVyZWRDb2x1bW49YS5jb2wsVy50YXJnZXQuVEQ9ZCxXLnRhcmdldC5jb2w9YS5jb2wsVy5jb2x1bW5zVG9Nb3ZlPXRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyhpdCxldCksVy5oYXNS'@;
put 'b3dIZWFkZXJzPSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzLFcuY291bnRDb2xzPXRoaXMuaG90LmNvdW50Q29scygpLFcuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxXLnJvb3RFbGVtZW50T2Zmc2V0PUtsKHRo'@;
put 'aXMuaG90LnJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IHl0PVcuaGFzUm93SGVhZGVycz8tMTowLEV0PWYuaG9sZGVyLnNjcm9sbFRvcCtmLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxLFN0PWEuY29sPFcuZml4ZWRDb2x1bW5zU3RhcnQsSnQ9TWF0aC5hYnModGhpcy5ob3Qudmlldy5fd3Qu'@;
put 'd3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSksbm49TWF0aC5hYnMobC5vZmZzZXRYLSh0aGlzLmhvdC5pc1J0bCgpP2wudGFyZ2V0Lm9mZnNldFdpZHRoOjApKSx2bj10aGlzLmdldENvbHVtbnNXaWR0aChpdCxhLmNvbC0xKStubixObj10aGlzLmdl'@;
put 'dENvbHVtbnNXaWR0aCh5dCxpdC0xKSsoU3Q/SnQ6MCkrdm47dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24oRXQsTm4pLHRoaXMuYmFja2xpZ2h0LnNldFNpemUodGhpcy5nZXRDb2x1bW5zV2lkdGgoaXQsZXQpLGYuaGlkZXIub2Zmc2V0SGVpZ2h0LUV0KSx0aGlzLmJhY2tsaWdodC5zZXRP'@;
put 'ZmZzZXQobnVsbCwtdm4pLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LHB6KX1lbHNlIFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LGd6KSxXLnByZXNzZWQ9ITEsVy5jb2x1bW5zVG9Nb3ZlLmxlbmd0aD0wfW9uTW91c2VNb3ZlKGwpe2NvbnN0IGE9aTQuZ2V0KHRoaXMpO2lmKGEucHJlc3NlZCl7'@;
put 'aWYobC50YXJnZXQ9PT10aGlzLmJhY2tsaWdodC5lbGVtZW50KXtjb25zdCBkPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS53aWR0aDt0aGlzLmJhY2tsaWdodC5zZXRTaXplKDApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihkKX0pfWEudGFyZ2V0'@;
put 'LmV2ZW50UGFnZVg9bC5wYWdlWCx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX19b25CZWZvcmVPbkNlbGxNb3VzZU92ZXIobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLF89aTQuZ2V0KHRoaXMpOyFmfHwhXy5wcmVzc2VkfHwoXy5jb2x1bW5zVG9Nb3Zl'@;
put 'LmluZGV4T2YoYS5jb2wpPi0xP1dvKHRoaXMuaG90LnJvb3RFbGVtZW50LFJBKTpwaSh0aGlzLmhvdC5yb290RWxlbWVudCxSQSksaC5yb3c9ITAsaC5jb2x1bW49ITAsaC5jZWxsPSEwLF8uaG92ZXJlZENvbHVtbj1hLmNvbCxfLnRhcmdldC5URD1kKX1vbk1vdXNlVXAoKXtjb25zdCBsPWk0'@;
put 'LmdldCh0aGlzKSxhPWwudGFyZ2V0LmNvbCxkPWwuY29sdW1uc1RvTW92ZS5sZW5ndGg7aWYobC5ob3ZlcmVkQ29sdW1uPXZvaWQgMCxsLnByZXNzZWQ9ITEsbC5iYWNrbGlnaHRXaWR0aD0wLFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtweixSQSxnel0pLHRoaXMuaG90LnNlbGVjdGlvbi5p'@;
put 'c1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmcGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsZ3opLGQ8MXx8dm9pZCAwPT09YSlyZXR1cm47Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwuY29sdW1uc1RvTW92ZVswXSksXz10aGlzLmRyYWdDb2x1bW5zKGwuY29sdW1uc1RvTW92'@;
put 'ZSxhKTtpZihsLmNvbHVtbnNUb01vdmUubGVuZ3RoPTAsITA9PT1fKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCk7Y29uc3QgVD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKTt0aGlzLmhv'@;
put 'dC5zZWxlY3RDb2x1bW5zKFQsVCtkLTEpfX1vbkFmdGVyU2Nyb2xsVmVydGljYWxseSgpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxoPWwuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KDApKzErbC5ob2xkZXIuc2Nyb2xsVG9wO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKGgp'@;
put 'LHRoaXMuYmFja2xpZ2h0LnNldFNpemUobnVsbCxsLmhpZGVyLm9mZnNldEhlaWdodC1oKX1idWlsZFBsdWdpblVJKCl7dGhpcy5iYWNrbGlnaHQuYnVpbGQoKSx0aGlzLmd1aWRlbGluZS5idWlsZCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1kZXN0'@;
put 'cm95KCl7dGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMuZ3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IE9BPSJtYW51YWxDb2x1bW5SZXNpemUiLHRvZT0ibWFudWFsQ29sdW1uV2lkdGhzIixtej1uZXcgV2Vha01hcDtjbGFzcyBXRmUgZXh0ZW5kcyBac3tz'@;
put 'dGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gT0F9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTMwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdDt0aGlzLmN1cnJlbnRUSD1udWxsLHRoaXMuY3VycmVudENvbD1u'@;
put 'dWxsLHRoaXMuc2VsZWN0ZWRDb2xzPVtdLHRoaXMuY3VycmVudFdpZHRoPW51bGwsdGhpcy5uZXdTaXplPW51bGwsdGhpcy5zdGFydFk9bnVsbCx0aGlzLnN0YXJ0V2lkdGg9bnVsbCx0aGlzLnN0YXJ0T2Zmc2V0PW51bGwsdGhpcy5oYW5kbGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlz'@;
put 'Lmd1aWRlPWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMucHJlc3NlZD1udWxsLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsLHRoaXMuY29sdW1uV2lkdGhz'@;
put 'TWFwPXZvaWQgMCxtei5zZXQodGhpcyx7Y29uZmlnOnZvaWQgMH0pLHBpKHRoaXMuaGFuZGxlLCJtYW51YWxDb2x1bW5SZXNpemVyIikscGkodGhpcy5ndWlkZSwibWFudWFsQ29sdW1uUmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdo'@;
put 'dCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW09BXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbHVtbldpZHRoc01hcD1uZXcgV3AsdGhpcy5jb2x1bW5XaWR0aHNNYXAuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5v'@;
put 'bk1hcEluaXQoKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLHRoaXMuY29sdW1uV2lkdGhzTWFwKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwobCxhKT0+dGhpcy5vbk1vZGlmeUNvbFdpZHRoKGwsYSkpLHRoaXMuYWRkSG9v'@;
put 'aygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwobCxhKT0+dGhpcy5vbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aChsLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGwsYSxkKT0+dGhpcy5vbkJlZm9yZUNvbHVtblJlc2l6ZShsLGEsZCkpLHRoaXMuYmlu'@;
put 'ZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXttei5nZXQodGhpcykuY29uZmlnPXRoaXMuY29sdW1uV2lkdGhzTWFw'@;
put 'LmdldFZhbHVlcygpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbENvbHVtbldpZHRocygpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIix0b2UsdGhp'@;
put 'cy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsdG9lLGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9TWF0aC5tYXgo'@;
put 'YSwyMCksaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3JldHVybiB0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxkKSxkfWNsZWFyTWFudWFsU2l6ZShsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb2x1bW5XaWR0aHNNYXAu'@;
put 'c2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9b25NYXBJbml0KCl7Y29uc3QgbD1tei5nZXQodGhpcyksYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW09BXSxkPXRoaXMubG9hZE1hbnVhbENvbHVtbldpZHRocygpO3R5cGVvZiBkPCJ1Ij90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2QuZm9y'@;
put 'RWFjaCgoaCxmKT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSl9LCEwKTpBcnJheS5pc0FycmF5KGEpPyh0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2EuZm9yRWFjaCgoaCxmKT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChm'@;
put 'LGgpfSl9LCEwKSxsLmNvbmZpZz1hKTohMD09PWEmJkFycmF5LmlzQXJyYXkobC5jb25maWcpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuY29uZmlnLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCl9c2V0dXBI'@;
put 'YW5kbGVQb3NpdGlvbihsKXtpZighbC5wYXJlbnROb2RlKXJldHVybjt0aGlzLmN1cnJlbnRUSD1sO2NvbnN0e193dDphfT10aGlzLmhvdC52aWV3LGQ9YS53dFRhYmxlLmdldENvb3Jkcyh0aGlzLmN1cnJlbnRUSCksaD1kLmNvbDtpZihoPDApcmV0dXJuO2NvbnN0IGY9YWwodGhpcy5jdXJy'@;
put 'ZW50VEgpLF89dGhpcy5jdXJyZW50VEguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IFc7aDxhLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikmJihXPWEud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5j'@;
put 'dXJyZW50VEgsZC5yb3csZC5jb2wpKSxXfHwoVz1hLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxkLnJvdyxkLmNvbCkpLHRoaXMuY3VycmVudENvbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVu'@;
put 'ZGVyYWJsZUluZGV4KGgpLHRoaXMuc2VsZWN0ZWRDb2xzPVtdO2NvbnN0IGllPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkm'@;
put 'JmllJiZEbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksd2U9Pnt2byh3ZS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCx3ZS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsaXQ9Pnt0aGlzLnNlbGVjdGVkQ29scy5pbmNsdWRlcyhpdCl8fHRoaXMuc2VsZWN0ZWRDb2xzLnB1c2goaXQpfSl9'@;
put 'KSx0aGlzLnNlbGVjdGVkQ29scy5pbmNsdWRlcyh0aGlzLmN1cnJlbnRDb2wpfHwodGhpcy5zZWxlY3RlZENvbHM9W3RoaXMuY3VycmVudENvbF0pLHRoaXMuc3RhcnRPZmZzZXQ9Vy5zdGFydC02LHRoaXMuc3RhcnRXaWR0aD1wYXJzZUludChfLndpZHRoLDEwKSx0aGlzLmhhbmRsZS5zdHls'@;
put 'ZS50b3A9YCR7Vy50b3B9cHhgLHRoaXMuaGFuZGxlLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHt0aGlzLnN0YXJ0T2Zmc2V0K3RoaXMuc3RhcnRXaWR0aH1weGAsdGhpcy5oYW5kbGUuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu'@;
put 'aGFuZGxlKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXt0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLmN1cnJlbnRXaWR0aH1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgbD1wYXJzZUludChhbCh0aGlzLmhhbmRsZSksMTAp'@;
put 'LGE9cGFyc2VJbnQodGhpcy5oYW5kbGUuc3R5bGUudG9wLDEwKStsLGQ9cGFyc2VJbnQodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoMCksMTApO3BpKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxwaSh0aGlzLmd1aWRlLCJhY3RpdmUiKSx0aGlzLmd1aWRlLnN0eWxl'@;
put 'LnRvcD1gJHthfXB4YCx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCksdGhpcy5ndWlkZS5zdHlsZS5oZWlnaHQ9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5ndWlkZSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXt0aGlzLmd1aWRlLnN0eWxlW3RoaXMu'@;
put 'aW5saW5lRGlyXT10aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl19aGlkZUhhbmRsZUFuZEd1aWRlKCl7V28odGhpcy5oYW5kbGUsImFjdGl2ZSIpLFdvKHRoaXMuZ3VpZGUsImFjdGl2ZSIpfWNoZWNrSWZDb2x1bW5IZWFkZXIobCl7cmV0dXJuISFOcChsLFsiVEhFQUQiXSx0aGlz'@;
put 'LmhvdC5yb290RWxlbWVudCl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1vbk1vdXNlT3ZlcihsKXtpZighZ04obC50YXJnZXQpJiYhMCE9'@;
put 'PXRoaXMuaXNUcmlnZ2VyZWRCeVJNQiYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKGwudGFyZ2V0KSl7Y29uc3QgYT10aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnRhcmdldCk7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKTthJiYobnVsbD09PWR8fCIx'@;
put 'Ij09PWQpJiYodGhpcy5wcmVzc2VkfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oYSkpfX1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVt'@;
put 'ZW50c1NpemUoITApfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwhMCk7dm9pZCAwIT09ZiYmKHRoaXMubmV3U2l6ZT1mKSwiYWxsIj09PXRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEg/dGhpcy5j'@;
put 'bGVhck1hbnVhbFNpemUoZCk6dGhpcy5zZXRNYW51YWxTaXplKGQsdGhpcy5uZXdTaXplKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCEwKSxoJiZsKCl9O3RoaXMuZGJsY2xpY2s+PTIm'@;
put 'Jih0aGlzLnNlbGVjdGVkQ29scy5sZW5ndGg+MT8oRG4odGhpcy5zZWxlY3RlZENvbHMsaD0+e2EoaCl9KSxsKCkpOkRuKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgsITApfSkpLHRoaXMuZGJsY2xpY2s9MCx0aGlzLmF1dG9yZXNpemVUaW1lb3V0PW51bGx9b25Nb3VzZURvd24obCl7Qm8o'@;
put 'bC50YXJnZXQsIm1hbnVhbENvbHVtblJlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSx0aGlzLnByZXNzZWQ9ITAsbnVsbD09PXRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQmJih0aGlzLmF1dG9yZXNpemVU'@;
put 'aW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQpKSx0aGlzLmRibGNsaWNrKz0xLHRoaXMuc3RhcnRYPWwucGFnZVgsdGhpcy5uZXdTaXplPXRoaXMuc3Rh'@;
put 'cnRXaWR0aCl9b25Nb3VzZU1vdmUobCl7aWYodGhpcy5wcmVzc2VkKXtjb25zdCBhPShsLnBhZ2VYLXRoaXMuc3RhcnRYKSp0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKTt0aGlzLmN1cnJlbnRXaWR0aD10aGlzLnN0YXJ0V2lkdGgrYSxEbih0aGlzLnNlbGVjdGVkQ29scyxkPT57dGhp'@;
put 'cy5uZXdTaXplPXRoaXMuc2V0TWFudWFsU2l6ZShkLHRoaXMuY3VycmVudFdpZHRoKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpfX1vbk1vdXNlVXAoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRo'@;
put 'aXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxhPShkLGgpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsdGhpcy5uZXdTaXplLGQsITEpLGgmJmwoKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0'@;
put 'aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCExKX07dGhpcy5wcmVzc2VkJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLnByZXNzZWQ9ITEsdGhpcy5uZXdTaXplIT09dGhpcy5zdGFydFdpZHRoJiYodGhpcy5zZWxlY3RlZENvbHMu'@;
put 'bGVuZ3RoPjE/KERuKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgpfSksbCgpKTpEbih0aGlzLnNlbGVjdGVkQ29scyxoPT57YShoLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpKX1vbkNvbnRleHRNZW51KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUo'@;
put 'KSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmhhbmRsZSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5ndWlkZSksdGhpcy5wcmVzc2VkPSExLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMCx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9'@;
put 'Pnt0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITF9KX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3RFbGVtZW50OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50'@;
put 'TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5oYW5kbGUsImNvbnRleHRtZW51IiwoKT0+dGhpcy5vbkNvbnRleHRNZW51KCkpfW9uTW9kaWZ5Q29sV2lkdGgobCxhKXtsZXQgZD1sO2lmKHRo'@;
put 'aXMuZW5hYmxlZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpLGY9dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KGgpO3RoaXMuaG90LmdldFNldHRpbmdzKClbT0FdJiZmJiYoZD1mKX1yZXR1cm4gZH1vbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0'@;
put 'aChsLGEpe2xldCBkPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChhKTtyZXR1cm4gbnVsbD09PWQmJihkPWwpLGR9b25CZWZvcmVDb2x1bW5SZXNpemUoKXt0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtl'@;
put 'ZCgpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWNvbnN0IEY3PSJweCIsaW9lPWNsYXNzIEdGZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0'@;
put 'YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3Zl'@;
put 'Q2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe3ZvaWQgMCE9PWwmJih0aGlzLl9lbGVtZW50LnN0'@;
put 'eWxlLnRvcD1sK0Y3KSx2b2lkIDAhPT1hJiYodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0PWErRjcpfWdldFBvc2l0aW9uKCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQu'@;
put 'c3R5bGUubGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQsMTApOjB9fXNldFNpemUobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK0Y3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStGNyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlz'@;
put 'Ll9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXtsJiYodGhpcy5f'@;
put 'ZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtGNyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD1hK0Y3KX1nZXRPZmZzZXQoKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wLDEw'@;
put 'KTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdCwxMCk6MH19fSxLRmU9Y2xhc3MgcUZlIGV4dGVuZHMgaW9le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFs'@;
put 'Um93TW92ZS0tYmFja2xpZ2h0Iil9fSxRRmU9Y2xhc3MgSkZlIGV4dGVuZHMgaW9le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fTtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUm93TW92ZSIp'@;
put 'LHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJvd01vdmUiKTtjb25zdCBfej0ibWFudWFsUm93TW92ZSIsbzQ9bmV3IFdlYWtNYXAsb29lPSJodF9fbWFudWFsUm93TW92ZSIsUEE9InNob3ctdWkiLGJ6PSJvbi1tb3ZpbmctLXJvd3MiLHl6PSJhZnRlci1zZWxlY3Rpb24tLXJv'@;
put 'd3MiO2NsYXNzIHRIZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksbzQuc2V0KHRoaXMse3Jvd3NUb01vdmU6W10scHJlc3NlZDp2b2lkIDAs'@;
put 'dGFyZ2V0OntldmVudFBhZ2VZOnZvaWQgMCxjb29yZHM6dm9pZCAwLFREOnZvaWQgMCxyb3c6dm9pZCAwfSxjYWNoZWREcm9wSW5kZXg6dm9pZCAwfSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYmFja2xpZ2h0PW5ldyBLRmUobCksdGhpcy5ndWlkZWxpbmU9bmV3IFFG'@;
put 'ZShsKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX3pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxN'@;
put 'b3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+'@;
put 'dGhpcy5vbkFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxwaSh0aGlz'@;
put 'LmhvdC5yb290RWxlbWVudCxvb2UpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7'@;
put 'V28odGhpcy5ob3Qucm9vdEVsZW1lbnQsb29lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmJhY2tsaWdodC5kZXN0cm95KCksdGhpcy5ndWlkZWxpbmUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlUm93KGwsYSl7cmV0dXJuIHRoaXMubW92ZVJvd3MoW2xdLGEp'@;
put 'fW1vdmVSb3dzKGwsYSl7Y29uc3QgZD1vNC5nZXQodGhpcyksaD1kLmNhY2hlZERyb3BJbmRleCxmPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxfPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dNb3ZlIixsLGEsaCxmKTtpZihkLmNhY2hlZERyb3BJbmRleD12b2lkIDAsITE9PT1fKXJl'@;
put 'dHVybjtmJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IFQ9ZiYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsaCxmLFQpLFR9ZHJhZ1JvdyhsLGEpe3JldHVybiB0aGlz'@;
put 'LmRyYWdSb3dzKFtsXSxhKX1kcmFnUm93cyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gbzQuZ2V0KHRoaXMpLmNhY2hlZERyb3BJbmRleD1hLHRoaXMubW92ZVJvd3MobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCxfPWwuc29tZShXPT5XPDApLFQ9bC5zb21lKFc9Plc+PWQpO3JldHVybiEoaHx8Znx8X3x8VCl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1h'@;
put 'KX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPUFsKGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldFJvd3NIZWlnaHQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKyspe2NvbnN0IF89ZC5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO251bGwhPT1fJiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoXyl8fDIzKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfel07aWYoQXJy'@;
put 'YXkuaXNBcnJheShsKSl0aGlzLm1vdmVSb3dzKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVSb3dzKGEsMCl9fWlzRml4ZWRSb3dUb3AobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3Mo'@;
put 'KS5maXhlZFJvd3NUb3B9aXNGaXhlZFJvd0JvdHRvbShsKXtyZXR1cm4gbD50aGlzLmhvdC5jb3VudFJvd3MoKS0xLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tfXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2'@;
put 'ZSIsIm1hbnVhbFJvd01vdmUiLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxSb3dNb3ZlIixsKSxs'@;
put 'LnZhbHVlP2wudmFsdWU6W119cHJlcGFyZVJvd3NUb01vdmluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPVtdO2lmKCFsKXJldHVybiBhO2NvbnN0e2Zyb206ZCx0bzpofT1sO3JldHVybiB2byhNYXRoLm1pbihkLnJvdyxoLnJvdyksTWF0aC5tYXgoZC5y'@;
put 'b3csaC5yb3cpLFQ9PnthLnB1c2goVCl9KSxhfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPW80LmdldCh0aGlzKSxhPWwudGFyZ2V0LmNvb3JkcyxkPXRoaXMuaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxoPXRoaXMuaG90LnZpZXcuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJv'@;
put 'dygpLGY9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5pc0ZpeGVkUm93VG9wKGEucm93KSYmZD4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLTEsLTEpKSx0aGlzLmlzRml4ZWRSb3dCb3R0b20o'@;
put 'YS5yb3cpJiZoPGYmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgrMSwxKSx2b2lkIDAsITApO2NvbnN0IF89dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxUPWwudGFyZ2V0LlRELFc9dGhpcy5ob3Qu'@;
put 'cm9vdEVsZW1lbnQsaWU9S2woVykscGU9dmcoVyk7bGV0IEVlO0VlPXRoaXMuaG90LnJvb3RXaW5kb3c9PT1wZT9wZS5zY3JvbGxZOnBlLnNjcm9sbFRvcDtjb25zdCBpdD1sLnRhcmdldC5ldmVudFBhZ2VZLShpZS50b3AtRWUpK18uaG9sZGVyLnNjcm9sbFRvcCxldD1fLmhpZGVyLm9mZnNl'@;
put 'dEhlaWdodCx5dD1fLlRCT0RZLm9mZnNldFRvcCxFdD10aGlzLmJhY2tsaWdodC5nZXRPZmZzZXQoKS50b3AsU3Q9dGhpcy5iYWNrbGlnaHQuZ2V0U2l6ZSgpLmhlaWdodCxKdD1ULm9mZnNldEhlaWdodC8yLG5uPVQub2Zmc2V0SGVpZ2h0O2xldCB2bj10aGlzLmhvdC52aWV3LlRIRUFELm9m'@;
put 'ZnNldEhlaWdodCt0aGlzLmdldFJvd3NIZWlnaHQoMCxhLnJvdy0xKTtjb25zdCBObj1pdD49dm4rSnQ7dGhpcy5pc0ZpeGVkUm93VG9wKGEucm93KSYmKHZuKz1fLmhvbGRlci5zY3JvbGxUb3ApLGEucm93PDA/bC50YXJnZXQucm93PWQ+MD9kLTE6ZDpObj8obC50YXJnZXQucm93PWEucm93'@;
put 'KzEsdm4rPTA9PT1hLnJvdz9ubi0xOm5uKTpsLnRhcmdldC5yb3c9YS5yb3c7bGV0IGNyPWl0LElyPXZuO2l0K1N0K0V0Pj1ldD9jcj1ldC1TdC1FdDppdCtFdDx5dCYmKGNyPXl0K01hdGguYWJzKEV0KSksdm4+PWV0LTEmJihJcj1ldC0xKSx0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihj'@;
put 'ciksdGhpcy5ndWlkZWxpbmUuc2V0UG9zaXRpb24oSXIpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+dGhpcy5vbk1vdXNlTW92'@;
put 'ZShhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7Y29uc3R7d3RUYWJs'@;
put 'ZTpmLHd0Vmlld3BvcnQ6X309dGhpcy5ob3Qudmlldy5fd3QsVD10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksVz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGllPW80LmdldCh0aGlzKTtpZighV3x8IVR8fGllLnByZXNzZWR8fDAhPT1sLmJ1dHRv'@;
put 'bilyZXR1cm4gaWUucHJlc3NlZD0hMSxpZS5yb3dzVG9Nb3ZlLmxlbmd0aD0wLHZvaWQgV28odGhpcy5ob3Qucm9vdEVsZW1lbnQsW2J6LFBBXSk7Y29uc3QgcGU9dGhpcy5ndWlkZWxpbmUuaXNCdWlsdCgpJiYhdGhpcy5ndWlkZWxpbmUuaXNBcHBlbmRlZCgpLHdlPXRoaXMuYmFja2xpZ2h0'@;
put 'LmlzQnVpbHQoKSYmIXRoaXMuYmFja2xpZ2h0LmlzQXBwZW5kZWQoKTtwZSYmd2UmJih0aGlzLmd1aWRlbGluZS5hcHBlbmRUbyhmLmhpZGVyKSx0aGlzLmJhY2tsaWdodC5hcHBlbmRUbyhmLmhpZGVyKSk7Y29uc3R7ZnJvbTpFZSx0bzpaZX09VyxpdD1NYXRoLm1pbihFZS5yb3csWmUucm93'@;
put 'KSxldD1NYXRoLm1heChFZS5yb3csWmUucm93KTtpZihhLmNvbDwwJiZhLnJvdz49aXQmJmEucm93PD1ldCl7aC5yb3c9ITAsaWUucHJlc3NlZD0hMCxpZS50YXJnZXQuZXZlbnRQYWdlWT1sLnBhZ2VZLGllLnRhcmdldC5jb29yZHM9YSxpZS50YXJnZXQuVEQ9ZCxpZS5yb3dzVG9Nb3ZlPXRo'@;
put 'aXMucHJlcGFyZVJvd3NUb01vdmluZygpO2NvbnN0IHl0PWYuaG9sZGVyLnNjcm9sbExlZnQrXy5nZXRSb3dIZWFkZXJXaWR0aCgpO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKG51bGwseXQpLHRoaXMuYmFja2xpZ2h0LnNldFNpemUoZi5oaWRlci5vZmZzZXRXaWR0aC15dCx0aGlzLmdl'@;
put 'dFJvd3NIZWlnaHQoaXQsZXQpKSx0aGlzLmJhY2tsaWdodC5zZXRPZmZzZXQoLTEqKHRoaXMuZ2V0Um93c0hlaWdodChpdCxhLnJvdy0xKStsLm9mZnNldFkpLG51bGwpLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LGJ6KSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX1lbHNlIFdvKHRoaXMuaG90'@;
put 'LnJvb3RFbGVtZW50LHl6KSxpZS5wcmVzc2VkPSExLGllLnJvd3NUb01vdmUubGVuZ3RoPTB9b25Nb3VzZU1vdmUobCl7Y29uc3QgYT1vNC5nZXQodGhpcyk7aWYoYS5wcmVzc2VkKXtpZihsLnRhcmdldD09PXRoaXMuYmFja2xpZ2h0LmVsZW1lbnQpe2NvbnN0IGQ9dGhpcy5iYWNrbGlnaHQu'@;
put 'Z2V0U2l6ZSgpLmhlaWdodDt0aGlzLmJhY2tsaWdodC5zZXRTaXplKG51bGwsMCksc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKG51bGwsZCl9KX1hLnRhcmdldC5ldmVudFBhZ2VZPWwucGFnZVksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9fW9uQmVm'@;
put 'b3JlT25DZWxsTW91c2VPdmVyKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxfPW80LmdldCh0aGlzKTshZnx8IV8ucHJlc3NlZHx8KF8ucm93c1RvTW92ZS5pbmRleE9mKGEucm93KT4tMT9Xbyh0aGlzLmhvdC5yb290RWxlbWVudCxQQSk6cGkodGhp'@;
put 'cy5ob3Qucm9vdEVsZW1lbnQsUEEpLGgucm93PSEwLGguY29sdW1uPSEwLGguY2VsbD0hMCxfLnRhcmdldC5jb29yZHM9YSxfLnRhcmdldC5URD1kKX1vbk1vdXNlVXAoKXtjb25zdCBsPW80LmdldCh0aGlzKSxhPWwudGFyZ2V0LnJvdyxkPWwucm93c1RvTW92ZS5sZW5ndGg7aWYobC5wcmVz'@;
put 'c2VkPSExLGwuYmFja2xpZ2h0SGVpZ2h0PTAsV28odGhpcy5ob3Qucm9vdEVsZW1lbnQsW2J6LFBBLHl6XSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiZwaSh0aGlzLmhvdC5yb290RWxlbWVudCx5eiksZDwxfHx2b2lkIDA9PT1hKXJldHVybjtjb25zdCBm'@;
put 'PXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobC5yb3dzVG9Nb3ZlWzBdKSxfPXRoaXMuZHJhZ1Jvd3MobC5yb3dzVG9Nb3ZlLGEpO2lmKGwucm93c1RvTW92ZS5sZW5ndGg9MCwhMD09PV8pe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcu'@;
put 'YWRqdXN0RWxlbWVudHNTaXplKCEwKTtjb25zdCBUPXRoaXMuaG90LnRvVmlzdWFsUm93KGYpO3RoaXMuaG90LnNlbGVjdFJvd3MoVCxUK2QtMSl9fW9uQWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsaD10aGlzLmhvdC52aWV3Ll93'@;
put 'dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCkrbC5ob2xkZXIuc2Nyb2xsTGVmdDt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLGgpLHRoaXMuYmFja2xpZ2h0LnNldFNpemUobC5oaWRlci5vZmZzZXRXaWR0aC1oKX1idWlsZFBsdWdpblVJKCl7dGhpcy5iYWNrbGlnaHQu'@;
put 'YnVpbGQoKSx0aGlzLmd1aWRlbGluZS5idWlsZCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1kZXN0cm95KCl7dGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMuZ3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IEZBPSJt'@;
put 'YW51YWxSb3dSZXNpemUiLHNvZT0ibWFudWFsUm93SGVpZ2h0cyIsd3o9bmV3IFdlYWtNYXA7Y2xhc3MgckhlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEZBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwfWNvbnN0cnVjdG9yKGwpe3N1'@;
put 'cGVyKGwpO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdDt0aGlzLmN1cnJlbnRUSD1udWxsLHRoaXMuY3VycmVudFJvdz1udWxsLHRoaXMuc2VsZWN0ZWRSb3dzPVtdLHRoaXMuY3VycmVudEhlaWdodD1udWxsLHRoaXMubmV3U2l6ZT1udWxsLHRoaXMuc3RhcnRZPW51bGwsdGhpcy5z'@;
put 'dGFydEhlaWdodD1udWxsLHRoaXMuc3RhcnRPZmZzZXQ9bnVsbCx0aGlzLmhhbmRsZT1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZ3VpZGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5wcmVzc2VkPW51bGwsdGhpcy5pc1Ry'@;
put 'aWdnZXJlZEJ5Uk1CPSExLHRoaXMuZGJsY2xpY2s9MCx0aGlzLmF1dG9yZXNpemVUaW1lb3V0PW51bGwsdGhpcy5yb3dIZWlnaHRzTWFwPXZvaWQgMCx3ei5zZXQodGhpcyx7Y29uZmlnOnZvaWQgMH0pLHBpKHRoaXMuaGFuZGxlLCJtYW51YWxSb3dSZXNpemVyIikscGkodGhpcy5ndWlkZSwi'@;
put 'bWFudWFsUm93UmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnJvd0hl'@;
put 'aWdodHNNYXA9bmV3IFdwLHRoaXMucm93SGVpZ2h0c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soIm1v'@;
put 'ZGlmeVJvd0hlaWdodCIsKGwsYSk9PnRoaXMub25Nb2RpZnlSb3dIZWlnaHQobCxhKSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2lu'@;
put 'KCl9ZGlzYWJsZVBsdWdpbigpe3d6LmdldCh0aGlzKS5jb25maWc9dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbFJvd0hlaWdo'@;
put 'dHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsc29lLHRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbFJvd0hlaWdodHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsc29l'@;
put 'LGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPU1hdGgubWF4KGEsb25lLkRFRkFVTFRfSEVJR0hUKTtyZXR1cm4gdGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChkLGgpLGh9c2V0dXBIYW5kbGVQb3NpdGlv'@;
put 'bihsKXt0aGlzLmN1cnJlbnRUSD1sO2NvbnN0e3ZpZXc6YX09dGhpcy5ob3Qse193dDpkfT1hLGg9ZC53dFRhYmxlLmdldENvb3Jkcyh0aGlzLmN1cnJlbnRUSCksZj1oLnJvdztpZihmPDApcmV0dXJuO2NvbnN0IF89d2EodGhpcy5jdXJyZW50VEgpLFQ9dGhpcy5jdXJyZW50VEguZ2V0Qm91'@;
put 'bmRpbmdDbGllbnRSZWN0KCksVz1mPGQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksaWU9Zj49YS5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoMCwxKS1kLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpO2xldCBwZTtXP3BlPWQud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5l'@;
put 'ck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsaC5yb3csaC5jb2wpOmllJiYocGU9ZC53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxoLnJvdyxoLmNvbCkp'@;
put 'LHBlfHwocGU9ZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxoLnJvdyxoLmNvbCkpLHRoaXMuY3VycmVudFJvdz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYp'@;
put 'LHRoaXMuc2VsZWN0ZWRSb3dzPVtdO2NvbnN0IHdlPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJndlJiZEbih0aGlzLmhvdC5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlKCksWmU9Pnt2byhaZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxaZS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyx5dD0+e3RoaXMuc2VsZWN0ZWRSb3dzLmluY2x1ZGVzKHl0KXx8dGhpcy5zZWxlY3RlZFJvd3MucHVzaCh5dCl9KX0pLHRoaXMuc2VsZWN0ZWRS'@;
put 'b3dzLmluY2x1ZGVzKHRoaXMuY3VycmVudFJvdyl8fCh0aGlzLnNlbGVjdGVkUm93cz1bdGhpcy5jdXJyZW50Um93XSksdGhpcy5zdGFydE9mZnNldD1wZS50b3AtNix0aGlzLnN0YXJ0SGVpZ2h0PXBhcnNlSW50KFQuaGVpZ2h0LDEwKSx0aGlzLmhhbmRsZS5zdHlsZS50b3A9YCR7dGhpcy5z'@;
put 'dGFydE9mZnNldCt0aGlzLnN0YXJ0SGVpZ2h0fXB4YCx0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7cGUuc3RhcnR9cHhgLHRoaXMuaGFuZGxlLnN0eWxlLndpZHRoPWAke199cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGFuZGxlKX1yZWZy'@;
put 'ZXNoSGFuZGxlUG9zaXRpb24oKXt0aGlzLmhhbmRsZS5zdHlsZS50b3A9YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLmN1cnJlbnRIZWlnaHR9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQod2EodGhpcy5oYW5kbGUpLDEwKSxhPXBhcnNlSW50KHRoaXMuaGFuZGxl'@;
put 'LnN0eWxlW3RoaXMuaW5saW5lRGlyXSwxMCkrbCxkPXBhcnNlSW50KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoMCksMTApO3BpKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxwaSh0aGlzLmd1aWRlLCJhY3RpdmUiKSx0aGlzLmd1aWRlLnN0eWxlLnRvcD10aGlzLmhh'@;
put 'bmRsZS5zdHlsZS50b3AsdGhpcy5ndWlkZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7YX1weGAsdGhpcy5ndWlkZS5zdHlsZS53aWR0aD1kLWwrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmd1aWRlKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigpe3RoaXMuZ3Vp'@;
put 'ZGUuc3R5bGUudG9wPXRoaXMuaGFuZGxlLnN0eWxlLnRvcH1oaWRlSGFuZGxlQW5kR3VpZGUoKXtXbyh0aGlzLmhhbmRsZSwiYWN0aXZlIiksV28odGhpcy5ndWlkZSwiYWN0aXZlIil9Y2hlY2tJZlJvd0hlYWRlcihsKXt2YXIgYTtyZXR1cm4gTnAobCxbIlRIIl0sdGhpcy5ob3Qucm9vdEVs'@;
put 'ZW1lbnQpJiYiVEJPRFkiPT09KG51bGw9PT0oYT1sLnBhcmVudE5vZGUpfHx2b2lkIDA9PT1hfHxudWxsPT09KGE9YS5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS50YWdOYW1lKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9PWwudGFnTmFtZT8iVEgiPT09'@;
put 'bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJlbnROb2RlKTpudWxsfWdldEFjdHVhbFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpO3JldHVybiB2b2lkIDAhPT1hJiZ0aGlzLm5ld1NpemU8YT9hOnRo'@;
put 'aXMubmV3U2l6ZX1vbk1vdXNlT3ZlcihsKXtpZighZ04obC50YXJnZXQpJiYhMCE9PXRoaXMuaXNUcmlnZ2VyZWRCeVJNQiYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGwudGFyZ2V0KSl7Y29uc3QgYT10aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnRhcmdldCk7YSYmKHRoaXMucHJlc3NlZHx8'@;
put 'dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGEpKX19YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+'@;
put 'e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCk7dm9pZCAwIT09ZiYmKHRoaXMubmV3U2l6ZT1mKSx0aGlzLnNldE1hbnVhbFNpemUoZCx0aGlzLm5ld1NpemUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl'@;
put 'clJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCksaCYmbCgpfTt0aGlzLmRibGNsaWNrPj0yJiYodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoPjE/KERuKHRoaXMuc2VsZWN0ZWRSb3dzLGg9PnthKGgpfSksbCgpKTpEbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YSho'@;
put 'LCEwKX0pKSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsfW9uTW91c2VEb3duKGwpe0JvKGwudGFyZ2V0LCJtYW51YWxSb3dSZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9u'@;
put 'KCksdGhpcy5wcmVzc2VkPSEwLG51bGw9PT10aGlzLmF1dG9yZXNpemVUaW1lb3V0JiYodGhpcy5hdXRvcmVzaXplVGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh0aGlzLmF1dG9yZXNpemVU'@;
put 'aW1lb3V0KSksdGhpcy5kYmxjbGljays9MSx0aGlzLnN0YXJ0WT1sLnBhZ2VZLHRoaXMubmV3U2l6ZT10aGlzLnN0YXJ0SGVpZ2h0KX1vbk1vdXNlTW92ZShsKXt0aGlzLnByZXNzZWQmJih0aGlzLmN1cnJlbnRIZWlnaHQ9dGhpcy5zdGFydEhlaWdodCsobC5wYWdlWS10aGlzLnN0YXJ0WSks'@;
put 'RG4odGhpcy5zZWxlY3RlZFJvd3MsYT0+e3RoaXMubmV3U2l6ZT10aGlzLnNldE1hbnVhbFNpemUoYSx0aGlzLmN1cnJlbnRIZWlnaHQpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCkpfW9uTW91c2VVcCgpe2NvbnN0IGw9KCk9Pnt0'@;
put 'aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5ob3Qudmlldy5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGE9KGQsaCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEx'@;
put 'KSxoJiZsKCksdGhpcy5zYXZlTWFudWFsUm93SGVpZ2h0cygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMSl9O3RoaXMucHJlc3NlZCYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5wcmVzc2VkPSExLHRo'@;
put 'aXMubmV3U2l6ZSE9PXRoaXMuc3RhcnRIZWlnaHQmJih0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGg+MT8oRG4odGhpcy5zZWxlY3RlZFJvd3MsaD0+e2EoaCl9KSxsKCkpOkRuKHRoaXMuc2VsZWN0ZWRSb3dzLGg9PnthKGgsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aGlzLmN1'@;
put 'cnJlbnRUSCkpfW9uQ29udGV4dE1lbnUoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuaGFuZGxlKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmd1aWRlKSx0aGlzLnByZXNzZWQ9ITEsdGhpcy5p'@;
put 'c1RyaWdnZXJlZEJ5Uk1CPSEwLHRoaXMuaG90Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e3RoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMX0pfWJpbmRFdmVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PnRoaXMub25Nb3VzZU92ZXIoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3duKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlbW92ZSIs'@;
put 'ZD0+dGhpcy5vbk1vdXNlTW92ZShkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhhbmRsZSwiY29udGV4dG1lbnUiLCgpPT50aGlzLm9u'@;
put 'Q29udGV4dE1lbnUoKSl9b25Nb2RpZnlSb3dIZWlnaHQobCxhKXtsZXQgZD1sO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleChoKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXSYm'@;
put 'ZiYmKGQ9Zil9cmV0dXJuIGR9b25NYXBJbml0KCl7Y29uc3QgbD13ei5nZXQodGhpcyksYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXSxkPXRoaXMubG9hZE1hbnVhbFJvd0hlaWdodHMoKTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3R5cGVvZiBkPCJ1Ij9kLmZvckVhY2goKGgs'@;
put 'Zik9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGYsaCl9KTpBcnJheS5pc0FycmF5KGEpPyhhLmZvckVhY2goKGgsZik9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGYsaCl9KSxsLmNvbmZpZz1hKTohMD09PWEmJkFycmF5LmlzQXJyYXkobC5jb25m'@;
put 'aWcpJiZsLmNvbmZpZy5mb3JFYWNoKChoLGYpPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSl9LCEwKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCB4aD1jbGFzcyBpSGV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMucm93PWwsdGhpcy5j'@;
put 'b2w9YSx0aGlzLnJvd3NwYW49ZCx0aGlzLmNvbHNwYW49aCx0aGlzLnJlbW92ZWQ9ITEsdGhpcy5jZWxsQ29vcmRzRmFjdG9yeT1mLHRoaXMuY2VsbFJhbmdlRmFjdG9yeT1ffXN0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xh'@;
put 'cmVkIHdpdGgge3JvdzogJHtsLnJvd30sIGNvbDogJHtsLmNvbH0sXHgyMAogICAgICByb3dzcGFuOiAke2wucm93c3Bhbn0sIGNvbHNwYW46ICR7bC5jb2xzcGFufX0gY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1x4MjAKICAgICAgbm90IHN1cHBvcnRlZC4gSXQgd2lsbCBu'@;
put 'b3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpe3JldHVybiBBYWBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7bC5yb3d9LCAke2wuY29sfV0gaXMgcG9zaXRpb25lZFx4MjAKICAgICAgKG9yIHBvc2l0aW9uZWQg'@;
put 'cGFydGlhbGx5KSBvdXRzaWRlIG9mIHRoZSB0YWJsZSByYW5nZS4gSXQgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZSBmaXggeW91ciBzZXR1cC5gfXN0YXRpYyBJU19TSU5HTEVfQ0VMTChsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93'@;
put 'fSwgJHtsLmNvbH1dIGhhcyBib3RoICJyb3dzcGFuIlx4MjAKICAgICAgYW5kICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMSIsIHdoaWNoIG1ha2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBaRVJPX1NQQU5fV0FSTklO'@;
put 'RyhsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dIGhhcyAicm93c3BhbiJceDIwCiAgICAgIG9yICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0'@;
put 'aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBjb250YWluc05lZ2F0aXZlVmFsdWVzKGwpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvd3NwYW48MHx8bC5jb2xzcGFuPDB9c3RhdGljIGlzU2luZ2xlQ2VsbChsKXtyZXR1cm4gMT09PWwuY29sc3BhbiYmMT09PWwucm93c3Bhbn1zdGF0aWMg'@;
put 'Y29udGFpbnNaZXJvU3BhbihsKXtyZXR1cm4gMD09PWwuY29sc3Bhbnx8MD09PWwucm93c3Bhbn1zdGF0aWMgaXNPdXRPZkJvdW5kcyhsLGEsZCl7cmV0dXJuIGwucm93PDB8fGwuY29sPDB8fGwucm93Pj1hfHxsLnJvdytsLnJvd3NwYW4tMT49YXx8bC5jb2w+PWR8fGwuY29sK2wuY29sc3Bh'@;
put 'bi0xPj1kfW5vcm1hbGl6ZShsKXtjb25zdCBhPWwuY291bnRSb3dzKCksZD1sLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJvdz5hLTEmJih0aGlzLnJvdz1hLTEpLHRoaXMuY29sPDA/dGhpcy5jb2w9MDp0aGlzLmNvbD5kLTEmJih0aGlzLmNvbD1kLTEpLHRoaXMu'@;
put 'cm93K3RoaXMucm93c3Bhbj5hLTEmJih0aGlzLnJvd3NwYW49YS10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPmQtMSYmKHRoaXMuY29sc3Bhbj1kLXRoaXMuY29sKX1pbmNsdWRlcyhsLGEpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5jb2w8PWEmJnRoaXMucm93K3RoaXMucm93'@;
put 'c3Bhbi0xPj1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49YX1pbmNsdWRlc0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5jb2w8PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1sfWluY2x1ZGVzVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMucm93K3RoaXMu'@;
put 'cm93c3Bhbi0xPj1sfXNoaWZ0KGwsYSl7Y29uc3QgZD1sWzBdfHxsWzFdLGg9YStNYXRoLmFicyhsWzBdfHxsWzFdKS0xLGY9bFswXT8iY29sc3BhbiI6InJvd3NwYW4iLF89bFswXT8iY29sIjoicm93IixUPU1hdGgubWluKGEsaCksVz1NYXRoLm1heChhLGgpLGllPXRoaXNbX10scGU9dGhp'@;
put 'c1tfXSt0aGlzW2ZdLTE7aWYoaWU+PWEmJih0aGlzW19dKz1kKSxkPjApYTw9cGUmJmE+aWUmJih0aGlzW2ZdKz1kKTtlbHNlIGlmKGQ8MCl7aWYoVDw9aWUmJlc+PXBlKXJldHVybiB0aGlzLnJlbW92ZWQ9ITAsITE7aWYoaWU+PVQmJmllPD1XKXtjb25zdCB3ZT1XLWllKzEsRWU9TWF0aC5h'@;
put 'YnMoZCktd2U7dGhpc1tfXS09RWUrZCx0aGlzW2ZdLT13ZX1lbHNlIGllPD1UJiZwZT49Vz90aGlzW2ZdKz1kOmllPD1UJiZwZT49VCYmcGU8VyYmKHRoaXNbZl0tPXBlLVQrMSl9cmV0dXJuITB9aXNGYXJ0aGVyKGwsYSl7cmV0dXJuIWx8fCgiZG93biI9PT1hP2wucm93K2wucm93c3Bhbi0x'@;
put 'PHRoaXMucm93K3RoaXMucm93c3Bhbi0xOiJ1cCI9PT1hP2wucm93PnRoaXMucm93OiJyaWdodCI9PT1hP2wuY29sK2wuY29sc3Bhbi0xPHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xOiJsZWZ0Ij09PWE/bC5jb2w+dGhpcy5jb2w6bnVsbCl9Z2V0TGFzdFJvdygpe3JldHVybiB0aGlzLnJvdyt0'@;
put 'aGlzLnJvd3NwYW4tMX1nZXRMYXN0Q29sdW1uKCl7cmV0dXJuIHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xfWdldFJhbmdlKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlRmFjdG9yeSh0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5'@;
put 'KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMuZ2V0TGFzdFJvdygpLHRoaXMuZ2V0TGFzdENvbHVtbigpKSl9fTtmdW5jdGlvbiBDeihjLGwsYSxkKXtsP2wucm93PT09YSYmbC5jb2w9PT1kPyhjLnNldEF0dHJpYnV0ZSgicm93c3BhbiIsbC5yb3dzcGFu'@;
put 'LnRvU3RyaW5nKCkpLGMuc2V0QXR0cmlidXRlKCJjb2xzcGFuIixsLmNvbHNwYW4udG9TdHJpbmcoKSkpOihjLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksYy5zdHlsZS5kaXNwbGF5PSJub25lIik6KGMucmVtb3ZlQXR0cmlidXRlKCJy'@;
put 'b3dzcGFuIiksYy5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxjLnN0eWxlLmRpc3BsYXk9IiIpfWNsYXNzIFN6e2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5tZXJnZWRDZWxscz1bXSx0aGlzLmhvdD1sLmhvdH1zdGF0aWMgSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhsKXty'@;
put 'ZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dLCBvdmVybGFwc1x4MjAKICAgICAgd2l0aCB0aGUgb3RoZXIgZGVjbGFyZWQgbWVyZ2VkIGNlbGwuIFRoZSBvdmVybGFwcGluZyBtZXJnZWQgY2VsbCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0'@;
put 'YWJsZSwgcGxlYXNlXHgyMAogICAgICBmaXggeW91ciBzZXR1cC5gfWdldChsLGEpe2xldCBoPSExO3JldHVybiBEbih0aGlzLm1lcmdlZENlbGxzLGY9PiEoZi5yb3c8PWwmJmYucm93K2Yucm93c3Bhbi0xPj1sJiZmLmNvbDw9YSYmZi5jb2wrZi5jb2xzcGFuLTE+PWEmJihoPWYsMSkpKSxo'@;
put 'fWdldEJ5UmFuZ2UobCl7bGV0IGQ9ITE7cmV0dXJuIERuKHRoaXMubWVyZ2VkQ2VsbHMsaD0+IShoLnJvdzw9bC5mcm9tLnJvdyYmaC5yb3craC5yb3dzcGFuLTE+PWwudG8ucm93JiZoLmNvbDw9bC5mcm9tLmNvbCYmaC5jb2wraC5jb2xzcGFuLTE+PWwudG8uY29sKXx8KGQ9aCxkKSksZH1n'@;
put 'ZXRXaXRoaW5SYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxscyxoPVtdO2xldCBmPWw7aWYoIWYuaW5jbHVkZXNSYW5nZSl7Y29uc3QgXz10aGlzLmhvdC5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhmLmZyb20ucm93LGYuZnJvbS5jb2wpLFQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi50by5yb3csZi50by5jb2wpO2Y9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShfLF8sVCl9cmV0dXJuIERuKGQsXz0+e2NvbnN0IFQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'Xy5yb3csXy5jb2wpLFc9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoXy5yb3crXy5yb3dzcGFuLTEsXy5jb2wrXy5jb2xzcGFuLTEpLGllPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoVCxULFcpO2E/Zi5vdmVybGFwcyhpZSkmJmgucHVzaChfKTpmLmluY2x1ZGVzUmFuZ2UoaWUpJiZo'@;
put 'LnB1c2goXyl9KSwhIWgubGVuZ3RoJiZofWFkZChsKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHMsZD1sLnJvdyxoPWwuY29sLFQ9bmV3IHhoKGQsaCxsLnJvd3NwYW4sbC5jb2xzcGFuLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UpLFc9dGhp'@;
put 'cy5nZXQoZCxoKSxpZT10aGlzLmlzT3ZlcmxhcHBpbmcoVCk7cmV0dXJuIFd8fGllPyhHYShTei5JU19PVkVSTEFQUElOR19XQVJOSU5HKFQpKSwhMSk6KHRoaXMuaG90JiZULm5vcm1hbGl6ZSh0aGlzLmhvdCksYS5wdXNoKFQpLFQpfXJlbW92ZShsLGEpe2NvbnN0IGQ9dGhpcy5tZXJnZWRD'@;
put 'ZWxscyxoPXRoaXMuZ2V0KGwsYSksZj1oP3RoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihoKTotMTtyZXR1cm4hKCFofHwtMT09PWYpJiYoZC5zcGxpY2UoZiwxKSxoKX1jbGVhcigpe2NvbnN0IGE9W10sZD1bXTtEbih0aGlzLm1lcmdlZENlbGxzLGg9Pntjb25zdCBmPXRoaXMuaG90LmdldENl'@;
put 'bGwoaC5yb3csaC5jb2wpO2YmJmEucHVzaChbZix0aGlzLmdldChoLnJvdyxoLmNvbCksaC5yb3csaC5jb2xdKX0pLHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoPTAsRG4oYSwoaCxmKT0+e3ZvKDAsaC5yb3dzcGFuLTEsXz0+e3ZvKDAsaC5jb2xzcGFuLTEsVD0+e2lmKDAhPT1UfHwwIT09Xyl7'@;
put 'Y29uc3QgVz10aGlzLmhvdC5nZXRDZWxsKGgucm93K18saC5jb2wrVCk7VyYmZC5wdXNoKFtXLG51bGwsbnVsbCxudWxsXSl9fSl9KSxhW2ZdWzFdPW51bGx9KSxEbihhLGg9PntDeiguLi5oKX0pLERuKGQsaD0+e0N6KC4uLmgpfSl9aXNPdmVybGFwcGluZyhsKXtjb25zdCBhPXRoaXMuaG90'@;
put 'Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoMCwwKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCksdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crbC5yb3dzcGFuLTEsbC5jb2wrbC5jb2xzcGFuLTEpKTtsZXQgZD0hMTty'@;
put 'ZXR1cm4gRG4odGhpcy5tZXJnZWRDZWxscyxoPT4hdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcygwLDApLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgucm93LGguY29sKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLnJvdytoLnJv'@;
put 'd3NwYW4tMSxoLmNvbCtoLmNvbHNwYW4tMSkpLm92ZXJsYXBzKGEpfHwoZD0hMCwhMSkpLGR9aXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpO3JldHVybiBkJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5k'@;
put 'ZXgoZC5yb3csMSk9PT1sJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk9PT1hfWdldEZpcnN0UmVuZGVyYWJsZUNvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZHx8dGhpcy5pc0ZpcnN0UmVuZGVyYWJsZU1l'@;
put 'cmdlZENlbGwobCxhKSlyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKTtjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLnJvdywxKSxmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRk'@;
put 'ZW5JbmRleChkLmNvbCwxKTtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1zaGlmdENvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPVswLDBdO3N3aXRjaChsKXtjYXNlInJpZ2h0IjpoWzBdKz1kO2JyZWFrO2Nhc2UibGVmdCI6aFswXS09ZDticmVhaztjYXNlImRvd24i'@;
put 'OmhbMV0rPWQ7YnJlYWs7Y2FzZSJ1cCI6aFsxXS09ZH1Ebih0aGlzLm1lcmdlZENlbGxzLGY9PntmLnNoaWZ0KGgsYSl9KSx2ayh0aGlzLm1lcmdlZENlbGxzLmxlbmd0aC0xLDAsZj0+e2NvbnN0IF89dGhpcy5tZXJnZWRDZWxsc1tmXTtfJiZfLnJlbW92ZWQmJnRoaXMubWVyZ2VkQ2VsbHMu'@;
put 'c3BsaWNlKHRoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihfKSwxKX0pfX1jb25zdCBvSGU9U3o7c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZU1lcmdlQ2VsbHMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJNZXJnZUNlbGxzIiksc28uZ2V0U2luZ2xldG9uKCku'@;
put 'cmVnaXN0ZXIoImJlZm9yZVVubWVyZ2VDZWxscyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVubWVyZ2VDZWxscyIpO2NvbnN0IEt5PSJtZXJnZUNlbGxzIixhb2U9bmV3IFdlYWtNYXAsbG9lPUt5O2NsYXNzIGhIZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tF'@;
put 'WSgpe3JldHVybiBLeX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksYW9lLnNldCh0aGlzLHtsYXN0RGVzaXJlZENvb3JkczpudWxsfSksdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bnVsbCx0aGlzLmF1dG9maWxsQ2Fs'@;
put 'Y3VsYXRpb25zPW51bGwsdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbS3ldfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3'@;
put 'IG9IZSh0aGlzKSx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyBjbGFzcyBzSGV7Y29uc3RydWN0b3IobCl7dGhpcy5wbHVnaW49bCx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbj10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24sdGhpcy5jdXJyZW50RmlsbERhdGE9bnVs'@;
put 'bH1jb3JyZWN0U2VsZWN0aW9uQXJlYVNpemUobCl7aWYobFswXT09PWxbMl0mJmxbMV09PT1sWzNdKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsWzBdLGxbMV0pO2EmJihsWzJdPWxbMF0rYS5yb3dzcGFuLTEsbFszXT1sWzFdK2EuY29sc3Bhbi0xKX19Z2V0RGly'@;
put 'ZWN0aW9uKGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hWzBdPT09bFswXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJkb3duIjphWzJdPT09bFsyXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJ1cCI6YVsxXT09PWxbMV0mJmFbMl09PT1sWzJdPyJyaWdodCI6ImxlZnQiLGR9c25h'@;
put 'cERyYWdBcmVhKGwsYSxkLGgpe2NvbnN0IGY9YS5zbGljZSgwKSxfPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxbVCxXLGllLHBlXT1sLEVlPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMT9pZS1UKzE6cGUtVysxLGl0PV8tTWF0aC5mbG9vcihfL0VlKSpFZSxldD10aGlzLmdldEZh'@;
put 'cnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihldClpZigiZG93biI9PT1kKXtjb25zdCB5dD1ldC5yb3crZXQucm93c3Bhbi1ULWl0O2ZbMl0reXQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1pdDpmWzJdKz1pdD95dDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0'@;
put 'IHl0PWV0LmNvbCtldC5jb2xzcGFuLVctaXQ7ZlszXSt5dD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPWl0OmZbM10rPWl0P3l0OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3QgeXQ9aWUtaXQtZXQucm93KzE7ZlswXSt5dDwwP2ZbMF0rPWl0OmZbMF0tPWl0P3l0OjB9ZWxz'@;
put 'ZSBpZigibGVmdCI9PT1kKXtjb25zdCB5dD1wZS1pdC1ldC5jb2wrMTtmWzFdK3l0PDA/ZlsxXSs9aXQ6ZlsxXS09aXQ/eXQ6MH1yZXR1cm4gdGhpcy51cGRhdGVDdXJyZW50RmlsbENhY2hlKHtiYXNlQXJlYTpsLGRyYWdEaXJlY3Rpb246ZCxmb3VuZE1lcmdlZENlbGxzOmgsZmlsbFNpemU6'@;
put 'XyxkcmFnQXJlYTpmLGN5Y2xlTGVuZ3RoOkVlfSksZn11cGRhdGVDdXJyZW50RmlsbENhY2hlKGwpe3RoaXMuY3VycmVudEZpbGxEYXRhfHwodGhpcy5jdXJyZW50RmlsbERhdGE9e30pLFhsKHRoaXMuY3VycmVudEZpbGxEYXRhLGwpfWdldEF1dG9maWxsU2l6ZShsLGEsZCl7Y29uc3RbaCxm'@;
put 'LF8sVF09bCxbVyxpZSxwZSx3ZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuIGgtVztjYXNlImRvd24iOnJldHVybiBwZS1fO2Nhc2UibGVmdCI6cmV0dXJuIGYtaWU7Y2FzZSJyaWdodCI6cmV0dXJuIHdlLVQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2Nv'@;
put 'bnN0W2gsZixfLFRdPWwsW1csaWUscGUsd2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybltXLGllLGgtMSxUXTtjYXNlImRvd24iOnJldHVybltfKzEsZixwZSxUXTtjYXNlImxlZnQiOnJldHVybltXLGllLF8sZi0xXTtjYXNlInJpZ2h0IjpyZXR1cm5baCxUKzEscGUsd2VdO2RlZmF1'@;
put 'bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKXtjb25zdFtmLF8sVCxXXT1sLGllPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMSxwZT1pZT9UOlcsd2U9aWU/ZjpfLEVlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxaZT1pZT9ULWYrMTpXLV8rMSxl'@;
put 'dD1FZS1NYXRoLmZsb29yKEVlL1plKSpaZTtsZXQgeXQ9bnVsbCxFdD1udWxsLFN0PW51bGw7c3dpdGNoKGQpe2Nhc2UidXAiOnl0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLFN0PXBlLWV0KzE7YnJlYWs7Y2FzZSJsZWZ0Ijp5dD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLFN0PXBlLWV0KzE7YnJl'@;
put 'YWs7Y2FzZSJkb3duIjp5dD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixTdD13ZStldC0xO2JyZWFrO2Nhc2UicmlnaHQiOnl0PSJpbmNsdWRlc0hvcml6b250YWxseSIsU3Q9d2UrZXQtMX1yZXR1cm4gRG4oaCxKdD0+e0p0W3l0XShTdCkmJkp0LmlzRmFydGhlcihFdCxkKSYmKEV0PUp0KX0pLEV0'@;
put 'fXJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKXtpZighdGhpcy5jdXJyZW50RmlsbERhdGEpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRSYW5nZUZyb21DaGFuZ2VzKGwpLGQ9dGhpcy5jdXJyZW50RmlsbERhdGEuZm91bmRNZXJnZWRDZWxscyxoPXRoaXMuY3VycmVudEZpbGxEYXRhLmRy'@;
put 'YWdEaXJlY3Rpb24sZj0oaWUscGUpPT57c3dpdGNoKGgpe2Nhc2UidXAiOnJldHVybiBpZS5yb3ctcGU+PWEuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gaWUucm93K2llLnJvd3NwYW4tMStwZTw9YS50by5yb3c7Y2FzZSJsZWZ0IjpyZXR1cm4gaWUuY29sLXBlPj1hLmZyb20uY29sdW1u'@;
put 'O2Nhc2UicmlnaHQiOnJldHVybiBpZS5jb2wraWUuY29sc3Bhbi0xK3BlPD1hLnRvLmNvbHVtbjtkZWZhdWx0OnJldHVybiBudWxsfX07bGV0IF89MCxUPW51bGwsVz0xO2Rve2ZvcihsZXQgaWU9MDtpZTxkLmxlbmd0aDtpZSs9MSl7aWYoVD1kW2llXSxfPVcqdGhpcy5jdXJyZW50RmlsbERh'@;
put 'dGEuY3ljbGVMZW5ndGgsZihULF8pKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6VC5yb3ctXyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wsY29sc3BhbjpULmNvbHNwYW59KTticmVhaztjYXNlImRvd24iOnRoaXMucGx1'@;
put 'Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpULnJvdytfLHJvd3NwYW46VC5yb3dzcGFuLGNvbDpULmNvbCxjb2xzcGFuOlQuY29sc3Bhbn0pO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LHJvd3NwYW46'@;
put 'VC5yb3dzcGFuLGNvbDpULmNvbC1fLGNvbHNwYW46VC5jb2xzcGFufSk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LHJvd3NwYW46VC5yb3dzcGFuLGNvbDpULmNvbCtfLGNvbHNwYW46VC5jb2xzcGFufSl9aWU9PT1k'@;
put 'Lmxlbmd0aC0xJiYoVys9MSl9fXdoaWxlKGYoVCxfKSk7dGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbCx0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCksZC5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFpbnQoKX1nZXRSYW5nZUZyb21DaGFuZ2VzKGwpe2NvbnN0IGE9e21p'@;
put 'bjpudWxsLG1heDpudWxsfSxkPXttaW46bnVsbCxtYXg6bnVsbH07cmV0dXJuIERuKGwsaD0+e2NvbnN0IGY9aFswXSxfPXRoaXMucGx1Z2luLmhvdC5wcm9wVG9Db2woaFsxXSk7KG51bGw9PT1hLm1pbnx8ZjxhLm1pbikmJihhLm1pbj1mKSwobnVsbD09PWEubWF4fHxmPmEubWF4KSYmKGEu'@;
put 'bWF4PWYpLChudWxsPT09ZC5taW58fF88ZC5taW4pJiYoZC5taW49XyksKG51bGw9PT1kLm1heHx8Xz5kLm1heCkmJihkLm1heD1fKX0pLHtmcm9tOntyb3c6YS5taW4sY29sdW1uOmQubWlufSx0bzp7cm93OmEubWF4LGNvbHVtbjpkLm1heH19fWRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9u'@;
put 'cyhsLGEsZCl7Y29uc3QgaD10aGlzLmdldERyYWdBcmVhKGwsYSxkKSxbZixfLFQsV109aCxpZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZixfKSxwZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVCxXKSx3ZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNl'@;
put 'bGxSYW5nZShpZSxpZSxwZSk7cmV0dXJuISF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh3ZSwhMCl9fSh0aGlzKSx0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucz1uZXcgY2xhc3MgbEhle2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5o'@;
put 'b3QsdGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZT0iZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwifXNuYXBEZWx0YShsLGEsZCl7Y29uc3QgaD1hLnRvLF89aC5jb2wrbC5jb2w7bC5yb3c/dGhpcy5qdW1wT3Zlck1lcmdlZENlbGwobCxkLGgucm93K2wucm93KTpsLmNvbCYm'@;
put 'dGhpcy5qdW1wT3Zlck1lcmdlZENlbGwobCxkLF8pfWp1bXBPdmVyTWVyZ2VkQ2VsbChsLGEsZCl7bGV0IGg9bC5yb3d8fGwuY29sLGY9bnVsbCxfPW51bGwsVD1udWxsO2wucm93PyhmPWEuaW5jbHVkZXNWZXJ0aWNhbGx5KGQpLF89YS5yb3csVD1hLmdldExhc3RSb3coKSk6bC5jb2wmJihm'@;
put 'PWEuaW5jbHVkZXNIb3Jpem9udGFsbHkoZCksXz1hLmNvbCxUPWEuZ2V0TGFzdENvbHVtbigpKSwwIT09aCYmKGg+MD9mJiZkIT09XyYmKGgrPVQtZCsxKTpmJiZkIT09VCYmKGgtPWQtXysxKSxsLnJvdz9sLnJvdz1oOmwuY29sJiYobC5jb2w9aCkpfWdldFVwZGF0ZWRTZWxlY3Rpb25SYW5n'@;
put 'ZShsLGEpe3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGwuaGlnaGxpZ2h0LGwuZnJvbSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnRvLnJvdythLnJvdyxsLnRvLmNvbCthLmNvbCkpfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKXtjb25zdCBm'@;
put 'PU1hdGgubWluKGRbMF0sZFsyXSksXz1NYXRoLm1pbihkWzFdLGRbM10pLFQ9TWF0aC5tYXgoZFswXSxkWzJdKSxXPU1hdGgubWF4KGRbMV0sZFszXSk7aWYodm9pZCAwPT09aHx8IXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwo'@;
put 'bCxhKSlyZXR1cm47Y29uc3QgcGU9dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCFwZSlyZXR1cm47Y29uc3Qgd2U9cGUuZ2V0TGFzdFJvdygpLEVlPXBlLmdldExhc3RDb2x1bW4oKTtyZXR1cm4gZjw9cGUucm93JiZfPD1wZS5jb2wmJlQ+PXdlJiZXPj1F'@;
put 'ZT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS0ke2h9YDp0aGlzLnBsdWdpbi5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuaXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKHBlLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxl'@;
put 'Y3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3IobGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVz'@;
put 'aCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCBfPTA7XzxhLmxlbmd0aDtfKz0xKWZbX109YVtfXS5pbmNsdWRlcyhkW2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJu'@;
put 'ITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5m'@;
put 'dWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxsfX0odGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckluaXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlUcmFuc2Zvcm1TdGFydCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCguLi5hcmd1bWVudHMpfSksdGhp'@;
put 'cy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlUcmFuc2Zvcm1FbmQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUdldENlbGxDb29yZHMo'@;
put 'Li4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVNldFJhbmdlU3RhcnQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGwub25CZWZvcmVTZXRSYW5nZVN0YXJ0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlRW5kIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlU2V0UmFuZ2VFbmQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0'@;
put 'aW9uIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclJlbmRlcmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFm'@;
put 'dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5hZGRNZXJnZUFjdGlvbnNUb0NvbnRleHRNZW51KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldENlbGxNZXRh'@;
put 'KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3Bv'@;
put 'cnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUF1dG9maWxsUmFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2Rp'@;
put 'ZnlBdXRvZmlsbFJhbmdlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGwu'@;
put 'b25BZnRlclJlbW92ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBs'@;
put 'Lm9uQWZ0ZXJSZW1vdmVSb3coLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNoYW5nZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcmF3Qm9yZGVycyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5v'@;
put 'bkJlZm9yZURyYXdBcmVhQm9yZGVycyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckRyYXdTZWxlY3Rpb24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ2VsbENsYXNz'@;
put 'TmFtZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLChhLGQpPT57aWYoIk1lcmdlQ2VsbHMiPT09ZClyZXR1cm4hMX0pLHRoaXMucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xsZWN0aW9ucygpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LnJlbmRlcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMu'@;
put 'aG90LmdldFNldHRpbmdzKClbS3ldO3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncyhsKSxzdXBlci51cGRhdGVQbHVnaW4oKX1pZkNocm9tZUZvcmNlUmVwYWludCgpe2lmKCFfTigpKXJldHVybjtjb25zdCBsPVtdO2xl'@;
put 'dCBhPVtdO3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmZvckVhY2goZD0+e2NvbnN0e3JvdzpoLHJvd3NwYW46Zn09ZDtmb3IobGV0IF89aCsxO188aCtmO18rKylhLnB1c2goXyl9KSxhPVsuLi5uZXcgU2V0KGEpXSxhLmZvckVhY2goZD0+e2NvbnN0IGg9dGhpcy5o'@;
put 'b3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkKTt0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmdldE92ZXJsYXlzKCEwKS5tYXAoZj0+Im1hc3RlciI9PT1mPy5uYW1lP2Y6Zi5jbG9uZS53dFRhYmxlKS5mb3JFYWNoKGY9Pntjb25zdCBfPWYuZ2V0'@;
put 'Um93KGgpO18mJihfLnN0eWxlLmJhY2tncm91bmQ9bjcoXywiYmFja2dyb3VuZENvbG9yIikucmVwbGFjZSgiKSIsIiwgMC45OSkiKSxsLnB1c2goXykpfSl9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57bC5mb3JFYWNoKGQ9PntkLnN0eWxlLmJhY2tncm91bmQ9bjcoZCwiYmFj'@;
put 'a2dyb3VuZENvbG9yIikucmVwbGFjZSgiLCAwLjk5KSIsIikiKX0pfSwxKX12YWxpZGF0ZVNldHRpbmcobCl7bGV0IGE9ITA7cmV0dXJuISFsJiYoeGguY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKT8oR2EoeGguTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCkpLGE9ITEpOnhoLmlzT3V0T2ZC'@;
put 'b3VuZHMobCx0aGlzLmhvdC5jb3VudFJvd3MoKSx0aGlzLmhvdC5jb3VudENvbHMoKSk/KEdhKHhoLklTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKSksYT0hMSk6eGguaXNTaW5nbGVDZWxsKGwpPyhHYSh4aC5JU19TSU5HTEVfQ0VMTChsKSksYT0hMSk6eGguY29udGFpbnNaZXJvU3Bhbihs'@;
put 'KSYmKEdhKHhoLlpFUk9fU1BBTl9XQVJOSU5HKGwpKSxhPSExKSxhKX1nZW5lcmF0ZUZyb21TZXR0aW5ncyhsKXtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBhPVtdO2lmKERuKGwsZD0+e2lmKCF0aGlzLnZhbGlkYXRlU2V0dGluZyhkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC5fY3Jl'@;
put 'YXRlQ2VsbENvb3JkcyhkLnJvdyxkLmNvbCksZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdytkLnJvd3NwYW4tMSxkLmNvbCtkLmNvbHNwYW4tMSksXz10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGgsaCxmKTt0aGlzLm1lcmdlUmFuZ2UoXywhMCwhMCksdm8oZC5yb3csZC5y'@;
put 'b3crZC5yb3dzcGFuLTEsVD0+e3ZvKGQuY29sLGQuY29sK2QuY29sc3Bhbi0xLFc9PntUPT09ZC5yb3cmJlc9PT1kLmNvbHx8YS5wdXNoKFtULFcsbnVsbF0pfSl9KX0pLDA9PT1hLmxlbmd0aClyZXR1cm47dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChhKX19Y2xlYXJDb2xsZWN0aW9ucygpe3Ro'@;
put 'aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9Y2FuTWVyZ2VSYW5nZShsKXtyZXR1cm4hIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXx8dGhpcy52YWxpZGF0ZVNldHRpbmcobCl9dG9nZ2xlTWVyZ2VPblNlbGVjdGlvbigp'@;
put 'e2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudG9nZ2xlTWVyZ2UobCksdGhpcy5ob3Quc2VsZWN0Q2VsbChh'@;
put 'LnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9bWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24o'@;
put 'dGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMubWVyZ2VSYW5nZShsKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX11bm1lcmdlU2VsZWN0aW9uKCl7'@;
put 'bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMuaG90LnNlbGVj'@;
put 'dENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNb'@;
put 'Ml07Y29uc3QgaD1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZj1sLmdldEJvdHRvbUVuZENvcm5lcigpLF89e3JvdzpoLnJvdyxjb2w6aC5jb2wscm93c3BhbjpmLnJvdy1oLnJvdysxLGNvbHNwYW46Zi5jb2wtaC5jb2wrMX0sVD1bXTtsZXQgVz1udWxsO3JldHVybiEhdGhpcy5jYW5NZXJnZVJh'@;
put 'bmdlKF8sYSkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTWVyZ2VDZWxscyIsbCxhKSx2bygwLF8ucm93c3Bhbi0xLHBlPT57dm8oMCxfLmNvbHNwYW4tMSx3ZT0+e2xldCBFZT1udWxsO1RbcGVdfHwoVFtwZV09W10pLDA9PT1wZSYmMD09PXdlP0VlPXRoaXMuaG90LmdldFNvdXJjZURh'@;
put 'dGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhfLnJvdyksdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihfLmNvbCkpOnRoaXMuaG90LnNldENlbGxNZXRhKF8ucm93K3BlLF8uY29sK3dlLCJoaWRkZW4iLCEwKSxUW3BlXVt3ZV09RWV9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKF8u'@;
put 'cm93LF8uY29sLCJzcGFubmVkIiwhMCksIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZChfKXx8KGQ/Vz1bXy5yb3csXy5jb2wsVF06dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoXy5yb3csXy5jb2wsVCx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSksYXx8dGhpcy5pZkNo'@;
put 'cm9tZUZvcmNlUmVwYWludCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1lcmdlQ2VsbHMiLGwsXyxhKSxXKSl9dW5tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD10aGlzLm1lcmdlZENl'@;
put 'bGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShsKTtkJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVubWVyZ2VDZWxscyIsbCxhKSxEbihkLGg9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoaC5yb3csaC5jb2wpLHZvKDAsaC5yb3dzcGFuLTEsZj0+e3ZvKDAsaC5j'@;
put 'b2xzcGFuLTEsXz0+e3RoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrXywiaGlkZGVuIiksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCtfLCJjb3B5YWJsZSIpfSl9KSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdyxoLmNvbCwic3Bhbm5lZCIp'@;
put 'fSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5tZXJnZUNlbGxzIixsLGEpLHRoaXMuaG90LnJlbmRlcigpKX10b2dnbGVNZXJnZShsKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLmZyb20ucm93LGwuZnJvbS5jb2wpO2Eucm93PT09bC5mcm9tLnJvdyYmYS5j'@;
put 'b2w9PT1sLmZyb20uY29sJiZhLnJvdythLnJvd3NwYW4tMT09PWwudG8ucm93JiZhLmNvbCthLmNvbHNwYW4tMT09PWwudG8uY29sP3RoaXMudW5tZXJnZVJhbmdlKGwpOnRoaXMubWVyZ2VTZWxlY3Rpb24obCl9bWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhsLGEpLF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsXykpfXVubWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLF89dGhpcy5ob3QuX2Ny'@;
put 'ZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLnVubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZixfKSl9b25BZnRlckluaXQoKXt0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKHRoaXMuaG90LmdldFNldHRpbmdzKClbS3ldKSx0aGlzLmhvdC5yZW5kZXIoKX1yZWdpc3Rl'@;
put 'clNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwibSJdXSxjYWxsYmFjazooKT0+e3RoaXMudG9nZ2xlTWVyZ2UodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSksdGhp'@;
put 'cy5ob3QucmVuZGVyKCl9LHJ1bk9ubHlJZjpkPT4hZC5hbHRLZXksZ3JvdXA6bG9lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGxvZSl9b25BZnRlcklzTXVsdGlw'@;
put 'bGVTZWxlY3Rpb24obCl7aWYobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscyxkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0xKWlmKGQuZnJvbS5yb3c9PT1hW2hdLnJvdyYmZC5mcm9tLmNv'@;
put 'bD09PWFbaF0uY29sJiZkLnRvLnJvdz09PWFbaF0ucm93K2FbaF0ucm93c3Bhbi0xJiZkLnRvLmNvbD09PWFbaF0uY29sK2FbaF0uY29sc3Bhbi0xKXJldHVybiExfXJldHVybiBsfW9uTW9kaWZ5VHJhbnNmb3JtU3RhcnQobCl7Y29uc3QgYT1hb2UuZ2V0KHRoaXMpLGQ9dGhpcy5ob3QuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKTtsZXQgaD17cm93Omwucm93LGNvbDpsLmNvbH0sZj1udWxsO2NvbnN0IF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5oaWdobGlnaHQucm93LGQuaGlnaGxpZ2h0LmNvbCksVD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoXy5yb3csXy5j'@;
put 'b2wpO2lmKGEubGFzdERlc2lyZWRDb29yZHN8fChhLmxhc3REZXNpcmVkQ29vcmRzPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG51bGwsbnVsbCkpLFQpe2NvbnN0IGllPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFQucm93LFQuY29sKSxwZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhULnJvdytULnJvd3NwYW4tMSxULmNvbCtULmNvbHNwYW4tMSk7dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShpZSxpZSxwZSkuaW5jbHVkZXMoYS5sYXN0RGVzaXJlZENvb3Jkcyl8fChhLmxhc3REZXNpcmVkQ29vcmRzPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG51bGwsbnVs'@;
put 'bCkpLGgucm93PWEubGFzdERlc2lyZWRDb29yZHMucm93P2EubGFzdERlc2lyZWRDb29yZHMucm93LV8ucm93Omgucm93LGguY29sPWEubGFzdERlc2lyZWRDb29yZHMuY29sP2EubGFzdERlc2lyZWRDb29yZHMuY29sLV8uY29sOmguY29sLGwucm93PjA/aC5yb3c9VC5yb3crVC5yb3dzcGFu'@;
put 'LTEtXy5yb3crbC5yb3c6bC5yb3c8MCYmKGgucm93PV8ucm93LVQucm93K2wucm93KSxsLmNvbD4wP2guY29sPVQuY29sK1QuY29sc3Bhbi0xLV8uY29sK2wuY29sOmwuY29sPDAmJihoLmNvbD1fLmNvbC1ULmNvbCtsLmNvbCl9Zj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLmhpZ2hs'@;
put 'aWdodC5yb3craC5yb3csZC5oaWdobGlnaHQuY29sK2guY29sKTtjb25zdCBXPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLnJvdyxmLmNvbCk7aWYoVyl7Y29uc3QgaWU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0Rmlyc3RSZW5kZXJhYmxlQ29vcmRzKFcucm93LFcu'@;
put 'Y29sKTthLmxhc3REZXNpcmVkQ29vcmRzPWYsaD17cm93OmllLnJvdy1fLnJvdyxjb2w6aWUuY29sLV8uY29sfX0wIT09aC5yb3cmJihsLnJvdz1oLnJvdyksMCE9PWguY29sJiYobC5jb2w9aC5jb2wpfW9uTW9kaWZ5VHJhbnNmb3JtRW5kKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZUxhc3QoKSxkPVd1KGwpLGg9dGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0VXBkYXRlZFNlbGVjdGlvblJhbmdlKGEsbCk7bGV0IGY9V3UoZCk7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShoLCEwKTtkb3tmPVd1KGQpLHRoaXMu'@;
put 'c2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFVwZGF0ZWRTZWxlY3Rpb25SYW5nZShhLGQpLERuKF8sVD0+e3RoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLnNuYXBEZWx0YShkLGEsVCl9KX13aGlsZShkLnJvdyE9PWYucm93fHxkLmNvbCE9PWYuY29sKTtsLnJvdz1kLnJvdyxsLmNvbD1kLmNv'@;
put 'bH1vbk1vZGlmeUdldENlbGxDb29yZHMobCxhKXtpZihsPDB8fGE8MClyZXR1cm47Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtpZighZClyZXR1cm47Y29uc3R7cm93OmgsY29sOmYsY29sc3BhbjpfLHJvd3NwYW46VH09ZDtyZXR1cm5baCxmLGgrVC0xLGYr'@;
put 'Xy0xXX1hZGRNZXJnZUFjdGlvbnNUb0NvbnRleHRNZW51KGwpe2wuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gdUhlKGMpe3JldHVybntrZXk6Im1lcmdlQ2VsbHMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYobCl7Y29uc3QgYT1jLm1l'@;
put 'cmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTtpZihhLnJvdz09PWxbMF0mJmEuY29sPT09bFsxXSYmYS5yb3crYS5yb3dzcGFuLTE9PT1sWzJdJiZhLmNvbCthLmNvbHNwYW4tMT09PWxbM10pcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShIVil9cmV0dXJuIHRoaXMu'@;
put 'Z2V0VHJhbnNsYXRlZFBocmFzZShGVil9LGNhbGxiYWNrKCl7Yy50b2dnbGVNZXJnZU9uU2VsZWN0aW9uKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO3JldHVybiFsfHx4aC5pc1NpbmdsZUNlbGwoe3JvdzpsWzBdLGNvbDpsWzFdLHJvd3NwYW46bFsyXS1s'@;
put 'WzBdKzEsY29sc3BhbjpsWzNdLWxbMV0rMX0pfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0saGlkZGVuOiExfX0odGhpcykpfW9uQWZ0ZXJSZW5kZXJlcihsLGEsZCl7Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYSxkKSxmPXVzKGgpP1d1KGgp'@;
put 'OnZvaWQgMDtpZih1cyhmKSl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Xyxjb2x1bW5JbmRleE1hcHBlcjpUfT10aGlzLmhvdCx7cm93OlcsY29sOmllLGNvbHNwYW46cGUscm93c3Bhbjp3ZX09ZixbRWUsWmVdPXRoaXMudHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShXLHdlLGllLHBl'@;
put 'KSx5dD1FZS1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYSkrMSxFdD1aZS1ULmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZCkrMTtmLnJvdz1fLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLnJvdywxKSxmLmNvbD1ULmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNv'@;
put 'bCwxKSxmLnJvd3NwYW49TWF0aC5taW4oZi5yb3dzcGFuLHl0KSxmLmNvbHNwYW49TWF0aC5taW4oZi5jb2xzcGFuLEV0KX1DeihsLGYsYSxkKX1vbkJlZm9yZVNldFJhbmdlU3RhcnQobCl7aWYodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxs'@;
put 'KGwucm93LGwuY29sKSl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5yb3csbC5jb2wpO1tsLnJvdyxsLmNvbF09W2Eucm93LGEuY29sXX19b25CZWZvcmVTZXRSYW5nZUVuZChsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7YS5oaWdo'@;
put 'bGlnaHQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5oaWdobGlnaHQucm93LGEuaGlnaGxpZ2h0LmNvbCksYS50bz1sO2xldCBkPSExO2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5'@;
put 'Um93SGVhZGVyKCkpZG97ZD0hMTtmb3IobGV0IGg9MDtoPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtoKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2hdLmdldFJhbmdlKCk7YS5leHBhbmRCeVJhbmdlKF8p'@;
put 'JiYobC5yb3c9YS50by5yb3csbC5jb2w9YS50by5jb2wsZD0hMCl9fXdoaWxlKGQpfW9uQWZ0ZXJHZXRDZWxsTWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtoJiYoaC5yb3chPT1sfHxoLmNvbCE9PWE/ZC5jb3B5YWJsZT0hMTooZC5yb3dz'@;
put 'cGFuPWgucm93c3BhbixkLmNvbHNwYW49aC5jb2xzcGFuKSl9b25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSksdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChs'@;
put 'LGEpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u'@;
put 'LmdldChoLGYpO2lmKHVzKF8pKXtjb25zdCBUPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLnJvdywxKSk7aWYoVDxsLnN0YXJ0Um93KXJldHVybiBsLnN0YXJ0Um93PVQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQo'@;
put 'bCxhKX19fW1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24u'@;
put 'Z2V0KGgsZik7aWYodXMoXykpe2NvbnN0IFc9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KF8ucm93K18ucm93c3Bhbi0xLC0xKSk7aWYoVz5sLmVuZFJvdylyZXR1cm4gbC5lbmRSb3c9Vyx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRS'@;
put 'b3dFbmQobCxhKX19fW9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZShsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpLHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKX1tb2RpZnlWaWV3'@;
put 'cG9ydENvbHVtblN0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Q29sdW1uKTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQo'@;
put 'ZixoKTtpZih1cyhfKSl7Y29uc3QgVD1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXy5jb2wsMSkpO2lmKFQ8bC5zdGFydENvbHVtbilyZXR1cm4gbC5zdGFydENvbHVtbj1ULHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0'@;
put 'YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2Vs'@;
put 'bHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHVzKF8pKXtjb25zdCBXPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLmNvbCtfLmNvbHNwYW4tMSwtMSkpO2lmKFc+bC5lbmRDb2x1bW4pcmV0dXJuIGwuZW5kQ29sdW1uPVcsdm9pZCB0'@;
put 'aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl9fX10cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKGwsYSxkLGgpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6X309dGhpcy5ob3Q7bGV0IFQsVztyZXR1cm4gVD0wPT09YT9mLmdldE5lYXJlc3RO'@;
put 'b3RIaWRkZW5JbmRleChsLDEpOmYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwrYS0xLC0xKSxXPTA9PT1oP18uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk6Xy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCtoLTEsLTEpLFtsPj0wP2YuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ'@;
put 'bmRleChUKTpsLGQ+PTA/Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFcpOmRdfW9uTW9kaWZ5QXV0b2ZpbGxSYW5nZShsLGEpe3RoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuY29ycmVjdFNlbGVjdGlvbkFyZWFTaXplKGEpO2NvbnN0IGQ9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9u'@;
put 'cy5nZXREaXJlY3Rpb24oYSxsKTtsZXQgaD1sO2lmKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGEsaCxkKSlyZXR1cm4gaD1hLGg7Y29uc3QgZj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh7ZnJvbTp7cm93'@;
put 'OmFbMF0sY29sOmFbMV19LHRvOntyb3c6YVsyXSxjb2w6YVszXX19KTtyZXR1cm4gZiYmKGg9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5zbmFwRHJhZ0FyZWEoYSxoLGQsZikpLGh9b25BZnRlckNyZWF0ZUNvbChsLGEpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVj'@;
put 'dGlvbnMoInJpZ2h0IixsLGEpfW9uQWZ0ZXJSZW1vdmVDb2wobCxhKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJsZWZ0IixsLGEpfW9uQWZ0ZXJDcmVhdGVSb3cobCxhLGQpeyJhdXRvIiE9PWQmJnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0'@;
put 'Q29sbGVjdGlvbnMoImRvd24iLGwsYSl9b25BZnRlclJlbW92ZVJvdyhsLGEpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInVwIixsLGEpfW9uQWZ0ZXJDaGFuZ2UobCxhKXsiQXV0b2ZpbGwuZmlsbCI9PT1hJiZ0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25z'@;
put 'LnJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKX1vbkJlZm9yZURyYXdBcmVhQm9yZGVycyhsLGEpe2lmKGEmJiJhcmVhIj09PWEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtEbih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShk'@;
put 'KSxmPT57ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3c9PT1mLmdldExhc3RSb3coKSYmZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w9PT1mLmdldExhc3RDb2x1bW4oKSYmKGxbMl09Zi5yb3csbFszXT1mLmNvbCl9KX19b25BZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0KGwsYSxkKXtpZigh'@;
put 'dGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLnJvdyxsLmNvbCk7aWYoIWgpcmV0dXJuO2NvbnN0IGY9YT4wLF89YTwwLFQ9ZDwwLFc9ZD4wLGllPWgucm93K2gucm93c3Bhbi0xPT10aGlzLmhvdC5jb3VudFJvd3MoKS0xLHBlPTA9'@;
put 'PT1oLnJvdyx3ZT1oLmNvbCtoLmNvbHNwYW4tMT09dGhpcy5ob3QuY291bnRDb2xzKCktMTsoZiYmaWV8fF8mJnBlfHxXJiZ3ZXx8VCYmMD09PWguY29sKSYmKGwucm93PWgucm93LGwuY29sPWguY29sKX1vbkFmdGVyRHJhd1NlbGVjdGlvbihsLGEsZCxoKXtpZihkKXJldHVybiB0aGlzLnNl'@;
put 'bGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUobCxhLGQsaCl9b25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcygpe3JldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgp'@;
put 'fX1mdW5jdGlvbiBjb2UoKXtHYShBYWBQbHVnaW5zIFxgY29sdW1uU29ydGluZ1xgIGFuZCBcYG11bHRpQ29sdW1uU29ydGluZ1xgIHNob3VsZCBub3QgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseS4gCiAgICBPbmx5IFxgbXVsdGlDb2x1bW5Tb3J0aW5nXGAgd2lsbCB3b3JrLmApfWNvbnN0'@;
put 'IE16PSJtdWx0aUNvbHVtblNvcnRpbmciLGRvZT0iY29sdW1uU29ydGluZyI7SXJlKE16LGZ1bmN0aW9uIGZIZShjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24gXyhUKXtjb25zdCBXPWNbVF0saWU9bFtUXSxwZT1oW1Rd'@;
put 'LHdlPWZbVF0sRWU9aWUubXVsdGlDb2x1bW5Tb3J0aW5nLGl0PShFZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5P0VlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6THJlKGllLnR5cGUpKShXLGllLEVlKShwZSx3ZSk7aWYoMD09PWl0KXtjb25zdCBldD1UKzE7aWYodHlwZW9mIGxbZXRdPCJ1Iily'@;
put 'ZXR1cm4gXyhldCl9cmV0dXJuIGl0fSgwKX19KTtjbGFzcyBfSGUgZXh0ZW5kcyBPcmV7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIE16fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE3MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLnBsdWdpbktleT1N'@;
put 'en1pc0VuYWJsZWQoKXtyZXR1cm4gc3VwZXIuaXNFbmFibGVkKCl9ZW5hYmxlUGx1Z2luKCl7IXRoaXMuZW5hYmxlZCYmdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0mJnRoaXMuaG90LmdldFNldHRpbmdzKClbZG9lXSYmY29lKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9'@;
put 'ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1zb3J0KGwpe3N1cGVyLnNvcnQobCl9Y2xlYXJTb3J0KCl7c3VwZXIuY2xlYXJTb3J0KCl9aXNTb3J0ZWQoKXtyZXR1cm4gc3VwZXIuaXNTb3J0ZWQoKX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBzdXBlci5nZXRTb3J0Q29u'@;
put 'ZmlnKGwpfXNldFNvcnRDb25maWcobCl7c3VwZXIuc2V0U29ydENvbmZpZyhsKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpb'@;
put 'bF19dXBkYXRlSGVhZGVyQ2xhc3NlcyhsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07c3VwZXIudXBkYXRlSGVhZGVyQ2xhc3NlcyhsLC4uLmQpLFdvKGwsZnVuY3Rpb24gZ0hlKGMpe2Nv'@;
put 'bnN0IGw9Yy5jbGFzc05hbWUuc3BsaXQoIiAiKSxhPW5ldyBSZWdFeHAoIl5zb3J0LVswLTldezEsMn0kIik7cmV0dXJuIGwuZmlsdGVyKGQ9PmEudGVzdChkKSl9KGwpKSwhMSE9PXRoaXMuZW5hYmxlZCYmcGkobCxmdW5jdGlvbiBwSGUoYyxsLGEpe2NvbnN0IGQ9W107cmV0dXJuITE9PT1h'@;
put 'fHxjLmlzQ29sdW1uU29ydGVkKGwpJiZjLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpPjEmJmQucHVzaChgc29ydC0ke2MuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpKzF9YCksZH0oLi4uZCkpfW9uVXBkYXRlU2V0dGluZ3MobCl7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlz'@;
put 'LnBsdWdpbktleV0mJnRoaXMuaG90LmdldFNldHRpbmdzKClbZG9lXSYmY29lKCksc3VwZXIub25VcGRhdGVTZXR0aW5ncyhsKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7ITEhPT1naihhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wp'@;
put 'JiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpPyh0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSx0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhhLmNvbCwiYXBwZW5kIikpKTp0aGlzLnNvcnQo'@;
put 'dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKSkpfX1jbGFzcyB3SGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ibXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNjB9Y29uc3RydWN0b3Io'@;
put 'bCl7c3VwZXIobCksdGhpcy5kcmFnZ2VkPVtdLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5sYXN0U2V0Q2VsbD1udWxsfWlzRW5hYmxlZCgpe3JldHVybiBtMigpfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuZXZlbnRNYW5hZ2VyfHwodGhpcy5ldmVudE1hbmFnZXI9'@;
put 'bmV3IGxsKHRoaXMpKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLHtyb290RWxlbWVudDphfT10aGlzLmhvdDtmdW5jdGlvbiBkKGgpe2lmKDE9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybiBs'@;
put 'LmRyYWdnZWQuc3BsaWNlKDAsbC5kcmFnZ2VkLmxlbmd0aCksITA7Y29uc3QgZj1sLmRyYWdnZWQuaW5kZXhPZihoKTtpZigtMT09PWYpcmV0dXJuITE7MD09PWY/bC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgwLDEpOjE9PT1mJiYobC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgtMSkpfXRo'@;
put 'aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hzdGFydCIsaD0+e2xldCBmO3JldHVybiBCbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJ0b3AiKSxsLnRv'@;
put 'dWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOkJvKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNl'@;
put 'bGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goImJvdHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwfSksdGhp'@;
put 'cy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaGVuZCIsaD0+Qm8oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJ0b3AiKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTpCbyhoLnRhcmdl'@;
put 'dCwiYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsImJvdHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaG1vdmUiLGg9Pntj'@;
put 'b25zdHtyb290RG9jdW1lbnQ6Zn09dGhpcy5ob3Q7bGV0IF8sVCxXLGllLHBlLHdlO2lmKDA9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybjtjb25zdCBFZT1mLmVsZW1lbnRGcm9tUG9pbnQoaC50b3VjaGVzWzBdLmNsaWVudFgsaC50b3VjaGVzWzBdLmNsaWVudFkpOyFFZXx8RWU9PT1sLmxh'@;
put 'c3RTZXRDZWxsfHwoKCJURCI9PT1FZS5ub2RlTmFtZXx8IlRIIj09PUVlLm5vZGVOYW1lKSYmKF89bC5ob3QuZ2V0Q29vcmRzKEVlKSwtMT09PV8uY29sJiYoXy5jb2w9MCksVD1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLFc9VC5nZXRXaWR0aCgpLGllPVQuZ2V0SGVpZ2h0KCkscGU9'@;
put 'VC5nZXREaXJlY3Rpb24oKSwxPT09VyYmMT09PWllJiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoXyksd2U9bC5nZXRDdXJyZW50UmFuZ2VDb29yZHMoVCxfLGwudG91Y2hTdGFydFJhbmdlLmRpcmVjdGlvbixwZSxsLmRyYWdnZWRbMF0pLG51bGwhPT13ZS5zdGFydCYmbC5ob3Quc2Vs'@;
put 'ZWN0aW9uLnNldFJhbmdlU3RhcnQod2Uuc3RhcnQpLGwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZCh3ZS5lbmQpLGwubGFzdFNldENlbGw9RWUpLGgucHJldmVudERlZmF1bHQoKSl9KX1nZXRDdXJyZW50UmFuZ2VDb29yZHMobCxhLGQsaCxmKXtjb25zdCBfPWwuZ2V0VG9wU3RhcnRDb3Ju'@;
put 'ZXIoKSxUPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksVz1sLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCksaWU9bC5nZXRUb3BFbmRDb3JuZXIoKTtsZXQgcGU9e3N0YXJ0Om51bGwsZW5kOm51bGx9O3N3aXRjaChkKXtjYXNlIk5FLVNXIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6Y2FzZSJOVy1TRSI6'@;
put 'cGU9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxsLmhpZ2hsaWdodC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhXLnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3cs'@;
put 'YS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09ZiYmKHBlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhULnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGEucm93LF8uY29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChoKXtjYXNlIk5FLVNXIjoidG9wIj09PWY/cGU9e3N0YXJ0OmEsZW5kOld9OnBlLmVuZD1hO2JyZWFrO2Nhc2UiTlctU0UiOiJ0b3AiPT09Zj9wZT17c3RhcnQ6YSxlbmQ6VH06cGUuZW5kPWE7YnJlYWs7Y2FzZSJTRS1O'@;
put 'VyI6InRvcCI9PT1mP3BlPXtzdGFydDphLGVuZDpffTpwZS5lbmQ9YTticmVhaztjYXNlIlNXLU5FIjoidG9wIj09PWY/cGU9e3N0YXJ0OmEsZW5kOmllfTpwZS5lbmQ9YX1icmVhaztjYXNlIlNXLU5FIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6cGU9ImJvdHRvbSI9PT1mP3tzdGFydDp0aGlz'@;
put 'LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFcucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3cs'@;
put 'VC5jb2wpfTticmVhaztjYXNlIlNXLU5FIjpwZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LFQuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVD'@;
put 'ZWxsQ29vcmRzKGEucm93LF8uY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoXy5yb3csYS5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWY/cGU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LGllLmNvbCksZW5kOnRoaXMuaG90Ll9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKF8ucm93LGEuY29sKX06InRvcCI9PT1mJiYocGU9e3N0YXJ0OlcsZW5kOmF9KX1icmVhaztjYXNlIlNFLU5XIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6Y2FzZSJORS1TVyI6Y2FzZSJTVy1ORSI6InRvcCI9PT1mJiYocGUuZW5kPWEpO2JyZWFrO2Nhc2UiU0UtTlci'@;
put 'OiJ0b3AiPT09Zj9wZS5lbmQ9YTpwZT17c3RhcnQ6YSxlbmQ6X319fXJldHVybiBwZX1pc0RyYWdnZWQoKXtyZXR1cm4gdGhpcy5kcmFnZ2VkLmxlbmd0aD4wfX1mdW5jdGlvbiB4eigpe2xldHtsYWJlbDpjPSIiLGNvbHNwYW46bD0xLG9yaWdDb2xzcGFuOmE9MSxjb2xsYXBzaWJsZTpkPSEx'@;
put 'LGNyb3NzSGlkZGVuQ29sdW1uczpoPVtdLGlzQ29sbGFwc2VkOmY9ITEsaXNIaWRkZW46Xz0hMSxpc1Jvb3Q6VD0hMSxpc1BsYWNlaG9sZGVyOlc9ITF9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm57bGFiZWw6Yyxjb2xz'@;
put 'cGFuOmwsb3JpZ0NvbHNwYW46YSxjb2xsYXBzaWJsZTpkLGlzQ29sbGFwc2VkOmYsY3Jvc3NIaWRkZW5Db2x1bW5zOmgsaXNIaWRkZW46Xyxpc1Jvb3Q6VCxpc1BsYWNlaG9sZGVyOld9fWZ1bmN0aW9uIEV6KGMsbCxhKXsoZnVuY3Rpb24gU0hlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MihjLGwpe3JldHVybiBmdW5jdGlvbiBNSGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTps'@;
put 'LnZhbHVlfShjLGZvZShjLGwsImdldCIpKX1mdW5jdGlvbiBYeShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIHhIZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkg'@;
put 'cHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsZm9lKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBmb2UoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5n'@;
put 'ZXQoYyl9Y29uc3QgcG9lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBKZj1uZXcgV2Vha01hcCxWZz1uZXcgV2Vha01hcCxrej1uZXcgV2Vha01hcDtjbGFzcyBFSGV7Y29uc3RydWN0b3IoKXtFeih0aGlzLEpmLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEV6KHRoaXMsVmcse3dyaXRh'@;
put 'YmxlOiEwLHZhbHVlOjB9KSxFeih0aGlzLGt6LHt3cml0YWJsZTohMCx2YWx1ZToxLzB9KX1zZXRDb2x1bW5zTGltaXQobCl7WHkodGhpcyxreixsKX1zZXREYXRhKCl7WHkodGhpcyxKZixmdW5jdGlvbiBDSGUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMV0/YXJndW1lbnRzWzFdOjEvMDtjb25zdCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO0RuKGMsaD0+e2NvbnN0IGY9W107bGV0IF89MDthLnB1c2goZiksRG4oaCxUPT57Y29uc3QgVz14eigpO2lmKHVzKFQpKXtjb25zdHtsYWJlbDpwZSxjb2xzcGFuOndlfT1UO1cubGFiZWw9X2wocGUp'@;
put 'LCJudW1iZXIiPT10eXBlb2Ygd2UmJndlPjEmJihXLmNvbHNwYW49d2UsVy5vcmlnQ29sc3Bhbj13ZSl9ZWxzZSBXLmxhYmVsPV9sKFQpO18rPVcub3JpZ0NvbHNwYW47bGV0IGllPSExO2lmKF8+PWwmJihXLmNvbHNwYW49Vy5vcmlnQ29sc3Bhbi0oXy1sKSxXLm9yaWdDb2xzcGFuPVcuY29s'@;
put 'c3BhbixpZT0hMCksZi5wdXNoKFcpLFcuY29sc3Bhbj4xKWZvcihsZXQgcGU9MDtwZTxXLmNvbHNwYW4tMTtwZSsrKWYucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO3JldHVybiFpZX0pfSk7Y29uc3QgZD1NYXRoLm1heCguLi5jcyhhLGg9PmgubGVuZ3RoKSk7cmV0dXJuIERu'@;
put 'KGEsaD0+e2lmKGgubGVuZ3RoPGQpe2NvbnN0IGY9Y3MobmV3IEFycmF5KGQtaC5sZW5ndGgpLCgpPT54eigpKTtoLnNwbGljZShoLmxlbmd0aCwwLC4uLmYpfX0pLGF9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx3Mih0aGlzLGt6'@;
put 'KSkpLFh5KHRoaXMsVmcsdzIodGhpcyxKZikubGVuZ3RoKX1nZXREYXRhKCl7cmV0dXJuIHcyKHRoaXMsSmYpfW1lcmdlV2l0aChsKXtEbihsLGE9PntsZXR7cm93OmQsY29sOmgsLi4uZn09YTtjb25zdCBfPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MoZCxoKTtudWxsIT09XyYmWGwoXyxmLHBv'@;
put 'ZSl9KX1tYXAobCl7RG4odzIodGhpcyxKZiksYT0+e0RuKGEsZD0+e2NvbnN0IGg9bCh7Li4uZH0pO3VzKGgpJiZYbChkLGgscG9lKX0pfSl9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZDtpZihsPj13Mih0aGlzLFZnKXx8bDwwKXJldHVybiBudWxsO2NvbnN0IGg9dzIodGhpcyxKZilb'@;
put 'bF07cmV0dXJuIGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+'@;
put 'PXcyKHRoaXMsVmcpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj13Mih0aGlzLEpmKVtsXTtsZXQgXz0wO2ZvcihsZXQgVD1hO1Q8Zi5sZW5ndGg7VCsrKXtjb25zdCBXPWZbVF07aWYoVy5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5u'@;
put 'b3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKF8rPVcuY29sc3BhbixoLnB1c2goVyksVy5jb2xzcGFuPjEmJihUKz1XLmNvbHNwYW4tMSksXz09PWQpYnJlYWs7aWYoXz5kKXRocm93IG5ldyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVy'@;
put 'bGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gdzIodGhpcyxWZyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHcyKHRoaXMsVmcpPjA/dzIodGhpcyxKZilbMF0ubGVuZ3RoOjB9Y2xlYXIoKXtYeSh0aGlzLEpmLFtdKSxYeSh0'@;
put 'aGlzLFZnLDApfX1mdW5jdGlvbiBBeihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24ga0hlKGMpe3ZhciBsPWZ1bmN0aW9uIEFIZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh'@;
put 'ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o'@;
put 'Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IF9vZT1uZXcgTWFw'@;
put 'KFtbIkRGLXByZS1vcmRlciIsZnVuY3Rpb24gZ29lKGMsbCl7bGV0IGE9Yy5jYWxsKGwsdGhpcyk7Zm9yKGxldCBkPTA7ZDx0aGlzLmNoaWxkcy5sZW5ndGg7ZCsrKXtpZighMT09PWEpcmV0dXJuITE7YT1nb2UuY2FsbCh0aGlzLmNoaWxkc1tkXSxjLGwpfXJldHVybiBhfV0sWyJERi1wb3N0'@;
put 'LW9yZGVyIixmdW5jdGlvbiBtb2UoYyxsKXtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRzLmxlbmd0aDthKyspaWYoITE9PT1tb2UuY2FsbCh0aGlzLmNoaWxkc1thXSxjLGwpKXJldHVybiExO3JldHVybiBjLmNhbGwobCx0aGlzKX1dLFsiQkYiLGZ1bmN0aW9uIElIZShjLGwpe2NvbnN0IGE9'@;
put 'W3RoaXNdOyFmdW5jdGlvbiBkKCl7aWYoMD09PWEubGVuZ3RoKXJldHVybjtjb25zdCBoPWEuc2hpZnQoKTthLnB1c2goLi4uaC5jaGlsZHMpLCExIT09Yy5jYWxsKGwsaCkmJmQoKX0oKX1dXSk7Y2xhc3MgSEF7Y29uc3RydWN0b3IobCl7QXoodGhpcywiZGF0YSIse30pLEF6KHRoaXMsInBh'@;
put 'cmVudCIsbnVsbCksQXoodGhpcywiY2hpbGRzIixbXSksdGhpcy5kYXRhPWx9YWRkQ2hpbGQobCl7bC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcy5wdXNoKGwpfWNsb25lVHJlZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0'@;
put 'aGlzO2NvbnN0IGE9bmV3IEhBKHsuLi5sLmRhdGF9KTtmb3IobGV0IGQ9MDtkPGwuY2hpbGRzLmxlbmd0aDtkKyspYS5hZGRDaGlsZCh0aGlzLmNsb25lVHJlZShsLmNoaWxkc1tkXSkpO3JldHVybiBhfXJlcGxhY2VUcmVlV2l0aChsKXt0aGlzLmRhdGE9ey4uLmwuZGF0YX0sdGhpcy5jaGls'@;
put 'ZHM9W107Zm9yKGxldCBhPTA7YTxsLmNoaWxkcy5sZW5ndGg7YSsrKXRoaXMuYWRkQ2hpbGQobC5jaGlsZHNbYV0pfXdhbGtEb3duKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiQkYiO2lmKCFfb2UuaGFzKGEpKXRocm93'@;
put 'IG5ldyBFcnJvcihgVHJhdmVyc2FsIHN0cmF0ZWd5ICIke2F9IiBkb2VzIG5vdCBleGlzdGApO19vZS5nZXQoYSkuY2FsbCh0aGlzLGwsdGhpcyl9d2Fsa1VwKGwpe2NvbnN0IGE9dGhpcyxkPWg9PnshMSE9PWwuY2FsbChhLGgpJiZudWxsIT09aC5wYXJlbnQmJmQoaC5wYXJlbnQpfTtkKHRo'@;
put 'aXMpfX1mdW5jdGlvbiBUeihjLGwsYSl7KGZ1bmN0aW9uIFJIZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rp'@;
put 'b24gS3UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gT0hlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxib2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gYm9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHBy'@;
put 'aXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBINz1uZXcgV2Vha01hcCxCZz1uZXcgV2Vha01hcCxONz1uZXcgV2Vha01hcDtjbGFzcyBISGV7Y29uc3RydWN0b3IobCl7VHoodGhpcyxINyx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLFR6KHRo'@;
put 'aXMsQmcse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxUeih0aGlzLE43LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZnVuY3Rpb24gUEhlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gRkhlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxib2UoYyxsLCJzZXQiKSxhKSxhfSh0aGlzLE43LGwpfWdldFJvb3RzKCl7cmV0dXJuIEFycmF5LmZyb20oS3UodGhpcyxINykudmFsdWVzKCkpfWdldFJv'@;
put 'b3RCeUNvbHVtbihsKXtsZXQgYTtyZXR1cm4gS3UodGhpcyxCZykuaGFzKGwpJiYoYT1LdSh0aGlzLEg3KS5nZXQoS3UodGhpcyxCZykuZ2V0KGwpKSksYX1nZXROb2RlKGwsYSl7Y29uc3QgZD10aGlzLmdldFJvb3RCeUNvbHVtbihhKTtpZighZClyZXR1cm47Y29uc3QgaD1hLUt1KHRoaXMs'@;
put 'QmcpLmdldChhKTtsZXQgXyxmPTA7cmV0dXJuIGQud2Fsa0Rvd24oVD0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOlcsaGVhZGVyTGV2ZWw6aWV9fT1UO2lmKGw9PT1pZSl7aWYoaD49ZiYmaDw9ZitXLTEpcmV0dXJuIF89VCxfLmRhdGEuaXNSb290PWE9PT1fLmRhdGEuY29sdW1uSW5kZXgs'@;
put 'ITE7Zis9V319KSxffXJlYnVpbGRUcmVlSW5kZXgoKXtsZXQgbD0wO0t1KHRoaXMsQmcpLmNsZWFyKCksRG4oS3UodGhpcyxINyksYT0+e2xldFsse2RhdGE6e2NvbHNwYW46ZH19XT1hO2ZvcihsZXQgaD1sO2g8bCtkO2grKylLdSh0aGlzLEJnKS5zZXQoaCxsKTtsKz1kfSl9YnVpbGRUcmVl'@;
put 'KCl7dGhpcy5jbGVhcigpO2NvbnN0IGw9S3UodGhpcyxONykuZ2V0Q29sdW1uc0NvdW50KCk7bGV0IGE9MDtmb3IoO2E8bDspe2NvbnN0IGQ9S3UodGhpcyxONykuZ2V0SGVhZGVyU2V0dGluZ3MoMCxhKSxoPW5ldyBIQTtLdSh0aGlzLEg3KS5zZXQoYSxoKSx0aGlzLmJ1aWxkTGVhdmVzKGgs'@;
put 'YSwwLGQub3JpZ0NvbHNwYW4pLGErPWQub3JpZ0NvbHNwYW59dGhpcy5yZWJ1aWxkVHJlZUluZGV4KCl9YnVpbGRMZWF2ZXMobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXToxO2NvbnN0IGY9S3UodGhpcyxONykuZ2V0'@;
put 'SGVhZGVyc1NldHRpbmdzKGQsYSxoKTtkKz0xLERuKGYsXz0+e2NvbnN0IFQ9ey4uLl8saGVhZGVyTGV2ZWw6ZC0xLGNvbHVtbkluZGV4OmF9O2xldCBXOzE9PT1kPyhsLmRhdGE9VCxXPWwpOihXPW5ldyBIQShUKSxsLmFkZENoaWxkKFcpKSxkPEt1KHRoaXMsTjcpLmdldExheWVyc0NvdW50'@;
put 'KCkmJnRoaXMuYnVpbGRMZWF2ZXMoVyxhLGQsXy5vcmlnQ29sc3BhbiksYSs9Xy5vcmlnQ29sc3Bhbn0pfWNsZWFyKCl7S3UodGhpcyxINykuY2xlYXIoKSxLdSh0aGlzLEJnKS5jbGVhcigpfX1mdW5jdGlvbiB5b2UoYyxsKXtjLndhbGtEb3duKGE9PntsZXR7ZGF0YTpkLGNoaWxkczpofT1h'@;
put 'O2lmKCFkLmlzSGlkZGVuJiYobChkLmNvbHVtbkluZGV4KSwwPT09aC5sZW5ndGgpKWZvcihsZXQgZj0xO2Y8ZC5jb2xzcGFuO2YrKylsKGQuY29sdW1uSW5kZXgrZil9KX1mdW5jdGlvbiBOQShjLGwpe2xldHtjaGlsZHM6YX09YztpZigwIT09YS5sZW5ndGgpcmV0dXJuIGFbMF0uZGF0YVts'@;
put 'XX1mdW5jdGlvbiBWQShjKXtyZXR1cm4gTkEoYywib3JpZ0NvbHNwYW4iKT09PWMuZGF0YS5vcmlnQ29sc3Bhbn1mdW5jdGlvbiBEeihjKXtjb25zdHtkYXRhOmwsY2hpbGRzOmF9PWM7aWYoIWwuaXNDb2xsYXBzZWR8fGwuaXNIaWRkZW58fGwub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxi'@;
put 'YWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihWQShjKSlyZXR1cm4gRHooYVswXSk7bC5pc0NvbGxhcHNlZD0hMTtjb25zdCBoPWEuc2xpY2UoMSksZj1uZXcgU2V0O2xldCBfPTA7aWYoaC5sZW5ndGg+MClEbihoLFQ9'@;
put 'PntULnJlcGxhY2VUcmVlV2l0aChULmRhdGEuY2xvbmVkVHJlZSksVC5kYXRhLmNsb25lZFRyZWU9bnVsbCxfKz1ULmRhdGEuY29sc3Bhbix5b2UoVCxpZT0+e2YuYWRkKGllKX0pfSk7ZWxzZXtjb25zdHtjb2xzcGFuOlQsb3JpZ0NvbHNwYW46Vyxjb2x1bW5JbmRleDppZX09bDtfPVctVDtm'@;
put 'b3IobGV0IHBlPTE7cGU8VztwZSsrKWYuYWRkKGllK3BlKX1yZXR1cm4gYy53YWxrVXAoVD0+e2NvbnN0e2RhdGE6V309VDtXLmNvbHNwYW4rPV8sVy5jb2xzcGFuPj1XLm9yaWdDb2xzcGFuPyhXLmNvbHNwYW49Vy5vcmlnQ29sc3BhbixXLmlzQ29sbGFwc2VkPSExKTpWQShUKSYmKFcuaXND'@;
put 'b2xsYXBzZWQ9TkEoVCwiaXNDb2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pkl6KGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKGYpLGNvbHNwYW5Db21wZW5zYXRpb246X319ZnVuY3Rpb24gSXooYyl7dmFyIGw7Y29uc3R7ZGF0YTphLGNoaWxkczpkfT1jO2lm'@;
put 'KGEuaXNDb2xsYXBzZWR8fGEuaXNIaWRkZW58fGEub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihWQShjKSlyZXR1cm4gSXooZFswXSk7YS5pc0NvbGxhcHNlZD0hMDtj'@;
put 'b25zdCBmPWQuc2xpY2UoMSksXz1uZXcgU2V0O2lmKGYubGVuZ3RoPjApRG4oZixXPT57eW9lKFcsaWU9PntfLmFkZChpZSl9KSxXLmRhdGEuY2xvbmVkVHJlZT1XLmNsb25lVHJlZSgpLFcud2Fsa0Rvd24oaWU9PntsZXR7ZGF0YTpwZX09aWU7cGUuaXNIaWRkZW49ITB9KX0pO2Vsc2V7Y29u'@;
put 'c3R7b3JpZ0NvbHNwYW46Vyxjb2x1bW5JbmRleDppZX09YTtmb3IobGV0IHBlPTE7cGU8VztwZSsrKV8uYWRkKGllK3BlKX1jb25zdCBUPWEuY29sc3Bhbi0obnVsbCE9PShsPU5BKGMsImNvbHNwYW4iKSkmJnZvaWQgMCE9PWw/bDoxKTtyZXR1cm4gYy53YWxrVXAoVz0+e2NvbnN0e2RhdGE6'@;
put 'aWV9PVc7aWUuY29sc3Bhbi09VCxpZS5jb2xzcGFuPD0xPyhpZS5jb2xzcGFuPTEsaWUuaXNDb2xsYXBzZWQ9ITApOlZBKFcpJiYoaWUuaXNDb2xsYXBzZWQ9TkEoVywiaXNDb2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9PkR6KGMpLGFmZmVjdGVkQ29sdW1uczpBcnJh'@;
put 'eS5mcm9tKF8pLGNvbHNwYW5Db21wZW5zYXRpb246VH19Y29uc3Qgd29lPW5ldyBNYXAoW1siY29sbGFwc2UiLEl6XSxbImV4cGFuZCIsRHpdLFsiaGlkZS1jb2x1bW4iLGZ1bmN0aW9uIE5IZShjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3Nl'@;
put 'ZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoQWFgVGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwg'@;
put 'dGhlIGhpZGUgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKGEuaW5jbHVkZXMobCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJl'@;
put 'dHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMucHVzaChsKSxmLmNvbHNwYW4+MT9mLmNvbHNwYW4tPTE6Zi5pc0hpZGRlbj0hMH0pfV0sWyJzaG93LWNvbHVtbiIsZnVuY3Rpb24gVkhlKGMsbCl7aWYoIU51bWJlci5p'@;
put 'c0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihBYWBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24g'@;
put 'dGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgc2hvdyBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoIWEuaW5jbHVkZXMobCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9'@;
put 'Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJldHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMuc3BsaWNlKGYuY3Jvc3NIaWRkZW5Db2x1bW5zLmluZGV4T2YobCksMSksIWYuaXNIaWRkZW4mJmYu'@;
put 'Y29sc3BhbjxmLm9yaWdDb2xzcGFuJiYoZi5jb2xzcGFuKz0xKSxmLmlzSGlkZGVuPSExfSl9XV0pO2Z1bmN0aW9uIEJBKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+e2Eud2Fsa0Rvd24oZD0+e2NvbnN0IGg9ZC5kYXRhLHtvcmlnQ29sc3BhbjpmLGNvbHVtbkluZGV4Ol8saGVhZGVy'@;
put 'TGV2ZWw6VCxjcm9zc0hpZGRlbkNvbHVtbnM6V309aCxpZT1mdW5jdGlvbiB6SGUoYyxsKXtsZXQgYTtyZXR1cm4gQXJyYXkuaXNBcnJheShjW2xdKT9hPWNbbF06KGE9W10sY1tsXT1hKSxhfShsLFQpO2xldCBwZT0hMTtmb3IobGV0IHdlPV87d2U8XytmO3dlKyspaWYoVy5pbmNsdWRlcyh3'@;
put 'ZSl8fHBlKWllLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtlbHNle2NvbnN0IFplPWpIZShoKTtaZS5pc1Jvb3Q9ITAsaWUucHVzaChaZSkscGU9ITB9fSl9KSxsfWZ1bmN0aW9uIGpIZShjKXtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6bCwuLi5hfT14eihjKTtyZXR1cm4g'@;
put 'YX1mdW5jdGlvbiBMeihjLGwsYSl7KGZ1bmN0aW9uIFVIZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24g'@;
put 'SnkoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBaSGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLENvZShj'@;
put 'LGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gVGwoYyxsKXtyZXR1cm4gZnVuY3Rpb24gWUhlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxDb2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gQ29lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'YXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBFaD1uZXcgV2Vha01hcCxDMT1uZXcgV2Vha01hcCxqZz1uZXcgV2Vha01hcDtjbGFzcyBXSGV7Y29uc3RydWN0b3IoKXtMeih0aGlzLEVoLHt3cml0YWJsZTohMCx2'@;
put 'YWx1ZTpuZXcgRUhlfSksTHoodGhpcyxDMSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEhIZShUbCh0aGlzLEVoKSl9KSxMeih0aGlzLGpnLHt3cml0YWJsZTohMCx2YWx1ZTpbW11dfSl9c2V0U3RhdGUobCl7VGwodGhpcyxFaCkuc2V0RGF0YShsKTtsZXQgYT0hMTt0cnl7VGwodGhpcyxDMSku'@;
put 'YnVpbGRUcmVlKCl9Y2F0Y2h7VGwodGhpcyxDMSkuY2xlYXIoKSxUbCh0aGlzLEVoKS5jbGVhcigpLGE9ITB9cmV0dXJuIEp5KHRoaXMsamcsQkEoVGwodGhpcyxDMSkuZ2V0Um9vdHMoKSkpLGF9c2V0Q29sdW1uc0xpbWl0KGwpe1RsKHRoaXMsRWgpLnNldENvbHVtbnNMaW1pdChsKX1tZXJn'@;
put 'ZVN0YXRlV2l0aChsKXtjb25zdCBhPWNzKGwsZD0+e2xldHtyb3c6aCwuLi5mfT1kO3JldHVybntyb3c6aDwwP3RoaXMucm93Q29vcmRzVG9MZXZlbChoKTpoLC4uLmZ9fSk7VGwodGhpcyxFaCkubWVyZ2VXaXRoKGEpLFRsKHRoaXMsQzEpLmJ1aWxkVHJlZSgpLEp5KHRoaXMsamcsQkEoVGwo'@;
put 'dGhpcyxDMSkuZ2V0Um9vdHMoKSkpfW1hcFN0YXRlKGwpe1RsKHRoaXMsRWgpLm1hcChsKSxUbCh0aGlzLEMxKS5idWlsZFRyZWUoKSxKeSh0aGlzLGpnLEJBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKX1tYXBOb2RlcyhsKXtyZXR1cm4gQWwoVGwodGhpcyxDMSkuZ2V0Um9vdHMoKSwoYSxk'@;
put 'KT0+KGQud2Fsa0Rvd24oaD0+e2NvbnN0IGY9bChoLmRhdGEpO3ZvaWQgMCE9PWYmJmEucHVzaChmKX0pLGEpLFtdKX10cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLGEsZCl7YTwwJiYoYT10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoYSkpO2NvbnN0IGg9VGwodGhpcyxDMSkuZ2V0Tm9kZShhLGQp'@;
put 'O2xldCBmO3JldHVybiBoJiYoZj1mdW5jdGlvbiBCSGUoYyxsLGEpe2lmKCF3b2UuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIG5vZGUgbW9kaWZpZXIgYWN0aW9uICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiB3b2UuZ2V0KGMpKGwsYSl9KGwsaCxkKSxKeSh0aGlzLGpn'@;
put 'LEJBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKSksZn10cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGwsYSl7cmV0dXJuIHRoaXMudHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCwtMSxhKX1yb3dDb29yZHNUb0xldmVsKGwpe2lmKGw+PTApcmV0dXJuIG51bGw7Y29uc3QgYT1sK01hdGgubWF4'@;
put 'KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYTwwP251bGw6YX1sZXZlbFRvUm93Q29vcmRzKGwpe2lmKGw8MClyZXR1cm4gbnVsbDtjb25zdCBhPWwtTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPj0wP251bGw6YX1nZXRIZWFkZXJTZXR0aW5ncyhs'@;
put 'LGEpe3ZhciBkLGg7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xldmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6bnVsbCE9PShkPW51bGw9PT0oaD1UbCh0aGlzLGpnKVtsXSl8fHZvaWQgMD09PWg/dm9pZCAwOmhbYV0pJiZ2b2lkIDAhPT1k'@;
put 'P2Q6bnVsbH1nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxhKXtpZihsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKSlyZXR1cm4gbnVsbDtjb25zdCBkPVRsKHRoaXMsQzEpLmdldE5vZGUobCxhKTtyZXR1cm4gZD97Li4u'@;
put 'ZC5kYXRhfTpudWxsfWZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omh9PW51bGwhPT0oZD10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMH07aWYoaClyZXR1cm4gYTtsZXQgZj1hLTE7Zm9yKDtmPj0wOyl7'@;
put 'dmFyIF87Y29uc3R7aXNSb290OlR9PW51bGwhPT0oXz10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsZikpJiZ2b2lkIDAhPT1fP186e2lzUm9vdDohMH07aWYoVClicmVhaztmLT0xfXJldHVybiBmfWdldExheWVyc0NvdW50KCl7cmV0dXJuIFRsKHRoaXMsRWgpLmdldExheWVyc0NvdW50KCl9'@;
put 'Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIFRsKHRoaXMsRWgpLmdldENvbHVtbnNDb3VudCgpfWNsZWFyKCl7SnkodGhpcyxqZyxbXSksVGwodGhpcyxFaCkuY2xlYXIoKSxUbCh0aGlzLEMxKS5jbGVhcigpfX1mdW5jdGlvbiBReShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gR0hlKGMpe3Zh'@;
put 'ciBsPWZ1bmN0aW9uICRIZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGlu'@;
put 'IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFNvZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gWEhlKGMpe3ZhciBsPWZ1bmN0aW9uIEpIZShjLGwpe2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs'@;
put 'bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIE1vZShjLGwsYSl7KGZ1bmN0aW9uIFFIZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy'@;
put 'aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gakEoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBlTmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'ImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHhvZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gU2woYyxsKXtyZXR1cm4gZnVuY3Rpb24gdE5lKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyx4b2UoYyxs'@;
put 'LCJnZXQiKSl9ZnVuY3Rpb24geG9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IEVvZT0ibmVzdGVkSGVhZGVycyI7dmFyIFFsPW5l'@;
put 'dyBXZWFrTWFwLHM0PW5ldyBXZWFrTWFwO2NsYXNzIHJOZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxNb2UodGhpcyxRbCx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFdIZX0pLE1vZSh0aGlzLHM0LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksU29lKHRo'@;
put 'aXMsImdob3N0VGFibGUiLG5ldyBjbGFzcyBxSGV7Y29uc3RydWN0b3IobCxhKXtReSh0aGlzLCJob3QiLHZvaWQgMCksUXkodGhpcywibmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIiLHZvaWQgMCksUXkodGhpcywibGF5ZXJzQ291bnQiLDApLFF5KHRoaXMsImNvbnRhaW5lciIsdm9pZCAw'@;
put 'KSxReSh0aGlzLCJ3aWR0aHNNYXAiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyPWEsdGhpcy53aWR0aHNNYXA9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgibmVzdGVkSGVhZGVycy53aWR0aHNN'@;
put 'YXAiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpfXNldExheWVyc0NvdW50KGwpe3JldHVybiB0aGlzLmxheWVyc0NvdW50PWwsdGhpc31nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53aWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfWJ1aWxkV2lk'@;
put 'dGhzTWFwKCl7dGhpcy5jb250YWluZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhhbmRzb250YWJsZSIsImh0R2hvc3RUYWJsZSIsImh0QXV0b1NpemUiKSx0aGlzLl9idWlsZEdob3N0VGFibGUodGhp'@;
put 'cy5jb250YWluZXIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtjb25zdCBsPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoInRyOmxhc3Qtb2YtdHlwZSB0aCIpLGE9bC5sZW5ndGg7dGhpcy53aWR0aHNNYXAuY2xlYXIoKTtm'@;
put 'b3IobGV0IGQ9MDtkPGE7ZCsrKXtjb25zdCBoPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGgpO3RoaXMud2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChmLGxbZF0ub2Zmc2V0V2lk'@;
put 'dGgpfXRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGx9X2J1aWxkR2hvc3RUYWJsZShsKXtjb25zdHtyb290RG9jdW1lbnQ6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT10aGlzLmhvdCxoPWEuY3JlYXRlRG9jdW1l'@;
put 'bnRGcmFnbWVudCgpLGY9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLF89ISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxUPWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTtmb3IobGV0IFc9MDtXPHRoaXMubGF5ZXJzQ291bnQ7VysrKXtjb25zdCBpZT1hLmNyZWF0'@;
put 'ZUVsZW1lbnQoInRyIik7Zm9yKGxldCBwZT0wO3BlPFQ7cGUrKyl7bGV0IHdlPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChwZSk7bnVsbD09PXdlJiYod2U9cGUpO2NvbnN0IEVlPWEuY3JlYXRlRWxlbWVudCgidGgiKSxaZT10aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVy'@;
put 'KFcsd2UpO2lmKFplJiYoIVplLmlzUGxhY2Vob2xkZXJ8fFplLmlzSGlkZGVuKSl7bGV0IGl0PVplLmxhYmVsO18mJihpdCs9JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0dG9uPicpLGdnKEVlLGl0KSxFZS5jb2xTcGFuPVplLmNvbHNwYW4saWUuYXBwZW5kQ2hpbGQoRWUpfX1m'@;
put 'LmFwcGVuZENoaWxkKGllKX1oLmFwcGVuZENoaWxkKGYpLGwuYXBwZW5kQ2hpbGQoaCl9Y2xlYXIoKXt0aGlzLndpZHRoc01hcC5jbGVhcigpLHRoaXMuY29udGFpbmVyPW51bGx9fSh0aGlzLmhvdCwobCxhKT0+dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSksU29lKHRoaXMsImRldGVj'@;
put 'dGVkT3ZlcmxhcHBlZEhlYWRlcnMiLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gRW9lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI4MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbRW9lXX1lbmFibGVQbHVnaW4oKXt2'@;
put 'YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyghQXJyYXkuaXNBcnJheShhKXx8IUFycmF5LmlzQXJyYXkoYVswXSkpJiZHYShBYWBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBjb25maWd1cmF0'@;
put 'aW9uIGlzIGludmFsaWQuIFRoZSBzZXR0aW5ncyBoYXMgdG8gYmVceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBhcnJheXMgZS5xLiBbWydBMScsIHsgbGFiZWw6ICdBMicsIGNvbHNwYW46IDIgfV1dYCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+'@;
put 'dGhpcy5vbkluaXQoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNl'@;
put 'bGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlck9uQ2VsbE1vdXNlRG93biguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZU92ZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGQ9PnRoaXMub25BZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyhkKSksdGhpcy5hZGRIb29rKCJtb2RpZnlD'@;
put 'b2xXaWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUNvbFdpZHRoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKX0pLHRo'@;
put 'aXMuYWRkSG9vaygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvcHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZv'@;
put 'cmVDb3B5KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSxzdXBlci5lbmFibGVQ'@;
put 'bHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7U2wodGhpcyxRbCkuc2V0Q29sdW1uc0xpbWl0KHRoaXMuaG90LmNvdW50Q29scygpKSxB'@;
put 'cnJheS5pc0FycmF5KGwpJiYodGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzPVNsKHRoaXMsUWwpLnNldFN0YXRlKGwpKSx0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMmJkdhKEFhYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIHNldHVwIGNvbnRhaW5zIG92ZXJsYXBwaW5n'@;
put 'IGhlYWRlcnMuIFRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5gKSx0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdl'@;
put 'ZFZhbHVlcygpLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPSEwPT09YT8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7U2wodGhpcyxRbCkudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihoLGQpfSksIVNsKHRoaXMsczQpJiZ0aGlzLmVuYWJsZWQmJmpBKHRoaXMsczQsdGhpcy5ob3QuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIuY3JlYXRlQ2hhbmdlc09ic2VydmVyKCJoaWRpbmciKS5zdWJzY3JpYmUoYT0+e2EuZm9yRWFjaChkPT57bGV0e29wOmgsaW5kZXg6ZixuZXdWYWx1ZTpffT1kO2lmKCJyZXBsYWNlIj09PWgpe2NvbnN0IFQ9ITA9PT1fPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1u'@;
put 'IjtTbCh0aGlzLFFsKS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKFQsZil9fSksdGhpcy5naG9zdFRhYmxlLmJ1aWxkV2lkdGhzTWFwKCl9KSksdGhpcy5naG9zdFRhYmxlLnNldExheWVyc0NvdW50KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkuYnVpbGRXaWR0aHNNYXAoKSxzdXBlci51cGRh'@;
put 'dGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbHNwYW5zKCksU2wodGhpcyxRbCkuY2xlYXIoKSxTbCh0aGlzLHM0KS51bnN1YnNjcmliZSgpLGpBKHRoaXMsczQsbnVsbCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFN0YXRl'@;
put 'TWFuYWdlcigpe3JldHVybiBTbCh0aGlzLFFsKX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBTbCh0aGlzLFFsKS5nZXRMYXllcnNDb3VudCgpfWdldEhlYWRlclNldHRpbmdzKGwsYSl7cmV0dXJuIFNsKHRoaXMsUWwpLmdldEhlYWRlclNldHRpbmdzKGwsYSl9Y2xlYXJDb2xzcGFucygpe2lm'@;
put 'KCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtfd3Q6bH09dGhpcy5ob3QudmlldyxhPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxkPWwud3RUYWJsZS5USEVBRCxoPWwud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsZj1sLnd0T3Zlcmxh'@;
put 'eXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P2wud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsO2ZvcihsZXQgXz0wO188YTtfKyspe2NvbnN0IFQ9ZC5jaGlsZE5vZGVzW19dO2lmKCFUKWJyZWFrO2NvbnN0IFc9aC5j'@;
put 'aGlsZE5vZGVzW19dLGllPWY/Zi5jaGlsZE5vZGVzW19dOm51bGw7Zm9yKGxldCBwZT0wLHdlPVQuY2hpbGROb2Rlcy5sZW5ndGg7cGU8d2U7cGUrKylULmNoaWxkTm9kZXNbcGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKFQuY2hpbGROb2Rlc1twZV0sImhpZGRlbkhlYWRlciIp'@;
put 'LFcmJlcuY2hpbGROb2Rlc1twZV0mJihXLmNoaWxkTm9kZXNbcGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKFcuY2hpbGROb2Rlc1twZV0sImhpZGRlbkhlYWRlciIpKSxmJiZpZSYmaWUuY2hpbGROb2Rlc1twZV0mJihpZS5jaGlsZE5vZGVzW3BlXS5yZW1vdmVBdHRyaWJ1dGUo'@;
put 'ImNvbHNwYW4iKSxXbyhpZS5jaGlsZE5vZGVzW3BlXSwiaGlkZGVuSGVhZGVyIikpfX1oZWFkZXJSZW5kZXJlckZhY3RvcnkobCl7dmFyIGE9dGhpcztjb25zdCBkPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7cmV0dXJuKGgsZik9Pnt2YXIgXztj'@;
put 'b25zdHtjb2x1bW5JbmRleE1hcHBlcjpULHZpZXc6V309dGhpcy5ob3Q7bGV0IGllPVQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKTtudWxsPT09aWUmJihpZT1oKSxmLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKGYsImhpZGRlbkhlYWRlciIpO2NvbnN0e2NvbHNwYW46'@;
put 'cGUsaXNIaWRkZW46d2UsaXNQbGFjZWhvbGRlcjpFZX09bnVsbCE9PShfPVNsKHRoaXMsUWwpLmdldEhlYWRlclNldHRpbmdzKGwsaWUpKSYmdm9pZCAwIT09Xz9fOntsYWJlbDoiIn07aWYoRWV8fHdlKXBpKGYsImhpZGRlbkhlYWRlciIpO2Vsc2UgaWYocGU+MSl7dmFyIFplLGl0O2NvbnN0'@;
put 'e3d0T3ZlcmxheXM6ZXR9PVcuX3d0LHl0PW51bGw9PT0oWmU9ZXQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KXx8dm9pZCAwPT09WmU/dm9pZCAwOlplLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksRXQ9bnVsbD09PShpdD1ldC5pbmxpbmVTdGFydE92ZXJsYXkpfHx2b2lk'@;
put 'IDA9PT1pdD92b2lkIDA6aXQuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhmKSxTdD15dHx8RXQ/TWF0aC5taW4ocGUsZC1oKTpwZTtTdD4xJiZmLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsU3QpfXRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGllLGYsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gYS5nZXRDb2x1bW5IZWFkZXJWYWx1ZSguLi5hcmd1bWVudHMpfSxsKX19Z2V0Q29sdW1uSGVhZGVyVmFsdWUobCxhKXt2YXIgZDtjb25zdHtpc0hpZGRlbjpoLGlzUGxhY2Vob2xkZXI6Zn09bnVsbCE9PShkPVNsKHRoaXMsUWwpLmdldEhlYWRlclNldHRpbmdzKGEsbCkpJiZ2b2lkIDAh'@;
put 'PT1kP2Q6e307cmV0dXJuIGZ8fGg/IiI6dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwsYSl9b25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIobCxhLGQpe2NvbnN0IGg9U2wodGhpcyxRbCkuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsbCk7aWYoIWgpcmV0dXJuIGw7Y29uc3R7Y2xhc3NO'@;
put 'YW1lczpmLGNvbHVtbkN1cnNvcjpfLHNlbGVjdGlvblR5cGU6VCxzZWxlY3Rpb25XaWR0aDpXfT1kLHtpc1Jvb3Q6aWUsY29sc3BhbjpwZX09U2wodGhpcyxRbCkuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKTtpZihUPT09eXkpe2lmKCFpZSlyZXR1cm4gaC5jb2x1bW5JbmRleH1lbHNlIFQ9PT1Q'@;
put 'ayYmKHBlPlctX3x8IWllKSYmKGYubGVuZ3RoPTApO3JldHVybiBsfW9uQmVmb3JlQ29weShsLGEsZCl7bGV0e2NvbHVtbkhlYWRlcnNDb3VudDpofT1kO2lmKDAhPT1oKWZvcihsZXQgXz0wO188YS5sZW5ndGg7XysrKXtjb25zdHtzdGFydFJvdzpULHN0YXJ0Q29sOlcsZW5kUm93OmllLGVu'@;
put 'ZENvbDpwZX09YVtfXSx3ZT1pZS1UKzE7aWYoVD49MHx8MT09Vy1wZSsxKWJyZWFrO2ZvcihsZXQgWmU9VztaZTw9cGU7WmUrKylmb3IobGV0IGl0PVQ7aXQ8PWllO2l0Kyspe3ZhciBmO2NvbnN0IGV0PXdlK2l0LHl0PVplLVc7MCE9PXl0JiYhMT09PShudWxsPT09KGY9U2wodGhpcyxRbCku'@;
put 'Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGl0LFplKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuaXNSb290KSYmKGxbZXRdW3l0XT0iIil9fX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCxoKXt0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKSYmKGguY29sdW1uPSEwKX1v'@;
put 'bkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7Y29uc3QgZD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKTtpZighZClyZXR1cm47Y29uc3R7c2VsZWN0aW9uOmh9PXRoaXMuaG90LGY9aC5pc1NlbGVjdGVkKCk/aC5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51'@;
put 'bGwsXz1bXSx7Y29sdW1uSW5kZXg6VCxvcmlnQ29sc3BhbjpXfT1kLGllPSFoLmluSW5TZWxlY3Rpb24oYSk7bC5zaGlmdEtleSYmZj9hLmNvbDxmLmZyb20uY29sP18ucHVzaChmLmdldFRvcEVuZENvcm5lcigpLmNvbCxULGEucm93KTpfLnB1c2goYS5jb2w+Zi5mcm9tLmNvbD9mLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCkuY29sOlQsVCtXLTEsYS5yb3cpOihmayhsKXx8VXAobCkmJmllKSYmXy5wdXNoKFQsVCtXLTEsYS5yb3cpLGguc2VsZWN0Q29sdW1ucyguLi5fKX1vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcihsLGEsZCxoKXtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpKXJl'@;
put 'dHVybjtjb25zdCBmPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGEpO2lmKCFmKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDpfLG9yaWdDb2xzcGFuOlR9PWYsVz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGllPVcuZ2V0VG9wU3RhcnRDb3JuZXIoKSxwZT1X'@;
put 'LmdldEJvdHRvbUVuZENvcm5lcigpLHtmcm9tOndlfT1XO2guY29sdW1uPSEwLGguY2VsbD0hMDtjb25zdCBFZT1bXTthLmNvbDx3ZS5jb2w/RWUucHVzaChwZS5jb2wsXyk6RWUucHVzaChhLmNvbD53ZS5jb2w/aWUuY29sOl8sXytULTEpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoLi4uRWUp'@;
put 'fW9uQWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMobCl7bC5sZW5ndGg9MDtmb3IobGV0IGE9MDthPFNsKHRoaXMsUWwpLmdldExheWVyc0NvdW50KCk7YSsrKWwucHVzaCh0aGlzLmhlYWRlclJlbmRlcmVyRmFjdG9yeShhKSl9b25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92'@;
put 'ZXJyaWRlKGwpe2NvbnN0IGE9U2wodGhpcyxRbCkuZ2V0TGF5ZXJzQ291bnQoKTtsZXQgZD1sLnN0YXJ0Q29sdW1uLGg9ISFhO2ZvcihsZXQgZj0wO2Y8YTtmKyspe2NvbnN0IF89U2wodGhpcyxRbCkuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoZixsLnN0YXJ0Q29sdW1uKSxUPXRoaXMuaG90'@;
put 'LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoXyk7aWYoXz49MCYmKGg9ITEpLEd1KFQpJiZUPGwuc3RhcnRDb2x1bW4pe2Q9VDticmVha319bC5zdGFydENvbHVtbj1oP1NsKHRoaXMsUWwpLmdldEhlYWRlclRyZWVOb2RlRGF0YSgwLGQpLmNvbHVtbklu'@;
put 'ZGV4OmR9b25Nb2RpZnlDb2xXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5naG9zdFRhYmxlLmdldFdpZHRoKGEpO3JldHVybiBsPmQ/bDpkfW9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUobCxhLGQpe3ZhciBoO2NvbnN0e2xhYmVsOmZ9PW51bGwhPT0oaD1TbCh0aGlzLFFsKS5nZXRIZWFkZXJU'@;
put 'cmVlTm9kZURhdGEoZCxhKSkmJnZvaWQgMCE9PWg/aDp7bGFiZWw6IiJ9O3JldHVybiBmfW9uSW5pdCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9b25BZnRlckxvYWREYXRhKGwsYSl7YXx8dGhpcy51cGRhdGVQbHVnaW4oKX1kZXN0cm95KCl7akEodGhpcyxRbCxudWxsKSxudWxsIT09U2wodGhp'@;
put 'cyxzNCkmJihTbCh0aGlzLHM0KS51bnN1YnNjcmliZSgpLGpBKHRoaXMsczQsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkpcmV0dXJuIFNsKHRoaXMsUWwpLmdldEhlYWRlclRyZWVOb2RlRGF0'@;
put 'YShsLnJvdyxsLmNvbCl9fWNvbnN0IFJ6PWNsYXNzIHNOZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG90PWEsdGhpcy5wbHVnaW49bH19O2NsYXNzIFFmIGV4dGVuZHMgUnp7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZl'@;
put 'bHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwiLGVtcHR5SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1'@;
put 'dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1u'@;
put 'dWxsfWFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwoZCksZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCksXz1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJESVYi'@;
put 'KVswXSxUPV8ucXVlcnlTZWxlY3Rvcigic3Bhbi5yb3dIZWFkZXIiKTtpZihEbihfLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzc149Imh0X25lc3RpbmciXScpLGllPT57aWUmJl8ucmVtb3ZlQ2hpbGQoaWUpfSkscGkoYSxRZi5DU1NfQ0xBU1NFUy5pbmRpY2F0b3JDb250YWluZXIpLGgpe2Nv'@;
put 'bnN0e3Jvb3REb2N1bWVudDppZX09dGhpcy5ob3QscGU9VC5jbG9uZU5vZGUoITApO18uaW5uZXJIVE1MPSIiLHZvKDAsaC0xLCgpPT57Y29uc3Qgd2U9aWUuY3JlYXRlRWxlbWVudCgiU1BBTiIpO3BpKHdlLFFmLkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9yKSxfLmFwcGVuZENoaWxkKHdl'@;
put 'KX0pLF8uYXBwZW5kQ2hpbGQocGUpfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikpe2NvbnN0IGllPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtwaShhLFFmLkNTU19DTEFTU0VTLnBhcmVudCksdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRy'@;
put 'ZW5Db2xsYXBzZWQoZCk/cGkoaWUsYCR7UWYuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1FmLkNTU19DTEFTU0VTLmV4cGFuZEJ1dHRvbn1gKTpwaShpZSxgJHtRZi5DU1NfQ0xBU1NFUy5idXR0b259ICR7UWYuQ1NTX0NMQVNTRVMuY29sbGFwc2VCdXR0b259YCksXy5hcHBlbmRDaGlsZChpZSl9'@;
put 'fXVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7YXx8KGE9dGhpcy5kYXRhTWFuYWdlci5jYWNoZS5sZXZlbENvdW50KSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9TWF0aC5tYXgoNTAsMTErMTAqYSsyNSksdGhpcy5ob3QucmVuZGVyKCl9fWNvbnN0IGtvZT1RZixsTmU9Y2xhc3Mg'@;
put 'YU5lIGV4dGVuZHMgUnp7Y29uc3RydWN0b3IobCxhKXt2YXIgZDtzdXBlcihsLGEpLGQ9dGhpcyx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2VkUm93cz1bXSx0aGlzLmNvbGxhcHNlZFJvd3NTdGFzaD17c3Rhc2g6ZnVuY3Rpb24oKXtsZXQg'@;
put 'aD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2QubGFzdENvbGxhcHNlZFJvd3M9ZC5jb2xsYXBzZWRSb3dzLnNsaWNlKDApLGQuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLGgpfSxzaGlmdFN0YXNoOmZ1'@;
put 'bmN0aW9uKGgsZil7bGV0IF89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7bnVsbD09ZiYmKGY9MS8wKSxEbihkLmxhc3RDb2xsYXBzZWRSb3dzLChULFcpPT57VD49aCYmVDxmJiYoZC5sYXN0Q29sbGFwc2VkUm93c1tXXT1UK18pfSl9'@;
put 'LGFwcGx5U3Rhc2g6ZnVuY3Rpb24oKXtkLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pLGQubGFzdENvbGxhcHNlZFJvd3M9dm9pZCAwfSx0cmltU3Rh'@;
put 'c2g6KGgsZik9Pnt2byhoLGgrZi0xLF89Pntjb25zdCBUPXRoaXMubGFzdENvbGxhcHNlZFJvd3MuaW5kZXhPZihfKTtUPi0xJiZ0aGlzLmxhc3RDb2xsYXBzZWRSb3dzLnNwbGljZShULDEpfSl9fX1jb2xsYXBzZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107bGV0IGY9bnVsbCxfPW51bGwsVD1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLF89dGhpcy5kYXRhTWFu'@;
put 'YWdlci5nZXRSb3dJbmRleChmKSk6KGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLF89bCksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmRG4oZi5fX2NoaWxkcmVuLFc9PntoLnB1c2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChXKSl9KSxUPXRoaXMu'@;
put 'Y29sbGFwc2VSb3dzKGgsITAsITEpLGQmJnRoaXMudHJpbVJvd3MoVCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSwtMT09PXRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKF8pJiZ0aGlzLmNvbGxhcHNlZFJvd3MucHVzaChfKSxUfWNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQg'@;
put 'YT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO0RuKGwsZj0+e2gucHVzaCguLi50aGlzLmNvbGxhcHNl'@;
put 'Q2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlUm93KGwpe3RoaXMuY29sbGFwc2VSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1j'@;
put 'b2xsYXBzZVJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gRG4obCxmPT57'@;
put 'aC5wdXNoKGYpLGEmJnRoaXMuY29sbGFwc2VDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksaH1jb2xsYXBzZUNoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVu'@;
put 'Z3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJkRuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLF89Pntjb25zdCBUPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgo'@;
put 'Xyk7YS5wdXNoKFQpLHRoaXMuY29sbGFwc2VDaGlsZFJvd3MoVCxhKX0pLGgmJnRoaXMudHJpbVJvd3MoYSl9ZXhwYW5kUm93KGwpe3RoaXMuZXhwYW5kUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9ZXhwYW5kUm93'@;
put 'cyhsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBEbihsLGY9PntoLnB1c2goZiks'@;
put 'YSYmdGhpcy5leHBhbmRDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxofWV4cGFuZENoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJkRuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLF89PntpZighdGhpcy5pc0FueVBhcmVudENvbGxhcHNlZChfKSl7Y29uc3QgVD10aGlzLmRh'@;
put 'dGFNYW5hZ2VyLmdldFJvd0luZGV4KF8pO2EucHVzaChUKSx0aGlzLmV4cGFuZENoaWxkUm93cyhULGEpfX0pLGgmJnRoaXMudW50cmltUm93cyhhKX1leHBhbmRDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRz'@;
put 'WzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsXz1udWxsLFQ9bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCxfPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpOihmPXRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxfPWwpLHRoaXMuY29sbGFwc2VkUm93cy5zcGxpY2UodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YoXyksMSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmRG4oZi5fX2NoaWxkcmVuLFc9Pntjb25zdCBpZT10aGlzLmRhdGFN'@;
put 'YW5hZ2VyLmdldFJvd0luZGV4KFcpO2gucHVzaChpZSl9KSxUPXRoaXMuZXhwYW5kUm93cyhoLCEwLCExKSxkJiZ0aGlzLnVudHJpbVJvd3MoVCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSxUfWV4cGFuZE11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtEbihsLGY9PntoLnB1c2goLi4udGhpcy5leHBhbmRDaGlsZHJlbihmLCExLCExKSl9KSxkJiZ0'@;
put 'aGlzLnVudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZUFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtEbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmNvbGxhcHNl'@;
put 'TXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfWV4cGFuZEFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtEbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmV4cGFuZE11bHRp'@;
put 'cGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX10cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKX11bnRyaW1Sb3dzKGwpe3RoaXMu'@;
put 'aG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMSl9KX0sITApfWFyZUNoaWxkcmVuQ29sbGFwc2VkKGwpe2xldCBhPWlzTmFOKGwpP2w6dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwp'@;
put 'LGQ9ITA7cmV0dXJuIG51bGw9PT1hJiYoYT17X19jaGlsZHJlbjp0aGlzLmRhdGFNYW5hZ2VyLmRhdGF9KSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGEpJiZEbihhLl9fY2hpbGRyZW4saD0+e2NvbnN0IGY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChoKTtpZighdGhpcy5w'@;
put 'bHVnaW4uY29sbGFwc2VkUm93c01hcC5nZXRWYWx1ZUF0SW5kZXgoZikpcmV0dXJuIGQ9ITEsITF9KSxkfWlzQW55UGFyZW50Q29sbGFwc2VkKGwpe2xldCBhPWw7Zm9yKDtudWxsIT09YTspe2E9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoYSk7Y29uc3QgZD10aGlzLmRhdGFNYW5h'@;
put 'Z2VyLmdldFJvd0luZGV4KGEpO2lmKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKGQpPi0xKXJldHVybiEwfXJldHVybiExfXRvZ2dsZVN0YXRlKGwsYSl7aWYoYS5jb2w+PTApcmV0dXJuO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGEucm93KTtCbyhsLnRhcmdldCxrb2Uu'@;
put 'Q1NTX0NMQVNTRVMuYnV0dG9uKSYmKHRoaXMuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/dGhpcy5leHBhbmRDaGlsZHJlbihkKTp0aGlzLmNvbGxhcHNlQ2hpbGRyZW4oZCksdjIobCkpfXRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCl9dW50'@;
put 'cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1Zpc3VhbFJvdyhsKX1yZW5kZXJBbmRBZGp1c3QoKXt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfX0sQW9lPW5ldyBXZWFrTWFwLHVOZT1jbGFzcyBjTmUgZXh0ZW5kcyBS'@;
put 'entjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksQW9lLnNldCh0aGlzLHtyb3dfYWJvdmU6KGQsaCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoaFtoLmxlbmd0aC0xXS5zdGFydC5yb3csImFib3ZlIil9LHJvd19iZWxvdzooZCxoKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2li'@;
put 'bGluZyhoW2gubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYmVsb3ciKX19KSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyfWFwcGVuZE9wdGlvbnMobCl7Y29uc3QgYT1be2tleToiYWRkX2NoaWxkIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShu'@;
put 'Qil9LGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3codGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pLGg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpO3RoaXMuZGF0YU1hbmFnZXIuYWRkQ2hpbGQoaCl9LGRpc2Fi'@;
put 'bGVkOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7'@;
put 'a2V5OiJkZXRhY2hfZnJvbV9wYXJlbnQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHJCKX0sY2FsbGJhY2s6KCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmRldGFjaEZyb21QYXJlbnQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkpfSxkaXNhYmxlZDooKT0+e2NvbnN0'@;
put 'IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksaD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZFswXSk7cmV0dXJuIXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGgpfHwhZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1u'@;
put 'SGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7bmFtZToiLS0tLS0tLS0tIn1dO3JldHVybiB2bygwLGwuaXRlbXMubGVuZ3RoLTEsZD0+e2lmKDA9PT1kKXJldHVybiBEbihhLChoLGYpPT57bC5pdGVtcy5zcGxpY2UoZCtm'@;
put 'LDAsaCl9KSwhMX0pLHRoaXMubW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKX1tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpe2NvbnN0IGE9QW9lLmdldCh0aGlzKTtyZXR1cm4gdm8oMCxsLml0ZW1zLmxlbmd0aC0xLGQ9Pntjb25zdCBoPWFbbC5pdGVtc1tkXS5rZXldO251bGwhPWgm'@;
put 'JihsLml0ZW1zW2RdLmNhbGxiYWNrPWgpfSksbH19O2NsYXNzIGROZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90LHRoaXMuZGF0YU1hbmFnZXI9bC5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNpbmdVST1sLmNvbGxhcHNpbmdVSX1vbkJlZm9yZVJvd01vdmUo'@;
put 'bCxhLGQsaCl7aWYodGhpcy5kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoe3Jvd3M6bCxmaW5hbEluZGV4OmEsZHJvcEluZGV4OmQsbW92ZVBvc3NpYmxlOmh9KSlyZXR1cm4hMTt0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9ITE7Y29uc3QgXz1kPT09dGhpcy5ob3QuY291bnRSb3dzKCks'@;
put 'VD1fP3RoaXMuaG90LmNvdW50U291cmNlUm93cygpOnRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkKTtsZXQgVz0hMDtjb25zdCBpZT1sLm1hcChpdD0+e2lmKCFXKXJldHVybiExO2NvbnN0IGV0PXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhpdCk7'@;
put 'cmV0dXJuIFc9dGhpcy5zaG91bGRBbGxvd01vdmluZyhldCxUKSxldH0pLHBlPS0xPT09aWUuaW5kZXhPZihUKTtpZighV3x8IXBlKXJldHVybiExO2NvbnN0IHdlPXRoaXMuZ2V0QmFzZVBhcmVudChpZSksRWU9dGhpcy5nZXRUYXJnZXRQYXJlbnQoXyxUKSxaZT13ZT09PUVlO3JldHVybiB0'@;
put 'aGlzLm1vdmVkVG9Db2xsYXBzZWQ9dGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoRWUpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuc2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMoaWUsVCxaZSksdGhpcy5tb3Zl'@;
put 'Um93cyhpZSxULEVlKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpLHRoaXMubW92ZUNlbGxzTWV0YShpZSxUKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCghMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCxo'@;
put 'JiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSkpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuc2VsZWN0Q2VsbHMobCxkKSwhMX1kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcobCl7Y29uc3R7cm93czphLGZpbmFsSW5kZXg6ZCxkcm9wSW5kZXg6aCxtb3ZlUG9zc2libGU6Zn09bDts'@;
put 'ZXQgXz0hMTtyZXR1cm4gTGEoaCkmJihHYShBYWBTaW5jZSB2ZXJzaW9uIDguMC4wIG9mIHRoZSBIYW5kc29udGFibGUgdGhlICdtb3ZlUm93cycgbWV0aG9kIGlzbid0IHVzZWQgZm9yIG1vdmluZyByb3dzXHgyMAogICAgICB3aGVuIHRoZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVk'@;
put 'LiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLmApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGEsZCxoLGYsITEpLF89ITApLF99c2hvdWxkQWxsb3dNb3ZpbmcobCxhKXtyZXR1cm4hKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQobCl8fHRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCl8fGw9PT1hfHwwPT09YSl9Z2V0QmFzZVBhcmVudChsKXtyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobFswXSl9Z2V0VGFyZ2V0UGFyZW50KGwsYSl7bGV0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQo'@;
put 'bD9hLTE6YSk7cmV0dXJuIG51bGw9PWQmJihkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEtMSkpLGR9c2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMobCxhLGQpe2R8fChNYXRoLm1heCguLi5sKTw9YT90aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gu'@;
put 'c2hpZnRTdGFzaChsWzBdLGEsLTEqbC5sZW5ndGgpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbFswXSxsLmxlbmd0aCkpfW1vdmVSb3dzKGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGQpK3RoaXMuZGF0'@;
put 'YU1hbmFnZXIuY291bnRDaGlsZHJlbihkKSsxO3RoaXMuaG90LmJhdGNoUmVuZGVyKCgpPT57bC5mb3JFYWNoKGY9Pnt0aGlzLmRhdGFNYW5hZ2VyLm1vdmVSb3coZixhLHRoaXMubW92ZWRUb0NvbGxhcHNlZCxoKX0pfSl9bW92ZUNlbGxzTWV0YShsLGEpe2NvbnN0IGQ9W10saD1NYXRoLm1h'@;
put 'eCguLi5sKTxhO2wuZm9yRWFjaChmPT57ZC5wdXNoKHRoaXMuaG90LmdldENlbGxNZXRhQXRSb3coZikpfSksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGxbMF0sbC5sZW5ndGgpLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShhLShoP2QubGVuZ3RoOjApLDAsLi4uZCl9c2VsZWN0Q2VsbHMo'@;
put 'bCxhKXtjb25zdCBkPWwubGVuZ3RoO2xldCBoPTAsZj0wLF89bnVsbCxUPW51bGw7aWYodGhpcy5tb3ZlZFRvQ29sbGFwc2VkKXtsZXQgVz1udWxsO1c9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGxbZC0xXTxhP2EtZDphKTtjb25zdCBpZT10aGlzLmRhdGFNYW5hZ2Vy'@;
put 'LmdldFJvd1BhcmVudChudWxsPT09Vz90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xOlctMSkscGU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChpZSk7aD10aGlzLmRhdGFNYW5hZ2VyLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhwZSksZj1ofWVsc2UgbFtkLTFdPGE/KGY9YS0xLGg9'@;
put 'Zi1kKzEpOihoPWEsZj1oK2QtMSk7Xz10aGlzLmhvdC5zZWxlY3Rpb24sVD10aGlzLmhvdC5jb3VudENvbHMoKS0xLF8uc2V0UmFuZ2VTdGFydCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLDApKSxfLnNldFJhbmdlRW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsVCksITAp'@;
put 'fWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9fWNvbnN0IE96PSJuZXN0ZWRSb3dzIixlMz1uZXcgV2Vha01hcDtjbGFzcyBwTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gT3p9c3RhdGljIGdldCBQTFVHSU5f'@;
put 'UFJJT1JJVFkoKXtyZXR1cm4gMzAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZGF0YU1hbmFnZXI9bnVsbCx0aGlzLmhlYWRlcnNVST1udWxsLHRoaXMuY29sbGFwc2VkUm93c01hcD1udWxsLGUzLnNldCh0aGlzLHttb3ZlZFRvQ29sbGFwc2VkOiExLHNraXBSZW5kZXI6bnVsbCxz'@;
put 'a2lwQ29yZUFQSU1vZGlmaWVyczohMX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPel19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbGxhcHNlZFJvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0'@;
put 'ZXJNYXAoIm5lc3RlZFJvd3MiLG5ldyBteSksdGhpcy5kYXRhTWFuYWdlcj1uZXcgY2xhc3MgaU5le2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9YSx0aGlzLmRhdGE9bnVsbCx0aGlzLnBsdWdpbj1sLHRoaXMucGFyZW50UmVmZXJlbmNlPW5ldyBXZWFrTWFwLHRoaXMuY2FjaGU9e2xldmVs'@;
put 'czpbXSxsZXZlbENvdW50OjAscm93czpbXSxub2RlSW5mbzpuZXcgV2Vha01hcH19c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2Rp'@;
put 'ZmllcnMoKSxsPXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRhdGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10s'@;
put 'bGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9LHZvKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVs'@;
put 'c1thXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dzLnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhp'@;
put 'cy5oYXNDaGlsZHJlbihsKSYmRG4obC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3QobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSxfPWE7aWYoaXNOYU4o'@;
put 'XykmJl8uZW5kKXJldHVybiBfO2xldCBUPWw7cmV0dXJuIFR8fChUPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCxfLT0xKSxudWxsIT1kJiZfPT09ZD97cmVzdWx0OlQsZW5kOiEwfTpudWxsIT1oJiZUPT09aD97cmVzdWx0Ol8sZW5kOiEwfTooXys9MSxULl9fY2hpbGRyZW4mJkRuKFQu'@;
put 'X19jaGlsZHJlbixXPT57aWYodGhpcy5wYXJlbnRSZWZlcmVuY2Uuc2V0KFcsZj9udWxsOlQpLF89dGhpcy5yZWFkVHJlZU5vZGVzKFcsXyxkLGgpLGlzTmFOKF8pJiZfLmVuZClyZXR1cm4hMX0pLF8pfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2No'@;
put 'aWxkcmVuPXRoaXMuZGF0YSxsfW1vY2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4gZHModGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1udWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdp'@;
put 'dGhpblBhcmVudChsKXtsZXQgYT1udWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJvd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXty'@;
put 'ZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oRG4oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGgu'@;
put 'X19jaGlsZHJlbiYmKGErPXRoaXMuY291bnRDaGlsZHJlbihoKSl9KSxhKTowfWdldFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJu'@;
put 'IGwmJiJvYmplY3QiPT10eXBlb2YgbD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChsKXtsZXQgYT1udWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdl'@;
put 'dFJvd09iamVjdExldmVsKGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFzQ2hpbGRyZW4obCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxk'@;
put 'cmVuLmxlbmd0aCl9aXNDaGlsZChsKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFyIGQ7cmV0dXJuKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1'@;
put 'cm4hdGhpcy5pc0NoaWxkKGwpfWlzUGFyZW50KGwpe3ZhciBhO2xldCBkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9'@;
put 'YWRkQ2hpbGQobCxhKXtsZXQgZD1hO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wmJihoPXRoaXMuZ2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7'@;
put 'bGV0IGY9bDtsfHwoZj10aGlzLm1vY2tQYXJlbnQoKSksZi5fX2NoaWxkcmVufHwoZi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlzLm1vY2tOb2RlKCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3QgXz10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoXywxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLF8sMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2Nr'@;
put 'Tm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsaCxhKSxsKXtjb25zdCBUPXRoaXMuZ2V0Um93SW5kZXgobCkrYSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLFQsMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdy'@;
put 'aXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIp'@;
put 'LHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoVCwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixULDEpLGY9VH1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJz'@;
put 'KCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGEsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiks'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsaCxhKX1hZGRTaWJsaW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhp'@;
put 'cy5nZXRSb3dQYXJlbnQoZCksZj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZy'@;
put 'b21QYXJlbnQobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyh2byhsWzBdLGxbMl0sRWU9Pntjb25zdCBaZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3co'@;
put 'RWUpO2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoWmUpKX0pLHZvKDAsaC5sZW5ndGgtMixFZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChoW0VlXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksXz10aGlzLmNvdW50Q2hpbGRyZW4oZCks'@;
put 'VD10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpLFc9dGhpcy5nZXRSb3dQYXJlbnQoZCksaWU9dGhpcy5nZXRSb3dQYXJlbnQoVykscGU9dGhpcy5nZXRSb3dJbmRleChpZSk7bGV0IHdlPW51bGw7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURldGFjaENoaWxkIixXLGQpLG51'@;
put 'bGwhPVQpe2NvbnN0IEVlPUFycmF5LmZyb20obmV3IEFycmF5KGYrXysxKS5rZXlzKCkpLnNwbGljZSgtMSooXysxKSk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsZixfKzEsRWUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksVy5fX2NoaWxkcmVuLnNwbGljZShULDEp'@;
put 'LHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixmLF8rMSxFZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxpZSl7d2U9cGUrdGhpcy5jb3VudENoaWxkcmVuKGllKTtjb25zdCBaZT10aGlzLmdldENoaWxkKGllLHRoaXMuY291bnRDaGlsZHJl'@;
put 'bihpZSktMSksaXQ9dGhpcy5nZXRSb3dJbmRleChaZSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsaXQrMSxfKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksaWUuX19jaGlsZHJlbi5wdXNoKGQpfWVsc2Ugd2U9dGhpcy5ob3QuY291bnRSb3dzKCkrMSx0aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93Iix3ZS0yLF8rMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmRhdGEucHVzaChkKX10aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsd2UtMixfKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSks'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGV0YWNoQ2hpbGQiLFcsZCx0aGlzLmdldFJvd0luZGV4KGQpKSxhJiZ0aGlzLmhvdC5yZW5kZXIoKX1maWx0ZXJEYXRhKGwsYSxkKXtjb25zdCBoPVtdO0RuKGQsZj0+e2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoZikpfSksRG4oaCxmPT57Y29u'@;
put 'c3QgXz10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGYpLFQ9dGhpcy5nZXRSb3dQYXJlbnQoZik7bnVsbD09PVQ/dGhpcy5kYXRhLnNwbGljZShfLDEpOlQuX19jaGlsZHJlbi5zcGxpY2UoXywxKX0pLHRoaXMucmV3cml0ZUNhY2hlKCl9c3BsaWNlRGF0YShsLGEsZCl7Y29uc3QgaD10'@;
put 'aGlzLmdldERhdGFPYmplY3QobC0xKTtsZXQgZj1udWxsLF89bDtoJiZoLl9fY2hpbGRyZW4mJjA9PT1oLl9fY2hpbGRyZW4ubGVuZ3RoPyhmPWgsXz0wKTpsPHRoaXMuY291bnRBbGxSb3dzKCkmJihmPXRoaXMuZ2V0Um93UGFyZW50KGwpLF89dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVu'@;
put 'dChsKSksZj9kP2YuX19jaGlsZHJlbi5zcGxpY2UoXyxhLC4uLmQpOmYuX19jaGlsZHJlbi5zcGxpY2UoXyxhKTpkP3RoaXMuZGF0YS5zcGxpY2UoXyxhLC4uLmQpOnRoaXMuZGF0YS5zcGxpY2UoXyxhKSx0aGlzLnJld3JpdGVDYWNoZSgpfXN5bmNSb3dXaXRoUmF3U291cmNlKGwpe2xldCBh'@;
put 'PWwsZD1udWxsO2Rve2Q9dGhpcy5nZXRSb3dQYXJlbnQoZCksbnVsbCE9PWQmJihhPWQpfXdoaWxlKG51bGwhPT1kKTt0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleChhKSwiX19jaGlsZHJl'@;
put 'biIsYS5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLnN5bmNSb3dXaXRoUmF3U291cmNlIiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpfW1vdmVSb3cobCxhLGQsaCl7Y29uc3QgZj1hPT09dGhpcy5ob3QuY291bnRSb3dzKCksXz10aGlzLmdldFJvd1BhcmVudChsKSxUPXRo'@;
put 'aXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksVz1fLl9fY2hpbGRyZW4uc2xpY2UoVCxUKzEpLGllPWw+YTtsZXQgcGU9dGhpcy5nZXRSb3dQYXJlbnQoZj9hLTE6YSk7bnVsbD09cGUmJihwZT10aGlzLmdldFJvd1BhcmVudChhLTEpKSxudWxsPT1wZSYmKHBlPXRoaXMuZ2V0RGF0YU9i'@;
put 'amVjdChhLTEpKSxwZT9wZS5fX2NoaWxkcmVufHwocGUuX19jaGlsZHJlbj1bXSk6KHBlPXRoaXMuZ2V0RGF0YU9iamVjdChhKSxwZS5fX2NoaWxkcmVuPVtdKTtjb25zdCB3ZT1mfHxkfHxoP3BlLl9fY2hpbGRyZW4ubGVuZ3RoOnRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoYSksRWU9'@;
put 'Xz09PXBlO3BlLl9fY2hpbGRyZW4uc3BsaWNlKHdlLDAsV1swXSksXy5fX2NoaWxkcmVuLnNwbGljZShUKyhpZSYmRWU/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKF8pLEVlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHBlKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3Jl'@;
put 'dHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50'@;
put 'cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9fSh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbGxhcHNpbmdVST1uZXcgbE5lKHRoaXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBrb2UodGhpcyx0aGlzLmhvdCksdGhpcy5jb250ZXh0TWVudVVJPW5ldyB1TmUodGhpcyx0aGlzLmhvdCksdGhp'@;
put 'cy5yb3dNb3ZlQ29udHJvbGxlcj1uZXcgZE5lKHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJbml0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZv'@;
put 'cmVWaWV3UmVuZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0RhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlSb3dEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5v'@;
put 'bk1vZGlmeVNvdXJjZUxlbmd0aCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEYXRhU3BsaWNlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlRGF0YVNwbGljZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJmaWx0ZXJEYXRhIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBsLm9uRmlsdGVyRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRz'@;
put 'KX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSZW1vdmVSb3coLi4uYXJndW1l'@;
put 'bnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVBZGRDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckFkZENoaWxkIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJBZGRDaGlsZCguLi5hcmd1bWVu'@;
put 'dHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZURldGFjaENoaWxkKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckRldGFjaENoaWxk'@;
put 'KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25B'@;
put 'ZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUm93TW92ZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsYT0+dGhpcy5vbkJlZm9yZUxvYWREYXRh'@;
put 'KGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9PnRoaXMub25CZWZvcmVMb2FkRGF0YShhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIiksc3VwZXIuZGlz'@;
put 'YWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpO2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7dGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmRhdGFNYW5hZ2VyLnVwZGF0ZVdpdGhEYXRhKGwpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfW9uQmVm'@;
put 'b3JlUm93TW92ZShsLGEsZCxoKXtyZXR1cm4gdGhpcy5yb3dNb3ZlQ29udHJvbGxlci5vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl9ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKXtlMy5nZXQodGhpcykuc2tpcENvcmVBUElNb2RpZmllcnM9ITB9ZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpe2Uz'@;
put 'LmdldCh0aGlzKS5za2lwQ29yZUFQSU1vZGlmaWVycz0hMX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUobCxhLGQpfW9uTW9kaWZ5Um93RGF0YShsKXtpZighZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVy'@;
put 'biB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCl9b25Nb2RpZnlTb3VyY2VMZW5ndGgoKXtpZighZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShsLGEsZCl7cmV0'@;
put 'dXJuISghZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzJiYhdGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKSYmKHRoaXMuZGF0YU1hbmFnZXIuc3BsaWNlRGF0YShsLGEsZCksMSkpfW9uRmlsdGVyRGF0YShsLGEsZCl7Y29uc3QgaD1lMy5nZXQodGhpcyk7cmV0'@;
put 'dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rhc2goZFswXSxhKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChkWzBdLG51bGwsLTEq'@;
put 'YSksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRhKGwsYSxkKSxoLnNraXBSZW5kZXI9ITAsdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJLmFwcGVuZE9wdGlvbnMo'@;
put 'bCl9b25BZnRlckdldFJvd0hlYWRlcihsLGEpe3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpfW9uTW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7cmV0dXJuIHRoaXMuaGVhZGVyc1VJLnJvd0hlYWRlcldpZHRoQ2FjaGV8fGx9b25BZnRlclJlbW92ZVJvdyhsLGEsZCxo'@;
put 'KXtpZihoPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBmPWUzLmdldCh0aGlzKTtzZXRUaW1lb3V0KCgpPT57Zi5za2lwUmVuZGVyPW51bGwsdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBw'@;
put 'bHlTdGFzaCgpfSwwKX1vbkJlZm9yZVJlbW92ZVJvdyhsLGEsZCl7Y29uc3QgaD1BcnJheS5mcm9tKGQucmVkdWNlKChmLF8pPT57aWYodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChfKSl7Y29uc3QgVD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoXykuX19jaGlsZHJlbjtyZXR1'@;
put 'cm4gZi5hZGQoXyksQXJyYXkuaXNBcnJheShUKSYmVC5mb3JFYWNoKFc9PmYuYWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoVykpKSxmfXJldHVybiBmLmFkZChfKX0sbmV3IFNldCkpO2QubGVuZ3RoPTAsZC5wdXNoKC4uLmgpfW9uQmVmb3JlQWRkQ2hpbGQoKXt0aGlzLmNvbGxh'@;
put 'cHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1vbkFmdGVyQWRkQ2hpbGQobCxhKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGEpKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRS'@;
put 'b3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9b25CZWZvcmVEZXRhY2hDaGlsZCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfW9uQWZ0ZXJEZXRhY2hDaGlsZChsLGEsZCl7dGhpcy5jb2xsYXBz'@;
put 'aW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goZCxudWxsLC0xKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9b25BZnRlckNyZWF0ZVJvdygpe3RoaXMuZGF0YU1h'@;
put 'bmFnZXIucmV3cml0ZUNhY2hlKCl9b25BZnRlckluaXQoKXtjb25zdCBsPU1hdGgubWF4KC4uLnRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxzKTtsPjAmJnRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpfW9uQmVmb3JlVmlld1JlbmRlcihsLGEpe2UzLmdldCh0aGlz'@;
put 'KS5za2lwUmVuZGVyJiYoYS5za2lwUmVuZGVyPSEwKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfW9uQmVmb3JlTG9hZERhdGEobCl7aWYoIWduZShsKSlyZXR1cm4gU04oIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0cyBhcyBhIGRhdGFzZXQg'@;
put 'dG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPel09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEobCksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX19'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVNhdmUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlTG9hZCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIpO2NvbnN0IFRvZT0icGVy'@;
put 'c2lzdGVudFN0YXRlIjtjbGFzcyBfTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVG9lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5zdG9yYWdlPXZvaWQgMH1pc0VuYWJsZWQoKXty'@;
put 'ZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbVG9lXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnN0b3JhZ2V8fCh0aGlzLnN0b3JhZ2U9bmV3IGNsYXNzIGdOZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3RoaXMucm9vdFdpbmRvdz1hLHRoaXMucHJlZml4PWwsdGhpcy5zYXZlZEtleXM9W10sdGhpcy5sb2FkU2F2ZWRLZXlzKCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV8k'@;
put 'e2x9YCxKU09OLnN0cmluZ2lmeShhKSksLTE9PT10aGlzLnNhdmVkS2V5cy5pbmRleE9mKGwpJiYodGhpcy5zYXZlZEtleXMucHVzaChsKSx0aGlzLnNhdmVTYXZlZEtleXMoKSl9bG9hZFZhbHVlKGwsYSl7Y29uc3QgaD10aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7'@;
put 'dGhpcy5wcmVmaXh9XyR7dHlwZW9mIGw+InUiP2E6bH1gKTtyZXR1cm4gbnVsbD09PWg/dm9pZCAwOkpTT04ucGFyc2UoaCl9cmVzZXQobCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke2x9YCl9cmVzZXRBbGwoKXtEbih0aGlzLnNh'@;
put 'dmVkS2V5cywobCxhKT0+e3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHt0aGlzLnNhdmVkS2V5c1thXX1gKX0pLHRoaXMuY2xlYXJTYXZlZEtleXMoKX1sb2FkU2F2ZWRLZXlzKCl7Y29uc3QgbD10aGlzLnJvb3RXaW5kb3cubG9jYWxT'@;
put 'dG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCksYT0ic3RyaW5nIj09dHlwZW9mIGw/SlNPTi5wYXJzZShsKTp2b2lkIDA7dGhpcy5zYXZlZEtleXM9YXx8W119c2F2ZVNhdmVkS2V5cygpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0'@;
put 'SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgLEpTT04uc3RyaW5naWZ5KHRoaXMuc2F2ZWRLZXlzKSl9Y2xlYXJTYXZlZEtleXMoKXt0aGlzLnNhdmVkS2V5cy5sZW5ndGg9MCx0aGlzLnNhdmVTYXZlZEtleXMoKX19KHRoaXMuaG90LnJvb3RFbGVtZW50LmlkLHRo'@;
put 'aXMuaG90LnJvb3RXaW5kb3cpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVNhdmUiLChsLGEpPT50aGlzLnNhdmVWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZUxvYWQiLChsLGEpPT50aGlzLmxvYWRWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNp'@;
put 'c3RlbnRTdGF0ZVJlc2V0IiwoKT0+dGhpcy5yZXNldFZhbHVlKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5zdG9yYWdlPXZvaWQgMCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFi'@;
put 'bGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1sb2FkVmFsdWUobCxhKXthLnZhbHVlPXRoaXMuc3RvcmFnZS5sb2FkVmFsdWUobCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5zdG9yYWdlLnNhdmVWYWx1ZShsLGEpfXJlc2V0VmFsdWUobCl7dHlwZW9mIGw+InUiP3RoaXMuc3RvcmFnZS5y'@;
put 'ZXNldEFsbCgpOnRoaXMuc3RvcmFnZS5yZXNldChsKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBQej0ic2VhcmNoIix3TmU9ZnVuY3Rpb24oYyxsLGEsZCxoKXtjLmdldENlbGxNZXRhKGwsYSkuaXNTZWFyY2hSZXN1bHQ9aH0sQ05lPWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm4h'@;
put 'KExhKGMpfHxudWxsPT09Y3x8IWMudG9Mb2NhbGVMb3dlckNhc2V8fDA9PT1jLmxlbmd0aHx8TGEobCl8fG51bGw9PT1sKSYmLTEhPT1sLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2NhbGUpLmluZGV4T2YoYy50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkpfTtjbGFzcyBT'@;
put 'TmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUHp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTkwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuY2FsbGJhY2s9d05lLHRoaXMucXVlcnlNZXRob2Q9Q05lLHRoaXMuc2VhcmNoUmVz'@;
put 'dWx0Q2xhc3M9Imh0U2VhcmNoUmVzdWx0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQel19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQel07dGhpcy51cGRh'@;
put 'dGVQbHVnaW5TZXR0aW5ncyhhKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVuZGVyZXIoLi4uYXJndW1lbnRzKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbD10aGlzO2NvbnN0IGE9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gbC5vbkJlZm9yZVJlbmRlcmVyKC4uLmFyZ3VtZW50cyl9O3RoaXMuaG90LmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixhKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVJlbmRlcmVyIixh'@;
put 'KX0pLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXF1ZXJ5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt'@;
put 'ZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCksZj10aGlzLmhvdC5jb3VudENvbHMoKSxfPVtdLFQ9'@;
put 'dGhpcy5ob3Q7cmV0dXJuIHZvKDAsaC0xLFc9Pnt2bygwLGYtMSxpZT0+e2NvbnN0IHBlPXRoaXMuaG90LmdldERhdGFBdENlbGwoVyxpZSksd2U9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoVyxpZSksRWU9d2Uuc2VhcmNoLmNhbGxiYWNrfHxhLGl0PSh3ZS5zZWFyY2gucXVlcnlNZXRob2R8fGQp'@;
put 'KGwscGUsd2UpO2l0JiZfLnB1c2goe3JvdzpXLGNvbDppZSxkYXRhOnBlfSksRWUmJkVlKFQsVyxpZSxwZSxpdCl9KX0pLF99Z2V0Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja31zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Z2V0UXVlcnlNZXRob2QoKXtyZXR1cm4gdGhp'@;
put 'cy5xdWVyeU1ldGhvZH1zZXRRdWVyeU1ldGhvZChsKXt0aGlzLnF1ZXJ5TWV0aG9kPWx9Z2V0U2VhcmNoUmVzdWx0Q2xhc3MoKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc31zZXRTZWFyY2hSZXN1bHRDbGFzcyhsKXt0aGlzLnNlYXJjaFJlc3VsdENsYXNzPWx9dXBkYXRlUGx1Z2lu'@;
put 'U2V0dGluZ3MobCl7dXMobCkmJihsLnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKGwuc2VhcmNoUmVzdWx0Q2xhc3MpLGwucXVlcnlNZXRob2QmJnRoaXMuc2V0UXVlcnlNZXRob2QobC5xdWVyeU1ldGhvZCksbC5jYWxsYmFjayYmdGhpcy5zZXRDYWxsYmFj'@;
put 'ayhsLmNhbGxiYWNrKSl9b25CZWZvcmVSZW5kZXJlcihsLGEsZCxoLGYsXyl7Y29uc3QgVD1fLmNsYXNzTmFtZXx8W107bGV0IFc9W107InN0cmluZyI9PXR5cGVvZiBUP1c9VC5zcGxpdCgiICIpOlcucHVzaCguLi5UKSx0aGlzLmlzRW5hYmxlZCgpJiZfLmlzU2VhcmNoUmVzdWx0P1cuaW5j'@;
put 'bHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcyl8fFcucHVzaChgJHt0aGlzLnNlYXJjaFJlc3VsdENsYXNzfWApOlcuaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcykmJlcuc3BsaWNlKFcuaW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwxKSxfLmNsYXNzTmFtZT1XLmpv'@;
put 'aW4oIiAiKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jbGFzcyBFTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4idG91Y2hTY3JvbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygp'@;
put 'e3JldHVybiEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuc2Nyb2xsYmFycz1bXSx0aGlzLmNsb25lcz1bXSx0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsdGhpcy5mcmVlemVPdmVybGF5cz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4gSE4oKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJs'@;
put 'ZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9PnRoaXMub25BZnRlclZpZXdSZW5kZXIoKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuYWRkSG9vaygiYmVmb3JlVG91Y2hTY3JvbGwiLCgpPT50aGlzLm9uQmVmb3JlVG91Y2hTY3JvbGwoKSksdGhpcy5hZGRIb29rKCJhZnRlck1vbWVudHVtU2Nyb2xsIiwoKT0+'@;
put 'dGhpcy5vbkFmdGVyTW9tZW50dW1TY3JvbGwoKSl9b25BZnRlclZpZXdSZW5kZXIoKXtpZih0aGlzLmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6bCxib3R0b21PdmVybGF5OmEsaW5saW5lU3RhcnRPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5'@;
put 'OmgsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmZ9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFycy5sZW5ndGg9MCx0aGlzLnNjcm9sbGJhcnMucHVzaChsKSxhLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMu'@;
put 'cHVzaChhKSx0aGlzLnNjcm9sbGJhcnMucHVzaChkKSxoJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChoKSxmJiZmLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChmKSx0aGlzLmNsb25lcz1bXSxsLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGwuY2xvbmUud3RUYWJsZS5ob2xk'@;
put 'ZXIucGFyZW50Tm9kZSksYS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChhLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGQubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goZC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxoJiZ0aGlzLmNs'@;
put 'b25lcy5wdXNoKGguY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksZiYmZi5jbG9uZSYmdGhpcy5jbG9uZXMucHVzaChmLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpfW9uQmVmb3JlVG91Y2hTY3JvbGwoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSEwLERuKHRoaXMuY2xv'@;
put 'bmVzLGw9PntwaShsLCJoaWRlLXR3ZWVuIil9KX1vbkFmdGVyTW9tZW50dW1TY3JvbGwoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSExLERuKHRoaXMuY2xvbmVzLGw9PntXbyhsLCJoaWRlLXR3ZWVuIikscGkobCwic2hvdy10d2VlbiIpfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+'@;
put 'e0RuKHRoaXMuY2xvbmVzLGw9PntXbyhsLCJzaG93LXR3ZWVuIil9KX0sNDAwKSxEbih0aGlzLnNjcm9sbGJhcnMsbD0+e2wucmVmcmVzaCgpLGwucmVzZXRGaXhlZFBvc2l0aW9uKCl9KSx0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNTY3JvbGxXaXRoTWFzdGVyKCl9fWNvbnN0'@;
put 'IHpBPSJ0cmltUm93cyI7Y2xhc3MgQU5lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHpBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLnRyaW1tZWRSb3dzTWFwPW51bGx9aXNFbmFi'@;
put 'bGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pBXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IG15KSx0aGlzLnRyaW1tZWRSb3dzTWFw'@;
put 'LmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbekFdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhp'@;
put 'cy50cmltbWVkUm93c01hcC5jbGVhcigpLERuKGwsYT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgidHJpbVJv'@;
put 'd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRUcmltbWVkSW5kZXhlcygpfXRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7'@;
put 'ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1Sb3ciLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxfPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgo'@;
put 'XywhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9dHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudHJp'@;
put 'bVJvd3MoYSl9dW50cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpLF89bC5sZW5ndGg+MDtkJiZfJiYoRG4obCxXPT57ZltX'@;
put 'XT0hMX0pLGg9QWwoZiwoVyxpZSxwZSk9PihpZSYmVy5wdXNoKHBlKSxXKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVudHJpbVJvdyIsYSxoLGQmJl8pJiYoZCYmXyYmdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy'@;
put 'VW50cmltUm93IixhLGgsZCYmXyxkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXVudHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudW50cmltUm93cyhhKX1pc1RyaW1tZWQobCl7cmV0dXJu'@;
put 'IHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGwpfHwhMX11bnRyaW1BbGwoKXt0aGlzLnVudHJpbVJvd3ModGhpcy5nZXRUcmltbWVkUm93cygpKX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7cmV0dXJuIGwuZXZlcnkoZD0+'@;
put 'TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1vbk1hcEluaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbekFdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxhPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0'@;
put 'SW5kZXgoYSwhMCl9KX0sITApfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHRvKGMpe2NvbnN0IGw9dGhpczt0aGlzLmluc3RhbmNlPWMsdGhpcy5kb25lQWN0aW9ucz1bXSx0aGlzLnVuZG9uZUFjdGlvbnM9W10sdGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMuZW5h'@;
put 'YmxlZD0hMSxjLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbihhLGQpe2NvbnN0IGg9YSYmYS5sZW5ndGg7aCYmYS5maW5kKFQ9Pntjb25zdFssLFcsaWVdPVQ7cmV0dXJuIFchPT1pZX0pJiZsLmRvbmUoKCk9Pntjb25zdCBUPWEucmVkdWNlKChpZSxwZSk9PihpZS5wdXNoKFsuLi5w'@;
put 'ZV0pLGllKSxbXSk7RG4oVCxpZT0+e2llWzFdPWMucHJvcFRvQ29sKGllWzFdKX0pO2NvbnN0IFc9aD4xP3RoaXMuZ2V0U2VsZWN0ZWQoKTpbW1RbMF1bMF0sVFswXVsxXV1dO3JldHVybiBuZXcgdG8uQ2hhbmdlQWN0aW9uKFQsVyl9LGQpfSksYy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIs'@;
put 'KGEsZCxoKT0+e2wuZG9uZSgoKT0+bmV3IHRvLkNyZWF0ZVJvd0FjdGlvbihhLGQpLGgpfSksYy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLChhLGQsaCxmKT0+e2wuZG9uZSgoKT0+e2NvbnN0IFQ9Yy50b1BoeXNpY2FsUm93KGEpLFc9eXUobC5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhKFQs'@;
put 'MCxUK2QtMSxsLmluc3RhbmNlLmNvdW50U291cmNlQ29scygpLTEpKTtyZXR1cm4gbmV3IHRvLlJlbW92ZVJvd0FjdGlvbihULFcsYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSxjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLGMucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1Nl'@;
put 'cXVlbmNlKCkpfSxmKX0pLGMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChhLGQsaCk9PntsLmRvbmUoKCk9Pm5ldyB0by5DcmVhdGVDb2x1bW5BY3Rpb24oYSxkKSxoKX0pLGMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIiwoYSxkLGgsZik9PntsLmRvbmUoKCk9Pntjb25zdCBUPWwuaW5z'@;
put 'dGFuY2UuZ2V0U291cmNlRGF0YUFycmF5KCksVz0obC5pbnN0YW5jZS5jb3VudENvbHMoKSthKSVsLmluc3RhbmNlLmNvdW50Q29scygpLGllPVtdLHBlPVtdLHdlPVtdO3ZvKFQubGVuZ3RoLTEsaXQ9Pntjb25zdCBldD1bXSx5dD1UW2l0XTt2byhXLFcrKGQtMSksRXQ9PntldC5wdXNoKHl0'@;
put 'W2MudG9QaHlzaWNhbENvbHVtbihFdCldKX0pLGllLnB1c2goZXQpfSksdm8oZC0xLGl0PT57d2UucHVzaChjLnRvUGh5c2ljYWxDb2x1bW4oVytpdCkpfSksQXJyYXkuaXNBcnJheShjLmdldFNldHRpbmdzKCkuY29sSGVhZGVycykmJnZvKGQtMSxpdD0+e3BlLnB1c2goYy5nZXRTZXR0aW5n'@;
put 'cygpLmNvbEhlYWRlcnNbYy50b1BoeXNpY2FsQ29sdW1uKFcraXQpXXx8bnVsbCl9KTtjb25zdCBFZT1jLmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLFplPWMucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7cmV0dXJuIG5ldyB0by5SZW1vdmVDb2x1'@;
put 'bW5BY3Rpb24oVyx3ZSxpZSxwZSxFZSxaZSxjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpfSxmKX0pLGMuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIsKGEsZCxoLGYpPT57bC5kb25lKCgpPT5uZXcgdG8uQ2VsbEFsaWdubWVudEFjdGlvbihhLGQsaCxmKSl9KSxjLmFk'@;
put 'ZEhvb2soImJlZm9yZUZpbHRlciIsYT0+e2wuZG9uZSgoKT0+bmV3IHRvLkZpbHRlcnNBY3Rpb24oYSkpfSksYy5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoYSxkKT0+eyExIT09YSYmbC5kb25lKCgpPT5uZXcgdG8uUm93TW92ZUFjdGlvbihhLGQpKX0pLGMuYWRkSG9vaygiYmVmb3JlTWVy'@;
put 'Z2VDZWxscyIsKGEsZCk9PntkfHxsLmRvbmUoKCk9Pm5ldyB0by5NZXJnZUNlbGxzQWN0aW9uKGMsYSkpfSksYy5hZGRIb29rKCJhZnRlclVubWVyZ2VDZWxscyIsKGEsZCk9PntkfHxsLmRvbmUoKCk9Pm5ldyB0by5Vbm1lcmdlQ2VsbHNBY3Rpb24oYyxhKSl9KSxjLmFkZEhvb2soImFmdGVy'@;
put 'SW5pdCIsKCk9PntsLmluaXQoKX0pfWZ1bmN0aW9uIElvZShjLGwpe2lmKCJsb2FkRGF0YSI9PT1sKXJldHVybiB0aGlzLnVuZG9SZWRvLmNsZWFyKCl9dG8ucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oYyxsKXtpZih0aGlzLmlnbm9yZU5ld0FjdGlvbnN8fCJVbmRvUmVkby51bmRvIj09PWx8'@;
put 'fCJVbmRvUmVkby5yZWRvIj09PWx8fCJhdXRvIj09PWwpcmV0dXJuO2NvbnN0IGQ9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixkLGwpKXJldHVybjtjb25zdCBmPWMoKSxfPXRoaXMudW5kb25l'@;
put 'QWN0aW9ucy5zbGljZSgpO3RoaXMuZG9uZUFjdGlvbnMucHVzaChmKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsZCx0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsXyks'@;
put 'dGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixfLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX0sdG8ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oKXtpZih0aGlzLmlzVW5kb0F2YWlsYWJsZSgpKXtjb25z'@;
put 'dCBjPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGMpO2NvbnN0IGw9dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsYyx0aGlzLmRv'@;
put 'bmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGE9eXUobCk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixhKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGg9dGhpcyxmPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaW5zdGFu'@;
put 'Y2UucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsZiksbC51bmRvKHRoaXMuaW5zdGFuY2UsKCk9PntoLmlnbm9yZU5ld0FjdGlvbnM9ITEsaC51bmRvbmVBY3Rpb25zLnB1c2gobCl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsZix0aGlz'@;
put 'LnVuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJVbmRvIixhKX19LHRvLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1JlZG9BdmFpbGFibGUoKSl7Y29uc3QgYz10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3Rh'@;
put 'bmNlLnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGMpO2NvbnN0IGw9dGhpcy51bmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixjLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBhPXl1KGwpO2lm'@;
put 'KCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVkbyIsYSkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBoPXRoaXMsZj10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixm'@;
put 'KSxsLnJlZG8odGhpcy5pbnN0YW5jZSwoKT0+e2guaWdub3JlTmV3QWN0aW9ucz0hMSxoLmRvbmVBY3Rpb25zLnB1c2gobCl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsZix0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVu'@;
put 'SG9va3MoImFmdGVyUmVkbyIsYSl9fSx0by5wcm90b3R5cGUuaXNVbmRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPjB9LHRvLnByb3RvdHlwZS5pc1JlZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmRvbmVBY3Rpb25zLmxl'@;
put 'bmd0aD4wfSx0by5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MH0sdG8ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuYWJsZWR9LHRvLnByb3RvdHlwZS5lbmFi'@;
put 'bGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXJldHVybjtjb25zdCBjPXRoaXMuaW5zdGFuY2U7dGhpcy5lbmFibGVkPSEwLGZ1bmN0aW9uIExOZShjKXtjLnVuZG89ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby51bmRvKCl9LGMucmVkbz1mdW5jdGlvbigpe3JldHVybiBj'@;
put 'LnVuZG9SZWRvLnJlZG8oKX0sYy5pc1VuZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5pc1VuZG9BdmFpbGFibGUoKX0sYy5pc1JlZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5pc1JlZG9BdmFpbGFibGUoKX0sYy5jbGVhclVuZG89ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5jbGVhcigpfX0oYyksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLGMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLElvZSl9LHRvLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKCkpcmV0dXJuO2NvbnN0IGM9dGhp'@;
put 'cy5pbnN0YW5jZTt0aGlzLmVuYWJsZWQ9ITEsZnVuY3Rpb24gUk5lKGMpe2RlbGV0ZSBjLnVuZG8sZGVsZXRlIGMucmVkbyxkZWxldGUgYy5pc1VuZG9BdmFpbGFibGUsZGVsZXRlIGMuaXNSZWRvQXZhaWxhYmxlLGRlbGV0ZSBjLmNsZWFyVW5kb30oYyksdGhpcy51bnJlZ2lzdGVyU2hvcnRj'@;
put 'dXRzKCksYy5yZW1vdmVIb29rKCJhZnRlckNoYW5nZSIsSW9lKX0sdG8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCksdGhpcy5pbnN0YW5jZT1udWxsLHRoaXMuZG9uZUFjdGlvbnM9bnVsbCx0aGlzLnVuZG9uZUFjdGlvbnM9bnVsbH0sKHRvLkFjdGlvbj1mdW5j'@;
put 'dGlvbigpe30pLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7fSx0by5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oKXt9LHRvLkNoYW5nZUFjdGlvbj1mdW5jdGlvbihjLGwpe3RoaXMuY2hhbmdlcz1jLHRoaXMuc2VsZWN0ZWQ9bCx0aGlzLmFjdGlvblR5cGU9ImNoYW5nZSJ9LHpm'@;
put 'KHRvLkNoYW5nZUFjdGlvbix0by5BY3Rpb24pLHRvLkNoYW5nZUFjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9eXUodGhpcy5jaGFuZ2VzKSxkPWMuY291bnRFbXB0eVJvd3MoITApLGg9Yy5jb3VudEVtcHR5Q29scyghMCk7Zm9yKGxldCBmPTAsXz1hLmxlbmd0'@;
put 'aDtmPF87ZisrKWFbZl0uc3BsaWNlKDMsMSk7Yy5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGwpLGMuc2V0RGF0YUF0Q2VsbChhLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpO2ZvcihsZXQgZj0wLF89YS5sZW5ndGg7ZjxfO2YrKyl7Y29uc3RbVCxXXT1hW2ZdO2MuZ2V0U2V0dGluZ3Mo'@;
put 'KS5taW5TcGFyZVJvd3MmJlQrMStjLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzPT09Yy5jb3VudFJvd3MoKSYmZD09PWMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3MmJihjLmFsdGVyKCJyZW1vdmVfcm93IixwYXJzZUludChUKzEsMTApLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJv'@;
put 'd3MpLGMudW5kb1JlZG8uZG9uZUFjdGlvbnMucG9wKCkpLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMmJlcrMStjLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzPT09Yy5jb3VudENvbHMoKSYmaD09PWMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMmJihjLmFsdGVyKCJyZW1vdmVf'@;
put 'Y29sIixwYXJzZUludChXKzEsMTApLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMpLGMudW5kb1JlZG8uZG9uZUFjdGlvbnMucG9wKCkpfWMuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9LHRvLkNoYW5nZUFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2Nv'@;
put 'bnN0IGE9eXUodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspYVtkXS5zcGxpY2UoMiwxKTtjLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsbCksYy5zZXREYXRhQXRDZWxsKGEsbnVsbCxudWxsLCJVbmRvUmVkby5yZWRvIiksdGhpcy5zZWxlY3RlZCYmYy5z'@;
put 'ZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX0sdG8uQ3JlYXRlUm93QWN0aW9uPWZ1bmN0aW9uKGMsbCl7dGhpcy5pbmRleD1jLHRoaXMuYW1vdW50PWwsdGhpcy5hY3Rpb25UeXBlPSJpbnNlcnRfcm93In0semYodG8uQ3JlYXRlUm93QWN0aW9uLHRvLkFjdGlvbiksdG8uQ3JlYXRl'@;
put 'Um93QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmNvdW50Um93cygpLGQ9Yy5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93czt0aGlzLmluZGV4Pj1hJiZ0aGlzLmluZGV4LWQ8YSYmKHRoaXMuaW5kZXgtPWQpLGMuYWRkSG9va09uY2UoImFmdGVyUmVtb3Zl'@;
put 'Um93IixsKSxjLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9LHRvLkNyZWF0ZVJvd0FjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlUm93IixsKSxjLmFsdGVyKCJpbnNl'@;
put 'cnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9LHRvLlJlbW92ZVJvd0FjdGlvbj1mdW5jdGlvbihjLGwsYSxkLGgpe3RoaXMuaW5kZXg9Yyx0aGlzLmRhdGE9bCx0aGlzLmFjdGlvblR5cGU9InJlbW92ZV9yb3ciLHRoaXMuZml4ZWRSb3dzQm90'@;
put 'dG9tPWEsdGhpcy5maXhlZFJvd3NUb3A9ZCx0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZT1ofSx6Zih0by5SZW1vdmVSb3dBY3Rpb24sdG8uQWN0aW9uKSx0by5SZW1vdmVSb3dBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0U2V0dGluZ3MoKSxkPVtdO2Eu'@;
put 'Zml4ZWRSb3dzQm90dG9tPXRoaXMuZml4ZWRSb3dzQm90dG9tLGEuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNoKChoLGYpPT57T2JqZWN0LmtleXMoaCkuZm9yRWFjaChfPT57Y29uc3QgVD1wYXJzZUludChfLDEwKTtkLnB1c2goW3RoaXMuaW5kZXgr'@;
put 'Zixpc05hTihUKT9fOlQsaFtfXV0pfSl9KSxjLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMuc2V0U291cmNlRGF0YUF0Q2VsbChkLG51bGwsbnVs'@;
put 'bCwiVW5kb1JlZG8udW5kbyIpLGMucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKX0sdG8uUmVtb3ZlUm93QWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGwpLGMu'@;
put 'YWx0ZXIoInJlbW92ZV9yb3ciLHRoaXMuaW5kZXgsdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8ucmVkbyIpfSx0by5DcmVhdGVDb2x1bW5BY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLmluZGV4PWMsdGhpcy5hbW91bnQ9bCx0aGlzLmFjdGlvblR5cGU9Imluc2VydF9jb2wifSx6Zih0by5D'@;
put 'cmVhdGVDb2x1bW5BY3Rpb24sdG8uQWN0aW9uKSx0by5DcmVhdGVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsbCksYy5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1Jl'@;
put 'ZG8udW5kbyIpfSx0by5DcmVhdGVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZUNvbCIsbCksYy5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfSx0'@;
put 'by5SZW1vdmVDb2x1bW5BY3Rpb249ZnVuY3Rpb24oYyxsLGEsZCxoLGYsXyl7dGhpcy5pbmRleD1jLHRoaXMuaW5kZXhlcz1sLHRoaXMuZGF0YT1hLHRoaXMuYW1vdW50PXRoaXMuZGF0YVswXS5sZW5ndGgsdGhpcy5oZWFkZXJzPWQsdGhpcy5jb2x1bW5Qb3NpdGlvbnM9aC5zbGljZSgwKSx0'@;
put 'aGlzLnJvd1Bvc2l0aW9ucz1mLnNsaWNlKDApLHRoaXMuYWN0aW9uVHlwZT0icmVtb3ZlX2NvbCIsdGhpcy5maXhlZENvbHVtbnNTdGFydD1ffSx6Zih0by5SZW1vdmVDb2x1bW5BY3Rpb24sdG8uQWN0aW9uKSx0by5SZW1vdmVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24o'@;
put 'YyxsKXtjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtjb25zdCBkPXRoaXMuaW5kZXhlcy5zbGljZSgwKS5zb3J0KCksaD0oaWUscGUsd2UpPT53ZVt0aGlzLmluZGV4ZXMuaW5kZXhPZihkW3BlXSldLGY9dGhpcy5kYXRhLmxlbmd0aCxf'@;
put 'PVtdO2ZvcihsZXQgaWU9MDtpZTxmO2llKyspXy5wdXNoKGNzKHRoaXMuZGF0YVtpZV0saCkpO2NvbnN0IFQ9Y3ModGhpcy5oZWFkZXJzLGgpLFc9W107Yy5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleGVzWzBdLHRoaXMuaW5kZXhlcy5sZW5ndGgsIlVuZG9SZWRvLnVuZG8i'@;
put 'KSxEbihjLmdldFNvdXJjZURhdGFBcnJheSgpLChpZSxwZSk9PntEbihkLCh3ZSxFZSk9PntpZVt3ZV09X1twZV1bRWVdLFcucHVzaChbcGUsd2UsaWVbd2VdXSl9KX0pLGMuc2V0U291cmNlRGF0YUF0Q2VsbChXLHZvaWQgMCx2b2lkIDAsIlVuZG9SZWRvLnVuZG8iKSx0eXBlb2YgdGhpcy5o'@;
put 'ZWFkZXJzPCJ1IiYmRG4oVCwoaWUscGUpPT57Yy5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbZFtwZV1dPWllfSksYy5iYXRjaEV4ZWN1dGlvbigoKT0+e2Mucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93UG9zaXRpb25zKSxjLmNvbHVtbkluZGV4TWFwcGVyLnNl'@;
put 'dEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyl9LCEwKSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMucmVuZGVyKCl9LHRvLlJlbW92ZUNvbHVtbkFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9va09uY2UoImFmdGVyUmVt'@;
put 'b3ZlQ29sIixsKSxjLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9LHRvLkNlbGxBbGlnbm1lbnRBY3Rpb249ZnVuY3Rpb24oYyxsLGEsZCl7dGhpcy5zdGF0ZUJlZm9yZT1jLHRoaXMucmFuZ2U9bCx0aGlzLnR5cGU9YSx0aGlzLmFs'@;
put 'aWdubWVudD1kfSx0by5DZWxsQWxpZ25tZW50QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7RG4odGhpcy5yYW5nZSxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZjLnNldENlbGxNZXRhKGQsaCwiY2xhc3NOYW1lIix0aGlzLnN0YXRlQmVmb3JlW2RdW2hdfHwi'@;
put 'IGh0TGVmdCIpfSl9KSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMucmVuZGVyKCl9LHRvLkNlbGxBbGlnbm1lbnRBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtLcCh0aGlzLnJhbmdlLHRoaXMudHlwZSx0aGlzLmFsaWdubWVudCwoYSxkKT0+Yy5nZXRD'@;
put 'ZWxsTWV0YShhLGQpLChhLGQsaCxmKT0+Yy5zZXRDZWxsTWV0YShhLGQsaCxmKSksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnJlbmRlcigpfSx0by5GaWx0ZXJzQWN0aW9uPWZ1bmN0aW9uKGMpe3RoaXMuY29uZGl0aW9uc1N0YWNrPWMsdGhpcy5hY3Rpb25UeXBlPSJm'@;
put 'aWx0ZXIifSx6Zih0by5GaWx0ZXJzQWN0aW9uLHRvLkFjdGlvbiksdG8uRmlsdGVyc0FjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQbHVnaW4oImZpbHRlcnMiKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGEuY29uZGl0aW9uQ29s'@;
put 'bGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrLnNsaWNlKDAsdGhpcy5jb25kaXRpb25zU3RhY2subGVuZ3RoLTEpKSxhLmZpbHRlcigpfSx0by5GaWx0ZXJzQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmdldFBsdWdp'@;
put 'bigiZmlsdGVycyIpO2MuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYS5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9ydEFsbENvbmRpdGlvbnModGhpcy5jb25kaXRpb25zU3RhY2spLGEuZmlsdGVyKCl9LHRvLk1lcmdlQ2VsbHNBY3Rpb249Y2xhc3MgRE5lIGV4dGVuZHMgdG8u'@;
put 'QWN0aW9ue2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmNlbGxSYW5nZT1hO2NvbnN0IGQ9dGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSxoPXRoaXMuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmFuZ2VEYXRhPWwuZ2V0RGF0YShkLnJvdyxkLmNv'@;
put 'bCxoLnJvdyxoLmNvbCl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKTtjb25zdCBoPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29y'@;
put 'bmVyKCk7bC5wb3B1bGF0ZUZyb21BcnJheShoLnJvdyxoLmNvbCx0aGlzLnJhbmdlRGF0YSx2b2lkIDAsdm9pZCAwLCJNZXJnZUNlbGxzIil9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubWVy'@;
put 'Z2VSYW5nZSh0aGlzLmNlbGxSYW5nZSl9fSx0by5Vbm1lcmdlQ2VsbHNBY3Rpb249Y2xhc3MgSU5lIGV4dGVuZHMgdG8uQWN0aW9ue2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmNlbGxSYW5nZT1hfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5h'@;
put 'ZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNl'@;
put 'bGxSYW5nZSwhMCksbC5yZW5kZXIoKX19LHRvLlJvd01vdmVBY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLnJvd3M9Yy5zbGljZSgpLHRoaXMuZmluYWxJbmRleD1sLHRoaXMuYWN0aW9uVHlwZT0icm93X21vdmUifSx6Zih0by5Sb3dNb3ZlQWN0aW9uLHRvLkFjdGlvbiksdG8uUm93TW92ZUFj'@;
put 'dGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKSxkPVtdLmNvbmNhdCh0aGlzLnJvd3MpLGg9ZC5maWx0ZXIoVD0+VD50aGlzLmZpbmFsSW5kZXgpLGY9ZC5maWx0ZXIoVD0+VDw9dGhpcy5maW5hbEluZGV4KSxfPWgu'@;
put 'c29ydCgoVCxXKT0+Vy1UKS5jb25jYXQoZi5zb3J0KChULFcpPT5ULVcpKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpO2ZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7VCs9MSl7Y29uc3QgVz1jLnRvVmlzdWFsUm93KF9bVF0pO2EubW92ZVJvdyhXLF9bVF0pfWMucmVuZGVyKCks'@;
put 'Yy5kZXNlbGVjdENlbGwoKSxjLnNlbGVjdFJvd3ModGhpcy5yb3dzWzBdLHRoaXMucm93c1swXSt0aGlzLnJvd3MubGVuZ3RoLTEpfSx0by5Sb3dNb3ZlQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2MuYWRk'@;
put 'SG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYS5tb3ZlUm93cyh0aGlzLnJvd3Muc2xpY2UoKSx0aGlzLmZpbmFsSW5kZXgpLGMucmVuZGVyKCksYy5kZXNlbGVjdENlbGwoKSxjLnNlbGVjdFJvd3ModGhpcy5maW5hbEluZGV4LHRoaXMuZmluYWxJbmRleCt0aGlzLnJvd3MubGVuZ3Ro'@;
put 'LTEpfSx0by5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2NvbnN0IGM9dGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnVuZG8sbD10eXBlb2YgYz4idSJ8fGM7dGhpcy5pbnN0YW5jZS51bmRvUmVkb3x8KHRoaXMuaW5zdGFuY2UudW5kb1JlZG89dGhpcyksbD90aGlzLmluc3RhbmNlLnVu'@;
put 'ZG9SZWRvLmVuYWJsZSgpOnRoaXMuaW5zdGFuY2UudW5kb1JlZG8uZGlzYWJsZSgpfSx0by5wcm90b3R5cGUucmVnaXN0ZXJTaG9ydGN1dHM9ZnVuY3Rpb24oKXt0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlz'@;
put 'OltbIkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygpfX1dLHtydW5Pbmx5SWY6aD0+IWguYWx0S2V5LGdy'@;
put 'b3VwOiJ1bmRvUmVkbyJ9KX0sdG8ucHJvdG90eXBlLnVucmVnaXN0ZXJTaG9ydGN1dHM9ZnVuY3Rpb24oKXt0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKCJ1bmRvUmVkbyIpfTtjb25zdCBldz1zby5n'@;
put 'ZXRTaW5nbGV0b24oKTtldy5hZGQoImFmdGVyVXBkYXRlU2V0dGluZ3MiLGZ1bmN0aW9uKCl7dmFyIGM7bnVsbD09PShjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpKXx8dm9pZCAwPT09Y3x8Yy5pbml0KCl9KSxldy5yZWdpc3RlcigiYmVmb3JlVW5kbyIpLGV3LnJlZ2lzdGVyKCJhZnRl'@;
put 'clVuZG8iKSxldy5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLGV3LnJlZ2lzdGVyKCJhZnRlclJlZG8iKSx0by5QTFVHSU5fS0VZPSJ1bmRvUmVkbyIsdG8uU0VUVElOR19LRVlTPSEwO2NvbnN0IE9OZT10bztmdW5jdGlvbiBGeigpeyhmdW5jdGlvbiBfSWUoKXtSMCh2NyksUjAoWEIpLFIwKEpu'@;
put 'ZSksUjAobnJlKSxSMChKQiksUjAocUIpLFIwKHJyZSksUjAoaXJlKSxSMChtSWUpLFIwKGtnKSxSMChzcmUpfSkoKSxmdW5jdGlvbiBSSWUoKXtwaChiNykscGgoTXkpLHBoKHRqKSxwaChlaikscGgocmopLHBoKGlqKSxwaCgkcCkscGgob2opfSgpLGZ1bmN0aW9uIEJJZSgpe2E3KEV5KSxh'@;
put 'NyhZayksYTcoc2opLGE3KFdrKX0oKSxmdW5jdGlvbiBxSWUoKXtiMihqSWUpLGIyKHpJZSksYjIoVUllKSxiMihaSWUpLGIyKFlJZSksYjIoV0llKSxiMihHSWUpLGIyKEduZSksYjIoJEllKX0oKSxmdW5jdGlvbiBQTmUoKXtqcyhBeSksanModUxlKSxqcyhUeSksanMoTUxlKSxqcyhSTGUp'@;
put 'LGpzKE9yZSksanMoYVJlKSxqcyhTUmUpLGpzKFpSZSksanMoZk9lKSxqcyhET2UpLGpzKExPZSksanMoT09lKSxqcyhHT2UpLGpzKHpQZSksanModkZlKSxqcyhNRmUpLGpzKElGZSksanMoUEZlKSxqcyhaRmUpLGpzKFdGZSksanModEhlKSxqcyhySGUpLGpzKGhIZSksanMoX0hlKSxqcyh3'@;
put 'SGUpLGpzKHJOZSksanMocE5lKSxqcyhfTmUpLGpzKFNOZSksanMoRU5lKSxqcyhBTmUpLGpzKE9OZSl9KCl9bGV0IEMyPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAy'@;
put 'NzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgpLFY3PSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbYVAs'@;
put 'bFBdLGltcG9ydHM6W29vLHFsLGhjLF91LEMyXX0pLGN9KSgpLHR3PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgp'@;
put 'LExvZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbyxxbF19KSxjfSkoKSxCNz0oKCk9PntjbGFzcyBje31yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxxbCxfdSxoYyxWNyx0dyxDMixMb2VdfSksY30pKCk7dmFyIEh6LE56LFZ6LEJ6LGp6LERsPUYoODM0MTcpLHQzPUYoMTIw'@;
put 'NzApO2NsYXNzIFJvZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W119YWRkVG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fUZ6KCksZnVuY3Rpb24gRk5lKGMpe2NvbnN0IGw9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7bCYmKGwuZm4uaGFuZHNvbnRhYmxl'@;
put 'PWZ1bmN0aW9uKGEpe2NvbnN0IGQ9dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IGllPWF8fHt9O3JldHVybiBoP2gudXBkYXRlU2V0dGluZ3MoaWUpOihoPW5ldyBjLkNvcmUoZFswXSxpZSksZC5kYXRhKCJo'@;
put 'YW5kc29udGFibGUiLGgpLGguaW5pdCgpKSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3IodmFyIF89YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShfPjE/Xy0xOjAp'@;
put 'LFc9MTtXPF87VysrKVRbVy0xXT1hcmd1bWVudHNbV107Zj1oW2FdLmNhbGwoaCwuLi5UKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShtcyksbXMuX19HaG9zdFRhYmxlPWxqLG1zLl9nZXRMaXN0ZW5lcnNDb3VudGVyPWZ1bmN0aW9uIGxrZSgpe3JldHVybiBn'@;
put 'a30sbXMuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiBNVGUoKXtyZXR1cm4gcFZ9LG1zLkV2ZW50TWFuYWdlcj1sbDtjb25zdCBITmU9W2FlLFIsaixCLEUsTSx4LGssTyxtLHosSV0sTk5lPVtsZSxLXTttcy5oZWxwZXI9e30sbXMuZG9tPXt9LERuKEhOZSxjPT57RG4oT2Jq'@;
put 'ZWN0LmdldE93blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYobXMuaGVscGVyW2xdPWNbbF0pfSl9KSxEbihOTmUsYz0+e0RuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG1zLmRvbVtsXT1jW2xdKX0pfSksbXMu'@;
put 'Y2VsbFR5cGVzPW51bGwhPT0oSHo9bXMuY2VsbFR5cGVzKSYmdm9pZCAwIT09SHo/SHo6e30sRG4oVERlKCksYz0+e21zLmNlbGxUeXBlc1tjXT1VQihjKX0pLG1zLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlPWIyLG1zLmNlbGxUeXBlcy5nZXRDZWxsVHlwZT1VQixtcy5lZGl0b3JzPW51'@;
put 'bGwhPT0oTno9bXMuZWRpdG9ycykmJnZvaWQgMCE9PU56P056Ont9LERuKGlrZSgpLGM9Pnttcy5lZGl0b3JzW2Ake2J1KGMpfUVkaXRvcmBdPXBrKGMpfSksbXMuZWRpdG9ycy5yZWdpc3RlckVkaXRvcj1SMCxtcy5lZGl0b3JzLmdldEVkaXRvcj1wayxtcy5yZW5kZXJlcnM9bnVsbCE9PShW'@;
put 'ej1tcy5yZW5kZXJlcnMpJiZ2b2lkIDAhPT1Wej9Wejp7fSxEbihNa2UoKSxjPT57Y29uc3QgbD1iayhjKTsiYmFzZSI9PT1jJiYobXMucmVuZGVyZXJzLmNlbGxEZWNvcmF0b3I9bCksbXMucmVuZGVyZXJzW2Ake2J1KGMpfVJlbmRlcmVyYF09bH0pLG1zLnJlbmRlcmVycy5yZWdpc3RlclJl'@;
put 'bmRlcmVyPXBoLG1zLnJlbmRlcmVycy5nZXRSZW5kZXJlcj1iayxtcy52YWxpZGF0b3JzPW51bGwhPT0oQno9bXMudmFsaWRhdG9ycykmJnZvaWQgMCE9PUJ6P0J6Ont9LERuKGtrZSgpLGM9Pnttcy52YWxpZGF0b3JzW2Ake2J1KGMpfVZhbGlkYXRvcmBdPUZOKGMpfSksbXMudmFsaWRhdG9y'@;
put 'cy5yZWdpc3RlclZhbGlkYXRvcj1hNyxtcy52YWxpZGF0b3JzLmdldFZhbGlkYXRvcj1GTixtcy5wbHVnaW5zPW51bGwhPT0oano9bXMucGx1Z2lucykmJnZvaWQgMCE9PWp6P2p6Ont9LERuKFBOKCksYz0+e21zLnBsdWdpbnNbY109dXkoYyl9KSxtcy5wbHVnaW5zW2Ake2J1KFpzLlBMVUdJ'@;
put 'Tl9LRVkpfVBsdWdpbmBdPVpzLG1zLnBsdWdpbnMucmVnaXN0ZXJQbHVnaW49anMsbXMucGx1Z2lucy5nZXRQbHVnaW49dXk7Y29uc3QgVk5lPW1zLHp6PShjLGwsYSk9Pntmb3IobGV0IGQgb2YgYyl7Y29uc3QgaD1sLmZpbmQoXz0+Xy5kYXRhPT09ZC5OQU1FKSxmPWEudmFyc1tkLk5BTUVd'@;
put 'O2YmJihkLlRZUEU9WyJEQVRFIiwiREFURVRJTUUiLCJUSU1FIl0uaW5jbHVkZXMoZC5ERFRZUEUpPyJudW0iOmYudHlwZSksaCYmZC5ERVNDJiYoaC5kZXNjPWQuREVTQyksaCYmZi5sZW5ndGgmJihoLmxlbmd0aD1wYXJzZUludChmLmxlbmd0aCkpLGgmJmQuQ0xTX1JVTEUmJihoLmNsc1J1'@;
put 'bGU9ZC5DTFNfUlVMRSl9cmV0dXJuIGx9O2Z1bmN0aW9uIFV6KGMsbCl7aWYobnVsbD09Y3x8IWlzTmFOKGMpJiZpc0Zpbml0ZShjKSlyZXR1cm4gbCYmbCghMCksITA7Y29uc3QgYT0oMCx0My5pc1NwZWNpYWxNaXNzaW5nKShjKTtyZXR1cm4gbCYmbChhKSxhfWNvbnN0IE9vZT17Q0FTRToo'@;
put 'YyxsKT0+e3N3aXRjaChsKXtjYXNlIlVQQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO2Nhc2UiTE9XQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmlu'@;
put 'Y2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfXJldHVybiEwfSxNSU5WQUw6KGMsbCk9Pntjb25zdCBhPVV6KGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4oIWF8fCFpc05hTihkKSkmJmQ+PU51bWJlcihsLnRv'@;
put 'U3RyaW5nKCkpfSxNQVhWQUw6KGMsbCk9Pntjb25zdCBhPVV6KGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4hKCFhfHwhaXNOYU4oZCkpfHxkPD1OdW1iZXIobC50b1N0cmluZygpKX0sTk9UTlVMTDooYyxsKT0+bnVsbCE9YyYmYy50b1N0cmluZygpLmxlbmd0aD4wfTt2YXIgWno9Rig0NDMx'@;
put 'Nik7Y2xhc3MgWk5le2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXt0aGlzLnJ1bGVzPVtdLHRoaXMuZHFydWxlcz1bXSx0aGlzLmRxZGF0YT1bXSx0aGlzLmhpZGRlbkNvbHVtbnM9W10sdGhpcy5wcmltYXJ5S2V5cz1bXSx0aGlzLmV4ZWN1dGVIb3RWYWxpZGF0b3I9KFQsVyxpZSk9Pntjb25z'@;
put 'dCBwZT17Li4uVCx2YWxpZGF0b3I6dm9pZCAwLGNvcnJlY3RGb3JtYXQ6ITEscm93OjAsY29sOjAsaW5zdGFuY2U6bmV3IFZOZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7fSksdmlzdWFsUm93OjAsdmlzdWFsQ29sOjAscHJvcDowfTtudWxsPT1XJiYoVz0iIiksVCYmVC52YWxp'@;
put 'ZGF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBULnZhbGlkYXRvcj9ULnZhbGlkYXRvci5jYWxsKHBlLFcsd2U9PntpZSYmaWUod2UpfSk6aWUmJmllKCExKX0sdGhpcy5zYXNwYXJhbXM9bCx0aGlzLmhvdEluc3RhbmNlPV8sdGhpcy5ydWxlcz0oYz0+e3RyeXtyZXR1cm4gSlNPTi5wYXJzZShg'@;
put 'WyR7Y31dYCl9Y2F0Y2h7cmV0dXJuW119fSkobC5DT0xUWVBFKSx0aGlzLnJ1bGVzPXp6KGQsdGhpcy5ydWxlcyxhKSx0aGlzLnJ1bGVzPShjPT57aWYoIVp6W3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKXJldHVybiBjO2ZvcihsZXQgYSBvZiBjKSJudW1lcmljIj09PWEudHlwZSYmKGEu'@;
put 'bnVtZXJpY0Zvcm1hdD17cGF0dGVybjoiMCwwIixjdWx0dXJlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V9KTtyZXR1cm4gY30pKHRoaXMucnVsZXMpLHRoaXMuZHFydWxlcz1oLHRoaXMuZHFkYXRhPWYsdGhpcy5wcmltYXJ5S2V5cz1sLlBLLnNwbGl0KCIgIiksdGhpcy51cGRhdGVEcURh'@;
put 'dGEoKSx0aGlzLnNldHVwVmFsaWRhdGlvbnMoKX1nZXRSdWxlcygpe3JldHVybiB0aGlzLnJ1bGVzfWdldFJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRleChsKTtyZXR1cm4gdGhpcy5ydWxlc1thXX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIHRoaXMuaGlkZGVuQ29sdW1uc311'@;
put 'cGRhdGVSdWxlKGwsYSl7bGV0IGQ9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlc1tkXT17Li4udGhpcy5ydWxlc1tkXSwuLi5hfX1yZW1vdmVSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlcy5zcGxpY2UoYSwxKX1nZXREcURldGFpbHMobCl7cmV0'@;
put 'dXJuIGw/dGhpcy5kcXJ1bGVzLmZpbHRlcihhPT5hLkJBU0VfQ09MPT09bCk6dGhpcy5kcXJ1bGVzfWlzRHFDb2wobCl7cmV0dXJuISF0aGlzLmRxcnVsZXMuZmluZChhPT5hLkJBU0VfQ09MPT09bCl9aGFzRHFSdWxlcyhsLGEsZD0hMSl7cmV0dXJuIGQ/dGhpcy5kcXJ1bGVzLmZpbHRlciho'@;
put 'PT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpLmxlbmd0aD09PWEubGVuZ3RoOiEhdGhpcy5kcXJ1bGVzLmZpbmQoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKX1nZXREcURyb3Bkb3duU291cmNlKGwpe2xldCBhPVtdO3JldHVybiB0'@;
put 'aGlzLmRxcnVsZXMuZm9yRWFjaChkPT57ZC5CQVNFX0NPTC50b1N0cmluZygpPT09bC5kYXRhJiZsLmRhdGEudG9TdHJpbmcoKSYmWyJIQVJEU0VMRUNUIiwiU09GVFNFTEVDVCIsIkhBUkRTRUxFQ1RfSE9PSyIsIlNPRlRTRUxFQ1RfSE9PSyJdLmluY2x1ZGVzKGQuUlVMRV9UWVBFLnRvU3Ry'@;
put 'aW5nKCkpJiZ0aGlzLmRxZGF0YS5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWQuQkFTRV9DT0wpLmZvckVhY2goaD0+e2EucHVzaChsLnR5cGUmJiJudW1lcmljIj09PWwudHlwZT9OdW1iZXIoaC5SVUxFX0RBVEEpOmguUlVMRV9EQVRBKX0pfSksYX11cGRhdGVEcURhdGEoKXt0aGlzLmRxZGF0'@;
put 'YS5sZW5ndGg+MCYmKGM9Pntjb25zdCBsPVtdO3JldHVybiB0aGlzLmRxZGF0YS5mb3JFYWNoKGE9PntsLmluY2x1ZGVzKGEuQkFTRV9DT0wpfHxsLnB1c2goYS5CQVNFX0NPTCl9KSxsfSkoKS5mb3JFYWNoKGE9PntsZXQgZD0hMTt0aGlzLmRxcnVsZXMubGVuZ3RoPjAmJnRoaXMuZHFydWxl'@;
put 'cy5mb3JFYWNoKGg9PntoLkJBU0VfQ09MPT09YSYmKCJTT0ZUU0VMRUNUIj09PWguUlVMRV9UWVBFfHwiSEFSRFNFTEVDVCI9PT1oLlJVTEVfVFlQRSkmJihkPSEwKX0pLGR8fHRoaXMuZHFydWxlcy5wdXNoKHtCQVNFX0NPTDphLFJVTEVfVFlQRToiU09GVFNFTEVDVCIsUlVMRV9WQUxVRTph'@;
put 'LFg6MX0pfSl9c2V0dXBWYWxpZGF0aW9ucygpe2ZvcihsZXQgbD0wO2w8dGhpcy5ydWxlcy5sZW5ndGg7bCsrKXtjb25zdCBhPXRoaXMucnVsZXNbbF0uZGF0YXx8IiI7aWYoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hKXtpZih0aGlzLmlzRHFDb2woYSkpe2xldCBoPXRo'@;
put 'aXMuZ2V0RHFEcm9wZG93blNvdXJjZSh0aGlzLnJ1bGVzW2xdKTtoLmxlbmd0aD4wJiYodGhpcy5ydWxlc1tsXS5zb3VyY2U9aCx0aGlzLnJ1bGVzW2xdLnR5cGU9ImF1dG9jb21wbGV0ZSIsdGhpcy5ydWxlc1tsXS5maWx0ZXI9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVCJd'@;
put 'KSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNE'@;
put 'cVJ1bGVzKGEsWyJIQVJEU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKGEsWyJOT1ROVUxMIl0pJiYodGhpcy5ydWxlc1tsXS5hbGxvd0VtcHR5PSExKX0idHJ1ZSI9PT10aGlzLnJ1bGVzW2xdLmNvcnJlY3RGb3JtYXQmJih0aGlzLnJ1'@;
put 'bGVzW2xdLmNvcnJlY3RGb3JtYXQ9ITApLHRoaXMuc2V0RGVmYXVsdFZhbGlkYXRvcih0aGlzLGwpLHRoaXMuc2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKX19dGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaCgwKX1zZXREZWZhdWx0VmFsaWRhdG9yKGws'@;
put 'YSl7dGhpcy5ydWxlc1thXS52YWxpZGF0b3I9ZnVuY3Rpb24oZCxoKXtjb25zdCBmPWwucnVsZXNbYV0uZGF0YT8udG9TdHJpbmcoKSxfPWwucnVsZXNbYV0udHlwZXx8IiI7bGV0IFQ9bnVsbDtyZXR1cm4iYXV0b2NvbXBsZXRlIiE9PXRoaXMuZWRpdG9yfHwobC5nZXRIYW5kc29udGFibGVW'@;
put 'YWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLFc9PntUPVd9KSxUKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoXykuY2FsbCh0aGlzLGQsVz0+e1Q9V30pLFQ/bC5sZW5ndGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLF8pP2wuaXNEcUNvbChmfHwiIikmJiEoKGMs'@;
put 'bCk9Pntmb3IobGV0IGEgb2YgYylpZihPb2VbYS5SVUxFX1RZUEVdJiYhT29lW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNvbnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxF'@;
put 'X1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShsLmdldERxRGV0YWlscyhmfHwiIiksZCk/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQg'@;
put 'aCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKSk6'@;
put 'KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSl9fWxlbmd0aENoZWNrKGwsYSxkKXtpZigoMCx0My5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09bHx8bnVsbD09YSlyZXR1cm4h'@;
put 'MDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNvbGUud2FybigiaW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgi'@;
put 'KSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgmJmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVtZXJpY3MgY2Fubm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNl'@;
put 'IDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4gbDw9MTM3NDM4OTUzNDcyO2Nhc2UgNzpyZXR1cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdl'@;
put 'dEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiBFeTtjYXNlIm51bWVyaWMiOnJldHVybiBVejtjYXNlImRhdGUiOnJldHVybiBZaztjYXNlInRpbWUiOnJldHVybiBXaztkZWZhdWx0OnJldHVybihhLGQpPT5kP2QoITApOm51bGx9'@;
put 'fWdldFJ1bGVJbmRleChsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bDp0aGlzLnJ1bGVzLmZpbmRJbmRleChhPT5hLmRhdGE9PT1sKX1zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpe2lmKCF0aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcpcmV0dXJuO2NvbnN0IGE9dGhpcy5ydWxlc1tsXTtp'@;
put 'Zih0aGlzLnByaW1hcnlLZXlzLmluY2x1ZGVzKGEuZGF0YSkmJihhLmNsc1J1bGU9IlJFQUQiKSwiSElERSI9PT1hLmNsc1J1bGUmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKGwpLCJSRUFEIj09PWEuY2xzUnVsZSYmKGEucmVhZE9ubHk9ITApLCJFRElUIj09PWEuY2xzUnVsZSl7YS5yZWFk'@;
put 'T25seT0hMTtjb25zdCBkPXRoaXMuaGlkZGVuQ29sdW1ucy5pbmRleE9mKGwpO3RoaXMuaGlkZGVuQ29sdW1ucy5zcGxpY2UoZCwxKX19fWNvbnN0IFVBPXtudW1lcmljOjAsZGVmYXVsdDoiIn0sWU5lPShjLGwpPT5jPyJhdXRvY29tcGxldGUiPT09Yz9sJiZsLnNvdXJjZT9sLnNvdXJjZVsw'@;
put 'XTpbXTpVQS5oYXNPd25Qcm9wZXJ0eShjKT9VQVtjXTpVQS5kZWZhdWx0OlVBLmRlZmF1bHQsUG9lPWM9PntsZXQgbD0oIjAiK2MuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdl'@;
put 'dFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGx9LFl6PWM9PmMuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoYy5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrYy5nZXREYXRlKCkpLnNsaWNlKC0yKSxXej1jPT5uZXcgRGF0ZShNYXRoLnJvdW5kKDg2NDAwKihjLTI1NTY5KSoxZTMp'@;
put 'KSwkTmU9KGMsbCk9Pntjb25zdCBhPVtdLGQ9W107cmV0dXJuIGwuZm9yRWFjaChoPT57LTE9PT1jLmluZGV4T2YoaCk/YS5wdXNoKGgpOmQucHVzaChoKX0pLFthLGRdfSxxTmU9KGMsbCxhLGQsaCxmLF8pPT4obC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxjbHItaWNvbiBz'@;
put 'aGFwZT0iZXhjbGFtYXRpb24tY2lyY2xlIiBzdGF0dXM9Indhcm5pbmciPjwvY2xyLWljb24+YCxsKSxHej0oYyxsLGEsZCxoLGYsXyk9PihsLmlubmVySFRNTD1mfHwiIixsKSxLTmU9KGMsbCxhLGQsaCxmLF8pPT4obC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxzcGFuIGNs'@;
put 'YXNzPSJzcGlubmVyIHNwaW5uZXItc20gdmVydGljYWwtYWxpZ24tbWlkZGxlIj48L3NwYW4+YCxsKSwkej1jPT4hIS9eLXswLDF9XGQrJC8udGVzdChjKSxGb2U9Yz0+ISEvXlxkK1wuXGQrJC8udGVzdChjKSxxej1mdW5jdGlvbiBKTmUoYyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBjfHxs'@;
put 'OChjKSYmIltvYmplY3QgU3ltYm9sXSI9PWk4KGMpfTt2YXIgUU5lPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGVWZT0vXlx3KiQvO2Z1bmN0aW9uIEt6KGMsbCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGN8fG51bGwhPWwmJiJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgYT1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cyxoPWw/bC5hcHBseSh0aGlzLGQpOmRbMF0sZj1hLmNhY2hlO2lmKGYuaGFzKGgpKXJldHVybiBmLmdldChoKTt2YXIgXz1jLmFwcGx5KHRo'@;
put 'aXMsZCk7cmV0dXJuIGEuY2FjaGU9Zi5zZXQoaCxfKXx8ZixffTtyZXR1cm4gYS5jYWNoZT1uZXcoS3ouQ2FjaGV8fGdQKSxhfUt6LkNhY2hlPWdQO2NvbnN0IGlWZT1Lejt2YXIgbFZlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4p'@;
put 'Kj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGNWZT0vXFwoXFwpPy9nLHVWZT1mdW5jdGlvbiBzVmUoYyl7dmFyIGw9aVZlKGMsZnVuY3Rpb24oZCl7cmV0dXJuIDUwMD09PWEuc2l6ZSYmYS5jbGVhcigpLGR9KSxhPWwuY2FjaGU7cmV0dXJuIGx9KGZ1bmN0aW9uKGMp'@;
put 'e3ZhciBsPVtdO3JldHVybiA0Nj09PWMuY2hhckNvZGVBdCgwKSYmbC5wdXNoKCIiKSxjLnJlcGxhY2UobFZlLGZ1bmN0aW9uKGEsZCxoLGYpe2wucHVzaChoP2YucmVwbGFjZShjVmUsIiQxIik6ZHx8YSl9KSxsfSk7Y29uc3QgZFZlPXVWZTt2YXIgSG9lPW1wP21wLnByb3RvdHlwZTp2b2lk'@;
put 'IDAsTm9lPUhvZT9Ib2UudG9TdHJpbmc6dm9pZCAwO2NvbnN0IGdWZT1mdW5jdGlvbiBWb2UoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBjO2lmKGM4KGMpKXJldHVybiBmdW5jdGlvbiBoVmUoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5ndGgsaD1BcnJheShk'@;
put 'KTsrK2E8ZDspaFthXT1sKGNbYV0sYSxjKTtyZXR1cm4gaH0oYyxWb2UpKyIiO2lmKHF6KGMpKXJldHVybiBOb2U/Tm9lLmNhbGwoYyk6IiI7dmFyIGw9YysiIjtyZXR1cm4iMCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LGJWZT1mdW5jdGlvbiBfVmUoYyxsKXtyZXR1cm4gYzgoYyk/YzpmdW5j'@;
put 'dGlvbiB0VmUoYyxsKXtpZihjOChjKSlyZXR1cm4hMTt2YXIgYT10eXBlb2YgYztyZXR1cm4hKCJudW1iZXIiIT1hJiYic3ltYm9sIiE9YSYmImJvb2xlYW4iIT1hJiZudWxsIT1jJiYhcXooYykpfHxlVmUudGVzdChjKXx8IVFOZS50ZXN0KGMpfHxudWxsIT1sJiZjIGluIE9iamVjdChsKX0o'@;
put 'YyxsKT9bY106ZFZlKGZ1bmN0aW9uIG1WZShjKXtyZXR1cm4gbnVsbD09Yz8iIjpnVmUoYyl9KGMpKX0sQ1ZlPWZ1bmN0aW9uIHdWZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGN8fHF6KGMpKXJldHVybiBjO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSxpbD1m'@;
put 'dW5jdGlvbiB4VmUoYyxsLGEpe3ZhciBkPW51bGw9PWM/dm9pZCAwOmZ1bmN0aW9uIFNWZShjLGwpe2Zvcih2YXIgYT0wLGQ9KGw9YlZlKGwsYykpLmxlbmd0aDtudWxsIT1jJiZhPGQ7KWM9Y1tDVmUobFthKytdKV07cmV0dXJuIGEmJmE9PWQ/Yzp2b2lkIDB9KGMsbCk7cmV0dXJuIHZvaWQg'@;
put 'MD09PWQ/YTpkfTtsZXQgYmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yZXNwb25zZT1uZXcgYmUsdGhpcy5jaGFuZ2VkVGFibGU9bmV3IGJlLHRoaXMuZGV0'@;
put 'YWlscz1uZXcgYmUsdGhpcy5kaWZmcz1uZXcgYmUsdGhpcy5jb2x1bW5zPW5ldyBiZSx0aGlzLnZhbHVlcz1uZXcgYmUsdGhpcy5maWx0ZXI9bmV3IGJlLHRoaXMucXVlcnk9bmV3IGJlLHRoaXMuc3VibWl0dERldGFpbD1uZXcgYmUsdGhpcy5yZW1vdmVRdWVyeT1uZXcgYmUsdGhpcy5zZXRT'@;
put 'dWJtaXQ9bmV3IGJlLHRoaXMuc2V0U3VibWl0TGlzdD1uZXcgYmV9Y2FsbFNlcnZpY2UoYSxkLGgsZil7dmFyIF89dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Xy5saWJkcz1mO2NvbnN0IFQ9e307cmV0dXJuIFRbZF09W2FdLHtkYXRhOnlpZWxkIF8uc2FzU2VydmljZS5yZXF1ZXN0KGgs'@;
put 'VCksbGliZHM6Xy5saWJkc319KSgpfXVwZGF0ZVRhYmxlKGEsZCxoLGYsXyl7dmFyIFQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IFc9e2pzZGF0YTpkfTtpZihfKXtsZXQgcGU9VC5wYXJzZUZvcm1hdHMoXyk7Vy4kanNkYXRhPXtmb3JtYXRzOnBlfX1yZXR1cm4gV1toXT1bYV0s'@;
put 'eWllbGQgVC5zYXNTZXJ2aWNlLnJlcXVlc3QoZixXKX0pKCl9Z2V0QXBwcm92YWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfKX0pKCl9c2VuZERldGFpbHMoYSxk'@;
put 'LGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPU9iamVjdC5hc3NpZ24oe3N1YjohMH0sYSk7Zi5zdWJtaXR0RGV0YWlsLm5leHQoe2RhdGE6aFtkXSx2aWV3RGF0YTpffSl9KSgpfWdldFN1Ym1pdHRzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7'@;
put 'cmV0dXJuIHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHN1Ym1pdHMiLG51bGwpfSkoKX12aWV3TGlicygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKX0pKCl9'@;
put 'cmVmcmVzaExpYkluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVmcmVzaGxpYmluZm8iLHtsaWIycmVmcmVzaDpbe2xpYnJlZjphfV19KX0pKCl9dmVyc2lvbkhpc3RvcnkoYSl7dmFyIGQ9dGhpczty'@;
put 'ZXR1cm4gZmkoZnVuY3Rpb24qKCl7Y29uc3QgaD17aXdhbnQ6W3tMSUJEUzphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldHZlcnNpb25oaXN0b3J5IixoKX0pKCl9dmlld1RhYmxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXts'@;
put 'ZXQgaD17U0FTQ29udHJvbFRhYmxlOlt7TVBMSUI6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3dGFibGVzIixoKX0pKCl9dmlld0RhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxl'@;
put 'Olt7TElCRFM6YSxGSUxURVJfUks6ZH1dfTtyZXR1cm4geWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsZil9KSgpfXZpZXdEYXRhU2VhcmNoKGEsZD0hMSxoLGYpe3ZhciBfPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBXPXtTQVNDb250cm9sVGFi'@;
put 'bGU6W3tTRUFSQ0hUWVBFOmEubGVuZ3RoPjA/ZD8iTlVNIjoiQ0hBUiI6Ik5PTkUiLFNFQVJDSFZBTDphLExJQkRTOmgsRklMVEVSX1JLOmZ9XX07cmV0dXJuIHlpZWxkIF8uc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLFcpfSkoKX1nZXRYTE1hcFJ1bGVzKGEpe3ZhciBk'@;
put 'PXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2dldHhsbWFwc19pbjpbe1hMTUFQX0lEOmF9XX07cmV0dXJuIHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHhsbWFwcyIsaCl9KSgpfWdldERldGFpbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZp'@;
put 'KGZ1bmN0aW9uKigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLF8pfSkoKX1zaG93RGlmZnMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZp'@;
put 'Y2UucmVxdWVzdChoLF8se3VzZUNvbXB1dGVBcGk6ITF9KX0pKCl9cmVqZWN0aW5nKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfLHt1c2VDb21wdXRlQXBpOiExfSl9'@;
put 'KSgpfWFwcHJvdmVUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9bZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsXyl9KSgpfWdldEhpc3RvcnkoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9u'@;
put 'Kigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLF8pfSkoKX1zZXRRdWVyeVZhcmlhYmxlcyhhLGQpe3RoaXMuY29sdW1ucy5uZXh0KHtkYXRhOntjb2xzOmR9LGxpYmRzOmF9KX1nZXRDaGFuZ2VJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJu'@;
put 'IGZpKGZ1bmN0aW9uKigpe2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tUQUJMRTphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNoYW5nZWluZm8iLGYpfSkoKX1nZXRRdWVyeVZhbHVlcyhhLGQsaCxmLF8pe3ZhciBUPXRoaXM7cmV0dXJuIGZpKGZ1'@;
put 'bmN0aW9uKigpe2xldCBXPXtpd2FudDpbe2xpYmRzOmQsY29sOmEsLi4uZiYme1NUQVJUUk9XOmZ9LC4uLl8mJntST1dTOl99fV19O3JldHVybiBoLmxlbmd0aD4wJiYoVy5GSUxURVJRVUVSWT1oKSx5aWVsZCBULnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNvbHZhbHMiLFcpLmNh'@;
put 'dGNoKHBlPT57dGhyb3cgcGV9KX0pKCl9c2F2ZVF1ZXJ5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGY9e2l3YW50Olt7ZmlsdGVyX3RhYmxlOmF9XSxmaWx0ZXJxdWVyeTpkfSxfPXlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmFsaWRhdGVm'@;
put 'aWx0ZXIiLGYpO3JldHVybiBoLmZpbHRlci5uZXh0KF8pLF99KSgpfW9wZW5UYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgaD17aXdhbnQ6W3t0YWJsZV9pZDphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3Rh'@;
put 'Z2V0YWJsZSIsaCl9KSgpfWNoZWNrT3BlcmF0b3IoYSxkLGgpe2xldCBmO3N3aXRjaChhKXtjYXNlIkJFVFdFRU4iOmQgaW5zdGFuY2VvZiBBcnJheSYmKCIiIT09ZFswXSYmIiIhPT1kWzFdP2Y9ZFswXSsiIEFORCAiK2RbMV06IiIhPT1kWzBdJiYiIj09PWRbMV0/KGRbMV09Ii4iLGY9ZFsw'@;
put 'XSsiIEFORCAiK2RbMV0pOiIiPT09ZFswXSYmIiIhPT1kWzFdPyhkWzBdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKTooZFswXT0iLiIsZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSkpO2JyZWFrO2Nhc2UiSU4iOmNhc2UiTk9UIElOIjpsZXQgVD1bXTtpZih0eXBlb2YgZDwidSIpZm9y'@;
put 'KGxldCBXPTA7VzxkLmxlbmd0aDtXKyspITA9PT1kW1ddLmNoZWNrZWQmJigiY2hhciI9PT1oPygic3RyaW5nIj09dHlwZW9mIGRbV10udmFsJiYoZFtXXS52YWw9ZFtXXS52YWwucmVwbGFjZSgiJyIsIicnIikpLFQucHVzaCgiJyIrZFtXXS52YWwrIiciKSk6KG51bGw9PT1kW1ddLnZhbCYm'@;
put 'KGRbV10udmFsPSIuIiksVC5wdXNoKGRbV10udmFsKSkpO2Q9IigiK1QrIikiO2JyZWFrO2Nhc2UiQ09OVEFJTlMiOmE9Ij8iO2JyZWFrO2Nhc2UiTk9UIEVRVUFMIjphPSJuZSJ9cmV0dXJuIm51bSI9PT1oJiZudWxsPT09ZCYmKGQ9Ii4iKSwiUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1kJiYo'@;
put 'ZD0iIiksLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YoYSkmJiJudW0iPT09aCYmIiI9PT1kJiYoZD0iLiIpLCJCRVRXRUVOIj09PWE/e3ZhbHVlOmYsb3BlcmF0b3I6YX06e3ZhbHVlOmQsb3BlcmF0b3I6YX19d2hlcmVDbGF1c2VDcmVhdG9yKGEsZCxoKXtsZXQg'@;
put 'Vyx3ZSxmPSIiLGllPSIiLHBlPVtdO2ZvcihsZXQgWmU9MDtaZTxhLnF1ZXJ5T2JqLmxlbmd0aDtaZSsrKXtsZXQgaXQ9IiIsZXQ9YS5xdWVyeU9ialtaZV07Zm9yKGxldCB5dD0wO3l0PGV0LmVsZW1lbnRzLmxlbmd0aDt5dCsrKXtsZXQgU3QsRXQ9ZXQuZWxlbWVudHNbeXRdO1c9eXQ8ZXQu'@;
put 'ZWxlbWVudHMubGVuZ3RoLTE/ZXQuY2xhdXNlTG9naWM6IiI7Zm9yKGxldCBJcj0wO0lyPEV0LnZhbHVlcy5sZW5ndGg7SXIrKyl7aWYoInN0cmluZyI9PXR5cGVvZiBFdC52YWx1ZSYmIm51bWJlciI9PXR5cGVvZiBFdC52YWx1ZXNbSXJdLmZvcm1hdHRlZClFdC52YWx1ZT09PUpTT04uc3Ry'@;
put 'aW5naWZ5KEV0LnZhbHVlc1tJcl0uZm9ybWF0dGVkKSYmKFN0PUV0LnZhbHVlc1tJcl0udW5mb3JtYXR0ZWQpO2Vsc2V7bGV0IElpPSJudW1iZXIiIT10eXBlb2YgRXQudmFsdWVzW0lyXS5mb3JtYXR0ZWQmJm51bGwhPT1FdC52YWx1ZXNbSXJdLmZvcm1hdHRlZD9FdC52YWx1ZXNbSXJdLmZv'@;
put 'cm1hdHRlZC50cmltKCk6RXQudmFsdWVzW0lyXS5mb3JtYXR0ZWQ7RXQudmFsdWU9PT1JaSYmKFN0PUV0LnZhbHVlc1tJcl0udW5mb3JtYXR0ZWQpfSJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PUV0LnZhbHVlJiYtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihFdC5v'@;
put 'cGVyYXRvcikmJihTdD0iIiksKCJDT05UQUlOUyI9PT1FdC5vcGVyYXRvcnx8IkxJS0UiPT09RXQub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1FdC5vcGVyYXRvcikmJihTdD1FdC52YWx1ZSl9aWYoU3R8fChTdD1FdC52YWx1ZSksRXQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmIkJFVFdF'@;
put 'RU4iPT09RXQub3BlcmF0b3Ipe1N0PVtdLFN0LnB1c2goRXQudmFsdWVbMF0pLFN0LnB1c2goRXQudmFsdWVbMV0pO2ZvcihsZXQgSXI9MDtJcjxFdC52YWx1ZXMubGVuZ3RoO0lyKyspU3RbMF09PT1FdC52YWx1ZXNbSXJdLmZvcm1hdHRlZCYmKFN0WzBdPUV0LnZhbHVlc1tJcl0udW5mb3Jt'@;
put 'YXR0ZWQpLFN0WzFdPT09RXQudmFsdWVzW0lyXS5mb3JtYXR0ZWQmJihTdFsxXT1FdC52YWx1ZXNbSXJdLnVuZm9ybWF0dGVkKX1pZihFdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoIklOIj09PUV0Lm9wZXJhdG9yfHwiTk9UIElOIj09PUV0Lm9wZXJhdG9yKSl7U3Q9W10sU3Q9RXQudmFs'@;
put 'dWU7Zm9yKGxldCBJcj0wO0lyPEV0LnZhbHVlcy5sZW5ndGg7SXIrKylTdFtJcl0mJlN0W0lyXS52YWw9PT1FdC52YWx1ZXNbSXJdLmZvcm1hdHRlZCYmKFN0W0lyXS52YWw9RXQudmFsdWVzW0lyXS51bmZvcm1hdHRlZCl9bGV0IEp0PUV0LnR5cGU7Y29uc3Qgbm49RXQudmFsdWVWYXJpYWJs'@;
put 'ZTtsZXQgY3Isdm49bnVsbD09PUV0LnZhcmlhYmxlPyIiOkV0LnZhcmlhYmxlLE5uPW51bGw9PT1FdC5vcGVyYXRvcj8iIjpFdC5vcGVyYXRvcjtjcj10aGlzLmNoZWNrT3BlcmF0b3IoTm4sU3QsSnQpLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgY3ImJiIoIiE9PWNyWzBdJiYoY3I9Y3IucmVw'@;
put 'bGFjZSgiJyIsIicnIikpLE5uPXRoaXMuY2hlY2tPcGVyYXRvcihObixjcixKdCkub3BlcmF0b3IsImNoYXIiPT09SnQmJiJJTiIhPT1ObiYmIk5PVCBJTiIhPT1Obj8odHlwZW9mIGNyPiJ1IiYmKGNyPSIiKSxjcj1ubj8iICIrY3IrIiAiOiIgJyIrY3IrIicgIixpdD1pdCsiICIrdm4rIiAi'@;
put 'K05uK2NyK1cpOigibnVtIj09PUp0JiZ0eXBlb2YgY3I+InUiJiYoY3I9Ii4iKSxjcj10eXBlb2YgY3I+InUiPyIiOiIgIitjcisiICIsaXQ9aXQrIiAiK3ZuKyIgIitObitjcitXKX1wZS5wdXNoKGl0KX1pZT0iIjtmb3IobGV0IFplPTA7WmU8cGUubGVuZ3RoO1plKyspd2U9WmU8cGUubGVu'@;
put 'Z3RoLTE/ZDoiIixpZT0xPT09cGUubGVuZ3RoP3BlWzBdOmllKyIgKCIrcGVbWmVdKyIpICIrd2U7cmV0dXJuIGY9aWUuc3Vic3RyKDEpLnNsaWNlKDAsLTEpLGllPSJXSEVSRSIraWUrIjsiLHRoaXMucXVlcnkubmV4dCh7d2hlcmVDbGF1c2U6aWUsc3RyaW5nOmYsb2JqOmEsbGliZHM6aH0p'@;
put 'LHt3aGVyZUNsYXVzZTppZSxzdHJpbmc6Zn19Y3JlYXRlRmlsdGVyUXVlcnlUYWJsZShhKXtjb25zdCBkPVtdO3JldHVybiBhLmZpbHRlckdyb3Vwcy5mb3JFYWNoKChoLGYpPT57aC5maWx0ZXJDbGF1c2VzLmZvckVhY2goXz0+e2xldCBUPSIiOyJCRVRXRUVOIj09PV8ub3BlcmF0b3I/VD1g'@;
put 'JHtfLnZhbHVlWzBdfSBBTkQgJHtfLnZhbHVlWzFdfWA6IklOIj09PV8ub3BlcmF0b3J8fCJOT1QgSU4iPT09Xy5vcGVyYXRvcj8oXy52YWx1ZS5mb3JFYWNoKFc9PntpZihXLmNoZWNrZWQpe2NvbnN0IGllPVcudmFsOyJzdHJpbmciIT10eXBlb2YgaWV8fCgwLHQzLmlzU3BlY2lhbE1pc3Np'@;
put 'bmcpKGllKSYmImNoYXIiIT09Xy50eXBlP1QubGVuZ3RoPjA/VCs9YCwke2llfWA6VD1gKCR7aWV9YDpULmxlbmd0aD4wP1QrPWAsJyR7aWUucmVwbGFjZSgvJy9nLCInJyIpfSdgOlQ9YCgnJHtpZS5yZXBsYWNlKC8nL2csIicnIil9J2B9fSksVC5sZW5ndGg+MCYmKFQrPSIpIikpOiIiPT09'@;
put 'Xy52YWx1ZT9UPSJjaGFyIj09PV8udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09Xy50eXBlJiYhXy52YWx1ZVZhcmlhYmxlJiYoVD1gJyR7Xy52YWx1ZS5yZXBsYWNlKC8nL2csIicnIil9J2ApLGQucHVzaCh7R1JPVVBfTE9HSUM6YS5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOmguY2xhdXNl'@;
put 'TG9naWN8fCJBTkQiLFNVQkdST1VQX0lEOmYsVkFSSUFCTEVfTk06Xy52YXJpYWJsZSxPUEVSQVRPUl9OTTpfLm9wZXJhdG9yLFJBV19WQUxVRTpUfHxfLnZhbHVlfSl9KX0pLGR9aW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShhLGQpe2NvbnN0IGg9e3F1ZXJ5T2JqOltdLGNsYXVzZUxv'@;
put 'Z2ljOltdLGdyb3VwTG9naWM6aWwoR24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDfTtpbChHbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGgpLGlsKEduLGEpLmZpbHRlci5ncm91cExvZ2ljPWlsKEduLGEpLmZpbHRlci5xdWVyeVswXS5H'@;
put 'Uk9VUF9MT0dJQztsZXQgZj0iIixfPXtlbGVtZW50czpbXX0sVD0wO2lsKEduLGEpLmZpbHRlci5xdWVyeS5mb3JFYWNoKFc9Pntjb25zdCBpZT17fTtmb3IobGV0IHBlPTA7cGU8ZC5sZW5ndGg7cGUrKylpZihkW3BlXS5OQU1FPT09Vy5WQVJJQUJMRV9OTSl7aWYoZj1XLlNVQkdST1VQX0xP'@;
put 'R0lDLGllLmRkdHlwZT1kW3BlXS5ERFRZUEUsaWUudHlwZT1kW3BlXS5UWVBFLGllLm9wZXJhdG9ycz0ibnVtIj09PWRbcGVdLlRZUEU/R24ub3BlcmF0b3JzLm51bU9wZXJhdG9yczpHbi5vcGVyYXRvcnMuY2hhck9wZXJhdG9ycyxpZS5sb2dpYz1udWxsLGllLm9wZXJhdG9yPVcuT1BFUkFU'@;
put 'T1JfTk0saWUudmFyaWFibGU9Vy5WQVJJQUJMRV9OTSwiY2hhciI9PT1kW3BlXS5UWVBFKWlmKCJJTiI9PT1XLk9QRVJBVE9SX05NfHwiTk9UIElOIj09PVcuT1BFUkFUT1JfTk0pe2NvbnN0IHdlPVtdLFplPVcuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCInLCciKTsxPT09WmUubGVu'@;
put 'Z3RoP3dlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOlplWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOlplLmZvckVhY2goKGl0LGV0KT0+e3dlLnB1c2goMD09PWV0P3tjaGVja2VkOiEwLHZhbDppdC5zbGljZSgxKS5yZXBsYWNlKC8nJy9nLCInIil9OmV0PT09WmUubGVuZ3Ro'@;
put 'LTE/e2NoZWNrZWQ6ITAsdmFsOml0LnNsaWNlKDAsLTEpLnJlcGxhY2UoLycnL2csIiciKX06e2NoZWNrZWQ6ITAsdmFsOml0LnJlcGxhY2UoLycnL2csIiciKX0pfSksaWUudmFsdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh3ZSl9ZWxzZSBpZS52YWx1ZT1XLlJBV19WQUxVRS5z'@;
put 'bGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCInIik7ZWxzZSBpZigiSU4iPT09Vy5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1XLk9QRVJBVE9SX05NKXtjb25zdCB3ZT1bXTtXLlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLmZvckVhY2goKGl0LGV0KT0+e3dlLnB1c2goe2NoZWNr'@;
put 'ZWQ6ITAsdmFsOml0fSl9KSxpZS52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHdlKX1lbHNlIGlmKCJCRVRXRUVOIj09PVcuT1BFUkFUT1JfTk0pe2NvbnN0IHdlPVcuUkFXX1ZBTFVFLnNwbGl0KCIgQU5EICIpO2llLnZhbHVlPXdlfWVsc2UgaWUudmFsdWU9Vy5SQVdfVkFM'@;
put 'VUU7aWUudmFsdWVzPVtdLFQ9PT1XLlNVQkdST1VQX0lEfHwoaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKF8pKSxpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5jbGF1c2VMb2dpYz1mLGlsKEduLGEp'@;
put 'LmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW1RdLmludmFsaWRDbGF1c2U9ITEsVCsrLF8uZWxlbWVudHM9W10pLF8uZWxlbWVudHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGllKSk7YnJlYWt9fSksXy5lbGVtZW50cy5sZW5ndGg+MCYmKGlsKEduLGEpLmZpbHRlci5jbGF1'@;
put 'c2VzLnF1ZXJ5T2JqLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShfKSksaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbVF0uY2xhdXNlTG9naWM9ZixpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5pbnZhbGlkQ2xhdXNlPSExKSxpbChHbixhKS5m'@;
put 'aWx0ZXIucXVlcnk9W119cmVtb3ZlQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIGEucmVtb3ZlUXVlcnkubmV4dCghMCksITB9KSgpfXNwZWNDb252ZXJzaW9uKGEpe2xldCBkPXt9LGg9W107aWYoaD1hLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5O'@;
put 'QU1FLnRvVXBwZXJDYXNlKCl9KSxhIGluc3RhbmNlb2YgQXJyYXkpZm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspZFtoW2ZdXT0xPT09YVtmXS5UWVBFP3tjb2xUeXBlOiJudW0iLGNvbExlbmd0aDphW2ZdLkxFTkdUSH06e2NvbFR5cGU6InN0cmluZyIsY29sTGVuZ3RoOmFbZl0uTEVOR1RI'@;
put 'fTtyZXR1cm4gZH1zZXRTdWJtaXRSZWFkeSgpe3RoaXMuc2V0U3VibWl0Lm5leHQoITApfXBhcnNlRm9ybWF0cyhhKXtjb25zdCBkPXt9LGg9YS52YXJzO2ZvcihsZXQgZiBvZiBPYmplY3Qua2V5cyhoKSl7Y29uc3QgXz1oW2ZdLnR5cGUsVD1oW2ZdLmxlbmd0aDsibnVtIj09PV8/ZFtmXT0i'@;
put 'YmVzdC4iOiJjaGFyIj09PV8mJihkW2ZdPWAkY2hhciR7VH0uYCl9cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKG9hKSxhcihUYyksYXIodzApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9'@;
put 'KSxjfSkoKTtmdW5jdGlvbiBhNChjKXtyZXR1cm4gbnVsbCE9YyYmImZhbHNlIiE9YCR7Y31gfWZ1bmN0aW9uIEJvZShjLGw9MCl7cmV0dXJuIGZ1bmN0aW9uIEVWZShjKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChjKSkmJiFpc05hTihOdW1iZXIoYykpfShjKT9OdW1iZXIoYyk6bH1mdW5j'@;
put 'dGlvbiBQMChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIE5pP2MubmF0aXZlRWxlbWVudDpjfWNvbnN0IG53PXtzY2hlZHVsZShjKXtsZXQgbD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1jYW5jZWxBbmltYXRpb25GcmFtZTtjb25zdHtkZWxlZ2F0ZTpkfT1udztkJiYobD1kLnJlcXVlc3RBbmlt'@;
put 'YXRpb25GcmFtZSxhPWQuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2NvbnN0IGg9bChmPT57YT12b2lkIDAsYyhmKX0pO3JldHVybiBuZXcgZWUoKCk9PmE/LihoKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1udztyZXR1cm4obD8ucmVxdWVzdEFuaW1h'@;
put 'dGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1udztyZXR1cm4obD8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sZGVsZWdhdGU6dm9pZCAw'@;
put 'fSxqb2U9bmV3IGNsYXNzIFRWZSBleHRlbmRzIEJQe2ZsdXNoKGwpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShs'@;
put 'LnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgQVZlIGV4dGVuZHMgTlB7'@;
put 'Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8'@;
put 'fChsLl9zY2hlZHVsZWQ9bncucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5sLmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0'@;
put 'aW9uczpmfT1sO251bGwhPWEmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKG53LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpLGwuX3NjaGVkdWxlZD12b2lkIDApfX0pO2xldCBYeixEVmU9MTtjb25zdCBaQT17fTtmdW5jdGlvbiB6b2Uo'@;
put 'Yyl7cmV0dXJuIGMgaW4gWkEmJihkZWxldGUgWkFbY10sITApfWNvbnN0IElWZT17c2V0SW1tZWRpYXRlKGMpe2NvbnN0IGw9RFZlKys7cmV0dXJuIFpBW2xdPSEwLFh6fHwoWHo9UHJvbWlzZS5yZXNvbHZlKCkpLFh6LnRoZW4oKCk9PnpvZShsKSYmYygpKSxsfSxjbGVhckltbWVkaWF0ZShj'@;
put 'KXt6b2UoYyl9fSx7c2V0SW1tZWRpYXRlOkxWZSxjbGVhckltbWVkaWF0ZTpSVmV9PUlWZSxZQT17c2V0SW1tZWRpYXRlKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PVlBO3JldHVybihsPy5zZXRJbW1lZGlhdGV8fExWZSkoLi4uYyl9LGNsZWFySW1tZWRpYXRlKGMpe2NvbnN0e2RlbGVnYXRl'@;
put 'Omx9PVlBO3JldHVybihsPy5jbGVhckltbWVkaWF0ZXx8UlZlKShjKX0sZGVsZWdhdGU6dm9pZCAwfTtuZXcgY2xhc3MgUFZlIGV4dGVuZHMgQlB7Zmx1c2gobCl7dGhpcy5fYWN0aXZlPSEwO2NvbnN0IGE9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7Y29uc3R7YWN0'@;
put 'aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlm'@;
put 'dCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBPVmUgZXh0ZW5kcyBOUHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1'@;
put 'ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD1ZQS5zZXRJbW1lZGlhdGUobC5mbHVzaC5iaW5kKGwsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlzLmRlbGF5'@;
put 'PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYoWUEuY2xlYXJJbW1lZGlhdGUoYSksbC5fc2NoZWR1bGVkPT09YSYmKGwu'@;
put 'X3NjaGVkdWxlZD12b2lkIDApKX19KTtmdW5jdGlvbiBVb2UoYyxsPWliKXtyZXR1cm4gZnVuY3Rpb24gSFZlKGMpe3JldHVybiBYZSgobCxhKT0+e2xldCBkPSExLGg9bnVsbCxmPW51bGwsXz0hMTtjb25zdCBUPSgpPT57aWYoZj8udW5zdWJzY3JpYmUoKSxmPW51bGwsZCl7ZD0hMTtjb25z'@;
put 'dCBpZT1oO2g9bnVsbCxhLm5leHQoaWUpfV8mJmEuY29tcGxldGUoKX0sVz0oKT0+e2Y9bnVsbCxfJiZhLmNvbXBsZXRlKCl9O2wuc3Vic2NyaWJlKFVlKGEsaWU9PntkPSEwLGg9aWUsZnx8S3IoYyhpZSkpLnN1YnNjcmliZShmPVVlKGEsVCxXKSl9LCgpPT57Xz0hMCwoIWR8fCFmfHxmLmNs'@;
put 'b3NlZCkmJmEuY29tcGxldGUoKX0pKX0pfSgoKT0+alAoYyxsKSl9bGV0IEp6O3RyeXtKej10eXBlb2YgSW50bDwidSImJkludGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe0p6PSExfWxldCBydyxReixab2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybUlkPWEs'@;
put 'dGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9Scyh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5U'@;
put 'PXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFKeikmJnR5cGVvZiBDU1M8InUiJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lU'@;
put 'PXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2Vu'@;
put 'dCkmJiEoIk1TU3RyZWFtImluIHdpbmRvdyksdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJB'@;
put 'Z2VudCkmJiF0aGlzLlRSSURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoR3MpKX0sYy5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBpdyhjKXtyZXR1cm4gZnVuY3Rpb24gTlZlKCl7aWYobnVsbD09cncmJnR5cGVvZiB3aW5kb3c8InUiKXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIs'@;
put 'bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6KCk9PnJ3PSEwfSkpfWZpbmFsbHl7cnc9cnd8fCExfXJldHVybiByd30oKT9jOiEhYy5jYXB0dXJlfWZ1bmN0aW9uIFdvZShjKXtpZihmdW5jdGlvbiBWVmUoKXtpZihudWxsPT1Reil7Y29uc3QgYz10eXBlb2Yg'@;
put 'ZG9jdW1lbnQ8InUiP2RvY3VtZW50LmhlYWQ6bnVsbDtRej0hKCFjfHwhYy5jcmVhdGVTaGFkb3dSb290JiYhYy5hdHRhY2hTaGFkb3cpfXJldHVybiBRen0oKSl7Y29uc3QgbD1jLmdldFJvb3ROb2RlP2MuZ2V0Um9vdE5vZGUoKTpudWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hh'@;
put 'ZG93Um9vdCYmbCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gR0EoYyl7cmV0dXJuIGMuY29tcG9zZWRQYXRoP2MuY29tcG9zZWRQYXRoKClbMF06Yy50YXJnZXR9bGV0IGpWZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlz'@;
put 'Ll9uZ1pvbmU9YSx0aGlzLl9wbGF0Zm9ybT1kLHRoaXMuX3Njcm9sbGVkPW5ldyBiZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9aH1yZWdpc3RlcihhKXt0aGlz'@;
put 'LnNjcm9sbENvbnRhaW5lcnMuaGFzKGEpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGEsYS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoYSkpKX1kZXJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5zY3JvbGxDb250YWluZXJzLmdldChhKTtk'@;
put 'JiYoZC51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5kZWxldGUoYSkpfXNjcm9sbGVkKGE9MjApe3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/bmV3IEtlKGQ9Pnt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb258fHRoaXMuX2FkZEdsb2JhbExpc3RlbmVyKCk7Y29u'@;
put 'c3QgaD1hPjA/dGhpcy5fc2Nyb2xsZWQucGlwZShVb2UoYSkpLnN1YnNjcmliZShkKTp0aGlzLl9zY3JvbGxlZC5zdWJzY3JpYmUoZCk7cmV0dXJuIHRoaXMuX3Njcm9sbGVkQ291bnQrKywoKT0+e2gudW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxlZENvdW50LS0sdGhpcy5fc2Nyb2xsZWRD'@;
put 'b3VudHx8dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpXaSgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoYSxkKT0+dGhpcy5kZXJlZ2lzdGVyKGQpKSx0aGlzLl9zY3JvbGxlZC5jb21wbGV0'@;
put 'ZSgpfWFuY2VzdG9yU2Nyb2xsZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpO3JldHVybiB0aGlzLnNjcm9sbGVkKGQpLnBpcGUoSWEoZj0+IWZ8fGguaW5kZXhPZihmKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhhKXtjb25zdCBk'@;
put 'PVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoaCxmKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZixhKSYmZC5wdXNoKGYpfSksZH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFi'@;
put 'bGVDb250YWluc0VsZW1lbnQoYSxkKXtsZXQgaD1QMChkKSxmPWEuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYoaD09ZilyZXR1cm4hMH13aGlsZShoPWgucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0'@;
put 'aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bjIodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9u'@;
put 'JiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIoWm9lKSxhcihMcyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksVVZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3BsYXRmb3JtPWEsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLl9jaGFuZ2VMaXN0ZW5lcj1mPT57dGhpcy5fY2hhbmdl'@;
put 'Lm5leHQoZil9LHRoaXMuX2RvY3VtZW50PWgsZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKGEuaXNCcm93c2VyKXtjb25zdCBmPXRoaXMuX2dldFdpbmRvdygpO2YuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksZi5hZGRFdmVudExpc3RlbmVyKCJv'@;
put 'cmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTth'@;
put 'LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0aGlzLl92'@;
put 'aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IGE9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6'@;
put 'ZT1udWxsKSxhfWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IGE9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDphLnRvcCxsZWZ0OmEubGVmdCxib3R0b206YS50b3AraCxyaWdodDphLmxl'@;
put 'ZnQrZCxoZWlnaHQ6aCx3aWR0aDpkfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCBhPXRoaXMuX2RvY3VtZW50LGQ9dGhpcy5fZ2V0V2luZG93KCksaD1hLmRvY3VtZW50RWxlbWVudCxm'@;
put 'PWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotZi50b3B8fGEuYm9keS5zY3JvbGxUb3B8fGQuc2Nyb2xsWXx8aC5zY3JvbGxUb3B8fDAsbGVmdDotZi5sZWZ0fHxhLmJvZHkuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxYfHxoLnNjcm9sbExlZnR8fDB9fWNoYW5nZShhPTIwKXty'@;
put 'ZXR1cm4gYT4wP3RoaXMuX2NoYW5nZS5waXBlKFVvZShhKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTt0aGlzLl92aWV3cG9y'@;
put 'dFNpemU9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDphLmlubmVyV2lkdGgsaGVpZ2h0OmEuaW5uZXJIZWlnaHR9Ont3aWR0aDowLGhlaWdodDowfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoWm9lKSxhcihObyksYXIoTHMsOCkp'@;
put 'fSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFpWZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30p'@;
put 'LGMuXHUwMjc1aW5qPW1pKHt9KSxjfSkoKTtjb25zdCBhQmU9bmV3IFNpKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gbEJlKCl7cmV0dXJuIEZpKExzKX19KSxjQmU9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlst'@;
put 'X10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2k7bGV0IEtvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmFsdWU9Imx0ciIsdGhpcy5jaGFuZ2U9bmV3IEVyLGEmJih0aGlzLnZhbHVlPWZ1bmN0'@;
put 'aW9uIHVCZShjKXtjb25zdCBsPWM/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PWwmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP2NCZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT1sPyJydGwiOiJsdHIifSgo'@;
put 'YS5ib2R5P2EuYm9keS5kaXI6bnVsbCl8fChhLmRvY3VtZW50RWxlbWVudD9hLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShhcihhQmUsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9uIGVVKGMsbCxhKXtmb3IobGV0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07aD9jLnNldFBy'@;
put 'b3BlcnR5KGQsaCxhPy5oYXMoZCk/ImltcG9ydGFudCI6IiIpOmMucmVtb3ZlUHJvcGVydHkoZCl9cmV0dXJuIGN9ZnVuY3Rpb24gejcoYyxsKXtjb25zdCBhPWw/IiI6Im5vbmUiO2VVKGMuc3R5bGUseyJ0b3VjaC1hY3Rpb24iOmw/IiI6Im5vbmUiLCItd2Via2l0LXVzZXItZHJhZyI6bD8i'@;
put 'Ijoibm9uZSIsIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciI6bD8iIjoidHJhbnNwYXJlbnQiLCJ1c2VyLXNlbGVjdCI6YSwiLW1zLXVzZXItc2VsZWN0IjphLCItd2Via2l0LXVzZXItc2VsZWN0IjphLCItbW96LXVzZXItc2VsZWN0IjphfSl9ZnVuY3Rpb24gWG9lKGMsbCxhKXtlVShj'@;
put 'LnN0eWxlLHtwb3NpdGlvbjpsPyIiOiJmaXhlZCIsdG9wOmw/IiI6IjAiLG9wYWNpdHk6bD8iIjoiMCIsbGVmdDpsPyIiOiItOTk5ZW0ifSxhKX1mdW5jdGlvbiAkQShjLGwpe3JldHVybiBsJiYibm9uZSIhPWw/YysiICIrbDpjfWZ1bmN0aW9uIEpvZShjKXtjb25zdCBsPWMudG9Mb3dlckNh'@;
put 'c2UoKS5pbmRleE9mKCJtcyIpPi0xPzE6MWUzO3JldHVybiBwYXJzZUZsb2F0KGMpKmx9ZnVuY3Rpb24gdFUoYyxsKXtyZXR1cm4gYy5nZXRQcm9wZXJ0eVZhbHVlKGwpLnNwbGl0KCIsIikubWFwKGQ9PmQudHJpbSgpKX1mdW5jdGlvbiBuVShjKXtjb25zdCBsPWMuZ2V0Qm91bmRpbmdDbGll'@;
put 'bnRSZWN0KCk7cmV0dXJue3RvcDpsLnRvcCxyaWdodDpsLnJpZ2h0LGJvdHRvbTpsLmJvdHRvbSxsZWZ0OmwubGVmdCx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCx4OmwueCx5OmwueX19ZnVuY3Rpb24gclUoYyxsLGEpe2NvbnN0e3RvcDpkLGJvdHRvbTpoLGxlZnQ6ZixyaWdodDpf'@;
put 'fT1jO3JldHVybiBhPj1kJiZhPD1oJiZsPj1mJiZsPD1ffWZ1bmN0aW9uIG93KGMsbCxhKXtjLnRvcCs9bCxjLmJvdHRvbT1jLnRvcCtjLmhlaWdodCxjLmxlZnQrPWEsYy5yaWdodD1jLmxlZnQrYy53aWR0aH1mdW5jdGlvbiBRb2UoYyxsLGEsZCl7Y29uc3R7dG9wOmgscmlnaHQ6Zixib3R0'@;
put 'b206XyxsZWZ0OlQsd2lkdGg6VyxoZWlnaHQ6aWV9PWMscGU9VypsLHdlPWllKmw7cmV0dXJuIGQ+aC13ZSYmZDxfK3dlJiZhPlQtcGUmJmE8ZitwZX1jbGFzcyBlc2V7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnBvc2l0aW9ucz1uZXcgTWFwfWNsZWFyKCl7dGhpcy5w'@;
put 'b3NpdGlvbnMuY2xlYXIoKX1jYWNoZShsKXt0aGlzLmNsZWFyKCksdGhpcy5wb3NpdGlvbnMuc2V0KHRoaXMuX2RvY3VtZW50LHtzY3JvbGxQb3NpdGlvbjp0aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX0pLGwuZm9yRWFjaChhPT57dGhpcy5wb3NpdGlvbnMuc2V0KGEse3Njcm9s'@;
put 'bFBvc2l0aW9uOnt0b3A6YS5zY3JvbGxUb3AsbGVmdDphLnNjcm9sbExlZnR9LGNsaWVudFJlY3Q6blUoYSl9KX0pfWhhbmRsZVNjcm9sbChsKXtjb25zdCBhPUdBKGwpLGQ9dGhpcy5wb3NpdGlvbnMuZ2V0KGEpO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5zY3JvbGxQb3NpdGlvbjts'@;
put 'ZXQgZixfO2lmKGE9PT10aGlzLl9kb2N1bWVudCl7Y29uc3QgaWU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7Zj1pZS50b3AsXz1pZS5sZWZ0fWVsc2UgZj1hLnNjcm9sbFRvcCxfPWEuc2Nyb2xsTGVmdDtjb25zdCBUPWgudG9wLWYsVz1oLmxlZnQtXztyZXR1cm4gdGhpcy5w'@;
put 'b3NpdGlvbnMuZm9yRWFjaCgoaWUscGUpPT57aWUuY2xpZW50UmVjdCYmYSE9PXBlJiZhLmNvbnRhaW5zKHBlKSYmb3coaWUuY2xpZW50UmVjdCxULFcpfSksaC50b3A9ZixoLmxlZnQ9Xyx7dG9wOlQsbGVmdDpXfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJue3RvcDp3aW5k'@;
put 'b3cuc2Nyb2xsWSxsZWZ0OndpbmRvdy5zY3JvbGxYfX19ZnVuY3Rpb24gdHNlKGMpe2NvbnN0IGw9Yy5jbG9uZU5vZGUoITApLGE9bC5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIiksZD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7bC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Zm9yKGxldCBoPTA7'@;
put 'aDxhLmxlbmd0aDtoKyspYVtoXS5yZW1vdmVBdHRyaWJ1dGUoImlkIik7cmV0dXJuImNhbnZhcyI9PT1kP2lzZShjLGwpOigiaW5wdXQiPT09ZHx8InNlbGVjdCI9PT1kfHwidGV4dGFyZWEiPT09ZCkmJnJzZShjLGwpLG5zZSgiY2FudmFzIixjLGwsaXNlKSxuc2UoImlucHV0LCB0ZXh0YXJl'@;
put 'YSwgc2VsZWN0IixjLGwscnNlKSxsfWZ1bmN0aW9uIG5zZShjLGwsYSxkKXtjb25zdCBoPWwucXVlcnlTZWxlY3RvckFsbChjKTtpZihoLmxlbmd0aCl7Y29uc3QgZj1hLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7Zm9yKGxldCBfPTA7XzxoLmxlbmd0aDtfKyspZChoW19dLGZbX10pfX1sZXQgaEJl'@;
put 'PTA7ZnVuY3Rpb24gcnNlKGMsbCl7ImZpbGUiIT09bC50eXBlJiYobC52YWx1ZT1jLnZhbHVlKSwicmFkaW8iPT09bC50eXBlJiZsLm5hbWUmJihsLm5hbWU9YG1hdC1jbG9uZS0ke2wubmFtZX0tJHtoQmUrK31gKX1mdW5jdGlvbiBpc2UoYyxsKXtjb25zdCBhPWwuZ2V0Q29udGV4dCgiMmQi'@;
put 'KTtpZihhKXRyeXthLmRyYXdJbWFnZShjLDAsMCl9Y2F0Y2h7fX1jb25zdCBvc2U9aXcoe3Bhc3NpdmU6ITB9KSxxQT1pdyh7cGFzc2l2ZTohMX0pLGlVPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBwQmV7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhKCF0aGlz'@;
put 'Ll9kcm9wQ29udGFpbmVyfHwhdGhpcy5fZHJvcENvbnRhaW5lci5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKGwpe2NvbnN0IGE9YTQobCk7YSE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9YSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxl'@;
put 'cy5mb3JFYWNoKGQ9Pno3KGQsYSkpKX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7dGhpcy5fY29uZmlnPWEsdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1fLHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09'@;
put 'e3g6MCx5OjB9LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSExLHRoaXMuX21vdmVFdmVudHM9bmV3IGJlLHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uPWVlLkVNUFRZLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj1lZS5F'@;
put 'TVBUWSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPWVlLkVNUFRZLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1udWxsLHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9ITAsdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxl'@;
put 'ZEhhbmRsZXM9bmV3IFNldCx0aGlzLl9kaXJlY3Rpb249Imx0ciIsdGhpcy5kcmFnU3RhcnREZWxheT0wLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgYmUsdGhpcy5zdGFydGVkPW5ldyBiZSx0aGlzLnJlbGVhc2VkPW5ldyBiZSx0aGlzLmVuZGVkPW5ldyBiZSx0'@;
put 'aGlzLmVudGVyZWQ9bmV3IGJlLHRoaXMuZXhpdGVkPW5ldyBiZSx0aGlzLmRyb3BwZWQ9bmV3IGJlLHRoaXMubW92ZWQ9dGhpcy5fbW92ZUV2ZW50cyx0aGlzLl9wb2ludGVyRG93bj1UPT57aWYodGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3Qg'@;
put 'Vz10aGlzLl9nZXRUYXJnZXRIYW5kbGUoVCk7VyYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoVykmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKFcsVCl9ZWxzZSB0aGlzLmRpc2FibGVkfHx0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHRoaXMu'@;
put 'X3Jvb3RFbGVtZW50LFQpfSx0aGlzLl9wb2ludGVyTW92ZT1UPT57Y29uc3QgVz10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoVCk7aWYoIXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyl7aWYoTWF0aC5hYnMoVy54LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpK01hdGguYWJz'@;
put 'KFcueS10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KT49dGhpcy5fY29uZmlnLmRyYWdTdGFydFRocmVzaG9sZCl7Y29uc3QgWmU9RGF0ZS5ub3coKT49dGhpcy5fZHJhZ1N0YXJ0VGltZSt0aGlzLl9nZXREcmFnU3RhcnREZWxheShUKSxpdD10aGlzLl9kcm9wQ29udGFpbmVyO2lmKCFa'@;
put 'ZSlyZXR1cm4gdm9pZCB0aGlzLl9lbmREcmFnU2VxdWVuY2UoVCk7KCFpdHx8IWl0LmlzRHJhZ2dpbmcoKSYmIWl0LmlzUmVjZWl2aW5nKCkpJiYoVC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz0hMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9zdGFydERy'@;
put 'YWdTZXF1ZW5jZShUKSkpfXJldHVybn1ULnByZXZlbnREZWZhdWx0KCk7Y29uc3QgaWU9dGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24oVyk7aWYodGhpcy5faGFzTW92ZWQ9ITAsdGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPVcsdGhpcy5fdXBkYXRlUG9pbnRlckRp'@;
put 'cmVjdGlvbkRlbHRhKGllKSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoaWUsVyk7ZWxzZXtjb25zdCBwZT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2luaXRpYWxDbGllbnRSZWN0OnRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLHdl'@;
put 'PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybTt3ZS54PWllLngtcGUueCt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLngsd2UueT1pZS55LXBlLnkrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55LHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0od2UueCx3ZS55KX10aGlzLl9tb3ZlRXZlbnRzLm9i'@;
put 'c2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9tb3ZlRXZlbnRzLm5leHQoe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjppZSxldmVudDpULGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShpZSksZGVsdGE6dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRl'@;
put 'bHRhfSl9KX0sdGhpcy5fcG9pbnRlclVwPVQ9Pnt0aGlzLl9lbmREcmFnU2VxdWVuY2UoVCl9LHRoaXMuX25hdGl2ZURyYWdTdGFydD1UPT57aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IFc9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKFQpO1cmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMu'@;
put 'aGFzKFcpJiYhdGhpcy5kaXNhYmxlZCYmVC5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgdGhpcy5kaXNhYmxlZHx8VC5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLndpdGhSb290RWxlbWVudChsKS53aXRoUGFyZW50KGEucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5l'@;
put 'dyBlc2UoZCksXy5yZWdpc3RlckRyYWdJdGVtKHRoaXMpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dp'@;
put 'bmcoKT90aGlzLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnRoaXMuZ2V0Um9vdEVsZW1lbnQoKX13aXRoSGFuZGxlcyhsKXt0aGlzLl9oYW5kbGVzPWwubWFwKGQ9PlAwKGQpKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+ejcoZCx0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZl'@;
put 'RHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmZvckVhY2goZD0+e3RoaXMuX2hhbmRsZXMuaW5kZXhPZihkKT4tMSYmYS5hZGQoZCl9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9YSx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUo'@;
put 'bCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1sLHRoaXN9d2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bCx0aGlzfXdpdGhSb290RWxlbWVudChsKXtjb25zdCBhPVAwKGwpO3JldHVybiBhIT09dGhpcy5fcm9vdEVsZW1l'@;
put 'bnQmJih0aGlzLl9yb290RWxlbWVudCYmdGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixxQSks'@;
put 'YS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvc2UpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQscUEpfSksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fcm9vdEVsZW1lbnQ9YSks'@;
put 'dHlwZW9mIFNWR0VsZW1lbnQ8InUiJiZ0aGlzLl9yb290RWxlbWVudCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQmJih0aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcm9vdEVsZW1lbnQub3duZXJTVkdFbGVtZW50KSx0aGlzfXdpdGhCb3VuZGFyeUVsZW1lbnQobCl7cmV0dXJuIHRoaXMuX2Jv'@;
put 'dW5kYXJ5RWxlbWVudD1sP1AwKGwpOm51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksbCYmKHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxMCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jb250YWluSW5zaWRlQm91bmRh'@;
put 'cnlPblJlc2l6ZSgpKSksdGhpc313aXRoUGFyZW50KGwpe3JldHVybiB0aGlzLl9wYXJlbnREcmFnUmVmPWwsdGhpc31kaXNwb3NlKCl7dGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuaXNEcmFnZ2luZygpJiZ0aGlzLl9yb290RWxlbWVu'@;
put 'dD8ucmVtb3ZlKCksdGhpcy5fYW5jaG9yPy5yZW1vdmUoKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRHJhZ0l0ZW0odGhpcyksdGhpcy5fcmVtb3ZlU3Vic2NyaXB0aW9ucygpLHRoaXMuYmVm'@;
put 'b3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuc3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVsZWFzZWQuY29tcGxldGUoKSx0aGlzLmVuZGVkLmNvbXBsZXRlKCksdGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhpcy5leGl0ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0'@;
put 'aGlzLl9tb3ZlRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxlZEhhbmRsZXMuY2xlYXIoKSx0aGlzLl9kcm9wQ29udGFpbmVyPXZvaWQgMCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xl'@;
put 'YXIoKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9dGhpcy5fcm9vdEVsZW1lbnQ9dGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9dGhpcy5fcHJldmlld1RlbXBsYXRlPXRoaXMuX2FuY2hvcj10aGlzLl9wYXJlbnREcmFnUmVmPW51bGx9aXNEcmFnZ2luZygp'@;
put 'e3JldHVybiB0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcmJnRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKX1yZXNldCgpe3RoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtfHwiIix0aGlzLl9hY3RpdmVUcmFuc2Zvcm09'@;
put 'e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9fWRpc2FibGVIYW5kbGUobCl7IXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJnRoaXMuX2hhbmRsZXMuaW5kZXhPZihsKT4tMSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5hZGQobCksejcobCwhMCkpfWVuYWJs'@;
put 'ZUhhbmRsZShsKXt0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmRlbGV0ZShsKSx6NyhsLHRoaXMuZGlzYWJsZWQpKX13aXRoRGlyZWN0aW9uKGwpe3JldHVybiB0aGlzLl9kaXJlY3Rpb249bCx0aGlzfV93aXRoRHJvcENvbnRhaW5lcihsKXt0'@;
put 'aGlzLl9kcm9wQ29udGFpbmVyPWx9Z2V0RnJlZURyYWdQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5fYWN0aXZlVHJhbnNmb3JtOnRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07cmV0dXJue3g6bC54LHk6bC55fX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGwpe3JldHVybiB0'@;
put 'aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD1sLngsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PWwueSx0aGlzLl9kcm9wQ29udGFpbmVyfHx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwueCxsLnkpLHRoaXN9d2l0aFByZXZp'@;
put 'ZXdDb250YWluZXIobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdDb250YWluZXI9bCx0aGlzfV9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbjtsJiZ0aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl91cGRhdGVBY3RpdmVE'@;
put 'cm9wQ29udGFpbmVyKHRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpLGwpfV9yZW1vdmVTdWJzY3JpcHRpb25zKCl7dGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0'@;
put 'aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fZGVzdHJveVByZXZpZXcoKXt0aGlzLl9wcmV2aWV3Py5yZW1vdmUoKSx0aGlzLl9wcmV2aWV3UmVmPy5kZXN0cm95KCksdGhpcy5fcHJldmlldz10aGlzLl9wcmV2aWV3UmVmPW51bGx9X2Rlc3Ryb3lQbGFjZWhvbGRlcigp'@;
put 'e3RoaXMuX3BsYWNlaG9sZGVyPy5yZW1vdmUoKSx0aGlzLl9wbGFjZWhvbGRlclJlZj8uZGVzdHJveSgpLHRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX3BsYWNlaG9sZGVyUmVmPW51bGx9X2VuZERyYWdTZXF1ZW5jZShsKXtpZih0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhp'@;
put 'cykmJih0aGlzLl9yZW1vdmVTdWJzY3JpcHRpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMmJih0aGlzLl9yb290RWxlbWVudC5zdHlsZS53ZWJraXRUYXBIaWdo'@;
put 'bGlnaHRDb2xvcj10aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKSlpZih0aGlzLnJlbGVhc2VkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX2Ryb3BDb250YWluZXIuX3N0b3BTY3JvbGxp'@;
put 'bmcoKSx0aGlzLl9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKS50aGVuKCgpPT57dGhpcy5fY2xlYW51cERyYWdBcnRpZmFjdHMobCksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX0pO2Vsc2V7dGhp'@;
put 'cy5fcGFzc2l2ZVRyYW5zZm9ybS54PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54O2NvbnN0IGE9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpO3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSx0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5l'@;
put 'bmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoYSksZHJvcFBvaW50OmEsZXZlbnQ6bH0pfSksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX19X3N0YXJ0RHJh'@;
put 'Z1NlcXVlbmNlKGwpe3N3KGwpJiYodGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lPURhdGUubm93KCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPXRoaXMuX2Ryb3BDb250YWluZXI7aWYoYSl7Y29uc3QgZD10aGlzLl9yb290RWxlbWVudCxoPWQucGFyZW50'@;
put 'Tm9kZSxmPXRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpLF89dGhpcy5fYW5jaG9yPXRoaXMuX2FuY2hvcnx8dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksVD10aGlzLl9nZXRTaGFkb3dSb290KCk7aC5pbnNlcnRCZWZvcmUoXyxkKSx0'@;
put 'aGlzLl9pbml0aWFsVHJhbnNmb3JtPWQuc3R5bGUudHJhbnNmb3JtfHwiIix0aGlzLl9wcmV2aWV3PXRoaXMuX2NyZWF0ZVByZXZpZXdFbGVtZW50KCksWG9lKGQsITEsaVUpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaC5yZXBsYWNlQ2hpbGQoZixkKSksdGhpcy5fZ2V0UHJl'@;
put 'dmlld0luc2VydGlvblBvaW50KGgsVCkuYXBwZW5kQ2hpbGQodGhpcy5fcHJldmlldyksdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSxhLnN0YXJ0KCksdGhpcy5faW5pdGlhbENvbnRhaW5lcj1hLHRoaXMuX2luaXRpYWxJbmRleD1hLmdldEl0ZW1JbmRleCh0aGlz'@;
put 'KX1lbHNlIHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5faW5pdGlhbENvbnRhaW5lcj10aGlzLl9pbml0aWFsSW5kZXg9dm9pZCAwO3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZShhP2EuZ2V0U2Nyb2xsYWJsZVBhcmVudHMoKTpbXSl9X2luaXRpYWxp'@;
put 'emVEcmFnU2VxdWVuY2UobCxhKXt0aGlzLl9wYXJlbnREcmFnUmVmJiZhLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGQ9dGhpcy5pc0RyYWdnaW5nKCksaD1zdyhhKSxmPSFoJiYwIT09YS5idXR0b24sXz10aGlzLl9yb290RWxlbWVudCxUPUdBKGEpLFc9IWgmJnRoaXMuX2xhc3RUb3VjaEV2'@;
put 'ZW50VGltZSYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lKzgwMD5EYXRlLm5vdygpLGllPWg/ZnVuY3Rpb24gaUJlKGMpe2NvbnN0IGw9Yy50b3VjaGVzJiZjLnRvdWNoZXNbMF18fGMuY2hhbmdlZFRvdWNoZXMmJmMuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghbHx8LTEhPT1sLmlkZW50'@;
put 'aWZpZXJ8fG51bGwhPWwucmFkaXVzWCYmMSE9PWwucmFkaXVzWHx8bnVsbCE9bC5yYWRpdXNZJiYxIT09bC5yYWRpdXNZKX0oYSk6ZnVuY3Rpb24gckJlKGMpe3JldHVybiAwPT09Yy5idXR0b25zfHwwPT09Yy5vZmZzZXRYJiYwPT09Yy5vZmZzZXRZfShhKTtpZihUJiZULmRyYWdnYWJsZSYm'@;
put 'Im1vdXNlZG93biI9PT1hLnR5cGUmJmEucHJldmVudERlZmF1bHQoKSxkfHxmfHxXfHxpZSlyZXR1cm47aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IEVlPV8uc3R5bGU7dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQ9RWUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3J8fCIiLEVl'@;
put 'LndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPXRoaXMuX2hhc01vdmVkPSExLHRoaXMuX3JlbW92ZVN1YnNjcmlwdGlvbnMoKSx0aGlzLl9pbml0aWFsQ2xpZW50UmVjdD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0Ns'@;
put 'aWVudFJlY3QoKSx0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJNb3ZlLnN1YnNjcmliZSh0aGlzLl9wb2ludGVyTW92ZSksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlclVw'@;
put 'LnN1YnNjcmliZSh0aGlzLl9wb2ludGVyVXApLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKEVlPT50aGlzLl91cGRhdGVPblNjcm9sbChFZSkpLHRoaXMuX2JvdW5kYXJ5RWxl'@;
put 'bWVudCYmKHRoaXMuX2JvdW5kYXJ5UmVjdD1uVSh0aGlzLl9ib3VuZGFyeUVsZW1lbnQpKTtjb25zdCBwZT10aGlzLl9wcmV2aWV3VGVtcGxhdGU7dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ9cGUmJnBlLnRlbXBsYXRlJiYhcGUubWF0Y2hTaXplP3t4OjAseTowfTp0aGlzLl9nZXRQ'@;
put 'b2ludGVyUG9zaXRpb25JbkVsZW1lbnQodGhpcy5faW5pdGlhbENsaWVudFJlY3QsbCxhKTtjb25zdCB3ZT10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGEpO3RoaXMuX3BvaW50'@;
put 'ZXJEaXJlY3Rpb25EZWx0YT17eDowLHk6MH0sdGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlPXt4OndlLngseTp3ZS55fSx0aGlzLl9kcmFnU3RhcnRUaW1lPURhdGUubm93KCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdGFydERyYWdnaW5nKHRoaXMsYSl9X2Ns'@;
put 'ZWFudXBEcmFnQXJ0aWZhY3RzKGwpe1hvZSh0aGlzLl9yb290RWxlbWVudCwhMCxpVSksdGhpcy5fYW5jaG9yLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMuX3Jvb3RFbGVtZW50LHRoaXMuX2FuY2hvciksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xk'@;
put 'ZXIoKSx0aGlzLl9pbml0aWFsQ2xpZW50UmVjdD10aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fbmdab25lLnJ1bigoKT0+e2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcixkPWEuZ2V0SXRlbUluZGV4KHRo'@;
put 'aXMpLGg9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpLGY9dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGgpLF89YS5faXNPdmVyQ29udGFpbmVyKGgueCxoLnkpO3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksdGhpcy5k'@;
put 'cm9wcGVkLm5leHQoe2l0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZCxwcmV2aW91c0luZGV4OnRoaXMuX2luaXRpYWxJbmRleCxjb250YWluZXI6YSxwcmV2aW91c0NvbnRhaW5lcjp0aGlzLl9pbml0aWFsQ29udGFpbmVyLGlzUG9pbnRlck92ZXJDb250YWluZXI6XyxkaXN0YW5jZTpmLGRyb3BQ'@;
put 'b2ludDpoLGV2ZW50Omx9KSxhLmRyb3AodGhpcyxkLHRoaXMuX2luaXRpYWxJbmRleCx0aGlzLl9pbml0aWFsQ29udGFpbmVyLF8sZixoLGwpLHRoaXMuX2Ryb3BDb250YWluZXI9dGhpcy5faW5pdGlhbENvbnRhaW5lcn0pfV91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHt4OmwseTphfSx7'@;
put 'eDpkLHk6aH0pe2xldCBmPXRoaXMuX2luaXRpYWxDb250YWluZXIuX2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24odGhpcyxsLGEpOyFmJiZ0aGlzLl9kcm9wQ29udGFpbmVyIT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmdGhpcy5faW5pdGlhbENvbnRhaW5lci5faXNPdmVyQ29u'@;
put 'dGFpbmVyKGwsYSkmJihmPXRoaXMuX2luaXRpYWxDb250YWluZXIpLGYmJmYhPT10aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5leGl0ZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjp0aGlzLl9kcm9wQ29udGFpbmVyfSksdGhpcy5fZHJvcENvbnRh'@;
put 'aW5lci5leGl0KHRoaXMpLHRoaXMuX2Ryb3BDb250YWluZXI9Zix0aGlzLl9kcm9wQ29udGFpbmVyLmVudGVyKHRoaXMsbCxhLGY9PT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZmLnNvcnRpbmdEaXNhYmxlZD90aGlzLl9pbml0aWFsSW5kZXg6dm9pZCAwKSx0aGlzLmVudGVyZWQubmV4dCh7'@;
put 'aXRlbTp0aGlzLGNvbnRhaW5lcjpmLGN1cnJlbnRJbmRleDpmLmdldEl0ZW1JbmRleCh0aGlzKX0pfSksdGhpcy5pc0RyYWdnaW5nKCkmJih0aGlzLl9kcm9wQ29udGFpbmVyLl9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGQsaCksdGhpcy5fZHJvcENvbnRhaW5lci5fc29ydEl0ZW0odGhp'@;
put 'cyxsLGEsdGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhKSx0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpOnRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LngsYS10aGlzLl9waWNr'@;
put 'dXBQb3NpdGlvbkluRWxlbWVudC55KSl9X2NyZWF0ZVByZXZpZXdFbGVtZW50KCl7Y29uc3QgbD10aGlzLl9wcmV2aWV3VGVtcGxhdGUsYT10aGlzLnByZXZpZXdDbGFzcyxkPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBoO2lmKGQmJmwpe2NvbnN0IGY9bC5tYXRjaFNpemU/dGhpcy5faW5pdGlh'@;
put 'bENsaWVudFJlY3Q6bnVsbCxfPWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZCxsLmNvbnRleHQpO18uZGV0ZWN0Q2hhbmdlcygpLGg9YXNlKF8sdGhpcy5fZG9jdW1lbnQpLHRoaXMuX3ByZXZpZXdSZWY9XyxsLm1hdGNoU2l6ZT9sc2UoaCxmKTpoLnN0eWxlLnRyYW5zZm9y'@;
put 'bT1LQSh0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpfWVsc2UgaD10c2UodGhpcy5fcm9vdEVsZW1lbnQpLGxzZShoLHRoaXMuX2luaXRpYWxDbGllbnRSZWN0KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYoaC5zdHlsZS50cmFuc2Zv'@;
put 'cm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSk7cmV0dXJuIGVVKGguc3R5bGUseyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLG1hcmdpbjoiMCIscG9zaXRpb246ImZpeGVkIix0b3A6IjAiLGxlZnQ6IjAiLCJ6LWluZGV4IjpgJHt0aGlzLl9jb25maWcuekluZGV4fHwxZTN9YH0saVUpLHo3KGgs'@;
put 'ITEpLGguY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcHJldmlldyIpLGguc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuX2RpcmVjdGlvbiksYSYmKEFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGY9PmguY2xhc3NMaXN0LmFkZChmKSk6aC5jbGFzc0xpc3QuYWRkKGEpKSxofV9hbmltYXRlUHJl'@;
put 'dmlld1RvUGxhY2Vob2xkZXIoKXtpZighdGhpcy5faGFzTW92ZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5fcHJldmlldy5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1hbmltYXRpbmciKSx0'@;
put 'aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC5sZWZ0LGwudG9wKTtjb25zdCBhPWZ1bmN0aW9uIGRCZShjKXtjb25zdCBsPWdldENvbXB1dGVkU3R5bGUoYyksYT10VShsLCJ0cmFuc2l0aW9uLXByb3BlcnR5IiksZD1hLmZpbmQoVD0+InRyYW5zZm9ybSI9PT1UfHwiYWxsIj09PVQpO2lm'@;
put 'KCFkKXJldHVybiAwO2NvbnN0IGg9YS5pbmRleE9mKGQpLGY9dFUobCwidHJhbnNpdGlvbi1kdXJhdGlvbiIpLF89dFUobCwidHJhbnNpdGlvbi1kZWxheSIpO3JldHVybiBKb2UoZltoXSkrSm9lKF9baF0pfSh0aGlzLl9wcmV2aWV3KTtyZXR1cm4gMD09PWE/UHJvbWlzZS5yZXNvbHZlKCk6'@;
put 'dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uZXcgUHJvbWlzZShkPT57Y29uc3QgaD1fPT57KCFffHxHQShfKT09PXRoaXMuX3ByZXZpZXcmJiJ0cmFuc2Zvcm0iPT09Xy5wcm9wZXJ0eU5hbWUpJiYodGhpcy5fcHJldmlldz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNp'@;
put 'dGlvbmVuZCIsaCksZCgpLGNsZWFyVGltZW91dChmKSl9LGY9c2V0VGltZW91dChoLDEuNSphKTt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpfSkpfV9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyVGVt'@;
put 'cGxhdGUsYT1sP2wudGVtcGxhdGU6bnVsbDtsZXQgZDtyZXR1cm4gYT8odGhpcy5fcGxhY2Vob2xkZXJSZWY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhLGwuY29udGV4dCksdGhpcy5fcGxhY2Vob2xkZXJSZWYuZGV0ZWN0Q2hhbmdlcygpLGQ9YXNlKHRoaXMuX3BsYWNl'@;
put 'aG9sZGVyUmVmLHRoaXMuX2RvY3VtZW50KSk6ZD10c2UodGhpcy5fcm9vdEVsZW1lbnQpLGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wbGFjZWhvbGRlciIpLGR9X2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudChsLGEsZCl7Y29uc3Qg'@;
put 'aD1hPT09dGhpcy5fcm9vdEVsZW1lbnQ/bnVsbDphLGY9aD9oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOmwsXz1zdyhkKT9kLnRhcmdldFRvdWNoZXNbMF06ZCxUPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57eDpmLmxlZnQtbC5sZWZ0KyhfLnBhZ2VYLWYubGVm'@;
put 'dC1ULmxlZnQpLHk6Zi50b3AtbC50b3ArKF8ucGFnZVktZi50b3AtVC50b3ApfX1fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpe2NvbnN0IGE9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGQ9c3cobCk/bC50b3VjaGVzWzBdfHxsLmNoYW5nZWRUb3VjaGVzWzBdfHx7cGFn'@;
put 'ZVg6MCxwYWdlWTowfTpsLGg9ZC5wYWdlWC1hLmxlZnQsZj1kLnBhZ2VZLWEudG9wO2lmKHRoaXMuX293bmVyU1ZHRWxlbWVudCl7Y29uc3QgXz10aGlzLl9vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCk7aWYoXyl7Y29uc3QgVD10aGlzLl9vd25lclNWR0VsZW1lbnQuY3JlYXRlU1ZH'@;
put 'UG9pbnQoKTtyZXR1cm4gVC54PWgsVC55PWYsVC5tYXRyaXhUcmFuc2Zvcm0oXy5pbnZlcnNlKCkpfX1yZXR1cm57eDpoLHk6Zn19X2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcj90aGlzLl9kcm9wQ29udGFpbmVyLmxvY2tBeGlz'@;
put 'Om51bGw7bGV0e3g6ZCx5Omh9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5jb25zdHJhaW5Qb3NpdGlvbihsLHRoaXMsdGhpcy5faW5pdGlhbENsaWVudFJlY3QsdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQpOmw7aWYoIngiPT09dGhpcy5sb2NrQXhpc3x8IngiPT09YT9oPXRo'@;
put 'aXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnk6KCJ5Ij09PXRoaXMubG9ja0F4aXN8fCJ5Ij09PWEpJiYoZD10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54KSx0aGlzLl9ib3VuZGFyeVJlY3Qpe2NvbnN0e3g6Zix5Ol99PXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LFQ9dGhpcy5f'@;
put 'Ym91bmRhcnlSZWN0LHt3aWR0aDpXLGhlaWdodDppZX09dGhpcy5fZ2V0UHJldmlld1JlY3QoKSxwZT1ULnRvcCtfLHdlPVQuYm90dG9tLShpZS1fKTtkPXNzZShkLFQubGVmdCtmLFQucmlnaHQtKFctZikpLGg9c3NlKGgscGUsd2UpfXJldHVybnt4OmQseTpofX1fdXBkYXRlUG9pbnRlckRp'@;
put 'cmVjdGlvbkRlbHRhKGwpe2NvbnN0e3g6YSx5OmR9PWwsaD10aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEsZj10aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2UsXz1NYXRoLmFicyhhLWYueCksVD1NYXRoLmFicyhkLWYueSk7cmV0dXJuIF8+dGhpcy5fY29uZmln'@;
put 'LnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLng9YT5mLng/MTotMSxmLng9YSksVD50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueT1kPmYueT8xOi0xLGYueT1kKSxofV90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCl7aWYo'@;
put 'IXRoaXMuX3Jvb3RFbGVtZW50fHwhdGhpcy5faGFuZGxlcylyZXR1cm47Y29uc3QgbD10aGlzLl9oYW5kbGVzLmxlbmd0aD4wfHwhdGhpcy5pc0RyYWdnaW5nKCk7bCE9PXRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQmJih0aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPWws'@;
put 'ejcodGhpcy5fcm9vdEVsZW1lbnQsbCkpfV9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyhsKXtsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24scUEpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24s'@;
put 'b3NlKSxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LHFBKX1fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShsLGEpe2NvbnN0IGQ9S0EobCxhKSxoPXRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlO251bGw9PXRoaXMuX2luaXRpYWxUcmFuc2Zv'@;
put 'cm0mJih0aGlzLl9pbml0aWFsVHJhbnNmb3JtPWgudHJhbnNmb3JtJiYibm9uZSIhPWgudHJhbnNmb3JtP2gudHJhbnNmb3JtOiIiKSxoLnRyYW5zZm9ybT0kQShkLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pfV9hcHBseVByZXZpZXdUcmFuc2Zvcm0obCxhKXtjb25zdCBkPXRoaXMuX3ByZXZp'@;
put 'ZXdUZW1wbGF0ZT8udGVtcGxhdGU/dm9pZCAwOnRoaXMuX2luaXRpYWxUcmFuc2Zvcm0saD1LQShsLGEpO3RoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtPSRBKGgsZCl9X2dldERyYWdEaXN0YW5jZShsKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4'@;
put 'OmwueC1hLngseTpsLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXts'@;
put 'ZXR7eDpsLHk6YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09bCYmMD09PWF8fHRoaXMuaXNEcmFnZ2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dGhpcy5fYm91bmRh'@;
put 'cnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1oLndpZHRoJiYwPT09aC5oZWlnaHR8fDA9PT1kLndpZHRoJiYwPT09ZC5oZWlnaHQpcmV0dXJuO2NvbnN0IGY9aC5sZWZ0LWQubGVmdCxfPWQucmlnaHQtaC5yaWdodCxUPWgudG9wLWQudG9wLFc9ZC5ib3R0b20taC5i'@;
put 'b3R0b207aC53aWR0aD5kLndpZHRoPyhmPjAmJihsKz1mKSxfPjAmJihsLT1fKSk6bD0wLGguaGVpZ2h0PmQuaGVpZ2h0PyhUPjAmJihhKz1UKSxXPjAmJihhLT1XKSk6YT0wLChsIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhp'@;
put 'cy5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHt5OmEseDpsfSl9X2dldERyYWdTdGFydERlbGF5KGwpe2NvbnN0IGE9dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpzdyhsKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChsKXtjb25zdCBhPXRo'@;
put 'aXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7aWYoYSl7Y29uc3QgZD1HQShsKTt0aGlzLl9ib3VuZGFyeVJlY3QmJmQhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJmQuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmb3codGhpcy5fYm91bmRhcnlSZWN0LGEudG9w'@;
put 'LGEubGVmdCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRv'@;
put 'cCx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2Rv'@;
put 'Y3VtZW50KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9V29lKHRoaXMu'@;
put 'X3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWQpcmV0dXJuIGw7aWYoImdsb2JhbCI9PT1kKXtjb25zdCBoPXRoaXMu'@;
put 'X2RvY3VtZW50O3JldHVybiBhfHxoLmZ1bGxzY3JlZW5FbGVtZW50fHxoLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxoLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxoLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGguYm9keX1yZXR1cm4gUDAoZCl9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlz'@;
put 'Ll9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVpZ2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCks'@;
put 'dGhpcy5fcHJldmlld1JlY3R9X2dldFRhcmdldEhhbmRsZShsKXtyZXR1cm4gdGhpcy5faGFuZGxlcy5maW5kKGE9PmwudGFyZ2V0JiYobC50YXJnZXQ9PT1hfHxhLmNvbnRhaW5zKGwudGFyZ2V0KSkpfX1mdW5jdGlvbiBLQShjLGwpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91bmQo'@;
put 'Yyl9cHgsICR7TWF0aC5yb3VuZChsKX1weCwgMClgfWZ1bmN0aW9uIHNzZShjLGwsYSl7cmV0dXJuIE1hdGgubWF4KGwsTWF0aC5taW4oYSxjKSl9ZnVuY3Rpb24gc3coYyl7cmV0dXJuInQiPT09Yy50eXBlWzBdfWZ1bmN0aW9uIGFzZShjLGwpe2NvbnN0IGE9Yy5yb290Tm9kZXM7aWYoMT09'@;
put 'PWEubGVuZ3RoJiZhWzBdLm5vZGVUeXBlPT09bC5FTEVNRU5UX05PREUpcmV0dXJuIGFbMF07Y29uc3QgZD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmZvckVhY2goaD0+ZC5hcHBlbmRDaGlsZChoKSksZH1mdW5jdGlvbiBsc2UoYyxsKXtjLnN0eWxlLndpZHRoPWAke2wud2lk'@;
put 'dGh9cHhgLGMuc3R5bGUuaGVpZ2h0PWAke2wuaGVpZ2h0fXB4YCxjLnN0eWxlLnRyYW5zZm9ybT1LQShsLmxlZnQsbC50b3ApfWZ1bmN0aW9uIGNzZShjLGwsYSl7Y29uc3QgZD1hdyhsLGMubGVuZ3RoLTEpLGg9YXcoYSxjLmxlbmd0aC0xKTtpZihkPT09aClyZXR1cm47Y29uc3QgZj1jW2Rd'@;
put 'LF89aDxkPy0xOjE7Zm9yKGxldCBUPWQ7VCE9PWg7VCs9XyljW1RdPWNbVCtfXTtjW2hdPWZ9ZnVuY3Rpb24gYXcoYyxsKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihsLGMpKX1jbGFzcyBtQmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fZHJhZ0Ryb3BSZWdp'@;
put 'c3RyeT1hLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX3ByZXZpb3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9fXN0YXJ0KGwpe3RoaXMud2l0aEl0ZW1zKGwpfXNvcnQobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9p'@;
put 'dGVtUG9zaXRpb25zLF89dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKTtpZigtMT09PV8mJmYubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgVD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLFc9Zi5maW5kSW5kZXgoeXQ9Pnl0LmRyYWc9PT1s'@;
put 'KSxpZT1mW19dLHdlPWllLmNsaWVudFJlY3QsRWU9Vz5fPzE6LTEsWmU9dGhpcy5fZ2V0SXRlbU9mZnNldFB4KGZbV10uY2xpZW50UmVjdCx3ZSxFZSksaXQ9dGhpcy5fZ2V0U2libGluZ09mZnNldFB4KFcsZixFZSksZXQ9Zi5zbGljZSgpO3JldHVybiBjc2UoZixXLF8pLGYuZm9yRWFjaCgo'@;
put 'eXQsRXQpPT57aWYoZXRbRXRdPT09eXQpcmV0dXJuO2NvbnN0IFN0PXl0LmRyYWc9PT1sLEp0PVN0P1plOml0LG5uPVN0P2wuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6eXQuZHJhZy5nZXRSb290RWxlbWVudCgpO3l0Lm9mZnNldCs9SnQsVD8obm4uc3R5bGUudHJhbnNmb3JtPSRBKGB0cmFu'@;
put 'c2xhdGUzZCgke01hdGgucm91bmQoeXQub2Zmc2V0KX1weCwgMCwgMClgLHl0LmluaXRpYWxUcmFuc2Zvcm0pLG93KHl0LmNsaWVudFJlY3QsMCxKdCkpOihubi5zdHlsZS50cmFuc2Zvcm09JEEoYHRyYW5zbGF0ZTNkKDAsICR7TWF0aC5yb3VuZCh5dC5vZmZzZXQpfXB4LCAwKWAseXQuaW5p'@;
put 'dGlhbFRyYW5zZm9ybSksb3coeXQuY2xpZW50UmVjdCxKdCwwKSl9KSx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9clUod2UsYSxkKSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1pZS5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1UP2gueDpoLnkse3ByZXZpb3VzSW5kZXg6Vyxj'@;
put 'dXJyZW50SW5kZXg6X319ZW50ZXIobCxhLGQsaCl7Y29uc3QgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCk6aCxfPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsVD1fLmluZGV4T2YobCksVz1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgp'@;
put 'O2xldCBpZT1fW2ZdO2lmKGllPT09bCYmKGllPV9bZisxXSksIWllJiYobnVsbD09Znx8LTE9PT1mfHxmPF8ubGVuZ3RoLTEpJiZ0aGlzLl9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChhLGQpJiYoaWU9X1swXSksVD4tMSYmXy5zcGxpY2UoVCwxKSxpZSYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0'@;
put 'cnkuaXNEcmFnZ2luZyhpZSkpe2NvbnN0IHBlPWllLmdldFJvb3RFbGVtZW50KCk7cGUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoVyxwZSksXy5zcGxpY2UoZiwwLGwpfWVsc2UgUDAodGhpcy5fZWxlbWVudCkuYXBwZW5kQ2hpbGQoVyksXy5wdXNoKGwpO1cuc3R5bGUudHJhbnNmb3Jt'@;
put 'PSIiLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhJdGVtcyhsKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPWwuc2xpY2UoKSx0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoU29ydFByZWRpY2F0ZShsKXt0aGlzLl9zb3J0UHJlZGljYXRlPWx9cmVzZXQoKXt0aGlzLl9hY3Rp'@;
put 'dmVEcmFnZ2FibGVzLmZvckVhY2gobD0+e2NvbnN0IGE9bC5nZXRSb290RWxlbWVudCgpO2lmKGEpe2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kKGg9PmguZHJhZz09PWwpPy5pbml0aWFsVHJhbnNmb3JtO2Euc3R5bGUudHJhbnNmb3JtPWR8fCIifX0pLHRoaXMuX2l0ZW1Qb3Np'@;
put 'dGlvbnM9W10sdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1bXSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1udWxsLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT0wLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz0hMX1nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCl7cmV0dXJuIHRoaXMuX2FjdGl2'@;
put 'ZURyYWdnYWJsZXN9Z2V0SXRlbUluZGV4KGwpe3JldHVybigiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYicnRsIj09PXRoaXMuZGlyZWN0aW9uP3RoaXMuX2l0ZW1Qb3NpdGlvbnMuc2xpY2UoKS5yZXZlcnNlKCk6dGhpcy5faXRlbVBvc2l0aW9ucykuZmluZEluZGV4KGQ9PmQu'@;
put 'ZHJhZz09PWwpfXVwZGF0ZU9uU2Nyb2xsKGwsYSl7dGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7Y2xpZW50UmVjdDpkfSk9PntvdyhkLGwsYSl9KSx0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtkcmFnOmR9KT0+e3RoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhk'@;
put 'KSYmZC5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX1fY2FjaGVJdGVtUG9zaXRpb25zKCl7Y29uc3QgbD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO3RoaXMuX2l0ZW1Qb3NpdGlvbnM9dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5tYXAoYT0+e2NvbnN0IGQ9YS5nZXRW'@;
put 'aXNpYmxlRWxlbWVudCgpO3JldHVybntkcmFnOmEsb2Zmc2V0OjAsaW5pdGlhbFRyYW5zZm9ybTpkLnN0eWxlLnRyYW5zZm9ybXx8IiIsY2xpZW50UmVjdDpuVShkKX19KS5zb3J0KChhLGQpPT5sP2EuY2xpZW50UmVjdC5sZWZ0LWQuY2xpZW50UmVjdC5sZWZ0OmEuY2xpZW50UmVjdC50b3At'@;
put 'ZC5jbGllbnRSZWN0LnRvcCl9X2dldEl0ZW1PZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2xldCBmPWg/YS5sZWZ0LWwubGVmdDphLnRvcC1sLnRvcDtyZXR1cm4tMT09PWQmJihmKz1oP2Eud2lkdGgtbC53aWR0aDphLmhlaWdodC1sLmhl'@;
put 'aWdodCksZn1fZ2V0U2libGluZ09mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sZj1hW2xdLmNsaWVudFJlY3QsXz1hW2wrLTEqZF07bGV0IFQ9ZltoPyJ3aWR0aCI6ImhlaWdodCJdKmQ7aWYoXyl7Y29uc3QgVz1oPyJsZWZ0IjoidG9wIixp'@;
put 'ZT1oPyJyaWdodCI6ImJvdHRvbSI7LTE9PT1kP1QtPV8uY2xpZW50UmVjdFtXXS1mW2llXTpUKz1mW1ddLV8uY2xpZW50UmVjdFtpZV19cmV0dXJuIFR9X3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGwsYSl7aWYoIXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubGVuZ3RoKXJldHVybiExO2NvbnN0'@;
put 'IGQ9dGhpcy5faXRlbVBvc2l0aW9ucyxoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247aWYoZFswXS5kcmFnIT09dGhpcy5fYWN0aXZlRHJhZ2dhYmxlc1swXSl7Y29uc3QgXz1kW2QubGVuZ3RoLTFdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bD49Xy5yaWdodDphPj1fLmJvdHRvbX17'@;
put 'Y29uc3QgXz1kWzBdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bDw9Xy5sZWZ0OmE8PV8udG9wfX1fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKXtjb25zdCBmPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sXz10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmRJbmRl'@;
put 'eCgoe2RyYWc6VCxjbGllbnRSZWN0Old9KT0+VCE9PWwmJigoIWh8fFQhPT10aGlzLl9wcmV2aW91c1N3YXAuZHJhZ3x8IXRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwc3x8KGY/aC54OmgueSkhPT10aGlzLl9wcmV2aW91c1N3YXAuZGVsdGEpJiYoZj9hPj1NYXRoLmZsb29yKFcubGVmdCkm'@;
put 'JmE8TWF0aC5mbG9vcihXLnJpZ2h0KTpkPj1NYXRoLmZsb29yKFcudG9wKSYmZDxNYXRoLmZsb29yKFcuYm90dG9tKSkpKTtyZXR1cm4tMSE9PV8mJnRoaXMuX3NvcnRQcmVkaWNhdGUoXyxsKT9fOi0xfX1jbGFzcyB2QmV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLl9kcmFnRHJvcFJl'@;
put 'Z2lzdHJ5PWEsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsU3RlcD0yLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRo'@;
put 'aXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBiZSx0aGlzLmVudGVyZWQ9bmV3IGJlLHRoaXMuZXhpdGVkPW5ldyBiZSx0aGlzLmRyb3BwZWQ9bmV3IGJlLHRoaXMuc29ydGVkPW5ldyBiZSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQ9bmV3IGJlLHRoaXMucmVj'@;
put 'ZWl2aW5nU3RvcHBlZD1uZXcgYmUsdGhpcy5faXNEcmFnZ2luZz0hMSx0aGlzLl9kcmFnZ2FibGVzPVtdLHRoaXMuX3NpYmxpbmdzPVtdLHRoaXMuX2FjdGl2ZVNpYmxpbmdzPW5ldyBTZXQsdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fdmVydGljYWxT'@;
put 'Y3JvbGxEaXJlY3Rpb249MCx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPTAsdGhpcy5fc3RvcFNjcm9sbFRpbWVycz1uZXcgYmUsdGhpcy5fY2FjaGVkU2hhZG93Um9vdD1udWxsLHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWw9KCk9Pnt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksZnVu'@;
put 'Y3Rpb24gc0JlKGM9MCxsPWliKXtyZXR1cm4gYzwwJiYoYz0wKSxqUChjLGMsbCl9KDAsam9lKS5waXBlKGFoKHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMpKS5zdWJzY3JpYmUoKCk9Pntjb25zdCBfPXRoaXMuX3Njcm9sbE5vZGUsVD10aGlzLmF1dG9TY3JvbGxTdGVwOzE9PT10aGlzLl92ZXJ0'@;
put 'aWNhbFNjcm9sbERpcmVjdGlvbj9fLnNjcm9sbEJ5KDAsLVQpOjI9PT10aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiYmXy5zY3JvbGxCeSgwLFQpLDE9PT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uP18uc2Nyb2xsQnkoLVQsMCk6Mj09PXRoaXMuX2hvcml6b250YWxTY3Jv'@;
put 'bGxEaXJlY3Rpb24mJl8uc2Nyb2xsQnkoVCwwKX0pfSx0aGlzLmVsZW1lbnQ9UDAobCksdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLndpdGhTY3JvbGxhYmxlUGFyZW50cyhbdGhpcy5lbGVtZW50XSksYS5yZWdpc3RlckRyb3BDb250YWluZXIodGhpcyksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5l'@;
put 'dyBlc2UoZCksdGhpcy5fc29ydFN0cmF0ZWd5PW5ldyBtQmUodGhpcy5lbGVtZW50LGEpLHRoaXMuX3NvcnRTdHJhdGVneS53aXRoU29ydFByZWRpY2F0ZSgoXyxUKT0+dGhpcy5zb3J0UHJlZGljYXRlKF8sVCx0aGlzKSl9ZGlzcG9zZSgpe3RoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9z'@;
put 'dG9wU2Nyb2xsVGltZXJzLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5j'@;
put 'b21wbGV0ZSgpLHRoaXMuc29ydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLmNvbXBsZXRlKCksdGhpcy5fYWN0aXZlU2libGluZ3MuY2xlYXIoKSx0aGlzLl9zY3JvbGxOb2RlPW51bGwsdGhpcy5fcGFyZW50UG9z'@;
put 'aXRpb25zLmNsZWFyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcm9wQ29udGFpbmVyKHRoaXMpfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZ31zdGFydCgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl9'@;
put 'ZW50ZXIobCxhLGQsaCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksbnVsbD09aCYmdGhpcy5zb3J0aW5nRGlzYWJsZWQmJihoPXRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKSksdGhpcy5fc29ydFN0cmF0ZWd5LmVudGVyKGwsYSxkLGgpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCks'@;
put 'dGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzLGN1cnJlbnRJbmRleDp0aGlzLmdldEl0ZW1JbmRleChsKX0pfWV4aXQobCl7dGhpcy5fcmVzZXQoKSx0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVy'@;
put 'OnRoaXN9KX1kcm9wKGwsYSxkLGgsZixfLFQsVz17fSl7dGhpcy5fcmVzZXQoKSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTpsLGN1cnJlbnRJbmRleDphLHByZXZpb3VzSW5kZXg6ZCxjb250YWluZXI6dGhpcyxwcmV2aW91c0NvbnRhaW5lcjpoLGlzUG9pbnRlck92ZXJDb250YWluZXI6Zixk'@;
put 'aXN0YW5jZTpfLGRyb3BQb2ludDpULGV2ZW50Old9KX13aXRoSXRlbXMobCl7Y29uc3QgYT10aGlzLl9kcmFnZ2FibGVzO3JldHVybiB0aGlzLl9kcmFnZ2FibGVzPWwsbC5mb3JFYWNoKGQ9PmQuX3dpdGhEcm9wQ29udGFpbmVyKHRoaXMpKSx0aGlzLmlzRHJhZ2dpbmcoKSYmKGEuZmlsdGVy'@;
put 'KGg9PmguaXNEcmFnZ2luZygpKS5ldmVyeShoPT4tMT09PWwuaW5kZXhPZihoKSk/dGhpcy5fcmVzZXQoKTp0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEl0ZW1zKHRoaXMuX2RyYWdnYWJsZXMpKSx0aGlzfXdpdGhEaXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rp'@;
put 'b249bCx0aGlzfWNvbm5lY3RlZFRvKGwpe3JldHVybiB0aGlzLl9zaWJsaW5ncz1sLnNsaWNlKCksdGhpc313aXRoT3JpZW50YXRpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5vcmllbnRhdGlvbj1sLHRoaXN9d2l0aFNjcm9sbGFibGVQYXJlbnRzKGwpe2NvbnN0IGE9UDAodGhp'@;
put 'cy5lbGVtZW50KTtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzPS0xPT09bC5pbmRleE9mKGEpP1thLC4uLmxdOmwuc2xpY2UoKSx0aGlzfWdldFNjcm9sbGFibGVQYXJlbnRzKCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50c31nZXRJdGVtSW5kZXgobCl7cmV0dXJuIHRo'@;
put 'aXMuX2lzRHJhZ2dpbmc/dGhpcy5fc29ydFN0cmF0ZWd5LmdldEl0ZW1JbmRleChsKTp0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCl9aXNSZWNlaXZpbmcoKXtyZXR1cm4gdGhpcy5fYWN0aXZlU2libGluZ3Muc2l6ZT4wfV9zb3J0SXRlbShsLGEsZCxoKXtpZih0aGlzLnNvcnRpbmdEaXNh'@;
put 'YmxlZHx8IXRoaXMuX2NsaWVudFJlY3R8fCFRb2UodGhpcy5fY2xpZW50UmVjdCwuMDUsYSxkKSlyZXR1cm47Y29uc3QgZj10aGlzLl9zb3J0U3RyYXRlZ3kuc29ydChsLGEsZCxoKTtmJiZ0aGlzLnNvcnRlZC5uZXh0KHtwcmV2aW91c0luZGV4OmYucHJldmlvdXNJbmRleCxjdXJyZW50SW5k'@;
put 'ZXg6Zi5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTpsfSl9X3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkobCxhKXtpZih0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZClyZXR1cm47bGV0IGQsaD0wLGY9MDtpZih0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmZvckVhY2go'@;
put 'KF8sVCk9PntUPT09dGhpcy5fZG9jdW1lbnR8fCFfLmNsaWVudFJlY3R8fGR8fFFvZShfLmNsaWVudFJlY3QsLjA1LGwsYSkmJihbaCxmXT1mdW5jdGlvbiBfQmUoYyxsLGEsZCl7Y29uc3QgaD1oc2UobCxkKSxmPWZzZShsLGEpO2xldCBfPTAsVD0wO2lmKGgpe2NvbnN0IFc9Yy5zY3JvbGxU'@;
put 'b3A7MT09PWg/Vz4wJiYoXz0xKTpjLnNjcm9sbEhlaWdodC1XPmMuY2xpZW50SGVpZ2h0JiYoXz0yKX1pZihmKXtjb25zdCBXPWMuc2Nyb2xsTGVmdDsxPT09Zj9XPjAmJihUPTEpOmMuc2Nyb2xsV2lkdGgtVz5jLmNsaWVudFdpZHRoJiYoVD0yKX1yZXR1cm5bXyxUXX0oVCxfLmNsaWVudFJl'@;
put 'Y3QsbCxhKSwoaHx8ZikmJihkPVQpKX0pLCFoJiYhZil7Y29uc3R7d2lkdGg6XyxoZWlnaHQ6VH09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxXPXt3aWR0aDpfLGhlaWdodDpULHRvcDowLHJpZ2h0Ol8sYm90dG9tOlQsbGVmdDowfTtoPWhzZShXLGEpLGY9ZnNlKFcs'@;
put 'bCksZD13aW5kb3d9ZCYmKGghPT10aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbnx8ZiE9PXRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb258fGQhPT10aGlzLl9zY3JvbGxOb2RlKSYmKHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPWgsdGhpcy5faG9yaXpvbnRhbFNjcm9s'@;
put 'bERpcmVjdGlvbj1mLHRoaXMuX3Njcm9sbE5vZGU9ZCwoaHx8ZikmJmQ/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWwpOnRoaXMuX3N0b3BTY3JvbGxpbmcoKSl9X3N0b3BTY3JvbGxpbmcoKXt0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLm5l'@;
put 'eHQoKX1fZHJhZ2dpbmdTdGFydGVkKCl7Y29uc3QgbD1QMCh0aGlzLmVsZW1lbnQpLnN0eWxlO3RoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCksdGhpcy5faXNEcmFnZ2luZz0hMCx0aGlzLl9pbml0aWFsU2Nyb2xsU25hcD1sLm1zU2Nyb2xsU25hcFR5cGV8fGwuc2Nyb2xsU25hcFR5cGV8fCIi'@;
put 'LGwuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPSJub25lIix0aGlzLl9zb3J0U3RyYXRlZ3kuc3RhcnQodGhpcy5fZHJhZ2dhYmxlcyksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRo'@;
put 'aXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl9X2NhY2hlUGFyZW50UG9zaXRpb25zKCl7Y29uc3QgbD1QMCh0aGlzLmVsZW1lbnQpO3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZSh0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMpLHRoaXMuX2NsaWVudFJlY3Q9dGhpcy5fcGFyZW50UG9zaXRp'@;
put 'b25zLnBvc2l0aW9ucy5nZXQobCkuY2xpZW50UmVjdH1fcmVzZXQoKXt0aGlzLl9pc0RyYWdnaW5nPSExO2NvbnN0IGw9UDAodGhpcy5lbGVtZW50KS5zdHlsZTtsLnNjcm9sbFNuYXBUeXBlPWwubXNTY3JvbGxTbmFwVHlwZT10aGlzLl9pbml0aWFsU2Nyb2xsU25hcCx0aGlzLl9zaWJsaW5n'@;
put 'cy5mb3JFYWNoKGE9PmEuX3N0b3BSZWNlaXZpbmcodGhpcykpLHRoaXMuX3NvcnRTdHJhdGVneS5yZXNldCgpLHRoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9p'@;
put 'c092ZXJDb250YWluZXIobCxhKXtyZXR1cm4gbnVsbCE9dGhpcy5fY2xpZW50UmVjdCYmclUodGhpcy5fY2xpZW50UmVjdCxsLGEpfV9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKGwsYSxkKXtyZXR1cm4gdGhpcy5fc2libGluZ3MuZmluZChoPT5oLl9jYW5SZWNlaXZlKGwsYSxk'@;
put 'KSl9X2NhblJlY2VpdmUobCxhLGQpe2lmKCF0aGlzLl9jbGllbnRSZWN0fHwhclUodGhpcy5fY2xpZW50UmVjdCxhLGQpfHwhdGhpcy5lbnRlclByZWRpY2F0ZShsLHRoaXMpKXJldHVybiExO2NvbnN0IGg9dGhpcy5fZ2V0U2hhZG93Um9vdCgpLmVsZW1lbnRGcm9tUG9pbnQoYSxkKTtpZigh'@;
put 'aClyZXR1cm4hMTtjb25zdCBmPVAwKHRoaXMuZWxlbWVudCk7cmV0dXJuIGg9PT1mfHxmLmNvbnRhaW5zKGgpfV9zdGFydFJlY2VpdmluZyhsLGEpe2NvbnN0IGQ9dGhpcy5fYWN0aXZlU2libGluZ3M7IWQuaGFzKGwpJiZhLmV2ZXJ5KGg9PnRoaXMuZW50ZXJQcmVkaWNhdGUoaCx0aGlzKXx8'@;
put 'dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGgpPi0xKSYmKGQuYWRkKGwpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQubmV4dCh7aW5pdGlhdG9yOmwscmVjZWl2ZXI6dGhpcyxpdGVtczphfSkp'@;
put 'fV9zdG9wUmVjZWl2aW5nKGwpe3RoaXMuX2FjdGl2ZVNpYmxpbmdzLmRlbGV0ZShsKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzfSl9X2xpc3RlblRvU2Ny'@;
put 'b2xsRXZlbnRzKCl7dGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShsPT57aWYodGhpcy5pc0RyYWdnaW5nKCkpe2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25z'@;
put 'LmhhbmRsZVNjcm9sbChsKTthJiZ0aGlzLl9zb3J0U3RyYXRlZ3kudXBkYXRlT25TY3JvbGwoYS50b3AsYS5sZWZ0KX1lbHNlIHRoaXMuaXNSZWNlaXZpbmcoKSYmdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKX0pfV9nZXRTaGFkb3dSb290KCl7aWYoIXRoaXMuX2NhY2hlZFNoYWRvd1Jv'@;
put 'b3Qpe2NvbnN0IGw9V29lKFAwKHRoaXMuZWxlbWVudCkpO3RoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bHx8dGhpcy5fZG9jdW1lbnR9cmV0dXJuIHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3R9X25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl7Y29uc3QgbD10aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0QWN0'@;
put 'aXZlSXRlbXNTbmFwc2hvdCgpLmZpbHRlcihhPT5hLmlzRHJhZ2dpbmcoKSk7dGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdGFydFJlY2VpdmluZyh0aGlzLGwpKX19ZnVuY3Rpb24gaHNlKGMsbCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsaGVpZ2h0Omh9PWMsZj0uMDUqaDtyZXR1cm4g'@;
put 'bD49YS1mJiZsPD1hK2Y/MTpsPj1kLWYmJmw8PWQrZj8yOjB9ZnVuY3Rpb24gZnNlKGMsbCl7Y29uc3R7bGVmdDphLHJpZ2h0OmQsd2lkdGg6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj8xOmw+PWQtZiYmbDw9ZCtmPzI6MH1jb25zdCBYQT1pdyh7cGFzc2l2ZTohMSxjYXB0'@;
put 'dXJlOiEwfSk7bGV0IGJCZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5fZHJvcEluc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2RyYWdJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzPVtdLHRoaXMuX2dsb2JhbExpc3Rl'@;
put 'bmVycz1uZXcgTWFwLHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlPWg9PmguaXNEcmFnZ2luZygpLHRoaXMucG9pbnRlck1vdmU9bmV3IGJlLHRoaXMucG9pbnRlclVwPW5ldyBiZSx0aGlzLnNjcm9sbD1uZXcgYmUsdGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nPWg9Pnt0aGlzLl9h'@;
put 'Y3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiZoLnByZXZlbnREZWZhdWx0KCl9LHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcj1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+MCYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuc29tZSh0aGlzLl9kcmFn'@;
put 'Z2luZ1ByZWRpY2F0ZSkmJmgucHJldmVudERlZmF1bHQoKSx0aGlzLnBvaW50ZXJNb3ZlLm5leHQoaCkpfSx0aGlzLl9kb2N1bWVudD1kfXJlZ2lzdGVyRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmhhcyhhKXx8dGhpcy5fZHJvcEluc3RhbmNlcy5hZGQoYSl9cmVnaXN0'@;
put 'ZXJEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmFkZChhKSwxPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3Rl'@;
put 'bnRUb3VjaG1vdmVMaXN0ZW5lcixYQSl9KX1yZW1vdmVEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuZGVsZXRlKGEpfXJlbW92ZURyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZGVsZXRlKGEpLHRoaXMuc3RvcERyYWdnaW5nKGEpLDA9PT10aGlzLl9kcmFnSW5z'@;
put 'dGFuY2VzLnNpemUmJnRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLFhBKX1zdGFydERyYWdnaW5nKGEsZCl7aWYoISh0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTEpJiYo'@;
put 'dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5wdXNoKGEpLDE9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCkpe2NvbnN0IGg9ZC50eXBlLnN0YXJ0c1dpdGgoInRvdWNoIik7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldChoPyJ0b3VjaGVuZCI6Im1vdXNldXAiLHtoYW5kbGVy'@;
put 'OmY9PnRoaXMucG9pbnRlclVwLm5leHQoZiksb3B0aW9uczohMH0pLnNldCgic2Nyb2xsIix7aGFuZGxlcjpmPT50aGlzLnNjcm9sbC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNlbGVjdHN0YXJ0Iix7aGFuZGxlcjp0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmcsb3B0aW9u'@;
put 'czpYQX0pLGh8fHRoaXMuX2dsb2JhbExpc3RlbmVycy5zZXQoIm1vdXNlbW92ZSIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyTW92ZS5uZXh0KGYpLG9wdGlvbnM6WEF9KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgo'@;
put 'ZixfKT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXyxmLmhhbmRsZXIsZi5vcHRpb25zKX0pfSl9fXN0b3BEcmFnZ2luZyhhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKTtkPi0xJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zcGxp'@;
put 'Y2UoZCwxKSwwPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJnRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCkpfWlzRHJhZ2dpbmcoYSl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMX1zY3JvbGxlZChhKXtjb25zdCBkPVt0aGlzLnNj'@;
put 'cm9sbF07cmV0dXJuIGEmJmEhPT10aGlzLl9kb2N1bWVudCYmZC5wdXNoKG5ldyBLZShoPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBfPVQ9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmaC5uZXh0KFQpfTtyZXR1cm4gYS5hZGRFdmVudExp'@;
put 'c3RlbmVyKCJzY3JvbGwiLF8sITApLCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLF8sITApfX0pKSksaXMoLi4uZCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcmFnSXRlbShhKSksdGhpcy5fZHJvcEluc3RhbmNl'@;
put 'cy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJvcENvbnRhaW5lcihhKSksdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSx0aGlzLnBvaW50ZXJNb3ZlLmNvbXBsZXRlKCksdGhpcy5wb2ludGVyVXAuY29tcGxldGUoKX1fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKXt0aGlzLl9nbG9iYWxMaXN0'@;
put 'ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxhLmhhbmRsZXIsYS5vcHRpb25zKX0pLHRoaXMuX2dsb2JhbExpc3RlbmVycy5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihO'@;
put 'byksYXIoTHMpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCB5QmU9e2RyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NX07bGV0IG9VPSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl92aWV3cG9ydFJ1bGVyPWgsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1mfWNyZWF0ZURyYWcoYSxkPXlCZSl7cmV0dXJuIG5ldyBwQmUoYSxkLHRoaXMuX2RvY3VtZW50LHRoaXMu'@;
put 'X25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpfWNyZWF0ZURyb3BMaXN0KGEpe3JldHVybiBuZXcgdkJlKGEsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcil9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSxhcihObyksYXIoVVZlKSxhcihiQmUpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBzVT1uZXcgU2koIkNE'@;
put 'S19EUkFHX1BBUkVOVCIpLGFVPW5ldyBTaSgiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBwc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1zPW5ldyBTZXQsdGhpcy5fZGlzYWJsZWQ9ITF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNh'@;
put 'YmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hNChhKX1uZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdEdy'@;
put 'b3VwIiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6WyJjZGtEcm9wTGlzdEdyb3VwRGlzYWJsZWQiLCJkaXNhYmxlZCJdfSxleHBvcnRBczpbImNka0Ryb3BMaXN0R3JvdXAiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6YVUsdXNlRXhpc3Rpbmc6Y31dKV19KSxjfSkoKTtj'@;
put 'b25zdCBnc2U9bmV3IFNpKCJDREtfRFJBR19DT05GSUciKTtsZXQgd0JlPTA7Y29uc3QgbXNlPW5ldyBTaSgiQ2RrRHJvcExpc3QiKTtsZXQgdnNlPSgoKT0+e2NsYXNzIGN7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhIXRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5k'@;
put 'aXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZHJvcExpc3RSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQ9YTQoYSl9Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5lbGVtZW50PWEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aCx0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWYs'@;
put 'dGhpcy5fZGlyPV8sdGhpcy5fZ3JvdXA9VCx0aGlzLl9kZXN0cm95ZWQ9bmV3IGJlLHRoaXMuY29ubmVjdGVkVG89W10sdGhpcy5pZD0iY2RrLWRyb3AtbGlzdC0iK3dCZSsrLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRoaXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5kcm9wcGVk'@;
put 'PW5ldyBFcix0aGlzLmVudGVyZWQ9bmV3IEVyLHRoaXMuZXhpdGVkPW5ldyBFcix0aGlzLnNvcnRlZD1uZXcgRXIsdGhpcy5fdW5zb3J0ZWRJdGVtcz1uZXcgU2V0LHRoaXMuX2Ryb3BMaXN0UmVmPWQuY3JlYXRlRHJvcExpc3QoYSksdGhpcy5fZHJvcExpc3RSZWYuZGF0YT10aGlzLFcmJnRo'@;
put 'aXMuX2Fzc2lnbkRlZmF1bHRzKFcpLHRoaXMuX2Ryb3BMaXN0UmVmLmVudGVyUHJlZGljYXRlPShpZSxwZSk9PnRoaXMuZW50ZXJQcmVkaWNhdGUoaWUuZGF0YSxwZS5kYXRhKSx0aGlzLl9kcm9wTGlzdFJlZi5zb3J0UHJlZGljYXRlPShpZSxwZSx3ZSk9PnRoaXMuc29ydFByZWRpY2F0ZShp'@;
put 'ZSxwZS5kYXRhLHdlLmRhdGEpLHRoaXMuX3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKHRoaXMuX2Ryb3BMaXN0UmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJvcExpc3RSZWYpLGMuX2Ryb3BMaXN0cy5wdXNoKHRoaXMpLFQmJlQuX2l0ZW1zLmFkZCh0aGlzKX1hZGRJdGVtKGEp'@;
put 'e3RoaXMuX3Vuc29ydGVkSXRlbXMuYWRkKGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfXJlbW92ZUl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5kZWxldGUoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlz'@;
put 'Ll9zeW5jSXRlbXNXaXRoUmVmKCl9Z2V0U29ydGVkSXRlbXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl91bnNvcnRlZEl0ZW1zKS5zb3J0KChhLGQpPT5hLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5fZHJhZ1JlZi5nZXRWaXNpYmxl'@;
put 'RWxlbWVudCgpKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8tMToxKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9Yy5fZHJvcExpc3RzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJvcExpc3RzLnNwbGljZShhLDEpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZGVs'@;
put 'ZXRlKHRoaXMpLHRoaXMuX3Vuc29ydGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9kcm9wTGlzdFJlZi5kaXNwb3NlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24oYSl7dGhpcy5fZGlyJiZ0aGlzLl9k'@;
put 'aXIuY2hhbmdlLnBpcGUoY3AodGhpcy5fZGlyLnZhbHVlKSxhaCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZD0+YS53aXRoRGlyZWN0aW9uKGQpKSxhLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBrVmUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXko'@;
put 'Yyk/YzpbY119KHRoaXMuY29ubmVjdGVkVG8pLm1hcChoPT4ic3RyaW5nIj09dHlwZW9mIGg/Yy5fZHJvcExpc3RzLmZpbmQoXz0+Xy5pZD09PWgpOmgpO2lmKHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZm9yRWFjaChoPT57LTE9PT1kLmluZGV4T2YoaCkmJmQucHVzaChoKX0p'@;
put 'LCF0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkKXtjb25zdCBoPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuZWxlbWVudCkubWFwKGY9PmYuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQpO3RoaXMuX2Ryb3BMaXN0UmVm'@;
put 'LndpdGhTY3JvbGxhYmxlUGFyZW50cyhoKSx0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkPSEwfWEuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5zb3J0aW5nRGlzYWJsZWQ9YTQodGhpcy5zb3J0aW5nRGlzYWJsZWQpLGEuYXV0b1Njcm9s'@;
put 'bERpc2FibGVkPWE0KHRoaXMuYXV0b1Njcm9sbERpc2FibGVkKSxhLmF1dG9TY3JvbGxTdGVwPUJvZSh0aGlzLmF1dG9TY3JvbGxTdGVwLDIpLGEuY29ubmVjdGVkVG8oZC5maWx0ZXIoaD0+aCYmaCE9PXRoaXMpLm1hcChoPT5oLl9kcm9wTGlzdFJlZikpLndpdGhPcmllbnRhdGlvbih0aGlz'@;
put 'Lm9yaWVudGF0aW9uKX0pfV9oYW5kbGVFdmVudHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJl'@;
put 'ZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSksdGhpcy5fY2hhbmdlRGV0ZWN0'@;
put 'b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnNvcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc29ydGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSl9KSxhLmRyb3Bw'@;
put 'ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxp'@;
put 'dGVtOmQuaXRlbS5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGlz'@;
put 'KGEucmVjZWl2aW5nU3RhcnRlZCxhLnJlY2VpdmluZ1N0b3BwZWQpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdnaW5nRGlzYWJsZWQ6aCxzb3J0aW5nRGlzYWJsZWQ6'@;
put 'ZixsaXN0QXV0b1Njcm9sbERpc2FibGVkOl8sbGlzdE9yaWVudGF0aW9uOlR9PWE7dGhpcy5kaXNhYmxlZD1oPz8hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD1mPz8hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD1fPz8hMSx0aGlzLm9yaWVudGF0aW9uPVR8fCJ2ZXJ0aWNhbCIsZCYmKHRoaXMu'@;
put 'bG9ja0F4aXM9ZCl9X3N5bmNJdGVtc1dpdGhSZWYoKXt0aGlzLl9kcm9wTGlzdFJlZi53aXRoSXRlbXModGhpcy5nZXRTb3J0ZWRJdGVtcygpLm1hcChhPT5hLl9kcmFnUmVmKSl9fXJldHVybiBjLl9kcm9wTGlzdHM9W10sYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KSh0dChOaSksdHQob1UpLHR0KFVhKSx0dChqVmUpLHR0KEtvZSw4KSx0dChhVSwxMiksdHQoZ3NlLDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3QiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1saXN0'@;
put 'Il0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigiaWQiLGQuaWQpLGRyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixkLmRpc2FibGVkKSgiY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyIsZC5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRyb3At'@;
put 'bGlzdC1yZWNlaXZpbmciLGQuX2Ryb3BMaXN0UmVmLmlzUmVjZWl2aW5nKCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbImNka0Ryb3BMaXN0Q29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdLGRhdGE6WyJjZGtEcm9wTGlzdERhdGEiLCJkYXRhIl0sb3JpZW50YXRpb246WyJjZGtEcm9wTGlz'@;
put 'dE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iXSxpZDoiaWQiLGxvY2tBeGlzOlsiY2RrRHJvcExpc3RMb2NrQXhpcyIsImxvY2tBeGlzIl0sZGlzYWJsZWQ6WyJjZGtEcm9wTGlzdERpc2FibGVkIiwiZGlzYWJsZWQiXSxzb3J0aW5nRGlzYWJsZWQ6WyJjZGtEcm9wTGlzdFNvcnRpbmdEaXNh'@;
put 'YmxlZCIsInNvcnRpbmdEaXNhYmxlZCJdLGVudGVyUHJlZGljYXRlOlsiY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZSIsImVudGVyUHJlZGljYXRlIl0sc29ydFByZWRpY2F0ZTpbImNka0Ryb3BMaXN0U29ydFByZWRpY2F0ZSIsInNvcnRQcmVkaWNhdGUiXSxhdXRvU2Nyb2xsRGlzYWJsZWQ6'@;
put 'WyJjZGtEcm9wTGlzdEF1dG9TY3JvbGxEaXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCJdLGF1dG9TY3JvbGxTdGVwOlsiY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcCIsImF1dG9TY3JvbGxTdGVwIl19LG91dHB1dHM6e2Ryb3BwZWQ6ImNka0Ryb3BMaXN0RHJvcHBlZCIsZW50ZXJlZDoi'@;
put 'Y2RrRHJvcExpc3RFbnRlcmVkIixleGl0ZWQ6ImNka0Ryb3BMaXN0RXhpdGVkIixzb3J0ZWQ6ImNka0Ryb3BMaXN0U29ydGVkIn0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTphVSx1c2VWYWx1ZTp2b2lkIDB9LHtwcm92aWRl'@;
put 'Om1zZSx1c2VFeGlzdGluZzpjfV0pXX0pLGN9KSgpO2NvbnN0IGxVPW5ldyBTaSgiQ2RrRHJhZ0hhbmRsZSIpO2xldCBfc2U9KCgpPT57Y2xhc3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWE0KGEpLHRoaXMu'@;
put 'X3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMpfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50PWEsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBiZSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9wYXJlbnREcmFnPWR9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KHNVLDEyKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWdIYW5kbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZy1oYW5kbGUiXSxpbnB1dHM6'@;
put 'e2Rpc2FibGVkOlsiY2RrRHJhZ0hhbmRsZURpc2FibGVkIiwiZGlzYWJsZWQiXX0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdGkoW3twcm92aWRlOmxVLHVzZUV4aXN0aW5nOmN9XSldfSksY30pKCk7Y29uc3QgYnNlPW5ldyBTaSgiQ2RrRHJhZ1BsYWNlaG9sZGVyIikseXNlPW5ldyBTaSgi'@;
put 'Q2RrRHJhZ1ByZXZpZXciKTtsZXQgd3NlPSgoKT0+e2NsYXNzIGN7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmRyb3BDb250YWluZXImJnRoaXMuZHJvcENvbnRhaW5lci5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YTQoYSksdGhp'@;
put 'cy5fZHJhZ1JlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZH1jb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLHBlLHdlLEVlKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRyb3BDb250YWluZXI9ZCx0aGlzLl9uZ1pvbmU9Zix0aGlzLl92aWV3Q29udGFpbmVyUmVmPV8sdGhpcy5fZGlyPVcsdGhp'@;
put 'cy5fY2hhbmdlRGV0ZWN0b3JSZWY9cGUsdGhpcy5fc2VsZkhhbmRsZT13ZSx0aGlzLl9wYXJlbnREcmFnPUVlLHRoaXMuX2Rlc3Ryb3llZD1uZXcgYmUsdGhpcy5zdGFydGVkPW5ldyBFcix0aGlzLnJlbGVhc2VkPW5ldyBFcix0aGlzLmVuZGVkPW5ldyBFcix0aGlzLmVudGVyZWQ9bmV3IEVy'@;
put 'LHRoaXMuZXhpdGVkPW5ldyBFcix0aGlzLmRyb3BwZWQ9bmV3IEVyLHRoaXMubW92ZWQ9bmV3IEtlKFplPT57Y29uc3QgaXQ9dGhpcy5fZHJhZ1JlZi5tb3ZlZC5waXBlKE1lKGV0PT4oe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjpldC5wb2ludGVyUG9zaXRpb24sZXZlbnQ6ZXQuZXZl'@;
put 'bnQsZGVsdGE6ZXQuZGVsdGEsZGlzdGFuY2U6ZXQuZGlzdGFuY2V9KSkpLnN1YnNjcmliZShaZSk7cmV0dXJuKCk9PntpdC51bnN1YnNjcmliZSgpfX0pLHRoaXMuX2RyYWdSZWY9aWUuY3JlYXRlRHJhZyhhLHtkcmFnU3RhcnRUaHJlc2hvbGQ6VCYmbnVsbCE9VC5kcmFnU3RhcnRUaHJlc2hv'@;
put 'bGQ/VC5kcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOlQmJm51bGwhPVQucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZD9ULnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NSx6SW5kZXg6VD8uekluZGV4fSksdGhpcy5fZHJh'@;
put 'Z1JlZi5kYXRhPXRoaXMsYy5fZHJhZ0luc3RhbmNlcy5wdXNoKHRoaXMpLFQmJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKFQpLGQmJih0aGlzLl9kcmFnUmVmLl93aXRoRHJvcENvbnRhaW5lcihkLl9kcm9wTGlzdFJlZiksZC5hZGRJdGVtKHRoaXMpKSx0aGlzLl9zeW5jSW5wdXRzKHRoaXMuX2Ry'@;
put 'YWdSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcmFnUmVmKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKX1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFJvb3RFbGVtZW50KCl9'@;
put 'cmVzZXQoKXt0aGlzLl9kcmFnUmVmLnJlc2V0KCl9Z2V0RnJlZURyYWdQb3NpdGlvbigpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldEZyZWVEcmFnUG9zaXRpb24oKX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpe3RoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbihhKX1uZ0FmdGVyVmll'@;
put 'd0luaXQoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShpZCgxKSxhaCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX3NldHVwSGFuZGxlc0xpc3RlbmVy'@;
put 'KCksdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX0pfSl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLnJvb3RFbGVtZW50U2VsZWN0b3IsaD1hLmZyZWVEcmFnUG9zaXRpb247ZCYmIWQuZmlyc3RD'@;
put 'aGFuZ2UmJnRoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksaCYmIWguZmlyc3RDaGFuZ2UmJnRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9bmdPbkRlc3Ryb3koKXt0aGlzLmRyb3BDb250YWluZXIm'@;
put 'JnRoaXMuZHJvcENvbnRhaW5lci5yZW1vdmVJdGVtKHRoaXMpO2NvbnN0IGE9Yy5fZHJhZ0luc3RhbmNlcy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2RyYWdJbnN0YW5jZXMuc3BsaWNlKGEsMSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZGVzdHJveWVkLm5l'@;
put 'eHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKX0pfV91cGRhdGVSb290RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7bGV0IGQ9YTt0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJihkPXZvaWQgMCE9PWEuY2xv'@;
put 'c2VzdD9hLmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKTphLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKSksdGhpcy5fZHJhZ1JlZi53aXRoUm9vdEVsZW1lbnQoZHx8YSl9X2dldEJvdW5kYXJ5RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5i'@;
put 'b3VuZGFyeUVsZW1lbnQ7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoYSk6UDAoYSk6bnVsbH1fc3luY0lucHV0cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57aWYoIWEuaXNEcmFnZ2luZygpKXtjb25zdCBk'@;
put 'PXRoaXMuX2RpcixoPXRoaXMuZHJhZ1N0YXJ0RGVsYXksZj10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS5kYXRhLHZpZXdDb250YWluZXI6dGhp'@;
put 'cy5fdmlld0NvbnRhaW5lclJlZn06bnVsbCxfPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcHJldmlld1RlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcHJldmlld1RlbXBsYXRlLmRhdGEsbWF0Y2hTaXplOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5tYXRj'@;
put 'aFNpemUsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsO2EuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5kcmFnU3RhcnREZWxheT0ib2JqZWN0Ij09dHlwZW9mIGgmJmg/aDpCb2UoaCksYS5jb25zdHJhaW5Qb3NpdGlv'@;
put 'bj10aGlzLmNvbnN0cmFpblBvc2l0aW9uLGEucHJldmlld0NsYXNzPXRoaXMucHJldmlld0NsYXNzLGEud2l0aEJvdW5kYXJ5RWxlbWVudCh0aGlzLl9nZXRCb3VuZGFyeUVsZW1lbnQoKSkud2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUoZikud2l0aFByZXZpZXdUZW1wbGF0ZShfKS53aXRoUHJl'@;
put 'dmlld0NvbnRhaW5lcih0aGlzLnByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiKSxkJiZhLndpdGhEaXJlY3Rpb24oZC52YWx1ZSl9fSksYS5iZWZvcmVTdGFydGVkLnBpcGUoaWQoMSkpLnN1YnNjcmliZSgoKT0+e2lmKHRoaXMuX3BhcmVudERyYWcpcmV0dXJuIHZvaWQgYS53aXRoUGFyZW50'@;
put 'KHRoaXMuX3BhcmVudERyYWcuX2RyYWdSZWYpO2xldCBkPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtkOyl7aWYoZC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1kcmFnIikpe2Eud2l0aFBhcmVudChjLl9kcmFnSW5zdGFuY2VzLmZpbmQoaD0+aC5lbGVt'@;
put 'ZW50Lm5hdGl2ZUVsZW1lbnQ9PT1kKT8uX2RyYWdSZWZ8fG51bGwpO2JyZWFrfWQ9ZC5wYXJlbnRFbGVtZW50fX0pfV9oYW5kbGVFdmVudHMoYSl7YS5zdGFydGVkLnN1YnNjcmliZShkPT57dGhpcy5zdGFydGVkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFu'@;
put 'Z2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEucmVsZWFzZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnJlbGVhc2VkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OmQuZXZlbnR9KX0pLGEuZW5kZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZGVkLmVtaXQoe3NvdXJjZTp0aGlzLGRpc3RhbmNl'@;
put 'OmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVt'@;
put 'OnRoaXMsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4fSl9KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpc30pfSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3By'@;
put 'ZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpkLmlzUG9pbnRlck92ZXJD'@;
put 'b250YWluZXIsaXRlbTp0aGlzLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KX0pfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdTdGFydERlbGF5OmgsY29uc3RyYWluUG9zaXRpb246ZixwcmV2aWV3Q2xhc3M6'@;
put 'Xyxib3VuZGFyeUVsZW1lbnQ6VCxkcmFnZ2luZ0Rpc2FibGVkOlcscm9vdEVsZW1lbnRTZWxlY3RvcjppZSxwcmV2aWV3Q29udGFpbmVyOnBlfT1hO3RoaXMuZGlzYWJsZWQ9Vz8/ITEsdGhpcy5kcmFnU3RhcnREZWxheT1ofHwwLGQmJih0aGlzLmxvY2tBeGlzPWQpLGYmJih0aGlzLmNvbnN0'@;
put 'cmFpblBvc2l0aW9uPWYpLF8mJih0aGlzLnByZXZpZXdDbGFzcz1fKSxUJiYodGhpcy5ib3VuZGFyeUVsZW1lbnQ9VCksaWUmJih0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3I9aWUpLHBlJiYodGhpcy5wcmV2aWV3Q29udGFpbmVyPXBlKX1fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKXt0aGlzLl9o'@;
put 'YW5kbGVzLmNoYW5nZXMucGlwZShjcCh0aGlzLl9oYW5kbGVzKSxVYyhhPT57Y29uc3QgZD1hLmZpbHRlcihoPT5oLl9wYXJlbnREcmFnPT09dGhpcykubWFwKGg9PmguZWxlbWVudCk7dGhpcy5fc2VsZkhhbmRsZSYmdGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiZkLnB1c2godGhpcy5lbGVt'@;
put 'ZW50KSx0aGlzLl9kcmFnUmVmLndpdGhIYW5kbGVzKGQpfSksU2EoYT0+aXMoLi4uYS5tYXAoZD0+ZC5fc3RhdGVDaGFuZ2VzLnBpcGUoY3AoZCkpKSkpLGFoKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShhPT57Y29uc3QgZD10aGlzLl9kcmFnUmVmLGg9YS5lbGVtZW50Lm5hdGl2ZUVs'@;
put 'ZW1lbnQ7YS5kaXNhYmxlZD9kLmRpc2FibGVIYW5kbGUoaCk6ZC5lbmFibGVIYW5kbGUoaCl9KX19cmV0dXJuIGMuX2RyYWdJbnN0YW5jZXM9W10sYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQobXNlLDEyKSx0dChMcyksdHQoTm8pLHR0KGFzKSx0'@;
put 'dChnc2UsOCksdHQoS29lLDgpLHR0KG9VKSx0dChVYSksdHQobFUsMTApLHR0KHNVLDEyKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgseXNlLDUpLElvKGgs'@;
put 'YnNlLDUpLElvKGgsbFUsNSkpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuX3ByZXZpZXdUZW1wbGF0ZT1mLmZpcnN0KSxhaShmPWxpKCkpJiYoZC5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1mLmZpcnN0KSxhaShmPWxpKCkpJiYoZC5faGFuZGxlcz1mKX19LGhvc3RBdHRyczpbMSwiY2RrLWRy'@;
put 'YWciXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNkay1kcmFnLWRpc2FibGVkIixkLmRpc2FibGVkKSgiY2RrLWRyYWctZHJhZ2dpbmciLGQuX2RyYWdSZWYuaXNEcmFnZ2luZygpKX0saW5wdXRzOntkYXRhOlsiY2RrRHJhZ0RhdGEiLCJkYXRhIl0s'@;
put 'bG9ja0F4aXM6WyJjZGtEcmFnTG9ja0F4aXMiLCJsb2NrQXhpcyJdLHJvb3RFbGVtZW50U2VsZWN0b3I6WyJjZGtEcmFnUm9vdEVsZW1lbnQiLCJyb290RWxlbWVudFNlbGVjdG9yIl0sYm91bmRhcnlFbGVtZW50OlsiY2RrRHJhZ0JvdW5kYXJ5IiwiYm91bmRhcnlFbGVtZW50Il0sZHJhZ1N0'@;
put 'YXJ0RGVsYXk6WyJjZGtEcmFnU3RhcnREZWxheSIsImRyYWdTdGFydERlbGF5Il0sZnJlZURyYWdQb3NpdGlvbjpbImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiZnJlZURyYWdQb3NpdGlvbiJdLGRpc2FibGVkOlsiY2RrRHJhZ0Rpc2FibGVkIiwiZGlzYWJsZWQiXSxjb25zdHJhaW5Qb3Np'@;
put 'dGlvbjpbImNka0RyYWdDb25zdHJhaW5Qb3NpdGlvbiIsImNvbnN0cmFpblBvc2l0aW9uIl0scHJldmlld0NsYXNzOlsiY2RrRHJhZ1ByZXZpZXdDbGFzcyIsInByZXZpZXdDbGFzcyJdLHByZXZpZXdDb250YWluZXI6WyJjZGtEcmFnUHJldmlld0NvbnRhaW5lciIsInByZXZpZXdDb250YWlu'@;
put 'ZXIiXX0sb3V0cHV0czp7c3RhcnRlZDoiY2RrRHJhZ1N0YXJ0ZWQiLHJlbGVhc2VkOiJjZGtEcmFnUmVsZWFzZWQiLGVuZGVkOiJjZGtEcmFnRW5kZWQiLGVudGVyZWQ6ImNka0RyYWdFbnRlcmVkIixleGl0ZWQ6ImNka0RyYWdFeGl0ZWQiLGRyb3BwZWQ6ImNka0RyYWdEcm9wcGVkIixtb3Zl'@;
put 'ZDoiY2RrRHJhZ01vdmVkIn0sZXhwb3J0QXM6WyJjZGtEcmFnIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdGkoW3twcm92aWRlOnNVLHVzZUV4aXN0aW5nOmN9XSksdmFdfSksY30pKCksQ3NlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbb1VdLGltcG9ydHM6W1pWZV19KSxjfSkoKTtjb25zdCBVZz12b2lkIDAsRUJlPVsiZW4tR0IiLFtbImEiLCJwIl0sWyJhbSIsInBtIl0sVWddLFtbImFtIiwicG0iXSxVZyxVZ10s'@;
put 'W1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1Iiwi'@;
put 'V2UiLCJUaCIsIkZyIiwiU2EiXV0sVWcsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXB0IiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVi'@;
put 'cnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxVZyxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDEsWzYsMF0s'@;
put 'WyJkZC9NTS95IiwiZCBNTU0geSIsImQgTU1NTSB5IiwiRUVFRSwgZCBNTU1NIHkiXSxbIkhIOm1tIiwiSEg6bW06c3MiLCJISDptbTpzcyB6IiwiSEg6bW06c3Mgenp6eiJdLFsiezF9LCB7MH0iLFVnLCJ7MX0gJ2F0JyB7MH0iLFVnXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJc'@;
put 'eGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIkdCUCIsIlx4YTMiLCJCcml0aXNoIFBvdW5kIix7SlBZOlsiSlBceGE1IiwiXHhhNSJdLFVTRDpbIlVTJCIsIiQiXX0sImx0ciIsZnVuY3Rpb24geEJl'@;
put 'KGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1fV0sa0JlPVsiaW5wdXQiXTtmdW5jdGlvbiBBQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDcp'@;
put 'LE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGdyKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1jb25zdCBUQmU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57IndpZHRoLnB4IjpjLCJtYXgtaGVpZ2h0LnB4IjpsfX0sREJlPVsiKiJdO2xl'@;
put 'dCBTc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNkcj1hLHRoaXMuaW5wdXRJZD0iIix0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuYXV0b2NvbXBsZXRlPSJvZmYiLHRoaXMudGFiaW5k'@;
put 'ZXg9IiIsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy5vbklucHV0S2V5ZG93bj1uZXcgRXIsdGhpcy5vbklucHV0Q2hhbmdlPW5ldyBFcix0aGlzLnZhbHVlQ2hhbmdlPW5ldyBFcix0aGlzLm9uTG9hZGluZ01vcmU9bmV3IEVyLHRoaXMuZGF0'@;
put 'YWxpc3RPcGVuPSExLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5PTE1MCx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5pbnB1dENsaWVudFJlY3Q9e30sdGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmxvYWRpbmdNb3JlPSExfW5nT25Jbml0'@;
put 'KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX0sNTAwKX1vbklucHV0RmlyZWQoYSxkLGgpe3RoaXMub3BlbkRhdGFsaXN0KCJjbGljayIhPT1oKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMuZmlsdGVyT3B0'@;
put 'aW9uc0xpc3QoKSwoIXRoaXMuZW1pdE9ubHlTZWxlY3RlZHx8ZCkmJih0aGlzLm9uSW5wdXRDaGFuZ2UuZW1pdCh7dGFyZ2V0Ont2YWx1ZTp0aGlzLnZhbHVlfX0pLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSl9b25JbnB1dENsaWNrKGEpe3RoaXMub3BlbkRhdGFsaXN0KCl9'@;
put 'b3BlbkRhdGFsaXN0KGE9ITApe3RoaXMuZGF0YWxpc3RPcGVuPSEwLGEmJih0aGlzLmFmdGVyT3BlbkxvY2s9ITAsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmFmdGVyT3BlbkxvY2s9ITF9LHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5KSl9Y2xv'@;
put 'c2VEYXRhbGlzdCgpe2NsZWFyVGltZW91dCh0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQpLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmRhdGFsaXN0T3Blbj0hMX1yZXNldERhdGFsaXN0RmlsdGVyKCl7dGhpcy5maWx0ZXJPcHRpb25zTGlzdCghMCl9b25JbnB1dEZvY3VzaW4o'@;
put 'YSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITB9b25JbnB1dEZvY3Vzb3V0KGEpe3RoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25JbnB1dE1vdXNlZW50ZXIoYSl7dGhpcy5pbnB1dENsaWVudFJlY3Qud2lkdGh8fHRoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlv'@;
put 'bigpfWZpbHRlck9wdGlvbnNMaXN0KGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25gKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO2lmKDA9PT10aGlzLnZhbHVlLmxlbmd0aCl7Zi5j'@;
put 'bGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1pZihhKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWNvbnN0IF89Zi5pbm5lclRleHR8fCIiLFQ9Zi52YWx1ZXx8IiI7KF8rVCk/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy52YWx1ZS50b0xvd2Vy'@;
put 'Q2FzZSgpKT9mLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOmYuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fXNldFRvQ2xvc2VEYXRhbGlzdCgpe3RoaXMuZGF0YWxpc3RDbG9zZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2V8fHRoaXMuYWZ0ZXJP'@;
put 'cGVuTG9ja3x8KHRoaXMuY2xvc2VEYXRhbGlzdCgpLHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5yZXNldERhdGFsaXN0RmlsdGVyKCkpfSwxMDApfWNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKXtjb25zdCBkPXRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5k'@;
put 'aW5nQ2xpZW50UmVjdCgpO2Qud2lkdGg+MCYmZC5oZWlnaHQ+MCYmKHRoaXMuaW5wdXRDbGllbnRSZWN0PXt3aWR0aDpkLndpZHRoLGJvdHRvbTpkLmJvdHRvbX0pLHRoaXMuaW5uZXJIZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0fW9uRGF0YUxpc3RNb3VzZUVudGVyKGEpe3RoaXMucHJldmVu'@;
put 'dERhdGFsaXN0Q2xvc2U9ITB9b25EYXRhTGlzdE1vdXNlTGVhdmUoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9b25EYXRhTGlzdFNjcm9sbChhKXt0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uRGF0YUxp'@;
put 'c3RDbGljayhhKXtjb25zdCBkPWEudGFyZ2V0OyJsb2FkLW1vcmUiIT09ZC5kYXRhc2V0Py50eXBlPyJPUFRJT04iIT09ZC50YWdOYW1lfHx0aGlzLnNldE9wdGlvblZhbHVlKGQuaW5uZXJUZXh0LGQudmFsdWUpOnRoaXMubG9hZE1vcmUoKX1sb2FkTW9yZSgpe3RoaXMub25Mb2FkaW5nTW9y'@;
put 'ZS5lbWl0KHtsb2FkTW9yZUZpbmlzaGVkOmE9Pnt0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9YX19KSx0aGlzLmxvYWRpbmdNb3JlPSEwfXNldE9wdGlvblZhbHVlKGEsZCl7KGF8fGQpJiYoZHx8KGQ9YSkpLGQmJih0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEx'@;
put 'LHRoaXMudmFsdWU9ZCx0aGlzLm9uSW5wdXRGaXJlZChudWxsLCEwLCJjbGljayIpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCkpfW9uTWFpbktleWRvd24oYSl7c3dpdGNoKGEua2V5KXtjYXNlIkFycm93VXAiOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygidXAiKTticmVhaztjYXNlIkFy'@;
put 'cm93RG93biI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3VzKCJkb3duIik7YnJlYWs7Y2FzZSJFbnRlciI6dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCl9fW9uSW5wdXRLZXl1cChhKXtyZXR1cm4hdGhpcy5kYXRhbGlzdE9wZW58fCgiRXNjYXBlIj09PWEua2V5PyhhLnN0b3BQcm9wYWdhdGlv'@;
put 'bigpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSwhMSk6dm9pZCAwKX11bnNlbGVjdEFsbE9wdGlvbnMoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9y'@;
put 'KGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2VkIil9c2VsZWN0Rm9jdXNlZE9wdGlvbigpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb24uZm9jdXNlZGApO2EmJnRoaXMub25E'@;
put 'YXRhTGlzdENsaWNrKHt0YXJnZXQ6YX0pLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9Z2V0T3B0aW9uc01vdmVGb2N1cyhhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uOm5vdCguaGlkZGVuKWApO2xldCBoPTA7'@;
put 'Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IF89ZFtmXTtpZihfLmNsYXNzTGlzdC5jb250YWlucygiZm9jdXNlZCIpKXtoPSJkb3duIj09PWE/ZisxOmYtMSxoPDAmJihoPWQubGVuZ3RoLTEpLGg+ZC5sZW5ndGgtMSYmKGg9MCksXy5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2Vk'@;
put 'Iik7YnJlYWt9fWRbaF0uY2xhc3NMaXN0LmFkZCgiZm9jdXNlZCIpfW9uUmVzaXplKGEpe3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJhcHAtYXV0b2NvbXBsZXRlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oa0JlLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuaW5wdXRFbGVtZW50PWguZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgicmVzaXpl'@;
put 'IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblJlc2l6ZShmKX0sMCxtNil9LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsYXV0b2NvbXBsZXRlOiJhdXRvY29tcGxl'@;
put 'dGUiLHRhYmluZGV4OiJ0YWJpbmRleCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7b25JbnB1dEtleWRvd246Im9uSW5wdXRLZXlkb3duIixvbklucHV0Q2hhbmdlOiJvbklucHV0Q2hhbmdlIix2'@;
put 'YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uTG9hZGluZ01vcmU6Im9uTG9hZGluZ01vcmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6REJlLGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1sxLCJhdXRvY29tcGxldGUtd3JhcHBlciIsMywia2V5ZG93biJdLFsidHlwZSIsInRleHQiLCJhdXRvY29t'@;
put 'cGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJ0YWJpbmRleCIsIjAiLDEsImlucHV0LXZhbCIsMywiaWQiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJmb2N1cyIsImZvY3Vzb3V0Iiwia2V5dXAiXSxb'@;
put 'ImlucHV0IiwiIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsIm5nU3R5bGUiLCJpZCIsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJzY3JvbGwiXSxbIm9wdGlvbnMiLCIiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsImNsYXNzIiwibG9hZC1tb3JlIiw0LCJu'@;
put 'Z0lmIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLDEsImxvYWQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKEFpKCksbWUoMCwiZGl2IiwwKSx4dCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25NYWluS2V5ZG93bihmKX0pLG1lKDEsImlucHV0Iiwx'@;
put 'LDIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC52YWx1ZT1mfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklucHV0Q2xpY2soZil9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dEZpcmVkKGYpfSkoIm1vdXNlZW50'@;
put 'ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRNb3VzZWVudGVyKGYpfSkoImZvY3VzIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklucHV0Rm9jdXNpbihmKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dEZvY3Vzb3V0KGYpfSkoImtleXVwIixmdW5jdGlv'@;
put 'bihmKXtyZXR1cm4gZC5vbklucHV0S2V5dXAoZil9KSx5ZSgpLHF0KDMsImRpdiIsMyksbWUoNCwiZGl2Iiw0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRGF0YUxpc3RDbGljayhmKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRhdGFMaXN0TW91'@;
put 'c2VFbnRlcihmKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRhdGFMaXN0TW91c2VMZWF2ZShmKX0pKCJzY3JvbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRGF0YUxpc3RTY3JvbGwoZil9KSxtZSg1LCJkaXYiLG51bGwsNSksa3IoNykseWUoKSxKZSg4LEFCZSwy'@;
put 'LDEsIm9wdGlvbiIsNikseWUoKSgpKSwyJmEpe2NvbnN0IGg9JGkoNik7Q2UoMSksUmUoImlkIixkLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlcikoIm5nTW9kZWwiLGQudmFsdWUpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksVHIoImxpc3QiLCJkYXRhbGlzdF8iK2QuaW5w'@;
put 'dXRJZCksQ2UoMiksZHIoImhpZGRlbiIsIWQuZGF0YWxpc3RPcGVuKSxDZSgxKSxkcigiaGlkZGVuIiwhZC5kYXRhbGlzdE9wZW4pLFJlKCJuZ1N0eWxlIixRMigxMixUQmUsZC5pbnB1dENsaWVudFJlY3Qud2lkdGgsZC5pbm5lckhlaWdodCYmZC5pbnB1dENsaWVudFJlY3QuYm90dG9tP2Qu'@;
put 'aW5uZXJIZWlnaHQtZC5pbnB1dENsaWVudFJlY3QuYm90dG9tOnZvaWQgMCkpKCJpZCIsImRhdGFsaXN0XyIrZC5pbnB1dElkKSxDZSg0KSxSZSgibmdJZiIsaC5jaGlsZHJlbi5sZW5ndGg+MCYmZC5lbmFibGVMb2FkTW9yZSl9fSxkZXBlbmRlbmNpZXM6W1ppLHJHLGwxLGMxLFdhLEJzLE9z'@;
put 'XSxzdHlsZXM6WyIuaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1pbnB1dFtfbmdjb250'@;
put 'ZW50LSVDT01QJV06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6'@;
put 'MTUwMH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtiYWNrZ3JvdW5kOndoaXRlO2JveC1zaGFkb3c6MCAzcHggMTBweCAtMXB4ICMwMDAwMDAyYjtvdmVyZmxvdzphdXRvO3otaW5k'@;
put 'ZXg6MjAwMH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgb3B0aW9ue3BhZGRpbmc6NXB4IDEwcHg7Y3Vyc29yOnBvaW50ZXJ9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA1ODgyMzUyOTQpfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVdICAgICBvcHRpb24u'@;
put 'Zm9jdXNlZHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA1ODgyMzUyOTQpfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9hZC1tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2fSJd'@;
put 'fSksY30pKCksSUJlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aDwxKXJldHVybiBhO3N3aXRjaChkKXtjYXNlImRhdGUiOnJldHVybiBLbyhhLCJERE1NTVlZWVk6aGg6bW06c3MiKS5mb3JtYXQoIkREL01NL1lZWVkiKTtjYXNl'@;
put 'InRpbWUiOntpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJzaW5nIHRpbWUuIFZhbHVlIGlzIG5vdCBzdHJpbmcuIik7Y29uc3QgaD1wYXJzZUludChhLnNwbGl0KCI6IilbMF0pLGY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSxfPXBhcnNlSW50KGEu'@;
put 'c3BsaXQoIjoiKVsyXSk7cmV0dXJuYCR7aDwxMD8iMCIraDpofToke2Y8MTA/IjAiK2Y6Zn06JHtfPDEwPyIwIitfOl99YH19cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP2E6YS50b1N0cmluZygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVwaXBlPU5hKHtuYW1lOiJkYXRlVGltZUZvcm1hdHRlciIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKTtjb25zdCBMQmU9WyJpbnB1dCJdO2Z1bmN0aW9uIFJCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLE5lKDEsIiAvICIpLG1lKDIsInNwYW4iLDQpLHh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25DaGFuZ2VMYWJlbCgic2Vjb25kIikpfSksTmUoMykseWUoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxkcigidmFsdWUtdHlwZS1zZWxlY3RlZCIsInNlY29uZCI9PT1hLmxhYmVsU2VsZWN0ZWQpLENlKDEpLG9y'@;
put 'KGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBPQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsYWJlbCIsMykoMSwic3BhbiIsNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uQ2hhbmdlTGFiZWwoImZpcnN0IikpfSksTmUoMikseWUoKSxK'@;
put 'ZSgzLFJCZSw0LDMsIm5nLWNvbnRhaW5lciIsNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtkcigic2Vjb25kTGFiZWxBY3RpdmUiLGEuc2Vjb25kTGFiZWwmJmEuc2Vjb25kTGFiZWwubGVuZ3RoPjApLENlKDEpLGRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwiZmlyc3QiPT09YS5sYWJl'@;
put 'bFNlbGVjdGVkKSxDZSgxKSxvcihhLmxhYmVsKSxDZSgxKSxSZSgibmdJZiIsYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIFBCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImNsci1kYXRlLWNvbnRhaW5lciIpKDIsImlucHV0Iiw2KSx4dCgiY2xyRGF0ZUNoYW5nZSIs'@;
put 'ZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25EYXRlSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pbnB1dEZv'@;
put 'Y3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gQnQoYSksanQoVmUoKS5vbklucHV0TW91c2VPdXQoKSl9KSxiYSgzLCJkYXRlVGltZUZvcm1hdHRlciIpLHllKCkoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJpZCIsYS5pbnB1dElkKSgicGxhY2Vob2xkZXIiLE01KDMsNSxhLnRlbXAsImRhdGUiKSkoImNs'@;
put 'ckRhdGUiLGEudmFsdWUpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksVHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIEZCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImlucHV0Iiw3KSx4dCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiBC'@;
put 'dChhKSxqdChWZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1'@;
put 'bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbklu'@;
put 'cHV0TW91c2VPdXQoKSl9KSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoInZhbHVlIixhLnZhbHVlKSgiaWQiLGEuaW5wdXRJZCkoImRpc2FibGVkIixhLmRpc2FibGVkKSxUcigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gSEJlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiYXBwLWF1dG9jb21wbGV0ZSIsOCw5KSx4dCgib25JbnB1dENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dEZpcmVkKGgpKX0pKCJvbkxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQo'@;
put 'YSksanQoVmUoKS5hdXRvY29tcGxldGVMb2FkaW5nTW9yZShoKSl9KSxrcigzKSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoImlucHV0SWQiLGEuaW5wdXRJZCkoInZhbHVlIiwobnVsbD09YS52YWx1ZT9udWxsOmEudmFsdWUudG9TdHJpbmcoKSl8fCIiKSgiZW5h'@;
put 'YmxlTG9hZE1vcmUiLGEuZW5hYmxlTG9hZE1vcmUpKCJlbWl0T25seVNlbGVjdGVkIixhLmVtaXRPbmx5U2VsZWN0ZWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCl9fWNvbnN0IE5CZT1bIioiXTtsZXQgTXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlucHV0SWQ9IiIsdGhp'@;
put 'cy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5kaXNhYmxlU29mdHNlbGVjdD0hMSx0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBFcix0aGlzLm9uSW5wdXRFdmVudD1uZXcg'@;
put 'RXIsdGhpcy5mb2N1c2luSW5wdXQ9bmV3IEVyLHRoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZT1uZXcgRXIsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlPW5ldyBFcix0aGlzLnRlbXA9IiIsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5sYWJlbFNlbGVjdGVkPSJmaXJzdCJ9bmdPbkNo'@;
put 'YW5nZXMoYSl7YS52YWx1ZSYmYS52YWx1ZS5jdXJyZW50VmFsdWUhPT1hLnZhbHVlLnByZXZpb3VzVmFsdWUmJnRoaXMudmFsdWVDaGFuZ2UuZW1pdChhLnZhbHVlLmN1cnJlbnRWYWx1ZSl9bmdPbkluaXQoKXt9YXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoYSl7dGhpcy5vbkF1dG9jb21wbGV0'@;
put 'ZUxvYWRpbmdNb3JlLmVtaXQoYSl9b25JbnB1dEZpcmVkKGEpe2NvbnN0IGQ9YS50YXJnZXQudmFsdWU7dGhpcy50ZW1wPWQsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGQpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25EYXRlSW5wdXRGaXJlZChhKXt0aGlzLnRlbXA9YSx0aGlzLnZhbHVl'@;
put 'Q2hhbmdlLmVtaXQoYSksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbklucHV0TW91c2VPdXQoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy52YWx1ZT10aGlzLnRlbXAsdGhpcy50ZW1wPSIiKX1vbklucHV0TW91c2VPdmVyKCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRo'@;
put 'aXMudGVtcD10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiIsdGhpcy52YWx1ZT0iIil9b25Gb2N1c2luSW5wdXQoYSl7dGhpcy5mb2N1c2luSW5wdXQuZW1pdChhKX1vbkNoYW5nZUxhYmVsKGEpe3RoaXMubGFiZWxTZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KCJmaXJz'@;
put 'dCI9PT1hP3RoaXMubGFiZWw6dGhpcy5zZWNvbmRMYWJlbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc29mdC1zZWxlY3QiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7'@;
put 'aWYoMSZhJiZSbyhMQmUsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5pbnB1dEVsZW1lbnQ9aC5maXJzdCl9fSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLGxhYmVsOiJsYWJlbCIsc2Vjb25kTGFiZWw6InNlY29uZExhYmVsIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxl'@;
put 'ZCIsdHlwZToidHlwZSIsZGlzYWJsZVNvZnRzZWxlY3Q6ImRpc2FibGVTb2Z0c2VsZWN0IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uSW5wdXRF'@;
put 'dmVudDoib25JbnB1dEV2ZW50Iixmb2N1c2luSW5wdXQ6ImZvY3VzaW5JbnB1dCIsb25BdXRvY29tcGxldGVMb2FkaW5nTW9yZToib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsc2VsZWN0ZWRMYWJlbENoYW5nZToic2VsZWN0ZWRMYWJlbENoYW5nZSJ9LGZlYXR1cmVzOlt2YV0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOk5CZSxkZWNsczo1LHZhcnM6NSxjb25zdHM6W1siY2xhc3MiLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzMsImNs'@;
put 'aWNrIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMywiaWQiLCJwbGFjZWhvbGRlciIsImNsckRhdGUiLCJkaXNhYmxlZCIsImNsckRhdGVDaGFuZ2UiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Il0sWyJ0eXBlIiwi'@;
put 'dGltZSIsInN0ZXAiLCIxIiwxLCJpbnB1dC12YWwiLDMsInZhbHVlIiwiaWQiLCJkaXNhYmxlZCIsImlucHV0IiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMi'@;
put 'LCIiLDEsImlucHV0LXZhbCIsMywiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJlbWl0T25seVNlbGVjdGVkIiwiZGlzYWJsZWQiLCJvbklucHV0Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgp'@;
put 'LEplKDAsT0JlLDQsNiwibGFiZWwiLDApLFZyKDEsMSksSmUoMixQQmUsNCw4LCJuZy1jb250YWluZXIiLDIpLEplKDMsRkJlLDIsNCwibmctY29udGFpbmVyIiwyKSxKZSg0LEhCZSw0LDUsIm5nLWNvbnRhaW5lciIsMiksenIoKSksMiZhJiYoUmUoIm5nSWYiLGQubGFiZWwpLENlKDEpLFJl'@;
put 'KCJuZ1N3aXRjaCIsZC50eXBlKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsInRleHQiKSl9LGRlcGVuZGVuY2llczpbWmksbmQsdGgsVXMsTGIsJEYscUYsU3NlLElCZV0sc3R5'@;
put 'bGVzOlsiLmlucHV0LXZhbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9aW5wdXRbX25nY29udGVudC0l'@;
put 'Q09NUCVdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAgIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTVweH1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgICBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi1y'@;
put 'aWdodDoyMHB4O21hcmdpbi10b3A6LTVweH1sYWJlbC5zZWNvbmRMYWJlbEFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLnZhbHVlLXR5cGUtc2VsZWN0ZWQpe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y3Vyc29yOnBvaW50ZXI7'@;
put 'b3BhY2l0eTouNn0iXX0pLGN9KSgpLFU3PSgoKT0+e2NsYXNzIGN7c2V0IG5nVmFyKGEpe3RoaXMuY29udGV4dC4kaW1wbGljaXQ9dGhpcy5jb250ZXh0Lm5nVmFyPWEsdGhpcy5oYXNWaWV3fHwodGhpcy52Y1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZix0aGlzLmNv'@;
put 'bnRleHQpLHRoaXMuaGFzVmlldz0hMCl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLnRlbXBsYXRlUmVmPWEsdGhpcy52Y1JlZj1kLHRoaXMuY29udGV4dD17JGltcGxpY2l0Om51bGwsbmdWYXI6bnVsbH0sdGhpcy5oYXNWaWV3PSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKSh0dCh6YSksdHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdWYXIiLCIiXV0saW5wdXRzOntuZ1ZhcjoibmdWYXIifX0pLGN9KSgpLFZCZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1h'@;
put 'fXRyYW5zZm9ybShhLGQ9ImRheXMiLGg9ITEpe2lmKHZvaWQgMD09PWEmJihhPSIiKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksMD09PWEubGVuZ3RoKXtpZigiZGF5cyI9PT1kKXJldHVybiBudWxsO2lmKCJzZWNvbmRzIj09PWQpcmV0dXJuIGg/IjExOjAwOjAwIjpu'@;
put 'dWxsfWxldCBmPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZCk7aWYoND09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IFQ9YS5zcGxpdCgiOiIpO2Y9bmV3IERhdGUoVFswXSksZi5zZXRIb3VycyhwYXJzZUludChUWzFdKSksZi5zZXRNaW51dGVzKHBh'@;
put 'cnNlSW50KFRbMl0pKSxmLnNldFNlY29uZHMocGFyc2VJbnQoVFszXSkpfWVsc2UgaXNOYU4oTnVtYmVyKGEpKSYmKGY9bmV3IERhdGUoYSkpO2xldCBfPWAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldEhvdXJzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJT'@;
put 'ZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldFNlY29uZHMoKS50b1N0cmluZygpKX1gO3JldHVybiBoP186Zn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykodHQoVGMsMTYpKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJzYXNUb0pzRGF0ZSIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKSxCQmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSl7aWYobnVsbD09YXx8IiI9'@;
put 'PT1hKXJldHVybiIiO2xldCBkLGgsZjtpZigic3RyaW5nIj09dHlwZW9mIGEmJjM9PT1hLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCBfPWEuc3BsaXQoIjoiKTtkPV9bMF0saD1fWzFdLGY9X1syXX1lbHNlIm51bWJlciIhPXR5cGVvZiBhJiYoYT1wYXJzZUludChhKSksZD1NYXRoLmZsb29y'@;
put 'KGEvMzYwMCksaD1NYXRoLmZsb29yKGElMzYwMC82MCksZj1NYXRoLmZsb29yKGElMzYwMCU2MCk7cmV0dXJuYCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGQpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhoKX06JHt0aGlzLmhlbHBlclNlcnZpY2Uu'@;
put 'YWRkTGVhZGluZ1plcm8oZil9YH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVGMsMTYpKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJzZWNvbmRzUGFyc2VyIix0eXBlOmMscHVyZTohMH0pLGN9KSgpO2Z1bmN0aW9uIGpCZShjLGwpe2lmKDEm'@;
put 'YyYmKG1lKDAsIm9wdGlvbiIsMjIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgic2VsZWN0ZWQiLFZlKCkubG9naWNPcGVyYXRvcnNbMF0pLENlKDEpLGdyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHpCZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMjMpLE5lKDEsIlxu'@;
put 'ICAgICAgICAiKSxxdCgyLCJwcm9ncmVzcyIpLE5lKDMsIlxuICAgICAgIikseWUoKSl9ZnVuY3Rpb24gVUJlKGMsbCl7MSZjJiZxdCgwLCJkaXYiKX1mdW5jdGlvbiBaQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDIyKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj'@;
put 'aXQ7UmUoInNlbGVjdGVkIixWZSgyKS5sb2dpY09wZXJhdG9yc1swXSksQ2UoMSksZ3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gWUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5h'@;
put 'ZGRHcm91cENsYXVzZSgpKX0pLHF0KDEsImNsci1pY29uIiwzMyksbWUoMiwic3BhbiIpLE5lKDMsIkdyb3VwIikseWUoKSgpfX1mdW5jdGlvbiBXQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMzQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKCkuaW5kZXg7cmV0dXJuIGp0KFZlKCkucmVtb3ZlR3JvdXBDbGF1c2UoaCkpfSkseWUoKX19ZnVuY3Rpb24gR0JlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixhLk5BTUUsIiAiKX19'@;
put 'ZnVuY3Rpb24gJEJlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLG9yKGEpfX1mdW5jdGlvbiBxQmUoYyxsKXsxJmMmJmphKDApfWNvbnN0IEtCZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJue3F1ZXJ5OmMscXVl'@;
put 'cnlJbmRleDpsLGNsYXVzZUluZGV4OmF9fTtmdW5jdGlvbiBYQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKS5pbmRleCxmPVZlKCkuaW5kZXgsXz1WZSgpO3Jl'@;
put 'dHVybiBfLmN1cnJlbnRRdWVyeUluZGV4PWgsanQoXy5jdXJyZW50Q2xhdXNlSW5kZXg9Zil9KSxOZSgyLCIgQ2hvb3NlIHZhbHVlcyAiKSx5ZSgpLEplKDMscUJlLDEsMCwibmctY29udGFpbmVyIiw1MykseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5k'@;
put 'ZXgsZj1WZSgpLmluZGV4O1ZlKCk7Y29uc3QgXz0kaSgzNyk7Q2UoMyksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLF8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIseV8oMixLQmUsZCxoLGYpKX19ZnVuY3Rpb24gSkJlKGMsbCl7MSZjJiZqYSgwKX1jb25zdCBRQmU9ZnVuY3Rpb24oYyxsLGEs'@;
put 'ZCl7cmV0dXJue3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfX07ZnVuY3Rpb24gZWplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw1NCksSmUoMSxKQmUsMSwwLCJuZy1jb250YWluZXIiLDUzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5uZ1Zhcixk'@;
put 'PVZlKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsXz1WZSgpLmluZGV4LFQ9VmUoKSxXPSRpKDMxKSxpZT0kaSgzMyk7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJlQudXNlUGlja2Vycz9XOmllKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFdNKDIsUUJlLGgsZixfLGEpKX19'@;
put 'ZnVuY3Rpb24gdGplKGMsbCl7MSZjJiZqYSgwKX1mdW5jdGlvbiBuamUoYyxsKXsxJmMmJmphKDApfWNvbnN0IHJqZT1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm57cmFuZ2U6InN0YXJ0IixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDowLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0'@;
put 'ZVRpbWU6ZH19LGlqZT1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm57cmFuZ2U6ImVuZCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MSxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9fTtmdW5jdGlvbiBvamUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDU1KSgxLCJk'@;
put 'aXYiLDU2KSxKZSgyLHRqZSwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLHllKCksbWUoMywiZGl2Iiw1NyksSmUoNCxuamUsMSwwLCJuZy1jb250YWluZXIiLDUzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyLGQ9VmUoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCxfPVZlKCkuaW5k'@;
put 'ZXgsVD1WZSgpLFc9JGkoMzEpLGllPSRpKDM1KTtDZSgyKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmVC51c2VQaWNrZXJzP1c6aWUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsV00oNCxyamUsaCxmLF8sYSkpLENlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZULnVzZVBpY2tl'@;
put 'cnM/VzppZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixXTSg5LGlqZSxoLGYsXyxhKSl9fWZ1bmN0aW9uIHNqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTgpKDEsImxhYmVsIiwzKSxOZSgyLCJWYWx1ZSIpLHllKCksbWUoMywiaW5wdXQiLDU5KSx4dCgibmdN'@;
put 'b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNpdC52YWx1ZT1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDIpLmluZGV4LF89VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS5zZXRWYXJpYWJsZVZhbHVl'@;
put 'cyhoLGYsXykpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMyksUmUoIm5nTW9kZWwiLGEudmFsdWUpfX1mdW5jdGlvbiBhamUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ2KSxKZSgxLFhCZSw0LDYsImRpdiIsNDcpLEplKDIsZWplLDIsNywiZGl2Iiw0'@;
put 'OCksSmUoMyxvamUsNSwxNCwiZGl2Iiw0OSksSmUoNCxzamUsNCwxLCJkaXYiLDUwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCJJTiI9PT1hLm9wZXJhdG9yfHwiTk9UIElOIj09PWEub3BlcmF0b3IpLENlKDEpLFJlKCJuZ0lmIiwiQkVUV0VF'@;
put 'TiIhPT1hLm9wZXJhdG9yJiYiSU4iIT09YS5vcGVyYXRvciYmIk5PVCBJTiIhPT1hLm9wZXJhdG9yJiYiTElLRSIhPT1hLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09YS5vcGVyYXRvciYmIkJFR0lOU19XSVRIIiE9PWEub3BlcmF0b3IpLENlKDEpLFJlKCJuZ0lmIiwiQkVUV0VFTiI9PT1hLm9w'@;
put 'ZXJhdG9yKSxDZSgxKSxSZSgibmdJZiIsIkxJS0UiPT09YS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWEub3BlcmF0b3J8fCJDT05UQUlOUyI9PT1hLm9wZXJhdG9yKX19ZnVuY3Rpb24gbGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2KSgxLCJkaXYiLDM1KSgy'@;
put 'LCJkaXYiLDM2KSgzLCJhcHAtc29mdC1zZWxlY3QiLDM3KSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQudmFyaWFibGU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPUJ0KGEpLF89Zi4kaW1wbGljaXQsVD1mLmlu'@;
put 'ZGV4LFc9VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS52YXJpYWJsZUlucHV0Q2hhbmdlKF8udmFyaWFibGUsVCxXLGgpKX0pLEplKDQsR0JlLDIsMSwib3B0aW9uIiwzOCkseWUoKSgpKCksbWUoNSwiZGl2IiwzOSkoNiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg3LCJsYWJlbCIpLE5lKDgs'@;
put 'Ik9wZXJhdG9yIikseWUoKSxtZSg5LCJzZWxlY3QiLDQwKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5vcGVyYXRvcj1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe2NvbnN0IGg9QnQoYSksZj1oLmluZGV4LF89aC4kaW1w'@;
put 'bGljaXQsVD1WZSgpLmluZGV4O3JldHVybiBqdChWZSgpLnNldFZhcmlhYmxlT3BlcmF0b3IoZixfLm9wZXJhdG9yLFQpKX0pLEplKDEwLCRCZSwyLDEsIm9wdGlvbiIsMzgpLHllKCkoKSgpLEplKDExLGFqZSw1LDQsImRpdiIsNDEpLG1lKDEyLCJkaXYiLDQyKSgxMywiYnV0dG9uIiw0Myks'@;
put 'eHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXgsXz1WZSgpLmluZGV4O3JldHVybiBqdChWZSgpLnJlbW92ZUNsYXVzZShmLF8pKX0pLHF0KDE0LCJjbHItaWNvbiIsNDQpKDE1LCJzcGFuIikseWUoKSxtZSgxNiwiYnV0dG9uIiw0NSkseHQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe0J0KGEpO2NvbnN0IGg9VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS5hZGRDbGF1c2UoaCkpfSkscXQoMTcsImNsci1pY29uIiwzMykoMTgsInNwYW4iKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoKS5pbmRleCxmPVZlKCk7ZHIoImlu'@;
put 'dmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLENlKDMpLFJlKCJpZCIsInNlbGVjdF92YWxzX3Zhcl9pZCIrZCsiXyIraCkoImlucHV0SWQiLCJ2YWxzX3Zhcl9pZCIrZCsiXyIraCkoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSgidmFsdWUiLGEudmFyaWFibGUpLENlKDEpLFJlKCJuZ0Zv'@;
put 'ck9mIixmLmNvbHMpLENlKDUpLFJlKCJuZ01vZGVsIixhLm9wZXJhdG9yKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5vcGVyYXRvcnMpLENlKDEpLFJlKCJuZ1ZhciIsIkRBVEUiPT09YS5kZHR5cGV8fCJEQVRFVElNRSI9PT1hLmRkdHlwZXx8IlRJTUUiPT09YS5kZHR5cGUpLENlKDIpLFJlKCJk'@;
put 'aXNhYmxlZCIsMT09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50cy5sZW5ndGgpfX1mdW5jdGlvbiBjamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDI0KSgxLCJkaXYiLDYpKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3QtY29udGFpbmVy'@;
put 'IikoNSwibGFiZWwiKSxOZSg2LCJMb2dpYyIpLHllKCksbWUoNywic2VsZWN0IiwyNykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQuY2xhdXNlTG9naWM9aCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoKS5zZXRMb2dpYygpKX0pLEplKDgsWkJlLDIsMiwib3B0aW9uIiw5KSx5ZSgpKCkoKSxxdCg5LCJiciIpLEplKDEwLFlCZSw0LDAsImJ1dHRvbiIsMjgpLHllKCksbWUoMTEsImRpdiIsMjkpLEplKDEyLFdCZSwxLDAsImNsci1pY29uIiwzMCksSmUoMTMsbGplLDE5LDExLCJkaXYi'@;
put 'LDMxKSx5ZSgpKCkscXQoMTQsImJyIikseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLGRyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxDZSg2KSxSZSgibmdNb2RlbCIsYS5jbGF1c2VMb2dpYykoImRpc2FibGVkIixhLmVsZW1lbnRzLmxl'@;
put 'bmd0aDwyKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5sb2dpY09wZXJhdG9ycyksQ2UoMiksUmUoIm5nSWYiLGQuaW5uZXJXaWR0aD43NjgpLENlKDIpLFJlKCJuZ0lmIixkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjEpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmVsZW1lbnRzKX19ZnVuY3Rpb24g'@;
put 'dWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MikseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleCxpZT1mLnF1ZXJ5VmFs'@;
put 'dWVJbmRleDtyZXR1cm4ganQoVmUoKS5kYXRlQ2hhbmdlKGgsXyxULFcsaWUpKX0pLGJhKDIsInNhc1RvSnNEYXRlIiksYmEoMywic2FzVG9Kc0RhdGUiKSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCksZD1hLnF1ZXJ5SW5kZXgsaD1hLmNsYXVzZUluZGV4LGY9YS5xdWVyeVZhbHVl'@;
put 'SW5kZXgsXz1hLnF1ZXJ5O0NlKDEpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitkKyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/WmwoMiwzLF8udmFsdWVbZl0pOlpsKDMsNSxfLnZhbHVlKSl9fWZ1bmN0aW9uIGRqZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO1ZyKDApLG1lKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjMpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLF89Zi5jbGF1c2VJbmRleCxUPWYucXVlcnlJbmRleDtyZXR1cm4ganQoVmUoKS5nZXRRdWVyeURhdGVUaW1lKF8sVCkuZGF0ZT1o'@;
put 'KX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLGY9aC5xdWVyeSxfPWgucXVlcnlJbmRleCxUPWguY2xhdXNlSW5kZXgsVz1oLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4ganQoVmUoKS5kYXRlVGltZUNoYW5nZShmLF8sVCxXKSl9KSxiYSgyLCJzYXNUb0pz'@;
put 'RGF0ZSIpLGJhKDMsInNhc1RvSnNEYXRlIikseWUoKSxtZSg0LCJhcHAtc29mdC1zZWxlY3QiLDY0KSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKSxfPWYuY2xhdXNlSW5kZXgsVD1mLnF1ZXJ5SW5kZXg7cmV0dXJuIGp0KFZlKCkuZ2V0UXVlcnlEYXRl'@;
put 'VGltZShfLFQpLnRpbWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKSxmPWgucXVlcnksXz1oLnF1ZXJ5SW5kZXgsVD1oLmNsYXVzZUluZGV4LFc9aC5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIGp0KFZlKCkuZGF0ZVRpbWVDaGFuZ2UoZixfLFQsVykp'@;
put 'fSksYmEoNSwic2FzVG9Kc0RhdGUiKSxiYSg2LCJzYXNUb0pzRGF0ZSIpLHllKCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKSxkPWEucXVlcnlJbmRleCxoPWEuY2xhdXNlSW5kZXgsZj1hLnF1ZXJ5VmFsdWVJbmRleCxfPWEucXVlcnk7Q2UoMSksUmUoImRpc2FibGVTb2Z0c2VsZWN0Iiwh'@;
put 'MCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2QrIl8iK2gpKCJ2YWx1ZSIsdm9pZCAwIT09Zj9NNSgyLDYsXy52YWx1ZVtmXSwic2Vjb25kcyIpOk01KDMsOSxfLnZhbHVlLCJzZWNvbmRzIikpLENlKDMpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc190aW1lIitk'@;
put 'KyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/RFIoNSwxMixfLnZhbHVlW2ZdLCJzZWNvbmRzIiwhMCk6RFIoNiwxNixfLnZhbHVlLCJzZWNvbmRzIiwhMCkpfX1mdW5jdGlvbiBoamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJhcHAtc29mdC1zZWxlY3QiLDY1KSx4'@;
put 'dCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleCxpZT1mLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4ganQoVmUoKS50aW1lQ2hhbmdlKGgsXyxULFcsaWUpKX0pLGJhKDIsInNlY29uZHNQ'@;
put 'YXJzZXIiKSxiYSgzLCJzZWNvbmRzUGFyc2VyIikseWUoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9YS5xdWVyeUluZGV4LGg9YS5jbGF1c2VJbmRleCxmPWEucXVlcnlWYWx1ZUluZGV4LF89YS5xdWVyeTtDZSgxKSxSZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIs'@;
put 'InZhbHNfIitkKyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/WmwoMiwzLF8udmFsdWVbZl0pOlpsKDMsNSxfLnZhbHVlKSl9fWZ1bmN0aW9uIGZqZShjLGwpezEmYyYmKFZyKDAsNjApLEplKDEsdWplLDQsNywibmctY29udGFpbmVyIiw2MSksSmUoMixkamUsNywyMCwibmctY29udGFpbmVy'@;
put 'Iiw2MSksSmUoMyxoamUsNCw3LCJuZy1jb250YWluZXIiLDYxKSx6cigpKSwyJmMmJihSZSgibmdTd2l0Y2giLGwucXVlcnkuZGR0eXBlKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiREFURSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJEQVRFVElNRSIpLENlKDEpLFJlKCJuZ1N3aXRj'@;
put 'aENhc2UiLCJUSU1FIikpfWZ1bmN0aW9uIHBqZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNjgpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEudW5mb3JtYXR0ZWQpLENlKDEpLGdyKCIgIixhLmZvcm1hdHRlZC50cmltKCksIiAiKX19ZnVu'@;
put 'Y3Rpb24gZ2plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSxwamUsMiwyLCJvcHRpb24iLDY3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5xdWVyeTtDZSgxKSxSZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBtamUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDY4'@;
put 'KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7UmUoInZhbHVlIixhLk5BTUUpLENlKDEpLGdyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gdmplKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxtamUsMiwyLCJvcHRpb24iLDY5KSx6cigpKSwyJmMpe2NvbnN0IGE9'@;
put 'bC4kaW1wbGljaXQsZD1WZSgyKS5xdWVyeTtDZSgxKSxSZSgibmdJZiIsYS5UWVBFPT09ZC50eXBlKX19ZnVuY3Rpb24gX2plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSx2amUsMiwxLCJuZy1jb250YWluZXIiLDM4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUo'@;
put 'Im5nRm9yT2YiLGEuY29scyl9fWZ1bmN0aW9uIGJqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjYpLHh0KCJzZWxlY3RlZExhYmVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLnF1ZXJ5O3JldHVybiBqdChWZSgpLnNlbGVjdGVk'@;
put 'TGFiZWxDaGFuZ2UoaCxfKSl9KSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS5xdWVyeS52YWx1ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5SW5kZXgsVD1mLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgp'@;
put 'LnNldFZhcmlhYmxlVmFsdWVzKGgudGFyZ2V0LnZhbHVlLF8sVCkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleDtyZXR1cm4ganQoVmUoKS5vbkF1dG9jb21wbGV0'@;
put 'ZUxvYWRpbmdNb3JlKGgsXy52YXJpYWJsZSxULFcpKX0pLEplKDEsZ2plLDIsMSwiZGl2IiwxNiksSmUoMixfamUsMiwxLCJkaXYiLDE2KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleDtSZSgic2Vjb25kTGFiZWwiLCJWYXJpYWJs'@;
put 'ZSIpKCJlbWl0T25seVNlbGVjdGVkIixhLnZhbHVlVmFyaWFibGUpKCJpbnB1dElkIiwidmFsc18iK2QrIl8iK2gpKCJ2YWx1ZSIsYS52YWx1ZSkoImVuYWJsZUxvYWRNb3JlIixhLm5vYnM+YS52YWx1ZXMubGVuZ3RoKSxDZSgxKSxSZSgibmdJZiIsIWEudmFsdWVWYXJpYWJsZSksQ2UoMSks'@;
put 'UmUoIm5nSWYiLGEudmFsdWVWYXJpYWJsZSl9fWZ1bmN0aW9uIHlqZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNjgpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEuZm9ybWF0dGVkKSxDZSgxKSxncigiICIsYS5mb3JtYXR0ZWQsIiAiKX19'@;
put 'ZnVuY3Rpb24gd2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw3MCkseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPUJ0KGEpO3JldHVybiBqdChmLnF1ZXJ5LnZhbHVlW2YucXVlcnlWYWx1ZUluZGV4XT1oKX0pKCJvbklucHV0'@;
put 'RXZlbnQiLGZ1bmN0aW9uKCl7Y29uc3QgaD1CdChhKSxmPWgucXVlcnksXz1oLnF1ZXJ5SW5kZXgsVD1oLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgpLnNldFZhcmlhYmxlVmFsdWVzKGYudmFsdWUsXyxUKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29u'@;
put 'c3QgZj1CdChhKSxfPWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsVz1mLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCxfLnZhcmlhYmxlLFQsVykpfSksSmUoMSx5amUsMiwyLCJvcHRpb24iLDY3KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLnJh'@;
put 'bmdlLGQ9bC5xdWVyeSxoPWwucXVlcnlWYWx1ZUluZGV4O1JlKCJpbnB1dElkIiwidmFscy0iK2ErIl8iK2wucXVlcnlJbmRleCsiXyIrbC5jbGF1c2VJbmRleCkoInZhbHVlIixkLnZhbHVlW2hdKSgiZW5hYmxlTG9hZE1vcmUiLGQubm9icz5kLnZhbHVlcy5sZW5ndGgpKCJkaXNhYmxlZCIs'@;
put 'dm9pZCAwIT09aCYmInN0YXJ0IiE9PWEmJiFkLnZhbHVlWzBdKSxDZSgxKSxSZSgibmdGb3JPZiIsZC52YWx1ZXMpfX1mdW5jdGlvbiBDamUoYyxsKXsxJmMmJihtZSgwLCJoNSIsNzgpLE5lKDEsIiBObyB2YWx1ZXMgYXZhaWxhYmxlLiAiKSx5ZSgpKX1mdW5jdGlvbiBTamUoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEsImlucHV0Iiw4MCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLnF1ZXJ5LnZhbHVlW19dLmNoZWNrZWQ9aCl9KSgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKSxfPWYucXVlcnlJbmRleCxUPWYuY2xhdXNlSW5kZXg7cmV0dXJuIGp0KFZlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCxfLFQpKX0pLHllKCksbWUoMiwibGFiZWwiKSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGlt'@;
put 'cGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpLnF1ZXJ5O0NlKDEpLFJlKCJuZ01vZGVsIixoLnZhbHVlW2RdLmNoZWNrZWQpLENlKDIpLGdyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBNamUoYyxsKXtpZigxJmMmJihtZSgwLCJzZWN0aW9uIiw3OSkoMSwiY2xyLWNoZWNrYm94LWNv'@;
put 'bnRhaW5lciIpLEplKDIsU2plLDQsMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDM4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpLnF1ZXJ5O0NlKDIpLFJlKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIHhqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1tb2Rh'@;
put 'bCIsNzEpKDEsImgzIiw3MiksTmUoMiwiU2VsZWN0IHZhbHVlcyIpLHllKCksbWUoMywiZGl2Iiw3MyksSmUoNCxDamUsMiwwLCJoNSIsNzQpLEplKDUsTWplLDMsMSwic2VjdGlvbiIsNzUpLHllKCksbWUoNiwiZGl2Iiw3NikoNywiYnV0dG9uIiw3NykseHQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4gaC5jdXJyZW50UXVlcnlJbmRleD0tMSxqdChoLmN1cnJlbnRDbGF1c2VJbmRleD0tMSl9KSxOZSg4LCIgQXBwbHkgIikseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4LGY9VmUo'@;
put 'KTtSZSgiY2xyTW9kYWxPcGVuIixmLmN1cnJlbnRRdWVyeUluZGV4PT09ZCYmZi5jdXJyZW50Q2xhdXNlSW5kZXg9PT1oKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDQpLFJlKCJuZ0lmIiwhZi5pc0FycihhLnZhbHVlKSksQ2UoMSksUmUoIm5nSWYiLGYuaXNBcnIoYS52YWx1ZSkpfX0h'@;
put 'ZnVuY3Rpb24gZjBlKGMsbCxhKXsoZnVuY3Rpb24gVU0oYyxsLGEpeyJzdHJpbmciIT10eXBlb2YgbCYmKGE9bCxsPWNbcW8uTG9jYWxlSWRdKSxsPWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSwkZFtsXT1jLGEmJigkZFtsXVtxby5FeHRyYURhdGFdPWEpfSkoYyxsLGEpfShF'@;
put 'QmUpO2xldCBjVT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmNkZj1mLHRoaXMuY2FjaGluZz0hMCx0aGlzLnJvd3NfaW5jcmVtZW50PTEwMCx0aGlz'@;
put 'LmluaXRpYWxfcm93cz0xZTMsdGhpcy5jbGF1c2VBbXQ9WyIiXSx0aGlzLm51bU9wZXJhdG9ycz1bIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJCRVRXRUVOIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMuY2hhck9wZXJhdG9ycz1bIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJDT05UQUlOUyIsIklO'@;
put 'IiwiTk9UIElOIiwiTkUiXSx0aGlzLm5vdEluPSExLHRoaXMubm90QXJyPSEwLHRoaXMud2FzQmV0d2Vlbj0hMSx0aGlzLndoZXJlQ2xhdXNlTG9hZGluZz0hMSx0aGlzLmR5bmFtaWNXaGVyZUNsYXVzZT0hMCx0aGlzLnVzZVBpY2tlcnM9ITEsdGhpcy5xdWVyeU9iaj17ZWxlbWVudHM6W3ts'@;
put 'b2dpYzpudWxsLHR5cGU6bnVsbCxkZHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZVZhcmlhYmxlOiExLHN0YXJ0cm93OjAscm93czowLG5vYnM6MCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV0sY2xhdXNlTG9naWM6IiIsaW52YWxpZENsYXVz'@;
put 'ZTohMX0sdGhpcy5zZWxWYXI9e2luZGV4Om51bGwsZm9ybWF0Om51bGwsdHlwZTpudWxsfSx0aGlzLmluT2JqPVt7Y2hlY2tlZDohMSx2YWx1ZTpudWxsfV0sdGhpcy5ncm91cExvZ2ljPSJBTkQiLHRoaXMuY2xhdXNlcz17cXVlcnlPYmo6W3RoaXMucXVlcnlPYmpdLGNsYXVzZUxvZ2ljOltd'@;
put 'LGdyb3VwTG9naWM6dGhpcy5ncm91cExvZ2ljfSx0aGlzLmxvZ2ljT3BlcmF0b3JzPVsiQU5EIiwiT1IiXSx0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy5jdXJyZW50Q2xhdXNlSW5kZXg9LTEsdGhpcy5jdXJyZW50UXVlcnlJbmRleD0tMSx0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD1udWxs'@;
put 'LHRoaXMuaW5uZXJXaWR0aD13aW5kb3cuc2NyZWVuLndpZHRoLHRoaXMuaW5uZXJXaWR0aD43NjgmJih0aGlzLm5vQm9yZGVyPSJib3JkZXItbGVmdDogMnB4IHNvbGlkIGdyYXk7Iil9Z2V0UXVlcnlEYXRlVGltZShhLGQpe2xldCBoPXRoaXMucXVlcnlEYXRlVGltZS5maW5kKGY9PmYuY2xh'@;
put 'dXNlSW5kZXg9PT1hJiZmLnF1ZXJ5SW5kZXg9PT1kKTtpZighaCl7Y29uc3QgZj10aGlzLnF1ZXJ5RGF0ZVRpbWUucHVzaCh7Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmQsZGF0ZToiIix0aW1lOiIifSktMTtoPXRoaXMucXVlcnlEYXRlVGltZVtmXX1yZXR1cm4gaH11c2VQaWNrZXJzQ2hh'@;
put 'bmdlKCl7dGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMudXNlUGlja2VycyYmdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goYT0+e2EuZWxlbWVudHMuZm9yRWFjaChkPT57WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoZC5kZHR5cGUpJiZkLnZhbHVlVmFyaWFibGUm'@;
put 'JihkLnZhbHVlPSIiLGQudmFsdWVWYXJpYWJsZT0hMSl9KX0pfXJlc2V0RmlsdGVyKCl7dGhpcy53aGVyZVN0cmluZz12b2lkIDAsdGhpcy53aGVyZUNsYXVzZT12b2lkIDAsdGhpcy5xdWVyeU9iaj17ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCxkZHR5cGU6bnVsbCx2YXJpYWJs'@;
put 'ZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19LHRoaXMuY2xhdXNlcz17cXVlcnlPYmo6W3RoaXMucXVlcnlPYmpdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6dGhpcy5ncm91cExvZ2ljfSx0aGlzLndoZXJlQ2xhdXNlRm4oITApfXNl'@;
put 'dFRvR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBhPSIiOyJob21lIj09PUduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Hbi5yb290'@;
put 'UGFyYW0mJihhPSJ2aWV3ZXIiKSxpbChHbixhKS5maWx0ZXIuZ3JvdXBMb2dpYz10aGlzLmdyb3VwTG9naWMsInN0cmluZyI9PXR5cGVvZiB0aGlzLndoZXJlQ2xhdXNlJiYoaWwoR24sYSkuZmlsdGVyLndoZXJlQ2xhdXNlPXRoaXMud2hlcmVDbGF1c2UpLCJzdHJpbmciPT10eXBlb2YgdGhp'@;
put 'cy5saWJkcyYmKGlsKEduLGEpLmZpbHRlci5saWJkcz10aGlzLmxpYmRzKSxpbChHbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmNsYXVzZXN9Z2V0RnJvbUdsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09'@;
put 'R24ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElkfWA6ImVkaXRvciI6InZpZXciPT09R24ucm9vdFBhcmFtJiYoYT0idmlld2VyIiksaWwoR24sYSkuZmlsdGVyLmNvbHMubGVuZ3RoPjAmJih0aGlzLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0'@;
put 'cmluZ2lmeShpbChHbixhKS5maWx0ZXIuY29scykpKSxpbChHbixhKS5maWx0ZXIudmFscy5sZW5ndGg+MCYmKHRoaXMudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlsKEduLGEpLmZpbHRlci52YWxzKSkpLCIiIT09aWwoR24sYSkuZmlsdGVyLmdyb3VwTG9naWMmJih0aGlzLmdy'@;
put 'b3VwTG9naWM9aWwoR24sYSkuZmlsdGVyLmdyb3VwTG9naWMsdGhpcy53aGVyZUNsYXVzZT1pbChHbixhKS5maWx0ZXIud2hlcmVDbGF1c2UsdGhpcy5saWJkcz1pbChHbixhKS5maWx0ZXIubGliZHMsdGhpcy5jbGF1c2VzPWlsKEduLGEpLmZpbHRlci5jbGF1c2VzLHRoaXMud2hlcmVDbGF1'@;
put 'c2VGbigpKX1zZXRHcm91cExvZ2ljKGEpe3RoaXMuZ3JvdXBMb2dpYz1hLHRoaXMuY2xhdXNlcy5ncm91cExvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1kYXRlQ2hhbmdlKGEsZCxoLGYsXyl7bGV0IFQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRK'@;
put 'c0RhdGVUb1Nhc0RhdGUoYSk7IkJFVFdFRU4iPT09ZC5vcGVyYXRvciYmdm9pZCAwIT09XyYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZVtfXT1UKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKFQsaCxmKX1kYXRlVGltZUNoYW5nZShhLGQsaCxmKXtjb25zdCBf'@;
put 'PXRoaXMuZ2V0UXVlcnlEYXRlVGltZShoLGQpO2lmKCIiPT09Xy5kYXRlKXtpZigiIj09PWEudmFsdWUpcmV0dXJuO18uZGF0ZT1hLnZhbHVlLnNwbGl0KCI6IilbMF19Y29uc3QgVD1wYXJzZUludChfLnRpbWUuc3BsaXQoIjoiKVswXSksVz1wYXJzZUludChfLnRpbWUuc3BsaXQoIjoiKVsx'@;
put 'XSksaWU9cGFyc2VJbnQoXy50aW1lLnNwbGl0KCI6IilbMl0pfHwwO2xldCBwZT1uZXcgRGF0ZShfLmRhdGUpLHdlPW5ldyBEYXRlKHBlLmdldEZ1bGxZZWFyKCkscGUuZ2V0TW9udGgoKSxwZS5nZXREYXRlKCksVCxXLGllKSxFZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRv'@;
put 'U2FzRGF0ZSh3ZSwic2Vjb25kcyIpOyJCRVRXRUVOIj09PWEub3BlcmF0b3ImJnZvaWQgMCE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVbZl09RWUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoRWUsZCxoKX10aW1lQ2hhbmdlKGEsZCxoLGYsXyl7YT1h'@;
put 'LnRhcmdldC52YWx1ZTtsZXQgRWU9NjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSo2MCs2MCpwYXJzZUludChhLnNwbGl0KCI6IilbMV0pKyhwYXJzZUludChhLnNwbGl0KCI6IilbMl0pfHwwKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAhPT1fJiYodGhpcy5jbGF1c2VzLnF1'@;
put 'ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW19dPUVlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKEVlLGgsZil9ZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihhLGQpe2xldCBoPVtdO2lmKHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Fd'@;
put 'LmVsZW1lbnRzLmxlbmd0aD4xKWZvcihsZXQgZj0wO2Y8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDtmKyspZm9yKGxldCBfPTA7Xzx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHMubGVuZ3RoO18rKyl7aWYoZj09PWEmJl89PT1kfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVz'@;
put 'KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YXJpYWJsZSl8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLm9wZXJhdG9yKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpb'@;
put 'Zl0uZWxlbWVudHNbX10udmFsdWUpKWNvbnRpbnVlO2xldCBUPSIiO2NvbnN0IFc9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLm9wZXJhdG9yLGllPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YXJpYWJsZTsiQkVUV0VFTiI9PT1XP1Q9YCR7dGhp'@;
put 'cy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhbHVlWzBdfSBBTkQgJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl1bX10udmFsdWVbMV19YDoiSU4iPT09V3x8Ik5PVCBJTiI9PT1XPyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl1bX10udmFsdWUuZm9yRWFjaChwZT0+e2lmKHBl'@;
put 'LmNoZWNrZWQpe2xldCB3ZT1wZS52YWw7InN0cmluZyIhPXR5cGVvZiB3ZXx8KDAsdDMuaXNTcGVjaWFsTWlzc2luZykod2UpP1QubGVuZ3RoPjA/VCs9YCwke3dlfWA6VD1gKCR7d2V9YDpULmxlbmd0aD4wP1QrPWAsJyR7d2V9J2A6VD1gKCcke3dlfSdgfX0pLFQubGVuZ3RoPjAmJihUKz0i'@;
put 'KSIpKToiIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZT9UPSJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS50eXBlPyInICciOiIuIjoiY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udHlw'@;
put 'ZSYmKFQ9YCcke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZX0nYCksaC5wdXNoKHtHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdS'@;
put 'T1VQX0lEOmYsVkFSSUFCTEVfTk06aWUsT1BFUkFUT1JfTk06VyxSQVdfVkFMVUU6VHx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhbHVlfSl9cmV0dXJuIGh9Z2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil7dmFyIF89dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7'@;
put 'Y29uc3QgVD1fLmxpYmRzfHwiIjt0cnl7aWYodm9pZCAwIT09Xy5jb2xzKXtmb3IobGV0IGV0PTA7ZXQ8Xy5jb2xzLmxlbmd0aDtldCsrKV8uY29sc1tldF0uTkFNRT09PWQmJihfLnNlbFZhci5pbmRleD1ldCk7Y29uc3QgVz1fLmNvbHNbXy5zZWxWYXIuaW5kZXhdLkREVFlQRSx7c3RhcnRy'@;
put 'b3c6aWUscm93czpwZX09Xy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLHdlPV8ucm93c19pbmNyZW1lbnQsRWU9aWUrcGU7bGV0IFplPVtdO18uZHluYW1pY1doZXJlQ2xhdXNlJiYoWmU9Xy5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGYsaCkpO2NvbnN0IGl0PVsiREFURVRJ'@;
put 'TUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKFcpO18uc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGQsVCxaZSxFZSx3ZSkudGhlbihldD0+e2NvbnN0IHl0PWV0LnZhbHMse1NUQVJUUk9XOkV0LFJPV1M6U3QsTk9CUzpKdH09ZXQubWV0YVswXTtpZihfLmNsYXVzZXMucXVlcnlP'@;
put 'YmpbZl0uZWxlbWVudHNbaF0uc3RhcnRyb3c9RXQsXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnJvd3M9U3QsXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLm5vYnM9SnQsMT09PXl0Lmxlbmd0aCYmIiI9PT15dFswXS5GT1JNQVRURUQmJiIiPT09eXRbMF0uVU5G'@;
put 'T1JNQVRURUQ/YS5sb2FkTW9yZUZpbmlzaGVkKCExKTooXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5wdXNoKC4uLnl0Lm1hcChObj0+e2NvbnN0IGNyPSJudW0iPT09ZXQuJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBFaT1jciYmKDAsdDMuaXNTcGVj'@;
put 'aWFsTWlzc2luZykoTm4uVU5GT1JNQVRURUQpPyIuIitObi5VTkZPUk1BVFRFRDpObi5VTkZPUk1BVFRFRDtyZXR1cm4gY3ImJm51bGw9PT1FaSYmKEVpPSIuIikse2Zvcm1hdHRlZDppdD9Obi5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTpObi5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6RWl9fSkp'@;
put 'LGEubG9hZE1vcmVGaW5pc2hlZChKdC1fLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVzLmxlbmd0aD4wKSksXy53aGVyZUNsYXVzZUZuKCksXy5zZXRUb0dsb2JhbHMoKSxfLndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09Xy5wZW5kaW5nSU5WYWx1ZXNTZXQpe2Nv'@;
put 'bnN0e2NsYXVzZUluZGV4Om5uLHF1ZXJ5SW5kZXg6dm59PV8ucGVuZGluZ0lOVmFsdWVzU2V0O18uc2V0SU5WYWx1ZXMobm4sdm4pLF8ucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9Xy5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2goZXQ9PntfLndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1j'@;
put 'YXRjaChXKXtfLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixXKX19KSgpfWdldFZhbHVlcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITA7bGV0IF89IiI7dm9pZCAwIT09Zi5s'@;
put 'aWJkcyYmKF89Zi5saWJkcyksZi5jbGVhclZhbHVlcyhkLGgpLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9W10sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPSIiLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRv'@;
put 'cj0iPSIsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhcmlhYmxlPWE7dHJ5e2lmKHZvaWQgMCE9PWYuY29scyl7Zm9yKGxldCBwZT0wO3BlPGYuY29scy5sZW5ndGg7cGUrKylmLmNvbHNbcGVdLk5BTUU9PT1hJiYoZi5zZWxWYXIuaW5kZXg9cGUpO2NvbnN0IFQ9Zi5jb2xz'@;
put 'W2Yuc2VsVmFyLmluZGV4XS5ERFRZUEU7Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLmRkdHlwZT1ULGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlPWYuY29sc1tmLnNlbFZhci5pbmRleF0uVFlQRSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNb'@;
put 'ZF0ub3BlcmF0b3JzPSJudW0iPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU/Zi5udW1PcGVyYXRvcnM6Zi5jaGFyT3BlcmF0b3JzO2xldCBXPVtdO2YuZHluYW1pY1doZXJlQ2xhdXNlJiYoVz1mLmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoaCxkKSk7Y29uc3Qg'@;
put 'aWU9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoVCk7Zi5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoYSxfLFcsMSxmLmluaXRpYWxfcm93cykudGhlbihwZT0+e2NvbnN0IHdlPXBlLnZhbHMse1NUQVJUUk9XOkVlLFJPV1M6WmUsTk9CUzppdH09cGUubWV0YVsw'@;
put 'XTtpZihmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uc3RhcnRyb3c9RWUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnJvd3M9WmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm5vYnM9aXQsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRz'@;
put 'W2RdLnZhbHVlcz13ZS5tYXAoZXQ9Pntjb25zdCB5dD0ibnVtIj09PXBlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgU3Q9eXQmJigwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKGV0LlVORk9STUFUVEVEKT8iLiIrZXQuVU5GT1JNQVRURUQ6ZXQuVU5GT1JNQVRURUQ7cmV0dXJuIHl0'@;
put 'JiZudWxsPT09U3QmJihTdD0iLiIpLHtmb3JtYXR0ZWQ6aWU/ZXQuRk9STUFUVEVELnNwbGl0KCIuIilbMF06ZXQuRk9STUFUVEVELHVuZm9ybWF0dGVkOlN0fX0pLnNsaWNlKDAsMmUzKSxmLndoZXJlQ2xhdXNlRm4oKSxmLnNldFRvR2xvYmFscygpLGYud2hlcmVDbGF1c2VMb2FkaW5nPSEx'@;
put 'LG51bGwhPT1mLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6ZXQscXVlcnlJbmRleDp5dH09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQ7Zi5zZXRJTlZhbHVlcyhldCx5dCksZi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1mLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChw'@;
put 'ZT0+e2Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKFQpe2YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLFQpfX0pKCl9Z2V0bG9naWMoYSl7dGhpcy5sb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpfXNldExvZ2ljKCl7dGhpcy53'@;
put 'aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1pc0FycihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5JiZhLmxlbmd0aD4wJiZ0eXBlb2YgYVswXS5jaGVja2VkPCJ1In1zZWxlY3RlZExhYmVsQ2hhbmdlKGEsZCl7ZC52YWx1ZVZhcmlhYmxlPSJWYXJpYWJsZSI9PT1hLGQu'@;
put 'dmFsdWU9IiIsdGhpcy53aGVyZUNsYXVzZUZuKCl9dmFyaWFibGVJbnB1dENoYW5nZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlcyhhLGQsaCl9c2V0VmFyaWFibGVWYWx1ZXMoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcjsiQkVUV0VF'@;
put 'TiIhPT1mJiYiSU4iIT09ZiYmIk5PVCBJTiIhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPWEudG9TdHJpbmcoKSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRWYXJpYWJsZU9wZXJhdG9yKGEsZCxoKXtsZXQgZj10'@;
put 'aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU7ZiBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09ZCYmIk5PVCBJTiIhPT1kJiYoZj1mIGluc3RhbmNlb2YgQXJyYXkmJjI9PT1mLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBmWzBdP2ZbMF06IiIpLHRoaXMuY2xlYXJW'@;
put 'YWx1ZXNPcGVyYXRvcihhLGgpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS5vcGVyYXRvcj1kLCgiPSI9PT1kfHwiPiI9PT1kfHwiPCI9PT1kfHwiPD0iPT09ZHx8Ij49Ij09PWR8fCJORSI9PT1kKSYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52'@;
put 'YWx1ZT1mKSwiQkVUV0VFTiI9PT1kJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPVtdLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKGYpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5w'@;
put 'dXNoKCIiKSksKCJJTiI9PT1kfHwiTk9UIElOIj09PWQpJiZ0aGlzLnNldElOVmFsdWVzKGgsYSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJTlZhbHVlcyhhLGQpe2NvbnN0IGg9W10sZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0u'@;
put 'dmFsdWVzO2YubGVuZ3RoPDEmJih0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmR9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyloLnB1c2goe2NoZWNrZWQ6ITEsdmFsOmZbX10uZm9ybWF0dGVkfSk7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Fd'@;
put 'LmVsZW1lbnRzW2RdLnZhbHVlPWh9Y2xlYXJWYWx1ZXMoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRvcihhLGQpe2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS5vcGVyYXRvcjsoIkJF'@;
put 'VFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1QgSU4iPT09aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFzSW52YWxpZENsdWFzZShhKXtmb3IobGV0IGQgb2YgYSlpZihkLmludmFsaWRDbGF1c2U9ITEsIiI9PT1kLnZhbHVlJiYiTkUiIT09ZC5vcGVyYXRvciYm'@;
put 'IkNPTlRBSU5TIiE9PWQub3BlcmF0b3J8fG51bGw9PT1kLnZhcmlhYmxlfHxudWxsPT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFsdWUpcmV0dXJuIGQuaW52YWxpZENsYXVzZT0hMCwhMDtyZXR1cm4gYS5pbnZhbGlkQ2xhdXNlPSExLCExfWhhc0ludmFsaWRHcm91cENsdWFzZSgpe2Zvcihs'@;
put 'ZXQgYT0wO2E8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDthKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMCwhMDt0aGlzLmNsYXVz'@;
put 'ZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMX1yZXR1cm4hMX1hZGRDbGF1c2UoYSl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3Ii'@;
put 'LCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlzLmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFi'@;
put 'bGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBkPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYzt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM9dHlwZW9mIGQ+InUiPyJBTkQiOiJPUiI9PT1k'@;
put 'PyJPUiI6IkFORCIsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFzSW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdo'@;
put 'ZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9y'@;
put 'czpbXX1dfSksdGhpcy5zZXRUb0dsb2JhbHMoKSl9aXNJbkh0bWxDb2xsZWN0aW9uKGEsZCl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspaWYoZFtoXS52YWx1ZT09PWEpcmV0dXJuITA7cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2UoYSl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnNwbGlj'@;
put 'ZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpfXJlbW92ZUNsYXVzZShhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50cy5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdoZXJlQ2xhdXNlRm4oYT0hMSl7Y29uc3QgZD10aGlz'@;
put 'LmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuY2xhdXNlcyk7aWYoYSYmKGQucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQgMCE9PXRoaXMubGliZHMpe2xldCBoPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3JlYXRvcihkLHRoaXMuZ3JvdXBMb2dpYyx0aGlzLmxp'@;
put 'YmRzKTthfHwodGhpcy53aGVyZUNsYXVzZT1oLndoZXJlQ2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9aC5zdHJpbmcpfX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLl9yZW1vdmVRcnk9YS5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlUXVlcnkuc3Vi'@;
put 'c2NyaWJlKGQ9PnthLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPTEsYS5jbGF1c2VzLnF1'@;
put 'ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSksYS53aGVyZUNsYXVzZUZuKCkpKX0p'@;
put 'LGEuY29sdW1uc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5jb2x1bW5zLnN1YnNjcmliZShkPT57bGV0IGg9ZC5kYXRhLmNvbHM7ImhvbWUiIT09R24ucm9vdFBhcmFtJiYiZWRpdG9yIiE9PUduLnJvb3RQYXJhbXx8KGEuY29scz1oLGEubGliZHM9ZC5saWJkcyxHbi5lZGl0b3IuZmlsdGVyLmNv'@;
put 'bHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoKSkpLCJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmR24udmlld2VyLmZpbHRlci5jb2xzLmxlbmd0aDwxJiYoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEduLnZpZXdlci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgp'@;
put 'KSksYS5saWJkc3x8KGEubGliZHM9ZC5saWJkcyl9KSxhLnZhbHVlc1N1Yj1hLnNhc1N0b3JlU2VydmljZS52YWx1ZXMuc3Vic2NyaWJlKGQ9PnsoImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbSkmJkduLmVkaXRvci5maWx0ZXIudmFscy5sZW5ndGg8MSYm'@;
put 'KGEudmFscz1kLnZhbHMsR24uZWRpdG9yLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZC52YWxzKSkpLCJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmR24udmlld2VyLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxHbi52aWV3ZXIuZmlsdGVyLnZhbHM9'@;
put 'SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSl9KX0pKCl9b25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZ2V0RnJvbUdsb2JhbHMoKSxzZXRUaW1lb3V0KCgp'@;
put 'PT57bGV0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3ZhbHNfdmFyX2lkMF8wIik7YSYmYS5mb2N1cygpfSw1MDApfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5zU3ViJiZ0aGlzLmNvbHVtbnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnZhbHVlc1N1YiYmdGhpcy52YWx1ZXNTdWIudW5z'@;
put 'dWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KHZsKSx0dChUYyksdHQoVWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXF1ZXJ5Il1dLGlucHV0czp7Y2FjaGluZzoiY2FjaGluZyIs'@;
put 'dmlld2JveElkOiJ2aWV3Ym94SWQifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOktkLHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29uc3RzOltbMSwiY2xyLWZsZXgtcm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIi'@;
put 'XSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJp'@;
put 'ZCIsInVzZVBpY2tlcnMiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIl0sWzEsImNsci1yb3ciXSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0yIiwibWItMzAiXSxbImNsclNlbGVjdCIsIiIsMywiZGlzYWJsZWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJz'@;
put 'ZWxlY3RlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJsaW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsx'@;
put 'LCJjb250ZW50Il0sWzEsImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicGlja2VyIiwiIl0sWyJub3RQaWNrZXIiLCIiXSxbIm5vdFBpY2tlclJhbmdlIiwiIl0sWyJjaGVj'@;
put 'a2JveFZhbHVlcyIsIiJdLFszLCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwiY2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEsInNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwiZGlz'@;
put 'YWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLCJjbGFzcyIsInJlbW92'@;
put 'ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwibXQtMTAiLDMsImNsaWNrIl0sWyJzaGFwZSIs'@;
put 'InBsdXMiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJsZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWzEsImRhdGFsaXN0LXdyYXBwZXIiXSxbImxhYmVsIiwiVmFyaWFi'@;
put 'bGUiLDMsImlkIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDEs'@;
put 'Im10LTIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xhdXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRuIiwiYnRuLXdhcm5pbmciLCJi'@;
put 'dG4tYmxvY2siLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEsInZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsYXNzIiwiY2hlY2tib3gtdmFscyIs'@;
put 'NCwibmdJZiJdLFsiY2xhc3MiLCJzaW5nbGUtZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5zLXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu'@;
put 'LWxpbmsiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwiY29udGFpbnMtdmFscyJdLFsidHlwZSIsInRleHQiLDEs'@;
put 'ImlucHV0LXZhbCIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIiwidmFsdWVDaGFuZ2UiXSxbImxh'@;
put 'YmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFsidHlwZSIsInRpbWUiLDMsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIiwidmFsdWVDaGFuZ2Ui'@;
put 'LCJvbklucHV0RXZlbnQiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJvbklucHV0RXZlbnQiXSxbImxhYmVsIiwiVmFsdWUiLDMsInNlY29uZExhYmVsIiwiZW1pdE9ubHlTZWxlY3RlZCIsImlucHV0SWQi'@;
put 'LCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwic2VsZWN0ZWRMYWJlbENoYW5nZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJu'@;
put 'Z0lmIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIl0sWzEsImluLXZhbHVlcy1tb2RhbCIsMywiY2xyTW9kYWxPcGVu'@;
put 'IiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsIm5vLXZhbHVlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmb3JtLWJsb2NrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwi'@;
put 'YnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDAp'@;
put 'KDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgzLCJpbnB1dCIsMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmR5bmFtaWNXaGVyZUNsYXVzZT1mfSkseWUoKSxtZSg0LCJsYWJlbCIsMyksTmUoNSwiRHluYW1pYyB3aGVyZSBjbGF1c2UiKSx5'@;
put 'ZSgpKCkoKSxtZSg2LCJkaXYiLDQpKDcsImNsci1jaGVja2JveC13cmFwcGVyIikoOCwiaW5wdXQiLDUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC51c2VQaWNrZXJzPWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnVzZVBpY2tlcnNDaGFuZ2UoKX0p'@;
put 'LHllKCksbWUoOSwibGFiZWwiLDMpLE5lKDEwLCIgVXNlIHBpY2tlcnMgIikseWUoKSgpKCkoKSxtZSgxMSwiZGl2Iiw2KSgxMiwiZGl2Iiw3KSgxMywiY2xyLXNlbGVjdC1jb250YWluZXIiKSgxNCwibGFiZWwiKSxOZSgxNSwiR3JvdXAgbG9naWMiKSx5ZSgpLG1lKDE2LCJzZWxlY3QiLDgp'@;
put 'LHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5ncm91cExvZ2ljPWZ9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZXRHcm91cExvZ2ljKGQuZ3JvdXBMb2dpYyl9KSxKZSgxNyxqQmUsMiwyLCJvcHRpb24iLDkpLHllKCkoKSgpLG1lKDE4LCJk'@;
put 'aXYiLDEwKSgxOSwicHJlIiwxMSksTmUoMjAsIiAgICAgICIpLEplKDIxLHpCZSw0LDAsImRpdiIsMTIpLE5lKDIyLCJcblxuICAgICAgIiksbWUoMjMsImNvZGUiLDEzKSxOZSgyNCkseWUoKSxOZSgyNSwiXG4gICAgIikseWUoKSgpKCksbWUoMjYsImRpdiIsMTQpKDI3LCJkaXYiLDE1KSxK'@;
put 'ZSgyOCxVQmUsMSwwLCJkaXYiLDE2KSxKZSgyOSxjamUsMTUsOCwiZGl2IiwxNykseWUoKSgpLEplKDMwLGZqZSw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDE4LGtjKSxKZSgzMixiamUsMyw3LCJuZy10ZW1wbGF0ZSIsbnVsbCwxOSxrYyksSmUoMzQsd2plLDIsNSwibmctdGVtcGxhdGUiLG51'@;
put 'bGwsMjAsa2MpLEplKDM2LHhqZSw5LDQsIm5nLXRlbXBsYXRlIixudWxsLDIxLGtjKSksMiZhJiYoQ2UoMyksUmUoIm5nTW9kZWwiLGQuZHluYW1pY1doZXJlQ2xhdXNlKSxDZSg1KSxSZSgibmdNb2RlbCIsZC51c2VQaWNrZXJzKSxDZSg4KSxSZSgiZGlzYWJsZWQiLChudWxsPT1kLmNsYXVz'@;
put 'ZXN8fG51bGw9PWQuY2xhdXNlcy5xdWVyeU9iaj9udWxsOmQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPDEpKCJuZ01vZGVsIixkLmdyb3VwTG9naWMpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxvZ2ljT3BlcmF0b3JzKSxDZSg0KSxSZSgibmdJZiIsZC53aGVyZUNsYXVzZUxvYWRpbmcpLENl'@;
put 'KDMpLG9yKGQud2hlcmVDbGF1c2UpLENlKDMpLGRyKCJjbHItY29sLW1kLTEwIiwobnVsbD09ZC5jbGF1c2VzfHxudWxsPT1kLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9PWQuY2xhdXNlc3x8bnVsbD09'@;
put 'ZC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6ZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksQ2UoMSksUmUoIm5nRm9yT2YiLGQuY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLHJkLG5kLHRoLGthLG91LHN1LFVzLEQwLEQ4LFQwLE44LEg4LGwxLGMxLFdhLFMwLE0w'@;
put 'LEJzLE9zLE1zZSxVNyxWQmUsQkJlXSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOy5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5'@;
put 'OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWxvZ2ljW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRl'@;
put 'cjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YmFja2dyb3VuZDojZTllOWU5O3BhZGRpbmc6MTVweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV17cGFkZGlu'@;
put 'ZzozMHB4IDAgMjBweCAyMHB4O2JhY2tncm91bmQ6I2ZiZjhmODtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246cmVsYXRpdmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdID4gLmNsci1yb3dbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5jbHItcm93W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe3BhZGRpbmctYm90dG9tOjE1cHg7bWFyZ2luLWJvdHRvbToxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEo'@;
put 'MCwwLDAsLjE2KX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAucmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde3Bv'@;
put 'c2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7Y29sb3I6Z3JheX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgLnZhcmlhYmxlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1'@;
put 'ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLm9wZXJhdG9yLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNvbnRlbnRbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLm9wZXJhdG9yLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2VsZWN0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0'@;
put 'OjQ1cHg7bWFyZ2luLXRvcDowO3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV17'@;
put 'ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZy1ib3R0b206MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1'@;
put 'ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZzowIDVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4zKX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1j'@;
put 'b250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGVja2JveC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1jaGVja2JveC1jb250YWluZXJbX25nY29udGVu'@;
put 'dC0lQ09NUCVde21hcmdpbi10b3A6MH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGVj'@;
put 'a2JveC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6MTIwcHg7b3ZlcmZsb3cteTpzY3JvbGx9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j'@;
put 'bGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNv'@;
put 'bnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX0uY29udGVudFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBp'@;
put 'bnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2Vz'@;
put 'LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEw'@;
put 'MCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50'@;
put 'LSVDT01QJV17bWFyZ2luLWJvdHRvbToxMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3'@;
put 'aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoxMDBweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNv'@;
put 'bnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAudG9bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNs'@;
put 'YXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9bX25nY29udGVudC0lQ09NUCVdICAgaW5w'@;
put 'dXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNv'@;
put 'bnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5w'@;
put 'dXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j'@;
put 'b250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0'@;
put 'eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'Y2xhdXNlLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXJ9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1idXR0b25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOmF1dG99LmludmFsaWQtY2xhdXNlW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtib3JkZXItbGVmdDoycHggc29saWQgI2Q5NGIzMX0uY2xhdXNlLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LmNsYXVzZS1yb3dbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3Bvc2l0aW9uOnJlbGF0aXZlO2NvbnRlbnQ6'@;
put 'IiI7aGVpZ2h0Oi40MTY2N3JlbTt3aWR0aDouNDE2NjdyZW07dG9wOi4yOTE2N3JlbTtyaWdodDouMjVyZW07YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnXFwyMDI2'@;
put 'JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luOjB9W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXTpub3QocHJlKSA+IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVdLCBwcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZiZjhmOH1wcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVu'@;
put 'dC0lQ09NUCVde3BhZGRpbmc6OHB4O21hcmdpbjowO2JvcmRlci1yYWRpdXM6MXB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OjY2cHg7cG9zaXRpb246cmVsYXRpdmV9cHJlW2NsYXNzKj1sYW5ndWFnZS1dW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIHNwYW4uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O3RvcDoxMHB4fXByZVtjbGFzcyo9bGFuZ3VhZ2UtXSBjb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJy'@;
put 'ZWFrLXdvcmR9LmlucHV0LXZhbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MnB4IWltcG9ydGFudH1p'@;
put 'bnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiM2IzYjN9aW5wdXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTpub25lfS5pbi12YWx1ZXMt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2Q4ZDhkODttYXJnaW4tdG9wOjEwcHh9LnByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnByb2dyZXNzLXN0YXRpY1tfbmdjb250ZW50LSVD'@;
put 'T01QJV17YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt3aWR0aDoxMDAlO2hlaWdodDo0cHg7dG9wOjNweH0nXX0pLGN9KSgpO2NvbnN0IEVqZT1bInNlYXJjaExpYlRyZWVJbnB1dCJdO2Z1bmN0aW9uIGtqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIEFqZShj'@;
put 'LGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLGp0KGgubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gVGplKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMykoMSwiZGl2Iiw0KSgyLCJpbnB1dCIsNSw2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBCdChhKSxqdChWZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCksSmUoNCxramUsMSwwLCJjbHItaWNvbiIsNyksSmUoNSxBamUsMSwwLCJjbHItaWNvbiIsOCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQubGlicmFyaWVz'@;
put 'U2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBEamUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw5KX1mdW5jdGlvbiBJamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJj'@;
put 'bHItaWNvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgyKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSx5'@;
put 'ZSgpfX1mdW5jdGlvbiBMamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzKSgxLCJkaXYiLDQpKDIsImlucHV0IiwxNywxOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS4kaW1wbGljaXQuc2VhcmNo'@;
put 'U3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSx5ZSgpLEplKDQsRGplLDEsMCwiY2xyLWljb24iLDcpLEplKDUsSWplLDEsMCwiY2xyLWljb24iLDgpLHll'@;
put 'KCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBSamUoYyxs'@;
put 'KXsxJmMmJnF0KDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gT2plKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIFBqZShjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxOZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxl'@;
put 'ci5pbyAiKSx5ZSgpKX1mdW5jdGlvbiBGamUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksSmUoMSxQamUsMiwwLCJzcGFuIiwyNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXI7Q2UoMSksUmUoIm5nSWYiLGEpfX1mdW5jdGlvbiBIamUoYyxsKXsx'@;
put 'JmMmJnF0KDAsImNsci1pY29uIiw5KX1mdW5jdGlvbiBOamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgzKS4kaW1wbGljaXQsXz1WZSgzKTtyZXR1cm4gaC52'@;
put 'YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpfX1mdW5jdGlvbiBWamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzKSgxLCJkaXYiLDQpKDIsImlucHV0IiwyOSwxOCks'@;
put 'eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMykuJGltcGxpY2l0O3JldHVybiBqdChWZSgzKS50cmVlT25GaWx0ZXIoaCwiY29s'@;
put 'dW1ucy5DT0xOQU1FIikpfSkseWUoKSxKZSg0LEhqZSwxLDAsImNsci1pY29uIiw3KSxKZSg1LE5qZSwxLDAsImNsci1pY29uIiw4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoMykuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiks'@;
put 'UmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gQmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25z'@;
put 'dCBmPUJ0KGEpLiRpbXBsaWNpdCxfPVZlKDMpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jb2x1bW5PbkNsaWNrKGYsVCxfKSl9KSxxdCgyLCJjbHItaWNvbiIsMzEpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSg2KTtD'@;
put 'ZSgxKSxkcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxDZSgyKSxncigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIGpqZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsVmplLDYsMywiY2xyLXRyZWUtbm9kZSIsMCksSmUoMixCamUsNCwzLCJjbHIt'@;
put 'dHJlZS1ub2RlIiwxKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIixhLmNvbHVtbnMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiB6amUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdG9vbHRpcCIp'@;
put 'KDEsImJ1dHRvbiIsMjApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLm5nVmFyLF89VmUoKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQsVz1WZSgpO3JldHVybiBqdChmPyIiOlcudGFibGVPbkNsaWNrKF8uVEFCTEVVUkksXyxUKSl9KSxWcigyLDIxKSxKZSgzLFJq'@;
put 'ZSwxLDAsImNsci1pY29uIiwyMiksSmUoNCxPamUsMSwwLCJjbHItaWNvbiIsMjMpLHpyKCksTmUoNSkseWUoKSxKZSg2LEZqZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDI0KSxKZSg3LGpqZSwzLDIsIm5nLWNvbnRhaW5lciIsMjUpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIs'@;
put 'ZD1WZSgpLiRpbXBsaWNpdCxoPVZlKDIpLiRpbXBsaWNpdCxmPVZlKCk7Q2UoMSksZHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgidGFibGUtYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLENlKDEpLFJlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLENlKDEp'@;
put 'LFJlKCJuZ1N3aXRjaENhc2UiLCEwKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMSksQ2UoMSksZ3IoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxDZSgyKSxSZSgibmdJZiIsZi5oYXNDb2x1bW5zKX19ZnVuY3Rpb24gVWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwi'@;
put 'Y2xyLXRyZWUtbm9kZSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU5vZGVDbGlja2VkKGgsXyxULnRhYmxlcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXty'@;
put 'ZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksSmUoMSx6amUsOCw5LCJjbHItdG9vbHRpcCIsMTkpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVZlKDMpO2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRl'@;
put 'ZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVtbnMpLENlKDEpLFJlKCJuZ1ZhciIsZCsxPmgubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gWmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7'@;
put 'bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmxpYnJhcnlMaXN0KSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDIsInAiLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD0kaSgxKSxmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gXy5saWI9Zi5MSUJSQVJZSUQsanQoXy5saWJyYXJ5'@;
put 'T25DbGljayhfLmxpYnx8IiIsZixoKSl9KSxxdCgzLCJjbHItaWNvbiIsMTUpLE5lKDQpLHllKCksSmUoNSxMamUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxKZSg2LFVqZSwyLDUsImNsci10cmVlLW5vZGUiLDE2KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtkcigiY2xy'@;
put 'LWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksQ2UoNCksZ3IoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXMpLENlKDEpLFJlKCJuZ0Zv'@;
put 'ck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIFlqZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsWmplLDcsNywiY2xyLXRyZWUtbm9kZSIsMTEpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9u'@;
put 'IFdqZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMzIpKDEsInNwYW4iLDMzKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWxldCBHamU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNlYXJj'@;
put 'aExpYklucHV0TGlzdD1uZXcgZWgsdGhpcy50YWJsZU9uQ2xpY2tFbWl0dGVyPW5ldyBFcix0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlcj1uZXcgRXIsdGhpcy5oYXNDb2x1bW5zPSExLHRoaXMucGFnaW5nPSEwLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFi'@;
put 'bGU9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2VhcmNoTGliSW5wdXRMaXN0LmZpcnN0Lm5hdGl2ZUVs'@;
put 'ZW1lbnQuZm9jdXMoKX0pfW5nT25DaGFuZ2VzKGEpe2EubGlicmFyeUxpc3Q/LmN1cnJlbnRWYWx1ZSYmdGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxHbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJh'@;
put 'cmllc1NlYXJjaH10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXtkLmluRm9yZWdyb3VuZD0hMDtjb25zdCBmPSgpPT5zZXRUaW1lb3V0KCgpPT5oLmNvbnRl'@;
put 'bnRDb250YWluZXIubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKSk7aWYoZC50YWJsZXMpZC5leHBhbmRlZD0hZC5leHBhbmRlZCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNM'@;
put 'b2FkZWQ6ITB9KTtlbHNle2QubG9hZGluZ1RhYmxlcz0hMCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITF9KTtjb25zdCBfPXNldEludGVydmFsKCgpPT57ZC5sb2FkaW5nVGFibGVzfHwoZigpLGNsZWFySW50ZXJ2YWwo'@;
put 'XykpfSw1MDApfWQuZXhwYW5kZWQmJmYoKSx0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKHRoaXMubGlicmFyeUxpc3QsZCl9dGFibGVPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtmLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUwLCgpPT57Zi5oYXND'@;
put 'b2x1bW5zPyhkLmNvbHVtbnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihkLmV4cGFuZGVkPSFk'@;
put 'LmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KSksZi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKSk6Zi50YWJsZU9uQ2xp'@;
put 'Y2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSX1saWJUYWJB'@;
put 'Y3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3Jl'@;
put 'dHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFn'@;
put 'aW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWhhbmRsZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkJiZkLnNjcm9sbFRvcD49ZC5zY3Jv'@;
put 'bGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRoaXMubG9hZE1vcmVMaWJyYXJpZXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVGMpLHR0KEMwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRjLXRyZWUiXV0s'@;
put 'dmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhFamUsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5zZWFyY2hMaWJJbnB1dExpc3Q9aCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJzY3JvbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZVNj'@;
put 'cm9sbChmKX0pfSxpbnB1dHM6e2hhc0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5TGlzdDoibGlicmFyeUxpc3QifSxvdXRwdXRzOnt0YWJsZU9uQ2xpY2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJyYXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJh'@;
put 'cnlPbkNsaWNrRW1pdHRlciJ9LGZlYXR1cmVzOlt2YV0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2Rl'@;
put 'Il0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIs'@;
put 'IiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xp'@;
put 'Y2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWyJsaWJUcmVlTm9kZSIsIiJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1z'@;
put 'ZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBs'@;
put 'ZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwi'@;
put 'Ym9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0s'@;
put 'WyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbMSwiY2xy'@;
put 'LXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci10cmVlIiksSmUoMSxUamUsNiwzLCJjbHIt'@;
put 'dHJlZS1ub2RlIiwwKSxKZSgyLFlqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkseWUoKSxKZSgzLFdqZSwzLDAsImRpdiIsMikpLDImYSYmKENlKDEpLFJlKCJuZ0lmIixkLmxpYnJhcnlMaXN0KSxDZSgxKSxSZSgibmdGb3JPZiIsZC5saWJyYXJ5TGlzdCksQ2UoMSksUmUoIm5nSWYiLGQubGli'@;
put 'cmFyaWVzUGFnaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmksbmQsdGgsZGQsZzEsRHAsa2EsWnUsYzIsZjEsamIsVWIsemIsV2EsQnMsT3MsVTddLHN0eWxlczpbImNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFj'@;
put 'ZTpub3dyYXB9Y2xyLXRyZWVbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1cyAuY2xyLXRyZWVub2RlLWxpbmt7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvciwgI2U4'@;
put 'ZThlOCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Il19KSxjfSkoKTtjb25zdCAkamU9WyJyZXNpemVCb3giXSxxamU9WyJkcmFnSGFuZGxlQ29ybmVyIl07ZnVuY3Rpb24gS2plKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMzIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEp'@;
put 'LHpjKCJUbyB1bmxvY2sgbW9yZSB0aGVuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ/InZpZXdib3giOiJ2aWV3Ym94ZXMiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIp'@;
put 'fX1mdW5jdGlvbiBYamUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDMzKSxxdCgxLCJjbHItc3Bpbm5lciIsMzQpLHllKCkpfWZ1bmN0aW9uIEpqZShjLGwpezEmYyYmKG1lKDAsInAiLDM1KSxOZSgxLCIgVmlld2JveCBvcGVuIGxpbWl0IHJlYWNoZWQgIikseWUoKSl9ZnVuY3Rpb24gUWplKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGMtdHJlZSIsMzYpLHh0KCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcnlPbkNsaWNrKGgpKX0pKCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixmdW5jdGlvbihoKXtyZXR1cm4g'@;
put 'QnQoYSksanQoVmUoKS50YWJsZU9uQ2xpY2soaCkpfSkseWUoKX0yJmMmJlJlKCJsaWJyYXJ5TGlzdCIsVmUoKS5saWJyYXJpZXMpfWZ1bmN0aW9uIGV6ZShjLGwpezEmYyYmKG1lKDAsInAiLDM3KSxOZSgxLCIgUGljayB0YWJsZSBmcm9tIHRoZSBsaXN0IG9uIHRoZSBsZWZ0ICIpLHllKCkp'@;
put 'fWZ1bmN0aW9uIHR6ZShjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDQ1KX1mdW5jdGlvbiBuemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxMikseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4g'@;
put 'Xy5taW5pbWl6ZShmKSxqdChfLnN0b3BQcm9wYWdhdGlvbihoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTUpLG1lKDIsInNwYW4iLDE0KSxOZSgzLCJNaW5pbWl6ZSB2aWV3Ym94IikseWUoKSgpfX1mdW5jdGlvbiByemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxMikseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gXy5yZXN0b3JlKGYpLGp0KF8uc3RvcFByb3BhZ2F0aW9uKGgpKX0pLHF0KDEsImNsci1pY29uIiwxNiksbWUoMiwic3BhbiIsMTQpLE5lKDMsIlJlc3RvcmUgdmlld2JveCIpLHll'@;
put 'KCkoKX19ZnVuY3Rpb24gaXplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzOCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnNlbGVjdFZpZXdib3goZikpfSksbWUoMSwiZGl2IiwzOSksTmUoMiksSmUo'@;
put 'Myx0emUsMSwwLCJjbHItc3Bpbm5lciIsNDApLHllKCksbWUoNCwiZGl2IikoNSwiYSIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgpO3JldHVybiBULnJlc2V0UG9zU2l6ZShfKSxqdChULnN0b3BQcm9wYWdhdGlvbihoKSl9KSxxdCg2'@;
put 'LCJjbHItaWNvbiIsNDIpLG1lKDcsInNwYW4iLDE0KSxOZSg4LCJSZXNldCBwb3NpdGlvbiBhbmQgc2l6ZSIpLHllKCkoKSxKZSg5LG56ZSw0LDAsImEiLDQzKSxKZSgxMCxyemUsNCwwLCJhIiw0MyksbWUoMTEsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSku'@;
put 'JGltcGxpY2l0LFQ9VmUoKTtyZXR1cm4gVC5jbG9zZShfKSxqdChULnN0b3BQcm9wYWdhdGlvbihoKSl9KSxxdCgxMiwiY2xyLWljb24iLDQ0KSxtZSgxMywic3BhbiIsMTQpLE5lKDE0LCJDbG9zZSB2aWV3Ym94IikseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1W'@;
put 'ZSgpO2RyKCJzZWxlY3RlZCIsKG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94P251bGw6ZC5zZWxlY3RlZFZpZXdib3guaWQpPT09YS5pZCksQ2UoMiksYjAoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksQ2UoMiks'@;
put 'ZHIoImRpc2FibGVkIiwwPT09YS54JiYwPT09YS55KSxDZSg0KSxSZSgibmdJZiIsIWEubWluaW1pemVkKSxDZSgxKSxSZSgibmdJZiIsYS5taW5pbWl6ZWQpfX1mdW5jdGlvbiBvemUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w'@;
put 'bGljaXQ7Q2UoMSksZ3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gc3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiZGl2Iiw0OCkoMiwiYXBwLWF1dG9jb21wbGV0ZSIsNDksNTApLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj0kaSgzKSxf'@;
put 'PVZlKCkubmdWYXI7cmV0dXJuIGp0KFZlKCkub25Db2xzZWFyY2hDaGFuZ2UoZixoLF8uY29sSGVhZGVyc0hpZGRlbikpfSksSmUoNCxvemUsMiwxLCJvcHRpb24iLDUxKSx5ZSgpKCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtDZSgyKSxSZSgiaW5wdXRJZCIsInZpZXdib3gt'@;
put 'Y29sdW1uLXNlYXJjaCIpKCJlbWl0T25seVNlbGVjdGVkIiwhMCksQ2UoMiksUmUoIm5nRm9yT2YiLGEuY29sSGVhZGVyc0hpZGRlbil9fWZ1bmN0aW9uIGF6ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDU3KX1mdW5jdGlvbiBsemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgw'@;
put 'LCJjbHItaWNvbiIsNTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgzKS5vbkNvbFJlbW92ZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBjemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDU0KSgxLCJzcGFuIiksTmUoMiks'@;
put 'SmUoMyxhemUsMSwwLCJjbHItaWNvbiIsNTUpLHllKCksSmUoNCxsemUsMSwwLCJjbHItaWNvbiIsNTYpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpLm5nVmFyLGg9VmUoKTtGTSgiY29sLWJveCBjb2x1bW4tIixhLCIiKSxkcigiY3Vyc29yLWRlZmF1bHQtaSIsZC5o'@;
put 'ZWFkZXJQa3MuaW5jbHVkZXMoYSkpKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxSZSgiY2RrRHJhZ0RhdGEiLGEpKCJjZGtEcmFnRGlzYWJsZWQiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxDZSgyKSx6YygiICIsYSwiICIsIm51bSI9PT0obnVs'@;
put 'bD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuJGRhdGFmb3JtYXRzLnZhcnNbYV0udHlwZSk/IihudW1lcmljKSI6IiIsIiAiKSxDZSgxKSxSZSgibmdJZiIs'@;
put 'ZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLENlKDEpLFJlKCJuZ0lmIiwhZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpfX1mdW5jdGlvbiB1emUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJwIiw1KSxOZSgyLCJDb2x1bW5zIFRvIERpc3BsYXkgKGRyYWcgYW5kIHJlLW9y'@;
put 'ZGVyKSIpLHllKCksbWUoMywiZGl2Iiw1MikseHQoImNka0Ryb3BMaXN0RHJvcHBlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNvbHVtbnNEcm9wKGgpKX0pLEplKDQsY3plLDUsMTMsImRpdiIsNTMpLHllKCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtD'@;
put 'ZSgzKSxSZSgiY2RrRHJvcExpc3REYXRhIixhLmNvbEhlYWRlcnNWaXNpYmxlKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIGR6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDYpLEplKDEsc3plLDUsMywibmctY29udGFpbmVyIiw0NyksSmUo'@;
put 'Mix1emUsNSwyLCJuZy1jb250YWluZXIiLDQ3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIsYS5jb2xIZWFkZXJzSGlkZGVuKSxDZSgxKSxSZSgibmdJZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIGh6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1W'@;
put 'bigpO21lKDAsImNsci1pY29uIiw4NSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuY29sbGFwc2UoaCkpfSkseWUoKX19ZnVuY3Rpb24gZnplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24i'@;
put 'LDg2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5leHBhbmQoaCkpfSkseWUoKX19ZnVuY3Rpb24gcHplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDg3KSx4dCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPSRpKDE2KTtyZXR1cm4ganQoVmUoKS5zZWFyY2hUYWJsZShmLGgpKX0pLHllKCl9fWZ1bmN0aW9uIGd6ZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDg4KSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBtemUo'@;
put 'YyxsKXsxJmMmJihtZSgwLCJzcGFuIiw4OSksTmUoMSwiTG9hZGluZy4uLiIpLHllKCkpfWZ1bmN0aW9uIHZ6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw5MCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj0k'@;
put 'aSgxNik7cmV0dXJuIFZlKCkucmVsb2FkVGFibGVEYXRhKGgpLGp0KGYudmFsdWU9IiIpfSkseWUoKX19ZnVuY3Rpb24gX3plKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw5NCkscXQoMSwiY2xyLXNwaW5uZXIiLDM0KSx5ZSgpKX1mdW5jdGlvbiBiemUoYyxsKXtpZigxJmMmJnF0KDAsImhvdC10'@;
put 'YWJsZSIsOTUpLDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyLGQ9VmUoKS4kaW1wbGljaXQsaD1WZSgpO1JlKCJob3RJZCIsImhvdEluc3RhbmNlX3ZpZXdib3hfIitkLmlkKSgicmVhZE9ubHkiLCEwKSgibW9kaWZ5Q29sV2lkdGgiLGgubWF4V2lkdGhDaGVrZXIpKCJjb3B5UGFzdGUiLGgudmll'@;
put 'd2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbnRleHRNZW51KSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGgudmlld2JveFRh'@;
put 'Ymxlc1thXS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29sdW1ucykoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixoLnZpZXdib3hUYWJs'@;
put 'ZXNbYV0uaG90VGFibGUuZHJvcGRvd25NZW51KSgiaGVpZ2h0IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuaGVpZ2h0KSgiY2VsbHMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5tYXhSb3dzKSgi'@;
put 'bWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImxpY2Vuc2VLZXkiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24geXplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5MSksSmUoMSxfemUsMiwwLCJkaXYiLDkyKSxKZSgyLGJ6ZSwxLDE3LCJob3QtdGFi'@;
put 'bGUiLDkzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVZlKCkuJGltcGxpY2l0O0h1KCJkaXNwbGF5IixkLmNvbGxhcHNlZD8ibm9uZSI6IiIpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRpbmdEYXRhJiZhPDApLENlKDEpLFJlKCJuZ0lmIixhPi0xKX19Y29uc3Qgd3plPWZ1bmN0aW9u'@;
put 'KGMsbCl7cmV0dXJue3g6Yyx5Omx9fTtmdW5jdGlvbiBDemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDU5LDYwKSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmZvY3VzVmlld2JveChmKSl9KSgi'@;
put 'Y2RrRHJhZ0VuZGVkIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS52aWV3Ym94RHJhZ0VuZGVkKGgsXykpfSksbWUoMiwiZGl2Iiw2MSkoMywic3BhbiIsNjIpLE5lKDQpLHllKCksbWUoNSwiZGl2Iiw2MyksSmUoNixoemUsMSwwLCJjbHItaWNv'@;
put 'biIsNjQpLEplKDcsZnplLDEsMCwiY2xyLWljb24iLDY1KSxtZSg4LCJjbHItaWNvbiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5taW5pbWl6ZShmKSl9KSx5ZSgpLG1lKDksImNsci1pY29uIiw2NykseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNsb3NlKGYpKX0pLHllKCkoKSgpLG1lKDEwLCJzcGFuIiw2OCw2OSkseHQoImNka0RyYWdNb3ZlZCIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD0kaSgxMSksVz0kaSgxKTty'@;
put 'ZXR1cm4ganQoVmUoKS5kcmFnTW92ZShULFcsXyxoKSl9KSx5ZSgpLG1lKDEyLCJmb3JtIiw3MCkoMTMsImRpdiIsNzEpKDE0LCJkaXYiLDcyKSgxNSwiaW5wdXQiLDczLDc0KSx4dCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz0kaSgxNik7cmV0'@;
put 'dXJuIGp0KFZlKCkuc2VhcmNoVGFibGUoXyxmKSl9KSx5ZSgpLEplKDE3LHB6ZSwxLDAsImNsci1pY29uIiw3NSksSmUoMTgsZ3plLDIsMCwic3BhbiIsNzYpLHllKCksbWUoMTksImNsci1jaGVja2JveC1jb250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMSwiaW5wdXQi'@;
put 'LDc3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5zZWFyY2hOdW1lcmljPWgpfSkseWUoKSxtZSgyMiwibGFiZWwiKSxOZSgyMywiTnVtZXJpYyIpLHllKCkoKSgpKCksbWUoMjQsImRpdiIsMzkpLEplKDI1LG16ZSwyLDAsInNwYW4i'@;
put 'LDc4KSxKZSgyNix2emUsMSwwLCJjbHItaWNvbiIsNzkpLG1lKDI3LCJhIiw4MCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0LF89JGkoMTYpO3JldHVybiBWZSgpLm9wZW5GaWx0ZXIoZiksanQoXy52YWx1ZT0iIil9KSxxdCgyOCwiY2xyLWljb24iLDgx'@;
put 'KSxtZSgyOSwic3BhbiIsODIpLE5lKDMwKSx5ZSgpKCksbWUoMzEsImNsci1pY29uIiw4MykseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLm9wZW5UYWJsZUVkaXQoZikpfSkseWUoKSgpKCksSmUoMzIseXplLDMsNCwiZGl2Iiw4'@;
put 'NCkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO0h1KCJkaXNwbGF5IixhLm1pbmltaXplZD8ibm9uZSI6IiIpKCJ3aWR0aCIsYS53aWR0aCwicHgiKSgiaGVpZ2h0IixhLmhlaWdodCwicHgiKSgicG9pbnRlci1ldmVudHMiLGEuY29sbGFwc2VkPyJub25lIjoiIiko'@;
put 'ImJveC1zaGFkb3ciLGEuY29sbGFwc2VkPyJub25lIjoiIiksZHIoImZvY3VzZWQiLGEuZm9jdXNlZCksUmUoImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIixRMigzNCx3emUsYS54LGEueSkpKCJpZCIsInZpZXdib3hfIithLmlkKSxDZSg0KSxiMCgiICMiLGEuaWQsIiAiLGEubGlicmFyeSwi'@;
put 'LiIsYS50YWJsZSwiICIpLENlKDIpLFJlKCJuZ0lmIiwhYS5jb2xsYXBzZWQpLENlKDEpLFJlKCJuZ0lmIixhLmNvbGxhcHNlZCksQ2UoMyksUmUoImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxDZSgyKSxIdSgiZGlzcGxheSIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxDZSgzKSxSZSgi'@;
put 'dHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksQ2UoMiksUmUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLENlKDMpLFJlKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLENlKDQpLFJlKCJuZ0lmIixhLmxvYWRp'@;
put 'bmdEYXRhKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGluZ0RhdGEpLENlKDIpLGRyKCJmaWx0ZXItYWN0aXZlIiwiMCIhPT1hLmZpbHRlcl9wayksQ2UoMiksb3IoYS5maWx0ZXJUZXh0KSxDZSgxKSxkcigiZGlzYWJsZWQiLCFkLnRhYmxlRWRpdEV4aXN0cyhhKSksQ2UoMSksUmUoIm5nVmFy'@;
put 'IixkLmdldFZpZXdib3hUYWJsZUluZGV4KGEpKX19ZnVuY3Rpb24gU3plKGMsbCl7aWYoMSZjJiZxdCgwLCJhcHAtcXVlcnkiLDk2LDk3KSwyJmMpe2NvbnN0IGE9VmUoKTtSZSgidmlld2JveElkIixudWxsPT1hLmZpbHRlcmluZ1ZpZXdib3g/bnVsbDphLmZpbHRlcmluZ1ZpZXdib3guaWQp'@;
put 'fX1jb25zdCBNemU9ZnVuY3Rpb24oYyxsLGEpe3JldHVybntjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVyc1Zpc2libGU6bCxoZWFkZXJQa3M6YX19O2xldCB4c2U9KCgpPT57Y2xhc3MgY3tnZXQgdmlld2JveE1vZGFsKCl7cmV0dXJuIHRoaXMuX3ZpZXdib3hNb2RhbH1zZXQgdmlld2Jv'@;
put 'eE1vZGFsKGEpe2lmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveCYmYSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJWaWV3Ym94ZXMiKSx2b2lkIHRoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoITEpO3RoaXMuX3ZpZXdib3hNb2Rh'@;
put 'bD1hLGEmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKX1jb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLHBlLHdlKXt0aGlzLm5nWm9uZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuc2FzU3RvcmVTZXJ2aWNl'@;
put 'PV8sdGhpcy5sb2dnZXJTZXJ2aWNlPVQsdGhpcy5oZWxwZXJTZXJ2aWNlPVcsdGhpcy5yb3V0ZXI9aWUsdGhpcy5hY3RpdmF0ZWRSb3V0ZT1wZSx0aGlzLmNkZj13ZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IEVyLHRoaXMubGliaW5mbz1udWxs'@;
put 'LHRoaXMubGlicmFyaWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29u'@;
put 'ZmlnLHRoaXMuaG90VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1u'@;
put 'X2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoiMTAwJSIsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxD'@;
put 'b2x1bW5Nb3ZlOiExLGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZpZXdib3hUYWJsZXM9W10sdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmxp'@;
put 'Y2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLm1heFZpZXdib3hlcz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PT09MS8wPzY6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdHx8'@;
put 'Nix0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgQWd9bmdPbkluaXQoKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e3RoaXMubGlicmFyaWVzPWQuc2FzbGlic30pLmNhdGNoKGQ9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KS5maW5hbGx5KCgpPT57'@;
put 'dGhpcy5saWJyYXJpZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmNsYXVzZXM9ZC5vYmosdGhpcy5maWx0ZXJMaWJkcz1kLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2Fz'@;
put 'anNDb25maWcoKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZD0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9ZH0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7YSYmKCExPT09'@;
put 'dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1'@;
put 'ZXJ5UGFyYW1zOnt9fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEoYSksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJbml0KCl7fWdl'@;
put 'dCB2aWV3Ym94TGltaXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2FkZWR8fHRoaXMu'@;
put 'bG9hZFRhYmxlcyhhLmxpYnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkpfXRhYmxlT25DbGljayhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihkLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0dXJuO2NvbnN0IGg9ey4uLmQuZGVmYXVsdENvbmZpZyx0YWJsZTphLmxpYlRh'@;
put 'YmxlLGxpYnJhcnk6YS5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZpbHRlcl9wazoiMCIsaWQ6ZC52aWV3Ym94ZXMubGVuZ3RoKzEseDp3aW5kb3cuaW5uZXJXaWR0aC1kLmRlZmF1bHRDb25maWcud2lkdGgseToxNTB9O2Qudmlld2JveGVzLnB1c2goaCksc2V0VGltZW91'@;
put 'dCgoKT0+e2Quc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBmPWAke2EubGlicmFyeS5MSUJSQVJZUkVGfS4ke2EubGliVGFibGV9YDt5aWVsZCBkLmxvYWREYXRhKGYsaCksaC5sb2FkaW5nRGF0YT0hMSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxkLnNu'@;
put 'YXBUb0dyaWQoKX0pKCl9bG9hZFRhYmxlcyhhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihoPT57bGV0IGY9aC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uTUVNTkFNRX0pO3RoaXMubGliaW5mbz1oLmxpYmluZm98fFtdLHRoaXMudGFibGVz'@;
put 'PWYsZCYmKGQudGFibGVzPWYsZC5saWJpbmZvPXRoaXMubGliaW5mbyxkLmxvYWRpbmdUYWJsZXM9ITEsZi5sZW5ndGg+MCYmKGQuZXhwYW5kZWQ9ITApKX0pLmNhdGNoKGg9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoaCl9KX1yZWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4g'@;
put 'ZmkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLF8pPT57bGV0IFQ9aC52aWV3Ym94VGFibGVzLmZpbmQoVz0+Vy52aWV3Ym94SWQ9PT1kLmlkKTtoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKFc9PntUJiYoVC5o'@;
put 'b3RUYWJsZS5kYXRhPVcudmlld2RhdGEpLGYobnVsbCl9KS5jYXRjaCgoKT0+e18oKX0pfSl9KSgpfWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLF8pPT57bGV0IFQ9ITEsVz1oLnZpZXdib3hUYWJsZXMuZmluZChp'@;
put 'ZT0+aWUudmlld2JveElkPT09ZC5pZCk7VyYmKCIwIj09PWQuZmlsdGVyX3BrfHwhZC5maWx0ZXJfcGspJiZmKCksaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihpZT0+e1c/VD0hMDpXPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3Ym94'@;
put 'TGliRGF0YXNldDphLGhvdFRhYmxlOnp4KGguaG90VGFibGVEZWZhdWx0KX0sVy5ob3RUYWJsZS5kYXRhPWllLnZpZXdkYXRhLFcuaG90VGFibGUuJGRhdGFmb3JtYXRzPWllLiR2aWV3ZGF0YSxXLmhvdFRhYmxlLmNvbHM9aWUuY29scyx6eihXLmhvdFRhYmxlLmNvbHMsW10saWUuJHZpZXdk'@;
put 'YXRhKTtsZXQgcGU9W10sd2U9W107Zm9yKGxldCBFZSBpbiBpZS52aWV3ZGF0YVswXSlFZSYmd2UucHVzaChFZSk7Zm9yKGxldCBFZT0wO0VlPHdlLmxlbmd0aDtFZSsrKXBlLnB1c2goe2RhdGE6d2VbRWVdfSk7Vy5ob3RUYWJsZS5oZWFkZXJQa3M9engoaWUuc2FzcGFyYW1zWzBdLlBLX0ZJ'@;
put 'RUxEUy5zcGxpdCgiICIpKSxXLmhvdFRhYmxlLmFsbENvbEhlYWRlcnM9d2UuZmlsdGVyKEVlPT4hVy5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoRWUpKSxXLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW49engoVy5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzKSxXLmhvdFRhYmxlLmNvbEhl'@;
put 'YWRlcnNWaXNpYmxlPXdlLmZpbHRlcihFZT0+Vy5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoRWUpKSxXLmhvdFRhYmxlLmNvbEhlYWRlcnM9d2UsVy5ob3RUYWJsZS5jb2x1bW5zPXBlLGQuY29sdW1ucyYmZC5jb2x1bW5zLmxlbmd0aD4wPyhXLmhvdFRhYmxlLm1hbnVhbENvbHVtbk1v'@;
put 'dmU9ZC5jb2x1bW5zLGQuY29sdW1ucz8ubWFwKChFZSxaZSk9Pntjb25zdCBpdD13ZVtFZV0sZXQ9Vy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLmluZGV4T2YoaXQpO2V0Pi0xJiYoVy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZShldCwxKSxXLmhvdFRhYmxlLmNvbEhlYWRl'@;
put 'cnNWaXNpYmxlW1plXT1pdCl9KSk6Vy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKC4uLlcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoMCwxMCkpLFcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9Vy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5maWx0ZXIo'@;
put 'RWU9PkVlKSxUfHxoLnZpZXdib3hUYWJsZXMucHVzaChXKSxkLnF1ZXJ5PWguaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaWUucXVlcnkpLGQuZmlsdGVyVGV4dD1pZS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsc2V0VGltZW91dCgoKT0+e2gudXBkYXRlSG90Q29sdW1ucyhXLmhvdFRhYmxl'@;
put 'LmNvbEhlYWRlcnNIaWRkZW58fFtdLGQuaWQpO2NvbnN0IEVlPWguZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQuaWQpO0VlPy51cGRhdGVTZXR0aW5ncyh7bWFudWFsQ29sdW1uTW92ZTpXLmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmUsYWZ0ZXJHZXRDb2xIZWFkZXI6KFplLGl0KT0+e2NvbnN0'@;
put 'IGV0PUVlPy5jb2xUb1Byb3AoWmUpO2V0JiZXLmhvdFRhYmxlLmhlYWRlclBrcy5pbmRleE9mKGV0KT4tMSYmaXQuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIil9fSksRWU/LnJlbmRlcigpLGguc2VsZWN0ZWRWaWV3Ym94JiZoLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGQp'@;
put 'fSksZigpfSkuY2F0Y2goaWU9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoaWUpLF8oKX0pfSl9KSgpfXJlTG9hZFZpZXdib3h0YWJsZXMoYSl7YS5tYXAoZD0+e2NvbnN0IGg9YCR7ZC5saWJyYXJ5fS4ke2QudGFibGV9YDtkLmxvYWRpbmdEYXRhPSEwLHRoaXMubG9hZERhdGEoaCxkKS50aGVu'@;
put 'KCgpPT57ZC5sb2FkaW5nRGF0YT0hMX0pfSl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Vmlld2JveFRhYmxlSW5kZXgoYSl7cmV0dXJuIHRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoaD0+aC52aWV3Ym94SWQ9PT1hLmlkKX1yZXNpemUoYSxkKXtjb25z'@;
put 'dCBoPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLF89aC5sZWZ0LWYubGVmdCtoLndpZHRoLFQ9aC50b3AtZi50b3AraC5oZWlnaHQ7cmV0dXJuIGQuc3R5bGUud2lkdGg9XysicHgiLGQuc3R5bGUuaGVpZ2h0PVQrInB4Iix0aGlzLnNldEFs'@;
put 'bEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMWUzLCgpPT57dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkse3dpZHRoOl8saGVpZ2h0OlR9fWRyYWdNb3ZlKGEsZCxoLGYpe3Ro'@;
put 'aXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgXz10aGlzLnJlc2l6ZShhLGQpO2gud2lkdGg9Xy53aWR0aCxoLmhlaWdodD1fLmhlaWdodH0pfXNldEFsbEhhbmRsZVRyYW5zZm9ybSgpe3RoaXMucmVzaXplQm94UXVlcnkuZm9yRWFjaChhPT57Y29uc3QgZD1hLm5hdGl2'@;
put 'ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1gaGFuZGxlXyR7YS5uYXRpdmVFbGVtZW50LmlkfWAsZj10aGlzLmRyYWdIYW5kbGVDb3JuZXJRdWVyeS5maW5kKChfLFQpPT5fLm5hdGl2ZUVsZW1lbnQuaWQ9PT1oKTt0aGlzLnNldEhhbmRsZVRyYW5zZm9ybShmPy5uYXRpdmVF'@;
put 'bGVtZW50LGQsImJvdGgiKX0pfXNldEhhbmRsZVRyYW5zZm9ybShhLGQsaCl7Y29uc3QgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBfPWQud2lkdGgtZi53aWR0aCxUPWQuaGVpZ2h0LWYuaGVpZ2h0O18rPTUsVCs9NSwieCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5z'@;
put 'bGF0ZSgke199cHgsIDApYCksInkiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoMCwgJHtUfXB4KWApLCJib3RoIj09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7X31weCwgJHtUfXB4KWApfWZvY3VzVmlld2JveChhKXt0aGlzLnZpZXdib3hlcy5tYXAo'@;
put 'ZD0+e2QuZm9jdXNlZD0hMX0pLGEuZm9jdXNlZD0hMH12aWV3Ym94RHJhZ0VuZGVkKGEsZCl7bGV0IGY9YS5zb3VyY2UuZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLng9Zi5sZWZ0LGQueT1mLnRvcCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c25hcFRvR3JpZCgp'@;
put 'e2NvbnN0IGE9d2luZG93LmlubmVyV2lkdGgsZD13aW5kb3cuaW5uZXJIZWlnaHQsVD1NYXRoLmNlaWwodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLFc9TWF0aC5mbG9vcih0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksd2U9KGEtNSooVCsxKSkvVCxFZT0oYS01KihXKzEpKS9XO2xldCBpdD0w'@;
put 'LHl0PShkLTI1MC02MCkvMixFdD0wLFN0PTA7Zm9yKGxldCBKdD0wO0p0PHRoaXMudmlld2JveGVzLmxlbmd0aDtKdCsrKXtsZXQgbm49dGhpcy52aWV3Ym94ZXNbSnRdLHZuPSEoSnQ+VC0xKTtjb25zdCBObj12bj93ZTpFZTshdm4mJjA9PT1TdCYmKEV0PTAsU3QrKyxpdD0wKSxubi54PTUr'@;
put 'aXQrRXQqKE5uKzUpLG5uLnk9MjUwK1N0Kih5dCs1KSxubi53aWR0aD1Obixubi5oZWlnaHQ9eXQsRXQrK310aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KX1taW5pbWl6ZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVh'@;
put 'Y2goYT0+e2EubWluaW1pemVkPSEwfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXNldFBvc1NpemUoYSl7YS54PXdpbmRvdy5pbm5lcldpZHRoLXRo'@;
put 'aXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLnk9dGhpcy5kZWZhdWx0Q29uZmlnLnksYS53aWR0aD10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS5oZWlnaHQ9dGhpcy5kZWZhdWx0Q29uZmlnLmhlaWdodCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9bWluaW1pemUoYSl7YS5taW5pbWl6ZWQ9ITAs'@;
put 'dGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmUoYSl7YS5taW5pbWl6ZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNvbGxhcHNlKGEpe2EuY29sbGFwc2VkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1leHBhbmQoYSl7YS5jb2xsYXBzZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgp'@;
put 'fWNsb3NlKGEpe2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmluZEluZGV4KGY9PmYuaWQ9PT1hLmlkKSxoPXRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKTtkPi0xJiZ0aGlzLnZpZXdib3hlcy5zcGxpY2UoZCwxKSxoPi0xJiZ0aGlzLnZpZXdib3hU'@;
put 'YWJsZXMuc3BsaWNlKGgsMSksdGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkPT09YS5pZCYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpLEduLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFBPKSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c2VsZWN0Vmlld2Jv'@;
put 'eChhKXt2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlJiZ2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveD90aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpOmEuaWQ9PT10aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ/dGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpOnRoaXMu'@;
put 'cmVzZXRTZWxlY3RlZFZpZXdib3goYSl9Y29sdW1uc0Ryb3AoYSl7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbiYmKGEucHJldmlvdXNDb250YWluZXI9PT1hLmNvbnRhaW5lcj9jc2UoYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgs'@;
put 'YS5jdXJyZW50SW5kZXgpOmZ1bmN0aW9uIGdCZShjLGwsYSxkKXtjb25zdCBoPWF3KGEsYy5sZW5ndGgtMSksZj1hdyhkLGwubGVuZ3RoKTtjLmxlbmd0aCYmbC5zcGxpY2UoZiwwLGMuc3BsaWNlKGgsMSlbMF0pfShhLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsYS5jb250YWluZXIuZGF0YSxh'@;
put 'LnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUmJiJvYmplY3QiPT10eXBlb2YgdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzKSYmdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLml0ZW0u'@;
put 'ZGF0YSxhLmN1cnJlbnRJbmRleCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9b25Db2xzZWFyY2hDaGFuZ2UoYSxkLGgpe2NvbnN0IGY9aC5pbmRleE9mKGQpO2guc3BsaWNlKGYsMSksYS52YWx1ZT0iIix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSYm'@;
put 'KHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaChkKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZp'@;
put 'ZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChkLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKX1vbkNvbFJlbW92ZShhKXtpZih0aGlzLnNlbGVj'@;
put 'dGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmluZGV4T2YoYSk7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5zcGxpY2UoZCwxKSx0'@;
put 'aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4ucHVzaChhKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdi'@;
put 'b3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX19cmVzZXRTZWxlY3RlZFZpZXdib3goYSl7dGhpcy5zZWxl'@;
put 'Y3RlZFZpZXdib3g9YSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGQ9PmQudmlld2JveElkPT09YS5pZCl9dW5zZXRTZWxlY3RlZFZpZXdib3goKXt0aGlzLnNlbGVjdGVkVmlld2JveD12b2lkIDAsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT12'@;
put 'b2lkIDB9c3RvcFByb3BhZ2F0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9b3BlbkZpbHRlcihhKXt0aGlzLnNlbGVjdFZpZXdib3goYSk7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXNbdGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChhKV07dGhpcy5maWx0ZXJMaWJkcz1gJHthLmxpYnJh'@;
put 'cnl9LiR7YS50YWJsZX1gLHRoaXMuZmlsdGVyaW5nVmlld2JveD1hLHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmZpbHRlckxpYmRzLGQuaG90VGFibGUuY29scyl9b3BlblRhYmxlRWRp'@;
put 'dChhKXtjb25zdCBkPWEubGlicmFyeSsiLiIrYS50YWJsZTtsZXQgaD1sb2NhdGlvbi5ocmVmLnNsaWNlKDAsbG9jYXRpb24uaHJlZi5pbmRleE9mKCIjIikpO2g9YCR7aH0jL2VkaXRvci8ke2R9YCx3aW5kb3cub3BlbihoLCJfYmxhbmsiKX1yZXNldEZpbHRlcigpe3RoaXMuZmlsdGVyaW5n'@;
put 'Vmlld2JveCYmKHRoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9IjAiLHRoaXMucmVsb2FkVGFibGVEYXRhKHRoaXMuZmlsdGVyaW5nVmlld2JveCksdGhpcy5maWx0ZXI9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLEduLnZpZXdib3hlc1t0aGlzLmZpbHRlcmluZ1ZpZXdib3guaWRd'@;
put 'PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoUE8pKX1zZW5kQ2xhdXNlKCl7dGhpcy5maWx0ZXJMb2FkaW5nPSEwO2xldCBhPVtdLGQ9W107aWYodHlwZW9mIHRoaXMuY2xhdXNlcz4idSIpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0h'@;
put 'MSk7e2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9iajtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7Y29uc3QgXz1oW2ZdLmVsZW1lbnRzO2E9Xy5maWx0ZXIoZnVuY3Rpb24oVCl7cmV0dXJuIG51bGw9PT1ULnZhcmlhYmxlfSksYS5sZW5ndGgmJmQucHVzaChfKX19aWYoZC5sZW5ndGgp'@;
put 'cmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PXRoaXMuY2xhdXNlcyYmdGhpcy5maWx0ZXJMaWJkcyl7Y29uc3QgaD17Z3JvdXBMb2dpYzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119'@;
put 'O3RoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKF89Pntjb25zdCBUPXtmaWx0ZXJDbGF1c2VzOltdfTtfLmVsZW1lbnRzLmZvckVhY2goVz0+e1QuZmlsdGVyQ2xhdXNlcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVykpfSksVC5jbGF1c2VMb2dpYz1fLmNsYXVzZUxv'@;
put 'Z2ljLGguZmlsdGVyR3JvdXBzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShUKSl9KTtjb25zdCBmPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KHRoaXMuZmlsdGVyTGliZHMsZiku'@;
put 'dGhlbihfPT57dGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz1fLnJlc3VsdFswXS5GSUxURVJfUkssdGhpcy5sb2FkRGF0YSh0aGlzLmZpbHRlckxpYmRzLHRoaXMuZmlsdGVyaW5nVmlld2JveCkudGhlbigoKT0+e3RoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMX0p'@;
put 'LHRoaXMudmlld2JveENoYW5nZWQoKX0pLmNhdGNoKF89Pnt0aGlzLmZpbHRlckxvYWRpbmc9ITF9KX19Y2F0Y2h7dGhpcy5maWx0ZXJMb2FkaW5nPSExfX1zZWFyY2hUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgZj1h'@;
put 'LnZhbHVlLF89ZC5saWJyYXJ5KyIuIitkLnRhYmxlLFQ9cGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIik7Y29uc3QgVz1oLnZpZXdib3hUYWJsZXMuZmluZChpZT0+aWUudmlld2JveElkPT09ZC5pZCk7VyYmKHlpZWxkIGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGYsZC5zZWFy'@;
put 'Y2hOdW1lcmljLF8sVCkudGhlbihpZT0+e2llLnNhc3BhcmFtc3x8aWUudmlld0RhdGE/Vy5ob3RUYWJsZS5kYXRhPWllLnZpZXdkYXRhOmQuc2VhcmNoTG9hZGluZz0hMH0pLmNhdGNoKGllPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKGllKX0pLGQuc2VhcmNoTG9hZGluZz0hMSl9KSgpfXJl'@;
put 'bG9hZFRhYmxlRGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWA7YS5sb2FkaW5nRGF0YT0hMCx5aWVsZCBkLnJlbG9hZERhdGEoaCxhKSxhLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNo'@;
put 'RXZlbnQoInJlc2l6ZSIpfSkoKX11cGRhdGVIb3RDb2x1bW5zKGEsZCl7dGhpcy51cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZCksdGhpcy5zZXRDb2x1bW5PcmRlcihkKX11cGRhdGVDb2x1bW5PcmRlckhvdChhLGQsaCl7Y29uc3QgZj10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShoKTtp'@;
put 'ZihmKXtjb25zdCBfPWYucHJvcFRvQ29sKGEpO2YuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIikubW92ZUNvbHVtbihfLGQpLGYucmVuZGVyKCksdGhpcy5zZXRDb2x1bW5PcmRlcihoKX19dGFibGVFZGl0RXhpc3RzKGEpe2NvbnN0IGQ9R24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsaD1h'@;
put 'LmxpYnJhcnk7cmV0dXJuISFkW2hdJiZkW2hdLmluY2x1ZGVzKGEudGFibGUpfXNldENvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmluZChoPT5oLmlkPT09YSk7aWYoZCl7Y29uc3QgaD10aGlzLmNyZWF0ZUNvbHVtbk9yZGVyKGEpO2QuY29sdW1ucz1oLmxlbmd0aD4w'@;
put 'P2g6ZC5jb2x1bW5zfXRoaXMudmlld2JveENoYW5nZWQoKX1jcmVhdGVDb2x1bW5PcmRlcihhKXtjb25zdCBkPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGEpO2lmKCFkKXJldHVybltdO2NvbnN0IGg9ZC5nZXRDb2xIZWFkZXIoKSxmPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/Lmhv'@;
put 'dFRhYmxlLmNvbEhlYWRlcnM7aWYoIWYpcmV0dXJuW107Y29uc3QgXz10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZT8uY29sSGVhZGVyc1Zpc2libGUubGVuZ3RofHw1LFQ9W107cmV0dXJuIGgubWFwKChXLGllKT0+e2lmKGllPF8pe2NvbnN0IHBlPWYuaW5kZXhPZihXKTtw'@;
put 'ZT4tMSYmVC5wdXNoKHBlKX19KSxUfXVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQpO2lmKGgpe2NvbnN0IGY9YS5tYXAoXz0+aC5wcm9wVG9Db2woXykpO2gudXBkYXRlU2V0dGluZ3Moe2hpZGRlbkNvbHVtbnM6e2NvbHVt'@;
put 'bnM6Zn19KSxoLnJlbmRlcigpfX1nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSl7cmV0dXJuIGE/dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoYGhvdEluc3RhbmNlX3ZpZXdib3hfJHthfWApOnZvaWQgMH12aWV3Ym94Q2hhbmdlZCgpe2xldCBhO2NvbnN0IGQ9dGhpcy5lbmNv'@;
put 'ZGVVcmxEYXRhKHRoaXMudmlld2JveGVzKTtkLmxlbmd0aD4wJiYoYT17dmlld2JveGVzOmR9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOmF9KSx0aGlzLnByZXBhcmVGaWx0ZXJDYWNoZSgpfXByZXBhcmVGaWx0'@;
put 'ZXJDYWNoZSgpe2ZvcihsZXQgYSBvZiB0aGlzLnZpZXdib3hlcylpZihHbi52aWV3Ym94ZXNbYS5pZF18fChHbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShQTykpLGEucXVlcnkmJmEucXVlcnkubGVuZ3RoPjApe2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFi'@;
put 'bGVzLmZpbmQoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKSxoPWB2aWV3Ym94ZXMuJHthLmlkfWA7R24udmlld2JveGVzW2EuaWRdLmZpbHRlci5xdWVyeT1hLnF1ZXJ5LEduLnZpZXdib3hlc1thLmlkXS5maWx0ZXIubGliZHM9YS5saWJyYXJ5KyIuIithLnRhYmxlLHRoaXMuc2FzU3RvcmVTZXJ2'@;
put 'aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoaCxkPy5ob3RUYWJsZS5jb2xzKX19ZW5jb2RlVXJsRGF0YShhKXtsZXQgZD0iIjtyZXR1cm4gYS5tYXAoKGgsZik9PntkKz1gJHtoLmlkfS0ke2gubGlicmFyeX0tJHtoLnRhYmxlfS0ke2gud2lkdGh9LSR7aC5oZWlnaHR9LSR7aC54'@;
put 'fS0ke2gueX0tJHtoLmNvbGxhcHNlZD8xOjB9LSR7aC5taW5pbWl6ZWQ/MTowfS0ke2guZmlsdGVyX3BrfHwwfSR7aC5jb2x1bW5zJiZoLmNvbHVtbnMubGVuZ3RoPjA/Ii0iK2guY29sdW1ucz8uam9pbigiLCIpOiIifWAsZiE9PWEubGVuZ3RoLTEmJihkKz0iOyIpfSksZH1kZWNvZGVVcmxE'@;
put 'YXRhKGEpe2xldCBoPVtdO3JldHVybiBhLnNwbGl0KCI7IikubWFwKF89Pntjb25zdCBUPV8uc3BsaXQoIi0iKTtoLnB1c2goe2lkOnBhcnNlSW50KFRbMF0pLGxpYnJhcnk6VFsxXSx0YWJsZTpUWzJdLHdpZHRoOnBhcnNlSW50KFRbM10pLGhlaWdodDpwYXJzZUludChUWzRdKSx4OnBhcnNl'@;
put 'SW50KFRbNV0pLHk6cGFyc2VJbnQoVFs2XSksY29sbGFwc2VkOiEhcGFyc2VJbnQoVFs3XSksbWluaW1pemVkOiEhcGFyc2VJbnQoVFs4XSksY29sdW1uczpUWzEwXT8uc3BsaXQoIiwiKS5tYXAoVz0+cGFyc2VJbnQoVykpfHxbXSxmaWx0ZXJfcGs6VFs5XX0pfSksaH1uZ09uRGVzdHJveSgp'@;
put 'e3RoaXMuX3F1ZXJ5Py51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChObyksdHQoQzApLHR0KG9hKSx0dCh2bCksdHQoYmQpLHR0KHcwKSx0dChUYyksdHQoRHMpLHR0KEdsKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2JveGVzIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKCRqZSw1KSxSbyhxamUsNSkpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQucmVzaXplQm94UXVlcnk9aCksYWkoaD1saSgpKSYmKGQuZHJhZ0hhbmRsZUNvcm5l'@;
put 'clF1ZXJ5PWgpfX0saW5wdXRzOnt2aWV3Ym94TW9kYWw6InZpZXdib3hNb2RhbCJ9LG91dHB1dHM6e3ZpZXdib3hNb2RhbENoYW5nZToidmlld2JveE1vZGFsQ2hhbmdlIn0sZGVjbHM6NTYsdmFyczoyMyxjb25zdHM6W1siYXBwRHJhZ05kcm9wIiwiIiwxLCJyb290LW1vZGFsIiwicG9zaXRp'@;
put 'b24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbImNsYXNzIiwibGljZW5jZS1ub3RpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCJd'@;
put 'LFsxLCJhZGQtbmV3IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsIm10LTAtaSJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm0tMCB2aWV3Ym94LWxpbWl0LW5vdGljZSIsNCwibmdJZiJdLFszLCJs'@;
put 'aWJyYXJ5TGlzdCIsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiLDQsIm5nSWYiXSxbMSwiY3VycmVudGx5LW9wZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAi'@;
put 'LCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC0zIiwzLCJjbGljayJdLFsic2hhcGUiLCJncmlkLXZpZXciLCJzaXplIiwiMTkiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWyJzaGFwZSIsIm1pbnVzIiwic2l6ZSIsIjE5Il0sWyJzaGFw'@;
put 'ZSIsIndpbmRvdy1yZXN0b3JlIiwic2l6ZSIsIjE5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcGVuLXZpZXdib3ggZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJzZWxl'@;
put 'Y3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsIm10LTEwIl0sWzEsIm0tMCJdLFsiY2xhc3MiLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiLCJjZGtEcm9wTGlz'@;
put 'dEdyb3VwIiwiIiw0LCJuZ1ZhciJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ2aWV3Ym94ZXMtY29udGFpbmVyIl0sWyJjbGFzcyIsInZpZXdib3giLCJjZGtEcmFnQm91bmRhcnkiLCIu'@;
put 'dmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDMsImZvY3VzZWQiLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludGVyLWV2ZW50cyIsImJveC1zaGFkb3ciLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIiwibW91c2Vkb3duIiwiY2Rr'@;
put 'RHJhZ0VuZGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJj'@;
put 'b2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzMsInZpZXdib3hJZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1v'@;
put 'dXRsaW5lIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMSwibGljZW5jZS1ub3RpY2UiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwibS0wIiwidmlld2JveC1saW1pdC1ub3RpY2UiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5T25D'@;
put 'bGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIl0sWzEsInRleHQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwib3Blbi12aWV3Ym94IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwi'@;
put 'ZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLCJjbGFzcyIsIm1sLTMiLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsMywi'@;
put 'Y2xpY2siXSxbInNoYXBlIiwiY3Vyc29yLW1vdmUiLCJzaXplIiwiMTMiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLCJjbGFzcyIsInRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLWJvdHRvbS1sZWZ0IG1sLTMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFw'@;
put 'ZSIsInRpbWVzIiwic2l6ZSIsIjE5Il0sWyJjbHJTbWFsbCIsIiIsMSwibWwtMyJdLFsiY2RrRHJvcExpc3RHcm91cCIsIiIsMSwiY29uZmlndXJhdGlvbi13cmFwcGVyIl0sWzQsIm5nSWYiXSxbMSwiY29scy1zZWFyY2giXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwi'@;
put 'YXV0b2ZvY3VzIiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggY29sdW1ucyIsInRhYmluZGV4IiwiMCIsMywiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZUNoYW5nZSJdLFsiaW5wdXQiLCIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcm9wTGlzdCIsIiIsMSwiY29s'@;
put 'cy1saXN0IiwzLCJjZGtEcm9wTGlzdERhdGEiLCJjZGtEcm9wTGlzdERyb3BwZWQiXSxbImNka0RyYWciLCIiLDMsImNsYXNzIiwiY3Vyc29yLWRlZmF1bHQtaSIsInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbImNka0RyYWciLCIiLDMsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0cmFzaCIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImtleSJdLFsic2hhcGUi'@;
put 'LCJ0cmFzaCIsMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJjZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDEsInZpZXdib3giLDMsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24i'@;
put 'LCJjZGtEcmFnRW5kZWQiXSxbInJlc2l6ZUJveCIsIiJdLFsiY2RrRHJhZ0hhbmRsZSIsIiIsMSwiZHJhZy1oYW5kbGUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRhYmxlLXRpdGxlIl0sWzEsImFjdGlvbnMi'@;
put 'XSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJtaW51cyIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWyJjZGtEcmFnIiwiIiwxLCJkcmFnSGFu'@;
put 'ZGxlIiwiY29ybmVyIiwzLCJpZCIsImNka0RyYWdNb3ZlZCJdLFsiZHJhZ0hhbmRsZUNvcm5lciIsIiJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWZsZXgtd3JhcCIsInRhYmxlLXNlYXJj'@;
put 'aC13cmFwcGVyIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LXdyYXAiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsInR5cGUiLCJrZXl1cC5lbnRlciJd'@;
put 'LFsic2VhcmNoRWwiLCIiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01v'@;
put 'ZGVsIiwibmdNb2RlbENoYW5nZSJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbInNoYXBlIiwicmVmcmVzaCIsImNsYXNzIiwiY2xpY2staWNvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEs'@;
put 'InRvb2x0aXAiLCJ0b29sdGlwLWxnIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciIsMSwiY2xpY2staWNvbiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiLCJ0b29sdGlwLWxvbmciXSxbInNoYXBlIiwicGVuY2lsIiwxLCJjbGljay1pY29u'@;
put 'IiwibWwtNSIsMywiY2xpY2siXSxbImNsYXNzIiwiY29udGVudCIsMywiZGlzcGxheSIsNCwibmdWYXIiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5u'@;
put 'ZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJjbGljay1pY29uIiwzLCJjbGljayJdLFsxLCJjb250ZW50Il0sWyJjbGFzcyIsImhvdC1zcGlubmVyIG15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYi'@;
put 'XSxbImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFkT25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFk'@;
put 'ZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJsaWNlbnNlS2V5Iiw0LCJuZ0lmIl0sWzEsImhvdC1zcGlubmVyIiwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJpZCIs'@;
put 'ImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNv'@;
put 'bHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSJdLFszLCJ2aWV3Ym94SWQiXSxbInF1ZXJ5RmlsdGVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwi'@;
put 'Y2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5jbHJNb2RhbE9wZW5DaGFuZ2UoZil9KSxtZSgxLCJoMyIsMSksTmUoMiwiIFZpZXdib3hlcyAiKSxKZSgzLEtqZSwyLDIsInNwYW4iLDIpLHllKCksbWUoNCwiZGl2IiwzKSg1LCJkaXYi'@;
put 'LDQpKDYsInAiLDUpLE5lKDcsIkFkZCBuZXciKSx5ZSgpLHF0KDgsImhyIiw2KSxKZSg5LFhqZSwyLDAsImRpdiIsNyksSmUoMTAsSmplLDIsMCwicCIsOCksSmUoMTEsUWplLDEsMSwiZGMtdHJlZSIsOSkseWUoKSxtZSgxMiwiZGl2IiwxMCkoMTMsImRpdiIsMTEpKDE0LCJwIiw1KSxOZSgx'@;
put 'NSwiQ3VycmVudGx5IG9wZW4iKSx5ZSgpLG1lKDE2LCJkaXYiKSgxNywiYSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zbmFwVG9HcmlkKCl9KSxxdCgxOCwiY2xyLWljb24iLDEzKSxtZSgxOSwic3BhbiIsMTQpLE5lKDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIiks'@;
put 'eWUoKSgpLG1lKDIxLCJhIiwxMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm1pbmltaXplQWxsKCl9KSxxdCgyMiwiY2xyLWljb24iLDE1KSxtZSgyMywic3BhbiIsMTQpLE5lKDI0LCJNaW5pbWl6ZSBhbGwgdmlld2JveGVzIikseWUoKSgpLG1lKDI1LCJhIiwxMikseHQoImNs'@;
put 'aWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlc3RvcmVBbGwoKX0pLHF0KDI2LCJjbHItaWNvbiIsMTYpLG1lKDI3LCJzcGFuIiwxNCksTmUoMjgsIlJlc3RvcmUgYWxsIHZpZXdib3hlcyIpLHllKCkoKSgpKCkscXQoMjksImhyIiksSmUoMzAsZXplLDIsMCwicCIsMTcpLEplKDMxLGl6ZSwx'@;
put 'NSwxMCwiZGl2IiwxOCksbWUoMzIsImRpdiIsMTkpKDMzLCJwIiwyMCksTmUoMzQpLHllKCkoKSxxdCgzNSwiaHIiKSxKZSgzNixkemUsMywyLCJkaXYiLDIxKSx5ZSgpKCksbWUoMzcsImRpdiIsMjIpKDM4LCJidXR0b24iLDIzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQudmll'@;
put 'd2JveE1vZGFsPSExfSksTmUoMzksIiBPayAiKSx5ZSgpKCkoKSxtZSg0MCwiZGl2IiwyNCksSmUoNDEsQ3plLDMzLDM3LCJkaXYiLDI1KSx5ZSgpLG1lKDQyLCJjbHItbW9kYWwiLDI2KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5maWx0ZXI9Zn0pLG1l'@;
put 'KDQzLCJoMyIsMjcpLE5lKDQ0LCIgRmlsdGVyIGZvciB2aWV3Ym94IHRhYmxlOiAiKSxtZSg0NSwic3BhbiIpLE5lKDQ2KSx5ZSgpKCksbWUoNDcsImRpdiIsMjgpLEplKDQ4LFN6ZSwyLDEsImFwcC1xdWVyeSIsMjkpLHllKCksbWUoNDksImRpdiIsMjIpKDUwLCJidXR0b24iLDMwKSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzZXRGaWx0ZXIoKX0pLE5lKDUxLCIgcmVzZXQgZmlsdGVyICIpLHllKCksbWUoNTIsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maWx0ZXI9ITF9KSxOZSg1MywiIENhbmNlbCAiKSx5ZSgpLG1lKDU0LCJi'@;
put 'dXR0b24iLDMxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VuZENsYXVzZSgpfSksTmUoNTUsIiBPayAiKSx5ZSgpKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC52aWV3Ym94TW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiks'@;
put 'Q2UoMyksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1kLkluZmluaXR5KSxDZSg2KSxSZSgibmdJZiIsZC5saWJyYXJpZXNMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC52aWV3Ym94TGltaXRSZWFjaGVkKSxDZSgxKSxSZSgibmdJZiIsZC52aWV3Ym94'@;
put 'TW9kYWwpLENlKDE5KSxSZSgibmdJZiIsZC52aWV3Ym94ZXMubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0Zvck9mIixkLnZpZXdib3hlcyksQ2UoMyksZ3IoIiBDb25maWd1cmF0aW9uICgiLG51bGwhPWQuc2VsZWN0ZWRWaWV3Ym94VGFibGUmJmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2Jv'@;
put 'eExpYkRhdGFzZXQ/IiMiKyhudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKyIgIisobnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQp'@;
put 'OiJzZWxlY3Qgdmlld2JveCBmcm9tIGFib3ZlIiwiKSAiKSxDZSgyKSxSZSgibmdWYXIiLHlfKDE5LE16ZSxudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJs'@;
put 'ZS5jb2xIZWFkZXJzSGlkZGVuLG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94'@;
put 'VGFibGV8fG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmhlYWRlclBrcykpLENlKDUpLFJlKCJuZ0Zvck9mIixkLnZpZXdib3hlcyksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5maWx0ZXIpKCJjbHJN'@;
put 'b2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNCksemMoIiAjIixudWxsPT1kLmZpbHRlcmluZ1ZpZXdib3g/bnVsbDpkLmZpbHRlcmluZ1ZpZXdib3guaWQsIiAiLGQuZmlsdGVyTGliZHMsIiAiKSxDZSgyKSxSZSgibmdJZiIsZC5maWx0ZXIpLENlKDYpLFJlKCJj'@;
put 'bHJMb2FkaW5nIixkLmZpbHRlckxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxrYSxvdSxzdSxadSxkaCxVcyxYSixEMCxEOCxUMCxmMSx1MixDcCxsMSxjMSxTMCxCcyx3cCxPcyxyMixjVSx4eSx2c2UscHNlLHdzZSxfc2UsU3NlLEdqZSxVNyxZYl0sc3R5bGVzOlsiLmxpY2VuY2Ut'@;
put 'bm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtkaXNwbGF5OmJsb2NrO29wYWNpdHk6LjZ9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MTMwMH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5t'@;
put 'b2RhbC1ib2R5LXdyYXBwZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpfWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWNvbnRlbnR7aGVpZ2h0Ojgwdmh9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWZv'@;
put 'b3Rlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowfWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0OjEwMCU7aGVpZ2h0OjEwMCV9ZGMtdHJlZVtfbmdjb250ZW50LSVDT01QJV17b3Zl'@;
put 'cmZsb3c6YXV0bztmbGV4OjF9LnRvb2x0aXAtbG9uZ1tfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkfS5hZGQtbmV3W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MCU7cGFkZGluZy1yaWdodDo1cHh9LnZpZXdib3gtbGltaXQtbm90aWNlW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtvcGFjaXR5Oi43O2NvbG9yOiNlNzRjM2N9LmN1cnJlbnRseS1vcGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MCV9LmN1cnJlbnRseS1vcGVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVuLXZpZXdib3hbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO3BhZGRp'@;
put 'bmc6M3B4IDVweH0uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVdICAgLm9wZW4tdmlld2JveC5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDYwLDEzMywwLC4xODAzOTIxNTY5KX0uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'Lm9wZW4tdmlld2JveFtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZDojZThlOGU4fS52aWV3Ym94ZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDo5OTl9LnZpZXdib3hbX25n'@;
put 'Y29udGVudC0lQ09NUCVde21pbi13aWR0aDoyMDBweDttaW4taGVpZ2h0OjIwMHB4O3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czphbGw7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXIt'@;
put 'dG9wLXJpZ2h0LXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDAgMTBweCAtM3B4ICMwMDB9LnZpZXdib3guZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMTAwO291dGxpbmU6bm9uZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVD'@;
put 'T01QJV17Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4zMDE5NjA3ODQzKTtiYWNrZ3JvdW5kOndoaXRlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZmxleDoxO292ZXJmbG93LXg6YXV0b30udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29udGVudC0l'@;
put 'Q09NUCVde3dpZHRoOjEwMCU7bWluLWhlaWdodDoyMHB4O2JhY2tncm91bmQtY29sb3I6IzNjODUwMDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgNXB4O3BvaW50ZXItZXZlbnRzOmFsbH0udmlld2Jv'@;
put 'eFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdICAgLnRhYmxlLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLWFsbH0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJh'@;
put 'Zy1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdICAgLmFjdGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDttaW4td2lkdGg6MzVweH0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdICAgLmFjdGlvbnNbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi1sZWZ0OjVweH0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdICAgLmFjdGlvbnNbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVdOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxLjMpfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGljay1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'Y2xpY2staWNvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMyl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5kcmFnSGFuZGxlLmNvcm5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTVweDtoZWlnaHQ6MTVweDtjdXJzb3I6bndzZS1yZXNpemV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUucmlnaHRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjJweDtoZWlnaHQ6'@;
put 'MTAwJTtjdXJzb3I6ZXctcmVzaXplfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnSGFuZGxlLmJvdHRvbVtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjJweDt3aWR0aDoxMDAlO2N1cnNvcjpucy1yZXNpemV9LmNvbHMtc2VhcmNoW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0'@;
put 'aDoxMDAlO21hcmdpbi10b3A6NXB4O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMjc4NDMxMzcyNSk7Ym9yZGVyLXJhZGl1czozcHh9LmNvbHMtbGlzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOnNvbGlkIDFweCAjY2NjO21pbi1oZWlnaHQ6NjBweDtiYWNrZ3JvdW5kOndoaXRl'@;
put 'O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjQwMHB4O21heC13aWR0aDoxMDAlO21hcmdpbi10b3A6NXB4fS5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2JvcmRlci1ib3R0b206c29saWQgMXB4ICNjY2M7'@;
put 'Y29sb3I6IzAwMDAwMGRlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6bW92ZTtiYWNrZ3JvdW5kOndoaXRlO2ZvbnQtc2l6ZToxNHB4fS5j'@;
put 'b2wtYm94LnNlYXJjaFtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMDE5NjA3ODQzKX0uY29sLWJveC5wcmltYXJ5S2V5SGVhZGVyU3R5bGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuMTQxMTc2NDcwNil9LmNk'@;
put 'ay1kcmFnLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4ICMwMDAzLDAgOHB4IDEwcHggMXB4ICMwMDAwMDAyNCwwIDNweCAxNHB4IDJweCAjMDAwMDAwMWY7ei1pbmRleDox'@;
put 'MzAwIWltcG9ydGFudH0uY2RrLWRyYWctcGxhY2Vob2xkZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLWRyYWctYW5pbWF0aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9LmNvbC1ib3hbX25n'@;
put 'Y29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7Ym9yZGVyOm5vbmV9LmNvbHMtbGlzdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmNkay1kcmFnLXBsYWNlaG9sZGVyKXt0cmFuc2l0aW9uOnRyYW5z'@;
put 'Zm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9LmRpc2FibGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpub25lIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfS5maWx0ZXItYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDA3MmEz'@;
put 'fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5maXJzdENvbHVtbkhlYWRlclN0eWxlIGJ1dHRvbi5jaGFuZ2VUeXBle2Rpc3BsYXk6bm9uZX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFy'@;
put 'eUtleUhlYWRlclN0eWxlLCBob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNjkwMTk2MDc4NCl9aG90LXRhYmxlW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0OSl9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAgIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fSJdfSksY30pKCksRXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlT3Zlcj1uZXcgRXIsdGhpcy5maWxlRHJvcD1uZXcgRXIsdGhpcy5lbGVtZW50PWF9b25Ecm9wKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9w'@;
put 'KGEpO2NvbnN0IGQ9YS5kYXRhVHJhbnNmZXI/LmZpbGVzLGg9W107aWYoZClmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyloLnB1c2goZFtmXSk7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShoKSx0aGlzLmZpbGVPdmVyLmVtaXQoITEpLHRoaXMuZmlsZURyb3AuZW1pdChoKX1vbkRyYWdP'@;
put 'dmVyKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpO2NvbnN0IGQ9YS5kYXRhVHJhbnNmZXI7aWYoZCl7aWYoLTE9PT1kLnR5cGVzLmluZGV4T2YoIkZpbGVzIikpcmV0dXJuO2QuZHJvcEVmZmVjdD0iY29weSJ9dGhpcy5maWxlT3Zlci5lbWl0KCEwKX1vbkRyYWdMZWF2ZShhKXt0aGlzLl9w'@;
put 'cmV2ZW50QW5kU3RvcChhKSx0aGlzLmZpbGVPdmVyLmVtaXQoITEpfV9wcmV2ZW50QW5kU3RvcChhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVk'@;
put 'aXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZURyb3AiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZHJvcCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Ecm9wKGYpfSkoImRyYWdvdmVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyYWdPdmVy'@;
put 'KGYpfSkoImRyYWdsZWF2ZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EcmFnTGVhdmUoZil9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlT3ZlcjoiZmlsZU92ZXIiLGZpbGVEcm9wOiJmaWxlRHJvcCJ9fSksY30pKCksa3NlPSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoYSl7dGhpcy5maWxlU2VsZWN0ZWQ9bmV3IEVyLHRoaXMuZWxlbWVudD1hfWlzRW1wdHlBZnRlclNlbGVjdGlvbigpe3JldHVybiEhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5tdWx0aXBsZX1vbkNoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5h'@;
put 'dGl2ZUVsZW1lbnQuZmlsZXM7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShhKSx0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGEpLHRoaXMuaXNFbXB0eUFmdGVyU2VsZWN0aW9uKCkmJih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVTZWxlY3QiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLm9uQ2hhbmdl'@;
put 'KCl9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlU2VsZWN0ZWQ6ImZpbGVTZWxlY3RlZCJ9fSksY30pKCk7ZnVuY3Rpb24geHplKGMsbCl7MSZjJiYobWUoMCwicCIsOCksTmUoMSwiIE5vIGRhdGFzZXQgbWV0YSB0byBzaG93LiAiKSx5ZSgpKX1mdW5jdGlv'@;
put 'biBFemUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYS5OQU1FKSxDZSgyKSxvcihhLlZBTFVFKX19ZnVu'@;
put 'Y3Rpb24ga3plKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IiwxMSkoMSwiY2xyLWRhdGFncmlkIikoMiwiY2xyLWRnLWNvbHVtbiIpLE5lKDMsIk5hbWUiKSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iKSxOZSg1LCJWYWx1ZSIpLHllKCksSmUoNixFemUsNSwyLCJjbHIt'@;
put 'ZGctcm93Iiw1KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSg2KSxSZSgibmdGb3JPZiIsYS5kc21ldGEpfX1mdW5jdGlvbiBBemUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiw5KSxOZSgyKSx5ZSgpLEplKDMsa3plLDcsMSwiY2xyLXRh'@;
put 'Yi1jb250ZW50IiwxMCkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleDtDZSgyKSxvcihhLmdyb3VwKSxDZSgxKSxSZSgiY2xySWZBY3RpdmUiLDA9PT1kKX19bGV0IEFzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcGVuPSExLHRoaXMuZHNtZXRh'@;
put 'PVtdLHRoaXMub3BlbkNoYW5nZT1uZXcgRXIsdGhpcy5kc21ldGFHcm91cHBlZD1bXX1uZ09uSW5pdCgpe31uZ09uQ2hhbmdlcyhhKXthLmRzbWV0YT8uY3VycmVudFZhbHVlPy5sZW5ndGg+MCYmdGhpcy5wYXJzZURTTWV0YSgpfXBhcnNlRFNNZXRhKCl7dGhpcy5kc21ldGFHcm91cHBlZD1b'@;
put 'XTtmb3IobGV0IGEgb2YgdGhpcy5kc21ldGEpe2xldCBkPXRoaXMuZHNtZXRhR3JvdXBwZWQuZmluZEluZGV4KGg9PmguZ3JvdXA9PT1hLk9EU19UQUJMRSk7ZDwwJiYoZD10aGlzLmRzbWV0YUdyb3VwcGVkLnB1c2goe2dyb3VwOmEuT0RTX1RBQkxFLGRzbWV0YTpbXX0pLTEpLHRoaXMuZHNt'@;
put 'ZXRhR3JvdXBwZWRbZF0uZHNtZXRhLnB1c2goYSl9fW9uT3BlbkNoYW5nZShhKXt0aGlzLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKX1vbkNsb3NlQ2xpY2soKXt0aGlzLm9uT3BlbkNoYW5nZSghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGF0YXNldC1pbmZvIl1dLGlucHV0czp7b3Blbjoib3BlbiIsZHNtZXRhOiJkc21ldGEifSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJvcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W3ZhXSxkZWNsczoxMCx2YXJzOjUsY29u'@;
put 'c3RzOltbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3Mi'@;
put 'LCJ0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xyTGF5b3V0IiwidmVydGljYWwiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidGV4dC1j'@;
put 'ZW50ZXIiXSxbImNsclRhYkxpbmsiLCIiLCJpZCIsImxpbmsxIl0sWyJpZCIsImNvbnRlbnQxIiwiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAiLDQsImNscklmQWN0aXZlIl0sWyJpZCIsImNvbnRlbnQxIiwxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1j'@;
put 'b250ZW50LWNlbnRlciIsInctMTAwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk9wZW5DaGFuZ2UoZil9KSxtZSgxLCJoMyIsMSksTmUoMiwiRGF0YXNldCBN'@;
put 'ZXRhIikseWUoKSxtZSgzLCJkaXYiLDIpLEplKDQseHplLDIsMCwicCIsMyksbWUoNSwiY2xyLXRhYnMiLDQpLEplKDYsQXplLDQsMiwiY2xyLXRhYiIsNSkseWUoKSgpLG1lKDcsImRpdiIsNikoOCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DbG9zZUNs'@;
put 'aWNrKCl9KSxOZSg5LCIgQ2xvc2UgIikseWUoKSgpKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGQub3BlbikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxDZSg0KSxSZSgibmdJZiIsZC5kc21ldGFHcm91cHBlZC5sZW5ndGg8MSksQ2UoMiksUmUoIm5n'@;
put 'Rm9yT2YiLGQuZHNtZXRhR3JvdXBwZWQpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxXOCxUcCx0ZyxuZyxyZyxpZywkOCxvZyxCOCxrcCx6OCxvdSxzdSxFOCxMcCxPcCxkZyxScCxJcCxjZ10sc3R5bGVzOlsiLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXRhYnNbX25nY29u'@;
put 'dGVudC0lQ09NUCVde21heC1oZWlnaHQ6NzB2aH0ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWItY29udGVudHt3aWR0aDoxMDAlO292ZXJmbG93OmF1dG99Lm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgICAudGFiLWNvbnRlbnQgLmRhdGFncmlkLW91dGVy'@;
put 'LXdyYXBwZXJ7d2lkdGg6MTAwJX0iXX0pLGN9KSgpO2Z1bmN0aW9uIFR6ZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksb3IoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpfX1mdW5jdGlvbiBEemUoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmdlbmVyYXRlRWRpdFJlY29yZFVybCgpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO1JlKCJkaXNhYmxlZCIsYS5nZW5lcmF0ZUVkaXRSZWNv'@;
put 'cmRVcmxMb2FkaW5nKSxDZSgxKSxncigiICIsYS5nZW5lcmF0ZWRSZWNvcmRVcmw/ImNvcHkgdG8gY2xpcGJvYXJkIjphLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc/IkdlbmVyYXRpbmcgdXJsLi4uIjoiTGluayB0byB0aGlzIHJlY29yZCIsIiAiKX19ZnVuY3Rpb24gSXplKGMsbCl7'@;
put 'aWYoMSZjJiYoVnIoMCksSmUoMSxUemUsMiwxLCJzcGFuIiwxMSksSmUoMixEemUsMiwyLCJidXR0b24iLDEyKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKSxDZSgx'@;
put 'KSxSZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKX19ZnVuY3Rpb24gTHplKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxNSkoMSwic3BhbiIsMTYpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gUnplKGMs'@;
put 'bCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIE96ZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDMwKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBQemUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gRnplKGMsbCl7aWYoMSZjKXtj'@;
put 'b25zdCBhPVZuKCk7bWUoMCwiY2xyLWlucHV0LWNvbnRhaW5lciIsMzMpKDEsImlucHV0IiwzNCkseHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rp'@;
put 'b24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDMpLiRpbXBsaWNpdCxfPVZlKDIpO3JldHVybiBfLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpLGp0KF8uY3VycmVudFJlY29yZC5u'@;
put 'b0xpbmtPcHRpb249ITApfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMykuJGltcGxpY2l0LGQ9VmUoMik7'@;
put 'ZHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIEh6ZShjLGwpezEmYyYmamEoMCl9Y29uc3QgdVU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57'@;
put 'Y29sOmMsY29sSW5kZXg6bH19O2Z1bmN0aW9uIE56ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLEplKDEsSHplLDEsMCwibmctY29udGFpbmVyIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O1ZlKDIpO2NvbnN0IGY9JGkoMTYpO0NlKDEp'@;
put 'LFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFEyKDIsdVUsZCxoKSl9fWNvbnN0IFZ6ZT1mdW5jdGlvbigpe3JldHVyblsibnVtZXJpYyIsdm9pZCAwXX0sVHNlPWZ1bmN0aW9uKCl7cmV0dXJuWyJhdXRvY29tcGxldGUiXX07ZnVuY3Rpb24gQnpl'@;
put 'KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxGemUsMiwzLCJjbHItaW5wdXQtY29udGFpbmVyIiwzMiksSmUoMixOemUsMiw1LCJkaXYiLDIpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1WZSgyKTtsZXQgaCxmO0NlKDEpLFJlKCJuZ0lmIiwkcygyLFZ6ZSkuaW5jbHVk'@;
put 'ZXMobnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5lZGl0b3IpKSxDZSgxKSxSZSgibmdJZiIsJHMoMyxUc2UpLmluY2x1ZGVzKG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRv'@;
put 'cnx8bnVsbD09KGY9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmYuZWRpdG9yKSl9fWZ1bmN0aW9uIGp6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiKSgxLCJ0ZXh0YXJlYSIsMzYsMzcpLHh0KCJm'@;
put 'b2N1c2luIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDMpLmluZGV4O3JldHVybiBqdChWZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVu'@;
put 'Y3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDMpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuY3VycmVu'@;
put 'dFJlY29yZFtmLmtleV09aCl9KSxOZSgzLCIgICAgICAgICAgICAgICAgICAiKSx5ZSgpLG1lKDQsImNsci1jb250cm9sLWhlbHBlciIpLE5lKDUpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMiksZD1WZSgzKS4kaW1wbGljaXQsaD1WZSgyKTtsZXQgZixfLFQ7Q2UoMSksZHIoImludmFs'@;
put 'aWQtZGF0YSIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoZC5rZXkpKSgibm90LWNoYXIiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmYudHlwZSksUmUoInJv'@;
put 'd3MiLGQudmFsdWUubGVuZ3RoPjgwPzY6MSkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pKCJtYXhMZW5ndGgiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KF89aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOl8ubGVu'@;
put 'Z3RoKSxDZSg0KSx6YygiIixhLnZhbHVlLmxlbmd0aCwiIC8gIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShUPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDpULmxlbmd0aCwiIil9fWZ1bmN0aW9uIHp6ZShjLGwpezEmYyYmamEo'@;
put 'MCl9ZnVuY3Rpb24gVXplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSx6emUsMSwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7VmUoMik7Y29uc3QgZj0kaSgxNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVP'@;
put 'dXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsUTIoMix1VSxkLGgpKX19Y29uc3QgWnplPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19O2Z1bmN0aW9uIFl6ZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsanplLDYsOSwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMiksSmUo'@;
put 'MixVemUsMiw1LCJkaXYiLDIpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1WZSgyKTtsZXQgaCxmO0NlKDEpLFJlKCJuZ0lmIiwkcygyLFp6ZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxp'@;
put 'ZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5lZGl0b3IpKSxDZSgxKSxSZSgibmdJZiIsJHMoMyxUc2UpLmluY2x1ZGVzKG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGY9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmYuZWRp'@;
put 'dG9yKSl9fWZ1bmN0aW9uIFd6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDM4KSgxLCJ0ZXh0YXJlYSIsMzkpLHh0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSko'@;
put 'ImlucHV0IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChW'@;
put 'ZSgyKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pLHllKCksbWUoMiwiY2xyLWNvbnRyb2wtaGVscGVyIiksTmUoMywiSEg6bW06c3MiKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdCxkPVZlKDIpO2xldCBoO0NlKDEpLGRyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVu'@;
put 'dFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSkoIm5vdC1jaGFyIixudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLnR5cGUpLFJlKCJyb3dzIixhLnZhbHVlLmxlbmd0'@;
put 'aD44MD82OjEpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gR3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzOCkoMSwidGV4dGFyZWEiLDQwKSx4dCgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg0KS5yZWNv'@;
put 'cmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDIpLiRp'@;
put 'bXBsaWNpdDtyZXR1cm4ganQoVmUoMikuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSx5ZSgpLG1lKDIsImNsci1kYXRlLWNvbnRhaW5lciIsNDEpKDMsImlucHV0Iiw0MikseHQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGltcGxpY2l0O3JldHVy'@;
put 'biBqdChWZSgyKS5yZWNvcmREYXRlQ2hhbmdlKGgsZi5rZXkpKX0pLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1WZSgyKTtDZSgxKSxkcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLFJlKCJuZ01v'@;
put 'ZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gJHplKGMsbCl7MSZjJiZqYSgwKX1mdW5jdGlvbiBxemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxKZSgxLCR6ZSwxLDAsIm5nLWNvbnRhaW5lciIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKSxkPWEuJGltcGxp'@;
put 'Y2l0LGg9YS5pbmRleDtWZSgyKTtjb25zdCBmPSRpKDE2KTtDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixRMigyLHVVLGQsaCkpfX1mdW5jdGlvbiBLemUoYyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJkaXYiLDE4KSgyLCJkaXYiLDE5'@;
put 'KSgzLCJwIiwyMCksTmUoNCksSmUoNSxSemUsMSwwLCJjbHItaWNvbiIsMjEpLHllKCksbWUoNiwicCIsMjIpLE5lKDcpLHllKCkoKSxtZSg4LCJkaXYiLDIzKSxKZSg5LE96ZSwyLDAsInNwYW4iLDI0KSxKZSgxMCxQemUsMSwwLCJjbHItaWNvbiIsMjUpLEplKDExLEJ6ZSwzLDQsIm5nLWNv'@;
put 'bnRhaW5lciIsMjYpLEplKDEyLFl6ZSwzLDQsIm5nLWNvbnRhaW5lciIsMjYpLEplKDEzLFd6ZSw0LDYsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDI3KSxKZSgxNCxHemUsNCwzLCJkaXYiLDI3KSxKZSgxNSxxemUsMiw1LCJkaXYiLDI2KSx5ZSgpKCkscXQoMTYsImhyIiwyOCksenIoKSks'@;
put 'MiZjKXtjb25zdCBhPVZlKCksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXgsZj1WZSgyKTtsZXQgXyxUO0NlKDQpLGdyKCIgIixkLmtleSwiICIpLENlKDEpLFJlKCJuZ0lmIixmLmlzQ29sUGsoZC5rZXkpKSxDZSgyKSxncigiICIsbnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxs'@;
put 'PT0oXz1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6Xy5kZXNjLCIgIiksQ2UoMSksUmUoIm5nU3dpdGNoIixudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShUPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/'@;
put 'bnVsbDpULnR5cGUpLENlKDEpLFJlKCJuZ0lmIixmLmN1cnJlbnRSZWNvcmRMb2FkaW5ncy5pbmNsdWRlcyhoKSksQ2UoMSksUmUoIm5nSWYiLGYuY3VycmVudFJlY29yZEVycm9ycy5pbmNsdWRlcyhoKSksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxDZSgxKSxSZSgibmdT'@;
put 'd2l0Y2hDYXNlIix2b2lkIDApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiYXV0b2NvbXBsZXRlIil9fWZ1bmN0aW9uIFh6ZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsS3pl'@;
put 'LDE3LDExLCJuZy1jb250YWluZXIiLDIpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIkFjdGlvbiIhPT1hLmtleSYmIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hLmtleSYmIm5vTGlua09wdGlvbiIhPT1hLmtleSl9fWZ1bmN0aW9u'@;
put 'IEp6ZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsWHplLDIsMSwibmctY29udGFpbmVyIiwxNyksYmEoMiwia2V5dmFsdWUiKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsTTUoMiwyLGEuY3VycmVudFJlY29yZCxhLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JU'@;
put 'cmFja0J5IixhLnRyYWNrQnlGbil9fWZ1bmN0aW9uIFF6ZShjLGwpezEmYyYmKG1lKDAsImNsci1hbGVydCIsNDMpKDEsImNsci1hbGVydC1pdGVtIikoMiwic3BhbiIsNDQpLE5lKDMsIiBEYXRhIFZhbGlkYXRpb24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSx5ZSgpKCkoKSksMiZjJiYo'@;
put 'SHUoInZpc2liaWxpdHkiLFZlKCkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNpYmxlIjoiaGlkZGVuIiksUmUoImNsckFsZXJ0Q2xvc2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFuZ2VyIikpfWZ1bmN0aW9uIGVVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp'@;
put 'O21lKDAsImRpdiIsNDUpKDEsImJ1dHRvbiIsNDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vblByZXZpb3VzUmVjb3JkQ2xpY2soKSl9KSxxdCgyLCJjbHItaWNvbiIsNDcpLHllKCksbWUoMywicCIpLE5lKDQsIiBDdXJyZW50IHJvdzogIiksbWUoNSwi'@;
put 'c3Ryb25nIiksTmUoNikseWUoKSgpLG1lKDcsImJ1dHRvbiIsNDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbk5leHRSZWNvcmRDbGljaygpKX0pLHF0KDgsImNsci1pY29uIiw0OCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJk'@;
put 'aXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLENlKDUpLGdyKCIgIixhLmN1cnJlbnRSZWNvcmRJbmRleCsxLCIgIiksQ2UoMSksUmUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCl9fWZ1bmN0aW9uIHRVZShjLGwpe2lm'@;
put 'KDEmYyYmKG1lKDAsIm9wdGlvbiIsNTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgibmdWYWx1ZSIsYSksQ2UoMSksZ3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gblVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2Vs'@;
put 'ZWN0Iiw1MSkseHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2xJbmRleDtyZXR1cm4ganQoVmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2w7cmV0dXJuIGp0KFZl'@;
put 'KCkuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKSxmPWguY29sLF89aC5jb2xJbmRleDtyZXR1cm4ganQoVmUoKS5vblJlY29yZERyb3Bkb3duQ2hhbmdlKGYua2V5LF8pKX0pLEplKDIsdFVlLDIsMiwib3B0aW9u'@;
put 'Iiw1MikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLmNvbCxkPVZlKCk7bGV0IGg7Q2UoMSksUmUoInZhbHVlIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKSgiaW5wdXRJZCIsYS5rZXkpLENlKDEpLFJlKCJuZ0Zvck9mIixudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9'@;
put 'PShoPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLnNvdXJjZSl9fWZ1bmN0aW9uIHJVZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNTYpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEpLENlKDEpLGdy'@;
put 'KCIgIixhLCIgIil9fWZ1bmN0aW9uIGlVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNlbGVjdCIsNTQpLHh0KCJmb2N1c2luIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuY29sSW5kZXg7cmV0dXJuIGp0KFZlKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSko'@;
put 'Im5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2w7cmV0dXJuIGp0KFZlKCkuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSxKZSgxLHJVZSwyLDIsIm9wdGlvbiIsNTUpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuY29sLGQ9VmUoKTtsZXQgaDtSZSgi'@;
put 'bmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSksQ2UoMSksUmUoIm5nRm9yT2YiLG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmguc291cmNlKX19Y29uc3Qgb1VlPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuWyJTT0ZUU0VMRUNUIiwiU09GVFNFTEVDVF9IT09LIl19O2Z1bmN0aW9uIHNVZShjLGwpe2lmKDEmYyYmKEplKDAsblVlLDMsMywiZGl2Iiw0OSksSmUoMSxpVWUsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw1MCxrYykpLDImYyl7Y29uc3QgYT1sLmNvbCxkPSRpKDIpLGg9'@;
put 'VmUoKTtSZSgibmdJZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yP251bGw6aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmhhc0RxUnVsZXMoYS5rZXksJHMoMixvVWUpKSkoIm5nSWZFbHNlIixkKX19bGV0IGFVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5z'@;
put 'YXNTdG9yZVNlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuY3VycmVudFJlY29yZEluZGV4PS0x'@;
put 'LHRoaXMuY3VycmVudFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudFJlY29yZEVycm9ycz1bXSx0aGlzLm9uUmVjb3JkQ2hhbmdlPW5ldyBFcix0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkPW5ldyBFcix0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkPW5ldyBFcix0aGlzLm9uUmVj'@;
put 'b3JkRWRpdENsb3NlPW5ldyBFcix0aGlzLm9uUmVjb3JkRWRpdENvbmZpcm09bmV3IEVyLHRoaXMub25OZXh0UmVjb3JkPW5ldyBFcix0aGlzLm9uUHJldmlvdXNSZWNvcmQ9bmV3IEVyLHRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzPVtdLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJs'@;
put 'TG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMub3JpZ2luYWxPcmRlcj0oaCxmKT0+MH1uZ09uSW5pdCgpe312YWxpZGF0'@;
put 'ZVJlY29yZENvbChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZixfKT0+e2guY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZXhlY3V0ZUhvdFZhbGlkYXRvcihhLGQsVD0+e2YoVCl9KX0pfSkoKX1yZWNvcmREYXRlQ2hhbmdlKGEsZCl7'@;
put 'bGV0IGg9dGhpcy5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLGY9aD9oLmRhdGVGb3JtYXQ6IiI7dGhpcy5jdXJyZW50UmVjb3JkJiYodGhpcy5jdXJyZW50UmVjb3JkW2RdPUlHKCkoYSkuZm9ybWF0KGYpKX1jb25maXJtUmVjb3JkRWRpdCgpe3RoaXMuY3VycmVudFJlY29y'@;
put 'ZEludmFsaWRDb2xzLmxlbmd0aDwxJiZ0aGlzLm9uUmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UmVjb3JkKX1jbG9zZVJlY29yZEVkaXQoKXt0aGlzLm9uUmVjb3JkRWRpdENsb3NlLmVtaXQoKX1vblJlY29yZERyb3Bkb3duQ2hhbmdlKGEsZCl7dGhpcy5vblJlY29yZERyb3Bkb3du'@;
put 'Q2hhbmdlZC5lbWl0KHtjb2xOYW1lOmEsY29sOmR9KX1vblJlY29yZElucHV0Rm9jdXMoYSxkKXt0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkLmVtaXQoe2V2ZW50OmEsY29sTmFtZTpkfSl9cmVjb3JkSW5wdXRQYXN0ZShhKXtzZXRUaW1lb3V0KCgpPT57YS50YXJnZXQudmFsdWU9YS50YXJn'@;
put 'ZXQudmFsdWUucmVwbGFjZSgvXHMrJC8sIiIpfSwwKX1yZWNvcmRJbnB1dENoYW5nZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLF89YS50YXJnZXQudmFsdWU7aC5oZWxwZXJTZXJ2aWNl'@;
put 'LmRlYm91bmNlQ2FsbCgzMDAsKCk9PntoLnZhbGlkYXRlUmVjb3JkQ29sKGYsXykudGhlbihUPT57Y29uc3QgVz1oLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmRleE9mKGQpO1Q/Vz4tMSYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuc3BsaWNlKFcsMSk6VzwwJiZoLmN1cnJlbnRS'@;
put 'ZWNvcmRJbnZhbGlkQ29scy5wdXNoKGQpfSl9KX0pKCl9b25OZXh0UmVjb3JkQ2xpY2soKXt0aGlzLm9uTmV4dFJlY29yZC5lbWl0KCl9b25QcmV2aW91c1JlY29yZENsaWNrKCl7dGhpcy5vblByZXZpb3VzUmVjb3JkLmVtaXQoKX1jb3B5VG9DbGlwKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVl'@;
put 'cnlTZWxlY3RvcigiI3JlY29yZE1vZGFsUmVmIC5tb2RhbC10aXRsZSIpO2lmKGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtoLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsaC5zdHlsZS5sZWZ0PSIwIixoLnN0eWxlLnRvcD0iMCIsaC5zdHlsZS5vcGFjaXR5'@;
put 'PSIwIixoLnN0eWxlLnpJbmRleD0iNTAwMCIsaC52YWx1ZT1hLGQuYXBwZW5kQ2hpbGQoaCksaC5mb2N1cygpLGguc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkLnJlbW92ZUNoaWxkKGgpLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPWF9fWdlbmVyYXRlRWRpdFJlY29y'@;
put 'ZFVybCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKWEuY29weVRvQ2xpcChhLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXthLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITA7Y29uc3QgZD1bXTthLmhlYWRlclBrcy5mb3JF'@;
put 'YWNoKGg9PntsZXQgZj0iQyIsXz0iIjtmb3IobGV0IFQ9MDtUPGEuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO1QrKyl7Y29uc3QgVz1hLmNlbGxWYWxpZGF0aW9uW1RdO2lmKFcuZGF0YT09PWgpeygibnVtZXJpYyI9PT1XLnR5cGV8fCJkYXRlIj09PVcudHlwZXx8InRpbWUiPT09Vy50eXBlKSYm'@;
put 'KGY9Ik4iKTticmVha319Xz0iQyI9PT1mP2AnJHthLmN1cnJlbnRSZWNvcmRbaF19J2A6YS5jdXJyZW50UmVjb3JkW2hdLnRvU3RyaW5nKCksZC5wdXNoKHtHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOmgsT1BFUkFUT1Jf'@;
put 'Tk06Ij0iLFJBV19WQUxVRTpffSl9KSxkLmxlbmd0aD4wJiZhLmxpYmRzJiYoeWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsZCkudGhlbihoPT57YS5xdWVyeUZpbHRlcj17aWQ6aC5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOmgucmVzdWx0WzBdLkZJTFRFUl9U'@;
put 'QUJMRX07Y29uc3QgVD1sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZDthLmNvcHlUb0NsaXAoVCksYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLGEuZmlsdGVy'@;
put 'PSExfSkuY2F0Y2goaD0+e2Euc3VibWl0TG9hZGluZz0hMX0pKX19KSgpfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9dHJhY2tCeUZuKGEsZCl7cmV0dXJuIGF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0'@;
put 'KGJkKSx0dChUYykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNvcmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJjdXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246InJlY29yZEFjdGlvbiIsbGliZHM6ImxpYmRzIixxdWVyeUZpbHRlcjoicXVl'@;
put 'cnlGaWx0ZXIiLGZpbHRlcjoiZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQa3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVjb3JkSW5kZXg6ImN1cnJlbnRSZWNvcmRJbmRleCIsY3VycmVudFJlY29yZExv'@;
put 'YWRpbmdzOiJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNvcmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IifSxvdXRwdXRzOntvblJlY29yZENoYW5nZToib25SZWNvcmRDaGFuZ2UiLG9u'@;
put 'UmVjb3JkSW5wdXRGb2N1c2VkOiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5nZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixvblJlY29yZEVkaXRDbG9zZToib25SZWNvcmRFZGl0Q2xvc2UiLG9uUmVjb3JkRWRpdENvbmZpcm06Im9uUmVjb3JkRWRpdENv'@;
put 'bmZpcm0iLG9uTmV4dFJlY29yZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3VzUmVjb3JkIn0sZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siaWQiLCJyZWNvcmRNb2RhbFJlZiIsMSwicmVjb3JkLWVkaXQtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywi'@;
put 'Y2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHB5LTEwIiw0LCJuZ0lmIl0sWzEs'@;
put 'Im1vZGFsLWZvb3RlciIsInAtMCIsImNsci1nYXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsInZpc2liaWxpdHkiLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBl'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXYtbmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImZvY3VzYWJsZSIsMywiZGlzYWJs'@;
put 'ZWQiLCJjbGljayJdLFsiYXV0b2NvbXBsZXRlIiwiIl0sWyJjbGFzcyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1saW5rIGdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJk'@;
put 'aXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInBvc2l0aW9uLWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxb'@;
put 'MSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY29sdW1uLWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xy'@;
put 'LWZsZXgtbWQtcm93Il0sWzEsIm5hbWUtaW5wdXQtcm93Il0sWzEsImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMtd3JhcHBlciIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJz'@;
put 'cGlubmVyIHNwaW5uZXItaW5saW5lIGZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3It'@;
put 'c3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxbInNoYXBlIiwia2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5z'@;
put 'ZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNz'@;
put 'IiwibnVtZXJpYy1pbnB1dCIsMywiaW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJuZ01vZGVsIiwiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWzQs'@;
put 'Im5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInJvd3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIiwiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjaGFyVGV4dGFyZWEiLCIiXSxbMSwiZGF0'@;
put 'ZS1maWVsZCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInJvd3MiLCJuZ01vZGVsIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJjb2xzIiwiYXV0byIsMSwibm90LWNoYXIiLDMsIm5nTW9kZWwiLCJwYXN0ZSIsImlucHV0Iiwi'@;
put 'bmdNb2RlbENoYW5nZSJdLFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5'@;
put 'cGUiXSxbMSwiYWxlcnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIGxlZnQiLCJzaXplIiwiMjMiXSxbInNo'@;
put 'YXBlIiwiYW5nbGUgcmlnaHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvdGhlcl90aGFuX3NvZnRfc2VsZWN0IiwiIl0sWzMsInZhbHVlIiwiaW5wdXRJZCIsImZvY3VzaW4iLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0Zv'@;
put 'ciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwiZm9jdXNpbiIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNs'@;
put 'ci1tb2RhbCIsMCkoMSwiaDMiLDEpLE5lKDIpLEplKDMsSXplLDMsMiwibmctY29udGFpbmVyIiwyKSx5ZSgpLG1lKDQsImRpdiIsMyksSmUoNSxMemUsMywwLCJkaXYiLDQpLEplKDYsSnplLDMsNSwibmctY29udGFpbmVyIiwyKSx5ZSgpLG1lKDcsImRpdiIsNSksSmUoOCxRemUsNCw0LCJj'@;
put 'bHItYWxlcnQiLDYpLEplKDksZVVlLDksMywiZGl2Iiw3KSxtZSgxMCwiZGl2IikoMTEsImJ1dHRvbiIsOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLGQuY2xvc2VSZWNvcmRFZGl0KCl9KSxOZSgxMiwiIENhbmNlbCAiKSx5'@;
put 'ZSgpLG1lKDEzLCJidXR0b24iLDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jb25maXJtUmVjb3JkRWRpdCgpfSksTmUoMTQsIiBDb25maXJtICIpLHllKCkoKSgpLEplKDE1LHNVZSwzLDMsIm5nLXRlbXBsYXRlIixudWxsLDEwLGtjKSx5ZSgpKSwyJmEmJihSZSgiY2xyTW9k'@;
put 'YWxPcGVuIiwhMCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSgyKSxiMCgiICIsIkFERCI9PT1kLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1kLmxpYmRzP251bGw6ZC5saWJkcy5zcGxpdCgiLiIpWzBdLCIuIixudWxsPT1kLmxpYmRzP251bGw6ZC5s'@;
put 'aWJkcy5zcGxpdCgiLiIpWzFdLCIgIiksQ2UoMSksUmUoIm5nSWYiLCJFRElUIj09PWQucmVjb3JkQWN0aW9uKSxDZSgyKSxSZSgibmdJZiIsZC5hZGRSZWNvcmRMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQuYWRkUmVjb3JkTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGQuY3VycmVudFJl'@;
put 'Y29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdJZiIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLENlKDQpLFJlKCJkaXNhYmxlZCIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxyZCxuZCx0'@;
put 'aCxsMSxjMSxXYSxNMCxCcyxPcyxIYixQUSxOYixoSCxrYSxvdSxzdSxIRixMYiwkRixxRixmMSxqRixOOCxvd2UsdVEsTXNlLGR4XSxzdHlsZXM6WyIucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxh'@;
put 'eTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lLWlucHV0LXJvd1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttYXgtd2lk'@;
put 'dGg6MjYwcHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLm5hbWUtaW5wdXQtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZWxsLWRlc2NbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoz'@;
put 'MHB4O21hcmdpbi10b3A6MTBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAuaW5wdXRzLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2Vu'@;
put 'dGVyfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbnB1dHMtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAgPio6bm90KC5kYXRlLWZpZWxkKTpub3QoY2xyLXNlbGVjdC1jb250YWluZXIpe2Zs'@;
put 'ZXg6MX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50'@;
put 'cnlbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItZm9ybS1jb250cm9s'@;
put 'e21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3R7ZGlzcGxheTpibG9jazt3aWR0aDoyMjRweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVy'@;
put 'OjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1yaWdodDo2cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1'@;
put 'bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBp'@;
put 'bnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwgLnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtp'@;
put 'dC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxkICAgcFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5yZWNv'@;
put 'cmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMzBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtcGlja2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlv'@;
put 'bjphYnNvbHV0ZTtyaWdodDowO3RvcDo0cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLXBpY2tlcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjAhaW1w'@;
put 'b3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MTBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lcntib3Jk'@;
put 'ZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtib3JkZXItcmFkaXVzOi4xMjVyZW07bWFyZ2luLXJpZ2h0OjVweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5z'@;
put 'ZXR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcnt0b3A6MTVweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciBz'@;
put 'ZWxlY3R7aGVpZ2h0OmF1dG87cGFkZGluZzoxMHB4IDIwcHggMTBweCAxMHB4O2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3Q6Zm9jdXN7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50'@;
put 'fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpob3ZlcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXJ7d2lk'@;
put 'dGg6MjI0cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fS5yZWNvcmQtZWRpdC1t'@;
put 'b2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTti'@;
put 'b3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwgLnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0'@;
put 'LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyLmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6'@;
put 'cmVkfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1kaWFsb2d7d2lkdGg6ODB2d30ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LnJlY29yZC1lZGl0LW1vZGFs'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlO3Jlc2l6ZTpub25lO2JvcmRlci1jb2xvcjojOTk5fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4'@;
put 'dGFyZWEuaW52YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWQ7b3V0bGluZTowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEubm90LWNoYXJ7Zm9udC1mYW1pbHk6THVjaWRhIENvbnNvbGUsTW9uYWNvLG1v'@;
put 'bm9zcGFjZX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuZ2VuZXJhdGUtcmVjb3JkLXVybHtyaWdodDo0MHB4O3RvcDo0MHB4O2ZvbnQtc2l6ZToxMnB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5nZW5lcmF0ZS1yZWNvcmQt'@;
put 'dXJsLWJ1dHRvbntyaWdodDoyNXB4O3RvcDo1cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWhlYWRlcntwYWRkaW5nOjAgMCAxcmVtfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1mb290ZXJ7ZGlzcGxh'@;
put 'eTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZm9vdGVyIC5hbGVydHttYXJnaW46MH0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5'@;
put 'OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5wcmV2LW5leHRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LnByZXYtbmV4dFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDEwcHh9LmZvY3Vz'@;
put 'YWJsZVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7Ym94LXNoYWRvdzowIDAgM3B4ICM1YWEyMjB9LmVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0Oi0zMHB4fS52YWxpZGF0aW9uLWluZm8tYWxlcnRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMxMHB4'@;
put 'fSJdfSksY30pKCk7ZnVuY3Rpb24gbFVlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixhLCIgIil9fWxldCBjVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdGVzTGlzdD1bXSx0'@;
put 'aGlzLnByb2Nlc3NlZFN0YXRlcz1bXSx0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITEsdGhpcy5taW5EZWxheT0xZTN9bmdPbkluaXQoKXt9YXBwZW5kU3RhdGUoYSl7aWYoIntmaW5pc2h9Ij09PWEpcmV0dXJuIHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx2b2lkIGNsZWFySW50ZXJ2YWwodGhp'@;
put 'cy5zdGF0ZUludGVydmFsKTt0aGlzLnN0YXRlc0xpc3QucHVzaChhKSx0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKGEpfXJlcGxhY2VMYXN0U3RhdGUoYSl7dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wPyh0aGlzLnN0YXRlc0xpc3QucG9wKCksdGhpcy5zdGF0ZXNMaXN0LnB1c2goYSkpOnRo'@;
put 'aXMucHJvY2Vzc2VkU3RhdGVzW3RoaXMucHJvY2Vzc2VkU3RhdGVzLmxlbmd0aC0xXT1hfWNsZWFyU3RhdGVzKCl7dGhpcy5wcm9jZXNzZWRTdGF0ZXM9W119c3RhcnRTdGF0ZXIoKXt0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITAsdGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nl'@;
put 'c3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIiksdGhpcy5zdGF0ZUludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIil9LHRo'@;
put 'aXMubWluRGVsYXkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVwbG9hZC1zdGF0ZXIiXV0sZGVjbHM6NSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwibS0wIiw0LCJuZ0Zv'@;
put 'ciIsIm5nRm9yT2YiXSxbMSwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJ2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiXSxbMSwibS0wIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiksSmUoMSxsVWUsMiwxLCJwIiwwKSx5ZSgpLG1lKDIs'@;
put 'ImRpdiIsMSkoMywic3BhbiIsMiksTmUoNCwiTG9hZGluZy4uLiIpLHllKCkoKSksMiZhJiYoQ2UoMSksUmUoIm5nRm9yT2YiLGQucHJvY2Vzc2VkU3RhdGVzKSl9LGRlcGVuZGVuY2llczpbeHNdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja31wW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXttYXJnaW46MDt0ZXh0LWFsaWduOmNlbnRlcn0iXX0pLGN9KSgpLHVVZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cfC9nLCIgfCAiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1'@;
put 'cGlwZT1OYSh7bmFtZToicGtTcGFjZVNlcGFyYXRlIix0eXBlOmMscHVyZTohMH0pLGN9KSgpLERzZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLGQpe3JldHVybiB0aGlzLmFkZFNlcGFyYXRvcnMoYS50b1N0cmluZygpLGQpfWFkZFNlcGFyYXRvcnMoYSxkPSIgIil7Y29uc3QgaD0oYSs9'@;
put 'IiIpLnNwbGl0KCIuIik7bGV0IGY9aFswXTtjb25zdCBfPWgubGVuZ3RoPjE/Ii4iK2hbMV06IiIsVD0vKFxkKykoXGR7M30pLztmb3IoO1QudGVzdChmKTspZj1mLnJlcGxhY2UoVCwiJDEiK2QrIiQyIik7cmV0dXJuIGYrX319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToidGhvdXNhbmRTZXBhcmF0b3IiLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7Y29uc3QgZFVlPVsiaHQiXSxoVWU9WyJ1cGxvYWRTdGF0ZXIiXSxmVWU9WyJxdWVyeUZpbHRlciJdLHBVZT1bImhvdEluc3RhbmNlIl0sZ1VlPVsiZmls'@;
put 'ZVVwbG9hZElucHV0Il07ZnVuY3Rpb24gbVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2MSkoMSwic3BhbiIsNjIpKDIsImxhYmVsIiw2MyksTmUoMywiIEJyb3dzZSAiKSx5ZSgpKCksbWUoNCwiaW5wdXQiLDY0LDY1KSx4dCgiY2hhbmdlIixmdW5jdGlvbihoKXty'@;
put 'ZXR1cm4gQnQoYSksanQoVmUoKS5nZXRGaWxlRGVzYyhoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNCksUmUoInVwbG9hZGVyIixhLnVwbG9hZGVyKX19ZnVuY3Rpb24gdlVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2NikoMSwiYnV0dG9uIiw2'@;
put 'NykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmdldEZpbGUoKSl9KSxOZSgyLCIgVXBsb2FkICIpLHllKCkoKX0yJmMmJihDZSgxKSxSZSgiZGlzYWJsZWQiLCEwKSl9ZnVuY3Rpb24gX1VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9u'@;
put 'Iiw2OCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxOZSgxLCIgQ2xvc2UgIikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtSZSgiZGlzYWJsZWQiLGEuZXhjZWxGaWxlUGFyc2luZ3x8YS51cGxvYWRMb2FkaW5nKX19'@;
put 'ZnVuY3Rpb24gYlVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw2OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxOZSgxLCIgU2tpcCAiKSx5ZSgpfX1mdW5jdGlvbiB5VWUoYyxsKXsxJmMm'@;
put 'JihtZSgwLCJkaXYiLDcwKSxxdCgxLCJhcHAtdXBsb2FkLXN0YXRlciIsbnVsbCw3MSkseWUoKSl9ZnVuY3Rpb24gd1VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLWVkaXQtcmVjb3JkIiw3MikseHQoIm9uUmVjb3JkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChh'@;
put 'KSxqdChWZSgpLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSkoIm9uUmVjb3JkSW5wdXRGb2N1c2VkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCkpfSkoIm9uUmVjb3JkRWRpdENsb3NlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgp'@;
put 'LmNsb3NlUmVjb3JkRWRpdCgpKX0pKCJvbk5leHRSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25OZXh0UmVjb3JkKCkpfSkoIm9uUHJldmlvdXNSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25QcmV2aW91c1JlY29yZCgpKX0pLHllKCl9'@;
put 'aWYoMiZjKXtjb25zdCBhPVZlKCk7UmUoImN1cnJlbnRSZWNvcmQiLGEuY3VycmVudEVkaXRSZWNvcmQpKCJyZWNvcmRBY3Rpb24iLGEucmVjb3JkQWN0aW9uKSgibGliZHMiLGEubGliZHMpKCJxdWVyeUZpbHRlciIsYS5xdWVyeUZpbHRlcikoImZpbHRlciIsYS5maWx0ZXIpKCJzdWJtaXRM'@;
put 'b2FkaW5nIixhLnN1Ym1pdExvYWRpbmcpKCJoZWFkZXJQa3MiLGEuaGVhZGVyUGtzKSgiY2VsbFZhbGlkYXRpb24iLGEuY2VsbFZhbGlkYXRpb24pKCJjdXJyZW50UmVjb3JkSW5kZXgiLGEuY3VycmVudEVkaXRSZWNvcmRJbmRleCkoImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsYS5jdXJyZW50'@;
put 'RWRpdFJlY29yZExvYWRpbmdzKSgiY3VycmVudFJlY29yZEVycm9ycyIsYS5jdXJyZW50RWRpdFJlY29yZEVycm9ycykoImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLGEuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3IpfX1mdW5jdGlvbiBDVWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDczKSxx'@;
put 'dCgxLCJwcm9ncmVzcyIpLHllKCkpfWNvbnN0IFNVZT1mdW5jdGlvbigpe3JldHVyblsiL2hvbWUiXX07ZnVuY3Rpb24gTVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw3NCkoMSwic3BhbiIsNzUpLHF0KDIsImNsci1pY29uIiw3NiksTmUoMywiQmFjayB0byB0YWJs'@;
put 'ZSBzZWxlY3Rpb24gIikseWUoKSxtZSg0LCJzcGFuIiw3NykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnZpZXdib3hNYW5hZ2VyKCkpfSkscXQoNSwiY2xyLWljb24iLDc4KSxOZSg2LCIgVmlld2JveGVzICIpLHllKCkoKX0yJmMmJihDZSgxKSxSZSgicm91'@;
put 'dGVyTGluayIsJHMoMSxTVWUpKSl9ZnVuY3Rpb24geFVlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsODUpfWZ1bmN0aW9uIEVVZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksZ3IoIiAi'@;
put 'LGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIGtVZShjLGwpe2lmKDEmYyYmKFZyKDApLE5lKDEpLGJhKDIsInRob3VzYW5kU2VwYXJhdG9yIiksenIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLHc1KCIgKCIsTTUoMiw0LGEuZGF0YVNvdXJjZS5sZW5ndGgsIiwiKSwiICIsMT09PWEuZGF0'@;
put 'YVNvdXJjZS5sZW5ndGg/InJvdyI6InJvd3MiLCIsICIsYS5jb2xzLmxlbmd0aCwiIiwxPT09YS5jb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gQVVlKGMsbCl7MSZjJiYoVnIoMCksTmUoMSwiICgwIHJvd3MpICIpLHpyKCkpfWZ1bmN0aW9uIFRVZShjLGwpe2lm'@;
put 'KDEmYyYmKFZyKDApLEplKDEsa1VlLDMsNywibmctY29udGFpbmVyIiwzNSksSmUoMixBVWUsMiwwLCJuZy1jb250YWluZXIiLDM1KSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCFhLnplcm9GaWx0ZXJSb3dzKSxDZSgxKSxSZSgibmdJZiIsYS56ZXJvRmlsdGVy'@;
put 'Um93cyl9fWZ1bmN0aW9uIERVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImg0Iiw3OSkoMSwiY2xyLXRvb2x0aXAiKSgyLCJjbHItaWNvbiIsODApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5kYXRhc2V0SW5mbz0hMCl9KSx5ZSgpLEplKDMs'@;
put 'eFVlLDEsMCwiY2xyLWljb24iLDgxKSxtZSg0LCJzcGFuIiw4MiksTmUoNSksbWUoNiwiYSIsODMpLE5lKDcpLHllKCkoKSxKZSg4LEVVZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg0KSx5ZSgpLEplKDksVFVlLDMsMiwibmctY29udGFpbmVyIiwzNSkseWUoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9bC5uZ1ZhcixkPVZlKCk7Q2UoMyksUmUoIm5nSWYiLGEudGFibGVOYW1lLmluY2x1ZGVzKCItRkMiKSksQ2UoMiksZ3IoIiAiLGEubGliTmFtZSwiLiIpLENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2QubGliZHMpLENlKDEpLG9yKGEudGFibGVOYW1lLnJlcGxhY2Uo'@;
put 'Ii1GQyIsIiIpKSxDZSgyKSxSZSgibmdJZiIsZC5kYXRhU291cmNlKX19ZnVuY3Rpb24gSVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw5MykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0p'@;
put 'LHF0KDEsImNsci1pY29uIiw5NCksbWUoMiwic3BhbiIpLE5lKDMsIlVwbG9hZCIpLHllKCkoKX19ZnVuY3Rpb24gTFVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiYnV0dG9uIiw4OCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5v'@;
put 'cGVuUWIoKSl9KSxxdCgyLCJjbHItaWNvbiIsODkpLG1lKDMsInNwYW4iKSxOZSg0LCJGaWx0ZXIiKSx5ZSgpKCksbWUoNSwiYnV0dG9uIiw5MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5lZGl0VGFibGUoKSl9KSxxdCg2LCJjbHItaWNvbiIsOTEpLG1l'@;
put 'KDcsInNwYW4iKSxOZSg4LCJFZGl0IikseWUoKSgpLEplKDksSVVlLDQsMCwiYnV0dG9uIiw5MiksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoOSksUmUoIm5nSWYiLCFhLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnKX19ZnVuY3Rpb24gUlVlKGMsbCl7aWYoMSZjJiYobWUoMCwic3Bh'@;
put 'biIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgxKSx6YygiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJy'@;
put 'b3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gT1VlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODYpLEplKDEsUlVlLDIsMiwic3BhbiIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBQVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJidXR0b24iLDk1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNhbmNlbEVkaXQoKSl9KSxxdCgyLCJj'@;
put 'bHItaWNvbiIsOTYpLG1lKDMsInNwYW4iKSxOZSg0LCJDYW5jZWwiKSx5ZSgpKCksbWUoNSwiY2xyLXRvb2x0aXAiKSg2LCJidXR0b24iLDk3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/'@;
put 'IiI6aC5hZGRSb3coKSl9KSxxdCg3LCJjbHItaWNvbiIsOTgpLE5lKDgsIkFkZCBSb3cgIikseWUoKSxKZSg5LE9VZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg0KSx5ZSgpLG1lKDEwLCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIp'@;
put 'LmNoZWNrU2F2ZSgpKX0pLHF0KDExLCJjbHItaWNvbiIsOTkpLE5lKDEyLCJTdWJtaXQgIikseWUoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg2KSxkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KSxSZSgiY2xyTG9hZGluZyIsYS5h'@;
put 'ZGRpbmdOZXdSb3cpfX1mdW5jdGlvbiBGVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5tYW51YWxGaWxlRWRpdE1vZGFsPSEwKX0pLHF0KDEsImNsci1pY29uIiw5MSksbWUo'@;
put 'Miwic3BhbiIpLE5lKDMsIkVkaXQiKSx5ZSgpKCl9fWZ1bmN0aW9uIEhVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImJ1dHRvbiIsMTAwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmRpc2NhcmRTb3VyY2VGaWxlPSEwKX0pLHF0'@;
put 'KDIsImNsci1pY29uIiw5NiksbWUoMywic3BhbiIpLE5lKDQsIkRpc2NhcmQgZmlsZSIpLHllKCkoKSxKZSg1LEZVZSw0LDAsImJ1dHRvbiIsMTAxKSxtZSg2LCJidXR0b24iLDEwMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5zdWJtaXRFeGNlbCgpKX0p'@;
put 'LHF0KDcsImNsci1pY29uIiw5OSksTmUoOCwiIFN1Ym1pdCAiKSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLFJlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5KSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsYS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gTlVlKGMsbCl7'@;
put 'aWYoMSZjJiYobWUoMCwiZGl2Iiw4NyksSmUoMSxMVWUsMTAsMSwibmctY29udGFpbmVyIiwzNSksSmUoMixQVWUsMTMsMywibmctY29udGFpbmVyIiwzNSksSmUoMyxIVWUsOSwyLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5o'@;
put 'b3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksQ2UoMSksUmUoIm5nSWYiLCFhLmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxDZSgxKSxSZSgibmdJZiIsYS51cGxvYWRQcmV2aWV3KX19ZnVuY3Rpb24gVlVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiwx'@;
put 'MDQpKDEsInNwYW4iKSxOZSgyLCJGSUxURVIgOiAiKSxtZSgzLCJiIiksTmUoNCkseWUoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLG9yKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gQlVlKGMsbCl7MSZjJiYoVnIoMCksbWUoMSwic3BhbiIsMTA3KSxOZSgyLCIgTG9hZGluZy4uLiAi'@;
put 'KSx5ZSgpLG1lKDMsImRpdiIpKDQsImgzIiksTmUoNSwiTG9hZGluZyB0YWJsZSIpLHllKCkoKSx6cigpKX1mdW5jdGlvbiBqVWUoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJzcGFuIikscXQoMiwiY2xyLWljb24iLDEwOCkseWUoKSxtZSgzLCJkaXYiKSg0LCJoMyIpLE5lKDUsIkxvYWRpbmcg'@;
put 'dGFibGUgZXJyb3IiKSx5ZSgpKCksenIoKSl9ZnVuY3Rpb24gelVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDUpKDEsImRpdiIsMTA2KSxKZSgyLEJVZSw2LDAsIm5nLWNvbnRhaW5lciIsMzUpLEplKDMsalVlLDYsMCwibmctY29udGFpbmVyIiwzNSkseWUoKSgpKSwyJmMpe2NvbnN0'@;
put 'IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsIWEuZ2V0ZGF0YUVycm9yKSxDZSgxKSxSZSgibmdJZiIsYS5nZXRkYXRhRXJyb3IpfX1mdW5jdGlvbiBVVWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLHpjKCJUbyB1bmxvY2sg'@;
put 'bW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBa'@;
put 'VWUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTEpLEplKDEsVVVlLDIsMiwic3BhbiIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBZVWUoYyxsKXtp'@;
put 'ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTA5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkp'@;
put 'fSkscXQoMiwiY2xyLWljb24iLDk4KSxOZSgzLCIgQWRkIFJlY29yZCAiKSx5ZSgpLEplKDQsWlVlLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTEwKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJp'@;
put 'Y3RBZGRSb3cpfX1mdW5jdGlvbiBXVWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwxMTIpLE5lKDEpLHF0KDIsImNvbnRhY3QtbGluayIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGdyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jf'@;
put 'cm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gR1VlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTI0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksemMoIk9ubHkgIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwi'@;
put 'ICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PyJyb3ciOiJyb3dzIiwiIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gJFVlKGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxMjUpKDEsImRpdiIsMTI2KSgyLCJsYWJlbCIsMTI3KSxOZSgzLCJNZXNzYWdlIikseWUoKSxtZSg0LCJ0ZXh0YXJlYSIsMTI4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm1lc3NhZ2U9'@;
put 'aCl9KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNCksUmUoIm5nTW9kZWwiLGEubWVzc2FnZSkoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSkoInZhbHVlIixhLnZhbGlkYXRpb25Eb25lPyIiOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSB2YWxpZGF0ZSAiK2EuY29scy5s'@;
put 'ZW5ndGgqYS5tb2RpZmVkUm93c0luZGV4ZXMubGVuZ3RoKyIgY2VsbHMuIil9fWZ1bmN0aW9uIHFVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTEzKSgxLCJkaXYiLDExNCkoMiwiZGl2IiwxMTUpKDMsImRpdiIsMTE2KSg0LCJidXR0b24iLDExNykscXQoNSwiY2xy'@;
put 'LWljb24iLDExOCkseWUoKSxtZSg2LCJoMyIsMiksTmUoNykseWUoKSgpLG1lKDgsImRpdiIsMyksSmUoOSxHVWUsMiwyLCJzcGFuIiwxMTkpLEplKDEwLCRVZSw1LDMsImRpdiIsMTIwKSx5ZSgpLG1lKDExLCJkaXYiLDEyMSkoMTIsImJ1dHRvbiIsMTIyKSx4dCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnNhdmVUYWJsZShoLmhvdFRhYmxlLmRhdGEpKX0pLE5lKDEzLCIgU3VibWl0ICIpLHllKCksbWUoMTQsImJ1dHRvbiIsMTIzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBoLmNhbmNlbFN1'@;
put 'Ym1pdCgpLGguc3VibWl0PSExLGp0KGgudmFsaWRhdGlvbkRvbmU9MCl9KSxOZSgxNSwiIENhbmNlbCAiKSx5ZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNyksYjAoIiBTdWJtaXQgZm9yIEFwcHJvdmFsICgiLGEucm93c0NoYW5nZWQucm93c0FkZGVkLCIgYWRkZWQsICIs'@;
put 'YS5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCwiIHVwZGF0ZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCwiIGRlbGV0ZWQpICIpLENlKDIpLFJlKCJuZ0lmIixhLnRvdGFsUm93c0NoYW5nZWQ+YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQmJmEubGljZW5jZVN0'@;
put 'YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09YS5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVUcnVlKSxDZSgyKSxSZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKX19ZnVuY3Rpb24gS1VlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTI5KSxOZSgxKSxiYSgy'@;
put 'LCJwa1NwYWNlU2VwYXJhdGUiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLHpjKCIgT24gcm93ICIsYSsxLCI6ICIsWmwoMiwyLGQucGtGaWVsZHNbYV0ucmVwbGFjZSgifCIsIiIpKSwiICIpfX1mdW5jdGlvbiBYVWUoYyxsKXtpZigxJmMmJihtZSgwLCJw'@;
put 'IiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGIwKCIgIixhLmNvbCwiKCIsYS5sZW4sIiksICIsYS52YWwsIiAiKX19ZnVuY3Rpb24gSlVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxMzApKDEsImRpdiIsMTMxKSgyLCJkaXYiLDEx'@;
put 'NSkoMywiZGl2IiwxMTYpKDQsImJ1dHRvbiIsMTE3KSxxdCg1LCJjbHItaWNvbiIsMTE4KSx5ZSgpLG1lKDYsImgzIiwyKSxOZSg3LCJFcnJvciIpLHllKCkoKSxtZSg4LCJkaXYiLDMpKDksInAiKSxOZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLHllKCkoKSxtZSgx'@;
put 'MSwiZGl2IiwxNykoMTIsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5udWxsVmFyaWFibGVzPSExKX0pLE5lKDEzLCIgT2sgIikseWUoKSgpKCkoKSgpfX1mdW5jdGlvbiBRVWUoYyxsKXsxJmMmJnF0KDAsImFwcC1xdWVyeSIsbnVsbCwx'@;
put 'MzIpfWZ1bmN0aW9uIGVaZShjLGwpezEmYyYmKG1lKDAsInAiLDEzMyksTmUoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4gIikseWUoKSl9Y29uc3QgdFplPWZ1bmN0aW9uKGMsbCl7cmV0dXJue2xpYk5hbWU6Yyx0YWJsZU5hbWU6bH19LElzZT1mdW5jdGlvbigpe3Jl'@;
put 'dHVyblsiIiwiICJdfSxuWmU9ZnVuY3Rpb24oYyl7cmV0dXJue2hlYWRlckJhckZpbHRlcjpjfX0sTHNlPUYoNTMpLFJzZT1GKDM5MDA3KS5CdWZmZXI7bGV0IEpBPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxwZSx3ZSl7dGhpcy5saWNlbmNlU2VydmljZT1h'@;
put 'LHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLmhlbHBlclNlcnZpY2U9Xyx0aGlzLnJvdXRlcj1ULHRoaXMucm91dGU9Vyx0aGlzLnNhc1NlcnZpY2U9aWUsdGhpcy5jZGY9cGUsdGhpcy5ob3RSZWdpc3RlcmVyPXdl'@;
put 'LHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3Q9bmV3IGVoLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgZWgsdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0PW5ldyBlaCx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PW5ldyBlaCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy4kZGF0YUZvcm1h'@;
put 'dHM9bnVsbCx0aGlzLmNvbHM9W10sdGhpcy5yZXN0cmljdGlvbnM9e30sdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10s'@;
put 'aGlkZGVuOiEwLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtaW5TcGFyZVJvd3M6MSxsaWNlbnNlS2V5OnZvaWQgMCxyZWFkT25seTohMCxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sc2V0dGluZ3M6e2NvbnRleHRNZW51OntpdGVt'@;
put 'czp7ZWRpdF9yb3c6e25hbWU6IkVkaXQgcm93IixoaWRkZW4oKXtjb25zdCBpdD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtpZighaXQpcmV0dXJuITE7Y29uc3QgZXQ9aXRbMF07cmV0dXJuIGV0LmZyb20ucm93IT09ZXQudG8ucm93fSxjYWxsYmFjazooWmUsaXQsZXQpPT57bGV0IHl0PWl0'@;
put 'WzBdO3l0LnN0YXJ0LnJvdz09PXl0LmVuZC5yb3cmJnRoaXMuZWRpdFJlY29yZChudWxsLHl0LnN0YXJ0LnJvdyl9fSxyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifSxyZW1vdmVfcm93OntuYW1lOiJJZ25vcmUg'@;
put 'cm93In0sY29weTp7bmFtZToiQ29weSB3aXRob3V0IGhlYWRlcnMifSxjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e25hbWU6IkNvcHkgd2l0aCBoZWFkZXJzIn0sY29weV9jb2x1bW5faGVhZGVyc19vbmx5OntuYW1lOiJDb3B5IGhlYWRlcnMgb25seSJ9LHNwMTp7bmFtZToiLS0tLS0tLS0t'@;
put 'In0sdW5kbzp7bmFtZToiVW5kbyJ9LHJlZG86e25hbWU6IlJlZG8ifX19fX0sdGhpcy5ob3RDZWxsc1Byb3BSb3c9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOjAscm93'@;
put 'c0RlbGV0ZWQ6MCxyb3dzQWRkZWQ6MH0sdGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5xdWVyeUVycj0hMSx0aGlzLnN1Y2Nlc3NFbmFibGU9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMucGtGaWVsZHM9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90'@;
put 'aWNlPSExLHRoaXMuYmFkRWRpdD0hMSx0aGlzLnNhdmVMb2FkaW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBrTnVsbD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMudGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMucXVlcnlUZXh0'@;
put 'U2F2ZWQ9IiIsdGhpcy5zaG93QXBwcm92ZXJzPSExLHRoaXMucGtEdXBzPSExLHRoaXMudmFsaWRhdGlvbkRvbmU9MCx0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSx0aGlzLmNvbHVtbkhlYWRlcj1bXSx0aGlzLnNwZWNJbmZvPVtdLHRoaXMudG9vTG9uZz0hMSx0aGlzLmV4Y2VlZENlbGxz'@;
put 'PVtdLHRoaXMudXBsb2FkZXI9bmV3IFJvZSx0aGlzLnVwbG9hZFVybD0iIix0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGwsdGhpcy5kYXRhPVtdLHRoaXMuaGVhZGVy'@;
put 'QXJyYXk9W10sdGhpcy5ob3REYXRhU2NoZW1hPXt9LHRoaXMuaGVhZGVyU2hvdz1bXSx0aGlzLmhlYWRlclZpc2libGU9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuaGFzQW5vdGhlckRyb3Bab25lT3Zlcj0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNvbHVtbkxldmVs'@;
put 'U2VjdXJpdHlGbGFnPSExLHRoaXMuZGF0ZVRpbWVIZWFkZXJzPVtdLHRoaXMudGltZUhlYWRlcnM9W10sdGhpcy5kYXRlSGVhZGVycz1bXSx0aGlzLnhsUnVsZXM9W10sdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMuaGVhZGVyQ29sdW1ucz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRo'@;
put 'aXMuZmlsZVBhc3N3b3JkU3ViamVjdD1uZXcgYmUsdGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmRpc2NhcmRTb3VyY2VGaWxlPSExLHRoaXMubWFudWFsRmlsZUVkaXRNb2RhbD0hMSx0aGlzLnJl'@;
put 'Y29yZEFjdGlvbj1udWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRS'@;
put 'ZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLnNpbmdsZVJvd1NlbGVjdGVkPSExLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMuZ2V0ZGF0YUVycm9yPSExLHRoaXMu'@;
put 'emVyb0ZpbHRlclJvd3M9ITEsdGhpcy50YWJsZUZpbGVEcmFnT3Zlcj0hMSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQ9MjAsdGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRVhUUkFfQ09MX05B'@;
put 'TUU6MSxESVNQTEFZX1ZBTFVFOjIsRElTUExBWV9UWVBFOjMsUkFXX1ZBTFVFX05VTTo0LFJBV19WQUxVRV9DSEFSOjUsRk9SQ0VfRkxBRzo2fSx0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRElTUExBWV9WQUxVRToxLFJBV19WQUxVRToyfSx0aGlzLmRpc2Fi'@;
put 'bGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXA9W10sdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy50aW1lc0NsaWNrZWQ9MCxaelt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSYmVEllKCkucmVnaXN0ZXJMYW5ndWFnZShaelt3'@;
put 'aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSksdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBBZyx0aGlzLnBhcnNlUmVzdHJpY3Rpb25zKCksdGhpcy5zZXRSZXN0cmljdGlvbnMoKX1wYXJzZVJlc3RyaWN0aW9ucygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhp'@;
put 'cy5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3Rh'@;
put 'dGUudmFsdWUuZmlsZVVwbG9hZH1zZXRSZXN0cmljdGlvbnMoYSl7YSYmKHRoaXMucmVzdHJpY3Rpb25zPXsuLi50aGlzLnJlc3RyaWN0aW9ucywuLi5hfSksdGhpcy5yZXN0cmljdGlvbnMucmVtb3ZlRWRpdFJlY29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5j'@;
put 'b250ZXh0TWVudSkuaXRlbXMuZWRpdF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cmJihkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYWJvdmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVu'@;
put 'dSkuaXRlbXMucm93X2JlbG93LGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJlbW92ZV9yb3cpfWNoZWNrUm93TGltaXQoKXt0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19h'@;
put 'bGxvd2VkIT09MS8wJiYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRhU291cmNlPy5sZW5ndGg+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0'@;
put 'aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5M'@;
put 'ZXZlbFNlY3VyaXR5RmxhZz90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1hdGlvbiIsIlVwbG9hZCBmZWF0dXJlIGlzIGRpc2FibGVkIHdoaWxlIENvbHVtbiBMZXZlbCBTZWN1cml0eSBydWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5z'@;
put 'aG93VXBsb2FkTW9kYWw9ITApfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX11cGRhdGVfc2hlZXRfcmFuZ2UoYSl7dmFyIGQ9e3M6e3I6MS8wLGM6MS8wfSxlOntyOjAsYzowfX07T2JqZWN0LmtleXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGgpe3JldHVybiIhIiE9'@;
put 'aC5jaGFyQXQoMCl9KS5tYXAoRGwudXRpbHMuZGVjb2RlX2NlbGwpLmZvckVhY2goZnVuY3Rpb24oaCl7ZC5zLmM9TWF0aC5taW4oZC5zLmMsaC5jKSxkLnMucj1NYXRoLm1pbihkLnMucixoLnIpLGQuZS5jPU1hdGgubWF4KGQuZS5jLGguYyksZC5lLnI9TWF0aC5tYXgoZC5lLnIsaC5yKX0p'@;
put 'LGFbIiFyZWYiXT1EbC51dGlscy5lbmNvZGVfcmFuZ2UoZCl9Z2V0UmFuZ2VBbmRTaGVldChhKXtsZXQgZD0wLGg9MCxmPS0xLF89LTEsVD0iIixXPSExLGllPVtdLHdlPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi50aGlzLmhlYWRlckFycmF5XS5tYXAoaXQ9Pml0LnRv'@;
put 'TG93ZXJDYXNlKCkpLEVlPXdlLnJlZHVjZSgoaXQsZXQpPT4oaXRbZXRdPS0xLGl0KSx7fSk7cmV0dXJuIGEuU2hlZXROYW1lcy5mb3JFYWNoKGl0PT57aWYoVylyZXR1cm47aWU9W10sVD1pdDtjb25zdCBldD1hLlNoZWV0c1tUXTtpZih0aGlzLmRhdGE9RGwudXRpbHMuc2hlZXRfdG9fanNv'@;
put 'bihldCx7aGVhZGVyOjEsYmxhbmtyb3dzOiExLGRlZnZhbDoiIn0pLHRoaXMuZGF0YS5sZW5ndGg8PTEpcmV0dXJuO2xldCB5dD1bXTt0aGlzLmhlYWRlckFycmF5LmZvckVhY2goKCk9Pnl0LnB1c2goIiIpKSx0aGlzLmRhdGEucHVzaCh5dCk7bGV0IEV0PSExO2lmKHRoaXMuZGF0YS5mb3JF'@;
put 'YWNoKChTdCxKdCk9PntpZighVylpZihFdCl7bGV0IG5uPSEwLHZuPSExO3dlLmZvckVhY2goTm49Pntjb25zdCBjcj1FZVtObl07IiIhPT1TdFtjcl0mJnZvaWQgMCE9PVN0W2NyXT9ubj0hMTotMSE9PXRoaXMuaGVhZGVyUGtzLmluZGV4T2YoTm4udG9VcHBlckNhc2UoKSkmJih2bj0hMCl9'@;
put 'KSxubnx8dm4/KF89SnQsVz0hMCk6LTE9PT1mJiYoZj1KdCl9ZWxzZXtjb25zdCBubj1TdC5tYXAoTm49Pk5uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7aWYoIW5uLmluY2x1ZGVzKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18iKSl7Y29uc3QgTm49d2UuaW5kZXhPZigiX19f'@;
put 'X19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fIik7Tm4+LTEmJndlLnNwbGljZShObiwxKX1FdD0hMCx3ZS5mb3JFYWNoKE5uPT57LTE9PT1ubi5pbmRleE9mKE5uKSYmKEV0PSExKX0pO2xldCB2bj1bXTt2bj10aGlzLmZpbmRWYWxpZEhlYWRlcnMobm4sd2UsSnQsVCksITE9PT12blswXT8o'@;
put 'RXQ9ITEsdm5bMV0ubGVuZ3RoPjAmJnZuWzFdLmZvckVhY2goTm49PntpZS5wdXNoKE5uKX0pKTpFZT12blsxXX19KSxXJiYodGhpcy51cGRhdGVfc2hlZXRfcmFuZ2UoZXQpLGV0WyIhcmVmIl0pKXtjb25zdCBKdD1EbC51dGlscy5kZWNvZGVfcmFuZ2UoZXRbIiFyZWYiXXx8IiIpO2Q9SnQu'@;
put 'cy5yLGg9SnQucy5jfX0pLC0xPT09ZiYmKFc9ITEpLHtmb3VuZERhdGE6VyxzaGVldE5hbWU6VCxzdGFydFJvdzpmLGVuZFJvdzpfLGNzdkFycmF5SGVhZGVyc01hcDpFZSxtaXNzaW5nSGVhZGVyczppZSxyYW5nZVN0YXJ0Um93OmQscmFuZ2VTdGFydENvbDpofX1wcm9tcHRFeGNlbFBhc3N3'@;
put 'b3JkKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMCxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZmlsZVBhc3N3b3JkSW5wdXQiKTtoJiYoaC5mb2N1cygpLGgudmFsdWU9IiIpfSwxMDApLHRoaXMu'@;
put 'ZmlsZVBhc3N3b3JkU3ViamVjdC5zdWJzY3JpYmUoaD0+e3RoaXMuZmlsZVVubG9ja0Vycm9yPSExLGEoaHx8dm9pZCAwKX0pfSl9Z2V0RmlsZURlc2MoYSxkPSExKXt2YXIgaD10aGlzO2xldCBmO3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iTG9hZGluZyIsdGhpcy5leGNlbEZpbGVQYXJzaW5n'@;
put 'PSEwLGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy5maWxlbmFtZT0iIjtsZXQgXz1mLm5hbWU7dGhpcy5maWxlbmFtZT1fLHRoaXMuYXBwZW5kVXBsb2FkU3RhdGUoYExvYWRpbmcgJHtffSBpbnRvIHRoZSBicm93c2VyYCk7bGV0IFc9Xy5z'@;
put 'bGljZShfLmxhc3RJbmRleE9mKCIuIikrMSxfLmxhc3RJbmRleE9mKCIuIikrNCk7aWYoInhscyI9PT1XLnRvTG93ZXJDYXNlKCkpe2xldCBpZT1uZXcgRmlsZVJlYWRlcjtpZS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgd2U9ZmkoZnVuY3Rpb24qKEVlKXtjb25zdCBaZT1oLnRvQnN0cihFZS50'@;
put 'YXJnZXQucmVzdWx0KTtsZXQgaXQsZXQ9ITE7Y29uc3QgeXQ9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7aXQ9RGwucmVhZChaZSx7Li4ueXR9KX1jYXRjaChJcil7aWYoSXIubWVzc2Fn'@;
put 'ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKWZvcihldD0hMDtldDspe2NvbnN0IEVpPXlpZWxkIGgucHJvbXB0RXhjZWxQYXNzd29yZCgpO2lmKEVpKXRyeXtpdD1EbC5yZWFkKFplLHsuLi55dCxwYXNzd29yZDpFaX0pLGV0PSExLGguZmlsZVVubG9ja0Vycm9yPSExfWNh'@;
put 'dGNoKElpKXtoLmZpbGVVbmxvY2tFcnJvcj0hMCxJaS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChldD0hMSl9ZWxzZSBldD0hMX1lbHNlIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsSXIsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUi'@;
put 'KX1pZighaXQpcmV0dXJuIGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkKGguc2hvd1VwbG9hZE1vZGFsPSExKTtsZXQgRXQ9ITEsU3Q9W107Y29uc3QgSnQ9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmguaGVhZGVyQXJyYXldO2xldCBubj1KdC5tYXAoSXI9PklyLnRv'@;
put 'TG93ZXJDYXNlKCkpLHZuPW5uLnJlZHVjZSgoSXIsRWkpPT4oSXJbRWldPS0xLElyKSx7fSksTm49W107Y29uc3QgY3I9aC5nZXRSYW5nZUFuZFNoZWV0KGl0KTtpZihTdD1jci5taXNzaW5nSGVhZGVycyxjci5mb3VuZERhdGEpe0V0PSEwLHZuPWNyLmNzdkFycmF5SGVhZGVyc01hcDtjb25z'@;
put 'dCBJcj1pdC5TaGVldHNbY3Iuc2hlZXROYW1lXTtoLmFwcGVuZFVwbG9hZFN0YXRlKGBUYWJsZSBmb3VuZCBvbiBzaGVldCAke2NyLnNoZWV0TmFtZX0gb24gcm93ICR7Y3Iuc3RhcnRSb3d9YCk7bGV0IEVpPSIiLElpPSIiO2ZvcihsZXQgZnI9Y3Iuc3RhcnRSb3c7ZnI8Y3IuZW5kUm93Oysr'@;
put 'ZnIpe2NvbnN0IGlpPVtdO25uLmZvckVhY2goT249Pntjb25zdCBRbj1EbC51dGlscy5lbmNvZGVfY2VsbCh7cjpjci5yYW5nZVN0YXJ0Um93K2ZyLGM6Y3IucmFuZ2VTdGFydENvbCt2bltPbl19KTtsZXQgTXI7IiI9PT1FaSYmKEVpPVFuKSxJaT1RbixNcj1JcltRbl0/SXJbUW5dOnt2OiIi'@;
put 'fSxpaS5wdXNoKE1yKX0pLGlpLmZpbmQoT249PiIiIT09T24udikmJk5uLnB1c2goaWkpfWguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlRhYmxlIEZvdW5kIixgU2hlZXQ6ICR7Y3Iuc2hlZXROYW1lfVxuUmFuZ2U6ICR7RWl9OiR7SWl9YCl9ZWxzZSBTdD1jci5taXNzaW5nSGVhZGVy'@;
put 'cztpZihTdC5sZW5ndGg+MCl7U3Quc29ydChmdW5jdGlvbihJaSxmcil7cmV0dXJuIElpWzFdPT09ZnJbMV0/MDpJaVsxXT5mclsxXT8tMToxfSk7bGV0IElyPVN0Lm1hcChFaT0+RWlbMF0pLnNsaWNlKDAsNSkuam9pbigiXG4iKTtyZXR1cm4gaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9k'@;
put 'YWwobnVsbCxJciksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfWlmKDA9PT1Obi5sZW5ndGh8fDA9PT1OblswXS5sZW5ndGgpcmV0dXJuIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFs'@;
put 'KG51bGwsIk5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIiksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2lmKChoLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MHx8aC5kYXRlSGVh'@;
put 'ZGVycy5sZW5ndGg+MHx8aC50aW1lSGVhZGVycy5sZW5ndGg+MCkmJihObj1oLnVwZGF0ZURhdGVUaW1lQ29scyhKdCxObikpLGgueGxSdWxlcy5sZW5ndGg+MCYmKE5uPWgudXBkYXRlWExSdWxlQ29scyhKdCxObikpLCFFdCl7aWYoMD09PVN0Lmxlbmd0aCloLmV2ZW50U2VydmljZS5zaG93'@;
put 'QWJvcnRNb2RhbChudWxsLCJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISIpLHNldFRpbWVvdXQoKCk9PntoLmZpbGVuYW1lPSIifSk7ZWxzZXtTdC5zb3J0KGZ1bmN0aW9uKElpLGZyKXtyZXR1cm4gSWlbMV09PT1mclsxXT8wOklpWzFdPmZyWzFdPy0xOjF9KTtsZXQgSXI9U3Qu'@;
put 'bWFwKEVpPT5FaVswXSkuc2xpY2UoMCw1KS5qb2luKCJcbiIpO2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsSXIpfXJldHVybiBoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfXtoLmhlYWRlclNob3c9SnQsTm49Tm4ubWFwKGZyPT5m'@;
put 'ci5tYXAoaWk9PiJuIj09PWlpLnQ/aWkudjppaS53KSksTm49Tm4ubWFwKGZyPT5mci5tYXAoKGlpLGpyKT0+eyFpaSYmMCE9PWlpJiYoaWk9IiIpO2NvbnN0IE9uPWguaGVhZGVyU2hvd1tqcl07cmV0dXJuIm51bWVyaWMiPT09aC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShPbik/LnR5cGUmJigw'@;
put 'LHQzLmlzU3BlY2lhbE1pc3NpbmcpKGlpKSYmIWlpLmluY2x1ZGVzKCIuIikmJihpaT0iLiIraWkpLGlpfSkpLGguZGF0YT1Objtjb25zdCBJcj1Obi5zbGljZSgwLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtsZXQgRWk9RGwudXRpbHMuanNvbl90b19zaGVldChJ'@;
put 'cix7c2tpcEhlYWRlcjohMH0pLElpPURsLnV0aWxzLnNoZWV0X3RvX2NzdihFaSk7aWYoSWk9SnQuam9pbigiLCIpKyJcbiIrSWksIldMQVRJTjEiPT09aC5lbmNvZGluZyl7bGV0IGZyPUxzZS5kZWNvZGUoUnNlLmZyb20oSWkpLCJDUC0xMjUyIiksaWk9bmV3IEJsb2IoW2ZyXSx7dHlwZToi'@;
put 'YXBwbGljYXRpb24vY3N2In0pLGpyPWguYmxvYlRvRmlsZShpaSxoLmZpbGVuYW1lKyIuY3N2Iik7aC51cGxvYWRlci5hZGRUb1F1ZXVlKFtqcl0pfWVsc2V7bGV0IGZyPW5ldyBCbG9iKFtJaV0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxpaT1oLmJsb2JUb0ZpbGUoZnIsaC5maWxlbmFt'@;
put 'ZSsiLmNzdiIpO2gudXBsb2FkZXIuYWRkVG9RdWV1ZShbaWldKX1oLmV4Y2VsRmlsZVJlYWR5PSEwfWlmKDA9PT1oLmRhdGEubGVuZ3RoKXJldHVybiBoLnNob3dVcGxvYWRNb2RhbD0hMSxoLnVwbG9hZFByZXZpZXc9ITEsaC5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgaC5ldmVudFNlcnZp'@;
put 'Y2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiVGFibGUgaW4gdGhlIGZpbGUgaXMgZW1wdHkuIERhdGEgZm91bmQgb24gc2hlZXQ6ICIpO2guZXhjZWxGaWxlUmVhZHk9ITAsaC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl9KTtyZXR1cm4gZnVuY3Rpb24oRWUpe3JldHVybiB3ZS5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyl9fSgpLGllLnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2UgaWYoImNzdiI9PT1XLnRvTG93ZXJDYXNlKCkpe2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09MS8wKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJO'@;
put 'b3RpY2UiLCJFeGNlbCBmaWxlcyBvbmx5LiBUbyB1bmxvY2sgQ1NWIHVwbG9hZHMsIHBsZWFzZSBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIHRoaXMudXBsb2FkZXIucXVldWUu'@;
put 'cG9wKCk7aWYoIldMQVRJTjEiPT09dGhpcy5lbmNvZGluZyl7bGV0IGllPW5ldyBGaWxlUmVhZGVyO2llLm9ubG9hZD13ZT0+e2xldCBFZT1Mc2UuZGVjb2RlKFJzZS5mcm9tKHdlLnRhcmdldC5yZXN1bHQpLCJDUC0xMjUyIiksWmU9bmV3IEJsb2IoW0VlXSx7dHlwZTpXfSksaXQ9dGhpcy5i'@;
put 'bG9iVG9GaWxlKFplLHRoaXMuZmlsZW5hbWUpO3RoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy51cGxvYWRlci5hZGRUb1F1ZXVlKFtpdF0pLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITB9LHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLGllLnJlYWRB'@;
put 'c0FycmF5QnVmZmVyKGYpLHRoaXMuZ2V0RmlsZSgpfWVsc2UgdGhpcy5leGNlbEZpbGVSZWFkeT0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5nZXRGaWxlKCl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+'@;
put 'Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBjc3Ygb3IgZXhjZWwgZmlsZS4nKSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUu'@;
put 'dmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5nZXRGaWxlKCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMH1nZXRGaWxlKCl7aWYodGhpcy5jaGVja0ludmFsaWQoKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJJbnZhbGlkIHZh'@;
put 'bHVlcyBhcmUgcHJlc2VudC4iKTtpZih0aGlzLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoKXJldHVybiB0aGlzLnBrRHVwcz0hMCx2b2lkKHRoaXMuc3VibWl0PSExKTt0aGlzLnBrRHVwcz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITA7'@;
put 'bGV0IGE9W107Zm9yKGNvbnN0IGQgb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6ZCxmaWxlTmFtZTpkLm5hbWV9KTt0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSh0aGlzLnVwbG9hZFVybCxhLHt0YWJsZTp0aGlzLmxpYmRzfSkudGhlbihkPT57aWYodHlwZW9mIGQuc2Fz'@;
put 'anNBYm9ydD4idSIpe2lmKHR5cGVvZiBkLnNhc3BhcmFtcz4idSIpcmV0dXJuO3t0aGlzLnVwbG9hZExvYWRpbmc9ITE7bGV0IGg9ZC5zYXNwYXJhbXNbMF07dGhpcy5zdWNjZXNzRW5hYmxlPSEwLHRoaXMudGFibGVJZD1oLkRTSUQsdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdl'@;
put 'LyIrdGhpcy50YWJsZUlkKX19ZWxzZXtjb25zdCBoPWQsZj1oLnNhc2pzQWJvcnRbMF0uTVNHLF89aC5zYXNqc0Fib3J0WzBdLk1BQzt0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBs'@;
put 'b2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLGYse1NZU1dBUk5JTkdURVhUOmguU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmguU1lTRVJST1JU'@;
put 'RVhULE1BQzpffSl9fSxkPT57dGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5l'@;
put 'dmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsZCl9KX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMu'@;
put 'dG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2xldCBhPVtdO3RoaXMuZGF0YS5tYXAoaD0+e2xldCBmPXt9O3RoaXMuaGVhZGVyU2hvdy5tYXAoKF8sVCk9PntmW19dPWhbVF19KSxmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGYuX19fX19ERUxFVEVfX1RISVNf'@;
put 'X1JFQ09SRF9fX19fPSJObyIpLGEucHVzaChmKX0pLHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5ob3RUYWJsZS5kYXRhPWE7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNl'@;
put 'O3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iVmFsaWRhdGluZy1IT1QiLGQudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLG1heFJvd3M6MS8wfSwhMSksZC5yZW5kZXIoKSx0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKCJWYWxpZGF0aW5nIHJvd3MiKSxkLnZhbGlkYXRlQ2VsbHMo'@;
put 'KCk9Pnt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsfSl9ZGlzY2FyZFBlbmRpbmdFeGNlbChhKXt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHttYXhS'@;
put 'b3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR9KSxhJiZ0aGlzLmNhbmNlbEVkaXQoKSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIi'@;
put 'KSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLGlzTmFOKHBhcnNlSW50KHRoaXMucm91dGVyLnVybC5zcGxpdCgiLyIpLnBvcCgpfHwiIikpfHx0aGlzLnF1ZXJ5VGV4dFNhdmVkLmxlbmd0aD4wJiYodGhpcy5xdWVy'@;
put 'eVRleHQ9dGhpcy5xdWVyeVRleHRTYXZlZCx0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiKX1wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpe3RoaXMuZGlzY2FyZFBlbmRpbmdFeGNlbCgpLHRoaXMuY29udmVydFRvQ29ycmVjdFR5cGVzKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5lZGl0VGFibGUoITAp'@;
put 'fWFwcGVuZFVwbG9hZFN0YXRlKGEsZD0hMSl7dGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QmJihkP3RoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QucmVwbGFjZUxhc3RTdGF0ZShhKTp0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0'@;
put 'LmZpcnN0LmFwcGVuZFN0YXRlKGEpKX1maW5kVmFsaWRIZWFkZXJzKGEsZCxoLGYpe2xldCBfPSExLFQ9W10sVz0wO2Zvcig7VzxhLmxlbmd0aDspe2lmKCFfJiYtMSE9PWQuaW5kZXhPZihhW1ddKSl7bGV0IGllLHBlPTAsd2U9MCxFZT0wLFplPVtdLGl0PSExO2ZvcihsZXQgRXQ9VztFdDxh'@;
put 'Lmxlbmd0aDtFdCsrKXtpZigiIj09PWFbRXRdfHwtMSE9PVplLmluZGV4T2YoYVtFdF0pJiZ0aGlzLmlzQ29sSGVhZGVyKGFbRXRdKSl7IiI9PT1hW0V0XSYmKGl0PSEwKSxpZT1FdDticmVha31aZS5wdXNoKGFbRXRdKX1sZXQgZXQ9W107dm9pZCAwIT09aWU/KGV0PWEuc2xpY2UoVyxpZSks'@;
put 'RWU9Vyx3ZT1pZSxpdD8ocGU9VyxXPWllKToocGU9VyxXPWllLTEpKTooZXQ9YS5zbGljZShXKSxwZT1XLEVlPVcsd2U9YS5sZW5ndGgsVz1hLmxlbmd0aCk7bGV0IHl0PSEwO2lmKGQuZm9yRWFjaChFdD0+ey0xPT09ZXQuaW5kZXhPZihFdCkmJih5dD0hMSl9KSx5dCl7Xz0hMDtsZXQgU3Q9'@;
put 'ZC5yZWR1Y2UoZnVuY3Rpb24obm4sdm4pe3JldHVybiBublt2bl09LTEsbm59LHt9KSxKdD1hLnNsaWNlKHBlLHdlKTtyZXR1cm4gZC5mb3JFYWNoKG5uPT57U3Rbbm5dPUp0LmluZGV4T2Yobm4pK3BlfSksWyEwLFN0XX17bGV0IEV0PSROZShldCxkKTtULnB1c2goWyI8Yj5UQUIoIitmKyIp'@;
put 'PC9iPiAtICIrRXRbMV0uam9pbigiLCIpKyIgKCBtaXNzaW5nICIrRXRbMF0uam9pbigiLCIpKyIgKSIsRXRbMV0ubGVuZ3RoXSl9fVcrK31yZXR1cm5bITEsVF19aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0'@;
put 'aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX11cGRhdGVEYXRl'@;
put 'VGltZUNvbHMoYSxkKXtpZih0aGlzLmRhdGVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLmRhdGVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBUPWZbX107'@;
put 'aWYoJHooVC52KSl7Y29uc3QgVz1XeihOdW1iZXIoVC52KSk7VC52PVcuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoVy5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrVy5nZXREYXRlKCkpLnNsaWNlKC0yKX1lbHNlIGlmKFQmJlQudiYmLTE9PT1ULnYudG9TdHJpbmcoKS5pbmRl'@;
put 'eE9mKCI6Iikpe2NvbnN0IFc9bmV3IERhdGUoVC52KTsiSW52YWxpZCBEYXRlIiE9PVcudG9VVENTdHJpbmcoKSYmKFQudj1ZeihXKSl9ZltfXT1UfSl9KX1pZih0aGlzLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLnRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09YS5p'@;
put 'bmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBUPWZbX107aWYoJHooVC52KXx8Rm9lKFQudil8fFQudi5pbmNsdWRlcygiRS0iKSl7Y29uc3QgVz1XeihOdW1iZXIoVC52KSk7VC52PVBvZShXKX1mW19dPVR9KX0pfWlm'@;
put 'KHRoaXMuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLmRhdGVUaW1lSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWEuaW5kZXhPZihmKSYmaC5wdXNoKGEuaW5kZXhPZihmKSl9KSxkLmZvckVhY2goZj0+e2guZm9yRWFjaChfPT57Y29uc3QgVD1mW19dO2lmKCR6KFQu'@;
put 'dil8fEZvZShULnYpKXtsZXQgVz1XeihOdW1iZXIoVC52KSk7VC52PVl6KFcpKyIgIitQb2UoVyl9ZWxzZXtpZigtMT09PVQudi5pbmRleE9mKCIgIikmJi0xIT09VC52LmluZGV4T2YoIjoiKSl7bGV0IGllPVQudi5zdWJzdHJpbmcoMCxULnYuaW5kZXhPZigiOiIpKTtpZT1pZSsiICIrVC52'@;
put 'LnN1YnN0cmluZyhULnYuaW5kZXhPZigiOiIpKzEpLFQudj1pZX1sZXQgVz1uZXcgRGF0ZShULnYpOyJJbnZhbGlkIERhdGUiIT09Vy50b1VUQ1N0cmluZygpJiYoVC52PVl6KFcpKyIgIisoYz0+e2xldCBsPSgiMCIrYy5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIw'@;
put 'IitjLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksbH0pKFcpKX1mW19dPVR9KX0pfXJldHVybiBkfXVwZGF0ZVhMUnVsZUNvbHMoYSxkKXtpZih0aGlzLnhsUnVsZXMubGVuZ3RoPjApe2NvbnN0IGg9W107dGhpcy54bFJ1bGVz'@;
put 'LmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYuWExfQ09MVU1OKSYmKGYuaW5kZXg9YS5pbmRleE9mKGYuWExfQ09MVU1OKSxoLnB1c2goZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2goXz0+e2NvbnN0IFQ9ZltfLmluZGV4XTsiRk9STVVMQSI9PT1fLlhMX1JVTEUmJiJmImluIFQm'@;
put 'JigibiI9PT1ULnQ/VC52PSI9IitULmY6VC53PSI9IitULmYpLGZbX109VH0pfSl9cmV0dXJuIGR9YmxvYlRvRmlsZShhLGQpe2NvbnN0IGg9YTtyZXR1cm4gaC5sYXN0TW9kaWZpZWREYXRlPW5ldyBEYXRlLGgubmFtZT1kLGh9dG9Cc3RyKGEpe2xldCBkPW5ldyBVaW50OEFycmF5KGEpLGg9'@;
put 'IiIsZj1kLmJ5dGVMZW5ndGg7Zm9yKGxldCBfPTA7XzxmO18rKyloKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGRbX10pO3JldHVybiBofXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2Yg'@;
put 'YS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7bGV0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuKCJob21lIj09PUduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290'@;
put 'UGFyYW0pJiYoR24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEduLmVkaXRvci5maWx0ZXIucXVlcnk9W10sR24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVz'@;
put 'ZXJ2ZSJ9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyl7Y29uc3QgVD1mW19dLmVsZW1lbnRzO2Q9VC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIG51bGw9PT1XLnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChUKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0h'@;
put 'MCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJkcyl7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKFQ9Pntjb25zdCBXPXtmaWx0'@;
put 'ZXJDbGF1c2VzOltdfTtULmVsZW1lbnRzLmZvckVhY2goaWU9PntXLmZpbHRlckNsYXVzZXMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGllKSl9KSxXLmNsYXVzZUxvZ2ljPVQuY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25l'@;
put 'KFcpKX0pO2NvbnN0IF89YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyxfKS50aGVuKFQ9PnthLnF1ZXJ5RmlsdGVyPXtpZDpULnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6VC5yZXN1'@;
put 'bHRbMF0uRklMVEVSX1RBQkxFfSxhLnJvdXRlci5uYXZpZ2F0ZShbIi8iXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PmEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2Eu'@;
put 'cXVlcnlGaWx0ZXIuaWRdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSksYS5maWx0ZXI9ITF9KS5jYXRjaChUPT57YS5zdWJtaXRMb2FkaW5nPSExfSl9fWNhdGNoKGYpe2EucXVlcnlFcnI9ITAsYS5zdWJtaXRMb2FkaW5nPSExLGEucXVlcnlFcnJNZXNzYWdlPWZ9fSkoKX1v'@;
put 'cGVuUWIoKXt0aGlzLmxpYmRzJiYodGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYmRzLHRoaXMuY29scykpfWVkaXRUYWJsZShhLGQpe3RoaXMu'@;
put 'dG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITApO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtsZXQgZj1oLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksXz1mLmdldFNvcnRDb25maWcoKSxUPUFycmF5LmlzQXJyYXkoXyk/XzpbX107c2V0VGltZW91dCgoKT0+e2F8fCh0'@;
put 'aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLGQmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3AoKSksdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNl'@;
put 'LGgudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHl9LCExKSxoLnJlbmRlcigpO2ZvcihsZXQgVyBvZiBUKWYuc29ydChXKTt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0sMCl9Y29udmVydFRvQ29ycmVjdFR5cGVzKGEpe2ZvcihsZXQgZCBv'@;
put 'ZiBhKWZvcihsZXQgaCBpbiBkKXtsZXQgZj10aGlzLmNvbHMuZmluZChfPT5fLk5BTUU9PT1oKTtmJiYiIiE9PWRbaF0mJiJudW0iPT09Zi5UWVBFJiYhZi5ERFRZUEUuaW5jbHVkZXMoIlRJTUUiKSYmIWYuRERUWVBFLmluY2x1ZGVzKCJEQVRFIikmJihkW2hdPXBhcnNlSW50KGRbaF0pKX19'@;
put 'Y2FuY2VsRWRpdCgpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W107Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2xldCBkPWEuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxoPWQuZ2V0U29ydENvbmZpZygp'@;
put 'LGY9QXJyYXkuaXNBcnJheShoKT9oOltoXTt0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLHRoaXMu'@;
put 'aG90VGFibGUucmVhZE9ubHk9ITAsYS51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKTtmb3IobGV0IF8gb2YgZilkLnNvcnQoXyk7dGhp'@;
put 'cy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0NsaWNrZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVz'@;
put 'Q2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJzVG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRkUm93KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhp'@;
put 'cy5ob3RJbnN0YW5jZTtsZXQgZD10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2EuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGQsMSksYS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnNlbGVjdENlbGwodGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLDApLGEucmVu'@;
put 'ZGVyKCksdGhpcy5kYXRhU291cmNlW2RdJiYodGhpcy5kYXRhU291cmNlW2RdLm5vTGlua09wdGlvbj0hMCksdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9KX1jYW5jZWxTdWJtaXQoKXt0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQpLHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD1bXSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0'@;
put 'YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gMD09PWg/NjA6ZD41MDA/NTAwOmR9fSwhMSksYS5zZWxlY3RDZWxsKDAsMCksYS5yZW5kZXIoKSxhLnZhbGlk'@;
put 'YXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9Z2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpe3RoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmRlYnVnJiYodGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFT'@;
put 'b3VyY2UpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSk7bGV0IGE9MCxkPTAsaD0wO3RoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtdO2ZvcihsZXQgZj0wO2Y8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmKyspe2xl'@;
put 'dCBfPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2ZdKTtpZigiWWVzIj09PV8uX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fKXRoaXMuZGF0YU1vZGlmaWVkLnB1c2goXyksZCsrO2Vsc2V7bGV0IFQ9dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLmZp'@;
put 'bmQoVz0+e2ZvcihsZXQgaWUgb2YgdGhpcy5oZWFkZXJQa3MpaWYoV1tpZV0hPT1fW2llXSlyZXR1cm4hMTtyZXR1cm4hMH0pO1Q/SlNPTi5zdHJpbmdpZnkoXykhPT1KU09OLnN0cmluZ2lmeShUKSYmKHRoaXMuZGF0YU1vZGlmaWVkLnB1c2goXyksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMu'@;
put 'cHVzaChmKSxhKyspOih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKF8pLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goZiksaCsrKX19dGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6YSxyb3dzRGVsZXRlZDpkLHJvd3NBZGRlZDpofX12YWxpZGF0ZVByaW1hcnlLZXlzKCl7Y29uc3Qg'@;
put 'YT10aGlzLmhvdEluc3RhbmNlO2xldCBkPWEuZ2V0RGF0YSgpO3RoaXMucGtGaWVsZHM9W107Zm9yKGxldCBUPTA7VDxkLmxlbmd0aDtUKyspe2xldCBXPSIiO2ZvcihsZXQgaWU9MTtpZTx0aGlzLnJlYWRPbmx5RmllbGRzKzE7aWUrKylXPVcrInwiK2RbVF1baWVdO3RoaXMucGtGaWVsZHMu'@;
put 'cHVzaChXKX1sZXQgXyxoPVtdLGY9dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMucGtGaWVsZHMubGVuZ3RoO1QrKylmb3IobGV0IFc9MDtXPHRoaXMucGtGaWVsZHMubGVuZ3RoO1crKyl0aGlzLnBrRmllbGRzW1RdPT09dGhpcy5wa0ZpZWxkc1tXXSYmVyE9PVQm'@;
put 'JmgucHVzaChXKTtpZih0aGlzLnBrRmllbGRzLmxlbmd0aD5mKWZvcihsZXQgVD1mO1Q8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VCsrKWZvcihsZXQgVz1mO1c8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VysrKVQ8VyYmdGhpcy5wa0ZpZWxkc1tUXT09PXRoaXMucGtGaWVsZHNbV10mJmgucHVzaChX'@;
put 'KTtmb3IobGV0IFQ9MDtUPGgubGVuZ3RoO1QrKylmb3IobGV0IFc9MTtXPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtXKyspXz1hLmdldENlbGxNZXRhKGhbVF0sVyksXy52YWxpZD0hMSxfLmR1cEtleT0hMCxhLnJlbmRlcigpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5uZXcgU2V0KGgu'@;
put 'c29ydCgpKV19cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyhhPSExLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtmb3IobGV0IGYgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgXz1mLnZhbHVlcy5tYXAoVD0+VFt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19W'@;
put 'QUxVRV0pO2guYmF0Y2goKCk9Pntjb25zdCBUPWguZ2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wpLFc9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShULmRhdGF8fCIiKTtsZXQgaWU7VyYmKGllPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoVykpLGllfHwoaWU9W10pO2Nv'@;
put 'bnN0IHBlPVsuLi5uZXcgU2V0KFsuLi5pZSwuLi5fXSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3NvdXJjZTpwZX0pLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInNvdXJjZSIscGUpLGYudmFsdWVzLmxlbmd0aD4wJiYoaC5zZXRDZWxs'@;
put 'TWV0YShmLnJvdyxmLmNvbCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJlZGl0b3IiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzdHJpY3QiLGYuc3RyaWN0KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29s'@;
put 'LCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYuY29sLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZSIsc3RyaWN0OmYuc3RyaWN0LGZpbHRlcjohMX0pKSx0aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFs'@;
put 'aWRhdGlvblZhbHVlcyhmLHZvaWQgMCxhLGQpLGgucmVuZGVyKCl9KX19cmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGEsZCxoPSExLGYpe2lmKGEpe2R8fChkPWEucm93KTtjb25zdCBUPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhKTt0aGlzLnNldEV4dGVu'@;
put 'ZGVkVmFsdWVzVG9DZWxscyhhLGQsVCxoLGYpfWVsc2UgZm9yKGxldCBUIG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IFc9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKFQpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKFQsVC5yb3csVyxoLGYpfX1z'@;
put 'ZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLGgsZj0hMSxfKXtjb25zdCBUPXRoaXMuaG90SW5zdGFuY2U7bGV0IFc9W107Zm9yKGxldCBpZSBvZiBoKVcuaW5kZXhPZihpZS5FWFRSQV9DT0xfTkFNRSk8MCYmVy5wdXNoKGllLkVYVFJBX0NPTF9OQU1FKTtmb3IobGV0IGllIG9mIFcpe2Nv'@;
put 'bnN0IHBlPWguZmlsdGVyKFN0PT5TdC5FWFRSQV9DT0xfTkFNRT09PWllKTtsZXQgd2U9cGUubWFwKFN0PT4iQyI9PT1TdC5ESVNQTEFZX1RZUEU/U3QuUkFXX1ZBTFVFX0NIQVI6U3QuUkFXX1ZBTFVFX05VTSk7Y29uc3QgRWU9VC5wcm9wVG9Db2woaWUpO3RoaXMuZGlzYWJsZWRCYXNpY0R5'@;
put 'bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKFN0PT5TdC5yb3c9PT1kJiZTdC5jb2w9PT1FZSl8fHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5wdXNoKHtyb3c6ZCxjb2w6RWUsYWN0aXZlOiExfSksVC5zZXRDZWxsTWV0YShkLEVlLCJyZW5kZXJlciIsImF1'@;
put 'dG9jb21wbGV0ZSIpLFQuc2V0Q2VsbE1ldGEoZCxFZSwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlIiksVC5zZXRDZWxsTWV0YShkLEVlLCJzdHJpY3QiLGEuc3RyaWN0KSxULnNldENlbGxNZXRhKGQsRWUsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0'@;
put 'ZVJ1bGUoRWUse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlIixzdHJpY3Q6YS5zdHJpY3QsZmlsdGVyOiExfSk7Y29uc3QgaXQ9VC5nZXRDZWxsTWV0YShkLEVlKSxldD10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGl0LmRhdGF8fCIiKTtsZXQgeXQ7ZXQm'@;
put 'Jih5dD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKGV0KSkseXR8fCh5dD1bXSksIm51bWVyaWMiPT09ZXQ/LnR5cGU/KHl0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoeXQsIm51bWJlciIpLHdlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0'@;
put 'QXJyYXlWYWx1ZXMod2UsIm51bWJlciIpKTooeXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh5dCwic3RyaW5nIiksd2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh3ZSwic3RyaW5nIikpO2NvbnN0IEV0PVsuLi5uZXcgU2V0KFsuLi55dCwu'@;
put 'Li53ZV0pXTtpZihULnNldENlbGxNZXRhKGQsRWUsInNvdXJjZSIsRXQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoRWUse3NvdXJjZTpFdH0pLGYpe2lmKF8mJl8hPT1kKXJldHVybjtjb25zdCBTdD1wZS5maW5kKEp0PT4xPT09SnQuRk9SQ0VfRkxBRyk7'@;
put 'U3QmJnNldFRpbWVvdXQoKCk9PntULnNldERhdGFBdENlbGwoZCxFZSwiQyI9PT1TdC5ESVNQTEFZX1RZUEU/U3QuUkFXX1ZBTFVFX0NIQVI6U3QuUkFXX1ZBTFVFX05VTSwiZm9yY2VfY2VsbF92YWxpZGF0aW9uX3ZhbHVlIiksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PT09ZCYmKHRo'@;
put 'aXMuZGF0YVNvdXJjZVt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXhdW2llXT0iQyI9PT1TdC5ESVNQTEFZX1RZUEU/U3QuUkFXX1ZBTFVFX0NIQVI6U3QuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSxkKXtjb25zdCBmPXRoaXMuaG90SW5zdGFu'@;
put 'Y2UuZ2V0RGF0YUF0Q2VsbChkfHxhLnJvdyxhLmNvbCksXz0oYS52YWx1ZXMuZmluZChwZT0+cGVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdPT09Zil8fFtdKVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLkRJU1BMQVlfSU5ERVhdLFQ9YS5leHRlbmRlZF92YWx1ZXM/'@;
put 'LmZpbHRlcihwZT0+cGVbMF09PT1fKSxXPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzKSxpZT1bXTtmb3IobGV0IHBlIG9mIFR8fFtdKXtsZXQgd2U9e307Zm9yKGxldCBFZSBvZiBPYmplY3Qua2V5cyhXKSl3ZVtFZV09cGVb'@;
put 'V1tFZV1dO2llLnB1c2god2UpfXJldHVybiBpZX1jaGVja1NhdmUoKXtpZih0aGlzLmdldFJvd3NTdWJtaXR0aW5nQ291bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dz'@;
put 'RGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5nZXMgdG8gc3VibWl0Iix0aGlzLmJhZEVkaXRDYXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWluLiIsdm9pZCh0aGlzLmJhZEVkaXQ9ITApO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTt0'@;
put 'aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpO2ZvcihsZXQgaD0wO2g8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtoKyspZGVsZXRlIHRoaXMuZGF0YVNvdXJjZVtoXS5ub0xpbmtPcHRpb247YS51cGRhdGVTZXR0'@;
put 'aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGgsZil7cmV0dXJuIGg+NTAwPzUwMDpofX0sITEpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZh'@;
put 'bHVlcygpLGMuY250PTAsYy5ub25Qa0NudD0wO2xldCBkPWEuZ2V0RGF0YSgpO2lmKGQubGVuZ3RoPjEmJmEuaXNFbXB0eVJvdyhkLmxlbmd0aC0xKSYmYS5hbHRlcigicmVtb3ZlX3JvdyIsZC5sZW5ndGgtMSksdGhpcy52YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRl'@;
put 'UGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdGhpcy5zdWJtaXQ9ITEsdm9pZCB0aGlzLmNhbmNlbFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2'@;
put 'ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQoKCk9Pntkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184'@;
put 'IikuZm9jdXMoKX0pKX0pfXNhdmVUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihkLmhvdEluc3RhbmNlLmdldERhdGEoKSxhPShhPWEuZmlsdGVyKF89PiEhZC5kYXRhTW9kaWZpZWQuZmluZChXPT57Zm9yKGxldCBpZSBvZiBkLmhlYWRlclBrcylpZihXW2ll'@;
put 'XSE9PV9baWVdKXJldHVybiExO3JldHVybiEwfSkpKS5tYXAoXz0+e2xldCBUPV8uX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3JldHVybiBkZWxldGUgXy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sXy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189VCxPYmpl'@;
put 'Y3Qua2V5cyhfKS5tYXAoVz0+eyJudW1lcmljIj09PWQuZGNWYWxpZGF0b3I/LmdldFJ1bGUoVyk/LnR5cGUmJiIuIj09PV9bV10mJihfW1ddPW51bGwpfSksX30pLGQubG9nZ2VyU2VydmljZS5sb2coIkRhdGEgc3VibWl0dGVkIixhKSxkLmNoZWNrSW52YWxpZCgpKXJldHVybiBkLmV2ZW50'@;
put 'U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKSxkLmNhbmNlbFN1Ym1pdCgpLHZvaWQoZC5zdWJtaXQ9ITEpO2lmKGQudmFsaWRhdGlvbkRvbmU9MCxkLnNhdmVMb2FkaW5nPSEwLGMuY250PDEmJjA9PT1kLmR1cGxp'@;
put 'Y2F0ZVBrSW5kZXhlcy5sZW5ndGgmJmMubm9uUGtDbnQ8MSl7ZC5zYXZlTG9hZGluZz0hMCxkLmRpc2FibGVTdWJtaXQ9ITEsZC5zdWJtaXQ9ITA7bGV0IF89e0FDVElPTjoiTE9BRCJ9O2lmKGQubWVzc2FnZT1kLm1lc3NhZ2UucmVwbGFjZSgvXG4vZywiLiAiKSxfLk1FU1NBR0U9ZC5tZXNz'@;
put 'YWdlLF8uTElCRFM9ZC5saWJkcyxkLmNvbHMpe2NvbnN0IFQ9YS5zbGljZSgwLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShfLFQsIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRh'@;
put 'IixkLiRkYXRhRm9ybWF0cykudGhlbihpZT0+e2lmKHR5cGVvZiBpZS5zYXNwYXJhbXM8InUiKXJldHVybiBkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitpZS5zYXNwYXJhbXNbMF0uRFNJRCksITA7bGV0IHBlPSJTdWJtaXQgcmVxdWVzdCBmYWlsZWQiO2llJiYocGUrPWBcbiR7'@;
put 'InN0cmluZyI9PXR5cGVvZiBpZT9pZTpKU09OLnN0cmluZ2lmeShpZSl9YCksZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixwZSxudWxsLCJTdWJtaXQgZXJyb3IiKX0pLmNhdGNoKGllPT57Y29uc29sZS5sb2coImVyciIsaWUpLGMuY250PTAsYy5u'@;
put 'b25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMCxkLnN1Ym1pdD0hMTtsZXQgcGU9InN0cmluZyI9PXR5cGVvZiBpZT9pZTpKU09OLnN0cmluZ2lmeShpZSk7cmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIsYFN1Ym1pdCByZXF1ZXN0IGZh'@;
put 'aWxlZFxuJHtwZX1gLG51bGwsIlN1Ym1pdCBlcnJvciIpLCExfSkpcmV0dXJufX1jLmNudD49MT8oZC5wa051bGw9ITAsZC5zdWJtaXQ9ITApOmQuc3VibWl0PSExLGMubm9uUGtDbnQ+PTE/KGQubm9Qa051bGw9ITAsZC5zdWJtaXQ9ITApOmQuc3VibWl0PSExLGQuY2FuY2VsU3VibWl0KCks'@;
put 'Yy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwfSkoKX12YWxpZGF0b3JSdWxlU291cmNlKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpfWNoZWNrSW52YWxpZCgpe3JldHVybiB0aGlzLmhvdEluc3RhbmNlQ29tcExpc3QuZmlyc3QuY29udGFpbmVy'@;
put 'Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmh0SW52YWxpZCIpLmxlbmd0aD4wfWdvVG9FZGl0b3IoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvIil9Y2xvc2VSZWNvcmRFZGl0KGEpe3RoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmN1cnJlbnRFZGl0'@;
put 'UmVjb3JkPXZvaWQgMCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPXZvaWQgMCwiQUREIj09PXRoaXMucmVjb3JkQWN0aW9uJiYhYSYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMucHJldkRhdGFTb3VyY2UpLHRoaXMuaG90SW5zdGFu'@;
put 'Y2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSkpfWNvbmZpcm1SZWNvcmRFZGl0KGE9ITApe2NvbnN0IGQ9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4O2EmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEpLHRoaXMuY29sdW1uSGVhZGVyLm1hcChm'@;
put 'PT57Y29uc3QgXz10aGlzLmN1cnJlbnRFZGl0UmVjb3JkW2ZdLFQ9Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tmXT8udHlwZSxXPSgwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKF8pO1QmJiFpc05hTihfKSYmIVcmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkW2ZdPTEqXyl9KSx0aGlz'@;
put 'LmRhdGFTb3VyY2VbZF09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdFRhYmxlLmRhdGFbZF09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEmJih0aGlzLmN1cnJlbnRFZGl0UmVj'@;
put 'b3JkPXZvaWQgMCl9b25OZXh0UmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD49dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4'@;
put 'KzEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1vblByZXZpb3VzUmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDw9MD90aGlzLmRh'@;
put 'dGFTb3VyY2UubGVuZ3RoLTE6dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LTEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1hZGRSZWNvcmRCdXR0b25DbGljaygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkP3RoaXMuZXZl'@;
put 'bnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiQWRkIFJlY29yZCIpOnRoaXMuYWRkRWRpdE5ld1JlY29yZCgpfWFkZEVkaXROZXdSZWNvcmQoKXt0aGlzLmFkZFJlY29yZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEs'@;
put 'ITApfSwxZTMpfWFkZFJlY29yZCgpe3RoaXMuYWRkUm93KCl9ZWRpdFJlY29yZChhLGQsaCl7aWYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKXRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRWRpdCBSZWNvcmQiKTtlbHNlIGlmKCEodm9pZCAwPT09'@;
put 'ZHx8ZDwwfHx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpKXtpZih0aGlzLnJlY29yZEFjdGlvbj1oPyJBREQiOiJFRElUIix0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSghMSxoKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPXRoaXMu'@;
put 'aGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kY1ZhbGlkYXRvciksaCl0aGlzLnByZXZEYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLnByZXZEYXRhU291cmNlLnBvcCgpO2Vsc2V7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZp'@;
put 'Y2UuZGVlcENsb25lKHRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGFBdFJvdyhkKSk7Zm9yKGxldCBfIG9mIGYpaWYoXyl7Y29uc3QgVD1fLnByb3A/LnRvU3RyaW5nKCk7ZGVsZXRlIF8ucHJvcCxkZWxldGUgXy5kYXRhLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0'@;
put 'ZVJ1bGUoXy5jb2wsey4uLl8sZGF0YTpUfSl9fXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD1kLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZF0pfX10b2dnbGVIb3RQbHVnaW4oYSxkKXtjb25zdCBoPXRoaXMu'@;
put 'aG90SW5zdGFuY2U7aC5iYXRjaCgoKT0+e2xldCBmPWguZ2V0UGx1Z2luKGEpO2Y/KHNldFRpbWVvdXQoKCk9PntkP2YuZW5hYmxlUGx1Z2luKCk6Zi5kaXNhYmxlUGx1Z2luKCl9LDEwMCksaC5yZW5kZXIoKSk6Y29uc29sZS53YXJuKCJUb2dnbGUgSG90IFBsdWdpbiBmYWlsZWQgLSBQbHVn'@;
put 'aW4gbmFtZWQ6ICIrYSsiIC0gY291bGQgbm90IGJlIGZvdW5kLiIpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxkKXtyZXR1cm4hIXRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGY9PmYucm93PT09YSYmZi5jb2w9PT1kJiYhZi5hY3Rp'@;
put 'dmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihhLGQpe2lmKHRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2lmKGguZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSlyZXR1cm47Y29uc3QgXz1oLmdldERhdGFBdENl'@;
put 'bGwoYSxkKSxUPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2FdKSxXPU9iamVjdC5rZXlzKFQpW2RdLGllPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaChULFtXLCJub0xpbmtPcHRpb24iXSwhMSkscGU9dGhpcy5jZWxsVmFsaWRhdGlv'@;
put 'blNvdXJjZS5maW5kSW5kZXgod2U9PndlLmhhc2g9PT1pZSk7aWYocGU+LTEpe2xldCB3ZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3BlXS52YWx1ZXMubWFwKGl0PT5pdFt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2NvbnN0IEVlPShoLmdldENlbGxNZXRhKGEs'@;
put 'ZCkuc291cmNlfHxbXSkubGVuZ3RoPDEsWmU9IiAiIT09XztoLmJhdGNoKCgpPT57Y29uc3QgaXQ9aC5nZXRDZWxsTWV0YShhLGQpLGV0PXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoaXQuZGF0YXx8IiIpO2xldCB5dDtldCYmKHl0PXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25T'@;
put 'b3VyY2UoZXQpKSx5dHx8KHl0PVtdKSwibnVtZXJpYyI9PT1ldD8udHlwZT8oeXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh5dCwibnVtYmVyIiksd2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh3ZSwibnVtYmVyIikpOih5dD10aGlzLmhl'@;
put 'bHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJzdHJpbmciKSx3ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHdlLCJzdHJpbmciKSk7Y29uc3QgRXQ9Wy4uLm5ldyBTZXQoWy4uLnl0LC4uLndlXSldO2lmKGguc2V0Q2VsbE1ldGEoYSxkLCJzb3VyY2Ui'@;
put 'LEV0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3NvdXJjZTpFdH0pLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcGVdLnZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgU3Q9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtwZV0uc3RyaWN0O2guc2V0Q2Vs'@;
put 'bE1ldGEoYSxkLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJlZGl0b3IiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGEsZCwic3RyaWN0IixTdCksaC5zZXRDZWxsTWV0YShhLGQsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRW'@;
put 'YWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUiLHN0cmljdDpTdCxmaWx0ZXI6ITF9KX10aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyh0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3BlXSxhLEVl'@;
put 'JiZaZSksaC5yZW5kZXIoKX0pfWlmKHBlPDApe2NvbnN0IHdlPXtTQVNDb250cm9sVGFibGU6W3tsaWJkczp0aGlzLmxpYmRzLHZhcmlhYmxlX25tOld9XSxzb3VyY2Vfcm93OltUXX0sRWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKFcpLmZpbmQoWmU9PiJTT0ZUU0VMRUNUX0hP'@;
put 'T0siPT09WmUuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVF9IT09LIj09PVplLlJVTEVfVFlQRSk7RWUmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnB1c2goe3JvdzphLGNvbDpkLHN0cmljdDoiSEFSRFNFTEVDVF9IT09LIj09PUVlLlJVTEVfVFlQRSx2YWx1ZXM6W10saGFzaDppZSxjb3Vu'@;
put 'dDp0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aCsxfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixLTmUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5wdXNoKGQpLGgucmVuZGVyKCksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0ZHluYW1p'@;
put 'Y2NvbHZhbHMiLHdlLHZvaWQgMCx7c3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDohMCxzdXBwcmVzc0Vycm9yQWJvcnRNb2RhbDohMH0pLnRoZW4oWmU9PntpZihaZS5keW5hbWljX3ZhbHVlcy5tYXAoZXQ9PmV0W3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSkubGVuZ3Ro'@;
put 'PjApe2NvbnN0IGV0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHl0PT55dC5oYXNoPT09aWUpO2V0Pi0xJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtldF09ey4uLnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbZXRdLHJvdzphLGNvbDpkLHZhbHVlczpaZS5keW5h'@;
put 'bWljX3ZhbHVlcyxleHRlbmRlZF92YWx1ZXM6WmUuZHluYW1pY19leHRlbmRlZF92YWx1ZXN9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLEd6KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9m'@;
put 'KGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSxoLmJhdGNoKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyghMCxhKSxoLnJlbmRlcigpLGgudmFsaWRhdGVSb3dzKFthXSl9LDEwMCl9KX1pZihoLnNldENlbGxNZXRhKGEsZCwicmVu'@;
put 'ZGVyZXIiLEd6KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aD50aGlzLnZhbGlk'@;
put 'YXRpb25UYWJsZUxpbWl0KXtjb25zdCBldD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnJlZHVjZSgoRXQsU3QpPT5FdC5jb3VudDxTdC5jb3VudD9FdDpTdCkseXQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5pbmRleE9mKGV0KTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGlj'@;
put 'ZSh5dCwxKX19KS5jYXRjaChaZT0+e2NvbnN0IGl0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGV0PT5ldC5oYXNoPT09aWUpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKGl0LDEpLGguYmF0Y2goKCk9PntoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIi'@;
put 'LHFOZSksaC5yZW5kZXIoKX0pLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5wdXNoKGQpLHNldFRpbWVvdXQoKCk9PntoLnNldENlbGxN'@;
put 'ZXRhKGEsZCwicmVuZGVyZXIiLEd6KSxoLnJlbmRlcigpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuaW5kZXhPZihkKSwxKX0sM2UzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSx0aGlzLmxvZ2dlclNl'@;
put 'cnZpY2UubG9nKCJnZXRkeW5hbWljY29sdmFscyBlcnJvcjoiLFplKX0pKX19Y2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKXt0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHR5cGVvZiB0aGlzLmZpbHRlcl9wazwidSImJjE9PT10aGlzLmhvdFRhYmxlLmRhdGEubGVuZ3RoJiZbbnVsbCwiIl0uaW5j'@;
put 'bHVkZXModGhpcy5ob3RUYWJsZS5kYXRhWzBdW3RoaXMuaGVhZGVyUGtzWzBdXSkmJih0aGlzLnplcm9GaWx0ZXJSb3dzPSEwKX1vblJlY29yZElucHV0Rm9jdXMoYSl7dGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24odGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LGEuY29sTmFtZSl9ZXhl'@;
put 'Y3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShhLGQsaCl7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2godGhpcy5kYXRhU291cmNlW2hdLFthLCJub0xpbmtPcHRpb24iXSksXz10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmQoVD0+'@;
put 'VC5oYXNoPT09ZiYmZD09PVQuY29sKTtpZihfJiZfLmV4dGVuZGVkX3ZhbHVlcyYmXy5leHRlbmRlZF92YWx1ZXMubGVuZ3RoPjApe2NvbnN0IFQ9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKF8saCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoXyxoLFQsITApfX12'@;
put 'aWV3Ym94TWFuYWdlcigpe3RoaXMudmlld2JveGVzPSEwfWdldCB0b3RhbFJvd3NDaGFuZ2VkKCl7cmV0dXJuIHRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZH1uZ09uSW5pdCgpe3ZhciBh'@;
put 'PXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShoPT57YS5ob3RUYWJsZS5saWNlbnNlS2V5PWh9KSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoaD0+e2gubGliZHM9PT1hLmxpYmRz'@;
put 'JiYoYS53aGVyZVN0cmluZz1oLnN0cmluZyxhLmNsYXVzZXM9aC5vYmopfSk7bGV0IGQ9e307dHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJvdXRlLnNuYXBzaG90'@;
put 'LnBhcmFtcy5maWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0aCYmKGEucmVjb3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1IiYmKGQuRklMVEVS'@;
put 'X1JLPXBhcnNlSW50KGEuZmlsdGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihHbi5lZGl0b3IubGlicmFyeT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sR24uZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFFcnJvcj0hMSx5aWVs'@;
put 'ZCBhLnNhc1N0b3JlU2VydmljZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNldHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSkoKX1uZ0FmdGVyVmll'@;
put 'd0luaXQoKXt9aW5pdFNldHVwKGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuZ2V0ZGF0YUVycm9yfHwhYXx8IWEuZGF0YSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0'@;
put 'YS5kc21ldGE7Y29uc3QgZD10aGlzLmRzbWV0YS5maW5kKGllPT4iTk9URVMiPT09aWUuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKGllPT4iRERfTE9OR0RFU0MiPT09aWUuTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKGllPT4iRERfU0hPUlRERVNDIj09PWllLk5BTUUpO3RoaXMuZHNOb3Rl'@;
put 'PWQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2guVkFMVUU6ZiYmZi5WQUxVRT9mLlZBTFVFOiIiO2NvbnN0IF89dGhpcy5ob3RJbnN0YW5jZSxUPWEuZGF0YS5hcHByb3ZlcnM7dGhpcy5jb2xzJiYodGhpcy5oZWFkZXJBcnJheT0oYz0+e2NvbnN0IGw9W107Zm9yKGxldCBhIG9mIGMp'@;
put 'Il9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hLk5BTUUmJmwucHVzaChhLk5BTUUpO3JldHVybiBsfSkodGhpcy5jb2xzKSksVC5mb3JFYWNoKGllPT57dGhpcy5hcHByb3ZlcnMucHVzaChpZS5QRVJTT05OQU1FKX0pLHRoaXMudGFibGVUcnVlPSEwLHRoaXMubGliZHM9YS5s'@;
put 'aWJkcyx0aGlzLmhvdFRhYmxlLmRhdGE9YS5kYXRhLnNhc2RhdGEsdGhpcy5oZWFkZXJDb2x1bW5zPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuaGVhZGVyUGtzPWEuZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSx0aGlzLmNvbHVtbkxldmVs'@;
put 'U2VjdXJpdHlGbGFnPSEhYS5kYXRhLnNhc3BhcmFtc1swXS5DTFNfRkxBRyx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnJiZ0aGlzLnNldFJlc3RyaWN0aW9ucyh7cmVzdHJpY3RBZGRSb3c6ITAscmVtb3ZlRWRpdFJlY29yZEJ1dHRvbjohMCxyZW1vdmVBZGRSZWNvcmRCdXR0b246ITB9'@;
put 'KSx0aGlzLmNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCksLTEhPT10aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJih0aGlzLmhlYWRlckNvbHVtbnNbdGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElT'@;
put 'X19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLHRoaXMuaGVhZGVyQXJyYXk9dGhpcy5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJih0aGlzLmRhdGVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIi'@;
put 'IT09YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJih0aGlzLnRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKHRoaXMuZGF0ZVRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0u'@;
put 'RFRUTVZBUlMuc3BsaXQoIiAiKSksYS5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYodGhpcy54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnhsX3J1bGVzKSksdGhpcy5kY1ZhbGlkYXRvcj1uZXcgWk5lKGEuZGF0YS5zYXNwYXJhbXNbMF0sYS5kYXRhLiRzYXNk'@;
put 'YXRhLHRoaXMuY29scyxhLmRhdGEuZHFydWxlcyxhLmRhdGEuZHFkYXRhKSx0aGlzLmNlbGxWYWxpZGF0aW9uPXRoaXMuZGNWYWxpZGF0b3IuZ2V0UnVsZXMoKSx0aGlzLmRhdGFTb3VyY2U9YS5kYXRhLnNhc2RhdGEsdGhpcy4kZGF0YUZvcm1hdHM9YS5kYXRhLiRzYXNkYXRhO2ZvcihsZXQg'@;
put 'aWU9MDtpZTx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO2llKyspdGhpcy5ob3REYXRhU2NoZW1hW3RoaXMuY2VsbFZhbGlkYXRpb25baWVdLmRhdGFdPVlOZSh0aGlzLmNlbGxWYWxpZGF0aW9uW2llXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25baWVdKTt0aGlzLmNoZWNrUm93TGltaXQo'@;
put 'KSxfLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24saGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGZvcm11bGFzOnRoaXMuaG90VGFibGUuZm9ybXVsYXMsc3RyZXRj'@;
put 'aEg6ImFsbCIscmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxoaWRkZW5Db2x1bW5zOntpbmRpY2F0b3JzOiEwLGNvbHVtbnM6dGhpcy5kY1ZhbGlkYXRvci5nZXRIaWRkZW5Db2x1bW5zKCl9LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGllLHBlKXtyZXR1cm4gMD09PXBlPzYwOmll'@;
put 'PjUwMD81MDA6aWV9LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxtYW51YWxDb2x1bW5GcmVlemU6ITEsbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxmaWx0ZXJzOiExLG1hbnVhbFJvd1Jlc2l6ZTohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09m'@;
put 'ZnNldDo1MCxyb3dIZWFkZXJzOmllPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyNCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR8fDEvMCxpbnZhbGlkQ2VsbENsYXNzTmFtZToiaHRJbnZhbGlkIixkcm9wZG93bk1lbnU6e2l0'@;
put 'ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooaWUscGUsd2UsRWUsWmUsaXQpPT57Y29uc3QgZXQ9ZG9jdW1l'@;
put 'bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCB5dCxFdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgU3Q9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxKdD1TdD9TdFswXVsxXTotMSxubj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3Ao'@;
put 'SnQpO3l0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW25uXSx5dCYmKEV0PWBMQUJFTDogJHt5dD8ubGFiZWx9PGJyPlRZUEU6ICR7eXQ/LnR5cGV9PGJyPkxFTkdUSDogJHt5dD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7eXQ/LmZvcm1hdH1gKX1yZXR1cm4gZXQuaW5uZXJIVE1MPUV0LGV0fX19'@;
put 'fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihpZSxwZSk9Pntjb25zdCB3ZT10aGlzLmNvbHVtbkhlYWRl'@;
put 'cltpZV0sRWU9d2UmJnRoaXMuaXNDb2xQayh3ZSksWmU9d2UmJnRoaXMuaXNSZWFkb25seUNvbCh3ZSk7RWUmJnBlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLFplJiYhRWUmJnBlLmNsYXNzTGlzdC5hZGQoInJlYWRvbmx5Q2VsbCIpLDA9PT1pZSYmcGUuY2xhc3NM'@;
put 'aXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpfSxhZnRlckdldENlbGxNZXRhOihpZSxwZSx3ZSk9PntwZSYmdGhpcy5pc1JlYWRvbmx5Q29sKHBlKSYmKHdlLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50b2dnbGVI'@;
put 'b3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVsZXRlPyIs'@;
put 'dGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2xldCBXPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO1cmJlcuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixpZT0+e3RoaXMudXBsb2FkUHJldmlld3x8dGhpcy5ob3RDbGlja2Vk'@;
put 'KCksc2V0VGltZW91dCgoKT0+e2xldCBwZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO3BlJiZwZS5jbGljaygpfSwxMDApfSksXy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKGllLHBlLHdlLEVlLFplLGl0KT0+e2llPT09d2UmJnBlPT09'@;
put 'RWUmJiExPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24oaWUscGUpfSksXy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIixpZT0+e2NvbnN0IHBlPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSx3ZT1wZSYmcGVbMF07aWYod2Upe2NvbnN0'@;
put 'IEVlPXdlWzBdLGl0PXdlWzFdO2lmKEVlPT09d2VbMl0mJml0PT09d2VbM10pe2NvbnN0IHl0PXRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGEoRWUsaXQpO3l0JiYhMT09PXl0LmZpbHRlciYmdGhpcy5ob3RJbnN0YW5jZS5zZXRDZWxsTWV0YShFZSxpdCwiZmlsdGVyIiwhMCl9fX0pLF8u'@;
put 'YWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLChpZSxwZSk9PntpZigiZWRpdCI9PT1wZSl7Y29uc3Qgd2U9dGhpcy5ob3RJbnN0YW5jZSxFZT1pZVswXVswXSxaZT1pZVswXVsxXSxpdD13ZS5wcm9wVG9Db2woWmUpLGV0PXdlLmdldENlbGxNZXRhKEVlLGl0KTtldCYmITE9PT1ldC5maWx0ZXImJndl'@;
put 'LnNldENlbGxNZXRhKEVlLGl0LCJmaWx0ZXIiLCEwKSx0aGlzLmV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoWmUsaXQsRWUpfX0pLF8uYWRkSG9vaygiYWZ0ZXJSZW5kZXIiLGllPT57dGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSxf'@;
put 'LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoaWUscGUpPT57aWYoaWU+dGhpcy5kYXRhU291cmNlLmxlbmd0aCl7bGV0IHdlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dEhvbGRlciIpO3NldFRpbWVvdXQoKCk9Pnt3ZSYmKHdlLnNjcm9sbFRvcD13ZS5zY3JvbGxIZWlnaHQpfSl9fSks'@;
put 'Xy5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKGllLHBlKT0+e2NvbnN0IHdlPXBlWzBdLnN0YXJ0Q29sO2llWzBdPWllWzBdLm1hcCgoRWUsWmUpPT57Y29uc3QgaXQ9dGhpcy5jb2x1bW5IZWFkZXJbd2UrWmVdLGV0PSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbaXRdPy50eXBlLHl0'@;
put 'PSgwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKEVlKTtyZXR1cm4gZXQmJiFpc05hTihFZSkmJiF5dCYmKEVlKj0xKSxFZX0pfSksXy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLF8uYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLCgpPT57dGhpcy5j'@;
put 'aGVja1Jvd0xpbWl0KCl9KSx0aGlzLnVwbG9hZFVybD0ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsbnVsbCE9PXRoaXMucmVjb3JkQWN0aW9uJiYoIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbj8odGhpcy5hZGRSZWNvcmQoKSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3Vy'@;
put 'Y2UubGVuZ3RoLTEsITApKToxPT09dGhpcy5kYXRhU291cmNlLmxlbmd0aCYmdGhpcy5lZGl0UmVjb3JkKG51bGwsMCkpLGEuZGF0YS5xdWVyeS5sZW5ndGg+MCYmKCJob21lIj09PUduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290UGFyYW0pJiYwPT09R24uZWRpdG9yLmZpbHRlci5j'@;
put 'bGF1c2VzLmxlbmd0aCYmKEduLmVkaXRvci5maWx0ZXIucXVlcnk9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEucXVlcnkpLEduLmVkaXRvci5maWx0ZXIubGliZHM9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRp'@;
put 'YWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoImVkaXRvciIsdGhpcy5jb2xzKSksXy5yZW5kZXIoKX19cmV0dXJuIGMuY250PTAsYy5ub25Qa0NudD0wLGMubGFzdENlbGw9MCxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dCh2bCksdHQodzApLHR0KGJk'@;
put 'KSx0dChUYyksdHQoRHMpLHR0KEdsKSx0dChvYSksdHQoVWEpLHR0KEFnKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1lZGl0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oZFVlLDcpLFJvKGhVZSw1KSxSbyhmVWUsNSksUm8ocFVl'@;
put 'LDUpLFJvKGdVZSw1KSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5odD1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC51cGxvYWRTdGF0ZXJDb21wTGlzdD1oKSxhaShoPWxpKCkpJiYoZC5xdWVyeUZpbHRlckNvbXBMaXN0PWgpLGFpKGg9bGkoKSkmJihkLmhvdEluc3RhbmNlQ29tcExpc3Q9'@;
put 'aCksYWkoaD1saSgpKSYmKGQuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9aCl9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTc3LHZhcnM6NzMsY29uc3RzOltbMSwiY29udGVudC1hcmVhIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJhcHBGaWxlRHJv'@;
put 'cCIsIiIsMSwicmVsYXRpdmUiLDMsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxl'@;
put 'Il0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtYXV0byJdLFsxLCJlbmNvZGluZy1ibG9j'@;
put 'ayJdLFsiY2xySW5saW5lIiwiIiwxLCJtdC0wLWkiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJVVEYtOCIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIi'@;
put 'LCJ2YWx1ZSIsIldMQVRJTjEiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGZpbHRlckJ0biIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZWRpdEJ0biIsNCwibmdJZiJdLFsi'@;
put 'dHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJleGNlbC1wYXJz'@;
put 'aW5nIGNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWzMsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVu'@;
put 'dFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblBy'@;
put 'ZXZpb3VzUmVjb3JkIiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImh0IiwiIl0sWyJjbGFzcyIsInByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiYm9yZGVyLTAiLCJib3gtc2hhZG93LW5vbmUtaSIsInBvc2l0'@;
put 'aW9uLXJlbGF0aXZlIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbMSwiY2FyZC1oZWFkZXIiLCJjbHItcm93IiwiYnV0dG9uQmFyIiwiaGVhZGVyQmFyIiwiY2xyLWZsZXgtbWQtcm93Iiwi'@;
put 'Y2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWxnLWVuZCJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbGctNCBiYWNrQnRuIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIs'@;
put 'ImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJlZGl0b3ItdGl0bGUgdGV4dC1jZW50ZXIgbXQtMC1pIiw0LCJuZ1ZhciJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbGctNCBidG5DdHJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwi'@;
put 'bmdJZiJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwiY2xyLWZsZXgtMSIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWzEsImNhcmQtdGV4dCIsImhvdEVkaXRvciIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgt'@;
put 'Y29sdW1uIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCJdLFsxLCJob3Qtd3JhcHBlciIsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwxLCJlZGl0LWhvdCIsMywibGljZW5zZUtleSJdLFsiaG90SW5zdGFuY2UiLCIiXSxbNCwibmdJZiJdLFsi'@;
put 'Y2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm0tMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1h'@;
put 'cnkiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiZHVwbGljYXRlLWtleXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsiY2xhc3MiLCJkLWJsb2NrIiw0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwi'@;
put 'bW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJj'@;
put 'bGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxT'@;
put 'aXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVy'@;
put 'Il0sWyJkYXRhLWxwaWdub3JlIiwidHJ1ZSIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImlkIiwiZmlsZVBhc3N3b3JkSW5wdXQiLCJ0eXBlIiwidGV4dCIsMSwiY2xyLWlucHV0IiwiZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2VyIl0sWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiY2xhc3MiLCJt'@;
put 'LTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzMsIm9wZW4iLCJkc21ldGEiLCJvcGVuQ2hhbmdlIl0sWzMsInZpZXdib3hNb2RhbCIsInZpZXdib3hNb2Rh'@;
put 'bENoYW5nZSJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZp'@;
put 'bGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJ1cGxvYWRlciIsImNoYW5nZSJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWzEsImNsci1jb2wtbWQtMyIsImVkaXRCdG4iXSxbMSwiYnRuVmlldyIsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJv'@;
put 'ZmlsZS1idXR0b25zIiwidy0xMDAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJjbGlj'@;
put 'ayJdLFsxLCJleGNlbC1wYXJzaW5nIiwiY2xyLWNvbC1tZC0xMiJdLFsidXBsb2FkU3RhdGVyIiwiIl0sWzMsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0'@;
put 'aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRS'@;
put 'ZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCIsImJhY2tCdG4iXSxbMSwiYnRuIiwiYnRuLXNtIiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwi'@;
put 'bGVmdCIsInNpemUiLCIyMCJdLFsxLCJidG4iLCJidG4tc20iLCJ2aWV3Ym94LW9wZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiLCJzaXplIiwiMjAiXSxbMSwiZWRpdG9yLXRpdGxlIiwidGV4dC1jZW50ZXIiLCJtdC0wLWkiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwi'@;
put 'c2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbMSwibXItMTAiLDMs'@;
put 'InJvdXRlckxpbmsiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbMSwiY2xyLWNvbC0x'@;
put 'MiIsImNsci1jb2wtbGctNCIsImJ0bkN0cmwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0blZpZXciLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4t'@;
put 'cHJpbWFyeSIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwibm90ZSJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2VzcyBidG4tYmxvY2sgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1z'@;
put 'bSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXSxbImNs'@;
put 'clRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsIjE2Il0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIl0sWyJ0eXBlIiwiYnV0dG9u'@;
put 'IiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXByaW1hcnkgYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayIsNCwi'@;
put 'bmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcmV2aWV3LXN1Ym1pdCIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi11cGxvYWQtcHJldmlldyIs'@;
put 'MywiY2xpY2siXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJzcGlubmVyIl0sWyJzaGFwZSIsImVy'@;
put 'cm9yLXN0YW5kYXJkIiwxLCJlcnJvci1pY29uIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXQtNS1pIiwzLCJjbGljayJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciLDQs'@;
put 'ImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwibW9kYWwt'@;
put 'bGciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJjbGFzcyIsImQtYmxvY2sgdy0xMDAgdGV4dC1jZW50'@;
put 'ZXIgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1vZmZzZXQtbWQtMiBjbHItY29sLW1kLTgiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwianVzdGlmeS1jb250ZW50LWNlbnRlci1pIl0sWyJpZCIsInN1Ym1pdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0'@;
put 'bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJtLTAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbImlkIiwiY2FuY2VsU3VibWl0QnRuIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImQtYmxvY2siLCJ3LTEwMCIsInRleHQt'@;
put 'Y2VudGVyIiwiY29sb3ItcmVkIl0sWzEsImNsci1vZmZzZXQtbWQtMiIsImNsci1jb2wtbWQtOCJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLCJyb3dzIiwiNSIsMSwidy0xMDAiLDMsIm5nTW9kZWwi'@;
put 'LCJkaXNhYmxlZCIsInZhbHVlIiwibmdNb2RlbENoYW5nZSJdLFsxLCJkLWJsb2NrIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWzEsIm0tMCIs'@;
put 'ImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1WbigpO21lKDAsImRpdiIsMCkoMSwiY2xyLW1vZGFsIiwxKSx4dCgiZmlsZU92ZXIiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmZpbGVPdmVyQmFzZShfKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oXyl7'@;
put 'cmV0dXJuIGQuZ2V0RmlsZURlc2MoXywhMCl9KSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5zaG93VXBsb2FkTW9kYWw9X30pLG1lKDIsImgzIiwyKSxOZSgzLCJVcGxvYWQgRmlsZSIpLHllKCksbWUoNCwiZGl2IiwzKSg1LCJkaXYiLDQpKDYsInNwYW4iKSxO'@;
put 'ZSg3LCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLHllKCkoKSxtZSg4LCJkaXYiLDUpKDksImRpdiIsNikoMTAsImRpdiIsNykoMTEsImRpdiIsOCkoMTIsImNsci1yYWRpby1jb250YWluZXIiLDkpKDEzLCJjbHItcmFkaW8td3JhcHBlciIpKDE0LCJpbnB1dCIsMTApLHh0KCJu'@;
put 'Z01vZGVsQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5lbmNvZGluZz1ffSkseWUoKSxtZSgxNSwibGFiZWwiKSxOZSgxNiwiVVRGLTgiKSx5ZSgpKCksbWUoMTcsImNsci1yYWRpby13cmFwcGVyIikoMTgsImlucHV0IiwxMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKF8pe3Jl'@;
put 'dHVybiBkLmVuY29kaW5nPV99KSx5ZSgpLG1lKDE5LCJsYWJlbCIpLE5lKDIwLCJXTEFUSU4xIikseWUoKSgpKCkoKSgpLEplKDIxLG1VZSw2LDEsImRpdiIsMTIpLEplKDIyLHZVZSwzLDEsImRpdiIsMTMpLG1lKDIzLCJkaXYiLDcpLEplKDI0LF9VZSwyLDEsImJ1dHRvbiIsMTQpLEplKDI1'@;
put 'LGJVZSwyLDAsImJ1dHRvbiIsMTUpLHllKCksSmUoMjYseVVlLDMsMCwiZGl2IiwxNikseWUoKSgpKCkscXQoMjcsImRpdiIsMTcpLHllKCksSmUoMjgsd1VlLDEsMTIsImFwcC1lZGl0LXJlY29yZCIsMTgpLG1lKDI5LCJkaXYiLDE5LDIwKSxKZSgzMSxDVWUsMiwwLCJkaXYiLDIxKSxtZSgz'@;
put 'MiwiZGl2IiwyMikseHQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblNob3dVcGxvYWRNb2RhbCgpfSksbWUoMzMsImRpdiIsMjMpLEplKDM0LE1VZSw3LDIsImRpdiIsMjQpLG1lKDM1LCJkaXYiLDI1KSxKZSgzNixEVWUsMTAsNSwiaDQiLDI2KSx5ZSgpLEplKDM3'@;
put 'LE5VZSw0LDMsImRpdiIsMjcpLEplKDM4LFZVZSw1LDEsImRpdiIsMjgpLHllKCksbWUoMzksImRpdiIsMjkpLEplKDQwLHpVZSw0LDIsImRpdiIsMzApLG1lKDQxLCJkaXYiLDMxKSg0MiwiZGl2IiwzMikscXQoNDMsImhvdC10YWJsZSIsMzMsMzQpLHllKCksbWUoNDUsImRpdiIpLEplKDQ2'@;
put 'LFlVZSw1LDIsImNsci10b29sdGlwIiwzNSksSmUoNDcsV1VlLDMsMSwicCIsMzYpLHllKCksSmUoNDgscVVlLDE2LDYsImRpdiIsMzcpLG1lKDQ5LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT1f'@;
put 'fSksbWUoNTAsImgzIiwyKSxOZSg1MSwiTm90aWNlIikseWUoKSxtZSg1MiwiZGl2IiwzKSg1MywicCIsMzkpLE5lKDU0KSx5ZSgpKCksbWUoNTUsImRpdiIsMTcpKDU2LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc3VibWl0TGltaXROb3RpY2U9ITF9KSxO'@;
put 'ZSg1NywiIENhbmNlbCAiKSx5ZSgpLG1lKDU4LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZ2V0RmlsZSgpLGQuc3VibWl0TGltaXROb3RpY2U9ITF9KSxOZSg1OSwiIFN1Ym1pdCAiKSx5ZSgpKCkoKSxtZSg2MCwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1v'@;
put 'ZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuYmFkRWRpdD1ffSksbWUoNjEsImgzIiwyKSxOZSg2MikseWUoKSxtZSg2MywiZGl2IiwzKSg2NCwicCIpLE5lKDY1KSx5ZSgpKCksbWUoNjYsImRpdiIsMTcpKDY3LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGQuYmFkRWRpdD0hMX0pLE5lKDY4LCIgT2sgIikseWUoKSgpKCksbWUoNjksImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnBrTnVsbD1ffSksbWUoNzAsImgzIiwyKSxOZSg3MSwiRXJyb3IiKSx5ZSgpLG1lKDcyLCJk'@;
put 'aXYiLDMpKDczLCJwIiksTmUoNzQsIiBOdWxsIHZhbHVlcyBvciBpbmNvcnJlY3QgZGF0YSB0eXBlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLHllKCkoKSxtZSg3NSwiZGl2IiwxNykoNzYsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gZC5wa051bGw9ITEsZC5iYWRFZGl0PSExfSksTmUoNzcsIiBPayAiKSx5ZSgpKCkoKSxtZSg3OCwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQubm9Qa051bGw9X30pLG1lKDc5LCJoMyIsMiksTmUoODAsIkVycm9y'@;
put 'IikseWUoKSxtZSg4MSwiZGl2IiwzKSg4MiwicCIpLE5lKDgzLCJJbmNvcnJlY3QgZGF0YSB0eXBlcyBpbiBub24tUHJpbWFyeSBLZXkgY29sdW1ucyIpLHllKCkoKSxtZSg4NCwiZGl2IiwxNykoODUsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5ub1BrTnVs'@;
put 'bD0hMSxkLmJhZEVkaXQ9ITF9KSxOZSg4NiwiIE9rICIpLHllKCkoKSgpLG1lKDg3LCJjbHItbW9kYWwiLDQyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5wa0R1cHM9X30pLG1lKDg4LCJoMyIsMiksTmUoODksIkVycm9yIikseWUoKSxtZSg5MCwiZGl2'@;
put 'IiwzKSg5MSwicCIpLE5lKDkyLCIgRHVwbGljYXRlIHZhbHVlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLHllKCksbWUoOTMsInAiKSxOZSg5NCwiRHVwbGljYXRlcyBmb3VuZDoiKSx5ZSgpLEplKDk1LEtVZSwzLDQsInNwYW4iLDQzKSx5ZSgpLG1l'@;
put 'KDk2LCJkaXYiLDE3KSg5NywiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBrRHVwcz0hMX0pLE5lKDk4LCIgT2sgIikseWUoKSgpKCksbWUoOTksImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnRv'@;
put 'b0xvbmc9X30pLG1lKDEwMCwiaDMiLDIpLE5lKDEwMSwiRXJyb3IiKSx5ZSgpLG1lKDEwMiwiZGl2IiwzKSgxMDMsInAiKSxOZSgxMDQsIiBUaGUgZm9sbG93aW5nIGNvbHVtbnMgaGF2ZSB2YWx1ZXMgdGhhdCBleGNlZWQgbGVuZ3RoIGxpbWl0czogIikseWUoKSxKZSgxMDUsWFVlLDIsMywi'@;
put 'cCIsNDQpLHllKCksbWUoMTA2LCJkaXYiLDE3KSgxMDcsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC50b29Mb25nPSExLGQuY2xlYW5FeGNlZWQoKX0pLE5lKDEwOCwiIE9rICIpLHllKCkoKSgpKCkoKSgpKCkoKSxKZSgxMDksSlVlLDE0LDAsImRpdiIsNDUp'@;
put 'LG1lKDExMCwiY2xyLW1vZGFsIiw0NikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZmlsdGVyPV99KSxtZSgxMTEsImgzIiw0NyksTmUoMTEyLCIgRmlsdGVyIGZvciB0YWJsZTogIiksbWUoMTEzLCJzcGFuIiksTmUoMTE0KSx5ZSgpKCksbWUoMTE1LCJk'@;
put 'aXYiLDMpLEplKDExNixRVWUsMiwwLCJhcHAtcXVlcnkiLDM1KSx5ZSgpLG1lKDExNywiZGl2IiwxNykoMTE4LCJidXR0b24iLDQ4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzZXRGaWx0ZXIoKX0pLE5lKDExOSwiIHJlc2V0IGZpbHRlciAiKSx5ZSgpLG1lKDEyMCwiYnV0'@;
put 'dG9uIiw0OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbHRlcj0hMX0pLE5lKDEyMSwiIENhbmNlbCAiKSx5ZSgpLG1lKDEyMiwiYnV0dG9uIiw1MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbmRDbGF1c2UoKX0pLE5lKDEyMywiIE9rICIpLHllKCkoKSgp'@;
put 'LG1lKDEyNCwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQucXVlcnlFcnI9X30pLG1lKDEyNSwiaDMiLDIpLE5lKDEyNiwiRXJyb3IiKSx5ZSgpLG1lKDEyNywiZGl2IiwzKSgxMjgsInAiKSxOZSgxMjkpLHllKCkoKSxtZSgxMzAs'@;
put 'ImRpdiIsMTcpKDEzMSwiYnV0dG9uIiw1MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnF1ZXJ5RXJyPSExfSksTmUoMTMyLCIgQ2FuY2VsICIpLHllKCksbWUoMTMzLCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucXVlcnlFcnI9ITF9KSxOZSgx'@;
put 'MzQsIiBPayAiKSx5ZSgpKCkoKSxtZSgxMzUsImNsci1tb2RhbCIsNTIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmRpc2NhcmRTb3VyY2VGaWxlPV99KSxtZSgxMzYsImgzIiw0NyksTmUoMTM3LCJXYXJuaW5nIikseWUoKSxtZSgxMzgsImRpdiIsMyks'@;
put 'TmUoMTM5LCIgVGhpcyBhY3Rpb24gd2lsbCBkaXNjYXJkIHRoZSBzb3VyY2UgZmlsZSBhbmQgaXQncyBsb2FkZWQgZGF0YSAiKSxtZSgxNDAsImIiKSxOZSgxNDEpLHllKCksTmUoMTQyLCIgRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIikseWUoKSxtZSgxNDMsImRpdiIsMTcpKDE0NCwiYnV0'@;
put 'dG9uIiw0OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmRpc2NhcmRTb3VyY2VGaWxlPSExfSksTmUoMTQ1LCIgQ2FuY2VsICIpLHllKCksbWUoMTQ2LCJidXR0b24iLDUzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGlzY2FyZFNvdXJjZUZpbGU9ITEsZC5kaXNj'@;
put 'YXJkUGVuZGluZ0V4Y2VsKCEwKX0pLE5lKDE0NywiIE9rICIpLHllKCkoKSgpLG1lKDE0OCwiY2xyLW1vZGFsIiw1MikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZmlsZVBhc3N3b3JkTW9kYWw9X30pLG1lKDE0OSwiaDMiLDQ3KSxOZSgxNTAsIiBQYXNz'@;
put 'd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSx5ZSgpLG1lKDE1MSwiZGl2Iiw1NCkoMTUyLCJwIiwzOSksTmUoMTUzLCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IikseWUoKSxxdCgxNTQsImlucHV0Iiw1NSw1NikseWUoKSxtZSgxNTYsImRpdiIsMTcpLEplKDE1NyxlWmUsMiwwLCJwIiw1NyksbWUo'@;
put 'MTU4LCJidXR0b24iLDQ5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZmlsZVBhc3N3b3JkTW9kYWw9ITEsZC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQodm9pZCAwKX0pLE5lKDE1OSwiIENhbmNlbCB1cGxvYWQgIikseWUoKSxtZSgxNjAsImJ1dHRvbiIsNTgpLHh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtCdChoKTtjb25zdCBfPSRpKDE1NSk7cmV0dXJuIGQuZmlsZVBhc3N3b3JkTW9kYWw9ITEsanQoZC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQoXy52YWx1ZSkpfSksTmUoMTYxLCIgVW5sb2NrICIpLHllKCkoKSgpLG1lKDE2MiwiY2xyLW1vZGFsIiw1MikseHQoImNs'@;
put 'ck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQubWFudWFsRmlsZUVkaXRNb2RhbD1ffSksbWUoMTYzLCJoMyIsNDcpLE5lKDE2NCwiV2FybmluZyIpLHllKCksbWUoMTY1LCJkaXYiLDMpLE5lKDE2NiwiIE1hbnVhbGx5IGVkaXRpbmcgdGhpcyBkYXRhIHdpbGwgbWVhbiB0'@;
put 'aGUgc291cmNlIGZpbGUgIiksbWUoMTY3LCJiIiksTmUoMTY4KSx5ZSgpLE5lKDE2OSwiIHdpbGwgYmUgZGlzY2FyZGVkLiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSx5ZSgpLG1lKDE3MCwiZGl2IiwxNykoMTcxLCJidXR0b24iLDQ5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGQubWFudWFsRmlsZUVkaXRNb2RhbD0hMX0pLE5lKDE3MiwiIENhbmNlbCAiKSx5ZSgpLG1lKDE3MywiYnV0dG9uIiw1MykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsZC5wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpfSksTmUoMTc0LCIg'@;
put 'T2sgIikseWUoKSgpKCksbWUoMTc1LCJhcHAtZGF0YXNldC1pbmZvIiw1OSkseHQoIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmRhdGFzZXRJbmZvPV99KSx5ZSgpLG1lKDE3NiwiYXBwLXZpZXdib3hlcyIsNjApLHh0KCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKF8p'@;
put 'e3JldHVybiBkLnZpZXdib3hlcz1ffSkseWUoKX1pZigyJmEpe2NvbnN0IGg9JGkoMTU1KTtDZSgxKSxSZSgidXBsb2FkZXIiLGQudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCJWYWxpZGF0aW5n'@;
put 'LURRIj09PWQuZXhjZWxVcGxvYWRTdGF0ZSkoImNsck1vZGFsT3BlbiIsZC5zaG93VXBsb2FkTW9kYWwpLENlKDEzKSxSZSgibmdNb2RlbCIsZC5lbmNvZGluZykoImRpc2FibGVkIiwiIiE9ZC5maWxlbmFtZSksQ2UoNCksUmUoIm5nTW9kZWwiLGQuZW5jb2RpbmcpKCJkaXNhYmxlZCIsIiIh'@;
put 'PWQuZmlsZW5hbWUpLENlKDMpLFJlKCJuZ0lmIiwhZC5leGNlbEZpbGVQYXJzaW5nJiYhZC51cGxvYWRMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQuZXhjZWxGaWxlUGFyc2luZyYmIWQudXBsb2FkTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLCJWYWxpZGF0aW5nIiE9PWQuZXhjZWxVcGxv'@;
put 'YWRTdGF0ZSksQ2UoMSksUmUoIm5nSWYiLCJWYWxpZGF0aW5nLURRIj09PWQuZXhjZWxVcGxvYWRTdGF0ZSksQ2UoMSksUmUoIm5nSWYiLGQuZXhjZWxGaWxlUGFyc2luZyksQ2UoMiksUmUoIm5nSWYiLGQuY3VycmVudEVkaXRSZWNvcmRJbmRleD4tMSksQ2UoMyksUmUoIm5nSWYiLCFkLnZh'@;
put 'bGlkYXRpb25Eb25lJiZkLnN1Ym1pdCksQ2UoMyksUmUoIm5nSWYiLGQudGFibGVUcnVlKSxDZSgxKSxkcigiY2xyLWNvbC1sZy0xMiIsIWQudGFibGVUcnVlKSxDZSgxKSxSZSgibmdWYXIiLFEyKDY2LHRaZSxudWxsPT1kLmxpYmRzP251bGw6ZC5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9'@;
put 'PWQubGliZHM/bnVsbDpkLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxDZSgxKSxSZSgibmdJZiIsZC50YWJsZVRydWUpLENlKDEpLFJlKCJuZ0lmIiwhJHMoNjksSXNlKS5pbmNsdWRlcyhkLnF1ZXJ5VGV4dCkpLENlKDEpLFJlKCJuZ0NsYXNzIixKMig3MSxuWmUsISRzKDcwLElzZSkuaW5jbHVk'@;
put 'ZXMoZC5xdWVyeVRleHQpKSksQ2UoMSksUmUoIm5nSWYiLCFkLnRhYmxlVHJ1ZSksQ2UoMyksZHIoImhpZGRlbiIsZC5ob3RUYWJsZS5oaWRkZW4pLFJlKCJsaWNlbnNlS2V5IixkLmhvdFRhYmxlLmxpY2Vuc2VLZXkpLENlKDMpLFJlKCJuZ0lmIixkLnRhYmxlVHJ1ZSYmIWQucmVzdHJpY3Rp'@;
put 'b25zLnJlbW92ZUFkZFJlY29yZEJ1dHRvbiksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1kLkluZmluaXR5JiZkLmRhdGFTb3VyY2UmJmQuZGF0YVNvdXJjZS5sZW5ndGg+ZC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3Nf'@;
put 'YWxsb3dlZCksQ2UoMSksUmUoIm5nSWYiLGQuc3VibWl0KSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLnN1Ym1pdExpbWl0Tm90aWNlKSxDZSg1KSxncigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJv'@;
put 'd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksQ2UoNiksUmUoImNsck1vZGFsT3BlbiIsZC5iYWRFZGl0KSxDZSgyKSxvcihkLmJhZEVkaXRUaXRsZXx8IkVycm9yIiks'@;
put 'Q2UoMyksb3IoZC5iYWRFZGl0Q2F1c2UpLENlKDQpLFJlKCJjbHJNb2RhbE9wZW4iLGQucGtOdWxsKSxDZSg5KSxSZSgiY2xyTW9kYWxPcGVuIixkLm5vUGtOdWxsKSxDZSg5KSxSZSgiY2xyTW9kYWxPcGVuIixkLnBrRHVwcyksQ2UoOCksUmUoIm5nRm9yT2YiLGQuZHVwbGljYXRlUGtJbmRl'@;
put 'eGVzKSxDZSg0KSxSZSgiY2xyTW9kYWxPcGVuIixkLnRvb0xvbmcpLENlKDYpLFJlKCJuZ0Zvck9mIixkLmV4Y2VlZENlbGxzKSxDZSg0KSxSZSgibmdJZiIsZC5udWxsVmFyaWFibGVzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmZpbHRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNs'@;
put 'ck1vZGFsQ2xvc2FibGUiLCExKSxDZSg0KSxncigiICIsZC5saWJkcywiICIpLENlKDIpLFJlKCJuZ0lmIixkLmZpbHRlciksQ2UoNiksUmUoImNsckxvYWRpbmciLGQuc3VibWl0TG9hZGluZyksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC5xdWVyeUVyciksQ2UoNSksb3IoZC5xdWVyeUVy'@;
put 'ck1lc3NhZ2UpLENlKDYpLFJlKCJjbHJNb2RhbE9wZW4iLGQuZGlzY2FyZFNvdXJjZUZpbGUpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNiksb3IoZC5maWxlbmFtZSksQ2UoNyksUmUoImNsck1vZGFsT3BlbiIsZC5maWxlUGFzc3dvcmRNb2RhbCko'@;
put 'ImNsck1vZGFsU2l6ZSIsIm1kIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg5KSxSZSgibmdJZiIsZC5maWxlVW5sb2NrRXJyb3IpLENlKDMpLFJlKCJkaXNhYmxlZCIsaC52YWx1ZS5sZW5ndGg8MSksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC5tYW51YWxGaWxlRWRpdE1vZGFsKSgi'@;
put 'Y2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDYpLG9yKGQuZmlsZW5hbWUpLENlKDcpLFJlKCJvcGVuIixkLmRhdGFzZXRJbmZvKSgiZHNtZXRhIixkLmRzbWV0YSksQ2UoMSksUmUoInZpZXdib3hNb2RhbCIsZC52aWV3Ym94ZXMpfX0sZGVwZW5kZW5jaWVz'@;
put 'Olt4c2UsZGMseHMsWmksV2EsbEUsQnMsT3MsQnUsa2Esb3Usc3UsWnUsYzIsZGgsVXMsWEYsdHdlLEtGLGpiLFViLHpiLHh5LFU3LFliLEVzZSxrc2UsQXNlLGpFLGNVLGFVZSxjVWUsdVVlLERzZV0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtib3Jk'@;
put 'ZXI6MH0uYnV0dG9uQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udGVzdFJlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOnJnYmEoMjU1LDAsMCwuOCkhaW1wb3J0YW50fWhvdC10YWJsZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAgIC5maXJzdENvbHVtbkhlYWRlclN0eWxlIGJ1dHRvbi5jaGFuZ2VUeXBle2Rpc3BsYXk6bm9uZX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxlLCBo'@;
put 'b3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNjkwMTk2MDc4NCl9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnBy'@;
put 'aW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0OSl9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRkLnJlYWRvbmx5'@;
put 'Q2VsbHtvcGFjaXR5Oi41fS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE0cHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHg7aGVpZ2h0OjMwcHg7dGV4dC1vdmVyZmxvdzplbGxp'@;
put 'cHNpcztvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjgwJX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7aGVpZ2h0OnVuc2V0O3doaXRlLXNwYWNlOm5v'@;
put 'cm1hbH0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDp1bnNldH0ucGtIZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZmO21hcmdpbjotMXB4fS5oZWFkZXJCYXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmZmZmY7YmFja2dyb3VuZDojZjVmNmZlfS5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4O2hlaWdodDozMHB4O2NvbG9yOnJlZH0uYnRuQ3RybFtfbmdjb250ZW50LSVDT01QJV17ZGlz'@;
put 'cGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50fS5oaWRkZW5bX25nY29udGVudC0lQ09NUCVde3Zpc2liaWxpdHk6aGlkZGVufS5teS1kcm9wLXpvbmVbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2JvcmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOndoaXRlc21va2U7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9Lm52LWZpbGUtb3Zlcltfbmdjb250ZW50LSVDT01Q'@;
put 'JV17Ym9yZGVyOnNvbGlkIDJweCBncmVlbn0uZmlsZS1kcm9wLXRleHRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucHJvZ3Jlc1N0YXRpY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo5cHgh'@;
put 'aW1wb3J0YW50fS5wcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV0sIC5wcm9ncmVzcy1zdGF0aWNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfX0uaG90RWRpdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZXhjZWwtcGFyc2luZ1tf'@;
put 'bmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9LmV4Y2VsLXBhcnNpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3Bv'@;
put 'c2l0aW9uOmFic29sdXRlO3RvcDotNDVweH0uZWRpdC1yZWNvcmQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuNik7cG9zaXRpb246YWJz'@;
put 'b2x1dGU7dG9wOjA7Ym90dG9tOjA7d2lkdGg6MTAwJTt6LWluZGV4OjUwMH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7LnByb2dyZXNTdGF0aWNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MzJweCFpbXBvcnRhbnR9LmNhcmQtYmxvY2tbX25nY29udGVudC0l'@;
put 'Q09NUCVdLCAuY2FyZC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAwIDB9fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuOHJlbSAuOHJlbSFpbXBvcnRhbnQ7cGFkZGluZy10b3A6MH0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0xfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17Zm9u'@;
put 'dC1zaXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O2NvbG9yOiNmZmZ9I3N1Ym1pdEJ0bltfbmdjb250ZW50LSVDT01QJV0sICNjYW5jZWxTdWJtaXRCdG5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE1MHB4fSJdfSksY30pKCk7Y29uc3QgclplPVt7cGF0aDoiOmxpYk1lbSIsY29tcG9uZW50'@;
put 'OkpBfSx7cGF0aDoiOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpKQX0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0iLGNvbXBvbmVudDpKQX0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6SkF9XTtsZXQgaVplPSgoKT0+e2NsYXNzIGN7fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLGhjLmZvckNoaWxkKHJaZSksaGNdfSksY30pKCksUUE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sX3Usb28scWwsQzJdfSksY30pKCksb1plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9'@;
put 'fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaG9tZS1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJnF0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltmcF19KSxjfSkoKTtjb25zdCBzWmU9WyJzaWRlYmFyTmF2Il07ZnVuY3Rpb24gYVplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYSIsMTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gQnQoYSksanQoVmUoMykubmF2aWdhdGVUb1ZpZXdlcigpKX0pLE5lKDEsIkRhdGEiKSx5ZSgpfX1mdW5jdGlvbiBsWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwxOSksTmUoMSwiQVBJIEV4cGxvcmVyIikseWUoKSl9ZnVuY3Rpb24gY1plKGMsbCl7MSZjJiYobWUoMCwiYSIsMjApLE5l'@;
put 'KDEsIkxpbmVhZ2UiKSx5ZSgpKX1mdW5jdGlvbiB1WmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyMSksTmUoMSwiTWV0YWRhdGEiKSx5ZSgpKX1mdW5jdGlvbiBkWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyMiksTmUoMSwiIFVzZXJzIikseWUoKSl9ZnVuY3Rpb24gaFplKGMsbCl7MSZjJiYobWUo'@;
put 'MCwiYSIsMjMpLE5lKDEsIlN1Ym1pdHRlZCIpLHllKCkpfWZ1bmN0aW9uIGZaZShjLGwpezEmYyYmKG1lKDAsImEiLDI0KSxOZSgxLCJUbyBBcHByb3ZlIikseWUoKSl9ZnVuY3Rpb24gcFplKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxKZSgxLGFaZSwyLDAsImEi'@;
put 'LDExKSxKZSgyLGxaZSwyLDAsImEiLDEyKSxKZSgzLGNaZSwyLDAsImEiLDEzKSxKZSg0LHVaZSwyLDAsImEiLDE0KSxKZSg1LGRaZSwyLDAsImEiLDE1KSxKZSg2LGhaZSwyLDAsImEiLDE2KSxKZSg3LGZaZSwyLDAsImEiLDE3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUo'@;
put 'Im5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBU1ZJWUEiPT09YS5zZXJ2ZXJUeXBlKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUo'@;
put 'ImFwcHJvdmUiKSl9fWZ1bmN0aW9uIGdaZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxOZSgzKSxxdCg0LCJjbHItaWNvbiIsOSkseWUoKSxKZSg1LHBaZSw4LDcsImNsci1kcm9wZG93bi1tZW51IiwxMCkseWUoKSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9VmUoKTtDZSgzKSxncigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19ZnVuY3Rpb24gbVplKGMsbCl7MSZjJiZxdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiB2WmUoYyxsKXsxJmMmJnF0KDAsImNsci10YWItY29udGVudCIpfWNvbnN0IF9aZT1mdW5jdGlvbigpe3Jl'@;
put 'dHVyblsiL3ZpZXcvdXNlcm5hdi9yb2xlcyJdfTtmdW5jdGlvbiBiWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiwyNikoMiwicCIsMjcpLHF0KDMsImNsci1pY29uIiwzMiksTmUoNCwiIFJvbGVzICIpLHllKCkoKSxKZSg1LHZaZSwxLDAsImNsci10YWItY29u'@;
put 'dGVudCIsMzApLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgicm91dGVyTGluayIsJHMoMixfWmUpKSxDZSg0KSxSZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvcm9sZXMiKSl9fWNvbnN0IHlaZT1mdW5jdGlvbigpe3JldHVyblsiL3ZpZXcv'@;
put 'dXNlcm5hdi91c2VycyJdfSx3WmU9ZnVuY3Rpb24oKXtyZXR1cm5bIi92aWV3L3VzZXJuYXYvZ3JvdXBzIl19O2Z1bmN0aW9uIENaZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWJzIiwyNSkoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjYpKDMsInAiLDI3KSxxdCg0LCJjbHItaWNvbiIs'@;
put 'MjgpLE5lKDUsIiBVc2VycyIpLHllKCkoKSxxdCg2LCJjbHItdGFiLWNvbnRlbnQiKSx5ZSgpLG1lKDcsImNsci10YWIiKSg4LCJidXR0b24iLDI2KSg5LCJwIiwyNykscXQoMTAsImNsci1pY29uIiwyOSksTmUoMTEsIiBHcm91cHMiKSx5ZSgpKCksSmUoMTIsbVplLDEsMCwiY2xyLXRhYi1j'@;
put 'b250ZW50IiwzMCkseWUoKSxKZSgxMyxiWmUsNiwzLCJjbHItdGFiIiwzMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDQseVplKSksQ2UoNiksUmUoInJvdXRlckxpbmsiLCRzKDUsd1plKSksQ2UoNCksUmUoImNscklmQWN0aXZlIixhLmlzTWFp'@;
put 'blJvdXRlKCIvdmlldy91c2VybmF2L2dyb3VwcyIpKSxDZSgxKSxSZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKX19ZnVuY3Rpb24gU1plKGMsbCl7MSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSgxLCJhIiwzMyksTmUoMiwiVGFibGVzIikseWUoKSxtZSgzLCJhIiwzNCks'@;
put 'TmUoNCwiRmlsZXMiKSx5ZSgpKCkpfWZ1bmN0aW9uIE1aZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxOZSgzKSxxdCg0LCJjbHItaWNvbiIsOSkseWUoKSxKZSg1LFNaZSw1LDAsImNsci1kcm9wZG93bi1tZW51IiwxMCkseWUo'@;
put 'KSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxncigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19Y29uc3QgeFplPVsiKiJdO2xldCBuMz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9yb3V0ZXI9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuX3Nhc1NlcnZpY2U9'@;
put 'aCx0aGlzLnNjcm9sbGVkVG9Cb3R0b209bmV3IEVyLHRoaXMuc2lkZWJhck9wZW49ITAsdGhpcy5zaWRlYmFyV2lkdGg9bnVsbCx0aGlzLnNpZGViYXJNYXhXaWR0aD1udWxsLHRoaXMucmVzaXppbmc9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5zYXNqc0Nv'@;
put 'bmZpZz10aGlzLl9zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaWRlYmFyVG9nZ2xlLnN1YnNjcmliZShhPT57dGhpcy5zaWRlYmFyT3Blbj1h'@;
put 'P2Eub3BlbjohdGhpcy5zaWRlYmFyT3Blbix0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pfW9uVHJlZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRoaXMuc2Nyb2xsZWRUb0Jv'@;
put 'dHRvbS5lbWl0KCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoYSl9Z2V0U3ViUGFnZSgpe3JldHVybiB0aGlzLl9yb3V0ZXIudXJsLnNwbGl0KCIvIilbMl19bmF2aWdhdGVUb1ZpZXdlcigpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSIiLHRo'@;
put 'aXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9cmVzaXplU3RhcnQoKXt0aGlzLnJlc2l6aW5nPSEwLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0idXNlci1zZWxlY3Q6IG5vbmUifXJlc2l6ZUVuZCgpe3RoaXMucmVz'@;
put 'aXppbmc9ITEsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSIifW9uTW91c2VNb3ZlKGEpe2lmKHRoaXMucmVzaXppbmcpe3RoaXMuc2lkZWJhcldpZHRoPWEuY2xpZW50WDtsZXQgZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l'@;
put 'KCJuYXYtdHJlZSIpWzBdO3RoaXMuc2lkZWJhcldpZHRoJiZ0aGlzLmlzT3ZlcmZsb3duKGQpJiYodGhpcy5zaWRlYmFyTWF4V2lkdGg9dGhpcy5zaWRlYmFyV2lkdGg+PTM3NT90aGlzLnNpZGViYXJXaWR0aCsxMDp0aGlzLnNpZGViYXJNYXhXaWR0aCl9fW9uTW91c2VVcChhKXt0aGlzLnJl'@;
put 'c2l6aW5nJiZ0aGlzLnJlc2l6ZUVuZCgpfWlzT3ZlcmZsb3duKGEpe3JldHVybiBhLnNjcm9sbFdpZHRoPmEuY2xpZW50V2lkdGh9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KERzKSx0dCh2bCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNpZGViYXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhzWmUsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5zaWRlYmFyTmF2PWguZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgibW91c2Vt'@;
put 'b3ZlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1vdXNlTW92ZShmKX0sMCxmZikoIm1vdXNldXAiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uTW91c2VVcChmKX0sITEsZmYpfSxvdXRwdXRzOntzY3JvbGxlZFRvQm90dG9tOiJzY3JvbGxlZFRvQm90dG9tIn0sbmdDb250ZW50U2VsZWN0b3Jz'@;
put 'OnhaZSxkZWNsczo5LHZhcnM6MTMsY29uc3RzOltbImlkIiwic2lkZWJhck5hdiJdLFsic2lkZWJhck5hdiIsIiJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBzdWItZHJvcGRvd24iLDQsIm5nSWYiXSxbImNsYXNzIiwicC0xMCIsNCwibmdJZiJdLFsxLCJuYXYt'@;
put 'ZGl2aWRlciJdLFsxLCJuYXYtdHJlZSIsMywic2Nyb2xsIl0sWzEsInJlc2l6ZS1oYW5kbGUiLDMsIm1vdXNlZG93biJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic3ViLWRyb3Bkb3duIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImRyb3Bkb3duLXRvZ2ds'@;
put 'ZSIsImJ0biIsImJ0bi1saW5rIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVy'@;
put 'TGluayIsIi92aWV3L3ZpeWEtYXBpLWV4cGxvcmVyIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L2xpbmVhZ2UiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJj'@;
put 'bHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbWV0YWRhdGEiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdiIsInJvdXRlckxpbmtBY3RpdmUiLCJh'@;
put 'Y3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvc3VibWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZp'@;
put 'ZXcvYXBwcm92ZS90b2FwcHJvdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwzLCJjbGljayJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92'@;
put 'aWV3L3ZpeWEtYXBpLWV4cGxvcmVyIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L2xpbmVhZ2UiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0'@;
put 'ZXJMaW5rIiwiL3ZpZXcvbWV0YWRhdGEiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJv'@;
put 'dXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvc3VibWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS90b2FwcHJvdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWzEs'@;
put 'InAtMTAiXSxbImNsclRhYkxpbmsiLCIiLDEsInVzZXItbmF2LWJ0biIsMywicm91dGVyTGluayJdLFsxLCJ6ZXJvLW1hcmdpbiJdLFsic2hhcGUiLCJ1c2VyIl0sWyJzaGFwZSIsInVzZXJzIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0s'@;
put 'WyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvdGFibGVzIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL2ZpbGVzIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwiY2xyLXZlcnRpY2FsLW5hdiIsMCwxKSxKZSgyLGdaZSw2LDEsImRpdiIsMiksSmUoMyxDWmUsMTQsNiwiY2xyLXRhYnMiLDMpLEplKDQsTVplLDYsMSwiZGl2IiwyKSxxdCg1LCJkaXYiLDQpLG1lKDYsImRpdiIsNSkseHQo'@;
put 'InNjcm9sbCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25UcmVlU2Nyb2xsKGYpfSksa3IoNykseWUoKSxtZSg4LCJzcGFuIiw2KSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBkLnJlc2l6ZVN0YXJ0KCl9KSx5ZSgpKCkpLDImYSYmKEh1KCJ3aWR0aCIsZC5zaWRlYmFyV2lkdGgs'@;
put 'InB4IikoIm1heC13aWR0aCIsZC5zaWRlYmFyTWF4V2lkdGgsInB4IiksZHIoImNsb3NlZCIsIWQuc2lkZWJhck9wZW4pKCJyZXNpemluZyIsZC5yZXNpemluZyksQ2UoMiksUmUoIm5nSWYiLGQuaXNNYWluUm91dGUoInZpZXciKSksQ2UoMSksUmUoIm5nSWYiLGQuaXNNYWluUm91dGUoInZp'@;
put 'ZXcvdXNlcm5hdiIpKSxDZSgxKSxSZSgibmdJZiIsZC5pc01haW5Sb3V0ZSgiaG9tZSIpKSxDZSg0KSxkcigicmVzaXppbmciLGQucmVzaXppbmcpKX0sZGVwZW5kZW5jaWVzOltaaSxrYSxFOCxjMixMcCxPcCxkZyxScCxJcCxjZyxaUSxZUSxOZixhZyxsZyxCdSxHX10sc3R5bGVzOlsiY2xy'@;
put 'LXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MjcycHg7bWluLXdpZHRoOjI3MnB4O2hlaWdodDoxMDAlO21heC13aWR0aDozNzVweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2hhZG93OjAgMCA1cHggIzAwMDAwMDFmO2JhY2tncm91bmQtY29sb3I6I2ZmZiFpbXBvcnRh'@;
put 'bnR9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAuc3VuLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjM2cHh9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LXRyZWVbX25nY29udGVudC0lQ09NUCVde2hlaWdodDox'@;
put 'MDAlO292ZXJmbG93LXk6YXV0b31jbHItdmVydGljYWwtbmF2LmNsb3NlZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6LTI3MnB4fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2l6ZS1oYW5kbGVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFi'@;
put 'c29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0Oi0zcHg7Ym9yZGVyLXJpZ2h0OjRweCBzb2xpZCAjODBiNDQxO2N1cnNvcjpjb2wtcmVzaXplO29wYWNpdHk6MDt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZS1pbi1vdXR9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAucmVz'@;
put 'aXplLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3BhY2l0eTouNX1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlLnJlc2l6aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9Y2xyLXZlcnRpY2FsLW5hdi5yZXNpemluZ1tf'@;
put 'bmdjb250ZW50LSVDT01QJV17dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH0ubmF2LWRpdmlkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfS5wYWdlLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJn'@;
put 'aW46MDtmb250LXNpemU6MThweDt0ZXh0LWFsaWduOmNlbnRlcn0uemVyby1tYXJnaW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfS51c2VyLW5hdi1idG5bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAycHh9I3NpZGViYXJOYXZbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6'@;
put 'MjAwfUBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCl7I3NpZGViYXJOYXZbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3RvcDowfX0iXX0pLGN9KSgpO2Z1bmN0aW9uIEVaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBrWmUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixqdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIEFaZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcmllc1NlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gQnQoYSksanQoVmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQsRVplLDEsMCwiY2xyLWljb24iLDEwKSxKZSg1LGtaZSwxLDAsImNsci1pY29uIiwxMSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQubGlicmFyaWVz'@;
put 'U2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBUWmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gRFplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwi'@;
put 'Y2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksVmUoKTtjb25zdCBoPSRpKDMpLGY9VmUoMikuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSx5ZSgpfX1mdW5j'@;
put 'dGlvbiBJWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwxOCwxOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgp'@;
put 'fSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSx5ZSgpLEplKDQsVFplLDEsMCwiY2xyLWljb24iLDEwKSxKZSg1LERaZSwxLDAsImNsci1pY29uIiwxMSkseWUoKSgpfWlm'@;
put 'KDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIExaZShjLGwpezEmYyYm'@;
put 'cXQoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBSWmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gT1plKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIp'@;
put 'LHllKCkpfWZ1bmN0aW9uIFBaZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxKZSgxLE9aZSwyLDAsInNwYW4iLDI5KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIsYSl9fWZ1bmN0aW9uIEZaZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1WbigpO21lKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkubmdWYXIsXz1WZSgpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdCxXPVZlKCk7cmV0dXJuIGp0KGY/IiI6Vy5vblRhYmxlQ2xpY2soXyxU'@;
put 'KSl9KSxWcigyLDIyKSxKZSgzLExaZSwxLDAsImNsci1pY29uIiwyMyksSmUoNCxSWmUsMSwwLCJjbHItaWNvbiIsMjQpLHpyKCksTmUoNSkseWUoKSxKZSg2LFBaZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDI1KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9VmUoKS4kaW1w'@;
put 'bGljaXQsaD1WZSgyKS4kaW1wbGljaXQsZj1WZSgpO0NlKDEpLGRyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoInRhYmxlLWFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxDZSgxKSxSZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxDZSgxKSxSZSgibmdTd2l0'@;
put 'Y2hDYXNlIiwhMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITEpLENlKDEpLGdyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIEhaZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiKSxKZSgxLEZaZSw3LDgsImNsci10b29sdGlwIiwyMCkseWUoKSks'@;
put 'MiZjKXtjb25zdCBhPWwuaW5kZXgsZD1WZSgzKTtDZSgxKSxSZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIE5aZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDE1KSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBfLnRyZWVOb2RlQ2xpY2tlZChoLGYpLGp0KF8ubGliPWYuTElCUkFSWVJFRil9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRp'@;
put 'bXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDE2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixqdChmLmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxxdCgyLCJj'@;
put 'bHItaWNvbiIsMTcpLE5lKDMpLHllKCksSmUoNCxJWmUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxKZSg1LEhaZSwyLDEsImNsci10cmVlLW5vZGUiLDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBh'@;
put 'bmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxncigiICIsYS5MSUJSQVJZUkVGLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVzKSxDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBWWmUoYyxsKXtp'@;
put 'ZigxJmMmJihWcigwKSxKZSgxLE5aZSw2LDcsImNsci10cmVlLW5vZGUiLDE0KSx6cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIEJaZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMzApKDEsImRpdiIsMzEpKDIsInNwYW4i'@;
put 'LDMyKSxOZSgzLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkoKSl9ZnVuY3Rpb24galplKGMsbCl7MSZjJiYobWUoMCwiaDMiLDM2KSxOZSgxLCIgUGxlYXNlIHNlbGVjdCBhIHRhYmxlICIpLHllKCkpfWZ1bmN0aW9uIHpaZShjLGwpezEmYyYmKG1lKDAsImgzIiwzNiksTmUoMSwiIE5vIEVkaXRh'@;
put 'YmxlIFRhYmxlcyBDb25maWd1cmVkICIpLHllKCkpfWZ1bmN0aW9uIFVaZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzMpLHF0KDEsImNsci1pY29uIiwzNCksSmUoMixqWmUsMiwwLCJoMyIsMzUpLEplKDMselplLDIsMCwiaDMiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgy'@;
put 'KSxSZSgibmdJZiIsKG51bGw9PWEudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksQ2UoMSksUmUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPDEpfX1sZXQgWlplPSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmhlbHBlclNlcnZpY2U9Zix0aGlzLmV2ZW50U2VydmljZT1fLHRoaXMuc2FzU2VydmljZT1ULHRoaXMudHJlZU5vZGVMaWJyYXJp'@;
put 'ZXM9bnVsbCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmxvYWRpbmc9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9Y29sbGFwc2VMaWJyYXJ5SXRl'@;
put 'bXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWUlEIT09ZC5MSUJSQVJZSUQmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJy'@;
put 'YXJ5T25DbGljayhhLGQpe2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5leHBhbmRlZCYmIXRoaXMudGFibGUmJnRoaXMuc2VsZWN0TGlicmFyeShhLCExLGQpLHRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9c2VsZWN0TGlicmFyeShhLGQsaCl7aC5sb2FkaW5n'@;
put 'VGFibGVzPSEwO2xldCBmLF89W107aWYodGhpcy5saWJzQW5kVGFibGVzJiYoZj10aGlzLmxpYnNBbmRUYWJsZXNbYV0sdGhpcy50YWJsZT12b2lkIDAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hKSl7bGV0IFQ9Zi5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuLTE9PT1fLmluZGV4T2Yo'@;
put 'VykmJihfLnB1c2goVyksITApfSk7dGhpcy50YWJsZXM9VCxHbi5lZGl0b3IubGlicmFyaWVzPXRoaXMubGlicmFyaWVzfUduLmVkaXRvci5saWJyYXJ5PWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0hMH1zZWxlY3RUYWJsZShh'@;
put 'LGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2gubGliVGFiPWgubGliKyIuIitoLnRhYmxlLGguc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLEduLmVkaXRvci50YWJsZT1hLGR8fGguY2xlYXJHbG9iYWxzRmlsdGVyKCl9KSgpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe0du'@;
put 'LmVkaXRvci5maWx0ZXIubGliZHM9IiIsR24uZWRpdG9yLmZpbHRlci53aGVyZUNsYXVzZT0iIixHbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIsR24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEduLmVkaXRvci5maWx0ZXIudmFscz1bXSxHbi5lZGl0b3IuZmlsdGVyLmNvbHM9W119'@;
put 'bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJT'@;
put 'ZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnRyZWVOb2RlTGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZUkVGIiksR24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy50YWJsZT1hLHRoaXMu'@;
put 'bGliPWQuTElCUkFSWVJFRix0aGlzLnNlbGVjdFRhYmxlKGEpLHRoaXMuZWRpdFRhYmxlKCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWIrIi4iK3RoaXMudGFibGUpfWdldExpYnJhcnlUYWJsZVN0YXRlKCl7aWYobnVsbCE9PUduLmVk'@;
put 'aXRvci50cmVlTm9kZUxpYnJhcmllcyYmKHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9R24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzKSwiIiE9PUduLmVkaXRvci5saWJyYXJ5KXt0aGlzLmxpYj1Hbi5lZGl0b3IubGlicmFyeTtsZXQgYT1udWxsO3RoaXMudHJlZU5vZGVMaWJyYXJpZXMmJihh'@;
put 'PXRoaXMudHJlZU5vZGVMaWJyYXJpZXMuZmluZChkPT5kLkxJQlJBUllSRUY9PT10aGlzLmxpYikpLHRoaXMuc2VsZWN0TGlicmFyeShHbi5lZGl0b3IubGlicmFyeSwhMCxhKX19Z2V0RnJvbUdsb2JhbHMoKXt0aGlzLmxpYnNBbmRUYWJsZXM9R24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsdGhp'@;
put 'cy5saWJyYXJpZXM9R24uZWRpdG9yLmxpYnJhcmllcyx0aGlzLmdldExpYnJhcnlUYWJsZVN0YXRlKCksdGhpcy5sb2FkaW5nPSExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe0duLmVkaXRvci5zdGFydHVwU2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0'@;
put 'dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQoR2wpLHR0KEMwKSx0dChUYyksdHQodmwpLHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbImhvbWUtY29tcG9uZW50Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0s'@;
put 'WzEsImNhcmQtYmxvY2siXSxbImNsYXNzIiwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxh'@;
put 'Y2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMi'@;
put 'LDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRl'@;
put 'ZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9j'@;
put 'b21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFw'@;
put 'ZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBv'@;
put 'c2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzQsIm5nSWYiXSxbMSwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFy'@;
put 'ZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFy'@;
put 'IikoMSwiY2xyLXRyZWUiKSxKZSgyLEFaZSw2LDMsImNsci10cmVlLW5vZGUiLDApLEplKDMsVlplLDIsMSwibmctY29udGFpbmVyIiwxKSx5ZSgpKCksbWUoNCwiZGl2IiwyKSg1LCJkaXYiLDMpLEplKDYsQlplLDQsMCwiZGl2Iiw0KSxKZSg3LFVaZSw0LDIsImRpdiIsNSkseWUoKSgpKSwy'@;
put 'JmEmJihDZSgyKSxSZSgibmdJZiIsKG51bGw9PWQudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDpkLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksQ2UoMSksUmUoIm5nRm9yT2YiLGQudHJlZU5vZGVMaWJyYXJpZXMpLENlKDMpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lm'@;
put 'IiwhZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbV2EsQnMsT3MsZGQsZzEsRHAsa2EsWnUsYzIsZjEsamIsVWIsemIsbjMseHMsWmksbmQsdGgsVTddLHN0eWxlczpbImNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1z'@;
put 'cGFjZTpub3dyYXB9LmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3BhZGRpbmc6MH0ubm8tdGFibGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoxMDAlfSAgY2xyLWljb24uaXMtYmx1ZSwgICBjbHItaWNvbi5p'@;
put 'cy1pbmZve2ZpbGw6IzZhOTIzNX0uc3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0iXX0pLGN9KSgpO2NvbnN0IFlaZT1j'@;
put 'PT57Zm9yKGNvbnN0IGwgaW4gYylpZigiX19yb3dOdW1fXyIhPT1sKXJldHVybiExO3JldHVybiEwfSxkVT1jPT57Y29uc3QgYT1jLm1hdGNoKC9SXFsoXGQrKVxdQ1xbKFxkKylcXS8pO3JldHVybiBhP3tyb3c6cGFyc2VJbnQoYVsxXSwxMCksY29sdW1uOnBhcnNlSW50KGFbMl0sMTApfTpu'@;
put 'dWxsfSxPc2U9KGMsbCk9PntpZihjLnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYoYz1jLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxjLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBhPWRVKGMpO2lmKGEpe2NvbnN0e3JvdzpkLGNvbHVtbjpofT1hO2M9RGwudXRpbHMuZW5jb2Rl'@;
put 'X2NlbGwoe3I6ZC0xLGM6aC0xfSl9fWlmKGMuc3RhcnRzV2l0aCgiTUFUQ0ggIikpe2xldCBhPSIiO2NvbnN0IGQ9Yy5tYXRjaCgvQ1xbXGQrXF06KC4rKS8pO2QmJihhPWRbMV0pO2NvbnN0IGY9Yy5zcGxpdCgiICIpWzFdO2xldCBfPSIiLFQ9LTEsVz0iIjtpZihpc05hTihOdW1iZXIoZikp'@;
put 'P189ZjpUPXBhcnNlSW50KGYpLC0xIT09VCl7Y29uc3Qgd2U9bFtULTFdO2Zvcihjb25zdCBFZSBpbiB3ZSlpZigiX19yb3dOdW1fXyIhPT1FZSYmd2VbRWVdPT09YSl7Vz1FZStUO2JyZWFrfX1lbHNlIGZvcihsZXQgd2U9MDt3ZTxsLmxlbmd0aDt3ZSsrKWlmKGxbd2VdW19dPT09YSl7Vz1f'@;
put 'Kyh3ZSsxKTticmVha31jb25zdCBpZT1EbC51dGlscy5kZWNvZGVfY2VsbChXKSxwZT1kVShjKTtpZihwZSl7Y29uc3R7cm93OndlLGNvbHVtbjpFZX09cGU7Yz1EbC51dGlscy5lbmNvZGVfY2VsbCh7cjppZS5yK3dlLGM6aWUuYytFZX0pfX1yZXR1cm4gY30scVplPVsiZmlsZVVwbG9hZElu'@;
put 'cHV0Il07ZnVuY3Rpb24gS1plKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyOCkscXQoMSwiY2xyLXNwaW5uZXIiLDI5KSx5ZSgpKX1mdW5jdGlvbiBYWmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24gSlplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xy'@;
put 'LWljb24iLDMxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBoLnNlYXJjaFN0cmluZz0iIixqdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gUVplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiY2xy'@;
put 'LXRyZWUtbm9kZSIpKDIsImJ1dHRvbiIsMzIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS54bG1hcE9uQ2xpY2soZikpfSkscXQoMywiY2xyLWljb24iLDMzKSxOZSg0KSx5ZSgpKCksenIoKX1pZigyJmMpe2NvbnN0IGE9bC4k'@;
put 'aW1wbGljaXQsZD1WZSgpO0NlKDIpLGRyKCJ0YWJsZS1hY3RpdmUiLGQuaXNBY3RpdmVYTE1hcChhLmlkKSksQ2UoMiksZ3IoIiAiLGEuaWQsIiAiKX19ZnVuY3Rpb24gZVllKGMsbCl7MSZjJiYobWUoMCwiaDMiLDM3KSxOZSgxLCIgUGxlYXNlIHNlbGVjdCBhIG1hcCAiKSx5ZSgpKX1mdW5j'@;
put 'dGlvbiB0WWUoYyxsKXsxJmMmJihtZSgwLCJoMyIsMzcpLE5lKDEsIiBObyBleGNlbCBtYXAgaXMgZm91bmQgIikseWUoKSl9ZnVuY3Rpb24gblllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzNCkscXQoMSwiY2xyLWljb24iLDM1KSxKZSgyLGVZZSwyLDAsImgzIiwzNiksSmUoMyx0WWUs'@;
put 'MiwwLCJoMyIsMzYpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg+MCksQ2UoMSksUmUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aDwxKX19ZnVuY3Rpb24gclllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzOCkoMSwic3BhbiIsMzkpLE5l'@;
put 'KDIsIiBMb2FkaW5nLi4uICIpLHllKCksbWUoMywiZGl2IikoNCwiaDQiKSxOZSg1KSx5ZSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoNSksb3IoYS5pc0xvYWRpbmdEZXNjKX19ZnVuY3Rpb24gaVllKGMsbCl7MSZjJiZxdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBvWWUo'@;
put 'YyxsKXsxJmMmJnF0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIHNZZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gYVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw0MCkseHQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQo'@;
put 'VmUoKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLG1lKDEsImNsci10YWJzIikoMiwiY2xyLXRhYiIpKDMsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5SdWxlcyl9KSxOZSg0LCJS'@;
put 'dWxlcyIpLHllKCksSmUoNSxpWWUsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDQyKSx5ZSgpLG1lKDYsImNsci10YWIiKSg3LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uRGF0YSl9'@;
put 'KSxOZSg4LCJEYXRhIikseWUoKSxKZSg5LG9ZZSwxLDAsImNsci10YWItY29udGVudCIsNDIpLHllKCkoKSxKZSgxMCxzWWUsMSwwLCJuZy1jb250YWluZXIiLDQzKSxtZSgxMSwiZGl2Iiw0NCkoMTIsImgzIiw0NSksTmUoMTMpLHllKCksbWUoMTQsImkiLDQ1KSxOZSgxNSkseWUoKSxtZSgx'@;
put 'NiwiaDUiLDQ1KSxOZSgxNywiIFJ1bGVzIFNvdXJjZTogIiksbWUoMTgsImEiLDQ2KSxOZSgxOSkseWUoKSgpLG1lKDIwLCJoNSIsNDUpLE5lKDIxLCIgVGFyZ2V0IGRhdGFzZXQ6ICIpLG1lKDIyLCJhIiw0NiksTmUoMjMpLHllKCkoKSgpLG1lKDI0LCJkaXYiLDQ3KSxxdCgyNSwiaG90LXRh'@;
put 'YmxlIiw0OCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9JGkoNDEpO0NlKDUpLFJlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXMpLENlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uRGF0YSksQ2UoMSks'@;
put 'UmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLENlKDMpLGdyKCIgIixhLnNlbGVjdGVkWExNYXAuaWQsIiAiKSxDZSgyKSxvcihhLnNlbGVjdGVkWExNYXAuZGVzY3JpcHRpb24pLENlKDMpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2EucnVsZXNTb3VyY2UpLENlKDEpLGdyKCIgIixh'@;
put 'LnJ1bGVzU291cmNlLCIgIiksQ2UoMyksUmUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTKSxDZSgxKSxncigiICIsYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTLCIgIiksQ2UoMiksUmUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9y'@;
put 'dFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXM6YS54bERhdGEpKCJjb2xIZWFkZXJzIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXNIZWFkZXJzOmEueGxVcGxvYWRI'@;
put 'ZWFkZXIpKCJjb2x1bW5zIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXNDb2x1bW5zOmEueGxVcGxvYWRDb2x1bW5zKSgiZmlsdGVycyIsITApKCJoZWlnaHQiLCIxMDAlIikoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hlY2tlcikoImNlbGxzIixh'@;
put 'LmdldENlbGxDb25maWd1cmF0aW9uKSgibWF4Um93cyIsYS5ob3RUYWJsZU1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgicm93SGVhZGVycyIsYS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLDE1KSgicm93SGVpZ2h0cyIsMjApKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxl'@;
put 'TGljZW5zZUtleSl9fWZ1bmN0aW9uIGxZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25TaG93VXBsb2FkTW9kYWwoKSl9KSxxdCgyLCJjbHItaWNvbiIs'@;
put 'NTMpLG1lKDMsInNwYW4iKSxOZSg0LCJVcGxvYWQiKSx5ZSgpKCkoKX19ZnVuY3Rpb24gY1llKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5zdWJtaXRFeGNl'@;
put 'bCgpKX0pLHF0KDIsImNsci1pY29uIiw1MyksbWUoMywic3BhbiIpLE5lKDQsIlN1Ym1pdCIpLHllKCkoKSgpfX1mdW5jdGlvbiB1WWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDU0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0'@;
put 'KGEpLGp0KFZlKDIpLmRpc2NhcmRFeHRyYWN0ZWREYXRhKCkpfSkscXQoMiwiY2xyLWljb24iLDU1KSxtZSgzLCJzcGFuIiksTmUoNCwiRGlzY2FyZCIpLHllKCkoKSgpfX1mdW5jdGlvbiBkWWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ5KSxKZSgxLGxZZSw1LDAsImRpdiIsNTApLEpl'@;
put 'KDIsY1llLDUsMCwiZGl2Iiw1MCksSmUoMyx1WWUsNSwwLCJkaXYiLDUwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1VwbG9hZCksQ2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJl'@;
put 'YWR5VG9TdWJtaXQpLENlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0KX19dmFyIHlkPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9NYXBTZWxlY3RlZD0wXT0iTm9NYXBTZWxlY3RlZCIsY1tjLkZldGNoaW5nUnVsZXM9MV09IkZldGNoaW5nUnVs'@;
put 'ZXMiLGNbYy5SZWFkeVRvVXBsb2FkPTJdPSJSZWFkeVRvVXBsb2FkIixjW2MuRXh0cmFjdGluZ0RhdGE9M109IkV4dHJhY3RpbmdEYXRhIixjW2MuUmVhZHlUb1N1Ym1pdD00XT0iUmVhZHlUb1N1Ym1pdCIsY1tjLlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhPTVdPSJTdWJtaXR0aW5nRXh0cmFj'@;
put 'dGVkRGF0YSIsY1tjLlN1Ym1pdHRpbmc9Nl09IlN1Ym1pdHRpbmciLGN9KHlkfHx7fSksWjc9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SdWxlcz0wXT0iUnVsZXMiLGNbYy5EYXRhPTFdPSJEYXRhIixjfShaN3x8e30pO2xldCBQc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LF8sVCxXKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9Xyx0aGlzLnNhc1N0b3JlU2VydmljZT1ULHRoaXMuc2FzU2VydmljZT1XLHRoaXMuY29udGVudENvbnRhaW5lckNsYXNz'@;
put 'PSEwLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IGVoLHRoaXMuU3RhdHVzRW51bT15ZCx0aGlzLlRhYnNFbnVtPVo3LHRoaXMuc2VsZWN0ZWRUYWI9WjcuUnVsZXMsdGhpcy5ydWxlc1NvdXJjZT1Hbi5kY0xpYisiLk1QRV9YTE1BUF9SVUxFUyIsdGhpcy54bG1hcHM9W10sdGhp'@;
put 'cy5zZWxlY3RlZFhMTWFwPXZvaWQgMCx0aGlzLnNlYXJjaFN0cmluZz0iIix0aGlzLnhsbWFwc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXlkLk5vTWFwU2VsZWN0ZWQsdGhpcy54bG1hcFJ1bGVzSGVhZGVycz1bIlhMTUFQ'@;
put 'X1NIRUVUIiwiWExNQVBfUkFOR0VfSUQiLCJYTE1BUF9TVEFSVCIsIlhMTUFQX0ZJTklTSCJdLHRoaXMueGxtYXBSdWxlc0NvbHVtbnM9W3tkYXRhOiJYTE1BUF9TSEVFVCJ9LHtkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJYTE1BUF9TVEFSVCJ9LHtkYXRhOiJYTE1BUF9GSU5JU0gi'@;
put 'fV0sdGhpcy54bG1hcFJ1bGVzPVtdLHRoaXMueGxVcGxvYWRIZWFkZXI9WyJYTE1BUF9SQU5HRV9JRCIsIlJPV19OTyIsIkNPTF9OTyIsIlZBTFVFX1RYVCJdLHRoaXMueGxVcGxvYWRDb2x1bW5zPVt7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiUk9XX05PIn0se2RhdGE6IkNPTF9O'@;
put 'TyJ9LHtkYXRhOiJWQUxVRV9UWFQifV0sdGhpcy54bERhdGE9W10sdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLnVwbG9hZGVyPW5ldyBSb2UsdGhpcy5saWNl'@;
put 'bmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMH14bG1hcE9uQ2xpY2soYSl7YS5pZCE9'@;
put 'PXRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQmJih0aGlzLnNlbGVjdGVkWExNYXA9YSx0aGlzLnhsRGF0YT1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExp'@;
put 'c3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy5zZWxlY3RlZFRhYj1aNy5SdWxlcyx0aGlzLnZpZXdYTE1hcFJ1bGVzKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUvZmlsZXMvIithLmlkKSl9eGxtYXBMaXN0T25GaWx0ZXIoKXt0aGlzLnhsbWFwcz10aGlz'@;
put 'LnNlYXJjaFN0cmluZy5sZW5ndGg+MD9Hbi54bG1hcHMuZmlsdGVyKGQ9PmQuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk6R24ueGxtYXBzfWlzQWN0aXZlWExNYXAoYSl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQ9PT1h'@;
put 'fW1heFdpZHRoQ2hlY2tlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRDZWxsQ29uZmlndXJhdGlvbigpe3JldHVybntyZWFkT25seTohMH19cm93SGVhZGVycygpe3JldHVybiIgIn1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSEwfWZpbGVPdmVyQmFzZShh'@;
put 'KXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1nZXRGaWxlRGVzYyhhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYoIWYpcmV0dXJuO2NvbnN0IF89Zi5uYW1lO2lmKHRoaXMuZmlsZW5hbWU9XywieGxzIj09PV8uc2xpY2UoXy5sYXN0SW5k'@;
put 'ZXhPZigiLiIpKzEsXy5sYXN0SW5kZXhPZigiLiIpKzQpLnRvTG93ZXJDYXNlKCkpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iRXh0cmFjdGluZyBEYXRhIix0aGlzLnN0YXR1cz15ZC5FeHRyYWN0aW5nRGF0YTtjb25zdCBX'@;
put 'PW5ldyBGaWxlUmVhZGVyO1cub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGllPWZpKGZ1bmN0aW9uKihwZSl7Y29uc3Qgd2U9KGM9Pntjb25zdCBsPW5ldyBVaW50OEFycmF5KGMpO2xldCBhPSIiO2NvbnN0IGQ9bC5ieXRlTGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspYSs9U3RyaW5nLmZyb21D'@;
put 'aGFyQ29kZShsW2hdKTtyZXR1cm4gYX0pKHBlLnRhcmdldC5yZXN1bHQpO2xldCBFZTtjb25zdCBaZT17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITF9O3RyeXtFZT1EbC5yZWFkKHdlLHsuLi5aZX0p'@;
put 'fWNhdGNoKGl0KXtoLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGl0LHZvaWQgMCwiRXJyb3IgcmVhZGluZyBmaWxlIil9aWYoIUVlKXJldHVybiBoLmlzTG9hZGluZz0hMSxoLmlzTG9hZGluZ0Rlc2M9IiIsaC5zdGF0dXM9eWQuUmVhZHlUb1VwbG9hZCx2b2lkIGgudXBsb2Fk'@;
put 'ZXIucXVldWUucG9wKCk7aC5leHRyYWN0RGF0YShFZSl9KTtyZXR1cm4gZnVuY3Rpb24ocGUpe3JldHVybiBpZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLFcucmVhZEFzQXJyYXlCdWZmZXIoZil9ZWxzZSB0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5z'@;
put 'dGF0dXM9eWQuUmVhZHlUb1VwbG9hZCx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMuZmlsZW5hbWUrJzwvYj4iLiBQbGVhc2Ug'@;
put 'dXBsb2FkIGV4Y2VsIGZpbGUuJyl9ZGlzY2FyZEV4dHJhY3RlZERhdGEoKXt0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9eWQuUmVhZHlUb1VwbG9hZCx0aGlzLnhsRGF0YT1bXSx0aGlzLnNlbGVjdGVkVGFiPVo3LlJ1bGVzLHRoaXMuZmlsZW5h'@;
put 'bWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1'@;
put 'Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMuc3VibWl0KCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMH1zdWJtaXQoKXtpZighdGhpcy5zZWxlY3RlZFhMTWFwfHwhdGhpcy54bERhdGEubGVuZ3RoKXJldHVybjt0aGlzLnN0YXR1cz15ZC5TdWJtaXR0aW5nLHRoaXMuaXNMb2FkaW5nPSEw'@;
put 'LHRoaXMuaXNMb2FkaW5nRGVzYz0iU3VibWl0dGluZyBleHRyYWN0ZWQgZGF0YSI7Y29uc3QgYT1bXTtmb3IoY29uc3QgVCBvZiB0aGlzLnVwbG9hZGVyLnF1ZXVlKWEucHVzaCh7ZmlsZTpULGZpbGVOYW1lOlQubmFtZX0pO2NvbnN0IGQ9T2JqZWN0LmtleXModGhpcy54bERhdGFbMF0pLmpv'@;
put 'aW4oIiwiKSsiXG4iK3RoaXMueGxEYXRhLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpLm1hcChUPT5PYmplY3QudmFsdWVzKFQpLmpvaW4oIiwiKSkuam9pbigiXG4iKSxmPSgoYyxsKT0+bmV3IEZpbGUoW2NdLHRoaXMuZmlsZW5hbWUrIi5jc3Yi'@;
put 'LHtsYXN0TW9kaWZpZWQ6KG5ldyBEYXRlKS5nZXRUaW1lKCl9KSkobmV3IEJsb2IoW2RdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSkpO2EucHVzaCh7ZmlsZTpmLGZpbGVOYW1lOmYubmFtZX0pLHRoaXMuc2FzU2VydmljZS51cGxvYWRGaWxlKCJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxl'@;
put 'IixhLHt0YWJsZTp0aGlzLnNlbGVjdGVkWExNYXAudGFyZ2V0RFN9KS50aGVuKFQ9PntULnNhc2pzQWJvcnQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIiIsVC5zYXNqc0Fib3J0WzBdLk1TRyx7U1lTV0FSTklOR1RFWFQ6VC5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6'@;
put 'VC5TWVNFUlJPUlRFWFQsTUFDOlQuc2FzanNBYm9ydFswXS5NQUN9KTpULnNhc3BhcmFtcyYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrVC5zYXNwYXJhbXNbMF0uRFNJRCl9KS5jYXRjaChUPT57dGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxl'@;
put 'IHVwbG9hZCIsVCl9KS5maW5hbGx5KCgpPT57dGhpcy5zdGF0dXM9eWQuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiJ9KX1leHRyYWN0RGF0YShhKXtjb25zdCBkPVtdO3RoaXMueGxtYXBSdWxlcy5mb3JFYWNoKGg9PntsZXQgZj1oLlhMTUFQ'@;
put 'X1NIRUVUO2lmKGYuc3RhcnRzV2l0aCgiLyIpKXtjb25zdCBaZT1mLnNwbGl0KCIvIilbMV0saXQ9cGFyc2VJbnQoWmUpLTE7Zj1hLlNoZWV0TmFtZXNbaXRdfWNvbnN0IF89YS5TaGVldHNbZl0sVD1EbC51dGlscy5zaGVldF90b19qc29uKF8se3JhdzohMCxoZWFkZXI6IkEiLGJsYW5rcm93'@;
put 'czohMH0pLFc9T3NlKGguWExNQVBfU1RBUlQsVCksaWU9KChjLGwsYSk9PntpZigiIj09PWwpcmV0dXJuIGM7aWYobC5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGw9bC5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksbC5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgZD1kVShsKTtp'@;
put 'ZihkKXtjb25zdHtyb3c6aCxjb2x1bW46Zn09ZCx7cjpfLGM6VH09RGwudXRpbHMuZGVjb2RlX2NlbGwoYyk7bD1EbC51dGlscy5lbmNvZGVfY2VsbCh7cjpfK2gsYzpUK2Z9KX19aWYobC5zdGFydHNXaXRoKCJNQVRDSCAiKSYmKGw9T3NlKGwsYSkpLCJMQVNURE9XTiI9PT1sKXtjb25zdHty'@;
put 'OmQsYzpofT1EbC51dGlscy5kZWNvZGVfY2VsbChjKSxmPURsLnV0aWxzLmVuY29kZV9jb2woaCk7bGV0IF89ZDtmb3IobGV0IFQ9ZCsxO1Q8YS5sZW5ndGgmJmFbVF1bZl07VCsrKV89VDtsPWYrKF8rMSl9aWYoIkJMQU5LUk9XIj09PWwpe2NvbnN0e3I6ZH09RGwudXRpbHMuZGVjb2RlX2Nl'@;
put 'bGwoYyk7bGV0IGg9ZDtmb3IobGV0IFc9ZCsxO1c8YS5sZW5ndGgmJiFZWmUoYVtXXSk7VysrKWg9VztsPU9iamVjdC5rZXlzKGFbaF0pLmZpbHRlcihXPT4iX19yb3dOdW1fXyIhPT1XKS5yZWR1Y2UoKFcsaWUpPT5pZT5XP2llOlcsIiIpKyhoKzEpfXJldHVybiBsfSkoVyxoLlhMTUFQX0ZJ'@;
put 'TklTSCxUKSxwZT1gJHtXfToke2llfWAsd2U9RGwudXRpbHMuZGVjb2RlX3JhbmdlKHBlKSxFZT1EbC51dGlscy5zaGVldF90b19qc29uKF8se3JhdzohMCxyYW5nZTpwZSxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pO2ZvcihsZXQgWmU9MDtaZTxFZS5sZW5ndGg7WmUrKyl7Y29uc3QgaXQ9'@;
put 'RWVbWmVdO2ZvcihsZXQgZXQ9d2Uucy5jLHl0PTA7ZXQ8PXdlLmUuYztldCsrLHl0Kyspe2NvbnN0IEV0PURsLnV0aWxzLmVuY29kZV9jb2woZXQpO0V0IGluIGl0JiZkLnB1c2goe0xPQURfUkVGOiIwIixYTE1BUF9JRDpoLlhMTUFQX0lELFhMTUFQX1JBTkdFX0lEOmguWExNQVBfUkFOR0Vf'@;
put 'SUQsUk9XX05POlplKzEsQ09MX05POnl0KzEsVkFMVUVfVFhUOml0W0V0XX0pfX19KSx0aGlzLnN0YXR1cz15ZC5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnhsRGF0YT1kLHRoaXMuc2VsZWN0ZWRUYWI9WjcuRGF0YX12aWV3WExN'@;
put 'YXBSdWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc2VsZWN0ZWRYTE1hcCYmKGEuaXNMb2FkaW5nPSEwLGEuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBleGNlbCBydWxlcyIsYS5zdGF0dXM9eWQuRmV0Y2hpbmdSdWxlcyx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5n'@;
put 'ZXRYTE1hcFJ1bGVzKGEuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihkPT57YS54bG1hcFJ1bGVzPWQueGxtYXBydWxlcyxhLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2FkfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLGEuaXNMb2FkaW5nPSExLGEuaXNMb2FkaW5nRGVzYz0i'@;
put 'Iil9KSgpfWxvYWQoKXt0aGlzLnhsbWFwcz1Hbi54bG1hcHMsdGhpcy54bG1hcHNMb2FkaW5nPSExO2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoYSl7Y29uc3QgZD10aGlzLnhsbWFwcy5maW5kKGg9PmguaWQ9PT1hKTtkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWQs'@;
put 'dGhpcy52aWV3WExNYXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyVmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7R24uZWRpdG9yLnN0'@;
put 'YXJ0dXBTZXQ/dGhpcy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh2bCksdHQoQzApLHR0KHcwKSx0dChHbCks'@;
put 'dHQoRHMpLHR0KGJkKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhxWmUsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1o'@;
put 'KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY29udGVudC1jb250YWluZXIiLGQuY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6NDIsdmFyczoxNixjb25zdHM6W1siY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lm'@;
put 'Il0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgSWQiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxb'@;
put 'InNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwi'@;
put 'bmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwiY2xhc3MiLCJjYXJkIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciIsNCwibmdJZiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZl'@;
put 'IiwzLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIiwiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5'@;
put 'Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxb'@;
put 'ImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJ1cGxvYWRlciIsImNoYW5nZSJd'@;
put 'LFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtLTAiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImFjdGlvbkJ1dHRv'@;
put 'bnMiLCIiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsZSJdLFsxLCJuby10'@;
put 'YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImxv'@;
put 'YWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbImNsclRhYkxpbmsiLCIiLDMsImNsaWNrIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5n'@;
put 'VGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXJvdyIsIm0tMCIsIm1iLTEwLWkiLCJ2aWV3ZXJUaXRsZSJdLFsxLCJkLWZsZXgiLCJjbHItY29sLTEyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC01LWkiXSxbMSwibWwtMTAiLDMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgt'@;
put 'MSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90LXRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImhlaWdodCIsIm1v'@;
put 'ZGlmeUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwicm93SGVhZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vuc2VLZXkiXSxbMSwiY2xyLXJvdyIsIm0tMCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFz'@;
put 'cyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItY29sLTEyIGNsci1jb2wtbGctNCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0'@;
put 'biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hh'@;
put 'cGUiLCJ0aW1lcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiksSmUoMSxLWmUsMiwwLCJkaXYiLDApLG1lKDIsImNsci10cmVlIikoMywiY2xyLXRyZWUtbm9kZSIsMSkoNCwiZGl2IiwyKSg1LCJpbnB1dCIsMyw0KSx4dCgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc2VhcmNoU3RyaW5nPWZ9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGQueGxtYXBMaXN0T25GaWx0ZXIoKX0pLHllKCksSmUoNyxYWmUsMSwwLCJjbHItaWNvbiIsNSksSmUoOCxKWmUsMSwwLCJjbHItaWNvbiIsNikseWUoKSgpLEplKDks'@;
put 'UVplLDUsMywibmctY29udGFpbmVyIiw3KSx5ZSgpKCksbWUoMTAsImRpdiIsOCksSmUoMTEsblllLDQsMiwiZGl2Iiw5KSxKZSgxMixyWWUsNiwxLCJkaXYiLDEwKSxKZSgxMyxhWWUsMjYsMjQsImRpdiIsMTEpLG1lKDE0LCJjbHItbW9kYWwiLDEyKSx4dCgiZmlsZU92ZXIiLGZ1bmN0aW9u'@;
put 'KGYpe3JldHVybiBkLmZpbGVPdmVyQmFzZShmKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZ2V0RmlsZURlc2MoZiwhMCl9KSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zaG93VXBsb2FkTW9kYWw9Zn0pLG1lKDE1LCJoMyIsMTMpLE5lKDE2'@;
put 'LCJVcGxvYWQgRmlsZSIpLHllKCksbWUoMTcsImRpdiIsMTQpKDE4LCJkaXYiLDE1KSgxOSwic3BhbiIpLE5lKDIwLCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLHllKCkoKSxtZSgyMSwiZGl2IiwxNikoMjIsImRpdiIsMTcpKDIzLCJkaXYiLDE4KSgyNCwic3BhbiIsMTkpKDI1'@;
put 'LCJsYWJlbCIsMjApLE5lKDI2LCIgQnJvd3NlICIpLHllKCkoKSxtZSgyNywiaW5wdXQiLDIxLDIyKSx4dCgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5nZXRGaWxlRGVzYyhmKX0pLHllKCkoKSgpKCkoKSgpLG1lKDI5LCJjbHItbW9kYWwiLDIzKSx4dCgiY2xyTW9kYWxPcGVuQ2hh'@;
put 'bmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT1mfSksbWUoMzAsImgzIiwxMyksTmUoMzEsIk5vdGljZSIpLHllKCksbWUoMzIsImRpdiIsMTQpKDMzLCJwIiwyNCksTmUoMzQpLHllKCkoKSxtZSgzNSwiZGl2IiwyNSkoMzYsImJ1dHRvbiIsMjYpLHh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDM3LCIgQ2FuY2VsICIpLHllKCksbWUoMzgsImJ1dHRvbiIsMjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXQoKSxkLnN1Ym1pdExpbWl0Tm90aWNlPSExfSksTmUoMzksIiBTdWJt'@;
put 'aXQgIikseWUoKSgpKCkoKSxKZSg0MCxkWWUsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyNyxrYykpLDImYSl7Y29uc3QgaD0kaSg2KTtDZSgxKSxSZSgibmdJZiIsZC54bG1hcHNMb2FkaW5nKSxDZSg0KSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixoLnZh'@;
put 'bHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsaC52YWx1ZS5sZW5ndGg+MCksQ2UoMSksUmUoIm5nRm9yT2YiLGQueGxtYXBzKSxDZSgyKSxSZSgibmdJZiIsIWQuc2VsZWN0ZWRYTE1hcCksQ2UoMSksUmUoIm5nSWYiLGQuaXNMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQuaXNMb2Fk'@;
put 'aW5nJiZkLnNlbGVjdGVkWExNYXApLENlKDEpLFJlKCJ1cGxvYWRlciIsZC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbE9wZW4iLGQuc2hvd1VwbG9hZE1vZGFsKSxDZSgx'@;
put 'MyksUmUoInVwbG9hZGVyIixkLnVwbG9hZGVyKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLnN1Ym1pdExpbWl0Tm90aWNlKSxDZSg1KSxncigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4g'@;
put 'YSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fSxkZXBlbmRlbmNpZXM6W3h5LEJ1LFdhLEJzLE9zLGRkLGcxLERwLGthLG91LHN1LEU4LFVzLGYxLExwLE9wLGRnLFJwLElwLGNn'@;
put 'LHUyLG4zLHhzLFppLHJkLFliLEVzZSxrc2VdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29u'@;
put 'dGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubm8tdGFibGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDth'@;
put 'bGlnbi1pdGVtczpjZW50ZXJ9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLm9wdGlvbnMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5zd1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjFyZW0gMHJlbSAuNXJl'@;
put 'bSAxcmVtfS52aWV3ZXJUaXRsZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcmRGbGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41'@;
put 'cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC40MzEzNzI1NDkpfS5kcm9wLWFyZWFbX25nY29udGVudC0l'@;
put 'Q09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtmb250LXNpemU6MjBweDttYXJnaW4tdG9wOjIwcHg7Y29sb3I6I2ZmZn0iXX0pLGN9KSgpO2NvbnN0IGhZZT1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJy'@;
put 'b3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCksY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDpQc2V9LHtwYXRoOiI6aWQiLGNvbXBvbmVudDpQc2V9XX1dO2xldCBmWWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbaGMuZm9yQ2hpbGQoaFllKSxoY119KSxjfSkoKTtGeigpO2xldCBwWWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbXzcsZlllLHFsLF91LEI3LG9vLFFBLEMyXX0pLGN9KSgpO2NvbnN0IGdZZT1be3BhdGg6IiIsY29tcG9uZW50Om9aZSxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVj'@;
put 'dFRvOiJ0YWJsZXMifSx7cGF0aDoidGFibGVzIixjb21wb25lbnQ6WlplfSx7cGF0aDoiZmlsZXMiLGxvYWRDaGlsZHJlbjooKT0+cFllfV19XTtsZXQgbVllPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v'@;
put 'ZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2hjLmZvckNoaWxkKGdZZSksaGNdfSksY30pKCksaFU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1'@;
put 'MDI3NWluaj1taSh7aW1wb3J0czpbbVllLHFsLF91LEI3LG9vLFFBLEMyXX0pLGN9KSgpLGZVPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9y'@;
put 'dHM6W29vLF91LG9vLHFsLEI3LHR3LEMyXX0pLGN9KSgpLEZzZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbyxxbCxm'@;
put 'VSxfNyxDc2UsTG9lLFFBLEMyXX0pLGN9KSgpO0Z6KCk7bGV0IHZZZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltGc2Usb28scWws'@;
put 'aVplLF91LF83LmZvclJvb3QoKSxCNyxDMixWNyxoVSx0dyxRQSxDc2UsZlVdfSksY30pKCkscFU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnJvdXRlcj1kfWNhbkFjdGl2YXRlKGEsZCl7cmV0dXJuISEodm9pZCAwIT09ZD8ucm9v'@;
put 'dC5xdWVyeVBhcmFtcy5mb3JjZXx8ZD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvdXBkYXRlIikmJnRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWR8fG51bGwhPT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhMT09PXRoaXMubGljZW5jZVNlcnZp'@;
put 'Y2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKSwhMSl9Y2FuRGVhY3RpdmF0ZShhLGQsaCxmKXtyZXR1cm4hKGg/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3JlZ2lzdGVyIil8fHRoaXMubGljZW5jZVNlcnZpY2UuYXBwTG9ja2Vk'@;
put 'LnZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoQzApLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gSHNlKGMsbCl7KGZ1bmN0aW9uIF9ZZShjLGwpe2lm'@;
put 'KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfWZ1bmN0aW9uIGdVKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'YXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIGx3KGMpe3JldHVybihsdz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihsKXtyZXR1cm4gdHlw'@;
put 'ZW9mIGx9OmZ1bmN0aW9uKGwpe3JldHVybiBsJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZsLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZsIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgbH0pKGMpfWZ1bmN0aW9uIEYwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB5WWUo'@;
put 'Yyl7dmFyIGw9ZnVuY3Rpb24gYlllKGMsbCl7aWYoIm9iamVjdCIhPT1sdyhjKXx8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1sdyhkKSlyZXR1cm4g'@;
put 'ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09bHcobCk/bDpTdHJpbmcobCl9KGwpKWluIGM/'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWxldCBsND17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxo'@;
put 'ZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVs'@;
put 'bCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O2Z1bmN0aW9uIE5zZShjKXtsND1jfWNvbnN0IFZzZT0vWyY8PiInXS8sd1llPW5ldyBSZWdFeHAoVnNlLnNvdXJjZSwiZyIpLEJzZT0vWzw+IiddfCYoPyEoI1xkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sQ1llPW5ldyBS'@;
put 'ZWdFeHAoQnNlLnNvdXJjZSwiZyIpLFNZZT17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sanNlPWM9PlNZZVtjXTtmdW5jdGlvbiBTdShjLGwpe2lmKGwpe2lmKFZzZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2Uod1llLGpzZSl9'@;
put 'ZWxzZSBpZihCc2UudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKENZZSxqc2UpO3JldHVybiBjfWNvbnN0IE1ZZT0vJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiB6c2UoYyl7cmV0dXJuIGMucmVwbGFjZShNWWUsKGwsYSk9PiJjb2xvbiI9PT0o'@;
put 'YT1hLnRvTG93ZXJDYXNlKCkpPyI6IjoiIyI9PT1hLmNoYXJBdCgwKT8ieCI9PT1hLmNoYXJBdCgxKT9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGEuc3Vic3RyaW5nKDIpLDE2KSk6U3RyaW5nLmZyb21DaGFyQ29kZSgrYS5zdWJzdHJpbmcoMSkpOiIiKX1jb25zdCB4WWU9LyhefFte'@;
put 'XFtdKVxeL2c7ZnVuY3Rpb24gZmEoYyxsKXtjPSJzdHJpbmciPT10eXBlb2YgYz9jOmMuc291cmNlLGw9bHx8IiI7Y29uc3QgYT17cmVwbGFjZTooZCxoKT0+KGg9KGg9aC5zb3VyY2V8fGgpLnJlcGxhY2UoeFllLCIkMSIpLGM9Yy5yZXBsYWNlKGQsaCksYSksZ2V0UmVnZXg6KCk9Pm5ldyBS'@;
put 'ZWdFeHAoYyxsKX07cmV0dXJuIGF9Y29uc3QgRVllPS9bXlx3Ol0vZyxrWWU9L14kfF5bYS16XVthLXowLTkrLi1dKjp8Xls/I10vaTtmdW5jdGlvbiBVc2UoYyxsLGEpe2lmKGMpe2xldCBkO3RyeXtkPWRlY29kZVVSSUNvbXBvbmVudCh6c2UoYSkpLnJlcGxhY2UoRVllLCIiKS50b0xvd2Vy'@;
put 'Q2FzZSgpfWNhdGNoe3JldHVybiBudWxsfWlmKDA9PT1kLmluZGV4T2YoImphdmFzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoInZic2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJkYXRhOiIpKXJldHVybiBudWxsfWwmJiFrWWUudGVzdChhKSYmKGE9ZnVuY3Rpb24gSVllKGMsbCl7ZVRbIiAi'@;
put 'K2NdfHwoZVRbIiAiK2NdPUFZZS50ZXN0KGMpP2MrIi8iOm5UKGMsIi8iLCEwKSk7Y29uc3QgYT0tMT09PShjPWVUWyIgIitjXSkuaW5kZXhPZigiOiIpO3JldHVybiIvLyI9PT1sLnN1YnN0cmluZygwLDIpP2E/bDpjLnJlcGxhY2UoVFllLCIkMSIpK2w6Ii8iPT09bC5jaGFyQXQoMCk/YT9s'@;
put 'OmMucmVwbGFjZShEWWUsIiQxIikrbDpjK2x9KGwsYSkpO3RyeXthPWVuY29kZVVSSShhKS5yZXBsYWNlKC8lMjUvZywiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiBhfWNvbnN0IGVUPXt9LEFZZT0vXlteOl0rOlwvKlteL10qJC8sVFllPS9eKFteOl0rOilbXHNcU10qJC8sRFllPS9e'@;
put 'KFteOl0rOlwvKlteL10qKVtcc1xTXSokLyx0VD17ZXhlYzpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFpzZShjLGwpe2NvbnN0IGQ9Yy5yZXBsYWNlKC9cfC9nLChmLF8sVCk9PntsZXQgVz0hMSxpZT1fO2Zvcig7LS1pZT49MCYmIlxcIj09PVRbaWVdOylXPSFXO3JldHVybiBXPyJ8IjoiIHwi'@;
put 'fSkuc3BsaXQoLyBcfC8pO2xldCBoPTA7aWYoZFswXS50cmltKCl8fGQuc2hpZnQoKSxkLmxlbmd0aD4wJiYhZFtkLmxlbmd0aC0xXS50cmltKCkmJmQucG9wKCksZC5sZW5ndGg+bClkLnNwbGljZShsKTtlbHNlIGZvcig7ZC5sZW5ndGg8bDspZC5wdXNoKCIiKTtmb3IoO2g8ZC5sZW5ndGg7'@;
put 'aCsrKWRbaF09ZFtoXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIGR9ZnVuY3Rpb24gblQoYyxsLGEpe2NvbnN0IGQ9Yy5sZW5ndGg7aWYoMD09PWQpcmV0dXJuIiI7bGV0IGg9MDtmb3IoO2g8ZDspe2NvbnN0IGY9Yy5jaGFyQXQoZC1oLTEpO2lmKGYhPT1sfHxhKXtpZihm'@;
put 'PT09bHx8IWEpYnJlYWs7aCsrfWVsc2UgaCsrfXJldHVybiBjLnNsaWNlKDAsZC1oKX1mdW5jdGlvbiBZc2UoYyxsLGEsZCl7Y29uc3QgaD1sLmhyZWYsZj1sLnRpdGxlP1N1KGwudGl0bGUpOm51bGwsXz1jWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKTtpZigiISIhPT1jWzBdLmNo'@;
put 'YXJBdCgwKSl7ZC5zdGF0ZS5pbkxpbms9ITA7Y29uc3QgVD17dHlwZToibGluayIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDpfLHRva2VuczpkLmlubGluZVRva2VucyhfKX07cmV0dXJuIGQuc3RhdGUuaW5MaW5rPSExLFR9cmV0dXJue3R5cGU6ImltYWdlIixyYXc6YSxocmVmOmgsdGl0'@;
put 'bGU6Zix0ZXh0OlN1KF8pfX1jbGFzcyByVHtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8bDR9c3BhY2UobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyhsKTtpZihhJiZhWzBdLmxlbmd0aD4wKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OmFbMF19fWNvZGUo'@;
put 'bCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzphWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/'@;
put 'ZDpuVChkLCJcbiIpfX19ZmVuY2VzKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5mZW5jZXMuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0saD1mdW5jdGlvbiBPWWUoYyxsKXtjb25zdCBhPWMubWF0Y2goL14oXHMrKSg/OmBgYCkvKTtpZihudWxsPT09YSlyZXR1cm4gbDtjb25zdCBk'@;
put 'PWFbMV07cmV0dXJuIGwuc3BsaXQoIlxuIikubWFwKGg9Pntjb25zdCBmPWgubWF0Y2goL15ccysvKTtpZihudWxsPT09ZilyZXR1cm4gaDtjb25zdFtfXT1mO3JldHVybiBfLmxlbmd0aD49ZC5sZW5ndGg/aC5zbGljZShkLmxlbmd0aCk6aH0pLmpvaW4oIlxuIil9KGQsYVszXXx8IiIpO3Jl'@;
put 'dHVybnt0eXBlOiJjb2RlIixyYXc6ZCxsYW5nOmFbMl0/YVsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzJdLHRleHQ6aH19fWhlYWRpbmcobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhsKTtpZihhKXtsZXQgZD1h'@;
put 'WzJdLnRyaW0oKTtpZigvIyQvLnRlc3QoZCkpe2NvbnN0IGg9blQoZCwiIyIpOyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFofHwvICQvLnRlc3QoaCkpJiYoZD1oLnRyaW0oKSl9cmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOmFbMV0ubGVuZ3RoLHRleHQ6ZCx0b2tlbnM6'@;
put 'dGhpcy5sZXhlci5pbmxpbmUoZCl9fX1ocihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJociIscmF3OmFbMF19fWJsb2NrcXVvdGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhsKTtpZihhKXtjb25z'@;
put 'dCBkPWFbMF0ucmVwbGFjZSgvXiAqPlsgXHRdPy9nbSwiIiksaD10aGlzLmxleGVyLnN0YXRlLnRvcDt0aGlzLmxleGVyLnN0YXRlLnRvcD0hMDtjb25zdCBmPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoZCk7cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUudG9wPWgse3R5cGU6ImJsb2NrcXVvdGUi'@;
put 'LHJhdzphWzBdLHRva2VuczpmLHRleHQ6ZH19fWxpc3QobCl7bGV0IGE9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMobCk7aWYoYSl7bGV0IGQsaCxmLF8sVCxXLGllLHBlLHdlLEVlLFplLGl0LGV0PWFbMV0udHJpbSgpO2NvbnN0IHl0PWV0Lmxlbmd0aD4xLEV0PXt0eXBlOiJsaXN0Iixy'@;
put 'YXc6IiIsb3JkZXJlZDp5dCxzdGFydDp5dD8rZXQuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O2V0PXl0P2BcXGR7MSw5fVxcJHtldC5zbGljZSgtMSl9YDpgXFwke2V0fWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYoZXQ9eXQ/ZXQ6IlsqKy1dIik7Y29uc3QgU3Q9bmV3IFJl'@;
put 'Z0V4cChgXiggezAsM30ke2V0fSkoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpYCk7Zm9yKDtsJiYoaXQ9ITEsKGE9U3QuZXhlYyhsKSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QobCkpOyl7aWYoZD1hWzBdLGw9bC5zdWJzdHJpbmcoZC5sZW5ndGgpLHBlPWFbMl0uc3BsaXQoIlxu'@;
put 'IiwxKVswXS5yZXBsYWNlKC9eXHQrLyxubj0+IiAiLnJlcGVhdCgzKm5uLmxlbmd0aCkpLHdlPWwuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KF89MixaZT1wZS50cmltTGVmdCgpKTooXz1hWzJdLnNlYXJjaCgvW14gXS8pLF89Xz40PzE6XyxaZT1wZS5zbGljZShf'@;
put 'KSxfKz1hWzFdLmxlbmd0aCksVz0hMSwhcGUmJi9eICokLy50ZXN0KHdlKSYmKGQrPXdlKyJcbiIsbD1sLnN1YnN0cmluZyh3ZS5sZW5ndGgrMSksaXQ9ITApLCFpdCl7Y29uc3Qgbm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgo'@;
put 'PzpbIFx0XVteXFxuXSopPyg/OlxcbnwkKSlgKSx2bj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxfLTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksTm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19KD86XGBc'@;
put 'YFxgfH5+filgKSxjcj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxfLTEpfX0jYCk7Zm9yKDtsJiYoRWU9bC5zcGxpdCgiXG4iLDEpWzBdLHdlPUVlLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHdlPXdlLnJlcGxhY2UoL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSksIShO'@;
put 'bi50ZXN0KHdlKXx8Y3IudGVzdCh3ZSl8fG5uLnRlc3Qod2UpfHx2bi50ZXN0KGwpKSk7KXtpZih3ZS5zZWFyY2goL1teIF0vKT49X3x8IXdlLnRyaW0oKSlaZSs9IlxuIit3ZS5zbGljZShfKTtlbHNle2lmKFd8fHBlLnNlYXJjaCgvW14gXS8pPj00fHxObi50ZXN0KHBlKXx8Y3IudGVzdChw'@;
put 'ZSl8fHZuLnRlc3QocGUpKWJyZWFrO1plKz0iXG4iK3dlfSFXJiYhd2UudHJpbSgpJiYoVz0hMCksZCs9RWUrIlxuIixsPWwuc3Vic3RyaW5nKEVlLmxlbmd0aCsxKSxwZT13ZS5zbGljZShfKX19RXQubG9vc2V8fChpZT9FdC5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KGQpJiYoaWU9ITAp'@;
put 'KSx0aGlzLm9wdGlvbnMuZ2ZtJiYoaD0vXlxbWyB4WF1cXSAvLmV4ZWMoWmUpLGgmJihmPSJbIF0gIiE9PWhbMF0sWmU9WmUucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpKSxFdC5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpkLHRhc2s6ISFoLGNoZWNrZWQ6Zixsb29zZToh'@;
put 'MSx0ZXh0OlplfSksRXQucmF3Kz1kfUV0Lml0ZW1zW0V0Lml0ZW1zLmxlbmd0aC0xXS5yYXc9ZC50cmltUmlnaHQoKSxFdC5pdGVtc1tFdC5pdGVtcy5sZW5ndGgtMV0udGV4dD1aZS50cmltUmlnaHQoKSxFdC5yYXc9RXQucmF3LnRyaW1SaWdodCgpO2NvbnN0IEp0PUV0Lml0ZW1zLmxlbmd0'@;
put 'aDtmb3IoVD0wO1Q8SnQ7VCsrKWlmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLEV0Lml0ZW1zW1RdLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKEV0Lml0ZW1zW1RdLnRleHQsW10pLCFFdC5sb29zZSl7Y29uc3Qgbm49RXQuaXRlbXNbVF0udG9rZW5zLmZpbHRlcihObj0+InNwYWNl'@;
put 'Ij09PU5uLnR5cGUpLHZuPW5uLmxlbmd0aD4wJiZubi5zb21lKE5uPT4vXG4uKlxuLy50ZXN0KE5uLnJhdykpO0V0Lmxvb3NlPXZufWlmKEV0Lmxvb3NlKWZvcihUPTA7VDxKdDtUKyspRXQuaXRlbXNbVF0ubG9vc2U9ITA7cmV0dXJuIEV0fX1odG1sKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5i'@;
put 'bG9jay5odG1sLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD17dHlwZToiaHRtbCIsYmxvY2s6ITAscmF3OmFbMF0scHJlOiF0aGlzLm9wdGlvbnMuc2FuaXRpemVyJiYoInByZSI9PT1hWzFdfHwic2NyaXB0Ij09PWFbMV18fCJzdHlsZSI9PT1hWzFdKSx0ZXh0OmFbMF19O2lmKHRoaXMub3B0aW9u'@;
put 'cy5zYW5pdGl6ZSl7Y29uc3QgaD10aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6U3UoYVswXSk7ZC50eXBlPSJwYXJhZ3JhcGgiLGQudGV4dD1oLGQudG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGgpfXJldHVybiBkfX1kZWYobCl7Y29uc3QgYT10'@;
put 'aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksaD1hWzJdP2FbMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIsZj1h'@;
put 'WzNdP2FbM10uc3Vic3RyaW5nKDEsYVszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpkLHJhdzphWzBdLGhyZWY6aCx0aXRsZTpmfX19dGFibGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2Nr'@;
put 'LnRhYmxlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD17dHlwZToidGFibGUiLGhlYWRlcjpac2UoYVsxXSkubWFwKGg9Pih7dGV4dDpofSkpLGFsaWduOmFbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxyb3dzOmFbM10mJmFbM10udHJpbSgpP2FbM10ucmVwbGFj'@;
put 'ZSgvXG5bIFx0XSokLywiIikuc3BsaXQoIlxuIik6W119O2lmKGQuaGVhZGVyLmxlbmd0aD09PWQuYWxpZ24ubGVuZ3RoKXtkLnJhdz1hWzBdO2xldCBmLF8sVCxXLGg9ZC5hbGlnbi5sZW5ndGg7Zm9yKGY9MDtmPGg7ZisrKWQuYWxpZ25bZl09L14gKi0rOiAqJC8udGVzdChkLmFsaWduW2Zd'@;
put 'KT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3QoZC5hbGlnbltmXSk/ImxlZnQiOm51bGw7Zm9yKGg9ZC5yb3dzLmxlbmd0aCxmPTA7ZjxoO2YrKylkLnJvd3NbZl09WnNlKGQucm93c1tmXSxkLmhlYWRlci5sZW5ndGgpLm1h'@;
put 'cChpZT0+KHt0ZXh0OmllfSkpO2ZvcihoPWQuaGVhZGVyLmxlbmd0aCxfPTA7XzxoO18rKylkLmhlYWRlcltfXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJbX10udGV4dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0aCxfPTA7XzxoO18rKylmb3IoVz1kLnJvd3NbX10sVD0wO1Q8Vy5s'@;
put 'ZW5ndGg7VCsrKVdbVF0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKFdbVF0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDoiPSI9PT1h'@;
put 'WzJdLmNoYXJBdCgwKT8xOjIsdGV4dDphWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhsKTtpZihhKXtjb25zdCBkPSJcbiI9PT1hWzFdLmNoYXJBdChhWzFdLmxlbmd0aC0xKT9h'@;
put 'WzFdLnNsaWNlKDAsLTEpOmFbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6'@;
put 'YVswXSx0ZXh0OmFbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzphWzBdLHRleHQ6U3UoYVsxXSl9fXRhZyhsKXtjb25zdCBhPXRo'@;
put 'aXMucnVsZXMuaW5saW5lLnRhZy5leGVjKGwpO2lmKGEpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGFbMF0pJiYodGhpcy5s'@;
put 'ZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJl'@;
put 'fGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6YVswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0'@;
put 'aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOlN1KGFbMF0pOmFbMF19fWxpbmsobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5s'@;
put 'aW5rLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0dXJuO2NvbnN0IF89blQoZC5zbGljZSgwLC0xKSwiXFwiKTtpZigoZC5sZW5ndGgtXy5sZW5ndGgpJTI9PTApcmV0'@;
put 'dXJufWVsc2V7Y29uc3QgXz1mdW5jdGlvbiBMWWUoYyxsKXtpZigtMT09PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zvcig7aDxhO2grKylpZigiXFwiPT09Y1toXSloKys7ZWxzZSBpZihjW2hdPT09bFswXSlkKys7ZWxzZSBpZihjW2hd'@;
put 'PT09bFsxXSYmKGQtLSxkPDApKXJldHVybiBoO3JldHVybi0xfShhWzJdLCIoKSIpO2lmKF8+LTEpe2NvbnN0IFc9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0ubGVuZ3RoK187YVsyXT1hWzJdLnN1YnN0cmluZygwLF8pLGFbMF09YVswXS5zdWJzdHJpbmcoMCxXKS50cmltKCks'@;
put 'YVszXT0iIn19bGV0IGg9YVsyXSxmPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3QgXz0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7XyYmKGg9X1sxXSxmPV9bM10pfWVsc2UgZj1hWzNdP2FbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGg9aC50cmlt'@;
put 'KCksL148Ly50ZXN0KGgpJiYoaD10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSxZc2UoYSx7aHJlZjpoJiZoLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6ZiYmZi5yZXBsYWNlKHRoaXMu'@;
put 'cnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGwpKXx8KGQ9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMobCkpKXtsZXQgaD0oZFsyXXx8ZFsxXSku'@;
put 'cmVwbGFjZSgvXHMrL2csIiAiKTtpZihoPWFbaC50b0xvd2VyQ2FzZSgpXSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4dDpmfX1yZXR1cm4gWXNlKGQsaCxkWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhsLGEsZD0iIil7bGV0IGg9dGhp'@;
put 'cy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMobCk7aWYoISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMoZCkpKXtjb25zdCBfPWhbMF0ubGVuZ3RoLTE7bGV0'@;
put 'IFQsVyxpZT1fLHBlPTA7Y29uc3Qgd2U9IioiPT09aFswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltVW5kO2Zvcih3ZS5sYXN0SW5kZXg9MCxhPWEuc2xpY2UoLTEqbC5sZW5ndGgrXyk7bnVsbCE9KGg9'@;
put 'd2UuZXhlYyhhKSk7KXtpZihUPWhbMV18fGhbMl18fGhbM118fGhbNF18fGhbNV18fGhbNl0sIVQpY29udGludWU7aWYoVz1ULmxlbmd0aCxoWzNdfHxoWzRdKXtpZSs9Vztjb250aW51ZX1pZigoaFs1XXx8aFs2XSkmJl8lMyYmISgoXytXKSUzKSl7cGUrPVc7Y29udGludWV9aWYoaWUtPVcs'@;
put 'aWU+MCljb250aW51ZTtXPU1hdGgubWluKFcsVytpZStwZSk7Y29uc3QgRWU9bC5zbGljZSgwLF8raC5pbmRleCtXKzEpO2lmKE1hdGgubWluKF8sVyklMil7Y29uc3QgaXQ9RWUuc2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6ImVtIixyYXc6RWUsdGV4dDppdCx0b2tlbnM6dGhpcy5sZXhlci5p'@;
put 'bmxpbmVUb2tlbnMoaXQpfX1jb25zdCBaZT1FZS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6RWUsdGV4dDpaZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoWmUpfX19fWNvZGVzcGFuKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKGwp'@;
put 'O2lmKGEpe2xldCBkPWFbMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IGg9L1teIF0vLnRlc3QoZCksZj0vXiAvLnRlc3QoZCkmJi8gJC8udGVzdChkKTtyZXR1cm4gaCYmZiYmKGQ9ZC5zdWJzdHJpbmcoMSxkLmxlbmd0aC0xKSksZD1TdShkLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzph'@;
put 'WzBdLHRleHQ6ZH19fWJyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJiciIscmF3OmFbMF19fWRlbChsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImRlbCIscmF3OmFbMF0s'@;
put 'dGV4dDphWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhhWzJdKX19YXV0b2xpbmsobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMobCk7aWYoZCl7bGV0IGgsZjtyZXR1cm4iQCI9PT1kWzJdPyhoPVN1KHRoaXMub3B0aW9ucy5tYW5nbGU/YShk'@;
put 'WzFdKTpkWzFdKSxmPSJtYWlsdG86IitoKTooaD1TdShkWzFdKSxmPWgpLHt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19dXJsKGwsYSl7bGV0IGQ7aWYoZD10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhs'@;
put 'KSl7bGV0IGgsZjtpZigiQCI9PT1kWzJdKWg9U3UodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMF0pOmRbMF0pLGY9Im1haWx0bzoiK2g7ZWxzZXtsZXQgXztkb3tfPWRbMF0sZFswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoZFswXSlbMF19d2hpbGUoXyE9PWRbMF0pO2g9'@;
put 'U3UoZFswXSksZj0id3d3LiI9PT1kWzFdPyJodHRwOi8vIitkWzBdOmRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmgsdGV4dDpofV19fX1pbmxpbmVUZXh0KGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGlu'@;
put 'ZS50ZXh0LmV4ZWMobCk7aWYoZCl7bGV0IGg7cmV0dXJuIGg9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoZFswXSk6U3UoZFswXSk6ZFswXTpTdSh0aGlzLm9wdGlv'@;
put 'bnMuc21hcnR5cGFudHM/YShkWzBdKTpkWzBdKSx7dHlwZToidGV4dCIscmF3OmRbMF0sdGV4dDpofX19fWNvbnN0IFRvPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2RlOi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/'@;
put 'PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHswLDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkv'@;
put 'LGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxsaXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNj'@;
put 'cmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxT'@;
put 'XSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNd'@;
put 'Kj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11b'@;
put 'XlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTp0VCxsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpc'@;
put 'big/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSoo'@;
put 'PzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvfTtUby5kZWY9ZmEoVG8uZGVmKS5yZXBsYWNlKCJsYWJlbCIsVG8uX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsVG8uX3RpdGxlKS5nZXRSZWdleCgpLFRvLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxUby5saXN0SXRlbVN0YXJ0'@;
put 'PWZhKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIsVG8uYnVsbGV0KS5nZXRSZWdleCgpLFRvLmxpc3Q9ZmEoVG8ubGlzdCkucmVwbGFjZSgvYnVsbC9nLFRvLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAq'@;
put 'KXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89IitUby5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSxUby5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRk'@;
put 'fGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2Zy'@;
put 'YW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixUby5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8sVG8uaHRtbD1mYShUby5odG1s'@;
put 'LCJpIikucmVwbGFjZSgiY29tbWVudCIsVG8uX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsVG8uX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgo'@;
put 'KSxUby5saGVhZGluZz1mYShUby5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLFRvLmJ1bGxldCkuZ2V0UmVnZXgoKSxUby5wYXJhZ3JhcGg9ZmEoVG8uX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLFRvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxs'@;
put 'aGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwx'@;
put 'Wy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixUby5fdGFnKS5nZXRSZWdleCgpLFRvLmJsb2NrcXVvdGU9ZmEoVG8uYmxvY2txdW90ZSkucmVwbGFjZSgicGFy'@;
put 'YWdyYXBoIixUby5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksVG8ubm9ybWFsPXsuLi5Ub30sVG8uZ2ZtPXsuLi5Uby5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLipcXHwuKilcXG4gezAsM30oPzpcXHwgKik/KDo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKSg/OlxcfCAqKT8oPzpcXG4oKD86'@;
put 'KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifSxUby5nZm0udGFibGU9ZmEoVG8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsVG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVw'@;
put 'bGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIp'@;
put 'LnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVG8uX3RhZykuZ2V0UmVnZXgoKSxUby5nZm0ucGFyYWdyYXBoPWZhKFRvLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixUby5o'@;
put 'cikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsVG8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxu'@;
put 'XSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVG8uX3Rh'@;
put 'ZykuZ2V0UmVnZXgoKSxUby5wZWRhbnRpYz17Li4uVG8ubm9ybWFsLGh0bWw6ZmEoIl4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8v'@;
put 'Pz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLFRvLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5'@;
put 'fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14o'@;
put 'I3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczp0VCxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpmYShUby5ub3JtYWwuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLFRvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5d'@;
put 'IikucmVwbGFjZSgibGhlYWRpbmciLFRvLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX07Y29uc3QgWGk9e2VzY2FwZTovXlxcKFsh'@;
put 'IiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6dFQsdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9c'@;
put 'XHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxb'@;
put 'KHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJE'@;
put 'ZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCor'@;
put 'KSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/'@;
put 'PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10q'@;
put 'P1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOnRULHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVh'@;
put 'dGlvbl0pL307ZnVuY3Rpb24gUFllKGMpe3JldHVybiBjLnJlcGxhY2UoLy0tLS9nLCJcdTIwMTQiKS5yZXBsYWNlKC8tLS9nLCJcdTIwMTMiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQxXHUyMDE4IikucmVwbGFjZSgvJy9nLCJcdTIwMTkiKS5yZXBsYWNlKC8oXnxb'@;
put 'LVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDFcdTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAxZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1MjAyNiIpfWZ1bmN0aW9uIFdzZShjKXtsZXQgYSxkLGw9IiI7Y29uc3QgaD1jLmxlbmd0aDtmb3IoYT0wO2E8aDthKyspZD1jLmNoYXJDb2RlQXQo'@;
put 'YSksTWF0aC5yYW5kb20oKT4uNSYmKGQ9IngiK2QudG9TdHJpbmcoMTYpKSxsKz0iJiMiK2QrIjsiO3JldHVybiBsfVhpLl9wdW5jdHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+IixYaS5wdW5jdHVhdGlvbj1mYShYaS5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csWGku'@;
put 'X3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxYaS5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2csWGkuX2VzY2FwZXM9L1xcKFtwdW5jdF0pL2csWGkuX2NvbW1lbnQ9ZmEoVG8uX2Nv'@;
put 'bW1lbnQpLnJlcGxhY2UoIig/Oi0tXHgzZXwkKSIsIi0tXHgzZSIpLmdldFJlZ2V4KCksWGkuZW1TdHJvbmcubERlbGltPWZhKFhpLmVtU3Ryb25nLmxEZWxpbSwidSIpLnJlcGxhY2UoL3B1bmN0L2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLmVtU3Ryb25nLnJEZWxpbUFzdD1m'@;
put 'YShYaS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksWGkuZW1TdHJvbmcuckRlbGltVW5kPWZhKFhpLmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0'@;
put 'UmVnZXgoKSxYaS5hbnlQdW5jdHVhdGlvbj1mYShYaS5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5fZXNjYXBlcz1mYShYaS5fZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbiku'@;
put 'Z2V0UmVnZXgoKSxYaS5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LyxYaS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/Olth'@;
put 'LXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxYaS5hdXRvbGluaz1mYShYaS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixYaS5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsWGkuX2VtYWlsKS5nZXRSZWdleCgpLFhpLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11b'@;
put 'XHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sWGkudGFnPWZhKFhpLnRhZykucmVwbGFjZSgiY29tbWVudCIsWGkuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsWGkuX2F0dHJpYnV0ZSkuZ2V0UmVnZXgoKSxYaS5fbGFi'@;
put 'ZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sWGkuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sWGkuX3RpdGxlPS8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98'@;
put 'W14pXFxdKSpcKS8sWGkubGluaz1mYShYaS5saW5rKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixYaS5faHJlZikucmVwbGFjZSgidGl0bGUiLFhpLl90aXRsZSkuZ2V0UmVnZXgoKSxYaS5yZWZsaW5rPWZhKFhpLnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixY'@;
put 'aS5fbGFiZWwpLnJlcGxhY2UoInJlZiIsVG8uX2xhYmVsKS5nZXRSZWdleCgpLFhpLm5vbGluaz1mYShYaS5ub2xpbmspLnJlcGxhY2UoInJlZiIsVG8uX2xhYmVsKS5nZXRSZWdleCgpLFhpLnJlZmxpbmtTZWFyY2g9ZmEoWGkucmVmbGlua1NlYXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsi'@;
put 'LFhpLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsWGkubm9saW5rKS5nZXRSZWdleCgpLFhpLm5vcm1hbD17Li4uWGl9LFhpLnBlZGFudGljPXsuLi5YaS5ub3JtYWwsc3Ryb25nOntzdGFydDovXl9ffFwqXCovLG1pZGRsZTovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/'@;
put 'PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVuZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDovX18oPyFfKS9nfSxlbTp7c3RhcnQ6L15ffFwqLyxtaWRkbGU6L14oKVwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8Xl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCoo'@;
put 'PyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5rOmZhKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixYaS5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpmYSgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xh'@;
put 'YmVsKS5nZXRSZWdleCgpfSxYaS5nZm09ey4uLlhpLm5vcm1hbCxlc2NhcGU6ZmEoWGkuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpB'@;
put 'LVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+'@;
put 'KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxc'@;
put 'Yl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSxYaS5nZm0udXJsPWZhKFhpLmdmbS51cmwsImkiKS5yZXBsYWNlKCJl'@;
put 'bWFpbCIsWGkuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxYaS5icmVha3M9ey4uLlhpLmdmbSxicjpmYShYaS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6ZmEoWGkuZ2ZtLnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFj'@;
put 'ZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtjbGFzcyBraHtjb25zdHJ1Y3RvcihsKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1sfHxsNCx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tl'@;
put 'bml6ZXJ8fG5ldyByVCx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9j'@;
put 'azohMSx0b3A6ITB9O2NvbnN0IGE9e2Jsb2NrOlRvLm5vcm1hbCxpbmxpbmU6WGkubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KGEuYmxvY2s9VG8ucGVkYW50aWMsYS5pbmxpbmU9WGkucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihhLmJsb2NrPVRvLmdmbSxhLmlubGluZT10'@;
put 'aGlzLm9wdGlvbnMuYnJlYWtzP1hpLmJyZWFrczpYaS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWF9c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazpUbyxpbmxpbmU6WGl9fXN0YXRpYyBsZXgobCxhKXtyZXR1cm4gbmV3IGtoKGEpLmxleChsKX1zdGF0aWMgbGV4SW5saW5lKGws'@;
put 'YSl7cmV0dXJuIG5ldyBraChhKS5pbmxpbmVUb2tlbnMobCl9bGV4KGwpe2xldCBhO2ZvcihsPWwucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMobCx0aGlzLnRva2Vucyk7YT10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKGEuc3Jj'@;
put 'LGEudG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9YmxvY2tUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsXztmb3IobD10aGlzLm9wdGlvbnMucGVkYW50aWM/bC5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6bC5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChULFcs'@;
put 'aWUpPT5XKyIgICAgIi5yZXBlYXQoaWUubGVuZ3RoKSk7bDspaWYoISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrLnNvbWUoVD0+ISEoZD1ULmNhbGwoe2xleGVyOnRoaXN9LGwsYSkp'@;
put 'JiYobD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKSwhMCkpKSl7aWYoZD10aGlzLnRva2VuaXplci5zcGFjZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLDE9PT1kLnJhdy5sZW5ndGgmJmEubGVuZ3RoPjA/YVthLmxlbmd0aC0xXS5yYXcrPSJcbiI6YS5wdXNo'@;
put 'KGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuY29kZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSwhaHx8InBhcmFncmFwaCIhPT1oLnR5cGUmJiJ0ZXh0IiE9PWgudHlwZT9hLnB1c2goZCk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9'@;
put 'IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmZlbmNlcyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMu'@;
put 'dG9rZW5pemVyLmhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5ocihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJs'@;
put 'b2NrcXVvdGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saXN0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHRtbChsKSl7'@;
put 'bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmRlZihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSwhaHx8InBhcmFncmFwaCIhPT1oLnR5cGUmJiJ0ZXh0IiE9PWgudHlwZT90aGlz'@;
put 'LnRva2Vucy5saW5rc1tkLnRhZ118fCh0aGlzLnRva2Vucy5saW5rc1tkLnRhZ109e2hyZWY6ZC5ocmVmLHRpdGxlOmQudGl0bGV9KTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QucmF3LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgu'@;
put 'dGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50YWJsZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2Nv'@;
put 'bnRpbnVlfWlmKGY9bCx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayl7bGV0IFQ9MS8wO2NvbnN0IFc9bC5zbGljZSgxKTtsZXQgaWU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGZ1bmN0aW9uKHBl'@;
put 'KXtpZT1wZS5jYWxsKHtsZXhlcjp0aGlzfSxXKSwibnVtYmVyIj09dHlwZW9mIGllJiZpZT49MCYmKFQ9TWF0aC5taW4oVCxpZSkpfSksVDwxLzAmJlQ+PTAmJihmPWwuc3Vic3RyaW5nKDAsVCsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihkPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChmKSkp'@;
put 'e2g9YVthLmxlbmd0aC0xXSxfJiYicGFyYWdyYXBoIj09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNo'@;
put 'KGQpLF89Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJc'@;
put 'biIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IFQ9IkluZmluaXRlIGxvb3Agb24gYnl0ZTog'@;
put 'IitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihUKTticmVha310aHJvdyBuZXcgRXJyb3IoVCl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxhfWlubGluZShsLGE9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzpsLHRv'@;
put 'a2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsVCxXLGllLF89bDtpZih0aGlzLnRva2Vucy5saW5rcyl7Y29uc3QgcGU9T2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO2lmKHBlLmxlbmd0aD4wKWZvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMu'@;
put 'aW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhfKSk7KXBlLmluY2x1ZGVzKFRbMF0uc2xpY2UoVFswXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKF89Xy5zbGljZSgwLFQuaW5kZXgpKyJbIisiYSIucmVwZWF0KFRbMF0ubGVuZ3RoLTIpKyJdIitfLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1'@;
put 'bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKF8pKTspXz1fLnNsaWNlKDAsVC5pbmRleCkrIlsiKyJhIi5yZXBlYXQoVFswXS5sZW5ndGgtMikrIl0iK18uc2xpY2UodGhp'@;
put 'cy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMoXykpOylfPV8uc2xpY2UoMCxULmluZGV4KSsiKysiK18uc2xpY2UodGhpcy50b2tlbml6ZXIucnVs'@;
put 'ZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtsOylpZihXfHwoaWU9IiIpLFc9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShwZT0+ISEo'@;
put 'ZD1wZS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuZXNjYXBlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50'@;
put 'b2tlbml6ZXIudGFnKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVy'@;
put 'LmxpbmsobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5yZWZsaW5rKGwsdGhpcy50b2tlbnMubGlua3MpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQu'@;
put 'dHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGwsXyxpZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlz'@;
put 'LnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIu'@;
put 'ZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxXc2UpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKGQ9'@;
put 'dGhpcy50b2tlbml6ZXIudXJsKGwsV3NlKSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IHBlPTEvMDtjb25zdCB3ZT1s'@;
put 'LnNsaWNlKDEpO2xldCBFZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKFplKXtFZT1aZS5jYWxsKHtsZXhlcjp0aGlzfSx3ZSksIm51bWJlciI9PXR5cGVvZiBFZSYmRWU+PTAmJihwZT1NYXRoLm1pbihwZSxFZSkpfSkscGU8MS8wJiZwZT49'@;
put 'MCYmKGY9bC5zdWJzdHJpbmcoMCxwZSsxKSl9aWYoZD10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGYsUFllKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQucmF3LnNsaWNlKC0xKSYmKGllPWQucmF3LnNsaWNlKC0xKSksVz0hMCxoPWFbYS5sZW5ndGgtMV0saCYmInRl'@;
put 'eHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihsKXtjb25zdCBwZT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKHBlKTticmVh'@;
put 'a310aHJvdyBuZXcgRXJyb3IocGUpfX1yZXR1cm4gYX19Y2xhc3MgaVR7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0fWNvZGUobCxhLGQpe2NvbnN0IGg9KGF8fCIiKS5tYXRjaCgvXFMqLylbMF07aWYodGhpcy5vcHRpb25zLmhpZ2hsaWdodCl7Y29uc3QgZj10aGlzLm9wdGlv'@;
put 'bnMuaGlnaGxpZ2h0KGwsaCk7bnVsbCE9ZiYmZiE9PWwmJihkPSEwLGw9Zil9cmV0dXJuIGw9bC5yZXBsYWNlKC9cbiQvLCIiKSsiXG4iLGg/JzxwcmU+PGNvZGUgY2xhc3M9IicrdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgrU3UoaCkrJyI+JysoZD9sOlN1KGwsITApKSsiPC9jb2RlPjwvcHJl'@;
put 'PlxuIjoiPHByZT48Y29kZT4iKyhkP2w6U3UobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4ifWJsb2NrcXVvdGUobCl7cmV0dXJuYDxibG9ja3F1b3RlPlxuJHtsfTwvYmxvY2txdW90ZT5cbmB9aHRtbChsLGEpe3JldHVybiBsfWhlYWRpbmcobCxhLGQsaCl7cmV0dXJuIHRoaXMub3B0aW9ucy5o'@;
put 'ZWFkZXJJZHM/YDxoJHthfSBpZD0iJHt0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4K2guc2x1ZyhkKX0iPiR7bH08L2gke2F9PlxuYDpgPGgke2F9PiR7bH08L2gke2F9PlxuYH1ocigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxoci8+XG4iOiI8aHI+XG4ifWxpc3QobCxhLGQpe2Nv'@;
put 'bnN0IGg9YT8ib2wiOiJ1bCI7cmV0dXJuIjwiK2grKGEmJjEhPT1kPycgc3RhcnQ9IicrZCsnIic6IiIpKyI+XG4iK2wrIjwvIitoKyI+XG4ifWxpc3RpdGVtKGwpe3JldHVybmA8bGk+JHtsfTwvbGk+XG5gfWNoZWNrYm94KGwpe3JldHVybiI8aW5wdXQgIisobD8nY2hlY2tlZD0iIiAnOiIi'@;
put 'KSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giJysodGhpcy5vcHRpb25zLnhodG1sPyIgLyI6IiIpKyI+ICJ9cGFyYWdyYXBoKGwpe3JldHVybmA8cD4ke2x9PC9wPlxuYH10YWJsZShsLGEpe3JldHVybiBhJiYoYT1gPHRib2R5PiR7YX08L3Rib2R5PmApLCI8dGFibGU+XG48dGhlYWQ+'@;
put 'XG4iK2wrIjwvdGhlYWQ+XG4iK2ErIjwvdGFibGU+XG4ifXRhYmxlcm93KGwpe3JldHVybmA8dHI+XG4ke2x9PC90cj5cbmB9dGFibGVjZWxsKGwsYSl7Y29uc3QgZD1hLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKGEuYWxpZ24/YDwke2R9IGFsaWduPSIke2EuYWxpZ259Ij5gOmA8JHtkfT5g'@;
put 'KStsK2A8LyR7ZH0+XG5gfXN0cm9uZyhsKXtyZXR1cm5gPHN0cm9uZz4ke2x9PC9zdHJvbmc+YH1lbShsKXtyZXR1cm5gPGVtPiR7bH08L2VtPmB9Y29kZXNwYW4obCl7cmV0dXJuYDxjb2RlPiR7bH08L2NvZGU+YH1icigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxici8+IjoiPGJy'@;
put 'PiJ9ZGVsKGwpe3JldHVybmA8ZGVsPiR7bH08L2RlbD5gfWxpbmsobCxhLGQpe2lmKG51bGw9PT0obD1Vc2UodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD0nPGEgaHJlZj0iJytsKyciJztyZXR1cm4gYSYmKGgrPScgdGl0bGU9'@;
put 'IicrYSsnIicpLGgrPSI+IitkKyI8L2E+IixofWltYWdlKGwsYSxkKXtpZihudWxsPT09KGw9VXNlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxsKSkpcmV0dXJuIGQ7bGV0IGg9YDxpbWcgc3JjPSIke2x9IiBhbHQ9IiR7ZH0iYDtyZXR1cm4gYSYmKGgrPWAg'@;
put 'dGl0bGU9IiR7YX0iYCksaCs9dGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4iLGh9dGV4dChsKXtyZXR1cm4gbH19Y2xhc3MgdlV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3JldHVybiBsfWNvZGVzcGFuKGwpe3JldHVybiBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwpe3JldHVybiBsfXRl'@;
put 'eHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJuIiIrZH1pbWFnZShsLGEsZCl7cmV0dXJuIiIrZH1icigpe3JldHVybiIifX1jbGFzcyBfVXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vlbj17fX1zZXJpYWxpemUobCl7cmV0dXJuIGwudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgv'@;
put 'PFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUmKCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xzL2csIi0iKX1nZXROZXh0U2FmZVNsdWcobCxhKXtsZXQgZD1sLGg9MDtpZih0aGlzLnNlZW4uaGFz'@;
put 'T3duUHJvcGVydHkoZCkpe2g9dGhpcy5zZWVuW2xdO2Rve2grKyxkPWwrIi0iK2h9d2hpbGUodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKX1yZXR1cm4gYXx8KHRoaXMuc2VlbltsXT1oLHRoaXMuc2VlbltkXT0wKSxkfXNsdWcobCxhPXt9KXtjb25zdCBkPXRoaXMuc2VyaWFsaXplKGwp'@;
put 'O3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhkLGEuZHJ5cnVuKX19Y2xhc3MgQWh7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBpVCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5y'@;
put 'ZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyB2VSx0aGlzLnNsdWdnZXI9bmV3IF9VfXN0YXRpYyBwYXJzZShsLGEpe3JldHVybiBuZXcgQWgoYSkucGFyc2UobCl9c3RhdGljIHBhcnNlSW5saW5lKGwsYSl7cmV0dXJuIG5l'@;
put 'dyBBaChhKS5wYXJzZUlubGluZShsKX1wYXJzZShsLGE9ITApe2xldCBoLGYsXyxULFcsaWUscGUsd2UsRWUsWmUsaXQsZXQseXQsRXQsU3QsSnQsbm4sdm4sTm4sZD0iIjtjb25zdCBjcj1sLmxlbmd0aDtmb3IoaD0wO2g8Y3I7aCsrKWlmKFplPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lv'@;
put 'bnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW1plLnR5cGVdJiYoTm49dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW1plLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxaZSksITEhPT1Obnx8IVsi'@;
put 'c3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMoWmUudHlwZSkpKWQrPU5ufHwiIjtlbHNlIHN3aXRjaChaZS50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjpk'@;
put 'Kz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWU7Y2FzZSJoZWFkaW5nIjpkKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShaZS50b2tlbnMpLFplLmRlcHRoLHpzZSh0aGlzLnBhcnNlSW5saW5lKFplLnRva2Vucyx0aGlzLnRleHRSZW5kZXJlcikpLHRoaXMuc2x1'@;
put 'Z2dlcik7Y29udGludWU7Y2FzZSJjb2RlIjpkKz10aGlzLnJlbmRlcmVyLmNvZGUoWmUudGV4dCxaZS5sYW5nLFplLmVzY2FwZWQpO2NvbnRpbnVlO2Nhc2UidGFibGUiOmZvcih3ZT0iIixwZT0iIixUPVplLmhlYWRlci5sZW5ndGgsZj0wO2Y8VDtmKyspcGUrPXRoaXMucmVuZGVyZXIudGFi'@;
put 'bGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoWmUuaGVhZGVyW2ZdLnRva2Vucykse2hlYWRlcjohMCxhbGlnbjpaZS5hbGlnbltmXX0pO2Zvcih3ZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhwZSksRWU9IiIsVD1aZS5yb3dzLmxlbmd0aCxmPTA7ZjxUO2YrKyl7Zm9yKGllPVplLnJvd3NbZl0s'@;
put 'cGU9IiIsVz1pZS5sZW5ndGgsXz0wO188VztfKyspcGUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoaWVbX10udG9rZW5zKSx7aGVhZGVyOiExLGFsaWduOlplLmFsaWduW19dfSk7RWUrPXRoaXMucmVuZGVyZXIudGFibGVyb3cocGUpfWQrPXRoaXMucmVuZGVy'@;
put 'ZXIudGFibGUod2UsRWUpO2NvbnRpbnVlO2Nhc2UiYmxvY2txdW90ZSI6RWU9dGhpcy5wYXJzZShaZS50b2tlbnMpLGQrPXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShFZSk7Y29udGludWU7Y2FzZSJsaXN0Ijpmb3IoaXQ9WmUub3JkZXJlZCxldD1aZS5zdGFydCx5dD1aZS5sb29zZSxUPVpl'@;
put 'Lml0ZW1zLmxlbmd0aCxFZT0iIixmPTA7ZjxUO2YrKylTdD1aZS5pdGVtc1tmXSxKdD1TdC5jaGVja2VkLG5uPVN0LnRhc2ssRXQ9IiIsU3QudGFzayYmKHZuPXRoaXMucmVuZGVyZXIuY2hlY2tib3goSnQpLHl0P1N0LnRva2Vucy5sZW5ndGg+MCYmInBhcmFncmFwaCI9PT1TdC50b2tlbnNb'@;
put 'MF0udHlwZT8oU3QudG9rZW5zWzBdLnRleHQ9dm4rIiAiK1N0LnRva2Vuc1swXS50ZXh0LFN0LnRva2Vuc1swXS50b2tlbnMmJlN0LnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJiJ0ZXh0Ij09PVN0LnRva2Vuc1swXS50b2tlbnNbMF0udHlwZSYmKFN0LnRva2Vuc1swXS50b2tlbnNbMF0u'@;
put 'dGV4dD12bisiICIrU3QudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSk6U3QudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6dm59KTpFdCs9dm4pLEV0Kz10aGlzLnBhcnNlKFN0LnRva2Vucyx5dCksRWUrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0oRXQsbm4sSnQpO2QrPXRoaXMu'@;
put 'cmVuZGVyZXIubGlzdChFZSxpdCxldCk7Y29udGludWU7Y2FzZSJodG1sIjpkKz10aGlzLnJlbmRlcmVyLmh0bWwoWmUudGV4dCxaZS5ibG9jayk7Y29udGludWU7Y2FzZSJwYXJhZ3JhcGgiOmQrPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKSk7'@;
put 'Y29udGludWU7Y2FzZSJ0ZXh0Ijpmb3IoRWU9WmUudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKTpaZS50ZXh0O2grMTxjciYmInRleHQiPT09bFtoKzFdLnR5cGU7KVplPWxbKytoXSxFZSs9IlxuIisoWmUudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKTpaZS50'@;
put 'ZXh0KTtkKz1hP3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKEVlKTpFZTtjb250aW51ZTtkZWZhdWx0Ontjb25zdCBJcj0nVG9rZW4gd2l0aCAiJytaZS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihJ'@;
put 'cik7dGhyb3cgbmV3IEVycm9yKElyKX19cmV0dXJuIGR9cGFyc2VJbmxpbmUobCxhKXthPWF8fHRoaXMucmVuZGVyZXI7bGV0IGgsZixfLGQ9IiI7Y29uc3QgVD1sLmxlbmd0aDtmb3IoaD0wO2g8VDtoKyspaWYoZj1sW2hdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMu'@;
put 'ZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdJiYoXz10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZi50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sZiksITEhPT1ffHwhWyJlc2NhcGUiLCJodG1sIiwibGluayIs'@;
put 'ImltYWdlIiwic3Ryb25nIiwiZW0iLCJjb2Rlc3BhbiIsImJyIiwiZGVsIiwidGV4dCJdLmluY2x1ZGVzKGYudHlwZSkpKWQrPV98fCIiO2Vsc2Ugc3dpdGNoKGYudHlwZSl7Y2FzZSJlc2NhcGUiOmNhc2UidGV4dCI6ZCs9YS50ZXh0KGYudGV4dCk7YnJlYWs7Y2FzZSJodG1sIjpkKz1hLmh0'@;
put 'bWwoZi50ZXh0KTticmVhaztjYXNlImxpbmsiOmQrPWEubGluayhmLmhyZWYsZi50aXRsZSx0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImltYWdlIjpkKz1hLmltYWdlKGYuaHJlZixmLnRpdGxlLGYudGV4dCk7YnJlYWs7Y2FzZSJzdHJvbmciOmQrPWEuc3Ryb25n'@;
put 'KHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiZW0iOmQrPWEuZW0odGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJjb2Rlc3BhbiI6ZCs9YS5jb2Rlc3BhbihmLnRleHQpO2JyZWFrO2Nhc2UiYnIiOmQrPWEuYnIoKTticmVhaztjYXNlImRl'@;
put 'bCI6ZCs9YS5kZWwodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7ZGVmYXVsdDp7Y29uc3QgVz0nVG9rZW4gd2l0aCAiJytmLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFcpO3Ro'@;
put 'cm93IG5ldyBFcnJvcihXKX19cmV0dXJuIGR9fWNsYXNzIGN3e2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxsNH1wcmVwcm9jZXNzKGwpe3JldHVybiBsfXBvc3Rwcm9jZXNzKGwpe3JldHVybiBsfX1GMChjdywicGFzc1Rocm91Z2hIb29rcyIsbmV3IFNldChbInByZXByb2Nlc3Mi'@;
put 'LCJwb3N0cHJvY2VzcyJdKSk7dmFyIGJVPW5ldyBXZWFrU2V0LEdzZT1uZXcgV2Vha1NldDtmdW5jdGlvbiAkc2UoYyxsKXtyZXR1cm4oYSxkLGgpPT57ImZ1bmN0aW9uIj09dHlwZW9mIGQmJihoPWQsZD1udWxsKTtjb25zdCBmPXsuLi5kfTtkPXsuLi50aGlzLmRlZmF1bHRzLC4uLmZ9O2Nv'@;
put 'bnN0IF89Z1UodGhpcyxHc2UsSFllKS5jYWxsKHRoaXMsZC5zaWxlbnQsZC5hc3luYyxoKTtpZih0eXBlb2YgYT4idSJ8fG51bGw9PT1hKXJldHVybiBfKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlw'@;
put 'ZW9mIGEpcmV0dXJuIF8obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKGZ1bmN0aW9uIFJZZShjLGwpeyFjfHxjLnNpbGVudHx8KGwmJmNvbnNv'@;
put 'bGUud2FybigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8j'@;
put 'YXN5bmMiKSwoYy5zYW5pdGl6ZXx8Yy5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92'@;
put 'ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwoYy5oaWdobGlnaHR8fCJsYW5ndWFnZS0iIT09Yy5sYW5nUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGlnaGxpZ2h0IGFu'@;
put 'ZCBsYW5nUHJlZml4IHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWhp'@;
put 'Z2hsaWdodC4iKSxjLm1hbmdsZSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogbWFuZ2xlIHBhcmFtZXRlciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xl'@;
put 'YXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1tYW5nbGUsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge21hbmdsZTogZmFsc2V9YC4iKSxjLmJhc2VVcmwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGJhc2VVcmwgcGFyYW1ldGVy'@;
put 'IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWJhc2UtdXJsLiIpLGMuc21hcnR5cGFudHMm'@;
put 'JmNvbnNvbGUud2FybigibWFya2VkKCk6IHNtYXJ0eXBhbnRzIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpz'@;
put 'LmNvbS9wYWNrYWdlL21hcmtlZC1zbWFydHlwYW50cy4iKSxjLnhodG1sJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiB4aHRtbCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUg'@;
put 'ZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQteGh0bWwuIiksKGMuaGVhZGVySWRzfHxjLmhlYWRlclByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxl'@;
put 'ZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVh'@;
put 'ZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpKX0oZCxoKSxkLmhvb2tzJiYoZC5ob29rcy5vcHRpb25zPWQpLGgpe2NvbnN0IFQ9ZC5oaWdobGlnaHQ7bGV0IFc7dHJ5e2QuaG9va3MmJihhPWQuaG9va3MucHJlcHJvY2VzcyhhKSksVz1jKGEs'@;
put 'ZCl9Y2F0Y2god2Upe3JldHVybiBfKHdlKX1jb25zdCBpZT13ZT0+e2xldCBFZTtpZighd2UpdHJ5e2Qud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKFcsZC53YWxrVG9rZW5zKSxFZT1sKFcsZCksZC5ob29rcyYmKEVlPWQuaG9va3MucG9zdHByb2Nlc3MoRWUpKX1jYXRjaChaZSl7d2U9'@;
put 'WmV9cmV0dXJuIGQuaGlnaGxpZ2h0PVQsd2U/Xyh3ZSk6aChudWxsLEVlKX07aWYoIVR8fFQubGVuZ3RoPDN8fChkZWxldGUgZC5oaWdobGlnaHQsIVcubGVuZ3RoKSlyZXR1cm4gaWUoKTtsZXQgcGU9MDtyZXR1cm4gdGhpcy53YWxrVG9rZW5zKFcsd2U9PnsiY29kZSI9PT13ZS50eXBlJiYo'@;
put 'cGUrKyxzZXRUaW1lb3V0KCgpPT57VCh3ZS50ZXh0LHdlLmxhbmcsKEVlLFplKT0+e2lmKEVlKXJldHVybiBpZShFZSk7bnVsbCE9WmUmJlplIT09d2UudGV4dCYmKHdlLnRleHQ9WmUsd2UuZXNjYXBlZD0hMCkscGUtLSwwPT09cGUmJmllKCl9KX0sMCkpfSksdm9pZCgwPT09cGUmJmllKCkp'@;
put 'fWlmKGQuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzP2QuaG9va3MucHJlcHJvY2VzcyhhKTphKS50aGVuKFQ9PmMoVCxkKSkudGhlbihUPT5kLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKFQsZC53YWxrVG9rZW5zKSkudGhlbigoKT0+VCk6VCku'@;
put 'dGhlbihUPT5sKFQsZCkpLnRoZW4oVD0+ZC5ob29rcz9kLmhvb2tzLnBvc3Rwcm9jZXNzKFQpOlQpLmNhdGNoKF8pO3RyeXtkLmhvb2tzJiYoYT1kLmhvb2tzLnByZXByb2Nlc3MoYSkpO2NvbnN0IFQ9YyhhLGQpO2Qud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKFQsZC53YWxrVG9rZW5z'@;
put 'KTtsZXQgVz1sKFQsZCk7cmV0dXJuIGQuaG9va3MmJihXPWQuaG9va3MucG9zdHByb2Nlc3MoVykpLFd9Y2F0Y2goVCl7cmV0dXJuIF8oVCl9fX1mdW5jdGlvbiBIWWUoYyxsLGEpe3JldHVybiBkPT57aWYoZC5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRo'@;
put 'dWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGMpe2NvbnN0IGg9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIrU3UoZC5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gbD9Qcm9taXNlLnJlc29sdmUoaCk6YT92b2lkIGEobnVsbCxoKTpofWlmKGwpcmV0dXJuIFByb21pc2Uu'@;
put 'cmVqZWN0KGQpO2lmKCFhKXRocm93IGQ7YShkKX19Y29uc3QgWmc9bmV3IGNsYXNzIEZZZXtjb25zdHJ1Y3RvciguLi5sKXtIc2UodGhpcyxHc2UpLEhzZSh0aGlzLGJVKSxGMCh0aGlzLCJkZWZhdWx0cyIse2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxs'@;
put 'LGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5'@;
put 'cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfSksRjAodGhpcywib3B0aW9ucyIsdGhpcy5zZXRPcHRpb25zKSxGMCh0aGlzLCJwYXJzZSIsZ1UodGhpcyxiVSwkc2UpLmNhbGwodGhpcyxraC5sZXgsQWgucGFyc2UpKSxGMCh0aGlzLCJwYXJzZUlubGlu'@;
put 'ZSIsZ1UodGhpcyxiVSwkc2UpLmNhbGwodGhpcyxraC5sZXhJbmxpbmUsQWgucGFyc2VJbmxpbmUpKSxGMCh0aGlzLCJQYXJzZXIiLEFoKSxGMCh0aGlzLCJwYXJzZXIiLEFoLnBhcnNlKSxGMCh0aGlzLCJSZW5kZXJlciIsaVQpLEYwKHRoaXMsIlRleHRSZW5kZXJlciIsdlUpLEYwKHRoaXMs'@;
put 'IkxleGVyIixraCksRjAodGhpcywibGV4ZXIiLGtoLmxleCksRjAodGhpcywiVG9rZW5pemVyIixyVCksRjAodGhpcywiU2x1Z2dlciIsX1UpLEYwKHRoaXMsIkhvb2tzIixjdyksdGhpcy51c2UoLi4ubCl9d2Fsa1Rva2VucyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNo'@;
put 'KGQ9ZC5jb25jYXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZi50b2tlbnMsYSkpO2Zvcihjb25zdCBmIG9mIGgucm93cylmb3IoY29uc3QgXyBvZiBmKWQ9ZC5jb25jYXQodGhp'@;
put 'cy53YWxrVG9rZW5zKF8udG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMu'@;
put 'ZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZvckVhY2goZj0+e2Q9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGhbZl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fs'@;
put 'a1Rva2VucyhoLnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGwuZm9yRWFjaChkPT57Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRz'@;
put 'LmFzeW5jfHxoLmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVuc2lvbnMuZm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoZi5yZW5kZXJlcil7Y29uc3QgXz1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVy'@;
put 'ZXJzW2YubmFtZV09Xz9mdW5jdGlvbiguLi5UKXtsZXQgVz1mLnJlbmRlcmVyLmFwcGx5KHRoaXMsVCk7cmV0dXJuITE9PT1XJiYoVz1fLmFwcGx5KHRoaXMsVCkpLFd9OmYucmVuZGVyZXJ9aWYoZi50b2tlbml6ZXIpe2lmKCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIh'@;
put 'PT1mLmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtmLmxldmVsXS51bnNoaWZ0KGYudG9rZW5pemVyKTphW2YubGV2ZWxdPVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxl'@;
put 'dmVsP2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0KTphLnN0YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/YS5zdGFydElubGluZS5wdXNoKGYuc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRv'@;
put 'a2VucyYmKGEuY2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5zKX0pLGguZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBpVCh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgXyBpbiBkLnJlbmRlcmVyKXtjb25zdCBUPWZb'@;
put 'X107ZltfXT0oLi4uVyk9PntsZXQgaWU9ZC5yZW5kZXJlcltfXS5hcHBseShmLFcpO3JldHVybiExPT09aWUmJihpZT1ULmFwcGx5KGYsVykpLGllfX1oLnJlbmRlcmVyPWZ9aWYoZC50b2tlbml6ZXIpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyByVCh0aGlzLmRlZmF1'@;
put 'bHRzKTtmb3IoY29uc3QgXyBpbiBkLnRva2VuaXplcil7Y29uc3QgVD1mW19dO2ZbX109KC4uLlcpPT57bGV0IGllPWQudG9rZW5pemVyW19dLmFwcGx5KGYsVyk7cmV0dXJuITE9PT1pZSYmKGllPVQuYXBwbHkoZixXKSksaWV9fWgudG9rZW5pemVyPWZ9aWYoZC5ob29rcyl7Y29uc3QgZj10'@;
put 'aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgY3c7Zm9yKGNvbnN0IF8gaW4gZC5ob29rcyl7Y29uc3QgVD1mW19dO2ZbX109Y3cucGFzc1Rocm91Z2hIb29rcy5oYXMoXyk/Vz0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzW19dLmNhbGwoZixX'@;
put 'KSkudGhlbihwZT0+VC5jYWxsKGYscGUpKTtjb25zdCBpZT1kLmhvb2tzW19dLmNhbGwoZixXKTtyZXR1cm4gVC5jYWxsKGYsaWUpfTooLi4uVyk9PntsZXQgaWU9ZC5ob29rc1tfXS5hcHBseShmLFcpO3JldHVybiExPT09aWUmJihpZT1ULmFwcGx5KGYsVykpLGllfX1oLmhvb2tzPWZ9aWYo'@;
put 'ZC53YWxrVG9rZW5zKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztoLndhbGtUb2tlbnM9ZnVuY3Rpb24oXyl7bGV0IFQ9W107cmV0dXJuIFQucHVzaChkLndhbGtUb2tlbnMuY2FsbCh0aGlzLF8pKSxmJiYoVD1ULmNvbmNhdChmLmNhbGwodGhpcyxfKSkpLFR9fXRoaXMuZGVm'@;
put 'YXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaH19KSx0aGlzfXNldE9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ubH0sdGhpc319KGw0KTtmdW5jdGlvbiBwYShjLGwsYSl7cmV0dXJuIFpnLnBhcnNlKGMsbCxhKX1wYS5vcHRpb25zPXBhLnNl'@;
put 'dE9wdGlvbnM9ZnVuY3Rpb24oYyl7cmV0dXJuIFpnLnNldE9wdGlvbnMoYyksTnNlKHBhLmRlZmF1bHRzPVpnLmRlZmF1bHRzKSxwYX0scGEuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24gbVUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2Zt'@;
put 'OiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50'@;
put 'czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxwYS5kZWZhdWx0cz1sNCxwYS51c2U9ZnVuY3Rpb24oLi4uYyl7cmV0dXJuIFpnLnVzZSguLi5jKSxOc2UocGEuZGVmYXVsdHM9WmcuZGVmYXVsdHMpLHBhfSxwYS53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7'@;
put 'cmV0dXJuIFpnLndhbGtUb2tlbnMoYyxsKX0scGEucGFyc2VJbmxpbmU9WmcucGFyc2VJbmxpbmUscGEuUGFyc2VyPUFoLHBhLnBhcnNlcj1BaC5wYXJzZSxwYS5SZW5kZXJlcj1pVCxwYS5UZXh0UmVuZGVyZXI9dlUscGEuTGV4ZXI9a2gscGEubGV4ZXI9a2gubGV4LHBhLlRva2VuaXplcj1y'@;
put 'VCxwYS5TbHVnZ2VyPV9VLHBhLkhvb2tzPWN3LHBhLnBhcnNlPXBhO2NvbnN0IFZZZT1bIm1hcmtkb3duQ2FyZCJdO2Z1bmN0aW9uIEJZZShjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDgpfWxldCBqWWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNhc1NlcnZpY2U9'@;
put 'YSx0aGlzLmFncmVlQ2hlY2tlZD0hMSx0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuZXVsYV9tYXJrZG93bj0nXG5MaWNlbmNlIEFncmVlbWVudCBmb3IgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGFlXG49PT09PT09PT09PT09PT09PT09PVxuXG5D'@;
put 'b3B5cmlnaHQgKGMpIEJvd2UgSU8gTHRkXG5cbkRhdGEgQ29udHJvbGxlciBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBieSA0R0wgQXBwcywgYSBicmFuZCBvd25lZCBieSBCb3dlIElPIEx0ZCwgYSBVSyBMaW1pdGVkIENvbXBhbnkgaGVhZHF1YXJ0ZWQgaW4gMjkgT2xkZmllbGQgUmQsIEN1'@;
put 'bWJyaWEsIHJlZ2lzdGVyZWQgYXQgQ29tcGFuaWVzIEhvdXNlIHdpdGggY29tcGFueSBudW1iZXIgMDg3NzcxNzEsIFZBVCBudW1iZXI6IDIwMzkxNDI0MFxuXG5UaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJu'@;
put 'YXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtbGljZW5zZWQgXHUyMDEzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdXIgdXNlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBtZWFuaW5nIGludGVuZGVkIGZvciBvciByZXN1bHRpbmcgaW4gY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgbW9uZXRh'@;
put 'cnkgY29tcGVuc2F0aW9uLCBvciBub3QuXG5cbklmIHlvdXIgdXNlIGlzIHN0cmljdGx5IHBlcnNvbmFsIG9yIHNvbGVseSBmb3IgZXZhbHVhdGlvbiBwdXJwb3NlcywgbWVhbmluZyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgdGhlIHN1aXRhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5k'@;
put 'IHVzZWZ1bG5lc3Mgb2YgdGhpcyBzb2Z0d2FyZSBvdXRzaWRlIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGluY2x1ZGVkIGluIHRoZSAibGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZCIgZmlsZSBh'@;
put 'dmFpbGFibGUgaGVyZTogIGh0dHBzOi8vZ2l0LmRhdGFjb250cm9sbGVyLmlvL2RjL2RjL3NyYy9icmFuY2gvbWFpbi9saWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kXG5cbllvdXIgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMg'@;
put 'c3ViamVjdCB0byB0aGUgdGVybXMgaW5jbHVkZWQgaW4gYW4gYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudC5cblxuSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFueSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJl'@;
put 'IGNvbnNpZGVyZWQgY29tcGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLlxuXG5VTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIDRHTCBBUFBTIFBST1ZJREVTIFRISVMgU09GVFdBUkUgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP'@;
put 'TlMgT0YgQU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBTSEFMTCA0R0wgQVBQUyBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNF'@;
put 'UVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLlxuXG5cbid9bmdPbkluaXQoKXtjb25zdCBhPXBhLnNldE9wdGlvbnMoe30pO3RoaXMuZXVsYV9tYXJrZG93bj1hLnBhcnNlKHRoaXMuZXVs'@;
put 'YV9tYXJrZG93bil9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMubWFya2Rvd25DYXJkJiZ0aGlzLm1hcmtkb3duQ2FyZC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzY3JvbGwiKSl9KX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5h'@;
put 'Z3JlZUNoZWNrZWQmJih0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVnaXN0ZXJ1c2VyIix7U0FTQ29udHJvbFRhYmxlOlt7QUNDRVBURUQ6InllcyJ9XX0pLnRoZW4oZD0+e2QucmV0dXJuJiZkLnJl'@;
put 'dHVyblswXSYmIlNVQ0NFU1MiPT09ZC5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZWxvYWQoKX0pLmNhdGNoKGQ9PmQpLmZpbmFsbHkoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5hZ3JlZUJveExvY2tlZD0hMSx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmFncmVlQ2hlY2tlZD0hMX0s'@;
put 'MWUzKX0pKX1vbkNhcmRCbG9ja1Njcm9sbChhKXtpZighdGhpcy5hZ3JlZUNsaWNrZWQpe2xldCBkPWEudGFyZ2V0O2QmJih0aGlzLmFncmVlQm94TG9ja2VkPSEoZC5zY3JvbGxUb3ArZC5vZmZzZXRIZWlnaHQ+PWQuc2Nyb2xsSGVpZ2h0LTIwKSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdGVybXMiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhWWWUsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5tYXJrZG93bkNhcmQ9'@;
put 'aC5maXJzdCl9fSxkZWNsczoxMyx2YXJzOjYsY29uc3RzOltbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJpbm5lckhUTUwiLCJzY3JvbGwiXSxbIm1hcmtkb3duQ2FyZCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEs'@;
put 'ImFjY2VwdC1jaGVja2JveCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbImNscklubGluZSIsInNtYWxsIiw0LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCJdXSx0ZW1wbGF0'@;
put 'ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxOZSgyLCIgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgIiksbWUoMywicCIpLE5lKDQsIiBXZWxjb21lIHRvIERhdGEgQ29udHJvbGxlciBmb3IgU0FTISBQbGVhc2UgcmV2aWV3IGFuZCBhY2NlcHQgYWdy'@;
put 'ZWVtZW50IGJlbG93IGluIG9yZGVyIHRvIHByb2NlZWQuICIpLHllKCkoKSxtZSg1LCJkaXYiLDIsMykseHQoInNjcm9sbCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DYXJkQmxvY2tTY3JvbGwoZil9KSx5ZSgpLG1lKDcsImRpdiIsNCkoOCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDUpKDks'@;
put 'ImlucHV0Iiw2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYWdyZWVDaGVja2VkPWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnRlcm1zQWdyZWVDaGFuZ2UoKX0pLHllKCksbWUoMTAsImxhYmVsIiksTmUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3Jl'@;
put 'ZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIikseWUoKSgpLEplKDEyLEJZZSwxLDAsImNsci1zcGlubmVyIiw3KSx5ZSgpKCkpLDImYSYmKENlKDUpLFJlKCJpbm5lckhUTUwiLGQuZXVsYV9tYXJrZG93bixxMiksQ2UoMyksZHIoImRpc2FibGVkIixkLmFncmVlQm94TG9ja2VkKSxDZSgxKSxS'@;
put 'ZSgibmdNb2RlbCIsZC5hZ3JlZUNoZWNrZWQpKCJkaXNhYmxlZCIsZC5hZ3JlZUJveExvY2tlZCksQ2UoMyksUmUoIm5nSWYiLGQuYWdyZWVCb3hMb2NrZWQmJmQuYWdyZWVDbGlja2VkKSl9LGRlcGVuZGVuY2llczpbWmksUzAsQnMsT3MsVXMsRDAsVDAsdTJdLHN0eWxlczpbIltfbmdob3N0'@;
put 'LSVDT01QJV17aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZjVmNmZmfS5jbHItY2hlY2tib3gtd3JhcHBlci5kaXNhYmxlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNX0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9u'@;
put 'OmNvbHVtbjttYXJnaW4tdG9wOjB9LmNhcmRbX25nY29udGVudC0lQ09NUCVdICAgLmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTtvdmVyZmxvdzphdXRvO2JhY2tncm91bmQtY29sb3I6I2Y0ZjRmNH0uYWNjZXB0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRk'@;
put 'aW5nOjEwcHggMTVweH0iXX0pLGN9KSgpO2Z1bmN0aW9uIHpZZShjLGwpezEmYyYmKG1lKDAsInAiLDI3KSxOZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3QgcHJvdmlkZSB5b3UgbW9yZSBkZXRhaWxzIGF0IHRoZSBtb21lbnQgIikseWUoKSl9ZnVuY3Rpb24gVVllKGMs'@;
put 'bCl7aWYoMSZjJiZxdCgwLCJwIiwyOCksMiZjKXtjb25zdCBhPVZlKDMpO1JlKCJpbm5lckhUTUwiLGEubGljZW5zZUVycm9yc1thLmtleUVycm9yXSxxMil9fWZ1bmN0aW9uIFpZZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiKSgxLCJzdHJvbmciKSxOZSgyLCJEZXRhaWxzOiIpLHllKCksTmUo'@;
put 'MykseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDMpLGdyKCIgIixhLmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIFlZZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEselllLDIsMCwicCIsMjUpLEplKDIsVVllLDEsMSwicCIsMjYpLEplKDMsWlllLDQsMSwicCIsMSksenIoKSksMiZj'@;
put 'KXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIiwhYS5rZXlFcnJvciksQ2UoMSksUmUoIm5nSWYiLGEua2V5RXJyb3IpLENlKDEpLFJlKCJuZ0lmIixhLmVycm9yRGV0YWlscyl9fWZ1bmN0aW9uIFdZZShjLGwpezEmYyYmKFZyKDApLG1lKDEsInAiLDI3KSxOZSgyLCIgVGhlIHJlZ2lz'@;
put 'dGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxxdCgzLCJjb250YWN0LWxpbmsiLDI5KSxOZSg0LCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZXMg'@;
put 'Zm9yIHRoaXMgcHJvZHVjdC4gIikseWUoKSx6cigpKX1mdW5jdGlvbiBHWWUoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJwIiwyNyksTmUoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBrZXkgYnkgdXBsb2FkaW5nIHRoZSBsaWNlbmNlIGZpbGUgb3IgYnkgcGFzdGluZyBhIGxpY2Vuc2Uga2V5IGFu'@;
put 'ZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSx5ZSgpLHpyKCkpfWZ1bmN0aW9uICRZZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoMik7ZHIoIm1pc3NrZXkiLGgubWlz'@;
put 'c21hdGNoZWRLZXkmJmgubWlzc21hdGNoZWRLZXk9PT1hKSxDZSgxKSx6YygiICIsYSwiIixkPT09KG51bGw9PWguc3lzc2l0ZS52YWx1ZT9udWxsOmguc3lzc2l0ZS52YWx1ZS5sZW5ndGgpLTE/IiI6IiwiLCIgIil9fWZ1bmN0aW9uIHFZZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDMwKSgx'@;
put 'LCJzdHJvbmciKSxOZSgyLCJBbGxvd2VkIHVzZXJzOiIpLHllKCksTmUoMykseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDMpLGdyKCIgIixhLmxpY2Vuc2VLZXlEYXRhLnVzZXJzX2FsbG93ZWQsIiAiKX19ZnVuY3Rpb24gS1llKGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsMzEp'@;
put 'fWZ1bmN0aW9uIFhZZShjLGwpezEmYyYmKG1lKDAsImRpdiIpLE5lKDEsIiBEcm9wIC8gQnJvd3NlIGxpY2VuY2UgZmlsZSAiKSx5ZSgpKX1mdW5jdGlvbiBKWWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxOZSgxLCIgU2VsZWN0ZWQgZmlsZTogIiksbWUoMiwic3Ryb25nIiksTmUoMyks'@;
put 'eWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMyksb3IoYS5saWNlbmNlZmlsZS5maWxlbmFtZSl9fWZ1bmN0aW9uIFFZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsInN0cm9uZyIpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDIpLG9yKGEubGljZW5jZUZp'@;
put 'bGVFcnJvcil9fWZ1bmN0aW9uIGVXZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsWFllLDIsMCwiZGl2IiwxKSxKZSgyLEpZZSw0LDEsImRpdiIsMSksSmUoMyxRWWUsMywxLCJkaXYiLDEpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsIiI9PT1hLmxpY2VuY2Vm'@;
put 'aWxlLmZpbGVuYW1lKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxDZSgxKSxSZSgibmdJZiIsYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gdFdlKGMsbCl7MSZjJiYobWUoMCwiYnV0dG9uIiwzMiksTmUoMSwiIENvbnRpbnVlIHdpdGggZnJlZSB0'@;
put 'aWVyICIpLHllKCkpfWZ1bmN0aW9uIG5XZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMikoMSwiZGl2IiwzKSxOZSgyLCJMaWNlbmNpbmciKSx5ZSgpLG1lKDMsImRpdiIsNCksSmUoNCxZWWUsNCwzLCJuZy1jb250YWluZXIiLDUpLEplKDUsV1llLDUsMCwibmctY29u'@;
put 'dGFpbmVyIiw1KSxKZSg2LEdZZSwzLDAsIm5nLWNvbnRhaW5lciIsNSksbWUoNywicCIpKDgsInN0cm9uZyIpLE5lKDksIlNZU1NJVEU6IikseWUoKSxKZSgxMCwkWWUsMiw0LCJzcGFuIiw2KSxtZSgxMSwiYSIsNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMTMp'@;
put 'LGY9JGkoMTUpLF89VmUoKTtyZXR1cm4ganQoXy5jb3B5U3lzc2l0ZShoLGYsXy5zeXNzaXRlLnZhbHVlfHxbXSkpfSkscXQoMTIsImNsci1pY29uIiw4LDkpLG1lKDE0LCJzcGFuIiwxMCwxMSksTmUoMTYsIkNvcHkgdG8gY2xpcGJvYXJkIikseWUoKSgpKCksSmUoMTcscVllLDQsMSwicCIs'@;
put 'MTIpLG1lKDE4LCJjbHItdGFicyIpKDE5LCJjbHItdGFiIikoMjAsImJ1dHRvbiIsMTMpLE5lKDIxLCJVcGxvYWQgbGljZW5jZSIpLHllKCksbWUoMjIsImNsci10YWItY29udGVudCIpKDIzLCJpbnB1dCIsMTQsMTUpLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChW'@;
put 'ZSgpLm9uRmlsZUNhcHR1cmUoaCkpfSkseWUoKSxtZSgyNSwiZGl2IiwxNikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdCgkaSgyNCkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRmlsZUNhcHR1cmUoaCwhMCkp'@;
put 'fSksSmUoMjYsS1llLDEsMCwiY2xyLXNwaW5uZXIiLDE3KSxKZSgyNyxlV2UsNCwzLCJuZy1jb250YWluZXIiLDEpLHllKCkoKSgpLG1lKDI4LCJjbHItdGFiIikoMjksImJ1dHRvbiIsMTMpLE5lKDMwLCJQYXN0ZSBsaWNlbmNlIikseWUoKSxtZSgzMSwiY2xyLXRhYi1jb250ZW50IikoMzIs'@;
put 'ImZvcm0iLDE4KSgzMywicCIpLE5lKDM0LCJMaWNlbmNlIGtleToiKSx5ZSgpLG1lKDM1LCJkaXYiLDE5KSgzNiwidGV4dGFyZWEiLDIwKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGljZW5jZUtleVZhbHVlPWgpfSkoIm1vdXNlbGVhdmUi'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudHJpbUtleXMoKSl9KSx5ZSgpKCkoKSxtZSgzNywiZm9ybSIsMjEpKDM4LCJwIiksTmUoMzksIkFjdGl2YXRpb24ga2V5OiIpLHllKCksbWUoNDAsImRpdiIsMTkpKDQxLCJ0ZXh0YXJlYSIsMjIpLHh0KCJuZ01vZGVsQ2hhbmdlIixm'@;
put 'dW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5hY3RpdmF0aW9uS2V5VmFsdWU9aCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS50cmltS2V5cygpKX0pLHllKCkoKSgpKCkoKSgpLG1lKDQyLCJidXR0b24iLDIzKSx4dCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYXBwbHlLZXlzKCkpfSksTmUoNDMsIiBBcHBseSBsaWNlbmNlIGtleXMgIikseWUoKSxKZSg0NCx0V2UsMiwwLCJidXR0b24iLDI0KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksUmUoIm5nU3dpdGNoIixhLmFjdGlvbiksQ2Uo'@;
put 'MSksUmUoIm5nU3dpdGNoQ2FzZSIsImtleSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJsaW1pdCIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxDZSg0KSxSZSgibmdGb3JPZiIsYS5zeXNzaXRlLnZhbHVlKSxDZSg3KSxSZSgibmdJZiIsYS5saWNlbnNlS2V5RGF0YSYm'@;
put 'YS51c2VyQ291bnRMaW1pdGF0aW9uKSxDZSg5KSxSZSgibmdJZiIsYS5saWNlbmNlRmlsZUxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5saWNlbmNlRmlsZUxvYWRpbmcpLENlKDkpLFJlKCJuZ01vZGVsIixhLmxpY2VuY2VLZXlWYWx1ZSksQ2UoNSksUmUoIm5nTW9kZWwiLGEuYWN0aXZh'@;
put 'dGlvbktleVZhbHVlKSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsYS5hcHBseWluZ0tleXMpKCJkaXNhYmxlZCIsYS5kaXNhYmxlQXBwbHlCdXR0b24pLENlKDIpLFJlKCJuZ0lmIixhLmlzQXBwRnJlZVRpZXIudmFsdWUpfX1mdW5jdGlvbiByV2UoYyxsKXsxJmMmJnF0KDAsImFwcC10ZXJtcyIp'@;
put 'fXZhciBxc2U9ZnVuY3Rpb24oYyl7cmV0dXJuIGMua2V5PSJrZXkiLGMucmVnaXN0ZXI9InJlZ2lzdGVyIixjLmxpbWl0PSJsaW1pdCIsYy51cGRhdGU9InVwZGF0ZSIsY30ocXNlfHx7fSk7Y29uc3QgaVdlPVt7cGF0aDoiOmFjdGlvbiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmFwcFNlcnZpY2U9Zix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlzc2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBj'@;
put 'b250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBw'@;
put 'bGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZh'@;
put 'bGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJ'@;
put 'VEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2VuY2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2'@;
put 'YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNl'@;
put 'cnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2Vu'@;
put 'Y2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxlbmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1'@;
put 'ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhPT57dGhpcy5rZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5t'@;
put 'aXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWlscz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmplY3QudmFsdWVzKHFzZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMu'@;
put 'bGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRy'@;
put 'aW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksYS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJU'@;
put 'ZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlz'@;
put 'LnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihkPT57ZC5yZXR1cm4mJmQucmV0dXJuWzBdJiYiU1VD'@;
put 'Q0VTUyI9PT1kLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlcGxhY2UobG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmFwcGx5aW5nS2V5cz0hMX0pfW9uRmlsZUNhcHR1cmUoYSxkPSExKXtsZXQgaD1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYo'@;
put 'dGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1oLm5hbWUsIWgpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSEwO2NvbnN0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9Xz0+e2lmKHRoaXMubGljZW5jZUZpbGVFcnJvcj0iRXJyb3IgcmVhZGluZyBmaWxlLiIsIV98fCFfLnRhcmdl'@;
put 'dHx8MiE9Xy50YXJnZXQucmVhZHlTdGF0ZXx8Xy50YXJnZXQuZXJyb3J8fCFfLnRhcmdldC5yZXN1bHQpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZUZpbGVFcnJvcj12b2lkIDA7Y29uc3QgVD1fLnRhcmdldC5yZXN1bHQudG9TdHJpbmcoKS5zcGxpdCgi'@;
put 'XG4iKTt0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT1UWzFdLHRoaXMubGljZW5jZUtleVZhbHVlPVRbMF19LGYucmVhZEFzVGV4dChoKX1zd2l0Y2hUeXBlKGEpe3RoaXMuaW5wdXRUeXBlPWF9Z2V0IGRpc2FibGVBcHBseUJ1dHRvbigpe3JldHVybiB0aGlzLmxpY2VuY2VLZXlWYWx1ZS5sZW5n'@;
put 'dGg8MXx8dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMubGljZW5jZUtleVZhbHVlPT09dGhpcy5jdXJyZW50TGljZW5jZUtleSYmdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChHbCksdHQoQzApLHR0KG9hKSx0dChVeCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGljZW5zaW5nIl1dLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJd'@;
put 'LFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJtaXNza2V5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLXRvcC1yaWdodCIsMywiY2xp'@;
put 'Y2siXSxbInNoYXBlIiwiY29weSIsInNpemUiLCIxNSIsMSwiY3Vyc29yLXBvaW50ZXIiXSxbImNvcHlJY29uIiwiIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsiY29weVRvb2x0aXAiLCIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWyJjbHJUYWJMaW5rIiwiIl0sWyJ0eXBlIiwiZmls'@;
put 'ZSIsImhpZGRlbiIsIiIsMywiY2hhbmdlIl0sWyJsaWNlbmNlRmlsZSIsIiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsImRyb3AtYXJlYSIsMywiY2xpY2siLCJmaWxlRHJvcCJdLFsiY2xhc3MiLCJzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWzEsImNsci1mb3JtIiwibGljZW5zZS1rZXktZm9ybSJd'@;
put 'LFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbIm5hbWUiLCJsaWNlbnNlLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBsaWNlbmNlIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSJdLFsxLCJjbHItZm9y'@;
put 'bSIsImFjdGl2YXRpb24ta2V5LWZvcm0iXSxbIm5hbWUiLCJhY3RpdmF0aW9uLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBhY3RpdmF0aW9uIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSJdLFsxLCJidG4i'@;
put 'LCJidG4tcHJpbWFyeSIsImFwcGx5LWtleXMiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJyb3V0ZXJMaW5rIiwiLyIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tbGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5'@;
put 'LWVycm9yIiwzLCJpbm5lckhUTUwiLDQsIm5nSWYiXSxbMSwia2V5LWVycm9yIl0sWzEsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIl0sWyJjbGFzc2VzIiwiY29sb3ItZ3JlZW4iXSxbMSwibS0wIl0sWzEsInNwaW5uZXItc20iXSxbInJvdXRlckxpbmsiLCIvIiwxLCJidG4iLCJidG4tc20i'@;
put 'LCJidG4tbGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEplKDAsbldlLDQ1LDEzLCJkaXYiLDApLEplKDEscldlLDEsMCwiYXBwLXRlcm1zIiwxKSksMiZhJiYoUmUoIm5nSWYiLCJyZWdpc3RlciIhPT1kLmFjdGlvbiksQ2UoMSksUmUoIm5nSWYiLCJyZWdpc3RlciI9PT1k'@;
put 'LmFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLG5kLHRoLENwLFdhLEJzLHdwLE9zLHIyLGthLFp1LGRoLExwLE9wLGRnLFJwLElwLGNnLHUyLEJ1LGpZZSxqRV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gOTZweCk7cGFkZGluZzoyMHB4fS5jYXJk'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LmtleS1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1pc3NrZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmxpY2Vuc2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZh'@;
put 'dGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVd'@;
put 'LCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxNzBweDttYXgtaGVpZ2h0OjE3MHB4O21pbi1oZWln'@;
put 'aHQ6MTcwcHg7cmVzaXplOm5vbmV9LmFwcGx5LWtleXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo0MHB4O3dpZHRoOjIwMHB4fS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRk'@;
put 'aW5nOjE1cHg7Ym9yZGVyOjJweCBkYXNoZWQgI2IyYjJiMjtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjttYXJnaW46MTBweCAwfWNsci10YWJzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0i'@;
put 'XX0pLGN9KSgpLGNhbkFjdGl2YXRlOltwVV0sY2FuRGVhY3RpdmF0ZTpbcFVdfV07bGV0IG9XZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBv'@;
put 'cnRzOltoYy5mb3JDaGlsZChpV2UpLGhjXX0pLGN9KSgpLHNXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxxbCxfdSxvV2Us'@;
put 'VjddfSksY30pKCk7ZnVuY3Rpb24gYVdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDE5KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO1JlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrZC5qc1BhcmFtc1thXSksQ2UoMSksZ3IoIiAiLGQuanNQYXJhbXNb'@;
put 'YV0sIiAiKX19ZnVuY3Rpb24gbFdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMSksZ3IoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gY1dlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIi'@;
put 'KSgxLCJ0ZCIsNCksTmUoMikseWUoKSxKZSgzLGFXZSwyLDIsInRkIiwxNyksSmUoNCxsV2UsMiwxLCJ0ZCIsMTgpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhKSxDZSgxKSxSZSgibmdJZiIsYS5pbmNsdWRlcygiVEFCTEVfSUQiKSksQ2UoMSksUmUoIm5nSWYi'@;
put 'LCFhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKX19ZnVuY3Rpb24gdVdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsNCksTmUoMikseWUoKSxtZSgzLCJ0ZCIsNCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgzKTtDZSgyKSxvcihhKSxDZSgyKSxv'@;
put 'cihkLnN1Ym1pdERldGFpbHNbYV0pfX1mdW5jdGlvbiBkV2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMykoMywidGhlYWQiKSg0LCJ0ciIpKDUsInRoIiw0KSxOZSg2LCJOYW1lIikseWUoKSxtZSg3LCJ0aCIsNCksTmUoOCwi'@;
put 'VmFsdWUiKSx5ZSgpKCkoKSxtZSg5LCJ0Ym9keSIpLEplKDEwLHVXZSw1LDIsInRyIiw1KSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMTApLFJlKCJuZ0Zvck9mIixhLnN1Ym1pdEFycil9fWZ1bmN0aW9uIGhXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDQp'@;
put 'LE5lKDIpLHllKCksbWUoMywidGQiLDQpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMik7Q2UoMiksb3IoYSksQ2UoMiksb3IoZC5qc1BhcmFtc1thXSl9fWZ1bmN0aW9uIGZXZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWJzIikoMSwiY2xyLXRhYiIp'@;
put 'KDIsImJ1dHRvbiIsMjApLE5lKDMsIlN1Ym1pdHRlZCBUYWJsZSBEZXRhaWxzIikseWUoKSxKZSg0LGRXZSwxMSwxLCJjbHItdGFiLWNvbnRlbnQiLDIxKSx5ZSgpLG1lKDUsImNsci10YWIiKSg2LCJidXR0b24iLDIwKSxOZSg3LCJCYXNlIFRhYmxlIERldGFpbHMiKSx5ZSgpLG1lKDgsImNs'@;
put 'ci10YWItY29udGVudCIpKDksImRpdiIsMjIpKDEwLCJ0YWJsZSIsMykoMTEsInRoZWFkIikoMTIsInRyIikoMTMsInRoIiw0KSxOZSgxNCwiTmFtZSIpLHllKCksbWUoMTUsInRoIiw0KSxOZSgxNiwiVmFsdWUiKSx5ZSgpKCkoKSxtZSgxNywidGJvZHkiKSxKZSgxOCxoV2UsNSwyLCJ0ciIs'@;
put 'NSkseWUoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsITApLENlKDE0KSxSZSgibmdGb3JPZiIsYS5rZXlzQXJyYXkpfX1mdW5jdGlvbiBwV2UoYyxsKXsxJmMmJihtZSgwLCJwIiw3NCksTmUoMSwiIFRoZXJlIGFyZSBubyBkZXRhaWxzIHRv'@;
put 'IHNob3cgIikseWUoKSl9ZnVuY3Rpb24gZ1dlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiZGl2Iiw3NSkoMiwic3BhbiIpLE5lKDMsIlRhYmxlIElkOiIpLHllKCksbWUoNCwic3Ryb25nIiw3NiksTmUoNSkseWUoKSgpLG1lKDYsImRpdiIpKDcsInNwYW4iKSxOZSg4LCJTdWJtaXR0ZXI6'@;
put 'IikseWUoKSxtZSg5LCJzcGFuIiw3NyksTmUoMTApLHllKCkoKSxtZSgxMSwiZGl2IikoMTIsInNwYW4iKSxOZSgxMywiU3VibWl0dGVkIG9uOiIpLHllKCksbWUoMTQsInNwYW4iLDc3KSxOZSgxNSkseWUoKSgpLG1lKDE2LCJkaXYiKSgxNywic3BhbiIpLE5lKDE4LCJTdWJtaXR0ZWQgUmVh'@;
put 'c29uOiIpLHllKCksbWUoMTksInNwYW4iLDc3KSxOZSgyMCkseWUoKSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxSZSgicm91dGVyTGluayIsIi9zdGFnZS8iKyhudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lEKSksQ2UoMSksZ3IoIiAi'@;
put 'LG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiAiKSxDZSg1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfQllfTk0sIiAiKSxDZSg1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/'@;
put 'bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLENlKDUpLGdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9SRUFTT05fVFhULCIgIil9fWZ1bmN0aW9uIG1XZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDc4KSxx'@;
put 'dCgxLCJjbHItaWNvbiIsNzkpLE5lKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIikseWUoKSl9ZnVuY3Rpb24gdldlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw0OSkoMSwiZGl2Iiw1MCkoMiwi'@;
put 'ZGl2Iiw1MSksSmUoMyxwV2UsMiwwLCJwIiw0NSksSmUoNCxnV2UsMjEsNSwibmctY29udGFpbmVyIiw4KSx5ZSgpLG1lKDUsImRpdiIsNTIpKDYsImRpdiIsNTMpKDcsImRpdiIsNTQpKDgsImRpdiIsNTUpKDksImJ1dHRvbiIsNTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKDQpO3JldHVybiBqdChoLmdvVG9CYXNlKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxOZSgxMCwiIEdvIHRvIGJhc2UgdGFibGUgc2NyZWVuICIpLHllKCksbWUoMTEsImJ1dHRvbiIsNTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtj'@;
put 'b25zdCBoPVZlKDQpO3JldHVybiBqdChoLmdldFRhYmxlKGgudGFibGVJZCkpfSksTmUoMTIsIiBHbyB0byBlZGl0ZWQgc2NyZWVuICIpLHllKCksbWUoMTMsImJ1dHRvbiIsNTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDQpO3JldHVybiBqdChoLmdvQmFjayhu'@;
put 'dWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTmUoMTQsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSx5ZSgpKCkoKSgpLG1lKDE1LCJkaXYiLDU5KSgxNiwiYnV0dG9uIiw2MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5hcHBy'@;
put 'b3ZlVGFibGUoKSl9KSxOZSgxNywiIEFDQ0VQVCAiKSx5ZSgpLG1lKDE4LCJidXR0b24iLDYxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlamVjdE9wZW49ITApfSksTmUoMTksIiBSRUpFQ1QgIikseWUoKSxtZSgyMCwiY2xyLXRvZ2dsZS1jb250YWlu'@;
put 'ZXIiLDYyKSgyMSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw2MykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg0KS5mb3JtYXR0ZWRWYWx1ZXM9aCl9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5m'@;
put 'b3JtYXR0aW5nQ2hhbmdlZCgpKX0pLHllKCksbWUoMjMsImxhYmVsIiw2NCksTmUoMjQpLHllKCkoKSgpKCksbWUoMjUsImRpdiIsNjUpLEplKDI2LG1XZSwzLDAsInNwYW4iLDY2KSxtZSgyNywiZGl2IiwzMSkoMjgsImRpdiIsNjcpKDI5LCJzcGFuIiw2OCksTmUoMzAsIiBDaGFuZ2VkIFJv'@;
put 'd3MgIiksbWUoMzEsInNwYW4iLDY5KSxOZSgzMikseWUoKSgpLG1lKDMzLCJzcGFuIiw3MCksTmUoMzQsIiBBZGRlZCBSb3dzICIpLG1lKDM1LCJzcGFuIiw3MSksTmUoMzYpLHllKCkoKSxtZSgzNywic3BhbiIsNzIpLE5lKDM4LCIgRGVsZXRlZCBSb3dzICIpLG1lKDM5LCJzcGFuIiw3Myks'@;
put 'TmUoNDApLHllKCkoKSgpKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMyksUmUoIm5nSWYiLCFhLnRhYmxlRGV0YWlscyksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVEZXRhaWxzKSxDZSgxMiksUmUoImNsckxvYWRpbmciLGEuYWNjZXB0TG9hZGluZykoImRpc2FibGVkIiwh'@;
put 'YS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLENlKDIpLFJlKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8'@;
put 'fGEubm9DaGFuZ2VzKSxDZSg0KSxSZSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLENlKDIpLG9yKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLENlKDIpLFJlKCJuZ0lmIixhLmRpZmZzTGltaXQpLENlKDYpLG9yKGEubGVucy51cGRhdGVkKSxDZSg0'@;
put 'KSxvcihhLmxlbnMubmV3KSxDZSg0KSxvcihhLmxlbnMuZGVsZXRlZCl9fWZ1bmN0aW9uIF9XZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gYldlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4MCkoMSwic3Bh'@;
put 'biIsODEpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksSmUoMyxfV2UsMywwLCJkaXYiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgzKSxSZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24geVdlKGMsbCl7MSZjJiYobWUoMCwicCIsNzQpLE5lKDEsIiBUaGVyZSBh'@;
put 'cmUgbm8gY2hhbmdlcyB0byBzaG93ICIpLHllKCkpfWZ1bmN0aW9uIHdXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRoIiw0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksb3IoYSl9fWZ1bmN0aW9uIENXZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDg2KSxO'@;
put 'ZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRleCxkPVZlKDIpLmluZGV4LGg9VmUoNCk7Q2UoMSksZ3IoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19Y29uc3QgS3NlPWZ1bmN0aW9uKGMpe3JldHVybnsiY2ggdG9vbHRpcCB0b29sdGlwLW1k'@;
put 'IHRvb2x0aXAtdG9wLXJpZ2h0IjpjfX07ZnVuY3Rpb24gU1dlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDg0KSxOZSgxKSxKZSgyLENXZSwyLDEsInNwYW4iLDg1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoMikuaW5kZXgsZj1WZSg0KTtSZSgibmdD'@;
put 'bGFzcyIsSjIoMyxLc2UsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxDZSgxKSxncigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLENlKDEpLFJlKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9'@;
put 'fWZ1bmN0aW9uIE1XZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsU1dlLDMsNSwidGQiLDgzKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRleCxkPVZlKDQpO0NlKDEpLFJlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiB4V2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIs'@;
put 'NCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMikuaW5kZXgsaD1WZSg0KTtDZSgxKSxncigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiBFV2UoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLHhXZSwyLDEsInRkIiw0NyksenIoKSks'@;
put 'MiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSg0KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19Y29uc3QgWHNlPWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm57YWRkZWRSb3c6YyxkZWxldGVkUm93OmwsdXBkYXRlZFJvdzphfX07ZnVuY3Rpb24ga1dlKGMsbCl7aWYoMSZjJiYo'@;
put 'bWUoMCwidHIiLDgyKSxKZSgxLE1XZSwyLDEsIm5nLWNvbnRhaW5lciIsOCksSmUoMixFV2UsMiwxLCJuZy1jb250YWluZXIiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9VmUoNCk7UmUoIm5nQ2xhc3MiLHlfKDMsWHNlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1k'@;
put 'LmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLENlKDEpLFJlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIEFXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIs'@;
put 'MjkpKDEsImRpdiIsMzApKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDMzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmdvVG9BcHByb3ZhbHNMaXN0KCkpfSkscXQoNSwiY2xyLWljb24iLDM0KSxOZSg2LCJCYWNrIHRvIGFwcHJvdmFscyBs'@;
put 'aXN0ICIpLHllKCkoKSxtZSg3LCJkaXYiLDM1KSg4LCJoMyIsMzYpLE5lKDkpLHllKCkoKSxtZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmdldERldGFpbHMoKSl9KSxxdCgxMiwiY2xyLWljb24iLDM5KSx5ZSgp'@;
put 'KCkoKSxtZSgxMywicCIsNDApLE5lKDE0KSx5ZSgpKCksbWUoMTUsImRpdiIsNDEpLEplKDE2LHZXZSw0MSwxMSwiZGl2Iiw0MikseWUoKSxKZSgxNyxiV2UsNCwxLCJkaXYiLDQzKSxtZSgxOCwiZGl2Iiw0NCksSmUoMTkseVdlLDIsMCwicCIsNDUpLG1lKDIwLCJ0YWJsZSIsMykoMjEsInRo'@;
put 'ZWFkIikoMjIsInRyIiw0NiksSmUoMjMsd1dlLDIsMSwidGgiLDQ3KSx5ZSgpKCksbWUoMjQsInRib2R5IiksSmUoMjUsa1dlLDMsNywidHIiLDQ4KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgzKTtDZSg5KSxncigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMu'@;
put 'VEFCTEVfTk0sIiAiKSxDZSg1KSxncigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfREVTQywiICIpLENlKDIpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksQ2UoMiksUmUoIm5nSWYiLGEubG9hZGluZ1RhYmxl'@;
put 'JiZhLm5vQ2hhbmdlcyksQ2UoNCksUmUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxDZSgyKSxSZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gVFdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyNyksSmUoMSxBV2UsMjYsNywiZGl2IiwyOCkseWUoKSksMiZjKXtjb25zdCBhPVZl'@;
put 'KDIpO0NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIERXZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDgxKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBJV2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgcHJldmlldyIp'@;
put 'LHllKCkoKSl9ZnVuY3Rpb24gTFdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4NyksSmUoMSxEV2UsMiwwLCJzcGFuIiw4OCksSmUoMixJV2UsMywwLCJkaXYiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIs'@;
put 'IWEubG9hZGVkKX19ZnVuY3Rpb24gUldlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMyksSmUoMSxUV2UsMiwxLCJkaXYiLDI0KSxtZSgyLCJkaXYiLDI1KSxKZSgzLExXZSwzLDIsImRpdiIsMjYpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEubG9hZGVk'@;
put 'KSxDZSgyKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gT1dlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNzgpLHF0KDEsImNsci1pY29uIiw3OSksTmUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSx5ZSgp'@;
put 'KX1mdW5jdGlvbiBQV2UoYyxsKXsxJmMmJnF0KDAsImRpdiIsNDkpfWZ1bmN0aW9uIEZXZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gSFdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDMpKDEsInNwYW4i'@;
put 'LDgxKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLEplKDMsRldlLDMsMCwiZGl2Iiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMyksUmUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIE5XZShjLGwpe2lmKDEmYyYmKG1lKDAsInRoIiw0KSxOZSgxKSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksb3IoYSl9fWZ1bmN0aW9uIFZXZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDg2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRleCxkPVZlKDIpLmluZGV4LGg9VmUoNCk7Q2UoMSksZ3IoIk9yaWdpbmFsIHZhbHVlIGlz'@;
put 'OiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gQldlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDg0KSxOZSgxKSxKZSgyLFZXZSwyLDEsInNwYW4iLDg1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoMikuaW5kZXgsZj1WZSg0KTtS'@;
put 'ZSgibmdDbGFzcyIsSjIoMyxLc2UsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxDZSgxKSxncigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLENlKDEpLFJlKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFy'@;
put 'cltoXSl9fWZ1bmN0aW9uIGpXZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsQldlLDMsNSwidGQiLDgzKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRleCxkPVZlKDQpO0NlKDEpLFJlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiB6V2UoYyxsKXtpZigxJmMmJihtZSgw'@;
put 'LCJ0ZCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMikuaW5kZXgsaD1WZSg0KTtDZSgxKSxncigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiBVV2UoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLHpXZSwyLDEsInRkIiw0Nyks'@;
put 'enIoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSg0KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gWldlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDgyKSxKZSgxLGpXZSwyLDEsIm5nLWNvbnRhaW5lciIsOCksSmUoMixVV2UsMiwxLCJuZy1jb250'@;
put 'YWluZXIiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9VmUoNCk7UmUoIm5nQ2xhc3MiLHlfKDMsWHNlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLENlKDEpLFJlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNo'@;
put 'QXJyW2FdKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIFlXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsOTMpKDEsImRpdiIsOTQpKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDk1KSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmdvVG9TdWJtaXRMaXN0KCkpfSkscXQoNSwiY2xyLWljb24iLDM0KSxOZSg2LCJCYWNrIHRvIHN1Ym1pdHRlZCBsaXN0ICIpLHllKCkoKSxtZSg3LCJkaXYiLDk2KSg4LCJoMyIsOTcpLE5lKDkpLHllKCkoKSxtZSgxMCwiZGl2IiwzNyko'@;
put 'MTEsImEiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnRhYmxlRmxhZz0hMCl9KSxxdCgxMiwiY2xyLWljb24iLDM5KSx5ZSgpKCkoKSxtZSgxMywicCIsOTgpLE5lKDE0KSx5ZSgpKCksbWUoMTUsImRpdiIsNTApKDE2LCJkaXYiLDUxKSgxNywiZGl2'@;
put 'Iiw3NSkoMTgsInNwYW4iKSxOZSgxOSwiVGFibGUgSWQ6IikseWUoKSxtZSgyMCwic3Ryb25nIiw3NikoMjEsInNwYW4iKSxOZSgyMikseWUoKSgpKCksbWUoMjMsImRpdiIpKDI0LCJzcGFuIiksTmUoMjUsIlN1Ym1pdHRlZCBvbjoiKSx5ZSgpLG1lKDI2LCJzcGFuIiw3NyksTmUoMjcpLHll'@;
put 'KCkoKSxtZSgyOCwiZGl2IikoMjksInNwYW4iKSxOZSgzMCwiU3VibWl0IE1lc3NhZ2U6IikseWUoKSxtZSgzMSwic3BhbiIpLE5lKDMyKSx5ZSgpKCkoKSxtZSgzMywiZGl2Iiw1MikoMzQsImRpdiIsNTMpKDM1LCJkaXYiLDU0KSgzNiwiZGl2Iiw1NSkoMzcsImJ1dHRvbiIsNTYpLHh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDMpO3JldHVybiBqdChoLmdvVG9CYXNlKGguc3ViT2JqLmJhc2UpKX0pLE5lKDM4LCIgR28gdG8gYmFzZSB0YWJsZSBzY3JlZW4gIikseWUoKSxtZSgzOSwiYnV0dG9uIiw1NykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2Nv'@;
put 'bnN0IGg9VmUoMyk7cmV0dXJuIGp0KGguZ2V0VGFibGUoaC5zdWJPYmoudGFibGVJZCkpfSksTmUoNDAsIiBHbyB0byBlZGl0ZWQgc2NyZWVuICIpLHllKCksbWUoNDEsImJ1dHRvbiIsNTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDMpO3JldHVybiBqdChoLmdv'@;
put 'QmFjayhoLnN1Yk9iai5iYXNlKSl9KSxOZSg0MiwiIEdvIGJhY2sgdG8gZWRpdG9yICIpLHllKCkoKSgpKCksbWUoNDMsImRpdiIsNjUpLEplKDQ0LE9XZSwzLDAsInNwYW4iLDY2KSxtZSg0NSwiZGl2IiwzMSkoNDYsImRpdiIsNjcpKDQ3LCJzcGFuIiw2OCksTmUoNDgsIiBDaGFuZ2VkIFJv'@;
put 'd3MgIiksbWUoNDksInNwYW4iLDY5KSxOZSg1MCkseWUoKSgpLG1lKDUxLCJzcGFuIiw3MCksTmUoNTIsIiBBZGRlZCBSb3dzICIpLG1lKDUzLCJzcGFuIiw3MSksTmUoNTQpLHllKCkoKSxtZSg1NSwic3BhbiIsNzIpLE5lKDU2LCIgRGVsZXRlZCBSb3dzICIpLG1lKDU3LCJzcGFuIiw3Myks'@;
put 'TmUoNTgpLHllKCkoKSgpKCkoKSxtZSg1OSwiZGl2Iiw1MykoNjAsImNsci10b2dnbGUtY29udGFpbmVyIiw5OSkoNjEsImNsci10b2dnbGUtd3JhcHBlciIpKDYyLCJpbnB1dCIsNjMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZm9ybWF0'@;
put 'dGVkVmFsdWVzPWgpfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSx5ZSgpLG1lKDYzLCJsYWJlbCIpLE5lKDY0KSx5ZSgpKCkoKSgpKCkoKSxtZSg2NSwiZGl2IiwxMDApLEplKDY2LFBXZSwxLDAsImRpdiIsNDIpLHll'@;
put 'KCksSmUoNjcsSFdlLDQsMSwiZGl2IiwxMDEpLG1lKDY4LCJkaXYiLDEwMikoNjksInRhYmxlIiwzKSg3MCwidGhlYWQiKSg3MSwidHIiLDQ2KSxKZSg3MixOV2UsMiwxLCJ0aCIsNDcpLHllKCkoKSxtZSg3MywidGJvZHkiKSxKZSg3NCxaV2UsMyw3LCJ0ciIsNDgpLHllKCkoKSgpKCl9aWYo'@;
put 'MiZjKXtjb25zdCBhPVZlKDMpO0NlKDkpLGdyKCIgIixhLnN1Yk9iai5iYXNlLCIgIiksQ2UoNSksZ3IoIiAiLGEudGFibGVEZXNjcmlwdGlvbiwiICIpLENlKDYpLFJlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrYS5zdWJPYmoudGFibGVJZCksQ2UoMiksZ3IoIiAiLGEuc3ViT2JqLnRhYmxl'@;
put 'SWQsIiIpLENlKDUpLGdyKCIgIixhLnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSxDZSg1KSxncigiICIsYS5zdWJPYmouc3VibWl0UmVhc29uLCIgIiksQ2UoMTIpLFJlKCJuZ0lmIixhLmRpZmZzTGltaXQpLENlKDYpLG9yKGEubGVucy51cGRhdGVkKSxDZSg0KSxvcihhLmxlbnMubmV3KSxDZSg0'@;
put 'KSxvcihhLmxlbnMuZGVsZXRlZCksQ2UoNCksUmUoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxDZSgyKSxvcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxDZSgyKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5n'@;
put 'VGFibGUpLENlKDUpLFJlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksQ2UoMiksUmUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIFdXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsOTEpLEplKDEsWVdlLDc1LDE2LCJkaXYiLDkyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2Uo'@;
put 'MSksUmUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gR1dlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gJFdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDQpKDEsImRpdiIsMTA1KSgy'@;
put 'LCJzcGFuIiw4MSksTmUoMywiIExvYWRpbmcuLi4gIikseWUoKSxKZSg0LEdXZSwzLDAsImRpdiIsOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNCksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIHFXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLEplKDEsV1dlLDIs'@;
put 'MSwiZGl2Iiw4OSksSmUoMiwkV2UsNSwxLCJkaXYiLDkwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1jb25zdCBLV2U9ZnVuY3Rpb24oKXtyZXR1cm57c3RhbmRhbG9uZTohMH19O2xldCBKc2U9'@;
put 'KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5kZXRhaWxzT3Blbj0hMSx0aGlzLnJlamVjdE9wZW49ITEsdGhpcy5sZW5zPXtuZXc6MCx1cGRh'@;
put 'dGVkOjAsZGVsZXRlZDowfSx0aGlzLmxvYWRlZD0hMSx0aGlzLmxvYWRpbmdUYWJsZT0hMSx0aGlzLnN1Ym1pdFJlYXNvbj0iIix0aGlzLmluc3RhbmNlPSJob3RJbnN0YW5jZSIsdGhpcy5hY2NlcHRMb2FkaW5nPSExLHRoaXMucmVqZWN0TG9hZGluZz0hMSx0aGlzLnN1Ym1pdHRlZD0hMSx0'@;
put 'aGlzLnRhYmxlRmxhZz0hMSx0aGlzLnJvd0tleXM9W10sdGhpcy5jaEFycj1bXSx0aGlzLnNlY29uZE9wZW49ITEsdGhpcy5mb3JtYXR0ZWRWYWx1ZXM9ITAsdGhpcy5jaGFuZ2VzQXJyPVtdLHRoaXMuZGlmZlRhYmxlPXtkYXRhOltdfSx0aGlzLmRpZmZzTGltaXQ9ITEsdGhpcy5yZWNvcmRz'@;
put 'TGltaXQ9MTAwfWdldCBub0NoYW5nZXMoKXtyZXR1cm4gMD09PXRoaXMubGVucy5uZXcmJjA9PT10aGlzLmxlbnMudXBkYXRlZCYmMD09PXRoaXMubGVucy5kZWxldGVkfWdvVG9CYXNlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdvVG9BcHByb3ZhbHNM'@;
put 'aXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmUiKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvQmFjayhhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nb1RvVmlld2VyKCl7dGhp'@;
put 'cy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd0RldGFpbHNTZWxlY3QoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31nZXREZXRhaWxzKCl7dGhpcy5kZXRhaWxzT3Blbj0hMH1vbkhvdFNlbGVjdGlvbihhKXt0aGlzLmhv'@;
put 'dFNlbGVjdGlvbj1hLnNsaWNlKDAsNCl9b25Ib3REZXNlbGVjdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFNlbGVjdGlvbj1udWxsfSwxMDApfXJlamVjdGluZygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EucmVqZWN0TG9hZGluZz0hMCxhLnN1Ym1pdFJlYXNvbj1h'@;
put 'LnN1Ym1pdFJlYXNvbi5yZXBsYWNlKC9cbi9nLCIuICIpO2xldCBkPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxTVFBfUkVBU09OOmEuc3VibWl0UmVhc29ufTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoZCwiQnJvd3NlclBhcmFtcyIsImFw'@;
put 'cHJvdmVycy9yZWplY3Rpb24iKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMSxhLnJlamVjdExvYWRpbmc9ITF9KX0pKCl9YXBwcm92ZVRhYmxlKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVu'@;
put 'Y3Rpb24qKCl7YS5hY2NlcHRMb2FkaW5nPSEwO2xldCBkPXtBQ1RJT046IkFQUFJPVkVfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRTphLnBhcmFtcz8uRElGRlRJTUUsTElCRFM6YS5wYXJhbXM/LkxJQkRTfTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5hcHByb3ZlVGFibGUoZCwi'@;
put 'U0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pfSkoKX1nb1RvU3VibWl0TGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVy'@;
put 'bCgiL3Jldmlldy9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2UuZ2V0Q2hhbmdlSW5mbyhhKS50aGVuKGg9PntkLnRhYmxlRGV0YWlscz1oLmpzcGFyYW1zWzBdLGQuanNQYXJhbXM9'@;
put 'aC5qc3BhcmFtc1swXTtsZXQgZj1bXTtmb3IoY29uc3QgXyBpbiBkLmpzUGFyYW1zKWQuanNQYXJhbXMuaGFzT3duUHJvcGVydHkoXykmJmYucHVzaChfKTtkLmtleXNBcnJheT1mfSkuY2F0Y2goaD0+e2QuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PntkLmxvYWRlZD0hMH0pfSko'@;
put 'KX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxkPXRoaXMucmVzcG9uc2UudXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZGVsZXRlZCxmPXRoaXMucmVzcG9uc2Uub3Jp'@;
put 'Z2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9uZXcsZD10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxmPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyksdGhpcy5vcmlnaW5hbHM9Zix0aGlzLnJv'@;
put 'd0tleXM9W107Zm9yKGxldCBTdD0wO1N0PGQubGVuZ3RoO1N0Kyspe2xldCBKdD1PYmplY3Qua2V5cyhkW1N0XSk7Zm9yKGxldCBubj0wO25uPEp0Lmxlbmd0aDtubisrKWRbU3RdW0p0W25uXV0hPT1mW1N0XVtKdFtubl1dJiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7aW5kOlN0LGZpZWxkOkp0'@;
put 'W25uXSxwcm9wOmRbU3RdW0p0W25uXV0sb3JpZ2luYWw6ZltTdF1bSnRbbm5dXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVNX0RFTEVURUR8fDB9O2xl'@;
put 'dCBpZT1bXSxwZT1kLmNvbmNhdChhLGgpO2ZvcihsZXQgU3Q9MDtTdDx0aGlzLnJlc3BvbnNlLmNvbHMubGVuZ3RoO1N0KyspaWUucHVzaCh0aGlzLnJlc3BvbnNlLmNvbHNbU3RdLk5BTUUpO2xldCB3ZT10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0'@;
put 'OnRoaXMubGVucy5uZXcsRWU9dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLnVwZGF0ZWQ7dGhpcy5kaWZmc0xpbWl0PXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy51cGRhdGVkPnRoaXMucmVj'@;
put 'b3Jkc0xpbWl0fHx0aGlzLmxlbnMuZGVsZXRlZD50aGlzLnJlY29yZHNMaW1pdCx0aGlzLmFkZENvdW50PXdlO2xldCBpdD1bXSxldD1bXTtmb3IobGV0IFN0PTA7U3Q8aWUubGVuZ3RoO1N0KyspZXQucHVzaCh7ZGF0YTppZVtTdF0scmVhZE9ubHk6ITB9KTt0aGlzLmRpZmZUYWJsZS5kYXRh'@;
put 'PXBlO2ZvcihsZXQgU3Q9MDtTdDxwZS5sZW5ndGg7U3QrKyl7bGV0IG5uPU9iamVjdC5rZXlzKHBlW1N0XSk7dGhpcy5yb3dLZXlzLnB1c2gobm4pfWxldCB5dD1bXSxFdD1bXTtmb3IobGV0IFN0PTA7U3Q8dGhpcy5kaWZmVGFibGUuZGF0YS5sZW5ndGg7U3QrKyl7aWYoU3Q8RWUmJjAhPT1F'@;
put 'ZSl7eXQucHVzaChbXSksRXQucHVzaChbXSksaXQucHVzaCgidXBkYXRlZCIpO2xldCBKdD1PYmplY3Qua2V5cyh0aGlzLmRpZmZUYWJsZS5kYXRhW1N0XSk7Zm9yKGxldCBubj0wO25uPEp0Lmxlbmd0aDtubisrKXtsZXQgdm49SnRbbm5dO2ZbU3RdW3ZuXSE9PWRbU3RdW3ZuXT8oeXRbU3Rd'@;
put 'LnB1c2goITApLEV0W1N0XS5wdXNoKGZbU3RdW3ZuXSkpOih5dFtTdF0ucHVzaCghMSksRXRbU3RdLnB1c2gobnVsbCkpfXRoaXMuYXJyQ2hhbmdlZD15dCx0aGlzLmFyck9mQ2hhbmdlcz1FdH1TdD49RWUmJlN0PEVlK3dlJiZpdC5wdXNoKCJhZGRlZCIpLFN0PndlK0VlLTEmJml0LnB1c2go'@;
put 'ImRlbGV0ZWQiKX10aGlzLmNoQXJyPWl0LHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPXBlfW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGEuX2RldGFpbHNTdWI9YS5zYXNTdG9yZVNlcnZpY2Uu'@;
put 'c3VibWl0dERldGFpbC5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgaD1maShmdW5jdGlvbiooZil7YS5zdWJPYmo9Zi52aWV3RGF0YSxhLnRhYmxlSWQ9Zi52aWV3RGF0YS50YWJsZUlkLGEuc3VibWl0dGVkPWYudmlld0RhdGEuc3ViLGEuc3VibWl0RGV0YWlscz1mLmRhdGEsYS5zdWJtaXRB'@;
put 'cnI9W107Zm9yKGxldCBUIGluIGEuc3VibWl0RGV0YWlscykic3ViIiE9PVQmJmEuc3VibWl0QXJyLnB1c2goVCk7bGV0IF89e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hv'@;
put 'd0RpZmZzKF8sIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihUPT57YS5wYXJhbXM9VC5wYXJhbXNbMF0sYS5yZXNwb25zZT1ULGEuY2FsY0RpZmYoKX0pLmNhdGNoKFQ9PlQpLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMH0pLGEuY2FsbENoYW5nZXNJ'@;
put 'bmZvKGEudGFibGVJZCl9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPiJ1IilyZXR1cm47YS50YWJsZUlkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlk'@;
put 'O2xldCBkPXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyhkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucGFyYW1z'@;
put 'PWgucGFyYW1zWzBdLGEucmVzcG9uc2U9aCxhLmNhbGNEaWZmKCl9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwLGEuc2V0Rm9jdXMoKX0pLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KSgpfW5nT25EZXN0cm95KCl7'@;
put 'dGhpcy5fZGV0YWlsc1N1YiYmdGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNjZXB0QnRuIik7YSYmYS5mb2N1cygpfSwyMDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KEdsKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZS1kZXRhaWxzIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0Mix2YXJz'@;
put 'OjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRv'@;
put 'biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVs'@;
put 'IiwibmdNb2RlbE9wdGlvbnMiLCJpbm5lckhUTUwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGlj'@;
put 'ayJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsZWZ0IiwibGluay1pdCIsMywicm91dGVyTGluayJdLFsiY2xy'@;
put 'VGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0s'@;
put 'WyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwi'@;
put 'Y2FyZCIsImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJjbGljayJdLFsi'@;
put 'c2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJdLFsxLCJ0b29s'@;
put 'dGlwIiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJd'@;
put 'LFsiY2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0sWzEsImQt'@;
put 'ZmxleCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01Il0sWzEsImNs'@;
put 'ci1jb2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0biIsImJ0bi1z'@;
put 'bSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1j'@;
put 'ZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxb'@;
put 'ImlkIiwiYWNjZXB0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuIiwiYnRuLWRhbmdlciIsIm1yLTAiLDMsImRp'@;
put 'c2FibGVkIiwiY2xpY2siXSxbMSwibS0wIiwibWwtMjBpIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFsxLCJmb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZSJdLFsxLCJjYXJkLWJsb2Nr'@;
put 'IiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJyb3dzLW5vdGljZSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiXSxb'@;
put 'MSwibGFiZWwiLCJsYWJlbC13YXJuaW5nIl0sWzEsImJhZGdlIiwiYmFkZ2Utd2FybmluZyJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwiYmFkZ2UiLCJiYWRnZS1zdWNjZXNzIl0sWzEsImxhYmVsIiwibGFiZWwtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0s'@;
put 'WzEsInRleHQtY2VudGVyIiwiZm9udC1zaXplLTE4Il0sWzEsIm10LTE1Il0sWzEsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbMSwibXQtMTAiXSxbMSwicm93cy1ub3RpY2UiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1vcmFuZ2UiXSxbMSwi'@;
put 'aC0yNHZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwiZC1mbGV4IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImxlZnQiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJd'@;
put 'LFsxLCJsZWZ0IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvb2x0aXAtY29udGVudCIsNCwibmdJZiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0s'@;
put 'WyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVu'@;
put 'dC1jZW50ZXIiXSxbImNsYXNzIiwiY2FyZCBtLTAiLDQsIm5nSWYiXSxbMSwiY2FyZCIsIm0tMCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiY2xyLWNvbC1tZC00Il0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAi'@;
put 'LCJ0ZXh0LWNlbnRlciJdLFsxLCJtLTAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm0tMCIsIm1sLTIwLWkiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsIm92ZXJmbG93LWF1dG8iLCJtci0xMiJdLFsiY2xhc3MiLCJoLTI1dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1'@;
put 'c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCJdLFsxLCJoLTI1dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayJd'@;
put 'LFsxLCJsb2FkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRldGFpbHNPcGVuPWZ9KSxtZSgxLCJoMyIsMSksTmUoMiwiQXBwcm92YWwgRGV0YWlscyIpLHll'@;
put 'KCksbWUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxOZSg4LCJOYW1lIikseWUoKSxtZSg5LCJ0aCIsNCksTmUoMTAsIlZhbHVlIikseWUoKSgpKCksbWUoMTEsInRib2R5IiksSmUoMTIsY1dlLDUsMywidHIiLDUpLHllKCkoKSgpLG1lKDEz'@;
put 'LCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kZXRhaWxzT3Blbj0hMX0pLE5lKDE1LCIgT2sgIikseWUoKSgpKCksbWUoMTYsImNsci1tb2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudGFi'@;
put 'bGVGbGFnPWZ9KSxtZSgxNywiaDMiLDEpLE5lKDE4LCJBbGwgRGV0YWlscyIpLHllKCksbWUoMTksImRpdiIsMiksSmUoMjAsZldlLDE5LDIsImNsci10YWJzIiw4KSx5ZSgpLG1lKDIxLCJkaXYiLDYpKDIyLCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJs'@;
put 'ZUZsYWc9ITF9KSxOZSgyMywiIE9rICIpLHllKCkoKSgpLG1lKDI0LCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlamVjdE9wZW49Zn0pLG1lKDI1LCJoMyIsMSksTmUoMjYsIlJlYXNvbiBNZXNzYWdlIikseWUoKSxtZSgyNywi'@;
put 'ZGl2IiwyKSgyOCwiZm9ybSIpKDI5LCJzZWN0aW9uIiw5KSgzMCwiZGl2IiwxMCkoMzEsImxhYmVsIiwxMSksTmUoMzIsIlJlYXNvbiBmb3IgcmVqZWN0aW5nPyIpLHllKCksbWUoMzMsInRleHRhcmVhIiwxMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnN1Ym1p'@;
put 'dFJlYXNvbj1mfSkseWUoKSgpKCkoKSgpLG1lKDM0LCJkaXYiLDYpKDM1LCJidXR0b24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVqZWN0T3Blbj0hMX0pLE5lKDM2LCIgQ2FuY2VsICIpLHllKCksbWUoMzcsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gZC5yZWplY3RpbmcoKX0pLE5lKDM4LCIgT0sgIikseWUoKSgpKCksbWUoMzksImRpdiIsMTUpLEplKDQwLFJXZSw0LDIsImRpdiIsMTYpLEplKDQxLHFXZSwzLDIsImRpdiIsOCkseWUoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5kZXRhaWxzT3BlbiksQ2UoMTIpLFJl'@;
put 'KCJuZ0Zvck9mIixkLmtleXNBcnJheSksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC50YWJsZUZsYWcpLENlKDQpLFJlKCJuZ0lmIixkLnRhYmxlRmxhZyksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC5yZWplY3RPcGVuKSxDZSg5KSxSZSgibmdNb2RlbCIsZC5zdWJtaXRSZWFzb24pKCJu'@;
put 'Z01vZGVsT3B0aW9ucyIsJHMoMTEsS1dlKSkoImlubmVySFRNTCIsZC5zdWJtaXRSZWFzb24scTIpLENlKDQpLFJlKCJjbHJMb2FkaW5nIixkLnJlamVjdExvYWRpbmcpLENlKDMpLFJlKCJuZ0lmIiwhZC5zdWJtaXR0ZWQpLENlKDEpLFJlKCJuZ0lmIixkLnN1Ym1pdHRlZCkpfSxkZXBlbmRl'@;
put 'bmNpZXM6W2RjLHhzLFppLENwLFdhLFMwLEJzLHdwLE9zLHIyLEJ1LGthLG91LHN1LFp1LEU4LGRoLFVzLEQwLEQ4LFQwLExwLE9wLGRnLFJwLElwLGNnXSxzdHlsZXM6WycubG9hZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWln'@;
put 'aHQ6NzV2aDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tb2RhbExhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9LmFkZGVkUm93W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYigxNDYsMjA4LDE1NCk7Ym9yZGVy'@;
put 'OjFweCBzb2xpZCByZ2JhKDksNzcsMTE3LC4yKTtib3JkZXItcmFkaXVzOjVweH0uZGVsZXRlZFJvd1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2IoMjMwLDE3OSwxNzkpO2JvcmRlcjoxcHggc29saWQgcmdiYSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9LnVwZGF0'@;
put 'ZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2ZhZmRhODtib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSwxMTcsOSwuMik7Ym9yZGVyLXJhZGl1czo1cHh9LmNoW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpO2JvcmRlcjoxcHggc29saWQgcmdi'@;
put 'YSgxMDQsMTAwLDAsLjQpO2JvcmRlci1yYWRpdXM6NXB4fS5jaFtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1MiwxMzUsMTIwLC40KX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSwgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2ZvbnQtc2l6ZTouNTQxNjdyZW07Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kOiMzMTQzNTE7Ym9yZGVyLXJhZGl1czouMTI1cmVtO2NvbG9yOiNmMGYxZWM7bGluZS1oZWlnaHQ6Ljc1cmVtO21hcmdpbjowO3BhZGRpbmc6LjM3NXJlbSAuNXJlbTt3'@;
put 'aWR0aDoyMzVweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIGF1dG8gMTAwJSAxMnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOi42NjY2N3JlbX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9w'@;
put 'LXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAt'@;
put 'Y29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlk'@;
put 'ICMzMTQzNTE7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCB0cmFuc3BhcmVudH0udGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowcHggc29saWR9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47'@;
put 'dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0udGFibGVDb250W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO21hcmdpbjoxNXB4IDEwcHggMTBweH0udGFibGVDb250W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFwcHJvdmFsSW5mb1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uYXBwcm92YWxCYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgt'@;
put 'c3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5hcHByb3ZhbEluZm9bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTVweH0uYXBwcm92YWxCYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNw'@;
put 'bGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjE1cHh9LmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MHJlbSFpbXBvcnRhbnQ7bWluLWhlaWdodDpjYWxjKDEwMHZoICsgLTBweCkhaW1wb3J0YW50fS50YWJsZVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICB0ZC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoLmxlZnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdDt3aWR0aDoxNTBweCFpbXBvcnRhbnQ7ZmxleDowfX0udGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGQu'@;
put 'bGVmdFtfbmdjb250ZW50LSVDT01QJV0sIC50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxO3dpZHRoOjMwMHB4IWltcG9ydGFudH0udG9vbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29s'@;
put 'dXRlO2JhY2tncm91bmQ6I2U2YjNiMztjb2xvcjojMzE0MzUxO3RvcDowO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7bGVmdDowO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0jYWNjZXB0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXSwgI3JlamVj'@;
put 'dEJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTc1cHh9LmZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6NzVweH1jbHItbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtYm9keS13cmFwcGVye292ZXJmbG93OmF1dG99LnJv'@;
put 'd3Mtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDoxMHB4O2NvbG9yOiM2YTZhNmE7Zm9udC1zaXplOjE1cHh9LnJvd3Mtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXttYXJnaW46MH0nXX0pLGN9KSgpO2Z1bmN0aW9uIFhXZShjLGwpezEmYyYmKG1lKDAsImRpdiIsOSkoMSwiZGl2IiwxMCkscXQoMiwiY2xyLWljb24iLDExKSxtZSgzLCJoMyIsMTIpLE5lKDQsIlRoZXJlIGFyZSBubyBhcHByb3ZhbHMgcmVtYWluaW5nIikseWUoKSgpKCkpfWZ1bmN0'@;
put 'aW9uIEpXZShjLGwpezEmYyYmKG1lKDAsImgzIiwxMyksTmUoMSwiIFJFVklFVyAiKSx5ZSgpKX1mdW5jdGlvbiBRV2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwxNCksTmUoMSwiIFlvdSBoYXZlICIpLG1lKDIsInNwYW4iKSxOZSgzKSx5ZSgpLE5lKDQsImFwcHJvdmFscyByZW1haW5pbmcg'@;
put 'IikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksZ3IoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBlR2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxNyksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gdEdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMi'@;
put 'KSxOZSgyLCJMb2FkaW5nIGFwcHJvdmFscyBsaXN0IikseWUoKSgpKX1mdW5jdGlvbiBuR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE1KSxKZSgxLGVHZSwyLDAsInNwYW4iLDE2KSxKZSgyLHRHZSwzLDAsImRpdiIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5n'@;
put 'SWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIHJHZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDM4KX1mdW5jdGlvbiBpR2UoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiwzOSksMiZjJiZSZSgiY2xyU21hbGwiLCEwKX1mdW5jdGlvbiBv'@;
put 'R2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCkseWUoKSxtZSg1LCJjbHItZGctY2VsbCIpLE5lKDYpLHllKCksbWUoNywiY2xyLWRnLWNlbGwiKSxOZSg4KSx5'@;
put 'ZSgpLG1lKDksImNsci1kZy1jZWxsIikoMTAsImRpdiIsMjYpKDExLCJhIiwyNykseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLmdldENsaWNrZWQoZikpfSkscXQoMTIsImNsci1pY29uIiwyOCksbWUoMTMsInNwYW4iLDI5KSxOZSgx'@;
put 'NCwiR28gdG8gcmV2aWV3IHBhZ2Ugc2NyZWVuIikseWUoKSgpLG1lKDE1LCJhIiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9QnQoYSksZj1oLiRpbXBsaWNpdCxfPWguaW5kZXgsVD1WZSgyKTtyZXR1cm4ganQoZi5yZWplY3RMb2FkaW5nPyIiOlQucmVqZWN0aW5nKF8pKX0p'@;
put 'LEplKDE2LHJHZSwxLDAsImNsci1pY29uIiwzMSksSmUoMTcsaUdlLDEsMSwiY2xyLXNwaW5uZXIiLDMyKSxtZSgxOCwic3BhbiIsMjkpLE5lKDE5LCJSZWplY3QiKSx5ZSgpKCksbWUoMjAsImEiLDMzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0'@;
put 'dXJuIGp0KFZlKDIpLmdldFRhYmxlKGYudGFibGVJZCkpfSkscXQoMjEsImNsci1pY29uIiwzNCksbWUoMjIsInNwYW4iLDI5KSxOZSgyMywiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIikseWUoKSgpKCkoKSxtZSgyNCwiY2xyLWRnLWNlbGwiLDM1KSgyNSwiYnV0dG9uIiwzNikseHQoImNs'@;
put 'aWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4gVmUoMikuZG93bmxvYWQoXy50YWJsZUlkKSxqdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLHF0KDI2LCJjbHItaWNvbiIsMzcpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxv'@;
put 'cihhLnN1Ym1pdHRlciksQ2UoMiksb3IoYS5iYXNlVGFibGUpLENlKDIpLG9yKGEuc3VibWl0dGVkKSxDZSgyKSxvcihhLnN1Ym1pdFJlYXNvbiksQ2UoOCksUmUoIm5nSWYiLCFhLnJlamVjdExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixhLnJlamVjdExvYWRpbmcpLENlKDgpLFJlKCJpZCIs'@;
put 'YS50YWJsZUlkKX19ZnVuY3Rpb24gc0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwxOCkoMiwiY2xyLWRnLWNvbHVtbiIsMTkpLE5lKDMsIlNVQk1JVFRFUiIpLHllKCksbWUoNCwiY2xyLWRnLWNvbHVtbiIsMTkpLE5lKDUsIkJBU0Ug'@;
put 'VEFCTEUiKSx5ZSgpLG1lKDYsImNsci1kZy1jb2x1bW4iLDE5KSxOZSg3LCJTVUJNSVRURUQiKSx5ZSgpLG1lKDgsImNsci1kZy1jb2x1bW4iLDE5KSxOZSg5LCJTVUJNSVQgUkVBU09OIikseWUoKSxtZSgxMCwiY2xyLWRnLWNvbHVtbiIpLE5lKDExLCJBQ1RJT04iKSx5ZSgpLG1lKDEyLCJj'@;
put 'bHItZGctY29sdW1uIiksTmUoMTMsIkRPV05MT0FEIikseWUoKSxKZSgxNCxvR2UsMjcsNywiY2xyLWRnLXJvdyIsMjApLG1lKDE1LCJjbHItZGctZm9vdGVyIiwyMSkoMTYsInNwYW4iKSxOZSgxNywiaXRlbXMgcGVyIHBhZ2UiKSx5ZSgpLG1lKDE4LCJzZWxlY3QiLDIyKSx4dCgibmdNb2Rl'@;
put 'bENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaXRlbXNOdW09aCl9KSxtZSgxOSwib3B0aW9uIiwyMyksTmUoMjAsIjMiKSx5ZSgpLG1lKDIxLCJvcHRpb24iLDIzKSxOZSgyMiwiNSIpLHllKCksbWUoMjMsIm9wdGlvbiIsMjMpLE5lKDI0LCIxMCIpLHllKCksbWUo'@;
put 'MjUsIm9wdGlvbiIsMjMpLE5lKDI2LCIxNSIpLHllKCkoKSxtZSgyNywiY2xyLWRnLXBhZ2luYXRpb24iLDI0LDI1KSxOZSgyOSkseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMjgpLGQ9VmUoKTtDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLENlKDIpLFJlKCJjbHJE'@;
put 'Z0ZpZWxkIiwiYmFzZVRhYmxlIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLENlKDYpLFJlKCJjbHJEZ0l0ZW1zT2YiLGQuYXBwcm92ZUxpc3QpLENlKDQpLFJlKCJuZ01vZGVsIixkLml0ZW1zTnVtKSxD'@;
put 'ZSgxKSxSZSgibmdWYWx1ZSIsMyksQ2UoMiksUmUoIm5nVmFsdWUiLDUpLENlKDIpLFJlKCJuZ1ZhbHVlIiwxMCksQ2UoMiksUmUoIm5nVmFsdWUiLDE1KSxDZSgyKSxSZSgiY2xyRGdQYWdlU2l6ZSIsZC5pdGVtc051bSksQ2UoMiksYjAoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0'@;
put 'SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBhcHByb3ZhbHMgIil9fWNvbnN0IGFHZT1mdW5jdGlvbihjKXtyZXR1cm57bm9Cb3JkZXI6Y319O2xldCBsR2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNl'@;
put 'cnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9Xyx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0Q2xpY2tlZChhKXt2b2lkIDAhPT10aGlzLmFwcHJv'@;
put 'dmVMaXN0JiYodGhpcy50YWJsZUlkPXRoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCx0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoInJldmlldy9hcHByb3ZlRGV0LyIrdGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkKSl9cmVqZWN0aW5nKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0'@;
put 'aW9uKigpe3ZvaWQgMCE9PWQuYXBwcm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgaD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhkLmFwcHJvdmVMaXN0'@;
put 'fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChkLmFwcHJvdmVMaXN0fHxbXSlb'@;
put 'YV0ucmVqZWN0TG9hZGluZz0hMSxkLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFpbmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1jYXRjaChmKXtkLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24iLGYpfX0pKCl9bmdPbkluaXQo'@;
put 'KXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5pdGVtc051bT0xMDtsZXQgZD17U1RQX0FDVElPTjoiT1BFTl9BUFBST1ZBTFMifTt0cnl7bGV0'@;
put 'IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0QXBwcm92YWxzKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIik7YS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3RoO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24oXyl7cmV0dXJue3RhYmxlSWQ6Xy5UQUJM'@;
put 'RV9JRCxzdWJtaXR0ZXI6Xy5TVUJNSVRURURfQllfTk0sc3VibWl0dGVkOl8uU1VCTUlUVEVEX09OX0RUVE0sYmFzZVRhYmxlOl8uQkFTRV9UQUJMRSxzdWJtaXRSZWFzb246Xy5TVUJNSVRURURfUkVBU09OX1RYVH19KTthLmFwcHJvdmVMaXN0PWYsYS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5l'@;
put 'dmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIixoKX19KSgpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVj'@;
put 'dXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KERzKSx0dChvYSks'@;
put 'dHQoVWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjksdmFyczo4LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBq'@;
put 'dXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJr'@;
put 'LWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciIsNCwibmdJZiJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siLCJu'@;
put 'b2FwcHJvdmFscy1pbmZvLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVy'@;
put 'Il0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0'@;
put 'b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtc3RhcnQiXSxbMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdWYWx1ZSJdLFsxLCJjZW50ZXIiLDMsImNsckRnUGFn'@;
put 'ZVNpemUiXSxbInBhZ2luYXRpb24iLCIiXSxbInJvbGUiLCJ0b29sdGlwIiwxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVu'@;
put 'IiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyNCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hh'@;
put 'cGUiLCJiYW4iLCJzaXplIiwiMjIiLDQsIm5nSWYiXSxbMywiY2xyU21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29k'@;
put 'ZSIsInNpemUiLCIyOCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJpZCIsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiJdLFszLCJjbHJTbWFsbCJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxKZSgyLFhXZSw1LDAsImRpdiIsMiksbWUoMywiZGl2IiwzKSxKZSg0LEpXZSwyLDAsImgzIiw0KSxKZSg1LFFXZSw1LDEsInAiLDUpLHllKCksSmUoNixuR2UsMywyLCJkaXYiLDYpLG1lKDcsImRp'@;
put 'diIsNyksSmUoOCxzR2UsMzAsMTQsImRpdiIsOCkseWUoKSgpKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwwPT09ZC5yZW1haW5lZCksQ2UoMSksUmUoIm5nQ2xhc3MiLEoyKDYsYUdlLCFkLmxvYWRlZCkpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRlZCYmMCE9PWQucmVtYWluZWQpLENlKDEp'@;
put 'LFJlKCJuZ0lmIixkLmxvYWRlZCYmMCE9PWQucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIiwhZC5sb2FkZWQpLENlKDIpLFJlKCJuZ0lmIixkLmFwcHJvdmVMaXN0JiYwIT09ZC5yZW1haW5lZCkpfSxkZXBlbmRlbmNpZXM6W2RjLFppLGwxLGMxLE0wLEJzLE9zLFc4LFRwLHRnLFBFLFU4LEZF'@;
put 'LG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LGthLHUyXSxzdHlsZXM6WyIuY29sdW1uLWNlbnRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWRbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLmRhdGFncmlkLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWdyaWQtY29sdW1uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5saW5rc1tfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwO2N1'@;
put 'cnNvcjpwb2ludGVyfS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVm'@;
put 'dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9Lm5vQm9yZGVyW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmFwcHJvdmFscy1saXN0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo3MHZoO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVt'@;
put 'bjthbGlnbi1pdGVtczpjZW50ZXJ9Lm5vYXBwcm92YWxzLWluZm8td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIw'@;
put 'MHB4KX0iXX0pLGN9KSgpO2Z1bmN0aW9uIGNHZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLHF0KDIsImNsci1pY29uIiwxNCksbWUoMywiaDMiLDE1KSxOZSg0LCIgWW91IGhhdmUgbm90IHN1Ym1pdHRlZCBhbnkgdGFibGVzICIpLHllKCkoKSgpKX1mdW5jdGlvbiB1'@;
put 'R2UoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTYpLE5lKDEsIiBTVUJNSVQgUVVFVUUgIikseWUoKSl9ZnVuY3Rpb24gZEdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMTcpLE5lKDEsIiBZb3UgaGF2ZSAiKSxtZSgyLCJzcGFuIiksTmUoMykseWUoKSxOZSg0LCJzdWJtaXNzaW9ucyB3YWl0aW5n'@;
put 'IHRvIGJlIGFwcHJvdmVkICIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgzKSxncigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIGhHZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDIwKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBmR2UoYyxsKXsxJmMmJiht'@;
put 'ZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgc3VibWl0dGVkIGxpc3QiKSx5ZSgpKCkpfWZ1bmN0aW9uIHBHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTgpLEplKDEsaEdlLDIsMCwic3BhbiIsMTkpLEplKDIsZkdlLDMsMCwiZGl2IiwyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'VmUoMyk7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIGdHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kZy1yb3ciLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGlj'@;
put 'aXQ7cmV0dXJuIGp0KFZlKDUpLmdvVG9EZXRhaWxzKGYudGFibGVJZCkpfSksbWUoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCkseWUoKSxtZSg1LCJjbHItZGctY2VsbCIpLE5lKDYpLHllKCksbWUoNywiY2xyLWRnLWNlbGwiKSg4LCJkaXYi'@;
put 'LDMxKSg5LCJhIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSg1KS5nb1RvU3RhZ2UoZi50YWJsZUlkKSl9KSxxdCgxMCwiY2xyLWljb24iLDMzKSxtZSgxMSwic3BhbiIsMzQpLE5lKDEyLCJHbyB0byBzdGFnZWQgZGF0YSBz'@;
put 'Y3JlZW4iKSx5ZSgpKCkoKSgpLG1lKDEzLCJjbHItZGctY2VsbCIsMzUpKDE0LCJidXR0b24iLDM2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0O3JldHVybiBWZSg1KS5kb3dubG9hZChfLnRhYmxlSWQpLGp0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSks'@;
put 'cXQoMTUsImNsci1pY29uIiwzNykseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuYmFzZSksQ2UoMiksb3IoYS5zdWJtaXR0ZWQpLENlKDIpLG9yKGEuc3VibWl0UmVhc29uKX19ZnVuY3Rpb24gbUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo'@;
put 'MCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwyMikoMiwiY2xyLWRnLWNvbHVtbiIpLE5lKDMsIkJBU0UgVEFCTEUiKSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iLDIzKSxOZSg1LCJTVUJNSVRURUQiKSx5ZSgpLG1lKDYsImNsci1kZy1jb2x1bW4iLDIzKSxOZSg3LCJTVUJNSVQgUkVBU09O'@;
put 'IikseWUoKSxtZSg4LCJjbHItZGctY29sdW1uIiwxMiksTmUoOSwiQUNUSU9OIikseWUoKSxtZSgxMCwiY2xyLWRnLWNvbHVtbiIsMTIpLE5lKDExLCJET1dOTE9BRCIpLHllKCksSmUoMTIsZ0dlLDE2LDMsImNsci1kZy1yb3ciLDI0KSxtZSgxMywiY2xyLWRnLWZvb3RlciIsMjUpKDE0LCJz'@;
put 'cGFuIiksTmUoMTUsIml0ZW1zIHBlciBwYWdlIikseWUoKSxtZSgxNiwic2VsZWN0IiwyNikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg0KS5pdGVtc051bT1oKX0pLG1lKDE3LCJvcHRpb24iLDI3KSxOZSgxOCwiMyIpLHllKCksbWUoMTksIm9w'@;
put 'dGlvbiIsMjcpLE5lKDIwLCI1IikseWUoKSxtZSgyMSwib3B0aW9uIiwyNyksTmUoMjIsIjEwIikseWUoKSxtZSgyMywib3B0aW9uIiwyNyksTmUoMjQsIjE1IikseWUoKSgpLG1lKDI1LCJjbHItZGctcGFnaW5hdGlvbiIsMjgsMjkpLE5lKDI3KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3Qg'@;
put 'YT0kaSgyNiksZD1WZSg0KTtDZSg0KSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksQ2UoNiksUmUoImNsckRnSXRlbXNPZiIsZC5zdWJtaXR0ZXJMaXN0KSxDZSg0KSxSZSgibmdNb2RlbCIsZC5pdGVtc051bSksQ2Uo'@;
put 'MSksUmUoIm5nVmFsdWUiLDMpLENlKDIpLFJlKCJuZ1ZhbHVlIiw1KSxDZSgyKSxSZSgibmdWYWx1ZSIsMTApLENlKDIpLFJlKCJuZ1ZhbHVlIiwxNSksQ2UoMiksUmUoImNsckRnUGFnZVNpemUiLGQuaXRlbXNOdW0pLENlKDIpLGIwKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0'@;
put 'ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgc3VibWlzc2lvbnMgIil9fWZ1bmN0aW9uIHZHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjEpLEplKDEsbUdlLDI4LDEyLCJkaXYiLDIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5zdWJtaXR0ZXJMaXN0'@;
put 'JiYwIT09YS5yZW1haW5lZCl9fWNvbnN0IF9HZT1mdW5jdGlvbihjKXtyZXR1cm57bm9Cb3JkZXI6Y319O2Z1bmN0aW9uIGJHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNSksSmUoMSxjR2UsNSwwLCJkaXYiLDYpLG1lKDIsImRpdiIsNyksSmUoMyx1R2UsMiwwLCJoMyIsOCksSmUoNCxk'@;
put 'R2UsNSwxLCJwIiw5KSx5ZSgpLEplKDUscEdlLDMsMiwiZGl2IiwxMCksSmUoNix2R2UsMiwxLCJkaXYiLDExKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLDA9PT1hLnJlbWFpbmVkJiZhLmxvYWRlZCksQ2UoMSksUmUoIm5nQ2xhc3MiLEoyKDYsX0dlLCFhLmxv'@;
put 'YWRlZCkpLENlKDEpLFJlKCJuZ0lmIiwwIT09YS5yZW1haW5lZCksQ2UoMSksUmUoIm5nSWYiLGEubG9hZGVkJiYwIT09YS5yZW1haW5lZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24geUdlKGMsbCl7aWYoMSZjJiYobWUo'@;
put 'MCwiZGl2IiwzKSxKZSgxLGJHZSw3LDgsImRpdiIsNCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLCFhLnN1YlJlYWR5KX19ZnVuY3Rpb24gd0dlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikscXQoMSwiYXBwLWFwcHJvdmUtZGV0YWlscyIpLHllKCkpfWxldCBRc2U9'@;
put 'KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLnNhc1NlcnZpY2U9Xyx0aGlzLnJlbWFpbmVkPTAsdGhpcy5sb2FkZWQ9ITEsdGhpcy5zdWJS'@;
put 'ZWFkeT0hMSx0aGlzLmRldGFpbHNPcGVuPSExfWdvVG9TdGFnZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb1RvRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZC8iK2EpfWdldERldGFpbHMoYSxkKXt0aGlz'@;
put 'LnN1YlJlYWR5PSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGQsdGhpcy5zdWJtaXREYXRhKX0sMCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBkPWEucm91dGUuc25hcHNob3QucGFyYW1zLnRh'@;
put 'YmxlSWQ7YS5pdGVtc051bT0xMDt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0U3VibWl0dHMoKTtpZihhLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGgsYS5yZW1haW5lZD4wKXthLnN1Ym1pdHRlcj1oLmZyb21zYXNbMF0uU1VCTUlUVEVEX0JZX05NO2xldCBmPWguZnJv'@;
put 'bXNhcy5tYXAoZnVuY3Rpb24oXyl7cmV0dXJue3RhYmxlSWQ6Xy5UQUJMRV9JRCxiYXNlOl8uQkFTRV9UQUJMRSxzdWJtaXR0ZWQ6Xy5TVUJNSVRURURfT05fRFRUTSxzdWJtaXR0ZXI6Xy5TVUJNSVRURURfQllfTk0sc3VibWl0UmVhc29uOl8uU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7aWYo'@;
put 'YS5zdWJtaXR0ZXJMaXN0PWYsYS5zdWJtaXREYXRhPWguZnJvbXNhcyx0eXBlb2YgZDwidSIpe2NvbnN0IF89YS5zdWJtaXR0ZXJMaXN0LmZpbmRJbmRleChUPT5ULnRhYmxlSWQ9PT1kKTtfPi0xJiZhLmdldERldGFpbHMoYS5zdWJtaXR0ZXJMaXN0W19dLF8pfX1hLmxvYWRlZD0hMH1jYXRj'@;
put 'aChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImVkaXRvcnMvZ2V0c3VibWl0cyIsaCl9fSkoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9yZWFkeVN1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXQuc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PWF9KSx0'@;
put 'aGlzLl9iYWNrVG9TdWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0TGlzdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9IXRoaXMuc3ViUmVhZHksdGhpcy5kZXRhaWxzT3Blbj0hMX0pfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygp'@;
put 'LGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KERzKSx0dChHbCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN1Ym1pdHRlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjIsY29u'@;
put 'c3RzOltbMSwidy0xMDAiXSxbImNsYXNzIiwiY29udGVudC1hcmVhIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJ'@;
put 'ZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgt'@;
put 'NzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm5vLXN1Ym1pdHRl'@;
put 'ZC10YWJsZXMiLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJj'@;
put 'b2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1'@;
put 'bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiY2xhc3MiLCJj'@;
put 'dXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LXN0YXJ0Il0sWzMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiXSxbMSwiY2VudGVyIiwzLCJjbHJEZ1BhZ2VTaXpl'@;
put 'Il0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsicm9sZSIsInRvb2x0aXAiLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJv'@;
put 'dHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxb'@;
put 'InNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLEplKDEseUdlLDIsMSwiZGl2IiwxKSxKZSgyLHdHZSwyLDAsImRpdiIsMikseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLCFkLnN1YlJlYWR5KSxDZSgxKSxSZSgibmdJZiIs'@;
put 'ZC5zdWJSZWFkeSkpfSxkZXBlbmRlbmNpZXM6W2RjLFppLGwxLGMxLE0wLEJzLE9zLFc4LFRwLHRnLFBFLFU4LEZFLG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LGthLEpzZV0sc3R5bGVzOlsiLm5vQm9yZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFu'@;
put 'c3BhcmVudCFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRv'@;
put 'bS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMxNDM1MX0ubm8tc3VibWl0dGVkLXRh'@;
put 'Ymxlc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxjfSkoKTtmdW5jdGlvbiBDR2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDEyKSxxdCgxLCJjbHItaWNvbiIsMTMpLG1lKDIsImgzIiwxNCksTmUoMywiVGhlcmUgaXMgbm8gaGlzdG9yeSB0byBz'@;
put 'aG93IikseWUoKSgpKX1mdW5jdGlvbiBTR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj1WZSgpO3JldHVybiBqdChmLmdldFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0p'@;
put 'LE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtDZSgxKSxvcihkLmFwcHJvdmVEYXRhW2FdKX19ZnVuY3Rpb24gTUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiYSIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChh'@;
put 'KTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4ganQoZi5nZXRCYXNlVGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTmUoMiwiVklFVyIpLHllKCksbWUoMywic3BhbiIpLE5lKDQsIiAvICIpLHllKCksbWUoNSwiYSIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChh'@;
put 'KTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4ganQoZi5nZXRFZGl0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTmUoNiwiRURJVCIpLHllKCkoKX19ZnVuY3Rpb24geEdlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1W'@;
put 'ZSgpLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMSksb3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIEVHZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDYpLE5lKDIpLHllKCksbWUoMywidGQiLDYpLEplKDQsU0dlLDIsMSwiYSIsMTUpLEplKDUsTUdlLDcsMCwiZGl2IiwxNiks'@;
put 'SmUoNix4R2UsMiwxLCJzcGFuIiwxNikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O0NlKDIpLG9yKGEpLENlKDIpLFJlKCJuZ0lmIixkPDEpLENlKDEpLFJlKCJuZ0lmIixkPDImJmQ+PTEpLENlKDEpLFJlKCJuZ0lmIixkPj0yKX19ZnVuY3Rpb24ga0dlKGMs'@;
put 'bCl7MSZjJiYobWUoMCwic3BhbiIsMjApLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIEFHZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyBoaXN0b3J5IikseWUoKSgpKX1mdW5jdGlvbiBUR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYi'@;
put 'LDE4KSxKZSgxLGtHZSwyLDAsInNwYW4iLDE5KSxKZSgyLEFHZSwzLDAsImRpdiIsMTYpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBER2UoYyxsKXsxJmMmJihtZSgwLCJoMyIs'@;
put 'MjgpLE5lKDEsIkhJU1RPUlkiKSx5ZSgpKX1mdW5jdGlvbiBJR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwyOSksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19h'@;
put 'bGxvd2VkLCIgcmVjb3JkcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX1jb25zdCBMR2U9ZnVuY3Rpb24oYyxsKXtyZXR1cm57cmVqZWN0ZWQ6YyxhY2NlcHRlZDpsfX07ZnVuY3Rpb24gUkdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRnLXJv'@;
put 'dyIsMzMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMykuZ2V0QXBwckluZGV4KGYpKX0pLG1lKDEsImNsci1kZy1jZWxsIiwzNCkoMiwiYSIsMzUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNp'@;
put 'dDtyZXR1cm4ganQoVmUoMykuZ2V0QmFzZVRhYmxlKGYuYmFzZXRhYmxlKSl9KSxOZSgzKSx5ZSgpKCksbWUoNCwiY2xyLWRnLWNlbGwiLDM2KSxOZSg1KSx5ZSgpLG1lKDYsImNsci1kZy1jZWxsIiwzNCksTmUoNykseWUoKSxtZSg4LCJjbHItZGctY2VsbCIsMzQpLE5lKDkpLHllKCksbWUo'@;
put 'MTAsImNsci1kZy1jZWxsIiwzNCksTmUoMTEpLHllKCksbWUoMTIsImNsci1kZy1jZWxsIiwzNCksTmUoMTMpLHllKCksbWUoMTQsImNsci1kZy1jZWxsIiwzNykoMTUsImJ1dHRvbiIsMzgpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIFZl'@;
put 'KDMpLmRvd25sb2FkKF8udGFibGVJZCksanQoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxxdCgxNiwiY2xyLWljb24iLDM5KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMyksb3IoYS5iYXNldGFibGUpLENlKDEpLFJlKCJuZ0NsYXNzIixRMig3LExHZSwiUkVKRUNU'@;
put 'RUQiPT09YS5zdGF0dXMsIkFQUFJPVkVEIj09PWEuc3RhdHVzKSksQ2UoMSksb3IoYS5zdGF0dXMpLENlKDIpLG9yKGEuc3VibWl0dGVyKSxDZSgyKSxvcihhLnN1Ym1pdHRlZFJlYXNvbiksQ2UoMiksb3IoYS5zdWJtaXR0ZWQpLENlKDIpLG9yKGEucmV2aWV3ZWQpfX1mdW5jdGlvbiBPR2Uo'@;
put 'YyxsKXtpZigxJmMmJihtZSgwLCJjbHItZGF0YWdyaWQiLDMwKSgxLCJjbHItZGctY29sdW1uIiwzMSksTmUoMiwiQkFTRV9UQUJMRSIpLHllKCksbWUoMywiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDQsIlNUQVRVUyIpLHllKCksbWUoNSwiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDYsIlNVQk1J'@;
put 'VFRFUiIpLHllKCksbWUoNywiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDgsIlNVQk1JVCBSRUFTT04iKSx5ZSgpLG1lKDksImNsci1kZy1jb2x1bW4iLDMxKSxOZSgxMCwiU1VCTUlUVEVEIikseWUoKSxtZSgxMSwiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDEyLCJBUFBST1ZFRCAvIFJFSkVDVEVE'@;
put 'IikseWUoKSxtZSgxMywiY2xyLWRnLWNvbHVtbiIpLE5lKDE0LCJET1dOTE9BRCIpLHllKCksSmUoMTUsUkdlLDE3LDEwLCJjbHItZGctcm93IiwzMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksQ2UoMiksUmUoImNsckRnRmll'@;
put 'bGQiLCJzdGF0dXMiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksQ2UoNCks'@;
put 'UmUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gUEdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5sb2FkRGF0YSgpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtj'@;
put 'b25zdCBhPVZlKDIpO1JlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxDZSgxKSxncigiIExvYWQgIixhLnJvd3NMZWZ0VG9Mb2FkLCIgbW9yZSAiKX19ZnVuY3Rpb24gRkdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMiksSmUoMixER2UsMiwwLCJoMyIsMjMp'@;
put 'LEplKDMsSUdlLDIsMSwicCIsMjQpLHllKCksSmUoNCxPR2UsMTYsNywiY2xyLWRhdGFncmlkIiwyNSksbWUoNSwiZGl2IiwyNiksSmUoNixQR2UsMiwyLCJidXR0b24iLDI3KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMSksUmUoIm5n'@;
put 'SWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NM'@;
put 'ZWZ0VG9Mb2FkPjApfX1jb25zdCBIR2U9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6bEdlfSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29tcG9uZW50OkpzZX0se3BhdGg6InN1Ym1pdHRlZCIsY29tcG9uZW50OlFzZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9u'@;
put 'ZW50OlFzZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2Vydmlj'@;
put 'ZT1fLHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMub3Blbk1vZGFsPSExLHRoaXMubm9EYXRhPSExLHRoaXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcg'@;
put 'cjEuU0FTanNDb25maWcsdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9'@;
put 'dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0QmFzZVRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5y'@;
put 'b3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgoaD0+aC5UQUJMRV9JRD09PWEudGFibGVJZCk7ZD4tMSYmKHRoaXMuYXBwcm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1v'@;
put 'ZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlzLmhpc3RQYXJhbXMuSElTVDtyZXR1cm4gYTw9MD8wOmE+ZD9kOmF9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pz'@;
put 'Q29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLF89dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK18rIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3Ro'@;
put 'aXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGQ9e1NUQVJUUk9XOmEuaGlzdFBhcmFtcy5ISVNUK2EuaGlzdFBhcmFtcy5TVEFSVFJPV307YS5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGYsaD15aWVsZCBh'@;
put 'LnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO2EubG9hZGluZ01vcmU9ITEsYS5oaXN0UGFyYW1zPWguaGlzdHBhcmFtc1swXTtjb25zdCBfPWguZnJvbXNhcy5zbGljZSgwLGEubGljZW5jZVN0YXRlLnZhbHVlLmhp'@;
put 'c3Rvcnlfcm93c19hbGxvd2VkKTtpZihfLmxlbmd0aD4wKXtjb25zdCBUPV87YS5oaXN0b3J5QXJyPV8sZj1PYmplY3Qua2V5cyhUWzBdKSxhLnRhYmxlVGl0bGVzPWY7bGV0IFc9Xy5tYXAoZnVuY3Rpb24oaWUpe3JldHVybnt0YWJsZUlkOmllLlRBQkxFX0lELHN1Ym1pdHRlcjppZS5TVUJN'@;
put 'SVRURVIsc3VibWl0dGVkUmVhc29uOmllLlNVQk1JVFRFRF9SRUFTT05fVFhULHN1Ym1pdHRlZDppZS5TVUJNSVRURUQsc3RhdHVzOmllLlNUQVRVUyxyZXZpZXdSZWFzb246aWUuUkVWSUVXX1JFQVNPTl9UWFQscmV2aWV3ZXI6aWUuUkVWSUVXRVIscmV2aWV3ZWQ6aWUuUkVWSUVXRUQsbnVt'@;
put 'T2ZBcHByb3ZhbHM6aWUuTlVNX09GX0FQUFJPVkFMU19SRVFVSVJFRCxiYXNldGFibGU6aWUuQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5XKSxhLmxvYWRlZD0hMH1lbHNlIGEubG9hZGVkPSEwLDA9PT1hLmhpc3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2Eu'@;
put 'ZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EubG9hZERhdGEoKX0pKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChiZCksdHQodmwpLHR0KERzKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGlzdG9yeSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MjAsdmFyczo2LGNv'@;
put 'bnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLCJjbGFzcyIsImNhcmQtYmxvY2sgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1v'@;
put 'ZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxp'@;
put 'bmUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLDEsImNhcmQtYmxv'@;
put 'Y2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbImNsYXNz'@;
put 'IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsi'@;
put 'Y2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29s'@;
put 'b3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWhpc3RvcnkgZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJsb2FkLW1vcmUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxb'@;
put 'ImNsYXNzIiwiYnRuIGJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImRhdGFn'@;
put 'cmlkLWhpc3RvcnkiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwibS0wIiwzLCJj'@;
put 'bGljayJdLFsxLCJ2ZXJDZW50ZXIiLDMsIm5nQ2xhc3MiXSxbMSwidmVyQ2VudGVyIiwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nl'@;
put 'c3MiLDMsImNsckxvYWRpbmciLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCksSmUoMSxDR2UsNCwwLCJkaXYiLDEpLG1lKDIsImNsci1tb2RhbCIsMikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3Blbk1v'@;
put 'ZGFsPWZ9KSxtZSgzLCJoNCIsMyksTmUoNCwiQXBwcm92YWwgZGV0YWlscyIpLHllKCksbWUoNSwiZGl2Iiw0KSg2LCJ0YWJsZSIsNSkoNywidGhlYWQiKSg4LCJ0ciIpKDksInRoIiw2KSxOZSgxMCwiTmFtZSIpLHllKCksbWUoMTEsInRoIiw2KSxOZSgxMiwiVmFsdWUiKSx5ZSgpKCkoKSxt'@;
put 'ZSgxMywidGJvZHkiKSxKZSgxNCxFR2UsNyw0LCJ0ciIsNykseWUoKSgpKCksbWUoMTUsImRpdiIsOCkoMTYsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm9wZW5Nb2RhbD0hMX0pLE5lKDE3LCIgT0sgIikseWUoKSgpKCksSmUoMTgsVEdlLDMsMiwiZGl2Iiwx'@;
put 'MCksSmUoMTksRkdlLDcsNCwiZGl2IiwxMSkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQubm9EYXRhKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLm9wZW5Nb2RhbCkoImNsck1vZGFsU2l6ZSIsInhsIiksQ2UoMTIpLFJlKCJuZ0Zvck9mIixkLnRhYmxlVGl0bGVzKSxDZSg0KSxS'@;
put 'ZSgibmdJZiIsIWQubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWQubm9EYXRhJiZkLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W2RjLHhzLFppLFc4LFRwLHRnLFU4LG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LGthLG91LHN1LFp1LGRoXSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0l'@;
put 'Q09NUCVde2NvbG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmhzQ2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4IWltcG9ydGFudDtmbGV4LWRpcmVjdGlvbjpjb2x1'@;
put 'bW4haW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50O2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnQ7cGFkZGluZzo3cHh9LmJ0Q2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9y'@;
put 'dGFudH0udmVyQ2VudGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5sb2FkLW1vcmVbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjkwcHh9I25vRGF0YUNv'@;
put 'bnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxjfSkoKX1dO2xldCBOR2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxj'@;
put 'Llx1MDI3NWluaj1taSh7aW1wb3J0czpbb28saGMuZm9yQ2hpbGQoSEdlKSxoY119KSxjfSkoKSxWR2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7'@;
put 'aW1wb3J0czpbb28scWwsTkdlLF91LF83LmZvclJvb3QoKSxDMixWN119KSxjfSkoKSxCR2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCk7ZnVu'@;
put 'Y3Rpb24gakdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNiksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gekdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gVUdlKGMsbCl7'@;
put 'aWYoMSZjJiYobWUoMCwiZGl2Iiw0KSxKZSgxLGpHZSwyLDAsInNwYW4iLDUpLEplKDIsekdlLDMsMCwiZGl2IiwzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19Y29uc3QgWkdlPWZ1bmN0aW9u'@;
put 'KGMsbCl7cmV0dXJue3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH19O2Z1bmN0aW9uIFlHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIpKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJoNCIsOSksTmUoNCwiU3RhZ2VkIERhdGEiKSx5ZSgpKCkoKSxtZSg1LCJkaXYiLDEwKSg2'@;
put 'LCJkaXYiLDExKSg3LCJkaXYiLDEyKSg4LCJkaXYiLDgpLE5lKDksIkJhc2ljIFN1Ym1pdHRlZCBEZXRhaWxzIikseWUoKSgpLG1lKDEwLCJkaXYiKSgxMSwic3BhbiIpLE5lKDEyLCJUYWJsZSBJZDoiKSx5ZSgpLG1lKDEzLCJzdHJvbmciKSgxNCwic3BhbiIpLE5lKDE1KSx5ZSgpKCkoKSxt'@;
put 'ZSgxNiwiZGl2IikoMTcsInNwYW4iKSxOZSgxOCwiQmFzZSBUYWJsZToiKSx5ZSgpLG1lKDE5LCJhIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksTmUoMjApLHllKCkoKSxtZSgyMSwiZGl2IikoMjIsInNwYW4i'@;
put 'KSxOZSgyMywiU3VibWl0IERhdGU6IikseWUoKSxtZSgyNCwic3BhbiIsMTQpLE5lKDI1KSx5ZSgpKCksbWUoMjYsImRpdiIpKDI3LCJzcGFuIiksTmUoMjgsIlJldmlldyBTdGF0dXM6IikseWUoKSxtZSgyOSwic3BhbiIsMTUpLE5lKDMwKSx5ZSgpKCkoKSxtZSgzMSwiZGl2IiwxNikoMzIs'@;
put 'ImRpdiIsMTIpKDMzLCJkaXYiLDgpLE5lKDM0LCJBY3Rpb25zIikseWUoKSgpLG1lKDM1LCJkaXYiLDE3KSgzNiwiZGl2IiwxOCkoMzcsImJ1dHRvbiIsMTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLE5lKDM4LCIg'@;
put 'R28gdG8gYmFzZSB0YWJsZSBzY3JlZW4gIikseWUoKSxtZSgzOSwiYnV0dG9uIiwyMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmFwcHJvdmVUYWJsZVNjcmVlbigpKX0pLE5lKDQwLCIgR28gdG8gYXBwcm92YWxzIHNjcmVlbiAiKSx5ZSgpLG1lKDQxLCJi'@;
put 'dXR0b24iLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZ29CYWNrKCkpfSksTmUoNDIsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSx5ZSgpLG1lKDQzLCJidXR0b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVy'@;
put 'biBqdChoLmRvd25sb2FkKG51bGw9PWgudGFibGVEZXRhaWxzP251bGw6aC50YWJsZURldGFpbHMuVEFCTEVfSUQpKX0pLHF0KDQ0LCJjbHItaWNvbiIsMjMpLHllKCkoKSgpKCkoKSxtZSg0NSwiZGl2IiwyNCkscXQoNDYsImhvdC10YWJsZSIsMjUpLHllKCkscXQoNDcsImRpdiIsMjYpLHll'@;
put 'KCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMTUpLGdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIiKSxDZSg1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFLCIgIiksQ2Uo'@;
put 'NSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxDZSg0KSxSZSgibmdDbGFzcyIsUTIoMTMsWkdlLCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdf'@;
put 'U1RBVFVTX0lEKSwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKSxDZSgxKSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lELCIgIiksQ2Uo'@;
put 'OSksUmUoImRpc2FibGVkIiwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSks'@;
put 'Q2UoNyksUmUoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGEuaG90VGFibGUuY29sdW1ucykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJsaWNlbnNl'@;
put 'S2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscyl9fWNvbnN0IFdHZT1be3BhdGg6Ijp0YWJsZUlkIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3Rv'@;
put 'cmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9Xyx0aGlzLnNhc1NlcnZpY2U9VCx0aGlzLmxvYWRlZD0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlPXtkYXRhOltd'@;
put 'LGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6NTAwLHNldHRpbmdzOnt9LGxpY2Vuc2VLZXk6dm9pZCAwLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkfHwxLzB9fXN1Ym1pdHRlZFRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0'@;
put 'ZUJ5VXJsKCIvc3RhZ2UvIit0aGlzLnRhYmxlX2lkKX1hcHByb3ZlVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZURldC8iK3RoaXMudGFibGVfaWQpfXZpZXdlclRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmll'@;
put 'dy9kYXRhLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9Z29CYWNrKCl7R24ueGxtYXBzLmZpbmQoZD0+ZC50YXJnZXREUz09PXRoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpP3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2hvbWUvZmlsZXMvIit0aGlzLmhvdFRhYmxlLmRh'@;
put 'dGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMu'@;
put 'c2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2Vy'@;
put 'dmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxk'@;
put 'IGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7'@;
put 'bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFn'@;
put 'ZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sXz1bXTtmb3IobGV0IFcgaW4gaCloJiZmLnB1c2goVyk7Zm9yKGxldCBXPTA7VzxmLmxlbmd0aDtXKyspXy5wdXNo'@;
put 'KHtkYXRhOmZbV119KTtsZXQgVD1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJsZS5jb2x1bW5zPV8sYS5ob3RUYWJsZS5jZWxscz1ULGEubG9hZGVkPSEwLGEuc2V0Rm9j'@;
put 'dXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxvYWRlZD0hMX19fSkoKX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5k'@;
put 'b3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQzApLHR0KGJkKSx0dCh2bCksdHQoRHMpLHR0KEdsKSx0dChvYSkpfSxjLlx1MDI3NWNt'@;
put 'cD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3RhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIiwiY2FyZCJdLFsiY2xhc3MiLCJoLTgwdmggZC1mbGV4'@;
put 'IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiaC04MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFz'@;
put 'cyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtdGl0bGUiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtdC0wIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xyLXJvdyJdLFsxLCJjYXJkLWJsb2NrIiwiY2xy'@;
put 'LWNvbC1tZC02Il0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJtdC0xMCIsMywibmdDbGFzcyJdLFsxLCJjbHItY29sLW1kLTYiLCJjYXJkLWJsb2NrIl0sWzEsIm10LTIwIl0sWzEsInJvdyJdLFsxLCJidG4i'@;
put 'LCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIl0sWyJpZCIsImFwcHJvdmFsLWJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwi'@;
put 'YnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsIm1pbi13LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEs'@;
put 'ImNhcmQtYmxvY2siXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsIm1heFJvd3MiLCJoZWlnaHQiLCJsaWNlbnNlS2V5IiwiY2VsbHMiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZs'@;
put 'ZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEplKDIsVUdlLDMsMiwiZGl2IiwyKSxKZSgzLFlHZSw0OCwxNiwiZGl2IiwzKSx5ZSgpKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5s'@;
put 'b2FkZWQpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W2RjLFppLGthLHh5XSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6'@;
put 'IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmJhc2VUYWJsZUxpbmtbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MTBweDtjb2xvcjojMDA3Y2JifSJdfSksY30pKCl9XTtsZXQgR0dlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLF91LGhjLmZvckNoaWxkKFdHZSksXzcuZm9yUm9vdCgpXX0pLGN9KSgpO2Z1bmN0aW9uICRHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBW'@;
put 'aWV3ZXIgcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gcUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwi'@;
put 'IEVkaXRvciByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBLR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgx'@;
put 'LCIgU3RhZ2Ugcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBYR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgx'@;
put 'LCIgSGlzdG9yeSByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gSkdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiks'@;
put 'TmUoMSwiIFN1Ym1pdCByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KX19ZnVuY3Rpb24gUUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiks'@;
put 'TmUoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gZSRlKGMsbCl7aWYoMSZjJiYo'@;
put 'bWUoMCwicCIsNiksTmUoMSwiIFZpZXdib3hlcyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0KX19ZnVuY3Rpb24gdCRlKGMsbCl7aWYoMSZjJiYobWUoMCwi'@;
put 'cCIsNiksTmUoMSwiIExpbmVhZ2UgZGFpbHkgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCl9fWZ1bmN0aW9uIG4kZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO21lKDAsImRpdiIsMTcpLE5lKDEsIiBSZWZyZXNoIERhdGEgTGluZWFnZSAiKSxtZSgyLCJidXR0b24iLDE4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnJlZnJlc2hEYXRhTGluZWFnZSgpKX0pLE5lKDMsIiBSRUZSRVNIICIpLHllKCko'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksUmUoImNsckxvYWRpbmciLGEucmVmcmVzaGluZ0RhdGFMaW5lYWdlKX19ZnVuY3Rpb24gciRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksSmUoMSxuJGUsNCwxLCJkaXYiLDE2KSxtZSgyLCJkaXYiLDE3KSxOZSgzLCIgUmVm'@;
put 'cmVzaCBEYXRhIENhdGFsb2cgIiksbWUoNCwiYnV0dG9uIiwxOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnJlZnJlc2hEYXRhQ2F0YWxvZygpKX0pLE5lKDUsIiBSRUZSRVNIICIpLHllKCkoKSxtZSg2LCJkaXYiLDE3KSxOZSg3LCIgRG93bmxvYWQgQ29u'@;
put 'ZmlndXJhdGlvbiAiKSxtZSg4LCJidXR0b24iLDE5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZG93bmxvYWRDb25maWd1cmF0aW9uKCkpfSksTmUoOSwiIERPV05MT0FEICIpLHllKCkoKSxtZSgxMCwiZGl2IiwxNyksTmUoMTEsIiBVcGRhdGUgTGljZW5j'@;
put 'ZSBLZXkgIiksbWUoMTIsImJ1dHRvbiIsMjApLE5lKDEzLCIgVVBEQVRFICIpLHllKCkoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpLENlKDMpLFJlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZyl9'@;
put 'fWNvbnN0IGkkZT1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmFwcEluZm89e2FkYXB0ZXJWZXJzaW9uOiI0LjEwLjIiLGFwcFZl'@;
put 'cnNpb246InY2LjYuNCIucmVwbGFjZSgidiIsIiIpLGJ1aWxkVGltZXN0YW1wOklHKCkocGFyc2VJbnQoIjE3MTE5NjUxMzQ5MDgiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFD'@;
put 'YXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5z'@;
put 'ZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNlSW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCksdGhpcy5lbnZpcm9ubWVudEluZm89dGhpcy5hcHBTZXJ2aWNlLmdldEVudmlyb25tZW50SW5mbygpLHRoaXMuZW52'@;
put 'aXJvbm1lbnRJbmZvJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSl9bmdPbkluaXQoKXt9ZG93bmxvYWRDb25maWd1cmF0aW9uKCl7bGV0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29u'@;
put 'ZmlnKCksZD1hLnNlcnZlclVybCxoPWEuYXBwTG9jLGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vZXhwb3J0Y29uZmlnIil9cmVmcmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNo'@;
put 'aW5nRGF0YUNhdGFsb2c9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2hjYXRhbG9nIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10'@;
put 'aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExfSl9cmVmcmVzaERhdGFMaW5lYWdlKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3Qo'@;
put 'ImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9k'@;
put 'YWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITF9KX1wYXJzZVJlc3BvbnNlKGEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTphfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0'@;
put 'dChVeCksdHQob2EpLHR0KEMwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEzMCx2YXJzOjM0LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwicC0x'@;
put 'MCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzEsImNvbnRlbnQtYm94IiwiZC1mbGV4IiwiY2xyLWZsZXgt'@;
put 'Y29sdW1uIl0sWzEsInN5cy1pbmZvIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1sZy1yb3ciXSxbMSwibS0wIl0sWzEsImRhcmsiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxb'@;
put 'ImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJi'@;
put 'dG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwiYWRtaW4tYWN0aW9uIiw0LCJuZ0lmIl0sWzEsImFkbWluLWFjdGlvbiJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbGlj'@;
put 'ayJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJoNCIsMiksTmUoMywiU3lzdGVtIGluZm9ybWF0aW9uIikseWUoKSxx'@;
put 'dCg0LCJociIsMyksbWUoNSwiZGl2Iiw0KSg2LCJkaXYiLDUpKDcsImRpdiIpKDgsImg2Iiw2KSxOZSg5LCJFbnZpcm9ubWVudCBEZXRhaWxzICIpLHF0KDEwLCJzcGFuIiw3KSx5ZSgpLG1lKDExLCJwIiw2KSxOZSgxMiwiIFNZU1NJVEU6ICIpLG1lKDEzLCJzcGFuIiw3KSxOZSgxNCkseWUo'@;
put 'KSgpLG1lKDE1LCJwIiw2KSxOZSgxNiwiIFNZU1NDUEw6ICIpLG1lKDE3LCJzcGFuIiw3KSxOZSgxOCkseWUoKSgpLG1lKDE5LCJwIiw2KSxOZSgyMCwiIFNZU1RDUElQSE9TVE5BTUU6ICIpLG1lKDIxLCJzcGFuIiw3KSxOZSgyMikseWUoKSgpLG1lKDIzLCJwIiw2KSxOZSgyNCwiIFNZU1ZM'@;
put 'T05HOiAiKSxtZSgyNSwic3BhbiIsNyksTmUoMjYpLHllKCkoKSxtZSgyNywicCIsNiksTmUoMjgsIiBNRU1TSVpFOiAiKSxtZSgyOSwic3BhbiIsNyksTmUoMzApLHllKCkoKSxtZSgzMSwicCIsNiksTmUoMzIsIiBTWVNQUk9DRVNTTU9ERTogIiksbWUoMzMsInNwYW4iLDcpLE5lKDM0KSx5'@;
put 'ZSgpKCksbWUoMzUsInAiLDYpLE5lKDM2LCIgU1lTSE9TVE5BTUU6ICIpLG1lKDM3LCJzcGFuIiw3KSxOZSgzOCkseWUoKSgpLG1lKDM5LCJwIiw2KSxOZSg0MCwiIFNZU0hPU1RJTkZPTE9ORzogIiksbWUoNDEsInNwYW4iLDcpLE5lKDQyKSx5ZSgpKCksbWUoNDMsInAiLDYpLE5lKDQ0LCIg'@;
put 'U1lTRU5DT0RJTkc6ICIpLG1lKDQ1LCJzcGFuIiw3KSxOZSg0NikseWUoKSgpLG1lKDQ3LCJwIiw2KSxOZSg0OCwiIEFVVE9FWEVDOiAiKSxtZSg0OSwic3BhbiIsNyksTmUoNTApLHllKCkoKSxtZSg1MSwicCIsNiksTmUoNTIsIiBEQyBBRE1JTiBHUk9VUDogIiksbWUoNTMsInNwYW4iLDcp'@;
put 'LE5lKDU0KSx5ZSgpKCkoKSxtZSg1NSwiZGl2Iiw4KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxOZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLHF0KDU5LCJzcGFuIiw3KSx5ZSgpLG1lKDYwLCJwIiw2KSxOZSg2MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLG1lKDYyLCJzcGFu'@;
put 'Iiw3KSxOZSg2MykseWUoKSgpLG1lKDY0LCJwIiw2KSxOZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksbWUoNjYsInNwYW4iLDcpLE5lKDY3KSx5ZSgpKCksbWUoNjgsInAiLDYpLE5lKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxtZSg3MCwic3BhbiIsNyksTmUoNzEpLHllKCkoKSxtZSg3'@;
put 'MiwicCIsNiksTmUoNzMsIiBIVFRQOiAiKSxtZSg3NCwic3BhbiIsNyksTmUoNzUpLHllKCkoKSgpKCksbWUoNzYsImRpdiIpKDc3LCJoNiIsNiksTmUoNzgsIkxpY2VuY2UgZGV0YWlscyAiKSxxdCg3OSwic3BhbiIsNykseWUoKSxtZSg4MCwicCIsNiksTmUoODEsIiBWYWxpZCB1bnRpbDog'@;
put 'IiksbWUoODIsInNwYW4iLDcpLE5lKDgzKSx5ZSgpKCksbWUoODQsInAiLDYpLE5lKDg1LCIgVXNlcnMgYWxsb3dlZDogIiksbWUoODYsInNwYW4iLDcpLE5lKDg3KSx5ZSgpKCksbWUoODgsInAiLDYpLE5lKDg5LCIgU2l0ZSBJRHM6ICIpLG1lKDkwLCJzcGFuIiw3KSxOZSg5MSkseWUoKSgp'@;
put 'LG1lKDkyLCJwIiw2KSxOZSg5MywiIEZyZWUgVGllcjogIiksbWUoOTQsInNwYW4iLDcpLE5lKDk1KSx5ZSgpKCksSmUoOTYsJEdlLDQsMSwicCIsOSksSmUoOTcscUdlLDQsMSwicCIsOSksSmUoOTgsS0dlLDQsMSwicCIsOSksSmUoOTksWEdlLDQsMSwicCIsOSksSmUoMTAwLEpHZSw0LDEs'@;
put 'InAiLDkpLEplKDEwMSxRR2UsNCwxLCJwIiw5KSxKZSgxMDIsZSRlLDQsMSwicCIsOSksSmUoMTAzLHQkZSw0LDEsInAiLDkpLG1lKDEwNCwicCIsNiksTmUoMTA1LCIgVmlld2JveGVzOiAiKSxtZSgxMDYsInNwYW4iLDcpLE5lKDEwNykseWUoKSgpLG1lKDEwOCwicCIsNiksTmUoMTA5LCIg'@;
put 'RmlsZSBVcGxvYWQ6ICIpLG1lKDExMCwic3BhbiIsNyksTmUoMTExKSx5ZSgpKCksbWUoMTEyLCJwIiw2KSxOZSgxMTMsIiBFZGl0IHJlY29yZDogIiksbWUoMTE0LCJzcGFuIiw3KSxOZSgxMTUpLHllKCkoKSxtZSgxMTYsInAiLDYpLE5lKDExNywiIEFkZCByZWNvcmQ6ICIpLG1lKDExOCwi'@;
put 'c3BhbiIsNyksTmUoMTE5KSx5ZSgpKCkoKSgpLHF0KDEyMCwiaHIiLDMpLEplKDEyMSxyJGUsMTQsMiwibmctY29udGFpbmVyIiwxMCkseWUoKSgpKCksbWUoMTIyLCJjbHItbW9kYWwiLDExKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yZXNwb25zZU1v'@;
put 'ZGFsPWZ9KSxtZSgxMjMsImgzIiwxMiksTmUoMTI0LCJSZXNwb25zZSIpLHllKCksbWUoMTI1LCJkaXYiLDEzKSxOZSgxMjYpLHllKCksbWUoMTI3LCJkaXYiLDE0KSgxMjgsImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNwb25zZU1vZGFsPSExfSksTmUo'@;
put 'MTI5LCIgT2sgIikseWUoKSgpKCkpLDImYSYmKENlKDE0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1NJVEUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTU0NQTCksQ2UoNCks'@;
put 'b3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNUQ1BJUEhPU1ROQU1FKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1ZMT05HKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5m'@;
put 'bz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLk1FTVNJWkUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTUFJPQ0VTU01PREUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lT'@;
put 'SE9TVE5BTUUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxDZSg0KSxvcihudWxs'@;
put 'PT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxDZSg5KSxvcihkLmFwcEluZm8uYXBwVmVyc2lvbiksQ2UoNCksb3Io'@;
put 'ZC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxDZSg0KSxvcihkLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLENlKDQpLG9yKGQuaHR0cD8iWUVTIjoiTk8iKSxDZSg4KSxvcihudWxsPT1kLmxpY2VuY2VJbmZvP251bGw6ZC5saWNlbmNlSW5mby52YWxpZF91bnRpbCksQ2UoNCksb3IobnVsbD09'@;
put 'ZC5saWNlbmNlSW5mbz9udWxsOmQubGljZW5jZUluZm8udXNlcnNfYWxsb3dlZCksQ2UoNCksb3IobnVsbD09ZC5saWNlbmNlSW5mbz9udWxsOmQubGljZW5jZUluZm8uc2l0ZV9pZF9tdWx0aXBsZSksQ2UoNCksb3IobnVsbCE9ZC5saWNlbmNlSW5mbyYmZC5saWNlbmNlSW5mby5kZW1vPyJZ'@;
put 'RVMiOiJOTyIpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJ'@;
put 'ZiIsZC5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVl'@;
put 'LnN1Ym1pdF9yb3dzX2xpbWl0IT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1kLklu'@;
put 'ZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWQuSW5maW5pdHkpLENlKDQpLG9yKGQubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksQ2UoNCksb3IoZC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVw'@;
put 'bG9hZD8iWUVTIjoiTk8iKSxDZSg0KSxvcihkLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLENlKDQpLG9yKGQubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxDZSgyKSxSZSgibmdJZiIsMT09PShudWxsPT1kLmVudmlyb25tZW50SW5m'@;
put 'bz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLnJlc3BvbnNlTW9kYWwpLENlKDQpLGdyKCIgIixkLnJlc3BvbnNlLCIgIikpfSxkZXBlbmRlbmNpZXM6W1ppLEJ1LG91LHN1LFp1LGRoXSxzdHlsZXM6WyIuY29udGVudC1ib3hbX25n'@;
put 'Y29udGVudC0lQ09NUCVde21heC13aWR0aDoxMjg5cHh9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGRpdltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfS5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJn'@;
put 'aW46MCAzMHB4fS5hZG1pbi1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMTBweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MXB4IHNvbGlkICNkZWRlZGU7'@;
put 'bWFyZ2luLWJvdHRvbTo1cHh9LmFkbWluLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoxMDJweH0uZGFya1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzAwMH1AbWVkaWEgKG1heC13aWR0aDogOTkzcHgpey5zeXMtaW5m'@;
put 'b1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MH0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweCAwfX0iXX0pLGN9KSgpfV07bGV0IG8kZT0oKCk9Pntj'@;
put 'bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltoYy5mb3JDaGlsZChpJGUpLGhjXX0pLGN9KSgpLHMkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxvJGUsX3VdfSksY30pKCk7ZnVuY3Rpb24gYSRlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGwkZShj'@;
put 'LGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGguZ3JvdXBTZWFyY2g9IiIsanQoaC5ncm91cExpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIGMkZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmdyb3VwU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBC'@;
put 'dChhKSxqdChWZSgpLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxKZSg0LGEkZSwxLDAsImNsci1pY29uIiwxMCksSmUoNSxsJGUsMSwwLCJjbHItaWNvbiIsMTEpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmdyb3VwU2VhcmNo'@;
put 'KSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB1JGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2Nv'@;
put 'bnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLG1lKDEsInAiLDE2KSxxdCgyLCJjbHItaWNvbiIsMTcpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO2RyKCJ0YWJsZS1hY3RpdmUiLGEuR1JPVVBV'@;
put 'Ukk9PT1kLmdyb3VwVXJpKSxDZSgzKSxncigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gZCRlKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSx1JGUsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5o'@;
put 'aWRkZW4pfX1mdW5jdGlvbiBoJGUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBmJGUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjQpKDMsInRib2R5'@;
put 'IikoNCwidHIiKSg1LCJ0ZCIsMjUpKDYsInAiLDI2KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjUpKDExLCJpIiksTmUoMTIpLHllKCkoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg4KSxvcihhLmdyb3VwTmFtZSksQ2UoNCksb3IoYS5n'@;
put 'cm91cERlc2N8fCJubyBkZXNjcmlwdGlvbiIpfX1mdW5jdGlvbiBwJGUoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIGckZShjLGwpezEmYyYmKFZyKDApLG1lKDEsInRkIiwzMSkoMiwiYiIpLE5lKDMsIk5BTUUiKSx5ZSgp'@;
put 'KCksbWUoNCwidGQiLDMxKSg1LCJiIiksTmUoNiwiRU1BSUwiKSx5ZSgpKCksbWUoNywidGQiLDMxKSg4LCJiIiksTmUoOSwiQ1JFQVRFRCIpLHllKCkoKSxtZSgxMCwidGQiLDMyKSgxMSwiYiIpLE5lKDEyLCJVUERBVEVEIikseWUoKSgpLHpyKCkpfWZ1bmN0aW9uIG0kZShjLGwpezEmYyYm'@;
put 'KFZyKDApLG1lKDEsInRkIiwzMSkoMiwiYiIpLE5lKDMsIklEIikseWUoKSgpLG1lKDQsInRkIiwzMSkoNSwiYiIpLE5lKDYsIkRJU1BMQVkgTkFNRSIpLHllKCkoKSxtZSg3LCJ0ZCIsMzEpKDgsImIiKSxOZSg5LCJVU0VSIE5BTUUiKSx5ZSgpKCksenIoKSl9ZnVuY3Rpb24gdiRlKGMsbCl7'@;
put 'aWYoMSZjJiYoVnIoMCksbWUoMSwidGQiLDMyKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMiksTmUoNCkseWUoKSxtZSg1LCJ0ZCIsMzIpLE5lKDYpLHllKCksbWUoNywidGQiLDMyKSxOZSg4KSx5ZSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLk1FTUJF'@;
put 'Uk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuTUVNQkVSQ1JFQVRFRCksQ2UoMiksb3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gXyRlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwidGQiLDMyKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMiksTmUoNCkseWUoKSxtZSg1'@;
put 'LCJ0ZCIsMzIpLE5lKDYpLHllKCksenIoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDIpLG9yKGEuSUQpLENlKDIpLG9yKGEuRElTUExBWU5BTUUpLENlKDIpLG9yKGEuVVNFUk5BTUUpfX1mdW5jdGlvbiBiJGUoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsMzMpLEplKDEsdiRl'@;
put 'LDksNCwibmctY29udGFpbmVyIiw1KSxKZSgyLF8kZSw3LDMsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoNCk7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrKGEuVVJJTUVNfHxhLklEKSksQ2UoMSksUmUoIm5nSWYi'@;
put 'LGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24geSRlKGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksSmUoMyxnJGUsMTMsMCwi'@;
put 'bmctY29udGFpbmVyIiw1KSxKZSg0LG0kZSwxMCwwLCJuZy1jb250YWluZXIiLDUpLHllKCkoKSxtZSg1LCJ0Ym9keSIpLEplKDYsYiRlLDMsMywidHIiLDMwKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgzKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNh'@;
put 'czkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIHckZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUoKSxKZSgzLHAkZSwyLDAsImg1'@;
put 'Iiw1KSxtZSg0LCJkaXYiLDI3KSxKZSg1LHkkZSw3LDMsInRhYmxlIiwyOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksZ3IoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksQ2UoMiksUmUo'@;
put 'Im5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIEMkZShjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gTWVtYmVycyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gUyRlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDMzKSgxLCJ0ZCIsMzIpLE5lKDIpLHllKCkoKSks'@;
put 'MiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuTUVNQkVSSUQpLENlKDIpLG9yKGEuTUVNQkVSTkFNRSl9fWZ1bmN0aW9uIE0kZShjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMs'@;
put 'InRkIikoNCwiYiIpLE5lKDUpLHllKCkoKSgpKCksbWUoNiwidGJvZHkiKSxKZSg3LFMkZSwzLDIsInRyIiwzMCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoNSksZ3IoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksQ2UoMiksUmUoIm5nRm9yT2YiLGEuZ3JvdXBN'@;
put 'ZW1iZXJzKX19ZnVuY3Rpb24geCRlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLEplKDMsQyRlLDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjcpLEplKDUsTSRlLDgsMiwidGFibGUiLDI4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxvcihh'@;
put 'Lmdyb3VwTmFtZSksQ2UoMSksUmUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIEUkZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLEplKDEsZiRlLDEzLDIsImRpdiIsMjApLG1lKDIsImRpdiIs'@;
put 'MjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLEplKDUsdyRlLDYsMywiZGl2Iiw1KSxKZSg2LHgkZSw2LDMsImRpdiIsNSkscXQoNywiYnIiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEp'@;
put 'LENlKDQpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19bGV0IGVhZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5zYXNTZXJ2'@;
put 'aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT1fLHRoaXMuZ3JvdXBTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmdyb3VwVXJpPSIiLHRoaXMuZ3JvdXBOYW1lPSIiLHRo'@;
put 'aXMuZ3JvdXBEZXNjPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLlNlcnZlclR5cGU9WmMuRCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVy'@;
put 'VHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvZ3JvdXBzIix2b2lkIDAhPT10'@;
put 'aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksR24udXNlcm5hdi5ncm91cExpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5ncm91cHM9R24udXNlcm5hdi5n'@;
put 'cm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Hbi51c2VybmF2Lmdyb3VwU2VhcmNoKToodm9pZCAwPT09R24udXNlcm5hdi5ncm91cExpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP2xp'@;
put 'bWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7R1JPVVBVUkk6Zi5pZCxHUk9VUE5BTUU6Zi5uYW1lLEdST1VQREVTQzpmLmRlc2NyaXB0aW9u'@;
put 'fSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1oLEduLnVzZXJuYXYuZ3JvdXBMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGdyb3VwcyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBzPWEuZ3JvdXBzLEduLnVzZXJuYXYu'@;
put 'Z3JvdXBMaXN0PWEuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Hbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUduLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25m'@;
put 'aWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9h'@;
put 'ZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMu'@;
put 'cGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihkPT57dGhpcy5ncm91cE1lbWJlcnM9ZC5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1kLnNh'@;
put 'c21lbWJlcnMubGVuZ3RoLHZvaWQgMCE9PWQuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQuc2FzbWVtYmVyc1swXS5VUklNRU18fHRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9ZC5zYXNtZW1iZXJzWzBdLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVz'@;
put 'Yz1kLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwi'@;
put 'R1JPVVBOQU1FIiksR24udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxh'@;
put 'c3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9'@;
put 'MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMu'@;
put 'Z3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCBfPWYuaXRlbXMubWFwKFQ9Pih7TUVNQkVSTkFNRTpULm5hbWUsTUVNQkVSSUQ6VC5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz1fLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1fLmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2'@;
put 'L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3Jv'@;
put 'dXBNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQoVGMpLHR0KERzKSx0dChKZCksdHQoR2wpKX0sYy5cdTAyNzVjbXA9'@;
put 'd3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWdyb3VwIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJu'@;
put 'YW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJz'@;
put 'aGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwibG9hZGluZ1Nw'@;
put 'aW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1kYXRhIl0sWzEsInRhYmxlIiwiZ3JvdXAtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4dCJdLFsx'@;
put 'LCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiwwKSgxLCJjbHItdHJlZSIpLEplKDIsYyRlLDYsMywiY2xyLXRyZWUtbm9kZSIsMSksSmUoMyxkJGUsMiwxLCJuZy1jb250YWluZXIiLDIpLHllKCkoKSxtZSg0LCJkaXYiLDMpLEplKDUsaCRlLDMsMCwiZGl2'@;
put 'Iiw0KSxKZSg2LEUkZSw4LDMsImRpdiIsNSkseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQuZ3JvdXBzKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5ncm91cHMpLENlKDIpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLmdyb3VwTWVtYmVycyYmIWQubG9hZGluZykp'@;
put 'fSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LFdhLEJzLE9zLGRkLGcxLGthLGYxLG4zXSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5ncm91cC1pbmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6'@;
put 'ZToyMHB4fS5ncm91cC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Lmdyb3VwLWluZm9bX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNk'@;
put 'YWQ3ZDd9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6YXV0b30uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0'@;
put 'ZXh0LWFsaWduOmNlbnRlcn0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7d2lkdGg6MTAwJX0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxl'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgLm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICB0cltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5ncm91cC1k'@;
put 'YXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KSxjfSkoKTtmdW5jdGlvbiBrJGUoKXt9ZnVuY3Rpb24geVUoYyl7cmV0dXJuIG51bGw9PWM/ayRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gdGFl'@;
put 'KGMpe3JldHVybiBudWxsPT1jP1tdOkFycmF5LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIFQkZSgpe3JldHVybltdfWZ1bmN0aW9uIG5hZShjKXtyZXR1cm4gbnVsbD09Yz9UJGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlv'@;
put 'biByYWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gaWFlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5tYXRjaGVzKGMpfX12YXIgTCRlPUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIE8kZSgpe3JldHVybiB0aGlzLmZp'@;
put 'cnN0RWxlbWVudENoaWxkfXZhciBGJGU9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBIJGUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBvYWUoYyl7cmV0dXJuIG5ldyBBcnJheShjLmxlbmd0aCl9ZnVuY3Rpb24gb1QoYyxsKXt0aGlzLm93bmVy'@;
put 'RG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9Yyx0aGlzLl9fZGF0YV9fPWx9ZnVuY3Rpb24gVSRlKGMsbCxhLGQsaCxmKXtmb3IodmFyIFQsXz0wLFc9bC5sZW5ndGgsaWU9Zi5sZW5n'@;
put 'dGg7XzxpZTsrK18pKFQ9bFtfXSk/KFQuX19kYXRhX189ZltfXSxkW19dPVQpOmFbX109bmV3IG9UKGMsZltfXSk7Zm9yKDtfPFc7KytfKShUPWxbX10pJiYoaFtfXT1UKX1mdW5jdGlvbiBaJGUoYyxsLGEsZCxoLGYsXyl7dmFyIFQsVyxaZSxpZT1uZXcgTWFwLHBlPWwubGVuZ3RoLHdlPWYu'@;
put 'bGVuZ3RoLEVlPW5ldyBBcnJheShwZSk7Zm9yKFQ9MDtUPHBlOysrVCkoVz1sW1RdKSYmKEVlW1RdPVplPV8uY2FsbChXLFcuX19kYXRhX18sVCxsKSsiIixpZS5oYXMoWmUpP2hbVF09VzppZS5zZXQoWmUsVykpO2ZvcihUPTA7VDx3ZTsrK1QpWmU9Xy5jYWxsKGMsZltUXSxULGYpKyIiLChX'@;
put 'PWllLmdldChaZSkpPyhkW1RdPVcsVy5fX2RhdGFfXz1mW1RdLGllLmRlbGV0ZShaZSkpOmFbVF09bmV3IG9UKGMsZltUXSk7Zm9yKFQ9MDtUPHBlOysrVCkoVz1sW1RdKSYmaWUuZ2V0KEVlW1RdKT09PVcmJihoW1RdPVcpfWZ1bmN0aW9uIFkkZShjKXtyZXR1cm4gYy5fX2RhdGFfX31mdW5j'@;
put 'dGlvbiBHJGUoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiYibGVuZ3RoImluIGM/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIFEkZShjLGwpe3JldHVybiBjPGw/LTE6Yz5sPzE6Yz49bD8wOk5hTn1vVC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm9ULGFwcGVuZENoaWxkOmZ1bmN0aW9u'@;
put 'KGMpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGMsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihjLGwpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGMsbCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5x'@;
put 'dWVyeVNlbGVjdG9yKGMpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChjKX19O3ZhciB3VT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3Qgc2FlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv'@;
put 'c3ZnIix4aHRtbDp3VSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIHNUKGMpe3ZhciBsPWMrPSIiLGE9bC5p'@;
put 'bmRleE9mKCI6Iik7cmV0dXJuIGE+PTAmJiJ4bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLHNhZS5oYXNPd25Qcm9wZXJ0eShsKT97c3BhY2U6c2FlW2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24gc3FlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0'@;
put 'cmlidXRlKGMpfX1mdW5jdGlvbiBhcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBscWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiBjcWUoYyxsKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gdXFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0'@;
put 'dHJpYnV0ZShjLGEpfX1mdW5jdGlvbiBkcWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxh'@;
put 'KX19ZnVuY3Rpb24gYWFlKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5kb2N1bWVudCYmY3x8Yy5kZWZhdWx0Vmlld31mdW5jdGlvbiBmcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19'@;
put 'ZnVuY3Rpb24gcHFlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rpb24gZ3FlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJv'@;
put 'cGVydHkoYyk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIFk3KGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShsKXx8YWFlKGMpLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uIHZxZShjKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tjXX19ZnVuY3Rpb24gX3FlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1sfX1mdW5jdGlvbiBicWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2Nd'@;
put 'OnRoaXNbY109YX19ZnVuY3Rpb24gbGFlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBDVShjKXtyZXR1cm4gYy5jbGFzc0xpc3R8fG5ldyBjYWUoYyl9ZnVuY3Rpb24gY2FlKGMpe3RoaXMuX25vZGU9Yyx0aGlzLl9uYW1lcz1sYWUoYy5nZXRBdHRyaWJ1dGUo'@;
put 'ImNsYXNzIil8fCIiKX1mdW5jdGlvbiB1YWUoYyxsKXtmb3IodmFyIGE9Q1UoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBkYWUoYyxsKXtmb3IodmFyIGE9Q1UoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiB3'@;
put 'cWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dWFlKHRoaXMsYyl9fWZ1bmN0aW9uIENxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtkYWUodGhpcyxjKX19ZnVuY3Rpb24gU3FlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpP3VhZTpkYWUpKHRoaXMsYyl9fWZ1'@;
put 'bmN0aW9uIHhxZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gRXFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319ZnVuY3Rpb24ga3FlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRl'@;
put 'bnQ9bD8/IiJ9fWZ1bmN0aW9uIFRxZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIERxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1jfX1mdW5jdGlvbiBJcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5p'@;
put 'bm5lckhUTUw9bD8/IiJ9fWZ1bmN0aW9uIFJxZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBQcWUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50'@;
put 'Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBIcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3VtZW50LGE9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGE9PT13VSYmbC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09d1U/bC5jcmVhdGVFbGVtZW50KGMp'@;
put 'OmwuY3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1bmN0aW9uIE5xZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBoYWUoYyl7dmFyIGw9c1QoYyk7cmV0dXJuKGwubG9jYWw/TnFl'@;
put 'OkhxZSkobCl9ZnVuY3Rpb24gQnFlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24genFlKCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWnFlKCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITEpLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wu'@;
put 'aW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiBZcWUoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIEtxZShjKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oKXt2YXIgbD10aGlzLl9fb247aWYobCl7Zm9yKHZhciBmLGE9MCxkPS0xLGg9bC5sZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYubmFtZSE9PWMubmFtZT9sWysrZF09Zjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZi50eXBlLGYubGlzdGVu'@;
put 'ZXIsZi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9ZDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gWHFlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19vbixmPWZ1bmN0aW9uICRxZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7Yy5jYWxsKHRoaXMsbCx0aGlzLl9fZGF0'@;
put 'YV9fKX19KGwpO2lmKGQpZm9yKHZhciBfPTAsVD1kLmxlbmd0aDtfPFQ7KytfKWlmKChoPWRbX10pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyLGgub3B0aW9ucyksdGhpcy5hZGRFdmVudExp'@;
put 'c3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyPWYsaC5vcHRpb25zPWEpLHZvaWQoaC52YWx1ZT1sKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5cGUsbmFtZTpjLm5hbWUsdmFsdWU6bCxsaXN0ZW5lcjpmLG9wdGlvbnM6YX0sZD9kLnB1c2goaCk6dGhpcy5f'@;
put 'X29uPVtoXX19ZnVuY3Rpb24gZmFlKGMsbCxhKXt2YXIgZD1hYWUoYyksaD1kLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGE/KGguaW5pdEV2ZW50KGwsYS5idWJibGVzLGEuY2FuY2VsYWJs'@;
put 'ZSksaC5kZXRhaWw9YS5kZXRhaWwpOmguaW5pdEV2ZW50KGwsITEsITEpKSxjLmRpc3BhdGNoRXZlbnQoaCl9ZnVuY3Rpb24gUXFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZhZSh0aGlzLGMsbCl9fWZ1bmN0aW9uIGVLZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBm'@;
put 'YWUodGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19Y2FlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25hbWVzLnB1c2goYyksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIg'@;
put 'IikpKX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBsPXRoaXMuX25hbWVzLmluZGV4T2YoYyk7bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGMpe3Jl'@;
put 'dHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGMpPj0wfX07dmFyIFNVPVtudWxsXTtmdW5jdGlvbiBYdShjLGwpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bH1mdW5jdGlvbiBwYWUoKXtyZXR1cm4gbmV3IFh1KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sU1UpfVh1LnByb3Rv'@;
put 'dHlwZT1wYWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYdSxzZWxlY3Q6ZnVuY3Rpb24gQSRlKGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz15VShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgVyxpZSxm'@;
put 'PWxbaF0sXz1mLmxlbmd0aCxUPWRbaF09bmV3IEFycmF5KF8pLHBlPTA7cGU8XzsrK3BlKShXPWZbcGVdKSYmKGllPWMuY2FsbChXLFcuX19kYXRhX18scGUsZikpJiYoIl9fZGF0YV9fImluIFcmJihpZS5fX2RhdGFfXz1XLl9fZGF0YV9fKSxUW3BlXT1pZSk7cmV0dXJuIG5ldyBYdShkLHRo'@;
put 'aXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gSSRlKGMpe2M9ImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gRCRlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0YWUoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0oYyk6bmFlKGMpO2Zvcih2YXIgbD10aGlzLl9ncm91'@;
put 'cHMsYT1sLmxlbmd0aCxkPVtdLGg9W10sZj0wO2Y8YTsrK2YpZm9yKHZhciBXLF89bFtmXSxUPV8ubGVuZ3RoLGllPTA7aWU8VDsrK2llKShXPV9baWVdKSYmKGQucHVzaChjLmNhbGwoVyxXLl9fZGF0YV9fLGllLF8pKSxoLnB1c2goVykpO3JldHVybiBuZXcgWHUoZCxoKX0sc2VsZWN0Q2hp'@;
put 'bGQ6ZnVuY3Rpb24gUCRlKGMpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1jP08kZTpmdW5jdGlvbiBSJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEwkZS5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOmlhZShjKSkpfSxzZWxlY3RDaGlsZHJl'@;
put 'bjpmdW5jdGlvbiBWJGUoYyl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PWM/SCRlOmZ1bmN0aW9uIE4kZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRiRlLmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6aWFlKGMpKSl9LGZpbHRlcjpmdW5j'@;
put 'dGlvbiBCJGUoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXJhZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgVyxmPWxbaF0sXz1mLmxlbmd0aCxUPWRbaF09W10saWU9MDtpZTxfOysraWUpKFc9Zltp'@;
put 'ZV0pJiZjLmNhbGwoVyxXLl9fZGF0YV9fLGllLGYpJiZULnB1c2goVyk7cmV0dXJuIG5ldyBYdShkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIFckZShjLGwpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsWSRlKTt2YXIgYT1sP1okZTpVJGUsZD10'@;
put 'aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiB6JGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShjKSk7Zm9yKHZhciBmPWgubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9bmV3IEFycmF5KGYpLFc9bmV3IEFycmF5KGYp'@;
put 'LGllPTA7aWU8ZjsrK2llKXt2YXIgcGU9ZFtpZV0sd2U9aFtpZV0sRWU9d2UubGVuZ3RoLFplPUckZShjLmNhbGwocGUscGUmJnBlLl9fZGF0YV9fLGllLGQpKSxpdD1aZS5sZW5ndGgsZXQ9VFtpZV09bmV3IEFycmF5KGl0KSx5dD1fW2llXT1uZXcgQXJyYXkoaXQpO2EocGUsd2UsZXQseXQs'@;
put 'V1tpZV09bmV3IEFycmF5KEVlKSxaZSxsKTtmb3IodmFyIG5uLHZuLFN0PTAsSnQ9MDtTdDxpdDsrK1N0KWlmKG5uPWV0W1N0XSl7Zm9yKFN0Pj1KdCYmKEp0PVN0KzEpOyEodm49eXRbSnRdKSYmKytKdDxpdDspO25uLl9uZXh0PXZufHxudWxsfX1yZXR1cm4oXz1uZXcgWHUoXyxkKSkuX2Vu'@;
put 'dGVyPVQsXy5fZXhpdD1XLF99LGVudGVyOmZ1bmN0aW9uIGokZSgpe3JldHVybiBuZXcgWHUodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAob2FlKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiAkJGUoKXtyZXR1cm4gbmV3IFh1KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5t'@;
put 'YXAob2FlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBxJGUoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYz8oZD1jKGQpKSYmKGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxs'@;
put 'IT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rpb24oKSksbnVsbD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6ZnVuY3Rpb24gSyRlKGMpe2Zvcih2YXIgbD1jLnNlbGVjdGlvbj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9n'@;
put 'cm91cHMsaD1hLmxlbmd0aCxfPU1hdGgubWluKGgsZC5sZW5ndGgpLFQ9bmV3IEFycmF5KGgpLFc9MDtXPF87KytXKWZvcih2YXIgWmUsaWU9YVtXXSxwZT1kW1ddLHdlPWllLmxlbmd0aCxFZT1UW1ddPW5ldyBBcnJheSh3ZSksaXQ9MDtpdDx3ZTsrK2l0KShaZT1pZVtpdF18fHBlW2l0XSkm'@;
put 'JihFZVtpdF09WmUpO2Zvcig7VzxoOysrVylUW1ddPWFbV107cmV0dXJuIG5ldyBYdShULHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gcktlKCl7cmV0dXJuIHRoaXN9LG9yZGVyOmZ1bmN0aW9uIFgkZSgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3Ro'@;
put 'OysrbDxhOylmb3IodmFyIF8sZD1jW2xdLGg9ZC5sZW5ndGgtMSxmPWRbaF07LS1oPj0wOykoXz1kW2hdKSYmKGYmJjReXy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmKSYmZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfLGYpLGY9Xyk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gSiRl'@;
put 'KGMpe2Z1bmN0aW9uIGwod2UsRWUpe3JldHVybiB3ZSYmRWU/Yyh3ZS5fX2RhdGFfXyxFZS5fX2RhdGFfXyk6IXdlLSFFZX1jfHwoYz1RJGUpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZD1hLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciBpZSxfPWFbZl0sVD1f'@;
put 'Lmxlbmd0aCxXPWhbZl09bmV3IEFycmF5KFQpLHBlPTA7cGU8VDsrK3BlKShpZT1fW3BlXSkmJihXW3BlXT1pZSk7Vy5zb3J0KGwpfXJldHVybiBuZXcgWHUoaCx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIGVxZSgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJn'@;
put 'dW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gdHFlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24gbnFlKCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIg'@;
put 'ZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpe3ZhciBfPWRbaF07aWYoXylyZXR1cm4gX31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBycWUoKXtsZXQgYz0wO2Zvcihjb25zdCBsIG9mIHRoaXMpKytjO3JldHVybiBjfSxlbXB0eTpmdW5jdGlvbiBpcWUoKXtyZXR1cm4hdGhpcy5u'@;
put 'b2RlKCl9LGVhY2g6ZnVuY3Rpb24gb3FlKGMpe2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIFQsaD1sW2FdLGY9MCxfPWgubGVuZ3RoO2Y8XzsrK2YpKFQ9aFtmXSkmJmMuY2FsbChULFQuX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0'@;
put 'cjpmdW5jdGlvbiBocWUoYyxsKXt2YXIgYT1zVChjKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKTpkLmdldEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1s'@;
put 'P2EubG9jYWw/YXFlOnNxZToiZnVuY3Rpb24iPT10eXBlb2YgbD9hLmxvY2FsP2RxZTp1cWU6YS5sb2NhbD9jcWU6bHFlKShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24gbXFlKGMsbCxhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9mcWU6ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIGw/Z3FlOnBxZSkoYyxsLGE/PyIiKSk6WTcodGhpcy5ub2RlKCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIHlxZShjLGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1sP3ZxZToiZnVuY3Rpb24iPT10eXBlb2YgbD9icWU6X3FlKShjLGwpKTp0aGlz'@;
put 'Lm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlvbiBNcWUoYyxsKXt2YXIgYT1sYWUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9Q1UodGhpcy5ub2RlKCkpLGg9LTEsZj1hLmxlbmd0aDsrK2g8ZjspaWYoIWQuY29udGFpbnMoYVtoXSkpcmV0dXJuITE7cmV0dXJuITB9'@;
put 'cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/U3FlOmw/d3FlOkNxZSkoYSxsKSl9LHRleHQ6ZnVuY3Rpb24gQXFlKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1jP3hxZTooImZ1bmN0aW9uIj09dHlwZW9mIGM/a3FlOkVxZSkoYykpOnRo'@;
put 'aXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIExxZShjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9UcWU6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP0lxZTpEcWUpKGMpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIE9x'@;
put 'ZSgpe3JldHVybiB0aGlzLmVhY2goUnFlKX0sbG93ZXI6ZnVuY3Rpb24gRnFlKCl7cmV0dXJuIHRoaXMuZWFjaChQcWUpfSxhcHBlbmQ6ZnVuY3Rpb24gVnFlKGMpe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6aGFlKGMpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzLmFwcGVuZENoaWxkKGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24ganFlKGMsbCl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpoYWUoYyksZD1udWxsPT1sP0JxZToiZnVuY3Rpb24iPT10eXBlb2YgbD9sOnlVKGwpO3JldHVybiB0aGlzLnNl'@;
put 'bGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIFVxZSgpe3JldHVybiB0aGlzLmVhY2goenFlKX0sY2xvbmU6ZnVuY3Rpb24gV3FlKGMp'@;
put 'e3JldHVybiB0aGlzLnNlbGVjdChjP1lxZTpacWUpfSxkYXR1bTpmdW5jdGlvbiBHcWUoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGMpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBKcWUoYyxsLGEpe3ZhciBoLF8sZD1mdW5j'@;
put 'dGlvbiBxcWUoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixkPWwuaW5kZXhPZigiLiIpO3JldHVybiBkPj0wJiYoYT1sLnNsaWNlKGQrMSksbD1sLnNsaWNlKDAsZCkpLHt0eXBlOmwsbmFtZTphfX0pfShjKyIiKSxmPWQubGVuZ3Ro'@;
put 'O2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKFQ9bD9YcWU6S3FlLGg9MDtoPGY7KytoKXRoaXMuZWFjaChUKGRbaF0sbCxhKSk7cmV0dXJuIHRoaXN9dmFyIFQ9dGhpcy5ub2RlKCkuX19vbjtpZihUKWZvcih2YXIgcGUsVz0wLGllPVQubGVuZ3RoO1c8aWU7KytXKWZvcihoPTAscGU9'@;
put 'VFtXXTtoPGY7KytoKWlmKChfPWRbaF0pLnR5cGU9PT1wZS50eXBlJiZfLm5hbWU9PT1wZS5uYW1lKXJldHVybiBwZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gdEtlKGMsbCl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/ZUtlOlFxZSkoYyxsKSl9LFtTeW1ib2wu'@;
put 'aXRlcmF0b3JdOmZ1bmN0aW9uKm5LZSgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIF8sZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpKF89ZFtoXSkmJih5aWVsZCBfKX19O2NvbnN0IFlnPXBhZTtmdW5jdGlvbiBNVShjKXtyZXR1'@;
put 'cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IFh1KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGMpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFh1KFt0YWUoYyldLFNVKX1mdW5jdGlvbiBrcyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IFh1KFtbZG9jdW1lbnQu'@;
put 'cXVlcnlTZWxlY3RvcihjKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgWHUoW1tjXV0sU1UpfXZhciBpS2U9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gZ2FlKCl7Zm9yKHZhciBkLGM9MCxsPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRz'@;
put 'W2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IGFUKGEpfWZ1bmN0aW9uIGFUKGMpe3RoaXMuXz1jfWZ1bmN0aW9uIHNLZShjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7'@;
put 'KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJldHVybiBoLnZhbHVlfWZ1bmN0aW9uIG1hZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlmKGNbZF0ubmFtZT09PWwpe2NbZF09aUtlLGM9Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVy'@;
put 'biBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2YWx1ZTphfSksY31hVC5wcm90b3R5cGU9Z2FlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YVQsb246ZnVuY3Rpb24oYyxsKXt2YXIgaCxhPXRoaXMuXyxkPWZ1bmN0aW9uIG9LZShjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5t'@;
put 'YXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1hLmluZGV4T2YoIi4iKTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0p'@;
put 'fShjKyIiLGEpLGY9LTEsXz1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitsKTtmb3IoOysrZjxfOylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT1tYWUo'@;
put 'YVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxsPT1sKWZvcihoIGluIGEpYVtoXT1tYWUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8XzspaWYoKGg9KGM9ZFtmXSkudHlwZSkmJihoPXNLZShhW2hdLGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFy'@;
put 'IGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGluIGwpY1thXT1sW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBhVChjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGgsZixhPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50'@;
put 'c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tjXSkubGVuZ3RoO2Q8aDsrK2QpZltkXS52YWx1ZS5hcHBseShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMu'@;
put 'Xy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpZFtoXS52YWx1ZS5hcHBseShsLGEpfX07Y29uc3QgeFU9Z2FlO3ZhciBsVCxodyxXNz0wLHV3PTAsZHc9MCx2YWU9'@;
put 'MWUzLGNUPTAsV2c9MCx1VD0wLGZ3PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLF9hZT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlv'@;
put 'bkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihjKXtzZXRUaW1lb3V0KGMsMTcpfTtmdW5jdGlvbiBFVSgpe3JldHVybiBXZ3x8KF9hZShhS2UpLFdnPWZ3Lm5vdygpK3VUKX1mdW5jdGlvbiBhS2UoKXtXZz0wfWZ1bmN0aW9uIGRUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25l'@;
put 'eHQ9bnVsbH1mdW5jdGlvbiBiYWUoYyxsLGEpe3ZhciBkPW5ldyBkVDtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIHlhZSgpe1dnPShjVD1mdy5ub3coKSkrdVQsVzc9dXc9MDt0cnl7IWZ1bmN0aW9uIGxLZSgpe0VVKCksKytXNztmb3IodmFyIGwsYz1sVDtjOykobD1XZy1j'@;
put 'Ll90aW1lKT49MCYmYy5fY2FsbC5jYWxsKHZvaWQgMCxsKSxjPWMuX25leHQ7LS1XN30oKX1maW5hbGx5e1c3PTAsZnVuY3Rpb24gdUtlKCl7Zm9yKHZhciBjLGEsbD1sVCxkPTEvMDtsOylsLl9jYWxsPyhkPmwuX3RpbWUmJihkPWwuX3RpbWUpLGM9bCxsPWwuX25leHQpOihhPWwuX25leHQs'@;
put 'bC5fbmV4dD1udWxsLGw9Yz9jLl9uZXh0PWE6bFQ9YSk7aHc9YyxrVShkKX0oKSxXZz0wfX1mdW5jdGlvbiBjS2UoKXt2YXIgYz1mdy5ub3coKSxsPWMtY1Q7bD52YWUmJih1VC09bCxjVD1jKX1mdW5jdGlvbiBrVShjKXtXN3x8KHV3JiYodXc9Y2xlYXJUaW1lb3V0KHV3KSksYy1XZz4yND8o'@;
put 'YzwxLzAmJih1dz1zZXRUaW1lb3V0KHlhZSxjLWZ3Lm5vdygpLXVUKSksZHcmJihkdz1jbGVhckludGVydmFsKGR3KSkpOihkd3x8KGNUPWZ3Lm5vdygpLGR3PXNldEludGVydmFsKGNLZSx2YWUpKSxXNz0xLF9hZSh5YWUpKSl9ZnVuY3Rpb24gaFQoYyxsLGEpe3ZhciBkPW5ldyBkVDtyZXR1'@;
put 'cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9ZFQucHJvdG90eXBlPWJhZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRULHJlc3RhcnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'ImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9FVSgpOithKSsobnVsbD09bD8wOitsKSwhdGhpcy5fbmV4dCYmaHchPT10aGlzJiYoaHc/aHcuX25leHQ9dGhpczpsVD10aGlzLGh3PXRoaXMpLHRoaXMuX2NhbGw9Yyx0aGlzLl90aW1lPWEsa1UoKX0sc3RvcDpmdW5j'@;
put 'dGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsa1UoKSl9fTt2YXIgZEtlPXhVKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGhLZT1bXSx3YWU9MCxUVT0yLGZUPTMsRFU9NSxwVD02O2Z1bmN0aW9uIGdUKGMsbCxhLGQsaCxmKXt2'@;
put 'YXIgXz1jLl9fdHJhbnNpdGlvbjtpZihfKXtpZihhIGluIF8pcmV0dXJufWVsc2UgYy5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uIGZLZShjLGwsYSl7dmFyIGgsZD1jLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBfKGllKXt2YXIgcGUsd2UsRWUsWmU7aWYoMSE9PWEuc3RhdGUpcmV0dXJuIFco'@;
put 'KTtmb3IocGUgaW4gZClpZigoWmU9ZFtwZV0pLm5hbWU9PT1hLm5hbWUpe2lmKFplLnN0YXRlPT09ZlQpcmV0dXJuIGhUKF8pOzQ9PT1aZS5zdGF0ZT8oWmUuc3RhdGU9cFQsWmUudGltZXIuc3RvcCgpLFplLm9uLmNhbGwoImludGVycnVwdCIsYyxjLl9fZGF0YV9fLFplLmluZGV4LFplLmdy'@;
put 'b3VwKSxkZWxldGUgZFtwZV0pOitwZTxsJiYoWmUuc3RhdGU9cFQsWmUudGltZXIuc3RvcCgpLFplLm9uLmNhbGwoImNhbmNlbCIsYyxjLl9fZGF0YV9fLFplLmluZGV4LFplLmdyb3VwKSxkZWxldGUgZFtwZV0pfWlmKGhUKGZ1bmN0aW9uKCl7YS5zdGF0ZT09PWZUJiYoYS5zdGF0ZT00LGEu'@;
put 'dGltZXIucmVzdGFydChULGEuZGVsYXksYS50aW1lKSxUKGllKSl9KSxhLnN0YXRlPVRVLGEub24uY2FsbCgic3RhcnQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLGEuc3RhdGU9PT1UVSl7Zm9yKGEuc3RhdGU9ZlQsaD1uZXcgQXJyYXkoRWU9YS50d2Vlbi5sZW5ndGgpLHBlPTAs'@;
put 'd2U9LTE7cGU8RWU7KytwZSkoWmU9YS50d2VlbltwZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSkmJihoWysrd2VdPVplKTtoLmxlbmd0aD13ZSsxfX1mdW5jdGlvbiBUKGllKXtmb3IodmFyIHBlPWllPGEuZHVyYXRpb24/YS5lYXNlLmNhbGwobnVsbCxpZS9h'@;
put 'LmR1cmF0aW9uKTooYS50aW1lci5yZXN0YXJ0KFcpLGEuc3RhdGU9RFUsMSksd2U9LTEsRWU9aC5sZW5ndGg7Kyt3ZTxFZTspaFt3ZV0uY2FsbChjLHBlKTthLnN0YXRlPT09RFUmJihhLm9uLmNhbGwoImVuZCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksVygpKX1mdW5jdGlvbiBX'@;
put 'KCl7Zm9yKHZhciBpZSBpbiBhLnN0YXRlPXBULGEudGltZXIuc3RvcCgpLGRlbGV0ZSBkW2xdLGQpcmV0dXJuO2RlbGV0ZSBjLl9fdHJhbnNpdGlvbn1kW2xdPWEsYS50aW1lcj1iYWUoZnVuY3Rpb24gZihpZSl7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydChfLGEuZGVsYXksYS50aW1lKSxh'@;
put 'LmRlbGF5PD1pZSYmXyhpZS1hLmRlbGF5KX0sMCxhLnRpbWUpfShjLGEse25hbWU6bCxpbmRleDpkLGdyb3VwOmgsb246ZEtlLHR3ZWVuOmhLZSx0aW1lOmYudGltZSxkZWxheTpmLmRlbGF5LGR1cmF0aW9uOmYuZHVyYXRpb24sZWFzZTpmLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTp3YWV9KX1m'@;
put 'dW5jdGlvbiBJVShjLGwpe3ZhciBhPVMyKGMsbCk7aWYoYS5zdGF0ZT53YWUpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gYX1mdW5jdGlvbiBUaChjLGwpe3ZhciBhPVMyKGMsbCk7aWYoYS5zdGF0ZT5mVCl0aHJvdyBuZXcgRXJyb3IoInRv'@;
put 'byBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gYX1mdW5jdGlvbiBTMihjLGwpe3ZhciBhPWMuX190cmFuc2l0aW9uO2lmKCFhfHwhKGE9YVtsXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBhfWZ1bmN0aW9uIG1UKGMsbCl7dmFyIGQsaCxf'@;
put 'LGE9Yy5fX3RyYW5zaXRpb24sZj0hMDtpZihhKXtmb3IoXyBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpKGQ9YVtfXSkubmFtZT09PWw/KGg9ZC5zdGF0ZT5UVSYmZC5zdGF0ZTxEVSxkLnN0YXRlPXBULGQudGltZXIuc3RvcCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGMs'@;
put 'Yy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBhW19dKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gRGgoYyxsKXtyZXR1cm4gYz0rYyxsPStsLGZ1bmN0aW9uKGEpe3JldHVybiBjKigxLWEpK2wqYX19dmFyIHZULFNhZT0xODAvTWF0aC5QSSxMVT17'@;
put 'dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBNYWUoYyxsLGEsZCxoLGYpe3ZhciBfLFQsVztyZXR1cm4oXz1NYXRoLnNxcnQoYypjK2wqbCkpJiYoYy89XyxsLz1fKSwoVz1jKmErbCpkKSYmKGEtPWMqVyxkLT1s'@;
put 'KlcpLChUPU1hdGguc3FydChhKmErZCpkKSkmJihhLz1ULGQvPVQsVy89VCksYypkPGwqYSYmKGM9LWMsbD0tbCxXPS1XLF89LV8pLHt0cmFuc2xhdGVYOmgsdHJhbnNsYXRlWTpmLHJvdGF0ZTpNYXRoLmF0YW4yKGwsYykqU2FlLHNrZXdYOk1hdGguYXRhbihXKSpTYWUsc2NhbGVYOl8sc2Nh'@;
put 'bGVZOlR9fWZ1bmN0aW9uIHhhZShjLGwsYSxkKXtmdW5jdGlvbiBoKGllKXtyZXR1cm4gaWUubGVuZ3RoP2llLnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oaWUscGUpe3ZhciB3ZT1bXSxFZT1bXTtyZXR1cm4gaWU9YyhpZSkscGU9YyhwZSksZnVuY3Rpb24gZihpZSxwZSx3ZSxFZSxa'@;
put 'ZSxpdCl7aWYoaWUhPT13ZXx8cGUhPT1FZSl7dmFyIGV0PVplLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxsLGEpO2l0LnB1c2goe2k6ZXQtNCx4OkRoKGllLHdlKX0se2k6ZXQtMix4OkRoKHBlLEVlKX0pfWVsc2Uod2V8fEVlKSYmWmUucHVzaCgidHJhbnNsYXRlKCIrd2UrbCtFZSth'@;
put 'KX0oaWUudHJhbnNsYXRlWCxpZS50cmFuc2xhdGVZLHBlLnRyYW5zbGF0ZVgscGUudHJhbnNsYXRlWSx3ZSxFZSksZnVuY3Rpb24gXyhpZSxwZSx3ZSxFZSl7aWUhPT1wZT8oaWUtcGU+MTgwP3BlKz0zNjA6cGUtaWU+MTgwJiYoaWUrPTM2MCksRWUucHVzaCh7aTp3ZS5wdXNoKGgod2UpKyJy'@;
put 'b3RhdGUoIixudWxsLGQpLTIseDpEaChpZSxwZSl9KSk6cGUmJndlLnB1c2goaCh3ZSkrInJvdGF0ZSgiK3BlK2QpfShpZS5yb3RhdGUscGUucm90YXRlLHdlLEVlKSxmdW5jdGlvbiBUKGllLHBlLHdlLEVlKXtpZSE9PXBlP0VlLnB1c2goe2k6d2UucHVzaChoKHdlKSsic2tld1goIixudWxs'@;
put 'LGQpLTIseDpEaChpZSxwZSl9KTpwZSYmd2UucHVzaChoKHdlKSsic2tld1goIitwZStkKX0oaWUuc2tld1gscGUuc2tld1gsd2UsRWUpLGZ1bmN0aW9uIFcoaWUscGUsd2UsRWUsWmUsaXQpe2lmKGllIT09d2V8fHBlIT09RWUpe3ZhciBldD1aZS5wdXNoKGgoWmUpKyJzY2FsZSgiLG51bGws'@;
put 'IiwiLG51bGwsIikiKTtpdC5wdXNoKHtpOmV0LTQseDpEaChpZSx3ZSl9LHtpOmV0LTIseDpEaChwZSxFZSl9KX1lbHNlKDEhPT13ZXx8MSE9PUVlKSYmWmUucHVzaChoKFplKSsic2NhbGUoIit3ZSsiLCIrRWUrIikiKX0oaWUuc2NhbGVYLGllLnNjYWxlWSxwZS5zY2FsZVgscGUuc2NhbGVZ'@;
put 'LHdlLEVlKSxpZT1wZT1udWxsLGZ1bmN0aW9uKFplKXtmb3IodmFyIHl0LGl0PS0xLGV0PUVlLmxlbmd0aDsrK2l0PGV0Oyl3ZVsoeXQ9RWVbaXRdKS5pXT15dC54KFplKTtyZXR1cm4gd2Uuam9pbigiIil9fX12YXIgdktlPXhhZShmdW5jdGlvbiBnS2UoYyl7Y29uc3QgbD1uZXcoImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTtyZXR1cm4gbC5pc0lkZW50aXR5P0xVOk1hZShsLmEsbC5iLGwuYyxsLmQsbC5lLGwuZil9LCJweCwgIiwicHgpIiwiZGVnKSIpLEVhZT14YWUoZnVuY3Rpb24gbUtlKGMpe3JldHVybiBudWxs'@;
put 'IT1jJiYodlR8fCh2VD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx2VC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsYyksYz12VC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9NYWUoKGM9Yy5tYXRyaXgpLmEsYy5i'@;
put 'LGMuYyxjLmQsYy5lLGMuZik6TFV9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gX0tlKGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1UaCh0aGlzLGMpLGY9aC50d2VlbjtpZihmIT09YSlmb3IodmFyIF89MCxUPShkPWE9ZikubGVuZ3RoO188VDsrK18paWYoZFtfXS5uYW1l'@;
put 'PT09bCl7KGQ9ZC5zbGljZSgpKS5zcGxpY2UoXywxKTticmVha31oLnR3ZWVuPWR9fWZ1bmN0aW9uIGJLZShjLGwsYSl7dmFyIGQsaDtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9VGgodGhpcyxjKSxfPWYudHdlZW47aWYo'@;
put 'XyE9PWQpe2g9KGQ9Xykuc2xpY2UoKTtmb3IodmFyIFQ9e25hbWU6bCx2YWx1ZTphfSxXPTAsaWU9aC5sZW5ndGg7VzxpZTsrK1cpaWYoaFtXXS5uYW1lPT09bCl7aFtXXT1UO2JyZWFrfVc9PT1pZSYmaC5wdXNoKFQpfWYudHdlZW49aH19ZnVuY3Rpb24gUlUoYyxsLGEpe3ZhciBkPWMuX2lk'@;
put 'O3JldHVybiBjLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1UaCh0aGlzLGQpOyhoLnZhbHVlfHwoaC52YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaCl7cmV0dXJuIFMyKGgsZCkudmFsdWVbbF19fWZ1bmN0aW9uIE9VKGMsbCxhKXtjLnByb3RvdHlwZT1s'@;
put 'LnByb3RvdHlwZT1hLGEuY29uc3RydWN0b3I9Y31mdW5jdGlvbiBrYWUoYyxsKXt2YXIgYT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTtmb3IodmFyIGQgaW4gbClhW2RdPWxbZF07cmV0dXJuIGF9ZnVuY3Rpb24gcHcoKXt9dmFyIF9UPTEvLjcsRzc9IlxccyooWystXT9cXGQrKVxccyoi'@;
put 'LG13PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixJaD0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHdLZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxDS2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7Rzd9'@;
put 'LCR7Rzd9LCR7Rzd9XFwpJGApLFNLZT1uZXcgUmVnRXhwKGBecmdiXFwoJHtJaH0sJHtJaH0sJHtJaH1cXCkkYCksTUtlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtHN30sJHtHN30sJHtHN30sJHttd31cXCkkYCkseEtlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtJaH0sJHtJaH0sJHtJaH0sJHtt'@;
put 'd31cXCkkYCksRUtlPW5ldyBSZWdFeHAoYF5oc2xcXCgke213fSwke0lofSwke0lofVxcKSRgKSxrS2U9bmV3IFJlZ0V4cChgXmhzbGFcXCgke213fSwke0lofSwke0lofSwke213fVxcKSRgKSxBYWU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUz'@;
put 'NSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRl'@;
put 'dGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxk'@;
put 'YXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hp'@;
put 'ZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6'@;
put 'OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2'@;
put 'NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazox'@;
put 'NjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjEx'@;
put 'MzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjox'@;
put 'Njc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMz'@;
put 'MjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVt'@;
put 'c2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAy'@;
put 'MjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVu'@;
put 'OjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4'@;
put 'Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3'@;
put 'NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgw'@;
put 'ODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0'@;
put 'NTA3NH07ZnVuY3Rpb24gVGFlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRGFlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gR2coYyl7dmFyIGwsYTtyZXR1cm4gYz0oYysiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGw9d0tlLmV4'@;
put 'ZWMoYykpPyhhPWxbMV0ubGVuZ3RoLGw9cGFyc2VJbnQobFsxXSwxNiksNj09PWE/SWFlKGwpOjM9PT1hP25ldyBIMChsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKDE1JmwpPDw0fDE1JmwsMSk6OD09PWE/YlQobD4+MjQmMjU1LGw+PjE2JjI1NSxsPj44JjI1NSwoMjU1JmwpLzI1'@;
put 'NSk6ND09PWE/YlQobD4+MTImMTV8bD4+OCYyNDAsbD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgoMTUmbCk8PDR8MTUmbCkvMjU1KTpudWxsKToobD1DS2UuZXhlYyhjKSk/bmV3IEgwKGxbMV0sbFsyXSxsWzNdLDEpOihsPVNLZS5leGVjKGMpKT9uZXcgSDAoMjU1KmxbMV0vMTAw'@;
put 'LDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsMSk6KGw9TUtlLmV4ZWMoYykpP2JUKGxbMV0sbFsyXSxsWzNdLGxbNF0pOihsPXhLZS5leGVjKGMpKT9iVCgyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEwMCxsWzRdKToobD1FS2UuZXhlYyhjKSk/T2FlKGxbMV0sbFsyXS8x'@;
put 'MDAsbFszXS8xMDAsMSk6KGw9a0tlLmV4ZWMoYykpP09hZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLGxbNF0pOkFhZS5oYXNPd25Qcm9wZXJ0eShjKT9JYWUoQWFlW2NdKToidHJhbnNwYXJlbnQiPT09Yz9uZXcgSDAoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBJYWUoYyl7cmV0dXJu'@;
put 'IG5ldyBIMChjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMsMSl9ZnVuY3Rpb24gYlQoYyxsLGEsZCl7cmV0dXJuIGQ8PTAmJihjPWw9YT1OYU4pLG5ldyBIMChjLGwsYSxkKX1mdW5jdGlvbiB5VChjLGwsYSxkKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24gREtlKGMpe3Jl'@;
put 'dHVybiBjIGluc3RhbmNlb2YgcHd8fChjPUdnKGMpKSxjP25ldyBIMCgoYz1jLnJnYigpKS5yLGMuZyxjLmIsYy5vcGFjaXR5KTpuZXcgSDB9KGMpOm5ldyBIMChjLGwsYSxkPz8xKX1mdW5jdGlvbiBIMChjLGwsYSxkKXt0aGlzLnI9K2MsdGhpcy5nPStsLHRoaXMuYj0rYSx0aGlzLm9wYWNp'@;
put 'dHk9K2R9ZnVuY3Rpb24gTGFlKCl7cmV0dXJuYCMke3FnKHRoaXMucil9JHtxZyh0aGlzLmcpfSR7cWcodGhpcy5iKX1gfWZ1bmN0aW9uIFJhZSgpe2NvbnN0IGM9d1QodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8icmdiKCI6InJnYmEoIn0keyRnKHRoaXMucil9LCAkeyRnKHRoaXMu'@;
put 'Zyl9LCAkeyRnKHRoaXMuYil9JHsxPT09Yz8iKSI6YCwgJHtjfSlgfWB9ZnVuY3Rpb24gd1QoYyl7cmV0dXJuIGlzTmFOKGMpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGMpKX1mdW5jdGlvbiAkZyhjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChjKXx8MCkp'@;
put 'fWZ1bmN0aW9uIHFnKGMpe3JldHVybigoYz0kZyhjKSk8MTY/IjAiOiIiKStjLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBPYWUoYyxsLGEsZCl7cmV0dXJuIGQ8PTA/Yz1sPWE9TmFOOmE8PTB8fGE+PTE/Yz1sPU5hTjpsPD0wJiYoYz1OYU4pLG5ldyBNMihjLGwsYSxkKX1mdW5jdGlvbiBQYWUo'@;
put 'Yyl7aWYoYyBpbnN0YW5jZW9mIE0yKXJldHVybiBuZXcgTTIoYy5oLGMucyxjLmwsYy5vcGFjaXR5KTtpZihjIGluc3RhbmNlb2YgcHd8fChjPUdnKGMpKSwhYylyZXR1cm4gbmV3IE0yO2lmKGMgaW5zdGFuY2VvZiBNMilyZXR1cm4gYzt2YXIgbD0oYz1jLnJnYigpKS5yLzI1NSxhPWMuZy8y'@;
put 'NTUsZD1jLmIvMjU1LGg9TWF0aC5taW4obCxhLGQpLGY9TWF0aC5tYXgobCxhLGQpLF89TmFOLFQ9Zi1oLFc9KGYraCkvMjtyZXR1cm4gVD8oXz1sPT09Zj8oYS1kKS9UKzYqKGE8ZCk6YT09PWY/KGQtbCkvVCsyOihsLWEpL1QrNCxULz1XPC41P2YraDoyLWYtaCxfKj02MCk6VD1XPjAmJlc8'@;
put 'MT8wOl8sbmV3IE0yKF8sVCxXLGMub3BhY2l0eSl9ZnVuY3Rpb24gTTIoYyxsLGEsZCl7dGhpcy5oPStjLHRoaXMucz0rbCx0aGlzLmw9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIEZhZShjKXtyZXR1cm4oYz0oY3x8MCklMzYwKTwwP2MrMzYwOmN9ZnVuY3Rpb24gQ1QoYyl7cmV0dXJu'@;
put 'IE1hdGgubWF4KDAsTWF0aC5taW4oMSxjfHwwKSl9ZnVuY3Rpb24gUFUoYyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgwP2E6YzwyNDA/bCsoYS1sKSooMjQwLWMpLzYwOmwpfWZ1bmN0aW9uIEhhZShjLGwsYSxkLGgpe3ZhciBmPWMqYyxfPWYqYztyZXR1cm4oKDEt'@;
put 'MypjKzMqZi1fKSpsKyg0LTYqZiszKl8pKmErKDErMypjKzMqZi0zKl8pKmQrXypoKS82fU9VKHB3LEdnLHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsYyl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUo'@;
put 'KX0saGV4OlRhZSxmb3JtYXRIZXg6VGFlLGZvcm1hdEhleDg6ZnVuY3Rpb24gQUtlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24gVEtlKCl7cmV0dXJuIFBhZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkRhZSx0b1N0cmluZzpEYWV9'@;
put 'KSxPVShIMCx5VCxrYWUocHcse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/X1Q6TWF0aC5wb3coX1QsYyksbmV3IEgwKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRoaXMub3BhY2l0eSl9LGRhcmtlcihjKXtyZXR1cm4gYz1udWxsPT1jPy43Ok1hdGgucG93KC43LGMpLG5ldyBI'@;
put 'MCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IEgwKCRnKHRoaXMuciksJGcodGhpcy5nKSwkZyh0aGlzLmIpLHdUKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhp'@;
put 'cy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6TGFlLGZvcm1hdEhleDpMYWUsZm9ybWF0SGV4ODpmdW5jdGlvbiBJS2UoKXtyZXR1cm5gIyR7'@;
put 'cWcodGhpcy5yKX0ke3FnKHRoaXMuZyl9JHtxZyh0aGlzLmIpfSR7cWcoMjU1Kihpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSl9YH0sZm9ybWF0UmdiOlJhZSx0b1N0cmluZzpSYWV9KSksT1UoTTIsZnVuY3Rpb24gTEtlKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRz'@;
put 'Lmxlbmd0aD9QYWUoYyk6bmV3IE0yKGMsbCxhLGQ/PzEpfSxrYWUocHcse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/X1Q6TWF0aC5wb3coX1QsYyksbmV3IE0yKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6'@;
put 'TWF0aC5wb3coLjcsYyksbmV3IE0yKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxsPWlzTmFOKGMpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEtYSkqbCxoPTIq'@;
put 'YS1kO3JldHVybiBuZXcgSDAoUFUoYz49MjQwP2MtMjQwOmMrMTIwLGgsZCksUFUoYyxoLGQpLFBVKGM8MTIwP2MrMjQwOmMtMTIwLGgsZCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IE0yKEZhZSh0aGlzLmgpLENUKHRoaXMucyksQ1QodGhpcy5sKSx3VCh0aGlzLm9wYWNp'@;
put 'dHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGM9d1QodGhpcy5vcGFjaXR5KTtyZXR1cm5g'@;
put 'JHsxPT09Yz8iaHNsKCI6ImhzbGEoIn0ke0ZhZSh0aGlzLmgpfSwgJHsxMDAqQ1QodGhpcy5zKX0lLCAkezEwMCpDVCh0aGlzLmwpfSUkezE9PT1jPyIpIjpgLCAke2N9KWB9YH19KSk7Y29uc3QgRlU9Yz0+KCk9PmM7ZnVuY3Rpb24gVmFlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0'@;
put 'aW9uIE5hZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYythKmx9fShjLGEpOkZVKGlzTmFOKGMpP2w6Yyl9Y29uc3QgU1Q9ZnVuY3Rpb24gYyhsKXt2YXIgYT1mdW5jdGlvbiBGS2UoYyl7cmV0dXJuIDE9PShjPStjKT9WYWU6ZnVuY3Rpb24obCxhKXtyZXR1cm4gYS1sP2Z1bmN0'@;
put 'aW9uIFBLZShjLGwsYSl7cmV0dXJuIGM9TWF0aC5wb3coYyxhKSxsPU1hdGgucG93KGwsYSktYyxhPTEvYSxmdW5jdGlvbihkKXtyZXR1cm4gTWF0aC5wb3coYytkKmwsYSl9fShsLGEsYyk6RlUoaXNOYU4obCk/YTpsKX19KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIgXz1hKChoPXlUKGgpKS5y'@;
put 'LChmPXlUKGYpKS5yKSxUPWEoaC5nLGYuZyksVz1hKGguYixmLmIpLGllPVZhZShoLm9wYWNpdHksZi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocGUpe3JldHVybiBoLnI9XyhwZSksaC5nPVQocGUpLGguYj1XKHBlKSxoLm9wYWNpdHk9aWUocGUpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMs'@;
put 'ZH0oMSk7ZnVuY3Rpb24gQmFlKGMpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgXyxULGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSk7Zm9yKF89MDtfPGE7KytfKVQ9eVQobFtfXSksZFtfXT1ULnJ8fDAsaFtfXT1ULmd8fDAsZltfXT1ULmJ8'@;
put 'fDA7cmV0dXJuIGQ9YyhkKSxoPWMoaCksZj1jKGYpLFQub3BhY2l0eT0xLGZ1bmN0aW9uKFcpe3JldHVybiBULnI9ZChXKSxULmc9aChXKSxULmI9ZihXKSxUKyIifX19QmFlKGZ1bmN0aW9uIFJLZShjKXt2YXIgbD1jLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9'@;
put 'MDphPj0xPyhhPTEsbC0xKTpNYXRoLmZsb29yKGEqbCksaD1jW2RdLGY9Y1tkKzFdO3JldHVybiBIYWUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsyXToyKmYtaCl9fSksQmFlKGZ1bmN0aW9uIE9LZShjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24o'@;
put 'YSl7dmFyIGQ9TWF0aC5mbG9vcigoKGElPTEpPDA/KythOmEpKmwpO3JldHVybiBIYWUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxdKX19KTt2YXIgSFU9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLE5VPW5l'@;
put 'dyBSZWdFeHAoSFUuc291cmNlLCJnIik7ZnVuY3Rpb24gamFlKGMsbCl7dmFyIGQsaCxmLGE9SFUubGFzdEluZGV4PU5VLmxhc3RJbmRleD0wLF89LTEsVD1bXSxXPVtdO2ZvcihjKz0iIixsKz0iIjsoZD1IVS5leGVjKGMpKSYmKGg9TlUuZXhlYyhsKSk7KShmPWguaW5kZXgpPmEmJihmPWwu'@;
put 'c2xpY2UoYSxmKSxUW19dP1RbX10rPWY6VFsrK19dPWYpLChkPWRbMF0pPT09KGg9aFswXSk/VFtfXT9UW19dKz1oOlRbKytfXT1oOihUWysrX109bnVsbCxXLnB1c2goe2k6Xyx4OkRoKGQsaCl9KSksYT1OVS5sYXN0SW5kZXg7cmV0dXJuIGE8bC5sZW5ndGgmJihmPWwuc2xpY2UoYSksVFtf'@;
put 'XT9UW19dKz1mOlRbKytfXT1mKSxULmxlbmd0aDwyP1dbMF0/ZnVuY3Rpb24gTktlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKSsiIn19KFdbMF0ueCk6ZnVuY3Rpb24gSEtlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0obCk6KGw9Vy5sZW5ndGgsZnVuY3Rpb24o'@;
put 'aWUpe2Zvcih2YXIgd2UscGU9MDtwZTxsOysrcGUpVFsod2U9V1twZV0pLmldPXdlLngoaWUpO3JldHVybiBULmpvaW4oIiIpfSl9ZnVuY3Rpb24gemFlKGMsbCl7dmFyIGE7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgbD9EaDpsIGluc3RhbmNlb2YgR2c/U1Q6KGE9R2cobCkpPyhsPWEsU1Qp'@;
put 'OmphZSkoYyxsKX1mdW5jdGlvbiBWS2UoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIEJLZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIGpLZShjLGwsYSl7'@;
put 'dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIF89PT1oP251bGw6Xz09PWQ/ZjpmPWwoZD1fLGEpfX1mdW5jdGlvbiB6S2UoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPXRoaXMuZ2V0'@;
put 'QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTtyZXR1cm4gXz09PWg/bnVsbDpfPT09ZD9mOmY9bChkPV8sYSl9fWZ1bmN0aW9uIFVLZShjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciBfLFcsVD1hKHRoaXMpO3JldHVybiBudWxsPT1UP3ZvaWQgdGhpcy5yZW1vdmVB'@;
put 'dHRyaWJ1dGUoYyk6KF89dGhpcy5nZXRBdHRyaWJ1dGUoYykpPT09KFc9VCsiIik/bnVsbDpfPT09ZCYmVz09PWg/ZjooaD1XLGY9bChkPV8sVCkpfX1mdW5jdGlvbiBaS2UoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXyxXLFQ9YSh0aGlzKTtyZXR1cm4gbnVsbD09'@;
put 'VD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTooXz10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KFc9VCsiIik/bnVsbDpfPT09ZCYmVz09PWg/ZjooaD1XLGY9bChkPV8sVCkpfX1mdW5jdGlvbiAkS2UoYyxsKXt2YXIgYSxkO2Z1'@;
put 'bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBHS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1y'@;
put 'ZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9uIHFLZShjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIFdLZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0'@;
put 'ZShjLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBYS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtJVSh0aGlzLGMpLmRlbGF5PStsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSktlKGMsbCl7cmV0dXJuIGw9K2wsZnVuY3Rp'@;
put 'b24oKXtJVSh0aGlzLGMpLmRlbGF5PWx9fWZ1bmN0aW9uIGVYZShjLGwpe3JldHVybiBmdW5jdGlvbigpe1RoKHRoaXMsYykuZHVyYXRpb249K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB0WGUoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe1RoKHRoaXMsYykuZHVyYXRp'@;
put 'b249bH19dmFyIG1YZT1ZZy5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gVWFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fXZhciBPWGU9MDtmdW5jdGlvbiBMaChjLGwsYSxkKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWws'@;
put 'dGhpcy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVuY3Rpb24gVlUoYyl7cmV0dXJuIFlnKCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBaYWUoKXtyZXR1cm4rK09YZX12YXIgcjM9WWcucHJvdG90eXBlO0xoLnByb3RvdHlwZT1WVS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkxoLHNlbGVjdDpmdW5j'@;
put 'dGlvbiBwWGUoYyl7dmFyIGw9dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz15VShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7KytfKWZvcih2YXIgcGUsd2UsVD1kW19dLFc9VC5sZW5ndGgs'@;
put 'aWU9ZltfXT1uZXcgQXJyYXkoVyksRWU9MDtFZTxXOysrRWUpKHBlPVRbRWVdKSYmKHdlPWMuY2FsbChwZSxwZS5fX2RhdGFfXyxFZSxUKSkmJigiX19kYXRhX18iaW4gcGUmJih3ZS5fX2RhdGFfXz1wZS5fX2RhdGFfXyksaWVbRWVdPXdlLGdUKGllW0VlXSxsLGEsRWUsaWUsUzIocGUsYSkp'@;
put 'KTtyZXR1cm4gbmV3IExoKGYsdGhpcy5fcGFyZW50cyxsLGEpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gZ1hlKGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9bmFlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1bXSxf'@;
put 'PVtdLFQ9MDtUPGg7KytUKWZvcih2YXIgcGUsVz1kW1RdLGllPVcubGVuZ3RoLHdlPTA7d2U8aWU7Kyt3ZSlpZihwZT1XW3dlXSl7Zm9yKHZhciBaZSxFZT1jLmNhbGwocGUscGUuX19kYXRhX18sd2UsVyksaXQ9UzIocGUsYSksZXQ9MCx5dD1FZS5sZW5ndGg7ZXQ8eXQ7KytldCkoWmU9RWVb'@;
put 'ZXRdKSYmZ1QoWmUsbCxhLGV0LEVlLGl0KTtmLnB1c2goRWUpLF8ucHVzaChwZSl9cmV0dXJuIG5ldyBMaChmLF8sbCxhKX0sc2VsZWN0Q2hpbGQ6cjMuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46cjMuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIGFYZShjKXsiZnVuY3Rpb24i'@;
put 'IT10eXBlb2YgYyYmKGM9cmFlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBXLGY9bFtoXSxfPWYubGVuZ3RoLFQ9ZFtoXT1bXSxpZT0wO2llPF87KytpZSkoVz1mW2llXSkmJmMuY2FsbChXLFcuX19kYXRh'@;
put 'X18saWUsZikmJlQucHVzaChXKTtyZXR1cm4gbmV3IExoKGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gbFhlKGMpe2lmKGMuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMs'@;
put 'ZD1sLmxlbmd0aCxmPU1hdGgubWluKGQsYS5sZW5ndGgpLF89bmV3IEFycmF5KGQpLFQ9MDtUPGY7KytUKWZvcih2YXIgRWUsVz1sW1RdLGllPWFbVF0scGU9Vy5sZW5ndGgsd2U9X1tUXT1uZXcgQXJyYXkocGUpLFplPTA7WmU8cGU7KytaZSkoRWU9V1taZV18fGllW1plXSkmJih3ZVtaZV09'@;
put 'RWUpO2Zvcig7VDxkOysrVClfW1RdPWxbVF07cmV0dXJuIG5ldyBMaChfLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiB2WGUoKXtyZXR1cm4gbmV3IG1YZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rp'@;
put 'b24gTFhlKCl7Zm9yKHZhciBjPXRoaXMuX25hbWUsbD10aGlzLl9pZCxhPVphZSgpLGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBXLF89ZFtmXSxUPV8ubGVuZ3RoLGllPTA7aWU8VDsrK2llKWlmKFc9X1tpZV0pe3ZhciBwZT1TMihXLGwpO2dUKFcsYyxh'@;
put 'LGllLF8se3RpbWU6cGUudGltZStwZS5kZWxheStwZS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnBlLmR1cmF0aW9uLGVhc2U6cGUuZWFzZX0pfXJldHVybiBuZXcgTGgoZCx0aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6cjMuY2FsbCxub2RlczpyMy5ub2Rlcyxub2RlOnIzLm5vZGUsc2l6'@;
put 'ZTpyMy5zaXplLGVtcHR5OnIzLmVtcHR5LGVhY2g6cjMuZWFjaCxvbjpmdW5jdGlvbiBkWGUoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1MyKHRoaXMubm9kZSgpLGEpLm9uLm9uKGMpOnRoaXMuZWFjaChmdW5jdGlvbiB1WGUoYyxsLGEpe3ZhciBkLGgs'@;
put 'Zj1mdW5jdGlvbiBjWGUoYyl7cmV0dXJuKGMrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4T2YoIi4iKTtyZXR1cm4gYT49MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8InN0YXJ0Ij09PWx9KX0obCk/SVU6VGg7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KCl7dmFyIF89Zih0aGlzLGMpLFQ9Xy5vbjtUIT09ZCYmKGg9KGQ9VCkuY29weSgpKS5vbihsLGEpLF8ub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gWUtlKGMsbCl7dmFyIGE9c1QoYyksZD0idHJhbnNmb3JtIj09PWE/RWFlOnphZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgbD8oYS5sb2NhbD9aS2U6VUtlKShhLGQsUlUodGhpcywiYXR0ci4iK2MsbCkpOm51bGw9PWw/KGEubG9jYWw/QktlOlZLZSkoYSk6KGEubG9jYWw/ektlOmpLZSkoYSxkLGwpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIEtLZShjLGwpe3ZhciBhPSJhdHRyLiIrYztpZihh'@;
put 'cmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGE9dGhpcy50d2VlbihhKSkmJmEuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oYSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7dmFyIGQ9c1QoYyk7cmV0dXJuIHRoaXMudHdlZW4oYSwoZC5s'@;
put 'b2NhbD8kS2U6cUtlKShkLGwpKX0sc3R5bGU6ZnVuY3Rpb24gQ1hlKGMsbCxhKXt2YXIgZD0idHJhbnNmb3JtIj09KGMrPSIiKT92S2U6emFlO3JldHVybiBudWxsPT1sP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIF9YZShjLGwpe3ZhciBhLGQsaDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIg'@;
put 'Zj1ZNyh0aGlzLGMpLF89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksWTcodGhpcyxjKSk7cmV0dXJuIGY9PT1fP251bGw6Zj09PWEmJl89PT1kP2g6aD1sKGE9ZixkPV8pfX0oYyxkKSkub24oImVuZC5zdHlsZS4iK2MsVWFlKGMpKToiZnVuY3Rpb24iPT10eXBlb2YgbD90aGlzLnN0'@;
put 'eWxlVHdlZW4oYyxmdW5jdGlvbiB5WGUoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz1ZNyh0aGlzLGMpLFQ9YSh0aGlzKSxXPVQrIiI7cmV0dXJuIG51bGw9PVQmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLFc9VD1ZNyh0aGlzLGMpKSxfPT09Vz9udWxs'@;
put 'Ol89PT1kJiZXPT09aD9mOihoPVcsZj1sKGQ9XyxUKSl9fShjLGQsUlUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiB3WGUoYyxsKXt2YXIgYSxkLGgsVCxmPSJzdHlsZS4iK2wsXz0iZW5kLiIrZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgVz1UaCh0aGlzLGMpLGllPVcub24s'@;
put 'cGU9bnVsbD09Vy52YWx1ZVtmXT9UfHwoVD1VYWUobCkpOnZvaWQgMDsoaWUhPT1hfHxoIT09cGUpJiYoZD0oYT1pZSkuY29weSgpKS5vbihfLGg9cGUpLFcub249ZH19KHRoaXMuX2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBiWGUoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3Jl'@;
put 'dHVybiBmdW5jdGlvbigpe3ZhciBfPVk3KHRoaXMsYyk7cmV0dXJuIF89PT1oP251bGw6Xz09PWQ/ZjpmPWwoZD1fLGEpfX0oYyxkLGwpLGEpLm9uKCJlbmQuc3R5bGUuIitjLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIHhYZShjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIiKTtpZihh'@;
put 'cmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGQ9dGhpcy50d2VlbihkKSkmJmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiBNWGUoYyxs'@;
put 'LGEpe3ZhciBkLGg7ZnVuY3Rpb24gZigpe3ZhciBfPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBfIT09aCYmKGQ9KGg9XykmJmZ1bmN0aW9uIFNYZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxhKX19KGMs'@;
put 'XyxhKSksZH1yZXR1cm4gZi5fdmFsdWU9bCxmfShjLGwsYT8/IiIpKX0sdGV4dDpmdW5jdGlvbiBBWGUoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIGtYZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3RoaXMudGV4'@;
put 'dENvbnRlbnQ9bD8/IiJ9fShSVSh0aGlzLCJ0ZXh0IixjKSk6ZnVuY3Rpb24gRVhlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6YysiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gSVhlKGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVu'@;
put 'Z3RoPDEpcmV0dXJuKGw9dGhpcy50d2VlbihsKSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obCxmdW5jdGlvbiBEWGUoYyl7dmFyIGwsYTtmdW5j'@;
put 'dGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYobD0oYT1oKSYmZnVuY3Rpb24gVFhlKGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlzLnRleHRDb250ZW50PWMuY2FsbCh0aGlzLGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxy'@;
put 'ZW1vdmU6ZnVuY3Rpb24gZlhlKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uIGhYZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBhIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVD'@;
put 'aGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIHlLZShjLGwpe3ZhciBhPXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBfLGQ9UzIodGhpcy5ub2RlKCksYSkudHdlZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigoXz1kW2hdKS5u'@;
put 'YW1lPT09YylyZXR1cm4gXy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP19LZTpiS2UpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIFFLZShjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBjP1hLZTpKS2UpKGwsYykpOlMyKHRoaXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBuWGUoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9lWGU6dFhlKShsLGMpKTpTMih0aGlz'@;
put 'Lm5vZGUoKSxsKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBpWGUoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIHJYZShjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24o'@;
put 'KXtUaCh0aGlzLGMpLmVhc2U9bH19KGwsYykpOlMyKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uIHNYZShjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBvWGUoYyxsKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7VGgodGhpcyxjKS5lYXNlPWF9fSh0aGlzLl9pZCxjKSl9LGVuZDpmdW5jdGlvbiBSWGUoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7'@;
put 'cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGYsXyl7dmFyIFQ9e3ZhbHVlOl99LFc9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2YXIgaWU9VGgodGhpcyxkKSxwZT1pZS5vbjtwZSE9PWMmJigobD0oYz1wZSkuY29weSgpKS5fLmNhbmNlbC5w'@;
put 'dXNoKFQpLGwuXy5pbnRlcnJ1cHQucHVzaChUKSxsLl8uZW5kLnB1c2goVykpLGllLm9uPWx9KSwwPT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOnIzW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBGWGU9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIFBY'@;
put 'ZShjKXtyZXR1cm4oKGMqPTIpPD0xP2MqYypjOihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIEhYZShjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVtsXSk7KWlmKCEoYz1jLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBm'@;
put 'b3VuZGApO3JldHVybiBhfVlnLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gcEtlKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttVCh0aGlzLGMpfSl9LFlnLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIE5YZShjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiBMaD8obD1j'@;
put 'Ll9pZCxjPWMuX25hbWUpOihsPVphZSgpLChhPUZYZSkudGltZT1FVSgpLGM9bnVsbD09Yz9udWxsOmMrIiIpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilmb3IodmFyIFcsXz1kW2ZdLFQ9Xy5sZW5ndGgsaWU9MDtpZTxUOysraWUpKFc9X1tpZV0pJiZn'@;
put 'VChXLGMsbCxpZSxfLGF8fEhYZShXLGwpKTtyZXR1cm4gbmV3IExoKGQsdGhpcy5fcGFyZW50cyxjLGwpfTt2YXIgVlhlPVtudWxsXTtjb25zdCBCVT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiBqVShjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFn'@;
put 'YXRpb24oKX1mdW5jdGlvbiBZYWUoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKSsxL2MpLzJ9Y29uc3QgV1hlPWZ1bmN0aW9uIGMobCxhLGQpe2Z1bmN0aW9uIGgoZixfKXt2YXIgeXQsRXQsVD1mWzBdLFc9ZlsxXSxpZT1mWzJdLEVlPV9bMl0sWmU9X1swXS1ULGl0PV9bMV0tVyxldD1aZSpa'@;
put 'ZStpdCppdDtpZihldDwxZS0xMilFdD1NYXRoLmxvZyhFZS9pZSkvbCx5dD1mdW5jdGlvbihjcil7cmV0dXJuW1QrY3IqWmUsVytjcippdCxpZSpNYXRoLmV4cChsKmNyKkV0KV19O2Vsc2V7dmFyIFN0PU1hdGguc3FydChldCksSnQ9KEVlKkVlLWllKmllK2QqZXQpLygyKmllKmEqU3QpLG5u'@;
put 'PShFZSpFZS1pZSppZS1kKmV0KS8oMipFZSphKlN0KSx2bj1NYXRoLmxvZyhNYXRoLnNxcnQoSnQqSnQrMSktSnQpLE5uPU1hdGgubG9nKE1hdGguc3FydChubipubisxKS1ubik7RXQ9KE5uLXZuKS9sLHl0PWZ1bmN0aW9uKGNyKXt2YXIgSXI9Y3IqRXQsRWk9WWFlKHZuKSxJaT1pZS8oYSpT'@;
put 'dCkqKEVpKmZ1bmN0aW9uIFlYZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoMipjKSktMSkvKGMrMSl9KGwqSXIrdm4pLWZ1bmN0aW9uIFpYZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoYykpLTEvYykvMn0odm4pKTtyZXR1cm5bVCtJaSpaZSxXK0lpKml0LGllKkVpL1lhZShsKklyK3ZuKV19fXJl'@;
put 'dHVybiB5dC5kdXJhdGlvbj0xZTMqRXQqbC9NYXRoLlNRUlQyLHl0fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIgXz1NYXRoLm1heCguMDAxLCtmKSxUPV8qXztyZXR1cm4gYyhfLFQsVCpUKX0saH0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9uIEtnKGMsbCl7aWYoYz1mdW5jdGlvbiBH'@;
put 'WGUoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNlRXZlbnQ7KWM9bDtyZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5jdXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZHRWxlbWVudHx8bDtpZihhLmNyZWF0ZVNWR1BvaW50KXt2YXIgZD1hLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJu'@;
put 'IGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50WSxbKGQ9ZC5tYXRyaXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBoPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1o'@;
put 'LmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50WS1oLnRvcC1sLmNsaWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFnZVldfWNvbnN0IE1UPWM9PigpPT5jO2Z1bmN0aW9uICRYZShjLHtzb3VyY2VFdmVudDpsLHRhcmdldDphLHRyYW5zZm9ybTpkLGRpc3BhdGNoOmh9KXtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0'@;
put 'cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rpb24gaTMoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRoaXMueT1hfWkzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aTMsc2NhbGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9'@;
put 'PT1jP3RoaXM6bmV3IGkzKHRoaXMuaypjLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gMD09PWMmMD09PWw/dGhpczpuZXcgaTModGhpcy5rLHRoaXMueCt0aGlzLmsqYyx0aGlzLnkrdGhpcy5rKmwpfSxhcHBseTpmdW5jdGlvbihjKXtyZXR1cm5bY1sw'@;
put 'XSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGMpe3JldHVyblsoY1swXS10aGlzLngpL3Ro'@;
put 'aXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5y'@;
put 'YW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoYy5pbnZlcnQsYykpfSx0b1N0cmluZzpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgeFQ9bmV3IGkzKDEsMCwwKTtmdW5jdGlvbiBFVChjKXtmb3IoOyFjLl9fem9vbTspaWYoIShjPWMucGFyZW50Tm9kZSkpcmV0dXJuIHhUO3JldHVybiBjLl9fem9vbX1mdW5jdGlv'@;
put 'biB6VShjKXtjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHZ3KGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHFYZShjKXtyZXR1cm4hKGMuY3RybEtleSYmIndoZWVsIiE9PWMudHlwZXx8Yy5idXR0b24pfWZ1'@;
put 'bmN0aW9uIEtYZSgpe3ZhciBjPXRoaXM7cmV0dXJuIGMgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhjPWMub3duZXJTVkdFbGVtZW50fHxjKS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyhjPWMudmlld0JveC5iYXNlVmFsKS54LGMueV0sW2MueCtjLndpZHRoLGMueStjLmhlaWdodF1dOltb'@;
put 'MCwwXSxbYy53aWR0aC5iYXNlVmFsLnZhbHVlLGMuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW2MuY2xpZW50V2lkdGgsYy5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBXYWUoKXtyZXR1cm4gdGhpcy5fX3pvb218fHhUfWZ1bmN0aW9uIFhYZShjKXtyZXR1cm4tYy5kZWx0YVkqKDE9'@;
put 'PT1jLmRlbHRhTW9kZT8uMDU6Yy5kZWx0YU1vZGU/MTouMDAyKSooYy5jdHJsS2V5PzEwOjEpfWZ1bmN0aW9uIEpYZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBRWGUoYyxsLGEpe3ZhciBkPWMuaW52ZXJ0WChsWzBd'@;
put 'WzBdKS1hWzBdWzBdLGg9Yy5pbnZlcnRYKGxbMV1bMF0pLWFbMV1bMF0sZj1jLmludmVydFkobFswXVsxXSktYVswXVsxXSxfPWMuaW52ZXJ0WShsWzFdWzFdKS1hWzFdWzFdO3JldHVybiBjLnRyYW5zbGF0ZShoPmQ/KGQraCkvMjpNYXRoLm1pbigwLGQpfHxNYXRoLm1heCgwLGgpLF8+Zj8o'@;
put 'ZitfKS8yOk1hdGgubWluKDAsZil8fE1hdGgubWF4KDAsXykpfWZ1bmN0aW9uIEdhZShjKXt2YXIgbD17fSxhPWMubm9kZSgpLm5vZGVOYW1lO2wudGFnPWEsIiN0ZXh0Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbC5hdHRyaWJ1dGVz'@;
put 'PXt9O3ZhciBkPWMubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZClmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl7dmFyIGY9ZFtoXTtsLmF0dHJpYnV0ZXNbZi5uYW1lXT1mLnZhbHVlfXZhciBwZSxXPWMubm9kZSgpLnRyYW5zZm9ybTtpZihXJiYwIT1XLmJhc2VWYWwubnVtYmVyT2ZJdGVtcyl7'@;
put 'dmFyIGllPVcuYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeDtsLnRyYW5zbGF0aW9uPXt4OmllLmUseTppZS5mfSxsLnNjYWxlPWllLmF9aWYoImVsbGlwc2UiPT1hJiYobC5jZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4LHk6bC5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2YXIg'@;
put 'd2U9KHBlPWMuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuc3BsaXQoIiwiKVswXX0pLEVlPXBlLm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMV19KSxaZT1NYXRoLm1pbi5hcHBseShudWxsLHdlKSxpdD1NYXRoLm1h'@;
put 'eC5hcHBseShudWxsLHdlKSxldD1NYXRoLm1pbi5hcHBseShudWxsLEVlKSx5dD1NYXRoLm1heC5hcHBseShudWxsLEVlKTtsLmJib3g9e3g6WmUseTpldCx3aWR0aDppdC1aZSxoZWlnaHQ6eXQtZXR9LGwuY2VudGVyPXt4OihaZStpdCkvMix5OihldCt5dCkvMn19InBhdGgiPT1hJiYoKHBl'@;
put 'PWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKSx3ZT1wZS5tYXAoZnVuY3Rpb24oZnIpe3JldHVybitmci5zcGxpdCgiLCIpWzBdfSksRWU9cGUubWFwKGZ1bmN0aW9uKGZyKXtyZXR1cm4rZnIuc3BsaXQoIiwiKVsxXX0pLFplPU1hdGgubWluLmFwcGx5KG51bGwsd2UpLGl0'@;
put 'PU1hdGgubWF4LmFwcGx5KG51bGwsd2UpLGV0PU1hdGgubWluLmFwcGx5KG51bGwsRWUpLHl0PU1hdGgubWF4LmFwcGx5KG51bGwsRWUpLGwuYmJveD17eDpaZSx5OmV0LHdpZHRoOml0LVplLGhlaWdodDp5dC1ldH0sbC5jZW50ZXI9e3g6KFplK2l0KS8yLHk6KGV0K3l0KS8yfSxsLnRvdGFs'@;
put 'TGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3JldHVybiJ0ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigieCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsfWZ1bmN0aW9u'@;
put 'IFhnKGMpe3ZhciBsPUdhZShjKTtyZXR1cm4gbC5jaGlsZHJlbj1bXSxNVShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9WGcoa3ModGhpcykpO2QucGFyZW50PWwsbC5jaGlsZHJlbi5wdXNoKGQpfSksbH1mdW5jdGlvbiBVVShjKXtyZXR1cm4iI3RleHQiPT1j'@;
put 'LnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiBaVShjKXt2YXIg'@;
put 'bD1VVShjKSxhPWtzKGwpLGQ9Yy5hdHRyaWJ1dGVzO2Zvcih2YXIgaCBvZiBPYmplY3Qua2V5cyhkKSlhLmF0dHIoaCxkW2hdKTtyZXR1cm4gbH1mdW5jdGlvbiAkYWUoYyxsKXt2YXIgYT1rcyhjLm5vZGUoKS5wYXJlbnROb2RlKSxkPVpVKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gZH0sZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxofWZ1bmN0aW9uIFlVKGMsbCl7IWZ1bmN0aW9uIHRKZShjLGwpe2MuZGF0dW0obCksYy5kYXRhKFtsXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9KX0oYyxsKSxNVShjLm5vZGUoKS5jaGlsZE5v'@;
put 'ZGVzKS5lYWNoKGZ1bmN0aW9uKGQsaCl7WVUoa3ModGhpcyksbC5jaGlsZHJlbltoXSl9KX1mdW5jdGlvbiBfdyhjLGw9MCl7dmFyIGE9a3ModGhpcyksaD1jLmF0dHJpYnV0ZXMsZj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciBfPTA7XzxmLmxlbmd0aDtfKyspe3ZhciBUPWZb'@;
put 'X10sVz1ULm5hbWU7aWYoInhtbG5zIiE9Vy5zcGxpdCgiOiIpWzBdJiZULm5hbWVzcGFjZVVSSSl7dmFyIGllPVQubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7Vz1pZVtpZS5sZW5ndGgtMV0rIjoiK1d9VyBpbiBofHwoaFtXXT1udWxsKX1mb3IodmFyIHdlIG9mIE9iamVjdC5rZXlzKGgpKWEu'@;
put 'YXR0cih3ZSxoW3dlXSk7Yy50ZXh0JiZhLnRleHQoYy50ZXh0KSxmdW5jdGlvbiBuSmUoYyxsKXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKS5jaGlsZE5vZGVzfSksZD0oYT1hLmRhdGEoZnVuY3Rpb24oXyl7cmV0dXJuIF8uY2hpbGRyZW59LGZ1bmN0aW9u'@;
put 'KF8pe3JldHVybiBfLnRhZysiLSIrbH0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihfKXtyZXR1cm4gVVUoXyl9KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2UoYSk7dmFyIGY9e307YS5lYWNoKGZ1bmN0aW9uKF8pe3ZhciBUPV8udGFnO251bGw9PWZbVF0mJihmW1RdPTAp'@;
put 'O3ZhciBXPWZbVF0rKztfdy5jYWxsKHRoaXMsXyxXKX0pfShhLGwpfWZ1bmN0aW9uIHFhZShjLGwpe3ZhciBfLGE9bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3RoKTowLGg9bmV3IEFycmF5KGQpLGY9bmV3IEFycmF5KGEpO2ZvcihfPTA7XzxkOysrXyloW19dPWtUKGNbX10s'@;
put 'bFtfXSk7Zm9yKDtfPGE7KytfKWZbX109bFtfXTtyZXR1cm4gZnVuY3Rpb24oVCl7Zm9yKF89MDtfPGQ7KytfKWZbX109aFtfXShUKTtyZXR1cm4gZn19ZnVuY3Rpb24gckplKGMsbCl7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1l'@;
put 'KGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiBpSmUoYyxsKXt2YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVsbD09PWx8fCJvYmplY3QiIT10eXBlb2YgbCkmJihsPXt9KSxsKWggaW4gYz9hW2hdPWtUKGNbaF0sbFtoXSk6'@;
put 'ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaCBpbiBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVuY3Rpb24gb0plKGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk6MCxkPWwuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9y'@;
put 'KGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1mKStsW2hdKmY7cmV0dXJuIGR9fWZ1bmN0aW9uIGtUKGMsbCl7dmFyIGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xlYW4iPT09YT9GVShsKTooIm51bWJlciI9PT1hP0RoOiJzdHJpbmciPT09YT8oZD1HZyhsKSk/KGw9ZCxTVCk6'@;
put 'amFlOmwgaW5zdGFuY2VvZiBHZz9TVDpsIGluc3RhbmNlb2YgRGF0ZT9ySmU6ZnVuY3Rpb24gc0plKGMpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYykmJiEoYyBpbnN0YW5jZW9mIERhdGFWaWV3KX0obCk/b0plOkFycmF5LmlzQXJyYXkobCk/cWFlOiJmdW5jdGlvbiIhPXR5cGVvZiBs'@;
put 'LnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBsLnRvU3RyaW5nfHxpc05hTihsKT9pSmU6RGgpKGMsbCl9ZnVuY3Rpb24gS2FlKCl7dmFyIGM9dGhpcyxkPWtzKHRoaXMuX3NlbGVjdGlvbi5ub2RlKCkucXVlcnlTZWxlY3Rvcigic3ZnIikpO2lmKDA9PWQuc2l6ZSgpKXJldHVybiB0aGlz'@;
put 'O3RoaXMuX3pvb21TZWxlY3Rpb249ZDt2YXIgaD1mdW5jdGlvbiBlSmUoKXt2YXIgcGUsd2UsRWUsYz1xWGUsbD1LWGUsYT1RWGUsZD1YWGUsaD1KWGUsZj1bMCwxLzBdLF89W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sVD0yNTAsVz1XWGUsaWU9eFUoInN0YXJ0Iiwiem9vbSIsImVuZCIpLFpl'@;
put 'PTUwMCxpdD0xNTAsZXQ9MCx5dD0xMDtmdW5jdGlvbiBFdChPbil7T24ucHJvcGVydHkoIl9fem9vbSIsV2FlKS5vbigid2hlZWwuem9vbSIsSXIse3Bhc3NpdmU6ITF9KS5vbigibW91c2Vkb3duLnpvb20iLEVpKS5vbigiZGJsY2xpY2suem9vbSIsSWkpLmZpbHRlcihoKS5vbigidG91Y2hz'@;
put 'dGFydC56b29tIixmcikub24oInRvdWNobW92ZS56b29tIixpaSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsanIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gU3QoT24sRnIpe3JldHVybihGcj1NYXRo'@;
put 'Lm1heChmWzBdLE1hdGgubWluKGZbMV0sRnIpKSk9PT1Pbi5rP09uOm5ldyBpMyhGcixPbi54LE9uLnkpfWZ1bmN0aW9uIEp0KE9uLEZyLFFuKXt2YXIgTXI9RnJbMF0tUW5bMF0qT24uayxfcj1GclsxXS1RblsxXSpPbi5rO3JldHVybiBNcj09PU9uLngmJl9yPT09T24ueT9PbjpuZXcgaTMo'@;
put 'T24uayxNcixfcil9ZnVuY3Rpb24gbm4oT24pe3JldHVyblsoK09uWzBdWzBdKyArT25bMV1bMF0pLzIsKCtPblswXVsxXSsgK09uWzFdWzFdKS8yXX1mdW5jdGlvbiB2bihPbixGcixRbixNcil7T24ub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7Tm4odGhpcyxhcmd1bWVudHMpLmV2ZW50'@;
put 'KE1yKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe05uKHRoaXMsYXJndW1lbnRzKS5ldmVudChNcikuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgX3I9dGhpcyx2dD1hcmd1bWVudHMsT3Q9Tm4oX3IsdnQpLmV2ZW50KE1yKSxj'@;
put 'bj1sLmFwcGx5KF9yLHZ0KSxFbj1udWxsPT1Rbj9ubihjbik6ImZ1bmN0aW9uIj09dHlwZW9mIFFuP1FuLmFwcGx5KF9yLHZ0KTpRbixQbj1NYXRoLm1heChjblsxXVswXS1jblswXVswXSxjblsxXVsxXS1jblswXVsxXSksSm49X3IuX196b29tLFByPSJmdW5jdGlvbiI9PXR5cGVvZiBGcj9G'@;
put 'ci5hcHBseShfcix2dCk6RnIsT3I9VyhKbi5pbnZlcnQoRW4pLmNvbmNhdChQbi9Kbi5rKSxQci5pbnZlcnQoRW4pLmNvbmNhdChQbi9Qci5rKSk7cmV0dXJuIGZ1bmN0aW9uKCRyKXtpZigxPT09JHIpJHI9UHI7ZWxzZXt2YXIgWXI9T3IoJHIpLE5yPVBuL1lyWzJdOyRyPW5ldyBpMyhOcixF'@;
put 'blswXS1ZclswXSpOcixFblsxXS1ZclsxXSpOcil9T3Quem9vbShudWxsLCRyKX19KX1mdW5jdGlvbiBObihPbixGcixRbil7cmV0dXJuIVFuJiZPbi5fX3pvb21pbmd8fG5ldyBjcihPbixGcil9ZnVuY3Rpb24gY3IoT24sRnIpe3RoaXMudGhhdD1Pbix0aGlzLmFyZ3M9RnIsdGhpcy5hY3Rp'@;
put 'dmU9MCx0aGlzLnNvdXJjZUV2ZW50PW51bGwsdGhpcy5leHRlbnQ9bC5hcHBseShPbixGciksdGhpcy50YXBzPTB9ZnVuY3Rpb24gSXIoT24sLi4uRnIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUW49Tm4odGhpcyxGcikuZXZlbnQoT24pLE1yPXRoaXMuX196b29tLF9yPU1h'@;
put 'dGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxNci5rKk1hdGgucG93KDIsZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksdnQ9S2coT24pO2lmKFFuLndoZWVsKShRbi5tb3VzZVswXVswXSE9PXZ0WzBdfHxRbi5tb3VzZVswXVsxXSE9PXZ0WzFdKSYmKFFuLm1vdXNlWzFdPU1yLmludmVydChR'@;
put 'bi5tb3VzZVswXT12dCkpLGNsZWFyVGltZW91dChRbi53aGVlbCk7ZWxzZXtpZihNci5rPT09X3IpcmV0dXJuO1FuLm1vdXNlPVt2dCxNci5pbnZlcnQodnQpXSxtVCh0aGlzKSxRbi5zdGFydCgpfXZ3KE9uKSxRbi53aGVlbD1zZXRUaW1lb3V0KGZ1bmN0aW9uIE90KCl7UW4ud2hlZWw9bnVs'@;
put 'bCxRbi5lbmQoKX0saXQpLFFuLnpvb20oIm1vdXNlIixhKEp0KFN0KE1yLF9yKSxRbi5tb3VzZVswXSxRbi5tb3VzZVsxXSksUW4uZXh0ZW50LF8pKX19ZnVuY3Rpb24gRWkoT24sLi4uRnIpe2lmKCFFZSYmYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBRbj1Pbi5jdXJyZW50VGFyZ2V0'@;
put 'LE1yPU5uKHRoaXMsRnIsITApLmV2ZW50KE9uKSxfcj1rcyhPbi52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uIEVuKEpuKXtpZih2dyhKbiksIU1yLm1vdmVkKXt2YXIgUHI9Sm4uY2xpZW50WC1PdCxPcj1Kbi5jbGllbnRZLWNuO01yLm1vdmVkPVByKlByK09yKk9yPmV0fU1y'@;
put 'LmV2ZW50KEpuKS56b29tKCJtb3VzZSIsYShKdChNci50aGF0Ll9fem9vbSxNci5tb3VzZVswXT1LZyhKbixRbiksTXIubW91c2VbMV0pLE1yLmV4dGVudCxfKSl9LCEwKS5vbigibW91c2V1cC56b29tIixmdW5jdGlvbiBQbihKbil7X3Iub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9v'@;
put 'bSIsbnVsbCksZnVuY3Rpb24gelhlKGMsbCl7dmFyIGE9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZD1rcyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2wmJihkLm9uKCJjbGljay5kcmFnIixqVSxCVSksc2V0VGltZW91dChmdW5jdGlvbigpe2Qub24oImNsaWNrLmRyYWciLG51'@;
put 'bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gYT9kLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooYS5zdHlsZS5Nb3pVc2VyU2VsZWN0PWEuX19ub3NlbGVjdCxkZWxldGUgYS5fX25vc2VsZWN0KX0oSm4udmlldyxNci5tb3ZlZCksdncoSm4pLE1yLmV2ZW50KEpuKS5lbmQoKX0sITAp'@;
put 'LHZ0PUtnKE9uLFFuKSxPdD1Pbi5jbGllbnRYLGNuPU9uLmNsaWVudFk7KGZ1bmN0aW9uIGpYZShjKXt2YXIgbD1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWtzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsalUsQlUpOyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQu'@;
put 'ZHJhZyIsalUsQlUpOihsLl9fbm9zZWxlY3Q9bC5zdHlsZS5Nb3pVc2VyU2VsZWN0LGwuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSkoT24udmlldykselUoT24pLE1yLm1vdXNlPVt2dCx0aGlzLl9fem9vbS5pbnZlcnQodnQpXSxtVCh0aGlzKSxNci5zdGFydCgpfX1mdW5jdGlvbiBJ'@;
put 'aShPbiwuLi5Gcil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBRbj10aGlzLl9fem9vbSxNcj1LZyhPbi5jaGFuZ2VkVG91Y2hlcz9Pbi5jaGFuZ2VkVG91Y2hlc1swXTpPbix0aGlzKSxfcj1Rbi5pbnZlcnQoTXIpLE90PWEoSnQoU3QoUW4sUW4uayooT24uc2hpZnRLZXk/LjU6'@;
put 'MikpLE1yLF9yKSxsLmFwcGx5KHRoaXMsRnIpLF8pO3Z3KE9uKSxUPjA/a3ModGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKFQpLmNhbGwodm4sT3QsTXIsT24pOmtzKHRoaXMpLmNhbGwoRXQudHJhbnNmb3JtLE90LE1yLE9uKX19ZnVuY3Rpb24gZnIoT24sLi4uRnIpe2lmKGMuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpKXt2YXIgdnQsT3QsY24sRW4sUW49T24udG91Y2hlcyxNcj1Rbi5sZW5ndGgsX3I9Tm4odGhpcyxGcixPbi5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1NcikuZXZlbnQoT24pO2Zvcih6VShPbiksT3Q9MDtPdDxNcjsrK090KUVuPVtFbj1LZyhjbj1RbltPdF0sdGhp'@;
put 'cyksdGhpcy5fX3pvb20uaW52ZXJ0KEVuKSxjbi5pZGVudGlmaWVyXSxfci50b3VjaDA/IV9yLnRvdWNoMSYmX3IudG91Y2gwWzJdIT09RW5bMl0mJihfci50b3VjaDE9RW4sX3IudGFwcz0wKTooX3IudG91Y2gwPUVuLHZ0PSEwLF9yLnRhcHM9MSshIXBlKTtwZSYmKHBlPWNsZWFyVGltZW91'@;
put 'dChwZSkpLHZ0JiYoX3IudGFwczwyJiYod2U9RW5bMF0scGU9c2V0VGltZW91dChmdW5jdGlvbigpe3BlPW51bGx9LFplKSksbVQodGhpcyksX3Iuc3RhcnQoKSl9fWZ1bmN0aW9uIGlpKE9uLC4uLkZyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHZ0LE90LGNuLEVuLFFuPU5uKHRoaXMsRnIp'@;
put 'LmV2ZW50KE9uKSxNcj1Pbi5jaGFuZ2VkVG91Y2hlcyxfcj1Nci5sZW5ndGg7Zm9yKHZ3KE9uKSx2dD0wO3Z0PF9yOysrdnQpY249S2coT3Q9TXJbdnRdLHRoaXMpLFFuLnRvdWNoMCYmUW4udG91Y2gwWzJdPT09T3QuaWRlbnRpZmllcj9Rbi50b3VjaDBbMF09Y246UW4udG91Y2gxJiZRbi50'@;
put 'b3VjaDFbMl09PT1PdC5pZGVudGlmaWVyJiYoUW4udG91Y2gxWzBdPWNuKTtpZihPdD1Rbi50aGF0Ll9fem9vbSxRbi50b3VjaDEpe3ZhciBQbj1Rbi50b3VjaDBbMF0sSm49UW4udG91Y2gwWzFdLFByPVFuLnRvdWNoMVswXSxPcj1Rbi50b3VjaDFbMV0sJHI9KCRyPVByWzBdLVBuWzBdKSok'@;
put 'cisoJHI9UHJbMV0tUG5bMV0pKiRyLFlyPShZcj1PclswXS1KblswXSkqWXIrKFlyPU9yWzFdLUpuWzFdKSpZcjtPdD1TdChPdCxNYXRoLnNxcnQoJHIvWXIpKSxjbj1bKFBuWzBdK1ByWzBdKS8yLChQblsxXStQclsxXSkvMl0sRW49WyhKblswXStPclswXSkvMiwoSm5bMV0rT3JbMV0pLzJd'@;
put 'fWVsc2V7aWYoIVFuLnRvdWNoMClyZXR1cm47Y249UW4udG91Y2gwWzBdLEVuPVFuLnRvdWNoMFsxXX1Rbi56b29tKCJ0b3VjaCIsYShKdChPdCxjbixFbiksUW4uZXh0ZW50LF8pKX19ZnVuY3Rpb24ganIoT24sLi4uRnIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdnQsT3QsUW49Tm4odGhp'@;
put 'cyxGcikuZXZlbnQoT24pLE1yPU9uLmNoYW5nZWRUb3VjaGVzLF9yPU1yLmxlbmd0aDtmb3IoelUoT24pLEVlJiZjbGVhclRpbWVvdXQoRWUpLEVlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtFZT1udWxsfSxaZSksdnQ9MDt2dDxfcjsrK3Z0KU90PU1yW3Z0XSxRbi50b3VjaDAmJlFuLnRvdWNo'@;
put 'MFsyXT09PU90LmlkZW50aWZpZXI/ZGVsZXRlIFFuLnRvdWNoMDpRbi50b3VjaDEmJlFuLnRvdWNoMVsyXT09PU90LmlkZW50aWZpZXImJmRlbGV0ZSBRbi50b3VjaDE7aWYoUW4udG91Y2gxJiYhUW4udG91Y2gwJiYoUW4udG91Y2gwPVFuLnRvdWNoMSxkZWxldGUgUW4udG91Y2gxKSxRbi50'@;
put 'b3VjaDApUW4udG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChRbi50b3VjaDBbMF0pO2Vsc2UgaWYoUW4uZW5kKCksMj09PVFuLnRhcHMmJihPdD1LZyhPdCx0aGlzKSxNYXRoLmh5cG90KHdlWzBdLU90WzBdLHdlWzFdLU90WzFdKTx5dCkpe3ZhciBjbj1rcyh0aGlzKS5vbigiZGJsY2xp'@;
put 'Y2suem9vbSIpO2NuJiZjbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gRXQudHJhbnNmb3JtPWZ1bmN0aW9uKE9uLEZyLFFuLE1yKXt2YXIgX3I9T24uc2VsZWN0aW9uP09uLnNlbGVjdGlvbigpOk9uO19yLnByb3BlcnR5KCJfX3pvb20iLFdhZSksT24hPT1fcj92bihPbixGcixR'@;
put 'bixNcik6X3IuaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe05uKHRoaXMsYXJndW1lbnRzKS5ldmVudChNcikuc3RhcnQoKS56b29tKG51bGwsImZ1bmN0aW9uIj09dHlwZW9mIEZyP0ZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGcikuZW5kKCl9KX0sRXQuc2NhbGVCeT1mdW5jdGlvbihP'@;
put 'bixGcixRbixNcil7RXQuc2NhbGVUbyhPbixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2YgRnI/RnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkZyKX0sUW4sTXIpfSxFdC5zY2FsZVRvPWZ1bmN0aW9uKE9uLEZyLFFuLE1yKXtFdC50cmFuc2Zvcm0o'@;
put 'T24sZnVuY3Rpb24oKXt2YXIgX3I9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdnQ9dGhpcy5fX3pvb20sT3Q9bnVsbD09UW4/bm4oX3IpOiJmdW5jdGlvbiI9PXR5cGVvZiBRbj9Rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UW4sY249dnQuaW52ZXJ0KE90KSxFbj0iZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgRnI/RnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkZyO3JldHVybiBhKEp0KFN0KHZ0LEVuKSxPdCxjbiksX3IsXyl9LFFuLE1yKX0sRXQudHJhbnNsYXRlQnk9ZnVuY3Rpb24oT24sRnIsUW4sTXIpe0V0LnRyYW5zZm9ybShPbixmdW5jdGlvbigpe3JldHVybiBhKHRoaXMuX196b29tLnRy'@;
put 'YW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgRnI/RnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkZyLCJmdW5jdGlvbiI9PXR5cGVvZiBRbj9Rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UW4pLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpLF8pfSxudWxsLE1yKX0sRXQudHJhbnNsYXRlVG89ZnVu'@;
put 'Y3Rpb24oT24sRnIsUW4sTXIsX3Ipe0V0LnRyYW5zZm9ybShPbixmdW5jdGlvbigpe3ZhciB2dD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxPdD10aGlzLl9fem9vbSxjbj1udWxsPT1Ncj9ubih2dCk6ImZ1bmN0aW9uIj09dHlwZW9mIE1yP01yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpNcjty'@;
put 'ZXR1cm4gYSh4VC50cmFuc2xhdGUoY25bMF0sY25bMV0pLnNjYWxlKE90LmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgRnI/LUZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRnIsImZ1bmN0aW9uIj09dHlwZW9mIFFuPy1Rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LVFuKSx2dCxf'@;
put 'KX0sTXIsX3IpfSxjci5wcm90b3R5cGU9e2V2ZW50OmZ1bmN0aW9uKE9uKXtyZXR1cm4gT24mJih0aGlzLnNvdXJjZUV2ZW50PU9uKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3Rh'@;
put 'cnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihPbixGcil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT1PbiYmKHRoaXMubW91c2VbMV09RnIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PU9uJiYodGhpcy50b3VjaDBbMV09RnIuaW52ZXJ0KHRoaXMu'@;
put 'dG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT1PbiYmKHRoaXMudG91Y2gxWzFdPUZyLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209RnIsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUm'@;
put 'JihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKE9uKXt2YXIgRnI9a3ModGhpcy50aGF0KS5kYXR1bSgpO2llLmNhbGwoT24sdGhpcy50aGF0LG5ldyAkWGUoT24se3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFy'@;
put 'Z2V0OkV0LHR5cGU6T24sdHJhbnNmb3JtOnRoaXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6aWV9KSxGcil9fSxFdC53aGVlbERlbHRhPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246TVQoK09uKSxFdCk6ZH0sRXQuZmlsdGVy'@;
put 'PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246TVQoISFPbiksRXQpOmN9LEV0LnRvdWNoYWJsZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOk1UKCEh'@;
put 'T24pLEV0KTpofSxFdC5leHRlbnQ9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpNVChbWytPblswXVswXSwrT25bMF1bMV1dLFsrT25bMV1bMF0sK09uWzFdWzFdXV0pLEV0KTpsfSxFdC5zY2FsZUV4dGVudD1mdW5jdGlv'@;
put 'bihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K09uWzBdLGZbMV09K09uWzFdLEV0KTpbZlswXSxmWzFdXX0sRXQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oX1swXVswXT0rT25bMF1bMF0sX1sxXVswXT0rT25bMV1bMF0s'@;
put 'X1swXVsxXT0rT25bMF1bMV0sX1sxXVsxXT0rT25bMV1bMV0sRXQpOltbX1swXVswXSxfWzBdWzFdXSxbX1sxXVswXSxfWzFdWzFdXV19LEV0LmNvbnN0cmFpbj1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9T24sRXQpOmF9LEV0LmR1cmF0aW9uPWZ1bmN0aW9uKE9u'@;
put 'KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0rT24sRXQpOlR9LEV0LmludGVycG9sYXRlPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVz1PbixFdCk6V30sRXQub249ZnVuY3Rpb24oKXt2YXIgT249aWUub24uYXBwbHkoaWUsYXJndW1lbnRzKTtyZXR1cm4gT249'@;
put 'PT1pZT9FdDpPbn0sRXQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGV0PShPbj0rT24pKk9uLEV0KTpNYXRoLnNxcnQoZXQpfSxFdC50YXBEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHl0PStPbixFdCk6'@;
put 'eXR9LEV0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZShrVCkub24oInpvb20iLGZ1bmN0aW9uIGwoXyl7a3MoZC5ub2RlKCkucXVlcnlTZWxl'@;
put 'Y3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLF8udHJhbnNmb3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPWtzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fEdVLmNh'@;
put 'bGwodGhpcyxmKSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1FVChkLm5vZGUoKSksdGhpc31mdW5jdGlvbiBXVShjKXt2YXIgbD10aGlzLl90cmFuc2xhdGlvbixhPXRoaXMuX3NjYWxlLGQ9Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLGg9Yy5kYXR1bSgpLnNjYWxlLGY9RVQodGhpcy5fem9vbVNl'@;
put 'bGVjdGlvbi5ub2RlKCkpO3JldHVybiBsJiYoZj0oZj1mLnNjYWxlKDEvYSkpLnRyYW5zbGF0ZSgtbC54LC1sLnkpKSwoZj1mLnRyYW5zbGF0ZShkLngsZC55KSkuc2NhbGUoaCl9ZnVuY3Rpb24gR1UoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9u'@;
put 'LFdVLmNhbGwodGhpcyxjKSksdGhpcy5fdHJhbnNsYXRpb249Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLHRoaXMuX3NjYWxlPWMuZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT14VC50cmFuc2xhdGUoYy5kYXR1bSgpLnRyYW5zbGF0aW9uLngsYy5kYXR1bSgpLnRyYW5zbGF0'@;
put 'aW9uLnkpLnNjYWxlKGMuZGF0dW0oKS5zY2FsZSl9ZnVuY3Rpb24gZkplKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgYT1jLm1hcChmdW5jdGlvbihkKXtyZXR1cm4ga1QoW2RbMF1bMF0sZFswXVsxXV0sW2RbMV1bMF0sZFsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVy'@;
put 'biBkPDE/Ik0iK2EubWFwKGZ1bmN0aW9uKGgpe3JldHVybiBoKGQpfSkuam9pbigiTCIpOmx9fX1mdW5jdGlvbiBYYWUoYyl7cmV0dXJuImVkZ2UiPT1jLmF0dHJpYnV0ZXMuY2xhc3N8fCJhIj09Yy50YWcmJiJnIj09Yy5wYXJlbnQudGFnJiYiZWRnZSI9PWMucGFyZW50LnBhcmVudC5hdHRy'@;
put 'aWJ1dGVzLmNsYXNzfWZ1bmN0aW9uIEphZShjKXtyZXR1cm4gYy5wYXJlbnQmJlhhZShjLnBhcmVudCl9ZnVuY3Rpb24gUWFlKGMpe3ZhciBsPXRoaXMuX3RyYW5zaXRpb24sYT10aGlzLl9vcHRpb25zLmZhZGUmJm51bGwhPWwsZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9v'@;
put 'cHRpb25zLnR3ZWVuU2hhcGVzLGY9dGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zLF89dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9bCxUPXRoaXMuX2F0dHJpYnV0ZXIsVz10aGlzO3ZhciB3ZT10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9bCl7'@;
put 'dmFyIEVlPXRoaXMuX2pvYnM7aWYoVy5fYWN0aXZlKXJldHVybiBFZS5wdXNoKG51bGwpLHRoaXM7d2UudHJhbnNpdGlvbihsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oImVuZCIsZnVuY3Rpb24oKXtXLl9hY3RpdmU9ITEsMCE9RWUubGVuZ3RoJiYoRWUuc2hpZnQoKSxXLnJlbmRl'@;
put 'cigpKX0pLHRoaXMuX2FjdGl2ZT0hMH1udWxsIT1sJiZ3ZS50cmFuc2l0aW9uKGwpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtXLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uU3RhcnQiLFcpfSkub24oImVuZCIsZnVuY3Rpb24oKXtXLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uRW5kIixX'@;
put 'KX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Vy5fZGlzcGF0Y2guY2FsbCgicmVzdG9yZUVuZCIsVyksVy5fZGlzcGF0Y2guY2FsbCgiZW5kIixXKSxjJiZjLmNhbGwoVyl9KTt2YXIgWmU9dGhpcy5fZGF0YSxpdD13ZS5zZWxlY3RBbGwoInN2ZyIp'@;
put 'LmRhdGEoW1plXSxmdW5jdGlvbihldCl7cmV0dXJuIGV0LmtleX0pO3JldHVybiBpdD1pdC5lbnRlcigpLmFwcGVuZCgic3ZnIikubWVyZ2UoaXQpLGZ1bmN0aW9uIHBlKGV0KXt2YXIgeXQ9a3ModGhpcyk7aWYoInN2ZyI9PWV0LnRhZyl7dmFyIEV0PVcuX29wdGlvbnM7aWYobnVsbCE9RXQu'@;
put 'd2lkdGh8fG51bGwhPUV0LmhlaWdodCl7dmFyIFN0PUV0LndpZHRoLEp0PUV0LmhlaWdodDtudWxsPT1TdD9TdD00KmV0LmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIiKS8zOih5dC5hdHRyKCJ3aWR0aCIsU3QpLGV0LmF0dHJpYnV0ZXMud2lkdGg9U3QpLG51bGw9PUp0P0p0PTQq'@;
put 'ZXQuYXR0cmlidXRlcy5oZWlnaHQucmVwbGFjZSgicHQiLCIiKS8zOih5dC5hdHRyKCJoZWlnaHQiLEp0KSxldC5hdHRyaWJ1dGVzLmhlaWdodD1KdCksRXQuZml0fHwoeXQuYXR0cigidmlld0JveCIsYDAgMCAkezMqU3QvNC9FdC5zY2FsZX0gJHszKkp0LzQvRXQuc2NhbGV9YCksZXQuYXR0'@;
put 'cmlidXRlcy52aWV3Qm94PWAwIDAgJHszKlN0LzQvRXQuc2NhbGV9ICR7MypKdC80L0V0LnNjYWxlfWApfTEhPUV0LnNjYWxlJiYoRXQuZml0fHxudWxsPT1FdC53aWR0aCYmbnVsbD09RXQuaGVpZ2h0KSYmKFN0PWV0LmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzJdLEp0PWV0LmF0'@;
put 'dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzNdLHl0LmF0dHIoInZpZXdCb3giLGAwIDAgJHtTdC9FdC5zY2FsZX0gJHtKdC9FdC5zY2FsZX1gKSxldC5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAke1N0L0V0LnNjYWxlfSAke0p0L0V0LnNjYWxlfWApfVQmJnl0LmVhY2goVCk7dmFyIG5u'@;
put 'PWV0LnRhZyx2bj1ldC5hdHRyaWJ1dGVzLE5uPXl0Lm5vZGUoKS5hdHRyaWJ1dGVzO2lmKE5uKWZvcih2YXIgY3I9MDtjcjxObi5sZW5ndGg7Y3IrKyl7dmFyIElyPU5uW2NyXSxFaT1Jci5uYW1lO2lmKCJ4bWxucyIhPUVpLnNwbGl0KCI6IilbMF0mJklyLm5hbWVzcGFjZVVSSSl7dmFyIElp'@;
put 'PUlyLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0VpPUlpW0lpLmxlbmd0aC0xXSsiOiIrRWl9RWkgaW4gdm58fCh2bltFaV09bnVsbCl9dmFyIGlpPSExLGpyPSExO2lmKGgmJmwpe2lmKCgicG9seWdvbiI9PXRoaXMubm9kZU5hbWV8fCJlbGxpcHNlIj09dGhpcy5ub2RlTmFtZSkmJmV0LmFs'@;
put 'dGVybmF0aXZlT2xkJiYoanI9ITApLCgicG9seWdvbiI9PW5ufHwiZWxsaXBzZSI9PW5uKSYmZXQuYWx0ZXJuYXRpdmVOZXcmJihpaT0hMCksInBvbHlnb24iPT10aGlzLm5vZGVOYW1lJiYicG9seWdvbiI9PW5uJiZldC5hbHRlcm5hdGl2ZU9sZCl7dmFyIE9uPUdhZSh5dCk7aWYoIWYpe3Zh'@;
put 'ciBRbj1Pbi5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpLmxlbmd0aDsoTXI9ZXQuYXR0cmlidXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1RbiYmKGlpPSExLGpyPSExKX19aWYoanIpe3ZhciBPdD0kYWUoeXQsZXQuYWx0ZXJuYXRpdmVPbGQpO090LmRhdGEoW2V0XSxmdW5j'@;
put 'dGlvbigpe3JldHVybiBldC5rZXl9KSx5dD1PdH1paSYmKG5uPSJwYXRoIix2bj1ldC5hbHRlcm5hdGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIgRW49eXQ7aWYobCYmKEVuPUVuLnRyYW5zaXRpb24obCksYSYmRW4uZmlsdGVyKGZ1bmN0aW9uKERpKXtyZXR1cm4iIyI9PURpLnRhZ1swXT9udWxs'@;
put 'OnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMSksRW4uZmlsdGVyKGZ1bmN0aW9uKERpKXtyZXR1cm4iIyI9PURpLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihEaSl7a3ModGhpcykuYXR0cigic3R5bGUiLERpJiZEaS5hdHRyaWJ1dGVzJiZEaS5hdHRyaWJ1dGVzLnN0eWxl'@;
put 'fHxudWxsKX0pKSxfJiYicGF0aCI9PW5uJiZldC5vZmZzZXQpe3ZhciBKbj1ldC50b3RhbExlbmd0aDt5dC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixKbisiICIrSm4pLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixKbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZXQub2Zmc2V0'@;
put 'LngrIiwiK2V0Lm9mZnNldC55KyIpIiksdm5bInN0cm9rZS1kYXNob2Zmc2V0Il09MCx2bi50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIixFbi5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsdm5bInN0cm9rZS1kYXNob2Zmc2V0Il0pLmF0dHIoInRyYW5zZm9ybSIsdm4udHJhbnNmb3JtKS5v'@;
put 'bigic3RhcnQiLGZ1bmN0aW9uKCl7a3ModGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXtrcyh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsbnVsbCkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsbnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxs'@;
put 'KX0pfWlmKF8mJiJwb2x5Z29uIj09bm4mJkphZShldCkmJmV0Lm9mZnNldCYmInBhdGgiPT1ldC5wYXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIgT3I9a3MoeXQubm9kZSgpLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigicGF0aCIpKSwkcj1Pci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgw'@;
put 'KSxZcj1Pci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChldC50b3RhbExlbmd0aCksTnI9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoZXQudG90YWxMZW5ndGgtMSksUmk9MTgwKk1hdGguYXRhbjIoWXIueS1Oci55LFlyLngtTnIueCkvTWF0aC5QSSxYbz0kci54LVlyLngrZXQub2Zmc2V0'@;
put 'LngsR289JHIueS1Zci55K2V0Lm9mZnNldC55O3l0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1hvKyIsIitHbysiKSIpLEVuLmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihEaSl7dmFyIFFzPU9yLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3Ro'@;
put 'KGV0LnRvdGFsTGVuZ3RoKkRpKSxsYT1Pci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChldC50b3RhbExlbmd0aCpEaSsxKSxGcz0xODAqTWF0aC5hdGFuMihsYS55LVFzLnksbGEueC1Rcy54KS9NYXRoLlBJLVJpO3JldHVybiJ0cmFuc2xhdGUoIisoWG89UXMueC1Zci54K2V0Lm9mZnNldC54'@;
put 'KigxLURpKSkrIiwiKyhHbz1Rcy55LVlyLnkrZXQub2Zmc2V0LnkqKDEtRGkpKSsiKSByb3RhdGUoIitGcysiICIrWXIueCsiICIrWXIueSsiKSJ9fSkub24oInN0YXJ0IixmdW5jdGlvbigpe2tzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7a3Mo'@;
put 'dGhpcykuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfXZhciBKcz1kJiZsJiYicGF0aCI9PW5uJiZudWxsIT15dC5hdHRyKCJkIik7Zm9yKHZhciBnYSBvZiBPYmplY3Qua2V5cyh2bikpe3ZhciB1bz12bltnYV07aWYoSnMmJiJkIj09Z2Epe3ZhciBNcjsoTXI9KGV0LmFsdGVybmF0aXZlT2xk'@;
put 'fHxldCkucG9pbnRzKSYmRW4uYXR0clR3ZWVuKCJkIixmSmUoTXIsdW8pKX1lbHNle2lmKCJ0cmFuc2Zvcm0iPT1nYSYmZXQudHJhbnNsYXRpb24paWYobCl7dmFyIEF0PUVuLm9uKCJlbmQiKTtFbi5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Vy5fem9vbUJlaGF2aW9yJiZFbi50d2VlbigiYXR0'@;
put 'ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIERpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKFFzKXtEaS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsRWFlKEVUKFcuX3pvb21TZWxlY3Rpb24ubm9kZSgpKS50b1N0cmluZygpLFdVLmNhbGwoVyx5dCkudG9TdHJpbmcoKSkoUXMpKX19KX0pLm9u'@;
put 'KCJlbmQiLGZ1bmN0aW9uKCl7QXQuY2FsbCh0aGlzKSxXLl96b29tQmVoYXZpb3ImJkdVLmNhbGwoVyx5dCl9KX1lbHNlIFcuX3pvb21CZWhhdmlvciYmKEdVLmNhbGwoVyx5dCksdW89V1UuY2FsbChXLHl0KS50b1N0cmluZygpKTtFbi5hdHRyKGdhLHVvKX19aWkmJkVuLm9uKCJlbmQiLGZ1'@;
put 'bmN0aW9uKERpLFFzLGxhKXskYWUoT3Q9a3ModGhpcyksRGkpLmRhdGEoW0RpXSxmdW5jdGlvbigpe3JldHVybiBEaS5rZXl9KX0pLGV0LnRleHQmJkVuLnRleHQoZXQudGV4dCksZnVuY3Rpb24gaWUoZXQpe3ZhciB5dD1ldC5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gZXQubm9kZSgp'@;
put 'LmNoaWxkTm9kZXN9KSxFdD0oeXQ9eXQuZGF0YShmdW5jdGlvbihubil7cmV0dXJuIG5uLmNoaWxkcmVufSxmdW5jdGlvbihubil7cmV0dXJuIG5uLmtleX0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihubil7dmFyIHZuPVVVKG5uKTtyZXR1cm4iI3RleHQiPT1ubi50YWcmJmEmJih2bi5u'@;
put 'b2RlVmFsdWU9bm4udGV4dCksdm59KTsoYXx8XyYmWGFlKGV0LmRhdHVtKCkpKSYmRXQuZmlsdGVyKGZ1bmN0aW9uKG5uKXtyZXR1cm4iIyI9PW5uLnRhZ1swXT9udWxsOnRoaXN9KS5lYWNoKGZ1bmN0aW9uKG5uKXt2YXIgdm49a3ModGhpcyk7Zm9yKHZhciBObiBvZiBPYmplY3Qua2V5cyhu'@;
put 'bi5hdHRyaWJ1dGVzKSl2bi5hdHRyKE5uLG5uLmF0dHJpYnV0ZXNbTm5dKX0pLmZpbHRlcihmdW5jdGlvbihubil7cmV0dXJuInN2ZyI9PW5uLnRhZ3x8ImciPT1ubi50YWc/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApO3ZhciBKdD15dC5leGl0KCk7VCYmSnQuZWFjaChUKSxsJiYo'@;
put 'SnQ9SnQudHJhbnNpdGlvbihsKSxhJiZKdC5maWx0ZXIoZnVuY3Rpb24obm4pe3JldHVybiIjIj09bm4udGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKSksSnQ9SnQucmVtb3ZlKCksKHl0PUV0Lm1lcmdlKHl0KSkuZWFjaChwZSl9KHl0KX0uY2FsbChpdC5ub2RlKCksWmUp'@;
put 'LHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvciYmS2FlLmNhbGwodGhpcyksVy5fZGlzcGF0Y2guY2FsbCgicmVuZGVyRW5kIixXKSxudWxsPT1sJiYodGhpcy5fZGlzcGF0Y2guY2FsbCgiZW5kIix0aGlzKSxjJiZjLmNhbGwodGhpcykpLHRoaXN9RVQucHJvdG90eXBl'@;
put 'PWkzLnByb3RvdHlwZTt2YXIgeUplPUFycmF5QnVmZmVyLGVjPVVpbnQ4QXJyYXksQVQ9VWludDE2QXJyYXksd0plPUludDE2QXJyYXksVFQ9SW50MzJBcnJheSwkVT1mdW5jdGlvbihjLGwsYSl7aWYoZWMucHJvdG90eXBlLnNsaWNlKXJldHVybiBlYy5wcm90b3R5cGUuc2xpY2UuY2FsbChj'@;
put 'LGwsYSk7KG51bGw9PWx8fGw8MCkmJihsPTApLChudWxsPT1hfHxhPmMubGVuZ3RoKSYmKGE9Yy5sZW5ndGgpO3ZhciBkPW5ldyBlYyhhLWwpO3JldHVybiBkLnNldChjLnN1YmFycmF5KGwsYSkpLGR9LGJ3PWZ1bmN0aW9uKGMsbCxhLGQpe2lmKGVjLnByb3RvdHlwZS5maWxsKXJldHVybiBl'@;
put 'Yy5wcm90b3R5cGUuZmlsbC5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOysrYSljW2FdPWw7cmV0dXJuIGN9LENKZT1mdW5jdGlvbihjLGwsYSxkKXtpZihlYy5wcm90b3R5cGUuY29weVdpdGhp'@;
put 'bilyZXR1cm4gZWMucHJvdG90eXBlLmNvcHlXaXRoaW4uY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDspY1tsKytdPWNbYSsrXX0sU0plPVsiaW52YWxpZCB6c3RkIGRhdGEiLCJ3aW5kb3cgc2l6'@;
put 'ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoIiwibWF0Y2ggZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5leHBlY3RlZCBFT0YiXSxtYz1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9bmV3IEVycm9yKGx8fFNKZVtjXSk7aWYo'@;
put 'ZC5jb2RlPWMsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGQsbWMpLCFhKXRocm93IGQ7cmV0dXJuIGR9LGVsZT1mdW5jdGlvbihjLGwsYSl7Zm9yKHZhciBkPTAsaD0wO2Q8YTsrK2QpaHw9Y1tsKytdPDwoZDw8Myk7cmV0dXJuIGh9LE1KZT1mdW5j'@;
put 'dGlvbihjLGwpe3ZhciBhLGg9Y1swXXxjWzFdPDw4fGNbMl08PDE2O2lmKDMxMjY1Njg9PWgmJjI1Mz09Y1szXSl7dmFyIGY9Y1s0XSxfPWY+PjUmMSxUPWY+PjImMSxXPTMmZixpZT1mPj42OzgmZiYmbWMoMCk7dmFyIHBlPTYtXyx3ZT0zPT1XPzQ6VyxFZT1lbGUoYyxwZSx3ZSksWmU9aWU/'@;
put 'MTw8aWU6XyxpdD1lbGUoYyxwZSs9d2UsWmUpKygxPT1pZSYmMjU2KSxldD1pdDtpZighXyl7dmFyIHl0PTE8PDEwKyhjWzVdPj4zKTtldD15dCsoeXQ+PjMpKig3JmNbNV0pfWV0PjIxNDUzODY0OTYmJm1jKDEpO3ZhciBFdD1uZXcgZWMoKDE9PWw/aXR8fGV0Omw/MDpldCkrMTIpO3JldHVy'@;
put 'biBFdFswXT0xLEV0WzRdPTQsRXRbOF09OCx7YjpwZStaZSx5OjAsbDowLGQ6RWUsdzpsJiYxIT1sP2w6RXQuc3ViYXJyYXkoMTIpLGU6ZXQsbzpuZXcgVFQoRXQuYnVmZmVyLDAsMyksdTppdCxjOlQsbTpNYXRoLm1pbigxMzEwNzIsZXQpfX1pZigyNTQ4MTg5Mz09KGg+PjR8Y1szXTw8MjAp'@;
put 'KXJldHVybiA4KygoKGE9YylbNF18YVs1XTw8OHxhWzZdPDwxNnxhWzddPDwyNCk+Pj4wKTttYygwKX0sSmc9ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPTA7MTw8bDw9YzsrK2wpO3JldHVybiBsLTF9LHl3PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD00KyhsPDwzKSxoPTUrKDE1JmNbbF0pO2g+YSYm'@;
put 'bWMoMyk7Zm9yKHZhciBmPTE8PGgsXz1mLFQ9LTEsVz0tMSxpZT0tMSxwZT1mLHdlPW5ldyB5SmUoNTEyKyhmPDwyKSksRWU9bmV3IHdKZSh3ZSwwLDI1NiksWmU9bmV3IEFUKHdlLDAsMjU2KSxpdD1uZXcgQVQod2UsNTEyLGYpLGV0PTUxMisoZjw8MSkseXQ9bmV3IGVjKHdlLGV0LGYpLEV0'@;
put 'PW5ldyBlYyh3ZSxldCtmKTtUPDI1NSYmXz4wOyl7dmFyIFN0PUpnKF8rMSksSnQ9ZD4+Myxubj0oMTw8U3QrMSktMSx2bj0oY1tKdF18Y1tKdCsxXTw8OHxjW0p0KzJdPDwxNik+Pig3JmQpJm5uLE5uPSgxPDxTdCktMSxjcj1ubi1fLTEsSXI9dm4mTm47aWYoSXI8Y3I/KGQrPVN0LHZuPUly'@;
put 'KTooZCs9U3QrMSx2bj5ObiYmKHZuLT1jcikpLEVlWysrVF09LS12biwtMT09dm4/KF8rPXZuLHl0Wy0tcGVdPVQpOl8tPXZuLCF2bilkb3t2YXIgRWk9ZD4+MztXPShjW0VpXXxjW0VpKzFdPDw4KT4+KDcmZCkmMyxkKz0yLFQrPVd9d2hpbGUoMz09Vyl9KFQ+MjU1fHxfKSYmbWMoMCk7Zm9y'@;
put 'KHZhciBJaT0wLGZyPShmPj4xKSsoZj4+MykrMyxpaT1mLTEsanI9MDtqcjw9VDsrK2pyKXt2YXIgT249RWVbanJdO2lmKE9uPDEpWmVbanJdPS1PbjtlbHNlIGZvcihpZT0wO2llPE9uOysraWUpe3l0W0lpXT1qcjtkb3tJaT1JaStmciZpaX13aGlsZShJaT49cGUpfX1mb3IoSWkmJm1jKDAp'@;
put 'LGllPTA7aWU8ZjsrK2llKXt2YXIgRnI9WmVbeXRbaWVdXSsrLFFuPUV0W2llXT1oLUpnKEZyKTtpdFtpZV09KEZyPDxRbiktZn1yZXR1cm5bZCs3Pj4zLHtiOmgsczp5dCxuOkV0LHQ6aXR9XX0seEplPXl3KG5ldyBlYyhbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQs'@;
put 'OTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLEVKZT15dyhuZXcgZWMoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2LDgsMzMsNjgsNjgsNjgsNjgsNjgsNjgsNjgsNjgsMzYsOV0pLDAsNilbMV0sa0plPXl3KG5ldyBlYyhbMzIsMTMyLDE2'@;
put 'LDY2LDEwMiw3MCw2OCw2OCw2OCw2OCwzNiw3MywyXSksMCw1KVsxXSx0bGU9ZnVuY3Rpb24oYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGgsZD1uZXcgVFQoYSksaD0wO2g8YTsrK2gpZFtoXT1sLGwrPTE8PGNbaF07cmV0dXJuIGR9LHFVPW5ldyBlYyhuZXcgVFQoWzAsMCwwLDAsMTY4NDMwMDks'@;
put 'NTA1Mjg3NzAsMTM0Njc4MDIwLDIwMjA1MDA1NywyNjk0MjIwOTNdKS5idWZmZXIsMCwzNiksQUplPXRsZShxVSwwKSxLVT1uZXcgZWMobmV3IFRUKFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1'@;
put 'MyksVEplPXRsZShLVSwzKSx3dz1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9Yy5sZW5ndGgsaD1sLmxlbmd0aCxmPWNbZC0xXSxfPSgxPDxhLmIpLTEsVD0tYS5iO2Z8fG1jKDApO2Zvcih2YXIgVz0wLGllPWEuYixwZT0oZDw8MyktOCtKZyhmKS1pZSx3ZT0tMTtwZT5UJiZ3ZTxoOyl7dmFyIEVl'@;
put 'PXBlPj4zO2xbKyt3ZV09YS5zW1c9KFc8PGllfChjW0VlXXxjW0VlKzFdPDw4fGNbRWUrMl08PDE2KT4+KDcmcGUpKSZfXSxwZS09aWU9YS5uW1ddfXBlPT1UJiZ3ZSsxPT1ofHxtYygwKX0sREplPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGg9bC5sZW5ndGgrMz4+MixmPWg8PDEsXz1oK2Y7'@;
put 'd3coYy5zdWJhcnJheShkLGQrPWNbMF18Y1sxXTw8OCksbC5zdWJhcnJheSgwLGgpLGEpLHd3KGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoaCxmKSxhKSx3dyhjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFycmF5KGYsXyksYSksd3coYy5zdWJh'@;
put 'cnJheShkKSxsLnN1YmFycmF5KF8pLGEpfSxJSmU9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSxfPWY+PjEmMztsLmw9MSZmO3ZhciBUPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsVz0oaCs9MykrVDtpZigxPT1fKXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1o'@;
put 'KzEsYT8oYncoYSxjW2hdLGwueSxsLnkrPVQpLGEpOmJ3KG5ldyBlYyhUKSxjW2hdKSk7aWYoIShXPmMubGVuZ3RoKSl7aWYoMD09XylyZXR1cm4gbC5iPVcsYT8oYS5zZXQoYy5zdWJhcnJheShoLFcpLGwueSksbC55Kz1ULGEpOiRVKGMsaCxXKTtpZigyPT1fKXt2YXIgaWU9Y1toXSxwZT0z'@;
put 'JmllLHdlPWllPj4yJjMsRWU9aWU+PjQsWmU9MCxpdD0wO3BlPDI/MSZ3ZT9FZXw9Y1srK2hdPDw0fCgyJndlJiZjWysraF08PDEyKTpFZT1pZT4+MzooaXQ9d2Usd2U8Mj8oRWV8PSg2MyZjWysraF0pPDw0LFplPWNbaF0+PjZ8Y1srK2hdPDwyKToyPT13ZT8oRWV8PWNbKytoXTw8NHwoMyZj'@;
put 'WysraF0pPDwxMixaZT1jW2hdPj4yfGNbKytoXTw8Nik6KEVlfD1jWysraF08PDR8KDYzJmNbKytoXSk8PDEyLFplPWNbaF0+PjZ8Y1srK2hdPDwyfGNbKytoXTw8MTApKSwrK2g7dmFyIGV0PWE/YS5zdWJhcnJheShsLnksbC55K2wubSk6bmV3IGVjKGwubSkseXQ9ZXQubGVuZ3RoLUVlO2lm'@;
put 'KDA9PXBlKWV0LnNldChjLnN1YmFycmF5KGgsaCs9RWUpLHl0KTtlbHNlIGlmKDE9PXBlKWJ3KGV0LGNbaCsrXSx5dCk7ZWxzZXt2YXIgRXQ9bC5oO2lmKDI9PXBlKXt2YXIgU3Q9ZnVuY3Rpb24oZ2EsdW8pe3ZhciBBdD0wLERpPS0xLFFzPW5ldyBlYygyOTIpLGxhPWdhW3VvXSxGcz1Rcy5z'@;
put 'dWJhcnJheSgwLDI1NiksdGM9UXMuc3ViYXJyYXkoMjU2LDI2OCksQ2E9bmV3IEFUKFFzLmJ1ZmZlciwyNjgpO2lmKGxhPDEyOCl7dmFyIFJoPXl3KGdhLHVvKzEsNiksSWw9UmhbMV0seDI9UmhbMF08PDMsdTQ9Z2FbdW8rPWxhXTt1NHx8bWMoMCk7Zm9yKHZhciBPaD0wLENkPTAsJGM9SWwu'@;
put 'YixTZD0kYyxKdT0oKyt1bzw8MyktOCtKZyh1NCk7ISgoSnUtPSRjKTx4Mik7KXt2YXIgTTE9SnU+PjM7aWYoRnNbKytEaV09SWwuc1tPaCs9KGdhW00xXXxnYVtNMSsxXTw8OCk+Pig3Jkp1KSYoMTw8JGMpLTFdLChKdS09U2QpPHgyKWJyZWFrO0NkKz0oZ2FbTTE9SnU+PjNdfGdhW00xKzFd'@;
put 'PDw4KT4+KDcmSnUpJigxPDxTZCktMSxGc1srK0RpXT1JbC5zW0NkXSwkYz1JbC5uW09oXSxPaD1JbC50W09oXSxTZD1JbC5uW0NkXSxDZD1JbC50W0NkXX0rK0RpPjI1NSYmbWMoMCl9ZWxzZXtmb3IoRGk9bGEtMTI3O0F0PERpO0F0Kz0yKXt2YXIgTXU9Z2FbKyt1b107RnNbQXRdPU11Pj40'@;
put 'LEZzW0F0KzFdPTE1Jk11fSsrdW99dmFyIGF1PTA7Zm9yKEF0PTA7QXQ8RGk7KytBdCkoZDQ9RnNbQXRdKT4xMSYmbWMoMCksYXUrPWQ0JiYxPDxkNC0xO3ZhciB4MT1KZyhhdSkrMSxFMj0xPDx4MSwkNz1FMi1hdTtmb3IoJDcmJDctMSYmbWMoMCksRnNbRGkrK109SmcoJDcpKzEsQXQ9MDtB'@;
put 'dDxEaTsrK0F0KXt2YXIgZDQ9RnNbQXRdOysrdGNbRnNbQXRdPWQ0JiZ4MSsxLWQ0XX12YXIgU3c9bmV3IGVjKEUyPDwxKSxlbT1Tdy5zdWJhcnJheSgwLEUyKSxNdz1Tdy5zdWJhcnJheShFMik7Zm9yKENhW3gxXT0wLEF0PXgxO0F0PjA7LS1BdCl7dmFyIHh3PUNhW0F0XTtidyhNdyxBdCx4'@;
put 'dyxDYVtBdC0xXT14dyt0Y1tBdF0qKDE8PHgxLUF0KSl9Zm9yKENhWzBdIT1FMiYmbWMoMCksQXQ9MDtBdDxEaTsrK0F0KXt2YXIgdG09RnNbQXRdO2lmKHRtKXt2YXIgRXc9Q2FbdG1dO2J3KGVtLEF0LEV3LENhW3RtXT1FdysoMTw8eDEtdG0pKX19cmV0dXJuW3VvLHtuOk13LGI6eDEsczpl'@;
put 'bX1dfShjLGgpO1plKz1oLShoPVN0WzBdKSxsLmg9RXQ9U3RbMV19ZWxzZSBFdHx8bWMoMCk7KGl0P0RKZTp3dykoYy5zdWJhcnJheShoLGgrPVplKSxldC5zdWJhcnJheSh5dCksRXQpfXZhciBKdD1jW2grK107aWYoSnQpezI1NT09SnQ/SnQ9MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOkp0'@;
put 'PjEyNyYmKEp0PUp0LTEyODw8OHxjW2grK10pO3ZhciBubj1jW2grK107MyZubiYmbWMoMCk7Zm9yKHZhciB2bj1bRUplLGtKZSx4SmVdLE5uPTI7Tm4+LTE7LS1Obil7dmFyIGNyPW5uPj4yKyhObjw8MSkmMztpZigxPT1jcil7dmFyIElyPW5ldyBlYyhbMCwwLGNbaCsrXV0pO3ZuW05uXT17'@;
put 'czpJci5zdWJhcnJheSgyLDMpLG46SXIuc3ViYXJyYXkoMCwxKSx0Om5ldyBBVChJci5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09Y3I/KGg9KGQ9eXcoYyxoLDktKDEmTm4pKSlbMF0sdm5bTm5dPWRbMV0pOjM9PWNyJiYobC50fHxtYygwKSx2bltObl09bC50W05uXSl9dmFyIEVpPWwudD12'@;
put 'bixJaT1FaVswXSxmcj1FaVsxXSxpaT1FaVsyXSxqcj1jW1ctMV07anJ8fG1jKDApO3ZhciBPbj0oVzw8MyktOCtKZyhqciktaWkuYixGcj1Pbj4+MyxRbj0wLE1yPShjW0ZyXXxjW0ZyKzFdPDw4KT4+KDcmT24pJigxPDxpaS5iKS0xLF9yPShjW0ZyPShPbi09ZnIuYik+PjNdfGNbRnIrMV08'@;
put 'PDgpPj4oNyZPbikmKDE8PGZyLmIpLTEsdnQ9KGNbRnI9KE9uLT1JaS5iKT4+M118Y1tGcisxXTw8OCk+Pig3Jk9uKSYoMTw8SWkuYiktMTtmb3IoKytKdDstLUp0Oyl7dmFyIE90PWlpLnNbTXJdLGNuPWlpLm5bTXJdLEVuPUlpLnNbdnRdLFBuPUlpLm5bdnRdLEpuPWZyLnNbX3JdLFByPWZy'@;
put 'Lm5bX3JdLE9yPTE8PEpuLCRyPU9yKygoY1tGcj0oT24tPUpuKT4+M118Y1tGcisxXTw8OHxjW0ZyKzJdPDwxNnxjW0ZyKzNdPDwyNCk+Pj4oNyZPbikmT3ItMSk7RnI9KE9uLT1LVVtFbl0pPj4zO3ZhciBZcj1USmVbRW5dKygoY1tGcl18Y1tGcisxXTw8OHxjW0ZyKzJdPDwxNik+Pig3Jk9u'@;
put 'KSYoMTw8S1VbRW5dKS0xKTtGcj0oT24tPXFVW090XSk+PjM7dmFyIE5yPUFKZVtPdF0rKChjW0ZyXXxjW0ZyKzFdPDw4fGNbRnIrMl08PDE2KT4+KDcmT24pJigxPDxxVVtPdF0pLTEpO2lmKEZyPShPbi09Y24pPj4zLE1yPWlpLnRbTXJdKygoY1tGcl18Y1tGcisxXTw8OCk+Pig3Jk9uKSYo'@;
put 'MTw8Y24pLTEpLEZyPShPbi09UG4pPj4zLHZ0PUlpLnRbdnRdKygoY1tGcl18Y1tGcisxXTw8OCk+Pig3Jk9uKSYoMTw8UG4pLTEpLEZyPShPbi09UHIpPj4zLF9yPWZyLnRbX3JdKygoY1tGcl18Y1tGcisxXTw8OCk+Pig3Jk9uKSYoMTw8UHIpLTEpLCRyPjMpbC5vWzJdPWwub1sxXSxsLm9b'@;
put 'MV09bC5vWzBdLGwub1swXT0kci09MztlbHNle3ZhciBSaT0kci0oMCE9TnIpO1JpPygkcj0zPT1SaT9sLm9bMF0tMTpsLm9bUmldLFJpPjEmJihsLm9bMl09bC5vWzFdKSxsLm9bMV09bC5vWzBdLGwub1swXT0kcik6JHI9bC5vWzBdfWZvcihObj0wO05uPE5yOysrTm4pZXRbUW4rTm5dPWV0'@;
put 'W3l0K05uXTt5dCs9TnI7dmFyIFhvPShRbis9TnIpLSRyO2lmKFhvPDApe3ZhciBHbz0tWG8sSnM9bC5lK1hvO2ZvcihHbz5ZciYmKEdvPVlyKSxObj0wO05uPEdvOysrTm4pZXRbUW4rTm5dPWwud1tKcytObl07UW4rPUdvLFlyLT1HbyxYbz0wfWZvcihObj0wO05uPFlyOysrTm4pZXRbUW4r'@;
put 'Tm5dPWV0W1hvK05uXTtRbis9WXJ9aWYoUW4hPXl0KWZvcig7eXQ8ZXQubGVuZ3RoOylldFtRbisrXT1ldFt5dCsrXTtlbHNlIFFuPWV0Lmxlbmd0aDthP2wueSs9UW46ZXQ9JFUoZXQsMCxRbil9ZWxzZSBpZihhKXtpZihsLnkrPUVlLHl0KWZvcihObj0wO05uPEVlOysrTm4pZXRbTm5dPWV0'@;
put 'W3l0K05uXX1lbHNlIHl0JiYoZXQ9JFUoZXQseXQpKTtyZXR1cm4gbC5iPVcsZXR9bWMoMil9fTt2YXIgT0plPSh0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiZkb2N1bWVudCxmdW5jdGlvbihjKXt2YXIgbCxhLGQ9dm9pZCAwIT09KGM9Y3x8e30pP2M6e307'@;
put 'ZC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihzdCxndCl7bD1zdCxhPWd0fSk7dmFyIGgsZj1PYmplY3QuYXNzaWduKHt9LGQpLF89Ii4vdGhpcy5wcm9ncmFtIixUPShzdCxndCk9Pnt0aHJvdyBndH0sVz1kLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGllPWQucHJpbnRF'@;
put 'cnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZCxmKSxmPW51bGwsZC50aGlzUHJvZ3JhbSYmKF89ZC50aGlzUHJvZ3JhbSksZC5xdWl0JiYoVD1kLnF1aXQpLGQud2FzbUJpbmFyeSYmKGg9ZC53YXNtQmluYXJ5KTt2YXIgcGUsd2U9ZC5ub0V4aXRSdW50aW1l'@;
put 'fHwhMDsib2JqZWN0IiE9dHlwZW9mIFdlYkFzc2VtYmx5JiZFbigibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpO3ZhciBFZT0hMTtmdW5jdGlvbiBaZShzdCxndCl7c3R8fEVuKGd0KX12YXIgaXQsZXQseXQsRXQsU3QsSnQsbm4sdm49dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9u'@;
put 'ZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gTm4oc3QsZ3QsUnQpe2Zvcih2YXIgdG49Z3QrUnQsd249Z3Q7c3Rbd25dJiYhKHduPj10bik7KSsrd247aWYod24tZ3Q+MTYmJnN0LmJ1ZmZlciYmdm4pcmV0dXJuIHZuLmRlY29kZShzdC5zdWJhcnJheShndCx3bikpO2Zv'@;
put 'cih2YXIgc3I9IiI7Z3Q8d247KXt2YXIgbHI9c3RbZ3QrK107aWYoMTI4JmxyKXt2YXIgUnI9NjMmc3RbZ3QrK107aWYoMTkyIT0oMjI0JmxyKSl7dmFyIGdvPTYzJnN0W2d0KytdO2lmKChscj0yMjQ9PSgyNDAmbHIpPygxNSZscik8PDEyfFJyPDw2fGdvOig3JmxyKTw8MTh8UnI8PDEyfGdv'@;
put 'PDw2fDYzJnN0W2d0KytdKTw2NTUzNilzcis9U3RyaW5nLmZyb21DaGFyQ29kZShscik7ZWxzZXt2YXIgTW89bHItNjU1MzY7c3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8TW8+PjEwLDU2MzIwfDEwMjMmTW8pfX1lbHNlIHNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZscik8PDZ8'@;
put 'UnIpfWVsc2Ugc3IrPVN0cmluZy5mcm9tQ2hhckNvZGUobHIpfXJldHVybiBzcn1mdW5jdGlvbiBjcihzdCxndCl7cmV0dXJuIHN0P05uKHl0LHN0LGd0KToiIn1mdW5jdGlvbiBJcihzdCxndCxSdCx0bil7aWYoISh0bj4wKSlyZXR1cm4gMDtmb3IodmFyIHduPVJ0LHNyPVJ0K3RuLTEsbHI9'@;
put 'MDtscjxzdC5sZW5ndGg7Kytscil7dmFyIFJyPXN0LmNoYXJDb2RlQXQobHIpO2lmKFJyPj01NTI5NiYmUnI8PTU3MzQzJiYoUnI9NjU1MzYrKCgxMDIzJlJyKTw8MTApfDEwMjMmc3QuY2hhckNvZGVBdCgrK2xyKSksUnI8PTEyNyl7aWYoUnQ+PXNyKWJyZWFrO2d0W1J0KytdPVJyfWVsc2Ug'@;
put 'aWYoUnI8PTIwNDcpe2lmKFJ0KzE+PXNyKWJyZWFrO2d0W1J0KytdPTE5MnxScj4+NixndFtSdCsrXT0xMjh8NjMmUnJ9ZWxzZSBpZihScjw9NjU1MzUpe2lmKFJ0KzI+PXNyKWJyZWFrO2d0W1J0KytdPTIyNHxScj4+MTIsZ3RbUnQrK109MTI4fFJyPj42JjYzLGd0W1J0KytdPTEyOHw2MyZS'@;
put 'cn1lbHNle2lmKFJ0KzM+PXNyKWJyZWFrO2d0W1J0KytdPTI0MHxScj4+MTgsZ3RbUnQrK109MTI4fFJyPj4xMiY2MyxndFtSdCsrXT0xMjh8UnI+PjYmNjMsZ3RbUnQrK109MTI4fDYzJlJyfX1yZXR1cm4gZ3RbUnRdPTAsUnQtd259ZnVuY3Rpb24gRWkoc3Qpe2Zvcih2YXIgZ3Q9MCxSdD0w'@;
put 'O1J0PHN0Lmxlbmd0aDsrK1J0KXt2YXIgdG49c3QuY2hhckNvZGVBdChSdCk7dG48PTEyNz9ndCsrOnRuPD0yMDQ3P2d0Kz0yOnRuPj01NTI5NiYmdG48PTU3MzQzPyhndCs9NCwrK1J0KTpndCs9M31yZXR1cm4gZ3R9ZnVuY3Rpb24gSWkoc3Qpe2l0PXN0LGQuSEVBUDg9ZXQ9bmV3IEludDhB'@;
put 'cnJheShzdCksZC5IRUFQMTY9RXQ9bmV3IEludDE2QXJyYXkoc3QpLGQuSEVBUDMyPVN0PW5ldyBJbnQzMkFycmF5KHN0KSxkLkhFQVBVOD15dD1uZXcgVWludDhBcnJheShzdCksZC5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShzdCksZC5IRUFQVTMyPUp0PW5ldyBVaW50MzJBcnJheShzdCks'@;
put 'ZC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoc3QpLGQuSEVBUEY2ND1ubj1uZXcgRmxvYXQ2NEFycmF5KHN0KX12YXIgZnIsaWksanIsT24sRnI9W10sUW49W10sTXI9W10sX3I9MCx2dD1udWxsO2Z1bmN0aW9uIE90KHN0KXtfcisrLGQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmZC5tb25p'@;
put 'dG9yUnVuRGVwZW5kZW5jaWVzKF9yKX1mdW5jdGlvbiBjbihzdCl7aWYoX3ItLSxkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJmQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhfciksMD09X3ImJnZ0KXt2YXIgZ3Q9dnQ7dnQ9bnVsbCxndCgpfX1mdW5jdGlvbiBFbihzdCl7ZC5vbkFib3J0JiZk'@;
put 'Lm9uQWJvcnQoc3QpLGllKHN0PSJBYm9ydGVkKCIrc3QrIikiKSxFZT0hMCxzdCs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBndD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHN0KTt0aHJvdyBhKGd0KSxndH1mdW5jdGlvbiBQbihzdCl7cmV0'@;
put 'dXJuIHN0LnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKX1Qbihmcj0iZ3JhcGh2aXpsaWIud2FzbSIpfHwoaWk9ZnIsZnI9ZC5sb2NhdGVGaWxlP2QubG9jYXRlRmlsZShpaSwiIik6IiIraWkpO3ZhciBPcj17MTc1NjY0OihzdCxndCk9Pnt2YXIg'@;
put 'UnQ9Y3Ioc3QpLHRuPWNyKGd0KTtBdC5jcmVhdGVQYXRoKCIvIixSaS5kaXJuYW1lKFJ0KSksQXQud3JpdGVGaWxlKFJpLmpvaW4oIi8iLFJ0KSx0bil9fTtmdW5jdGlvbiAkcihzdCl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRo'@;
put 'IGV4aXQoIitzdCsiKSIsdGhpcy5zdGF0dXM9c3R9ZnVuY3Rpb24gWXIoc3Qpe2Zvcig7c3QubGVuZ3RoPjA7KXN0LnNoaWZ0KCkoZCl9ZnVuY3Rpb24gTnIoc3Qpe3RoaXMuZXhjUHRyPXN0LHRoaXMucHRyPXN0LTI0LHRoaXMuc2V0X3R5cGU9ZnVuY3Rpb24oZ3Qpe0p0W3RoaXMucHRyKzQ+'@;
put 'PjJdPWd0fSx0aGlzLmdldF90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIEp0W3RoaXMucHRyKzQ+PjJdfSx0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKGd0KXtKdFt0aGlzLnB0cis4Pj4yXT1ndH0sdGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBKdFt0aGlzLnB0cis4'@;
put 'Pj4yXX0sdGhpcy5zZXRfcmVmY291bnQ9ZnVuY3Rpb24oZ3Qpe1N0W3RoaXMucHRyPj4yXT1ndH0sdGhpcy5zZXRfY2F1Z2h0PWZ1bmN0aW9uKGd0KXtldFt0aGlzLnB0cisxMj4+MF09Z3Q9Z3Q/MTowfSx0aGlzLmdldF9jYXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9ZXRbdGhpcy5wdHIr'@;
put 'MTI+PjBdfSx0aGlzLnNldF9yZXRocm93bj1mdW5jdGlvbihndCl7ZXRbdGhpcy5wdHIrMTM+PjBdPWd0PWd0PzE6MH0sdGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1cm4gMCE9ZXRbdGhpcy5wdHIrMTM+PjBdfSx0aGlzLmluaXQ9ZnVuY3Rpb24oZ3QsUnQpe3RoaXMuc2V0X2Fk'@;
put 'anVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKGd0KSx0aGlzLnNldF9kZXN0cnVjdG9yKFJ0KSx0aGlzLnNldF9yZWZjb3VudCgwKSx0aGlzLnNldF9jYXVnaHQoITEpLHRoaXMuc2V0X3JldGhyb3duKCExKX0sdGhpcy5hZGRfcmVmPWZ1bmN0aW9uKCl7U3RbdGhpcy5wdHI+PjJdPVN0W3Ro'@;
put 'aXMucHRyPj4yXSsxfSx0aGlzLnJlbGVhc2VfcmVmPWZ1bmN0aW9uKCl7dmFyIGd0PVN0W3RoaXMucHRyPj4yXTtyZXR1cm4gU3RbdGhpcy5wdHI+PjJdPWd0LTEsMT09PWd0fSx0aGlzLnNldF9hZGp1c3RlZF9wdHI9ZnVuY3Rpb24oZ3Qpe0p0W3RoaXMucHRyKzE2Pj4yXT1ndH0sdGhpcy5n'@;
put 'ZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7cmV0dXJuIEp0W3RoaXMucHRyKzE2Pj4yXX0sdGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe2lmKHRtKHRoaXMuZ2V0X3R5cGUoKSkpcmV0dXJuIEp0W3RoaXMuZXhjUHRyPj4yXTt2YXIgZ3Q9dGhpcy5nZXRfYWRqdXN0ZWRfcHRy'@;
put 'KCk7cmV0dXJuIDAhPT1ndD9ndDp0aGlzLmV4Y1B0cn19dmFyIFJpPXtpc0FiczpzdD0+Ii8iPT09c3QuY2hhckF0KDApLHNwbGl0UGF0aDpzdD0+L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLmV4ZWMoc3QpLnNsaWNlKDEp'@;
put 'LG5vcm1hbGl6ZUFycmF5OihzdCxndCk9Pntmb3IodmFyIFJ0PTAsdG49c3QubGVuZ3RoLTE7dG4+PTA7dG4tLSl7dmFyIHduPXN0W3RuXTsiLiI9PT13bj9zdC5zcGxpY2UodG4sMSk6Ii4uIj09PXduPyhzdC5zcGxpY2UodG4sMSksUnQrKyk6UnQmJihzdC5zcGxpY2UodG4sMSksUnQtLSl9'@;
put 'aWYoZ3QpZm9yKDtSdDtSdC0tKXN0LnVuc2hpZnQoIi4uIik7cmV0dXJuIHN0fSxub3JtYWxpemU6c3Q9Pnt2YXIgZ3Q9UmkuaXNBYnMoc3QpLFJ0PSIvIj09PXN0LnN1YnN0cigtMSk7cmV0dXJuKHN0PVJpLm5vcm1hbGl6ZUFycmF5KHN0LnNwbGl0KCIvIikuZmlsdGVyKHRuPT4hIXRuKSwh'@;
put 'Z3QpLmpvaW4oIi8iKSl8fGd0fHwoc3Q9Ii4iKSxzdCYmUnQmJihzdCs9Ii8iKSwoZ3Q/Ii8iOiIiKStzdH0sZGlybmFtZTpzdD0+e3ZhciBndD1SaS5zcGxpdFBhdGgoc3QpLFJ0PWd0WzBdLHRuPWd0WzFdO3JldHVybiBSdHx8dG4/KHRuJiYodG49dG4uc3Vic3RyKDAsdG4ubGVuZ3RoLTEp'@;
put 'KSxSdCt0bik6Ii4ifSxiYXNlbmFtZTpzdD0+e2lmKCIvIj09PXN0KXJldHVybiIvIjt2YXIgZ3Q9KHN0PShzdD1SaS5ub3JtYWxpemUoc3QpKS5yZXBsYWNlKC9cLyQvLCIiKSkubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWd0P3N0OnN0LnN1YnN0cihndCsxKX0sam9pbjpmdW5jdGlv'@;
put 'bigpe3ZhciBzdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBSaS5ub3JtYWxpemUoc3Quam9pbigiLyIpKX0sam9pbjI6KHN0LGd0KT0+Umkubm9ybWFsaXplKHN0KyIvIitndCl9LFhvPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBzdD0iIixndD0h'@;
put 'MSxSdD1hcmd1bWVudHMubGVuZ3RoLTE7UnQ+PS0xJiYhZ3Q7UnQtLSl7dmFyIHRuPVJ0Pj0wP2FyZ3VtZW50c1tSdF06QXQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiB0bil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIp'@;
put 'O2lmKCF0bilyZXR1cm4iIjtzdD10bisiLyIrc3QsZ3Q9UmkuaXNBYnModG4pfXJldHVybihndD8iLyI6IiIpKyhzdD1SaS5ub3JtYWxpemVBcnJheShzdC5zcGxpdCgiLyIpLmZpbHRlcih3bj0+ISF3biksIWd0KS5qb2luKCIvIikpfHwiLiJ9LHJlbGF0aXZlOihzdCxndCk9PntmdW5jdGlv'@;
put 'biBSdChNbyl7Zm9yKHZhciBmbz0wO2ZvPE1vLmxlbmd0aCYmIiI9PT1Nb1tmb107Zm8rKyk7Zm9yKHZhciBKbz1Nby5sZW5ndGgtMTtKbz49MCYmIiI9PT1Nb1tKb107Sm8tLSk7cmV0dXJuIGZvPkpvP1tdOk1vLnNsaWNlKGZvLEpvLWZvKzEpfXN0PVhvLnJlc29sdmUoc3QpLnN1YnN0cigx'@;
put 'KSxndD1Yby5yZXNvbHZlKGd0KS5zdWJzdHIoMSk7Zm9yKHZhciB0bj1SdChzdC5zcGxpdCgiLyIpKSx3bj1SdChndC5zcGxpdCgiLyIpKSxzcj1NYXRoLm1pbih0bi5sZW5ndGgsd24ubGVuZ3RoKSxscj1zcixScj0wO1JyPHNyO1JyKyspaWYodG5bUnJdIT09d25bUnJdKXtscj1ScjticmVh'@;
put 'a312YXIgZ289W107Zm9yKFJyPWxyO1JyPHRuLmxlbmd0aDtScisrKWdvLnB1c2goIi4uIik7cmV0dXJuKGdvPWdvLmNvbmNhdCh3bi5zbGljZShscikpKS5qb2luKCIvIil9fTtmdW5jdGlvbiBHbyhzdCxndCxSdCl7dmFyIHRuPVJ0PjA/UnQ6RWkoc3QpKzEsd249bmV3IEFycmF5KHRuKSxz'@;
put 'cj1JcihzdCx3biwwLHduLmxlbmd0aCk7cmV0dXJuIGd0JiYod24ubGVuZ3RoPXNyKSx3bn12YXIgSnM9e3R0eXM6W10saW5pdDpmdW5jdGlvbigpe30sc2h1dGRvd246ZnVuY3Rpb24oKXt9LHJlZ2lzdGVyOmZ1bmN0aW9uKHN0LGd0KXtKcy50dHlzW3N0XT17aW5wdXQ6W10sb3V0cHV0Oltd'@;
put 'LG9wczpndH0sQXQucmVnaXN0ZXJEZXZpY2Uoc3QsSnMuc3RyZWFtX29wcyl9LHN0cmVhbV9vcHM6e29wZW46ZnVuY3Rpb24oc3Qpe3ZhciBndD1Kcy50dHlzW3N0Lm5vZGUucmRldl07aWYoIWd0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQzKTtzdC50dHk9Z3Qsc3Quc2Vla2FibGU9ITF9'@;
put 'LGNsb3NlOmZ1bmN0aW9uKHN0KXtzdC50dHkub3BzLmZzeW5jKHN0LnR0eSl9LGZzeW5jOmZ1bmN0aW9uKHN0KXtzdC50dHkub3BzLmZzeW5jKHN0LnR0eSl9LHJlYWQ6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe2lmKCFzdC50dHl8fCFzdC50dHkub3BzLmdldF9jaGFyKXRocm93IG5ldyBB'@;
put 'dC5FcnJub0Vycm9yKDYwKTtmb3IodmFyIHNyPTAsbHI9MDtscjx0bjtscisrKXt2YXIgUnI7dHJ5e1JyPXN0LnR0eS5vcHMuZ2V0X2NoYXIoc3QudHR5KX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09UnImJjA9PT1zcil0aHJvdyBuZXcgQXQuRXJybm9F'@;
put 'cnJvcig2KTtpZihudWxsPT1ScilicmVhaztzcisrLGd0W1J0K2xyXT1Scn1yZXR1cm4gc3ImJihzdC5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxzcn0sd3JpdGU6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe2lmKCFzdC50dHl8fCFzdC50dHkub3BzLnB1dF9jaGFyKXRocm93IG5ldyBB'@;
put 'dC5FcnJub0Vycm9yKDYwKTt0cnl7Zm9yKHZhciBzcj0wO3NyPHRuO3NyKyspc3QudHR5Lm9wcy5wdXRfY2hhcihzdC50dHksZ3RbUnQrc3JdKX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9cmV0dXJuIHRuJiYoc3Qubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksc3J9fSxk'@;
put 'ZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyOmZ1bmN0aW9uKHN0KXtpZighc3QuaW5wdXQubGVuZ3RoKXt2YXIgZ3Q9bnVsbDtpZih0eXBlb2Ygd2luZG93PCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5wcm9tcHQ/bnVsbCE9PShndD13aW5kb3cucHJvbXB0KCJJbnB1dDogIikpJiYo'@;
put 'Z3QrPSJcbiIpOiJmdW5jdGlvbiI9PXR5cGVvZiByZWFkbGluZSYmbnVsbCE9PShndD1yZWFkbGluZSgpKSYmKGd0Kz0iXG4iKSwhZ3QpcmV0dXJuIG51bGw7c3QuaW5wdXQ9R28oZ3QsITApfXJldHVybiBzdC5pbnB1dC5zaGlmdCgpfSxwdXRfY2hhcjpmdW5jdGlvbihzdCxndCl7bnVsbD09'@;
put 'PWd0fHwxMD09PWd0PyhXKE5uKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKTowIT1ndCYmc3Qub3V0cHV0LnB1c2goZ3QpfSxmc3luYzpmdW5jdGlvbihzdCl7c3Qub3V0cHV0JiZzdC5vdXRwdXQubGVuZ3RoPjAmJihXKE5uKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKX19LGRlZmF1'@;
put 'bHRfdHR5MV9vcHM6e3B1dF9jaGFyOmZ1bmN0aW9uKHN0LGd0KXtudWxsPT09Z3R8fDEwPT09Z3Q/KGllKE5uKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKTowIT1ndCYmc3Qub3V0cHV0LnB1c2goZ3QpfSxmc3luYzpmdW5jdGlvbihzdCl7c3Qub3V0cHV0JiZzdC5vdXRwdXQubGVuZ3Ro'@;
put 'PjAmJihpZShObihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSl9fX07ZnVuY3Rpb24gZ2Eoc3Qpe3N0PTY1NTM2Kk1hdGguY2VpbChzdC82NTUzNik7dmFyIFJ0LGd0PXh3KDY1NTM2LHN0KTtyZXR1cm4gZ3Q/KHl0LmZpbGwoMCxSdD1ndCxSdCtzdCksUnQpOjB9dmFyIHVvPXtvcHNfdGFi'@;
put 'bGU6bnVsbCxtb3VudDpmdW5jdGlvbihzdCl7cmV0dXJuIHVvLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCl9LGNyZWF0ZU5vZGU6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe2lmKEF0LmlzQmxrZGV2KFJ0KXx8QXQuaXNGSUZPKFJ0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7dW8u'@;
put 'b3BzX3RhYmxlfHwodW8ub3BzX3RhYmxlPXtkaXI6e25vZGU6e2dldGF0dHI6dW8ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnVvLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOnVvLm5vZGVfb3BzLmxvb2t1cCxta25vZDp1by5ub2RlX29wcy5ta25vZCxyZW5hbWU6dW8ubm9kZV9vcHMucmVu'@;
put 'YW1lLHVubGluazp1by5ub2RlX29wcy51bmxpbmsscm1kaXI6dW8ubm9kZV9vcHMucm1kaXIscmVhZGRpcjp1by5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6dW8ubm9kZV9vcHMuc3ltbGlua30sc3RyZWFtOntsbHNlZWs6dW8uc3RyZWFtX29wcy5sbHNlZWt9fSxmaWxlOntub2RlOntnZXRh'@;
put 'dHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2Vlazp1by5zdHJlYW1fb3BzLmxsc2VlayxyZWFkOnVvLnN0cmVhbV9vcHMucmVhZCx3cml0ZTp1by5zdHJlYW1fb3BzLndyaXRlLGFsbG9jYXRlOnVvLnN0cmVhbV9vcHMuYWxs'@;
put 'b2NhdGUsbW1hcDp1by5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6dW8uc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6dW8ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnVvLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6dW8ubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7'@;
put 'fX0sY2hyZGV2Ontub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06QXQuY2hyZGV2X3N0cmVhbV9vcHN9fSk7dmFyIHduPUF0LmNyZWF0ZU5vZGUoc3QsZ3QsUnQsdG4pO3JldHVybiBBdC5pc0Rpcih3bi5tb2RlKT8o'@;
put 'd24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmRpci5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmRpci5zdHJlYW0sd24uY29udGVudHM9e30pOkF0LmlzRmlsZSh3bi5tb2RlKT8od24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmZpbGUubm9kZSx3bi5zdHJlYW1fb3BzPXVvLm9wc190'@;
put 'YWJsZS5maWxlLnN0cmVhbSx3bi51c2VkQnl0ZXM9MCx3bi5jb250ZW50cz1udWxsKTpBdC5pc0xpbmsod24ubW9kZSk/KHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5saW5rLm5vZGUsd24uc3RyZWFtX29wcz11by5vcHNfdGFibGUubGluay5zdHJlYW0pOkF0LmlzQ2hyZGV2KHduLm1vZGUp'@;
put 'JiYod24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmNocmRldi5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLHduLnRpbWVzdGFtcD1EYXRlLm5vdygpLHN0JiYoc3QuY29udGVudHNbZ3RdPXduLHN0LnRpbWVzdGFtcD13bi50aW1lc3RhbXApLHdufSxnZXRG'@;
put 'aWxlRGF0YUFzVHlwZWRBcnJheTpmdW5jdGlvbihzdCl7cmV0dXJuIHN0LmNvbnRlbnRzP3N0LmNvbnRlbnRzLnN1YmFycmF5P3N0LmNvbnRlbnRzLnN1YmFycmF5KDAsc3QudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShzdC5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCl9LGV4cGFuZEZp'@;
put 'bGVTdG9yYWdlOmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9c3QuY29udGVudHM/c3QuY29udGVudHMubGVuZ3RoOjA7aWYoIShSdD49Z3QpKXtndD1NYXRoLm1heChndCxSdCooUnQ8MTA0ODU3Nj8yOjEuMTI1KT4+PjApLDAhPVJ0JiYoZ3Q9TWF0aC5tYXgoZ3QsMjU2KSk7dmFyIHRuPXN0LmNv'@;
put 'bnRlbnRzO3N0LmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGd0KSxzdC51c2VkQnl0ZXM+MCYmc3QuY29udGVudHMuc2V0KHRuLnN1YmFycmF5KDAsc3QudXNlZEJ5dGVzKSwwKX19LHJlc2l6ZUZpbGVTdG9yYWdlOmZ1bmN0aW9uKHN0LGd0KXtpZihzdC51c2VkQnl0ZXMhPWd0KWlmKDA9PWd0'@;
put 'KXN0LmNvbnRlbnRzPW51bGwsc3QudXNlZEJ5dGVzPTA7ZWxzZXt2YXIgUnQ9c3QuY29udGVudHM7c3QuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkoZ3QpLFJ0JiZzdC5jb250ZW50cy5zZXQoUnQuc3ViYXJyYXkoMCxNYXRoLm1pbihndCxzdC51c2VkQnl0ZXMpKSksc3QudXNlZEJ5dGVzPWd0'@;
put 'fX0sbm9kZV9vcHM6e2dldGF0dHI6ZnVuY3Rpb24oc3Qpe3ZhciBndD17fTtyZXR1cm4gZ3QuZGV2PUF0LmlzQ2hyZGV2KHN0Lm1vZGUpP3N0LmlkOjEsZ3QuaW5vPXN0LmlkLGd0Lm1vZGU9c3QubW9kZSxndC5ubGluaz0xLGd0LnVpZD0wLGd0LmdpZD0wLGd0LnJkZXY9c3QucmRldixndC5z'@;
put 'aXplPUF0LmlzRGlyKHN0Lm1vZGUpPzQwOTY6QXQuaXNGaWxlKHN0Lm1vZGUpP3N0LnVzZWRCeXRlczpBdC5pc0xpbmsoc3QubW9kZSk/c3QubGluay5sZW5ndGg6MCxndC5hdGltZT1uZXcgRGF0ZShzdC50aW1lc3RhbXApLGd0Lm10aW1lPW5ldyBEYXRlKHN0LnRpbWVzdGFtcCksZ3QuY3Rp'@;
put 'bWU9bmV3IERhdGUoc3QudGltZXN0YW1wKSxndC5ibGtzaXplPTQwOTYsZ3QuYmxvY2tzPU1hdGguY2VpbChndC5zaXplL2d0LmJsa3NpemUpLGd0fSxzZXRhdHRyOmZ1bmN0aW9uKHN0LGd0KXt2b2lkIDAhPT1ndC5tb2RlJiYoc3QubW9kZT1ndC5tb2RlKSx2b2lkIDAhPT1ndC50aW1lc3Rh'@;
put 'bXAmJihzdC50aW1lc3RhbXA9Z3QudGltZXN0YW1wKSx2b2lkIDAhPT1ndC5zaXplJiZ1by5yZXNpemVGaWxlU3RvcmFnZShzdCxndC5zaXplKX0sbG9va3VwOmZ1bmN0aW9uKHN0LGd0KXt0aHJvdyBBdC5nZW5lcmljRXJyb3JzWzQ0XX0sbWtub2Q6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3Jl'@;
put 'dHVybiB1by5jcmVhdGVOb2RlKHN0LGd0LFJ0LHRuKX0scmVuYW1lOmZ1bmN0aW9uKHN0LGd0LFJ0KXtpZihBdC5pc0RpcihzdC5tb2RlKSl7dmFyIHRuO3RyeXt0bj1BdC5sb29rdXBOb2RlKGd0LFJ0KX1jYXRjaHt9aWYodG4pZm9yKHZhciB3biBpbiB0bi5jb250ZW50cyl0aHJvdyBuZXcg'@;
put 'QXQuRXJybm9FcnJvcig1NSl9ZGVsZXRlIHN0LnBhcmVudC5jb250ZW50c1tzdC5uYW1lXSxzdC5wYXJlbnQudGltZXN0YW1wPURhdGUubm93KCksc3QubmFtZT1SdCxndC5jb250ZW50c1tSdF09c3QsZ3QudGltZXN0YW1wPXN0LnBhcmVudC50aW1lc3RhbXAsc3QucGFyZW50PWd0fSx1bmxp'@;
put 'bms6ZnVuY3Rpb24oc3QsZ3Qpe2RlbGV0ZSBzdC5jb250ZW50c1tndF0sc3QudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyOmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9QXQubG9va3VwTm9kZShzdCxndCk7Zm9yKHZhciB0biBpbiBSdC5jb250ZW50cyl0aHJvdyBuZXcgQXQuRXJybm9FcnJv'@;
put 'cig1NSk7ZGVsZXRlIHN0LmNvbnRlbnRzW2d0XSxzdC50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcjpmdW5jdGlvbihzdCl7dmFyIGd0PVsiLiIsIi4uIl07Zm9yKHZhciBSdCBpbiBzdC5jb250ZW50cylzdC5jb250ZW50cy5oYXNPd25Qcm9wZXJ0eShSdCkmJmd0LnB1c2goUnQpO3Jl'@;
put 'dHVybiBndH0sc3ltbGluazpmdW5jdGlvbihzdCxndCxSdCl7dmFyIHRuPXVvLmNyZWF0ZU5vZGUoc3QsZ3QsNDE0NzEsMCk7cmV0dXJuIHRuLmxpbms9UnQsdG59LHJlYWRsaW5rOmZ1bmN0aW9uKHN0KXtpZighQXQuaXNMaW5rKHN0Lm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4'@;
put 'KTtyZXR1cm4gc3QubGlua319LHN0cmVhbV9vcHM6e3JlYWQ6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe3ZhciBzcj1zdC5ub2RlLmNvbnRlbnRzO2lmKHduPj1zdC5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgbHI9TWF0aC5taW4oc3Qubm9kZS51c2VkQnl0ZXMtd24sdG4pO2lmKGxy'@;
put 'PjgmJnNyLnN1YmFycmF5KWd0LnNldChzci5zdWJhcnJheSh3bix3bitsciksUnQpO2Vsc2UgZm9yKHZhciBScj0wO1JyPGxyO1JyKyspZ3RbUnQrUnJdPXNyW3duK1JyXTtyZXR1cm4gbHJ9LHdyaXRlOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduLHNyKXtpZihndC5idWZmZXI9PT1ldC5idWZm'@;
put 'ZXImJihzcj0hMSksIXRuKXJldHVybiAwO3ZhciBscj1zdC5ub2RlO2lmKGxyLnRpbWVzdGFtcD1EYXRlLm5vdygpLGd0LnN1YmFycmF5JiYoIWxyLmNvbnRlbnRzfHxsci5jb250ZW50cy5zdWJhcnJheSkpe2lmKHNyKXJldHVybiBsci5jb250ZW50cz1ndC5zdWJhcnJheShSdCxSdCt0biks'@;
put 'bHIudXNlZEJ5dGVzPXRuLHRuO2lmKDA9PT1sci51c2VkQnl0ZXMmJjA9PT13bilyZXR1cm4gbHIuY29udGVudHM9Z3Quc2xpY2UoUnQsUnQrdG4pLGxyLnVzZWRCeXRlcz10bix0bjtpZih3bit0bjw9bHIudXNlZEJ5dGVzKXJldHVybiBsci5jb250ZW50cy5zZXQoZ3Quc3ViYXJyYXkoUnQs'@;
put 'UnQrdG4pLHduKSx0bn1pZih1by5leHBhbmRGaWxlU3RvcmFnZShscix3bit0biksbHIuY29udGVudHMuc3ViYXJyYXkmJmd0LnN1YmFycmF5KWxyLmNvbnRlbnRzLnNldChndC5zdWJhcnJheShSdCxSdCt0biksd24pO2Vsc2UgZm9yKHZhciBScj0wO1JyPHRuO1JyKyspbHIuY29udGVudHNb'@;
put 'd24rUnJdPWd0W1J0K1JyXTtyZXR1cm4gbHIudXNlZEJ5dGVzPU1hdGgubWF4KGxyLnVzZWRCeXRlcyx3bit0biksdG59LGxsc2VlazpmdW5jdGlvbihzdCxndCxSdCl7dmFyIHRuPWd0O2lmKDE9PT1SdD90bis9c3QucG9zaXRpb246Mj09PVJ0JiZBdC5pc0ZpbGUoc3Qubm9kZS5tb2RlKSYm'@;
put 'KHRuKz1zdC5ub2RlLnVzZWRCeXRlcyksdG48MCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIHRufSxhbGxvY2F0ZTpmdW5jdGlvbihzdCxndCxSdCl7dW8uZXhwYW5kRmlsZVN0b3JhZ2Uoc3Qubm9kZSxndCtSdCksc3Qubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoc3Qubm9k'@;
put 'ZS51c2VkQnl0ZXMsZ3QrUnQpfSxtbWFwOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighQXQuaXNGaWxlKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO3ZhciBzcixscixScj1zdC5ub2RlLmNvbnRlbnRzO2lmKDImd258fFJyLmJ1ZmZlciE9PWl0KXtpZigo'@;
put 'UnQ+MHx8UnQrZ3Q8UnIubGVuZ3RoKSYmKFJyPVJyLnN1YmFycmF5P1JyLnN1YmFycmF5KFJ0LFJ0K2d0KTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChScixSdCxSdCtndCkpLGxyPSEwLCEoc3I9Z2EoZ3QpKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0OCk7ZXQuc2V0KFJyLHNyKX1l'@;
put 'bHNlIGxyPSExLHNyPVJyLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpzcixhbGxvY2F0ZWQ6bHJ9fSxtc3luYzpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7cmV0dXJuIHVvLnN0cmVhbV9vcHMud3JpdGUoc3QsZ3QsMCx0bixSdCwhMSksMH19fSxBdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZp'@;
put 'Y2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLEVycm5vRXJyb3I6bnVsbCxnZW5lcmljRXJyb3JzOnt9LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxs'@;
put 'b29rdXBQYXRoOihzdCxndD17fSk9PntpZighKHN0PVhvLnJlc29sdmUoc3QpKSlyZXR1cm57cGF0aDoiIixub2RlOm51bGx9O2lmKChndD1PYmplY3QuYXNzaWduKHtmb2xsb3dfbW91bnQ6ITAscmVjdXJzZV9jb3VudDowfSxndCkpLnJlY3Vyc2VfY291bnQ+OCl0aHJvdyBuZXcgQXQuRXJy'@;
put 'bm9FcnJvcigzMik7Zm9yKHZhciBSdD1zdC5zcGxpdCgiLyIpLmZpbHRlcihNbz0+ISFNbyksdG49QXQucm9vdCx3bj0iLyIsc3I9MDtzcjxSdC5sZW5ndGg7c3IrKyl7dmFyIGxyPXNyPT09UnQubGVuZ3RoLTE7aWYobHImJmd0LnBhcmVudClicmVhaztpZih0bj1BdC5sb29rdXBOb2RlKHRu'@;
put 'LFJ0W3NyXSksd249Umkuam9pbjIod24sUnRbc3JdKSxBdC5pc01vdW50cG9pbnQodG4pJiYoIWxyfHxsciYmZ3QuZm9sbG93X21vdW50KSYmKHRuPXRuLm1vdW50ZWQucm9vdCksIWxyfHxndC5mb2xsb3cpZm9yKHZhciBScj0wO0F0LmlzTGluayh0bi5tb2RlKTspe3ZhciBnbz1BdC5yZWFk'@;
put 'bGluayh3bik7aWYod249WG8ucmVzb2x2ZShSaS5kaXJuYW1lKHduKSxnbyksdG49QXQubG9va3VwUGF0aCh3bix7cmVjdXJzZV9jb3VudDpndC5yZWN1cnNlX2NvdW50KzF9KS5ub2RlLFJyKys+NDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzIpfX1yZXR1cm57cGF0aDp3bixub2RlOnRu'@;
put 'fX0sZ2V0UGF0aDpzdD0+e2Zvcih2YXIgZ3Q7Oyl7aWYoQXQuaXNSb290KHN0KSl7dmFyIFJ0PXN0Lm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGd0PyIvIiE9PVJ0W1J0Lmxlbmd0aC0xXT9SdCsiLyIrZ3Q6UnQrZ3Q6UnR9Z3Q9Z3Q/c3QubmFtZSsiLyIrZ3Q6c3QubmFtZSxzdD1zdC5wYXJl'@;
put 'bnR9fSxoYXNoTmFtZTooc3QsZ3QpPT57Zm9yKHZhciBSdD0wLHRuPTA7dG48Z3QubGVuZ3RoO3RuKyspUnQ9KFJ0PDw1KS1SdCtndC5jaGFyQ29kZUF0KHRuKXwwO3JldHVybihzdCtSdD4+PjApJUF0Lm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlOnN0PT57dmFyIGd0PUF0Lmhhc2hO'@;
put 'YW1lKHN0LnBhcmVudC5pZCxzdC5uYW1lKTtzdC5uYW1lX25leHQ9QXQubmFtZVRhYmxlW2d0XSxBdC5uYW1lVGFibGVbZ3RdPXN0fSxoYXNoUmVtb3ZlTm9kZTpzdD0+e3ZhciBndD1BdC5oYXNoTmFtZShzdC5wYXJlbnQuaWQsc3QubmFtZSk7aWYoQXQubmFtZVRhYmxlW2d0XT09PXN0KUF0'@;
put 'Lm5hbWVUYWJsZVtndF09c3QubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciBSdD1BdC5uYW1lVGFibGVbZ3RdO1J0Oyl7aWYoUnQubmFtZV9uZXh0PT09c3Qpe1J0Lm5hbWVfbmV4dD1zdC5uYW1lX25leHQ7YnJlYWt9UnQ9UnQubmFtZV9uZXh0fX0sbG9va3VwTm9kZTooc3QsZ3QpPT57dmFyIFJ0'@;
put 'PUF0Lm1heUxvb2t1cChzdCk7aWYoUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoUnQsc3QpO2Zvcih2YXIgdG49QXQuaGFzaE5hbWUoc3QuaWQsZ3QpLHduPUF0Lm5hbWVUYWJsZVt0bl07d247d249d24ubmFtZV9uZXh0KWlmKHduLnBhcmVudC5pZD09PXN0LmlkJiZ3bi5uYW1lPT09Z3Qp'@;
put 'cmV0dXJuIHduO3JldHVybiBBdC5sb29rdXAoc3QsZ3QpfSxjcmVhdGVOb2RlOihzdCxndCxSdCx0bik9Pnt2YXIgd249bmV3IEF0LkZTTm9kZShzdCxndCxSdCx0bik7cmV0dXJuIEF0Lmhhc2hBZGROb2RlKHduKSx3bn0sZGVzdHJveU5vZGU6c3Q9PntBdC5oYXNoUmVtb3ZlTm9kZShzdCl9'@;
put 'LGlzUm9vdDpzdD0+c3Q9PT1zdC5wYXJlbnQsaXNNb3VudHBvaW50OnN0PT4hIXN0Lm1vdW50ZWQsaXNGaWxlOnN0PT4zMjc2OD09KDYxNDQwJnN0KSxpc0RpcjpzdD0+MTYzODQ9PSg2MTQ0MCZzdCksaXNMaW5rOnN0PT40MDk2MD09KDYxNDQwJnN0KSxpc0NocmRldjpzdD0+ODE5Mj09KDYx'@;
put 'NDQwJnN0KSxpc0Jsa2RldjpzdD0+MjQ1NzY9PSg2MTQ0MCZzdCksaXNGSUZPOnN0PT40MDk2PT0oNjE0NDAmc3QpLGlzU29ja2V0OnN0PT40OTE1Mj09KDQ5MTUyJnN0KSxmbGFnTW9kZXM6e3I6MCwicisiOjIsdzo1NzcsIncrIjo1NzgsYToxMDg5LCJhKyI6MTA5MH0sbW9kZVN0cmluZ1Rv'@;
put 'RmxhZ3M6c3Q9Pnt2YXIgZ3Q9QXQuZmxhZ01vZGVzW3N0XTtpZih2b2lkIDA9PT1ndCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZmlsZSBvcGVuIG1vZGU6ICIrc3QpO3JldHVybiBndH0sZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmc6c3Q9Pnt2YXIgZ3Q9WyJyIiwidyIsInJ3Il1bMyZzdF07'@;
put 'cmV0dXJuIDUxMiZzdCYmKGd0Kz0idyIpLGd0fSxub2RlUGVybWlzc2lvbnM6KHN0LGd0KT0+QXQuaWdub3JlUGVybWlzc2lvbnN8fCghZ3QuaW5jbHVkZXMoInIiKXx8MjkyJnN0Lm1vZGUpJiYoIWd0LmluY2x1ZGVzKCJ3Iil8fDE0NiZzdC5tb2RlKSYmKCFndC5pbmNsdWRlcygieCIpfHw3'@;
put 'MyZzdC5tb2RlKT8wOjIsbWF5TG9va3VwOnN0PT5BdC5ub2RlUGVybWlzc2lvbnMoc3QsIngiKXx8KHN0Lm5vZGVfb3BzLmxvb2t1cD8wOjIpLG1heUNyZWF0ZTooc3QsZ3QpPT57dHJ5e3JldHVybiBBdC5sb29rdXBOb2RlKHN0LGd0KSwyMH1jYXRjaHt9cmV0dXJuIEF0Lm5vZGVQZXJtaXNz'@;
put 'aW9ucyhzdCwid3giKX0sbWF5RGVsZXRlOihzdCxndCxSdCk9Pnt2YXIgdG47dHJ5e3RuPUF0Lmxvb2t1cE5vZGUoc3QsZ3QpfWNhdGNoKHNyKXtyZXR1cm4gc3IuZXJybm99dmFyIHduPUF0Lm5vZGVQZXJtaXNzaW9ucyhzdCwid3giKTtpZih3bilyZXR1cm4gd247aWYoUnQpe2lmKCFBdC5p'@;
put 'c0Rpcih0bi5tb2RlKSlyZXR1cm4gNTQ7aWYoQXQuaXNSb290KHRuKXx8QXQuZ2V0UGF0aCh0bik9PT1BdC5jd2QoKSlyZXR1cm4gMTB9ZWxzZSBpZihBdC5pc0Rpcih0bi5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW46KHN0LGd0KT0+c3Q/QXQuaXNMaW5rKHN0Lm1vZGUpPzMy'@;
put 'OkF0LmlzRGlyKHN0Lm1vZGUpJiYoInIiIT09QXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZ3QpfHw1MTImZ3QpPzMxOkF0Lm5vZGVQZXJtaXNzaW9ucyhzdCxBdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhndCkpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZDooc3Q9MCxndD1BdC5N'@;
put 'QVhfT1BFTl9GRFMpPT57Zm9yKHZhciBSdD1zdDtSdDw9Z3Q7UnQrKylpZighQXQuc3RyZWFtc1tSdF0pcmV0dXJuIFJ0O3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtOnN0PT5BdC5zdHJlYW1zW3N0XSxjcmVhdGVTdHJlYW06KHN0LGd0LFJ0KT0+e0F0LkZTU3RyZWFt'@;
put 'fHwoQXQuRlNTdHJlYW09ZnVuY3Rpb24oKXt0aGlzLnNoYXJlZD17fX0sQXQuRlNTdHJlYW0ucHJvdG90eXBlPXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF0LkZTU3RyZWFtLnByb3RvdHlwZSx7b2JqZWN0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlfSxzZXQ6ZnVuY3Rp'@;
put 'b24od24pe3RoaXMubm9kZT13bn19LGlzUmVhZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNXcml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDAhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNBcHBlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biAxMDI0JnRoaXMuZmxhZ3N9fSxmbGFnczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfSxzZXQ6ZnVuY3Rpb24od24pe3RoaXMuc2hhcmVkLmZsYWdzPXdufX0scG9zaXRpb246e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn0sc2V0'@;
put 'OmZ1bmN0aW9uKHduKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj13bn19fSkpLHN0PU9iamVjdC5hc3NpZ24obmV3IEF0LkZTU3RyZWFtLHN0KTt2YXIgdG49QXQubmV4dGZkKGd0LFJ0KTtyZXR1cm4gc3QuZmQ9dG4sQXQuc3RyZWFtc1t0bl09c3Qsc3R9LGNsb3NlU3RyZWFtOnN0PT57QXQuc3Ry'@;
put 'ZWFtc1tzdF09bnVsbH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW46c3Q9Pnt2YXIgZ3Q9QXQuZ2V0RGV2aWNlKHN0Lm5vZGUucmRldik7c3Quc3RyZWFtX29wcz1ndC5zdHJlYW1fb3BzLHN0LnN0cmVhbV9vcHMub3BlbiYmc3Quc3RyZWFtX29wcy5vcGVuKHN0KX0sbGxzZWVrOigpPT57dGhy'@;
put 'b3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfX0sbWFqb3I6c3Q9PnN0Pj44LG1pbm9yOnN0PT4yNTUmc3QsbWFrZWRldjooc3QsZ3QpPT5zdDw8OHxndCxyZWdpc3RlckRldmljZTooc3QsZ3QpPT57QXQuZGV2aWNlc1tzdF09e3N0cmVhbV9vcHM6Z3R9fSxnZXREZXZpY2U6c3Q9PkF0LmRldmlj'@;
put 'ZXNbc3RdLGdldE1vdW50czpzdD0+e2Zvcih2YXIgZ3Q9W10sUnQ9W3N0XTtSdC5sZW5ndGg7KXt2YXIgdG49UnQucG9wKCk7Z3QucHVzaCh0biksUnQucHVzaC5hcHBseShSdCx0bi5tb3VudHMpfXJldHVybiBndH0sc3luY2ZzOihzdCxndCk9PnsiZnVuY3Rpb24iPT10eXBlb2Ygc3QmJihn'@;
put 'dD1zdCxzdD0hMSksQXQuc3luY0ZTUmVxdWVzdHMrKyxBdC5zeW5jRlNSZXF1ZXN0cz4xJiZpZSgid2FybmluZzogIitBdC5zeW5jRlNSZXF1ZXN0cysiIEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmsiKTt2YXIg'@;
put 'UnQ9QXQuZ2V0TW91bnRzKEF0LnJvb3QubW91bnQpLHRuPTA7ZnVuY3Rpb24gd24obHIpe3JldHVybiBBdC5zeW5jRlNSZXF1ZXN0cy0tLGd0KGxyKX1mdW5jdGlvbiBzcihscil7aWYobHIpcmV0dXJuIHNyLmVycm9yZWQ/dm9pZCAwOihzci5lcnJvcmVkPSEwLHduKGxyKSk7Kyt0bj49UnQu'@;
put 'bGVuZ3RoJiZ3bihudWxsKX1SdC5mb3JFYWNoKGxyPT57aWYoIWxyLnR5cGUuc3luY2ZzKXJldHVybiBzcihudWxsKTtsci50eXBlLnN5bmNmcyhscixzdCxzcil9KX0sbW91bnQ6KHN0LGd0LFJ0KT0+e3ZhciB0bix3bj0iLyI9PT1SdCxzcj0hUnQ7aWYod24mJkF0LnJvb3QpdGhyb3cgbmV3'@;
put 'IEF0LkVycm5vRXJyb3IoMTApO2lmKCF3biYmIXNyKXt2YXIgbHI9QXQubG9va3VwUGF0aChSdCx7Zm9sbG93X21vdW50OiExfSk7aWYoUnQ9bHIucGF0aCxBdC5pc01vdW50cG9pbnQodG49bHIubm9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2lmKCFBdC5pc0Rpcih0bi5tb2Rl'@;
put 'KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NCl9dmFyIFJyPXt0eXBlOnN0LG9wdHM6Z3QsbW91bnRwb2ludDpSdCxtb3VudHM6W119LGdvPXN0Lm1vdW50KFJyKTtyZXR1cm4gZ28ubW91bnQ9UnIsUnIucm9vdD1nbyx3bj9BdC5yb290PWdvOnRuJiYodG4ubW91bnRlZD1Scix0bi5tb3Vu'@;
put 'dCYmdG4ubW91bnQubW91bnRzLnB1c2goUnIpKSxnb30sdW5tb3VudDpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3dfbW91bnQ6ITF9KTtpZighQXQuaXNNb3VudHBvaW50KGd0Lm5vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgUnQ9Z3Qubm9kZSx0bj1S'@;
put 'dC5tb3VudGVkLHduPUF0LmdldE1vdW50cyh0bik7T2JqZWN0LmtleXMoQXQubmFtZVRhYmxlKS5mb3JFYWNoKGxyPT57Zm9yKHZhciBScj1BdC5uYW1lVGFibGVbbHJdO1JyOyl7dmFyIGdvPVJyLm5hbWVfbmV4dDt3bi5pbmNsdWRlcyhSci5tb3VudCkmJkF0LmRlc3Ryb3lOb2RlKFJyKSxS'@;
put 'cj1nb319KSxSdC5tb3VudGVkPW51bGw7dmFyIHNyPVJ0Lm1vdW50Lm1vdW50cy5pbmRleE9mKHRuKTtSdC5tb3VudC5tb3VudHMuc3BsaWNlKHNyLDEpfSxsb29rdXA6KHN0LGd0KT0+c3Qubm9kZV9vcHMubG9va3VwKHN0LGd0KSxta25vZDooc3QsZ3QsUnQpPT57dmFyIHRuPUF0Lmxvb2t1'@;
put 'cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGUsd249UmkuYmFzZW5hbWUoc3QpO2lmKCF3bnx8Ii4iPT09d258fCIuLiI9PT13bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIHNyPUF0Lm1heUNyZWF0ZSh0bix3bik7aWYoc3IpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Ioc3IpO2lm'@;
put 'KCF0bi5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7cmV0dXJuIHRuLm5vZGVfb3BzLm1rbm9kKHRuLHduLGd0LFJ0KX0sY3JlYXRlOihzdCxndCk9PihndD12b2lkIDAhPT1ndD9ndDo0MzgsZ3QmPTQwOTUsQXQubWtub2Qoc3QsZ3R8PTMyNzY4LDApKSxta2Rp'@;
put 'cjooc3QsZ3QpPT4oZ3Q9dm9pZCAwIT09Z3Q/Z3Q6NTExLGd0Jj0xMDIzLEF0Lm1rbm9kKHN0LGd0fD0xNjM4NCwwKSksbWtkaXJUcmVlOihzdCxndCk9Pntmb3IodmFyIFJ0PXN0LnNwbGl0KCIvIiksdG49IiIsd249MDt3bjxSdC5sZW5ndGg7Kyt3bilpZihSdFt3bl0pe3RuKz0iLyIrUnRb'@;
put 'd25dO3RyeXtBdC5ta2Rpcih0bixndCl9Y2F0Y2goc3Ipe2lmKDIwIT1zci5lcnJubyl0aHJvdyBzcn19fSxta2Rldjooc3QsZ3QsUnQpPT4odm9pZCAwPT09UnQmJihSdD1ndCxndD00MzgpLEF0Lm1rbm9kKHN0LGd0fD04MTkyLFJ0KSksc3ltbGluazooc3QsZ3QpPT57aWYoIVhvLnJlc29s'@;
put 'dmUoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTt2YXIgUnQ9QXQubG9va3VwUGF0aChndCx7cGFyZW50OiEwfSkubm9kZTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO3ZhciB0bj1SaS5iYXNlbmFtZShndCksd249QXQubWF5Q3JlYXRlKFJ0LHRuKTtpZih3bil0'@;
put 'aHJvdyBuZXcgQXQuRXJybm9FcnJvcih3bik7aWYoIVJ0Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3JldHVybiBSdC5ub2RlX29wcy5zeW1saW5rKFJ0LHRuLHN0KX0scmVuYW1lOihzdCxndCk9Pnt2YXIgUnQsdG4sd249UmkuZGlybmFtZShzdCksc3I9'@;
put 'UmkuZGlybmFtZShndCksbHI9UmkuYmFzZW5hbWUoc3QpLFJyPVJpLmJhc2VuYW1lKGd0KTtpZihSdD1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlLHRuPUF0Lmxvb2t1cFBhdGgoZ3Qse3BhcmVudDohMH0pLm5vZGUsIVJ0fHwhdG4pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Io'@;
put 'NDQpO2lmKFJ0Lm1vdW50IT09dG4ubW91bnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzUpO3ZhciBnbyxNbz1BdC5sb29rdXBOb2RlKFJ0LGxyKSxmbz1Yby5yZWxhdGl2ZShzdCxzcik7aWYoIi4iIT09Zm8uY2hhckF0KDApKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtpZigiLiIh'@;
put 'PT0oZm89WG8ucmVsYXRpdmUoZ3Qsd24pKS5jaGFyQXQoMCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTUpO3RyeXtnbz1BdC5sb29rdXBOb2RlKHRuLFJyKX1jYXRjaHt9aWYoTW8hPT1nbyl7dmFyIEpvPUF0LmlzRGlyKE1vLm1vZGUpLFlpPUF0Lm1heURlbGV0ZShSdCxscixKbyk7aWYo'@;
put 'WWkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoWWkpO2lmKFlpPWdvP0F0Lm1heURlbGV0ZSh0bixScixKbyk6QXQubWF5Q3JlYXRlKHRuLFJyKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihZaSk7aWYoIVJ0Lm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7aWYo'@;
put 'QXQuaXNNb3VudHBvaW50KE1vKXx8Z28mJkF0LmlzTW91bnRwb2ludChnbykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2lmKHRuIT09UnQmJihZaT1BdC5ub2RlUGVybWlzc2lvbnMoUnQsInciKSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoWWkpO0F0Lmhhc2hSZW1vdmVOb2RlKE1v'@;
put 'KTt0cnl7UnQubm9kZV9vcHMucmVuYW1lKE1vLHRuLFJyKX1jYXRjaChZcyl7dGhyb3cgWXN9ZmluYWxseXtBdC5oYXNoQWRkTm9kZShNbyl9fX0scm1kaXI6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSkubm9kZSxSdD1SaS5iYXNlbmFtZShzdCksdG49QXQubG9v'@;
put 'a3VwTm9kZShndCxSdCksd249QXQubWF5RGVsZXRlKGd0LFJ0LCEwKTtpZih3bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcih3bik7aWYoIWd0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtpZihBdC5pc01vdW50cG9pbnQodG4pKXRocm93IG5ldyBBdC5FcnJu'@;
put 'b0Vycm9yKDEwKTtndC5ub2RlX29wcy5ybWRpcihndCxSdCksQXQuZGVzdHJveU5vZGUodG4pfSxyZWFkZGlyOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU7aWYoIWd0Lm5vZGVfb3BzLnJlYWRkaXIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTQpO3Jl'@;
put 'dHVybiBndC5ub2RlX29wcy5yZWFkZGlyKGd0KX0sdW5saW5rOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGU7aWYoIWd0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTt2YXIgUnQ9UmkuYmFzZW5hbWUoc3QpLHRuPUF0Lmxvb2t1cE5vZGUoZ3QsUnQp'@;
put 'LHduPUF0Lm1heURlbGV0ZShndCxSdCwhMSk7aWYod24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Iod24pO2lmKCFndC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO2lmKEF0LmlzTW91bnRwb2ludCh0bikpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2d0'@;
put 'Lm5vZGVfb3BzLnVubGluayhndCxSdCksQXQuZGVzdHJveU5vZGUodG4pfSxyZWFkbGluazpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0KS5ub2RlO2lmKCFndCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoIWd0Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBBdC5FcnJu'@;
put 'b0Vycm9yKDI4KTtyZXR1cm4gWG8ucmVzb2x2ZShBdC5nZXRQYXRoKGd0LnBhcmVudCksZ3Qubm9kZV9vcHMucmVhZGxpbmsoZ3QpKX0sc3RhdDooc3QsZ3QpPT57dmFyIFJ0PUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohZ3R9KS5ub2RlO2lmKCFSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJv'@;
put 'cig0NCk7aWYoIVJ0Lm5vZGVfb3BzLmdldGF0dHIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3JldHVybiBSdC5ub2RlX29wcy5nZXRhdHRyKFJ0KX0sbHN0YXQ6c3Q9PkF0LnN0YXQoc3QsITApLGNobW9kOihzdCxndCxSdCk9Pnt2YXIgdG47aWYoISh0bj0ic3RyaW5nIj09dHlwZW9m'@;
put 'IHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohUnR9KS5ub2RlOnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTt0bi5ub2RlX29wcy5zZXRhdHRyKHRuLHttb2RlOjQwOTUmZ3R8LTQwOTYmdG4ubW9kZSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxs'@;
put 'Y2htb2Q6KHN0LGd0KT0+e0F0LmNobW9kKHN0LGd0LCEwKX0sZmNobW9kOihzdCxndCk9Pnt2YXIgUnQ9QXQuZ2V0U3RyZWFtKHN0KTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7QXQuY2htb2QoUnQubm9kZSxndCl9LGNob3duOihzdCxndCxSdCx0bik9Pnt2YXIgd247aWYo'@;
put 'ISh3bj0ic3RyaW5nIj09dHlwZW9mIHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohdG59KS5ub2RlOnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTt3bi5ub2RlX29wcy5zZXRhdHRyKHduLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd246'@;
put 'KHN0LGd0LFJ0KT0+e0F0LmNob3duKHN0LGd0LFJ0LCEwKX0sZmNob3duOihzdCxndCxSdCk9Pnt2YXIgdG49QXQuZ2V0U3RyZWFtKHN0KTtpZighdG4pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7QXQuY2hvd24odG4ubm9kZSxndCxSdCl9LHRydW5jYXRlOihzdCxndCk9PntpZihndDww'@;
put 'KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgUnQ7aWYoIShSdD0ic3RyaW5nIj09dHlwZW9mIHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU6c3QpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO2lmKEF0LmlzRGlyKFJ0Lm1v'@;
put 'ZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMxKTtpZighQXQuaXNGaWxlKFJ0Lm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgdG49QXQubm9kZVBlcm1pc3Npb25zKFJ0LCJ3Iik7aWYodG4pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IodG4pO1J0Lm5vZGVfb3BzLnNl'@;
put 'dGF0dHIoUnQse3NpemU6Z3QsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlOihzdCxndCk9Pnt2YXIgUnQ9QXQuZ2V0U3RyZWFtKHN0KTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoISgyMDk3MTU1JlJ0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJv'@;
put 'cigyOCk7QXQudHJ1bmNhdGUoUnQubm9kZSxndCl9LHV0aW1lOihzdCxndCxSdCk9Pnt2YXIgdG49QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEwfSkubm9kZTt0bi5ub2RlX29wcy5zZXRhdHRyKHRuLHt0aW1lc3RhbXA6TWF0aC5tYXgoZ3QsUnQpfSl9LG9wZW46KHN0LGd0LFJ0KT0+e2lm'@;
put 'KCIiPT09c3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO3ZhciB0bjtpZihSdD12b2lkIDA9PT1SdD80Mzg6UnQsUnQ9NjQmKGd0PSJzdHJpbmciPT10eXBlb2YgZ3Q/QXQubW9kZVN0cmluZ1RvRmxhZ3MoZ3QpOmd0KT80MDk1JlJ0fDMyNzY4OjAsIm9iamVjdCI9PXR5cGVvZiBzdCl0'@;
put 'bj1zdDtlbHNle3N0PVJpLm5vcm1hbGl6ZShzdCk7dHJ5e3RuPUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohKDEzMTA3MiZndCl9KS5ub2RlfWNhdGNoe319dmFyIHduPSExO2lmKDY0Jmd0KWlmKHRuKXtpZigxMjgmZ3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjApfWVsc2UgdG49QXQu'@;
put 'bWtub2Qoc3QsUnQsMCksd249ITA7aWYoIXRuKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtpZihBdC5pc0NocmRldih0bi5tb2RlKSYmKGd0Jj0tNTEzKSw2NTUzNiZndCYmIUF0LmlzRGlyKHRuLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU0KTtpZighd24pe3ZhciBzcj1B'@;
put 'dC5tYXlPcGVuKHRuLGd0KTtpZihzcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihzcil9NTEyJmd0JiYhd24mJkF0LnRydW5jYXRlKHRuLDApLGd0Jj0tMTMxNzEzO3ZhciBscj1BdC5jcmVhdGVTdHJlYW0oe25vZGU6dG4scGF0aDpBdC5nZXRQYXRoKHRuKSxmbGFnczpndCxzZWVrYWJsZToh'@;
put 'MCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6dG4uc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBsci5zdHJlYW1fb3BzLm9wZW4mJmxyLnN0cmVhbV9vcHMub3BlbihsciksIWQubG9nUmVhZEZpbGVzfHwxJmd0fHwoQXQucmVhZEZpbGVzfHwoQXQucmVhZEZpbGVzPXt9'@;
put 'KSxzdCBpbiBBdC5yZWFkRmlsZXN8fChBdC5yZWFkRmlsZXNbc3RdPTEpKSxscn0sY2xvc2U6c3Q9PntpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7c3QuZ2V0ZGVudHMmJihzdC5nZXRkZW50cz1udWxsKTt0cnl7c3Quc3RyZWFtX29wcy5jbG9zZSYmc3Qu'@;
put 'c3RyZWFtX29wcy5jbG9zZShzdCl9Y2F0Y2goZ3Qpe3Rocm93IGd0fWZpbmFsbHl7QXQuY2xvc2VTdHJlYW0oc3QuZmQpfXN0LmZkPW51bGx9LGlzQ2xvc2VkOnN0PT5udWxsPT09c3QuZmQsbGxzZWVrOihzdCxndCxSdCk9PntpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5v'@;
put 'RXJyb3IoOCk7aWYoIXN0LnNlZWthYmxlfHwhc3Quc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApO2lmKDAhPVJ0JiYxIT1SdCYmMiE9UnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3JldHVybiBzdC5wb3NpdGlvbj1zdC5zdHJlYW1fb3BzLmxsc2Vl'@;
put 'ayhzdCxndCxSdCksc3QudW5nb3R0ZW49W10sc3QucG9zaXRpb259LHJlYWQ6KHN0LGd0LFJ0LHRuLHduKT0+e2lmKHRuPDB8fHduPDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKEF0LmlzQ2xvc2VkKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1'@;
put 'NSZzdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoQXQuaXNEaXIoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMSk7aWYoIXN0LnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIHNyPXZvaWQgMCE9PXduO2lm'@;
put 'KHNyKXtpZighc3Quc2Vla2FibGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfWVsc2Ugd249c3QucG9zaXRpb247dmFyIGxyPXN0LnN0cmVhbV9vcHMucmVhZChzdCxndCxSdCx0bix3bik7cmV0dXJuIHNyfHwoc3QucG9zaXRpb24rPWxyKSxscn0sd3JpdGU6KHN0LGd0LFJ0LHRuLHdu'@;
put 'LHNyKT0+e2lmKHRuPDB8fHduPDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKEF0LmlzQ2xvc2VkKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZighKDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKEF0LmlzRGlyKHN0Lm5vZGUu'@;
put 'bW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzEpO2lmKCFzdC5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtzdC5zZWVrYWJsZSYmMTAyNCZzdC5mbGFncyYmQXQubGxzZWVrKHN0LDAsMik7dmFyIGxyPXZvaWQgMCE9PXduO2lmKGxyKXtpZighc3Qu'@;
put 'c2Vla2FibGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfWVsc2Ugd249c3QucG9zaXRpb247dmFyIFJyPXN0LnN0cmVhbV9vcHMud3JpdGUoc3QsZ3QsUnQsdG4sd24sc3IpO3JldHVybiBscnx8KHN0LnBvc2l0aW9uKz1SciksUnJ9LGFsbG9jYXRlOihzdCxndCxSdCk9PntpZihBdC5p'@;
put 'c0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoZ3Q8MHx8UnQ8PTApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKCEoMjA5NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoIUF0LmlzRmlsZShzdC5ub2RlLm1vZGUpJiYhQXQu'@;
put 'aXNEaXIoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0Myk7aWYoIXN0LnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTM4KTtzdC5zdHJlYW1fb3BzLmFsbG9jYXRlKHN0LGd0LFJ0KX0sbW1hcDooc3QsZ3QsUnQsdG4sd24pPT57aWYo'@;
put 'MiZ0biYmISgyJnduKSYmMiE9KDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyKTtpZighc3Quc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQz'@;
put 'KTtyZXR1cm4gc3Quc3RyZWFtX29wcy5tbWFwKHN0LGd0LFJ0LHRuLHduKX0sbXN5bmM6KHN0LGd0LFJ0LHRuLHduKT0+c3Quc3RyZWFtX29wcy5tc3luYz9zdC5zdHJlYW1fb3BzLm1zeW5jKHN0LGd0LFJ0LHRuLHduKTowLG11bm1hcDpzdD0+MCxpb2N0bDooc3QsZ3QsUnQpPT57aWYoIXN0'@;
put 'LnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTkpO3JldHVybiBzdC5zdHJlYW1fb3BzLmlvY3RsKHN0LGd0LFJ0KX0scmVhZEZpbGU6KHN0LGd0PXt9KT0+e2lmKGd0LmZsYWdzPWd0LmZsYWdzfHwwLGd0LmVuY29kaW5nPWd0LmVuY29kaW5nfHwiYmluYXJ5Iiwi'@;
put 'dXRmOCIhPT1ndC5lbmNvZGluZyYmImJpbmFyeSIhPT1ndC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSAiJytndC5lbmNvZGluZysnIicpO3ZhciBSdCx0bj1BdC5vcGVuKHN0LGd0LmZsYWdzKSx3bj1BdC5zdGF0KHN0KS5zaXplLHNyPW5ldyBVaW50'@;
put 'OEFycmF5KHduKTtyZXR1cm4gQXQucmVhZCh0bixzciwwLHduLDApLCJ1dGY4Ij09PWd0LmVuY29kaW5nP1J0PU5uKHNyLDApOiJiaW5hcnkiPT09Z3QuZW5jb2RpbmcmJihSdD1zciksQXQuY2xvc2UodG4pLFJ0fSx3cml0ZUZpbGU6KHN0LGd0LFJ0PXt9KT0+e1J0LmZsYWdzPVJ0LmZsYWdz'@;
put 'fHw1Nzc7dmFyIHRuPUF0Lm9wZW4oc3QsUnQuZmxhZ3MsUnQubW9kZSk7aWYoInN0cmluZyI9PXR5cGVvZiBndCl7dmFyIHduPW5ldyBVaW50OEFycmF5KEVpKGd0KSsxKSxzcj1JcihndCx3biwwLHduLmxlbmd0aCk7QXQud3JpdGUodG4sd24sMCxzcix2b2lkIDAsUnQuY2FuT3duKX1lbHNl'@;
put 'e2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZ3QpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7QXQud3JpdGUodG4sZ3QsMCxndC5ieXRlTGVuZ3RoLHZvaWQgMCxSdC5jYW5Pd24pfUF0LmNsb3NlKHRuKX0sY3dkOigpPT5BdC5jdXJyZW50UGF0aCxjaGRpcjpzdD0+'@;
put 'e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KTtpZihudWxsPT09Z3Qubm9kZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoIUF0LmlzRGlyKGd0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTQpO3ZhciBSdD1BdC5ub2RlUGVybWlzc2lvbnMo'@;
put 'Z3Qubm9kZSwieCIpO2lmKFJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFJ0KTtBdC5jdXJyZW50UGF0aD1ndC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXM6KCk9PntBdC5ta2RpcigiL3RtcCIpLEF0Lm1rZGlyKCIvaG9tZSIpLEF0Lm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxj'@;
put 'cmVhdGVEZWZhdWx0RGV2aWNlczooKT0+e0F0Lm1rZGlyKCIvZGV2IiksQXQucmVnaXN0ZXJEZXZpY2UoQXQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihndCxSdCx0bix3bixzcik9PndufSksQXQubWtkZXYoIi9kZXYvbnVsbCIsQXQubWFrZWRldigxLDMpKSxKcy5yZWdpc3Rl'@;
put 'cihBdC5tYWtlZGV2KDUsMCksSnMuZGVmYXVsdF90dHlfb3BzKSxKcy5yZWdpc3RlcihBdC5tYWtlZGV2KDYsMCksSnMuZGVmYXVsdF90dHkxX29wcyksQXQubWtkZXYoIi9kZXYvdHR5IixBdC5tYWtlZGV2KDUsMCkpLEF0Lm1rZGV2KCIvZGV2L3R0eTEiLEF0Lm1ha2VkZXYoNiwwKSk7dmFy'@;
put 'IHN0PWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgZ3Q9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuKCk9PihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGd0KSxndFswXSl9cmV0dXJuKCk9'@;
put 'PkVuKCJyYW5kb21EZXZpY2UiKX0oKTtBdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHN0KSxBdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixzdCksQXQubWtkaXIoIi9kZXYvc2htIiksQXQubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3Jp'@;
put 'ZXM6KCk9PntBdC5ta2RpcigiL3Byb2MiKTt2YXIgc3Q9QXQubWtkaXIoIi9wcm9jL3NlbGYiKTtBdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLEF0Lm1vdW50KHttb3VudDooKT0+e3ZhciBndD1BdC5jcmVhdGVOb2RlKHN0LCJmZCIsMTY4OTUsNzMpO3JldHVybiBndC5ub2RlX29wcz17bG9v'@;
put 'a3VwOihSdCx0bik9Pnt2YXIgc3I9QXQuZ2V0U3RyZWFtKCt0bik7aWYoIXNyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO3ZhciBscj17cGFyZW50Om51bGwsbW91bnQ6e21vdW50cG9pbnQ6ImZha2UifSxub2RlX29wczp7cmVhZGxpbms6KCk9PnNyLnBhdGh9fTtyZXR1cm4gbHIucGFy'@;
put 'ZW50PWxyLGxyfX0sZ3R9fSx7fSwiL3Byb2Mvc2VsZi9mZCIpfSxjcmVhdGVTdGFuZGFyZFN0cmVhbXM6KCk9PntkLnN0ZGluP0F0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGluIixkLnN0ZGluKTpBdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxkLnN0ZG91dD9BdC5jcmVh'@;
put 'dGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsZC5zdGRvdXQpOkF0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxkLnN0ZGVycj9BdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsZC5zdGRlcnIpOkF0LnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3Rk'@;
put 'ZXJyIiksQXQub3BlbigiL2Rldi9zdGRpbiIsMCksQXQub3BlbigiL2Rldi9zdGRvdXQiLDEpLEF0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sZW5zdXJlRXJybm9FcnJvcjooKT0+e0F0LkVycm5vRXJyb3J8fChBdC5FcnJub0Vycm9yPWZ1bmN0aW9uKHN0LGd0KXt0aGlzLm5vZGU9Z3QsdGhp'@;
put 'cy5zZXRFcnJubz1mdW5jdGlvbihSdCl7dGhpcy5lcnJubz1SdH0sdGhpcy5zZXRFcnJubyhzdCksdGhpcy5tZXNzYWdlPSJGUyBlcnJvciJ9LEF0LkVycm5vRXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcixBdC5FcnJub0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BdC5FcnJub0Vycm9y'@;
put 'LFs0NF0uZm9yRWFjaChzdD0+e0F0LmdlbmVyaWNFcnJvcnNbc3RdPW5ldyBBdC5FcnJub0Vycm9yKHN0KSxBdC5nZW5lcmljRXJyb3JzW3N0XS5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiJ9KSl9LHN0YXRpY0luaXQ6KCk9PntBdC5lbnN1cmVFcnJub0Vycm9yKCksQXQubmFt'@;
put 'ZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxBdC5tb3VudCh1byx7fSwiLyIpLEF0LmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLEF0LmNyZWF0ZURlZmF1bHREZXZpY2VzKCksQXQuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksQXQuZmlsZXN5c3RlbXM9e01FTUZTOnVvfX0saW5pdDooc3Qs'@;
put 'Z3QsUnQpPT57QXQuaW5pdC5pbml0aWFsaXplZD0hMCxBdC5lbnN1cmVFcnJub0Vycm9yKCksZC5zdGRpbj1zdHx8ZC5zdGRpbixkLnN0ZG91dD1ndHx8ZC5zdGRvdXQsZC5zdGRlcnI9UnR8fGQuc3RkZXJyLEF0LmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0OigpPT57QXQuaW5pdC5p'@;
put 'bml0aWFsaXplZD0hMTtmb3IodmFyIHN0PTA7c3Q8QXQuc3RyZWFtcy5sZW5ndGg7c3QrKyl7dmFyIGd0PUF0LnN0cmVhbXNbc3RdO2d0JiZBdC5jbG9zZShndCl9fSxnZXRNb2RlOihzdCxndCk9Pnt2YXIgUnQ9MDtyZXR1cm4gc3QmJihSdHw9MzY1KSxndCYmKFJ0fD0xNDYpLFJ0fSxmaW5k'@;
put 'T2JqZWN0OihzdCxndCk9Pnt2YXIgUnQ9QXQuYW5hbHl6ZVBhdGgoc3QsZ3QpO3JldHVybiBSdC5leGlzdHM/UnQub2JqZWN0Om51bGx9LGFuYWx5emVQYXRoOihzdCxndCk9Pnt0cnl7c3Q9KHRuPUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohZ3R9KSkucGF0aH1jYXRjaHt9dmFyIFJ0PXtp'@;
put 'c1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIHRuPUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pO1J0LnBhcmVudEV4aXN0'@;
put 'cz0hMCxSdC5wYXJlbnRQYXRoPXRuLnBhdGgsUnQucGFyZW50T2JqZWN0PXRuLm5vZGUsUnQubmFtZT1SaS5iYXNlbmFtZShzdCksdG49QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiFndH0pLFJ0LmV4aXN0cz0hMCxSdC5wYXRoPXRuLnBhdGgsUnQub2JqZWN0PXRuLm5vZGUsUnQubmFtZT10'@;
put 'bi5ub2RlLm5hbWUsUnQuaXNSb290PSIvIj09PXRuLnBhdGh9Y2F0Y2god24pe1J0LmVycm9yPXduLmVycm5vfXJldHVybiBSdH0sY3JlYXRlUGF0aDooc3QsZ3QsUnQsdG4pPT57c3Q9InN0cmluZyI9PXR5cGVvZiBzdD9zdDpBdC5nZXRQYXRoKHN0KTtmb3IodmFyIHduPWd0LnNwbGl0KCIv'@;
put 'IikucmV2ZXJzZSgpO3duLmxlbmd0aDspe3ZhciBzcj13bi5wb3AoKTtpZihzcil7dmFyIGxyPVJpLmpvaW4yKHN0LHNyKTt0cnl7QXQubWtkaXIobHIpfWNhdGNoe31zdD1scn19cmV0dXJuIGxyfSxjcmVhdGVGaWxlOihzdCxndCxSdCx0bix3bik9Pnt2YXIgc3I9Umkuam9pbjIoInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBzdD9zdDpBdC5nZXRQYXRoKHN0KSxndCksbHI9QXQuZ2V0TW9kZSh0bix3bik7cmV0dXJuIEF0LmNyZWF0ZShzcixscil9LGNyZWF0ZURhdGFGaWxlOihzdCxndCxSdCx0bix3bixzcik9Pnt2YXIgbHI9Z3Q7c3QmJihzdD0ic3RyaW5nIj09dHlwZW9mIHN0P3N0OkF0Lmdl'@;
put 'dFBhdGgoc3QpLGxyPWd0P1JpLmpvaW4yKHN0LGd0KTpzdCk7dmFyIFJyPUF0LmdldE1vZGUodG4sd24pLGdvPUF0LmNyZWF0ZShscixScik7aWYoUnQpe2lmKCJzdHJpbmciPT10eXBlb2YgUnQpe2Zvcih2YXIgTW89bmV3IEFycmF5KFJ0Lmxlbmd0aCksZm89MCxKbz1SdC5sZW5ndGg7Zm88'@;
put 'Sm87KytmbylNb1tmb109UnQuY2hhckNvZGVBdChmbyk7UnQ9TW99QXQuY2htb2QoZ28sMTQ2fFJyKTt2YXIgWWk9QXQub3Blbihnbyw1NzcpO0F0LndyaXRlKFlpLFJ0LDAsUnQubGVuZ3RoLDAsc3IpLEF0LmNsb3NlKFlpKSxBdC5jaG1vZChnbyxScil9cmV0dXJuIGdvfSxjcmVhdGVEZXZp'@;
put 'Y2U6KHN0LGd0LFJ0LHRuKT0+e3ZhciB3bj1SaS5qb2luMigic3RyaW5nIj09dHlwZW9mIHN0P3N0OkF0LmdldFBhdGgoc3QpLGd0KSxzcj1BdC5nZXRNb2RlKCEhUnQsISF0bik7QXQuY3JlYXRlRGV2aWNlLm1ham9yfHwoQXQuY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgbHI9QXQubWFr'@;
put 'ZWRldihBdC5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gQXQucmVnaXN0ZXJEZXZpY2UobHIse29wZW46UnI9PntSci5zZWVrYWJsZT0hMX0sY2xvc2U6UnI9Pnt0biYmdG4uYnVmZmVyJiZ0bi5idWZmZXIubGVuZ3RoJiZ0bigxMCl9LHJlYWQ6KFJyLGdvLE1vLGZvLEpvKT0+e2Zv'@;
put 'cih2YXIgWWk9MCxZcz0wO1lzPGZvO1lzKyspe3ZhciBMbDt0cnl7TGw9UnQoKX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09TGwmJjA9PT1ZaSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2KTtpZihudWxsPT1MbClicmVhaztZaSsrLGdvW01vK1lzXT1M'@;
put 'bH1yZXR1cm4gWWkmJihSci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxZaX0sd3JpdGU6KFJyLGdvLE1vLGZvLEpvKT0+e2Zvcih2YXIgWWk9MDtZaTxmbztZaSsrKXRyeXt0bihnb1tNbytZaV0pfWNhdGNoe3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gZm8mJihSci5u'@;
put 'b2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxZaX19KSxBdC5ta2Rldih3bixzcixscil9LGZvcmNlTG9hZEZpbGU6c3Q9PntpZihzdC5pc0RldmljZXx8c3QuaXNGb2xkZXJ8fHN0Lmxpbmt8fHN0LmNvbnRlbnRzKXJldHVybiEwO3Rocm93IHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSI/bmV3'@;
put 'IEVycm9yKCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMgbm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxv'@;
put 'YWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTpuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LiIpfSxjcmVhdGVMYXp5RmlsZTooc3QsZ3QsUnQsdG4sd24pPT57ZnVuY3Rpb24gc3IoKXt0aGlzLmxlbmd0aEtub3duPSEx'@;
put 'LHRoaXMuY2h1bmtzPVtdfWlmKHNyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZm8pe2lmKCEoZm8+dGhpcy5sZW5ndGgtMXx8Zm88MCkpe3ZhciBKbz1mbyV0aGlzLmNodW5rU2l6ZTtyZXR1cm4gdGhpcy5nZXR0ZXIoZm8vdGhpcy5jaHVua1NpemV8MClbSm9dfX0sc3IucHJvdG90eXBlLnNl'@;
put 'dERhdGFHZXR0ZXI9ZnVuY3Rpb24oZm8pe3RoaXMuZ2V0dGVyPWZvfSxzci5wcm90b3R5cGUuY2FjaGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZm89bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGZvLm9wZW4oIkhFQUQiLFJ0LCExKSxmby5zZW5kKG51bGwpLCEoZm8uc3RhdHVzPj0yMDAmJmZvLnN0'@;
put 'YXR1czwzMDB8fDMwND09PWZvLnN0YXR1cykpdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBsb2FkICIrUnQrIi4gU3RhdHVzOiAiK2ZvLnN0YXR1cyk7dmFyIEpvLFlpPU51bWJlcihmby5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSksWXM9KEpvPWZvLmdldFJlc3BvbnNl'@;
put 'SGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiYiYnl0ZXMiPT09Sm8sTGw9KEpvPWZvLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LUVuY29kaW5nIikpJiYiZ3ppcCI9PT1KbyxNbD0xMDQ4NTc2O1lzfHwoTWw9WWkpO3ZhciBRdT10aGlzO1F1LnNldERhdGFHZXR0ZXIoY2w9Pnt2YXIga2k9'@;
put 'Y2wqTWwsam89KGNsKzEpKk1sLTE7aWYoam89TWF0aC5taW4oam8sWWktMSksdm9pZCAwPT09UXUuY2h1bmtzW2NsXSYmKFF1LmNodW5rc1tjbF09KChxYyxSbCk9PntpZihxYz5SbCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmFuZ2UgKCIrcWMrIiwgIitSbCsiKSBvciBubyBieXRlcyBy'@;
put 'ZXF1ZXN0ZWQhIik7aWYoUmw+WWktMSl0aHJvdyBuZXcgRXJyb3IoIm9ubHkgIitZaSsiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgbmM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKG5jLm9wZW4oIkdFVCIsUnQsITEpLFlpIT09TWwmJm5jLnNldFJlcXVlc3RIZWFk'@;
put 'ZXIoIlJhbmdlIiwiYnl0ZXM9IitxYysiLSIrUmwpLG5jLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLG5jLm92ZXJyaWRlTWltZVR5cGUmJm5jLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQiKSxuYy5zZW5kKG51bGwpLCEobmMuc3RhdHVz'@;
put 'Pj0yMDAmJm5jLnN0YXR1czwzMDB8fDMwND09PW5jLnN0YXR1cykpdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBsb2FkICIrUnQrIi4gU3RhdHVzOiAiK25jLnN0YXR1cyk7cmV0dXJuIHZvaWQgMCE9PW5jLnJlc3BvbnNlP25ldyBVaW50OEFycmF5KG5jLnJlc3BvbnNlfHxbXSk6R28obmMu'@;
put 'cmVzcG9uc2VUZXh0fHwiIiwhMCl9KShraSxqbykpLHZvaWQgMD09PVF1LmNodW5rc1tjbF0pdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIFF1LmNodW5rc1tjbF19KSwhTGwmJllpfHwoTWw9WWk9MSxZaT10aGlzLmdldHRlcigwKS5sZW5ndGgsTWw9WWksVygiTGF6'@;
put 'eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD1ZaSx0aGlzLl9jaHVua1NpemU9TWwsdGhpcy5sZW5ndGhLbm93bj0hMH0sdHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyJD'@;
put 'YW5ub3QgZG8gc3luY2hyb25vdXMgYmluYXJ5IFhIUnMgb3V0c2lkZSB3ZWJ3b3JrZXJzIGluIG1vZGVybiBicm93c2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIjt2YXIgbHI9e2lzRGV2aWNlOiExLHVybDpSdH0sUnI9QXQuY3JlYXRlRmlsZShzdCxn'@;
put 'dCxscix0bix3bik7bHIuY29udGVudHM/UnIuY29udGVudHM9bHIuY29udGVudHM6bHIudXJsJiYoUnIuY29udGVudHM9bnVsbCxSci51cmw9bHIudXJsKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhScix7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5s'@;
put 'ZW5ndGh9fX0pO3ZhciBnbz17fTtmdW5jdGlvbiBNbyhmbyxKbyxZaSxZcyxMbCl7dmFyIE1sPWZvLm5vZGUuY29udGVudHM7aWYoTGw+PU1sLmxlbmd0aClyZXR1cm4gMDt2YXIgUXU9TWF0aC5taW4oTWwubGVuZ3RoLUxsLFlzKTtpZihNbC5zbGljZSlmb3IodmFyIGNsPTA7Y2w8UXU7Y2wr'@;
put 'KylKb1tZaStjbF09TWxbTGwrY2xdO2Vsc2UgZm9yKGNsPTA7Y2w8UXU7Y2wrKylKb1tZaStjbF09TWwuZ2V0KExsK2NsKTtyZXR1cm4gUXV9cmV0dXJuIE9iamVjdC5rZXlzKFJyLnN0cmVhbV9vcHMpLmZvckVhY2goZm89Pnt2YXIgSm89UnIuc3RyZWFtX29wc1tmb107Z29bZm9dPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEF0LmZvcmNlTG9hZEZpbGUoUnIpLEpvLmFwcGx5KG51bGwsYXJndW1lbnRzKX19KSxnby5yZWFkPShmbyxKbyxZaSxZcyxMbCk9PihBdC5mb3JjZUxvYWRGaWxlKFJyKSxNbyhmbyxKbyxZaSxZcyxMbCkpLGdvLm1tYXA9KGZvLEpvLFlpLFlzLExsKT0+e0F0LmZvcmNl'@;
put 'TG9hZEZpbGUoUnIpO3ZhciBNbD1nYShKbyk7aWYoIU1sKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gTW8oZm8sZXQsTWwsSm8sWWkpLHtwdHI6TWwsYWxsb2NhdGVkOiEwfX0sUnIuc3RyZWFtX29wcz1nbyxScn0sY3JlYXRlUHJlbG9hZGVkRmlsZTooc3QsZ3QsUnQsdG4s'@;
put 'd24sc3IsbHIsUnIsZ28sTW8pPT57dmFyIFlpLExsLFF1LGZvPWd0P1hvLnJlc29sdmUoUmkuam9pbjIoc3QsZ3QpKTpzdDtmdW5jdGlvbiBKbyhZaSl7ZnVuY3Rpb24gWXMoTGwpe01vJiZNbygpLFJyfHxBdC5jcmVhdGVEYXRhRmlsZShzdCxndCxMbCx0bix3bixnbyksc3ImJnNyKCksY24o'@;
put 'KX1Ccm93c2VyLmhhbmRsZWRCeVByZWxvYWRQbHVnaW4oWWksZm8sWXMsKCk9PntsciYmbHIoKSxjbigpfSl8fFlzKFlpKX1PdCgpLCJzdHJpbmciPT10eXBlb2YgUnQ/KExsPWxyLFF1PSJhbCAiKyhZaT1SdCksKHZvaWQgMCkoWWksY2w9PntaZShjbCwnTG9hZGluZyBkYXRhIGZpbGUgIicr'@;
put 'WWkrJyIgZmFpbGVkIChubyBhcnJheUJ1ZmZlcikuJyksKFlpPT57Sm8oWWkpfSkobmV3IFVpbnQ4QXJyYXkoY2wpKSxRdSYmY24oKX0sY2w9PntpZighTGwpdGhyb3cnTG9hZGluZyBkYXRhIGZpbGUgIicrWWkrJyIgZmFpbGVkLic7TGwoKX0pLFF1JiZPdCgpKTpKbyhSdCl9LGluZGV4ZWRE'@;
put 'QjooKT0+d2luZG93LmluZGV4ZWREQnx8d2luZG93Lm1vekluZGV4ZWREQnx8d2luZG93LndlYmtpdEluZGV4ZWREQnx8d2luZG93Lm1zSW5kZXhlZERCLERCX05BTUU6KCk9PiJFTV9GU18iK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxEQl9WRVJTSU9OOjIwLERCX1NUT1JFX05BTUU6IkZJ'@;
put 'TEVfREFUQSIsc2F2ZUZpbGVzVG9EQjooc3QsZ3QsUnQpPT57Z3Q9Z3R8fCgoKT0+e30pLFJ0PVJ0fHwoKCk9Pnt9KTt2YXIgdG49QXQuaW5kZXhlZERCKCk7dHJ5e3ZhciB3bj10bi5vcGVuKEF0LkRCX05BTUUoKSxBdC5EQl9WRVJTSU9OKX1jYXRjaChzcil7cmV0dXJuIFJ0KHNyKX13bi5v'@;
put 'bnVwZ3JhZGVuZWVkZWQ9KCk9PntXKCJjcmVhdGluZyBkYiIpLHduLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZShBdC5EQl9TVE9SRV9OQU1FKX0sd24ub25zdWNjZXNzPSgpPT57dmFyIHNyPXduLnJlc3VsdC50cmFuc2FjdGlvbihbQXQuREJfU1RPUkVfTkFNRV0sInJlYWR3cml0ZSIpLGxy'@;
put 'PXNyLm9iamVjdFN0b3JlKEF0LkRCX1NUT1JFX05BTUUpLFJyPTAsZ289MCxNbz1zdC5sZW5ndGg7ZnVuY3Rpb24gZm8oKXswPT1nbz9ndCgpOlJ0KCl9c3QuZm9yRWFjaChKbz0+e3ZhciBZaT1sci5wdXQoQXQuYW5hbHl6ZVBhdGgoSm8pLm9iamVjdC5jb250ZW50cyxKbyk7WWkub25zdWNj'@;
put 'ZXNzPSgpPT57KytScitnbz09TW8mJmZvKCl9LFlpLm9uZXJyb3I9KCk9PntnbysrLFJyK2dvPT1NbyYmZm8oKX19KSxzci5vbmVycm9yPVJ0fSx3bi5vbmVycm9yPVJ0fSxsb2FkRmlsZXNGcm9tREI6KHN0LGd0LFJ0KT0+e2d0PWd0fHwoKCk9Pnt9KSxSdD1SdHx8KCgpPT57fSk7dmFyIHRu'@;
put 'PUF0LmluZGV4ZWREQigpO3RyeXt2YXIgd249dG4ub3BlbihBdC5EQl9OQU1FKCksQXQuREJfVkVSU0lPTil9Y2F0Y2goc3Ipe3JldHVybiBSdChzcil9d24ub251cGdyYWRlbmVlZGVkPVJ0LHduLm9uc3VjY2Vzcz0oKT0+e3ZhciBzcj13bi5yZXN1bHQ7dHJ5e3ZhciBscj1zci50cmFuc2Fj'@;
put 'dGlvbihbQXQuREJfU1RPUkVfTkFNRV0sInJlYWRvbmx5Iil9Y2F0Y2goWWkpe3JldHVybiB2b2lkIFJ0KFlpKX12YXIgUnI9bHIub2JqZWN0U3RvcmUoQXQuREJfU1RPUkVfTkFNRSksZ289MCxNbz0wLGZvPXN0Lmxlbmd0aDtmdW5jdGlvbiBKbygpezA9PU1vP2d0KCk6UnQoKX1zdC5mb3JF'@;
put 'YWNoKFlpPT57dmFyIFlzPVJyLmdldChZaSk7WXMub25zdWNjZXNzPSgpPT57QXQuYW5hbHl6ZVBhdGgoWWkpLmV4aXN0cyYmQXQudW5saW5rKFlpKSxBdC5jcmVhdGVEYXRhRmlsZShSaS5kaXJuYW1lKFlpKSxSaS5iYXNlbmFtZShZaSksWXMucmVzdWx0LCEwLCEwLCEwKSwrK2dvK01vPT1m'@;
put 'byYmSm8oKX0sWXMub25lcnJvcj0oKT0+e01vKyssZ28rTW89PWZvJiZKbygpfX0pLGxyLm9uZXJyb3I9UnR9LHduLm9uZXJyb3I9UnR9fSxEaT17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0OmZ1bmN0aW9uKHN0LGd0LFJ0KXtpZihSaS5pc0FicyhndCkpcmV0dXJuIGd0O3ZhciB0'@;
put 'bjtpZih0bj0tMTAwPT09c3Q/QXQuY3dkKCk6RGkuZ2V0U3RyZWFtRnJvbUZEKHN0KS5wYXRoLDA9PWd0Lmxlbmd0aCl7aWYoIVJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtyZXR1cm4gdG59cmV0dXJuIFJpLmpvaW4yKHRuLGd0KX0sZG9TdGF0OmZ1bmN0aW9uKHN0LGd0LFJ0KXt0'@;
put 'cnl7dmFyIHRuPXN0KGd0KX1jYXRjaChScil7aWYoUnImJlJyLm5vZGUmJlJpLm5vcm1hbGl6ZShndCkhPT1SaS5ub3JtYWxpemUoQXQuZ2V0UGF0aChSci5ub2RlKSkpcmV0dXJuLTU0O3Rocm93IFJyfVN0W1J0Pj4yXT10bi5kZXYsU3RbUnQrOD4+Ml09dG4uaW5vLFN0W1J0KzEyPj4yXT10'@;
put 'bi5tb2RlLEp0W1J0KzE2Pj4yXT10bi5ubGluayxTdFtSdCsyMD4+Ml09dG4udWlkLFN0W1J0KzI0Pj4yXT10bi5naWQsU3RbUnQrMjg+PjJdPXRuLnJkZXYsT249W3RuLnNpemU+Pj4wLChqcj10bi5zaXplLCtNYXRoLmFicyhqcik+PTE/anI+MD8oMHxNYXRoLm1pbigrTWF0aC5mbG9vcihq'@;
put 'ci80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KSk+Pj4wOn5+K01hdGguY2VpbCgoanItKyh+fmpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sU3RbUnQrNDA+PjJdPU9uWzBdLFN0W1J0KzQ0Pj4yXT1PblsxXSxTdFtSdCs0OD4+Ml09NDA5NixTdFtSdCs1Mj4+Ml09dG4uYmxvY2tzO3ZhciB3'@;
put 'bj10bi5hdGltZS5nZXRUaW1lKCksc3I9dG4ubXRpbWUuZ2V0VGltZSgpLGxyPXRuLmN0aW1lLmdldFRpbWUoKTtyZXR1cm4gT249W01hdGguZmxvb3Iod24vMWUzKT4+PjAsKGpyPU1hdGguZmxvb3Iod24vMWUzKSwrTWF0aC5hYnMoanIpPj0xP2pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxv'@;
put 'b3IoanIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzU2Pj4yXT1PblswXSxTdFtSdCs2MD4+Ml09T25bMV0sSnRbUnQrNjQ+PjJdPXduJTFlMyoxZTMsT249W01hdGguZmxvb3Ioc3Iv'@;
put 'MWUzKT4+PjAsKGpyPU1hdGguZmxvb3Ioc3IvMWUzKSwrTWF0aC5hYnMoanIpPj0xP2pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoanIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0'@;
put 'KzcyPj4yXT1PblswXSxTdFtSdCs3Nj4+Ml09T25bMV0sSnRbUnQrODA+PjJdPXNyJTFlMyoxZTMsT249W01hdGguZmxvb3IobHIvMWUzKT4+PjAsKGpyPU1hdGguZmxvb3IobHIvMWUzKSwrTWF0aC5hYnMoanIpPj0xP2pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoanIvNDI5NDk2NzI5'@;
put 'NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0Kzg4Pj4yXT1PblswXSxTdFtSdCs5Mj4+Ml09T25bMV0sSnRbUnQrOTY+PjJdPWxyJTFlMyoxZTMsT249W3RuLmlubz4+PjAsKGpyPXRuLmlubywrTWF0aC5h'@;
put 'YnMoanIpPj0xP2pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoanIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzEwND4+Ml09T25bMF0sU3RbUnQrMTA4Pj4yXT1PblsxXSwwfSxk'@;
put 'b01zeW5jOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighQXQuaXNGaWxlKGd0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO2lmKDImdG4pcmV0dXJuIDA7dmFyIHNyPXl0LnNsaWNlKHN0LHN0K1J0KTtBdC5tc3luYyhndCxzcix3bixSdCx0bil9LHZhcmFyZ3M6'@;
put 'dm9pZCAwLGdldDpmdW5jdGlvbigpe3JldHVybiBEaS52YXJhcmdzKz00LFN0W0RpLnZhcmFyZ3MtND4+Ml19LGdldFN0cjpmdW5jdGlvbihzdCl7cmV0dXJuIGNyKHN0KX0sZ2V0U3RyZWFtRnJvbUZEOmZ1bmN0aW9uKHN0KXt2YXIgZ3Q9QXQuZ2V0U3RyZWFtKHN0KTtpZighZ3QpdGhyb3cg'@;
put 'bmV3IEF0LkVycm5vRXJyb3IoOCk7cmV0dXJuIGd0fX0sUXM9W107ZnVuY3Rpb24gRnMoc3Qpe3RyeXtyZXR1cm4gcGUuZ3JvdyhzdC1pdC5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLElpKHBlLmJ1ZmZlciksMX1jYXRjaHt9fXZhciB0Yz17fTtmdW5jdGlvbiBDYSgpe2lmKCFDYS5zdHJpbmdz'@;
put 'KXt2YXIgc3Q9e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzooIm9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJD'@;
put 'IikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOl98fCIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2YXIgZ3QgaW4gdGMpdm9pZCAwPT09dGNbZ3RdP2RlbGV0ZSBzdFtndF06c3RbZ3RdPXRjW2d0XTt2YXIgUnQ9W107Zm9yKHZhciBndCBpbiBzdClSdC5wdXNoKGd0KyI9IitzdFtndF0pO0Nh'@;
put 'LnN0cmluZ3M9UnR9cmV0dXJuIENhLnN0cmluZ3N9ZnVuY3Rpb24gSWwoc3Qpe3JldHVybiBzdCU0PT0wJiYoc3QlMTAwIT0wfHxzdCU0MDA9PTApfXZhciB4Mj1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLHU0PVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwz'@;
put 'MCwzMV0sQ2Q9ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3N0fHwoc3Q9dGhpcyksdGhpcy5wYXJlbnQ9c3QsdGhpcy5tb3VudD1zdC5tb3VudCx0aGlzLm1vdW50ZWQ9bnVsbCx0aGlzLmlkPUF0Lm5leHRJbm9kZSsrLHRoaXMubmFtZT1ndCx0aGlzLm1vZGU9UnQsdGhpcy5ub2RlX29wcz17fSx0'@;
put 'aGlzLnN0cmVhbV9vcHM9e30sdGhpcy5yZGV2PXRufTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDZC5wcm90b3R5cGUse3JlYWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAzNjU9PSgzNjUmdGhpcy5tb2RlKX0sc2V0OmZ1bmN0aW9uKHN0KXtzdD90aGlzLm1vZGV8PTM2NTp0aGlzLm1vZGUm'@;
put 'PS0zNjZ9fSx3cml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDE0Nj09KDE0NiZ0aGlzLm1vZGUpfSxzZXQ6ZnVuY3Rpb24oc3Qpe3N0P3RoaXMubW9kZXw9MTQ2OnRoaXMubW9kZSY9LTE0N319LGlzRm9sZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQXQuaXNEaXIodGhpcy5tb2RlKX19'@;
put 'LGlzRGV2aWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQXQuaXNDaHJkZXYodGhpcy5tb2RlKX19fSksQXQuRlNOb2RlPUNkLEF0LnN0YXRpY0luaXQoKTt2YXIgSnU9e2I6ZnVuY3Rpb24oc3QsZ3QsUnQpe3Rocm93IG5ldyBOcihzdCkuaW5pdChndCxSdCksc3R9LGw6ZnVuY3Rpb24oc3Qs'@;
put 'Z3QsUnQsdG4pe3RyeXtpZihndD1EaS5nZXRTdHIoZ3QpLGd0PURpLmNhbGN1bGF0ZUF0KHN0LGd0KSwtOCZSdClyZXR1cm4tMjg7dmFyIHduPUF0Lmxvb2t1cFBhdGgoZ3Qse2ZvbGxvdzohMH0pLm5vZGU7aWYoIXduKXJldHVybi00NDt2YXIgc3I9IiI7cmV0dXJuIDQmUnQmJihzcis9InIi'@;
put 'KSwyJlJ0JiYoc3IrPSJ3IiksMSZSdCYmKHNyKz0ieCIpLHNyJiZBdC5ub2RlUGVybWlzc2lvbnMod24sc3IpPy0yOjB9Y2F0Y2gobHIpe2lmKHZvaWQgMD09PUF0fHwhKGxyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgbHI7cmV0dXJuLWxyLmVycm5vfX0saTpmdW5jdGlvbihz'@;
put 'dCxndCxSdCl7RGkudmFyYXJncz1SdDt0cnl7dmFyIHRuPURpLmdldFN0cmVhbUZyb21GRChzdCk7c3dpdGNoKGd0KXtjYXNlIDA6cmV0dXJuKHduPURpLmdldCgpKTwwPy0yODpBdC5jcmVhdGVTdHJlYW0odG4sd24pLmZkO2Nhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gMDtj'@;
put 'YXNlIDM6cmV0dXJuIHRuLmZsYWdzO2Nhc2UgNDp2YXIgd249RGkuZ2V0KCk7cmV0dXJuIHRuLmZsYWdzfD13biwwO2Nhc2UgNTpyZXR1cm4gd249RGkuZ2V0KCksRXRbd24rMD4+MV09MiwwO2Nhc2UgMTY6Y2FzZSA4OmRlZmF1bHQ6cmV0dXJuLTI4O2Nhc2UgOTpyZXR1cm4gU3RbTXcoKT4+'@;
put 'Ml09MjgsLTF9fWNhdGNoKGxyKXtpZih2b2lkIDA9PT1BdHx8IShsciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGxyO3JldHVybi1sci5lcnJub319LHc6ZnVuY3Rpb24oc3QsZ3Qpe3RyeXt2YXIgUnQ9RGkuZ2V0U3RyZWFtRnJvbUZEKHN0KTtyZXR1cm4gRGkuZG9TdGF0KEF0'@;
put 'LnN0YXQsUnQucGF0aCxndCl9Y2F0Y2godG4pe2lmKHZvaWQgMD09PUF0fHwhKHRuIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgdG47cmV0dXJuLXRuLmVycm5vfX0seDpmdW5jdGlvbihzdCxndCxSdCl7RGkudmFyYXJncz1SdDt0cnl7dmFyIHRuPURpLmdldFN0cmVhbUZyb21G'@;
put 'RChzdCk7c3dpdGNoKGd0KXtjYXNlIDIxNTA5OmNhc2UgMjE1MDU6Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6Y2FzZSAyMTUwNjpjYXNlIDIxNTA3OmNhc2UgMjE1MDg6Y2FzZSAyMTUyMzpjYXNlIDIxNTI0OnJldHVybiB0bi50dHk/MDotNTk7Y2FzZSAyMTUxOTppZighdG4u'@;
put 'dHR5KXJldHVybi01OTt2YXIgd249RGkuZ2V0KCk7cmV0dXJuIFN0W3duPj4yXT0wLDA7Y2FzZSAyMTUyMDpyZXR1cm4gdG4udHR5Py0yODotNTk7Y2FzZSAyMTUzMTpyZXR1cm4gd249RGkuZ2V0KCksQXQuaW9jdGwodG4sZ3Qsd24pO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaChzcil7aWYo'@;
put 'dm9pZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4tc3IuZXJybm99fSx1OmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXt0cnl7Z3Q9RGkuZ2V0U3RyKGd0KTt2YXIgd249MjU2JnRuLHNyPTQwOTYmdG47cmV0dXJuIHRuJj0tNjQwMSxndD1EaS5j'@;
put 'YWxjdWxhdGVBdChzdCxndCxzciksRGkuZG9TdGF0KHduP0F0LmxzdGF0OkF0LnN0YXQsZ3QsUnQpfWNhdGNoKGxyKXtpZih2b2lkIDA9PT1BdHx8IShsciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGxyO3JldHVybi1sci5lcnJub319LGQ6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4p'@;
put 'e0RpLnZhcmFyZ3M9dG47dHJ5e2d0PURpLmdldFN0cihndCksZ3Q9RGkuY2FsY3VsYXRlQXQoc3QsZ3QpO3ZhciB3bj10bj9EaS5nZXQoKTowO3JldHVybiBBdC5vcGVuKGd0LFJ0LHduKS5mZH1jYXRjaChzcil7aWYodm9pZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9y'@;
put 'KSl0aHJvdyBzcjtyZXR1cm4tc3IuZXJybm99fSx2OmZ1bmN0aW9uKHN0LGd0KXt0cnl7cmV0dXJuIHN0PURpLmdldFN0cihzdCksRGkuZG9TdGF0KEF0LnN0YXQsc3QsZ3QpfWNhdGNoKFJ0KXtpZih2b2lkIDA9PT1BdHx8IShSdCBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IFJ0'@;
put 'O3JldHVybi1SdC5lcnJub319LHA6ZnVuY3Rpb24oc3QsZ3QsUnQpe3RyeXtyZXR1cm4gZ3Q9RGkuZ2V0U3RyKGd0KSxndD1EaS5jYWxjdWxhdGVBdChzdCxndCksMD09PVJ0P0F0LnVubGluayhndCk6NTEyPT09UnQ/QXQucm1kaXIoZ3QpOkVuKCJJbnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1'@;
put 'bmxpbmthdCIpLDB9Y2F0Y2godG4pe2lmKHZvaWQgMD09PUF0fHwhKHRuIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgdG47cmV0dXJuLXRuLmVycm5vfX0sajpmdW5jdGlvbigpe3JldHVybiEwfSxxOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduLHNyLGxyKXt0cnl7dmFyIFJyPURp'@;
put 'LmdldFN0cmVhbUZyb21GRCh0biksZ289QXQubW1hcChScixzdCx3bixndCxSdCksTW89Z28ucHRyO3JldHVybiBTdFtzcj4+Ml09Z28uYWxsb2NhdGVkLEp0W2xyPj4yXT1NbywwfWNhdGNoKGZvKXtpZih2b2lkIDA9PT1BdHx8IShmbyBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93'@;
put 'IGZvO3JldHVybi1mby5lcnJub319LHI6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24sc3Ipe3RyeXt2YXIgbHI9RGkuZ2V0U3RyZWFtRnJvbUZEKHduKTsyJlJ0JiZEaS5kb01zeW5jKHN0LGxyLGd0LHRuLHNyKSxBdC5tdW5tYXAobHIpfWNhdGNoKFJyKXtpZih2b2lkIDA9PT1BdHx8IShSciBp'@;
put 'bnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IFJyO3JldHVybi1Sci5lcnJub319LGE6ZnVuY3Rpb24oKXtFbigiIil9LHk6ZnVuY3Rpb24oc3QsZ3QsUnQpe3JldHVybiBmdW5jdGlvbiBsYShzdCxndCxSdCl7dmFyIHRuPWZ1bmN0aW9uKHduLHNyKXt2YXIgbHI7Zm9yKFFzLmxlbmd0'@;
put 'aD0wLHNyPj49Mjtscj15dFt3bisrXTspc3IrPTEwNSE9bHImc3IsUXMucHVzaCgxMDU9PWxyP1N0W3NyXTpubltzcisrPj4xXSksKytzcjtyZXR1cm4gUXN9KGd0LFJ0KTtyZXR1cm4gT3Jbc3RdLmFwcGx5KG51bGwsdG4pfShzdCxndCxSdCl9LGU6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5u'@;
put 'b3coKX0sazpmdW5jdGlvbihzdCxndCxSdCl7eXQuY29weVdpdGhpbihzdCxndCxndCtSdCl9LG86ZnVuY3Rpb24oc3Qpe3ZhciBndCx0bj15dC5sZW5ndGgsd249MjE0NzQ4MzY0ODtpZigoc3Q+Pj49MCk+d24pcmV0dXJuITE7Zm9yKHZhciBzcj0xO3NyPD00O3NyKj0yKXt2YXIgbHI9dG4q'@;
put 'KDErLjIvc3IpO2lmKGxyPU1hdGgubWluKGxyLHN0KzEwMDY2MzI5NiksRnMoTWF0aC5taW4od24sKGd0PU1hdGgubWF4KHN0LGxyKSkrKDY1NTM2LWd0JTY1NTM2KSU2NTUzNikpKXJldHVybiEwfXJldHVybiExfSxzOmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9MDtyZXR1cm4gQ2EoKS5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKHRuLHduKXt2YXIgc3I9Z3QrUnQ7SnRbc3QrNCp3bj4+Ml09c3IsZnVuY3Rpb24obHIsUnIsZ28pe2Zvcih2YXIgTW89MDtNbzxsci5sZW5ndGg7KytNbylldFtScisrPj4wXT1sci5jaGFyQ29kZUF0KE1vKTtldFtScj4+MF09MH0odG4sc3IpLFJ0Kz10bi5sZW5ndGgr'@;
put 'MX0pLDB9LHQ6ZnVuY3Rpb24oc3QsZ3Qpe3ZhciBSdD1DYSgpO0p0W3N0Pj4yXT1SdC5sZW5ndGg7dmFyIHRuPTA7cmV0dXJuIFJ0LmZvckVhY2goZnVuY3Rpb24od24pe3RuKz13bi5sZW5ndGgrMX0pLEp0W2d0Pj4yXT10biwwfSxmOmZ1bmN0aW9uKHN0LGd0KXshZnVuY3Rpb24gUmgoc3Qp'@;
put 'e3dlfHwoZC5vbkV4aXQmJmQub25FeGl0KHN0KSxFZT0hMCksVChzdCxuZXcgJHIoc3QpKX0oc3QpfSxjOmZ1bmN0aW9uKHN0KXt0cnl7dmFyIGd0PURpLmdldFN0cmVhbUZyb21GRChzdCk7cmV0dXJuIEF0LmNsb3NlKGd0KSwwfWNhdGNoKFJ0KXtpZih2b2lkIDA9PT1BdHx8IShSdCBpbnN0'@;
put 'YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IFJ0O3JldHVybiBSdC5lcnJub319LGc6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3RyeXt2YXIgd249ZnVuY3Rpb24oc3IsbHIsUnIsZ28pe2Zvcih2YXIgTW89MCxmbz0wO2ZvPFJyO2ZvKyspe3ZhciBKbz1KdFtscj4+Ml0sWWk9SnRbbHIrND4+'@;
put 'Ml07bHIrPTg7dmFyIFlzPUF0LnJlYWQoc3IsZXQsSm8sWWksdm9pZCAwKTtpZihZczwwKXJldHVybi0xO2lmKE1vKz1ZcyxZczxZaSlicmVha31yZXR1cm4gTW99KERpLmdldFN0cmVhbUZyb21GRChzdCksZ3QsUnQpO3JldHVybiBKdFt0bj4+Ml09d24sMH1jYXRjaChzcil7aWYodm9pZCAw'@;
put 'PT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4gc3IuZXJybm99fSxtOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXt0cnl7dmFyIHNyPShnbz1SdCkrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIShScj1ndCk/KFJyPj4+MCkrNDI5NDk2NzI5NipnbzpO'@;
put 'YU47aWYoaXNOYU4oc3IpKXJldHVybiA2MTt2YXIgbHI9RGkuZ2V0U3RyZWFtRnJvbUZEKHN0KTtyZXR1cm4gQXQubGxzZWVrKGxyLHNyLHRuKSxPbj1bbHIucG9zaXRpb24+Pj4wLChqcj1sci5wb3NpdGlvbiwrTWF0aC5hYnMoanIpPj0xP2pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3Io'@;
put 'anIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W3duPj4yXT1PblswXSxTdFt3bis0Pj4yXT1PblsxXSxsci5nZXRkZW50cyYmMD09PXNyJiYwPT09dG4mJihsci5nZXRkZW50cz1udWxsKSww'@;
put 'fWNhdGNoKE1vKXtpZih2b2lkIDA9PT1BdHx8IShNbyBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IE1vO3JldHVybiBNby5lcnJub312YXIgUnIsZ299LGg6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3RyeXt2YXIgd249ZnVuY3Rpb24oc3IsbHIsUnIsZ28pe2Zvcih2YXIgTW89MCxm'@;
put 'bz0wO2ZvPFJyO2ZvKyspe3ZhciBKbz1KdFtscj4+Ml0sWWk9SnRbbHIrND4+Ml07bHIrPTg7dmFyIFlzPUF0LndyaXRlKHNyLGV0LEpvLFlpLHZvaWQgMCk7aWYoWXM8MClyZXR1cm4tMTtNbys9WXN9cmV0dXJuIE1vfShEaS5nZXRTdHJlYW1Gcm9tRkQoc3QpLGd0LFJ0KTtyZXR1cm4gSnRb'@;
put 'dG4+PjJdPXduLDB9Y2F0Y2goc3Ipe2lmKHZvaWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgc3I7cmV0dXJuIHNyLmVycm5vfX0sbjpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7cmV0dXJuIGZ1bmN0aW9uIE9oKHN0LGd0LFJ0LHRuKXt2YXIgd249U3Rb'@;
put 'dG4rNDA+PjJdLHNyPXt0bV9zZWM6U3RbdG4+PjJdLHRtX21pbjpTdFt0bis0Pj4yXSx0bV9ob3VyOlN0W3RuKzg+PjJdLHRtX21kYXk6U3RbdG4rMTI+PjJdLHRtX21vbjpTdFt0bisxNj4+Ml0sdG1feWVhcjpTdFt0bisyMD4+Ml0sdG1fd2RheTpTdFt0bisyND4+Ml0sdG1feWRheTpTdFt0'@;
put 'bisyOD4+Ml0sdG1faXNkc3Q6U3RbdG4rMzI+PjJdLHRtX2dtdG9mZjpTdFt0biszNj4+Ml0sdG1fem9uZTp3bj9jcih3bik6IiJ9LGxyPWNyKFJ0KSxScj17IiVjIjoiJWEgJWIgJWQgJUg6JU06JVMgJVkiLCIlRCI6IiVtLyVkLyV5IiwiJUYiOiIlWS0lbS0lZCIsIiVoIjoiJWIiLCIlciI6'@;
put 'IiVJOiVNOiVTICVwIiwiJVIiOiIlSDolTSIsIiVUIjoiJUg6JU06JVMiLCIleCI6IiVtLyVkLyV5IiwiJVgiOiIlSDolTTolUyIsIiVFYyI6IiVjIiwiJUVDIjoiJUMiLCIlRXgiOiIlbS8lZC8leSIsIiVFWCI6IiVIOiVNOiVTIiwiJUV5IjoiJXkiLCIlRVkiOiIlWSIsIiVPZCI6IiVkIiwi'@;
put 'JU9lIjoiJWUiLCIlT0giOiIlSCIsIiVPSSI6IiVJIiwiJU9tIjoiJW0iLCIlT00iOiIlTSIsIiVPUyI6IiVTIiwiJU91IjoiJXUiLCIlT1UiOiIlVSIsIiVPViI6IiVWIiwiJU93IjoiJXciLCIlT1ciOiIlVyIsIiVPeSI6IiV5In07Zm9yKHZhciBnbyBpbiBScilscj1sci5yZXBsYWNlKG5l'@;
put 'dyBSZWdFeHAoZ28sImciKSxScltnb10pO3ZhciBNbz1bIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZm89WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHki'@;
put 'LCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdO2Z1bmN0aW9uIEpvKGtpLGpvLHFjKXtmb3IodmFyIFJsPSJudW1iZXIiPT10eXBlb2Yga2k/a2kudG9TdHJpbmcoKTpraXx8IiI7UmwubGVuZ3RoPGpvOylSbD1xY1swXStSbDtyZXR1cm4gUmx9'@;
put 'ZnVuY3Rpb24gWWkoa2ksam8pe3JldHVybiBKbyhraSxqbywiMCIpfWZ1bmN0aW9uIFlzKGtpLGpvKXtmdW5jdGlvbiBxYyhuYyl7cmV0dXJuIG5jPDA/LTE6bmM+MD8xOjB9dmFyIFJsO3JldHVybiAwPT09KFJsPXFjKGtpLmdldEZ1bGxZZWFyKCktam8uZ2V0RnVsbFllYXIoKSkpJiYwPT09'@;
put 'KFJsPXFjKGtpLmdldE1vbnRoKCktam8uZ2V0TW9udGgoKSkpJiYoUmw9cWMoa2kuZ2V0RGF0ZSgpLWpvLmdldERhdGUoKSkpLFJsfWZ1bmN0aW9uIExsKGtpKXtzd2l0Y2goa2kuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoa2kuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNl'@;
put 'IDE6cmV0dXJuIGtpO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoa2kuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoa2kuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoa2kuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3'@;
put 'IERhdGUoa2kuZ2V0RnVsbFllYXIoKS0xLDExLDMxKTtjYXNlIDY6cmV0dXJuIG5ldyBEYXRlKGtpLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIE1sKGtpKXt2YXIgam89ZnVuY3Rpb24oTHJ0LFZUKXtmb3IodmFyIEUxPW5ldyBEYXRlKExydC5nZXRUaW1lKCkpO1ZUPjA7KXt2'@;
put 'YXIgUnJ0PUlsKEUxLmdldEZ1bGxZZWFyKCkpLGFaPUUxLmdldE1vbnRoKCksU2xlPShScnQ/eDI6dTQpW2FaXTtpZighKFZUPlNsZS1FMS5nZXREYXRlKCkpKXJldHVybiBFMS5zZXREYXRlKEUxLmdldERhdGUoKStWVCksRTE7VlQtPVNsZS1FMS5nZXREYXRlKCkrMSxFMS5zZXREYXRlKDEp'@;
put 'LGFaPDExP0UxLnNldE1vbnRoKGFaKzEpOihFMS5zZXRNb250aCgwKSxFMS5zZXRGdWxsWWVhcihFMS5nZXRGdWxsWWVhcigpKzEpKX1yZXR1cm4gRTF9KG5ldyBEYXRlKGtpLnRtX3llYXIrMTkwMCwwLDEpLGtpLnRtX3lkYXkpLHFjPW5ldyBEYXRlKGpvLmdldEZ1bGxZZWFyKCksMCw0KSxS'@;
put 'bD1uZXcgRGF0ZShqby5nZXRGdWxsWWVhcigpKzEsMCw0KSxuYz1MbChxYyksSXJ0PUxsKFJsKTtyZXR1cm4gWXMobmMsam8pPD0wP1lzKElydCxqbyk8PTA/am8uZ2V0RnVsbFllYXIoKSsxOmpvLmdldEZ1bGxZZWFyKCk6am8uZ2V0RnVsbFllYXIoKS0xfXZhciBRdT17IiVhIjpmdW5jdGlv'@;
put 'bihraSl7cmV0dXJuIE1vW2tpLnRtX3dkYXldLnN1YnN0cmluZygwLDMpfSwiJUEiOmZ1bmN0aW9uKGtpKXtyZXR1cm4gTW9ba2kudG1fd2RheV19LCIlYiI6ZnVuY3Rpb24oa2kpe3JldHVybiBmb1traS50bV9tb25dLnN1YnN0cmluZygwLDMpfSwiJUIiOmZ1bmN0aW9uKGtpKXtyZXR1cm4g'@;
put 'Zm9ba2kudG1fbW9uXX0sIiVDIjpmdW5jdGlvbihraSl7cmV0dXJuIFlpKChraS50bV95ZWFyKzE5MDApLzEwMHwwLDIpfSwiJWQiOmZ1bmN0aW9uKGtpKXtyZXR1cm4gWWkoa2kudG1fbWRheSwyKX0sIiVlIjpmdW5jdGlvbihraSl7cmV0dXJuIEpvKGtpLnRtX21kYXksMiwiICIpfSwiJWci'@;
put 'OmZ1bmN0aW9uKGtpKXtyZXR1cm4gTWwoa2kpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpfSwiJUciOmZ1bmN0aW9uKGtpKXtyZXR1cm4gTWwoa2kpfSwiJUgiOmZ1bmN0aW9uKGtpKXtyZXR1cm4gWWkoa2kudG1faG91ciwyKX0sIiVJIjpmdW5jdGlvbihraSl7dmFyIGpvPWtpLnRtX2hvdXI7'@;
put 'cmV0dXJuIDA9PWpvP2pvPTEyOmpvPjEyJiYoam8tPTEyKSxZaShqbywyKX0sIiVqIjpmdW5jdGlvbihraSl7cmV0dXJuIFlpKGtpLnRtX21kYXkrZnVuY3Rpb24oam8scWMpe2Zvcih2YXIgUmw9MCxuYz0wO25jPD1xYztSbCs9am9bbmMrK10pO3JldHVybiBSbH0oSWwoa2kudG1feWVhcisx'@;
put 'OTAwKT94Mjp1NCxraS50bV9tb24tMSksMyl9LCIlbSI6ZnVuY3Rpb24oa2kpe3JldHVybiBZaShraS50bV9tb24rMSwyKX0sIiVNIjpmdW5jdGlvbihraSl7cmV0dXJuIFlpKGtpLnRtX21pbiwyKX0sIiVuIjpmdW5jdGlvbigpe3JldHVybiJcbiJ9LCIlcCI6ZnVuY3Rpb24oa2kpe3JldHVy'@;
put 'biBraS50bV9ob3VyPj0wJiZraS50bV9ob3VyPDEyPyJBTSI6IlBNIn0sIiVTIjpmdW5jdGlvbihraSl7cmV0dXJuIFlpKGtpLnRtX3NlYywyKX0sIiV0IjpmdW5jdGlvbigpe3JldHVybiJcdCJ9LCIldSI6ZnVuY3Rpb24oa2kpe3JldHVybiBraS50bV93ZGF5fHw3fSwiJVUiOmZ1bmN0aW9u'@;
put 'KGtpKXtyZXR1cm4gWWkoTWF0aC5mbG9vcigoa2kudG1feWRheSs3LWtpLnRtX3dkYXkpLzcpLDIpfSwiJVYiOmZ1bmN0aW9uKGtpKXt2YXIgam89TWF0aC5mbG9vcigoa2kudG1feWRheSs3LShraS50bV93ZGF5KzYpJTcpLzcpO2lmKChraS50bV93ZGF5KzM3MS1raS50bV95ZGF5LTIpJTc8'@;
put 'PTImJmpvKyssam8pe2lmKDUzPT1qbyl7dmFyIHFjPShraS50bV93ZGF5KzM3MS1raS50bV95ZGF5KSU3OzQ9PXFjfHwzPT1xYyYmSWwoa2kudG1feWVhcil8fChqbz0xKX19ZWxzZXtqbz01Mjt2YXIgUmw9KGtpLnRtX3dkYXkrNy1raS50bV95ZGF5LTEpJTc7KDQ9PVJsfHw1PT1SbCYmSWwo'@;
put 'a2kudG1feWVhciU0MDAtMSkpJiZqbysrfXJldHVybiBZaShqbywyKX0sIiV3IjpmdW5jdGlvbihraSl7cmV0dXJuIGtpLnRtX3dkYXl9LCIlVyI6ZnVuY3Rpb24oa2kpe3JldHVybiBZaShNYXRoLmZsb29yKChraS50bV95ZGF5KzctKGtpLnRtX3dkYXkrNiklNykvNyksMil9LCIleSI6ZnVu'@;
put 'Y3Rpb24oa2kpe3JldHVybihraS50bV95ZWFyKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpfSwiJVkiOmZ1bmN0aW9uKGtpKXtyZXR1cm4ga2kudG1feWVhcisxOTAwfSwiJXoiOmZ1bmN0aW9uKGtpKXt2YXIgam89a2kudG1fZ210b2ZmO3JldHVybihqbz49MD8iKyI6Ii0iKSsoIjAw'@;
put 'MDAiKyhqbz0oam89TWF0aC5hYnMoam8pLzYwKS82MCoxMDAram8lNjApKS5zbGljZSgtNCl9LCIlWiI6ZnVuY3Rpb24oa2kpe3JldHVybiBraS50bV96b25lfSwiJSUiOmZ1bmN0aW9uKCl7cmV0dXJuIiUifX07Zm9yKHZhciBnbyBpbiBscj1sci5yZXBsYWNlKC8lJS9nLCJcMFwwIiksUXUp'@;
put 'bHIuaW5jbHVkZXMoZ28pJiYobHI9bHIucmVwbGFjZShuZXcgUmVnRXhwKGdvLCJnIiksUXVbZ29dKHNyKSkpO3ZhciBjbD1Hbyhscj1sci5yZXBsYWNlKC9cMFwwL2csIiUiKSwhMSk7cmV0dXJuIGNsLmxlbmd0aD5ndD8wOihldC5zZXQoY2wsc3QpLGNsLmxlbmd0aC0xKX0oc3QsZ3QsUnQs'@;
put 'dG4pfX07KGZ1bmN0aW9uKCl7dmFyIHN0PXthOkp1fTtmdW5jdGlvbiBndCh3bixzcil7ZC5hc209d24uZXhwb3J0cyxJaSgocGU9ZC5hc20ueikuYnVmZmVyKSxRbi51bnNoaWZ0KGQuYXNtLkEpLGNuKCl9ZnVuY3Rpb24gUnQod24pe2d0KHduLmluc3RhbmNlKX1mdW5jdGlvbiB0bih3bil7'@;
put 'cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gUHIoc3Qpe3RyeXtpZihzdD09ZnImJmgpcmV0dXJuIG5ldyBVaW50OEFycmF5KGgpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRj'@;
put 'aChndCl7RW4oZ3QpfX0oZnIpfSkudGhlbihmdW5jdGlvbihzcil7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHNyLHN0KX0pLnRoZW4oZnVuY3Rpb24oc3Ipe3JldHVybiBzcn0pLnRoZW4od24sZnVuY3Rpb24oc3Ipe2llKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFy'@;
put 'ZSB3YXNtOiAiK3NyKSxFbihzcil9KX1pZihPdCgpLGQuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gZC5pbnN0YW50aWF0ZVdhc20oc3QsZ3QpfWNhdGNoKHduKXtpZSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIit3biksYSh3bil9KGh8'@;
put 'fCJmdW5jdGlvbiIhPXR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ3x8UG4oZnIpfHxmdW5jdGlvbiBKbihzdCl7cmV0dXJuIHN0LnN0YXJ0c1dpdGgoImZpbGU6Ly8iKX0oZnIpfHwiZnVuY3Rpb24iIT10eXBlb2YgZmV0Y2g/dG4oUnQpOmZldGNoKGZyLHtjcmVkZW50'@;
put 'aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih3bil7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHduLHN0KS50aGVuKFJ0LGZ1bmN0aW9uKHNyKXtyZXR1cm4gaWUoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK3NyKSxpZSgiZmFsbGlu'@;
put 'ZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSx0bihSdCl9KX0pKS5jYXRjaChhKX0pKCksZC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4oZC5fX193YXNtX2NhbGxfY3RvcnM9ZC5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgTTE9ZC5f'@;
put 'ZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihNMT1kLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPWQuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dy'@;
put 'YXBodml6XzI9ZnVuY3Rpb24oKXtyZXR1cm4oTXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9ZC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxhdT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPWZ1bmN0aW9uKCl7cmV0dXJuKGF1PWQu'@;
put 'X2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9ZC5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4MT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9ZnVuY3Rpb24oKXtyZXR1cm4oeDE9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RF'@;
put 'cnJvcl8wPWQuYXNtLkUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRTI9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1mdW5jdGlvbigpe3JldHVybihFMj1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPWQuYXNtLkYpLmFwcGx5KG51bGws'@;
put 'YXJndW1lbnRzKX0sJDc9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RSZXN1bHRfMD1mdW5jdGlvbigpe3JldHVybigkNz1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdFJlc3VsdF8wPWQuYXNtLkcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZDQ9ZC5fZW1zY3JpcHRl'@;
put 'bl9iaW5kX0dyYXBodml6X2xheW91dF8zPWZ1bmN0aW9uKCl7cmV0dXJuKGQ0PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1kLmFzbS5IKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFN3PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuKFN3PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPWQuYXNtLkkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07ZC5fZnJlZT1mdW5jdGlvbigpe3JldHVybihkLl9mcmVlPWQuYXNtLkspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZC5fbWFsbG9j'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuKGQuX21hbGxvYz1kLmFzbS5MKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBlbSxNdz1kLl9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKE13PWQuX19fZXJybm9fbG9jYXRpb249ZC5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4'@;
put 'dz1kLl9lbXNjcmlwdGVuX2J1aWx0aW5fbWVtYWxpZ249ZnVuY3Rpb24oKXtyZXR1cm4oeHc9ZC5fZW1zY3JpcHRlbl9idWlsdGluX21lbWFsaWduPWQuYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdG09ZC5fX19jeGFfaXNfcG9pbnRlcl90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuKHRt'@;
put 'PWQuX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1kLmFzbS5PKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIEV3KHN0KXtmdW5jdGlvbiBndCgpe2VtfHwoZW09ITAsZC5jYWxsZWRSdW49ITAsRWV8fChkLm5vRlNJbml0fHxBdC5pbml0LmluaXRpYWxpemVkfHxBdC5pbml0KCksQXQu'@;
put 'aWdub3JlUGVybWlzc2lvbnM9ITEsWXIoUW4pLGwoZCksZC5vblJ1bnRpbWVJbml0aWFsaXplZCYmZC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLGZ1bmN0aW9uKCl7aWYoZC5wb3N0UnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2YgZC5wb3N0UnVuJiYoZC5wb3N0UnVuPVtkLnBvc3RSdW5dKTtk'@;
put 'LnBvc3RSdW4ubGVuZ3RoOylSdD1kLnBvc3RSdW4uc2hpZnQoKSxNci51bnNoaWZ0KFJ0KTt2YXIgUnQ7WXIoTXIpfSgpKSl9X3I+MHx8KGZ1bmN0aW9uKCl7aWYoZC5wcmVSdW4pZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnByZVJ1biYmKGQucHJlUnVuPVtkLnByZVJ1bl0pO2QucHJlUnVu'@;
put 'Lmxlbmd0aDspUnQ9ZC5wcmVSdW4uc2hpZnQoKSxGci51bnNoaWZ0KFJ0KTt2YXIgUnQ7WXIoRnIpfSgpLF9yPjB8fChkLnNldFN0YXR1cz8oZC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Quc2V0U3RhdHVzKCIi'@;
put 'KX0sMSksZ3QoKX0sMSkpOmd0KCkpKX1pZihkLl9fX3N0YXJ0X2VtX2pzPTE3NTgyOCxkLl9fX3N0b3BfZW1fanM9MTc1OTI2LHZ0PWZ1bmN0aW9uIHN0KCl7ZW18fEV3KCksZW18fCh2dD1zdCl9LGQucHJlSW5pdClmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGQucHJlSW5pdCYmKGQucHJlSW5p'@;
put 'dD1bZC5wcmVJbml0XSk7ZC5wcmVJbml0Lmxlbmd0aD4wOylkLnByZUluaXQucG9wKCkoKTtmdW5jdGlvbiBNZCgpe31mdW5jdGlvbiBOVChzdCl7cmV0dXJuKHN0fHxNZCkuX19jYWNoZV9ffWZ1bmN0aW9uIHNaKHN0LGd0KXt2YXIgUnQ9TlQoZ3QpLHRuPVJ0W3N0XTtyZXR1cm4gdG58fCgo'@;
put 'dG49T2JqZWN0LmNyZWF0ZSgoZ3R8fE1kKS5wcm90b3R5cGUpKS5wdHI9c3QsUnRbc3RdPXRuKX1FdygpLChNZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNZC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1NZCxNZC5wcm90b3R5cGUuX19jbGFzc19fPU1kLE1kLl9fY2FjaGVfXz17fSxkLldy'@;
put 'YXBwZXJPYmplY3Q9TWQsZC5nZXRDYWNoZT1OVCxkLndyYXBQb2ludGVyPXNaLGQuY2FzdE9iamVjdD1mdW5jdGlvbihzdCxndCl7cmV0dXJuIHNaKHN0LnB0cixndCl9LGQuTlVMTD1zWigwKSxkLmRlc3Ryb3k9ZnVuY3Rpb24oc3Qpe2lmKCFzdC5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjog'@;
put 'Q2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUgaXQgeW91cnNlbGY/KSI7c3QuX19kZXN0cm95X18oKSxkZWxldGUgTlQoc3QuX19jbGFzc19fKVtzdC5wdHJdfSxkLmNvbXBhcmU9ZnVuY3Rpb24oc3QsZ3Qpe3JldHVybiBzdC5wdHI9PT1ndC5wdHJ9LGQuZ2V0UG9pbnRl'@;
put 'cj1mdW5jdGlvbihzdCl7cmV0dXJuIHN0LnB0cn0sZC5nZXRDbGFzcz1mdW5jdGlvbihzdCl7cmV0dXJuIHN0Ll9fY2xhc3NfX307dmFyIE9hPXtidWZmZXI6MCxzaXplOjAscG9zOjAsdGVtcHM6W10sbmVlZGVkOjAscHJlcGFyZTpmdW5jdGlvbigpe2lmKE9hLm5lZWRlZCl7Zm9yKHZhciBz'@;
put 'dD0wO3N0PE9hLnRlbXBzLmxlbmd0aDtzdCsrKWQuX2ZyZWUoT2EudGVtcHNbc3RdKTtPYS50ZW1wcy5sZW5ndGg9MCxkLl9mcmVlKE9hLmJ1ZmZlciksT2EuYnVmZmVyPTAsT2Euc2l6ZSs9T2EubmVlZGVkLE9hLm5lZWRlZD0wfU9hLmJ1ZmZlcnx8KE9hLnNpemUrPTEyOCxPYS5idWZmZXI9'@;
put 'ZC5fbWFsbG9jKE9hLnNpemUpLFplKE9hLmJ1ZmZlcikpLE9hLnBvcz0wfSxhbGxvYzpmdW5jdGlvbihzdCxndCl7WmUoT2EuYnVmZmVyKTt2YXIgUnQsd249c3QubGVuZ3RoKmd0LkJZVEVTX1BFUl9FTEVNRU5UO3JldHVybiBPYS5wb3MrKHduPXduKzcmLTgpPj1PYS5zaXplPyhaZSh3bj4w'@;
put 'KSxPYS5uZWVkZWQrPXduLFJ0PWQuX21hbGxvYyh3biksT2EudGVtcHMucHVzaChSdCkpOihSdD1PYS5idWZmZXIrT2EucG9zLE9hLnBvcys9d24pLFJ0fSxjb3B5OmZ1bmN0aW9uKHN0LGd0LFJ0KXtzd2l0Y2goUnQ+Pj49MCxndC5CWVRFU19QRVJfRUxFTUVOVCl7Y2FzZSAyOlJ0Pj4+PTE7'@;
put 'YnJlYWs7Y2FzZSA0OlJ0Pj4+PTI7YnJlYWs7Y2FzZSA4OlJ0Pj4+PTN9Zm9yKHZhciB0bj0wO3RuPHN0Lmxlbmd0aDt0bisrKWd0W1J0K3RuXT1zdFt0bl19fTtmdW5jdGlvbiBrdyhzdCl7aWYoInN0cmluZyI9PXR5cGVvZiBzdCl7dmFyIGd0PUdvKHN0KSxSdD1PYS5hbGxvYyhndCxldCk7'@;
put 'cmV0dXJuIE9hLmNvcHkoZ3QsZXQsUnQpLFJ0fXJldHVybiBzdH1mdW5jdGlvbiBvMygpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIHZjKHN0LGd0KXtzdCYmIm9iamVjdCI9PXR5cGVvZiBzdCYmKHN0PXN0LnB0ciks'@;
put 'Z3QmJiJvYmplY3QiPT10eXBlb2YgZ3QmJihndD1ndC5wdHIpLHRoaXMucHRyPU11KHN0LGd0KSxOVCh2YylbdGhpcy5wdHJdPXRoaXN9cmV0dXJuKG8zLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE1kLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW8zLG8zLnByb3RvdHlwZS5fX2NsYXNzX189'@;
put 'bzMsbzMuX19jYWNoZV9fPXt9LGQuVm9pZFB0cj1vMyxvMy5wcm90b3R5cGUuX19kZXN0cm95X189bzMucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TTEodGhpcy5wdHIpfSwodmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTWQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9dmMs'@;
put 'dmMucHJvdG90eXBlLl9fY2xhc3NfXz12Yyx2Yy5fX2NhY2hlX189e30sZC5HcmFwaHZpej12Yyx2Yy5wcm90b3R5cGUudmVyc2lvbj12Yy5wcm90b3R5cGUudmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiBjcihhdSh0aGlzLnB0cikpfSx2Yy5wcm90b3R5cGUubGFzdEVycm9yPXZjLnByb3Rv'@;
put 'dHlwZS5sYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gY3IoeDEodGhpcy5wdHIpKX0sdmMucHJvdG90eXBlLmNyZWF0ZUZpbGU9dmMucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oc3QsZ3Qpe3ZhciBSdD10aGlzLnB0cjtPYS5wcmVwYXJlKCksc3Q9c3QmJiJvYmplY3QiPT10eXBl'@;
put 'b2Ygc3Q/c3QucHRyOmt3KHN0KSxndD1ndCYmIm9iamVjdCI9PXR5cGVvZiBndD9ndC5wdHI6a3coZ3QpLEUyKFJ0LHN0LGd0KX0sdmMucHJvdG90eXBlLmxhc3RSZXN1bHQ9dmMucHJvdG90eXBlLmxhc3RSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3IoJDcodGhpcy5wdHIpKX0sdmMucHJv'@;
put 'dG90eXBlLmxheW91dD12Yy5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKHN0LGd0LFJ0KXt2YXIgdG49dGhpcy5wdHI7cmV0dXJuIE9hLnByZXBhcmUoKSxzdD1zdCYmIm9iamVjdCI9PXR5cGVvZiBzdD9zdC5wdHI6a3coc3QpLGd0PWd0JiYib2JqZWN0Ij09dHlwZW9mIGd0P2d0LnB0cjpr'@;
put 'dyhndCksUnQ9UnQmJiJvYmplY3QiPT10eXBlb2YgUnQ/UnQucHRyOmt3KFJ0KSxjcihkNCh0bixzdCxndCxSdCkpfSx2Yy5wcm90b3R5cGUuX19kZXN0cm95X189dmMucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7U3codGhpcy5wdHIpfSxjLnJlYWR5fSk7bGV0IEN3LFhVO2Z1'@;
put 'bmN0aW9uIFBKZShjKXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFw'@;
put 'aGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19Y2xhc3MgRFR7Y29uc3RydWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9c3RhdGljIGxvYWQoKXtyZXR1cm4oWFV8fChYVT1mdW5jdGlvbiBSSmUo'@;
put 'Yyl7cmV0dXJuIGZ1bmN0aW9uIExKZShjLGwpe2Zvcih2YXIgYT0wLGQ9W10saD0rIWwsZj0wO2MubGVuZ3RoOyl7dmFyIF89TUplKGMsaHx8bCk7aWYoIm9iamVjdCI9PXR5cGVvZiBfKXtmb3IoaD8obD1udWxsLF8udy5sZW5ndGg9PV8udSYmKGQucHVzaChsPV8udyksZis9Xy51KSk6KGQu'@;
put 'cHVzaChsKSxfLmU9MCk7IV8ubDspe3ZhciBUPUlKZShjLF8sbCk7VHx8bWMoNSksbD9fLmU9Xy55OihkLnB1c2goVCksZis9VC5sZW5ndGgsQ0plKF8udywwLFQubGVuZ3RoKSxfLncuc2V0KFQsXy53Lmxlbmd0aC1ULmxlbmd0aCkpfWE9Xy5iKzQqXy5jfWVsc2UgYT1fO2M9Yy5zdWJhcnJh'@;
put 'eShhKX1yZXR1cm4gZnVuY3Rpb24oVyxpZSl7aWYoMT09Vy5sZW5ndGgpcmV0dXJuIFdbMF07Zm9yKHZhciBwZT1uZXcgZWMoaWUpLHdlPTAsRWU9MDt3ZTxXLmxlbmd0aDsrK3dlKXt2YXIgWmU9V1t3ZV07cGUuc2V0KFplLEVlKSxFZSs9WmUubGVuZ3RofXJldHVybiBwZX0oZCxmKX0oZnVu'@;
put 'Y3Rpb24oYSl7Y29uc3QgZD1hLmxlbmd0aCxoPVtdO2xldCBmPTAsXz0wLFQ9LTE7Zm9yKGxldCBXPTA7VzxkO1crKyl7Y29uc3QgaWU9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjs8PT4/QFtdXl9g'@;
put 'e3x9fiInLmluZGV4T2YoYVtXXSk7aWYoLTEhPT1pZSlpZihUPDApVD1pZTtlbHNle1QrPTkxKmllLGZ8PVQ8PF8sXys9KDgxOTEmVCk+ODg/MTM6MTQ7ZG97aC5wdXNoKDI1NSZmKSxmPj49OCxfLT04fXdoaWxlKF8+Nyk7VD0tMX19cmV0dXJuIFQ+LTEmJmgucHVzaCgyNTUmKGZ8VDw8Xykp'@;
put 'LG5ldyBVaW50OEFycmF5KGgpfShjKSl9KCd2NyNhU1hqOl1DWzkwPnlLbWE6S2AyaHR6OHsvWy4lWStOQUU+aXJVLz9fSmheTWl9ViJ+Znl6UyEoMXk2JVNdYnFoRmh3Pn5+cnVAXlBhYzd+TjRuOUJrT2pjWj1GOE4kd0Iic11pbl0lVEdePUpENExiZ04sVys2YFU3KilwaiQyLkddPHAwfUA2'@;
put 'dzFYPGl7Lmc8NzJ2dV0yK1UvRHsvY352Q3N0PXpjUXJvcF43STZiOWRNenxba1ohcyJBR3lURSV5Mzw0RFtAP2Z8fCRTYmZ1JktuVVhQOSFGZzU9YForKUFKY1o8K3hoL2I8TER3W1hyZEwhWVoofmMyQ2Z4enFHJV94K0t6P0ZEXj04RWV6R3doP11sODhLc0NTJjpWKC8ybncqKGFdVTtaeXdl'@;
put 'I1VSfFR1OTUsQm9fImVXcUNBUWIkXk1DVDYkKmJkNWdWZ3VYT104Uml1ZUBpZSFsPEZhazshWyxwakZjfThne3toWSxbTDRxMSt5TkNlKGlkMClSdFZEIVtEPkJ8WFcpMlM/MHJIPUZ4VUFXSndpRSJ6dVpmMClSQn4yS2JlP1JLRkJlM3g7N0xST31mOzU5Z3EvWVcpSFBnVmF0a29DZ1JZQl1x'@;
put 'eUJQNDR+bz9tQ0BCWnIlTUxZVDg+dUNRYFF5JW09TjgzSnhXMlRYQCJdYWhedHMhTWY1Lzw5YkVNQWtZciwjQD94SFthTTkqbU08TU8qI15HZ21gdldXeXREM3Q8UXlSdXh8SWVXKTpXTXRfd29tOHZHUFBSVGN6bUd2Jnszdmx7eldtfT1Ybz1JOU89VWo/bHttfjxVbS5SR15RZ2VMVzw5RkZG'@;
put 'bTpVVSlrdFhLSyFlRllJZ10rVlVzcyJZSFRWZ3A4cyxkS244cnk4JW84Ynk4JVFodGczbEx4NzhKWE9JUHN9N3Refl50diF7emBAN2N7XVAvbn52VFRCNmVrOHBJIyZNKmRSI20zTlRVZGU9KiEybC5SNUtXZkgxMlZGTGIkYXk6akRJcDxnb2I8S0BgV2Z0ZHQ7Wy5yNTdIMUZzNTc7JTlMb2V3'@;
put 'QyRHL1AlTl5IbHZ1dDlyOE0iNHxAdWprVXQ2QixeeiIvNGs/bCZnVktgI0F4YFpoOHZOR29MeFthY3U0JjpFV1U5Lkp4SVRBKmdDP2M4MkpLakRMaFhGVTFDVVcqMnYzbEFhZjkma099cyE+TH0xIUV+citaX2ddNU9QaS9JeEBGO2VjPFRaLHJ+ImR+NEliTTw7LDVRaT16UUJscy81JmVeKGNb'@;
put 'VTttVWVQNGdJUkpxJnB5VG9CVGckMnFwfnYqRmVGb3JnWis0dkxPb3BvdE0rbDNpayglKkREeWtLMzAvYStaWy58ayMvZkw4MFMuXkFaVCE4ZTF1LlhlfVcjNmZyJlFPdSxCeGJAKHlvKjMpQGdgXyslLz9pUHpSRl4jeFliVkx7QEg8SClMREUyVyouO00xdEUham5jLktAZV9GLktaXlAoaW9n'@;
put 'SSE2VD5Sfjd+M1Z9TDB8Qkg+I0xpSmNhUU5qKlk4VWJeNG9xcF0mP3NfO2sqPk4vM3htVmhwOHxDMXNaT29aOFVvOHdwOWx4P0okLCFtPkIkLylCOTRKSDMwL2JmLnByPDxuW1s/dnJiWnM2K0olYE9qUk1HdnlmQDosSWVRcllIeUgzRkEyXUYvTEt1fUMvSVFjJUYiSWkrQWtBU2VQaTtae1lo'@;
put 'VCt7bVp9PCxQfFk0bD5BMmRfLCZTX3Q5bD8yQ1EjWXBjU2VNQVBBOEhoWjE7XmFnP1JJTiZLWEpqSXhIUGRtd1lLcHUoL31iWl8sJnhdSmorOX0me0RBdUhyOEViRXg6az1BOCVhIWYiYjY+NDpffjVkZWBFdF97S3l9SUp8STxYcFt9ITkoOWE3Yl9CZ34mezxiNnJrUDxsSml4I00seFRHWj4m'@;
put 'MXUval0wdzBrNUJidllJTkppX08hQjt4KShaOTc7KjtzPnxrPjEzV1tkJjkyLjl4clQrMyQkdipyRjhBZWBAQjtNOWhdUEZpKy44U0ZVZ1hpVCRWUWtwTiFGPEIuTFJteTxAfXAuQ08jNVZGLGczR1M6e3c6dSxqcFYkRFEsXWQhI115czxpN2dMM3Uxb2JSaWMjYVtdYCV1MC5LQGhlQjgyJkNl'@;
put 'I10rO1U3RiNwe3EkOyU2fl1gczJ3fGo3R3BFVjk9U3hxXkZ6RTl2VnhqRnJgM1lnWHxxZnBFZzoqcjQ1cFslLkIobFd0c09tZWtxL2V4QlYrYkQqT3xOKUkyK1lPREgpTHlRdWxTeTJscEBWPlUmemY4bGl8JiFvLlMmfTAvcXc1O245VXlOOV89QFMjeCMvSS81cXE1VG03ZG9oNDBQYXk1Rj91'@;
put 'Skc6SlRRcnhKZlg/d3REI04hWUhMe1JKcD5HM2h4Smk1QHRXWF9SeDt9LCpFIy8xMGlNQ28zXTNOJXJvUDBieEJXcnsoQDc/XWA5L1k5bG16emB7M0c5Z3B3OjlNRVssWCpZdHhrcE9dcSRWOz96emBrSnlVRzJDXjxfMlZaLF08MV8hYHpDcDs3NCxOKiJVcmwiR1QyZjU6N0VFZmR7JWwmOzAz'@;
put 'U0h5dilbZyN6bUc3Jk5LW0E3Z1p8aTpmU3RCcURPKU1XLk16WmMibDkuNiFiU0FPSCpZVV1GU0t7WSRVRCM0fjpJQUhdMms1SWxENU1xd0NUWSE5K2xYPXN8M1MvV0Jtfng8IWxNSk58OVZSX1kvNltvKDhgS2t2P2tlRmk9JS43cFQjeDJIVEh2ZmA9NTpHXSpAW2cuTzZAdCJAZTw5SmdIbi56'@;
put 'QnR4bU1sU0I7enkhKV5gc25zX2F7elBfKisqQClxOSpIYFc3TGtWfTc1UG5mQlt6Jj9DXktrUnIuYihiJVBEQThWK0FJLjY6IyFEQDY4fV9GamsmcGhXc1RJMkNeWGA3Oz1FeTkpYHxOUVtyJFRmRlcqVGxvQj1JXjZdS2tMJCg+MiM+JCE5X3lDJj8mTH4qZyYlaH12eHs4MklyZTs3JUMqYjgl'@;
put 'bmR3ZXNURThSVU01USMyUHA3JS9AZU1kTnc1KWw3SHB5OUhwKDZhPHw9NFNgWSpSYDEodGIlbSZfamYkWF5gRitic1QkTzY9fm1yKFU3PGF1Q2kvbktAZWliQ1NvRUJXPGlaPlcjUnxLc3k7OWk7cERPXV1KVDsmdik2ZFpfQTBkPngySjhYOF8xVi5nME04ViMoUkUzTTMwL1RfS09+IyZgXWAp'@;
put 'JDRseD8rOCtJVUNMSzN9alZ2QHk1VDFWTyxdcWxseF9yfnJPJC50THJ3NTZicHBDSjpMLCVKbTxqcDIiQEYqTXliaDlNKW0xQnRjT0RuWVQ9JjpRWVZaYkg1SUBKWGxjYXIzR0hCSndDZD9TYlVzLyl5KjlNJkhWZVUmUk9lXWoyYzJvMEZ6Q2ZtK0FrQVNYb2Q5L0dJe2M9RklZN2JeSH1OZ3l4'@;
put 'ISlUeUpvUkN4LmRUS2N2VGhkLnRrc1lWMiM5WF9DYDZeLDxjeDFxO3BvfHsmVFlpb1NPTXlZIm47PUZHTD07cURlUndDXTdVblcxWSZwRzNGR3JPTEhWXTA0TVcjNU1LX2Q4bChjRi45XiRGXy9zIzJ7cCM6Y0t2aUYyXyJAcFI/fExvLzI1WWtHPDt3M207RipPfDpmZXF+dmhoYXphLDY0SXEh'@;
put 'bS99RklmTTtYZShfPXkmZ0Y5JCM6IzIjbTNPXVFLXypwRFY2XiROe0BJcStxOzUkL2cqeiYsNnNjRFkoa1dZaF8kSC5KcmxZMT5MYj5lflU7TU97VTM8TUhESmFyVVRLPnN3QDI1PzYuQV47KSZueG9halY2UWg8UzhsYExZcXoyVCN5RHt9ejwiZVs1c2M4b1NrK1Q4YGdPfSNecXwka2hic3RZ'@;
put 'IilGU0w9Z2R0WXJbQjJtdlVzIm1WeWtJb1IkVnhLeXNib1s/NU1dMSJEVmV6OFdbUm15MzRIRXxMNHMvfn1AOj1xa041RWhpVl1ndiQ8SyNbOyEwU2xrKG48R3E0ZmouPGRVRFglZyYyMytqNXpnfTZwOSVISmsjVC5qPEosPXxpYjw1YTt3JEpuJU57QHV5cCt2fGhLaX0/LFIpIUM4M2Asdj43'@;
put 'XW09LHlzM1FscTRXKzU9WD0vMSguSmZgNjFySFQ7NjFqKUwpKHJid0RIZzFtPS45Lip+SDlDa3RATz5hPl02ZWsyYUI1MXp5OzNjWCVGNERuI2BOSGRBbmVxTHZ5W1cuNnVENy8mOjlxUHZ0SjkmIll5Zkd1RlZ7U3kxen1kRVtTOXNbOltuTzhzdHg1dWg3ODk3KEJzNS9YOy85eSQ5NCZ5byQy'@;
put 'dz5iKSEiRiUzXSVkZj9eS0FQe1hXfUosWC9KVE5nMFUqOTUhSV49YFNaW0hqMmEldGl3KDRCciNofFo+JHA4bDhDZzdzcTV2eE84OEZyPDxmcThDY3xPPkRXMS9FT2s+PS81clFrS1t0S3F9JGA1MCNdVGtWPH5CTWBWfXc+JExWa3daVlpUZj17dEs+PCRnUDJgLFlye0B3dVRUdExSRC9deyg0'@;
put 'WndDeDovRyZ3eksiVUZ7LylvYHBuRkRvXmg5V09UNEFvKjpZU0BwPyNpSmo8KE5xQ1Y7ZE4lTTI7UnhLb2F2aT14Z0J6UzRKMXFaInBIXSY7Ok01ZUtRJWdjZio5KlM+ZE9JJip3I2M6L0dUMk99VTBHOW9ZcGhtQjFELHJ8d2svTitKaVAuKz9GIXBlbEQxW0dqJlh2OTluZy4yIzVlOmIyRiR7'@;
put 'e1U+MVNqWFZpSlsicnJUVH09b2BxWlEjYGg/PTJuUkM0OTk+cn1fQDhzKTYsRE5WSXJIcygjWXJ+NENuO3E9JE5BP3VaYktgSXk9QjtsbytPfSY6dnQ6T31vcDlYKFsmYykqUzsoXWpzdntLV31PPmIqXiw1PU98NWA2eWBXbHQ/NiwyMH1iSU81STllOjdJViwraWQvfnxETylNUFsmViFNMnJA'@;
put 'VSlicnRqYkshNC9CTDk/UDpzY2ZARE8/TDUjNktBeCtlYWp3QlVZdnsrdiJdVitASFs8UnQ/LixGSXE8TFk3dnhWcFdZKHUlN3dGQW0oRlkpRUc2RjpHbzR2MmtNQ207Rk1tc0NDbTh5YWJ2b31+b29VMU0hX1A6bT4xUGs6bXQrRjEkN1NNUy5ANlBWTDh8Q3AwXzIrL1koWSo5Yy9FUCtfPS98'@;
put 'TTkve0s4QzVJMkB8d1YkNmErKypKe3soWSp7KHJAcXszKFBnNVp+eXtLUkRyM1VXMSRfVV9uaGElXi9mJjdDQiJ5OSt8TWtkKFpNM1pmJDklVzU9a2V1dDRzKldlXU5pZ01AO2JoNVVHSDJTU2BoeHBJYW9sJkw0ISkoI2oiMzw9VWVoJjM7P2dYJUkxeXFWbiMhPzdJSlQpamhMQkxgQWMpO3Yv'@;
put 'UnEsLHlZPmQ3bXAuSUFIW3guWzFGKCYqYkojX3gmVTdJQEpsSXJaUTN5PSQ5ezdJOWNHbjA5dyJWczs3OjYwJDcwMyQ6KH4zaTteYH19JnkyY19jfVpeWEJ6fTspX2I6RUY+Vioma1QjXkp9QFRbRjd9PXwsJVU6e1pSXy9RSiI8TVV2bW4oaXs9fCp7cWxILHxWS1Z9YiJHQT08K0E1aD8vQyRC'@;
put 'cnNsPUtRMXh+elJfTyM+Tjw8aUZuRH04UEFLflcvb2ddfEZja0Zse0t5Tmk7ekcuLio6X1QrNU5SfEtRPGltfWcuPGVfK1A+dnlfaXJVWSpUJnlzZW5mKkxRPmJLZSxJInxmbHVsPm52XWQhQzgzMXRIRDhqcHZbc3dnYUdaPExBZn54b1k+N25PRTdNRDhwVlArY0lmbmVtd0MzXS5+ck0mQ0Yr'@;
put 'I3JAQ2VoRzkuQktGQGtGNk5qPC8zdCsyQENhMGhnLEFdYDpVMHZsUWBlVTUmPXlQZXc9fFBxXkpudipPYGkrTEVxajF9ZjtnOlBDIXJ+QDImQFBESVEwI2R2Y204ITl1RFhbNnB9Yi5JRE9udmhXazh7KjM1WmJKKGw3Zz5qamxySjlTXiouOGhHP0dyIzJzVHcscmgjJjRqeG4/bHlgNj9nLm0h'@;
put 'Tl92a2U6aV8xcDpVQzlkUUd5OStPUmxEaV9WPEdxVyt+YTc2ZzBYckNdS3BoSlZdcUxVPioqdnw3dm9iZTdhKVdXXl1LcHo5JnY3SURAKUJHKkY3bFd6S15LbSMuXT07OiM1NGNRI3g0L3N3YDNXOz16OjtuOEozUl82P0tnYTM7cXMmVyxvY0I5PmJLIWJoez0pcyk2c21CUG9HMlhUdkxHbyt0'@;
put 'STtDRyVkNUMpaDVjdCVZNiIlWTkiJVk8aV9RfnwpYXg/NVlPKU5oPitaZEosNVlMSmhFPkkoQ1FmJHc6aFQ5WWV1SWxFeEgvWmU1WUdvR1IqVkhseldYOyIlWSwpQG8jelFeZjdeaCMvKkkudllqPnl9KDVfPD5GaW90KHUpRFcpdnBIPFhpQkM9UikwKGFoNSU1fmVQTWZZc1U6U2hNcFJtMFUs'@;
put 'PVtoeCF1bztmN3FaJUx8IlhIRVA2ZSErWHgydVYwOS9GUklHT282WXtpcU8oZmQ8ZloqV0lDSFJseFVYSEIybnNMS0IwUFlrOVpoKy5XYERfUGskIUcySlFvenFnWjpXS0U3SztLQUxGenhYU0VMSy90L0laWHNNKFRbcG1PJk1tTFJDd1o9V21FUUw6Ii5JcXVQTmZQJWozREpvJnlOdSpNb0x3'@;
put 'QmxNZkQrRCtrNktmRz5oVDlhNDd1T0MuRmRIbnQwRzZJdUhDZUNxc3VldXk2ZkQ0MC8qRThNOE0mOkwrS1VAXlFjI2YvVGYiaHt0UlMyOnB1aEJ0N1dTMjBeVjxyKy5jYy9GKEZuamVTUTBieGZ2MnU4YylJRHlvOzkvcXhFK21tMisxSUtGUWlUOTZZbik1ZDIrKXkhWCFIXi9WWDtpIk9fZGU1'@;
put 'Vml2UFEwYXhfWTxVPGt6SUZFdUghOmF4SHZBKE9HTlJ5SSI0UnpOUiZJQ01XWFcpTG45ZGJ4WHY1Lk9HTERxeD5VZU99QzJ4XXRQekZSIklCR2RNTml3TVEwIVlkKXFhZjd4SSF4KTNPR0pSTkgzUmc1PzRbRFc6MDAmTXorN0xeQiIwYzxoWmBXIUVLTjlSSm8iOTlCSVQ4NEAkd1AjTFRaO3g6'@;
put 'S2ZPS2FKb0ZmImh8InZIP09lZSowckxdQmNkSipSanRMIkJvVGskR2VxMS55RXVrSV4oLklqWkVYaUVoaixyNSEreTZYR0tQP0lZU2p4TGZDfVQwQHdnI01SIXJ0I0hkVUY9YFtqWltMcEMuVCFpUWp6TDJ2R0taW11hJHlhdW1LR2s4ODUhV3RhT1E2OTV8eV1BYGMoemVaMSJSSiVkOXl8Qilm'@;
put 'ciNpWjQiVVF0JWVaNiJrUXo/bzcoTX55R0N1aFUwOXk7QjZkPTU4eTp1Ik8oZmVadSJQUGhsZVp3ImNJfW9pWnkiOEk8TTl5YEJ0VVBEK3lNQz1VOVpial9MN0NMYmBrK3lmQi9yZUd3TCxDbSI8YyFXXUlURCE1aXR+UnNVI01qdFFNZmoheWFDR1pQRGdMNUVaN1UwIXk1QnswZUclVy5HUW9m'@;
put 'WlF1PlMicWZaU3VLTzxNI3k7Qn43SVkjeT9Cajk8YylXYEhjKWZaVXVFUUoqI3lHQyUoPGMrVzZJQX1mWklCWWpuNyx5LEIhODxjOldTSSJxJDV6dH5SfW8keXFDOWttT2tMOUVkKmd6ekwlRWEhITUmTEdGPjxmei9XVUt1Ji9Jd0wuRHNuUDcpeTBDUm9fa3MrbEJSXlF3PiRrWThPK3A8Y3x5'@;
put 'UURCfkE4UlFBP3RIUypgW1MwUVNtNjpndU80VyVYVVBZd0xPL3c9ZnZ6WGNPRXYlRTZ3NDxJNnVIYUdYalN2N01PYHdeViJoQzorRk9FT2UjejFWNHxrQEhhYzVfUTE/RGFFZDpJQ35DNjE0WlJUYERhZzVyTHVTdzhBIX1XQ2xgJVl3TWEvdE5MK0cvN0JYX0ZuMzJ4Vi92QipZYnZoI1tXaEdQ'@;
put 'KFhEUjB4QkdsbDU9UFcvNUJ2YU54RlRfXzdmczQ0RDg2PDhYL2BCV0lAIXw3Wz4rNH1EIyVJLlkvSUNHIUhiWi9TQ1FuVFBkU0dYSUpJKTFFYS9jQ21sRThNODJrKVhGS3g7ZW0ma1R1TU8lbCM8bi8oQmBvZnJkUz80QkVOM0hiJWs9dDNORCNkIzMvJFl2U2tVIzwva1d1YFRVOFIyMDRHRj9b'@;
put 'SS4ma2J1IlVSfmojdmM9RjpCI1p0Y0V3PHU1ZCo1PXZjWSJPI2ZfWHR0ZWU2Oj12QkJXaHQvPkZMQ2IqRG4pRlRDUGciQ1YmQVhCSjZtfUxGP0JFXzp9NChMYEhnbUF6a0xLSSg9fEw6V2tRdj9ZN0RNN2NTRk41VCxQdC51M3BbYH1YNnRzVSJDfHZOdjxVdFp8dmRCejZpU35YIXRbVkF3fHZq'@;
put 'QlN0c2NuTF1JUkR+ND9XflJvVSJMQFdRTVhqP3ZidkZaIkMmRjVFWTdNMD92NUJgMH5GcUwuR01vYFhQQjpPaiN+WEB0R210QkB2bHYwY1ZwIlhsWH5VUzIvNzdBKURiZn40SUckRF5kWUx9V1BQQG9AdmBCLCEieXRMI0oocCQ8dThOd0NDP1VbZFlMckFYSmVdYFhEQkRmKlspRlZFLnV9TEpH'@;
put 'ZEUzeH1MRlh6VDpPe1hMQmQ5OldlU00wW3ZydmhsV09+dmdDTjx0L0Z3eHZRbzY6W3ZtQytbKlsrRmBFYip+NFtMRUt9Z0UwW3Z3Q1dJdi9pPX1YYkJqVC5NOVkrUmRIQzgxWiZZI2k4SS5NWXh0KlRQSXcjeUlKL3c8ZlB6QVJPRSx0NVkmaUVRVTJVWCNpeEo5ZFl4fXVYSFJ7UEghWVIpcm4m'@;
put 'OlJAeStmdEd2TUkvJXlxLCRwK2owYVl2TypaTzBlWTZkWzVHMEc2Ik87dERhWDVFUSQhRGFaNVtKKzpIYSZPfDZHS1s1SDA2WXlWWERPT3F4NHV2emZPeXhDd0JkZGNZR01hY1M+KHRIYnQ7UFYvVUNMRXRnYUM2a0h1UlA3PU04YHYwQ0BeKltrNXl4Yio1ZC81WHhuKmlTSXdneGt1Tjx5cVZA'@;
put 'JVdPMFcwNl19dnk7ZkNHdHg/Tk0xMH10T3d3IzhTN2x6TkkofXd5XUN3Sms+bzA4PE9IeiwjRVhlanIheHcySFdaSyNWMyxPeHBYSEBJMDA1WEkjRDhmcjxydThTRyY/LmcuSWtiaVJWJmxLKy4jOT1IR2lgRThOZUl0ZHYqc0s6KSlldn1LOEEhdTh4Nzc5MDFgd29mIWFlMXtkTywpOFUxKiNq'@;
put 'KiVQaTtNTGhXbGZSZmFmQilnZVI4NWo7IUEuUXtAQH46ci9eLC9qRSIzPlModyxzZGxBS15BfDcqTVIma3lEVWp+KW9YLHU+Z3NRSVNjJXhEYU5nY2w1algsdVBKLFNnWCRNWFhfbntQWyFGbGhlYyxwfGAjNHg0Jk9uYl9WKSpvaWBuUjBJQ1hodDxpTChLfFg1OmdjUS9GJG1BUkhDPkZuJXQq'@;
put 'aipUMXskVzZEbUI4d09BOGZSMEl2KmFpTyFJOX4oRmYsIzpLPSVKbUImaHRNZXdQfHRBaF5tbyxvZUJQRH1WZXZdOmpre1VtYXB9LH04TFBJUD5pQUlmTH5CSU91LmUmem5UTV1DVFkyTFtPLERVZT8wJU1VWH0+e0lbIVMvS3NSJXpGNFdrWXFMSHJOaSp2dEF4ZG09bT1sfEFMPCxHc1NmSzE6'@;
put 'Nz1sVGUmOGg7aS9PUHkoYGtuOUM7OHFZQSFLdVE/MFI4b2UmUDAxIyZuZmBUfHArdHluQmUveVVbKU9kdUdleDhNNjwkRXtVWEM4LkNCMmRpcCtbZDtLIm0yJGgibVpgPiwmIUwobGFwNUYwImdYLmlOdExULnEsSzlsMEJpRmJEPVo8Q21Gcm80M0NlbTR6OERXUV9YXVhsKURDOEpQTFdlPSVd'@;
put 'WGVNdDRHczg4OG5BIXV8UX1DeCNAUC8mSER0SFtXZGNNP0MiYj5ASlk0LiZyNDFfJVlAfUlJOG1BdjlhfFl7XW5TX1M/W3hyO1AoZlhlVF97dDskeChMQUI4QUFrNlBnQjg6Z1I3Ond8OlhOWHQ6SDBlS1JsZ3ZdLyExSnttfDZGIXIqeGdfUEVXZ3R9JDhpR3ZQUixqUDcrdls8ZT1vLFJYX14q'@;
put 'TFB2NVluTDssYn02IUshKiNGNGN7TUNvZjokYWE4Y3gwayFgUGRnIjZgJUZmJEw0KX1kVz5qUkR2I0V+cHdGZysxOmk0eCl+KURYLiRCaSRDP1dAQkg6d24/e1hlWSl5YSIiL2xbPF4hfHRjYz9fPFNFdCNIQHxJQUV7Sm8lUC8hez14JW98Rz1zeE07NWtHQkdCfSRNNiN0PSt7IlZSdWE8Qysj'@;
put 'KldheD5MbmZRdiFEPSl+N0haRHBGVzZ1VVh8RDtERCJpO0F2I0R6SFVRfGo5cjElTTlBZWxQezZ0WCZnNDFOLkllS2RmO3FtfDp5SSthREhwdUxpOWFqMGgkLiEiOmlqbUo7SGcmMyRvc3BMZT0saVNmc3RDZjFbb0JFMEhdSnV3dSxPTnZaKz8oVHM/QWxCeE9CUFJyPWF7UDQpKUZCV2hMWyFz'@;
put 'YXJPK1MraEFJQ3RiQWcmd2tyaUI+fkQ9ODI5KkBdUk82Oz1dQjd1Qjh+N1cpcWdXbDRIc0hXKSVMZnRzTFhJbUspPFA2JSh5ckwhLGkxWmAlOis8KUIoXjhSQF1CRClqezQhbmZFRVB7aGtZfHwzUF51UC43T1VeOTNMPE1OcEppfDYoU2NEMGFVXyReLiZqRm91ZVIhV1F0cnRXXXtmZSxYQlA7'@;
put 'dSQ3KkZ3VSlRdnIrd2dGZUg6PCZoUmE8R0E7dmJCJGRpYjI7I1p1SVlhPmhAI3ZGSG1FXiNxfldnI0ddRkN5NzZ1PlpRO2ZSRGVWOExXfSNeRlQoRiRfJWZeV0kzKXlaQVBKN2d1K1csO3x0NElocHYoLF91eTA/ZE1qOWo4eHJxfTxZKlZFc05ZWVZGYF06dV9Ncl5IQDVtTDphQEMxfkhicyY3'@;
put 'SExqNDQ2QEFHZEZWP2NdZ0JXMTMoQnlpSVFffDtZMlVlaHZ4OS4mZyZsN0dJPykxTGMmeCloImZFbkJSRGZMT0NGYyElezh7dVRKSnMhaUQlITxmNylqJls6YCVQWXtUYTBWQGZuUSxEQCZBZXxLSXNRQjtIbCUuRlgxOFJIKiwxLjE0TDdyLkZ0LDQ0fDZPfEApKndLP2h1akV7cnshI0M1NFZQ'@;
put 'W3YzKVRfWGVjOFQsT3slRkheOF1KV0Y7UGNMaTRPaXlwLHMmJFYuZVVYXSlyYEtpUX0sMUBYOCwkOWJgeXIkOXA3Okg2WVc1ZUUpRG4+Yz1bT1k/eSFTV3gxentbRj1ibWhDZUdzSH06OFphTn0xTFZlQmI6UDg5aip7Nzs9TCpCbDhLU2JbTjwicUwwMytTR2VNRGpKanY3YmpKeGxOMzlMb3VN'@;
put 'OEFeOkJQMjcjLygsNXplfmV5cyZhZEIjRSZlOHRmQ3JSREYrUzsje2FqSkdXN0cjRVhQbkNqSk1rIUUrU01zdztVRUtyPSJKO3kvcFFqXWNEaC8+QmFCPW8+PHNheDU8bDZkclV8WlJRa1hzWEVIPV8kV3x1SU8sL0x5V05lMCJjY2N6ajpOTE9kTlFPXnRJT3lhPWYwY3Awb3VJT10iXWcpOmBm'@;
put 'Xzo8WUk1TDZ4NSlkc1VEYnJVa2Z4YTZPSHpLQCZaZWRlMzdHSUgiNUJOO1pXOEpPaWN2RDhHUGFyVV0iSU8sL2pdZHdtNC9OLDo3LjVHazxzNFN7JUQ6Wn5EZDQ+TyokcjdKMEZkeGFQI2JOMWZdW1oxWmQ7UDUuSTZWSzwoeGMiNTZhZ2MqQmk0YGRkd3tvUCNJNSwvel1pISZaYns0R2xRejY5'@;
put 'NyQ4eGMsYVhhUlF6NjZhPjxhPitrPyVyN15PS2g7RjJHWmU2JT8oZzQxa31vK0pLSUMwb29sUHYyTipuYVFvc2MpRl5dQGd8RHNzS0p0K1goTH5YWmYwb0JLOHxDYTh2TmVTcHhVTy55OWc2Rzg2e2xiJFRtLk8obXNdPVhQbkh4UV1Gej9iQTVJXiYqZ3smVyhrRD1eZlVtSS9Kb0dgJlgmJkYl'@;
put 'fV0mQT9jODJ0c1BLPTppRiFZVywmdEdCVXJvbDY6dm5rRVs5VFBIejZWKjh3aiVsO1JdJk9od2NJMD04TzVULzQiRVRkNDlTVUk+T3dzYWw7SCZYKmR6NS9YVy8sTkNwPEU+PSxCUF88RWhQI3luOyIodyYsTmlwaEY0X3o8WSo5S1BsQz1CKk93dyw4JjRKJlUqdTpQJWVRM3l0eTR4KyxPc2xW'@;
put 'R1o8YGc2TlcxWC9zJGEvUDgxST1dQnIuZzh3Y2syRDIub0Auc1s7aWA4OSh4aTVxRHVbVEgpU1p1JG5vISVkYldWKUhbMm48YCpLUDcoOzM9PDwrfTIyfj4we31oam1veHF7VTdoayJiUihVOzJve1ZTVjk5LE52aT9vUnhoRkJVTyNOMjBVQm1USTpMPz1gI3JVJTtocFdaUFRqPEhGe3BKNyRY'@;
put 'Ri57KS5lIiNXPTRtQGBMPWVraDNHPWVrX3FrXktVVDRjeyszdk4rcX0/XjxOcCF9UyQwNHIldVlBbFtHS21eMUQuPzJtbXBTW2chdytANyNoRW9aMloqYjRKLCU5Xkh8O2YuMFVhZ2Q7bDxEbVJNWm9Efjc0IUtuW2toN1ZEeDwoeXpuIjcqW3A+MV5lZXkpImRjZlYkM3RBOFBebWQ3VWIzcVFX'@;
put 'eTVKOGtOQl0yRlJSQ2hATVNlO19jMDFPbmN4RTx5bSRMe05mPUY5JCVbXSl4d2osfEBuK0pFNlZrN1k3XTspPj0lWWR4JHFUR1Z9Vzs5ZFNeR3N7QFAsUWB4MyRxZD9sU1M0MTEiem1oO0BveEljbXJ2MUMoSlEsVVVBeWwmamZYPCpnPE5iVyMqRkdnXUBKP0Yqdk5yVlZTQVd8Wkx9JkdYWml2'@;
put 'QSwub2tMOkdsRGFKX2VgITlMK1NMIlUkY3IxbHJ6fjxkRkpnQDAscjxAWGtSYSx9SWdAMGoscyVEfVpzfU1eTjJIR2ByVjh7cVNNamFleiprLmFtdndEW1cxamg9Oj9JN2JuQ2NrNlVTZzExTmh7IzwzajltYGdtc2YjNV5vR2s2P3UlIktDeCNHPXJQI1ZgdVNNamFlbUB9alFOdGo9O0NzV296'@;
put 'M1M+fnFHUW9hZnJxa2NWajojWWtZb1grK3ssQTZCNEZLW055VFNmVVV+I057ayQ3WkUxP3ZqcDhfTDRyY303ez53ajxZZjRuWEUueEk2OXxmQWhOPDZOVHJocT9Kc0NeSH0/JVtjXkV1WVFqPUlHKn5UaCZMSTlJdCJHLl0mdyRJNHFYNzEzUXRbMiJGaEZqIjZiZV16US5MQDtVVjJ1JlhGc01N'@;
put 'fEg9Nmk4eC85eUcmQTgzUnVIV19gVWM+MzIsWnlJZiN7MjZdKD5XU2V+JnhRQ21Mc1lyUi9LPUhfWUw4dipMckRmYEpJUHVuKGdCRUBEdTVAdGhpRGY2eG5dcE9LMGxnI2UocVZPOyRWSEVnOl48LFokXm9wLE1WOC99Ry5yWXVwaEdiem4hQHRfUFZ4dU5GMiE/dnlJMytFIXc1XV58Uks+RGNf'@;
put 'PGliXVY/ZCtddmldbWtYKG1vUk4jUUZ0NFouK1dnKFApXnFRT2YmeXFuWGA2MihePGdFV1lmV21fVEQ9WHBtK3U4NyRMck1aX2ZEc2M2PWFYW21oOExNamoqUFVbTTM9SWVOUXshSkZUQyFncmdiU0BJJkh1Q2AqZHFpWXQ5S3d9THJ4PDldO3MvO2o+dDIqbEZ8ckchOTMxeXQkSWt2YmppeiFU'@;
put 'ZH04STNwTHU2fWFHdG9PMylwWU9oVEJlQEFGNTA/X0N2MjRtamNYQnYyR3VidnRHOE9ndi5ScHIkZiNfbVA1Tnl4SSgrPzBFNlA2NlheOngue315bmdvVWQ4UXAlZklVUzQqbk9zN3BaS1BTWTU+TXAlQktaOFBEbjVhOm12S1M6Q01UJlk7WW08V09TfU9mLFR+MT5vdXBLeV9kcn1NPVtlaEdL'@;
put 'WjIrfFYmQ016PWUkRkxHKGUuZXlfJWZ3aG0zKVtUMWRkbEZRfClJVjhDaztnTVBnODUhZ3I7b1NaRFs7YmtdOGdzfGRrc0AjITIuRn4/TjVpOW8uTSNZWFghSlY7N1MkdzpTUDIxPH1TdEA9N05dPGclYUVsOSFKOjE8OCJJOjE8Rl07KSE5aUpdMHVVJGxDfko5TjNMRGVkeH00P2VmN2tSfD9D'@;
put 'aEVbaERLeFt8ak4iMyRNTW5YUXxDbDJ9YVorLjJ+NFlDKUFJcHNMallMV3R4ZzBMIWs2TWZ2NEJsSl1RQmxmLzE8YWlUL2FJU3tES241XWllZD95dj15NXRAaztzfD4yYzRWKUJIWWxsRys+WHY/e3Z1KEY5JFokI25weXcsQzF2OHdGWjg5ZkladEI1d05OKE1jNWY3InklTCtScmEycyE3SXpB'@;
put 'bDB3KDosT2VtOztgQU9NcTV0K090PThAQkwscTV8QSU3Sk8lPz1vZ2NTPXNFPWdiTGpUUnZgXjZGI0p0NUxvSWg3WHE5RHcpQ2ZfYTF7PTFoYDZLd01bMHBqPjY/VU9zVG5QYEZQZ1RoMEJRWFF7X3dAMiouV3V4bj95dm1+eDZNRHlsSCk6T3NwYlFAMm5waVB7YTx4ZzxYKHJySz9aYkJzc34i'@;
put 'QV9AdDkoJVgudTYoKFtQO3ZCL1thWjhVYjFwd0NvOUAoZSYjTU5NQ3U0cEsmZisoMHlfWUtadXVQZVZSIkVmSihXS1FIfWpPQiVWJVFMUE1udUU8KFRVZDo+Jk5CckJsPyhBXT1lKjl+KFQkUDFeOG9pM1l7IkVAW2tPflkoLjlAeXYzXkI7SSYxUEtNJnZzSmVjJkw0Z1ovVWZxWXlybjVFNSZM'@;
put 'Nm9STCpobmZbR1ZlKlBbVCFGXUgsYDsxQGpDTmpURCk+TkYsWVYwMEoqN0BBM3QsSSpBUzswLmZDIjtQMXVMbVFGdTklXmRlPSpzITB8I0I4QkhXcj06cG5PSEsvVzclQkkqcU05TiFsaCtZNTB3JDhnfG8pR213UWM7ZTQqU0V6fjt7b09zMFIzQmRbYzNKRkgvNiV5Y24yXWZvXyE0JEk2aWVe'@;
put 'QEVMdHIvbjJLWWNISShpSFRLLiltbHokbm1Sfn1FcTU6LiE0ST0sQjRDRVExRGMmVyF3OilGPTZORThdQHhOaExmTmx3aCtMMiVFPk5fV1o/OlVtd3VGN2RLPTdXW204X05ucS5xS0hXJDl3alAiU1UzVFZjdEU+LEIyd2FPIlNbNjouSWFFdThVITZWOVU3VTF8XWhiNTFjZD8+IX5UbHcjKiQ0'@;
put 'RDFxKmk2Jmx2WHBTRk5nYUliOzk8UioqeUI7PnQvZFZhJiJxYz05SFNDPEQ2dHh1cGlFREpkQzxvJktudWIvTSprMSMkK1pWdEVPZDRtcV0zWlVabFpPfX0mNXdjZVleNyQ5M3QqaVJiVnc0T2YqZUg9WisrT3w9WkxyMWxLbDxjMzx1Qj48U0ZoL3x9JHdiNC5xb0d+emhsO1U2aWsyOkFUdWxQ'@;
put 'YntOY002LklLT3VpJlgvZGNzUkNPX19BRitCVjlJKT1Hfkp2XWc9SX53SERKcnpXMkdkeEpUYWwsIi57IndOd1hUJn0lO0dZb1hWWilzU31dVy83VylCdCwzZ1R+aHNGWENdVihkOkp1V2xyUHBuWW8hQExCZW05PGMhTmM6Yi9KNjkpVHA5NnMjX3U2YyY+OmpzaE5zR3EiLmMhblNkOT1YP2tM'@;
put 'M0VqOkckNGVyfU4qeFZVLnNTdj5gR2owcEttb3tTU1defEkpc1omN3B5blg9IX1gU0Rvb3hwI1JqSFhRWzJuWH1EI0YmdUVlZCxOWl5lJFJQKDQxS2djfWttSEtaWX1HYC57QTowRzVRPnRlWTtgVmIqNWRLMTtJTk8jKTxoKjxLMjQ9ZzxGeWBWazxrejJjLmtlcHhwI3hqaHAhTzVJOURJcnlK'@;
put 'IllGZShHa1ZWITRddyNHbyp5XiwjXTc0KypFUW44djxkRUB2NjE5dm1taVdsVV1GaUpSY2x5eVRqRk99ZGFleG0hS0M1JEk1XUVNSD1uYV5GXUwsSSMzVVp6VD1+WjNtUmJrPFtdeUNRPil2PEM6JV1XO3JhJVVlWCo1TmJ8IiFvWCg5cEchWU89JHVaVkE8S1hsKF8rP0lQQyM0WnA5N05uZ3Yw'@;
put 'TU9rPFdpfWojMnxgX216W31yNVNYWjtkUEsjIUUifH5NcDdmQE0oSFEieHh4Om5dPDpGaEBTR0VOZjBfaWNRM0p5Ymh2SVZRMEA3UnxFYWZhKmN0bCl0eTNJP0JMcWZRUld8OSlyQEZWfENWbXc/TypqcUpOJDoxSyUvVktHImI0LkhaTj1gbG19cjE5O1ZYPnZAbjdQJjBzc19Ycz43bjlGS20i'@;
put 'Q3xXKiJgcjZAQjRkWFdDVjxdNGRSI1N6bTRWR2s/L1JwRG58I2I1Ki8pZi40KFRIWiFeUzBCTzlMS11VektdfSovRksjIyNCNjtJcn1oTCwxbyNLWn1YekY3Ok1+fUYwXzdSKE9HQVBMZSJPWFcpPEpnV2o0JVFYL3RVO2J5Yzw3bVtveS8kJWVjJkw2RWImejxrcldOV3Bgfn12cHIpdG4yODpi'@;
put 'dTNWLkVtZCNVejt2SyJsIjw3L2tVV1RUbyY6fCkkcWc/WHViL3FoKXJ6TEtkPExbNmw4ayxlM05ocVpGZXZdYDBtejYwSDFQNlBvbChlMFFxIzlbUDN9JT54UURfMEt5LD5YPHFsVlgzWFE6fElAJXZzfTBNXT96YXl8KHkkcmU2MmcjfTslI0lQdDMsQXBDMUZNKVJsW2h3QSw6JltaX05WcS4x'@;
put 'QU9nWjksNU5tMklLOG8vU1FVKn5fRmsmPyg+d05oYGhVejBwMHFsd2JpKUtxLHFkMWZbMzYuUSs8Yk1uMU0lXTAsMlZ2JkBQRm8yZ2N4M3trOFMkRnBDNkFwWGhJe1F6Ki8mPDFKcTVGWVVYSUVVIXFHfXp2eywxOzNDIUM3ZDFkcj9SeWBLdWxvQzRDIXE5e008enB5V2BpbWFWX0xmNiptLktK'@;
put 'M04+LHgpNUZ7fj59PmExPiFeNik1X1Y9am88PilxfXZyfD9ga2N8LkBAdGMiTWh8Wippaz5HbjBmdiprLlB0YVt7W0ZvSFspRlA/bD5NXXNiVGY7JVpGWiZzfX1vR2srcmxgeiFIQzpWKC8iKzUlITZMdyIrTHIySnxOd3B1TXpzNFtvVUVbZUtvXTk1JC8xPFdLYWswO1c9Nj0wOVtHQ1cuIXQy'@;
put 'UmomI2htRD55O1tLQTt2bHV3eWZbPE1lKzkoSjBxdTxIay8jYiE2eSZOfUVhR1NAfERwQkYhQDE/XjFxMTxtM2loKFU/bzttaHBnWiJwWyJsY0xzZ25CR0c7QF11JmghRDhtODgmUF9sdko4IVpiPlkucDUmZXNUJj0+RWskKVZXeFs2PCE7ZHUlLyNTJCV8c3VUJlchVCopRnIkfGxXdlZVUW56'@;
put 'OXZWJHEjL05efkBMOWp3bDI4Kz9JX2I4ZXg8cnsoeUheWnAuPFkkUGkhP2czIjkkJT8lJip6TG9xPVViYlBTRFdKXnZmOVtZJHA4Pj1OL2hDIiZNbSRbViRjMj5gTjQobl9LeDs7XXg+ZzNZYVdyTSR8aTVWMn1NZ0MhRk1CVkZGPXE6LD5gNjVIaUs8diMrLGZTaUpaMzV9cGd7VltARWVwMjQu'@;
put 'QkJJI0R2RyZiNVNCbHhBPlY4Yy8qMFpqMyVFX0NIaGhwQGxyKVR7XSgpcXIuLGh3XUM5eXhaLzlVPGJMR0ApRzd9fj4ra1c/ODNGcCw3OSkwOCZPa3tOSTt6Y2I2VSxIRDp5O2tKcFBSP1A8SExXPzB1XTUvLlliI2hYVW07diw9SWZxSHkvZkRTTWRQNm1kdmk5ZGxaKCooYmhSUFAiaGlscG9w'@;
put 'clF2SFMqUDIxOy44MS8sI3FQRGtaVjRfVGhsJFJ9PXZsejw8TH0sIkJwcjNMZVNVKVhmS20yamB8X0B6Qk1Pel17KGNLImA8LCwrU0tEPlJ+MENyS117OEtTey99SkVde045WkBpazgxXjhlR1BFVWEsNUY3S2dQYTdyNG9KZW83fXReSHguIkVZKUFdSnF2MkhiXVBsTD5sWiU4NitsWWghVl52'@;
put 'PHY+TDB+eHxqWilfRGh3SGBic0kuIU5rZWtTQmZdYSlhS2YqNV98OV9VUnZ7YGlaPUZxWTJEY2Y8NHJULiQmS0VHb1pramA3NlpvbWxFOTA2ZGBbbjcqOXg+RlJVaHdnWCk8P2orP115cksjen1zSm44fV5nWEU4LHAxOXU7bWZLamR7YV8mcGF6ZD5re2NfS2xQPGBhWXM5Vj5YRyghXyh2OC9D'@;
put 'V1MqfV5nTHt7K1s7S1peKEJKfHIyc1lKe1RDPWxSIT9JRWxVJE1OXl0jLmt7bSEyVj5PRHtgO283TDs4W2U2alIsRT08eUkoV2tpZGhUPi5LQGRKJmA+PWcrYC5dI3Rke3pgekp6fHxGX3kkZjRsVWt3K1Jdc2JyPHp2N0xeallNLCxHV2VTXTZXWFgpLGJ0dU1PSEUxRWU1YEc+Vn14dXdEZVIh'@;
put 'YChXdWN2WGRLYG97aitzKztld3BQMm07TCNpNXp5fjFWO0FFXmI7JVV5TiVGW0o6JilVWChRO1d4dldbSFY9Vy5JRTtlIl4qdyE+TE5NW2MzPFdwL0cyOF83SV5qKyU+e2R6fCVFZjU3LyErL0pzR219P3ZzKlFqX08sblhDfW9HUGd8PGthWm9LNTl7dXlNTHNoT0shTUhse0xrRCM0W01yKSQh'@;
put 'X216RVY2Xi91KS4pTSxeUlN8MlFffHxGSUhZeTtTTVNzeWg2cCU4Ok5LKGkkOXMwUVBMNF5KZl48M3U6ImoqSzU6RURvd2gwRCxtQlhgendWK2xjQnZLPGVke15UKiNNPUU+QnNBbH0/fiM6TjM0fVBaYlU8YHl6ZXFkIkhgRFdoSnAsLCw3TVYhNnk1PWVKWlUlSVkrX0dWS1MzaCE5fFdMfFU+'@;
put 'Nl9PfCpKe0A+ZXl9PmV9P1c/ckAvPCxLWzZgRysjW1I6T1BebkxaXyVqTXIkWW9aX3c4K1hNfUssOix3YkM0VT8pZ0ZocXJkXjYmZldga2tAMHw3PjVyU2NZPlVnJSM1YE8lTEdkcW45a3dUWWIqSU5rQWFsa0dMUHE2RVNpQGM/dEdNezlRM0RuY3lmOmtIcCE1LmwvYi8qUXNVYlF3SWNeP3hR'@;
put 'Vi8vRkNXXUdTazVGXTFNU2VofTxFKF9hYX14OWJfW196ZXImX3Y3LHw1ZkwuOFZyKDdLblZpXnQmQix4bGYrLkkjI1BvJF1xWi5mVSsvPFokQUcwZm4jYSg9b1ErJFl3bCoiNHtYS182eXh5Y3M/MVB8eUZgPDN3VmtbYXJRR0xXVF81QEZxb19oS244KTNKQHk4NkNwI2c5aXtwP2JLXk8+NkRX'@;
put 'aDo6SGhxPiljVnIoeTNKQD0mUF0mVE42JHZnRkdyI05WPltzY1ZXNXE3Nj5fenFuKUMsVkI3QV4iK3RTaEJKNkVAUFNxWnlOYXV3RD1feHBSI2xLaFsiVkdwZDd6M0IzQWQ5b2lXQ1J6akZUJT0ifD5pWSw/W1FsMSgjRG11N1dmY0l3YHk+dnxPRTZuTzo8JS5NbWwlPVREPVoqZHkzSTZdcVo8'@;
put 'ej1jQk8wTWQpaV11ezRMcDooaWp0aiFbS3FWRzA2IzRNZGIjW3JzeW1BZGA/TWdMQEozdHMsL1NJIyMmMSZNckg/eUV1ck08Ukk3N1dWeThYOm8hJDl+WHxIN31gSmpmQFcmX2p0MXk6ZTQsQTJGY3RMV2ZfX2ZiNGslbHx7X1ZvTVk4MSFpVHUiWmt3Y149TlAjSE5JYmchNCJsO2MiKDpBXk1R'@;
put 'Jnc1W2BQa1prd3M0ZUpFN29oYzRENytOeUlmL0wueHh3Ok9bTEZ5Km9LXnFRJE5pRSVIXSlrRE54QEgrT0UlRSEvcl9dMzVyQlcqKjRjU2FARTxpd0Vdd08rMXlHJkJEVT1ZNVRAT3xQZ29LKF1eaENYSjE1Z29EYDcrIyVDZmlzOVVHJmQuXjZkYFtLZV19eDFdSlFHeGNjKkFGYUo4YkUyTy5J'@;
put 'MjMrKSEzImNBUXxfJClkOE0iZk1PZm0vYG44TmssUERES35IUiNKKFo6YkAiN250VnxEaEx5e0FsPX0pXzdtSThgcyppJFJheFNiV0wmeFk/Y2YvVy41JTs8bCtsOW0yczk4JnNVVShwRkt9QEx+L3xWPGltNkZoVk5YO2wuQFhHcVtATGRfQWdVcE90PXhwNzMmcFVpXV1HTXxMfFd3ViU0JGQp'@;
put 'UExdNiZOfEB9X083b2U4Ty5DbzUjczFSUjt9OjB1K0JZQXJWK1U+XTFqKzRGeVFucSsmS2EqISsqWEJqRlo4a29abz8qMi5dLFhFNHlSM2RoWlR0aE90byZ3QW1qO3U/Z0dTRWtLJClyLmQ8dntGJmdQT20mMTgqN3QzdnIhfVJ4WW07OU0hRExxW2N3UktGdzhoK3Bma0psSTU5Oy9UflJAbHdu'@;
put 'cHNzfjwoV0RsI1UmV2pRSCRqMiJAUzIrV2hMK1dzOVEsbVhTfWchanB7Km1YM1JacSF1eEJicSFGL0dFaiMyQiRWamdaa2psO2JfOlN7QChWQmc4dEApOyVTP3N7aEVuQ0o7PjF5ck9yZUUyM2dHRVZSRkt4IzZ7bCsjZl1gRGBuRTlIYFJFcFFbR2g+bDIrU2MpdHVnWmZMcXdSXjFWaHMjVWYz'@;
put 'WjxBeWhHNkV+dzo+MURXVS5RYylwMm5eOU1UWUBYZFsrRWYvc19WbTJ1bEtQRn0/QEw6alF8SmZAVmh7aCt9I2JlIik9eCNNKzcmaDkjQVpaK3RASXp9SmlVc1RJSnFkfm5nQCpPdUFwckVEWSF5c290b29ITVlaZjddL0s7NVRVfnA3eGFMKGs2elomMWBpRkZCRGhrOm12dUp8JHk4YURsLF1O'@;
put 'aXVlJjpyYyxNTHxLMjpiXzUkT31nWkd2dTlnMVhVPCJGY0xKfV4sZ0B2bHpmaEhiVlZAPjVTbT0zUElbRGF+SHcoSUYyaU0vc2o9KkxgYEw9Lnp1XSFJOSRRdDxrNUt2dlBhX3tLc3ptTXYlfkdWJU1ecllCcVMsXzxEeTJBUEt9b3UvXSl5RTFfUGQiSF5xWiM7eD50WjwjXzN9RkssRERmOiVJ'@;
put 'OnR5MzFmI18jPD9BZC5nYV9LQ0k5NCNZa0hxISVJbVFheEdDV3AkNkNYR3N2WTAsKnlmW0V1THJFSXhjcGglZCloJWQsSVB0N05gdkdDV3BrJmh0d1UwUWxzSnErOVt5S2tFflhXYExdPXVoWk94PnREV3dIOXlEK150X0hecnN4O0BwT0hnIXk8aCo3Tm8mcUg0SnA/Y084aURUdGQ8IzV9OE45'@;
put 'WTpHQ25kYTp1Viw4Lkl3fDtAVlkrbUckfGNrQDpNSD1uNStfYFF6e3FaNWt4ZzQzLF16SlZzRnJzd2AkTmpqeDolSSNXeWJZK21HRW8ib0JOPnxISkJHPjI3dDJFTmpUREpLOyVzTiZXQ3tWVyouRFZzc0gmSCtwNlY3Mm1ZMjd0Vnw1YXp4KWEubUY6XS9AS2ZjYS5wdDM8K3hkW3BTXkdbYzgy'@;
put 'NGIobW9SNHVaWnksTkZUXmM1S2EraEd8ek45STZOfVozVWspKylSK0hILzxRTCRafmAjN0pPZ19YMiM/REpuXUQsUWEhLy9QRWQ4MjcsUE9oZC5tOFZSYSEvPl5qSGY8KlY4bXgmbjdjbWl6KSFsKS5dTyEkQkYpcTBuLEY3V01CTkNYbGZuY21RYF0lTW41QFNNdiwqe0dwbSFOZHg4N1MyYV9V'@;
put 'bENwTjRrMDVkI19jTzM+VVpTMCZLYCEjNmxEZjp8fWIsVmNHNUJoRzU4dyg+OjFsQGN6fnV1WUlqYnRXREsvVzdyYiU0XXx6eVZISE9yd09jYHpjU2l9TDQ2a0s0VjYqRTBZfTViVDdOfDR+YyMjbTNyIlZXOE5heGNzKmR+RXNEb3FCPlEuc2hudUt8UklFb3Z7NCloeUEwbWh1alcrXlt8WGBX'@;
put 'dz5iNlgrdipqL1lZU2NKQjN4SSZ4Z3E9U09vIUE3ZlNdcnRYUX4mRkMqLi8sO35ZTyR0cVRaLHouWXZLWWV3bFNvNnhFU0VHZXtxJEtTR2NtYixMeldOW0djQz47KkNKP01DZTNVUk8yN1Yra01RQ0xVVDQuKE5Yak5tMFF+OSliKVJfe2JdenE3eWNQazkuVkIhSl8qPmtobUVAdSt1THU/YUlO'@;
put 'VkE8KUZRcU9iaVFbdCZXPWNlPDgwRl1PT0thKyNJJDc0eUtMZ0MmSFQhQD03anddIl44MiNKPDJKbzpyXnt3aFp5I1pVfVk7KVUuJFRBTysyUF4lZEZTezxSalM+KDZTeVd9I0RgYko5M3NNNUAzITJFPWxKQUh1XTJpP2tXM2lnO0pkenpaa35qW05EL0t9WCxCfl1PRnpjdyRoSEE9NG03VUVJ'@;
put 'cm1jZ15ZYnU5WGhecWdkeF1lYz9iKSh8ZiFadmtzWVNBbTBCJj1HJSlbclpUZVJ2e3VEYnBaJHlWU09fcih6Ry8lMiZOK1J1cGg0MTJGUD8iR3suNStRbHBFeVZwJmZTbCtVREtJK0YkciRkTXowNVNzJTA4dGZtRHRmYzRVU2UrI2RrZWRGbypkdnc+TEkyMDpHLlMyKkpXMHtgeyV3RCFwZiNU'@;
put 'azdPYGRKN1RwO0IufEpoKls5c0VOTCNUJnQvWSpXUDcjO20/Y1s6Q0VGQGJAPyRVVSZoRWc8ZyE1PmYjZTc4QHU+U1YuMyFPRXE+JHY2Rj48V1VATylwXXt8K2NhKU58KzBTImJ0Sk50UXFRYXUrX0YuczdrZ3AoTSJubjdJOmN4eCtaOEJ2IiNwVVhHUnxgKyJsKygrU35IUD9fRlp3W0UwLClG'@;
put 'YixuWmgmdGNXZm45NlolZWo7PysmcG94blpFcCIlejtDTUt9Ki9oNT5jbTtUYn5ILlV8WztOeFRoWlhuTTBHQ1dwN2IzXXVaNU5aUFpJezpkS04wMFluXnEwV3QkbGRXSD43Xmhsb2QpL0pzbHc9ZlY4UXRwYnlSZUttUkU1JEYoJjIuTDtxJUN4N1VrJGl5Myo9Y0JPcHRTJjwoPHYqYCFJcmpG'@;
put 'Rld9KFB0PGYrcGZJaCJQUkRfWChXNzkyIWh3MFhUPUNnMSpKbzM8ZEtPPHssV30iIStyVDt6Y1RoQFJUQD1EYDpKKk1MbTwkYjU+QX5kS2xYaEZLOyIpNEp1WVR0ZFN8WW1ZezIxeHd9aEk9IiZrRy5ue0w0fH1MRF9dekgxcEROPVlhe3hseXJGRkEhTktzNHNbIk5LV35yOW43IyVjTW4vU3so'@;
put 'NX1lbm1XW0B1e29dJChtYm0rP09xckc/RUlYIWtaakAhS25VNSExeTh7ZDR2TDVfazNLKzErbElUd0okMDR9fVlHSmcwcEd7IStyIX4+RDIiO3ZBKksqdTprTTx4L2h4cEJGRTpgR3dleTx6VnkpTTVnRjUlIWVSSSEqIlMyO25DLEpYKVtWPCpkaFNmTTg1PHhSOGtVO2t5T1EqR0hFLEAhYjY5'@;
put 'IVVjai85U1JUVSRxaCEweFVFOls8disyP3ZiOnl8RGE1eDIyc1B4PCEodmA9Sj1GbFlZaFJpPDA5LlBrU3trQEpKMG8sZGxUQ2t5fHd2akhidldCdGYheUN3LHc6K0h2TSZVSGA1JmtYaXd5Sz5+WyRZcixxTHFSRm1bdGNRdHd3MiNwNldnNXpvLCVqPyE4KyVqViVXV05qY3U6KilLVXk0ZnJ4'@;
put 'TkkmbDdhZTd5bTpCbS85R3ZacEdmeWlma1gpWy57XkssdXEhMG9yYWVJQzEzWTJZQCYhIWFHK0hhcltgbWtwIU9WOXpiK2BLU0k/LnkkYiNKZ0c6PyFQNmJmVnZ8MFZWYWlUSzRpdSJjXU8vei95RGdyPzd+WSx8Sj9JTDl7Nkx+LEw1WHR8TipKenw8LGNGVDpLWVMrJUclKXpCcDVqYFlobnY0'@;
put 'e200NVBGR1NGeVkrPzpPT1g5QUU3YkVyb0ldZ0RNM2RxQWswLlRXPCNiVzl6ISpIRDkmMns5aDJxU1Ntd11wQExVKkBwKSwuQ2JWMzEpQmBLOSYwNFcvbEY4UVFVVC8lPGUuVm4rclB2M2lgNGFUdyVTP3AscG96MnMpbUFDcVRVSnxJNERuY01mQkBAQ0FAUX0sI0M7RzJLTUc5NzE0b0JSVHQ+'@;
put 'dXZTRmB1KE9fTXxeXkApfWh8anlHPXMhUSwvcElAQGlaJCNLPXtscXg6bj9+MUhpUit6KV5AXmdmdTkhQ1VvcnkybGlQPVBsOl49UFtQW256eX1QN2drb2M8VU1aXkdROGF9UX59OGs+LG5gIjt4WmtRSEN7UV89aUwsKTpVSUt1LD4jTWd8V0V7NktCSWw2S0pvYCttTHlOJHRCa2kkPG1VezJp'@;
put 'd2puZmR1aktAdmpAKDtqJkBzOTRtQFZCPHU8ayxROkdye2spNVo8XjxlL2IvZ0VlL05eTWs+Oy47MHVVKyh5KjxEIz4zI3pmen5QK0BlaHMraGg7JU9ZSVk3SXclK2xxUVlGa1ZZVnlEbSx8dT96QlRWPHtDSHx1ZVM0RTcyel1NcVFaPFVtMllmRUgrc21JITtrUXpKXShNVjFfV1dmIl9OWz1Q'@;
put 'SEVmMCs5OFJvQiVqciEzKkl1eXssc3oxPUhbaF5ScHZgUmRjLnBtaDBwYjxBOHwxKlo9KC90fFgjeTBaeXxiQGFqIUs1dSZ7N0xyOCkyQmF0JWd3WE9qQ0VZS1IwcClVcXUjSU5nOlomPFdbVT1QbGdAQH5RK2M8cToqJGwrVD08KUxXcT9waSRDL0dyZ2EmL3RtSWhJKF1uaiErNm91N2F1Q0Vn'@;
put 'YzFCSlZLQGk6aV1JQXYoR3JYQU9PLilQPUhKVHcxJCM8Z3V5UCUvWWFHUCxXIm91JHlRb0lUSzVdQihzcTAzRiU6bTZlIk97cUk4eyo9MEcyaSslcEc2Yn0kcj1vOnEjQ3hmbVZ3OnssfjNpVmtzbH12MkdETGxTY2xDbVYqOWBqeTo3XWwvfkguNmY2ZFF6YjJmakRBZ1JNQls2Q1UwO21be2g1'@;
put 'QWxMLj5VVDlASyo7P0kuNSUySGBAV0BLQjAhW2xbJWBWQE0uTUcsWDVOfnROPXtXTzhiLzNOY2hqZTxbd1YmO28sQUZMOVNGdzhhOSNRaUU8ejtTdkAiJTJ2SGl8bC9HeGh8UCJ9XiNgU3p5PSYoKnNAfCFIWDA+IWwmYFpNOzlJXlYkdEFtVlBEflszITh2aHV1S2hxNE1mLih9TlpqJkFXUCF6'@;
put 'OzFqUTYrdlhzSGpTV2U2Y3xoZiJzWyp0WE17Mm14WHVqaS5NaHFVZEpFYzlKXixDV1AhNXBqOmAyMEZFMSw1NmhGdU1lTFtSQDpuLlhKcmV1UkJ2YXNyRWN2VDFzTFYlVGEkRzEwYlRCbmttWC98LHZFW2BQXWBGbVJiPy9meWFtSD1MPDpneGVSRXpdKj9rPCI9aioyYFtqdmpOUWB7bTxfbTJm'@;
put 'Wz5leUIsUysyNXtqMHZ4eWd5VWJ3eWJoeDs4NGprc05zb1loLlVgXmxQfUAxVllVdFVkcUREO0kiTk1+O2xaK25vYjxRIlZGbTc/Wy5LRWxbOGBudUw8eFtvS0ZaMmQkXTdte0xYKztgOlRacjdKfjVGXSxWIUJFTTNRWzhyKmBnfmUjJisuXXQ8ZDcjJWhrbz00bXp1YnJGVlZoekd3bXArQWt1'@;
put 'PEh2cnN5U0pPODkqOUxoUFhYRmJndVFdckMkM2xqJHE1eXEpdXsxZSp0c1hiTltZTHVqZyJNISQ7OEExbiNkLF1kM2lUWykhPWV5eGcrUkBsV1U2Ll82IjZtXmhRMS9Kaz0sRDl6MjAxKlNfeHpeeDthLkZnT21vZmB3PilkTF1yK3srLDVVTDxrdWUlKW8wRi42bWBiJDFMOyk6R3V+JnouMSsj'@;
put 'VSpwfkoqOlFhYmVJeSVqcjZYNlVNJD8sT2hjYTtDP0BEKn0jbnBkXmRiVy5tfG4ySXQ6R3Rvc2ZbeHhXN2w8RXJvPkgjZnU5UTlWO2M4cGluOV9iVnJmTWVwLlsvIUNjWmxLKihlIXRGVkgzZlhZNk8/aXN0cTVkJTI3ST8rNztRKmx3QSwsZltlSXBrdSJhLHlfPG04TWBldUlKeVZiRV1WYl5I'@;
put 'OU1sLzkoSi9ORzV8JjA9aXlXMzJ+Y3UmdkI8NUY4bT1BP2M3SkBJSF8zKSI5Ky5qPCZNcUk0SyosODY5JG8zNl0jSUolaHxSbnREPzRKMHFHMEl+QyJFPCZpd1dlVzFHKjF2Tm0xRWtkbVMqNDNHOSlPemFDOnI2aSRNOFp9TyNlQEhiZTNGWS9+fW9XRyFCPz5gVHgrL25bNjY3S0VvXl1TcyFN'@;
put 'dj5lZFErSkBFMzx6c2pvfkt4JS8iUDc2W0lhYm5+akNqNSJmNzZZRDIsaDE5WUtfcl4wc35JNWgjI0hVOn1DeDQ8bj4+cGw4Ly47UTYve0NRXlVGXlVJY1dRcnElVlVmR3o/SX1wbDhbLnVqZjM9YmQ7YHF9SypjVH0/OUdnM3ZYTU84R2dKW192WGdQLlQuMzFSWF5ObTM/VUwzcGt4WFdnIy9u'@;
put 'OUVMbHsoUHErV2lDQyFyJV83K2NZP2AkSEhgMSs2L21FfDN2TEVKSEUoT3VnYHIwMzQ2d315cFM7Vno7LH4/ZUBaTCsoRTt5V0wrPGsrbVoheUxIbkJPQkYzOz47O2UhYkZXZWYwYkR5eSpydmZVKXhKYlRFOTdrKlklL2kiTlVqOHtYcUwzbjR2aVNSUVheJTxiO3cxc0pDTyNxczVwfnZ1Rk9T'@;
put 'RihIdTBmbTdJfnAudzcxdVB0RkQ3OFR9U0V3aD1XYWosbzFLR2BbY1glWD47b2o1PkRvNW5TWWNjJlRhdV5OeHVLQzE2JksuZUh0JSVlWztWclsmRytnLiQ8NG1fYEIxS1p5Tkw9VUtQazkpWE9LajQwLiM/cUpCMVIvaixYdzVDIXl3amA2MkB1eHB3IzdIMTxNcHU0dXN4XlZZaVpoYT0mO2Q+'@;
put 'RnlOaTR4dXd7V20vR21YWnUhW14obF5KdSkvZSkvblVtPyk+VyFYI114KXc0bzxhRSl5VUY/aT1QKE5Qa0Eybyx1WTpaViVXKzs9PG86Xyg/fD1NNiEjYDEwK3MhPU1LTngjVmReWnkxKSo8b3dvZkQ6P0M8bmpuOTJ1Yno3UWR2I2Q8VCplNi84K09FW3BUWn4sbmdEQjgxYjxLViN2OTIhQUVB'@;
put 'MFlPfUR4dlc/Vm5Ca0VeVG8wVkNZJXFVeDJ+LzRdKD8hI2s7aUw2TEl4YFdPS2M8YzpLVXErTWp0PU02SnVuLDN0Z0MyWnssOUghY1JQPTFIRkRsXlAlXkYjYiEuaUMzO3l9Rl0yNUZBQVhMb2k8RzVMb0ZQWHV1QWs6VVpaW2hhTVVRelJBSntbektYaVp3SVV2Wj5IKiJAZ0trfihCLkZgW2Js'@;
put 'Y106SlZnfHxpMiJhMyxddEpiZ3YqVzZqbyUvPiEwUG1ZUkNVbFVNLlE3WClEI2VIQ0g6N3ZxbCt0NVkyMy4qIT94cUNXWVUrWVYrPWldW11DMk1NITRlfHlxakJLNENRNVdqYzxvaC94cy9FWDlIe0Q1L2ZfIzFZRD48cXlYTXEsNUIsMlcran0zSmUqIytSUUZQYil6dkMrO2s3LyMrMDMvIyti'@;
put 'OWp9T0JDTVY7P15vW3lNd1k+eDh4QnA1fSFxeXQpL21jKS9tYyksND08NENNSi5UaVRvWk5eWnBfcE87PD84RXQhKEo7fHheQ0BHdyNwJks+QlkvVXlDO2RqRCIxXk5pe3dFZlBUJSlVZip3ejBgWFhSRFdJKyl3YCFGYEQrOE1gJjs/NltnQGosO0l9T2dTYmguL0Q2V2V0M1oyWmtrPzNQUmpa'@;
put 'X0B4KlBYKTRrJlcybDkjJixbPFNoaHp2Y1tMQ2BkIyJ3RyJXSUVLVWxKRjdOTW9dTHYhQld9TGpxPClpUnVVREZEXWcuXXFiVFF1fGQqR0VLQ1hnKnI8MiI8QTRjPFRSWFtHJUJpOTwyWVd6S0pBMmxNezZTeyh+QXl9YV5XXVopazRnQDdIKE92dihwTzZSaypNeWZ2X1BKKV46PFlwO2V9bXd5'@;
put 'OUpMPXA0NDhBfHZ1KEZJLkY7VyZsKDxFN2g+I2dRPyMlbVZ5PSF8OE5neCI5ZnRZcUtFS1g1a0pPcSV7fj4yQm87RlpZKklyfHsrNUkyZ0BeSEFIWSo7XzVRJDpuZWBbNkZtND5TfjVndTR5Oj1aNEM7fWVYVytwa1c8VGA0OFZ5JEdWRXBQeUNdcnlPelB8LklYSVFBQj5VMXgzUVh0Ym58VjN7'@;
put 'O35jM2FvUmFYO3U/X0Y9Kmc7dTQvJHhQNzRfOm9LPWZhc2hnOHpaTHhXWW0zNDNycFZtTltlMTFeZ08/ODpHQnB3b3h4cnBbOGBMQENsRDBXWGJJXUVwO25lYWFYd0M1aWUkfXR5KnM3WVg1PVEjPHJedV83Lyo6W2UzY0QvO1s8XUVecEpvQURVQz4wP0NBSF1qcElEbSM1VHFSI2V2K2VZKS88'@;
put 'OUpBRjt6JURIeG1ufXJRV0FvMjlOXkNhIUpTbjpHP1QwQ301M1hhakwrKSgrUn11eDBJWFprXkRvJl9fQ21ve31wUypsQm9afEc9cWgpLEhtR0ZNKnQ2XThGViVAdSVwJSZ+ckQ+XXdycDtKcSZBRCpLXXF0bGVtTTk0W2BWNkQidnBwJUhjdUVyUzVpM3tCVSorWFh9b0pPdT5oeCt1Mkh+JD5p'@;
put 'LzsxJlFVQ0JhK0o5I2I2K2kiKm1BeWgjLkxGXlpfQk16SnM+OXhfWDdlOWA2fUVWaUohKFVNRl5aKSo7cnpLeUA8SCZpOyk1IUspJjA9IyNabkJETSVTS0VZTCI0WVhMSU16cy98Rz50TjAzekFpNTp2L3pwPmFYRCJ2a0NbZT9FdVkiclU6WGJUIUx7NWYiZj1mLnV+Z0xgYylvOm85ZmhLIT1V'@;
put 'c3p2M3Jwfnx3IT1ddTJjfUVLbHAqOTgqVERyOiViKVhCQCpmbnV2WSMvfnwvJHRrLkVrYjt+VnZ2NDx4SmhMNEpET1NoYkEkaXplZjx3OC9hKmxVRzZ1dl1bZ0AjYiUhOj00NXxvJThAbWFGREsrVn13LnMzNVJhaFMoPFRQPGRxVTxJS2FoU2U7KkowLj1YLCl7YDo2KjMqYSZdM0RnTSQ2Zyk/'@;
put 'eG92VGFvJFA5LmU5XTAhQHZMKWxefkpQakxmRkR6bWghQ1chbSVifWIlNWI0NyF7Rjp8Lio3eDk1S0g9WD5yLHEpW2FWQVlPQTo9YE5ZPy5JeDtzXSVmX1hMNV4/NnJERjF8JU9de3wvWFd4PXdMbVJAQz5pdVU7NVdNO3tFWE9HUFJgNGZFazZ2ZllAelJ4MUFXKUh5ZFM+JVlLTHlUQSpZeWlF'@;
put 'WHhnUXNWWVd8JCtDMiNQKXluSnhucytDREBUSXJvMCY3KlVaaU8wRVBZQENxWCpTOS5hdVpPKHVidV9BSnNmUjFMSF5qdjxRWjlAeWl1S3BALj5nRF87TEglRXY9YjhlKXJZQH5AeVlCV0chTzdWSzs5Sj91VXc8VVFybU5nK1krVmRlJCtgeldxLztHez4qRTVZbGBgMC9jSXhSK0U0dzsvXy4z'@;
put 'V3hCbzZFWGd8TEMpWV52ZHJCOXpMX0JhOV1AKmpGRjZPSl1oZGQ+bUhybHoyQzpjZHRaL1oua3J7WyZ5WCF3JXAhbzhpRFJ3QzE6QGZaUjlyOkpTfXw5TVdLVXUzTHt7I3AjP3hieCEpQ2Q2OStFZ0h7fEQzWzFiaFpVP0dpT3ZTRW86UzB9SWZANjFlX29qKU5BU3soY1BdXjRvTyZdRDI6eWxM'@;
put 'aikiSnFKb2xqM247ITRtZC5MSV5LZTdOJGJONjtlNGImWDpNJlhJUT95SzV3KWB5PXlwL3Irdywvbmh6M3FMbyIvc3c+TFFGd05wdnEyTmBgWEJZayZGVUhDPkohTWM3YzxILD1veTVubDcsPkwrcSgiR3pNM3pzUVZiJiFfbWhrcnlBQDg0amFjY3VMfHN6VzdnI01fa0BjVEdOcXJKYmZyQWho'@;
put 'Z247fEdGRilxa2FdJEouY1A7TDIjcil7YFtHQ2g1PURaeDo2Yz9lIjtzUGVDKCkxJns0Qm8+YHk7TmZzdGRkXSwkaUxfLCZCX3B1Uj0wPmd4WCVDOm1PLF16ITVYUnVjdGQ5WFpJMnIvR2hPP0JlLCJ4cjkqX1k5JHpLazJoQFkqIUtGc0cpYkJ+WGcsZEF+fjVOSW9JdH5zViUrczozbXA0P2R2'@;
put 'REVsOll3JU9DdW5dMmdFRW0kRiRBSTtBNypvIjdKYSkud1liRz4jaWJEfX03Z24hRyJ5M0JUeXguNCFWV2RLS19OSUM6MGB5VWwzNmBQekJtLHIrdUY6W2QvVDNYWGlvP2NXWEE1QWNJfTVjP0JFJGgrSkZ3IU92NHFoQk5YOFY7M143KkN4ITtLQjBIZWRRWHQpUnJTMDAkaUx9bCYoNF5oa3ku'@;
put 'ZHdBL3IqSjx3MHtfaXNJN3lrQlozIX59fVZjPFgqZDNqO1V2Ry9VMzwreCwxMCtre21LOlI0WT81RllWRT1KJlsmNUdBImQza1dXYEAyRkNVNCY3PF5eeFYob0AyUF5GWXc0QDhFPSg6L114YCpMOm0rYnQlLzJldEdxdF56LDY5QUc7VE5oejtKdzBEOERmZntgTTlufCs4e2ciOC9NJWRPSSNK'@;
put 'cTU6NzJVZHY2S0RyKF9VI3MlTEFvPm4wUUBxcCspLkl0WUBbNzRTeHJaN3xGI05ONGc3T0F2QFsmRC5LWml7UV5bb3hTMFhqTn5ZQyV0b0M6NGhgTCp3PlYrbi4rNDxgJWV5ITlwaTlJTXl0PnN0cEx6YTUxPC9vKDs4Tzp2SzwiR3poOWVvPTFmejhtJCtXQjhNQWFqVyx8NCNrdERrcGMvPkki'@;
put 'Tk9xcSIvZ3F7NlloTCVRXWd7b0E+bzV3cUVYM0ZxPmRsIUwucVlEa0tXJEF+LDFqIj96QTw8MnwoY34vKTFCPlN5disyfjA7WW5YS1hSclQ3LnkiY3ptOVpKXz5aR1lPfTk2fC9FUkt8LDhgTDN8SmtIfip6VVVNZ3ZuWzNoMFs0Z3txZj15clp9I3NOJm1vLHRIfmdrKFJuLHRfe0dCaF9nTD43'@;
put 'Jk1xd24mQ2hoQCRmXWVDfDE5LjlyPyhVcT51RS52XU1Ld1EkUTomO0hxWklDRHptfkB1KTJTYThQRzh+OmJmTHc4cmlHOWZFVGhDTENrVGhoaGF6cShnO0k+X0ZydXgjbEBKbnF3e0tWRDljaE9Oa2ByLFhVJjZXKHI0ekcpcFVxRTcvWFo/KGxednVFPEFNMUk1TWNyIXRgdChuOSt0MmdNU3RR'@;
put 'fndKM3w4Y2tGZlAlUmFrOUVzMz90UVJZel5tSSNmdjV+OCF1RWhFLztVRFVzRzFfeTU2fj5ycCNHLk8oSCk0e3l0SElPWEA0KEAyakgudz1jb1g0ZyEhX0NVJSVkP3lMdCVbXiF5dF1takw9QX1RIUhYYmM8YjZgX0YjbmZ5PUBDUF8pTVBEX3JKSz1xJnIzdCxIXip4OjRvdktXJCkyXUpGPzIy'@;
put 'Rlt0a2daKDN0dlBsPVM4ZzRBfX1SQkw2UGpRMXtAYnI4ZzJNcHJRJHVGXXtXWHdLbDYldHxTKW5pdlZGTzUhQnRTNUkwYTRnYHlwKHo/NHdXS0I7eVc2QmosV1JScnAsM09MQS8kZ0RDdXl0Y2V5KzxoInhgNXxKNlpjS34hMWQlR2Y3KTJ4Y2hfYmk1YmZpXTxUdGZnRm53MiRJJil0anFtazBT'@;
put 'YyVfOWdqVixVU2ZkOTg2KVJCNzZVXSxwKTMoRiwkdGtCZ05hUyREalcjWGp9VSlZYklNZjM6WGUjK0BoRyxza2I3JUY3KmY7dzZMZiEwXjNDbDN9b3NMZV0yRWBuRF51fHA3ai5RZVo5KSUxO2hNSnNwe15QOF0oOCklaERIbVg9YHo9PEtnej9IL3JzUTZtKlF3QmNseXFeMlc8UmpTKV0oRj0/'@;
put 'LE1FSXkpNDg/eV1JI0NaTGNYU0UoJiVIS2BwWkBXW3Zrc3hwODlkQkxzV2dkbTAzS3lfO2J5VTtgdDs0MUlecn47ZG5IUnVxRkAlWU5taz19elg+UFtWcTQzITpUYzhLZSxveCZVR2RTPilMeTEiXiRVeH0pZHF4dEI1ZT1MMXBtMnNCZkhUeSlEVSFue3NzKlU1OWkke0pPY3khI08/Qkw8Lm8p'@;
put 'NGJLZGR9ZGJUUkZOM15kKTwvYHRaYiVDVV5HPDowLClGUlhrZDxRYnw2TjlPQHUwMkorVHBWYmhJb1VXbVlAP0MwW0V4WCl7RTdUQy5lNllnKiRzcltrXX1QOz5bVH5fJntSSHZKWCgkW1FvSUMrcXY3RFhLVSlBaTAoREg9Qmg/QzxwSlBwKyxRSWVZKnl1Y3RKVnU8VG00QlF+eEEpMjFIPjRJ'@;
put 'JCk3RTxkNnBxMn1WeGdnaEdpOj5rYktpeTcmfWh2Vi8oVzxFTkM/WzQuK0NhTEo8e1A6WXB1XiF+KE1oeEVVUlB0aXtgSWBkQkdsMVVPWUAhYFoiITw8YSs5eF8/YEh4ejRLYmYoPCs8dVs7am86LzZ5aj57Xm8lUSQ+LltFM3s9NitKaF4hYjE5RDV0MitVaDdMfTM1MjJwNGleSHtnbWNwR0Nv'@;
put 'RFd3NzkwPU9HRVFFdGwpJSI2NSlCN3UvWDdxJnRvI3QuVFgxcD9XbVBmPHxPRiJPYyMhTT05YEkrKUZfLnM+ZiY/KEtzQTVpXjtLInI9ZVVKRVZ9SChhVjBvIyNPSWIyNklDUklXM04pdXBnbkh+UHlJJjsqLnkjbGolW0BYYj5uY3s8Tmo/LyNZRmEvMV5nLmxKPiRkS3ltQk8pTVl7aFhJO3NY'@;
put 'KDZBKXFncD1bJj0hMEMkTG5QKVtkJVNqd2Y1RjIhMHlqcmZ1Okd5Vk5DMl9nWFRSJXQ/Zzw3WFpwbDNCX0xMPj1Je2g0d048dGhvND0jTVc5I2lALEZXfk1GQFljQk5md3MudGkyRGtiWiVkb1tmcURoQyNdKD06bCF1K2t4LF9aeWc5TG84cGNdN1htPzI6eWRGVjgqZSEiOFplKEhlbSsqVERp'@;
put 'RlVFTyVXVkBRdjloP0lkRnxCSC9CaVcuWGBXSlppNGd8OUpFREJUVTRrMHR+KUVdImlbI0t2V31XSkBQSzxpP3lNcVJ4NGUkeXsoVFkoZUU1Z0hLRzpReUxTI3h7ZitoVTJZLiZ0dTBSXXNEUS9VYGdaTDQ6dE1MK2dqOiNdKDhjJmxTMG5Tc294V2J6Wih7azByaSs/LGBNLC5WJE19JSkhb2JY'@;
put 'Zy5sSElJTFtWY105Z2djRS87ckRydEBmQSV4MjI6cFcvV3RYInQzd3cmOixeQjN0cXtTUC87akRTe2NPNyN4ZlU8X2ddVyh5MCloZVlkZ25yZ0xgeEVJJUJtRWsyK0VVMjNbRElCdz5gSjMvX2tiLFAveGAwOUJSUHp7UCF1VVdsLEZCJStKdT5rPlFLWi9uSnQsYCE8Umo4OWBmVjMjeitdX1pJ'@;
put 'bm4rNF5kRTJVVjYsXzp9TVJ5dWJoNGw1bGQzJnxfaWB9aCxbdjViT0ouO3A7VkQxbVlKPUJBSD8zIk5jRSVfcXwibUN4a1tMRz1pZkhCQ2J8WSRUZkhJZ34wXj4zakxoS1VnS25oQ1s9a0NeKn0/NT1rKFJfSGIibzh4MTRSSThlWXZpSEsjdDJLanNxQDppI348TyRgQChtYz8xNl9YMUtfQ0VL'@;
put 'TyNUcC49bjZrXmo5QDpHOV9HIWh1ISJpOiojL3UyYH55RVFdZFFVXnNxVHVLNUJUOVErJTZRcjQsblhiMGlmWWFqen0zcXRpUnAzdlhqVWA+a2UkRmQ7NjtwdXZWYiNROXJHVk5bZjxfTj5LeHtbWCRdPzZBJlVNKXFUT2Bxe0JicV4yLnJsdTlpInxpKzlHVl9Yej9YayY2Z1Y7Kn5yQnVNLmVD'@;
put 'Xn5AaF8hMlFFN1YyVFVRQD1gOHA/emlRayxlOSYqRmNRT2dwbyhlOTJjVjE4dFBFWEM0QUdJYEhVNSZvYDFSQDZKKkwzPENxWClCKikiV1FgMSZmR3R2allgNkAifVEvQkU8TERAZVN6I1k1dGVpT1ZfP3oxSXd9LF5bVSNSL3dBQy4iYVpsZ35qLzg5fXgyfCgjKFtbXU5KVkU5W3xRL0JFPGxb'@;
put 'cDRvbHdqUSNeVUV6IjlmIXJJKWBGXV90S01BXjxCN088X2w9OlguWF4xeHVRN3JaK040bDIpQGNpNT0ybz9XO15qNmQhclBdbTAoSzh7TX0vUS5hPz07OXdiaTVbU3FkSHVARXJvYDg1UFszWTcyIS4hS3RkJlI2YkR8cmFLR0pJPVA/PihVVXs8aUlPXzpXdTh0REl5c3R3REY6cVdzezkzRltu'@;
put 'LiZOLHwsfTx4MzxIP00+Qzx7KG8vaV0kbk12SDdZNGpDSW9XSFJyNFFwN19ARGYwW2ZaSCZxSjsrJnVZZ2NpY1grNEF3cHl0cVRbZCYhfUJEOS5IeF84NXhodl5kNnl5flNDPV82QCFbckg5NWh6PTFpO2JQa0VDb0dxOH1mTCRXQT40UzpHPEpnVD5rL3FGK3cmQExlY10mNy40ektwW1chRUFs'@;
put 'TDN4WHRSTl89dFRdVCZpb3p8ejxneHJ8JCt0MTJIdSU0XT96flEkbFt2V3doTCVRT00maGNZPjhaRTcqV1hoZW5YSERvVWxxJnBdVEVbSjt1MlEpPiQhJVpiO0twTW1oUXJLeGR5Zys+bDpAcU4zLFRTay81aUlRLmE8ZzMoNFRpK1JuUUQkSEBGJWRvWClbc0lTWWheVyt1eCh5O0thN30mP1c7'@;
put 'YGNRKVJPUiJObkVrYUVYYCx4d0JILmtYZDUhUm1oOWhXViV0KjxTWk02TmJIPGAqL3MkOi8hMUIhQDFWVkFPaV53JCY2QTAhcGNkdWpBOCVMbGAoekRPcE5+Ymk8Yi5WYmxwUUlNSCxnTmw5Q1AvWTMxUG5KVSwlJU9VYUtETz5LdXAuPTtNZ0A7c1hiYlB4RmFrJXJCS1Y4U0RyQC5VPU04bUw5'@;
put 'eWNVRjtlRnlhV3N1TSlfPF83NzpoezA7dktrNmwrRUo6TGNLRHhfWW4yU25rRU1MXz5EVHpxc1JyelVVX0c8aTsxbjdkPlA+Vl9QeTxVI303NHtWVU5mUl8rfDJZa1JLJU0uaiFaMSEzQS5JR3kmOjg5ZU9xdk00YXk5OUNdWSRPWTNxTHdVVUUodTRsVTdJOj9kPVh+b29FPzQuTiVRMHt4Qm1R'@;
put 'T0RSK1Q1TixpM30mRndgSiQjPDduVVVzO2BXI25Kd3hqZm0oOHZ6X0ldRFFdOEQ+KjY0Vn5Idjl4VkNxcm9GS2piRlZIIWtCR2gmanNuQjouT2MqSHVHVS5VcX1tKTY0dWxCTUZsWmZoUyopPGZxVkRbcGxtM0VEVkl7XXJjYDcqV1dUW3pJOm1MTDZRc302MXo8amFCVHAkO1kwI1FfI2s0Slcj'@;
put 'Ul9weUZtRSZ8VlRSRHMraW1IfVFdUEMycEVeXSFxW1BqKDBwVEtmVThPfSZtYjB6WltSbS91UTN5byFNcVVPJGBLbHZCVGNiYVJ3R2RkYEprQ1tKcXJea1RJT15vPHBEUzF4TUcrZ2lpNVQ3QXtZW1N2WEV0dSJpWj4kWlUpUWllKCJqcGNHaV1UR1liMihKREdjckh1RXJuKUxJUWIpQE01bkMx'@;
put 'eUN4IXEvSCxkYDFkM0lUdm0uO29qPlJKP3NQQHZtbDBZLiE+a3xxZGJfRiRwOS5icis6L20lUUJSNXFWMTZ2QCMqbUZeYFc2KzRUVDI8ZX1tVHpuT0o4XWpiOjcvRW0sZzhYZ21XYCNaWlEwQDEkYD1uejAsTjpLWUVWRjEsTlZHNlpFUVtyd21MKzBRZG4jI1U3Z3Z3e01SQDwzdnRZa2RNc3ox'@;
put 'T3ZJUEtASklZd05eQiE6PWVIbERhXjsjL3xEdmtXVSFCfVhRNU5WSUo4YFldcmFHa3Jib0E8R3JNa3RsZ2oybEw3VlV4fD8lYnlFPShOTm17KCxfQWpiWX1GKiwlQH50b29YPzZgNjZJMnE8cj4rR3hNMnN9dERbYFAsQnEhS3ZBVH48ZUl2MTBGV18+LE1SanB2Z0VFRStAKyU/VzN9ZkY9b0Zr'@;
put 'RC42cDlpWCZ6VTNnO3soZmtAS0ksbioxUn5RR3opMjtfTzpwbWVrLmkpQksjcXRadk00ZlQjW3BaWSIuZl1Ac1ViS208NlY1WHkyPFtmMnc9aDR0JSZ7ZWJNI2d+O3BZJEkycDVfSjkuYGBgKzl2dipOe2dvSlFOT3IvUGxaKyxOJVZDLjlrOSMjS1A8VDJZVC9Ie18pZz8lfDJ+RFhiK3I0Wjpx'@;
put 'e0hvbylnPyUzR0RaPVhiJCRac1gve2taTDMvRSNtXyg1WiYscmMxfmt1LCxAdGJVdTVbMVNNdml5ai80RyFlclVNSDlTK31QZT5GeikyV0dIZiR5Il5lSitxQlYmSmEvRSx2R1dNZ2RgTUshLyZwR2A2bXpOLCE8dzB6VlROI2tDXkIxNl9tR11rJiojPFFeLmomXUZXWGVmZmhdNmhjOXlaZSlL'@;
put 'e2pmQkNLS28kb2FnPWNJQllaaG0+LGhWYSNVe21wQEUpV3ldQ3hFNVN7YyJgOG0+azN1eTQpQiNnYTxlZipaVVU4OEssSXJ0QnRIQC9AZyZQKH1OcHAhdXV+TWdWPWpIdDVbezRkcU1gZDxiL21gYzp8RUgvdyZLKSFrJks/KStMY2t9fkxxMVEye25pYiRVO1pJXkR6TVo+NGosVyZVX2hUS3Mv'@;
put 'ZDcsLDpgUSReKDpXUEZ9Rnk8dl1LZXhMUGlaPnFHbWk9NnVYPGBhMFR+djtGb287e2p+ezZZa0ZAL2AhbWQsNGpdeyVTK3Z2MDNGKEgkWywkZl9Cdk18aVZpR31eKHcmO28hRn1vOE94cVBdIjRTWmw3STU2Pk8jVClCbk1yYWJPOk4zZUp0eixiczJOc287QT0ydXRsQGtxcFBkYSZpTT5VK0hQ'@;
put 'Wi5FQHRAOENpQ356RHA9blQsXjVVZ0BMc2h2cmhvN3Z3RT1fa3VpUjx5QikjO2V0e3FMWU90X0prNE52JFozVkJRezJOLmEvMTx3M0ddLFo3fSFgOTdVREpVTklpPTl2Lk5SMltQRnFAeSpWcXNzV2BRfS8pO0tkOiNZOEBWIzRdS2sxMTxvbEZXYDRVeSE3S1NdQ15PQj9gK3M4VkliLEkxMEFM'@;
put 'RmxrLiFncXd6QyhqJExGTGlgPGg5VkoqOXc0aSkjPlVgfCRaT1N0VGo8dHtmekg8SCs7e2ZCT1JBTysyYnc1bVpAd1srVmZqUXMrWT5uK09NKS8oLjdRc19ZUF84VkIvPWtRX3BJaDU2VjdXbk9YKjhXaDVPfl1OaVg3JUZKTG10RGhbMVpYRVtJfmxRMmspcD1OL01Pd3F6QlVSYVNlZkR1Xl5n'@;
put 'OThva1dyKXw4Ty9ZKjg/cExAdDBpYzQ+NmxTaX1lUGl4UVZuP2p5M0sqdUBeRCZNV1EpUzlxQ0VqbV5wT0t+THg0L0IsPjh3RmhxImdaeGJoQlc7UTc4UXNydng2Vj5wNGNWXz9jcUM0M1BkdFpLZ2x1V3VEYXdSMHg0NVdkTSopRFJqZyUuYUc1QnlWM25XOD1ddXB0Y3F2Z0U2dTdQIVVmeChL'@;
put 'b3BmbDglZF5tZTltKHEwSmV+RElve3JqMl43dHJwIU0xJU48YnExJVtsImJwMzZwNDZQPEhWJGtbR2hoT2kwck9pSzVjS2lVdV5vXz90UztRP1srZ3o7VStmdEpDQzVTQnhHITwqanAzPXJQIyV5V2lQKiQifUY9bVJPOCRmdG08cHZeZ2s7VTskRURlMnFsZWNuLm5MSltIKWgqWE12XjlmcmJh'@;
put 'OkZCNFduK306KGJIVF9dNXUpLjA5RXc+QmZtIVNmaEl2RF1QO3FNKTopQkUqeCtqSldodSpJd3VgMC4uWyllTmhjMCF3UUYjclVua2BGclhyZC5VPEIyOSooXixeOU1SdncyYHBuUjFEaTFtR1NhfClgUT04S2JqeW1ZN3JmUFtXKEouWDVDU144L34kY2tdcVZ6MCteRlBlJSojTD9gdjtHcHBx'@;
put 'K08zXTJNdmYhTGo9PF9WK044P2taV0glS3dLNlBydEdSPWFJeDt6RFVnNlg1LF00b2QqL1NLPl1GXj94VEd3XjN4b3tyZTB+R0EoZllWV3JRaW00Km1OXX4+OFBKQD8xdmxRYG4lZlpwPUkiPVp9NDxSbHhwTyU7JngyIT1YXnQrU1hZLCV6eHNSUD9pL2d2XSY+N25kP1QrZSFlIiN2PiMxOyk8'@;
put 'MjQ3dj1eYlNzbC5pSjt0UEhRdUtHUSZGW2xSPT9pOEQ/OGNYVVVdckx9PmwvW3llRDk1KmglZkN2VDtEdD5bdzdDbiZiVklBWTNxZz9XYVQ7eWEvNFVFdGhJQWZKR148OH1MIX5hWWF0VTwzMy9sYlgjPyprWzZgU2c7NTJFTSlSNmNlTU57W04kM2BgT3xNRWRpc3VVVWQkQWhjXnBIITVVZDkp'@;
put 'ZGVoMG1wMzVvXV4sYlAzXU1Re0U4IjVlRGRKOEFxMVloL3k7eXgvS2w+LiZXfj5YQUArPEUmc0U3JnNWXjQiYzhPKFRGWmhhKyMsVChUakJZOUMyIipRZnk1aF1UZkAobFV1RWpzQU9eSnU1YCtMcD04cE0zXUk7a0JsfXg+WHZGXVdgT3h2NGVickkocHleb3YhJXl9b0BTNl5ZIlNNNW17ImM/'@;
put 'IWx3NTtDPlo4KnFETVgzUX4qRTJxVixTazpkMF0/Y0FJUko5Kj8oL3BJJXk1PTVPWTh6dXUoJjhbaSt1V2ZbNEl5fV0mQW1vPjI8QSF+UXBKW1YpNz42YHFkPTNeIy9pVlVgdGA3L2A8YDxzNX4ifih2TGE9bj0uRWw/aXlvUTJNb0I2dnVEIjwjQjBeMnYvU3JVTyZ6djxzWlRdazxaQWEjI2ZN'@;
put 'W0UmOjY4Yy4wMUV8WWhnJEplPWpaVF5iZkZoPFQhQmFFKDcvJTw1SDpMOzVDZDdmWzsjMWc8S1padk9aellUYGg1Xk91L2guYW9DRDFtc0xffCZGQkplK1NSPWBSM1hfPjZMb0Z8dy9WajA+YVMjV0V2NDYzMko7V0NmQDFfQEVEeF5LVmptZ1koP3VEQyQ8JjxsYHRgUzg1OGkrMS5hVV1vR2cu'@;
put 'LC93bDM+ZFV1NX52dSxlYTdFUylvWEI4aTtXLl9PRXZQXTksXT1SbERMZ1hfKnkqdjBtQWlCM0VJcFVdeThuNUVGcSY1Q3s+eVNudEQuVHlwOEVsNSZ2bVgrWV9IIX4xd28rcndeRHF4VTYzalJabTAyNVUsdjNgdSZZQ1ZdSVRlTHUlN1YhTVhjV2RaNDhPUHorUSFkeEE+Ik5oaEx8a3Q9V2l1'@;
put 'ezRIKUkodEhdey4zeU13eSJGYmhHMTxGTnMreWIsO1NCZWd6Yjh0SCMjbWZTVTM+KTIuR0xGXj1wUz5xejFtWGd0JTFzRkxHeHFHO042Ink7LGNOWnVtN1RrOHtyMClbXjcrdiwqWl4zViphKVtvbWQ4fXZ2SzJsKnZZQ3hYcW1qPjhjKjlQNFA7VH5eaWRkMlRgRkFMV00lfEFUMzJ9OUdNSnsz'@;
put 'QmBNOVJweUBvOi97YCxNfHdwSiV4VHgsSFtjaVR0Sz1mZWpmT2VmNWg+aXUrYGIsXy9LNiEzRVBhRXp5aS9JUDo+WzVic3lRXjdmfEQqNGcjQUkiNFFgd2NzLF5TdlIzOFdoc1RMLlheIUgoZEcodEhsPEloJEBGYEdsdSxrVDYud0pocSlAJk90USYsPyFtW1prd3J8P2p5Wit2X31vOCtaK19S'@;
put 'TWpOVkZganlDM2QxRzR9eUk2OkBZXWImWiYoR1csPHNKamJ5YTxnaV1JaDFnaV1JfntZYjVqd1FfWnxhTm1BZSM2LEowRzptRVt5d1ZNX2BKT29aPEgsY2lpbGdZOWF1bjcpUml3SVhDcHo4dyp4ZENJUS8mR2cmZDFdMFcvWmdmWGEhPXQhJG1OfTB5L04jTVExR2cvc1JJYlFpL0A9LmhEWl47'@;
put 'I15HaUdOZFM8Tl9qb3YmKis6JHErbEpXYTxOVUZJXmZMbDpuMVYpOylDUCM1KDJRWG59V21ESm0zPEFGb2Emc0NWc29OaVpVMSVMS2pYTW0jeTJ3bThQeDt2LEtFLnk1QyhtUlFRZSQxNHR+dCtpNWYmbSNsU1B7VzdKa1FQUFtXWihddEApLjdgV3EuV2MmOjZrSzgkNW1JekxzUiRwUWNgQ0NI'@;
put 'WmlFVG5IZTtecylpYG8vUlRLIkIyblduYXxacWdaRkoiTE4oPTIuTEZuLGRJe35JVl0+YHFOfkREXV5bbkUkO2w0Vk5xPldAXi9Dc2BufXoibHBvOGN2X0VANWc0Ti9wQXE6YmB5d1ZuQ0t2OiFQT20rImtATncjMkVIWCRmMXguOkglYngwdW14Jnt5azhZKzArUnFrNj5xTG1wfEhlNVRtNn0z'@;
put 'UkNFNy8zfVVLJStqezxmX3dbSHZYdl9NNF9VInc4L2N6e148TU89P2Y+UF91QHlpd0EsbTp2d1M8PEh5NWwkUTQ4K0FwN2dmR0ZzKXEvVEI3Xy9OTEpRWEt0OzVsaXt9dkVPUHQ/OCZYO3R1amNQTG1vKzFtOWRTQ1FeeC8kUUtzez1VOGlZUTZBMGVKOEhzZ0Rxb2luWD0jPGRHOCw1TjsseVpm'@;
put 'MTplSmB4aSFOeXNYTWE3OFM5YWFlO1tkU31jOkArLDAsQHNmbHg8IUV9I3YwJF5qTFNkLHpReVJYYyhdJHhiXmJ5QUwsZDkwWyw3bDVofmRRNkxlNnUsNXFaMnExNWMubHp3VlgxRntVbVZ6RmBHJVJ3ZXlzTnV9djt3SktULDFyMjomRTtfZF9GNiVtOGFEXlp+VUoqOixzYEpxJSV2UnE6XTdd'@;
put 'R2sucT14Xik1ek9oP2FYIW0yU3ZSUGt1MnQiWVQiOzx3YW11REYuIWAhWW1VR2d+PiZuU1I+MzxzbHBESkt9RnJPVmldQXY/a3BQPHs/Y1A2U2J6MnoqPltCPXVVIngpP28jWmJVelkrV2lAUCQ+aVReXXFmU3lXJFosZU1XRGoveUImfmdRakRNM0tGfV5acyRWSSFnO09QfXkiY2p+WXJoLjMo'@;
put 'bVc5OXMxeG1jMztLX3pwNERLfl9IVWA/dHV1Mj1NOkczfVhrKktKPCheeiFrSio7JktYaSlSZz5od3tDQU8+UGtRNGlZaW19Tj0kZFQpbnReeDJbSiQ5c0wsXzJnPz9mIWojMjFZRkw4Vk1TKX1QaHNAUGoxej51Uk57Q2cpbEREO346UlAwWHVHcXVudHJ1UGk9aFVxVWNvdVJOPmk/VzgyOXUw'@;
put 'ez9XODI3dTB7dUhocGJ7bVJkYzdVRGpGTSwsITVVKTpXfX1HeUhjMl0/eDwvUVNVL1Qub1NhLzZlO242M2dYTXJAXW51Z1hxRl9TbVA5d0hnaEh4PkJUS2RzVHUmd2UvanJ8JjkpMjhJMzlUfnl5MFBAZUtCSEI+V0VPdU9OQGZNMXpBKyZPdERpfXwyfSFkZE49dWphNkwzYy4zKChObDd5QUB9'@;
put 'NGtfamNgInY6LGsre0wiPC5hKkdPVGhHSGAoTWFKLDgzdWdKXioxdTYkajJTQEl1XjBNO0pZeSZVVylNPDZzezBKc0UpTDVOJWA4TzRubCtpUHxOaFY/N1lMZm0wVWtAcmwrL1Z4PHc7aDZlTDEsfDMzcFpyQFdOV0FPQnV1akFeRDB0ZC9Lb213QDFxVDU7WW4wdyZzRjw3YlI2TX5JMlhiNCN8'@;
put 'YFQrPThFOCY6NCtYY1ddSTAsW1QiPkwqRElYLzRtNFB6RE9NRVBEKih3ITxrU2hbeVByVCtBZUZ3PVVsbjxpKjtlLypySDt8PnE5KWZvbWd1SzgkWFFfRX46RUVUS3hpdFg3MW53Kn0kc3F2MG9fRmUoZE9NfVB1L0lYUVQpcjcye05PYFU7V0gmbDkjaGNKNWxJTD0kP3htczw5WFROPy8xdk9G'@;
put 'PCV2Q0tlSDtYIzQmezhmS21iWiowcDVxZTxXUDc7bytSU2RiYDI9dllyWDdAcWdCOFlGekgmUz9pMDtQcFpDX1pwd180YFs8MSpDRmo/MlFXbyw3ZFFTZ1tjW2hmcUxeO299NEUvViVhK21BLF1lQiFXRUcweHk6a2ZxSnNsfUNjX2V3ciRZfXFAUl9WVF5iPWJgMlNAbUY0ZUc8UFBRWXY5L0Z7'@;
put 'OHlLe1Ipd2UkVE5XbkxMMDhORHlqVkhneSh0ND8yLFRQZXpifDJqM2Vpe0E/X3R9WiwsRkAuVHgpbnQ5VHtULHJrRjg2Q1g1IygpdyQsbC97LlIvZ187aypbTD9lU3d9ODw6LE06cXFvdVdNYFgwRXMlbSxYQXVAW3ZXey49PH01Rmpidjx7ZW57fDpsM3lZYSFSNj5vaFBGKGY4em5pM082Pmkv'@;
put 'cHlyZncwPmxnOzZsbSQ1SXMqeGglZCVaa0tUfFZdW15VO2p6QDEqTCpnPlkpTW9TNUo5bjpZJjVfdlYqWSkyOXZWcVZHSSFERi54PCUrYEtIVStyY0NDWyI4ekEwUHJJaGpJdFY0dUw3Pm08dCFEamo1NUxgPTlacUxsaTxqUGpeNzEmWUlnOFJJRSt4c3JgX0d9NSNYL1t4a3JYNVpzWVFzcF9N'@;
put 'QUt9aCNyJklgbjUyTkxtflosX1okXlt7LH1wUkkiMm46SVg0RXFIcGZYWT5jS0pxLy80JTZaN3puMjJCLHQ1OkclTjBmdFtafld5RFozR2F5RSFyYTF7Q1JDUGU6KkQsKUYqUnViW2pJS2VKKk8vOV9xZiNJRkthVm1pK31paVVVZ0s2ZWRhMHlUQ0RAeHQyc0wrKHhxcSQ8PE5lZX0odTB8M0hY'@;
put 'R3RZLj1bKHhJdUBhSFJjUDM/Q319R2hieHg5ekZHUmMpPUx5WEc6Y0BgMXJtNyFmOnxHNi5nTUpmNU1wZ2V6QnAzcHY1SSlOaSlbOHt6eyhlVUJxPjZbc0wxYmh4WUN7WmsmYiU5emJyc2Z+WyN6LnEjbHFwc2p9VCEueSJHPC4hTCp0JFRsK2tYWnNXS1J6P29HOVJqWExKa3dJMyYpImZMZUBI'@;
put 'N0s1N0RAYW5fYn5uX2FzdlpCYz5HPDw0d2lQTjBlITRdbCldZmBeSDdnfGBQNkV0fix2R019fXlGfGElNFB0XVluYyM3SW4rKH01NFlWMCk3PDxyVFU/Yl5GIXY2MiErdH5wNz5rUm9MTEN1eEV2S2BXWlg9LGBoekc3c0pnempDPjRSNHk9c3RAPH40bjVIPXIjUXdSd15lMnRedmsrITlvTH1O'@;
put 'U0BmTnRyJV5Dcm5hU1oqYmxxKWFjd2VjIU1AazduYiwpRmdLL1MvWkt3P2heL0RlK2w2OjxTfFprcE9pSzkjVSkvdyVIOk95LjZGVlskdmIsSTEwSnFNfDF8VVMxLFtQK1ZeTENwTU5OVUl7UXolTH5yVF8xWTsvVX1+ZjNqMlkuJj47QX5HXShMTlAkZFszd2k+dHQ6ImUqZmRNbDh7W0FNWD9L'@;
put 'NmhMbDU9eVhEelphMGgzPzVdSTo1ekc0eyQrIUwiZH1YKEJkcT1YTlM5TTt0Jnk0b2ssIWwxP1pkYXdbOCZ1UCsjWTdqc31IRHF4QGlxRSJeTzYwKVp2UDBIZjFHJlhnaUdDKFNuLGJJezo4OGUmbjdWajspeCYuSSFNfFAzRUYzPnU/KSQvVUohSmVkNVFpKT4rJGNbY3VqVDVjUXllJVIlUD8w'@;
put 'ZFkze21JI29YV1pyIWVII3h7aSVob0Rvb0VtZHYkLjJ5NkA9WFpYeipSUXh8IyMuKSFRfHg+cFE0PiEuWihidz5MQjVIbjhrSVkxVUlYUC5geXgrdFpJait2OlVHenEvd3Q7JUZbS3hpYitTZXpUXmt6O3U9YmpENmdkRHFMRE47dHJ3SEVCJmAvfGYufH1rOSFSdTNwUiNjKnRqT1lLTTZvcFhg'@;
put 'S1ohTDFPX3BaPFQkUmNDXi9GXlV2a2pRN1hEei8zM3xEKFlXaSlQK2QyZFtIP09ZVSZEMEl8a3pmT3dmP0gjJC43cGhCaz5jJmt4VCw6Wj9XTUsld1V6IWw5QFV2azV4fCZTMDc+W1cmM1o4cUNKJUVBYF9pMjlQVnJ+fHhsMjlxZmk8fCNVSmokYEVTc3k7QG8/eF4wIXo2fnFLVyl1Tm16IXo2'@;
put 'UFZddWF8PXR+cXVTW0RaJmFbWSowZHRYfDBRITZ7VytQN19jaU5WdyErazw9RGFKa2UzcDtVMzx3cjovWD4zVUxsKi9uPCUueG4zbipsQmRlSU18RHgqZjE1S2I6WUlWZkArTipzPFpLWSVNcmwuUT1VOSNoVFIjbEtOM3RCTGFoaGNqZkBaMlhdSi5XSlksWiw3cGY/IzteSFhqez8kbVgycXkm'@;
put 'ZGssTWR8WiUrNT4rMDViZFgmNVY2bTp7aUp3RzpobzpZIjNHPV8/Zk1TTW5NM0BETWB9UVRgYmRyaC4+Vl1jT1Z6Uk5QKGd9M2s0JUQ2RSJYSGxANCUuN3A9KnJzLGAkK21QeGZPNn5wKEIsa2thOHV1QlFEeTtXT0F6PkwxPz9DYDZKNiUrYnt+YGpRZXIyTVI6RHo/ST5AXXs0KUwuTXtfb0hb'@;
put 'R21CVV0/fEM7eXdUZVNIdUtudy4zMzJHXyhTMjJHZ2Y3cS9ifTpTKmBhez0sRyUhc1h+UTcmRWFPWV1gNnU/UGh5RXAmMFQ7N3ZKX2hAKkUpZkZyZmlwQGlGJDNdT24yek5HcnIzNXEmbyM5KDU4M315Ok1MYjsxV10+W3ssYStoXi4kY15oW3E8JS4/dGdAanA8aileT3pOKzN1W0NZRUorPy5v'@;
put 'dHxdWUdYLkZHN0xQSjluYlhdMntUKlVBLE19dWpIfnRRTWAlSWw8SS52PTgkPFVkZlY4ZXVacVdlNjR0SnBHMkxvLjRveX5lJDRAUXokY1U7fDY7P3RtaWh5Mzt9XX5KayV2a1RkUCg5V1EvU1IlR11XVHp4RkxEJSFhdHF0JUdya28mQGptKWc3Si5QWTV7VE44JEc6QE1qYWVnS25eJDJUPFBq'@;
put 'XSx9eWMhQDFVVmRyVTJ4ajs8Zm1NKVIjbTMoW2EkJSttcGg8NDpNYSR0SDFpUn4vc3k7L2RMaHVBLC8lcio5Wj05NEp5bStwaSQ4I1F6Xj0wMz1jfDxKKHVrMnVkTiZYbUBqK31DbHF+NEpoRXI2dWMmZ09nemwyMUxSLkBiSD0iTCtxdTwlbkQwMXNdKyQvcyUjXSY4JGQiUktVUX15UlRLL1hY'@;
put 'VXhdUkZFV2VwRWF+KWkpfXZmWGhDNUE8OEYlNT9nI0R7R3dSQSxGaUZ4NHZ5RXRHd1hOO24sckwueWRYQCw4aSQmZlpSSUpkWnIvOWZ0Kz92RltVdjNtMj4uMVhiO3MmdDhrZnpUQCo7ZFt9d3srZlVoKWxeOT5hcmc9Syk6WktLJkgucmNoIlZPWjtQPFM/Y3k7W0tmJEJ6YTB9dlllPltdVExV'@;
put 'ZiloZl1IUD9yeipNYDY/SVc0a31qIz9lLF5RQjc6Ui53bE1mIlZRenRaem1ZNChdXl9GUVBwRX5sYm0rI28vV2UjSzgwTHN5T2JmaiM4aUNLfiUoeTM2ZDJybHF+X1F6L24weztzejkhWXVlTmdGLitZbSsvZkhhNUI7TilkN1d7fDZaM2w8Z2ZxdCZdI0lEWkp1Y3JBTTdpL2YjOnk/UltCMlY9'@;
put 'ZWZNPX5aIzJKRG1YKGUhZ1NfMUQmPXFwQXtROn1SMCJoR0JANE10b2E0VFJyQklGLn4/QUprWVdQZGNKVyY7aDlJTFtpWSY1STVSanlHclhGW0tQX2I+OGwqI35iYD5sPlcsd1Z3JFszVDFPRmdOOyoxZztTLjFbVj5bXjx9PmZHYysmVDZWZ1Y+WzdVeiwlWDMsI0V2Z3RqI1ZvZXVeb29KKD10'@;
put 'OmNWOy5vJltjPlVOKGx2eEt8OXpqYiRJLjFgTlgmfDwzNTMzUz45NC4oS0tsPTczakB9aC9mYiVRNSQvQkgydis5ITREU11nLjElKW4qVzRVayhmZVNWOkk3dzJ+WmE7ZXl4ZyN3UXYrOShKaGVAMGxwYSgsbFBgc0VgVndpV2RPU3xtfT9qYX16MnAiTnssW2h6YldVI1d1dHU2PFZAanFMKld9'@;
put 'OldddkcpUlRGQmJYXSZpem81ZG1lIStxSC55fGdASmp6e1ptJEFvIWglWlV4PH0uNWwoNHdhTWBLUWx2WUUzMEhuOCZLS2xqY3BWI1olW2QqKypEUChfIS9sNTxmRCV9bWFNMXdwOS81LzwiSXt5c0tMV0ZMSkxgb2dyMT1Db0gwT2hUSWJWZi9bZzdKdzMwWXE0em9iYmd4W1ZXLiFySVlTdzQw'@;
put 'VHtPT2ZOZk5Sdj9mfGg/PENtdVJKNVo6N1pCdG4wRzZjSUxCMGozVks8R24oJiZ5KSozVjVYUz0zIXRFSyFpckhHMCRZPDFOYiNPK2w1L1lYaUE7UjZMeioiMXRmQjRFQFs6SzF1aSM0ejQwYClGNl84YmJTKyhQWG5SK3lNYy5XL3JVOTd3I2dyUCNaOUdLIkJdcjhQdFlxWV9pejYsbTQjelox'@;
put 'PFVQNyFfdzsrPGk0Sz9jeTNtZU5oOHQvUndsP3d5cTA7YGdTK2U2WitTYDh2Wz9pL0t4ZHhWem1HZFoqe0w1ZFNKdU4kSyJTaHNFPm02ZVZOL30iSzlvclZSWiVkUFh4aTc3R3l7ajcwSCRPaExrcSt1YlJUXVg4OmFWRDksTkwpLDF+QEhsaSk9VjYpOixDXUJgSUw7XjFmQXVDeGZhXUgicl93'@;
put 'RGI3cEUxIyMidWpETEtIKyhacVZyQmIuXXl+WyRZKVpXSCsxRytROl9tZDZWaDpCO01WUXNLREpiY0dHPnlJOl5xUnglW096T3ojcW14cyZWSFo8X20yQnJvM1giLlRQLCk0Z21HP2A4Kys8OVpfPV5aSSozdGZqJS82a2orUD0hcVlRU0huUzoxJHBkZH5xY09YSU9JL3IlIWdsUiE9KEBLTHdQ'@;
put 'VD9sTWRVO2RwJi5VZEBpKzRfVlBeYmJtRnczMDEkWzdgLyRIYUd4RmthR1VJImBJS1dVNGIsW3YmLGs2KVBCU0ZAJUJoKHA8WFV4RERXVUhTYFM/fWBOYSRedC9bVjx4L21gZ2VJWXFCYEhvJTpUT04sT316U2RLfTZHJWNxNDJYWGQlL0VBIyhSTkMie0UxUDduRmAqQlU5dnNVQW8iW2hnITl0'@;
put 'dEwvYS9JPWljRVFBQUFBQUFBZ0FBQV5VNCw+d0s6NUhMTUx0MkkpMmAxdGpMe2l2VWYoYURZLGIiNGQvKXlObjIoekdvaFhkSCttIkkxfnJrV0piSTM6U0BEamBZM0M0c19LN1s7TCR6bzBbMDEmQGgpMn4oWHp1IVtDM3pIdEUscCpiXldLU0xZNipuYGUqejJ3SmhzQkZ3NDZJIVQhPn1LRTRU'@;
put 'ZWgzJmxDLjE8TCZedzR6N2hZNUUseVgxPHxtcH1EQzhwMHsvOWtpcmk3QTxAOEAxXiU2VnsxdjZ7XmgzSXwjaDB7RiFSaitgOCRpJmJVP0AvQ2J2YDgjU1lUJV5Ba101YF1aUTVLOFRge2lYLzEyJUxsJDJqSl10SmBzPkVsQCNaRjZlbmZFLExYZ0N4ZmYpb2tRJSt3VSEmU0VVWDxtTXtmOF4s'@;
put 'WjRoUUhUVGswZ2RCJXY6c3d9S1ErazdqREMmOWxwKEVnK0ZFZkBRRGNYaTlqRHl6aVQvdH13V3Q1bW8menkjJjIlTlQiJnIlOXYjVzp0U2V4W3w6TWNaTGNvMG80d2hROjchQUZnKkxYazZsQzRTWUNGV1ZSWCNLOyVMY1VvIXF0T2tkTWRGQ10kXUU2czVbTVpTZjUxUEpabT81KjB0Ujk8W0Yx'@;
put 'KkA8RHJtNVVxZjVxc3Q1LGRdcmhjP0JobGtOalh7ejE8fSllQjYhfi9hd312XnldSmxufkgyc1o1TlBSO2tmKmY2b1NUPHkye3tFb2A8JlskRTRKUD9XNi5MW0RHTnxGMz1AOS8wdCpDJXoqYilOMEU7KUl5PWppX0okQnUwS2l2KERicDU3ZD08QkRRV3k3YVUmZyplSHgiWFIjWUNaaSNsQjIy'@;
put 'NUUjfEoqUyU7NywxfEosLDpzUHgian5FRWs6UjwwO3Mwb3FxWXhdMGpnaE51YiFSKk5IaUAxemszJW9CQktCZUs/YiwyVFduMXVjYEIhfiVGKGNPXWVeZ3o4IzZxZTFQREQqVyRoVlB5dDd8MH1DaS8rdTpfQX56KTwmazcmI09UKlM1OkBmMDY3b1k1KTNGcV1JUC5COzNeXW5dQXM1O3QwcExQ'@;
put 'eWZlJWchPTZJLClheWhaeVN1fnE5OXhgJjtUclNZWjs1WVJ9MmdVRFQ1L2ZTeip4Ums6L3JuaFI4PFghQDwlbHBUeHJLdFlXP1hyWyxkfWV+NTJARVVhWDl+YFhrfVJHWVdwNDNNZS9BeShfJmlDRU4ucTEsa3ByRWo2Mzl+ZW5UcTlUYFdpb3wxO2oiXllJfl9rMDJrNygyTWlKV2ltTV5DRjBL'@;
put 'cm5EQFgqIWt2Y21oYTtHfHN4KnBrbyx2YXheI1s0Y3JGTFZTV080N2M+YmNiMl8md1dQOkYjYyJtN1hkeks5ZUsvN3VQJEdFTlBYQDpRSXAoV1VsQjhnITpTYXQrYlB7NDhtR2pXQ2xCODBlQElHPHUzSHg5ME9fNl48Ok06KypRMTBWX1FASmd7N0pYN2Z4NX5UQ1tMRiU6SXcoZ09lTyQxKEpJ'@;
put 'RX5hY3RmKDQ3Ok1IV0w1QGIwW2QqXmpfLGZtMlJEXVksKVhfNUlRQXg0QE57fkMmNkkoQ2wjNHlpNlpSISIhPExENig3WDlmPWtLRjt1L2R7Mj05YCIlKjlYal5qejFuL24scz18JWU2NjsqaDBdKyt3dU0ja3Q9TCRFTkpLWlk2a1QvbmwvdyFBb3B9WzgkTHpyYTZlL0hVdHJgJkh3L0VKLFE/'@;
put 'eSFLYEh7N1t7aFVfQUFEO3U1YVtMRTU4LDREJkVPTmBfUSY3dyIuZDo+KmFhZWZ2VSg1bCUoMWsqe1JyLEIrWld2Q2wvQjojdFJwVX5NT0orIWhpNF5lYCYhbVFoPT9IVHREYXRFU2whdUY6a3hpNXJiV1FHSkZkNzssaTlMZ0hrOnpWeXx7UFIheEtSOmF3WXsrWEo/TUQ4YTxeI31eRjpSIX0y'@;
put 'W2gwaUg/c2Z2PStIP1Z1WihJSlZKP0IjSiwpT3thUG9YT1NPKWIqSk1hQz83dnRPT0BmYkx9KXRzd0IxL0d1VXNJZXx8dk9aRihgfnlgOj8wUGFIPlkmcDxdWkVJcXJoW3M1eFY8MH1oeypbQU9ZMmx3V3RfZDkzXlRUeDEjNE16KnFrcWRJZURpcGlefTc4IWVqVlJgVmh5UFlRO1pmQXc7W0dD'@;
put 'dWRPKmtoLi9WXUY8cUNCNXBrSihoPV5KKzVXI2lGPy8lJD5CUC5hek17TEhefCx7e3xQdXNNL2omNkp6WW8sfCx3fSRCMWFJeTxdSDVhejRoMSVZR2UremBqdzgmN0BFcE92K0RsKiM1LD1nMTxgPU12LCgvUFJFaDwhQkVRPTdAeHdLbD8yWTRwTiNlNTttenZ5JEF1ZVExXXEvWW9gKjpWNG4p'@;
put 'W15SWiU5TnImNFhYcHBWNylFITg8bmhsXyJIUnBUJFNSYEdLUFtKbGcqfW0oV1guISkmWFQuN3ZtUkVMaGBHWDVqUjJjdklDbXluUkxHeT8jY2ZNRW1UfS5zO2MjcF1zRiN3YXd8JCJaKEt0IzREKkooTj1ed3MlVkc2cjZacFVkP1NNOF0+aEdXS2xXYHhxXz1YLz4+bWdUISZgdiU9fkJ8XWYq'@;
put 'TDsjV0xERno/KnFaWSsmTXtZWiYubF9YUHpjQylJYmt6TFJWR1tELG5Zb2NeIz8rMHo8WyNYem5RWENGKShvUFVNSWlGPTtKTiw6bnpxcz18dzVFSEwuVzJwJElLbWUqaTlOWWNFXnIheWApN05ZY249RWkpYUwsfUNQTjkubWpDfUdDIzVYcHZ+bTtmSzovMixDWl4iQVZNYTVmR2drVSx5TEYo'@;
put 'UEFBQEciWlslbDVMTzxXWVd4ZyJWeXhIJn0qIj9wM1pBaTd8aWlhcV9ZJUhRI1Qidyt8TytTclY2WVNUVUU1T1UxPSMjOz52RXdCTyFkS29kPXBVN2A9eCNKPjNtYVclLEgsXzw7M1VGNkNbUVohOUo5dDU8UWAjN1t1NnNeJk0uNEN7eDNKNld5aSNXMlVhUSJHYmJqP1pQVCg8flBbfkVPQCJs'@;
put 'M1NDLzhFfmxIbTMjbSFXUyIkZFh1RSp4KzU1a1EyQEl9JiU1TkR4bm1RRURWe3NTZXJ8VTsmIVdMR249aG1tekVTRXJGdm55ditzS1tAWTRhKEokYnI/JWdfQ1cpMF9bRlYuTE9nKl12ZVhSQTg/NjFGdHZQd3c/PVA7VXFPKlRUXXw8ZDJOW2I5JF8sTldrZ2dRMG42IkU5biFKIlhKRz5PR3Nz'@;
put 'Zj4rc3pIXnUyKzJMfXBnU08uWUB+PkZ5RnBDVjojeylXXSVdPCh7KzVaXzJOIy9Bb3BgfSFsPnlaNzg/PVA5eH1jJG1BNihxM2xyWWorJk9DJVhNfCpGcVJxZiF9d1NqO30jWUxINiVIIW5GWUl3LEU2RzVGYGJ6Oy8haSFNdGlAZi92OXs+b0UkK0s1WXpHb0EraUQ/LzBZfEdHMmBeZntkWF80'@;
put 'OlNsZXVDb3BtOE1JO0kwQi5yRDhLfmU0fWgxTH5VfGRIJWhOYHtVXylWM3I4MWx8b2c6ZTxXMm9hQiRhS3MmOHQ7WD0lRDtLLltlLiRkJmdaa19GaE9pO0twTCxwI35yfD9CXyNyJT51MSI0TUJyVWA+d2RNSVoiWnZpUz5YQiE8PXNTaTxGdyZsJDJGUElZX1lMPCZHYHkuRzE9ITEiNChDbms6'@;
put 'dUBpPj9xWjZOQm1fQG0pd1kwOG47QippODs4cjx8eSVEUUA9dHAkM3UzRVRbOGBfXll7eVp1L24zZ3tMJmZ6eHM5b3Apajk+aW5edjM3dj9HZ2EseXs+JnIsM1RdUVFWN3piPiE0Y21gcjtvQj8lWWBFQWtqWDB7aCxteSpQPCo5Y3F9Ty9dQTd9RVFmbDNOcW88e1hlYXhlRi9JJFJIVSRrP3hK'@;
put 'YHAzMSRYOTlfJCp8Vm80LD4kS0g8WFBPYz9FeH1vVHgxSjNXNWg4L2Z7TlEveHQ4SlAhIyE5XT5ROzM+VCM7MD59R3NLMzRIL2VsLk9WNHFmYCN4Rm4lYF4xeF1aKXNNQmokI0xZT3hFfG45OW4lKDl6e0U8JiVic1RGIS4qL2YvSHpZYWMvaCgwP1F2TVEsJWwoYzgxUkVoenIhLGJ0Tz1UeXZI'@;
put 'TjAjSWlZNCUydzpVNCEzL1UsV0x0K01AR31IK31acUxrNTE8M2tMNkNrfH1Xdkl6Om0vKDZwcWNjUXBeZW5pemp1JGNFQkY/cDRjb18oYX59Z1Zyblc1SzchOXAoaj8oZ1tbYkkuIjBFdTNDez8jfkZiS3h9WTkyZkZ5dGNFP3xkKGEkRU0xcl1eRlcmZXkrcWlofXtpfCl0PmpjSlR9OX19V1ly'@;
put 'fWkwNkdoKnx2Ukl4LGIiX0Z9LlNLTV8sdyxDcjoxRHAqPEwmVWxsL3g8NjdHL11QLG9DeXtlQkc+bz4pZ1YodmhBY0tEcDhDVE8/fTAqcjBebTY7MUozSUQlUjRAV1pyY0N6KHh5Pi5uMjdyYFpnTSlNWmByLzZ6OmRbMzo6Pk9KNFQzRSVeQ2tBXWtsJl8xPzFjMVZeZXdOSH15S0hJdi9Ga1Qq'@;
put 'VyhPKSYkcV5SXllSdk9jbCVlRSgyZjs2fkZoRW1xM181VkhybGhsJHdwfkArNCxEZ1lsT0klUSlIOHJyVHY5STJmbWlhK3xpP2RfLHRJJWolaj8hRHE3Oix6X10zPFUyQFs9clFBR01PMyElPW1sI0JGQ05HVjB+QUA5fSpLPEZBNFUyYW8zPCVlUHRhRVV8QTx3Z3NmeDNCR247JF9FZVQxK1JN'@;
put 'MTVKa0NsJEQ7QTcyJjBlPk9bIXBqKWw7fSV2N1cqWmFYQD5jW35uaXNuTypPUzNxY1ckPyN2aUYxdlhMcCZwdG19YSwjSis0MEg6eGVVKWVmWXVye2psejh6JHxsUWpFIjxQOXw7bGVvQXBiI09eKGV4JXlFZVRoV21sVCldNTVGcz5SMComLzFqakd4UjNibWNuYlVEWVhGbyk2S31nVVhwU0Q6'@;
put 'XVpDPDklXiUsfSFYVDAhU1V8WU8yTVIlckVHP1M5Si9LfXVCdF01a2x+Wz1DeUcjZ0Y2b0JBOiF2YGt4OzVwOF4xZFFJaFRHVT1MWmoubSRUYV8/T1tSRWQ8ang4STcleFkqQXlIN0F5aH4yQkkyI3FwV1EycFA6N090c0xTNWZRPjZGLkJDeTw3cj5KUSUuZV9iKyJvbkpEREY9dXdhN0ZVYTJO'@;
put 'M2A1OEAyZkppbDtsKmdvVXEjdCtbVWVAPjxocXA5a0xBLENNNG5WZ2YmW0xdWi5WT2ltQUNPIjR2U1c4LHArPThHbXtdelBZQmpFLy4hciIxaCkhWHh7NUtnMGJ9TzpncnQxTmVJbzBfWmQsJndqNn5nPVklfCUxcUsrIU9LckdMayE/XnRBRWRnO19wO3V8ImZ1WCxkQCEkYWJEfkxRNH5uenpI'@;
put 'MGA2eyFfUV44Y1ZtSipQVClfP1l8dUBYKzYwVT9rNVhKYVl2UTpGWDNzX1twbzZuVWIqcDd1UTRRZD1VdCJtSmsieFZtTTcrUjA1UkhQU31qbS58XUVDWlA+NS98OEk9ZkU2PWxCTmE+YkVfYTZaKFlNW3I8JHAxUl5FX2tlNlZyaTErNXAsdFImfCVNNU0mMVtuRENwJiQ/TG98LyYxMVM9SEhH'@;
put 'JG0zPlpxZUQ1S3hEI0tTPG09YnJCeCJXPDV8L2h0Ry8iJkBFaE96fmA0RERrWnZXZnpeXlM9ZF4re0lFRFJJPT1yRHssaF15Lnt5YSNFX2o9OkN+Z0hBP25nP1dwU3Zue0BsPH10THtiMWZIazRPXX1WUnw3ajBrLmYqaUJvNF8yN2p5ckxjXy41dDluU3JVNDErSX14Vkt3NUZoTSRwOX1WVEBp'@;
put 'W2hGRndhXUAzUEouWmRrVTY0NHQ/dFhsa2pSOD9vKmRCUDZLSDgmQ3BuZChITGprajZvTkdYWWM2bSVsX2g5OXNVIitjR0Q6QEYxdTAoYjFoVns4QzhbOVZaT2FFZGJhcy5CKXZnTCRhLzo+M15UI0g0MHp8ZS8yNGt5OGYjKUlPUTF4bD4zJDQ5SmdeLDUhMkApbWhmcEwrZ2E7bUclTnJdI3ci'@;
put 'R3phSmQ7KkBKdjg1N1gkdmImSWc2WE9nVSt3Yks7UjNJbF1pRGQhJCVQRTQqSWd4WW5IZ09AIVBpPXx6QlAkd0BHfGZgOGt9WCFiMipmdmx3N0l0O1tBIWtIIXM2ZD91SXRHRERIZl1zVG0wcW82dnE7SjlYbXdGUTo0dFFvdXtaK0xWNkMsU041T2lRd2IrM28jY3A1ZVsmZyU2TCo2TG80dm1m'@;
put 'cygrIUVwOj0hNUd5TnspKWFdVlF2SEBncE1iXU11eXlYQnFkfG49dHtPTj56Z2dmIyJXNmZpLmpHUiF7WyQkMFUzZGpLX3N6bmJ+R1JHJltSSy90fCpCa0M2RnwqVSFDI3hLKD9TQ1s2SSVKJV0ieHRaaUNXYEchIThJTlJ2dlR8QkQvMGtmYCpAYUkpNXEvTExAXnhwMVhVX0JkWmk3Zm80Njd4'@;
put 'Il02W0dnY0BERVozZkM/e1MkUUQ1M1o8NWZuZkRnLiNKRzJsKU1uQF4+I3U5KUZeYmNdeyJ3K0tpJDVfZV10XzUsYH56WkA7YW9KNXFnXkAwJUw3eWd6Z2MsW0pyK2c5b09UQlhpRnpdNHAxTjZ6TCNad2Q+Pzc8JEJLaS9+UGI3P3UuWzhucU8+LDxLOUIsKTE+R2ZxbTsuLztyYkt9JnZudUY7'@;
put 'bkBaci8yTCpPWnheanp2VEkqcXFERGdMciJOSyUpMmBCMmVUYSRAT0tedWpddyx7TjhucihAey9UNF1ROl1vPHltdHZRdmw5SFM3P0VoVykyKy5xNj1dWmI7RHpdZkQ3SkdbeDRoPzE3RDAuQ0EkcS5UKml7KG0vZzJCdGZuSjJVTTx+fVdaRCgrajI+eGFZL1F1c2U5YyJqVTIoZl4/JXVPYzh8'@;
put 'MixtK2tVPFFoSlZLXU9WZUQ3dXs5SEJNQzsmfGdhLFpoWUFheGh3RDh0Wk5lbCxrTWwvNyJnWENTUl90NHldTGR9bHN6P0l3aC86STkpe1RsWXMhRiksUTtKbFVRSkpiTnd9ITJraS4vMHkiJWszK3J1YEg7Mnc6OmxDfV5ZSCx8MnM0Ynk9WmBzJFtEc15WSUFpdH1tQTU6NVRiSFM4RjhmJjxG'@;
put 'bX1XRGsyKkNqa1lVWHNZRnhGVVBXLDJGLmRWUGljWVI1e1kuS24iJmpRJkEzKWtgdytrREJXe0szcjJFKDpCaFhxaWBKPnoiS2FFVUgyPyJ5LExSYHlmez86W1lzWU5bQDd2QWR4MExYInVIKF9KQ2J5ITBgWnhKOmBRS2p9UStndXhFdFJ6LzpJNXVgT0k4bzlVRUMsUkBxZFsiS3JZSD1zQnVq'@;
put 'Q30iQW1MLHA+SH5WImxRaGJQfTQhI3wxNj1xUHRTP3syPSVYTVBuKVhVKGNPU0ldNm9ofUYsTWxKXSo/Iz0sdFt3SmNvYDF1fTUsYVtwWFdqRG9tckZKUTYxbmQ/Ol9AOl4yZGlbKD4ranBxfC8zOV5saWRULFkkSSQ/S2BXby58Rj49eEtUZ1lWNGdxRyV8cCFgb1hWeSEiQXsjMmV5fmRNdCh9'@;
put 'bGNWWjZKIyVDNSZtczI4fUA0N0JKXVJpTHY8JGZLamEwWD44fTJlVGxdOkkpMHVWUWc8MEp3V0lIcXEjSiN+P09pZjRZMjB4aE9zRT05NWs0VGV3Nyk2NVdAIyMlW3EvZFdNSWhDS2ZhaU9XNi5FWGQ2cTJ0allnYTdTY0tjLE9aU1dkQkApLDhmLkwoPEYxMGsqNngsVEckPzY3Yn1DTCZ9UXd6'@;
put 'LzwjWjpAbVNCLHxRXVpGeV9jP089ZGY2PltTSzBvQUFORSI+cDEmdzJ9ImwqbSgwYXNaRVdoNl0/clJ0JTRPTiFbfHEpbEJNZUo0LissJk08O3dEJHgiRSpPLzUrPFFsYUZBZG0wP1lSXXQoMXdZeHd8Lndie298PFs+dE5RWHcjNj9CIkldJks6Nmt7UlJBTFghWihpSG59UGFObDJXI1hAbit4'@;
put 'SjhDKk1FTz40ZzdiKV02e2Y0d0t8OEBgNCR5LCRDNyFbWiM4biI5V3RWUERTPE5TU2owI3F1T00hTElAVmB5SHJbJExLelhRTH5WNTImTDM2Lzd9UCpHUF5FOmwlfmcuLiNFL0hjOmtgWzBAd1JSQjRObDkxb1Q+e0xHWExASTd4aW5UO2NbIyIzVD5KeGZGbEhpU0ovYFteTDkiV2JASmtNVk04'@;
put 'NnhzYDYxIVlabV8/fnY8ayN2fVZGYm9BMHVrSmBRZWxDU3gvUyxdb2JUUWRVZiowMls9ZldQWVdlNGBOWnQ4UktIWChqNzF2PlBHMmh1b215PHBDSTMrem1MPUM/T0tNaFVKMXcoS3xxUHl5X3wxUWpHT1oyYSpxfVtsX3RFMGRrTDU3Xlc5ZGZZNE57VnZwSDZuVj4mXUBuMiMpL01aa1ouWCs+'@;
put 'NCZIPlgsQ19AVU5Ib1JbZV1oI2s3MkFkMCRmNj0oOX5dLkxgeyFIOCM8e29qWlBbVzk8Oy42KFdvcj51X0podHNGPFZ0ZlVqWG1kRXJZJHcuX2sxfHh3QnhsOlJHVldeWGRZKmw1Y2F+ei52cE9yfE8re05yIlgqTFU7biNaRDcvL25mc0dGUmhWYHN9aFIzR0Z6QkohTGErRmlBdUE+cC48Rztj'@;
put 'JEkzbFdQdmx+KkAjUCp6JDIueTJTbjRNeFlkRHcxJEA2REJ6S0tBMilhe0gzd1orZWpiMGZSQCQpM11qVSZzYkJrcmNncjZ9NipvRTE/QSM3YlMuR3Q/czFMWWo/eikvWkFzfWA7KmRHX1M/ciMlcWlwOTdgalJiUEJDTDU6ZkNHa20kako/Z1VJNWR2bVErbjo4R31xZCojK3pkUndLMG0pZjdi'@;
put 'KSoweH5WViFle1EuIVh5fnlaMiYhYnFLZWtRREl7K1BXQFtlPzomeTBGXiwlejZPYW9tOCxgZX58cndOUCVGdS9LdmIxSjdHXTFSOCNBO1kwd2hMWD12Y0t3aD1jc0I+RU8pTlFOKF9eTnA6S01EYUk3UmArdzg/YztHd0Uqb0U3XTR3bjF4VzFla2ZgJDQ1dz4hQUNldW1fbk1kc0cvX2lQd1Rm'@;
put 'ODcqWjJQbSJ+NmFofCkjZUx0XUpbLyJeXVBrclckaW5ua19DdGsvPURkX0dbIlt4bDNJeEsxOmtnSCNwNUB3WWd6RT1KMEU+PF9FNl8sXy9qOGZOU3xtSmhRVGxiWEd2RUhHT2V5YD4wSC9aNDY0b0g2NGlASS95LCRHbm5NTkg8VTphNmNhVXppKkk+Sy4qIUl9NEgvPUh3PlpGInQmdT1TUERP'@;
put 'bjE4UEY9L2A1T2tWTTt2UEcpd2h+aiFfSEBzXzYxT3xbSExLdn5EdiYyIl8iY1FxfDlXSH1EflZIY3l8MFtOVVFjdTJbIlk+QEpZeEI/bEY+LnBuWUkment8P0UheHtAeGdtNlMxYDFiIjVDRXFHaGFkJShXazVrVld2TkpuelVyXzc9MFhOWzEyaSI/aj9+KlhjT0t5VnckKHwkTU1bUUlnRVMk'@;
put 'djB7aF5ALkxAYUdFdXI6OTIqZjk9KXF0OFMmY3dOdXgzIntReGFmRmArVjQiWUxQM2l8Vy5OTyl6LlBreE5Fa09RUzRUS0w3XjVjOjshYC9xSGRLbHd5NSI+UjE+RTUobytxeDV5QHZ7eTYxQlBoTUF1YjZAPnIhWiliSXRHRTB6VXY5UUopUUt7cVZsZ2JeMiYhKW1BIVRWd0hKMFl9IX1DJD5V'@;
put 'MjdwVXdYYytkRVVDa0RlOVdMP0BSP3RuPihYJC5sRk5PLHtza2U1ImsvRjVsJHUmR25CMWpUdnFfODIlRV86YURISys8IT9WQ3tqWDNAITxiWGhWOHJmQXp+N35DKl92eCVteDpnRHo1ImZRc0JlZGlrXlEsM11NMGE2VGNHRSVzU2ttN0h4Ry85W1VNfjVyUDUkeHVlTUVEPDopXVp2Mzped2Bo'@;
put 'L0UwL2g3QU9vJGM0NUh5aWtxMGF5WipCX1FQOV5xeTg3K01VWWtATStCMVV+eF1XUWxYXk96cFR8LHR5cDZaU2NjQVNzUlA/Ki47Mj5xIlhybFJPQkl1RHxOX00sOF0vM1ZUNUgvNm5qeyw3OTlsQ1gwdndJTzpHUUtROylSWzVdRl5LMFBXOHk0VmVtRlE+MXp2SmVKbWd7Omw5QlQ+RXRCZnJ9'@;
put 'KHlAUEIlWWRsVSliL0w7M1o9QC50PSw2dEswdm9+LEsqZzFkTTxfXT9PXitCM3dCUCpbJCJDdDVyKXdjZ0xpWmxAbEpIa2AvZmA0LEk/LGVBKiV6OjdUQk9rb0lWQiVwSlVwLndib0Y6YXRYZmtQLjtvdDVHPHl6XSUiW0ZDPnV0WnBXdkwsUUFWKyY+eEs9V0ZEe0kiPUR8ZX0iWkNdIjBuXV1b'@;
put 'JkI1Kn4rU1Blb0R3aC94b202dyVvTDY7Xm8mInhaRCpkPklINGZoTmteInxUcm5ySmkwJFYoelpRN2led2VGV0pnMFtrXjdtUDVUfXU2TmF5blhTKTZkcztUeiR+aE1ZaylsdXJoUSslOSFRN2M/MGdUKWd8ZDFDd3NGdiJEZ0dMQUsxPklMbTEuKSI/cURrU1g6NlcxITdOL2MvXmMhfXtaNFV0'@;
put 'OTlkdzdEbk43SCVRJkF+UlM+W1N1OVpKMXBSNXpGYlA7QHt7eUpXOFtqaEo+Nnp9ZjFuQUsmPHckVmFFaixvaTxnbTAwPkpfdzpHKDJffUtQSyh8Yyl0P0kkL2xtZit7fEUqO3gidVl2YCNvfWFxOVRCXnhhRU18cWopR0QyVF55IVkqTSxVWVc1cSF6PGtLIm8vRjhqZ1BGISZ3QDl7JS9hUD5z'@;
put 'W2NKKTteNE5MYDY+SHJZcHZpR2xnK0c7RX4qO1d4MT4wVCNWbmkpO3tMenZMIXlPZSRqKDAjXiorekFaflFfMytMT3k1OV51bFB2LG86T3JJbj9kbDxpY1p6Ul9bUE4lSGR3QCpNQzJUTTl9XWJPZk9VVEAuJi9uN2NtVjB6Vzt5fVpacW44K2RldUx+OTc4P0QuI1E0XT9JTTE8MylGXyooMjln'@;
put 'RXIlLCRmXWtgYTtJTU0iV19iI3Jvcl8qSltLYUtGSntKUUw8Qnl1SntGKkU+KGBDRXcqZ2BxSlBHSkNjcnwuLF9wP3NIK11QKmZ6ZlIwLiUhVTs+YyVHNXxoLHg2VCFwSmhXSyY0YWpncmNbeGIvdnBzPz1+emFsMEhHSTxOa1A9S09vQl5Ce1Nsd3s+Wy9IdnZucCQuTmomLFNvZ2Zpby9YRjlv'@;
put 'WkNLTEdsT2xbKm85dm1ienFwLm0sVEczS2tGTl98a0N6dVdnZV9MNGIxSTExJndzcE9XcDopWWFpbz5BZ3lFdzZiXUFlNV1ZYzhuVDgucnlWb0VJVltwPElMajUvXXlyV0tMQFgwN01SUmg/ezUyJX56U31FdkRIZEshUSpaR302PS91MColKSI7VE9rXTV+bUlsfWFvYFduXmNNO15XalBkeEdg'@;
put 'YSNBKyElN118fTFhWWpgIU5ZdnszUS5tK2E/YmR+XmRIXVE6eSJ8c0A9SHwpcXMrIWRiWDh+Y1B+OGI3KHNTYUhic2ZhK2wsPn5LREdCPjFVPEZOdXh3PiwsNEssc3JTbC85MXVgTnY3bTBBO0FaejNfcEZ6eVFfVUI3fUpZK0UpbT5EQEB1QWlvQ1lqdUBxeUcrXV80eGA2Tj1CTGFGW21ERTxY'@;
put 'QyNKaGUjLlpHL1UkUUwrInJGUTVPTj81N1Ire34yQEI5TV9FZV5JNTpCIlBmJmJOaXtJMD59TmMwN0tCJE12dTc2fFRPRzNFMn49ZkU+SDdfXnhbTi9sRiFWcDlLREY/PGAoa01LRCRndFhWY05XWjUxWVFDPFFyPE8xLE9dOkYibjRwOFtgcTYialQ4SSF4RTRnTXFHUFdHUnNVTXg7SSRGUXNp'@;
put 'aiRQO1l5ZGQlfUl7OHZ9akx3bEpIZz5sfXpkKWBMeWFoWjIkTXBpbDo0c3FOblcuKHQwTXs5OU9vUTRwdHtSJSs/OmhHJUJeRWlmfEUwOi8qKGNFdWh3JlZFNUxdd3g3eWIoaG1MQlU5VFBNUUZjeDhzPj0qUmx3WC5hfTdjTGI3Z00hNVFtbnNQbGg6O0IrIztHfnhBPGouYTV1QWM2OSxMOXp5'@;
put 'YnYmN3d1Yi8ue0Z6P1Q4V3dPPVZBUE9WOkVUamJrQCFlP0lYYHUhIm8pQDY6XSFPcjxjVFk4PjxPKjV9e1FpPkszWD5LLjIoU1ZNXSF6KThwPCw5YS5RSShlTD9nQyhbaT1VRjs7UHdCQT4hPWFLVmh6fWc8NyVtWT54bFhMRjhnfChXZTdPdFgiP0ZKN0U0IyFDOW51ZlZyQi89ZGE1ZUJpcFBK'@;
put 'TSwwaUVSNzE9NHdMTl4vazpdXWlsSFFydSloaChRQng1SVMubnx9e3p2IkpiaVpNJmRrOkEjeEBLUHJgazVSSjZTTktyLEheO093ZktoSn5WLCR1XW5xPG0+eEkiS049RTM9aVo0fTIzNTlhMDltZXc+PlVuZmMsT1JJMjBLW1d+WnNGZ0BINmt6LiJqO11PWFhMZlgvVzllP2JHcColOC9QYj9G'@;
put 'WDZLaiE7MzE1WSNbV2JqZjAoMFRjZiJCQF9ua2FxamQkfVdCeWRLM1IjLzpUaVZERGZXOT4lS1tWRVl7bmgvVnpYdFRAP11pIiRQOXUzQGI0ayQwXkoyWjloZ2UiLmMiQCsvZkxvNC5+LixGRk4ye2IyaSpdcXYvaSFkRUg/X18lYklnQD5RLF51UjUjKl5xZFl9cVksOi4mMFYjTXhPNnhEXl4p'@;
put 'XzUhTWZdcGtyQFlQVFp9P3BTfHolamI9PW8yQnMkKk5nS1lRaDY4O1htZG4xImpiKGJsYyh4TGhDQS9jdkpfeWh0QipPdj18bSVqYStKXTMvc2BjemdiOkw5R31GYUR+QFQoUHFOWWkoal8rd3Qma0svRCI5M10udlI9XXwhJF96K2E1P3p6W0hQL2tXR0d7VmtgZnZCKFR2YTV7blgpKHlHYDl5'@;
put 'a3ZFLjZSW1ZnIWptdlIjZjU9djtucDdKVFE9Lz9MSjRWWnJnOUZvMzI2WT5UWDF3fmlbSnoyRyt9aUl3KVdtdURYZmEkZkdYUSU9LipqaVt1bWxqQHUmfDtiN3hPWCxnYnNLPGZlXlFSdG16V2Q5MVJkVjRDJEdsYkZzVSNNMEFKKEt3bGdaQH5bVTBYLnJtaSo6dClZVXdsVDJqbWlqcG4oe1Zr'@;
put 'Rng9UWVROWJZTUx4QXk9PEwsTkNsQlZFSDhYIWhTY1M6dGdTeEk5LDNCbi4uQ0laeiMjYk4sdW91UF1XWEJpeUNbdVZldTp4Z05bMSZbOHU/bmxjflI1Uiw3KSMoZn4qT0ROcmh+b3drbS5fSzw7VURIUkh1fitrPCN2TGwvMm5xKGBDKTVAKT9PeVI7aj0+QGwzdGVBLnRsYDAjOiEyX1BkRGtE'@;
put 'YjVMKjxIUERxZzkmcjd5dF40W0ZpUHFJXmYoVHEqYG8kWWxvMCZifVNIdi9GSCFXQmJROEVicT1bOktCWFJQfDl4QUo+TyJWLGRmODBKQ05NaXJNJDVuVDRMUXkiSSp3LFIhZCRuUnUiN2ZJPSoyTVl6IVlDVG1fRmJMMVFadGlhY2IqUG9lSjNlSjE9b2ZFZ0owbVdDTl4hSlAySkxjdHhYJmIk'@;
put 'VFolSl5VWTZyMiIsSmAmSj16VVZTQV9VUXExUnNrdEZsPn0rc244MkpsRTxJe24uYHouK2xaZDljY1pLa2pHa3tjQFQ/bGY5R1dAIVVEUXBWTG5XdSE+e0tmR1IlIz1FNX5VJllMe3FUR2c5Oy9FOVpxZVpPXlRjOGtLaCVMSVBveDJULFRfY2RCZmVJcndgRHIpd19iaG9+SzxuWyhmUjJ0dUk3'@;
put 'bVlDJWQldkQoIWh2Wmd+UWdQPjg4MXtOYTskXytWITxdaEpnUHVZR3pLJTZAITtDZm9AR1UlYkxUNjhMfSRrZ2xxS3ZIX2VkOWEvekc4ajcsJC4iaUp+ITgqZ3d+OSZJd0wkaX1GPD9gak98Q1MwejNvU35bMDspQntWUFc+SjJwOXckMCRieCRrbkxwTjdASzg2PklmZkIjWSE2TyRXQzhpSHtA'@;
put 'TEdAKjdgTj9+Xk98YWdbY1JIeVkhInRZO0pHT05gJG5vOiZVXjN8KC9nX1tsZTZZbVhVa3AhQlIuVWJ8VjRzakFFNjJuQG8/PDd5eHYoKTFHOlppKjhPaFZZbFVLUkdheVFIT1A3I2VKQXQsPnYrfC5FXXZoUDosfEVUb0BjR3MiOyg1bnsoN3FUMnIzX1EsPT9WQlZmaEIzLl14IzpEPyNBaXM6'@;
put 'SE9reHVbVGNRKy5gbGZ6VzFBRmd7N29UWHxKREBUb2RYN1spRSRsMyVwNmx3IkVVVj9+eFUyYEQ4VCNrM0soS1pSSVN0fCZFbDZqc2thOTBGVXB8Z11tRT0uR1ZlS1UiQSlbM1t7NnF5YW43PklOZD1lRmVrenFLa3pPS2l2bUxIal46bmJkPHdhW3tuIzNtOTN7dD12V2VCWGtVV2t5aDwhTk5q'@;
put 'fWZ2JCRTMV9pRGFMTHxTUjIqfkxOJnhCfkUiVlViajleY3B2MjMqSE96S0skVXI9bDtvZjZkQDF8PTFpYSEqfTBPUGZzbUBaZ0VyUWg/NVc0fVhvQT1wLDhgVlFNYld+SnBjaGA+V2IlNnU9a2wpQSUoc19Obkk9S28xN0Z+YW4oKih3dHh9V1BXcVtgRk9MdF4xYk1wTUd0QHUqOU0qMDNbQHJ7'@;
put 'L2AmfCZLSXI1fnVPekYmIjNiVGAuMFRTM2tySUw3YXxNdSwsei5iRlIxTjBSeVMzVSlTNXRjcHI2L0dyIl1ycEt8MVdGOlQ9YVo2MkhnbWMhKXdMPTQ9M3BoOzVaMzxSej8+alt+XXF2QCRRLmBWSzF6UWw3NT1sJSxwOXlDKXpyIn5jVmZEaVRoYy9gP0QuIj9YdGtEWnI8N11JOk0scCojWUw0'@;
put 'VDVhT182Zi5kan1IT3V8XU5BUHhdUGB3bjJveWcuaFYpMzJ7ND9jTEM2Y247fi4+c2lFMHFbSWpAQF95dXpidFF4N2dNfHM5dEdHWWdmQ0VGZEhSfTE3O3VJYj9JdG9IZ1M3QS5NZztDMWhuJFJ8LkJgLy8+a1V3QVN5Szs3MDopKEw9VmNmWThObXZSI3g7NVNkX2JiNXYwKmF0bXxzYTdZVkI0'@;
put 'R14ubSE/cFoqK0FCUm1FajZ4Lz5wWHdiOEN1UkYlSV5oSDovI1ciVj18KHdDMCw0dHIkOkdHKHIqPDxJJEN9TE5JZlMlaGV0UjNQSVg7QlFVcGIqaT5WT0QuPWFzUSF6IW5KSigmJU5QOVdvaCNIXTRLYDdqaUVqbk48ZzluPVtgT0pZTCEsVE4qfkk1TXd7LzN1aTlHPXRYPlo9OCEsdHlRPDc5'@;
put 'fiF3SW1ocnp3ITIvPCkoZjNLXV40SntlK1coQitXanRnXlhaKnp4S0hWTTZWPjZPXk5TTFU+Z0Zab35MO0hgNUdDI2tdJWtdY2d4fFY4cipdYnVPL3sjJkN7SmtNdUx2UzQ4LGY2Q3RGLjYxZVRjamxpWH5lbWpYPnkvTy9OOHJgNXdjSF53NXR6ang8a0xXUmdEVX0zdSE0IU5WTVJHI2EmTXp3'@;
put 'QD9FcVBtTTRbWW9TM1g1NSlZe1tpaztqYUM9ciQ0PSs9YCV4fVJzTW14cE9NYSU3MlIkXko1fE1FZTFGWW9WUUFGJkJQO1QoKSlSbkFUZjR7eC9Sckt1Y31EciRQbk1rcE95ZG5nQT9bbF40VUo4YVM6WGskWTRvViRsOzVkZCgsUHoyM0hfTigkQjJ+SzlrZkpNdTdWKzJtSE4ydjNvYlgmSHN7'@;
put 'QXZHS2E3I2p0Ri5kN3lKVksoTHtPa0JuUXRNLjkxI0o0Zk9BSFduPkRNVmp2OyUiR1U5a1tZeHgjRXRBandvZmo8VHRxWSs3RilAOnk9X3B2T0lgU2lDL3BsSTZ1d11BSCtsYmtscH42JHNVOyNuRkdXRm9JN2JBfj4oaExiVkAyYno6KktXPjB1T3htaUU8cn49bXNfdkh0Q1p8TGprUSxLbGth'@;
put 'XkZiLjEudUZ7SH5HTEk4QUdBand7QytAVChIS28+RG9ueHtISkhOYjQpcCF7Z18yNCxuJiM2MjlLOnpTQSQrbFoqOEh+U2x0MDN9eko9ZG0xOVd7OnU1OWpwNEpeNSh8YTArS2ZFMlFGZjdlUkJmPjJVfi8xRiMmRjVXSTc5TzZsMyhvTklPUDFFQGYvUGQzcSx9Y1p5fCtQOWV1OWBBSmwvT3so'@;
put 'WE80L2ZZQUtlVmFZa2M8Q1hNWGc2W1psOFpUWj5ofDo1ezVUOktAaGtFPDpzVDB1clEhbClRbj02LERrXj1vMChifClpR34udy95Tz58XV5QYk9KJFYiajVXJHF1QnJEfHRERD5IcjR7c1pbWDguYW4/I3ooOGJ2JipINEE+KVk4YDdZZ3crdk9wO25JakZuXmd3ZTwlYCxBW2UoZyYkJXVie3do'@;
put 'Uk13YGJgIV9XYXNfNVF+W3ZPUVVCX01sKDh8ZEsmWV8mfVs5JnRCSFNXTHB3PG5tdmdMTmtuJUtyLnM4c15UeC55O1BaYE56VXxycm9MNjkjSTAkZmpqdi5TOjFxbW1TN3BJcmBedU1ZYXxUKGw6Q1hBdChCdD8+PDF1VFdHWVdRb1BsJWdVb1V0YndvQ2xoLEhzRVN7IyRENDB6THRpb05SVSFf'@;
put 'dmBHI1RYcmhZVjddSjZMc01RWUJ7MTJAekl9TEMlfHQpN0RLIUR1fmd8XmUqTiROUSU/d1MvVU9EWjdOPDlYI0ZjSVdqTmpJUko4RmAvdmJOMXElNkR0X3psTmJJejV+by9CcmFgMUglcWU+a3VxeWtuNlFxQVNEUVpOeUY7cXt8U3BjfEArIXgiYn5raEpMMTZQR0NDfGlQLHx5O1BPR2BVRGR+'@;
put 'eCNOPC9ZOz5nQ1ZdYkJHcDNPP01qdWt8WUZRSG15NUVRVSkucSEmbEEkfmhDTEh6Tz5OKXJWcnR1KnY/LmJyfjROZEtkZXpkJSguLFhvRF5bNFRFPDU/VF5VL1h1ZE4he1grWEBPN0NgNThJQ1JWeGVZQDEucFExNT5ZPS9CVH1DOHY5YjtEKFRuJCI9JExacmM5Pit2fj9iPWwmdF5RcXk3Tm90'@;
put 'M31uIi5ZOldBdyZPX141Qm5tbWFSPyNUT1V2N2IqW1FuTi9nSDtFfl5WSXwrND5adHdjNX5PPXdFR0tWa014bXtZUmA+XmVqPUBzQnVkYVRnbkFKe1c4Wjc5PkB1Z0R5KXd6a1o6LywsPko4KC8hSyUzOmwlNEB7UVVYMDdfVGM7byE1IzE5TEJpQmQlRDElelZ4XUdOc1l5bz9MPkJQdEp8Lzh3'@;
put 'Ol9SQHJHZShKcHYhcC5yXzJ6YjdOdGhkaXpyRmtFeWJyUmUpLmFTRTpKXVtWQDRdUDwzMUx5RyhoUEo9eTRyO3w6Zn0zcCRBfSNRVFAkPVJYYjBTWzhGVE97YyZ0eEFKak5HfHNdcXZnd1ZTZ2RtNm15dlA9cGFObm0qbmo0cHl8LGxSbj8zUiNZLG1sVHZbOHdAMHBmVWlGX0k/OWVXJiRIQHQr'@;
put 'dyVAcjFSZDFXYjNIXmE/JClJKXVjYX4uQishMXE4UiIoamY/UHFre2RvQnVXTS5mLyF1OWd6OG1zUzQhNXt3eVdBMmQ+XVUxS0tIekBJKV1UL35pR3pUYyEkSXhXNDk2c3FaJjhmMnJuPHVQJVVAK0Q0UF9oN0xeSFpqNHhNdjZWfi5hfCRTempIRGsoNl9kMEUuLk1vfmFYUCpAYUBJSihUKHMy'@;
put 'I1JaUSVydm9RK1puS0BzMD9iYjUwVXxzQHEsJSgzL3pAQkNNQzplM1YuaExKUHVGIXFzVkh5PXhAdT5tN0dTKGpuRWhZeHwiZj5+Qz8uTlQ+UFlzfnFXQTZgV21VK1prJXNhNXJsQnxoQC9mfEsufWZuS0dWKjk2TXwjbWJoQE1wL01IKiJGdj52Ryo9WzQ0Vz44cDdZYHdQMD1ic08jL3YoRVgs'@;
put 'KU8rdWduPjt6eTErZGEzSmNQaWB4ZzpoX3s4ayI+KjFzYTx4QCMvaVFCZDYoT29yPl8/Q3Q7Yzw0Uy9WLkxGUnNKa2tKcW06QntWJGlkT2BuWDw2TjxafmtaVGsrI0t0UVNodlZ+QWZreDtfUD9PeDRIUG5ufT92Jmt5ak4jeXciNVhWSG5wN05KSW5kMG9BKSlIUFNjUnZSeVFuTE5IUzhVc0Rl'@;
put 'al5EPTpKc1djaE5RVSEkaFBUYUQpe29nVilkW0lJZXpmIyFAdmxmX1pAWjxicCJnWmBwM3BBSDY0ZWZPUGtGVEVdQT80XkJHLnsraj5aNlhnSjh4R3ZaPWV7VTBYUVBpTjpCUEM/dnV8RHhyJGhmZDkpVjolViFLUW0yK0ZxYlc7MTlWblo8dXhFUSltbC47Jn49VnlaKSUyN1kyXX1qLGowN0p4'@;
put 'JkVIZllLXnw4fS43fGJsRltCXklCLypaPVFuOlIlW2tiNHlnUC5QSC4oaS9QKjV9eVVbbCV1Y1NmJWcqNWNJcDppMS49RV1FPDVlZTBUSUk/RD84S111PFRUcDZCfkRbfUNHRll2LjskaTV4ZUZGW0B2fHp3VktbPiV2W1pZfTpsTl1ONyRfbThELzhaIXVRaiNGUng9c3MsY2lyYGFHck9eKmpJ'@;
put 'R3wzYzhtTTdtMWRTMVoqIU8sXi52dEFrbnZ0WjQ/NHViYk4iKV5qaWp9Wj9aTGlpdG8kPzdMW2ldTUMzYT9lKjdOcXA9ISh4LzdsPDptcmooRCJWI3NVUGR9XTc3Qy9wZU9NdHopNjsqeF5yLyF4WVE7Y0E7aFdUNVZoRU54dU1dLkZfaHVZTUpuX1BHcUw1SWlaNShxVGFWL3c7R0NjOztqeDoy'@;
put 'QEdkV2JgUGpnP2BpI3JDekhAaWhYY2dgOWBGZzFgZX5TTTlzbSZEflpSS0lJPjV6L14vKjYjYlBfLzh7YVQ9cjptW1kjZyRyc0F8QUx+PEhCeGF+OEg9NEI6dXkqWDs7RE43aEAhT1FCPFlFSkBBTjtGNEMwPHApfGY8OXArPl03P24yMCV3K2pBJVJSU3QyXnF0SFttTDJRPHg1Ll83cn1RM2pu'@;
put 'dkU0K0w2MiRKR2ViWGg7WjchZnpBJmRyfTl5QG1FY3U9bHVVWyYzY284KitbaEhxWTdkTWdjS2Y3ZF5ia2tGWzc5Tit5Xn1Menx5MU1kS0BOOH56JXQxP0NLfVM6Pkl3ITE1VmlaSXo9OFRjTE90e14yJF93MllPXURDQXh1SG8kNGBWUz08QlY/dzVwWXo7a0VtYjZLMHt2b2puTihiUnYsN10v'@;
put 'UlRjP3kkNSptTE1XJTNQMFRBT3VKPWJDPW9uT3VwVColNVEuY1hpN0oyPXx1Si9wLF15aEI6PEYubXciO2hHdz05UDRkIUZ2UCkoK1t0XkJQKT5ZZXYpKWU2a3h2N3sweE5ifjYkTDpUXlR0ZEh7KFNpSGw+MmdBbUhtTiZpP3ArWEgoQj0rVEBiKCN3NTk8c3REbWhiOV1mUVdnOU94ZW9bNzhM'@;
put 'QXA0dVpvIzF1Kz1vVmUlND4rb1kwOH0kYF50eHxxdVg0WFlGOk05UD04emc0YmlILiNQXkxgaSM9VzxbRylfUmFveUR8VHkpRkgyZnMrOT1uNXw3OkFQQHIlNGVSPV1NTW1BXSFvc2R1PCJFKTBrKV49IlhYNVdfRSVWVEN3TnFbaV93KDVdS0t5K2FVVnJlT3RRNzAwdGp3b2pIMiV8TCJZbW04'@;
put 'JGk2VDUqXmtGOEg/Tyx3UGZeaV5mI2Ffam5RRXckOyxicSkpbWZ1RSYlKDNZfXQ6fDFQPjt5UCJTWlBVQUkqXilnWGQ0InQ2NlcjWTNHZjxCJTVbZSt0SDl0M0V7NF5PVlYuaGU/WFl1M1Y8bnIyZENwVHJdd0Q/S0BYUFNtVmlsI0Jfbyk0SF0wd3JnLlRmJCQiJUlgMGxgbyx0en42dT9sdFsw'@;
put 'RVFZbHUmQkBuKD1QSkIiMCR9fU84L31sbG5TSHh0VWgqK2kyNXYsQ1E4XSh3a3h3Z3NXUkV0V1UqNUojdkUhMWhoZzB5UEw1SV8mMC8rNEp9cWo+TVB9bXZlZmh0bCQ3VHJFaX0+SC5OaF9YTWlgJjNtSXZvXWpOYSR6Tl9vfnVmPXhjOVd+ZGUvbS58U3UuVnJbNSQ6LEkweDluLnBKb0ZJMipq'@;
put 'dWtVVEdWTi58fUYyXTJtN315cVd2aHJ1PHYwdXw9TzArMV9EOSx7Wz00Lk1DIjV2TlhbeGdJfXUqMi5Jaz9DQVJaVV19YiNZPkp7fj9ReGMyLDNZclVVSWtQcyp7X2B8LCptLC9pfmtEXj8kK35jYzFjZCNPenB9T3wkenQwZTckc1BoIUlvUjl3SDQ8aG9Ad0ojJC5GVHhxYzI/OGp0YjB9d1dT'@;
put 'JT1VNEhDNWBganhOUnZTJSo8eDIkJDphMDJEUCwrRFhEOkBhWTxKKlQoYWJPJDtUYXt6fmVwVnR4KSxFZlRWSDxQPypbYEMpanl7QV14QUQjWDB6eiQmUkJ3M2Jzd21wPXtYe3BmOzxMeTpGS1ZlKS8jUCJobzBGbzd1eUY9LiYoZylNR2BvMSNMMkAhYDxrV3g8O2gzaitCNV0oRndhSjsiWDs6'@;
put 'Yzp9IlRAfE43ZzJRT1Q+TDg+SFI+YiVQc0pWNmJ6WDFPT3RJd1VQX1FgTGJrM0FOeW9zWF1SYWVTJCFWaSxbVjdCczFnSzZBcnklUSohNT5eW3NNREZHSz52ckI2bTsyRGd1eUhTMWJIUGRbdnhJeiFSaGpYanEuaDBVJmcuQiZtWltnYzlSTVA3L2ZxZDtXKldnVmdgcXlbSCtqdnJ8ITM+fFNG'@;
put 'TnZ4WUglcypOblJ4KWRPRWt7aF1wc0p2XkVieGM6VCtdbzx0Ikk5TjE8YHohOHNOTzU9fHwkUy9ya0BnWU5jUyJfVW0sPGcmbkRKbio9fT5zYkkqIzM5OiF8MD9hQSl9Q29ENlN0dWRnQ19gJVVia3QhNTMhNCNsJW4zfHxiZnRman5oMWVTcCMsKjksUld1cl83eUx9U2gwVllrQ05GSCxDPC9+'@;
put 'WChsQmpmPWBfSjNqbS87SS5DS0RlbihJdywkYSYzYzA/MzBkbVZCd09PO2BjNFUsWWQ2dTYwVz1gVTIlaDVCSFUya3ExMj08TndYZl4qdFpXbmpiNGJKWldCOiNpP29OTEQiUG8iUk4vZ0h4YD5zYX4kKEpmJkR2OEJZe0c1dERsYU1lUy5OUSo3dEE+PVM4cyhMQHpXWig9a3VVdyJOTXciMXgj'@;
put 'QWh2PFZqTCY+fTBeJjVVayY8YSxyYzdqPjkiNHBlcV0zSEV9P3UlPVY/Z1sjW2t5XnVzXVRkT1YuZXRTMllTJG5sN0pEeTYuXlAkQSN1dDlBU0BuWUM7UndhK3NfQ3VCbTBZJnBdO0d2JnhmQDRWZmA3VCpXLnFpZ2pYdXNuUU8raHw3JUsjcXhHSlllXiszNHo8OWxGJmlzOylaTEJLLjAkdkR0'@;
put 'ZkgrPj96TEl9RStUNEJ0YGh4Tz89bEFLbyRiMz8qTGorUXRFKTg7T3R6Uk5GO2pAWyFYenVMdStdVW9VQn1MR2Z+dXc7WnNxX3tuSVBAb0QsTCNuSUt6TkduRV1vcVBUbGk0c2xFNiMuYTkrIX1MMk86IU5FTzhfdUtTYzhHLk9PQFsoNWNfUUpAeE1me3VwdWIlPz5ZISYzVEdIR2JuW3Y3fHhp'@;
put 'b1k3eXtJSjMza2lYdkRLPmcuNWtoMGdaN1BaeEZoRVh1Z240KHplIVFbd0h3R30yKj03TEA2W3haZXRxcUcze3AzKitMQ2E5MVJ7cWhMKS9WaT5iSE1LSG0jV3FQeXw5L2ImYTtGWHcsKDAzbERFOkJCdT9wd34lfGhtNDJefFpGJENgc2g7U1pwM0twZURTQyshZmhaJlNGPCJlQiE7THQ4fV8p'@;
put 'JCRgbUJYNEkpcWNXR3NfWnxLX0ZHXzNWTyxpQWNKVXZaLlJSMHZPRHpfOT53ZX17dG5ASHJgWlRSSns4XjxZV082Rn5XX145P1V2eis6Q01DT2x0amRjXSV8YF4qYT1tTHR2N3pXR05yYkNXJG1YdmdLM1Z5cWZJKyw7YyZuLkBVUTJeN30kemdnMV5CfDska3RiMiMsQjNwNW1FRnAiNn13PWJw'@;
put 'S0VuTl0/KVlMRmxxSCRFRlBpNWNVZmZdK3cuSEp8STAxfUVBQTAsRU4xZHM0LkQ2TXFPa25MRChDWHNUZHYkVy56K1JERSJsZ2kzdzlPLyhlPDlSWjEoMnM+Yjs4fGVmSUh7Jm5LI0p4RHtfVGk/XlcvezFoIX1+KyF9UGxOUmo4QDJIeHd3MkR6L3huZ01ebjVXRWEkZDA0Y3grUmxzRy8rfDtf'@;
put 'MSxoKkxZYjYjc01OdFVaPFJlOSYpcD1IdSVaVFtqcSkxXUosPSwydGJpWDNld3dGJl0weHtqT3UjWSN3eCxFYngiTnw2TVIsZkkrMjhrTG5ePlNqXU5LKiZ3Ql1PQDB6dXN9TSFRSjZ3ZiVVX1t6eiJHc155Km5kKmZLY3pvYGdDTWBZMHNHL11lcW1yRltxPEdIMU9ZSSQoe1BzMHR0fnpWWVtI'@;
put 'fWJLY0xLMl1PI243bjlMMj0jMWhqTGZAdUJDQl1kc0FJMVIvTF5bR0t6ZUc0ITo/UT8iR11STV1aRUFjMy5ldT1rVTxhOklnWWN1bmBuInEydGRZUDx2czhJN1BVeD1IZGxCUj8hfkAxZFMsfGQpfl8zZW1OfDRkZlRHeyFsQz0ra1ROcEYrZzRFK2pydmImJjE7eU4yO2EiQkx3M3p7W3xRTDQ+'@;
put 'Yl8rKFllY0ZnZDZKNWZsPTxKe0FnYCtoQVhvYnRMRF1tLmlWdC4pW1MiPGlAU3cucz55PGY4e25FXmEuUkRzezVoekRPY09ue1FFWVNUL3w9OkR7ZzslWUVLeShCPmsxMXhQPSFZfng7RUV3LGAxYj4qLE5fbDFxX1N3TCI+WE5ocmtLNlFjKCsrNzI7ZT1gezdJfWVCUH1kOHxqZSNIOCshdW0z'@;
put 'QUA0M1ImdUNxIyxLSU8mYzs3Q20jeUhFR303dzE9V0J3fEs4ajxUMm50M10lL0JiJl4wTVcqOyJiRDZ2VDVJUmxjYCwhK2BYVDVydGthVyRGPkpUIzpsSXZEPUdpS0IxSSZjbDAzbVIme19rPz0+IVs2Z1o6L0ByS0c7bkVPU0c2SU9dSjAialRTfCsvbkFDPzVVTlRPVl1teVU7JmpCUkJhNTAm'@;
put 'P1YobldCd0t5cHhAInJROD8mVyk4MjRRekIqIiQlTTM3biM+Q2MpRlJUdEhMZzJ4OGxZP0xRZiRaVCNEYF5WIXdsai9gJGVtLG48UF5HXTY1QEE8IiYkODpfP347aXFBR3lTW2osXj5oYHt+LGsxLko0OywqenVuY3clRFErJi95OVYhUnYhfHxpOEd7RXU9O1dadll5YjQxYjpQT2xFSikma0M0'@;
put 'N2FaUWlCLjU/cilTWWN7RVVfTCwlcklTQll9Ll5wMC9zQGVQcldBN2FvU2Fqen5OZik4OUBbSClPe1FHUiFKTjx0dk9BU2ZTUHZ1JG84MS5UMkNgalhZIVUrfDo4Uz1Waks/TDFUW1BULnlbWGRDUSl3YVVzRVE7b2pkNmRfQCV2MjokWyt8bUhlP1MwTjhUPmt7d3pKYCw8QGtsUGtpLHJdaSlO'@;
put 'ciU+ZEordTtDTVVoTUUuSTp1QCRgSCVVQ1ojeCJuLmdkVFMjYjs+Omg2RFtbeEMzPF0vXTluVExDIjpWd2NKLk16Wml5dk5DLyowWmNdSC9uYDlRTEx9NEZoMkVqSixmZj81TWFRTVtsezZgdE0wR0pCRWpOa24xNzVLRVI2UXJRIThCTEJCRzlEQ3pHTXQ6NWw5VXBuOyh3MWtXc0srM3lvdkE0'@;
put 'LzJfejNAYWdVNXM5aHh3JUIuNHt6cVF4Ij5RZCVvcHpFOypjYjhqWl94Ym5JW1lGJF4oSEh1aDpFTS8xUXpjI2xgRD5sXj9KPGc9N0IrJi5kXjFEIVZmdkAmIiFUKH5VWVJIPi5CYlo/WmpzJFU0SihVfF8lXjFzOS4lVFFqYkVrc1hkb29xeEMmRyNHekYkYChoJTFhQyNXcTgpc10vd2VKeCsw'@;
put 'bGE8RXh8QC5tPnF0a2QmYnM0Kig5L0QiVXxTInVEOjArX1Bdd3l8cXZ5bVt4Qip5c1s5dyQvLDt0Y2ldRVBNe1hoTEpOVT4rc3NgQUpHbypzMlt3WChRMCx4RGVCY1BCZ0FlVEslPnhpUEh0V0cla3MoVU0lajY8PmpnQ01oR3hqSXkpckQiXSxoL1A6S25AXzBfbXM3Um5ddiwxXj14SnM0PCxG'@;
put 'TjJHYSR1amdhLCo5K1ZFR0BdRWN9RTt8MGI/Yj89XSFdSFl8SD9CRnMpcVQoTV1dXiNaWit1U082TVYqZ0RgWyZqM0o0TipPXVN1NUY1PklCTDRYaTQiODA1eGphNSozfUJJW0x3LkAsbXwuJmRrd05FajE5MnUwKCxSam9eZlA2RXQvKmshT2k6fF8lcU5tKFgyam5aejZJZGt1fC8qdz12TW5L'@;
put 'NjtVV21IeH5XYmN0MT5+O3xxYyFZQ0EocS8vQGlhb1MieGNCMjEoQ1NQKUJXeWsoclt4fFRLaixXWnhFYmoyPlQ6JmRfLjRbXj4pdCYrM3FsfW96MEElM1pwYW9lTEd6eXZIW0I6bzFSfD9mK1RqQ0BiRUArZ298cmxPW28lQjJOInMhNXpEbF5gK29uIW0kIlNQPGxmPE5MRjQqakUheUMqbEto'@;
put 'Y3tidD4oayZqcFhsTzUyUClbbUdlMD5wPXdbOmM7PEQzTlQrdGlWemF1VUh1JGNNKjRFO0RJUEc+Jm5NYVFiQDxQP0thS3JebkYvciVweUpoQnZ6cTRDVUc/aDxBMGtFQUQjWyxxPyNHIkM1Yng5KkxefmJJaGt9fio+cCkuRHchMzxSTlVbWU1jYitFPUhQTSkxMDw4WyVHdnAqbEIwbzFTYzFg'@;
put 'NEpAdE9SeC9+OkNwZ3Uza0Y2M3R9PSovUCJFdU9QY3Q5aE4iOTFZUUN3IyN8aUB5W2lKckNGemA6QFlLen5na3pFdE58MWdqYWs1K0deRm5SaXJDfnltdXglViYuXk1OT3l2V0wjLmcuY24idzNzIlR5dyxhS106Zng9TnFXLEpqMVdleW9RP0hvcnNrO3VlNVVzLzh7O0UqVnxLb1Fqck42UlhS'@;
put 'RDp7QEJvNCg7fl5FMC9qVkg5d3I+TmMvTjB7YDZiajIma1pqZHU/UjVJYWhXUUFiX0d6eWZeZ1ZRMWNFU0cmMXh1S2NidE1QcihtcEUpd2g+KSVQWChpJUx3YU80RmtGYkxTajwzMGFjWFNaQFopcEo6VGZOVzVoKltqMnhIOVprfnw1Rig3e0pgNX0hMkxHfWhRb1hrc016K1JjIUJHSl0oU3c2'@;
put 'QEFiJkJCZW1qS2dYXk5wbkkyaj9MVWpOd01GeSxnNDB4PWhteGBXREopMUIjelBIcmdbJlpdckRhe3UsdVNPcjsiaCpIcj8/QF0iUVRpPHpSJEVCcHhZRW5rZjB2YVBrWF0ubSw8MXJJI0dPSVlvczY6PmZ8fXg0RDoke1dyPloqfChCUj98NCJPbyFpbylWPmQ0OVoySlNxUkd2STdrMT9EPSEw'@;
put 'OlFuZGtaciJbUj0hT3d8YS83OnV4YklTQHFEMiE5XUZCfWUqMVcrMVZqPFphQmwmVHFOeDAqOit7czZxKHVVOTlQJjYoUkE4OWhOQGAjYUUpUFUySC5GJElkNGBaZltXdSRAZXhVTWdmPXg2InM9KSRQSClNPn1dOz1oL00/WylTW2gzJj5OZ3ZTUS4zKl04XnNCSUAuPU8zOCR9VC89VVRXbUsl'@;
put 'elRfNjVpTFp7RlZ3XSgmckosNkdMeVU0MjQoZkNAY15hNnpAXzdXeF5nVTt2UClgbylhb0orbnR5YzlUQkdXTj1PLilUXi8pSCxVP3hQWFpOYCh7YmZMeH5XOzpKcUViNHV+WmRZdSRGMncsMlslMzBES3AmaChrWWRIaWV+MDBzOTg6Wl9bOSNNQCJkc1hGb3dPTk5KYjQ+WUBoKGw1b2ROPls+'@;
put 'PkJEa311QlpTZDp3Znw6LGVycjJKLj5ZLCspMDZqTCYsWVUoS0gjcShBaHloI3VBcCRsK2xtLC9WRWZYMVsyMjNxflFIWVtOZXUyfjUxTFMhJUdecUJKPGcpel1iKVNFSC5baHBUR28jVm9kNlgpWSI/bV5UNkokNWxkPiZ7NlZvYklZOjJ9TnF3KkZUfVRwOyo4R28yX15Ja29KIzNgdnZiRkA7'@;
put 'XnAmY2llRDlkNSh8M2hlL246bkAvRSgsNmJKNVFRV28zYCJ4RXd8aEh9YEN7bkQ9Km4pQ21YWyg9dFk8RSZgcyNxO3pKdD4vKEwwdzxAJUpOaz8qNng3YF8odF5qcWZUNSNlIn4+Vmc8RnJEdEdWSzRDdTo6NSImY3tJKXlsdSZ+QFBjU3ZTPmMrK1NOcTtHVzBMZCNldEQyMXZgMUI1akBKbDc2'@;
put 'ZS5GZDAhM2g2PzZSYSokeVlUUC4pZUp8Snl3UCJlQjBiYTskQTl3MTBHJiI2Nzk6ZT9XLj5kcT1zaEI7ZiRZPnd9YFZELDtOcmR7LktgdClyNSFEd0hvVmJSbERrdi9wYlRmb0x5Omk3JWVDX3c3akt0bXNiTE5UdkM+WzgkO35wTFRdKC87Sj9EOGg+O0JMKGl5d3AuQExFQiI7P0NDXUI4RWEu'@;
put 'ck1QfTcwOE14fCgwJn1oYzswYVkjS0ZoKGpBOSpVPXhqUn1YdXNzTSMySj8mTnZacjEvKUl9VUJqRVQuZSxCV19saCJDVjpOSl0obHorU2d2cz85aV86KSY/OFZlWE45aE0ydVspVX54PnU4ZXk3WUhJPDdLYTtDcTw9aSxNJmlAKHRwUVpvSmk+Rzkpa3hXXWJJWlpwblt0U00kSlV+Wl9lZmxl'@;
put 'NUhFRUZZL0tOdVRsTkcodmJCVyF4VT9fTHohNU13dT9UVyo8cjhLXXZ9SyYqWlN0Ll9mUXB3Kkk0Lj0lem5VX3N2SEBDeFEpSnImdntUUV1XbUMwQkdqKi9YX0RNPnRIbmlpZVE5eT5ifF5wYmMsMnZ7eTRBd2x5Z1YkK3wpQmZ2PWZVZ3dnbSNrL05UNWlsQm9dP2xSaWA1Jj9YVlcmWzFIK0cx'@;
put 'PCN6XiMvN29eXzNlV24oXWkvXj01d2pWXnlSZWVJdnt8KUBOTklRYWEzbW1nV1I7c3J1bTouRWpvVVZTclVwbjxxYWh1SjFNNCR5WXNiWFdLZ2AwWTk0SiI5TT0sXnkxem5URCZmUEohcz1Fe1M8RF4vZGRIaE85SmFodm5od2tBOEo3SzU4cHBuO3Iha0VSay9EWT46YXJvVFNoUGZPM3hbXmM2'@;
put 'dio6QjQ4NTQlNF5tXTk+KmgoeUlpM0hVSCZjO007eFBBMThEQ1ppZSRSenM6fjpSO0ZoaXxKKWs4b1IlNCMpbkRgQVtBMkJ0OVFEK0AmfD16XktGWFtscyp9Lzx6Wk9SQ2hIK0lEPiE3Z0l5MW9tI3tbVTlXayF8Onh3LmtCPlQ3IWM0Nm1OWFgmT3tDODdYLD9yaWFKWWVyMlhGJD0uRnhafCZ5'@;
put 'YytJPz8zbXN1OEdlbylPVjo8JlBkXVA7WzR9Sy9ZXVE+eFhGW28+cVp3eWNEZlRGdlgpN2R3O1J8YmZnTjFwO3Q/PzZoRSswezwyIiQiYV43ZU01YWUoRE8uQ11zXkVzWUxKJW9kal0paEU8bT54bn5vdDhRW1s/WGZbPFBTXikxLzNQPmw+NHw/LyZVd1VebWFkO0FkdV1MRG4jXnZ+OkZUTzA9'@;
put 'ITZLTnMzQUVpVCtjWEBbYkdVSDs0fiYmSk8rekRddmE3Njs7PEM4TkFHa0JaOGl1Im5BL1pdLzNrfW5JUlEpKE5eKitnQHBXOFRYbURVTkEsNkRnbHFJQEc0SWMrXVBgXnhpfXFFUSRnUD1rem5TU1tyXn46RyVUSm05ZHBISCVsdUxhM1o4d3ZCWWsxOkAsZ1h6UmU2OytLWTIuSzpmZz97ZDgi'@;
put 'VUZNK3NFakovY251fEkjdiptYk4+SXAxLnB0aTd1flB3dl9zei5YZWtjUkE+Z1I4e10rJmkkU1RDfWMkUEA3N051NnxFck94aj48OH5zbGxrVj5qRnYoQ2t+Umo4JkxvdUNUOW4zT3cuWEBPTl5LeUhUfmtYJVRrWjhoVH5jKUZsMyg/N35Md3gydm8oIkl1IilOfCh3WUJJfW8/U3NkTy5zJmEh'@;
put 'R217ZGxfUiRiRWBgXzpyT25pQ35mODNiaCtrZktOZjAjMndvQl5IO3B2VDZPNSRJdjYofE1YNF9ZclQ2K0QpWjR0Nz97cERsTCF+bE1hbTZhakhSW2opOzplOltjSnQzaUZVJi8yXXBQOWB+Nz5dISQkVG9NbT5zfFQwTGlSR3E0eDx4LkhdW1hAam4idjd0Y1oiUHdBQ3xUTC5PMXhZdTFvODRX'@;
put 'a20kMz8/Xl9NWGQufHZPQU1FX2NARz1BR0luW2tqVmlgL31OciVIWE9QbT8jQ1dafnpSVD5qP1hXVVclOlBfUFtnXUw2fEAsX3V0OjNjflc4T1MjQywxPCFga2lZRXpGamM0PmNfLGFlLCEidWQ4XiQzcU5wOml+d1BmRixuTlE0dm8xKS9gSnBzTU56cHRjX1BtRig2dlk4SkgzLnlRb0JKUSIk'@;
put 'Vn4zN2BhMD5ZdTcvW3kpPVl3ViZaQ2pmYGY3IX0wQVgpXlBQKGEoLzVeMSVbTU1OMysuUyFfMFlBaHBhOkd3Nj88Wjc1TDxMaV0kPHVFSV9hKXJDImV5diVtcV8yKVUvLD0qV1pHOHZhO35mLm0jSUI3YmpQRS5pOkJVc197b20yKWx2bWc1eWhGTCE5X30uflU/R119VjJHX00hIyNbWmJWbG5e'@;
put 'TT9OVXs1eWZBNmt5Nz49XXhaZH5eOnRqPmN8RmoqNTcvc0pYUTIyN0NsKGhMQSEoR2pGWT99Rm9hXTFgTW9DIip5TTlnSDY5QHtAWUFNZyZxSzN6Slt0Zi9dcGYvTXxXJCM0ektHenBqS2BdOkxCeGJWSHQxQ1kxczhpYyM8bSxZPnQ0YkV5UTYhQXdpdnVAZllgRnVyI35oPns4fjYrKDReUTgu'@;
put 'c1RfOXhJUFN3QDN9fGV+VFslXUw6Mk9NWjMyblNbNSpRRWYyfH1wXyklVylFXnFhcGVWYld6fGRkKEY3dHtVfHIrWXRTIVVNOUxZdygobmk1PWt0ezBFYEs6TD1rblFjMHZZVUhkNEAuZkFTfjA+RTFaa2BuQlBnZVU7MDJdRG1Hd2JwJklOYitvYnJdeD5eO0d7R256YU1GQHxHOyYwZnxhOE15'@;
put 'KyVrQFYxSSJVeyMsdFhkYCpWJFN3RitHNix+Q0Q+dDglNUc5OklbJVBwa2U7MUN0Wjw9aF5Cbj4xXlldKy50ekVEYi4iRGoxS2FnYWcwP2xCMWNeUUFpMER0XkxYRWoqc3RQPTlBY3olSHpRVSZFYkFYW0FyQXg7YUkuWFtHb15ZS19BKFhnfjRlJFU4WzYuSHE+XSFIJHk9T09STWtCL35iIUch'@;
put 'NDAxPX59NExzKjhNTXZVQDIyRWo4dUdJaXttTTArSVVnVmBBMDdyM2FIQ3NTdm9RYH0odyEud3xePT5EJVoyKDFMZ2pRRTM3RjFGVU54Wl5PeDxeYjVXTE0+KDZ4UigmalVwaFthKzM4cW4zYFpDRl40VyV0Q21EVz4qSUs8PUd9e0BMYzg1ejgoPz1XdURrSS97cSxsUCt7anRwK0pjcjw9RC5K'@;
put 'V0x+bSMiMF1aTkcvfXxTI31UUlh8IytVVmR2JEUvbUVUZXhxd1dNIVI7dF02QVNmPWdAKT4zIWpyXmxAR21ScEQ2SkxLTiEhbkZgVW9hSEJgL1JZZiEhZGFRV1ZeJlVZTXkkZEdbQyNjdC55RzpTMGdUX35qdlowbjYzVCJfM1MhIj5PZipyYGxtTyghT2hhb0BDXkRBQ0E4X3N6OUFAYn08TzIm'@;
put 'L0F0JWNqMmE+T1dbZWlmOF9DdlVYcEclMF4kPHJGPXtDQjZJYyU1LksjRmFOfF82IVY3IldVZWUqY3tpcmM8OVp3Pn1wRjFAcHYxJFArUEEzV3EmaWVgdlNRVEBmRCk/IWN7Ky5Jd0tRdChlfUN9TDcmMjVkcyZEeHklPHFZKkRWe0ZwWmdDRERGZC8oSW0yUyZOMDlXJXlodiY8MyhxYWk8ZTY2'@;
put 'Y3FWXmlANUFUX2Q3KjZPRj4vVUsiRltVdGs4Wn1iaSx4JkZIcUJeRClhSk8+T1lKM19vWVFxWywwOmthfml8UVREb3pYTWFVd3JaaFtsdHc2MzZlKzVrVGFjclY/Y1tWQjpvb2diT1R5YnYlI3N8ZnJeN2ddLiljdjdpPzdWRXRhSkI7an5ST0Vba3FOU0ppai9qWHhlRExkaUNePlolfGMycFp0'@;
put 'fUlbIV10OTZGZFlpaFZiYkRDbGB5Wk96bHJLUW5mWWptVShdP0U9X0A+enlqQHRPMEZQcnxSW2E8a1JTTV9vSiQqZD8pLC58KnVucjo6NkQ7PTssNDIsVHJzTk03X094JWJwI2ByI1paendqSExeMS5DMXFLN2NaITlBK0UpPHo8JnBpbSQpbFBeNk9tZ2xEMFQvbFM2VEIlM3RSTnZLZHdSPTl3'@;
put 'M15hT1ljQT9GT3MmSCo1Klo3eT1yU3VneD5veUVBTVZPNyN6UEkxI21nW1ZCVylXdTg3SlJNXyp7JjE8c3s9fnY7S2RGImZCQEQobSpteSZicVZuVHJpSy9QXm4wdE5GWFhYIjw7KF1Raz5QUGRELEhWbHgvZ1QkSFgvZjd5SCpkQ001LmtAOCsrbDEvJG9MbmYzLiFHe00sOGN5OyRGVzByOCQh'@;
put 'WXxEeypyIz8/IT17aSQ0ay85UXp0Om98LFpRTWRgfUt4SXJeQjQkZi5xWVt+NCNSMSVqZXFmY2Jpc3A4UHprKiZMaTRUVlk0bj5bOih4V0ljZlAzQER6YWE9WD85KW9AflkxOTspa1I/SnpGIl0mQnglMjptVDBiJTNJfDVJS1lxP1h2RGpQcGtzcS8qKHs2PCgxZGMrVTF9PilRWTtpViI1eSUq'@;
put 'Zyh3WEBmX31XZD04MUA0MzFodD4/UVJWc29DPlA+eVA+RT49XjBDSVlYI2t0KVcqcjJNMUo9UGteMyFEenx3N0NddEVpSVhNNGJCIlE+JERQV18hTzZnRGA+VjU3LHFfX2UoODFRX3BiV3krJFcyO08jNio7KDtuUU4wbHYuKmVkK2NFQVAkIXY/b2ZTajcmUGxlMU5OWXZgc2szPi9kQFA9Vnc7'@;
put 'VDRzNzFLNWBUMSZOdiJQPlEidXJnKyFwbFA6Q35WX3pbWnZicmZEI0A0cWc0bzZKb1d3UztLe0hnX1A7XjUibk1YS2VVallXUXpfdVZyeElfVyxjQ0RkKmN1M1I/ZF1uRGVvb10mWT5HNjAhfHJ0WDJmWCUzWCNPbkdlfTBPKDwkP21fTD91SWNyUjsxfWYpSTpQZTs3JU4yS1h8eSomUmhuKWlk'@;
put 'eSRRJEZ8WEYhWiU9bDRAV3sxYUhROTxYRC97dXMreEgkL1ZMMnU5SzRaWypNSkBwVCxOXW1jRGk3dn1JQns9b2NjUnR5Mj9SR0pMNCJ7PjUlZFhKI3hZOjJhSDUwaExle2xLLzp8WWBEXXwrPEUyaDhIT2ZkKChSXjAzdWV2e1Y6dD1oSyxoVkFFKUcyeyZaOWlReEw4UTgkMlIoJF1SJXI+JVMo'@;
put 'SW9gajtEYHlTaTluJH4mR3JRZSNwYSltUXs4Y09YTTJRK3N0MyRiNExEPkpoNWJ+YClfOmFzfSkwXkJgQUNjcypEdD01XyJOJVtJZGhfQk93YWs8dzBIeW94NGJBU0NfTiZDIzdffmQsa1FdSDxkQj0/PihhK1hvTFA6d25XW187T01MVkVGL1hoPWYheCVWUGluQm5bKU9wVDV4PiRUN1RxdTVb'@;
put 'bFspVCIoSlBTQmQ6X01bJmJMW2MwZ19uZHJkMjVMKiErSzVFaHpfNX0+RkJQOVpNOS86dGl+UXJDPGAiTnVnPkM7P1VWYGpeYntFVmxWS2BwLmtLQXVCK1ZocUc4OkRqMUUkbGF5UDdkM15icE06Xz9NI0hwRUtmbGBZVT4/e3ZGKj08WG40d0ZffiVedn0/byF7XVM6JiVAbDMlKiQlUmdIPWNz'@;
put 'dmgvezB9W1VrUTc6LGxnbV0vbFhLUDpWT2YvZHszQSg6M14hUFA8VnA2YnUrY2skYTwsUW9fNio0WD5USTE1d09CN3c+e1NfRXBLJlJefnYkcnFOW0E1fiMzTV12WjpnaF9WOXZbeEtEJUYxQXlDNDdeVEIxaXp2Tj9TdncrY0UxdCtlYClBPXFqKyokcEswc0w+aFBULipmWzlPWjtpQ29AQTdZ'@;
put 'aXczQThnZTJIWkFVK29IQlVFQiV2TWhqUG4zX1t1fGNxMSNCXVM6fEdnYlJeRVMwXU4hPzF1bS92P313QzRzTGI5KDU3YCRJNVByWkZsYGYrbjBSZ0FEMmU1ayx0TV1bU2clMH1Je3MqXlssO2UjYSs7ZWB5K2B9X0Y5dTpheFd9JTpsKUB5PDpRT3xUa0IyZ3E4RXQve3BoNkxWYHR2c0NOaFAw'@;
put 'cGgyMzUmNk01QzpvTHA5fkZpWmdjTWRrcTlgSHQvQyZxSlR8Y3BaaSRpI3FXUzVjfnJMWjZMY2pIWzxkTHYudlR8Z1tYXy89SzRUUV1xI1YrbWo5Nl5gTngzY082KHRmcyxHKW9SI1ppeDRZbDdeenU1Sk5rRyV3Z0IjJWZmRzQ8ZkVNM1FbTyptIl5ATldsYCYzPkdmd1AmVClCMn1oM2RpQFRA'@;
put 'KmdOY1tGYHNEL2c2VEQsM2M9STouVmlja2tvRSF4Z2BgfjFnWlsxNSgqXyw9ZTU/SkkrXVBzTTp5UCxmTmRvXTAzeiIyTDopaXIwaX5xNXo7N1tuKTclem08c04/ZXplXn5HbWt8NGI1cXlJQnJ3OU1afEZMJHhwUnVFT2BjKHJHVTV6fkE9S14kSjN2QT0obFlUKD4iJWRgYnp5ZWFMJHJvVHI9'@;
put 'Z0dBT2lMYGZ1enVwKzhoZU1ZaiFLQWpzamxhJVN6fVl+TlAoIWUwfG9wakxman1VSDhrfSsmeFE5eCprZnB8MSg5Z1FMcFh4Y25eViw/SVBMXm0qeTR4KH1KLkB3flpMVGhHezpLa0gscUJoeFNhQGY5LnFpK0piOiw0WEBnal1ORnl2VEhxX3phRzhgPms/SklzNy5zY0xYNzhqSkRKPH0yNCEy'@;
put 'YDIxbitAfiModT5mMTlUTXBJRzp9WCRkW3lyeW94KlZBZ0BTQ3UiTzJaLzkqW0Rhak1oLC9uL1tifikibDl8OHtVQHJhNmMjekJvfjhbPWdeMkYlbm9oeTdnQEdSeVtOSUEpN2ROfk51QnYwcUB8STo8IyU3MS9BKSheeGlTMm1HMSNzZVU7eTdQISx8bmw1KXhzTlJKSHVJMEJzSV5uRW4qTWxM'@;
put 'XURmelp2TEhVd2lIQ2FrKmJEcnguI3srV3U4aW9FNSVqZ0xreXg4RStrbVldQkRkSnE/VHBVIVt9PCV8TXs/R09NTDM9WzYuJU5MYjBZQ1AxTCNdd09nLmolcG8jQnMhOFdZVj1sK05JNDUkQ3ZmKzFDPnlOLCFxcVNtdFRudiMzTVp3a0c6fSYlb1BPbkZUVGozP0FrczlRLlEmJFVrNkJVZ0Fm'@;
put 'ISQ2RSRNVHBHWEhWbWZ4TksyOE9tdVo1Qz9iQk8xVEVGVjlsRDxNTTV0OWdzWSo/P0ZbSjVGI15wSChEZXc7TnchbCVqbjUkeCpQNHNnMmcwIzpFdVJyTFBLTDx4OUN4dnt+YWNpey92LlNuRVZ8Njtfa15XYW03LmVARlVvdVd4T0ZrQys9dCljOXN6al8zaExaQmwsOC4mLiQyTWI4STgpYWZ2'@;
put 'cUxNRDApTWgxeCt0cix6MWU/MWosWGhKLzUpJnxKakE9R1s5PylscEVCUS8sYlZYNVY/REEzZHQqbW90SWs3Oj1NJnsyVTModlRUZFRtPmBXc3IrNjZgKz83Tm9uPUMjfU8kXlFeKSpsQWk6U0NHU0l2ajhwU3p0JEF7Tzs2NFM0R3dfdU4uNC8uYl5FJGgmKTkzLF98fDU8cGtfLkxud19qbk1M'@;
put 'T2hYJTsqOUNCbiVXd3hOb0pSNHdoaXdqWyJ+T2N7djhLNjRMPG42VC9RQkl7RkVBTChPUStPdSxqWjM1eFdeUWZEcH5IS2NsJmUsQFJwLlcoX1V4UVtuQ3JLbSRhJTxKKi8jQXFuaFRAN3Y/QD8qQHx1LitZNDBndzQ2SiRoLy9qO3VOKDYlbE5gIipwOFtUKVk6ZVRveCouVGUoXjtdPjYlVlJV'@;
put 'XzhlYXc8OyNqMW89R2RAOENOJnxnaihBVCVMTXslOSY5R15TY0p1Qm9gVi5ZTkFhMmtxIyhCaSNxPHJ2WW80fU5scndYM3IhVjNnQ31SYmIxensuckAxPyhwbkd1SUJKWEB0bnVDL3hjKzgjSEt2Z0YpX2VOdmBXRlg7cjshOzImLnJOSjZRfWNsfEA8SG5NXVg7XTlgYnY0XXU2QWIrejgmNVJB'@;
put 'UFRaLEVsczI8clJ7JWk3fmYlPUMhZVokSipfLnIzQGdrMHRYL1paQi5QX1hJZ1dmcUFOSE1hdkVSPTQkVnJoZ1VIIWtRbFkrZE9kJFFOTih0RSNfIi89Z3ovZHYle2M2RkVEbHQ5MUJ4TShWfWEwKEspdjVvIkZ0LihGQ2teTSJ+L1pJeyEwVFB5OVpeLHFtfW42YHtQQyQ0bkltRTc9RHRweip0'@;
put 'R1N8V19DeUpxbUJmbnk9VSs8Yjh7UH1Tal9+SzNqLGVxS2R4YiVaXlI/JDZqSnEoWCJENGldLnFITShbJm9uYkdWZllbanZQdEhsKFtdJGBoV24uSWIvJHVyXzRsKWlgbSMuVFR2ODNJaUlJM3YiU1BEPmA0XlhwbVooPGJ8UShuZ21vXno0azU2Ly4hfWdlQE5FNXt2YkR3MyxYakwvI1hNRHxw'@;
put 'aWY+NlUjPTF1YjZJSVg7YDBJb0dwU29EJCNjfSU1XmxKX3ZKRFtTcHZqKispTEMjUTBZMFAhWytUOD8lMU9IUjhbXT5ASltXXn58TXRWI1JjQ054RWVwVGIkdUhoS20haXhFeV9fXipfMzlobHRlS2dSQmZOWkNxUTEpWFB1YTU0UWMhUFl6Q2oyIiZqRVR0dl4xZDw9THtHMntkRnNEWUteZE02'@;
put 'dVBGZEhFSyFDV3UqfTNORm9xTmY6TzYlVDtkKWl7blFLMXwsJnlCPzVjOiouK21GQjZbWFEueG0+XWpTfHtJZzYmJE9bVk1wZjAvLypxeHcqXTdaYmhTamhMKmpoMFZyVEpbTE8/MGpWdzMieWNaYXUjImhgKkZ0R3piQVMmS2lVVkEuQWNpelQvVnVkVlkiXnR7bjFQUjFue3JZdm1WYkVBbHVj'@;
put 'WmlhKCh8Kjg2IlBeTUhLalpDP3phamlRSm55TjF+LHg1PXA6XWslPlhHXVNIam0meGdVPC5TNE0xM3RJR0N6PWZHandlLD1RI30jezsxTCRLSjUyflhrZThKbUouX1kpTVRRcUFuUG41fnxoXmdPZ1VMYFc8Q2skZno3dXdYMzFoJDBpR2hIK20iSzBMKXMlJSxGPXlMTSlWZFFMLHA7SzZ0UU1m'@;
put 'TlRdcHM3NVpIZm4+UWBrTX5KQ21MLzd+VEl7RV4kNj5KMUNWVCY3NyFzWD9mL2VbZWAqeC9NITVgYkJePn5YLi5eQiVuKzc3OV1sdyFMWXlNTWVlS2RJRSkqTEBqaEFocT9NaFMkUVp2MV01OSQ/WWtfdll+ZTFSaTtzfVg5bis2W35WJF1pRm8oOExnfndVRX1+ekFAaiQ8SVBnbHw9Tk5SOWAw'@;
put 'T0NZMWQwa0EyYkBJfmJ+XnM4OExnSEpRfSslNFZhV357Tns4ci9oWDdwWFAjdU4oL2YxKl5mVjBiY0ZSTzttcipWaC5ecWdNSDRjQDg4dlgzanUoYHIxPlQ1R1J9aX5WazRgI0AoXjlJZj9yd1smRipoImdmPEhQT2xCVU5rNjZEM0YzbzlKRnJXdXFWfGJmPDdheys3JWcpTFU+OyJ4el1IJDt8'@;
put 'MENdKzpLaV41Q2tLQmReLHZ+dV9FeVV5cTQvLyNhYUNSX2NNOUlKdSlFPzVmWk80bkxmalVFYiksbGtiUCl2KEY/aXo1YVFsOVhUZXFVYFJKN1JtfjE5aXZHeCRpTGEpWWErJF1GczQzZTpfJXFib1tJamNIUT4zKnRdTUx0TFI9dSpxa2I5NTRWUm1zezdIQHc+YzRyKFlbVUZCMTYoNi4vLHhL'@;
put 'RVYrKi9rdkZVaiM8TGA6X3RVVW0iLD4qSTljZX0mM1Q9W0czaW5aaHdPe2hbTG03QnR5JnNlRF9WbnpLTUleL3lBWU9wRCpIRWl6bD5jUT1qOUNVRTNnXTA+e003JkkiQGZBRUZXN3l8a2FyenMxWmh0P2htPXN5fXBkTlUvflAkSj0jQ1NKY29BXyFyRmlqZ19EW2k/P1k+bl97fDR6OVN7dTdm'@;
put 'JiNiZHlnVTYpZS8/SmJFeU5Sc0o8eChnUFhadlEmZFZBaixTPi4uIUVqdHJOL3RVPUxVMy42fnE7MFFkQHN7eGFMJGBrN3FpNWg6NkxPSFdGI0p0YSttTmJlYVVsSEVPViphRG8vTTNiWSpMeXRMbU5XRnxkfi9iO28mPjZpfFt7amBWbTo9In5UXzo0aDlqYCRTZHFlLlZdRDtAXlVaPzVHeCte'@;
put 'TlBMeUl6M01VI1NtaWVSSSh3ezx1PC9dM1U5IkI7LiJsPW1qend0eC41XmYsdjIiSytOO3psZ0FOOzcvN11QZWQ9L3NkW3B6N2BdTSYyVTJyMysrdXxbRGl4czd9Y29LU3ZqSnd8fG58NG5HIzx0U35+M1ljJHl2fFA0YGdbMExabGh+JStZSCY6S3JzKCYrVkwqV0crd1YwT3dpP0BGcEBaXjQk'@;
put 'U3dmT2pPTmlHWDIyUl5DSmdOTmJ9LyVsPXtQQDVrM3piVEMxWm4rPjxgYUIqT1FYRXIyJmQhQSNScUlDRUVtTkhDJCFYMHRwdzMlYVdUIl8kPzE0bTpqakhNXkBTdWlvXTheWjluc0s5XzBuNyMkUThBTltXeFhlPjI4WCZVPih6bXQlOEFZRi8mOlNkfjRXfDBYMXIsJiFoazI9bCZCPHxrUGo8'@;
put 'I0lJZSpycnRfSUlacVN6Q31lWCNNW1Y8QnxrR25UVUl6SVY0KlB0USJESDN8R2Q6XkAzcH1xazN4NnNNSDAwUiZLWXJ5Jkw/fnQoWmJkfEE0O1F+Sn5IQWJhKzk3ejlWVThMWHxRSCsibHVfRChYK3EoVHErfjw9L0tpNEZ3bExLTEFlZ111Oy91Ul4/alhaI0RpTEIxSUkmTj1bZl5ZQkl3b0Nu'@;
put 'cXV2OD1eNmxRUClaZk1oP1IyK2N3NG93N0p0VDl0XUlzTmZbe3IsPXVqSyZOO11Ee1BILk9vYWJ+bzVoTiJtNlM5XmBmIVNGaiFxT1JadVMvfkdQQzVUVl8sMD9Saj5xV1pufmY+LH12T3x+KC5aPjoxZVN4TnhBKX10KD5fIWt1PjBtbVM3dXBQZXJFQEJ9c2dSay99bCNCSXt0QiVVZkxjTk1y'@;
put 'Xk9tcktYKlppSkJ6a3RJIUkhSTt1YTMiVVg8UEMqN2hiVEs9JXBEOnReUDJXel9tT3Erczw+bjlpfiV8SExySEw5OE1OYDF+RGU6cT0oSFB1VXA7M2cjQWltMUNqQCRxNmtFeDU2Vjt4fWpRP3hgaEMjezJVJkZ2TE9CRCRPeDVQWzYqdVU4eGh9LngpOVpKW2IhTmo1MXR4OzE1Ln0/SDFoUm9Z'@;
put 'eFJfcHxGSSY9YFV1ak13V0J9e1UoSHhFP0hMS0lyOFFFKEQvXU80dERkVWhTIWprcjxqMX11NyN6PkhEVWpBVzZgQypxSWlsLDtXcUtwLClmYmh4eWloMT9UcHhhdkgzeV5LS2JSM2g2QCtNRk47KFk3QDo+Pz5XRnQxaiRyaClfXWw1TUl8RlZwRFosdlhwZlRuK2dhb05UbVVnP3tPR3IhRHJj'@;
put 'NGt8JDhqVFZMUipfZFMkZH5GI29iJTFkQDBIJVo8fVFMa2N5fDF8MCNNeiZbKEpyZkVwSkdVZ1ozUiE3P29IM2p5JjV9dSwoM1NUS0JRbUd0WWp0cFBpOVA4JD0oZUdyczAiXjNYPV8yKWpYTmc/ZyxEWEBbLCoyQlh2My4yOnQiSG9yJTh6aVJrWGNxKTJXPkNJa0I5fjBfRz4mTDZiYmN4fCZ1'@;
put 'bis5RkJNXnhnIlEocEJjOGRTWl44aUN5fElUW15uUkA7c0J7I3dkWXVMK2MwXyg6IStYTDxRTE4iUUJ7OXliNzUpW01GYV9UQCQ5NSIlcyEmJWNCZ0R7dnkoJiI0MSZ0LHVVam5ETUhXW1ZrcHdbUUl5V1VrZWQlfD15fDlsZG5sZTZmVS5ZNmsxNkAuSFdMX1hgZW0hWSJ4ekJTT3oqcTQzfWN4'@;
put 'TkFvYVdFc3tHWWlHNVRgJCE6W0pGUCsrZ0JLYGBzcjxXcGJsOyx4OGpZJV9zMyFdfFY8OTkwNzQ2X2NEPzVscS9GOTlnSERKWj43WiF4SyMudHFDYHR+L31PbkV6VFszPSQkNGh4YispbDZKNHY4blZofkFvUmsieEkzUWM8flZ0UDR5S249ZFN1aGtNO0NHSkV6fmp6aTRadm1mIzxseHspfXBv'@;
put 'eEFJaj59IWJpOUNrJFRHX0AwMV8xfnwuVi59UV5xUTUpTTpZbVNnSVtyXyt0YEVWLjpraH0xPzJQb248IW14TX5GJk10eEQ9XWspVEN6W3o3a205UXtlSEMkZFglSkI8eWghK143OyRvT3R9c0JaUm9Ga0IsW2wwVVRPNyNQSj9SViIrRS94R1g7OlY0X1JFOE5hOE93Z15UOnFaPUtCIlJuWWlT'@;
put 'TWZIfUBhIXEpWHZRUkA1Ij9qS2FxIWNrQkJdZCFpZWZxSTl9JFEid0QkJFtsS3djPE9acmV8P15+OCpjOnlQczYvWDZueHovaXZ1RjxLVHpPdml+Ul9INnAiNkN9eGBMMlV3fWVXOG8jLHEsej1CdUwpa2FDMyFnV3w0QHReb19GR2JEJWpqKTp4MndmUSl7VHI9YlA0SEhhMXRFW3I0Nkhpaz56'@;
put 'KFV+YzExLDhhXlkyI31GRFchI1VkbGJ4MkhAUkp8M2VKW2kzQEglclQiJHRyZ0tGSytwZ0NpUnRgJktvVExQQUFkek1XW0o/MVk4ME0qSno2STBJVVVHbmxHRClJUmI+U0ZreTNMJSZ7YzBtaEhpfUUsN25JOVFlZVtie0dacmtCRllkcHxhX3hvQjAxK05hW0k7WUExcHI/MCxmL2xBQ2JTcjch'@;
put 'PUdSa1Erezt+cTByZlh3XW8qWn11JTh+UGJvXlpJZT0oUj9ZSnd7SEJkOiI5OTNSaD13KUlnVjtXK2twfEE/cjBmNXMxIzJWJj1qcEU6P242N1N9dDMlSzIhZyZTdEJwT1lASmJASDJwfFBgVW93enQiM1dSfTRHTnFbdWR+fXNdNXVzZGdpOnxaLG9IPSp9MStYVztdYGg0PDlPbCZ6WUVEaH5C'@;
put 'OHp8IjwoYmM9dkhHUFpgSEp4TWArZ2k8P29bTHFQdklCPDFuKyl7LCNQVVlHLmJ5I0szSz5zR051SHEpSW50ZnlpSlJaO2dFfiJWayREU3tSNyFZJktjd3ZKYisrYjx+eiokLHVzcjEoXkJ9VDhrUzNYUVBocU1DelF5dy5LSTxgeG1RQXFJTl9WTFtqeG9aOHxPTStITV5Zey48T1k+JGFnNlBv'@;
put 'NWJ6QHB8MFVvNkhWNnZ9M1hhVV9gN0JGJWVeayQpRCJhLld6LEV0V2xNSl4jS3pzdjAsN09EI0ZOTWdvPCV5eX1EUXFgJF9FWl1YKm0yL2xsK10rallhcEhkX0JdZVAxKXoqeywoTVFraktbSUo0MUQ6WCkpWW9UIlBLNEZkI1RqRiNqYj49djhNfkNsRmFmP3UzInBuMUpqWnFqfC9eOlZJOkJ4'@;
put 'PzUlKjUyUDt8ZDEscDguPU8zW2RLSmxZVXU9eGtyaUF1fm03QFpSR3hjVE9QN2JiXyMiUU9PLGMrOHQ5OF0+WEovZ3ZRLjB1aDN0QGFJb055SkhCd0wvfCguaHpheS5xbSRmVVhSKiojTGw6MEBvWGxCXUlDNioqNT4vVCpjKHoxJT10dXFZSGddbWwjMzlELyE5XzxsdGNsTGt+PTJtYX5NSGlY'@;
put 'VF5tSDJJWmMud2x5YThINkcrWXJ4dWpdJXxLMkxeTjs3e1s0JXxGS3hSPHg5KWdRaXteYV9YSlVgc1pbeUBsRzkodHJ7XVpqb1t5IihdeHx8Iy5+dDkkc0UlR2YwUG9SO1lyNCokT21HaT1YezlnXl0vPjF0bHIlWEIiQiJkJmZoZTtmI15GU21ybmZOOm5hWyN+IWMiQGIpPUJfYWAoeVt6cEN9'@;
put 'ZXZVNzxUfnF6T3hjeDFTWn5LfntfYGZYbyJnUjhvUnZTYzdPIS9jXWVVcks/MSpOLGg+bmEzNngwWmhFYj5yPWNHRFQuYE9aQilCK0c2RDlVSExDdnRgLFNDVSl3PiZQJXcvRi5aajBkT29RMmpGN1UzTkp8SU1maUpSb2VIaUdkOmFTfHg8Qio9STxhVTBqTklVPHZ7bEliYSs9LEolTVV3VXtA'@;
put 'LGRXPCp4fGIyPD1nYGQqYUhOfV1Gb0hKNnU4bjFnYk1fQTQ9MHsyb2B9YSMvJFE7SHQ8K3RLYEoqemNGUlpmRGpAO1tsfTBoSiZ8N2pjOzB8UURPZ0NaQEIvXSs7amJPMC5FVFdXMUc3QjZNWS96K0k8bSUxamR9eT43aUZjRVZOLDY0fVVtZzkqcCxSWV5JaUFRaWNoNVs3UDVLWDtZVXhBbVEu'@;
put 'T013cjtbOUdmJiVuRGVrWm1nQ0RyfkM5eUx2WCR5SHUyPXFjVyZeWH43QXghMGpob2hBIkddY2h6Xmw5cmJKZ1BULDpqdnVnOHFIVXw0ImUyP1YpbURJJnBCfWBwNERTfmh0SVV5W1d0czNqZ1JjITJyV1lKIXhXY20kY1F7Jit3UiRRTT1Tant4QU4mTz0+bXEuMWBCSj9iSF9XXysraUhMKUJB'@;
put 'ZTEoNk5sPnx4QWF2aWgjOFZWPmtOSj1SdWYlbDdxJX5fTiF9XjdEJSVzPyFZSm1zYkp+I3RocWhbfCtfeGRkcDppWm4wYntDLyZBVSMsTUM4dVtwaG8xczV3KGYyUGopMndbKXlPWkF1e29oZjprVSVBNX5HYTkoYkAqYTpEYG54YShobUAhVjxJfCNyK19OfTZdeFVeK2sjY2YhWSosZU8zOj9V'@;
put 'PkJbOFNnSi5pTlJmRSowNmlBfVVkJX1DTGxlNklWYkc2eVAvfUU5JE8oRSMqdnp1OV47UWcubEo4ekhgVWM8LilfRzZQTys7OjRVWHk3fnFwJkdiKDhhVDRCPiYlKkBHcnMhXlJTPmdWMygqMF9aQE5jSyR4LjJEU2I/LDRUOisuJjFQaX0vWlElVFcmRXEhNF9qX0hxfnNbVjNefkdPTnxpVU9u'@;
put 'ey5HJSFJWjkxI00xWDQ+RzN1QDFRTmcwO3gyUThmKHcxWG5ke0VDNE43Iy4iVmEiUHIsaHpVP0FxPWl2IW5sMU1uK1skSyJWbzFwZmUqLFdCeGJdXiZnTkpFKlR2TDVzO0lsSWNAS1UqKyNgeGEkflAqZShSakZlR21vP1ZKckArWkg3M25KLFVKIVA7PG1oUjYlLnpqTnw7OUNjSy8pOypldXVR'@;
put 'UWs0Q2p6VzFYeFt2fkhLcz5jZHpzUCozPVE8Rm1WPmhrfCN9N1JAWShwLDd2cFJOfV0yMVt3SU5UTHFXeDomaUd7U1g3PTV+UTVaRGRkdHRVTV13ZTZsIVQ/dz54fng5a2ZGXixCdVl7enQ1Mk8wI05ZOmZncTxjS1tuX2lMYS9wdWUiMjxucmUsWXc2UTp+LiN3JE5LeypvTS94Rmw4SyxgOS5r'@;
put 'cHoyU3t+SGxDI2gofldmdTlNekZXMVkheU9RK2FFWHg6Xy95aFF9fktUQFloIzhkWTVMNDd5clJ1Wj1gdjAmbzVuYWZiSWQxe1dwaDVkXkx6KCx1REE/fG5pcykqdzc7K1dOKXR5JWgjfldNJEoxXltvOkkwVFg9TUhYNmc7VCgjNDE6QXAzVWF9LG5SYlJYSVV7W2s9XVMlJCpoUld1QF4pR2I/'@;
put 'WT10MWkseXVkQUJhUzAjeltfRXE0SHZHUlZDPDZROyVRKDxNNig6UzJZZTR9Yjded356Kn1QXTZuJE0xcHBAOChOZTlDVjtyMmVGemllOG5KQCkmbEZFOTtFdSZwXnQrWEpVOFo3Uj89PXpMRXtfLmJnSVZvZmxLcSZ3SG0qQFt+VisvbV4uTXAqQEM1YWV7RSU6aH5gaEx0NWB1aXBkQmJWUSwv'@;
put 'R2t9PWBfK0s9ejFbdDp5UkNgI2UoRSpaUjdkbUF+VCpZbTYha18mYSYzfWV0TTQhMzU3XSt5Ty9MUlFfYFF6JG9lcz8oPHMvPmE8ezNILlFoJiwkL1Nlemw1O08sQFNeRkg8VUhlJChjXWpdJXViVCRtS145ezxxeC8/SSZJakAzSEBRP35YVUV3MldKejhjXUNpS2NMJUNzfj9BcCtpW21TNXgj'@;
put 'XURlRCk8YVcqPFVZdEdiWD1oYEkqLE9FUUdPRH5WOlsxQzlANTVRRnI1UmNVKWNWd3kuakRHfixjQXBfKkZNTHFfSC9VRjR6fG9rVi9JcElxMnY6PkNESUhzVS4yZFswMzpRRCtGZTZNeXlWIiZzSkBWZ1NxVlJ8YWJ6cj1zeD9MNjFPPD9obUAhSURxJEUwOnpwKShncDhQQmAxPSt3TGdXQG5y'@;
put 'WFNJKCh7U0dMcDwwPS9JaktNeDBBUiZldXNhQk4pNj1QOjo6aDRXWWp4aGtoJVZiJSVyLkhCTWBIN3tvP2lYYncsUEwzekxTSHZwNThiUHY0eF0/KShSSyVNPiUwJGdJS3FqSCYiTEQ3ZEBVSnFFXzJodlp8IkpvdmU7MSlSTDFTSVREcHt4LiZ1SWw5WUtZW2lTXihNPmw+O0JuS1lpWlR6TUpy'@;
put 'JERDWDlpfj4oPHlpW0xWQDt0O29PVDhSY3s+fi5kImJ2Uyw2PF1IRyl6JiYqaHM4XkpMa0FBQyMva2A8PG53Qm8kSlVIIXJXN2JoYVR5VW5qPXRXLiZMTHtHJSN0RC50fVpNMDZgdmJsbDZ8cGxeMmlRbm8sK0JofnduQTJ0RTVFPz9PbHwkZVRDekd2dGhHMUlNOkZoUmxyZUU6Mz4jX3xmdGNy'@;
put 'L3wrQlBCcC9fIXJsSTx7IlhseEdILkNeeyQ/PjVKVUMjJE5vQ3VsTDZ9czx3Jmd1V2FjO3xxM08pflgpIUR9UUIzaHRVOls6VkYlRkY+NUl6V0daUGttY2piNHB8bXw6K014ITZPVyYkOn1rV3xCWmdCVT4wSjtXe3tlME95Ik1wSElpT2hlOCkzdkpeJkAqamd+I0RER3txdGRvPUZZQEtid1E1'@;
put 'Pk1YMjtgaVklV1ZBc3ZSJjRFdztET1V1aWozcS4mfjpedDYsKCMwRj9NW18hWk8vOWgkXlVzZ0RIRmt0SmMyS0VJQEk0d18jQis1Vj9GUzl2dHJ2Wi8yaH00Z2lXNi9qSVRrQVRRb2Bsb2dFVj46QHt8aXJ4Tnlqd0ZLKjNTNnpXL300YnFYfSIiVTcjKnYuTzciRDpFKmplQ0t8UVNMZEgsR0d6'@;
put 'RF9DU2AqMSR8eHRyeiEmNDJWUHVeZ3UwUkV5bykhVXRvYCp3Rm09VVYzPlhoNGM1S0teIzkkNEE5ZiFhVE02TTEvaCZ1QmtOeDVfaj99PD9GdywhdVtLekw/TmgkdkJMLGI3K1t6RFN5ZEU6ZCgkIWdvSm9BNSN9UDB2fHRjbWcoKW1OP3RDPktHe19CI0p9RVs4JmJ3c2ZEeClFe0lNTCRsLDQv'@;
put 'MVhXfmg4RjVwTDFfbCJjU1hGVmdkSFlWJWg9U1QrNlI0aypmdURrUV0zbUN7d0s8SEZNclRnX203cHBCTkRJfTBxbWdRL2B1QDp0U2h2QVNWUlA1SmgldWA7KHc/NWdJemEsKVlgRWNVRDBTVXMpclUyKFJVSXxOMHhfakNNPDwuaUJeMHs/Mjo0RlgkQElxIVZCV2p7fkd3eC9vTmh4UCFPaG9B'@;
put 'Z0VOfD0kOFlrST8kbnQ0QHkpd34mNX0oJWUqUH5QYX5IXXZlL1E8LDA/SF8xRXU/cFlDXWpaKW9zc3xhbDlKKGMzeSluVDV6NE4uPUckZkhoLlpCcTB2PGcqSCk1YHpkMF8/N1J4VVJAKyIrLnRSZDhJdTE2blYoMWtkJVQkcnZWYkZkMiMyNzRdIyNoMkI4T0IsO3osWTdFdExCYUFUQ2JiY3U5'@;
put 'fHFAPGBAY21NS0lBLjhkNH4/ei50YzolcE9rSS5geW4rMDB9NUFefjlrKmdEMFI1V0ZhVFBqdjZYSEtUayxUdVlXJllSKjp3bjtbPDEyTHUmWEA8Qyx5Tzp9dCt4KiR3W2JXU05LWT90Xj1ga2kySVVNdSs7aEF1Mip3YG0xQWtYUSJFMHR1dn1hLmVveGZeb19HVDN9Q0Q0SEtpJnR7RHpmeG1T'@;
put 'LF16enQzKnN4a1FEZ3cqcEssOi88fXxHKk5Yell+YUs1Wz1oQ3J0LzU0QmghbmV4Sz9RcDImIyIqcUNXUG1lWWUlRktgInVIMDhGdnNUWGw/KG0mfFJJSSlYX1FiZFt5RHdDOEBmYDA9OS5QM2EyP1lEU0MlJmUlS3ZKVV5RKlpwYV5WZ2g9TyFLYzY4cGI1fjN9KntWMjRRRWRwRkI/Z1MsZmJ+'@;
put 'KUZuPFlgMmtAfkIxbkFiMzVTOmw4W2EmX0VtX0dqcmQ5JDFfU2p1eCEsL2NdTClKLmA1P0FENiVndyZ+Lzo0aSwodXtaM3leRVBrO3JgZ0dOOGRBLDEyQkl7ZTtaYFFmbyUsd1UjRzwpXyVDSWQ/cyxZQCFWMlU4RVBrcWoqcTl0ZDljcHw4OUs2a1F4I3VqUClVUmU+cHkmX21JN20xRkd8aVtL'@;
put 'W2xWK3FNI081UGB4VDAuPyFnak1bTUApP0k2WG5LUnpsfHklZnVuampwZT4zXm81Kn0/P21QNVJqV0NVUHx+S0kuTFFocWpRVD4lZlBsdUw4SXlUOTZ2VUw7JTlSWW5NR3lzUygkMCI7QDg4KWRwVmxwVFRHNHsiWit4VlQyRiRUMF80R0kwSXNsO0QuYUlNXyZBUSRwe3tQMHJuLGRuWD88by9t'@;
put 'biFAW3JJeClybDBCNH5bbGl7LHhyVC4qSykjNCFXRF42Z1dkfF5dVl55ZytOWlh3JSZXXTJ5dUIsYUtVKGc0bEtKNSxxRitVJFt6UTNVJEEhRSIwN2tvQzEyWyh5QlBeZUNTRTV0UVA7QjJFUDAuKT1NOVtOdkImSE1QKFdLdihjSyxyOS9tR1lZOHtRRm44PnBbTzFyRHN9aj5QZ1MjXzZQM3J5'@;
put 'NSpbUjdxZ2xSfmhDRilGLzBja05Hayg1OT1Efn5mbFRqPEZWWDJ7Mz1jaXVIfjg4a0hhT3oxLllbWDVDJUs8fEg8REBbbHB5R0R7JF9lPGJUTlkufH12MmVYKyRVJWw3Sk06U2hXSyRLY1tZSUwrNTl0aHc4MllFb3RebmA2UWN5UjpbQHZtcV5iNWNsfm80QS85WDVoIXRDLDd4Wis+Q3BscDEv'@;
put 'KnI9T3FsZ0s+ejVOQnRaRG1dU2FHS0VdMDUsW1RwOG80VktnQHhdU1ZOPGEocEJkeHYrUDtiIXBlNkloZjJNWlowd0xTNVhoTE5zJlNoaTJKK110WHpKNmRoUXUrVStnOSNdbFZwajcwTVJbYypCJXM6RSNqKiZwIXZDSkshWlEjfVlleS9eaS53TE52VXpoZ2wqMzV8KzRPYkVlVjNzZW9mUCM3'@;
put 'LjNpPChzalBNMWREYFZfTzcqcjJ5UU0lJCFQR05kdC5eOl54KDMsZDJWTVIrVkxZIUJzWyZyMlIrJXd1bDgySishP2YyUitPKGUjUUdWNklaImRobHBecGREYG0wcU0jbG4xLk9TVCx8KCU+XWR4W2ppWSs9cz5eNjdkbnBnXyhkRm1MVmJjaXQ1dFFGbU0jbHdLVFR+Qik4eVZ9RSFhMjZDJWs/'@;
put 'Kjw6OD9bTUtyL3FVbW04Mi5uQlQ9Rz00Ok8qSF50cWcoTk41LEd4Y3dxVTdtbClTZi5ANVA3I19eUGdERCU0XyZTfSElI35kVTZIbVNoNmRnSnZKO2RMIWd6ejx5Nj4ucShsfklGbi4hbH44bzleIWdTMmR8JlAzR1dbMTJBZ0R5Y3RjOjJuL09kaF50UmBKTU44OV1sczJ7dlJzTk8kXXg3SUVC'@;
put 'UTtOdGhMfUtoKGVETklHeiFUSGoxUTpRY0h+UVd3Vkc2YzUmb1QzP1REdWF7Sn4lZyJnPTN7ZjhbcjVyJXU6NDEzIWVfTmhHKlRLVzZpdlErdFlLbGgyM0JXd3YlQjNSVnMyUVs7MzdDN0c/VGRofnI3RkQ8UzMzRDRXNG0uOiZLc0NvcGUyKG5haTRobihQfS9KX2x+PlMwdSEsVUMobktQT0Fq'@;
put 'IkhfamJVWCEpZEM7VVR0ZXFRPiE6O2FFcVtjPkZpT1hAbC9PQ3JlKVZGTl16I2Q9WTp6LiNQSnh9SzosVUVbckdwI0t+S0lbK0VXWEtMWWhCbFBmY0VmIXc1XldfIUE7cTExN1BpMlpoNVYrYHBdenx5dFRHXiZhakJSPypZTiIpUGdCTCVKUylDVmBPfk59OnM/YkhAYms/fmxLdF1scmdrKDlk'@;
put 'RUFkVWx8JmJSQ2FCV0RTVE12alNMOjNje3tgRDIwS1NUNmtKSUBZWC9DM1F0RD1MSGIqblNLLGwpfWg3WGk0OFNNSzsyS0kkYyNXejtSdkddUTAvdSUvaDdyUnh4RFpHYjhNZUMxb0trPUI/aXFvPnhqciMhTVViMTxidlVVIV5zaWAvKkRreURlSCJQX1VdOzdSXnZ7OVZgUEBDcV80KnJqczdW'@;
put 'dCs+aDd7Q20lciYkKEAxL3dxPGg2Tm5mSyE9Xy5lYFlbK006LGFjV1UwV2E5LiZwK1hrOzRPZl1gRmVIeXZQKilackI1UzRMYD95UTpnO0JUSTslWzR8YFskfHlodlo3KEQ5cjxZdkZ8bHVBMzk8SUk+R2EiaDYheW5ie3tgPmxNVSNnUWZmcW1dfVV5L3JhblNpXlpiIkZmN3M9dTJpJH0yMG4i'@;
put 'YjtVYDdjRkBCZy9ZLmMzfUJAZExWbkVUWGw6akhgN1ZhIXUjWWx5ITJvNSUxOWdfWVsmRiZJUX4udH1AVSwpczp5XTEzNCtmSllUNGFYK0t4Tlsld1klX0lQcSRfb11gQDtJfD8zUEcoN19nVll8IV0zUEVjIjZrJlgmbEtZZVBTJj9GJTUuayk6bmtwUkhZXWwkc1VaLFAuUHYvVTQlN3pfJm0k'@;
put 'JSRZeHRZeWM9cCNqWWAqSmFWQitnP25eQUBZZnZVeERmbTw0b150NWA/Pnp8WV4pWi97PzloJiZOZHpAQ19tPS58XjNVSXlRZEZUYT9ReDJNWzRPfUhKd0w6SkBwaWRkOGQoLHh6Int1VlFQe2RtMDgyLmRIQDs3N2FoeU1bViUmW0gwRzUoVUw1Nz1QMU9YKzVRcCluMjBZd2RkRVhyajkyYWNo'@;
put 'XnBkQXRuY20wP2RTaDFhJDZDVE9YSTV2TChSMWZ6d3M/YTY6VSRreF1eIUJdNyw5cFlmWGNseF5lRTssYUNSIixNUjlnVzouaipmaVF6R0goWz1EdFY0aXYkM3U6YGkxQXJ6QmJWbUV5LkJqYVJvJXAhIXpEcy5yNzghTlU9eFlDckBGSzRuezZjO0l3NXorYXRza0pyKW1NNldMSWdTMUJmP3df'@;
put 'MkhRXW9YX0lvR0E2LjFXai9jNj5vdmBAJmwkWzMkclNlX3w/cmBjYSM6c3M2WFNSWUpffGpPWyxdQD9uPVBLMjpWVilHTVM4cmtafF5EMzh9TDY+VkNSZnMxN3Y2UjdgUGVDKmF7di5+Onk2WkZ7JiklU2UvKVJ4ajZhNl5AengrNCwudSlbIXB3N002cjhDcz4xJnwhOGxfSCo3NXtDbXckanJl'@;
put 'JERqcno5cUVhbiphcUp1ezdddXs3OjhYYiIwUmRTRmssUmJtbFF1S3cyMT4zIVJiW0d5bCw/TCxzP1dMUikwKCxVMjY3ai5OOFhPZDlGOnRNb0B0fGBqN2VAamM4O1A1aExSUjIzLjJreGAld0U/TlNfMzQ3IT53Uk99RzNtSj88OzY4fmozYSpGU25IMm53XyZnLisuJHlCZ2llZCl8UDVfaV9g'@;
put 'PylBbWUwJTROUGdgampZOnU8biFtISNeYnJ+O3lqR2FeNT5rSmhIelUxdTJWKnQ/X3c9dm18XW56ZihGY1J+R3syfHpgVGh4PnQ8MyNeN3YjVklxWU91ekkrazxhPDYsc1l1YjtDZmJrR29PT3dCWHRUSDxHcU0+PltQfWVBcz4+fF9EVSowcEM8aStoWjQ9ZyMyLD4/OSZGbVVoSGdQe0B2MUVx'@;
put 'fCprLCkqUUpEPkg/S20pP186KStRcHFRP18lRm4vYW13PFhgVkcmYjFzen5QVlo3XyxZSUFoV0RyX0hrYVY/fHF3N2swPE9TQUVdVEczbDg4JHkjOTRkUX14Qn5IbERuOEI3e0B0UyMzWjApfT07bVNPcT8pbm8kfGFfR2BvaEF+RDtJZ0wmPlksInMyc0pDTFE8TERAckBGWXR6OU9qTyNyRCop'@;
put 'dDEvRnsyak16aThgZWtPPGFtKHVMYDN5d3V0c0h1Nj97LkJyOmNAYm13czd3SSlMSSY7VnFGPE4yM2ZrZkNyaGJzbys3bW0kR0EvP101MXdPeChdOUt0ayp7bTw/XylVPGVfNTU3V2gzfEwrUzZ3KSslZUlnclUyaDc7Wyw1NWpReCZNYkA5Jms8YWRXeXFKREcrRDowNU0iPCNjZ20iaDYhSSpS'@;
put 'P0taKU9IOW81Zk82ZGcyKG5CO3guZTtKR3E4PU87el5HPCMmcT8rekNVPXgkN1pZLjRqJV8xaUlfKGtYYip3OFUvJn5RP1cvLFU2Nj1jMk8lWWI9PGtoJGtmUkJ5LGh7QG9ZKnx7Jkp3JjFjMEIqaklbcVBxbGM4fEdfWCVOPGRSc1hdaSxdSFJZVihxdUxbMW9IODFleSx1JClYSHZ8T2EjIU9I'@;
put 'NDh4TnhEMGsmVzNYanZoNGJYeHhoPyZUWkkpdSxXYWV1NncrQD4uZ2BKOSVRZEheTVIrU345VEQjXzZJek12O2FkVyV8YXsuVD8qIVA9bEtGdzc7SmVzZ0pnKi5TZStqV3k7LG1JYzQjRXs7ai5ueysjJUdVc35nOG1tL0lQP3tLSntRJXxxazE4KiJDZW50ZFEyV1B9ZEkhZW9OTn5LODh1ZiNr'@;
put 'QlZpS3g/Kigjai9BL3lzXnIjI1AqSEohcG50c15oKltXRl1ST3hvblJKelFZMzdeQFpEQlh5Myp6ZDJmT2xARkkzcig7QGRFfnZPMEc1b0YqRz4sVT9sYV90P2lQXXtLXzNaWDUoOmJOTEdoS2xvNzJrbCl6dkluIWw8OFpuS10qZTNHTjo0cFkobHBKLGlIZ2M2YSxmREE5Lj5icG58Yk5+ISxg'@;
put 'W3Jbd08jYDt+KUR1T2VrQXEoWUpHbCNOKkMpdXMhUVBXYlQ4IWYkVExuIj9SXmZOcGIpUHIhPllQVjhYSl4yMGZaaXQsW25fekhZQGk4ITg5Z2RbOTRvPCwkfG8vI3BlJngpc21PMTc/MnNzXXhJXiwqQWlXfThJY3pqI1M6WFpqV1UwRCYyeUleQmo6XUw5PjBzSSJyI2Y1d01Ibzw+N2VqZExH'@;
put 'SjdCWjRqWmhGWCFZNEEmWSlWPVdgUitGKVpwLkR6bkhXVzgzdj5iQi5RcWZ0ZnVWMSp3d1NSV1tOb0Vlc2ZHQUMlVyl4Nz5UXlczViUoRV4sTVtFbDZaXnF6cUh+SEMre3F7ZFMlXitodnAhU1VAfnVEJTh5PFNLMz4raHlXaG4yYGkjM3F0Z10uTllWQltOYGVYOF19SVtsYnhVfS9PYF8jaTlJ'@;
put 'XTEzOCp3ZXtEUERCXUBaYl1PSlFaITtFL3tlX3UxLGlufXloWGJmRzZ3Ik5zPlRJK1o1T2E9TVNVNnBAfnRjfEFZL15qbzx0TzlTc3xeME5VIW54OXBBTkIuQkBWbnwwV3hVWzh6I05tUEp3Iy46OE1PJGgxX2NrdGVyb2NnM0NXbipjR04+QFBrLDF9bU8zQi5CQCtSK3I4P2l5PzNfcmBVYkJF'@;
put 'RGNAZ0RjP1JPKUdmNissKDtmOXNDd1hCJTZpd2k2ZEBYNVZ1WHxGWGFYeyZnU3Z6K1B4dDVsTmlZX1Y9WnVdQTVkWSlxMjsqaCxWWTwydjY/YUFtJGJwL1gpQC5HMXciLGgyaSowLG1lSilpZXQ+PnpOX2tYIlRtSCVJNDVKdT98fSZ3ZVZtIm89ay9qZiRuNVhgViQ7PXdAaXlSR3ErI20sYXFv'@;
put 'MSZZLyRobyRXOyRvJCVpN0xtOjhLej9fQitje1QxOXdeZTAqaXJxW0wrXmNEaVluPyxWZVpwbzVwWmU6XytnL3BoJlg5ajcxU1VDWzNhdyZfM141R3EwczpKUGw2enJndThHSFJlYCxzZyJ4YFN4LEIydC4uJGhDQlFnLj9wQTxWbT5rREk2TCxIfTF6YXNdPlJMWn58ZTEyTXlsPGVCODRheDEo'@;
put 'VX1lW2chZ05lMTVLaWtvLllmM0V4U3ozQ1J1I1glKUwlYnphek5nei49aGZFK0hIZXYmOXtFezQsOmdeeTQpTCU0TW9HckBxSSwsNTwsVDhXbnZNfl82L3dGViQmdkc4MWtRRGhOKTQ8Un5tTEF6Wk41eFJGfkFXdGVlTlh1cShyRCosQjM0c0pbXldVLlFdOGQ2b2dRcWFmPnI5UklHVktWLEUu'@;
put 'KGVWNTh9cEwje3hofSEiZXh1N2gsQDldaiU+QF41ajFERDV2OUdWNnRILyQyM15ZTlM9ZzBde3BVRjFtPHBYIUg6fD4zRmFXM0xOUyJSXjEqcSYlPyVsMlprdFY5ZXRvPzFISUdfRCFXaHZIL3JyNkJNaUlER0FeO1FHTTU7UHcyWUdaelZUeE15QXc4JWlwSmVPUEw7ZXlxdlE4XyVPeW1vQ01d'@;
put 'bWlROHo4OzksZlptclUpa20iRGhTanh2UmhYYDN+fHQuazVSYmw2eCk/P2s2cip7X0Q/U1Q6dyI1RUk/aVIvRTFyRy97P2BPZVtaJWw6Pyp+bEhCV3ZCTz1yaV1Ub3l5QT0+OCt7KDk9V1dWRj0sTmtiN05rX3dFK2NUdGRCM0kvOm4+a1EyZW5+Tk4zaWJBMCRkeG9PYmIva2NpLmN2QzV8YmMq'@;
put 'JGRnNVhiLEssdSN3dUcqdUB0b14mVXV3a29JO3B2SX41LkJLWUFZWyI3cjV0ZnlXRGp0XmMkRzxIOThHezs+S0FIcVRvLkp0Rytmbko9aV52NXdITTt1PE5iN2B9emh6YiQ2YDNHQVVWbStuQWFBbUdFak0hIzUsaiZgJV50ZHQ+cD5CcjxQZD4rNW9vM2EyaV5gL358JmNJOSVPWWI7WWclb2wv'@;
put 'Ukk4a3l9JDo8UTs0Y08qTmI0JVliR2k3Wnc1Y3VXWm4zWkp4djFNOzJCVGBAZj9oQlIyaFZCUF5hNjNtZ01mLjR9OTxpRGo7MmFJPVRFc19LTypEfkdDQjZ5fkBFRCtFMnUkM2VjNGNjWDg6ZkFAPFVueUEwekp8VjBdNEhsbCxpZzFKMDY2R240JTtDZjhUYUtpVCR6THJDRG01JHJDbCRjLjBH'@;
put 'IjM/NDtaR1Qhbj1zbm1sZXJwMF5ie3hUUU06Lyl8IUlYOnl3Vnp4IWY2JDZudm57L0QsWFNrallqXUg/cFQoPHRvdWVVLEhGIVFJbUMzS2Y+LDVgLmJBVGo2OHVgZE4uSEBXVUlAVmA6OzJiYVU+c3VnInJUR2xZXy9TaSN4Vzh8Sj9ZcktqK0U3XnxKLnxnaFVvJGZ1aERoaV5YTH1mKiQ6dE9r'@;
put 'Y0wlIURdRX5LYnA9bFY9NHgrKW5UamltLER2SD1vL302R3NoQSlyY0ZjMkBbYkpDL19GKUllOU8qbF5CPDN8JlA4dVhzUGQyc1olOEsmSSgudVt9dkEva2w4YFZLYFlMK1FKREFxaUpJRWo0NSRHcHFeJHVjWCE1YDE4JGRRQ1s6d0osSHV3T2h0aX1iW0p+ZSI2bEomR3pNVnlaJj0kWyhYKUJU'@;
put 'KURecUJLRzJPZVZnRlJjcDIhQjgzdVhiczl5fjVGLjN+YDlMdHF5MkhZRkA7V3xiL3RuXUM5PVBGdy5mOWE3IUAjcn1bOClqSzxJUypIVCF2Q3I1OFE8dCZSeXhLPyJHd1JNK1tsSkEjI0NQRndONW14dF4pLmA9O25eVEI7S0sqY3BQLC9ddDA2SWZ+Ti88RTVJOHJXO3x9d21SO19Qbyk4JlQo'@;
put 'XzIrM09gMml8eFJ+Tmp4bnc/TG89QUF8VjFpMTEzbD8/KUtXPUpPfmY0K3hmViZpYyU1PjNIU2hjYmFUd2dGXnJObGExfSpjSzI0Lng9KUdUcEhYbCZuR1FTaFIzXSY0QVBsOHBQakYhZXg5YzhtfVZNQEdUUCE7YWJVV1NBP3osa3YlbWV4Ol00Z0kicjZybGxvIXhHb0c4eSgpK0UuUncmcikp'@;
put 'KEMoTTQ0WkxsU3NlIk0sVFhZNit6eXx5MGRxRzIhd3YiYjQsKV87NldWNWBYe04uJFssTiRhc2I2NjhUL1ZAdnN6Nzx8OzN8VyFTYF5hRG19bS5vckkwPXZ3MEhuS1Ajc2Y/bzAuR1ZXKVZxPVtnWT4oRW9nQi9lUHksVVApaktuT1FHXz5IRD5vdF9lW1IxdTIpZzBPek1FTjY2O0A0OTwwdTI+'@;
put 'aXpudl17TjA9Knx7N2IuTlshcWhGSXBqP2s4dTBZYT5ANXdJcHsmfCYsUiUqY1FgdW5ncSM1LGReZy85Mi5bZiMvZ2xRP3dNSSRWdCY2JG5kRDlKKUZgbVtXW0tibVomeG5nanFNKVZ0KmExRWdKOzsmLn14MlcyVjpyemxyRUI2SmteaWpPLGtSSlkqRz0jbm5vVTw1eEpHMD4xdmxFZjA1a3th'@;
put 'KlRhUUgwKyo9NUw8PmU6KSl2OXFUaig8fGtLfGFVNmAxSD19OlZyaDcjMDgvX0whaH0md3VLTyNKd0sufnRuL2p2P15xVkcie1Y1YCZgPzJWPjg4LmNwb0k3Qk1lSjdbQEhFNkxranJKUHc3dkp3eE9MX3VgT0RnJEk6SXBxPkl0ZDImfSJ2KH1SNzVRaEc7MDNkR3lwZWtvdjY/c3B2d2NweltT'@;
put 'TVk1PlRWISFgSUhDKml8VHBKWTdISUxhKCpqTCRbeHY9VEZLWUVncSVzQU9laS8+LGx9P2pPW1BuMXc3LER9KlZwJnNbYkl1aDhJd21raG5CIjNFOEpoUTw/ZD99JDJYV0NFYzUwUUE8NittSFhZWS5OMCh5fjk1PGcmb0VZKk51aCl8O3NZbUhTeHcyMnxEbU8kPWlDd1JSWCM6UmAzPyg0RHZt'@;
put 'WHUsZC5fKS5UZV1bMSxWODkyczFeY1A9aV5CODNvW1g3czx3Yzh0JmJGcis1W1oqc3A2MUgrUkxybVNKJGtuUGkuImRROzhVK2NZTV5yPTdiamsqe3lENzdGdGREOGIqdyYyO010WGJATiJaMHdZSnZlIlZwSFRpJDYuWn16JkVrSSNWWCl0QkI5NkBvNUFQITlmOUFlRzg4USx0N3UuTDt8Yjtd'@;
put 'V3kydig0M151NWlrdHJuOy9IRjZyMDZhbDpWUDZmbDBRRlBLR3xWUWc2K1UrTnc6fEtxfTR9PSxUeXw/cipjIlYldDY/bXIvQkJUdmE7Vj1LREdJOEw5ck5HITMydXliL2tIZlpCdEtMZHolMnAvVnFLeSEocVYlUkQiSj9fRTMrOz87YTVwbFYsWGhsWmRyU2xLZjA/bkd5cDovRS5POFkiUG1U'@;
put 'VVIxbWo/fm1QOWY9NSx8SkZMXStIeW1ueSYqOChQQS47Sjo0bnUvPHd1Wkt2TT97VWhwNiM5aCYkZCtjUVUudT9ZQ0g5bUw/fj58Zz1qallDPV1KSkpPMzZuZHpPWypWKSxUYG5OSkxlP2o3MWFkZSZ4YzZ4KVlIIV4/X19kS2lUJEVbV0tWUSFwPW1IfFJ6TXhgbD0ldE9qYGtpYzFHSnZaVSku'@;
put 'PVk4cGNdVzo+LDVWXmJgTlF9RTsiN3JMOyFkbSQvSS9MaVAqJEglW08hdUM4bSJ5KCMpY1omVT9aPGM6NDR4Kyk3SENWUXhbfSN9JG9yR2U6TnI2RntdeH4uSWNeOFJRTTI2ZjpvJDp0N350dihUYXBrRjM5MV1SZlRSSV5+OUhmfix3KF56XSVbdDdxNywlYmEzO0Ngb1RUUm8kMk5MMl8uM3hG'@;
put 'VW9eQEwxckdrYSFdXk4scE0sVjp5bSp7Z0xtUD9lODcrTH1Yczl8VUghKz8+QE1lT0hGNihpaWpfcWlPSSJYTF52N3BdM0hMNGpOci44aXo4O1RvK18kOWhETX18OGhELERbKDk5PVA9a2VMXShkXlBTQkwrUz8+LiNkPWhSZX55cnpOXSwhIk1udlJ0dl5KX1hle18zMngiYkohUDl9S1siYjld'@;
put 'WkdzJEJXZ05lPHw+IllRflF7MjA4JFNPJltMXk13bGdlKHVvdzFuLEl8YDo7bnM6KWdFSXYlfmNwRCJjZ0F6LzIrfVdLNTQmMTVWQ2FxYE58NkBOY3UxMWguQFM8JVpTKGdETDhEU203c30iLzpGLn53RHhNYlhrI3BvQj5wLGtxcUlpQy9OQUVidkZePkwqN2tlZWpVOVshbmZLOnojTl5dPTRm'@;
put 'SCtuR34kMlkyaGN0PnFOQnR2Py5oTDU/cD4oV1VZbyZ0dG93KGkkK0A+dzZ2eUp6NT18bDYvUHlyZWU7WSVTSkYkNEA/VUJOKG5gNk5bMzNSITBYKHxHQ1laYno1PWJKRjphaCVqRShiPygsPU9majVwVWhFQClWRV08aFN9bUlpQmMhfXRecjAwPmc2elEkPkBpdVBWOFc4IWVjJVtUMTtrPiUr'@;
put 'L1NkV2p0OFQ9WGFqLkVITEY4WH10OypFNio0anREPXswfDldaUdLfVhANzVjUkgoQiZqPyFmUnFdXzo7Ki5rPzc2eEFsZXgzWyxxKXkiMWpDbEsjd2hIUG13RThPX0Y7JX1Oe2IvdGAoJl9iJjxlYjB3PEhzNnJUTzIqJXB2XWkmOyNxYG04KzF5fmo/ViVOQU91O3A7ZSRkM0xNTUchZHJkc1ho'@;
put 'ekx6XmNqVkB7WW95SmAjejI7QlhXdHxiOll1MjlMPiRXOHBEQjt5SEU8KERtSD9CT2czdyQvdEA5aTdVQTtlaHR4U3xKNHlMPnJ0dlpJQzxBTWc8fUlbUlh2RT9HKTUpd18lS00hWWpYYk9xZWpaJVgqXSxLZjVOTUUiMSVbL1ZgSltWVmlXLF4zQH0iTG9LQ0hdOyJSe2hybGRlTGVIZmBZL157'@;
put 'KTBMNjI9cGgsaj8kS1JmQV5FfF5CVStlM28pRzVxWz9QZ3NuKSxnK3I0RiZqP3ZJLzExdHN0WSQ2WGJlcG1RfktCIz9UQ0RoZiVEQl1TUHU6MCtlSFBsLFZwQG1zQlR7VlR6S0pUR0g4TStaNTpWdXA7T2NZfGNuT1ZmPGVWRWw6Mjg0RXhJNk5tI04maGpKJkZuUVZpdE0pKkw/VGR7YWg4NX4u'@;
put 'dT5ucTkiVE9GKDlxfXQsJkZYJCEiPkczPUJVPWM1QE0uTVhwKG58WHExKz9EST1LZChoaXMidk91Mih8TkV6XXFOcmsvYX5qXkxlVkQpZypzekR1OTBxaXZwSnFhX2k7LyxLK1JmQF1KYClrOG8xbGlZaXpuNlVJOVBweUppSmw5fVUoZ0R7PW04ZlJKaTh6ZzRCMWYkVTtwYHljJWw4cDlfTDZZ'@;
put 'IV19JncxbGA7QD5fcV1CJDR0ZW1HMjwlYyUuaiYiIVM0LkhEUH4yP2gsVm9DSTNSNUY1UDgpRFh8SCUob2dHS2FoSVVGVDZNdTwpfWZiWUxOa1tpMEJoNCxRaXA5NGZxcHM0aGY8Um0yTmA0SkxiIUhGfDtOcy5SWE1JcDF+fkpGRyFTMXFHXVQ+QHZCdzF9SUJLQHQ+dGFYbnAlcEE5KjZkViNk'@;
put 'cUcrPmMlQEU2L2U5VFFmJG5jMi94UV95ciFoK1pCQ3VRXl5YM2BZOXRfTngoNXZuYFhpeV5gM0dgVyVLRGNVN3R4KmNtUiZQaS5yWSgrZXUlI1lbemFsPFZfV2dbWmVraUszd3UoKkxncXk2eU1yT2YuS34vVUNAQ2B4ej05djxQMm1IMzk3SkxOZ19iY1QhJDt5WG51eSVmOTxDUV07OTE0MXlz'@;
put 'ezhXWztxRHVoNUN8fFVTLmRWd2AwT0V+aWomYzhvb1hefX0/amwkanprSzdjQndvb2x5bG9gfk0zakJoVzBuS3FBVVJSV2FgVENxPiFEbHZYW012a0F8bXtVNjhKLGMiVkg4TWZPdz04T3VycX44MHJyTCs9REcudnxEe2JWOGpIVyohQD5wV0BOdHFWekhJQiVbUzlbRkR8cWBsPzFaTC4/eVFW'@;
put 'U0U9cVhmZUZ3Ty9VVnIxakxnYWQqUXtFSUZZRjw6WSYsVCE2OldQMHIuaVRfSHd2d093PzZgQW86cUt5I2RbWzV0fVNwb3hleWBII3U8K2NaVnp2cixKZmJsQm1fakNlaF4/KUdpVkQkQkFkP2MmZDBsKzBvaXx4QlFdVz9kR2QjdDs6SkA8NzBPJDxaSUUoeXNnXixjM1kjYHMwYmBYcUUuZzU5'@;
put 'QzFlTnc0VkptLCVlaU9IPjd9LG1FO3spWyZDOEZaOSthRHkrQyRCXkV8ai5aRS9dWDFXcEJVYyhWdVdddDV0WHdORCRCaEslWE8qfGh9aHdaeEBQKCRFMl9OUkFhS19yYC9RdkBFS0BOYnN2JCUlXTV5VjYrbSVaViVpJSNATX1GZVJzbF9qKmJMWn5kXipidjFmJkpYZy84SEppSShQJXVfZDAy'@;
put 'VFFfbkp3Im8rJXwqZkRGZUQ7MkhjcFp8bCxsXnwzL2RRU3xYa0VXQ0REeWQidVFSSz4/OEFFXklgLCkuTzsqaG5aVTVvMnt1NClQbVUwTkc4M3g1Q2F7djdzeHBeRDk4bCxLbz45VkhdNVdtVXwvS3V7V3g1TW5geTF2In5DbF9wV2NzUSpyWHMhSSpRYElnSXRzfGxJJHUxN3EkMSR9ZExHWGZS'@;
put 'Oi9jSExMSHZPczdeZGM+Q0c/Kkg1Z0lCOEFNMjhyRyxJenxxPixjIlZuWUQ3WjEqUn1NNl1ZODZVNEI1b0x9dkpfe3FHO2I0Vz9yIixuRUA4UWhyUWJNTCsuXTxhWD5tN25EVX10P3MuXnVaamY1YlJqKihuaVksK0w1TWlSPF5vZGcmQi5Hcz9GTS9oSWJBQyg0KEZ4KCJ5dzBnWURQaThXOHt2'@;
put 'JEpsRCQyIUdqKlBncT5SOF8xb2V8RDlUWGxBcDtDZyZ3aUZPclNrSzFLb2gqLk9XMjdSP1hBZU00dmUxcVhIWSEzXV9UX2RmMC8kZSVfa1pWc1BYPT8qS2lzblBxfW0kVC4/anZmPyxBMSs0KjgiTS5WV011Ml4pcHNeRFFpeXUhOzNxWWZEb0BWfEIhdllmZSFPPjhueDI4c1d4d0xaP1NKUWY8'@;
put 'ST57VWhkSUc6d2dhYUhFRV15cFpRNlkmfFMrUCY0UTdfTWlWPSpmR0d4Mlh6XzdCO1VqVEA8IWo2SnhSXjNPe1s7YThMTndnSFd1JEw4WzJXfC9Rb1IyZXpYVz48LiR+fFtWc2ZJR1FnMjp9SjBOWGwkSnM+LyliW1UzNUJeKGxSNUczcHM/KmprdkRUPDc5NUQ0M3Q7aWRQJDIrP2FicXovPHlT'@;
put 'WWI5cVdoUik8QF9qIyw1KS9SOkdCa3piaUQ3SWp5WnhDbFtAcVJ+KFNlbT87fGA2ZDBdTzo5d20kKV0hMzIwX1NgbFBLaW18X1NIeGAmfWIxN2pLcVNYOW8rKURzSSp9OlYmKix3aGM/LHBAdSF4MmdebGxXSWtTTDFSTDM2MDQ8N0RkXmNQbzU3SG9pY0NHeXN4Uk9yPitmT0d5LyVfRElKeHs5'@;
put 'XSVaSml+diY4by9jPjMyWlZQPDFeVFVqfnhpUE5ZXmJhMSN2PUU7SVRNRF44dHIkbjhnMjlJaSpEWXZ2diQxYTFFOEpbMFpZTihecmBXMW1LeyYmJT5nOjNdVngyMiZ7LHMzbSR0JWoyTjo7WiFmcHpCVXwmKjZdbHFhRzUwOW1we1NJRkxkSiElb2JUSnlMWWtsRTZCezVifFpaVixjWDJaVitj'@;
put 'Y1I2Sz5yKVE7YldwKW4sP2goNTV2LEQ+JlNGWjhmVj1jJkpZMmRvJWZTTikqQCV3QHFPUCIxWyFUNUVVWSpAPGcpQDwqKnAsJWQ3b25TIXdNNGFrTjNnWWl6SlVvb31PSXcxPCNoUCx3RElhN3YvTCl0Q01LJi8mZ1MvUmpXam0yRjk3OzlYaH1dcDh0cjEpZiw9a1A8KUAmPz5PTXUpdTN4N3Z8'@;
put 'Vi50THw9PyZyR2ZrcnRkL2k3NlA9JmoxWV1iakk7M2I6TGx8dlU7QD9rMi57clZNOS5TO0pBbjNDR0pxMT08OSpoMG83ODMqUkY7TE91cHIkdjIyaSM4Kjp8IS4mN3Iwbjp0Y1lUWVE2eGw5XW13SGUvJGo5XjwqOHUwUHJRayVVMDg+Z1V6eTd8W058NiV1SEo6NiVNbDhmMTJwM0UkbittOEJC'@;
put 'U2xgM2V7Il5lZG91VFRPZmVQMUNGS3VgPmxIak43XngpfFZmRDhuajR3THUuRTYjdGl6azVreHg7SkJtOUh5T35lKVlKSnU6VTJ2K3cmYUhlSGhNbEBibGpISSouSnlnfXc+a0A7dykla1pRPFlic0RdJVApOWpDSEVIXVhRbnZ4I0FLIVlVJUM7Q25JX0xXXjtvfV5vLkpNUj1HfXF+YiplQThM'@;
put 'PzgvUnl2KUEzbUJCeUclVkVxclhoL3k8dEZ1LG0+ZUBGUHxkTXVKOVB8YjdCZUgiUFpSRHxndS5yYkBGdmIrYXd8MShuYDU+VToydUFGVjg5NzUodyQ9eWFWVjJKZm9fP2NGe3pfcn4+b1N3SEduMFpTRHw7MmhgYnIzSGY2VVVqa29BIX1VeV14IWMrTnd8d21TMy86YSowTWVeKU9OaUt7P1F2'@;
put 'M3RHJiF5TCpYXlNNRl53IUg4OzclfEFHNiU+bE5ZbzlZRDxsfjtRTjN7SDw1JllqVzt3ODglZDJ+ZEdgemkkSEw4RTg6QEtZd1JgLmMrSE9rI2VyZy9OXiRkMTt2OiRNdnpbVmxiTz5TNC9oZjY8SWIxU1lUbU5ZQk0zcGJ7TE5VJjYlMHc7IVlPWmVFWG0mKStKP1t5Z2RSOy9HYllrQE5AV2hN'@;
put 'VX5iQiV7UEZwYU4jMVV5bCovOVFoQXUsWUU7XmtLSHpsMShobWgwYnFGOX5eKDxVfms1V2khPyg8RlpNdUQ5czxDaFQ+R3N7PV0hOj04T1trM3lwZUwiTn0kL11GM0VAeDBZWFFETXNlc0tlS094WUcrZCZpVWUoPz1rey89UFA+LFpTTS5ySmNTUDAuN1VzeD54QSZ3Kyo5KFYwbSEvXSVIPWQk'@;
put 'RF1uKDc/JiEvW0hRKWJESSJyKHAvdU5zV3plL0ZrRUAoIz9rX284JChKbXhZJiRyZWNQfSx9fGRXenVMKndAano4NGxJTmQ/SGk0fSpnVmkwPmI6c2k2PmxpJGQvbiYxaDBTQ0VWek95PiViT0hkZHg1TU9aPC56NTt2TlYrXS9oOGF3WkorKT0lRF1+RWNjZCw3cGtlTzw3YllqOW5zVWBeNFEk'@;
put 'SmJgSGV7ZSI7dz9mTCh6SHNOOjBKYFZYbTY/Qzs/SXJ6RFZEZD5AWzlEWXg0QHRNfGgsfkBlSFhfY2dAUk1QP0R7JnlYbFRdY280Wmo/JEArbWllcyFqckZmTVVJdWZIfGlaUGhlaChAQmk+anw+Zi5kTSF+cEYjMFJ+d2Z+UXY3XnE/XjFmLkZuOVpydFU8U3ZpPltFYU0yP31kJU06ZW47U3hg'@;
put 'RGdhP1h9Mzw9bG1gT1FnQ085bXd3bDZ7XXcvMTFIOkt2KCxOdmJvTFA1Z2NDTEVCUmZuYmJQQGMqZFd0KjBXMGgqQUIqNTdYZkJPVVVxaUtpWVVjUXM5WHpCRlgwKGB4SkkmQyo1djd0Y3spJEFIVSJGRnQ0d343OVApIl1We0d+KG1MUDVmdiErNCttRXBwJk5AYztMekxDQ1JubEpRR2tIVTYu'@;
put 'aHR1Qk1oXmpTWEtGT1lmKmc1ZCs6bGlDZDRSb25AYys6L0ZlWmZkYmVBPH5MSGFyKzdfLEd6QituTXQ0d2ZKMEs0b29PYkQsQiJ5RTZXQHFfd3c8RTJuSUJVSHIrLltwVnhYJEhQZCpkYk9YZSxESkc/aU9HKjV2N1pEeFdjKTooe1J8TFA1QTghQ2JvcG5wNDNjNkYxY0FlWkIpTFJDXkhwdn5X'@;
put 'Y1lHZDBRWUByVVE/X1g3fn5mNDA2JkZkLDkkbWhtfUUld3A8TXlBNXdQck9UVEFQQCFPKCZhQjFqIWN5Wkdra2NjbUhIQS9KYGlMJEVAT2Q6QTo3dntpekllZ2IzTC9KNTdFd15gTzBeRj9Ccm5Qdnt1WjQ4RjFjZFhfMDJSL0ZHQ19oOUZJem80JTxWUntDS01UaiJDfH1FNnN1e1FgWE8wdTB5'@;
put 'V1NPdXhlT2FTfExqR2dtNmFjdjQoXU5ZKUZHc3dRVyNmdEI1MjomQ1BVd31PX3l7RywmQVlTSik6MlkiZFhHUUFEdFhMOkNlR29PMy8mXy9reDdSd3lRJXFYbTlTInlFNmoqTWhrU0l1O2FfWCtNanpTS0V1eChOJnFGdFo5WEZCSUNiP3ooKUhJQlVIQHZEKSNbR0IpdSU0X3Y6JmdZb1lVXy5E'@;
put 'RjhQVl5zSThFXSwsZjwwZUJIUj84fTJfYnZWZmNJNEMuQyhBeDZvSGhvfTtRISxuYUt0YTchNlg9XSE4dlMpaCh2NDp8ZiRHVT1+fGB9M3FkXTs0Kik2SlVSKXxCQjY0OD9+V3paXzR4ZE88a0lXeF1xTjpDM1tjd0MxY2QwYFA2NndiWWJBL1djTmZzYSlWNF49TzdNPl5xI10mbUNqfG95R0om'@;
put 'Kls8fElme11mSGsjL3FYYkQ+JTR2X2NKaVBSVHMxdV1+bEZpfFpOQC9FVyJZJXM7PVpEWkAsdTtmMTt0dWA4UXNVK2o4c2F7ZnAlUnkhYn1udCRyOHwlZSZsb3pte19oOHYqeWk+OVRgcj4lSEpjP2xPXkxrcjkxZkpXKHBIb3c/RzlrNWNdcDhse2A7aUxJcEZtOXhGSVRaIzkjY2deYltHczN3'@;
put 'KkVwbyYkbEsvYlc8KltvWV5pWHtzQ3N1IiVgKDxaRlJ3SU44bn0jfUpYUHJnTCZIM280Z15Nd0liS3c8OTI9U3dtYixPM1VMTCtsLjR6MEM1cjJYMTRZezpaRyExO1E/W0NHI1BtPV1RWzBvOWgpbjpmX3lZJHt5Lj99YzdSLy5JKTB9SEs7RG9QfTl1cytpMEt+QCVuI1lbP01wViUrLCtES0I9'@;
put 'MXB5YnoqJk0hSWRSbj18KHxyWmdaSWI7Rjk6fDMxLiVIdUY9eWpaZ1BNTihoSyJ1cz9XQ3s6ZD1PXihdODQxLGVnRWZxT3lQRDZLJjtPKHVpbXl8bVg2W0s6Qm4vNEleMy9kIyN2dDByeDJtRiRgZHVIJCg8byhNbTw1WVlHSDw+UWNfW2tmSWJqRnM2X1YkRyZYe0k0YjczNS5KS081P1pkNVQx'@;
put 'VFV5Y3ZpW0ZnaUU8JEA5Qm08aVNPMVVgVUckSCV8NjpEK3FHcmBwJFExJVBRdCVze1dPRCRFYGlmKUBuPj9GQ3h9bUs/JjNXKUV5LGMmdUByUls7ek4vJChtKzR0aXxDOigyT2BxeyNkUVE8V3RWVGpjVz84USJyTHJkRWdRS2U2Y3EmUzBYUC5SJkgySCxROztidllua0JIJDZXV3lnVjwubyQ3'@;
put 'anxWMzlDX0JFVzkmJkkkbmZHO1dXbFMwJDpeY04/ZyY/Ji84cCRbVkkuez9QYmxdQFZLfUtAXkIoX3s/Slc2RDQ7ZVM+VHs6JDRNTToiJUJwfCImVTIyand0UVhhcj9NOHxVO14oa1tMZWp+fDFpVWksWj9Ue2J2SWdkJDVgKmxtOnBDNnBgZ24qZkU1WChmQnsmZFQoVXByVzg8YTQkUzJKJERH'@;
put 'bWMza1ZKbyF+XlcxXToyaWZpP3xoKncoSW41UnpPUD11bU5xeFtOWypWRGhiTiEkWSFzNW83KFt2Q0ZTZGlSIyhdYnZmLmkpY15AJCVCbUpjZFAsbitDXkw5JTslajtrK1pOeihuMjAkdSNdL2srU3M/YnJFalc2Xih4fFpwWmJWeXE1JGQ1TixgQW1kdl4hPXRNKUEyfURhYj5fLkpdeyNGP3J5'@;
put 'djZsRjkpMC42R1JHY1FKViw7OmJ2P2Z0MVJrLEFNfH1OX1UoWFp+MXczLG9hNT5oVV8zUjNILEgwUz9gR3VzZV55ZiJ6SjZ+KSNRdjFddDQzN3ZfWUZpIWZlQ35UZWYpWXg0KjgjUX5OInZJVEdsL1tFYzJJZnZuYExAJHgiVkQyMWhHQytWeyxkTz9UI1FFVEdgPkhUKnJeMX0xdjdLVzVkeSFz'@;
put 'TnIueXMmcEwrR30lPmBuQkQyPFEiQ0JFZjtJay83UFdJLixIaE1jZCt8QXUwN1IuaXVGfHkyOSZ1W3ghMi88OT5rXSlDUzFUdlE8VmY6TG5JZjx4M3JEbWtdajF1R1pWL2c2aF9BY1dMKXNPZ1Q2NlJMPmQoPz13Pm4zS2hxSiYpfXtIWVZ5YXhpVTt2WXl4KUoxMF51M1Byby91ISEjek1qe0wj'@;
put 'PFZBeDxWQVZuYWpiPEt+cDFsPjVeTlNbU34/UFIhMVg2QDtkTXVVNyopXSVKUUh+IXk7VVRxRWYqPyxiXyEsW0B8PWRKWz96XWBXaCNeRDVdd2NFS1AsKGUlUXQxYkFsUzV5biNiU1VDJEJbIThCJEpHR1FCOHYhXzJQYCZZYmgwOjZiaTtpQCtRQiFKYTxwQFBCKDJDJSpLK3JeTG5hUCtKPiEv'@;
put 'QlMoQkA2aF13e2FTWSx6MiR3dD9wZkJwOSpgKH0rX3R4QHdlKmNbKi4odFBUflM1RHx0OFNPQylLVzJNUG0pYVBhKmZMckZkLkRSZkQmdFBLQiVsaDwpZCxQbFFlSHpDNEFPRG9vWXZYL3goQDAhJWJRIyZIazclaU9mO0EmMzM8KSJTK08/IXImOm4lXj1zWWAsQkQkaXg4dWw9PStxYTgvZXlz'@;
put 'P0BASFJvM0ZGMixURlRwbkVjaiI3TE5VXUQ0KXxxJUhdJmE2KWIvXyNgPVJSazJ5UilRVj1ycT0sKUopRXVpWTp6YHxba3NgMEoqQlBNJmoiPXtoTVkwVGVJLG07aDUkSnZdWDtQZWBoY05DPCI7YShbMXRpakF9bSZwK3cxeCtXZzJOSTxvPGAqWGheclVaOEJ8Tk8raztXdjAvXz9TYWZ8VSNw'@;
put 'V3lpNTpgQnZmPUUuOXpUeWA9eTdRb1lHdjFIZH12VEdRbDc1Z1E2ODNSMDZjcmxSeVlwdi5XbGU0XThwOnQrU31zXltVaCQ5OXpxPDB0MFN9czpVNmp+OzxrSy83T082fClFRHMvVH1RWjFkQzFRJj1JdlltTUg7SyRdY280PHRQWWo9OClTblZiPWM9P1o+PiU6alYofGdLXz5zODAsaHU4dzl7'@;
put 'fFtjXWtTMXJHc0ZWaCtGdFNkRkpgVlUjKmM1Q0tkTX5SfEFTQjE+NCxjJmpCPEMoeiVOYis9TTxWX3xRUWE/IVlEdkUzNzgqeThIbUlUUXF1cEcrfFJnYmoscyI2aj5PUnRyaCZVYSl5a1VXWGF8OXN3KjVbe2hqS0FPP3g3U11GJkwxa3N1OSg9T1EiKWxCMXA8dn57Sk9jcXFbQ3JocEx0dWxB'@;
put 'U0JKWEBWfDdINEUkdkJCWF5kWUg3dF05V1g9LDhqclJDSEY+WU9aI3JNblprMyEhfmk2W3hsJlQ1Llg3MWJYO1s3WCxVbVQ6L20kazdYMmE0JngkRmdZNk0qeCx0TDZWVmhVSilVJTVIRGFfdHZnU2FPVmYlKEN1eXsoOnBuUTIqXyNkcUc+KGNhPHJ6WDhAJV8leWc+ViVJX1JHMjF4bGU8P3I2'@;
put 'diJgaXlSSj1jbzZxYFg2QlI1dzt6bGw4bTU1Py9xLGMhOjVMRHJoe0w9TWw2cXhhVSQ0InklW05KYUMkd0FfTCRNaltAd1B4JVpsS0g4YFJnNT5jOWc0SUV7bD9lYEA5SzVdTkk5LE5SVX45QFg9ZV8ibywpMH1NUyVeQjszZEtHbVdQPz9OT14scXsoMywoY1JuIzk9LChLZEd2Q3UwTn5DSnM8'@;
put 'Tz0lbFopM1leZ0FhIjFZIzRTaktucXl7I2tKWl1OYS9pZX09NmwhZHEhKkVARXNiLHtqKnJbPCNqcks4K3tTZSxlLzAmOn5oeGcqaDwhSFtOYShme1phLE9oaDhzQDVkQWRTYiZOOkd5LHRDbWY+LHA4QmlZQihhezQhV0NtREA9LF5yZHZYQnIxb1l3SSlMbD9STGkyUFV8R0ZsUGZEeElGXjFv'@;
put 'TyptREZYNSMrIkk5fCpQZUxkKCVTM1VYQD9UWGIpY3pJbnQ0NGgvPGA3UT1NdGQvOGY4dElpQyhCfE0zJm4vRDNPT2Q7MnFeTjdpTm9MNnNZNmU4QnFqelNXZDRAZippamJlUE5kO3I1a1spXnxUQSksUlg9QEoxXlJRNyQ5OCIwMnc7dXtpZzFnZmJ2UF5UWjpHYTxnKGwyJiQxS31uP2hFUiJ2'@;
put 'KTZyP2JQb3RRWG9uO1VtTSkoSj90Y28wW2JKfnJhZkhyM0JVQDk4KCVfO3xPWG4kTj5xNyNeTlp+az8pQW1bQCI0I1poeWcwcik/dilOcis7IjJsYGkpTUFsK2xUN0I2bkQiNiJIPHd+T0NsfjcoZVFZfEphKmgpeDs/ent9VGg4bUR6PXR+WiN1MVAiO3IsMl5aVXI3OmshIXk2WjdxMHRsOkBE'@;
put 'Yi52SUZkSEM0SWJhKl4iczJGdTA0ai4iMT1NVFdeQnE1Zi5pelIoT2VFdyp1JXcmajp5dXFEYlJIT3t6PEUuLlcsNX11ZkhwSDVINktqOT9ENjB6VE8zIlY9dWIvIlY1cCxQcHM0RTQ6ai81bGgkJFQ1WzdyYlYmbnVfIVJDRSkvfjBFciQ4fWxRSUNieG5JKm4vdSUhe3whNnJIW3hpKEtFUWVP'@;
put 'dGRAUGFVaylQLnNGKnUjd2tINzN4N3F0KDdhWTVXP2RbInxXN1pPLk0uL3ApekRUSSM+VVMxUj5qciEpeHhxe2JVJGJTQHtbbiFkenwyaCljKUVNekNMWVZhQ217USRGN2RqUyp1azEpKmhMOUdbbWUyNWJJWVdLV0QiWSxVfUw4UWRZdi9YMUx2LkNET1VVJk5+MS5kTE51RVhOKnxGeXlRIjNn'@;
put 'ZlRONTdlIUE7U2RQWUU8dV0yNyV0XzczbCNVfXcmTV5vKDdYaFRsfXciKUltaEgwYldIWE4rMDtvQVNSPEJpOEUvOEx2RWZIKyYvfTxSdSpxUUo0R09Gb0d9RVg9TjVYUmdbKkxLRWN6On5PQ3RTM18ufGdANzgkKmsmQ2lWdi88eVE5c2VlRSl4cC86OzVCdl9eJk06bXZ9UiRCbjF5ZmI4bWpi'@;
put 'bGlwRTIjWjwvbTIlPFFzWXd3Z1Y5enhEbyhuWFlMI0x4cUFVc3NuYH0/Rn5dbEFVKWdJT0FAPnNpMTVbNmhydHMycGcrc11rcSwiZz1Eb307X2YvJU1YIUd5ajdEWHg3alZAVi54I3dzaVA2fU90TE15YXdZdnRUO2QqRj8ubSU9ND9NdERdQD5YfFZHOENbPDlddDo0dz9MViY8PUBFVSNkIXlQ'@;
put 'PDtHfVBRZiFtKXxidkBMLE5yYl8uO3BuMkguJWAjMV8vTWd7JmU9QWB5YEsoMkJhZjojb29lUytjOXIyOGxYPVtOZ2QuYmJ+UyxkKWlnQkguQCx4eVUzZSNARytrWUh9RVpTS2UmVyRfIVgwVmApfkkzX2JnYGdnMFVXKHBJMyx8OyNOJkhbZm9nK0ZLVyh9RzczTjNLUGhMRGtxc1lIZEZlW0o6'@;
put 'NXJvdSlpRG1XPjQ6eFRmUGwqanwmKnx6alJLWyFmclMwJFVkWiQoUCRqLjBHWyQqQ2VHNXU0cFlsNmlTOSM5KjxJSW1Mb0YpXWsyWFk8PTdAKGNeez5mOGcpUmlvLCVqK3A+NmxIOktAKTVDLFN7OWF8P01eUDVbUmJ5YHBRPnJRUlslPiFmc1ZIfiFacG4rbSNOXUg9Q14mfTkuZnZEYEIlWFZN'@;
put 'aGgyRntuL1dTN0V7Vl16dCVtbE02UVspZyV5SU5dWz1aY1I7KlV7Ii9qXSQqbi9nMkkuREBbWmcyTXltL3h6TltZJW1sa1M8eFMwRCM5N1lVfFBGLFs5ZmQ1U3FlbS9+fGVkZTteQ08lYzUrblh3ZnhIRj0za0g1IU0rY3d3U25dOjpnSyNgJXA0czdHYDolanZ0eDUvYXg+ZndHekNteVlJSjV9'@;
put 'JWN6R2xEZmAyTy8mNzskSEhiSVUxeFltNj45RXN0YVV9LjdLUXRuOjAxO1FXdWZxOGp0SkQ+JW4oVyhFUnU2Nj5SL3g5anUxZmpAdzRJNXhZRWtibiVwLEVEN3dQVmsvZ1JqYFJFK1Y5ZnkkbHxBUmNJOWs/TDtCLEpeRlY8UDJkWVplVyEuazAhN1NXN1YhZjtpK3FlU1dBeEV5fXEvUnZ9ZWYo'@;
put 'TVtxUEslI1h9L0UscTVjOjtCaUtLWTQxd187VUZbUCIwZXhHQDB7a1dAZzwyL2M7OnJheGhhVzpLfGFRJSRxX153Qzw9VlJkQzJQbGwzd01wSmxvWERpUnIraUF1cFhtU3U/d2FhUE5FQFpvSlA1JUVIejcvPlllJlVkW25oQyQ4c1B7WUxnP2NMZG9KRDpBUFA5WGNYWlg7OT9wWWQ2Qzs5P1Aw'@;
put 'MzluT3tWP2NvMnU8ISp7WSpNfTh4YHZLJmNoVy57KExRQXJveSpAKnZvWFMzJFN1THFEUEIreiMwdVd+YDo6UV9vRyVlaHlpVCRjNFtISzs0L08iRzkoTXByZ0pTU20kaEtdTFNbOiY5I2p4OENJOmVheVdWZ2BnMG1HdmFhPT1wXl9nUyZ2NSFPZ1lwZUsxKSo2SnZDaypRVDxxQn0mUSIzNGw3'@;
put 'bnx9UzdjOXV+XUNlSDB4LkNFPG1xPyhmKkFkM0dHdlAqKDhxWGVnJEhKVz1QVlU0R3U7TE4objAmb05rSFkjY1lPOnteZjguIV9HaWV1VG1wPlVAajlGcGN7VCpELiFgPSlJfn05NWNQLzJ+N1oyKG5wQihOZj0vRmZlbis/OCMpcm9QNnZ9Rnwkbzc4RktaYUJeJk5QPG0zKGNpdCovYClUJnFV'@;
put 'I2ZRU2ltcStMN20zajswVTNVJl9zaXN0NCFFVTgoNkdbdUs+dyUrLzFpbDEjW0k/fCVEdnEwWDpMbDlFcFkyP2cqTll6bEFlMnVxeHpZW3VNOWFENktXMVFWe1FnPF8zW0Z1dCROJi9fKFc1LkEqKS5jPGVoejNdUUQre2pyRm1QJCRZSks4XTZAS0lffUh4QiF3TyVVfWEhcjdGdXc1RzB6dUpg'@;
put 'b2NRVTE0QkJAdGZodUhNWFNHaCV5ODBFRSliNkt1W2wlOz9qJUcyP1B2Tm0oOUpvciNITCV9bTdoPG10MW1IPSlNMDFhM0NQOH5RNSxPKk5kdm9kS15OYEB4QktqPz0hWk5oZ1tQeFM+ZVo9Jj15USZHeWthWSYlTHpxS0ZYe3J0OUVgMGwjUXM0LFk1am1NemU+JVN4Snw6QDdqbFNJaTlXOCt3'@;
put 'ai94eipbOGQsYkpgempSOCVfIjQ2ITMvXWdkZjh5ZGV4YyhtbjBXYWw1ZmZATTg0Q1RLaHVTPixhaV56P3ZLNzxWW0BTNipuTHE0UWkvZ0UwbypKdTJscFRwTD9qQGEoS3k+d0RGM3szNEhKciU/VGVmdDk9UHhzcGxOeFQ1bEpUUj1HbVlbdXRoX0EzYGZpZUczV0lpOHAuUV1OeXFnSztKakde'@;
put 'THB6Q2VnSj1QPWs/JUdNISNiZGRvLD1UOkQrJHdLNUVmS2JjNzE/YUJrOXp2cWFRYlRyakc3dmRHNzM+MGxMdk4sLH4pITFzRm1dXjlIMmk+UzxWKjZ4VUw7WVImUCRRYEF2SmA2S2ApQlkiU2NSTWIpJGlxZEdoa05uVmclYT82KzN+VXtUKGc7SDNRbD5+cmBrTFMvamk8ODRoMWZ4YUo5Lnp5'@;
put 'd3EuLHFsIUxtMX1gQiZYIzopdlI9T3MiMS5sXVdLcCk+aWIwfDtdRTEjbzVAckMyPDoxQnRNak0mWjg3SUAkb3U2VXsrKUBAUnlnR1pWeiYwWUk0O0F8RzRoMUc4N3x6WDFYfVV0XzQ6OVt9MHlKYHROYU1iNjJAMSx+NXxvOygwLH41WDUjK35MQm8vKC9CaXxrU2ZmWj0ja3w+ZUlXTUFHTXZa'@;
put 'RzV+LmI8JWhwW0A9ImBAKGdZamdofXdPTXYvaXlpMV8pU059UlYxJVBzKntgSmVtVWQ2WCMxNTB4c21IOE09MG1ESTFtWjEoWUMsVTNtWjtVKVklKzRnIlNqPD8pLE5Eb3Z6UUkiWUtVSHpfKT9HNDdZRGppYmReR0ErOz1QJWI2ZFltcUpLTGh9QGxiTFZYV1ZweXtlbEIvW1JXVTprfFtedjVs'@;
put 'Pl9JNDchWik3ODV6PXlJanB2TkVtaXd5YmRpd1daVXhfLDRRQE1rYzhXOFA4ZH1YInJ0P21HbU5+WFJ6dS98LHJvLkl2ZSwsPFlqMElqa2VUZGJScWk9RFM4NGxzJD09WFo2T1soO0BJJTJTSCIlZi5HIlllM0o4QF5VVSRsdV8lcVhWQnl+TSE/aHlaPG9MZjJMVkd5QitOXkdNNDZRV1IrWTwp'@;
put 'QjtiR3lwb3tbeGxuNWRIWloiLF09VjM8UDEsM1lyYWx0P3I8V1BgcnBlZiEvY2g6fSJEYSVOQ2dsIlEiLEJAbUgsdTM2bW9MS2dsbjUlMSVLRnZ+dk1IM1k7azxJdy9uInsrZ0szZGZMZjlXdl0wUThEd1FiU2htN1I3ImZXVVtkLF14I0VDMG9MfldCWjt2bEw8QGtJRW9ZPlhPPDhnbm9leltF'@;
put 'JnVeblY3U2RFJlNuXTNkSkYmfHosRnVDM3xqWHlxVixhTVlSP2djR1F4THRsOHxkcU9CbFlYU1tPNypyXTk/cWo1c1tZUm0qZEUuRDl7PSE/VUghKSU8TzdjKFM0Z146RHU7MUs1QSpHL116aEFPL1U6ejI2Y19vM0I2YDt8ckRtd2BlUGU0dTQ/bDxNbHFSWS5pKkZ3TUluW0FqSn5xYC9FY2xj'@;
put 'UUs6MCxVQGNOMCtRaU9+YU17ZiFRWzpeMyhWSil8ZHdkRjZbbCV9MCFDdy5OaSl9Okt8RXtBLDFsXzNmdk0hWy5+MnNSensrYWUlak92UF9TL1MhdUFGW0ElRFhYWClGLnY9bG9fezVYU21vO1h2Ni9kTlopIzw+YkFKRTZEMnxlPHdyNWh7RGJeKHJ+aUp2USJeM3Y6Nj45QEM3aGNQTUwqLlNl'@;
put 'ai44eypqTCRbeDlqRWIzbU1vQHFCW0xqWWY+U3pBTWIrfFB2Q2xCbDEiJGY4bTYpdFN5eDk/P2BFUzIzJGNuIVVhb1pReDBYMD41e0twMTFzJmRtXTo+SU92Z09vQ11NNTl8KVpNUWtNaXsuQ087fUNTeyJsY3JpeEpmaiRFPmlPdDtmJSpuL2pgY2xvay97T0MiV2tvWTVDKkEwRl5sRXt2W14x'@;
put 'PF9WZmF7dkc5Y1BybWl4bzs/Kk8hTXU4M3hrcUBIZnx6WnZPVmFkW1ErK1olRXVoL19BNmshaSJHVHA0Z0hYI2tMOnFFTDohajwwbW86I0MjcStSVERhaWNOX2FHK1guWT1bbSo0NlFvUSEqM31XOiNxQzkpIWsvW0tKfXVGKXBnS11xVUNFKS9XUEVFcX4zMWBsOSlgb1swcnpCPVIraUp9WTQr'@;
put 'YlJSS11YO252KGxSUWB+KWU3Xiw6WHshZG53dThlZ2RvMk9SdVZVM3lpIkcjVnx4eXciNX0+eXopSU5bNSVQY0JtUiFWRDk3LDVUbm4rNyw/aHx0W1JwUmZLPkBJR0BoJT9DUDVYc2BUMjoxVTssRVEjIzReZ3kkZSpiWmIwNi9VMU48Ni92JmYxO3lmJCVqYG96R1Z9KWtdRlk/MGhrfDpPUWVd'@;
put 'YGcjPH5zbV0jKk5+WDd3TU1fdmBzO3JQMCRkJUIjQlglNlcoL1VgUGQsaDF5NGtWS35dViVAaSF5SSgsXXU5LFJWOH45UH1ZRDckNSZoe1MjeyxJITpBVH5oLC4od2hxOXp3KlMvPkp9UHNCUGI7UjFwcDEoUGNzKW08fkBUNS9GI1suR0RaJFdXRWo1ZGlZKH0vSjVjQF14OHVAQHdpKnRSXiRe'@;
put 'JXdmTU1oJWlxcyx2Nk8jKkwsWSlVcHd8eGk4YC85S017ZFNaTVNkeVdrO2l7dTVyfFd7IWFecSE9YEwucEBAL0xtQnosX1FZdXVKTVU6TjxRS1V8c2BNRER6Mk1odEVQWUVkZyhSfClrSXF1O0p6YHJ3PEZlX2dkfF5zJHZJaUxgfCVfeXdUdHNPZF0/KDBlYzU+Om5pIkYrLlpHPjNIUXs1X3lv'@;
put 'dTUlOG16MSNiPWAmamNQV3QmW3ZofD9JZm1sYyE3L14wdTFyJVgoYDZ8YjFnS1NtaUNYNmY+WiNGaWRHWHkzX3RRKS51SXRZKUR+XTp6fkhOeDEuTyI0JUd+eHdQX0E7JFB9PkhTMD92OV1BZjJSblIoQ0JUISUlM141fX1GNzI5N1csMTQ6LEtEdUEpQCJeTCsqMXBIPlgoaGV2TUttZnBCSEJI'@;
put 'TUc7SWNZLyZiZjVoNlE+VitkSmhMbmUvbFFwbTNpRVNZYi46JElkbldONltHanpYP2MoZ0p6aXZzcj9gT0VKOEpqWS9+fGtyayhwdCg3aCpGamgvYmY3QkBkSnpqdjxwciZYWDglRSQvd3JgVmciVzVyeDdqI2NJdyUvajFePXlZY1Vxfm50JkZ2SmA0TUV5aFhYZnxZRVhYZm4hMk0lclpEMXI9'@;
put 'YFNFM115Z3AsZHZKOGlZfUAzJGZVeHovMDIrcjVGKmR4aCl8MXA8K2EsPHNzVk0hWyk7OGpVb2ZqXkRnNU8iZm1bck81Z1NsKm9taHxLdWEva1tJYjJ2aVcoRWssN1AsQ0VOOVtTUEVFNFBWclIpYyRbQkFtOjExel9uTUUoJlFiQmtFSXgpWlhBYUJOInU3SFswaSEzMWcrJnIqRjA4KzcxLExg'@;
put 'JDU1Kk9zLnNkcHhdJCFGQFl6Y2tYKG8mdT43YEw6anRKJmJqTT9reyV5JlE9O3JaeUJdRVhqX1tqaiMpWmEvTGpENTRjen11K0NEZEVOQyQ/cX5NYjBAPDFRRzxnUjh3WjMhLk9CX2AwYS9MX2NLWihtVCoyT2F3X2dTZ09NRXw/RzxOOlUxUzgxfDRnNW1MLHZ8REBkfjBtJDB7eF9vcnVpIjhu'@;
put 'dG4lPDgkTFBXTXY2c3NSTks3K2B5NkYrJHJpdElhQzsrdGBJLFkvTWxNX1dkYX5iY0Z1aC80NV41I3I0XWhxT04hdUA7ITlmPzR8cVoqVGglYmpYPklCIkd9UWtoQkpYNU1SfGBadlgvWVprcyVkMnVPbVJGQHVOaSpTLG9MQ3E0OkJKRW4sRHBZLCRNNWMwZCZOO0w6aypKdE4/MU1EaTJDLiJR'@;
put 'REhIa3RJeUNDJXtydSl7YHwhPzdsI10mRz9CclVjJT89RVtJVHVdVitpbiljfEtPZy5zb3VfTDYsRENtUS45P0kseSVdUHwmUEhrNkZSOCMrcVkySTFBaXFwWUR+ay9YUmJybE07XXQ+W30pbzdQNFEuSmJJJjp8WGxKN3taaGI9azUvPjZIa3JoO1VlVSFNNUJya2xlfVg2PFRZazJIe3gvUDl0'@;
put 'IyVae2dBYU9zZTM3elU4R1BYOW4rRnZqPz5NcGU4P11QMipJYlpELj9fTSxeeFVuJik0fXFgTTkjSV9KIXRfe1AxeD59MH1LbVBEMFkzRzV8Yzk4N29qK0xvIzIhd0d9KGZMbEgwOCZpKmZKJGt7TGdCTEB5NUkiayhLP3swRmtXaXtESU5LYntZZiFGOTl6X29PLEAkSnU6VHR+WmxzbisrTXlx'@;
put 'JCFUJWJMUmFMWzk0TltYRDczdz5UfEh8Lyw4VHwvKW57d2N9Qk0/O3szYDA3QjFTIUg9cExFYkAkNiZyTXkoOH1ldXVKIV5OZyUwITcucV5wZERgPHFeTCkxaTVeYChwMzcrfSNXWmZoJXh8Wko9ZUhJOz5OWndEYl0iZU9XVkRvSWhjS3ZzXVhiQm9CdDxDZjBNMWtIQlREKyZYZjx7S1ZNZjA9'@;
put 'XWUhMUJDTkErb29RVncuLlI7KS5YNFcoN19yLzYiKilVPjNGM1RfMDllQW91TXtNRjtKclA3JXtyRipJdXhGamZ2RkBxZCVLRUEkS3B1aUsxISIpX18ofXgqLGdhPmEmXz42bXAsYSVuJW5PaTV2ZXJBRTslfF5DJjIzfHl0MTh0Tjh5RDdTL1h8aDl2Q1B2Mm5ZLCwrPmw/YDRILC9PO0wpc3oz'@;
put 'WFk/PF1CKGdxNiJNQi52Njg9S1UuXStma2dkTVskLiYwVURaZUBscH5OYC5XQl8zN1Y2MzlTcDFyP2hiXko0UVFpNyVncU4vci53cDtQKyomOzdAaU9OeFV7JDc7IVk1XiFUfURxXTQmLnZnSVh4MzJGPzk+KH10KnxiWV5YazZncT8kdEYzVXlrJVRyJnhzZ1ExSkY5I3RWOGRYL2V3RjtkekRw'@;
put 'TGY/alJyb0dbbz9vOSlfZH0wczNjLDttTDpoSUVAckxfSklQYTUoSkZKQy8saFJZRnJeNF12XTozYmN2MzxXfitUO35rMTl+VzxpJTVoW3EhQ2VeNEdOJS5UQD1xd2claTo6Sy4+Nz9qSy8/OWI6RmBoI0FLbUVLWGI4dWdVL3ZoMjZUaS5ZTm9dNFBoLkF+cV1CZHRrcCxPN212YjU6LlopOHtn'@;
put 'LHR8Zk1QbDVlTX0xImI5JFIhdFVSO00jcjIlZV04fEBaJVZsYWskS1AuTS5HXUMyW1RVT1tKM180UTh3O1ghPGtpbyRbeWBXS1lEZn1MTlVFYj1kai4kX2ZHSTB4Vi95THJudDZiZGlzeWBXbzx4Z3ApaHEzS0pVfHVTXWpdKERlNDh3ZH1vJFVYYnJuIyguMH1yL3xKJVBqfTNDKHlISmkrfik0'@;
put 'I2J9ek58bXkvKyhFU2BmTE5LPjolO2UodHxCcz8iNEI8YSw5cEd0T2dxQihlViNid284YXJzeH05VjEofHFmWEMkaSluTFBvOlAsLEJ3clQlcTJTXVNNaGxoTTJpbz8yVjglSmxTUkVpSG4kSHJ8bFEzP14jUWlWWmdSQkB3R3tLPVBBb0s5LGVsbEJ5fnEjR1YobTBHUkJAVEY8bEJ5bUhxYF1u'@;
put 'QV4+WzlPOlVBVXZHLEM/SGNRSHVMQ3swQ1Nwb3hJfldDPml1M2pudSgsbzNwX0FeNCM9KS5gPGtzWSp1ZW1tJTJ7SmlhWEF1KV8yTE8+W0BIO1hXfUhMe3RdWXQlLmN1Zl5fOmg2ck9Ye0Fld1M7U1toUDlhaSRMRmQjYCJ5XjRvXnBbYmBKMHlLfTYvRCpuWl1iYDpofHl0d0N3bzkqTG5YfGl5'@;
put 'MWxRUissXkB6bEVZZWF3amxyQGxDWiFSKmREPnQuRChCUDw+dHpdZGgrWioke2Nac1pFSzt0VUlHeDJBfSRrU1ZgcClzSUB5dTFTbz01JFl1OXVGKFIyMkVbYFgwIW8sLiZgUEtvZVQpQV10Ui5HfTVqJCxgKGBle0VtTXlZJUhaWF5nOkRgdzZReXZ9bzs1b0d5I0VTOGY4UG17RS9qOWk+Z2Bd'@;
put 'LDVgJGY8VWUrYWsvejt6WU15dk1YYiNjUmNLK2VycXgzW2UxNiJkfT4yK3s/UHVwR2Jtd1t+XjNIOXA+QFs7SDE5Ml08NFdNQENiR1RnaThpKy9WZlhmaSN5RjVVNXM8V2whcDUkMztoZDY6SGxqSmtYK3Z9XmRga05CLFUoXzNXUyJnfV1SNTZ4Zk5Oc15lc0wkLmgsJE94Rzk5LDF1VWx1PyVg'@;
put 'Ri81WD4yd3V6VkVxUS8iU2Z7UXd9W2A6SUdYdG1sPTFsck0yfHFzVX0rdT50flZpZSpFM0VzdTQkX1Z8VlBnPUZLZV52eUQ1QjdDVSwsaERMbFExdTxINiFPXmY8PT4idGR9Wyp9LHQha3gqTE4lQ1l3eURMNUxSTVJWPEZBaU8+Ilc/VDF2U1t5RkZIO3REdih2algmRkZRckhzP3M/ayksaFBa'@;
put 'c0VLSW0wQWZ3eUpaRENNTTNyYn1le3NjInQye18sL2p2OVFeXzkmWVk0U1g0Yi95NDRqZDlCUGN6Kit2Nl11ezVOYDlHVHZIVVpZbj5LTChUIXNfTVBvNEpWJihsQnJNVnY0OkpvOSlRT1pGfUVjRTl0RFJORlI7ekg3ZCpHcTljbW0jelpXTlQ8MkV1aHBKayU8dWsvTm9pXmZTVUFXQklkVVFB'@;
put 'RVVMcFZ8KDE5OEJ+ZGFwOC9fbXApN2Y5SCQxOlliaXFVcSopRyYpYk5XU15db1Z5aD5reXt3SXtDcUZsVWhzbU9iTWtzQURHbFpRSTZYNk8qPUh4NCVyMUV6eyYhdCZIUl8wSSZ6OmtNcWBqLkdMKCglYn06P1B8JmcmJGtTYFVYTHVbUjhrPDYvQ0RsbyZlZShWN2N4N0VsdnQwalAjQHN2cmI1'@;
put 'QDoifT1+PX42Q1FiLENRJVhoaCFYaFMzK212Jis3UixEe2dDfXwwWUY6KDdgTFJEeWZzKSt5ZmE9eEhUQkZnc1B4d0dYQlpJbVtpR1hCUlEidW0jLkw1cVlPVUxiNUZkTDZgZjF0YzAzRmlIRV1+NjtbNTpyVmhsPDZXTSVuYlN5WUtvbzd6RF82IzVkN15BV0JXQmYydTBqVl5CXXkiX0RHTXUp'@;
put 'TH1PcEJpMW9He1I+TzxrZHNtT2NNUlZZUWRsaUxTMlVVS0cyOk5IZCM+Q05wKW4pbitLNGtpRmFdcz9zPyI6TV5rPV10JnRgdklsbzRWWFYvTV5rPThMYXRRL3smMlMuUmU6UWhtb1gyTUhCa3cxbDJQLkBrUGRASn1FPD9PMSVNXUN9REJOUlZ7MnBvKFljc0dMM3o9bVd8dUt5VndOdl4od2ty'@;
put 'ZTY2RmYvVW1SQXM/UHlHdSsvNSZ5O2JJT1JSczplNWN8MTdQKkNaWmQ3SU1oais5dHJoS2xvRCR2LEV7KGZdW2c+Zyk+bV5Fc2M0NlghOHpYZCtUdiU0Jm9Ca0wsL0QmOWxbQmNDJXQxOztzO2BwKGNAfSZNcTs8LENebD5JSCZUXSJxbF5jZytdL2FVe3FrQGZhL3JIIWUvZSNFP3A9ZT5SIWI9'@;
put 'UDU7bSh2YE9yNX1vJmZhYlgjVWU6UVNBXjA7ZD5ybEpxJD9qUCsycT5ZOl1YcjB3Tlkue106Q1kqdH1CXm85dTdoUXArYy8yKkxhdml2S2BtJX1VRHdlJGdnKTA5SEgwQlFuZTpRaHFsZE9ZOlFoRGgwXSZ8UWgkS21LeXNhTjNQc3o7OUtsZm5qTSY4JXJAVWJSKSFIfEBkP318OG41KiVPcUdj'@;
put 'eklJYlRTOWM6SylFRzwza0BebShKWzopM2N9cV9seVpbKTtWNXA5JiRuakxgcVAxXzNAT0Z8THV5ZGI9YHpUfiJWQSl5Y1VSOGg5SlVTe0wyYn0qI1FkSVhDS2BkZi5iXVs8YUJmRjIyaTcvXy9FNUJ+ZkNod3Y7eVJeeXxST35wJTNNQVc1cFVdNHY8Il1vJDtfMzg+KkxaVkdYLHJbZTVmb0x+'@;
put 'JXomcDojTSFIVTRRSXR2W08uJCY/bEVTZkRvSVhOfih4P29AQy5lXmdsaUFhKiZeQDo0aWhJbSlhNDg/QjwsVFNpbV5AZ1l+eV9pTEJzMWw2KSF8V19lZDZDWXJMWl15TCo5PixGOmtjSGsib0xneTZUMnIkbDVRVGk2eFBHYTNZUVQkY3EyejJlaVZrTExoRV5jWjB+KT5CP1VsSClMP3R0SmF3'@;
put 'TzRtc1osSVhCOXl+Mj5YMEYlI0hLOih8OndKaVh5aHVYcmFrT1VxYEdESyw+VSRvR2RfdUM4ezo7LiVfPFsmU0N3XjxVdm9CIlR8MXM/RW9jN30+b29LYGBKQmA0NHYmcmQ0SG5QKHkuQjVnWGFfKVplS3MuRkE+XkZ4JDFJb3lDbFNxTDJFWyhFL084NEtxPDVXSCxJTTpiOzY3b0dhZlgrOyZb'@;
put 'RHRNSHVNfUUsaVZRP0U1UXtVWXg9V3JiNWxIKUxyWnlYNitQWE5EdzkuXylvS2AxTGRWMkQ5dlJEezIvc2o+RzVjVH45NSY0ZDZ3Tkh+UlNdQTVsZzAuMC83YjdjWlZednZqUnw/PWthXyVsbHs+TW4lLDpaUmglfjR8cmtuM15Mdmd6aSN4WFRDKEEpTy4jbih+RGIvOHIpKmZ6UGB1RHtCNGNW'@;
put 'dVJvYW5vKyhmU3AzUXY1L1hLaitBSjMjTUk7M2k5RkxrUHNZTXBJXlJKcGh8VlJvZ3ViemNbIXhWKURYM0guO1FOeSZGcmwpYCg6elE9U1ZSSCVxTVlYR1pGR2ZaX1RNbiMjSGU1W3lmWUtgbjcuZX13az4xYFJRV2oqLG1lUTJdeWteXk46Vi9AJXxjUVspRS4jK0NLNj5GW2NRMix5cUtHPjVL'@;
put 'eyxCZnUlcDtTVi8oPUFtPSwkL219YHR+TkhKaSszZ2B6b3VwSDBRVV1Ec3pxYkomSj9DSUhfK2dlRypeWm5vTm9FYkU2NDUlTmVOODElN2F4aUN2ezwhQy84JSpGWDU/NCZDNUFmezBEMVNwdU1hIXBqI1slMiVxbGQ3TyE6Olc2YS92ZlpjTl9CaytzeGZpaXgkRihXJCgleGpdd2BXai8pRSkk'@;
put 'MUVJcF1VJndxNEM9d3Z3WF5gZjF6LE0zIW9MUnJVe0Q4YDZJQ2RLYG43e3Y9XSZ0dWxqT3R5TnJSRXc1fjhGaDFCdDBuWzlGfWRLVTtSM2VAaFN9WVpYMEF2Ij0pO31hKn1bJTJOSFJBN3IpfjErYSg7TDszY1heUD0mPF9Ed0Z8YHokPVlsNUhlME96IiVmWDUkIWs1VFNPKEBKUjZjNXJmLylF'@;
put 'QXFYayV4fmpiKEMuU2lOWDNXKygkMyE2JGs8RypwcGEocThpfVQ8TjpYKG9JVTQ7Qj03PXJNd0xINUxzcG5PKGE9UH54WnA2UmU6WWEzKy9WcWN6KnpEPy8sNFUyJE5dZU5geHI/L1ZRPCkmKHQxTi5LOkxeTHRkYSsuTU0oIVoqV3tdXXdsQ1laKWh8LHM5d1dhOlE0MmAuSk1UKC9XSix6di5m'@;
put 'aVUiaEkrOVt3PnZCWixYYkk4WVJAaSExW0xkWiNpWjttdjVpVzQ1OHg9bUg2NWR5ayoheUdVZUg5cWdEO2JRb3l1OyNLXnJgVm95dVUpTmJteCZBQlRjUElpM2hIPkdUTzNaV0lwRjg0ZUZSZk1VQGFYdW9TR2smWm9xdTpSZWIrfHc2JVEyWTd4NkhjNTMyIjcuJmZHezM0bWIkZllkM1VoWTo4'@;
put 'a0lfdHhsUmRFUEp4fVRgVmllOiZyYiQxLmsqI1Y6Iz4+QmVEdjljeD0oTTFdMj97PC9FNiMpdERSYnVFZjd5OUhuN2EjaCZlLnFnLmNTPX1hSnJQPUArWFlUNjtUSmk6Uk1memVhIVtIL0lIZnwsTjw2Nmg7em15TXBrUjhIVDk3SVdbXl09Qy5LOHJ+JjpxajImNHVXWE45SmlKTERfNWpAaG1D'@;
put 'fF1WYEYjemptUk4mQGltaUAwY3JYdmxJW2s+QyFaWlZwUXJwSjkwS3NlOTUzRnZsXztMYDxAekw4fVk7QktzeHlrOD40PX5lM3lFfTYqJjs6KVdYOWhqVyMjfD53cX1jK1VGXiw1VE5yOmhqUCZWVkZzcClnNVVgNEdqK3x5U31TN0hNSFlmPF8kfEhgWzhrWzsxUVJMLjVzUlhna2hHPjVeQCxR'@;
put 'YSEhb0Bbc0lBRn0yTX1IdWRhelEhRnxVOyJLKUt6ckFwezNreyk1TihhOzF+XzhFdj5ScjNleE9vTm1Wd1MjKXR+SVBlLC4/UyhYdHg8clByWEUvazMzYS9uUWokNmdUKWdhJCUzKnE+T0U6VTMlRFZJcFZne0w3Pkxgcz1VMSVjW2Y3eUBlM3lrKGlqPFZBWFtOLkVBK1t5SlVkOD18R3ZKTSZf'@;
put 'TTJRUXgxUVckaXM7JUcrWmlEPW10MT1+PyExX15rKWdCeHBgd1hpYn5vUV1Wb2svay8pMEddMUkhWWI4ZUkmISUxNlYwZHJ5SVhoKVEwWnBCYitTWCRbRjVja3F9JCZ4bHM7YSZlWzc7UD1oYmYiQ0xFM09yRGF0USIkQVtYQTw2LHB9czB8REB6UkVpZFBLcmJnVUdNYE05ZU07OjxMczhvQSVM'@;
put 'TkUoKDgvX0IkPVZ4eXUxLkx5THMlW1thb0N0KENAbmMkSUdAITAmcXxQP1dnd3wmJT0laztycDEjIndMQGNFXk4/Q08/MzRrKHFRR0dJdXZMPC5yL1NAT1F3UE5EIzElXXw9RFZLM0oyRkNHaE96VFNicHBte2lDVC9NWEd2bUpRS151fkVhdzI9NyM2UWhgKiIrSVhZXW9vPStSOmxmZylLaWQo'@;
put 'WFhze0osVmlxYT8obV5iY01RRSYuXzNNWSlpZiYiQjV8YmVwSVRPMF4zPGkzUzVyQWViVWtfPiw7KVYoYFdzQzlhN19bI1pCMSgsJCFBbUxPc1U3UVFlX2xDRWE2Q1NBe0p4Tm5YSCFOdXlkeVNdPzl5Z2FNTVdhRGE8LFU/Xz0vMCY0dFlmSl8jRXoiPFhoZzQ3NFtzbTpxKVd6ST8uLDdTM0hf'@;
put 'ez8vMTc0Ym43ZGZOZSJlNmR1QnhxK1tMOSFOfG14Y0J3Y3lyZVZlVVR5KjI3aDBzRyh1YjJDUTRnbk5uUEtxeWJ3IVJyb08iNlFGP3BhJCFlaVhgQFRVPzllRV97QFdvLCVqTn1ifjxfTC4janxSPn5aemxiWkkiYFhhMVE2NlRpIjdtPFgqbTxtJnVEM0tDZFpwRntUNGU3RmU8aUdeUnk2JTxZ'@;
put 'VzEybDM9QWg2LCohaXJPfTJ8Sys/P3B7KDtaZSp1JnFnbmkrfnImJWtQeCM3UmlhPSJabH5HYncpOHB2IXRiSCo3Ny5iSXYzP2VHPWgyKm1sciQrdEo7ejw7THE0Zj4iayU7cT9JdTo7eEMhOlYxKVsqRT85aXkyWUM2XyJkfVNMajt5XXlDMngvV0M8Y1llSCtNPygqREhnK0BJTXVAdGRNei5k'@;
put 'NTpWJnRMeSJIakpjbHpKZFc4RXlzJHoyaUIkdlNtYVsrI2xKPC9QbDhwUEo8L1BVI0drTzgjRVFRTjpsQFBtTm1AZUZ9ZnBjKD0lUEwse3U2MCo/VWg5Kno6Z1lmWmNrKE1HUWcqamgkW3gjRlYvX15eQFk2UnNATFk7W3FpNUxlYChRZUE7MzpebXplUSEpN2E4UnJxfFBxdyV2SmRXfFBWekU3'@;
put 'a2loQ1NnIU0iL19eZ35oUCJfXSl9cGY+UXRbISs9Nls2Wk5OZ3NkXW0qYWkzYVZyVX5lOmBeUDhIeEgpJno9WSY/fWVGOVtXRGglSD04bT5ONkc6cFNqZHZYO2Nrc2FYbS9UTjFxM300MURrVHhjb2dTXkxvOFl7Nz4hWEM0KiNnTVtxVmhaK0VdS24sczJseDYpUiJDWno6NGFTVzZbTy9MdTsm'@;
put 'cls9RDwzcTJIRSVfKENVRyVwN1krQj1OaHZTM293UU9mNSl8ZDx3cHAkJWImUjFJcj1FPHxzazhgbT5BUStsUj5JZ0QzSypHajhXV11iZn5dN2U7N01lWykuIkFCPGtwbVQ3bj52VHdleTg4bV8+NmtUT11vciNzcDYxfjh6WyZ4Y2UyQl1zKVVaezJ+QyZSTU9aNjY1Tio0NlF5d2djdyVKaF4v'@;
put 'SXNKaUhtaVNvPlp0dnE7aFklRl18SlYvZ1lQP2pwfURWWHxEQCFDZTgkdVJHY0lIMHdTfEQ7WSs6Zk9yKGpOb3dpcV5IVUY3VVMzazlaVUAwImBJWkMkVyFjUURpUEU4Uih9LFdXTn1Bdl4zPkYpdyVpJjhyPW09PWRHZU99T2ZiZW85LCRwd2ouMThhVXluOGBvbTQ4WTEzYU9IazF1SDhmMWYv'@;
put 'KWs4bHZGa2BIM0g9aTNIb2Z0OzFIM2NnLjwsJWo/IXcwYlU9c1BARip3aGpXITE+JlVWNVFWY2I+MGJaYSRrdWh9Kld5bXVXeUhecSR7V18wUXpSR0ZwZS9BOGprL3dPb1hHUCtmN3lzNCpJRHglekYvZyxLT1thdU8zfXdhemtlY353ei5XU25APFhmXTwhZTRuOGA1SENlWzxreVdKYitCTGw4'@;
put 'N0h4JDtxKipaSnlbcXhmTnxIZ3s/bjpsdDFdeEdyL0p3N2grT2Y1YnBdSmA1Ki5sZjQ4aFkudzttK0QpcWt6aWJzLyRhZkJmZmo0eFpqbUo4ZUY9PmAybzhVeyZVIj1gZj1eUUxrPUI3dGNxQEBueD00WkNxdF5AZUkxMUN0I1Y8dDJ0bGY7LHZUVTA8ZD4rO2lUQVUwMSxxRnpNcnVnUyJlYSNn'@;
put 'PyV3T21tODlEaWU6RzImZCo5KmJSbkxgaHp3Pj1TUnFCQDs1VWVIUUQ1OXBAKjR6O1ZtXllxXSY1emVXYW9lKTFRW1VtbDZLPGJMTkttWSR2RyZ2SF9ZfC5iMCxpXm84Yjd4Sl5LKihuN34pKXoyR3xFcWshRnY/T2E+bCZjQ05+OWF3PyNKcil3fXZfJEtoMVckZEpQT1VvdCRnNUN2KCZ5c3JF'@;
put 'SFJaTDlXT0VFXXYuTF9pSkRxZ1pyN0p3UD5eS2xOa1taRDAjb2cuS3hRcnVZXmNobWBdVkopMytFajRfUzUpODZARlIoNEEoZF5uUXdkfjwkPTw4YHoxe3Y4bks+cHhwKEokXUVSKSYpZ1VxMXFNXiF4JjUqa3xiOzM1blt5LnI0RzV8eH1efXEmcFZNfEptfEZSKEN6XTszNz9yaDYuNUxqUU8u'@;
put 'LjZDYWdNQ2QjU0A5e3wuVFdqLmApUnZbcDtAblRQMSVHMl9mQTZNczgrP14qZStmc0RuMyhLJTdKWyVfWUUleVd8RmMhQloxQG1NdDZfN2JFZDBDLix6QUEwKVNBS0NeSmVjaSFzKVArPTE/Xkl0RSIkTXtIKiM9NUB2LkxTanx2dEJBQUFBQUFBQUFBTWN+YUVnWy8lZ2lXQkpHeSYmakZYLltk'@;
put 'JmpbSX1vcDNgUmxaR2tkY248Ylh4Ri9IWllna2tHSCxBMExjVDM9LDdefnF3O2pVLFl0Xi5EZyFPPFh4OXBBdDQ5VjY/dkdpeChYWXVeQSlUNFFRNTtTKFVoPEo0bmtiNU5ZNVlDRkwqJSR4Omp+aThPNHNoRVJtPUxNZV5idX1ZZWk1ZmJ7aXQmXnh1X3olQmJGMSJBKn0kMyVSLzhxYT0qeC9y'@;
put 'KDUjbDN8QCh+VCNZZXp5XlQob0p6RylIU0pRR2RYRWhZaT8lViIsU3ptXzh5ODw5b0VQZDxQIyZBJlJgd0UvJGxpLyt+aHhWVl0xUn12KG0sdU1pZWk3VSZqUEsmRGlCQG4/aTxlNTBgM3BrIks8LDc/QUloNys9ayJEfUQuSXolcT0wM2txUEFfISlJYEFFVkwvXk5NZC9dNkhleE1Fcm9DSEV2'@;
put 'VnRedmM5XyhIKj0oRXNtOilSJEo5UD1ITFRbfV0vaGw1R0pjVl85KXg+cChDJFs7YEJxLGt5P2ZBcTIxJlI2dCxNPiM5RCFyfVUvV3whLFVvSXIpfUN3VV8oIXZAKVkjJGZTVHZuVlYmNH0+I0grblcrNHU9LiFpXkxOR0IyQWxYak1ESFd6dnR0VSJ7SHxwOnNEXTgjeiRUXjZeRDJidE1KWUJi'@;
put 'fDhZSVkjbnVsYGVIZzwkXmo9YTV2NCtQX3ojMiw8L3k0fVFzbkh8VmdyPHhCR0t1RyU+Mit5WEFgc3NAPiJkJVpvP1JaV3I8Qzxwd1hWNXBaa3NCUld1fjFXSnVxLipeLiFQYSlNPmxUNnNHPC5tTmNUZCZJZmY5czd+S31aZWU0a350VmxCKkJdQkYzcHZQRiRWejcjXzU0ZUQ6MTJUdDRIWENn'@;
put 'aV5YUHdacDZPJlVgRFt7TkgpQCZCZXtiXUVBZyUpdVFkOD81ZTQ4QHxHLz5WO1hCW3QxbXlZI1MhcUFHZDY2fSR1anM3PmNIcUM2KX0keDt8ISgrVz1SdE4le2tgXkksPEZhdUQxRUQjNSomIUYxL3V9M3ooLCZ4W0pXenpFN3M6TktOJVV+citXeV4kSjNeYmIieG9aZHFfQzAqT0o9NmdyJkwv'@;
put 'VFUxdFB7di5VKC4qelg5c0YvdDkhZlFwV3lFKSQ7JjVYPmt7UGpxdDxfPCR0Yy49fEBMZTVdP2thdTNlZyIkdlhTY0wwU1koVF1KOiZDUGRMdTxtYnRnJXR4RypkT151KC5ec3Q3V1VPP0I9TFJsaDcwbjY2bXNORXdVZj1ZWldCVD8zL1QiLykyRSFvdTNkeyJGMmpraHFqe188an1+YCtXaXN6'@;
put 'fl9Vc2VjTyk3YltTIkVLMkZ0X0grUmZIfSxVOiNeSkpmYmBUIUJRUnhzdzNWUn1acXQ7OGZSdmxFNTVdVWI4WSh1d1UsSnwwTyYyOzlbbjVMKFlzMkkjVSF+VDkxRStoUEpuSTVEOnZlYXQsfForNkp0PXpATVl3QkVnanYyfGgmc0Y6VlBJfH5lI0lbLFNafjo9eWR0ek8kVkNQNk9RY3xPSz5r'@;
put 'ezt8cElLc1lsc3xfb3s6X0crZmFSd0AjKUg+YCk9O2llfipDSkJ3Pk9rXkN1SCgwUkp6WDJ+YEgwOmVHUiIwJVBRMyshTH0/UXQ7TiZSeGJJQmBmdjwpPjs3UnhXTlk+IVMsSDVFJXRwRGo3Y1hQaCJXNSEiP01Md3IqWUVIdDZ0NXRRdlIoNTljeFtLPjpuISZxKDdoNU9sdWBxUzFabGwpQ1Bi'@;
put 'MkdXeDVnQF1DSUlGXzJnVENUM21RQjpiUjUuI0M/Ql87R0JTfUxHTDl8UD18eWgmMEJyfCVVY0U9aGM0QjFBRUdLNldjUkZ4W0gxcittPDViS2pTbFJ9JjpRVmtpS2h+ZzYmZElPKyRucGFsa1JhKUE4SVhwMih5X2VAMExpMlovflcoeSYxVSIkX0Voelg+Nkk0Q3lRRz5YLnN0KERbe3RKeCpC'@;
put 'YSpqbShuK0k/UGZqTFgudjNPPWlsNGFEdlJbKkpqMUdUaihKakBTbDpxVkN7bmBRdndOaHQqZm05WiU+KF5PcD5CZi9+PDJBOFpAdzB6dS9OZXxYcEEycnRXdyU3ZjBxPUYqN3x1KHspcGxPd3Y8fC9pYnRJIlp2QEBqa2VgNFtoSyZ4RzRlU0dYaThWcHdKRjF1O0xGVEtabmNQakdkTis+anJY'@;
put 'LHRtblBddipOMH18K1laSG4/a0UmPlh9ak9KNnI1LD96fVBCXkUsNFFmQVBka3ZhWVJERyhfTmRMTnxlN2BDPX1damFdaSE7fHh1RDxnTmgyWig8RyRMOW0hdDdFUixRRVJUYkkxUTYkXlhHYz9bYTgqNlchajduNjc2TVV6a2J8dVNsWSMkbFlrbzg3KGlJfnsrcHg4Rio4SW9TYl8qRm44PVE/'@;
put 'NUleX3E7IVY4MUgoOXByd3Uiak5Bcio5I2ZFaV9yd0Mzey9IW3dwY0B1cFY2fV4reTg3ZzBEfmV4RDd7eDp7JVp2MWw0XXFeYm5qV11XXy5rKUJ0a3tEKFM8KWlCXSJWYVQwTU9UaHc6Z1QmNU02V2hIJUxxa0JJWWU4NT9fUjNOQ3lYdTJjczxQYSVNPU9pT1ZpPmg/MCFLTUYjNjs8cFBMTGU7'@;
put 'OCZxP31geiZQR312fUs1T1trMWhJUStkM014eUQhaVthJnpALEQxJmRTInlCMzJ3JUs4aTYpNkVzZD5+UjEwfF1EJXRbdlRlM3JzMSs1W1NrSHY3O2grNX4/Vms4IkxHYlUyJEo3ZHw5eXo2IVg2TkZUNkB2QWQ1bltUP3IxQ2JNc3lQK3xYI2BISUtsWVdMOGFAelo9O0ptZn1DJVZAV1Z+Lmdx'@;
put 'bl9zbUcwSS96Vk8vVntDOy5IQ3N7e2JSNU43TyZsTnhqYWl+eDAlMXFJZnJVMzh9KygrWiF7Mj49UCNQeylxIkkjODUsQS9+bUhdKVclKkJuYmlDQ101dCtCanpUKTtIRjtQdklKeFRfLDZaTjRITTwwIWdCQksyQTIoakZUNm5WU1I2eX1HITo3QiloTXU/LCklUzUqe2tOSD0rSCZtVU9qUmRo'@;
put 'MltdayhgNklhP1plLDtZZVVMU14kPn5WbDBkLDhLb1RCR1g4ZldHJXQ/S1MmcEw4K1MwOnlLKk97aDZCbFBQJU93fm8wPUZVdUt6LilJS2BxbGQkQ2U0QHQpTE1zejVATEdVYUZQWjM5MDtaQUkzYkdmV1EzYiYyP0dZa1plKEJaR08rZUYwQmhPTG1FS0NdbUlhTnpKaWlgcWg6OkVyTiIkR3J9'@;
put 'YUgqVVpPTEByT0NOaW9ZbShfVG5MejUmWz1qI2g0JDtvLyY1ZjRvRG01JkgsS30zMTNETkBbfHp7XjhqOlFxajBALn16dTkhczhQMTp1LEFbUnx1N3oxTH5bOFF1VnNLJFtqW258Z3g5TXspMVBpNkFqcGVgOXAyTmpafTo0U1tkMU1HIUc/cXlObkxRTylPb311UTI/X3Mxbj9WOChzXSFNI25p'@;
put 'VyFSaThzS2hpU31uVCxSIVpFQiFNeS9YcHY4aHZYPmhUQyg0VGRjMDR6e2QwPDVFQ2Rxek5aZHRFVGgjZ1UjZGd4TCNmZXssNWBfW21SenswYSpqPjQrQEFZXW09SixEezEoVy9sanpSRHIkXV9mL2NtODNKXjJCWUpsTzhhY01ELzRLZExueyxvJVtydlVrPipFYipmW1d9P1RmaGE7e0Q8bSVQ'@;
put 'dll3QDN0KmUyOnFWbjg9X2thbzA1Kkx0RkVOd0d0XUhZIjZRNVRKbVQrd2pFXk1VRTsuPUtzUT9tRG4/I2tMMD4qdTE0cEdBR3FdKCxVMjZFYytbYDZ0W0IkM0VmV3RAeDtga0RLSH0+P0d+KzJMRygjWVB8YGBVRl01dFo/eFtuMytaYU5HYmVHPWlfKjM5elZBQHVDdG9DWSM+dUNGez5GWFte'@;
put 'Pkp8ZSZjMjV1cUIwS0pOSEZnKW45M2dETjAkZHklYDtObyNDe1pDXTRIZF5NR1p6d2xbakkjRFAlbWZdS0cmRjQmeXU2OmkkLEVUOEtoKkY7UmBqPDxkNS5eVXdVKzl2enJOJUVXNUZCX0RCVWIrdj1UeyQ9MzswWU9VLFlaOlVVIjYvUzlUUnMpQSRtM1NddVFITmlod1FCTy57JTpvbWNzV3Jr'@;
put 'SFtMWjA8STpSMTl4V107QXRNMixEPTpgVDdIfWt0YDYveXAlNXFKT29ZQUouOSo1anEvdW8jNlIrNWs/Ti9wa2VWISRQVD4lOVE+OSM5bzcpTHhdWUU3QHZfVUdKbnYxTnRlb3A0PFYjdHshUn43dlp4QmRSYkNeRUlGb3dnbXx5MEMybl8jaVR2Iz5lRlkwMUJ0fmpGamQ5QCsvMVhCXSwvMyVV'@;
put 'N05bbzRkTmhaJCZJV0BEVXlhJClJPE1TXnFKemtSXjlzb0srRTlMVFprSHpFWzhAcW5eVGkzSXVjYzN2WXRQZ2xmYylNNSN1UnR6PnFbYCkjU0o8T0VMJWNfVHxAJUpjTEA1XXxEWGZALFd0dU1jO196Xk1vRGlaJlE3OmFYMFNZYCI1P10ifUNBcXF8SWxFOmMub3l4a3MxUGB2c3ZscC9tQnhx'@;
put 'QUd4VTtNaVFzeElZXVkzZWE2bTNIST1ZO0psI0U1UGdKbE8vX2RLOGVMd11TNjo9ezh1NGt8N34zKU5AT2xkKlhMRz1SMz9APExleXokRTF3KCpFa25MJWZzbCkqfnkkRUlhSHcuO0c2dW06bXFfVkRLXktIPms8eHEyZGhqImAlI3Z5UFJkczM+MWg7d1BWamhwKE9gKiY+KFpnODs9JXttXUR2'@;
put 'KTExS2djYlpbdTR5ZkJ1WUwrOjsxaElMT05VTz8oKGVCJEgheCYuYHBoeiZkKnlxOHY/T3VzajRTPiJPPShaXlJdV1A2YjB2QDtQayxzJEhpYUFvfEh2SDtoX2tWRjJjUS9oPDMsJVM4Tk52QXFfQiUyY1lWQExhOHR4cVNYe3tNWVNAZnlyJWVMTzNAdW9sWmprOHU3PVhBL082PGZQQFRfVEJG'@;
put 'TW9uNUs6Kzt2Y35zRkAlYj9FN0FrWHB+eWRBSSheSil9Ty4uazZePUJjMGo2R3ZhUFk/TnwzfCFbMHEvUS9pVW9ANlcjJmpGQXlqd1Z6SXZEI3FUXlhqeD5sbXxuIz5iQFduaV9AIWl+PUI2Qkh5YlRlQkdSdUopPEx2ImJeWGY+UiRzd2cyc0lYTTdiQi9MIW5oOnx8JVhDaUcxL0NXWT0kQnJV'@;
put 'Qm5bLFlFfiN5VywsVlcvTylsL0xNcGRlSksrUn1ZZTpINCxVI3ZtPHhjbWVtRDA3Z3VqdHdUOnFuPyVDUzY4RDA1OW1EKzIpZixaNCNCQGwwV200SXBrQkNsLGk+Z1J+T3AiYVoiWn5rd0psIUx6USUhP19FMEBwb3V0NyMhS2ZBJltdJSQ9YWtJVXVsajZ+ZXNNem02eSFKdTAucXEkaEdrXnRY'@;
put 'LD9hYDpddVNgIT5iMEJfNV48MCFLI1c0KXFsITYkeVZTIUhkLmNNPCZAZiNYZj96KDRDWkFuQl8rUCU3Jl1jQH1YT2tAS3deQlVAJUtQWlZkST4jQyFjRyFibXhDYjQvVHU7Oykyd29bfTV+TGRhaSgoMnBZYW1MSno+I2tnV1ZLYztMRTlwaCkxcSQzVW9jTzZYP0dKWTM1PjkwUnsmfW8oSDVm'@;
put 'QEttcTxpei9obmhvdGFPfTluKyVnMCh0YnBjNnBFI3ZROkV+Y3VEOTtsOUdBTjQxQCpERUVKaHR4Wm0lRjBJOTxxVjgyTHBBQWx2dlJJMGFeOUUzPmUrI2xafF5aakhId3IvWWV0TyQmOSRKXWEwOXJeaEtkIyReIjcqVXl5a2J5ejEje0hRcCVWS1Ixd0w/bmh7Qn1NUVZ8QFpofV9BenVXWDsj'@;
put 'SWg+d0B3MjBpQzcmQkBHeHp9aG52dlNaOXxbZUZyWGxudjI1I2Z9Z008UGNbTiRlUiMlOUlSXyVrNjAkVDZWQ0s1OFgzTSQ/I1VzM0FhWXF4bHgvS1BeKyZMIjBlODNZNmltPzVoOHBDbVVzbGZERGp7R05WTnExTElOTnZ8TWsjZm5jUTNgcnk5O1JeSWZiYXNEL3F2e3tabnsuZlFvUC9FWk8u'@;
put 'JkYyNm8qS2Q6ImIzaXB9MD14eyklNT1ZeyR6ZD5bI20zX2VUQ3coXkFSIjAjX0M2KlFAPUhaNC5YYlleWkwjaz0laGVRRlBIYSY1dlRObFVHVTJXJkYzU0VmY09QUlglfGo+RFRZLCElaUVyI3tiYDg1JkxxUHRzKkcmKFdZcTVyMkZdaXlWVUhnJl5Sa0kiMjRtbkpTSGo/U0ZraUAoKCt1MEhi'@;
put 'YUYvdHVDa1MlaClCb1A9SnJMJDF+fnlrPGUjWmted3MrTWN3azElcnNUJEtkLEFTbTBeSHIqeXElI1kreDN+RSZIN3wyfWdJITFMUnBDen1DUXsqIkZ2Z11pV2J5IUh2bDZPIikoSzE5KTl8K2JmSXlsZjdoS1RvSXZfKExgZEtPPzRYSS9VWT15VCwuRjpGT1deUmdGQnJ7O2BHdjx5dXlQWTlV'@;
put 'TFosfWUlQDBjc2pCaWs3azBTUTF1MHpqOnlZUXRhYDh3eFpOVFtLLjFUbE1ZT3VrZl9YO0w3TTB4Ll5OfG4hby9PO3dmSUYqfH5PaXZeSVlmLyFyU0o4clQ7WXI6RXtgTFoyNWtnPj1VYTo/enRsIUpKOkF0WV5nPkk4eSZxMj0xXkkxK0QiJV1dal9bdkZDdlM7eHd9U15bKjw0ZWJ+JVtEUltK'@;
put 'WDpgUnx0STlDQzxAMiIqRUgoSCspUjlxXVQ3U3dwZHAweiQjNm5CcV1GaX1maGslM0tzP019e2ppMV08UjhocXprXjhfSzNIS258KzxoezRibGh1IWFUPHNbK1UhJUMmJitKbCxALCRCQT1SMnwvYjVRaHoiKTl0SEdvIn4vRE9nUThqNmAoZS4kOFldUXc8T1BWc3gjZF8zaXlCSEJiMDd5cjQ2'@;
put 'SX1KPDY+dnZjZEU/Un0rZzlGfDJNfDgpQlJrS2RLZGRdRjxQPj92K2p7S3UqJFl3em5KTS8jdkdRNFYsOTpnd2pPM2xbMmImNUVkKkJJKWdlQlJzMjgzOjpfR0JkPzA0OHZwVXsjIj4zYD1Vaz9bMVN0PzM0TGBAXTk7XmZ5YjJ3aCNuV0I0MSpJNi44dHRAIWYob2l6TyJZUX5EIWYoS19wczZI'@;
put 'c0duVzE1QnBbPVBNU1MpTXhdIW8yOn1aaGd8Y0Q1WTlRI0tveUB3VHBqV01MVmUscmZtZUVgQlZ+U1R6YFVFWD5iZT8kNFtzSHNiaVU2NGR1UUQvYV5BW29rRCtwVX4hYC8mdldYTmVyZW9Fd0F7VUJLZEJtI2AieTo6c3hvSVlFXzswaHBBS2N8STZpJVU2aVVJO2pBeD9FKjpkUmxnZiQyaUVA'@;
put 'eVJwN0VHfXNxP1Y1ZCFZYVNuY0g9KE92fXkxWF90a152JlA5Z1ZuZlBRPExQJipYL1U6JWlZYlo/Zn16e187azIjI2RhbF4vczYoUn0wK2Fwe003K3d4RnhyajQvKjpQaGJtIU1mZlJmfil5SToyUnQkbEhCWn5kcSM+bHRMLilFO2xEQUw+NDZWY1UsPlcjYz1kJmZFTihRdUdCeFRCJXgjRS9w'@;
put 'djVbQV9dY0NEaHZrZnhmNVJfOm1MSTtjMioqK2FHWWlTUypwWDc8bjpnT3lIVkFxXiFPZW8ke0FRMWFgM01zaDpxUU1ldD55a2EyRzlUKjFkSXRCYW1dSTFyRFZqOSgre0lvVT5KZ1V3T0EjOCgjbWY1KCU8R3pzYHtsYXxoZX5jdHRUWTpuJjUzaGZkazNdOTBrQSlzcGx9IywqNFEvWzsofTBM'@;
put 'PXIzNEtjZU1dWV1adnVWMlR6dH5SLDlDYiNNWFtTdTEqXU9QTngxOV1vaFpsQUddJV8veT5zUm04dV9wQT5XYSUwInBbPUdpT0xHYVlvdSZkXzFwOVtNKEwpeGE6LFciPngqUj1hVHtTe3MiUmZYKXFlMnBGdkE1M1klclIkMnVWW2toOVBnWnFVQFliIWpqak02X1hxSjUwKUtwTHlecFcpekM4'@;
put 'M30vLmxtVFYlNyssX21mLDp8LEZEaDBLSFhLQjU8RjFMW19uak9jVTxMeDRlOyxhOnI/QjIlRFZRW1ViVn50fkFbNlhfK2soa1kyOSQ4TWU7MmF7My49TEduTVVmPDFqcXFnYSg3dHxnPlhiKi5dT2RxQV8hSD1sQnk2VD0xZWpvN090WmN4TTVkVUVJPT1oXlRLJXB4YS5RZFE4KCI+bXRKUGdW'@;
put 'Yl43blh5PmBtKm1KX3UkbXdIJU1LRGt+JmJZUVc4JnBJWmY2Q0MqazEjai88PT1sRlpLJD8sWCRjLm1aLGJXJFZnZk9bO2FCbWtkMTVsXzhuOjkoWyRwQi93RlJrLFpLZlt6ejhOPkJhMip8L3Z8bklHYHclVn08S3RrUS9tXlF6Y1hEfSZLL0QoR147Mnk6T1smZ2lka0k5TE5pLFJSSUJ8cTBg'@;
put 'JlhbfCtPREBRQSJqaD0qZjJOTzt4bXs9TjNQfUwsOHlZdnp8ZEpzdG5SMyZhelpEQjBGPyNPT2N7S3JgTUx0KUshfmBePyh1dU5rXUloQjUlXk17T2REIT8yRGxocSxbREhNOXp+ckZ4VndEQnpIcUchfGozX18vZExNWyosUCtFfGh5aC8oXXRAUFRVe1F3OTQrd3dmVUJ1bkYkV1tTZ3Iqel1Z'@;
put 'YzM2YU0mTEMkNHJ4fmQmU0c3OTVWZlFeYn5lPElJU0ZgOjdoTzIyUWE+eipgN2BqUiQ6Oj9hckkxRyE3VzlxR2l2dV5vd3wvQmZXbmV5SD0kOD51NVg3bkN8fGhpcnVaUVM4K2lkRCpUPzRaZDpOYFZ1YSFCKSohUktuPWwuWjAlNSJpak02OjxLNEs2VSFhUHVNfnltSEFMNixAJEBXQCsqTlhg'@;
put 'XVglUiVFOllDSXlpd1F9VHIpO3AuPGEsSVEsfX1PVGRSWkNKbEhVQjglQGczM0NORis+N1QvTHdhYl8wPCI3MkkzOGgpZCVrbGkkZ3U9Rl11Y0ReU2NfYFI9UHdjKlV4N31jU1ZReGIyUWAvXl9uKjBMLGhzfmFQPTpVIncqV3V5SnRYe3NMMG1ZYEhVN3VHO15sRk1qPDNOOWleYXA/SUs9Z2lf'@;
put 'Jm9bNiNafjIyIW9SfUYqNEU1fkRNZCxFMFgiR3cvZioxM1ZRJSFfR2RCQjRoWEIjI0kldHJUIzIpdjoqYHJwVX40ODZhajojZGJAL1E0IVVUbm5VOUpJPmF3aXV9UVJuaiRMI0BDSDQidEJpZj4wPWNiOXQ/e2F+d0BHeyQhPmdUYD19T05tOihjZVBsKTdJY1h2Vj1ScmUuU0wublBfZnJ8dVVL'@;
put 'UTQ1Vy5dRCtoRnp1ZjNTJGlBbShjXWE6YXEyWDI/diElc1gwLFU8fWJbZkczPj08MUM4elVIbFFzeSVzNjRUY3xuaj5PZEpJel5sPWYobn5RWX5OWGBbW0lFbk59QHw4VTkrI1BvPFU/JWR1YzwyV1Q8cG9UZFNNSH40VnNnPmttX25TPFIwN09aLDFOMXtTa3FjJm9wPjdVXVI+NigpUVp6K2Jo'@;
put 'Q092OUNaZ2FraDpwKUY/WCJ8Vlp2P1U5MGliQV00U2o+RX1NSGFPSCNHUGBORlpRYmQ3QWxFXV0xcE1veXt+Mk85YGMjYlhtd2xHYEsufHRQcnQ0QSt0Sm4sLy51XiZOck5OSVp3N0VXKGMlRl5AVVR6ejJxaDw/N1RpaHVpTzRWOzdSXndUaD4lLHV7PlRSdTJqS0AxcVZPQ31TQC5xSXhfdlcj'@;
put 'LyZZciZbKyV2fXNgO3duR2dFUGJydDBeZ05XJHk6I2dGaXQ2Nkk7OG42fWF+dSVnJmB2W2kiWTQuMnNwIztXe0owTzcuTkxXKXc/Rk89OGAyKG0+X3R3SCFPM0lJKXk5WkUyP2JZJCVVZS5gRkh6RnlfZm5LZ0AuLHQ/PlAlN1ldZXo+PSUvdXk3YD8ifUErUGlTVV5oW3l2UThLLjBXTW1UOHEr'@;
put 'fGZaUUYqfH0hbEFbeWFLIyF2eFo9eGp0OF56RWgubGBTOGJRM0R6aX1WMD0ufTcmZzFLOHUjYSZuSipwKk47MUljMEJdL2tFTC5hXmJCMVYvL1pVQyF8dHswVko4WzxseyFjYEF1UXpZOG1fWS9XSyFwbkw1dVZ+WDJYOSlqLiFaQlJ7Rm5XRkBUPEVrW0VMOTolZ3BqNjpeWzwpPVVlQjtRb2N0'@;
put 'JkFVNGg0QildT3JZLjgrPmQyWWMuMipqQVVGLFIsOikjMzZ6Zj58OXp2S0AxQWo9ZDdAMFNaUWMhWl1SO2A3e3hIQy47JTVkeD5wV1NUfSpNRWM2MSUmM2ZUMWdePTF6M353UD0xTUs0VzFFR0R0LG9fclg3QHY4T3ZlPS8hMEA6R3hUNU18PUpRWG1Oan1JNnl1NEhlUWYyZjd5R1Vae0ZYRmVl'@;
put 'KHhjVjR+NSZRckBHbUFMSHB3RypIb0cmYU8sfCJifSMhIUEyamxKfVc9NHdDdiEuIntsO1dMZXtsR19MQllGeVIsYDJuXnosZiIpb3lzXVYuMHtXV0JKSXM4bWF+ezJILllWMChidz5ea34lSStiU1gxUzZQKGtjKm58TDdiTCMjVyRIdFBwKXxoaGd2fmZjOWFicFk8Zl9nZnFsMXtnYiV5R3Bk'@;
put 'ezBqfmUyen1kKHBKZH43fHlvOHlsd2c8KCpEejBsXVN8JHwxUThDOUJ6WVZ1TjBLOFVtMHpGYyo9aTRpYylPVVR4e1Upb0g6ZUg3aDJmSDFPU3x7YylCL0JgfT84Nmp4InZ2NFtfZTIsKUwpSSJuTW5DbmA7WGYzNX1TfnwqVHp5QEU/UXE8YiYuV2RESjs6XmlKKXxzO2gjZTBQZDssVVZTezte'@;
put 'RkdAT0NjbENmd0JNPFlTKDMqVHhFamhCRi4kNy91YFFWP0RTc2tiOV9OQUA+JCIlT0hMakduNWU1azRgKn4+Wn4kfU8sSjB8RChALzxtZF95VGJ5RW4pRXMoTVN+MEZKLGR1OnpdbnpgUERCWltIQXRKITokL3U/OSpUS29DfCFCJXB2TkxgY09KXVkpbkpyOj1wO0QjczBqc2VIUGsieEJ7I25S'@;
put 'ZCN0SjteNSY0I1ZaOmFZdV57Sm11PiIub2l3V285KW9XcHVGUHFiQSEsaCwxMXpQb3Q3PFpxLzUhZV5WZFZZVFFiNTk5cSpsJVRzMTZAZzRyY05JZ2YrWT5ZYy5uMkNFYiU4Rk1yXUc/TH5venJSPFksUSw8L2RONFFqNT1kUVpvIj5gUVRDIVQvIXhxJlFgeV1tX0A2fVReKnpnKHxganMwXmo9'@;
put 'dGlQOWIkeG5WJVZjVnI5OkNTT142MVU7KkZIOyUlc0E8ek9QQTtQb1JnRVZLQzdqdkVRI1ZrMXBNYFl2WFs+fCN6JnV1cjhRQkJQWSNYRkJ9aDRsWlUsNUdYTVt7YXVVdVtrNGlpdWxmPEFCJXpZOmZaVzR1eU06MjxOcWcpd1hCL0Jzaz5kdEthSGxlOGg8YmIpeWFPSUt8b1hLaztlYWZ3NlVY'@;
put 'Y1ksOzBuaG0ieURLT3k6fStVXmh8e11sPE03MyV0OXwmK0U5VkI9e1lWaSYjR0tyOWFFXjV7ZTtkK2spfGdvflEuKXp3Ryw0MHVDPHc+dDNrOm97e0dFUCpVSnBmMnB8aURGSCgrXU9TKXBQeF52NDR3UWleQFEuSz04dkYybyYyWSVFSzdWbGBHMkY0RkEvXXJ4QHAjbkcxbFhoYmpaM3ojVnlP'@;
put 'U0UqY2M4TkgzZnVNPURrUihhJHhYcXI9T0Z9Wi8+WTVgdyhmV308T1NzalYuPzF4KTJ5cS9FZCpbLnpUMXxwfT5+Ul8zL0BGWjNVMiJ3RjxbXzlubGN4JjEicT9BbVlpW31QY256Lk8+ZWRiZForcyJBVjEuMk5dOmRgfV0jXiVhLCsjOTBlJTssc1JjW2Z9VTkrXT5sW2UvU11RR1VjY2dFIW9u'@;
put 'UCh7cjV3KTZfO0dWN1oxNFQxcSp2VX04Q0lCfDl5Ym9mYjA+Ni46eVRyUGR+ODsqbjEqcV81PnFNZVNiQTpPSFJ9Ok95Xl0rNjxiUUphITlbW25KekFKa3NGSmQ5cXRVemZGd2FELE1abS5WZ2lGI2EmdDQzKDcvZ09zY1ohUEc5NFI7WD1USEw5YEY6bSg0Qk5KS2BeZH5BRlVoeV9sd0ptZ1tU'@;
put 'RXU5P3F4N3wuUUZPPldGSXh7c3hSdmlpViI3US9NSXJLaHRscnNTT3d7e2UlTVsjRUBKd19kM002SnJMS0NoPjcrYEt4ekpAZS9na3RQbV5uOUtCbVt7KENeIWMzNjpzfjV8W0wpd2FWaF5HTnF+fkl+PTZOWX5WZ2VzcHwocFtWfSI7JGwzcDolSzY3RG5tP3wzSGlSQk43Pz5VQSt3TXBIQXJ2'@;
put 'c3teLjQuaHBjSmA0Oztze3hLTn5xZEZvZzk4XzZ8Nkw2KmNiOXg3eWh7OFZ8VkxZMWxQWVhQazJlVzAqezhWTmR5KkQiInxZUXw8dHI/IW87LlhDJHBzYXZvWSVENFdpKFZnQXEoaUROdlloajMsbnhZPWdmMSU9Q011QCEoaVUwU0suVTVSNEIzQkw7JWBuV3clOjlvMWl9aCwyZXg1KExFOU9V'@;
put 'fU5UWTAuOkdEKSFKSFBFU2czU1FJdSpsZldTayIlSjRvVm13ZShaZHBGPllscXJvaComSDxWTUBRbXBfRTdsKDYsRFUjS2YmYmVJV1tQJF4rZyQ7VF4yUCx6e0pIb21pWDF8RCNCXzYsXU5RSGt6eyVFemROdUlpKyFsS2hSY318Pm82d1k+OShleD1PSVp+QHomYjIhIkRJbnImfjlQb0QuMUQi'@;
put 'aVclRzIrI2AoN1liSllyc1Y5PDd0RyZeNFFVeWciQ11mOVljRCFCTSJXQjsuOzExITxuRk9IJkBbWFYoU1lTUC9aKCwoPDA6eWJ5Kmx5S29IVDssa1NRVSZTXz5AR3NKQDVSO29+ZWNPTkgjLD0jJTc6SGtuOkhSVm95MEc/YDZZNWB6dUZmclt4cTp2QkBiZllebHprWG9mOnc0OX5vLzJIbX1I'@;
put 'UHRCMDohdUJBMSFHKUUjemMwZiVscC8xbGosXjNKdXpxdjt3XTdHYytHYnRefGFsNltvOGB3P3xEPk8xM10qR2lUTUJWckRzK2Z4SzRkJDFUL20sYzJLMVFUa09ZZDFkVnd3bzkheUtLalhldzZpKjM8b1dMZzV2T344ZHxHdnQkNTR6NmNjWGtaJVdVVG0lV0dsIX5CVUMyNCpUQmM7M0Y6V0No'@;
put 'NDRvOEUxQl52L01Gcj5wW0dHRHVXK05HSVdGJXhnKVtCbE5CQlpDInc9I3tVNSw6KTBeJlVHZUYkR3hOZWxDcEQrYTZ1eVchKUYxODJlJVh8ITN4XURFS3p1eF9GZyNOYWM+PyY+ZiZSZDl5OEIqKDBdQVA9Py42VF0rUS5HKkZafjp8XUh3OV1mMWFUJCZmZ2xtbX0kZSM3MksmPT0uUVQ9JWdX'@;
put 'VWZofWtHJlNvQlt+N1t+bEZpSUd9OCxCbWN1TiRLLkpVYysmSnR+b18yaFdnWU1KS0Jfa0Z4bTRfR2JOWyU2azdwcl4ofGZPaUl3cyQqZl5lZmhjJiFjeDFJQ0x0MlVLYnRKZk8pfnsmKi5IJmo3NT1ubSwxL0BAUH55T1AyTjpROmpFSlMoNWdHMHwzSG5HV0A2VF53XjN1R2h6NUMsSShodFA/'@;
put 'JkFuTEwxRi9jbi9LQmZePUVZTFdabSZifDl3VklxUWJKbGB+PEN7Wm1YL21dO0YhMUBxbU5nZW1lT0FyKWNmfDo7T0JjclkxN2MpeVo9PFljSl9dYyRHVH5fMnEjNTgkaU4sI0NzekQ0UDdkaj1VSmRhVTU+fVJpZChhPVIjRiR8VnAyfCVEJFpvRFg7eTREQnQ1R0g5UkgvTTJxLyN1ISNyYWF8'@;
put 'ZS5UZl1PSXwsQGBuXjlLeHY2bnB0JCk0WltWLEhdKlR2eDIldkgqUDh2P2UmJWpmOmUmOC8qNThhNCU2K1AsaC8rbUQxI2Z3XT1AW0RyMi4uKykmZ3hCOkpycjBCSzFSSyFMUilxUjcqbGZPIU8yVHZHT0hNUm82Oj1zNXxTcG44TEghWm8yQCQsakZMempRaVlaSCJsfW16eVcqQk4lWG0/XnQx'@;
put 'Mn1FZSx2KFZofGBDPExfPFVZaiEpLl07O115c2hRbENOY0FYMXYpYkNoIU0hcVM3YyZ9WWZFZjZQKWx8YDBGcz8pZDlLeWJ4MzViVGJgMiV3Jn1tInkoX09ubkRPOEtNT0MjUClTTWRdeEdWL0Bxanw9KSkwdDs9cFl7SGhJUWw1TmUkRm1PMTBpKE8iI29SO14vfiwzdEE2LDJha1Z7fUBtTGFJ'@;
put 'ekE5UDNeS3ZbP2dpfDMuTjdMTnROeGNlTiU1U1JzWm1PWVk9K0prRFJNdVd8RHpKfllXVjpCIkRtNXFJNiQ+SCtkM1shMkFvbWB0Tm5QaFAieFtIeTB8QH10K1ZyaHVCKVVyIWB3bXlfR3QkUVhscVE8aWVteWEzNXl4KyRtIVk1elAuZDhBYX1SekNrRmtlWVVmS1k3ImshJWwqWjswP1ooUTZb'@;
put 'MFFvMXpJYk1RfCopWGlURS9SM0tHQVsvVEBFaVF5KUIwRHV5L0FyTVVBfFtle0pXZkliWmpBalpFaD5jaDImbFs9anV0WFVNYjorbjY7bjE9fi9XYDAmJC5qeT08aWM5dS5vMH5tU0NyPG5DdCp9NUEhRFg4eXp7WyJUPi5ae1FUPHVEO1BPNmA+L3w0SFFpOCs4RFNHWzlZXzk9ciEzKXZre3Jk'@;
put 'bSx9SnV8KzcsRHtzZHJ2aXNgfnlzOmB2UGl3UE1tRSpWT349QFRmRHdOMypaLjNCPW1VU2QzInswM2NpZnwuOnc1VXk+fnhjYm80aV51VjciVnc5Q0Y0QnFXTGcxJVFQaT97fEk8QWoxQyMzITQ7NmAicFZYTCUpJD4xTnFTdlJ0RWpsVlY4N3N8T2smZHc6cXIxaV8pTU5EK0hvZGZIZyk8Xjk7'@;
put 'MnhOPkF5VGFSUHs3PGYqcy9PNnRdUy4pKE4+V2FVbSVbTlsvIixoNU4qdW4oV3gzcmY1MCReJCliXS5gbnw5Qk4pNH4xX0VlLFhzb0dWPWxhNnB6ZitTKWBib0J4a192WU9tZEVfKy9Hcll6TkpHLyVpfHhzM1ByLyhLQFZdMnhoRFFAMkBnK1VyfEVeS2kvaDpOWm5YRHBde3B1NFkvZUNzITss'@;
put 'ZW5UYVtKQy5HTk9PbGtzYDgjazwuTktsNSIpeG4hZHFWUSZmc2N1T0chRSlBb3ZbP2FaNSI5ME1XaTpbJWRgKihLWnA6TkdXMnNuY2J5OHwxNkdWTEdHYGl7MitNRlI0OTdsaXlbb3EoQitDfWdeVlcwPitOYCMxWU1xZ25VZVNDa2Q5bSlEOH1kSSZ6JkptJU1Ha3QvdzJEbigzMF42eUk5R3Rn'@;
put 'O2ArOnV7KE4qcztST0o3IkM+VkwpSlE2ZldJLnVWPmQlenwvbV1BVGdnQzdqRHpqaXIjWT5Gbj9+Vl9JV1g0dE1OP2pxZnZCY25qZFRmSDJuVlh2P0ZZUV1pXUpBRjJdXV4rUCw3KyNuOGF1LEhHMVZ0enc3UXVDYmkoKDg5OH1YWERsYkQkZDdAU0MhSTUueys2T3d0eFg/VDpuJTpJWD4/dzJu'@;
put 'fFIiekxdIVFXVVUhXUlJXnRKcDJeY1ZgQTkvOnhUS1lRU0tmKSlCJiw7NHVPcm1OQkxQXWZCYnJpb3RxWVs6b18zMlpWSDMuSXZ5ZE8kYTdQayJ0Q3o+Uzp3VXsvaU1CaXg/WSxsOT59fFQsRV89WXc/dlp2QDRjOTF1Y0d4L3sxPTZOYkNQaTlJQFVaUF5NXlZWMF1oQzV0R2tRU3BvY0ouZHVO'@;
put 'WVVOcmBHIWYoRWp8MUUpTDNnVkh2MCpvVXYzYn4la3YyQipVTGxjWmQrQnJMRXlfIiptIkJuNUIvcD0vUzc/SXd1VjRrOXQ7ZDJINVA+bmpIL19tQlJvI0t7bV1OUkpgbmspQCMubnVUQTo9TE5YdjNaR3JWSE04KyJzeEIqRU9QbDN4c08zZWVZJlYhPE1wXlhvZVlwJit2IldVOD8oV1hkJmdY'@;
put 'cyVkY3J4dT56I3haWz07eWRKMVI+S0U7ZlhubWJRQmspU1FwSFl1ZyJrZGhZfSpNfUM9UiRKfEMxbyk5OE5ZTS9xZDwmNE9kPXdnOmRII3UrKk5PPz92cTJ3NkRiITcyPCVDJCV1MEVYcTgybWdpaX5YVShBMVM9TE80c3FUWWxdaC41Nzg5d04qKHQoNlM6ZyRTNGVnR0peRUA6M0BjYSMhUHcp'@;
put 'Z2JYZ1R4MFtkbzNhPDpWcGBTOXBOKEdhIlRLYkwiOjJpRXtLUUVofWJEXyteKVlhOGRtKlFLQGgybSZ1ZCRiUTlzRi5sN11yXmtzUC9OdltOR05FRHVAXzhJY10zT3w/X0xFYSxeQjorWSlfSj1dNWhbPldKOFV8ckw3eCFGOXdnKFtyP19CeU5pV1ZWdEoic1d0SmBBXVg/SjUvQ1ZIQipfUz57'@;
put 'R34yeEx+KlI1THlDVHRidW09IUVUXyJkPXhbdERVLEdJeiVhLHJHPDFde1pyRn15bVp+VU1TMEZjcEMiOGM8dTFfJGh7O0JxeSZ+Ky9YcWs1VU4idkZdNjdAU3MzU1VrYTk4bFN1InwpK3N0elsyKX5IK14lOXspJT9mPyo/M1VQQ1IvYXV6JnRySkM4YT1TdnsuNjRBWT1FNXtwUChQVmk5R3Y5'@;
put 'SXs7fE9KcnVaaFhgWk1iTklxPWJSUlE0UDFZMjJ9fWk3bmZ9NlBrWCNYdS5JLzxeZGtobHUjMyUoQTRTQF9yImZaa1BYcExpfXEmKnRWYU1Cb3dzW0A6Ki87eCwoKVkkWnEpYVJnUiVWQyh9fDRLZX41W2dFITxlRGc5OFhRVGNTQGgiXVlWKzBEWmhFLkYjZUcrdlgpNis2W2MxMGAyUVUwK1pl'@;
put 'bjR6ZSlndDZhX3lUcTJROHc1e2wsO3tRUHl0KSJ5eEl1SmA3bncrdGUuQlhENCZQUyJCTCo+ZyQqKFBaSjA/OENFV2pxQD57SmdvPVV6O0A/SylpSjdadjw3S2paQkhIfWFtVWFQTE1EWiYzV0ddYDFRKX1ocWc4T0cmaygjYjtMdUBzeG5EcWRxQncvbytmbEwubSMhJjUlUVZzbW5ud0FKaylD'@;
put 'dUYpcHZnVyNYQCYzPVB2cUVXPHxmT2FeaSFuLixRdSEiZFJkQGY8VTl1SjU4fkFwVT90e3VhQls8MD1dLDB5OUx7IVtaME9wM2dbakVLMkR2SUxfV29ieCpAcXlMR2NyaD4mIXxnK3BTKStvSmJIV3IjNWdvUCk0VVRjZWs4TnY5N29VdGQ2fSluSEZhYTtLUCg7LDtkVyEmaFdsIWprejpfPmZN'@;
put 'dHxUOSQrVG9LaEt0alVZZ2guI1MxRkFsVD15JGRkU3hfRlIvdmovfCN3c0k3c2wkOSlPMCVAYmxPYkhQPH56LHwoZjZKazt2Vk91XjBSMmM7Knxpfmksem0xPSoyXVtYe29abllVWihLPHlfLHdKIXtFYzsvWlpGV1pudn5KPT4vM0t3PiNgLDNYJU81YVJwTCp0YF00RCxrVS5lXWZaV29eaGBx'@;
put 'eHIlaGw6UDsvMTFSWCg8KywlMj1GaUx+ZD83PjtdemM5djVQZnhCRjcuVVhjdkdUbkMjJDU7Ry5AY2lyNHFsUm5RdiRhWGtGMjlEXWUwXWV7bHRFclkhajJQMF5iTFA3dzZ2OSMlLntjdFtveWZuZjVTKV5TOExQNi4pQiIoKDs1R31jbzJsJGVueGZZIyJjOmxxXm44YmpPYEJpKiFsY3koVlhU'@;
put 'QWN6dHdRQCZbdzhbJitfUDhJdyteNUpiJTVxUiJvYkRCbTx2Y0NIXSFlI2lVc0NLdUdVIjxoPjJJZXw7dHEwMWFZIyYwaGd5a1YuK2VPc1ZEdSE9MSh8VywhV1dIQ0JeNihaNHpQKDlETS85Yy9AbnJhLGorOyhiKFdnU3VMc3FBZjxPfHJlYVE0PThieFteKCx5IWA2XTV7KTlMWHd1WEg+ZX1b'@;
put 'fDJrdkwxKDM7aik3WD5dPX5wI0RVJUZfcVorb1dDPVh+XVdEd0trY2NFWyokcTxFV0VzVEJTSGtfYm5AW0w9RUpQNz0yYkVgPCMhWkIjUnJAUEJJTT11JTNqSUZRayhHLmtpLntfaD9uU1VjWUVjWS52Y2ZsNUc4UjohInUrajp+JEoiKHpCTWZURUJ5SkokMmtTamN5aUgjUl1xbnFhYH16SHFT'@;
put 'LjlgdjsiSmNKbFhFTHkvJFF3Q2xsVVN3SXYxKUlXU056Um9FdGlxTjcwQ0oiYExnIT1CbUJjMDtjR1NZXW8vVCFzcj16en5LKCx9cUpEZ2cmbXQqdlY8WjA/XmNzR3s/QkVIQzNIRilqYnt+NmIhfGZefHs4S2NlW29LTUB4OSI7cEdTQ2dhaVViNVlwND0/VjV0QlBgIVZ5aEpPQnxIeFhGPWB9'@;
put 'amEiPSs2e1toS0t6ZD1JI2RlMG52enArXkFudFY2PlZ9REFwWDsuaGVQaSNaJUo9fV53RXd2cDpNTlMlfnVKKD85bjZzbE5DKEZ4S3hIITlIT1FzRnNpdXY1UlRXVWlFMjxILzY8bClXIkljU0BFM28iOjdoXi9DWiI1cClQOmxAL09fbihPS2hKckI3YDVUdnJ4OVtgbDZnY3pEZ1gkPkY/Z3lI'@;
put 'MXRpbVZ3N0U/JmlDPS4qeHVwZCFDeVg+JjIvOSpDaDkyYypkaSFHXz9fODN5YyomeiZvako5PyhCVDJFa35PZU4jPlluIXNvJltzQ3ZXNF4/PlhBI2ZMR0VVSnVwOSlBWFM1ZV5aZF9MIXx4N24vVmwpMU0kezpvM09SLHIvNHI1WVFsKDtqdGgxWV9vTjBKS0BaOmA7aHVaVXJmYGhYaC5eV09s'@;
put 'MEhJe2E/VjtALEFmLkFWUVdHTlJwW0NeNC5UUDNTbmtsSkBfakZrZ3h2dmhsKHpVRmpjZ0cmWlU7fj1JV3lgPDVGJjpjQCkyZ1UzIkFIUCs1WFYrW3ppd3UlM0RxZzxwTHB6TDlTc3JDbWB5KC8lZE9wW1heQFg+NHZNW29IWTxTUHp5fUIsel1EZlExUnRMZT5LLGppbGE0WDwyUzAyX1B9bEsu'@;
put 'L0x+JS9ySC8rKzE9blIpRVU0X0lOWGpfeDRMWWs7aGtYPSo+fisyLj5vOnEheC44Yns3NHhbPklTTCN5bT1FZSMrbDp4c35NZSUqNk59Ikk1YHhLZzFNR3ZKK25wa15PM15DL1ZYaWBwYkRINnw5RVM1byVvME48XXc/Ql44d25gWUg4cTBjOGB2ZW1dXS8hM3ViZ0pGKFZdfV1YTVkweXIidntI'@;
put 'dHVNfEtgant7TFQzYGk3QHlGM2dbVC9bci86OUd6Q19wKU1ebC9obWdDPExZa3N5bTVyOUU7TXZ0UiJBRjB2YyxFM3h+b3hPVSNkQjhPTlZ5eU55ZHAjYGRbbXVvOVZ+I2spbEMjR1h+RzhaOS9CdkVGVXA4eF9OWV5RZl0/eilYIjY5WlQjeSVNTjgvNitEZzxkUVhsQDhLYntFNzpAQHg8ZTM8'@;
put 'WW4kZClsa0wuTz8lXThJfHZNL2shNnx2S3JEeGc8emkoMkMhd1soYnYlSF5KZVhrW04iIk8/SWJrNEdQZD0vPTRdU1AwcSFhYipsSEZrVS5bIThNbjsqUndJL2ZRRXYrQjU9dn1Lfnpaa0E8SipmMU9zXVFtODIyO013NzcmcTJ+TyNUeGNhNEN3cXBrfHA5Lltyb1M3YmlXWVB5d3VDeV47fjgy'@;
put 'eD9UPzIsdSlHN2doUC4rdnU0RiUqeTV0eD4rJDRJY3s3Q0JnXTFgQFB8UjIxeXQuZz4sfnsqdnE/bjxuezgsOT97MHc/PUptK052K00vMjVKQnVlNFRoYExEY2NiemMvNCtnczIiUjtgbzRIfD5ZMEAsI2ZjSWNiOXRfekhKN3pbJk5kIS96Nmx0N2dSfDV0fHVmK09pejMxO01Mb1t9WGpwZGlF'@;
put 'cSY5T0ZkVHVjWmEzWjF8STJGKHRnXjUxRH47Z01PNjJ1JU13VnNfQ1liWV51QkNwQWYjIV9udmYwfTZQOHcqcCtGVjErMCxieGdEaiNFbFIwe2U8RSEicmheeG0sZ05IRE5QP2REOHtgIWxwWEpGMj45NDFqLmMvMyVvbVtoJS89VyF2OGVIT2F8fEM7fH1LNyVbPmlBSmpHN3IrWTJQM0dYdzcp'@;
put 'UXx2Z2JXT1VMTTo+V2d1VHpbOjkmaWExUFNVVjBGVSFgL153T2x2PmNYO0hWWEQpdWVrJSZSP1Nge256XS9KMlJVbzlbIk53Q0wzfTFaOE9jbHxlV3c0Kns4Mjs+Rm1WcnRXbkhkfXc0OnFac2cwYkBgT2tVe0g+eUF4ViNnU2FGaVRHOUk9T20/NlZrNj19Ny90NFY8OXUvYFJtPHhbTFIhd2lp'@;
put 'Xk0waERfRkJHKEU2WVM/K34oZiZUJUd4ZUUxVHg5ZEtyPTA8bXZkM2JuUE8iOStpOS8wciglMStmdDIrPF1VayxkITxja2d7Nlo3Q1hwI2J1M3prY2JfYyohPzlOOyEiTjF9fGVFP3AkRUg6RGgwZUk9PXJGIWx2MG15UU5JWjNeQ2N1PUNtWXZiKWNmXl9FLEV4TDUpIT0xNHx1Tz9hOlAkW0hq'@;
put 'cGdBMWJFTFpybF5sOjVELk5LfXM7Kk81YF8wTVR3RnV2QSVCfC5idUs5bTpTdUtrNWt9SkI2WWVHPnY+cXVDXmwuKFdlR113SiNaPGw8czpMYGIpRGUrcHYvJDFyWikxU3M9I1ZDfXV5VyxpZHZNTCl1cUpSS3N7Mix+enpTUkxwQUMpNEk2QExFL1Z1aSExKl9YRnk9TD4kaSl9TCFadEo5UlYq'@;
put 'fldxW01keTtiMjRSREIiUnp4PDVhYHlkOGFyTGozdURPOENSVC5LU0NnbTxKRTxLMHFzNGImdkxgbkdsUD5LP1AvJXEpXWBWKDJqZmFOO2ddR1Yhc1pUak9jU2FkYlcmJTdpVmd7UllZWyVebyFmQEB0c1JDelFSLzZVZndQPXFmfHE4VGI4YV48ZGVkSngsOFZzTnc0YjxmfmxeWzxse2ZmMT46'@;
put 'QFdZUF47Zj8hUkd0aTJVKl4ucD9bLFZHITpPJWQlTnA6Lnl8JUVOcF1XMHxIa3NvZ31yYlE8YVRTNGxjbztkcW98NzQwUnNhajNXeWxuZkF1amdEMCM5NEBpP1Jnb3wuMiheN2U4PU5bU1BAISt8PFU9N2Flb0A8SSZbbXZSbWhWeGA/YndgL1lub1lhOHk3cnBIMzJaVX5sdV0/Jm0wKGdVfWtp'@;
put 'aVZ2JD8sYkVpJjl5NEokNSpCWSlPbW9senBbKVteaXp+ZD0hb2M2LkliVWF4JmNXIX5rbkxgPUxEJXVmbGI8UTNsPypnbis6ZllaM2M+NDplaF5QXiUwWUxybTlxMV15dXJCOG0oXkVVUFRWYTJJQl5+OiIjNms9MGtmPjE0SnZeJHVrZUtNQ3t2XTszeHNtS1dzayZ3RT9jKyw5eUQ7U04wWWl+'@;
put 'bCp6MHI4MHY6WkFsJWczYig1SHxBKCohVWtaKkJBYGNPUSp4JG5ubyp8NEg7TSglYTteOU06VH1NP3tofnpDL0lFO1s0PXoyIVZYVTBiUFJ9Wz1KTDZMOVBVXXt3ME5yUW9YZyFpL2w/aEBUPj1lRzFec2lEKCJEP2JkcHFAfGxNQEs2cGApUzI7PVR0c2hhSEBpKXhdaUMoajNrVFRwJWpQfE5N'@;
put 'MGtWLncoKilgJE0sRSYoUnNfekBUYGZzVnR6P2FlXXl9OHVxWUMjK3dbSll3YzdmSUU1OExQI3VzTSt1dDY3Qy8hPk5CfT9scjB8ZDw+c3c5Xlo+cGAoL0N5WzJ3fV1fJTAzXltmKHZaSTg+JE5BUSJXJWo/YXVIQWhkZSNpcyohWWlxYV11Y2dpa2trU3taVDtiWyFOU1ZHVH18YGk7cHEwTCNe'@;
put 'ZVluOzEsRCojdm5FMD1bOSR6L0NxaU1fKSlRKShhQ1hoaFgmdzYxTG5nO1Bed2lyL05IT3BnVEdXVGlFODdqLypsY1VZbm16OSY9fUtIQiZ7RCNqKm4pb2JDYCJWPXJhJXdpQywlJnUuVkJkOi89R11gKXIjZmgjTSVGMm0mQEVMbGtYQiQrcUk1VyZAb3Q6OTxPakJQXUlsblgsJTJESDBWWjRJ'@;
put 'fG5JI2RWLEY+a3VGQk4jZlZIdl1KXVIuVlgwSCM+PCYxRSRdT2Q9N0o9ZmJ1MlA9UUhlM2RlMWpVZm03PVVtWUxSaXJnejs1IXdCJiZAUkRMJHBHSFtgdFQ1QUFRZ1tmIW5RI2Q9R0JlbC5sKXxAO2NjRVhldXNudHFGe0VpOlltPzgxMFhmN1N+cEh6ciJZb0g5UiMmdkRLcThbIXtrfFlna2Qk'@;
put 'RmpLUnk6a102NDdxej0yIk5Mc3FTTnooOTU+XnY+SXxkUiNgckwkZFtfUEthOTQuaF87JStpNStUSEczTDx2ZTtdbE53ck1tPWNiSGRrKW5HVk9XMnZKeGIjcU98OmNxaURXe24oXi82ei5BYEhEUkRsb2k0KXpJJm00YlJHNCV5ZWBZS200S0ROVGVROkNiazY/Rnp6cXtCbzM9LmY3ckQ0ZlZO'@;
put 'JCtHIUpEdlRveSx+PldjVDZbJHokdD8uWDsrMm85VzR0WnZwJmFuM1s/cSs3Umh6T0s0JUpeJVlieE4pM0MsKC9qWFVeXXVxSTJoQyUzcU5wTEF2WUVVWD89QDkkW3lzWGVNImNZUk9BNTw8cDopUkZXNyksS1hOMit5SSVYSG9leD49VCEmY3A2YVNwOlZVP0xUUiNyLColenhkJC46Skt6fHJt'@;
put 'YTlIJTgkQFA2WnlecFF0bEVlPj0uUGNXYW1vfWpFLF5DcW59fmtLQXQ7fXNCMShUUVo0Lz92ZXEuMWpmQls7M0REKnwmXVs4MEshTFspZXZsQUNrM2BeIWthQ1lsPj45bzl1ZD1BaSJjXzMhYWtieDxGUzt5IXcoM1RSYnpTPmYwJEdYYzs+MThORXRkWWcoI1RNdWxgWjB7eXVXbShsbHshL1ki'@;
put 'UjNeMm11ZyMsbG57K1ZaJkpTT3NAcG1yWWFgOVJLV0hPU2l8YVBMfk9aOTtFVFNZN0MsfHpeMy93VUdnKFZDTygrKT0jdEwrLGdYMXFaSlF1fXJtYC8mTEMqND8qSW1oIW5hZmtSIl12QDV4YH1bdiVmMUFJU1EoL0pBWHkiOVNXUEljeVhKUHtCe2EpMHhiRVRWNHosKVgpSm5ZTFQ7VW4hTEAj'@;
put 'TX4xdU0/X2tVSG4mPUZYSj5lUSspWH1QZlBCfDY4I3FCZnFBbSN7aTQsVl94ejAmaUthPXpSUnhLQWYuSEFnSnEpZVtiOSZTbnlkNT03dSF8PEtUSjVsUHFUYSNeN0R5bTUxO2U8b1d6TjZ8WnZGYTJ6UT1ZaUU8Y3FvK2lIUmklMzpXN0B6eCpmKzRzX15SPXBScilFNThISClkKXRXV3xvYFU6'@;
put 'cUx0QEB4YWd8anRNNUZqNFRuKTUhMDZ6OFg9QUg9PlR0PyIoeWshPCFsPWRmdkZLNygidDM9dkIsPXc3RSlGOm5TRnV7OE5Qe013MDldeD1bPGcjYkciNDtgUDpgMGhZQHAxQUkiRFgsIXVGX21kQEpTMTlSZWZmeCxtfSZrVURrZUUhPDd2KFYqaj04TSlPREtLTjAkYl1EbXR7eXhNTTVpelQi'@;
put 'XWw5VyksOTlCcjxtSF1ML2dBS1U3dDZbXjR4OzNsej4xPmVqfEYkMFQpd3g2alNCdjg6MloyeUFtYThWWHYuViYhVnNFPlR8STBYSGY4MjdrLkZ1P1U9XiNBKkN0MFpBQWJ4e2o3NERCMm0pNz1SSUYiQndAaXlCR0doN0JHQ3xZbngxU3dRLEtHMVk0fDxoZnFYVEhncmJYe0tKLG92Z1p8aHln'@;
put 'XUQ8JCtPeWdNdVNwL0VFOGtOY3JvRVtwYjByO3wxTlpWXk1rMW4zOzwmIVBsOyV+X05aelRWLGZbMWBGITo9V2c+Nig2KHo5bGdhc1tbeU48SE8peis0bWRxXnBLfnxlRn5XVyt+Zn56JG1EPVY0VC9TNlpuYTBkLHJ4NUl1YVlNeVZAfkpfSUMobmIsTUx7Rkl1RHdlXzRnOndFUlpoKjI2dzYm'@;
put 'Si8+S2x6O2QkZnE6U3QpSnEzOyg0JGxwZ1EqTD1jbSNdeFN+OXombHkuWERIMVRITUIjSEcoKkoocGElZEc2ZW9yMzA7eE9SSDZWYiFDVGl4aUFJZCQ8KlYxSXl4VllVJE0iKTBVZyV4KlVmeWRQbkYjRU9geV8uKlA2KCt8QjRQPUchYEU9PkVeQD5wamN5cWBecHk9LFN4WHkhVFtHT2pxRTwp'@;
put 'SE12PHdwUEZAe3FwTFNocD16b0pdWmo0QyshYFZLP2BXSm0xJXV0bXAkX0B9P1kxNn44OSsyR0ZgVipsWiVUST00dU5oXWZ8VFs+OD5GIlp8dXdCIW9EN2d7R2spakFfWj9ga11POmwkeVRyNjpSOHpdTWEkeUNsLERLeE1he3c9aDx+WlgvLnBVMklBQ1M2UTpiLFdWXiE/dkkpKl5SVT5iYzt3'@;
put 'dHZdcGVbKFsuPkx+UU9YUkAjSzl3Kl1veCtQKlkrUXk+XzZgOWxfRGd6I0dsbSlOaWs0XTRXUDN8UGYuJX5rXXArcjVPO213My5kY3NvR0FRZHdrQiIhZkVmX3tvZHFGUjklcSUpY3A2Z1Y6KCI2MFZsV3YlfnwjW21bXnF7d0xWdU93WUhMVUBkV3ssZzRITlNXN0ZJeTZLeUtTRiRlU2dXT3Qz'@;
put 'cXwhRU41XmBeUVpxe04iRWZkOVMubl5mOithSGJ7YXw9SnBdLG8lOTNpbkhnSUVmaCpDJnM0byxkZyZ8cWI9T3xQcXVtQk5OXVtCYm5Ec1tYSEhtPlVXOUEyQ112KkU8ekk1XzBmIWo6NUlWKiVxOUBkbU9dLjl3WlU6ZzVnalNsNWA+M1BmemNmRSVFKColQzAoNSlrY3xLL1JSKiVPWzpvVWtm'@;
put 'Qkt7Sy59I2kqPVcmWGMjLF1vUSNGSDYvSkVnP0l3M2pHck4sVFEjTjckI0JQTixYWiN+cENDc2RFX0hYImUyfmBHdyglXyxpTnp3R29+WkpmRkpLKlJfKUZBNU5PbGh2ejE3a1YuWjZ4X0NTQ01SW3J7NX42cjZDYk9+IkoyXXROY0pAZTtdUUVPKEhXe2w0NSlTcSFEcF5TSmNNPE4rfk9xMld8'@;
put 'd2dfaGk8OnJfZ0oqJTAyeTtwU0NzaDB9dDRwejMrR2hFZTlmN28/fGxjPm5EX2JePk5gZVlxXVNleF1yLmNbS0ozOihZNisxP1FjbWIzPVYsIU14L35aYjN6QnQ8TyZtWzlQNCFbZkghSk0md1FtTjowemEudSVjRkkoUDhjQE89ej9tLFRoPVBgcygwTWBiYGw0fSxTdTFPdlpVNzFadWZBV0d+'@;
put 'UmA0RHxEUjNocUxsNHdgOE9MQilxNiNZVDsxRC4pRXc2OyRsXT5+TjFdRGh8eDp2Z3VsJmIyQ1dUNk1xX2BoTT11PT9nPHZLQjtQTXhMdCw7UUtEREB0XVc4QjA7ZjVEdT1kVSNyZXtwKz5NZmFDMzI6MWRuPyJSZW5tQD1VRkR7b0BLWXhIRlhhaE50fFtUZnRrfEJ0Z3xdck9kJVg3XkokOWht'@;
put 'Li4vU1ltWV1XQ00oWmE1QSgkVkxlcHNkUF8qSW5qKUQkbk1VSTdJPXkjSlFlKFV4S29iRmx1QEZ4KGl9VjIhZEMmaXg3Nyh4ISY1MkcuQjBYMT1uYGs1TDFgOktQU2olNmEkNUEkRWN+ZFVALGJrLn5fZCp5dilkPFt6X1lRIS8rU0VWbTAxOjgqUDN9NyM5MEVASl8oW21mUmgyMlJhc203KWlR'@;
put 'XXkraF1hYU9FMEliXT52LD1HIUJ0UEZwfGVYISV6QE1ZWihuYE1aWDRuXk1yKT9VVyh+S0dHb1twNn0rXmt1YiNveFZhVzRffFR6T0NLZXZvIlJGITd+QCQzRTNbNDlZOFZ8WXlqLD4/UXgoYFhUVFdGOzV3MyZRfmxfTjRxJWF8bGBhI3dtNFVQdko2Z3xuKWI0KXM+bywvbEVvcz5Yc3Eld21t'@;
put 'ZCQpQUpXI0RkRTR3aWBhOXQ1Pmk4dTYhKSk+TEJSW3U8UzUvWmszJSIyRkF5N3p7SVc/OzMxMWgwZjx9MDYoM25wQW5ILGdNbl8xUFhPQzVFZTthYTQ6TEtpPUA3TnxoNGM+bSlpX3JEWmchUGs4WyJLXmFnazxvLzhFM01oamA2W3JvR0JfPSFoQ0UhaFFUaWFGR0xDJGIwUm06PWVzPy5oZmFq'@;
put 'Tjtxcm9Veik0OldKQXdNYksvaEpSeEg8X09qand5Q2UpbDlMSCFxMj16eEMydCskZX1JLE9mNHg8fThFOSVvbTMkVnV4aGlvQnUqSig6JXI1TjtrTDQ+U1IjPSw2ZXxBa08qKmgiVzMmc3MqdkxVOVouZVF3JmJnflZmI0Y8ZDpON1EiNngzVUc0fU13PkF6LyFLQzFLL0Q8cypKNV49cnY+MyFb'@;
put 'U2FyPjtkbWROZnE4RkF3Xz1ucC81IzlHY25YdTxdUWRXRFE5PG40dWJSW3h4dmRqbVU9OUhmW0JRKGE6c2RQMCpjb2VJdFpaPlM1Jjd5WlVHdiJlcl8icjJfNHlqbXZ9cEcyWWlpfUNkY285ZlloK0xXWUd5N2hLKl9Nfl1NKFNkZmR6bmFlJXBnYTxAdV9dYl5hNl59MldOc0ZOT35tLFRiNCUi'@;
put 'JihqdSQkezUxImVzSG59MTpTK2hCS1YlTiRnaTExfnYrPFQsa2N5NiFTISNYND1wWzpyRGlXbUBhODF4Z11zflRaX0xoSjI0OyIpT3o2IW5ZU0ZkbD15dzhQKVpYUFEpZ2tpd35nJWgrc1daXWlFWEoqaGQobmp0bno3d198XSk6a0BfZiFTZlF3fEYhOHdBPTc+O15HejlgUHVQTW1ReTZXTzIl'@;
put 'R10mIihFREVgMHFWVC41YyNiJmlhfEdYVlE6Iz0oT353Ymc9TzxBcyx+JTo3LEVQW19PVFsoeVNdfSx5YCRXeFRZWTUkfDwzO1I4LyVwQThHKnVZLzxdMWZ4TiVWRzBoPj5NNEUvZW8rPCgjM3xGI2BrQmt4I21ELEh1eGxIR3VHKklRRnciWD1RYzttNn44Qj9hWlNlTCMmSFRYbV8wRilQXlZT'@;
put 'Ky5KPFlYZyt+YUBvbW1yJTYiNWtgUHtaTi4sTnFkJjwxdzsvbitbM2dGfT0yLE1Ua3BlVU9NcmlHdy5nK3ovNip4O0BOWExNMnhDcjIvc1RzMUAzQ00rKy8udXs/aldQJldHbyFZUn0vY197az4hMFd0eXlPO2c3MUhAJHtqckZoMjhNTWBOdWQxZUBbOD8iI25zajFRXiNaMnU1Ukh0Jl1WX0A4'@;
put 'dHJIbDtuVTl2TjhZJTA/TTpuIV5JSGFNa29RMmxeJlR+Wj1oYlMuZlR+NUtnJEN0TXpgMlRpMk01WUUsYTImcVAkdkk8KHA7aVZTbmhtNyNBVWxOQm86Ml1gMjteSixMZiF6dF1YeD4xPkN8RXZMPFA7a2VHKU5UYyZAKDo+UGY5c3BHTWFYQF9Nemh6RklzTDlRLiM+SyNYNCRLSjtofGZmIW9y'@;
put 'XlJOJSkoP01yb3kwN2owQy5wVlJIaHVySHBYaWZGYlN0aDBpMDh6enpyUFd0ZWxfbTx5Tj1BWU5gSjdPXiI+YSNAbnFsLFkwfSZLXVBuOiM4fHR8Z2dYPVRlI3R0cDdMVFhPMGU5c1BQVno+TE9Zal9+MlVHI2pzOXkiI3ByNiZPPG9KTmN3aWVIeiQ0JkwqNDVYKms9ZURGdU1VNTkxYD9ieE1k'@;
put 'eTJbVl4xVmw0UWpaeE1WOCg0RVZDMVJ2OH1MTC9nRStlc3dtVkIzeyIzaD1TTl5tIS9lZnxYSkJsYGErRmEqNylJZUlwVGRUQ2kzKTJ2Q2MycVtEZk9Wc2I/S0cxZEImR3dMKExEen1GTW1ySi5VZHEzXS5LdV9RWHNJJF42WjBrOF4iWjFab1BHRFNAO2wpVio8YVc6S1VNLFhlaUxBNjMvQHto'@;
put 'bWdGTWVNaDN9USoqb2UsKSJGXzkxOk1RVDJoclQ3SiI6UmhxJVd5UF00UEwkLl8+Tl5VJFF5RyRwbVo9bW0hLn46TmJJbmxIWkFrS315LFFGTCtKKFNoXjRUXWZFZTh0bFNeSD9lPk8vWUBefEJ8ekw4fElPeCZuUntUNlUrMDtuN11KbkhRdmpQKHJSJDdOMis5dmxmfTg+bWBEaX4wU0JwZkVQ'@;
put 'U0cyTnZjV3QrQkFlRVE1JndYNV1eWUxOTDppRV5laXxiaFAvPEJKLlZlMEBYRmpWPnN1TGVzO2Q9JUpTXU1+Ui47O3ZaZEE4WkVbXjAwMSRdS081QyQ+cUJtUWY3KGx+R3lHe2cmTVF3bDA/YGIvPF1UeHAvQmxCOC5zPFRgdXxUPUk2e11+Kkt+K2NlPjwjJFlGc0FVQjNCM09MQjxYVl9rRCVV'@;
put 'YEk7KiQ0VykxKWJAJHw8JT5OfiRFeklOUyJOfWdPQnoyMjxhcWVKPCprI0dxK2Q1Yyp+aD0xYSx9dSZpK2cpbEQ0W2gmaHVvbzJnVklsSUJZdkR8ND8jUlBzR05xfjZ3b1MrPm5pX3ZVS0dLUSpRQyVUPyV+WHQrTD42TVMvT2c0NHRXKmlOb2FPRENOXXcwc1JpWShRclUxbyYqXVAibmpYWTch'@;
put 'Nk03M3kkNm98SD00WGlRJUBga0YxPEVMZGJPO2pwdDYlaiZnL30pJThrYlpLMi59NDI+eSRFJW1rajZzU2lfWzo0XTh1LixiIkRPYyp3bFoiYGFGPWpFSkk4eHY5OEssPXJLWCYxR3ksaHpnV3dHfU5AYl1ldW19aHVCekxRMk93c2pORG9LaUBFNy9yXnwlTj8me0dvIkh7X2dwYTJzYlI1N35Y'@;
put 'fXVNckQ/KlZya2BfSVp3XUxuVEplSm9IdkVNbFhGYng8fFdLL0YhQ2BjKCFjYSRlOHlEUjQscl9HJld5dWxxVk90aDxfXyMwaSlWMHl3Kys9SFQqdmhgUl1EU1BtPCw0TlhlX3hSOF12PXFXIy5wVG9ETHFRZCxfez5wYXhaI1RZKn4xI1RRbixJRmVWdl4pP21+fjp4bSIpaTN6UFRVbTNzL0gl'@;
put 'ckFZMy4zOjUvOz1ufFBAQzN+MjcrNDMyNEt+I1UmPXo/OnQxclNhOlBgY2U4ODxbaF04JjpdTFlmTEIseVIhYlk7RSFPZWlSY3whJSRmX2lJRT0kKEIudnRNTlg6aWBHeip2Q0kvPyYzcmAoQER0NlU7Ojk5TTFQRm5GRmd3RmozWE9AfVhlRHBuc3I9cjRxNT5SfkAzI0JJRWlmbXYoWSwiXmZM'@;
put 'ITAiandmZyhjSVR3ej81e0siciV7SlFZWU1hMGl7UTFrKWhgaSp5ZmlNfSFINEZGfnwkWVRJNmEmU0pyZGMlVzleQG4lTl1DelAkYlI6XnIqOzp4PzFoQVJpfl5oLjBAaCx8IWp3Kl1UYl5BUj05LkdYVTlnOXo4MHFTeEJBIWhLQUYxLjhZZUBjSV18Uyg1NH4yIylKJSJRXzI1X2R3KFVKVk17'@;
put 'YjdLdUxkLjY1ZC5yL01RSG9gXmJjQnUiUiRALnhMK2VHbEpkSDFdajBjUlheTF1CX2UiaUtWOywjenksY1ghaXxPYk87WiJKOCMiU35AO3NDXSVCXW18UFVxST92RGc/R2RrUyN4YTRuSnhdb2BTWnpwSTUxfDNQYHxUMjdNRUNOW10ham5eL2h+TU8mM1kpUWJwPnh5MW1gV2ckPVtXPFIoMF1q'@;
put 'ZFYpNGI9U2BVal59Vn5faEx2YTt3QEhLZU17KzFfO1pAIXsvSl5jNUoiRlkxT1dOcjIhel0vbHRaMnooNm41NXZCamwsTHV0UWdNKnEjeXZLNF9RPzY0V2ZTdWZPJXR4WyNYJD5vXm5CKT5neS56RCQsSEJgMFM1JXhTMEhkRlk/I11MVy4uenU5dG9hfDglOHc+OSpvbD9SLkFzVypbeFRUPnRD'@;
put 'RTBjYEdMaTZ8d2QzY01xVlthTGNjPyRZYEt0KV8kcmN5dF1gei8wYT47YDZCJVEwY2g2YmVHQmNkXTE6cnQqTjhnX1ZKSHVee0VMelAjTTg2WC9xKkZCQ0AhaDo/YXMlIzBpaWhfWk4qOWwhPD9+WUMkSll7OVMwSnZjbEtIZHNPP3dCNTsvY3lTVzRRJGpEJXJ2fFVGdEQ2Rzxzbi5KJUI4fH0r'@;
put 'V2MvbXdRRHlUWHM2ZChtS20lKCZTPT93YXhBQXRLOFZKRCVQY1c4KmU4ZEliTlt6UHRvdkNfVkhgQU96WGpNZTVuNllPaUwxVVtoT1NLclJGTDAqK1thcWkyKntNOUsqMXlVOXdObDMjJV91dUx+fmJpPUZ1TSJUPjA8MVgvSy48V2dVKSMjPyMsUU12eTteTHIzRHtBZXx+fUN6TyhMZj9mWldS'@;
put 'KDhlW2RYXnpxTXN5KE0hc0tKMlZmWlBIcyNPP1lHaTBERCs8N3VJaSpCZVd+P0hkP3hiLkM6M1lVem0xY0BuLi9gJX5RKDo1RHQrZklOL15aTyNTcWZBe3B0eVVKVjQqMnByJExPMEUzOHlaNFUoVG9QNzp4MGwvc1NCOHxnZzk6Py8wVFIlU3h5blp1VSlSJGV0ITkwfjRUV09JQVcrOVFAbFcm'@;
put 'YzFQaSNFJTA0dSQvL2ZHRCZjcVRMOGNzfjRAUz1QXVU+Smw6QzFMY1JlT3A1YjJQbXxQPT1FXT9rdyZecns7aTJbRVskVm46dnxWSk98e0RPd3MybUVgR1sqdCY5YWI/UFJ7dSQkal00Yjh1aiZWYVBBMTxHRyVJTnlLd0pDOzN2YV8yJm91byUhRG5lOEVJMGYseEJyaUBmcn4/N3IiSiNUNypA'@;
put 'bVhBMGR8K3A9QmZIX3ZDJmNGTGZgJnB0NkcuT3ZKKH1DZG5IOilhKHpMbn5uaVJJZG8zbEd9REBJO2dzMDA6QF5wb1ZXZjgxNTVmSTFAdTFzNCgscDs7dV85SzQqeXc3e3pPczUqdVhIdlszYWJzNkUyViF0TGs7TEx7aXlaNSxEKm8hNl5HR2p8N25zVzxmLjhObEB7dUcwXlgkTWtAIVBFPk5P'@;
put 'NzZsbT5xYWFXQWtIcEY1YiplSDhbfTExbC5meCQmWCp3IkJxQjwjcjhtekwuRmF0bmMkWD43RHt3cVtuSyUlN1FqN09CaXFvW01bXXVFMkE6QDEzayNtL1RAa1VRO2FiUUk5PUJUJnsxNlgxdH14IyUmV20qdEU2OEUlfGxsOFI5NG9xbllRfnozZk08REdkbzxIe1hRYDpCU0h+cjkwUXE4RWc1'@;
put 'X1NxXihFI2w9RlQ3PzMqaHRmeGhJMmczeW9NY3s7RnxHKW9kKlBfcihOJjY+JTtsOj93YjFlXSZaektAS1lEdm5rW25uJGx2YSJhMWEySFo8QkxYV2RyWlVfUnl7OSM6R2Z6Uyh1eEgrSHsyZ0JFVSxyLkdLU0c7WHJLIldnM0J+VE55Xjs+L3FCUTY6KkhSOyVxemZkKnt3JmxWXXx7Pk9YS2xO'@;
put 'ajtHWiNOZk44Qi4kbUdQUCk8JER3fUlFa0sqI2Qwb15INS8pM3pUOC9gKjRoekNTJFMoOU9oLHorSUJSUERISyVeV2IofVFreFArXyM2bHM5dk8hNy5uNSFPITpQN248TEhmU09eblVWKGRqUEQjSDo6aG9kY29OPFgzNisoNFdlYCsoW0Z6NEhMIz16Q3gzRjFOVU0md0B+STF3YX07dWQrL2wp'@;
put 'Oi4sSVBrTEYxVHgxdmpFI3sme0Nye2gsQjdxUWRhMyx2fjEweU43Kip4UVtGSHR4ez1RfV5nM1JsakImbXEucnB1P0lOajVlL3k4TFFXUl14RV5kLDxELGlsTmQ9eS5jRlM9LnlLPG4jPjt2InsmQDVEbTdHTTdjfEJlP0BAVFgySjsmJG5VX3cyK3ksaz5oUTJUMFQ8fUdgaFUjS1BrfiU5LHs9'@;
put 'QHQ9NlRlLzVAZSlfa00yIkp3d3xyeGJeVkp1NH5WYkUkLzAoOSpzTCwuTmRJZSIrQG0yR2kiOj1MKSsiR1ssRmlmTykzLGNYL20uPUdmTVh0TStmRTVMR0JdVWNCellrNDdIeFA8RiZ9Z2Y+fnBiTHRQdXJqP0JIcmBiZ2p5LjF4U2A5XXsiZ3VZRXpPPk5CJiVJYT9CKFdEQDB1VmVPKHldLlQ3'@;
put 'T3orakVZfSZvNlRpPFpwVm43LmM1UEtEWWZJT151fFFzNnNDbHU6VUZAcUo5cEdGIU82JD1KTl91KG1UT351QjY2aCghWVIrVkwoISpoezNPeXomY144VChIc3Z0VndFZiw/RGVeXmxnLE11eTghTzl8V1piJHJIQyZLN3FHPUdQTXFaYD1GMTphM2BGSDZ3ITUuWXNzQVI7ckU+cGBwXUhod3dV'@;
put 'Qy5uLD9pXnN7UC58WzU5PUJwajIwLFVqNkYpWFtsRXVRO0JeSi50ZS9MMzJsV3xOSHVbZmd3VHR8blgjfl5UTHxdJjA2UE8jSkF7b04+RDhmfUNAaDhDWUVlWHx5LyopXjhYOS8xIyNsL1JeWSFbMjk8aD1Xe0YlTm1JO3glYzl4d2VyaTpGVTpkWVJWUD9aRDhjVjJlMyE1OjxkNFE5R2xfYkVG'@;
put 'KDw8eTI9ZXs0UD5xQUtdUmspez1PNltXWXR4dmBofi9+fEBjdjRwNz5PYFk7L3lKQGhBIzd8UW9YX2dfO29tQlkqIVJBXTwqNzk8I30vZF9ZUClqWjRDdVAldipKdiF9cDR4VzRDWEBwOk96LFN3Y1BsRztVX2xtVHJ6aHtISUgjOFBAI0d1e2E4QXBJPmosJnRXOmV0cyg5L3JlLkZ+R2dEUWFs'@;
put 'KSRSYnRBPSxPR30wSXE4IyFCczY0N09dRFFlQTV9ZH4hV2tXRnVpdDtUYyU+JlIkPWdVLm5nKD9CcVMmNlh5UGlZNm9xMmsrMHA2M0NIbm1JJF1kfnc1Jl1lZjoobyZVbztYVFM6b3koTXdtS2hnWFI/aUlweDNmUn41L31EcT5nQW5fT0dtMlh+d3MrfE9sSWM9WU56Wk8uPGg9M3dfNmJSVUU9'@;
put 'aU5tOW14MG4lS1k0PCE2cFh8bU8jVCh1cEQ1bSRoTkUua2Q1VmNVOyZ1NndqeHJOUXBje3FvWSYrcWlmM1tEZTkwXyNrO29lRjoiXWVIOH1FPW19eHUsI1Y9Z34sT2wudDMhdjs+NjtbdS9pTl5PIkZrOXRBUmtdP1ROIkZwYnMlWDM/cXRsaDhTUCgsanxUdD5VU3dIW016ZD9ScSNfKUJ3IXdG'@;
put 'bUYuWlliU1RjL1pSXncuMlJDR2VTLDcwcCIrfUhERjNTa0RnUFFHW3dJc1N7QkhSe0YldDdgTj5DcGpKZnNTc0hgWXRbSG4uNF91QDY2RWclPXEhVCVmOjJNeCJXIXdoWTFQVi9MW1p0W34+TlgyfSk+b0N5VHVuJXlwZzQhYiRPSk9DOFowNiFbK11lNUZhOCtFazB3Z1ddUlRvdEMoQTlLVDJl'@;
put 'cEVVQjl1QGpgTikzR0RFQl9+T1l7YHs6TV40QXU4azRdUEg7OXV3YG4/ekl5NUkoW24lcnhufDF7b2dINkEmdVZQT3Y/Ry5XeSErW2lCK2NeZENSPklWPTlwIlVbdVtNOSwhRWs8PkB3VyQ4UWxdRlhebWYicCV3Qj8oPWYkTjYhWVdRPG1mNVEqe1spNzNXR3JkZV55TGFfWXQ0a311PyxOISIx'@;
put 'JHJHIl9KNE5aV0xtWG5qQ1pjQ0dlISo6JmBRYj4sRnZCPDJ+KU9vVWsxYUB9WjlvVV5jKElPWDosWzVPVmFCZDU5ZkQ5UVRQfTxMJX5MViROYG1BWEdgPGBKdzU2OS4qLkgyQSJWK3dCfV5mSF9pSHp0SHQ4JT1TUy4yMm9adToqKk4jfG9NRGVVLDEmLnVpYTw0KzdTIz4lNjhzY1VZIUIjTSV7'@;
put 'a3A0UUo8XWRZOU9EVHNJTmNfYCFlWmolWz9TQTFnbW1NeExTeyVBVGk8K3BBZVZmeUtyOUs1XiVUZUFRTG5GVE0vQ2FtLE0uciNmSmNXSnhuWTYkcktzM3Z4VisvL1VFV3xXWlltP05WZGBeeWRVSWhwYCZpYzJfR2lIREcrMSRNaFh7Iix2M0FGJHJGaGJoO0RuND0+Oll4P0FpIXA6eiIpInZg'@;
put 'SE5DS21OcFQmJGdQXiNmQjckaCxKeCs6N2JLS1YwJEBbOkpQezM0K05QRFRhdS4oTk1MTSZhaGF2MUluTD1oJWAzZWlpTipVYWw2bSs0cD1+OUtYb3tZcVcufmZ+LlFIanpHZV4rdXAxbkJVKV5fQHRoYS5JMkw1IitmO1Y/Plo/WCh9bC92KzBuMy42UVZ7NDBzMC5MMztKPCtXUjIoOkgqcEdJ'@;
put 'cyN0dzR8NVR3fjcsUSI4ZyJRaC5MPFBSIUpMcDBVe2UoOztIc2ZFJlNOVzRNWCN5Vm5SU3Z3aDBzSDJgOGptVkJlPHBFLGVRUXd4azw4UVY1fm1XeFcvKTIvd2gyeEVYW0RRNzI4PClUdktNRSQuZmp0VmxtfG1oWjxWJnV0MGkqeFE+b2xUeGskK3RNb3hoe3VHK19yTzBYdGA6az5LbEYuIXxP'@;
put 'WyVYfFFkLkJrPXdOdX41N2c7UVBZSiFCeCpfLz5FN3FHLGtPXztPV05wMnovRV4oVWxwQyxnenBTPnIzb3RefF1KVEBZR1RMelYwezFpdChDY2c0Nm5veFdGa3AmVWN7dXxfVTx6Uz52WXU8d0ZTSHJBdVRAczdZeTJVelAjR0MzR1F8JStkYDNTWzBWRVk7XiYwT2FUI0t+PktKdjUjRT5YYD9D'@;
put 'OVckR25bP0RGViNNdjp7fkFPKlJJUylSRVBJaFM7MzoibHYkaiklNmlzPGxhYU9zKVY+LCtAUnBNS3MrX1hASyNhQ0lTUXpHXjk9LyVEL2p2VFNhY3Q+RzpOdGpBJihLTFJsV05BNiF7ejF3WDhERz4qdlhHdVAvKkUzUj5wKjxtOHVwTHl6eDZYNkByR1IlN3V3aTMqLzdycS50Q0g3VVBoSEEo'@;
put 'YnJoMT1eVH5aeF83XyxIVXAiZihON30/bmF4Q201Ui5AMmhwTlEhfE4mQ3JPXklpcGkhd1JFd3I/Lmslb3Vwelp5VW9vKzF1SGBfIisxfiE6SXBJMUVHKEN4VFI5flpBNj9bKXUje2kjIiZXOCl6OktXbS81LmpoRl9aQFAxRTcuPT5VMyFQRTpVemBSQ3Z1OHM0OGw3KVRZbl0hNipnKzw4OCZ3'@;
put 'dDM8RE4lYk1qZykhJVJSW0hqRThhOiN7Oz5jVzFvSyY4fFhOOmAkRDJmZC4uKUo7XmFBMFN2RkJjbVJGPzlCcE4kVltmQXlkMDxOfHIzKFkrO1ZyKzVeYHprajRRJTAjL2JKIjxoQ1ZSenFkXWNjZFk1KGArJGhwPSo2UXVuZX1dRlkvUSxmUlY+UFdYRFs5Ol5tSDEpSk5VKWUqTHxpfF95XiVY'@;
put 'MVJ8eFpxJXE5bXcjYFQrczBoWSZrQEtycTVhVGouNlA1dkluSW5MdWFEOi96JG9mMmlnRilUJDVfJjBmfEJfKCVIeDN0LztuWF8sQW0kdEI9ISJXeCRiUzF5Rz9sK1ZeX0s7RH1jNHE8aWVdPn58MEovfEVhUW1iTFUsO3c0N1s5aHpYfjpwRFJ5VVRhSGRbTlg/QkBZPHJCdGoyflM+L3FeeUd4'@;
put 'Mz9tcWtZUWFTb243KjMkeSxULiU1fmUjO342O0dvVyZpaXNdKll0bVZVQiFjfE91Wip6P3FuLyptT1U8LiEkaD1pQT5gKzxyI309SVpDWX45RnJ1SmxwbnpAMiM2fSpVUEpeMys8RkxuKEBLRFB2eCspPCQwN0ltQUxnOjpsfDNiVi4rfkA4JXNCXTVBcG0scV1UQGIqWy9bU3FSTE8xTnwpaEl5'@;
put 'YGxEI3VzYUcuXV9WKyJgZ2E+KGxUOllFNyJoKnZ2Vng2b3NbaU11VmMkUGlJViV+RGZrR1h5T0U4IzNDfUlmcXpYR2l1UD5aWipSaXovST9dJnJIYHZIQ0VwMnVKIXVOcCYpOGwrTVtUJCZidTt7MVQrZDVacXRZM0thfWZbektvUTRHWjlLUUsyakZDQ25qMm9pQ1VOWDZwei4wdFJ1bWsjR0tJ'@;
put 'aVFLLn1DYDglUEJpJG9pKy8ydVMvRFZ3TFZJI2FwdyNHSE8rc1pZKV9Ce2hseVo+P2J0MVAyVXQ+Y3xZYy9lLj5BIXNvbGo0UTRSJlVmPl5CQl0waURhL2ZRTl5idz57LlBISTJoQDdzNiR2d3pbS110dn05WFReKjpRbDZebX5UTyZqempyOSp9aHcvPWtKa01RRFtvUmdDckVeRndNbTpMKiQz'@;
put 'eDxGRG8qQjJuZSwzbWtuNURLMCldXVhTR2tJbT49WEF6Yj1KT2lGfmVKNSpEancsTFhyJi4uUmJFaHlvaCl6bX1MS0hlKlJ1fmJ9OiVIfD5CS00pNH02P3dpSjsvVVFBRFA7Py9lRzMiSCFvUUVWRClvej0/TUZYYGhrR0BLd343OS9rMENVIShLTm9vTl8zTXB2fSQ+djZGTG06Q2MmbHF3fmM7'@;
put 'MFRWbl4yOzB0QllIZU5dLCt9Lzs8KXg0L3gqUi9DNSpQS2FJdFIuaF5zTW01KHlrdFFDRUdGS04uXnxgan4zVW4rKD5vajFXK3txdU0kaSRjM2VnTEcvdCg8XzcmUjFGdEpSTCM5Zj5BT09aMzFhTV5qfDFrJWY1WTghQ3J9OUgqbFdiWSVZejRPZWxaekZseC4yUjk1Qj50UVM9VjU6cnlOP1o1'@;
put 'b0dsLnd5ZCZDTD99bHx0YmZ8eEsxOFJrWVJOekdyZGcrbkwwLiw1dCNDcnZ1TmZtV0M/Q3tTSyIseDlecyxBfTVjMkI3LyZfdWVXPjJgRV9dfVBBWS4uRTZuTnxUYWQ8aXtbWF9qLGslOnViTzg3T0xqeXhQflBwMWZYJXg5YEdxMExPQ1MlUHJWIXd3X3RuRV56dj1KN0wmZytZfUxHQkVpPGZ9'@;
put 'cFU5UCJEM3YzdG8rTXdlMSxgaj1QaXEwQCpoOFByZ0dFam06QHJbKno3Yi9ZIz1yay9qaU1KPiEucEsiPk9wWDEuMEN5IU1dQENZVCEhcG8pQ1M8ZVM8S053cC8mMSZgQE05TSxmIT55RlU8KlpVNi9sJWFZS1R+QUMuQVdgOU1dfGclVnwyaiQpVHdXcF48XylvU3QxdzZvMEE2azNDSywqZzhn'@;
put 'NTdrOn1zS31LQm13aEVZJD9eMT49cmZeO2tkanB5X2g4VEU4Q10oJld+YFo1eiY2XlU6IzYvNWE3LiQ1aix4X1o+cCx5NFBNKV4vX2tkflZYUV5EOCFyZkBgLCYidWJNWmZjJFp7VUFeQFFZKVRaQUhtLkx1OXQ8Rl13PEhLND9WN2BZNCV5K3coYV0pVT5jREhIXlEpKn0lJjJwcntMRCZ+N2M/'@;
put 'N0dnZFR7UlBQKzcuUmFnW3dLTXdWYkV+YlNAbGBPV21XfDgyU2lmWEJ5TnA7bXNCdmlQNXEsJV1eTjRhe09DPVs6cTRANG5eN2BkO2BPJmVLan5dPTh6b2tjVXJqVnZnSnZtRGNbNltWRmQpeEJLTUB8MEoySUwhbU8oanUrOVdubWBEWjp9KVd8b0hYXj54OXIvSExESz1+fEtSN1daJShnfTFx'@;
put 'YD19QFI/MDFvMX0wR24lZTAsdm5RTG95JSkuJGMiW2NJfkJEQjV4PCE9P2lRQW1hQT5zc3EpL0NAKitSMDZdVlsvUTJJeGEvWWgwaV4kaWQjNSM9UmZZfjt9JktRNHRNL3FJSDh8U3xeZlJaLjRXXyk5eWF+UmYzWGdpYmM2XzM/eSoyU201PT5dJGdJZipbZGZZYyUxMUhuM3RXQUhCbi48VVIx'@;
put 'JHM3eEFGUWNbJEJDcmZZJWo7I0tIVl9nYy42JUQ4dn1ndixfXmhvRCszLG50KVspc1lwbXRaPj1AYjR7YjN7aFg5IjI+LE84ZnYiY01vUCwjJHMsJHJValQwfTIpJE5APkxLTzhUfWFCaTBzMm0uZHs8KWtQdDs+XnlKNDRva3ZIcjdkSlAvZmEqSnhIZlBIMn1xM3YxZzomMTZILHIqWE9eUEJm'@;
put 'UDFvVlJzNWpse2Y3KE1OdDQ1S1VEMGZBNV9CZn03czNUOW9ufj5vL0V2fkIwV2EhVjM0d0xacDljcV1wcClTOUNRdz5dOS9bekQlMUdQM2V0OCZ8Tnc/TE01aDVRbmY9eX51e1lKdGxYfmV2V3gubDk2aCw5PSRzfWdhbVh4LnlEUXdYc3B0aGw2WXpvaGBjTlk5VzorOXU6LjgwZHU+JSpJSUlo'@;
put 'aj9iPC8haG1MO1FyTTJOeT90NSlCeyRkOUJSdVRxbSwsT21Zbj80cTVKe0QrImRObWE2cDwxczV2Vm8xSDdYP0RJWHx1MVMmXXRQTTt5dXFAbl4xJVldajRjfTdpJT5oX1FYYWVPUytUVjljfUBqN2MkX15OVDszfTdCMT5jNV9jUCNeNTI+YFhzZV5JfiN1U2doP1hAVCRtX1NYI3ZpOD9nPigm'@;
put 'QWpAYUk9KDBoMDcwa24jeENENCVTP3lsVUFEaWNbQ2p2MEMlYnNnVmA3XXlQaltIdWM0JTYsX0ZzX0ZBITh0aFUxKHNiOiFUUmNKVCg5ZSp+WmQsPFducDAyQkklY2gyYjleM0dfK2tjU198blRJKEdTPTM9QEtrdkB2KlJOJCxXN0N2THhZYyVLfWxgVGwzWWRnIUNLbGhCak8wTmkrY1FWeDlm'@;
put 'c05LPFU8OzowdDlrZkJRPX5oITNYPU19flc1fnp9XnAmK0JgXmp1VThlKU8wdj8kLmc+OVY2Lm1UJEhuKmBZJmQyV3JubksvLmppMko2WmAvRWlge316d1A0fj0vT3RSXj9ofnN2THNTV09ldHMuZGhTXyo8RjJTJlFCYnp0Mm1GZiVkO0ozP3paem9Jc01RKlBfN1dgPiJ2els1aUR8eDsoLChd'@;
put 'cHVZPzQ3S2dRMzZEJCRPYSthZz5mZnAwQjoveitMJHwoJT01N3tTfTVlPVNeTm5JS29rd31LKylhMCZ8W0Mzek98b3BOeFpoeXN8RVF0Rzl4QSJEIiN1JCosYjJNNFdSZDg5Mlk6QU42SD8wXmJobGxOams8MT87fHwsVE5NYER5cD8/c3c6WysmU2ZwI3p2ckN7NyldeElvOjF3dyw6ezJqZTtU'@;
put 'LD1OSn5yTX5bMXIlbEIhUElqQEc9PnZgSn1CZXdDXj4hPlBoNzRtdm80UF9kL1ZGeSJ8X3FuZWAhIkNbXnFPYU91IilQcD9gMWM8L0tReWR3WUl+PU9GbypeQ31nPztKX29sUHZlZjBrKWgpM21weVFeXSxKKjwycHNjbSpMOGF2bGs0fnpacDg9bHRDLyFGTEIsc1RBQ0QocTRqSDN1JiJeamhW'@;
put 'UUsqVzpzOEY6K2w+Z2kwe3lqKXdlXzd0I1F0VUhuZTc6RmoqOns7LzR2YnZ2clJKVnVCQX5nVT9GL2t6PEdvd1lAPjN3KGRIWDxMYWY8OmQyLnc+PCYjPT8pJndfKHdhWjokKjVMJGQ5bFZ1KlliSFFwczoyL3FdUkF6QUNoNmAoNVJTe0lORE9VQVVbeTtle1o2TSZYdUg2TmB8fUd6SSRsM0I3'@;
put 'PkUjUEtJMyM5c0kjSG1vdTdiYXFWUjNKWF1BR3xGdCgxPlVSb0NCWWl3QmJ2Y3EpTnh5dzV9eGxKflNFM1kvMzlraXEwe256cT9ZbXxTTWkqRj5aXmRiJU1HWnQvJH55OFh8PzJXb1dBfi9dQywrVF8jfFlFLihdYn0od2dUSFhxeDFCbkNOTGJsVHFWeTxbfC96eyhAYDZKVFkyVHAvfHMkSkRe'@;
put 'W2tfMVduJm0hZUIkbjhIKWo3KHRGMjBuV0MwJG1hbmYpV1p8Ni5RUVpqblUjPztIK1FJIWU6OHt4a2NZUT1QWS5GJjBmV3Z0SHtuTTZIMSZeOl09Vj54V0tYbysjfE18OyF2ZiZQMktKPGEyPVYjWmxpdV86L2EoNFByd146LEc+eDo3ZksmTGVRKS9jX3dLJWN4VnppUEpBY11XJSRZZD1lTXpK'@;
put 'MS5gZzhYeiowK1JnIkg6ZjMxZ1NwUC9zVyYkMHs1bmkhM19zfUtYNVhQSjUkJXJROUQrd0dEd3J2WExmaGUzenk3ZVJUflgsV08xMyxiIUJtOWxOaCsuITM6L1o3PmBjflRUQ0R1YFBrXl1MQkJLTmZmIzdESjRiOVVtNj1OZHhYOCtnREQvaVJ+N2g+fkBoOzUsdkJHP10/OT02KS54Km9xSm0i'@;
put 'NTxkV1IiOn1NbGJ6cWhFPWp2bFhSL0hWdHtJIVB2JXVlUWImYGtxSTcqan5XXiRARSJqQEdiI1hgOXFgX1lkbj42ZlRCdSQqSmp6amBdZ19Zb0U/aWpuJGFBVyR5K01ePll3VnNUdyFXe1chKFlDNk1iLlpbc0p1MDNLS2kvMWJlRXhLWjJrV0ZYJkkyTD1UdVduMHQ9SldzQi4+VjIoZG08YE5e'@;
put 'PyMqby9xaHwvWywpOHh6cntfN2l4dTlIPzRRdmwvYWx8SnFRflM7bSVFdUlsbUF2IWU9QzUhe1soW3cwZzxVZDMweWcxIzVVOHw/JjQpJGFLdD8vP0k4KCVOTCUiW2RedlJYQHEhVDBqYXVQJlZFUzp7NHdjL3EpdHdEdEBjaTlkMExuO3U9SVp2Pk1mTGZFXnVVb3o7XzlmS3VgKGZWIkd7ZGpm'@;
put 'dnRAYDE5UV1oaGF5LHhSPDxuQCV7YC9ZSDxsPVgqczo/UXlYeEE2TWlsbCo0VG5YWDRIO0dEPUs0UjFwKl50TTk+Oik5NjoqV3lOSEB2WDhxeXRvMCNQU0tBPHJlIm9zVV42RE4+SmRZb1FySFEjSjdsRGgoNm9STVtmL3wqNCwxQmlsRS85RmRDRHhPW0ExLE5YSnY2Ui53KiN1YHQmSiZgQn1K'@;
put 'LnpqQ0swPGZ9NU1ecGUvO05jVFFhSkhDbTw1RjJ0cip9YFAsaTlAMyZ3cVpUSVBpezBoPV8sIW5YeXIxYTN9YHNDdjc3PV4xKGN9KSxeIzRuRFZsUkw1Ky8jM2o2MWJPPCVjSXcqYDBITzcucXQ8VzlDYjZzKFg6YH5se0t8bn0pK2F8fHkoKk42bEVXU0hDW1g0ODt1TllKZ3tQWzQ+eUgyI2Nj'@;
put 'K3pDPGhlMG9FTFtSX1tCdih2fiROQGNEd0AoQUk/RlRvYzMkMkNEQWIxMVIwMW1OQzVXRmAiU2R1Z3IhNy52PVpOTF5NQXRMMz1AfkU6VX5eO0w8eHZPVGhRUlFhez48WHhZYEEzMGp1WUI7YmdBOEVWYSFWVkN6VGl2Ql9RfGJqOVl9cU0yOnsicDs+QEwwSENGPGpwY3sqTjdiUkhOaEx3UUhs'@;
put 'Sy5RdmNdImZbaUteX21GdmsoWEswZTYlbjU0fWs2SkQ2LiJaVHU7SUV+ZDg0Mml6QDAoeFdJUFJQX3NkfHV0O21WSDE9LFlYRmxoIVpZZDVLVXshWk1mdngzZGdEYG00KWp9TzNoM1NFbTh+aDM+RVZEOyV5XVh5VylQb3tDRDA3JDF0eD93U0YqaDElYFsxQDp9VHUwfE0jb11Kc0J8cWZPXytT'@;
put 'L2B7VU13KyhNYmtLY3UyPSNzQkhDI30pNVpJVyYid0Bley9IJEI0YW9VQF88O3oheVN1ZTBRWjckZHM3MDssZkxCYUE2b0kpPlg6eSs/VFI1LEdPJD9KZk1VUnZoS1B1NHh1Lm93VU8xQnxdXyhoYD8xOSQ6Q3VHT19gQzVMQXVQQX5hYXVXMVVlPCMvVz5VOlR8UD9SN0l8ZV9GKWs9WSFrZmt8'@;
put 'ITEqYD0yUEA8ait6TTY8aTNdWmVlXSVpYmsxZUc4bjhAV34rTD1bLkFeQXJUZEIoYkhIMSRaNWhNR35UbE89emN1VlpBUl9QOS4mMzs+M304MnF8UWFjOyVkZFpNKn1XJiNgW0tsZVUjRk9PNSowRjN4Sjx4Yk43d3NxcTRzTXYvKEtMNFJwd0lYcEN+cVMrWW94OjkpKEJMTV87d2g6THo8eXZh'@;
put 'QFQjOEUkNnp+KnM3bjp9SXFTQjlxMn0yVltGZCkxKE5kWDgrd0ZRemYqVm5rL314IyJ+OnswWWBuZWc4T0xTbzxeQThpSjZLTWVqNlMieil4aFtnUSI3PiFOZGhoZkkiMClSTVtAeEpYLCg+Om0zL3pmanV8czx6UGQ4QX1NWDsldF9xOyxoTjdicis1KFlXfEJ9Smw0PSRhWWN0JUNCQGgleFVz'@;
put 'PmRMZj9WeDBEOzd5b1hUSGdvYlsxPXEyWyxle3lWMWxYQ2UjYCI8SU9ZcSF5ekJ3VkNlSTBNNFNpQmZfPkd5fFtiQnpbRWk6ZH5zfExRXy5vYjsjSztHL2x6X2R4fnpNTjwpcCg2eSlabW9eRT51Nlo7SmhBOjhWQXY/XnJdbGoyZVRsX0JbKDhMNUV+TjRFWlB4SUsvJWNvbXUoOy57fGtKemd3'@;
put 'Ty5TYUwkR011e1hvRChbcWpYLCYxPTxidjs8cj1DWm5Wa1Yre2BjaE0yakFTSStnV05XR1NWdzdzfixJdFowJkt5Q3xIWEVRMUVHR09pfC8lfSpoZGQ5V1NJXzMuQjoxcl0wcUs2UTokO2ZKb0YlITJkOURKKTxFZzV7OjgjeGFqODwyNHMufE0lcndkWyhsdUVyeltsU0VpZTR1fj15fDt8NF9T'@;
put 'TSlee3NQMj9ua3Q+fj4ocSksRXsvajdSeXdpaU9WaWhtWzA6eTlKJT5bOkVeRiRQYyxeJDhkcipvUTxMXWdgVitPOSheaWBAOlJ4N0smLFk7PjBbRzRxUS9eZjhWbiN8b1J8WzBoUTk2VVR9KGBzMCtvVDwiQ31veU90Qyo7Nl1IR2wiKz8jaWUoT1hBaCtgUEdfOz5Cdk0sJnMrWzR5Wy5eVCR1'@;
put 'YU5bfSJBKyRWcHFGYk8ma0tGfStedT09KEFLKFooaWkwUmNUTUllfEVzXlJAPzVhPUZ0eClMdH1jUFRKPygze0J5dyI+anMkOFBmPmtFb292S1ZxaUxlT24lYiJsJjRSaXx9W0NPfnpjbXpsck5JWFZlZiJqWFAoWyhMMlpGc257aFVYQ2N4TTRyPUJ9KltFISk0SHx2cjFVN05BQ0B6NF1Edlc+'@;
put 'YF5ORWZHdSRJdTNRLiojLDAoIXRtW0cieFdnSS4kTE9zZCo0LyVqV19ePyoiYTBNIjc6I3hDbmI0dzkhQ0lBVzdocl9CLkBpX1h5R1slPj8yPXhwSmVSL0JYYkVUWi45NF9tInp9bFJmNSZbPV1lSW1xZ3EuYHhfREFLVTdMVVVvYSRXKEZ3PT0/ZUM+c0JIW1grfX1bMWk5RzhWUnU4NEkkKEJV'@;
put 'JXtbfXU7SGAvWU5RR1VUSjl6dlVUaHRMT2g2KD9XS29EVlZaMl01Li46S0g9ZFVTfmM2aEk4QD5gaHRuej1kWjdXTVdZK0xmI1RaZS9Tcmgucm1wWG1AfSU3U0Aqfk48RT1vYD1KYDhTYFNGM1A4ZTMheGlOWCt2PVtIZFsyW2c/cmBHJEk5S3dDT1JLW0tFXkhzeWJTPjd5aUZBQHJsMkN5RWt9'@;
put 'VzNGYysrcDckKCUsKDFoezlAI0pIT3FNdDFKbTNRX1RgKjhMMSlBaGR1blp2JXN9ZX19JXheKz5HbC5oVzBTc1E8RUxXJU58bH07eGQ/WklPNWtNNlc9Mm5ffnNfYmtaUyFhXXBiYjY7bkRBeyp2O0RFUFREJFBCdH43SjdoXzJmdU52S3EvZjBSQT1PNzwyRVk6NXhXcE4ifjx1PmZaeHkmWjVP'@;
put 'U0FdNno3fkIqR1o9UD5oO3VqOjxKJXhGVHZFJWQiTyxycVNxdHldTXQ/ZlNqYl1PeGYyPDFhNHwmQ15HKjM0WjVWan02YmdIaXdWVGNKeHMjPWQ9OmhuYW58bForLHIqRUlBcj1Kcj4lKnAoJDpoXjBhQ2Zkcis0RmEoTkBwZSRKLz0jcktIYzlYdjdQSz0/L0dEK0RTS3o4YCtKV2Y1ZSkicGVi'@;
put 'KSx6ZT15Pkw3KiZJQHZsX09+VHVmTW9KV3lQXy86bmhZZG5rIUhMOyMobWF5KUhxWEwxcDUkRFR0JUpKQEttVi9WTCtWX0ZGJnZ1VCtVfjBAYzF4VjBAZTA9aCZ4dFUiPCZdUT1LUjBKXVJQRDwvRUZQdXovbCRxOFNPM3k1Y2V+KSpfSyJVYSlHfDNWKShrUkJjYzFiZHJjSmNAcVhXMmdPflY5'@;
put 'Xnt9aUojaGM9Pkg8KmxlO2cwY0Z3UV5wZ0NqK09uOkxAPXY+WzFsYkx+QEswKE1uZXZUTGYkX2VMTiFkWiw6dyxAfTRwbXptS0FDS0g/ZW8rMm4zOjgwNH4/RFhOKDBwLkNjQGB9KUBFSihxNyZ+WkNZUGdffF1POldGdUt2IVY5Wnk2a2pEcnNJNzgmNlkyQkQpNEtwYyhFZjU4MTVNPm12QzJ1'@;
put 'IXRMWF9yTHVNVV9MRWw2L2EuRUBwSSZYTWYkSTx6KDEpLDZXS1NKKlhxU3BpWS8zMHkkKWZmRDcxSmdFelMqYFdmek00Uzc3Yyx2UXtyYUs/QlBKYEA1KGdVKUlIQkA+KDU/PU1xTVVAZHIsSnw/UFBmTjQ2Q11vY0QiLHtoSX49YD84QTJKYjMqQ1lNbnBAfUomVXE3Pj50TUR+KUh2WmM3KiVU'@;
put 'cjJdLnBXOmBiWDxeSlYwRH1FUERgLGAxNmRwQ2MqJnlXPENlSnlESzg9JSlOTSFzTyxOPipNUGUyYjImMnNxSWR2dDlUQiI6X1NHXnAzOn5aJjpFcnFrYDxqX1pKfDZuU1AsKEVJcWdlSkQjaDcmTkR5fnZJamtwUmxLQiMpMVQvS3hddG4sRDprelt3amlrMnI3NTk/ZDRgMzVefWgicT0pdld8'@;
put 'e3FfaSlJRjNDLG15TChSYjtteldWdixQTCxLfXdMRyRHIjp4fSJ4Ly9lb2kzMT1hJX5HLE0qekMiWHw6SGcxXiskL25ZT2hXUzo4ei9XbURxU0JgJFM0JTJQU2c9UUApeT5zJVsqeTkmRm85XUdvLEV8UXpiT342IjY0ImJzPXQ7QTlRfTBUSyNjNWJGUzhkXTpdOTVZalRbPW5LL1YpUGU/Q1Ir'@;
put 'T3hpU2lBJDJAWS8wK0kkcm4iOyZBTEdSSHpkeEczMHB6SzV5Wl9OdmFTfjw6OixdKS94TzRHRUZrTkpLSShONXxrWElEaGUmRT5TTEd4PDRgaURIaC9vdjVNS3lFdig4NjBOOWkhQiI+Ty5nLmc8JmhdYkRVa2hFLCZBbCFARXc4WHtmcGYlLFlnRnxqMjxfRS8vZy5RbCxQdCp1R3ZbX145TGYs'@;
put 'ZGQkcjcqVHhDUmQ/RnE+e14qbXZrWFBAa2gmKzIwYTAvQ141bUEwRF4mVDJeMVAsNEIufkcyfXs2OTl+SVFuX1M8PXh6IUoyQTw5MSt6cDd3SitlRzdEWTB+RVMyYDM4JF9pekNNeS43N3gqRk5oTHxzYDhMUzg1LmFPPy81ZGI/Kys9K3UwW2JZL0I2UXxhRjZrNy9zX01QQl89TX4pcW9bRiFJ'@;
put 'dCNLL3VXdHteI1EufXtGdlordFZtZDpxNC5rJWFMLkUwU3M4N0dAVSt1cksoWUxhfXRgPUMqKTZockY7NzpHOFtkSTYkcTdjdWlNJm9SOnhuU2N8L2ssdDtmc0lVLE5YbU52PjlQMGciUDYpTEJJaiRzdHVEJUxiPlU4Xyp4V3VYd0p2IyVKe2EoP3U+dSFMNiEqUHRDMGQ8blR4KlZDfGNDK3th'@;
put 'PU9AXU48Nl4sREVBXSJLODIsU11MOlBqM19BT1V3Q2tGL2ZAJl5GTFQwIyQxZl5XPUN8VVt0aXNwLkZdVChiNmtgLEQiXmRvRWplMls4fnh0Zn45cSVnJDhvOWRUOyZ9TTw+VyZaJWtYL0V5REVAQWt6bHBWP1QsMypGLDJmbls+JGNKIlh5QEQyZCoiZmdTTFJsaipOXiRnO188N2A5VytYNnNC'@;
put 'eiFmPSwhfEA3TW1baSUpVjwwUD1SJFlUISU5Vls+RElqVEN3QyhHLDhqbVN0Sz9zYCl6M3BoJUQ2a3ZMVVF8fVBkQDV2TTh0ekJWcjAsXmErRndIIXEpJF1xQnk2amRPYWtyfWVmbDxRZzooVStFSC49dFh2eW9fX2l+QUZmRC9fUEM6XzxfZ2VzPGdeTElAKzxdQlZWTXx8fT41WUY1Qn1vbHR+'@;
put 'OHFTVkpmPVozMXxaSmxHaTxpYkpIKX1xOH1yWmlOMCRzeFlTdVFXMjBnVTYwUno7OVUkeX1CLyZodzE1KTdnQmNwQ2YiPFYpbFN9bk81OlgvWH4qQW5WKFIqIihXeCNvJipTSShmST1DPmlOQXJPUCtNJCYjNiJlfTdzWUQra10iZHtqdnk7Q357PWJuXU1gbGVuYi8sLn1tVkRVdV5OaXswdkAv'@;
put 'TWh7b352RmlLZURSYnwiWCs6SThyPXh3LCNKTX15NU5pbE12JFZMdkBpej41Kiw9UkRXOzt0TDJwPVhGRCUjSH4hXUZVV2MySTx4MTxiZW5gaD0lfGFHM1JGQi5AcWxsVVQvd3ZgeXV2NHYhM0dybyt3TE8jVyZ1b0tbQ3RuPjcjd0x8XjtlJFJ1e2FfZShGTnFhe2wvPkhgRGhOfUR8SCg3Yj9M'@;
put 'fWElPHp3eExDaStwWCZUQC9zfDtdMk42Q3hUfDp2OClHQ15HWiVpT3JZQUwvNDZYaHQuL1NRMHdVOlUpWTN0PnhedTEofXtxL1tCJj9EfUJ6bVNRa3k+P2lBVXp7bkdfLlNSYHYzZ3BQeSs7XVNZcVA4Ung1OV4wIlZnTHU7NHd3UURjI3prclA/VjgoYDZgT1BSKUVycksjN305eGRUdzI0dnxA'@;
put 'TWQsT1ouVV83Xkc9QGNYTmpHc3hzODltUkJTNzdENDtgKnd0WitXLz1LXjBeYnlPLGV9ZyhgWFk8YFouOCVWOUx9Xz5aKklxbHlfdi9pUF1DTWIzPEUmcixjLCokOjN5Ymoxbk56MHZyZ1BhQVFAQW1pRnM1WUIyYWJLYWdqY3F8K3MyZzNuSzpybS41UDk7N3tpMTNmV3MlL0kvaExoUCkmKTRD'@;
put 'djlLJSh7JkxOX2RaNn0+NmE5QUFlbzMsOUxXW3Yve3BwUTNsfTpLZ0BLUzlaUGB7IUU8eSpibFNebG92RUVNe3VzJj46cy94ditZKGxacjB2VE10cltWNiEoPGQ0ZWtIW0Mye3AuOEc7JTFYTmhhQnAjR0ZoQWBUJmZYVlY6JEoic35ZJE1kR1FhUWFmKHJrLEk7aWYsQ2heLG8xRkVmNXhkdzQv'@;
put 'KHpoZ1BaaF1uVjY4bS84c3c1Q11EU0BUZEhUSjtjQVtbJihOLz5MdTlZaUEiTGJ1Nz1ZY21mQ3B0dSV4LlEoeGs9R1NZWE1kQTJeQC5WaURLP0N1JFopK2RPPEo0VU0rWG5iIlM/WTgqaFF1STNmW0xSN2ltMEMsa2tOeHpHa0ZyLjIjfWhVNEdZSCElUkR8ViF1WG59ZUhPb0s2cHBsUX4oZERU'@;
put 'NzF5RjwjYUBHdi9QbzIiM0VHIzE+Xj4jLGdvbiNiKUUoUzhaNDM9Ryl4RVJiIj5GMDw4YGBdPTI+M2ooOm0xYH5uUWluOFJyPEszIX44Wz93NFhTMXUvfVd2OVFuXXl6S3QsR0c2UUxPKW9HS1k0aWU0bkl3XTA9Tk9zSFBIN1JsaGhzREV6L0dbQyRqLCJ9Ik5jJVlCZXdeY3ZfK0tpJVF8QDZl'@;
put 'QUZPdUYqQUQhPihtUENfQl59Mis4eShfaUJeNys5KyZFKHpGUk47OThvQWFqSS8waWZUIyFjcFVhbEpuIzQsZGszNjokeUVsdipYJHQ/bWJkUHVefXgpTW57cnlIUT9ARjh4S2Fdd0lnXTQ5RzxQc2hXdnVMMls6PnxJKFBdTUZdNCNpbltfTEVtTEdrfGd3OGBSQlFSXnw7eEoyK3ldMWxSTl1x'@;
put 'VjNsRnwmWkI1ITlsZzEsTiZ7TSxRMkEsN2BvalhtQllIXjZeIUthYXk8YzRibSViaWw0PndmNG5ROHJBIlJUZDg4Okx1Oyw7RlYodj1IYE9OSHU5I0c+X0oyQXxHbD5Bfk9uS1JvIjwkMHd8OFVNKClfOXxrKnhURUViPi4+ZHc2MWd0cEgxSHw6bG9nPm9VOm5MS3ZXNV9TMGtDYHNqQnQ0aHx4'@;
put 'Nm9MPmwuVDNUXiEvTEFdc28hR1FtNlozdzpIIztgKj9JUTtEWFJhaDIkUWNGLFI9JEM5dSF7L11lJSVdOWkqM08lb1JNQ0woWlpGRkFAMH1kfXJQa3pjY1lval5YTS8jU3Q2LzUvbnlYUTQ5QHdnQnFmTz9iNU1+KzxeQzhdRl1HQXFBfjUkUjAzJmc3UVtAXXx2VVU+djFFfSx5Yj9AUU14eyV3'@;
put 'ZFJgaUkuIXhSRi9hOzI3T3ZhWWtOeWdzJVNgS21rI2FgNHdbOlIidyhmdjU7OE4vZkw0NHR2bXp7XihIT1RnaEghZSwzeUFTSjBed2NjY2YhJWZ8LGRnfGMuJHA1ai4xaTlkeG05dCZCcUJmTSFDLkJuWE9DUlMoOWRIekVtNDJrJCFzIk1sMW86TDNlamtBTmEkb0NVRFQ7P0g6M05IbXg5K1tm'@;
put 'ZkR0XlJ1QiFPO1E6V21WczY0UVJxO15lNl01bF56TG8rc2R5dDRpe1NNL1ArX0lvQFZYMTRfXiQxey8xTEtdYXd2TSlDP0hdPTJTKH5aT0JabEBENzlkblB+KmlZKnZNIlJndV1bfEx0R11lMGVbdWBNODIxaGlNY2ExazA2WGhoTTR+cW13UEghJDhyMFB5IjRSWWVXWWUmezJ5bCIxKT1gYmJd'@;
put 'Tm0qTmdAQEkqXltYTj1eYVddRyRIVGdOQmNmPlFWTURQeWdmMGpMOztJKjQqNihRbVdCUTZ1SVFKTDphZnhBX2piQSFDWGBaPFV6SmhzTjQiP2x7SD0wdU88eEZ8PXhidjxsdn5BPFZfV0x1b2g6K3dSXioxUlptc1JsL3ZHdllsSnthcHROaWlsVSlUSmJVQStDQHJQPCZBYHN5R09qJi8jaU1C'@;
put 'fi90TU9AT3dwWjkkPng9IlVNXnFsfFRYTE9xTDlsdDkmLENsUj1MQUQ5RncifDhtOXw8b0lDb2w5UlRzLjR+LEhTckFAV29LaSMvfTZqdGtGcnVnfTB2WDU8aWhxenUhcmxkZEF7OUFAM3oiZVEoOzpwY1F3WU07PmU7OklTUlArL2V7K2tqO3F7bGtvLGdZYFtRIXNKZFdrdzV0bzd6PFEhKSJv'@;
put 'IzBOMFVWMlU6Vl12VXFNaUFlX0t4JFdWQHhRK1UsXkdWUHteUDEld0lWIUpXbjJ4ejpBQUBLeytCdVQmVzpZMnRAfmMyTXh9OFc/cH1QK3AwQlRUfE0sNGJLKHtJYUM4LEphaFhJKDd5SnRCfj9KUzp6IUtLfnRHd1ghdE13R1dNdmdxXiNdV2BUeT91IWIsfUszemVVdzN2MWt3T3lCfTRqMXds'@;
put 'O0VDeC8yWjhYTXFVNjdzZGwhNih5JFtMNl54OzR3dCk1VEJndndrSmtfPnshYGRkP3pWTE1wL20vZyQxOyZ2cGI6NTQwdileV3xUX1dKWVg4a2g7YUs7YVRVci8+YXouWnErPUw0WmEoJStudW5HL19GWlQ9b0Y0X3NyfFdxK1pve1Ftdz97XlEwM1NRKUtBb2FEaUgrLFt4TEtUcCpWTz5vUFN1'@;
put 'IlNEJklUNk5fSyZLaTtHN1tfLEZpQndtZCU0Q0hYOVJEPmJqZXM5IXQ5WUxxSU0ocExeUmNWWyFrKXwxREJrQmpkNGxgaS46WW50cGoyaz9TXThoXlNIM30uInBMe3hmTT57XXQ6QzpdRnFSZl0qJl4lUzdBZTw6fjs8ayE1O3xIPjxxOWlNJThtJWE8RnF3dEhoNXQ0Y1IsW2t4OTR0SURWeDM2'@;
put 'ZCx0RHg9VHYmPiQiVXx5Wjk8eClCfmsqQTUrcy9uUFhVWFpwI0Njaj5oJEFERUM3dD1VeTVULDgzW1Y0ZT5teW1CdiRGaVNmUHZzJTo2JnB6I3lFbkQ1aT89NTZ6bWxjUWxbdVE5dGpaVDtteyU/cTlpQ35ldTI2ZSUhIUwuXnBdaiFhVzAyOV9TI2dfOy9FbyNmd3dweGMwWmk/b31TTUY3e3Bx'@;
put 'Rnc+cWUvcUYqRlJefVFTcX1tfVhCQzFkNkJ1ZD5Dc0JjXWZaITRHak80NixsL0d1STojZ3g0Rzk3SG5iaT9KZWRkZkA8OWtaTGxnM35Ra3JCQmV8XVpKe3NlUmFQdTcxYjxCMz53MFBuKmJCIVBMTF42OkEkVXE0YTlYdixqK0g6M1ROSHZTNW53Z0IlV0JbR25ESF43VChTYG0xXT84OldTPCRk'@;
put 'UEZMOWpWR1FnMlJ+bTttXyYxTXBAQ01udEpWX1huJFlMV2tQUjVyaFAkXlclSU5GTTJWempMbVlhXmFwdHRMT01ddjpEfEZQZC8xW2V2amFfal9lVF0yXWFLOjU9NH11dUpnXTlPfG8wLnNOOXh3Pj4wTylIfFQ4PHpvRlhgQi9DQSkiRzg+fkM1bDErYVIvQj9TR0ZSKTo2Y2FFYE0/KiNvRER3'@;
put 'WWl4QE9RRU5DNHFQN21sR3A/ZVtddCMxPkpAPXE/XyEyMTBOdVp9OFZSPD5QNVE5UDQ5RHxHVmhZQFJGeDgoaG8uJkMpV3NwO0hXeEJDRUlMT09NNylvVnFCImM9MC5PMXwiPEYpQTM+I3RfTzFwP1VoNi49OzthTW1GYiEzM14jTUcyXmEseXB5YXExP1JyY3xFakk4WCZ3bVRgclpzOH5iPiMv'@;
put 'PiZ5WDMmWlI/cmtqMkkuRVdELmwvbTtgM0JuZHszRzEsSkIveHVlSmd1eCplUSJ5ekA7b2RLOmYlSXpadSp7TXdrUmxFO1JhS1t1YFl9Ki9Kb3JPNkFGIkBkKHZyRj18ako+aFJqZCpYV2I2QGhWcVh5bSgufDpeT0g3WHNlVEc9UnI2e0tjXittRWNiWXk+b0dLZCVWOzxKa3l6L35YXkAkRFJO'@;
put 'cnVwPGhJbHdsaSUvTUt0dUVMbng9cWxmYStBPTwmNCsreVtDVCheYzQ6S3NiP2tuMUtea3MuK1V2OWZvO3x3NCRnRWtDYVQoeHpFbCF2JUdlNT8pOkVGOnY0UTs6ZkRra1V9bzZaPShaQlZXfio/KFBsMWQrRCg1S0RxSkNafGRyeCRSN1psUXsrdXVOayxoTDtWeTpwPEBgYkRMRVhwKGE8KGRb'@;
put 'Ii40emYsOV5maTpbYnNjOkpMRVgsbX5bdFJdTCFTbHBMaShALCU/c2BpXXpEblc5eWsrb0xzTSxsTktrQzQ7fnxUYHl5JShucUspNitFSDkzeCxIaGtfPDsiXlMhTXR7UnJnV04uaFU/PSp8anNCNUdZJEpVTnFZUmUuXUQ6PWE7K3RGOGZXNDo8Ui9RKEsySV9rX1o9Q3V2cGE0S2Z7ZUhHUWBV'@;
put 'Pk5+KDZxVTxMbFZrQUMrOE1saExyTWFnViJWRUJsbWFuTkVofUcicWxORDZkOFE2TU5aOXFzck5zWlRgSXZGQ05WKGEoNiF8MTVbfCV+S2RtP3JbfHZ4Pl1DK01OV0ksJlYvKD1uSCthcmRtQl5tPS4kOD96L0MjbUU1W0VYcXk+WkpFMkkyfE56Jj12TGlaXjxCXWUobl4zKnBHOkghbmV2YGpY'@;
put 'dmNMcENfNVN4VnI5cFUrJU9UaUJlMDNTS3VbWCZaa2d+PHY6WHgyNXIhZEpTP0A6OUsvfHZhWysvI0NwO3RibzFgfmguRCJ5MylIKFJSWClgeTZdRV08KU9USyM7aFBEYUZBeFJ+cWtiQio8O1BKJnJwekwxK0M8JE5AaCxDangyNSxedGdGaHY2K219UWlqYyIofGh2W1lGeGhYLk9LZ3E2RHd9'@;
put 'X3sjIl0qPGNBcW99ZHRtfmo1Rm9MVyMkRyhub15mb3BnNmUhNClSPlcpJGYlbnM2YTFxZkZIX1hkME1mWDNEUTcvJjNFME0mMml5aj56NDgxN2ZuJSNdWFBiZkQ0KyI8Z3I9Ulk0R1ZeXmBEW30sbWlUazBYPXVzREB3QEFycG5eUnJMclVjezZ6WFtoXSMke09ObV0rTTdZd1MzN313fF0zTkp5'@;
put 'VnVnWF5OdDY2JDJiSmpsY1AuPH5fIiViVCl0YH5bN0lvUT1JJlRtWm1qQm0uNWAwQmlGXyElcEVOJXUyVExlc0x9fUpMPyl1d0VJIUVMSn5rLzx0NnN+cls/cz53Ll40U1lRUlNqNzgyMCVYZT5KWiEwRz1kOVYwIWRwPFBZbj8oY3hGfClaLDNRaFBrXi4uO25EKUVXKUhYbXl6Siw+eTc8JkBZ'@;
put 'U35TQS5xMzVtWyJScllsWnQ+fnshKTNQNkglSm48KDEvM0pySn1jTzdTZnNPTVtzaTRQSn0lQXB5KEo/UCUmZHdKUjFpVSIvfFtXUURhdz8/XnBXWzkzPWRuUDZPVlB6QFZbbzBWYm0vT2JmPjtybFg6U2I5fGVpMioifSRdI0VtVmY2LCQ3ZzUvfnwrREB3KkUlQiFYR2Q3RGw9Yk9HWnpxNGVp'@;
put 'Q3l2eVBgVkpKVSExYn5ObVZVPlhtP1FdNllGMDVOdXN3Z3p6fDd7fTdhKz1KS2U3NS4+PGtSPE5DS2o8VjQiSVUzfnFwVDVAOWx8YVhtdik8cU1xdVBeUyVMdVlIeDRhU2orb29dZW9rdWBbY3k9W0BYWk1nNCk6eyRwKixsK21+ZH4vVlcyYUAmZmA5T34uJD4+LktUYlc8VndPdzRnUngsUioq'@;
put 'V1kvSEQ+UmQvMWxFMytWQittOThZaTBdak4oYmZsMzRKYD96czNmeW1xQiZCPmM8bkdINTV7eylSaD9jfiNGbERJTVI4fjh1RS5zRl97NnZCSythbjFGQ0dnUyo4TXpyeSlvb0g0OXY8PltiU1NzWyJoYXNGXkgwcSYuRjpEdUlObT9yeCM+K1FYeEloc2UpZWFtT1lqSGhkLGpOJWg/Wz1POSQ3'@;
put 'UCV0SWw1eH1fempVYXpyQHgvWitWSmlMU0Y2eyYqQ0NMfi44dWFKajVZPUYhXmdle2t8QXI7K0xEdG4pS3dEfC92UlNmN0huL3UxTyttYz10MlIyRT9rWlVsbG1qMlppI2d7d2h9NzwhTl47Z1omM0ssR2hEVXhlQURlL2FuMik/KUo3M1NAMX0rX3EkbHJ0byYlbmYrXWZwJVE7MW1RPWdZO0tS'@;
put 'SnN5O2NGT2wlOl9pOCR2SV9ed3Y4P1A4RmUhQ3FycClQPmA+VmU1WT8mX3BEMSFsP2ckUVJEYW8kU3FyTDpgUT5mKl8vdnNiWHNYYD4paC9Za1s5OEVUVS5mfUZpQkNqRCkyUy5Md3M9Ik5NQkskVXJjdG5pcTsoWlRUb3Z7fCVzRUosOGFTZiVMTVllNVBQKk12WjI3M2IxTClHSjNsTno3XU9B'@;
put 'cylmOV4/WG83aGBVI0w9bWA2LmB8fCV2elE6RzUkfH58P1p1JSRbbzh9Y1MxRGtsezJ1clAueVJOUTNpUTAkLCl4VkcpPks8TTZ0fiozNDF0UihgKURGM3YmRUFAWmlzd1k7e3gpQyRCOEN7LDt7ME1aIW1FO25QZSZ8aUw1SW9IfGNKdCw1KyNlPTdJSHVMQ3F6cHRNJH41R3ZnK0ddYDFDT3lY'@;
put 'LEJMbHJWamJDZXAxVksqLHJ5N3JfeWcme3EkRyRxe3A3YWp6RD4kJUljNiZqKFFpSlJoJiFDIzI6aVNRI3c6JTozMHwvNHlaRDBQbmZlQXI5S19AU3IxNHBOW1gwXjR+P0J8KkdFfHk2USYsP3d5Uyg/fnR+KEtVaHNmPUk1ZypiOV1AJTNnK0Y6NEtaN0pgKGptKShafU92VFoxMCMlWj55QD5e'@;
put 'Pkk1aGRIKlFjamx0aG9sdEI6Rj03JDVHazRVIU98QzkyQV13aDFYKEJHUiw1PVtEIm9vTVoxeHQ0V2JhMWBkQHUxd3Z4XzVRLl88fFNDayMzc3NGbWcrdWZsMnksYUY0Qm1rO2drcnouZlI9T1pWKj1IamdxIU9aVnw6fjdKYFc2QCtgel0wck5ua1BHfVteeVUjKlZ6aT9HXTNkPHNHUDxxJEFw'@;
put 'Ni5eaik3fjttVnouPmMrRisyPDBkSGpicW1+fU81YG8qNT9AR2VOcE9AOERkRldwKjVPdntkLzB8QHIoJUxEVzQiaT9kNn52VHtjN311RG5AX0khMW4kV3EiJk5jTWAyTDVRQFk3Sk8iV3B0XkxnanExRG5uUkQ8UWNUOF1BfTdrSCpNbnVmI29VRGopYiVXbVZxdG1pZVtJLEMhdSF2Tm9HdDdN'@;
put 'dUVKLGhHcUtLLEViMz1PWlZaajcmKD9iLChCOVNWSD5ZaShPaD9WYzs4K1JUUTBzU0gkOSUvWE96fXFScyl8QX1+QCk8Rm43WWJlXVN7JkZ4anBNZTo5P0cyPGl5KXB4a1VnODVpTnpFIy8yfmtMSFQrOF88YG9FLn03aXw6c0FBdFFDVXAhIyp0OClhRi42YTBMKmYwQ2k1RjYodzBXYDJBTEtT'@;
put 'TFNHOyE/eVg8b111cG9lS3B4IXdXZENMeTt7KTU1PmMuMlRKdU84MURnNTxgVFVtemZCL0Fybk11aH4hZUp7LyMvdDFhMSN0Q2A5UDU/NUdKLC4kOkdjZTc9WUVvL3EyNj5IIkhSc2FOP0Q2N1A7OUBkUTBfaGp4WkVaPCY5JUVGfUBAdFtSS0pCcG8sYyN6cFAzWlFPMUhmbHFPUDdCLkhTcktf'@;
put 'e0dDYypCY1BDXUB0YT1yYSFdeWomeVVEZ2JQYj0yYmtjTH4uJD9pNEVsSCxmX1tTT09iSkhCZXxAa2ZYKDs0OGM2K0h1LCErc1heZnAlIWNBOjtWZ2U3MFVHbiExPU5QSCZ2PUlMXmRrVVpmdmVqSTdXPm1GWFZmb1V0NVljO3J0Nnc+bVNRTiZGWyM0TyhtP3t2V1I2WTduOzEycFhSbjM9TStW'@;
put 'Ui51aTRVNiguT0dSNkl8NXtaTnBFfUJEY1BEaTkxek1TYzljLGdyJjdNWXhQeCUkNEF9SmZOZEN+K0wma1B0SFcueVNZSW5YV2RjWT0sKzIkbWZyZntrM1k7NjMmVyJNT3hnKz9jSVBxQl0rbTdlaXcxQGM2dVFpSWtle0RLRFo9eXZvOmJGeUtKPGVmeVgmOHFgaFVVPClHRzA6RjBIUk5wczxA'@;
put 'emY/RWBzUypOS1YvKyRXO1dTaXQ0bExvTCEocUR8VXFaK1pBXThYcTBnd3ZhR0l9RyxreWR5cDlOQlBXRDJkVXFXfFFIZERARWNnJDR2aFZgUCk9MWR2SC4zMVRddTJlaVVHJGRYM1prLGR+MEsmXzNaQnw6Tk5EbjBNU1JLP1VkJU5LdUhYSlg7W0ExUGd9S0QjVEp6WjZrQTxmc2M8MWRhMWch'@;
put 'W2JwMFc4MzRQWiJASy4+QnFoUk5nfHgqLnJ5ZC9NfFA5P1hddSpHZ1pwV1U+LEE1SjdpYX1qXjtDOnJvNWk5LlgjTyJqMlpBLyMqKlNXdng0Xl5JPCVdZyZiRDhDazclYiIjTFVJMWVweCxDPHhSKUdYZFg3fDR3a3hlcHAxUnBKensxL3RLRixOVGcvMT9uaUxuVyU5Ynh0T3FHM09RWFE5KCxy'@;
put 'KHxoYWpLYE9WNXw2aU9HLmlKaER3UDVIfm9XaD5rMis7ZF5mJXM2LmN9eiYkTmdtbG5nLyFLaUpmJldmPkt1JDxrYiVydXZweW9MPkpseytJJkY9KWtabVN6fCM5am9MLCZxMy85a2Q1dXJwTVYlIUZJJVo4VzJ5eWdtbDBXOHhAaTpiVDRsW2BrP2w/Qzs/UShOWD1nc0RERkRQWlhLVjt9bzJt'@;
put 'YzxGfl1PakBSbCJzcmh9dj4uUFd+QSpjR2QpI21jJDMlbTNVNCVtY1Y3ODddNFd3IVVTMnd+THJvMkg+UzZJT3hzT2J6R1ExbTNgdFREREd6dz1FMGgvYnd3I0xzST0sMjFAM1tUWmdKN1NeaFVKJDRbbWVuVT1RfmpiWjRYNjdBZGA3Z2RAdVVjemMwY1E3S2E0Kmx0RmBOcEwxSmBySGFORjpu'@;
put 'WWdHeX13Skx6amthZ1ZiSWdRbUIpcHZUeSpjQn0vQGtbLm4+W3NqOCtKelFxPEdYTnlEOzspPVtKelRpeXwjcXVtUmZsR1duVT50aT80NFE1QilNRmZnblg1PUMvflY5UiRPOSxiM2FrPHgzPWU8P0Z9e3tDWnFDXnBeRz4qJUVTSC5ocn0yLEhEPCh3T2BgZnJHO15lMHB0fU9sWDVbMWQmdXZi'@;
put 'JUJla1RjTnBPTU5IRF1KcV1PZV0qbWk0V295cSNEOC42ZXo6aHcsTXFPUHFNRzguMzE3VyI1STAsbkQjMGRmWkN+VjdRY289JFcjZHtOI2BoKTtOOnZ9K0FvWSg8VVhSRTZVYUBxd3x7R0tkWy5Ge35oTUhtWmd6aCRNRVZ6TEsuUENubjVvSD9qO3ohL1hLbT9uYUEyYmhGUFhjV2gjeT0wPGxO'@;
put 'OWxPN0ZnMVRXaGBreTAuN355QkZLdVZIY3BmYHBRen5SPzVbY04wcWh9bWsrNk9CKHY9QiovMzVhOjVXViNZVkwvS2pTUUB6TT5NKk1ZREFyM3NMOykhXnpiI1c9SCpZYUtAX0dEO2BNcnt9dS9VfitINVQpZ3MvUl9IY2x0a2FfKkRXNnUkUkpRTXk0UXtuLFU2QmBoNyExUHlhOEgpODphbT5N'@;
put 'P00mYW15Sk1CPFpnZzlzXTtheyZZXz1OfTVKNVF2bW8zZ0hLKkorbz1QWUkvOjVFSUdaYywhVWJLU1h1aT9icVRnJTl8eD4hbVo8eEhbRXBKM3QpN2BfVnJzN3BKZFlOUCV6RlVpIk4zXU83InVzNyZdYyl0U3VRblg7LHVYcUI0Z01DZ3k7YWImbSRNKStJPik8PFt4e2BsUyRKQnNxQi5NfXQv'@;
put 'dFg/S28vJEo9ViUiX2xMJiF6JkhSfHRdNk1pZSJfLjpNIk45Y2clUylecVRVYW80W155PClSdyJgOlF4c0RESzhXK3xFZXBtV2MhQXhXKiZ9QlYuTHs4dFsoKmY5IWYwM3VESyM5SlA8TVRvRXtZLjVYKWh8Zi5WfE81RGldckAhOztQZ0J2KS9vbTU9ajVJeEl4PnAuSWc3MUpNfC87Ll4sVWo5'@;
put 'Pkh8ZW0wNCwvOz9rfkpmQz5wPT1vPFhxa3NCUFNoTGZKP2tML1V9W1BXSkdPPHI+Kl5zaz8hRCV7XU58RlkiWFtYKGdydzlrdGVwQCMhZHt4V2Y3Zk5CLlJ8MG1JKUZWJXY6UkBFZ01majVRaXlGWXoofExdcF1QZXtbbjQoXlRtI35GKjduRGtRIXZ3V3dLZUlsRFhfaURyYF5lKiZtaG5DO1ho'@;
put 'Q0llIXUsQSFyTHlObDBNPlM3P05MZChDRH57P3t9cEZAZiRhUmR7eng0cW0ybCsyR3AhY2hJSUxkLGZMKXxxdEMzKyZTbFQsOyFiQGM1fHtoVmByRWBARFteUkohOWs+WWJzbkV9S3NZLCwlc3h9TEouZnVHWDViM2JHKHY5UmxvWkNwKjxIa2dvN3lTXUBaV2NpJDJNSmJIRkZ7UihwSUo+ZEwl'@;
put 'KUNQMUdoUSJ2eWAuRkxlT18uXylmQDNZTj02OWVrY2UyJilhdCR1UTdFSzUoOUxhakcqMEBaJmJHOHZOXTdAXSxLfDJpPSJHWDIyNVtAJDp3VUhaUWlySkM7dmZMLkJjdTFmd3VzYCUsQ0h4VXJ2dnN8VjRJUjtrTFYhI0k6Imk4KUU9MzVXNXRlczxTWmd+K0J8V19WL3JJQFFqOEdQSFhnIndR'@;
put 'e1MoaWZPN2cxWDU4RShTSFhpYn5XQnJ+R2MhVFZkPHpxZTI0XlFIXnQqOz00UjROayJsb2t7ImxsRlshXjQ4bkxIfFVGV2shUjZeRVlxaG4uVmk2W3o+aTw3dSY0KXZdIXhgQm9iSHBzYVc1VDA1a1NaU2tSYEphZ14wOChecSpPbGwpKTRzIVNFNjI3SE9YOWlxfGNXdSs0KFVQT1Z4ZDM9SyF4'@;
put 'OSMoejF4ViVFTGNXLkxOYGBAWU9+IS9hVUdiWj17YEBfITMzMFVlKUw3VU5WN19OemZNZilaSy41PUwuPzFUd1pvXmlLblpSR149LnJSL3l5MTBocW8vMThjOHkzUS5YQW98JFV3UT9tVX1SY0lsL0AoUlJnUFZENDpmeWwwa0VNP2s9YW12ZyN3d1hCQDdbWUVuaEB1O2ArOUI3LCwlQGxpcHh5'@;
put 'K2dhQntSRGVjNnZ4WSwxeHwuOE9eKTZebyhOZjpRIytddzdHd1BPZjcrI19wZV9IUlZEc2plWG9ONkskKTdye0AjTmRGXixKS3BOKnJeTnE2OUt0YFlxUGo6QDFSIj87QkByZnUzP2B4XTRCV2koYUR2fFgmQThgN08uSWtbIlJ7Z11PJnVwMSlhaUxSdixCJWJePmlXb2NdZEJxOSlFZnQ8SDR3'@;
put 'NkJadXZSUEs3amE9byRqXWRtI1FRdChHX3szUWF3K1tdVlczXUIrRDVpekk0T3UrfDZVSGJRNjc/JnI+XzxmSnd4WHU+cSM+NXdNSDAuL3JPVHpxQ3UsLFFyY0kkMTBzJUBVSDwhbFtnek9Ze2AxVHxOYk8xOUkqclQjWWpzNypiOzBDJnFhIUVYfj4hW05nO0VfZEAxOWJqIVUyMl4iWSJ3Ji8k'@;
put 'alJoRU1zIXdbPTRIemlQJUUvdih+TENuRVIhWixpJkQ3Rnk8a0tLViF+T2xgcEJ+aX5NWzt4aT5CYFdXPVtJWHh9ezI6OWQ9ZVNKZk57USs0cDUzJmIkUiRManJ+TXFeLlZGJFhxcj5eIWlMPD9oW2lKLFJuPz5HUl9aYkgmSSt3LCx4LnJrdFBFIWYlLCw7bVMuKGZBSjVZaE93LDlKSHx+LlMv'@;
put 'cyZEMmg+N0x7YFdNXUBhPEpSUFkzdEt3NWJqRylqbDU7O2hmOyQxakJCPz87MjghY2tibF88e1ZTUlRDdG1KUCpSREcmb2lRT2RYZHZgMVEwcFg6Pl1ve29ZXjJvT2Y/MXdNRChRLFkxYW4vYnYmTURaSXhlb3ghblV6dlMqJElhQjJ2cXo/KlUuLylkaVApMnkzQ3xVK0tjYWhqSzt6P0sqUzFq'@;
put 'd3piIXJSSn0wQEVIbUA1LyxyfDltTGBufTZaNT1rUik6ViV6YiFyNj1OXkAkKiw3PSV9azBQZyN9YXxxVnE/Z3slZHdZXkBYQHlGNFYjWXtgPVdOfW4+Kll2ZEd8Z3dVUiI7W04sRGhpaj18diZuV1pnR0tMfXZBaXpkSnpoND5BKCosLCoye1FreT1Eb1tKYFMienN3KmcmRCtAPExxTEppRUdA'@;
put 'KHpoS2J+REpuVlteP10scFk/ez09IyVtO1VIS1kofHB5cSV5c2AqeXFPcm8iYDRnWDMwJHhSI3EyaTlLLCl8aFhOPyp0TmgjbEMwOl8ofltXaXQkeXU0XnxeJlE1e3woN3Y2QF9kPj5VfFdINTlIfUBid1RzOkxea1A0SzN2Znh3MXM5Z2IjWX5EYVpIWGs7SnYwX2ZfQS5PcVgsJkxjRVJePXM8'@;
put 'fDdVRjsuYnt4bCh1b2ovRHdCW2BdfjFAL2hDc0M8P25LYWMqQXgzdil+fHVPVFAvP2NeK0xzUEwlczpNJCgiSWo9RmxYKDN+fCxHNUY4NzZZeldddnM6IjprcyZVLFZYX3VgNFl0UFlWdytTRSM7UHNgSF5dQVJUMnElW0QpbipfIWlOPDQleVIhbWU8WDheITkrMGB0OyZPanB6KE9pV18xLGUw'@;
put 'MWksLDYpUSkjLGIuJSU1THBwaVtsPHROVUZXbDFwPkF4M1YiYFA2Xyw9OWZeNDtjQzJnKnlqQTEyTmYyTFNdMCNtaFVdUk9IYkZpZ0A9U21CZnwsJmg4MlB4XiU/YEMyaXhBYHVVOkc7dF5iZ0xiY0pdeGFURHxMIUt1VU8wdnVbTmhWKmQrY3ooRl1xfWU6LGU3RGIrLC9uZU1FcHNuIjAySis/'@;
put 'XyokRH1scippRlQmUERWRUAoV2xVIlFPXzV3Szl2UiwpMV9wQjxYSyYlSkpdVWg4YytxWShecWUwdXgqLFtNUGlLSyQzSl5fI0ZHOTxDaXM+dkd5alIuJHpxaE4zalo0Z2p5KixEe09BbCYhNTJlL2FxUVsjXlYxLlklSE1RdiV6OFlWOFlVJWtFZTsxNGY1Oyl2cW94NksyWzZiS2hOLmYxRDJ3'@;
put 'UjpqJFRSYUU0NWVHMUQ3QEBySl1LVWxgSkhaR1M4b3N8Uy58eTtoMiJqfmpOLEZGSjE7OjAsNnssamRyLGptQSxqL240b10xN0tkQmBDWlZVVXorVFFNbCosVXdiLi56a3J4Qjc6JTZ0cjsyS0RQPF8jI3ombnhxUV5HKng+bFY1QlVzSkZtW3ooa0Iqd3NoW0xnVWtufncrSylNRloyQnc3Z2Z7'@;
put 'IXA+UVtkJDNCbEsuPDRNPEh4TFFZOXtXaSE1PC9tLjYxbzVrSXhkZHomQXtEaSQycFRQeipgUExPezVEdGRYJURabEd0RyZeQ21GJDNXayh0YHZ7dilfMDtTRF52czpRY2dnUyYkJGlxWDdPYm43XXZQZkBDJV9CJWtfPm5JR2liXS9QWE1NbEU7dnJBbFgjRFAyOmdmRnA/XTZzaylwcS85aShH'@;
put 'R285Z2B7fTcoRkNIeWheQ30oViJtS15SVWNXUjV9ZXVaTj9NNGtYN09iT1dGN0ROSExARnd3KUxyWGFlKF9zNChbVXVuSlZ9dFpFKnoqPlYhbUBGWlQ2bi9dbkxSMSRgaVQrcyx0JnQ6d0t6Z3VoMXA6d2YudyZMMkszM0w5N0hVTShwTClfOVdXYEoofXBkcmVednt2KjJKQDt1cSZHVTtKQEZ6'@;
put 'UzVedXE6VGI5OE9paCFZckdeSGl0bzVzZntvPHx9YFk4WVgkeDhwKXliKDo4TFosLCQvbHl3PCNjYEx3WEM0LzlrX2AuaFQ5XnQ/bG9sYlVjJkxDbX1DT25KPW4+O0pDe2R3OUVOZl55MTNnUyRZc3A+T216TTljUlYvVkpgOVErInw/XSZMdUFDJn12OnlpZ29MezgjN0IqTWBqP2cjTFFCdHFX'@;
put 'KkxUMTxYNUVnfGhZRyU+VSw+KG9WPVNYIix1P246UVtfXUR0O0JGQUQrI25EN3d3QW5QMSxfU3lKJllYVyNnKn1QRn4rQEM6VVV2fCVbTEt2PVRjUVJfSklGb0csKTZgVDNGRkBWVXk1MX5sKkwwT3xZPitnWGdaT3xdW3N4YS4kI05KPmRLR0oob1hTYWhlZSsuL1FbP1clcG1aSEBpKj4oe3l8'@;
put 'YFI1KWskVHNIfStRa2ZtazkmbCNYQnJSNSMvOWQ2MUhMYzduI0FrNGN2JEUubTB5Tno2XjI2eCt5VDg9RmB4XU4xRVkiQmY8TSVJTD5wZGpYTkRJfE85Pz93dGxNMm0+Kiw+PUhYXys5KFUpI2JrI1VnMD00KGNhSypdNmU7fGNMQWsvamVpbDkuJW9tIXNSOSMiR3ZZby8mYGc/VUVXTTghbFtv'@;
put 'MVdSellZRHYwX3RxKlBBLFV5fkV2JFohWHV7b2chZCFzJT9vRVFtWlhKMHVOXmQ4ejVaMmx3LyxMK05eMTszMXZ4eGtqeF9iNCUuJXpmJWtYXmxsUDlyVTQ7P3o8e0pKJHU4KDkjNmh2P1RhU3IlcmIiRE1QclNTa3c8WyM/WiZja20pYXMzJDsxL3tVYzBBK3A8cCV5cCs6THl5OVRraTxEQFpy'@;
put 'Wm1JfHldZUkoUXY+Zy83ZEYlZXxtUUQuVnNWaE54UiVMQTUvT2dYOjhbWHhiZW56cW5XeGwoYUNMZ24hXTtkSX5rMHUsJjhfYDtMQX46WWNKPVA3WTVpZU0pO2tEbS98OjVVVF56U3RINlUhXXpnMTlgSz92c0lALzxjfmp2eG8hZGxSWnFYX29EeyFlU2FsLyhnU05ybXBaKixWSSVbaTlrMF1N'@;
put 'X2l8KEZWPnY4YUdOeCMwIVhmRFN4UXwqS2BnTWYzRXgzKEc4VnFCR1R7bT9oRzN8fihWVmVQQ1tCR3JNOCklYncmX1RwIT9hZGZ1WCQlZDdVS1h8OXo1QnJzNjxJbmcjflJBI2UsPT9peXU1MXFZUG19fHtwLHU2fFJfOCo3cGBlTnYlM0U8bDQ3ZFNla0ZSOjIkSX0jKWFTNT95S1MvSlpKNj18'@;
put 'RkhtQVNWd21ONWk2NTN1WCp9R11iOX5lU15kIlplNl9qeUc1fGs/bmQ2LlZhJnlKYTxxfmNKYmVsfmFWd3NjVlhFYXFJN3VtflR0PHEodE9jPmJnTF9oPHFuR2t6bFoqWkRuTn5kd21OKGc3WkU2X2lfbyExY0AxZCN8eEcqSkpaNyo7Wls8ISRvX0M8KCt4RXpZOH41QmVrZEhnc31XbiY5a3Nv'@;
put 'QE13QyR+b19AW00qSFlZKj0seXEiTUIsV1VGaXx0TD9VY2EhI3s5S2xRV0oxRHJMIyw/bmZLNStiTkBDUXMkJitRK1FDIUZlSlZJQkBXTkMlUnlIQUxFXVFSfkZVZ0xkR0I/MUJjejlwN0YsYiZre1ghbGBzP1FNRl5RUk15ImVNTWRhU2p3NkFfaHFCcXxLPEhxT0UiKH4rNl1wQEJtQVRIKygj'@;
put 'UDpWYShCWGlTbmZUNk5oSmlzdX4uYzZDeHFVUTJmR3YpSGpwNipxYWVmfVglaGtPRFQ3WGguNEEhaDdnKzp4On0xKiNHdHhTSCt6aDYmK0lOclhBcmw+Tl95UjI9dUZJaTgrNCE/XkBLI1V+QkBiNyVRfShIUEgmS3RMc2ZGZj99NTRGSSU9eXpmTm1Ob2BwOyhBdXIkIVQkQH0sMFJWXUsuO2tV'@;
put 'Mmg5aW9eejEkLnwrNmQhPEtSbzNGMDRHWlZgMz57YkwsWVomYGR3bF5UQEA+bDlHM1I/ZztnLnZOKmdPRG56OWk5W1hFeV0ya1hffDNCI05fZUFSQmdwTm1STllUYykpWHgqSGQ5Mzh8b01+eipzQyRbKnJlQGJ8eVAoJSg/fkJfX05OOWR+NkhabiZuUUVXdjlkTi9JeGk9NnFAJHZ0bzc0eWQk'@;
put 'TzQ2MUhQdkolPGM/LG4oO0g1IVgoV00qZXshRk0qR202SlJwb1BNMH1aSi9jVDB4UF0wOEhbbl1zeEFCSCF1eVhqUH5ASityIn0xZUUsTX1xPlRgcyJBN1tMMlV4bXM4MkBCRV1yV1V+InVmLyJUK2JxU0NhUjZ4Wn5JUEh2U1MxNXRiLyZiVlUjNChOZTU2ZH1YPz8/dT5gKjdzMjl0NVk5WXkv'@;
put 'MTNiVik0YHc/IWAxWXQ9YCNOTV9Kc20qZnB8XUVeMztbY2dPfVJ2PGN+dmpbWjF7bEc+W3w8TWlZQSxeQUdecVQ0Y2NeSC4yWHhjYVUjVEh5fSMrJWpDMXk2YjooQnVadk9hKnYrYVc1JitWPU0pVzJORURnfD1PTUNmdmQ1ZjNvaz8hK1NVVil9RkYiW0IwMnUqY19xbUxmN3QlRks8TzAyNFpm'@;
put 'JXJQSHwxaj8hQlIwUy88bDUvWUJ+dy80RChTLmY/VDR4MWU3X25pRV0lRVAsQ0s8RElyR05bJjMkKkN9MToqKDU7czJoQDRYMmg2YFNMREtUTnhsXnFpI1VUN1c+KUw3WzYsPmhPUT5KRG5OfTx3OWRLfEFXbEtEYExFeUIhey9GWjpyZEM+IkosdDJ9SVJqQVU9Vkp6RFM1KnVXQzJ5TWlqV1p9'@;
put 'TSsvRnZebnJ7dDxYTyZrS3pEb0F0LntHc1gxPiksbiI0dG01X34oejNlTV9NKlF4Y10+OUFpbX09fDI/M1dYTzcvXk1jUVtmcDVXZCJTW0wxSj8/Z0pYdnE4bGk8XV9+MGMpSTpydF5te3BXdXYmL0JPQ043Qn55X2BTSEEoZWl5MEFHMihpe2xPbEhMbDpSTSxeQ2xNb09ZIUI+Xk1jUTtCcTVX'@;
put 'ZFBUXmxSKyR0aXsvRWB6KTxEYkguUnl3fFRlYUQ5PHdCS1VVcW8lRmIpPCZxRm9FbihOW3hOVlFsM3BiMzd7M14ob0RgRzlWZiwsT2dxVUNnVGkmTXlnSXBZeiVSYkRDeFRDQDRxUiNHM1JoL3BXfStZPDZ5UWkleV5dUWkveV5dPyFsK2l7NnAvMUVXaCl0JU1zcCUpNz9MXW5eLmZqSUwsIWN9'@;
put 'aVN9IVtIfW01LF1nXjt7Onc2VWVKc1RJfCpoej4sJHQlcCwsTkFUTEt6Rj5EaVdVcmRbJGlJPC4qflZwWUg3RmNKXj11OTd+TUc/K3h6QnYvMChqNFpQQ11sXzlXVkRmRFNYfSM1YSYmQnVCd0haNV5rcGhBUyJJPk1UUUJicSpzU2MmX2tYUCl5V18+LDE3VVdGWDk6Y3o0TEEyZ2R0O2J0NGU3'@;
put 'UEBud1EpejZQMS8/Smgxe1V3OVRuLCFDd0clbG9IU2I0YDh4dkJJQi43LGcpX0MhXTszUDpMN1Y6WDNsUjljJXRpeFp9aFUzT1UxSVthS1V0QHc9SmVsVik1QmZwPkh9cS9FU3I8aVl5aihLdlY7dm4yVDojQFs2dm5Le0olJjN7QH0iYGsvU25Pc3JZPkJBbT1OX2FAPzR1MERDQkQpInFaemt5'@;
put 'RFRsejxvWjRsZERLTkZya21eXyhmKDwrcDtvZiklb28oSSVNWHUjPi4xQFUyVEg0LzJhOiNOUFYmcVUzOUtSKkNXWygiJnB0aT9AVnhjYkdOUUVuSk0mc3VSOiQxZFtaX3hkXWFHRkVqTjAxKXZ1YyVwX3E6dCslWzxhbFYpbixWQGBnaEgzay9HPysxVDd2THFTejRTPkomLHQ6Smh8cFVCIj8p'@;
put 'NFJrcDZNU1FuWEY/PG5ueH5TcFJuMUxRRV91W0hLOytoLjZ3WEU1OzhELHtbJiUmNmlDWnN7VXtkWztOODlMbGxSeVdaMmRfMFBncipxZV1CTWZ4VkFkbV00Z2hpQnJ1XnUxZCloaGI5fTtNP2ZecU58I3N+e2R4MDg7I1p7RFh7WjkxN2R6disqYUtLUWl5cF5dMk9GPjJNRDQiUSUmIiIjW21W'@;
put 'aH1EL2MkbXZEOnJ0Ijw+SU5SJSZpPjp6cW9AdDcvJmJObzptY05panhFKTk3Xzc2ViVac2lXZVdudmhDLCx8U0ppZChRMzNCciY1TXM+bTd9SXNeKkN2c3RlRWpMcH1xYjg4flR2KmM3MWhLPlNBNVc+ZC5SUFlRL0osWj5Rfn1yMUxTfUxmY2U7Um43SlYpWUllTDVodU41bj5gODkvVGBbYlJt'@;
put 'XnpBaCl+cFcwLnpqJnYraCl8LH1SfUd3WTRhOCs4U0QjRyYkPTIjQjtNWys3SlRKeXFIM3VMOnZ7UjNsPE9wPCkjXUxgPTVoJkc2WG9VciJQUWQzYG5XajBeViV3dCg0TUx7Yyl2bDtqV3d0cFtPYnNPN2dyOSZhYyV7Ol9NWEBsY2xnPlV9ZVs9XjQ/UWQ7QFAjZXImWzh7aTxGXWk+Yjt3SE1V'@;
put 'eGtwWVBaPX1lbVkjTnZEZGJvYnZDZDBqJmpCVHgmWXZHK0RARGB1cSZbOFhHQC58WSYmTS55R1RCXTZ0Ly9Aei4pPi5QbFZOJVpMaCYrJTFKOmV2cjsqb1YqPG9GaHYuJUd2N0FdQmR9SSxdKEE8cHZ9MTduVS9COWslZUc+KmpKczBiV1hCIkRzYi84MUN5TVs4N1siSnkxQ3R3Nzp+fkQ0VHIx'@;
put 'LiQ1dT9rVXRoQl08dF10dUYleiRxbClBaW41bWVsbDh+I2hbU1QlbG98PHsqfildITQrMWw1OWkrU3djQ2d2Z2Ema0Uie3EpS2hzNWJjQksjUjZZME4meWxzcX1vT09iN016Z21bTkY5MlZqR2lwaFEuPDc3JSNPdlNsMiNKLjJsKWV4QUVUMUkzYWI1KUk/XXdUOWNKO3RsPyEhc3FRS016clJ2'@;
put 'TGZwfjxVPmZpYiw8ajZ4WWVAe3lOUlEwKlEpekxLKzIodT5xbHUufSxEYkBhJWZ+Pjk7aXJeKU1ybz0zeE5DOkEySzRvXlZyVVdkV2pyN3N6LGtGX209WTJ3e2FuZzIoJFVVPSR8LnA2IUZLMUQ8VVpzVTRuQkRWezo2PWBJQn5FbHBzbClZNXFxVnFlOVRUN0VEeU1bO0w3dE5RUC54b3d8amw5'@;
put 'Zy82I3NqcEdMKyNPPkR7S3N+KkFWZzZsezdtZU89cl0jQ3o2Wk9IbVBfRHlwUDAsNlRUUjZBYzZSdjIqZiE/PChtJUwmWDFOeW03O0wscWklSSUsVVI8O11oMTxVc201TT1IczpLZn1dSldnRCNoZjU2fDJLRH5lVTRAYW9eTFpxbHExNEIsbUkrUF8+Tzt7dz1dRlhMNTdhbE9VL3R+eVB8LjpO'@;
put 'Ukx4TD5KOj9LYTNwJG9UI0k/ODE0W3xXQ300UTVNajdyU0J+ZGxzKkdaa2d5I1JHL01WVTgxWEVadXR9dnxXcFRySDY5NkN7PkImWG5wIiZudD5MPVFfZ08uPWFhKENfQTspZ0AhVWk1PT9dODx7Kk5zRFNecCUwdW9eYzRrNVdRPSFvS2RdbH4yUEEie31tZkQyQjU1K1FzPlt5Q0UuM0NPX0Nt'@;
put 'Wkk+V2NCLzVrO21kek8oRiNAajt4SihBLmhIM3dQZzQyQiQ1MkBqbChfJSpMO151QFdufjJTUzx4QmM7LGM7anQwdHxtTDJWRWtedykpanQkTllscEJoYmRtUnowJjh7a2Qxd3pvWDlkSE8kLEltQmVELHVJUCNbLDl3SWo4bSVJYzZLZShHay47dzUjJmtWOyhucno2bUh3KHwuXT9aST5NRzJS'@;
put 'YE9ORGk7cyo+a1YleiFhcW4wX21HPmE2Uj40MTRWfS48OyExNHp4Ukd2K31wanw5THllXlZFfSVMQmt3WFNPMjZuJXApeE0xcVtqZT9jN3pMLD4pVjBydVpnVVRkOWgjQVNYYSJbZzNgM1cwKzM3bGdqJTAhTV42TTZHMFJicGNxL18+d25OPSlzOi5oKEFYMDpRelFTPn57d1VFUntGclQwWTo4'@;
put 'Lj5VPk5+O142bSg4ZUMuMXFzXk1vRWo2fkIwc1NYMkxTV29OZCRDXkB4XmdZVnJ0bGQjcG9xZiRke1JIeCRbUllzYVReflVFRC9zKnswKWxLKkosKHglKmRGMG5wREN+M34xKzRuIjMlPFNYXz5zYz4zOi8sLCZYSH14I1ZHdz1lZClBUXhQUTFBYmw/ZlZtb2ZWRCUoWUk8Mil1TThbJSlhbXRE'@;
put 'LykxS2N0ISIrdCEiTjJpN2p+UzojaD53MG9LSysyPkw5N1BxUVI7PUsqV15wPD82fU9DWzVRVTx0aHdNeyhuI0ksKWcoOHYwY2UrRml2MllsODAuSnM6LH5VTzg9SWA6ND5xYVM3dzBsWGtGem9KTj0kJDVSJD9kIVd1QEpGQXB1Qy9FeClrVj5RMko9WlY2PjNIZVR9VHR5IUNGZXRRRk1LWVV2'@;
put 'VHttRyxIPk04TndwNTY+Y0YkQiZrQkEsdSo0S35eQ21rQG9Xe2w8Tysie002NGssc2VYRmVKVHJpMUo9Ol46djBhLnhHYjNyMDJ1cXVFImNzQEN6I2QzKlJfUyo5QVc3cWAiNHRKNjdjQTQrZE1QU3heVj5NfltBZkVGfTFATGlBISMoUVZ9V0sqLCslMFlqQSwpbW0sfntQJiw4JComKmB2bDFe'@;
put 'ZDFkMzBmSSpgI3hdZztYfSNyaW84OTJSeztiVChXQVMqSjU9NzpDKDQ6JkdrLkp+elVFblJkdEtxKllyWTN2VD4jWkdxXmRQcDR4MUd2bX0jeD9qe0Z6YlRxPkJWMHpvYS5OYkEyanorLF1VNnh7bGZhYkRYaUd5JXx4MHpweFVLS3plVkl5O0ZlcWByQ1YudSVHVFJASTdvW3NJb0whKHxPQmsk'@;
put 'OEMyVl0rI0s7T31rRDguT0hGd10pZEd4dyVXMmM6QlFjQk1FVTV+SFh1b31zVE9eLHZxU2hQdS48cXtYSHBOQzNKLGZVNzNqN0AvbVtLcUE4LFhbJjsueks9OiluO0UkZGAkaEwwPSUpeU5UcTldT1hidWREKkpeLnYyeTdIWHEjWGg8biZbSTM4WVtVYmVKM1prPnhpN0MyT11jaC9XfWFlWnR+'@;
put 'dWw3O0slOExaUUMleGs9WWUsaW8vSV1EXzAka3Ywc19mIXZISTo8bmpedmpMIU15NFV+Myp5fHExT3lEaFNnKlMyKjg5XV16XXRaQkJCaVkiOFR9cWBnTWxoZkBGQChjWjlPQC5hQ3RKPlQ7biJdd15AU2lkalBEakwrJXhJYk9TR0VAbmFxeVh4MilZeCI9WiMoQFBfJnNpLiJLKX1eX10pakl2'@;
put 'Z1YlW19dKURJNFYvfkloZCZVIXwrRUhaTV5XRXw6cjhfQyxkZXp1aSVHOjMhSWl6NiVSfFE9KG9vbClJdURxaX5IIiZsMTFsW0J6cmUwVmtrJlFzSU9JOV0uVUsqPmNZRzd4RE1YX3swTlI6P1djPmBeLmhrOCl7XSxhaC8zb2NqQn1NckdbLFdBe2NiS3wxaT8lUnlXWiZXbllNOHhjTmpMfC4u'@;
put 'TVoxWzpKZEI2fUkiSEtSRncsdnhhVCg7Wnw8RUhOPltZT2BnWWl5KiswJFJyeyNnYHl1e2JIcil6azNGS21bYW0kOlZtKXR7OXReS2x5RkdEcUUmNSw5MnB7c01UZkg/YjN1RjNQSmZmW1NNPGdNPlNJLjFUQD5XLGV9Kl5LOytHI2x6czluQzxlUCkrS257VHZ8Y3VaM2Zwb0JzTX12Qj1pdFYh'@;
put 'YXdoNT1BXVoxXmVrYC4zPzcsN0JIYm5mJEtScnouXTAxOXEpPCw6Mj4qaDVNJjwzVzx5Sz5CKi5YekkzODooZyE9SHFvTSljXUhHdWpsez0oNVpoNUoufCl2bHMrSklNbkJHd2lyV31KZz1VWTkoSn11fHYwMHF1cT1hTTh7LGBZSWg7I3s2bEpiUX5eekRRTTc8Lyw0dDcjRmpoNyprND0sTlJA'@;
put 'JmRpeEk5NlhgWHoxPXkucztjQkoxOylOYFpfT1BwejE1e0pacS44Kyt7VUNlUC5EdFA9YmcrUjI8JTRFa2peTl4hKSVXOE0lRU8xaCJaa1c8LHJ0NWwlXShXd2ZCMDBaOHRpdkhYR1ROOXsoJCRMUSZbIVBPI3JYblVPbzdaeWpASDdkXXcsMDltN0NbOTdiT0lpNTN2OVZXVXNqSmZzOylnPGFj'@;
put 'entQVmlRMUVbR2U8Q1QmbEhqK1hKbysySDtYQyZeSClqIndxe2l1TlJzWSVWO01eNSUmcl9iVnJocytJSGNiJXFoNSh+YjE+ciFjQn5Jbix7SWEvajFUZyk6RGtOMHZLUnoxYDwhdUlYLCVmeSkpfCx0dkA7fFdLYWhiZGBJI052JlZNSDFEQS8yUWNpfDBtT1tLez47SVhxa3pkOHExaGVdQCJr'@;
put 'RlR7JmFrJClZY2Y4SSFjJk1SQ2V4STpLJEJnV2opbiVlX2xFTT9AZVBQbHQxPW55Z0tESy5dMzF4dWslPmdZQzNgJHJdfEB3Zk0hdHB5b0gpdzY4Kjl6MVJlSC5vWUZDa1BSRDU5bHtsRVZeOUx5c3ZqOzAsS1E7dVY6d3khWForQVF9MDh0PEAxSm1KQCFvX0Q5Y2R3KTRBR0pMYyhxTW4zVSsw'@;
put 'NHB7S0sqKjVddGs/WWk1RFJwWUhpNEt7IytQYWlaZj5OOlA/Q0k1XXFQS2FvYFQrZXtoYlp+JSFwZFVlOG1oRFA7Z1A2NTxvMzs7LkBkaCQvSTtyZXpdeDcsZnBjcX5iWXVSSy5SMSlHRUteKyVRay4qcmhdZ1sqQjU7S3B7U3s9JjtgbCksd2ovMnVxJCZUeShrMlRDYGo+SlpTL2hbUGJETSUl'@;
put 'OTtlSls7N3R9fCxdTHl8SVhLNVUzVUldR2ElN1VNb1lkXVtkWGhYPHsiclheeXVDVkoqTC9RVkswUXV1dFBYV0FdVCE8YEptIS81YjhZdVRhIXxJMkZ5aXc0Q21AO0NqVCxTPj1MO0BCO0tSRkZSfUI/PkRsNjYlekZFXStfamtHTXhqWkRvaihkQzglcjImTnZwUXAqRUlPcUJRbmhAZi4jWmoo'@;
put 'ZEM4bi91X0JQM19nIT9CS2Zvaitkbk56TEdJd2taVil0P3dnfWBMSSY0fV8qeHAydjlCJSwrYSE+bV9ZMVkzIXUpazFyIXVSdF5HcHZhcTQxMztRPEdFIiFePkQybzU5MSUxXT1vRSFnN3BJWVJ4OGlJNlo8e1h8MGA5Ynd9N0VqU3lwY0t1eSE6M0oqLkl4eUIue0M3UXZgI0M6Tm5PdCorO3JL'@;
put 'dCNrK3xAKGMib3s+KUY2SUc3fUBlJHJaaDVAOD1XMkNfXVgxVWZPS0M8MyYqKCJHQnYsLCJxNS9wUls7UnUld0FifF12KSImTl5oYjptZEBRJGp4PF1SNU80bH1AWWo5R0sxKT4raEBiSUYsZm0rVlBSMElxcHBNX117JShJQHAsaCtwUTB9NWcqSWRPWjY2d0h6Qzx2XlppL0ttT15LLGdLOloi'@;
put 'Zi5pb09wTWU6Yz5lZlV5Zj1PNlRLe1R3NHZTbkU5JHpmKC8iJEorQmw5VmhrMXAoRXtCQ2o5MUFSKDhYSyxIK1Y8UkhFbSRPdEcmTCxQejlqemo+IkFyVE5mN0p0PGY2fTx1YWQ9JissfGhqUiYkdFJpX2M/M3haMFhkcG95TzZlO1pTNmhbclYyfnNAJkM9N0RqWUZgaFUkYn1+dktpN2JMRzZZ'@;
put 'JUA7M2A5ckFfKFd7fUlxIUI6fFB0JmpePDxRbGZPSE5mYV9ZRzFYSj4sOEJGNipAI2JRY3N3fChiM350YVoydWYyMHAhSSZ1e0BCaiVhNlkjQ3g0XT0pelQyWnxaSnYsKDZVVXE1OHA2K2E+YXBMU1JeIWksWTNzV3UudH5FeVY5TjhpKVhISnViOFlnektGazxpYER3ZWVWTTIsSDJjQkJ+W1o8'@;
put 'bHg2L1UqWXVWUjx7My4/OWRdIz0uVH4jZnlXJXxscmgjLz4/Kj1mI2ZTL0AlSWt+YU9kL0gkSmJLbHtZOGZqZUdtNVAqOE14O2daTT5ZeCRJNTxxYEBtKEQmallfQWZHaUJ0Zy9BYFNfNWtvPGtoZXs5OElPRiYrU3dQT3ZOUWU1VSFOPSlZJlk7OF8uMVZDKXwoeS9WSiRucCV+Mjo8TSw8KVdD'@;
put 'TGV5T1heRCVdaXdOKDwmPFdTLC5Dazs2aFQweChmIy9PNGxXVndkd3QpZ0lgRDIpYWkre1t3N1ZLOnlwRCFLeXVSJG5AVVhmPVRGXldVenYqQyEhVTk7b0JGbT86JU9BPzVJMTU1KSZNOk5RYEVSTDg5S1gqJn5rbXksdWdeMClNX3lYT1hRe1hwbW4jQiY4XjV0KnpQYUFFbV1AIy85MWIkcEpB'@;
put 'SmJAKThvcEgqejkxKyYxclkyMCIxUFAxaixpU0BrKDNkdns9Qnt0WU0qalVjQjQyJU8+XTVDNjRNVCtIZ1gpTCVdXytKanFpRztgQjwheWxTKF8qKjdqT15aSTpqUG1Rcil0SzlJSDhZS0dMdXgiYCkrWVA4ajV4USFfT11nbTdYdng6WTk0X0h0Z11AZU1HJkR0NGc4Y10sRiQ8PWdaYHc5JmVs'@;
put 'KkBrel9EXURpMHhsTXYxKW5mYTArXVhlNXVwcF9WMWBQR3cpTXFAQVtAP3A4IiNiSkI1WShPSGU1dVtbeUJ5Py9ZbztrPGw1V0ZHXWpsKDsrOGY1RWUoXz87P0RybVMrZUh9MT4lUXRoNWQ6LHh2O3RyQHd2RnldM2xxRlNvPihZTWEpN1FnQGt1d2kxdVElWGhRJmRQRD4hXj17bn17V1cwKyx0'@;
put 'b10jekRvb0BrOytWVkpIOm1VQCJqK0FFK08ySEwsQkZgV1E4e3lSUEpGRHFaYT5bQ2MqfjBBUjVhcWg+amR7QUdtQ3BiTj48JT1vW3hJd3ovN2YpNHh1M1sqSmBFMXQ1NT4/TTljMFJNVGEkTTg0ZHo3NG5VfSIhJnZJb1VUSSNmTTkrUz4sOz9rYClxc3g7ISx6VG4le2Q+Kll9WWQ6TGw+ISNM'@;
put 'JWciVlJedG1ublAjaExKc35ic289SzpLWmh8UFZdOSNtPF4oL0UuYXIrPUBXSENMKi9iaGZENjcsT3k/RjQkUWE4QEM+VS5JImRATyNHWkRmYzo+VyFeeiUvOTxUM1NhdG1QP2soRCFeViR6W3UrNExzSTYoJmYzLyJlL1JrNUc3RmEoc0tIO2QkOGtwT0VxVjAyPDBXd2NrTWBwZT5gKXN7WThq'@;
put 'In5GTThaTEFzIUM+WjpSYlhLb11BX00uSG5IZlk6JkVXYmI7S3pEfUo7S0thRlNEOX1kLF15Y3lOLF1xSEE6JWRqMUpSOy5xKSthYCxTV3xRaSlGUm1CXXolUmVDTDJEbXwrbmc7SGZLV1hxSGtCISwpKXxUL3pvTlkwMiI/R2RueDFKMnY1NGJOcyFPfjkxS1pmeDBEcH1PI3RxcE5QSF1hZV5s'@;
put 'RHdad2w9NVQsYUVjQGUqYSR7c2F7QFI7TX1zZlB3Y25Jc19ZYXhrTj5xVypeaHpYb3g6MGtePzFYQnN+RHJVVW13fmdBfn0/VWk1LCJrMWZNYkg4KjFaZThIUU8vJEx0cSNoRDp9MzozZTJxPS87OkdQTSZrSmZlXUA9aj5aK2JwUUlfP28iUDE5UiZQUXEjQU9yaVZJQlI6SUBZR3xLMjRYbnhT'@;
put 'QygvJDdxRnpObDNOXmtlK0Zfe3A3WlYrPighbkxQZUIsUzp3JipxRilOMXJQOyhzcGorKjY6bSoyWk00WTQsNUIuQipkZmtUQDBVLzZGSzgxRWVFV0A8KzFWYz9JNyV2cHZIJENxOy5kZGhseHddbkVCIy5pQkNfTissM0F0eHhnaEZDLDhuKFVzW0JAeTxuUFM8OixBfGl5QHVSek5TdmJnXXJf'@;
put 'dVRgNSRHKjVDSmhIQiNmS2o2V1dEWm9RTTRkTHhMLjxaL1h8Y31QTi5Gfnx9RCk0Q24rJVtCT1tyNHpCR25VYzxCeik6NlpyOVY/JnEqcFlzYXtpUnFAeH5FNSxIUStVPGJwb1FSZjtVTmFPYl5XQ3FZMmEyMTE+ZXdxYF4qaSkzI3ZIcV5rOlsha1pydWt9UENrUmQvY3cldVc7Mmh2bnRvd2Ai'@;
put 'QF9PJDBWc2czcShbV0tzMDpFUlJGIVVhdUJiLGFuKD5XbzIjTXwlek9qKz18QzhvTHZ7PFhYUkZELlNIWzJNaVhVMExCNltTZjBgZy56Nk54KH5ucn5jLD5tNyUqeFZxNGAhP0kwLlhkX2h9Uz5rXTF+d203P3IiYGZDe0hfaEVtc3Vre28je1lLeTxyRS5YZ0MydytZaSxbSCFQa2tYMkJSdEY9'@;
put 'Sk4uTCwjY0dbW291W058Ims6cnlKQmtZNCFoWDYjTXY8ciElI109W1B5PSpqMyh1LmpzVm9Nd2c7S0B3Vl4qME9Ta1NiN2ZAKyU/YjBzRUQkMEVsUnwjQzF0Rn59dU9JRHFrNEFXRnxpQmtVImpkL2tGLlBFWFB5U1pda2M3TjMqd3k4WjVaaVIkUjFkMV9HYzolWiN3LnlVKzV0O3p5Y2hFO31z'@;
put 'XnRSWmo8TVhIfS85MmpjVyVEZU5FRClZPDN7MEREQDBCOVglMlVFdUk7XjljWC5mL0BHT0k1WXJFQTpuMC8ueTEjRShnMFdYV0QpeSZRT3lpSS89YTZseUMyaGcqeHd5bnFaQTtKUHljOn57NCh7I1VqWkdPTihaYXAwVGZtJXBvU3xePEYkY3swZFR0KGQjPChrNlsvLH1IaiNgUjhKU3RFdTJ1'@;
put 'LHRWakU6Q0YiIlRueVclOSw+PkZtWmRbOlc/QmRNNDhAK3R1L0ZSdkxTTigkRyh7MCZic01fZSxoWi9MbWh8OkkqNkZTT2BBRSllRTEwX2l9RWo3LndlPD9YYXtobUZKT1lvTFdrSER1P2hfeTchWXBFeU4iQzEpK2haRUk7M0lvYktrNEU6NHlJR19nUjwzJkgjZyNZcXxNQSNfXVcydVRqRGU4'@;
put 'TUUsPUE9VFU5MjIkVHdFVTVuYXBeW2djI115OyJJMHdMXUhzX1hNO0FpTFklL1hXTW0yTExTUylbRUdGLDJGOikpOE5IdnkmIj9iKyImJTBHT2NdInRqNWd6TW47Q0V2cF5AM3FdODkvalNoOSV1Wm8xR108YG9vUXxOTEpuSC8xajFBa2c8IX4sRHx2b3ZPJSxYfX4qcF92dUlSTT9YfG43ZVE2'@;
put 'b2BRJWRQRD5wYEBNO2ZOXnQ8fVAjWXhtVUgjMFElQG1yJm18LE80Wkg4dUN0NXUvb29kdDlLKXZPdSV3KFc4Umc5Oyh8WGs9SVgsWHgvRnd4KllXQiomKTZ1dCFJR34/Z11kWHZEQXErYXBfaTx5WDlNQyhBYS9vaFVWSWk0UF80cmldbHFXR3VsYClmJDRaW3kod01rc0JNXUY8W2R8PCFGZjFL'@;
put 'PCFkakM1LzozUjFbYkM1RmU3KGVDQW0sRHwsNltPQUMoVjN7Il1SZm9+eWVyaGtRZXp3QjBddnRLImx8aTh3TEclQkNiaytRfiF7V1EpOWRCOHlBZ0MrQllHUkY5RDBxZEVYRnRBW0FgeHMhR3g0QUFUWCpFe0NCJW1dUSR4SCU1Wng/aG9hTVFsNG9PZmE8bEoiOFhjbXx5U2BzJT5MSWBrYktl'@;
put 'cVJ3dSZUIXVtXV1haDhodFMofTdjYXhNPjZ8O1dKJldEUlJOekR+UXl7Q00oQl8/cm45eWI3OVJwWWt6fXJHSCY6UVtaT3VTMHU/NGB1bU8mU0s6MDoyZT9EYChiZWZ6d0B2VFhZN1NLVjFKcCl5TH58SEpAdWQvUFkrT3p6OypuWH1YcGpURGNDQHYpX01WbyVxRj1jNllgUV1EZ3cqaEdtdWxu'@;
put 'IzpgWmM8Y3RLOF1yUF4sL0JQWEBbSVoqSnlZT0BiOWY/YGhuPSImIncqJWRQZm8vMWJLWWVmRVdFTmwpeX5iOVkmcG1RZk5FIWNRPD03I318QClpKSxQITE8MWdiSnZ9akFTLng3cW5OIj50cCJLJDdub0R6LF5NQlh1bX5VYThkV0NXNUJ6cWxRakszcDhfTENyYnNSS0psUkdCWztPdzVTRVFq'@;
put 'LCxOdjxDaV9aK3I5KWJCVEVCRjhiP0dQIzU2UUAhOWpMaS40ejModU4pPUx6dW9nNzwkYWpOU15rcCo1PkwyaXo4MmpsT2pZZGZTL3JIcD1vM1dnN3NraH5vISthKWtoKUNBOms1aDNRaiRjU1RYU3YucW5JPmhCL2BWOmZrLkk+ZF8uY09aNGI3YnlEfDgyUEEqNX5KIko/S0RgdHd1RjZ3ImdA'@;
put 'd0FxMUUpUzt5KWM/ckVYO1tGSWpaSzg1W2ptPlA4WlFYP2tUW3I0MTtoZTU9Y0IlSjc+VjJjU1VTbGk0XXo2MXg+fSE1dmY2c3lDZX0udig+fnFwaU12dDR2dWVrckhaaz05SWFoQHpSYzUodENhPHpETURaLix5PnFaLjRvRWY1PU8+djV6bnc0YkJNfjQ4ZU5wMGhxezkvQT1vb2ZoaFokVXlY'@;
put 'ZjMwW3UxaTcoUkpSXjgsJSRZWTVEOmkqKS9nNWZHPDk9Q31RcXwhUWN8PVs7T2lCZWl2dEU4UmtPN21CUntEWyErLzl5JX5xSnpLfE1eSHw2UztjTlJXXlQ0TDZdR1RJfSwwcipOOHhlPVYpOnskTUdRLCxidSU3dkxFMTRpUn1ReDZZJTAsZXVJaHNtKXx0e1MuLDZLRUBiLyJtfGNaSDk6ZXRb'@;
put 'PiEoZWcyQTNiMjo8fjlNZWMwWmRYaT5iX1FbJlRzdXlZIU13cz1fLnB5e0N9UVhvcmcrRil4Wn5Oeks4eSFbO0MhRGUiclBdYXNmPHRmTHc7OUJne3lKW1csRVtXI1U5ITxQSWc/U256ZSJyVDtoMXVeSWFyRG04dyUwPUw+Q0F6MUI5V2BSUURtWjphKXQ2dXF1bWFYfCM/OXk5a0E8QC9JenlX'@;
put 'ZStmTlJWVDl0WiNMNUYodGsiOG4peX1+QWcraHE+Riw3cSM1MyE1Wj9LL101IX1dXUlJNnxrc1MrJldPSlM0RCRUWlM1bWwwUDFtaE1ffVBKbz56ZlNjUS9mfV0mUWkmVDFAY19QMDI/fWRBZHU/ZVMsMGZWJU1YMCtnYWJRZVFTaWNXKEE7JXlmMk9pb1pVSXg/LGshXll4SyJEODokIjYpVjFJ'@;
put 'TGRDXmdReU1aSFpxJldERWZ5MjhwT109QEcuUSNkVXh2PXcyLzA7NGQ9dE0qX1lId345I01OX1E6KUM5X2BUdyhdfixmWiZ1OHR5bkMhaVZZeyZ6VztabUg7U2htfjw8cC45NyF1WCF6R2smbEhjUV5DcFFeP0Y1JUc6JU9POSpBOTxkbn00d0MybTp4TWU5TW96P31jQ1Naai4ocSQsLmNsKEw5'@;
put 'TFVtQVgoVX5DJCpfZFcxPnVXIWNzPCwmak1TaTx3KXwoUmhCbENOU1hVZHN5O2IzKUR7UHZBWHxpNUg7VVJKc09TKXd2Tj0qOy9eeSlncFV4OChaPCpKVkxuailmaVBadlM9OTgqLGI3SCx1bHNlL09JOkdRelclUHlWbH5SQHdVXl1AM3hyeFg8LiwicCR6InxOZyUvQE5qPXI/Ozl9aU1SXWA3'@;
put 'fFQwdGFDcyg4b0BHVGFJV3ovSVdVQ0BOPEA0fmFYQzgvSlhpL2F6RT9xJW5TJD0qZUpQenI/YVNqKHJMJi51TXxadnBRIylqQEAvIllOMEU1Tk92VG45Jm9VcV53PipoaH4jUzo9fD1NWF5sbF4uTnAzOTpzc0pEeT5VWldPPGwlT1lHMUx0N2AjLyNnZnE4UWRgQCY4YUFIZl4yXmdXb3QuY1tA'@;
put 'N2NqNkArKXI+MXxAViVvSHY9VWcpY3BAZmxqYzlAfCVBVSYwbV19aGg9KUEwYVtFfEpoOGhWVHBuVGc6eilfaT03eDtQR0tgLkB6fnNAWmtMMUIrcm8sc10iYkswXXAwYGNsUjhUezRKS2FrTDFFWzU3LDdgUVlkKE0od1FwZFIwenNueFJMRShHQiV1blNhamZqY3xhdlRyRD1HTElbeU99LE9N'@;
put 'eCQ7Q1J7PWUrfV1WblpnKXNBfWRbe1ZAclNXV3NwMzRVNXpwM3l7WGoxdTxUbTcmJVtAP2s8PjpUeyE3eGtYVm9FN2JsKTplV0hZMFVBZCQ2NSo+RWwvW2tgTzFnMjRqRGV5ImRYOiNOTTlacD1eZTlKXj9bKURIM3pwOWRyUk9oNSpkMzFNUlsqZTh5ISxYPn4xVlU/aDYpQGoieTBoLDg3ezgh'@;
put 'cE8+RUdYVSlxUDZSfHdsUzdzZT13dzJEYWs7MWdwLD0zNnhwaTtBcilBdzw8KC97PiJZeUBmZ1hMW18ueDFlZkV8eX1fYVNPZit0b35NSlQ5ZHdscW9xKEg0S2Z4cXVOWDtOPkB5c1M7Xl82Tj9kOyVVMFklcT8rUWo1ODpNWFU9K29vdXlXQ3F0dmwkW0w2LEAyISpieTkpM3YlcWtdRl4zTzYw'@;
put 'W1lmJC9LPHk5OnJtXVUxbVFtTVN9OVBBKDFyM3NZeTU6TCxlNUF9UjFRPV1IKFtiSCpDRXsmMSYxO31iJitBfjJmN3wiNXhxe0hxeVBlIUp0ZDUsTkdmJnd6IURKanlQbSlncSFHNSlwNT1peWQxLkd0KGt7fTxLc2ZPdXhKeEd3VC8iLG1PIlpFKiU1NnwrJiNxPT1LWkNDcHs0Sm1fNUpeOVh6'@;
put 'WCR6K0UoMTc5WTNeYjF9YVNqNkZGUjhdP2BKPV1Ie2AjYH1LdS9+bSxdT1s/YFZ6d0x2Jkx3UkY2XmssUUdGe3w2JU44d0s/JFswV1MjSGA6YzFETSxvJGEjcTU9e0o8WCM3WCU+Q010Smd9aCNqbSZqX150YWdPSzZSWjlWKGNOWFduMFFjfW0hfkpuT20za1JpQmBoODJeQGYxQlI7KWJUOixf'@;
put 'dn08R09NYlN+ZkhSVEQuPlVacDQoN2c/Zz1IZXojK0l8Y3old3Bpe0kjcFNsJCtka0EsbWQ2VnEyeHdnT1oqdHZ4cU9tNFZZQ0tYZ35sP0tnZj8vKS5ZSDxkNX55VDhRMHFFI0ttZVA3RH1nNyg7ZSQ/YiN8QSZMay5qVXd6aTMxdG0kR05DKChTYWUhYlpFYDo6LDFhZWJOSVgmW2JXK2VRNjVd'@;
put 'c3tnUU4mNVlnUUIwd3oqezYvP1s+OGN2WG5HNVRNKmV6aiNJbWd1UUYsX2h0ViRxOmZ1UUBDekQ6LlVJUWBaWER+TnR6U082XnxSPX4zbnkzcyglPVpkMXNwcG84RyltJnx9NVMyYE9Dd0IuImdKcCk/fE5MU29mX0JtJHp1Jk5KTWQwMClCLnA1RXZdQGI/el1fL3dBckIwLk9UOFoiInZQR3lb'@;
put 'YkZlbUgyLEBrWzsyNU08dFZtJEhufm8kX2gkPiR0VisqSGtvfkFLezZ5MUhWMFB0dCM+ITwqQFU2azVvMm9VaF4/ZDovd1hgKWBnTmxCYHRvYFlZRmx7bDshY308fFpDTGFve3F2eEBOS1pHdmZOaGVIWTtAKnlDJnt3OTtYRlk5VjhATFUvYEJYUTxiU316UF1SaEdfKjFVNFtgSCZJVmEmV0Yy'@;
put 'KXwjMGZWVVo9Z24waWI0W2oqZD03amJjS0clYkM1b2ttO2IxcSR0Nlg2RmpLOWtlV0YqcVdjfVp6bClrIiNCdXwoc1lDZ1lGLygkaCExWFVNW3NnYnNxbjpaQkBQXWZiYj02WEpTVWRSNiJSIlJINmM5PGo/M1B2fDF4Tz9FZ1ZSPEFKRmxNJHNRIXFoSTl2RiZrdH1NeT1DMnoxREB6WFNsZndv'@;
put 'Ol9pczIjUGlaclZ+O1tZRVFOU0AlUz5mU2ZGelBbYWlbTDF+dWhEQzNUd2okc1Z+b2I2W017JltSRFEkYnZpMlEjNkZ7Ozp0byt8XU9bbzhOL2o7NVJDZ1NtUEpZYE9mQzdhdiYuWmxhWWNLXVBaOzpyJVVHZkN2OS9AP1t1SEY6d0d+MzI2WnM9bFVmW2JyUSh3M35RMjNTa2ZCUjJeQkdIR2Vo'@;
put 'dEdpQTI8M1FiI2QqVSw8aSI4IlRCa0pNP3NfeD15UUF3VyN3T0NFRE1nWiQ0OEY9NFgyVkByZyoydUxxaiYhamZSUGlhc107NlQ2a0NEeXlFNUR5RHwkMiExa1tAS2YzcUp4OTtAZGRPcz1MInJJPn54cSQre0lJUz8hZHI5I2lZKWxgPmx+Ono4KDVNXXlSd2dxaiJJKEczX3YxfTYvYjhOZEZs'@;
put 'XXR9Qnh7Ond8QEA5Wn03aTF6eFgqOXtKIVQ4ZCFNOFpWKml2bEdULCwwcXA4NCtOcmthVFcsVnZmQGtic3IzXmBvN0JqeG48THxhdlRfSj9pSVFAOEhpNWZQKTB9QyFNaV1VRVdXJTE2Un1YVHB4cXlfQEt8K0l9ImxwbyhAcnd8VF83JWdubSRoKClvNH0vdEtpUUNwbzBqcmhhRXgxYFUsXjw/'@;
put 'JTx2e2hzajZIcXZtVVhNaXUuX19FdVR5Q3NQMjppUihKQ0lSaj5aIUAxOWI5U3NvNzVSVk9UQ3VqaHYrJWoocEQxRlJUOHlQWywvd1IpVlVHZmhrX2luQGlSRSNtTlgyWFdCOiEmSjMyMWBTdXJbRS9AJXE3RFFaZnArLE5UZUsvbHFUYjY4O1N9Uzcja0FFKmcqSn55dmhsd3RtTEpfO040Yldf'@;
put 'JUZHZG1yOH01eiN1aCROYEB1PlVMMkYkL3ttUEsjYV4pJCVwWDxJfFdMMygrXWlXZ0VsT252SlcveHA2KmJqV0lkY3AmMFJOV1YpLjhQUSRQNVl+PC5dZWlwUjM8MHc+bFsreWloZT8oW0BdQ1tDOVMpU2U4W3ZRI1c5NHhIbDNafWtMPF1GZDY6bHJOPjFiMXVPbU9AbUdWVylTaSZXPU5+UVQ4'@;
put 'Xmp1b1dwOix8Ii9GYWsiWjhjezphITh6Q0gkKGJ+em9QQy48Qmxxen1wTDNjTFUuYShIbHhsPSxSfX0iYDUqOnxRKzxpMyRwcjJLdiYlWWl+UyIzaztuYWJHO2coY0M2Q0lJPUp3fl13e3wxcGt2a3RNajtVXl8rVmREXkIxeSR7aHkkYDVvXkJuPDZdd3dAJCRZKiZPSSR2UV5pWGFxVDU9VShL'@;
put 'fG1NJVIxRCF3WzRBV0hfYEguRyh1YCtgPzp1cG9HKDZmbUc1cGF6YWk7clU2PXA8a3smVEZ3Jk55JSUxNCJLLiMudCFfWUtzX0w1XUojM10pa1UvO1hBXlFBdklnL2tSPVJTSE58PnM4VC8rI2ZCI1BYMDtLcXtGKj85LE5OJnAkLCtAa3RGNVliV3QxPixKQEpRbnlQMCJyI1clI0d+aHI6Q09J'@;
put 'Y2RCUV9NNjV1amtfK09RRSY0N3NBR0cofl09T1FFVj9eb3BLLmg/dUNYbT1xJlZfTnNzWVY5TjM8S3kvdVZ0RmMkWD1KZ1R7SWckZG14a3tSfV9AWjczMD8lYnswOCl7OGhxR1cxeG08YWxMM3QyZ2dscXpRUlppfmkqUlJHOTg4ISY8TiRiS0AlL2FfNjdQN2EsMXN5dHRbaHJGIToyb2d1SXJL'@;
put 'Zn1oRklMbXshOzh3PDVIZzxqUnE1clMvVCthezA3UihjcWtLUjteNktdPHcvVXtifCtFbUgidH1eTmhtdjBmeiFCdSg/MiszbngxdTkwaGVyJXgvIlB3Wy9MSH1DKFE4WjMwRz0kTTlSPSx3MTwjb3B9alU2WEVPI29PQ1tZUzghYFJtSWNUMUlSPEw+S3deL0xaKVUzTV04WGAhdSIoZmNPeHFP'@;
put 'ezVqckU3RGp8LlBDNlk4YXRlVWo3Y049bWAiVnQ+N2BTTVQpcXNFW1RaZmxAQl9LcG0je0paVTxzeHZwKkgmanVTQUo3OlMyRDpPUypALi8pQDx4a3ZwbngxRT9vI3IpPiJ+QF1nMFYkbW5mbiNZamlOKCF+Xm01MnhHISFLW25CayJ4USRIMWVEencoQ2hXdkJ2OEdrLEJ3TUdgTlhYPz59PGNZ'@;
put 'OkBgb29LXVp6az5pYjtePGk0Pj0mPyRsdigmUUgsK35hRUFgMX1UJE05azo6Ry5VQ1g8QFFZakg2InxWJGNHfENHNk5fI0NEeT08QUshKiVDRW48ZyQ5N1p1X0BqTEtWRz95MHI4SSUxJjEsRTRqeV1pIzpmYmM+UzNwT0hWU21Neng2K2x5QEtjISZiVyN2SHwlYWk/IU5oPE56cSxdd10oW3Ik'@;
put 'ZTVIdDFNL0shLDp7JEdqOXUpLDhvS3FeSWVfYjhmQFtPZlh3QWE+OyEuUTFNTFZ3MTFNPD9dRnZPRm9vNCpUdldsND1fbjBhb3I1aDhbS0pga14uSjJIW0FqK1lmQl0zVjJFZkgyRkJ5fDF8LHt5cmJuJnlhMUEyKmckXXZgaFFeazFEJWdXSSVfZmtYYF03cDgkUn40ZF1YJUg/cmwiWkZwelo8'@;
put 'az0lP20+ZGouK0s7aVZnYXhrI0owT0lOLl5JOjs5Xm9RamF3Tm81PywjR0JANSJHRCU3dkxOPGhvdjBHPUNbIzBld0FTWyM9SHxKMjZrY2wvamMuW3dOV3A7L0JoM1hxTXZPP3J2dDtbNix4SSxrTCVddjFHbHhgRCpRSDZCWlN3QGNObWFUWm1kMSYxKC5ETH0wIXxvWWBsO0srPDZXYlkiL0Mx'@;
put 'K0ExREE8ekdQSFRMUUI8NFlyOk5ZRS9CP2s/MFdOIyk+RT9pc3RaUFQ1ZVNzSDk0bFNkYUVpPm5DJF1RLGZRMlA2NChCTk4keVFWdmoyXnVCISRQfE9uWm5SJEV0Y3VKSnVOWVNkWnZnUi5oQUlQNUkwWE9hYXthX0hZbVVqLmNmR3c8YHY0OlhQfnQ9YkQjN3VCJEROWFB7dE9ORjxzNkFnOkZq'@;
put 'RU91U3Y3cVEyUkN2T2VmeExtSGpMTV0rRiRaL0ZUXnNFTUNWY1J2ZiFhOyRJVVk3VzgqQFFndTRxQDJsUk1FcSJtblpJbzd1dXoiPDdLUk1PSWpsYStjOSw5eF1kLERpR1MuTUBwYiZ3eiEmJFBULCouV2w2R0dsL3g4MEV0KV15ZGwwd1Y3UWovW19gWldIWHEreHhrdW9PZFgxWjo3YFomRCNf'@;
put 'RWFESD1CUVJGJDtIL0JZQWdNSikmPHh6WCsiKFNHPmtURHxTemxiN1tdeWpFRTFqcjZSUGI3d2Z5ZDdCJC84Q1F9fHp9IXZiKCpbbld1RC89RERPSjBzUFgoOFtBZG1dNT0zTzY+Nlg9SH0lUFZ+fSJNRVcldlowI1BudHJsYj85WzVhR3Q4P1d0SU42a0d0LCF5fXVJd0RkNSlVXyo8XjdQL0Rk'@;
put 'NVpyaVQ1YTFKd3xAe1tEXzAjazNUe1JXV2ddNXpvXldjcDteQjdTcUo3bWdpNU08LGY6PlduejhCMjFxT3dqfWUuQzpbWlpMeW9AaDpMSFU9dCk0Sj4/JEZbPX5AUThbUWtCb1p2R21XNlkzU3F3eGx8Rzp8SEIiaCNZR0xOdD9gd101PThQOlFyb0kiZHxfcUhjb1pffDVNciF0OCEoQWRPSjAk'@;
put 'IjNHM1l9L0JaP05FfiJ2a0VFPTR9WGBreEZYKitUQEpeMlg+WkRgVkdHbyV1b0BScilCZFk6O0ZbUH57eWRIU1p6PTx5MHY8I0clPkc5STJ7Xks3SDtOaSVMLGZuZ2IoeDljNkoyU1IqJnxsSGZoayVfKVJzRWg3VHl0S1NoZUxEaTZrbEpzdndMR2N2MWxVLzBjIzo2WnJ+QjIvO01lUiF+T3Nj'@;
put 'dlJxe3ZecSJCPzQ1JGU1Wm55MTZ2WkJYXkBTRFsqN09PfXcxciY8MWEqZzBRTyIzN0UobzxySWNYYnN3YGhrYXN3YDU8Yk9Bfi4yKHpBZEBGPU1NT1Y6LkxbeS46ZHNNUHc2K1soJXJOUDR0TDd9O0dmdkZeQE8/Jkg/MFBNbT1Yc21oNVJmeHE4PyVHIz12KGJ6MXEoRUpWfihGaXpHNUIyODNJ'@;
put 'T3h1aVI1NitkY09aZDRRfUh6e1Q8NCg/eUs0Nlh6Oyx6Pk9+MHpIdlhtMFNmX2dFYiRUbitzeHpaSjBdTzdwfjRYWj9Mb3puOHRpP1o2aVV2VCRVZlE7VXssWzwwKUQlJVVub1EmcntKc09RWUZYNmw7Y140UGBJU25wakBKK2RbSXpiQUpYZGVYIjldTk5wP1pNSGtJO09hSzBHNktSaF0kRE9e'@;
put 'UCRCSCo8UUFgUSoqVjdSW0tTPyIudEh4Kz9YdHlaZ1szRUc1PnhWe2B1fEVvZ3dBJWcobFkjQkFLdGJHe2gmdWJfQHxkfGFoYUtfP0dYVXB+NUg/R0R+JCMjWS81T2J+Km1gQ1UiMXM6KXNAYklSQjhWKF9hKXo4IzxRcy9mbj9YUyU5S0x9aUAkYyhHJXFDclYqUVtGOihzLDBrfG5END0vJEQo'@;
put 'fls+W2kqQD5Jbns1YmMpMlBtbHtePjBUdl4/ImhpQH1KX3c3cEQ/fVR7PkJyTVUqNUc7X2lAd0RqYlV0Wmc9N2kpVHteQ3B2STF2W1dLUHZ9cjwiaT9TcnNpdDRKZm46TTN2UERUeXFWJXdiSUU9KUskZE5tQClQaWV+LldgQVlLUUspdD89MUNzST5bUlFucFIzV3xXWE9UUiNYZXc4eT1PTVJF'@;
put 'UDpfO0FRWi5kPzEsIThkWT43TEt4ey83JD5tSzFPdn1DLHhTNWMmJXNoKUYxMURIPk1nQ1NwSCsyIUwpVyg4JHMkJndGTlh3I1c6MmNwa3hKYE9QdGx5ZSI+dWprSk42VSElbTwifGljPiVfNDtOVTF4PGZlN2VNSFllOmREbnJSPz5qZTEyWUR5ZyZ0XjtqWiNYRVgialpydkhBWDkyPSwjblk+'@;
put 'K2gpMkEzTHFyJGU1NDRrRWZbWTlERDslIUB1Q3dDP1I6WTAjRU1hR3Ehc2I/LGBUTjwoTktnVVlvNXNiVSRvd0JJMC8lLyQwX2ZWKngqU1Z5OG1VWG0uejpRbVglR3B1Mk1EWCpmTWFnKjprSX1XcGI9fFIxN0dRNXBpPkhRUWk2My4qPVt0SS5ZZyowSFheOlYhdEZOb0VdVys7XXZWJXZ5Ki5J'@;
put 'VGBOZXlXQ1FOdUVxWGM7PEZrLiZEI041KDdnYSFwaDpZVHFXfCM0Vn15XT5CVUJNMWRaYzZVd0k9RiFga28sOklPUTowOFFnTFAkN0xZREBFXzRbQiJJdGAzd2xqJGtRbiVZNnxSWjErIzBdI1JMMzkwQnYxV2hJKGNHTlJqbXFVeVptNio5fEokNHZGN042SyozJFlaUlZxSjorImZvQnNAY2xy'@;
put 'WD91Rj8odUZOcF4sLzF0dEQ9bEVhWkdSYEg5dilmJHF8ZHw6O0N4MGdHIzxFZXlvOyV+QSpnSSZNOSxoL0AiWFFlb141LERrTmVCPVRXZDFyTl9OOlJbfVNhZ1YxbihHRy9dNC8xMlJ2VWAmbG85T0tFQUgxUlFqT1l2UDc/eWlxRUhgdSozemBZekI5OCpDe2UjblB3cHc/YEFhJEVHdHJddVkq'@;
put 'WWJ1R1BnfGpWNVlfXl90LFk+dChSeWxHKy5hVjJGVDkpQmxfaUdvTDRsazdCYkt3TCJ5Nj0hRGR0RWYmJjxRVk41dHFDfGFKZDs8dkBnc2FPR05FT3AyIkxoTz9LOm04IVtjbWNBNk4/SDR1fjtpR1VSd2JacDRHPnozfE1BM3EmSU1KSF9HPXpQVm0mMkVRbD8hPFpdPUJPYEBDK2wreHhKbjov'@;
put 'Jik4W2NHZy9ybHY1MU5sU2A6dTVlaTswVHE1R3BlSyNhUzF0YXt9NlU8Wzxbd1I6LjxdPSYjKXg+VTpLVVRdbj94YFg5bXVENTsocEgkZWA7eUZfTSpzQyllWEpVNjAkPkl5VmErTWw2TUgkeiZFZCFNTXZUdUJJdHhYJmAvODY8ZHx1RVRwMGcuOVUuMClfdSxjd0FSa3B9IXJAKD1tTilwZDBI'@;
put 'fFcpOWZXSWAya2dhYltAXVNmY1ZtIlFkWDlkXVB4SWZTemJ3NEAxSHI7Nl0vODZ0NmpGMUQ8X0lSSTtPU3FneG9fQD85NVtPSjIxV2JpdUJ8ZlhCX0Q+Q11mJllrfCpBLmlDcGdFUkp6eSoyVmBfK3hWPFckc1JyaENUXT5qZztIcFZAV2ZpSlRISWZjWD4vTSJfb1lIVXU8TFNxN3ZJU1ouLFFy'@;
put 'enosXUlqcm97RWJHIyErVDxPPkhsS3omYHtTPiUxSyhQUiNKMVp0Jk85NF18UjpiWklpbzBOMW1pbT4hS3ozJjRQa21PNX18TjReVE5je081aFowRjVlNVdnZEo7OSp1TFBVRWY1QDEoQC4sZE9BbmUpK2pZImN7NFNJOnxmZnl4MW01Ulc6T1lmO00mdyxZWXZVRlB6aEwxd2BSbkJLaS9ONnk9'@;
put 'TzNzUzpaYjU9bDYpJTQ1UyR7ISR2ZlB7Jl48MWFKWzdVdVZkSF41U3BQVClBVF8uT2J1KC96QVBhMTRvI2BhWD57VlE1QHBAUld6YnQ1YmVwZCN8dVA/W2guSTUmIy5PeSEyNlBjUjpqLF1Dcl9mJl02PEg4WlJRUiFoLn1DIWlSUX4wVXVmejxyZkAmXnpVd0hdbWFVUy43STI8TlM1KHcpImVO'@;
put 'MExvYSlaKjNaVm45UjJfe2Q7Z1RYNT10Z0RdPHs5dG0vTFFqPklzb05bTVhMdXlvX3kuMSwlPE1eaGhTR1FrbUJuMG1tNEFVYGxSfGQuMmAsR0RFd21NZzVwUT1CaDo8OTttW2FdUlthVTEyUVs/NHArQ1RzIWFOSixnPE9+b3sqZDJzS051JW1OJGJfU3JOeWwxK35QVCR8W3s6d2pDbz1hZXls'@;
put 'SShHYDxWQGhLMD91K1ltczU2OzFUK2NiU2BTbGV1cmdKQUszeVkmPi5ecUB7dXEwYnJWZDhXWHchQXBEO3IxNixhLDMxRmVhZyYweFt5Xj0kc1pwMFZQSTwrPFQ6MyUvRHh7WXBFPDxnXnVaPEk7UCZUeUN8bWdtbCMqKFsqQl5kMkolVFdJQWU4PlZaVlVRaFVLMF1PN2BCe0M0Z2g/WnVON3pv'@;
put 'Ok57L3tfbH1nVCYoKy49PHFwP2dmc107R1BfU1s1VGlMeH5NMWw+O3NRLCl4O0B+QGUicjRVSCxncygjOSxRZFhAM2hCXTZqSC5sMiIsMnomLFEkfG99Zmh9bV1XOCJWWFpMOE8xL2dhcDY1LzptOVVSVTlfRUdCK2QyWFRyVm97U3V3UEtKSz8rX1Z6XkRsaGFuSyYwa1NLUFFWWSpReVtMPVlI'@;
put 'LmlKOndVKHkwRVNoOD59dltaYUZndislL1dkaSNFXSFiNG09NyFmMkoxLF48cThAK19WNG0lfERqbHtuRD5JQFhUJW08SWQwdlI2TV1lM31dRXAhISxGYl1LeVFaQXxqVkhsaGdnRlFbRjBbJjpiW0AlPWZGNG1dW0MlJE00dkZGfl45b3Z2YjJ5eVF7b3dXPCZPcUtJRjVedHx5eyhbS3E0QG1r'@;
put 'bD8oemFjdWE7JUU1ZS4pVkRsdkVrcnwiNDxoJENGZi4/d3lxd29rVlFmejpmbXcjaSk9Oj9YMTdFP21sX2V+Pm1sQW9WPU9YOWFRRmc4OiE9TmhVSkZMNnx1cmhwMGxZVzpNNT9jbHMrZClHWGFoOHkwNHtGdzJpLzcuTCxhVGlGVEJkNzJxSHNkMTk6emJMUmFBb1dWfW1lUGYrP2N2XTUzY1Qv'@;
put 'fFR0Vmw8LGhvTks0V1UhYlRDSFpWZ3A6YVYsODIyRDZLYT0hU3IpUTpWdV91IjVTdmJwdFFiRTNdWFpoJmUhck40akY4e3k3JS5KLFpIKWAodlB3bEZROVZbZW5RRj5UKmhEX1ZMO21OQEtkIXVsKjBdNHcjan1HPEg2YGQpI3Qsa2BLWzNRa3hNNjp3WmtUYU07MiRuUD1yIjw5JlNwWiNIPT06'@;
put 'SzZkLDRVezp6YCh8JTt+aUl+JDZyaFg2clpNOzYlcmxbZTRqcG08cHZ8RiNRNm97R2Rrdkx+M3dMfjxhKnI+elcxQnwhfXo0LHs5cmgyT3ZIPT06PHNhIXtbRHhOW25eJlVNaF5sdER8R3t3IWQoOXIlKTxIcmgvUi5FWVRBQUFdekFBe1F7eWpYWlldd29OR3AsJUdIXlhWUnsxVFB6aXBMbVgj'@;
put 'KkF3QUFBQUFBQUFBQUlBeiE+b2dELC5kazJgbnU1bn5yZzcheEkvSi93eTwsKWI0d047Yz45L1gsUmZhIVVudlVUbkkiOVJ5Vl1QeSRbSzw2YTU5dWtXUHtFKnw/K2FhPUJhZ3lbTGpIPjJgZWZCZHd2cVhWdEI0aHU8dzNhI35IMDc1KX4oQVhkdD00cjNPNTdQbSR2Z2VDV3BiJl0oY0wjanw9'@;
put 'OExQM1V4VjhzbUN9NEpVc0t7Zj9PKUZpfE95TTtKck1dQ1JCVG8wTnVVYDM5bXJFSHZUeDZdKFJnLEtBNmtgSjA7KF11R1MlJmswcXEkMFB+JF5zRnk4RVl7bCE7PjVmUCs/VXpHU1YzeD9PZnpQd0VjYkdFYHovcVhBeURLd0RDQGAqUUZEYDNDRHBeSD5tS1t8Rk1wfTNzfV17O0QmWiVbOzFC'@;
put 'c1FXcSlOPlcsSiYmIUd9L3VjYSlnfU1Sc3B+ZCp0RkowTipgVHl+VzUwPTBYWkV+QTg8XUlYb14uenRzKmloTiMpYUE7eFlleEN9bGFLaFhLKEI2d18+UzI4THp7dlg0RFE/bW0wYzpKe1RHaygjYDpaP31kXkYvfCg0fSRpNnlsKjtHQntkUl1YSkxLelBGeCo0Nj1nTThHbyNjZDlaZ3xdUEBx'@;
put 'VG00YUFPUSY4cUp0I3k2RCE0dFttQGF5Yk94Z2RrPVQ7WEloaCRea1dgRVpLY3dXVUJRbW9MMj0mY1d+fiQ3OkxkNVtFIVg7OjQmcnQhRSRVRzBYeT1GR19vOjVyemNATGYrVTN3PSUvfkxMK0s7ODIwND4jLlAuW2d1d3BCaFgwUUYrWVI/dEJUXUciTHIhREhba1FhT0ZHNVt9SSRyWyNBVE9L'@;
put 'ZkZCfDZ3RiZzWnxjaCwlKjdJXnQkL25aTHomWnRNPWR4NTlYamUhOUw/eSVbNkNfO2pqYDBAdVF4cHBbTjVucyY8Vk43RElRb2l8PVJ8OWUpS3Y2NmpXPGEjLEVjTldQJXVNMDgxUEgpOmReLnFTOm47TmFyaGBZQFtzLiYuOC92d3pNdWdiOj5hdF1uPEleMGh5U2coVDIjXkYrcD54aD16cFE2'@;
put 'TSZHVEt7Il4hfktQakpieiFdUHtrNlRkLlZLdUdCVlsidzQ7cmhSUHtHQ3cwd3JBPGBXPF13fmMjTy9hdnVfQmNsPDFRTTY8ZGNibTpGUnQ+KkxUbnZ8UzRReGlbT3N9ZVZnVHJ0dCN6b0soTDRiYHUvVjYicEZwLyV+RFUzV3g3ISI6QSZAWFtyZk9+UyxrbEZrYnNPNClTXlpdPD9QRjFzVmFU'@;
put 'Ni9nW3l3PnM0S0xdSytbeCQhVFlVUzA9aUVwLHJ7IWImVl5JWGddMmApLG9VaVhwK15NbEFoemB2fElUMlY8IWdiKWBJdXIudUlxbzlpTi4lMkpiZDoiWERXfisoaUZXJkQ8L2kqUHQhJnJFfUpTTihvIXVvNnloaXxea1pkPmlFN29xIWJyS1YrY1NqYGlbLlcvUFtValdSeSRjWG1SMilQb3kw'@;
put 'LzNpP0tNOGRqTS9YU2pOYG4hIkZrSzQ7YSgyVU89VnhnZCtUZU8mPCNRc3oiQGFZZFJ+LkJ6PCpnP1IsfU1YVmA0UmJtfG0vSTU4IypAOEMreCRUciN2SiFZNDdGa1U9YF9SWGteKCZXbVNLPzdVNVFxPlo4Nn0+UShxXTRRbWx7JGcqamgwPTFWKzVLaTBRLDx+THZYXVNGJj4wMXg2UFJmdjU5'@;
put 'eC9ffl93UnRFWHt5RW96MWgmT2tQTmUvMlhGR3doYHVDLm9YRzpDWS5vbWhtYSxyYl0xQT1oMW5CRihIMGNBeSYqTU9kTldOaE46bFZCOlYpbT9oMyp2R0ZXdjNVbGo/RUUqQmMlQT5tYyMsIXZbfV4qQnR2RlFyVHdPeHI1eDc2K3BFfColYmg5UkMxW2lTQm9QPmlheUdQZTN4cldAMkdyUHhP'@;
put 'dUpCNFtJSHYweCJJRnswMEcyfCRoI0JaLH19cnN1UFNEUUc5NVk3PCNiR2xPQmQqJXJqdDVOLz9fY1M4RlglaGMxPl1OdlsoUVJKfVdnW0l7UTRYKl8wYjQqLF1sOClKRWh4TDQpcmVqSEEodkczZT8uR11VKEglP3xEI2lnTEpYbkJseFk5aUZVcExrQ1BrXkImKUQlIT99Zl0jfG5TWnNUMSl3'@;
put 'SC8uZmlZUEZDeExJSV9bSU4oWjNLJjlLSC43I2Jue2hEb090Zy4pJENEN1JRbipSdzRNX3JSRUtLUXptUyo+L1dSIVEyaUR8UyEudEY4XSNPQ2ZRSHNNVkxfJjAmXlhLRntlSXFidXJXYzwlZ0l3dV4oQng6aj81Ozw7LFE4fXtPMm17eiNadzcmSUVgUVZwLkQoR2U8cy5RIj1QdDlKIW8mLmVJ'@;
put 'PG9TKG0sV0JUN2tBSTZFPCk7NUU/KmQ0RHZLPCs5by8/L251Kld8VjZVSWhyZiN0L11ZJS5wYDpjYD1nSUliRVNpQCpBd0AzLnltdXhkeHExSGg9e1tsdWF4ZHV0fi9aZWFlPnJebGtEMTEoMUooWWFwIlZ3byooRnwzdyZ3e0lYV2ZvbFpHYG8uZllUdUUxITFdMUFSInFURDk6ZDQqMG4xdFBd'@;
put 'fk14KXdJbUsqeVlMVEteUT5dZm9GKmxlSnZYPEsqVjJJMDcoY2ZjdFY6TXpVamBQViprdEMsLG86K3hRZ1hrJXNYdnV9MUJTYkg8LzBbX2VRL18iZVdDTG5zKTA0dDtFUE9lNlFoN3pDQnAxXlZFbFAmNXNVVmZXRGNNNkVdcnVQNEJrPV03eTVJIXQhaVpFcGJNRkgmN0NIY11fWDBNQ3RyP2VC'@;
put 'IWkkMSpQbzFxOTh6UEppLjB5UFBDPlM7TmZafnl3XntQMlNXazc4Jj1AJjx2KnJUM3k2eTJbJVdxXnRLSHRFamU7ZXVCTzdGeHw/NE8ib1BzUmBEXWF3T01lYSl+QjBrZylSQD5feDV3ZkdPWW4zbT5xdiR8NiokKDhqVUA7dW1tRDU7Nz8iUz5fMV9ed3goNGM8W3pBb3puRU0xYWMhfkg1dktI'@;
put 'TEE0MGw0T31jWUNASmk0MlVgN08pUCVeSz5DPmgzIzsoQiZbNWo5LGhXUz5Rb1YyQSlZPk14YTVYKlE6aHA9cE5EKEhoWCJWI3pzWmhEbUo1KllbI1V0XmM0YXcjX1VwWmpvcENAd3BxPjw/Uk8/WiVuPj5hWjBCUztDODBDeWYhUXV2a1RKaHYpQnNVKTkqMzQjYzl4aXYrfjVRZGMkO1IqTkxJ'@;
put 'Uz9pTz0vKi9qKlhBPUpqWnEvd1tFYDo1cH1XIi9EUnxkM2AkJF18fnIxWEE4JWY0aT56VzQyM10oSGUuPytgIzs2VmZzNDIpaGo6WFYmNCI5RipSOipgV3M0OjlwX1omNTB7W1tqPkFXMUsqSFBhMDoyVVdCa3g4PklYQ21CZmFvYTBQXnFfSDIkLkZrSXB6InlwWjdtU2JnPWV7en1xV086QkNh'@;
put 'ezF2PjNodndJRko4SVA1I2x3d3p3Ykc3PCRLTFkxLldpZHF+MW80UjdpRClDcHV3LkhuI2RaSCxLbDFJMD49dld+NEQ3S3ltTDtYPHRnV3JMKjJBKGMmPkdddSRGKkgrRlBfNiVUfWFHKy9QV0RfTD08JkUwVTUvfU1NM1kuMWo2IkczMDkxQHptS0ExbXprUkFlfkE/STJZKzlTZFc/QDRkWWxv'@;
put 'aUxfQCgpTDlGXTU6Kl51JiwlfS86L31yU0xZUTsicVU5VVtIaSljNTEwb2JLMko3N2huK3Y9e2IocGZCISxsVzxyOGJzWSFhUzBkITtQe0J7Szg/XVQva1IwWUlrISVPdywlTHtYQXJ4T0dXTTJuZUwxTXYwWVlCIn1FJEhGfU8mdTgoenx0KkAxfC5ldlo0djVnNWxYSj1qN1FZPjxJU1liak4q'@;
put 'UkBGUExVVCM6XXVjMkt6bDhARDYpaFlmRjZ7ZSZqajM9YGpha2VKczRuI2NGNWFsQmd6Mkg8LEtTJjdLNjZ7azglRm5zb1dmcilfNXtBfHB4YWx3Oyo7KmVvQ1NKOVU1Y0g4SmpReEtRJXNNImhUPj9VMEF4VSM6YSxzN3dmdDs2KmldbWRkcEQpYXRsZSYhKmJVPGEqO2lsW18maEgxUnZTKy9v'@;
put 'fVBuN0kzKzNmJFFZWiQsN0t6YEJMUnVrIi5iKndaVFVqRGVrajk+KDRJYz9QMU4+NXMoU0N0aXBWTUdnd0dZQG8wZ0BIWnM/Om12JTQ/KkFjfGk3fjFuWW9eSXlBeXVOflA5XUh6Ok9IIiRMTmtJfDBgNlNabEBZcVsiKEVsV1hmbXs0bFYuTD94WShfJFY7Y0QwYjQoJnVfZHFmPDxdMmdhMjRq'@;
put 'SFgmfkd2cG12NDF3Wjs1cmh2KXlyYjdRYDZqQU0icmFKU2l7fGQ7cHAlRHRVIjYqVnc3UXZReUIqZ35aSntsdCMjQGBbPU4vVktnRkBMbkhYV0NKZiNedFQ6eUoyaVB9X3FZOUsvOEY1aiwkZzBPYGFoNX5ldDRQez4pcnlTRlslZlliMzN2Ikp+V2hAVjVaKFFWQVYpMXZgSV8vPyo2VGA5fn56'@;
put 'XVl9d2dMU3NnRW9lNWR+bFo3P0g0RzJKP3pYJWw9fSFHXkgyW0lDRVUmZGJ4JkZ7VGB6bTckKDtvTXF7TCxfWEtrRkYlLnBvOmw1VWohfnk0S1Jge1JKTzUoOGEjV2kuRzlxQ0gyZ3c2LztjPHMvaENAbT9FVnc6eU9vbW5HOW0sWmwzK2tLciMqNFpAJWpSSFAlRWIzYEBBWyg9bmJRIXNbdjVg'@;
put 'RG5xUH5CKSs2InpOJG0pdS4oXTlPTDIjTk06SXJnITVCV3xYK0tYcEJrRElua2Iwbzk3Qn16O0QzLikrTCUyZUtARV46KFYzVXNBZkBWOEhdKm81bll+LENPXjptJTNTdVdKWyFwby85YEpLXnlXeERsWDBZKVErKyMoOkhFNTIlKkZmQkFZXSNfNXpWUCltWDcjIzRGM0RkM1hNQH55UGVfKS5q'@;
put 'T0JIMGgjNXI6X2VZWzRUfSQ0em8iVj5DdkxSaVlZWEtlMFpbQih6Lj5fN1JmMSs6UUdDWCQ7ISRIciQxfG9sVXpjJEUsUHUuZ19+Pi9OYjgyMU5tKU9Hb2BaPzczYHhoKlhAZz15RWBiLzBvNEBmeyZ8azBUeCk4VDZIZU4hOkFTRSN0IjpNTXl0TDd2SVZWZzM4KW1lOT5ldiN1WypQbyVMbHAj'@;
put 'X2F6JEtlK2t8SkJCSDNje21kQD9SIlEpUjJXWEpnU0poNjQkV2hAandnYWI9IkZgYzZMbV1lZi4jJkYoUlRveXBKMyVqMGQ8eUlMVWk9bCVwNyFNMS4ySENiTl1kfC8pTWlCQStySV4hJCZdOSlYbyQqVzY0S0krYSU9KWtTYzFKdDoyWWFAQShydV1lOTgwIXx7P0ZPaGFEdDFqNmdFcGU+PCIo'@;
put 'TkQ5X0RlRkM2ZyE6ZDt6XTx5eWAsXTJpQmo0WmFCRE53UXdacHZFfWtAYVU2Ti5VeDVOXlUoT3lNfjxfc295cGZQUnlZSXpkaXp4KV1ddSRoLlJnUn02NHcrRC9OeTQkNU9uOihIZzlBWl9zI2UsITZ1fHZhamw2K2l+TUE0PT59LCsxMy4rcHd3XWFiVVdqV11uUWBfeH49dGQxd0xrOld5SHp4'@;
put 'cnNUIXwyViFJPEBPJm1XNkV2WmxVYUl4PnFRc3RvTCVmKURLWHJ7ZmlKTXNdYV4mOUlVPHdQVEgianJwS30zMjUlYXQmI3UybnJlZURiRi84MXQ3TGdTVGVkamNCbFVyP0tbIzBxTF9kbk1mTDZDWGpmRyVWRFArKTI6bTU0eU8pMlVkYX16WCFFUTNYe1FVKFtNKHYzKWp9e0omYCFXWWJ4MHVK'@;
put 'RCx+bUt8U01eTXROUV9gfGB5ND1tMGBEcChhYC5EQyRDWzI6UiZDTjN7YVJmMWteKShqWlFCXy80S1E3PXAhdS5RQ3shRzZlQylRaVh5JHsia1hyI1ttKUEkbXl3dS5jXkMiTlE1OGhyIyZQaUJiTDw2U2BeTXl8UWxIQnMyNHwuM0whfG1ZZFN2b3V3d3poOXw7bn4vUExHYWhpTS9ESGRTVDkv'@;
put 'Z1c9JWY3LF9TajRmMH1uSE14QV1CdHR+TVNRfWckZSVAWl57WVRIWT08U0EpKWF2JXVjXXd5ejZgIm46RmcyU3ArYSUzKCNqQE94Ml8yYCMuIzg5cllZMl1gcmpDfXdDeFZwVXpEfU01IWZnODlqZ0RKSzMpZX5eKSNoPCUhfiRBS18jI2lLIkQpJjB4IlIkPG99RlBJdXcxQ2FwU2dINW9ROFJ7'@;
put 'OnIoVURCaEBAP2YiMUcsUVBkU1deOSY/d0d9ZT1rbTMzQThzJjM2TVRCOTJ3NCJUVWloQGV3fmN9Lj41KW5aTVZ8NUYlOT43LkkvWS91TmciWSUmVEI0RVBbTz95Q2hTLmwzOUApJHQ/X11SKVQ9fXViW0ZhMW51Uk1xeE8hJktpMHNSLHUlcSFIMVRzNzJ3W3dyIzxNLkZKWXMjTz8vTDt7L3Ey'@;
put 'LnIyI0s4TkkhKiUiYW0oK0ljW2o+eD1IX0VfJCNnOGRpPldhRHMuMy4icTllQGBITFA/Kn5vUHNNZE5VRWJrNUZic1t2Q3dmRTlXSkVxOTQ4Q0g8fkw/Z2lZO0xeWVRNQjd3eUBnJTZ0KDJkek9eRnI0a0IsX1VHQFF4dFtofE5BK0N5U1ZqJm9KaWY4NVFZOGJgKmg5dS5McUFhUEVeeTUxWSYm'@;
put 'OjBoV2lAJmt0MzdudmlMc1VnKkN6TjdfNmE+fCElPVQ4NlV+PV0pPF5HS21aP09ISDtaZiYsMEBpMVk0N0BPcW55XjE0YEJmOWVHazBKWnQxcSY/cShsZWZdQ2NkUyFORTxgKl1GUTM/KFs7WzkqNHJAd3MvbXM3PU0qXWguZCgpQm42YEBWd0Z6XyVjOUkkLEcmUVpPQnFTbExROnltVHchfi9U'@;
put 'QUx6bzRyKEtdZ15CLlJ1ciE6XnZASEpsOmlyTzZIPUN9ZSRDMG1QdSMiUX5IRF44ODlQQEc8WiZkSlRAIT9wUEdMLiVjMFA5SnllRDlAIj5oVWRJQlNlIWMwPk5KN0NGY1RNYW19OyVhJUBEPSI+e348aTF5blJCOUAxMTBfLl8ub1tsPV9yIjEpNS9uPi84UjMrUnRxZk1iK3FlO3oyUF0jfDVh'@;
put 'P0N+PmRCS1ZWPndKdEdUYEtFVXhGfkksdG5sOzRXQ1RJNj5UYlkkYVldVC83WlVWZ1kqPjBjLnZqKCRHekRoOiZFaFBJPV1RQylvS0xCYU5sNlA3d0trbCR1ZG91Pl1Gc01NN0hYYURTPjtgZGVKan4oWCVHOi4qdDJLfEImejJdZCJ1K2QxdWxfdzpuMFVCYFlZIURpRGZ2T2M6QThVTUIlOWs0'@;
put 'UTRnQituMC9HUXtdRHczZDBrMCJLZkxZPS4uM3E5KlNVdVV8dGFEIkxUR2Y0PzMvbSJpLDI5IUs8SXJqTT5pOnV4OFJzRitmVTwvZ0VaI1UrfCY+TkJJIzcjRV5eQjEuSk49PWJ2a0lKMDRtZl88VnFQR3xPMTduMShoVzVsfiIiUyZgMD1sIjtiRDgxZkhVX01mYW5ra01SdkQvdCUleGB9KGZh'@;
put 'VE0hM2Z+cEI5MXlARTlgJSFiNFIzRi9jRClXL2kzbzQ8SUwyc0YvVUQ1d090WnVxJUlLMjVGNWgrPmQ6QGUhd15SVk91ZFo3JD43JXgmPnMhTTdfTWNnViZhfjk0Z08kTlNHZi9jU2l5OiFWSnImey5nN2cqfWRUaGAwcFFncmZnJWRSRSZkL2xdbXJRaGBHSz9XWjg6Zy5KOWdPUGByOUZiKGlC'@;
put 'MjByZGlAWDQiZmNYZF0lIkEuWU5gJEJUODhdVU9+X1dHanxmMDlSQSxRRGJKODYrT0RfTVoyN0FnInwpaXFNXVV9KEh7XUAvdzRAXVZmR3VVdn4sW3psNGlLQjx3SWFoSl1sOUM8JCY+M2pVM31HZFJ+IXBJPyl5YSFxUiFVV0hQWUV3ZU0jKDQ7RDs3dC5gMzYjRmxNISx2dTdnLDkoOkxlMW1D'@;
put 'T0J2NGArbz47KSosLjYqeHYqRlQhUGR5b3Vndz9+S0AmYD4qPUpnOCJEXTIreCQ3YXNYMTo1SWshWSsmOiM5I25fWWIldGRzPGxUXShHb3R8d0smRWB8YjpMP1FKOHo6NnFlbG8pLnVbb31rbmpnNER6QCR1QTJXRitgLGZSI0E7Vl1uIWBXMihaX1p7QlswNVk8diJEV3YufHdGQTVaaSghVmBk'@;
put 'YjJPYkdJQnJwPCtxUX1uLjRPPGtReFtdVGA5ZmdxRihlOTpqL1QqY3lwdCo6YFFzSTlXeSUobHVPQ304MUtKUj9lZ0pQREpKdEhFKjJBZW93dV1qUHFFbzBLTH0we3lqU1p6UHtyQ0VwS184Rl1bMDkwfUtDWlVyZTg9TnskZ3Eva29kY0hlPEpxUj0oRFRiO3g2R0xDNWdHPi8wTV5+PT9jN1pG'@;
put 'YGxeKHhPZVNdfUUwbGBeMGQkM3VuTzZnI0MzNUJWSV5nOjl4ak90UjFiZmBJVU9oQVJjPTUjQk0jbEtkZlIqV3lCYUY6S2cmYjp+TkN9I19bbWlJNUE0Zz5IP3p3Mj5WXzMmZkx0YGZqUSJeLER8YlA+XWkxfDBlUFtjK2RbcDgyT1FgUEwoM0EyaiIvQCQjYXNYWWppWmhHViZ3ZmxZZTNCOEB8'@;
put 'VTd6eVh9KndPND49c1ZhNi5CWiJ7KklfXT1eZiNmakN2OVJWc0k9QF4qYW5maDQrTTt5anApLndQQWZSclIleHB4YUhmTEU2TEZmSkddR1VFaiYjZX5qTnNDV3MxT0VySyw8dFd0cHM1KlNTPDNxQ3hHe29dOEl7V35iRipCeC52WWt9anVrZnB6Rn0yWix1JV5HIyt5WCRNaUcrJjcoNX1FKG06'@;
put 'W216cXFEfXdxUUR+dk5BVWUyJWAzIXUrb2x1SCFmeD1qXlhRdzkxQkJ9VUxsckMpQkspdF17Qko1Zi43NXQ3PX1LfipgM0RvenNlUiNSN1d3dixEVD0pTF59US9tSCwmP2V4aH1gRWl4VF0qJlAwe2hMSm9tXj9FbW5VZklHTzk7Zj49U3AyWV8rPjUpSWAvPyRmW1hkTDB3a2t8TjUwO3c1eWhQ'@;
put 'KnxHSj1VKyZ1d3NtMTEpTG9bJmZ1YjA3X09XRm9bX3s5LGIkPEJWcTp+JDE1X2dCNXVoe0NzL2g9emd9diRRaUdNUFQ9cWosM0RZLmcicnVGdnVxd0k8PjBBbzwzdGRfV1N8KHMyWCk3ZntmQ3s/QXtJPkUrdiNnJUB6JnRAU0xCWjh5KS9IcVFqb2V3KHVKKGNrYX40cygvJGZyW3RmXXM9IV1u'@;
put 'QFV7NixDZVA3Ojd1NXdYaHVOXnFhP3tSSH1tXjJ1XnBkWDo7RTVmN3x9b3tzQSJiczQlbnU/RzUqdlhqK35CX1VrNz46T2tlN1EvLkEjRzpWcD0rKzROQnIvYitVQndYQHJ3Z2lOUCxxO1A4fVF0VD9HcHJyL0d9MF1VYzYocERDO11sL0dJS2VXMj5PfiRvPUB4MyVHcEZgfSppcipYUlh8Q2RZ'@;
put 'ZHRHTyomaEZgUjk2PlhuPFcvOEtZb2smWl4lUFEoeTpSYCo8Z0ZtQT5ld294LGBqby99QDw2ZCNFazwkKmhjc2RzRXxPMUl1Yjlea29dWlhqR3F2TSlxWH4jO05SM31BUX5aI3cmdlc/fHxiNix9TGRFZVhfIXdrPnNyTjEqbGZhNkcmWW5jOytRRFt+PFcuSVpEdEMoP3hGKTBMNDkhTW56ZHdp'@;
put 'KEReaEVhVzN+eWEkfktMe3M1SFQqRV9GclNLS3A+WT9rNU4jeF5lcGU8Wz00RkU2fDshK0xVVzdXPiwlMENePz9sXXN8V1lfeWMhYnZ8fm5rWW9DdFs3WS9UWUA/LyN3Wy9qRCs+KTBCe2Z8V15jdVZVRE9NLyt+InRGZlBGNlIrUVV5O0V0fVRVXnFFSXBkbVpQPGA1RUgva2pUWlEiQjM8U3ZH'@;
put 'e11ZaGNBP2k7MDY2PGcqP3xQV1pte0dpbyZGYzhgLmcrPkI4I1AlSWppSXE1VXt1dnc2Y3p7PUcwP1Y8KHJAUG1DZ05ye0x8bCFdJjFLQ1lmdCZxXV5ZOy8vJDwjcFVHNHMsQDh2bTNFfGFFSXYpVSpjTWQlbjk3fU8pdD95Jj8kKn0qZ31KWmJBYS5tYyErbn1oSWNMLCo1Ozx+VmZbImIjQm03'@;
put 'dlN+LE45T3ZobyRdVFN6QywxTj89JCR1a24xRnd+bDY7RylNPEcySyRDbmV0Kjh9UHQzRFY+R0MuXzhuX2t3YFl3SjZoeFF0d3wpRyFdUFA9fF9CQldSMzcjR2h0R240SkpWNjNYczFoamhAJDJKNyV0KkxzO3E3OT16ajFeTDkyamVeXVk8dmRwJlh+fXtERypiRXk/ajY7fld7e35Ud2p+Y0Y1'@;
put 'UEtZNDkwYGQ1WmB9Q04reFdLYykpU1Q1JjJ+JXZYKX40T1QqfCVSUWIqJDFXbU1UenJGYXI9RjQhRHtQKFgvXWAmO2wyQ0NfNVdTLlRTXjBnIzBbN3JBO3dyLnZxeUo+SkVQOSNVQ0ZfMDFKMHBFZnRVKnFkSTI1JVVGV1U3Tz0iN0J6a3B6XXJLREgufXtOLHYkInddcUYlQE10ZkJqXVk5PyxO'@;
put 'cTtbQTU6OVdwaGd4bl9lMVtFeChuVXk3UGpgUjUzKm0waC8uR2JwNTUvPSI4Ml9hO0k/YGNOTj4lVEpYSFRNWWhqJSZAeS5qLiw8VTVxXmR9ZllFOlpoanxFX0tDWzFWQFhHVDJDZWxJTiVwTjRNZk57S2kmJVp4QX4ha0ZmTTRSVjFSKnxbPHFSeVRzaT0/Pm1AJkcsSlVoTWxJJWkhXyhkTGQ/'@;
put 'RUZyeG15PV9Re01MJVU8Ul57SXkpQjVkd1VxOC90cUNVQCRqRjEvN0UsW2VXbWg6UmR5bmk+aGdnNlkvd29+bD9XZVciay9CfFsoSWNVSzs7RCFhYGRKN1ArTkI3Wj5NWjYpbE11SG5xalM3cV0mWiE9cGkwbWl0dyxQe2VicEo5WD9MRWUyLm88I0JBMVM0PHckQGolbkwlSUcvZzghTTl6eCFS'@;
put 'RTlFLi5VIzo9ZUNtMT81dlpVcWI7bClhIjlML3oyRXtlUStgUTpzX2QwelcpV3RFKGF+N2heVFV4YnB7XlIlTWpfP1k1JEdecGIrT3ZfM3V9MHY0V3g2X0l1WjxPJjBpVFBkb0BmQ0FeNDhLcCphflNzLnhxKy49Pzl6VHFfPSRxdCJ4Ult7QnNRS19DRmhIUUMucFIrIXpnNUZyRlBbJUZaNzkw'@;
put 'RD1IfUpgT3tXN05tdTdsR0Z5Y0gsQkEzQ3RCd01lNHRUTX1dMmh9SlFxXytZTnxnM3IpKmhARER8SGNsTDEwSjN7OS9YOFcqfklycHE0M0JTcERRO0JtdzY+OjNLSWRxZVA1cyxMW0lUXlhBeXdaRW1pQ0dWJV1LQlRebUEsN1ZGVWR0YzIhLjB6ZUUqQ15udHhpYnF8VUwye3RecXU1X0UpLGs0'@;
put 'YV1QYmBDfSh5cSkjdzF3bTMkTS81VThXaEI+Jm09bn1BJH1VQUBnZ1l2WnVTe0IuWmIldWJmamFveVFGJFZZU3lzSnZQQyJDdnJ7XWRWY1pJUDNvZ3VxVF5WfTZmZmlTUXQ1SDc5Uj8jT3BdKHh+OE0xUzc2UWtFQFlwTGpxJGgiSEomOjJKKEZJVnlaP1JVQUxKMmtnKkhDLiJrJjp1aHoxa0lY'@;
put 'eF1IY2xtWHxHcTUmbm9nTGhxM2dSJWx5KyI0fiRDcSlgaTlDJSUjKnNaPjw3L1ttKnVYPEg/bDZ3UzFsVE8sLkgpM3FDUzcsejVbI09DLlFCPCU1WC86XyZuTCFVW181UnhSIWlbRVEhMXw2MGxwODY7OzVCOGg9UiQ4O3ZwPkxzWVVOO1BpZWZ+TkdEU1Y6bFpfR25HWGBgbj1qRl8+OEQwV0hS'@;
put 'QmMzbSNNeyVIIXdDXzA0eHkuTyokaWpPIXIrbltGV2RBYm12RXVqRGVPeld9P2IlOFZuNFtAfUBNZTUkR3dqKTtqRjpbISI5L2hIPz4hJEVJS1RsYHwhWHM+Uz5QYUxJNEhLdWBZXmJxTnsrWjhdZFJOXVJ8eCxoRjEqTSleLGJJM35xN24iY2YjeyVRfk1dKFZLakxGVzwkSVZ9T2txOV1ucklw'@;
put 'SmR7bjY4aDF0fEh7RlcwMFNyPTRKKFE7PEkvVXZ4SDpIWjJVYmp6Knt1NS9tdTtvJFpvSSsseF0+Xm5DfVtjbTVTJTtNVnlHR21XeWNgVEZGO1REI2pzPiM5MykxTCNXe3dQJTI/NDxCR1MxJHF3MWUiI00mOGh5cWI8ZCVFRzRxNHc1bFI9TjZLaWFzRnI3cDJNWGF1InlINEFnRDEuOSM3dTRg'@;
put 'S1tMfHxPNS9iV1BaTVhZYiVNYTxHJCZWT2U4TFc1dklkfWNbUzU7LjlsRTRxK0E0NlV6W19kN2E+b1htYl9lPElteDV7WUApeSFyTy5ud2d9NiZ+PiNFMCk2PzFgKlEscDZZfX0pY3YlZHRnVXtUMlVSODxAQE1iWGMsSXs7UFhySHcmOyJ2aCtKeV48RFRIY0sqUkhBN1J7ISluc3NnZG9qfVR6'@;
put 'Pl5LMEpKaSNXOFlRPD56MDx9I3ZnN3RWaUt3bUdaM3pXQGxUZ0Q4PDcxKWZ4bDVCTihLdzZJQ3x0OmsmNEBJZitaYX45dzVefk5beldEVGlhejBWWmtNLjlTTHVHPy8jSUhwIy5+dStDWElrcVFieEtAK0k+az5TcG04Lk1iNCY2SEYmW3ZqYG53LCUzRnpLfiVCNDEsKXR2aWMmZWhDfUFncCVX'@;
put 'JjVVTWAmaERHS1I3QGw2UkpBND51b1hdMXwyNDhOdV9iN0RRKlJKMD1ALE0yZkVOW31fdSZVdUI6fl5hZ1FKPzUoIytCVGNnZ1NgRyY2fmYwXzM6PE15dUIsSldAbzF3bmNPZ1k3IkxPTTl8InpLYW9eQn5IazlbdWAraGFDeloyaTdXSVM4Xzg+b1QhJCg6VCpmIWhMPyMmSk9UZF5LOG1EfXN9'@;
put 'YVBieGxSalVPcmhzXmhISiZGXnlIREtYcjpLeDh0ITdrUChxNmhLRU57MS5WVVV+PWVXbE9qYnFgITpkR3B5aTMrNV11P29SMDp3L2txOjF3WygpVjt8bTJldTk/VG8mPj5Ea2EkLD0kQEtFdywpSHBGYWxFIlNGSTt2KXNHc1BKfTwoOCJEOGR8e0ZrVXNvSW5HSW9xbHxLUCFoRmFFK3xOISVa'@;
put 'Ok57bnd5P3d8NXNkTUJUNStvLEdLWFVtI14qNV5BJVRZYkxxczp4WldpSiguNUcseFNHYGt8MUkibEB6O3xPI3JjYUVjPSxpfV0pdWFHbnFjT0lZK3dwYmxdVTtYVW00K3dXSTJYfDVaQFZVblMjKGNmMiRfV2NCLzNQNV9UOklGJGZwd04ieldxN3dJb31TQFlfQSk9cGk3dj86WFEudnIifDZr'@;
put 'TEM5IV4jemRiUVZvPE90TDh2NUgrSD56UFNycGluQFFAZjdDXn08azw5TVZoRyJecz0+Wi8mbzFZTEQ8UDJNYU4scnp5U3hmejV2bzVKMGM6OmAmeUgvNS5XN3pUR246JklLN1lkYmNAfCV6emkvJT94Zj17UzFPWmQvRzdTS1pkNn1dVmZQSXR6OEx7Un1nVHxBPmNeSGdeNHc2T2dZTVdMMmRH'@;
put 'Tk5Sck8ldmhbV1NkbWJ0LnNLW3FISllKdj4rXiJZS09AZHZJOzsiU3pxcy4jUTBJfFlsKzU0NTBeQldWX1cpYipqN3d6d30kfXkldF98RUdeKkVMQzRuPHB4YypiWkFnaGZTIXVLRmFZIztJS30qXks1NDxQYmo2XT9KX3FufFs9RXIlL2dDRT87KUtmN2RqXS5YaShtW0MsaXt1ZWBeZiEiNipo'@;
put 'aThWQGt7L1NVeXoscVRzKy5hd3JCTHFPSUJqQl42e3h1Xk4qaHssK1QmXnd0ZnhQakFSSDY0cnBBQzhuXnpfZ1NfN2Fbb2R5ZldFZFVMXjxlaSQ2OTRaLyhyUm95KXgxQEdZYisyTjR3K3pXP1NnfldqLHtMVClBOlRIMkQ+aTk2XTZeUDZFTF9GMi8xLyxEeG1PJF4/aiE0NXJ9QGZGb1p0Q1hy'@;
put 'Knh0fjVyQmVTTjdlTVtZOHRJXSFDTzN5MjhjZV9AMUdMXXQucjwwaD58NU9UKTBmWTtFdjM1ejhJIlJ6UldtSUlVdHRNJlQveH4uSGt6VnhJRHJ0WXdbOnVWR2IjSnxFSC9rJXNzVWFFK3BTTFAhIStaJnVuPnluVl9Tdil0YUc6OiN6UWJ8TkRpJiVnSiZWMjU8I208dW5PVWVRPSpFWl9hdGpq'@;
put 'cih2RFVkMj1WSVhAKFo+IXdSNF06dFRvc1JqVFl0T0NsdlNhbk58Sz1xbn1+aG5aY2JkQ21KKCI3PDcvaTpxKlApWl9MOzw8XkdtRV9iN31TIzYleD42Z34sZ0wpS1cySGJ2OSIwbS48RUwkbmEmS1g1X1s3bDRxUDYjWzE+NEJPfSghR1VXRzN5NnRoQGN6KTtRXmYlYElsbGVbJUVTUEZ1MnhL'@;
put 'MnY1I1klcG5WMjFiY29RLC9USm15V1VAV0RuUjZMXXZTcj8icClnMk9ITms9X2JgMkgvdS59OW9CKjEsTThBLiJKNHswfXZrcjl3SS44NkQrUlg7VFA4fixfW0J9L2F1cy9+a3MkKT8rRHY0Qnd3O1l8LFs7LyxGQV5jOC9FUTkhPiY4NV1wLjMuOH5ROUdnTz4+XU49bkp4e19NQ2MsTUp8dFRm'@;
put 'VyhDPTtVazN8PkZ6TzQlWCVNZ0NpNWxHeCgrYyldTihCcSg/fSR2cCtJL1NRTzM2V246N1U4PW8iQyh4XUhrL1g+cVZ9MFhjXm15V1RSQTE9TV4xKzZXNGFxKmw4UlpvJm1rY0kyLityYVQ0NCNrMyU6Q3UuXmR7SyRDUEk3e218Lkd8MzdlYXldKUkvajRuayp9KmxZMjVid3tCa3MpbHl2R3F9'@;
put 'b0lCRSY+STtMZnxWXzdoXVtbRyQlNyZAZVBJcjhFaTRsWDA+ZzI8S0FnbHt+OUJXKU9CJF8uKExnclk4V0pzKTpiUV9SUEx7WjFiKGoqIVVWL1BpYGw+YlhrYG1CJntnNTtnIWpdSUA4OGYmZy5TPH58XTVDYj1Pb09UQENqKmw9YHZdPS5fREJxLyg4WUQuRVA7NVpTdFk1V2dwWWRpJEdTMWcs'@;
put 'TC95TlQ3ajU3ZURvKWNIMEtvalAyZHtGSUEuaig9OzVKQmM0LCljYnNJNyRyeXcuayF0MmFGPDBlRzxYOig4Q1BOcVY3N3FpKS5wcUNgSnpISGZ8TDdRM2sjLDY6c3REOE1CZn1qKCYpT21GZitVO18jezRIND8sXkY9KWxpQFhMZmNoS1VhUGE8QUdAKjQoeXY0fkNmMi5CS0B8SV9kN2o0PTJv'@;
put 'YzorQGhLPXtQZiV9YzZyXSJydHF7NG84QGx4WlA4fk1wbGV6VD1eZUk4e0twZWZ+STNUS2F1IzB9QGAuY0hSLE9mdSFLXkVfOUg9fmRsSF5GcDtWazI2TWZ6ciN7WT0vbjRAW04wQ0NpPTlGLjdeP3YjN1lrRFtiRGpuMixodD9LKzdDMFZiQyh8P3NEI3RHMGVTd1VDaFp8fFhIZCFQRHRVbzhG'@;
put 'Y1h9Sk5qK0g1VkJvPmokNnEmQmB9SCNJM1sjazJWL29gJl49OlREdj5DQ0t4ZjFsZyZxeUJGTj07SX5sOVVUPDZZTjs0V0B4Izk6USFiOSs9Wys0enRoMlAlNjF3djtNdmhuQUhUNHdSQ2U/ayRdfntWej1gN3hMJk9FKjVgZCR9QXspIT9qc1MhImtHQUcxTVNieFpVJjteUE5VPWh2TGRIM3Y1'@;
put 'fWlpM2lDc15SbHF2NTdqayJXfTU/S24jd2psOHZyXW9EcTYzRTsqW1lTOUpwbiglOi80aH1xZGIyMWJTSEw4ZmRNbnYqY0N+OE0+W2IkNjNxTVUiaEglSCI/VW0hVXJbYnJffTFiRGwsMWQqamtNSSRRWUlIZzJeK2lJW1hIdWdlM0FIT301aUw9MyssKFt5QipIfWIiNUEyWkJjdEtTY3ooLlk4'@;
put 'TEB2ZEtJamN5RDJBLjwrUUZGWlE5MyZWbCV7U3ZUfilTMH0vNjc2P3o6ZXNwKkZ5cyNEeCYkJWRHYHU6RGFMYVV+W01sI3U0Pk41U3xxQXA3cD8iKD5jTnI3N1hrSkQuZ0tUS2o8RHFYbGQ0cVRKdV53WSt3Nk4jbVBMQHFIW21MXlZnZSx1ZCsicllPUlpOU2FANFBgNkowViFGLk1yVGNFY1la'@;
put 'R1h9WVYwa2M1KEw0WU5zYSwqbFd8XSVzKSwxMi5TYkpCYls9OVlPNFUySDFKVjMzfWFTNH01amRwZFBXTz0/Wz8od1dTeCpMPk95b1Qhbl48NHtyN3x0ZVM7cSppOUA7RTpMcDt1TVIzMlJrMyVqemV9Z3VuLm9bc3Z5Ui81K09AcWtbNmFDSF8/N2QwO2R+OnlZQn03P2B4dlI1R2cxVjNDSiVk'@;
put 'TjEkX2lVL18wYHBTI3QsdS5gISY2Jk57MFA4QG4jbUIySz5wfmVjW3N0UUFpZENQVncpX0BfQjBIKDxqcihHTikzOl9SKyZPam95XmtdV0RTMlNlUCpdZE1dZDhGcy4/VkFyeypWcDZDM3czbFFSXlhXKlhxcDVKKSYqSE40UVplZ3dXQmZXOU5paG40dCZ2PEx5Pn4zKUppIjdaIztiM1YifiVn'@;
put 'WzFYL0ImQSZBSXp+Izw9N1dmNTZURjJMRF5zO1leXyp8KWpkVSh1azA+Q3RVRmExb2N+PklZI045ZHJsaGZybnRwc0UzUTg3SCwpRFRMSzVFYHx0X216dShsT1RrST9XTGVCSG4iNC92V1A4dTF7V3FGYDpkOjNUdX4mN1ZxaW9+M0JKbURgMTJubDJWcjI4YEdiVktvR35kQF5OdyhtPURlZ2NB'@;
put 'b2tOZ0hPNnBUYGV7Skh8RyFXY3d1XXV7SFVzI0UmWDdjMjowbT03eTV6XiF1dyxxWnw3S2cvNmM2SStBO0toM1pdVFhAaVpMKnBMV2U8JkEpVFFeckw1aClaOlBdUnRYMnM5XWE+KEk4RFlIJmR0M0kzQ3s1NjZwVSJSKmguZ0RvXmhxZE1JNXhBZ2lbQ28hMjxoP290cz9uVFowfXtKVUUoPDJi'@;
put 'aCJRcytROSw9XmhiV3wsOVVUKSo0fUwkWFI5YENdIlg7JWdeUWJzNy9WaFZNXUF6JF5HVWBHbn5zKlljez09bFV9LyZzVW8/PGFaU0tRdTVIUSpteWRdNmVWfGREOz5fMis0VlIkLkQqd0FZMWExQnBPRDxxJkgjZm5BPVhWXkVePjpFdXcwPWwrPVM7JX4uRz5vclFJfGh6MWt5Vz13Z3V0Xl55'@;
put 'Nks8cCk+QmBva2c2PmQvTytHZjttZ2swfFdNbG9YKjNTd3xWQ282XSQkOnxmKjklOTZ4O0JTaSpLQ3ZlPjZlYlhYIk1XIkJIKHtbdnRhJDIpQXcucEkhO0M+RDEzPndaQkZMfkwhU0hmLzppX2Emem9NeChdIkR5KWYzcVtgcGVwJX4qSzI4T0ZgaG5ia3R3UygwP1c5SU1nX09nZHZCUFttPT5v'@;
put 'ckhOZkNUbXx1OyR1Wl9OW3BKJVJUMThqXkc1TlpVZ2FTXUNzajI7d0VzR0lCPEUuYnBfcSM3e2tOWSRRcF97M3FyfVVgUio3ImRCaHE1Tk0uSzJHfShdVyV3K341MnFkWXZWfUtGS3grblBEMD5gcn1CZG07KjBnakBldTdLcHEzJmQmfkMjezgzeGMmbS8kZEs0M2NUSFlOKWxba0JLXm9IVj16'@;
put 'SXh9eCxARHt0SzMoZCJFR0VYbWU4JVYyb0dDK0BubkoyOWVnU0xrW117V3E4Q1FfKkZffHNDSDxINGd7a0RBXWV0dkNBTitpbTZfZ3skS05iRE9nb2AsV0NGT2cpZmB6SFoxVExEZFV6cDp4XT5eWip2aVJzaW08UGZeYUJqelt1Vl1QUG8pPitPckdNUHh7ezskenxieyw2MX5Zaml3NXNzREw4'@;
put 'e2tlMHt2bThPLFtMIlFfcDh7WW9SYH1dWE9LYVBNUjQpUGJ4NHR3XV5OYCR+PFZeVSZGRCMmeFkjS0w+bjFsM3t7fHZWY281Sn5PVSJVNCV+JW1NOTgqWTI9WjFbai8sMSltZTtqIjpmcE1jYTJKRmltPF9JMkNlXWJ7Tlo5N0UoWCJlZDhKOTkpOyVOTzcjdmx4WkYvYUIua0dmTnYlZThmIT0m'@;
put 'SHUhRjZZVGlIZFUpa1VkOi5sdyxQcDlxZjhRQldBUExtW1QjIjVDInVhJjl5P1hpMSs3ZTNzRX40bGRZcj9SeV9GWC82Ujh7UytWQDMqVWA7Wz5tNGk3NXgjMEZuTkQpU3JYUlBUTkQzOioqNiUvW0lieURzPm4xKyY5WClIalMvI1dkUX0/XmNzfkhSNmg+e1YjK2Q8XVVwMVpFWUM9YkRMLm1D'@;
put 'SUM4OjZiOGljcGMvdDVgTEpKbGkyJmlPNVQmIVlkLmNsMyFZc3N6SSh2cDh8NihaZzVaSWA1X0c9X34hdXRPdz9yMTAvPyp4XmMoV0VkSz9SdUF4fmNURTAsKHc2UmJMSjo6NSNKcXJNR09AdCowO3hNIiUqOCY0TDFHciVLay41NE5tS2Vgc1QuZDVMLkY9SU46YnQqVVs1PEEifVl0TyMwdClV'@;
put 'SGRmJU9CQ01vTCU4W2RtM2FHMWxgbyViSytkbTEjP3B5dH54VWs8ZmZHZSlPaH53dzFAMXR+JXBANVh3cXVxTHN8RE1EX3ZmUj83PUhhZy40TWlWaVFtTVN7RGtxVGdaNDdPeDo2fl57Mn13TV80L0xKdF0rNjZIdXFlfT4lZSYqalY7SE1pbGlwU3B1dWokTU1TV09mfF5NI0NrbkxHRC5rKzBJ'@;
put 'R15pS3VwT01DNVI2czNmUklLOywwRVd9PUxrcmYyX1dfd3lnXUdZUSkmcTA6Ik0pYXBoKHVtKjVNJl1RQjdrbmFFSEM0Y1AkQ087aDdjL146cmk3RGRoaHt5MDdlZXRWbShpSjYxLl1ORFh2MHZeRSVnIUdtbXlDRm9bOVdzZVFIUktFZy9FNHNUP1h9eSJ3VXdSYylCUUZNaktIYC5BJV4jOEZX'@;
put 'YF9PeVJUMkRKaG03XlokXyg8cGReOH5jK2RENCt0byJjbH5GWlpNZENrVzZpXnFNPlhVR3pDRXU2U01ZRUJVXS9LIzhEQHx4XjshdDl7ZFt2NWM/KlFhLiZoRT8rUFVrUHVGJX44QmtnWFpsKHJMclpue0p3OVJjInIhRGwuanAsP0NLaCEocVFWIXthX2AiPjluWXpKTiU4amYkXVBHYlc1RTpd'@;
put 'bm0kP2pSVWZMMjBCa0IvYmNMNjZPZ0BSdDlfajppR2M2U2BSUHhUYT00ZkhRX3Q+by50UmVtTDc6LDIzN01BKEVWUXNDR08+XT4zPC5+TDMyMV47V1tJUGVeXn5+am5LZWJ5SVk5WDgibkxmfWNNajdPTHRQSUh9OWslRlRnbTIyeXN4SGtBKUs6c0BrVCpzITImZVQxcW1KXzU5Mn5XQlJJQC47'@;
put 'TSNrT0NfWCokNmJGYHl8XUYlbCR3Izk5fG5xdCMxTDdPLjZeaXwkWU1UTUR6dFlUbCF3RjtWdGQyKWF1WTEqKmY1KklWRWIvRHFSQCl1S1luITVKMGk4aEM7IzwvZUVeUHRkUH1leHJuaHNTRj5SJHt8el9eVTF9V2FAd1dFZUxANDpvJiE/QFF4VmchIn1QQ01RMzNuQ3UoS0I9TWZDNFJjVF9h'@;
put 'ZVU1dzcvV3gmJlptVVZMKj5oW0Y5ZWBsUXcralA4QVdyVSNAL1NYLDNIKX5GXSslODwrJGpjSkB9NC45RX1aUHgpIX5wRXV1eGs5RFc5Oy8lSy5VPz1SMW19bVdQM2p4ODJMTmI8dnw0UGJkQEhZc2NofW42eUkxRCNNJDUjdmQuUjpnc116eTBQMU5kUnEyYlBqbEg/VnNHVFhTR15PSmpvKDZp'@;
put 'OFouKilMRkBwQy9panMpZlNLOCt1XX11eDVCL09XZSNkNEtaSTBuZSEkWFZXVlsuIUg2R0pBbzZrKU5FWnRmSE44dSZuLj9XVmV5blBIazRgLl4xJHZLQXVoZXh+QC5bc0peZ2w7Qm91TVcqfXFEN1pSXndjRlZ7KyVTfCNeTjlAcT5xTkl8V15xVWdoNk4seGZdMThDYm5qKSkhfnk8ZFF3dWlP'@;
put 'PXNCTUtFSk1CMj12dHY9L3tOc30qIVchOlkkRm5uXl5nRTQmS25fbG51UEoiSkRPN2dZTitaRj1xayMvLn5kUUhHd2IiTjFSa2t3KSJdNXIzWl5vUWdjWnNQIjVxT2IwbFRJaGNocm5WRn1lOD9gLEF4Y3c8blE/QmAyczJKd28yXV9FSzp9JW5IeWp9JSxvKXRAUGx7ZXdaKlM+OFJtN3pCJlZ7'@;
put 'Q25wWXpaIyEmIVUxdSJXS29jT15HYXpRdncrWzROPCNRVVJAV2Y3W0BxRy5ITUwjY1FZXkcjRGZkcmFtcXlKT1dWe2tKZ0c+eCNuTXF5Il1hQlF+dHs2LioqUkJvTTt4fSFifT1xfm1ydDk8Lkh2WGlsMzVJM146ZHRzMEciSGNieGVCSE53NysuKCxPQmd+K15VX05Qa3ozQWBPbn0zV2YhQmBH'@;
put 'Ul9RZEM4cUliO1lEUjgmI3M2eXFwXW1hMEtfckY4VnVnYHc9KDZdZk9oQH54M3kqSS9DeD5XeHF3P2lkZVRRJGIyc3t4Snd3MVs0bVlffDtRZE0sKCR0JHU1T2NJU0NIYHxIVH50MjEoRWhUSj9rWl5ETWFmSjUhYVV1QmV8SS5JPjNMMUt7S3RVImF2djRKN0Ilb1VpZlB8aW1iWHZ0c0Z+QDA2'@;
put 'SVY+e1AxRU92R0JGQDNKN3tWZG4+Oz5RP3AsZnBCbzsqbnIqPDBZazU4V2lIS2ZwWzp9aUBdUXk0P1V8cFFWWVpmfjg7KyZAU0RZYWIvUVdqQno6eit1aWhyWTw7Si4iSDo4YHgjMGZwTlhDW3lqMzFPb1NWQSp1IyVFfE1+TXlNJjZRPU1rfDJONiY/PEcmPlozOS4wenlUTW1ldmcwdE1iTWNh'@;
put 'IkMhb1dJQ3FgQ0gjfTV3NlBLfCo5MDomdXp2M1ZMcXMlbUBAa3lHdDdTfl9aQngpfX5OVXUqRldCbyp9I0RGKSRmRCZ6cDU3VSUpI1B0TFI8RGZAKCo5dSNTbkk/PEYkNzd9Wy5oPkpnLi8hWiZfSnpbMGY2bndHWjowIUojfmorPGZRXk1DME9CTTFIIn4zXz89YkhTMUA1OEYzSyIsdiZtYVFs'@;
put 'MC9FaHxYMH0+RzN6Sy5aW1gpdVN7KCJBZ2pOU3NCPFg8KWlgQDBHQSFOWDQ/VFNYRz4ifDRielg4VW8+cHd7TlRzMGs1Z3Bne3g0XTJqXkMyPnBTLzZHa3pUbGsvJmx+Q01+Wn5+MW9TTHo2MG1ZOippbD83a3MiYCY9OzVpMiN6VV1sS1sobykhcXx0Z15+JGhzRHdVIi5Qa2tdP0VpSUskXV5t'@;
put 'NW9RKjUmdUNnNjFlfUdZPyY1K3NtUys8cjhbY2FXNk5ePz5LTjFgZW5IfkB1QEQscWclPkIjSHMpZFFfbWkqQUpXPGQiOzkyWzBIX3ZBI3hvdiFyPEQqK31JOTgsdUQkOVVAYENHU2BFPzJXUy9zfWZZVERmbT0/LEBjTi5mXiFRI1J0Z04lV1MqY1d5JXRYK25YLG1hPzx5JkV9N09gQHhiKDI7'@;
put 'O0IpVFhiZjFMQXkkQGJIeHYhW1M7d1ZWYmZ8TiZpZU0iSjRXc0lqIm10PyRLQWF6QmBofD09OD9xOkkrdXxqZH1UU3k2RHc2T3JBcyVMQnsoTnBjLm85M24qP0koR00sej5OSCs4UUdofjsyVHsxenBKfjZuKSFoTTs0ZEhDOV8vWFFlfTFyMkxJaCNxRVBYKVdzcWI3TThicjFRIylQSWtBbls9'@;
put 'LjE7Rlh9WXZVUU1jISUyKD0rMiQhbyZdUjY6WDAlPWJWWFRifGRJMD5oMWIjIiJWfHtiRnAqP2FBWVhgKC9ONFdEVGVzUz1YJSsiUEM1TENvXyp0YCUqQjxzPitDMSlAdyUsb2JiUGIzTF4mMFJhV2FfbV0+fVcqeCxlZXtBI088Ij15I1NYcmZGNTA/NmM7JGR3Y2RmKEFzYU5UUE5oREQvSy9+'@;
put 'YywmYHFGUXIkcXRuQE0yUS9OeFV6WW9qPzZdOV5nUz16XT9deiR7ZkUjSGc6U2Nvc0k5MTNqYyhmMHhaOXpMWzFKMXs3Q0RLcm55aUJ8LDx4dVg4fXw+ZnwsY3l3RSRhTVIuOFlKeVQ6P0V3eGopbnFNZ35xfkl6JXxtMW53XU1AWXpxTiF9aTpRd012bVFTfipmXWB+UmFWbWxIPDBiWzRCKTNX'@;
put 'Y1FyXm9QZmosWElhY1V5TWZgUXIiUH1lXWc1Rn50Vlh7PzBpKzw0K1huYzRuVVF1cns0QldSWTRnQGI0W2dKTX5gTDplZSlyUTpbdUF6SUAoUWVQMXxYeTNyXUgvKVkyZ2cvX0syWT5gNVdhIy87JlVTcHpWOHpPZXd8K2d9SG8qWVdWXj5namYsQW9FZyImbWg7PkJ1JFdEVChJMzEyYnJGUWQ7'@;
put 'VC9he21XbixwM2VORm1vc0l0XiNNL01xNC8wJDtgUDBMV3daSG5mJUNBNiNGU0tHcj4/fVs8MGkmZkp5OGROY3s6MkxMYC4jTn1JXjFMNGt2UDE4fT1PQno5aCptfWpTMTtZQTtAMEU4XW5QcEhfYn5AJDNSLnoiNisoJHRzIyY9bkIwaFpKUU4jTD0sbzpBITxzYFoxd1NsKFBXa0M5JDl2PzQl'@;
put 'Q2M3YEE6TTVTKyMyVis+RFA6fmAlTTRBNDROS2lNaCMrZ2c1bW5qbEUkZGtie04oU0NYJihja1sqVyhzMSE3JSZVYyg5XywhcTxiKkEwS2dPbz5DeTVpKTJLLCtteHUwOT9AV0JlQURleFFAQ346JW1WLjNJPGlUUVllSkIheyg6fWdNUDdZPEtObGxQZnUsN050Nl5HRTg+aWppb0wiKWs3eik7'@;
put 'VFk1Uk1NITdzbCEjR1dYXVYlfmNPeX1ic1AjLyhkK3E9Ul8qI2o9NEcqZFM4IWcuVjAxTFM5eVhGalhCOyx6e3ZhRiVGZEdpRTpveDwsITs3YDtga013dTlSY0phUG8lO1I3ZFJbUERuckhmM0R3Sm5OWWRteyZKJGJhe21TRipDSikwTytqW2o5Rjh6eEI7ZS8wNVRYNVt+UUsiaz9ncGQ6ZXtx'@;
put 'KnRrZ0x4fUc1VTErc3RxW0lhJV1DXk5IYTVVX2lJOWlVWUdwLjFHSkouLm0ubGJTXn5RZlc9YlNqZkQpcis8I1cxYiFlSy9zLkleI111RH58YEFEWDk7MSN5JU5iW2kiQWM8eW1XLEsycSMvLEk3Yjl8UDJDRFt9NXNuXkM3eWtgKkVyW3Z6I21lOmhYMDJPZGZELzVoWSJ0Pk4xYnJZekpuLkht'@;
put 'PzJdRkN0TmxXYDR7WXQ/PitfJiQ0SnVSOGlUbGh7bjtvX1l6cT4zVlRXV0MrcipILClNZ054MXlmW3ZsZFpvUCh0Jk5GTldmXU81YkhINEZMakR3M05deXI9bURIKjpeQD5+bVVRWzZQVlBtb31OOH5bOmQjT3xseVRre1MmV0VvdENyMTxVOzxEUEtkZEJDKTleZnVOb0lMVVk2VnMrX18vJEY5'@;
put 'ST50eUlRbkRdJUM6SDl2QzQ9eVQzK0s2fW5gNlhQalNOWnA0emVlRkJ6M1M/cUNkalV1Z0RwO2hGTWRWMV0vcmBfN2hCUXs3NiZtYyRHWUNPcUJ8RVAwQ0VYJWU/ZlUue0Uoc05MK2RsRmopUTtWcyhIbUdCODZvW2R8PCVeYzNgKWxkayt+Zldmd04oMHxKQFs6L3VKcUouaSZKaDB8KzIvUT8j'@;
put 'd3hbKiRDYm1gKTxXVnRgInFUXiJnZDdnSkhRb01YX1heOi5TdzJtJSV1W2VsKTs8UHN9SmF9ZVU4cGV8al1RfmhVNHBhJHt8eG91NT5rdFZ7MXVIOSZ2eXsrOjMhb314SDIoYGc4SyxDQkw6cFBbUio1azlUZzNKSXpEX1Z3dn4qKSJ6RnZ6VTVeS15CNkxKKyMzeHVmWGs2RD4mR1lYfj8zKSV8'@;
put 'R0hATC83UXQ5U0dMKEJye2Rnb2AmWTtuZ05tV0FkbCouLjVAY2R5YWp9PE52RVhrNTdVQmllUWt7S2VJb1JMIXZYeEhhQiFXaTBfNHk5ZHJ1MyowcldDSzE/YkxMX1NsaTNJd1p8Qm98STV6eDNZZUtqV2lDXWdKJVZZTnVxPmpJNis9PHw2U3A6T0ZEPj9+eG99ZFRhN0JgO3clUWkkdyU7IXs7'@;
put 'MzFoZngmY21hfkdtfDQoI3hoNlVBeFhWRXBZRTlEMjk+TU5WVDJyZEZIbHduczoqXnI1ZDpATWo3eVI5cTVYNmEsMUhUOGxLQS46KDBVZnZnNXd6bEVxMDFUdnElfHxaZV8ibUQ1MyNmdTZZfi9fMUNfJVhyS0pPakpUekRwWEI1NU9xTlYwKiNZZmtXVVFVal46eWYxL0k7IUNfbXsudnd5MWxI'@;
put 'NSFAM3hSbF1rOkZCQiNmW2ppeFZ4LjF3bWskcT5wRUd+WS5EJEkmJnJYTlZfN247bUMoS1pZW25KT1FtTTpvQVAsZFVBaU5Oanc4ISo4RiJ7TURuXSYvaUsyNiVQKH57NjxNRyk5fT9ebX1SQ2dSal1RO0h3aTdzVD9TWUJUaSM6USo2dGVYLCIpVGc3ITs6aDVqN1guXzxNYGY0QFRgSlFpLDVh'@;
put 'O3E/SHVEYCZGOltLQyFaMipDTnVLPjA2a3NwO2tXY04lNUlTb3lDQXJOXkIkTFUvcz9sQUJNPzM6TkR0RiZBOW08Xj4uJVtsOkRDMHp3RyIpaVRedTZXbHRoUDVZSGIzVXNFSj1Va3BhZS5AK19rMSl9UH1GVlhAWHMoRX13dEhuc1g/Y2RiJHxbTlUmO2RbWSNaKSwzeThCLDlAZl9wTylhPHVm'@;
put 'XjR0IkE/OVs9bGhhcmpGKjpIKzohO0JxPSZnVm5yPUdOemJNXzRuaVJ4TmlPd3EoYHp9YkgscDN4VV1BUGByMGhKRCRga3tuSWRicClsalpLW099YDdhZnxfTnBoKDhadzJXaWEpWyovVHF2V0l6RGVkJCQlWy9NIi8oZ0c3YytvRT1ZLzRZcTBVflAqTDs1TEFoI2M+OyxPYltvY2w3MGs6RTFv'@;
put 'SjwpI1QoWzs4eSlUJX0qcjRWZmZbZUhLWitUVEQ0PT1icWIzOnU3aW1xQToxRUx2RVM4PWZQOD0xPzNybFZHViV4NnVEPy5edkdhKCxwd3A8blZ8eXBUSzIyeEBUMStkKERmYDVoMXlmPUBHUll1XUJkQElZWkB7Ml1ffi95QEE9Y2ZmWzMrYEhLNTg+T151NCVROGpTdkh6IT9MaUNhfUJYJXpE'@;
put 'ZjNPcnI2IV9vNFFpYm1ULGJHXUc1Ryg6fSNbW0RrZlswU1gybiVzfHxmSmd8NU04e0xLdU1Db2hvMD1ZJWVHVWxnd1V4QmNaPUk3MGo4VltTK29dfGlKYWY1d2FvNV0/JDsmNVIkP1JCJSl8MjBqd248Py9qbUQkfGQhckUmb2F5c05MYVUxZHtuZFNzMWl+PCY4Wz5+OlhsRnxRTDRYRzVrRW5r'@;
put 'K1VIbjcjJnttdW5+RWkkPTg3dUJkU097IXpIaSQ+b0RRTHwmTyZIQFAsK1cwayokcCk4WlhSV0VseUUpOT9VcnV7Q1l8W3NXTGFNQSFGT2NlMngseSU5S01ELDtmNFsiYCt5VV4lWkxqZTh0bk85XTpHaytzVnx2YExNeTErTms9eDpKIzcmWl1KaFcua2xCL3peeklVOjUiVSolOS5rTmteeEhO'@;
put 'QCFoISxaNlZkRHVjdSxSe2NYdHEpdz05WmRwS3Z0SDt2Qi5+RklYUkAiTlYsfSZMbzwsQHdvWGU1M1d5PjtdX2lsRWFaIXRsTD9ZdyFGYCIsOzx+KkZgKTNNTEh0MGtlLjA0Wz5+RzxvV293WDdqZ04hJWI8TDw3Uk5rLk1zKWtETVpvNWBQPiZ6LnxdL3U0IyhWZC9KbFs0RD9LJU5vTUFEJik/'@;
put 'cUNmKnAqdGN3Kls3MyRwbXVPbDEkKF1dTiUjU3xnQXxUMzAiSm5uV2VtUUxpKUJKRE1bbDY5UntSImFUJEV7Ti5+Ui82TCVvblorXWRfMik/NDRqMWZaUTxsekNrRSFERyhySkB4eFJGdVldMHUhalA+OHJgRlQvPmdCY1FdeDZpX0ZdekxuYksqUnFCSzo4cSFGdlVfVGFWVFE3MD5zQlQmV2BG'@;
put 'VTBlJkNwcjZCPn1FaCFiQFMrckcmeTJFJVBHMEUzN1F7NCwpUHB2bjFPR2Z6LnxiWy4yYzJ3RmYsSEVaOUQiOzgkT2gqKnk/WC8mX3VYKXQ/YG9bJCRHb0ZeJTNYPzBpPyJxfl5IUH05UzVwNXI6QHpgQWopcV8yd25rYnJ3emRKUiY3fk5fSkc+STRfWT9zQ34qZ043VzF3KjlCMkZ3PihVOT1M'@;
put 'QFJ5elgueH5FfXpVUF5hOFBlLCFwbF9CeztBVUkseThQXW8+fGpoUCVgZTlUdllUTTM9YHldUCZQfWFLZHBrfCtlZTVXL3ZqJUUmfSs4N09HNCI7cmY9cSsyPnFUaj1rfm1MKytmZmpTPitpZkBbc1EjWF8jQDZrPW9ld0VLfCVDP1YiQ3Mrc29gODhyOEZ6RDtPckx8ZWp8Z0NRQyJyXUt7ckxC'@;
put 'X3goKWYpOiYhQmNUNWBHMm0zKFZ7UUJXNCY1UiNGXWJJZWs9VXdVeyhaY3xqIXI8dTJ5M0w7amkxei5jSEE2RElNcTZvdjdCaUxQTWVSRDUleypFNlR+UV96bmcla2VTNSw5dkIzUW88NispUSNdNSpAb2tXIWBGVnlsVDs7eUU2Y3QkbmZuRzd0cSwrdk9EPmlldDc5cHZZTnxbSCkiYi97Ryg6'@;
put 'cEQ/ZmNSUT1zTmZuSUxnKGdrbTFFUVV6b1VaM2E9YF0rREZOdVNaImAzc156biZ3RFZKViZaMFtnfE5ReWFabnRjZGB9PyZKNX1KRUNoST9Ne09dPz4+Sl5WY3JIWkImQSZAZFpRZiR1UFd5XmE5PElxb2ZhWW5oYXpGN2UiZyxZKHdqKVBydkQ/O0s/a2AvdUEqXUtrLzlLUXo7X3g2WmUoZz9n'@;
put 'SFpqb2k2fCxBPERVez5oJDU2a2c/TUV1T1IiQzBXY3hLcHFARGl5USI2UktgTVdAfDYqNEEkcFpUdCwoeTJ8NWR6eENtQDFtI35FdiF1VVlvQGgkVE4yKndLTSQ7YFZEVXIhN1EmYCw0NSM9Mn1RIkpxWHJ4Nn1uKjl7JCF7Mz1RJH0pIllEUyNNSHBgRz84XVlIWy8wNGUzeyRbIjU3WGtARj1L'@;
put 'Z2B7N1kwYG5PLk1qZXJmRW93RHRiV1d5SyEsInhYX1ZrPSowQ15CKnxNO01ELilUalptQyE3SV5WTTppPTRgRDBAXXtFJE4oXmhOX1R8U3gqaVhwMVs7TlF0X3lSQCtve1hUeTx4T0tfLn41WDwlOEN1dlspZ3dxYGhqSnZrP2Z5Wn0wYDxbPVMsYFJGY30jXkEjZkNyKCw5I0UrT25ZLkkyWUda'@;
put 'KGppQlo3KnlgVVExcVlZTWAwantfIiU2ZVV3Y1IrNXI9RTBVX3xnSkpyMGFUWENkd1VaZStRbjtLZmFYeXlfdGIza1d6eUtFSVolcS90bnA8bHJAeV5ZbXtYOF49VjpFeEhEOGxAIUJtNTUze0UhemM6KWsxaCxVaiUxR108UH5ZT3Vta3k5YSRYOWVKKEhjaUVrczwifUpLWjFEaFU3RFVmLkch'@;
put 'KHlIRXBOMENVIlRucnEwT0QyMCshXWdxN0l5WTBBTkc/MyR4QCxJbVtWXjBUek1RMiFXNFYwPzoleXIrK1MvdHIuZEhPKyZgXz54fD9xN00mdEtQNHxDX0EsSm1ieyMuI25xSjdyP0NqcWBRS1MvR3x2RyNMV2Y2RTJdT15uQ0g3YU83cjRlNCZmTEozemEldG08SEtYR0tZLnQ+eDZMVTBuQ04w'@;
put 'TEVaOCNCKlU9NkA6aTMmO1AmNFklYmRUVW9bJDE/aHQyWVVEUGB5SFRPR21wP0JdbHhGZDVzQlg9LlU0MTJXc2JZWHtqPmklVFVobCZqc2QmOHRwPXZ6aVE5X0N0XnJxNi9XNls+OzxneTYiJX5Ocl0vVkIqW0F0KXcvM0BeOjg7e1A1NnYyRlZzcVRKIVU7WFtGIikzNmIleHFEe3pkTiVCJGZX'@;
put 'dFBqaitkOnZvZGNWdD1mcF5oR1hoI0R5a15NOiVzPVQ4fnpYS1ZNe1ErfFttWjN3cGY+I3d+Nzo3QHZ4ci9XbE1dLHZoTHlqViJIYWtWaFcmdnVoezJdNU9DdyU0Ui4wKWs5SyJ6WDl6XWpeUG9Xd1ZhdT1pYWtjMDJEM0ZHM14mMiF8cTJLS3JCcExWK0lrbmY+YnVuYXVYfGg/S2g6fDEzRElQ'@;
put 'bSQvVGMqLyt8NHgwWjQ9MENpW2U9cVZGRWtUUj87dnUzV008Sy57fHg7RWZQVDVrdXdnQC8kPCs/P0hZTSk+ZVosTyltWUZFTywoSkM6IkpbVGxGL2wvOVNEIXcyRWhCZFhOMz5TT0ooQG9DezYkZjw7QWo8a3Vvb1I5PF41VjE3bVhRcUMkZW5UYjx0U3xYTFAwREYzVGtHV3ZgM3hrKj08cypL'@;
put 'NzQmQmJxJGpjKjNkOTguRHloZDI6ZERIczF4flFwOyVhZDZUcCpFOmt8ZXtdL1FSZzNicyU2TltbfE5VJDFqaUdgMHsqSGlXdD43dmh7ImJxO0BEdVluPlYmPlM5MC9mXltmfkJ3LE1QVnNadUcseHpIO3daJFN8WG03VzVzaGphP3tfSUxIY1slSiNaY2wvKmU+NWxXdnI6RjpfXzpSciM0MHlo'@;
put 'R1J1bDZXOnZXNS46TWREbmtEWV13PUZ7O2YlKE1mYCEvSVlAVyszYWIhJGBtJXVbPFRWTkphRmYvUCZzcUNwOkVPTSQwP0ZEU35Qdiw2ak9TMytlWlRwUyxQUXExdnNRdzpsSW47XjxQMCI0SyFbP3prWygiXzhhZz9qaXF0QD91cCEjOXRxNHBsUmg1WCpDRHU0Q0VHOXs8RF0pJipgSWVyLEh9'@;
put 'OmZmYXRjc1Y4Wik/d21iZHV6OS8qJGg5blV2IlV0NFU4MXc9USsqS2dKaUR0KFA/UV80IlMmOU94dlc3V2dHUC8yI1tfSWEzQnZLfjlVYEB+KGk2O2cyKGR8OVVKaEJKY3cod1Rpay9Lfkh6dy5qX0A4ZFZPNGcwZn00fHdnXyZkfm1Pa05AQXxATXdINCVpVjVQdTZBUSYiJnMoZDBWaTJgRy5X'@;
put 'OGcmZ3JaZnYoIm48OE1uRUwyRD02KjE3UmErYFZaOzliVi9HJlV9diRqbHM/bV9lcWByKnN5WWRGcn0mfCJgYGAlfEskQzRrLyt3N2pha215OWJrTWE3SUAoNilteWomR0JhJS5uTCxDRE0/dVFXV3hXT0ghPHFEUTFeTj4vXU0ydS8oIyIvTDoyYzU/ezJdVX5NTC9fald5LDlkME83KU46OC92'@;
put 'LyN1PWZZJkMqcmFkY3t6SlB6ZzhqYUZ9YWBGUlJJT0hsfThmUSx3KkAqPitifFJoLi50QntCRDxeeW5qNWFpImM/fXhyOC5jNCh7aGNYfTtNNnhEKGVvRUtVXzFlTVlhZXB2SCkiUHp7KVhDN1VxdkVXOjAqNkgsUlhlcCY3SFNdMix3OyhdT29yQC5mSE08Wyg5KzBAXjA8XkZoS0hnfjghND5D'@;
put 'KD4pbU1TeENRYkx4UTdLeyFYeERbIUJ1KVMocnx1Rm89aDBLKDR6Nmk6dVFGSXQjUClKeWB1eTsiVEViRiM3Ym4/QD5oVUB3bHZMPmJbJFZIQHVTSkN5WXk2S2ohU0ZwMmJNKVdNOnhPWllUNlFgMCtpdDw4IzQ3OVc4VTVlK24xYTx2dFAqVEAsNzIrcDFRLHJeIjRsZTdgNzBAPH1qR2h7WWxf'@;
put 'fHgkUXxYQF4qZjd4d1l7PW43QntiRkQyK09ScFM6Mkl5Vip9JkdRL3kmJF4hZ0Qjek9EZlo2R21RQkc1RlJ6SzcxJFh6ezYpRE86e1F7cnY9WlU0fHw1Oj1abElGZUlZSmpubHolNlNwJWs4JnZzcn1gbG5xZjFrZWFPJntwUFN+Q35IdV4lVjQ2YXFJLnchb0Zvfj9iMkZZTzV0W3chMGl9XlNY'@;
put 'WDNzKFN1MnJ4UXVWejNCPX0sbG5WVSwzWCNrVF5we2pOPyx0fmhFbXJmaXdtIToienBxYGlLM2xGUW1GbjUyQnY1Qnk9dzlGclBSX2lFcz59SWBxZytuKnVoSGYqKEU6YWZraUJ6L1hzVT4uRkp1ZDNRWml1Ym5NNVIpRGFxN1hhPFVGQkNhKz1pZkIhIzhaU0MjM0dBZEZlW3lML15NPSNoaHUz'@;
put 'PkZdeD4jSCtiL0BaNiRtLFEqW3ZqalpySHBLdDV9ViFbe2d1fClTS09WaU4oK0JNOkdXdV5VXV85Z2ZLTkFWdCIuPmFSTEZte09+dl4yXjg/RSlHKTQ6c11ubzp5XXNfZ00/bn0idV90RVhuUC9CSEpecWtGITlvbEZRaDJWJSV4ZmYuNX0lS2d3aVU7b1psazR0cWsue00pdz9nYCUxLEhSLFFo'@;
put 'W08oajtoZT9TZGkwRFgodno1Z1V+USRwSU45VndjZkZYM3BzfUxAQnBzVFkxVi53QFZwI1lJK1tJIyg8T2c1MShwfX02cFoxdyhuP3osejUoT24oUipEUWpzJl0pZGBSVkMlR0NDTWx+QThsTipnb05HXShjdD1pXzM2b14qN31FeGt5eixCVHVCRjRsbm00ISUyeWM4R21DRX52cVpsfnteWm9o'@;
put 'UDYoIkksN246SDp+YU02cy9mblYvSShxdTxoOE46Nn1vWjdaQVtpKWM2fSlXXiQmenFXTS5TJHRGVVJkXS94UT9+YCtgYWhOTFpEbnY0az5Na3RtdFchVGdFej9fUjBKUWhneCVeb04ydnowLmA2MkIkO11XRSN7fnAyWWpMUnFHdVNiaihNT2BULlRURHFuUUg1Lz8zYjgmPH05PCRKKiwzKk4q'@;
put 'Pz8lSjgwVUEhPV5xLCVIUGJiSj18OEk6OmBkU0BGRjJkYEMmLE8oYlVEam1sRy57Im5qU1tsYjo6VGhYP019TT9Kbmh3JjRgK3tqT20oKk1+dkg3JVBuNFUlNFNzVSI3JS9La0N6anpaPDtdT3lvQzFPSG1bVDE5KyxheXd5REMsM1t7NlRWKW8qcXcpfUl+K3dBNWtKUCpRTUZjMXo4InxhNUkh'@;
put 'eGkrQE1zNFtkamRxI21Ud3NEeS5pMlMoVzR6eWI8RzU3YTpNMHtUQFZtbH43bitMZTtsX3pULkw2eXp0eXxYIX49NSRxfDdDQj1UYyEiZ1J7QzY3KEYhTWVzeS5oLlNXYU02RG54bEgpYyZgZTRCKkpWalIoUyZONj5ZZzghdmksWGlLODNvSypHUzwwOntnS1pdR0ZlYGh0Zkg8T3AvIjRQeVcq'@;
put 'eCVLLzokVGhJUFtAYTZiPFA4QzBUfSRMbCk+JmI/Z0xYMDpZTSI5Q0tAdSs3TW1zTzBGJWZzMzc6WD84M3RXdm5aTUNDSlVDQ21NTF8yVyhSbDAuQmIsPz94IjIxVnpJelhzSjE8dEpQOSptTlpMKjhReSExej49LCJQT0tHPzZOV2w9eGxYRzZ2WHR+b30rQkcsRFh7ZDtKZjNSSWk3bjJ9eUAz'@;
put 'SEV8dUs8V3ohYC56OnYkfEpseWAxRDdCdGdTSm9qMCRnfVswP35OQnM2UkU3fkIwfHd+Vz1oY3gqP3E2MWdKXmkhYFsxM3ZOPUBRIUpGYDUxOS52TUNVPjNgPl4/dUVucUguXlFBIiRnfl1acHQqUlVOVyl8YFBVazY9eWE0UGRESys1N10zJTUoQ1l6dztGQ3xARn5jKzdFN0Z6OS4+PHFhezci'@;
put 'WHNffV9rJSRxZEg6bztOanFVdHcsK31+a3YqTV12WllNbUtgJTI9QCgqTXZYPFJ5S2tsX0NWQzBWQDMmZEhqPFA7KXUrRGx8LjtJWmkxQFNkP3VFWC41QFImQyhtX1Z6TDkwQiVvcXcuQDtGRCsoJkpNPExULGwuRHVbd1VzN0clfHhddXFjK1RTRW1QPUM0VyNyanoqSWFHfCw+WngpQFFjTlBV'@;
put 'T3g+Vj1rIW19LF9dRF5oWW1WVFNHaCx3eW8mbkJ2QF48TSI+VlhAVjJycEFHXTdNMmljIldudTh8TSVEPXQsJWtRMVIhY00zS2VIfk55TyFuJTBUSyp1a0RRUVZ0dSpOUSpLYVR9WXZAVDFMW2V7KjdFO2EkJDsuZH1NKT9pNiFvWzxycS9XeElWYlA7UGx4MXV8RSo3VUk+UER8SmcmfmEyYXgh'@;
put 'aillb3V5N01fOil4YHB1Zj1DQmohSlR4SjFoZFpvbzshSX5MXl51YDlwYUw/cXxaaEhNPSJ6fWUxT3ZMWyU8SCk2MU4obS4mYGVEXkd6WCRjaEVfN21rXSsmLyswe2lmcHlPc0lJaGMkZj11PGV+Rz9hZ0NNb01MZ0YhVTZzKWBjUE0walFlQms5Q1NIYWJiVyR3JDNRWyRIcisrfmQ5a0VzeU0s'@;
put 'IlEqKn5GfnZWV3p1KkxyWjU1c0U/L0xzNmVKPl9jPntkZDdlL3BWa2o/Z2B0SXZZT1duV106VX1Ze2ZIcy5JfUslPGBONl1AYk8odWdlO3EhTDhWOmx+O0hgKV8hSktocHM6ZmhFcm5reTYwfkFSWnshWVhRMVBsUlQpMTZyZ00rfUsoNUA2U3l4VjVdeFRVfERKcT5HL2JpalIiUyNjaDFucnkz'@;
put 'WlQqe1AjMD8vfTsmbWooPXN8Zjtyd2lbTCM5QXoweDFaYj47KnN+aXksPGhSS0VPQGM3P19NI0lMJTp7ZHV5XWN0bEQ+eEtsY1dlSjJVb0I1YFVNV1kzUlY6Ul8ucWxMUEZ+JWRxL0M1WDFOYlc7QV5EZkoxSUVsdzhhTFpgMDtNJEdWeT8+NUE/fFE+RT9FJnpkOykkLldEIzU+OTRQUTRaK1FE'@;
put 'amRyS3E8a2dWXjt8Xio9aSN3YVtAamUlPGoxQGcme3VzNyhBb3hGLkhRVG1je3A7cGozNGNZSCEpKGVSK3lxcnRKMFtaamVWZnNjJTROJSEoOCNJR25Dbm1XNncpfGpldC5qX1ZmWHJXaUNLTDB4QDB8YURtfjIyWHRRTGMiIUFUOjZJU1NdXlN2a1lFQjYhbVJTfHhvdiV5TFk8V1poS01bNnBz'@;
put 'YXhbJmQoMmcwciY1N1Q2PHJ1YCUrTyRAd2BFLFhEI2V0RHJbTVF0NWg7d3MjTzhFfiZQNVV7V2poR206O0gwImQjLE5DWHM+Rnd6OzFmazlEKnleYVNRakU0UiM9Mj4vJUo6bz59NCZeYmxhektzbENaPFVgOWJpU20/e0J4TkQuQUVQMihbXjVYMFBUMzB0bCY5QjNga2BuWj1EdGx3aG01cDJ5'@;
put 'dVUyRTY1V2g2JC9ZKGEhKSpfeDhYRChGakRiUU87b0B9b0FabytpITRpK2wpK0lSNnEvanY5OkJPdFojTzRIJjtLdjo+PD5ORnk2WH0/TGojLCFxcCo8TXlVYCMhfkIlZlVrfFhPSkAlKU9NXXJwUC5hMVl4MiZFN1lJP0UzUkJabzd9VHRoJWdHOVFESmYrZU5CXj1+byFPZWd5R2RBKCtVd2Ba'@;
put 'OS9HTFZiRmBVY1ZJJGxKKGRQPERkWTRGfGM8d21WT1dHWDA1NEksJDBVYWZteCtIK31ZTHc1Nj9ZW3tycEI4KENWaGlNY34uOmpCakxYKjRmRiJAZXQ/cV5gPldsX0dvXkxrTCZDXUV6c2xgMl42djFoPStgdDwkc0JgbH1fKVhFN18iMjJ8V34+SmJ8VVdAVDZXJnVuaDckMT1sXjhdalJ5L0go'@;
put 'UVMsKmU3K1dKdm5CO2lWZ081NXtoYG8rVi5OdnJqW1d8Y3N3VzxROiReMztPRUJRc19nT0t2TXA3TipDc1gwVVt9Zj5xdiU9IzNGUm9YTHEyK3BlakdDKSkxbGU2e0x+K1MpIkNiVj5OazNtXy83LEs7MU8qRENDeEoiOn56XWs1b0JYWWxkYFdbeEZlNyI3JXJTLjo3dSZVLzgscS55TDhBUnVv'@;
put 'dHVnaU9bUDc0bD92MFkuIz8mLjF0YTY9SlE7TD5pcWx3ampsWj1wXTojJC99YTQ+P0VKNlN8eyRTfnpMaGlMP2hOYz9zIjd+UHpKP1B9aW1DT3J4YS5gdS90KSVNNDVye3g4ZEplT1V2e1s7OEAuMWd8b0UubTJyNjY1QGFXQkR8fVVUfURPRWNtIlJJL2Uqa1luIUdXRHYhb2o/TlMyRTkjeF1q'@;
put 'UTw9dHI+eV5hTnA/R1osPSxxMHxEanc6WD1FbHQ7NkFCQ0R4ez8rfS54Yyk8ODpjdnAmJEgpb14uLDZeREhvb3t+ZDZOYW91NiEsdW9nW2okW2k5RXJtNlpdRWdLM0dTRXtWeGZjMC9AdWdrdHN7MTNgdUVzNUBNTXEqQUVtUyMlWXFCNzpXZ0VYMiFrN00pa2k3OWFAUm14eEBLajJ+MkRnb0ht'@;
put 'LDtzKFduRXdWaHptdENhLmp8SXhRLlMlWD1DbjZRW2A8aDZOW2JGc0RBOmBzbVNwSWcxbkJvQF53V3g2b1p5ZW4/dzxlI3thTz4ia2U8K1F4Z0ohJVgkVzhtYkJDRCVrQlVMVGpIb3tDQkRmQSsjdD4kVmloYUtldWJ9SVFdIm9ZMlRYUSlkMjc8VHZuYEFDZSRBTFRTZU4lKExkPzArVTxnRFdF'@;
put 'KzBEeHY6UFk8OikjdCtZeGZ1dmU8fnRnbGZXakh9P1tOdF5qdTtyMzVYWnZ8KkgsRXBVJXczSEZWX2JRTXh4TD4hRnoqPjlLT2ZVeGouTUZ3cC80QEFUPnJJbCwjI2tnTzwhP25CcFguKFhKYjJJSVBxQn5oeVVHdSNsNSZpYS9xUzlYV1FmTGU4ODF1dWtjLEU4R0AlYHgleVhHSHlvWGVsUV48'@;
put 'VW5yV1B5andQQ0QobF8veHcmNGwuNFFQPF9rKzhpNURHfiZIPGhMdnokcjoyYVp9O0NhVEVsRSp2NXR7OnpKZCVTJGR8WVUkOEtNQn5NVXZsUHxrQylGPUxdNldIXWdUTlFrXzI6bzVEU3g0PH5uUmVAZDclPzxPSnV2fEIhSil7ezwwfiNCIUA2TnZ2dy46a2d3blthW1MzL3ZtLCFhZ241KnB4'@;
put 'aiswUzh3Pig8ZnBnakJ4W2pWZXZqMk8oclRKXj5xLl9wRnFFWF4oQjtXbk41SSFWdEhwPXJnMj1NfkFDO3RfJChZUGhHczx2K2MpSCNnTk97LkVyKUQhS3R8XywvVGFKeTJPez5HdTMobnpgU2pBUHszR0B+aXpoOmBhUSYlYFs6bWtnSlAxLzdKckNpPFgvd1B2W14hVHA5WXN5dy51IiVqKURW'@;
put 'V1soZ21bRFZ0SSRCd31XI3ZVQlZ3YjxVI0YhQEdMZ0xvaGdxNSh7RkkuSlVUPlg0dSwxRVA3JWR7NVFhTTluejV5OCR5KyxkN0N9dnBoSSF4alFTdWoicj9KazttL3FvKkwhVn4lWmBGSj9xOT0zWT9hRyxMSzcyRn1eUXhDVFkxbD5yVkFTUGtdfW92aWYkMTR3dm4uU0BTZ1ZieV1nKmpnbFVB'@;
put 'OkFgV2lFN2c7OzBNS0skYEYuSzNpTHhaaThtWCkpSDdleUA1NV5rV25OQjksciwxVlBeVF9Wc2BjYSNTVzEwdjQ8RkhVZzpaK3tROGcqfkFJa1QkOFhlLER7akFiQ3VXQFYmdGNYcXBhVDU4dHw6SU5NdUhSJHxZSFBJOFtqWiY6IlQkITlHQVYmSUNvSXNwbS40L1RQWHhHTHdaQnBdbS93TWow'@;
put 'VGFyKD03e099XiFMOD5xX2wxNnlIP343Tj5fdDZfaS85I3J3OCM+bixdVnJFJEsmaTZjRHJQWHooTmU7OyYxMlkiPWlKNFN4cU1COEQ5QF5kI3ZjN35gK1AlKC9peEZiYEcwKXlXUDheSXwsMjExIVgjUz5ZT0t3UW9WXjRzTyM7fEk9alF7RTlMQnFdI1tOdUFNVGA2RlkoWWhTPGRbZyNJJDlg'@;
put 'K3h2aDgyLEo1bmUyamRpKjRiNHVPc3o2Zk1UOVhuNFspTT5TeUwmc3VoJG8ocVBERjFITUh0TiNXMXV0MFd1ZW1KQkwxfis1WXZRYVssWSwzODtSU0B9Tk9kZUNXdSgrRSxfaTtDN0Q5dDdIW087UVAyPX19PDJTV017bXZhfUVhX2NfRTZncihWRi9nOX5heUV2ZjZwfTBEJjBAJV9SSHEmRiwh'@;
put 'QHt5Jl0vdmxsITxIS1I1WGB6ZjxBSForbDA7Mks5N3IwI18se0BgV1RtQ29qKDpRdE1YUkBxWmdtb3c/TjAwQG5FL3QoVkZxJDJMZmAlZ3A+P1leMVtacSpZWEpXOSReTmMmJVh2W2x5PWxQISIlNy8/M1QuUGBZdDt0ZjV1Jiw/PT91Q3xmU2NUVXtvIV4kQU5tfEgwUyxmd1FRQTZRLG0zaEJ9'@;
put 'Q1MrKFA2M30/Q3olI1pyVF5gLFdNJFRaVSN9dWdKLlVhRGlnTVJwR1N7MEthPVNNZjEzPEx1TiZ5eipwK0hOcXEkX1t6SDUoLDhEcSN+QD50OjFyQiUsMFVENWB9amJLO155RE9tTEtlPGBJXnMxdVc6WS42Tz5nNy9bQEtRISpqZ31daUshbmdOdDMybF82dyZ6dW9dZFk4fF58JDJyX0tOfHxL'@;
put 'Tj1CVUlOSXdyb2txW2tjK2xJOCNfY1dWRXFLJF5kbTNMaXtJLzlVKy85dWtLfjlIdCpEM3hiZURzJGZBPio9NTh5NExZQj86UTxabkYvfUdXdzNzdTJ1PiZEM3xgUlpaTmZsYkJFXjlkVmE3IlhkYXs+dlNpIWdCNjx9KF05ejNjUk0+bDR4JmBKKnJLKmM7UEw9VXdhMG5rI096MWY4UW80UzFA'@;
put 'M0x3QXhDJFtHZ2hea2dWPFtvXmQucGdoYTVNWEdpWSpkdipQa2tDXSZyZmBCTHo1Mkh0e0FCS3lofGhLYGJMOV0rNU9bKzREL3JpKyREKHVbQ04hPTsxVE43SVFuVk5WQj10UkpSOHBZdzdCXn1RWiVkeTUzZkZtVTM1LHRaWW0wZFE3XTxrQGhPWlhFOUVqI0RUaWZTOjE0KmhFSmdFcmZ5bzko'@;
put 'ITc1JTlrQn5bRV1uKj5yPDleYndgdiE+N01MUCRVSTk/cjEsN2ZyM1NrYyN1T1slLkE1dCRXV1BndmNBdmR9YjxRKWRiZHhRdXhwfCJiTCtaRWlwRzh2SikyKnAiKXxhSEgiRCk2IT1Hb0JoLEgpPUFpIyN6YUtEXlcmMUsvYDFiVjVJaSM3WWw7MihhcmZ0Jj5NTDJffi9tcytuNilsOSo/TyU5'@;
put 'SmtKeH0udXB9dVdOQF0pWylUVT1BXWN6I1RZM24kUV5uWi5zOHpQOjVSTC5JWXBZUTR6MjBhZD4rZlNxa2hMKjMjcTl2YTJeSnwrQU0uXXxGQENrdUFGcSw2LzA/aEgqbiJLUl92UTpAPDlBO0xMJiE9TnxOQj5qdkZEZDR9U0pZOHtIaTNXbjYoOXIxRkczOWs7Zn13NGBjYUUsQXxMKU1MK1R2'@;
put 'QHJ8M2FrU0goVHlMYStCREgyNml8fCs6QXUuJUZNLy9rcj1vfkYhW2NIbHZdXnVNQDt1SkdUd25ET0tqZlpZUGM6cClzIWQ9OH09OV8hXTxeO0dheHt0N2RtJCMsaSleOkMpcFRbflU6PzozX35MZDFrcWQ+WEx1PXAoXUk+fSNkTmMoWXpkXUYhdi48QztgRkF7UzZ2blVrUi9lMjMzWUhQW29S'@;
put 'QCJQZT57MVFjOV0rUElScUVRRjBDfXxVMnluU3tpLkkoNkdLbnZVZzpmLmh8QVJTS04kdWJ2dHRdK21ZaldOIjVIRlB1ZldFQWcyND8/RitJMVJ+Z05Sc1JKPyl8bl98UTNfV18xcSMwdjEkaXQyakIhSUMiK2xFa2Nfb0xZXygpckh3bEBIQUgrZTVuLGdoWylrfi5NQEZgNjJlNWozLl9+ZDRU'@;
put 'N31Lfi53XkdxOmJQbClLUncvejAzVmZgLmNsLGhPeDhHJGYqezFhZGU/a2MxfTN+dC9dRk9ueWJbJC99TG5he2lOPit+anNnWSNOZys3VFkoRGRreDJjakw2TygocV8wRl8wdGZHaDRFJnokRWVIeipsQCVCdUtUKUFiKWtDSyQpUzdKXkpmRDMzdXNFKXF9QUd7Umlgb2lyX0dCNW92SnFgbzZO'@;
put 'OyooQyFHcWVyQDBVWmk+TX44U0BeLzBNUlBtW2hXR3M5RnVVREoselFldWZkNlR5bGtJOG4vamgjcHZgKkwyTEtnQGkuYHVLOlYlezxDVHYmKmkuRVhITl5rSTNfb3x9fmZ9Z11ONlU7fld7Wjg2JjZRPF5FJjNpIS86eCEvcXI6XTBULz1PRj1BJmtiY0Y3KUVDZXZ9ejxhaUlhQmhra1Q8SkxQ'@;
put 'cUp1fEhxYDcpVkVNVSFHXmBtOG4vV0VNciwiKDpDIyR5MXM4NXF0QHE6MDJ4eFA6WnM8TG4uMCs5MWhjTHY6SWFmZC88NmhVZ0hvVG1VYEh2STdWQXo3YkooZk5ZXSNTQTAxK35BKl1mNmJrXlAhcEp0WjBOJV0/WVE3JXV4M2JQOHglTlpfclopLGA0aD5AYDRbKTtJcktVQjpHVGZ6dCRvfj5b'@;
put 'JmYkYW0iazh+aHQ3fF0/RVJ8aEdBQ0F1O3dpP0tXPjE0JDBKPEc/U05JR2kmKWdram0yKmZXMzUsbjQlK0ksfl5XeVQ+YyEofDYrXkErdSkwJFYvbl9xWWJbL0NRJWA7WnleRjhrLil6RiVyOHIxOW59JiVpNWUiKnsxLF9weDV3MSpwdFQhcDtYQ3RZdGFnL3BPPmxhYX55az1mVEo8XkVxYyRI'@;
put 'TFZ7RWheNmlzVTYrTUBPOWBPbWBbSGxPbl9YWjY7JWhafUU1RVtPQHJeVS5wdF5YaDsmcGBxfi92dnFdPjBLP0YrMTJjc2I0KyV2NDppQik2KldAfTlvfERdfShjW0hOcDs1eXBlJEJtPHwrVmNoJGpWZkBUPC8vXlcqVFZXeikhYVE2ZDVxWjY+fDpxUTdWU0I0djRiOD9fS2BGJTQpZX5OLzRm'@;
put 'Sy9KVG9hPmpAbGhuTyVrIVJIWTExNiF1RXAkZyhmKDAlQVgiWT1yRHNXcEAjYk13PFVwbUB6XkcyIVgwZVtEX3hPUnZmen5tOmdjZTNYVG4pX21NNjsicC8xa05gPTdSRn0mYSplPzZCdXNdeVB3QUJZJmlGakVYNC5uPC5DVSpaUjgqYnRKaFlySGJwTENPUlNRSCQ+ck48O0h2UH5GZ3FLQl0z'@;
put 'OEIvREJGOlJ+PTJHV3YpWm4mZDVqOX0+L09aUWVbYlMrdkFHeUtsI196TGk7UFY7K0leelBSZC4xW1ZiemY1YmU8MEZ+P1RLc3MuQG5PTC9IN3k1T3hwfDB1fChoKkQ/R192NlQkUE5nVDV0VF5qPytSIj9mMyNELm9Hd3s6MywrY3cvQTYuI1loZEJbaVh6UDFRbDVLZXM0Q1Mwd2MpZllJdT1K'@;
put 'XXQ4SnU3MH5pKF9IeUFkVzVwbztmM3UibyoyRDsiO2doW3RrKE5qYiNtcUlXfCRhTE00XjZhZ2U0YThUMV8hZ2pXYmBPQ29wbm1oMStxdns5QTdUT0RNVXgzYHZafkl6YmhFQXY+N1BrJDR5VEJpb1IkSFZDd0k9fihvIyhCSX5wUGc6JD1lXyNdSW8hbyxgTVA+ZiZ1dTUyQ0V0ZiwmbUwsa3kj'@;
put 'SCljPHwoezpOQ2lKbzVOLytda0V+LFZpSHReZVVUXl1CNGNCenpKNHVCRX0mfS9nPDBhcW9GLGRhZGMyWWxzLispO0B+THNuKG4jTFZUZjEke151fGZWWUxQbXV8ai9UNVp4bmE4P0NEbzA9OTFNUzdycT18W3QxOTBRJDJnW1NqNlZ7KyNfQXpbOylhdkRNaTw3aW1xPkg1bUFWJUg6YXkjRCUx'@;
put 'NmRNeHVFR2Q3O35XJnovRSIja1IyVys1bjtrR2xMKHAmLjdyd0AlNlhePnNsNG9lbjN9XU1yc2g9RFlPWkxgMXZXM3V+TUdZQFVteTNgQTkkeThhQy9qK2w9VFN3JXppbi9FKExzQ051MFBQPzddaihKSXokeVh3JkJ9JF4qVihhMG9YW1VdVSEyTE1MYlovUz5FUldkNE4oNTBJa1pRaHUqPjRs'@;
put 'YTtYOmRQc1paUWEhRS5dSyhXY1pyWXh9SHNFQHBIYDNCbG8/c1JSZWlqUDc8dGMuW2M/JSJgXmVnUXQ3aXA2WFZYVyhAXyJmVV4hYD9ZSWgpVTRbNUtPQTZ6OkZuUnQhcXZ+ckIhbFFjUS5XLkYwRFBeMUh3U3IkRSlXVmQ8cjI6KXo2bG9DbXxdImUyb1ZeK000ZCRxTntAP1NiLGBTUjFdNGw0'@;
put 'SVpsQFVxKmVHMF9wInpuYVlKcFZpdmxkfFlpeksjMXx8SV5AMnVPO3BlZ0MsbSNXK2ovektqLE9IWFA9bj5gI3JrIX00Nz95eSZ7InNAb1ZpOWF3WGImKCZCPSlFeTRxX0FhZz5YRFU7Ml5SUndiK200ZHk4ZihmWDlTOXohLiovbkxLRUBiYF42b3Y1T3NOWDpWc21YdWkoXW9EOllKbnZaQSlt'@;
put 'WXQ3cFdrKncibGt0V3guX1NxQHo2WzwrYiEzMk53WVQ5YGtDaUFeMDxrW14sbWZNMVh7alZ2bnlzPXFnekcrIltsK3tiTlo0eTw8QmFwQ0t9fSM0R143Ji51WTQzY15qOj1XPEZJQmp5KGFlUmBCP1V0KTFyYjBALGVVKkcmVGMibXt+dXJUfENeOX1DZD0/d1FycXJSIyVZVDhzUjB0QndzeyR9'@;
put 'MVlNS3UucT04Pk1RJCExIywpPGVBKkRWX3lkMW8wdStMQTtwTHFkUU4xSEBbMGRxYiJoPVFzayElIzd2ZW1AQCM8fnlJTHpXbkJDbCpwaWQrKHBbc0AibjdTL0VOIXd9WSRJKlY7aXs6PWZwdD96a0hYcE5OJSF5ZlNZcURWa1MjcG8hTT4mU0FzISkwZm9mR0heclJbeS53S1JpWUc+enNYYFU6'@;
put 'TCg6QytOalFeZFNkfCF9NUFKOThLVSRBZXpkQltPaCgqWVJTY0VFOFk1RlJEOUV4PilHSzlHakM6NEUkdWBIKmZqfTY0aCpJMGMwZS4ienNQW3oyN3s/dXsqY0UjK3R7fUk5PSssXnB4K1REfHhQc2NldzcuT0U+PUNfZHFlJCJzaShbaFJ2NHVFKV8lfi5vUk14dkplaVZjYzdbaVJPfSpOaVNf'@;
put 'KlVHRTg9RGdhR0pwck5zWUZDfXp5YXZzMjBELEF2U1UydEFuWGsjdTY1KjMzUThnRUJMNUhLP0hxcXgjSlFFSkk3PXFAdy4pTkB7Lz5EKiQ3X25kV35td2UhcFROXTh7Ik56VzF7LHQuPHBWOkg8JjVlb0VeRihiT0UreilnbzUyIWlVb28hZUt+eypqUkdkKyZEe0trLn52VEMzcnBlaFt7NEl1'@;
put 'O2d2JixnT108VmZsOHY0fE04RlVdeVhRKS5ja0E4PyozQiFCS0p3SGxzeFtfYjpNJHQ7Py4kWUZMd3hAQDV4fW94WCFyYUh7QVRLVyxWdiZdbE0/V15hUnhRYG0uMFEpdz1hQE09OH1iYF1VVW41IVptM0s2N0ZiPzNjfiJRWDsqbz1GIUs/SUFATl5nJFcjKDRPOFl3NSxhK004JGBbbGVNeH1T'@;
put 'Mzl3cmhiKyEpc3hoTStANlEyOyxJXmBDVWFmV2lYUnBGZXlOdzRke05IVHJMfldXT2ReaVQsVWFdSHI0aVF3UDJVO3cwI1cjNXB5WGA8NHBgYUUjKDR8PUdmSysxU3xIKkJNSXMqZUl+QzZPQUBsNXUmdjooMU1pOnJoSzJVayYjWXF6aWNicEMmUmosUWxqPV1kZkVdfTpMfDZQTHtWW0BHLkF7'@;
put 'XVFGcmVNITdyYWpoY3xGKiNLRmNMPTR1WStId1NZUHR9I3FtNlo2ZTBEIWFkZUJCW3V9eW9Me1MlOTpPWWwoX3AkP1Q4UWMkLEs3NHRATWI4PjVlXj47RDA7R09OfE5qcSZrKGFTcyM6RUA8NHZyeWUyb0w4TWY2U2hZZGhJIjwhPW0hOGt0NDEyXzAyRzciWlo2ZjdleT8ze11vWSwkb21GfDMx'@;
put 'ZjQ4JkJGRVk2OE1xQmhjXXU/Ij9IVyFATEVCMjt8SS9yUEt6LkN7WiVQa35idXk4dUlWS0goOU8oYXh7Km9SeX5YP35ALlIhPVVXfCVqPSt9Iyo2OncwOCNXak0sOE42fFlucz1ROTRmLz9yPHZ+SUB5PEAwMylJNH0wR11pLkxDKW40MTErVUVISHRoImJ6OSgvSS5XV0khI2tRQCk+dGZoL3s6'@;
put 'SjlOITNzemQ/UnJ0emN6UlpWa2hkTEoiYzt6b3Q/M2E/OHckTEFiLzd5dWgxRVh0Y3IjRnc8e3ksKFdkNVA9Yno/aGVAU2BtI3hzMUBmV09+bj1gO0NwNk5AWUkzVio3VFt7fFZ1fUtTMzUsVDgjfj06NGxMV3UlUjI3VlN7djBOYGhYV20iTFRDLks3IXFjcjBwMHEwcXgqfHRRbDpyTGg+S35h'@;
put 'PW0xRGohVGo/UFlnejR9NXtLPHpLWENFaDoxXW1MOFdTQWRFPVhYJFZpVCUjMjw7SVRGUHBsR0ApOGoiSTBKZUJMeWg4QCpTRiE8SDo3YHQwUUNJUnxFfWxdRnhUTGxVaF9sIkNSMlR5WSVKcyNQbDBBJXc8W3slNiNbfihrWEVnN00hUXhyYl1jKz05P2FtfDlNOSx+QmRQOlklTGY0JWhAXyg3'@;
put 'Z19PclBROnIjNmxRYz1eOFAzWVM3QGtxTzRQRSt1eDRGa3FFe3R9fHJiJHYvSD9EeCE1aF1JJC9TV1REM1hAJXsjLDI5WzpoeDNzOUllbD9YbDpTWDBnSURCI2NTQVUvWSVpN3hpLygvfGkiRGd7fDRnJWxdK00relZgZ1txS1Z+MFVCPntXRnMpOCQ4Un19Ii52aGk9RTRkfipvQEZ8ZUNkNWpv'@;
put 'SWk2TTF8TF1uaW47e3B8PHomVE91NW1rTlYzQCpfT35pZHMpczFKVW1vPCVGaXZZOV9wc3pFIz1JQlM8eXVlJl1VQjJFWUlBSWUzc2laVUg0Rz9ecTRpT3R7RGQuIkEzayh6NHhdXSkiPCR0PkNhVmlYQUJWfFd6OTVhOH1zNEt0OnZlaCFaVD9LZFNnLkwhUF8xKlJMUSsmSUhkSUlIMDxaZCk/'@;
put 'UXF9UkVyV3Q6ZD8zcmc3TjExeXxiJGN6TipRVG9APG9ARzE+W0ImMnpKPWgxb1QhcHBFa2IwdEplaiw1e3w4Rmg8P24+OElfOkw+ImBIeXUib2hOP15Pc1JsTV5CXT8vREo9LGEkO2A3eWhgbHJ7NShvZlE/XT18aWNTRSJIbj5CZTJ2MUU9dCV9VnFyUXpda1R2TEQwLmdyfVttU0hoSj9Zd2hR'@;
put 'al1Fc3xHNFA8W150K15dNUdjcDZNYHciPWt8KzRzYTB2SEBeTXAuS2RnOUJEIyliZ1Nnais9e293fk5KMH5OdC5hPWMsfFEyTS59OmN5Lz9jMXdRYjk1VT52eTM8KyZUZiNrTFFAZiJDYz0ybiZ1VyQ0X21aIk9SbkR8IypPPDopb2x1fiVFYSFgZl1LUWhNb1AxbXNJcERoRmt+eEI6TWY9eFVt'@;
put 'eEdmS3Zlem01WCI0PCg5WWs9ZUVIai4pIkIiPjRbfUBsTnlSeWU+aUQpOUtyJlE1YygmOEtPNmEse2liZCpndmd9W1R0Rlg+dSM1YDY0eHs6Uyt4bjVvcG9kQGc5XUtkeTwsLD02U0giSiFWR3lsaDMhIll3KEVRRXkrOkRiK3MxYE9iRzoiYiQsVmRlMmxMUlY8fUQxM2V5dCtTWmp8bXslYSVv'@;
put 'KyYwJC9wZy5zJGM+dkleNmkhfVBPdmVaWzI7dWUhblMxWiN0WjE3NGJmUk5iLm1LXUMsVTR7ZGZKXyNZY1IhJVFOeF14Y3RHblM8Q3NUNXx2fU1jaDxZOkMkUWBRODQmOjpdTjE0fnB4KEd+JUgrZHBNPTl7PTNqO1h5UWk+eFtie0d+a2tLbUBiJUw1Z0AvYipKT2AiJntVZUNBKz4/XjQ0U0l6'@;
put 'WW1fMiNYI31HXXlwXmFjOkMrLzxjVyRATTxfPH01QUNVfilJeT5eZ2E2USQ0a3FZSWhsKEhMeEE7JGgmQjwyQn5nIWFXKXQ9dW9BMUFxWXc+LyVdaSZhZyReQy4vZ1pHeyxyJC4ySlU4WWFNbUNhOypPeWZyR2VyXj1qRTwhU3t1eCxUUztKUnRlamZ5VFJoOyVmS2N8OHgiSmpZXVgxbmJ1P0ll'@;
put 'NTdML256eXVdPk1nKWl6cV5BK0U7TStOSz1wRjlCeDElaDteRTthTk1mMSoyXlJZcVFxfW16bTtadDZXXUh9c18oSkBGRTpeZVh1N2oycEA1SE9HWDNXJldCYFhTJHw4VyZbUkgvQ0U8NXRZUXdKVDZCTU9ELF9+UjJQIk4hMi5BZk5KYFkxPyhWMT4+aVpTMERVQ0JuZXVXTz9TW2VtLzBYfFpR'@;
put 'cktYMn5rfVIjVEF4YShNVHEyND1kTF1HWzxCLFQ6U1JRJW1fSXZzbTw8bF4yPWdRS0dTS1BldV85e0BUcGpmcjc3WF1RWm9XU0BFb3QyaHwkKFJiRU5sWjUrcT5pZyNmM3h3Jj9uRExuNGF5UEJ+JmMySiZ3eUBfVUEoZyk6VyFkZkBTP11NNCR5Y1lYSGVaYnJCSzsqSCVPdWlvV3FxR01ISiVg'@;
put 'XUpoVEo5em41VkBmRiRAVyt4PVVnemtqYXFCMURCaW0pSypmaihtNGlKdCJPQkc8S3tCXXddQGNDQCh+YjBieiVtbGElaTE4S3s+Kl5dX2M/S2ZuI3JURilUJjo3JjJsVTZoVCNZQ3BCZ18sQjxTVHVPQSJdO1s8V24uL2NLMHp4KShSals0VW0/LD43eS4pYjA1IldyMjtwTDJeQnk5RkIzeitN'@;
put 'YT06eXFvclV1TV42WlJONGFCb3U9aTNHVFo7eCYvWnJkUltBeGV9ezxWN0NePWFLNWFqYip6Q30rcTQ0O0Qobl88P0BHYHRlRD5SJi9HaXhRKXJERFR8e0pCbGhtclE8YXZhLmUhcXdULH4qaU9CL2NTI3VhJXhjdWZfbHNvcTcwRDROVDUoSURzMGJxcDk2NWUxa0EhYmBnU3VFYzJLYHZpVzBu'@;
put 'TlZXJjIyViordEpBdE10TTBvIi99Nz9XYlV9O2dbM0tmVVZvai89T0I/V2UoPXVPOy4rcUpSdStHMGp4fmxNbzhvQ156Ym5ATi9HejIzRk09UEB+VGswVWhyTHh7JF19VXsmVyl+JjVUfVc8NXh7TG5AamQ9MlUqIlB7USZHZFssPkJFd0hHbDVVPUdqWUgvTFRqOkY0bmxeSGJ9bTE+KWw8IzR8'@;
put 'SWtjXnZiZmR2eiI+RkgofC9kJEVITmt9fjQifU1vUU5dU0w8PkhoVXBUTShfc1AhQStDY3xrX0ZxVUgpcHtJYT5tcyJdR1RrRVpPMEM5Jj09IXFbODZrbDw3KVsid1F+QVU0VnxxcV1wdWB3LG06UzpLYTYuKD5dUmpqTjEuOltfL2IrRmhqVHs1LntEdE1JPk9QMWFDL2oqdF1uMXpnTixidT9G'@;
put 'RjZabURRQlgvYGJReysoV1gyN1VfW0tuZiZacDJ4QUZ9QSMjVj0/ZEJiTCxHcWdTcVhJTmYoeSVyUSluWlhbQigmbnFGPGAjTX0oIVJzJWNOKFN0am97azdpclZJfj1OOG5Vci9FMj8kOjwmO2FWYjN4Um80M3d9PHk2PXBjfiJJLzAzcHBOYUJxV2BhODwrTTptdDdXcz9dait6KkpAbHpRQTFf'@;
put 'QDo5d3pCSXBRSSZLclVdPkUhJnlUM1VHdEJnQDR4UyorX3RaSEpdfVo3YDgwMl9bRHxFKTxUPz96PHBVdHQ8aFd8XilocypkPFNDMkV6K0Y0ZmxnPH5gUX48PyY0WDF2fFszUmFaM3lxPD85LmRDVD9+SkxxXm04OkNVOVFJeDVRP35dRElNX3Umdj5KRGxMY1o1ViRiUTtJaW1rRVl4Yi90ZTRp'@;
put 'JSp5KGBdUDA4SlAjcEhmLzslclEsdiEmSmMoczEiSyROail7QVJOViZ4cSs2eE55XiMqbzIle2drYXNJZV51UiF5dHhpNDErfmJLPE5tOjRdQTAqYk5sJFJKVFtaeyZdVk8hfkpGfkVVJWt6Ml93N3YzJHYrSGg7UiFtbnJMKVFOZ3FOUmAqeVI4flFeRExhbEs5dDJ0VVZWIUcoRSwvJDRaRENF'@;
put 'Xk99ZXVeXXU3TVhNJV4wfVM5fDcpQCMjQEBFXTdeOGZ4JUlYbEE7JSw3RXpTZkIlSFMyJjRJLix8bGNWQG9DSz8saHFPPz01TXc6Rk5QVkpeRD4vOCVFNnQ7QHFsO0NvZEVddjJ9ZnZAZWtxLERdYV1VRCQsWVR7MmljdGkjailXWklyR3JAZXd8VjFXNjdfZUBvdnZyOjxoVnFCd11+Y3BdODNR'@;
put 'QSNQR0VpXTFqJmZCfnBOaSwwJi9EeS47XitjNylFUEJpYkU7UGp1VkY1fVMsPTZvOjcrZG01amByazEjKkE1Jmh0O3tZSGtsOio/cGBXWjoqPmJbblIqb0JYTUUkfl85YCp4IW5kWnZVRmFmc1R1MmFpTEJLZChvVl1gWnRfTzNXPTt4Pjw1KShueE8qZEh1WXZ3KlIyMGk+Nk5udDk0fiJKRX47'@;
put 'RVJNTnNbQDxrX1pENC5aI3ArM24hISR6Xk0ueXpvdTB9V2VGOypFNERXdSI4NCExPipJailpeUNtR21dUWsxZGRpWEp9N1dKQjE/KGBKP3I7Vmc8R1F+JTdVOGpJd29RTCU2KnVmK25nOShyPStFNz5eckN5SUI3KHd7VSxhWWd0aHhjcnduZCNYNFQsZFVBVzd4cHpMdywjPzhqR0NGT2V6L2dy'@;
put 'OkYvIk8jJiErek5YS250WGYhUjZwJCF9MVA5dHckPndYTkd2ZFJMPSFyfHRBLyZNR3QyK2F9fSg2OCRDV3x8IkgkcUJDQG1OKSV0fU1AW1oifG0+PzkkTE5efE17TlZFWVd2JGtDfUdiOld2bmU8OVgrOFd1bXVVI3UpIms8RVlMM0c3VXplPU9zbmk3RywwO30lOFAzPS9BPSxMLClpUUEqVHAi'@;
put 'ZW1pdCw+XSFyRVJUNysmPF97TSooMzFEZj8/VXIsTHZ8dTdJRXVUenhjU1gldH5tZChKWXssNWV2TEFrWD45LmVoN3sxenVtW2BieUBUUytpdnJJUS8sRzhSdEd4YTMlNj5LQDFTYEBWV0V6Nl4wMiEwNDhyUD11ZjE9Nm5odGc8WTp1ZE81TWQ4ZU04YSkrRCZgRmRsW3NaT2VIe3hdTnI1e00o'@;
put 'QltCO1hiTnVuSCltWDIiWCovPj5+KF83KiwhUyozPWI2U0hYYHw/aVVSVnlYZ1pOJUBrQH0jK3syX1BaRCgzakRtX29qXjVAOyhRTCRwKFNIL0MpRHBFKkZzcXR5eUBefSE/JCU3fCUqPj5tOyUmc1J9RSh3YjE0ZFBkQG5COChKYVFlPUc1dDZofVA2RjQ+dyVGcDU/JEUxODg0fERebDw0fFhH'@;
put 'flQuPXxFNUk0Uz51WjV+JHQmc30vSkd1XTJ1c2ZqY2hlZjIoZjZNbCx2KncufXd2NnwjYygrLnMveV92L0FdcWpCOnVNfX5xVz43XkFvfTl2PG9CcFlqYnZtWHI/UEwoaDEyJD1GVEN8XUBBcVouejMlL1dRQ3VUSWtEP31uPiZiMkNlYnYudztqKlVGfkB9angxdUR4LkJfQncwRTMraz1kZSwj'@;
put 'eCRtUG86cFtZWUIlKzVqOVt7MSpHITpGc1ZhV0ZjNW5MLEVPT3NMe118XlQrbyRJVzw/KnsuXXFRdTBFKSRtKl89TGNDNEV3IWxbd0srIk9dL2B2Oio8PVdHSikkL3lsQCZ6V3E6QnJSZEBUT25OOz1+RTJLX145aCU7TyY1NkQlOEQkXks2VFMyUHB7ez0vWCg8e2tFeDw0VjxlJTIxJlMqPV90'@;
put 'amEkLzUjeG1dW115O150XT4+fi8rNisrS1NgKihDOTBFY19EM001cW5mTTVeeExoLik6WTJ7UDRme1F0Y0F9Slg1TlRATEJsPEZqbV5GMlQmUktnd35mKXNHS2FfIWNkVlAiXSV3IypCUlojW29CJCEqWG9pfVJIKWd8IjUjTzlSM35XP31RQl86YEpgfWxZYWw/OEU5QkYqaDFmPC9ZfTYzP0hn'@;
put 'Yjd3L3BrMTVeNVImTF50JTV5clIzdmM8QjdLSS8/ODs1QWxmWmUlNDhxc2MwRlYrISU9dzw4MjlWbmh6RlJ6VEwubihHfDQzOnR8QS9wSlcrO0QudV5gdlNFSmtRZz17b0poTUYuY3JeNnlebT4hezdbVVc3IjQ0WTN7fTh6fjoueWkye1V1X0ZISCtHd14zbTlZSVBBR3wudnFwNUwvJGx6Lk8m'@;
put 'MSV4RE1VflkrajVgUkdPRS4vNkRFZ3Z7T1tDPUNhMyF4dGpgQH05P0tmX0NafVNOIi9UI0gzZ30+WEB0ZFB4TmFVaXQ2M0J1eyp4b3EsOjBxR1I+UCQvT3ozXV5vYlVHdT5nQVlCKzxwb19nbGYlZFhMY3s9N1BuZT1KNWFhLF9Wa2p7cWNKJiJYUzJtIUFmX2h9U2dZIyxSbWJIaEw3bj5lbllX'@;
put 'anFmISZtRDNoQ0BWTSR3USUmMjRIdV8vMHBMbWJ2JTJxXWxPRk44Uil8LkheWz5hOHhSTU1uI3djM1dlRSEuRyMpIzxNc01TbVgkfDQ7eDlTMCVKbnB0WzJeOyIofkRfXlp8Mjk5LGN2QkdrU1t5OGxtNm5DUUQyVj9XNVQsQlNnVmUxSntWbEUyQmFjUVN+KmZ3OHcofm08RSl7TzFecytBJEU5'@;
put 'N1B8SXhPS3VzK3IrQ1RtYlk0fiNbcXJje3RtVXIrZiVbdlhPJUNYakd5SzJrcWI5WixmQDNSPGJWZUpoe2ksXn4/IihwVkVjTGE2c1ZYcGBhTT88bVlyVUcmQlh6eUdJNG13P3V2ZDE2eW57bChKU2xSPj5ROEh7cmpzOFldUzJXWHJddXdfakxTM2YhXU4zLiRick0mYFdhXSRDUEdgIWJyeFl5'@;
put 'RDU4IUQpIjtzKVdnSjI0O3R0UHt6JCQ4YnVRb3t3VSl1eXQxPkdSOGxab21uZXorJnZMbElNLG8+LExLM1YqU28vXSs4YHlkeGE/JWxeQlI3bz5aMk52UT9bLFYxa1lneFFZTGhYMlJNTmtyOEgyb2EkVVtMXi95TWswb2srTy54UklWUiIwU1p5bGAxPktQLEVOWDo5P09LTy9WYHdaayk+Rndb'@;
put 'M3VRQmx9OVdRL3ZNOHohIWlqQj4kTyIjYXN0dFppNDxQYE9lJH08MGRvQ2M3eTtnWi4lImsrQn5HLCpRRCtldlJGXn1TZX1FUVB7MXVRcSpnakE3e1swcn12KV5rJj5ZYGg4ayM3KW1JSXVeYl58fTgsUEVyW3hOMk1DJm9kTHdFcX1oXU8uQmlmbH48SmliP2krNiRXSzl5L2tXQ1d0e1hjSF18'@;
put 'aCwqVEpHRjhnLkJBPE5LM0ZROCx+QSteJEl1Tyt2MHtEdS5SejtheEhyKTl0eFNfYl1RQXdlRy5JSCZiKERSYWhoITFYaltQVU1oYlNjeV8hZDtrSEJ5aztPRSYpcldgYGxneXduSldLbFUqWEshOD5sdCU/ZTh2XiEzTkB2VHQobXZpPiVhLG4ocX1FQysiLHhPfUhIc1FQfl1FN3Q1Iz48XXhK'@;
put 'd1g9aHEzYFJKc3lOQiZPKD0sW3ArS0d6NVpjXitKYmRUKWAoUylZcUNQd215WmdsQmhuIUkiYkc3IihDYG5BXVRzYntuKmwkT3l4ViM3OkhfaTBFV3UkayZlW0Y/SmJ7bHhwZnJ6X2k2cVdyPGVhOWArempQSXpyNktjamRsL2IyZXJELDtdQHhwL0t6MiwzNCFNbFssJVZMdUxlU09yNntHQ2NL'@;
put 'cWN0e35bOFlDQzlfSGJUbEN4IkNnWmhfV11TLm1KVFkhUlFIRiExS3t2Tj1TPllJPmdTKj9QN1dmLyVQXTtGQ0djJDEjaUhgVzNoJmhuX3g7NDslbyltSWlyenR2aTxtZlVmaC92fEQwNz86Ky5KayQ6L0EzcExPcCNnPHZ3cmhfaVRvNzpKd00wQDkuY3Blam86VDwzTCx2YSsoWnl3UXxJZGw+'@;
put 'aGpUbndSTk8sUSg6Vmd5cElJVypEInc1LF1oSjZmcSRrWlo6T08xNzZOWk1aYHhrUSx0OE0jZ15BZl01dT93RF80V3goKD9xeFoxLk05KC5hfCZ+O2x1cVoqXlgkQnpFTnl9VnFaS1k7O1NBJXdPVl9Gems4bGAsO1QrY1g+ODIjOWpXMHh1NCEsd3hJRnNBQld5SlNETmF3cnRhKUZ8a0VkTkdV'@;
put 'P091cHdaY0ApRW1QYTo+Sl40fXk+NkBHcns1eC9mT1V8Lmt+d1J7UnxlRWFfMEVeRz1AKnpLN05qZyFzOHsrP3dFdSU6V3cxWX07ZytTa2g1emA6WVchWStJW11ITH4pOn4wK2NSTj5IbGYmdmR4anZ6Y2clPUtvVjlnPXoidGdhImNLUkd1KC57fk5ES0t2IURZcSZWKkBaVTFAd3F8LGBvMiFp'@;
put 'V3p4Zko7JmUyLGd2cWhtN3xeQFVaNWJ5ZVhARHRoPiFLWkRIfFRfaXk4TFcleChnU0R7bD1PVGVzRDhXZztwWCRBcFIqSm8ySXpebFFvdWAxOXU/KkJ1b259eGV5LCopLEwvTCsyaDNrMWN1QmsxSi9ONz53bX09YilkKGhzVnwwOzUsPjtZIWM8djR6aXF1d1FDelZTMlNZKD9zX1cyJTwwIWpP'@;
put 'VEZlWVowQmRMK1BZdCVBTHVyMzJYLlZkXm9HVzZQZlZeb3haPUN7VysuKCUiJiY/NSRZcTZCOWVjTVI7NCpZKlNkTlcrfjtaWyVwKXZGP3UxRiJML3FvUEBeKixwX2Y/PGFvZEBgMVE6TT5GcC9rVC92UX5DYEYjVXdJR0IxcjFyWXxiRThsQkplN3pEdHExNytKWV58IUkzVSRMfG8wSmksQyxg'@;
put 'YVp5Oz8mO089R31bYEc+eEBBa2thaSlkJl0raV9kQGJvWyZIPFEkJlR0RW1UWU15LkhGYWRjYX5JaU4xPDR+I0xscnxkRGB4MUp9aWRydi8hbjQ+dUc1WzFgdnU8QlM9K0I7WlAxLmNKUD1AWXF8WXNmSzpkVSRHenZhWix1R0xXQilVNWZDTy5NcDtKTGclVUMmR1ZFTGBUI0BETSRLYz5RTmha'@;
put 'ZHE7OmRML097TDlveD1rZTUocnFjJkFPT2tgd31VQzpYdEg9dVZXdyVxSHtSM1hreE53bCM3fFtPTm1XUHhrfm1yY2RzRmU5VnNJK2RfQkJOVVpWTlV3Qz1STipiJXJqcHxpTitMPndaW3h2PzZEWnAjWWNqOk10WEZvUCRAeixLOlF2b3N9SCRGbTosWUdxS2hmY2AvLks0TypYPDc5UUZ0a0Ul'@;
put 'P1tdU0B8XkZ6aHB6eG9vY3xWXn1dZF9eeHAoaT4vZU0wKih+R0gyez5GbjQ0amhuVUo9OygwOVJzZ29lT2khZUFLPCFJRVFmZC8xPDtkfmV8RC8rclBOeC8pd194MnFbYShpa3Q6SGZOU3R5UHp5eT9jSU4rej1JJn5HREBzbHlUPztGO0JKXX5hZFtFfVJkZFkoZC9Dcix5XSpuXyNjPT9MQ0Jr'@;
put 'UGd1T3cyNH0uUWdgQiwsfGIjRSJ8Q3RAU3xKalJjUltAYEs6W2l9cmkxYFZSV1BAR0RqR2ZDIk1DWEowa2JtZk1dM11mR1F8eFUoMlFWM0VEZXBCQkFUZ21kWE5ifEdGVW8lcGA/d0BffHJDcHw3SFJERk49LyFvNnZCXyJXRUw6OGlkdyRRJGg6NUYrSHFIW31bL1V+NWAoe3xPPjspJXx6aiYx'@;
put 'IVVycipoRCslMHBKd1toMUlLcXBwIj1ZSD5kYlA9bGZpbS9FPTdlL1E2Yls4TjdWdlcrX2VlO2FOfjddZjBWXSpmZnQmUilMNF0kdiQ1VThhc1dEZz17TWA8MUNNUlh9Qnh5bEBqbjxjJjg9O2NlJXNCa04uWDc/bDZqNTg2bmxeVzJ6cXNLOjlONlFdeSlrdCZ4cVsqdlBYVmVKODgxTCQ1Qksv'@;
put 'fGk2VywkRXYhOHVbM088OFgmXmUqfDtAfX5DOntAPT5DR25TYThLeil6fXhPOklrTUdPYDtoV00xSm4hYFkrOC5FKmpJbSVUbys7XkBRJit1YUdAVmZRYGF1XX09cXFtZXQufkE5eUU8MnszMHNjSTNzPlNdaHdhTHNAVyx+VExye0ImS3Y5bjt9MXpAQXA1Y0thamN4WXNxWXNGck9OYGNYO0JH'@;
put 'UmFEZSNweCxQMnNwPEx8enRQbFg2OERTNW8qUytMcX5nUU9JM3AjZzshd1Z9VGB6SSNsJFZFaVtdbmp3U0UyRFNEeDA+LmREV05SailGa3dnLm9re34/O3oqa1c4TGd+XVkqIjU1Z2d9XXdRU2taTjpxQXRsayZhX3hGUHI3XUNkd2M8In1uajdRQEA6UjxiW1VxVVEib1Eiby4mUSttSiMiPXdF'@;
put 'K3ojIUNvKl9ZO2U/aTJOeXZgemNGdz4mbjtLVkpOOTVJTzJ1NmxPdGdWKVUiRT5xdUI4KmZMS21eWyJOc0Qse0tqTDxCVXtSWSEmXUNiQS5BNG1aRzlWNHJGdThpXXo2ZmdOU11BQlJCeDBdMlVrUGZTNyU2IlpwJV57czxYIkhlLjpyQ2F7RnpqSTBRLGhKdVpqaXhKfT5YJDdfKVtxZkRXOCxt'@;
put 'UyY5dmYjTnBNTzRudUdpbWF4ITxTRkZ5P0FlSENmY3spdldRZztvdkdkcTNJeWA0bkA0WzA2Z1tzdnxKNUckaEhpaWlQa2lJLDo9ITFkd29aTmYze1tqZzlsKkZUN1RbLD8qMC5McDZkNm0uUyN8S1NAazZXSGdeLGQ0dkZ1KFV+OXUvfCM8a2JuT3NNQS9OcyNgNjdVVnNtOzU/XnFkZnhPfUVU'@;
put 'S0dJbCtKJDhCJTdFVEw7e0IwOEFUZCY1cTNkUztvenU9P2ouNDhUNnNeWzRzUnBMT2YsNXppekF1fFo1fERSSUZyX0hBP2o5Ykd3YlR7ez81V3BhSV8zSjt6e04wa2ZvNzFQNj9nIj0kfXE6bz5zL0ZZZTRSJE9hX3g6Ln41LCVvN2IyUVFKSWJaMkdKIjVjPWpWRTYzS2trLjBgOFJYQDgkeChq'@;
put 'OzYhTWcrWH1kUnosdTZLdSs4Kmt4RlpCfEtYYldFVE5hWCxURnJtJFJKLH1vRjh1Vj55ezUyZ3M7MHtEMSV1QFZjNztucS5JPjJxdyw3UF1CXUc1JUQ0Z35dV0sjWXNTYSQ1eF8wMkwkcl1RPStzKXFifTAyO1BTWXBSb2xETjxKfSUvNkRYfk5ISEBxanJyRlVsTHtCSiZgK1ZFRnk0YW1IYGUo'@;
put 'bXFdd3dJN1JfaGolOGwzfkIudj5Ua0wxQXo4ck9dRmZ0dXVKfmcoLitkYURteGdna04kIn1aXV04MWpnTlJSJG82bCsvbH14SH0+Yis1d0kwZCFbO2FjL2I7Plg5e3N+MTBRSUV8MFkhUyEzL048ZmhqRT9UcktQMCZAQHhZQkN+YFBTZ015Q0I6XTglbyRKbl97S0YkS1csW1RqXSM9amR8bHRS'@;
put 'cEVrbD9IYkRbcyxCbnEwej8vU0NuPW87ZngyQzJYbCVxKkhPIVhwZT0uXW98Pz9jVzh+QGd+YVk3Tjs7cWJdVS9LOndlUExZZXNUdV16MDdsSWZLc2kmeyxuenkuPVd6bGYkTFt9OjJlcTYkN3U2ekZBdmJWRE51VnlSK0FPP2xMfW14SkpxaXJaYW5pN1JQIXJyLjwqcFkxO1I5I19lT09ta0dE'@;
put 'Y1pKYD1ycE5ZI1cuW0pJYGspfmtRLDl4aTt2aV5vTDZhfGtWalN6UmRubyxsK3hnOzdCaig0LH5mOCI5eVF4bVNfXUlMTlZqRF5AaFd0aCReb25WS0YjKkN3eCJGSlRAVUxNKVouTTEwdn09TDZ8XTRwfmUkZjtELGNZJSt8JDVacWp9K082eGM6On5UfkFYNi9Yc3AjSU9BTlZMYyhKeFZTUz9J'@;
put 'PVZPeCtmdFIhJixten5ia1BeVFI+flV3PjxjL21ZN3lVc0ZMRlF3K0NqSU1nNGh+K2V9UExgNF12alpZMjI8PjRFaihKWV9aVk4wdz1CYSpDVlE1ZjFqYj8xLz98Q2RNa1tXdWRLQWVaYDBRQlZUfFVvaUo1R15CMklEOSZAQD1yLHBffXN3SXM+I24rUi9TbFNqeyNTJkk7RHNudnZxfm1xQzp1'@;
put 'PjxFOCtjNkZpTylBajB4SSRWPiZ1Rzc7Q3V7eld6NjwkUzRJLC8sbWEyTzUvLEhmbV1jZT1yRz1LUXhre1l2NENOYkE1andbZ0doJE9PUXEuaSglOWdYcEZtT0dTNEd2OCRLYGNASEFZMk1BTzpzSm83Yi5ASD4razM6a2N0YSN7KHVQRnV1SjJ2NCMqS2p7dyhFYCNqcWVgM3wqT25Td1ZMZSg+'@;
put 'QGVOPn1lKXQxUDhnfDRUN0ZkZTlNS3M5fHd+aCFiSTkkYSQiWkpnbV1uQERtX0RdOHArMEM4VT4lNlRKUnpCSXk7S1Q/YlQ8ITA/SlNmVjBZe1cuKz9kP09PVX5yJWAiSWVDR1dyVUhmbT46cU1EZXhORGBiQ1kkPXg8LkFuYD1hZyhIRXlVWHclK0o7LkI3PllaXU5HQjA6Wm53WCg+SmJEfW88'@;
put 'PVd3fm8yVXVYcmNbaCRgVytsI3VDI1ZQaExgTT8sKWQzQVomNCxkMU57OWw6NVJJUjBESWM1PC54PTFGL103K0VHaWgsbHxwPDJUa2UxcFtwd3JkMSIrUHxNQXRrR0pQL1IhaHRDWDglNnFXLDdbPG9aWHNyVWhNMWAoZXxHS1h+cFgldzNlVyw5Jm9JUXE4LlY/ZGhIOUEua09ZYzhwYGhpS1ND'@;
put 'NDBsKkIzYUJaYHppanMkZHAwfnMjZEFsWUY/LGldUmF7XWFHKDx0ZyFeRUxDbWRHMnEsSTpFKEJgInVlQkVPJFcoMHVFbFZjOUwwLl5PZkk0S0BQY0BISTl+emo+XjN0dXwzcGAkRnZYMzRoJElKd1JLdjZIZXdQIUksWTIycjVIRC9BOyJJOkFySmU8eWFlfVhlcGhFbGp4fCIyUGtwYVhvOU89'@;
put 'Myg/REhWOS42Jn5qfSZYRFsscUs+Y1ZDPyp9Mnc9OjJQUE14Ul5uWDFsXkIiWkdAaThxdDpJfVZEYCMxYTZlSWFgS1I7WyJ2NW5JJkI0TlQySkdNT2paKV1sd20hOk4xfUF8L1gxP0V0QjhSXXI2ZE04aEVzaXdnRFRaJHw8K0JFJCpLeTU1c1BWOStZOjdDMntXVl9JaTM/XjN3REFTR1Z5S0R7'@;
put 'TEZQdFdkdmB9RikqQWdUUH5+RjhpSV10YHksYTd1ZyEsQXwsMkxSL1A9MEUjNDswcS9Qdzd3O2lNeFFbKWkxeHhJfVo2MCNUZ21tPlhJUld6ZEw/KCp0VXRIU2pGTltudS5MWCo0JmRNdXl9emZhd3csQWB4VzszU05Oa3NJcikrUHBNXmNOMWdKNT1YdTIhRTZEc007MUtGJikzcTtDZDMmRXBA'@;
put 'a3BtUlZRe3hmNCFuKzlMeXI6XkhpSURqWmBWdTgobn1ZblhyVnpMPmg5c2xvJiJxdkReQ2k0fGxvWTYrOixrP2hieT4pSy9XWiE0XT5kPCgvTHMqaW8rP3lFKl5OMiEhVytRNHBiVSt0Y009R0B3ZVN1SCE+fkdAV3opWi9DXTZtNHokaiVBIUk7JTBhcThQZzdEdSl7eW9gdlkrJV4yQ0trWypG'@;
put 'PDQ5TE1bSFpOVXlLX3UlOXA+alBJXl1xOiw/ckdlLmhnYUVZbzpLRCg7TCNiT0tHa3xuIiNPT3Q7YVsiKEc3Sz09KlhKMEZ6fllCPWFYJk1BMnA9JDFGaXdoOTZGLGpAUmlnZndDWkQyTj4sRCFyRyxheE5fV18reXc7Kz8vaWhXYVZYOzM0K31lZEhlPkgoVzskfWwwLnBwTmhbdm9vSU4vRlBF'@;
put 'LE02O3Q4JmllQkxRJjxddjQvaztzPmVtKj5bMHJAOG5WYmlGIXI6VH0mQDZwQy5CY30+QnNoUDdNMCorTjYpZFY1VlF6T0UmWHEwaWA4S3w4ekdVd2lbWi9oeE5NMTEiaE5bcjpoYGZIQypXNVtYTEBSU2VeYyo0NDVqdElTbWFSTXttZDdxOWdYS0JfPz9Oc1RYS2xITnM6KzNTdDF7Uz1MWFdW'@;
put 'SzZaQ0h1Wj9fQk1OeT88KVoqRV1dVX0ifiI4X3YlMzBlLiZ1bWV4OW4/MyVyJC5ra1ZOenBvS0tLQzg8Vmk0Jn1JP0Q0aGV3bnxFKFVTZ3lPPVo1YlYla2ptQ159dHFKMV5YMVh2UCFNYVIrJFFWRnMpS20xKV1EcCRiXlppTEgsMmhjVkAoU25YUWkzNENwMEpeXkJ0emx9dVlPdiEiOV4raGNj'@;
put 'WWt1P3VZT35nUVtIYWc6cypzYWE8O3d0eyU/WGs9fTEqbS9wc3tLSTEvImdHKkNHSE48UElBcGFkfjlJNCh0YDQ0d3ROcHF0SjlEQCNmbHFXe3UpRWNbUEM5c3Rgem5fZW5MRUxPbzdSPTg8YzxYLl5zX3k3ai5oaEdMMilxOFlaZXkrYEVPTVd7bVVkZD5kR1VQaC4oK3toc3AlciJlKyE8USFP'@;
put 'NEk0KHQhWWtBc3BOJVVMczp3XXIwXVsmKW1GfE53TXxbcFZkM2g5M2xzK3pDOF5nZnhLPkNiMTdpUy8zJVg2eEFgUzlRYGByL2JKX0R3ezVHQkl9SzhaZV0pdFp0Rng6WGtJX007K1ckZHN3MStlKitLdFMrQ3ReM2EsKGJAKS99eHNMN0ZsT003ZWUiJX10RyFnZkNgWiw/TnZrTTBDZSY/Oysp'@;
put 'U2djSz1DTVo5Sn1ySkcvdVNfaX1oTyxoY2VhcThjN0JHfXpJWmJPMXFbNkFGNChkY3k/R2A8LkBWMHVaellHSFo+Z1RSX05pSC9AUE1qTW18UWAhOzsuIzhiVnVNMS5PPmhHP3JFcyh8NmlXTXtLd0JFbUNiQylbSFpVKT1gOXRtZjw0VntNUitdSzUzI01nKWFVbmpxeVRqZU0/Iko4O3JmNjZL'@;
put 'QU1eKkNKR3p9VFNSUjNOaWtpOX5NMDJJYTY6OmlHUmkvRzAhP2FSd0NpTUtmfE0weWE0N1MmaHooUjFaYyt8QzcsPE42fSV+cThwanBVbVljLGwxYCE9MExJY2l6cCM4NTkrP28kPkBgYDR4JHFXIyhxbnBCPkByInA2MXAsX092WXkxbig8cVhtMEZXZztwYiFDUiVpNSFQcUZUUThTUjZ2TG1A'@;
put 'MlMmXmFvc01QM1IsMUhveD9GTng/JjIiTXZpZ3lPeD1ab3pZd0J3UCtfWTUqdWBpT296anRKamFNdiUjMzhZJnVoKUQ1LilPZWBJUjxpeEoyQ3JeRzQlLDFCZW1dK2MwcHBvXXkxI2A2ZVg/QzUsSnVdJE9qdCUwKjwqZUN8PDF0eXhpVl1mP01BbUQhQlU6Zi9eKzI9YygxfFtDM3YreFJETTd9'@;
put 'LmksNUM7dGdvZHJOS3hYMywsKkteNnVsV0dZJD15I106Z3hAcj0+NUdLXk9FN0RrXm4xVXFJa3hSSXhNPzFROkksS2FdLHNgNWIiLHVgd35GbmVNa2RfSU1xS3Z+USRxdiU6P3ptaWlIUTg7Sj52XUBQREQvMV4/N2FAa083eW0jTXZUdU1VYnsxREt+Lk5fMnx6SXd5eSFfTi45TShLfEg7cTtS'@;
put 'clFUL0pIWmhLKi5QRTckPXExYDNsKXY1Zl9WSVdINHJkNDR+bWFae0x0MzxwOzQ2c0lyTyEpbSg9eD4qTF1ob2BGIUM3LnxRbl1geklELzdoRS8sSFp9c1leRWlycXJfVkMvVkxbOlo+bz0pak9bI10ifStyNVZYczQmNjpDKFZyaUtJLHA5L1l5NXFycGkkLzVLcE5gZiRDKzljZVBdTmFfSEMr'@;
put 'T25QSFU5djBjaVdEJjNZJnYvI0RDNjo7JVVwUVU3QS4pVXs7eUcmRCldSHMkYEJ0JmA1SU4xeURbflVVJksoV0NISj43I1JYVmBAIjwsbitDLz8+WW5YcipGRmN6N19RVWBiWCZTbyl6OHYocXx5SW0qWE49bnFnJWksSWRqW15Ben0ubWFyPkxKdktwPmNfJi5RM3V9VGRULm5WXlskeyEmLnNe'@;
put 'VHlKYWJSZlRHUk1TZXZDbXIvdUsvSj0+eF1ffXBETWI1fVlkT1JWS1EuXW42WiohfSx0ITJyXlVoe287KE9LPlsqdklITkw9UVNrNUVVaGZYVFI+MG9hbGp8KDchPTBeb0FUJUhfQ2tUQmlKMHI6VFU8e3I6N2NgYCovQVpCYzYoOjFYMkhndGViS3lRQl1oZi8yaUd9alkwfGBteVIoVjI4Vmk7'@;
put 'V0c7USZZS3MsYFQrLyM1aUpAbThNSyNvZ2QrJkt8ckJZOUxPMlFXc3VSbjgjT0V2ZyosdmBbe2sxPjRiLDRGXjVnWyw+UWlQQH0jSkkvWWsmRyN3XXYjaWU+eypBYWMqe11NMVdkTFtHcmM/THwoe1VJdmRnZl5LPFt3W3pkfmAsIVs1LE1Sei8ufXh1JVhHPWN+bj0/d2hnZkNaPXtoUW81Jm9O'@;
put 'Py9ZYT1remNteH0zWiN6PU1tLnwwKkc2Sz49cylRdE4oaF5YVDFCaXBXTmExNSx7MFQ6MlQvU1E4N2wrWkJwamE5bCo/NlImOixgQERkNHI0WTRAY2BYc01rWHNfMVIibFo0QihfPzljJmVOaDpzfHJBfl9TaTwic3VFZHE/YFQoaCIxNG8+JXd6X3tse29xJSJHRXtDe01KYTV3fjNwbzx8cVlL'@;
put 'U19fVkBEc0pgIkt+OjYjalkuYzJOd3khWGk2ViI8I3VMdWBAdlA3dV13M0tUSSwjeEhNZXttVDBpKSYpP1IxUD07SX1QQjJIWyVPJn5VTDohVk5GZlIiKG5OWn1eQnV8U3NgMlNbbzhqeTxObHZhR0hmUWBaaWBKbWtlalE7MzBvPCo3YUlBaXQpeUVUUmQ0MnMzaUBCJml8NCtXK2VgTWp1KitU'@;
put 'VUVxaysvI28sUSZLfV49bUFlfFtIUk9kKyJla0VEUUJ2UWtAd2s3MXE+VFgpV25iM2s4RlVEaFdWWHF9THdDTVA9MlV0P09yUi4lcXt2TVl7SkVeQSxoO2lLU0MrTiJlLjZRS0FXJUQ5L0FDWFNlJDRKVSt3e0Z0dlQ3PUkqJk5zejhdUXVXR1pUSTV6OWNLdCpUYFF9OXUsTlJmSFlBQipLUlVA'@;
put 'P31QPXMzOnRPcUM8a200Y2NvJSZwOD0wWy9mYXY5N1pKXyJvN3AySVtFfmxXXW9+VEJ0SmExOG9QQz18SHxAaFVSfShMKn5NNF8iUVFwIU9tIk9TMmlxPGBZcjgiLFhdXkIiYnlIdTkiIVA3VVJwKXRnTWZbfTQ6VUBKPzxGc1lgdVkwcFBnTHhFRTlpfU9dblsvfTFFTj5KX29MTnAhU2JKKEVq'@;
put 'TD82OmwjSVMoXUVTVVUlSXFXenFrWCRQKWpyYiRoLiNEO2xmSVhLfSQ6KUx2Vm9ofSxlKStwTl85W3NULlNdXT1ralk8cSVrKndZNixmYTslXSF9P3Y1Q315O0pYNkpkJFR1Qy5gISJLYEAraUE6RnVDQHNnfiRfbl81bms8c09TUmh9fCJseCFQMCRQTVA4LDg1ZGk/enRCQ2BOemtjTFJKYG8h'@;
put 'VChCQjgsSW9zSlNTKmxuLDIvMXxEPHtJOmpMRllMRGs5I3k0OWZjZmVeQWEpSEE8KjNNe0wsY2RPbiU/IipFJHRRXjltV3Fvb1Y8c2AyUyQwSENYQEAmfSJnSyJfNHsqYl1NPV9ZLyN6ZDNoOTYuQ2FNfiIoM147KC9Sdi4rdG1obXtDbXNTWEE/W0QyYCwlSy5weUROVWd7elY1S0MvKnl3X0ow'@;
put 'MDZEQFVWPjZKXjImSHZJRlVoLDE0TFVFPG8oZ0x8SWxEd1NhX0o8KCldL1VsOzA1RFkwP05bcXE9KT1bQCU4b11vI1dyPSRXciZwJSZZeT1ePyVvJF4lYHBEamx7bEhkR0lHNSs/bDxwc1QjL2lyQj1XYFpJellJMzhPNV5JYkErMElgUVhAQSNgYDVET016czpZP2VBcjdhQikxP1RtRUcmYGZP'@;
put 'PndFK3xFU1ZVUjdxdk9jQyEsciRWbUhMd3dydFh8WjRESE1AYk42ZSt1RSJhO21QUjlOenc5QSlqTnBxb1kxVnhWaywqSGFzPUl1bzV0emVHO0U8Vk0lQHVNaXE+N3tDOC9OXylTIj06Z1JudTlFUERlfmorcCRsfT83L1VCQ0xtTElXSnk8S3xWRmJHYz1JPWBJXV5AU3svbTo/byR8OlAvVSVj'@;
put 'KypIYHEualt3cVZ5VUElIj9bbjNkNTJTejIxYTtdPTxtYkA2byRzW3BLPn5PVXsmXiFuP2BiLi4kbXJOMUVOLHQ7NGpSWHFdKG0vVWROWismcERjW2tGVnNARW0oLzpmWzA+a2xsUV5AbXQ5X1BbdXtJRCtZXTY+JU4mTi8ybFlkOjcjSDldVTVoYUloUl4yKXZSLEIiXzoiO1IjKXo3ZWNIKGNa'@;
put 'MndSTD8ob34mQl96P106Oz9nd0VPeDRKYjxDbUZVWTo4aHJRYkRoLlpVLF9AS2pNLGk+XzBWWXFQa09GWjtdZGxpK0RZWlU1cWQwaXZnNSwoLkQ4ajNhS0BRXyU6KSxQRF8hcTo/TVQxMUxWe3lZJDAqJmVjUj0maHVaXmRReGwzb3VwfVMuW0dYY3MzfjJPfUM2VWk4I0d2OEQvZkYjMTRudXYs'@;
put 'b1ZALHE0OVlsQ0JXU2JLWCxWWnwoPT5gbig4Iih4KGQ1X2AxX3g+eGwmN3t7WW5CPUFxZ3lBc0tLXkZDMkpgPFlTU3RsfG0yMD0vPSNrUndPfCk3fF5vdFV4dTFAeHBCZjcsanhkMW12OnZHYCk6fSEmeyZqPyFUJCVrMWVPYV1dV2ZZclI8eWw8PV8/Z0xgQyRqPThrYWBSO1IkLnY0Sl5AQFdQ'@;
put 'O1RjZWpLImFHdl9yZil5NlYxezZUSnFCXzYrQGI3V1U9ZSFQOWRdNW5UbjJzb0JNb3E4Nz9wZ28lOnpOeW08MX0lWTMyIVo8Jk9uXTg3WGteUEElXWhiPF9zZVlJK11GZGt1c1dUQDYqeFVwbyp4PnMwfm4hJXlRRCk9TEBwfHFjPXgqclpFQzYuYG5tUDBRNHB1UiNKQnFBJVdGI09RenV8Tm1v'@;
put 'Y3tDVjFHaEBqaiZdMHV7aVc7WkpaM2xwLDk9KnNqYklOemlwLGdVW3o3Kkt7NC9qQWVPTUltaTptdyFBKXtAT1MxanB+Q18oT3JSbnd8S2w7Kn0mTTBWaz09eE98ZiptKXRUdEklMVA/ImhXd2U4e1tVVTxedHlCJX1WKiM0U3ZHemkwVEtPWyIhdCohbE1gWHg1alZ7JmA6UmNkRiwkOl81VGNp'@;
put 'ayZPS0UvSCQuNmAsRF1Ze15KTkcmX1J4N2MrPmNzOkojX11JblZBbVkjYSw7cSx9QDlVQjZoI0hYOS8rUEg1LEd3fjt1a2pQYm5KVns1fFQhVm1ae3UjMlkyIWgkYSMoZXE0Wl4haEIlSHRSL3Vsd2NmX19lTTVPMU9wQ1lKJFgkaC5FOVFqKnQ9dD50KUhbQm8+ayVHS3ZFMUxJbCwzOnYvKyRD'@;
put 'KFdpREBZVW8jUV44LzghNm4pNUJUfFE/SFNPLmtrPXlgSD9kREQ8dDQqUmo4e2tHNGMvMDFdYnJ9P1hGeXdbc2B0SH09ND1UXndfdytWVjRCZDp8aEZ9YUQ4ZSJwKCU8Y1txSjovUH14aklxezU4d1VOXitLWVNMPV8/Mm0lVFRfWCJ5Yzw3YHhlfCJoIyhfSUQ4THU4PEhMcDhJXjVMb0ZRUFMs'@;
put 'cWZrRShYTEtgRlh2MmJ9TnxVKERxWW95O14hM1Jnc2YreHlIRlEiVyxlY19ZZUBEIj9ocVQrRD53WTcrWCZlbnVLSkgibkxTcFtiMXdoMCtzfSVqOnUsU0kocCxWUS49bWEoISl8JXZ6UXVvIjloZmlbUHRwanVrV1ReJVVofVtVT0xqSF9tIUIpPEs9ek8hWX14XmMoMS54Xzg7RXVvenomNjcz'@;
put 'JWVycSRBJkFhRD5pSEtjWihKYil3Z1ZqfnVNdCFtVTFXSGlkTHNQQXo3KlFDNDVoN30kdWZuNmtGelF4UTwsTUxDaGpnW2hAP05+IWRpQyY9XjxlWVV3KWVYVTtlYztQayIlel12PXI6PzM4N2BwcTJaakRSJDZLLkNJa316el59JHhPeEZFIUhUPlY7VmA6KWpyLlJ1VXw1KlE1eFFzQTZTOzhn'@;
put 'NzFRbkhTdG1WP3AsYTs0eV82MW0xe0I8Imh5JGg2dSQ+OUNmUiE8Sz5CYWMjOG9qb2BCciZ9KFZEQjUvR3xMdDExQSZCYnhKLChfbyozZH1qZm1nfllSWUF+RllETiR6aSR7NndWR0pXcCRjNnB1WmpQcGQ1PS5VZUU0ZzYlJXs8cXxfTytWeEZRTllJNUtvWms7L0UlP1dVXV48XzMhaGxDS19X'@;
put 'WyZ1M11gPDkrOVM0IyFYYTVeQCZnX2xaVGs8P2pWL2Z0YShYM0dMYEttMT0+IltPOnMlUmJjQjl6WnY4LEFSZmw1Iz9JOEIlMlJIdW9qKT1qdS9KWH48WF1BaCgxeVlGXz9qV2FNUkQ4NXYqSCg9cVs/SHJvOGVbY0wsc0Q3d2ZpVDNCfSo2YzEiW3BabGtZPSFPOnhFcFNmO0xQUlZYbG1ALyMm'@;
put 'RTppOWZ4M2lkKTh0WygrY2l4NWckODFOS1FBay5ne0FzLEVkXn4yLFkxXmo2dT9qYz1oQ0B5JlBLUGJXQ0IoQFpNNDF1OTJNLiQuOzk5Im42OzllfioiP0A9JlQiaXhOQUA1dFt1TnJqOUx1NFQjOW9LQWJCPjNCfV1nS01qfllZfWJ2YDE0Vm9wS0J2OFkwOytjYSY5YkA4Zm18T3cqeyg7RWoo'@;
put 'ZzxFM215XlM9QEhDPFssPFIwJURvTEByWzc3LkB1YE8xTEhBejo6eXJBPlB2cFgoXkR7NT9wSF8uIXA4SzYzQi9kUnxKMiZXX1ZpcitVJXQ6bihqalBFLHlub0gmdnVfSnxMcXJ2JTt9diMzaUYrOUwmaiVYRDpgXitlTz9XKn0qQ0BbP35pPmJVQmBdOGA1NnIrYikub10mNnM8XVNBMTQ8Zl1j'@;
put 'czB3IXNQeVs4PVl+VCFzeWZvPUk0cHcvSDZtJllpWUleITZ3KFN4PnBmXiE/MG4mR3FCPERvKmc3Myl4JWhqYiNlLjk+bk0+MHBwOV4sT09CTkU9RT41QVYlfFlwdSg5RyFdTTo3PEglRCRFclRdT1YpQ0RyIkA4Q1FTYThHPVNWQG4yWSpLdDByNFZ0M3ZsS3JKPGszK1VpWSsmQTFgUHFdOkFh'@;
put 'XzEpSiMpJWtpamVWUjNPTCEmZEE+OUxTcjgpfjE/WjA1bmN4PmxMPnFFcUw/UDBDUUg2MjpAY3tFQEBtVjdMbSh+UjNCXkIjZjBtYS5JKXouQWdaOT11eyRdSn1yUCNpaT9te2c7Xy9INzU0L11wOVFxa2xdXSo5Y1s4TSsxZ2FWbD8qTXB2QHh6dkpDRm52P149dVVuNktDPWNxRlljW3g+VEVJ'@;
put 'MHU7QntQVG1zPWppYFQzejsyQlRUJkxGfE1JYVlRdklTY34saCheWDJZLGVeKy5GTCR9U019X2kxJEQkeHFSYyV+S01jY2BEZXx+REgoZ34wQWwqIUdbcHlGTVoyPXEuK1d1aUskJjd2Unw5LHxwcz9mUjkkKjRVfV5MKlkkcHtIajRXVyt4RHpYenl4P2tmTSE8T0Y8OVNGKGJ7ZUZNWjNGQ0Qi'@;
put 'YVdoT3JXTXMlXSF8PT5WUGZDe25mKC4xLHYpVlhxUSxNQF8rcE5mSVc9cyVWVFt9MzUmJFFGVygufFtZP2xacHt9RGFYeWl6XkJ2NzQ3VXxlTiM5bWZAOnNFVU9pTnMxfjF+MXszfktMPyk2XVsqUlJ3KnZ3IXBbKVFDOUtKYDs8cG97PVd9Tn4hcDt+c3Z8PGxieSlnaWFySnZiXllGeGVFdE4j'@;
put 'NE58KnxLPU15fVZrNFFEe3M5NjgiS1NSe1QkYi5faU1YPmclTmlXTjcqcjlZV28oV1ZsSl1EfiM6Ql47PGVYITdPIiVjRShvIkF8P0s8THFbeTtWL2Z+bF9JQnZ3MER6PjZRWWJ0PjZhSXA/dnpPRDpJVUNKWG8hfSFaKFp9JEBUQi9Eckt3cjFaQFl3KGVMNGQwPmM8bTV7dS9Se3VURTRHfHRH'@;
put 'dG47LGtOYzRNcV9SIVBvTTcyUmllP09KVmR6VTt9cXh2T01lanBRIUUxcE58Vl5RKzRkJURaKn5rIy9MYUM9TDglRyJLNjFgO2xhUVR8Wz4/OS4sOSxMdUNbdztpM1tkU185bzlQfSN6dyxANmJkVGlXUnMvd2FRVCZRR3M1ZGNGPTBXWztqRU01VEV7NVYhJVFOIUlHTGRZOCsyNFoiWXJePWYi'@;
put 'Qn43eEYyQFc8LlFmT051Lj1Kb19nbTZ7YmozWzY7MHpRVEY9N3hMVi4wOEQ1UlFJaDpeRih+WVNrZ29WOF5UZGlBaEQ7Ynl1VFhLWmphQ20veGxKQ0VNRU9FLkdwTUosPz1sWWdzeWl3RXJYW2ZWNXdOV18iODJkW00laDIxKmwiKX52KmhFQ1UqdjJ9VVo0dTNqQlMxdGlKLj9ERmc3WT8vcj40'@;
put 'IW1lTykuZDZWU2tBeUdoZHxnSkIiL0xaMzdhWEtxXz0hSEl0eVs/fV9WJCpKLyhsWX5JT3o1Lkg5V1EqU0dJKn14fGZwYF9dP2ZwTUo/UUNMR1Y8UVNrPT5gXl8/I18jUjdKV25te2B7Jmk0UU5oWnBSZ3xuflRvUC4oczxQalp4a2kuVCwldnxxa3kyTXZ7cDFJWCUrPTY9R3BAKjpTSmgvVTd7'@;
put 'RDkyYDZ9dVBESntuQlJOWkcxbHI2Rlp3anEuKiFsTT47Vi9IXVY9Jmp6cjkvejM1MmBEVkI5OHRedWU5SlBJKGtYTXNhRHlxUTppI15PaDMxIWJQJEBNc2A1cjg1SWR9Vi4wOHtuLmBZcDxDWn1KeFh7XT96fioqekd8ZUZKSUcwdDY1Wnp+JFEmJHsuKllWKCR3dUo6WjFeakR6VDB6czEpTVo0'@;
put 'fHF1PiooazAzKDcwWUN7cC9DITkkT21OYUswMnRNVF1BPUI9ZT14SztzUDguRV50Qm1PPHU+X2YjI0R0QmoiO1ZrUkZ3X1EpJWwjfDpGInd7KzB6YTI2ai4+dnRUUTtFPGBfQ2hYUntwZT5YYlBEcXtHaS5KdmtMOSNQRThHOlcoN0Y5e296YHB4PVA2c3QkLGFQQGcpdj98fktaVHxJPWhLMjkp'@;
put 'Snh0fGg3YzROaEBqQXJVPnlxWEdrOkQmRSRkZyhDUyMkRDdiJC5+JUo6TGZVPFghOlNBPmhteDFmK1NDRCgsa0ohS107KXBSajNoSTk5R3BEPHJWRlsxbXkvL0k3bHJtTXh9SStVLEhHZ04hOXZ7cE8yTl1EKXkpVC5DKyVtYjYhOEY0KC9YIXl6LEhQJX0kYDErSXRtemhIeWRqLE5MeXZxd0pw'@;
put 'NUNdVzM/JVg8QWdmfnNQQ15hcUh8QHQ1JCRsQHJiZ1hLcV8jUipPRTdZXSswdXBmc35jeyZBKDkwZGorJD9dLD0uKWU6MkZDNF45JGs7OGtZYzBkMTRKWDp7ZyNQP2FyOGZxemk+d3dNfXI7anU2NmNxJVo1dnQqdn5nNzFue3BAY3l2YUIpJD5rY2hLZHt2Xksvc1pVfnNaK1deTmlaV2dBaXs+'@;
put 'KWA5KT5UX2xSflhwYjVqQl8qKkh7fDZeX0Q8VWl8ayxBXX5vYyNGcX1UYiljR0gqeT02cHAodXwzbE5lNVpPVlRyV0VNO2N9ZEQrJU58cmJtQ1opV0E2cn4qeCNXfHZySFk9KGVKOWp3X0RxUk1gPnpEdVNoZ3tHPSJHPF9Ldm1rc0ZHYVY1YDBXSE9XK0RJI1F3K2c1a2ZIW2VKcWNrREkwcSs7'@;
put 'T28wMTE+cCpEYjE0c0l5XXVeRj4rWyk7Yks9W04/QDxoZD9CcGZJVUJXOyUodHQ9SSgwcEQlPjlsMDl0aXBvaSZSS2kmfnZzREY7QD9bJkRkPDoqYEU7JFVQel52Vi54b1giJUVDRTskRmh2YjgoVkVjWFYvR3suaSlTKldPLjtheVopfnU6Uy5GQDlAUmw1UHFuVD5LLmFCb35HK3lgNz1fW3oz'@;
put 'dFBwLzV+R2U6Oy5jc2tBISZpTTtWLExbSF1scGkrclVBUVdJaDJaYUt3bFN4JiYwVD5KbDV8YTJ7VSklJVIyKi9SPzYkOHBzfEdSRzNJXlpeN0w0SjxUbWlzPUY9eUJAMG1YRTA5QWNKWkRrcHdvVUZ6Pkk3PVc8SyskOkZbQio+R0hbY2Q4bF9QRiQ+amA4QCN0Oz48YUF1e2RpQ3RfRjF+QUFD'@;
put 'Im1GJEZ3IzU6PDBvLCVqL0xvM3RsOGo6Q1NMUUslYz0rODBGMDJCbVsxNWl5JUNLY1kmcmVfViNjTVZPQU9BIkdvX2dxKnJgaldDVzdlSkpddiZbZkNMMm9NcCUmbEYlJllzQEBtbyg8MnBOXTdTK2V6SH1WXkpWLn1rZW5zNDtxYyRPdUQwMDlQZS5nb2NkdDxFQV4hKCo3M2U0eFRKOjUjbGoh'@;
put 'bVF4KTd2U1J3L3VJVmc3aDF0OW9Oc2Bwfl5WbkMpdGBHaT8hbmZELzxZJHA+azx4NSxnfSZrPEsjPDRsPz92aGBMUVNpR2g6e0VWYDZtU0VrbUFeUWglS3dLckpkU0FhNWVBJmpJIjdqOjloQEVrU0BpbzZ0PVdoNWVoUyNqQiYoMFJRSFQ0K19nNj19YCJ7KCtseH0vRHU6QHExM0VLRz53LGA7'@;
put 'Z0JWMCl+JWoxMVhZKmc2MllBJmwvYy5yfE1JQjVpcnlaellfPHxdUE5RVE9OWyRseTthZ3Z0bSxCXSp9PC9pbUc2SkhDPi5vbyU5RDwyK2lYW1dfdTFdQSooKighdy9kYiZoeWBHZitxYldCb0JVMGV7M0doOipDI2RTZndpPFRtPGhTaW4/QD0jXU1HUEZiMCEqKGlHW0kpa1IsSzc3bnBqUDJW'@;
put 'N3Y7TXRLJTsmcWozQV4sWk0/Y21VL3FXRlZwZnBpSFs5X1I3X2BsLzJTOkh+ZDZnJl8jKChOTXRbdGB9bjpLM2xUU2NQYlteMEs1dlJGazhFPyJbN15ePXB9Y21LdWwyb1FoeXY0LjsxeH0kKz1TKnh+cWhscXkvNjlAKkFAdCp4UmVoTl1BQGshXlU1LDQpTzQ4X2dQX0QzWTUsaFlQLltnWWRD'@;
put 'Ryt5XnswSW16Q2MjLGI1LjxhW0h4VTZnMX4jdDtdSS86ezloKF41TWQkLEtUQ1MkLkN2fnAzP0N9KkpOM3N7IndFKyRRQDZLOXw0bXAuY0MrRDg7OExxbzhyS0o5MGNqdyhALGpMK0RAWiU1L045PChFYDZneXNbbEd1Xyk6P090IW0udk1afnNkfiZsWyYmVGA5bkRhTH5oYilsY14va3hAZ0NA'@;
put 'LiZaMmwxTjp4RVomKCx4JUF+ITMybUhFXmMxMHRpdTdqM11TJnd6e1FPSzsidlYkfncoez5FYTsmJUdRV3JeL3VsLzxNO2E8bEhIWGZ0I3RQUzFeIV9OXnFnRl47TWQ5dkpdd187JFhOc1Y8QSomVUEmfnd9IypVdjE4NXokLCt9ZX1ePmc3X0ltNykxMVRzZyVUfUJqRWxUdixYW3lNflMrOk5+'@;
put 'PyEkNEdRO246aTxKWEtkTj0lJld6Sj11aFQkMUV4X1VBcXBHXlZsfH5KbGx0ZjVqcjQpcl55VFBjV2x5VTdRQ1I3UWY7XXApSHtWUXh3dlZASW4lJnhWSTx4Iiw/XUc1PnpyK0V6USFwcGA4WXFJRGAhOHJlMm0mVUsqejROdFU+PTBvcGAyTT9fd35NdSoqSCI0IWhnQHxTQi9+PUBtbFNvKlVn'@;
put 'bT0mITpSOXtUZCxxOlRFYWBVUiZzSD5Mfn1fbDpzXylCVXQ/ampJRTgsYyRzVEAmPVFROV9uZ2pMdzZZRjwrTjolYzl5byl8OUs5WXVJdl1HRXpRTVIvPSF+YFU/alhGeWVDPCN9dGtiRUsuNGFdL3ReXiU8Kzwle2dSUyRiSjU/TnZaNFVFJGtteEddYGBfaCZtQ0siUkZEOHk3T2Z5c0lAcT8w'@;
put 'NzApcD5AekldYjs3ZXUlKmxHWj45VWhpcD9mTEB1UipLcD9ONGVKWXpyZCF0WnolQ0kmNTZaMV9AWD4lbXJ9RnhnTVhtKWJIfF9VZzVAclhRNVdIKU5dTDVOK14pMkYkKn5lQShEMX18SlRfYCJocVlMOCNQQGVbKyJ9IUUuTTNnOz9MVUgxRGtXfVRkfF8uKEJvKiJGQUp5IiQ5UlJMfmhVSj0u'@;
put 'N3Y7OnRlWSZ9M2c3Ljt9VlMmPT5FP3RgKjF+SWY3IiRRbzNTY0dyKzloLE4wUVQpUmxHQCxWND0yX31wV0tqfnBCdmc/KGV1bHhFRileUEFjOENGTUtAI3EpIT5QdWtPeUksOHFFRyxhW2dHUjBGPDM4MUtxb2VPMDs4WXhHenF1UlFLPFRRK3NGQSh0KV93cCVQZSEqOGJwOmpLOVg7TFQ1X2Ax'@;
put 'IyVrTEhpKEMiTit9cGMkR0BxaSteUXRTeXNLa3tuU2BOMjs8KmFePEVTaFI6eHFLTFd9IzowUDM4Rj9zRWA0MDY8YWI+TzE0aXRvXTVkOWM6XSFFQCtxRi4qckFTRGBldD11dWdYUXZVTVN2OE9QK2tlLjJDSj80O0p1bmcuTTB+QTp3XzopXVNARWp+bkRiOkwoMW1MLlQyajR6PlZqaTM9bFom'@;
put 'd3s0bVFLUC5CfXwjbk0jK286O2NNZFRiTH51fUhsbHJTQ207dHA0U1YlOUtsV3tMWTkoKlpZYS58Q0lzQ0BGSnxbLCpwO3AvVEtTWExMNmNbRnlSOzcjR2pKVmJNeEJvaGFIQUQ4L2Q5dFN5XSQ3aWRwImdqN0xbfDpNPnlMVmp2fGFUcWZ+Wmp+TTFXMyZQQ3VpPixEfkRhWEhlJjZQOnw5I2JZ'@;
put 'eG97WCskcFdedFFLamB5RSVDeUd6cDdHUGUuYFE7P0wuTkMrNU1bSFtuZ01oRkBZNnA+VEtsV140dXZ4eEZbWT8wRWJYNjpKWytxPV51bDgyWyxnZUIzVVdCbzFJI3d2fEZ5aGVZJjNLZ0ZGVnh7QCZoenRxMVkjXzlJPzZxUVFtMnJxeHZZeiRpdWJGYiVdPnc0Tnp2M09JaysudTEzYUYwWlBs'@;
put 'dFIrSThuIW5Lfkoua2BPeDIvQWQrPmtSITFSQ3NCKVdgRkEhPDtXfSRSOU8uSjw0ZDh7PGU9LE93TCxxWVRsV0NgR0d+O203QmxGOz4kcEc0aHMrRCt2QyFtPWhtQnZGSHk6TDQ9VWZ4TFAydTssP2pEXitzUC5CYnh1Q19yK3hGRV1eOz9ZJVNwdkl0JktvdHs/fWB3RXUzdTQ1c1AwUSUyQX5o'@;
put 'SmBUMzFHYn1HUFp4U2JVd2EufCpVRUB2Wn5vcXxVeVB+Y1lINUFoJTlaKSFKLmc6SCZpMj8weiwiUXZ7WXNNT0JHQXB1TnhpKnFUSmFCaiFTREU0ZDVGWy5RekVpdC8yU10jXjJ1QTAmLmFURVkzI2hnTl4qdTleWC5wZywuI1d6fHxtTjYvXVtsJF8kK2A2WUVxfV5hLn4lYihjaG81U0IiYjl7'@;
put 'VTFsRDRKOHhBXmM5aFdMUlBAbEJaWHt1VXY3QD9oR3JYXTJxYiQreEk9MUpzOipLNSteUVhdQGIrclsqN3dudEw8KzJGeXtgPUx8TkFXRSQhZ11oTSpBeUY2b1RkUTlwKnZSLitlN3hvWVJgNjg4L2pHNHZ4fXw2P3leOyRxNGc4LEU3UCFJKGdHYC5BOnFYUl4kLGgzUVIwSTdHUzxvYHNOOSRC'@;
put 'Q1oyYCFabj13Vmlxe0MpT14hTUkkNHJaJDJwSFB8InNINGc0Zyssa0ZveDNwUElLM0drNT04KEEkUTFQeUwjM0p2PG4kWDkmLntgdm8qc1NHaCxNe0R+RDgzbThVJnxbNlI9UUVyc1JNY1Q0MU5DLylSUiYsZUksPUx7Wj4hU2x6OyluWGhYN35ecCY+WEZYP1ZpbHJ9OTIxIl5NcDdlP0Qocy5z'@;
put 'KExBcHBxWmRfPkRTKExrQC85L2p8dk9WOVZdS1RyeDBIMlZfa0ssMGZvRCpLa1ZQbyE8cj5JMVp9aXhxdl5DSVdpJDZeUWpBaXJBXVVeK0ZJS2JFQXB0YTlKWD1LaXElfjlmZVV5TjhYYj5nUlMsZH4lLy5KZFRPRjwqPWxJYCpBeUxkJnlYbD1ZW2ZSPCE7Xmd4e359RV5FP0xHI3RoKSp2dzZl'@;
put 'fWF3anEsWVt4VXZHVkBXPW59WTVbNWRGNSRsWlQ9U3RROi58KFRgP0g2eitqUTdSamNmOi43OyQqP3lZZHZ1STxgOWJxTXN2KTt5Llp5WHNeNSNDUjQuY3A+aHgsbHR7WiVuPjZwWHR0eUhzS3khb3cmNEx0KCkpRn1Ja2E5NiVhIUJ7dnBfPm1NRV1RXlVWUVp9VHhma1s6RVVdeyEjbFJQI3hm'@;
put 'X0VhNVBzJmlVQGY9ZCM3UEZke3V1VDRITnE5aD9HIl95MUtvM3J2JExtP0lMUGJ1WEpBZjxYMi94ZmssbUVlKiNlP0hZNkp6WmliVThAYCFNczx0amohT3JDSWk3KTYhSiE1WF51JT8/QypQcDUre3JjMig9SU9EWUJLS15NJDpDPUk0aSNHVVI1KXtUdCJBWU46d3B4W3QkLG4hW3xeSEg1QWhK'@;
put 'ZHQzVU9IT3BfQkVwWilUcWtOPiRyamF3cTpjMzI/RG8xJmJuP1hiWjtdOW5RYFdmTGVMQnEiXVcjTilIaD1FTlZ7eWB1WDUrPSVrLz1FVD1EeCxEcH1kMjpIW0tGJm1zKT1qfSRXKiVte3AickNtdTNGNS8xLzs9IyxbRCNRJVo1MEkmUH1hM1l3Zjh0dmVPaCEkKixqfUoheS5gTWd5Oyw+UjEp'@;
put 'P0RMaHEuYWl6PSY2TkNZQnphM0IiN2xNQzNLXS54c3hHeDNtflk+T0tORjVdSik0KXwqa3JDdW5xPUlCZ2ZTbzFaOkB6eTZzdT1xb2Ypc3VkPTU/SCosbEZhWyw9aEhjbiwvSlZdQzx1THQhNzhkTmIsRHxyPnttS10pZUl5bHhSaHRvOylBV0ZEQ1h9YVt4dm54UDImWX0sMV8xeGFRW0NaNWd6'@;
put 'eHQlVSk/TXYhbVd8ejZsRitdISwxd3VTPW42Pit6WEtLcn1yUSpYSSxsTSlxIUtCbWliUDsra15OM2Frd0k8LEhtYlpRXmNkcSQya3NWfFR4USNWTyJPdTlWT0d0WX0mQF1YJl9Zel15NihGXTh7NmtxfVNdR3wqVEd4NEN2WWR1IWlBZmxaNUU8I0FJO2VuPSg9fDZKcEI0WX1rS3Z7QjBCITtz'@;
put 'XUhjfUcufjlINEJeUHMwUHJhJUU2fUFEVWpVan1+IjFpdDd2VktGTyJfMWdQNzJgRSQ+RDk0ez5xXUE8O1RVJC5EVjdwe05mPWZWOD9ETyZodH0zYSFxeyRXRGFrP0RwSHc2OUgoeU8uSF5SWD9gOHJYVFBVNW1VKEhxVTddfDttZmIqSFo6Y2xHO0BeR1R+eTEubkk8YExHS3c+VmlHS2xffjlZ'@;
put 'MUp9UEJYMGlQNWdWOCt7elF7Q3M3VSI7ZnV1cStlWl5MW11kdEN1XXkjUl5MVEp0QnZMIkRsQFdZUD9EVjFUJGpWV3hMYkBAcm1gVCpaMUFjLkN4Tzs8cUpTI1dfUEJQe2ZDQi8pRilFR05+ZGVNZjY5dDAwOkt1QmFWZUdpeSYwdGJiRkphd1Q8S1JxJi9ZTC5zaUd2KywwTmhvNCx9bl97KUZ5'@;
put 'OEJ4fHNWYi5RWmsrYDpxTTxYcGlrcl03bHRRamhpU3dDbDBTajA1OUU/PiVWSV53QWslU2BtbzMmL3JVLDxTfm97VCo/ayk4eyRhUC4zeS99fEksR3NjN30hMT9WclgxZDRuRkJ3KFNqWVRkQUg7YXtCal5Mek1xWX4rcF07PXFeaXc5N0c2MU52IjVYTWEpfCV7bGRyPyFfcFJ9Y3Z6dSh7Sjxr'@;
put 'NSppUHcmVUJhJUtRTFJHRWgjMEFlUjc/dDR8cmVxOnVMY3xSTlc3JDkxUzJ7Q2hBPGYqWnR9UHptI0QhPC54TkQjYDE0Pj12e1c+SmQ5OXNZdl5WN2d0aVZWPDpNfWg3dHtwQ11jfWxnKkhmYCZ8SlJ0UXdwbEkpR1BIJDVXbm5jRmIhTyQjcGpvbEciRXM8fk9kXig/cFZ1aVh3KEhvMV9pS3JM'@;
put 'dUhfTHh4YFpmcnM6T3IlSGthPnFiciFlK3thWyo2JFd2N1lfeyhAJnV9OlZudGt4fExkMl5DKEclfTlMJigqK180OS8mIzpfQ3NHV35wMDBzTHR8NkJfezU9QlRrUyNsV1EyfEB9UHBUKCt+aClhe30uPSp0QyJlJng5Ok5tfW5JUj02PiMlbXszdikoKnB5U3xdSWU3U0R3TztCdDpTW2lCJXVd'@;
put 'Wn0sfjpPQz98PXhKe1NpVDkjfFcrVlcpNGc6NU1MSTdmbj9pITBVczYqNmV8SDtiRlJdb3doR2p8QHZsUitDQ2B+L24/SixYZSltdDMzUit1SCtdRnQ2Nkh2Q0UxKHl6QTpsfDd3VkNgSWBMXUR+UVh0VGtlO01AVG1DTUdnKUt+OHd3W3A2KSoyJUVmMDhkayR7Z0RDVFt3Wk9rKWR6aGdoRF97'@;
put 'Mk9uOFJJayhwSkxdU2k6a1AsKj80PSwycGZEfk9RT3lbak9wd2tzeE8sKkgpWD5JZE9OaTRqW2pYK2c4SjttNnY5YD9FMXg9RTEsaEh9SGZtP0JfazpfP3hqSV8zU0JISixTJit6ei5URlJdbT95a3dDIy8+bHwuV1FZV29vR1ZFSTB1PHN2YClkP0s5XkhCQyk4N1t8Nmx+MyM+V2Yifkg3Qzwv'@;
put 'NltTWXhSekxLeTU8czwyfjFDMm9rT2dyUkVeLGl5SWVOIyhUcjFQJk0wKk8zbDtZN0EyRkxKIUtmZzNndyF1XkdpKEZgRjtIVURobV0pdmtEK3Z0LjtmbSpNODlJSjkiNyQ7cUhEeDtxRGBVJV9ucSpQMFclR3M/RzgxfVRDNGcoLyYuNj5ISX5+JGFLdXhKe31UPTtnVjdxY1kvOUFoMHhjYFEv'@;
put 'OUtkeS9AUThCIjpAPT8uQ1d7XjEwU2shRTBXVXdaVSYqPDRSamFgWCxDeyZ3Om1oWFVMNEBxWCIwREJDSHwlMV9ua0I+XV4xTVNsPndCcjFoSyM7el0ldStSNkl5dENIWnZadDpwKjsiTWUxNnQ8cis9RiVlfF1SfTlpcFQyQyM3dz1EPiV7LGMxYD1sWTVPQ2hCbD5qUCFkbDBpYT5BI1deZFAj'@;
put 'QFJmV2hGZXl1dThvZztofGd4e1pvYWlbTHhsV1UqeGBjTCZqITl1Jm03Ji92MHkiTkpnMGk7REUhMH4/OkpoZGNHZX5AVXdbMD5UM2xdZ1UsTHw4LCY7SDomSitCWit2Q0R4Kn1TTH5oNFZQcDddJFU0XUJfbUVLXkJfdWtUJUZ7ZEVWS3JkSkpgXXZSTFAuMXxlSWowaWgkR1dfSVdHQSFEe0Zm'@;
put 'aWVwP2BbJElIKy40RzNJIkdGOjg2ZWQhej1AdHYmPGNWIzdZK3hqMC49dGs2Wl5WbEFJRHdwXVgzRkBwKjtpW281cT81VXBpU3ZSdXBKYG9ROzEob3hxSm5TX10iUV1qMWF6RzdpPGJ3R3h0fmw+cmtvRkJ6QTckNipBTl0+JSVhfj4pWkFfe2Z5Pl9ZWC9AIn06JSkuYiw1LyU1UyQhNVteQEFp'@;
put 'KjVIfj9CWFAlVGA+N1lzUUc0cFR4Mjttd2MwOjBBcXNvVyZjS0E8cDp7V1RvbnYzKWc6KFZSKUg1MmBTRT4zIVVNazFtPVJ7aUgoQXh0TyFaeThELylsfGlURG5VPCNRViowa0UieihfIjUkIUs8dTtzUG9zZ2hmdiMpR19uYjtxdlJBW25Ydl5FaWdHZWpQcEVFLHRPVj5GSCM0KWs1OnR1VkFt'@;
put 'cjg0K3M5Zi8vWns/WF1wMD1jYml0M2FFfkdwbyRqJml6IzpqVGY0T00hNC89TnJYInJpdVAxQ3gkLEYsWHAyKFZASXo/RGhLKEJTWEZeVXZZZ0pOQ3ZIKS8ka3M3Mj1MN1VkY1R4X1oiXSlgZGZlOCxrXmE0Ql07aD9YZSFZbHg7eXBvX3o9TE5iLlVaSSRiQnZuRXVgNFVsY31pSXt7K2xqfiRO'@;
put 'cylSellpeFpDbl42Rlg/KDRmTGw+KnxjRGRAaylgSSNAXmtBaUomZVZfI2okVm0rSExAUGZxYnhnKSFKJH15M1dRaV49PGkheVVxSUJDMF8vSl4uPEl9M2A/TDU1XTZJcG54KGNaXTsyaylYbH5ZaEZKVHB4IWgyZjdmLj8rfigjUGppLClpNGIkNFZ+ZlAmZ2R9fXAiMWoua09RZWY6RXpOd31d'@;
put 'IVdyd3R7T3cyL0cpYUBXXjNfQFc5ZFpWT0E7NEM+NyZJZ2l2ZU5CVEg9dEJyfURkMy87T0FZNix6USJRUFkiYEB9YFE3VWtxNHxSQyNAYUkkMC4wNi9mYTQwOkpROW1La2F+UHheZTNEW1pmT3NQLCZHYEQlTWs+fHUydUNvamNBIUdXM2BbP3ZwbTlmOkNYeiw+cFtNUTA1diopPCIqfUFrZ2dZ'@;
put 'JVUuRlZZWX0qPVB2NTNYJVhPYXAsMmFycXQ2Uns5K3ozVnw7KyljYG5leD8hNDdHUnh4QztGSUhaU1JJUX1Ud2FxXzpmVS5EdiVqV0N7dzJ3OlskYzhAS0JLRDp6PmFRbCYyOWojeipxQWZIIX5bQWJJbCltVWRUd2cpezF7SV5rQi8hbSN1WlMjTVV9TDd5MjpjXVtxO0hwbHFmZnsxPEdwWiRa'@;
put 'M01AS0wvMjtoOl5pVzRzPTN4UntBT0cwOj9aY1EhbWEuXVZjQi4hWGdmcmJfbklmVE5NTjw1dXcsK0xNVGBWJkIuZmlkY3xsWDwjKT1QSWVMU0FWUChMKCoxcCt8cGRoQHBNIip+aUwoSXxuYlNlXyFGZi8+RFNza2YqdXkrQD1SezNXZmVxTno6V31jNE4xKEJRJVFqVldOM0RXendpUCFPWypx'@;
put 'WDRDcEZwWWlDY1B+QjhIW3paJVRDJkwhdm8obi8hYykoMi59JS8rO15rWCthSDR6PzBiYlV2InA2aSllKiFpdzUkdDhyeCVzYDNoaVA/fV1vYiYvK1JSOz9Ee09ZR05DUik0XyRxeyVKc2J2Im9XN0dBW25bMSxNaiswdVphQEdFLkJkdjRlOmttXUQpMGomSGsxWDopUmJHRGM3VWBUSGBlcz8j'@;
put 'KCxmVHQ/MVdpVXFwaXcheVBfSXBdbng/JE1lKjJMXzVhfjlidURsRH5HdkZUMSMyTXNFfWJxJU0oK3dZQDNeN2ExYzpCLGwwI11BRmpHflE9UnVJcCxuVHk4UFZ+ekJNYGpZeWBjMHdwPTo8STsuRWExQGJhQm9KQm0uXmJZelFac2ksLE8+dW15WSQsSUs9OTs/XVhJQzAzZ35eYSlaYVhVKHVl'@;
put 'KjJialU2bF5hVFl4SX1OOTZxdyorWHlCJDlsO2RGWFc4T2ZlPGpTJiopY0Jwbz49IlhHX1p7Lj0oN2hWWVlgTT1Ad3orRikjMXp8cHdFek98YlJQZGYheFR1ZDBwWHJXW1pGa31tUkAiZG4xa2o8MmZ4aWBXdCkxWCpPMHtxeGJ7Uys6M3BmRn5ERUFsMUJmJWVafERtIkZSTTt2eE1wMChQeDli'@;
put 'SjlCV1MoPWUwOC8kWDpdP0lFW3VQXVllTjh4KWU6Ukl9QFZeLD0kPS4qUENkdlc1Vi5LQyR7TnkweW15LH1EbVdzQ3x9M0lTdTIqb2d4Lig4e0xLVz1meExvfCsjaiNiKElHbnBBT3pYLk45W206UXU6PkZZSnRdeEBHZkI5NG5PUGxhPWI0KjIjR302OU01WDpFckFIc3osc30pUHAwKC51djI1'@;
put 'ViM2MVNVPXx4NmljJHNNTHJmeEVbLD1ZaGdUQ1dMNE9nV0djXS82UXBdXjJiKFBbbTEzazYkKj1vW00lKF1GTC92bntQVV5HclM3TEtUK3xiPywsakNbRn4oOEl3VTM0eXBxbDplM2tjVHhiVUF2Nkw1bjtCKltlM1lJdVJhOGN8Z00rZ3B4SnBrNjQ3RDR4WTMrb3N1a3c6MiVhSyR6cnA/JmMl'@;
put 'U0RGOFZdNGxCWClzdHdGel5nP3Raak55VCFwNiVPUCEwP090ZD9Me01udyErM1c6aE9zfD1PeiNpKXp6PEI+bWhbZTMwMF5JWl1NT01OeUIhSTIwQ2ViUTVJUS5fWXUkWiwuIzIkPzt0e2ZhYHpbPXNtaXd0aiFQUUgseGIwKmsscmtYYlR7Sks6Ii83KnY1PUsjMkY7OHYpIU5BUzs9XS5ibWVG'@;
put 'XkR5Sil7cTxdZiRCJGdoRmUiPlg8L3MlYzRWd2FGcHV+cUc+OTViNyZHfU5FbWJbSXdobTd9RGUsMzNIbjF7fCQvSVRJOTBTVkokZGh1a1pUZHRbeFd6LDVRSTovRFopSWs/TyF0OVVka31MYUImbnJyZFRFXlpeNzFiJSVHYFZsPk95PT91NjsyT01FUXteNkohbisqZi5fZVlBWWB6MXV7Inwo'@;
put 'fXg5aEVsSDAvSVYoO2h3U2p+ZjI0Q1EqfCF+JWxaKz0+Vk55eX17NixZYmhWOzMsMTpsSTpLVllEI1thfiNKfSMyWVosQ1dvMlg3cTV0X2pdbTJGcFRFN1NMeH4xOjU0bTZ6JVklY2NUZGU+encqPElFfkduKVMiYXhtJSxeQzt4ZkRhJipOXiI0NkxDNkdDYTF7QipVS1BiVHJ9WHFjISwsUyQ7'@;
put 'OipIZSxufSJHYncldVsyOyY7SFR+dH1IPSVuQyQlKl9lQSpiZngoJE1LaE1NNzJHJFt5R002VyhNImw/aGt3QUlNNnZIUzw8eWprLDJtVzl+NTk3Ry5YVHtEYXE/aVI2R3FHbXpOUFBDUF5pRlBIVkpBbDczXkpVYVdCWVpETEM0fkt1RjZIXXw+TVpQNTs2I0x+PiZ8S11dIXdIaltmTDRYSDUy'@;
put 'T3s3SyV9YFY2LiVPeGx6PSVyfXN+ejZ6Vm1OJDpfeDZoVl93bzY5LzwxbSp1UyNoK3ouYXpLYWM1Sj9nN1pGemo+Yl0hM1QwTm1nIVkxQlZXMEhBMjUpUlZYNGN3aGpidzBkTyUrJXxWMWVPSSVfLDk6Z2p7cjlyT3lOcCJlNTp4ZyZxWkhfdGhKSFkhNEAzOSNtcXszbihwPSRtWDYhRShQIm1K'@;
put 'Y209dzpkSGIxS00lIVRgIiU7TmNZKnpBR2I8Wih5dHo1MWs4bkY8KjhhQG51em4mU0MkZz18eHs+X0RASyI0MiFOTHBaJHEuakRedkZaUUdXJHE1UUdXQn5WUXR7YUBmWl1RfVZ1JnBbTTFLKE19WEpQMXg6IkZ3VFclY2dxOzFJNHxaTkM8KTVNeE8lYlRabjY/WXIlWmspVSY4LH1bKnZdL0xA'@;
put 'TzEuSDpONzFZV15wRF1xWTZZVGFKYXt6Nix3aD5ncGZQPzVuVUBgMzQ9VFdVO08xLilKcGpdODp6dmcoUlJkTzNndiM0ZzohQntpJlI3KUZNXTl2WCkkcUlSMTFYNiJfSTY4KlMoQDJiVj5UYFEwT0AvYVJ0YXdqUTo6dClYSkdzJS4iKSxYeHZ3KHhTQ1VOa2RBfEthKFAsKEQsb3kydTR6TENA'@;
put 'T3xORUlxcnooUlt8JD5LR2hnSTo/d0JdJSMmcClKPDRsIWl6PEJpc2g4SiJfc2Z5WWkwRDNsX1IvV1BCOUV+c2FhWSIqZyhlLi96cWslPCpxNiUiemdUdUBffGV4T3RIRmtfXz5EcC9xZXFVSm82fF10VmVoVChlLkRmPF1PPFhoZ21UdlouTmlmZX5AMWw0UkYhQ2wsOHxCVFdLPU82VE9AVno5'@;
put 'RVUzcTV0KmgwNCJpUEMqfT4qOyl5ST5GcGM5NlU1RixSZ2pqPW5sQCIqLGE1OnhmQ3hFSyVhSSkyKWFpTVdQT3lXL0RZP11Db0htfT51WDxgdkxaN3I2d29eSyJtQ08wdHZ7Wk5SKyRvai5vS3MrP1VWNyx8OGlwZTFwQV8sJXFIOX5naldKbzEmT2EsRnowOEhye3wlKlNeTUNYXnl0bjxjKj15'@;
put 'WltdPEk0WD5fUGRWP15bLkxlOW1zT29senphck9RejQ4QyQxT2hbL0B1Rj5UJCZPaGlxTzgsVUROQFZRYTk2fXAjX29HU29TZXh6WGg3S0pmP09demJCcUxHKVYzXVBRTlpUfG1IU1lXSTIsVjwyIiN8JkJMTUwiMSZ3MCtsbzZ7TGhbY0R5aCZkaWM/VFB0UWthbWs+TyVuNlNkRnJVc0ZINUZl'@;
put 'LjBJUj1SQl19M3Z0ciwlcUAkYyVqWXhATHx9Z3NiRHloeVJlfE5DYEFvVTV3ekhfJl56MTEreCR+Zz1ZRHlIQWlQJE9DYHI/X3ViYSt9PyRWaXZ6UygmXmxmakA/O31ncWxES2NKajghZF08STBvaCJnZU5NVVlTajhCaXpdWVhDYEtxWzxGS1s6SjhBYSt9dT1BUFBVbDdSZWgwdXFBJUM7d0BL'@;
put 'cWo4MVBDYERvMnp3ejA5QHBWd0pVLFY1fjgwbm99V3Y4KkZ9b1BQclorWCpRLGUuUFpnbWY/VkhtZTxMXz4wJlk+aCohKTopcDFZekMzOWEjamU7IktDJW02Knw9U0Y9KTtddmZ+M0VVcmN0bXYqSH5zXSkybTY+Z1J5dVZdZjlfaisoOHp6VEIqJXNTS2BfemMrKCtqSVZNI0g/SCJaMHxfXTZy'@;
put 'OGNtS00zJTVuP0h6azd4Xj8pS0kmTkZxaDNRWnMpTzJZVVNhYXhSem84UjNJUGpMI2RZcWE5OjBrb2ldTEMiIS5rMVNuPVFHenhBSFZ2T0I7eURVWzxaakdsekgmYEQhK1g1ISZnSSlINUIkdz9XQjd2d2dvKzp4PUx6RlFnbCMiRm15OUZdfSpIJEVIMkohI1FEOEZ1TFkxPUk6eGYuZkR5fmNt'@;
put 'Yzc1IkZDMmRgUyJtKywsO2YuXzpfb1loYnxYfVBPYCpaTWE+SEsqTX1eQz0pd09HX2F+UD4xRDlJW089SXJgWjFDWCYvcmZCO3pEQUxuYGJ+X3l1M1p2UVllKyF5VkZ8JlFnV0doaiJkKHdKWUYkT2tWXnJadn1LPjwsU0ZzODhbeFJ1SzBJb2cvU2JHb3RgcDxmI3Y3cFFNQno/b1N3fV9JRz12'@;
put 'V0lbZX1qdHQrKn1ldUAvSCxkZ3Z6PEkhQzEkQCYqQ3EpdVlpUHs3SD1xeVlGbmIjQldTOGFxRFYpck9kP086bDR4VHIzVyh+eXVvNj1YWEokR0NEIVFBe3QzJVBsdjRzNHBdRztaaFFJNSJqQG8/UFM7V2laNSJMKjVZUTxNTio0UVshXzF9P3RnRm5BTV1gNXtvOWs5anQ4byJvNlNAO309TXJw'@;
put 'aDUmcjk7QDN+Z1ltSjVNQDBhWjxbQU94dkBqQ3ByfFFoOXNiI3JJVT1BRzNPM2drMURWJDtnNls9WXlscismSyE5dWlSMElaNmFIX3cqamEvfGJNcyYsPCZDS2tmYEl7bkRQOU09UnVKVk9mXUJPSiFweWl8IX5HQjtDOSY7JXxJeUgkOXxNJnEzRiM4PXZIdXo9X2hAJE1KYT9pfCU1USNiK2dz'@;
put 'QmA0b04mVD10d2cwYHBDUSJZW0socHI9WF1jMk1PUnV6MWw+eXIqZUYzW11Ab1E/OGkueXZ6fnkrcjU/eDhlXVA3c3g4eWV4N0ZLcXBheloxWjE6UzBEZCFZeE9jbHNwZjVrb0J6Y3MhO2Z7WGNVSUJMUG52eTpycn10c3teSWlsbitgZ29bRHV0XlcvRk43R2o3ZW4qdiU3Olh3X0YwfnpIWEM9'@;
put 'dk0leHFvTlpMMV85Sk0iejFHcn5jVVJic0QvPDFfUnN0YWp8aV5IOytWbGhGblg4fEclbTNzdVF6fEYoVUxqKkgrSTxEZCxdSi80QnB8JEpPJjVgcFtBRXQ8KHEidVIzSTpoR1lWRXRwfUdFWlAzQmQ3ZFVmOnpGVTwsK0gsSzFSTTUidXx0TE8xS2FVQWxiY1JVQypNVW0qP0hgQ1RZUjA7elYu'@;
put 'cz5ZfWpWJC4sRDNoQyxgcih7RWZFVEJCMkw5aXpFWDlucUd2ZiFKKiwrUSt4ekg2PTluTmJsezpHRT5qInkuRTE6bXdMbzRPOjl9P0BjcCxMUGcqXUAvISQoezRBbyMldFprZy8+fHYsZyZCVGBNMUhrWjtjNCx2JlQ8RXopXSw4TWZEfnQkZFJpWjBpcDhQd3omQlNvX35EQjxOSk03VTNHWGA8'@;
put 'SUN0cSlsI2RRdUtzRV51X2hvNylVQV5GeU4pW3lvYHEwR3lIZlRQIjwwNDl4RGRBNnl7cC5bNE0/SVEsRFNGKUVwN3szMU9lM1ptYDlKNC8hTDd7KlRuMT9LJSU1UGhnQFZ3JEQqfE16cDg2SlY3djpNKUFhOlFYP3pAVUlAeUR4R1ZYS3k+cSxZfX5mJmp7NXorPl8pNFJmI2lrMllEYjBMUCpF'@;
put 'dntjNn4lX3s2O0JzTFA6UCZEOTlwYUFeV3ZedHpGTCsmRSMwa0QwR0sscGl0cDAyXjBjVCopSi5iS0NYdzA0WFFqTCFRfC59QWpjMHJKeThgLGREQ2MyLnxFaGsrcTEpO2t8eVQrRGhKbU1QYV8vL243amNuWVt3VGVBIUJLSVk0NDBoIi5Rc2ZrU1sqaDB9WHB9MHpQVjVGallJJDw/RE9eTyku'@;
put 'OkQhQD1PaG5RbyouLm5neW1TNlV1On5MYSlIUmVtUkMhUCtbdGJFVnYxejB6Zld1PlpDalk5W2llQ2YoUHU5SGhdV2lKO0Jfe0o9KGZzRXleOE9ZUGJSd2t+Q007YnJyMi5hOm5ycDA2OGYzdixyPH04KiRJOXIyaDJwSHdOOFlBdEVSQS9KTVpbP3Rha2s6KURdeV9GOCJDUSM4eWdWTkN7UHNL'@;
put 'M2wvPlV2TyFiOWR8SFdgTyE6TWkjX3NNcFhpZU5uN1BLTHtpYF9jKy8pWnBEZHpMOCVgIntdVzNiLFssfmwxZWskfmhvWFJVSGgvKnVwNjo+ZS9bRmk1ND15bDgiW1cmPDEpVl9MbW8/d1N9O2x8YGJGUEo6bCx3TkI6eXwheVczWEFZXllwR3F9KyhFM0EmYj4xKjJXe3prUlU3ImwzSEclK0x3'@;
put 'TVhYI35KSFpDOytbPTtZSyV0MnA/eFJdT3t0JjQld0woLjBbVzMmW15MezI9Yj8laUNwWGMmbm84KkBZdV9RNFdFaSZXZyVGTFJfNjEifUB4KXBMQCVyK3lLM0FaVCx3UDNILFNYVGFKNHVTPD95Rjl6SEcyWEgmOm8rXV17ZT9feylueSllMToiaHJ4PVJ4SkM8bVd6UHRROURhOEN9WVlaVGt6'@;
put 'SmghVy52emJYUkFbUlZaQ2V8WD5HSEtJd2dqVFJISFpJOEs+TSp9eC9LXjkwUGBuTzcmIjR6YmVCfVhue3UleXJFKHVaMHFjTllwQzgsUmA9cCRATktISD5UbmhOWWtxa3FXR3pAO19sMWYsPkdYakwhcTRbZCIoOjNwY0ptLlZBPFVQfF5xQkJePDtzfnR2YGdpeDc1U0xqOHhVbVs/dUVkUUBy'@;
put 'LGlhezljcCVII2BwaCMwbElDMGAhLixjRkpoNDs+b3BiR1d5L3FKcER1fDYsX05jOV41LGU6SyRqRUkkeXFgSzhiaUdHY2lSdiU5RXx1JUs7aT1XRSMpJjdVdm5YK0A5ayJoTXBZfXZ1MztSZDo3YlY4V3E+ZzBOeExHWTBfSkE1OWNKbzIoNEsvP0t8QXxFRUtKNlojIV4qNF9BWSJnWlJGdylW'@;
put 'ZDUieWMwIkp5Wlt4LiRdSlB7ZHdTJlFEYDpgWm9vTHhNWUJoW15Qbi8kZWVbPUNeNm44cjFVWkk9IV8pL2pVZGFJMFllW35VPFN+Kyola0hOYCx4KVZYeWlmbmA0KTckNSljJDl+VVBmSnpnRT09ZkEqMH1lRyNNe0ArPCZjWkw3emkrMH0zR1hLRTR9RjNJc0xHV2pFUCRgLFVCIisoOVNhVChs'@;
put 'XysrSHZbfmhqQiouVkF9PyQzTTlAXlZ7KH5MVDteRG03TTROWnp3InA2bz1EXkMkI1NodS4wYXlDaC4sNiUpb3hwJUo9JjpQLyNkOlkicTpUUXUrZjRRNzN4ZWclRzZGeEsyZVNaJElQUjRCaWowdlhCQ30vb2A+O1R0JmcsP2BIelU+QEROWTFYaygjXlp4P0FtUkAwYTZZfm9beWxgPy9sb1BA'@;
put 'dU1TVVhXbCVDdWtCLHwuZCQ/U2hRZ0hvWmdHKVVoR0k7Xmgoc1FRbC52MCRLdVkqTVFDaU95fVksVFZYSndbaEE6fVJhTmZHRkp6Rmp5dns8LEFIaz1RREQ/RSU8UUdXVSVVaDhHaz1bMmImUChJOG9ZSF53YiZkdU5RLlAweFJETFRJJWhHV0dOITV2KXdLfUB+a3B4Qz87ZkxfS0ZhSVkza0lI'@;
put 'MyQvLmp3Tn56Mn1kUXo/aCQoP1V3OEg/NGVpJjBqYTBJfUM5PmlhRENPfHFzOzA9SWhNQ1BnfFZYQW53RURDZmtTJll9X09jfSRLJkxuYyNEQl44VG42Qmc6ITZ2JEtQN0k8R1QkUz1pPzR+JXdJOElLbEdlZjtVLztqfm9gbWB0Tmg/aHVPUmoxOy5RMllycCFqSVIyUmQ5VCY3eTgkVisvM3Rq'@;
put 'TUhgRClNdlopZ0IxZDRKQzNrblYkM1lhJT91SThAeCIydSwsQnpiSCojeWlSNzI4KzNib2thaGNGTXQuRCl4P3dPdDN5QzksQVIyUDhpQ0hLeFBvU0U7eH1QZ115fUQsK2h+dlJqa2chSkJya29gKVQkWHksLCosVk02LnkwVUl7WyZ8L21LKkBNUzFYYWxQUzF8OmIvcH57OjhXdk9YQHN2aHE/'@;
put 'TC41fVp+LzByIlovclJRaXdpNUBodnRvIWlbKkw2Snp6by43XlVdbXJqYmlBfWcxc3wsLytWYWx2STpCOmlSRzojLm5mIlZ4LmpSdUowdlo9d34ye2lJSDlEJHxJekM0fn5wRjY9LzQyTXU6W01kP0RvUi9ZL3FlWCshTUBSan1wZmhnVE1nSEB1bXA6RzZIOVR1KXkyNVpCKnF1fHNyMDA0PklS'@;
put 'VmppUmIuMn5KUEQpJktIbmBNRjtZaTxYOytGcjVnJGN5P1t6V0lJPEw3cHFPYUV1VHZsQHJDTU9UV2NpSVFyWHJYSSNbWmsuVWRjMElJe3A8RkBoWDdOIVpvMTpKNylUREJNaH4qSm03MjpLeW06O3ZARHlUb11wLjBpaExDVFdNd01mb1omTGw6KT0zaXJ0LD96cGRRImd9L1lpWCEvKjN+PWAo'@;
put 'PWElMDB9bG8lSm1IaXAmJXxTViVRZEVqWXdpOixjVmdXOWpmTG4/O0hSaUE/SyU1N2ovRDgkZ0MrJFVjNGJPdGlOQFV1P2pJXkA/NiVFfSY7Y0xvOU5hJSVZLmRVZmloKGZSdzBqbEJmZSFmaGZpVDtiSUh7KWlqS3dweS9TUjBJPkxfIVplWGVoVCglaj8lZSl9KyZhaVVeWmxsY1ZqVFd5NEl1'@;
put 'MX0vSkd1VSEhOngoLDpLUUw8TUNpWnE/O3AiPUk9az9kRSJCfEVFLH14KEw+aDl6X0omdCVfIWojISwxI0J9e34lYXI0dDdueGBHaFVhWXc1NDB1NlRFPF1eZUtHbjZRMCprQHhPKWtTR2FefihOdn5URFVdQmdhSnY7R109YVE/bjR8VV5fLiVlQE4uJEg2KEopRlF2R2RnZjIpNyNIdmd6NFBp'@;
put 'RGt9QSFHKEsueUd3UiNIc3VKPlI2dDpPYCFPQWl9cnY3c0ZLKj9ma2x9SUxpe3VKPH1lOzN+SnIiUDVMQ35tJEc5cFhlTzcvU1JiMz12MnA5fEJQV0Z8cnlKaHhRXywoZ1JaIiQ4MWxLbn1jPStlaHFZalp2XTF0YDNEZ3ppJmleQy98Ki8rYUdseik4L1U8eVkqJi4rYGoqbDw5SEk0eCZDO1c6'@;
put 'VWhtQDpuJTptNnoqL1s2VmVZfl1fdH4wZTYufWpwOz4mLzFsI3M7PjF3czNFVnRmTkNlaW1KdWNGeiJacWhSTkBtKXE0dltsUyZ0SDBveHZ+RGBdYmAiaW5+PCJ6OVkmNUwhfFN3aFkvR34lWyoldH5hXXUrJmdxXkc3Jm43N206b3I0VmZdUE44d1E5MDZWfUMwSX5EMUQrdmspV3UoP2RFS04p'@;
put 'TWZqLjA4dHUra1JXcTtbLE19On0veUZsaUkzQWdZfXRmYE43MT0jaj1rRUtMTipaMWYsNUk8X2BtJEJ1OXUlMD05PGV4WXV9aUlpbl1LYHFianV0d1RpL19yfHw+KEZiayFIRW5TUGl5PG5DUHJSM0hEYj9eUihDQl1abm9kT0JHZT14MVJNNDd1YnRIa3pXbjFJNyk3bnR7Omc8cDBCdFRhLClt'@;
put 'KVYodDZpQDRqOGFpWCR7dXNwaHdleS8zS1gpO0QrLlZwSDtRbjZBdV16Q0UhY1BwSEgyM2x6ejJHTXB2b0M7UXtoOVVTb21gUjxmXWlTQWlFUkpOOUQpMX5EP0ZeY0hqekg/N1VoNytkbExld3tuQ3hNPDsmX2V0WCo6KHpoJldyV2hYVlJ9MGg2cF51ImN1K2BucWBXbz5maDxhMFhWSk8oS0VY'@;
put 'fD1iQztaSXQsdnlPVGpMO1RZRUBCfUJZRXpVdXt5W0UjaGBsY1tdJDh1NHl1NyQoKWYlcWk7PTE/NVYwUzpLLmZBPlBtP24xRzNPKlAkLnk/JHlDd09lZSIxfUtSSltrVTddMzNKMDRDWn13R31CKSR4OEdVMCV+QV9dTUc5Ukw3UGZ2XiNFaHU+QkJESVlKPTZpfk4xXntlNC9xZXt1L0ZzaSxX'@;
put 'cl9YTkEwU30zSmt7W2deRH4oaUJzYWxDJEhlfG9OZXt7NitCX2xIVHJ3UkZCQ113amFTfElXUHZVPFAzPXlxZzBNSmRoTFV5SjtIO0spZmA7YiFPR2F0TCF8KVlIO0tGdTBeMWJuYl4yOEZoOTA1dnppfmJWZFRqb15EdXloQWF7emlYfnV5aDlEM0guUXBpNyZVTzchc1J8aDR6IiooTFBnVUBY'@;
put 'USNKZHsyXV1XXyNlKi8/Nk01ZklLP0ZFIXR5M28mIks6a287N3x4dl5xaSFeYjJHaHtwT1IkMEA2MXNtdnwhJmkoUCZnKFBYJmgyIyxMaHd6dWxBS2tacSVtSFI1O0dObWsxLnRlZHF0TUlRKn0kck9hdzVHZUo0ekk6Mi8uTUlBKkIueEFBS083bmJYYSp8eFpRIW5nLlNIXlg4OEp6Q09aRUF1'@;
put 'OUQ6RiJMQ0FBQUFBQUFBQUMiQ2gzbGt8WDlMaEQ1ZDBmNSs8IkhqfXhOc2t3MGowIUcmTSNZKnRPQChpS0hkV20uQFkkM006OjkmazY1PC47U195Zy9rfEhCOEpfYWN0QlZYIVptcj8yKS49YXZYPy9Wc01HPUhpODAkV2l0KEZ3X0JQYGhQVT1YIixKe2N0Sz4yazkvVT9fMzthXUtSRmdGR216'@;
put 'OnReTiswRk5wTVU4ajtQMEZTS2NaNz5pMmxYVVtGMHVdKCE5bTAmKDxGe3YyT2IodyRNeThDNztzdkN0IT1SSy9ObGFedkcyUUlrVmIrSkZeNjU8Wz5LLyI2MkxEIUBaZSpkPVBfcSUvMTpzWmU6Q1NRZW1ifE1ldSM2OE9hI1Iue3tKTixJUjVQTFtbcDlGMmgkQHlyVTh4fSgkSFtEbk93S3l3'@;
put 'ZlhhSC5vSUNCOXNnfHQmeGlxWG5wQ0NyZn5TQEZleUJPTT0xXnNHN0lVNUxfeCZJa1tfdWgwX1RnRDUlIi9IZ0dDTEVEUkwiVGJWOm40aUdNNzQsK0p5c2RMcVlndjBkRWMlPFB+dTFOLywyMUspPG05ZEQva1F2UXF7OUxTKG8+eUVpQX5IVzI7cUhUdDdXciJeKHg0KEVrUz5JajU/aERqTXk0'@;
put 'a0MhIjxWSUJfQFRQUHkqflV+aCpqKk1wemspemg7KW1gIW51L0JXYDJienhKLGIzc1ZmM1loK3h0UChtM3FlcXd6ZVszMlBqPHEkWXFbW3ldNy4+W2I/dTVCLEZvSEpER01hO2lqQXViUTVTSlFJTHMwXUBAc3ZzU2wve0FFalJHZTFzRWt0djliNUtCSiJ5TGIhQllteF59RShMLlgxIUYvQ20w'@;
put 'NS9zOj89UHdmOkN2ZXZgLz5TN1cvb31YQCZsJCYoS0NPc14uKWJLNlFvU2F7ZDtbPHwyZT84Ujh1OmhiLGdJYFpDYSs8SjRgRzJ5clUjR3J2eDh4bit5XmBNQzA3ZFJCbyMzTlU9IXUzcmN2S2lyMHBqfEUkejtle3VEcTdyRX58dCZESTIma00kdlUpSSozX15OX1UhcXVsZDpbcy5De0dvfmg9'@;
put 'eEhHKkNhO2RsVDw9MFhuNzpZSVZpTHRzUF0rajBfRnAzZHNkRG8jUD9JYVAwdW5MNDUodllpRjVFLn5KQCQoZTZtXWA1RFVtT0c6ZCRWNWswNFBWQGU/WzNoLkpnRXJgcW57X3tGfWskN04hKVdwPHpoYHZEWEIpJHxORCpgOkE9LFkmJiZdb2ddJE5bL19RK0YwaVRZMlVqaFVEMWcsZk5NZGRe'@;
put 'RStUPEZXWmlaPThNTilORyFUZUdoPmtPPl57fFl7S3JhMnF7VlpocE97VS4hNV47JEUqLEMzUmVkVyMoVXo8ZDpAVjlXaHFrS1pGaShPJjx8cExiSFlafmN0KW4jdTx+TTw+fHN7NW5pPnNeb058bENAY10pelRpQWtBS0pqNm8mLlhRJkQyOyl1OFssWzV8X29JIUJ2VzJbVFkwKl4rcT9vcTNV'@;
put 'SCMse0lHdTZ2LjowKEN1WkN7KGg4Y2twWzMlYXxrMDEiV2hmUylxbXVvN1NySlFwcnROOmsydHhafTZCdjxdRkthNTtDYWd0X0wlYiZeQ2smfFBgPVQzSjxHSTczdTh2PSlbblI0Y2RbbCRELl5sM1ZnfHlDJEJGPiw4LGdQVD98PENfXXdjbV18SmxtbX1ecDAqSVQ0UD9dPC9UZSlCYn1GUlto'@;
put 'SEZ8VUJsPD9BRjddR20pUmdBZWgqM34pclUuc3F0YnY8M3E7K2IyXj1JL3NBaHRfOzNAKH1TTkooRXVvO35kLm0kXiRsVlpdfTI4KjBNQnprbzNULztFMzxJez0yV0gwOl03MGlSSl1gXWJIKXkqPTMwe3k3SzdrZHFkWWYzejBQUmk3JUJGSFFiUnxtaUNHTiQpIlZjIjgvLHsyVG97X11AX2VU'@;
put 'VithWl5Ac1YleXhpZjU2TFpnMWd2SGMqfmhDejcsfSJWZmVkUDZDODJgR0p0fThiPUwoMjZRVXklfV9UMj86ej1dXTA5P3dsM29tUVZ6Wj0lVS90WywwP2E0RHJtZiVKfWQ2OWp8JmlaInpVPS9kUWYkJkssSCNONiVNUTMsYVRdKCpOZXdFfCJuP1hgTEcrPExUK1E2eHtCLEJJNzJdeSpPN1Qr'@;
put 'YG5kPzAoKzBQRjZkMDh1X1I1YnBgPnQsO0ksfmsra1IqMFg5KF1mRiI3XkIhbDhgfXwralZWMWM2Sj1dT1pmXlQ5Z0pjMk5COWtxaUU3dDZeLDIrIXUqOFpLbDxYZmgvQWNWU0hjdzhBLjBQUTxFWztQI2RMZlJ5KXJUcmwiNTp3PXtjTFhkJU9dNDw+S0hAMXImMzY1MWdkN2BLcWZCNnRkMnNE'@;
put 'YzNgLl4jSV9pV08sQ1NLcEhyeTskV3UkMT9MW0h1NUI0fT0+NngmUkZMPSFNQDhoR2UkbUdOQDU8VGkhfHQwfGZQWk58IX5OKHNUXiQ8dyVGU11hPiFWOjVqMkthQE8rRXsqeDFKK1FbL1JUOjlFcnBvTFlBZkc8JihJYj95LzNMJmU8TUdtXVVdalckRX0oTkskXlBOcHVoRD1xW3xzIlNsYG0/'@;
put 'QEAiUkUvNm4qVTNRUVZLQHUkd290SnBYRSkvL3s0Jl0yM1ZZeGMoflg+Q0Ymbk80cW55PypENU4vQGFAUXxZYTcxcCldZzl6WmxjL2xdOUhRLlF1ZGkpcmhGaz94TlI8JTR0RndIJGJrY3M/OEl0NGRuUHZnLjZZZjhKWTxgKks6V0w2bmpuNF5lOiE2P0dScnAjZkZWelZGN3RlV19qZnBuYT1X'@;
put 'bSU/fW85RH1iS1Vqd0VOb3RTNiN+M3l3LmtqWSRqOz88R2RCTiZfSD8iL3dLTWNlKldkfWwlNGU8P1lvRDBndSNwKHo+VVYzdHxCeWoyI1A/YXEvJGZjRG46anFBW2RYOmIpSjNqXjZCd2NOITddU29jZ0tpMkxqMiNgQzdGXjBEeTJpcEsoTkNQMHs+QnRlTyNXV29nbTwsPU48bUZ7JU48P3Jv'@;
put 'VkZlWWthezlGQEg9I2JYPztsSnUkMSJsVkJ4UV45b2ZoTCtIS2RZRUcpJiZ3VmFXQTk2TE5sSlV0dXA8a09zMjtTOW1qMnpZVG9eUnVAaF1tKGdFJXYjZXVCJSkuQlFpblAkUGNUan5VJWlqJi40UjUwImoqRnAzWU13OXl0aXl6IXFEdylhYiVJNzY6a0hvNTV2MV0haVZndWNENkc1di4sNVtg'@;
put 'cy52P2t9PVM3anp5V1FTR1NwNjpRJGhtY3A9QEIpR0xiMSpFVHlAelsxfSp3YTsoT2Q+NEc5U3JALmIlIU91fjplIklVMlVUMHRDZV5TUzxFW2k8QHx7TTt4LCpuTzN6QWJpWjZgK303T0Z2RSg9MlkmSUpAU3N1KVdJcSQyIiQxIXhBSDYrKi9IUzN+TDc9Lz4jejdkalVWYy47Q0NzLF16VCxd'@;
put 'RGoxJTtoWDZOMz9CdEZZbyJhb09QU0NidzBQQ11NREhNaHx9ZEYofnpxY1U8cjFgbjtuQF5ZZTl1IVk0USRUPzUoSFpEa3hCPSs0T2JUQF8rS2NoZXVyLElmcVJFVFMmQzkjZ0dyMm5IIyxFeylVKlVwPV94QE5ANlRNajFvcEdrOHtSO3liI3hxTVJ+a1ZSI08yel5ZaSZtPH5EaG50RF4uVGoz'@;
put 'WT12VTxgQjZTdXVKKjN5aj9jWzVRPiYiXy9wfkg0IlY/QSRFe0hAYlZhXUA9SWJ9fVFjM2VBSl58KFh0YnlRUHhCIVRGR1U4Tl5rSUMrOnJMb2k7e2xYUCxudE9CdVV+WUU0Rkl8SkF7YnhXSlhrdn1TY051aGV1aztUSl5nUXNiU0o9YFhQXTBnfjhKbUp8Wj5leyM4JHslaX1sVG0qVVUhbns6'@;
put 'VngoQ2UxYyxsUHlMQGFwcG48bGpPJXY0cEpfNCtLdTVXQ1k5fkNJVHFddmd0VFhlZTE4JC49dHo8QHpfO1YrLHdgOEpANHNeY08xW3NIZmRQVnI5MkcpLFdFOyxCNXlCZ11CM3A8NDBdb35PMUVmdERrTSY6XzM3TVd6Z0dwPztNVk1DTGh7UHYrT1ROa1FaO2VdVUhiSEw8SXkoL2ApYFluPHtr'@;
put 'OiZ3bFQ9OHJ1cEdEPVloTXdzekZXIltbME9QImhKI1FeXXBJPWVdVyRLI1VNSDB2bFVVdCxmXXtGKyMqPFNlcVVDZkxvNyY/an59VTdhPkRhYjNuM2tuclFXR29JK11DaiJFPCM2KT51YV0wbnh0IlVjTTgjRFdJRHBabH07dXVbMDVqSk1RRCtoLkkqdCF0fFhSfURudWhkKTBgPE9wdD57bUIr'@;
put 'IjAwV0MwPXlRUjYxUXNzfVEza15wTCZLfFZVWUpyN3w1R0x8aFQoY2Y6ODRrVEFwOUUxczRqOzFSOEtkO1p4entoT3hhUEM4Q1E6JXBfNTNbP1RARFg2dDt3VDVnYno3QXpfe0EhT0tQMGo8SVFIVkREPi4sWVUpXUxXLiFuSjVpbXFKOClORWs0Y298aCZDRylrcCUiTjRmdWFhR2RvJTMpQWpf'@;
put 'bCg6ViFTSzRFOSZ5cTo0a2s0OF8qYGsxNWFzZWtRRzlNYCl2USFOMzQiPzhiaVZ7RWU2byJEXm1QSEY8V0AraTVFX2IudmVfUXF0UlVISmwvfWJxYVVVcCQ1eGdbVHZHLlt7V1AiU0BtRG9gPi5nIWpQfGtQckJ1eUlHIXxIL0JJe3AzZ3kkaXY1UlRzIXR1Snxddzg4X1RuX1U9aH5iImNJKTBo'@;
put 'O1tZW1EzbipbZzU9KFtRN0dOZXloQUNVMkU+RV59UEg4MVJvKmdRIy8lKT1AfGRMU3I7NzUrP0ZLQlUlRDFQU0A0KXVPJEQ9U2NKSzlLZ2VdXXQ9NVsxXlIxazU6cCE1Ild2aCV6PVh8aCNAJHAydThCb3ElQCM8Sng0KT5eKGAsanMoey9HO1FPZ2MpXlhOW10hTndsOn1TbCE5JXsxW2ovclFU'@;
put 'VCx0dHdZczY3USt6ZGEhZlNTe3JlamxmN1IoPzxeaXNRaW1qb1d7Z1VEdGp7QGBrbHcxQilTe3dtX0gwPGRAYn5yK11pTCMpak5OPnJ7b3IrU3NgTTF6YiwrZHh8MkRxRloxSXskQXkkcGspRVczKUoudzs6KVVpJVlpe2FIM3Z3IywxKVJRais0MFgrX0VORV97UCsyc3IvdjZQXiV3WkUwU11B'@;
put 'Tkg6bTdWfn5FTzkkJDErVFpeW3k2Uz4iTFNoMkRgQ3pwRzdFKlZCTUxZMlhRKjphVWA3bD0wU1BkW3A6aytbS2hsSUk1SWQmI10vJlRmKUdpTTV7eXNNSFVrT213emx3bkhufVZnRGtVRmk0YFlQSnpwV0hOSD1ONHx3UWY6Zzp9R35hJTg2Xm5zOHwkaU9YSTpTRms3anYiS3djPHk7IWJ6JFdm'@;
put 'N0c3NVttXz9MYlo0NEdUd1t7RnIqaSVtdSxjY2t3KEp3ZlM9NFQ1MyQoYSp1MDtvdFF5KC8uQEtyaz8rb2BULm9ya2UyJDs2Z3g4N1smM3Y2QWlVeE1mPWYjT2thXkViMjpoJU9ZRGpWamVtYk9WfCE4S3ZtTHhLMiFDaFJfMmR9KDJsT0pyRjQ9YCowYzdFU0NhQHQpKEAzPjY4OGZFT0hVXVlX'@;
put 'ZEk7R04pL2NNZitCQHFYRXQ4ZXFWeW4xam01YkBkfSkhIXNGVTIzMnlqbTg+THY2O1RkVmwhRTpGOyY7ITxWJG1vSms4LmBCeUVRSE15OnAuKzRRJGt6Jlo8WSUvSCRjU0N6XVBQaWJdWW1XJn5rUC5QPlUyZE9dTjxaMShAfWI6JHtXa3EmMWNyP3ZOLGwzZiklc3tJMH5dUm9CP1NvRjlGO29k'@;
put 'X1A3Slg0USpQKThuPCxpP1o8WzwkKlV6RyNPM1V+Lld5UmN8ZXJIW3RLVCF0RHNRNnNaSyx8aSRHTD8sbW1EPzFMbDI1KGhSc3NRU1hSX19nTUBNV30+dD5vcjQhcEZFaWpWeSxaUXs7TGVzdH1bPlt1aEomL31IUmN+KlV5XTh4W05+JG9iWFFxPWUmP2hNIkdmKSt3bWchPDd6WXtjbUpOOHB8'@;
put 'PzJAZypoZjhBNyI2WDJESnRQOFBzfVs6Oy82SHo9WH17eGtlQndoMjZ9d35+RD5ZZn51Oyh8SG9kJDh2ZCRpKXtGVnpgeVkhVHA6RjNtQEgyWmBaSVlRNno5UzhIdHFddEpiO2AkakxKVTpHNWU7LkMsLHZtM2hhP0A+b0k+Ti85cF59biY9X2BzcGoqdGVLYmViTXhPKCpUWURnLDhFXTE0ajZr'@;
put 'LjpWYlpPeWNdLF4sJCJyQDtPWzA2Qkg6NzBne3NnKD9GWjdubS9nM2x7bXEzNTE2YTYsaHEpKDwobGYwUz0vJFomdiwpSXlSTEBZfmlFZ1IiaTJwfHNZMjQrajYrKnFLZlJoIyF+NSFdZGpGT10/PnBOfHhWWSwlPklFbiwpKHJnbXV2VlJmIUx5Mj9WQCpoRSZrM25+dykoRnVxeSFUU25QUXJb'@;
put 'Ni5OSGdea1NAbUlZPDJCR3k/fWU7QChCTTZDRUZLSWZ7cUFMfGQybG1Fai5rQHooYEtPaytIRFRkLmZkP34+V0E9KH5HdlpISHVKOT8rdlYpckJTLEExZm8zODRzLzVdPDled25VZlVBY2wwa25Aa3N7X3B7VHFPfWl2OD8wNnpgRUtPXWlzcUpMQ2F6LCQwUHlbVXQqVjpxZ3dGZ0IvYys8WGM6'@;
put 'fEBART11XWZDe303O3t0fDA+Rmp7MXEqaywoI3NaYyRzN11+UjFiQGhpNHB+PGJQbFcoQ34rYFZtbmI+dDxDYkZvPlZIbk43MkpbMTomV09YcWp2XV1kay98P088b2gvR1ZDdFZaVl1XcXw+O3U/MEJQMnBCWms8d1pFNk14VihPc141aEc7RW97UiwlaFtJbmIzRzJpS2F3OGdkajJ4Y0VWempF'@;
put 'RkdacDlCIm0qaUEhMGttPD5pNmQkUE1EJk5kZCF9Xy5vM0BJPj5kOWlAZFlVSCxGKTBdWSFHZH12NFolWmFQPy99JEhVLz5OIkI8QiYuaTxjd0sqLCxEWW9Fd3k8JGkzSWE/X0dZdlR9M150Jj5rZDFJX0JodDwwenkuZnpxWG5sQCJrSTckI3YyKVAqIUV6YkopUk0/Oip2IUldbWtrejImPkZN'@;
put 'ZV9+fSN1dXAkJkxrLkhkQUxYVUMvNXR0Tk9tclgkUmk3MWVMfTBkZUIjZkMqZzQiPUVKX3JDZHg8LE1KYzxAVDA3VihqNW5jNXZfL2B0RnA7a1lwdHMuMnhQM0EzQnBtKnpMT29HSCZwdXU9e197PlFqPi8kKiF8bGZ6UylNQkxyeiZpYmlebjRKMTYxY21fPTslfkxXL18hfm9pXUM3XWBbcFMk'@;
put 'Qkl6UFk6XzwmRiVvJFBGKi9GS3sxeD1jfUhJIkkjPlJ5KipjSWRDWDwrPCY8OWgofkJLUSQyUXIxKmQ8dntTWjA6N1l+ZXxAdTZuI2NKP0ZFVFpLO3s1cFk4TGNEXjRmLy8hWEhFUDA4cThSaGhTYkg6UUV1UjNLdXgmKF1PbzVhN0ZyeVhYMU83a3I9JHVyIVI2aTxfbmdpKCQoYz0yYFhbI2ZV'@;
put 'dz9xKktiN05PSGQmO1Ire25DU3Q/ZU9daU87Wkddamg3KjxqdEdlaF9DQnEyRTlFamY1I2IyblhmWUpjIjh3MTUiMWFJU18uPjBWJjlzL3s+XTp9fmY2cTExVVBuMnAjdH5mLC5YeyksLzIhKWttWU5XUHU4KjgyTiNPLnNtPiRCQHApQSpPeWh2V2c2WlhxSDUjXytDQVBKTzRXVlZ1STVqTGZA'@;
put 'bV5jUy5QUSJTVVZ2TUV4TExablp7QnJvYSkwfW5waXYoVGdKVk49bXZ6SC8+JGBdaFoyLl5GQT1GTnhlXWNKQkRiZDBmbVFgcih5dihfJURgandYTlYvelpHLHxSO002U2IsVE4vfD5dTkVKUHUvN3ZUdis3RiEoaGdTRjpedyg5TD8lX1MucXk0IWBLRSJ3TDQvbj9fNnEoa2AwJF9LJG8sKl9p'@;
put 'aXArVyJTbVokNTR3NlY2Qk1oQj1lNElCKEBFJVk4Tk44VEVNW3I4IyFXXzFYUiMsTVtocH5Rdzpda2RgdX1rM15EQyMwYTJ4N1Zzb1tlPFlVfVZQcVBtKSk6Wk9qIV5JbyVvcHlKaEI2YE5aP2Q5I2xrZEEsRkMuOiJaZ1gwUn1YWl5FJU4wJSMuI0JSdlA/dEV4MDI1WT1TQl1PRlF2VkRBRD07'@;
put 'YX52Zks9TGt0bWF7anJKRDVobUBjTUVCPXNsPn4yPllEY0EpM2g7MDJvIjY5QDxsNz9QI1UmUksuaUlXWENWaGwuSFB9VlM5Qi5CO0FCUl5EOSpNMGkhcUlIc1p0dStEXjFxU1l5XiVQRH1qU0BfRUJ+OXxXST1DeFBieUFEN1tdbnhkLHNCcDdgUXhwRGdOL3BQXWdMfnlTXTZCYWdwYkpRWCpf'@;
put 'MDpMdXQlMC8kY1k4cHdJYEJBIVE/ezd8bGNwLkRdJmM7KDRSSShrKVNMai9bKzZ7TUZmNX1iVF9JUkhwX2gsZCVMZmtzYGkuNX1qS0opYUxLRHtbciZWQ3xwfXxBKGhVJXMpaT92OzhXSTFmbHNIZDZXcyZ8R0tYP2R4eyo/MSpgTTIhUGVCeyQyK1s2VDw7R29Xazh1TzFZWGZ8ImUlfmdZUXsl'@;
put 'SUIiVD5hUFR7UTw6fUg5ZFRSUXM3bkwrdU1dYnByJj5ZUVtkYnxuNHNbaEIicEI5M3NXN2tpSy5va00sMnBYbDlHQmBiY154I2lDZE5hcDkrNyN3Xj4xaXU7Si9UQ3xVUUpEX3pMPGY/Zm1Nb1pzYGM0XnNJUTFQMlMxPltNXWlIZm5Pe31KRzhmeiZqNmppc3trMzwsPzk8SlltOiFKeltJPWJJ'@;
put 'RXhsPGw3OFVaVDdtVzpnI3xtdWE7cWE+bCNUP1A1akdWLkVJZzx1JF55bi95LlcmYkdZJnpycSpkaGUjQnBgMzE6UXJ0X1tKYkhGMiZjOlQkeChYMFlGdXQyQks8OUMobz1HQHtlQ2dxREBRNlo5aHo7bWJLaF9vRW4yTlM+LnxPPkR6aXhoX00seiJvMiI+ZyZMblZ8c1olJEBLKkR7YVNgW19C'@;
put 'Uj0sdipnNChhOTpCN2paPFh3O2AhWnhqYT9DcD9SaUNbUG5aVX1MdGh+aF1RJGUrXj5TLFE3ajFbIWwuJG9GW052TjoraWJJI3Neemo2OFNYMGdeWltZZmlzVXRyR3pTXiFLKjIhWXl7aDVEI2ghK3A3VCwkL1FOYWQzTFlpeXp8VkthP05zS3tfV1ksPSQwYSxVZlZUJl92ZEhDSGhZdk0oOThG'@;
put 'U0JiV2w4KiwwIkNvLGQ0X3hOcCNDLGA9NV1oMEhkeFFVXlNgfmcodDsscyN2I18kQlNJbWtUeXZ6IyVxSDU+TS8ldGs3VkYzT0FEQjNJeipuW3ZLNSRmQyhyYz88NWRMNSZ0JSxnLitROXgiaSt5WCg/NF0lWzEjfFp2bWZBIU9jLzIzeGEqfWdNP3svcyVdZCwwMTQyKFtsOCElclBYKCNOb2Q3'@;
put 'PjUrKktXTTdwbk8ySUM8YDtgRzA2SGBYSy5aLCpDYzopSz1CSkN0b0khWUtsaX12PDcsZnM7M2hUVlEpckNUWSZZImBhIkBEMGpILktwIjVvYW9PNjVDeCNEdkNiRD1mUHlbTXU3LDFBflE2Pzt2UVhVJEB9el5kN3JPKE5ee3o7I3VvZFpGYUVNOWtkMGVsSEBPYXY5VysmNTVBRjZgc1EiNV9K'@;
put 'czhIdnU8b3o0Y3g3cnNwcFckVyhMXz1LZDFDc2lGdHppaklsa2xTIlZsRnAlJkNIXXRfNGoyTW17SVt3Mz49aGUpVW9iImpfPVdlNC5WQUBWWSowJWtsPEtNbWY8XypwKjVqbCYmbzNBVkw5az59aDFje01ObzxxSEE8bC4/NHZDeVQmKkk5IzE+dWx+elpaWzxgIiQrQ1Qudj9vSX00PWtUXjVq'@;
put 'Wzd3KjdNLGdNPXhWbnQ0S1BLWHxMLCxyRXs3V0Mkc2E9akZ7XSNwSnw9UUs9InBnYlI3akgsKls8ZjAzO3ZHaGloYmBxWjQxVGlKM2xrcSYwaXJ4NF5aZjc4KjR3SX1afmcpRH52Llo9JEVoQlhkTEVlIkBNekt3dVV7b1hCdU54eDs/SzN+T18iYzYuKUhzPE55fTdiRVhsNk1UZCt6Qlt0O001'@;
put 'RFk3NG8jfkYvQUY/VEldQitjPWtQVWBaKUAqKyx3WW1dRm8/RnM7PmYwUGQ1NkxTeytLSXZ4L2l3SUhGOUBdMm8sOj8+U19tJGZxZX0kV2Z9al97MiFganp4VSxVbkxfYUVgfVRFPmFkZD15Wzc3e1EmX3guaDAqYSsuUjN1dWIvY2JRN0Q/K1pLUCUkZl1sKWwzYWlrdSkkQXdzb2QhT0NSfDIw'@;
put 'VkF1WmQ2X25sLFo3aC9OPjJxVWp+X3smOVZfPXJYRCwlYmNUSypVR2l1fS8rcVJoQEs6PE4lY28oPl5sbmNhXWIqOHQ1eTF2JnJkcTNyZUtQYF87WyUlbSVRJF1vIyRAZ3p9XW1qT3V7Sm5dMnoxZE9jZGkhO2gvNDw7cG1yMHsmb2t1IjdpTFBsfisvNX0pSnZiY3x1ZCFqN3dNWyojUUcvOlRE'@;
put 'Myw3X2g0eHRwJCYsKEN6Z3REW1VVfTVia3YhejpGPF06OCpxbSFMU1F6ayg4SlJAb19gX1hsWT8jSHBzdTdhWSFdWiZmNV4uRUBubnRbUXBvbHQrRSUhcSU6Uzk2QG1hTzJQK3ZlZmZGQCt1JnZmbzQ4M2UmdE18diNIdSM5Kl8kU0c0YHt6LDllKmxbUUdANjF9O2hgPCN+SnFjVFJsIXoyIVJy'@;
put 'JCNoS0ouXjhhX09iPXFVKT9AT18oZX4zUHYkZ3ZoQXtzfTV1OCFzdlFuNDAuZ3l5SkkjWTYsLz14Om50W09mRUx7JiN8N0RjI2k3XkU9fCp1NzVweUloKilgZkJKdSRuR0lUJTVYbXomZiE1PEdwRE8mTldTKyUzK2c3eXBfS0ZAS1p1VXAxInlvdzRmezBRbjZxME1RZDVaLzxgeXVlKjsrSiJk'@;
put 'NFpZUUAjbGZ2QyQ6YzthYiUkbXwraE05fihJWk93cEp3RndDOVQyLFh9fGVxRDxmIW1fJkBOTSosSiVVTzVtYVdseHRjWWEuTGElU2dnRVIoS1d5VypFPCMuaU10RSp9aGs8JWlWQmA/W2BEI1EhfHdOSEk7a0JoUX1xXSlYRWJ6V0U7dksvVHA3allhITB+UW0paCY6NVVid0hgeTc3PkNvbH1v'@;
put 'U1tWWzVpfFMuMHtTSCZhIlNII2IpO2o0SlhzLkF+XmgjRlY0ITc5eTxnKTI6JGYqJElLVzl7ZkMrbn4hRm9hViJ3YiQvUV54P31eVFRPSGNMO1t5OzJZSHxRQEJfckRDXnRkVCosRy8zZzRnOTZ9JWtJekovTER7YnMse3c3U2dwand7LF5EXn4mSn1sXVVdSFhYZng2ZWlvSy53O1NNfldTM0Vd'@;
put 'cm9tdHFha2goeD5LYSVGeFZJUjlPQm86TShxZkR1fWRVb05POSFNJn44VHBdR0Q/Z3hwUCwpV3g5InFnQXp6flQ0PEN8SkRZaUdlSD9+dnhgPXdEbUl9dFtDMF5wYjVpeWkmRFFeeFFWYlFxP0h7OztbXSswMyksTEV4WVUiYDYsOXZTS19kSE5kVGo6XXpINSpPPzI2cGpJI2B5QCk/Q3c+eipx'@;
put 'L0kpSS80LmtNMk0zLHZ3LjdVUDFVZHc4aFQyfX5iXm99I1ZGMkI4RnJpIVdJPzkjNVdNW2s6LzJMLy9TfXtDYnhLT1BXcDZvPW1gbnx+dExkaHBuPkp6ZFtGQ1c7RXpKPDhPdiJ+XikmSDUrU283Ol01VWRZY2BCdF9mUGdIPXpCdz4jV3FCUFZlNHQ7VkBbe29ZSmRIQ15BVSlLfU1lY1QjI0I4'@;
put 'RWs0RnJUSkBXV1clLDR+aXdDW2s4Z31Va0YvNlp8dGwudEVNQz8pdWdhekoyXksldmhbbkJqR2NdIyhiQ0ArPnlJZn1oPmp4PjV3WSFdRiF6VkY7YC4kdW5pVVVQPEZKKG1IaFpiIkpmQW5qajJgRGZ0e3YkRE5ifUgsdHBATlMqQixGXXxxXXxQR3YmI1EpNkVvRyQoRl1RcX4vbWkpJCY5SExN'@;
put 'Y2dOS19BQnpyOktPPnFBVXBqeDJvNShZTzxne3kjIz1pbFBSYHxERX51ME53UlI1SCNGQSQxRzhmO3VbZ05dMF99ZmJ7PmxgcUFUOSRoIzldKDtCW24wdCI9NmFFK0JnQThqJWFgKWJiVDkkWnI8VUVZclouVE99Um5XezFuME9Ue2ZEM3BqQ3YhengzbTI9LklhM1s0WUw4JFN1eXcwXzt4fCg6'@;
put 'dHEoKj1HXjRfJV5nfjIzWUYoLH5mW2VJVnZodE1yRHdyfiN1VH4jTHZTXnorIkJiVDxNJlNbVDAqVnwqKFFiSlY9RyF9NUF2b304JTlUaS9Rfk9rRU8zIWNHVj1jfSlNT1shcm5RRlM1UGVLelI7NDpEKHFZKV5LVHA8fihWWVZJKzhMOUY7XkxHKkZOIXBWUnVQPFJBNGI2TTQ0SSI5UiwmKilQ'@;
put 'cURyUjtfUiQ0QzNSQUc/Tm54cjFWb317d0U2VUd9WTB7XT48bWZzLGVHNHRDTFVpfHs8KkNNQ3lDUChmR15ZTV1oeztRd2olcV4qTkk0dGRjZyNsbClBQF5GYkp3QURPYDM3YHE9e3VsOSY9NGl7IjxJZ29GQ3whWSYqUFlOfX45fTFwVnJQNGElKHd3eGliMnErblowY1d0d25QV18iW3B8YnJj'@;
put 'K1Z8V3t8b0Y9dlVvR3FvYj9RZWYzYXVZSGM8N1lyZDROe2g5JjBkeUVNeXsyUEpXb2RPIWE7SH50Jj9WNnRjOi90K1UuQm5vPXEoNmxDVExIQVhAZlp4Ki9GV3JEdUlsSVBPTXBFWG43OjZQOkcwNlY4ISVmKGA9e1B3KCxtJlBJYW5bLyZyKz0za2A/Vzk5KEs6YElhSlJaLnxZOmpqPXhaI09n'@;
put 'Okw2OSQ9VkEmVmYzclM1ZHxedGM6Ujg0S3c3LnN1NlJbMlpXbjdlS2J2TlZHNmpIIjc2Mjd4dmFFajZyaW1nSFRLMWQ7JHBOS0UjZmUmPU1Ocn0qa2prQjV4dUI9b05LJkd6Q05fKTY3LClIZX1dUUp0XntSUCkufnVJI3svMzkwY1VEemhFd11WLlRtUkhOeWIoTnplVihRfDxzOUV4WltbQlFN'@;
put 'MkMwbHpbfl9wT11tUi4kYEZsWnNZLkBOZW8qNTZdekVPIWgmVXM7eDJFOV5YRnU7UnUucSVaTFtVM3AvJU52bXMmIjNybVNAK302KjE+YXtFP19zfGxTNHd7LFB5T2h6c0R6fSJYWDoxd0BUPlpje2IkXXQ6SW8mUUw0VVUub3BRWXxYK2xbZ0heUFR7JCxxNll+ZC8meDQ3I00yeTBlUEpQcjhg'@;
put 'YkZfKWZQe3loKCE6UDIjK2tucmlAUDBdTC9fWXY5KV92PjxhSVtAa197UCFTNTBfXUpjeE4yXj5WS1FJLEZHa2ZLMFBAai5eRTdfOFtMUDMoLFBYRVR0NVZob1pUN3AzRT8oMiVdKmxqV2VCYClZd20/eip9T1t4X1t4O1kkejYrLnp0RzswI0FNXytlPW9NT2MoZHpZfnsvTUNEQmJgW2syKmMi'@;
put 'JTZUJlFqeEZlQ2RyeF5SfkthelFqZzpyUS4yQmxTZCtrLGJsdHkyYEVyRTFNMzU0OEZyQ1IpM1VhRDFVXS9PP2p7TyE3XjE3W0VeIiZ9dGw/X3xPazpoblI6KV43UU0peWVxejBmOWZUWSMqdmRfNy9eUCFublp+WXRucC42a1RAeCVxYWYqUCFrL3g5Ll9FRUZJcG52MXdVeGcocWljb2VCdFZ6'@;
put 'VGhHT21YTDhGNH55K3YxU1ZjQ1VVUnB8blBjI1JSbkJSTz1wdHBXZktDIilGbm1mZmlVal81SkQ3Q0U6PDsuYE5YWXRrVXR9SWouVjVlbXZxfnoxdihiWTdXTCZvMEZ7O29gJHx5eilRe2lyOFJNSUlBbTZVezJ1PiJub3AreSFtciw7SzA6Yz1Kdj1pdFZ4JnBlfWhjJUchK3AoaHgzSGN5Iltg'@;
put 'W0V0UD5yL2Y1bkhIT3ZuaEMsIkw+KFV+e0h6ejIsJXh1ailmVEk7YjElKGAxTW1ZWn5qfVhJfiZFbk9nPVt9UkhUIUosQUwufm02eDBibStOczQxVnA1WDxiLHMiP1drT3w+PzZRU3RIaCRfaVAoP2FRb29ITEZVLzlXWnckKGgoZUBiaGBCU3pxSDU5UCJ6OU8pOil1PD55OzNreXpRbEpLemNh'@;
put 'bW5nImd7PEs6XXkvJCVgfXRtMDQsW1F4ImB3ZDdJWSpTPilQXlNue0xTX0xyayQqKUtYRSlhcV9wP25dczxxOEIiMGk/JVVJWkxFNCQ6e3I4UjBhL3chdzouX3ssSlg5UXdHa08+dSFKV2RSYCtDQU0/W1E/cjYpNiI+JmlaKXVKbjJjTmJ3cXJRWjVaQ0s3MzFBLyF2QT9QQ2UhemxIcjErOlE9'@;
put 'P05hSEV4MD1DQ3lsU3YuTXRIQHQySSMuM3x3OFZlXXd1ZkFTR0k5Q2Y2OnVvTGopNnVIZEBMZ0UqKHZzdXFpSVsqZ150XlBhalFfdHBYKy8vQ1pTdVdXVUEyNDV7PWEjcHk8OHAjfUxyQkcmV1JGJWcrYUxaXT4lMyhJZzBgc3tEMVJmIiFLNHNuY3RROlUyczVaRWtkI3E9bWV3RnkyKmosdXxK'@;
put 'R11iSCJRc3YqWDwmb3dYfit0P25raUcvRTZuWSQpSFJERDlwckZLMCNIbW05ayxEQCFSQXt1eXZPQitPOUUhZngiJS52RX1GVjtee09leSJYdlpCNG5daC9ZOmkjOHt1ZyJgNjQ5JH4obXcyOG5uIytUQ210I1N9WzlrIWE3K2siPl5FMTRIajsxRHd8cXE3YmldSDZRJls8ZF9AU2Z+JGNbNTYs'@;
put 'b3s2MFBFMlN1NSMmR0UqZVUyQ01qUVd+Q2wre2NaeGQyaEB4c1ZBOFJ1KXU0KEQjRihbOXZyUyRnZSJZY0trX1FvNHBtZHIxOWx9YUpGKkckUXZlPls2VWxrQ01Ib0MzTm5DPzduN21RIXBHcUlFKFA7OyQ4KkgzOD0rRDlsa1psW1hIWjZVVTUyMkdLOSNdRyxqdy9HZE48NHhnWj9qZ0hATHt+'@;
put 'NDQ9TUhrL250WEEoTWkmZUcpW3F9VHUxNVtfUm9QLEQ/LzpefDdUIT1UfjFsfl9HR08mMCYrWF8yWX1IaEZILCIsfTtJNXAjbWZGPXtZdUJFUz9ocnIrJV17QWpkWWtNRHlSLCkxblM+Omw1RWRZbkxOX2YkP0l0bHxGcVFkakwrYDVzeVd3MTZpbjFbcmZ8fCl+YmdJfDVALkpGV3h7aiRLIiUm'@;
put 'YVRuLHEiOU85SXFlLG1WYnU3WVEqeTdrUXNGcDdPRiJPYDIiWW0sfTk3Tm4pKE0/U0ZjZ1JkSyZDYDhVWD9NZXFkSDszYSEpYX1fUy5xU2RRelRuRnwzN3xbRGs4VC9jQ2dTNFQmY0UpKn5qb3NYUE84JHZxVSMjP2A/JHo+RVZxaXlVaTdqQ2FPQ21nUXg2LmowPXFQemJrVyI/fUZAZERfOThC'@;
put 'cjY5T2ZeW1UwOTZkZnJzPSM3Q2laanAvbUJSOFpZLCJzQW4sRVpkT1VvK3I9fitZdntTOGlIVl5pJmRXe1spUytqfGNuJVB3bmNkLmNQRDhqNiQ8fFg8Qj94enM5TE9ZaHY5bFp6SkFzKzYhIUBMa05oX0hWV2khbEdvb1pPZSw9VTsqU1U3WjFpQyYkb0RMYSx4SnhVKERlSmBhNF08L0suaVtJ'@;
put 'PCFiLjJYOVdmfUlrWF8/XzdiVk1oT0JpN183Zl5hLGNGNkBleTkhSUQpZyMiTCl2OFVtVFt+IyY9TWtEST5bNSpFajhrYGRzYns6ZVUmfC9daXhHdV9pJCt0MmBvPzpkPzc1JG1ZTW5aS28vP1V0VzclZG1PPUVDSmVdTyRvI110WkUxL0N5bjNeOUlSVnVjVVd1NUUzRHN6Py87eDokdExHMz9M'@;
put 'PlQsWkpkN0FVK1BTJTE4TS9eOXc0IWlRKEAoRk1ZMUh3fXRnSkw0NDhtOFd0IzlKbGtlaH5oPFhHeC5PKl9fY3JofWE1Tk02ViNzbFBpIXdgcmFodVdiNEs+LiRmKDl4L3RUZFEjJE5YOD0pWi8vUSM3LCMhWTZXNilkXWNJbyt9KEI4eyRKVyFPM142cXd3VjJiRWNzSmlZazlmMGNXQStEIj14'@;
put 'bD0yOH1ET0xeW2dvNFt8U19LaHspTUhzVWA8M2tbKE1TZSNwXmoick5saSJMWSkpQ1ZUK0k2cj0zbTswZmVDMUl5NiM+ZWNrIX5AYnNVa1MveiolJntdPGE0Lm9jb3AiNXExKzV1PDF6cW8laltSZWgrdHNAYEZGRD8qJXhSVTRFeS9HM0Z6JV9tOT53QCwwQ0V7eCFmZSxSfEtGOEckcHxdWj9t'@;
put 'MSo7ZUt6dnojYG1RaGczbW59XzBdWSJKPCsqRkdCVltdXkZOIipXKyJ5ZDhIRj17cTNQZ1YpWzEqVmZlci5eYEtXV2IlaEpyMCtCOm9dMihJR1d3cWF0eW43Ukk+PVFyMnppLChXc2ZwfDVoJlFNeVEoX0t7Y2J+TmcpQCgsYm98SGU0dUYiejN5c2p0QkRSL21hVUtXI1d9ZXJ+fjFafCJWfDlM'@;
put 'MVVUSFYrKDwlZnh9UGRkL0g6MTNscVFvLyxESzt5Okp4a21BUVZVPHluczcvRTMxYTMxKkU+LFh3NGU6OWlnOD1jbHVdOUxQX1MqdzFkPHRMW2FPR0c6ei9TKjZscCNraS8zX2dHRUh0I09gU3Z8dC9mW1VPcT5RKnhWeDgjMH1USlhJfC42MSJ+empeKFlKbixaaU5Zb1ZMZSlDfGQoNEJML0Nu'@;
put 'UENncD93YVNFVjp2JG9vOiNld0NKZj0sUUtZSCZMWHhgdihDR1RiSzZkWHU5fWhMSHA2TH5oL3RyVHl0PHczNzwoSVNtYi4wV0dMWD5DR05mQnF+UkhJeGV8R3JPK2luVU14Zj9HcE0/YltJS3hkUF18IlZKPUx5REArISw2N0UrfmJyL0V+aCFHQU9bUmQkYnFAcE43NUN3KDFUIUFebG1wLD0p'@;
put 'bC81Wkc+KnAyXXM5OlAmIT92K115d29EbSQ1SH1sOTAyPkA2UTokTH1oMjA8ZDhlIWxWLElnUV5RWWsuSkw0cGZKUXdJcVVyKXtHQUc+OShLWVd2Zm8qUzxOOSYqVnM0d2JEfm5yWlBYfDdjaD03eWNCfHZON2pWZCUiISlzPC4wXXZHenA0WEIlajM6dGp7QCZlT2xMbVAiZ0FNeFB0bDB1JUhI'@;
put 'RUMrKWdranElLmxjdVFVT1BPUlF3ZylbdXBCUHwzJFZXMT5CLHMzY3BVXiMmX28uWSwuaCVZIUY2Ul52KVMjWlJDJWZEJTA/TTAoUzw8MiJMYn46PktDRi5veHxCb08/bDFudGdVVzA6fiUhUG4wUzlDfWNmeDxCcEwvcyJSXy9jNmImWGQhKVAkfDhZT1dkfjFLO2RWPSJIUUx9ci5hYzk2Sndo'@;
put 'a09MdT5PKXIpPDQ/ZUdxQV11LHB3MEVaaSNrRU56P0R9di5iSSV9OUVzVisrcEszfihlTWo/SDE8ezJAUTl9N0JbZ1VCRiNdVzNiSHlpR01WODA6YTk6Ul0kb3BfeT8md1AqQW1WP1RMI182M1doNEFGUVZHRE96NXFFTlEkYTc3VTEsMkIvbUp4SHNya3ljaSh6TjMhTU1OOm8+Izt7Lj4lWjpN'@;
put 'M1B6VTlCWzZOcmcidChfYDosRE55STIhZ1h3KX49KV5eV1tIKDdsJGg4UCw7M3UjNnE8WjsqZFRVKS8ifCZdYDgrdkUoMVhPWmZgKCo4SkorUnxHRWwmSjIsW09xSyk9JUkwZmtaRTtHZF9Ld3JVW0FBdSpzMkpab1c6KXhHaSx9OGEjSFldT0JfLzN3QVNZPHQ0I0omeHtHSGVyPGtndCZVO0NQ'@;
put 'T24rXSxOQm1meCgmRkhPNTs2dForLDx0RG5gWTtzcUBtWkpaUz9qSz9+OSltQio6dEd4d3B3ZENPXzJjWFRwfnF7PyNyJkNIQns7NDYkZ3tpQGNlYXV7cF4+JHZZSXN+aVFuRW1YeDdiOltGYzdJZHB+dDYvJU0vMFt1JSkwOlhZd3NOXy5GIWQmS0ZKSS95XTtMJFUqVHF9Nl41WjxaUms7e0lz'@;
put 'dCYkU1RITFk7MGJeNmk/Okh2XyRhPmFnfiMmeXJdPnklZFFpQjdELGVFW25YWHlJUkBGb1prdVApT15SZT5RemIyI2RFWnk4SiVZSlROJVVoOTE/W0tRTElANiJyT2lMRDkuRX14RG0qQ3xzP3NBSVY2M1VAeERrPE9pR21FPF1RblN6LG92KmxHdy5lSCxFbzM8fUltdU1aKjZuKURJdmh1ZWIo'@;
put 'LzZsSzk5OVh4Sk5BXj5KLCMhVUtGaVVeW0F5dXQ0Sz4+aUtjd1chU1k2V35TWHgwbSE/LkI1L1JxZ2VOJiMiLyQheTxZXUNZWFI3IUx1RT1pUi9kclhGUTVjc3w1PGBsSD8xQmMrd1VfUCZdMlNHVFNXcCoqclVxTCImVE48Ql42eCs0Y1h2VTloWmBKQUNYRGF5aV5XWXs2Qm9BNVtOcUhHbVA1'@;
put 'SkBdMHw7KE8+NFNTOlFwMnx4RWZ1YU5DUE1hMH1sMjh3WTNQQ2trZSlhN3RiTWUpanh7NUk2VHV6Y35rcSREXlJGNT56SUp6b15iYS5eIjZ6X1gmeUsoPE1YbzFpVUg2W0tPOTxiWFVnImh+QFgkYnYkYD4kVWQ+Slc7OmN2d3dzN11QQ1FqTmBANUxSZUJ9dWtKPXM4RCZRMj5Mej1FQnR1JC53'@;
put 'fFJ1XTFeUHB5LlglQihPZWVOZ2wqNjYvaztnQCVpIzcxMXxkNU5JT31iRDYpb15dXWFxNWJTQFc2STxAYzp6ezRubCskPEklK3N4MTpqLlF3UkdbV2kmMFRsdHV3YkMrInopcGlnemBEZjRqYmBfMnYqSXZqXix5VWMwe2ZtNTgvbzx+SCZeN21uZ1RtSHB7R1tPYHwzKjAxMDU7anh3P3Y1ajls'@;
put 'V19NSW94LDlraGZmdywxQjN8YS5mVmo7T0Nkc1pGRUw6Z2UhPVZKVnw7cTA7WC5rcnxBQCViS1Fna2lVciVdZCg3IXFuKUNSeUs+RThCUzVMPndBc3dRWEk1fmI1SWdxfmV+b01oQ0xFT211SlgxVSkhaH4oQnQ/R14/cXUrZm09fSVYcV1SRF1sSTxuI0t2T1UqOEAlcDJuYXF4aikvTHtIYTVe'@;
put 'd1BAbGI8QSpfITxyaGYjIltQVUppKnlaPjxCW34+MD5XUWBnJGFtI1tuOjRHMiU3dGglOnltOjU5KTUjZ0pjZVF3Z1dXR1tUVHFLVHdZWy52SzwiVzp7Q0Q+TTFdSztqaSZdUmp9R2gkTmYhOU5PKEhON3peXlNsKEFJMC5AM2pdMS9NdUM8UmVEPGRTOnFRUTwzc1NnfWkuLzVUOExOQ1l7P0R0'@;
put 'bFhQIzNwZFdvJTc7dC4pOixIcXdOR3kwYFI/Z0pYYjppJldUPl9yKmJZWH4uZ353PWAkb0Z4Y1JdRVBOQnF6LEt7NFJmTF9kKWcoTTtkakRzayQxXmE0dys+VmIuSTJVUEtsVSNGR1RISz5eIiRbVmg0WmJdXXppSHNlZWVQXzRHMzF2fk42OmRfTSRydm14b2oqV2ldfCxjM11NTWRSUjEya1Fp'@;
put 'eXlLZjUwK3JwbFhkUCRHTyhmdllwbEsyYnthR0tkXkYrUXN1QFNiUzk0SjVxdnVlbXkuWUMiOUdjdTl6KDwrQCpTXm8zVVIxNXRlUDVSI2liMC5WZHFCX2heWUo/eChlLllrUnBnLklbY2ttamwmWDNPel1eclk9ZkxUQXVlWDtoJj1QW1ByVl1WTEZFbCYpam1HaEo0NFd1K3B7Z1A1M24oOjVV'@;
put 'fUB5OCNoZDs8UjhtR0g2ZUtjc0BbPU1UZWhnSUVRQkZ5ZG9hclFLbmZpRGZSWDE9U0oyZS9IJTQpc0d4KEpNXSpJNTFTd3Zdcn07PjNxXStaRWJ2cn5kO3JuPmJHdWk0I2tTakQoUER9ODAsaVhsQTckbEpsLFE6eSw1TkR5ZWAhPEBJVnVnKDtpSlgwLzRUfE9OdV80dEJvaDtrQiNZU18scXM2'@;
put 'OilFfHJdQkcsJD1CV3YmWnBoeSs/KmUwIT5rO31AXVBjZis/MHxLYmd6PVEkZVpCOEl9blV+VkQ6UFljcC5ndzkjcXxOMHBVaVt6LnZCT3QwKEdrYU0pc1VrKzNObkw3N2EvI3R3PFE8KzhTYzA4S0hXV0IhV1k+anlYU1lNcSEzQEBxOEJOOXBNPHV5Im9zaHYjK1BfUEE9Vn0jeSRUX05qTDs8'@;
put 'aUh6MkY+LkRnYSw7UzlzRUwjP3xtUGU0T2ZBTz9RTl1KUTY/VkR3cixJRGc3MkExRWhodV93PnNPQ2BAOCEuOzFZP3U8Q0xnUE8we2QlOTR2c10sQ149Rm13KUMuazRjfl1XaiIqdGxib31WXSxMYypHZGgxdlVOMWVlcyFDSGApV3ZeLjhmcjVPLD11QXo8OUF2I2h2SilhXmF3X1ZUb2V5bFRA'@;
put 'cS8mQzVWdjFfMTRBdV5vWj53QT9QayEmPF5YYiRZS0tZSFgoZj5UREJoNT9WPm8oMm5nc2JIPzJaL0ZAP2QzaE5VaGAxTjRaPmJHSUd3dl43My8uRDdoT0NtYStzViEjU0pEVmRWOF1mUmR4L1B9KkM5UkRfNGBpP1ssJU5kbj5MKFJUMzpKaS9aeW5Pfn54bWZLNyxxSlFWfFYwLDNGZFJhdjko'@;
put 'UHclWEZINE51V0Rpei9nUUJ6bjhKd3dyREtHUz14Wzd7bmNYciI3e2UuamZwZWJaeXcrQ3VKYkxjbmJSb0I6SVFOcWFHVX1bRDFQWkV8ekdLPnlVUSp1VmVEYiM1Vkc+MT8/X1phV2ZOO2gvJTUxRDJEPXp8LFAheWdpeGd5bjg+eihnVDQueFBlcTIyTVNtQTtpPGs0TVhWPkBaXjJ0e3hkfFEo'@;
put 'XW90ZSE2O084I0d0KWMxYWRaSyNhTStKYGFbUFR0OGJJVzdiaCtPX1V3ZTZLQEJoYERPI0dZP29+ViJJN1NDQVpGbX12UV5dR0FnJSFmfkF0ej47aTY+fWdUMCx1UiVAXyVTTkhgMjg7RD4oZWYyeXc3dCVLNVJpQXN0Lks4PDdxNVEwJVBhfjt8O0poUyNVX2FAeG1LUkNYcER3Nk53MHNCPVVS'@;
put 'Oip8PmtxJDB7Smh9b1l0Xk02d2JYJXN+Z3pkRi58anhZJjxXSlhRN1ooZ3k4OWQpc2wxYF5hbzU2bUdvSzopOmFeZlN3eGEyYSY3aT8vcFNiUnc5VHQsKDRfZ1pWdEM+STtLXWw6bEpzZT59ZXk5dm95QUdpNC92aikreE9tMElqZipZaVZOUnpqYHM8YzVZeHlEekV4aSIhQ3dfJkU9UTFXN212'@;
put 'e3Q1NWU3bjVId3FWUWU3QC8mQmZ3ITdiQDM+OnoofiZLMFIsZS8xQ2o5ZkZfQSJ7UjltR2E0fWdPb18oPz4lM0ROMytOb0BIMyJoaz1ELDFwUCRCa0llRiVnb2FSOGxBZmhONlBTUUl0JkZVMW5EcjtDcGgxQnomaWcyN31FSW8hRSJPSl5HRytNWX0uWTdxV1puaH1yZSlufjpSLiEpXVhJQSU1'@;
put 'OkkkW1UrdDlYTzsyJEpifSNKRkoyMHB1T2FUUVRuX1FqZlhrfWh3L3ZJd3I8Z2B4fW5aQmEhbkdya143ajp2O1dDeHtDKn5BNDh8KEEldWRtcV9wdixSWV8wRGU4ZF5qTCxIaFYmcWdwMj9eSGJbKHclZDJ9KWxDQ0R8aT02NDJRNHZRcVpfYlk1ZHtSektqe3ZAfTVzTVtUXURuRDlUK2pEOUxr'@;
put 'WyM7Nio3VywwJWZ2e3Y+X0Uldlt6Py8uP30pNk1uVWQ8fHopcSVLeEZfYXswU25PRVp4aU12KUtOfT88enBLeSEmRXpzRzFyWTxDREd6OH02VmdIU1djP0JKYzgxZ0tmKXhjRj9QOnZ7MjklayR1WDtLWW05NXledVFjeHJ1UGQ3JkVlUDdRQ3dmRXZGYW92cTJocXlCSHJvNDlIJCRGTl9Db147'@;
put 'UUgkdUVeZzBqQ3gye0E4ZlRHIzEpUmYiP29EO249LHlCUClVPFVBYmVyfG54YD98XyE7LEg8eD9qOS9XLk47MHAmUEtpaE1aQnsiSUltNFpZIix6UEM/Y2MyV1tlfGJvRE5BeT0/KSE2NzBQYzFhM3dkVGVNN25vbixXVCZtbjYze31KW3VrMT0iaSl7Rk95TE4rdjQpKS4+LkF3TWxmRG4xbyVb'@;
put 'bmlkXX1lX3FwPnBZVEdaa0ZIKz5mez4/MzojP0FvPXFVZ3pscWE+LiN6SjJ0aHlsaUR0Pkw9VXgyVmZ4V2NqQVAlSHs7M3NuM31JLGlJdTxTd2c7MCNIUFNVPWNbPnVVcSRaL2VnOSo/MlVpPThISDJYeUBHQlkzbEZBM1pge0Y1fXFAXnEufXZ0SS9kMH5xKWgjMVpNUEJoNmYvMDQvenFnfFBp'@;
put 'SF8yeFZvdHwwX2ApOEBASHJHPXBxUy9qS3BNejh8NDVKajBaenUkV35wY3RYOX1CNHNCYHttOyhSQ3ExPXB1KGhFbyR5ez0ybz9pcHVwbTo3V31KWFhTWklBJX05U0N1cFF1VixYcGRLczxBZX5LLjJUaE99Q2pHWUc+T1slYDlmbW1hfGlnKDArbmsveWFTIjlePzlRTT9aJUY2fC9jTVMmWV8p'@;
put 'NGtVJlhIRXU9WDt9OnJ7KGh6MEYhK0ZnOk5sZWAmO1UxeHYyTSJNMzFDWzR0O1lhYlAhZzE+KUxUO0h2fCl0fXtWUiZeZ2htUjJ8Wkx1TkZTZXBrZFBDampTNVkrYVg4PHIsMGskeEY/eTs7QktfZ0h7ck96Ml5OX0daekg2TzF6UkRiLktvI2d1eHM7aChyQFtSO0ohOkREbUp7JnNmKmtuOXtB'@;
put 'ZiRWTkVPY2Y8KXx4dyg7PkBqRGpzdnh1TU1BRjJlWVc0fUY5dlV8Vlo8YUlUNnRobHxkNWQ8RHVVWz0iQykoOEpta0ZWMVN+K045WHZsNWRrRWNqX3l7aXNyJXx4Rl1fUDBfQF1iVThNUyEmPlVAdnxgKFB0RzooZixYWmkpQTF2U3BgV3lWSzQoOjkxTWFtfmBMSE5NWH1dWEpsMCtZWD0vViUs'@;
put 'P1Q5cDdEPUgmUXdMeHBRLEY6Qi5tak57LHwxT3szbilMOCh5X1FQNl5SQn0wPjV7ezV3eCxeXyJgdF0qWzFhVCkpKEBUOkV7ezZaeEU/NT4zVkJYcmtbRj5+MVAlOChfaGpYJkBgdktDTD98cjssOjFhZWJtKlk2UmxFVzV9eiN5WUhPITZeUmx6d00pRzwrYDd0bE95Pn5ET0pYM1tEdGVzbGho'@;
put 'e0MlV0d3cXtKWnI2YHVNYjRQdHshN0ZWXmFxUmhgJUBOfVJaYyw+bzJ3I2w7eVR0XyM1RWhSR35GbX18UnlrPCIveWdSVS8zfGtMNGgzX2twcVlEeXxwWzpBclhLTUhZODZAfEQ8InxOU3QrekswVCEvJkcrIkwiPj9oP3g1d15rSjhvbXl8dWA8V2xeSl4zMXdgWzxxRHt3LGJyV1dZUGZoeVRi'@;
put 'NTtzciJrLEVJSy9NeEYlanhfOHFGIl5yJlo8bEklRGddMCZlaTtzPW90ImxKV0pYckZwZUZNe0BdVlAucz9AVnl5MiM2QE57SmYyPWhLU2UoaCtgK2AiP09jMCEhNDMmYjdLNG5fTntrTHwlZiFpO2k4d2NBOlFzSHBFbUZ1RXgheVVvUUQueH5TIUdIYkQxSXZ5YCV6Sj5ZKmlXbzUybEUicVRP'@;
put 'MFtGdCNNZnNzQzw1cH4vUm1EWG4qWyN1fER8LEcyRlAoZnZ2bXFdWkQ5V1pPYiF4aEZ2Y2E6QHF+aVNXJjRbPnRxMFQ2IyRZSXo0Z0M0Iz1Ddlk5KXQzSFJEIWAmZ1tzYmFee0ZoRWxzMH1pW0IiIX4oWztKfFZjX1gpT2dedjg+VXkvNmhLI1BLcTF7MTRFel41WHY1dndITkYxSnI0UzBodGdx'@;
put 'VT4ianc+fDtTUGI2fTs+d1FaTVI5Yz49O00sV1IiN3VaWWAkeSNnLiY6aS8+WFd+ND5YL1lVZVA0ODo4PF1VNCpeV1tmbFVaISFfdUs1WmglL0ZgKF8uW1F+b0chSmE5IUh+T0VZZ0Zdak5vPkI2cmo/TW1CY2NzdzAlJmREXnQ2Omcmdl1VIlFCclFuPmh3L31GOGRRRkIxOz82cXJ0IU1leG1L'@;
put 'KyFhZyFzW1Z3NG5HbCFPdiJRJU5UbDdgOChVVmZNYj45Kllrckw2U2ttS05ebj1UWHFgUmQkV2V7VCx0b1ZZQ35jMSp5NGU6KTBKMmdHVkRyeHlQVkw3eDkoXURQQy52VERlZFByQVhSM3FhZEBOdTN7fS8lXj1XeVI1QFs/Yzt8WnZ5PkU4UjZ+RDdiZzdELjNMLiZbbjo0RypzJFd9eEAhPH5k'@;
put 'YVg4YzpiJltPVXp6cUlLPzJnOyE9ME0jO1YrJmdjZDEvRmR5RitYTHM+fnFMfjB1bGtxcSJLKHtYPjBIWEp8QyR6dVd9ezNAKSZSPXVRRDVmZ31jZihgcjY3bE5ZakBxV2ZoL0taPCR6OSpZYzw+b202N0UjTTRZOFV1OlJgOHFWaUZqIk87YHlIeml4NX1RMmxQZD9JckY8M3FvQWdiWDhDXVVP'@;
put 'RHtwOjRpLkVIOUdYOCM9ZjN1RWc5cWxmcVpmdHVmYDFpNVJYMUo6O18+YVlGSk4hcU52Lll5NH4vKFE9JHgrRz9LbWpOTlljIjtSNEB8RiNfRkNOJiRwaktMeig5Km5ZWXsreHFvOlU+Tj8wTDQkPGoqX2hWbzsyLzQrYHA5TDVdW0JDckdhX1s7KTJvYj51PlIwcEUrWXA5NWFyc3pMNl06T0w2'@;
put 'Lno9NXIvcHhmcFshISo5RkBHVl9DbXk6ejg3Y0R9YHVJPXl8Kyx0TENBYWglPjFxcE5Le1RLejFgWnR4OmxNST5hJDBiI3pKajVhRUIzb3lQUTFhQ1FzTWZYYypITUBdfk4+NCRpfmlKViFRSXx9OTMobSQmPEM8IXVLX2g/e2RxPmc7Xmd2cGJDXSM2OkNRYnpZVllgOURuTjU+KyN6JUd+cHlg'@;
put 'JUtzbS4/XVlja0hAK1Z+WVd8I3J6PStZKiphcnU/IjFZOEs+QHc0I3xqdnh3SzBqUHlJZDMwKTBrXUFyfT03VHhANV0xfUBZQVJAZWhlaH50eVkpKkQpUUF7OXcsTDgze00lLGUsfj12Wk4zX0FLbS40IV5BWDM1WFIpX2FGcldrcmdbP1AubDluS1lpe3xXNGRgU2lYOX5LMChsQSVTa2wkfmxa'@;
put 'e0VsRmdOZU5Vb2YrNkRwV1AheTt2WHlzM0khQWJUdDlIUDpWbDx2NWpZYD9aRyxnNkR8REdzYUtLJTFrclJONkpVSk5WfXAjO31mOVc1dCVqWld0NG0oN2pZRWpwJWxCZ3loUlBZLH0uQzZkQDZqSXJkaSNsUWI+IVE7TyV2VDtDNn10SHMjfDdWMCJQSklxaEAldFolRW90K30zYVdON2B9P1FE'@;
put 'RkNmMS9MYkcqZ2NYe1FqWig8Pjl8ODdVU0pwbzFPaXF8MGFwWzF9LFMkQ11Tb2MkOkNGQSxAfnRxKmVsTlszanZAazcuKyI/diloVD5OJmlBI3NgSUhOWFJrNU0ieSEqX0dHRlJRPjU+TC49THE4Rn05cXdUU1dEQysqIV56ZUtsTXElKXh8MmUyZkZ8e28rW2hAKEZ5dj9wV05VVGI5dDo6X142'@;
put 'WFdvLjRSPUMwMHFjZSt3P3x6O1RsRGI1Z3Y5Ry8ibj9mR2l3RyJNdm19TV14Z3puK1tRUGdQUFVaKSxyU3tROzszbVluIjlJfVlMUXZ3VmVsSz4kRXQlezwxQE8ja017Xl12O3QrQHR9NUZAYGZ4cztCejBDail5YEFPbmlPNkA5XzFVS0RZWFBfMVpkZH1XVlFVfmRgS28sNik4bjRNZms1ITFH'@;
put 'aXMkPy91bHNrbytROy9NX1NROilzWWAxZiM4cypuOFE4eTZuLmpKeCxaWl1PUSRSd2RNcCR9RC9VdUNzMS49UVh3RGgidVRfLCplNkF3ZSRraVVeKlhbaF1fOjlHTmdDdzZeNXcxNlhZMFU/Y2BVP1BkNWRQQGlIUSYiY14hQ283dG8vWVRLezpmRHRLNi9XNmAsQm8raE5bbzNHTFpNc2s1MVUr'@;
put 'bGM6MEkuMzFFRUpwUW1OTUx8LDFKOHl4LnN6Wy9sW19SL05gZDIwLmVwVXVORjZldF9tbXgzeFpbZlhpdShDL3o2c2QzJmR4Y2BvJm5BIXBsU3ckWWY8T0RvUzJbMW9Gfiove0pudFhHTGh3WDBdSVI/IUN2I3VTKnApO0BBJEokdyx1V2d2XzBsI1NWQjZMNSkxeCp1eTtfez5+XV1hcVc/W1dA'@;
put 'JiNmOCR1VjRsKFc7WkpIPGsjMFN9WEkxI2xnPz1yPCpEQ0oyZCwwJVtRczJ8SUI2XV86JmxedT93NXNyY2VHMWJeWDI1PCh5bHsvVmJoaE4kW1ZoOm1fayIjNTVlYExkRnFEPnhxfmldfiRjaXw8eWN7Iz9FQH11YXI/L1VVQmJOd0BXS1JDUzs3YmRrbD4lN0VOP3dSOWVaWHg4IUd7R1lmaU54'@;
put 'ZyFYP0A/STxmOC83ZCRYWGZJSF5JVyNMcCs5ImFSNHdXWHZHJD4rW3p2Rjx2WXw1U0JpelJ+QHF2ZVt2c3FpQDB1LHRyYm9XQiE9WFRWa3BQTGdHYX1sMGg4UX5majtCUnN8InJBPTI9MmtiV1FuIjYkKUBMSXI4KHIjcT97ZjNUanpsMkt2dkA2Q3pSY2oqfjBuUWsvNU8wOiFeRTZMQUpWRUFe'@;
put 'YStLJThzYEZ9Y1Q5NlZhTDtSLCI7PyNEcWwzJWhSfG51U2d2PXRRayFySV1jOCZOTEh9NE59aUJmdjRmZW5UYiNMIjYiMUdOUkM7bmBLM115OjpiI0dWLCY4RVcwOlR1S05vcTRPN1huYjQvWDRqUWxqQV13dVQ4MiQrOEx0MkVyLDl9W0hqQGlYSTlsQGNYfWJGTlg0bjdKKTZaQCojNWp1e3xj'@;
put 'eUVDVlQ6akZXQX5PMXhkVzt8JGspamZgOytEVzYqWWx6QHF6PjghdHZCbl9FVHIqQDhLe2hCQGpsRU5RSi8qYSlXc2p2TTBpXlFtLjxoVUlyNGBaUlZkTF5fbzBOLy9vN3x2eTprVj9IaU4lXjB2d3xXPFpZeHNsTjV6eFd5P21NcyxYaVE8XjVTJTsvbjMoYTFEZVVVYG5QOE5SfX1NK11KWE0q'@;
put 'aD5vIVZJcjQ9Q2MkIXdlfU1lfipuSSF6Rj1BTmdrWCxORG5ScFVuLD8yeFNzYGpkYFRZXkRqS2NjQ1J6bC93YGtbRVNmOTdFVkdNfWFNZ2ppJCoyXVZmMi9Ea0ZyYiEud3J9UH4wYS84SDM5cmpOe3dSImBlYTIyQy4lRCQhYjdJdGN3UF5Wait2SHlYc3sxPWNoWTF6YCY+bGwjXyIsdHhzP0lJ'@;
put 'YUd8W1srTkIpRF4oKFtpK1pETzI+TU9CYG5FV2VnRGksPHZUfCROMURASktUekMpc3hjfEJNbiVPKDY+JH5jI2xBJkRvTjwuMy9CQ2NvTzljbjZJXzpXUSRJalBjJmo+Yi5IRWZiO0gqQlosfSxrKWpLZ1IjNSpzR3tiJXI2WXxBJDxsfmNwcDMkIXckQGxPOUF1PjAkPGpOX3VxcUt2I1tZI15E'@;
put 'WWReYSgxOCx9QypmRV5nWlk9UjEuIkU2aV94K3t9LC9fOGpCb0JvbV5XX1Zbdyt6aFJqdjVlc3d1JVd0Ljo3cCFwInlJe2U9XmMuRn00fntqfTQ7fE1gKkxFXVE0dGZqVlV9aTdSQX14Q312NHp5bz1PJiRNS2lUKVslODFGQXlZYTBqO1tQM0FoWSFbNEdubC5RMk9ELkl9UXN7endGcmlPaWlA'@;
put 'czBlWC59e2Q9OU49VUMlSHcmdCw7UUtnekYrTnB4cUNxaU9nS0ZMRUp4PGpiJnNtbltUdWUoZkFEWn1DISglRmBxVTw0aWNSPnxHQFdWdSUvNCYkTTdpYWZsQ3RQeGg2SnNwdXNzVyUwS2x6VntaQDg5IkwoLEc3TU5DP3thcGhoTT0lMjZVckN5Wn1VIzozJUNoIUpWfT9uZXdhLnYyMj5PN20y'@;
put 'N3EuVVA2JjxkeW4uQ3RDV0gmNl8+amo+JmFPP0ArTjllR0FHcDxhYnFocE18WWsve3wjZFpMUH1aeDVtcFs6Ul0jbEJ4JklRPFB4cyo5KCZwbD1YQShbPkMjbFd4K1JwMH0iL1Q9c1J7d0A6TnFTbixmOVE4a195Vk99bjc0NElPR3c+bnUrMHJrMEUob2hSfEJJYSkzIzVeaTFwcWVHIWlkND09'@;
put 'bzVuRmheXVBxKERMXVIiOVRdeDY2Zm9nZVR7JHM/QkliKHxPLyQ1Lj4ycTgre1VRXmdVVyxtPnhMIylBUDwubSVoXzpDZFp2aVpSU1BhQmdgZk1gKjovIzx6OF5GUj9UQ1ZtN0ZWUUtmTWJ2VTZSLyEwemFOWWd6NWt7QiN+Ykl2WDVlPlcrOkcoelRveGdeUWFEYTdheUg4ZEZ+WzNxfDx2ZERO'@;
put 'WWlgVCpIR28+cy4pLjIyVV4maE83OVAxZ2hyUiUhMnVhQnRETmFDaiUkRG8pLmdPLCZxX2JUJHN7KEZdQUlxZDMwR1hHZGFGR2wpTlosTE0sd0Q7SF1Dd1s0NVBlbmwhfT5yJSpvemc6a291UyZjYzw9ayVlLDcwMmQ2Z2IrY21kWls7L1JUWm5AQVg0LEM3fCpudHhGaFVCXTV1Zkw4PjMxMyRA'@;
put 'NGh9anpaIztjX3ZCcjZ5eE43MUttKD1dY3ZCJShPUCZBdU9+aXplYEl2WyQuXmxIXTcqVUxxWjdJVH1UcWg1WnosZiNgUypra0dzSSpQZ0NDbntpZFV0UmI+WiNZPGt1OztkV0srTn4uei9XKnpuNkFkamR6SUhadzU6PXFESkdyckA+VjJ6Y1JwPVZnZV5PKVtoMyV3WCold2t7WGlJLHcxXmo/'@;
put 'JXIkaVVudlByXntuWTM0QEIuYl5hViRJM1p+L3Z9bldpIXk5UHRTX10oNk1wdHlpb1B4eDc7fC5laHJAUjZXUHpqXndRcCZCQ206Ozo3JElUTCI0aDQpeV13Ril6NTUjNz9xJUEiIz9mP05wPEBqOGFgIl91OyQqRilJPkw5TEt2WUJpbm9Ld1hSQ1Z4OEkwaXRsZ31wZiU2WmlwYXoje2EwUiNV'@;
put 'QCZBN2tuRkx1WSpFe1U/OlhXYzNrc1U4WjVFUVN9Wk1LPiZHOj5XO31OVDRdQzspbzVJSl8yam5PKHAiZERiUmtgamxSaCghWUY3WXB+Nl1HK1ZMKD0sKkZ4JjBrZGlybkszNGJlJGovdDE0QS52XjdtNykuOTpHVy5eTV9TdWwoOHhqV1VYfS9scSpzLn1WI0hFUHNEbUx7fChXLy5xN2ssSmpA'@;
put 'TkNSU0lZSTQ8fURyPFhsT3BGXilCTiZ6UU9iQUcyUTI6LHFyUHs/ZlIiYmgpd2VzSGIieE07Z0JPZF0qOEZ4dkM7UmtkWkZbeGBKakloXT5dNCIkdT1KKG9gI3R8Y1cwbDh1Uj47NFQvd0hVcTZQMHRQQ05pPkAqbHhdXnpab0hdVixPX3dpXn18Rm92Z31WWGBoSHxCOE11RFJSNCRiVnw+bFRX'@;
put 'aGBCfm1AXWh3PlY9TlpwLjJhTCojUFo5MjtrXzU0STdrPGAuWVd9LzpVUXt1RDh0I0VZXjVGZmZxbUZrKXBbS3VTbSElKDs2QjZXM2dJWTVNTyRQZUouMCkxQHBLWSpmdX5UKnk0WDBKbn09WjB+O0hoZihuSXt4UmozajVBO0pTRU5ZT2A/W00wNldHbXApYVdFdFZhP3hGMzxyWjlRYCR5QGJE'@;
put 'OD9RZUdVYyIiOCZtTXlUcVQ2dG41KG15IyFzbCRVZVFuV0NmfU1Lcz9kRDApWVV+dyJDd31EZnxTPjIzKT5dUlldMDNJVHtfJDxrQ0BVZFZLdXRuO25GR0kuUykuYWhMWzcmdSZrQ2E7L0dOMzp3WGJyMW11a1tfSFFRaVBnOlhybyldeXFGbVZmdmRbSSZ3dkxdWUNbSTp3Jl9mLiNJezohMTBa'@;
put 'KWhgV1F9WkV+cmZzK1U/ZF1zXXc+cGw6aFMvPVBwemwmM0xkUmQqRXU8XyQhNix5U19GfCY7el55R1lxeW5lbllQdkFBdiRdKGFWKWsxcGNYQTJFeHVlPXdsM1RILCVtPTc9YjVnZlhsLyZXelljXmM7JFd7SlsiOmEhZlZ3XXQ1KDoqXzExPVJUUzNATFR6P0IxaiFyVE5SKkt0QSFMeUU1WSxI'@;
put 'S20sW2lwPX1QTV5+UGJ9RkRmME9XQD8xZiM/S2ZFYHV+TyY7SSFgQGIzQF5oVjQmSSJ9RWFVVThLZ3BCaiw+VU8uTiR1L2E2QEMoXVcuZlhdY3xUKylSSChLSXBSRFdHTGAwc191eUUwXzs6OD9+QEwzdEJjVTYkXUwiV3UrQnMiWkxpVzJUPCl1Z0srQiE+IyJHdURsPlY2LCxvI29gNVM0OTxT'@;
put 'RjZFMXZWb3cvKHZ3d3E9WWE9ell1MzNebTF0XSxhWFhVWm48KyZxODFWTXc4djhwQ3pZbDlVZWttOHR5eURWTFlWeVBMbTwoW2l+OiVDNEdkM3p1b3lSX2VgVSJjbGhdOElVWm9MX0lmcDtrQjoja0s5dj5NRSQlNHR4VUVJJGJwUEpyNVdPXjh+KUdqVSYkez07QUFgUG16UnB3TDQqI0kmRi5m'@;
put 'Lz5VMkY5fll9WC5fRzlIOW9oQDhPYW4ydUtOVzxiRHlgZy4kK3NqTjEzbTQ+UGJ2Ym0pZD1MVjAsfnlUI001ZGRwM3gwLEEufDhMd2wofHksdHtuXzt6T35TakNSR2ltS1U9KWUwOWY9Q25MZ0JJLDRJTXBnSnMjfGVifTI0Jjg3RnRwXyhTNi8wdkcpUT9qTFV5QHV5OWQqaVBKP2tzM1RNcmYh'@;
put 'YjlQVD9sQFpEfVpGVkxgMUgxNFkzaFs8M19maiwsKVdbPixmcnxNOmkiK008THBIRnQsdnhULGZ1VDdaZEZBPHxUOTV9cktUWDRCNEAxUilGWnhQPUk1aFk2SGJHeDciK2BqR0heSXRlaVkme1Vld3pgN1V8QzkqJl1IT1lWW2RPPy5EUCUsamFoWVhdaWlVdWdCOVd0cVVCTClNZEwyWzFAZVVj'@;
put 'XU1DVCFGPUpzNXtOTV9Fa2FAK2o7Sjd1RjEiLFtfa0x8V2N3QVQ3SCwoRUU0LlJXW3VXVC9SVF9LKHYqWGNgT30zZC5eaEReUHh5bWt+fjczUEY/ZH1jPVdkU0crbCU4OjxBKVZUYHEwQz5INyMkaFU7VXp1IUpZZy5VbUtNTj4ySkojV1hPSUdsN1dIZC5qSWsveC5pW1l7JVQ6M0hebDE1YCYs'@;
put 'OXlrPlR6bT9oSk8lSl8rTD5ePFFpSE5qZWRTTVFUcGtAYiNEIXc0JlVXMCk9c0pqMjNmcnB4UD4wSDtFYXJ0W2l2RXNQJHxUP3drJDBDeXNDLmQ2JWI7KD1qTXFCW3lpYnh+NVlwMGprNzh6T3pGRV9aPEJhNGVVWG5qOSo9MkN3ZTVJLFt5a3R5MTdjZkxhSSlIKlI/KFVnZDw5ZW0/bi44TGpJ'@;
put 'REtLN3Vxe047NXZEY3kmZ0khSlV4QnlTS05GVkgyVURlKUYmRjJOVi9gaUZPZlVgUko8V2spYVhPMT1UJG1zXT4kYSt3USZRcXplYUJyfXg6UCxgM1RWYXRAcTE4U0YvRHBpd3pHZ3BqOFRfW2hOPT9Jc1V6ckRkVSxGeitRIz9PV0Z+V1BBbDsqPFREKVIlTHV4QnNsJWBCTXkwd342SERqIV9n'@;
put 'ZCwmdWxuaGAkfFpFN0glTXEiRltXTGk3P3ZYcTYhMkwyTWwuI2pQRERUPnhbYjtJNVJLQXVgXWhvW0YuOTVbanklLmYoPU0+XXshSndoOHZhO0NDJTJMPChTezclcTpGcF1BP21UbnpYZ09gVmpDRzU3Knk3YkR0ZFpKaVJlY315My8ocWkpK1lmJC8ub1kubWVffGBoLEt3b1I9cjdfWTRjUkRh'@;
put 'JF1pLFsmOnhUJUk/ZlEpPSEzQj5jLjJZRn1yUSR8O2dQLkMqLzc+O05ARmhZMEl0RlBzQEMsX2RVfHw+YllgRSJrNUZAYzgyVnB6MUNJLkQqOUUya3tPZVB2LyNyWmszdlI6OjFqelRXSH5Gfnt4fEBBWzJTdSEjPEVfan1ZTDl7UGBlQjh1KiNXVykjPG87OWRNJXh2OVBBOj0jdyR4Z3lfc0xg'@;
put 'Kil5OGV5dCZsPkpPaXgyfWl0YG1FamtWRSomdkVbYjhlL3JQSVMpS0xmcWlhIVBLdD5YbEJjLFt6bXpbS3RNWCM/T0hUIkt8SjxeUEQ1Z2xBdjdIOD1rIloyTjFTYzx6SlhBcGBDNEZPUjJbaz5Xck9Nc1YseF5baFVqVj9BNHE8MTNMX2I/K3ElR0VsciNZM3wmTTVMNmV9d2ZbblFuWUU0Pys9'@;
put 'SUImalJ8Kl5jcTZ9PFkuYyskNno+JCEhd1loc0BwRnhDdU95OFcoPFRLOj5VL19XQWElQiVHTEs0Oml3JW07Nm9dUFA0THgrXTNXT1E6NjZtPjUuIUBkQjBuc2tiakZwTiVBIl12WFkmNmZETyE1M09OLl1lQSkpMTpsbH14Sl45YiNFOmtCSHdKcVdJT3lzMXpXeSEsdCo3ITt5a28paXVCPktU'@;
put 'eikpNTw8SWNmTEUyMUIxYlpke2MjL2FANzNMPlIzNXI4fl59dTAkN1hNXixBXXI6dDgrKT9zY0BVIjJDWklMX3xMQHg+Q15DO31tX21bSDdRO2pibFJieHJmSUlCWEp2JEc1VSFKS3J2a0kzb3Y2LGRsLmw1P3NiUD1oKm5kMmxmPkJlW0MpLGpFRihHNEM7WXFdeE8oN2U2TXMmVyMuNTkrM2Be'@;
put 'SHQsWXdEfklZPTl6RDp2fDFXK3FPW2phanRpPyxmZSkwN0xQOikiOjdqOnBtKX0jM2F7ZiF7TkooXWYpQVFCPi56X2hdU2F2KVRfZCxXQ01yZEV3ZGYlKWEpYVZaIXpGLmVxbEpaQU9XWFJUOHc9NUh5LGdYK1R+cUVfXn1hUWJ4OCZUeDUsfDVKNDlQfF41LHJAaUxDK3ZJIT5iR00pWkdiL3Zp'@;
put 'aHpKT3hmST5ZSnw+OHQ9U35sKUFAaiJNdCZXeHFQOmN2KT1eeFdHOWslWU1DWD5Efm5oRGp4eShqS0JIYGo8WUZSdTczJXZrayJpfVchRD10LytpX35NQlNlSWlVbWB3Q2BNe35TVD1DKlYkYWp2K0NKNWI2OUxySktLLjd+aiJpXnMlNl95QXp1dSlqbE80bHMuKz1MVVolSGVkdCR8OmkjRmM7'@;
put 'SkVDLjZATjMvdlR8cyFJTUlPOXhwdXVMQU5IPkBge3NTb3AlaiRRVXdGPEVGQi8oRUdkYjJ+XWQ8czU8djp2Z29Jd3FRKnRSNmY2amhKJmB3Qkk7TUt3NloxIU8iIW9NT2I0VW1UTnkuKko/QUVReDhraWI6QkV6VlpwKDB2UlM1dmxkXT0xKXBmQXZJOFY/eyN2TiEuSjg2YyRpQF9+QCMqeS5f'@;
put 'c31GMyUhME1+SWtfbG99XVEpczMxN3BWSFJ+ZjhfTF41Nnp2Wi9xTHdMVj55fnY6PCYkc0tZZ1tTRl9TbjdSWWwmc0U0WGI5Z0A3NWJeYlkpXmEmcSw6Q2NPc1giQypRMnVeVEMrMy48ckFDaChdSVFbcnZxV1swc3NFL0pJfWY/Sy90XVI0dEY1TWBrJWN3dX1ZLjBoK35KOTpCXyY0Y0lveXsk'@;
put 'MGB6JW1CJERYNE5rbUh8dCE1MyMpQFJjSShLN2FWSDRXTyRIVXk/fSV6PHNEQEo0Y1Y2KFgofngqeDpaVUkrZVhzK1pDYDshRWBLXko4fFhbWjhdZS82NG9acyNNSl8+TFdGMX1VKklSPiEqNiw6MjI/Olk0YVo3Ji95cFRoNEcxZys7Snh8dHc8MkM6SntjZCk/OnVxfmpXeipDfnBJZXJOTyFn'@;
put 'cXAlSD9yOHh0fDd4ckFZbV5RI1U3ODJDPX13S1pEUlVLNXlBeiglOGlAcj83ejJrJWF2ci5FazE8VWcoPUtsMnEmRzBPW0tFLCMqeEdvQHNLTTJMN0RkL1dqVTYpUUJuNDkjOkp1N091L0NYa1QyJig3ZnA1aCo3I3YhI2tndWBQM1BFXSg7Yzw6Tz8ySE47IVR2RnxVR0RAfW44SllqaTROIz5M'@;
put 'OWJUbFphbG1jNzBIfjZWVTdFWEhfRT1IaHB8ZDsrcmA2QU81QypOW2FDKiE9W1RtcHdIMVolNVJhcUJuOXIlZmxma1VOeC5FOTIhOnN3UE5xK1ElWiN4QHlRbV1jOVdBX0hfbH5GQj9GfmF5THVDKWVEQVYuJl16KXdxWCsyVGFaUG8uPyNfVXNYOC46LEY5Pld7TmEmXVFtW3JuZ1NJKSRjRj1H'@;
put 'MWE4WFlrc1oofG8payE0UHVZLyR3XzxEI29mPnptZHtJdjVadXZNXVhTZ2pnKXBNQVEkN2FYUzclPDtFNF5+PXZtXl5WNElBeDxRXUguPyl0ZSZ5cnVJZjMkTEMhOlJzY35nPFRJVVg6QUsrNUFDMSU4emEvfjF6U1t1P1gsMnBZIWw/Qn1gOz84S2MwSnluJXp+PnEveCEuOSZwI1F+YUhhPDM1'@;
put 'UE8+T3d4LmpCPXlIKyNZMnNGTlFAckY+eFR0QjZKOVRhZkJvJXchTEBQazlVaFMzZzNobGEvTGtvbTd5Mj5abiUxQjtoOjx0O0x1ciwmTFEpZWFJWDZpQDZvVTJDfHNVa044WDxsdytOMHtBJUJMViR4TGBGK29aekI5eWZ7aGg/MDhqQjR5ciV0cWIlSkxtNnpYYF5UbChmQ3hDIz5PVj84Nnw+'@;
put 'P25YRGUoYTExKkUlKD8uMUx1JU1Ffn0vKmckK2tmUEFGRyNBZyNZYWpEVTduTFBzKW9MWntORi9LPEghMiNuK1lxbGBOXUJbMCVYM2ovTmw3az1oPytJTDc5KkVXfDFOWj1XfltqejNKQCR0SzViZF4vZWpJJTtCTzdMVGlgfXlKLjFYOTNCbS41fSx1dkt5Z1ZpMVVmU2kzKGlmJTpEMjJYN1hi'@;
put 'Y1tAIW0mI21GZTguYCk2PlIxI2o3KkN3aypAYzA4czJQWnVSVE5NOkR4enVCIz9SLlYpN1ZoPiE6PHFfejA4filLdXRhIjtNWG4yTFY1ISk3MFtsYE18KksvRUI/RVR2S2FBKzc0QXN5XWpGWlZScyxPNktRPExlP2lVUVpMfi5RNyVxPVRLbX5RbGAuVXFfV0FGPXlKTD9gJS80dUhGQy5yRik/'@;
put 'RCwrX3BRUWdDcT5Yb2pkbEczeU1oLERWNUZpbW8qNE53O2pnXzRVcyErUSomKHJAVnVQPXUoOSFqcjxscVE2RnpPRyRUXXgvPm1RUkMpTFtgTlFebUE0Z3p5di4uY2YhTWViam5UWXxOMWwrTz5DJFA4VTZDc3U/Ln1TbTJ3Q0t2JnpZKkhoSjt7NSUocHo4Nks0Kl9HKywvYVJ6W1MudVgsTl0x'@;
put 'WEhVRCVZN2pjKVh5d1ZMemIlST44TH0wVndRZFpSI1NxeX5rWkxLKzs9eFpnUXMxOl02aFo8VmxhNTRmdXc8bE5wODx+fmQlVzhFQnNObDRsNVFYTUVwYEZIJHVZU0UpZHhUYk90fSlnITIuRjsoXyVCNnN+TmVmYjhMfEFLS1suR0FeNXtqazd3YElmOzpYRiJlRzk4fWBIY1k2ei5hVy58dmRx'@;
put 'UHY8cVlEXnNHLHl4LHZFfjBmZCx+fE1wNjs4c3JZfFRSQTdKRUVQYzAzV30zSjE5L2NXVVlXU2tWanBkdD5HRFVfeDtQUC9UJE0zXWxaY3A8Q2MifU9pcyM7dSV1ZzljYnJmWnVNd2d1MTdsI291bTY7aj0uSnxzQlBfU1pHZlpyTTdfenZ7L0hEJmJ9M101TmwuMCl6M3koQVA0VGRHUWpoPWcj'@;
put 'WGVBXV4xdDZTIWpuMkt3I3BWSi9TNHsxYlA0TzJAZilLU3R7TDhoLGQ2Q2ZgVmlEYFB4KSNweT5iUS5vOjhVT2EuRU5bOTNLS2ZBZmxdbk0xY0U6UixbV3QzQlpIOEt0U30mLE9HN2QvNnc+eGheQV5VR2hXfHhJSSlgeTZpSisyeWNRN15kcE5NWWB3Sl0/NT1FNjRaL2o0O2VJXVguVCsjZShe'@;
put 'TWs8XVRPR11PaS5bYn5NJHh7ODhdQyZUMH40bj4hamlWKTp0Ol5DRVlXMVFxXUNEK1lhTUZOJTVPKGxNZG9BUiojRG5+bWEqSlFHaCxBTXJjJFtsI0BNeTJITjhhRmxMOy9JPUl6b1chck1gSGVxNkRhfHB0OnIlfjMuTzdXU0NOOEgoM3Q2UTp5ez9ELl5TcnVGSzNxb3RaTWUhSzJCI310cW9Q'@;
put 'JnxzI0wuVTR4ZlhjND1RUltjXTRUSU4qVm4jPmdibjh6I0ojYyt3RiV2c314KnNYUG4hbnBNWWlqXykkUlA/bU9GYnw4PktpeWl4LnFfdHxRNkg6S1VQNV0sND4xZVtXWXgkIV1tKzVbKXJTcitoLipBcWpnMlc0THhrISZvWUJTcSlhKTRSVEklMW9dfDtgOG9NaD1bQUlbOnFUVlRYVmZMT2Fk'@;
put 'I1g0O1c0cWYrbiVjKX09Zi56OT1XOWxtKT89d2tEcHFaWVBpWElDenUyTzp5TlclI1lhMjgiIjEibSt0NCVvOzZvTkokRkEzRU5UWFk8VD08OW1KT003P0Q1Rm8iKV1ASmJzIk8rPEJ+e2xFMUFuTWwjI3htLHxvKUR3VmVtNDJJMW8jYmxYMk17N1ouNWhqbHRDWEFZKHZ+S1Qvdj92ZW1RV04o'@;
put 'LkAyMlloLj9vaiR6aClUJGsqMSVjLGZ6byxFVit4eUB8KTRLSWZjSUBEOyM+Z1lwLkM0LFhQQmFDLyhsLjs/JkhTOEQpSD4lWEBtOSRVaSl3RHxLR085cC9wN1VBSzFpc1ZgL3RCdV8oYHd2XzJ+NjwmSyNIT2VnL0p8Y2xQLH5ha00vbzlgWGNFcnVUY15WflhHSz5DNXxVOnBDfWdOVCJKOihT'@;
put 'ZlZgNklATChDTUtwfE96aTl6MnZueU55bX53XjBKUikpVlBaT3ljOig+R0p9TXQ1XT1sU1c7cks5L3VTV2lWQT9EMV4kXX1+LjxRckwrTmtFLigxNUI3UkQ3IyhIM2lTY2l8UFhmZ0syOUA5bWY4YmFTLE1VUHJAcUImfH4lS3xDR244RylOXVpyJUlZUHZgL0tmdCNoQitKKns/ZFJUKVRiZk84'@;
put 'bW5FSCxwWD5oWD5jTE01bXcod3F+VyVCa2VVRzRpc0hKRFI4N1AxbEF2K1ZzYExYMyU6WG1XL3xvVldsKm03cnAwbG0oYkNQbD8kZjp2ckBtI0c5ZSZxT0NJdl46bD10I3BXU1cmOWh5PyRDTlVvPjxkXWM5TypRXkwhXzJVOSNnOjc2bkN6bGJEPTQ4fWpJQ3pWcWNQPG5EenVXXURjRlZ3VzdJ'@;
put 'eEJEMk94MH4weT59b2lNfGlVQjkoc3B7akouTFQpaXA2KGp7Wnt0Xm41JU9PQE1Wa2NhJVpDNXI+Z0ZbPmxoc3RbSSRKblJLPzdTO14pVXo4fkd5dzcjJWFUfC9Xb094Rj16PjF7NC5GbC5ZOVVlVSFhVCtFKlcsVy5fWG1rX3Q1dlIpdj06N2JZLEZ6U04uKFtxfHVoa2B6XSxdTVBYbDosUD9o'@;
put 'WVMyKDRzYEZ5XyVgZlZAVzNJOzA0V2crWVlnM35PNzVrOTlwVnUkWXlReTAxWFB1MCVZXyMub3lLflZ+LjUuVnxbWE1CVHxKPExhWUxtVWNOfkYjTHddWU16VDo7aVFuQj1NVlYjSE9KPnYwO0ZaRXB7RFVMfCoyKXxvPFF4SzY0TGUsN1ZiSF41Sy5TZk9dIkdOQklveWZmTF9VdV9PYXdWTjtR'@;
put 'amRKO29RK10/OkIrLnN7QXBbbnhRSCUmcWs0SH41QjcrIzYpe3xkaXs3cSxONHUpX19MYjEwNGB5KWNGSD9dKnRPTnlmKmEjYSJjcVJUaVE9Ji9KSz5QUWMrZDE6QW1iRTw/KiFGMFtXNGlkWzd6Y1s1YEowOEh4UVp4Rk56OTNtbHdjci5FN3V8KTlrXjx8ZDtOTFosSmE5YypTU1Z4VEFzXkdR'@;
put 'aEszOH1uR3pJVH1ANW1IQEpbOiRkYkZMcF1jTCkqeGFlN2VCKHI0bGNlTjxpbnRRSF5XNEk+STEpWzdXUl5BU2loZmdkKFA5WmtFYno4a2M9UUQ4THtNdD4wdjVOUHJxMkl4XkBiN2kzJCtoNCNGWWArdFpmbjdyUDNga25Cdmp1ejw1JCllWUl9R2tPN1gvalAqVSs4ZypZMnJPVShkKmpVXTI5'@;
put 'UUt4NipgNEU4TWc4eGZsVT1gPz0jXk5AdGpQY0hhMVQxIUtxeXZqeERRd257Pmg+fVF5eVBfNT5SK05EMW1ZeHh0NlkxTyFNRU4mdUhCKCtLW3xhaTk2LiMkdWI0bFhYKCVHTnxed3szL2JGeUddfnNHPEt+M3FwRyp3TW43XkhITFtKV3IyT1NRJXlEcDcvQCg5YygwVjNzfEw0SCExKCMpfD9D'@;
put 'I3VWJiMzMTVLQyU5T3JfQkdyc2NzW1JAajs8YXpqbWVvaTJ3S3ZBRFcjdngqVUMzPjB0V0svPXU0M0lvbTJ6Nzw8aENdMFJEV3BDSXVucEdHPmJ1OHJtQDQzWkVGMHZaRVU/V21oPWBvJGpeYGZ6UFh+RmRoWW5uOXlhSHo8cHB+U0V3fWdRITdROU4/TGZtT1ZydiVAdGloI2hdN0Flbn4lcGxW'@;
put 'Wls0JjooflVeSXdbbTZJY1lFZGh7ZG9MPUB6U2s0R0Z1TFtxM1pUPy5NTj8ld2ZNJiVDM110U0ZBV3Z0QztoTH1ke2tnR35SbyZ8WyhMaHowODRnN18vKjlJZ3R3d3FOYEVZSlJmWH5FIzZ4Sz5gM0xxLn4/dXtAXXBVTUtMe31QOlcyW2FUYl98P2ouJERILEhPeHhAaWQ+QFZmclIrJmYhPDhu'@;
put 'LGQoNV0qcW0wVTNJVmZlRnElTDtGa0xhZDBVK2Jqanc0YTBaLFFgdHI9MFcuaGdYUHpuQl5mW01yWnBzI15aVWlzMD1vXmA5X3g6bHdJKzJ8QFRabj4leDI9Tks0YWxtMXhCYT1RQjYqUHZAXz5oJVszMkVXIS9IUmlnfi92Nix7TWJvQDY9UEhEZ2J5NmlNIk0lb2kjVC8iOXpOO0M1cG5uQGhQ'@;
put 'fT9IYkptRUhRQ1tPKWN2RWdkM1M9flUhbUU/KS44UmQoU0VdMHdBKSpgZiNRc3xtYjgpYHVUOEFEOz8+aCo1OHleVlEoM2M7azc+L0o1ZCM6bjlRN1J0byttO25dc3tuc3JRST9xJDVHSUElbWVsXzc3IlpmP2RyQlNFaWFBcmtKbUtJd3gwdEVfWFhydHkueWIufTwucnd4SDcwQmwqcCpHTXQj'@;
put 'VTczez03S21NK1ZaWXxgWlhYWDlMQlR6d3xfTDVfQDh7bEE2R1QoRElGWzdESSwsbCs6UVJ5cngsTmZQX1FhdmxzUCJMPEU5N1lQWUsyeX5EfUImX344LHtiVlZfVXJkcGBKTkJVMkZsPl1YXUZDVUdGcH1XRFdiVUVQS31ZVC5+Z3RTIXIkayhQSHdLbCw6MFcwSGIubzVBMCNZfExDW34xOWxe'@;
put 'IS9lKTpJK3lCcDBUfjk4IjFeSCllMC4yLmJhN25QU05pZzQ/aGc7bXJRRUw9RjNdRiQjXjg6JnhmPitoN080ITRFMHt1JSErWSR0MjVGSCshLDUyY3BsJjZuIUZYXz9XKCImfjwuQmgmS290VEg7IjhXfWdtLE9eLixGK3pke15QK1hyT3FsI2paVj55RGx6YkpRSHYpeUg0fXFFW0REP3A9ajRm'@;
put 'TmZqWU9zKVAkVFk3PmU4czh8d28lL2xfTzxVLnJkOF9HSyNWKCh0c2tLdlszY11YKktdNl0rJE9FRkx8MjNwJWkwKzFjc2pJUT1PMTUhXS9OajQoRFFOPVZgbltGRz1hLGhELlZZTXs1RWJtUlBeQmp1cDs5KUt0ZVhqb2BwazxhRl1RRHN1X0xpUWtsNSJzY2lPdks1OS9aRE5xKkg4Y1t6RjFu'@;
put 'eiRQLlE5M245bF5pQFFeWU1dX0NXZGRTbSpzYT9PMG99NHowKGkoTyh4REhkPjhfME1VQHczUnkzaC9MNW0pcipzcFRKc01oZWBkd0VlSDJGeEJtUWBhTEhOVj4wbWgjdXVDNjZ4NzNwUSFfIXUpJlIzS1pBNk1tJV9ZMCtrcEJhKChHaDZDYENEeEdTSzNfRyZMbUs0ajA1X1djSDgzJUppc0M+'@;
put 'JGZyLChtPFBhMVJqai9rWkB4UUA0dCJMNXxzcDREdXUlPi5lOHpRI2tLbEs1L0RNdzpxaU5DQXoxSlhPKjB+IT9uJTMjcGklUzlXM1dRbGZYUjNIPSQraX5TN2gvdVRyV1R9RkpqWGB6MDtQQTNuR0JmK21YM0BrPSpsQSlaNXs/VVszWUopOHNLMFdBUDQhN3A7fSxrXzVfenswQjtWaXdXIWVH'@;
put 'U11hem0yRjFWJSVgW2UqfDBVZz9OeCE0Yj1qVV4zKWBCR0JBTHJQZD5YejM3XW4zPTQsMCwwSVFgKjp2OU4qYkl1dURePFk0enNeQyE+RzBNKnhvOm1CNiQ/K2M3Jik0JHpoVkN8TCY8djtsV1E7cl06Im1OUH1NVGddSTAuNnRlemVBTi5vQShVMH0uJVtUYXZRbC9JQEdgPGhQcE8uZXA7KDJI'@;
put 'Pi5BWG1De0p4X30rclgvfHkuelpJV31WIlAqOzxFcFIzaFVqNElgPyxQX1FHL0xla1E4c0xDPztLVEJLM0tpLFQrfVdLblhqeVQhajwwRSR5Pl1QNUM4VlhIYi9NQnU2WW5UOmF5RkplL3c2Zn14L09LTlkoOmBoJTxHQDRMN1ZPSHhyNEdVRyo6OyxuPGNOdExHU05LfFo7YylQMCpDUkNaTVgy'@;
put 'OltaI1NeRjd7UUVNdEJORXg/YXNoaygjSlo2XzNjTVFSYnMwV15hYHNtYyE5d04/WX0/ZiwjKDN+ei9+M245TDFeZkRiaWskO0haJEt3NyUubV1ZKzR5WEx1R0A8K0lEUlljLE1vW1RHaCVUX0U4ZXZRZzpILHs7e1g3SmFeLiR8WnVjRmljPnZ4bEhQI0IzQzNMNjFOM3sqbUwyKW09NEpNOFRW'@;
put 'SXQoUlVbSi9Ye11rITw5ISxXYl5qaklnY3FHKD1hfTFEO1MkR3N1U0ZXc0xdbXQ/alYid3QmaEBtSXMsVEQoOWUuYkZ7MkBASnd9cCF7LikjKXJmek11cU1LL2k1YX10LDlFY2RLUn0zcG9FZXl2SXdnRX12alhoN0JuRFFgdUw4WEZgakI9Mz53XUo7KkBTfXU/RV45TzQhbGtHdkpEJnFRfCNv'@;
put 'T0coKHR3MWJfXm14IylrKWhYS2Q8U01KVyR7cFQxSChtO3BeJiFPUDcuO19DKH58PnUiKCpsR3pZOUlGa2lzSXIhQE9OKUklfTl0U1tpRmtuamBtdFBtVzdmQk1ANyYwOnV9QWA4JFM9XVRlUXkvfS4wKz9oJDxWMkQ5VEc+OmRmPVVvezNEYXorYWBYMUVnfE05OElbMCI2bkR+RkAsN1c6fkFz'@;
put 'KDA9dEZqcWI9OSo9fUhmfFV3JU98KUw4MlZeRmJQTV1XdFtnczF6PnxDVjE5d1tsaHRkX3BSazYhejpjN1peJVJqaUVIbT40THhlNyJlTGZUZjUoYEQuanRoNkA9I08wUylFbTcqUD89ZHs9b2MzWClmUHd1WncrUyRdPyN2NXZ3JmY9SlF1dCpAZy9NODxMSFRdZmJTS006VDhTIz5Fe2dONE1T'@;
put 'XyIqREh9NW8hejM7P1YoYzc8amU1bz1Ccjw0Nlo6Uyo/KDZqeXFYYW5MY0RvOXcmX1JPbkhvMHUsJShLWXZGODNBNjpqNVFFM2tWVmhsKz8lW0JIIXp2OElrbGAxUWVJR0w4aXhCeHN8MjlnUWBeWEdNLz9ZUGxfcVA6NGMqLyQyYGh1X2ZnJnI+JT5eZ2xUT1ZHXWY5TTUvIW10Xm1DQzhTeG4/'@;
put 'dFhmZlQmVTJLaWQ7cjYkaiJvRjRublVpMCMzTDc9aFshc0J+UnFzV0osIkMjZGF2NSlIKUJSPTd1WHk9ejRMRjo4VGhmeTJMRm1FZU99bE9CXXs3bXJ3Vk1zYmlydj1RVHdKLC4uYW87TWd+NSU9Uy9UREhvZTh5cnhQTmZTSSlsJFtKZDxWNHNKcztyITo0dWJAR3FxdG9gRDtpX0Z4Z1IzW01b'@;
put 'QG4xVCRBP21JTHpWckhub1hhJTV8IiFPdmhxakQ0fit4ZlFHKT5Zd0RAYnpZOVR1WT1UMD40V1lSIWRRPlZfcjF8L2EldytYMFpgWEVzLnFnX3lzamtLIkNMTWJscHErZFciY3czckJHRE1kbyRsZHpHZT1Ed1BGRXJteGN7fl5FZ2tmKV9ZRX02RlNrO1soI1hMNnpTWnpSdGxmQV93bmYxLHo9'@;
put 'YVhiJCRRTX5WbT1JJDZPejlvLzY7ZDt0eFY5YEw8NVM5aGMwJEZNaTtPbTBuLGBJUXxRVkFfIW93OCp8PEk2bjtId0Muc2coZG0lQjJ2JixZOV9tSih3X2gpUl0sdmgrcVozTSFHYHRsJWlZLDVte3YxTmgsI1UyMGU7VmllKFQxUDYoVzJwSE1Nd08oOjNYWDgkUitSTSU9WzZpOVJiWC4+XlRB'@;
put 'OjNJenFRbzlbLHFfL3dGJkRJbTMpU2R2ZDBSWkNpYzlIUzNvUChtKG4kV0w/Sm9OIX47NUxnR1FFPiQzWGBNMV1TUzVhJHhqPE8jMWBjakgyS2Iial5jSWZhRClXbGJZTlJ0ZzJ5V2lheDZpNGchP3l7amwye2BPc2tGPlMzJXRWWSM3LzFSa0JXeCNGVT41YHZHWntFeyswQXlmNFp3d0w+IUBy'@;
put 'VDwrS2hhPFAuJmxvO0Q5SG9ySjBva2F6Plh5NDU4Jk9NRlgxRDF5QGFQdEA/RmNxQytEPltha0YqKnd7WXYkeFJ6UlBWXlFmST8ie2JsYXhxRDtAT1FFWThbSmB6WFJPKEprTVleSU4lc2tyNC9MXUwkKGF4PHN9QEEpdX49enBORip2TTZudWJXdiJUKGNQbGZ6ejdiQHxSYCNtSEVJMjxpVncp'@;
put 'I08pQyp2QlZSYEFKPS9XSVBvZWZsLzdiYD82fC4rbll1Xmt0amcxZXA5XTNTMjNzb1ROdG4qJFlCNjZ8KDpjV0JuLlA2OyFUdEM2NU1sZ3gwfT9JaC58PV9qfnJwZlZuJGtVR1RjPCRGV3dMUiYlKlprczg3UDg9d3xMWjlpI3AmNFpVUyshbj8iI2MpPXlqVEAjKWojd1ZEWUB9Xzl7MUl7L3dG'@;
put 'KGo4JUAuXSY4Y0llRGBYeURnaFVVQ3ElcmRmS0lNQCFqbHU5OCtSRlBvUz5bNUwzS1dxI1BQcTVJWVZXRF1KMix6cjBiZCEkTEZ2Y00jIiN2W2F0Vj89YjprJDMiTjBNTSRrYERVPDNJVW4jaXxvPVUqIl5RXjc7JShPSF9fNjVpTExTM31tPEV2IysvX2R9IiQzaWp0MiRJaFhIMitbM1dzUmd4'@;
put 'Z3hqaW5xT19TQ15GMXhdcVolTXszUTJwM0xmLy4pRlBKQSJPeXVQMFpsUnZIMVRZO3UpSTJ7OU8wfGNiZWtOeytmfX4yL0Q1dVl6RSo6fW53QkB1T1MwSzF3blphdEdEflskQltKWzVzYilZdVAjbkI2Yzh0MnlvTUYhQFBEWHAqJiwpN089ST91el5JQTAyN1N3QUA/Qzt4KjNVYClPJWN8Njc4'@;
put 'Sj4lO21mQCpGR2FmbE9UUWZCU1hUYHUzZmYkLigmKWcmUnpgNEttRXFFbHpCRFZwT3djYTZRaGJHKVgrWjxFNjxaVkoiW184XTMwfmU0XTpHQEwzZ1ZZcUkvOjpRfVs+Ulg/LE9zS2lhVyFSYzdqcClrInkwMFZxTik/a2x1Lko7MFFbVlgkPmdLL1JSKm5oOTlqZl9uOz1zXyUrTkRzIjxhOk0r'@;
put 'fTZlIWNCWTMpPm1vLEFSKUE4OCE4d2YldilQPlgjSDxKREdAejcwR2xhVzI+WWtWe2NUO0Z8Kj1QXms4Zm53Zk05dGgsdlMlbyJ8SmpedExJVj8xT3hFanxLSjF0KnhuIUhIR1RXZ1tjTURaKll9dCVCLm1US3pQTEY7YFhfVV9aOlhQaG1Oa31SeHBZY2dEL3IwL05PXmdman1mfkNGcD94Q0Nl'@;
put 'bWVGVEd9bGZKPXlpVSh2YThgYXhgQkpuSU42fEBvP1d7RSlkUm04YkIzaz1ESmVYWlZka0ZJXjo5KipASmE5Zip+UVtgWlpzanx8Wl4xJjhUNi9dbHRveVBHIkhLYnM2SkQxZi5UNXAxfnpIcV87YE9EZSg8YnhodnxCeEF2JX1CM1ZnSXlJPC54SSRRbzgwY3F7ITt0UHA8V08wRk4uWCg0OTdi'@;
put 'STRAaVg/IWNuOCNBanF+eCZ2fkAoJCYhPmRMdl46JEgyOzNKYFFeRGNlTC43a0xSR0h3Jm56TVBrZjo6TjEzMThvclpYVm1UJCo8Qy9WYmNzSD8lKyQ2eVApUCJ5cnJVZltNZ3BQeGpFTk41e3pzYml5NVpeVCImJGAsI0lSSmpJPWpxWFRfbncxaWkraj1kWz0landFYnZTTFYxQ1dzJmFNdXs2'@;
put 'QVRfelRGfTRWO1BZMWIyKkhwSTxZclhVeilLOTVeTGFddTE4TEFna1lhW1JCRS4yM1VQJkg3SHE8eitdVWEoV1d5M1FiejgvQjcjfjpZWE1+bzV5OUQ8PEJIZk10OjdgOiJsZkk+NXNXflEhR2lGJmxMbylNWCNVcTRZJTUoNjpZcmEwa1I0bUpHK1NEMlNpQX5+SjI1QHZ2fT9geDZbZFs4Nmpf'@;
put 'JTp1UU4mMytDPkZLUG9VfEglaF5tNnovWytjQVFfUCxqQFN9cXM0QzJzMmdXdSQ0a04wY0YuZXRaI0d0PWZePz5HW1FofG9vI29JeFM8IXsvNUo4Nzl0XnZ9SkYkVV92VSNWS0N7PCZyYWtVVUxiK2gpPGZ+VTFaaitvOzo9JGo3aCxzJGhVVFFESWo4ekZxOn5DcWdsbnRhW1RxeXBdSWJbQlcq'@;
put 'e0I7UDF0Qm9Xe0A2WiMlbitiaWZpIy5ISSZgPCx4WDdLQHt3eEVocDokNCs2M0xCUj58N0cxZy5JVi8mSEBVTlYiI3MmIyEqU31HelBQIXRJbW00VnlxbjB+e05BXyJafUwuaGQzUHJ6LEY+ZU93UCJhfWcrQCFgTk1deH4uQm5dT15ELCJhengieVRGWlkzQjB8OnVtcCJnOHk0QnQ/Ty5pTVRC'@;
put 'V2VPMVh+KEg4Zj4ubSRkOns5a2RfY24jQlthQHJHaV1WOF47NDw7TGYiLzorJTs6U2w7dEkjTHtqIj0lW1t9QT1nSSI4cVBSMDNuNU9CIU1UIVhiakN0I09ETFUpbS5YbU95KHw7bWVzIlYwfkt9Oz97XiYqOEYvIUI+KzVMLFhGdFtMc1lmfnAhSCtlZlQhZS5GeWJMRnc6TFg2YStFY19OcU1w'@;
put 'X35pJkIwaz9OJGpQTGZNNTAqTThuciVMTnxJflNYI1hFI1lHYlBiK08/bEZSZklzPlY9fWhMezYmQHtVJVRPQHh8dzVFPFQ9RyxOWj9TWVo1eDQjJHdfVCUrS0kmKUl3KWx9dGsjaT5jTV07aVVUaHVIJEJJdCl5cywkdDxOWEtEWGZjaHpWOl1LcV0iWyRDfTIrVGpuTWgoTHVsPXBkVSsxbmRW'@;
put 'UyxvPlNSVGVQZihvSDN7IzRPLGJGY295WjVzPVtFeTFCXVRaIXshKiwyWlNUJVd0PUEwYjQmLmY6JT0rbWM3XVE/JkRHT15Na3d1VVZCPkVqU2ZpSyVUM0VYPS40KH5WbXRCVnNAOTJQMmxuR3lwe1YkTXc+VD1xO304aHFJZitNfGw1SCtVaT1ZX0Q6L2h5KTs5eykhPlJMOSt2K24yJEI/ZG5Y'@;
put 'M1JKfSo4eGRGKCU1K1JmMnMhPWE8W3opekokRSp0YmlnYC5wTVEiO3lXemJKQnsrNFdDNjVwdjM6NSY/alldSlo6QGpfRjxFT2IwKVdRR2REfGY3UmJoW1NwQ0crR2ZUYyZsSys1LDlxayZwMW94KnY/LDBGXVZvM15eTCJgLj8kZD1ISiE4STBQXmx8IVdkczhrbk5KJWBJIyVsRXkkTSw1SHZ6'@;
put 'Y3A2ZHlSeVpHZWp9JE5NczFrXTApKyQyXV5OfGRwc2ksN3NtXk8wU0RUMHowW0ZIZzZLYHlWOUFBO3ZMOyRxMzpZa2kqd3Bua0YyJSYkVDd6Wj9XSyFHe34vV3IxNEsmb2VMcW8+SiZPY2lbQ0leN2JCWWU0PW5gJlRRSHZyZClafDd1PTE6fTJedEs8Ly5lN3VXYD8pW28+Ymd2LExdNWhAJCYo'@;
put 'R2ddWCNeO1RYbjkyZmp7VT5Ecm5tY1tmKEQ5P2VpO1koPjN9aGp3T2lXc1R6QGReUjVZI0xZUHtTLHpgcHI6Lk0hJVUzeSxKWmhPVzFba0FlMjVuV05nOS5IQVY7SW5Va1hlXjloOVEuNG87RGAjLiIpZV1QUC9tbEpZeHxoP081WmBPez5JMGhMVEooZnV9XldaI3hSSFh+emd+RH18QTJ7cTxj'@;
put 'VUV5R3kzLGZhYD0+XUFyQWxpIU55QyExSWdxPU5HZXklJXdsWnNwL0BaZD8wYEdbPVorN2xzTDJ3IUszI3duOEJLQnxsakE8bW5MN0swJVZzSnFXWnUzKiouNXZxdDxefHZOIWZKN2khQ1F2MSsmZjVCVjBNNU0oWU5VdD5+KzlrQGYiXX41ZzF7MVleMmEvKSgkWHo+SUVMMnd2Rzk+KFcsQmVl'@;
put 'eTc8LkxxXlF8ZWslcysvTjYrKSNhSGhGRURbYyZ7Wn1XLHRSI0VYcT9IfVB5VCJWJkw9SDpeMkckJGNJeGYhZU9aYWNhOGB0W2N+VHxGTmJeNWBFJncqNFNuNn07aFdWUk5XUjRNUXN+Ql8welNvYWs0fjB0UmByenFYSE4oTTQ2MmAybGJqXy4jNSM5cSx0TC5aa1l7Nlt8Tl9lRWBaJWFpfTNO'@;
put 'LDx0NGtZS2w6bm91LE1APHNIaX5MbV0uPjVGQ1prTiRMUzN2R20kQkdBenhTVlhzfEF3IiJmdyp0MlRFQ0VJaHNhYS4rPSN3Mll5K0ZSIkUrR1BCVHR2MiFUeUhwYTRAY30uLiJpWW4jZDAkQEA8bzlbYltKL0xXXzxMZWRhampXP2ElUWIjOHNQVHEjRy5AI0NwX3QsRSUvZ1JrKGxSOHVmdU0u'@;
put 'aU8mTnlveD9gZSowey5oYCFqUGRuJTlYanF1dlJRJWcoVCtGWEFdJCF3JFd2RHB3fiVpOj1fTD5xaVdudnQrV2ppQDB8OlAjRzw7KGQ8RGNPUEl8eSReflU0K0JyZj1ieT1KN0F3T01oQUJlZEtBWEVDamMqbmo0blJEelBAPitXbUk+Uzlpfn5jXWBvWXw+anBYd2g5PV9lPVlVczt6PE1lejdd'@;
put 'Y0lMalVaN0ZCLjlKVk00dDVeSX41eUpJQkZaIyNpS2RCKlVEZl1sJCoiQlU6MXB+KC87LEdyLH0/TXNfZjt3PnYyWVVZU3RCIShzTW1MOnFBelcpNWxOWENAZUxRPUN1RVQ2cDp6eUtNOGsxd3o0Nng5MnMhc3lvOGl+all+Z1txWDdvQSpQWm5kfFJIckJqbjZ4bDR1TiJ8fUpoYCsrJWttUVN+'@;
put 'OSNEXT8yMSJDKnMrS3UoUmN0fkE3THV7YDBnZmIjNz9+JWkrYUFNaUhMQE9IUHlnPi47e3pCISQwbTooW0FYPmliWzlKW0A2YiRiS2khb083KEJue155Ij1yPDZUcm1RMntBPFtDKDY3W25HUFBLPFtBS0V1fjoiLDJqbFImVCoqKChHZWUmWlV6Z1dydS97Kj89ekhKR0NndSxfZTFzTXBCM1sv'@;
put 'Tm00bVdjUDNTLlE5enF4KkclPzRGMThkezlDMnNFLkVgVGxtK10sKXNuNWE+Ml9RU1AzcTtzbiw4MzRtWWVPc2Q5SmFWPlZrKVtaeTI3ayVwcXMjO0goZWhzKmxtOnJUYyhXNylWTzFgKDNFSW9OM2ZRTGt+VmthLnxdeToqRjApZz48XjpxQ3dvW0o0fWJfKihuNzZKcXUrYUZselBrOjA6aURW'@;
put 'YTsmUn06dSs+T3loS0Rfdm4pTVFIKXo2d0pSK1FPUjBEY0RQSzxFayh3LkttTU0pbGpoZyFkMUo1SVg1enh6Nz15a0QsPUdUfGs6WXRVOmpOWzpZIUZDNmEwbDZwVmclck1VT0smJj1IT2pTUj0yVXs7Y3FjISp9ZlUubFB9K0JKQVdXSGQqR0x1MSl5Vj9ZW3RveCReQXpHNl16PjZrcSxJNVZd'@;
put 'e3VWKHJ6NEpOWDpudG4kKCMuLkxua2swe0k8Q3h5UVlEdzhDcE4+dWBaMSxVOlMvclZoVVplNitDK29TeWN5K3JrWDJ3MXApfE86V2M7QTNXP1Y9JkVxSUI1YlUvKFFFNmFDKmk5MzxCPSlHdX1mbz5nOFgkSipKTFI1NW8maz1rLERgbFlbZX5NanZ3ZUlMencwTDZecDZSdSw+el5gY1teR2to'@;
put 'NC8/ek1gel8rNkRVbU5HOE8sOEtAez80UkNzeTpSXSM1bnc2Rjp2WyptLyNtJXdea15QLE1VN2B+TD1nRF8mKHwjczZ0KCp1ZVJaPnVqaj1XOSNYeSopPkVhcCpxd1VhY3JgVXAja0oqREB3WmoySEQlIW5Kc3wjRUF2b1AsZFpPJS4zPmQ+SyFqMDthIyhMQHJWTERtRDBfclJ0fnAuOjE8VVVt'@;
put 'QjV4WCVnQTZkJjloKXM0RSRZWX0rbzBqcWgsfk08PDlsSiNOUjU+ZjpPKlYjP3gzKF5NOTl6Pi9HfWJpNmMqITZYZTpAVjZ0d2xndXNaSy5bdmUkXnpDcSNvbFs2IlJBSVN6d2JvPixgWlZ7MlhqUHV5PFZZKlU+NXolMjJ4azRTUndsIz8lWixwIVE3JHosK1ZUP14kUSRwRHJHU3g2QS43XXs2'@;
put 'TGRae3t+en1WfjhEVm96TlNCajlXS1lPZCshdUkqQWxyamk3L097aWgzPyEwSVlKZXNEXkNzZWhQREJYTEZORFIvX2kzX3VNVVRCU3x+MG09eHFJfWE8R2Y/ezUiWz0pMnk9KVZmZyVROE8sTlMkKjZhU317fFMmVEx5e1Iyd1JPQVooMGRII2RlVG1xUXo6aGlDfGF+TFg3a28kNXQ8aUt7LHMs'@;
put 'PmJiNGpXNH19PDQ6d0YzRnk5dzYrPUY0XnFaUWUkRHovQUxiby9DUjdIRkU7QjdGOypIcn0jQEBJZHR7LilIXV4lT2R4U2c3aVUsanp6ODttbCpkJU9+aDhHKGZ2In4/ci40T190KS4mYz16QEQjQWdtfmxuZEgkJEUmfUtzfkhmSyRtVUxdK2JxXSJDanUjMHdHaSElRGVSXX59b1tRUkZ6NTE1'@;
put 'dlZ3ME9oN1QoRVtUfmohQUhVY1FQK18vfHZVazhZKTRyeXQpPzVHLmVkSmFMX2hKfU9YT2Z0Tz0iOWsuOFRHSG15VVc3TjF1NlFydGF0U3V5JixVc3k9LDtZenZnfkNOQVVNWF1yWHVeQDlDfG01KzdGd2pqYiNTR2x1eikhaCUhISkuNCw4Si5iRDM8aXglX0g0e3pQY3RJWERucjI0PUsyR1M7'@;
put 'djBFSyZKNUkxYzxAW09leVlQQnQzVH5Zbzl5QFIvJChvLz5gMlVnZmtSe1RtVmQxd3tSSCROSHJJfHdsIVZ+Lz1IKDM0SWVLJVMlWDNlLnlxd1UyeyNoQCY8IkRDYUc7NCokKC55W0QsQE1YRkpNbkBwMjFiTmY/NVguX0ZXYDoreEEvSVgoNWhOZk1zSkNYXi9FSSVGSzd8c3J6JntmYHV0ZTJS'@;
put 'fiohYE1QW1hpQkMwUloyTyQqcnh5dHlAQ3VjSGxCdVEmby5jLiM8Z3t+Vn5HcnhlO251KVE7UzldVTBVRGc8am5dYGp2Rzp1aj1YKyw5ZDtFNSVCbz9maDxhTHlYKioyP2QpLGFVPj0lX1guXzo3QVJLVHt2SF9fPmZ7RlIuekt7eWh1bzl+WDFwfitjSXRTbi5zbj9mT0BzOCZDZDtpbEJ3bUZf'@;
put 'bUwuWlRHeHh+JlhbVltyZkJnTkZZMXhUPDJlVFtCO2s/c357aFghK3tHVT00T099dXJLTTF0dXo4KGN9RzM8S3hibiQqInhEflhQUGV7bypBUnA1OD5NSWEkQn5GT0BORHYjPXgiYWpmZ0NSMWh8fUJiNFtXPU90aGBjNThncH1bO2kxbnwwKWxLIWd1NlY6VDZOX0xdTGhEb01pR0leO2RDYXlM'@;
put 'ZyFuU10zSlo9PDU5ZERZXk5CLCNKaWZ2QSZAcH1gRT1DWSgxcXIxfUo2WVRKLy5sLyxiYnRpMUJxPlV1aG1oSDNbIl04Li5OZ1QhNGB7YW1laTx3dz9LcHt2d0MoWjlFUHV7YVdIXlFiPGMqZH1oNWs3dmRWfGVuPjNga0J0eXlCWTBdNV8iQyZ6NHhFZiUzMj1fOix0MGFhYGFfWmssJEN1QFJg'@;
put 'Q0dae0pLNDhxbFEvVUEhcCUjV24kY1lRKDhkQD53SjE0SCt6Ky5AJFhUP0I4U0BHRFVxU2Ymem0palpzWyM6O2hkRXJ4aiY6cllZOylYYltNUnEicl19PndHOWNFIjZNW0ZWODZLYSQ/KVtxLENtZi5LZ0I/YEw/XWJbYkZAITNeWXZqR0RxPnRMfDdZdzRjU2tdYF45dSZKKUd4I2ZOfW51bixV'@;
put 'JUJ5V0JedkYib1s7Z09EQl5UNWdpQ2lqNTVuTllFPiUlXzxURi9tN0M0e0RbS2F1PmZ9N19uKikobXI9QCZQY1F5KHM+VCR3LFRgZ1pOSmA+PnpUSFFSOWowIVZAMnNfeipaRlMiRUk8cXo0WTsqRTJaSzs8OnIzVTBPaiZAJEBNR0srNTE8L1gpQ0t4aCZLT2NhYTRsKT1SVm04fFU7YDFpVFR9'@;
put 'cG83ZV1MOFFwImRhZFFdLHF4KWh3UyxPeE5LVkt+YFZRSnlwW1NYMSYiTG1welR4O0EieU1FWjx1eDYzMy5JKlN0cUleTVdidD5HejArSGtSOnohZz8meVdNLnJMJURhd258NztLdnlhMSlDIk80XVcoYlRUS29rQVFMIWh6cjwmOlFUQHxoL3o4eEphYnJFRUtaJn1TbjI3eUx2ZUozNF9delRk'@;
put 'PFt1U2UqZU0rU1VvTT0iNiU4c1VMVlU4RSFSWGdgRFJKIWA9b3FIWTsmKTtwI0l8YjUqM05vOExJZTZuNyFua2ElU1dHcCNMeiF0K0xFcVsmU2kqTls3NC5Dc2okUVhHWzRSWT98VHJ+PyRkMGMwfHdQLEtxNy5Ja3pmWE83czJTaVZgNGN2VC9GPzBRfXw1b2RtUDU8e15WT1o4JGJJRVc6WTor'@;
put 'M3l5RkYuMzs1PltCNSEqZFZiUSh1JFAwfGtQVVFqP3NKT2sxfVBbaDNzTHxRdF1zSjVLOGNIYHg4UkA7L015TWxWTl5UUUJwa2AvXXBUVjRTZyZ+O2tSMVVjR359ODRLaH1AYyNKUjp9e3wpYnc0K2A5OHNuaWFBNmdmNkdpVXtMcXdMNzBEcWIsRHd6Pnt6elhFZWtBdj1OZzg+ZCIlOm97JHd5'@;
put 'TCF7VVBMVFpSY3llM0pqVSxEemBYNWcvKFpnfmdnZz9UR1FVZ3c7SFJjSS9WV35ybnFvck1RZURFSGU/aTM1K1RZOzBFVjdOZCphTysoYHdpb21tMkVZdWh5RE1lb012OGw5PHUqSmo/XWdealRfclRPSCtKX1k8YVZWZCZqcXRkX10pVV1xMnhbVkYuRXRyKSxHMjgwKkc8Pzc5TyZEYkV+YmE4'@;
put 'RyhsPFF7XkdJNHpaPGZzUH17fHg6VEFnfER9L2gzfjJxVW9bRzlARl8uc1BEWHA5dU4mWX1wKGpSUUV3aXBTLH4iTXYvYXkyY0ZROlYsWkRRaVUjVjAlKXtgVERPTiEqI1E5Vj4wQTZJTnxSPTk8UEM8TyoiPXdfSHV8LjREJEx1e2BZKkQ6JSVrKV41bVMjY19tMWEidW9ZeFs1IjJFImd2SDxf'@;
put 'ZWBbZ1I3e0RTXkFFaFlZY0ZPVU5Idl87ckwhSW1ZXm9uQUN1d0lCdVIrdWgodU9xWF46ZUtdfXwod1p4elk2LHZ3QkdGZ2lYbmpsJEhBX1R1NGRiaiFVfCJFIUM3NzdOVGM2LD92OElhTWg4fTk1dVpAYGI5eTBFJFtrPCZFQGZrVnthNVY1XX1GWF1TeEN3dWxII31jZGwqcSQrVHgzN24oXX1v'@;
put 'KWddTmo5Tk15PTtjLntMSDFROztEa0IkJGtpanJdKiFtMnFESH47YSEoPFg4Qj1dc2p3WXV8cTtic2RWcilbMC5kTWZyIlIwc31oRW1JVUpOM0VeQ1JBL19hTGhLK2A9OCxBQEYzI2t9ezthdFlrPDcyY3NaJkYhUE8wP2MrMjU5ak48fC5EUX08WFRaYHdCbzZ1JDN8eTlMaXFKMnY9OUNgbntp'@;
put 'Rkh9OyR3WyZ8P01jRWw7Uk9iX0wlM2BUX0B6Jl5laWpAYHZRMih0LkNoXiRII0F9Qj5xVGZ1TT95LDptazJ+bTQuRj0vIlZNKElHXnlLeF9HVVs2UGdnVmNMZzx0O28jckc7V3t4WCw6cDBRfHoiXW5zJmIkcGB3ZSRhMFFTRSgpMi5eNk44LilvfG5kXSVCclRJWmZaU1kqY2RXR315PncvOVBm'@;
put 'NEpwdzkwZDFqYFpBVCJjaWIvfE0oRFJeYipxKDRLbCkjP3YuKk1ZSV1hWVAveGNwLzJGVX18UlZKc3xLeyYxSFsrPktvalF+d0ldYXV+XTt2PFBZNlAmcWorTCkqZCw3KjEqTz81XWR3LnlbKlZpY3tbPC5WRHtIWlhOQF8hW35RXjtGJHx4SDVZenFoQmNvMEJoYm19VVcrPTxVbD0hODRsUXZq'@;
put 'LHEjb1doZlswO01wWWBOKmZDcXFsQ0c3WyIxKClWcCo7c05ffE9PYzQrPG1SWmF4L28lKEdhc3g5dDEmdTltS0lxcGBfOStHXjNGWyxPT006ZXBaNysoYT0mVn12SFtBfUg/PUxraTIrRCxEQGUrVTNqX18yJnl4dis8cXthUGYmZjdwI3RbSHdnU25eJndVMjxUMiZyNGtKa1RDdGNJLFMsVFk2'@;
put 'K0o/e31bNmosYkhUMFUmbGovJUhQYlJ+QkpOfDtXS2UwL3EpNFA/aF1ASUM1TDxzTDJCd31WVDpteypkfV9MPVlQMGhCXm58fStbLCU+Wi4+JissRldoKVF+VVlgOHIrXSRuXiMjQEJkdEowP0JWVCk8VjAxczhuOGg6MT1ydTZnaDRyfWpQPWpvdlpZIlE9T2cqKHZXcX5hPzRjOitYPkVFOWF0'@;
put 'MTR7PmZIZyNhWiVmIzxXeGFjd0l1VmdnWG1CXyhfRDpyck9HTi5kQFtjYGlZI2d6OFZgOm5QYz1ubiNeNVlIPW9ndDdEMnU9akB7YGouX0A/N3BpUU07TFshRl1gLkE9c19TRjBGPUMvTEpGPn46SHtqaEs8SjJkX3xsZlY8JU5zQz5uI1M7VE1zJnREMnxuSnhiTTBpRCJ7QXM7dGoyQy9fVllb'@;
put 'KCErX1FhPm9RcyF1V0Ymc1BFV0ZgSGJ9XkJPQEpBPnN4JDRDU298b0ZSTnAzOmJSVj8iPENxdis5enZse0xbTiNod2xXO29yL01Ie2wmJj91YTRhT11uby89TWhsPEBKeGZvaE5yR29uNXZiO1lvRTVBWUNXVGFxKXs8TFhjOD1sPE48NDcpPllTdzokRVZaKiQ5KEd6P3F1OkNGM2ImWE58LD8r'@;
put 'TlYidi9yYGpleEo1aSssV0soVH4oKTBYUDlBYDMvR2ZpPEl1eFt6KnxkSld0KSJ0K3hjfXFgJHcjYzg4PS81OV1BbTBHVUhodUxJTTBgR3d9WFc3JndLYitNW0h1al0qZTxPbk17Z2d8dnFnX21OWHZGViZPT2c6Y3lGRSVVKmQ6ZCtxX2pOIStNeiNNRmQ0L2wxJjlyeG1nK1lKXzxuIzhJaFtv'@;
put 'LypVaFM2byhfOlNkcFhPdTxEPGA9fU9jeWZ4VWBNRikvcERVcjkycDI6cFRyd3gmYXskPEVgR1AvYFc7YmtqbW0rZiN1QmNobmB1eiNwe1t2YjpuN2xDeipzfGpUWmhVU1JeeEg8WXkwdUY2Q3IyekpdKm10NEdPPU9KbCtZKixQTF1CJXJ1c0JRT2BScXJUUFIwYE8hNkpvXiN2els5Xjg/R35t'@;
put 'OTdMIV9PNl87S1I7fEFtKlVlbDRIMGg2YkFaQEFRVFdyeDVEWHooQ3o0dypyPzx6W1JCLHFvLlE0bCMzSkhoLGhAJjp3VTciP2hOTk4jdyEhWVFIIUhzJTxRWW1mdGAvUEs6SW1ee3pgMVlUMyZwMTpee3REYXFDRTQxXVlGV059MkhIJHxyOFVwLFVbZ3FCZClFMGdoNkBQbkF+RGpHYS9VLmRH'@;
put 'NVVdSDRsTFFpd3RFYGI1QypsfnR9Sip2K0YsSiNVek56XmYlS1tmZjk4Wns6PFREQjZUSCx6WmgpWkV5ZCVwVE19Y0BtKiZFeEg2LGNxZ2A3P05OLkhvUyk7al00VihDfU5fPiNjXVUrbkk4d3UzNDNnMjIyLjpeTHh6blh7QGxGdjJPTCp4fkRGXT07RmF+UChVcTtObEp8Pk0qTiZMbCY3ej9X'@;
put 'ZFdtLiUzcWFtKHlBMF53T2s4SCR1Rj0wM1c1LCl6NyhuJDRDSFl2IzVGTSxXbWhFbl9ieW1DdihpOGN+a2lJd01FXWAqPSFYR0pxQFZAXSNucT04SDpWVGFiSVliYk9JMkc2LGV6WDo6JUhFWm1RPzdiZ2ZASnwrSlY1fV9AI3c3VEVISGt1XSRsLHo6L0VgN2p+OlEpXkVRcyEhUCFLbGE8X1d9'@;
put 'KShQYHoqLHF9LGxFOEF1KiloXlc8VlUhRVQ1Nkh+alcmRVQoLjY6X09uIS9rTWxTcy9qYnI9T0tKPnY/P2VNIWRrJk57STwqO3V2Im4xaHdFbXdTMSNUJEhoLkpqcnQiWkJrWWt0fEJ1LmhDKC5ER05CM1MjJD8yfS40Lk5xRkMuUllDdjtZYjUzYzE0R2Z6czV7KlI3d2N0fkJEbmwwMyVAbSxA'@;
put 'b2gqM0tFI3tLP3dvRE5AUnc1IlV7PWE6ZDReXXg/PVc7WmU+c1hZTSZMbWFrRjAzTXg7bipPSSFkNHM5N25vTXosd0VFQnw4O20xTWdXJStZfVJGYmsuREAoIlNkZmlNbyolRFhZKDV3MkIxYFF+dU1jPDZQdnhKJWx2aEVUfjxuJEZqXSguTzk3OnU0TSxhM0MqJT5OPWxLOS5vUyZiT0o1cnZD'@;
put 'Km1lLyRCJUwwNUFDajpMeGBtNyxlZFdmTzdwJDFFTDZnN1VwaFJHSk04NmN0N0NTYCl+bkFAblFqX3l9Qzw2IyFDVUlUVSkhdUhBNSNHWHMqeDxHTSMpN2Q9bmtdQzk3cUVmInh4NjshaVNERE9gOTFwXkdXZHNVOF5bRnY+dUg+cVtpeGQ2LiYzdjRJK2BxNCJaKSRoUEw1YWw8a0wsUD0/eiJi'@;
put 'NWljd3RzUCEjdmN2IWJdWms6MixKXk1RaSpAd1Y2TTw9QltIVVE6ZTEwXj9gJH1ZK0lHZzhFUkNCJno5Q3M3bk1SSEU6bTpxbTBkI2NRNT41WXIuMH1ffSNsSlBPTyUmbEhVa2FQTjBpMGB2PD42ND1Ga2kqOTc7aVA5ekFyQSQ6UDp3QVM2JSRPaGNZKkFpIWEwNXtHNTRSdUIsPU1hTHNvRkYj'@;
put 'P0VZUkwmQ1heJmM/L0lDbXU1SywvTXU2USwpN2w/dlZWfjQzNVZIKiQmVWJrT2lYZHBwNytSN0MmP0dOLkhdZFoyQS4ucjYqSmwzVm5SbXREKm02dFhdaDhATmFFdks8RywmRVdVPG11UHZnb0tmezBac3FfQ1FjXWZtRmhMXTtSTComOjR1VSkqPjpvREolWX1XP2VgfDVaUXBoRVpmYWF9akAv'@;
put 'US54TWtTbVdnWW1TUU8re2VOfFtUNzcjLGw8NlY+enZHWiFeNms5aFBbfjl8fjo6RDpmZ1hIVH5tfD53N2ticXFpLitGdm4yREo6LDMxd3xgMD1adHU4b2ZPVSQ3Rm5bRFQ9ZHB1UD8zKkBCLH1ScTVJImIvTDN+IXk2IUpuQEBxazd1PUJNWFUlanc/WCopKUUzVFQlOUo7V1REdj5tMjhRUkRz'@;
put 'Wlk4OGByQiRGJWVrb0kpJn1gdSJ7P1dmQG4ueSV3fXZZR0teImkuczkyJkh2XiRGTSJSQF8hRVlVaWVte0VCPXhid1UpZnR3cEJkciRediwjPmJEZlpRY2FXbU4uOENsQnFCJUQ0ezEuYntxNy5iJSZYdStWJn5LbXd1NXskZVEsQiEid2VLfWh3K3ZhcnppKCRpYVtdQnB0Vn1XJWB0PG5rOF4p'@;
put 'X3tyTH5QYD1+YEhKSGVReEM0KUVIUEBKdF18Y3JoJik8NjhAMkpZLFBoL1IpITNZVFh4WChSLmJFLnJGckBuVTlbST1tSEFxPSpuPmx9VU9ofT0vVUFpYXlWVjNBW2BEcmxLYD40c2ZjS2ImOS89fCYpbVgkUHpVVnxSJlM/XW5gWiN1STU1TThPUG95XXU+WyFbK1ZnWD1XT2t4SG5NVVFrfDor'@;
put 'Qm94T1RQSCtEYk9AZzV9Um9He11xVHJIZm5UWzwya1lmRn1QQG0sbyh7QkEyems6VTA/X3tULFNXKiZbZDJ9KGtBWkZiWnloYWZrVVhwJWg5cXFoTHtDaGtmSz4vcjtSclYmV0RPdTQoREsqXj9HOE18VT1dbj9Xa01pcDcjRzdQNzFgSColXUA5LGo6TDxfa2R9b11qTGd4fHd5NTlsImwlKjMi'@;
put 'K0BQeH1QajZMc1kpdmB2MGsrLH4pSGVjdnFJej1fOShHJmRjSWc2aiMmeF45UjZ7MCJBTSVEbVBGc3lFPj51WC5CeEZ9R2MuY2c2aFtodDl5ZGx3ZUxhLnNreWJNeEgxZlZ6d0JMfG5XMUhDeyNkUykodiYxfWZ0ez40b2orXWklbF1gYEk2QTNHdlhpKmQuK2cobiRWJTFiUnczTW48SjcwXWZ9'@;
put 'ZiMlRWB6WWspNFt8a09RTnEvKDNYV2d6Rks3Z0wpaXw1Zlg5a3M1JShKJDYwQylZd010ZGI9V2dKW2ZOeVJvcDtecz4sVilwa0lbd2hzfHk/K11NOFhHclYvKFlCb3d0YzRtIkc6Znh5cU59S14zMD14cnAlU04zWEpvZi4qNTZyOzxnOEd7UDUrYDZPd3UvRVRsbmtPMzJndUBAeHM1L0FGRV9U'@;
put 'e1p1LGBdWFlhM0VaPl5NVSRlWUgoemApOjB7YHgrJHAuIk4hQCFOJUVBdFlFQlVBIWVXcztpdnBSfjZ8RD9nJm1jey8keiZOXXZfLmA/LiVCLG1IcUdBMypWeVttfHZvJT8uJH1Hc0g1cXFtbytaPTR3I2IvVTFwJExsSWVUZSksWHJYbX57OUFCZzFzXSlNPi9KQlUvYG08V209dmc5USt1L3dW'@;
put 'TjlKWHQwIXtDUDlzLzV3NT0kX3kwbUY0M3hMMHlmYVVzK3tPTEckM0c6fGNBW3h7Jkk8Ukxabl17UTU+QEMkRiZsNXchQTxucDF4LkYya3FLOXFMVmM+d258OEkjQXRUQEdNaWZbdGcuQkwzXlpqJGUwYTF1a2k8NjlTXV19ZnU5Kj4yd19rYil2ZDFFb3IuejRCYmclJVBgQVl+MFUmJTsjZTck'@;
put 'e2BKbDd1W1U5ZiF6dD4+Qjk3QX42RikjTnBAfmNVaFRbLDZ1VnNudmY+Zn1VQUd6PTlnWVheNXtLLE4sVVdLQjBfQ24oLzEkaVVBOCtKOikscDFyKS4lez1odmpbdCs0LkxuVTVGQ35mWW5DckU7KDl4bE84dzo1eXFLWEQzJHFyLGB3JjFrRXpnVHwrIz9ZNjo6X2hlKn0pLHhrdyFXQjM/eHIw'@;
put 'fE5QL1dCb21aRWZLVn4wY1N4cVohMG08bjw+S3oxNXJLeTkodC5ZcDpUSyxvZXY/Wi5uJkltX1h8PSlOR2lVMGBwclMrV09IdCFkbXAlQkpgajIsX1l7RUcmMDZXPiUuLmc7JThXT0Q+XnpyY2BdQSRDViMyRWB3eShSbjtyLEhjU3coIiZ6cDVlKWxYTnk6WXAhZX5VdWZ4KjtmSF5vKllpMlt6'@;
put 'TytrNmpASFNIdXR4QmVyXV5baFBlXyN7W2AraCZYR2tIOEwqSWVqPz53bClCWzxtb1VZNTspWVdjWUdeQVhFSC9aYF40S1lTUz8+KjYwVywkcXd9N0BiUVFEK3llZGZHTUdXS21jeHhxY0J4Sz4jVkUuSjR6RHhpbX16dSZWQ3JLKEFHI1FqL0lYJnFBSVUsQi9SPlJnK0tuKHB2fCMrYXYvWTtD'@;
put 'UEROJU5hUX51ZVBZX2owR29ddVYseWAqcCIyeGh8L09MdCNLNkI7Yzt2aWxiNGBGXkBZQHszc2UrOGhbUCt3W115WDoyaiUkLmlWSSlIIzcsTUlRMWRDT0NDSDt3bHVXIXszZChnOjUsTHVZMjY4al9hd0xkTjZMemV8ZmswQ09KWmE8aiZ8L2JHfXI7JmFlK3xxJiFdeUwsW2YuWVpUPGhOWipM'@;
put 'NWVWP0UlX0NSak5lW0A0VXhETFB2ViY9WjReTmZia3pjY3FCaiFrJCt4anpybS4jMyJdKVlkOk1eQltMcE1eLypvc1YoLlIzeFZfWGwpbWB8cyV7YikiTUhtQiNraWo2WX4kU1Z9O0A3PW4/Umg7YSVqRzZZfVJbfGdZY1tbamoqRnd4SyV8N0pPQlhuYjU2cEdjW0d0RHchOmp4RV5FSVsxWEtn'@;
put 'I21wPSN6azMhMEAhX2dZajdWe1dDQkwiYkZKSXZYPjZTdVY7eF05KitQekRHfilraGlUKFhENCpXdExMY2V6Zl8zNzUkQEc7P19KWjt+Rjx8I2NUL0N2M0x4WjVsMDAmRWkqMjZQWmwkPHBeem89PTZnRF8oRW08NytrNSorQWwoPFpxVUYyb05QSTdDQzMsP29VeW07eCp9KHgiOXQqIVJ3Rjlj'@;
put 'PHhbNDQlNGs/Jj4lZkVCZGlOMj9EbigzOFlmcj07WXxnT24obVFrdypmMmc9Lz4qLjspUyE+bldaJiwrRyoxOCZDdzx+MGAwQ0dIRDN1In5ASEo0Mz0rUFhYPSZVVH4xKVJrekxjeSJ7RThRRUdVPkBRfUwlb2pAZ0FEcSZ0fHJQOiw9ZyxtPWN9RTghQCpzODgwW0FhXU9bU3d0LzUiYkhgdF4+'@;
put 'SlchMExWbGJLXnM2eTgpaWJaTWRJQyZOTzpTYFYyKE5kYUg6RDwrIj4oP0pLS2QyNiZXZCIpa21PQ152NUwiJSovQFpRcVBjTkkle11XKnFVS0AyRThYcEJQXnpdfEpwY21RPT5bS14peUFwPlcjZF1Wdl4hLjZzX298OGVDZkR4W0hdVStIeTdyfTBjOiFLfSVwR1BTdTw8Nio4OXlgfjc4cVoo'@;
put 'd2I4K1RZPVZeQ1lPOnR+R0I8d05nM2JaZnx4MGU0ci9jVXlRL1kuKl1ROzd3fU9jfV9hbT5fTF41eTlFJm4jTyJuSHB0SCxGZSpdbThue0NGfkBSfFs2UWs+ayhzPGF8RFk1bDN0fSt+eT59QmZCV1Yrb0hJJiZJcWBPV2hvWy44MFRJPkRVVTlKcDIyclZ0KzZzX1smJiU7diRsSld9Z1lxLERL'@;
put 'NHE9bjFZTHRsKCF0O2pUQ31KaFtyK3ZBX2ozXldCdDBsNmNwMXxCaDhbXjh2fDEwR1Q7e3x3Lnh2Nj0wbylka3c9LmN7dmNiOjJkS1gxeGFTQGlyeHglQHVLN3EmT0tCZl9JMDJaTnpoUWdOIjB4bEtUX0FHJHs+e2l+Y1hqfVRTWHtfeUFYMTpiKnpeaiMjYWF0QkVRWEwyNFsoaTl2WVpvWVhS'@;
put 'bWY1QkZKdEYpN1BtfWY5S19heDkjc0dhMWQvQ0xvblg+RDR4K2AvUCM7XUkkYnVbflk/UGEmd0lTbi5MMVBFMlFmRl4qNC4zZTxtQjVdeDtCejc1YmE4c0RqTk4hNCtwMVI0VGNlT3UlQVZmfDVXbVA7OSZpezkkbDFqezhjeShbMWc/Il5PPz9JSEh5SkNxP2NYO2NSd1l3JFhNMmhYQzVoU3F+'@;
put 'OTxyJiZsWzIqK19vMzJePkEqWyREPzB2bkVVUT57LzRUcTEhO0xReTF1cDlZUCZITTliT3Y6UCUrKE5rWkZhWTQpVCYhe1ZEVFE5WkhtbjdZWmE8T2o2PzZRR3dIKip6eCY8QXpjVSRpTXw6Lyp3akVBKnM5aTd9RTx5UXJERmZjLms7KGV1N3Yyen43MGxWN0pvVVdUYmJiYXY0Vz49fV5KYGFl'@;
put 'NipQaEVLam0hNmVVUHY0fk96PXxeZz4+VC9oa3JJODxWc24udFBsdzRQQCskYml2ODY6amMlQiRUSHpFRWc2Sz57QVE5SGJuKHp5NF8+XzgwWkA8b3w4N3E4Jj51fHI4bFNWPHFFQDBiTUI3PzJ5ayZXPGElQWo4PzU+bl9fIndWTn5UMU9sRWwqKGc0Q29WXUszN2VXVypveiRZQ3Q0VD9xKlg2'@;
put 'dkZmaCNXQn1DSyQmWkIieDpORipqIVp3Z1txejg1TlhYSmN2VVsjTTk7eWdYXUNkPGpvNUMydVQ5bnwudVtPaWp5Tn5iIkcmWDFNWXdqKmlEcXY9Zjs3eVF4WSJPY0dGVG8jZEZBPld7fEIiVCx1QnNHSzk1O2YjNFs9JkZuUnAqZFJyW0EoOEBYTEFmT0AoW0tUfmZQbSZ1KzBtNzMrYGorJWBZ'@;
put 'W2g1ZWR2fTN6NWRlWGEmYlljSCt1O2hXT3c/NCZlM1dgUSE8MEYlYkdHdyFXYCVSRVRfRFh2Z0NXVUUmRTBsKTArMCthW3V7V2VPQmVyN0Jdc2M5R2AkV3Jna29NKnRoWGJPTT99TE8/fTg7YD95S2AqT1hTOzc2XUAsQ2NKTCFnMFIqNzZiOnltWEYqJU89XlpEKWYqRyxCQGxwd3FkZG4/YGpF'@;
put 'bW85JWU6L1khPG43biglZWxMUWlZNVpsfGB6RCJbL2M4QndmP2ZvNSM1SmdGSis0IyYjIj1EUG9Ud11sNlBhTDRUbmJiTHFEWUVpOiVMZSohX1ZKNSpuelM2Nl0pO211PG4+TilJXSFHKFM9IlprSD5TZClPWSt5IkpicWZFKi5BYCZDT0NlMm56WiJWXXNfSTdES2pycW9PVjFRLC8jcTBJLF9g'@;
put 'KFtEaV5gOjBdTi9qc3c+d2J4I1J8UkQ8W011bzd2TipGRnovRGJ7S2MsMkZDWztsY2RWaXp5bTV1b0k0MC5Nb3ssUlkxekgyJG9PMDd+diw3NTtGZTtrfUk3bEohal1sczgieUBZKXJVT1JWNmopNllRdXpLdyl4aEMpTX1uWXRTYH5iNE4yMV9TaWRATXxJfDVTVk88L2xBK2Z5JXFLMitHJVMi'@;
put 'aXpRND0laVd1L20vPjdRP1kqYzFIYksmcyFoREIwK0NafFM6JnpYKXo6X1clT3RVJXBKQ1oiZCJrIXM8SS56Ol9wdH1NPV8+Y04qX1ojQ1cwNlk2dVhlRSxyeiE3QzIlR0RTRFNvTnwsUyohPU04e1NTKjgsWnxxTlRoRn5IYS9uMSVremVgMSxZb1cqRzxPKzRoXVR+bixNaSpPMXBTLEdzSiFi'@;
put 'bCpXVnN7MSghbmNBIj8hfTBXI18oKCJUUSI5RS5QIW5LJS4uaH4xKFUzLDolOExWbXxkVUJdZUZROG0+KERZYSt3cHFAJH4hPlh8Sj1ydGNeazt1XiFxZzdLWEQqU3dkQCpBJkJpOyErIXUldG5KZjdLKF53Z1tiP2V0TG8wPkNFUCJHJU9+I3A3byp5ZzRvUnBPMWtrSDkkUWksQlQqNSk4dml6'@;
put 'ZlhLM10hT1p6ciVaNVNybytwQVZZaC9CUUMqUl1+WTdsZU1gIXU0P31hIUdOWzBlPXFObVJOXVkocS89SyJVdngvQTBJKl5GZnZPZVpYO3hHWnpwS3M4XmBqYGVsfjtCMV1PXVR6aSNzfU9dVDA/Z1ciTjxbMjVlQCEzdjV1QGBYXVRfYyR+fmd4VTRqQSsxUWtkL258PykrfkR6LFFQIi9LPmZ5'@;
put 'SU5UKiF4azE+fDxvK0cpWltmP2ozX0ghX2tzaSY9Jk45QlJXRytNe14/SFVKN3hpRnd9RzRKZi4sd29jWkBzalZSUGQ/KFF7c25iT25VYll4MGdWXSRTalQ7KDl2WkFzd0B4Ql5Jd2MqZjlEZWQuV1IpR31ITURTRlVHdFsqVW1HKVd6ek9SYCNaRFFfbjsmSG07TmFhKjx6ZGdrYixlPCxaeFAl'@;
put 'MF9NMUN+XygyeHpUSCR0c3FeX0AhXXteUTNRN0R2MlFaYEkoXmosVyFONytaaEphIUd6Z2w0cXMkRnIsOnV2RG09eGVoJGRiJFcsVG5hdUI4XjhuN1A8dFQ5TkNqPVtTKHdMPmgsMXt2NHRSKXReVEZeUXVvMFBDIV5VPTNSQFQsNkcwMUp1cElDaiIkSUJxdzNmOENPfFs2e21zSjJEPDtQVFZy'@;
put 'YHRLNlZLKzF0Xk8pUWw4LGxvYz1RPWVvWl4+X0lmR31gYGdsRFojd0xHZVk/MGRufTxIMkA2ZCR0VElzVl5UcG4vO0I2PHxdciFkPW8sSW0leHNxXl1sXVhjS1h0bHwkRHZWbllzLnBdalhtbUN9N046ezAsMzhUXyJRW0MheSwmKXRUNWRoRW1dPWhyZn1iTjJGcj1reCZkXldnbVh6OWBadVB4'@;
put 'diI9I2p6WF8qQz5QOH1nIzBAdD0kN2lFfCYpQjthLj8hVmhVV0YpU0w6WGIlY35meSE7Ijs9fVMrVTwwZE0pbURybE5dPVVfPlQsdlZycjpFfFFMVGFpTlIwSWFFT3YxKT4iflUsKFM3aTdQN3xNWVhTUlF6cjwybVJSdll2ZiVQImp6d3NWR2V7UnxJSF5yeXZlLFA/MG8sLGpdIW5mJVA/MCNp'@;
put 'JW5Ublh+Kz59NXdVUyN6ajpAVW0zUE8hXi48T0QuXlU0PEwxdzUibTwwbn1BbGd1enVFODk5Rm0sd2UqZmhRSzBKK3c6ajVDNEEybHZdTSlzUko4UjVmaU9tO0VBS2F8Wlh3JmJwWzlOSCwkT3d+ZnJkMThyLDRWIXNWQj5YMjJuRkVycS87JmA4ZygmYWx9Uj5yeyI7N1M4WGRZNS5rOlRAVF0y'@;
put 'czlTJVg0JVttPkxXbCJxe1hLWz9iNVFTXnRRWEMwQ3YwJTA0VG4sVl55OGxtNVM+PXJdJGkyek9OZGE2MFhQLytJfSQhWFBuN1A8R2VASzJvcyxxaHhNb3A0PGhrM3czbyU7TyhKJipVL34iZ2dlNnBeRSVjZUU7ckJeeFIwSS5LUixBS3cwQzhvPkt7Pz12PDNqKjZHI3slIi9UIzpsPzRLX1FD'@;
put 'RDxPT3BjMCo/YjBwfFdXSVFVW2VgTjtObzo2XiVtNzh4SW9VWlQqLz9KT0t8KHQpMDNEcW07az41eFk9YV1eKkRPV1ZAPEtqV3VQeVtIdiloaTg6UkxoW199Z0dnSVNDVHs0MT93fmcqVSI/MEk/Uz5ZelUvSmc2PyExViFDOyhsMFZeU1QvSik7eThtRXxZPnwmPFd+dkgpSnc5QjNNRit3W0t1'@;
put 'VHRiMlpKdVhYIUIlKT1ue1F7TFp9YGFmLjxHPmVtXyYoSHdTOlkjOCtRd0M6Jk8veEw2aTY4WDc2JWV+V1QhKzVfM0s3LDV+WWMhJC5LSnFufTUmKlRUXVRLV2o6TXIwcDg/LDRmYFhrPTtMIWFWQDBUKVlPOSl1ZVg+MG1XYiJdY2IsaGNycjVgIW5UTXZjIztFfSo7OzwqbExFIX0yb1RAbyol'@;
put 'Szh7UUxAanFBRDFGVCZRXzQ6NEUuS0RQcyRgRSpEKHd2XUtdR2VrKVNKNHpvXSomamEkeCpaanNBO3VfeThwI2lNUzU/OFpuSSheanEsMG0qSXZFMCYqS3oyNDVUVHNSUzFEQldqdkwsLylVQzF0ZGN6bHMqNT9UXU1jbEx5L2JSbzlNRENIIy4lfXEpPXYvbzVaZyx8O2FyWkg2JGBPPHZDcXVJ'@;
put 'VGVKTzNeaCNdey94TVc2KUA8ZVJMP0sjQCpzRCgpS103aSNrbGFIISFYQD5GVHlGRiEyNWU8MTA2L0ouWUk2JWl9cm1FZWxrPGVoI09rM2xtWn1jZWU1Q2UlcDR0fG0oZCtTd0ddRmN5UnY+LmByc0wqYSFXN1ZydyxPTG08JG1VcFB6SmVKW3RtQSNgKWR+dEg/W3wjSy4qPW83a0dKfVprVEcr'@;
put 'e3YxbU5lWyZJaXFqNk1vSk0wR2ZeK0Bjc0U2ckt5fkF8Pz1rX3cwIWlsKXdvPkF9Jm0oL2o6WUtBRmgwMTgucj01PE1bT2VwIjRgTmBQLGkpMT4lSHU3LF1xNiFUaT1PL3pGWDl4QmtCTEI9aEJ0cTcyUSRjOXw5eENROjtVTU4rUCp1c3FpUihgb15kY0omYnJkMUJ7Uis5d1sxVmpXLGVpZnl5'@;
put 'UlNtMXlDXy8lT0NBdUNVLyg7JWRJNU53UnR3Y150P3NFLkVbdWU1LmcpX2B6P2BTKzRgezlFfERya0lyYm50PkxvRDwzYSEzTEErcjxPMF42YTFbV1FhR11xUn5tc3FeLlklLihXb34kUTJ5bFpGNz1baDxKMXRBI2t5RnQ2cFhKIUMybEFsNSprW0hnb3g+d3ZHPSNZJCZMd3g9aT43e3liLGNt'@;
put 'Q0YwUFFsb347TGtMN0RTJSIvO3ZuSnghOXZka1d2JD9RXkplRUlIPSM8UFY1eGxvMnQxJTwhP0lVZiF3JDZITj93d09oTUhAImQ7PUUoSGw2KCxWJFl2VkpDOT85Nj5YanNZdGxAemNMIk4kcjZCckZ0T0ZfL3gkTHl7SnA8eGZqS3JATTxtcXRzSEJaa31JNktdWndwZkpwV2hzflpsa09RSWAu'@;
put 'OHo9VmJyRitLYn5ZNV1xYUhOcls3I30iNmV1eEUiQFhIRVtoTSUiVVMocUlXSWlILjZtV3JNc2F9eSZ4aDlXT3s6ey5Vfl1qJlpKWitDXmtGJUNnL0NPPGJ3eThSUnpOODwuLisuJUJDMWY8OFBLe3hXSCNgczlHVi90aEd0UXBUSFYhPHs9PnU/MSZFciFdYiNBbGtIYGFdQGIoOz5mI0Fsa25g'@;
put 'YV1taCxWaks/KXJFc049cSVWTk84Lj1aLjouT088MkB6TUtfPG1iOzczaz46eSpGSXh3d0JyJjBATytoUlcmKmxMXiFsazYvfT4mKCQuIWJjeHtGaFA5Y3xSP1M4TU48aGYraGBAYiF2VlJ2NUR6Wm5qaGIxajxjSSteVTdmN0M2XW9qTGxxXlQ7MDVHUWFUb2pgI0hrUWQ9M292NTB7O1piWEBd'@;
put 'dkVyRTF7bElHclB2Li9SYDFNOFRiVXs5eEp7PXx4SU9Db2tPRyVmKkQvND8uZSljJUlLNStjL3ZtMWQsL1A3cSFMa31UVTxfYjB1YE5hWEZIQTo/aHZRXl9heT06Xn5vfSE2e2dgckAxIShmZmx9X1ZFL2NCKSs0MnN+Y3lSK1U1KjcuKiZePXI8bDxsZjhMQjE8THlObGs/PDE/UD8wV2R3Rytk'@;
put 'Y0g9PVFsQ01QT2lON3pSSk02ZGA0fC9yRE5XMWh8QG8sWHhAaTVycFQ1ZzhJZjZpeWQldz1OPFQrNEhyVzJlXkBpVDxDNSUrKVNodCRqdj18T3pNTFpzaUxaOjI7M3JMNy41U2NbbCksZjJfSC5OPG9PQ3tZVUJdXmFmSGsoY0tYcDQ/fCNBL2o4IjR8MiZufTd7Y3BTNmB6dyFvRypNcSQ6N0lr'@;
put 'KFczSGNuL1FPV2JffWM4W0Ryel9eOH12MVE4PE53anpzOW9rKXpwLzlCclgqd0RuPCJeVyI4Ym9RK3dBTl5gOlt0TCl7LEN4VkQ5bVZjLiwuR3JJZ1hzcWkoIVFaL3xRIm0yOTlrVmVRJEBLc0tUI3EuRiZKbTB8Mm05JXJAKDg2UGlaMHZqQSsqeiY8cy5TSV1adjhhelU/c1NNI0tRK0Vlb2Jd'@;
put 'UiZzVTVdQ2UkYiE7cy5VVnt5L244OmBxOHxVSEdmdztgYnQ+bkY2Sy5ZPiI8c2UrWFsjIXRwZyV7KDZNRUJOWVtRKERyVlBHOkl3R3A3VDlIR2NJRHdWWCo1OSpYei5JN1lMKjduUURlaXooS1NrQVlIMlIiKSRJN0ZiP1dXS0NZP15Rc3d+dit3WEI0d2xMI0NaaT9NNisuT0N6RjBTLCx5Skla'@;
put 'akF3V3ZSdjxbY0V4e2FJNzV5X3BPSSFicFsvQzpAKCpqdVUrO1czd1RucCYlVV9NR2oyP0NiPV5ONT5sO2hAIXJzcjc4UXpVez09TXpVe0ZeLDFEPj5GSihbN0YmI11xP3hraVdZTTddXipvPE1URV50TFosczJbRU84P2JPJTQ9MVE6aUwpZTw2NE02U1BDbX40Ims1OVAhKC5UQzp0O3tufmgk'@;
put 'Q2VJMW89Kjh4czBrR0t2JlpqbE55JWRTRXlSXjlJZWFYYkEhNyZQS2BofGdhRUdRJTZZfEg9KFNqLHopSl5wW2RDSkw5bFdiW2UwNGUsditxTX5qUCQlVX5QQjliMCJEMiYmTHR0YHo2RT0zbWhCPVB7PGVdTmp6RyRId1dPPUJVS1BHay9pQyR5LzQ2SjhffFhrWCY1UERjJm1HP3lheEQsXyR1'@;
put 'dSUqWUljbF1oKUlpXV0mdztsRTo0P1AuQlVbXSYrT3txZU01UkZOTV5LWWlZLiU9bGtTJENVOyQuQjVdaUBGOFNoUDsmdnsuSTdZVzxNKjduciFTRCUve21zLl1pOEIzVGRoWHxDPEEqJElfaSV5ISM6ayJ7bj4qJX52VzwsdzsqakJLYS4lbExyISVDOC97bUA1enBIP0ZpckV1U11zWEplbkR2'@;
put 'dFEvSnMkYjVOc3tITV5BYzYmVnhZdEx5Q0ZEcFcvTUU3PSkxPyFadTEkSiRLPFFJXkY8Jjt5a0JgVSQiTF99aXcjKTtmPTxIUDw5NiJgTGopVz1gVHprQHxocD44RGpdZmQ8Y1Y+SVUkZmwoVD42M3k+bHt7ZmElIT1CcWY4MEZSQjd2N2dZMn1PP3FJOkZGTFpOU1d5M1RCZ3w1MmpEWj1PcCkj'@;
put 'P0ErWXxSUCU5dGVFczBUPztSN0QlQjZ+Z21vd3ppZl46KT1qJHYwWDIrNURXSElNYiRfKmB7MWl3MkhHcjY8bGg9PUhhL25Xa103MSUvbk9TQU1KS1MqN11GcV1sWFshck9RL1J1NUEvXU00P2lXSElNVThdO1s0SDs9IzV8MiNkImtvUzZgWSxNLndrdjgjQWQ3eTMxQ284VHNzaGFgYVM5ZndG'@;
put 'bSs3cGV0UEdoeGxoPT10ZWUoPGhNZiwuZUIzKkE+LkRFKDEmTGVkOmh3bEtEJV0vMGZFL3xdUiZ1XkpEeDtGQiRKPHBSV1ZMSFFqKWZXZHBYfXhRUU09JFphc35JdFZ6bj0jXXYwfDJhc0MvQGUoLnR0cyEuek5sL0swKlhlRGZbZTleKmBkJUEkMjlMRWAuYW4+PjA4QGoiZUVeUEJ6MjckfWBN'@;
put 'U2pFMm9Vbk5sR3MzOVcyOnFxWz98YGx6TlRoPDQ7YUdWcXtsc3pme3I8entKdkAhZS5uRFo9T05TaSgqZShHNDk5ZyIzTVooR0BWTnB+L2ZyOVc0WnleISJZRzkpWUY1ZDRFWUtYN1ZKInNlK1F1Z1lidDNoPyR2KXZSK1g1R1UwKT5VN2JkXSg1aj47WmJ8VSNvYiQiIzM1TmJTOyR1ajIvRER8'@;
put 'Zl5bOGN8VTI8ZVVoOnp6Kz1EJXAxPilKSFZwOnVvTTs/N2E2WSxAPnlvbmVDM10rfCh5fU0kPnFDUWRbJmA6aTJ0OTg7PUFAYSU1MVBFOml9biIwZ05sWWh1TTk7V3g7IjE6N2t+aDleXyRlUSlLOjgqbCh9azBTLzxeTV4+VUlfSWwxal59L15NIUV5ckYkM04iW0QzcmFzJnk7en5kXjNkayg7'@;
put 'ckkkaXwmdjdnbkpdZUZBNVYiSnQ6IU81RFgwNSw4e2ApaERCRUZpPmpJKERJLCswPnpOSkFxQkUuQWZLK0wqSEN9NkpXcD5hJkNbcXlaK3I+WFFYJHVLPUNtLCUwRVRWO15ESm1VfUFnZEBfb3E+SEQ/W0VdakM3SDJGJS8vSiJVL21oa14/dDk8VjUqR0pqJVBRVUZzMyhASXklcVFJYG5WW1E8'@;
put 'fUk/W1grblBadiskU2lob31HflRHVmBVY31LZX0lcmE4JjZpfjx+L299KVN+Z0AoMjxPbF4mcixEflVMaFBWZVouakExNWpuT0l4aE9ufDtSXiNfbV9OcTB0MHxyOXIyOjBzbH46el5XOn5QRFNoU01bIVdLLkIuY1pha2d5ci5CQlAuLjM6I05jQF1QfFohVnVqckFnOntyfkEwWW1yXm1gRkM9'@;
put 'TlZveCxlJWghfFEwbWlDflZoPHF2JTYrdSVteXlCckUrXzVIMnFkPyhxWFs9JFF8cSwpLCUodEAjIT9mXmYqYHs/P0ZCI198Y2tCUW5sXlQuRV1pQitqVz08T3I7e2dTXk8kbntLOU1yIWBRalhbYDImWDYkTCwoaz1jKTVxWDpTZiQzRHIkPDBlSEk8PEtod1dyMXBIZkMkW1pOe0M8ek47PzRF'@;
put 'Tm4uekxLTDgwLlM+bFRdKy4zP0FoaSEzYE5qblIySkhHdG8vQjVuVmxuRCRDYSYzREM2XlouOXZMWT45Lm1LVEAsMUMobC8xamlfQCYhNVpxb2k8aXxeSzhwWFMrend2dz1UbXlzdX01Wk99dVUsLiZgNnc3fkheV01tSGFwbyYwOGFuUU1jPmJJYnsmblghSnk9Vj99OWdMXy93cGtvRmFLeXFG'@;
put 'aGpBZnVee2V0OCJCNnlGaj5saEBTdCp3TTpPT3lCIzomb01EIWNCOyYkd0kpI2Q1eCxRK0MvflVMY2NnaFMie3x3cEFiWXdtMm55eHEzXj5wZVhSYThPa3YwNHMxdG0pRSZ2QCZUd11MQj4jRU5aXUVHRmFUe2R8OlU/Wm1jJWZARz98al4kb1dlKX4wPy5eY3U0XlYiQG5LNkttRDhYKHIibjdl'@;
put 'MW1HUDczO1NfNntyPSUiW1dYOE1mZnprLit9SGN5eHtKa2oyTj4rOlJSLHw6V1AqbTRTMyRJK21lXygqNCsmelEpX2k1Q3wldmArVzJLamExaXtAT2g0MWlxYkljMzw8UVdPJHhbc3kwTUZsOUViTFBELjtDLF5pTGNuSDNnKUxHXS9+YEVnbCMrNz1EMCM8S0xRJHFyISovT3h8Y0YldSZkPTE6'@;
put 'ZDI8NnQ/fGYrdHUpQEBYTTlwZDgrUH1eY19QW01PdjdwJkZoK000eDZVL2EuV3I/P3JBJSElc04xKGA3QyE8PiVucVI0NXR9Tm9La0JTcE1AW09qK1Y6XXwmaU9eenRYJFR2fDV7cHlEdnt2cGA6TCtgOyhKL2t7I3RTdnlnaHo8NlZSZSIvK0twR0FxV180L1o8L1NJYFsiLHUrMkJFL3Y4MVV1'@;
put 'VmhuWilGNTNAYztpRFFDOTtyXWo6KE4sPmFwNUchem5WYTlKKko4OSF8YVQxTSxgQlBjPGBfdGA5ajhPelFSODM5UGo/W0tVOjU2VWphYFN9IXZwZl1zYGddeVYjdyxjeFA7Y1k0aWh4fCw9aGVwLCJsSjlDOCJTOztEZCYjdUhJSzpYaXdtMl9Gb1J8P2ZNI2RDPGdtTmpuamRoIllkQDxkIlNk'@;
put 'ejIsUFNuQl1uSCQ6PHRpTDw6QnBbKCgqWj8jPGNoSEZTVShqVileXiwpQWBnW2gyOUJtSWM4ejBBdHFeNVJBQW1ARSFWejtncnxeTyMpXiIpZF5XKSElNkoyXmIkdT0vVV9VPUxmLkRmMDBAKj50cWt0KzhwcnUyIyI5OztKQnAyNlpbUHUzPzdTPS5tLypsQnAyXnRPdFA0OVd5JmNYWGVYMDUv'@;
put 'JUQ5eG07RFR6O3kkMjkpI0l6TXlbeVs1O2FOT3QqPnkxcHQyOU9sdFlmNkh5XU04LzlUbXREfiN2W0g8c2ghYnxYclIwSUchcUA9N0ZNOU1QbH40d1VDbWo+SnclcztAOCQ8VE04Mm5VW2w9TF18O0B7dFRTbV5oRWxySnB3bGxRZlpPdG1HUzZgYS41eHpWRXc6aytJaClOZ0ZSMDJ9N15tXVQx'@;
put 'dyslQEJrVyQuMWUuWCxUbTk/VUdnKl03bjFzK3NbRU9hSGNlZDU1VVpeciJuMDZAcH0uOCJAbTRMO0I8TiJVcVZfTGd6RHlXMFQqNE1yIXBPQ3smfXA5R21VY0RdNi9fYHBbZkEvbTcvKH1rJkosUkljdWFKJEF0dGBbWX0wLn5oMXgwa3xrM3xONzxLX1h5SGpZM10wM0xZa3UxNUVCPFd2SGI9'@;
put 'ZS59aVYkNFQ2W0UkekV9NFEsOElHIW5tdysyKUE0Sz52TjAwUUZSIT5fWzlOOHFLTWZCVSw3QGx2QDl0Mj1JLCYuWG1RZmZzNElNRk1UVClwSDhsbUEsKHBVSjxyL303VkplZ248MUpQdX1mcXlZMFtpe08vdTVjcmtORzYsU2lQMEVnZGNzUS96dmAuKCY0LFooTiIueUUjLEE6SkpddnhUM2Ix'@;
put 'OTRyeWwhdWxSVmU0eF5SM3BsU25TX3g6RGV1YWtUMm1QSEl0c3dLOF9WQz1idV5IK34/NXhVVDZ4djVJXz5UYzV6OUcvM29ZU3plSGwpRX0/fWRSYlAzXyYsZ1I+LjFpbyxULyJsLmQ9WmJ6OC5GMiM1YWtiPDpRZz5YbFl0IUI7PkkuJV86NT96Yl9ddjgpa0B8cXF8Z1hKQjwmP0ZZJnwmP3tg'@;
put 'aVQ+Vk1jbTN3cSFuWilpS1hrR0tdXlo8OkUiMmp3WEdqdS9jJGhaMzEmVDJ+XTckTj55I30lUzFHfFhLdlEoRWJiQ2l2bytTdm8pdyNESiRlciN5fDJ4XStWUXh5Q2NZMkshQnBQRnxYNV1XakBJZzVrRVFDe15oITh2KkxHS057MmdAUnAuN1U0ekZtJDtqZUJyOyNQYzh8O0FYMGpCZFk5WSJp'@;
put 'dUs2QnBabHxLVUYhfFsmV2FHKUBML3dqS1g6RzghXkZOS25UYDJsZXJdPWtAVDZJX3YrW3xHYGVgWkdQNVcyeU0qWGRZL3dsIzxqa3d5ZE58VmMza0BaWF87KExHT3lYMnEjKU5MbU1fflsibGVCeV5qPkN4XVBaJEpxWzZuY0NjUmRRJS86Lm1HY1JDJSNHRXdNajNuViI0LjlBM0ttVF0jVl10'@;
put 'cUxFXmRKZl0vbyZpSU8me3ZERlFbMWlYQ3V0Um9IelZsYm1WLGRYeSJhWztUIXV5Si5sMEssV2VyTk9nbXh4IUtiRSVsWUdJWz0pMzxjOjk9Tm1SIypGNktKMm0pVlE9S0tyN315I2EpWCE6Lit9ZXg3LjB+OW1rUFRiLFloNyp0LFpqNlYqTTsmbkc6Ilh8alpoWjBfPnRIREpRZ29OdUlKRXs9'@;
put 'ZlRifXEjdVp2ZyNLVUo4TmZiLFFCbGlHTk4+ez5yQigvXjkuL3NSMiFiVkBZdjRBZWBLYCpfTyQjWEAyP2FhKCRMYU5FVW40UDVNInEmI3RKPDpMNFYsXUh0aXdGelRTbWt5Pi9GLlZWezQ0VDB3SlMoKVJtW0xqdTlgdntxJE11LHVZb1VMYjZ4LDBXIy8iakdxUFovU2BXaltLeTtTe21MaGRd'@;
put 'cHwhczprYjVicE1vazAqLEEkPDF0eStQTWEia2V1NmpWS2F0aUdfaHtme1t4VigwUXREREw2WDJ8K35lQ3p2P2FFQlo1QE8sZks4SllkSTprWmNpT0JWQ3hlfjArdT1aN0tdbV1UKlF1VE1xQU96JipIVl1uPGBvVV1LSlZ3dj5Rc1FQdlApMk1DSCo5JHVPLl8rY25aNVpQbksjRClEQldnWyRe'@;
put 'Y1QmfDkkWUNuYyY1OVpvNUJlfUFtKjIkPEhDaSFZNXJUVyNZNXZMdXp4WWhFfmxDe2YyUHgqcm15KXJaT2tgSGVPRXtYVjJQUT1EJGJba1hKek18L3RwO3RsfT9GWjBlKUgqP1ZbUF1MIkEuJVkscUtCdXYmKWtOSUV7XWtWO0NmTHFIQi5tY1JhWUVhdiNbeFdsb0JEaj0/Sl5wfHBkK055OFpG'@;
put 'TGw/KFdQWylNPmosb0t6WWgvelRgOVFHLDgmJEMpJGkiYCZKVGssVkFFVTVqeXtCPytGKj1eYlBvOiJoXlJgOTZgVWdUYjBaak5pL2dXck4vJTdIKzZ+KTw8N2kyTjRhLl9nWCNPaEVbOTA3T0pucXNWJUpzYDsjYUc5b04hTERPUCJmQ3pnQ2xdMz1GdiwkSUokKU57WSQsXildQSQmKSUpLFV7'@;
put 'OUVzMTZQOlIhViUrJmphUDh3LG51aTA7IU80WTsjSjlNS1kwX1gmeXlhWC4yTG9OeEJkPiV8U0tTbUclX2ZvYixhakFgTiRhZ1U8IjdjOV0xVm5iJGJlI0dmJE5nbzltLHU9aiwiPSh6Ukl9IWE6TmxZZkNZTEU7UzMrK11MdlUlYmpzb2hNO0lvam0pLGBucCtqL2tiXzZzTyhHTC9tY3E2TFts'@;
put 'Wl1JLH1FKkZ3OSFORShCOjlwJHV4SkE8ZCxvYEJtOUAlfE90bWgmMH1CJVsoOSVgJFVVI2xrcnRvfi87TDBjbD42fm5qU25wc2o1X3wmQkt+OS82Q2pARDpLNmIlS1U2KXA2Yl9wNmJhM1EyQ19nT3NEZXFwKDIsKGo1NmQkdHpteEtFZygjX08xbXhiaipMUV14dkAldD90VDMsQkFBQUFBODAv'@;
put 'UlB1d1hfSVlvLDVbPXFjUWFRIiohN2BxM3NUUHJNKDdiUz9QcmwhaT8yQSE/X2x3dnt5VTlNPFEmQDI3IS5aQkVYPV1qVHMyMnpwTCFWOkJ3Jl4sRXwjdjk6YHFvKTFeQD0oRD9NY0l0dHpvUHoxLkpWVERNSDxnfEc2VG4kKXZDbUsjc1BTXmY7Wn54QiFoKl0wbyxqWGpHdHB+RDs0TWR0b3dV'@;
put 'WTx9MzM/dnYlKygsLD5BbF1nSXRQYnBqQT9AIz93cyJPW0x2PFMsSyF8Ljl7Oko+KiZPLHRPXmtRJX05NyRmWCkuVDVmYFdKMTQ7b0pGRDhYMi5TYD9oIWp6IyZ7MWBUNG9XRzl8K1I2QitHNnVQKnJmey5xTTA+Qmw4TVolJUtsNiVHRDxyRyYrNjxlbF8wd0ZEL0x3MitiLExybERtWGpzUSl8'@;
put 'JmBjYzVRXzE3IlNSYXJ1IiZ8SV0lTHlmM1ZOT1hFNkVAUjA6W1pFTHpIITx6aCNlZX45X2I+dVUjJnJfcFlydDNPfjY8czFuPmwyND5XKERIRUBKRUJMOnFOdXgvX2VLRSl8WUNTYD4wcTVBXlMxNSkoQlUrbjhCPCZ6KXJKY3ZWUTp5cmtiblY2Ymc1fFFuLDMmfXRGUU9bVHwqVV1xcDJsbVQ+'@;
put 'MmZSOX5sSmtzaSJRQW1PPStxbU96ZlE4JnAxan1UT3lNIz8oNypHRWNbfXYjU30xJHh2NVI1dHxNPT95T1t7KUBGQCUxQXxPOSxLUDJjKn1yPiJrdnBbeT0wWXRgeitnaXFXRXFCKWxlMXYifDR7VjYoZG1xfjUoYjxwJk18KyR1O1R8MTNGNFRFVGZzYEV6OlUrbClwVSMrMX1xclo9Km9gIiRb'@;
put 'PGwyPU5oWz1Ve1kkRXcjPls5LzQvT3gifW5kKFUkbClTXip7PyhRTkdHeXZbWGkldDJBUUJuM3BSPVFeM2t9LFJqPm9ZI2FCQGc2bnBNZEtTS31PQWZ2T0FfVylgKlZoKyJsfTUmUDRwb2B7VVBjJk5aSXFvYzw2elNSfHNjfUJmRiQpL2JCL09JTmAmPjphdS51NHtAJWkpQ1BSR29tY0BdaDNR'@;
put 'alFdfSJxanVVKDdJa10vOWRfUHZLIT81LilPW1IhY2VRSzNJVH1+OU9vJCE3fmU9KnpbN1gyYiQ6MnduJiwrZj4hMGFZTjlNQ11HKjY5bi9US3RTc0ZPOCNsajdXSk95WWYhOFkiOnIyRHJ6fUglTkJucjFGbiRgbTh+OnliO3Q+dXMpOzM9Kn1RN0R3fH1RQUU3K0lHJGd+Qnd8aFdWU2g/WmM8'@;
put 'b1kwL2JJe0FDPjBtT0crJSpNPjg2anomPFZuRFB0cTNkTHlpNUEjTkpaQiVONytaemdIeEZxOXooXUxvT1dDOFlNaz86O2taREdlJVdaeG8mZSZVKSV8VWJlbnM5LDM1QmR5bnBfTmRzSWJzSmFiOTdgJGcjSG5ZJHc2U009a3hyOk8majRQI2tpIWgjZntdUDJPcDAkYzY3Yzc9b31FTkhFWm1h'@;
put 'LHpTTjVAX3U4MGdPZT5KTjMvPTR2LGkjYDQ2eD54NFE5eEEyXSw2ODpZK1MjYGdSPmprVF81YWNKVX4oMHtpWEt5Ljdod1liZyg9d1M4SE9MMzA9JFhYPCp0RDZqeGBfXTxgdzJHPFBtcmlSIypfJSFJPWlTVyM1YSQkSSY/KkwhWTpOOEBXLyEmOWdUSl0odUdUdEFnQ1F9PFBIN1s9UCgwVTIx'@;
put 'KVB2ZlZGXk92Wn1RKGQhd147SDE4RDZ8X2ZgWlhnWjtNOGt6aCQuVWBTMTF4RSs4RCNxMmMlVFFhZT5LMDxacyw+T3NecVkmOi5lNXJLcjJNJC5AJU9BUlFsYnoxeT06WTtTKGpCSkw1dCZiUG5KZ1BbaHM/Ong8az8wNyR7YHpdPXE2Kyg0Y3tkLl93YjttQ15oZ29beSxeJG9AaEU9MkhaNVU1'@;
put 'bzwwUU11aStWRW5zLjxRYTNKakQ3K1JtZF5xYnQqJFE6TThrWlE9MGFmeTptcVtWTVdJX3E0MVUpVUJUJkV2cTUsaXNueDpMfFhYRnBRUzxEZDNETG05Wz8+PmB7VG0lfmpLIVAvJj1FVWhGfnQkTDFXYHF6WnRMdUR+WG9MSWVZd3drYk9xfXI0aiRCLj9rRzAhWnpXYGtHK2RleltrTGYjVjdO'@;
put 'dTV2UGRsckF3dEY9L3RebSk+TGMjOnZLKj5MYlNUdDpAQkxPQiJOJU57Wz40K052QzBiZ0c2V3xlZzYzbj1QLmBaITc0QEE5cTlsY2tYZSleXSZWZGRKN0kzPD92PFBadV00QFBAM1J3cWhPRU5za1IrKVJQK1VCYUw0fCpYMntyKj5lZTZ+cltNcl9SRXFYfXI1cnxrJkBzPiVKLEBxb3huIytg'@;
put 'L3Z5cCs7WVF4JlcpLCVaaSRWbShObklfI3wwYCVmMGYyfUtbM3VrVGZlZ2hCdVUmPCEibShefHFjKjdIb1k3Ui57M2dgUzEsa3o5OW1bPHMrdTsjeENiaDZsR0swanZpWlcoVTBobyohNkBbJjJmPX42aE9YS3J3M09xSmN+c2tmOCwpPkYlLm4+V1s9fkswfnMjNVp0cl1+aFdycns+RVZHPVQ6'@;
put 'bUxyXW1icntgNSZ+Zj54Z281PXA9MiV4Z3ReUHA2dlV8eHtwX3o4PTtxV10+aWIoTms/SiwiTSNAMUIlInJQb0leUWtVP3N3dnhJY1MsRDBaRHVqeH5mKWoxMWZUc3duTG5VLiJvenc4L1ZgNXVCPVlMVWdBSiQpbiRUPGNPU21MREQlKDJXbEFibVFEWXdIcDxQZ15EMyY0MjplKyt5ZFNibXZH'@;
put 'd0VTJTFFUkJlKWBUM0JxIl4oI2svTDI8ejlaaUVIfE9yaS9sX3FDeTYxa0EqV0xVWSkrVXJCYjd3V2w9RkhIREx0Uj9bb01TI1BhWXFaNXJQRH5CazVOTzRSMShlNERRVEJsND9iMkc2NERIbDU2Vzx2Z3dFcHVZYy98cSxiJChtJSkwWT9rPSRRKU0ocipCM2JhY1FRcCUpd1F0SjdzY1ZCKzwx'@;
put 'a2FdQlpbdi9iUUEzaSVyKz8yTj4pNnlDYSNYTFVWdGRjJEp8V09gTTd4d0tTeFo/RjpvQUMlRGZEcTZUL1dKU01DMitXPWg5WjU1Rkt+aFZxUDJvZzBvVkg8c3xEIVdiL3diI1d3TT8xX0FDZnd2UT86JE9Db2Nka0hLQUNkaX5qPClkTHlJQDR0LihUY2t1bnRNfHYjK0l1UiFsKTtUfUR5KHFf'@;
put 'bVVATFROS0EiTG50LiRhbEwhc0ljd0ZYTFVqejBOPis4UHBCNCFAQVkhSExWWExVWmBfXU50aU5rKXhue2VZTFMpJX1rVXVYM3BdQ2NAfFg/R0xlOnkmV29JKDMvV0xVbSIkWWFTWXc4V2B2U0FCdiN5VEBtXVlrQypUWGR4akgpdnkiQW0mQyojZyJXb2hqNltAQTdjbE4/IkI8dTVsdEoiNC5G'@;
put 'RCVtXjxpZytHR2lyQiRnMVs4TU9KL05rWis8NExQemcvVUBvRW1EZkImKExVM2JMNWdFayFWd0YqQWd3RShBN1o+NzQ0RkttUm9uemppdnUvOWMrcyF3aUs3RG0qe2RsVUFCZ3w1THVHQFcqVz1vKnokMFM0RU5mRE90U29OLyNbKk47PmVafnpFMFBqNC42bX1RWXF1Mjl5NC4jMTpvWUlKWDVu'@;
put 'OlgjWVI2VkxYIi8+VkRUaEtDZVV5QU9YQHZSTkJOJFtlTzc+Q3okNUFVK0JQQkAiYSI6bztSMEReTDBENmE5WzptO0VvWTszZ0dBY053YCQ8W1N4e1liKVFhQU5yUUNtb2RlV1slbEN0Wn4/PmtfbCZPJTlbbT1sVF5VJTFBcnV6e1l0cGlbZ2ZPO3ouVXxOK3BndW1EYlRPQmhIPUZwaT8ufD47'@;
put 'Jn5lfXRqJjN1RCxPWFJYK0tNTkNWYU8zY2FudzA+JE0pcnRiSS9FbHdTXlhoWGNQMUZEPUxvU0FJRFgzdHV0KTBDTy8/fGozPWo9UC9JLjN3OiFsPTdbLzljUnpSOj1gMV9AWmFKa35oSDZwPWQ8Wlh4MS8vIzkjQ0FfTllvaClSeWg9bXw5UiwvX01ZV3llS0FmMG98ViowenVrfDBNYkM2LHR4'@;
put 'RlF1SENeVUZgQ2Zga2QwMFQ+c2lNc2J6bil8bXluO3R8aDNAMW48dD19fj1bX3pndGZ8WGEwLkNgVUVhdS95fH1MXmh8YWFlU2gockZhRXpEdDRhVEMmMWR6blh7WGYwcmgzeF9JQFNbKj5XbyhAcnpgXUdARSw8cFFYUXw/SDMoZDFAeFpkZl1seTpsUlNkezR5dkhXQTd+bUheP3JbMW5aPyo/'@;
put 'L29aX21YPi40WWFjaT4/aHUwVyFSaFtRTkVpW0lia0Bod2tbT1VIMiF8VXdsdV5gPVhSNW84O0I9OWd8aGguRjtaPSVVKEhiZ21PNSxDWD0lK2spWSowcHUiTlsqVGcrazBFMmc8Jk4wR01mdV83RDx7M1o7LHhoOGErYHF2YUQjTlVOST52W3YpY2I7OHc/VCF4Wi8oamZtMCpHImgwRmlWbU5g'@;
put 'cFJYRHchQFoyTD8qQmZDVlJhRmdEIWFJayZvKk9VTzF8bUtUOysiK01Ea2RbMTBnVXlRXzAwVDBzaTJMfjlkMUJ1bVZ+PjRaU2l+TTtPLHUseVZiaTM+UygpfmAjY3crQiN5UypSJXlyOUFFd25yOWdIRUc9fUdValIjWTZ4USxCTWUyN3JYK0ZXOFgzVWAzLFFXREtJK3dVOnFZV0R7MEpaOXVP'@;
put 'dWhmI0JramldMFU8WiVxMDA4V08hcnlGayI7cTooXzc1RlQzWWg+YHNRWTwlNi9wLFlORG8wYExtNTk4KlY+cmQveFAvJn16YGtLS25gQ0czUjVITlh8Vm5UfCFhSHQmfEd0JXF6cDpRPntDKnhjV2N4VkJaSChtTC5ySzNGcSh9TGFWLyEzVi85OnZ1e0ZvazlMNXJ8KXFPQCgxLENEMmdvQ2dE'@;
put 'NjF0aW9DV2hNVyMrIXM+KSZpdVtpZlsjbitgKDNYYC81Mm44YWtAZ3xAVyZENEdKaFtTO3dFUiMqYHppbm9qa1kkXWdbI19pe0xLT3lZZmZJfGVHSEdSIV9NVDR3Ljh0NVJHS3ddRFk9I1c2N3AjKWE2U3B0ckM2TF9Ld09pfFUmK3JWcXZUYTw/RTpja19CJXU0TWRLNU5uajx2OitpTE5TZT4w'@;
put 'd1lBOis5SyRqdVtbLjNJSllEVENZTzp7MExuNTF7QyhgWmM1MXtDa3VhQG88QS8zWEpwXUVBR3FbKVtEO3o0KW5eXUxxZWVyfm9UTHtbdjR3LjgqQmdEK1tGcj5JSjckcHMvPyFLWEAvLztCJk9KaVE3WGVvNDU1di5ASFhmWHJiS1g1IXNTaGBIMU57WWhzfi9efW9NeC9taGJObzliIXxvVDdY'@;
put 'eT5vUDpYaW8pQ312WF18KXxYRnBkU1dLVUhnaiIldT14QFJOSTFCT25sJHpYISQyVXUiKVhGLzgzPTlMLkRXY2J2KylVXTVSR0tbZmFNOVBiUk51RWJ1dWtiKkdOP1Q9ZD5VM0pfR3dtYXBQfW5EWWd7MGEuXyNyP28yZzgyKU1JaGosb0NtcCEwL08kK3QsekdOUzApVyRxcjNONFEuRCpncml+'@;
put 'TGZmdEYlek0/THtqWjgrd0V0cmdgWlVDXlVhXXdWKltyKlpWPSRNU2IoQlkybU9HWmpkPE1oWSt3RzpNTV9gQ041X2VmZDFUdispJEcxLilVV1VRWmsyTFBNUCZHW1k7WztHYSs6NFIvc2lrdzJQZk46NEN0LnxHVXEqMGEuXyNMVzttMkk0KCx8MUUkbWRAJVNNOmEqdHYjaUxdfj9YPEcqbllV'@;
put 'Sk8mJTFpP3dGRGFQaEw1UjJiO0NfLGJPL0ZEcXlGRHpdbnJhPCI5OE5fd1thPVNzTE1wYV03LzVEdzRJVzxMP1tTVFVzfjxALClAQ19SWFo/YUdRfD9qJFo8LFNyTkJaPSo/MSR3cmheVjtJYikiZWhbTnhJRCt3Q2ZdKGlZOUomKFN5KG1jVEJQPDljckpFcyRiLnNNLHxNOzo7YmUsU0V1WXQ1'@;
put 'LmA9TFBwInw2fFhDXXkiOm9eOTpsUkZtbTdKdyNzZWVdTnV2SkVQSWlnciold3A8dmZpdThhLjlCTUdUPEJpLiw9KG1vaVAwZGNheD8uNWRQV3hKdSpoWkk0cGkwQSkoenx7Wl9WcSNlNFhSLkJ3YXJ1WEEzfldIZStSXjRAK3RKK245UkRpPS4zd3x2Y3hrO0RtWXQ2SUtybnxSTHohdnRkZ213'@;
put 'fTNGbV99SUw5KFtoMVFgOjx3NHs6cmVhYD5iT2l8OFdtKk8vczx+ZT1yYl5BXmQuWio5M0NmQ2x6ZDBnJDpEOnQqfHlGWDhjNzE9OHREP0ZxWyxXKnhOZzBXLkxUfTVDRGdHNjswQWYjUHxoOls7dVlwSGZmakU6WG0uKUM8dU57Zil2RCthaSVVMElyK0FufldpSSIpfjdzXX4/VTB6Uk0pQVd4'@;
put 'cGdFcSVqd3s6fCEmT0hCeVBqP2l1bjRXNTBXYmlqOT5yakpmT3lQd2k+eEJ2UlRMaWxvIVExeFEwRjZWIVQlVSVzUUhRYEdWIzR9L0IkKTBNUzYpKyxacCNQYW5ZXUh8NzVKWntPPUF5O0A6MX1xSjJ3SS9UTSxDIy5CRH0zJjFBOyNQVyVsOHA4Xj0qIypEdzxvKj0kOmk/TUFBXmVWQU0vSnMk'@;
put 'PipXZW88S0p0blRHcV5PdU0qXVdoTDdGMHUxUWwsRS4kaWlSNVFpLGFNImtePW50ek4jJVM2QUY3WDp6X0FtVThTSmZLU0d2OGpId3d3e0pidmdDdTF4MXgxRTxRdipuTk95REx4K0IjMG1WcHh2dStCQkt8Q1YydFJOSE0iK0B0NH5sKytVaktGcTl0anRrX1YyN2t3ZzV9SFdPIkFUNSJrQmw1'@;
put 'MWQ0IjVKLlI5PWJ5cTVwKTJLQ2MsK1ddbyt5Liw0X1ZFLHh9dHVTdkwpMTFkSmp6WFtgaFNAaFU/RTpXeVpiO3NwYDQzWypWaSRrRFhebz10UG5GSk5YPUxhN3Z1K1h6KmpYeVAqZW82RUB9RTpeZkUiZSUuRCwmTEZBe3Y1PzooMzpRPEZmOjF4N1NHQmUvRXI+fSlSLGZSLFUldkpTSmYuPEpl'@;
put 'OTNPVFVmKkZpYSYzM1JqYkBiUGdHclRUZXtHOVd8NGVjSVtdNHJhaClseV5QeWppVU9eUktSeTw6RmIuRTE3K09rLiJ6QiVjUj8oNUckdywoNWk1e1B8O3peYTR0YG4zbUxeP2FNKjs+WktiUDhObHpTdTJjels+XnFmOEdMYD4zY3hDeloiJUsuPUxYQ09wRTkkUG5ERlQwIXw6SCQ0R1U4ZCl9'@;
put 'cVc/OkR8LzJoMyZ0OHRkVSlhJCtDMktWbmhzeX5yYWREI0ZjLyt9RGtUa0orVl06QjRrPWU0MHpQY2MxTUllMXQoOyRwdWUsRGdQWWN6QEBoVTVlekxFTU53dFQoR0hRfSszcVEzZCFCXUlqZ3d8TnsmR2w2RUB+Ry5vfGRuTDU6cXFIflQoQlI4XlZqOSteaSpXOlo5dSV0eiNNZ0FoJXpfTm4u'@;
put 'QUxLbEpCPWkpciF7Nm0jeyMjKkkhWD9pSWZqQmJGMVZUNm87UXNKMnR4ajdydSkxLkY0WV1pTX54Z2VrbTtPYzIkVUdZRCZ1SSolL04yXk9jW2glSmdnV1UrVVdzLy5XWCFvQkxdUG5ZVEEmXmokKm4vUXIjeEJzSWNudEFvMT4+JFRgelF5bU83PV8haXxPek8zSFgmS09xT0l0L0RGS1dTP0x4'@;
put 'emtabE1iLDlpTlJJPCk7d1A8WlskKSFAcFBuNioiJWZdRCp4fTBgP0soJlp+VmRfb0R5SUtbK15sJSQxLjczNzxGJnRtaSxxaEd8NXQ8NzVDR3dvcH5sOGpATWloUjAqPUhDUiVzSkNaXVZ3P1d8ZCxGPjVyQ1ZRaDR0TShUKnomUmBkOFg9UHN9M1gyN1cvbitdOFZJLyY/SDY2WkZyKzxqRysz'@;
put 'JHtrOVskLE1SJT1LVWRyOSQ7dT5YJiRMMTBsSWF0anhZdTMzK3BULFRxaHdzSnUrMUg7SyUiYyJWXk8iflFFMkFeekJnL2Rjdk8jTDNnNC9kTHFZTm1mNSolJSt+WCZARVJ5I0JKW3ZnUz55Ilh4OFlLajdPMSpueEI9TCJ2cUpdST40Tzp3ZzB3OFNHJHo5aS8rNE1HQWxCNlRSaXRVLCl4NCFS'@;
put 'Z30vWDs0ZF9iXjZOYmZyUThCcnNpSGVGXTVLdXhHel5vPHcydGQwdWV0cHs0KDhCcik3XmkibixUUTdQIUFrZXtCVC9YKXgsQzlJYm94eGF0JltnUGlhcTVwVlUrSyt1Y0glfHIjRj58Xi5Gaj8oTz1TJSI/Q28oYnVwUmtDNE5FOl52VHZSV3RSMCV2QzVxITU0O15SQFhOXUN2cWRVYmF3fCRJ'@;
put 'OVpDZTlGVyxkZnhydzBQIUF1Kndfel1vKDRpR11oIVY7O0RLOTR8SGpPfjtEM05GIjNPUDYhYnUsOkFUcGhDZjdhdiJ+bCRZSStYQFJwMWBnLEckU0I4QEluQXdBTkNUQlpyYU0uRSlLMGtdUTR0cFIzPiZmR0VsJUR6UkgjYkk4QFdwIUt8aiZrdllCWzFwMGZkandgTWxAWldTTDAhR05TTk4h'@;
put 'dUxtRGopbDUwI3dpQzE4X3F7NHRZdSUvbmxwdD5sWkh3NHVwL00ueT1FW31vUDpsd0tyfEZPJH0laDw7UDBDajJDMixYclhPUzZ6SUVbYjhqJGw0Pjg6Z2x1PXtbemRtITIqcUt8ZFthcD17W2ZadUw1dklFM2w+TUNCJjh4YjFOY2ppTT42dEZaRW5ufU1JbihzfmU4WnsjQSFlVDJWXzR7PVRm'@;
put 'PmYxbSl7UlozSTlJPjQpazVTRjA4dFBxcEhhXjN0Y2olOGosb1BzRyIhYWkkVnBIWz1KYGVMbDNeK2BKZz5PPTgiSDE7U2BmcTlSIzZFO3JaclReaWhpNSIyJSNhOl5hYVdgYj5VQyk3VisxRzJxUEB4N2BXSlN9IWN7b3ZqU1RDSUJNRVllMHh8WmJgP2tEVDpHWHdPQmE6UDorbiNEN0k2L14o'@;
put 'ZjBqO3xRYXI0QXdVelljR15UY0ose0c7S0BKQ2V7PUJve2xhcl9wQnxsWG8+VHNxKHw3ZlZKe3QkJFkqY3I9SV18WXFbSl96ITUzb3x4KUdlN09QTWFgQUVbWlZ3ZnRNW0smWSZuSCZSe2kqSz5YfGxfdUllTDgoRz5bO3JCel8wUyx6YypmbmBJYmg1fEspdX0wK3I+aDMyZ3tOayJQImxROEx2'@;
put 'JWtla2l8T3heNG5VcShxS0IvZzoxYz5JPHlpIk05NjgufCFVK1dKVCRSS1RPLFVtdTRvNkRJKmxNOkBRVUVGQit1LzdmVTh5XmFWRlhHYXVkIylVZytKayVGL0dmKz1CSE00NjNwW3R1S31MQj0/Uy4+Xyg3Sj1pYjtiRCl7dEBMZyhwSGZQaHU4RDd7KSs4Nk0vOltXVnRKRGlBMUlkN2BKW0FA'@;
put 'UFN5fkZFcyswcD06RiheZnp1VW97X1d7L0BNQURKZGVKQHBqNyF3P1loSVp4Nkk2bkt4XjFGdVgma0k4QFZ3I2JjIWJib3taPjxoR3JnRSolUSthK3hyb3NUYl0sT15WK2ErSigmPGRmR1V1QlVHQG9RRj59SmsrXj54QSVSekBPYywkTD5uaF95VWNIYWFNaUI4Snh0JUVPSHdYREM4XyFOcWF1'@;
put 'SDZ3WiNYRlBNZVhlLjNqbEBGb1s4JCwwSUdbKiQqLHdCJDpjMn1Qant6fWgpRTg/WSF0Y3wmN2EpSj99ZDQ2KF5oeFBNZyg5M2M0NHY4OFRDOFdFeCM0SFh7ZDw/V1RiUHIhSSQpPWdBYF5Pc3N9R3xNMDh5VjY/Tl55Q2VuJGZRYnZARGMpYUdwbGJxdFI4Rmp5JT1oYnU3TzckIVA/MG5DKXth'@;
put 'NVsqW08vdyJTXyFgZ1orfEV9NVpvKHBEUUoxMztSJXw0LlM9Z0JeZE4+RD1yN2FlZjo5N3pOMC9GcThTMWRNVVdmYD1OOEB5M0RDRHdwa14oVm5vTiQuNkRkOHRJQ21LcXJXRFhtMktDQz1HOFBfVkVRe3QiVilfMmp6WSlSXXxYL2dyY1o3eUJxdlB4I0YkWCJTYGRqOTFHXnh7XVY4ZW1NeU1Y'@;
put 'fmQ1I3BuSyFAVCVweil1TWY1QSRKLCgzQCQrbiV5a3l2XihWYWBbe0gheT9TdlhdP1I+WSZZYTArOnFlTGt+UGcqWk9AR3pPZyo8ZjdsP084On5iR0NWZCt4QCo0K3Y1MFVaJFkkWSQidSs9c15YV1A2YztBZiNPWGdKM1VNQ0J1LzZia3hsaV1IUmZsUktrbCRoPG1mVF0jby5mYyxnZTtMamE5'@;
put 'eG0yJD9CMzxnWUl1TGpheEYsP2IxL1MjKUFmNV9+ZTQvY0Q9ckE8bl4uZTpTfmw1YWY8ey48K0RURT5eaGR5KURrV3w9JGIqcEh1R0VWekV2WCZpVlNEVUdLK3xYR3AoTHI7QE95OFg9azhfR1I3YEptZltlWSI2Jk8peXNMPjUoNmI6L2JKQzcmSUFqLGFeUDpPXUJTcmZoe1pWXWsjWyJ+YnFt'@;
put 'SEpvOWJUVm4+ISNKLiF+bFIkLGhGfXFOUGFUWmNeeVN+YD9gPCt4OGY0biZPOkEhamhJakBZVVAwcyorZCFqa1AsLlJ8UjlZTERtYH1QfC5hVGRrQTxKTjBzYXZ4ODN2JCVrekg8fVZFZ0Q8ZlFXKXNeeCJ8NFMlcDxgVzh8fDluT29IMlAiVyNePCE7KEJudVkkQHBDKlNhajxiWnUmNDs1WV9M'@;
put 'QmZFJHM9cTc6cloyJls7QlgkQGJpfEtVdjxyRE1dR3U4TGpPImxAWjJNUCY1WTJHQiVwOCFjJiJZPTpnT2RNTzBHNilWQzklY1RIaVpxSktoRGpATSREQjolY1RIQ1pmYVJjdGMmMkgsQXBvSEBNYWQ0MFNhSWR+WSZ1PG5WZCEwIWtpZyR8ImNqdmk3LExTcH5jQ3BSUXlZaC89dnI3OnpJNk0x'@;
put 'O1Bpb35RezB7Y3QsJU8iL11aQ31eZFs1KWdYMDZPTnh1Jl9TbVpiNSh5OzU6ellZIlFJT2VdfDViWX5Zb1NsOUFySU8pd1h3NGU0TmtEZzJbWkNwc3piVlNkWEQzJUFdR05GeHY0PWxNeVBEPD9DeV9TQlkraSpae3FqOVdKSFo2TF1vSWd0UyNQOUg+YUhlREZKWlQlfTx8ZUVxPjBmUCtXSStv'@;
put 'TmxaY25BV2xOM0MjcSZkcSVXRSNMZCNFMDEvImg1WmRxdTUyLyJoIitTInVzek4xWn10eU4odDMlWDJ8TDxETGg8RGIsOCNZczJ4XkJBWm91TVUzUjlIKkZONGt3eUBfb3RJYnBWRjFsOCw0YD9wdWViPy96TH5eZCtZdyM8aDUic15FYW97WGNIRzBZaSM2aFNhKUp0UHtoWXZlVmpFSTpnWV00'@;
put 'Ynp1JEVeJWt8bUc8QjE6ZU8rZlJEPiwvdXtnU25FUWhhYDxFdTl8OUU6O09HX0FwQEVZUDVfSmhyN34pJWM2WVphUmFFOnNpRWVGIz0oYjk9Kl53ZldhLiQ4PENFOHVsKER0S3xSSF5VOC5PMF4ldk1hZzttTSROT01FRCgxPSpXdSEqSzY0NF5WcDtUZmtORDpKNDcrcDdyOzRdIngoaihZZGtE'@;
put 'bVFGTzhuMyI5WEpBSGdpdzApe35WO1A8RHNZR1RrRTsmaCQmPnRZS3JIYF5OLEs6VyNvcVg7Yn1meVZ9REREV0EySDM9aTVzfVFDNnQodVBUIVg+L2B4aGlZUDJEejRHPVZuLl0hQ1NjXzAuZnBCTjxPa0ZSeDdHKl5hVip9PEdCU015Rjk6SUJTd0chLmcrMXc8dDBWYjROcXNWNXReKlhdVFcp'@;
put 'JjxMZmR5Tyw2XiYqQkAjL0NrL1pRYGIyInVyMz1rKjMrdTZdYU5qKUswQzo9M15qclpNLj1rdGUkamVaQCFRWEFUTVltOE9sJmMiL3Y/O3owPz9rY2lUbjU5RURAaXJhTmFUUTNnK1Nral1bKllpLCE1NWwpPFRURXMueEJrQT93anlmQE5KLEojWWwjPWJ7Nk0jVjJOWCYmX1QlY2hXe2cqM0kz'@;
put 'cEU5bFYhX0NCdSN4aDlyJTJnTD5TLExSXWJpTyE5OnMuSWE5bVRaUS5nSDExZ0dSYkVpYmwkYlJ3YFp7SGBQYWJtTD1tL0dtLElmSjJELGRUWHVMNyVLQ0pfQyZNWCxAKU11Xm9CUyQ6WjV+KXM0KWtCXzQvQ1VfaXMhKSx9UkNYMk4zaU4vazlIJS5xT3FgOXR8VStJODBtYjN5SiwpcyloPUou'@;
put 'JSFQSlQrTVpOcD5McTFqc0RNeHYwLGNkc2NVeGd8IVJRIyQwKCkqaTIzPkVwXVlYY1RTZWd1PHYxSzpuKSlFcmNyeiIibjAxIWooTl97cGBiT1lPe0VfeG5ZQjBZZldndF1EYWR1ak9QZllhVHt2SiNYL208RTg3PShtNGw3eCYqIUJXSm58JmMrTjlge0FJcW84c3JiKDF9KSN1ajMxUVIlanxs'@;
put 'Z3ZZI3JpWW9QS3w4TGxEQXgyZixOJDQqTCMqZU5xOERzQW1nYilCKClCSEh8ZmZ5bWVhbFpOUnhwMkJHeVVdakdBYGkmQEt1SkA6fmdsdGZzWmVHSSxMMCY7ZSVYQChAIjZTNWlnfWtJfHRGeW5uPXh0U1UlaD9YOSI1NlZwVDpAOkBabXM4XTl1Ris1JilqRz1LKzMySUpLUS5DeiJMMz1TKDx6'@;
put 'bj09TERoITR1aUJre2gjaXxePXZtL1VLSjJdTiQyVmh2TCk6cGRPSmhbelNJN2cwZTp6QmUqdEpebCwrOi59VmNWZ3kxbHZPZjpqVWUxZjtjdCtvNlF2MiMqV15IVT8vciFTTEtaI3F7W2pgPC8uOksoRy46bltzUzhQO3JRNkQzcil9RmNpZnQsN0t6N3JPIypyNVVBSWMzSXhpelhZJSg1X2Ip'@;
put 'Q0kuOm4ydFZ+KDwyJWE8Okc3VXNnK2M9Q1dXMVc5S2JYQFNTfEMjOEJuYVhfcSMofi82bFBnPFhvNz0rQyo5UWBeQWFvVSpbfFpWJnorTHBRaTFMakFXcXlhWi9KWVJpZXM4VmtHZCNGUmBMVXNePS9UJV8/JF48ISpLW1Y8Lkx2TSxWOlh2P0g1eF8wXSxoQFRPXmc6VnxZcHZ6XiZgZm1gMURr'@;
put 'cm9bcyspXUxPXlshYzE0R1JWfGU4dzNWW1V2OEsrY1U3ZXkhTiFOZWZQZDcmZ3x1QmU2Jip4ZXJqYW1qdW5PeFhIWjVQVmVJJVBjZT96ditrQHl6U2lLenJ5PkxVK0hEZCNdZDhNWjxOJSl3ZUBXSWpbVnI2KDl2ZkY3K25VPFdQdj9ITkdROFdlWypLVShnX0IzJUdORnhHRGYqQ1RtJU8uYHE3'@;
put 'YX5vJnh+VG0lbHY+aGtOLDd5V3A4TXlGJUZ0VkV+b2l4P0lYX2F8W29HRk1YNTN7JnMvQkFbQmxqZlBCPyJZNFBjIjFPVVVOTihrSTk0NXpCeFksQXBGeFZmLlU9eVR+eEYiWVZ9Tyt3RiZxT09CdVdnb0MzKzBLeSE3KXY4VVFLTi8pLn5ZTlMrMHo1XXlmIzZtJiphQUUiUT5Ba2N1cEtifjF4'@;
put 'MStGMj13bGc4els1T25UbntHRjgxQ05HZ2NBW1Y7X1RWbHxoaC9LOChBSUF2V1hMRktDKXV2Y3QseHNxemFHZlBsUCEmMXBoaFp9UCg7PndLaHpHUEglRWFHe0p4NVVBPjtkfmNRMDdHdFQ0Zk8zcUtxOCpGNFchWHo+d14lKHQ3R2VxIjtiZD1EbDxwKj55fGguSEgjaWFsOSVpczYxWmNobk9x'@;
put 'WHYlbVlIQDlIbDVfQj5rNCZ1Y2xQOTMwfHE6L291PUl3NkxHUVg3QGJJYDlsdWtVa0ZSbWBNKT8lZ1JHYHNDUFVLYj8xTV8uLCQ6TSheOWliQmRuWXVTaTlySFAlV2tEakczNGIzPjhEVE1iSzRUciltI3dnc297dWBmZSo/KlkvXWVoPCM/MkYpW3A+RmEoQzZyYiJUbURGcWU4KDNoJUB0Smc1'@;
put 'RiFYeD5dVmMuMj1AUyFnVEZBVHs8NEswXnhrXjFQKjVBIzJlRGE7ZXosNThnODRrd3JRXT1XVW53OnZjXm81aSkqQzhhRXRxP0ZXdkAjPURVP0ZpZE0yaHs3eFJIJTsmbXhaR3Eqe1A/d2xnPERdRGQsMnY4L1piYU8+dVkwMmVRTWh2LkJNTi5CdUhoWWVPZzVZMGExXXRTNVkhSkgpRUN6PnV4'@;
put 'QXtrNU8kKUU5MHpKdmJPdTI1IXp2S1ljYnAqKTp+OXEqTCoxUHBCaSFXSyopM3AuSH0vIjQ1KD98T2ZbWlphQE5kbnpjOGtXUjpoMjM/aEwxe1AoVWhNMVdrbnFxVUtvR1c5YkhhJmpEWHZAeXFPcyxidzVENzMlWSJvKlpEKG1oYmgyUmpgKGRucnRNI3hTT25mKzp8NjFQNWR8dXMjLEhRNT4/'@;
put 'SCokWltYMzFtYFlhOUg0WytgajpbQ1B7cWtvUTduUmVYaEp9aSY+bnQ9fjRsampYfU12dzl8QE84a2BqL0Q8ZEFkJCwiX2hRalc0dysyeHAsVF9jWSJtTUlqdmkod2dWdysoPEc4cntFUTRAO2VHW0tQVSYjLEdmYllDck1vNEBmTn4mbzJ3LiImLEJeTkFDLGVIWFtjYTtJYX09aXQsOlUyTXk/'@;
put 'WXJ5SWRHSTgzMGhfNnNnKnhVcnJORVRbIz1DdGM6RmZYdEt0P2p1bmBJPEZ3RnJaa0ksPlB8UG1TUlZ2UEJKWVVFIy89L25fS1U7WW1BITJoQFlDMDAiTXkvSmxiT2hILjRwTHVtIztbcDl+SldONmExOmY3I3hKNE1SY11dJk9bJTJ2TCx0PX0qUGVZKntTSyhpa1N0e083IXszVHthayYxZDdr'@;
put 'VWUvSk1LLHwoVzNUYm0kLltPTkVCYiI0Jm98RSNfTVRsMm1ML0pHJXZSK1A5UU8vUlt0LGouMHtKWmc3PW80OEleQEhTNnMsU3ZjZXZaT0AuSjpeRjV0Tmd4O2R2ZyZJcTBiRisqaCksWl1sMnRbX3V2JHdzRGYwWCM4V09RJD5OaEJJZ2tDeCtJSDZJOUsrQGcjOyFyYUw2JHkyV31RQGRzOEFH'@;
put 'Kk1QZyFnIW1UTE41Tl41O09FTlpDMFQsS0NPP0EjWlEmQCE2PWZmVG5ISDMpQHRhcDcmSX5OUFRfZCExTS5vMXVlWVsmRW0kRTdHJS9nKkk0aix7cVQrRFh9L2MmdlV7WSk8bEVYalQ+YEpxKT1fbUN1SElIS2RIZWllejkifT5WWF9qWTtZXmVjQCRJSW49VkBObCNPVzZhX0MmOWJEcExod3ty'@;
put 'R2VTNihuMEQyZ1h4dFBuKlBMVCheZEBRIy8pJHVAbV9NMEwxYzlYRixyWmQsMHgjRERCRDoyckYmb3I0Oi9idmJRSHcmcSE/enEmMGI1KFpOPHV0KiMxWGdpfEMpam43eWo/XytrQmgsVyRlRDVsZHA/NUtQLHdgXWlZZG93ekJ0dVtMU3VCeCEhX0siNzdPeXE2fVssRHc9RzlQT1FqTjsrKCk9'@;
put 'UGlgKkVtIzNmTWQpKnNjY2RyeSVfdnErI1M2dSlYTnghSSwrcnZuUzY5T0d0M11TeT99cTdQR2IpMmlzY2Z3NFUjclpGLEI4W1kqdGw3ZT1XJHJ7TzJvanZtSyFedy4hM3pYall1Rk4qTjdyeUNbXXJ8NGdWYyFeVUJwVldfPVduVTc9X1RXVkNFbFFwRC5JTGI2VHtMPDg7eCtqU0BRQWdEVGhS'@;
put 'eEllZk5sOVpWe0tib3dDbHBiT2FjeCtmNHJ8dmZrOEBASjNnY3s6eXlicFtpWyVbJVtFOjo2bkJJbElmbkpkSFhQYmB3Z0xkVWhEZEpReXk9MzlARzNqQVReTE0/b0IqQkcoOkEkdnYrKT1QQlRPKX17Yk9RL2VmdVpHd1NPeVBpSWdqcH01VS9GciYzaU17QiU4TiF1Vi9+Jjc6dn19b2loZkdT'@;
put 'VnhiKl5GRHJaLygkaXcjOUkrRTw9ckdOUyF1dDVYMVN5bHNNMCFHTlNTeXxlMThDIUtXQ1B1UHZ9dj8zJUtedm51SGFJYHd8ZVltcmFzXnpbOndkPHAqWkNzZTNMW15yInRaRS9PVEdqVCg4UUNee3kkTHkuIXU2UUAmQUNiakNWWWFBLEw8cWc1ZXRfdTZQZT4pMilZRmlxfSFGWz52eGlza3Zg'@;
put 'QnhwXm1fUy5ycTsiUGJNLyNuKCYqU3c1ZTgkd1A8bn4mRjtpPlssSi9QLC5BZEB+dXA4UVJkTDRXLm0vSltQS0l1VVQqeH5xNTs6RjEuIiYiJkt7UVp1b3N3QX0uUSR9ZnJzPSN8Jn1sbn1Ta2pZQ1c9dFt0U00zPTh4JHNRVEV7bDYoMjVQT1YyY1hOM3guPHk8Om4jYGw1V2oxYlYuejU2W1pF'@;
put 'ZDxbKltkY3VjcVg5M1p0aSkoS2tYSWJhWXJWZEgsNWQ/XlFTOXRUUUJQMz1TSDF6TF4yRzpuP3NbcDpwRUppRWZ8cFd5N2g8YypmdG8/YCpkN0pzWiw6b2t7KD8qbjZNSVF4VWFDKC5DUzx3Z05TO0w8ZThJMWxiPTt2a0RoTHxONWltYEpLWkc4U2FkdiJZN1suYFIiV2J+U1B3Kls9KF8yaUk1'@;
put 'W2VNc2tUPUZuVnZGUDcmNUd2UkxaTlh+Z1dZfio1ezA5Tyg7cDY8JU1uS3BzVFBIbyU+UVchTC5QIUJCSXV0UEdaXXlJe3IhY0xITmRkQHVbME44WHgiUSNTX0QlQnUlXzBBKmgqaE06MjcsOFA0OF88e3IwfU14fEgrMFNmfFEsS2c/bTg0Xi82U3BEe24zOlloVyNRQjEmWzYkaTYoYGw6MyU+'@;
put 'MWpsTTIva0s5eixBQm13KW5tcEk7eSR8dk9SIVkzbnU4Mz1qSCpFa1kyQUZxQCssOW0kXTYjU1E1bWhESFp6MHpzLD5TazR7UTc7Vi57P2tafldFNCZoTD0jJlZRMF55a0k9Jn5sOjJVISY7V11zWT1GPiJKMXA3KSRJbCltOTRPWSp3ZyFDM15bUn5Td2BsPVlFOHJnc3YrdSN6bns/WlJrcUZm'@;
put 'JHJnc05oTGBkPUh1a3cocHl6cVM2WCJmeDhmSHtka0hWPEQ2ZzJBKl1fR1JZNzpTRXo9K0FsSU9+cWhNTzgkdUo3ZGV7PEVIKSRSfHIvIjhyLCFIckkpZ1A4Zlg8LHRFXlM2WGp5dFp5WVkjTjM3eUdKe01FWWlHUS9NUzNHd21sKXM4WyxtL1BrWnZ3Onw5UFp0UCZ2UGw8OkhSYisla01GZUMi'@;
put 'aS9ATXR5YnMzaU1MKnJ+eU1BSEFCN1soLlB2ZT18e2gxcDJEbUdqP3czdUtjUy9nX3smOmgrPG1gWSIxNUl+Q2FHR1UyWFFdRWZqUitLUjtAIihrQGVGMl5WNSlrPUAxSWlNNndHVHwmNG56eWcvY2tMRXZMPTA0cCtnJUhXRlJ0MztyQGVGKGsuJmpNZDMrIyJ1bVJEL2RFaV5kY3Q2aD5sdHdv'@;
put 'UUtYXitXRCZiI1EucnFUMC5UfTVrYHByREVEUEI2fkBrNGo3WWo8eTB1Nk9TbzdsJGZGLCIkSWVha0txOTAjP1lFW2dvKWFYRk5VJXh6PHg5IXh6JixlZn1ufmhYMUw0ITJnd2tje29DV1NCbmM3fmErS257SW9NS3pwPjpoNSlRQHg3NWl7P1t6MVpuKTBpRGxdY2w6Qj1jJndjV2ojU351JVRR'@;
put 'Qk9LTjNHcGRFI3E5aXAxRnA0PTMsV1BrbztvazIzelo+ckY0Oy9eSU9tK0c1QklYYiEhaW9FUGRkTDRUYEpbQy88TiojImxdMFE4ekhDSSUhZyhuP284U0ZyLF81SyU+YDhYYVg2ZU86UyQvRnxjT2hOUyx2S1lmPkBRKF1TK3gsO0dTUFlRTkdSUH18ZyZ2MXVHdyI4UDEoOmhROEpyOThZdDk4'@;
put 'VV1nKGNua25LOXQpVGhwN3dkYlNBQ3tpL0BqWiZANm8rdVBUQTFaUjcpVEVrTXsiJWM/LGV9VnldZUFfWCkhdT5VKyFBQmpaPSNOM0M9MVtQTWFrJkNUTnkjNUM1bWg9QHU6eD9AIUlkcFBlMS5razQkTTM7aSJTJGxXR2JRaF12WnAqci9lWW1De1BPSzF4fjA9KFVQWHhzbSNPaXxbQSElYzc9'@;
put 'bzkkajRzUll0MGZJK3gyUnYxKVBCOkchOHR8LkdOQ3NlTWk6JUlpUFNPQGFGaEVbZW1YYWJ2UjRkTWlhUjExL00iejU4MC94dTJ4RCZwOkgpMURHJT0/PyRlPGwuIyouSXUrdCx6QF5JTnEyUUlgKmw2MmVqI0tTS2IpQ2twUmpadzg/fC8rYTB6TmwyRDA+aE0ucVg/cnZFeU5tOmNBRFh6e3Jk'@;
put 'T0NvKzdlXmBlPmA5OSFfaWBtNzY7SV9rd1dqS3t1bWBzRk5URGRIQiV1SWZPSk15RV4lUnc5USpiRT90Y1ZgIyl9SGo3Ojszc15GWmRMelJKTCxybEIjcXw8KTM3b1FgKDd5YDUkQkQpMXF1WXdiNWdWXXg3ZG1xQXIuMk5gQnVHTXR7WEhUNTJxV2h7WWIxc3BvZTRhJTl4fWMmV2h9cUNaTk8o'@;
put 'Rm0pVjM+b2BgeGJKQSQkJFFaQk5gM1s9W0hLMihMdHNTQ3tKaERqOmVNbUJ0OkxSUFhibVV9cXd2PGJLTUg3LndDWCNZS3RRIUgwOnlpUlVxVTNmb3d1JThsKjd4I1cjWSNAT0N6PypGM3tOb0crNTkjbj1KfWc9di9kSCs1OV99VDM1eDtpS0NScGBgRXlXdiVbSEtDKWw0Zk1qdE8iJGcsRCx0'@;
put 'VXwubylzPG8zOStbJWN4QjhCJmtteWxoSGE9VXcrb35qbmFZQ2x3RlhqW1VMKkBWc2gjYjUscm9lUnVHIltEbE49e0ZJdSRvLFo1OGV6cX5RQ2p3JXdsZ1QlXylOZF9UMDpGWz9XXWN2WiZ4SCRAdnZ2d3UkVWo2d1NCNzluUHkhdGYmdHNqSFs+ckZoXlNsUi5sV11QRzlrY19oVD40THhYMzZL'@;
put 'LGkydkRqV0wydSYjQC9pI0AibU55a1FePFlLMU9FXjY5UCssPDg8XjtLN0AlOHxIKEYmI184byxANy4jNkpqWzgkOUpQKkpKOGw4YWBDNy5vSTNtXjRDeGZdZT88L2Z0XlYmNDg3Q3F9VS9PbzJLTThIMiQzKEptUDklM3N6bWA2KGFYK3MyLkVhV2lxNmVZWnxTdk9Sfjt3WzxfZ2tDYz57PVc0'@;
put 'TE1QLzc+Yl9EV2A9MDB0eXp+Vn14cE85cSkxcik8NiNvbXptKU5NOE1UTn5FYFBuYmUsXVlzTzc/S1o5V0VFaE05JXRQYU8vRT52I116YHQocCsjX0Y9aHBwR11JQ2RCYm8oJkp7MUBQPD9LclFNfm5iYiFRVVJoLmhuXXN9ZjxOKDRlUjY1W0VdbSpdYGg0aDhpJWVVb28kQiFLYDwlSEtCZGY8'@;
put 'KDtyImc+WE5rRCYvPGArKiwkdFhYYWJjWjE2T0JpYFVdJkJ8JTEoYlBje3E0a0w+fHc7WEZtbk0wdTFZQkMqMFApOGlPc2MwW1UkXVFScTZ6MkY9aCllZH5OOVVMPDBEbG1MUnR2O2o+ZGdYJDEqZ3gsY0loQ3tBVDEqTEs8dFh4MStzUnA4bmomaS9OKSp2NjkrVHtgJno5UDt5IlQuWG10bVAr'@;
put 'TkBOMDlmX2xdKyh6XTc9YTBTU0kwWjZuW25TKm9RW256YU9JYGExak0lb0AvNyM2bW9iV0U3MmtWSW4sUUI8d0hza107X1lRQnwoTUs6PjwzOE0ofkZDN0hpYXJbdTNSUWw0MHxOcztrdXJNSWpyJEVnY05VNjJJLlU6USlwLl5jRkxwM2M4KDEwIXx1X358VlFNOHVhZVc3QihbSz89Ol95TktC'@;
put 'eU0pKyo5bk13WzJpKyEqOW44cypgSG1iZ2VCUVJJYVVCVFZlOEQ+QW1IVytAdUxEPXNXM1Q1bFE4PmkvQ1deQXh7OCNlYDJbeUJJKyE2dFZrKXBVYGFLWGguJGhNJDojJXlAU0Y/fVZ0Z0JSQHJ7S0g0V1JRIUhKWyZUWiUoSSlYMXlDSSshail6cTh8Ym5hWH1QQzdUZTVEcV42IzRWMSVJOSs7'@;
put 'LFg6M0pPJlhFKzlucmokRW1eM2h8bzlwRzRoNC5FYWl8YF5+bT4kWWEhcmY2WWYmRipIIUBWeXEkNT15LCg+YzB3SHJHMDsiSzdQbWpuVzd+b3VgeFdiYjd5dmNVIjlpayRWOG1WRzs3WU0lI2A/JTtIPmZ8ZiFnMjYiRyVPNiQ4cWV5QWpfdG1kR2VAc0B2c1VFLD1fN313OChGIywpUjZQblZA'@;
put 'akJpPSooekFtZTo8Vz8qTEtMIkRHVkJbTkEjPyw3REpRXVhQcT16N3BveTxwLiZQQiF0amhLOV5tUSh8VStePXsyW3tEcixob19rPUV8Ukl4L2k0OCpLfFFCbippaHgiVGtSfVNHKUhqQltKa0ZeK0suWmVlQVd4XWxzOjJMSUU8ZnVHZHM8Xi5xWihRU0ojWDF6X09gJDZyXixCWyZ5XTVpfTop'@;
put 'JEludihhIiVRKVRLSlRuYXAjY2cmTT8wdllPN0RpaWBKM3UpUC9mPUMxWzkvSkNwUHF7Z0JPQjVIZiJTYDAkQlMlfS8uUFgpMHkvRl13cj43eX5we0QjTDZVUHpFKn1WXlhqcTBmJXw7Q0VZLDVaa3YhQChoKFZGKkBAK2FRYWUrQ19RMUlHIXArYjkxKWRjU3oyNDg1ZTFYO3JpM0VGPXh4byxl'@;
put 'ZlMlQHw4Rn5efkFON2p+N2BETT4iTGZ9bip1Nkc9YVJ+XXAoZl0wL1NBQmhEb2A4RiYucDZ0aUlJNnV6cGNsLkYociJwfXx8MDlGcEpmVXBQak4vRjdRPWVqQm5CIUd3UEtYJXE6Xissa0ldYTYmOz59b2khRmBzRlcuOHlscztYMncsKD5jLHwiKWxCe15NQG5Qbi5ZVkBVZDsyOl50MjQ1UUg2'@;
put 'XlpWNGk0ZjpbfkBiQ0dRUzQzSkQ3T2Y2WEhtKyx8Y3o8KHpQSWU1bUNSZyU6aktxbEQjZnI/VCY5Zk5xX2c6U0lQN21VNDleOl0xQlskIjsmcFtoTE1qLyxlIztWTj11KyVzd3JYdnJPWHB2P28sOUd6JVtvV2dTVl4jZmFLZHoka2JmeT5QL0FNPWEmQ3MhSH1iI0w0ZFIidSRRSlcxSCVnc0p7'@;
put 'bltbOSpMYU0sfU1CeUIrVlV7SVpkZ1IvZ3QyK2BIbXVSPiFzUXtSQjJlaH5FPGd3Olo2NzVHeiRbP1IhMDAvI1suMnZwI3RTa1YxQyM3TS5vJnoiWntRMk83QiE/ITMhT2BJez8iMUJyPGtHNmE+RzZsN3MlbDYkaWUvM1MoMzVbQV5pTitMPTNOUn4laE80Ql9WLHlWYixJbk00Qm5jUGxJcFtt'@;
put 'YzB0K2ttTUYqanwwO1NjLjNoXjZiX098QUQ+fHhPMVFPRl00OlhRaFVmVksrY2BKckxLMzwsQi48WjpUTipFLk5OdnBodk0qQ2llZk1TMDBgW3BLJjFNZ3hGdmwkMkRqfnZ1ZnBbWHU9RzM6YzFjZVo3dXYhR3F3VUJpY0dYWGV4ZiEpZkszUVlbK2wsYF42SzRyPy92ayM1NXZIYCZPQz1GV1da'@;
put 'YnpARGs7VUI8bz5IZHI/XW0mKlduTGdHNzlJSkx9RjNzRmQ0VjxTOyp+el1hSi5tdUFBQFFkRHYoKkI5RitNUGY1LzE1cGIoOFF0Q0E4fVllIWtMYlQwK1glKi5JayJBQUNBQUFBQTFCUzZGU0dzeWxdOD98Lk1lX05rUFQscyFkQkVNbik9YzNtfl92QU5VTCFzJnl6RXJ4JFp5Y2QlfXM4dF1N'@;
put 'b0lbOFd0RXwzQ1c+cDt0PTFiKClsIz8vL3ZQQk83KV0+b2tYYTh6aDRSQG5jcXk9PUR9NnYkZ2VjNjc0fU5LRXxnWyxpI3xKP3YsaXpBcypdamxmJS5mOjQ3ODBAaj93SE51YmxsP3dvZihHTVdyLHRZOTU+Ol9EKzgsTX1SIkx1czx6VG9LPy4xWFgpdXFnRkdVY0p+JSt9SWtxQnhXYC4qbygl'@;
put 'SHdNTj9HUylSXzJJJCZGZXxqLDQzM0dUV312WVJHKmdzRiFeN3tPYGdeam14UTVZWHI/bHc5MldWN2NAPVhWcjQ1LmdzaT5ubiglOSlBbUhVJTNgIllbKUlFYUNDSz81MXY/U0ReKkEuKmZpeEh0bG8vbnQoWUN9JDRaKDgpbTwxKl01WUwwUGJCV1NmZi9bdyVJXVt6aHNsJEQ+aDFQTGp3OXIy'@;
put 'T0k4OElAJCV8Njc/KCxnQlBgfStpM049LiRqZVJSPjh9MFJrJkdWMCoqSElmXlBrdClQXXFxTXJuRiEjenNVcTZSeGUlN14sUVlsRH1eLHJaOTdzTmo6SHFIMlV6MVEmSiJGRzFPK31ReTtTeFBHWnx2VnAlI3pleGcrcWQ6TylUQ15sUERKPEo2Ul5ITStTXXVLPCpRX2sjVzE5Mmh3IyomVTNg'@;
put 'VSQ+KlNDXmspO35PL05FdHB5VWBYZW82e204N2wxUnIxTWEpVmNyWlpiRjE+JGlESC9ZQUBYR0VyQUhQYzVuOkxeY1kmYFJvaFFyKz55JmRidSVaI3J9InUlaiZEejZ4IX11eTA5K1Eydj1HVllmQXVxbWxmfCs1N24ubi48SEsvJiJ+TWBMdG4qcFJFbThqPXhsWXQ5UFdCZW8uME0jNUZdcCFQ'@;
put 'a0Q3TWk4dFAsRV0oTDU1VzFTP256QFZvO1Q4TSlzOUJxQ2hzQFFpVjVMP1MmPD5XREpxaS4rSzUvWSNQeDBJRXpKN2lSaTN8cVhlP251OWU4YDV+UWJyQz1+MldtYl8uNHV+cjtvPllSLFNqXSxmciRNQyooUDZtMWtEc0xEPmpCWm8qRUs6V3w3dWg0O2JecXZPaUApT0pxW15ZRnhwL2ZKenp+'@;
put 'eFYyUTNtQlpHPiV8Uj1ZcTBZaVpPK24oQih0KXsrbX07bC44MmckKi53NVspTiNrRWRGRCQxYEVBZj9PLj5HelsiMT5KLGRaMXQhdFM5LmY4NSxKRXV6L3VUL2AjbFduNEImOCZ3OSoiTiZ+S3FacEwkeDI8bCVLaC9oSiEsMTxFIXtCa3FWdW0pfVg9K1RuYSFkKXxiZSNXRWEpImwhezdZSnol'@;
put 'aUl4USFRO2I2dCpaN3pPIyt7ZDhRZ2ZoaVl1PkxgXkVVR0tgdHNVbjBddn5gOlFDUEorLjRkMVt1NUc0dyE3Q0pUNFVbZCFzbS42eGB1M3FlbGI9Kil5cHR9fSNDcFBWIj9zJUcpPzRdUjBdXzohKyJjbD55MStBcl84T1p4OVZ+Y3BxM2VyJDZfVlglZiFdIjw1T2t2UWFaNDZYKyJXdDR3WXMl'@;
put 'V1pqNzp1THg6eFgocl11K0UhPXxNUVllKTRTLGdSMlNgK3Z2QnlPJEZ5WFpmOztEZyg1disqa1QhRERDTS9PUHBeRVI4VER0dDAodktSUChOWyxWaytbSVM5ZXQuR2hBb0ZjWU5ULyVSUDw8WyF+T2NgTTYhVj5hK3Y0SUNwIS4ycTMsbiZCO3hBQmY3cGBHZV1tc0tWZGR2UjBwU0tIXnxdYmZp'@;
put 'TUchdk03ZTpPVGY4YSt9eWN8a3RNRG8qdzpAa3MyeF5jc2JjLz8iekxvTlg9ZE1gNHZzdXZtLF50UHkxRTFFeV5qcS9aQ1gyW0BmZ0FVTzZIOSREMlVFWWdjfC9nOmB6bCkuYHd2PHBjViFHTnkvTHlZKjhNYGUoVnRfXThPWjNgLlFhIm5Ke0BjdCg3JU5CRXNsTGs7eDNiaioidU45W1ZJODhb'@;
put 'W1opVn1UOWJvTjI1OiltLkh3M2pnPUwyYkQ6dFBgKX5iJF07Kik+QTBCbEQhKjd0azI8STJ2fmdjSVVELDBOcmRvYVpEZ1FvPm5Ad0U+e0cxUiRzfVs6RyZ+al9NY3IxdW9tfnojfW5xTCMoIkImaT1qWTU9QG1ddip5VHVFRktsJEQ3UVE0K287Iz9lcGY1c2NnOV5Se2BeZGI5Z0IyMFdgKzFr'@;
put 'd2FuJEdQOzdxOVZwOWE/QDdGJiYwazh1TDxFSVcqNVBSOURFLnBTPEt0ST87bSZsQCoyP2lReTl0ci5kJXh5TTkySl8sUF0yT2hBa0ZpeCtjXk99VUh2M25DJHxEOHc9bFh8U29idjZAZ21qSmxpYlU+JmghbGU7M1lgWSk4OzUhaXQ5TjJbfCQ/WjxJLiU8LG5AVCokTFNwYSUrSV1oRX5fRnZ2'@;
put 'TzB7T0cqQkI9OkNXI3xGJWozSEI8KiRRQCpSe2Q6Z1s8Ji9YS1B8Mkg4SCUwK3RoZjIsTk5bKSxsMDZPfHk8MlVwV3woR2g7LkdZUl42NFo9PGZjRH51d35DdiYyKENgYkVFJGpLfF1DezV5QyxlVTwuajdKLnVCLjwwanlNNExieCF+XXE1U1RfWkZ2MnAoWVduUWNzcE5CNkt3MmsjZStXdUlx'@;
put 'ZVc0Lz1AJWd3b3l3bnVTMG1zOng9by9+WntlTzdPTnJ+aDx0eDAwYGhYaHt9YEdzdiNhUy5rM3NGWSJnciFlMn45NWcubFZ2ZmI4OUBUejdCY0hZRCIoX3tnUkV2amhZRTZhZ3pkbF5NcHlyNUVfYkRgWHIzczZESFA6PWViK0s6V2NGLk9xT0NTVVU/Zl1ZZmVjaGw5Tk46N21+XlZiemdMJT5P'@;
put 'MCQ3YlUhUWwoNFM2cEdQI2J4Wmo0LlE5X2M2Ym1CJipmejtvOjhbelQ3cGZkOFdQN2dzNzBQX3k9Nlk8eTl+IUZTXjZsciFOQnZgT2ldWGw6IS95Mm8ocUdLJU1jLGZuRmtbVCw1eFEqcUhidS9lY2trKzxqQXhReUlGentHeHNHeHBwXUFGN0Y8Y2dQWUNxLF87V1g9dmJFRXZ3JmIufjJgSGhO'@;
put 'ZkRzVD5lK3RUeCsxelhEbkh8JT5RSU9ycldxYCxYY2pxSDg4OjtCTylgTUd6NlRzcm5xajBvTEt5fTpDemh7Nm92RSNuRkxYPz9kYFpnZl44ZVAse0p8Ri5vSjpgbC8lUH1CZllWcC9AYjx+PEA1KjxvPDt3cG9MeD94WDE2dW04bTdYZzd4TFA5SlJ9QjRSSlBybEJzOWwwdElnaV8jNy5gTFkw'@;
put 'enhhNjRjVnxsZTlbRikkSz1EUV58W2VyTn4hX0EwTVA4aHZAOT09QF1NN2Y3ekBKRDk1cmZrWTNEZi9VUnt6YEB4Nj5FR25VVjBiZHddUj5oVFFGI103bU9vdU40Tk1JdllPNkFdRSxdfFVOXSIuUUlpb3M7SXt3aENAY1dPfmVOLytXNjByL1ZEXmFqcyMyeSUqNFR6YTk9fWpudkQpVW4kUylm'@;
put 'Ik0hYkwrcG8vMkVOJHFGbSJYUVJwRFJsdl12VkIuQHVNRTRwTzMkdkAmY296PzR+W24iYTAhdjAlLy55QXdqNHhta0RTJFouIklIWV1bZkwqbnRfUkB+K042djZlaj1VaENpeU1gQWQ1WUpWanBoMTZbVG5qMUpNQTglQzZnQm5gaE1XVWtLciZ6SjRHaERibylBLz88V0xgIypvYHZWKzJRYnsr'@;
put 'T3lYNm5VdFgjNSRsVWU8Wy9eNURNOkhYKjFAe3N2aUx4KlA/LzF+cyU1eWBTWjxFfn4vXnBtXTg1ZGcpJjU9U1JxKnJTd3VPKkxlU0A4SXBnb0hedzVheXBkWkxuQjJsRjwoZXBUSyNrYGkvJCgiOS44bmxsRXEvMH14JmB4Umw8OCFseDg8Mmg4Q2JLNGkxej0mUWsoZVc7eEp1PXEzN0M8VmZe'@;
put 'd2hrSVRCYCxhLih4LEh3flhkRmg8aHl5P24icE44VE5IJVQ6XiNESmgqWFhjRiFmI1I/KmVtXixqS0ZxSzMkJVtNb1lUZkx1QThecylddjkqXmp8WDwlLHlzNzxPaWdpPTxFQmAwZnV4YUB8bVpSNDl+YCtsQF1uXls4SkkpWFUzfW1EWiNXeHhjdWJXcls4RX5AYjJ4K0U5aStJQ2laK0N3SG1W'@;
put 'eHdmPV9deUVvYV9XVSIoRzBnQWtLSD5zUXRZfFsiTlB8Tjorbyhkfkx3VGBJUnxVP1Z8WHVMKm4jJDZ7fDtKPyMmc30sL2dYUShdcmBpalRTZihpYD9SKihjaWBIcURzOjlHM1pDJlAzZEZMMltYI2M2MWdzTy5BXyhwa20wOnhNMHxzOVkjPVNCajp3R085c3skQzxsZGVLU3hQVzg5Rm1hSiFh'@;
put 'WU9FUD9xPEZDVH1BJEUxcT9lZCNeLEAhRVVxN2IkVEg+JDYrIjspLk9ya3pIQl5dUU1rLCpJN19hJEgsbi5TRVZLXnZ7W0VsMW4kSHBTXzAjQm16UispLlRML0IuazFzY2E2fVYpdVdKNi8rMyhIX3JKZzhJWWwrTSl2ZEFQSlBrXnZ7em19OSVAV3svMzQ8b3U8TWoyVi9rSkp3ezBnMmQpaHUu'@;
put 'MVt6VlFAV2Y4YllVeGY+TnA9UTYjPSZzVCUrcSNlNHZ7KHVfTTpeLzkoRk9ERzRpcjtye2o5cnB4dSFWbURddnRgbUhpUyQxKl5hZSozQjV1TFt6WHtUblEkWS8wVTpZIXZEXntoYT4hckJeRDVKLHpHaUxZMWNJMktPRl4mTTBzPEIoZkxKJSguTzFrSz43QzAxUCkqJWxbO31qaTpJbTZlNVdu'@;
put 'OEc/VEhQI10oI34vL3JEdEIob3xqNDVfaitTblpXVXZ4fUtSS2FKOXlGWFI7OUlvaSsiKlRgYGckI0pYeGp+K2tTODd7e1JZM1cwU3UhUktkJlQwNHc3ajtIMFl9aF4iQW1ITFNsNXkjIyMlaFRgWl57ZE5LO1VvbDl+TVttTCxYLEdnVjFmSnJJNm88OVhpJCpjaHJuIm9OM2xOXUleTz50R0JU'@;
put 'bSQ0TEpFaUN3ZHBiQzEjbWovYE90YiR7aUlxJTpBMUUoRDVUdjFQWlspaENoLjQqTzQ2K3QrY2NtfW1AS1RPaUsheXpEfk01b086YiRRV0ZJSVdQRjJTTDxucncoTEI4ZWpLUzdZZXtual5qXTtZeyZacDc6dHV4L05PUV5uNyZYL0Flci9gODhjRVVqZFVbY35AUjAlY3ZxaTI0a0pZQkEoTX1G'@;
put 'PkNfTml4S3JUUC4oanJaSVBnfUY7Xi5PRGszJS5kKVojU2xmfW8xd3wrSllNYVdEUlBNU2ZffmQiTDk3bE0oMj85L258REYyYDVRailSYDcuPVcqcF1kMDt0c2FfSnMzdntsXVddKndUUlhHelhwbFNJKHpSNiFZU1JzQlloI00+RCNTYlIsbzI1Mk1YQFVJOEY0KCtiNWU8cmhra3RsSSZZXXgv'@;
put 'ZVJpKTZtZzpGLyMwfCwoOSRqYVZbVkhubUxVckZANyMvJmlSa2hFTGBlWCE1JHBaUVo7TGh3KFF1W1o6R3tqKFlxRUg1PT4sVT1IOEkhaUBQTVdmLFBJbUYoUj0xKVh4cGJmWVBjOEsleTpAImJ5T0NMVWhtImtdVCF1R1J0fDJpaSNbUD1WOFZYWz1HXXUqTDd+Pyt1dDNmOjM3OThLWXY6bEw6'@;
put 'QyxUVUY0XndgdSpZQXp6ajI1PCglKm5lKylKWWR0XUR3WntQOCxNT1AoKER3e3tHRWBLaVdWdlg2a29ufDtWJGx0MWlEXyMuIVtYcHNxVXBsMWsocj09U3k3RGpPQWlSe1RIMFk2R2xLOTQqK0shPWhUN3IxYVlaWElzS09bZW1QJD9XSVRmb1lnXjh8YHArYzg2cjt5RF1aIXo/SF4ucHU1PS5L'@;
put 'YjImUnE8W2pGNEsueVVFZSFxTmJDK2xQbjBqfVhPNWRiP2ZLbF8wYXBjbEVAenlFaW5QUk9Fe25RK29pYXNuRjpqRTY7TFciVTtKIS84LiVJdGVdZX0hJWs3aDhWVmpwLjdeP2duZzFXejdBLlV6fTlFVXB8aj8/dV1CYkhUT2FhbkVbNE06c29eRFVINWd1V2JlLFFEW2F3OmtUM3orIVUhNXRa'@;
put 'Rmk/OlFUOCowSV5PKFNDfG0pXWo+Xm09ZE5XPE8yK1lFR0pWIW93YkZVT2c2Uz96RHl8dmVPXXA0NlhHZm55Qn57QnZwVmdocEE+fW5+QFIlJGNoa1khPUAzIW85cShGWXRKODU9OyhyUiRJTUoha1hEYk5sd2A+azBiIXBtKkZgfClOTDN2TF5lNEA7OVNsfk0zZk9NZUJ0MFp1SGlVZHgrYVpI'@;
put 'ZkxsK0giXnpEbGtyIyUlbm0vPHFvT2coJjtZLD07YjEqI2wuRUcoIno7Lks2LFBnbjkxI34lcUlDYEEzQ0lFNyR4SmJ4PEFCel4yRGY4RCR7Qk9aem1zUmd5R21QdFc8WC49KVdYWzJ2MTRUTzwuPX5FUzdQe3wuZ0tKPSs/ZjZnfXxrR00kKkFQZmFBOj9HdG5IbldCZmZxU2lzdm1zZU5yYDNC'@;
put 'QHtdMTpYYClFIWs2dU1nIypWMW1CR3VpKCt2PmM2bDolN0ErJXJVKmVsTFVEdkJUblRGYUN+R3JaUTZhVXRYMGlpVEQiaXgpTElPNjZ4NGluOCVMb1I/bTcydDYmfUZFbzhlSkpHbW5UJDFNP3FLL2xmPXFwTjJsPWVUKUpDMDtLJWhiZixCKSEzLmEjN0Q5Y34pXnQ8L0g8dEM+c0hnUDA3MVsi'@;
put 'YSMrOTklfkZHN24mbmVWfV02MGZ5bHRZYyhPdExnIWtgfltiaW9XaD9PSU1kbHd6OX5nVi9Gdz0lcF5zP31ETGFsQ19gJUBgXkUrYDU7VTR7K1IzZV5eR0x8Sj5faVVsRiw4WGZQSn0xNk15cCVKODEmOX1DVDhBUE0/PVtSV2tId2gjeyhsWW0oVz5kPmwzWlQmZEM7UFJwcUJsfSwjZTludGlV'@;
put 'cFZ+V3l1Jl0zcCJkIk88QjlTZW8xOFpdeHc/MSZiYVVuSSkyNiMrZVlaSXFBeD1UeUcofUhJdjA+Ulo9d1RAOlczOSY4K1dCMDwmOFVyJChuRj9Idz4/O3s+dzFQMzdxNF96NDk4S3c8M042UWhOKFlhbXdjO0JsO3NqWSZbXmR1b259R1Mub1B9XToifF9iWHouXS4vNml0PHJtV1B8NSpEO1lm'@;
put 'JV1Dc3tJcVYjKnl5NCssSEtWU3Z5IXZoP31OQXZbZHJbKHI1XnF3aT5NZEgjQG9LVm1aZTMlM2NTT0NASkF+TjJtaipQU1khQy5xfm5hOCgkPCV4bG1uWCsidXN5Jj1SNzxzZVRtZD05KWhdOWRmeXJrUkBhZGdvNSVwSklSc2Y4LyxJJTRbWShkP3BASWFRKWRMTWU0RS4yMDQ2OHQmS0lfWkhE'@;
put 'KFNWeUNqJkhAaCNlO2U0NyN3Mmo7YitVY0t7V2JoPk8sSlR8S0VqTDhYRC5RTG07Ln5DdltoI3c6bnR6emNxbiR9ITd+OmpjTHl7Q3EvT0paJnB6NWguUGp7QlJjd3BXSVUjQlEuQGQlU0NaPGk4ZlVRZ2dKVlNaW2RyVGh8bzRdJSxHYk87R2pEZHprZHovQENmZ3h6UnNNSVkvLnJaS0AsQ1No'@;
put 'fHxqUmNTamI3PnY5QE9JW2E7ZTRVNmxFaHFIYHtGVyIxX09vM3EhbF98flAoXSFMeWRMTFNXeTdFfiNFMjIldVcyU0dyQWphW35pI24vdCokSFU8TW45K3xdMk1ULnovPD55NDtgZCk0bHI4PlAiVVdIVGkydCQ9Q2p0MSJkUTZ9RWtpYU0oaWEzXXQyXXJYZz0kUiM1PyJFUTQiTGFkMElNOmx9'@;
put 'RCZFYWxqZWJ7KEViWSpneX4wQCY/YV5yPGRFJk1aYGIyXWIjeUNSNTh6Y0UiQUQjUXdSM0M6ZiVzWXl4Q043Myx0XklgdFtMISJkMU82Pis0dj5CcHs4ODx8ZjcwV1NUensqNiF+eFM1LjZFRWliPyVhfGkkQFY6Z05Xc3x9KGx2Qls8TW0zKWMxcyVKL1ZvejMzaW9HbEssTloiaj4oOEE8V1hP'@;
put 'V2BKU0JkMndUWyQ0XlhQRVlkMElVRlU1Rj5UNUloVFJpSjEuWEg0fSx3RFc+TCk1PTooOVtHL00pZWg4c2F4Jl94LDFHM2lmYVYkWENBYmYyLDNlMnt0R0AuRih0QDpCL3Z9M1gvPD1UXlRxdXNYI05QcSNOKXthWD9LIURpbUM4SyMhWiJjS0I0Zy9KQDJpWW13bzgwW3ozSFZRcUJDZE5QP1Fw'@;
put 'IXAkVER3e2E1XThCcDRnR1I1PG1rPGVQQCQsXVNGNiUoKzAoS0poJitGcENFaFg5Wi9dKSlEbV8jVU1MOmVuOlpnQVEvUnFLWiwuUS8jQHA5WEF9ZWxXSEd0cVZhWXhEV1ssY3k5fGBKdGlNcyxAMTVKR1JmS1o6VTptQCp1UThRJj49XmNOL2Qid0Z6cEBzejR7Rj12Q1k8Xmc1Z01xPXFbVTtC'@;
put 'dClJWiQoMjZNNXkoI15SUElYcj0xRHVDSUc6VWc/dzBGU1lmSztzUTpoR29AJVNlLEtVQ1F1ZkJEI1ZsPC4+MyxKRDNUR2NpeXpjfVFOXzNHKVBEJDAxVExQdHl+KHZxSz1gOUQ7SWFgeU1lNEZZe3NFfVk9a1UpYUd0Q35QN2c1e31qREhZbElQYGVvMGQ9ZT5pJCEvJGIrM0AqMStNRWVod3V8'@;
put 'LFtCZS55S3hUQlNRMUU5Z0FlfFRlV3k7Tj1dfi5nTX07eHIjfUpwUDtHWU9nJGZPanRiPDgoT1U1X0hTUjU/VEFKS0QvVGkmRW1JWUQpcjdlTkEiLkx2blp1KiFHKHgyPXxDQmp0cEBMY3xEPVhJPEdlN1VYfDl+STh2SGwmeHQrfUFXJjl+KUZudlcvZChydFBFfXU6OkddWTs1MG9FVEhfSHtv'@;
put 'dypYRShWezozbmAidDFYKTAyZndmfjFaeGA7bWNfb0QoVyI6KkJWNHUzXU5LLGdsKCQ+V2gycnFHUkpzXnVIMyk1LG0qVipqUGxGRW0zRC9hQiFAUF9RckMmISZAYXtqUEtpZ1F9IkM4Rj1vMnAxUWkxYG0rZyZSR2w0Sl41O3IuMFFpdXdZQn5JL09XZm5ORkdGQHBpIXlDPkt+eDMpfD9lPzxu'@;
put 'UCRVNGZPfUk1TjV8VDoxd3xtbz5RQGI1JGFVdzI9ZGx2dDcobkwiUz0oOT8uK0JrKWdBcCI2NGhaMlM+OUJIJTRsMHZGU1RXeG1dSyg7QXBvR3F6Rmc2UzAyVkRKYGt1MjE0ZzkoTCl0TGRRL1hjMCwkXWJhfU1fYChge1glN301fjgjMk9uN2BNclY1Zj0qUUUmcFsmb01hTkNCKzkuKVl6NixP'@;
put 'eSVEXWt8L2ExQnA/JWZwaXljYjxVJXtgaTZuV0hjL041JVMvOVJpJTNeXSRlUyojNXlDV1IkR21dNS59dmpjPWlhbmUieyZuYl5aO1pLR1FSYnRmNWdPImxUIlFUIVNKeDE3JChfdVNYfGk3MEhCM0JhOUJ8c3B2T2JPdk9yd2ZMPS9qOmdeKytZI2Y8YVgwZGR4YCpVQzFvVG45VmhPJmZufUto'@;
put 'JH18OXV1YltgWHB5MVpGQFk7Xk5lUn46NSlKX3BEL1owZS43KDRuVnkiXil9SXZCTUw1U2RIN2J9JFV8YDRHRz1AUlU/U1RCfmwjZkJrJmxKQElEaT55fTQyLnRqcTksRF5QWDtiJXBMZFc/byRJa0lUVENtNkl2YjRLKHJTVG5+NUhiTFkxfGJGZntuK2w9QUcqTFpPZChqUTBJTTt9MiMhQjo0'@;
put 'QTxPV3FzcjJKJS96MnFVdHx8QUlsOmhCTVNReF9eJH5VVn5UaiZGU3tCcVpjKEFKP0o5d0AxSXBvXWZnfTcmSDNrdERSSFlpJmJKRXhHWVYxYlJyImZUdCt7V0FWfn5jLls7UiNUbClZfXspZnJscmZIeVI9ZzEwT20wV1t5SmQ7eFkpV35ucTA/WlJ8QCklTFRxfVQ0WTNsN3NuIU4rPmRRVVIv'@;
put 'YjxwNit6N2AuaF9VYmM1MHBsd3pRTGNpP1UqYVUkWiprYWEpaFlZdT4yRyReKHBLfX5ITCRiSjRVcSJlTFVNMVFWN1ZjIVlqVn12V3RAVHwofjhuVHo2QlV2dDldUW8yPHc3JlRCLFFrKDVLd2w9ZSlsaTZTPytNezxmP2I0UVdfeGJ7b1Q7WV1ZOj03czxefkNzS1BhcVNJX1krL21KVDRFUiln'@;
put 'aXMjLzlvMzJaPCN0cnVMTWZ1RUlxP0RLbTV4dlNBO2ozQyQ9cmlyJTQrUFVlXURnR1k1Ojx5YUsrWVZCMGQyQ3Mxe1lJeWNNJCxqPWZrLGR4Ojt8eWtmaiQuQyRnND9uI2oySFlPMCx+Nno5ZWNmdnpIfXI4TndNSGJuZFVKMmZTIS5aVSRgZ1EjY189Q29GNllJS1lGZmlob25Ofl1SUHlKJV41'@;
put 'cEFNdWc3Tn5BXmtjYXl4MXIhQmg4L21XXXxsKG85Zk9AWCNiUWpaWXgwcy93dzQqZ1dnLlQpdC8seXZINyVATy9OQmNdMDAqOVk9KF5CS3dePyE3PHBedComSUIuWXRnRHV7Lkc+LGZkI19hRF0vMnVUX1p6WDJEQENaYUNDXzMxVz1+KH02fHc/Wko2bCNjWSZtRllqYkpGTE09blVJY1BFZXg8'@;
put 'bDMwNDRRbz5DTDNPNVAkLlM1IiFbTUd4TDRAaUUrYXlaZS5oeDh0YGZqNll8cWtHL1ZpPGBiKHMxN04+dmRFL3MlSHFdVF8zfnRKb2h2dnJpWDBvY1lvUn5+YCs4cmh0e3NDQXQ0PzAkV1p3KG5JQTBqIVRNfTA6WT99clYudDo2SVdBVTFJTXxgZVpfIWMkRks6Qy9CR2FDQ00ieUZ6TXAhJVNW'@;
put 'R1dxNyxAUmdiZ2csJjo5JGcmOm9xbE9TTztEKjJqUFh6JkxbTXIwJUxMQnttdWZmeSl1WFpyYDkiWz4yPk9VU3JjIztzT1E6fiYoc3Q/Lj0veV5pWnJLflc5RyU5JEMxNCpJflJTb1Z5Q2t8WC85QHVqcmdUO1VhSSkpVEVqNi5TND9edjVndDtHbiZUIWh3QVModylJWT4mSmZjVjEsLjB5M31k'@;
put 'OWYzLzYmW0BeOC49Z1o8LHx+aUhuRWs6e1VENmBvcDoxcHR8K19fV157OXIzVC9TKjNHZjp+ayxXOiR2XmNEWDs/RCw9Rn1sIXNseShYczNGI2FEJHtxSWVhVVchVlI0NmlBJjgkM0JJKF9eflczd2hPdEp+bCgpZzRzJXN4WHFPRm8oSENsYmNCVkRdVEoqLj9XMjMlYSx8QldaI0g0SzFEaHwv'@;
put 'Zk53PjN4bCE+YkNQVTtnOk9leWthPiFoaVF5QGdOaVtBRnpHQFJzdyV7UH55LzhgT15LUjFlPVhodnAxXmApRGBrIjBCI1ZYSmBhPTxwPEkwQ0teaWUvM2laXm1id0tjR2AuQGAsZVovfVRoZ0VZQXVnNj46RD97MCwiSD5sK10pUTtuN1tOOiN4TmVhXlJJKV4oIVZocThBMXNfUHtCbWQsYzh+'@;
put 'PmNXNWswRldeRko4cStpdGQ2UnAjTFtlNShtPDRaQlpHeTIzIVQwPkM4RGxCVUlaQ284TnV7UjEjb2pEOX5rKW1hNV9mI1EsM2IpP215dHtKXnYsNWgvfDR7e3N2UEpBfXd8VWJXdDdDVFQxa3R8IkByPTNoQ210JloldmgxR24iU3g0cXcjI3VNKXs/RXgwdksvQnBvXWxneUc0UjBiOFFmKFdY'@;
put 'T0F8SVBqNWRhUWsvbWl+NSYuIm9TTUM2ZFpsRnE9fXk7OSRtJHo3RyJMa0xFTTpaJnt3M1FhSSV8UzM3K2NuK0leUTVnXishUztiOXgkfD5FPUVVdj1UVC8laDo2UDlCXjtSMENddFgmL3FlXXhvTWg3WkRzYkIzOF52Yl1nOkkkcn5CJnRJc2l5XmwzT09kX2pwSU85KnhCdVV4SzV2bWdZQCo7'@;
put 'S3psKG0/Nm19XyFxcT5jNFtuP2pUXXVUPFhpLiw0RG1zRDxYTXlPcl5XJSk0fkFlYXhea3BWRUpTOGRUdWBdb3g2MWwkJnVyZUZAYlhvdzc6aCkkOkIramhjcil4fUxDSS81djBUfmFWSlpUa3h+KFEzckNsKHRLKSRCVDkvNSJfYlUlTSVofWYifCJTY15PJCQoKjx5KH5hQ30sL0t5fTVab1I+'@;
put 'YlhBY2F4Y1kpLHsyUzp8JUc4QXYkTiZZbiEzcik+OlJZP0ViWmpKNGZrZE1rQ1o/SmJqM1I0Xj5Vdi5ePm8wRHQhOCo5YmtwaFZwJm14M35rbVVMWWpJL0pfTjIxVylec3E2NGpZQ0gySkpYM2xpJlVuSWZtKVVtdjduKCNEdCUzUkteajg9aTlnSndXJHVtSzJ1SmAoYXFnSVF0NkZNeSNacFY6'@;
put 'aFkscUZvR2BFQTszdlJeQzBFRXRDQ21lJkp7QXN4WCVDO3JLUTciZTFgbm0vU0pibUt2NkpRdSZGJlEvRFIyODc4aU44YCNiZFZTaFRwUkFVdStVSSpvdyYxQERoeT4uKHRmVVpvfDxVeGEwJWVPUmVCUXI3UlVQKURRQnp5Mk5uZHMhcU0xfXtHc2VHUXpfcSxBSyxbTSg8cTlDZ0V2UnRLIjhn'@;
put 'L31PR2A5VWNBNiRnR31fPHc3dEhvYiUxMU1Oe0AvbHJOPDJDIyVzZy9QeEJgOXBkIU04UUBreH0vcXN6YDJ+RTlfaTI5fS9bTFJva2gvIz16UkBtX3dGUl0rQGZDcX50LkR4PV5ILCVbbEVDWWBwdi4+OXQ1PDZaXyNbR2V1KD11OTYxYDZmWmpXMT5rR0E4MU1Qcy9SW1VbSTVwS21nbCxwXlB7'@;
put 'XiIheWBzVjVFe1FBTHx8ckM1PGI/SFdQbDJnK3tfZmR+M1p1PTdVZjpfP2ZmLFBbSSwheCJPaCpqNzxqV0xubFN7Y2hKRFtmIzhzSzxzSSx7SCMibT9SIVUiLz0iazU6ZDxONTZ9Vko7Q0VzYWxZJDBBd2FFJjc+Y1plNExGc1lAL0I4VFV0QGg+UyJjQ3F6M0F2S00uYUBuZjRFXkJfSnA7U3Zv'@;
put 'ITVzfE9YTU58YXpXTGI1TzRISlFRe3UhSDpGK1YjKUduJCpVL2FuJCRGcyVtUmdFSVQ9NXI2dHQ8PFJLR1FqQFRRfSNNdTV8Z3dwJVZbUXQ7RkNOeTt+VW83IldmYSxFOj1SRnd5ZEcqLDJEekNPbmB6RT1CKCQ0cTtvL3hsR1dBQn5Zd0NEXjd2QWpWbzVUL1tmWlM2Q2YsRD98KVcrRD84LGMp'@;
put 'R3VNfEtlT3krUUtqKnJVbWhMPFlMUXg8MiRrXSNOeTllPFtIQi8hYlVPLH1JbmZLOEMsRHUzVmJ6QVhQOkh2TEd6VnZObDR5Q1tUIX1YcC5yemNbfkZhWjJjTHpwc3ZhUCF+YG1APHxMUVQvbngxU3skelFAKiliWl1wcEBqeDRtYSNRJGhmUSZlNWVPUTRMRC5Nckx9X0NTPjtrKiN1LjRSQS90'@;
put 'ZFpSP2tQVn5NZEZxZSwmOXJvaHwrIis0VD9AfHJXRV59QEMlc0UmdykyUS9xOXomMjQhZiZkNChwQyZSKWR3USFzUmVmNTtxSlBPPC9XUipVcXtnZTk9O1A8cDYhUUkod1BZaXc7OT0vYD4pUVdlMF1bL0dJTylWMkI5aF01WGZCe3BWYSlCZTtNWiZwLlBWUEdnTzhgbUsheHB+Z3I1IU0qOmY2'@;
put 'ITVFQWlvUWxMTmhXXV5rMUYiRC86bFM5ISR3PmlsQltXZUpiMCErOU1efElpTSUpbGtJNyVTQlpjNGRsRE4zbktXeF1XNl1LUDxvMjxWQmE+PSVPfVhrbWFtIW9BaVNofX40Ll57QkM0SzVFY25RIj5zb0RIQUtaRWlNPDtmXyNtOTQ7TltEJilfKCRTbGRlZGB3UEsqTDohc0ReTSF1MFI9Lmkl'@;
put 'dSlqLHoxQU9pemdxKSopU2AzV1JIVUtzMSJnOEBFTW92PENGdUwkYT1DKkxLMVNRSTF8I31ub2xDVH4icSRae3RbMSFrb3ZUVVM5b0syPS9vT2FUKThKZ3wxfXNxKl0+LkRJWj55KXtna0BYd1k9YGspTlBwUCFOZ0VsOHZ0Q3dtRzpwIzVxIUdteDt+VipfcX16VkVAMyUjaitudStCU2EmYVI4'@;
put 'MUgsVEhYLmJSV0k1LzgwQCRRM09kUFdfbUMzfk1Ye0NMNSIiQy5WTHw1Nk1xU01Jc1I8YEY7XX0iU31NTG9CTnchSkBpOEF2Wjs1WyhxU2VfeCJPKjhVUTFCWXttIz1DX1F6QzBEZUJgb1dmLzN+c2FuKzA+SigrK0tdNi8xZmtoL3BZR0tbdV83UG89aCNhQy9TUl9WTXkwIUlWcGw1cG5lUU8o'@;
put 'cm0lWkguKkhuMUY8OChiX3I4dz9bVjFHQFtNeHk9bkx4IXBvNX1LUVg6QH1KaHRmdX1pTTtVVUJhVypMMmZKXiwoPUEiWCpDXV8rd2pUM1Z1YSs8Q3pLTUspNkBLRVh6YHkibnpjeiR1cXhaMW14S2YscEA0fGphLmhQfmxQNlY0RUE2aTx5LEJTPWFgU1l7Zy9yS1czbTJzI0FAaEJLN21AXlc8'@;
put 'UVJHXXR2a2puO213Im0mT3ppcDt8Rmx5TXZxTk0xaG1jNEAyLn0zMmZAcGU1KkFSTnZzaT9lQDtlSXBDN2FnM2ZoWjs8WmkiPzs2L3lqXX49Q2tTWUYqRGdiMVdTazp+e010QkIsb0I+QFNmNnssPzxLcyYjaUpHbDtVZFJvazZidjdIV3ZJQ1hQbGl2cjZxZXtEQXJAQFd7PXQsKjErTURYc01H'@;
put 'VlosbFNPInFadCpsQV5jdnsuYSU8WWImZUVdO2EySiN7ak9uZ0Q/QzdLTlRUZmhvMWc+QDI/NTYlO20qSWk0P3JHVTlLdys+YEU9fUsyOHsoMDJdNzZ6VCNSPiRBLnh0OSh1Im91aFFtdGArdkk8e3I5bHZYNyldUjRybFJRNy9qPlVJR3c0Sj1OLyovLykoQ2wvKmg0LmteMGdhIW02KnIxdmJm'@;
put 'W1Qyd3NbOEU0X3AmMUkjVnhjZ2ZUbW8odEs/KD1pRmAkWEouJjEuQlBBXlVjQjcsfC5KVWYkOFI6NGFmdyEieC57UipfIyNGKF9DLGBuZD1ybFRCYTF6QS90MVZqYXZMZW8hYFl5O3ZjQGlDaXtjbU07YlkrS0g/cnA9VmFRWlBfSC4hRUQ5dCp0PDVqJnxXTT05dngsTFskM0VLNiExNT9efFoo'@;
put 'WkxRd1RLVkpZaDkvcDg6OXUufWBab31vemF+NHVyQHhXI0U/NGpCOF1vTWJLXmc7MlZoaVJDQy59SWRfSjwjJWBnKGtmcEcmVzJ5amc7azxCR0BENGRvMUQ4RCk0XS5NJThdN3pdVU9IVU1MayhsUFV9SjZzKCFMV3w/aj1WRHIkfWloOGpYRE1ENjFoUSQ+bF9tZl1FQX5gTGN8VkAzMzhHIkFZ'@;
put 'aE1fbl5fKjZYVC8+QkAubWE3IyZWVS96ZjxgUXlJUXtpa0BqOURWRSNGfnQvSnFgZSZQQTNqQDYjW2ZffVVpMUZWbE4vQGIqQmU+b19LPzNDRktxRTpKWmF+WHQzYmJUInZYdyg9ZSE7WWoyUj8mVnZnTzc6LFJ5QkJYSClKJSFpa0NZbUo7MnAxazVqXkhUZ0N5e1Z6TDRlRUtVbm1IJEg5c3BR'@;
put 'SV0iUEdGSmohJCgvZ2VnPDNydH07RTAjRWBtQ2BORjN7ZnZESF04KlJZRmE7OWpOblNiQGpvQG5ebDpGMTlHMEZ9PjJGWytUZ2RRWHFdR1VPJnk0W1d5fH5zIXpRejc2QTkrcHxkVU92VUxJZHZAc0JBe0pfQDs7L2l+I3VtOTwiZXxCWVRFcV4oQ3hTajBtdUVoOllTdyY/KWBvSHU8ZCVxaHd0'@;
put 'Om0jKUpPPnguVEp+XSVEOHwkaVM8XnpbcVI8bHNKI25+aHxxel9kK3g3TSloKz1sS2RoNFZAfmliVnBfV2dzNEAjYnhAL2N3KD5hMGo9cEE2PlspZkh6anI2Rn1VSSxiVGNfI3g0ZjsqOWNDSih2d2JpYHJlaixBe1BTej1CNSpYdTUvamlaL1IzWVE1XUwoe2lgV0FuaTIqSndkbyMqKCJbLCwr'@;
put 'VXViUj15dDl1MFduaX5gPlVGdWN3K04oWVJ3Z1hDM2UldFV8QiR0Xk0vV25HcyZ8XSZkSHQ9WHo5R1p5Znl9RTJZMCxNeT8vZn1IViRVVXE0XS9WUUsyQkEmV3V4SS5rbUUwZXg5N2xJdERNeVFmLzF8Lih+PU1gYz9Rd1MzIS50K1s7WUo4KzhpPDwhN3s4M1svdzZzJXtSQmJWZV1dOGEpdU40'@;
put 'Xnk+OEJSeyZQZWQiXXEwdSEyKnF2cVNAfSlRS0plJUYpRSppYEA0SyZJNXU8fXZSQmRWbSlOVUV8YWxycU1BYT5ySS9DfCojPEN3bzM4P0RaPGhKXT46a2hFR0R3K1s0aD12X1NvYlNpdyN0PERYJjd1JGE0IThMcV9jYFgyIWg3N0I7WCNgOEY5eGM9RVk8MD5AM3pAakwjL0Zvak0jZFJ4QDtl'@;
put 'UnFDYmBZJS98YiYwQ2pzY3ZvPm51WW1JSz1GUVZzcjouZTUxQiw8XVhIaWF+JSJBfTx8NVZ5LlMlWX5eMigqQyl0LkA8LE81SmVnZ1ReSD5Qbz4lM2BwVFFFMCR+eWM1fkF0cWJpZmp2bmtKJiVjOU8qdTRwOEMsQ1FsQVQ9eiUmJTpebjpJVWBddTZLRU4oe2NXaWZaYiRrM19ZX044Z3xSaC4l'@;
put 'e3trdnYlNEp4ND07JnhLPUdDZyhEKFY1SDt6dCtOPnNDal8qP3k3Q2VaR25+RnUwVmIuWVdFcU4hI0p2OTBHcG8yalcxOzpnRTY7ZEZbdGkwT2pFQEA5YT44P2tiPVZJUnBHOVpUYFBlOj1scn1bTTgzUWAzfClpMVgmcDdfUTk4XSVuUjtvOTY/bVF8Y2JFJEBdVU4vLjIjdVhBZlFgXkNUK2d4'@;
put 'I2JbY2dVKzxuLDcyOUJJMG5tcDhRTzdILygzaEFRdHUmL19BaUtbaGRGXlBdXiE9QSpNN1s9cyJjL2U9PXxMVU5SVHx+KnsuIV9GSlBENSM5NGgqe1N6dVtvKDJtZEdIfnImdUxKMkFeIXMxSzNuVHRfQmFTUXw1N2gkYDUrQG84eDwhMSJEN1BCM2teIWwjWVkycC5uOiE+b2xHdHB5O0x3JVha'@;
put 'UzdaUkVuQz9AMih9T35nTSlzJG8/bTdgcEg5VkhTI1BYdGpDdXY6fGQqRVlCdmNDdCpOZDRdYUZiMlR4ISNwOmI5fjlgSTkrcWxSW149fExkPDMqVyNmX2B6cytmTFFPbzA1NCYiQTxHdihnOnIsbGtIdFRbK0RfMipfQWxrPHAja0hRU1I3TFdNJi8+S1tKdSRCVzdlMy5zYU9KOk5NMUcudTor'@;
put 'IkMpYGY7JF5AYFdwPHFkI0ZUZixpIyxody9wZnFUXT9RP2N7flZYTGhQLF1lTV13ZmJkPigjT0lfYHk9NTNMYHd8JnNAaTs4dSlgVzglK3BDWVNRcEImKSpobzRUWy9gPSg7W3soNm5QPjskaj5KLilCVnd9Pz5OJFpJOVFNMVVMa11PNEomUD0oZUxXLHB+Q3JkZ0ojUjhdXllEJmlMTTp9akkp'@;
put 'fSNxUE1MLno1Z2g2ZyFuRF4/KldiMmUyXkd6ODJgeTpSejk2NUY+U2NOY0o3a2tgamZ4UmYqVnBabmNPN1piSC5sbHwqdFluKV1oPDp5dCQpeVM4UTssRypRL19LbE9QSFM+TUVDQCE5YiJZLDltKHdeKDllMmQlfCFJPSM9aE0/VmkycjF9QHAkZnZ8IkZsPVR3aDowKShgKGltdnQvSWNRSWNU'@;
put 'PS5+c3U0JCxbdj95RUE+UUJqKjVoXV1CZ0hjVkRPRUBBZ3k+MHJ1OT0mVSFARCZYbiNiTUg9eW13MCgqMUdQclRuSktWKSJpIi80clFJTktqcWBtbCZ6V3ghKCtRUDtlckkrSzZOSVhFRClwLl4qeWldaXg9IWhxLkYmK0RWWkMpZVR7YHlpSTBXMzVtQ0JtLkxaRyJDW0xrXSgoeSt+UXZxUGVU'@;
put 'fHFEZDxRMjIxVWlaQ2ZCRSwqbkxOJVVbLmlCWCk/V3MuXmdOaVteTXJwcnZAW29tVlJ+O0g4Ol0meXpeMitSO18/Mk51QzNjSXxNRG5rLCpYOkl8T00vb0BwTk1XJTZ8VGMoTDd7eVdhXWtFej07O0gwbykwK20iSF5iQntdNjghYkR2QylzKk06c2xCJGEjUHdHTipYaGQxLi4rdShxTUhQfTk0'@;
put 'MUFrNm5vdzZHYXooWEg+RmBORk5+KS5PT3kwcjVPKU8lZGtiYWEuMmxHRlEiSG0ia0w+RW9RNVdZK3g9X0xidE1Yd1BgcVU0eV9fXTxPcEo4MzNHVntbS25pZTxSfHlgRXpJZ2l6V2M6T2UhMjEsOTlib3VTPUB0OSY4ayRwTTRALktoeC91UyhuIktTI3I/JkhnKmBCVkBJYnNzZ0ZgKFJWKjt4'@;
put 'ZX4zM0dxMzVHSFZidGpFKmxLWDNiUVlsZlNlUHdIMkFMJVEhZk5bMkg+W194JEExZCJscEQhWXtEITBNO2BMKztEM3ZXNjAkUHhsX28sPkYkfmR5cTpIdUxONTRfdGEkbFQ9cWNSMjdDdWdjOUNpfFB4NXhlN0ZUNkpBMll2O3xdTnNsd0ElIW1yVHYhSUVXWzVBMUQ+WmpzSGRmWVNYTHhWSSlZ'@;
put 'JFleNTR6I2U5dzZlWXUrKDx4KmRvfH1VWVtKUiFyIVBjI31sLjxBW2c0R01MaGVKNDlFajlRQFFnQVtaZClNUjAqOVZuZmZLPjRXYlpYdSQ9Vzw/TEs2V0JCMjBYPzJfMHpuNWNLPzBwTE9UUS5GRWUmaHdSI3ZIJTFWbCNzbkV6Ol9xYXcobXVnVSxzeCNzMWlreE14V0skN0FJUCZ3JSwwRC40'@;
put 'TUl3TUQmMkpFfjMyZDpefi4jPkg5aS95ekBCVkR6ZjJrXlA0Tnt5SipJZnxGXTEkdDkxSV4zQm9kOW4jfE1JW0J+ekYwUHdUPkEmUHFQaUdsUk49blooZWFVW2lrIXlKRVFWYU1LUzJ+QUo4JSwpd2lwYW12PTBvaCVlZzAhXy43QSI7QEJDRFV7M1l2SGZlUlpIeXhXLnN7WWwsOUxmaHUzRVNS'@;
put 'YDV7NWluUnRpLk9deEtpKHNxKE5lSDtJayFvUXxwYjNqV1I9NVdBO0l3KHFMI2o8Zlk2QmQvKn0mUjRbS3pOYWRMV2ZKJj0vPDJ8fHxxeFZwKUJpZWBFVzFlVkc3W3diWyV3bDNTTEhCe1g2Q2JCQD1Tb2ZqMyltWHdXPl0zVDxaME5gbGFALH0xfXdCKUJxXlh1JXN7P0tMSkx1c1ZKYCFnPH1e'@;
put 'bC5sQClPdzxHWytBNjMpSTg7eU03NThzeG00WjdFIkNOfF1TbV5FQylzNHI1OloxNUNQN19SUzZUZ2I7d2RYU0ZibU9RPVA3XUxIVjx9LF9kZ0Qpb35NO1B0cndUdHlYO3pWYWA5TFpzTCRIMzZ8PTAqUkBXI2Z7K0ZtIWhMa21FZW94S04zcUoqdFgoPHNPOk1SOElEdlUqPGJNZ18rbHRpPVY+'@;
put 'UVk6ZCxRRCF3RXZQL1lxTjdXeUJbTmtqa0Q8LHhQLENwaHBNX1pGXktaTUhjTzYlVW9EVDk3Y2Bed3JmKDwsK1pBTzZNOGooJS9QbGNtJSpfVWJlZSwlL0NuIXVjZSNqYSFSayVldUROLCQpXkpeaE4hR0ZPbWtwdkZ1amZVVzN9RV9ROnJmOUpMX1p6TjdYODFSfWZIKTw8RkYzbGl7YjRLb2Z3'@;
put 'O10oIkJkRXkwXzJvaVZEJlRSX3o+dC5vI3xTa3xPRSJlZWJAKD58TjVXQjNiUGc6U0g3dndePHM1SzxRfltnckY4QmReYWN2Pz8pblEuMXY5SHtNKThPYz03dG9jKk97MHklL3N2USRDWHd3akJSVDlEPzpkPkFEOyhpKyZbdDJHbGZ2IXQme143XTJMa0ZOQWYoeENNKFhlODpiUGp6fDt0ZSUo'@;
put 'THsoVWRGIWFeL0NASkZ8ZUpVb1opYjcjYjhnZVhUcSwmcUFDfCFVMHMsOCRwM1FNSSMmWCFMQWskdyFnanNsQ1ZrcytdVkJMSVE8ZzolTjZrKjFhOk4yblJSSEpdMm86Mz5OMUN+enJxLmxAJFh8OXdYSmU5dSRmVGBHaSQ0SHMpOVpiUWdzTVRaUiw2QWNATkxFRSNnZyYlSW8pNUNZaiI8c19B'@;
put 'Kl86ZnJEe2lLZEp1fCwvNj9bQWhDUFpaLzdDXkU5ZUxxc1JxS3toOyF3My5OUFs4KktEfj9SQT5NUE1wU0x3RGd+dkBsNEBbOThrSmdYdVF2JHtTSTgzTyU6floubF9MQVYqPGdVX0IoSW96T3IiMlF5OmpwKTprWEg3QXUzQjpfRT5EZTlSMVA7dDp4N1NkRk4yNjkmb3o6IlJSMDB9d1oxcTJv'@;
put 'eDBtUmRMW0wqOytHfDleQyw8WiUqNGEwZm1TfkZWZmBETTJxN0VaOl5RKEIlOSJfZSlONUhHUz1FcHl6XW01RzRAQ3NPZ214Slg2OSEwWiNOIiE3XW17PTxEUDdweU1Je2B4K2Y9PlprX1lkLl1iR0dYWnlmKnI3Pmtwciw3ZismfSVYPUs9Y2plcHBwIU1JUEdsO2NmSDZpKXRsOzVydlMyNEhX'@;
put 'MGswJXg0IVdaInYqd1ZqcHVjcklaPCxtY3o7K1g/YH1AOGMsVEhfZkx3IX52RDAiK2FBUXJKYlZzLlJ2dF5HWmBAczlJXV1wd3RVdSt6Z158ZHB3Tm9WMzgmRkxxeEZuTmxOPV8zT15LYyk4VUE8JkYiTE1gRD5+WTw+YnVIQ1R2WkhtIll5KWZTPSQyYkIySCU0ZnxlVX1VUCtQMz1eRilgWGdy'@;
put 'djwwVTg1fUsjcDQvZmJkKyhAVCQ9O3klaTFVSy83V0kmN0lhMWt2ZF8mYVhIYSpmZkRmeWk6IisiWiQlRFNUYG1VaFh6JH1hcF5ycjcjODdMQ0VtXVdHfHs5blkoWlU4MTBkYGo2ezZ6V3NWMVs3ay51IT5aVT5VYU8kTypsW0s3ZSFKeztwVndwR3tGMzRxMFt9UCpVIip0fV1MdTtzN2UkaHNO'@;
put 'RCw3VSEyYDkmNixtfXUxVyozO09iRmdxKGN0b0ZSeFIzJTRKYH5uQyYkPiVBN3o4Qil2aEJJaEpGK2E7ciZmV3R4TGZfeFohV1s1TE8waXopRSs7OSksaUVAOyZ4enYwMSFWM1VicTg4eEBKX3xhTChUKixhUDwlcCVNVTJGeXVpZ0NBMjgjWzomMVlOKFcsSENUKD1TWV8vfS9DeT52MWdTeVhj'@;
put 'M2YhP2pgPnNVUzxDQjJeSiRhVTlYZ2pPLkcmTnJvUkp2VXgzM3FHaWdxWlMjOSFqdmpXP1VvLmJvZX5fYFJpUlJjXzsweUFAelZOfi9CKjEybER8an5fUixRRWZXTkEuZUV4MiwwWSxYfXU0VX06fn5lIncwV24mOUVaKXw1fCllXlZzP09LZXFSMnUkeGFPV0pFdnJnd21hQilEWXlKcjVqJTd7'@;
put 'ezxfakJpeFNxZjtRI3UsX1daOn1LK2wsLllLd1EuQ35CSSJIPEA2eEZ9LmxjfCV4RGI3e3BXdkZSTlJaQnAoQDtlXiE3cS8kUkJ5PiZJSzQ7LllRV2A9UU9qekV4KGI3Z2BCWDRFOHQzRHkmLDA6UXJWZilISXFmLy8xPU5WNXRVY1V6SUpEUno0NmY+Zk1JUnMhWFBRQltMOWl4SWpkYFZiQ2c5'@;
put 'eVs9NVRyNi9gTEtsUDo5a3o3YEMiKEhCcX51Q3RHUU53P21wcjcjPm1GSjhhfHchQ09+SFBVSGIkMnBRVUBeRSwsQVlAZCNGT11DP291Mkw2R1FON15rQlZJMy9tXTRMcTE+ViY1Y217e3BbLG1scFduVkssJFIpc1t9eykrJW5IRy5Na1I+U0VpNnkqYWREZWRybHAmKUhedDNVajZSREg3U0N0'@;
put 'R0JEc3hpXylXbldqS31HUzFYYnNVa3JpWyZULl84TDxRSj1NRjl0ZTJ9KStJcW81RUt9U2w2W1VUOjA6cy9vVUpqN1dJWk8ye18hVl1nTilVbEM0bylydzMiQyhJYE8jSUdVUlMlNHxiNWUrMHg2enlbKktFIUQyUW91cmhRdzJfZH4lJSJjbVpHfnMmNlt5a3dsRk5RO1ByKFM0cTZ4bDdeMStj'@;
put 'aGRCNnpwNjNhTClYOS9mY3Q7XjJaOWoyNzVtVl9TYCs1S3lZU3V0THxIPzJRan06VExEbChlZyRmTDFxTXpLV3l3fU52LDxvQT1LOnJxbTQvUGdKRjdleHZ2ZyJfZj8kLlRoZHglOzNfJj1IcilrMTQ8UzRhJFgiZjxpajJIMD43Kj4rL0ZCeUQzKDtlWyh5bWdeT3VZXz1vaVpoK1Q4OF1KLjxL'@;
put 'MDZTX35OfH1tW0U3MUtZNkZIcyJSZC9JWHw0VDEud1F3RDchZXgkMj1GYC49Q2RSfHZDVWY6XkoqYFheUDF4eVdOe2lgI3VbYE5GOSk8Q2MlZntOZXliflh4WS48SjlITms8Q148OXsxbDZ5QyN3KHAjWTdyRFVdI3VaT2s2RDEhK3VSMDomTllKVyxEWHsraThNamkxYy5lRTFNJVtdSURwNV9t'@;
put 'WHFTezBAcS4yOnNIPkd4QUVXc0sxZD5eRHl1Tzd1bil2X309KERDPWlKUHhUKDJhbmE/W3VqRXN6ZCZ5M3V0dzU6KGpIUyR7KGdIflNQVmRoPChLWVo4bHFHeX5XYXM2NH1NT1UkbGheP1B3RzlucngpJE0uL3pzQyxtTz8kX0NlXmNRWkBjJGYpMl59cWd5SStJYU5KW1NZcnlKPDxFJElwIntV'@;
put 'dGx+dWRrfEcsYXF0dFMhcUhaOHdxWVFidX58QD0uRXYpaV57ZD8yczA8dExmbUo+JiY6QW5Sb0I0UjNpdSZjZmNLQGMkOWxXajpMTTRjMjxnfiMwQHlKJkkxOFArPHxCQGl9OGs4ZnhvLGRoY0JlTH1NUHBeK1Z7bGMlPnZ5RjJ5WXNyTGRmRnpsa003O1pgYCxLe3gkPn50RiQ0XzR3TXZzfi44'@;
put 'TzIpTmlHQCokPkpnKD9KK1JxTDwsJigiV3t5fHkqXzgqdyg9PlZEZnh9K2o4W191OCRZfG5ROyFuaVtCZkFjJDtrPld2XUV3YmMwfTU6W0VNSlk8PkcyTWNLaFdPQGNaISlpPDNnXXk4fSVzN35MNUhXKDhVYEtxeFtbYzJLQCVyQHpgTC5IIywyQ19dO0dPTjc+V2NgU0RhVTI6Iyo4Lyl3WTcr'@;
put 'TmlMZX11OmhyQzpFJTI4R1EyeEYhe15kaGF8cylUOkRYfn58THA/NkNmSXBeL312X1lXPEZeYmxdPk5gYUcueTAwIWQ+fF5+bG0yWSFKSzZbVGJKNUFwLi5sNSJmP3RCQjtofFtTQmNsI0c1bHo9PVZoa3ZdYTNPOUpBODd3WC46XVRyRldnQG96bDgzVG5sZ2QvNCp9YSs4fThDXyh4V3wqZlNR'@;
put 'T3tndkUqfFhlTiJnOk9FZjIxW0Z3XXw2digoJHJAcS9YL0cxcV9SSCIwVUEld041Tm1wdX1xWmB4YE1xJkIxa3l3TzREV2hKXzVnaDNqTEpfcVt6W05SSDZuanxCaE4ldTBXcF8le2tyaH4hVVRsajhDfE5dX21LY301enhnUUQpWCt1SENddlVPMnFLXUg+LE4/dSlhKVhWREs8N2k5NFYiSS4m'@;
put 'PTJbbTRCdmduLyVbZHB1TUt1S3pUKjZUWS5iQUl5RU5YfmA2Pyp1c2ZaTD9RY35sSXMhWTV4Q2h6R354VSh4Q2BBbWkjOiM5Tj42dWxSfm9UJmEwc1JncDFgdnhsVnJkQjlWZW58Lkh8cj5MdytqJkVfJD09LFIqcFZ6MX1lPHhKL0RoSVFiTkYqRCMxOnRHVmJRI1VkWDs+NyRAZlBqPjoiYSw/'@;
put 'V09SV2h8dXh8QSFGZUpYJWg3MWYyQEQyd2lYbWlVWnwoV0ksWCs0YkxtUylQLGBAdEIkNTpKPH5WPUg4UGZRXzdrW0UyNkIkRHhIUE9ecjJkYGF5QlUuLGpjZyVUO3QjRHMudmU7IXZaamVfNl5AeXE+YTc1LlFEPUM0e3RPWHN0WkZ2Lmd9RW0xbkRvL1lUYFdyYUVWcXpoNXA1VztgXiNYSDtx'@;
put 'cGQzS01lemNOXn5SfEFYP3EuXTcifGhRK2lFR0FHZi9YNzU0bG54TTRyRVcmcCkkd1ZjZD9HLEdlbX58MWVReSR7eE4uZlIuPkp8fVNEcXwjO1pUXUUzcVhQU14mKV5RcjRrYywrSEI5Y2NGRlZDMktrVlhFYyRKYy90Llh+VTZ+KDl7V3llRl1jXz58M0c5d0l4WEFeT0lIXV09U0YoZDk8VyQp'@;
put 'L2h1WyNpKTU2bilPMFZXUm41YFF1WS55Oz9kZkMxcyFBfF5AQzcyIzcoVDp6dXZKXlowJTV3WltTYEZAUlMyM3x2eSZsNCJvYWZHdVRBQ1BubG4lRHA9QSFVRSxqLjlmSEJlLz0vPHFue31Ac2lQW1N4W3YoV3Q1L3BJJDwuIlR4Vj9tZHEiMU5JW1hgcDl1ekd2SFVjOz9WPC96Yj4mL01MemY6'@;
put 'MCtrQVkpNCJvPlV3UWdRVmc5KztdeVhDRDl6OkhLQVZLenciOXNOXXpee1JFQUpkdmJ0Qj9ffm9iLHF5WCZVMDUzUG0kLnFOSUVaOEtCdDI2ZFp+QUlmWCk1Tjs0N1Z6WkxDTWVdUixuX0NmcVgxZlY9XWo5RExLJXsrYVJwLFAxazUjSFU8RD0oe1VjcWZJTzZWa1cyTlQ2Kz8rT0hYODRwfXo+'@;
put 'TjB8YDNeOC9VXX5pTXUiW25uIlI1MUs9amBXZEhvJVhHW11JIy5bSzsjLCNTXnJJfX51KzJmcVlvezdYK0U1WEcoV35jfVkjcn09UkhXVGlkTz50UjsiaUxJczpmcFRyKzNaVExDZjVqTTU9K11rZX1ROG5wXiRWaHtAOVh0KW9ZMmQ6TVM3MG02YjdHQjMlLj9LZXV2aVQpTF18PFN1dE1XKERN'@;
put 'OWwlfUkxIXxUfVFBZ2RNPmduMV1aM0AjLH1qPjJVZGUvX156OkBkYDdofUJnM2trWGpZNFM1K3o8fEt8KX5ZP2x1OGg2dVVhL2hhSGsjUlZudGlHTjtiP3I1X3FgbDdgb2hESTw7M2hKUSwoQldTdCNeRzlMeEd4MmlRWjQrUld3eldWbmAycnpWSW5VcDttWHs5cGpxaCV0NzEwSTp2Z0IwTnBP'@;
put 'MlV2Smp3c25LfjpqQzpuX1c5Mno6NF4qIX46OEhdZEgxLHd7dDFzeGtFNHNAQytWcTJoL0pCQUNLcEohU0N9UjU5PDhZcDgmTyRvQndkNHhCQGlXZFt9YmJ+MXdEekswRn1oQFF6SGUpTDF8OW4waFdxLHsoIWxsYCY8OCNmcDRlS1QoWmAxYHBeayRoYXdmbXY8dHIlM3U+JjVZK19FNlU9MHVe'@;
put 'SWNVYzhBJGJVOipUKkdsYUw9UGdNTHEpRzBdLih8WXZ+clNBW3xKLFciTnxrJlohRi5MV2M3ODxSWVE2eTNzIWZ9dVFdWDR4JFZWV2l+Rj5saWYiMTVVSX1hJmFzZXNwQj5oW218PURPdmAqQmNgTCUyd1l0MFRfZC9CLzAmQmJdTH1fI3xGKXF5Oz9uUi9BclZsfW9sNDd2LHJeaXB9R3FDMlp0'@;
put 'US5YZG86ZCRnR3NJbkpleFtiSFIyMlkwJXF4MERed3xsMz9oSnNyQ1FkKl0ybmB1N042NFMmVjhOMnh9ckFsPy4kdjhoX0hITGBIJD0ke1VATil+SFhrVjhTTGpwQ0pNK09vbSswYDhDYVBrWDlBNENpdWhiLnM2Ly4leShOfHheK1NtakZ2Oit2N0hmPWlkKndwdi91aHh3e2BUYGpfKDI1QUg8'@;
put 'bGwmQHtOIypaIyhkQFI2ZVhYVWZIIkdbZy9AQlNRWFhaciwkb1YyMXh3fDxKOzJLIWNrUmE8bnZyc2pvJXtTWU0+c1NRTDVbcChJdjQ8OmpifWx2eE4lN14veUVVeE80eFovJXx4NUZgayFGYTs0T2dAKGt0L1oqK1dHZzNOQlFSIW93an48OUgrRWVEWS9+amUuUE9DWlFVJEdjaENufXl+bDJv'@;
put 'QWhgcWVTLHw5VXxvMSZ4R3o8cmwhXzMycVhpfV1LMVkxcVVFSjF6NVMxQ3tGSl91ND16bHJpQlp9VHxtJjxsND9ZMCZlXVc2JD53Y3dmOnRIdkZbL0tucjtbPz4/IVZjMjZLeiYyIz1HRHRITDxGOlolIU9yWHJOZ3JJTixQQkozU2ZARCl3Yjs7U0wjTjJ9UFRGbXttezl0RDUmems3aC92TyFw'@;
put 'YGI9LyVLVF5KNjtqYz5XX0w8OUJ7U0Q5M2J8fGU+Pm1MLGJqVDFfWj4lSFRtI2ZBRShiL1FDaVt0NnA2Ml9hfSNFdV10T0pkdj9tRG12eDJ4LmxWNUkuOlI9VCNsKSgoYiJoOGN7K2poSUFSTzEmMTBvW1pUdj5pZjhdYTIqbGpPPGNoPUkkM3NoTTVUZW56Y1lrYmRrMFlkRHtkdiNIWzJhU0k6'@;
put 'ZnpVRG5fPE5OTlt2bV1hSEIuantEIXA2JU5nMUxqWWxiemxrRTNnIn5FMztwSGRjMzlfVkJSJHRISSR5ay9nXX40bFtXQWM6cUpZRzN8KTMkOldReXFHZGdjMUlIVFhkQ0cpKSpwbHxTbWhkZ3wkfS9heHNzPjBUY2tdMXBOUnU2SXVpYXxMd0pmV3VUSVQkTE8zJjoyXVg8TEtwLnJhNTpoNTpl'@;
put 'UUgmbn5KKFljQTZTQkNdJl9mdE8pd29VZ3pJJjFTTno/SCsvQD44IiwhPn07JSo9YW9uKlg2WXQ9My9LRktmLFEqXypTYkxhOFZqbE49I1U6d3RibH1DdG9hZUAhIz9kdTI9OE4yMUVSdWBrXz5tPi9RQzFgXzd9WlUuMVUqNXcwZCltdFl5bXtURyE0ZD9aUDdMfFM8I3xTMytjOTFJNUkwVmZ7'@;
put 'ejduWFI3KS56cy89KWxiLkNsTWcyS11rXWA9Nm4ve3lNN2oqVSVJV3c2MTB1KjE7NEA6WkdFWTExKSlNXkBEYFhPS15iWXtDbXtVYEpZSUcpWldEIng7KFhnV1EkcSkwcyFqMiR1IUpLcGZvPWs5LFJ1OyxCLFlpQWdXVGBKWnZxfWBda0J+flgiPkFhPFkvaVE8IyxpMT9YeigoPmlzUzEvIXE4'@;
put 'Py9JU2l2SmM+O3heJk5ePHFGUk8la3pgQFR0Y0F3YS4iVG5LT3VXU0w1JUZvYFpYKCgsPSJSInswZ0UqWjxUdn0vT005OEpDMGxrKjBjMHNnPkg6NGUuV0s0dWk0ZlJfUXh2Lm8qfFNbKyNURFpEbnFCOUk6USpoczl7IzVtVjN0W0J6TDxQWjEoa1YzcTU7amRUKm5LbSleWytSKyNhNnF0ekxU'@;
put 'XSVXMCJHfHReZHpZJmVXfF9hKmJ7KnxnSCNlbX1aTipTYCNqVnpWV0tCSiV4QDBjbSl9OS9yTy8qK3lHWmdbLFNpQCVOQGJsPih+KFUyJShdP2Uya3x5TS8jX3JvUD99UWdAMmVfQWJhSyV6eltHZi5HaFFRMitge0l+cV85OG18fDhdb3YoTnk2bDdSUTNkLyM4U1shalpCOlE4JFNiTElGeTlR'@;
put 'ZTB8djp2N2pabz9iUUBAIztLdCFCSyxhTSQwQjAsPSVKLiNiL3pIUCpJXW5DTi5vazdyT0ZObGN5U05YOSFaKVlUKVA7TE5FbWAoTypxcGR+ajsjWF8zPilGcyVPUG56b05QMi5EK00pSWBGVHE5KHJ+OyJEQ1VYSjw/O2MmdXNPV3xnW2B6MlUoa0VWWSxKYDJaXUxFNiNHfGZCKl1aNj4uemhk'@;
put 'VFhre0x6Z01WOl5Aa0VsQn4pJjx6fSNddWxpb1tUNWhQXS45SlE4UVMlbEdGWV9LX2wkNGY5TTYzWiJjfmBWUF84dkUpemFYdDZ5V3d7X3ZbUXBkJC9dNHcoT20veC90P102RXZNcTJDP31RNnQ9SU06RktyeSNTXiVqfW4pQnR3SSNLbGVzTndTQEFhRyQrcXUjI1Q/LjdyMzQkMmZXVFI5eVoj'@;
put 'Iy8vSkRAQks+YzFLP2FYVHYzXk9EW1pmJC5QSjtGXWddeSU6Mk8qZ1d9dXQwTFpYPVdvUnFGO1UjZV9oeG13L3xiQj4wVilpa25sIlAiWVtGc3kqZjpMJipmNXFVQUQzVVV5fEFibW9AK2x3IjIvXzBnWXZtKFcyW0V4dmhMbVZrSjJ9cyZ0ajE2PS5UfUwuPWhwcyspPjNFZ1FJLlFVNyMyOkhg'@;
put 'ZUJfazxWeEshbTBSIUFmTkd0UGI4YF5YYmMrMFlTaX0/XjlbN3J6JDlKWzFnIUU8O3d+dX50TFZPPz1QSlBTUHo7STJPezYzcTZjTlU1IXY6RiZvaT5eNjE8ZVtlRSZXZlMseWlRaXE3WzZvc09GXzFscHwlMl5aR0NsWmZ+Y2hnLnVZY0VPYlVQekJLNjp9ezolREFpRFJ7bnxzO0AzO1MqKytA'@;
put 'K30/N1pWJClNWm9vZnJpUXx1QEM9bmB4fWdIa1BbWG0/ODtPMU0/XzdRVC4lNUkyNEZsdEUxPFZlWjFzTGI/YU9TWTdKO1hdRnR7TDdVITAyLnNVZ2BIPS43V2I5e1laVGcyflQ0Q1F+XTQ3LyhkXjFvN3Q7QHtteU9hMX5HNDk1eSg0amk5bVZWfSJzQGlEdWYuJUY1KGtpRk5RWlU3SVhWVHVU'@;
put 'WEhqYFIwbXR4RFBtdF9DW2w4fm5FWntkfmdsWlcyQG8mZlZ3VTg0VDFRUz8sITNXMX0/Qi43cn1Gd1E+JHQvaERMQ0VXIXNaYjFBMTk9THI4MV9VcWNaRVZobj1ZVk9ycEBpJXt9ZWZRbmRjQlprLz9yP2o4NVMpNmg6fEp5fEpydU1TITZ2MVdrdlpUbl1tI097MWg8dHlLNnNRdk43M09AKGZr'@;
put 'SFkxbkhXa1Ixd2BUUG4yeWd3PiI2WShPXixnOzc8SC80Y2FUOS58aXlZVjsrRDhZNiI6LF00dis9ajI/YjVKTT4uZng4WSk7L0RUWUQuPW5obXNYe0tpP0V5bTNKanJ5eF9qPnAkQExzbXwoVkJKdFJWSXRjPyp7eEV2Y3VKW1k9c3VQam9rNkAyUyJwUUN+QF9LRE5PP3lXI3N7eDNPSm5vNiZz'@;
put 'MFBmWnBMQHhlUWhZJTdKel4ucllZK3QrZVMja3J4MDRRcVQmZTFsWT9QImpSRlQzRyVSXkFGeX4qWShASmlGN1NwcnFuOHZeYy9DcUorRH5Pcnl0aUFtO2tybkg5NTZhV0pGdXV8K31aL1RiWjZedUo0KTtsU1B9TEBdeXBxIk14NV4/aTBPcF49QXhGOS46PyhPK0sofikmUC5ERjk3QU9fN1N2'@;
put 'W0hxSixDTHxRMFl8Z2BdRGZLJEB2I2Uuayx3KDtTYHt8N0VWM05WQiwyU1YlIlR5TzdbZF9JQkoxL1F1SmJWPD95cnZNPzBWL1oxZFFAbjtufm0yNUo7NmBgaGZAXiZYdnRtbWc2TCZHbkpfbXwiTSlVeFM3fW1fXVFHY1tJOWBPI0JJKmFQaWBWcn50Wl9QdTdqLnpHUWtQcUVFbG9HemMweD1D'@;
put 'NXM2diFfL1N7WnlTOn55MEVSYXQlOVM6VjxNNV01NGplc1NQSkNzNHYlZyJqWUtPW015ISIvW3JmUE1HY01teGRIYlIxXUlncmNyJVZwT3E0XjFBcUJOX1F6YUtQKEVweFhuV11qYzY9N35tWzJjYTomP2B5bG46ci59L3xyR1srJD1LN0suL30hNXAifHdwY052UjFRaz4vdDMiMC9gdTNqPC5h'@;
put 'T1cpKD9Ab1BGSmFeKn5KJWUzeDp9OzRHSlhDY2AhQlRSIzF2XTNJP3srMWRzcD0kJFNNImBpbjpFNFleWlc2SmxfJjdkWGdFTU43dzd9Tn0pUDprQ2NrS0NYTjBgd3t6JX5vLGJoWXdCV2dCflR3MUtLZ31oUUkuJSFZIS5dZ2h4JC9hSSUhJnwvP100I3FUQCohWm0rWi50REksd0ZyX0pGZmsh'@;
put 'c3BqV2ZJQHVOM3A/PStkal80MXp2OWNzW01dRVApZGp2eXJ0WWNgO0klXiN9fDhoVF83UCFCZSpbXk0mS28mOVY1Qz5FZiRsSl9zRytKP2pWdkJbTn0kbWllelhJIUtZPThBXWt8QXprZ3E9dEIzUD1TXVFbdCxgRHdOVipBcTU9M0FeY110TH14JWFJJF9GM0pDXjc+T3BddzdnTk9NYnp1PW9l'@;
put 'bmI/e2BlaUFRSWNMZnpwJk52MF9hYzg5cXx0XU1OYE06K1lxemtmWGx7JnI0c1ZqPyk4XjIlJlJFYk4saD03NVhtU3JnJHo5SmNBVHF3W0x1fHFoTyYyVE1PeEhtUGA5a2swVmh1QGh8NTQxMTwkPmhTUDw8THI8OCxtTi9aViw+V0J1N1JaX0VuOmpaUWMhSTdOZzFRb1tqRVFZR08wU0lleylP'@;
put 'UUNtRXRUZSgsUHNxKWJGIyhGRyslYk4jTEpxMyVoTi9rMHtXLjE4aFF7KkZ9V3RTRDl6OD1oMCEwYnt7OEZ4cyIkSDh8bXN8NW5ZcTV6S0c1dnZuemlmbjY3QjRnP2RpPDolZ3RmJnhOS3A1IWNxZDpKfVdWSkN0TTZKZSZjUTpaLk5FakR8X1gsdTtDdTJNRCU8OEJLS0E0SV17IztKWFdDNFBF'@;
put 'YndlRjYkM11vW1VmTHgzT0ZIZmZmVTJQXnx2SEIxJD5kIj9LUl1MT1ZPUHIyI1lsZ31jOlZdd18/JTZuRTF1biV+OkxrOHNkfTZgUS9JbHwpZT9aSWRfWURIfn1mQUpkYzF8MnB0YWFoLio3Y2hpMWJ0KnlJNypSI0o+e3tiajdFOmVvO2lBcEhJbCp1fVZycFZLd1U/Zm9TTEUwPUhbSzZgSWJG'@;
put 'PyY8WWBJcn06UXJjZHMvNyN+fkkrSm1jZHZLayMoUEokZzEuPCQzUncqTCpKO1QxdXY8fWAxSFhOIW0iTDUpZTtWdzpDZ2o9Tys9a0d1VCUmW0EoLHRYPj08ZlklWW0rUGVzTlgxKG5vcVtQNEg9d3wsQl9GUVM7NTR2WWhTQWY3dnQ8Xns8KUdyfUBFUld5RWdtKy8pciVQcDt+ek1qRy4sPGt4'@;
put 'Kn1sO1RGNnE/My4jJlBSL1Y1JG42U3t4TnxEeVJNdnJ4JkVBMEc0aXQ7bH18JU1zTk95IVFsUSkhODJ5My9NdXY4fmFAIm1CNEVKenVwMENHMzBBKjJnd3pzWk10JT5oeVgzd0hhLk5WRT59Wj9QKXBEeDE3ZWJOWXhDNHw9OUpVY3pJbTxpWCtgcFM3d10/S3lrKUtzSS5UVD9DRUNJV0R1Snh7'@;
put 'dV9neHxVI3tbZXZfKz5TQnshZzFRUSs6KSorSV0yUy5LYncrVjs4OCpAL1hXNEhRbSx3Z1JeYm9VeilDVHolVnhzTCtlJXpraWRjPEZaIyVkcUU7cm1oXjAvZDY4Vmt7Y1pRcFBbe2FwPUxEXjxAVXFPcmkyKW5MJlJjRDVkVkdpNiE4RXZsYl0rTGs5SjY9XmkoaExldyNUX3U9V3JDW054RFlU'@;
put 'UGc9dVhIXiFNQyo0eFguTngiI3g1ITtzckYlLjVuQHY2bUs8dCNUIkNkTHdBI012R1JDej58dVk5cEFxeyE1WEpMSH1KI0cjWmVFc2dQI11uZyk+K2hLNGc8fWE5Zm1ZXkBMOUh4MXRqLkxpOUh+a3lbUmJKaWhjVHdvakk3NktJV0xyLlFCIkI5SCJHZV1+Qll8JS4pIW5WNiReai9nYmM5eyQv'@;
put 'YVdBWiNtMVFEUGd5P0svUXlZND8yfjI5L1o3ditSSSIkMnNISGRNenNHK3NFVH4yK2A1QHZGaUI5ZFc8RHAjL0RvT1dnemdXPzk6M3kmTn5GLF1CQEQsKzpKWCI/d0ZLZEt3fWcvdGd1JG5ubDc3bm52Qkt6JFNKMisjQ1daSzgpLFdpfk8rTCpIS0ZpeTZ7MDJHYnNreCpeNDx+SD4qSjxjZj1Z'@;
put 'ajRlUyx3VVo3ZUtxbVF5ITJ1V11hdXZfIXc6d1pRTFNgcHRveG40bTZ+USFYVmRDaT0oVG15YFNza19uTERQUzZPPWg2OzNtSG1wVEpSMHRDVmQ1ZHk7QVQ9Xi9hSSx9YSZ0alR6STJ4UFs1K0psX28oWUJULEo7PGc2PmUobksiW2pKSEpfd2kkdSpsel9Kb31iV3puWzNTLGg9Xmt+PyEpYzJ5'@;
put 'd0lHOEpATyQ4YjVhRHd8JWdzLFZQT2AzKzZJKHYoVnRJOUd2MGdyVGdkWlp1JHBJL3Zba19mYjtwSj9OWT5BSltnflRQISw5TSs0bDBnUGRQbkVoO3UzOzE7V356RVJhMH5QPjNqIjd7TjE/QD8uVSIuc1VpYyVVS0xwLkpaSiFXUF4sUiheeGRLLkRbe25GVlF5IWYiVEN3JTtkYS80TzZyY2cj'@;
put 'MH5Je3NdXUA2e0Z9MjBxej5UdGoiPjIvV19bQWs7PktZWmlgK2I1d0V5d2lMckBoejhkKD1vKiVWPzM/dTdRNzpnIUBkIXZGdnAjaVY8I3xaRTJARD5YRmxgUm4jaDU1W2wjMCFHIzYuQyV3MixGeXFzZl0mIzdadG56ei9PZDowWmJ7bHVOO1NzZEd0NG0mVGtPVXpKJV0uIVJAVVcmQio+JTRm'@;
put 'YTVOL01eQ283eXI5I0spNihPLjtRJl5JYjEvZUtnKEMvVmYuYXJ3NWBlYVsuNiRTdFFHcytYWENqSGJVQnREQnlHOlc5I1Y1VWojV1khamI4NXpDMU8jbTNLLnJaSktuSCF0ZUAyQyVORyRRXypHOnc6PCtVOHg8S2lLcURHLF95NEIsTnRJODFfUzhQbyxCdDwwRVFOZSImeSxwe1BfXWVWeSVb'@;
put 'YHIlcnkrOU0pQ3FZVVRERXh9K2NgUXRWY3pmPXFELEdfRC96RTA6SmZ4O15PRGNEMU9Ae0YkdyIqbFJII0RlUFMmV0A+ailNJm17TCJYKHZEfislfHdMR2IsNTxMWEw4fHN9STliSlJ1SjkoXlJOVF1AVXxPLytXKjw8JXpNSEBuL0opfFgzWil2NnY4PCpyM3FbT1RYOHhfTzhNZykvSlBJaTF8'@;
put 'ZzxEQEkiPVRjNFNVcz89b35iXSpiXVtzKHxuLGRfeU5yYzlCUTl0LyI0T0U8R2ZWczY2eX1HLEExKHxNZntaciFjUWt5aihae1RXP31IdHR6TH1BLjZgOS5WRzRYaTBjQlBhYXcwTjlgLmtHcTFoKjwrQCo4Y2l9ekprdzQrIU07X09KN0l9SmlFbWlOcCMhRjV7LyNXXyxvM3pEWDRffDN9XiEr'@;
put 'KXNOQlBbS0ppc1Yyfl9hI1ZHRD02dz9jK1ZpMkdkXUZsYGhaeHRXREx0MSN+JCxnN0Y9T19XfHAyPDkvbD9Ad0x7VjV+fWlsMFVTVX5DY0l+WTR8Wi5oUG08OXV6N0lkIkhQcSJkc3JCX0UveC9SOUIlRj8lLHxbU2QlRElVRER6O3w3YHo4WDlfflFdZDlxWEVxcUdgIlFTWEhvSSpORitiVVYy'@;
put 'bXxESyp5QGh5Q1ZTMkN0bHAkUllsIiI/NVdER2UscnwsZGgyL0gld0NpVTZnalVsO3xTY2BNM1BNaW8sWFtMZGY/JmUxfHcjRVg3T2FfLyYvUkZLTyheWCpGQWhmaHBHNnU8e2RzKVR5TV04NWVacEgxc3dhTWJYLlVYP3ZuPWN8RyZoPWN1UEddZ3F6V15iU1BiI1J4a2UiYy84aDx8XWpmOFFR'@;
put 'fT1KKzdvR0pHdGU9W0doa2pYYFtAVmEoOT91bkFjMWhuLnMoczMvYFAlKkVpIyxaRjVyTlp6WGpZayJFcXpKKHxyXVZvdzBeSSZTI3g+TXRFcVtAUVtGYmcoRUdaTW9gRUA8NitrZHFqVXArXlk8MXVlZGtxVUZ5UD8zeG5qSD13SDdCMEUzYDZ0aGY5bD5EPFpEPVRdITdYIjw8dTNDVSJmfnx7'@;
put 'dztvTV5RJFpzSk1YOHtha0peVXwsT0ZXbUB8bktIIncpVV5CIUpOKjc0U2B3ejFqUkdNZzNydT5xO0lNUF1xdTF8eEQ/WWdrLHF3KFRIW29xRjpgZExme1BfWDFAI25sfWN7PUcrcDY0U0U1NiFgMzUuLCpfS31wQlFReTI4KHl6YmUuRHdkLntOaW10TVchZTp7I1AxUTg9JGNNXU04OTVJT0t5'@;
put 'bDVgXkYkU2MzNz56QnpNVzNyVzRRJVJaKD0kUXl4bmtqOlN8IVglfTE7N0ptN2A5LzFiUTlmMkEiQUYwW0xgJGFTK19yZyt+TUhGbkZLNTV6U1lzOSFqX0YydHI2LmA2PEddSSE0KDF3akRvUWpTTiEjVnJuKX05eSt5bV9sQUV6N2Q5KFp6SnR+aE9gPThfUkBKdl8zR0l7NjBYYG9KJTEhcmh1'@;
put 'MnY+cTR3NV9bbiFDVShtRFlVW2BKO2x+cjE1ZGA/XWA1QURfIVFRWzNnSFE2bCE0Y05hOUBafFIvZnc+QmFvaFtse0lQKilAJkM+LDZYOlhuMlcvcGYifjsoRjtwMn5NVEJjbHFAKGFrZDYxIUlEW3R0Pi9mcHlsdyg4byldYG87e0RRZTNMayhENzJfXypzLl87T3VlLDQ+eG9VeVZIPStqQkks'@;
put 'JHc0czdzbSZBaSVAU2teMFs/MXRJIjQlVEJAdDF5SkE0X0h0X3NvQz9HeCk1Wjh9Nkk7QWtSWXM5IToheTg1RHZtQz9VUD83NWRab3xEP2leOUR8THZ6fFIsODZqJjQqaWUuPWR2W2c0QzBhc1puMG4rQiNFVjhdMG1IWEw2XkEkI2UpQEAxTF4reChhcWJoUmNTQVdbLHlrZmlBWmorVDhieHZT'@;
put 'VjRBI34xRkZIez44YlMwfT89X3Yzc2ouMTglPyQpdmtaTnB8azhlaSlJImVEL01SOUFOWn1OV1NIeGlyK3VMO1FAXzZmfXBqNXssPXReaWZoUzc2M1N8OSR1QyhkXTlzJSZjPXM9R3J4a35XWm4xcH5NKDUqdjdJdVYvUjxxNVRfPmVnTEE1MHw9XntHZDphJG8wN1BzR25vbzYzT1BFYjp5I287'@;
put 'SVtZWXU/Mjx8a11pUm9lSj1nXShYKVRoU0FQc202dWM8N0MySmJIeWV+NTBkSG0xdj1XVmRBNVI/cUs2NlsqMmtpS3tuZipdWCpQRHouXndyQ3QsfTBrZ0dsOng/eyw4NUZUNFNRUGZbOGEhXyRlKUZYaTFrNFM3R011L3IsSF54ZWViYjF9SHtuWDduZC9sMGRlV2d+W3R8fGBMWy9kXl18Qzss'@;
put 'ZmlkLFdDVHdHfEcsb2d8V2UzS3NeXjN1KDpNbCJELlRoQ31gfCwqWF1zWSRZPSZhJmBkeUxuLzZTZDxlI35rY0lkOVdtUGN1NSt7KlU8OnFmbDAyQ2A7fGhDQ0xCQXU3fm8kWTl3VCFUL35LSHtORS47bHxxb05WMXt4dmRQJD93IVJYcC8sPyw5SC4lbTgjbyo/N3N3ancuUUFgJGsmcWp4dUpR'@;
put 'ako1Lj5IMHhLOHR9PFImaDlYT35kWVkwPzN1QzRfKXRqUGM3SUt+Uk0zVDoqeU01djFiU3syKSN4WnQwPyNDR0I6eWR1P31eVyFsY3ZebileIXopIXAvWE92M2RYa1RRajgwQSwmWGA7eEU5ZzUvZlM8dndSY2ZwJUMze14zTmlfOHlLL0plfkosTkM1RXlURHIrUk1KdGdWKUUqRTB3VFZSKDJb'@;
put 'OnNxUXB0PTRuflkzIWpPTHIwNnVlRClYaTMpZVVIYFdRXV10c1ZpcGQ7IWN0ak8mVFE4OyRKbUpgRUEiXSI2P050MSxML1o6aHtDQGQxSyNdYmx5OjY8fnk4cTNrT057VG5zJlJ7dCpwW31pbkYsM14xeHxGaSJaNTwuW0FyY2RSNnl1fDQuT058PkQ0fS8uTnxDLFJDW0FuLj9nXUpAZiRCTTVZ'@;
put 'TEs5UmBvRkosNVVJX0kyQmcyKCh7SztWTGNwM0UjXys6ciIhVjg4NnxoNFEiPSZRa1Y5KDhAXlJPY3tXUU1JIkZnXW8xQTJmTGc9eDNOKD5jTn4reEVHdXBzelsuO0VqZz9Ec2t1ZXkxJnBlKzdiaDAsQ1MsbDs2dn0kb1VQay4zUTMld2B1O0JIOkdLRVNPS3NBXWg8aXN6OU5uPVZFREcoT1Es'@;
put 'RVNbJSVQRjYmNH01eVs9QkpKdzwuRVdXMHlsUDJzMi5DUCtjM2opbHRhdWNsfi9McTZFNHI2ZmtuOUpkM0IuN3VwSjVoNEVjSXc1OGY2c3c4ZHI/cE9iLF03ck4+PVJ2XVFUU3x2WkApYEpwWiM5MjU8SHwrYj9YIj9mdDk1SjUua1QwPE1jLG5zN1Q7P2AqJitUWGZ2YzAxV0h5VUhRTSsjWVBb'@;
put 'UzVATlRkPUJZJixMaXQuMHhZRTE6Slo9VSVuLExrU3p5b3ZycTBQeDNyQXRlLG5rV116JE9ZUngufX59Nl1jPzFbXTErYlRkVnZIeyRqWV5hQzpESEdAeTg7KkAyOzEkP1czP0NqM0FPNkIlbi9uPjFIKH5heCFDZD5DWlhUImM4LDEvdUJlMU13c3FlYyw5L3pTKDBnbTd1TjZYPjheMCokRENI'@;
put 'QS83dnZQb2RyN0xqR0J7JS9pVGBTKlFwbnJedjlQS3E4M0xYbURVN2t+NChDaV5ZPU0rcCl1L0xjckIwWk4/KGI4dVNPZWg+dFV8anB1UVheRDt5eDokPn51I0Y/aU1td2N0LE8iKTYwWTEyYDtATSJwZXlWfCRGbyx3JnFCbCNtMTYiW0J1WnJPKS5WRV1CZFsxODpFJHk1an1rLFtudWtQPyFy'@;
put 'PTt4eF5zX0hFbXdLazN9JSxPVHFPRm03KytNaFgpUHE9XzdYSDgoXjkxTCJnUTgxPnYzY0RAJDZLOEZJOmdtYD1JSCQ8enRHST9RbHopd1RrSlVuaDoreUBgYkouME9+PENbcEZJenlFWG57PTtNaWg7NlQ6OitgeDMjRmIpfjVYQkVsZUxdM1tDSWo1WmRxSTMmZU9xdXJ+OnR8Rl8wKkFDfDZb'@;
put 'fnElYW1ZRjkyWj5TYHE6dV1UQmdXWHYxPmpNT0FkdyF3RHdgfUleJnQ7KyxsOVM1R2h4SlNJVEpzKVlbZWVaeUlKaSEmS1hmem9kViVDVFhhKyZuYDc7LHc1MSZWVl08Mzk1OzVfSldpSUlVQmVFa2U0U2ciYDl+dng9QlpGZDNGNzo7fS94JkNdOW5nTFRPZkBybEdEYXpTfEpwInI+XlR9ZUdI'@;
put 'fWciKVc7ekVScnhjVXFQaHtjUF5KVmlIZiIrIj1SQmQkbEZ6Ulc1T3lfMSgxJE44S2BaVSY8czFEZTVScUB3dXwsYmZ8aWMwbSwoMTtMKCFYfFFfLltkaE9hM0lFOCxuKVA4IkFyJVB3PWQ6dGteSW17K3xiKnd3W0ZmYk1JZ1BjbW41ZlVbX3YocCgxdFtRPHs1R1pqKDYuT2NNTlRxeSRPL2pG'@;
put 'eW1UYz5fOkxTUUE/RyQoNTw0eDciI2E2QTxbMGlhfEdGPEdnWlIvcmNsYUtmZWE6RipNT2o1O0JOJGFSPjEsSzEqQ31LaUlgezBPUTkkekNvMlBkaUlUe18uVVVbaC9ddHhUNU9CJVpsdEIhU1dnVSNXTWA/M0E5cEt2ZmVCU0UpN1F5U1Rsa0lCdUVUeVg+LGNAKCJtOSgleXI2ZkB+cipaXjBu'@;
put 'P2F0THFoV2EmKklAPSopWEhTUHtwSV9YXSl2cjY0SFFKdlhLYmUyei99dUZhRCRRayVHKnd9TF9yMlc2ckNfLzdifUJqY2dFVDc1fWUjd1B7bXo1aX5MNmNRL3ZfJFc3PEkjRy9jVUpZIklrO0UqJWZGK31UclRhdGNSX20vRCxWKklYejBDWWdDY0NgJjZdWE1bWkRnPUJXfExJW0shbmVvUXlb'@;
put 'aUUyPjsoTntEJn1yUiM5KDB7ciQ1UXdqZGMxO0xiVUthLE9PYmM7ZEFYbnc0RXpUQzsjS2tPcm9WREBNRmA4P3lFYG9lYF8oZU9NTzwsZjM2S0dZTyYxcHwmdXskKi5ObmhuP0lzfkYjb350PEdffG89W2tpJC5iajRfbHQ4blBocWU5UTNbPT1IMntaeHNfKz4wWWFgNVA6ZyYsdyouKjNUX3Ru'@;
put 'RitpLkYmNkNpbVs3RT1HfH0paUAjeyspJEg7WTUpV21ncC9DRjJhZEJbYzRgUUBeTjxYZ1FVJmVMRCxaVkJDPnF2MXFeUGpgVFR2akwoeWpmdVt1Wz5LR2BwaiNHbVVWT3M3UiFFRWd8L1dbQ1k5KUZGKEohTyRaLm4rKGUlU11tSkhrZHJ2fit1NFVpcmgkaVdILz96TjJpRyliSFheZSlpUjlB'@;
put 'eH0zQkhYfWsmOS5wQSJ+Vk5+aWVNJUdURnB9QHBhWFhpNncqTm93X313WjRSUGolUkh9MiRKJTB9c31INT5jdTpUfXQxUVYrO2I5MDlIOVZHRkJUKyghXXA5ITVJM3d6JG82WFU3OTF6KnA2KXE7a11dW2NiaWdQeWtAMFdre347d3dKekJAWGA0Pj8iRmFbYitSKDZRYiMkMmBdd3wqZT9oZ1N+'@;
put 'KEtgb0hSSSEvfExQcHBrR2x0azl8NjQxLmlQfHUwIU9JJXE3b3Q0eW8ldDU5LDZTZllJMzYkWDh7ZCNGQ1A0REtCKytqSFVVPmtOJDs1VltKOzJ4RV9BX3k1TEg/KUshdSpxWWowN3ZEZyFxQlFmbTZnPUtVTUd8dWQ0U0U4O1g6PzIiQTEvP01SWkhde15gdjB8fHswPGgvRm0yYl9CMFU2S1tr'@;
put 'RS5XTl4jT203eD1gJWE1M1kld0ZMIXAwL2NgMWVCYTtEUSt4NjBmJGt2ZSw5TXw9Nig6K1EwLltRQ2trfWNATGJpcDohN0N4UXZVQjElQyxmfD1zezoqK0p2fXBie2UwWFhkS2lQIiY7OEszeTQ6PFJjJk0lOXBQYUJtWWBLenswXy5YYTZrLmEiMmNIMyw5VmFwPi8rMCppYGxlVDozZGhHclA9'@;
put 'd3pNcDx1RC5JS3BgQmg/dUNpaUt7K0tCQyI/ZGBbMk5+RzZHWkVpKV5iLkw1cFUiT1pLMnkmTU9ISmkoQDRHTH4mSjVEL08wWj5kMVldU0xJQDQ2aCo0cnpNQ2Y1fm43YWtfWHgzbDhtL2k8RyprTzxXW2xsMjdgISZebDpFP1ZjdSFlP2FqcTtNd00vLHZic20iZm5ZSCUkKGZAYmQjMmRoMEZ2'@;
put 'eEJicjNoPEJ7STh7NVpZbFEoViRCRCFnIyQ5KH14cFZSPWFTK2wySloqIk51eTc/RT9QS09xYEAqLnBOc0BPYyJVaUtiWXRCcSNNYl0hUU8/LE9oUW4ra3lRRHVzWEI2WjEuVDIjPnhhPyJ4ZGRdLDJ4KDpJbkhzIiRDT3h0ZV5FWXZkd2cqam40PUY9ZSM4NWI9RiJqTHY6bjJyVjpkREdETSNb'@;
put 'bF1SR18ofEQvO1JmRGlCU0dEfiRMMGFdZEYycTZsMkk7amRDJkMsaHpeYXFGYDlNNGlvQHRMJGhrQlssSHM1UXJuXmB6RUVfeCplWElQTz1+alorRyV5alRhYkVzPSZ1P3A7flc4K18kaWU7eUR0STU8QjhJZkVxY0s0UjQ2czhMMWBWdWB6Rk5xKUhISypsO15mNVNlUVlNSVd1JjxpUTN5b1tO'@;
put 'ciskc19JUHt4MC9HMz1qO0RlaXF3WntOJEpmVzhUa2E1fHpse0MwV0x9OUgqaClNIUR4K0tJPEtvQXImfUdsekFjRU5Qdzw/TkJPTDAsJEUlTE02dHhGcmguVVVWdmp6Vj9xbz42K2o2Sl1fRyt8XlJATyY4RU5fcHorT1J0YlQ5ViVmcH5LdVZfcF97enQ1OyVRK0RpI1o9TW9VN0Rxdmt4UHNr'@;
put 'eERnOFptZG9eI0wmMilOV2gvSFp9JE1jRl5NcENgWCY1RypsOkM2dWt9V0s4T1ZINTYuSShoaml0YF5ycykiW3BxQ3lTU0oxMm8zK0lfLm1CXVsqNHhDNG5CdmpEcFhiISlHcVdyX1o5emFdYEheQiVuIWwreDxkenEobl1KeXxldld2OyR1K3J4R2V2anorY3o4Z0Y4Q0BiPUl9NmM8bXhVfCN9'@;
put 'Un5JZiJiX05APjJ6R3RNYFQyakZoLyQoLHR1cC5RKHRKY0hONHtGJGlPcmQzKU46ZGZJO1l6UU0yPD5TS1FQM10sYCNHakA+a2x6KjNuQWJTKjBGQUZuIm9Ed1E1K3s2SiY3PC9xJH5vJldEIzVGdzdVRGwxeW5MVWw/YiNRUER3czpQMixsWTglWjE+MC5vXixDdzdQaWQ4Z2FyIjkpbHNjdy5a'@;
put 'TyFCYyR6eylUOXMsKyojTCZYLG0/JUNBMl51XyNbWXo2WXw3cF58UXMzSmpLamh7cCM3TVR9bShsL0hlaGJuUTpqdi5QOnkwK0luSFc6N0oiP1RsSkh0QT9KWjZGcWlQS0RQM19QSEE1QDxeMTR6elgvSU5FU35yMmpxZnZOZ1dwTFhySlJoNnZiSDNeZktpTFV9YzxuSHVuXmN1KipHUUpDd1Y9'@;
put 'ZFlVPmJMTmElZ3pbXlIsXzJGK0JfPHZuXTU/fnZQW2AwTy5Ob2FufCtFJSs1fW1rfH5mN2xlNUJ7akxdWSkmVk9gSzk1cTEsa3VQRix8QUVvdGNMYEROSGYwYHJNNF5kWEo6VEVHOHxEciwmNGNsWHdNIndCfVB+UWRuWEluKVVKL1NjSWxMdUNkcmciNmk9KG5rYWNjYiF6fTQld31feXR8K0JZ'@;
put 'Yy9IOXtdTTM9eD9lKFYkX25IeShMMkp9QUVIfFZtWDA9b31ba2cvQElGaURocHB0KDBbQXtnJUBVLGJUOyswU09yR2oocWVFYDJyR2BdPFd8ak1gSW1SUlEwXiQ+Kk1KbSNZI3B+NC4mWzhKJGFFL0xlKkZAXWNRajxOayhiO3A7K2t3eHFIU2IrTHFBK2RKPXxkPVBjJWNUdTlJLGNaK1A0RX16'@;
put 'WXJtQiQsT0AlPGo/QilleCh4W1h5PCNMQUFrTVB+MjpVeHxCXXpgQzFFPkchaCE1aDRRRDc5ViYqSXc9ISJgSnxKVDVHITtEYywrYGhhc0EpRl5TOzIiaz5RfnRMd0MlYWc/Jk5jTHZVUl1xfl1pU2lsWX1SK04rMlFGUTI4SXNbTmclcCo8IXNeUGQxTHtqc2o+MWNjajVSZFh6aixkJkdzRDYh'@;
put 'RkI0RTVPbTMxcVZpbmwjZy46KlchbkN9QjJXSl5ZblhmZUZwYnpmbGU0bkYiLFtmOXEiS09nNDBkOGd3Yn1IbjdmWSlnbURZM308UF9yTCk5dmpaWTUyKG9iP2JnNGFlKGQ6SmpGWi9ualkvcVFFPURZbHpAX1pUIj0rUjxueG5rZH5RXUQzTiZUe1VyTXoye24qIVIvKCViSDgjXyJLYmA7cz9d'@;
put 'fD8qXkpSWm9CTEoxJUo1NjEjP2glWiJAVEFfUDA5NjlCeXtDITByQmBeeWRRV2xteTRyXS95YSxLTyQrT0EwdGx8TEwhWX1JXS9FeEJ9R0tBcWVrLExxYH13X3NXfVM+IUslIXxmWTE3fHlnOH1Wcj1abSQ+bUlsUXc2JCtzUm5VMltmNnJhYSV+d0ZvdUBlOGwyZX5uXl52WFt0SiUsTSQ/a2t2'@;
put 'd3VjOGJAZzd1SCN0dl0wW0JgP2JjeCQlQ2Y+OWpuSjNXfldvN0RTdm9tVlhVS0skUkgkRVRIdSEhKCN4cjsqSFBuOVAjeDQxXWJPQ0Q5WStiZmRWfkw6YD5Vd0ltUnQsTmx9KE12WShnam4xKVQ/ZGAuYCh4PVdtfD8+YGF4Y11RPXNRYGNDcypEUjZ+TGBhR2MqTSRENW4wQEVRLzJNV25wcW5m'@;
put 'XyNKOjlNVytRYVdqY2J5Rj0jL2F2dU9ffi8yREEsR005JC96PXA7MClRQzl3KWlRKj9mfX54X2suck5yY3c8c3libXFvK3FYV1tKPDl5dDhrVmp6P2NHUDJiVnApek86cUBMRi4rMT42P0svOnsmZzRkOmdgUn1JdUB6a0xLNDtTV2d3LEhOV21RZWdOb2pvMWpmelJRUjpxPFp8QUZCRVs+L3J2'@;
put 'NjNzXmY9TEwsQk9BcTdTPUYkdGBAai5GKTBrIUI1TnhpKW1lKHsrJjgwPkFnVF4oSDNFKFFWKDRMVH1EekhzIkYsdEw1VjpIeyxPQFcrZmJkNCk7M0BBWmxIcTJLP2N+KlteZ0YyeUA+MTZBYmdiKTFCSSVseGdAaU1qN1YmN1lWdzpVRWNLYnd5b08xe19DO0xXT28ieyJqZHMwe0RHZF4uQkg+'@;
put 'RE1Va3hCLGshJVgyOG95a0cpSyl2K15Zd1V3bns+KmY+QnVMRWhuZ0RJSj92U3pHK2M0bjRyUUV+KDRvQk5hR2tLSGwrQlNQZTZbeTg+NjJEWnRNV1RnL3JUdyxuLlosdys2cDsvdnZ2Xzp9UGFNL04lMj1AJFJUb2hEQmlDYE5RKikrVyVzQHsmX1d9Pj1mYlR6cD17bkIqe0swbk1eeG1hVWVS'@;
put 'Y3pJKXJxPXs9MXFMWUpqeDd9ez9BYSNscmBKUWc7bTo3TXReW0decDs7dE5IUU5VRyp0c2lvUihZfXpkVFJnZFs1dStad05OYF1WKDNfXk89R2FMcCx5Tm5oOXtoRHxLaUlFSWAyZnVLRUwwKGZmcyVndnxqUj5PbThYRiVoRTxgLCRyNkVUciZSVUlEP3R3eVhwVzhuaUAsc0xRcCMvezY7JDN8'@;
put 'TGpPO3MyQ0xmJm8hP2hyOzhvSUdzVkJoZWU1V30+aFdAX2EwJlp7aHB8JGtTWFN9ZHdPfn1USi9Qd3VJRyJ7Z3UxWkR4Kz9+OU5za0tjfWxSSFhLSHZyYzkjSVU9fntiPjA/TXhJOzFBMUxjR2YxIU4ifFN9c000dHNjfFg+SExKOix0Kl40b2ttIiEvbGFUMyIxITA1KWxQUGBMb3g7eUhhflI8'@;
put 'PSNPQlhZYj4kPjRgWUtrKlR7V09DJWNSe0g/WklRayFWV19tbGlhWzYsKGMwO3ZVc0o9aXdAbChQImg6R1k8QXNuNUphQSZEZGt2X2IjflcxWXI0fHMvRTVuSXc6XyE1dzEpPWZdeDQySH1edDJaMzJbMmVXN3lqdWN6Y092LkJyVm5PKjlZayxZXWhrWzZDZSgrOjVYUFhSTl8+eH4rLCM1TVU/'@;
put 'MUclTF9xd3lwXis6YyQqQ3p2ZWIxbnZVTU9JMXMudlNvIWY9PF5jaVJ8QEpwN2RsSnRMdDFYQzYrNEc7LjZUKXxULjdSdThmeElCPDo4JVszI3I/eEI8JV5zY2tWU3hNJnVsO2RpQWV7KyhrJk1LISNVa0tJcHdFXXFNW3VUfTBBVjoySEpsZEk2Q0xbTU9gV3hwX1Qvbj5uODdOW3hee1s+ZUdX'@;
put 'MS5bN1U5TjU9az1CdXp0fV4yOjBxLFtkJGA2Kl9qLFQ4dlRKcTt0TCYkVk5hJklNaThWbzh9JEwqU1RwSEllRHwoXVoqU2dxIyYsO3EyZXRabz9rISJBditkWTZWIlRVbX5CZFlAMkRPPyFdSmNMYXt7ZE8lP3p9KXx6KkI4NldiUX1mQ2MpIVhtMjNlU0ByKUVSRFE7YiNJPzEzU21Jb00wd2JH'@;
put 'S20+SlVZUGhEfUMvIls4ZXF5ZF1Qb2BRVXR5VW99Zz0ifGMhX1pmR2lUQFhWXk1+XUY1OUErKSEoT2xoRDFnM08+b1creGpuQlBFJD06PD1nMT4+Wz1qWnpAW3NGSSF2UTU0RWo8STFCN1FKPG15ISJYbWNETkEpYF1YeyZ9VmVmbjxKU1EsOz1QLE1eVjsrWzVqK0ZfPVh2YUNHZHw7JDNDQ3VI'@;
put 'bFUqP2UodE9ZP3gyVCsyN1A/bWxoaTRTL2p2YkgrST0lYSxHcyI/RSxidmsjOWQmR1Q8RHA5c2pkUXsiW154YmVwc0BZdlQ4TWR1VVF2dmluRkklOVk/WHd5JCV6I2ArNWdRRG5gNC50Y09iYCJoOkdBLGddO1AmIXdmM0olOn4jbmgmaiVtelZBN2MsaVopZDt9N29ALHpKZEM6Rn5OejpTQ1B6'@;
put 'UTk0aTR+ZTQpZVssOklbN3J5OixQYWk/U0tqfE45TXNWYkBKPyhZZ1dBNDZgXWtgMytkQCZpWyNgTE99cDVbRkkhVy5uXkArO3phaXd7Yl1gUnVnW2wuQUFAWzFeazc6JUsxZy9HO3lQYkRdL1BGQFJDLDJzKjNjfk0kVFVaJkQvV0VkcmxwLyU+e1ZyJHdnQ2RCbGRvLDVeWHZ3YDYjbjUzT19T'@;
put 'Izg0JWRUOURnW15HPHtJa1tWT1s9VSYlZEJdNlE4cWUucjAvMURAbiojIzFKT3FZWXRiak9wRDRKbFtIXV45X1cxd1VCe1BoMWZOYSJZPz4saSttPnNmR09pUCsmOnFxdXluTFI5ISM0clVTVSxuZyVUOCE0TEkmWlA/LzFGL0JoSHEleCxXQGNpIUkmVDxxSGI/NDhbcEp6MD5qeUhIMXhSVmgs'@;
put 'SXgwWlJBIU0sME1CcXx3PXs1MjFQPTsxcShEaWhtZHsqT0FEdW1IP2x4aSQzO1Q1SUdyWysoYWkydnFZcWpJIWhuXSU9eV5iayxQVVplZCMxUzI8Uy5iV34/W3FMZlBsdUVHJE4iPTR0KFBjTkRIYCRSS1VOb0h5ejRSR0RWejZvYVdxWG48KWZ5bUgwPlgkI1AvVnZ2aEQsaiVkQCFdMihXcy8y'@;
put 'PntNO3t3WDFzbikiO3YvMTdsOTEobj1QaUJoSG9MUyV1dlFmdX5Te316JltnSD89ZEspblpeJipbKXJ8dmtrRCFVY0VsMnRJbyU3cSJAUj14YzFSZiljZWYydVV9bGQkKChlSUA3c1lMR1ddeGpXemwqM3xALC9bLGZXZ0MyY1tIUyJtcyt+RU4mZTxKeU1ZKFU5IjooJXc0S05MYTYzYHZFZG1u'@;
put 'N2w6JTVOVDkmZ1d4WEJAcHRUcz5tdzldOGk3UT5nSjhyX0xrZF14NzVIVFoseWhBLENMK3hkXnxwe3FKezIpRmJMSUdlJjApbHd5bnkpIm1CWkdLZ1k4a119UGZNbjBJQ0spaGZtNGUuNzZycSg2RmcyeSxUdCYyW1J2VjZGaHs3OXxHKjhLJWV3RDAscXt4dltMTT07YiZlQVslckA6QEc9cGRv'@;
put 'OSQkLEl7UzFJTitdS0RxVUJEU30yb19zPFVNSDMkQyFhSm9KL1ljOGJ8NXp7T3lsaWEsIilnbXYxeCtBVk5ZXX4yNyQiLkQ8MitJYjo3aVRzWExnOzIjWkQjUCV+Mm1iTlc/cnkxdkFMQyouX3R7aUw+Ukw3bDttMV0/JkA5X1JfaDMkPnB2e31qYXpwe0k4ZGckJS4qeCVuO2xdaFpmQShbPUJI'@;
put 'NVZfdCsjd1R+T3F7PExaN1tgK2xWOmF2VFJ1LyMlK2lTMDlMOjYvKkQ8VGtbZjU3MmpCVy5IJUwwZD8zLmRVdDpeY3x1R1hfaVNLb25TLFQpP1NMbWhvYChGNjBYWkpoPXBII006Yjt+dXBwXkkpcG89aXxtYVlpUUpELGBTPFQkeT5QZ1NDTyNdPHY1NGNWPHc7dUVweHVUZT0mW00lZVBLMmlv'@;
put 'MG49OmQmc2RNVEVIIWNOe0gjeTdeeUU8YzJuNXl8O0lDO3FuUlFRfitHTTAkYUZ6UVZbJGJwKGxvYVlqaF8yMiRxS2FZaHw5eUt5a3smd01CR3hkfk9idi9HUiFfZiFTY0hCazNvYW9gbHssVGhiUmBRYDxVLGM4SlFdVGlzNDlyaGhAPztPLCsmWUBgNiNTcVdLI1s5NGthYmo1fndqL3R4WV1o'@;
put 'KF9eNWJBaklzJk5TaCtERGE6bX5xWW1dTU5wW1hqRC9reWgjO0JMU3pGTipHTTYvei8jPD17WyQ4bH1ZOldUMTNNQDREaiRvbWNOWmQma1dQVTE+P2M0YyI+ZCRhMD85Sj44NShYU0l2QXUubXNUUlU4dUFKUzpBQGNqY3h9OS5pb21wfm4qKnhsIyFuWl9FOWNaQUI/WDU7TW1UUlAlTyRwJiRv'@;
put 'Xy9bTGxoPVdTRz1EN21wJXRUIVdZdzFdRWxxck0wZ1kmUzI5SV5FIXhWUC5NPShXbUVDLklqSX5EPmZefVsoSjJva1Vte1ojNGY1QD9DZzorMmBZNnEmPyU7e3Z5YHtHP0YlPkFTOl9GYVkjNWA5T2BROyppYmJoY2BqW3M4fEAmUSglUWt+bkB4fCwxOSUsNH1kW0xJWThzakNgRGdQbEpBZ1tZ'@;
put 'UTQrbW00Ynw8fVMkbWY8SUVXTkMoSUxgUnklNk0sfiwlLkIoKXJKXXoodTRJJWM8UCU/ZENfVCZ4dX02RChGUyxXcCRiZUJqSmVweCE0M25EYUwuPUp6U1QpQHxZKW5pPj4iM0t3VFppPHZ1Xk5nYShQRGJVNlkiPVZafG1ue204fVJWP3w5Xl9ETUcsNk4sbDRCQU5Hdj8rKUtIKjdjaVV7Y1Jw'@;
put 'MHFXe01NdyhQK147I1R8elY+MUh6fDRgTXlvIjZrK2BORSk8b2dEVn44OS8rTVIyV0Y+JTttWkkkODxRTW9RMnk5SCwiTE9QXituTCJUTGNlPWImWV8pVzxTUWQ/Lm91KHRuViFKMEpTcD98NmZMSzJuIjoxUEB9Km48Ynhoc3dhW3JyflVDay8+eHplXm44KF49aG5SeTt4c21EYGsvMj9uKUJC'@;
put 'dDpEWFE8WCt2bVhDOmFNcGJ2TV5OSER0eEJudGRyVl1SNUlrI1UselFNQn1BeTdGbnFgS0s5YTIxTjpSQUxqOEBmfj4le0VpPW9jOVNlaURTPGhhYjpLWjZEMiFuSV1ALmleI3lsR0tzNzdRPWciRSw6JlVAU2cvX0NOfixfOVlJViIoXUk2ZkRKcTokfFdYPC8kZmg6KFFLaURKMFdlKSM/Mlor'@;
put 'KWU7KG5UImU6JTQjZSVsKFohbUgoYlhSdD9+Kzd1OSk8O0hgU2I3ay97cUQ1emc3ZjBKWzxwVEZ4bUh7Q2l2enl7dm88YCxDOWtQIlB5OGpIUT58KztsPTgrSUo5Uy9HSCVEP0B9NWhddHRWTVk1cTw9Y0dpYGk3fmUyT3d2UUQ7W1YxdixPPUYyMmpRN2poQk41MnB4W31WM34uLGEldDpqOnwv'@;
put 'XXMqJClGTHQ7VmIvcHp6NjkwdVdXMDFrVyoob2luKGlCdlo4fWQ/Tjx7JllWV3tDTjV5IzZnfHErWEdFIW5yfnJlNXVUNEE9Tm8iOyh8e1RdTnBANl06cz9GQ2lgMGo+dSZxTEdSIUtoLGBPe09iSFRrdkRse0J0NCk+LEpaekA8cm44d2JDfjheTS5eQH5oKUg6aUZPa0RMT0lWa1ZdVE8kQyFl'@;
put 'LkkuVDx2KWVlV1ByJFYsVGlfdWJyK1ZCS1BPMkZ5TXs1X1hoTnssaCJOdEM4Q2wsP0s+OjtQISQwRzEuNHZyUDxPSCspfjRiSkVxLmI7WkNYb04iIkNOTiwydz8uMCtMNzdOQkdaaSl+VFE+W054XWpQfCEkYzhsPDxMUzIjXlhxSTd0PGpERGA1Q01KSF1XKXEyWkNJcGtVL3dbQSl8I24+Vz5N'@;
put 'OFRwMUVeQiQ3X3dSO1ZEQC9WRUlIQ3xSI0I+KktNUz9PeXhReFMoTTkxfGFAJChibFcqNXZ0KEI+R10lfkVBfWJlPk9Wc3cwdzpJOm9UdXoiV0R4SmBzaUUhP1dQK0R2Wj42RWI3KHxjQ3x3ZEZDW1tiWV9ITyxqT2tvdE9xdTFYWyJpZSVkRzsydT5reitxbEJvVlI+WW1fT1k4Q0xJKGUxM0Um'@;
put 'YDImP24vNTVpOitdUllnSWdlbGtNb2FnVHd+a1tzP0wyNm9+clhibzE/I3VhSyZvXkt5Lkh6VkNQdXB3VXxiZSE+T0hHL3BveCRlZGNBJVZoZitfOCokKztddldRIiF0ZExJampUVHFYWktiViUpSTxIdUJaaHl+fHVLX2tTZUVmUDEwSnZYc1deZElnfFhUflMmVCxKJH4qRnBKOTFQU0xdREwq'@;
put 'WzgsMGYlRWZlNmZ1enRRdyw0QkJBKjtyRGNaMVE1QCI+SCQ8JGdVeldUdExNOlQ2YiJzKWJfM0VTb3dkVDY8X3IyQFlyfCJwe1c4OG4qOVclZCxbYCYxez1KZjRuUlVkI3EicjdLbUxyKyomYEBTKjcqWHgqdSF0WGhtLjdGUnR8fkxEJldvcEAue0UwNigqXzBOKThYb1hWXyQ8dz1AS3E7Wml1'@;
put 'dyZsPnBTNj84KH43KkZJeSw8Vm1qPzIiV3h0dl8+Ikk+JlUuVV56WmsoUThFbzB2TnJkey5yJStPLFtBND40XyQ6MWddVldXeWlJXj1rY2YoP2JuNFI3TXwpdX5hRExrTDF3THhqRz1BWkhBQX5AJTVmPD5ab3xhd1Muazw5Qlc7XncvJG5jTzRNX08zaUp8X148K01xdUYhY3djMTQ5JCMuQHxt'@;
put 'SW51dmxTYCFOSjxoY2tRbmZAbmYpPSVaaVswVyk2PCNdSFRWMSxwW08wVG9KXmlPeXtYdzpJJCUxIX16QyZfWSRQfiV8Pk5PXjNBUWBxQTl1JVFVLGNoQ0gkUmVAO2k0LEB9ME5jWmJjcWtoXlAlKDBvWTk2U0ZLXTF7MFh6VFIlKXROW3ZNViljQUB1dXgmeFdRZmU1JE14b2FIPUhhcS9eNkIl'@;
put 'V2l3W3FjJnU1Xz8pUE1TRyl6TiUmITpgcGg+WDhUeXlffEU4NEZnYHZ4Snd1LmEkWz9ATnw7bl4xVG8rflRAS2R4aiE8QygzPSM6L08kOEJZO2IrUUk8WzhlNVdPRFcwdzdTeFVyNHpbJWtaMU56YHghZjFhNTNHVEtqLGlQTSRvLD87U2JfQj5Sb1JKQDA+XzpXdUc6a3l9TlEsSmMwPVNNWSZ3'@;
put 'Z1sxRy54ZU1FbEJQXVcxfGBbWz9VXj9CT1FCfHU1UHUzNm9PKkhiI2F4OmB9TU5lN1A3aENje01IaEZzcX53Sk00IntPYX5iLE9SITJaRX5xKUwrTX01dXxzRjt0XnB0RVVDPztYKThwOz9ISzcmeSxpTiRnN0IqVmFGN3d6OGRfV2BNXldBUSYybU1LV2FZVF4hKDIsLHR6Z1toOUREU1dUQzdX'@;
put 'dGhMVjZRN2kmKiZLK0VHKGcjYl1zYkxCXiZCWjRDPDlNUnxvPlgpT3QrMGhFXXQ6MUtvXShvVVkofGA4LDtxeywmczxDVFp2MSVlS1tWJDIyc10sMGNCakRfLEMqSClnen5TWHJEV0RBY3xLPVt7b2FxUjR6YWI/UF1xIktkZ3Y9P0l3OVRxKEVXSTo8QjJUPz4sVT5xNjd0RGUmW142R1tCY1Fh'@;
put 'USErUmtDZzBhSkpXKkNQfDh6byo2MGNae0x5cVBXOyR2bEtbfXlUeXdNeWIqdEI2blN8RTYvWVpMeHs5KyQrNDwzWVpNczxCPEk3XXk4KyhIYDlQT1t7Qy8xIihXbmtlXnJdYERvJkZ8WDZPVyZPOytgQ3YiPFZhOSY4SV0mUkxLcD5ZUC9YVy42VyZVYGcjVEpPTjZaUlRQMUpAT1ImTDd8bTQh'@;
put 'b2NbZGN0eFEjKEdZWFQyVVouUyxCUlNgUGZsYHhmcmgiZD1XQXBeNlE2WE8rKCt2O2xKOSZDQz9iTjYuV01wLkBEVkd8UyNxa3kzeipzTFdbZ2xNIX1tQ1FPXk1pUFs2SFF7RVhueGtrJFk9XWxFY1JeczlHaGg0Zmo0JU81PCxCV1FII1EwUHA9UVtvMENkKHxqUlZnKHY1KG04PGN1WCJRNEV1'@;
put 'JUpwM3NMaHE2UH0oQUFJdF1eejYzdVtLUE90XS8+ciREfU1ffFo6SE55KTF0ND9KRz50QDxEcz4sUmchPjBdQ3dxMl0jLFpqLHEpQSFpTT0qU1QycCNUbFspW1tHIVk+Q156KH5ERXhyYn4zOGohfTlJcW1sfVpaTGVlfXRZNTp+b1Mre3VfYzYuN1AqPW4oYGJ6O3wjRDFIQWFEP308dkRSWXM3'@;
put 'OmpaeiVFcz5+Z0deV2xKYTBlYCFaWm9SfD8lRXN7V2kvXVo+L0MmVTNIRmFpfjs6ZG1sciRSIkNwJG5sciR2d11jYyxFYEolSWFNTU5tUUBkVS9zK0NjZXM1XW01fGhkUiwodWlMJHI6PSMjRnhaMkpJd2RPP1tLflZwaTVERTYrX0lMQkh3cVdhTS9obnxSVVJsfldfRSlNNCsiRjE5RTZ0MU4p'@;
put 'S0VsKzwxeyQiSVQyYmpVZiJpUFYqTDM4S04heUVSMnBuWyNIa14iUDwpfElVWW58L2NmKGw9JVtQIV9sX1VYTUN+cXEyPGs3cXEoPmQpTDVRRVYheENnQnc4YjZoKStVaH0xaHQrL3A3bHpNe2RmMCVidGk4Y1lfM14mOmUvbkhvJG1QN1BpKHg6NGkqclBfcC5rQytYMH5icjIkI2pTR1o7bSo9'@;
put 'fCV7SDlyTV93N05NNFUlRyhwLGg3QjVlRFVHXlhJbnU/I3trYTVJJWhnRnFVMFhXK3kmL1JnYmlhbFZadWN5USR8YTchMEZHKlB2Zno/PVFoPGlpOV5nWH0qVThEaVdValsjJkUmd3Q1JHlydWdjWVRFSjF6eE1zTz9ERElQXnoxMGlEJFd3UTdAZE1WfHhodXhFazFkNVgqOHdTZF02ZXpWZlcl'@;
put 'NlBIdFtGXVtXVyU7N282SDgzb2hueE1ZVE5sMWkrR3lucyxXKF81b3woOmpDaT5HNWh2Qj1+USsofVQkLnA+eix8dCtRS1JLK0lYTGY8X19SfHI+WkRAeDV1XVA0RyxZQClFIjp8ZU9XYXZfPW1COUNGezFJW1AhWlhBciUwSmNNVHJ1YiVDMlhGQy5SY3NuTUxqYiY/dD5EalZETTZ2U11XeDh+'@;
put 'd2QyLFJtUkBTS35gU1RpMG5OPF1ddHl9QkNWQnpJRFRCU29VJiZacV1JVkhiVC84dmc1TDt5bm1xKH5KPWFVUUFue25YZ0dsRDZfR2JuZGc5eyxmayIoRWNwckEsWkpqUy44UT1TRkchd1lAN1JMWl5aQ0Q7NC5EPzBOUHM2JTQwXTJqS29PUCVkPTlGbCtgJF9TWGBQKX5jekE0a1ZtfjBZfUVw'@;
put 'fS59e0QlUV8rNnJpTV9uKVg8WjltOF8lZk9xXWVjRzxuUD4weWRSZmJ9MjhoWyhEcnpuWTB8WVZETTxaX2VTK31uOWo8c1VeIVpkeDl4Q0lke3dDSS8vLmAyb2AlOXc8O0llSyZ3NGghfTJeU2FwfFdiNyVfR0E/b2IhYUokQi46ZTN7TiF5JkBsTUBUYT9ENzhIaXlCc0t5a1dCZF9tcDVfYjl+'@;
put 'STsoTUAiblNNTFhgS2U1Rj8qbihNNEooXXp1L244JCNobHRhJW8lODd2TjkvTX5HS2d5RDxlUkBuQChyM25VQ0F4KyYlSG1zUCg2KzJoZTleMWpOQnVbInE2YlZqSXtIOiJ+WkJMNixQW2RfbEJOYWUqc2gqQUw0dGA8e28lMnRGc3RNcThpYjNKQjlOSUNLTXpDMTdAb2RQJUV3Pj0iZGlpfF8/'@;
put 'NHAvbDVjeHImTlV8OCojbSxec0YqcDxjLHRTKVh0IkxnantlS2FyeD9sP3ZPKTkuNUsiXWVbRGFPT1cwQXxdLGdtTnteUlQvb3dIT2V+Qi9xPUx8YX1dWVdFTUldZG10M0E/ZixGVz5FTGIpcSEmK2tSZ3o5fTNNOm03MV45WnAjVCJdKj1dMzVxZk94YkhAaks7UTNXfSx0ZTNQQHpTWk5YPEt5'@;
put 'd2NrdTJUUmxpRmNjL1klWEBeTCFlW2g1S1U4T0drT1FuJC52cnFdMCxLWTRzSipDVUhLYjxmR3NxV1hrYkEudU9EQldTO2pPeHEoR0BHJGdtKWx0Ql8kJH59fX1UVWRvan1vKSFZNEMxM3JZI2d+PGQxVXFGdzNoMXJuMiZodEFiXVZMPz9QfjgwZTg6KnVCUFo5LGQ6JHM/fCYyUFYsRXQvJihl'@;
put 'QT4ibSYhLmFTWSJdJDpxYn5xXlZkTWtXeVtRRX5HdDBSQXZDXzI7KUt7NTx2dzovUHpFSDAmc1F2Okw8dFZtK0EzOy9RWG9ieElEQ31bdUxFRnA0SUlSUC5SUWRJYXcufi4yZUBjPyFeZ3BJMVB8MStaTXslSTFYKy5JcCFGdFp0Ql1LSlF8KkRNQnBkJWc1PnhJWUp7ZiV0V21fcGNMcUg3aldS'@;
put 'dHt5KEY0LFY9JS53JHkmREtPYEVEJls4VnNab1ZAYTQse3Ijb0YvSX1Uemg+fDYoP2JjJnZgc2VTP20xfTMlKy9EJlpxQVsyeWczMjghcVUyL11NNDMsQGQuI3BVOHpuU2duIVFMdShLUW59QzYzbUM1U0FITTEoaTFxSjE8SSR5UTdoQ0k5Vj9tYWt1YmN9dSJlPWwiREhfWUdUP2tVOyhXSmRL'@;
put 'VlJoaSVqaHNzVUA5a0xLV0VCdjVqP1RCQVRTeVJXfmVNK3w8fiteYVciNFhyPD9RMk0uenE7c3plfG5gQWVrdVI1XXZ2VzlBa2U5WXx+PHJ8TTZKbiVbXWE8MEc7cXs1SVQjcEhiaylBaVEpSSw5ZGZ7R3xJXlcmSH15WiwsQyRIcCN7WjJfKC5+SygiNXUqXWoiTmt9WlpIejp6VEE2JjpAfH09'@;
put 'Y0VVdjU3T159Mz10UiEvbkxFUWkpWmFYPXZyPHs7ZklOZltiaDlHRz9DM055dCUvbUtDM0slPGV9e2dMRWB9QypyTyxCPjAlNzpXOHQ6WzpnZHlOcHtQPklPe0l7U1VVKzFLaisrRDA5WyExPSI4VSVQZmUsNlkoeEZPUzo+JV1YZW9VWUs3Jl57Sm0yMTZvR0FTXlI+UHJDbilxUTx1dVB3TiRH'@;
put 'SXlFRC5yeHEiW3dKe14jTG8uTkpYUCVIekh5UkNmMGR2PyFYL001ZzJHZVk0XjRdT3k9M3p0ZEZRSFIjLEpvbGR6e2ZTbkdfdFVaeT4vUEY2TG9keDMqc3tGQFsmRUQkN29YJUZwOUVtJjQ6ZC5TR3U5cTlJJE5KYEJbMj4lJFFxR3FfVUhTczlFdn1qYWJCeCJyVWVMbSFHNl1AbGB5UkZfRjgm'@;
put 'WmV0XWBXQEJ+azxsTj8rfDlpOEU8KXRMWSxvKypKbjNkSjJhLzElUzpzSXZ2dmpUSlRqcCx0cGdSOS8jSk1zJTchSXc5a0Emc3pEQjF+K305THt3bllFOis4TmkoUXE0IXswNT40MTRzLEAzdTszOkBXOT9AWFQ7O0oyLjM8OXxHUXFYW0E6Lzx1KVohb3ZCJnxnR3lUbF02TSJxQXtrMV9fNXFJ'@;
put 'Y05RNWd1eSYzQTtDTlo3Yl1ZTSNXdUt8ZSRIMHN3L1laI2x1bnNST29uP1RGR29OSE5FR0diVVIwezZ+TDNfaH5jfl5waSx1RT1ifUBaISk8XXxLY2tuITt2LmNLPjUrXlp3VlQ2QXNPY2VWZF89Wld2aTkpQERKPm0oMUIsOCpzMVllJTlnS3IlYkpdSk1rbVNQUVA8L180c1JjdlhfYGdAVkQ3'@;
put 'VnZhc0lOeXFtP0ldPGZMLDA/RCJKKG5WT34sPkRgTTZYdSV1cW1pZ3o/XkI4ITRMZUU8RkJgfWtge2pKODIhOUA4aVdRJUh2OV1NbipXa3BreSZIQXxvXUhtSSQ/ekhyW3d9VGV5MVtJYHBOWCZrJGpwVz95OW0rZl0pRX0rVn17OTFyNChfZEs9c2U5YzNecTZgK3VeO3J2b2IjUkVVMi96RFpM'@;
put 'V0hZPTshalcqW1ZiWHMvQyEjdGtTMX5MKCowbmgke3R3RDp4XzNtdE46dkRaRCJddygpQ1syIShncytRakV+PUlsOEQwc1ZYOjUpcmpEUD5rU1RYM3pkTSR9dSN9JEw+JFhmTGR8KmE6SW49Tk5vYXh3I2FSUTpkZU94KnNbXnNQMCF5RSttN1csZHA4bi82YjlOcHBzMiJSQkFoXj5GXVU6RTVo'@;
put 'TDhfQ113d08sXikzQldbOz0zQ3IlTVlwVFFYTk1rUSZSanwqNl5SZiRxNHd3cjFzVjUjZ2YyTH1SOm9wdzZUfWUuQ0E/W21jfV5kNiVwL2tzUCVUI2tJcSMqPlREZj5oalRfek95eixmSURGWihQOFN7fDl9N2BVTjhXbWAzcU4xJGx5cERHPCYlX0xLP1h+UGdwc2VteXVSUVpvUzlOflF8YkBu'@;
put 'RHJ1Q2peemYlUkhgL1NpLHMyY29FODklNyYwUDleW2dgYElxcyVaMWJqe2g/JkAxc3NpV2RnbmFzXyhjQzhaV0R6UTluKm5WSD1PU0EjaEZwKiFJcGxePGF8MS4lNWVzbShucmNDPkBjMTFJcSx4XjcxO0ZXbntTRG97NFReUEMsPF5mdDdjUCFCWFNyW341YyEjVn0laSY2IkBxbyw3OSVlfmBJ'@;
put 'Y1J3NUdTKFc6dWM4YX5hVD0uVSxmQiZpcGU2Yjp0Kjl4P3tiUk9ndWd1WUsrZzomZUJbXzQpcnVDRVE8ZjVodCxoYWhUYUVGQ0hRS2FTblEqZndURTBhISwjMVgkRkpHV3hbbnEzXV1dZngjSVtuMmldVk5hT2FZbChbQ05Ya0clTD80VD5MZHEjYV9AL19KbWIySUteJEw/SWlsdmNwb2E/P25z'@;
put 'NDZuc2lRRT8zaDhXbUd8LFNkUDJze2RrXSpWI195YjZVJSJEPFA3PC9zRkN5JWtnRU1SKmZrfit6THdCRjxdNyh0cjhpen4mNiJKVVNHY0lAMDY4R0Z7akpHPTtdL042YCYwRGR3ZTVvX2dnWTAweiJTJTRJUnF3QEBAd0M2Y21LZiZKb29UblB6SVplQDp3O29rZ2BIRjU4IUJLOmgob0RHWWFO'@;
put 'RGh1Kmc4Rz5yWE9DVTJdJUJKP1lCWXBjWURQLmYxK0NVbk9dbFtFTVN9OThbSFB3KHAvcHohOGZlanRbNCNTUnBwYj0wZElAREkhbT57VHxyOyxiXVtrdUYoLDFFWEIjcCI7djhten5lLHFdVzhzJHg2KzhDeF1AQC5vLEZja0FVNS9GS3lQXUlXejJ8XjNGVE9kOD1pcz1ZSG0jNyVdN3ghcVhE'@;
put 'X3ghcUNnJTl8VjNaaVdfdldWdSU9eSIkazI/UHcoRnQ0SzhUaE5pNkhBdk1ZUy9RO21wVD0mRjMjdV1ndWtZVWlQWjhQQURaO2pMTnIxIWYhTEszVG9RcWFOdl9SWW9ve3FJfXU3PToiVzFNKSFgKkFsYXxWfStne3Y7X2QmRDYqYzwyXiVsek8xdzErbkJ0WEdvUF5wX0wjKj0mXTBPNyI4PGRL'@;
put 'RzZ9Y3B8R0Q+bltkXVRVeVt7ZnpeamM+W3klMFBOM2wsN2VVS3M5QX5eWl0sKjZiRGl8bUtrSU44flpLZV1kPShUUjlHZDs+JjFJc2VCSzRtbVg9S0JVeHA5S3drUyE2IiJNNCwmemAhJHF8cnNVZzk3dFhHMVkjLz5leT1tJnQ4Z2VtM1hgMj1mVj8hcnhbOjFvbVUiTGolckNWTkcpJXMrSkY8'@;
put 'dmNnfGVZY2tUYz9eYklmVn5QZWpNbWZ1PVlMOCVPOVo7Qy5bYFNaUXMmXmhwI3ksY19zfHUxMXVGKUcsajxuOndifXhab18yTn1MODV0cXBYZ00lc2c7Kj9pVmw0M3c6eW5Ycnd4NFFGe11FfHtndXtFYSY7R3ZfLClfNmF+bDo3OkA/KTpdP1teaDIqUDQsJXt2LypQRzFtXlR6fi5ldXkpUStJ'@;
put 'bnwuX207KmI6SmIkUk9dNXouO24sYD9UMiNlI2ZkQCRaVXBnMz46NXFDYnU7LG1QTT06VjNjOk03OylOXXt1Ols0Z1lLPXJQIW9AT10jajs5O1pZVUJPZFg0UT43O3FoW1RwMWx+b1pVXU80REN5IWlQTmErYmRpOXdjRn5sJTpXLzVJJlVZb29SfkN0TikzQXc1eiE0Qm9vfERRR0YoOn1OI291'@;
put 'd3ZdX206aE0/fVpeO2A1byE7RURiZyFLNnp4JFs/fjpZLkBtVSN8MUpmR2U6P1ByUEZJNXFIJE0pOz5VaDliKTE7WTlgL1Q7RUx5fkliLlBfYSRSUWY/P0tTYkphdk8xVkNHRVEyTDcxdTt3dVZjcyVPJXgrM0tnODdLOkMwJXs6ZnxfRktnV1pRUnc1VVVVRig/cEghPWRbd1hkU05WL2FkdkdG'@;
put 'SFBtV2ZLVT4rXT9nL05pTnQ2L1l5QnhSRyIkIjJpcz5zL3RIL1FoaEpFeEEvPjo6W1pbOGdUMThgQUxXazxTNyovMX5QQSUiMllbUDNAOmRZcjc7VyFOVDg2TVA4K3dDZUYhMH5WY1s2ZU51cmQrTGhIfnltOjgzcG9pT1RjKDlCeVsqS0Q7S0hdRz07WmVZRH0yWmV3dip3aVd5emoxUkp8bWte'@;
put 'THtHZXB6M1h8fCJNcTlFfDpLaTs4SjNXPyl9eXRbVyVKbiJIO2kwOGYkK01bMXR6PnA6OWZ5MHY2PGlaUVp1Vms6aU5GKz9lfkk3SHwhZjVxez8kQzQvcHNWMGFdZ2R5amBPe2hWNypjOGpbKkBwSTtpRCxyeyQpTip7NVFAeCluZlUuQSZsUmpsbS5lTU0lc3coaWtAeSlbJWdoV1lALkEmNTEv'@;
put 'LFppJGFwZSkxbE4/Z08hY3E8TEReXmZHZTR2TTo8I0dCOUJGTjlGX0V5QDhDbHJlQkxFTVIhWXk4TGZ8THpLRTBkPCJCfEh0QGhQOj5sT3h6JnEiTiMuLH1TenF6UEw8TX1YLDQvKVc7VHs0cHc3S1ZsTHVMX01VeFh9SFdvbGBhRFAqXlchKUpVNmkmNHFoZVczX25Nayp+cHxzOUs8bV9VO2th'@;
put 'XT0qbVM7WilpeFF6Y0hBJl9GOlFCWDZtOWFBOjNnN1BoVjJhOFdbZl80MjZWJFAxVWFZS3FUdCFKOnFbUmpUcS9AfkB5Z2xgc282VzgxPW13ZU10Y25xeD5mIUxeO148PTNsYDpEe1QvUGl5V2YufDR8aXE+d285cXAmJUw/KG0sI2dWUXJ9ekJAOHF9eiZWfUNmbiRQYntfKjNpbj5rYk1hN2E5'@;
put 'eixSKCU+Z0JfNF1bNV92PCxjUnJxZWxAYUNqWXorUiZZXl1jJjE5RytmcCJfYm9JZCllTGBlOVUxJDgkS3pGRHUvWTo7YjtvckNDPEA3cmMsRzBUfT5WKkZgciUyKUl2WW49QXEzKUJqWC9uW2JAYUEsSCVuPDFMS2B9MjBRZlNYZ0YpLF9vYDxNY1EoXlsrMDpIdCVMRVVMV2lSJT5nJWY5QUp8'@;
put 'eiVaNGJYZHwmM2c9OHJjPT5gZDFVVSRWdWgjMDJCOTsiblUrRlsxeDh+Q2s3IigkRkV8SjpLYEZjbG9vJkQjOzlpMXtKT3p7NFIkQ1ZpQH1sPUJsUXldVWh6e3tSdWpgdnpqRz52S05pe3Q6dD1lPnI0Rz8+NHI0dD9vbHo/T2pmXkRKOTwkdCp2MSxvV3hOWFcuKV9Xan1UY3MvK1dzUiU9cFRb'@;
put 'Vy9Lc29ibCY9dkI1RXJyTWBTL2hFPl04OVlyTVR+OnImbDpFTHZCRkhmUnNlY29HZU9eLj88S35IPV1vOWwlXUJJRUJVNVVkaCJ6PjpETEk/WWU+KXUxIWF2KXVuYGRDSUF9UyRUSENYXjtIQ1E3M2h0dV1AXmJNWmZGdltnMHQ5KX13djwkc3dJXXl8JklpNEo/SjBSOHxQP3IidkclYzwlfFJ8'@;
put 'aGUuQCZGcFB0RW9ZPHBodHs/Y2Q0X1QpZ0Z7YDklPnVbfTBzQEQ1aCRLQ293KTNbKX5LL2RsVSNxd0hPekQjfU9QViFhbmAkQ15uISV9OUxCbHBDdV9BL28qT3c1PWxCZkNIPVNoQD9YY11zQi9TcEdSRVssaGc2Wj89LnlENCNrUTpAbF1uaHIvbSsqfXVKZlZbIVpyQHw9Zy5DYF1mXmVvaS9I'@;
put 'Q0o9QXpkSm07WVdrdWF+YSY+Z2IxVWhQUlcxfjNZJEk8TSRDQkxMYVtgLjYiRH5hNCw0VVZYOFZ7QF1HZVl0cXNVX044VmBRQ0JRcmhMUz9OWzo2MFBsXXJ4IyxDMl1EPE09MVt9OCtVPUlGZH4zJTJJZmZ0VHgzRT1MVi9eKXhQOzxfbm9HRj1yPmR0cyQxcG8sP1opOCRSPCNSKWpzJWhlPjEw'@;
put 'KDZ+aHU0ezRjP3BURDYoLGJRRiZaajEsQV48RFB+bWBvQGpZIjdofC8qbCVsIjovWEpDVDklTFNsVXU1MjtEYSsvJHBBUXdJQTk7b0piWmZ2SUNaPTlhYzUoXWVsbWNTVSxrfX54Yi92OltfcT46YzY0X3NCXiMhXnFxWGBXMFpxUHw3REhbOz9vaUJoTTovJlhaNGdpL0lpJlB2YDc5PGg4aC4m'@;
put 'RyE9VlUvPEM5Nms5KzhnXTFVK3N+XiszOXM8WzNWYmlaPHltPkQoMWY0e3FFVnciaTY4PGAvUz17OlVvRSNBJntANnMmVDNxJlRMXS55RHB1flFBTT1QRjBjZnVOMGQ9TnVCdUZkKX1FMUMvMlJsSVgyP1llMT9ZZVA5N1t6UlVbOFZSY3kiJW9FPjQ8SWFVKG4me3VSY2RbejdVclFAMU1RJGRo'@;
put 'XmJ5ZGY0YCI0JkU8OHNHLCo3WSxudlNnbEZlc3h3RWpEUHp2Pm51JmM2Y1NTKFdTJFAjW1NwcShMOWBDenVeOHFOUExaZDBBeDpOQFl0WVZHYy5UJWY2JndJbEAqWEEpLz88XWhiaDEsdmxWdVVrZyNpOyo2PzN2VHglOEtoZjQwPXArXnJ7Wl5FOzl3VkNlNlRpblp2YTRnVWxWRTA3b0shV3E4'@;
put 'LDhLTXNNfE9Fem5qUi9vPXxWSncjWDUuT1UhOXxOTlNnKCtvczx2OG84ZEpOO0BIUHEwSkpRYX1dJTdEOSZTezZeYm5gRUtYTmYpQGU7Wz5lOksseSRMP143KTZ3bVgrdUdiKGwvSEQjNiYmKklPWjJlKHBodC5+N2ErIWlFXjpkQjtsZnlTVmV0e2Erb29acE5EOiE5ZElqPExPM1lwa2ZOT2om'@;
put 'aytmZDIsNnVvQEFRTVt6dzA2MlU3fFpZQCgzZlZeMHB4bDRuOjN3dz1dc051Q156cXY3YHV4NTNPKXxjZW1GTyNdXU9lISNNQnJgKmI1YG12NDdmQmpeIm5gW1VROF5lKGt3VXRSTyFadzNpbTNLe1pZbEFbQExGdzh9aSohc3lFZTQ2clRSaXghMD4peyk7LyJGO0taSzs/Zng3YU07bzN9ezxG'@;
put 'ZUJxIXoya1phKXBHLGNuJlNLUH52aXxgVlEzWDhkMnlbajs0VEM4MlRRc2FoeyJzeTsza0A5LE02ZCN3KC5kZTR4W2JPTShKRmJ+SX5NOHVlNiZidEhNdEl8dF1CLzJrTyRuSGZnZkdCS0siaTpLKUlLZDRQMmteWkxDe2BLbUI8Izh2Zl1QajRNS3t3K2Q6RjdNfEhWP245bjxHIX4qUTh6d3Jx'@;
put 'TCMpKE5sPkZ8MjdlUTZ5NWAhMy9tc29nXUlmYGwzQCQvUkZQMGQ1ZmFFW3Vpb2FlL3M3QEdOK1pNOCljMkc8MnBDKkRXbkFLKlhqcVg4O2ZlPk1yYXBwM3FDMk9TXjA9JHYiOCtPYjxBckdSdUQ0Xl5OSVRJN0pddWYuKT1BUF14VHRrVjE2dFRgQlIvTjQqJEtHLGw3R2FMQm9bVG9sQStwY24+'@;
put 'QEBNPz5vQkk0NnQwc3FReG5xPDpkSjZCJktOX2I+TSVBY3lhKnEydCNkQ0hTQ3s/cnV9aHR3JiVPZ3J+YEhObUZaTHt9OTs/WG5mPEpVYVVeVXAzJjliS3Rra1V0KnZXfUNLVTIsdj10N2kwLjUsI3xUaWhzO259cDtmbVs7ZDl5K1txWH0ubyV6eGhGOmp5RmZpX1E6bkdRb3h0aEwxLzNRMEdS'@;
put 'NF8yP3A7VFU5NFBXOjh3cSRDLkRzfTtqXjlrSVZYWlI3WUI3cyQpRFBYUlBULCtEJjJSRUhOTi45MCMlV349PSRmJjFtOzAse0chZ3BUNEJmPSFCPF84JVFNZkViaXVQKEhjKWZIQX0jYmxEdCw/TT10VztXQiIucVM6S1srMVJTK2QqMEV4emBxXnd+aHU0eXQ0Mkp1KnxDJF9pLGldOjRtSHlK'@;
put 'dT1bXT1ONU5KR1hLMSxZYlNeYHlxS3hCNSU+dEldNHJjflFkRE5Tc0xwIzhTdmx9Ri9PTTNUNGg1Wi9ESkcyelh6UXBSSmhbaHpwUmZTamFyQl9maDxgM2dhY1RQNC5gW149fWhLUG9DVFooS3cyeEcpJmFDZUZ+NGJxQDR8fUYseUU2a0AuZFBwYHR+SEp7JWhYWllWZillTSR9QksxUkZkcENk'@;
put 'IlU6d195U3g5eXFWNkdoKSgzY3BiVGZMQF97LGVaWy9SQ19TZipAWVZSazVJRnJDWEI/SjZLXzQyYmNQVmU5Rl8lK1dMRSUwUDU8PGBoWkRVcjk8IiZEW0ouKkZZfEowfXJARzh+OyYrYEw7eHdQOjowPT5KQytQTE1vY1VAYyg3anl0LzlKT3p3cntQKFZlayRha3JFfCtFcGBrQDpqV2N1ayVS'@;
put 'L0BIM2oxJnchNiJOPWFOciwyYjxQNnxjT2x6R09PUVt2LDFhOy4/dWVjLDoySmV+LmsmJWd9Xl4zUUl9QkVdWU0vTmY0WVY6ITl2Wjt6YmZOMjtHUmU0KC5mPigqWmNAb2lXLkk+VChUfEdeWG1paUBKSFt1REY5YSE1JV1NZ009ImdbLnI/Y1tsRDdbMV4iSVkwMVNdJSoqMkpjVEFsKn19Sk0m'@;
put 'aX50Xz1EJkJDfk9PRmFrWDxeQ3IyeDhRPUR5RCxvekpRT3M2SU8sWHJ0Wz9wVH5HNEBhRDVzYEY+alE9UmZLSSxaZHM3XUtSPH1rKkgyPWcrLkVdNTU0cDxGPEMwZyk+K1FAO2h5Lyp+aTpSUmkyYmZWQE0iW0koenpCXWwhI35rOk49YkZ5QjxUXTpOPW5Cekdja3c0U1Q9NDFFTG17aUIybS9U'@;
put 'dlBbeTJWPE1rN1ImPDY2cE1CU0hVUUo7eF4+OXYxOCtTakx5UjQxfWBIbVM7U3gmLHBdMlV0QDk4RDFKQ0tCTFlme0RZaFhCNTQ0QFAkK008c0QifCpRdUw4R1ZEYm4sQ2ZrdXNyQCMue0w0SilPWzliZCYiZEpzWHJ8WG0kJX1LZmhWa3drQzw7bV1nc3hUQDBtSHA4VzhzOCEiLCt8NVQrd2F4'@;
put 'V25wS19nS3ZqbkkkJTpdP189JX5HQE0rUWN1PnU5R0xMSVFzWG0/cilTTHpbYEVNe3NPeWlzY0M6UjwlNzglMDB2QlVpeXl8U2Rhe01zLlE2akVyeHZ3IzhLRDx9cDIsP0M5b01MQClkbk5YLjQyO2BWX0BLUXVMdWZ3NV5LLFBUdUZJPCpZRE9tP31KNzdHeHZFIVA5MDFbV1VpY2h6WCg4TUNX'@;
put 'RTdteSFmK1ooVypYZTsmcWY+KnZ7YmREU3gyPUVyVXxuLnBEYntSQS9HMyU3LFhCWCtxNDhzIzRhMEZbb0EwJjkudVE4TTMzbXVYWyltO3p8fXQqfFFIbj5heXp5R2V4TkUwfEA4PEJ2cUBFRl5Qfk5ZQkFUInlKNFgjJkIlRSlyKW1BSil4XUdUVGY5RiJwQ2tfYW14cz5mTUkmTyhjeGdgJS82'@;
put 'RkRqc1tHQ2t3KUg8UlFzbGNZPE9LQV5acDxQRU5dVl4vUSNfR0ZGTjFlc2xSUTtXVGBiQipFbn1yPW1VdC9dIWRYOFdtPypUbUk1QiRZLEIxUXtVKz5JYU94elZrX3YoRHUjb21IQkFKeUpDS1BeZDhkOFREMihvYmR0WU0rYjpVYms7VjV8cEtgUS8laFQ1WTR0OzImUUorO0VESDc/K2ddZjRu'@;
put 'V1YrK1MsczJReTVENjUyLmREMUhxLHxrOipVKWkseXc6aFAufmVMTDI/d040MSVwaHlVanJ6YyVlWTB9KiFkWTB6QFopbGt3M3x5Qis+QndHZXRSYm1wPzcjTixnYz49MChGWWEkVTwhTVtgYmN5JlZaLFR1MHAvQFdeXTcqdXlAbFE6W0lkZXBhfCM0Ym5XVHdNIXw8PSImJlRtMFhAZ3kjJUB1'@;
put 'eDdlNjJ5KUBAMWBEXSw3aTFnKEg1NSN8UD5VdTIpVGx4UkkxMHBUV3xvVSgsNThmbW9geTFJfWRjMG9SQCt6TVIoPyZIfDFyKGBfYytvTkRVVnVDdzg0Q2pHd3xae1QuOj82KXdQRGhHTmwzXU82Rnp9US9VTzNwSHFdfVJ3bExVN20vOmFRNFAuNU1MeTNvbXZ2RHZLS3l8dzh6fGxBVV0wK3Zv'@;
put 'VX1dPHc2Pn1GQ0d6ZyY9bXNWUC4rIWRGZEZJVjhRcnFIa3tUeVVlUjNtNj5NOmBCYzdjMlF6TjBeelpbO0c7OklrO01pY21TI2I1ZDlnN2A9WiQ8d0g7WyUsRTMpblIqcTcpQ1NSNSVHWVdENE41WlsqdX56ZmtSSjh4cTR2cypjO3BSYVNvaXlCKV5vVD09eCQpYWovO2I3KW1hSV0qOj1nWTk3'@;
put 'Qj46YGQmJlNEMlYoW1JQZElOODwzZT14JkNdZmg1aWNham1rdEs6NiFKW1k2L3NIR14hd143K3R6d3FlIld1R05fX0U6SkZsXlt3PzkhdUJdInp3ZEJhKTo3V1dpSVlXakokL2plYGpgXWp8LiJ4WDZ1ZV5WaFE/YUxVKlEiZFVTanMjX0Q6JH1EUVB1eFldRl1nezV7T0hjPVVlKHFpO1IxZCRn'@;
put 'dGtLL0VnNHhoVjcwaH1DcyoiKyZ8bGA4KGJRI3MxeFNrRzA/Z1J9djFZWTNDXUk2dmFubGAwLnZYK3x8S1NhYGVpKGlPQTRkVDttdXc3XW0pL3o/dldubExMSyJiMU9DaiU4MS47IlglNmlzKzsiTzhfUj55SltVYCF9Y0dmOCJia3sxLkxLbHxkfDIyTk13IzREPjsuL2hdR11AW1trUnA5SyUx'@;
put 'QU03aUZIN1JiSm1SJDc+O21wWjUxNlAwQXpwTyldVERAQEBAQ0tHIWBUT3pzSEtUTkdlYmxUQEB9d2lzb2VuIksqNXhKVmdzRmN7UFIlMFk4LkQmRDJPeiNlPTE5LHp1QSxKZnJwOUskOzhnVE1+TzpreVpmImBlKlFyWnIwKmhIKnx0Mz0scjNBdk0weTVWUXJIOj5dcCRgI0ApTWNrZnBdUzpP'@;
put 'e0dSISVgeVhPRWFYUFlhYUdfMHttRjVLK0JnamNFTV11TntHW3p3Rzh8VnQoX01aaW9XRX5vdztUUl1pI3tnQ3dpanZ+XmFaOGR1YT1wXSQmWXgvWEhxYWk2VndAfmNzc0I5TndCKWN3QXVuVyo1ck1yYXcwTmlOUUI2bjFGNTNGdSNHez5UTF0odVdbU1J3MzJvenkpIyl6bDpraTZnKWlocEd7'@;
put 'SCpLXV9GWj5YT0dnRFZwNVpYdj5KPT0qXlBzYXAjelA+dz1adktkY2c2ek1OO1ZHdyZaIUN9eD9MeXxgcGVZOFs3WFgrfjNIQ05sU0RhTVo6ZmRvU21IPEJHXVRFSGp5eXxWNGFpSV1yYzkyIm82b0pyRX4hZippJHwzZSppQn4vZF5vXW9tSXNHdGEjWSFzJk5IcWp2cTNYNjA1WHFLakpyRm1N'@;
put 'NigpTT54fHYmPlA9KktdVCFlSm42OyklI1VIZi4vYE9ueC4zTiV9L1VmTzVoLls4PU9fIWV2Pmd9fGBKfUF5VTYwNSg6VkdZWjhSbmE+fXQqRTc9WUJMZjZhYl4hOigxTCZlTl9ALiwhbjd6TUVzNSFXTmt2amx0cSV6QjB+K25vODx+fUdXcHtqWSRaNHZMbncuRjVxM0ZZSVN2XjtXZXJWKTk9'@;
put 'OUl9UT10bWFIKkU8JUdeeXh8LkxHYDxWVnJNQFNaJVMrL1FiSzx0Q307b18+aGBoNHtMUlNiQ1RRKmlYSi9ZcjsjbF5LaHFZYzl0KmUkSFFQaWU+QSZhakkpZFREZzBIVSs6Uk5pTkZLankie3A8UV4qNT1vVnsqQE5BYyh+UG5BW1goeDV4eyspcThfOlYpTysxOHJ9U08hUCxhY3IwZmxjPHxV'@;
put 'VX0vOGxlUS93TzBsWCtRd1hROHk2VjErWy93UkhGJmxmMEZPIyp8Jn5OUF8xTk9La31UYyw+MEBMPkwrWno4L0kpM1dXd3ptJWY1R2psb3wmXUhsdV5+dT9mPklRK3c7dVgodFF2SFt1O2B+bjZMbVMiJV5ePUlCSFUrWlVdT3ZIa1lfemZWSih1UTwkekMwZzlgUk9DZUN2SHlUcE4hQ3ZAIVYl'@;
put 'VjtCLlgjY2Q0eWI8Zy9kJmxZMGk9SzdAcTlZZSghRH1KUHd7W244e1Mhc1E3a0UxPENYJEwhZUxSLlA2cGhIZiUmZHBsSSh6Nk56RW1sJi5RazJvPV5KJUhwZClAK0UvT11xOUEpITd2YDpkTStpWCFsOkRGJkE+UzVMU1RhfGNzezQkTWR7WkxXMkk/TzMmbzB5c0spWEREKX5xTSRZWGBFRnYi'@;
put 'Vl5sSX1dQ1h1I2tKZUFoTXs1VlN5XUI4VzNiJkM+XjFCRnRGX3h7fD9xNXlAKC9aPnlkS0Ixam9IdkhGc31ZUzN2WDlNcVswT2Nmbi9KXTQhKVs6UyJbNHxzcyFgOipCSGNJOX1SRlModUI4NjQuQU1kbk1SekZNLEwpNjZVfmpuJUdPdVhQTll7I1d5IkI2PnQscUBFTCowOkh7Jj86Xl5BfWlm'@;
put 'TTUxdSxPbmBHQCF7cUVUMyo3UFA9OyozI3gjPUV+WDBRXjsqXzdDVyVuPSo+bzx+VWdyJSNafF9STVBecnFiZkUpNjFkVXN4PFpnakNPR2J1OykjaE04WiN4NCVeN09ocD4jQkc8dCxbVnNTTTF4JHglX0l7XiZnW2FkOjddRiNhPEUjKDJRVW42LlUyYUAxImA1SDRQRThWaSh7U0Z7I1MjXkRC'@;
put 'ZTJmZT5oLDxhJk1LTlpSQFclKX0/fW5XPGNralFTYlYyQ0VLQktKdCM2Jl1DeThjUzJ4aSw2JjZaMCNVa2hTdy9VOVZfUGleVX5lYz02dWlFVlRgXj9VSlpua1p3RzVdVy5RO1ckaSplPW8xSF9sZXRROjlRfHc4JSpWIjg+IXcxSFRuRTpHMiRaLjx2a1I7dyhyTSM9VGhyVmZHZTdtQSlySjo9'@;
put 'b1E0Lzp4dlBoVDgsNj1DIUJePCNBT0c7MGg/d218NiZ6dkhpQntaIm56dzE7YCs+eClSUCNKczRYVUE3eFM2YmgjJjcrdmBLIzZ0XmcvVmNRbDxQd0AhaSxtaU8/Zj14M3ZZX044d21JYjxkTDdyVUtqSWY5SThsTyEvSWNhXVZ4dUBmOFdNZj4kWGJoeHhvdk5KQG8oLy9wc0dXW0w0XzwpbFAx'@;
put 'cGNxL0AiKmVGYCslYG1rUEMkeDVNPm1BOSxgemZIZDB7aUB7d0kzenpAMDwsJGJEUGYwdSE5fTE9SmREUGRSUV85SFpTODJZeWghVnRrdX1SJmopKzwpJXw7ZGJGb1g2aUU4SyNaeEtEZGJsVFZxWHI3PV56W0llTDFWOi9fM1pmYHk1RSJGcnFDMzZhIiwwR253Vz0/Qjl9fTE8bGJyL3dIRD5U'@;
put 'UUc4a192YFheMG9veE5oYHdvSjN7KyVXTjhUJUZmOGRAdVhhY1BmYWxldUcvcXYyYlRmM1Q+Z1Z2Ql9iOnJyaEVbZml9MTBoSF57W3M3Ikx9REM4TjE+JGxnRThKW0FpUzVDcE44V0s4YTQxZTYvXXdtNTNOYyl1NiVZV1JpS1JTPy5HIXFWQmJGUG4rfGMkVDZ8P25CTCRmRyNxJiJoYHdvcm1o'@;
put 'PDBtWF8/WVUyfSosd0cpMmh8bHFkUFoqO1ksdVJ0VDh6R2U7SStTaWxVaWxxWS9kPSh6US9xbVZpOEo8VDcjVG1RUmxUXWpsMWx1c2BMRlM/XT5PIUJMTU9ITnFmV1kwOHhRZXhrcChaVEVmKUx9RStsQXosMGdDfV43dUgvdGFAIzcyR3YoREBqWX5Gd2I/Nj18eDF+UH5YOnAoUDF4UUtnKXp3'@;
put 'MmgydHJgZWNLbURqYns1YkoyV3NsU3MyWkNYRWBObm9iKTRTIyRvYEZQKitFZmoraUR9ZSsjcXkvO0xvNi5dQExLRl1jNitkfXtUNn1zIUNQbSZqeXZ1aCl9PUBaaS8kVmA1Mjo/PWRjd3guUz09dEF8Lzt2e1FdQEB+a1BSQ2UhO34wdWlfcU1UWXlwRTsjTU8mK2BzbnohdmZvUFB2SEtSQCpb'@;
put 'YGozYEN7NFgiSVdjSl56InhrMEMzWCE5ZktWWnJvKStJYHYvJnpXSTM7TCoqSiROUFBufHlxKiJhUis+X3x2bXIvZzFeZlZpKVszVVVDd3x3KzFNWz57TklnW29pWjdAQDZ0fSMjUUBySFJjM1YxfmV0LiVsTzhXYV1HRFh8b1JaUCMzL0Y6OT05WT5eLk9eaz9pZk5eVXMjcEM7KFY/WjFufVYx'@;
put 'cmlPIXdfRixGZnF4OGpWSntTLDZBNFZVR2VaTUNlSzxqdC8iZX1NaU9eV3JoJStYfnEueWs/ISZYQiJ6RmBBMV1QUFU7YTdEK1siNHdYYCUoQntJbWNUcFpAPz5GWEVHJlkzKDxMYUw0OEhNI2ZraTAkPGdAbWVqN2gzYSFdKGRqIlJIOSZJKDAoa2k+SStjbGN3enhRLGpLeT9JRnR0QSVBQFhS'@;
put 'WmFFQWdzODVpcCtqT1ppYyFdS0Y8MF9sRXBHezloOyl+SXxYbklzVi9uZyoxKyw+RmlWYHYmKDdSUn5FcTMsQlVoZztoXUwocXZIKE4qeCt5d3FsUTE4VG8mJHx2cGZ+KTNXTHU1aFJ6Z155XXlnM2FAdWVld1glQnJqZnI8Z2o5Un16cCFSbS9DKENkRUosTnVDTyZ5b0pYN29+PHJmdltWc3gq'@;
put 'TVFjIXN8JnUpISEiRT55Rm9pPWwlLD5qMmw6S3thQ1IpfVZRQmRLLEhVOVpmQDkqPCo/Vzcmcmw6Q0I5O1NVc3hvenZ+bSQqR0M7dUNoS1I5SS8yNlVGVUdjLjI5ayVoQFpremAuQkFKXUVRZlZJUCJpOkMqfU5hLFRDIzgwPTZvXz9NSl9zUC5RJSkvaj9AUGpKTyhFKVM+JGglIyxJN0AmRD15'@;
put 'Q2kyYSRUOVJvWVsvelg7Uz9BS2xlXz9CbiNFI0wqcW4yXzdwNWNTO29BcTtxXzQlXUVlPXhYL1kvJnxUO2tqZjhpOCshb2RKPFZdLHdrVT1ZRkxZL3s/Ui57ZWQ6NXIpdXx4Kz5NSXAvPW96LH5PIT1HPTxiZkZsJU9pXSp5Vjt2U2JyR2k3R2BpY3FwQ09DMmhLdEMrS3FrcX10PUJTQUpvRnYw'@;
put 'ezNwfUdxN2p0eEYmdUkrQUpGcVR5YkUvSS9wZFVyT1dgNzttdyFDc2c9aCkzLzohRWUlPzVdS0YyODp+RDIhK2woPzFGPDhOK341VVQhby8qMl1DW0xKIUpeIyxUc1sraC93dj0rakMrPkc7bHQjKVlxWm5pZl5bS1AyQSUsYHplRiV2PS9HfkkrPnJFKCZBbTpJSVUhcDN9PFp3Omwwe2xmWjFp'@;
put 'diUwamJnc1goJjh+fSpSPGVjeU44L3wuXUhgNGAqPGp1SH1VKWchIzRLM0ZRZlFQZ044UWVBb15PSVA5OW0qcG5HLj5qTUpmQDpxbVEucEwheW9mNWFkWXIufnJ6WmVWVWwwYkpkKzxiRFp4XmJpZmk5V0MxcW49KTZodkZMTm9oWUR1ODV7ZixqPVtCYitEaHBAL2x1K3xyVHN6TyklbXNNcHM2'@;
put 'MUNTOVQ6JXFbQ0JQRnEvRlplRHVBTV13TjhYJSlrKkxGbEBpWjk9SDZMZ0FvSmBpYF49SSZCV1I4VT87QE9wQD4sVCg5SFlyeFNGS3FUY3BATE1DfEp5b1hyPzEwISRxPWJZdjUyXT8pb20sKzYreEAlYlRES0k6Xm1AZXsxb1M4em9ZUmE+OEUrUTtRISt6NV1FY2NrU1s1VnRdbV02SDJJZStq'@;
put 'NkUrdGRUSWU1YF5KMHEyLmRlaGV8UjhMO308aHBVNWNAeGRMTj44a0Z0Okd4UUJQKHBoXTEwLkhbYDQsOm5VMk1xfSVAc1AwZjVnbmt+YSRiQDFOLGZwZWE6L20sRjZlOyFmYUgwX0ImSHZgISojR14kelJ6a2VgU3VUOixhUlVbPjkhciFvN0BVaUNYZ3V2XWNLeF4pWGU+KkxBeGBJSWppSU1K'@;
put 'Qy95RWNqflIqNmthXj9CMmxFLmZIRSo/PylUUmxlZzElUiV2YT1ZcDVWRExbNjcufV5sYU44MCJ5Q3Ywdl1MUDNhL1JiX0RDJi5vaV9bWUtsY0xpbG9HTFRKM3pmOWF0UThWIU8wNT9IeFJzSUgjdHxaITN6MlchJXVSS1VhST5OUnNVc2RHIXtAbCVyQF5hNk5oNjQoVSUhK3ZHR2BfTnx9Vmxq'@;
put 'cyJNP019XUVLd2ckQUlZLlsoQnwyaGZmKEt1bUVGKiRWYWd3aTlQWCF2Tl9HZjhzRnxbNl45ZD1pXzwjQ157d0BAYDI0NlZsNSVXaEAyNE48LktuM0FEaXdIOTdreSMjQ2JXbEY0e05fSERWIyNDVFclQ01UbGFSITJOTilzPT8xPVhbLiZZZDF9XSZmLyxQfU16ZGZhcF1XNyFYL1VIel1JJHR6'@;
put 'OUlwdGNXT0B+XXt+bGBTPjI0Rk1WNCsjUjF3Wls2ODVWJHU6KzNKaXRZRDgucl5ERUB8TFldMHZgcSV5InF8QEtfYyYhPW1ReD4pOFFzQ15PZCk7I3EwKV5OYS9HXVdnc3NOKH51Ol92SGpEWXU/d0dgNjgka35yXXVbUWY0bypPIkk2TnlwRzU6VWJoZV12VVUhLloxImo/NFBrMHViaXhFVSpC'@;
put 'QkN4RkhDb1hyIm1ue2spKko+KTd9YWtuMXcqLnt7VnxBVil2NzJXKzAjJG9QdkgkSUlVUEhmTy9qbXgmcUB4UEhQOmg+UE1Id0dxR1E7XkVEU1pbb3AvMzxNaUxlMjYxLy91PDBHQlBIUyFYdmNhc1Q6QCMvenVsfWZZM2diSXFgej19I1QlXmJ6STldYnBSTWNpLDc7KTUkeHZFJk95SXFJVWQm'@;
put 'M1NtOmN4OWRCTU92K1kyd2ZsKnc1KSN6dXZZeUJZRFZ8ZFc8fEN7YGpbTi9fPGUwej1VOD9rZmRWbUlqfCx1M2FWI2NfVltqVyQ7UCEjMyRHaihsRVY0cWdkZXNPSGVnR15JKytHXT9vOFdtQCYrYX14fHVDamE1QX1sUVI3UG9meldbOThoVCNnV15pcCx0X3QrdzUpMVtePWJLRSFgR2wyNyZZ'@;
put 'aCkyWjwlY1NNcTQ+bnVaNnZ8RXczemhyczdvLj9+NkNIOzJDN3g6ayU6MlF4QHNOUCtGL1RAc0ooenlAc1I7UF8oRGBOY1pnPTRQMmJmTnRkPHhGb1lITEhFcTdmeCh3akk1MSRlUjdVPzRYJF0laTdKc0lYdHV2XjkvZFV7Ni81QjArZ21sW1IlY0c4VEMpMil5XiwwTD88e3w6fm8wMltzY1pk'@;
put 'aCRIQE92SzZ3fC8pfl97fDdWQ1BuSHplWCFDY2R4bi9se0U4cWc/d1tdZD9AUzxDP1tmTyhGcXJHYGBFNmVTamlNQXdAQlcxcm5yUHVNbWlBPHhuN2c5Rl5hWVdhKkZKQzMsdXQpWXYua2d9U1F6fXBUMWV9YVQ8I11rPGZNdWBjOUkjIldlbVBnIVd0e1lzRFZPcyF8WWtZcjVxSEBXaUxNREh0'@;
put 'aX1WM25yfXs2eDooPVEzSnBkdX5ebWUzXkRUaHcrSjV6VTliI1FNYFsyQnU0eDxMMWVHTFAoR3Jja15tdTBLK0FvTCo6Zy5lI15tbSZTbTxDSm4leX0vJWl7YlomWXkxN3ZMZ1lHTzleaVUyNXFme1BxdksieVF3V3Q4Q0RaKkNELnkrNHx6fnEiYE5eYVZAejYzJjRCe0cqSWJ9UyskYFckYkk7'@;
put 'eCgmeUF9fTJ8XXdyU187V3pmPjA4REsqQnRsWTFhZGhHN2dZXnJiVWBtZ2U5V3Q9Z3l6SkQqRC8+Lj8ydUgscHZgPDZZQl97NGtiak1HNSxye0UhSC9SSy8uWF5SUUV9UltnLGNuJlNeRUBIW087TyxPT2RjNkxvMU5lRHA7JTRCSHJFVFg6YDEsYlF5QlRJVmZOUDM1LFgsdVssaDQmTzo2XTpw'@;
put 'LyZ6XTpiZHc8Nyk8K293V0gpckI0R1dMaXldfmpGXSshNlRIOHo5NCx0M2tpRzU3XllHTlN1bjl2a1JyYF4uODwsJm1MWktaQmteTl9Jc1RdXjMrLikmbVlZWEpiUUxhV00zWHNqKFtJZ14sUnxbRVgsdmBMWk5tRXdCb19ANTVNLGZkeldLLFgyLHd3JmdQeG4jXWNaTF1oa3RoaiI7ZkMkJkVk'@;
put 'Tjs3U1BfbVcxWzVTOixbWnxARFBAWiJwNj1wdFdfIldKfWZPV2BwMj5bbWVpPGk1c2A5MlA4SmlUOEppTlkpNWBIbURIM35xPWA7KjUxMEoiQjJHdWRSTmhNMWxZPi5hSFZEWStbOklGeEpSQjVtdUElflBuZlZocTIuNEFAUmFVR1ReJSFiNSNyOVdfWE5tVi8vMDRRaXh0VjFgcDRseTVzIzt5'@;
put 'KmIsIkI2PkJQMywiQjVoZjFDIjU3LzklYE43SHxLQVJXPl02LkczeHdsPG5LK3VJITtCNmVkTHdnTCozYyxOM0gqSjxLYUAmNHd7WzF2RCppdVQ9Rmk0Q1JBI1pgMmIqUFokT2p7S3FgVmRoOWp0UXdoYClZKF03dUtpSWFhKDA0byp6SERJPH0qeE9jOHY+aVdva1hOIUVmQ0pDWntMYnwsRS9j'@;
put 'RXRCZGdCQCludHJpfnxDbVllJltwJF9Db2l9aEJ8MTdVRnpsc0h4RF0/XUl4fnQ3Inx7bUVEbHl7WWY4JEpsUFlsTi9SPmdNWnw5TXMmN14qMTF4KFtyYi51ciVxdVk+RjBVbVNrWGg6MTVWeng5UD1tVmNAYWpYdHUoTnd6ZUZDfmBhIUtTb3lFNVh3azBnOjllUUpiRGZzcCMsJkVVS1VVdXJU'@;
put 'XWlLQGd3Zls2WXFJTn0ub1gyaWNDdFt4LEAuIV1CXXBGJXVXVXx5diFpIVFPPzk8S09XRVBfJE9YJU1ILmE8cDxCK29vQnMxYnE5N09sekldQilPMVFmbyEyekR9Pmk2ODArU1dEJip5ImRQayhMZl9XbVgyNFo9XXpmLzc5aCJ0biU+VyRvek0+STR7dF55R3c8SEg0ezQ0PHR+fHx2XmIlP0I1'@;
put 'L0lrKV9weUY+VC4sRkBfRT07Ild3PUJMZXRqNn49Z1lZZjFdUEZ7eWdqX3E/WFZHUl8yJlA3Pj1tdFRMfVRXdDtXYF5FWGJecWAjaSlrL35FQGY8RkBac1UuQGU/Xi45fGp3ODpNWkpSPSJVRWFdWGQvcTE8UzF4ZGZQY2RrIWB4amVwcDpdTF1EazwiPSYpWEJPVTZbUXFZL2llMXVscjBPdmou'@;
put 'UE01X0pnW3ZCbUZiZ0dAX2NtJXBmUS9SNXNgfCgidyZxXk9FJiFpeEVpIU1oLGk8eHBjXXlmcmRoL0s5PChkTU1pOXRDUmYpS3oqM1AyUXhhOzl6ZXE5IlthKV9ZeGxuQ2hJT3BtTzVrcjs4InE4eCQ5dDB3diFrRz1AND1PT1pDXUI9b2F7L3tsZCFvcltxMkM6elU+VE03SC4ubWQ0SkY+ajlH'@;
put 'cms+K2E1eURlMUJ7YUIrWiY6ISs5XmhfSUdrXkNhazp8Z2RMWStHbF5iekRCfj0sX0BPZnQ0QSk/QExGbUsofGI7dWA7Z3tEd3dHUT9mPlkldmNEc1ovTCQxIUp+NjNtZUJFPClKITdMP3N6fXpFUG0rPCR3eCUuUltLKXcsTEkxbVUjI3FbJW9RY0xFUE9xRTFHXn5ta2BOW3BAREppVmZNRHdo'@;
put 'WGdURTw+JFJbPUhdLmdQT3suUTZqa3RhWW5lQXEoIjhtYjAxay9LPTg6OTksPHYsWCwqM2xQSFZ2UWtyI1o2QlI/YCJya21NbiRGKVdzVlgxdjF5VHwsY110Szc3ayZicCYiP3c4eS5zPWMkSU4hemNROVc+UjMkSSg4XmBxeHBKVz8yKXheekdUejM6KEAoR0ZGKyN6TjRnX3J0KFNVN3VNZDx4'@;
put 'Ij8mUU1OPmopYkEmUmU3WFlVLjZ0ZjArLGNJK0x3WTdLY3tqTEtbTzw9cXhUOHJjYWZJYGo4PCJ8SX5bdHw/ITFDSHJ0O0pXKkJES2lxQWh+KSIhaENvVTh0OilYYUBwLnRoLmlgdjtGO1FycyQxeyZnejh9bWJHRmZobSlNOmcjd21nckp4KDl1JktDOyMwXWt9QE1SXlViO0k7cGZRNWNmfEM+'@;
put 'IXxCaWg4RjNbSThqImAhQUNwYGk5OCpYZTcyNCNTd0tzN1FldE5EQy9RaF54eXNaekQ5KV9mezhrcnNtR2ZsaC4qKkdzYGMlfkV2fHdlPWEpeDRMfmU/aixuJV5iIS48cjpvJG1LNGdAaDhaRyVMWCt7eSxFWiQqUHlKQjk7Uz5ZKUtgNjVYVigodCJLYGk1OElMejl6OSFXNWZ5XWB2O3F6dzIz'@;
put 'S2ZYS3dSUEl+amk7PC9PSSxScXF7aWYsfXhdTml8ZX55TUxMc1s4S25wXmZ3RyQ4US9hV2Z2Kig2ZXs5JXFjezZEfnRkfXE2T3c1KSRRV3c7PntYKldxeCIyajF3cGF3IlUwOnVqWTomYjUpYFhOe3Ukd2R8ZzhXUX1xd3xNSEsxQjQsRGowMyoqWG9yZDJ6d2BbVyo2QUwvSUQwc3xsbHcsflY+'@;
put 'UmVxIzV4a0I7JXw9ZEkqbHNTLjdeUUVgeSNhbUplZT04YyxqZTw4bCwuNGUpeTorP2l5RSEralBnZytmbWFteDFNazg8QiwrSXFWbmBCOj0hI1s4Ji9TYkRNN2pNazxMV2ojVkNmUDhPe3shaGZYJSs6JEVFdDpDfjNoUDlFbGg2aGtwbDVmYjFAdVNvS3FRKFl4JGdBeU9fYDExWTIkdntlalNl'@;
put 'SUNWTmNbUGtBLGJrKE00fDdWRzMpRjMrO3oya09oX1YsfCUoTGk1WissIUIjRE1MTGEpW3hoP2hdMGNnbC9ie1UqZ3tadj9uL1hyIVYoaHJlPlUoMjo5RWRjLFgobktgQVs1NkwsRHgwRGZoZTFdc2pgR1Jna2VbflgqRGpXJF1UaGRDU15AVDJNYVJAYEtmVGVaZUo4SiJaWCQ9cDkvPlthVUQ/'@;
put 'd3ZwcTkwMng0Y1EiSWs3RUx4ZDhFeiFlQSx+N1NMejVjKkJlc0VbdWYjLm9LOXUmbG0rdUw9XSs0PTJKZVo7NCwqeUYmKV54dlZman1AQ25sWWhZZU1xamlLM3loblFJQ0YyJX1OUk1nY3BJWCNpcXNPNkVjRXN1WzNwNz1pcGdXYyFMW20yWixeeFEvVzk4Jk4xPHchXSFnTixCM2NgYSR+MDA8'@;
put 'Mi4/eDxtRFp0YU94I09eeUVGcjI+eXhrNmgsbSk2M1gvfGpKIU55X1AvZVVCWFBiPzFKYjEuXU90fUhwN3xPQ1EvRWpUIVp0NCEuWlEkIVl4KlZnKlIsTXVkdUxuMmI6e100fDopVmozOmw+bFkxLFJ1bzJ5cT0sYFYmWEZzb0NoN3YhRzFBTzQlMUAkdSlERHE9eUJGQ1pWbmlzdjZaWGpAUjw5'@;
put 'ZlkkWkVMWTdhXU5obWM+MFAhY2M+Mkprcm9ONHpEVCphXVlXXT1sbWdfO1NROkU0JXNANiZ6Zz9VSn5HOClLZWhzblAuWXZ9I31ZZG92U29daCEwVS46biVkMjIzVWkwYHNAbFJdMVVPZjFhbHdEbm9AZSg3c2ZnU04kLjtwKlpUQnI3Njo3S2IoPFpMXk1hayVQTzdFVEdOOkh1NHxVMi4jSklT'@;
put 'T2ZyZj1ibCVPUVovYEoqTWpYbXJhMVUxKDgub0VoVGpUUyVAW29WTWNLOFElNyJxfUIyVjxRZH1nYz9Gcj87aENwRFB7V2ApOmZAST9MQ2FbVGkrYX1YSG5gfSVRKUs3WFhPV3VreUM6OClLZkVnOUBfdWZ+MT1Dd2tYYVJqRWhzWEU6TDg8V1MxVX4iPVhIbmBpIiFYSUlROkslcz1tPmpsR15u'@;
put 'Kl5RdXhxfFM1R1IuLmZhLCJEPFY1TUNTS1l+QlFha3xIUG5KYjJ9bmBoc00qKiNtcldMUithfFk8VShBZmBAaSM5ZiU0OkQuLEZIVU8pbT9HXylZJTgoWTVEVjt5PENnK1c5OihtdUxmTSFHRFI2aCQmIWVWJDBobTYxcXEpNEpGfl1CNmRKXWJffDB+STZwMSs7fmh4RT99cSRWdzFIJFg3am9I'@;
put 'XmU+OXpmSlI6QmkmJldTKDlLcmZ4MT9vRjA2bFVPclRUM3U4T1haYU5zPTZnY2R5an5MTERqcjVJPFJ3NVYkXW1DRkZLSi8saCQ0eGRgOz4sbCk0bXlfeH5BPk5KViYwd0JfOyI7Li9DKCJsLnRFQ1MqSnd4LipZQXk6KkA/RDoseHZAfW46bVhIUlp+dzRte1M9WX1uRz9Xb3JxdW5JeWZ1Y2Fs'@;
put 'VUMvWWdQYlhlPTpXMkNJc2xzMWl2OWJUaCo2Yl1zL1dNcXNCakc0RzNiSVh1OnlqJlM7PXQ2OFM4TC9tXUx6XVZpVGlKKXZ0PXwzWF1pSHBAfm4+YT0uK1AhZ0pLcit8Rik5P3AqeD06YHFkUzloZF4kfix3b0FwZzsicFouPiVGTVBaJVBEV0E6QXtFN1M9WHxnZHg+ajxWLDJjM15hYko4eEBU'@;
put 'WiE7Q0w3Lik9X0IoSl5yJlJJVFVsZ2ZAOTFiVFRwSmRUPWZQLH5CWzhSPVJ8Uz13dTpqVTFVYTB2KyUqNj84Zz5VKipWb0hrSnAzRU9fNl1Ne0RSR2JOZTVDR3xLKykrUF4uZFVwQUA7fC5UPVgoXVs1LGJRZldVbGpgTGQ7Sj4uTFRfIktUOmdNL2NZQjJsSE85PTNnfWF4L11qOGlEcnMkLD9L'@;
put 'TmYzXzNnKW9Wdi8iamVCXUVsW0g1KkdzKUg0Z2l2RGw5SVBrKU9paH4sY0xudUE4U0JEbTcoJF5ROGY2ZGk9LlleRX0jcXAudzVSX15jdVpQdytXfVk2VWcoaHFrOnZbLyZQY191RUxLWWExNyVlcEt2ZmpHbDhyJGBKKlcwWk9eKTZ5V3IkcGJqRXk7RiRbaXY8XThIbjU2RHtVLmNoSjw1JT40'@;
put 'eDkhIzdHZjRvOltUYFs3Sn19QzZYcndDRjlgNTZpfV1IV19uWyFOZylHUjhhQCopJk1zc2JRZHQ/RiNST2djZT9pOltyeHt0QFJDOG1nbWxjOnpOIjBUdSYqVmFabWU6cyEreHpKIW5zISN1Xys3L1Iqfl5tPi8/aD59Sk05T0g5VkNLVTBkWjs5TUtFXTdRTDwzJjRNTU5jZDgoeCw9ciRFO2Yo'@;
put 'WGBmX0YjS1FKJFZJV148d1YoJUI+WXZeW0FvaithcjwiVHhKXWdKb28vd3UlWV9pO0pIS3loXkppVSkoMl53VCFkW0tRWDFDS1RfeVhmfDklfUooWC9yOCxwNShKOV0we2pwbEN6dmkmdEU/NHlUXlRuP1hyJktodUdgflZsRiRDTEB0cU4hTj0mW05ifmpwOVU8e0M2LFMqUVcie1J3UytNXjAs'@;
put 'NX5ARXtgcWRxdUNoRF8oUnU+MGlRN003MlFdbEB3YGVCRT9SWFsxbCFwYEdYZ3xdMGxRbmJLKGVYX3kkUHM7QEVrO01oW3I8ZGlPO1lXIypZZUZTW3ViSFBrKSJpbj5ZSXF2Oig1OFRELDpXTXdfenIyeURTNTx8bXRSMjQ4PGFBNFpgT1hJSHJAcUJtcy5QeiE/VUBsekNYNU1fLHBSfVBPfWly'@;
put 'RSZvcEZ1RHR7cFs4S1FKTSlzYEtkY2pSNj49PUgwb0IxZW13RlI6fW9rVURoNHpPWjosOjJwQCgyIVdXMyR4bnZ0YGl5NXxTK2hiZzQkSCUyPjdYaHZsPlkrdyJiJGJXbmtbRVFQeCJfdH55bjwzK1EiTi9dUE5feEdEa1RKemJbKD1pMndTPDJtbzhuXiFucExLM3k2QGxdQE1OcWhjSjx5bGJG'@;
put 'UEoqMHZIX1hEVixsUThHVXVhWmArdkZHNkt5IW50U1Y9TFEkRUZnbishW2Yvd3xAcml9SFRPUCsiRyJVLEpUPXRCI1sqfEZ5QEo+a3FoaihaPFZdWmtdX0RWWCR4clBJKHp9KCosdHtEOz5SMXtPaFldQlUqM2NXXTtvNWI6TmxfLypPczshZFRkQkd7ezJCUVl7LzhWUUN8SWAoLDA/R180KXg1'@;
put 'L2labj9eJGVzO3VTP3xnIXN7RyRBekV5Nz4va0VFUSFvN0UkTyNFRGVjantLal1md2tLXjs/KSUiVWo5WmhxRC8iPlI+bTUlJi9GdHsre2dEOHJWJWt6dipEaSwoSHRNditPdSJHZj8rL0RUKEQ3XjtiVVhNV3ZyfCs5Wis2bngrYnxTMENrQU42WmQrXzgvcl9TISMucTRLU3dfTT1hSUx3Lypi'@;
put 'QnhTMUhxNjpxRD84YWo3IWAvWXkleFlQZDl8VkE6eSQuQ1tVOixvfCpRMGJ1eWFuND1HbEd6Tj8xSXY7SnpqSzl3X2RlSjxrajImKzNUWSg2UVdyUjpEfmxOLH5ROFM1e1EidzxsLjV3NF9qSFRzeTA3IlkqKnlgRWR3SDc3MnQld1lVfjh8Uj9TOGM0YkQydDBjdWlRLFtEMShfQn1SRW4iXzU7'@;
put 'TEMxYykyXXtdKHxBNF1bK0xQeEl5dVd8WCFPWmBseW4hRFk+Y147Kk11QWheeUFBTCVJVTN+QkBCbDdBek0pY0QxcUtMSlJXL0dmaDguQyxDXkAjcitXJGNRK05FQkdFM3d3d2JJZ2RvdHYuPyJye0smOV93ZHRVSCs/WGlld29RImNQIzErJnw0UW8zTGp6d3UjYX1qZj94UTw3eiZHQFZ7Y2N4'@;
put 'ZDtgdFE7PUVQJjxQQn0kW0FtbHolbERQU2h+NyNdYy80VnovS2lESVo+cT0yc0csSkFLPzNnMkZFXUJNYVpvVzsrN3ZwNDdNalFaN0F4Z0R5OzVzU2FYZTxAa31AK2MvaTM4IUxEWFdrJHlha05fRGMxTEZPdltvNE8vRDUoS01IdVE7PUVQJl46KiUzNC9zJWdeO257OFtoXWcjTjdTIXxKL3Ei'@;
put 'ezBka19SQE99ZWZ1Q3R7SnwvbElySX1Hei5nPWFReTdNU3dQP2lQaitTS2ZFVmZURzZ4Wyh8WHBgWmVXYSExUVdRZV5IKU1JUXZLb2k/cHMod2tLQWJJO1YxY2Z4QVlQSEQ/VUZFbmM4PHJyeUlNe1guO3FgbVNtaCRNfTtqXT9rSV1fRlIoYko5bF47UVZqeTBuKFhUd0xIPDJvdT0pW0NHKUdi'@;
put 'Ty92ciUiYnw+RmspNSZMTGpYZkk9aTY+ZUZCSlhgP187T3FhNyJpeTcxO3MmRkdAN2BFe0ZZYFdLZTxUcEQ3fEVNfXUpJVMscnxzcjxCcWB1OUV+ZDQ4RUxSJHdNRyhHeiE2W00mSHUjdjUhcG9aKWBbdnU0L2RmKyM4X0Z7fmE7MEM/Unl+ZStOWWUsaTEkXkh0e3xbSGkzNk14IXwhYDNMS2li'@;
put 'e357KC8seSFzOEheRSRKXzRIfWdWRUhDOCZobTZBdldsdntCdjdtI3trbiFlPU9PNUNuRVhXbWVKdHtPeFgvXl9kOmRvMjozdkM/XW9bZFIsJDY3bCthYCR6OV1qUWI9LyQ5SnxjL2RzLCZxYkhPSSxbVkwqMzw6TC4lY2RnUS8ycEFgb2NjZXN7YDV4bE05eEdsI31IR3ZYSkd6dW4hWVR1fX0l'@;
put 'UnlbZ1VnS21ESlF3eEtsZzFoOjBPP1dxNDQkLGwpV2M4OkVwfE9YQnxKXjtXelA1N0JBZGIqQD1hQkRDXzsqS2owXU5tS2R8ZHMkbjFJcnlYM3shNmh3Rm9pOCp4X0Q0bWAuaWhzc2xiMWVzOWdBMHtARygySUQ2UyNMNWB6Vy51Jl1UZFkvSndiaXUyX2ZrbWdhNGdBQykxPl1KSEN9LiosKU0i'@;
put 'd3hRP1cuUSYsV0VNP309VDozPG4xWEZlRDApOWtHXz1aZ0EzenhkVlBTYSRFZm5AaCxCQ3xFSDF6YVMiRDcqP2dafDEkJFdKZUtWY18lbVlMN1Y7b05hUWlVL3dPS0JLP0ZXY0ImeERodygwMFBZLzd9SXJyI3J3W0pnfmB5TCF1VF5sfGFZVTB1cCRnY3N2OkBoRmN6XWdaPilZMmZ5XmIyX1Bf'@;
put 'S0Y4Wm59ck82QmpqL2JiPW92RjNLT3pyWnwqUUIvbnRpO0t0cDdgcFRpJX14WGh6OV5+Vzl8VXc+VChaYmgwQF9aeEZCMGxzSCY0S3BYKUc8dShVbjRwYmBgK1AiYjxHfSltNDVVbGBDXTMsaEtvT3IkcHNKNEd8dHU2aUB1MiozYzF0fUxFKWZadTt1KjIhcGBnVmNMVlNfZWAuOXZjXkd0a2tD'@;
put 'WE9WaUR2P1J1NiFCelB7R3RONXRJdT84aDV4di9lUXFie3tkaW53JktMLGwoJjZmeVs1JXFEfE5tJEwwfUpBdS9xKnskI0IuXy5lJGcoU3hKLyxaSjhpVGNpbm40OD84dEErNSZVL1JfZWUyaEhZKD1oYSxPXUNDczBFfV1+MlpRUypzRWtBbHxZbk4uQ2lJQ3B8USNydlIjbVRHKlVrXzR9L2BC'@;
put 'fDRmTEFSKVt6XjVndH5RV1tqMz47M2Zac3BZUUtAZVBHQ3pad05pc2NNL05zUU1pd3ByVFtlfn59Tzo0SmRkOXlVfFp3NHZ0Yj1kc1hrPEY7Mk9xV3YzV0pSJDRrSWQhKmlpZ24+Sk9ISE0/JFZHWExFKSYhTU9HTT5kKSt1XnhJKWhLIUU0ey5MOH0sSmg0TDVsTnhubjk3fTVUQWZhUiRdIjRu'@;
put 'ZmwxajxHUWd4L241aGRHPG9zP0EybU9vRUowY1AuIk5DQiE0IUZ4Ojkydk59QnIlVnl3MWgydDxvIS8zbjZPU0NyKUxiUipzZ2NIW0JbdnM/Q1kobnVQN1NyQmhIYVlCeGwjKFdkMCtHeWE/fWdDUTVBKjVfN25NZkxMMXIyOVUyXjtMQEI8Z0JwYm5HRGwwe3pmVUV9XSw/RygmWm9SZ31mUklU'@;
put 'Wz0lX3RZd2dEVjhOcz9XYjAjNCFFRXU0dmlZWXk0XjlxU191RD9HakwqNFZtc110WH12QlJ1WnxUK31RTXVpa0VSX254QGF8KlFTRy9uKFh4ZXtHc2oyaHFBcSVxL1pkLzkwJV5YQyZFLlBacCwuW2lLbWB4cD93e3pXcl9oO3VgQ2NmVCo2fVUhMFpEdVQ/ZD53Wl9mQkV5X2lMYWFXSDd9UHgk'@;
put 'KUgsaTNXajRfRjxdS3A4RGZIKSM0aHN8dUM/e14qT0l7c2VHLlVgL1hCbCJCdVgzaEc5JXBiLEg4ejFJZTl3JnEpV21yKCgya11STX52OGpwI3s0aTw7bT9jJnhyYTNEKVB8KHJyXik/KWNVTjluUz91MVZaVEUwdWYkN2xnak16bTpKREZ1fChyUVtgMDZxIipbeFIkQEcodHM1aGVLQFVNeEp3'@;
put 'eGc5KmdVUEhNdnU4VlpeSSF2XTltMXNWYCRkWnNwZVJHOn5nKVkiLCVMZXxTWn5XOGh8VEA0eFIxKn0vM3ckYTpraHlNUHR7bmZNc1VIPmp5IjNocDokZC8qOTI+QyExRlZSN15xMmVtZTdZZ2g2d2RWb3g8X0xBUGhtJS4mTTN1Zit1JUtlPjdWcnhWOUBhd1NkdCEpMls4JjVKeTR2RUEreDR+'@;
put 'QShfMT8peiklKmpMJnFJX0JjPipSbTxqRi5AfGJgMzVWUmlEQFhyRGlrU1BFZX55biwzd0RwYzExMDgkR3t4OkZNTjlGIXFsQiEzRjNWJXc4PXojTlttWHJycUJ7R0BNOFlVJEpFV0ZTOm9PNH13dyx5Pz9veUIzX3hTejh5d2dIfjwlV15zUjtmI3xRMEd7TSYldE11TDxwLjVMPDRKUFdKSEpE'@;
put 'cERuTVJ0YkNucFAzeDcwJXJAa2V9RF9dWHJTPUpefUJXbntfaGsxNzRRK2RdWERzWUMhb0QrWGE4ZVN0cGJLUGZaPikkZ2VecEkxPz5YQWgsdFhsez43fSRtSi48SEhIQztlXlovJUVfLjo4SkU3ZUA0LFkuYjBpYnBXdSZncSN0UCFheCkhUCJeb2M+VXVDcU01V3xQNEdedmtOMlBqbEJiSndS'@;
put 'Wm9sMihIP29ZRCY9TC9FJVtsV21xOHlJIjskPS5pVXs2OjFpM2guODgldjl4Ky96LFtTZ0wpS1YsQXFVOCtyVEIrWFZVQ3ppZFhAY3VdT0JfbjNJOlh5SFBBK2U6aW0oV3MmaVA/VWlgREgqRCRPTWA6LF5BK35qMkJ+MGdrPjJmUjwhdl0wWmZPWFVpKiFUcCwwXy9hP3NFPCNBKmArNmwidm4u'@;
put 'RlVeRlQhSWUuK2dySU59RmRlVDVvQiZLRWxLQyxoS0tneGNkPW8sXkRsPD01MF1wRDoxW0lKNWxGM3xaR30uRGkqRjh3PVYjJTJXajdsIigreUhxTG9+WF46MzxMRyZzb29bdipNRWciKjYmb3tNcjhFaWo5RDRyXlBgQmM9Pj1qN0YyUi5ndzpLbEFUMjNbfntHUncoZkhuVFpyWEpxeW5ISnN2'@;
put 'QlhiIjREP3lDOHJ7R2h4QGBGLlR6O01VYilMYHB3KkhmI0wpcFpMcHBIOklpRVIrSGkubiUoWzEwU1FyOnk+PVI7MD4qPmFBaEJNLCpZcDdleSl4eEI4YTYmcXM+OzB6R3dyaDFLfkBDPD84bC9dV19QPk5sZDlCX1U8d3ZmbH4oYW1bVyJyQiwmW0hSO3pfMm4lY21iVVhkMEF8XVIuJCRiQUFT'@;
put 'VGIhY2dEU1MyN1dBNEcjST9eL2UuOC8qT2dhfGxLa3ImRyU/cShWNGZSR25eVTBEOXlqOlJMMElVeT8yV1NnUGFFXmEqQjdzTX5+T29dQGQvSV8oUGp4N0dEZzNCXn1kQWx6OWZTdmtzcHNlfDxQNyY5YiQxeDR8SUdlSCVseFBTXjsjdTQmdDFNWDlVNmdieVM0KmRnNi94e1VvaDMiZFhjO0h7'@;
put 'RUQ8Qm0+OF9GKkRJWzhVdXgqdyFWXkxmVmR0Rjt3RU44UFBrSWYxVVQxelRVKG4wIjh1K2QuZSwrLDxCdH4/UFRHJHdXST8uQDt8bCpVeFB8WHJpaWtYQl1EcVAvVEdlSStuVjVJTVFJcDdgTmRWV1QmKFYvQy80XlYvQy97KFpyU3drMEs8Rk1FSFpxYDI5UixePnp+Qi5OOSxnLGNFfitZYCxe'@;
put 'OG1ILlh1KUROJCFCPnk5S0VabWBTXTl2aSlHc0FSX1toUVs1fG9RMnF5MklzSWxEMl9IKlJpViQvSG5KRD9RTEJVNDxQM0Z5X20iNWMqU2t7U31feXhMc2x7WTQscWdPSEc8OmYzfFVia1ZbMGxlLy5rNG9ROkhkT2gjeD05dzFxVDxYT2wiOHxkOVttXShNLHF9VDlvQDF3YSR4R2U0cVhuJjI5'@;
put 'TjU0fTpFdGxyZ2s0Ln1fOGlPcTFNMVleSHl8TlZyUkF7aTlMfWMuZXliSSQ0R0s4VHRfYkYzfXkhJixwe285b3spblV0aVdFan55XT55R29qQSslPS9pKSJyNlB8clNSLyozZyptcmtXfUg+XU5rbCVjbVgvUSMoU3hiVGg5QW86ZFJnYl54S0pie1s5dENlaz1lZEYhMi8vK3xfYzNkSVI3V1J5'@;
put 'djhZV359N2BpVmoleTg7YCMzRjQuVERnQ0pLdnVOW0EpcVd1cnJOIVEpNDw5MWBsYSE7aE88Iix3UE5tcil1N1BYVFVJazU3cS9WZGxLQWFGRlhDWUJLQCMoZEtTIW5UcFN6ZHBlS0k9O3QpenclQGh9OH04LD4xNTBxNFIoVzt0KyY7bCs3ZSVDY3xRfEZaIkczfjA6cUIjeE5hV2FFd05XJnho'@;
put 'eGREW2NHOkxuOHw1a1BhMWhdRU12ajJiLm1OVCN6PChnKzU9bXxsIllGenRoW0lxLD4qMDRecjVBSW9OODlePXI3X2FjZFIyInpIVEVXL2J7ZkwuLDBoeDlrVU5bXXNiaiQyV1MqTXlbeTB1TlJRVmVlQ2E2fmUlcWEhLmVwYmY9MFJ9K2lYSC8uX3I+Uk0leUY1QFo0MEUkc2tmL0s0RzVONFRw'@;
put 'b003RGFHT0F1c0klUUFRP19aKERsZmY9fDQwP0NTc25Oaz1JW009OCNrRy9tImIxPCJXKSlLTGBgK0x9O2pDbzVKdWNVQzpte3olRnAyNEQlTGNfWmw6OEw5cEdzPyY/JExoWyIkX3wqX1UrbE56KDBMP0VlaFBebVpCWG0oTlR8UkhFIzs/PDVZWl5QIi8hOmtpTVFPVCE1ayl2N1cjY31yL29E'@;
put 'VXY/TiFHSDhxIT5WaTc4M0tmI3xAcy91PTpvM31JTylEO0p7UT0vV3pRZz9qPkNWejd9aDgodUlpdz1DXl9uLldrMEF1YjsvUmBPYCNDLkwiLlVWY2xKMjk8V0tKN0VSLy5YQFdHVTFXeFklMV8lUWN4ITE3UjFEMnI0QzFlbT17WHJvOFYveDQzRi9lPzBBITEzI2tVbldJVSlINHNDSHg4Sk4p'@;
put 'LmRxJEReY19jb0VzckosVXFvcHZAQ3ZFbU05OU44MSVAVDVZcEJydVg3d2N4bEJ+ZzxpKH1YNFchXm1qalhUWXl1cntSTVgoZTFAYHo0Vz5pWHN8L05teUFDKz9XM2xEXzpqRDVxKl9lRC5KfTt6JDsvT2RBe3NpVCF6VncwTTwsVWpxZUdzZVpYM3FEXl09ViZWWkd6S2NPLndCJEZOXyQpX3d8'@;
put 'b1RSO2BwUy95X20mSi5FKDU0TXlfRCF7fGEvbUkifE1ffmQpY0V7ailrMFQwJmtEXlpBekZ4LGBxIkR6X0tGQ3YxaT1GfChjcDJlYVZHZShBUFdWMEB1RFIka21yL2czSWgjRCQ1XTg+Ukc2Qyt3fTk2LFNqJnN8WDU1b1o8SHBBaXNjTWNZaCNbaWB8YyhkPXRVSihUcTI+Pjt6fElZL0IwIn4v'@;
put 'MSEvbytGeWR7dWZ+dVdaYUxISSY1d3toSG1yKiQqIWVAMjU1d3goXyhLV2Q+NHMvTT9oZTI0Mz94eXc4ZEhRV0hyblRgYztYYjBAYD9gQUgpW3F5eDJwQTNCY1NyZGd6KVsuImNlPSg8SGJzNjRaK3hYWF5FUnxSN3RsIXBYdzRtWSwoYyFieDYrKX1mTllPTHd1X28lfGxTRURtIldkPEA1WUou'@;
put 'aGF5QCkhS1o7RUd8ITswYWk9LEdsRmIydiNdOSV8KG5ELnpSSH1DRktzcG0xJiU7WGZjMjciPmVEe3xVdShYK1RyQmxvUlZmUWF+ZnsoJjcyPylUS3AvXnkxT2l0V2ZPKGQ5QEprZUM4QEpLb01yMWJ5aXFbbEZfK0ojZUtPV3doRjF9QmhON3BxMTY3cS9VPmdefTxVbGhObk5KRnlOMHU7VSIj'@;
put 'T2lVVnEiZkdQdTthOEg1ejtQJlpYZUdDa1FlZW02cVllMH5OX1lWcEl+UGMhT2lgUV9BMVtKbml+SCFhY01HZ0R2WChLTUNleC9pfHBMVVlgY3pIOH5IT25ILl9zJC47eio+fT94cnZKczlIPzh2MSUxWmxmWixHQilOZkVhdkRfTV1Oej9XXjZ4P29WUiN3Wkx0TiUsQTZ2RDYoYzRzTSE6UFBV'@;
put 'MHY0LFRFSG93eSsrT0xIY1I2WXwiYFg4SEFZMm4zUkM2X1ElekowNFkiMkxIfkMjdURpNXwlKDssUFllNGNnIT99clVsMC5VQTolailsMTl7OzlgLjhzIVJ3QCY/I1AqW2MofEw2R21ge3xUdHNCRjg7cXlEZFVtJVRSVmVSL0kiWnk4JjpqJX1pRW53dHVLdEwqUUZKITl2JEshNXZNTG9pKkVY'@;
put 'SUJOSXltfHVINSMqPllgNT5vaVNTQUFBemJDQXc0VkJ4RElIIlEsMUN1Sz12RkBBdEI6P1JEMnoxTiNPVWpoeC5MQUFBQUFBQUFBQUFBVFgoNCI5cHdhTi4lXmZocFglXWhtY0FJQzFEaU1IQ2oiNzQzY2EqOm9pRWdPdD1hIixLZjU7KjhYJCxNVV8sS29rQ0tSSlA+TGtuJHBfe1ttUnVHNk9A'@;
put 'cHEjc1hRPiMoK3NKQGxCdFR0PG5gakg9djZDc11EbzckXUdzP0x9bUpOM2Bobklwd01YfGRXcDlXUEwyMFpwPi4xTkM4LGZpWW4oM3Q1RmBDfF0yZ2IuaD5gM0AuXiMuTl4jWE01VDg3b11GVWlFWDRFPHppQEgsflhWfi5aKH5jZUJuTWRUP1Qwd1ZObzpIMDQ4Mn42Qno6JDE8QGJne3c3LEJC'@;
put 'QEQjMGY3Lmw3bmZtJEJyWHdDN148XjNCTlpSXjtxSi5bP2RrSShRT3RXZ1NoSndhLzRWQFc+T2ZVUW94XjdkPXlkWjV7ZT4pO3cjPjptbUtyYngyek1Hd2VhbjJWOmtVRFlgYG1hKloxVE0pNS5YKV9TKV04azgwWX1waDs0Yjp+NlRFMVU0U3lnMntIYSQrPn1RR3lrS2FnU3BrcGkpVUZSdzQj'@;
put 'SkJoRFZSbH0xdyNhT3B5Y3BNeU1sOCs/bS5eLnh6dU0yS3o+e2RxKWFyTmIxc0lPOHEpaV9CQilLI1hUVEw3c3VeRFYxSVlKfEJNblpHNFVqXil8eV97XWR6QERKK3V4QWs1clM8b1RoJEJxIn48MyEqen5dZFp3ODdVYFFEI3g0Qkw4MGRCTHNXZjBATkQjbUhNV0pzcD1qUHV0d3w/T1lmJklo'@;
put 'djl0P1s8azM7eGlvaj4uT0RyXitsaEJYUzY+OU4jU29HOzglemhBO2FaOCJSdF06TmxwNyYsJHZbTmo+UjJKPShLYDhkP2V5e0YyU1IrU1gyVT0vZjJdaT4yWStqaFIvOndUVlJydkhFK0g9YDx2ZTFiYC8zRlUpRFZ2N2p8RnpWRmREZy5BfjsoTFoqaEh6Umh+eTtXVVRaJj1iNyV8KyZjYH5Z'@;
put 'U354dkFOSyNFW1RZPzlpPC9PbG5UPHdAIVo9QE9lTSJ8X0JAQ00zNSp5bCpNeV5kQjxSSi9UNl9NeE90cTRiP0pZR0dTLnhLRypSenJ7Xzh6UUYiU2taUUIqX1pyYXVYfT4ofH0rZCZ0T0sheT0zUX53dUhTM0FiLEZ6WTg5U2BGXlRYdm1dJloxdH1aejhERUgqdHBENj0jXmNaV3o+UGErNFtb'@;
put 'VksmaCk2MztaKHA5T098RFtnbGduOXsyVTlMRVlLNGR3NUBMb0cybUc9bkpoQCRVWWpsIWZqeUZoLFg+IWRNfSZCODh2U1FkKjspYzNPLFNZZnE9O0QrKSh4QTJwbTVRb09CTW01bzJHXV9zYGkzZjkpZEM7NWUqSChwWlA1Q05lS1clfEM4RiZYKFd2Tis0WUY4O0laLDlTdkxGI0V4dSI+OHF0'@;
put 'NGdKd0dgP0x5ZmAiMGNpPHkkZVZGenUpZS84U0pfZU9CVlg2JXdMdjEveGdWSEJOTlRqN2giJX1LJiVkaS4mYWNOVWRPfHNUcFRlVzp1cDM8RX1VNzNnQE0oZ0NTb2F4aD9hQGhVaH53Tnc6cj1ZeElMIVZAdEs1Szx9YllVXUVebE1md24oJVA4NTxaNH0ufVFOODQwSUhSPlhSe2Q3dHFjdVJK'@;
put 'KiU+dTNqfClYb1hnbFh4TzxBUTFaOE4kTlk0UUReJFVRJHQjWCtvPUpITFhlU0FQTTRwY2l9PXxkeGx9WEslW05pR0d8RjhuWkM1LixlbmpGai9gLmswKyV+L25AUD1gQlI6dCRjNF1XZ3w5In5aTlFTKXVYSWtTSG0qX1FFX3VnNH0iPXM4KjxGQXA8IUkzfCIvcFNXTldzLmpSaVR4YzEoSjRw'@;
put 'bGgvVkA/TF49TUlGXzRVfWUkaGIzRUM+ITglNjFfTCZPRTEvU14odCgqNmRSQlBvLyZ7NV0oc19iQT52XTUvXm00aXZ4W3tIKjRVayMkQC95YUJieD1tcHw1KHhlRDV1Mm9hOXsqMjsqclpMfiUxXnRMVFpWLF4+QkN3QiJLPDN7QGxvYHFTJjwoXnhjajZNWj94VmJTajozSjhec0UkNntOR0Ao'@;
put 'Ln1bX2FdQkd6QF5YfWIsWztKPEgoWlN2Zyg5SFpDITg0WXdEPk9bc1UwUVhnJFVZY35jSGUvWFBUTnkpMSYmZURGdjRIUXdUe353SGYqNk4wYUNdNHQ2cmNbe1EjK3FqblA0MSliMVN2Nzt3fX02UTh6MEd2Um44NnFeXiwmXiFAO2x6SDhRXmQ9QUd6Kj9pe3g7IUt0ZFtTQiZmM11fak5QMHgy'@;
put 'JUJlRUxpZE5KPHE+aWc2UDBlejx2elFCNFQ6RWlsdEBRSGNxZ3QrIUY8eEhjfTZoQ0BMTUwkYDNqKDN2X3NwaFtQY0g3cFViXWMhd0MhdHArKWhsYGFkNX4pPXI1d3pxR0BXcE86QmRucSowalMvQi56eHVAW0IkXXBYKztdIjQlN09PZzFjeVpmfE5aMENVWSk6VkomfSJfZ2s8Tm80b2lacTNv'@;
put 'fE9bdXk8Q25WbFAlXm1dO1RSIyo2S3xlUiYrfTtIYUovO3VWMEBpPGkrSSpDWjBLXWc9WE1jQWBMbmMhXzloL0dyPkU+R343RWskdn08L3E0UG1mbyhqREpocVMhWyloRDZbZWl8ITZQdTlMUyFJOS9laj1WalM+W2dGLDxRJCpkMTFhak40anU1M3ZfKzBXZmJ9KyZyfEI0W3FCNlpkZDBEdyhM'@;
put 'c0EjJE1KODBIcDFOZ2VYVlMuQ0w+KWtSLFRnLkNZNCp1WnlCXXpVZjNYNnBUTlgjQSNec3xPSmxeT2NEYFdsTEpiJEhXYGA3Pn1vbVs9QTAoW2RlNDpddjRMUT4xUVE2UGV4N2Mlbkd0bmJafnIpZnxyY2pmKTRGbCU+cV9vKV0xQDpENV0rR048X0ZPT2FdNkl6XkBIdX46SWY/Pmo9Oj5lck95'@;
put 'ejFBaGRsaVdUYkdXdnczK1IuV0UlYltIa3FQLFRnUCFTekx5KWlYSzhsYD9GYSoyVGBxZj1yL2F5ajA/bSEuTjNSNVZ2aSFJWlEyUl83NHttUDlwN2djdUx+NF5oWEUwa1NQSVlCZUlvQFNhQGkqcHJPaHxNMC5MODVSIV9jP0N+NTZqayYyYmFdRClEa2dFOTZsJStWNTdIciw4Ik0rSXssWVI0'@;
put 'Rm9hPnZse2p7YyJ+fHR6dl9qb3R1WXtKSioxQ3hGVD4hKURydipqbCVaMnVsa1YsTV1+ZlZoZ1NnME8rUVF2KjhjPE8lOT5uRzJkMSg3dVtfSHlJbzJEaT9BcHJJMHYzZGJ0VCN9ciM4ZkkzcEcrLCxgbnV7TVtFOGhEb2dEUDJrczpKaSZVJF8sX2BNZlpoPlQ9S0xhR3JvLG9iM2w2MlFOJW9T'@;
put 'WiVhPDtYPn5LWlJRWmcxUGBDMjJFciUsPSZvSThka35EPE85Wkd0S0RsbFlwPnh5SzAlWHhoX1lzZXtoJTheJkw+R2hwelEmeSg3W0R1RV1UJWxGfW0/MzgzRmIlIVg3aEQsWU5DYHRneWRzfj5lcEJNXUloKDZ7cDA1fENUI0deSUs0OnR4bnxGT0kkKnQoLiU2VmZzQGcjYV1Vb1gpdFEqUDo6'@;
put 'Ml0xRkclTXV8PFZldSJ5Y1pwelN2Qk86MXthO0k0RDp8fFRFPDlhcismakBCJVdjKW8qdnFXd2kpKVA5JkQwfkAjOFo0d0tBMEQxUC5xWERebkl0PFklXitUNFUme21kS2RrV3VkdzF9Ik1QckR2dDlHaV1fej13Sy5vTWFbYGdVKUJ9NUFFSWBHfDFGbiRuUFdhaDc+ejxNe3g5RmdqPyQzO3h6'@;
put 'MGlMals5QD9iXk1ILllPMnJ9JE5iY1g7I2p8PSxVNz88O3dfVEcqaE5TVl9aUiZaSVNyPi5XYzNYW34ub18iQF5XYVlIfiRmeD1Re0I8UChtXzh0aDhzLE9HQSYmb3VkbVMrPXhfXzQqQ2BVbTcuX0YhKTVkKldMfH5gdTJaPDQkdDtXSCp2L3A4bV0qPHJpVm1GcmEkLzY8W283Kn1VcFhvYGlu'@;
put 'ZCRae1J4U3MpSmohKVRWOSg1WCY/NGo6QG1zOUt2MmtrUCE/QyQ7JkR4IzR0TEQyMVYxPkZ+dUBiczJ8UGNZTF9PV1s8ai88KDVJJFN8UnNgQnhdIWdYNGROOD9AIzhLZzAydyw8SDEoUCVNJStyZDk5Wz8sMUI0Mk5GNDNaUFVCezB8VUFeJW1ZTmR9ZzVaOmA+IykqZChTUGY1Sm9sSCk5UEY+'@;
put 'S0h8dk5EI0xbRkBoNlRfaG8iUmskO1hXJjI8Pkg2Z0IzRGYobUo3VjFiUktDWXk8fiJvan5KJkJ+dkxNRD90cC9yWXt5ZFFXek5BOz9DKUNiNGg7Ti9CR356RiN8XzR2YS41JjplQDg0UkhaUzM2aVdoTmshOVs/RTI/XjszUTRCVkxue3QkT0cvKj98YW18WkNeL3NLfGBVRiRZWlo2fllBSEo2'@;
put 'bG0rUHtSVlpHJjoufS40KjZiTT81X25ncGd3I00/Q2gjSGY5dHNMfCtXU0tsR0VqPH5ycmlNRzU+SVU7Z0U/PXs6VnorTlY0bU47b1BUWUdUSUg4ZGpMSy51YmBmV1IzMiRiJil5NE9lWjspQ3dkMX5qWVNfJXY+ZT9NTkNTX151bClEVTpLQH4vNHVjPDkxa2I6XWEzazBfdSVXOmA2ND5HWVU5'@;
put 'RVomc1NHZDk+ZDk6Wzp5JkhFTF83RVYyWj8ifCp+KzQ4MWZ5RlN5dkBIQzMqWzpaM244K0FwYztKLyZqWnV2d1Y/PVMic0VzcV8oViRqX1ZhREdeSFlmYUFHSHF5eFM/cXJIfXk7fFRAPlRGMyo9OHk7azp8JHA+RFZnMFNYYk9UfFg7VlVlP21Tdm44UHB6TlsvTmMkNyRKODJbXUAwbCpkRFlF'@;
put 'dzEzL0lKLl1YdiREWilxPz9JeFtKJE4uTChFWjguaWBbRjhXeE17TzRsX3FsLCFdd0JNTWAsTXIzQyFoTVJ2YiEjPX5Se14+VXxhdms9c3x+JWlWP2txcDZPcSlgb35XcGJJWm5ARUkuUHBGTEY5MSV1MUc/Pz5oNj8veGBCYXFxRFJ1Njxjb1A+YWVjWitqO0U8QyVdaGxdVWUzX2FWb191Y0kl'@;
put 'JTRfdVl5MWsiZCxbQVcoaXBdUHlBXzJOfVolOFFpOj5Ce1hyUk9BfmM4JlN2JH56OyZASmlRd1YzNyp2SDVbeiE9T1klZHdLPyN7YEpbckJCZ21eZmRxXnFhKGslYmU9eU5HQklTQFBjcVVzK3d7TFIpakYiclB+N0Q+JH5oIkcyNCVmQE8jaXFoVXc9cT1LQ2JtcnZ8MkJTSEx8VzMoTioqdUUz'@;
put 'N28mRjtmUjQmNk5BayNTQTprfEtocFhZO0FFPGs/K2JjaltjckNYTll+SGxVQkQmYVt0Q1dIeUcmWGFjZU4hajsuVSFPTSFUVypETG5YUThxTkMha1daTD5lQGJ8Pmd7SSFzPyM+XkwwVCh8JUoyfHdAa1ZCWXV+M3g3ZlsqM2MzPGd5MFdLcE1FdFIsOXNjQGJ3SzFfUW9wIVpUZikkUz9tUywu'@;
put 'WClYNWx3TWBPNyxMQWtFVWBpfUNJKU9kNmR4NiRBRnp+ekFMYDhPfFVUNm5LUkFJJTVlflQoUV1dM0hCZnlmSSVqKkJub2QpS2xlQyxFdGpMczBnRS4mbz5ZJDE4eyNuLjNZN2k4P3F6UlMwRTA2eyJeUF95U2E0RllBOXBGVGs+aV4oJGhoYnl2OWkiME52fFI7N1FIVFlyeTEjezZ2YSIlOFg5'@;
put 'S2txaUZ0Jk86MldXRGJrM186OzxyOCRORldZTzNMTSlyZF04R2w4LCllNixBSjFeUUlEb21uPktJQzkpSz1fUlNVKTtkeXlDSWN8am47QypnY2krSGxYRFpYT3U0OzZibTZ7ZkE3QjgiMXFAQFRyL2JDNFBZIkY0R0tNYzp0RDQ+P1JGbUZHUUl6cT1OVERIYGE8VWpvY3QxS3x6WV1sL2lrTDY3'@;
put 'TVdTVW8kKTJuIytRXTpFNHtnZVFuRWpxIW5wPz5sWHJBLiRVK3NpQypIQiosVSt9Y2ZzKXAhZkMmaUUvWyhTSnRjT3RmXTBQX3pEQjdCN1Y7Pm48WkVdY3A6aTlYViRjM35feiJtTDlSYilwWHp7dkFbKFJAZHNsM2JVJT5HLmhvSHphPjV6VGI7Lzp2ZXM5aSJsOHNSOzZtPV5sPkpVaXR2ckUr'@;
put 'Z18xZ2JwLFV4Y0NbWyJhWnZKNVlZSlkyVCJzS0RsMUFBdkgzUG8sQnFhdVJKZV4jYkdoQHlKPTtPXVBoPyFALDM7YGZGVit9fFJean1dMlF7Mm9HSTtCcnp3LFdPRWFwUGR7PlUxJlkxVz94WzNNZWFqcy47eyZQcDtkO0xDZX5qJFAraStFeGksckcjOXhjX1ZWXXprflpGfiw8QDdObWM9dG5u'@;
put 'LHdWZzp4Qy9UUU5DXkliezIlWU5RKktdWDZmXVJ4eFRfbTZ7PXB1STVtP3RlZkRDdnouYXYrbkp7SjRRRSleV3U5Qj1dQjJ4PDw0WikrbT4zK3NvdHFXRiZXRSN8NygpY2NUdHYjdVQjcWgvKWNXfkdsUkE0dy92QyE+Pl5hd31WaitYZHl0TGxuZj9YWSZ2LCpZelpFKTdqfC5wWjhEN0lKNT90'@;
put 'S0YlSFg6WSN5NzU6LHE8OnRTdTl2NSp5OHBIem58cEBPI19hJDokMGdYMDlubnUicldFK0Ztfn5PIlZVWnQ1Wmx2ekd8b0slUzM0PHEvOk4veUVDUW5saXQ8cnd9Ty93OkU0IUdUbTxFOkNMSjsyQ1RXaHBGZ2VDcUoxX3hnQkhLTjxPfEluRUp5QitbcXc8XjhTe1lxV3kpbVohfGo0Y2J1enVW'@;
put 'LlJMRFRjdmIzWW4qXyszTjIzSkgqRXFHam4hNipFRjFqNzBlckh5P1FrNGVrTmlAUltsLDIzJjJXbn1JV2xIQjBuUW5icD1xVi9mUlozN00yZDl2WkooJjIua0tWOD9qIlcpWThxayNqTCshKDJiTX0+QXM/d2JAXl17LGA8VUpOeGNeeUssPWRLTFVnVSlIWnh2WUBQSjRyJXhNbjsuciEmcj5U'@;
put 'e3lEeSpaQjYuTDdpVml2UHVlcXlfYnApJGVnZis/akFCU3lIJlEmUXZuNV5EXUUyRUZhXlBIYztwOD1pJSFXcCp0eDo3XWgkX1tWZlNgYEhnc0pFUiY2eXp1XjRFLCopaiwqMkEmVEksPzEiUigydjRELF5Va0o8bDVYXjZnSy82KW1pSFRrViM0Rz9OdntfNV8xLHxJMWFhVjF1O19YZWVWeExB'@;
put 'bERxaz85ZDxWUFAlY147UDlSLisveSZNdUxYL3FlIWNlNnJNcCM6P1JCS2lEPjxILHdXXTFjWjNUenM9QUpxW2gqOSM6JjFOYmpzPUZQRWpmL0p2a14pIWRtRSwqbllAVUhARHdxV0VCL2ZMNmRYVSVgNilUUWx2On0+aDxCcVRdVUlAN3tTdSldV3gqMj50ayU5KyRdbEVzTTl2JmV5M28vN28y'@;
put 'MjVwbSxSel5AbEFlMHJAbCxBMjJWQW4yN1pxRkhBdUx9RkJSMCEvOk4sakF3Q2NTaiF9dkQ0eWh+ZUQ3OTNnd2c7RCx9QjolVnZATnVMLmU+PHIjaFNVWm8+YC9hbXZCS0lGIip7RF8kVVFYKDclZTA2ZWBPQTQ1SnlaWzd5LGlhdnBycTkrbmpIeVJGPk0kITU1VHVWbDJxWSJZcT9MZFciMVsw'@;
put 'JFYhWzhUaHJSMyRsLkx3cXw4ezNnNHc+M3YydTQuRlU7aWF2amFebmRURFYqQiM8JGQ+anpXZHlpRVVnRnkwJi5iSjxfbUNNJkYlTzdWcDg3aiwxTlpJVWRNVGhbSTRRMzgyemhsVX1KUTY9VjtuOj4jeVQ8NXl2d1g1c0k6ZT9APjQwUlpmeihzVlFIPD1IVjFxSm1aMEg7YFQuNEhXbz9pcWFz'@;
put 'TiJ5dlEmYEBSYn10NHZKOTRNOX5aals8e29nRjpCPyxLKF8oL1Q2ZDYhVFRuX3hLIWJhQHZOQStySFN2ez4zSGkqeFRzSSxyXkdRQm11Ykdtb1A7JTZkUmskVjxvP1daODBCZ3xDfil7Ly50RWhMd21OYmhKfCVDeDB5Unx+LjREemhDVFhAUCZ+WUUiT0huRl07Jkh1WH1icHZbdEtyPltWZiNe'@;
put 'OUwucVNOfjNdaHYzQ31uPW1uaCpUbzJ8bWckeVslMG44Z0o0dm9QMk5JRXUue2BSQ1IoSkxEe1hBSnNnMGZdcCM4dFRjTGphUmNKTS9DISl6RlpTeDFsUXZEMX4hKVluMUpuKW56SkhMP1RtXVVZNnt6ey5NWTwuQ1cjJGU7JSRXRjklPFgxVWswIU0vcW5oe1NCQF9tXjpBfFV0cjhRI3g6dWdQ'@;
put 'bCsyaklgU0AmUkkvODxocS8mVWNGL2FAZ0d2UmR4Tj0uQHo5VFRhO0J3clt9U35rXV8yUnBnJD4mcTF5RDNpNHVeRWdiJjRuRmRjWGBzKmQrOCNFOXU+fGF1a2ZxXmQxTFJjSWk3eDtuJWI5KjVNMzxIOlhZbFEvWGZqfF9qZnNjIUh1NShIQCRybG1tbWVwTmRFeGMhcz0rV0c7V3x+cWVOPVU2'@;
put 'P3JvQChGbitEQWZ8cCQuUWxGKHFERFhEaFV0JEZIKHZGMVhgPzU2RnglO2lyT0Q1PiZVYVgpPWxSTCYvdHJreCp0I29hLjtLPXxLOGk6IX1TdWZ1WFc+VWZJYUBYcjp5c2VhYVsvfHZNIyVbMjZrM2d0XmNHY1VzJiNzZFI1T2dtRjlqN0dMXVZeXlZ2O2BFfWg+bjE6MUM4dDRwJFRwNEphUnRg'@;
put 'NW5FI1g4XngkUV4jMHo9blRvI1JVbUsrTzdiLDZ+O1VKPWMrIl53Xzoyd1UhZl5fbSFhW0s4KHt2diVDNkdmblpBRipNMnVUXk4lZkFFJGBoPzgpPihRfUZvN2ZbdXprN0ckXXFXbUdkfERLcGhJKDVbW0tkZCllK1s1I2prfUZNMGt6KUJwPDo9QT96JWt9MT5VX2JbTi8mOXR6PTVHRlcsNm5p'@;
put 'dVN8ZFI0bW9KUD9KbzEuQCFMNmFxbSIpciZDVHUpMWZPekh4eHtJVW4sJVQqPXlMNH1jcy9uZ00hOjpjVC5ASyRrcT5DKDssWHRKO2JWVmBGUj8jeE1PeSh0W2s7aXF6TXZeKHddKXE8W0VpMXtXcC5jaXQ+QFBpMXZFUmE5YGlCZGovSzhhMzthcz11dl54PHdzMHMmQExgMm9iTix2RjFkazQv'@;
put 'fFAyJUB+NHdDWS4+JX1INURDcSJIVVEzPGh+eUMwbmNCdXBQVERhTEk+fEUjNUZTaWNRSSojQyFfe2wlW3JUcyRWQDI7IjUyRDk1MF9BJHR5Omd8MntsOj5JWkF1eDc3QkohPk9PSWxYZ0x5cE5kZXddJT5wN2Z+TSslNlo0XzVmSHxIRl9rOFhyJDhhLzBweD4vQWV0IThDPDQzMSRhQF10bCRU'@;
put 'Wi9SXVolWWYxb0ZgXU5hITYsO0ovbUJHa1QrK2UxOV5zU3NbKE5edDIpTEhRRS40RWZnPX47ZGZsNzZPdnZ+ciZNKC5lZlR6RFY2KFtxaHElTjpzN0kwRSMuKWxiam4vOjNPbiQraCRmIl1TPS90Vjx2Y1lvK0BARzddcV98Zn44fT5AUm9tYlcoUEN8RF94MlRyMCl0KEFAbi5HbCYrbTcoVExd'@;
put 'anJiOE5WMS80aEBURGhTQHk3e1IrdktFI1Q3VE9ocHxNO1oqJjZEKmMwODRTSCM3VFFWUn15LjBMeyldQUt8PnlUcmJmZjwlTWVhfTEyXilOVElZOzcvcEpNNilzQGRVO1pkVHQ/WnVGQDgoUyRyeSUvRUx8PUl2M0RFJnMuYXg/JFVmV0F5I1NIN1AiaEZze00vdFBCUl1sXzhIbDcuR1kjODFA'@;
put 'NndpUzNlcjdoOzU6bFszPzgxXWs7MXx4bU9FRUxiaXc+WUowajxpNDFNKkNXZjMxZygmY2NHPih6WWpzKj9XJikzInxmaGhRKzU2cTw4aH1ndkgyaSg4PSklVGQuYiVqPW5+W0xbYk8wIyo+d2tQcnZ1eSRtdlJSVi5fMkt3K0FYM3U4SVhwe3RlR2p0amhgOlcrREN6JDdEd101PWIqRy9VYnB+'@;
put 'KzI/PnY4R2NuXlsmanlvd3ZfOFlLcklMc3NCcSxka2I6WT9QbyosV0dsWHg8Y0tSVW1OXUI/X3dUK1tBRjNSZEFTQHVjcm46NSQwKDRLV3loPzB6KChNbWQ4Y0xQRSRUeklFWWksS0tpbDc6RGdJV1t+RDk8ckVqJSg+dE5PWUN6dE96Y1dCYSpCU1k7TGpmKT5ORzpOLjtxW2ohPEZvUUo2SkV0'@;
put 'IXo4VjRLTExyTmlia0RRb2ZVd2R+OkxkIl9VYkY6Y1l8fCYiZyFzXkY2KnhWTlZfJVcmT2BvQXcyeVFpTiVpYmlCbmRER3lANm9BNEx+aDIvLmN6RSlKflgrQGlTRTp4IktKYW19JUZ9L3Q8JGE2RmheYDpKWSVCK3lsSzZoYnhQN1RZXkd4RUkmK3EmN09kJWB6WEJVP35iRkhkT0h1USZQVlo2'@;
put 'YldRcyljRStjWmBqTEFRV09YfHFbKGVzT2kwPmkoLmFDZncsMSZyeEVMUCg6PlU3fXAzQXN3Ujl9VSpjMnU/OTJAKEdpREk/Ol4mQU44fUxvZkZMaEAsSjBoY2w9fVc7UXg9eF8kTGQ+Q199QHJJOFk5dGU1S31aIytTZk5ZcTEsd0h3Mz9le0gmWS9fRkgmdm59XjB6dH45cjN8RVtbZ0V8fks7'@;
put 'XTpjI1Y3IWZyIX1ielROVHwmbmExfWR2cyJ6ZmlIbj5fZzcuZ1VTSGVaazQxNHg8ZElqMGc8cj9dOHAwakNCJTIkblFbXTh2biFGL3tVT2d4OnVsO3FMPDFmQWtbZFdtZFcvdlFXQVRqbXwhL21ARnM8KXVVQ1drbSV4UiRCOSpubnBZKE5tbnxMUHteSCQpUXYlOlR3VXBDTz1bViowXztGInhP'@;
put 'Z1J1WmdnUiJtVk8/PWlJaUpadUgldVAzKSRLIkMpOjx6JmQpeCxCaFsvVkk7X3FMUGZDTDF1UEosZGwudmV4RlBEYTA0KEg4WUo1dnNFLnpuMzY0ez5aIyx3cktbIyptOntUZjJAUE1iX2NMV2BoOXVXIVYwMTBPY1M6b2FZfT1+OUtGLmg7THJlSWJ+NFpPR0ZnajlHRS84KCJ9ZmZ7X1lmLlku'@;
put 'SD9iU0tQZ113UUh8Z0Rfc0MwKjVNKTBQakZXOjcxZF5OYGhwakkvJGwzfTpWSVUmMFdfOC50NHhfeEZUKjtXMEQpVXMwXiFUemQqUnQpSUVoRlpQNlRjYU9KQSR3RSJFUjNxQ3M3NUFVWEQmW15eKWNdVHcyWmZuISVtOytuIzJRfjBdLm5VcH1bPn5iM0VWdGJ8bSFwPC9CK2EwM0MqSSU7dC4v'@;
put 'ITlSK35IOFVXJjZpbTImdz91PCtMbih8IU14UnUoITpVX0gwPXJeIT42dThybUpeOVgySj1OWmtdXUYxLEFvcmowSnJMfn5vXW1PVWV1VHJdajYuYjt1UTFBa28oc3JNelgzQk8vPTpefVFlTlhnPzNaTlMpbipvPWpUMThuQlY0VzhEU2l9VUppNCx4cSowdlJzbzpUPSUyPUs9MDhLNXZhPyN4'@;
put 'PGRsZFIsLix5SEdtcVsyMlg8IiY2WHUzW01oNWwqPGVtcTRsP1BGUnkmaS9hPytldFlDOHdOSm9lYS4pI3N+N3hXend8djYhJSpVSFpTJTlaSD40cTUwWENEZ3tqMnZHYn5nZj5tVFFZZVoyVCFqOHxkSWRfUXM2fEI7QzlhPitdJjN4N3hZVVFOPjNoc2RUUyZFWV5adDlofUhCQiNnUmQjQ1Q6'@;
put 'aSEhInxTS0J2QSNWeXI4KFk+dVsuRk99LC5sYCg6Knd2OGo6P2RHcWcwWj90JHUxYmRmMTdIPFs0Wyw2JX05VFFRVTc5PURNW344ey9hbTw2PkIvU3J6ZURfISVeRzhjTCNoWjtBdXF8Jm1JbipGPFRfL3ZCJC4xO0x2b09rYT4+bTpMR2E8Tmd4emR9aEh2fGtCYUNDKSE+bltDT3lLaERhbCVO'@;
put 'RzREM1dCeyVyPFFGfGhQVFtHRSVQe1hwdXtgVVd3LH1MNXZDQlslZjxNRTtiRDY2VUlGdHdOTHVFai9gPnwqMjhFP0J0IXdDNl9hWGwyMUVAeE9EPFhwI0h0QHJpWF1DMFBecVYjPXBDKGFPKnNHZ0BSIkNsSnlqbEFhRV5KezcpRTZKPTdXLGs/NCxRQXtJdmtnUjoqZ11CTl8pWiMyUWRkY2Nl'@;
put 'RCFtel9yTyYpUzJnbHliTkdKRCssbXZNOjFQYXlzO2swL3J3YFskcC9NUGRlPil5IkE/NW9wMDxjakNsY3o7YUhfNyh+aS9mNEE2NT9FNls8Sy5OTS96fk9UTlBNQWU8eS9daH5dZFEoMm9ZLFJ0OzdoIS4mUGU+fjNeWTBCInpPZCFEbGFWdkZXRzZoYHJnY2sjLGFnbWx8ciNfKXBUPCNVR1hG'@;
put 'ZDgpMFRGPV9eMmRjR1JoSTdBNGQlT3d7UklQcSZLTTUiOFF2KmtrSkYoZGJqQE5aQXE6PyhEZCVeITQobHZ7OG95YUhwSl5WMDMwKT01YiVaTmYzRm0rPXJnOGZzXzZxPzB9bWxtVWtBV01Nc0t9aEJkKV51fEopfFBUNVp2WVZ7Zm5JIV07NnReXXU5eXpvWFFINFFfbHY4US5LMyp3QztkME5a'@;
put 'WkdQJiRuTVg4Zz91eH01UzwsLzEkYj5RNDJMd2lwaz0sMUBwOmIvciVzZyoxPT4zenQpYHBpXXJNO1p0KkE+YUsySWJZVSQpSHAlRCprL3dNZ0lrcHxsNWV8cFk5QzJXZH0xc3w2OiNlO3lHVkxdT2F1VV9nazkidnNLfEt4Y2t+OGtYKnxhckFwNmBhb2slbzNOWno9dWhUY0A9NjkuKkg2W01U'@;
put 'LzYiZm46eUhOUTZTUC9KX3trWF1QbH4mbUowe3EpWGA8YX4xIkB+dTxIWGQ8YzdXVl5LIS8vQVs8LGIqMmJqczd0I1NVdmxqO1N4TVt0QmJSKFo9ZHFyXUJqTzw7X1kvT0IuQCFWQFkqKDFZVio8VHA6JSlBcDQ7NW4mUX17fDNPemcmUFMqJGZGI0RRcSNmdUd3STk1OGVuRERPbG9mYXB4d0B+'@;
put 'JTgvJHkvLnphY2VxdVpXXWVIVlA7QndJOCFyL1tzZitpMW06fTtSYF5AcUBANV4lbiUkRVckZ3pFKnBJQmtnV1Y5WXY1Rl9qdlQ+dWV9Qk9WT0g0VFZNTG9hTWNGJnteKUA7W3J5VH1IJHtfWGVUQjt8aW54WklHdU1eWk9LXlVjZWBaIVojS2coZnR4Vy9qb3hmP3VVRSpkPH5fbjsoIWBlJHE7'@;
put 'bzJZO1tUR081QHlsPWB6QHROeDBrSFZgPk93a0dtPz53bU5vaD4xJHd6UFh2dUxxK31gI0NgeHR9VDEmTkRjYjpSQGNPVil6elV2cUowblJUSmEwe3RlPVExYmQ5OGM3WWlBaHkmLDZ2Rl5CZUhPYDE3flQ9bH15eH5IRTc5ajpEfG9QTjJgLENXNm9oYVFrKWZjez1uXjUhcU1vJC5Ac1ZYe08k'@;
put 'Xn19ZW86JlRKMXc9VWwhUThaWHpOTFElK3ZtbGkmYnhmfnVQQ35bcVdEailsaUtmbWBIbTsia1dOaCU9PExrQnZ5Y0VyWDBueWpmMWNUWHh0Pjpga3YrWms9TC8pRSJiOlIsWEpGYyYhVik3VWtLW3YiMiIvUVslYGVJTCs2cVhNY2paJmYuS3o9VFdQSThXPEpvWU8mXS81THlVbGU1YSo2Wywk'@;
put 'JXU5fFBaZkxURGwiLl80TH1gIlYmZ1tmXko/cVhZNU00V1E3bGlnd25ray85WmVffm9pRVByQUVSb2hsJG9Uc2RRNWt5ZDZ1OmhhdE5mcipOT0xuVSM4dyMhZS9QakNKNiUjX2RbNzNrZmVGLy5qJXxLaWZLMlt2VXd6SXFocEN2XSZlJFMrNWcxX2NOYnZXUmY1PDQqazVCMV5WTzBHcnMkK0x3'@;
put 'SDhIQChdV3U1QUZWdDJuX09ATEwpSUlNWVI+WXhaayVMRSs0K3crZUxsXTxdRUNsNnRDK0ZeSyZEXkMlaygoSWQyQmFGUUg+ZUtBNDRWSntMO1Z0XSRDYlNqP0lkO3B4dD9WXjNaOSZCO1MvI3RsIjVlcEM0V2pSVlZFVk5ueFMhYyNldSgmfigpWCpedVZUUWA0KlNnQ205LzFHLkNbRC5fY3Vz'@;
put 'dEYheiFRImpMTTE0PWhuTDNtRVROUSJJZE9pN0U3aiJ5TVpebzReWDpvMztNVlRLWkBbQGAhb2RfPWEkJXB+WipibD9hUmd8UC8vP0ErMV9+KXFqOXtkY0UxJG9nPl53M0kkMzU0cylrc1dqVkBqVSJvNismaChxJCh+cV5TM3RXNzcwTXprNHUofFF6TlNCNz5ANDszdGZFV2JrW2hHcDVlZCpX'@;
put 'dWw1QDVDe0ZENjU+fDdodWg/Mjgydy5He2UmcEJBJn1rOGJDMWQ/bXppUj81WDFAMGtMY1lVQDMrbVZ2VjQ4P0NdcV9KWXc1eUFwR1ExMywlNVpNXl9vNSp5ZSFxPHA/ZlVBaHFETEVXTn4+NUIleXpwSklRPGJ5M2VyIWZaP1J4RTVJN158c0UkIU90WHZuY2JoJWw3Z2x1OGFiYnEkK3Q1V0BC'@;
put 'dzxnYGJtJDY5UEBOPjc0U2RQTGRyRXB4RkZSTk10PUZaR2NxUkYjflsrTltHRUcoeTwkTWlvcnxrQl4rV15lPjtRcCNQV205cE9tMkFGaVZ7YzA7Xj18VDVGOC8zInV+Mmh0Y0tTKmEySUNXVERxL117VV8yOndmKmwlJXZsKyFjO1hrTjA3WjMpYHo+T0J2KzZ5cFdZU2dAUjxVKGhQWTk/Zixt'@;
put 'S3dUWiROfTF0VVFrMGh3KGpgeCtwKWc+ajlfajhvWlNTfVU+YkpMR2Q5SnBJemFwOHd5YlEpWWxbVTddJCIoVjtYN2JnQ2dKc29qbWIoSDNmU3p+ZDZyfEc0JDorfU8yPjNpdjFzeiNRQFtlJkkpQ1ZXK1glL2MkO2dfI11VYUExeyF+fUdOczVIP3QyNHtqVyZLYngzWHhYR196X3lRKS4zfDFe'@;
put 'TDNHIWRmS1p0WVhnS1JJV2lFIjxhVHc/RVppfEJHTD54fGxEeFVIajtQWltwUzVeJWg+fisvcHdkSXplbXE9WDVvWTgkO3NHOnM6ang5TkEhdD5mT3Jda05Ba3EyeGdFKnBSU0xRcz1KaTR7UylbJF8zOjkyd2JWZGJ1SUJmO2wmNHciZ2tjPU5QbC4qTCZ7Un1xOSlPRigkZ01xdWsrWCVAcEJU'@;
put 'djR8NCxZaUEwRTc0RCt4SFNWeE1iUSQyYXdsQUokZilva0BndDUxcTY/bkBMcit2UXVlTUNsTVQpL11mWHhGVEtDQ1F1eVFdQkEqcEVrLDRHW0JyR0JhMjw0UWc5JElTWGlAM2RaRGBhanJuTVBvc18/VVlFP0dPdWhCJFozaDo+RUd8OS99QGl+a3Y0eGQiUyk+anwidXBzSWIzbnpiNjZ2TD09'@;
put 'fjh8WXtoZUlRPkI7b0J2OEg3KkR8RDxBTWBXdnA8d3A2IT5WTjJBIUZOSWtbbDBSWVgzLnEpTitPeiVNLG8saD1ycXIiY3RkNkZBLiFwfndgeXg2Uk12dENLMXVLVE0oZ3wyan0vMltqRW8wV2ImaXZ3d0dLMD8mWWIvPCw4cXNsaD5GcTBPcyNEWEYxMjM9OCkzdkYyQk5fQyJpUUVwdmt2PE0h'@;
put 'ZUxgTis3WntpPFE8PGgoMChSSF1dNSZ4Mi4hUzY/ZiFQWlouTmQ4U3Q4PHd6JFMkSiI2amp8bl81NVNxZiZ6LloifE9ZdVdDTnYjVj1mPWl5JkFlKTZoek5mSXRfcix2aipSK21HIlpPQCZwfWJDVUZFLn5iX0piKjRjd0JzeXNwbih8WXtmfjx+MisoeT9MJmRMV0VeVkh2NS5zb0x1XWtDX0tM'@;
put 'RXJjRW1fSkV7WSJOZnE5Z3o+SE8xfWQ2WjIhdUU0SiI4U1pRQGtOZ2JWfVZoRGImSnkmTmU9OFkqWEghYHoxVmdAU3Q7VV57QFlUZHo4bXsmdzs3SXJpcGB3NnQ0RyxbR0Blfiw/PEpZISJMZUNxbExgRXNvTGltRjUqWVlpV1cmaD9OImk5I2hWOHZFaktNTkJUSFVwUEYkJXB8XXQlaW8pTjk4'@;
put 'V1NlWi9dNjVWKEJYaElUJldnfD5QQHJTZGxmLFVpJnRHIlU7Pm1IWEghN2Q0fV04bWNFcVgmSn5YSTM8NktUfFE4KkB5Y0d5ISJPRUcrS0psRnhHRXk4Km5PXiZmSlckZks9UUs8O09ST1A0fF84NCRrMGBRJEZLNVNfLCIrRjxOI1JIZ15vXjExZjUpQXo1QSwzbCRgRlQ+fDEseV1+RywsIjI9'@;
put 'UXdnbTM7YiRnejJrOld9PmMpWV58UmdGVy89I31IXnUpMV98W187VntpOCNvaXdQSiNRRC54K2sxUllYQVFvSlFLUixmQVVQaHc4VGxDTkNDSVRMeVRlTm5lK3skIzw6dSV1RlJ6dnc0PXhEUH1sXVBwW0RpbykwXXgkczU+cjZVaCJsJChwbHZTcm5OMHkyZXdAJjk8OChxLitzeFZjcVddOzVG'@;
put 'PyFJc3htOSRsRDA+QXBORGg3SGwoSlR1e0JTRmNCVTZxTSZAL3ZiUUpkTDJ5VWEqdyxjK1h4akxzMTIlZltqNlFaY3t1fVU1YjFAdUd1Rz9hTXtLQngwUnwuKH1KP3Y6UTBfdjB4I2Q0WHRoYG5ac2kyPStVVH1NSz1PIWw/WFgyX2ptMiJsYERGalgjQVBeIyMlMilAVGduYU1+ciZPVG17c3tg'@;
put 'Qy5aYEZMNT42R1RvNT5bODRTV1pxMy4qI0s1QmFfRFdoYVBbbVhSW11zLjVNcFNKZ1pKUlRRRCFPMzE8ZUs8eD9jI2RjZ0R7bnUoay5xaCNwL2UsVT82Qy8hdWUkdXIhcUZ1YUNneHUqbXFqc2tSI0c1bnViYEl2QD1eZzNqQS9DfSkjMUFNb1czTTFYcmRSY0U6NiJIWnVZJmxAWXxaXWNdbW5q'@;
put 'L2BMIUhGMmI6bDk+XiFBSXMzYm0yVD5+Lilbal9MYVUhOlQ0cSltRjZJeWdET088SVF3XWdOcXxtMWtpVn1mL202PzBYczI8e1gsdGNyYW1YJDFqK3FIajhHJDdRUkZIQzFyQVBjRjI1WXhKNF1vcE9HbDx8JkgxUXNoRSloUWh2Qk07MX1oZWBhQzg6SDRAcClhOWgvUiYhRndII11KJSYrckVS'@;
put 'V1F9LClyP0A0Y3x6fng0NGohJEhkWXpyeW5EM3FMWj5jPWU5OGhoQHBIWGZBNS9ucFpZcWIqLlgodFpXaGF0SyFVfjR3JmNxNlNreSIlNTZ3M31zc3VfamE4eSt5OUZmPzBKTTdnLzJNfENeWkVMeE4sNE02SCttVFt1PE9QPzssLmhBXmJ0MFZdZiwrYyNFdiJRQSwrWjlefFc2aD0vaD0+fmRE'@;
put 'ZnU2SDVDPDdWfT9TcztrV3w/cDYjX0dIdi5PVi96SSgoNDRKYmo9YihlRVliUSlPbzBKSCM3MUoxenVqVF5+UW9LVDB2NClIKU9TQjtldnVVe0BkVSNTMzloam56Uz80YEsoWyY7N2lnQn0qaHkodHFHMnxeMHB6bUZ0eWFSanFiI3ZqVVcwRktBdWNzTmxNN2loK1g0JHNdJnAsMXMuSmEzLGpm'@;
put 'Rm0/ZzdBTUkiYjUzekZrI1BVdTpxaiNuIjBCRERpbVdLdEpNOz5jcVk6L0JAWSJpVCtpSHZdL31XfTA4UVt4c01FbFM7eW0ie1JgJFQ+QiVCJGtzMUhneC8/dTxlN1lFWVZzYEsiaFVRWy9HOCZnPGY5bl87MXhFIzUoblNvWns2Qmp1ckVtU0NMImgxSFNWWjpXKm59QzF8NHJyWCZxSThvbXpj'@;
put 'Kj1Ea1pufF5sNVVTOD50Ok59fnQ4VltlfVMoPHZ6LC5GYSJbLH1aTkU/JTlle2wlI3N5VXxyenJ8L3ZLaHV5Ojl3JlhxSjpbVns9QXJkLmt5ZyEuY2NaSmhpU35sPT1lIXxeczhEY1hkQ1VPYEwrL3hnWC9wMns6b21xUV5ZQ3cwMD9ScmE/IzQ+QHgwNDBqVmk0MTI1PHdKaVdUX3FYI01wI3FS'@;
put 'WGhpfmVjOEkrUiF9X0YoWVZzTF1MUSN+ZnxFdSttM111KSJiMCorMm1SQzYqNSQwVmtqVD1tX0RQLD5VcFdKW1hNKiU+aUlNN08jYzZePGwjcV8wXz9tUjBlIj5MeSZyeltTL0xGbFtiQDgpK3dHWCtpYClrO2VnP0JBOGdNQ2xQXnhtbkU5OjxWZCU0Lz8wQH5HVm1Bdzo0bWczRDJuU2dpZD8m'@;
put 'PmRkYUIlcyp+TUxCMEZAVnBSQ19IZSVPZ0Mod1FeaCFHR0BJPUNYX1hFKlNMcnVWMkVXRSlCcFlsRWNIMVdTP2lPUzU/TXR9dmh7ZnxkKF9GSCslOktUT2R3WjskKzQrXlpYeChqTFR6bER1P21RcV9WUzRIMyh+OXFXOnNpfGZKPFVbN0hmXjdVQHJjRytaaUQyV04+KXhVaGt9TGZiTDFvLHZa'@;
put 'UCE/YClIPzRAP0hfUTRiVzdZZDg0ZmQxYUxGKT5yN0creE1hVT99Q1p5Q3AmdEFPXTBhJXQqSylfaFMsMyxmPlM7RntydjtHc0p5bkg2eUx2eEFbdTJzSmEjeEtLR1NIZVZOWXlgeHRKZ1FEMEppZjcpY1dgRnNsZzloI0lCVEw2bUVsbkx8aXVrPihfZWcpcXAhVFZaeykhdjJPcV9tYnkrX15U'@;
put 'bkdtKiEkQ252OWlVKzssdDhhcl9CKkZjUjtGK3h0TGRhfT44R0ZEdTJsZCN7Uig8Sk4sT1BkLFZ7ZiN1UGpMM1AwUy95YSg9VUU0Ols8XypZV1RXZnsiRXVSN1hlZkh4ZCpVLD09WCEyYGZld2o0R3tbMCJYeCxZSzdONT1pRmZLQn5+SFFOakxfRUJmc1BnTXg7UW9DRk1CYEhnbH1fakw+VD47'@;
put 'YHpgYGM9W0U6QEhDIipwbmxCNlhJemhHMD9Fbk5FRVFJMik5djQve0I/cWNgKzpeYl5RVyRVd3VLWlA/ZEV5Onp2S2AvazF9d204TEE3RTBQS2xtITksKnZRIkdOI314KCUmL3cjITNyOyFTWUo9Oy5CbTV1TyI9aitDZWdvUl8leWgsPHkiMWtnNzBeWk5yW2E1XlVLZWQqJEFNUjwibnNXTmld'@;
put 'a29+VjZYcT44VjFqM2Z3c3dyUyh0JHo6KXUqcWtVcWk3Jl4mPzhyd2EqQi9YaiVHcllydT5zT2wqU29xY0RBKlIkVVVPU2p5WlQhPEImYGBRJShNQEBhcGs+PF9SfU1zI248UDRRWU9CcEZOWTRTeTNiaT1qTGhuQDxeKWFDJk1dKlp7fVs8P2BoTF83MTZRMClFZFNqbyEvfHs0LktsMyZORXlm'@;
put 'Xil5YmQucChUN1lFWCl8PjR1b3x+LClMS0VJei9eWG5KWz5gNX08N0cmMW5NYkQxb1NoelR3JVRDI3FdYUA6eDg4aChTPVtfNEsoZ2cvO2JwfF9zPEMkJnl7fkdmY1AuKEduTyNWa2kpKW5fMjsqXiVZJk0jbGhpM0lxaS5TR3twUntgbkN6NDVkPywkVX55bUg2bCZMNCUkdip3YFYiblEmS04w'@;
put 'YD5XQH5MQmhmNTh3O2t3V3BQVHl3Uy5EKHh0PHEyYGVMMjAiPXxOT3IiR3xPUW9rVlAlek41cVVfXjJ3clpmZTpTJXk8Xl11TUZzdWNvU1hoUEZ4S3A7XnMwZjRYcE1VYFQlNilOPVZ1S2ApI0M1YlpTZDZkcEJiW2NlVUlHT0NQfj0jI2l3PUt6QVlXdHxhMWNAbVIhPH5XI25aPFVUZD9zOHg+'@;
put 'UFk8T1B+fl9Xdm1bRmdNLyNMKiNeb0pYJTI8RnVAMVBfUmB8MCtfMlh6ezA4cCEoQk8+WHJTVSQ6L2N6bnVwLCYkX0slIU0yV0IkKUxyfms8ZkZjPEl0Wj9PVnhsM0gjIy9scDsoaWJ2N2JXUC5fM3Y2dzZwZ2JPRXclaEQ5cDhVKDZTcDQ5diFvd0lDLiROM2VbbmNULFl4ZXtOOnhueG1FV14w'@;
put 'LElLT3MpeTN1OHMub21VVTlBLHx4QDBuJGoiYW8qQyw5XUVePFZjUDI3QWF6Nn4kO0lYbm1yP3hTbGRKSj9hOGckT2djTDFKMXdAMk9lcWdSW08qWCNBOGEsIW1PbEJ+dU9qZnxnO3ttdT5jeGV1aTFHXThGOyNVKk5VY2NkUjA4YUpPZG4wJD9xOighTUZrOFp9L2tNO3Y/XykrKV08UnpaJV87'@;
put 'ZH1qdSRCVz1JUlVCNF03WC9AOyN1NEQ0Ny86b0xFfXpwNXMhRl0kUGtjJC8+RW0iTWsmITcjQUVUdDZjRyE9K2ZnbHVhaW8kIW5GUUFAKX54aVBTdW9YOCQ7Yk1qZGsyUHAlXiNtPE84Olo2KXUpKXVPUGBiJUc9RTIqVjdGRyYpdiR7Wkh6PEU3Ry9LS00rXkUwQS5Sbz4vJm5kQTRObClseHJW'@;
put 'fCw5NjhZPkY7U01taH5qOmlpPTlMKDV2QDhZZk08IzRLdG90RVl5d3pRJDRuSUV4W3dWL1tpYyNUUkZFWlgpcF82KSNrYlJTT0ssdz1fNGsuJm5KUWFSXmFQUkIlR1Z+WyEyUkp7UGA4O0dBZDo6fmdXWDE4aiQ/UTl6YiROflB8fHFafiV0W3g/WUQ8JmcvN1cvOn17VCIzRWlzazIzaEQmX15g'@;
put 'R1RNLjV9a3tGN3UrKjA7UzlnI25OV29MWX5qJEZnVTYwdXxJI29vdl8sOXdEWFBJMnQ4fkNmcCNXTyp3IXYyJilKLmRdTExNQH40aShhfXVSQVpmRGA6T056cm44JDp+Qjk+MSkral54Zko5SzJ4TVtjZkh3LyJVNT1HRzVZTnddSlpebzIlOCpEbX1hW1NlMjhBRHU1eD10Q0RGcWNQeDcwPVI6'@;
put 'RVV6YWgiUU4/NFV3aVcyVWpxRyVAOGhnbzRMd114b1ExQlZtYjNPK2ZWUVd6N3RjVUozMHsvRGMlNygwWW5tU2cwTT9LKEQ7L2c8MFIwXSEoWXhOeDZmUXcyLjQ3Ljp9THokMlsxMmtVOnJ4ZWQ2bjFlNCZ9PURUO2FLN3JLNTB3LE5ebmZbfWBgOntDU3daMmVxMnphWC4mZXxwMjNuI2cjTHMl'@;
put 'VDUoLEd3M3dSOT1Qbjs6QHtPZDVqPFhPN0ZMW0pFdj1mV3BiRi9HTi9MV0srLElWNExWKWRJSj5ldCUmRjpuVnFQQ3RWaClgJXkjenhKfk1jM1cpdnV2dDx6YS9uRSYsRHt+W297e0hYRWQrU0lQTTt2Ikc+ZCxlMmwifEN4YSopa2siaUpSLkJrKCNlQjN2cz90VEVrWiVMYjlsdWwvcFlDL0xp'@;
put 'aVdvQ0RbfWwrcVhrTmFpKkJ5O3pXP1FKPkk6WDwjckBePC5VU0VVY0sxVjJlRzMmL3c7fHl2M152d29dVX1pZH1oOUtpK1csaFVEWTFHUHBOJUdqKypvPT1FcXFdNWZre0pacT1uUCZZckMmQEVVcDBxKXx2ZjE/S1M+PikyXzhJTSVWeChZU3Bqa2VIPWs5b2pHZiMyfHIjRUxuMUNjbTh6QX5M'@;
put 'S1t1aUxILmdpS3NXNDIwam1uaXI7dGJOYCxAKGIzO0xlZTpyLCRMeDFVSWNiQzsjPjhqSl4yUk1+ckghazcoRylfZ0I9TWMoeHJ4bEkubDE4MCguW0hPYiRoeXFNV2BAU3FPcURWfmtSenF4dW11TVdoTzwuXy8lbGRVYDFHXj1deWBSZ3d4TC44WUZMX242TlFiPlJZNSgme1VkZkR4JT1pcGMj'@;
put 'LiVhRy98LDMxLEBOP2tdR3c4RXU8XlR2VFtqSnpWUDtAb3VDZzdjb2QzXjZPNVMuWFNAaip8elhONFZLKSVVXTtMPDNoUk07bX5EfT5zZHY9dmZ7fC8zclNWN3dZY2NQMjRyMlhyU0xmSz0oeERCL0pycXFBLjk3YltITj5ELEtgbkUlPzRvW1AiXUU6KzdbTUlzQENTR3VZWmlHaVRnVWJkYmZD'@;
put 'VVg4RjI/aCorRmpaRF8lRnc6W2VVJVUpOTlBVF9HSDV1fnprWG4uNlIlfWEoTzI2YF5ORlRBd0pkTFdRdkwwUyI2eG9JZTdkWUVXbzlmPztLI3U4PncjKGFiJXArKlQ7JFpWYyhDbWs0MERrcStydWglNlYoS0xgZmRfcF1den5Dc29dN0V6XjtLREglNnlIK0ZWelsofSF3dTNMKEJLOGR+M1Ew'@;
put 'KytwRWFUL31URGhQOTJsNzM6bHN1RTZ2fDx7MV1jbzRuUD0yLFd0a291KFhVRU9xSi5RQT5QSCtaJXlQeENAc0dWJiVEL2VwUHwpTFojTzBkTCImKmd7TyFQaSZxVDRaSz1wZCg1VnJTajBhY2lQaXMkQj9ocDV1RVtGWGptazp5XygsIjhtYHsubU9bXjFqUj1oVHgjU20rL2pzez50T0YjK3RP'@;
put 'aEtuSGwlek5ZWX1rd2k7WD1Ra2RoeG5DV017aWZxWDltTnBoXTtRcSVmMlFFTDlkR3Z5eVFeSFtvQyY2PFhzUmgoLiNWeUtjcG9MRkdiKUF3RWgvaVY6fEJmcyFJQ2RbYU9qaSo0cilVa3pXNSYwNDFuUE00U147TCpaTHwpJWsqSy9tNXA7WVtgSDJdVHgmJkBQL2AkL0BOTDoiSjg2dW40enFd'@;
put 'UnclLDQoVDUzdj9Wfk1HOWhPK2xFO3ZDMXpWciQzQCFNOF9JaD83R01UUkEkXyJjTCJLajoibztFem53QDQpXUh1dztsRH0hLkgwbHdiaWpdaFQ9IjNfazBKalpoPmtqelFNQlZeKnY9USV0M3V0R3hmLlsuZXU9RSFnaj09QkxqJmg8QVYkZnIrY3YiRWlpZCRZNW96JSEmbkx2KlJYJjR0RkdI'@;
put 'Xlh8Y0FEO0ckckcpP3I5d2gvNXZHLH06WUBiTFRWfVh8TCp3Uk48b2FjQ3NOZT1yZnt7Und4MDxUSy59cmZbeWRaN25Mbyt1by5hN3Y8JDNWRzFhMjhWOGwzZ3FWOVc0QE08QDY3JXgjMHpKPV4pSDo+WX0wMjZTW2BMNHg8Z18heFpqYHErITgjRzpeRmthVDhxQ0FOIyZ7U0ZVcUxrUFRqO1Rj'@;
put 'QHRDRmZtayRCT0NARiF4NVdZcTFwNCguQTxrUn1ANUQ+aFBTNG9mV2NDR2Y3Q08yMHpqd1lmaUpERTJBflAmWEZfOUhSISQyVnY3Z1RqVT80dWcrJjRkZ2FzcSszezp5bG54b0xIcituaSk/YjkhOU0me0Y/cVQlXUdMLDRecmcrJUtfOE9LP1NON31uOElCSjxdcC9tZm09RFMxLjtoaDZTKlg0'@;
put 'anxCSkUqOTVwdytoQFNwaiV7TyttLHxGKX1SNVhjOHtYcD84PnM8VzJbSlREImoyJipGMU90KGU/dTZWZGE1RWc7eE05ZkgjNzdpdEcsLk0uYV1QcktsbHRmSjBHNTBrQCwzNnYyPi9dTzFHanFWYShvanxwNFsldmFSTDtoZD1iOWwvRVJuViZeaHxMTzRQbzZMMHEoMjMrWUJDbV1ZZCh2WGcq'@;
put 'KD1kaVlzO09dcCFoWj97RmdFK04lRHRMbipNfHAjQCh4JXZVRyh6c05fI3pQaDpycVlhOVtsQVdZND9xdVs5UT4kb3o4XmpaIU9pdXFDbEAuW3JMPlkrXjRsVk5rS055Yz1gb3VJK34/RzptWkRJZn1IblhzXTNVWFppR34pTj5PRSR8VDxjLktedUlBRSFyeDJINyVtVkE8W3YpRFNLXXI8c2Jv'@;
put 'W1BJUj4pL1tBeF4mSmBRb2ZkZDNWQ011b1YhT0VHSClAdT0obiVJYm51byU6KihrNlgzZ3FoSmxiOTBMQjlOMktCMHozfW8wfC9ad2JqPGd5YztfVik0dEFTVkRlKXVvMjdqMV45em9PeyFFWV4ybzN5K3FOfldpUSt+RSx+akRDRHp+MSsoLmMvPGtkRW92JkIoM3tUY3l0ZyhPeCVeUS9rNGVq'@;
put 'L0BoeXZiTDkwfmkmJXVAYCN3TTFuP2tCRCglQSM+QHtGaGdXITk8JlEuTlNBO2M5Vzd3KG5BZzY/flpJKnlBX3w1VW1HUVY1JHQ0YGhaPUp0OTluRSRuKUdPJk4qfTVhKlBlfHQ3PXFVRS5fW1B+Pj5oXVE0fFlrTTtDbCQkRH5uKThxYGUpUmBsRXlHS1hodHU6MkA+Q116TVg/LC9MRH5ad301'@;
put 'YEpwMV5FSTlgajQzUWIpOWljIXNEPGExV1g8ViVKUGxpPCRdcixaJXpObjV6P0B2VT9TQi9tY2p7aXZvPnJZVjU2QUBrRFJfIWZNS21APztyanZOOis1VHlpKjJnMiVRSUpOP1hgaHJTN2hbWWpwZDE8LnBOZmBJWztqZHI2NkQrUGpeajkqVGhTPD1bWWA4SlJ+e3s/cz9vQ3xPQ3QhNStZP0BW'@;
put 'WEVxW0lsaDdDK3J9N1FKMSpvPF1ZTkhfcHJFXS4hRk9pfnpkWX1VYiRTSWVOOTFedW5ZIn0vVyRZbillK0pwQDU6KUAvJktzYiJrdj5MNXl0ZVVKYFJKMkU6T1hsQT9de0IoXnxLamg5eDg/NFIxJWI2fVtuVDhjY3xMQWNGVDd3THZRYkF1WnZjTmVoXnN8PVd0UDorSzcuaWVhcHd2LEdlXUY3'@;
put 'aT5pKlZ2JWRCQV0kcnFvR1gkPVElKDZePV5LTVJpeTJISTZyZztOek9qXU5WbHM9PH0mc3oyYUVfQXtbbl07eTpqMVFRRTNIOk5SPXM0aG4zcXpHVzwvPWFyR3ZoUCxJVFRbNyFRc1daTkErXjVlPjJ7bTdvQ29VSVJGal1pZno2b0hyWlQxYVB1Nyt1LDVRPiZnJXFOZTd3PE4mbnViNDJ8REVO'@;
put 'Q01TPTRVP1c9PWpaQmwwMXdzcS41Kn1qeklBQlIoUiQ/YGF1WiF5WTJDb05GY3V5I3RxV2Z8UjMqTSNDUUspekxlaDNQPlhfcG4lJH5qTk01c2ZDZSpgX1E/ck0jPEtUeT98ODZhQ2B1ZVIqMVQzNUZkUXg/MT96XklWUj8vc31RPkhsfi54WGkmW19UISRYRSZESVR0ZjtiPkBzPWpLRCRwIWFk'@;
put 'VS9VIVEpN2EqWTRnVn46TS8qUk9DLk0oJF5VbGw9bUJ0KzEoVXRTQ084JVE2cklucVFleldKbGxpeyo0b2BDRVtJIlN2OF9LdTlGS2dqaSVtPHI0MUNDYFFfQm56c10+PThwRV1ROlgqcFpSRSthQ2J5Kjc+QlIhMDtXaGVfcmt8SjFJbXMyImVOQjVbKzlKXipHbC9Edl1oRHtDdmckMXliYD94'@;
put 'V3o9YDVvaH1NdVEweDU0MD9KYTdFe01ANjhgMjZpV1U4fUVSdUVoekgsMyR0O2txJH15P0BSWyNnTStkQyliMy9WW1l9bF1iS3BCeCtlJURbQT4qNGBKaU9LdX5DZmE0NDleUF0pKno1cHk7Oz8qWlo6YE8pUl9ee1IsZ0tpR11CZ0dTdSxSZUloMyx1RGJBdmZUV0FGdU0heV9JMjRAZTU4RGos'@;
put 'UEtjZHx3O35iXTxvODNHej9qajc4eUw1Zi4pYmFDeCNgUmxnO2hINCUkbmRIRCIsUi5vPEddRiZgcEJXV00/JHtJcnVbe1tFemlKbHEsTDsobVt2c3RXMzJ2MHEobTZPVDRAM2NpKnlaLEhzbyVpSTB+bigkU3wqVjNVVW9OJEt5R2R2dXVyLzo+O006KHclcThpPFFsT29fRHBSIWxwUkUjJXcj'@;
put 'KWZ3ZkdzOkBhUGgjSk9TWGFPYXdsQ0ZaY1VOZzNiRHxWKSVvcyw8b3FoUl9ucl5NTnAsOSI1by85U3xGQ1RgNVprWVM0d3R+Qn5HY2s5RTRweV5FaH51dyg5O2V+NF5xU0hUejI3dyNyR2NsTF0uITFqLGM/fXRHQmF5M2lhfFVhRGF0NEpdcm44PGdsSC9sOmwvZGNveXsoQnhVTF5QXl1vNGI7'@;
put 'O09eNTxRNFhTODk4JiIqZjgxOVMrOzAxZDR6ajNHZWZ1ZkdQRE9xQGN2RTFmYWBUVmFzajZURF9FPXNyWiRjfllTL1hecGc+QG5XMzFLNSZZSGQ3bFdXdHFjd29GLj1pRnxfTzsrQiNIWWlAOlZ6eEMmaERwaFM3PHJ8RUVWXUxbKUNCP1M7SU82Y28uJH50bSo3VW1dX20sWEdSLF49P2dAZXpI'@;
put 'Z2hQTE1RK18mbT9IZ30yVkA8TjlaQyJOTG45aU5+d1dIQFEvNFtMbE92ZVl9U245ay9aNUVSUCZVWih4dUFWYyl3OW1DNjhtT3Ngcmw0PSMkbC8weSwzUmFMLDJkQ3c7IypFJWxyXjYiQ3JxZVRgUHgsXzoociRme3NFb0lVLEZZIT02MGs1IWslVCtpa2osQmVpO2I8SW9zQ1NQY2VfIVdYRmMu'@;
put 'OENndGRmTkI8bXJCS3FqPG54dDFoakB1OnwwPnYjNFBSVTY4STtwR2lKbCx6dG98SUJvPChnQHFtbDFmTzorcyNneCZVTGF6cX1UOWcpfSg/Xjo8W09hc2IxeXRoQHNgODxtY30pVnZwY0p2TDdCSU0qTEF8OSFxTHhNQztObXFbUXBGeT1WQj9XTlBXUUA+Y1Qifko+bEFgWGQ0eVl3MklvZm0i'@;
put 'VVdDVjk+TEorWkpxTiJdYXk9JV99TWd9cntEWkRfMz1rdlpdIzFVKSlBTyh2JXVFL1hTcWM1YS8mPCxWJV9oSX47XmVDN2NkZHlhclcsIXAubVcxPDNJO0Ahd1RmfXFLaSove31PL3Qxe2BTc1pYNzZMR1ZqcHBQajxJT2NFfW9ZaiM6PTEye0VifDZVSk9iU1A2YHpKfDNDSDd+YHtPUUddJFcq'@;
put 'Z09AMSFMVVFqS3hiU012c3lSeTxMbW1rLlZYTi41WS9zZHpDP2NvSlBNUShNYz95QkRvVlB+Xi5+eUxqMmc5eHdTNmAxbzp5fWdMSysuWDE7L2wjS1gid35QOXU3SlREaX1gZX55VSR5XT5HXSxNLjZWbElsY15QPytzc1MrWkI+TW0ieUhHeHFmLi9QN29Te01QZkclPWk9LEk3cGJPMjpUOyp7'@;
put 'LFR6U3k/WXAmXz5RfExTdjElY04wfUVtdFk7SlowdDVDR08qbGVgKHU9eilVPHBoVXB7fHMvPH1rIk8oRGldeVFfNFdwUlpEeWprVFN2KXJ8Im5FU3x7a2tuWWhPOiR8aFQzQ2lzX3xBJHp9cFZOem9aPT4uVHAkLkw0bWNLWnc2Rl0kWH1IOkdCJiVEPGdMeUUrSmZ1KUdbdkV+eHhffG03ZyMx'@;
put 'eng+SmM9NTV4ZUMrNlUsZkJ5RktsYnUrR0UhNCxVKEI5Nz5aeywiYy9CS09aPy5XQVVedXR7Uj09UjZudGw5IlIuIkdqbDxWZl5zfXRRQzMudVAmcyRULGFaL2sxc2NRJiZtZUcyX3BueWsuVkhxRmIvNHhjI2U2X21dV3k2Wi5fOyw3eWk7ezFiYll5YX1QUXpQJTQrI3JZREB9cmZzJm5ke1p6'@;
put 'a2FqOUhVe0ZmWGg0bX1bYUQySGJbck9zRC9dQDlIalpqM0d3ZVgma1pMXVpZYVB8Om4ubEFkel4ramk/Rz9kNGdaNChPd3shXVJjfSY7ZCtPP0pKMWcmemdNM11nMjZDRGVLZEFkOT9IOGhMKzgrVilqXUhqKj9udkBNZG1TQiNLZjhyVC8kVXdWSittN0UxN3o0b3Bnclp1P3lUWFllWDw0N3Uq'@;
put 'Qm57dFFAVUAmOy9jZlNCOitLVWglRUo3Om16dXlgVVdMOlQvNkx8KXUhOyp9aGNYaX5ubSU4OywuNiZoIjlpaUhVS1g7JD5OJkREa31iYiZvQEtVMC94YVI4IXNpTjsqN21OSXt0LmY+cCVVfSN1aXJrNk1HREV0Ujw1Xz5bKkUrVF9bKDsmZUIpaGZAXzwuJTlaMUpXaUplXyM/Xm5dXjBiNW0p'@;
put 'M2lzQF0kQ0Y3U1s0Kjo+by9+OUU6XXYsQ2pga0V6Okplazk+T35RVU09XzppRTw5VC82YDczRiN8bnBsdHA9ZVVnPE01YHY3Lzo1aEhFQ0xPSSgodFpHd2o/NUtlY3QqP017JnNgXUB7Yl46N3pnblRiS2UsJC8qSys0O01EI3Y9VXJfZV5jajdbb2pvcFB6QDRgLlReQEtfVFZtKigrW3x5M2gj'@;
put 'UkxERVMlJCtNU1FRb21HaTN6biRjbCFCdV9sbEtHeWRzalhFWkY8ZjJyM2Yufkw+UTI2MmBYSWphSEdSQlJmUCt5QklmUVF1TVdgNVdYZFlGKGZzdUBHKlche2ZYXl5nV19re04ySkhvaXFQPDBETUcsY3NNNkhoWTJBJWtHWEZdYlZEWmp4UF1ONV1gRz02V2Vmd3Y0eGsoQko5QnZHTSNvK0x4'@;
put 'TUpzZmsqXl1yV1hNWyNnI3JhI2hMWVVAYDxOTDNlOE1sc0dHYUEzQUZZaUAkRSQkM3x+SWRjYEJtcnVFajZRd2wqT0N2bzduOTJmOmRMcnM8Nz5bNmxdazxjSEhpRHgjPVNlez8uOVg9JChLdWBSSFFiXmwsdSFUdz02LEIzKnVzNSRleWV7cnVBJGVQIV03aVVOP142XlN0Xm0rbSQzalRHWUMi'@;
put 'WXRYOSRPb19mVXh4QV0oTmByaGJpdHsjTitgWmRxV1BCUz1sfmJaOD5wW3NBXTVqRV4qJE5wY28lOCNLeSI1VWwvPTY6QGAoQnQzVGpZWmNWemlbXk5ALz5UYSw0THE1QzR5X1cuaFVAM2N2RWF1bkg6ME9+P3EpPU1mKiYmeVlwTjYoYzZfP001XnVBfmRUO0RKK3syX0l+NlYvRiFxSzVbXlc/'@;
put 'WSNXRHg2R0koPko6ekZhPkI9RHpGYWtHM2BYWz1dP2kzXUBWeHhqQ3wxQihaO2BnYis/ISMuRC53aTlGPSRAPG5fdH1LPW0yOEdoOXlWcWlqbDEoVEdDU3VHM31TV2EmNGg/YiRbNDhfSkdNW3tFNFBjWVclWVlHSHU4KD9yKmNDJjY8YzpSTT5IY289bGNFRUVoQnxkJGYreWspRz1yKUA4YVhG'@;
put 'Q2IqMCxtJUIwbXNqejdgfV8pbkUjfF5keUN2Mj9uLHl3c0RZSiNaKSkrZSE/Y14qeSVaT1hTQFVARUBSdkNQLHI5ejZVYyNrVyRFSmlBfGZrdW5SPGQjTTpOcHUmdWduQmRhOXE+JEtpIyF7ekVdbUphOl1qLEZAITxVeFRgVlI+ZCE+ckY/cCxwfCl+cTlLL1EmWCE3dmRnOVV7QG1bSFBeLlRm'@;
put 'XVYvX11uI2NMaCg+Rkt5SHJ7NSRlVldFY31NdndoYygzVWl4V1BkUXVNSVAzPF5TL0lyOFQxRHBAV1JjPkEvNk1MIjB+ZmMwV1hye09ffUtsWEFuUmtgJmc7RkRXXn15NkVpeyhMc2FVKm9STE5jdUo2S0BlfU5HdFNEPXZgNTVKajZAc3NfZCZ8K3V4RVVUNl5rXyklXjw6VEx0fCtmJmY/YXJS'@;
put 'dT5yNHElJDdxcUFPOm4pJnlEPUVgYUxVRWlSPypXQzcmTzAuUWAqSjImcEcydVYycHRIPEdLW3E5JDksViEyT1lYOlJHZHdpMlFwcX5POk9Zb2JRWSlMenMvQFYmdlh8cl4iVzB+PzpaL2VdaTZHPV13aGoyJlF9IUxHTUtuSEhkR0ptYy8zejFZZG0pW0hrRiE8WWhZVTR7bnhIQTgsYW1SKC95'@;
put 'Vm0vWyxyPSh3eERiRyVqbTdLfVpoeFRrbGp7R29EW314Tj5SY25IQHs+RVtpRmBlb05weV0rI2tFKnghJjhoOCJdO0xfKFd9bjhjbiJMSiF+ISU6Skk7X0Y5e1hsUlo/OU9QZzEuVi84UjclXV17bSVDLzo5In1FNSsxNGt5KGE5b0JhLHgje14kcE9ZfT0mQzgmWEQzW2FjZ3ZGI0pPZHFbbzkv'@;
put 'cU1KcU17T1tgaFRbX1NiNzkuWCpkPTckSDF8JDVBN3dEVzlvSjJ9JiJBfiEmVChHNiF+NTVFX0RNZExGVVVGSz8qRkUsIURZVDgwTiFwOGdLW3laQTM2SSxXMVdKIi5bSGk8YGNlZ2ZRK1BGVWBqOHViUWh6TDRJKUh8PjheanNFfWlgWismOmQ4fWFWPH53XWlraj5oLGxbTTJKX1R1Ons6fGt7'@;
put 'dzpVMXNEWTRrYjFyNUZzLmJCbiJXU254Okg9SEhmUzcqKTVtJlBTMigvX0U2XS9BaTFnMG51LEtsaF1DKXBQMk5rSFFkbTR5NG5UNTwwbz1rZjcpJVZvMjphZD5NY0x1Qz94W35nSCtxM3ooVSw1UXclVmN7YFhuU3hfSjRTLzxtOmo/JkVgem83X1lFWUE1Vk1vNmJMUCM6N2kmaXx+RjhVZE5O'@;
put 'YDJqdjMkW0lwKzleQFRWZylPWmBnIz9yMGNrZ05ne304Rj44bnMsTFcpWDl0PXQ+SWdINE1DQk1+YF52aUJUMTJNSWlXflBkUFVYVFNLYGV0Ly9oJWdNS0kuNnROQzs/VGVbTTYiUXJzY2IqInVabmIhQ1pOUzE6NGJjZXhZSS9TRHBgOUZVWTdFZ0B7dk1QXUpibDErT2B9P2F1NjwqfnFLWUBC'@;
put 'fDIhJnMoakhOfX1VSn59UHUiOGArfWY9PTBQcWYsQnhoYUxgcn5GUks+KGglZ2tlKTJaX11EZDhzfW5IeEJAQX0hWkxXOHMoUWdGZ2RbMj43ZHpsfTlMXkpeYW4xZjM1KXlmZHBRVFt4bFVNUkA3JD9FWWs8NSlnUl12R1BlJWI/MVkuQCFETFJoPWlZUyh4QS41Jm4ocixaZnRKYyJJe0ZuQXE0'@;
put 'YXd7fkhvPnVpP2NBd2BTT2lJXm5JdHA7PCo9MDYsW3VZP1ghaHFfQVMjaGRiPzQ3U2cqb3Q1a0I1ezNdMmRxJkh6Zj5TbFApSFJkZ0h2cmcpYF87UFFwdVs2dWJmUDJ5fihkKz9kYUloY2JWZDU+YUxvPmtDYz4xME46O0pEdDo9IVA3Q0QqYX1aJn1sXlNTT15bQEFZOWl2ayohZXcydFJIQlRv'@;
put 'SFpfLC5TTHYuaHBQVVExTlovK3M6XVZvSF0vT1BjNlU+YzQ0NTs1WGh4dF5oSnJCemR7Xl8vSVdpaXhwaTUjKToiLjxzaUZjIltWTHEhc2Fwe0NbX0d1RUlOIzsmeHEufjpLZiRGbT1dai8hPXcrQGJsRls5amh9OWNSZUVNSXg8SDh4XyxiO04mRCo+XTs0RCRJRVtZaEEvJXlqNTcySXBDL25y'@;
put 'JXZ8cSZTKFp7NUp7TEtPJUs1Njx8fUJJI0pgZy9hcVZddCxEKCojL2pVVlRsOjVTb09POGkiMFJUcjU8cm5XSSxtQ0IsKnIxLzgoc3s2OyxwOkowMlB9NFkwMz11Zn13PGpBYi9pbXREdG90MWo5Ny93XT9CT0RORCVzb1VpZWVxSENTdSZYQHYyZ1FRL3ReYTByIVlaRj8uQkZ0dGdxZnZgfjA3'@;
put 'R3N+IkdlUlJRcCg5R1diQztDNGUsazNNVmYlQmN2MEtYNks0VzE1LGYzKT9ZRzNvK3RSZjxIdi5IUmheeHB6OGNTXjxFOCZ3N1Q8JDd7WTcsUEM/M2d8YSZ3K1NvWkRAV2k6RF5AKH1qOjp5L0RKanhaaSVoITkreiZ0OFdpa1t8ZXE/bi5GPT5MLH5iNnVwQXg5RXFHPyN4LkxIW0k2fXRkYS5J'@;
put 'RHxLeUI7V0lWMV0kVGwiI01VeiRKTzUzIlU5OV56YjNESmxAQn09QyF8PU8mISpjTVAmYzkmRnFLc3xHJkVFW0NGb2VJL2Q2Ni5Pa2s/bUteJX43ZGB5W3VTMk9KTSN3QEY5cztqUCxwP2AlO1ttYCxrL2ZkbCk8cSk+bmpvTEpFSnozQi4ydHlKUztLQDJPTkZzaTB9JH05Pm9BT1hiVDduKW17'@;
put 'RDNSI3dqJHRjODJXQGxXaGJRfHZ1cSt1az52NmcjKzk4LHJaTDkwS3RvKylGdD1DOilZI1hjSVhUUGpONz1bTzhYTGYlUTgqY2o5TGRDOVFdMUssdCsiVzpaW0kiYHRKMEM4K1NeTT89eUNkc1lzYCJJO2NKdXh6IS9tSk04Q2RCUW8jJXZDUE1NO0lMdUg9d0ReUD9RK29ocSRfKzxMfih+OWNH'@;
put 'clIpSiFqM146PDlScXBmLnt+ZjphZ040QnRZXWpNcGU0WG1FYU0uc1hoTVhJUys+QVcuR09sQmxsSFNiOX5XYzFQfUV9TVphKXY2ZzFYW1tEKiZPRUFISCNgck5DKV1uYjhlRz0hImc8PC9odDhILDI7b0pRN0k1V3RNPVlqa1JjaD5+LDdadiVedigxI3cwR09eWVFwfGRVIlhDSnpQOjQqYzg2'@;
put 'c1dJNkprYyZodDAxM0JiPWpNRTszVyJMbH1sVGs/aWJ3elM2TX1ffEV+KEg4bCQldEI7Nm18YT1AMVZART0yeXZGUCNCLD4lUz9sVTRlQjhxNlN1TyY6QTF9PFI/VTB6bU1EM0did113Q10rM1Q6bHlkOW00JnB2ZkA5SWxnekdiJCVYNl0iQjkwQ1RJWEpBd3F+NHJJN2dFW2oiVlAsYlszV0Mi'@;
put 'XlczKTxoZDwzbnpbV3AxfmVgY3QrbnghbXJTOmh5NjQ4SCMiJDUyMDlvVz44Kmg0UEI4Nj9Oe0MiQ2RocHlYSV09MVBqdEc5YUMkK09qOUhUM2lnZXhqSy85c2VhKnhLKilAOV1OejR5RytnNEl1SSVdQTFFYUBNcCtQLnpdMk52KE9rfEQvbWZNM1ojZHxLJigyay5oVDw8LCFJPyRzd1RWUTpt'@;
put 'JmthJmtrZ3JMU3FxNDB7ckVffXsjPSl5am91UmlRPzg9VWwqey5jYy5CfSFGflh+dzg8XyhCX3BbTS8rSDQ2Wnp4UkQxdWJdbEdebWVXVSR6WkF8LmBtdV4raHZvSVZFUHxPKlpeKD9pJGQqKDh1QFl1Rm1FYlh8bC82XzJCUF5vbmhaQjV5PHtBSTpubjE7TyU/SjswMDRzYDxMJjwoMTFNXlNQ'@;
put 'LzFpZUE/M31fQWR7TmIifTtdO3QxQGNqSHlUZyldXWx1MSNCRD93dDMxUy5FYHQ7TnE5fFtASH5MJlMqJlkwZlhnS2pmQiZ6MGxFJG16RDRITUp4TF9ARnN5Ky8mTFNzJU9UKERbYz1CUV5hJFJBQTVKY1kudUZibD9pdDBQLDV0MWgkMTx+bi5II3tCQ2VDMEhqTG97WGMxe35nXm9LVUsyZGxn'@;
put 'XTI3Zl14PFAzOD5MY2RRWT80UGhGZ3RKRV96fTBOU24ofGt+VnJNfEU0Ly90RVElQ0I4PlZkelF1VzFtQGQ2TDlTbWJ2KSFoOVFCd0lrLEBQKywkeUNfWHhpS2hWa2huM2tzUnUyX0llKnxefiJ6JExBYkdtT0RfSzk9T3J3KEtCe1NuWEBUe2VgQDswfD0/TEBpTVhWciF6RjB5SVV+VWhKQyRE'@;
put 'VihDT2IlQVlqNWthOSxTc3V0RWksY3F1LkplSDRDPjF1cUU3Q3YpYHk0N294NSJQaVhJM1Y+QWtpdCRfOmtnbSppclI+IzxTfjNkfnZNK1RaVmFeXyVXfnpkeV9dbEgqUzFxUU9aUjc0cWtATyxgQzgiWlFMaTJ6ey93TVEycW89aXlxc2FDclhvTE5SSDNYJXchdU40Nio4RjRbdzFAeWh9eFk0'@;
put 'blN0cmNbeEY+L0VWISpYPV9QTmRzS1NOOSU3W186Rls4TGUkQyl7KUh4azxRejsiUmZDUjA2b0lDeXN8d2pta2NiWSlSNVIpX103VVMzTShWdUh5WkUvVjY0R1Q5ZGozN1lEWHR8T1ljUHtxfGgueXUwIn5tIiI4TCVXYUJmbHhPP35yNjYwLmNgQFFPfmk4SU9hNWM6KDJyfXZWVEl3ZyYiS0Ah'@;
put 'ZGBNOlV1Q0x6UUZaQD4zOHE/YHFXWmohby95OlI+W2NZUzVHXilqblUhRk04Nih6JHk7L25vTTR0I1d8cVAmNVVbMWhdRk99XkFfSz93UWRkSyUqJmlkfU5MJEM3SjhNblEpWjxiQUYuMGhFbj16aXx1XjgjUz83IndFSyUmJlkrTCVeTTpvYF55dCNZWFRZP25wc0UvZmJCRztvXmM0a25qVm9G'@;
put 'Pl0lLjI4d1lGQCN3OFo2cmdaS1BkWVVFS2IkUTlKW35AMi5EbUcuY2kidFhoIjoqTVhMSyVVbiN1cTtoPFlOZ1YsYih5LDZjNiYyR0RITGUxXzQoWUx9b1ksRVNCRVVVLixwZXU+IX02LHFML1A1Z0BqYC96VF9wLzc9TlkqWmo6c2FSNyIrMU1iNiI4PEZbLkw2cyhSYk5GRHo9Yj5iejhrXyZU'@;
put 'e2E1TkBjKyhVby81OSY3QUt4T2l6Wjp9eihVe05jR2AlM2BSank0eXFZMyRedV9PUDFrSD1AT0Elcj5TQDAmVSsucTNhZk46PVskW25Rc15JXiQoWlNjOUhlIURjZCJqQiI0UWVUcnVUaEx1PE1nWDVzSCMjfDU2JXp5eiF9Nl01aENIfVQjUnJvPjlBQ3k+VVBjTFk8NWgkZk8lJTwhKXojMj90'@;
put 'WGpnJjg0c3JDVy9rMnNiPldVO3JiNVhoX3J4X1J2RSF4U0dFKWA4PiZTcTBpWCsrZHdgX1hpdz5XLzs+LHhrZVVKR3lkJTdISCVKIUZFa3AoeVd3WnZtdS5dc28pWGRPODZPVllSTEVLcVoiekMydn14dF9bQk9rSDErJVZfNlZtYypuV3ZQUUd0N2l8ano6TTRQPGI7WVlANjxJMiE1U0Q7OzJ3'@;
put 'QzQ9bl8oU08jXmZ+RSZHbWRIaW82WjdaeiljREZDTVcpJDtDZSVSMzpjTjlVMnokNTl4fGAlfj46WkFdQDRZPHxIaE5WelgvSH1qdkhieV08M19SajxeOFRmTXRvWElYOXhBZWxGZFFjIkxOXjFsTCs4PiJXLn1aa1BxO15zQERyJVFfISs8LD08dyo9dTltY0BHcW5rZXhmLyNQME1UXjh0YGNM'@;
put 'bW92KW4rfjpCdi8ueltAUnYwOktndD8lO2g7cyV6SngsSFBfQkc8OllyI0cxZT5ycV5hLFttdlljaU1wKHk4UjdyfT1UP1IkYl0xKmp5NFApMnFYdi5qJExLZVdYZVRXOl93SnkzQlFZejo2P1A9MWY6aE5iRm9KLCFoTFU7WHErXTclVXhDQiFhc1ZPITl3YzF0ZyMyViVuMVJAV0I1MT93ViFn'@;
put 'fVkkfkdYUHFycCM2Ui54UGRYW1BbaTh+OXZwTD4+dWJ3blNHaitOSFthUUBXNCZeIzJTY1l7enxFVmh5WkhqbCZbT2VpYmtaNXUqZTo/fV42TS9teyg6TD9oe2FHMiQ5cm8vbVE9cDouazBrVyUzIjBINiRfOSovM3cyZ0c8UVQqWyp3cEZLVWEqY1dBJEZbbSo7OT46QHJTVUolOCg+b2dATUEl'@;
put 'K0R+czxzVilxUEtjX0JUbjZMKmksX3w9LiNoKytZTEZERV5RdyNKeD5jSGBERygjajAmLzElXXA+fUZBRFRRVCpZfj9SdE8uRG9rZDRqKyUkVjwxemI0WCs0aV1CS2VuSyUyUzVzNS44dkhIPHhkKGZpSjxJYi83Q2Y7d0I/Pz9UPXVXJmYsZCFyPFJjTG9lSEF5Q1ZTLz1HQ3lDI1E+fVEzbipi'@;
put 'ZyhmQjJvMD44bSgwPyRNK2ZZWTtNTFJjVS5HbzpecV1UaVlyQ2hsSk5BOVl7TzIlTkRpZjZKUSg0IWAqdVt6JD0oNlQmMTVQeGJDaCNtSHVnc0I1QD47UzgrTXVnMG5ERT8hKD5fMlswcExGdEZsTG1JemJQdTpOJktHIStlKGg2OCtFXjRwWWhhLEd8byl4KWIzJDUvQzRMengrUTVsfllnZUMs'@;
put 'YC5WWzs7NTRzemh+aDY/MGJYUDxtcUg8fj5uIXRAWU1zRVR4Nkp1KSM0LE9Hcyw5fkRxSmtAVVtoPSkzTGx5ODtAZXZHLzY1ZTZ9SENjQzFXQGh4VX5Nfks9JDB1eWJsOldRL1JKQTwjfXs6PzhkWjI9U1I2dDBRaHZwSmlISVpdWXpHd1NYXzFESyNWSE99Pi41eSNZQEV9MHxjQTd5X0x5T3Qu'@;
put 'eERRYU9mWEg2OFljeXJWZmpeW3ZuTF5gQlhyNV5mXWMlYGg3VmlKYGN3WjR5UWwqW2osbzhfdT1Lfn5JaCZpeWc1PDA3RSpuMjxuRGgwaipQU19Xdld8cV5fODt6JnBPUTpRfnMhcyRnQkdSeDUrW2AlKmBjcEJwK1QiYXNBXk43Wm5RKEMjTDVWXVdML3dbIiNidDVgPkczS0BhaSN1RCs+OzZd'@;
put 'Xmg8SjhZPGNrMGRQXTN5fmYvd11gSSQ1NkBSeylae2l2cE8zTzpRL2g9YUMvbiJ0cV4pUFtoYlsjYj1Rb309dHtbRjc2R0VLM1dlOEJPU1kmSVdgLzdpekwmJEZLczEuN3xmbEo7O1BnPlZkXTdqJUd2KHtpZSouWkN+OixFZEhwP3N+MGxwZX5dLyVRIiEvJnJWYkBVan4uU0ZLV1J7LGJNLm1N'@;
put 'R1YzQEFFO0YiQlZEREsxKCpiVDkqRkxBXUNqKyRxPmBrPzF1MiwmTjM8QSVWb3luVTlIb2goWjImZVRIUFN0RT8xWiF1biNdZUQpSyxxYTpzR1FwNHBVVilJZTgvdD9IRU4udkdvKU8/OjY3ZFchWV1vW0JQWjpkSX46cWJvRjkyRHdIcjovNXlSTjhhZkBHM05COWtfTWtSQExKXzQiWk02IT8w'@;
put 'elRJMTJBdU14STRrfThJO2YpJChTRUtqQjFURk9aZSg3fXhUfUFpUnpgQGI3SUMiIkJNNEIhYlkzQnBKcjghUkRJfGB2PHYoZHN9a2ltTXlxLlsxaWEoUXcpcWphNWZBeEJZKVRyfFdeQURYLjNSNkJbL2dHO3cuciNfU241bkIkWmwxZDRbTzdZTTA6PFRzMmphLn1tbCg0PzRjIU49WGN0Y0Qu'@;
put 'JCFULy9URTlTIVtscnQ6Z3p3PGthV1puPDFJb3Vkdzp3TmA7azooPWExR3NSY1RUNWB4c2Z+M21RVWRpfGd8UF4qKVtgPDc1bmFTO1J4Y0dkUT4oW3R1alZpdCtkVUFhb2RNU3MkY1QuUz52QUFLQjl6QUJda14+fk07UE5JeWwqLz4lW1ZIb21lQXdvPDg9SE92N1NUeiRNeyFWblRiPX1LVz5Q'@;
put 'NFcyP2hfbXFZR2cqcGIwI31HWi54YTxbaEJOb3c7ZlBeNjV2fTtUQDM2V2dOInVbNVZAPFYkWWc2b2JCUnMkPzooeykucFpoJTRCO156RU5bL3cmSS45YztJSk9uQltHSm5OQihUR1E9fEw9a3RHZ1JoSylhcnFhUyZrbk8oMSRHY04yflQ/XncmPHkpMlFTRmc9SlBzKy5SUXtfM1VAZiljWFN9'@;
put 'Z0pTdUI8WXJeb09eMHZNLH1eUWZOPFhZMCR6Om84SVNAUiEld3RHLFZUWEtwdSMsSFRiOGl1THcufWtuKXBJJHFsaXRePH1ybjVLZW81cEpzOGlhMFZodzZOYnpaSDFsQTBjQ0wwYyhjY3gjdGEsc1NMfVZYa3RrfUl+fWxvZjdKOmdHPn01ZCZfZDRwNUlVSis1ejc6QWlYNUhGSG4wdUw/K0A+'@;
put 'MUpZVDFXVF41UTQ/eTVAbWQ2M1dNLjRSPEVxaTlRQmB8V1JWfF05N0lTWyx5SDBeJFZyZkVOeDw2PzQ2TT1GTU1IQT5hLGNrXSxFMG1ZMUN6emR4Y01HeUBrPSN1dipAY1g2ayw5MyRuJjZpcCYsZnpvcnk6Qn1hU0BeIjZbZnhIbndmfkMiKENBUkE/Wmlkd31JfXxIIzQodldCMERmOT1AOXpN'@;
put 'N24yYSZAdVo0Lkc5JmdYTGdFY3lsPT9WJjwlRXgxSn19aHBvIVRTN19mKmgqcFZNfF5WTGx2ZzdHbnowTntlOkUjYmBWclt5ZnYlPkJ5dFhFSEFMNVRoIVEwRUI1eHpwTEJ6OjVfJTZPK0RvKFdDTGdia1ZgfH5BdUthLDJ4bE44YD5BdEUkTlFlUExwZyMvdSQlYjRfTFpIT3JUKzpCX294Ukw7'@;
put 'WE58UjB5SCNgcWYwdlRqJGVheWpzQmBGOml0c1piYjlaamZINGlKcCl3ZGg4SnllSmg4RFoqNG4rV3xhR0s6UjwrSjpCQnQ3bS5TOmo/dkYyODBBInU1JWdnITRmfm1xfGs3KTdqUGlkdENWTUIkXyJMNDFCQyM9MWBjezlXaXs4KDhNXiNxYGBSPlRrK0hlcCIkOChQelt2JjswMl9iS21Renp3'@;
put 'Nl0zJCUkcXE7dHReajQze2p0dXgyU3lhOU10Zyt5KUsre3hAUls6bXxUMlNQOyxRdTd2LDkzWTlAL0Flaz17MzUlV2E9RVZ4PjREZUBhazQ2Uk9WRVs4O21ANmJ7MFFWNTNoYXZBYzZFUzlQJk8xdGNQKnhrPEh+Ul9iREU0JFFjU0BOTChDJmF6Sit2Rk1TLEdZe3ZWRUttWixnZU1gLzVBSCgu'@;
put 'Q15CTFUuPihDTWRoREk+NjZPR11bR0J3aztXP2VveGdvVlZTKV5eOW8rfkxIXl5LRSowbk8wfVBsYFRHR31zWzRSRjEzNTpJQHkhUWJjJm1ATXhBT3hANikmJGtzOl88dGxtXj56STFCWmVobGZlfTBVQnVEK2w3a2prInkoWnVTOjdaZXZwR09zPCk6PGR+UikwN2p1cFo6bXIlIixvNTdXKCZQ'@;
put 'LFApKDNKKHswXVBTRXx6TDl5SjReJUI1UlJjfChebntuQiorfGhmOlBKMSlwczhfRlkyNiN+YyxJMC5pZnovXT1panE7KT5WW2hsfDtDWDw9e11FXU95PW91WWxdNUlGIU1JV1lIPm1sPXU5cjQ4dzIuXVM4alE1LDlnZ3J0Tj9aV146Nl89eWdvVzkiNW5GTnsrUFNdamtYZTMoTnFATl94O01V'@;
put 'b2lQbGhLUV8rbGdlMFNWfTp1d207IShLP3A5ViF9OnNucSkxT1pELCtsI21PL2gyWzUpO2x9cTBGM09uOjA6KVREUEk6TCE3VEV4QTR3cmd2KDwvOnx5PntwRk5OQy9OX1hJPFtXSnIvTXg5blt7V0VwYkpfcls9QCo1SGB8OjA2TzVmWmg0WjNDe2hPRGQ2UnJ9NjdlQyQ4PTdOI2x0QVQ7Syt8'@;
put 'dV5KSU94PU15V0J4X10sK3M3WiEvfVMyTnYmT3s+am99YyNCY2RqWGRxNWFMP201PEhsOk4qeVVLTWNWI25BUXk6NSM5LyZ3c2EoRnxyOGBLPldxe2VoZC8/Q3tuczswPTJ2ci9CPmh+Kz1jaTFaUHMzNSVybyI4Mj53KkRdW1V0VFdqRVpjI0VTIyxEWml8JGMoVSkvdkRLN3xrP3Q9fF0rbjhZ'@;
put 'KnpNQ2N3WilkWz5QVFo8P1Q9fGR7RmlTJHZ0ZFVmcndAakNnbTFOZ3MyKHFeezVFb3opdCIhXmRnaCVhYXs7PGZ4aGd9aWtwNWA9PihDT0dDQ1BwbXk1PSszaHUiPnM6YSRGbndZTl5ib0JNQmhPVnpueyRwXVE7TC90RFQ2dUJ3Ii5dZHhTInIuNkhgTm52XlZzSENgPzFlUmw8fTMrcWZkXV4j'@;
put 'XyMlRmtfVV4obCFRVnhbU34qUF54OVRJckE+aT5Ae2hbX25JZld4OXFoe1F4LDlWVDsmI0U2UXp4c2wxb3NwI2oiaHMueCpAZ2xkJEloOFJOODgofjNOWmpUTSo8VHd5MSkoTD1ocWNOK3pqQy9gPm8oTVM2UituO3FCV1M0MyRMbEQ2ZDRVVCV0aFMwOy9SREQ8JDomZiFaK1BGKjZoI2U1PiNq'@;
put 'Qjs3Q2RDRG1qVEZIMkMzUFpBbWdMI25WcVVpP2BTbGhxeldjd19RdT45az1vaytzWGMzeUtLNWhMRUouPWUvNUpTIyRiOG5FSSg8VVpyVks3LklxeVQraTc4ez5Ja3xKNk9+Sm0rdHFhSFd7bT1Oai84W2c0cVliR35KZEBWVm4kdV9KeSxbV1VBOlYoZH59OylXKClNRDQ9TilhYzd8eDNockl5'@;
put 'Xzo1YGdKKz5uMzEkInZdLig1Z1d7eikkMk9HMHcxTGtCYC9mTnQ0Uk9qamRgIzk1ZnZ6X2BTfF95IX5gd3ZifjV9Kkw2P2wkN0JRRyQzSTYvN3xHYkM5KzYoczZQZnx4biYzJm9vcmohL2lieD8sPlA/Knd7RVNIaDR+OHY2cWZDZ0BNPzJFcm0hZltWLFJFR3hfLHVXRHBYbmhKW1pIeldLSTs7'@;
put 'dnk2LE0uSDZjXXBPcDljfk0+RVlVOEZKJkB1JC9teiEhPWdWNURPKlJPUkQ6VENkWGskd10uYWZ2dnBOYG5bTkk4O3RdNSNJa0EhK0RHXmkjJTcxSjw3P1ZNP2ZwQjwxP05PMVVRMF4rZXF7fHR7PyU1TGNaaiZFUWp9WSV+YzJucGZje2duI1RfVyhuKVNgNEBgaDVJbWM9UnUmNWhTY29sbixd'@;
put 'UXgwRX1QI0Y+ZGg1SD9VeD8oTnJHQCZUJCpCKS5JMSxHUm1HTUlJQkk0RWd2RS88dSFHSCNiIUBFX2dfT3tsX3wpdmdpS2lqLkI2eWBHJDM8TG5wcFlTbysiNEJtYD1KS1Nsa3R5QjcqeD8lMT0wUXFDKndqdm5OcnN4WlYwXnAyeFZ2dnAwdC5mNDI5bmNlQGZjWHltVCMqTyU5RGI7YzR2WXAw'@;
put 'VHBJSEYqdzc1Y0VYNFo2L2pUbzE+JTEmW1ZsK0JDQlY3Iyk4RFoxNXlVJXJvT3o1KCpZRWxmemZ6eHplYX1JKkd2eyFSbCNFM0dxcmgieXFAMlJ+dys9SENKISE6Jl9Wd1goQE92UiR9YCthX0Q/MjsrNkUpWmpCUmt1aXpEL3xSe1VdR2dRPikmQytFPCReUWk4Z2pBZU0jP3FZSioyU3dfckF3'@;
put 'M1M2SCxFXVFvPFRBM2Mpbm5AVWpuRjptdHplPTMhYjYmMH1GeTZLRW9UM0VMR3huNkYvXy9JQFMxY2JXOE0rdnNsbEtpL2JCRzcqS1F0YzU2cVZ9UCwlT0FmW0plPCJiTz5dd2s4Tjc9LixJQztKK0o/QzldXnVXLGlgfD44RlBXPUY6fm04NzBwfkx3d2p5UF4kYUtuXkFRVT9kNW1YZFZiJEo0'@;
put 'VnkkaHxbdkpZIUpra3ZvUFVFdFBUXzRBWmV8fW4/UFRRb0Y9ZiR0eTova0VnOmZpMGVCQytNPH0oek4yPDNBWU51Mj1oSDJNJj15QHtZfkw8YSZWRVpvcU13JXN6L3RkVTRuUFg8SVtELjY1I0ooO2wzQ3NXTix6MVVIdFtlUDNlKTozUipSfCh5WTgwNEomZnBhPSNNRVNqflpUSkd2JHZEQHB+'@;
put 'JXQvcjhyfCJFMGQ9QFkkKnwmNl5zP3dnOXBrcVphYSJ4PmB1OU5sSmVJZSJdW1J8OS93emJxIyt9WE9hO3QuPXRHYSYzYi5tO349cG85fTspP3h2IiQvLnVDNTEpQjVvKzNfLChFbj1tPyVKTF5HZVdnNXBvam4wJXA/ajo1Tl1AM3h5PX1KKDJTUHs7Wlp2PGhGaDBEYi97VCtiM0cwZ2EoV1pd'@;
put 'bDFgQz9PcjRoLGxeXmhTZz9HKH1DMS58YHdKYXczbSNlXTZeIyJxb19QNG1gQ099IV5XOCFeS30+RzJybTA8NVZLQlk0Myt5UztUZHRYUWw1dksiXl97emAvSioyb3Y4VVJ4eilBO015KWM5UlR8RzFbMCZxZUQ/bjtYdiswbFp+XjAjSD83Lz1iZ2pNZFpDYHE3KFFBJDNeYWkoakpvZHZ2LFND'@;
put 'bTRwVWlwRzZsNVReZVQ7M0c6PE5Bb11lc3B3K2dCWjFBNXw4Q24oZiRfRkkhJCsreUZRN1s+eD93aDVrU31YPj41cDA6JTpgWkBHe0dALyRaJFM7IVBvKihAOzI3T08/PGtCb3o9PiMsNFY9UVBdVjtRfnYxYHtoeC5YZHw1QXhkWVJQSVlVcUFLfTNBZEo7fEMhbG9IfGJ6SE5ZVG59Q2xwSDAw'@;
put 'W0NDSGk6fGk/K2crQ2EmMk0vQk5pSmssKHgzfFg+Kzp9Q0dQdSIkTGtHVFpYfWhpZDdIL3M9PFVRUX02YWY1SExoM3lQeTB+Q3U3RzplfF5tJWxLOFJdJXdDayhrMlJYLFp9ajRbfEBFODpSPWxSVHsrNipRI2xQTDV4PSRJM1RTIzwhM3VFMGd3bSw5PEMuIkl0SVFqajJ7PCNoZkE3L1BiaUV9'@;
put 'dDl5O0UkcDtVOF83Nz1JTVJ4czhbVjx7OG4sME9HPSpvQyF2LCphfm9uTDt+OXRnViN3WCVCQSNOKSw9SkopNltTJm52SC53YCFGUypbfStjVzRmS1pCaSRhRU8zWVdCMVMlZCJDT3FtL3twLyhRJD9FKTJrWXJjaiRINExWJWRpOCsqPCRsWFJHQzlLUSEvOTQ3MUpuOkRRenZlPztZI2I6K2Fy'@;
put 'JnBbQVRCUX5xb1M3TjlILjBjZkBrJUxgK2FPR2kiZlVMPDApP1pxfUpDQilVcm18W2oreH06eDVVKTl8PXlIWHpbQnRJd0R9TXhyb3RvS3BuWktnUj9OPHt4UiRifjk9eVY9azlKM09qN183aW1FRkVpNm1HRFVsa3N9SWNFWXNMZVtnZzYwWWU/fE86UWZbMWRNVVY9alQ5IXY3fEEwV20lfkFm'@;
put 'U2t8KyFZeT5iN3Q/YmdpTFlTdjFVc0tMdiU0PnowNVRydnE5YjR2WUUjLmhxYUV6ek9TMWt6NjksWTVLdV00eD1DUHB2ZitQTWNsd0J1clIiX21jcnBjRGhhRE1qTEd7VE9jKmRiYzJbezozXzFGUk49Wjd2SUF9fHRUTlt2Y3ZLVDRUXWBJMGR5VFNETVcwVF95YHFCOnkiNz9TNHV5QygqQltb'@;
put 'dkolMXloNnkrQFZSdnE8eEg3RTYyN1M1NSRkNVh4SkxzQm8se3RLPERWcTNIU1lMImdBJSY+JjVQTjM+WmIyYlZAKXc6R3YqWXY/eT44Q1o3WFB1UCgiSH1Rd2NpdXJ9S3JDfXg1TGRvTnUoPlp+K347bF57VHdhL0pKK2UuRE4wUG5wL1NPfWl6cXpKO35HN1JEXnd2e19vemZTYX4yRTU+anYw'@;
put 'UlIxWyw6OTRkYD1pNE45YyNgdVJdSkZkX2MwfVhZUUosKng6UTlqPF5VaytPQjBFTGFdM2E4Tmw1cilYUyQ1UENuJVNtZHFDRzxnL2JvRml1dmsmYHlCQEksKllwT0UzOzhYfF50Tnk5W2VZYnloWSwiaTxbKi5uZTJla1JAekF3LGtjdHc2YCVEJiJBZmtIV3llbEAmazBSYXt2fE18LEsreDtC'@;
put 'NSIweCQqVG9tcnpYLF9PIkR8cFV8ai9GXyM5aiQ9RlJXb2k+VUBpZTJfNyhYMCk2KG1NUSY+YEh8e0o/WjdSKnQhOjgvVldFLzJXOWtLdTxqdGJ1TFM5SklGNml1e2RAPW9ndSUoO0FRJUVpYS8qayhxTSFXMS5hZlI4ZyZmelMxTnB2Mng7NmdtR3tZMSRXVDRLdFpEKmA6Ql4sdnAoIldNcU5f'@;
put 'OiZIOXBqT2QjfWJCaUBDSStgM1pfN3NTTn5JPXxTK3hsOVlgZXpvcjxTYW9LR1gqPDguSWJTNCJeVjAqLzprLyVZQE07YklnMn5vVXp0IS9zYit6bnRCPlE1XnV9VjNYS2A/ZWM8aTA7UEE3P05FOkpOITU2In48QkRLIUVSZUkxUTpUdUk/SlIqMU5WMCNweGhzYjYqTWZdOSgjZUVIaFJ5YF1M'@;
put 'RilOeGd4YT40PSZVNVlUbnV3WGJYTFdaMWc2RSYpSUFKTlgjZE4xWiw/fG0raV05WG5vQ35oPVRHWVFLajgvXlJAZHFifWYuVSJ9V2M/cnJSaT1YamM4LldrQWNraEhuW2dsXUIyVC5pbHplJUg8I3lQS3dSU2ksaXpHS0ZxNz1yPGddIkdCK34vR34+fU0zRnVtMnJyT3J3PGZ+OiZYX31mWHk7'@;
put 'VkpGQXBTPzYlQ35pOGZRITloSnxUK2Akblk0b1l6VCx5dThbfVBffSJybUE6VG1mYTJnbSFSWkZwUWJzOXRtSUB4NHhqYEk2YFpXdDNoYS99TFp+IXNyNnpQKUVrdG9CYm1wMnZNcz1balJtVVE5dSU7Z0leWG10KlN6RjVoc2tdXVtbfU9gPFokTGZtTTVbW2E0P2w0Zzg0YV01PnYhaV4icktw'@;
put 'ckVJZkdUemZ3a3VMIWpucz1FKF1QeHVUZHpvVEMyUnUsM09PPyRuRHk/dmNdaEVeS0VpISgzMUVdWDVrcTBBUUVIREhQaj8mbDNZdF0hS086bmg8e2pMVVVJTSZOTSlBN1ZGJk1fZX5SSHVsTEZIUERINWQ6N3BTTUlZXztjTTZAeylWND1jXWo7bnNnazVNLmNvbnsqKHYvJlB+KjRQd1NtS0xK'@;
put 'Rn13VnJyeG1LRjIwWkhyU3FvS1JJOXxocmlfdEZ1I1JlNik4P01OaWFmZmx9c3FGLnl0TzlZayRLeWljXSZxWVVrTjBsYDVtd0N4biVCXz5gVSx7fE9UaXBOajVme2ppWzw+dHBoP1dnSi96KzJ9flo1OkleXXQ4MjxSLHUvfENSKWZ1RzlEaiZTKSQxYXVINyElR2BUOyQ6dXh0X01zOFswRn1N'@;
put 'NWNjTUNHdVR1XUg+dSZZbEsiWEpMbVEhXUN8VF0/Ty9HMlE6aTRLQmU0RFkyYEliR0hKIVMqW2VYNXJ6djh9b15oN2s8Uy5NNTg6Ukx3fERkLE5vdVVpN1QlVG9SI1s6OkZ4UnNRangpNzlXeiopQzEhWT9NLisuQFhhbiV8RDxkc300R2hkPDZ7RiFdVW89fW82M0BeekBFai9OQTI6SWlbezxY'@;
put 'ViVFOW0kbnNoKyxRbyRPPk10UHBbTjM+STgvP25mV2UoWlFSPSomMHhRJWJATSg+b08weH4/MEorRWRVc29KL2xTaWpiWTkkZXRoSmJEIldtb1BATyNAYmw5JSkua2NETGB7aGNlVmA+IV0xS2tnU2k1amgvWiNAWVZfL15sQGI0X2BHO0g5eWtpPS5EcUBLI1p5SDh5eXhAPCZ6QyVGTm55NSkz'@;
put 'VmIwY2x5VHJgXS9BRiJeUkhuZnNpRGgpS1hVOl5RZ3ZDY1giOXRKTiVrbFM2LHtTKnkxQlt6KEZYdiMkR0hLc1NqdnJwUDpHMXFfOiRdblo2ZC97UStkbmA1JENTUmtWMzRgZG5pa3pLZytpeE5AMFNlUF5rOH1MdCQ1PlU2WDdXY0QrZjc3Ynh2WTIzUDg7ZyN6Nk83ST1RMClsfHNuTSFAYTgm'@;
put 'SUU/ckAwfWo0Nkc+RWUqKDZXVDFsRlgwYGleWG44YWQ5Q3kvaWs2bURIKEtNcW8ldTdmIVM3MUApNEsoV3NbPFAlOzR7I2AyM1oiIm59KHtAPERCTW44LygpWnVZfDpDRURkR1o+WyxzUlJWeStKUTg3e15GIV4yKixyTWdlR2loMmt+JjteSDpAeDBpc0BuY3dJamR1fkdKSF8yW31+YUVpPXIj'@;
put 'VXBpZi4wdGd3RzpYYkY/fkJ6fVg2eyYuZlBndTRXZ2Z+bTsjXUA0ZG9eWE1nalJOdCl8PG07ZiFUbVJseGEzalNARWdSZjA6SnUrYGh1RFF9LGMqeyNuL1RUdF9GXys+REZ5aG1ZSkZ5S3ByKVcscjt8S3QidCloc0B0K0A1JjpadGQ/LlAxTmNjQngwNG42dV1pWERgWSZvXjQlYl1vUit0amd7'@;
put 'aC87JXBVUFRFZnNaYkI3XklDRUIifjxAOXVnWF9Ve0BWTzYrenxXWHxxfmBoXjN5fm9QUSolYmkiZjZZdTtGVltOJGhoNls6KSVpKUwvWl8hUXViazQsWT1DcnVUJix4PmlNQ1VHISwuP0prW0VxcG15P0Y0PTR6ODclaChyIngzXixnbE4iTEBrUy5fJC8pMjdlTWFGMV1dRWFUKTdlVVZQSE9g'@;
put 'bWo6OHtjPTBmQEJEQG5LYjNPLFJVeU0/OnxualpsVUZIO2B+UXJBP00kYGIpVnJeU09AO11lckc1UTRTdT8lQks/KFtXYV9gQkI0V0IuSUtLLkRPYVdFaGVnLiEuIzBsP3NRcyMhWEJzSip9N089PkN9UnErSzBrLHlUejlrOV9UJmp9KUl6emYrXyNFOXRsZyMkWVRhWVF8MkIvOXBxVHsqaz8v'@;
put 'IWp6UGlRNC8kTUU1OD1VWFsuOy5QRzEvc3dlSkVRJXZhayhWfV07e3NDPk1TQmNTLH1mdVEiPDNVRSQ9cWlbJj13cyUoeU41eCtdOShKMFFORlZNUFROJks5aVopcS5JfXU1TFU5RWt8TEhhJEd7LFZ4SmI6IntkaEhPNipTLklFOlprd1AuSyE/fUkkWSQ8OnpsSzVkZ3VTUlRaMU1NKT5FXU12'@;
put 'Pi4ufVZnazxINzdwSHFqYEdWJS90XXVYJjZzMnFBP3FbeCkjRDlkeltTen5waEgoKnB6VVtdTzh+bSJpKSVaMV1CdXVNcGlwPnI6Il5heDczcmxIaDtfO21+NEc3fXF1YHZ6WnxpKDFePXMhanR8cjpvTmJxWzB5IihrTUc2RDNbfEhgcDlNTEpsX358Y0E+bFpCRmwib3ZdQnRNITZOR3U/ZltF'@;
put 'ci8/djxsUWg2dUZvWmNxV3RySlQ8ZkJTbz59SiZYU3kiTHNiYEEvMkV1dHQ3Il9HXlV5IWMlJEpaI0ldNmQ1bG8lW3A4aEFtSiRtKX0mZWs9NTNJdiE7anF6fXZ0YERWOkwrR3V2Ij5CaksucnEiK2ZgPEZdQ1U7b2wsT1YjT1AmaGlvNT86XkIiN1JWXXc3UmNBR1poPzJUKH0mVn1oNm1CMnJi'@;
put 'V1d7ejhXQDZLa2wodXombSNGfSs6JGtJO15wdmF2eDh2RUU9b19gQHdxdGgrfXgrZzNeblolSnA6XTxrcDt4KXJ6JnA6YWE9MCp0TG1teFIlNVd+cDAscWQ8WW91QTUsdFBVdVpxI2pfflREZXhpSUF1fSw2aF8sKUA2L0diP2o7cX5FMV9IW3QuYXV7MXQ7XTpVPy9QWmJ1SyRAZShwQE9vaXoh'@;
put 'QER4Ozl9ZkkoKjlYcyoxYyZsR0hWfVlbaHFBYSh5bW1rZVsjeGZ2SikxMSk4MThPUDtlL3hVVWBVfiRRPUw7VDFgUGUpZV4sKiEjX3FdSmJVX0l5OWFHZzV8XXBrSDZ4V1VaTEJfKFhtL3YxWkI2VWNeP1J8Lnl+UzZddTJGNjtfeSJXM289NWw1WmEuQ3xJNjRwViZfO2l9Pmw4RzdTQ3RmMHpf'@;
put 'aDQqWHJZRzhJUDZCUFRZeiM+YV4jJGdhQmNlclVjNFAuKzZwVHRbRnIpaTVAJmZjaiFGVl5GSE4zYFRERDFzWzNPcTY3IWRiaFBEJGlsRTtRPSZCRC5ROm09V2RvPUdkI2l9UmMuQUQhfEIqaDphZzk8OEJWUG4vckZIUmk0WDs8c04uNV9pTWYrdHFtMGROJWFuNV83NE9tQD1JWmZfZUArMGBD'@;
put 'Qz1ZKF9ZXVlOQCsocz9kYjVicGp3YW9eeHZpUyRPRn1ge2xCSTdfcDk4cW90VCZoVTRTJFMiQ056TXRwa2w4cSI5W01QIyF7Vj12YWNXUmp8MHdYL2VDSG9odGY1OTZwRXNkOmtrV3Z3PTJqUUt0Skp8OGI4LFBsQlhlMjZYfVtXVmNyRVVEUyFHYHckaz9fflhFfWArSkdqIzRyQSxnJU9WNl9U'@;
put 'aSJHKDNyMysmbnlmMlFPZHlDUiNkclB8aW86R1k8P0ouRUdpWilaIzNiI205Nk1WS0lIPlY5ZEB7cyRkT3JZaWdXcWBOS1Y/fCs3c0x9QXVQc2l+WmE7PTdBKnBuV3RGflI1SH1OTzQrRV1ZKDlLXVdGSTw4Q304ZHZ1V3Uxcmp0VzhsS2dXYWBIX257YFtXZEwxfVkzbm1qflJxMEIsfHNFfGFk'@;
put 'ZywsMnxzcSg9aWshWnhvSm8mSylod1YrV2tlMCFzfjs3bSFoNHtWRTVCXVMkMyR6Myx0O1pOdVRXaiZ5fkUkd1VxcWtvaW1eYmhCRihpVW1CRnZxZjNlZlRHKUI8fGB+ZTdWUiVXYHJyb250LjFnaF1CQ0Ywc3gxJnh1OD5NcCpDUSxuRyY2T1kiNzEmfG1OM3wwUEppLHEuS14yX2RlL1N6MzYk'@;
put 'MUdRNS5yezchZT4jeXZAK25hRHpKPCosJXpjS2hCfSprTWdzdThtd1Q3RGMwbWZ5fWBCPVVOaURqfFtFM2A6Xio3X1suN1t6KE5zbnwpRX5CUEJiJDFqb3dSY15DZXB8VzNePj5MUHpjVi5FVE9RYUkqKXs6ejwlIVBVJEYuTHYxIig6OlMxJi9UUEpdR09GSDdDUDh2S2d4e20rUiNPNEcmMW9I'@;
put 'I3MhZyQ7emFHc2VFJWg6O0AhKTR7U2VsOFV6VUI7JVRVNkxfIyNvWFg8SlI5I042enw4QDBiensjX1p9RVJXIyJ7UGB+UzllaC91RmQwWztvfUx6cVRYU1Y/anhONEN9WmohMmYpVT1MMH16d0JGelUxakVscHFSdUhLNjhvZUhwNVg4KGxPeGlqTi5kLmtMM2ZvNHRqPSZoLzlTSEU8THooZj07'@;
put 'UDY0T0BRNnApSTYxMCVOSiZbZ2tAPXZ7JTV7KjBOJVJmWUJKcStaKGQ1R25PbiReVE5fSn1MRkR3QzttK0R9dnVZUHUicEYiPTVRcz83U2RpPGtwJENGaGxdeCY0R1hBb1VhKGNmWngoJF42WGF8cDJmey90OGxRI318InI4SzxnczUwaVJmTSFAU1cyQ1tdTGQ1UThON0t0Rk1JZHpYSjcsPS9M'@;
put 'MWRpYTJMP1FnO014NTBCM1olY1M4ZCt9KDEvJml6IStvTXAvYzNdMHFdfSkvSD9KRHMhSHVNQGd6O3owPk1xLzwvNzBEaSlybGM3Yjl9ITJhaTZ1alNsXSRCP3dhM1E2NEdmPktPSSZeXyo6WDVkc35qSkVlS1UkSkdSYyJZM30ibEpYJWdgLllTMF9rRW49cmk9entzeCZ8fkVxISV5NU9OfGpB'@;
put 'U0hqY3sxWkQuOktOdX1mfjlPTTNnRUtKdzlmSTJOUXNER1FROnVHJUEvSiliXncjdWYvLE58Qzp5a3NLeS5lOnJweHppYklQL2omVjEhaUdCO3w8Z0sxL19Aakxdfm8xJjxtMHhYQyFQaTF+S1VnVnxeMTlvSmkjaDE+Sld8VlVdXUBBMHJMaSEvY0d6LH11X1hfa0ByaCg/Uy5ofTlqPnpaOGMm'@;
put 'KVhrfSJINGUzcE8kZXswKCVdWEAvdTVpXXN4WCk9JX5kemVyPVFhajY4ITM2OTpVPlpiX0d8flc+PVg9TlBRYDBGK0V6WCYxfHMlM0N8WyEjfjB3fnc1Pl5oQ3h8VlY/aCpwcUxVIURSYDdxWkBmYF41KC47OSNjWj86XXdZVU9FRF5DKVtYLFp4enR+Q1YuKCpzZHViUDlbKkI/b1VwPCsjUzR6'@;
put 'LHFZSUsueCl2JFpTMkxPMn08UCpKbCRsWitvRHc/PEFoNiUxOHw0RWhXYUNZQ1RMXzhieX0pe0w+clFzMFlfS3EkPFI5N3U8U0tLdH4pRl1PV1lzXjVRTzBiRVt9eWolOzJWYjxbcnZvfmQsOCF+fjckYCY4cm4pIUR1QjVjc2VNImNrP2NYK0wvYXBpMEcibXNub2EiPkd5WWl2KiguUC93M1Nz'@;
put 'cl9KciFkO1JUXWZ5S0dTMzJRXmlTcDJiNHw+KiZ+KCV0TVJVYnBleU9SOWNdUUBdRFJHKWEkWzkmMDkyVWgrZmlEQUJXOUI2T0hqNy4pa2tqdyYvcCN8REJZbjheSUdMaTJLSzxOZFp4PzFsdTtlQUVSNXZUWEdVSDdhKX5YPCN4Y3hobnplalAkVXJMbzVscisrcHkkKUlhOk4iNis5eV19QEZa'@;
put 'XlZPYFt7a0tra183fXVVOXIlb25qPlglKGYhSSltYG9FYVcmKktmTWt6Kk8mQFI6Uz8sYUlRP0Q2K3N0UyRKYFo1ODI/LD5KU2xUUiloOHNXNSg2fT56TnJ3THxyLH1vYF95UThPQX5uOzI/ZyFeREpoajVoS2pGM3FZNVRQQyFCLz9QIzlPM2FCVXkrVD03THpJKTlWIyMlc3Q/MFcsQ1ombW1C'@;
put 'fUN7TXB2cjptdyRSWE1vQH1MJTU+QylxcnF2V0RFPjl4OWBTeVZKZiJyfWJYYiQrPlQ3eF9MPTVSKihMbDtJNjZGQ00vTF0wMkBpPSt2dylkUkMpezQveCMkWWFab0kmKSw1O3U/cGBuUSo9eT5jMCxERSVDZiY/L1NKQSJPX2U5OW9CPS83KTdUfmckMUByQ0o1SE98MF8/fSVrSzJiLyhQe01i'@;
put 'RUVWfiY4Qz1xM2NtXm1zSGhdOSl7bWpnc2c/Ky4lX1EyZzBBX25qS3AuQF1rQHBMTSQ7Xmksa3I9LmouYGBnUChzS3UuJWlRTXNDZTxPRnkyNypXcmdxQnJucj06K2Y3Sk07YHx1ZiJLIj5GRkNUaCxoLDI9cz96PFg/NXxfJm5BNmxpUERoMS9ecVdlbjEkKzZWfkNrRkBIfUVvOkokblApVGdo'@;
put 'THc4M0R3VWckSkE8bytIbWlKdH4sdVhwZVRqe25sXnxhfVs2PkdDK3dEViE9Nm0oPD9veyJwMkIyMHk+UnhoTV1XeT1eMCQ1Y0ldNjFQcjd5WztCOjc5RSJCU3ZaQiglWipQU004cz0/d1tSL0M+fTt2Wjk2RkRfKHsjS0BjOUIyfG93SVdBLl9eVXFGTWV0fT5TclJxbFEsOzlpJTpiZjlKbFE+'@;
put 'WSZGRiFeS0dbI2Q7Zz9YMnpZdXVoLC44dj5eMkpALElIUGM/Vl9gTjk/Kz13eCZPeTlNcHE2OEVxXU13UzQzJmdPeUwsZmthT3dhL0hwX0UySDt4WCNQbEY6JT12VH1QJGJme0paaHJZUyV7XlM6XTRFJEUjdSlEYCtTPG00aTZrRVFyKDYwME0sVEE6aEkkci9mJVl0LEZsam1zVDJmbF9tQjFi'@;
put 'Qll9TWJ6WChPLDpwNDt5VG5ge11eWkhZKG1KNVFdQENBZCM0aFYkPXBvNVBAeSNVc1ZlNlEqaVR1O09iQEwpV1RLOUMuOjk1OXA5eiJ5Tkk8bWdtalRVW1lJM0glbG0xWkJ+JUtpdilgLkY3YCQvU0VtPXRfVE14THJUZnJ7YExFWnFreF4kdCo6NW9LSnBbT2p0UGluLFVtWSs9U1JlXVdEME5k'@;
put 'W1kiMEBrSSlbPmVYVzlHN15AOyojTGQ/IWxDUEA8I0ZMcXVvbUVJPD56YSF7JXsuY19Adih9OzxNfCU3WShlKmJFMmZ2U35wRldfW3AvUDdMRzJ7bmFpUUAlT2pub0txPl42IkFJO1svLyZPTG5CXjZ+V0skLzdvLlZJQ0NSNGRLKVFXdmFwdX4vbmtTRz89VVsreCVacXF9a3RwZUNSczZ+Tyx4'@;
put 'NXVaO0xHZk9qRDI0Sj8+YDVye2tgKCZvPExhZzdWVU41ImtCQUV8I2okWm9JUHpKKGlePG1SKC9VJkxqe047NU9NNH5DKzIxT0RCW0BKemNbT3N8Rk82aXtkOXVjO347V2dtPkdnfkJbPFpHenQqK0NyYyxUJkRCfVRlezZ8Iy9XX3xAUExiSWh4LGA8RmhRI3wuaXBqbW5yRSlodj8uNHZ8ZHUv'@;
put 'I2V5QTB0N2RFPVMiXTp1QmAiWWQ3LGs4SGAiTWNOZEthIUpqRi5rN21CciJVPkhia0dDSSVAWnpmI01QcFF4a01VR2V7Slt3TGRQJkg8PyMqRklHJXtpdXxZLD1lWW5CSHUzU2ltXzRfPHoiPiFdQlFHeW0vMDtqQEcxY20pRWRrcExLMCwifGxzSUI0NG8uTUJsZGcuWyRxPWU/PFR7VXNqbGNr'@;
put 'YEpaWH0oLllTIUVqYUJXRStaclRUMUVNS2hbeW16NzVIZWNQU3FPQkk0KHw1NEBmZixnVStPL3ozJUFvTGlnXm8qdHg7RyZXU3cqZ1dRMX4qVTFSLn5tdlZZXTEybngkd0RmSXI4Lm42dVc/NGszSmZpQnVeOG1iMlkxUihOVlNwOzJTTkF8PFBjaiN9UF51LnlfUFI7eG0lTzJbUVs5NzoxP2Ei'@;
put 'UW1zUUopUCU7OFYubyNialMoQ0dUZWtROT13cDw8WGNaJU5PcEpIU0ZnKkZ3MTgke01hbyNzallLZiVlY24yITxOb3tMe1ckOV4zc2U/dGVYYzR8OTFtTyRUfWklMy5tJjxTWWMxNUFUaiVDKnRMSSRIazI0ZVBhM3JlVkJ6cDFgfWMxe0c2cXE/PE0+RkY5OztWK2dBfihiUyRdVm4zOyF6RXI1'@;
put 'dVBSVCMwV3Z5VDxjZm9AUTw5MjhnJDVAODR9eUUoIyllVHdIcnBSIyU5LnVjKHtbeGwwUGEzbTZDSVdbZzppdiFIe3xAd016dGxFWlJsZWxFRCY2S0w3JXsvX20uZWpbcmZYSm1fUVMydkp1eCJKKDtCci9IPXI1eWlgMmk6d1lheyxePF18TFhMTFFVU0UqWF5DTlljUERyNGdgZUpJOjN4cV0+'@;
put 'ZGdMcmdsNCU0WFo5UGMufnJZfFEvRnhiRihOb21qa0Z5PD9sOS5CWHNaRld8REcqPmYjYjIzST5uV2FkISJMbG8pRjQxRltXPmE7ZixlQzBmeipwRV1wNmsiJl9veSRlUVtSJUJHV0M9cylmQDYyOWkoLD1TcjpmOC9zcWRhZXIxP318fk1pZF9uMVBAMEpdY3E7Y0p1b1g5I2Q8Zl03ITw8MjIx'@;
put 'Qnt3SGUsbGZhX3tda1YjP1N1SCx+dihwUndKSUA0PStHakkoZDtRbm0ve2wqIlZ3Kk0wa2kjb0FwcXIxLzcydyZQQ3YzMTowOSU4dGdYUWA8VCVTWCNlVSxxOWtpTSo2K0hHZm8vUnc0WCRaJHhHKkZwaV5WUG09SCVDO3Z8MWIhcHhsUVFTa3BPSlJ8QkM3TW5DRUFyamRpLDU2YHo6RmNycWh2'@;
put 'WFNFWk5mREdRTl5HOmVBSHVWeD45ZWYqfT5fNSxHdEQveDJSR1pHJHU/QDxfbTVMSTFhXVc1NTk8Tk9RZ3pzI1daQn1ZRm55MThuUTd+I1Rsa3V2QittWCNhIylXfTtMTmxJJEJ5OFtZP2J7IV9ybSM9LmlrKzExPipAYEBefWkpJn1WdFFaPWY8Vz53VExmLld1JS9XejR2Wl9rYFp3T0JSbDYh'@;
put 'RmFecnV5eyY9YnFafS9ONT5jUzpkZWFoUkM6JF5UcTIuckghY1F9cSN4PzZBSCtOMjRZMDU0VkchbiVEfF5LQlYrN1g7K1VTdmVeLCkrKXVIPVJlazkreE8hMT1TRmhdbGx7VmFeMDhLPXJeY3heSyVDMDJpZkBEWC9uPDNEeyNaa3RMKlVwd0E9Ti4mRys3OF5faj9geSEvbTY4bW1DL25bN3Im'@;
put 'QElaO1BdJnpFIytfTWRybzg0OXlVIUllNENFY0JDZz9DM3VMRylCOUlwcz0kOXJBVlhTWGsvamd7biRoYHV5YzlZLEQ4ai8iI1IoYT9MRmZpdS5ZWTlIUnh7QW5uLnVXWl1qRz1OMnx7d2tzaitYPWlTRitAcUNRRT48bGpiMEVHWVZCeF9Gd00zSnlAOWZzIVpsSnshaUtnKmpjJkIoeW51bjEu'@;
put 'X0IoQ25Hai8mWXg7a2dxKzhmQXE2S0x9d3RkbHt6WTsmJFpNWHNXNUZ4djYjYFFnSlp9S0ZYIl0/JlZNa1IrQ2xkTUs2bF9OMkloWz1qZWMscGRNNDNlQipTMj04WiokQk9sQkM7ajZHUnw4OUI1bDY1aVk0SVsia0koZldMQGRZdHdQKElBW0hJTzpVTXJ9al9wPnBjRmR5NF1NUyY+ZyMqdFVG'@;
put 'WSxYcTZoN3Y0bnpLZ05neisqPX0qXzVtZXZwQ05zKjtWdTNRNXJHbyloKm52KUtVKWg1QkZ7QVlvZzF4bChRezUmalozcGVfNXMqJDtkZVohRXVuYFgxKnQsXzF7Lzx4UntAWGohNXZeeltsWnlhUzNhcG9dT0wpYVlZcihRblV9OihkaDJWfFo3WGUlQ2pydUJnNFhZLmArcTgrdDEkeE1lKmds'@;
put 'I01TWjRLUzMrUE1wPmwlPF52S3ohPS53fWdqU3ZmcEM7ZEs9Pk9PQT1qUUg+USkjYm99eXlLYFhFYD5RdGYqRX56ODpbJU1SLzIsQUpmSlF2XWVpWTkuQDpIWE1URkZuY2s+UTF1MUkod3g+L3ZwRkhwQH0+cyV9OS46aD9wT3Q+QSt9JSolK28uOGBxTkEiay8yMzNxN0FUK11hZzksSyRhb158'@;
put 'WipCKjYoS2ZHUEt3MHVYaj99WGdIOmhePkp1NnI4Nl08XTdhKWh2IkRlcDc4SDs6dUo/KzM6NlFlZ2puWX1EUUhUSG0uXX4zcnc+anFVTExyLnViQDMwV3Y6VlB0IXZxX0RCM1M5SnNvOj01WTtFeCs5PHN0JW4xaW8iYj88MjFPPDRbOVRxNTFbRE1oNVYiSlpFNiM4WDpfV3Yoa3dRNFV5aFZ4'@;
put 'WT0oOE51XnU/bntpYXJZNHx1Q0g1bzZKYyUmX34uaix9UWdGTz1QIzRdbExUPkBfJjNMRDZ0Lnw/dl5rdX0zKGNiVEZ0ZklIbDRzSnYwMlI+JSprN31GYi81ZFFqWndjUXJ6bnNdQUIlYjQsIzRIeG9OXVVQZTcmZFpTc191YykxJWBiVGIia0tHSFUwJW0/bFNsX04pajB5cllIJGBdJHUiLG9u'@;
put 'Klg9fmVnWEMjfUNYZSUhQHJ2K2M2Vz5ka3dgYWY8cF1rP3MldENURSV1emFPRGJmTyJoWTUwKStveWdveTdpITlkaE4mYXZ2dD15UlRtd05JTUYqLjBBc2tOOFJ6VUY2Oi5Zc3tyQytueXplZGMrJHA2Yis+dX5ONVhMMD8jZzs3cz59c2AwOUFrO1BWYDdTVT9aQmB6OXY+MnE7LF5jPWJqbzl+'@;
put 'PzlKUEpQK1tJJGxEUSp6bzglLnlIVyZLfTRIMWlPRVt0W3RFU2twI0JHXV4kVThlQFUqMyl0ck1RcHRqR1l1fFdVPlA+cCwlPTMpUDBkYGBAI0lOZGE3KmxYJTYkNnBebE4ueGdpRlU0XVtrYkJNeGhdcTdYMDFNTnJXZTA1ITpzT1Y4fH5fe0RFTkEkY009NDVGWTYqWiFdSFFkOiJvdmEyIXA6'@;
put 'WCY4IVcrLmQ/MkxJTWcpPCMmUXg/Pjs5I0JZOWcmKVkpKSw5RDFPMT5LQ0N7akg7aHQpKSNCT0xxUTRyNFV5ZEAzN2JvSTpGMW9hITNARGpWVFg+czw0dT0ld1s1JUpuQjpDIkxdRTxqfUlLcUs7PVdGWV9ZOU46TWg3YFs4ZD96KFN5PzQyOnBLP2p5SS43dCF1Y2cwN0sva0ldPm5JfTg3W1t4'@;
put 'OVBMYXg+Nj1yKGlLNlhUdUFvLEB5KC4zWEp6WzY8dEwlSmYsMChhLyI6OGM2Ly9Fc1tVRmI0QUVkMTdANEdHPEQ3cFE4dHZ6YSF6bFV3aDpNPzRWJTgvNVFIPnpAWyhzWFpyfFlxWzMjbV8+PTQuaEh1I0JbKmRLOHdBRF9Ud3pYfTBaPFp8RkFrTDtYVFg0Tmk0cUMqcFkyYURhXVBRTTJaUiEk'@;
put 'RkBOLz1gaUFIeEdHLnZyY3o1TyY5ZFkjUik/VyFxOltXYUU3YVZ8YXcmRl0/XWdDRkxJflcqbz9ofT9dSSNaZlZeY35uLkF0K2g1PV5CRkQzYlkpTUpyNmVIM1t1L1kvWCI4Tih5aW8xdWVAaDIrUE9UZ11RXVBYMEl1JE55flZsTFhNI0wpTCZkYnN3R05OO2d3KkR1PlBPVDhjUlhoczp0NyFo'@;
put 'dko7RWtTWUR8YzBde2lgTWhhWzRdKXQ7MXZhQXlhcklsRGphbio/OT9FbFBTUjoxfCF0UlNyJnJHYD9QKmVeYkQkUUdkVlhqJUc3OUJJNjM9VkM/LnxtWlB1IWUxT0c3TD1IYXtsJCo0XUptSldkRGcqbDlVMShxPjxNVUJZJCJwRTZBaWdgcHsxaGBpZVQsNipgSDRadUA0Nnl6ak9LTF0wRSw+'@;
put 'NntCQDVTUCVMRC9bZC9MaE1JRCRXYVRxL2orX0xET2xJOWRpdSgoLnIqWjsjQGoofEtSciszS042Ojl6VS54VUVuSG07RCZLPjQ6YmhpWDs3YUYsMSExfWYxeno+LFBIfFZPNjwmcTlMbmVycXV6PmdBYS4qNDpqMHBFPExwKWFeUHl7SXdzazAvXndEWWNBPmczLkBFKD95cFllZ341O1chNDFt'@;
put 'NSFuYV1FdE1oVGNmOz0pUmhFS0NIS01VMjpdd2FgLDd7VXQ+UXR0YSpqUi5TRj00JCkmLiQhPj1eRmt4QjRmfkleN259dms0fit3KFh5QUopWn1jbURfdkB7PH5FLjA9OW5lVmdmbC9tU244USsoRD8hUkZJUy43OD1heCZvMVIyQCRsWkxqWSFHcVJSUDx3c05ILExFNXNBWVAjN0kxPno0UnN0'@;
put 'fHtYJGdAMGdAbDIhUGl4QiR3R0E0S0l7VGRHJjkjWDc8IWVWT3Z0JkkwNUQub1FpaFJ3fUYxdlhxeUo7S2gpJUljL0x2cnR6cTx2NkdrISY/aFg4NTQ6dWUobmlxXSUrcnp7IzVbUHJhNzQ6dnphLkpqellbflIsZmBOcj1abjRQKUNSRzttSl5ITmxwIm9KbXZpTEV0JipsM3tSRjt5KF5GXWss'@;
put 'V3k4ZjZMMnAlUld2SjZoNy95KTI1d0EkPCk9Y198alooSm9jKiNhJTZRKHRWWzNacyR5S1pIQDQ5UCM9c2dAKHtCM0YqJDVbM1t2PC5uOjYzRTN1S3MkY15iMis+X2VjWD4ydlBqKyt8T3VbNDFhbXVsOkpDe2wuW0ZnOSs8a3AiJSRnImMwIUMha1N9fjhWcUY3UlQyOGwxLigkYmxiK0FJKX1F'@;
put 'UX5xU0NdR1VMcjoiNyMmY3AiNSxRfEs7NkBzdj9IeDFRTWMxcS5ZcnZfQitqd1RIQ1lpeTFIfXdxNzlLaFMuLipIOEdzNk8rSkAlPFVmWkw4M3tWa0hqZzgzYTNbZk9WMTFMJDJBLyMsSmAkZG5WXUVSbHhONEUlWFpoW1Bqd3IqUTRPYDcuOUwhdTthImosXjZRPDt8eD1jQks0eDFfPyx4W1tT'@;
put 'bW0vVTUkJipMdEo9dzszQ31VfEVHO2FgVm4yWU9GfUZLXl0wVyN6NlpKXn1HKytxWWE3WmJJKzI5cTFAbSJwSXYyPFdaIz0rfiIzNy9SKit3NjApflhBQHlMWCVQNmVjK0NPImJASjpiLC5TJDVLVz02V11TVVZyQiE7dT5wP34hOyF3NDRBRE1CRDVgNyZzIXZ9YGg0dzxkfEUhZGUsbHgsQmIv'@;
put 'Wm5Eb05bNjdOVl1oSGxzMnZrS2ZSRyJLcW4xY30jWm9vQ2pFMUQsamY+K0RmZzdJYSJwYV93ZkhaKz9VMz9mcVJmTHI7ZDlMNExaYU03bClGajZIJl55Ikk6R1deNWBxJT9WU2dyaDVCVyQsUk44cF8jRHhAZHtYdy5CM3ZJTyxjZTFyNlBJQ21VfkszIzdZTUpYVk9xYDlxIm0mSzosUntWbjp+'@;
put 'fil2SG8qcHBNcklgRmQ5S19XTHcoMjhJXm94TFlgfGJNXVt8Y2ksK3JMd3V5LktndkhPSmp1Z3JNTnleQlhnXTBrQUdrOVJkaFp+US5ERyM6KFpSIXlBUzR3aEkqOF8obEVJR2YpazBddGl9RU99VUFzcSw6MXNLbyRwOWR9ZWhOMH5SKU1xNSV6NTo5XzI1KEtuOWluXUs7SGVWcUA+P0kyTyFB'@;
put 'YyZqaFJCQUl2ZlB3Vjo3QXh4YGd8KitJWHc8a3k7Vks1c21HOGNuOn06Q11mbEwjVkhEQjA5ekZvMz07YmNQQWowfStFK3V7eyg0OWNOVEgjbTwjenY4aXkrYDpdXkM8ak93dl1LaEteJnxxc0t5Ii49Okdud3BVWDVXLz13Sm59Y1UuPHBDRVNxc0daO0xdcTh0dk5bMlFufGhBMz45QilFN3ZV'@;
put 'YXFNJWs+ZFtNRXBjRTB3TW5xeyYqdDhWYW02ZERBMnsiQ2N4a1FGWG02eTE7PH0yRXBIKkd2fXxXLHJQdmE/NENYJEVwc24ye2N2ZUkvUX4sfFArYmchZjd9Jn1zWkBvflo8KTxNam42blloOXdJXXFTZD9dKmpVTW5MdzdXVWBoZUNdZllzZ15xeylNPClUcWp5UGhnZnpSQFUsSig3UGg7MH5s'@;
put 'Q3o/VFhjeHVMW1hpUnpQTStufVRifCpmTVRadXh3N0RKU10yV2tFd0VgIkZpPSU8ME9kQz5AMnJpNlZCMHJDdi51SyswImg3UT5eI1ZOXj82QjVdeS9tWGxZUFcxK1RkOiFLeUV3X1t3cGslb1Z3ZnhdLHxoMDEiYTg+RkY8d210VHs8I0l7MHJCNkc+V3w7aiFIQCE7bXNmdVpKQj5DLE42YiZl'@;
put 'YmlPeyxaP0Z0SUojZ09wRyM1KlY+K0ZHIz9mWFNqOlJnYFNTSHRkVGRacn46ISNdYWMrLlVfNDw/YzxbWXJyK2ExL3wkNipaIzttYilwQSJ6IlA+JGNvIz04IlpTR3pxIUFZRSJvdW9ZVFhMYWxoQXg5UikqUnVDRXU0eTxWL1VIKEZ5U04wUURNcDx7Lmd9M2tobkliRE05ck94ejljX0hIaWJp'@;
put 'akIoJEVnNjtsfTtKeD83OXMzMWkiN2ooYUUqIXZeOXx1Ml9kdzY3ek5+MXttOW0kfXIjQlYjUXVKOWpVeWN8eGI9SUVYQnJ0RGZyZlR8diNZTUAjTyxIX3k2fjEjK1k5bipOP3IoRCR4fTpuMmB0VlpKY1IySChwNHM/NzpRfDxaWnJ8PEh2dX53SDZpMFI3PHhiOSw6QTcuY3o0NSFbL25wKj1Z'@;
put 'N0x7cUJeKlN+TjBgQUohTXl9VVp5QlVeKHFQYi90djN4bnNWT35CcUZHXkJ0QnA9PWEvYEh1PX5oWHVWejY8KW52Zz5qTns+bTB0flB0fCt2UkgpKUgvdDMsSzYpOnlvY3dCe1RIMVg9dGNBeDpRYyxOJjQ0N0t3R09FI3Y+Z2giMiUmM2R2M0U0WDtHZGJodV0xOHJAXl1CbyxDb2VoUzJHIiIu'@;
put 'aDg6PENydDdYRjYza1pEMSZSd1BfYjVpKHxbLEZOW25OLyQ1eSUjOVQ/a2p1N1VIJEwhNzp7RSs+YmMpdV5tWkwpV3FeUi55XWZ5YF1wPSZTb0siWSMwZVgjfGw0cV5fWjQhLEBrPk1kTixZMFNRNVtXISl2SnxSOTh8fDc8b3RlfV1JOGYjZntkQmNyfjtwWUxZRC9HdUpQZWZiaDMsI0BnTSVR'@;
put 'cFBfcHRfZHNBI3smNGdxb3xtIUBecixLfl1CaisxaixmYnY7Ok4iLGZdP1ssfVBUY1tNXUpIaSNUTyU3SWxjZzZkeEo9ei4qZmxuND9tZDNNXWVwaTQuKldgWlAkQ2xjblRlJX5QUkRdRm9dV01Jey4jV2RNKHZxOSJ8Q3RvIT0/fTliL2pCXzF4RT0rMUtNYWFfPSsxPShyaFl2ZT1lQk5LUS55'@;
put 'VG5FfHZtR25rKiUkPFtVZ2pAdXlhMTFDfGNLQXtsb3BRQC5VWWgmQFgwdzo4VjdoIVlwfjlxQD42JHErOD0od10ibD5RPnoqM21RVjQqQ2NmMmNUNEdEeX1POyM0bkBpdUR3TllaYEtLWWFHL1NKQ31TSm5gIm1rSzIxPytrTWlGLDM3ZzwwRVFFLEdMVEhTcEFedW9jZlMkaW1gOEI6I0Y7N0F3'@;
put 'YkUhZSs9Sk1UUm1PY1ZoYmpXVTQkSyxYa14jViVhT0ZbZ01kVmhRSnFgKkNqXjxuMkZFaFFKcWBEMTtgKi48cDVgRTxENmI9e3hfI1hON3FlaVQvM3pnU0F7OXQ2IU5FZExjUjBvdyF0eiNVQnlZWzVtSU8iejFWanU8Rz52QEtLNm9gK1BvTntMdDN+YH1GKWJsYEsvaUIsW0QxYmo+Vno1JjM1'@;
put 'aixxSWdSenQ0Ql9kKEojeDlBaDFHO1ZCNTdHc1QiO2ZLQnpzPlVZNy4pdk0wNSRbTHhILDhAL35yfXRuRllnOUsiVTs5WTY+UGMsQiY7OlFeNHRAd19YZyUldm96L344S1EuS3BNazR6Pn1ZNm1mPjBnZklqb0lsJCVdPSVOT1Ihd29sdlA9RS5FdklgV1NLZVQpI2pyLF53UWtNX0MiUHksWHF2'@;
put 'TTd8UG9lYzttL2ZVYDRXREUjcmVdLjxgK3NtbWszRGYxQmMvZFAzdVV3RGZzdW0qcWklUDRwUFszOlBPU0RBKUAuP04mP0gvSWFsdXohX2JBe3BHSShXJlVKUC5jLmltb2h+WSRvdVd3bGZEQ1A7PEBgQz10VCwyYnNBNH0vO2p9YDssSU9AOXR8SG5feXZqKFVhR1huTHhqTm4ocmt1WH1yPjlQ'@;
put 'STBFOXZMJXQ2QVU7SnMmdEpeRUV5d0okX25kNFVbW211Iko6TkkoOztzfTtLeVJPYk9MIlc1PV5efFFpeWUlY1c6S3IkX0JONS5AJFZpWG5yUjV3UlgqPUNPZzlnZVY8N01dWT85aF02OUgxQCxMbTkrPHFILDdhaEJpYCtWeVUhWi4mS300JWskP3EjPW45cio5T0BWS3FvT3speTFOTUVHOkJp'@;
put 'eClSY1t1TDZVYTFAYV1YMUhVdjVDd2JFTWMvQ0lLPmReVVRGblVJPy5QdyRpXiw0Y0ZeVTw6LyR6LEImKXIkOy5ZZ1ZgPn5vOCwrPFArbmRrfmAxRn17YU5EOm02b3xUNjJUcy5dXyklcyFVYytmZkd0VFosKlhEOXB9WDNbXkJuR0tiWUlSRldYNUQ/Y0lDU3pZL3ZpLERnVltlYTQlVU5jMURu'@;
put 'QnFPLm9hNFNSPHUjcXRENlV+QXpHIkBRMjB5YSNzPGAzYXh0czhUVXkkZ1ArSWBVODFmTj5mS3J1a1BNc0l0fG0uRHFWYWY3cVMpcWAyKWIxLml4MWVMUE07V2ByKXxbI3RgKTtxdFVlOkBnW2FSM25vNGpVe0JZaVpJQil7KSZLMllyRSZgT047RncwRGYjQmghL091Q3c3XnksOVp7bEJNcUBg'@;
put 'Ind7R3VXUXdtZCEwYlg0dUlMIzFlYzw8d3d2MiUsIX5IcCM7WGZXKmhwYnQvfCw2NnwsSzRSWmdpR29PIkMqeXosd3oyaGFzZ1B5fis4dT9OOUVNXS4kZXBpeSRUM3lVJXdXbzpyK1hNM2hyd0AhNiRPaHAwaWNUN292eyNFVFp3SWN+OX1IW29OQUVrc3lYX344N2JrO182fTxscCJ7Zz8vPld5'@;
put 'Ul5wWX5GQjNqb0kwV3hxYWdqWV1GRDlrb2o1KnxgeVlhN0xBcltyMXZkWSFgTk1kRzFZLnFaW2pWViNLPFVGYnA8cDhZZV4lNztwdWlfLD5LW2hYfk1yIzN0b3pPUTsyNVpmM3l3XW1FOmU5RmIoKDQ0TGYjXWRJRGlJS09eVlMvUUZeVShWO3A+U259cV9tdUtIZUJKTC80RDZhfmVQPXQjNT1W'@;
put 'NDZSNStQcUNuSTQ1SXRuZEJnZF49X1U4RzhDOExASyglRFJEJjIwX2IoV1piPmUzR08jSDIpeTQrIVdYKHMwWGVCYEh5RHIjTFg7cCE4bEhLPmh8K09RSU9TNHVwaGpEaTx6ImBRT1ZvVUh8SkJ4R2J3NUhEV0ZIR21mLyNOd0h2d31eSjd1I1ooSkZlM1lBP1tlanpENzgsNXdgRFByI3liW21F'@;
put 'fDs5UnpbOzhGPlpqZ0p4QFdIPDBYYCNiWDcqWEFrX0V0R08sTGlHb09Te0loM3U1eHlBMDNNRWh2OUlBbTxwdzxzMWhWMnZQU0JeKnFqOGNEaTEpR0ltZVo+OF91VVQ1fWNRa2dPTUx2azBHTnIrbTliWFhIUmNxdEpLOGZ7QzN1ZHhpIjlyUUF8V2JFQXpEMytba0tIIXxEQXBKNVhLQGh5aU16'@;
put 'fW96S2d3NVg6KXNFdS9LekQzYUZRWTpMOShyWiJILCZHekcxQGo3UWcpayhpLHs7I2B4fXtpIWV0KC5pSEx0Vmoxc0Y9I0IoU1I8Q0g4RGUiVn5dKkU1bG50d2t8QDhrT3w7SDU6fH10S0g9MGZkXnw1dDU4fjB5d0A7UzUxV2pWN2dZNGkmXXRpfG85IzUmantPTjhDQHY3Slo9SE96UjlWSX0w'@;
put 'M01pTD9XX3chfWFOWiImUUFmNnZAXWZWNXZvSmJXOzU3RGZtRjkxYjhRNXVSNzhpRz5NZlhzU2J3JE1XL007cGtgIkB0PHZPM3c8PlVqcWpkMixxUGMvZVg7eWc8ODwmSGZ5fUs/Sl5GQWN1O1RPNjA0SCsxOHBWLlQ1OnpFT3ZxMHc4dilHdFBrNVVPYWdLS0BTL1tMSzNgIVgxMFpkK3F0Rlhl'@;
put 'Yio8OmA+a0g+TV4oPj0zKmRwLjNfaGFPd0hbdTo4ZXddM0FpSk8zOVY4TjtmWTkkfEBpR1lSZU1UZ3U0SU8oa3JlfWUvODIxPjRFNGdpLih6ZUlgMUNMVl49PVJNc1dCKXtJVE9fTXdgb2tOcHhUdU1zZ1ZbI0NiNytZaSJhNlpIIUlsIV84Q30hJjoocClabTUjdXkvQkgvQj9JVU1SQHd1UE5N'@;
put 'aTk4aXooWzpaUkRgY3BjNWgwZTVofHRPb1NELEY0X3g+RFhdQ2YhJElONiQ4bzkiSDZfUF8jRz5Db3FSWHlDJl9nQDtiRFgwc3IpcDVabGFDOW0lY2dzRD45WDVXbkdbTm9JdilxTGpaXjtDdlo/RldxdShkZVNpdExsbnEzPnJ0OjdFSzhrYHExMjUzYmt+RnBWKVFuQz97djQ4fHhbTWVWVXcz'@;
put 'Rlo9Y1Rfa29vL0thInI0ZDc+QiJIbmZ6bTQ0eVl5fFA9UGR6V0wrXygjVFZKWUZTNlhaK29DP2B9X0g7aCMxUHtARn1YYytnY15Wdl86NXYpIz1tWE9WZX0mdUIvdiQ9SC5mPllVZV5QMFRjdVRCfH1SS2VgaSRPel93aDR3VixLTlVWQi9XPjYqUE05V1VLWTZeSF47ZnVncXolN3N8THtQdyRR'@;
put 'L1RVSTA5JUwmZXRVT0tKRlBEeFtLIlF4fUpqK1oiKHdgb35zJlZ2VyFJPFZ5MzFLK3B6dTZyMWlXTzAjd1U/QEZwR2FwPWU1dm5AYGk3fHB1b0ZFYUdtSWdmbz9MVSlNP1FYWERMaUJFJSxOMVJRKDAvRldWSThqU2FjW3QjLGNib29EVnhnYn56aFBKeCZzKnNYUFc2fnl+cyQ/fHN8dzoyc25g'@;
put 'JnwhO2ZNNF9+PHx0IykpOW9bXmB6JXQ2UWNbSFtfWHlyWVVWak1AfkVTbXRUeEg/Ij0xJDgwdkBlJDE4eXlnOkFWIzF8XyN6KXdvJThSKGBua2orW0I0e1k5Oix6bnZRfThpQExWXXRRNnF5VjVhSHM0Yz4/YEpFRWgvOFc2YlM/OWxERDdFMDllYihCRjleLk0vTjFaW1F1dF9IfFAxdFVIUDVj'@;
put 'OzRZbSNHLnxQQXV7QUtkM2ZVVkh9IltxemFDM0VHbCMsXk08IzF0bHooWDNaKWFGYUchaShgYmpmYjkyPis7USw3XWdWNHh7clBreTRTTDVKTE9ScXJwZkkqfGNDcmglSHsmVnglKHNFKHxXXzJJTyp4KCRFbCJOUHZkM2tMcGNCSmpVTSRNQ1oicU5pIS9SUEFCQVJEUHlAPkJnKXtTMyI1TGVS'@;
put 'MUgkfCtgNExlNWM3OUtwZ0lZaythQ21nQ0NXSl15OU16dElfU1E/P2pmfGA/JmFDaGYmQFZKP3J1NV1uR0s7KyZRRHo5L0xSKkg1Lz9qSm1kTV1ocCpEZnl1T1BBQnh1YVkwY3pEXWhETnd1MXRNSHl3VlhVellPW0EhWSZhIyhiRF1oeEI5Qk9CVU5oTj1ob3VxSXEiUEd7ITJLeSZoI3EhP1Bp'@;
put 'eHE5d1M/KnQjcFJSUEdsR11nVjd8WDZUNiRGenp9XUlnX142KWdVNTh9Yj1pNCIqeCJqVVdXalI2MVtyTDdlRHZuc2g8aUtfeyJ0SWptNGowZE9sJWt5Sj81U3JmWzs4Wl4wPnpWeipLJGkvIUlaTVoxayx2eFpNWktILCkqREw0KHxCezssVlVyVF8zNWgxSF84L08jXVFFZXM2Wz5yK1U+OWIv'@;
put 'bj5GKDZ1fWpsVEVKendYS0dNTjhmXzB2anBJSF1yVnw5a1VUZWVyV2FwISlORGJ8WzxnVmxCV0I2Zj1HWj82VSE1VGMubFM1VmZZK10veXJTKVk5M19JUlM3ckQifSJYTGoyYVohVShjK1IvLlhodDIuW1c+Yj40NHZxIjdoOjtDYlRad0RYL1Y2dnZXfld1Jn18RT5fTFg5fWhTKGtzLy8uaCNM'@;
put 'PCxMRUxpenUmP01jYlRqd1gzbUZSfi5zRkt2eV1QRCQ4IXg/XzQ8IS8yOSF4JkwzOTlFaG15OSF4W185dGklR18yOnpIZmk8Yl15UXlhImtqc20yLlFiVkxyU1FGZCRUMT07M2t2KXJTWD9obGo3NmRCUUo9fHg9KnJTWD9obDx3IiQ2NGN0I1M3alRbflg0LkYpOi5iZSYwOF05ajdMTGVyKWJx'@;
put 'Uj8hYjdYeFh6ZzFoQktHLF0hQCZLZUFrMEd7blNPMCRlY3NUKz5PUj9ATmlnc1lqKlleVkFSL1Bed1YyalpPXWtWIltqLm4lWGliRUtGOVhtPjF7NmtUIVpmS3AkRSg7b3pfO1VAWnVyKk1+QX4oOUZ6QEBCKHBKWCU7RClAfSpGViJLJCxlJTA0amkzXWdHQX11aFg6UUNYVy5QeyZfSWsyLCJN'@;
put 'NGNiJG9RSG87bk4lIVgjXiVVXU9Ga3tOVT1YYWRPcisjTiYkNDxVJGtVUzE0Yjoxdix8TkxhaWlbNDY7IlhGJWkoUFVFWVtKeXx4dHtHfFkkT1J1QERqJTQ1c0tlXm5hSE9CVHYjIkBhK1gyRDYzb1tefGpWcXVrelpScVVYb0pkPElNdDRNe3VHejByIl0iJj40Oks0bilDOmg3YTJia1tOMVk+'@;
put 'a05iMD9jdSYueFdRbVYzZk9XMl0xeiVhWF9zUz1HWUR8UiRQL1toITZpb0UvKVlpd2M+PXoxXXxKK25YPXxjRWJ5MTw2OjRrQVN6QSlqXk9uZG1EMFIhJC5TNzwsQy81PTBbWWRlO290Yk55TFVldDVmOkhURj13Tyo9QzBHPXtHcHlPQzMiR1sxTktmQV4yT0pzNC8xZlR5IXk0PC95W3diOzAv'@;
put 'N0AsdHMoOj1gfkZVWWwpT2ExX357MlM5V3ExYFdYTCtFVHgqZ35CPjZfQSh9VGwpV1IodFR4dzFocHlfSndFb3FaKmkza1pDdXRfJjtaWT9Ec3BqNDlZY3wjQ29MWGlwQlBPMDE1NC5uPTg0NzlmRFgzdHw+dW5ASiowTWN9XSFRYUNCXWlaPWlsMXkjJE1nWVEkfUljXVo/bSNfb3c4PVtaZE5K'@;
put 'eGl0dUVLbjdNKlgvQ3JKfDIrUChqaCtVckRsTmJYPCFzdXB2YlBeOzs4VTgzQl56Q2YhWEg6JEs9PT5sTTsid11DSUlhYHtYYkhXaVlFfUR8ZWlROEV7NWpLSUoleltTT10jPGwxYTd9SDxmTGBlUy5MZGxtWk5SRjN2NzNpVXZYNzhMKHRyc0VFd3VvTntDM3UmQ15pVmprQTtoVHZvb0VZY0Rm'@;
put 'RyZ1Mm55UV5IcnZYNzhMa2BhTEMrQD4jZntDM3UrQ3l6Iys6dFdPckJCR0UrODo6LkBTXnpyb3Bzb21WOGlHRE5ERGt0Z3w1djVKWW1deGQwZUFpfmFYRCpFZkV6QXcuTCUvdGMiIntGc2wlOH5YfCYlZU8pJlQhfnpMR0c/OXVIOSIzREpGSThPe09bOU10dlEzNUJ7O114KmNbdG0uIytxUj1S'@;
put 'QGlsIy9tM3tTY15FKzZLN0h3UjFub25mcW9FTT5pe0BmMGBeMmVDW1ZsNyNfTnRPUjFwOixLOlsxM280OH1ZOjhDa2dyR1A5NVtIOnE4R3diRXMwNTluWy81TVpPcmFYdHxyV1N7OHtvWj1NZTZVWlckPHluVk1EIXpxPmhKXV5nc0gmIUIkP0coYDRSVjxnYHRpa3VfSl9eV258eTVYZHxMb2Bx'@;
put 'Mm9HKH5CKDZaZ3o+UWk0JHdscUUrUFN2W3FnaWBkIl1ZM0Rzfl5bVyprZm9XekVXeTMiOyRwZWFMP3EyNF16OjgjXT1aOHwhXzMofGgqfXZSfWwrPTl+MlNQRndYeTVkY1oxOFNAc0kjKEhERDYpXXZ1cDxNOHduY1FjV3t6JUBvbU5ZWVNjPlJWRyp2eDtJeyk7QjVIUEg2JUIjbEFDdUdTYXx4'@;
put 'Y1EmTW1HbDAlM1FfbUJNVVcvUVMrW24oYFcoQWR1S1AsSXV5WSYkRWZ2MjpOcE5nJlJhJXZ6Z0VgQ0BEfSg9UFdpNlJvL3psWkgmc1Rdd1BjU0pAKmdnZStXSkA/Z3U1P0BVPWFVZntrZT4zIjNWWSNWKl1ET3heOTA7LCU9P28kRVspTEZSO1lLdWUxISNDfWV9aCZbLltIZEpwNV9LdXtWVVZD'@;
put 'XnJueTZRUGJqI1NXVClzdVI3fCVlOVs1JjduPERYPF4zNlp5KVE9YzRWNHQhYVpbNkJZK1ZVZ1t1IipbUGg0bW1lMHd3L1E+RGsoZjIzK3FDQGFIPyJpfXh0RXFuMCk2Kj5KJDlPeCZUU3UqVFZCOFtxTjsoPkpANHJDXz5aTnRNc0N9RURCaHcwXkdocXdWaHJzaTFIUWU5T0xxdXciWDFlTGlX'@;
put 'e21YOEg5YHApclp1fHRKUU9iZWxyLyt1JE5vJCp3bEpeOEF7WGVGfixsbTkzJisscTMlUFNhNGxsNmhFRmZVNSVhVElFXXV+aCFOPH5mfl1qez1CSUgzP0RjYyp1XzV7VCErKXNDQio6Xk49THB6fWY4TFBXN25Ua3MoSjBRZTRHUmJIMn0jIn1lUHxIV3dCP1tRRWwjSU0vWVRrS2hRSiU/MjU7'@;
put 'KXd7VV1YO1hfeUtRZTJrUjxwe1k0NDVFLzx7UitkRlNPTHd3Ikw7KlVuOV8xYD1yXyUuYilxX21rX3AmYHQsPS5MdXFVdTQzb3R3Wl9pNEVYaUZVTkRhKEV7YHY0Xnlxbz5tUTd1WHpPd2VUOFEjbVFEQ2x9KzwkOVdPSE1LJEVZIkYhZW1QVXcqQlFERVh3bEJHbmFXNmJEU0RXTkBQdiYmXkB5'@;
put 'PitWZkdNbCVbRFQ2YUM5LGQ0TDMqLiJAZ1JaYUBOOTx6eDJmT0ZfXXUwKCJDfV5HZ3BGeFI4dmpbaSUzK3Rtb0g3OWBvaCsxZDRvPz5gQCsuRWs6W3Z3NGgha3wyKjhpMU5RPEBTbjYmWyskeHB1Y291SHNlbT5gKEZTKy8kXkM2JGFzKHRwUGZbNS87aXAkYjgic319W3QkbCV1d3tzND5ufW9+'@;
put 'bElCVkNaKWkzNmpTI3VIVkM8P0ZDPERzT25zJWlSJWswVGZUJWRjOmNnL2M3Pn0kT3lHcUdPOl5JWF9bMUNEWSNkdmNzamYvR1E8cWgoQ051QF03OTk6cWNka2BKUHI1VUs2TDhTZ3lDL1VuOUwwOzJlUDZpNnNUfVovfjBpQiU3e0JCL1MzNls7Z3wvJFc/VCEmNGRWUElPS19BWEN+bjosTypv'@;
put 'MjBwcEEpZTtaPCFrWVZ+MyhkKyFoYyVfejNOI3lAfjt4Q3N9LmVocG0lVVM7OSJmTHsiUGs8enVSVHImJGUhJEFXRColJCNrMEVdTzhRMyo4QyZEJkQmRCZETHdmQD8mPS8lJiJDOVF4P0hsSWw8WkRkOWFCXW5Pc04zPCFrMEU1aUh1XnxdMi8wZTtfZiFxIitjVnxHKjR8ODduTGZwPVdrWTtB'@;
put 'bUUkKkhacEhqRSQ7VlFHdHh9XSh0cUAodFF1alhZYkBGJjJGK3opOmErIy96TyR5LjUmOU9IVy8uekNGLilhOFs2ZWAhK10oS3hsbTRXYWRNVihaV2E9PmJfcjhvWzgue3M0QHI/XUZmWGM6bUhIRixUVX1RQDw4O2FtNVtYOls8LHRuYG05IXxFam44QEI2cWswYig9OSE0I3UkdVM4IihiaG1z'@;
put 'VCFiPkpnJUE1aCJ1N3MhaH1dQnI5ZTNdLC9SNnJVajVqUkkoS016VEhYZG5bWFUlbzRMM3sjaC9qQmkuKSU2YXYwTGJ+cWw1Q1RtJSUlLHglPWZtWGgrWUNjc2s5b3M7XnFeZUFkeUNEe2oySTR0LlklYi96LnNybFg3azlgeUtLRlc8ZiMmO21zfWZqLy4zbnw2aFpVU2EhfFluWlVoOTUjSng/'@;
put 'fUtzI2BCZ146XWx7ImJwLlk3NFJhIyQ1aHVXKkQrKl8iS0VVeS9GYSlUPHVwaHhAXmpndEV3SHYkQ11uJENdfmdFelF8SStBQnQ8fUA9XlIrUVN4KylgS0dYbjpZa0s0aGJbb1txfmBWPH1gSF1TcjJub1UhVFM+ajBTS3g2PHVwOCpscEhwdzRXdT9SZVpVMSklV297YXBpM2hESUgwR0l9ZkU1'@;
put 'fiRPLmdwdj9LMiRwblV6R3Y2Uiw+LltSRlFSRG5HWFAzYHJtOyYyTGNZM2J8SCVQdWBgOHZjejZyVV08YEt+cjBHKF19KUtUOWV2d2U0VHhfKGV8ZnlaIVcvLFR0aHhTQnhRaSJ4NHFTcz1eOEMyRHNWRGs1Q3VtbmQ3ITtAdntge05fMTElW0FaXW1+YlV5NWRWeWhzX0ltTGlNTDN6bW05PHg8'@;
put 'Jjo9X3tPL3VmUD0zSHZAZE5YSmIsI34ocldnSm9QOVNyQXl0Ln1uYSlfI01bJXR+JFpENmsmWWxobmtWO2YxNXdBclhkJHRSfGo7RzE9WUVwTjN5VTRULk5GS01lZVlFaVh3WXNlJiUvREg9aUMzZkBSYiolZSxdPypeenspU2J0WnJ9VDQvWFVmdywqYlVEMyVdYVVSeXBFS2NdclglUGU5O0km'@;
put 'd20vRHR2PzlTNHApdHR+YiUzPWd1LlZTJlJVI2E4O21XXyZqOz1GUHBzM3h2QGxLbFM3T2RmP21IOCVQKyE9dXkyZzkkJk5MOyh3P2UlXmExZSJYalVjL2tCaF8+WlIreipmI2c5UDgrMWF2JTczb2RSYiJiUjJyPHtIeUxUSUtdQGBdYls0c0huMkN4ckFuSUtJITs5TE95c097fEJsOiN9JXR1'@;
put 'XkA9azp7e3tRK3wyXW1rOCVBNDpeWVNFO19bSTVqVmN1fkE5d1kjJnk6LiFVYkpnODlRZT1EWnkpcTFvJVF0PTEidFIuZHhbWTZXRyh+bXZmeHdGZ1pma2hxamkvOltFeGJsQFFKeElhV08jUW1ALzBaI3JnKy9lRHQudXMjWiV9Zi9lMSF8KzV9fWVjZTBKNC9pKn1lY1VHbylyc0NOVj8pfWtJ'@;
put 'RXVNSXhbKld6MXx9ZGYkYVBicmA0aGIsZUQpNyV9a0kmPzl1PDo4fWtJS35lYyYoeFtIdzNoYmxkSCxgNVcvUXFWWndOe3NpJGE/YnsoR3JTTiVaZ3owZysvJnxyX2thUTkyInFPaGxvN040Wk1tIy53KUI1ZTBAeyhQeipXRmMsTFopQ09deUU2KUJGYTMsQHRvTCR8KzU8TGhzI1pMYUUwWFli'@;
put 'MSZ8Kk0pZ0ZjempsMFhZMjBnRjplO0ZNNHQlOi40WyVNIyxMTSJCaCNVRTsrPVA/QEFYKV1sezxofEQrV3FJQX1wUUFDWShJMDRCbHxlUj5AOXVIWyZ9OEltYGVYQkA2fThJWTVZWCpPQXl9dWlIRGdsMT9eZU9SV1F2UjxYUipPTjdjRX59Zi91V1dXUXZrfDk0LzQpfTBJcWBlWHBRIUdNSi8s'@;
put 'LlElZzZMWnxPUkF7ZVgzKW58T1IuQDl1UUNCPzcpXzA5R0I7P30wSWdgZVgzKW18T1JgYGVYMGA4fTBJOT85dXdhZHNhRTh8OTRkNiN8T1JOKmVEV2xtc2J4fX1mL1cxOXx+UT8qZUQ4ek1QdURLMCRhOjZtfH5RPEA5dXNHRE8rVzZJcEdsYUJ1Nj5FRytXZG41RTxpcGd7KV5XNzwqJDJhbngr'@;
put 'b0VZYGNaV1JDQE0hWzh4VlI0REdjTmlZakddOHgkUWdNWFd6dSpMZ1pZbENtUEd7b000YSlMUkdjXShsI3c6ZzQzUj1gO1k6eXN8bE1IRCR8WlE7aWhzSHhEaSh0QzBxej5ATSVFRXVzSHgyZ0ZjVCVkUEMwZ3g4dTd8WlFsWG9zSHhtcVMxdkBETjEqbXMwYTtmQG5TMWYkWyQ1W2x7XVA7SXhr'@;
put 'N18+TSZ8dVIhQDl1NTczRGpVYnhzWVYmJitYKHZTciwrVyZJQX1wUT5AdyNUV1N2Z1ZuNDJ6fGBDal9rU09oRUN+VmxIOHBRPkBlQkR7dEtRQ3VzLHNqZjNzaUVTcHtSeVk/clhFQSwpfVVJajV4dWNueiV9SXdYazQ8d2Vec2lDNnt2dkdiYEkwVEheV2JlYFt4JmpIflc3ZSxEcnd7X1loO0RR'@;
put 'JTRlVzZoO0VjXW4kZjlqdyUvSiVbfUNKKUdyQlF3WDRbY0lrYFptRnJ4USNRQ3syYlZoVDVUV0l2cHFENjVdaSZ5Rkx7SGg8MmdYQi5NKFpRRkhlRm9PMjs9cTAzfmJHZGUxa2RdRSEieFojaHkuVmxTRSRLdzMkX0M/RClZcnxROWhmKDhzeFEiNig7ZlttdzgyQ0lSWjooLi5taFNVSUVzJkNW'@;
put 'WDwxcEd+TXNEbyV7Y0VgV3RwXkdLWnMzJkMwLjdwLCMuLEhlb3Q4Xj14ekBBbjxwYCooTyxec0AzQ1E+O0NwfEh1XypqOjtDIlQofVNbPF1KQUIzdFRDX1ozbGlEUTUsXVNBRis+QmBkdDpWREA6SylrUUtBVXRaM21nVTM1VTl4TSU3Wkc+ZF5vN2BRJDVTUFUjW280VDh0aWRlNyY3KzlFLDc9'@;
put 'bWJUO0o3c2dxeTdZJmhLPXdMTFlxMT5fPnZ2fkNjPT8yJF9udDhKOWVQblBvNEF5Qy9oUj05aDBKdXE9Q0dSdi45d3FRIT1GdzovZjpBWG1xJm99Z29bQkY1eWVMJFVYOiwpTEA8dj4uJmQ9dypPPHhUVXVxNWEoQzllKHV4dk9kI3RZcFU6UFk6dGZzQitmdGllQUdkOCF0T3NlVW1iPERyVT89'@;
put 'd1dNO2BUI1txbUJ3fFNMNVVtb3deP2FXViRXb0piMHh2QUMuXT9pP15nZi8sI30sZntgbyIrJXRLUWIjY1RveytPbWE0aXxVJHomI04iUH5rUVBPX2xZR21aJnc0dTNgPGdEWWh6LCwlb3c4ZDdJbUEwa3BEPEIkcFRrPzl0ITdienhXOG91fFBuTiUmKFAoPnhyMDpvWDxbKllCc0NVcHoyN05J'@;
put 'NG5bQUEoMzIzcWJndHZ2ekBLPmxvPl18P20xI2VyTys7eDBDQVNaeEZbMlVScGRFKWg6PXN9Q3JkJCIvUWJjVWhjODBzdF1+UnxLM2RBTSZuUjRocXM/M0MvVDwyXntJYzFmPzREXVhgXlh9cWRGYXs6Tlg+e1lmdVUwUzBZYHk8TzVmbnJnPnhFTiVtUWVucGc9IUpIWTheZmJeR1V0fCojdTdb'@;
put 'dWxhaGYoWkZiRlhqKXdYMUt1X3gqZW1UUFNSVm1PaHJUNVZiOWYiTyJfTnozJEJAVj16RWJGISEpX2JCJnBkVnRCeCRKT1NIU0pdb1FJVTZ7XzdxcnMhZVJEOEhBdTpJTWMmWzFYTThkJjtXMjUqNjNzIVcoQ0tmQEl2fF5ga1hUXXR5aHRibEdQQVVtTF9PcSNwVGlpYkY7elVfJSNLRnlMTyV1'@;
put 'I3BUdyMiRGI9dF1tJChyUCw8JTRLNjMiLnBEQzMiZ0k/NCQpfXBERWhjRj92Z0pNY2tHVVhpWWs+Ql9YeyVkTDx0fS8sKClpdWRCKTp0K0ovSztQJWZXSyx0QGVaWVdNOFcwbm87cmYqUV9Kb1hUaTBrO2g6VmdNTDYzcSQsfkEzSVRifFpvPk95QF5zalF5SipHSkU4SkssNlhbNmo5UXA/PEA4'@;
put 'RixpZHtYW3UzaHkiXipLQmE1YlRPZDt7aDp6PnBIRyNsR1ksXlZGeFIzY3BZKTVqfEskcURZVWhyT3s3O1tyZT0pKj9qeTtnVVYxOzRofWY0PXUufWZUXytWV2ZmVD9eeUBOJXhVOlcpPzI1MH1HTlo9KHZHcV08dFZFeUU6ekAkNFlvPFdRUnp5UUF+c3ttcnM1YFolZF0zQ2A3Um1+e3lVPT1W'@;
put 'TkUxbGlJTlJaIkwmXS40ai52SEIlSytCW0dLOXhOeUIuLCtGUHA/MTxCQDJdXlVoZCFsbEBDeX5qRUckaDRfV2VuLjdgZmUsdGRURT50XiF1PUFOQXBSbixfKmg6QiRKVFNfOyNKVENfdT5LPGZiYH00dilyMnZiPXYyaUlhVWIzKEJzJThDPV1PMzJvaF9SKSpvfD5KLiFbJHhXL083Z0RKRDVt'@;
put 'X3RIQiRHYzZiY3gwMCRrUkU/S2VbXkhvbEtPU1B8IUIhJF91PUAjVW0zJFFTfCRTdS9dJXlbSntvW142QWBdYj9yPH17QG9AMTJbfiZgI2dXTGhBNVRtcndZM2JlPFV4bWtmQCRGMUY7PXtOaXtDKVJbKCMjYjl7OjAuXyhrO3RAcXlqZ3NYU3xLPmc4fDpdUnJhViJ5T0ZsOW1SZmxzIlNzJFh7'@;
put 'ci98VTNmeHJKLldNcU5NZzx+cn0oPTNEVU9KQX11JC90PGlEW2drRkBmTSlLPDk2IUY7MFFCUC9vXXJbcWZzRExeKUQzaHFUL2lLM3hTb3E1MF88LGguS3Vxb0RreV1ZcyIjS1I1cUdxXjMqbyJYUzRuMHpgSG4oRTk4Q0dWQFsxZGlwdTJ7XilVb3RreEVJTUwyWkMmRVorNT1IfSl8SExhJV1e'@;
put 'fXtnfk5hbFIqOGRpLylKNVhhSksoPWVrUDtZdk9GVWxpQ3xtZWkvKW5VUSx2L0BXInJQXygjS1Z5cVUpdFltaU8yYio1IVI6Sz1oJEs8MGBpQmpOPyMzS2hMbilGUXBzKF0weWZCd3smcjM2Q11KeS5zMFZPcyMzcHpDLnlqWCVVeywwKTcyTHVDY0VIdCVuVUVFRXtDS2o9LnEwVDR+Q0sxYWFe'@;
put 'US9dW0kzK1NDVlgwPHpsZjQyOzh0ZGArKn4+bXIxMjR9MV0uVVV6PywyYjdKfFVdQDVCNSN9P2tAQncqRyp6cU4uUi8hK3pyNnNOYGE/MXE+NjdeeTJ8bTo7NlUxWG9dL3FmISVjaXpTYjJkN0kjbmZGcVsrQiFwJmYlPmduUUVHPCJWT2o4OH0xbF9sP1IwST99ck9odXZnPCg5LnAsUTk4e1px'@;
put 'd0MsKTRxUFtQL2NoYGpPOFQvfG9HaEtSNSM0REg5bldwPSh2cXw/Uk5TMTBvclk1UG88ImttYUkie0toe2E6K0xrTmAhJS47Pn02VWYyTmJwdUZSO29zZ3crYmt+VEdTPUxMOG1ScCx8cDlvM2lSIVhgZCF6SWFFV3Y1KWFpbEpvaWFgP20/ME5tflFWfEtLdHZWKyhYMylfX31TYUVDVF9ubnpv'@;
put 'LGNpa207R0lxTUNad0YvWG01K3VaN0YoR3lqLHRvVixpNkV0X3RTUGtOUE4kfF59PyZvdVsvfCltYCphL2J2Z1M9TGVwXnxZXixxYmkwTn5ObUxzZyYqYGBPW3hCZn5kPU8hYF16eVFiOjJzVT0yQS9lMUY1PGpuYSNnVl52MDZbSjw8TFRNI1FDdzB4OjMwKmFxfjwrVVtNO0RTb0VLTU93eFop'@;
put 'NzA2SWFVJm5scD13ald2P3o4V0spVmVCSm89RigzaHM1QUcubEFIRDhCSERaYVcrRU02fk5vXS8hSiI/Q2NuKyF8eEpbaitnbUc9aWtvXS9aZkx9eTlbWD1WPCFOKEsiKnJBZD53L0t8Iy87KV4oMXldJFJ0cltxYzZET1JDUlpiV0p6OS5wXmdobVZZUTNCTygpT0glJjlnaG9JfkEyc2p0T353'@;
put 'QElhJipodyNDdVY0Kzd7N0tbVj9yemVLbjdVfiZLJjx7QT4sWnJgIi84NW9OZGlvdUpoSG1VIS92fEA0bHZ9WHUsbURHWG5TJFZffUcvKykufFNCLm88TXl1W0BwIihEZV4lfFp4LkV+LzthaEk8Kl58cmxDJip1WjdbLyFGeTVdMCksYDx6PXdacCU/TUBnOTBiKEdxe0Z5X3Zfc1dzQWc1RXBl'@;
put 'dm1GKDBtUF4pWm9rQlUiSjBuXXove05aV0cse09bOkVJcXZsVnw3enx8JV0jVm1MUG1VPTBtOD1zPjBtcz0wbVt4em4sMEs9JE9PZj56SVszX2FwPVp2T007NF1vbzUsWDE9Q20sYT9LO25oSGp6eDRmc1FnOWZBPDlLO1MoJm80NDkkflMlaDFRfG9efDRDI3ZwIiUsJlpzam55KTAsfXBePyJ3'@;
put 'Tj8iOW1dQ1tdbDYhbyo3bj5nUHlGJl5OaVNzdmxLIkRfUDlHfUdzLE43VUpaWmV9fVI4Rnt4QUsydjhyMTdVXjgzQC54ZXMhfFV0O0VkKyhlR15iOHh7OTtacHQhIXUyT15rYjheZyxedip2SWwmOn1NKXZvN3dXfjA1SUZSZ3ZNUl4oLk13anJIXntXZEdhSWJEfl89Iz8+OXdacHx0Nk1fPEIl'@;
put 'ODkrOE0rSykvfmxySGcsd0JuPklMYERnUDlrZV8veDojczh6VzR6PkJ+L31vcD0oanRXWCJzVlo9e2I8WjEyX1czfTlPPlVObDBkfikzbHM2c2xaXkVTZWEjMl5qWjw5V1Z+VjEqOHdtemYmMjxbPFM7OCNSSmlGQV5kPkE8R0w2Rk09QWgkISp2O0BeKXFgUztJemNrYzt9RmxFYDEoQyFHW1th'@;
put 'dEZMdys4U1RTJT1+TiRnLDEpMXtteTNWTWdUJmttVGpNJVU6PlZlK2R6TF97fTsrJTxxcj9hYykjITU1fGB7WCtCe312c202V2RfdHk5JWtSMUpQY2lfKEMjMWRpP0JbVWQyfVExK3wzRTBYOGd9XipPYUdeLHcsOS56d0YyZGpGUkZtUkF3ZX1ORnRveDRhKD8rTWMxYF9EI1ttITFdb1V4Q15r'@;
put 'SUZ5fCpHS0g4PW9ONTxCTGJBZW91JC42ajIxQW1zcEdzfUdGU2FlQnQ8cjFvXipbdH5fKWlFQjUiPTs3QGZXWzcwKTZXcH4vQzhnSHJlPCNFazN0ZCM5KS5FeEVrPFtTOS9Tbl5wZ317S3pedUtgNmJFa1YzU0pJZjUhLHJvZHhwUCR7SmZmfGpSe3xnQ0lbWz13MnBtbTQvLCslVm9LPFMxJTlE'@;
put 'PXx0MFthXXcuNDlhL0g4Tz18JE17OnhMbHxvQGFmQitWczlmS1huRFpkazdhPi4+P2l8dzgkP3FxSkBkJndPTzRTIUpdYDR2Zz8kLHdwfUBEIUJTemtGdzh7TDYqPmFqPDddYzpqKlI3bVt7YXRqUW5kP1dVTG5Pe0Yse29LNHF+dyhUbmFJS2NGUDVxWT4vb3ZIRzRgWjZ2YH1+NXApLz1sPmh4'@;
put 'PHcuc2ZfMGhPOzk7cTI5Qy5dR1E8MUU3V34/eiImRkBvfEFyTDBIWyNUXTNLZU5SY1dwRllONCRVaD9rQE59LC9xQT10al8zS2VMMzs/MWJGUDAuczFBakxGWC81NkBmJHAveyRLTUksMkgzcWoxK0ZSeTEwakluUzwwI2pLPkBOfiRJI0B2XjQ7JF94aj8/SkpSRXx9NzM4QFMhUDBffTJSNX19'@;
put 'VGJbTyk7OiIzdjwia1VrRXhrMTAsaUM6Myl3REx1PFdiQVNYZ3RAZVA4V0wydWc7MFAxaFlMZV9NZSY0bVo8aWZdfVk7VVRlcWUzRmxDa15FfSVYYD4ofHI+fCVTeyhwSzl4YDRYZyUpeFJEMCsudDNHcXxydlY7OVgoVmBBRWV5emVMVWJ6R0ZUNCMsY3BlM2Jed0huXXc9V3E0bVNVSFY7XSY9'@;
put 'TUtgbSpTQyMpTEIvLDhuUFFtcVtsNDlyRmxXbF94RHIsYEgqYDtCJFlXXih0eD0pQlA8bFRwT2xMIVh0OnNsOH5lYmljaSRCcWBxcEBURDNgPkYhbXI4W01YQyxsVVp1aUcvS09YJkM3XXhya3Uib1kqKFZwUUtMMn5ONH5ASTdzT1RRZThPbGxRVGNrbEwhMGxIOG1mfmk3fEQvR1lefipxO2By'@;
put 'ODV0RFdeeUkvWDBaaEsvJXZbcXg/clFRfkMxSjRBVVlVVHUkfEkzOj1zOG44Om95anlILnNpMyVrITFCPCYsOi9jLGwxZVBWPVdlSVB9LDlzKWAyMCJALDhSRCpER1AjYDJdLmAuVzF1dFFvUj9sdWo9cyxLL1pBRjFPOjY7c20kbFV7PmkoSys/OF13Mns2bFlWa0cwMmx2PEFwKnAqUG5zKSlQ'@;
put 'fXUvUWQ5NSRZcCFvJG9PfUhlZGtSb3tJTVshJVRSY3BwbXUrcXk8Z2pXKyhscmtvSnxnd3hwNVUwVWJoNC9KaWhxYXBYWjlleWxeW09Afi9HckdjKzcoKk0lX0ZRPmJsKmZXWEE3TXMvfFo1WUdeNjVLOz03aHJaKH5ie1NeI0FmfEwlV1pPYmh4djx6MD1AVF5hVV5xQy4vUzU+KlZnYXdtWWY2'@;
put 'LiJvfSZiNnVUTVtLTzRLIkt9JmFKU1VYUVUxZ0dvcz9lOl0jVSpzWHljfXF+IU95KjR7TzMmQl5PV2puLi9xLDk9dF5RP0AjIV94YnNwQlEoRUZxbjY4cEQ+MD1sTFpUdVMrMCV9RU88MkhpMjkyO2h5bG5aY1VdOCZ6OFE+OSVHYVcrVnY3Vzt8YUldRFFsS2kzfHdvYFgsLH5qWlomWCMhXTJI'@;
put 'L1I1UDN6KkwhXUoiMlJdMUovcTVGN31ldit5azoyWSUkWnY2QCs5Oyh4JjFjP0R0dmRAZVt9U3B5MnclVS5xOCxmO0VmfnFIL0ZdcUFYUThUWHZrPXpCUHB1MVRiNnFFWHwsNnl+aWF4bytfXnw+PXwvRjorc2RqWHxWV25bPFNkLm8oNnR4WDFbKSVKaWhPfGpfVHBgQmU0YSMrTzFzbU9FaS85'@;
put 'KiY+ayplYWBybCFDdjZvUVBBLyYydnA1JXxXU2wjLGt2YDZyXSxSZkpFWzh8MjZ9QyhoL1B9MyIkSUV4SXxGRStHYVlVLE4xLHMzeChsOitydSYlI2lmX0RvZ3ZkM0MlfCYhPD1DL2xmfExUNEsyUXl0SX5gOldELyRle1BffGAmSXtaSGl8OXRaKTR7fExCK3pGUV4zb2RtNF9LVXhPdWNlODxD'@;
put 'L3NVI1pwU34xQzYhI28+QDk3SFVuV3NzfXpMOFIudSFRZUJ7c1tCajxtfGFXZzx2dHx5bmJufHZHeVJ7diFAW3BCIiYhUlUvNTZfRlt9TkU+RlZRVyxkPF18WiM/LkNiIjNJSCQ2NUNQfkpUIV47TktQXi5jWz5sPCFdS3VIcHp8O1sqZWR2QHA9NCRQdXV5PUV+bigmZ1RUISRvYyw2fVBVQlom'@;
put 'azhnQF0rJXZRRUM7aD0uIX41aihfMj9qODVlWmFjKFR9Pj1bcHtxfGslOEg/V2BpcDEuST1PJnQwJX1XMz1PcSNGI0dedVlRL25xRDduWXg6TlcsSyQuTzUmfXJ4UT8od2pXRzpVKE5kUmNQLixZbFJ+IXhyTm4sUSlVUWlkIz1pKks8NlMxPjhxPz9vezV3UTc0c3h1X1RUOnBSOW4pYzIoUjA/'@;
put 'PVVpXyJdVmxmdFUyPFgsQ3RTLyw9YiRJIT1KdkpGSWQ7dXgvN108PVdSV21BKi9Ya1tebThEODNwS1M0cypKZjs4XnwkZTE0bn00Q1hGS15HKEFgVWp2NGwlWCFrViZvcThCT2A6NDJFSTlIQCluVD5NO3lEPH1HdH5xTl44aUE9eU05UUtfOjp0VjtIYXdheXVXZiU/VmwzT3h1JTRpRm9xdmZD'@;
put 'PUdObTp9UXNNeEh+JUVveHA9KHI6KERrPCk/KmV3RC5FVmMsUn1ka1UpQmJHazE6WzVWVj0/Y2g5ZXV+cVNQO1J8QCI0PGd2TiFlNmd+cT0lOF5WaHlvXV5JO1FyPHg7V2w0dD12aTNwOTxpVX1YQEJyNCM3V0pnODMvWzNOe2s6fn1ZeHtKYFtRbnV7Pm9CMFI+Zjk4SFdpd0g8Vn1eQSF9R2Z1'@;
put 'bHNpdVhad0ZYNH1Oen5PeyFXaGk4Q1NEWVYobjA1LjxULCk0RnQka1p7ZGgka1FMdE5tJU5mcyZAcmI2YyVIJXxwSkBJajZIXi5VM3IxPHRnVkVXRWBncz0oQ3pCTU09ZHVoUHk2OlVYIXZOfVZRY2Bla0JiTFZSIXZfMmAwejYmWz1GcTRgWyl5KkI7YS5JOUt+ImRQeGlnK2VHNUJQT2BjdCMm'@;
put 'WmFvOHJUL2hgQUlTdEY7LiFGZyRNRmdyI1Evb3xrND1NP1dNSGpYc0lEYTJ1WGQqQXFAJnZrQ3J5LFhHWDdpLDRma3heWTM4Qm5wNF4yNFo9NGVMQFRpeSRzQElzOEViP3k0NngmNF1YQUpbNDR6Y08mWjZkQUlOPHIlUDpFNk9paTdEcGExKUwxT0N4TXpGTl1scSV4OEp4Xk1+d3h6RXtMQWFf'@;
put 'fmo1YXojKV1iLkE1S3lwZUFyKzo7QiNbLFBPSF9PL2ZdSmUzZEQ8MVBjKz0vOWB1UygkemdmRHB3Sl5EOH1Db1QjaV0ub2JlIkkrZnslLCxKcm1eQ09uTjtAOGAxTlMvOW96V0FoKVtIRXdqazMhanNiOUh6RjJbOz1VKFp7TUZZK2dLKjlkXyFoR0Z6XihPNTl3TCFbSEY9bGJ2e0YpaVVXM09l'@;
put 'Q3MvIUpmKmN9ODEqSDJKb1EkRHRWSE8zN34xejF6MWwjMzdRZyhMRHg/dXRZKnkoQigodilNUU1RTVFNUS5NY0diRVR3WjZTI2VNdHd4fHM7Vk1YeCg/Nk5kdztxS0w5SD1udl1bV3VYJGdQe3MjOylzWGY8N2F2aj5Ee054RDZbP3hONWYxelZNQ2RpeXVfXz4pJldWRGZgZylhZiVpN3FDJWhn'@;
put 'bU44W2RPOyhwdGI5NWApPm5UWHhZNTk6b05uaSJERG02JUJ4KkclLDlIOixjcG52LEYrRD9XM3EmTW1veWg0UXx3aWZGO3hzcCVWRlpNXmUvYWFwIltYPlshQWZCfm1OOmpSPHxbZWU+KV5AOX0jeDY+RUZPeU46MmZVekMpNC9xYFBfZkRVUyZ6RUpeQzhhV055d18jLDQ/cmBnOzk6I2BpSkQy'@;
put 'bHVzX15oOUxYSEk8bF1qLDhpUm9qYm1bV2dgYSxeWWg5KWl9XSQiaz9QJjJdNWt+RTZRRzlVb15vdFliRjd0I2gvOUtANjM5VzcjJmVPLyMxKy42UTU5ekRHQihxUj81XS5Ecy8hSnp4Lm8vNCgzMDV0c2p7JD9zNEtGdnV9cW45Y3prQjI4U2c+XV1MRnhGe119a1RNcVgiU3dGdXVjLCt2PEM1'@;
put 'QztUdls0d3N+fmBsX1h1JDFrfHQhV2J4OUI+UDVZZ1ltT2pISUcpQSl3WmwzV0NOJjFDaUwmW0Y2WWpMP0NGZ3o0Omx8Xz5yYFN1UEdbdUUkdT9ALGcwdDYuK09mWn1MeGQjV0VEKXcsN2c0eGB3UEdHb1lJdyNtZEo4dyFudGsrezMxQDNLTDwvL09ObUs1eCpiSTh2MWtWOFo1Ykc4KF1faTQ0'@;
put 'OmJbLjZZV3s8UCVaPWFVSHJvZ05JaVtkYjIxU1BvZWJZRFkySGJAaF4jVV1fIz9uZXZpNGd4TUFVfFdWVXZnTGZjO2oqTDk2JXg3NlUlPCxYP29zZ2dVREt2KiU8WlVJMGl4eDE7XX0pZm4yZzFuSSx+WUVRSTJtIz1deCpJL1FaZl4iNyNkUkxucVArMGM7I1JWNyhIOUd3YkV8N1dudkt+ZFs2'@;
put 'RSV2YyR2V0g0X3dCLy5AW2txV0lgdS8jNSlDc0c5RjtudFs9cSw8SSNDOzdLP2BGLiRDfWxCSSQkT28iL2RdZHZLaG5uUExldkd1LEEpLDA3ZDNMNDU+RUlPT0NYQCpsJnAhS3tXSnlPYyspS1dZV0pwMTlJJHt0WW5IXmVmV1tIckFIRW4zPXA0Ujt8QHBUJWYhR3xlYio3blBmWmVuViEycGJq'@;
put 'ayVHPDhxZTtGWCU9REdQUG5CJipRfkRZK1Z3bDc2VUg7YWRbZHVIUFUwSl5EJWUyPkBhMVczQ1F+NT15d3ZjRGVFQE0kdTR+JjtxclVfOnEyYn1BYnNiZDQ7NHApV1NLZT8sPUdXQjw6Ylt0ZFA7NTQ7cEEkNz88Oj1iWjhjKSpIMnNRVHZqITtBajpvKi5VRDRtdlM2NEVdVnkqRnZsaDg3Mmp3'@;
put 'KENRYUVrSTNmUUd6YCYyUFReUnlvJHUkVW1xb1QlVVJWOW9jX0UjWypYSE9gR106Wk90WGphOCRlUWUsU0Q4NjhwMnNGWCRnUHtoWyF+RDxzcnZEIVQuUFpkeT50ezxudC4+RjRocSI4fW5MYVchRE4/d3ZdcUkwbVsudUojXTpmbSY0ZHxwSEB1Zn0lW3EvZXJncWJELF8mO1hCXmxAdmgoOUI+'@;
put 'cnMjMEI8UGY0Vz9VNDJyRVdeWndEdCwpJHhRcH5+cVBJZmNVU09mUyhxUkIoJV8qRHZsbSU2fVU7IyZLZHNZVnU7RFRtXlVvS2JyaG9QcmlOIz00V21oflUjWExaaDkvZDleMTBHSG97XWJ6I3EqPlpBNVk3WihCV158MEYwMHcrUXFHUGE4VmpHNDEzZHJRT1thfn1uZV87N3VlUjR9KG9qTip+'@;
put 'eVRAaS4meFglfVtMQXAzP198TStlU3U+dk5+dDxFP3tvRF9bPyJeS248aDRke01fcyxCcCZFUXZ3eTFSWCMsJVVPJGhnLDFZY3FxPFRnJGlvSWRIQ0s7TDxfRE84dW9WfklLTFdlTTxtWH0zR0JmUlVFNnk6YnImblZmUDs/e1VEViRrT0Q/P1NGJGhfe3Q8P15ITiZhIVhmN1NDKmQkWXYoMUFU'@;
put 'MlpGRWd4TmV1JTVRcGFvL2pYTDtOIyIvbH1BViU3PEFyZnpyRjshWlBUfVU2ZDdHPF51d2gkWmxaREM3QkVHczRJRlYiS3ghR1VhaFBWPWpjJilHXSRuIUljI2Y1T1t8Y2g5QTRfOiZ1ISJ0WmAvOFVRRlFPQVJHRz48ZClbXk9zOSI+IWU5K3V8QkdIUVV0WCpjKyN3SEFEbysqTUlVJWxUdilN'@;
put 'YWUpOkFyXUx5SmN9IitoX2UofjM4JU59Jnw+RHJIXXAvX1UyO1hySDp4Tz98IXRlbHVVQ0omXng7IUtAIT9pdFVDMnJhZnhdPXMrSX01SiRHcStBK2BLaSUsXnxSUnomRCRSUSVISFghdT9lW0I9QGBtamdqVzNqfHJuUFRQK2A+bm1fIjkyPEp2W3xndWlDJHolLHVNSVF3M2duLnp0NyJHfGIp'@;
put 'RWpOPX5yLjtWc18oV3JZcX0jbURqW0U7YSFPRlJpQzFzNiwkdzpATCteJVd2ODp1OUJ7YkJNblhRfFdHTllFNlV3aE9KbEl+SHdEL3d5bno5RkRGLG80IXByRHMkIlEjNFA8YmZ+V3JRbUt6Lz10fEF7KlAvbyxvVU8mWWVLZSFxN1smMG1XcWBQMXQ0RUlQdyU6MCZhWmMjOkJCQzxvIUc3QjZJ'@;
put 'UjlBXmNON0QhVDNkdCpxMSt2Qzc5VzVqWDg7ZDZxb3NSSyY1VG5GYm5jV30ka19UZTQ/UzAoYiJNfDUxSS9YRzNwXUN4UU1FQS9ydXtJK0xEYURPYCsrL0A2MzEqa1M1fE1YSylGeFo+WyJ0RFhOX2FXS2t3fCtmUnNBMm5vYkkoRmArLm84RlBQYXA9ai5IIllJanI/LlE+LGEwJkJ2KjtIMDpI'@;
put 'Tzdbem5nV1t8a2d1YD8qKGApOzdlTGUuTUZsRVApU3FIdytobmwlRVs1NG5xenJkcSk4bFlqa3dGRU43Knw1L25nVVl7e29ZdWI4VGwxNGBoeSt2dHdIWixNVnpSJH59UyQqZClMOXB4NyVjeUkqNlFjUW1WSlh2fFMwXyE3Q18odiR4THhELkVEVmBWfFJ2W1IvfiZ0KCI+LiVffkV8SjROITIm'@;
put 'azReTSlPLzl0IXgxfWwsK3lhJUd6b1E3OX5ZeGpmfXMiKFppMDUqaC9EO0IvZWUmMUJ2X2RRaXlUJiJ7KXVdRXQ+MHB4YTtqajhGfjB5bDJnTFVFbTslQjBAKSU5aDFxMz8oVSFoPDFXX3E8WG9waVhfZ3NzdCQ+PVcmfiU3Mn1XfChPbGtbKFUjc3BFUi5RXmhMe3s7Wn1zeiJITXFHXnwmR15I'@;
put 'MUtxW10kVnRwYmMlaG1ee1QzSHElbmBsXStbQj4qfXpCXkxoc0p1P0ZhQVdNWWp4KFNESUc2TzNYKixBNCMybnEsbis4QFc8XkRaNUl6RH04SihTQkt1fl1WfjQrdkh7O0h7bk13ViJ7MUw/akg/Wmo9c0NfWEN1RDZIZTlfUV9gP2cufTV2fVRgS3B8MEwiVU5APnZzWD9ePTlgLEE0TDI2WW4p'@;
put 'dW5Lb1BEemY9Yzw/R2dHUzh9ZF1hfExfXVAwIX14dkB3MV9qfE8yLzl+TykyPihfUXVPXihWPV1fSHdpcCs0VCZQZUNMb0AzVyt5VSQ6QzEyW1gqc3B3KCl4Zj9wfCMuVXg1IVQjZHMkMnh9aHB7O3NyfF5+dytiUmQkcmxGKi5rNHk5XlZAXU5XSD8uJXZxTEcmfm5QNSNYLzA5WCZlTWEwa19e'@;
put 'PT9FMCE3QVJYK2h4ZE18XV0lQVBELkl4akpGUV9iUHBHR28pKlM3aEh4NE92aGl4cExCPFQhbXlLTDwyZipZOXJdeCtSbjZ1PDIsQz5SLEE8PUA5fnNLUChUKVpqUUFScTFLTDNzfj5ZYltqLnhHMy5JPUFbekN7O10qKXhNJDhwVTcyL1BRUDJ+fWolRFVPZndWQVsvS3hGVkV+USZLTSRrflta'@;
put 'YEYwc1FGP3YyMz5bPUlteENRcHtFaSxoMk5gMWFwbG9YUCRhVz9EZnhleiE2czpbZ2hPNGg4WzJUXVpxbi54fnRnYCo+dndwYFZjZSQva2xyZSh4ZUY2U3VUPj5lTW11biJSTk1tSTcudD41UjpWeEFzQXBgbzJbUDRAVkw2I0JnJmN8fkdAJW5xLylqTHh4XkV3I2t5Lm1jdUhkR1pgTWwsO2BN'@;
put 'KHt1NHJOIyhrci95YC5SQ014MHshWT8lcWZocSMoamxUb1E5cm1DMl5BcVshP2FrWWsmcXVCSEVZd0dhK2NtI09XZ0AjVXdNU0JeMVkpdm5pPiEmdjEpaz5hO3BweEw3JiZPRURGMTk7I3lkNmZTZCt6YXFHZEwrb3JLVXZ7YWFkREk2Si9LezEwPzBtQSV1PTFeLCYyXkJAQW9wMmBtTlBMWypV'@;
put 'LGBrLlV0SGpUckdDelImWlgxeGhjQEs9Nmdve0JddUlqTSg+ZSQxbT4zL2B3aztwdXIvPjBydUAvNVMzW1EhRG19JDJmQDQ3TV91fWtSfGNrVXNvQT9+KEQyPFMmL3IqPDokWTdSU3p0RTEqMzYkUzg3OUVBLHc4NkVwMXhse203UncpQ0djYG1ULnkqY21zLmo1eDEpayZFeGtyLnR2QFJwXT8+'@;
put 'QFdsZzBlLmVkNF1vfV9pd3wyXi9dbiZwZjowN3pwNSsoczteIWIuQjxDZ2NFa05DWGR4cXomaFIhJnBJLCEqXyFvPGlKZjwpWmkkdCRqV3hSNE0sciYld21VO3pRRTNYaG5RO1FiUUExVCRHPWt9NmclR0t6SFUqTUw2KTsyZ3opa3JkJE59IkJzTkg2QTBtIVhOPSRUUj0kPDpuampnPyRAWTVi'@;
put 'eHhYbkM+ZXUibmlUPz09eEElIUo7Rm9DQU47cVd4S3YhJWFpQXl2VSI5NSZoIVJXX0R+akFTbHc/a217LypmbF8rNz0pRTFKZ2k0UlZYdXxxZFMrXV8iPUk4fnlAcGgwWDBpRj81QG1LU1VxUkV4bix0fURdTV5UJSsuaT5JfVJEeXF6RCtOLD0xVCRBJX1rcyIvK3R1WC5kSyJOS2hlWHZ3bHlL'@;
put 'M3VTR0ohNVRyOkAoT2pNdmc0KUJAY0BDW0JrQVNTel5uQVN9TXJ4WldmN1JVYGI8V3F8ZlMjRzYkLDp4eGNzXl1gY2h4I1F0Ymp4L3ZSYU5+UChUWFR2NSZfaTd6X0l2cE01KixOW1RJPEFfX1VYO1pJS2tgJCxKbXkpN1FgajlMJGpvYV5dbnhwcVtnXmUlR0l+KiwhWzAsXVdgNn1ZRW5yRklh'@;
put 'amhsM15EOjU9RVl8cE4+LC4hI1JUeURUYXMoLCE9cWRPTGt8Z2xHNGF7emF+Ozx5cEdDeVgwUz1XWHN1NH4wYTssUU5MJndZWSp7IU87NT57cVpCcVs6MjdvbS5AbDIuMG8rWXNFQ1RsJkVkN0A1cXRNYjdoXS5XIVM2Kz08JmBdQGxXNEt+Uy9xTks6MGNmI0JiKThpOENBT245SzppUD9VX0M+'@;
put 'ZGxUMSxkPkY+UWZCKCZiLjIvQV9bXilqXUJdQE5+czZhemVzWix0fWAyfTY4U3JaZ1pRRXBxLF48PUgpK15qS2pUMWUoSllmOVZaPnI4a1c7YVJtJWxgYVg1ZjtHbyhSQHZCNWZlODYsVFlIVmRQeSRFOzFJbjFjWk5oZG5kek4wbCVsKnUvfm1qXjwjPiohKE9OayU9cl5Ab2xoTlZgMnxXYG9A'@;
put 'UiZYblZ8T25EOVU7dkdrQWssKnFNc3dBQHVjeCN+MUsjTVUpcGJ8Lz0mYkIzQzNQZzkzUHBTVFJSJm90cU8oX3NxUVNmVmZ3WH12WyVZMVpAX09xWy49QDYqPnNCXyljIyp1T0Y2WTAqIUorbSssMDljKComck0sfj0qK1NmU28hISVpe113STBGSHRiYzVSZGVFKzhiWkJIYXZPbk0kKmQhKEko'@;
put 'VTJ3I0x9cHVSbCw1RSRwZyxAZ11mMUNgIUBwY3BHMm02emlQIVhQV2YlUGk7ek9FSj1pT1JkRS9HYDVYdm8seGZVbUgyeXt2XlBrPlIiPW5hRjxiY3pgcEdlKVYkQDBxQD5sOyVvPks0VTBUR3hEckcxNm9mOzltZlosNXBad09oXk15OFg5SmZTO0JpcHAmJTUsbzlUSWh4Y2g0bCg9fmJ7I2Am'@;
put 'K3VtYCMpKytPOWdxckU8PzF2NixAPS4wc0o2a2wsUj5VKDRYcnw1PXU5aCJmPlNoTHtiQk1xYzEiLC97RCthSUxeNXE2KmVnYng5JDxAfV1KX1pXXyEkOEd8LEhQMTx7WUROR3ZtTC4zLmhFMW1ybWE7UXZXXnx0XixTPlo9SVopMS53LEl5YFk+anhDel1GZEUpS0h1V11ZfEZbKXxPQ3YyV1JN'@;
put 'RT8wbyxeUl52MSlBUWNPSHU0RTozPVc7NlRTT0w9PW9zT281QTpQK19rPzRmYG5oSUcsLlMqT0ImQWgsbSwoWW5SbV1DeFFQMTh9RFAmOzMwKlZneTUxYVhRQ2QxKkVQPXJENz5ZeU5GKz5HS0x8eX0rSW9OPCFFbTZKRi8ybiE2ISR7empueHhkfnRUbVlwKCU4WUMsYHkyKz56Xk03XTY+RHRy'@;
put 'OXN9XXMhJDNCam5gSzl1c3J9c1BxMVEldTMkKEBgRFowUTU1VSUmblUwXkhzNHxyTFlGK35eYiUyIVh9STdOS2UvKktgelVjKHlCLzh2PDtEMlFlcn1yOixOVH5+eFp3JlQoakxTTFhRSjw6eTZxX0ErP0VwP3BWI3V+WURBT2ZaPENbL0kuJkpxPExwcygsNnwpfFRjeF5bazp5eXpdKVUhcWh3'@;
put 'fHJ7PDYhVlgxJjNUW31wc3JoLkZtTXp5ekZtU15dYkwkM104aTh+Qk9CPUA/OjwlVmkuOzs+Tjg7JSt2PEIuQWt2Vk55QjJ0RUUyQi5BazhlIjI0ciJWRSNhJU87fHtNYShDbiRkJCxdTz0wbXJvTyN6QDBtY2oyW0w9SH5QayQmYTheczNTe3JkPzByYEkzK35SdFV6VThgVzZKcSZgQ3NCK2ha'@;
put 'fD9oPkBmcyNXcHEvTSVEK0FVXiVEYjdqNyZJMlYuKHpyNiY7Pmw3VXo7e1J2QEFzMSN9PzVCfVM8cC5zTndFY2JKYlUuTk9UVitCQGkuWGkyQnRhVGFbQDkwPDAqTmNIKllkWkMidihgTkMid0RlTHZaaSFsNToqXkRCKzxCZUc+d3JObER+QSVjNTEzUiUqW0ZDQUFBQUE6Q1BqMkFBQS4zJWxj'@;
put 'ezw2ISEzVCZBMmh3QH5tUT9CQzpGbGI9SDw6YSEyeXxpM09+NT9kMDI/Sn17V3s+VXZqN2pkQ189fC9+YDM/QHl1aVl8ZzNHcVRNWndlalBUSFMlaDIxVSQ/U3QmQHI9VWZhOHtTIiNLMzByZEprZExCRGZ4YUouREdPOklsaHtSaTVYKHdFcixUPFghdyVRUWgzS2pwaHcoKU8lcjIxYkVve1VI'@;
put 'PkJsNkBDXkB8QEdoRV40fn1nc25wY3JiMiUlfkBUOiV1M21zbzRdVFN4KldOdjRSVWkyZ1BZfWdxKSpuVyROb1BpO2lSTzhXSyRReTlJeWYvO2hROCxeRU4+OF9GUkc9P2sicT1dMFAkYlAhN1ZII3VSW2V8N3U2PGZOWzdlWXZvdkFKXjxwZllUYm9FT3l9MzdsVjMrQi4+KT05Y1ZgYHFIXV40'@;
put 'Oj1HcnYvOi88JlAsNHU8RjoiYTlyMHZETUI3KD1iejl4RFt4RG58UTs/I311L217WCtIKGtLa3ZUR1pZT0s7RylpY0s+YXg0ITl3b3F9JS9EPyZmb2JnZHwuMWdiKWtrY1t7ZmtAamglR2QlYmRYez9zUGAsWD9+SiFPVCU1bUQ9KW0sd2JWYF8uQHkyI0N4QzhZaEM2Q3kpKk1rOmkwPXBzJnJr'@;
put 'XXZnVU81RGZqOG97QGNGQHoxUWY2ZzRNYSUxNF5pNFV1UnZ0Km0qW11ye2dHRm0hI0FjfVBjdkdebjslQE5HJD4+NWFbTjdLR1Q1UW5eUDc8NClTJD9vbT1OeTN9US9Yb3pHSyZJcWkrRCZTW2Zbb3xGOmdidyMsX0Nxe25ycCN8OC5nTzk0Q0hPXkdlb3tqPSF6d1c2S2F4Vm9xKmZ6WC8pTiY+'@;
put 'MlhhUUxfb3xqXkBrWXtrJjJocE8pXV9NKWFKaG1WRjBlZTVffGlkS05HTmkoKFRJYFdjUk0vLCQjPXlTKDFkTi5dI2RgZyVrSEZSdX1IUXd8U0lwdHAhUyNAeCxLLjI7d1s8W0QxOmMoMFImUHEifHRFQGxzfVpCMHZdXj1qPmhpW2YlTGVUQUVIXT19WmtRdj4wZkp8eUh8Kz96QDFwbGl4c3J2'@;
put 'bTkrWDV4bT4xVnxqS1FdLEt0eC9HJF4xKz9HflovQlUzQW97YHc1ZiM2Yk5YakRZWzxfTm9MPGVTL3Y/PjA7eDo2Jnx3dGs5L1RGKUdXazpTNVZudDZdRnhuYSIhZH1wRG9dcmhURVZoZk8jPl4vZn0wIWYqMVNgTDUhXTtobUJpfiIlL2YzNCElQ3ZuQXV4ZXNTNE1lMmF6Uj1mb31DLmltaXs3'@;
put 'UDEufiZOQHJ4W3c9ZDREMUV4VU91XXE8PW5wS1p0SiRhVERTeDUpI0s9Zzx4IUhKfTh0M0xdKiVtb104c3pKalNjRk4vOE4/YXliWkRTJE1dT3szajdCSyYwLHtMImBUYnlZM0hiY3BSQkliWFY1WTxvfkZOY3xGJGBoOWcuY142bE13WHpnWU9hQkZgZnZlSW11alZrVFJsX2o9NiNAR0l+QVF5'@;
put 'Rk5aZy89NntYSnxlMTdYUCNwY2wrQDY0aE1qPU9OLk50MCp0dDR5dEw6ITk2Jll0bTlpL2VdXzldU1dWWzgiOmBySU9lI1pCeHNrYXpbZjVFQGAvMXs3M257WFcjQl5Jc10/P2d6Ll0+QytRZTUpMTsqYC5yOjNvMyVmciJRajBtOUZKRExwZCZOfmZ4OGY7SjdTUXZuS216dFN6VFJuSjZ4MjAs'@;
put 'ZFFUb3wlcHRSJVVpbGZSIXk8WGhlUG1SY1Y2OVIsP0xlTysrTltpOUJaWmltWCZtKCI0NH1sR1kmfEZ3bHdldnQwRmhodTFhRVRWdT5wNkZJfElsNERBOj1iWSxLVzhNYz9mNF4ydF9ffl1ydGpfWEdNKTIoZzN6WzdePG5vTEdbYmRddS4oVl1kJV4zP046U15CP18paytadEooI3c6TEVPZV9l'@;
put 'TkNReXpWRV4mXmczRlojOWN5d0dXK3VXTHskbWtIYlpUQzIjaXFhO0E2bzpGSDFMNlVLKEQpK2MrcCV5bCNpd1ZIQj4oXSlSbXd7Nm9IKiYhI2k5PnFjJloqdkdAdH16OytoPjc3LF1lI3ZxZzVWRz85P15uZnwzbz4jZko/Ty9Ebj9jIS8kTHF4cFZeaGk/OEZbXyh3LmVqLzV3IXBwbSpQIm1R'@;
put 'WUNXZiREO3Z2O3FrREUwe1pgcyF1RyV3NlpIQTBfbkllIXMqUjZxX3Z2Q2FYbTFSVFdgRD14KXlOYUUlV3RXanAoVmBqUU5fVSQ9TX1rfFNEKyRyIzMvaTl9bEVvMjFaNmp2S205e353bjpxJSQ4eSU/UjhXOWB6XT5obzBQa3FqVkYoIlM0SyRUQmF7NUdhfHsoODhGJE1Xd10kcShZbWcoU2xo'@;
put 'S3g3dS5JWEVHa0B4KDppXlRtcW1GI3gyfChSXXRvdng6ZW5iKWw9SUhibjA7SFo/ZXNvMSlUSlRPNWQ6NDNgR34zZTRsWXFvY2UicntZXXk4K1VldUVnQiYpbjV4YVE8TWckS2VfM3B+KmJOYnRYJml2OG1sXjtHPUtWPjQvOmAqfmosOkNUOFhVUThXTX02RDZHQFg6eCxeOnFnJltjVEl+Mysi'@;
put 'P2cpPUZRMDp5dWdmOk9QYC5RQCt7RVR5MCRSRE4jeikicS9+OjgjNHJIQE18ai9kR2hsWFhpP3VmVUdmIUlkT2VZQSZEI1AjOC9oUCtUcHh+WllLPDN0KztufDJGK2NvO34uMTFNflpsdytFUW03IlUkczthe0Bve1A5TkdFa0tMMXgyal1SN2djYGcofjpWKk1ORWghWm53MmlFLigmLFAkQUgs'@;
put 'bEZ+aTJ0Q1VbTSg6fUBeNGh5RWhwO2R+Wk97Om5mO3pkP35jeVA/UTZBME1FPFdoTSxXQm15V3c5ZCF7LiZZdnNCM0tRPjdEa1hFeiozeVhWSU48YWI6e2E6a1csS3klfVY+OXx1OEVGczFDOjxkd0k1UGx+Z0x5JmxARipmYlU5PWZLVWdtcmxuRDJTOGsxdHNUUldzYTkzaX4yTyV6QWZabWZR'@;
put 'NT4kLCQxQ20vW3BoRmJtR3Q0WCMqZywvQmQkc1NJQno1Kld6L0diPXEhVEAzUEJQSmEqTFVNX2B2VXNJTWJzTVFwIjZGRVdCRThVZy8oSlBFRHRzMk18NDdZMlliI0YxT09qVzVldzdFclVvJl13VCx3cEhtWiV6QyFIRzltQjEkVVkvV21nOEhbPmxXJnBBcX5INXpwejBKcE9eK25ia246Zi8/'@;
put 'Q1c4SHxuZnFSMFszNjhORXttJSJEQUVOZE9YVXhYNGVCJnVvYjc3UWo6QXY5TnpgIW5gcml1TX5+dEQlSk1xW3hpMXg9Pm9ZeXR3aWZwJXBlRDVFUF8mQGw5bmJvZih8N3dsW0BQfVkwSz50UiJuZGFzQm1fKjRVKCplMnNMJF16M0lmam9mZ21fSGZeUjEoankuYyVMZ3MxP31ZZ0BiTWdtYC9O'@;
put 'OXN3SG5BKmJIQ2pqdUJTTFl0OUF6SG5LUHZ+fFczVWhZO3JaTDVYRiYrRjZkYjVFRTEocllnNHpeJjdeRHVLVkA/VnM4X2BpazN1KCReVSwpMk01SzVdZWwkYEpXNkByJXx2ckhueUoxQyF0Rk9+T3osIzJJcXQ8LmpMSTtNeEVzZTRea3NHYSs9a1VqXlpZJERAUTZbSX1Ndm8mRmZHJUpXVWUl'@;
put 'I0ljIS8+NUZQdDpRK1o/UVBWKztXKC8jU0FNMTd1O3FpY3t+fD82P0BdcTZObjpGfjlhI0NCbHcrLitNcUsyXytHP2dMd2xNPUJqRTMpeWs0MmN7X19KVVNVWUdzRVRIPmYlRTV7XykkKlA+X21aRnM9QncpbTskdi53NG1LanxsZCUjUiRDdDIvN3VaaHlYSE1EIVgid1gucl57b2IpK2F0fTRl'@;
put 'dTZYUW9MeVVwPSlYO05LTCt4Z1hJVWxheCxnTlRKJHBWL1EiK3NqI0dCdT1QOV1hWXppals6dXNJOUQqUkhrMj5+dDghT3hEZWR2aTd5Jm1YT2htLi4kbyE1SndJM2wwZUQyeU1PcTdWNGBSQCxAQThjX3YwYXg9diEvWHozUEw+NWgiZDJ0Lko/P2F4RX04VDBjMG5bT0xZXnlWXU1kV118SnVC'@;
put 'QS5sW3YwOCxRfGp6XkhIQFhqMyxWJnxwPjxHcT8oKWAsWy92X11nemsvQ1h2IiVPaVowNV92MDVnL0Z1ZCMvNXp7e3g2fGJkSDBZL1lJI1BKPT4wQFgxWWo/WXg6eCUkeHFtNWRYNXsvejttXzxuakd+YWZIMXt4aC9wVyNPVyRVR0B+TXQ1S0tNdlsxRnJEeV9MeFsjK1t0e2FRXyMiYHZhRmsk'@;
put 'QyFGeEg3QEB7KiVCRXtlOmx4Zko0PnJoJnVVR29vMzIxa2hCMzJaSGIyMysjV1clWTNjal44QTEyamdzOClhcXl1dnw/LGJIQD5mOVlAUkFaRklmbGRFYlNwRncpZFt8Z2szI05SRSZ7SVdRfWA9PzBeKWdDK0lwbW4xU09edkA8ZG0rJl5IP0JzZlclfU0sIVZTJlVbL31ZbHlUIj96XlZdNm83'@;
put 'Lm90UGhCWD96cGQ2KC9We0NYcSosfDZeSEI5T3cwaTklYzpIOWloNkhYcSgjXmxYZW9hUFZjbHpYZkp8PnQ2UGAic2YoS0hoaXdgPGllRUBGaU4sQS5oVlFSX0psN3w1dFFaMHBCezN+bXpbJld8digqL2gzLEtUW0wkY35lLDAzemxFam9TfUB0cHNVWGJYREtlfV8yVjlsO3gvdWBVTUd9WmBU'@;
put 'V3Z9TzxSb29ANE1hekQ+W1kpV1IpO09WNVMkPVR6Mmk3ezw3Wy9CSjhKWjNwJlhSJVowdmxdTntmN1ZhUmZTfFs4a25gPXJMRihDSjV+NTdhRTIkPG5DbSpOW2dmNzchfCtoZlYpIXdsV2Q/PiZhLlklI2NzJlolIkEuaDNtNyh3YEBDNyh8d3VmSDFoaXQpSjA2YT88b28+QmdNXmdhKjdQTDZu'@;
put 'SXMqaE16XmluIjd9dk44RmMqMCh7fSpeaVsodjtjMT9aPV9WIU5NLFBtd1pOTjtuc0p7fihTKUtsJTJLfU0wYi5jJjhlUTxVZStJPmRPKWY7dzZPbD8sSHx0QXxzRnQzfjUmKkhHVFcsSTgmaX4/aClzVkhzRC9jUmdueH1eZUQqaCJIZE9OWix+QmNOciFIPXJQc1VSWTJUUyh4VXpTfXR0fDc3'@;
put 'V3xGZ0g/IXBGUUpoIyNiKF1fKi47K3kuNjQqTDBXXXlDS2pwOjFHJGQ2Tm5CXkpLXUswTjxtKyFoYUovTy5Xb2VHZGcpVldWSzZKOjhSbjI1IigyRD1jPChJY3xgX1VYdEBNYSxhT2FZZiYoJlI5MVpSNzoqMXAifnUhNSxidzVfLmVEfSJjZ091eyFWZHd5bVlkMzdfQ2hxZkJAYnJJcD54PilH'@;
put 'ZylrdHFVfkImYjV6OnNPSi9zdXs/NS9gSHtXaUVAX1RIUHVrJCs5UHRHZTcxTTIlSmo3MH1qLltmQ3QyQ0dQQSxyWUg2SHAoSjAjSH5fWzo9cjc2SGsmP1lgfX5nd1Y1K11MKnRgOmghRF1oYSNnNEIoUXpzI0pyI1lwZ2k5SWMsJmU7MStxUT9UNUosQHtLI2xnLE13NnhvOFtwYjkqSSh9c00u'@;
put 'ZXBDK3pUKF9feldUTDhwLiYxcnIwPzwoSl1INk8iNGk1RDBbRTxzIWpNb0xHU2ZYPy56MnhjTC9kO2tTYHlERlMxUE1uKjNzMHNhUjR+Xm5zXWhUYTJna1ZDPHtyZSIkK2h5OUlsPWpgaXFrdig6cWxKKjd9fnNMYjZ4PjVMb0VIemYmYFApQ0V3RWY8W0Z9UnArQVhWQ35RW3VeXXxdITw0WC8r'@;
put 'OkxoMTFoVihGOCpPRSpyTHNsRk13M19JP15QTmt4dDhPUHJOaXk/bn1pKmhEbU4/ISQxY24pd1cjan05ZUxwW0lrKzBiRC8xKjxIOjBSRzNKOlcjRilkZTRdUk86e1hdP3klPjpkT209TWE+KHp0SHpzdDVVS2k7Ll5IKXxlTTZ5Sjk5NlJvTyErKHhCXTZrTjUxLF0oI1IsWHdtSV1EVnEveTN+'@;
put 'XllxKiQiSXNmN2pYVSZIPHIrJTZZImBlVXRJJnQieiJaMikke3VUMm4jQD1IaCZfQiIzI2dycEVvQyRleyY2VnNkdSxrMzJ3SnI2T094aHRKKnpELyxrPX53UV0pRytRS0VJSTlFfW1LM1FfaDJxPWNJZVI2NWZbMVJuPnVbe3JRLlEpUX1INmgxYm1zYUJsdk1jJj5BRGQ3aXNrSiF7YkBpNDYq'@;
put 'M3xDdVFAUWJwN2dBITBaQD52Jl8mRGN3JXgkWXRlOyp2XXFkQGR3IUp4YmdvSm42ME1vbmBPPmk7T2NjUFp9fUMrPG5xN2NDL1tAIVlrTk1uPiFZeG1IdlFIdl5tXUQoXS9tQnd7RHEsQj1FakQ9clN5bjRhJV9+cjIxWExYO25iYWVkWEk/M28uekY/MztEaFJdWlJpSkp0PmchTC46SjhZQyI/'@;
put 'XkUmblciVjs2Mi9ePHlDMS94WlFxdGRYOzoqRntKNGk6QFpxTGZuYzxAMyFfOkkxOmckemROOCxNOSlgMn5qPCtALCp2ZSt3WUF0Imk0NGR3OHZQfClRPV5KYGR5SFk0fVVuPFlbYWlALltjbnJkISV+PHo+P1RlRyREQiJGR0JQeDJNODosSChXOW9nOD9bey86eTROUXxaSyshP3BoI3VMLENx'@;
put 'WytwbSZrc3xRWSw4Iy5mMzNpPTxXU0tROFclLCUpL3BWJTZXQFU2TXdVZk89Yns6ImZ2aDJ+bkspZVJQO2ZCWWRTQXJ4MFBKeUlDUyV1fGhsQiljXyVJXlkwb1JwaypUXjlKL3xtQ2EvaytNVlBIPm02ITFDQT0/VGpsdighfXRJRCJZRkx5QlYwN3xqWlBHdVBDJDw5Iz4oOGttL0gpLkJuI2lW'@;
put 'RWBiJV9rMHo2NWhdTXoyI2NfSn5QI1F3bWdJaEBmX2I5dV03Lmx1JVtrY3NEPVYvQzFGR2M0MSxnQSVrSmB9VFJrWStuezAlS0c0fXZ6U21SZi5fLHdGRnspeElaMilaenhVRFdMUWZJaipBcWg9InpIVF1GVjBlKV10TjFJN0RQZkRLaDA7IiFzVCQiZTlWVT14SGh4RlQybiFfU00kMiFjfiIs'@;
put 'JiQ+elE+TyQodW9jRjIyWCpgYlJ9W1BaYWkxaDJGaGAkSTAuMmIyMEY/ZmdeTFZJcTtIZUUrLzdQclpPL14iMyh6L3tHI0FrRisraiMlXVQzO2A7SClwcCF2I0YvaCMsJXomLiRHJUQ0Tz8lLy4pMCU8P1FZbElhRVpUUmBuZkhQOVNTUjg/MiJ4VnFfdEkqTF51ZyZJaU9UP31zXyghZyZXQFQ2'@;
put 'aXJiWGBtLCtPKzRbNDgiTnA6ZVFLTk9uNV9UQHFXeHZkRl0janE9dDNNOzhObzRnQlNeaHhePThIbSVLL0E7TV9GbkdnJW0yRj1mRkdQZkp8bmtQek1sOHNORGpZRHFvd1YqUU8zRCkoSjtEWikyW3dfTylObzEiMHE3QUQ5a1NWPnI+SFs4Q09gKCMwbyY6P1dYd0llKnFYNyhdVFRiPEhtMTBA'@;
put 'a1FiM3g6RzJFRSVDTUFYc2p5VXYhQFJVIU5oen5nOigvfHNQVWBtTGdGVEkzZ3U8a2QsdT1taT9LMn1NVVBBdlBLKGMwY1coVU5TWSp8eCxPUmQme0JhVn5QLH15bD9MM34hUz51UEQ3ezksblEpOklEUmZCMmxubWtCQzQ/QlNQdmBMPH41eTd6SzFFKFY2JktwJGlYUFhIMDFOLyRjWHhKOEN5'@;
put 'QURxP01pRG40QiU6d1VDc2NET2xHZTlQUUclPVBGP2t3NFVMblFePVEsfltmN2diQyZNSlVIazBpMSZddjFSbXh8TjtmI25kOTo1eVMxOjQlK0tVfkFsbF5VXlthKjlvVjFSYHAwb2wyQEo5K3dfeVdfQElvcD5+U247fXlITHFjInRiR0tLVU9xdG0xWkM/Xng1U0s7Vn0oUGZnIVFvezZVcVQ3'@;
put 'Ml03Vj0+SVd9UW85STVeZHBsIU1pJloxe0NPIXplQHRjLD9EWloqJG89d0xTQ0c6bklUTDNPJUdMVihIQSlJWDQ5UHoxY3l6X35dczc2cjVMZ2BpPU9kcEFiYSVDfSUocjRKNz1mZltBI0dONkx5fil4ZENqVT1IY2EpP1k4R1tzaF9NQEszPntaeXtCKmZFKTBoOWFNKiE5d0RgYEd2KkJATUxj'@;
put 'ZjBWdUIycXYxYE1JR3N2LiRwc3VfaF5fb0EoRGxKOW5YPE4vdT1kLj5rOEUqN0Ukbm1IYm1DMmphK3U+QXpkNmk6UCV8S1duSnwxQldkWnprJVN+Z3c6aklXUjJRWnppeWNDM1VhQ0B8LmsoW3RsPWx5NUdsVERNLGVgJFR4eiIsMHBQdThhWEwyWiRuUz9pOnZTNGZoVUkjMW9yeyU+THpSd3p1'@;
put 'QHovNit4PyNNaEooYXlqaWh2cjRxSX4xUTo8TyRPej9+eklLMFBXMHVYQFQ/MVkkYHc4dFh2JlgicnAxPThtW31uNl1yTCxATj54UzpRfEhEPWc/VG03NnE6PmxeTUFgWyVqNmo5cn5yNm4sI3JpWnQrP2k/c24kI2NlTnhMSTQoYEllL05jQ3JZdjRLZVJOZioranRoNHhARlZxcCYqeXgwaClD'@;
put 'eCV6UlBFYnN6bXt4XltgSnoob2FvMXBGKHxERl9EYXZrTTx7RHFvekxRVlZaSl5wdStDNXs4Tn5xWjg0ezR6c1trQz4oZXlFejQ6VEIhd2FjLmolXVFeW2htVV1xfVQ9K01RVUkxJk9NPi42SXkzUTB4bjJodDQ1aTtELjwyUTlnfTtWTl9HYnRwNHNONkk8SU1CfGJvUnxCLnFZRlI6Jl06VkVM'@;
put 'bGVbT3okam04VFkuWDF7T1VqfXN6M0Z3UFRQVUFrOnJyN3ptWWF2ZWMwSWt1Z1M3fU5nYWdKV0VrME1Aa2Y9am5oLnJGMklDVyxCQ1U7Oj9POH15QFNudGQ1PFhaVShuKThsLHo9cDB1bFcvQ1R2YU8yfllBJitaS1JUdmxwYUJRYEMyPnJ9eGNEUnojfEZsJm4rRGsofCY4LiplUXd8RyxCU0Rn'@;
put 'e0YyNHJBPiNpSSYkTjRieDBGJWArMlguaHJyQCRFVldkUktmdmJJYF46N0w+TCl+JjMwR29eOn47JEg1dV4rWSl+I015bkllZHBoR3hBVyw5P1M6IXpARkdifmVmRn4lXXk3PF9jfnBlQXs0cUNyJDgoYVlRMTZmWCE8Zz9NLiN+ZjxXN1t7WDR1MW1rdVo5T2kmRFJOOnQkVTQifVd3Jip9Iyl4'@;
put 'V0ZBcHFeRk87Qls6Vml0KVF9VDslY3dPMV4+cXpkTVJ8cjZsR2cuPzBtKkYkOkQ/XV1uKjk6WXdwbHNaUS9lMTJ0NSN4RHUlPF1lRnMvMilKN2YxdnNvW3BlYzQ1e0puPG9xM3FzI3ZUbTNOd2EuIXNnMjFTIW5Pe18zQCopI05SVyJtWyU8JVo9dkIkNCI0RWslQzwqPlU4RTE+fGczdFkrdWR8'@;
put 'PFRgN1R3ekhfRVp6OnJRQnkmaTJYVG8jdWFGL0wsVFhpNj1rJjI3b0dQSigrMnlMU0lwYnoqKygvO0k6UWpDXVYuIV5wKHcsK1lzMXlQbiN3cFU6dH0sWnxERlhifkJkJV4/eEsvPyV6TipSPUB9VykkLzspSyRQOEd7RyVOI1IyRGpZKFpqVzpiKnQsNk5wVkZwU3Y3W2REe015RUErMHJlOHtf'@;
put 'Rz9QVmxfdTojQmtWa0k+eGIkdis+KzhEa05ZfTFweSt7LDt1dip1UDhybHRFTjUsWDI8JTcrQVVnO1t2JVc8fT1sdFtjaVt5X2lBKzxaJX1BPCpqTVtRPHdDMT1BO2NGZ3dSRkBAP0tGRm5+RmY5NlF6SiJtR2xFbn1mXjZ6MzF0S286TWAqNTtzQDQ1YCJKPmpPOzxxTWY2dH5XSyZjNSUuMmAy'@;
put 'KFgiUD1fPitJOkBjQiFQTm8oY1BOSEYrS0V8amNNfXlNbWxNQ2Q4KChyU2BESGkxWiJ4IzJJRmVSODs/TjtPV0YpRExwOU91LHgkYX1uSVVqOW5nXnR3b1R+QCJGMCpFIkshSl94VGE2S3BzdkNoTXZGI0xuektXfUFTUGp8KEczZDAibjY0QGpkOzB9Z1Y8PCtNPG9dRWReXnRhaW1zR3BeJSN9'@;
put 'bncsfGI1ek5vQW0wenRJRzNve0NMQGlEQFB3c2xhMmV3b3RZeGtfYiVHTTdBTjdEIWU5JV1RMFRqLHc2OFR+cnRKe3omay8/Pyl7L05Haz5lI0F5bWRjc198MGYpZmJQLGIwU2dVI3x7b0xmc3NGcVI5OW5ockdtWW9SXnFNaGg4fTclMEx2anJDKER0PiV3ZmB1UmM5YF5JejV1KDh6MGBRT1Re'@;
put 'IlUrV0lhRllgeDsyWklUYlFBTntLK2BPWD5GZz5AJFBUImJtVWpETHFHekh0dzZZfXUrd3A0cStyLGMxV047QnImdCZVdlp0bEVIJmhaekkqPEw5S24oPGJVPl1CQERqb0hOM3I9ZWtNJld5XT1YM3hoY2M7fXR0a1M0M2BiMn4mXX1lcV47XkZZU1V7N3VFVyNFKkM8Qz9rYCFwe21LJTRQYmJs'@;
put 'fkY0eTA+dD5FaV1RcHxdQXZlbDpQNFQoRUt0cnAzd0Mzb0o0XlRKTWBOY2hNUC54TUklXTZhIVoqTWtzQjwmUGBAQWJ6cytHXVh+PG0kQmJsdGYvdzt4KU9jJnpPKT9GY0tsXmtDJipTL21lZC8qTiJoWXVNaTlvUW8vL3pFKERqalFLNUcvalB6cmlMS0A8JlJ3Znl2cHhNN0UiTTFMN0IjYFpG'@;
put 'JVIlYmhEWk1MKjlRL01VamJKaGVmdWhzbmIhUk99KWhNQTVrWU1MVlVkSkNKdnljfjRAT2t5NzIufU9CdiVxIV1wQ0VfZDBIX3FxPmJvSVMoOkQmWjQ7W18/SiNLXWsqKVpKS2UuOFVkX2YjXixAY3pKXWtPYkghTT5fVV0sMyRuJGR4R08jUGkkZWR8QTxXeFFwOD89YCJhOnZaT3pSW3tOS2FA'@;
put 'Lk9jW3whOywmdm9Gb0x0Qk5kN0IvPGQ2cktYMmhhWyV4MCRvPT4lLzkoYU5yaz5XYXUvVHN1Mkx0W3txNi8wcUFDdW57fCRUMVN6S2tKbjFNTnVHbCEvSC5DcCkzJj5JPlh8RlooRCEwLEMsdV1xdWtuI11AY1dTPmI3WTIrInlRWCkyTn1OWz1XMURIK3d0V3UoUS9TPkp9XkFQM101WXA7RVAz'@;
put 'e2hwPlB6Yk5vSD8kK3lBWC9WTm86IndFJih2QSpHLiR4Rl8xSzcvSkh1LDk+ayNePGJQYFdMP1F3YlMlPE5uMUA2aEN7bnAvc2NsVkZWRzM4TmEzX29EfX1xNFdVZi40dmBxY0RnI0B+ekMyYCp7PThuRThzUDU8MSgsc01EYjhabStRTjBjYDM5aSFDdjoofCU5VE8kazQwX2xQentYMDtESntW'@;
put 'YXxZP1ZFenU1Y1Q5e2EpUmIqSjw0dzo/bFcyRXpkYiFtWHglTXl3JCJDO1IsRGV9aVtIdCNbKXEiQVhocCRoayVgWEppVTt1dmBOKnR6QWFjMHRJZHtQY0RxdVs6b1skbXMldXMxYkxtKDt6QkMyREhLQSNUYj9wQFNBb2toamBQZUc2T0RCWCJuPTJtOEtlWGxURjFZYkFSdjZJcztqeEw2TilO'@;
put 'Py9iYmAyeTZBYzYhdCQ7XVFFMyY8eFtAVCIvUj81ciVnQGw/U31GcDpCenVqfFpJaENGeEZPVlJqfCt8UFZ3Ul0yW0hbOEFiXkNMJnhUfn1Fd1Q3aV5MP2oqOk1uQy9IPn0wTiFGND1xQUs7d0tqfmJkcVtANCZuVVdKKHB1fSJyMkJZNGVqJG13KyU1ZXk7eylPNjk/KU9mN0AvfHk9aFcwZDNb'@;
put 'SyJ3JGkuKVt1cVMyKG94fk5PUUJYJXhKM2YzMGRQbzZwdjRtMmJHP0goXTwqYGZwMFlYant8YVlaNTZyMzcoZGVOZmdtbXozckZ4OjlHey5YcTFDciwuMHxwZTVfLiR2P0hpQmxzUTwwa15mantCMiY6TllwYEtKcmRdb0k1ViledGNaJj4/MjlqLnJFJX5rTi5+IVkuL3lsLHwmVDtDbUNKRXp4'@;
put 'Xzk6ZXg5YylOK1JKaTg5eEQmLGdDKjxLelFNWXd0cjMuKVlUTmZQeTVkWFZ4Y1BjP3teeUUiSjZqRCxoV0tTT2UzVipKQ3g2c3BHd1MhM2dwNGc8W1JQeXE0SzttVHpleEpeMFAvb2RQTUJWSnE7Zns5LmJSelM0UUEiODBhIU1mLDZoYiNSLGxxeDtvPXBEeDFaQzEqNy5EczBfKD8sXXZRTGNJ'@;
put 'YWk6bEh8OndBcjU4W1NSbkoiR18lek1BI2E1aDAkTyZkdDRQUSVYNyIwaTFLNjBCRXFWNVMvX11Ldz19dGBecXM/ISxRMTtwaGlBdHpffmIyJndGVHI6fj1DSXR8YHN7QDpiQFZEKm8/anF9R3N9YC42KHpmJGlOXlZnVj94RTFdaiw3PnN3bFR1WixsOkNLTX09WSVKKHMuek0rZ1VANDplPS41'@;
put 'X1slUzYsQysrUS89X1NCW2hYZGJ2PGRHUmtVbjwjLiMqbD82TFdOT3ZRYXdIKUJUMmBQYE1PUHg6cUl0MkM6Tl0mMkI7YSU7ZTxRfFhQcF9PdnxHYGpfODNlfGJRfEs1JXE+bD17KncxaCU6LilbQVhQb19gWUVTa1QkO0dsM1BeSy8iU3deQldoenNSPl5FNnJkZF53amA8ZHFwJVFGYC4hZ2E3'@;
put 'KFJPK2NRW0w6T0dCRllNczdHJi8hVjpQQk5BOVlCOTUkOn45fHpwak9PckJ3P3dib1pEYkZpdWsmfj0qenJRLCk8aiFgfnNtWihZUjd6ImRsPkZ0MF5EKyVzdUJ1T29bSn1FaylFSWZedn5mLFhVbGRdZUtESTgqeG5WWjVFSnd9ZzlAOyV0anJoWX4iQClHcTZSZTY4SnUsNmlHTVMrOXRaZ1RT'@;
put 'KVM+O3IwQjdLPmQmfTp4JkEvXStLeVJuNVg3N2M8ZHFlelNBTnVmbn51RVArLG1wTE5PKDxFIWZmaj89TXclRUVQbjBXcjQhPUMlfE8iTHk0eHZnT2I5ZytPNyN5Yn5IRiwmeyhaUV1wMyJOVm8kMVghXUU5RWJve1BqVlheQ3xhaiY/L3toSFRNLiw6OGw8UWJ0eitaamtaKVlJXyhSUXM7djVK'@;
put 'KUZ6PiouYn5KPHV8W3dGQlo0Rkwmc3EybC9GUk1tJmxjQD59VDokSVE5XiREKyFPdno7Z1M0VUtaUHpSKzkifGBldXNjSlJJZW1eS1hqdk50PSxVO2oieXxydFJnSmpnemZrNm1fUXc8ZFFnSiNva2A4YlI7b2Q2fXRtYW0wbngkWilQSHgoeUN3am9GeSUjd0h4NDM7KWdEVjspK3t8QytZSSZ8'@;
put 'eHRPTUNYeEBFRXVgWVJ4K1dqSHAhQ1VAb018ZH0kT2pfMmlIcz02fWdVPnhuPFo2TyJyY3MhT2NZY0c4WlRySH4kMXY6dXszcmc0aWlGT2Q1TzQmLylYTW89PWV7eSY9Vn0zKzNPVS9HPVE+UVUvIkMmQyNMN18xcFVgbG5DTWRPIy5oPnBCQklCTiFKQTEjSGtSUSo3Qy5RIThvSnZRfEYlfDA9'@;
put 'IVM2N3ImS19MaVNWLEYsQ1FOZ0lXJH46eiQuN1haeXo2PVBXdml9dDBKezdGcUp4TFI5OyZGdDVdPHFCOGByamIlL3o1aS5aTm8yPE06bklFZ0I0Q1djOXd2UGdCaD92ajxXJmNkUj1zc1gzKlFOeGJwaDNweixOKUxoXlk7ImsrXURHeXRpImFlPm5xfVs/KTBZNzd4U2cvSih+JU1EVkF2bUV+'@;
put 'a1RkV1ZMPEMzRz01T0hYV2gmI3ppQDxTN2dFSTk/eUNQZVU0fklXaEYvUktFV1o/STBMfiFJJi8rcDlKOChVQHVsQmxiXlchR1p1cSt5MWRAViV8YD51bXhZazhLaEhtKzImMkB7WyJqSmk5X3lrRih2N31ONzp3WCFKN2wwVlI+XWNMT0VIIklkYzo4YHUyfHIwRWdUZGxGXTxPJngqIz0uJk5L'@;
put 'Q2ZyOyFaekBPX3xFVypsamsxc3VtQmJ8OnhXfl5Kal5AS1QwUTxFdTgpPHRaWHJpPTNQOWcqRCNMaktPe3E+X20qfVY3UVlAfD44aXUsUmZNSF5QK11XJDRtcS9qWCkmSV00UEdwP2QyQCxeJEA1M35aSjAkU2dITSliNDE4JiQvb25qVS9ffl9hMHhvQlZSPVtULDRvS243fkgyPWJgI10mcHBe'@;
put 'bTdYWCFrJFh8WU9XJCxDa0M8M2lzLHQ4cSl3cjRSOCYmNHZNdF41P3pxfkVZRFNWYD9tUEopJFZzNHhEIXkrUVFwWXU8bXY8emJgOjl+amYmMEg+YG0rM1ZDaWF9cVFGIyRdWyRfSHNpeitLfEdSKGNsR2ZVbmNJcjJZQitgTCp1cmdqKH5EcDJnU0o1ZDohUGNgVWMpRlVyYH0+JGhoZ2B8Y1NG'@;
put 'e1BLUGJyMGojZT5KejkyXiU5dD5paWl0X18pcjxKLjI7MCQkeV9JeCRsa0tjTDQkfihPVWQ4TlF2WUNifXw2NT1fIk5FQCZab09PeGU8Knh2NytIPW1RJWcobldgLms2TDcoMEskaHM4NCRAZCI3THpwT1txOVZEdlExSEIrJEp2JE4rJWllYjo/d2pGb3t4cm09cWx3dS5jNixeOzJdIVk1a1Za'@;
put 'KStYW3FjPT9dR3N0NTQqdkczPEooIztKOip5TnlBe2ZSM0RHVClvREN3PHR6PGlIX0xAY307IkBtQUFgTF1pcFFIeDQ8MjtRe3c5SCoqTE0sdnkpWzMlYXB3KDwiUXExfUsoamhrZ218Y35LIj5tPWkmPD1IJnp1ZnYsTU05Kjp8ZTYjO2FKY2JscUZndlpYUz9qb0JxKCwrJUNMeTo0R3c2ciUr'@;
put 'bj05LzF3Vj5XPHN2STwvSl9YI1peREUjLi5nUCR2YFQ2KDVFSDV3Qk0/NSUlOUdjQDZPclJLdmQ9b0w8en5fQEtHITR8OGlIY2dGa2owV0U9allhWTVnK0E0O3ptRmJ5WlNKXkNfZVojViplfnwqeWZOaWhRZF85UVhXWTkxUngvP0VOVV8wKCoyPHVwbVVYZzpjS0NWIkBRfiFFNyw2UCRnQG1m'@;
put 'YGUke2dXYigpfVFPLDkzeG9DeSNqMHRUNzVaelg3fWhFJltvUkxWWVdFZ21hempabVhhQXFQPm5jcCpIU1ZlRDcibCYvVmtGPz1HZ0tpb0U9Tz44LyRtLkRZOiMrPTJnZEBqJCZteyxZaVNwIW1aeGR8YTUjKCNzWnNSUVFIZ04kdlRiKEgzdkFfO35tWXxEOk9ucFVJKEtPQT0hITlMN017O1ds'@;
put 'TjpEOE19R1omO0hANUJsdW9RfDpRZ1puMWh6OFVTe09NciNsIUZ8XTIsU3BEOzgxMyJJKzxZVHlZcmNRR3xnaH5CY29YLFo4alFsZTowck1DaWloPC5wMk1eLzgwWHpUMDFeLn0mMlZjdD8kI359JEV0NjZ6PS4xTmEiRVE0My4uLnU9fGVbeV1SaXhLUzdjLyV+OzxIWj96JWAkPVAwXVAqTkRw'@;
put 'KiFaKjZMVWlxQV5USCgyIkVQLFk1a0VmREpQP1hBK0lVVDVCaHlSMFM0aHkxUDJPRC5KZWVmWk5kVHAkTyQ3TlcjbntQfCZ1ZEViZyV7OV5sXT5aIlAzM1smaTBwMXsuSSgsbj1mSmxoXkJuZS5kcTw4eWx+TGRtfGsqPm9EPjJLWkplTVR+bj96PDpMMGAySWlCSUpab0c2c3ljTz5pZDBHZUha'@;
put 'TFdDbjdoSH5zOk1fcD8+V0JuZipJMntOQE5+VEdBSHh5djE9JFViYl5mSDQ5I1ppZkQlLzQ7TE9FT3x+QDF8MCQsejc6OSFNYHwjal5hezpxYzMsakIvN1FOX0tdajMmY2AlOFJpcX0qMUU3b2RwJVdsSm9TQSY5R1RgTUBzTkRHPzxoZi9wOSZTeU1TdTtoVXw/RnJPeV8vKklPa2I+d35TITZ9'@;
put 'PGEuNWFjcDtGeUMpY096WE92ZlNONjRdNzdiWyEzZF9TPGQmbn14QlYoMmMiYWBXWD09T15vSnNldV9uKShNdjJwSEplViRLXypeKD85Wy9EeXdIWndGUkNoeGtMSFsrIz1lSDdGMXx9K2xyazVmSyVWTWImPlJoJj5AY0NAaSU3XUo5az9US0diOERYMyV2OihYcmFyUHk4OShfN2RbP0tBJUl2'@;
put 'WTs9TUcvei42aFRzR0NpfDxiZlBCInwpK1hjMnhzQCw6UUEwVkA7MnxHPVJ0dWtSMEEqUyxxdTNaRTwsK2NpRH49LGJ5JE5OZF97LiZqfSVzXUArJi4lamRMbUtHfW1bdTdacnN8M0ZKamtVdjlyO04iYSolS25VSz9fRHxVcFhhU3RmTEc4bjkjVDM1RD9NT3l7OW1jJjteIUU0Vjl3emFZYkAj'@;
put 'Xlspd3JoR2RGYzgzNEJ5fHA9KkV0YC9oITomQy4rRTtBXShRcjNrJkdhPjE5bzlDMChbV1N+N2hRY1NqbjdmbUhlQmJrZWV7OjhOWnt4VE1aTjohM1dfdGJSfkAsNkxmMlU0bz94TEBqUkIhUmhMTihnaD46eUJzTnpUQDNSSDBzViRTcFBffiU3RDFOa1dWV0ZGSXVBPF46TXdNSS9MYkRwM0ZO'@;
put 'STNAYnEldVdnSDNGciFeYCZ4NWRWW0tSIXVAVUYiNnB5akQyd1J6NTMzJix7eDkkfU5ITDd7dnlZIilTISgmVkhqQWBscVQicjgkcUJUfDFJWUczezorSVl0PD5OJTRPOUNHQX4zcmVNJD49SlkjJlZGImlOLmRrSTQiTmwzSGJWeUJwM2VnZGZYcTdvOyhyYTZMQnFWNXhuWiFSKSRJVS5HPyxd'@;
put 'P2UsNUNHd2RWP3VqKjh5KVN+UFNSQXdhZTB5cUdRQEElKCt5TTNEY2MuNzJgZTZkd0p5ZEc7TTkpOXZyKn1HcCgwM2pzRkVkVEJxPm9JVjx3P1NrWzVXfkxCJGdxL1MhTFJ4dEpIanR8fTtXYTlEUkBFZSUybzJddGJ2LiRQVSFWZlErQkA7YjgkZTFyaGx4eEhIVCkzNEIlMlBAP0MjWjg/RzV5'@;
put 'VCVRUl5LMWZoekBWTU8hQit5QHEpY09UIlV9M1UpQTswVCFCYFAkKH5fSy9pOkRmIzNeWThYUURiMVp6SHB9JnlmYXFJeWZiaW03LllEcUY/TDdTPDcuK3p5QUxmVG5bXmooSSslW2QiL315O2NwXyhLSFNzQDgodF8/UGBxdkZkJmApI208JEM4IyNxcXw9VnRTXXt8aTRWOl9PNmMyUmVfdEpx'@;
put 'eUgmXndnIyVjUGM5bkppVG8qOnh1RXpwLjxMNjp6fGd1I20pQzZII0VgJTt0RyQ5cTUoR35ZVkBfbVRGMHwlQlNrW1pwMEdtcnxMWUZAaVoxM2UuUjpDQndNKDYqZkpaVkpbakMpVTBNfnlDPWBrVWFYVFh1ZiwvW0tNPVAsVVJ3NiJUSWxDfE5DUjtNVDdLSXhoWDh6ZVVtcm5CRUhKKG9rP0tX'@;
put 'P3s0PSlDeF11aHlwTzpPPHJyKEhtaUF0WUNXcjg+fUlVIVBUWCREZys0MUp7T0ttKDZLOEU9e3YmKkE0LG9aTHlmTEM4SU5ORDBEQX1qIWBRK29PMW9wN3M4RGh+MVVIWy4idVI9ezZrR1p4Tj54ITwpQjcvbH5AcGsuMz58NmNdU2BAPEtMRSVyPU9KSk1VZkM5YjU8SldrbkdBdCViIzZLQWBg'@;
put 'MksiXkRvNn1vUmR2b3RKMHcoQk8hO3w6UW48TmhbZjRxY0thfThAVEx2YSp+TGdNMTJQLjdVQGB3ZXpyKEdfKVRhKExzTXtpVm1PME8iJnZoLm4jIUQ+T14hWnxwKXxMZU59VkowLHFeNmssI3tjU3JLellTb35aaEpxLzZdMU00enVHaThpYmxAfW5UNSZudy5kKTRHJll1UGJwSz4/S1c0ODZb'@;
put 'NyFQfmJ+clZsZlpPZiJJaTIrVW04SC5wcUZ1Q1lpOWx2MixvUjdvXmZAd1cwcnZiPyUpdGRndGh4WlJ0MU1nQEB1Ulo8dFBdUlZqR193VHVwKElENyYkI2suMG1XUT1rQ1l4ditiSmYoV1trRHhKUiVEMzMzJVJkdHhOMy8jSG9deSJGazdWS11KdmlnSntSamlLXWlmXngle3BZTn5GcztYaE5U'@;
put 'fC4sNzhJKV9SalZRZS9tNCV6bzBkNF1AU2V2bFg3aE42V1FxZ1U3ZXhYfVl6fHJvTmBbQmlSSixeL3IidGRUOWRzNnN4SjVKWipMVSlqfHwwUiFwVHthL0UyK298X3tGSVNgclI9M1RQNDcleHI0R1A9ZzRNSTNsaWJha1haRjcuPDBaWTp8dG9iLFVOcG4+LFlXKT8jIzpWRCg9VVszdEJRc1lW'@;
put 'bW5eL2Z8dXZydFZ7eXJHX0tOJmNRdj86em9mOTheaUZPcngmaUFxWDc8WVVMNnxAZ3NlaGpbcCtDJFE4OW8xZWdGK2s/fm4/IkJza2AwQlVkT3FiTUI6ZiRsS1ohS1Z+bDdZMF5lPU5zP0I6Mip5Tyw4X0B5SEM1USpsLGE5SispPmldbmdrQyIwK11JRWdJdTRTPFNESXVMemNmfmVNRFgyfj9W'@;
put 'PW5GKGtQcyVRLzFBJChneVVBcjlqXnpLdTdqeEd6WDc6V15BTVQiJSxEdFEkPUssS0kmQ3VMQGxrRVZxUj5haS87N2pJQWY1KyowYFNLP0xyNyhVRUU5NkhYKDxIaj5fQkMleXN1YVY2RU5QTz13ZUVGMSpIIXpgPn52fGV6UTtgaSExWVpVR3FGRyN4elsma1dKSjcmQjF4TDE8ZWNwRFB6fnEq'@;
put 'OHckLElxb2kpQD1hbm18M0IwM2c4OWpZZ1hUTkNXLFhaezUsJGRONF5kcXptMT5adk1MZjFxKlMkWTdtQ311Zy5xIWFodDpnVFFnIzEycHw1enFdcltSW1BpKl1SM2xlTUNVOHBpV1V0fGp8aWxsYGwwemEwWmQ3NSNEakg2XWhjJj1mYjh6alRAMzpDWS9eKmR1bmpScEYlWUV7fT8wLGQ8MmU1'@;
put 'Qld0P2diKEt0UU1SISt+JnEwd2FKX18oQHFjVGV8KE1bZSNEXUhNTS9rKW0zT1pLZ302R1pVMExxWCEmJHNudCt2N1Q/OWtpVXsxe2lxOFE1Q3QofE5rTSUuYyRSTCsiaW4hN2JXZz5WQERKYlBKO3UxZnMkeX16WFpZV05CSDNxKiN6Qz8xVUhIUDNNal1NPFspbkV3YmJUdlZvZVJvO0t6LGo+'@;
put 'NCVTSEFaWjVdOyFHeSxfV1RPVmU4R0lYZzFwKz8lOGlQW1haZ3BiI21ubTNpYk9QMEdxczJPcC9pNihafVAoeC5PRWJGUzBlXzdFOk9QUl5EPFNNK3FXeVZaPnVFT35eYTleJSJ6X0AkNHgqbFpWZFgiJjFKLEh3dXAiSm9jO2FSQTlbXX52WUhfe1J7SDpkd1E6bmVkUlMyaTtseFFZfFk4QTM6'@;
put 'LGRuT2hOS1ZDQHZTSmNUPzYlWCpRJE8sVytleDNYTStue1BweGxEV11YJGllcFV1MmBPWmI/MTtuOXd0bVRnaTkrNlszSHAickFFYiFeOCJRSHM0bG9iUmEianpTMExGOzdoezM9PE5AVTluczM3cE9ZT3xiJFJIYnwuKXljUDxiO1suWWUxIUtreElEZyFKcipDQUslTFVqL30re05sLD5ua3xw'@;
put 'SXtORUJzRilxezYrLmIwMEBwckNPXyZtfUZibUx2Sls+JEkxWzt2YXR1eCZiJklyd3FnVipMO2BDTCh1P1MmSlN6TjtpPl82OE9CPzl5YEd1eVB0dVclWnY/IStwODssZmZhWXtjY2RCKjc5LmQoV3dhcl9FKH5SMVdvYGNbMVN8UFo+RWlIcD47LCZ7VmFsITlsSzg8ME4wa2N5UkV4Z1BoPXpY'@;
put 'a1dXT3FIWiV6ay94OXJWejVjOzBRY3srVmdXaUdXUzp+KCwvKyJHT0NwVixRe2FEOX1MXkNLdCp9OiRTYUlvSmltbXtNSVk8W0pKaUJ4WVQ1V2F9Nn44Wz02Yz9CdlB8dy5sM1hjcVAjVz80XytqMT08XXQ/V2tqKU9FIV9QVDJxbj1lRlZASV9WMXg2TXFPcVtieHJxXyVkcEBWNmIrd1hgQylU'@;
put 'eHk+SnE2LzlWKk9HPGg0ISRRKHhiUm8qPkw/ND0rW2wqcFY9MVNVNDJja3hPdFBDUCFZYzp0JFkuWDImKD9FInRQJkxuKElqM0AkNDoxV1ZERTU3NUtqWHlxMlVdV3B9UGg8LCl0TFNoVEQydC8sYCJCJjc/by9xSCw9I0xqQVVeNUwheDZaLi9VXm1oWGsjelhvLF9+PzFGbVV1TmpWREY4JWZu'@;
put 'X1A1fEdjVyh7e146SVMwcSpMUH5FKSUoTmQoe2p6S0AyNCp9Jmx4R25VPyxxRGtgV08oVnZyYUgvJm43YSJHfSxQMClQYklzL3FWdTttaS92ZyNefjhjczZqckNQMCZpUWQ+MDwuWzJmdyZuIXpnJmouZTp3NGVbPDk6ZnBKIzJDIiUoblZgUzojTUopLz9SKXFeKTVmdVBxKS8vPzpgJDwkITZr'@;
put 'UWg6U1g2NlJmN24rNV1+WkpTbE5oaWplNWNgL1tOTV1rLmYmRjVfa080QkNzSTxbP1JzRm0oS3VsPThAQDRld19RY29lKTlnSDo6ST5oUSgkLHpYI1A6WDNfTWUjNj1aZCskIVt1OnNvKCpNcTJ8O0ldNEFJNnBWWy93I1NGNlBaRjB+Py8reThgL3ltUHkzVmxSa2YuKXdYeF16L1cwNXdJd302'@;
put 'NkFWOl9tK0NxV1FwRyMzJGopJmIqLjomST1TLktCLD1XRTB6IWUlLlJ9ZltKO3chalcse0lGbloxTihLX0dVRDUsRC9oOnkhOy9CbX1pISxXYWpYd3x4NDkvSCQ8WzF5YD08TkQkeG1fR2BIRCJlUDw0ZklAPGVFQjk5fCNXfTFYLEJCLCZEJChtTjE5V0VTLmA9MHFjNyF0OUhbNyVJOEl0bVY3'@;
put 'NWBvL1MkM0c8XTx1OVhKNjU6cSldJWhAOjVxdndjYCRPIkl7R3ZpaUovOS5QSU90b148cSNMRlhBJmJiIW9ObjI4Jl0iZCo0IX5OSntyUnwrZEZTdEM0bitJUjF8Kk51W1VJLkh4Xk82VFo0OFpONkx9XV1JRF4kKixlI2RSZXBzaFB5K2NtWmEyWE1uOCojKkJZfE94LEJsN0IiPHhPQVcpeTAi'@;
put 'Q25XN2ZzN1V3fmJ3dWBNRjp0cnNHME4wTFRvaTAiRkdlM0AwIz97Mj9ZMCtnKWU2VlFkWjhVPldNKHtFaCxuMDc2ZWNpaU44eFVTP1A4b217IVJPRzZ4L21ZWSVgVDF2eGJeKnJYIlJEN00obTVOViVfcmMsTC95I3lCZVV5PW9ga34zRmVwJSkiK0UzRk90Y3h2NUpmREosbzgqSC5NXzlFVDBT'@;
put 'cyhmRW16OVZDKyIhQ3pBI3RQWFg5O2FlR303aCghMDI6PXk+M2cvOzkwMUdKL20yMl1gbyR0RXUuSzQ/dmYwJVI2RGNWKzdKbmooX2txX3pnSGJ7QkhQenUqL0ZkI1ZqakY4fHwhIVVNN0QpbnZMTDlCKl5VV0FTd3YzMXY4V1hTdlVueG40VEk5fShKaV0yTWdNYSF7cHtBPGgkKlZifE0sJD04'@;
put 'YVRhXlZaYHdNYz5CMFk6ZyF9OmdYNWxYKCpWYWEqNXZ3THxqbEMlY0oodUpqSFtnQlsod3wmLGhYcUNFQ0Z8UVU3cWFabSR4eT0xW2QiK1gkXS9GMns5U3NLakRoVmRJTzlhVyVJMUYlZ3RqezhGazA2YTRHTn5GUlM4Wlh8YkwsS3pBbTdSbWl5L3J2TmBiN2lAJGZaOD4pQV1DcW9IV19uaUll'@;
put 'JlZdeVFtO29uRDZAQTcrek4lYGQkcz1QSDpIMnx9OzA0I2FlalQ2VWhWLklNcW8kNUB4TWVeSUZbL11VLiFnakJyb3tUdkkkR2c5eWAhYG8jNiIuNjNmZDo6W3ciUk06Wy51fFtnckU3RXlqY0UsOnlSW3pNLm4jczI0RERlaCNXUDtXZW9ub2FOPSsjPWI6JlJsPEM6V2JjQCEqMnl3QlN5UFF6'@;
put 'PCZ1TyVFcEMwJVA4S0x+ekp8MipFdlJ0OXxqZ0R6dFQlYCVUI0hVUzUiMDVARmB3d2FlRSEsWzdMcipiTGZOe1tsVSR8cyVEW0FdQHM1Z3tkUG1fUmJSd29PUDgqbWlGTjxrOTQ0THhTZnBmd0NqZE9vdCZVLFdpd3xNUGlFOnw6WTsoailDfVh6OnphblpOPylJPXkxXSUrSixlZUV5cWZIYXo9'@;
put 'WTp2PC5CV2JyWl07fT04VklJI1IiOWdKJjBoREhdI3F5aXd5MzBde3xkQG5jWjEjcmlIbGxuNW5FY2Y7cSlPYE9YeUxAIjFyVX5XRUssPl9bSUFLS0o8UlU9T3J2dnFrW1hQJH0uZVV5WE5EVXF7Nj9hWSo/dTl2UW1bbXdEb05OQF58P0BjPk5yUTdBeG93bUdFUix3KCQ8PkR0WlVoSk03RCtG'@;
put 'JEcpV2h+X15ZUTAqZHZaZitbc3psWF1yWkNLPmhnRHAjJCJFSz5LbEpKUEB3I0p6eVYzRnt3M1sveEZUJG8wKjBIPHl5YjN2IlEjXiNnPXVFOy58N0pUPFlPXUEkVy9yYHxPSnBAMnFUb3JvV3ApKzZ3bUdRRkhZaCQ3PWg6ST44dWx7dnVze1YvJHQ1fjxDZToyZHZWejxRR0hGaDhLV3tIbFIp'@;
put 'PEtOQFFeL1ZQJHo2byJaRHBhZTZZMXl7VV1CM2JAUXFuYHdqQTRiRlkrbWUvOVZ3X1gpK2BxPCQkeSJ2ODY1MkgwSERCSCw+PHhvdEl+OExwa2h0MVNfaGkxTCh8UFRwLlpHZypaPj5sc0BYc3JtbElDWkNOUFBlMnQ/WllaXWQxOTQ/W29YQnUmOE0lV284XUZIb3Y3Zz55P3d1Tl40PlZwT3ZZ'@;
put 'VFtfIkFNVE11PFZkP1t1N1I4Q012c18mKj4lRFgxRzo/fFV8fD5sZ05yakdCQzMiW3ZFeH1oMixLQlZbXXJlK3RXMDo5aTV6ajRLQHlOWUpsIUBELipyanEuaD1hRUpYSE13NSh3JmA+OWYoL05mRUwrT2N6TkA3SDlAQyVLLk5kOENRR1coQi5pPm9mSDlXXlhJViI8MTpaTntRdCQwWm5hJEEi'@;
put 'TEUyI1FyOW5Fc21UW3Yidk5vLi53KzEoNzF3d3EyXSgsS0p2JnU8N2BObUVhTWc4SilZImdiNmYsMFgyWG01Syx5QFVxaGNaV35aP3kyXXFVOF5FVDVQQD5gLFRIMS83ajBGb2giayM6KHp0X05heFQoM3NZK01adlpMMzFAdzImVjs+Xkk7SUpddWJIPDdIXypbVEtKbXRNcDNPKE1nY1B7In4+'@;
put 'K0puViFNTG5kR2V5QmgmRG9nO15qWHx4a312NEJBfiNfaVkleGJXOTI1QFdBOXBRKW9Ca3ZnUixrZiZ7IVooW3N6Q1gibkhSbiw7WW1vZCtrNCtkLG5xeHhmfnZhSUg2YTBafDVTWTczMnNmOkI1Mk1EaUtAKlhkKnY0YCVmbFR1S1AoUHpKL2NZdk5rfUh3PGFablY+MTtlbC5ORlRzNyNPNFlr'@;
put 'cVs8OTdabjdPfT1Be0lVKytQemdfP2toPHMpO3IwTyJkQT0qNHBVaVJyKzwkImJCejo8fFB4YHRgeX1mb1JqamcqQ2FCai51QnVMeyZbWSp6YTUvanssT2J3eUJiLzFrTiUwNik0PmwwVG9IW1MoNDRPI2deaDE9WyREOlpHQXxsSykmdSNJL1U+MHIpaVc7fkBHNFo+c2xkV1lmOSFNKEhZIVVP'@;
put 'RXtCZmtMP0FDPUlfQH4rJUwqLlZ0L0JQazRrYS85UjdZJk5FMmg7Sz95KHw6e01iL11rc3dSOD1AYitYRCpVbjgsZn1yb3lPT1FaOUVjekU7MCRNJTUoNE1jdWRkQlpIcjRLcjpOTEF+Pl9sVldqd0J8PUl+cXFgOiNIaCZ9emtwaSFeczUyLGo4Sik/TFIlNFdmLjN5UT1MRWBaYjdDXzN+VyZf'@;
put 'fCxEXiZhKG1nNVJlbiQuOjRdbmBTUDV4YDF7KyRJcD1FPk5tdF80SnVrJTp8TVcrVXoofFc+QXx6UD9AcWw/VnFFMj4/W0tDSUtzUj0oPFFvYl0+M3R5b3JdJipNeE1xRTN9ZmlMcy53OENoRDBZei9nVGhTQkd9Nk84VypeL31YWSgqN287TWJEUD1fQFhDIj9yV2c9LlA3PXBTXT1YTTk/JCJD'@;
put 'W201Z2QjI1Y5dmtKd04rIUUpL2UyOk5EPjp2TldnZi5ueilLSzxjJWVxZytoenZuKzVRSiNaR0M7NFJwe2Z1OyVSYltga3FzbDBuYXYwej1GUD88U3s/WS4rYT5SRDFhWXd2KnhYVV5WeDIpRWskblt8RiwzXXxkV2MqOmRIYS5HNypTWzV6S19DVXh0W0M8ZDskMUUjS2FoViI7LF9UbnxxdXtD'@;
put 'QChabldROzJbKmpIXU89Q0hrfSoxKyJwKSo6bnpAIX4lWmhPdH5BVCNfIkRdcGJZbyFle1kqI1ZMdCNeWm9XXnEwOVZTLnJbfjZIYjlKTENhWWxtLlpkLEUjKyI5XytMI3kvQk1wX319X21VLkxTZmU/SGp6OzxXbzQ6WE4jVTY1bGU6JiI8azZEaWNMJlJPemM7Qn0vSkleOiR2Q3tjYH1eXjJj'@;
put 'QiQkK0ZYP110M1lkQV1aJlNjcz0kZGRoQmQhOzNHe0xKRTAwJUk0TmBDMEo3MUV9eFVxe3BaTDFZVXx4YnRsSUJnYT9OU2VdQUthNHF4ZjBqJXtFQ0R6UF1WL2FZIyEqSDlyQnJwMHhzSmZvSiQ3IUMwQjpNJldxIkc0OExWKSYlSiN4dzxnTHwmTX14aUUybT1xeD9nRU1NZTxeIU88RVFla2dq'@;
put 'bDxKRmYiO0M4fWFPdj9HdGp1TkQsd3s/NCZpelR4Rnc5SVBTNFZPelZQLiQ2dGFwYVBmcHpqNyhNbm8sKTNgQHVAY0tAR2JQT1Y1KDZsfE90MG1Mb2Q0MU9TTDNESHQ3OVZ1YXhSRVFLaU0rLF1vWzJuPlBTdEYrdVQ/WyU3LzV+el4/WjoocSs0PSpPMUdYXVV2SUdSdkdOUUhve315cSppdkcs'@;
put 'Sy97JTVyXy8rYXNBUEBlMyZ7Ky83b08yLmJtVmx0aSM4cnpVcHw3RXp+LF9JeXtVKVhaIiw0NzZRfnZBXnI6Xmxde05oInI+VXFfU0JYOTFNVERvWjo5Kjt5ZV8wPF5VZDNeSVBpNldXPiomK2hEWjc3Syh+IjUxZkhpOl8sfElhe1BeJiNZODouO2EmXXM1QEw9N0YhVz15Xyl5QXJlPVVKJSE2'@;
put 'fWR3flh+NmxGSTRfP0YmJTB3XixkSCgvOmpnfGJBMmQzL0Y2XlFgKUwkcShqSHNXbzlOJEBJK1hCdFJBZHF6bWhvYzRtJnJ7fiY0aDtLcUIjNDshWSJRbm84SzhCVCE1KkhLWC4pK2RERzM1dkJEeGR8SHNOJTZCR3NDQkErWlp0LjQveGFoSUlGYU5IVjZnflptZUA2IkBnfExhaHhCZSNBdSNy'@;
put 'bk0ueXxRKmNEZD5wPmpnMyY+dChrLkNKd2doQCpGQnZfKFBnJldTUS5ETS8xcT1tRXV4XSw1b35ASE19ezF9SmkxTkI1TGF7Y2Y7KVVYXi9leFpsPTFpdkBXa1VtZEcoWEx4Nnksa0EufnUsNUIpRG4jJX1ddl9bYG5PVXdiZHJFLig4THIpMVdTcVglcEIyTW0sYHs2V1d6bHYwNjJeeTRoSTM/'@;
put 'aXhjRCkmJDpjTGFdKnJCY0V6YFc4UzRqez1RS21GTkBKcW1VQU9nY0t7VFgoTjlLZkoxbHIyL1htImZUQSQ6WzNfL3lASCErclkzO0lHeVd6Qj9Yfk16S3pNSDg3dkdaYj93dCxzdiEwfmUhTjZbUEl4cEI3ZCV9SUFQVEBOWUxnMmNgPzFiWkRbZFAweEUsV1JpPi9kbU4vLHRkRkg1Y0ZjWWtY'@;
put 'WkI/aWUjJnFUdWZ4JnNhQ2twQFBOdCZZMGc9Y1ZyfWs9ZVdyQERZbzN+XkxURDpUaCtqTSE7cF0zQTwsQWBmOTI7Mzl2d0ZVNUYkZEZQOUpORlNScTZodk9yfmBEdn5aTVhbe3sqOn0xJWhFYW1HPWhhP3x2dzloTn1zIU5rV35HOX1VdEx1fkBHLz07P2hvVTRAMlMpYjJPV2hKQi91QXtdUEBv'@;
put 'QCpCd2BjZCplcjxAfCs9R2BQYUtockZWc3UpK29TQ0h2MnUmT3sieHpJMnFOSTRyaz1bZEw6YSNHR10qfkJLIj0qekJKP0ZsL0FecD4rIlM+fCo2TiopSk81bFA4eGxyfSs3P1h7TkVpRmF9LjttTmY5ZX5JUnAkKENGanc+Skc5QTtyM0xwcl4ue05GZGhLYiJecytrbT5dJjVVTSk9e3JSKUtA'@;
put 'PV4kOFo7W2BPYTk4eXI5TkB1flRIWks5MFA5fi5zaytuZDVWLFhwcmdHNTB3eklidDcyeFtHNXIlZzJsSGtQK319cCYwVXI7LC5jKElRN0I5JCR+MX46bSs9dHRvKjViTDtneU05KCNqemUzQTRJLyhGcVd1WT9dLmU0WTRxIlZAOW1sS0pvaEMxa1lwP2trW1p2M1FgSkEwMlVYI01ZQWQ/eks/'@;
put 'Rz8pITVsW1FFW0prZip3bl4jY0h7czxmZFdLRkAiKl0iTEo5WztKQiQhUU8qXlB6dVZAbkt3bF9vKH1lN0pxYlJCOkpqIlFTZGcyYTglR1RGKlVQOlNdc15GQ187ay93Z1lGbjMofFFycFVEeUIqYmFmSH1OTTlqen5FRV0+QyhJOCV2KT5tZ2lTaVYufjxYWlFvLHZHXWFaZ2FuS0J6XTNwd3xC'@;
put 'JjNnJTNRRX01UXMiSnlrMF9lQHpyUixNQkdidWhTNElHUTMxJVAuND9bOWZWTzo0Mz5qdUU4R0JyempZO342SCgiXj1KVz9Je0NFQEVkS1dWQ2JDQSU5UnRbekFxTm8+ajdWbVNTLzI4OlYsNFNndkJkLHUkQTd1fWFURnIsXSMhekI1RyQ/QWM0eCJYQy97aSZSSjlgfnw3fXBAOz1lIlhbSDFN'@;
put 'X0pfKE5DeyhhYE1We2tGNlBCI3E2K2YlcExCY2piO1N6ayV9eHs7LDFeR0pFU2l8Y0YsKSgjNUBTZnJzM1giZWM5SjpEQ2hHRW9bJHRQPEtWZVBhcWBYSiNTcTIiKTdiWlEiYXloIkM0LFJXZkxMQW12X0c0I3MuXltPYCl4KmolTCs9W05ZfFl2UV5yPDx7dGd0eSF4Z190clMlMjZCYkQ6Q2Z6'@;
put 'OG8jOWNeMEY3cjtCcWxCcmx6NlVGb342ez5TSllySHU3cSxiNnw9Q1hMTkBYfWIkVU1fez1NQl91Y08lI2s6UztmLEcldXIpKHRpd0IlLz87THBSZTZaL35ZV3RSVyEwaml0WCE4Slk/fXIlQT9DTWxHOk8jbV5ZNEJGMylQPEtAN0RzJH1MN0FJSHVaQ3ZXLjk0JituazVRdl4oUX13N0xLcX5Q'@;
put 'a148dXpiaUBDSV98WXpkKzRqYWNPTW92bH4/Wj1eejNANCwvQSkrIyJvODQzWnppdSx6bXtaPWUwNERLd2I/Sj01bms6cDAyQDcqSGlSY0ZDVSluIzhzSEBBdkl5LyR7UCUvZUhdNDh7YlpBdjBNfm05WER3W0dpQyQ/X0osb3syKVNmWltjaVN7dlRYcGx3XV1HW1YzeyVVOmVDM3xIaDFpY3c5'@;
put 'X1E0QSI9UDsyb3V4fSM/IiNrfVY2YGshSi5rWlBtNjplbHI+KFJ6Xl5LIlY+ZWFKdzdHKmhTZy56S2ozZ0Z9S2IkZWthJSkuaSF8dl96ey4rbCVkRm5JOyY0NmtKSCltIiFYQktHU3YxX2ZaW3hjY2BgZFJYKkQ9em53eyR7P0ddUVB8SVRVJC9wSjZZJT4oWShMInMyLjtASTFNeXkvdHRzZX5A'@;
put 'Q3dOY11pcjtbWEFJNFgjU2BUQzlpdTpLOEglOkFIVnR3QkA1Izl0UFNRbWgjazRaRyh5Ym9hbGBlSGtednMlMDNOWFgoJT0yVGNdZFNpKHQ3cmBocTkrcnRHRWMoL2c1bSklISNGOj04bjJOVHFuWGA3eEhHYkBiUStCR0lGbGUmbUxeRGldOkFqX0xmZGVwQj09QXlQfEVoV2xnYGA8SUB7PXd+'@;
put 'cU1yMVp+XilLZU9+KHZJTl1HaEc8Z1s7KiYrekBIQnY/NU0+NzJFUiRGLztQOWlLRXVpT0BdPVJ1Ql9UPWRSeE5iUXY3e1ZjPWZfWEBKc25UUUJ1TTxjVXA3Wk9nP3pgbi5CI1BldiMpPlUyZyNLUEVwZ2gyXSs9cFV7bExhezZ9fGJSR3U6TX5EV1IpZGZlO05aOFAwUCkmYD9+NiNqIzRFO3tY'@;
put 'Wjk4P2diZyhXPT9RbWMpQ0Akekx8eVdYNFB8K35tbltKN0VUaz08blFRbmFoallPcF0pPWhxMmxvSCpINkBNPV1OXS5tWD1PVDNxWzNqLitYdiVKTFdyX0xKOl8wc2lXZ3c3VExDfldUOzZCay8hRkNWO0RzSTQmQ2FqfitjYWhwTUY1c3chVCFsd0ArJU1AP3V2eDFJZ3YrOl0+XUB+N0leMyZR'@;
put 'aUcpfGVDXj9HITJAez1mIi5KI3JgM3BlIXF9LndDbitDbUxpVi5TO2pTKkBWbzZoVCF5NVJGZXFxS0pXcm5rdX4/ZE1HM2NyXy5TKjw6aTM6JjZ3JjNQQFkzKXRaYmdsOFIya0tETT87S2dgRVdOO0t0aC5UQkIpZDd8WzNfTXJCQ3pvbEYoQmIrNTZfQT14WDc7YEN3SWQsSlgiWVkvQXUuaHsk'@;
put 'VyU5WFZ4YDAiQ2skMlJ3eyZqZ1ZOaCNnPW1CK0MoInZZMWhIPWZqVDpeO3Iia0tybj9YZ1R4fEhOY2skbDJfVDBQaiNQanIuRXIxV0d6YzQsfDw8W1srTVRIR3VMX2Imb25XM3pyQDhkOG5pUGl4a15PbyVKM1J6akhiZC9gSE1MdndoZmgwMDRoRX0yS24xWTU4M3AxcEAxZm1HdUNiUHFOano8'@;
put 'ZEtzNlFITi5AYGA+Rlh+OX1AOzgiWV91ISFwK1JoLlt2Ll1Xci49Wn0xYnFmRTFFO2FgPCpUWGJhOWRqWGtMU2JWe3VtXSRTazt8InJALHJTbSk+Rig4XmliP2ElTGQvL04/VnchRjtlR2hjSHRLI3x7ODUsRUJXU1tWfXxWaXlgSlhSJEtOaUsjfEU6JF1vWyp5Km5aeEFhWFpGbXx1RFhFKGhm'@;
put 'S08xTGYkeHVJSHorJDtBaCt1Iy9BUDdWe1JqJmFRMShaXl5PNWcjcGlANmEpSjFeMnhCaXB5Pj9VRDI0LGV+Wk85QSVfMmRQdDNsYjw1MC9mNVRzYCE4Uz46Ikk+NUAjZkIjSThvZz02OClXMk9+allONFRmbjhFRjQlS3ZgUmRqQDBiaFsjZSRUUmB0VDpYcjBXW1ZvM0xmPD9geiJbWihVSCsq'@;
put 'P2k0RVEofkUlUjdrOix0W0UiY2NLamZuSU1UOXNDVFZqMFM5cjd4a2tRaVI7YiF+TzE8SilIdTFDYjJhaGpHTDlEVFRdVW9LeDhnK09kVVFtYEpmJCpxdHBfY1cmRnpQby87Tkg2Y3QwZ1NqWCFlQDVWdDZMMHlqOFV7a24wVWdwdlI7fiZndkR7SGtFP3dFcW4zeC9hMlImfWhnR3dfOX0lSDAh'@;
put 'dG9XOX5hP34vXTN0cXxfZiIhKzk7MjdoT00rLGh6Q3VdISRXXzVrWXtpej1jNlJ3ZU04VjpUUCg7WX4pPyw4IV02VUI6fURjdF9uU01GQW4lTmJoS1RkLCQ2QSZQTSJdRENuRkYwMn51K1hsanQkdEdrbzhIOW8lcyJwLlFQNzB+JWR6WTo4dylFeWJQZndUaF85a29SPzBZW09rbm9WKGtIc34/'@;
put 'LypfXkYiNClucXJuK0o0K05VX2RuIV5zSS9AfSVmXiohcjk0bEJlPEw4Nk8yPypHJGBAKlsheCN0Xl1yUlVfYD8qd0RbY0tIbUliPk0/RFkuZ3J1cWJ8a14pWVZxZigiRFQrV0xleUdFaDNpYiltT2JpTX1fPDFedVB4Mmw5XWNbOls+My5TdE51VF4yKzZyI3ZIMU5MalM3an5VQzlLPz5ZbS5V'@;
put 'VjVfITc9JGQvI3VpUCtmNDROdHU3e0ZzbnFaaSNpJC9IJGx8RnlGdEJwNXIsRmU5IzpQaV5DQDBCVCFkc0ZhXl8vNj1GOHJLZDpPbiN8QFEzYldGezBfI0ZzdUFybHBkTDsxSSx6Oj1de2AkanxVXU4hUWRZTHshYCFuJjtbPVFSSTNHcUhORDdDa1trdiZWUHROdjc/TVRkV1o+JjkjeXdNb3pA'@;
put 'KmdDaj5SLyE5eV4kaGdjTnllMDNoKGgicE1SNEQmImZCVj9eQGBGRWMlVDFFcSw8SXV+L29WNytJU2t9cXksPjhQel0vNHIqSDUiaEZ8NCEoPm0wbzZKZCthRTdZX2NeOitAS205ZkZFK0RPVVB0REswVEV0IUQyVTR3UHJmZ0k4ViVWcXlDQTwzVStpalglJXB6ZDpOIz97InVkUlU7MEZMS3Jm'@;
put 'VGNkcl5Tfk5gS1chNm9LbW40TnJIaDElSVsqSyhaX1s8PyJsflZPTXthWzdkRVNKTEgsJFBAfGhwXmw5VV49e0F1JVhLIkVoNGN2LkNdIVIoIXRJbXRaKThqd01XQnRBOTFsWTg3Ul1BJWl9dWU5WnhxTl52RWpVOz5IPXZfMisoaHJEZkhDTngjcCxlbipLXiEhQH1SN25QOGFJKHl+RH5pPkdd'@;
put 'RV47UDRTWWlwImo4djR6WkQrS3BuODFbMSVSOGAxTih4I3huNDFbNXdQV3k6aD0iPk5taG8qOENie1Iwen48RDJWeDsxe3Q1YlpNKiRmQ1lmM0ghaik/b218VGp7QSpAITF6IWxCPz96RUg1W1VuXUc4biJgQjhRKkp3eGFSVWtzX29gQkR7NVNqZXwpfXJkOWJrb342U11JeWpUSFhtR2VLIlJN'@;
put 'LFlaXlJueWVMSX0uMUsxPEhLInVzLCRxKnJXKHl1aSh4T3M4eCxOaHJKb1pmX2pKKGA5VEU7IUw2dDhCQklmcDJHcXhUMUFfbTkkakQ7dStEYF1SWztdWDNnSkI3aGc3KSs+S2BTbnhIelo8QyEhZTtFQmMwQlspSS83RDJuJEs0PGcwajlYRlMxTWdjZi9ALnh7dlpuQFI+KEAoamQ4dSFBRSww'@;
put 'PCtKJG5RTWFKJD96alU5dEhkckUze1pLSmFzJG1ibDc6LDRBXlM9KkxZJHlHSm1EKFRyVGdsWmJjIUpFTk40Jk1Be1pfOGU6ITJ+eVF9WXpLVVExWkIyJUohd0cmfm9kP09NdD4yLnQhQVp8JUBdcFc7a09xd2NsY0s7c3g3LEp7Z0VAN2hSM0JPdzk7Mik2T1Eqb1t7QTYodyVVeDR1ajlrOmtO'@;
put 'ZHI7S2c9I24yX2l+NC5rQUlqR31RQmkxayRPe3FRWU8vbDh2eU09K09KaEBXYGRGIjhURzVuem4mMyRPIXJlJFtvO1k6e2A0cElJdFZSLnMrP2J3JiU2eklpS1t8UV4vV1hZWjFzQ05FYFQpdCFTUDg4R08qYXsxLFs1SkpSZ1E4ZzxlbiFLT3FvUUZoLmJSaWc4eTlKfipNRDhlfitWcSpleCxt'@;
put 'NSgoSi8+a1klSV17Y1hFWXF7bz88OG1nfiZad0NrQ1tWKC8mM3hWKVFXVkVOVno+R1VIaWNMPTEvYSZYekZKUVE7NjJOZmNnKUs3K1AwdTNHaFg+USRLIyxhVjQkL0hHdSw7JipFYjZuclZicTw0fVhXYXw/ZkBAUSElPHpaSSw2QzBIYlpEa2xLenBPZGhCVW1GUilIQz1Iays6Q0wmN1coKj9Y'@;
put 'Z2QwczhoNzlVVVYoWDNhe008U0QmO2BMaHIzSFYiPGdIXmQ7dnB3YkdWIzxxYGx+R2tofHojJEc+bUpDY0YzaX1ucUlAb0ddbkUmTzR7Q3gvNmNRUGNJVyF2YUp8bDw8XSRecUh2PGYvVzlebSh8KmVQImhrXUgpeWw8ZSFaXUNmN1Q5Q2lucE1EVXtTVVEwVWMlTjdlKU57UD5GaHs+NyZiazA4'@;
put 'YG5wKFEqPTN+NGhWbSNOJlc1ekIwWGZhSzR9a3JJej40eD96cncpPTchUXl7fjFrMXJSVXdIRk4rQXZrUHZTR1sjYUEzI2F3d0JZYTE+VlVIST9XXjZhdipZWEBvfUNtMX1Xfjg6VHxsUDE4OXBld2V6OlR1ZGcxaGIsaklJXUVFQDJYPiF6QWckQmBCdHNyUiNEVHcpci46Xi9WUEBeUzRkOFcq'@;
put 'NiFGOiFYUkpmaEBiWyFGL0BUPzxFJH5rfXh0VC8hK3YmZHo8bFJdWnFgcE1pc0lGKGZxa089P0dUckVPR15OMHY4R04mL1U8WjpFKV4yWDM9eUUhSjZkOEpCaThZcTdCUCZVQHx2aUBLMH5ZOUUpU3hbMktjLFAmSEt+MWVQLjF+SmBkSG9Kd2JxMCZZeSZYclg/bC4vPW4vflFpbDUraEtAJHR9'@;
put 'eyhtclkmZjZWbSpAXT1vb2MiNjZjPSJuQDUzYUBqY3NufjtieUs3SilWfVVAJnk2ImFwJGlLSSV4fld9VylnI2NgQCteX3NqKy9yUEZPUTYvNVRCMThiYlVpaUZJInlvI31oInw+X0s4KUxuWlE3M3J8WnZMXmddVWdeQVhUPlNPXjtkKlB8PF42Oj5FUyEvUkciTThvWDddIkN1Y2k9NS9VZXdx'@;
put 'dW1GdCFePnBIS2BKSFdKPUt+a1M4MXxiTD4sUmQuYjAxQ2hqW2kuNVdMIkZ5RXU9Jl5GKWMrNlNXMH59VD1MUzBrJX1POk4zJFBFTTwwPV06eSMwJVVyTDg1TSwjVlNXYHovcGBgT31+WDNDeVMhd0EuP3NRLiNkdjB6KnsxYD9lOXMpJmk2V3xoMWZsdHEySW5kQ3M1MX5NSzdha0tDckJkI1ZY'@;
put 'PXksTzFEKnAoZSY8JVlJIy46PHtbRDlOaSE8UG1OXmo3K1ZPWEUjZlkzYXQ5QG5vKX08RjFYO3VGPl9RUTsuJHF1Il1qfXohJExzMFVPZVUrZSlWbz1uQnA3ezwxJSJRNiV8PSUzNU91fDciPC9+NmckOXQheXU8VHQxSXppcldLRGNNSzd7X1kkQm16TnMySC4mclNXJjRSc14mQ0Y7fmc5SzNl'@;
put 'KXJyZU5dMm5nZj5JbmQ2RmRXRk0iQ083ekEzIVkoSzt8TVN9LEFoeWl4SnY+PTtsZ25VdD06K2s+QmxxKVA7NFlJXTlLeHh3d14zbmMzZHoodD5jc191a3wuYEwzbiY0fGkjWEE0e357TTtWUFJzRFtiPno/RTp1X1haNkheR2NDVXBGazMwemx7MjRZamMhMyolbDZuc3ckRHx3YkwoPCFzcG1E'@;
put 'Nz5qQTlySHwzYXQ7UG4yL29tYztAOTdEeH57KmIjans0YiZdN0g4VTBVX2laNUJvdTMvIkpjeUV3JFVvbWdFOzJidXB3QXBzMCZoYiZReztQRVMzcl9aMko8Uz58NU0iOmMhPyVDMmQ9UVMsVShJWnokYCNiZFlrNzJZcTh8X2g+bHghOmZxImM9fnFGT1hbPFt+Q1Q8c04+STJ6dnRIbnMiZnBV'@;
put 'OjlqLlpUfEp4ajw1cF44eEpkZSpgTHVTIk0wN0QvRUIhYlFQWGw7SFpvZFN4Oj9eI2g1bEApSylGYjNZeS9DTXxjVzMwa1hAN2ElNiw8VU1neGpDV0l9JWlQI00sWC5dMThBeE04Z0JLKEVpWHdPcjJPQ2lAREpoQ2YlXmt1cDg7YWlLWE58eWdbXi5pKDlNTnx6cWkjaUQqQE4vTGZSa15MUDI0'@;
put 'aHcpYS5+Xlh5YzBrNlFiUFQrI1piJEBpJm9qMlNzaGpDQWk0K2tYMl1zeWFTMH1XdDA7IzspNEVyJDNXalp0JEtUOTFIPz43SnN6blRuYksyOEgrdDtOVX1rO3pOMyJhbildeU5xMmlpaEpaQDIpSlZhVFhEYnhGK3hVWWtUTFVeJEFWKiZwbnh9ej1VYjl8fFs6fSVufCJtITh7bDwpdj0sWCZo'@;
put 'XU9WTixxQGh5RUAuUT5nL2x3dk8kP1E5YzkzMTo0R1dSRS9TMHFIbWZ0ZG9IX3E1eT49XmU4N2IhSHJgbzpwMT84TFQ9TV9TWyx9Ji5sUlFSdE9OXzhwLjZ+TXI4TDEsUltiKi9eflc1Uyg3U2tLN1NHITQ9cnFXLjM7JXlKKzV4dHI2aXdUI3VoWX05SnNheE1nVD5STkI/VWwqZTtfbnl7KTRZ'@;
put 'Iyw2WjZ2RmsoL3MvPEM7JnNucztAaE0+NE83LklYY1kvV2dUMDVFX2M1dm5oYjRDVTo7Y1A8cUk9PGtdNylWJVloeFo0eHMse3RNcXJVOm40U006KVFqI1RSUlJeJGM8L2A+c0BsfCEkVSRPVn02Xmo6M1l9R3R0KDJhL3BibEA7TnhOTCtzSzV3Vy47XUNVWS4pfCYsc2hQOC9EPSJLd2s+RGg4'@;
put 'P1IyLHsxbzNFdzppP0cvZUJDREFWSyhAYWlka0BtNzduM0coVCJHaGU7I0l4T2twMFRARGA9em15R2xTYWU8UFtWM1ZGXy8uI0IuUjNaQFZNI2RIYnRxIjElaStAcmRCYkc7e3paWCZxRi9jWmMoPTY6LEBvPlV8RkQ8PURhXV5+K28/OmY9enxrazZ6NisyYUIvKFc7bmM4PDNyNUpaOzx2RkRe'@;
put 'OEZNM0gkLmd4XXg3SHl3SiI1T3dmKTJiSjJpLjNwaVBrT1MmY21kODJBVXgvIVI+N35VK05SZ0prcEI2TFBCVVpMYDQrNTNGeDVCd3YsOkI4VnVed2kxUF1de2k7JlIkYCUzVCJ7N2E3djgoYWwwUldZd3ZRKCFHfF5QOTFUZFRnS2FJNF10VClEUDZbS2doNSFicCFTV1p3YTkoaVp0cSFlekp7'@;
put 'VjMhWT9AfCZ2VTZTeilWMzY2T3RvfE8mVj9jXzNZb251NGFMenElNHRHe0dNdzN2OiMlLzp1PXhCSFRsLG8oRkZyfWN4JnczeWI+bCNKcHheQVBveiNueHQsfkxAVmdyV1E5aGorYzdFW1RNdWQkRWFlYHZJcVk7MjYlc31ZIUJ4dDlqUWQjcDlwVUQvdSE4bS9GPVlTMWdDWVMuXTE0JHRHOF17'@;
put 'Z35vMFYwOm5bMjcsMXRVYjpkQzl6WHxLP1JMcWI1ZitmPlpoYCh7UjgwJns6NHVqWWB3cSV6aig1YVMuNkZUa2BaeW91fGhjKnZIaEVuSXg+USF2Nkk2KGdLTX5yenh2eVhtSDheWS9XMVtkalJeW1llZHJ+bH43fEdTQVBhTn04SyplbTwrJGJzU21NY24ldTdOPEM+Yko3YilaNltWR1ArbXAo'@;
put 'OGU5eG83InUzaCZjJm1iNVRlNE4rdGQ2RUdPXj0ycXhUbjwvN2B3LnYsbHNEbnFLP2RJYzVzaHdDYXJfeyFIUS8/fTU7I24payUmOChaQFVYKTJxKSZbemdQUHFSezwqSDd6eGY0VGQhYWBiX1dbLn5uQTJmNTRAcz99NzM5YTZMT2IkNTpvWnI0T05YKlUkPzJ0JjNNNVZjfnFhVGdtOWpWdVpp'@;
put 'SzpYfmFWPmM7TUJfeDFXWDgscm0yTiZbb0NQeygwZFJ3djF7aTRufFIjZTJxbns8OyJjUyZdfnB6dUdMSDpuYEMhRT49fDRjMnd3LjZSNzg6Xi9me3dSK152JEpgeG0jVlhRNGdVSlQ2VnRWblZhZzJSK0pdL2A3L2ssKlloaCVMbEdJNXosejJ4KW11Yk9PZGFOdmZMRXR9RHR+eTVEOnFwdXpl'@;
put 'Zm9AYEx1fFZILGxvPypUajAhY2kiMUgxQWpLITJMflBSQjIsRS8/RGBiWztXeE9fMU5+Q3woLjIqZ0Q/JElvJFtocUYwXXJpJEhpVk9+Kj9XYFdifjtSKld6eyN6PjdeN1Y0V0VLMH1VYlVZZm5vWkdpWUkjNHcpbU1AUzUzQl9lRnhgZGArajh2U28uU0lwOFpuU0ZnJUIxRWVacmMrQGQ3dDBb'@;
put 'NDd8cXNubFgrWXtdQSk5UEBUYFlPY3omZXJrSHR9fnlQWXZpT2BhMm1NLkReKTdqeHtmaVo7TmF8a0RPVnAqMmxwYis9YDhUTkdPTVUqPFlnREdKfVBzXzI0YXZbRUkiTkcpNF5qKGd7bjBWdDRtdUZbfFArUjsjIXROW2Q2VlBnVWFoXVpQa2c+YSxhOCMxXWJ7ZTZ2MjxVPy5sRV9WNj1LPWck'@;
put 'b241WjpwYT8vcXgxPUIwWVVZcTlQJENIe0MyWHgoKWI0eU4qJDZrcjRJQWh7cCYhTX1aVXJUW1N+MS46R0oqKDZRKVIlOz1mRlF7TlkpUkpfWHw5djd5YD5iV1JAWm9tb2h9azVGZ21WXlVFOSg+Q0JKc2dSY11MVSU6QiZfSHQqUlhRWXA9czlTUDtZXn0zY0oiWHVeMkk6ZHgje10uT3doV3lW'@;
put 'dl9APD07Y34sWFh0bFRTa1Qlck00PlYvZ1BpY3pNZXJ9Ni5tMHJdbnhWeTEsRm8hW1k0KE06Ql5yQTNuTXl2OWc0IjFSNCh5ZSlrSChmOX1IPT5IbEVQWVRCdUB5TT4kRktXLi5xQS9bTG9OLyNmJVROc0hkbF1ALmp6NldTRlEmeyVVNnFiSUlFIy9yV1k+NEZIOSwzUjY5dU5ScWdQNC89dkVH'@;
put 'WjV4Unh1JGxZRERHblc0TGRhY3pWbiE4WiQsKjo9JVRBIUMqbF9xaGJDemt2Wyo0NFQxVyZXfFBJbFBgU1ddKXllOT9+KlIwfEp7XyhhOFNnLjJfRjZmWCl8TVRGREsveFo2NEVebl5kQ0M/R2w1RyZFMU9Pak9XP15jaCFEJjk8a1lmKSMrYENxYVM/RGZGT28wTS9PdnBZfVFhODUxWDUyVVdK'@;
put 'fkNpYEI1W3RoXl1EKk82OCw7JkFaKFRdYT04STJHSz5gYCx3R1hZWUVNSnpONTFbLi5OOmk3MXo/ITd1I09GXnk1QnZtbjFmdmJrTT08MUZSR0J0L3s4UFM8dSJofHFRbywvOXcuRkVpVXtPYWY6TGdEJCFHcmJHMC9xTUZtdiVLPnR0c2MqJUBUS31NanlVM182SEBuUz5EYmB5en5KOE0hQlNl'@;
put 'LnE6aD5zaEM9bGIlcnR7dz5QSV80QXZyTEh7NU5CcE99QGF9cmxjZlRzb306OlEoKzpaSS5oJEVdazJmQEdBWmJPZ3coMDk2V2NLTGVKMXc7KVNJcE1ZdmFkIjxnLGJudGN0dElSL1YvJS48TSN7ZTU2fXNEaTgqV3RKO1liWDdpRVJuQT91JXJXMUpZNksyKyxFWnNhKS9hPnslcyE0ZihsRDVs'@;
put 'eH55VFU5bTtoPzZeUmNUXXxUMC8iajlVVj1Qbis7MjomP2dvblc8PU1FfEl1aEdaNDYsajJ6dVBvUSZuSj5nV0psV0MjeFlGWHhMLkMoUTFCQWpRUlBnUTJzb1FbZyV5UFdsXiVmSSRbQTI8djV8az1abCZiQExNS3o/I2Ewc1A4LjFEMkx0Wil8IyZsM1MsO0ImajVdXz92PV9wIzNeVldxe34l'@;
put 'YUpLVlpJR3UseGl0OWFJTmQ2eC5pMXxwNSZORkl7MCF0M2l+KjssaFgwZkBaSXphZUM3YXshfWZ+Z3wobDZUTmRLWmRdOlMjOW9FKnVkSURDMiFjejFgaGZfMCxSXV9wSlhpUWBFSzZ3N1dYUWl4UiZlPndeM35lPFReSWR8d0Rhe1tWakksUl5yXzt+aVIhVTE7VjRZJjspfFdfaUVfWVdUM31R'@;
put 'MTVJcm4hQjlwcyl9ZGxDe2VIMHpZfkZUcXhNPSY5bGApTnFPTiNKZFs+OyFvbm9fImxyUX42Pm4qYm1JfmpqMnl2XmVDO3lwLDJdPzRvNzloMGdeJS85cV9HIj9zdFY+MkgoL3p8RFFIT3k3cjF3aW9MNSEySnN9RD9lZkxRUENGWV82MTlKXjRjPkEsSFY3a05xclVDQlImJkt+Z091JXZqP1I6'@;
put 'cFZkcVMjTEpfN21iSVYjbT1nQTtLe2FvXTx3XjskMS5sZ1J6TjMxM2wrbGQkP31NfktfNU1OWEA5bn5Ze2Fqbn5mLGBrcmt2T2slemY/RERvbS9kYGQ7SDx9eEVHPWUleEkue1I3USk3O1lCfUgsajBYbnxdRW5IZlp0Wj5MZlE7cm11MSo1VlFuLEs+OylMUHhUeHZLQyZ2ZWlyR3V3YWEvZCIo'@;
put 'WVF6W3pJUFp9Vm9LdzgvaF1CcThAPzB8aShtYH51OmA5MVF2ZV93Zmx2eGN1aWo5fkw3JS9AUD5kfSNrKXJ4MSp7QmZhVTEpKCRhZCUjdXomRmQ4ZWEyZCo4X1BLMzJ+IzVLSThUPTZlJnIyOWMqRjJyMHtQYHdCKitCKU93RCNjZHZbO0ZqTixFaHkhcCZ8fTp4Ml04fCghQThTIkNlVTlzLHE9'@;
put 'ZUJ9Y3c2P0R0N2hQQmUkZ0FkPS5fMCk2NFoqLCVmYWZGd2diMGBsbG1EdCVUaiZJdjQ0NU9VQypCfkJYTHFSaWdPfiFaeXBqaD4iXSF1Njw0YS8mfHU/VEZVQUlCKiI3TGpVQDpsOWp2VVZsenFOWGdpRUwyb3xCVTRjdDgxTzIyMSlTamdILjFKd2NWOEA4TksqKlNZMC46L0VuLFYyWTJTXjop'@;
put 'Vy9BYTQodkcqODlEJDUodTMxWzZIOE4jTChAOlBxK3A5QCp5OXF0MzgkQ1Nobj9HO3JVM305PSY8cWNiXitaNkQpfEEzMWJMWzIlRElWNmlZKUZLbCs5RG5lKT5uL0NMciFrOiJob0AiR3tgZlRLUHUjT1BHMUxLKkl6Im86ZTBiSSkzPmpRdVU2SjUwKEJgbDdydVhiSShUaT58LjkvR0JSSzhn'@;
put 'eHQ6e2VlQX0uc3k9ezRbX3lhVy8+bl0pfCU9cEkhT3RdQjdkPjlqU3JdPC4wKHwuZj01ZV8mNGxgKzZjZUEqUXVCcVM4bz9zciUjL0Y6ZGpqXzUmM0ddaHQkN1FgMUBPT3U3JV5rb1N2LH0qNDdVQz4+fTg9WHlVND4sZDo9PkV4MF1BMnVwKkd3Yzg9PElWJSRaZGZaUEAseHhQYERpPmA1RlZR'@;
put 'SGNiQ2lYI2JDNillLF9rP3pyJERWSF1dMFgre0wraV0xXnk5KXZWYmNdKX1yVU1GXnlufC5ENC98Vn5DOHhrcWF0fTliJixEJEtyVTYrPzZhITpFM3QwRUNhVGxmUnQwa0k7Xjg0UE5MYEJuYEg7eTlHRH4hKzZne3k0LHtJQm1jPU4wIiVLZ0pRVDI7NDguYFkpUmlsalEyImw8W1c+OjAxTXxd'@;
put 'PXZsZTgvfCkray5qel9Pe0BEM19LYkh7eCxtcXhBOHRCQzEsJX1ZLG5MM2VTNHIkJFdDVUY8MHJ5VSNdPXI7YFBGTE9oOno1UkM9LFFPO0c9ZixkYmpddV52cmspUXlESipRV1FMTiQxfjxdSEc2bz4wRnN8IlcvIzlNTkYyQFRJWWAqNE5dZThYcTxleEZzRCo3eTNWfT46LEZpcml6IShPMT9R'@;
put 'ZzBGcXk6PTY5bGRTXiY4QG9WRXMxYzQ8Nn19NXVzZUVNWi48PSwqc29TSVp6QiJ+dF9MJDtgeCU4ZStEP1FOOH1JfXU+RmVCNmZCZiVrbkBYfDxMSFpkO1BpK1Q6YExEfil2THxwfmxbNkRCSTFzJDVkSVJWXUxRXUJaKi98dClPT3BVajN+U3k4ekNXYzx4azgwRl19M2xXRmR2R1hDQWxRaiM4'@;
put 'PUtYIkBgYGI2Ull1LGVUR0s4Vkk1WX0+TDM7WVUxZkB4KixXODZ5PDhnUiUoJHJTcGVbMWZPXyZNQEohIVlRISZ5TlNkb3JqNT5iaTM6XUM2Q35vI3dYMW9iPkM/SnhEITV1QyZVOSg2d1lAR1pNLCF3UjAseztjOGN7QkQrLjBgeVRVczd2IkYsb3hFRTFKNzwkanI8MWx+bm1TS0VPbG43aSMh'@;
put 'dltDVkUreF4pMlB2JSwvMkRHeVFVKXAsTHczVUJQSXsyRXN8OEg0a15oR0NTTTZkNUpqJHx8PEhSfHxAMj5wXi89R3UwLlJiNXJrbS5wNWE0KlRTcXFBVEtYaSxZaH57KUQ0cShlMDptaGM2WCxBe0tSW1IvYE0/fW5IeUhaRjUkMDMxMGQoUSk6PCxpTkFhI2k7XilFJjkjbWZ+d10jXSw4KEBl'@;
put 'KVl3T3B8MUpqP1h9bjtfWVlhcVVZQDUkOiFMKnkzOSVVXisue15RfmJSYjFScnFmKnFObE9kS28/bGdSZig3I3JlVkllUH04Wz9iITtlIXd1QzZUYCVPKEpON0Q2V1p6U3lFO3orPnAsZGZhfTFlLzJSITRpR2RwT2hwRTorPXk7JC8rMnF3anZLR19tSzIwX2siUSYxSWFWZkN7Y2J1NiElJHFE'@;
put 'eyNebzU9TztfWDxndz8/T3ksaFl2OlAkQSk9QXpeemtVdys4ZFlnIjczK2QqQnJAXSM1OUUmPEl9MDV4ez8kQ0RQIm5lWnMjK3hsOV95WUUyX3NYe3ovfUh9dXUhUHQuU1YjNEVaRj16cCs5Zk43IzNOLDJ5LE88RF99dTpQajc+YFl4NDtYIllIOWF+NGtXRis/YllPJWFyTy9JO3hOeWg9YlM0'@;
put 'S0BVbW5zcV55LEkqdzprJkI1blNMTWJLdi89O0VGTz5YfEZuQCpjLi9uQFlEcip5dkh8IU94ZlpYTC40OCphcV1dcyk0V0gwaD8kMzp9QX59VGg4U0w6R0xyK1F2UCklW3o3PTclaHFTPmpINnVAUExyISFaRDN6Vjh5THs0flFrZEBSTEF6Nlc2fSF3ZGBDMWs1NFgrLnV4fH4qUmJeMVU3Il9F'@;
put 'NX1TdDZ1NG14Pkcsck46VmE2ekg+UjhYe01LamE4PHw7RXtKKiEoYTJ1PFJhfl1qdC5XKEEjS346Y1IxRCg5fVRmcGA6eF00X1F1R3xAenNjdys1eyo0aTxQNWU6SEAlSzhjb3wvP2FnWHszV3c2aCVpYjEhK3clfUd6NW4oRUo8Q1ExUm1iUGFkIkcsZiUjY3w4cltQWXV8RHhTLzhgOSMqdExY'@;
put 'fmhXU1NbWF54XzM2U3NASUMrPSVsanwzOSVRYTozVCQ3a1YzLzFoTWpPcDJ5WkE9OyVUez0jNyJ7Rkc5KGVsZ2JTOGlGTVooTyZDamp2K2EjdlttYFVdP0NYYGRmRVFqfkpMfXxfYyElI1AsSUk2JWlQWG1JMml3NCx2dkouTTpNfTM7N2VRYWZiQT4qPG1haGBbWyZEQEoqOjgpTXZsTy9vNChh'@;
put 'IUkoPT1iWG5MLFlKfStoYF48Ki4hfkRpODpPSiRDRERiSGR4S11YOEtTQCQwJV5MfUw5QUNaU1E/WGh5XXZDbHB+Lzo0JnooKlglcSUzPGBVU31FWjBiLElnRkpoblRVV3tRbkJdcz01SyN0cndFWVRTb1Q2VTNvUSNQZ0ZoL3Z+MG15XVc+SC42VV0rendjayZ8dmd1KU00T3YjOHFZW3FwTjdw'@;
put 'Mn13Um8/ZmAhbipRY0QwcFd3VTZpRFBiIXFCP2wqfCk/Vl0kd3kyUC9GQHF5aG5bNGBWY2xvUXlgNGNsO3gkanpGL1YwLHEhRW8/dCNrWzpEOC8hTjE7WGlYWUZdJGpuXjRFL1BedUlZZDxpKyxzdGZ2fTZTT3lnZmJ3biRxb3BhRXt4LnxKfSVhWWNtSEtEe0RLbDpUblhyTlsjeUhaSzJANl5u'@;
put 'UzBlRjtpXSpLfUdnSGpbJkBlKU8wO2JudWR+U1BxQFFRMl17WXpySD9hYUlNQmRnQ1cjVCN7W1VZPlEoa0MpeypMZTBqczpRflpuSnRUWyRMM3EkMEF3MGNVYSJQWlllSF5tNSMwYWIiMGcoOjsoXSooRz5PXyorRXNydl1vPFR5RzJDaVpTdn5haTtuWDowdV1za2A5aGtuY3VTWGg7UG5BNHZV'@;
put 'JiZuYDhSOWhgMUhGYE1AbDFUdytzbFNgbTxQJGhdQW8jeStgNmxZbFVDWD8yUTdgVmBXSCs+ODpJSlZvRl10QnFOR0xgPmNEcV8kSlNBfH5ydHNiUmdBUHhXPiRhMUkwJSg+NW9TSllwZVRJQW1HbmlTaEp3LnJ9cjZJN0RzMmU/N00wPEpxTXY4OCk4eWxrKW5aZkxtc3VbJTUlXkdPX3l6fXNP'@;
put 'fWw3I1JzLnAoQFt7cGMxdy9OSl1EbUoqU2hSMEB5MEQyKFtxTVhwK3Q5RVNuOTc/QnElbCk0YVNxOEQ9c35QaDM3I2p0ZUNOVFBdPkJyJWkqNGFTJlEsJGYjVVo1PTVMZUJHZGxMfDAyXmRONTxkSCN9KSU2cnwkXXA+UTdMR2ZsL2w4MXpkdC9KME1neyk5NiNyK3Axcl1YZioyRTdVJU4sVW5L'@;
put 'bFNBQ1ZBU2pYOnZ8SmgoZDc3YV1gPFM4Vz1OTUk3blpLcEJ+Uk9rKU80RCwha3lGOm1VWS84MEh5cmA6IyRqfD5lY1Q2RiEzfCV6OCk2OUlve0whWHY1c0IyPnZvXSE7I3JyUEBSQFFxJX4yZyNaSzdfViQpKlsjbGd+dThGbUhYNmFVUUBCVTY5XzwmSnp9VDxaRnh7TDprOSx2dXZmfE1eV1Ev'@;
put 'MWdwTyNyTHEvQUs4b10jRTkxK1MqNUY0YnteK05tTnJ0T2ozdWdFOUJhNXlociE4alZufFFlT19QQ2NtZi9sO0xIQj5lfF8mS3ZSdVYmRUUzJmJlWW4zTEJiUCsxaDF9Kzp8PzcuOmxdU3pgMVFSYjMzK35MSWNPNGxOLj0kXnJVUkw0c1tsdVlNb3pIMiZTYnsleSgyME5ZekQhditRP0hjdmMi'@;
put 'L1EycG8yQWwrQmwoZ3B1YTBiXjNsMSFwL25RcS9eazJWQmxIfiMhRVFlSHp6aFYxP3B9ZldvZDBhPWsodTBKXlR0TTZXVyV4TDgqJjM1aitxQUc3QjN1Kzt1b1hzaFJ1cU0mYzJlQCpMTnZXSTA+OkBaemxuSnFyWG1saVA6fDU+IWZhKUgjMHptXyt1MWBvOHZyIyV6bUhxW1psej9ONTAlVXU4'@;
put 'SCFlQShVYVtNJmczRitNTDFPY2xwNWMsbFk1Q2kyT0MmRHNNUzdnRkVoUUEsNSFQQGRkT3I8Rzo4SDZqSj1CKGpBOTYjZyZWNUN+ek5QZHtsfCxdd2V+UmJWd2VkLl99aFVLXyREWV1wUStUfWE+ZTVQLDtXbFNDa1N0QGg1ajZuKUs5XnFRejF7XkJKfWpRbnopZHF9dUB1VmlaO0BEST4hUnhh'@;
put 'MFchcGw1KzJrZWlrMmRbTGQlOVlRP2RrUyNnd1UiPDVEI21pPXR+e0x6MUAra3guSlRwQ3lMejwuRVI6IUVUX0BEfGQhX0FITFk+LygxV1MjRm1SYVJfYWlIJVljI35HPDx8aHxoTUQwIyUmYFFDbH5PS3UrcW5eaiRtaDVxQF19STJHJSNOe1B4KHJPRz4wYy97QiIzUEZCbSs0ciJTIzRnWktP'@;
put 'JnxYIVNIWTMmd1EsRGk7VzpWYV5GMyZjNiMkVXFkPyImZmo2en5wO1BqXmRoWDJ8JXRVRzxNMn1NWDg9XnhrKns8WlNxXlNuMWduI207ZXJmZy5JLnMxPWA9UCtsZD0zLz88dlJJeklIeCZab311XldAcDtbI3ZdOHIyfUQ9Ml1ifnl8eDZWb2hzajhnQEVpfkFfaXJDU0VYczVdRDtGQTZnUSRR'@;
put 'WzdnXzVoZjxmMWZgRW5ibnR0bTlnXz81aVY5JV9+THBXVzBgeE5IXkA8X3A0amMxaSowTCVoeC48cn4oS1t1MHJnLG9yYzlKVCV9SFR+aFRnQyU9Qk8sRS86dldPWDdxUWQ1WWUofjc8Ym80dmEobmdySy8jR24pLkE3RzB3KmpRe2swQiRzTFF2Qj9vLkxwTk8jMU1eUDpDRWU5fGRQTjJFMiUz'@;
put 'PTdGfTdXYkwkTzFXOllncXchVmRjdGg4aE1sampmTjBQVkQyeClFPGN6XTQxSVtxUVJldnQ4WyNpInV5RVAyQ281dnZga2NLQGRBSW4pR0VDIzIxRjttUkd5Y0AydVBCdXVWSGJJdXVZSlVVUzJYNTI4S0IuNypKVGkkc24ibCh5fm92Pm5RVlIwa2VJKXJ2NlRlK3UqYWFpTj1ubVdyeDVdPjky'@;
put 'OFhyRUIzY09mYllVUjFSRF5YQn5dOS92KisjZUEjN2lGbkx4c0NIWVd6UTxLK2ZCMU9JdG4zJjhDJGI2eCIqenVJP0pkJHw8WiY9TEF3ZHsoMVJUdHVUNUQzeihwN1syNFM7JiNJUSxkdyQlTGV6YixLfkZBdTtRWEV9PE48Sjw9WzRHZWV1cTtBMCpWMTs6QVJQZndvaVZLZSsiZl8kOF1JOWta'@;
put 'dE1gUkpAe2JJSzcke0FxfklfIWt2dHpRcGJaP1t9Qz5OaHJkPys+ZCl+MUVTa2cwTmBAd0Z6MWFPKW5rU2BXazMsUXRdX01oen0ha2xRJHY4YGtxd0wpcl9mKUJbXTRbbG0xWGhaY1o4JXBkQDZNekRtanZyKDJQYX1JeD43L1lOdmxJIn47NDA+SjMhJVFXQHdVVVM8TCI4Xjh1MFE+USFjRm4z'@;
put 'U1U4MXtpW10hWz8rNzVMdjYjQltdd3hqL2ZhNkRWfUdTPTx+UjApIllhOWtNKGwjayF+SV9gMGJAPTUuWn0+OmNXZjJtTUFeKyZlfUNAKCFBWnN6RUNjalRdMiJRbytmdihFJWZ7cDU7TGN8d0o4fkhNTD5jYjk9Qjk/UzJVZ05BbS8jQnFWMiVtSGRgSEFtIVFrR1JgckhaNTFHKEZQWCFFT05A'@;
put 'Pj5ORCNocjkvc0FxTX1UOW1PcGN7cnV5X0s9aEx1JUZhKCNGOT5YeVgvVjFkZihKVnBDN3U2akt1JURMN158KEN7WnFnTiY1W2tWO2FbUUphajZKPXJYVHpIdmZ6ZTI6dGpebWNQXXE3JitdTnEkZDo7QiRXMmFhdD9iTVg2ZSl3KytNWTs0RiFLdEw7QkpWOVBaMnQ8PHxHRnEkSXAxdENyP3Jk'@;
put 'cHIxWkFIa21GNColK08zMiwjYiFsSjw9KlI0Z2h+aVt4bDpqS10mIV4sQkRnKU8xb2VkMVFhX3YyeU9TXyUxcnpIZ1AwU2MvO3Z9OEtHb2BCa0JEJiJEU3tgW0lzJFQvXV1RS1Q8JkpQalhvVGJmLCZ9Nl56OSxedHFlKl1mYnAlRyJnW3dyUyoxSWt5a15Oczh7dGtSd1BvfVVafF5EZXZUMEo+'@;
put 'TyZFQDtTLzJgYDtOIiVTdjNhLmgoQ1MpYyp1RThhUl5+N11+MyswKGpiVjh2aWhVPWk2OCY0W259YlNWdypiYCZeZ3hEYCZIXTI1JkxbXWwuO0A0O2I7TX40Tz8qVFY3WHs1ekZYIXh6UUZtOyJDdmdofiM+WF5EZ2xKeDliUHZ7QE1COzlVIzYjVnlbbHhmW017cz5xTGpNRk1IJGk1d11US3Bs'@;
put 'ZH4iKmk0YjhPe2hNPEhacV5XWDYuPW5SO3cyMXhGelZrNldsRkJGTmFnK1NmT1BAWHYlZj90SX1NST9jQV1jT2guSXNRKiRWWW8jUj0wQmwqYmgySGY2XzY3cyV9TGYvITNlXyUlKXYjQ0kiM0pidmJeX2d1IywyZWkzdUtGSCRrZyFWQFtld1RoZClnSzpfKDhXeDFmaHFxVU0uaW5hYWFdRn1U'@;
put 'OW5GP18lXkdZVHtPImJ1fnFwSWV1Zz5wZWdYQE8zazNuT3lBZ3hjQSU9RSFxeyxtTzAyPWw4TzRmQSp8di5rIiFgWWFgNndxUiVVMVBCXW9MRml7OFhjKDYzUTZUb1JwWjRuXkgpcysrfGNMLFEjM1c0JHY4WD5qRyIzeDZzOzljOVo9LEVlXygqb3FgMWxBeFo1N0M2Izk6fUk2VDgpWX1bfE9U'@;
put 'TXRkb0tSaVh+Ulo0elg/Wlh7ZXR0TFNPJHU1UDNDb0MveEtDNUVETVghRXJdSUNrQD4yWEtwV0Z6SHMybTJqNE4mUERgMlJbbiNTbXs/JihmMGcudXBVSlE3LCMjPmVoaDR3dC8/flIpdjNlQygmcX47JFptV0FrKWk+eChbJTIoN1kyaU5HN2dTNis/d2tFM3QoWGVIO2dHNyMzbDZzNVd1SjMr'@;
put 'T1tiZCwpbHtKNVo2dHEjdTRISF5Xd3d9VElCXjttWjpdPix2Ty8sLkBYMmIqcGQ0STxyQGJ4OTFbZ0J8M2lRPWI8bCRVb0VESSpqR3Bld1l8OVsoLmcwfUc5fmxvMkIjZ3thPkQqXU0vPn5BfCFETGI3bDNfNWozJEJAS0pWU3Frfng+O3pvPFZQbH1XK1pfLEBoUnI4Nk5sMFNiMk5iMTZiOk5s'@;
put 'MFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZi'@;
put 'Ok5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk9dMTYwNmI6TmwwU2IyYiU5YSZCQi8vOnNofiZPYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObEI3YjpObDZA'@;
put 'fnt0MCkqZDJOYjE2R3lXbDw6IjNGOndbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtB'@;
put 'LyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjMyNzI3fVZ7clt8KmB1W0EvIjN9Vnty'@;
put 'W3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8O3JqPiIzfVZ7ckd5TFd7cmN+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoNzdGIVteQF4vbktOZXxaNjEsdDJrfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34y'@;
put 'fVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdz'@;
put 'Y34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZShRZEUrKGg8OnQ+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxIYy5qfn4yfVF8cm8vflF8US9EXW1CPEM5RmZMIVdodCYiJiImIiYiJiImImk2RnMw'@;
put 'MG95dFR6YWdmLChwMD0iI0tgIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImInF0JiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYicXQmIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiJxdCYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYi'@;
put 'JiImIiYiJiImImFkRSteaDw6c2h9JTdIfm4+OSgmfjtoaEJtIzlwbExaYSVHTktbdW8yQzlEIzc6MSxVK2VHeTwoS2lOXnFpVlViQnMqWTxFSF1AUkY5dCV5N0hkclpGOXRMenB5cl8mInJfeUs8RVkxXVY2Qz0oVnFaRjl0cl95S2RCYD5LVjZDPShWcVpGVW8rNThDImd8S2BwSSNkQmA+V3hg'@;
put 'PktWNkM9KD52PTspci8xLFVZLjVfN0NWfDcja3VhSj44MFY1TlZ7ZkgjQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKVM6Q1dhYVVaKjJhNjlQSD9WLEx1I0tYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJS'@;
put 'Q2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUjpLQ2pkOl97dmhxcj45KCZ+O2hoQm0jOXBsTFphJUdOS1t1b2xGX08jN3J2R3lSKWdSMXtHdVVVJENxKlk8Kyxxb2xGX0NDanpfQjEmQ0xLaHVVWHdEV2NbdEZIczQq'@;
put 'QkxPe1d3RFdjW3RGSHM0azBVe1hlKFZBPlVRa2owWDA3NkdTLjc0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NTYUxL'@;
put 'cDJiJVB9Nz0sczxeKShfe0VpcXIyZHxVUy56TyhTRjIsVTI2NlNNNzoxLFVsOUtLXjRvdXYheUQ+LGpLbGZHeXBjVylZPGEqWTwrQiw2dXk3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPRGxCTE82NDVpYk5kPEgkOlYsaTVqVjxPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO08y'@;
put 'YyV3N2RSNWxIYzdnWTtPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO090bypsUFs0XXpvTX5hJX4iPF5KKV97UjdecGkyTWRybElTMXtQYmVsMmM0UjF7LmdWVVRaP0NDalNIIzFhcjohS0s0NXF1diEzd3YhPU9SYmdHYlI8QmI2e01yTytaTGF7Y3h6VzBbNUZOck8rWkxhe2N4eihk'@;
put 'PDpCU2pQRDR1S0ZPTisxaHkyWD9wMFkpMktabTd1Q3BreDg9I2pCJig/MT9VYU0hfTBhUXw6LmN7Y3h6VzBbNUZOck8rWkxhe2N4elcwWzVGTnJPK1pMYXtjeHooZCJAdjtjLlU7TVtXfXpvX0JiJWhDOD0oNDc9cWx3YUA3aC5ZPCNTczcrWnIrWTxTcGBAb1FzTEd5T2QmaU5eVixxb1YxO0Yl'@;
put 'RWI2cXV2IWtsa2xrbEIrMGpZMENkeD9hNlEwaCY5MS4lWzU3PXF5cntfXUdOak5hPFk4cnJZRUVoUCVDR05rMSMxTWV8NXExezBqaT8wK1JVSzhFfWQmR24zXkxOM01HUlArR2dFelZpeTJXaWFhVitWd1tPI0dRKEhUUShyVCsmanp9JD1FOFo2ITxIdHI2ITA/VWE2X1YsVndIfSwzfTpiejl9'@;
put 'QWMwak1tLzxoaHtsIzl+Uz1ldTJfbFkuJEhTLms3XnBzNG5CelssPEM3Rk5zN2xUQ2pbOmZ2R3l1ZCVpTl4mRF1AR1d3UEUrKjdoUjF7WURwb0U0eW84ckQ3Nz1xeX46P21WU3E+JiY8WW9oOUBQVTZfKXc1dSxAeCpAZF8mQ0B5fClbP2JPN1tYP29xXW8kR2Q4SCVmNy5DMklfe21ULiFhfCxG'@;
put 'MVdwUj9dWHhpTHBaZDw7MGR8SkNgeXw4RFBvcVduQiJZK31wNl0pREs0RmZWdnxObTRlNzs5JjRVZmN3aD9len5kPD14eH5WT3pnQ2pmPG5mYWB4UCNZZDpJKlp+LHJHeTp2YmorfVhANWErKz5+ODhXeVJUM0Y0cTM/Q3kvQzd1ejAlOXlvd3goeVpQZjYzcSxmeSRBOGpPfT9Uezo6TWQyPVUr'@;
put 'Nl9iZ0dsImQie2JWXk9VTFVgNzdhOCw9W2I4YU87fDAwJClHIylLRzFfcSl6MXxieEQwVF47ZmJJa0hAejJMKC5TKSgiTU45PSNLUl51YnEjRUsxLzNPJlYkN0hDTUk+JllQTk45WjsxUSJGMGUlXmF7SDhWYDpRPTh0OSgqSzRPJj95PWdFbjk0fjBhOGhWeTk8V29peDdlUjF7c3ZHeVspZ1Ix'@;
put 'e0h1VVV2RnEqWTw6LHFvRExuWng3OUVMSzw5bipZPHlILCxPfkZmR3leZShpTl4xR11AMHNhUk5+eDcyNlZqTl5Kb2BAOktdV0tLaHVAd3Yha1ojMWFyIkNwb15iTEt4IWQqWTw7U2BAU3k8TENqZTshMSxVfHRVVUZqW3d2IU9QR2Y3R2MxREttZilBX0ZKK2dlcylIdkVqYHd2IWxheDEsVXgj'@;
put 'K0B7OWFmZyxjeUdqRV5iYUxLVyMhU2c/bTlLS1cjb3V2IXtEUWhaTVM7fnVgQDszJFBFKy9QTGlOXmA8emQ3TlFEUDw+I2g4MSk6OD1nVVBMZ3MpYEh5Iy5NXy54O31vMUluOUZsNmxrTU1gWnBsOF4ufjtodkxgdHRdbH5XL1B+SUY8PiMjZjVsRmZ5I3F7cGtNXl0xLiVJWVZVS0VVSENqW3ll'@;
put 'UjBwL0lXVUtFOEhDalt5S2lOXih0YEBvUWZmR3l3WHxYKFkqTFcpWTwmNStmQEYhalArR3ZVVXZGSzFFVylnJW1qKzFoMClaOzFoQC9oTUAvWzhkcDwsfldSai5RfElOPDshb1lITlQ6RmY9ITtIaD8yeiFdNFJ5OEZVM3VnfEwhJHFtWmkmZHBSRCwwQHlVWSswXkdWPFg2c0x0SmxEMmlaIlF0'@;
put 'bF9IXUQ9QCs2dlheI2FOYGRnU01He1o2P1M2SU48W1MqRmBJRWZmallQTGdjbDZsa00yO3dneD9tOS9ddz54O2ZqMyFZbmNQRVlPUUJHRTFCd3csQioqanVpb0pnJVBWbzllUWB1LiwlZSE7ZD5maVgkI0hJXyFfQGh6P2hNWTFodiFdVFZrPmhNYU1JIUxFVCZvWWk4QGwie3AoI0hdc2RFL342'@;
put 'SXE5PzkmK1B4X1licCUrKzBqcTJsTGcuRCNKZzt4I2dTSFJ3cVd6XXVnUH5XcU1Nb3cvWjtjanFUSSE1Ky99UzpaekhsK2wxaUtvYG5Kdzl1VTgxaUw8LEt0TFJ9cjEsKEkkaUc3SztLOUxgPGU8OyFZQGRNL0w/UjQhI0VTMXJ4UUVsRiVlMXozLGVYVFIpRVVqQ3lwWnBoUUpdRkpsW3cpWX11'@;
put 'SmhiTVUxeSNCVDZHYElhMW9JZFAvWjFIJXZNXmF9REs4MyNmcGBbO00qKFlzezxMLigpMGhNR0IjMCJDYVYlMCxRSDI5Wj9lWSZPU3o2TGRlNk5tUG4oTmNSLDJbPXk+dzJzKXUsb0BoKWxOcCJSbU9kUjxPfVBQelpgejhQMzlwWm9qP0l3ZSk4JiF+KytEYnt1Kl8rL11tZiV6S3opJXk5V31L'@;
put 'QFhgJV91LE1ZTH4ue2J8P0soOX0/MUh4UyNaMl18bFErQWl+eVdiTCV4fF9ePUhNVyg5Pz1jVGciRmVQJVpeN0BJc2YmfXVEK3hKL0xJKFE+UH04cT0rYSxVKk1zZiYuQndoaE15ZnZ9XVNEU2pQIXxzO2EsUT0/Z0YsOUh4X3tKcndWaWk4ZXxWOUJqSFFLKngrLFZSZ3ZiOH1eJExeMyprXzBx'@;
put 'YXJiJlYzJXJNUEQrejA9PTlAZyYkK05gaiF+X1QjTWsiLl1hTV1eeHVqOlJFZmcmQixMVyltMD1YbyROOnJgITtVWGxmcyZyW3p1cUMsPXc6IVZgNWpLKlNmUnhXZnhodn0xcGE7KV5fPEE0bHE7ZDgvVjVwWStuMSpWXjokVm9sYXJnbWxJPnEldSxgWHE8d15dPFQ8LFojaTdAPWEzKitqfUxT'@;
put 'bjF0Y2JNK15fb2ZtUjZtNjAoP2FqVSx8ISlAYiEiJTF9Tj92KnFoW0o0KmIsOSY2cXRRRT1kXiEhWTM8YnNsIyFYTTMrRHBmUmtoXVsqanRRa2hQK2R5UyMheGtVXjY/YSI1ez1mVnMvKkdSPj8hZ1VdJU96VDI+PXdvQ1Amei5QZWoocS5IOXt8QDI/V29peDQ8IiVMXj5FZV42QD8haXp7bD4y'@;
put 'Y1ROIzRaRV9fPTkhP2tEYGtTbC5PUU5uVXc8PSNTdTNbJWRmMjZsLF9kL3dxVEo1Z3lDJmJlTyFeelppQHA9W1Y7NzxeIUo5eTtUIzUraTg/bVQuP05RKEZUUndfWTM8NnBzcDhwWHNlLG9mYW5ZYkVNPjN6ZV49ImlXXjlyfm5tUHdyJnlaOWVsYm5HZiF4Tzp8VHVReyQ0ODozb3ZYQyFqdTlw'@;
put 'WEglPklfWihAfUQ4cGZzP0sxXUFdaSZoVmZxIXxZZXQ3OnhJOE8mLiUsODckVCNEb2JUXz9ULkE+ZSxGPTZuOmxLfXMkZnwubjU8UlVtb2BJcn0ie19mKzI1PDhWP1Z4ZVQ8I1o3enk/ak9KRzFyelouaXY5VU1raHBZZk4xfDgrMXxUUmxrdTk7SDJqNW16UUhJUShjP2B3QD1fWnltdypxdD5y'@;
put 'VVZ9cDB6KCYqam1wVl5wZkBeK01KfVc9MU4/WV87NGY2LFVaMkgxR31qWXFkfT44Kk1kTmxreik5M1AmMkV8bDNmYm4hSjk7MlQwLCE+Vzlpc3wkJCtycCROZkAxP3ApRGh+JUV5WyF2a3xpNyxoVHVxNW1Mc19ZZTwyfXFtY0BWLGd8JmVoYHo8cWtwPCslfCNYfnt3WFBjfmV9TCVoaVleYk4u'@;
put 'a0NgbjVwUFUxYk92WTM4UypFcU8mcDcjdUBQSSV3RzVMaGVyeFp4SGZ6d3orMyRnX1kjXmdiTWJzcEpjfjAhIU5eW191KSVZPyU4YFNjbjkmJiplKHhnJGIlfUZ2K2pEZypKTz0iJTV8MTNrcSladixZbl93Uj1vPn4lPyU+PWVvay47SjI1NHA4cjdURDlLbHJOdTM8SW4yRHx3O113VSoyMT14'@;
put 'O3h5R1BkTyU9fTo1QiV7MX5wOX1GIzl0cnpySytiYnB5MyYhOX1rKDMzd181Xjt4RCZBUXtTbXBQTzw9MSslOFJlQUtVfnV9WH5BJlciSnNRJSFJZ3BUTVE5fGZwfGUsQD9hUGYwKSV0JHpUcHBQT1clXUVQUX5mRF92bWZuNyxqZkExTyV4Z1RtdlErQlBkT29yIVdgbT1HSz0rSFY2X0VgI0px'@;
put 'RSl4PnI0cG0kOSQjSDUkNCRsKnteKz9lfSNxd1BCPnElRXh8WTgmSTA8ISFIOEhUeH1fQjBwazw9OjREeUkxQyUwOWtgR2Z8e10lOUd2KUkxXypDcUNROEAsQHteZyZTPHA3N3o5JGROQlFuZks4ZCQ+KUZsN2FPYWBeYV80PmIxVzlwc3xJYV9FekNQdVl+UGghOX1lTjtsKFFjQEgxLiV2JD5I'@;
put 'ITlQWitRbzVlfEBuXmdEWWFReCE0LGRiZ21SZVJuS2tRekRUUCRXc3JAOjAiLE4oT3IvJkkwSVF6YWhgcmZqYE88QT5ifjY8ZHwuQEUvZCxXOUZ9TEo7andeMDV5bSwlWG00UEpHKCVIX0JsSF87bnopSz43M3kwMTtaOU9nQHBQYCxkMzZjJE9lNSRtWkVnUnt1cyJyNT9gWVdyNT9iYVsrUTQx'@;
put 'NntHa3E3ciNzNT9zLDx6KHFBYEhRQm55ZTJiQz51IUElNHE1SnxZWiw1K2VzcTk6allaWD08RSIsXWllfFRKLmQmOFA7K3t+OWYqKjszVEJ2SEA0SmhAYFk3O149WUAqcik9MVRycFgmbiFxfVFgdXlCaEdiUkNXKjF5Zn5PZUtrNixPMDROaiRtfig/ZWpQQGV9Z3w1S3h5JngmeCZ4NFU5fDQp'@;
put 'IXFLfkJRcX0zeU16dkdkKzZfU0wucl5vaT9AKzwvfWZZcWVeZG87OH5fcyVLejwvPER8JF1JRmV5WWBdQy5tYHMldyxUKD56c2YhU31wSmtiWkhRO2xPWkk5ZHFrel9bTWVMJTdsbXtzJW55W1JwdnxvMV1fYygpSE1zOTUzbCoiXzE/fG9ISTg1aklHfiYwZTFyYF41SXx3K3BrRFZ+ZyRpJVI3'@;
put 'O04kbTElbX0zVTxEJVlWJnIzZjRNZmhtV1glVX0xSHk5VHJUeWAmeixqVF0lTXoocXI8QF56SS88SCY7S0coZH1yKjp6cWYkMD9dZTFLaG14TyhAX14vaDFLaCNaX1leW3NtaywrOHk7VD9zTiJQZCY4cUlfWlBfUiwyTF4xP3NOZ045XmQ+KStbIVBndExQZyw5SFE/X3csdVN7ZkIjXys1OF8r'@;
put 'N3s+PTFxXTtSRS5WYmdoPE5lMlk7fU0hYSYsYUJ4cEpIbiNzN204QEBSRk83L3lAQHRjT3lmY1AsZXlmY1BMKlksLDhBSS9uJW00UDJZXSRNKEVKd21VSWVnPElhJCRSWSVWaXlte142XlAleWZOa09nejJGJCgqRjJESXBmJVJZJX0/YV4wcjM2QEgmVTYhcHskKWFeI2FrLlAoVFAzY0s4ay55'@;
put 'MnI2QTI0TTFHYk1ZVjtsJVFQWj89cXklJWwkJmVWWlZiZXN4KU96Xi5ASzA/OFBYJTBsQF17SX1oKD9PayROSHE7bGNAUG1hLEpvRWdBJlVNUFp8PVopOSFyRzBlOCtNISspOFpbcCk/flVrR2FOT1pWRE92MSlFRmVqMSxlS3BAPWY4UmI2UnlVb2YhPDFOZER5VW9ue3BOND04Ui5qM016ZyxW'@;
put 'QCtPMThSLmpUZyJORyQqbSh6Nlg0cTxPKHo7VT9afGRieSFhJiEiOTtJYHVXVmJgeGdMdE0lJilJLFA9NmVXKzErL01kUFNlIk4mcjlQUHxKJEU0NUpCYVA/QDFBMHFmaVA8QDcueTx3Vj9lWSZAX2QpW1Z+JHg4ezosM10hUjA5QEZmTTIve1pRJmRMJSl9TjFePTNhNnFhLms4Qmg1fElUd0pX'@;
put 'elBfLzttYXJ6XzZpYGt7bWBvPlo8dTl4KEVZbix2Qi9HUGRBJm9CXSUsc3pzUHE0TlpNSElCcUg6SVBLVE4mOCZSZSY8QSZ4Zm4sR1FfZGJvYWoxaUElTDI0eXQkXS92YUtbLDVgbmhlZCs1ZjlxTm9sNkxkQ3A3UEZJUnldYT43WSRYWiJ1UT84OHdSZThAKzArWSMwK0xrK2VtUXdlPmlZZ0Em'@;
put 'bzxBbkNgIX0oMV0hOiVkJmVoK0pzM3YsQ19YPVpQSiZpYiFzQSZueSw7Jit5KXwudSRXYE9nSl87eCJIJnJfKlJfNjApJSoyVyZAY0QmVSVCfCYvWSRrWWFuI0owPyZRKz9AeDohd1BCPk4sL15LcVtLPFI2LEJ8eiFaQE42bFJZczV8byx+JXYpI1FLdmEsMmhdcDFWSTxMZn40ISU+SHRRIzpk'@;
put 'LHAwellsVGM3YixjP2ZvRjFEPkk5ZE5WbkBFcGFrfXpoRj1iLCs9X1o3O1JsIkBNKGE/XVpoVC8oQnxQJiFJYF0wPmw3KXU7XiJUQklNR2VnNXxYMS4+WDEqJTtAIzJhSyJQQlc0bU14MD42NXsja1k7a2whMnsxQTRaJjhFP1RtM19MSn1wTV5oXixhR1NTRXs7SF9FeDp+fVM0bUokZWpgKzdQ'@;
put 'MypuaEBfcHlvZjFtdXhmbkU/SWBkcVZtJW04K0YxMmpYJlpSdztoMCw9Tlk3OzdxUm15OVUqMCtad3U5RXxFbWZIe1o3OzZfJE9kfX57YT9EPSV+ZXNleGQkbHlaMXxzMjleJjNoSzk6ajB+UGhtWUhoMyk5KkFNdClsfjdHMGk+ZV82NiptSHBxRzpHXzZ3UV5RQmYsdSpRJWw3PHdPJjl7WlA0'@;
put 'TklQPHJDQCk/XitiLF4rWWFtajp6YjlgYzQ3cTJAX29HKS9QTmBpblBMKSFAU2t3ZmRUN1QjZW9Oe0lpLDlANjhXeVRtUjZ7VUlLdllJPlswZm0xb2RvOyE3IUFJKzVEOWNAW2U/MXZaNE9namgscjd7YWgsNztfMS5fck53eGNoQDslMFppMjluUGEsN3VZPW8jYURhUCFqSjVtUClOLjlMXkdR'@;
put 'OnJPMUtoL0BlfGpQc3hhUGdSU0ZBfGtZI0t4RDpYXWNrMTVEOltOQDpAQF5hQCRwRHF3XllUZTN3YUNeLDxwODx4YGlmSzwhTEZrO0o4LlgkNHMrbF17KEVgRGQ3NyQpOmpmclRGe1llPEV5Kmk+JXUsOWxDJlZgZEtKPnhUN2omKCVIck01dUExSCsuI0U/XVplZlR7USY0OGYuM04qYSN7TnZG'@;
put 'V3lgbzppNiVPYjBMKTklKT94JDldUzhwSyNwMWhqXntLaE0je3A3Y29Oa28hQzlwSDIvczkua2JfJHBiWFV5Vn1IJXtrNXFtN0koaWwpSmNIPVU3LGAzQzI6enV6MHFlO3RUfCVGekZIQmRBOmFvJHtwdyh5ciM6ekxwMCVvTmJYJWJZJjZoX2ZZJlhDIWooMjh1a0swYEoqaFpPWFR5WDZzdyIl'@;
put 'Zk0oZU8mfXtPe11eOzZoKUJiMVo1bWtQMyVSLlsvclp3UnYpLzs9MUk0JHUqdW4zL1tAK3YwRj0xME16LF5AK3YwRWBhalArIz16WjklKE1qXjtkT1FpfTJ1bUt3K04hQ2M+diU1OnB2IyMyRFYrPEEuJFM3XmVzYWp6YFUwQUUvKyFhdTo9M0xKMCxeZj9lKk03TDR2YT49eUdAUURtWm0pXiVI'@;
put 'JFo5OzxIK1NnXmUsbCQ8ejFLW3QkQC85ajZSV3pgejxpU2JpWjVtLzl1cTxWUkQ9VStJfkdsXiNyVDV4UGU7LFNPXlU8bExRRD4lZ2A2PH01YGImdiRNJit3Ujx5ciNKV29KUHclNSI1cixoXXhaSUp6PDklLmQsMGokWWAlNSFMVklaVz9tLHFuenMmdmc8ciViP2U1QFUxfSRWYDY4MGpQc0xX'@;
put 'PzY4bC85MVV5PDckYTJwS045SFBncD5yKyVITVBtUjBaJEo9T2cwQFlmQzdkWXJZZk5WUEtQZFlpXnA8QXBwQFhheW1JZFR6SSQ/VjV3M2RsZlR4W1J5VmBnb3FkfSlnb3FRUE4rKFYhTko1ZFl4bS5yUlc/NkMvQCEvajZSa3B7ODd6P2E0cWpzXS5EXSVMNSt0WWozUTtzOl1VaVR7UCs9ezZV'@;
put 'cihWfVBOKz8mMDA7ZHpZNyxBYFZ6OnBkdztkaCxMeiQ5ZjFDOiNaOmVPZnE+dUhYTWEsTToqO3BofGt9R1VeLyUpeCs4TTlOSVshXj0xSV8hXj97d01vOX1oNzRqI1k3SjBsMmNVZXNha0h9P1M4ZFlfJVZmNEdeTkNbJF1OOykjWTBdVkE+aGxPMW5mSTlVLGdmfjhYNmZyKGFVYEtFejBSVz82'@;
put 'c2w5UUpsVVAvOnhUeVNfJXRAcDB+XnwxYS43VnpDaT0wNzxZM1ZOJjolOUA2NURSQTRgYlBFLGY2XnM6bWNffHV5IV09VUgpOnp9WjRiZCQvO3pPYjBIQG1eIW89S253SUp5ZmlofVZTJUFJVWAzOG1eKnIucjlzM213PSY/RHFNVXkhSWhtcGpQbGtnd1ImcU0uNV86WSZ2WnB8a3JqUDEsaVRA'@;
put 'KXYwc2ZrJDh2U1YsP3BqIUolISNKa31QblFGPUd6Z1I7PiZIeHhYfVNJPkhnZ2pkJEhUQllIJVVWay5lczFRWjA+cmVwd31JQDR7Q3FbIUo+WT9yPj5XYXNVVk45ZGA2L0xeRW55KjVfQCE4UztsZHEvbTVnY1ZNUUI+Qk1ocW5zOnJNUF5LcHZFL09tMylwPE5ANkBoJFUudDlwRldEYnM8UyF4'@;
put 'ZUlkeilNRDlAXmZgXj0/WWpUY1A5dk8oVkpWa0YuOyFQa2NAbyEvezFobDhhVGJxX1ZdZVtuZV4wMDFLUFZicjhfI2piRSJ2bWk7WCh2YUZnVmVxY3I4X0AhT3ZyKTNLUSYkcWhge1V+ODg3eCNTK1ZsLlF6VT1iOUNscTIrJnpiJlo8UCtXXUZ6ejBgdz0hLzxkcmssZnspS3okQThGejx6JHhz'@;
put 'ek0oZ118QExdKHE5d3dyUz45aVszLDE9T2ZWUnp5UiRkKHEweV1sak54KCthSkoqb1ZIbyo/KnpaKXptZkk5WTp2WmJyN3FpbyFKRHhNYjNLVGBHQG8kVV4lfFJmb2NWYUs4c28wUmtSXW4+VEV8JVZWKlloW2J4YnJEV3BWPVZ2YSwjanZeYTw2M3VaQEtTLGFAWDxkZ0xqTDE7SC4xW190PHtL'@;
put 'fnVPKD5WdVE2MEZfOFZTa0NQXypSJiVZVStMUUJoMWpkcSF8Lj9NNjslWkNOK1IhdVEjOClyMSRbZSgwMFRKfURxZThuPHtsSTxIX0VnYyx5eX09MCtGenowWiZAckJZYmdwfERxdHlzTkZldCx4JGZ8b2YjSC5qditJWEQld1AkVlU9R28xX3s/Zk1JUCZCRG07bDV7XT0iaHUkWGhPXih4Z1ZU'@;
put 'fXkyTWpgK0V6RXhPXjhtbCQyaCNTO2xRJVc9QkxkJCZARCFqczI9WTlKJDc4bkguRlhNSEAxMGRgYmUwIShkMXlOWVFlOXxTSWJNeGdpP0JgWmpyeTA5Z3dCSygpQkA2bj9tckAxPz9tMlBuMFUxeSEsPyF9PiF1M0VvZTt+bS41PXp9angrX15LalloNSxZZjo9dGAkakFWfHtYVFkmbU1FL1Z6'@;
put 'WiZlamk/Vl5Hbm8wYTlJTFd2e143VjhHNUBaK3clPHpreGVJPkBuIUA9NU1YcyRfQCtySmQkSWg9RDUsfXBtLzJ7e2tJOH5SLDxaODUpejBhUThsXXVbd01nZWFVSygpVzErITddZnE3cWNURiMuSj5AcyZUJU9lKT9GZi9uIjlAezxGNGxoUElyVVQmMEptSFdRJjdnYiYsPztSVnJ5KjFJdj1E'@;
put 'eC5aYD0wbVJnVWZfWypqSElCX2JRTSszZ0FFRnklcVkxX2p7XnheZjxac08mOTNdUUhsRCZsKlZ3IW4re3Zabz5xa3hUMl9XTTAsaDFHajJeSl84X0AheVFBJWtweWUwPV1aOSYkOXl1eGgvPjRYdCgvcHdQZnNWZVZgVD1FZz5pZzFyUXh1REl8STgsQXEhSks5JnJ5bFlnfm5VVH0lQTBOMWIp'@;
put 'KlNESW57Om0hLHUkW2VwQCs/OiUjXzVqfnB3UGAhLnB3UDBwSEl4PDA7fSRmJnpweXB8bVtlOCxmd2RvL1FkNm9teTJDQHIqbWZlTkU9aiRbTy45eyNUZld+MjA2PXN6YCE0VUVgM2hVbXJAVSh7aWd0UWFVKGAxZSxjUiNWWlBZKkdkIk42MyJ4Mj0/fSVqVWElLClxOjkhLDBoT2UlfDdHYVFF'@;
put 'bF8uVCZ7ZFpReCFgWVloL2prOG1re153bVF9Wk5JckprQl9Qck1oV3prXUFdI3FISyMpd1JTZVIueCwobT4xIl53K2k4IywxaDFAazhhMTA5ZnJiJnVxZURrXmxrLytEbiEmdiU8ekpLK2poTTNndT04USptNj14aGcxMykmeEV8UV4+QDcsTTFJaFkmQTBGeVBZb3E4LDdfWSZ9c0IuJHxzeGBU'@;
put 'cHZEK0hodW80cHM5Pk9nTllWaGBjdWhSZWpkP1phT3NhOXI8KlFpdiQsZWAmUEg8UFkkK0t6LFE7fVteOXU3MChZRl87VVRsTSVXczZ+fThnV0AlSTBWNDNtYSN8Zzc8TU45LkpQWlM5X3V8YToyPjFIdTkiLyg8SD0vcEkxNzJFVD5uYiE0amExI1JXejRLOVE6WXd9OTlRJm5TO1p9MC5kNG1n'@;
put 'Pyk7fWY0OH01UShiPyZ4SFAvU09zKyUrUFdfQF5wdkhZdFRteDJwVj0lam53LG0vTCJIdilIeDUrKCEpPU0he18jez94I3tTUWk4JmxDOVlzV0BFR2V5ZUlRJjtWOFZCa31WWF43T0FyfFooYD1NfFNGLjl6ezZAI3BTRWJ4cUFvQ3NHYEFAZDkjIVgxZndYMUMjfW5aZU5uNWFDYEArK3wzbHcs'@;
put 'Mm9YXXsmcVh+bThwcmg6LmRgJVJpVmFiblJabUZ8LjB+NjJxaDp0X3BqZFBNQCh3TE11WSo3aFlBb3tfbCNmKkI6IWlVLDdWdEVUeHxOWj0iJTh9bjNjZ302YyVlOHdQMFFkPmYsImdIaFBoW0BePSEhckUvMm48OF8lallyPV1ucCYlPmdvOWI/WW47W3gsUz18Xlk1eGUsOGdJX1BYc3VKOXs1'@;
put 'fG0kTDp7YWhUQy54OXMkI0hWPHdfcGo0cDxWYVF4ITZSbmBPaGFuVzxQaD89PiY/IWJuKlBRJmBhe0ltYlV3Ll5CYDVUSlk+Z0YsPDJZUTAoPGRPUSYpRXgjQFc9LGFCeGZmNHVDeFZgVm5lUGhqM2hsalA9TTE+TzhwfiVMdG1EP2dqTkNFLDIyPltwMSxhbmVzbTtMaDolJHhnZC5dQFM0bXxt'@;
put 'STkjMiIlfV9+MHk5QmojcX4wKSV+XnhlSzhRKGFnZWFTQFNJSDE2PXUke19vIT59bnAiSHxtalByKmplSj5FcWRQU2VvXk47YVFYQ1diTm4rSjRqVm4/bXRxQDtSRSg4byRycTsyU2d9Xl9tSGhkJGVdPSF1UUE+dyQhSjwyMjAuXlklej40PH17SCtzKkdyeyxkQClpN1RAcnNOZnM8cnYjU1Bi'@;
put 'bzhyNTUwWTpjNClVMVlvMi9ePUAqQV03d34sRjF9NSpPK200ZV17UV5pMCh3Wyx8MFVLRnFVaXI6cjBoVk5VS1JKWVErOFFneTxiXW9NQFAlQn07Pi80ZUBnLnBrWEYkL11oKFpPaTUpLkIqVVQvZ3pBe3dqfWsmNSovbj9IcSN0WXYsd0FzQUlrcFI9dz0uYTVvKm1xemYldCZfM0oqdyRFbmZz'@;
put 'RlM9LG01Wnk8KCl2OWJVSFQydTJiQUcxOmkxWyVYemdGKlZ4fFVkNVtjSGJaelBGMGJnM3RUIVdtVUlSVDYvV1dHMFAjNkhZaFR6bktjQD5OVnpNOHgmXnExLEwjWzJTTjNjRzFQMi9UUVZQJT8kNTJtZkxEIzhpenBdeWYjMFVLeyFbXyRlKmhFfG1wZGJZeHo1PyltXkBEMV9LIk1QVlEjPEE+'@;
put 'Y2JUKmR9MkRvaFRHIl5jfVlhbHhkR2ttKyYpTH07aDhfRW0sN3coSz9Ybnp2SygsdlBXPSo5d003NC5OX3ZiISwxSTNCQG01QjhXPkUsWG8wIW1HWkswK1V+OHBiJDRmdSFaPnVmY1ZdfiUjRzRMLGFKKltOZFo5TT9QXk9XOSNfLy9XVlFANEBCUG90aEc9W2k3Kmg2MD1gTkNsdFBRLn0/bTFo'@;
put 'LzlqVW1fZCtyKGA5LHZiYG9sZHNGRCN+Z3F7figiX2VLflc1bFc8QnQobys9MUIiWzV+WmI5NDhmfClabWxFXVQkODAvaGcsYUFgdWQ4MUM/MFBGOUw+UnRQZksrZkhvKS5FIVZLWEJWN25Vdk1uJFFaKn4yP1NNZmBbZV1+PXFOLkdMcX5tem40YVpgVUF0MT1HTD9+cn0jVEljLihYPi9LQXRW'@;
put 'RCt9WHpdfmtwc3wuQn59e15oKz1+ZXhWTFhnOyRHSihaamlwVmd+MihTRSVAdzlrfih1Zm50TUt6R0s7aGU/dH1ybXc/VHMmWjwhMjA2Uj4ofkJ5MzpJOSU9I0koQ0JITlRJMytAUyQwWCRzdXsmX2djYT16KjBbTS4leTlgdyVZLzN9VlJ6RE92OC5+LF09Mjt9V3pzKFN0IyQ1fHlodWB1KG9Q'@;
put 'NH1wWHc/cSU6d2RuNGw3Q307UnlUfH0qJX52YSk+a0BQUWxzakkiSm1+VnlyKEleUFFiKHA4M1E8fF51WlslXUltcFQieTE9Mis5X1d+ezRJTyJBNGJbRm1NUU9rN2RjWXd3RnNXWFdjcWpPZGNXcXpESFVZbU5WZC9gQ3U+MTt7T3puUkZLPCh5N0YvQloqeFc3QyZveWRZKXdid1cqZmtSJn5n'@;
put 'OTx8bntlc0ldPHNqWXhbdTAjZ1s+KmVifGg2VFdBMUome0BgZVRoWmBURWlzIlAsbyYqZzkzfF5TXX5RJUZxVzBAQlVTLy8kJTJ9bXAmc2Btfn5bO1g0fVFPJVdjTXZhTjdlbSVmfCkxPVgxQmQwTVc7QkIiLnQiKzZ9O2QzaDFUO1oubWQjZnEiSmtNJHM/W3p5PE8uY1Z+aGxvV0UwJHRyXm9G'@;
put 'enw9KXF+K3VjX0hIejBgZXs3QGJnI1IuenMhRS59aTI2cyN4S2NdWko0emBAZGZtKzc7YCF1aHxhQiN+IVBgfnlqWiMzREV4Q21pOV55STU4WWFATEFuNWxTL1grJDxpdih+RjcrRXkobllMU2VGQTRuZ1lpNCFtPlE/L2o1dGs1WiQvbWlsVHM6b3JUfHY+XyUrfXN4JmBVWVA0T3hqNXV4YWtq'@;
put 'WnhiXjk5X25gJGV8JHdZRWc1Ujt2SUEqa3Ira0U9MGBoQER+V1NANFczZEBmRjhlKTM0fnpoMlIqe0s6L3NWME0uWnhZVFhnfiNgI2BfR0BgcjNVfl8yY1dfJW1WXyVzdkoyXTVZTUtDPSZiZGRHeDhJflJASHJYdEhoN2RzL2lQJG51X0dyKUNyOnp9e2IhSlNpKmF5YzxWMGkzZDhZNmJ2N216'@;
put 'Q3UwcEx6JlQ6OFcwb0JraXx6Ri8rPWlfUERCfkdyUzRNe3g1VkZRSk4vbHg7azBIQnlrXyM0Ljk0Tks/KDYwQGkiV0UyTCImWzNxQE1WeihCIkxGP0dLckBrNGkxKW5wWzR+InMoenNbfnA5eWJFKl1kbG8+dSwjPSxYWGtjNk1PaGxvXVYuejR4MS9OVToxVCVAUDlRKCt7MDsjUnA4WF1NZV1k'@;
put 'SXlDTixoWSsqKkZ9SW9SKjZeeEN6LHhlLDcjRzY7aylIZ1JzYGdVO2hDXWxnfkIzOGhWcyo9LG5rdiYkd0FpMEhuaygxWklOenxSQCxZdylXalYzLiQzMWl5RUUyYGpsMXJie1d9UkdNey9PaVRGPU5YPSR2cUUoMWpLTTZadHZHRXpFQUlYfVJuQmZbXV4oT1Qyayk0ZE8rTjArbTBKeS9Xd0kw'@;
put 'REIpZnAqfEp+WW5oIl9mME1ZJXI/b3VDWzZlUXFPM1FOU3drO0wiSSQzXX50eDpVSj80anxSTUtZOTRldng+Ln5JPF5MTCpZdzUqWWVQZC5DWztudF97JGRWVSNuKGhIVzsyP0M+cEJET2o1QHJeakMyb1tzU0wubVNEX05TTC5HNXRnK09QUzw+RUBPS2xkOjZTYWwwNi5ZSCU3VGdRZ25VbT11'@;
put 'Vz11UixANHk0ZExCUzplI09DRlFvQko7aG47b3crJH5UQUJuSiVsVDNjIz5vSHU/SjE0MnR6SW5KJWx7dXRnYVNSb3lYYjBJUnBLdHpvTEc/ISlJVGNVZ1RtbjRMUFlNKWxVby5adENyNENaQlNLR09rL1o0IzBMd28uMi4qPXRCNkF4KmUlNltlL0N0eEdaQlVrZFs3aWhkaEhqZzE0OHRWXjJX'@;
put 'KyF4PTNudnVuRThFQ3lYLzdAUFtVNm5NTXdiMzJTN29PJXcrUENsTDM7TSU4NCI0X3QrLklyMDMsTzY/RkpHYltBe0RnLlhASFhTVWYsNEReJSUkcFV9QkZHQ2t7eHFuSnUhZl9PVWtOYyxiSSl7KkdKXSJwdEs2XSJ3IVJdPjIrJE8veFUqQnNDcWJ8KE1EJldNd3B0LkBLUyVSUWEyaj46QUAw'@;
put 'ZEJ5QUE/IkYxQUBqZzJXP01ETWM2YyQ8XVUzST8jQlh5SEVVWWhRYjlubmoiS0xgdDZpJWdGSEBKekM/Tmckb0FZQy9gbm51VXxVcD5bP0ZEdlkreit6TCl4PVdVV3QoQkR4RUVBNmckY3R5V00sZiIzSSpicj9DeVcveW5sTl5We1okXlVjOlczMDtRWFF7NnMreyosV3hDXXAwLm5naDRBW0R2'@;
put 'VlB4U0RNMDIiSW4mOjZlWkB3XjlBSSRjKDNGdjk8PW9AMlZ1Z3hLRCQ0Qk47b1M3L1Q/L0ZNOjZadjlnPGZffG5iTnRmRS9OX0ViNDcvfTlQYyJ5VUZKOSFtb25PMDtJUytUQzM1fTR7dCNCYH13QHo9fj4mdVVDOEtue0dFej1iQFEiPWBSSXtVajowYnt5eEciQkJgMFV3Z2pjISsjQ3lJflY4'@;
put 'Ull6cC4sPkhCSEZOMUslMjQlRy5ULGl7e0pvQ1tzXXddZE4rRDlgJmdoTFdoZmRFQGQjd25vb2tRRzFZemFbcVU6eWdKcGM6NiJZOFg+LF5hZGp1TU8jaGtqb1MsdFlVWyl1dGJ8VjhvPVRCQjdla25jPzxJNVp9TUZLRT9mQkhGVltuYnEvRUxuT2EzO0lFUSkpfk1ESz5UfChCVXwodEFzbWBw'@;
put 'Q2BvYmUvc246RXdhbnYxeGQjWjR5WHIpVGFmSEg3IS5IVTRCM0NqZlAzI1RndDpBe0lrMEcwUi9GK0Z5bz1Bams9VSwsT01VMG54SkBHNy5RY1dYS057RHtVSEhZQHJaX0o4Unp3TG9PIkdBT0F9VUYlYnR0YiNkXlNERlBvZXpsIkklaj9DS1RVbW92M2VvL0RgUC89SS5eOkcwI1t2VylCKEdJ'@;
put 'Tm9XdSFlJVhrVzNhemNGMlRxSzk+MU5GRzJhR091Kzh2ZCJIa09nZk1RUjgkPDw4Zm86eG5MdTBDQWVuUXBSRls9Snw+cUMsQS5nODxNT3k0az9+ZGEzW2QmNkczP3R3Q2VpUEklZ1BwJSRQWGxDSkV0aDRzOjZjMnt4PjJNdUtBMVBNXzVaVGM/eXtIIk9GUGlXWWs3a3BASlp9PSFwNnFnfTJT'@;
put 'bDpSQF9XNENbZChLLl5XL2l0eWN5VUJfcUM9dn1NZCMkazhuL2ghaytwczNAXnMrZkh2al0/O1BJSiwkR3RTRFA7WlE8VFR0RXV4R0oxcy5VL010REIqZFZoVDNAVDsiRDQ/TXR6XXFPL2A2dyg+Rk9FITIxW3pXUEFTeE1GXlQ5REwjXzJFImlZLlguWGJVWXc5MGgkT09db1JAa0N+MH08W3Av'@;
put 'b20ifUozLF1UfFZPMTtec25WdXdPTVIua2spd0RxJUwpdHdANiZrJS45bnxwWiw+dF8wfXJbenZiSCVAUHNSOHo7UHoucW51VXxBKlQ7V1d2TUZVfSRnR08+WzRDQ0J+ZzQ7cy4+PkZYME8wYTpgWW83VWpGIzRIYl1HeGIrKzxEOUEraSRnRyUmV25NYUh3bzg8bW5FIjRdQkolJWMyUDJPL0os'@;
put 'NytEOnF9I2UyazBXPzBCR01EdmJaS08vYXRwTy9gUUBycEMuRFMyPFlRYWNkN2tAS08jSWRVLl49SmtEYlU4eH1NRkh2biVVWkBaQjh4KkI7bz1OL1RsKStKWH57V35oN2BpPU8zLj5BRUl0U0Qoalh6UjlkNGx0fTo4RHR3TC85VWcuYEUjazM0anV3Q0BzekIsNihbWzZANihbMzQzM3EiJURJ'@;
put 'V349YiNjLz1bMCglQTJNQlMwPFFTYjRHdTVET0UjZGgjVm9idVd3cVlvWk9MZFt7e25VW1RkSGNLKn5WKjZgUG9CMGRLelQvKi9Ad2daQGkwN3dGNiYmIm5vQzBDTyRuJmo6aT1CRGFCQTR9TSVOJSRnYjdwYXVIN2grKENDKV1UTyR9NExSdGRSWiRPVmkwKFRdRmFGSFZjaWt1a2I2T0pMb1tA'@;
put 'bUBzVV17Yzk6PjJBaUorWSpOSm9wTHxBOTBlRzxVfDBqQSE2dzY3ZUtvVSJwMltlc0dwVkZVKHlxek86KlpwZntPRHlUb1dYVUpzVU15Pm8wekczQ0QiZ1F2c1Z3ZyVbaEJJSDVCIWU6b3p6bW43W3pYTzc3NEUweSVoPzp1KWRxQCZAPUYwPCNPPG93LDVFTE5zMGJea1U2PDdPeFNgIzxQJFRj'@;
put 'MyhdeWdbPkZYflBdIkR1W1BhSFNdYV0oJGBXR0RaTTlWTjEiWWQ/dEYvPFJJR30wYS9vNGJNWEdCeVlFcyRnMjpXQGFNZ1osTzssVHJsJUlLWSVJbEk3UDN4KE9CTERKRlpLWDdvQGpYL0tNWHg9a0BfTXU1SzVUSVtSUVFUQERCckVyflJRWzI4NVUxaGhKMWtuRT9HeXNASVlqK0l2PmdWQiUk'@;
put 'QVVaa2QvZnxbUXdgMlNDQ2JTVWMiV3F0M1ZJa1IxRko9SjMoNUFISjQueTpZLzMvfSw1UX13JU4qNnpXQEJER013fHJ6ZDxUVlhndkJ2aHRWS0N1K09Nb0JbUFY0MiFmVEIqTkxPVU99W2JCLEN+Z0NLK1tFQXtkY1cpSSI1YVE1ZzhkYzR0LCtCSVd+ZF58cyU9KDg3ZGtPM3BANkNdUGlUbWc0'@;
put 'bmF9Okk3RzF3R0hLUTJhcC9vWU5ZSjZSKVdGdz5lUlB1JUdvSCpQSWsvamwwbiVsbmcpNip0RT9DeFYsN003P1twWylJMT9KJHJZRVFjRT5FaylELE8vUXdmJW1ua1g6Qk1MVFRAa1JjSSxSd31DV2F7e3VDT2M8eTwxe3lOMU9PK2tvL0VVdDB9UjhSTEwkZ0YlQnR9Q3ltamQlZ2A+TUFhSmFt'@;
put 'NEV3YXx5QjJxMmE6SGJdemhrKC5FV0BrUjlkL1klWCkhRiNSKjFjOHx4VC95L3kvQ3RfYTxSRitNTXNqfVpLT2xjYE42ND50ZXdITTJhKCgkbjpFYkdsSTohMm9fMHdnKVsxKFdGVEZkUGBxSUs4PWNAJkFrRFhIJU4uTmRvXUBYNXw0dFgsQ11KP2Z8NyRnQzMkWEdWLnAxXk49JFhNU2UjZTR7'@;
put 'NHgzcW8xXkBVVVE4X19XdGAhOjY6aFZbaGs4PDA7KDJ1X3R1TTFrbCs7TzVLeGlJeEV5Oj4wQzZKO0RsJEtvJkxDUFl6ZUdQb0J2eHhhbVZrcCszdXllbmJTb35Ae0FCRUs5RDNqS2ZIa2dsK2d2LD9kWyNNSFouZENQSlE8bFZLKVs5WCRxZzhsVTFuTVl5Kj9ecDp7MlpYbEdaQkZLaW9hOnxh'@;
put 'Y1dRSW8lQE1wI3ZucT8lLCksfFczXktTaj15VVV0dERRRjpdVWtmM29MYlN8UUkyeTpxbnVvfHh2Tis2XnpVQDZ1L3Y2RWIyOURIYi9tb241dClDPkE7bHhnajQiTDZIM3c3byFrKlRVcF9PNkhfI2NVTzd3QCJBcVIiSGd9OUJhbX1NJFQ1KzREKFZ7WisvdkBDLiNDcnI7bEUzPFtCdlF5T2dK'@;
put 'UWo5Yy90b10uazNWOl46LnY/dChiRytIVSZ5bjBxMixuQTh2Tn1NJk5uK0RdVERxSGQlLzZQLyFCUytqQ05Ucn5nOCwvaSsrWipHKFhqZ102eCgyeDlyRzxmTDp7dj5ZREdreW5Sb3QsRn1bUEFgNWBzLlE/eHBiKndMeWZoLj1tQUIrNjVuUD4sM15uJl4iYmczLiV6cUR0QFpQPVZrRjNMWDZt'@;
put 'cFQ6LktVdkA8SVdhaSlHSnMuO2JuM091KHdeZ2hkaWR6bl5iK2JXJWpxbkVrb1Z7S3tnSFVscy54bk8uWFdANFFnZkhaSTQ3SHc0Wk54RzJqVGMlcnF8Xz5vMENfWXUySHduY1oqP3xyek8zbnYmMjA9JikmYGpEMyM1P3c2Vkc5SkAkcnFzK0BMQDFRYUsxayRDJXEvNlsrb2tdVyJBJU8kY1Vr'@;
put 'JCFucys4SHBLNV40LkolYitIU219QHpmayQuRnQ8XUxEX3BkJVpbXjYpVCIzJDMiYml0aXpTVGhYPUVyJCZicFUvKVpBeXZzQFtHWzJ0b1hGOk1gKlNRVVFeanZYejtSUXMuSiVJdkg4YTgoYGxWJSR2bikrYE0xbUV2M143XjFGSmhtdX1FbUdYSjZrJWAlWFFCd18xKStEYDdjODpgaGIyeEBe'@;
put 'OUVycj9eIXhrZF1pcnIlM20lN2sqRlBCKFZCMC5KLD9sVjdvaEwlQlZrfjJpInZkZXB2by5KaihsLlFuLGBaL3xUTVJ4TSZmfVl7VTtgLzZwcmhHM3QhWVYpJDdrZDNVPEJsbj00SyVIVSFFcFJ0fG4za2QvNkdrT3YzUXpgITp5YmQlZC4uVCJLQnlJcll6YDosXjJ7NisrW08pQnBOdSR4LC4m'@;
put 'bnE/UEJCQ1FnRiVdKHRBLlMxYmgkaTYlQmtKLzZjODZWdDNtJU0lejwwPUBbWUNBM1pHRUk6cWRyJENAMzR4fXIsKnh4R0pOU3B2Om9GOnhFfWk5dE55fDwmNixfVFNQO2R4XWs9PVRTLzYvKl9uTiIhWSU6cFpAazk9QFs8dW95ZmRFNWVIS0A5WDlPIzY/Xi5eUW8+ei5Ke1clOlhjQ1g9QEsy'@;
put 'bms8QGcwaWsuQWFbTTNVSl8yIT1tQTtVSVF4PUc/YD9KSiM2MWJuXVovaiRvLkdYQzM6VEVbPjpUU3t7dHRRWFlbOk0yVF4/aT5de0RaMnRgYlJuYzg2YFVvPnouSnBSKFYoJi5eUW9tei8yQkdoPXdXJUA+OiNPaVdVcHpbTTMzdzZbJjM7cWxUMS9QYVJTaXlDVWYzdm88V1R2NiFURGtEWGlw'@;
put 'ZFUsRk9gczN8N00/UV5+Wn1GISFUP35PYEVoTS9dflR9I0E/UWR+Kl12d35+Ln1lOytlKj4sflp7cF1oNnNXLH5Qe1QpL0NBIjx+en1HN1JxfH5Eflo6M31gfnh8JUtYNCR+eH1mQTV5JH5FcCJ+Il81UyJzan4pKmQrX3NyfFI2QXQ+fl1fcVAoaCJ4ZlpIb0E+Vz4lZGV+MjQySCFvaWNmLyQo'@;
put 'NilfPUZ6PG88by40ezxVMDxveVdiP1ImR2NPY3BbNUM/YGpFQSJFflokXSZiaTErZ2Nwa256eTYiMS5iSU9kdlZFODV0Vz5+Ol9+e0JdQiI2fiRaTz07TWtIV1JlcWlXfjcpWmNYKkFZditecHc6QyF9SkBVJHJPUE8wUyFffT00dUpibXZSeXRXMnw4NXRXLjQ8aHk/KWh8fktiQSJpc0c2YHNd'@;
put 'JDpzLlR+czpzcmVfc2lXaDRfczV+YWZCIklje2tQYWszSEg1OGVxenxjYGUvOH0leW1iS31hUGZnRi9HN0YvSkdkTjFFSm85clJMMyI3emJ2IlNJaCpmQXRTRGMyMmhBSWUkcXBzO2ZxOXhnTSRXVntrOFJ6UShaPkclZnY/U304KDohIUI6OmZZXV44b1VicStienBiUilnOj9XX0w7NGd7PDY5'@;
put 'TWUjMztmWzZmQExdNzM9en49JndPZ2cqYV53Kyg9YFR1eXpoalQmZD09KlFwajJeIiQ1c1UoZH1KZltPKkAmUHVmcEpMeClZZnA4WXxCWUs1bWEsYT9xa0J8Ol97I0ckIV9JfkBdTFFgQFFePX19YWI2cEh5KFhnIThQUC8rd3FSZmNfQHNPK0lbR1Z3fFRLO2N+JXZQSVZyL100VjZgUUldaDlN'@;
put 'JmNtWyZjRkFdP3pOXlBUOSwoXWcyfFdiPHxpTDFrM21ROlg0cExlM0tiejV2bDFiPnghWTpPVU1XRCVXJmdaVWxAKGoxWyxTXzsxRWBVU15bfUQ4N2llJkc5S0RxUUkofV1VdmYuaU17el92ZnhxNWlOQFMxZmVKI0JiPjZxOl49cj50LyM/Q05eVUdfZW85Sz09I3FXRnZLT15QVF82TjZkQGx3'@;
put 'bmdAbC93I2lxOTtkUk1ZV0F6Y3hqVUUjbj91IUJySSV7JCNzNUtqfnZkTStEb1QuSSslcV9ANHZbLD4sVUY5OVNiUWZNV0hWWmYkK1VGdU43VktAdDxUJGJkaDJfJiNqeWY0IXs5ekhaZ0FXNG1NKHchMV9INWcmZD1UVE47LGYscCklPHR2Z01xLGZjJkxiV05yPlE6UGRPMXdLaDJOJSkvJXpL'@;
put 'bG9ORj1lYEIoJUchM2Ewak99P0JzWjZ2JCkkOiVZXzBNWXlOJFNKWXM9O2wqXiFjPHB3YFk2emEzW1JDMV5TbE16VT1ifit3YngkWSZJK2tHTGIwPkldKT04Pnwrd2IyPiVQMmIiLyEvU00jOiUhWl5sel1TeCw/JWlidyF7VXwxbDF9Z00ha1tyTFl9WnppZjhIfHxmVSI9a106cC9mR3dgenBQ'@;
put 'QCVRPTZhTnIvNkZ6YTFQZ0JWX20jWnBKfT1eJlM6KSFjJlFFNW1Acjc6UiFnUltwb2p3Lzo8LztNISZRTzY8XSNvcX07eFRZeDdGVnE+fCtlUiE/KT1rMm1kKjE+ZW9JMTwzPiNPPEczMWB6PEc2OWtbUTx5Vm9ocF5zQEpbcUAzVmQkOjM6cnchRUkyVkV+e00vaGksdn5JXXNsLlFWbipbaTI9'@;
put 'bmZofmlEX3sjLjxNdWM1cyxDYlEpblVSbkBgdCtwa1hsTCVRPTZwajwubXwlbD1dez9dZDokYFRdd1YjZih0cD5RfGtkMCVPJU1eeCwvI3V5T2clTHopXj13Kms3ckpkJERWMmNBfG5VVnpdNF9kV29VJj06MlIuMWF1R11vU3IpN3Y+a35tYWhYZyRVMkU0VmBdUFpJUm9qQ2YsU3owM3FfWyJP'@;
put 'dEAzPTZRSCZLPztpM2J4UmZPejApKl1eaX5jV3dATEwqck9MSDV7bDViL29bYjFdVjJHJmxPTWVlcys5MUJ2X3BtRyZ5OS9qXj1oUFpibFdJbWVWRiNaLlpWT18xWmV6RjE3TUtfaFNxe2llOGEsLlJiYXJnXS9fTUVmbCJkJnFxe2lnJi5zYUZgLzhAcy8xMGdZNjhqZGk4RFU2KVN2T2JRKkt4'@;
put 'UHJnNUB7XjE2JFNaMHNhNjNoczc5OjNGZVtnKHptXWprV048cF08YmFqc08rKFtySHB7XS9wODZCUWgxR0hWRl1TJmNtVkFrN2g7a0VFVClnJW1vVE5fSGpKPlg6cE5PMUg+XT1kYiIvTDpiZGgmYzZNKGB3PTolSjhhSGdCOzx5ODN8TzUkNU5dKkFgOyRYVDc2W2x8JWwqL2RaP08xdEgmRGBN'@;
put 'bilqa3w2Q34wPGprfEthViFbOElZeSN7ak56YFlvUi4iZzpYTzdNKGhiUnBkUE1ARDFRYjhfQVIhfFlAIiVBOHtkMDcvNjJhWzxiYU9kQiV+TkIuI3EiZHBHSSYvODVCUWhPcjJfNl52SCtRYEkmRjVWOWt4TXUpU31AOEhxNlVBYXIzczs7Lno5XVZjfFdEUyNNcU5yMl9jWGE8Si4mKXN0d2Vo'@;
put 'c3IwUmtLfEU6IUViOiJvOEA/Und9LDxDbDA9ZmBLUSElTGFZRHkxR3szPWEhMFA6Zng+MUlFZ2NhRmdzKjtkLzteIT5AX2c6ciFMXzw+cCxmKC89VXAqNUQuO31vVVApWXBwPTRRcSMhMEZ5L3B6e2teTX5efDFlSzlkMmJXbHBvdnZxeGMoNno1c1l3MEdASGkxUExINU42Tll8a1lORFZPbzxO'@;
put 'TDpCKCVHXk8vUUYoOnpXZkFlXWVxTiRSeSQiT1FpcjptbC96UGRRaXI6WntAbGpOSVdCL099flYuLzNdMU4hcWcpTWBdOzFwNWxqI25xX0AzQ1AhYzY1QFhOaEdkXyR1WDJ3Pl1aITFHJixpZiowKnkhV11YSV56THJRYXRdZm9DOVErUmRWe1g1JFBoLEkrVmxZZkloTCRZX0lAXz9bZEk4a1tk'@;
put 'YlglR0U3L3gwW2dCNWlgVHpTXWg4VWRocz19XiU0VTM2ZG5OKypQSH1PZ2xLenNkZXVvKVZtdiw6QCZ2UlMsVV5OfDVjLHNnMU5vdyxfNkAjREliNi41fTozK1VNclFxPT4rNGcqOiFxfSsvTSVRTzZSSDgmPCsrQExSJi5TMHU5JWo3YXtrVSZ4KTg5aXs6WE1xIXF3IVhkWSY3OiFxcGpaMWVs'@;
put 'ZlZfN0BOKEAzTz1iQ2JLI1p5Sl8wUGQyMjlUVipTUURiUUk+U2d7eTY9JVIuZWJPfGk5PiVAQjhvajBhSXNaSztzek9QZHVxV2RLZlQ6UD1wbStaLCg+KWtmSTVgUTdqVnc4dT1saiNAU2J6W25IbVFoJUFoR3xJLjtHanVyQGY1enojOSVFeERvIT87a1p9Tl5bLEM7VmIiLyhxNlJdPWE5bHJD'@;
put 'TWttRzk7K3ghNjBDcFNeQmxCJHZndHs/UEpSWD15ME0oaHNge1JrKSVSITExTD1dU1dvIiVQbXJ1a1kicHJFeFUyUVR4IV1eJW55UnE0WjRlRj1wazw9RXpzJUIpRT4pa15DNjhiPUN4L3BgIXghQnxZPUgmZnFvVDY8XVVDRWFEfElJVnczQz5WXngsdyFHajQ4bmRYI35rMW1nX3k8cyFYPUha'@;
put 'YVYkbnp7Lj9LaXYpaF0jcUA3JnxtKTZndDwlfmo+RylCYio7fk1HUD5fcj1mKFN6ak06ZnBmIUsoOVUuOXZ0O3ZhPklzMnc4ZEBFI11ZTHA9PDczeWM1K1loeTNhVmhfTTZUck9xUGBAdX02JkpLOG9qUzIqemFWSVBxcGE7OHcwPVNnPGo4SXFCaCEkcHFLZENdekZeJE8rPHNrez87cCZBZXYl'@;
put 'VUdWXmU9emZXTSVRPT9Le3FfKTptWnNzZUs4ayhWJlAkcU1yNmsoUkc7M2xxO2RJSjtvL2JDXnlieDpjMk5rMmI5XldtXyt6emokfE1INSwse3d2a0FhIXBhLHYwejBQazp6elVeJVdsfjhAI1ZefDB+ckR6djpAYX5rO05vOyMlUi4iIWBNTE17SSg4fUBzZV5OcmhSKCQvVHZkd1JDIjV8TWd5'@;
put 'X3Znc0hALDU9PDx6amhkJDp6UiFLOFEoIypHb0E3USglNyNObWtNb2RlPFNsRDlRZXFgcD9PbDQ2MFkmeWxibn0scWdISzA2UGlmcXhtOzpNbzs4cXgkXyltRyssO2lodHZoYiIvIWpabkcoVT1RXX5QM2NEeC5jYyVnbVhzcU4ydmsxSmtpYFdNOTpEX3ghXSZvV3M6Tn08bSNFOl4lO3xiSjIz'@;
put 'bVo2ek1kRHxOKjQpKUFsQ2guWywxdGgiWlJ1IWxUdldyQG1qTkMuPWVfJld1flpbK0xFUDw6M1IjMjA2MCQ/O2U/UlkhQWwsdTtkKnJ4ZzI5fUxUMl4mTG9LSn1wUHloVkhpTXloVlo8OlNQPD4/b21abipYKTJZRiYxV2BoOEUveiNeb253PFUobSxxWUZaQDZjNSt3fj1eMyUjUlNlWSZOcUQ6'@;
put 'Qjc6ZFk4eSErNXY9QXlqOVQ9Uzx4N0pfbTJ5VmQhNi9OMWJlWCVoZkN+aWhSfSVPaSxnKHBHcTh5M2RxN3FhOz10aT8wWj4xTDp5JHgjPGZHY3V6MEsoVllQRD50Yk9fUFRCdlk9e1d7Z3N2R1ZCVmdhT3EvZl82WDZzTHRKdHxlc2hFKD0kOHJ6IiVvLGJnWUZNVyJESzsyMFk/WyhDK2UoRUAq'@;
put 'amZwTFlrYmtRaCEuXlUxNDhCPl1ifjZ4RzF1Sl9eZnhidlE9Yk1aTGVfWkpbVHFsT04+LDtBfGYmUUo5USQyYUszWWQmc05INGVOXkJrMTA9bDIiJW13OiFxeFtSUi5tS2ptXWVgXiZsSnp3LGx5X1ZwfWQ3fW5PK182Sl9eZjgzPEdmVnovSjVSXkZMdTk8U2xxWmRdWkklPkIvXTkmSyQ5Lzty'@;
put 'WiRJNHJORmVPPCQrWDFLaCxaYV9IKFtuRyZpJmhWd3E3XkpGci8+cGRfRWtUXkJ2ZVZhelUuX15kUCQyPDtHb2xJWVZ3cWs1VGRDPisweTNYZHZTITFqb3VLITNwLEM7PCFbSVEmRDJOUE8odlE9Yit9aDs0VTRtQ1tfdUFuWm5wQCI1WyxxOy5KMmdvODp4MTAxaCNxZTtgdFslfmosJVgxTSxX'@;
put 'bzU4ZnU8YjBsP29dXnw1Mn1QaGhpMCtxaD1pbCRYPW1Nb0opakk/JGo1OnRsMXx8bFptVm9lRGk7IXEjJV1gek1hemg8alJQZz9lck1FMUlifEBnfCxpZFRkTjBMLC5wOEVqY1Jmb0dWZ3tpeXdxczp+ezVtLzlJSyZ8RF5TLnFNISV1LDx3W2c2LHk8cyFESStwVG0yTmplQFpZeT0hcVRjQGNL'@;
put 'bllkeTVLXjRWNmsoPiwseC9iV1BPKHsxK0BxaF88K2xJazFHYG9NcShxK216MmgoPixgOjVQbF54cEphfns3fDNhM3FyR3BQcT58Tz1ieT5gQClEOXplUkZlRU1LeERvSVJ4UTJRPWI/b152KHBNeWhWak9CdkpfIVNIKG0sW218Wz1qcjp1b3IpO2Q5Xk8/fk1FUktaL3dgJkVxVm5xbW84R25z'@;
put 'PkArL1VaKGd7P20sTWU4MiV0VXtZeyRFeSRyKkBMMVlaeGYwKihZTUhkMjswW0F5JHA+TD5RUFI7TXFEcWRxJiUwVFcyKDUvMHAsPXlYSSMpYCY3UmBATD5SIXJeTjtBeGhsb21rUDdAND5MPi5lSTkkXU0rLC58UFpiKz95SUghMj40ZW8wUiE9emJoaGVNZ2gjfF5bbkFIaThBJikvSG45IyNI'@;
put 'Xz9NeDEkbDEmcHhlYzswKiFqSTk1UHxAMko0bHRySztKTXE5ZV1BXTJANSxEZyV6fXBmcjZsLGQ5QCxpYW5FSS9mYGc4QGpSXWUwcE0oISpvZi9RZl84XTtrQTJyYCgjKH1HMWhiMCp1S2p7NWFbKUpjSDR9UHwwLylmeWhWZio3XiR9WkRzcEhxQUZGXzZheygjQFQrcWs7ZyM0PGpkJGE6SDpV'@;
put 'MSFfVVNkQC9uMDtgR05xM3p5M35wNHBISWc/P1lbcDM+MnBLKCQhdFRaJHwjS3FNaHM9PWtRRWk7YGkuaUBLR3xCfko7NGl1OUJAKGVSPmZ7USVQJkZiLDhZJFZgY0tlKC5zRz5iOWtdNk9HWClacywmeElnfCEhaixpTjZSZml2fFBJK2IpWntCT05sTXN7WnxASCYjTHVZWihsb18qTXpiMToj'@;
put 'fTpwdil6JGp6c1pLeiROeXI6Q244M3Q7Q25eaTJiKlZ6Ty9obT82OENmTHBPNkMoNUdZajhASUtGUzRORWpMcEUoQFJnZVJ7V2ZfPW88ZWA6WCEsflA9YT07cmU/PU5gemVmZioyaTFfODJscTBPaHZTPm4oOG5eMG1aNyhva3k5eDYhVDI6cnVsfFtFPmExMWYvanByKFNQPGd8WHkvOio7UHBD'@;
put 'OVBadU5Oez95aWE1bXteU3txVD1ibnMybHdPMnpGNGtiJikrYm5gcXhbJXdjSmFXI2QkJDBObzUkcjN4ZWU7WF1EbGhQQlsyP0BsXzZGNk42e3owSyxtUXIxcFA1aWAkWVlxTWhZXX1aOG56ZVAlKV05QD9STXN0T086WjlZPyNxJlJEUGsqRHwrcHRLXiosOTlLRHFUZyRVaF5OOzteYnZzSjBq'@;
put 'I1lmZCRiQmFgYSZ2WGR1LC8rNnsyWX17Pjo3UTVOdU4qNFpIJEgqYn5QSFZPVVdzdDYuPGtkbCFAK1Z3TGRGOV9dfTtIazhdK0lRMEY6P2ZPbzlRbWRkMksrQCpNVXw2PlhqfTAkWmJvalsmZmwyL1smKl41I24wLzhfXTw7N1EvTk1wKGtaeyM1fGhEKUhYRnVpVTw7Xi5DbDhjQVRIZUNYVntD'@;
put 'MihgJDdQLn5oMmJzRGx3YikpJlIzSmp5QHtNMCNQRlIseVZOMVkpTyxkbmUmZGw9a096XSZYOihTIzhzOk9hRDJ9R21ZUCVkOkBfKzN3Sy9rL01lNmEwdl42OyMjNT0+aXt6KSosZXpPdlIrcFI1RTs3UXRoODFfXUl8VWQ1JlJkOCMua3heZ1l0YT9tPX0jZDc3P2IkN3gmelFuUypqbWRWeyhq'@;
put 'QiZhUlBlN3daSHZ8I2RDMmNAb1RBLGkjYVYyLyFqWzBKOGksWFoxbUohZ19LNlhXSGpyZy50UjJ1Xy97KmxZVDxmXW9iY01eMVZKNkJiKCpncm9dTl8oPTVfUGA9fWs3YkQoMHhLPX1WKkhrTGRTPjcxUTAhbHdjaUImXTtuNXUpJSI0Mj1lOGY/UyVsdzdRTCtxb30jcmc2Qk4melEuZFFmLl08'@;
put 'YWZ3ZnlxKzdRXz9dUys7bWx2fnNyVzkqXjZlNWE1Nk06c1N0U34wcWd1Sl5NODs/ZmAsRjFFcF83OjViVEV9O2REfDY9dyopbE8xRWk1Nj0sYFN2U3ZTITE8I0U/O2t5JF03aUR7N2lEKzlONnU5L15fPDtebU1YJC96cnB3Z2lQd2goJUM8RDJyLChtMXFHaztsJkxhLCgpVy5fNmJAfWYvXTdR'@;
put 'ZVQmbGFyaFVzfFtHKztDTX5dXjZ3PXU7JjlBOSl4d3NCe196WztHKFEmXlk2TnBUdWh8QF1afElQJmkmdSxlbE5RMzkrOW5AcyxBbyFOZjJHMXIpIl58RiM2LD16blQ4YiF0Zko2anl8dyp1S1IxVlNwQ307TCxBc2QraUM3Tz8hYnw0b0Qla2ZyfUdaMCZAQ1FOXy46JTh3VlNwWzdYQDMocSFO'@;
put 'dnw2PEJ5RjgzQDpWTjBMezwhMEgodXl8d1EjZzZPaXM/eDhfRjlUe21EekF4WjlPLFI9Tl1mcTo5cENrSV8ydiY4UERKcGhMZGtqNmU9UVArYVY1TXpVdWBdNys8Vzo0TkhzY29Wb3V1MmZFVEojZXMiZH4rbTlROkF2UWRqMkwoQXxJIWU2ZyFSZWcoIk9YU2QzY3x7ZHNmeH5+NyF1OTpEfX43'@;
put 'cGplMWFndEg+ZlU4L19PRThhOXpoalFkajJle0IocSFmd1lASE19cHJNPyE8ejhhOlJ2WzJLKnciaV83aURaJE5kQyR6JndNeGEjaTZRUD59WnQkTzFdJFMlNGdCO3hlM2wzWE8xL2Q4K01kfjBmTllnLmplNi4rRyRgd0hATllnbmc8TyoxT0puPG56XytxJEB9Ny9OKHpsbGMhamI8LE55LEBX'@;
put 'dypQbXEwIXt8cXpzPVoxUFBRUDUpN0A2YU59ezBZeyNTLnIxZ3UwKCV5OTBLOzA1am52KFkiUkhRX2FdUl5dNm4yQzJfckZWW2hVZ0tLNW9CZkR6VXg5czlRcSlzYilUO1pfSmQwejFoUyhNVmhgRmpRaFUoOlMrclpxM3YvdzdAbmpaMV09TlFAPUZ4T1g/MTReX2FNVyE4NzZYPVNJOE44JSgh'@;
put 'OEE1di93YndFTWtKWzp7fHlWc0ArNndxOF1KI2tgY05iN2t5RWVUIU15XytaPDRlSXc1OVhaMl5bc2xWaGBDMmhgYkImYGosO0kqYFN5OUN3Kys9QlVPXn5WSSorJiteM2srejwySHBYKV9afjkzKnUzWT5JXlEmSSsrZnVzMmw3YVBwW1JKUUl7P21HIzRlQD8panZSJlhANi9rND43X0x7dVNz'@;
put 'ellsUV9UXTU2ND80cDVOTXNuQ1RfPDs3UTByZjYmUj44NHEoYSlsPTNJbDUmVnJye3MpZjZye19dPDs4OWNoMSNGe14mUTpROlBkdXExT0NqI1FuXSk5Ij08OU9MNjh+Uz1ldTJfbFkuJEhTLms3XnBBZCJaIioielcwaTJELjcmITdYe1ZqTl5DaFZVSnxvdXYhJnZgQGU+PkhDantieDFhclpp'@;
put 'U25RX0F8S0l5ZSlhenQwOmZ2LzxCL0pmUGVQSlNkQytEeTtjOkRxOndzW3pNTmpUQDRmWjUoYjd7QnBVP2wleVBlITw8dkYqNHArIyVjM0JIZGJMWmEvdHJacmdqeiMjP0ZqR1FBeVcvIz5tX1Nja1hPZTJfeVRia0MwMHtQTUlnWE5KP2AheHp1MTU9WXNvQXZLQH1LZUFLTzl4TG1ySDdMYHx+'@;
put 'REVQXjI+Smx8N1NDPzVSTys1Ul1mPWhZIktoKWsjOkN1bzdIR3N6UTsuT2FEczRpc1BiOVFxYUgob0V3ZylMZlJmWjFCYUw9ZkQuNElNbF5lcCt3KEE6KE57NlZULno9LyRAXWY2Sy5ZWTB0eG40dUlxdWhZZFtdZl5QMGNrWld4PVhDUmF5bXFORUNoKjRTIUlKMUtHeTc9bTZOI04vUzt4RGtR'@;
put 'Nl93d2tjaVJxT0lmaExmOD5vbkUsITw6ZTdQQ0NSSE9NMHpnPEwrVzVHczFfMGc+UDdvdTpPRzsoM2BqXkBuRFpsczVOJiF1O1tKOFFEYWRsbnJDc2NuRU41dU5KbUY7ZTJpQ151SDc0NCpURXp1YXUmKlNWTl4kPTAkNDdTU10wa1I4UiQqU35CLGQ4KncuKSNeeWNML2YlUXdsMUpHIjZQZnVX'@;
put 'Y3ZFJUFoU095OGc9NH1uQlRVPzVyXlBpRUM6XVFtT0Y7WW9xSz9aeDttN2JDI0tiKXJPRjtuO2U2KHlUemU3YkNiJX1ybGhje0t5X3VDZnEvVWMjRXR6VHE8OChlc1oqdSVnRXc3NHpKYzJYO0I2UTtBNUxGYDE3UEk1ekpVQ0JlMi9TOyoiKWJFYjVZOjomKSJDUzZFOjJdQ04lKUYqWmQpOiVY'@;
put 'O1BfRGMjM11mbVpRKz43UCw3eC4wX1F6XmRQO0csW2RdWWhxM1dWb2AoSHQoSzk/akYmeFI8MzdRamUyd0VGM2FpNEJPcjxVaSt4XypVXlgxb1BWQCJkSGQ4V2pOaHJCIktKWjFvPFdBVyo1b2dCTVBmakZPaXBzPDxffTZGXzRvaHhISXJ7JmlRR2Y8WWRlZzpPVnYsUk1eRkV1cUMkP3k6L05B'@;
put 'az83d1Ysd2gqPWh7fCk4JDpkW0B0dTJMZlBlNiF1TSZMQlpzWWFwbEJHTyVFNWdCTUIhai83K1JkYXBodDgoYUkyOXYvblp9SjV8X0txZU51JmtEbG8pUk1URjYzQFFWYGZKcytQQiE/TEZ4SHZHO1M2SUckI1NHaSRUZDV5X2g4NzpETkEuLj59RGc/SVlxbH1SRiVTWXhLR0plREBRXlBacWor'@;
put 'fD5ycGx3RioxaTJBaD08ZihbYFJodCZ8ZTh1Qj9pOmkjZUA0WUtSLEdKKX0uRyksLn0/ZE5QUGJoU048U2ZxYC5HeUJPTj54eTE5UzE0cjFobHcxbDJ3byoqQmZJRWM3U0ZLXlt3di9mODZkdmJjKXsyMVJGI0ZxOVFSKnowfjlwYHkxYys0OjN2M2Quen4mSFBSQXk7fXFAKWY3JkJOaSVAcmpm'@;
put 'QzdPWnQmTH5Mdy5OY2dKZ0RyTGFkeGZhSmpqVHlyL3tSUGIyYFtSRDh3ZUZ1e0FOQiN8KDM3PTphMml7aldCNG44WUYqOXQmTzgjUVImM0JTfEpaVTphMmkkR1IySXt+fnI4PnhCMVdYP0khWV1KM09oQTlbcEg/JXFgZ1UrITJZR0YkR09mImBRWUVyQSJROXhic3V9RWsuNlY8ckpwPVlaWFti'@;
put 'ckkhfCk2N35hYUM1VVJVL2siMFdeUHVpUCxpYSQ3di9BLjJke1hddU5sPWNCNk4jQVpJR1BtaU16T3k5dUdqLHMrZCNiPyV3SFRZOkwjV2M1eHNIQEV3R3FxeFZ0VlVKKkZGYUxJWVIrUWdhVkskdn1AaXlnRUdEYHVCNTkoIUkjY3QrLG0+Yy5Sb3VHdHxYPEVfN1RGJHZAc0l5fixZZStPajoq'@;
put 'SHYsezd7WysvMkxOY1NReTtNQjdieDQoUzVScDpoNDFFPiUkJGY8IUVPQihTNiEzbUk1PjJsWnJ1K29QK2MpaEoseFJZLGJzOWxaajY4dyV5YFIsNWovNDEkdno4cTAyQCVJX0NAQShje3YwLl1qKHZbQ2Q2SXJCSnVvbVkpTDVxanhTRiN6R1EuTUhnQT90QjxmQX0xL3RCZmJrMVBVVlg3djlM'@;
put 'bjB+YHhSNClGd0RmOyY6XiFGamVfdmQ5Wkx2RCo1InRsZkQ2V3t2MmRYeTJzQisocXU2T2NNfnRuZXEpWGNuK3tANUxZZX00MXQ5MG5vZzp+SEw9cFtGWHEwKDUhWjBfWGVmW0p0PTw3UkRfam44TX5MY01FTWMvISJiN3BNbCZlcixYI3VzNGVFbH19KUg3ZjpLLCZUUkgidyQrYEphaVI5SyRV'@;
put 'UnhDJldnZ3swflI2Q31RMENtNXdtQWtaXUVLJGE4Rk4lKFt0eD1PTzNnVUdNQCUrcXoiOHRMdU94SlRYU2p1IWtXMlNmTHk9PldrKTVWYkp5QjVHMnQjPCt0UEwsM0ImNCh4ZDlKdTY2Wy80V3swYGNgWEhEPmxXb2EhfVJPWFlRZmAkTVVHU1pyMkwvUkpdUUpnb0NGaHwsVU9PcH5gRlZdQkh2'@;
put 'O2ZbSDZGNlJFME5YfVJCdXJPdUcuejpvTk9UMzxoaV0ieTEufVk4KSE1VUR3WjFaZExBdU5YclI0LzJVbUNoJDEvI3dgKCI5X2Rzcz9ySGdobHQjKlo4eSt8QzFVN2BYLE5meHZHKTxHS2l4fUNDNmFjaitDRmRsdEJKRE4kQVNZfUxJfVlzTFhTO3kyTGEpXXBiP1UyQEFpNyE1YmskRDd0JUZu'@;
put 'Tj9wYUV3Si5TLyp7JihRZHpxQn1KZSpjRUpHI1N1K0g9OUpsIX1rNyhZQF5DTylbQlBCXSpmWHljVlEkel11TUFAR1dEYEEudjtxJkExVz4lOVA0b0MkcylPN2FTdmBqTD9EKHYiQyR3OFtnV14oXU8ieTd7MlsrQyR7Rk45KmlKeTZIN1BqfiFCVVF6JUZ6dFAlOkxaTSs2b1dwaUZMT2xrQy5P'@;
put 'd0JOdCZ0S0FWe3QrcVdxKUNLJHB5PFNvVzptd29XeTI5KVsqemJuL3hCIVdoWFM3NHlALFVYUGFiYTtBZnZ1KTRaPTBZVyhgYkt4KXlTSHRXRSlmUXQmZE1KQjJAb3Q8OXVuRylYeDR4TilFeHNzQCZSXXc3Tm9mOUREIlAiX054c3tpMUwlVzNbNXhtR35MbEd6T003NjVgeywrLjE7eW5HV1Ns'@;
put 'QU1AbGx+eT9lR1NDRlB1PWssR1ZCV3ZpfXsrd1h3Yjp1ZkRPRypbYzxxeDcjTm1qO1lSfCFiKXsxLEB5aSV5L09fW2I2SWtWY3k5VnRfRmIpcWYsTzB4Nj1RJktvTz9JMkNBdVpOVlQsdWJSSEt0aU1NSUxMenZJSGpkV1pxUElrUkMjPykzNTdmSndnRjQsXzEvdTF6WW1GamQ4ayRZZzlDY0Rm'@;
put 'WHg1bn5JZGBeSDApZktlJUlXTDBOSz9jL1p3M3huN0l6bmU4Nk14QiNMNzpaeHNLK1cpVHhkPkBIfmh0IkZobFlPQTttNDNiTkFMPU59YzMyIyJDOExgZEtIaEk9UWUlb1dYWm1dfC9uWkdGbWxlWnRsUzs7Y2B2UjJYUn1kMDQ9eVQlMTBJfmJJRFpKKzFELE9Me2pIQDQiYEhQcSZiMzc3JTV5'@;
put 'Ojcid2d8bTBvV3RjJk1iXy8uYyw2czMuVGQsYEE+eFdVSUBjZG9tPDBWWSlFJm8ydDw0JFV5WztPQ1JrSCl1fGAxbHNjS2A1P3xSPnVOQ2l1bV91Vy5TWmAodiMuTzxLfURaJnR0TCo5KXlVQ1paQSpIR0tSYl4vPmhCNWd0NC9MVHE0aVc1U0k3dn0maiphOWFjfDJwMSxzYFhCRT1+NkMmV2Jw'@;
put 'ZC9bdHExe2R6ZDJ0MlJ2NXM4Ml0wRVRLYSR8ZDU1OHV8X0JBVSIyXV95U2FJTTJHO2MoIkF4eVl8ZVE7Ji90NT8rVkhTNUhCeTR2Vyt1MWd5Sihwfk02NDRjI1drdHp1TX5tPDY2R091RTsobGxhOnZpYXw6OUdRW2MrZXhEPEUydH16SD9bQDojMlZeblAyUWo2U010VktmYiV9TD0rTTxDI0dv'@;
put 'UiUjaXc4Q0h2N2hOZ1M+dm5LTFY1UVM4SlF3M19wbWdCdmxxTzIheTo6WTdkPz9JbS8jek9xeWFjTlAwNTBHL1JkKTdXLyMyVmw1Q0ZmJjhFRG1Adj9XUShhJGZseURBUTB2PDpgWjZXKVhlbzd1c01jWHhGS0tYNjRESFJOTWIlZFhYWD1MfFdTJjZTTGVmRDJnT1BaYVo5TW1ZdU1ES1s9diQh'@;
put 'WnhOW1pEWkU+IVgsajllSXhadEJwVnNvN3V+dGRaPzVYe2VDWCl0LzJMOjllY0xmZzV5NEtgXlAhfTV0Y0BwW35EJloye2FhaFpvXmBvIzdkLDojUnReY3FCK2lMN3AuaC98ekZ7MWwiRlM2MikvbFA3c2JfPk47UmovI1EkNEUxNnMuLzo3WDcrNmklODFsOjEvYHw5OEVVNXpKUSIjUk9HV29B'@;
put 'diN2RUouQUpeUGJubHsiTHNFJjlYRUdZUjkodng2U3VSc0MjRFtgSTh0Y192VmkiVl1XMW80Q010V0NGJTlYYElYRGJHW0c8WVNQRkJBUSVOd2x5aTdYWTQ0WXdXYXBBKVhZREc1ZzxMOnFtT01ZJFc5RTxoW1kyUlglOVh5P3BIciErLF5QdzF+WWU0bU9je2UyTF47RlBCJFMwTH1LIUxAJjJd'@;
put 'RlV8MjJMS29VODpVTG9OTW40OWUpWyhhI3VwJjQ2b0tLQFhKN3xlOGhTMGRGQkFNTm8lcG1UNWo1dz96alkmMmhDJUV6cT0qamdWbFgySFtJRzhETGEoZCp0KV0hWiJ8SzY5ZUFEVUNhKjskdVdmcVNhPkJDelBlKyJ4PXo9WjFXYzIzPWsxP3wmSFBReyR6WCUmTnJsPSlgcGdNNltRO1kpZE1m'@;
put 'dG5aTU1KW1FKPUV6elFALkd3SHwzekxRdEl7RUk0a0Q3b2dKTVljXkdvPzFCMjZpZltqMS5aWy5HO0NNaVdLYnR6OmxCdytzZUAvSFBBRClVTFR3V0dHbTw2dW1eM3pDSih7JiRdQzkocU9dZF15dG9aO0RKd1dRbnZYYUpFRnB0SEovM0JBJVtKT3g8dlRMLE5TfEkuTzE0MHxVVEVHYmxHQDFY'@;
put 'U3M4d0I7UiZmR3FjflkyOlkrUXZrfTgwXWNNQmFWNDRjWSJjLEVnZHZwTWNnWlZhN2trc2gkQk1GI0xJWCk5fHdNTX12VGMpL09FUV84dmdxK3ZGYDFBZXZAMCtIbUU/YXdGeGQ8cChKVGBxOlZHQ19DXkNKM3pJcERePm0wSnNDdSUkbGhjdSlrbGBqZ1JkdVBULC5LZU8xZF5IV01oRWRsP0NJ'@;
put 'TFZTPk9yQHh4cT11Ingxe2UveTIufGVXLGxUY0dBIz5GbnUpP05pXipvQn5iRz16MTwjM2EsWFNDN04lKSQvODRaYjlGLEcmVGVjQ0lOSiZGbm5xNm0wOGpYWE1PKFFeTFNoQipjcWJLSmxXLGxEYUBTJkJJRkRxKnlCRndHdFpZRz17VHZ5T2N3WkBJZDRoWEZReTUrRTtDfURZKUpWOyp1Vkpb'@;
put 'U3Y5Qmo3NjJCREMweEQ8MGhQaz9BeT10VG0zaiZyT3ZJU29iLCwuT24iITJqQ1QsIjB5blIpY0JUamlhJjBqZ05CPld6MlNeTkVNKVJEI3A6aHZ0JHk5NFQsXU14dEVacHhGRCFsVkJ1NkhaOld6MnkjMnVzbiU0UXNnRFR6TTozazRqYHlWRHNNfDFzU2VESWI4Lng/WSwkU3ppIi8hWU0ub0dV'@;
put 'RSk0Jk5LeUskQmxtaWsxcSlMLiF1UkI5Y3EwX2JVdmk5MmJHIWxKKnQ1JT8/czB4VW0rbVphazpDcllaJkZGVzBsQlRtUkxPbUozR0d6dEdgTG0wSWF4SyR3NHlxUHQmZEtpVUlFcjY0R2FULDVId3RJXkFBRTo/akh5T0c3V0R0azBPTnYockVJSUZaNnFwMzcrXzZON3YsTWIzSS9OPS8/akFY'@;
put 'KFBuR1VjfjxYI21VbkJwWmQsLikhWnFCSEE6Z1BNTUV7Qzk0KzxiMHB3XjFGTXNjTGtAST1CVSVXRyxHNTJmVUxWRCMwOkc5Tnc6SHZEbzZTeG1xVCJlJWZNbDlHL0l3NHpwRFYpTnpjIyNGVlc1Y1gke2pXODJYd3poUHw0flhLQ3R0VmNNWyssYjtnTWtEVjZASEFgVzBOcCJwdyJ8cThMdnV5'@;
put 'WEAvQSFhMCQ6KkA9SiI5ejl7L0x2LixjM3EhSUklO3Z2PENVIkR+MWRhUyMoKEJyU083bzU1WUNsL0xvOnQqYS9ERy5kNSU+SWZ4NlY1dFgpfls+Q3hwc2YxJXVJQEBrU0o9R0RaWXZQckZtIWxVbDkqRW5PNyluZSk8cTFlWndSenRaNHNtZTloeClbQGVuSiZ5YmZbTHBVUXBZUExQZGpPR3ha'@;
put 'aEdLSFEsZTd2Rz5sJExEbFF1dkVzIzpfK09vQVNBO1hyMj5oPk1+MTJYTUtmenduQUFwKVBwcE0xeH0kTko2dXh6RGZOKnUrUzZWYlh8Lz8vaDNhWlR0biVEITZEaz5sS2lvZyNDSHtMP2ZaLmIrNE90PXRgIypxfFU0KGRSZXNeQzhScHdubj5sST9VT1dlckl2I0UpbWg3QVR3WXAiSlR2ez4r'@;
put 'Mjp5UlBiTFM3PGlHQT5sY3RFKnYsfDlXMjNrXiJzc3pEVnA4andNaWVvIXtrQnVpPSg3bD1iUD5sLihvNCVYSHclXiRBcUZaQjhpJTtFKSU9Jm86VjEpJUYvdTcrYGolO0RYRSovb3wwW1pxRiU6L2wxOjElN1IzJj9YYTdlcz5CKVg2eShYazc0SiVXUG94TX41aXQ4X0QicnxtImAjIjFeWDN0'@;
put 'N3lldlg7RyJRSGswJGNXVG9hZEc1UlNsLjxBZykweV1ONzRKL083ZE9pVE5qZV02VWlWI2RZbDloRSZGeCxwZDp3OSE/dXRWbTJfU3RmJGprcTtmPTNrWVYvYTQ2ZzIlN1IrKERQO2NALzpXPmhnSnxlVEY+bCtXO1R2LHwpfkw1d3AhXUFGKTpnVkMzJVkhL19IW35sNktneSVaWjdkOlRYOTVm'@;
put 'bW06fEI+YV1fZldsNSI4N0RWSmF3ZXRocEcvcHMqeGRLLmdsQ1RYMS42Q0NsWk1wQkRQYWtnNSh4TiZNRyRtQXdhaU1AYEtvPEw3Vy5UQC5BREdWSHBCbS5VfGZ4WUFScEVMaU8idlp4dHVRZDlGJnRhKT01flB3OF9FfD4xSVBPakc6dUlOdkRqZDROTnZhXTVbWkZtVWBoRFIyKzJJMSVVR35q'@;
put 'Z1NPQkh6ckJwWHRCTSwyRy9naURHbyxIXV18L0d7V1IkRW5aXmFxSkA+L0ltQzA5MDY+VmFDRW9OSnFhcjJfeUtTNih9RUhbUGlKVi5rS0NsOTZ4P3ZlNXhSNTRLNztTRUh2VlpkNTY0S1hCTHJ6dmtrL2l+ZUxIO3lnXXs8UlphXk95LkY3dHRFZ1kwSCk3QXgvSSVCdUxHSyVnYUFMVkZCcTIl'@;
put 'OzYpV3VgP0VNcEJDTS52NVA9Ong8ZUcpITBhNXU9Y3pMNXFZTD51YCNNWH1VNV1+RmltejF8KDxmfWg0OlBdWz0rRig2N1pwR18+fVhOKixhbDk4dik0Pygha00udDg/ems8UVRJNzBgQGpbI3goVUQhKFtGckN6IV01YCNXbDNKO1t6WExiMmk4WSI5e1J2WH1mTnsrPjRJIkxjQ3RvYStVaVlZ'@;
put 'aF0jQkliWCVIaWEyS0tGd2ZPek5lNCh4P1RMSGVWezI+U2dBe1hOQz5lOzpXTiNKPFNsUkkwckIxdD19RkI9dDpnWE1wTEFePixfcTgzKFNjMzVMeGR8PTBnRjl8eWB2UjlDRVpMTz5WLCtnaV4wNklJc2k0O3lneWBOY1QsMEdbKH5lWF11dU9nMEFUPD9UYjV3bX5FfUlpdHF6I0RlXUA+Tzwh'@;
put 'QlRtOGNObzwpX3IpZl5tXSJXJkVTLk9iQX1BZTxwRlRYalApQWp6QX1uN0ska19FdH00MkVWSlFjPWNuWFFEYTRhLjkhY3VjMGFHZCxqfDFCKC89dTohJCNHaF4oOWQ4I1FBUEhfYTFkOiE/T3I9Vnd3RyZBLmg5VjE0cHVVLHxkQGg9Qm1MZC9INU4xWlhDNm0wZ1hOant2YTVwdT8+e0Yiak9r'@;
put 'STd8P1s7YEgpYjo1N2EjZ3tKYkxfRDohLGF9LzU3R0omTm5MTWk8N0xVVSxuTn56Nls3blZKKSQmRHc2anQqWEZnXmEzW0EzO3VMdHclM2pbUTg3anJhWXNdfEJHT1NocDUzaVMpQ1BUbUdlOnk2d0thKzhYdkxBU0IxVzpPWTU6Ikk8VUVFd21lZWtzfj5hSU0zaiMwS3Q0S1taQjpLQ3huUGI9'@;
put 'VGNJbTwlKFEhMlI1RWh9MUhqcFJJUXc0allCYCsuRHNPdCNxbjhZS0AmbGhYeUpgUXd1PTdBSmdyP0p3ZzMqc3pKVGtMXSZJMm5FZiN+REdkKjcqLFUsI0ZidCEoV1hxdV0+aStOQkYqdVltPGhYcExGd1hjd0lpTn4xYChvT0A3KmxYZTpMdUkqSFEoTkJAKFQoWUduMFFufEJsYWhMcHVoWHAl'@;
put 'ZmBsRUJlXyt+SWZARk1+eTtCU3VBP01NO2gxZHw9WDJDb1dCXkRHdmp4V3FJTWljWiRYUWEreDA5eStRYkx7Y313NW86IVcvYDlRMiU4UHUoTjRjdXB6M3ljQzF+ZEo/JH1GSF50KF9ueDVjZjgxXn1XJVpSQ0Vrazh9IXNWczQ4ZFc1W0RjfC5vVUBsUz1CQGpPaUlOKFtMN0pYK2xyaFZFdld8'@;
put 'SyxnVXo2MUQ9a2pgfmBlT3RSN3UhY0AqWm5DJEc/RVRgW1E7PTphMmlbRGZjMkZvW1RTPzhuMnBMJEdqXjZ9azAmLkpwPVl4Py5GR35BdEVVeipPbUUlOllCJDNkJH5XN2klVE4hfDI3VD9PQnt+KSNYQ1Jme35KaWR2Km4/fipINEwlKG5+ZGFjZXd+TDgoPVdHSW9gQ3svS3gxRWFQTjVjW3h6'@;
put 'clEvWF5vbjN8VjMoR2IsWFtWfjN9XnlkODBLLHIxfnpvQixJSkIjfGtjTXYqdVB4WC49Q2dLXSk9fUpPcERPelU8VltzImJfQERpKTp0Pm1Zczs1dC41Rlh1QzdNT0FLRWRGaCNIVFcjTSM7VCs2XVFpOnl3Sz40LnNKVk8pZk10TiVgO3YrUWd5QUsjd3wsdFMhbGNHOldfXlFKeGglRVIqJihK'@;
put 'WWR0VU9rfko3MClINmJFRkVwSU8peFl9QGdOSCRuUHxITjFpTlElU21UKylqOXcvYWBhNEZubilOayskVGxuOkxWMiJbUSgjbTc/fj9jXUtXRVloVkhPIzJaQ3M0Pn5ZeihDdU1ocCNuTXY7fGxGSktXdm1dZzQqbX1NSFB5KnEpTytCUUhgK3l5aVNIRyFIaERaTlU4bmkiL0NZL1goaTQ6Yj1J'@;
put 'b2cjWGxbU1MwVztKS1hpZ2dnVjA5dXBudXZNS3xxQTxEMVp1MDd5JDN1QUhhOUpjU3lhfGJ8PCwpKjB3ZkhCLzwkY29mLC4qSSpYVl8+LlFxQmJLc2Frb05sfnZPekxacU1SdCMuUWlDP3BML14vcHBaWlErYSJuTyIiRm5WJS9dR0YwPnFGZjR2UkN5T182UUQ/VGlaZ3t9V3NuTyRzSiFPRkJO'@;
put 'Pl5DNzNldjpfKTk1RTNUNUUwTX0ycSV9MihYMkRjNyg5SndEVjR6QVUqQ2ZoTE9AP25MbHpnS0hCTktJKktAZWlUaVhJTF1WIzlCTXNVL3E6WFk9SlZfMCtnZ249dXg5XSg1cnBbYmAyVDNpVWBpKVZmRF9gQSk5c3ZOOUYzMzFGcV8rbjJXQkJVdzRiaCsjP3Q0ejhZU3ooJmU/OD0mR1Q7LC9A'@;
put 'eDFsTGMmPUcoOEVjYnYjX2cvKGF5eWF1JG5OJXkxPHhlWFJ5LnlUeGlBbWdqZV0icypNRF00NShRM29mUWAqKGR4WiNASWkoYXk9SyMqbV9UdEdCdk5NUl1OaUtxPlE3fHZJdHNMJE5iWGlxYVY4cjAob0Q0RihxPkttQytfemM1STBPQjlDRXo7P3ovRjVwZ2IyQHZ0W0pIamQ1K3FpcUB7NihE'@;
put 'W0B4fXlldXBgWVNQLEBtc1VCLzp2anF8ZjApI2gvdz9WRGY7Xy9uPENqRTgoYkclRVEzdWFbZz1obSsmNS9Ee0RyL0EmPDNVKyFaIXttd3ZqNSNtPUxxaWEkXiI7OHxidnhbY2k3WzlKekslVXIrKjM2RF5bMUxHIWBzOjZIPnFfV3x7SkJBRkcwSC9AKUUuVGxaalF6PD9tLHdlOUN6YTdqTyZD'@;
put 'Y1VnK0pPbWJldiUiJDg0TW1tQHohWjY9VDdqKCQkMz9gPkdGN0djd21WbFlPXT0iR2g1Q19MI157TmR9UmNoMld6eEBsTDBaKmMuLlFfNVluP3s0NWtoSVtGQDJ+Y31KPko8dkk5PDcraVJ5Llp6YmI8PXk8RVNDZT9vNXRGV0lmQiokMyMrT0JLMjRSKE9NM19yMlddX3pEYXgqUkJCMDlFVnJV'@;
put 'dHR0OkRQTnAjOVUqTFJyY25Bd3tUMklDdF5ScXR9RXxLWXFgeWRKJUN5VUlJcyZLVTVnYFRqTDY+bVhPQU5aSV5hKEp3NGdKeVheYGY8cnJ4Ui5ka0B2fnkyVChSVSNNSWcrPzNHaGFrJTVyOXQ/R3F6NF0yLCRGfF9rLjI0KilbVlk9TnouZGxYV0ZAKCR9NTNnPWBZRGY0Zz9ZR1Z4eHxOK2pX'@;
put 'Sjsqcn5IciU7JD0+KmZJOzErNFtlQCN1RkoiQiRxUntRUWs1TGlLPlhIbFt6IXlRaUVNWW1zV2s3cHhuMktEQjdqaD1lU1ArTk13RGNCP0RfM3xMRDcvYkBKPmAmSzx4OnxeTmp1bFZ8aVlXbUI9Lls6I0ZbWDBHcWJOYkIqZUJvTHQ1cnViJSlGalE9RzJ4LDtjVVcoZ1RiXiIoU1MhRDhBMjMp'@;
put 'QXwoPVdqcnpuW0tBazIpTVAwLHxPbU9OMk4/W2wjekR5YmxCKGhnVDNkdSE5KSowI0RPfiojUXtIKD8sb205cTcwV2loTEJPaEhOdV08TCheJSU9SXslYEpBY2tRQCZTUEs/VClBXjxFQXYyOTJ3dUBpMlhAPlUhTVNuUittWFV1cU1UPCF2dmNBKzBrRjddX2d+W1FPMj43eVA/eHB0bDM9Zzdw'@;
put 'cmNoeFdeOHFUUl4+QEo4S30uIVheVDNUc0VWfTpDV1JSUjBBVjMqPDN2R3ZldzkrK2EsaXpOdlFyPzpiVFRXSzhkPkt7eFkufld1UzlnK0w6OUN5aktYQ3Z1SkNaY1JXOjdIJXl1cHdTfGdaTUpNIXdkeG5HL3QqaWtqYW8/dnUpImdLa2xba3UvQDtkWnFnPSRrLnNYLjhNeDdXSi96WER5bmhT'@;
put 'e1tRJnZ3Qn5XSFZ4RlUmSTc0dzkiJFB8K2IsfF52Y11feXw5TU1XfFdOX3hqIz0pYTJ0K3ZUOkxFXVFMU3oxeXFRY0opU05MTWs4I3Z9I0V1Vl9NYzFbdyFYKDdWYHFLS2deKjRaL1RFWTovQE8kSWN7KWdWfFBXKSgiIik1YHxEOyY6bz0qaSosZjJ6e2siPXdFVz5mcyF1VEU8ekJ1fVskb20h'@;
put 'TD51Y3c9Y0wiWyYpZnBlImo5VSVtTnh5I3Ijd3x5NDwqeDxxSXdkaGxnOSg6bFpMQDFlYDtqa3pZSXdBW2BBTnNzZ14mKXdCMG9XWTppJG1RaSwoLHs8aTMxcD12RT5GN0NTS0xbZn1sfkszXnkqKygxXlI2SVAoN3V8Mk9vWnMjUkBUSl0lVGR2KTx7dGd4VnMoIWNzdElFeWAxR25qTiJ5KUJa'@;
put 'IShYbXhyVHo0I3FoWmBAdClgV2FHWnhTM25zQDRddnh2WiI7a3xGcmJiPSJLUX46VDR9ZCoxP1lgTSx5WHJJc3lvRHolL1t6X0EhQ2clWGJhOGFmelttTE9aPyR6WUJaeStfSm5CV1E/cFgvdEdZJGkmOWpDPGJYKUJ0N2NlfFBNfFEqdl5IWVZwQmBFPkxDfnpYJiQ1UFd6c3ZEYTApcXQ4OFln'@;
put 'dUMzNXAuJXJ0OGE/bTp1cG9jUlMyM0NKeXsoZ0N5Yi5yUE8rPTxyJkNTRn1XPHh9IltBR0NrJUJPUVQ5OzB2NEdoNWthcjoxQF5fV21dO2pGalk9ZXtsczZSLHxzK05TaTNVZFBYRyJOaClzdihNTmdYRzJ3QSJ9Q01nbzRlaixRaig2anc9KGNVOEV7fFQ8Q10pWHxxbUk+WEB7WXY3blBOJkZP'@;
put 'TGA5cD5TTjxxYjQvVktXWlp6PSpyTnh0Q2NiOk0jTHNKRkIiXmRsKW9dX3A+bilROjpYWUhwRlhHTD9LejssKUJvSWpVKzEvQ19GezNqSyVnTG1hK0ghSlU0R0pGQktMREoxPUh5Xy4vUFc2TSlpR3xGRVhLey9ILEUqWEg0RkpaTXxgQmIoY2skVS81YUNMTW48JW9MZitLJFRmRGlIdlJQV2co'@;
put 'QHQrV0g+S08obzU0bkIjTmZ3dCtuNkpDW0YkbXJpYy4yWH4yNkN5RntUbzJFJjBuLClJTkpWY24jLGUmaCNkLzZYXWQkN29Ne0dNTXtAR1NGImViZG9LV1VpP3tHaH0+T0BQRV1mY3N7cjE9TyNrQ1JLVXdtW0FEOFVjNHtSYkVZZEVfc1BTb0ZgJDVmLjtTP1h6WCIyeSVYXnNHJTVFb0l0fSVY'@;
put 'ejlfNFUqLlFmQFY1QzlxYXR0dCM4aitjZ0ZGO3xXQ3tKaWVtXyFfWHJ0RH1DWihgazVUKkNdJTdQVzBPRDQmd3Q5TEB6eUIiVC8xTndwInJTSEw5d3syPTV1XT1HN1ghYVlmJk5iNCtnfl9MVlhxbit4TS55VjdsbjIzL3gxOSkwfnAjVmkqXXpHT05EZX09fip4K18lY21LXUg0T3xicGNZfEsh'@;
put 'Il1gIktGaWZwSWgsUlIvLmdXQT80aXxlKDB+RlBLYiwyYmZNTytpNy4iaVVPdCpeeVd0JV5baXs+bjUuRXRdN2ouZEgzRmhCZHFtSD1fS2A1KSUiSERPVCF0ME1dUWc5Z1piW0MpXnd1JEdmWkN3dURtbEJmZXcpdXowYStxVCM3eUZxSTZtc0tYZ2wodGFgSWdFNkBuPllOQnROanNpUnlNZTVW'@;
put 'WiRQV2xbQyp3QUlYd2lFRU1pNDR5alZMPzU9PUg8QCVaYU5qMUF6YkpiPGBNUFNFYkxvOkl+KjYkZjl5cS9LNmU+OyFqW3MxWWE4RSUvfU83RSF0XSpVMzZrIXBdLCZaS2V6MUNLPDl4aHEycWMmJGVzeU1eR3JPRjZlYT9RcHkmK15pVyNhJDYrPVsmSHxHMmxWd0tSIkYrd3IkPn5WI1RTcVNx'@;
put 'VCY9VjRSV0l6ImNQPVFXSUI+TD5vPi5QOT88XzVzaFRhMXx6d0tIRnFPcVhmU3BwcEs2WlhndFR6VCkufm1XejBnRyViP0coe2l2UVNyfV92a2JNZDgwPTAhfm1fY3NtcmlLcVhHazhFLkcsdkB2M187PSt2e1YuVV81JSh3e11EMCJ+O31RYDslIyw3MEssO0AleTpEKTthSS9sOEheI2NnXUBp'@;
put 'PTd9QUZLViI6KzdRJWolY2dEUk1CYnNiX0E/RWBodVp1WisiP0Ngam5lPV1TSjkmTUQrJVB9eHlbImBufHJnMHZQK3NrbFZ3NlpdYn5jQks/UHsuZ0krViMqTGR9YSZLK3grcFN+ZloiQSVROUsjKzsyfmZrJnJiJi85NV1qVHtVL0kxayZRbmlUPDl9L31YUXpycVdAS0hBam5+JChyVzluaF1O'@;
put 'UGV9TXNHe148X1d5bmh2NSljfU03NV9bSmgwNXNWSEZxTypXcmlrOFlnaU9HSSN3dypOMFlnOU5HSUFkcz1IalJSe0k4eH57OGdzUTc1QHBxfEEhWHpPQTx4V1BYU2JKPl4/Yj1QZj17P2shd009USxgWHNpRlAoMz5SbDJTNT8mbUE0b3dKIT9HWTQ2ayoqbitjRXxUP0c6bkVhYT8oTkF1YmVn'@;
put 'WXI9NT8oSnI9aSkmbS5ufS90JHx5ej9vJElwWzRxMzpuI0xOVVQpMClNPVlBKz5oSnBSV1heQjJ5IVJIQkswP2BQKzskfERIaTBITSxuQ29HZy5XejBnNiNnfDxMYGY9OCVFPW9MZ3tmMThybUxtbCNrbV53VyRjT3tXdEkqRmZMIiZSOlszc0AxTmJSKENPXlN5cS9US1lMUUBaRnFuR10pbSVs'@;
put 'UiFCQVk0ZmxhQ0Asc0VKd3BJeSJENjNzcndlbnIzdnchJEguPnAmXnJbKT4mKW1WZz1pW18lO3s8cGNtemRxeXN5fXl+fX1UOWksdlJtTS4hSkoiVzxKSUpgQHc5Q24jI0R5K0xxKj1VQXs2VzZCXSxEc3F+SUt6ak5fT0d+TUUjVEY1anolMzNeZXpvfWp1L3QyUk8mV3tgQi5Vflo0SDM2ZkJB'@;
put 'ZWZ+VzIoQX5CbksrVmhZfTJZTEx5TU1+b0hRZ2UpZC9CWmNVSCY3M0Q4NGB4SVJ2R1oyRitPZVIiPHd1MSZpN0hqIT1QKW9bRDVfUll7Yk96Lk9QNSV5JmksYTVCaDQ/Xn54b30icC9JeWMoTko1PG95YyYkNzRCRlZRK35NNTpxKTZ+MkBucipjSD5uaip+MkE9eDt1VzI4cm0rbGIpKG1MZ3w8'@;
put 'emxxbSZSOmlkO2dDKU49PyhKVCZfPH1tRlNdPXg7VyRYPTI4LCtiZX04O3lPZ3w8bkolRWxHaSFAU3orMGJhb3M/V3Z4Oj19I3ckR1Qic1dwfSYzS250YXhiO012en5DY1ZRMGVMdjc/byZLTHZ9OUQ6clpVRjooYi91Q0dKN1pNWHduSEx5LzpGbGRpenFpXkpmPVgwOFR1TDgkQ1F8flh+WENx'@;
put 'T2JVMkoqYlcwP0VWPztoNWAmODBAU3VwL05KOCl4SVIzKj4/W194dX5ESXMoTnchVCxfJTYqfmxZcihCdyMkfHwmWFt+L1hpbj9gMWUqfnp1JE1PJVdHbG4hQ18+ZnxAfnJtaW5rfVBnfHN6NCFUX3xERVt+MFdpbi5gVVspfkpzKT50WzltJH1tRD5+I1ZpbnM/XkUkfWA1cmpUM0h3c3ZQVjhp'@;
put 'NzMpTD1SZmdTTmY9MmheRT9PbTJIM0ElVkVDb3NPdklYQntRYj9STVhxLD5KInk0fkl6dGd4eVpiOS88UFZCUnJPV1QiaGpQMlphbyw0WkVuSVtuc09mSXxqNCR6ZltCfDVoaEZCZ34/dzBAdlhtdllMTlU3X0cwMU4yOiEpRXIpPl0pPTJ0K0B+UFZpbm8/X3gjfX09NF5CIzBAQXUySWJaOkBF'@;
put 'TShNTzFTTVEmLjU8diVfVGs3a29bN1Jsdnorfn4ySmIuVzBdRGFTSi9dY21UZkomfVYlV2guSVFrNX5NTjF5UGV9S1swe2M1UCMsSTRRW0hkJkpPayNGdTd6RjFvdTd6RkkjXXM2MGRhYj4veH19VT00RUNiT3heOklJQSJlMj04Y1RCI2oiUmFsXV52aVRxdnEhNTc0Nz4jLmAyMUN0MjxuOyEy'@;
put 'KlNEa3d4Xn1MLkB+dFAjM0kqX1ltKTxPa2VvU34rLlRNLD91SVIuYz51fElLOCxNTzEhPFEmJlsrLzVKXVN7cy8rPjVOZFcyOXNVZ2FvcXRYdkkxXj4reGZPVXVePmQ8NDE/Lm9bQjJCOEI7VFMzYFBIS25sdGVlVltJTWt1LlpzcGpJM0k6ZTFVJjM3KU0sLHUiSUQlJmBfWWdwTSwodVhSNm0y'@;
put 'MmVHYUo6eFtDQSJ5Y3VgPnFyNTFaL15pKzlfVXMjRlk8PGtHLldXaXlnPkx2VjcsSkB8dTU8PnZMVTJ+SyJGcFt9X1V0ZCsoK3hga1lYNUYrQyUsfEMzUVJqVjQvPVtgc1JbZCsocSJzNnwiNyMzdjVxVSwvR1smYE9OcU8qRyUoZVc2am5WVkdvXTIxPy5tUiskcy9GWiIxbClNNkV5aFZVRmtF'@;
put 'WDBhREdTRW93P2Yub1tIYT8ubmtRWCIxZUoqd0oub1slb30sdHk+Ljo1dWBfWXU+fWM6TU0uXTZPSkZYelFePzVrRUFYJjBFdVMqPzpoYUMrTVcqOEhORy9PPmlwbkddaCMyMV9FTi9Ad3ZaSklSXWBjSGwlajBNKD54WTtacHdEWFJdPX5JSyk+KSlmZ2B9KS9gc08zIVQ8fF8lIX5NVHIoZ3Yh'@;
put 'VCFfSEkpfkhTcihwLj0yZnxtcj9zZmFfUyQwRF5yZ1J9MTBoTTRHS3pfSXYhVTZHOV1uJmxPIVghb3tfSSxlaXYmXXQpTzx8dDJha0YlZXskPSMlOGJFLGY6REg8bFtnZSwoNUIvfn0jZnN+JW03ZFdXOF9benNUXjdNe3w6dFpMUXZJVkJ+emNlfkwhe0gvYEl0Un4jSF5LZTN2KEBOd3xoMCh+'@;
put 'RjpGNzhgUnFyTEdGWEwjJFlASTFUfDZIZX5kd28oZElobk12ZmdxP0hJanw3MFdXKXBrJTE/ITslfWVhSjRKbStvTy93OXJ8YFMjcyQxUXFUXSs7On1VcmgoQXhRcXF+cXBmX3s9I1FFfmI1UChGe35+ZTApaGs/Tkc2fjF8ZyhMLG1JfXozWS59Ryo5fWtHVygoOmVXc0EvdjIvO012P2I8MXNV'@;
put 'OlE5enNASWooR09ScUp9QHQwfFApIn1ndCx+LCR8fnJpYH5LYH5+XXEiczVWdFdbRl1YP0Q8Lzp7NHg0eW9hPC9GdF5rQ0A2SGkxN01xKzlHU3s9dSg+OXEicy58VXhyflsoPVFwNzNZXXM0N2VXPz5mbik2WSpdfEI2aH47dTdUfmwxcj5CUFEsRC5WejNraEI/PWVqfFk1c35yPCFoJE1SfF1D'@;
put 'TGNbdEJhcX07MFRXcl1mJGxzYFpURUZCSiZdK3VEXXNuNDJyanUpaGd+PkRAfjBWPFFWSFV4dV1UPHV+a0E8c01nQkhUQC5sPFE+LFVCPz9NQl1gQUI1cy95UyghYmB+OEx1KF9AbzF7fXc/IXN4Z2xJYndCYUdAYjxWfCpNaCh4PCZ8Nn0xKGlzcG5ncyp5Nj5XfGNfNEgic090KWhSP3s7anxE'@;
put 'WWp+OkkzaF1PRU9iOjEhcV94K2soZWAoOGRzOEZjcyZ8REU5PyVDYX5QZH1+JU11KEpbbkl9fXZpI3NQbWxJUXhCYTB9OkhkczN4Zm4/fV1wMj5rX2NfSyVISXgqb0Y2fUhDZ34peCJ+fkR1KCt7MFpUfC41a3NaLlE0d2NkK34oTE06fXE1bDFYKVVCS3shLGQoI3kzPlBjUXxAMiloWWByOHF+'@;
put 'aEsjaE5WbUlZei9pe3NCRDV5SHVZKk9+WjhsMWQpVUIyfUhDaHNAaFMoVGMycmt2KWg8fj0rPX43d21JajpiTVZgS15sV1QmNHkjdVkqXnNsQyUsM2BkIi59XyE2PlZ8MXJjTS8mZltvMX5+KlN+fm41M1kyfUUqbHNnRFI0fSlPajRgbHElcz9FJSxtPzNBNHxlTiE+UmpRfFl9cy9wc3NjaCgz'@;
put 'M0ljL1kkdEkuKk9tfCwpVUxzdTRsPX47IShoOytiOClfNDFWTDQrJGRwc30+RE9Qe0p5bF8qdSl9KXNuKCszUWRWfWxnOzk1ZTwyYUMyciFgYHtMTGRYNzU0QmlzXmdibWI5dl5OIm5OX1YpRl9oOFlCYFZXP01kPFpefVdMQmY/PEgvU2dBZ009VlguMkkxWGd3an4/Uyl9JF43NjZDdEJxbj5J'@;
put 'Nl1NbGhWOXtUK19SKlE5Y3J0dTRkQlVsKlJkbV5waDd3ejUqI0AqeXFZa2AodGo8MVt7REBUUlg7LHNFKzdoeC9tdEJIKUhmcF9aUkdgPWtnKUBUJmdWfmNBXWp2ejxXQnQ1VisqSUpxOTQuLzpsUl8vLzF9OyZ0U0djan11U0puRE1dbmJtdWVKPElSMiUiUkZnLjhNbnJ2TX0yaHRwRHdKSFhd'@;
put 'RlRIeTxKTG5uXUl4NHkqX1hLQ0FrbEcsTCI5R1F4aXpQakVDNlRPMEZFc1hGPUlkTTxFJn1ROnNQZTJhfHxFQys+YWtrUEMhbDZMUjUyRDVCRVhIRV91RHptOzlNV0NxL1lSWlo3Vnx9XjE/Ll1fNlBFNEw4UEcxcUQ6NWkocjZFVjw4Vn00dX5rVzVmdE5XR0U1YH5DOjtWandvc2g1WHg8UTla'@;
put 'aVU1fWVHXSlsP3ZRSGA2Tkpsa044Lj99cUxAVkB0elYhQlU6Zn5kaXdbeiFAaiRDZkVnX35sW3x6MF4xQiJvZ3VHW0xzYztPIklBMzcrKShoSU5SckJmRCp5VyU/dTpHc1k3UGBTeD17REFHb1tXdEo0KioqYGtSfFJ1KFNeOz9YfElNWm1vTX5ZRDAjKUNHPT57SlsqcGAvWU45WE8vdD9qdFtN'@;
put 'dHJJUEdEaTFGaVRidEU0bzF1Ryh+MnosNTp1SF07Q2pQISNQJCkzWjxhRlZ+UjVCLyQhKEg1YyYxRi9VRClvYTRXeGVPYnhkR2R0fiZUJGZsMzMpfUBpezNDSFhyVStWb0NIWTQzLipISXdmMkBfPHQqXz5SRWM5U3pkKX0wNF5WYDp8TzB6Sk5WTE5jIyFxQDh3W1ZhMVE/PHcxaFBwW0BiRFpM'@;
put 'aHRqdmBSTVhVRlM3VUVMND1DR1tKUSw/QDFvfG4jL2dGdk0wY19KQipgRlltU34uNS87RmhBZSp1al0sKitiVl1oPGhUfGA1O1ExLmxCWXtHSkJGWVIkR3F8N1ldSTQuXT92amBqeXUlfVE9RzZpI350ZUxFLEx8NSRHJXxVYmojfkBNfS5TUTRZYGB6ZCY+Nll7cjdmY013aXYqfkNEKmZ9RFgj'@;
put 'OlcyaX5hLy9WJXVyfHxiJmJJY0hiNjwka0l3REtAdzlHJitJPS9WIzp4VnF8djZzc2haR01LYk02aj9KIVFoYlA+X0dOdnQpUCNHeChGXiExVHVRfnJQK0FVOVthRFVYPnM/REBBb3JqQGF3ZmJYPUNwSXErLGVBcUNqIyglcngzZyV8VTtpOklXdUVbUCtIXygyWzEiQmpCPTArLzBKUEdZUj9+'@;
put 'aUhPc3JCUUFZTFQzeDZiU2FDIV86djZTV1NvTGBYQXdCIipUK29xKl13QiI6Pndbd2Y9U2Q6Qi8rbExnNH5Ua3B2KkFqRGFIMiheJDRwYlB8XzFRQlgqUDZOYFJ2XnxSMG5rVz1Se1FSYEp3R3d6UFlHL30yWEE0ZGcmUXV4Z190VkFDKm86cmI/LCRuYkVPXXRgOC9aUUJyInh3QiVee2Y6YUxO'@;
put 'SkguJnNUWzQxbXtjeCxSSERTblRIfWtkMEl0O1IzLyxgRGlrRUcsZUBIST98Nkd9KShGT2NWfWl0X3JXNFhSZ1krdXp+UCIiLlQ6bjdkTGApdURifGNIVkYrJCJMWH1eV0NXa0YyRV9YKkxjc0IyQS9HQSRNTyIrRmtJcjRPaTFOLEh5KG5FTDpvSShYeSlLRSxqbHN5V145MWk8T3BhfGVmQmVx'@;
put 'JD11WXVpVGFifGt4SVdGdTdMRkVvKzV9UFBacjhyaDNmLzVVNClUVylxL2Q+MFIvX0VLQ35ub0VOZUs1ZEF8cikyfTRpdGV1YShySTpJWCxOdSpSVSJ6WHBgIiNzY0pad0JkQkw6T1cpbyRbX0tCKUBIbVd4Y3pFM2tUSFEhMUBJMSt8MlNYIW91Pkc6fWBoNnJOTGVsUE05SSk+YV0/LmtFUmpf'@;
put 'MlMxdUQieyJOO2JsK35PUH5wTEUvUil+YGtjS204VG9Scno3IXY8RU1IQ3ducVlpQ2FZdW9qJXUuKiolWyoqc3BqTXFaRDk3S2Y0JVQiQ0ZYSC9WV11LNWZ4SiYsR3tsUDokaHQwRCJMMEFgVkYiJUkqWTY4cFArdDx9QzFFWDhNNFhBNFYiInxCL199RmMkZjd6RkRedGNIdVtxNF0hIXlydT5E'@;
put 'LyoiMy8lfFVtI1IoZU9YU3FRdHhYY3JfSUZhKWdGNG86bEhGNCoxWE88LEdSd3tgalRsakhCU3UrKERDVlFnREUifkFZdllrR3U2WyIscmBOa2MlV0l3dnVqUCNeQFFacmZzeEEkOX1xNmFTRixDJDd5bXg6SXQrR2RyWU9BOXJ+MytjYEtPRDU+STdLQjR8Jk9TaVVFNUZsP1V4Y09bVztBISIl'@;
put 'azZTZG1NdippektzRUc3aCpGKzpDYk5AQ2tFaG49MFY+Z0plKShCOih+Q0xOP1ZadWY8e0UvQiF9WU09ViF2X2d5SyRNcH5zXzxWfnlgW1s0cHw0PmEyb1Z+ZWU7Wn44WmQwdzw9VnhaPWJPayVZVTVrSS54LG1mZS8xRCEmIjB3UlBfSStoVSlCU1dNWyhzVW9fb3gsclEiMnFgLGp+ImMhKlBX'@;
put 'ekVZdkNTbF5BTkFbKVQrTzpXPmhgUnhpSUlnU0tEdld0a2NHUko0azlrXiluNy9vSC5rQEczKn1wRTxjSnR+LGVCPDRoeFMzOkIoWGMjcj8qT1k/MixHQ29oIUdtcztaalV0QmZHbkJBODJ5JmF7cjB3dzQrbkNnaG40SU0yX0kyT0s3Q2A/QSh8O1RPWDVwUyIlc1cvfTNFRGN2TjVqL0s0VEBY'@;
put 'eiFjQEdKdFBIbVt+QGFiPERifHtFYGpaTkJZbk5gUzFCZCN8KEZYOz9Xam4qRWZQenB6NClkRkl0RUYiQ0BDQSs+cWxPblgzTCthVS8yZXVVVjAiOW1OaSJILEt1YXZYQl1VVnhdfWcqcm4hUkcwWSM0OEBpenAsP0YyTDQmdEVmJEdpWW5+UWMjTWtFcCZmKUs8OGZeP3hDQU1jLDxvPll9LnV1'@;
put 'XnYqWyloJFM+Y0tGNSg+dl0xKUZQU3w4TTJvSUpTNy88fVFvIjNlTm5CXSh2MT5zPEE2PDM6TFAydD8sWFlufF5MMVtQInY1byhGfTNtQ092RztDY3NkUl8zNUA5fUhMJDhnKC5vKm9uRWUyZmhWeEVofj9GcV0vKmdoWit+YzR+LnNEYT9uI3prfSljW09FeklmMFFxREg2PDFWSFJpTHRfT0RN'@;
put 'Y182VkQhP2FWeG8zR1BOWyZgKjpoamFATUVVKng/alc/M3YkQH1RZ3Ngcj92ImFNaTR5VzVJRiFQQkRXWHw+e3pmVGt8KUkvKCNpNkNvYHRPKywjaiwycV9dUVU8dVpfWWI6YkxTS0guLktIQl1yLCxVUk8sX2sjZ3h3SVljTCFDdChQWCpmfXdmVmJQNFh7Mz9BLm0lQkJvOX55Kzs4US8iYTRk'@;
put 'YTFmZ3Zbcn0kLkl7QHo/fW5MI3JjbUdta2Q/LF5FMkA6O2VhX1NPQmhXVkV0a1ZSVFE1RkV0NX19PkM0Qll6fHxMMik1fU11IjNuUz5rfn49K0dEbkQ1L0xUcC5WQnFFcTEkeDAzbGUkRzg3ankmfTU/RD0ueSx0Pmg1bmFDeUE9Q2sleS5bI016fH0jWX5nR2t2THQ1VVVHWFl8MlNLYU1iXnY5'@;
put 'fiFIeUByI3Z8O3ZFaSJWPiw+cXMha35ZREUxNHR3UVN1TnMrQWdpOFklbGZXMltza2R0W1BydmMhMWh0UCpvKShzSFJsWSFUayNwajQiWllHYmY5Xz9JRDNqVV98PUV9QD1tIX1tQ0pgX3BJYXRVUkxLSiEkdGk1TyF8NHYlKlo2Y3xxUGZna0gzIUQ9b2hXOmRgdmd+fiU/XlVWPWoiQHxLdTpw'@;
put 'WmRHKWY9fXIjUjBzSD9EVSpaeEB3PTtRbFc8KyFUIXNeNDtXdnhgaEQzSkozK0FXenlqfTVlRmpZfCo+e0MmPG5qIV1zfGokUEBBSXxDQ3ksXyptM3ldekRVUUdUWEFFbnU6RCN1VGtCbC8/VHxkbjM6I20yZGhnSn5wWG9gOkR2K1g0aS9deTZqQVY5MEsvbmc7fT14Yis/K3c9On0hT2NuSjAm'@;
put 'fnlYKXMoNEBXPTtMVWdNXi5NUl94dSs4JC5PbV8+STc2MT0sZW0wcEJmbnBCVChoY29MZWZdbShNVyhkYytNRTFtTjtJRzpva2R3XzE/SCVZYmhhZ0QuX21iYmptaURpNlNgdXZTV0xaQSJmTXRNIm90VlNTaCVwPylYTjFWJUx4OFUmO1hNMz8wR0srQXpFImRgTm9YT29fPF1IdTRIJWpUZlV3'@;
put 'OCpNO3RJLiQwc3cpT0A/aip0R3VXIW5CckxLfmtheit3PXpzbSZiTmxaZWNANWleUERLTzElSkZuL2J2WDlFJSVFKFhsP2J2UFFBd0VjRVVLdERVTEdoNCNARVVLQkRmRTBOL2J2aCMwfD9HOVB6bi5CdFV7RUtpIT4xWyl+XiwoX2NIeXNDdTtEdFoxRnA0fXZMfVhrTUxEOERVOXM0c2Ercl0q'@;
put 'bXtjXilzQ3NZYitiXVhRUEw9Pnc9ZFd9JkUlaVc0JkUlTFVkLkMzaW0weVY6QzMsfW17eXlkeUUld3xqOklMSktIb24/RHRHYko0d0YmW1JXel1bJEtbdX1pPDd3Uld3YUhvQWAqNlBAfD9BRjR9UDt5eTR4RSUuKFV2fnkiSyE0MUVpUjs/dWJZKHZ5Ilc2fCFhLnkuZENzSklIb1tfdXxgRn1G'@;
put 'XUY+KVImMWVRb2J2Z1NxIXl5O3dEVW98emFJTEtISG87X1hrUih+LjZuL19NMUxMfT1CS3VzNVphK11bdWJuZ2NXKFsiPyk5bXZVPCpbJk54cFtGS31edVpbN0hwUG9OS3piaiFdNFRkbDgkaHptM1hQNkRvPXc9UUxZPX5+cDVGT0F+PUwkLm9bK18jZ1t+YUdMYyxfQGRbfktHTGMrX0difFhN'@;
put 'L3t8JFhYYixCdFVAMmBJOVRYIVVUaEEyRSVrP2A6UFt+ODR6azR+Um1NL1N+eENyV0xPMnVYcj5mTXlwdll2OW0qIWxGSV5kMDU8PEtMMV8mW08yW118KX5YV00vW3xZYGBzfnZHN2p8Pl4mRnNkI217TEdaSiNPdlBRNWRuTDhNWGpPSm4vYUNofktyVzRxP1pdZ34qcVc0JWBlXiF+N0tXNCRg'@;
put 'JD0hfj1VW0x4MVFnfU1NRFZqOV81ImtFVH1ZdjcqKH5VQm5obXVbfXBYWEJPYTghfSgjQDVfMz0hOGgwWXNmZjBhYlVxVyopYSNyfkFwVzQ4YGowQH5ARUxjI187OCF+V0pXNExTRXQmSzt8Uyw9fjoyOF9NcDU+IUNBUl5yUlFxV09bUl16Q2E6IVBIeFgxck5FcGRZYHFVZWxGRXJPTW1mZWx3'@;
put 'LEt6Tz5rdW1PUm0lWU5MNkFiV3VtKHtkbSF+XlNNL1J+aWZfc191RzdoN0hMWTZybWR8TTU9fnJETGMzXzpQIX5uR1c0Nkxwc313OHxZdkMkYWUzUDFfWFlAfntDTGMwX3x9OX5UU0xjYy80ci8xfV85TTxpWHVHN1t9bVRfc34sd2Q3fUJTX3NIQntfKGEuejhSb19xTllSIVJVNn53ZWxdVj5u'@;
put 'UHNneCgxMFtZfDpmPX5bQkxjdV9TMzl+ZVJwTChrbnYyakEiMzN7fFl2d3trYFIxbktRTiE4eFNtZmE6d2U4TyNJeEJMY3Nfe3I5fk9STGNyX2RtOX5+UU0vJnxHcmBzenQwW1Z8OHBeInJEZW03YCNfMmFtQC4/X2k5SlpEcVcvQGk/XTFTW1dLP3VTSnMyLm4yYD1fPkUkPT9+fTBGT1Z8JUs9'@;
put 'fj9II3xVaGNuPilRQ3FXOUA2ZiZ+fkFXNC9SJn52T21iYE9NMHprQH5+QENIOn5VIzBbP35OVSJzZn5iV2J2WnUib0hIJWoxNWdgXXJnYFNyL3BONHIzaz9lT0daXWk1KSp1P35kYF18c1c2fit6TGMlfkhrTS9BbFg0ZH1FcjF+a344eE0vKD4hQ3FSR1pNP1d2UElYTzYqQFBeWn5rT3NHX0xC'@;
put 'Im85RjdqS3FRO2l9MGo6clREPCpOJHo/MFNHWmd0SzV9c0B+W305eyYsbzF0VyJzYixBdCo+In4kcz4jKWhefmt+QWBScT5+JX1WZXkoYj85MkNUWk5ba34vSGZkflcsTGNgczxuek5OMn5+On0yek1+ZzEufV4wPX5QQHs3REF0KGlzMCsoNipaM3doTmZ8Kz9NLlZ1alE0en47eDprc1syRz9L'@;
put 'KyVPXXx3bkBzWzJsfCZScnZ6ay99Vyg7SmlPPy4mamhWXjAhfjY5emt6c0BKMVEoMltoKlR9Vmw9bXJSV2ArVz5KU0shbShiVT8/TCo3O0hpLEp7eWNuPno4PlI3TEg0SC9tcilAK3g5UVBOYlRDbjk5I1IoPzZXbytsOkM9fnxIL315djdUXnkxVGx+MVRTYGlIP35qOz56b2I+LmJJJDMzUXtz'@;
put 'OF1NSlQoVEM2fFVoclcjfVsicVd5fl44VzROfSFEWDRJYEI2e3NvXSpPXX4hOkNILH5FPz56KlVBImA0fnhkYntKV1QvX3htMT90IXVHZz1aWlFUTGM4Lj1HMmBQWV59aWw/c1dUZXpQW1h3L3wlOlYoc216W1BbKDxVV3NtVzQyYDFlZn5iLjhKMWBEQV59SilVV0QhbldCbSUsdTIwUk5bYkUv'@;
put 'fE8qKH5CIWRfQW0hJHUyOlBOWz5EL3x7dHF+fmhLTEI8cVdBVG1iWS45RzFgWHdxflo8Wlp3MkFOTltkR159dyFSNHgybE9efXUhYHMxdlpHKGBHQEs6JWt1fHVaK2NmWmU/Rk1HWllNOCl8fUViWUcrKGI/JU1HZkpvZz9WJkVFay8+NWhtTzUhfmkkV0t3LDBFSElmZyJ1eWd+W0lnVFRjZ0Yx'@;
put 'eDV6TzEpfVtqenAjN2VRJnErbHhvfCVpI3koaEZBflsoZldrLzk8PHxiZldbYypCfH5UPyNaXy9dUTxWKG10VXswXlEhYTxRdkdBfWEjRnhXS2oieEU5R1lOTURgKTlfIXksYG53I1lGKmd3P0spTnFNR1pJQTYpMFJycnZ+flt+YDdZPHlmPXEjVFF3aTkqX08rSWV6K0lQR3A+eVIuYSwvK2hl'@;
put 'PzV1NUp3OzNqYmBYME0sMCVuSmhWT0RRUiYzN3tyY2NNIlhyPzhCIyhFeTRlSmBfRi8xKFU5P3Yuc35RfnkzSmYkM2wpTTBJOjhsc0Fsc1JAI09BXWpmWWtQTFN0fGtba0hadVdmWVh+S0Z7b3pvMm90ej15R05qTyRSOF8rK0RiK2NMUmI/KEtsVTRrMSVXS2phNUl6W2cvaE8+NU5pU0Znfnw5'@;
put 'fF9mS1IxO1ZsVEcleWhSN3lAKXVmdFFbWHdhRHtELGcwWTc1UnV9Ql9aR0osPTVubj97elhFd0UodSImP0xVaHlGRzJYSyNUX1gzVkMrMmdQM2k/KlpnfTM7WltXUz5OZTM4LlgzcG9pRFNSfWdwViFKSj9GdlM7K3RYVktXNC5nZzI9PEB3Uzh6eWFvckEvOCkyZW5VUiVhMVUxKGJKOWhrNm83'@;
put 'fXZ3R2M2e2NtYTtCfEZ6b3ZHUDY9PF5sX20kMCNFM0cxfGF4LCFsaE1uQGh6ejB2UURZeSw+el5ZXnhIUENeZ0lIZF8haSEueXxnaGI5I3VLTEVoW3chJHEsODNUWD1aKD8mM2g5aEk9Wi5jJFNyQmhPJjNQJnw/TmUsXyVDK2xQIS4sbEMmciFVXkojKWlpPyJfUzgpckl8Omx1cXU3PHBuK3xt'@;
put 'W3BAXldNI0VfJWZyRkByPnFrI19HKDl7RkQ6KT5IRFkuJUojUlBGVFU9JCtlPCY4Rn5AXSg7ZEtwUG48U1FNPmF7czljamBpYzAwaFJwQlEmUT8rYCh4UElTfnVIZn04SHNndldyIlp4PkskamxZPThRbzhOKykqUVI0cEMmZnJ6XUo5SUtnTk4jRWA6WTgsbDIpYjYwRl9QNj16e3s2SkMrLjJw'@;
put 'OV5ZSVNIUTMlPG5rSS55Wm1OK0pNdilXP2EsayRzQElLITc2RzwyYTFlXWBdKW02ZWtQM003OFd6XnVFb0JoUUVuPDh9Jjgsakp+QF1zJG5mNjlfPT49TVQ4Mk8mdHsxalFyfjA8cHU5eT1dJTV8OF0wPk99KTthdlBEWVMheUVjbzQ3RD9aNi5RJGlPdSVibCNfaixfeUAoKTBHTjdSSGY3JTEq'@;
put 'JTgpRV0jMjlMP29lfnRyLCEhWk5tUXxCdztEMGoraHYlWnFYflJmbnFBbW57Lz95cEUjJGJuJUxDWyZgK0NoOXBGb3RIJWgvIVpsZ04qIXBvIWNTeSkuYUJOX0g1d35JQyJdRGY3aWRwJE1OR1o9aCF9Wl4pOiNNfmpkeU1LKyldfUJOP3QjWmAjcUZYPF1DZSMzTlUpJFNrWiJGI3pKb1kwKWd1'@;
put 'fGl5PmZDOls5czVkbEpmUTIkWm14eHo9bGBTIix7bUwwJXcvPkAuUmNbYitaYCNYVzB2N1crY3lQJD9HT1s+eldsRU1hTXk3V2JYMldXLzxbe0I9bmNFVXRIVXl5eHpEal16fih5eS40JT12eGA4Ykl4QmMoaTA/NXgydUU6Izc4V2FtPV95c3V4TjE6dlJFYHxQOnV4ekRqODF5OXZGIUJYTzlv'@;
put 'V1h0NDliKUY3RkZAR2F7L1ViY3ZePEZtcnQ6RmxoaEZMNntIWlRYcTJZK1pMOXZ5ZF50Kno4M0xyQT5PNCNlZV5OYHR4elVnU1RHWDZSOWxedGVVLkchP1cwdk91JWNiZEpCKllxR0I4LnQ8KD9tdTY0QE1uQ3p5MD1vd2hUMUpVN3c1T0NtWSN9dU91JW0lZT9OfTBIa2N3UXBCaVc2QEx2WUs3'@;
put 'VUNkIm8kNTYpWns0UkM1O2BZSTE6YFE2QHd3SDNiUE4wPzV5TH5JSzhWIUE7RipwNGxjUVd7Nm9DLzRRam1aYll6RWk/dzJgUWpIb219NG5MTmAwWSJveyllIyRRXXU9VDlfSHJvbXw7PCw1TWhsOTV8QDFMU1F6TigjYnh8N0kpbWhZMFgzUXdAelNHcEx7bWh0Yy9UYUo+QkcjPGxYditObHYo'@;
put 'Qk5CZ0VIPSpES016MHlJSjRdViFzbi9vbUIobmZsfjU5IithQlorWkVDZzJ5OTR5ZF49SnBoUG8/OEhKOyhQRFV0a08mWipXfFJTZV58JERLWjx5W31AdVVOPHQiWDBZIm9QalB2K0QyVyNkTCErfGw2KmM0WClGaXRVeyNaNkE3QyM0O2lRT2lOUW93PnosJVR7ZVFkbUhAaDVkOUpUWGhFTmcr'@;
put 'Qixkd090VWVHQ1RfbkdII3ozYl43eiIpZyo0fGMxLytlZVpYb3hbNlhXNnhUOz1HKy9GcUkheTowNilIRGBRcClAUXApM2hnTyZabFdFU1Q7JEFHUlBWYUIpSUBRZTdJI2RPdGcyeXNFL1M4OFVrN3lBaiZhS0N2aEwzV05SdGJPJlpWV2tTVDt8TGtOOShbOUZOMFdsUXh4U0g9SmVkcHpxc2lr'@;
put 'azghNUZtLjx5Nm1Ic11HMCwoOltkSk5wWUlDPFF6KVMlImQwUHc3eWMhXTE+PiFQL2N2KUNiaywvZkUzdnZeLGRFO0FPcDI2dmF6PXpOWGpodj8mLncuRiwhNTR9dUd6QERwQnpjcHpLcz92XzcoWCEqKCM1WGV1KVNkR3hOOkFFNn5bdlt4REUiOz5zUHZMWzo0XzI8NkZsTyFfMENlWmUzWGJQ'@;
put 'Qkg3Uz9eMGJQOHlDZCJvKW83KWRLKk56dH5sJksvamdsRWZ7WEdpfGB1T3RVOmNlP09GKDlEeVIqZDRhXV52T1dEWnsydU90VWNHZT9PRiozWlVrSGZgQDJ+eWxIUCIuIT9tT08hXyU7OzskWS5EcitLPHRNc0xyYnBKbWtwPTlfJTs4TVUyOVddMHVDYzcwTDAudCpzRTdTSWhyMmYmUyZwSiY8'@;
put 'OCNoeE91WzJhTXUlV1JNdjglRlQhN3UyUEdrSzM3flI6R0ldYUxNYTViT08hX208KFIiKFlObEF1MDdmN14+MjBaNWJzX2I/OyE7Q18+I0dEdX5GeDVUeGR6LG5XZVkwWDNjY2U/OyFjLCkxZXhwX1BXezg6dTJQL0Brel1HJEdlcVRtU3VxemhYdHR5OTFecnpscil7TCFiUm91Lkc4QVhYXzhe'@;
put 'YCN2S2QwWSJvVlNjI3VaMEYqaG9HUHk6ZDZTWmlNRkdrV2glWnVMPCkrZWxDcGhsS2lMRkZIREIyPWZRY0FKSyxYZVkwKWdjYylOcml9ZWFGLyszT0giN0xUVDhlfCh+UWJNdFVLaXc4V3lBd3c2XlgrL2NrMjZSUV5IT2whU0pCfSkkRXtIXkN7dUUpPDo1dH1NWkB3SnZpfFV8bnhjc3VhY3dh'@;
put 'RUxIUG40UHZ1RTojRXJSWmEya0AsaEVIRiJmMkU8VCs8Ty9baVJxQkUubFNmel1ZanZvMnw5e1V6bFFZU3EwRUQqUVdfOFlFM0MqLCZLR058e3wpO3ZeZF0qcU5gaWdBd2NxRHtuYGREc3ViM05ETUxIX31yYDZTaC9xVT5oLFRlSj9fcmkmaWNxOl1HWnM2cEg3TnZVRk5iWXNvfWRqYjZbL2Er'@;
put 'WU43XnUkeW8wTi9GNn5bUFpZdlphR219UyVjZlo0dXxQOjZ3UzdGMlFnKUlhey9meXNFejB+YEl3WXs2eXlWLHBeOkF1QUtue1pJey9hRjNJM2x9clAhS2wxaG83UWIjKGpeXnE8WWR5L2QpOyh0W19rTik1RlRuZGk2dy5kTzh5RG8yMHp0a0hhQXo6dlgjW0RLdUBkbHJqPUF0dGkwKkIkeTw8'@;
put 'ZHE0WXd1byN2T3UlMUxjZSRNbE4uPk15OGNgOGw0THpJIjdjNVJvZEg2MW42bF1hXjpGQj5yLklkZWZ2byNiY2xoSCpKaEpbS1UiKUlpcVNNYU15XXY5X35EanlpQUNDMlJzT31TI1NGMnNkWXVVJSk5NEQqX1JKMnVLaT9mWi9IT0FPV0A5eHdLTF1taEd1S3R3Yy8yIShaayNbTzUlY3YwSWkh'@;
put 'eTFOOjdeLCIwfFVBOnJvNENKRWlpJTp+KjwwYHR7fGZKbjxyaWh2blFAX152TEE+PDcoclNLRHtrRXd5dSg0alk/U1J4cWxIKXs+MyxHPFZGVSohZXw1aExYcTxmbSZsQmpUU3h1RUc7fmBTeT1bYTo2aiZ6elcmL3dRdj91Ti5JfHFebVtCYWl7UlNtNDohKXttQS5KbUxaKXgqMyNIVHA5RHg8'@;
put 'U0tQbzQ1bWxfKVBvOnVMdF5YSUF4PFEkL0ZacVVZK1pVXVZSImMoR2AvYEtkeDtmJXAxOjRZM0I7dmRmczM/I0RhbGcoWF83OFM1QXhRPmFDSzxMeEdHZ3QiWCkodXFAT3U1RnY/N2NwelNVOywrZSJ2aztCWkl0V3hTZ2Y1UFsrNkRIMUVYTyZaX0oua2s4KTUpfmBla3ZHKjI+Q3BQVGQuQm9E'@;
put 'TGl1bTRATSRucjN5OXYvQiJzSl9GYGsjXUlSdGx2TSNNRUVPTkJkIm9MWFl2LHdBfUIiLHFTTitoMig8KTs6enZTdnk/e1FaMFdLLEZlP1JNOHlCIjdAfFJ+QjokYGtBOEtGJlBARFYhSGF7L1B5MkV5SEUzfn5LUCQxPFBrKXFaX2RgbyxqRWYodjVjcHpicGlrazhZQCV+YGV3dlVBNTEiPixV'@;
put 'OXgrfT92VkE5ZitaUjtmMnk5Qno9fSloNDMxbnJDdCFjQ3FlNlhta2ZaTFBNYWo5SCplcUZ3fUBCIkVdOkY4Rkh6Xm45I3ZSRFE8I0I1QE1dWzEvK2VCd3F+bkk6LnBFYS9bTVRhPFRmXmhBM1tDYXsvNS54RXlIImB+fktQUzwuYjYhJFBIWDxUQ2V3UWJ2Wk8mWnJVRVNUO3x8QiJSdStZMUM8'@;
put 'KUJyZnYhZmM8eFdVZCtaLC82MXk5RnpBIllsQTBZWEN1WVV3QypALkk/V1oyd3V4eiYyYllJaEpNenxBdHduTGZLVSt1UU5+MHIueTYkOHdjcHoyb2lrazhaQCV+QDkyeDdXK1VoRmUvdCxwbz5ZOlpiWCtaaS5mMnk5Rno9fT9RU0c5TCJdNjpNZmYyXmghMD5jO0lZMCo9TXc5Xy5HXyxCIkw9'@;
put 'RkxoTDU6JmMmTGlSK0JqempXM0pzaSRHZHlpd1F7SSpkeGVPTWYuZEB8KWgmIzRMYlJodzwsNzpwW0IiYSxVdkoqTCZ2IXIwQzNGOyRZaV19RF5BfShVQ3RZUk1EPUtXJUw6JExicUkmSy50PkxfNEJ6bSZoI2VNR2x9UlV3Pzo7dCFkR2FEQH4qIUUuJDpCPXg2RiJsYzV2LzNnJHI4aXJ1Jlcp'@;
put 'cj5BR15SN1tgQ2tlZmhWVkpLMzRvamkpVUlHXWx1NDI0eWV4TGUyRCEkVD9YJnd5JjNZeVVhWS9OblQ4SVZDQE9FNj5lLi5wMU5pTDdTUXRVKmg8NHFjVnlnbSpEe2syKXhQIj59eng3KE05ZTVEJV9ga3tSPEJEMmswejcoTV1AdS8lVCtPL0IldG5YdV18ZV9MfTEse0Z2QWFnQkdTSU9NRUlI'@;
put 'VXtXPjFzZ1FTWllRVGcoVyYkY3c9WHMyd1txMU41TGZ+P3JJI3c/dj1YQ2g4WFcidHU6SFhPcio2Ilk0cWNyPThyTj8ydXE0cHpBeWNNbTVeRlBrQ2ElR3pYZU91N2xYWVB+Nz5vXWpBTWtuSVlkQmoqUCxAWjtDZ3ZIW3hgNC5IOjZZIkJKTT5KRXc5WF5SS3piViF4bWUlSEd1WkBOSmhKYmA9'@;
put 'bj92PEVeS3MwbWZfIm1mYDoiJjhHdW9iejF0Nj1kbG5aUlFoSnM6X1lodENlR2tfRUZnMyhKZl06Y2NgVnVjb3VsWjkieFlWO28vIzpibCJ6blhKdF9rQFJaImUmXTYmOm4lcG82U1J6OFpRQmVvVSg0IWlkKjQrcXt2eit7a30ud0xnVXRGQXY+QFk/SDdISFosWSFMI3dPSGUqNFJTK189eFpH'@;
put 'ZF5FVzAod2JIO0xgalZdUCwhOVtAQEBGXWkmez5meSZAcCV0JU4pSWdSckl3aVROQXY5Pzk0NUZASVRLckh3Zl9FX00lZHNpXXJYRHJ2bG1LekdMPmFKS3pHPkVJeGF5KnlvdVRkTWIiKGQkO09ENj9lV2FKTih0d3IlYG1udzBhJlJoV0trLE0/LGhjWXJpK3JtMmRYOEsobUdtPEN7KHo2PHcs'@;
put 'NFRhdGhud1JSJF44a3o6eEIoWTZpVmE/Yi54W0Y1OlhYO2gpVG1hP1o7N0kwL2IvRHhCPi9idi42TkZAaSEjTG0ueFpGRipiWCg0ZU17TW5SWFg3Ml99O1J4TXZTOGNAQmd8QlpuN3ZhNT47dEdeVk4pfl5IOSNvRXptXlIzY2EqSUx5OVhmQFlgSntKem04S2tKbHBaKWc0Plk1KnhJeWNRW0Qy'@;
put 'X0gjdUU6QFd3I0kjKU1peWEkUC5zdX00JVo0R3EibzRTSkVgNyNUT31LLHBoVDttNmM5TylqNmRzIXVOX3E3Tj5GZUVfPFs5WUx4QlRtNm8uVzxGdUxSX2lSYCguayVkejJ4MUdaOXtXIilrL1J5dm47TUIzamMxLFdHRzBJN3glYClrLkExYVRta1tPYEFnKUdvIltMRSF5VH40YS5GUyZnW1F5'@;
put 'dTQoQnRqWEhlOmFGZzVDelhsdF9aOjt1Wmcqe1EkNyNYfklPNXR0TWxIQSJlckd7S2hjdTtOTF51SSlyI2kzWilEeTQ4STc6ejIsLnd+KFRYMzlFRn40QHRfU0dSOnZsNHc4KGoxMHpXZno0KW5dSihIUEMpOkc4WEtZT1pBZ1hjUHBSX2FXS3RINy9GIz0+LywsTk9QcFNoSEUzXUI8STB8JX1J'@;
put 'TXUiZT5sZDJodXYrWlZWOHRQfTQ9Ok15X1M5MSMpa1pKUm4lYTNDaWVTRnhOWDYyc0JGKCJ5UWdeJThNIUsraDBDeC5lQkBMeEc0YSw6ITJXZk10TlhNaVhGOlVTTldgbXF4SVRKKTFOWG9gOihlUCt6QlBUNSgkQkI/aGJLMEAodSZmflg1elVZMT0lWm4wMFVOaDEiU1lwSVVAS0lnNmVgZnEw'@;
put 'VXkmJEIoRmVKU1E+QndVZTJtdFBwQmQ8UV9XMV80TDNrU2RMaU0kVHp9VzYyPHZ7aEcya0VWdClXR246Q0JQblQwLklSPmM+LygqY0V7dT9HfmREYTU+RV9uTkZSL0hGSU41MFc/N3lxTEt5aWROW0NWNjBrUFRLXW9Me3QrLkdIJFNBTW9mfTBNYmJ2ejcpeUxrLmM8RllMTG1aIXV0Lml2THt0'@;
put 'NFM9eSNXN1YuT0lJanY0RHRHOjc0NHNFcmJGSks6NyhAJD4+WzU0N2ApYiVMSCJgQC9EM24pMnNOL1U3L29dakhKNVBFbHQudyFwWCQiYWxRd34xYi9CYDFuWEoxRU0mUFQsNSR5IiwsNTFRXlg5QmFrQ0ZtXzIwLldeVmdnQGc+L04zUTV7Q1MrZjdSQC58JEssRHx6TFtOQT8/RyE0Ol1xNz1j'@;
put 'a0xCQkRQWT9JemosVSVjPUNgQFUhPnR2dU01MzBSM3BGLldjTGUuV1BHMDAjaCFDNG98RTZWYzJbLyxjdUdBLE59UDc0cS4uK19BTi4/KWhlYUxoRW5eQDA2bjVIcyI+QDw0U1ckWmMxLy4qIzxWaEZzIjtya0xAR0FEWjZGazZLMDIpNy9gfDZ0QiYvSyErZiZDNChtei40T2NkV1tEWWpxdW1r'@;
put 'QUc/TW4/NWRDYWQ4ZWU/W3sweTokL0JRJiFMfWxtNE4oRENZIjokeUVFJldnOUwvMjFrWklaJTFbUH00V0Rjdz52S31ETTAuU0RyanZTaiEiSTApYkI5N1BAdWB3am4iKzU3cVprPldyWl1CW3MrLlJYN0hdejJRZDQicClHIjU0eUxrNWYuL1ZpUWYkOzZ5Vls7OlpdLlB8WDg6bStiZW9vTkw8'@;
put 'QVZ7QWRjQXhCZj5edlBDNHdVWUNkWzdWIVNoX1FqTGAvK0BNTXRgb0BNfT1FIXZZdzJaX2tkYDJMdVYuaH46QjohYThYXVgiJCJtTjd8SndjYitBW1RYMU4wU2Q0MG0+T3pqQTtUMEcoTDF2TE1JODdYbXcxfTp+Jj89XW5pWj0ifnxHSFVTSkJNfU5fU28mYWFNTjEmNFBNdGlaV3hzOT9UUGFD'@;
put 'Nk1CQkgjJFpqNDhrJntDPXFXQExYa0UjTlA9WjR3YTQ4Iz1taFY+T2xWUSxhNDJLMXR6ZVlaLCw6NUVCT0Q3V3VuSkl+RjFQaX03LG9NTHR7Q2xed1lCZFgpcnQsI1QwM3dPUGgxWiV7KFpOJUprN05ALnx2SWpITE1WMV12WGY+UHZXRjRQLl5vVTQ+Rk4sb01yTE9sZGxCNkVjaHQ9aH5rMChX'@;
put 'Y0lESmJSZCl2MW93QHcrZFg0YzkpMms3IlI3NE14QzppKkxEOlR0Uk9CR24/Z1Q8ckhbPU9oYk06STYxW0IxRjNjTTxyO2pyNWd0MmtrZ0dEXiw3KkUxXlZufi5nJlg6eXlkckMyV0ZtVEhkYEA7Sk12blJkQ0NlQ0FZI046N3U6RG9bUmFGRGZuYl4oPHd2dTl8ZCo0YHhEWGRYdS5sKWB0Vl48'@;
put 'RVo1WGMvc1BkWGczSD94TVhYKmVDNzI1PmNMRjc6TlhGeS9CNiooeytCdm94QismNyNeaG5ib0xXb1JzdFgzVzIzPEZ6ZCtjKks9ZmF1cV5xTGpQa3k8PmwwUzBeLCF3OiVZV0E+PShVM0w1MWI2MSR2QmZQZVpdPFA3PDBHM1VsR1IqQFRZQEh+XV00NCthZUdmW0NhbnN4V2Y5MHllS051RmFh'@;
put 'WEhLR2lLRVJ0LmVhWkk8N3ZqLyxOWCxFSDRue0V3Lk59ZjIxSVFKKU82QCVCZFAjWGxnTUx6Uk1DSD17Qk5uNElPPENdYzk0eWJxWF1rTTU1bHZUJT91ejQ5ZS9DJEkiV31GVjBuSncpYyJXKThlemtYUH04V0NKZDVFTUhGRnY/NmUwWyNUaGNgOS5iRGxheXxrVko3Z1VMZj9ee2lNUnh+VH1j'@;
put 'PmlgK1E7MSFvUlo0W0M2WHhFP2gpa0tdK0RuVGNpckMhayNkaWlOY3x3NnlAQm02eHxyRkh0VjdkP2hxdlA5OEhQM0w2Rj1MYmUsN3ZuQVQpTWhtK0QhZVZaZzNQP2FdZCJERDJSJSxgQXZ1M1oiNV1JOXguYjlYQnRSJEBCK0t4W0RIQ2dOY3sqKGFMKzMjMmwzTE90aTcpM01jMSlMdHRmUGZR'@;
put 'O3d3QnpPP0J4T2NRW2kjMV9hSGtKPFUuJHYyITFVJHAuWyxnLm85VC9EQXVHMlciXUl9S29KOXtSR3EydEZCPlBnQm5uLjd6SVhCUTYhNVE7VFh2UC9HQ1dBZWFVRnZRdDd5dUhHS1M/OkhvNjhkMF5sWHFGV297dD5NajtbWnE0JTs+Q2V8WFpMOG1PQ0slWUpZfU9AaF1FQVImTkNQXlA9MSRU'@;
put 'eGBBOH1LaFo7a3srKUQlTHRlQGkhRWJkWkZ7REIsY3B9b0tde0NwRilXMEQkT19IT2lmOGRTI0ZWVjxpSlhrRFIsLkJTe2RLZUNRT2FkS0NyMEZ0dS8sMSImTlhlPz1MLyohTWUyb2F+USRNdTI7Z2liL3lyaj9KZUo6b3JEYHliLG05JERDIT1OLE5XezppfUFrSzhAJTtuLFNDdTRLTzElZkch'@;
put 'R2UlWi5tOTJ4S1JYazdyakgkNVNGSlhocz5sN01tbjApfnJGZGxSKzQqJF1lXSpITTQ7VlhaY2V0YS9AUUdDUSVLJFRkNXg2RilOQGZra0NpeHNUbVp0TGgsRCEhajFZdiZAbnNUbUpqe1h2djt5N1NgVyg6TyI0bDRaXTp1KmFxWmxkOSNeP0M7OTpFK0F5Q1oqQjUlUFBHO3orfFYkTCt7d0Nz'@;
put 'PFc9Z1VhbmU1aDcyIWljRUJFektfOEFeV0dsb1YoWlRHbGd2amlpSUlYe09GbndBUSVaVGdmbEMjNTphNDJxaVRqOFk4QEw9dUA8b1cvMWluXngoMG9tdDhATD16aiMzYCNBWjhFM2ttRlRJSW96bW1gX1hQelt8YWxFaWJEJWxlLFYkInQxTGYrcCorOjJBX0MpY0NmUTttd1tOY3dOY3c1IkVY'@;
put 'TmxzajwxbFg8V3VZRGdHVHZqVktDQkJQUE5bTD15Q2pZa205Sml9X2shTX1FLzlkYjlbfDUkKmlDQXZ5S1h0dVc5eXBtQTU9NFIxYmFlMn1RZysjNDRoOTRWS3pLfEJHR1RUcGJedmJMdmg4TD5bNHZUMyVkL01uVHh1IlRQZXNpXUEhT0V3Tzc3dURfOl1uK0hQbzd6Yz9WMjxnMmdMblJndDpg'@;
put 'SFBrSGYyOC8zIS5jcUQ6Pmp6KWk3ZV92Q0IjbTFAYWx7VyE0L1peZV5DY0RPK3dTczRaSCooT05tdUtQQ05xU150RzBvNXBIKVlLYSgsOGVQT2NjVTVzU3o6PFRhVj5IP3ZbSVF2WTA7OmJ2b0I5WXNBZFN3cW0hMGNKUkIzXUBZNHYoWjtCbENaNnxnaXBMcnVrRS5MUnYyV0FBQUFBQX5sZ0FF'@;
put 'TVFhdTVbNXhEJklpb245Vyg+d2tzL31jOzhOeTQ5KjQ9XjZSITx1IVNoRnRSXkBocXooWX4jTjc8fE5sQkYheiJtWTduNjFrcFh3SHhAVjtkT3V3MmUpOEwxTUZSPXN5I2hhKF81NCNXcGRRSmVCOytZZjJ9SjowSm4reGZUQ2VfYE1tWyUyV0pFNERRUkp8RXZ9LixqOVhkZT4paFJCUUBkeWRY'@;
put 'Jk9dSzV+P21zSlFQcz9WRj84TF9PeWtpKGFmTks+bDxpdUYsLzYqNmIjRGclQnpzTilPXkdpZjl3P19rRW9lKV5oITFFJVN6fC5mNF1ePUY+JiV+Vl01c1c+K2AiP1IhOCFxMkUwPXR0NWJkN20rRXguQD9pPUssbVlELy9TU0ZEVi5LQ1FNeXVqWnNzfjNvLy9LOkdCOHNJXlI8UkdZc1ZsajpV'@;
put 'PlZZcyZhejkrOiRjK21ddXByWUc0TEduc2x7UHV3dlU9ZUdqbnRKWEBvckZlXng+fHdgOmUoRlMkK2R3U1lyOmFNcFM0WT5CRVVKdnw1YnVqV3BiVTVoMyhTck5PTTEvVFZKQzNJIX5ldz9fcCltQHwqbU96VHRsMT5xVXBzRnVjaVVCVTk0QjwzTkBvYUorbSgxbyYsUVd9NnBDdy82WyNrMG5Y'@;
put 'YWwociRKQGRaO29fI29RLHV+dHtiZUlHKWUoWi9AIltHMkJZVDt2JWgyJm1eRkFITmZFZHRWbWdIelNSfVZWdCI8bDUrbTJPNXx3L2J9KH5wRUBRfix0QnV2L0BecSx9RGFPZl0vW3BGVCVvUTdsSEtLVFFZemgwfktWdGlVJkl7RWliVWJhP2pXb3hSNmY8MngiaHV5SWBJIztJVGZWen5oRHQq'@;
put 'b3RVXV9BLE5kfnY4cjsvWGcuek49cC5BYERNdTNybn0uUCtEaXkyNFtfb1t9b0Z5W09FLF9zbktTaXRuczo2UDBEZ2U+YHNXaF83OjVkYVdDVStGYClMKyg/QkwlUis7YmRzM105c2UlNk9nQntyI0JFN18/b0d1aT1udVVoRF42aSNTcSZbZnlufW9PQnVFYWE7OTxrSUZyeUdoZFZbRkttVVRs'@;
put 'WTQ2TnM8RE11andTWl0jam83NHEyJFFATFNicFQ4SUZYeWk8eCkhdVAuUGRAd19KbXt9MilfYGA/b1hFRjcqQ3NuK1VxYzpsaGBeQiN+eHRlSyE5KCFTLHMoU1hfcXo0Jn5UbnckKUFeXmpeYHxNYmdOM0V6TiNeZ3hKUkA3b1txKjsqcjBFa2RLeGRmIX0pQTQlMi8/cXlOSH5eT1teQ2VxPWR3'@;
put 'IzM4ZFk2IU1DOmw5JlYwZ2J+ajA6W3JIbVF3YnpaMnluU3o1dHVeW307eTBOekpFeXosU2xELk54Omo2ODZfXlhzQjlCd2tiPFQ7ZGlONWpEJGdzRnQkOFQwL2J5bmVNbkg4eTkpZH5JK09tTmdTQnxTW01fPlY5Wnc9SjUofSEkeTpMU0dMcltafT0rOzM9PEMjUlJpZFJeU34jJCZ4dmQhSDRM'@;
put 'SX1MP0syPzhCVXNvM1BFVnd8KXA+dyNiJSpKYUBUQiR0Old5bykuOjJ5fXIyUGw3cnI2T1NpcHxKT1NiXSFSbVVWRjdENHxTR3pSbX03NDlqc0BNMkVxJltNU0wlfFAmcTBqR0YubEA2UUlqNzRdPnpLcUg+aSYoWXQpUSV0K2t7STpHLEQkfmc9UiouaWAmJlRnSSR0NmFKailvMkVEeWldJTRA'@;
put 'cG0pe3k9fmVqR2BUZ0JPYk43WVhHaCNFd1NAWktuaXRZTDlYdV00WW1MS14rfXtELyp+aClKKm1xSltHc3JrZD9teEFJXzEuYkZTOj0lenZYKn50XjpAOFNjV05xUkd3OXd0SGYxS0JPOV4wbmU7QSxWJX5aITtIN3lhflohbS59Nk1DV2FlWTBgO21gMkhsNWllYUJjREhyIXV6L3R1M0ZZRXhr'@;
put 'ZXo6cnMmT2sobGZscjcodlFxVG8rQlkpZyZSXWNNTChnOGpJRFZ7KDshPEg2Uzw8biZ6a1NKJDAhKWplLyVSJmlOfTtXRHZPa1VbSi92JUlsNSwvYlAqLmpQbUlyZTpOZ3dbXz1gWFpfYD42XkJ1RWFbe3xeZ3VFbk4kWF4oRD15JmgjPDNHVitddEZHK3pUaS4jWW1yQVdzKSh4PlEzUkZdSWpf'@;
put 'MkEke3RxWF1OeGUvJDpzX2tQeTYsS3tyNz8yMTt4Xmx0eGh0Qj9bWyF6al9tN0ZgZypDITVGcHJ6PztePEFfWDE4NkwoOi5wR0JVQmBDZlc5SVtOO3k7MSE9dGFyL3h5PykxaVdZTzcwImo7RCF9W1cjPlVTPjt8TG95ST5ofj8yJTczJTdQQlRbRFRiPWFvVnJsUG1DbSZAfCRnWV5hbCt5MiY5'@;
put 'OzAwVFg7JWdGWkQoSm10LEp+NnJxZ15pbXg/MEU5ekdeI0RPMUpxMXElMWYwNylkbmNecXlLfVNNdFIie0I8MCNpNk1mPXgsIzg1NGAoQzVXdFlseS9NOT5yMkQxMileVWZvSmIvRkowPm5AO2dZI1Zva2QzX2xfcUAwVHR5LHZBPyskKEMuJSRycVBwJTpCTDFnKHQ9SChyWzpJanc5NyI1PmUj'@;
put 'aDtZUXdmS1VPLHthKXZALnh+dlA7XzhRcmBRPlNZcFIiM0ZNWC44ZnBKXX0+QEhVQ3RaMkFDJkxeVkR8OkxqcmJYeEIsP1t6dDlyYEV+XkxHT0JIP0ZYflsuJHpTUzB7UzN6R2tWInkoeFM0bSZALlc6LjhPKmc4TTAjMFUyMDBLfHQmWU5VfGxBYUNgZCFNLD1zXzVtQ35xP2hbWmBQbHtxdCVA'@;
put 'JmRSVy41Y2drVihhKTU5bD43alB9T05JLGZsN29HYnRITlM/KixyZExsQlJrT0hTU3VyNUVsKCxsTStoOCF6bjEkNG5KfDpaISljJEtzM2FiS3c6UkZqNHFJMkl1LCJlb2RTTDg+SnM4b31+dUpAellsZysqbThaI2skdHVkbmJBfUdgYS50cHMrOGliIzZ0KElBISVbOG5EXnpSLzwpT0pKLHZX'@;
put 'fE0lP01uNHo4Z3lNZGkxMUZPbiE4aTZ5aEZGYCgsKk1pbU8kI35QZVE4KGhQZUB1MTY1NDEqY21tSzFoWkNFOVRjN2ZzKjs2WDZhcmFVYnF2YG9bP1ooZEtYKWBSI0hxZSpMLix8JWZIM11FLHRtfVlaJWBAKH5iQDEvcSN7eWlke0VJLnU6bDFdO0tWJHVnUUhTLmptd0Uxa0hAVXxYcSNhUHAs'@;
put 'S1ZLQ28rNjlHQWcuQV1MSCt6bG0mNyExJSp7Un5ANXwhYTRYbWc3XSw7SFthazRgQDUoRlZeQmUrIWE4QEVKNTBGXi9Yc2NOTXY0L2JHWE45ZTJEZDFdNiNbVjFqODoyM3dwTzUvISl8THptZFo+M3NRTi8vI0g3aldfeiFSZlJIQkdtZlpRNDZQTGZoYnV6bztgfDFPd1VlemJ3PUZ+KXBkKCZh'@;
put 'JX4sSXwmIyVzTDFDemt2QTo/MUlKeERuIS5WSjQjVl1bWzA7bUtVQ0tYXj9FbEROfD8udkc1bl00cC8sK2w4ejNnYEJodmBVeUh0SGhldmhWamAjT0xkPjEsQCIueXM2JC41JTUrVGQ2NW83KXIrfDI8PCxeSCo7VU8uQTczXUdDRVlKL0A6UUB3T3BReWZeZSJbZFBaTm9fZHpAfTBmbiI6T293'@;
put 'bSJsL0Z9YnpOOD87clZoWWJiNXY+aGUrRG0/bksyJlRFcXxqbitsUzJ+LkRZVn5gei9eXyY6UUlnZmM0IjVjPmZxMzllUlsuJm16cTdUIXteWmJLTEI4MEFJeHlUcl06KG83XmU2SlJaTjdeY3dLKS9eLm9rX1spY05wPytMVXlxTHwjKHR1VE5pOzVsKUc/bFhrbHUlJHxSbXcvLFhqQCUwanNW'@;
put 'ZjVTMVtYcyxGPz9LRVFubEArdGpdU1tAL3NmVTtWXyFxNixLPUk5eX54Z3h9aT19QHA3fD58U1paT1JYck9nNytuT15+emNhRUNndDhHV3dLdnBfPkVxcCQ7Wyl5aExvYF4zZE5WbzJWP3ZAa28jcmdeTTQ+VjBlR1k1QkxMRyJ6alk1SnNbfVlMOHxrPHA7ajRmVXxqdEo8NzwoKTVaNUJ9aXVw'@;
put 'YSh9NUAuMz9iMGdCZEB7YzJ+dnMrPCxVNyZ7RW1RYVZjQ3FSYTArRiVXNzI8TTNgSmRWflQ3JTFKdk52cipjV1h5TFpHTkBqJW5SMFo1TjR+M3Z8b3hrKiUjWitBR1RxZCYibk0sS08pKTZIQmdxQlFDKHcobW03djdRb1pzcUlRcWdDRSE8ZDJ9ZFh8MUosN2dTb1csKzxpZkR5T1VPWCtyKzRa'@;
put 'SmxlbDQhQjswNkJdUjNtWTJwb0ZvW2pWIU1QaHh1RHR4cVJIfHY7SVg8SllPLks2bldYR0ckTSZzVGJ9YjdCVDRNTVB0JWFwcy5GVH5FbjBNSl0wNl93Vj9aL1k7cytGWEFBfn1mRGJ9fHNJNVt7SmEjV0gxI1QxNEc4NVk5SyZ2UlRnMHlaU3FAUEF5JWg8UXVIezIhUUpCbTNteWhHI1NQQ356'@;
put 'OzY4K0p0NkpPanJOQFA2cysrRks6ajQqaGZRQj5QVj5SUXBNTHZ6aFlObHN6PUBEfUQ5eDpIbVJgPnQsNmM7elB1VSE1YWhpcXRBYWNgajJzbk5CNTloamtaMHoxVCVqQ1hzaW1raURoQClDLnYqUkoiVzpKM14lWFEhJCFddW1IVGwzTW0qRj5mTmUsezZ1UlFXITBPQjJGU293cTVDZ0dFUHBO'@;
put 'Yl9GQWplJEJSPiNLcGJtLE88SzEsIkklOV5iezNIK1RgemMxQFt6TyQheWtVQk0xYSxTTnBGPzpkMHFmaWlocVBbMWl8JGs6V0xONTM4MzE0JiF1WTApK2A0cFBKfiVAYmkuYXleXVouW1BTfGQuW3IiWSJmelBxXXJ4a0FwKHFfTmNUYW1FMTxSQWE3emlodiErbik7OSFuYk57fnFPNX1eLHhf'@;
put 'WV4oS0xPOGw8eCw8WENCdywleTFGL2xAeDc0PVFFJGNNY05NOktGLzlOZHUsSS96LjVdaXkmaUIzcnpFVnklTXxnUHM4fjxsWDc4cnEuN0FkVDgkXXVUNjhbMjBsQmlKfTRqVCkmeC95VHljY3A8Wngva0whUTR4WER6JXs+fmlXPUs1eXFoZitDOGErJngzQilqRjchZ1plazNPSFNwWmAkVnoq'@;
put 'LD41fDJWZklGfVkwQnpXaE8/VS5NWD0+clpmaUx3e3svL1c/byUuRSt8SXt7JGs7U1Jfemc8amhQPEtLaGQyOHVMNDQyfWxSJV5pTF9QKiQ/ITUxMTdbV2plX0Z1anIwbFR9JF8/WSYhXnM4e058RE5PeFMqN1Q0TiNxXXUyTm0yOSs2VktFaCwyWFIoZDwvMGEyc3R4VEh0cCl4Jj8+IW49KUlg'@;
put 'O3xOdDkpRExrdDJNZC5sVip1IzVCKTZgPW19cmlNIUV7c3JxNilUc2BESFBxS2xmT3lqOFlzX2EzSTF7eElsbEx2eUpsPC5tOTByMkYvNiEiZGltdTRkWig1QiElUSYwPTVPQFlVImJfZDp0VVAibllkc1JeWGtVN0lfbiQ/ZEI8WTRqO3ZFbXxPMG4iWT85NjBaQ3JPZGI8aUNVZFdsOlZeflg7'@;
put 'OmwvfXpRdGVPVTcsJENEZ3RydiJWSCl7Oyl6VlZjUWFaLGtbQmlleWFlIWRiOGp1Y0NUT0w2dVhbZ3srN0xHaXBeI0pOJUokaG5TMXJXJEldJVtxKDM2az5CL3dENkcwNnBDLil5PVk+PmU8QypWOFphWTd5PjVYSHt2V3FzRmxzdlJydlEzfSpxT3JdOCkyUEohVztLbTF7QyorYkV4LzZXPUFs'@;
put 'NTZrMjxmSnp7XnBjKituZGFTKk1gX2F+RGkiYlBYQ2JsfXlMfVJbNiQ4QSE1KXJIImhMe2t3JWgpeDJsYCYrPHR8cVQ8VmZiKGBbVCp7K2NIPi8oP2YwVmtHZE5rfTk5Z0xLUlY+KyNjOTYwfmM2aFVuPk45ZFhxOXtGT2xyPCl9Ii4+VUlqLkNmdVRgYiFZUDM4OktaNE81VkdmM01bPnRfaFNA'@;
put 'KThIRC46eShXI3Z3T28+UnAmfl81fVNifSFNRkQhYSMjYGNJSzBOZD1fX3J1JTc4Myp1NHxtW1U2ckdhKUlMWzNCP1V3aShWdl88SjwzRGclUXJlT1ouTEdGVSVkbiUqLElRVnhLMD1fXXQxciJFUntLRSorXTBlfCRfW0duPXNNRmovO2M0RnJOXWEhUEJIWG0zdV5AeUROR2YudkEwYmlhXkM/'@;
put 'bVVxbEA+UjFvRFM2cSVwRzNTRz4qUmF5STl7ZXooentIQG1FfTBRJHplM3lnPTNdZj40PT08Q3NHYVBgKyNbWGIxdjxdP3ZeS0gsZiwjd0M8YDk5e3dwWzB0UTYqWn03NkJTTCxzM2lLN2M5LFYua2t1eGw5NF1zNFl0PG8yJFFRPT0ibDZrM0dCI1hoTS4lT05KaHdHYn1fL1ZdOV45U1B0W3x2'@;
put 'ek58Y2ZTZ0JELzZLLjpBPUUwUnFXJjA/VWd0Y0luPkleM317SXxzZyJ0L2tkPVcudmA7eCg2QSsqZlImLEBATlFHODdrMDRqKDZXY1djNlNkdEMqfnVKfWciUDF6OXg+djlDZmJqVig0JlJzXSFlbn5XT3BgYjRNX2VMdk9lWXVzIjhaSX5HNk1jdktsOllkY0t8ailZW19tMlJVdThiRzJBLzk3'@;
put 'SkReVFF0O0ldM10jO00vaX5pYm5pfl93OkRePDh8ciN4VysuUmA2S3FLeD1Efi47XjpVU2NkbXtZQUNYJmNQUWB4MzcyNnxeKikyKll6Zkc7eFZtM3RhZzl7NDJLOGtCbigsb3U5en03PThLK34/MjQ5e2B6dCw+bmklNF0jI1sjVGxlZjVtSVFXOntYdGJTZnp+T1lCKilMJlJBO1Z5Xkopb3Jh'@;
put 'TEJIRkwpQ208MX5eM0w1eixaTmw8X3s4WndBMX5gXzxZfGc2W1lGRjJaNmJ0eWRzW2woJlVHe1AlRHJrW307IW5jQlU+aEVxeyZEITVkOWwxb2V0fS9JVkwjPnVWWippeDVNfmhbSmBTd0UpcWMid2Z4ZF1YSS5KKmx4P1F1Pjc1WV9aSV1QP0UqQ3tbVmtWRkt3dFIzdDJUWWFESm80Wi5tbiRj'@;
put 'Q1AlWz5FRGZsTWJhMiJqTDRFRTwuVEFSdSsldCpsUDVFZz5yLlYseW1wTkFRZ25TXjVlTX14JWBEPFhidD5mPCFfM180QyNqXWpTaSZZZTY1fTc2UXNiVkdWaTphU1lGfltnM1lPe0hWXm1vdDNYJj4qTjlXQnAqSSU4VDk+NmpqWEBKSS5iRH1MNCpVT3JFSzVgWEJvUnJaS1VTamIoQTJXXUs9'@;
put 'NXhzJjx3T1YwNTNyODV4UG1OWkFuSzAlM2MrdU9FMlQ2WWk+emI/fClxNCU4ZHBFVVkySmUqZzQ9ISNNPCVfVnRbNXJPVztzIzxNWTwzS0BAOktGYl5yOEouWX56IWtxdTArY1khbSl4KUtLLl9mfiFSKCZYckklPDtgM1UycElvIixxXnh4ciF3JFUjOW07PEJLUTRgP1NxM3lndXRQNEJoa1ZQ'@;
put 'dEBLYDVUbEl4a2djPF0oOk53QmA0T0M6cyVlS2JEPiZdc1Qoe1omTExvdihGSE5OJFE+VTxzJGw8emJ1eElPMHdfTyYiTDh7biIsTGhhaUhad19+aU0+LyFrZy99REZqM0NHOCowY35fV3xLODMzV3RJSXtFelR5M2xvKmcrOD84N00vSD9oeGJmUVZKbDBYJlljI15KM3NVUyVML3l8IUJxJjFj'@;
put 'bGNWfWc9eWlyd0dVZFc3eiFOQkkxUk99bHJ9NipMIUw+IklYTDNGdGQ8PndiL2w2flo4L0RDTURsQEIrekZmZDhXY1Jabnt0KzJLM2BLdn42MDhfSU9CZGAwd3lofGpZVC9TLiVdaV9naj1kODZIPmImNjx1WCw9QmRiPj44Y3lWMVMkQH4lYks5I2RGW1VXa2I5M1Z8YjlBeWs/ajhIKHR5S0g4'@;
put 'NUR0fW0mXm9TUFZkNWhLeU9eIi8ydGwpJW9pNWRndmJbaEN0IVcrYWpuXlJCR0lSV2lEZXUuZTNIe2RSZWEuLyFaOlA4akBhWWglQW51N2h4KTpMTjtZWG0hWixbKFV6dCgrNTpTWVlKdyN3Qn1xKTsoVThnXk58bHkqa1U6Yjs4fkxLQmpuZWpNNEJaZ2ZzNyRHR05xMF8sN21PSis9bDBmV2o4'@;
put 'YTdyeT9obnRuKlp4YCVuTFJCJmRPMEI8fFErVmJbS3YyJFpOencocjU+STt1QiMkMW5DRmFUbHhGcnlUKkVXOSR1V3Q+Vl4jJG9QMmtod1Y0SEBHQC9Qc010NTUsPUN1SjAyP3tJUDRLZ0MrJE14ZElRc0F9RTNQMGJVSSgkfX5bOXN1ek9rUjh+VDcxRFlyY1B5QSZNUiRLRGA9SVhdaUtXJVZB'@;
put 'NjZVdUdDMDcoVk9oN1V+az1mPXclPXtXZyMveE4qR017OipMdmVDc2BCQUBRdFZFT0dgRDNmaEhrWU5KfEZ1KVpMbElQJFh9Mmg+N2pvdj4qQDU0PmowKEcufmsmdEFHSSRQNHckTiFJS0Q+b2U7XyZzWyg7Zi9JbkJFeG1SZ00kT0liJnAmV1FJSTVuIyt5T0dORnRIX2FeWiQ9YXV1dGhlZ3p4'@;
put 'aChRcCo+ekUxenVmZ2NqYF5iUFNiPEJTMltMLlQpNWxDfVsmKWBPcWFucCRjTTxlP21afnA/cjR9dElran1qJlNSdk1OOjFEclcmRzc0QG9qfXIvbWQvXWRJQmJ6QVNBb3h6R1lnbldsOSYjRmBXdWJvdnxPeipWfX41fXVlMzM5IzlSUypJNzlqJSx5QnxIZVFmPG19NERZfU9eZz9yN0t4P1cq'@;
put 'cElASkVIa3pbPGxYfUJpMTczZWZMYjpwQTUsXyl2ZEk/QTFxYkVtbWV1WzQ4Iml2L0RMLmR4JD5UNktlfF1HVDwmM3o2WWIlJiEzczhCaylAJC9FN1N6dUczNltATHcvXUw5YGolL35UOVVYaWFfR0s2WUcxSz5lSF9CVTp3ZkRndmMxInlCcEhtKn5NSHAiTXhqdW1oflkyNGZSUW8hL2Vlcjs+'@;
put 'UGx1ZjsqXilQQCEjKVRvZnxbZl8xNkF5JEZtQF1GOCVCenBVezRCMWBNezQlOSEoOF1CTilNNEpOTV9tampEJWE3YHFZMExxUCFkKjBDX2ZqRE9geGh+Z0kmaTgheE9ve007Vnh0KnRsYUNsSVI4PEdMOSJZJlZpbXZZKjMmT3FVU0J9M3dTcVROTThlWXxtNTBEVElQX0oieSVRO0NCcjhBaHRz'@;
put 'NllGPXlMUioheTFCKj5FcCZSRWFEUX4ufnhLR0d0TERbKCs/JUlaKSFKY15VMjV8a1g1dCl+LldYRUArfENIZUN0NkIiYDNrb1FmSV5hZFA0bk9zN1QzWGQ4NXpMPFp5aW1RPkNbI0Z2RmddO3FxTHozSGtSdH5TIVc7b25ENS9nKVFWPys5WiJpdDdOZSNaQlN3bjZraE5adTVgZHdxNUgpJWRT'@;
put 'VEZgclc1X2c+ZFQ4Ki4ldkF0dDB6VV92YWkkNTwoM188a1dDLllmXWg+VCVuRXVDZkQmPENKcEMxYnV0S0goMkZtODtRdFFZZVA2Y2JjVTMlciRFUWxeXWBKTW5QSGpTSlY3e3FjZElBYCpoKGA9XTleSl9yfm5MMH1taUVVK2s6bHc8aSpVRU9jfURrLllZTUVDK0p1I2MuSyZ3azRnNVlsLkcr'@;
put 'JChgKWI1dnxgYGZDeVpnZ1M2aFt1OW1UdTBrRi48Z1NuZSM5YHRtW3VKSi8mNlNfP2E6IVI/cGVDJFEsLCt7TjRBQEV3Z2lYUHIkS1dXb0UhdFo+fjhuSTJ5VnxNOHNYQSFWcFBYPVU3Qk9pZTRadDFkNzlWSm52IiQrPVF3PVghaHluVHRdWkZEMmJeODFANWVMO29Bd2U5W3B1ZU5jRHpzcTY9'@;
put 'ZWJUTjpybn41YUtZfXJDWllmTmlWWm8xZGM/XkJqJT16YndTMjUsI3Y/RlU9KUUyfChnfTdKQkEwTDlpSFNEQG8rKGdLVjVFSktudUZeJDU1M3tTPSRuVyp3dSwuL2dyLFErMiN3LnVGU31GJWBte1UyVD19Sj9yMFpeKE9SJC9IU28/XndaeChSYFtJQ1cvfUopcGV4dXBPNz0+aHsyeEx6Lj0z'@;
put 'Y2tUN1ZbXUhdcHR1ZmNFPEszJjpCNTUxfmliM15kREI9emVNcFQuI2BaQG50cTd3cjIwSzV+c293a3MhOj42XyFvWihGJTteVDJjWX0+NXJPM0FvaDhHeklwTnBZNVRVVmh3SllFTVNOfkxKbWFkNE5rOjxjK0NEczRiN1Z3YUUiXk8rek5FUyZrUn4wYW8mTXt6Q3F0ZDFEfVYwN2htOE5sMnI9'@;
put 'Lj40eyY1c2tFUTgwOHd7QD5uPl5VeXNGQzomamArUDhrfEtaXyJVYVZtbW4pMHlCL3V3JXpZcVY2RTQzSF54bE9DTn1BV2FiK3N1ZD9QIjgsKDQ3X0V6SiZZKjYyOnRPPCxzRihvU0d3aHgqdzxbaUAkMS5mO0NybVBqbEA8JlRoRn1XdnY1X3FsIjZdN1h7Uzg8WCFKcXtDWSw8VGtVMyNiYSJ2'@;
put 'ekguRGV0fGlkQ1I5amw3bldJYmEvMEQxcDcjcXVbW0lxSk04YClrKSRHSDxuWkdId1RjP0w8Rz8sMXdtX0o6ZGJFNHFyZ2AufUtULnElYnBKO2Z2NkkvXWBgNyU8VD1NS1k/JGkvOzoocXsoeHtSRUtbeGdjTFh+IUZXS19MSmRwMXJ9PnQhOmdQKXYlcXpiNFh4TX5rSEw0Z1ckRyg8YDBMUCVb'@;
put 'Rz5uVjhWQHolTjxOWF1sbmFNPEM3InhLPDY4VT9XRCRyR3dvWkhnc3xnbERQV2lSWCIoQF9VQDs1QHJzKmhUJTVHMF9bKz0rSWtAP3BCSj9DLkRLV3pxZk5CS1UwUDRLdWpTPFlwbThYSmJ0dT8oN2pCPGBxb1g8OlhtI3JFWz4yY0IsZm1KYSNVSSZGOSMqYTcqfngqfk0xYztLOCFhZi4kdCJ6'@;
put 'XVZMNVBAP3BhQ3xVWlR2PnlnT0hWUX10RXpjbCtDJXEoNiMyZGkiLlpTYC9IZilqMil3VkxqQ00jIn51YkxkdEhGTVIvKGFrK1RBfV1SfGJjOnEwfFdSa3ZJLmsyI1poNnBxfXpfVGRTYSRJeD9xKSV6e2laLDd+cywzZipKdDtvfCNkXSMubFIiUUxZQF1Vend5VCtYM35xTjwue2JHX3N1NTtL'@;
put 'anNDRWsxUTNtdHRFdEZ8aXx3bD4zQ3QrKiEodDY1QmA2JCM2fUlAejh4Oit+STtXQUl7XiVpYzk3bmReaUxmfX1jUX13MDFqaXIwcz5naFJjWVd7fU4sQyZHR3AoN0I3dkB6JS49ZCxkR3ojJFlFfkR8KHJ9Vk54YXM/JX1GTFtoQz89T01EdThgYlBXKl9SLEF0Wih4NlF9OjhGOi4zW0dme1pl'@;
put 'eWooT1ouUC55UH40P34sLlNOcyJ7c1VLbWw4JUJBdH5aV0ZtTThbQz88eXhyZTs5Pyp6aypVU3E9T3FafUtwVWs9aGEqZVtGQVZqYltIVE84Vz5pMEpMNWxIKUpWPEN+cWE1MHRRMXg/R0Elbk1ARkVkK3VyU0ohKV9bYWJjNEsofSxpR0VsdnFgLCYveSNSQHRuUlM6eTlKfFV0JVhXW2lYOS9f'@;
put 'S0Q5K3xHTXxPTGI0QFo+UWB3Z2BdJk5nRS5rInhKW2g8Z3p9b3FHeDU3YyVqRURmUENbOEJadCJBSyhyVVUiKzBDbSQ0L1dpSj9zXXcjUlFtTn1OUEBPOk5hRmdQL2tLMjtmZFo+NCE9QGZye09WczJYU19ab01fRz9rbklqUERVKSYxW00mfXhbM2Modm0vWkEkV2JuVm1QVHYxYmszX0p7TjEs'@;
put 'YXdRe20qLCFfb19QZHVmfW5xbEAlJitJXTVsJXE6NlY9PDFdeX54SyZnUTVxOWJjdzxBQlcoL3VDdTBaQnQ0N1FEL217TnF0V0I3a2sqdSopVkswe3MxZHVvaXRTaS9AcE5XejdTbXA4OF5wIU4jOjp1fVFCMWo0IyMwfVRiIks6ZV8+a3gsWGh6djdySX5wajlCWEtZXSs5NFskXXE5VGFpIVQy'@;
put 'UWhxJGJxZCJQQCZtQyp+clB4Wz0rVEt3PGdYfWxjNEE3ZXd7eVhrVFlmJSMjInBUUns5bT8sWEh4fVBeZmcqJjxzaGBIfjR1YnE7R28vO11OJiNDSjZfWnFMVD9rfj5UVGMpRTBNaCMuZHAmT0o7S30iSGxOey9BdmIyJkhWfk1ZYi5BYHZsVWs5eXVjfCQsfDxQPyUiQHo4bFRkQ1drYnMofE9l'@;
put 'JjB9V20rLGFnS2VwRlt3bnVEPVJee1hAVWNKTFk4WzB3Z0BDaihoaldHeiMpJEtncT9TRnc/d3h9MTMoKnRhbDA1RkskLHVfW0NYO21dYz99MVR2el4udlZSbFlxanlweTZHRnRoRkVVOVNKU24xWSpoUEckOERzSyY9aGEqUz8vWFNgeHBYZGJmSG5bODVqRXFibUVrZj1neiFYQ1tpdSkvVT5s'@;
put 'V35deCh9d28oWmMjfnw4QVBTL2Z0Q3dOT2t8Ynt9S1heIzZzQk86KzdzfX5za1QiPlJyPnlOI0dOVSFxQHh4c1A4ZnFOayQ4eH5HOCJELldLXmFJTSVqRiZyVS9iUERbdmpLMDNGd3VuVHBDPy9We0hgMFEvQzM8OD9jM31hZE0sMV8rem9pLlRwaUBncF1YeSZgbE5BRjVsQnUoTHImK2dyV3xK'@;
put 'SzJDd3tsIi9NYFVqJD5ST3dFKGVpXyxfVEFFd3orL01HJUkkfSY5P0U0TSZ7WTpWa31ZYXxQSUAlRW15WSNZT08we2M8UUVYdyNBayQ5bztoIVV3VlpreD4mJV47OSE6WGwwX1d5T05wNzl4QUgoXi81UGwjbkhhTV1VYmcvT3ZQSkQhOHJ6UEpVJSFWTSY9aEd5WnNFM2pEM10+U1l0Q2coSXpM'@;
put 'VkNwNGNBcTs4QlRNdSFiaklISHJ1PDleNEp1QUA9bzFmdm1WSnFjQlZkLnReOFVNLEtyPjV1QGckc3ZzMi9NaTpfaCoqJi5WZitCY2dwJil9K1ttJXBxTHp0PGVGWk0hM1tjYnhpYHEsLCErYmVSVntjZjhQIkxQK1hfPkIwWFJdfV1HVXlYYSp9OTlpc1ssOGFMR0o+KWA6WEsmYFBUT0Y/e1Ez'@;
put 'Mnd3PSFISnF2bWUvcDg1a1k8MTBgXTN1fjldLz0lWFIkRVVOLjJabjIzcTFpc2F0S3xUKSRXLHcmIlFpMUxnIW1ac3RMUW9NSCUpMlVDIyE+JjFuNy5ufSxFL2MqeCpiTU96c2dkNitdPHFtRSxIIzBtRFIuNlRnRDxMV0J7KzkySz1Zd19tSixjdVZdLEJKfltuUFFvUztOOlczSzExPi9zPFVJ'@;
put 'N0ZfQiR+UHtNNzUvKkc6Pi9Kci9UVU1vOF9ndyk5PH1yTCVSZVF4eFAwOD9jRG52NXdZflYhQk1qUipnPj1aanVpPkZ+V0cpamJReGJSMTlONzc/bm56WGh4Smk5WFlBWVU2LmQ6a0lwOm0yfFdwPm8wOkU7UURJeSJfYVVuSSlOZWtlcD1TMjhTbGZ0cDpXJEl9MSZJZz9YalReRFtjWF81UiYj'@;
put 'W3djTWNTJXMqQFBPNDA9fXdHO1ckVEshKmlDfmhMT0dVbDdtM3tZIS48ZjI0a309Lkd+Py9nc253Zy5fPTwkc091JEgidTNIYS8ic3g3Nm4xN0ByNml0NnpLOFkhayJFcWVCN0AuSW1wdGheZkBvTE9iXn1GW0JgNXVANUZ3P0FUTThCKjslVzJgMDNxXUo6bm8rPi89S2R9Oz1PamFKN3VQYTlK'@;
put 'Kl8lKW8wTjdnb1ZTNiMkcltxPXttMWN5aXIlSGJPMEwzVThEUy9yQzozNnEvW2BFOjJ6M0xRRDs6NWw6ezdRMW1sZjt7fTR8P2khVD52fn1xTj1HYz5IIl0wajgoaitUV1F8bnM7TnJaemlrOmJ2JStrIypsSUcrcSM3ezlASmU0YGlCcFpjL3FwLk5iZTldZDw0JFNFc0B+Vz9XWVVsSi8sZlUk'@;
put 'aU1iTCo8JmgjeXB2PylCRklALDtOWD5uXWplTG9jdSR4bXZHX1F7Sz1KViZeK35YMTopQGl3Y1phdDZFe2NjTk9BQTxNMVs2YkwzbSUpSFlyNENyMmRIb2QqeSsqUShJazdnPDE0QF1qRDYlZHZefGJQeHhQNkUqLm5XazMqU0N9TzYzdVB5c005QCFNWD9UbVM9Vk1ec0tTMTleeDJlMkNJWW9j'@;
put 'JXxFa0dgPy4ycTZMfD1QdkRWayxga0liWHNZQ340Qnl1Pjt9KXt2RU84eT1OWywjP2Z8WXlbdnJkdyRJW0s+YiRNRn5uKE17P007VzgpNnYja241fVE9PlN5WlZ5Y3M9PkFebmk9e0ZGKTgzWz81STlKSTNjXU9dI0ZBIipWe2txPkU2NTIwYXVFOWxoeF9kZHB5d2FtPiZGcmIoa1RvU3Q1STtC'@;
put 'XUxQO1dnJEssNUxBZSs+UTRHMEYicSg/Tll9IVVefkdNeThBLHhKOUR4Rk93SVUjRHUrKXopJEBPZUNUVG9mTDFdX0kwbDwvKntzYmUob2xOXmBqK0g8aUQwfm8ye3N9TlZITTFwLDc8RkRvZip9cFNaQDRdZHk5aTtQQW1pYG5fXlQsciZdS2t4eVpgKEdSLysjdixUWC9Hck9qeTZEfG59Jkth'@;
put 'RGBYYXAxNFhicWRjMCNrd2pzYElUJnNfMz9IcXhybDxtZCxDIVFrbEYhczlVbyRjTV1ALzpmZUBEJFhgQ1lxZ0VuQml3YUNITk1JLypaYXBOLz95V05PcjNHZ3hhIksxZV08ITIhWSs9KEJxfmhDdzFfNWpXQFtUI3U1XzwueCZtJmptZS84S2Z5JXIqR09dPTRAZX04QFEyPUUiI2hvZH0ke1Rn'@;
put 'KWtuc2Moe1tKd1dKUDR8M2JYbEElc3NTcDR0dnszYiljSD5WdHcsWWlGaiVic2FdYiViRlRUPV44UzFNRytkSDtmZ0lbLzpKOEZLPlpYMntsXkszc0ooJCRYTDZVPW1BMDpgbVNCTkgoQmwvRDI2P1p9akt9JG89S3JJQ2AkIkliYERGQXIqSDIqYmZJaDpuPSRTUzMxIUdnNHczWCtrViVXIVR4'@;
put 'RClTfCZ+ZyQ7XW5uVlFnWnd4fX55TS8kIiFjZ0A4dU5KbVMuIykkOE9pKlVHOl1KKytyKG1IUVhFQTdqdElwMmpRY1pPIiQoMyFeSWgqYHVgcUNkfWhPa0ZITHo2SixbSWtvMW9CQ299V3R2S0UwXXpOSEcicUU7PkIjNVpQeX5lOXlSQHZEaEw4TmZoNElRdHpgIWk+RC5yRz5SUUxvYW5xYmFX'@;
put 'YyIqYUYzQjFONDBSJk58cGdWdHd7KHJON2suPn1EV0BfbGdsa2ElbGpCNSQ8SEx9fkQlYjY9dGZncytVanNDI0dIcjIzMU9rJjdaJE1oPyVMIWdKaEtnZ2ZLPkxKZDVMbitPMnVsTEhWcF9ZRDAkdl9Gak9ubiE/Yi9SQiIuN2VuYjVAMG1qbyQmLnttJlhYO1VqcFlAY1Z+RjVQcF43Wj8yIlpY'@;
put 'OE9bK21QLngiTD8oYHR0KGpaJVhQYDUjaSsqW1dmJD16TTdsMUpZRipuIj5TfE1wT3JMSndgek5JKGVEfmpEQFBAcXlfUV9iKWIwJFI7YGZseEdnL2ZQaXUzYU8zbjs2U1p1OzYqX0FNalRbPEBAaF1JI1VqUV1AU3s6R3hUYUB2aGUpX1JuIldyM1txVDo4PVFfXVEhRW42YmBJLjIrL343a09G'@;
put 'L2p1KkFpMnp3ZV1jTEJdLi5qKCQlLzlTezZqSks1W35LT0l5fDZnSSttbFU/Y19mVlE3KE5wQ2klNGF4JlZ4MUV8XXA9bDlIVykrLHlxcl1jPFsvfGp+RUJrcEkkUDE1b15UM1EjS0wzJlpAczwvI3IvdUt4MHhecGlxMUAvMURoTlRjOE5OKH1DVjpKajEkbXg9MjJTIjlENUBBSjA1OD5AKUs6'@;
put 'bytxWHxvTD1VMCUxbl5mdldmWiY1Q31kU3g/O3xSPCkqLFY0Z3ldLHRGblJ+cWFWbnEqYXthdlR1MT1kenFbOUx+PlhXMkE5bTdOfkljKmBtTkJleV9WTmNFYUVlT0d9Pj4vO340d1d5bnUzTzI3Wi5sTHErIV52cX41ayQhMEojTF4lMX5FNGouRkV6OGBjdCojNk9WR2dfPHs5fFE4Y2cwV0RA'@;
put 'Rml0ZSpMc0p0Yz1YcndEU1Q+SkxGaTshdiU6MWpeZklWIjlfJj54RFddbkVYT3p0UT9qZUdsQ0d4JHprc248JjA8Vm9jKCE3fERqTFVIS0B4OGAxT1ZhSUIlNDxuamkyR3NZYVpWX0RtKCFjfSx5UExeMXgxczFweCZUTVpMTkdfe3puZXtmdkN6PUp0T2N3LEpyJUVUViEkcipnZWgmfnVCLzZW'@;
put 'PG1AUiU5LjZjYTQuIyIpUkoyfHxNNEw4K1FkXzFtLndCYVM3dj1aWV07NkgzSTljZlR9eVExcCRSTS8sVT4rWyRFa0duSkFEQlsxLiNMXSRrKHl6SWVtXm9DNndEekkyVHNuZmRXdTM3MU99bnJ8TlNMe21lM1Vgcn1pd1BGZF9UUE04Nyp+eTQpVHhNUV02RzhvI0J6ZDZyPkwvRzdUM0dRQXl9'@;
put 'ZWZCO0E/dVZLaW13Miprb2Ftc1BGTXN6O3lQN3RRP3Q6Xjk/NFFCQTFYbSp2IWFEfkleKmZ2UkNabkpDL0ZVJldvJGwoR25Eeyk4bG9Wc0YzOFpXVnMoO3oqSVFBQjp3eyFYU3tlIVt1aFhhdCN0K0ZjMEtxM0whaUV+LztWbF40KmlYfHR0djNLNmE2T1kjTyU1U3I5U09dMnI9ZChsZDlHUiwu'@;
put 'PFhLdVJIRSFiJkxJOXpuX3p+PXcpPlRRQCxtSUguNnwwO1Z4T15TOEIyRUpAVDZHM1V2SGJ4SVpQUV94cnYsOyI+QDUkVVIzSFkzS0xMQT5tR3QuKS8+NVtpNDtqPjZJWF5DQSIrLzVbJEkoYX1SdnNKYGN+N3drJHg0bnx0ZlFQJXNEdHliSX5SfS9CfEpJdzVoY0FVcmxnI09mYS55N1BlQWpj'@;
put 'em1ZPTJeXU08fFJqTjhPUV0odVMod3c9X15hbVcpXzpCN1gkd0A8QjVXWj5tdGtvdFVQeiZXPUxNOVkqO0o8OlslUjpWNzNGTytte2c4dXs/JXpoKWExM2ldfkRZe2QwQ1YkeCZ8OTYqJkZpelhOSFh2PzhsbUErRUdOZyR2OHxSQ2VUa0ppZ01scXdmX0RsZkFBS0Zge3cpLDxYNmVYMWcvUCpQ'@;
put 'OXZUbE0pMEtfTVQhU1NtSkNQYl0oYSoxSjNKX0QhXi5fRmwicFg5V0ovTko/XVd5P08zXXs2fi9ebXJFMGRhTjp9XmlrSl0oRCVHezUhLiwzUEUuMVEkP1hHLCFIQSVvXilCYSwlcTBReTU6IzBINWM7cylOUEQ9Y3dRUHdzLFkiXSspP1JdPDUmbyIvQklfdW92cWpFbyRqWy98L2ZnW00qbXdD'@;
put 'cD0hSiV+WytSbz01IXUhY2dtfGs5U1F1cSskLEl8c35fYCxiLjdEL3JvclZ6JlhzW2dsTzFCZGZ8TmY7elYqMCkzY05WdH1GM0hQQ3VpMihgR0I+Q05sR1ZPfl8pfVhvRyVAYjI/dG48M1dsYmg+W3JyT0taUkhXc2dJYj4xRzlaW1gmQE9DcyEkRGEoKU8sWkxmN1Baa0Y5N28wZm4zVUUoInki'@;
put 'WUlQdHRPdy5EeCFkOXdTPjdnZ0lhQiRmbCkyLiYyaWYvR1lrKHwxXXttUHsxPzR0Wzg2UXU2WCU2NXQ6JVFoV3UkYXlPdUlITmM5JS8oOGpRNSVPVnpTWVhEMGJ1V3B1cX1NJn0qZ3dlP3xza09AZk4lZD9iPkojUEI9Vn5VLDxwampVaUFtZjM8bUw7RGNNLmVFfUFbSDNmZmZ+JEh3Z1djfE8h'@;
put 'TiRlaWBDfEsmYEZ6Jk5Rb0YlaTd+YV93LjQkfnlyTy4+PikrYTshNElIQChIbkY1R2hHW2VHPzRyPFhUKVheQEh8YzJtL3N6dzg2KXk3biVyI1l6KmgzS1thbXZWamo8MjlZPCZeaEdbP1BsdV8wIl81YiY1ZGxHLighTTcxPHg7KykhNzNGYCx9SU54QmEvSD9wTTl6SW95bWNqLFg0L2JYY0N8'@;
put 'TjM8OHFHKXl8STEiSUpYU0FQa3tTWkBaRDVKU0tPeV53JksqLEYqdWt3ZTx7elRNU2gxa1NKTl1XP1VjK19xanFmaSw0fkdWbUtSRGl7fUZLZE1OXUl1UTlqZEo3Sk98W3puby9fenE1RW1OQ1hlWztRQ0ZzNmxOJixnfGksOVtSMXZvRl95L3hkMXsoSDZhRX1lfC5RdElhOnFsJkIjRXlTLGFr'@;
put 'WVMyfX5kUjJuYmpTU3NjJCg/PihYPmk5JlR+PlVVI0c1SD1NKW19Ln54MkM4VmNtSC4qIzhiNXcseGpoRmY9dVU9fFc6WGtGOzhCLmtiRG9aSCtZOzRpOn1pdEc2e1IkMyVMRSV9TXd2eSN4UVhVNkFuKiQ5X05Gb3dSOFZlVXwrX01XP1IvYFB6Z2YmRXlRLCxbLFt7ekNvREZEOmopYm88fGha'@;
put 'eSZFNHszWm9MYHRmOFhbUnYocUd2MipAdVopZ1EzZzskOWU4RUZ8OGpgSlcicjdLMjovZT58aCQxQixgVGhEUy9FPWsxUHU4fUhVXzZ+aFJqRSkhZy5zcF8lV203UWhWWk03YWxgbHg1eH51QmVCWWZxVUFpbExibmF8TzdiY3pKK29Be3FTIURYUjt+UTJTdWBKKTN1JVJIbzhrX0g+XzdIRUFK'@;
put 'XT1sbHU3Jlc9TFk+UTVXJUAvWT4vKUkyZlNETmdzJj5YVnwkcil7QlY2eUJ4T3tgd0lrWzh4QWNWQDh9RVBDNGQpT3RENTtwXjA0aElNPm46LzZEaVB+X0ZJN3k2S0BwXTZJeC40cjBDbnQ2TWxzKXhvK3hLOnh7VyhrN1JdW2AvLnc9d08+UDQ0QD1jZVNFIXteWVJRQ0IzSjAxbURXbz9yZEFA'@;
put 'dnArZkB1QG9zYUFHdFRVJFs8V0hXOCE2JT13byVXPHB+UTdqJWVwP3RWIVRCSWpoZXU7UT9LQE1yYDIkRUtwKEhYW3hgM10pclUxQmZ7fFZGYztDeGRLIUhWTzJKWSU+bEJNeUReM3EkKkUvUm1oa3w5NF8vVzFVZ2kvMk9kYGZUa15qcW5QPXFMek0pOmhqOVAzbDd0TzNhITZCOkJJbVpwMT1d'@;
put 'XiYlMDRyTmZAOipUVmtJWTMucGVBT3AvUWBuUEtlVnghUiRzcThdVmNMRiFHVHxVRDU7aFhwQjBuXXMxPUQ/S31AOTEwSz4jfjM/MklmTDE/M0M9N1JWdz9aSXFSbSp1eUMwPDhncTlzWFR6Ly5bOGh3ZnNaVV1IWGoxKVh6QihDOUZmckd+fFpoeio8VERvKylPVHgsZGFGOERzQllCMHgvPHMl'@;
put 'IU46UUVKWH0xPGJOSDBDSUJVSXYqXllnWDtbYSs3fThXT1FuW31SOHFbKm9UWl9JXU8wPXdqJWojR1VZTkdtUDM/JFsqZGZXb0k8JGE2SFdANTwvYCMkTj91bk8kPTt3ak0xdjVjL2xsJjhTRlVPRTQ4Izl9b2NIJk52Wm59UjpFS0NIKnpnY3N+K3RbZDBHZCorNUpPWkBFV286Xm92P11Nampo'@;
put 'LFNaM1N7K1NWb0pgKSF1OUhgJXJYNU5rVTNEVFp3WHpTO3xpPFZ0ckhnOndENUFsTkIwNnskfmZkdjBdRXQ7eFc+V3c5WTZ2eDNlZk8maHBxVUpMfCNgKH11fVBVOmt9ZSE8SmkmKmt4LFlOeSVKKjlAWCkrWSQlaHJbXnh5XyE6SWVXMFF7Z2dgam4yNVorOml6SmtaInFRRXNtKzhEd3BbKTI8'@;
put 'OGJPTCFTPWBgIkJUY3lzKFY9JSxobUBEXzY5Z2NXIjBVWFA8Nk43YV1CakYvMyVZdHdyS2tUO3EoSVg4bysmWVhvKGZ9Kl43ejhVbEM1TUhTY1p7ZVlidUcmYmk1QUtXen54PzIkLyNjTEhpb3FOTCFBL0skTE57aXIuYlAhRl5zZzkoWUxFeEEyL1tFfmIxMjQ6Vit9I25HZmdJRDI+Sy8haXsy'@;
put 'cy9LSXNrMnkrNUJoSCVrbzhtUnF+PmliTiZKdDxwOn1fdVgrS3N9LkJSMVlqOjN9P1VGXlNEXkV5aTl2QCguS0JPRllmIVJpTEJSY3FscmI0ci8zR35rNHlAUmdSKlR6e1FhKjFdM0ReNHlQeTFKY3h6WFMqWCs1RThweHhPZ25qaCxsWjQvdiFSRjovdDNLWEBLNS48W3o0MCZHWmFvNDUkcSo8'@;
put 'NHpoRVMoXyM3OnlJTUh4VW4qPFl0P1R4NFtHODtbNU10aGI6QmpQUU87MzNiYV82QGh4KVd0am0jaiNGQ0x6QXp9cWJmfkleOSMwc1tSa1JeSysjcWtnJCt9ZG81fENlKS5tMDkzVFJKY3BaeSo1IklXbXtDOXolWzdVJj10VENxJm13RG18O31gdzBhIV8pVCZXPHpsbjVxPUZ2dy5Ra2ssX0RT'@;
put 'S0NdJjR+RWVEQ048ekspNXZZPmg9TWJ4eVhQUW9vNX1YZi9ZMTlWa0ModzB0PVF3QV59Nng4b0dkWiw/flNHMi8qQF8rXndYfWgiQ1U6Wys3LjtWYUJxP2dqOkxOQ1VvTFsxPTt+ZypQYnYvSnNqM1M6dlUwbSJKPjBUc2ZILExvKjsuVFd8SSx+YXBtVn5nZ0Q1dzwjOj1Xbz1VO0M7Rjo7Ujl1'@;
put 'TD5HWGV1NEE2NitDKmM5VTFmVUxoQ0dJRGEmVChmcGk7SU5QMDljO0pMY08uSEAwMlo+Nn0yek5yMnBjPlViPGg0ekExLkh+Zjs3eSopZ01dOFZfWThCOWdDYnwmaUM3MC5GdEt6fUB8WHQzRT88IXEpW0UxYCVCV1QkX3FYWEtdIztfKzxFL3I5I1RmNWNpaSwoNFY+SyhiaFJEfT9aVSoqSFNO'@;
put 'PyZEIW4zVERCPigzbDhsemZPLDtsP0tRRkxOJUJqPCo6VTckSk9iSihVLnJwcH4hbHYkbUY0Wyw7KVE8QGRVQGYrOWQ2JCZlIk42dHJ1L3lZcjN7Ri9wRlgiW3YsdXkmWX14d3xuQXJ7cCxEZUkxZU9fRkp1dDJxfWVLbyFAdVF7ZipOaXlJclF8PkFTOUUpazQ+RDA+Y05lQG5EcGErM3kibGBf'@;
put 'U1c4OVdYYTE8RTM2L3o4N3l6VkRUfShSPE9gWXhEMUgme309YVd1QGJrVmlUVVo2PSE+KjxudD9BcXllXlYmPj9hKywlbns0RTJua3E3PlIuPmswLE9KU19jQHhbR3JzLiN5U2JrMTdRUzgiVD5FTnt2QDJJN1czPnF5W0xoK3A5SFVnOjsyaXhmTXA9NGw9anlEUiImbG5+UC9JcnBYaz85ajsy'@;
put 'K0RiNWg9bEZ0X3hKNmxOU0BUIWNXT1tyfWAlISk6M0QjK0o8QFRkTTZqISE+W1NzV3lVSlI4bCUxMF48I3huTms7Pil6YkJZX0oxKjglTG1ibnY5YCteKiZiY0lfO3Q+eyImP1hvWCg0e15fe1BzUzF3cVlSYEUvYyt5eGFxNUtVZFksPjJMMntBW0VEO0Y/KyZrWENpZDVONCU8Wz5uW11VImRH'@;
put 'cDZJYEc+S00sM0RiYSZNKXZySmt4fl4mVH4pRTFDN3YzTnVpUEJKbU9YMzc7ZX53OCYic1FYMFdJeHdmXUEkITdAK3x5LyJJTTF8d2p0Xyg4Q2c2ZCN9ck9hXzluQzxCSn1KcDpCLnE6MEBPXX1IQXkxKmQzLG1GeyozZCM8ZDJ7Sz1+flNGbihEMm97NlNzbXBVK3I9ckomYjQ7NDZVSnMjSHhY'@;
put 'On5rfSskNnF0U29hKGlrYmlGQFh+ViMoL2Q0biM0d0wzRTkqJH0lTnIyQ14iRyFKPntYIlhZT0NRXzwrfFkvWlBuR3B+Njp4KVlwZFolIkJbN3ElZFQqNWd3Vysld2whbUdvb2EzbFg2Kkd6QlA4bGolQGxIZWJdcD9oJCFJcm5LfXwwPTQ9Qmt9WWdAUXU7PC8xYW1JfGNYOXBsTX5RdiJkfl5o'@;
put 'WT1gW1RRfFR1fVp2aTAjVXhlX0JFYn1nTlR+czBIaTskMkJQcihjYFoiaTI2Smx5cCxoPypwIWpMIyUhezJ6TWxQWVc5JH4yLG1GPFY4Pz13UCF3MCEhMHJXZUkhSDZTJHhJNXd8RHRHMEV3V0ZdTkFaZTd1fFZve0F2YF1vbmoxQWM/X11yTXlIVkRXbWZJNUphVz8rSyNQZGx0RikvfFlJMzU0'@;
put 'flp+LnlKUFtJLjwjNzpGXV1adGNSI3ZFLnw6WT0xQH48THhHKUA2YSNVcCUmKUEwQHRXQiVJckZ+dDdtYUd2M2I6fDNTeVBIdWg/OmZ2RnkiNEJoXXh2PmokV3k5djhZOGJkSGR3LnR2NlQiY21scH1zQnZuKFh6Z0lhKFVhPEZENm5ORHBFcm9nI3JrbS5fJX0xR3x4QENmJGY5aV1IaCRpQlJ7'@;
put 'JnlLX2Z+MmdZeEApVVRwNjAmVDtfMWRvZyZ3SiZKX08wJn5yOEB0LnV4UzRbbDk1JnFTfiZvMCFqMklSUXJ0aylmNDFobEVOZHgoPjBULGRfa3YueHZWLzY6RT93czhTSyk/JiNhS3AwPUszfnFsL3NSbnw1bn4yYzpaR2ApUTlJX05OMiU2PVQlJGB9emFdNj43fC92IVNjVTZFc1ZQNFJ9eUMl'@;
put 'cS5eKUw5ZT5qNmo/U2Z4RWtgTF0mTSE2WVNXYns9X0o7IjYxd3M1JGh9WDl7cCthXkVELDYxbj81M1czK2M4azlae2RPcVFwOmEudilTTU9WPWxGbSV8NTlGNFsvTl1CIUE9e3dzSm5udkRSci5Ie29OT3FnOz0yN2phZWExeEsvTTdoYlVlMzlyIzl8e0QuU15uS01rOSw/U3twQCU8Z1R5eCV4'@;
put 'Sil6VVpvZF5NMU84NXVdcWI3aFkhVDdUO0BQI3x1Y2N6S31FMC59YXV5RiNKJS9jXS5VOTZ6WTVYPXJFcE1wSChCJWZnN3RTelNjSkRKcURKaDkibVlGK1UxVHh6RTJxelNpdUFNdy5Ga2ZLKWFZTDcqJDAwIlpbZGVoRH19Ny8iKnx4bU8qRTorekdhL2N9NCo5O3NBOENyUlk+MXdXOU5KZFc2'@;
put 'WWlZdDQpSnNLMzY3QE5SLChMaWRybW54aHo3K24oOHMkZl9xa0o9RT9bdC9CemEhYnZDPVBULmBJbV5gcCxXfE45MyVQITEveT5hS21TbTN4YD9AZGtjSytIQl9gN1g8aSYxMnd3IiN3cXElcTdscD52KFtoQVpTaGYocVYoSTg4O05PbVF2eX17ZGlzJDIyeGc9ZH5TM3dWcXA2V3NPa2lRaXVZ'@;
put 'NUg9cGI+SzYvVmQ9M0FhRmA9Jm9WIUhJaWpHaD1FdlI+T3s+ZDY0PHJefFM3Omp9N2BGW09jMzw2XkohT15kMyJhdzZBL1M5KU1sXldXU0lKL24hcUpNP3R5PktgZkx6UEg6VDBtWSljQWtKRW93eW5lZnpqbUN8dGZSZnRAODcwIzlaKDF2MlNCeSw1PHU/Z3o6QSZ3TVc0O1lGYzkkUHBNV2Ux'@;
put 'TWBWL3QzT1gxaFNhP1dnY3ZYflZVQnw2aHtrdE1feHk0KUkrYiEjOW5DWF9lVXxrNlJaakp2VUcvOGt1Rn5+W3ZINU5bMEVHQX19VmBrL3BqZFRjbUAwdExqZXFjfGFPMzBoZmdncSg9QjVLImczYS9qPVRAbjtqYTFgeTBQV2Zgd2hnfHl8Tig/PDBdeFt6bltnXUBSczhrMn13UTdCbikvPGtS'@;
put 'JlBHMXw8RmZ5O3kwfTZYTEp8WCZueUpGXndRXl55OVZjN0wiVWtNcDl7ViJge3dSZTAvXmcmQUQvLGRSaCMvNkUyXkM4ZFhBK2ZrRzVfXSsrWTlFJDh7dURvPS4lPE1uMHdQe3woUixEWHhAcmJHaDY6eCNjTCJPT2c/L3pSX2VFMyxULkB9P0h4QmUzNE9dYUltTks+dVp3L2wrWEozXlBWQXVN'@;
put 'TlsySDw+SX5zR3F5RDImTTRHSz51NThbPmVEREptbSE2Oy5YbFpdd1Z2QSUoYXdgO3d3bClMUk5FWyI7WCM7QzNjbjRkWjA1dUQjJjYydF8vPW08K1Fxe2tGW0lLbyhOdytefiNOQHM1O1RWfUJsVm19YEdLWW0sdUpoLGJXJjMxamd2SnUvZDRAd3NASCF5N2hIL2VFKysoQDJjZGlDNSZufHJ3'@;
put 'dVhQKVNpI2ElOkZCdXlWdFZWQ3c9RDhjXjNXdCxYRUA6JT1kdmBXSUh1Yzd1XnFAT25keCx+Z3R1ZClbJTdMXUd2XWF1Vjh0QkhFJno0V0c6SipHXk96d0NySixvP155YXZRQVJ9X3cxWG1OVjNkdSQvekZqaEFAT0IrZC4/VSosIi9CV1NQTm4yOzhaPGUhRkZ6eUA4YyhoZzRBVU1uZiheNCFX'@;
put 'eypqcFBiQXR7T0QoKlB5Tm10Qjp0cHVCYXhaIi9+fWk8YEU6fF9uZ1tKKk5YPTBee0kicE5CYU88Kko3YjZUVSM+S25wQEl0d3NXXyI/UnxqeFlzZH1jOWpvNjFndypbQlhKYn48aiFnITQ4NDlsP25tbFpPeVEqYDNiSmdaQGkiVD1tK2E/XU5JU2Y4W3ljT21MTW1VVnArPWwiP2JsKi55VUt0'@;
put 'b3RodnJBVzQ9Vmp9RTZAemkzKGspL30vOCZlYFc3clFhfTFyQl9uRG4vOEc2UEczVSxRTnViNmZjMk5KWk0hX1oiW3dWXzYqZ0ZJQD4kMitNPE92W0FEO0lKVTxuK2FiN25lJlNNZ3ZaQEsjZSRWYGg+bX1HT1huYHQvLk9dVGsrO2JxUSs0NlsyK0JCNSM+NWoqXT0uSSFXKCRCQlU2KiM6N05Y'@;
put 'RkUvW1pTYXA3JHsqRUM3JXVSKHgpUjdaRFg3bTpmVXx2fjAvZXEzMi4ve2pOPWlpTyRUQDUhamRBZn44SCJne1Z5OyxKc0orY2IrQVE/alZuNyFyZkQlWi8oPW9kVmdMNytPbm1kTHIscit7WzF4cDF1aUVQcXF9LD9pPkoiZzI5U1duRmFyTDc7ezw/ZkM1Ump5fmIzQ3M2Jn4xZkRtRkF6YChF'@;
put 'YFFnQHlNbUo4aXRdfiZKcn07fnpfbjBCR19HM3tOTXpeME90Y0M8TDEqNV5XMWcpUWFsNnV+OmtHcml7bykqcURPKTAyOTxNOFo0KF12NzlCUD91bEleXk0+KGJ1SVF3Lnp6PFVYbj5bWSU/X0JacF1uYVZKaFlNKmtEa1ImfiMpRHU9UmkiU0RMKko7PGhSPyl9S0g1ZFdgVSt9YFNjOihlc25o'@;
put 'RXZeIzZ9eFsoKHp4bi8weT17I3xLbHNOJmtxSzxYQlBXQDl5eUVVd3A/RS4yYCJuVEIiLDtZIT1TKXZqNSg6IlhMRElHO2NSKndnTSFKc1Z1QHB7O1VRRHM7eWpIOjtzVFJLd3IzfncpWXYzdmZqQXV3c2FXRUZMMENNeiQsa21Ldi5SRlFvR1AvUU0qaz4+X3E/VWl0W0dzd0JgKHdma2dJLExV'@;
put 'bDglfng4VU93blNDPl5LQGhWbDlCMj96RyhUVnRJPWVWT3owY3tEOFlSfnt+JFM9Pz0kbk5sZ3RPTzQ0L106IV03WSwzQG47bDlyS3hZZzx+Vz5AQiU9STlmZ2A1bjBYKjM3VFBsKFNzREJzcVhneypSaD5FbzloVk5mQWU0dTMwRiVmKmQpQiYkMDdZamI0ZmlLQE9mRk1dNWB5fmhYZUgrU0Q9'@;
put 'Uj5RcTRzc0pbdjFLJS4mdVQ3UltOcUAkbGEvQ2AjWU1IOSYpXjJRYE91T2Qxa0c1ekN3Zk1vVGg3fDZfKTYkIT8rUEc0YHF0MHZtI2tNXWJHWF06eEs9MjF1aVBQNkY2MTs1XnVPIiJfS1EudkJ8aTk9IyQqZSZxdVhiJXFiZE9qbDtVdkEicDMqPWRxdCkzMnNAXmcuVzhLZ2k6dDlnfio7Z0l3'@;
put 'Q0g7eVpFRXhHIz05L05DOG47YkFyQ05jaHRsPklbd2FqO0RiYnxKYzNRKCx3IVhuP15jKkJbPENCRyJyZn1rXjNXZDkmSnNFUV52bUkiOltzaXVGTURIaWBCQ2NSfUt+Qn1lc19sfTc4SFA9OTFhQU8mMzUhPFFbU2t+KUJsfjgkTnEmdD4jQGdXL1A8blgmVEtgMWxZNElZdjFQel1LbHpOc2lb'@;
put 'JihBO0VtX3J6IyltbEVybCF+S0lNUmtHYndPfTV3Q3x2QlVDZk1VVzlwUlBdS2JPLiozd3QqImlRczZYeDZpNHJNPEg9NFJEQC4mfiIzQWo/W095PUxBdy9Td2olTCQ8RzNtUFFtPVtJYXleYHdRYnhiXXw2LG11TEBBPltickAiM0hnekJTK1o7UiJUfCQsYXNeKCxSejdZPmd6KSt2eWQmTiZz'@;
put 'cT5ATHI4el10TlNBc2AqJkBxPUJSW0xgPDM8eSNeezY/V1UuMyN9L3NFOjBaS3IvUjc8ZENhS1JDNk47LlhtbiNERj4va0VUZyQ7WjU9Pk1XMXV+XWd3MXw4YUB1YUBdKFAmZnsjVS44YClLQUZ1M3RzYlhEeTR0I1M9NCQpSzl6WDM4Ik5nNDRSSDNMMDBzY3RMNkJ9b3AlY3gkNWsxLGRoX0Bf'@;
put 'X2k0fm9mQTMrLDxKWTBRNUsuP2dCI0F3SUFncT1QWFhkPFRRXmNYW0xHaXBDOm1JUVpXZmxdKX5qIzcmKEkqTSpfQjlnN2tHPEVYO1MlX3VjcH4vU2crQGEwamVmfCQxeklEazplZm9mfSw1JF5kbXM7P0IvUiosJEN8Vk4yUksqZlVnIVJwKFA2O1psdnVeI3EzI15nKnBdcj5NYD96Y0J6bW48'@;
put 'OCh0PTVyX3xnSyF8MlR0fmlZeDk6ajRXSnROWXhncVE/TH5ARkRMNCFOWGIreXZ5LyltPTo9OTt1Lms5OVNNaEZNYVVHajBKZFU9WzFjYmZlQHYmUko4bVphbFNXeSt2eHo7fnMyKVppMmNsdTlub116ZV5QWWxkJVhxITl0fHB6TGsuJGx5fjMwOCVYKUdPX2NPUGAxI1goYlsrWlRrXT5xcitw'@;
put 'TX5xaVtsRTpQUGZibGxDfF4xbkRpKUE4cFVsYXYoNDczPXpWVXxjNU9jaXIqWSVDMztHOD5veW17alZMRDA+cjE0QyRTe3dwQSxuST9zTU5ncmUyflUzb3hZUjJOcjVZfDA7O35RJU5kWTIjNGNxaT48LiomX2k+O2kiQ0VgME4kNUomIzZqI2Q4ZClHPUhFXzB2fTJMdlpmJVZQMUpmSX1AUU4u'@;
put 'K1lsfStwRUZrdWNPSFVoL3wiLG10TDVWLjY7dGtTZ1h+dW40alkuYSRyKFtgXW8zZVA1allBWCUvKzRKVV1SQUBbdkljdTBZY1ZTP0t7M2g4eCNNNG42cyVCYSs9OHJ2XT1oJFd5eHMkNks6Mm9ta0goZURYZEE0IUBnaWx9IyFURCkibzBjVz4zUGArTWw8RVZ3UztIOVtjd1hvWXx5ZigiN1JO'@;
put 'VUw6ZF9MJkdVVElabncpZilzJmEuLCE/UGVJbHl0fCtVZnRmfkNge1Y9ej8mc0VJcVlLUFhOKUVMOkkjal58eVNVdHZqKDtGdihfbUxHYG9JOCpYcixZT3tvSXFHXUU1Ojt5NEJFMHpTWEo8MEorPSZGUV1neTZ4Q0VVUlRJUEIqfj1MPVRVQkBbdU8/JltIbk9ISihRTkljNkBeInhMcTQ+KVhG'@;
put 'THo1OV1Pdk14YERlKkYkYyluVHJQe3EsVDVkais4NXY/a1FHWDtxaiJ8STQ+cW9aMzYqIXtZSHRBI2glMHZgSjNtT31wKWM6Y3hKfDlCenMsTmY0RFtCUEIuPXJZOkhsdWBvTERzc3IvR1hhNUlXdFZdLFNAMXQ8ZEY+Z1VdOzlfVHxsVy5gVUspTHNETkRxdnp2KkJgb05IemlKO3cud2RaQ29U'@;
put 'ajFiOCo2KVd2V1Q5UkoqQj4yQmU4PDJyaDRKSE9jYXw8ME1CV3hoO2R0R2VqX0lEPGNsSUs4LH03Nm0pWzExdzZTc0dkOiUxfWl2dGxhaFdWMFtdNit5bH5ONGFrIVIkb2RGP01jaytiP19IOls1Nk1fWT1gWWs4e3UzQXRqNjM7YlJfaU4kNk9ic3hlVHlxWSpaQyx5QnAodng9R3dCaGZlXj0l'@;
put 'UWJAUFV1TVBvaXtRS2hXODV5SXBQLygxUyhPUyZYV3dINjdDJixoViorNTJdSVQyUXsocjl5U1BYdHQhN0Y3cjdBTy5RWGVdbittSnF8VilNTnhFbjRXMWtRdTJEbXFpLHQkM0sobTtqbilNaWtOcHNfdjhhJnMiK3l6WSlyWVEmQVMiTFJERE8sPEhjQlMiYnIjY18qdm18YyFGaHw2IlUkRy9Q'@;
put 'anxyQihRLnVyOVdNLy94Wyw2dmxyZX5oPGVzI0Imdj09Ky9jTzopKjI9Xlp9M0wlQiYqZTA+bUEjUT86YEtvTjlzSjd1UVFVZChOfDlMU1ZGfDhsdEJnekh6IXg3eS5sWUM1eGpHbGFVQV9qU280RClFOEl+NCkxMHd3TDZJL1tUdy5xbE4sTTVFeixlNEdKZnNoPTFbMyVmbz1wVUJAXnR0dFpU'@;
put 'Xzk0czZQb106YSg1RE5OT2NHPil9O2J7YDF4UER3TTtsLEV5WHVPRUIqZU1FTjAzIWR1SlpJdVB0TihiRV5DVCZHXllVKHV8KjkrMSZiOm41ZCwkWSY+bnRfQ1tAKF49cn5peDBEbCVLRnVzX2kuK0YjMms/Ik5udG5ROVBYP082WStUaUN+ZU97a3l6M1ZBRD9uWCU6PGw2bHcydkglNUdjdC5P'@;
put 'PlJVcDduKUdAWWt4azBhXkgsaW0jTztoNiQobT0oY2QsdCEzaHg2fCl6TjglOX1KfG1PdDxuS2FTUG1YakQvSkMyWWpUKkJMNlBEYiFDMlMvdzwkQlZzN0EmQUY0VjpjUVpDQHRuIU88dCs6KDouekwsJVFzMGljRkI1X0ckenYwJkU2Z0d5QW1dfilPPi9xKUtjSiEjbEdncWdqRGtASDRMJj4/'@;
put 'P0dOVmx4elJeKTdsdCJuUSwhOERESWlrQDM2fExMYiNuKHNLSGR7fnAjKThRbUc1QzdPT3VZdUFXO3lYSXZHa08wdj1ybFZtOH5xUlpIWXkrSTEhQzNuPTApNzJ2Ukd3Sl5xLnZGNXpEcE5beDQwXn0wd2ttcTFdeXY+OT1zKWJBMCMuWmF9V3cyT2A/TlAyWG1zdWo0UWNwUzpGaXk0PEs/dHgp'@;
put 'PFVaQXoqRlUrVn5SY1kubVB7UWR4anFDdT1rLlUmSCpZcUdZOkMrN00mL3RrWkJGe30rT2JNayJfRl8wJVZgRnM6VzdBR3BjPEN1en1lNWpyNVUrWDszLHVYcWA3OVk2Q1crbXkrL1ApSFhEP0hbN1YiR1hOa1o+e18rMnNSKjlkR1YlS2ROKkNJa3csMn4jIUpucVIkWHMiIT56ODFKTE86OFJU'@;
put 'fX0vV3VWQmtRISg8bUpWKlhRciVrfGtIZjBaP1FlNFBIMnhyJih5Y0JWRiUkQlduXywrN35wSW58Y1Z3YHo6LDtJTzFkZFJ1K2Aybl8/bFFpLHhxW0IkbE96WEFPayN7K3g5RzpRa1FfMERxRHcudSt4T1o0Uz8jUCFXPFJvOGBddWVZfi87LEVRJiVVeHRtZnJNbz9sRGRXPnV4Nz5NSnMkOF5I'@;
put 'ejc2N2lEVVQwKUVnOnVRZ0ZsJGs2bVlCUEQkTHZfa3VnVE17RHQrTEJ6SWtFNzIheWJseF99JV8vbCNRL3RIVWA/MiZYQVlGJU5UTkNyIj4iamkxOHBQRFBPfksrRmsud2NteHZ2M1ZbRCF6bnU1cUU2cT5TPnwqeEU3TGpRWWxrQHwiIVlQYG8laG4kK2pnNk17Rm9OODNlKSg5aC5SX0hNZStt'@;
put 'SElEM3FNYzNMdW5gRlghcUZPPyUyPHZ0UE5IcCFvaVBMei9wT1AqWkVSdnFzOmlYRF9VaFFWQmpXelV9MGRPbU9NY1lMd3I+NSlxYlMjKTs7RU0lUVJeLD8rKnt1P3ouS0tHeHA7NW5+UD9VYDphfnUreSgjQDRZSV8valhtYyV6b0ZAcWlqeD02a2ZFTUVkPDxOSHs/MW0ka1dqZGdkWSxgZD90'@;
put 'XXMmOzIjUXo5OG1FYE9WUytQUHJPNSxtT3N+YjA0W2tNTG9KXk4vQSZOQW9faltqRXtNOGtrUGpAdi94Pk19ekYpcVldNCVRYjtQej1NbkBvNFEwOHVtOWprLzsxaiVSc08saFoycmBefDclXT1lJksxbHp6Ijc8YWl6JnY6fEtZK2p8amhNa3dWYiM6O2pOTzphUnUreT9XJjxkI3JVKmBxSlMv'@;
put 'eUxoPUd3VjFMaV0wdU0+ITxeIVleckA/PnlzW2cwX2UyUmFCQkFvRyY5ZTxpJTpJLlVaTXFzXWIsd2NYPltDcGhXLFlVVXtbamJaJVt4OFUvRGZ8aGFuT2NDfCZJMlp9KF02aSRVWmdrS2s5RSt7QzV6SEl+cWBFZGI9fUxJXT5NOHxudUh8QE54PzNvVlthN2cxb00qbjFdKjZPaEAxXzJVSVBx'@;
put 'anpwU3JaLk1eIjgxPXc0dWFOKE9qWG9BbUJ8W0ROQF84WW9ZfW8uPzY7KkMzbExFcXt7P2VZUGw3OjBZeEc/OjB2Z113anNmWmZkT1o6aW1CcCtQWURESX5GUnssaUBXS29nI2FzY0BqWlNrb3o7JDIhdXNZMjZHWGpyPyFqflh3UV9NTCtDa35fSXZJPlBsLmVHO2x7NHZmSSF7PDBVLlFAUS9T'@;
put 'X2EzWmo/UD5dWE89O11Pd2Mqbko3fTFMcnRrI0tsT3c4XWtrXT82dS4rOEpsKD46bVJDKEM0RU9KdCM0dUxETFlhZzlGPld8TGdkTiNkIXNQYHo3ZUcjVE1vI3FPUTw9MH43KnllP0FUe28lTz1fRDF9VHxyImksNXlhPWRsQj8me2l3Smwmeiw+Z3t1SD5LQ3tRI2psRDRQUzk7MFYpQ1oqPz4+'@;
put 'eEQ3RDhFYSVOKkJaZU5sQlJ0TkRjMXEra0V9VHZUXSJJT3R+SSpWPkZUcyEiMVVAcmdUR3MmM244XXV1a35iQyl0JlpgSDZlOVRZOVdsaGNPdFNDZS92RzdxO1Y/bnAlfl9lKm1jUnpBZmZaKyFla2dQSzJBJE9KNXVVMF45czdRWStRMz1YbnVfeixIRyM+M0kjdCx3Rzo6VSZBUC9SISVXfWVQ'@;
put 'clJKYFJOUnhRNzF8T2BBQylfeE17VHZjPGF6NysmJGpzSUxxTGVKWGElQjV0IWEqbS5XJXlQfCF0S19QezIqQChYPmBDY2hSYU9TQDpWcTdNdmgzd3tNU3ZKX1RZYj4lPHZmZ3BuaGBPb3J5dmVldzAqZ0VSdl9VIk1mVE5rTiI2Wz5MMlVAN0shd3VGMjZVWkFNe3h2SE9XM3VBakpfND1uaEJ2'@;
put 'blY0e3BPKDU9WkYqIVs5akZbdWlqayxhYkx2WF5EKlprVn1MY3dXSzVfRSwyZnxCMGY9SFYjdzt3UnRKOmlnd1c+KGZJUTRUIiZCSlNDNC5LLDZrQXpoYkkyZ2xpVEtVb09XPVZYfVJHX0NsMDZib0oqOT4sJE81T3IxNGBxOE1XVzk0RUNoK1VfQnEoTV9sfUE0aU1rcCZZdDgsL3RVaiMjPHFN'@;
put 'OXl9IXhbWyFQOC44RmI+Zm9aQlI2fHJPd3NgOi56Z3pLeGM6MnIiSzNqWj9UKVhecjw6Wj14N0E4YCRyW1RrYT4xMXkxZUslYGIzMkxBTWxhdWNqKXdQalJAVnNkcTJCQUNRRE5lWE1PVHo9bzhvPyZNcl53YWhiZT9KViNCfXYqTUBZNSxKfUw8eE1IKy9PYzIpInJkNDBiPytQYjR6UWg+YXAm'@;
put 'I0JkeFNZVFpkV1Zsen0pNlgyPDdvPSQlbC8sRnw7cnY4YDl2eFcjNURkXX4+OCx3JSEoSFZKdmhCZi5pYDNmKWRGQ3s3WElufSYoaVUzfStnSisyVDZNeF47OXh5KUFXdU5UZVBDS2FmJjVbV1ticS8qUiJwWkNOeTFJaF42OEg2JmdPaU8uSUx6NkJLVlk3OitsJWU/MUtJcE9HK25PZk4qd2dQ'@;
put 'S0cydGw0UiVSdE9wPXxCbk4jfUp0YHlpZzpvfnc/fGUzRywqSjdIaUdMWF1xcWYuUlB0K2c+ejhSbjVTOHpLMG5AS1BoWkY5WW8mUypJLEtUVTlHODhGYUYyRD4pKXRzXzR3WUU1ciRMKFdmMm9OJiliaG9wSkZFYHg0cHkucTs2WTJ4NWBxeFhIP3wifCsuQkNBc35ZUStWTWJGcD9oJH1XdzEk'@;
put 'Y0o7SUdKMl8jP0luOn0qOG1KeXV2SWFxQVRAKjowb3VvbE9fPXJpeUQlfjt8UWE+OkVnbT5YWFk6cWI2S29TZ0k/dENTPjxGOVpZTCVlblZXQCk1e0NHTlI0O304SHxRWU5WU20pLyIoYlN0TDpNKj1IISZtaFIhJXd7VEBNS05KKnhUTlBdVVhPfDRCc30hRShGPSt5TCJdQUVRX2h0PU9xJm0h'@;
put 'XTJGKlp4RCIhbj8hNGZFLkl9fDs0TkNdbFFpdVNlZnFyOC9rTig6YT5yRW0vOClbZTZANzk3SGp5ZEJvQ3suKSJzUzJUb1IsRzM5UldsMHQmPVsoNkhoOFpGOnhpTl9jQjpyOjpNPG1HcG5kI2J3SFIjOjk2SGg3eWpMMlVERyxicHZRdmF1OiZZcSNdJnAualoodW87cCpFYXBzUFpzM3U1ei9x'@;
put 'fCRgR19gZCZMMF4vPjhraUdKRGxdekokZCpEJFV3VGZEVi96fWtATXMuYW56PSIrVVY+V0smSjpIY1tJU1U1UjtfVkc+bzplMG5oND5leHJ8SS5KUm9OTn0+THxiQiMsTkorRkpPRz85eSQ5fDg3QHFnL2BSVl5JT3JRbFc+OkdqNDI1RjhRRlRIT1U0b3R+fmMyNEpMJEo+Y0ZNaHkjanpvWyFT'@;
put 'UHs/Y0w0ZHpqfC9ZNGZQYWpnUWp8KHY7bUl3IT0wV01ZPkovNH5WTi9ecF9NQ2Rjb110Yz9SKGdSa0k6V0lFPXl6NlZlbD9lJlNpMl5fbSNROGRmbF1pejk4Wkp4Oj8lL1lSWT4wT0olJkFEeUVKZX4rVk8mZlVrQVtgPkddcTtQQkZmQDA3RyhyYkJpVGkhTUdBTiYkNG9IVk5MeXpyMC4zTWJC'@;
put 'eHB6Kk1oelA7amFiSyN+UUFAMXVMJmtAImFIKmRKIVQzJmUqX2M6QkRIcGQmMVd6QXd8TGZtKEtnKSsuaGdWW1MrfnIpQ1E6dEUkWzBDQVcvbHJgNm1abU5nQX11IWR5ZX5TS3trPE1rQFY5b1lfQDwkcildWjl5Ik9FSztBR0h5Ky5PSUU/JjAoR2cuTXc9Tk5YL3IsVXdXeH4jMjIyaTZZN3FW'@;
put 'UVlSeHZlZzMpVnRseVo/bEs2fW1GV3xueH1DU0tUMkV8SWVpNTRrYUBtbGd6VXdtWGJHOV1femtsMWFUOkZuW3YwNlc+N1I2TyI3PWM+VDwvc1ZvdUx5eDkuXkoqZ1Z2JW50dFAsdk5gWXdrSlp2PjJGTXJ8T3djSXNMb0QuMm9xTGlFVmFFMUYuaCpIO010X3tjJHhWUDU3bigvKUJlQTN3ZkJp'@;
put 'W2JWdy9TQy97OG8yeFYsKFtsaWYiK0ohKzp2UUk+MjdJWUMqbTVFdXlfP3Qib3Z6fkxeMyJhM289MWgmbUp2eW5VZ3phWTokOFkrdXBmTjdLTURbS20sWzY1OmZMZVNSRW5Eek9nUEg8PEdFfSFHKF1taj9uS305QUIwe3JHOE9EKXFoIyp0czJqZFI4Sk07KCM9djlWd0VkNlNeVkJ1bUtIMFR5'@;
put 'R0xQNlVTN25JY09iWUMyeVRgXyxkSlV4NzBJRDd3X015MWZKZU5KaEJ+JllXWy5AMUUwX0o+JjkoJFRxQ2ldPGh2K1dPVXYlKjdkNjs2aFl7e0dGWDNjbCJXVG5OeFVYS0dvZnsrd3A3PDYuKWJRUmh+SWlwbGdRVjtwVDtmOHgpLylFUkN9UTpNYkVkfTdpdkE4MCY2eyFHMyQ7XW97Vjdfazss'@;
put 'UG9CJjwzViloLypTWDZHfmVnJHpBVi9YTn1tKEtkPnomK1I7O3N8RnFwKE5we0hjJFlwcUpZR2xaKHFfaWRHcSxZQThLdTZRMEphP3srOUhbNndxWnJVWjNwQDtjc3BsdWBpUSpnflQ3Jig1X3k3OXZxRFhkPV4jO10vOFYvPixWQjVUXmNWV09CbENsL2NmYjp2V3x0VkRGOVBjUlpAXyN6RE1N'@;
put 'KktNOSM2Rl1QU29UMlJ8LzZ2ajlya3dgVCEwOjRkZjBQWj9oJCNIeE4jZ2FGbUgjYjE4OnlxZ0luK0ZoL25BKmhSW10kcnVGQCw3TC5LPGk+V2suX211ZjpYTXwwNXFQIzZ5c01LTXhrNUB0OjwqTi5TO1ksRV58XVBfeGxFRV5MV2hiWGdHSkxNV0hgcnk6TFJwPTVQPndHLjJ4N31PQGYqVm1k'@;
put 'VXB0SEgxeDd9T1EjVTVHYU1Zd2JoPl52IkNIISUrdjR2RCZXS1p3Ql5dODMiK3tIQ244Ni88a1FhUGBsPTA6KyE4fi8oWTdSblJVb3YzW1p0U0FyKl9dY2NZK013ZkZLMHFMQ3tRZXtIKCM6OXg+a1N2QmhzWW0jW1YwQEJNWFh8WFZYNVF3VzpDZ0FpQE5RblgyZExuSGo5NG1AVjRdfGhXdGhw'@;
put 'PzxWdGRBJHBwcUNfPlRYQEBTNWxIb3xIbj86YzNEYEVxRFswLlJSdlQ1P3JiYEZhc3lUNGA8dXJKbi9idiU/Rz5QbFNUZWRJbkBER2YqSmVEbVpjKUJ6NFJlKHN7KlElWmpLa2BIL3JzLGB7UiZ8VytAVnRjO2VHcnM6aXo+JkImQj4/OkxrKio/LFJScWBmeEl3NUlbRUNWYyVoLlFiZSZbekcz'@;
put 'c0BnXyhlOCVvey5LZSgjLD5yU0YpcUV2OyRGeDw1bDgkZnNZeHVqO21QZm83ZWdAVj5RXV1KSD9WWztlLDU0dy9bWnNeTllgO2IyNmJAOF8penFOe24iOSNzcHk2K0RLcnkvcXZ1XnZ1K0QzYHVediJDZkd8cVBAanNhK0NiOF4oSzovNWVYP09GcS9US2U1R2drPj14QSUrUiVgSHhyZ0JCLiVj'@;
put 'Qk50W1FVRWksa0VeeTZWfmk4WUYqIXVuUXcpbGdfXyE5XyE/REFpUEdGZT51UjdMM1FscmFZSmomOm4oTkAiMlFuL2J2S1VfYF9XIU19Z1omNUx+THVpcl9ARTpGIkY7ViMoVyNtMy84SWh6X1pGZnR8Mzl6bXhianRfJilFbWp2b3FJWGRTOCleKU4vdkVeeS9JPzltKCJIQSl0UDl4Ry5xMT1k'@;
put 'bThAUEdsJmhvWXVDRUhtK0IhWjYoUzEpO3dlPnpJQTguRzlyZXZvKnFrSjh4SUBxcHJOKTlwa0QyM0hyKz5eZTA2MXpKfCtjVVQyW114bjl4fTZMZGZoLzBXMmNvaGk0cVM6NUhvd2hSeiJkfVtKS2cmKF83XTNaSWAxKEpHWSE0Wi9DSlljPlRUdkx3SG5fKiNSRDZAUV0lVS9IJT9HL0lJS3hX'@;
put 'amtickBLZXY/QVBPZVd+RCY+Lj9fN1Q8KTsmTSlhMmxIRnMyUzIqTUNBZUBMWmciRW45QlZFWC9XZnZVR3lUYjJ8a3grKTdKYEI4RHg3TnByUHpGJm4qZSxNb0lWdHFNeEg9TW9DWFRSKzNhbnY+ajlMK0J5VF9dOi43TT1hMSV1dXJgXiElb0tKJkxyJWsla1gkUlc5Qk5WNig8ZFRiaVEzL2Rh'@;
put 'WCYsWlVjYTV+cnRdUmUjcW1RMy8+YlU+fWY9OG5PfUc4eXQmI1lIcHcoO3dXX2ZkbFFUfEFdWXkjXUVDXjNUTV0yMkVxZm8wKGRvbERVIXFfWCZKTXJocmd3ZD1RODw4cmQlPnF0Nm4kQk5yaHJBVDcjcDdwR2MvNTtjOSZaM1UyKTpEUSZ2X31keE05cjxsVnI5LlI7NUlAcW1gU0U5cE53LmIv'@;
put 'ZHlacWFWRkw4JGVee0Zfb3tucWJjfjtCKClpeFNSPEdXKzQvP2RNQjhSKm1vWmBgUGlwKzE6S05tPGBkY2Z7SHRYNl8/K101ZUxueEJ9N3kuYmgoUi8/P3poOGFtR2BWP2Z5M15FeTZ9dC8pOEJUI1FmYkI4OUVtLjgmYnQjXWhieF88WENxVEBBJjlFKXVBZ0V8cFJvZU0zajhmZFRZen0xUDBg'@;
put 'MllzRURgWUtJQjMlQF42akxobHd3WShHKSZ9TUNoO09iOEBbd3E5YE9nTi5oRDVzW3QvKHRLMHpOYkJEYVApXyRhXmRdWk4/MiNjMWZ3bjluR18zQlM1Q0NsWmFOP1BPPEVOKzowSE5pV35QYjVJYkBmV1coUG04Lk9uOT5gQ24kUVg8V2dYKGBbcCo1ZHhnJkR2OSZIbjRafFRYLm52QH0vdGwx'@;
put 'X29YRW5+fX5kZkN4UW1UTX5HOjlIX2h2MWBXQF9OYlMxWix1JkFlP2NlTmFuYytvcH0/alZxTGdFRnJPTml4YmI5fGxmSGIxcS9rLzAscX5XbEo+bG44PW9hZD5aPmVIMix3OGRebXV1PnpJPiZmNl0+RTFfJG9IcSlkInAiTHJEXSN1MDl6UmtQc05qQnc/WCE4Qjp7ZVpUYVhnQj5TZEwuJCtN'@;
put 'PjBFQWtAPDAuLyR8OCtpcz0rNEs0PE5ydmNJfEMuZEwjKz1CbE8yNU03bTZBfTk1SWZod1JiV0IxN21SPmBrYWVZXi8ySTZzUWphSz0rMjQ4Zk9yeCpKRVo8S0JtTyNufiYiVzMrJEhQWm14JjJkcWY/eFQ4cDhCWF5wQ1BuL2QqL2szfT5Ca0wmVXpHel8sU0Q1U0l7WmJwXkd3Oks2OEM+c0Nj'@;
put 'JXYhXi5IVTZNVXY4YzcxQHpmJT5jWUI4JmpPIk9FVUx6cDAqLyM4S2RyJUtgTmNLPi9wZUl2bj51czZIP2MqaCNwOSkhLCpbPG15YGNmIURRI1NfV25geWRnTUVOSj5ZVmAqJVFHMD1oS2k/XVdbbFFHWHdDPTlJRkJAOyE0S2JHVChqaFhbJHY0WTghcEwjLG8pbCY4dy5NLFAvL1UpKSp1OUIu'@;
put 'T3clclRlPTFMbEx1RjIkcVVCTk0xcTpIWGwkQHQ0XjxKRWdxaWksO1hReixrWjVfZHVVfFZCQC8kWmAoZmU7RDh1M09JdiVMYSJweHNfa0A1M31FJFtnUVd8VD92NnRRQi58bHJbPj15UGFLc0hUeHs6ej1EJl0mR2ZtNnRGMERyLDA6Ll48JC5FJTEhYW5aQUVFd35BQ3w6OjsxPWYocjVTPnhm'@;
put 'JnBQYEVwUC4pajBlP1BaVzohc0VTPz8iVEFNYFR6Qkx8ckZOR3VGQ1kxOGM9Vi4pVjw6VTJZTTdLW3QvXzR5S1cxRn47azFJKDFXSTMyTWdgeGBnSV9ob0g1L0l3PEovJnxGQithYSZgNTFmQX52Tk53TEFsLEh6MUo+ZF4+WTZXMTdlZWlHa1NtYWQvZkdzSiRIez0mQjhWfE01NEx3WnhJS1ZS'@;
put 'dS9nRjFvOmFedmtuP3U/K19sRytVb3NBbXEoMGM/RD85cDoxW3NUcHQlLFFwVDclOXlJX3oyQm5OTTVjRk5FYD9pR259WWl0PTw8I1VKLldLTz1xOjtXcCRPPWh1OncuNVcscmorWiI8KU94Xk0oRDpnLjwoOCU5MXM+UmQucXddJktAYDgvRDxPKyZtQCVVa3B3SGlzdGUkMDxZQFNDY2dWaEwr'@;
put 'ZWx6IntQJFFLbXtUZExpazZAaEQ3bnpmLkpuIUAxTGI/RD5rTypCLFhJPndVQ19NM3w7SCkqcVA8LGVtfWgzKlYkKVorK15gKGZRZF1GJjROOnskez9CKE4hRStWaVpzb1djdXM0KEQmeCpWUTIuKUZOKUVtRDd4Pk9ZKztdPEx1WnwuRmM9fGsqNVlqRnxFVSl4e3lRZnRfMDN2LCJue1Y7LypG'@;
put 'RlZVKSpDUXoyQGVDKiFncS4obmMxKCRsI05rQC4zKEImRih9JF9MfE5rTm55VDdnaXNRT0NxaEpfVEBPfXs5TEVuZCE7NnNHVnhLI01yW2t7JVtfakZlc2UkNElCOFsoJSx+cWVaJHBGQV5iNUwwZX43VXIrdSxJbyZqdTk2V2BJZUhJPGA+Z2prUkUmVnI9LDI4ITpZYTBLK2h1WiYwUGlweEVQ'@;
put 'fj0sXmxzbnw1L2dHXUxrTl9uISlWZG0wYEgqQW5QJiVyQlZnJiorKmlKKEpNaz5II15TNDU3KyxjLFNHIzY0ZXM5fWRUbi40P1tXZyZGQD4lOmhmfmlHNywjNDRhR0g9aihfenQ8PFBDV3FFd3p9Mm1gZ30rR2JNaGZiOUIhTzE/OEJzJkhCKEg1Yz51NiR7Mnh5ImtuTnAuZ1YpeWtQVytFJWNg'@;
put 'ci9IcTx6cGZ8NjNUJCguZG9rPmBCRmQmVS9EPikkOG1hSV18KChiMSNwOUZINjI1QT1vJnZoTndudzs9RChhfjAyVDR1NnVAak9AVmNHTUE9amlgNHVvR1NJSEAhdE0+Yl9NK21eWT4qXklTWF5Fdjc5IUxQNXIwTzJtRFVnWmBUL3BmcjFWKH10WXFPRFlqd3F8cTlHc3I4MVJpVFN1aEBLPntH'@;
put 'RWFeX20wM304ckpDNFA6czhbQ2olQyZrcGI4Ul5oMXF0YjBZd1lPKDpAQnh8VytBMm0xVnJZPWcuRiVFSlEmTVRdWyhQdFdMOyxjL2RrNVg1eyZ2UFRlRSVaR2N9L0xCVnUmSW8se1dkMSRIS3Z9RCtQQWxxRFVuNU5EUCpEPFcmKUpDWnJVZDwiWGpoK15kKDZ7Vy9GVlk9bSQ+PkBMVmgiRl5k'@;
put 'RD5PVG9xc1tdJWFTI0MyJVJ5SitfOyt9OGk2MEtufDsxZmBjbVsrODJUaDorSGVUWm15PEduW0ZdWi5SMSl9Qk4mUjpBcWIoeCNMRUIhKkRsfEZHNFE6bihOR315dmZ8YWhUNmthfCRvaDVYaEtFJTtRZXxQPDplMml9eiV5a3VjOEImYkVWQ1B8YChgQTE+PHsxVE9yQ3Z2OUBySkE9eyJsfjZr'@;
put 'XSZ0U2grPFQwTHhEaDZfc0d0Vks9NTVMP2syU25fWSQkaU5wcjs+dlRgdzJaSHFLbnZwNF0oeShCcSpZJmY0OCxHdDFqS2dAfUs8eX1iOksvakpHTEpZUzpdS104LElPJjJHYUdeXjI3JmZAfV4+Yk1mKEd+YnF+cztlb2IpUiRWYjR9I3JbOTZVKCFzfHxySk58Xz4vVldpRVJjcWw0QHM1YHE/'@;
put 'ckVQaEFrMSEzJnFfQ1YiNl0jZElneEdEIVY0ei9KKCwpRl5sNi90dV19M2BCISh+fH1hfEVjLH4kVC5pJl9fRn5LYyEvQ2N8VVs2KjY5ZVZmJGJzTlI3VEs6cmNhI318Yl0jaSVRREowUlN+UXtBRzJRTSFPRGhxZXAvOTkpPGt8I2xbYGlHaCphay5yfEFgRmtec3dzSmgmPmhXQiRYND5RTFtN'@;
put 'QkNIKz4iQmJufj51NyVzVFpJVkpjcylYOEhMOm8rb1M0Ii8iRDM+OU15azM1Tl8lNlRFaH5Je2NSPTtZMjkyamgydj9AR35Nez40PTtkPzJeeStgW007Pi59cn5mNmA0TF9LaCM7PHUmUzw/WCkuKl17ViQ8OCRpV1Y2KDBKUDtbcDZSInZxfjh9emkvdGF9JntRXWVheTEoMHhuSThgRjoqdUhX'@;
put 'TEtkR31fTGQ0aEI7QmF5SH5gV008UTwoKWwxaCJMfmY2fTVIUkwqc2RiQTljcy5wfXNSWmgyfnk+UWxbUH1jUno5RShRPVZ8XVttOz87UTI5Mm5oLHNZRml9PlshcG1XNX1lfCM+KXN7a2dOZ257XSpAYW5zMTQxUFZ5U3wjVlsqIl9zdX5gcXwjRFtiJFVXIn1SWXJXOmVUYUNIMVleLEF4MGh8'@;
put 'RVBUVldWfCNJNj50fiNmXWVMTCFKImZfemUlRDUrPnNvP3RFJF96ZFVOWGBlQH1HKDgpfiRkVCNbPD8qLChST3ZpL3ppRzBAMVNkUjc/IUx2VkgoUjdZZC8/ZmxSRTA+VVhtKkh2OCIjTGl0akRKI1toNCVzWSQoUnFqfHxFP3lrUj19KzBvX0hqcHU8UjU+W3Z0NzZxL10rb0kmdGFsUTFEWWdy'@;
put 'MWghSD4uN2UrW2EhOW8uajtvI2N0PEFiVUVhUjhna0dqLyM3b0ltWGFsUTF5PTE6KlRfOyM7YXkvWDdue0lDVlhuPFV5R0J4YiN+dC5JYFVLMyFWfmhxMjlDUGl3Q35uZERuVyJEdGA2Rzl2QEkrXTZHdXM1OUVIc0plIVtqOXBMSGVRX0RpL3l8WkRzXz48YjZsKl98Nmd8I1FpIWc+MHMvcilw'@;
put 'fkI8ZiUkOF00djhrRm45Tkk5L0drUTErckkwTGdRMVNIPWA6aH5CUnsuNFlFUGlaKjh9JiEjNX5DZmZIRXpXQzdhJVlnP1VzeHBVaEYuTFdSZUZHLEZNUS99Q0h5dD82R1JmVTM1UlpaQjkxYSxEPW9XT0RuUDgxTElAOUdqW0ZOcy5Ccld4P1Q5dXBVY2tZK3AxaEEmKFlbKDlgTk0mZVE/d3NH'@;
put 'WERNJmVRZyxrRT0oUUY5Z01lKSVabDpgS3tmJVBQdlJZRFNxOWckIkAoPShASlhCaTN2VSImcV9mJUhQalgudDIsSDpUUWkzYzlWM1VxOWdaelMkcHBJXTdYe3RwJSRNZlFZLFk3YFBKYmRYWzJdN2c+MWYzYzhqMVt+OVgvKVM/YmV7TW0sbG5WfmErZEZabmJja1RnPmZRMShTdjdGWmFEZVEk'@;
put 'RFYsKFRQWVNaSDVYSndNYWFxZndEJlVnVlJjKXMxQi5VZ1ZJWChUWzhiNDs7LmpnWkx5RmhRMSUjIVt+OThbW1I1VWZQY002JGtdODhWaCQ0bHA7WnoxKDM5NSJDTlF3d1hITSwpW0owcXRWRVtoKkJtcFNVQSF4RGJtYTRgODIsVGE8b3NJIVZ5aj9vZHdlTU9FdkcjLmRZMkZ+ej1MUUplUUks'@;
put 'KFtaUWZReUR8MFpZcGFbdG9VeylidjFhQmRvVSFNZlFFLCZreVZRfWxWP308WUJ9cDQlWjY1VltLNEd3OWo/fTo5SEwpVmtNcmNqUUA/W0wxViNMWlh9YkUjVUQmUndTXm40O0dtJHpUKnB3Iy9SVDAxP0dRI2pHd2VIZFM/bFc5VzpVbCt7S2JjOGZoO2dnNl1mR2NNIVZYMm4zaClEdHswOilY'@;
put 'P3hEQ3R9ajFIZ2wmIys6X29iUEx6NlNIJURkSmdUSEY7XVphIy5lTltZO2xuQGhDbUJYalBNQWB5RyRqdS9ibDltWlMhUFBIdUMrSmZAd3tXYXIqRzRZP0hFUFsoanRLNj5SSGl7fTtZaXpVJCtuR1M8aVdrOGhESHs0TU9LP30kOjRPR3ldWVlvKVRQaFl+LipRR3Q3b2diPlhiRS5TZCUyNmxY'@;
put 'QzFWW2cyMis2QlExJHVQN18ya2xKTGZCVTh6WjFoN0tSLzFMcj82WyZ7VDFRRFZma1lrVjdILEV0PFcwNlpeeXF1Sk85eXdeOkIlJWxOUXZJKWhxNV95dXpaM0I6fWN9ezlYSFR7KCkzRWhFTj9TOXV1YllISGFhclBtRk02cFpXWXhEKy88ZlZWeSNDVy9OXT06cDlnTGR5NHRPYWx0TzFrdG5I'@;
put 'bDJwQC5RUGtIISl+NmI6KWNDJkFldEkscSklNCZHSDhmO0MlZkFnXWBjMSJDOkYmPSNEODtdaDA2N2NeS3dGeCIhNUB1JERFUiRgVEZdOFZpbylZRlM+fEx7PWY3WUksM0J7MHpRUm14YlUuMCtnKDc2SHpxQXYxZEt4Vns2cHhyJiM/XS9iK2AxWzs+LHAmWywzKnhDXyxhPk03R0VzUk9gfFlL'@;
put 'bDoyMXlIfHEyTjBdLyxRbEhfMmNAPSh8SzJEPk5yaGkpdUtnfkJEYFJeWy9WdGt7KVgvMmhUQThvb0ZoQEZmcHczKEI3Nk9ucVFiOkBoXWUkN0NQbTc2UV9fJXVFcXwiZ1B7USxgWz9dUkBnW2giR1hab3grVjl5NzdbKEdvTjBUd3hTKSRFZUE8R25QX2tMKWV7aFQpeHF+T3B3YXUxfTJjLmU3'@;
put 'PlU3TlZjMTo3aVBNRGJhU1NZVn1xXnNoamJxVVc6YUpgIVlzOiYmcXA0JSJRWntsLFs7Y058aDVxWWcxajA2U31bezEkZUoiZHw+dzEqcVEscjtIcURNM1QlPFkyUWwqV1gybCh3PUc7NWY5Uzl9SWl7e1E2eVdkOlJ8NixEcUJhUVQvc0NYS2l3VDxEMlpKcXNobGdLOElgVHBCcWxicj58YSxq'@;
put 'aj5tVm5WRD4lNCJeKi55blM1OU9tQ1cyOHJLUC9fR3NKTyojUV8rTk1feVlyZilqcHl4U1hJdyssI1Ffdkk/b258X2FeL1Z0b3txKTJUVDJ+ZEc3Q0wiRSglQjE/XU1wK2BGKG5SfT1aXX1HN1JMJiRKdFNLQmF8QmBaZ1l3QThCai47TFk9ZzooeksoRTdbVEtAezMkWHszOmppYjFHdnpzcG1m'@;
put 'M2tOSiZNckxrRWp5dmxzeWFFYC4yOFMwNmdnT0A3KGRLaGRgQT5yczxjSX5AbjlnZ2lfaltlPTpwJSRRRWshO1ZqYnc7bzc7OD9lZDB3bFk3b149U1UlT3JaYU94eHNMW09aTl9sLDQ4Ozh5RjA6aD4lJk1iKnt1Ykw+YEVBZSp7KyxyJlcjJV1gI1JxeGBfeWdedF5CaWFtPDpsI35kd3hpcFNo'@;
put 'REc4OiNGO20oYSk0IUQscUVkU3lUenB8ZWA+ZWg8ZTdzI2JuNSxwe1d8PlkqPzQ5Tj5GdyNtbkh9R0ArSittIUFqIUxCN2E2ZHE0JU1iRnVJTEFWRmUsN1VpX193dkdfPlUlZUNpTUBfciVDVUl1SWx1cm9kSXB6TGJtNURXJTNHSX5iNVU3Zj1AOns0eS44RWxMOzpiUW4rX3BRbyN6Rnh2SGJF'@;
put 'JmZmMDZ4QVtlQDtxKCxjWSxKLiNVcCMoeDdDWiY/SVdLU311SzpJYWRxZjEkX0t5LGt3WXtoZTsySHtXLiY4YShEO2h5Vj5IMiJeKDh9R0VHVXExNndheVh6aD9DU2VgQXApeD1iVUc+aDgvOCxMRS9mPEI+XzksTH1Oc3c/cXhNUHlXYUdAaVQzOWU3YjUuK1kmbSZCfDY5MmVgJS5VRXVCSypI'@;
put 'XyZoTXxrNlFEe3x0R250JiJkMipCKHtaV2IwLFI7MlArYGZbNU06cDIqKjNXdVFdUEswNjBHSnFnY1VUPigzPG45T3hZKW9uS3E5Wj5mdzswKn5kfE1GcVM5MGA0dUdleD9RZjYkSnhnciF8R2twaEc5ViNqUkY0T2IrO0x4IVhnckJUIUdDRVpKUjBRSSVxWWp9L0tlX0BfNz43T2tkPm13aHBI'@;
put 'eWJxSzJFaWtZS3d8Z2ZORXJRRFVleFt8SztjYWhuO3o8ejlKN2hwU2ghRi9QbnMkYyE9TVhnXiQ2blJyN3F8P2VOOHdsWDBKfWhzbS45cWBtbjI2aHhbL2VHPiE9Yl5xfHxHN1poJjFjeWF9V35xbWZuOEUrbDcvb1huai97I3BOJUV4NVY+bT5WZ2lUS3kpdVlCL04wQGpHb1ozVVI3QzNTcXNb'@;
put 'LjdYWlB7RkI1UU13OSUrY0Z+IT1UO3hHb3BnY0NYP3FGWUhIRUQ/N3RqfDh8XjYlKVNAMCs7bzl8R1opfHRiSUc/ZDF9L05sY0FDPl9kKUQiaypiIyU0JiVHb2JGOFFsMFppbER0S1BPYDZAaVRSYkkuRnlhPilEVi8uR3hgQlZHcSxXfWUlV0tMRk52VyFGdVEyXUtrJDYsaXI3JltwOEheWzxa'@;
put 'cU5uSV9PMUtxSDZVOT80VispMXZ9NXcuSnl9JUFBW1BoPFtyU0EzWCZtRz03ZlJ2XzppTW41fm45flVScU1IISJbJnxjfWt8SmZ7R3hIfEJxQWVNd2UxbHlrcFFrfWYqaEdgOHs4eWNeWHRRfTsmWTRzZy83WnFuTX4vcWVxe3x4JWRMZTB7bl13Myo2KlYsMl86IjhMXkY8Sl8kVT1nNmpiKHx4'@;
put 'JDZPJTV4cDJEOChWNkBsPyYlQTpEVm1KaXU2VmxiJDtxT2UsbzhwKllwXXRLZ0EuYlFYPkpFPC5KVCpxfCNEJkFlcixBU1NYNDxjSTlqMDZ3L15LdUxORzRaNVVSakVST3tAeWA4LlopKSwuMEI9a2ZlTitnUW5de2RUWSg1WXtDQHouNENQNjk/aDtXSilUcEBeVD9iP3pnYjgjfURyLHhPejlL'@;
put 'MiFibFQmRiEwdld9emdibz11U1dXOzo4WSYycUB2UypDK1Q7Ol5UcUBAYFE/ZlY7OjFOQjI+Q2csO2JBU0tGITBUWTE5dzw5cSNgflI7fWg5PkM8YmJSZkdzRCUoZmMhZGgve3hPRDs/OWVlMEZndFUzNDN2b2ZeTj0ycH57K202SFgyenJJTSl+QF5XJmdlUjxiMlFZSGYlN0JtWUpCTEdmcTUp'@;
put 'aj90YHZ+SS5AQH5ASDZiNl40OXF5OSJ1PSFIaDREJlUwI0JaZlBTP1owK2VhKWFEQkFiP1c6NklVMy8rYGFwRzxvPjE7dChxTGwwdl5WalBJP1RtK2VHKSF8O2VfXVVeZCxDYDEwQlk1MFlCWTkzZ05KQDF3I0Bvb1p0akk6UjN3I3t6fXolWXJYOXU7Yj5JJERwYj5JSURmYT8xQDE5ZD8/dS80'@;
put 'Py5wVFBTYEhOeGlDWls1WGo7UENBQDE0OG8lJUR2NytbfWpDTlVYdEdxemZgZmUiTnV2Jk5YMDV2Ik08cjFudkA7ckRkbnhoKC9ZVFdQTyNRbyVzMFlgUD5id15fdFV9ekpBX3JWbl5FcDpCNDt6RnVAJkFPcEBDP0o0Vj1eWSVNX3A1N08yP2JVSEF6WkxKP3NvZkppOTx1YE8ocnNJXUFBTjhX'@;
put 'eyt+NUM1NXF7My94dXo7dl9NIjQpWkcseyx1JSM8S28iQUYoTE8xRSJKdk5LNWh+b24/eitabHV1QCNyT01CLFhMZ3I/YiIpV0RgMytDLFR1eDFkP2JGYn16MlpGWUI6UCx7LHlpe3FWSChSJForW0w/clsseCtETH1EOXY6XlslTlN6JXZuKlhvP1ZPUmh8alRCdGBhUW97cWZKQix1bXNqZ0cj'@;
put 'NHpBKUtxVnRFQU5FbXNqPy8jZ35OKjRvYjlMOkYiWldjdGo/L0cxQDFVaXFWb0Q5M143O3VkRE1KMiIofVZ7SilyNlhaZFIqLnhCTk9eaTtffld3N3R4Zmd5Qi9JQ0hPR2AyMHlAd0AoN2gsc2k2PEV1V19ITk49P1ZCMX5rQUEwWX17S0xYNnJtRUIsTHNYaHVqRldEQ3ZARmMqfFpRQmFLcyVE'@;
put 'MEdvcndOZjB3b01dR21bW2ZyIWVBR2RlKm5aWHtdflJudXg7QDFMUFhPOi5rdypUQWJAdyFldWNvYilHTU0hMG89Mzw+cnNqbnRdNDlxLiR2U1U0VU59XSIhNUlMd2Qvemc8WDBuP3pbWXtWTU1VcVdKJiMzIXJtRk1+Tmp7P086cmpAKHojeyZLYHMwR3JqIWMuWy59I11bZ0AxX2A4W1hKYUUy'@;
put 'OnJwWCVrc25eOz88Tih3eER1YFZkb0xVM2hFJTNdTzhLITBHWEp+cSRPODxUQWI8WWlXcUNHd1VlTis8YilHU0ZnLC98fStCNWpYPSEvTTlAOW5HdE99fStCNVFYblhgTjc2cTJmRnxHPkU8bmhjKFphXWdVPWxRfkoxPjhyUHs0Sj5DXlZGTCFUJk4kKDJEditOeiFMSnp7e3V3bTpfdkJXWTV4'@;
put 'ZGZld31xT3QkQykxWDh1WU8xWzEzezQkPz8qNE9rLiVEVF1Sakp4Qmx0QS5PSUlsMlErZDNMLCltZ2VZcHUyJjNLUFFtSjlGM3ciX1UpdmV4ZDdYO3dOOXdjUjkqWXcydm0iQ0lIPm5qUz4rVU0vQWVnQWYzI1dzTzh0KCNkUCJaRnJqZWN3L25dMjdoXUBBP3pjWERZTzcuKFs+YkooV3JqZWMu'@;
put 'Wz1IJV5gZXJIbF4zd3ssOTx3WlAjRCt+bX5vWn16PHI2bU9uJT1NKVI2W2MvK2RCKytkPlBae196fFdIViJ5IWVzYTwqQkppP3RgZFptVXVWR1pRdXssYjRAb0F9QShXaH1FQDFtQiRbb0cuOjl2KFV0RThZZlBuK1RQNWtuLG5EeVdgTklkKnhQaiFbYGZ6SUsoWHZDdlYzcW90aj15SmJIMUZe'@;
put 'eksxTC5AcTRVPSUoS3Y6PXs5Sk0qRkMrRC4oeyxMeV4lOUMqK1BAJnl7UFgkLlRZW1l3UWhDR2NFWF1IaH1kNzhWTSlJaT1lYTpXXjFiWDBTNXg+KyRWTXJiYSpBNVkxdjpgPk5uKnNXPygpNT4jWyE3OW12czY3PXs+VTp0IjVHaF53eShnRWJCa09xQGd0LjNLaEgjVmYpLDlENl5hbFNeRWFi'@;
put 'O0I9Z3U4fHshKVFiQzRLZlZEMX5TaHx5SEkmeD9PVnY6PDYyZEAxdTpAb318Lls0UmpEQDEqYDhbKH0kW2JdfSt8M0hYdjQ0W2slOXspKX5ANFMifXdoVFJRQH1JRyEkXz5KMXRTKGhQWEk1dHR2TDxCRno0dUpZaTxWRDFobTNJX1ZvI3hZdik3WCJqJm1AJkE8aG58Xzp6T1oiSXpSZFNbPyJI'@;
put 'S3F+SXYyJVE7Q0dMXW56UXxsV2BdX2NTLD9XVHtLT0kjdHdDWFp3NTdFa1F7T3xAflI7TSVnelNUe2N5ZUJAb1g6WS5zNmw8RFl9XSZHLkZieTE0Xi5vVjQvdk5yai9iLlshYDZiQDJdT01HKm9FT2AocjZsSGk5UkpUSmwibkkoUk4raS9OWT5QYURtKypJKnJzaisuRl9nRTpAO1QrbnFieytt'@;
put 'S0Q1ai5lVFdiIWJsXmxGT0VjVjAjUldnOEZjOUJAMW5kP28mfmlhaH5Ad2BRXjt5QXd3aUMwfHY4bDRnak0zfi9dTi98R1ducD9aS25oOVU0NGU+UWhrRU9LP3NvOk1VM2hFZFZNM1dYV1c5VlIvfStPS0M1RVJ9emRVSzV2X19oQDJ0Tm9HITBOalJHVWBfelJZfDRGXU1bNHssOkwoKFIrTmgv'@;
put 'akM1TnUyPmIyQGdZTnVEe1JHclJ8O3I2c0BVM0YwZ05+OUt+SylIU1k2enlVVzl+YnM4fntuQHp9VERZdD4vJjo7X3p9VFN1WSY7Yls/a3dOYj96LlRHWUVKUj9+RilTJU1WS2t6Z2ImYnM+SEgkIWJ+amBGSz4uVytUYFV6IXEscGl3ZWUpdTNURlpiZj9iZ0B+QFRLP21TaTkzIUspRzksOCQ3'@;
put 'JCN6YGF9eEUsXnNbdUNIJSphPDlbdTt1T1Yrc2JEMF0pI2B3ek1WWG17WCFlNzlxZWpGTj5peW5lZkZtWExeIiFuXVQ1RFF3MUAxZTovYV5ab2owTj5Fd1BwLnssWlU1ZztZIks0aHB+WH5zfXcofkBUKl5xP3IyLHssYSVvJTd6QDFVam9YZlh+PlZkYUppOSFLNnJhJCI+VmQvTSVnRFNTZFJi'@;
put 'SzpAX3Z6JGtZa1tbQ01vKzBrTlt1el47JiZ9On1ZMClAJD97dlshWVI3eVM4RjpzazRpPiJ9cmoxbilbWTJwSX45YitWUjRgX35xLmR8QnVPUkZKN35fQ1Z4SFY2eSJmY0xqc2haLCUhfFowVDRCQjBjIV9+UnF5MFV6WzxpQ34hMzpTaGcmSEkpUTlBZmgoNmomX21QVGA+QEZ1KXxYbyUpPX1J'@;
put 'TSM3aUhXXWUzS2N6Zld8JTlHWG4xcEZUfWpBVSNyX1gpUHROMGZBJEB2SSV4XXk0Rn1raUohVDM3ekUjUFplRCIrfjFHOF9XOk5tcGx7K0RMKlNDYzNCciZvekAxI2E7byladGp5RSg0bCJUUyx1VSFZfE08cEYmOyJYZGhIczhtdH1eczpVZEc+aldgbTsldVZxTEcqdjd2aENjfF9ueEZuVysz'@;
put 'dGV+cl12fSMoKEoiIX47fC54UkxseU1PPmomaF4sUUJsPmxVfnM6MjA4aXZBclpxPDtXIStESX1KXXg0KmRLOjkraWZLTFk2M05sLlNdant0PjtSbCFsfH4oOzsiNCF6eH5wX2t0eVE3UjVTaHxxW2o2c34/fHJ3eUY0UTMoI0lpaCt5bCFZcVY2UHhALG8qbCZOWzhtUnIiSTRUSHpUPCZ9JGJ8'@;
put 'IyMoNEJ9PGVdaTMyOzFzO3x4SDMqLFszLiJOZkBKJCJLMUReRUt7djIyPlRYVVJTfjlyKnZ8XSxZejk0WElGJmAsVTRGLz9xM09EKnFEITZDLCFMPDl9Jk1ITGtgI0EwOVZrWEZhXSUicENrfkEuYU16fGY1N3ZxKmhDcF9RIndrZmhneGBMcD95cFBXVUdsIU1+UU8qdksqUC50czxWd0J6eXNo'@;
put 'MUQiUER9S0JydVcmWkhAWG9fUXZQTEg8L2Fofn5lMSo8fTlpM31kPXJbajg3PHAmbC9KSiY6MWV5SCZgYTtKIip9OmBIZ1Q0fk5pTmwhUH40WzIqUnw5ejo7JjRAMXAmakp7bGMpRm1GNE9ZeEsxNVksQWxjcyJld2tbc0wmNEZ9OF98QFAmaDtldldsIVdzZjBsIVUoWkp3OlI0Xl8rVXtMUUBf'@;
put 'anwzIVlWIWF8WEw+aTVfVGRUbkg4QTF9fUEyLml5X15SZ18ocz5fIjN5dmp8eHRpQmZ6UnFJaVIjcnZVUmN8N1d0Rjd3cENMfSZxSy9OP0BMS1Y2fU54Wilqd2NzPyxsdWxfVGQuZUxAOixlcyNNYitte1VSRmh4e1hGa11TM3BDUH0ocXl5UmBpcDomUFZ7U2AvU1goOShXZVRefHZdT1Q0UVg5'@;
put 'cWYjfT5gIUssO2E0OEpZJiQuU0VBQFF2bWh6SihFeF8zL1JXelYiJGZuQH48Y3s7VXhiflh7IzRdSzghYWZqVkMxKyZqW0opVF9uN3JKcnxGISJCYXtDZy5lWUwiUEB8KmoqdjYqSC5sc2B8Xkk7USlzam0vQ3J7UFt6e2x1I3JtazZNS11uNnBrPV43WT8uRUhXNFM0aXRaeX1GRntqYFdueDJU'@;
put 'PC99cHJ+ZipgSGl2RmNgOzBSSmswd2l7Jm9YRkJoRHApdkxWdHN1XUZYZFg7W1FXRUJ0TEM0MzNEU0A1dGdTdkRuYj0qJFc1bmdnZEQobjZ5Z0daVjVbZ0FlIVhXakh9c1UzOGI9fEwxYmJYeTxkZiNSK1MvVTc+SztGflN1bjdNIT04JE1wVGVJV2pePWVFSVgxWytrXmd2L1tbPXE9SCRrbjxZ'@;
put 'MH1KbD4jPnMoS3t9V3diS25PTjZQeD4/WStKWTNWZyMzekhmelArVFUpbiZsMEY+OmlqQjhnWz9qZ3Nnb0x3YS9EOE1zP2s6NkAzPj9WbllDVFkrNEBTb1RpPFJUL0U0fl1ibFZKLylJIzheYn1fKHo+M01aZTRKZ1M6I1k/VGFUXSRhaUFXc0BtaVVYV1oqZztiUnA4bCReLmlfenVWdjYwcVk0'@;
put 'emExMVhvOUx6WWpgXnp5OjEobGpvUUhVeVk8ZUV4PDx0eDZdKVhfKlMqSlJBcz1bLzxaX20la0ZrWGx4NChfUStGZz16XXNqUWM3QWlTT0pzamlYMjpbcmNhLzJJW3x5W0x3YT9vNmoofD9PbnN4MDBAUWdUcWc5N2ZjQ1sxLi8oITlLQ2cyKSUpV2ApeCFPZmlIVFZqbE9+X15wP1YvRywyMFps'@;
put 'KUpJNj0jQXAwbjJxbWokREIpekwmTC5NI2lrQHFofFN8UEV1XyFpe0BjYHQuKV5lO0A+IjslQCt1JjJ4dFtFQVNeb0J1UHMxdm9Kb2ovNEElXyNhXixqejNYKCFdaGV3dlNgXSErb3dudiMyO3luYnMkS1ZTQTg3PUc6WmUxYi9CYjB+IzZwN0NlO2ZkUFc0WX1xXSlbRWw3KXVuOnwsPldfaTBF'@;
put 'bWQ1IiZ7IShKIjtOcVNjbTw0NHomOkFBbTt1NVFgKDloVXY/YCQkRj9fN3JGanBuN15TYzRySDYxMWVjKU99TCZHOTVWQSZ8NypEJntSMW87eTNkTHElQCw3XWlpdDouWFAhW3tQTGRIUzAmaH1xYm9RW21ZXmwvX2Z7KUNTTXZnei5RQkRpWztLUCJAbUVII19sJk4lQWVLVE5DYC51Yl9WUjYj'@;
put 'KkJqVzU+TzJOciNaMXUueCgxdzMpPC9mPTNkNjxkcFVAdSw4Jklvcz9pKV1mIXApU293SGRVP2ksXUtqMl0qd3o2Iks4UWd2cEAzYkA3PzFCNnd2Lishe0xtZ2lyTTg7IXRvPUYhVSZXaC5LVEM9P2NvR0JmaXlkZG1lZzdxfiEhIVBsIiJEPXRdJD9jQFtuUFNFJWJ1LFskT1V7VypgdTxXMT5M'@;
put 'MDhpcihaZ24vd0JuUTorLkomekR2RnxPKEtkVEsrRkU5eD98ai5WJSVHKm8pdlUmQCF2YHw3MSQlM3Z0XkAkb1YoMX19SVplPjg0NWhXZFdMdkxWJT9vb0JhQCN2YUNOKmZ3US9Sd0pWM20rLDt1JFQ1KEpIO1okdSpwQFleey9rSlJBNyJ+dlomTnZPOVk4SnNIbzIvfEAiUzY0KyJ4XSZ3YSZ5'@;
put 'JGgvNnYsdCxpdyooIjhHQFtib0VEZD1FL2g1Q3YyV2tIOVtWNnRON3tnQkI7elVkUylBSDRSaVA3cSF2SjpuNzFbI0YkSF5jPWEyR0NNcmN+QyskTSxCITEsZmpbdTNfUzl5VDRCfERrdHo1Sio8Ji5IdzhgfT8uKl8oLGhSUnhSWF8jXmRTNHBMVDhgPy9WNl0wJikwc2xmW1pgc0ZSJTpYYEI2'@;
put 'QS9VdFU9K150Yzl7RzFmKyZZXW9TTXY4T3RFXj90cSgwNFlHQi9AW2xQRSw9ckYiSClGWTZKbHBXLyokfkQiTjl9Wm45fHM8dWBzWltSTHRWYCFqRHFtLHlRZXdYUj5yMmM1NjFyVkJVX0xUcCgoK2FkR09WT1FRJFlmWkpuLDBhIXYlQE0haDY7R05aIzReVFFoR0shfDU+aXsyYWMxWCkkaD02'@;
put 'TG5ddWgmQD8sJXIvcHR8ZVNmXThmWTB0OFdRRldhQ3RePG04IzpKd0JIdHdZPn5OQ3cuSmxXdll7cTZwO2Y+JSJaa0dOMiRreCY3PDgoaTdRPjF7TmhPNDQ5V11ubGVCeXBYZnRUYFZUUF9ZSGwlPDA0M1dbU3w2RjYje0hLTm5LWCY/Q3F1M2o1JCZUKmsyOUMqOk4pJkwhOj44KCF8NTM0TS9A'@;
put 'OVIqSiNBZkdwMzY5VFYjYGVXfWBpN3hVaTY0KG17WnNvVTtCZXYlOF55S3klWFpBb3FNSFo0WTFPcmFbe3pbJTd7XysvI1oxRllqMGNVe0pEYCFdZVNEYHwvTzUkLkwuczN8Uyw5RzchJm57fDRkfUQxMHIiMjNhbXZ3QUNtfkNlQDRaa1huZVVZPl5UJDNlSCkzP31+PFhZeisqVzBbLDR8QyRV'@;
put 'OCNVeTpGU2I5MWFXVkJCenc3YFd8O1FvNU1Mb2YldUxpP0xCaG83NCZebGB0eUF3NVMqbDppajlPZk9rMUJVWVhjUlN5LCxjbH14aU5vVmYvQkYvI2ZUfmQwVmtbeT11ZEJudlJtNFlFeldaSzQiV2tCbnpENUZPMCZrTUF4YnluMC5VRC80OyFyS2UxKEU2QnVJfUtJM1dgV3QhMCpXI3lQX3Uq'@;
put 'OlBdfTU7d1ZGcnIvIXI4TG13PEIoKWAkNEBAZWBlO28zaF5lWVkxKHBldUp7bzY5S0I1NnZCa28kRFArT3o5dCtTc3FjTGBRKk9jd3YpWXFobTJ3XWdbbHYubTo/cGVVKStfci48d1AsST9MaX4/YXxteEJyMWM5bkR2dmlEXW4pQERxe0BnL3BxcF05WFdrbGN6XVVqUXRbcntIWCZVSVBZU0d3'@;
put 'NyZ6UmM/aWY1NiMqbi9lXyk9STc0TmU+KkMrJTc2d0U1Vl9xNyolOkk3NlZCIXVXb1llPStwP2l8MzxSRypRfDMpN3RKbT44NCxbeyhVeXBiUnBPOEg5N1dJRjhvLz0kZXglREU6e043fmB1OmJEcFBvTC81dGVtdkgoXVgzTz8lRjt5K2pvKzFZbUEzWC4wMUshNUElT0hYIklrPz90UG1wYHYv'@;
put 'Yk1scWpGSys6WSNnbl9gN0oiR0o7dEYzIT5DNG1heDduKzc/XitSRUApYUArajhAdW1ZPWVBaXM0KzoqRkA2Vy90Z35qYHZeV3h5cEwjcSZ2IWMwZiNRWWVtfFQmKSlOI3VzdTlNcV4hYmZuQFZWT3tKXl5EIl9hQ3haVENwJUxDVj1CQmlRdSIvamNRZDowYU9JTyV8ckoxbz1kQz51M2pedjtb'@;
put 'XkwmdVhjQikobWxufllRQTVzbkYxd0ElazRJWlglRXs0TSl7dFA/MkJCdW1xUyRWdk87czR9a0ZGISxqKX0iR0BnUzF4Wjo5e0pZNkF+PF8/KCtNeTNYYztKIjNDWEtfWmQmfjZqUHx5KW9lZjVaWDAuVUV5YD0sSigjZ2hUbHo0PHJJWjg6KTx0WTlwRyw2V2RGYXRgZV5XX1UmOT1EWm42ZWAp'@;
put 'bkd4UStDMyxrRnlJUTx8ZEZvekFdfWB2QnEsaShSSCFMUEhebkhvS0g1SyxvNnQjLixDfHA/WHFrfCk1cis6Vls1OGh4QCoyWVRMMCxgM1ldRDEmaV90c0ovR2ZmS1pqciIsfHQ8SDVSIV5pOigkNik8NSNFVjdTaHg9QS5FdSt4dn0sXnRQYXh7O34yLlZVdD1lMmBrRiFxaSJ5XWMjd1Y4dVNz'@;
put 'bTYuN2hSKXluV3t7ZHR1fSpMWTJ1X2B6alI/cWE0Wzh8Q2VXSStuKHdUay4yWWcqLmJOQkNfeUI7fVYyKi9yKUMjWCsofUhEOUY9THw/ND07Yzd4NiVtTkAzOXtSRjFoIi4vWUZKY3FUYW0hSkk0OzooRjxVNEhdT2csSHRtVWc9OUNCWzo7TjlDRzc7L3x1Q09qMl9IOVRxfkQ8eGp3Sj85MlFU'@;
put 'W05sMXFaQ3BfNTdQUz99cyNaVztfdm17Ol9SWm5zP3FodyRtMD4ofFozTUldTz0kc0FdTWhKIzBoY0NLPXVfRS5TNypSZS8zdCN4WXk2bGI0b0ciTSltUyZJUTE9Z0UxMnw8V1phTFUsejV7fE5RPz1JaDNoSVQzNVApLFosQzBwKmhfIl5CV3JSNT5YdiguVjdiXV8wLyJvUy84bks4R1pWeDsp'@;
put 'eH0jYVZYKXomY2JuREdKMCh8bHV7JURaaTJSb2t5OVMibEU2cGtxMV1TPHwlMFUzVTNdSG1DL15pRmI1X104KCt6YXczeVVLSERmaC8iZ2BXV09BaihwK2MwdToqWHI8LjAzVSgsR0E+ZSpGbC5acVZQWkpRV1hMLFojbjg5Q35ZRXBmQlk9STJQJlF3QXtxS2pFTzFeJHJEMWBzbm9CSlBoOl8x'@;
put 'ITVnJD4md2d4KWB2WFo+QCIyRmFQPCpgIXYwVzEhTzxzal5DTjMlcVZRfUQuNGUoZGtaVVleM1dwS1dVQFUraT1jPClUe0lDK2MlQSlXay80OTZUWXh8aVN5OFBSK0N4ZS5GPlt3QGAkaytoZCRBT1o8QnJLYDVUMyVuJnNMRCJlTElQaiJUNmYzcnlyQywoe09MX0d6X2Nze30jfVNWNmpnQmAm'@;
put 'YCVje0FTPm53TkBia3U4MGdEOng3VXRHMlQ/PnYhLj9AOnwmPW50MFVkZEB8I3QsTW1YWnxGMTFZVlg1ZE9TTEFMMF5tVFozfjEsdkNuIUBMWCRoPUZHYkE2TGg0JV45emdvc0xMTmNuV2w0K3k5OjN5WlptfltJaDJfR3ZvPkBWUnNYLFRuYFNlNz5fckYvSCJ7L1tqaGFwaXo5Wz8raWx6S2J5'@;
put 'e00oMj5mXTh1cTd4TSpoNGUvXUgqdk1TOnleeE0iU1RdTyxaR2UrYGIuYHFXOW5EOlQiNlJbcXY9bDBwODBCaGBmejVbPUdFWU19MTBCfEEzX340YmgmTG9ZMEw0fW4mVDY3TH1veC9xUlhUe2UoZShJYltue2FkJDY5XWpaIXBoOE86a2QrZD1nVzhIUjJEOyI/NFB2MXBJe1Z6SEEwP3hlPU9f'@;
put 'dlVeXzMhalsjVlgoJS5MYzZzVT47MXhJJUtvOGN6SF9SeTluYzsxeU04WTM3NDxSTmVYK1BxIlUsK2N+RS5vfSJWflMwOHtxY340M0RiUDQxRWxVanx4YkVMal1bJEBNQi9iWUY0UG9WNllmPGUqTiFZPztIWl5OOmAjXTRNNFIqfXVJP3RAQElMNyZ1djVxeXRuaER5bTc8Tl0iLDQkJCZVR3s3'@;
put 'TW18RT40IlgyfH1uUD5pe1RSOU98d08/W09JQ3RjeDM0OiF2b31DP1glOWo5TnRiO2UobjwzPmljVVg4Qn0pNGc5QiN8WWB1elclLk5OTFNvJH0oTmRNMDJtISgrNSh+cFk+d1ZJd2hJX3A1fEBMIVRdYyg9bjJbWU1ubj5VbDB9PWdCOGBXKG9kOTpZNXBqaDk/RHZBXz8mJDAvJmx5IWchPWpg'@;
put 'K10+P2xgZD1ge21JJEtVaHx1e15lWyY4WjJfNFcjfTleKU12WHk3ayZlTywsJjlbQVB9eGlKKiZNKFYiX3AmMGlfO11UOXYmTDNHQ3BZNE0qZVF3RDJAZH5LQlcyNVkuWDB4bTB+eF9PM305bn1hN0I1ckMlaEMyT35EQGNUMF5lQ2E7flNfIjlAOD1lfm4hKUJoQFVRcl5lfENUWDR8QGJUO1Nm'@;
put 'VU5obFd2dllsOGlxclMzaClQXmY5QD93O29yOWtlfFYkd3I8fEJPRi5hIWNVJSg4JXNmQygxPC5Ke3MuTTgrNGd1PVpOMj1IRUhKcjh3ckNGQSJnPXR3eSxdVmdrZzRANjZHWUZUZ3QwYF18R2VoOT83a1cuWyRtNC4kTEUsajRwKFZFRFFxfi4iQjtpWWdMVS43dVJ0XmxxLGYzZSVRLF5Ucmlm'@;
put 'N3I8LjRXbTJ9MyhgYEAqK1BJOSgwP0p7UDN7eiMkZURCPGY5TzolfWolKiVDZT5UWjhJJiEsZ0J2fTtkeTZ1emw3WkBIWiJwYj9yMCRnPUhtfWB8ZE1iWlhrPXpzLkJ9a0pjU2YqIylEOjA4RnI0Qzxicn1kezdYWk1VeTpWQn01KzcqU1omXyNYSHxUYlhyVl1hTnNVXW8qcW90KnxjOCkjdWI9'@;
put 'M2o0aCV6YjZfMHUlMEs5WmtgS2dbNTtIUSE7QkBeXUgyOX5wZ2slTy5kJlhbeCNRb14pOV1hKnZwVyhDRyRxIj8+PmwoSlBAQGlVRG9CX3RxKHBTejVie3UrJioyLHh4OkN6KltEU2FeY1deckBlWEBQIiNrN0xuOFJvb2Q0VkI0aTJrcSwha0JtN3RXREBVOjsxX1AjZ30xKjlscUtmIiowVD8o'@;
put 'OUYiYiJQPV8ud15zX1hnMUJsV1s7eSU4fDxPVExqR3lkKHF4Smc3eHAhTH57M3Nye1o1cVt7RUlwXVQpVWdjZiYmd31sdStzan5Ld3hQbEszb2w6az0pYTszTiZHMl43TDp0TVBQeiQvMyR8RnBSJlA5anN9MTUzd1Q0eWJ9bkxGej4jIyVqJEloMH5QYEJfeCx6OGhHTzFeZnMweSNVQy9zVGgy'@;
put 'U34uWzFIJCEkQjUmTVB4O0InKSksQ3d8fChDdz1PSmUoe3dhc21CaW5hcnk6WFUsbG9jYXRlRmlsZTp2b2lkIDB9KSksQ3cpLnRoZW4obD0+bmV3IERUKGwpKX1zdGF0aWMgdW5sb2FkKCl7Q3cmJihDdz12b2lkIDApfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnBy'@;
put 'b3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJkb3QiLGgpe2lmKCFsKXJldHVybiIiO2NvbnN0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeihoPy55SW52ZXJ0PzE6MCxoPy5ub3A/aD8ubm9wOjApO2xldCBfPSIiLFQ9IiI7dHJ5eyFmdW5jdGlvbihXLGllKXtjb25z'@;
put 'dCBwZT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmllfTt2YXIgd2U7Wy4uLnBlLmZpbGVzLC4uLih3ZT1wZS5pbWFnZXMsd2UubWFwKFBKZSkpXS5mb3JFYWNoKEVlPT5XLmNyZWF0ZUZpbGUoRWUucGF0aCxFZS5kYXRhKSl9KGYsaCk7dHJ5e189Zi5sYXlvdXQobCxhLGQpfWNhdGNoKFcpe1Q9'@;
put 'Vy5tZXNzYWdlfVQ9Zi5sYXN0RXJyb3IoKXx8VH1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGYpfWlmKCFfJiZUKXRocm93IG5ldyBFcnJvcihUKTtyZXR1cm4gX31jaXJjbyhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiY2lyY28iLGQpfWRvdChsLGE9InN2ZyIs'@;
put 'ZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZG90IixkKX1mZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImZkcCIsZCl9c2ZkcChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwic2ZkcCIsZCl9bmVhdG8obCxhPSJzdmciLGQpe3JldHVybiB0aGlz'@;
put 'LmxheW91dChsLGEsIm5lYXRvIixkKX1vc2FnZShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwib3NhZ2UiLGQpfXBhdGNod29yayhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwicGF0Y2h3b3JrIixkKX10d29waShsLGE9InN2ZyIsZCl7cmV0dXJuIHRo'@;
put 'aXMubGF5b3V0KGwsYSwidHdvcGkiLGQpfX1mdW5jdGlvbiBJVChjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxjKX1mdW5jdGlvbiBjNChjKXtyZXR1cm4gTWF0aC5yb3VuZCgxMDAqYykvMTAwfWZ1bmN0aW9uIG5sZShjLGwpe2lmKCJwb2x5Z29uIj09Yy50YWcpeyhhPUlUKGMpKS50YWc9'@;
put 'InBhdGgiO3ZhciBoPUlUKGQ9Yy5hdHRyaWJ1dGVzKSxmPWQucG9pbnRzO2lmKCJwb2x5Z29uIj09bC50YWcpeyhfPWMuYmJveCkuY3g9Xy54K18ud2lkdGgvMixfLmN5PV8ueStfLmhlaWdodC8yO2Zvcih2YXIgVz1kLnBvaW50cy5zcGxpdCgiICIpLGllPVcubWFwKGZ1bmN0aW9uKE9uKXt2'@;
put 'YXIgRnI9T24uc3BsaXQoIiwiKTtyZXR1cm5bRnJbMF0tXy5jeCxGclsxXS1fLmN5XX0pLHBlPWllW2llLmxlbmd0aC0xXVswXSx3ZT1pZVtpZS5sZW5ndGgtMV1bMV0sRWU9MDtFZTxpZS5sZW5ndGg7RWUrKyxwZT1aZSx3ZT1pdCl7dmFyIGV0PShaZT1pZVtFZV1bMF0pLXBlO2lmKDAhPSh5'@;
put 'dD0oaXQ9aWVbRWVdWzFdKS13ZSkmJjA8PShFdD1wZS13ZSpldC95dCkmJkV0PDEvMCYmKHBlPD1FdCYmRXQ8PVplfHxaZTw9RXQmJkV0PD1wZSkpYnJlYWt9dmFyIFN0PVtbXy5jeCtFdCxfLmN5KzBdLmpvaW4oIiwiKV07Zj0oU3Q9KFN0PVN0LmNvbmNhdChXLnNsaWNlKEVlKSkpLmNvbmNh'@;
put 'dChXLnNsaWNlKDAsRWUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9SVQoYykpLnRhZz0icGF0aCIsaD1JVChkPWMuYXR0cmlidXRlcyk7dmFyIGQsWmUsaXQsRXQsSnQ9ZC5jeCxubj1kLmN5LHZuPWQucngs'@;
put 'Tm49ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgXzsoXz1sLmJib3gpLmN4PV8ueCtfLndpZHRoLzIsXy5jeT1fLnkrXy5oZWlnaHQvMjt2YXIgY3I9bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIsIikseXQ9KGV0PWNyWzBdLV8uY3gsY3JbMV0tXy5jeSks'@;
put 'SWk9TWF0aC5zcXJ0KE1hdGgucG93KGV0LDIpK01hdGgucG93KHl0LDIpKSxmcj1ldC9JaSxpaT0teXQvSWl9ZWxzZSBmcj0xLGlpPTA7aC5kPSJNICIrSnQrIiAiK25uKyIgbSAiKyhaZT12bipmcikrIiwiKyhpdD0tTm4qaWkpKyIgYSAiK3ZuKyIsIitObisiIDAgMSwwICIrKGV0PShFdD12'@;
put 'biotZnIpLVplKSsiLCIrKHl0PS1ObiotaWktaXQpKyIgYSAiK3ZuKyIsIitObisiIDAgMSwwICIrLWV0KyIsIisteXQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRlcz1ofXJldHVybiBhfWZ1bmN0aW9uIE5KZSgpe3RyeXtE'@;
put 'VC5sb2FkKCkudGhlbihhPT57YS5sYXlvdXQoIiIsInN2ZyIsImRvdCIpLHRoaXMubGF5b3V0U3luYz1hLmxheW91dC5iaW5kKGEpLG51bGw9PXRoaXMuX3dvcmtlciYmdGhpcy5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyksdGhpcy5fYWZ0ZXJJbml0JiZ0aGlzLl9hZnRlckluaXQo'@;
put 'KX0pfWNhdGNoe31pZihudWxsIT10aGlzLl93b3JrZXIpe3ZhciBjPXRoaXMuX3ZpelVSTCxsPXRoaXM7dGhpcy5fd29ya2VyUG9ydC5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7bC5fd29ya2VyQ2FsbGJhY2tzLnNoaWZ0KCkuY2FsbChsLGEpfSxjLm1hdGNoKC9eaHR0cHM/OlwvXC98XlwvXC8v'@;
put 'aSl8fChjPW5ldyB3aW5kb3cuVVJMKGMsZG9jdW1lbnQubG9jYXRpb24uaHJlZikuaHJlZiksSlUuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDoiIixlbmdpbmU6ImRvdCIsdml6VVJMOmN9LGZ1bmN0aW9uKGEpe30pLEpVLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9u'@;
put 'KGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBKVShjLGwpe3RoaXMuX3dvcmtlckNhbGxiYWNrcy5wdXNoKGwpLHRoaXMuX3dvcmtlclBvcnQu'@;
put 'cG9zdE1lc3NhZ2UoYyl9ZnVuY3Rpb24gakplKGMsbCl7dmFyIGE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcztpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24m'@;
put 'JnRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKSl2YXIgZj0rdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5zcGxpdCgiJSIpWzBdLzEwMCxfPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKTtlbHNlIGY9dGhpcy5fb3B0aW9ucy50'@;
put 'd2VlblByZWNpc2lvbixfPSExO3ZhciBUPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMsVz17fSxpZT10aGlzLl9kaWN0aW9uYXJ5fHx7fSxwZT17fSx3ZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24gRXQoZnIsaWk9MCxqcil7KGZ1bmN0aW9uIEVlKGZyLGlpKXt2'@;
put 'YXIganI9ZnIudGFnO2lmKCJpbmRleCI9PWEpZnIua2V5PWlpO2Vsc2UgaWYoIiMiIT1qclswXSlpZigiaWQiPT1hKWZyLmtleT1mci5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIE9uPWZyLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oRnIpe3JldHVybiJ0aXRsZSI9PUZy'@;
put 'LnRhZ30pO09uJiYoZnIua2V5PU9uLmNoaWxkcmVuLmxlbmd0aD4wP09uLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PWZyLmtleSYmKGgmJigiZWxsaXBzZSI9PWpyfHwicG9seWdvbiI9PWpyKSYmKGpyPSJwYXRoIiksZnIua2V5PWpyKyItIitpaSl9KShmcixpaSksZnVuY3Rpb24gWmUo'@;
put 'ZnIsaWkpe2ZyLmlkPShpaT9paS5pZCsiLiI6IiIpK2ZyLmtleX0oZnIsanIpO3ZhciBGcj1pZVtmci5pZF07KGZ1bmN0aW9uIGl0KGZyKXtXW2ZyLmlkXT1mcn0pKGZyKSxmdW5jdGlvbiBldChmcixpaSl7aCYmZnIuaWQgaW4gaWUmJigicG9seWdvbiI9PWlpLnRhZ3x8ImVsbGlwc2UiPT1p'@;
put 'aS50YWd8fCJwYXRoIj09aWkudGFnKSYmKGlpLnRhZyE9ZnIudGFnfHwicG9seWdvbiI9PWZyLnRhZykmJigicGF0aCIhPWlpLnRhZyYmKGZyLmFsdGVybmF0aXZlT2xkPW5sZShpaSxmcikpLCJwYXRoIiE9ZnIudGFnJiYoZnIuYWx0ZXJuYXRpdmVOZXc9bmxlKGZyLGlpKSkpfShmcixGciks'@;
put 'ZnVuY3Rpb24geXQoZnIsaWkpe2lmKGQmJmlpJiYoInBhdGgiPT1paS50YWd8fGZyLmFsdGVybmF0aXZlT2xkJiYicGF0aCI9PWZyLmFsdGVybmF0aXZlT2xkLnRhZykpe3ZhciBqcj0oZnIuYWx0ZXJuYXRpdmVOZXd8fGZyKS5hdHRyaWJ1dGVzLmQ7aWYoZnIuYWx0ZXJuYXRpdmVPbGQpdmFy'@;
put 'IE9uPVpVKGZyLmFsdGVybmF0aXZlT2xkKTtlbHNlIE9uPVpVKGlpKTsoZnIuYWx0ZXJuYXRpdmVPbGR8fChmci5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiBwSmUoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5jbG9uZU5vZGUoKSxfPWguZ2V0VG90YWxMZW5ndGgoKSxUPShm'@;
put 'LnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxXPVswXTtsZXQgaWU9MDtjb25zdCBwZT1kP2E6YS9NYXRoLm1heChfLFQpO2Zvcig7KGllKz1wZSk8MTspVy5wdXNoKGllKTtyZXR1cm4gVy5wdXNoKDEpLFcubWFwKGZ1bmN0aW9uKEVlKXtjb25zdCBaZT1oLmdldFBv'@;
put 'aW50QXRMZW5ndGgoRWUqXyksaXQ9Zi5nZXRQb2ludEF0TGVuZ3RoKEVlKlQpO3JldHVybltbWmUueCxaZS55XSxbaXQueCxpdC55XV19KX0oT24sanIsZixfKX19KGZyLEZyKTt2YXIgUW49e307ZnIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihNcil7dmFyIF9yPU1yLnRhZzsoImVsbGlw'@;
put 'c2UiPT1fcnx8InBvbHlnb24iPT1fcikmJihfcj0icGF0aCIpLG51bGw9PVFuW19yXSYmKFFuW19yXT0wKSxFdChNcixRbltfcl0rKyxmcil9KX1mdW5jdGlvbiBubihmcil7KGZ1bmN0aW9uIFN0KGZyKXtpZihUJiZmci5wYXJlbnQmJiJub2RlIj09ZnIucGFyZW50LmF0dHJpYnV0ZXMuY2xh'@;
put 'c3MmJiJ0aXRsZSI9PWZyLnRhZyl7aWYoZnIuY2hpbGRyZW4ubGVuZ3RoPjApdmFyIE9uPWZyLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBPbj0iIjtwZVtPbl09ZnIucGFyZW50fX0pKGZyKSxmdW5jdGlvbiBKdChmcil7dmFyIGpyPWZyLnRhZztpZihUJiYhaWVbZnIuaWRdJiZmci5wYXJlbnQm'@;
put 'JkphZShmcikmJigicGF0aCI9PWpyfHwicG9seWdvbiI9PWpyKSl7aWYoInBvbHlnb24iPT1qcil7dmFyIEZyPWZyLnBhcmVudC5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKFlyKXtyZXR1cm4icGF0aCI9PVlyLnRhZ30pO0ZyJiYoZnIudG90YWxMZW5ndGg9RnIudG90YWxMZW5ndGgpfXZhciBR'@;
put 'bj1mdW5jdGlvbiB2SmUoYyl7cmV0dXJuIGZ1bmN0aW9uIG1KZShjKXtyZXR1cm4iZWRnZSI9PWMucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3M/Yy5wYXJlbnQ6Yy5wYXJlbnQucGFyZW50LnBhcmVudH0oYykuY2hpbGRyZW4uZmluZChmdW5jdGlvbihsKXtyZXR1cm4idGl0bGUiPT1sLnRhZ30p'@;
put 'fShmciksTXI9UW4uY2hpbGRyZW5bMF0sX3I9TXIudGV4dC5zcGxpdCgiLT4iKTsyIT1fci5sZW5ndGgmJihfcj1Nci50ZXh0LnNwbGl0KCItLSIpKTt2YXIgdnQ9X3JbMF0sT3Q9cGVbdnRdLGNuPXdlW3Z0XTtpZihjbil7aWYoKFBuPU90LmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihZ'@;
put 'cixOcil7cmV0dXJuImciPT1Zci50YWd9KSk+PTApe3ZhciBFbj1PdC5jaGlsZHJlbltQbl0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKFlyLE5yKXtyZXR1cm4iYSI9PVlyLnRhZ30pO090PU90LmNoaWxkcmVuW1BuXS5jaGlsZHJlbltFbl19KFBuPWNuLmNoaWxkcmVuLmZpbmRJbmRl'@;
put 'eChmdW5jdGlvbihZcixOcil7cmV0dXJuImciPT1Zci50YWd9KSk+PTAmJihFbj1jbi5jaGlsZHJlbltQbl0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKE5yLFJpKXtyZXR1cm4iYSI9PU5yLnRhZ30pLGNuPWNuLmNoaWxkcmVuW1BuXS5jaGlsZHJlbltFbl0pO2Zvcih2YXIgSm49T3Qu'@;
put 'Y2hpbGRyZW4sUG49MDtQbjxKbi5sZW5ndGg7UG4rKylpZigicG9seWdvbiI9PUpuW1BuXS50YWd8fCJlbGxpcHNlIj09Sm5bUG5dLnRhZ3x8InBhdGgiPT1KbltQbl0udGFnfHwidGV4dCI9PUpuW1BuXS50YWcpe3ZhciBQcj1KbltQbl07YnJlYWt9dmFyIE9yPWNuLmNoaWxkcmVuO2ZvcihQ'@;
put 'bj0wO1BuPE9yLmxlbmd0aDtQbisrKWlmKCJwb2x5Z29uIj09T3JbUG5dLnRhZ3x8ImVsbGlwc2UiPT1PcltQbl0udGFnfHwicGF0aCI9PU9yW1BuXS50YWd8fCJ0ZXh0Ij09T3JbUG5dLnRhZyl7dmFyICRyPU9yW1BuXTticmVha31mci5vZmZzZXQ9JHImJlByP3t4OiRyLmNlbnRlci54LVBy'@;
put 'LmNlbnRlci54LHk6JHIuY2VudGVyLnktUHIuY2VudGVyLnl9Ont4OjAseTowfX19fShmciksZnIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihpaSl7bm4oaWkpfSl9dGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0RW5kIix0aGlzKTt2YXIgdm49a3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1l'@;
put 'bnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLGNyPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTt2bi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gY3IuZG9jdW1lbnRFbGVtZW50fSk7dmFyIEVpPVhnKHZuLnNlbGVjdCgic3ZnIikp'@;
put 'O3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxFdChFaSksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyksbm4oRWkpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9'@;
put 'RWksdGhpcy5fZGljdGlvbmFyeT1XLHRoaXMuX25vZGVEaWN0aW9uYXJ5PXBlLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKGZyLGlpLGpyKXt2YXIgT249WGcoZnIpO3JldHVybiBFdChPbixpaSxqciksbm4oT24pLE9ufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRh'@;
put 'dGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBMVChjLGwpe2lmKChhPShjPWw/Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50aWFsKCkpLmluZGV4T2Yo'@;
put 'ImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgcmxlLGhRZT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4p'@;
put 'PyhbYS16JV0pPyQvaTtmdW5jdGlvbiBRVShjKXtpZighKGw9aFFlLmV4ZWMoYykpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrYyk7dmFyIGw7cmV0dXJuIG5ldyBlWih7ZmlsbDpsWzFdLGFsaWduOmxbMl0sc2lnbjpsWzNdLHN5bWJvbDpsWzRdLHplcm86bFs1XSx3aWR0'@;
put 'aDpsWzZdLGNvbW1hOmxbN10scHJlY2lzaW9uOmxbOF0mJmxbOF0uc2xpY2UoMSksdHJpbTpsWzldLHR5cGU6bFsxMF19KX1mdW5jdGlvbiBlWihjKXt0aGlzLmZpbGw9dm9pZCAwPT09Yy5maWxsPyIgIjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWdu'@;
put 'KyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFjLnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1jLndpZHRoP3ZvaWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEh'@;
put 'Yy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09Yy50eXBlPyIiOmMudHlwZSsiIn1mdW5jdGlvbiBpbGUoYyxsKXt2YXIgYT1MVChjLGwpO2lmKCFhKXJldHVy'@;
put 'biBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5zbGljZShoKzEpOmQrbmV3IEFycmF5KGgtZC5sZW5ndGgrMikuam9pbigiMCIpfVFVLnByb3RvdHlwZT1lWi5w'@;
put 'cm90b3R5cGUsZVoucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhp'@;
put 'cy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3Qgb2xlPXsiJSI6KGMsbCk9PigxMDAqYykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQo'@;
put 'YykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gbFFlKGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEwKX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwp'@;
put 'LGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT5pbGUoMTAwKmMsbCkscjppbGUsczpmdW5jdGlvbiBwUWUoYyxsKXt2YXIgYT1MVChjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBk'@;
put 'PWFbMF0saD1hWzFdLGY9aC0ocmxlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSxfPWQubGVuZ3RoO3JldHVybiBmPT09Xz9kOmY+Xz9kK25ldyBBcnJheShmLV8rMSkuam9pbigiMCIpOmY+MD9kLnNsaWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIitu'@;
put 'ZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrTFQoYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBzbGUoYyl7cmV0dXJuIGN9dmFyIFJULHdk'@;
put 'LGFsZT1BcnJheS5wcm90b3R5cGUubWFwLGxsZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTshZnVuY3Rpb24gdlFlKGMpe1JUPWZ1bmN0aW9uIGdRZShjKXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2'@;
put 'b2lkIDA9PT1jLnRob3VzYW5kcz9zbGU6ZnVuY3Rpb24gdVFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sXz0wLFQ9Y1swXSxXPTA7aD4wJiZUPjAmJihXK1QrMT5kJiYoVD1NYXRoLm1heCgxLGQtVykpLGYucHVzaChhLnN1YnN0cmluZyhoLT1U'@;
put 'LGgrVCkpLCEoKFcrPVQrMSk+ZCkpOylUPWNbXz0oXysxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fShhbGUuY2FsbChjLmdyb3VwaW5nLE51bWJlciksYy50aG91c2FuZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9p'@;
put 'ZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP3NsZTpmdW5jdGlvbiBkUWUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShhbGUuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLF89dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsVD12b2lkIDA9PT1jLm1pbnVzPyJcdTIyMTIiOmMubWludXMrIiIsVz12b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtm'@;
put 'dW5jdGlvbiBpZSh3ZSl7dmFyIEVlPSh3ZT1RVSh3ZSkpLmZpbGwsWmU9d2UuYWxpZ24saXQ9d2Uuc2lnbixldD13ZS5zeW1ib2wseXQ9d2UuemVybyxFdD13ZS53aWR0aCxTdD13ZS5jb21tYSxKdD13ZS5wcmVjaXNpb24sbm49d2UudHJpbSx2bj13ZS50eXBlOyJuIj09PXZuPyhTdD0hMCx2'@;
put 'bj0iZyIpOm9sZVt2bl18fCh2b2lkIDA9PT1KdCYmKEp0PTEyKSxubj0hMCx2bj0iZyIpLCh5dHx8IjAiPT09RWUmJiI9Ij09PVplKSYmKHl0PSEwLEVlPSIwIixaZT0iPSIpO3ZhciBObj0iJCI9PT1ldD9hOiIjIj09PWV0JiYvW2JveFhdLy50ZXN0KHZuKT8iMCIrdm4udG9Mb3dlckNhc2Uo'@;
put 'KToiIixjcj0iJCI9PT1ldD9kOi9bJXBdLy50ZXN0KHZuKT9fOiIiLElyPW9sZVt2bl0sRWk9L1tkZWZncHJzJV0vLnRlc3Qodm4pO2Z1bmN0aW9uIElpKGZyKXt2YXIgT24sRnIsUW4saWk9Tm4sanI9Y3I7aWYoImMiPT09dm4panI9SXIoZnIpK2pyLGZyPSIiO2Vsc2V7dmFyIE1yPShmcj0r'@;
put 'ZnIpPDB8fDEvZnI8MDtpZihmcj1pc05hTihmcik/VzpJcihNYXRoLmFicyhmciksSnQpLG5uJiYoZnI9ZnVuY3Rpb24gZlFlKGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0xLGQ9LTE7YTxsOysrYSlzd2l0Y2goY1thXSl7Y2FzZSIuIjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYo'@;
put 'ZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShmcikpLE1yJiYwPT0rZnImJiIrIiE9PWl0JiYoTXI9ITEpLGlpPShNcj8iKCI9PT1pdD9pdDpUOiItIj09PWl0fHwiKCI9PT1p'@;
put 'dD8iIjppdCkraWksanI9KCJzIj09PXZuP2xsZVs4K3JsZS8zXToiIikranIrKE1yJiYiKCI9PT1pdD8iKSI6IiIpLEVpKWZvcihPbj0tMSxGcj1mci5sZW5ndGg7KytPbjxGcjspaWYoNDg+KFFuPWZyLmNoYXJDb2RlQXQoT24pKXx8UW4+NTcpe2pyPSg0Nj09PVFuP2grZnIuc2xpY2UoT24r'@;
put 'MSk6ZnIuc2xpY2UoT24pKStqcixmcj1mci5zbGljZSgwLE9uKTticmVha319U3QmJiF5dCYmKGZyPWwoZnIsMS8wKSk7dmFyIF9yPWlpLmxlbmd0aCtmci5sZW5ndGgranIubGVuZ3RoLHZ0PV9yPEV0P25ldyBBcnJheShFdC1fcisxKS5qb2luKEVlKToiIjtzd2l0Y2goU3QmJnl0JiYoZnI9'@;
put 'bCh2dCtmcix2dC5sZW5ndGg/RXQtanIubGVuZ3RoOjEvMCksdnQ9IiIpLFplKXtjYXNlIjwiOmZyPWlpK2ZyK2pyK3Z0O2JyZWFrO2Nhc2UiPSI6ZnI9aWkrdnQrZnIranI7YnJlYWs7Y2FzZSJeIjpmcj12dC5zbGljZSgwLF9yPXZ0Lmxlbmd0aD4+MSkraWkrZnIranIrdnQuc2xpY2UoX3Ip'@;
put 'O2JyZWFrO2RlZmF1bHQ6ZnI9dnQraWkrZnIranJ9cmV0dXJuIGYoZnIpfXJldHVybiBKdD12b2lkIDA9PT1KdD82Oi9bZ3Byc10vLnRlc3Qodm4pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsSnQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLEp0KSksSWkudG9TdHJpbmc9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gd2UrIiJ9LElpfXJldHVybntmb3JtYXQ6aWUsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIHBlKHdlLEVlKXt2YXIgWmU9aWUoKCh3ZT1RVSh3ZSkpLnR5cGU9ImYiLHdlKSksaXQ9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZnVuY3Rpb24gY1FlKGMpe3JldHVybihj'@;
put 'PUxUKE1hdGguYWJzKGMpKSk/Y1sxXTpOYU59KEVlKS8zKSkpLGV0PU1hdGgucG93KDEwLC1pdCkseXQ9bGxlWzgraXQvM107cmV0dXJuIGZ1bmN0aW9uKEV0KXtyZXR1cm4gWmUoZXQqRXQpK3l0fX19fShjKSx3ZD1SVC5mb3JtYXR9KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJy'@;
put 'ZW5jeTpbIiQiLCIiXX0pO2NvbnN0IHRaPU1hdGguUEksblo9Mip0WixRZz0xZS02LHlRZT1uWi1RZztmdW5jdGlvbiBjbGUoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8rPWFyZ3VtZW50c1tsXStjW2xdfWNsYXNzIHJae2NvbnN0cnVjdG9y'@;
put 'KGwpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1udWxsPT1sP2NsZTpmdW5jdGlvbiB3UWUoYyl7bGV0IGw9TWF0aC5mbG9vcihjKTtpZighKGw+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7Y31g'@;
put 'KTtpZihsPjE1KXJldHVybiBjbGU7Y29uc3QgYT0xMCoqbDtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5fKz1kWzBdO2ZvcihsZXQgaD0xLGY9ZC5sZW5ndGg7aDxmOysraCl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW2hdKmEpL2ErZFtoXX19KGwpfW1vdmVUbyhsLGEpe3RoaXMuX2Fw'@;
put 'cGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGwsYSl7dGhpcy5fYXBwZW5kYEwk'@;
put 'e3RoaXMuX3gxPStsfSwke3RoaXMuX3kxPSthfWB9cXVhZHJhdGljQ3VydmVUbyhsLGEsZCxoKXt0aGlzLl9hcHBlbmRgUSR7K2x9LCR7K2F9LCR7dGhpcy5feDE9K2R9LCR7dGhpcy5feTE9K2h9YH1iZXppZXJDdXJ2ZVRvKGwsYSxkLGgsZixfKXt0aGlzLl9hcHBlbmRgQyR7K2x9LCR7K2F9'@;
put 'LCR7K2R9LCR7K2h9LCR7dGhpcy5feDE9K2Z9LCR7dGhpcy5feTE9K199YH1hcmNUbyhsLGEsZCxoLGYpe2lmKGw9K2wsYT0rYSxkPStkLGg9K2gsKGY9K2YpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7Zn1gKTtsZXQgXz10aGlzLl94MSxUPXRoaXMuX3kxLFc9ZC1s'@;
put 'LGllPWgtYSxwZT1fLWwsd2U9VC1hLEVlPXBlKnBlK3dlKndlO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxzZSBpZihFZT5RZylpZihNYXRoLmFicyh3ZSpXLWllKnBlKT5RZyYmZil7bGV0IFplPWQtXyxpdD1oLVQsZXQ9'@;
put 'VypXK2llKmllLHl0PVplKlplK2l0Kml0LEV0PU1hdGguc3FydChldCksU3Q9TWF0aC5zcXJ0KEVlKSxKdD1mKk1hdGgudGFuKCh0Wi1NYXRoLmFjb3MoKGV0K0VlLXl0KS8oMipFdCpTdCkpKS8yKSxubj1KdC9TdCx2bj1KdC9FdDtNYXRoLmFicyhubi0xKT5RZyYmdGhpcy5fYXBwZW5kYEwk'@;
put 'e2wrbm4qcGV9LCR7YStubip3ZX1gLHRoaXMuX2FwcGVuZGBBJHtmfSwke2Z9LDAsMCwkeysod2UqWmU+cGUqaXQpfSwke3RoaXMuX3gxPWwrdm4qV30sJHt0aGlzLl95MT1hK3ZuKmllfWB9ZWxzZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxk'@;
put 'LGgsZixfKXtpZihsPStsLGE9K2EsXz0hIV8sKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgVD1kKk1hdGguY29zKGgpLFc9ZCpNYXRoLnNpbihoKSxpZT1sK1QscGU9YStXLHdlPTFeXyxFZT1fP2gtZjpmLWg7bnVsbD09PXRoaXMuX3gxP3Ro'@;
put 'aXMuX2FwcGVuZGBNJHtpZX0sJHtwZX1gOihNYXRoLmFicyh0aGlzLl94MS1pZSk+UWd8fE1hdGguYWJzKHRoaXMuX3kxLXBlKT5RZykmJnRoaXMuX2FwcGVuZGBMJHtpZX0sJHtwZX1gLGQmJihFZTwwJiYoRWU9RWUlblorblopLEVlPnlRZT90aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLDEs'@;
put 'JHt3ZX0sJHtsLVR9LCR7YS1XfUEke2R9LCR7ZH0sMCwxLCR7d2V9LCR7dGhpcy5feDE9aWV9LCR7dGhpcy5feTE9cGV9YDpFZT5RZyYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwkeysoRWU+PXRaKX0sJHt3ZX0sJHt0aGlzLl94MT1sK2QqTWF0aC5jb3MoZil9LCR7dGhpcy5feTE9YStk'@;
put 'Kk1hdGguc2luKGYpfWApfXJlY3QobCxhLGQsaCl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStsfSwke3RoaXMuX3kwPXRoaXMuX3kxPSthfWgke2Q9K2R9diR7K2h9aCR7LWR9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX1mdW5jdGlvbiB1bGUoKXtyZXR1cm4gbmV3'@;
put 'IHJafWZ1bmN0aW9uIENRZShjLGwsYSxkKXtyZXR1cm4gbD0tbCxkPS1kLFtjLGxdPVtjKmEtbCpkLGMqZCtsKmFdLFtjLGw9LWxdfWZ1bmN0aW9uIGRsZShjLGwsYSxkLGgsZixfKXt2YXIgVz1YZyhnbGUuY2FsbCh0aGlzLGYpKTtjLmRhdGEoW1ddKSxfdy5jYWxsKGMubm9kZSgpLFcpLGhs'@;
put 'ZShjLGwsYSxkLGgsZixfKX1mdW5jdGlvbiBobGUoYyxsLGEsZCxoLGYsXyl7dmFyIFQ9Xy5zaG9ydGVuaW5nfHwwLHdlPVtbMCwtMy41XSxbMTAsMF0sWzAsMy41XSxbMCwtMy41XV0sRWU9ZC1sLFplPWgtYSxpdD1NYXRoLnNxcnQoRWUqRWUrWmUqWmUpO2lmKDA9PWl0KXZhciBldD0xLHl0'@;
put 'PTA7ZWxzZSBldD1FZS9pdCx5dD1aZS9pdDtpZihkPWwrKGl0LVQtMTAtLjEpKmV0LGg9YSsoaXQtVC0xMC0uMSkqeXQsZi5VUkx8fGYudG9vbHRpcCl2YXIgRXQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLFN0'@;
put 'PUV0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxKdD1FdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7ZWxzZSBTdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxKdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRp'@;
put 'b24oInBvbHlnb24iKTt2YXIgbm49dWxlKCk7bm4ubW92ZVRvKGwsYSksbm4ubGluZVRvKGQsaCksU3QuYXR0cigiZCIsbm4pLGQ9bCsoaXQtVC0xMCkqZXQsaD1hKyhpdC1ULTEwKSp5dDtmb3IodmFyIHZuPTA7dm48d2UubGVuZ3RoO3ZuKyspd2Vbdm5dPUNRZSgoTm49d2Vbdm5dKVswXSxO'@;
put 'blsxXSxldCx5dCk7Zm9yKHZuPTA7dm48d2UubGVuZ3RoO3ZuKyspd2Vbdm5dPVtkKyhObj13ZVt2bl0pWzBdLGgrTm5bMV1dO3ZhciBjcj1bXTtmb3Iodm49MDt2bjx3ZS5sZW5ndGg7dm4rKyl7dmFyIE5uO2NyLnB1c2goKE5uPXdlW3ZuXSkuam9pbigiLCIpKX12YXIgSXI9Y3Iuam9pbigi'@;
put 'ICIpO3JldHVybiBKdC5hdHRyKCJwb2ludHMiLElyKSx0aGlzfWZ1bmN0aW9uIGZsZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/KHRoaXMuX2RyYXduRWRnZS5nLnJlbW92ZSgpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXMpOnRoaXN9ZnVuY3Rpb24gcGxlKCl7cmV0dXJuIHRoaXMuX2Ry'@;
put 'YXduRWRnZT90aGlzLl9kcmF3bkVkZ2UuZzprcyhudWxsKX1mdW5jdGlvbiBnbGUoYyl7dmFyIGw9IiI7Zm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGMpKW51bGwhPWNbYV0mJihsKz0nICInK2ErJyI9IicrY1thXSsnIicpO3ZhciBoPXRoaXMubGF5b3V0U3luYygiZGlncmFwaCB7YSAtPiBi'@;
put 'IFsiK2wrIl19Iiwic3ZnIiwiZG90IiksXz0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhoLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIGtzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIF8uZG9jdW1lbnRF'@;
put 'bGVtZW50fSkuc2VsZWN0KCIuZWRnZSIpfWZ1bmN0aW9uIG1sZShjLGwsYSxkLGgsZil7dmFyIFQ9WGcoeWxlLmNhbGwodGhpcyxkLGgpKTtyZXR1cm4gYy5kYXRhKFtUXSksX3cuY2FsbChjLm5vZGUoKSxUKSx2bGUoYyxsLGEsaCksdGhpc31mdW5jdGlvbiB2bGUoYyxsLGEsZCxoKXtpZihk'@;
put 'LlVSTHx8ZC50b29sdGlwKXZhciBmPWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKTtlbHNlIGY9Yzt2YXIgXz1mLnNlbGVjdEFsbCgiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxUPWMuc2VsZWN0V2l0'@;
put 'aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO2lmKDAhPV8uc2l6ZSgpKXt2YXIgVz1fLm5vZGUoKS5nZXRCQm94KCk7Vy5jeD1XLngrVy53aWR0aC8yLFcuY3k9Vy55K1cuaGVpZ2h0LzJ9ZWxzZSAwIT1ULnNpemUoKSYmKFc9e3g6K1QuYXR0cigieCIpLHk6K1QuYXR0cigieSIpLHdpZHRo'@;
put 'OjAsaGVpZ2h0OjAsY3g6K1QuYXR0cigieCIpLGN5OitULmF0dHIoInkiKX0pO3JldHVybiBfLmVhY2goZnVuY3Rpb24oaWUscGUpe3ZhciB3ZT1rcyh0aGlzKTtpZih3ZS5hdHRyKCJjeCIpKXdlLmF0dHIoImN4IixjNChsKSkuYXR0cigiY3kiLGM0KGEpKTtlbHNlIGlmKHdlLmF0dHIoInBv'@;
put 'aW50cyIpKXt2YXIgRWU9d2UuYXR0cigicG9pbnRzIikudHJpbSgpO3dlLmF0dHIoInBvaW50cyIsZnVuY3Rpb24gRkplKGYsbCxhKXt2YXIgaCxkPShoPWYuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBfLnNwbGl0KCIsIil9KTtyZXR1cm4gZD1oLm1hcChmdW5jdGlvbihf'@;
put 'KXtyZXR1cm5bYzQoK2wrICtfLnNwbGl0KCIsIilbMF0pLGM0KCthKyArXy5zcGxpdCgiLCIpWzFdKV19KSwoaD1kLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5qb2luKCIsIil9KSkuam9pbigiICIpfShFZSxsLVcuY3gsYS1XLmN5KSl9ZWxzZXt2YXIgWmU9d2UuYXR0cigiZCIpO3dlLmF0'@;
put 'dHIoImQiLGZ1bmN0aW9uIEhKZShjLGwsYSl7KGY9Yy5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCk7dmFyIGQ9Yy5zcGxpdCgvW15bQS1aIF0rLyksZj0oZi5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uc3BsaXQoIiwiKX0pLGYubWFwKGZ1bmN0aW9uKF8pe3JldHVybltjNCgrbCsgK18uc3Bs'@;
put 'aXQoIiwiKVswXSksYzQoK2ErICtfLnNwbGl0KCIsIilbMV0pXX0pLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5qb2luKCIsIil9KSk7cmV0dXJuIGQucmVkdWNlKGZ1bmN0aW9uKF8sVCxXKXtyZXR1cm4gXy5jb25jYXQoVCxmW1ddKX0sW10pLmpvaW4oIiIpfShaZSxsLVcuY3gsYS1XLmN5'@;
put 'KSl9fSksMCE9VC5zaXplKCkmJlQuYXR0cigieCIsYzQoK1QuYXR0cigieCIpK2wtVy5jeCkpLmF0dHIoInkiLGM0KCtULmF0dHIoInkiKSthLVcuY3kpKSx0aGlzfWZ1bmN0aW9uIF9sZSgpe2lmKCF0aGlzLl9kcmF3bk5vZGUpcmV0dXJuIHRoaXM7dmFyIGM9dGhpcy5fZHJhd25Ob2RlLmc7'@;
put 'cmV0dXJuIGMuZW1wdHkoKXx8Yy5yZW1vdmUoKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfWZ1bmN0aW9uIGJsZSgpe3JldHVybiB0aGlzLl9kcmF3bk5vZGU/dGhpcy5fZHJhd25Ob2RlLmc6a3MobnVsbCl9ZnVuY3Rpb24geWxlKGMsbCl7dmFyIGE9IiI7Zm9yKHZhciBkIG9mIE9iamVj'@;
put 'dC5rZXlzKGwpKW51bGwhPWxbZF0mJihhKz0nICInK2QrJyI9IicrbFtkXSsnIicpO3ZhciBmPXRoaXMubGF5b3V0U3luYygnZ3JhcGggeyInK2MrJyIgWycrYSsiXX0iLCJzdmciLCJkb3QiKSxUPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGYsImltYWdlL3N2Zyt4'@;
put 'bWwiKTtyZXR1cm4ga3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVC5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5ub2RlIil9ZnVuY3Rpb24gT1QoYyl7c2VsZi5kb2N1bWVudD17fSxjLmFkZEV2ZW50TGlzdGVuZXIoIm1l'@;
put 'c3NhZ2UiLGZ1bmN0aW9uKGwpe2xldCBhPXNlbGZbIkBocGNjLWpzL3dhc20iXTtudWxsPT1hJiZsLmRhdGEudml6VVJMJiYoaW1wb3J0U2NyaXB0cyhsLmRhdGEudml6VVJMKSxhPXNlbGZbIkBocGNjLWpzL3dhc20iXSksInZlcnNpb24iIT1sLmRhdGEudHlwZT9hLkdyYXBodml6LmxvYWQo'@;
put 'KS50aGVuKGQ9Pntjb25zdCBoPWQubGF5b3V0KGwuZGF0YS5kb3QsInN2ZyIsbC5kYXRhLmVuZ2luZSxsLmRhdGEub3B0aW9ucyk7Yy5wb3N0TWVzc2FnZShoP3t0eXBlOiJkb25lIixzdmc6aH06bC5kYXRhLnZpelVSTD97dHlwZToiaW5pdCJ9Ont0eXBlOiJza2lwIn0pfSkuY2F0Y2goZD0+'@;
put 'e2MucG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixlcnJvcjpkLm1lc3NhZ2V9KX0pOmEuR3JhcGh2aXoubG9hZCgpLnRoZW4oZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6InZlcnNpb24iLHZlcnNpb246ZC52ZXJzaW9uKCl9KX0pfSl9ZnVuY3Rpb24gSVFlKCl7T1Qoc2VsZil9ZnVuY3Rpb24g'@;
put 'TFFlKCl7c2VsZi5vbmNvbm5lY3Q9ZnVuY3Rpb24oYyl7Y29uc3QgbD1jLnBvcnRzWzBdO09UKGwpLGwuc3RhcnQoKX19ZnVuY3Rpb24gaVooYyxsKXtpZih0aGlzLl9vcHRpb25zPXt1c2VXb3JrZXI6ITAsdXNlU2hhcmVkV29ya2VyOiExLGVuZ2luZToiZG90IixrZXlNb2RlOiJ0aXRsZSIs'@;
put 'ZmFkZTohMCx0d2VlblBhdGhzOiEwLHR3ZWVuU2hhcGVzOiEwLGNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnM6ITAsdHdlZW5QcmVjaXNpb246MSxncm93RW50ZXJpbmdFZGdlczohMCx6b29tOiEwLHpvb21TY2FsZUV4dGVudDpbLjEsMTBdLHpvb21UcmFuc2xhdGVFeHRlbnQ6W1stMS8wLC0x'@;
put 'LzBdLFsxLzAsMS8wXV0sd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxzY2FsZToxLGZpdDohMX0sbCBpbnN0YW5jZW9mIE9iamVjdClmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMobCkpdGhpcy5fb3B0aW9uc1thXT1sW2FdO2Vsc2UiYm9vbGVhbiI9PXR5cGVvZiBsJiYodGhpcy5fb3B0aW9ucy51'@;
put 'c2VXb3JrZXI9bCk7dmFyIGQ9dGhpcy5fb3B0aW9ucy51c2VXb3JrZXIsaD10aGlzLl9vcHRpb25zLnVzZVNoYXJlZFdvcmtlcjtpZih0eXBlb2YgV29ya2VyPiJ1IiYmKGQ9ITEpLHR5cGVvZiBTaGFyZWRXb3JrZXI+InUiJiYoaD0hMSksZHx8aCl7dmFyIF89TVUoInNjcmlwdCIpLmZpbHRl'@;
put 'cihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PWtzKHRoaXMpLmF0dHIoInR5cGUiKXx8a3ModGhpcykuYXR0cigic3JjIikmJmtzKHRoaXMpLmF0dHIoInNyYyIpLm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PV8uc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05v'@;
put 'IHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKToodGhpcy5fdml6VVJMPV8uYXR0cigic3JjIiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJu'@;
put 'KCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSkpfWlmKGgpe2NvbnN0IGllPSJkYXRhOmFwcGxpY2F0aW9u'@;
put 'L2phdmFzY3JpcHQ7YmFzZTY0LCIrYnRvYShPVC50b1N0cmluZygpKyIoIitMUWUudG9TdHJpbmcoKSsiKSgpIik7dGhpcy5fd29ya2VyPXRoaXMuX3dvcmtlcj1uZXcgU2hhcmVkV29ya2VyKGllKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlci5wb3J0LHRoaXMuX3dvcmtlclBvcnRD'@;
put 'bG9zZT10aGlzLl93b3JrZXIucG9ydC5jbG9zZS5iaW5kKHRoaXMuX3dvcmtlclBvcnQpLHRoaXMuX3dvcmtlci5wb3J0LnN0YXJ0KCksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgaWYoZCl7dmFyIFQ9bmV3IEJsb2IoW09ULnRvU3RyaW5nKCkrIigiK0lRZS50b1N0cmluZygpKyIp'@;
put 'KCkiXSksVz13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChUKTt0aGlzLl93b3JrZXI9bmV3IFdvcmtlcihXKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlcix0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnRlcm1pbmF0ZS5iaW5kKHRoaXMuX3dvcmtlciksdGhpcy5f'@;
put 'd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgRFQubG9hZCgpLnRoZW4oKGllPT57dGhpcy5fZ3JhcGh2aXpWZXJzaW9uPWllLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlvbj1jLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVl'@;
put 'dWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5'@;
put 'b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJTdGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0'@;
put 'b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPXhVKC4uLnRoaXMuX2V2ZW50VHlwZXMpLE5KZS5jYWxsKHRoaXMpLGMubm9kZSgpLl9fZ3JhcGh2aXpfXz10aGlzfWZ1bmN0aW9uIFBUKGMsbCl7cmV0dXJuIGtzKGMpLmdyYXBodml6KGwpfXVsZS5wcm90b3R5cGU9cloucHJv'@;
put 'dG90eXBlLGlaLnByb3RvdHlwZT1QVC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlaLGVuZ2luZTpmdW5jdGlvbiBYSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZW5naW5lPWMsdGhpc30sYWRkSW1hZ2U6ZnVuY3Rpb24gSkplKGMsbCxhKXtyZXR1cm4gdGhpcy5faW1hZ2VzLnB1c2goe3Bh'@;
put 'dGg6Yyx3aWR0aDpsLGhlaWdodDphfSksdGhpc30sa2V5TW9kZTpmdW5jdGlvbiBRSmUoYyl7aWYoIXRoaXMuX2tleU1vZGVzLmhhcyhjKSl0aHJvdyBFcnJvcigiSWxsZWdhbCBrZXlNb2RlOiAiK2MpO2lmKGMhPXRoaXMuX29wdGlvbnMua2V5TW9kZSYmbnVsbCE9dGhpcy5fZGF0YSl0aHJv'@;
put 'dyBFcnJvcigiVG9vIGxhdGUgdG8gY2hhbmdlIGtleU1vZGUiKTtyZXR1cm4gdGhpcy5fb3B0aW9ucy5rZXlNb2RlPWMsdGhpc30sZmFkZTpmdW5jdGlvbiBlUWUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZmFkZT1jLHRoaXN9LHR3ZWVuUGF0aHM6ZnVuY3Rpb24gdFFlKGMpe3JldHVybiB0'@;
put 'aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHM9Yyx0aGlzfSx0d2VlblNoYXBlczpmdW5jdGlvbiBuUWUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM9YyxjJiYodGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPSEwKSx0aGlzfSxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOmZ1bmN0'@;
put 'aW9uIHJRZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zPWMsdGhpc30sdHdlZW5QcmVjaXNpb246ZnVuY3Rpb24gaVFlKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uPWMsdGhpc30sZ3Jvd0VudGVyaW5nRWRnZXM6ZnVuY3Rp'@;
put 'b24gb1FlKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzPWMsdGhpc30sem9vbTpmdW5jdGlvbiBhSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbT1jLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvcj9LYWUuY2FsbCh0aGlzKTohdGhp'@;
put 'cy5fb3B0aW9ucy56b29tJiZ0aGlzLl96b29tQmVoYXZpb3ImJih0aGlzLl96b29tU2VsZWN0aW9uLm9uKCIuem9vbSIsbnVsbCksdGhpcy5fem9vbUJlaGF2aW9yPW51bGwpLHRoaXN9LHJlc2V0Wm9vbTpmdW5jdGlvbiBsSmUoYyl7dmFyIGw9dGhpcy5fem9vbVNlbGVjdGlvbjtyZXR1cm4g'@;
put 'YyYmKGw9bC50cmFuc2l0aW9uKGMpKSxsLmNhbGwodGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybSksdGhpc30sem9vbUJlaGF2aW9yOmZ1bmN0aW9uIGRKZSgpe3JldHVybiB0aGlzLl96b29tQmVoYXZpb3J8fG51bGx9LHpvb21TZWxlY3Rpb246'@;
put 'ZnVuY3Rpb24gaEplKCl7cmV0dXJuIHRoaXMuX3pvb21TZWxlY3Rpb258fG51bGx9LHpvb21TY2FsZUV4dGVudDpmdW5jdGlvbiBjSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50PWMsdGhpc30sem9vbVRyYW5zbGF0ZUV4dGVudDpmdW5jdGlvbiB1SmUoYyl7cmV0'@;
put 'dXJuIHRoaXMuX29wdGlvbnMuem9vbVRyYW5zbGF0ZUV4dGVudD1jLHRoaXN9LHJlbmRlcjpmdW5jdGlvbiBfSmUoYyl7cmV0dXJuIHRoaXMuX2J1c3k/KHRoaXMuX3F1ZXVlLnB1c2godGhpcy5yZW5kZXIuYmluZCh0aGlzLGMpKSx0aGlzKToodGhpcy5fZGlzcGF0Y2guY2FsbCgicmVuZGVy'@;
put 'U3RhcnQiLHRoaXMpLHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5P2hUKGZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvbj1WVSh0aGlzLl90cmFuc2l0aW9uRmFjdG9yeSgpKSxRYWUuY2FsbCh0aGlzLGMpfS5iaW5kKHRoaXMpLDApOlFhZS5jYWxsKHRoaXMsYyksdGhpcyl9LGxheW91dDpmdW5j'@;
put 'dGlvbiBWSmUoYyxsLGEsZCl7aWYodGhpcy5fd29ya2VyKUpVLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2QuY2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEp'@;
put 'O2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24gQkplKGMsbCl7dmFyIGE9dGhpcyxoPXRoaXMuX29wdGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVy'@;
put 'biB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2VyfHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKFQp'@;
put 'e3N3aXRjaChULnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IFQuZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKFQuZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6akplLmNhbGwodGhpcyxULnN2ZyxsKX19KSx0aGlzKToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQo'@;
put 'dGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIGdKZSgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gekplKGMsbCl7dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1'@;
put 'bmN0aW9uIFVKZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1WVShjKSx0aGlzfSxhY3RpdmU6ZnVuY3Rpb24gWkplKGMpe3ZhciBhPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3Bh'@;
put 'Z2F0aW9uKCJzdmciKTtyZXR1cm4gMCE9YS5zaXplKCk/ZnVuY3Rpb24gQlhlKGMsbCl7dmFyIGQsaCxhPWMuX190cmFuc2l0aW9uO2lmKGEpZm9yKGggaW4gbD1udWxsPT1sP251bGw6bCsiIixhKWlmKChkPWFbaF0pLnN0YXRlPjEmJmQubmFtZT09PWwpcmV0dXJuIG5ldyBMaChbW2NdXSxW'@;
put 'WGUsbCwraCk7cmV0dXJuIG51bGx9KGEubm9kZSgpLGMpOm51bGx9LG9wdGlvbnM6ZnVuY3Rpb24gWUplKGMpe2lmKHR5cGVvZiBjPiJ1IilyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9vcHRpb25zKTtmb3IodmFyIGwgb2YgT2JqZWN0LmtleXMoYykpdGhpcy5fb3B0aW9uc1tsXT1j'@;
put 'W2xdO3JldHVybiB0aGlzfSx3aWR0aDpmdW5jdGlvbiBXSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMud2lkdGg9Yyx0aGlzfSxoZWlnaHQ6ZnVuY3Rpb24gR0plKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmhlaWdodD1jLHRoaXN9LHNjYWxlOmZ1bmN0aW9uICRKZShjKXtyZXR1cm4gdGhp'@;
put 'cy5fb3B0aW9ucy5zY2FsZT1jLHRoaXN9LGZpdDpmdW5jdGlvbiBxSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZml0PWMsdGhpc30sYXR0cmlidXRlcjpmdW5jdGlvbiBLSmUoYyl7cmV0dXJuIHRoaXMuX2F0dHJpYnV0ZXI9Yyx0aGlzfSxvbjpmdW5jdGlvbiBzUWUoYyxsKXtyZXR1cm4g'@;
put 'dGhpcy5fZGlzcGF0Y2gub24oYyxsKSx0aGlzfSxvbmVycm9yOmZ1bmN0aW9uIGFRZShjKXtyZXR1cm4gdGhpcy5fb25lcnJvcj1jLHRoaXN9LGxvZ0V2ZW50czpmdW5jdGlvbiBfUWUoYyl7dmFyIGw9RGF0ZS5ub3coKSxhPXt9LGQ9dGhpcy5fZXZlbnRUeXBlcyxoPU1hdGgubWF4KC4uLmQu'@;
put 'bWFwKFc9PlcubGVuZ3RoKSk7Zm9yKGxldCBXPTA7VzxkLmxlbmd0aDtXKyspe2xldCBpZT1kW1ddO2FbaWVdPVtdO3ZhciBfLFQsZj10aGlzO3RoaXMub24oaWUrIi5sb2ciLGM/ZnVuY3Rpb24oKXt2YXIgcGU9RGF0ZS5ub3coKSx3ZT1hW2llXS5sZW5ndGg7YVtpZV0ucHVzaChwZSk7dmFy'@;
put 'IEVlPSIiO2lmKEVlKz0iRXZlbnQgIixFZSs9d2QoIiA+MiIpKFcpKyIgIixFZSs9aWUrIiAiLnJlcGVhdChoLWllLmxlbmd0aCksRWUrPXdkKCIgPjUiKShwZS1sKSsiICIsImluaXRFbmQiIT1pZSYmKEVlKz13ZCgiID41IikocGUtYS5zdGFydFt3ZV0pKSwiZGF0YVByb2Nlc3NFbmQiPT1p'@;
put 'ZSYmKEVlKz0iIHByZXBhcmUgICAgICAgICAgICAgICAgICIrd2QoIiA+NSIpKHBlLWEubGF5b3V0RW5kW3dlXSkpLCJyZW5kZXJFbmQiPT1pZSYmZi5fdHJhbnNpdGlvbiYmKEVlKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIrd2QoIiA+NSIpKGYuX3RyYW5zaXRpb24uZGVsYXkoKS0o'@;
put 'cGUtYS5yZW5kZXJTdGFydFt3ZV0pKSxfPWYuX3RyYW5zaXRpb24uZGVsYXkoKSxUPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PWllKXt2YXIgWmU9cGUtYS5yZW5kZXJTdGFydFt3ZV07RWUrPSIgdHJhbnNpdGlvbiBkZWxheSAgICAgICAgIit3ZCgiID41'@;
put 'IikocGUtYS5yZW5kZXJTdGFydFt3ZV0pLEVlKz0iIGV4cGVjdGVkICIrd2QoIiA+NSIpKF8pLEVlKz0iIGRpZmYgIit3ZCgiID41IikoWmUtXyl9aWYoInRyYW5zaXRpb25FbmQiPT1pZSl7dmFyIGl0PXBlLWEudHJhbnNpdGlvblN0YXJ0W3dlXTtFZSs9IiB0cmFuc2l0aW9uIGR1cmF0aW9u'@;
put 'ICAgICAiK3dkKCIgPjUiKShpdCksRWUrPSIgZXhwZWN0ZWQgIit3ZCgiID41IikoVCksRWUrPSIgZGlmZiAiK3dkKCIgPjUiKShpdC1UKX1jb25zb2xlLmxvZyhFZSksbD1wZX06bnVsbCl9cmV0dXJuIHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24gYlFlKCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9z'@;
put 'ZWxlY3Rpb24ubm9kZSgpLl9fZ3JhcGh2aXpfXyx0aGlzLl93b3JrZXImJnRoaXMuX3dvcmtlclBvcnRDbG9zZSgpLHRoaXN9LGRyYXdFZGdlOmZ1bmN0aW9uIFNRZShjLGwsYSxkLGgsZj17fSl7aWYoKGg9T2JqZWN0LmFzc2lnbih7fSxoKSkuc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImlu'@;
put 'dmlzIikpdmFyIF89a3MobnVsbCk7ZWxzZXt2YXIgaWU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSx3ZT1YZyhnbGUuY2FsbCh0aGlzLGgpKTtfPWllLmFwcGVuZCgiZyIpLmRhdGEo'@;
put 'W3dlXSksX3cuY2FsbChfLm5vZGUoKSx3ZSksZGxlLmNhbGwodGhpcyxfLGMsbCxhLGQsaCxmKX1yZXR1cm4gdGhpcy5fZHJhd25FZGdlPXtnOl8seDE6Yyx5MTpsLHgyOmEseTI6ZCxhdHRyaWJ1dGVzOmh9LHRoaXN9LHVwZGF0ZURyYXduRWRnZTpmdW5jdGlvbiBNUWUoYyxsLGEsZCxoPXt9'@;
put 'LGY9e30pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgXz10aGlzLl9kcmF3bkVkZ2UuZztyZXR1cm4gaD1PYmplY3QuYXNzaWduKHRoaXMuX2RyYXduRWRnZS5hdHRyaWJ1dGVzLGgpLHRoaXMuX2RyYXduRWRnZS54MT1jLHRo'@;
put 'aXMuX2RyYXduRWRnZS55MT1sLHRoaXMuX2RyYXduRWRnZS54Mj1hLHRoaXMuX2RyYXduRWRnZS55Mj1kLCFfLmVtcHR5KCl8fGguc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImludmlzIil8fChfPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5z'@;
put 'ZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuYXBwZW5kKCJnIiksdGhpcy5fZHJhd25FZGdlLmc9XyksXy5lbXB0eSgpfHxkbGUuY2FsbCh0aGlzLF8sYyxsLGEsZCxoLGYpLHRoaXN9LG1vdmVEcmF3bkVkZ2VFbmRQb2ludDpmdW5jdGlvbiB4UWUoYyxsLGE9e30pe2lmKCF0aGlz'@;
put 'Ll9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bkVkZ2UuZyxoPXRoaXMuX2RyYXduRWRnZS54MSxmPXRoaXMuX2RyYXduRWRnZS55MSxfPXRoaXMuX2RyYXduRWRnZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bkVk'@;
put 'Z2UueDI9Yyx0aGlzLl9kcmF3bkVkZ2UueTI9bCxobGUoZCxoLGYsYyxsLF8sYSksdGhpc30saW5zZXJ0RHJhd25FZGdlOmZ1bmN0aW9uIEVRZShjKXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGw9dGhpcy5fZHJhd25FZGdl'@;
put 'Lmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO2wuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpO3ZhciBfPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJn'@;
put 'IiksVD1fLmRhdHVtKCksVz10aGlzLl9leHRyYWN0RGF0YShsLFQuY2hpbGRyZW4ubGVuZ3RoLF8uZGF0dW0oKSk7cmV0dXJuIFQuY2hpbGRyZW4ucHVzaChXKSxZVShsLFcpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTpmbGUscmVtb3ZlRHJhd25FZGdlOmZs'@;
put 'ZSxkcmF3bkVkZ2VTZWxlY3Rpb246cGxlLGRyYXduRWRnZVNlbGVjdGlvbjpwbGUsZHJhd05vZGU6ZnVuY3Rpb24ga1FlKGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkKSkuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9a3MobnVsbCk7ZWxz'@;
put 'ZXt2YXIgVz10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLHBlPVhnKHlsZS5jYWxsKHRoaXMsYSxkKSk7Zj1XLmFwcGVuZCgiZyIpLmRhdGEoW3BlXSksX3cuY2FsbChmLm5vZGUoKSxw'@;
put 'ZSksbWxlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVuY3Rpb24gQVFlKGMsbCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJv'@;
put 'dyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxkPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25Ob2RlLm5v'@;
put 'ZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERh'@;
put 'dGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8bWxlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURyYXduTm9kZTpmdW5jdGlvbiBUUWUoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3Io'@;
put 'Ik5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsZC5lbXB0eSgpfHx2bGUoZCxjLGwsaCksdGhpc30saW5zZXJ0RHJh'@;
put 'd25Ob2RlOmZ1bmN0aW9uIERRZShjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCk7dmFyIGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlz'@;
put 'O3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXApdmFyIGY9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9w'@;
put 'YWdhdGlvbigiYSIpLFQ9KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKSk7ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2Us'@;
put 'cG9seWdvbixwYXRoLHBvbHlsaW5lIiksVD1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtULnRleHQoYS5sYWJlbHx8Yyk7dmFyIHBlPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3Bh'@;
put 'Z2F0aW9uKCJnIiksd2U9cGUuZGF0dW0oKSxFZT10aGlzLl9leHRyYWN0RGF0YShsLHdlLmNoaWxkcmVuLmxlbmd0aCxwZS5kYXR1bSgpKTtyZXR1cm4gd2UuY2hpbGRyZW4ucHVzaChFZSksWVUobCxFZSksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc30scmVtb3ZlRHJhd25Ob2RlOl9sZSxy'@;
put 'ZW1vdmVEcmF3bk5vZGU6X2xlLGRyYXduTm9kZVNlbGVjdGlvbjpibGUsZHJhd25Ob2RlU2VsZWN0aW9uOmJsZSxncmFwaHZpelZlcnNpb246ZnVuY3Rpb24gYkplKCl7cmV0dXJuIHRoaXMuX2dyYXBodml6VmVyc2lvbn19LFlnLnByb3RvdHlwZS5ncmFwaHZpej1mdW5jdGlvbiBSUWUoYyl7'@;
put 'dmFyIGw9dGhpcy5ub2RlKCkuX19ncmFwaHZpel9fO3JldHVybiBsPyhsLm9wdGlvbnMoYyksaFQoZnVuY3Rpb24oKXtsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKX0uYmluZCh0aGlzKSwwKSk6bD1uZXcgaVoodGhpcyxjKSxsfSxZZy5wcm90b3R5cGUuc2VsZWN0V2l0aG91dERh'@;
put 'dGFQcm9wYWdhdGlvbj1mdW5jdGlvbiBPUWUoYyl7cmV0dXJuIGtzKHRoaXMuc2l6ZSgpPjA/dGhpcy5ub2RlKCkucXVlcnlTZWxlY3RvcihjKTpudWxsKX07dmFyIFBRZT1GKDg4NzAwKTtmdW5jdGlvbiBGUWUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyOCl9ZnVuY3Rpb24gSFFlKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBOUWUoYyxsKXtp'@;
put 'ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMikoMSwiZGl2IiwyMykoMiwiaW5wdXQiLDI0LDI1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigp'@;
put 'e3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCksSmUoNCxGUWUsMSwwLCJjbHItaWNvbiIsMjYpLEplKDUsSFFlLDEsMCwiY2xyLWljb24iLDI3KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJy'@;
put 'YXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFZRZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI4KX1mdW5jdGlvbiBCUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt'@;
put 'ZSgwLCJjbHItaWNvbiIsMjkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgyKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUi'@;
put 'KSl9KSx5ZSgpfX1mdW5jdGlvbiBqUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMikoMSwiZGl2IiwyMykoMiwiaW5wdXQiLDM1LDM2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNp'@;
put 'dC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSx5ZSgpLEplKDQsVlFlLDEsMCwiY2xyLWljb24iLDI2KSxKZSg1LEJRZSwx'@;
put 'LDAsImNsci1pY29uIiwyNykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+'@;
put 'MCl9fWZ1bmN0aW9uIHpRZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI4KX1mdW5jdGlvbiBVUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMjkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgpLiRpbXBs'@;
put 'aWNpdCxfPVZlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIFpRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDIyKSgxLCJk'@;
put 'aXYiLDIzKSgyLCJpbnB1dCIsMzksMzYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZl'@;
put 'KDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpLEplKDQselFlLDEsMCwiY2xyLWljb24iLDI2KSxKZSg1LFVRZSwxLDAsImNsci1pY29uIiwyNykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCkuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVs'@;
put 'IixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gWVFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDApLHh0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPVZlKCkuJGltcGxpY2l0LFQ9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbHVtbk9uQ2xpY2soZixULF8pKX0pLHF0KDIsImNsci1pY29uIiw0MSksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3Qg'@;
put 'YT1sLiRpbXBsaWNpdCxkPVZlKDQpO0NlKDEpLGRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLENlKDIpLGdyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gV1FlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIs'@;
put 'MzEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU5vZGVDbGlja2VkKGgsXyxULnRhYmxlcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSku'@;
put 'JGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMzcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50YWJsZU9uQ2xpY2soZi5UQUJMRVVSSSxmLF8pKX0pLHF0KDIsImNsci1pY29uIiwz'@;
put 'OCksTmUoMykseWUoKSxKZSg0LFpRZSw2LDMsImNsci10cmVlLW5vZGUiLDEpLEplKDUsWVFlLDQsMywiY2xyLXRyZWUtbm9kZSIsMikseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFu'@;
put 'ZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksQ2UoMSksUmUoImlkIixhLlRBQkxFVVJJKSxDZSgyKSxncigiICIsYS5UQUJMRU5BTUUsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS5jb2x1bW5zKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVu'@;
put 'Y3Rpb24gR1FlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmxpYnJhcnlMaXN0'@;
put 'KSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGYubGli'@;
put 'PWguTElCUkFSWUlELGp0KGYubGlicmFyeU9uQ2xpY2soZi5saWJ8fCIiLGgpKX0pLHF0KDIsImNsci1pY29uIiwzMyksTmUoMykseWUoKSxKZSg0LGpRZSw2LDMsImNsci10cmVlLW5vZGUiLDEpLEplKDUsV1FlLDYsOCwiY2xyLXRyZWUtbm9kZSIsMzQpLHllKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PVZlKCkuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxncigiICIsYS5MSUJSQVJZTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixh'@;
put 'LnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gJFFlKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxHUWUsNiw3LCJjbHItdHJlZS1ub2RlIiwzMCksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEu'@;
put 'aW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gcVFlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0MikoMSwic3BhbiIsNDMpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gS1FlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0NCkscXQoMSwiY2xyLWljb24iLDQ1KSxtZSgyLCJoMyIs'@;
put 'NDYpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSBjb2x1bW4gb3IgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIFhRZShjLGwpe2lmKDEmYyYmKG1lKDAsImgzIiw1NSksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLGdyKCIgIixhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj9h'@;
put 'LmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKyIuIithLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbjphLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlLCIgIil9fWZ1bmN0aW9uIEpRZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNTMpLEplKDEsWFFlLDIsMSwiaDMiLDU0KSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCFhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbiYmIWEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUpfX1mdW5jdGlvbiBRUWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSksbWUoMiwiYSIsNTYpLE5lKDMpLHllKCks'@;
put 'TmUoNCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2EubGluZWFnZVRhYmxlTmFtZSksQ2UoMSksb3IoYS5saW5lYWdlVGFibGVOYW1l'@;
put 'LnNwbGl0KCIuIilbMV0pLENlKDEpLGdyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gZWV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiBCdChhKSxqdChWZSg0KS5kb3dubG9hZFBORygpKX0pLE5lKDEsIiBQTkcgIikseWUoKX19ZnVuY3Rpb24gdGV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5kb3dubG9h'@;
put 'ZENTVigpKX0pLE5lKDEsIiBDU1YgIikseWUoKX19ZnVuY3Rpb24gbmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmRvd25sb2FkU1ZH'@;
put 'KCkpfSksTmUoMiwiU1ZHIikseWUoKSxKZSgzLGVldCwyLDAsImRpdiIsNjcpLG1lKDQsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZG93bmxvYWREb3QoKSl9KSxOZSg1LCJEb3QiKSx5ZSgpLEplKDYsdGV0LDIsMCwiZGl2Iiw2NykseWUo'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMyksUmUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpLENlKDMpLFJlKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVuY3Rpb24gcmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIi'@;
put 'LDY4KSgxLCJpbnB1dCIsNjkpLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnJlZnJlc2hDYWNoZT1oKX0pLHllKCksbWUoMiwibGFi'@;
put 'ZWwiKSxOZSgzLCJSZWZyZXNoIENhY2hlIikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdNb2RlbCIsYS5yZWZyZXNoQ2FjaGUpfX1mdW5jdGlvbiBpZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDU3KSgxLCJidXR0b24iLDU4KSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmxpbWl0RG90RGVwdGg9ITApfSksTmUoMiwiIExpbWl0IGRlcHRoICIpLHllKCksbWUoMywiZGl2Iiw1OSkoNCwiZGl2Iiw2MCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgu'@;
put 'Zm9yd2FyZExpbmVhZ2U9ITEsanQoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKX0pLHF0KDUsImlucHV0Iiw2MSksbWUoNiwibGFiZWwiKSxOZSg3LCJCYWNrd2FyZCIpLHllKCkoKSxtZSg4'@;
put 'LCJkaXYiLDYwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMCxqdChoLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkp'@;
put 'fSkscXQoOSwiaW5wdXQiLDYxKSxtZSgxMCwibGFiZWwiKSxOZSgxMSwiRm9yd2FyZCIpLHllKCkoKSgpLG1lKDEyLCJjbHItZHJvcGRvd24iLDYyKSgxMywiYnV0dG9uIiw2MyksTmUoMTQsIiBEb3dubG9hZCAiKSxxdCgxNSwiY2xyLWljb24iLDE5KSx5ZSgpLEplKDE2LG5ldCw3LDIsImNs'@;
put 'ci1kcm9wZG93bi1tZW51IiwyMCkseWUoKSxKZSgxNyxyZXQsNCwxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjQpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLFJlKCJjaGVja2VkIiwhYS5mb3J3YXJkTGluZWFnZSksQ2UoNCksUmUoImNoZWNrZWQiLGEuZm9yd2FyZExpbmVh'@;
put 'Z2UpLENlKDQpLFJlKCJkaXNhYmxlZCIsIWEuY29sdW1uJiYhYS50YWJsZSksQ2UoNCksUmUoIm5nSWYiLGEuY29sdW1uKX19ZnVuY3Rpb24gb2V0KGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNzMpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIHNldChjLGwpezEmYyYmcXQo'@;
put 'MCwic3BhbiIsNDMpfWZ1bmN0aW9uIGFldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNzQpKDEsImRpdiIsNzUpLEplKDIsc2V0LDEsMCwic3BhbiIsNzYpLHllKCkscXQoMywiZGl2Iiw3NykseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDIpLFJlKCJuZ0lmIixhLmdyYXBoUmVuZGVy'@;
put 'aW5nKX19ZnVuY3Rpb24gY2V0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiZGl2Iiw3MCksSmUoMixvZXQsMiwwLCJzcGFuIiw3MSksSmUoMyxhZXQsNCwxLCJkaXYiLDcyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtkcigibXQtMiIsYS50YWJsZUZsYWcpLENlKDIpLFJlKCJu'@;
put 'Z0lmIixhLmdyYXBoTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFhLmdyYXBoTG9hZGluZyl9fWZ1bmN0aW9uIHVldChjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsSlFlLDIsMSwiZGl2Iiw0NyksbWUoMiwiZGl2Iiw0OCkoMywic2VjdGlvbiIsNDkpKDQsImRpdiIsNTApLEplKDUsUVFlLDUs'@;
put 'NCwic3BhbiIsNykseWUoKSxKZSg2LGlldCwxOCw0LCJkaXYiLDUxKSx5ZSgpLEplKDcsY2V0LDQsNCwiZGl2Iiw1MikseWUoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIWEuZ3JhcGhDb250YWluZXIpLENlKDQpLFJlKCJuZ0lmIixhLmxpbmVhZ2VUYWJsZU5h'@;
put 'bWUubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKSxDZSgxKSxSZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lcil9fWZ1bmN0aW9uIGRldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'QnQoYSksanQoVmUoMikucmVuZGVyVG9Eb3dubG9hZCgiUE5HIikpfSksTmUoMSwiIFBORyAiKSx5ZSgpfX1mdW5jdGlvbiBoZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNjUpKDEsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gQnQoYSksanQoVmUoKS5yZW5kZXJUb0Rvd25sb2FkKCJTVkciKSl9KSxOZSgyLCJTVkciKSx5ZSgpLEplKDMsZGV0LDIsMCwiZGl2Iiw2NyksbWUoNCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4gaC5kb3dubG9hZERvdCgp'@;
put 'LGp0KGguY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSl9KSxOZSg1LCIgRG90ICIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxSZSgibmdJZiIsIWEuaGVscGVyU2VydmljZS5pc01pY3Jvc29mdCl9fWNvbnN0IGZldD1GKDE2Njc2KTtsZXQgRlQ9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMucm91dGVyPWYsdGhpcy5sb2NhdGlvbj1fLHRoaXMuZXZlbnRTZXJ2aWNlPVQsdGhpcy5sb2dnZXJTZXJ2aWNlPVcsdGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlPWllLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9'@;
put 'IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVmPSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGws'@;
put 'dGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMs'@;
put 'dGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxkLGgsZj0hMSl7dmFyIF89dGhpcztyZXR1'@;
put 'cm4gZmkoZnVuY3Rpb24qKCl7ZC5jb2x1bW5zPyhkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLCEwPT09ZC5leHBhbmRlZCYmKF8udGFibGU9YSxmfHxfLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSkpOihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsXy50YWJs'@;
put 'ZT1hLF8uY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9ZC5MSUJOQU1FKyIuIitkLlRBQkxFTkFNRSx5aWVsZCBfLnNlbGVjdFRhYmxlKGEsZCksZnx8Xy5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpLF8uY29sbGFwc2VUcmVlSXRlbXMoaC50YWJsZXMsZCl9KSgpfXNlbGVjdFRhYmxl'@;
put 'KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhY29scyIsZikudGhlbihfPT57aC5jb2x1bW5z'@;
put 'TGlzdD1fLm1ldGFjb2xzLGguY29sdW1uc0xpc3QmJmguY29sdW1uc0xpc3QubGVuZ3RoPjAmJihkLmNvbHVtbnM9aC5jb2x1bW5zTGlzdCxkLmV4cGFuZGVkPSEwLGQubG9hZGluZ0NvbHVtbnM9ITEpfSkuY2F0Y2goXz0+XyksaC5zZXRHbG9iYWxEYXRhKCl9KSgpfWxvYWRNb3JlTGlicmFy'@;
put 'aWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVh'@;
put 'Y2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXt2'@;
put 'YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtkLmluRm9yZWdyb3VuZD0hMCxkLnRhYmxlcz9kLmV4cGFuZGVkPSFkLmV4cGFuZGVkOihkLmxvYWRpbmdUYWJsZXM9ITAseWllbGQgaC5zZWxlY3RMaWJyYXJ5KGEsZCkpLGguY29sbGFwc2VUcmVlSXRlbXMoaC5saWJyYXJ5TGlzdCxk'@;
put 'KX0pKCl9c2VsZWN0TGlicmFyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2gudGFibGVzTGlzdD1bXSxoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tsaWJ1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9n'@;
put 'ZXRtZXRhdGFibGVzIixmKS50aGVuKF89PntoLnRhYmxlc0xpc3Q9Xy5tZXRhdGFibGVzLGgudGFibGVzTGlzdCYmaC50YWJsZXNMaXN0Lmxlbmd0aD4wJiYoZC50YWJsZXM9aC50YWJsZXNMaXN0LGQuZXhwYW5kZWQ9ITApLGguc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2goXz0+XyksZC5sb2Fk'@;
put 'aW5nVGFibGVzPSExfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkksdGhpcy5zZXRHbG9iYWxEYXRhKCksdGhpcy5vbkdlbmVyYXRlQ2xpY2soKX10cmVlT25GaWx0ZXIoYSxkKXt0'@;
put 'aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEduLmxpbmVhZ2UubGlicmFyaWVzU2Vh'@;
put 'cmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfXNldEdsb2JhbERhdGEo'@;
put 'KXtHbi5saW5lYWdlLmxpYnJhcnlMaXN0PXRoaXMubGlicmFyeUxpc3QsR24ubGluZWFnZS50YWJsZXNMaXN0PXRoaXMudGFibGVzTGlzdCxHbi5saW5lYWdlLmNvbHVtbnNMaXN0PXRoaXMuY29sdW1uc0xpc3QsR24ubGluZWFnZS5saWI9dGhpcy5saWIsR24ubGluZWFnZS50YWJsZT10aGlz'@;
put 'LnRhYmxlLEduLmxpbmVhZ2UuY29sdW1uPXRoaXMuY29sdW1ufWxvYWRHbG9iYWxEYXRhKCl7dGhpcy5saWJyYXJ5TGlzdD1Hbi5saW5lYWdlLmxpYnJhcnlMaXN0LHRoaXMudGFibGVzTGlzdD1Hbi5saW5lYWdlLnRhYmxlc0xpc3QsdGhpcy5jb2x1bW5zTGlzdD1Hbi5saW5lYWdlLmNvbHVt'@;
put 'bnNMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoPUduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNofXJlc3VibWl0V2l0aE1heERlcHRoKGEpe2xldCBkO3RoaXMuY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSxhJiYoZD17bWF4X2RlcHRoOmF9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRp'@;
put 'dmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOmR9KX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2xpbmVhZ2UiO2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnJlbG9hZDtpZih2b2lkIDAhPT1hKXtsZXQgZD10aGlzLnJvdXRlci51cmw7InJl'@;
put 'bG9hZCI9PT1hP2xvY2FsU3RvcmFnZS5nZXRJdGVtKCJmaXJzdExvYWQiKT8obG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImZpcnN0TG9hZCIpLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKSk6KGxvY2FsU3RvcmFnZS5maXJzdExvYWQ9'@;
put 'ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMmUzKSk6dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpfXRoaXMuaW5pdERhdGEoKX1pbml0RGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1'@;
put 'bmN0aW9uKigpe0duLmxpbmVhZ2UubGlicmFyeUxpc3QmJihHbi5saW5lYWdlLmxpYnJhcnlMaXN0Lmxlbmd0aD4wP2EubG9hZEdsb2JhbERhdGEoKTp5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKS50aGVuKF89PnthLmxpYnJhcnlMaXN0PV8uc2Fz'@;
put 'bGlicyxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcnlMaXN0KSxhLmxpYnJhcnlMaXN0JiZhLmxpYnJhcnlMaXN0Lmxlbmd0aD4wJiYoYS5saWI9YS5saWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQpLGEuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2goXz0+XyksYS5yb3V0'@;
put 'ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoXz0+e2Eub25Sb3V0ZUNoYW5nZSgpfSksYS5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKF89PnthLm9uUm91dGVDaGFuZ2UoKX0pKX0pKCl9b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5j'@;
put 'ZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJpLGQ9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZGlyZWN0aW9uLGg9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVpZCxmPXRoaXMucm91dGUuc25hcHNob3Qu'@;
put 'cXVlcnlQYXJhbXMubWF4X2RlcHRoO2EmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy5jb2x1bW49YSx0aGlzLmdlbmVyYXRlR3JhcGgoYSxkLGYpKSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKSYmaCYmZCYmKHRoaXMuZm9yd2FyZExpbmVh'@;
put 'Z2U9IkZPUldBUkQiPT09ZCx0aGlzLnRhYmxlPWgsdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChoLGQsZikpfSx0aGlzLmRlYm91bmNlVGltZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7fWRpcmVjdGlvblRleHQoKXtyZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJF'@;
put 'VkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy5jb2x1bW4/dGhpcy5jb2x1bW4uc3Vic3RyaW5nKHRoaXMuY29sdW1uLmluZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2Nv'@;
put 'bHVtbi8iK2QrIi8iK2EpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMudGFibGUuaW5jbHVkZXMoIlxcIik/dGhpcy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92'@;
put 'aWV3L2xpbmVhZ2UvIitkKyIvIithKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOmEsZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1'@;
put 'bmRlZmluZWQiPT09Xy5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZlbCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJihfLlNBU0NvbnRy'@;
put 'b2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFi'@;
put 'bGVsaW5lYWdlIixfKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGllPWZpKGZ1bmN0aW9uKihwZSl7aWYocGUuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91'@;
put 'IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5l'@;
put 'YWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBwZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1wZS5pbmZvWzBdLkxJQlJFRisiLiIrcGUuaW5mb1swXS5UQUJMRU5BTUU7bGV0IHdlPXBlLmZp'@;
put 'bmFsZmluYWwsRWU9IiI7Zm9yKGxldCBaZT0wO1plPHdlLmxlbmd0aDtaZSsrKUVlKz11bmVzY2FwZSh3ZVtaZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPXBlLmZsYXRkYXRhLGYubGlicmFyeUxpc3Qpe2xldCBaZT1mLmxpYnJhcnlMaXN0LmZpbmQoaXQ9PnBlLmluZm9bMF0uTElCVVJJ'@;
put 'LnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoaXQuTElCUkFSWUlELnRvVXBwZXJDYXNlKCkpKTtpZihaZSl7bGV0IGl0O2lmKHlpZWxkIGYubGlicmFyeU9uQ2xpY2soWmUuTElCUkFSWUlELFplKSxaZS50YWJsZXMmJihpdD1aZS50YWJsZXMuZmluZChldD0+ZXQuVEFCTEVVUkkudG9VcHBlckNh'@;
put 'c2UoKS5pbmNsdWRlcyhwZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLGl0KSl7aWYoZi50YWJsZT1pdC5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBldD1mLnRhYmxlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO3NldFRpbWVvdXQoKCk9PntsZXQgeXQ9ZG9jdW1lbnQucXVlcnlTZWxl'@;
put 'Y3RvcihgW2lkPScke2V0fSddYCk7eXQmJnl0LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9uQ2xpY2soaXQuVEFCTEVVUkksaXQsWmUsdm9pZCAwIT09ZCl9WmUmJihaZS5leHBhbmRlZD0hMCksaXQmJihpdC5leHBhbmRlZD0hMCl9fWYudml6SW5wdXQ9RWV8fCJkaWdyYXBoIEcg'@;
put 'e05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29rdXA9cGUuaWRsb29rdXAscGUuZmluYWxmaW5hbC5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdl'@;
put 'RG90RmlsZUxpbmVzPXBlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLFQoKX0pO3JldHVybiBmdW5jdGlvbihwZSl7cmV0dXJuIGllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGllPT57Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9'@;
put 'KSgpfWNhbmNlbFJlbmRlcmluZ0dyYXBoKCl7dGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKX1jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl7dGhpcy5sYXJnZURvdEZpbGVM'@;
put 'aW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgoKT0+e2lmKG51bGwhPT10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7c3dpdGNoKHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtjYXNlIlBORyI6dGhpcy5kb3dubG9hZFBORygpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLmRvd25sb2FkU1ZH'@;
put 'KCl9dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5idWlsZEdyYXBoKCl9fSl9cmVuZGVyVG9Eb3dubG9hZChhKXtzd2l0Y2goYSl7Y2FzZSJQTkciOnRoaXMucGVuZGluZ1JlbmRlckRv'@;
put 'd25sb2FkPSJQTkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iU1ZHIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKX19bWFrZUdyYXBoTGlua2FibGUoYSl7bGV0IGQ9ZG9jdW1lbnQucXVlcnlT'@;
put 'ZWxlY3RvckFsbCgiI2dyYXBoIC5ub2RlIik7Zm9yKGxldCBoIG9mIGQpe2xldCBULGY9aC5xdWVyeVNlbGVjdG9yKCJ0aXRsZSIpLmlubmVySFRNTCxfPWEuZmluZChXPT5XLk1FVEFJRD09PWYpO18mJihUPSJUQUJMRSI9PT1fLk1FVEFUWVBFPyIvdmlldy9kYXRhLyIrXy5NRVRBTkFNRToi'@;
put 'L3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIrXy5NRVRBSUQsaC5jbGFzc0xpc3QuYWRkKCJjdXJzb3ItcG9pbnRlciIpLGguYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLFc9Pnt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFQpfSkpfX1nZW5lcmF0ZUdyYXBoKGEsZCxoKXt2YXIgZj10aGlzO3Jl'@;
put 'dHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17U0FTQ29udHJvbFRhYmxlOlt7Y29sdXJpOmF8fGYuY29sdW1uLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKSxyZWZyZXNoOmYucmVmcmVzaENhY2hlPzE6MH1dfTtyZXR1cm4idW5kZWZpbmVkIj09PV8uU0FTQ29udHJvbFRhYmxlWzBd'@;
put 'LmNvbHVyaSYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGgoKSIsImNvbHVyaSBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksaCYmKF8uU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRj'@;
put 'aEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChULFcpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdlIixfKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGllPWZpKGZ1bmN0aW9u'@;
put 'KihwZSl7aWYocGUuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSBy'@;
put 'ZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBwZSlyZXR1cm4gZi52aXpJbnB1dD0i'@;
put 'ZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1wZS5pbmZvWzBdLkxJQlJFRisiLiIrcGUuaW5mb1swXS5UQUJOQU1FLGYubGluZWFnZUNvbHVtbk5hbWU9cGUuaW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9cGUuaWRsb29rdXA7'@;
put 'bGV0IHdlPXBlLmZyb21zYXMsRWU9IiI7Zm9yKGxldCBaZT0wO1plPHdlLmxlbmd0aDtaZSsrKUVlKz11bmVzY2FwZSh3ZVtaZV0uU1RSSU5HKSsiXG4iO2lmKGYudml6SW5wdXQ9RWV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJl'@;
put 'cGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuZmxhdGRhdGE9cGUuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IGl0LFplPWYubGlicmFyeUxpc3QuZmluZChldD0+cGUuaW5mb1swXT8uTElCVVJJPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhldD8u'@;
put 'TElCUkFSWUlEPy50b1VwcGVyQ2FzZSgpKSk7WmUmJih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKFplLkxJQlJBUllJRCxaZSksWmUudGFibGVzJiYoaXQ9WmUudGFibGVzLmZpbmQoZXQ9PmV0LlRBQkxFVVJJPT09cGUuaW5mb1swXS5UQUJVUkkpLGl0JiZmLnRhYmxlT25DbGljayhpdC5UQUJM'@;
put 'RVVSSSxpdCxaZSwhMCkudGhlbigoKT0+e2xldCBldD1pdC5UQUJMRVVSSTtpZihldCl7Y29uc3QgeXQ9ZXQucmVwbGFjZSgiXFwiLCJcXFxcIik7bGV0IEV0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0nJHt5dH0nXWApO3NldFRpbWVvdXQoKCk9PntFdCYmKGYubG9nZ2VyU2Vydmlj'@;
put 'ZS5sb2coImxpYnJhcnlUb1NlbGVjdCIsWmUpLEV0LnNjcm9sbEludG9WaWV3KCkpfSwxZTMpfX0pKSxaZSYmKFplLmV4cGFuZGVkPSEwKSxpdCYmKGl0LmV4cGFuZGVkPSEwKSl9cGUuZnJvbXNhcy5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPXBlLmZy'@;
put 'b21zYXMubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLFQoKX0pO3JldHVybiBmdW5jdGlvbihwZSl7cmV0dXJuIGllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGllPT57Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWdldFNWR1VSTCgpe2xldCBh'@;
put 'PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXIsaD1uZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2Zyt4bWwifSk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoaCl9Z2V0U1ZHQmxvYigpe2xldCBhPWRv'@;
put 'Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXI7cmV0dXJuIG5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KX1kb3dubG9hZFNWRygpe2lmKFBUKCIjZ3JhcGgiKS5yZXNldFpvb20oKSxuYXZpZ2F0'@;
put 'b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldFNWR0Jsb2IoKSx0aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIpKTtlbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhp'@;
put 'cy5nZXRTVkdVUkwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX19ZG93bmxvYWRQTkcoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbioo'@;
put 'KXtQVCgiI2dyYXBoIikucmVzZXRab29tKCksUFFlLnNhdmVTdmdBc1BuZyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZ3JhcGggc3ZnIiksYS5jb25zdHJ1Y3ROYW1lKCJwbmciKSl9KSgpfWRvd25sb2FkQ1NWKCl7bGV0IGE9dGhpcy5mbGF0ZGF0YTtjb25zdCBkPShwZSx3ZSk9Pm51bGw9'@;
put 'PT13ZT8iIjp3ZSxoPU9iamVjdC5rZXlzKGFbMF0pO2xldCBmPWEubWFwKHBlPT5oLm1hcCh3ZT0+SlNPTi5zdHJpbmdpZnkocGVbd2VdLGQpKS5qb2luKCIsIikpO2YudW5zaGlmdChoLmpvaW4oIiwiKSk7bGV0IF89Zi5qb2luKCJcclxuIik7dmFyIFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVu'@;
put 'dCgiYSIpLFc9bmV3IEJsb2IoW19dLHt0eXBlOiJ0ZXh0L2NzdiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihXLHRoaXMuY29uc3RydWN0TmFtZSgiY3N2IikpO2Vsc2V7dmFyIGllPXdp'@;
put 'bmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKFcpO1QuaHJlZj1pZSxULmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgiY3N2IiksVC5jbGljaygpLHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGllKSxULnJlbW92ZSgpfX1nZXREb3RVcmwoKXtsZXQgZD1uZXcgQmxvYihbdGhpcy52aXpJ'@;
put 'bnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSk7cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGQpfWdldERvdEJsb2IoKXtyZXR1cm4gbmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pfWRvd25sb2FkRG90KCl7aWYobmF2aWdhdG9yLmFwcFZlcnNp'@;
put 'b24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXREb3RCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0RG90VXJs'@;
put 'KCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fXNob3dTdmcoKXt3aW5kb3cub3Blbih0aGlzLmdldFNWR1VSTCgpLCJfYmxhbmsiKX1idWlsZEdy'@;
put 'YXBoKGEpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuZ3JhcGhMb2FkaW5nPSExLHRoaXMuZ3JhcGhSZW5kZXJpbmc9ITAsc2V0VGltZW91dCgoKT0+e1BUKCIjZ3JhcGgiKS56b29tKCEwKS5hZGRJbWFnZSgiaHR0cHM6Ly9kYXRhY29udHJvbGxlci5pby93cC1jb250'@;
put 'ZW50L3VwbG9hZHMvMjAyMC8wMS9mYzEucG5nIiwiMzBweCIsIjMwcHgiKS5yZW5kZXJEb3QodGhpcy52aXpJbnB1dCwoKT0+e3RoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5pZGxvb2t1cCYmdGhpcy5tYWtlR3JhcGhMaW5rYWJsZSh0aGlzLmlkbG9va3VwKSxhJiZhKCl9KX0sMTAwKX1j'@;
put 'b25zdHJ1Y3ROYW1lKGEpe2xldCBkPSIiLGg9IiIsZj0iIixfPWZldCgpLmZvcm1hdCgiWVlNTUREX0hIbW0iKTtpZih0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmxpYnJhcnlMaXN0Lmxlbmd0aCl7bGV0IFQ9dGhpcy5saWJyYXJ5TGlzdC5maW5kKFc9PlcuTElCUkFSWUlEPT10aGlzLmxpYik7'@;
put 'VCYmKGQ9YF8ke1QuTElCUkFSWU5BTUV9YCl9aWYodGhpcy50YWJsZXNMaXN0JiZ0aGlzLnRhYmxlc0xpc3QubGVuZ3RoKXtsZXQgVD10aGlzLnRhYmxlc0xpc3QuZmluZChXPT5XLlRBQkxFVVJJPT10aGlzLnRhYmxlKTtUJiYoaD1gXyR7VC5UQUJMRU5BTUV9YCl9aWYodGhpcy5jb2x1bW5z'@;
put 'TGlzdCYmdGhpcy5jb2x1bW5zTGlzdC5sZW5ndGgpe2xldCBUPXRoaXMuY29sdW1uc0xpc3QuZmluZChXPT5XLkNPTFVSST09dGhpcy5jb2x1bW4pO1QmJihmPWBfJHtULkNPTE5BTUV9YCl9cmV0dXJuYCR7dGhpcy5kaXJlY3Rpb25UZXh0KCl9JHtkfSR7aH0ke2Z9XyR7X30uJHthfWB9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChvYSksdHQoR2wpLHR0KERzKSx0dChKZCksdHQodmwpLHR0KHcwKSx0dChUYykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGluZWFnZSJdXSxob3N0QXR0cnM6'@;
put 'WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1szLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJd'@;
put 'LFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1m'@;
put 'b290ZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNlaG9sZGVyIiwiTWF4IGRlcHRoIHZhbHVlIiwxLCJjbHItaW5wdXQiLCJtYXgtZGVwdGgtaW5wdXQiXSxbIm1heERlcHRoRG90'@;
put 'IiwiIl0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0'@;
put 'aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbIm1heERlcHRoIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxh'@;
put 'Y2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMi'@;
put 'LDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRl'@;
put 'ZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4'@;
put 'cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIs'@;
put 'IiJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiaWQiLCJjbGljayJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdl'@;
put 'Iiwia2V5dXAiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5k'@;
put 'YXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2Nr'@;
put 'Il0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29s'@;
put 'dXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJd'@;
put 'LFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIs'@;
put 'MSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJE'@;
put 'cm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xp'@;
put 'Y2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsIm5nTW9kZWwiLCJjaGFuZ2UiLCJuZ01v'@;
put 'ZGVsQ2hhbmdlIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9zaXRpb24tcmVsYXRpdmUiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bpbm5lciJdLFsi'@;
put 'Y2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9Vm4oKTttZSgwLCJhcHAtc2lkZWJhciIsMCkseHQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIGQubG9h'@;
put 'ZE1vcmVMaWJyYXJpZXMoKX0pLG1lKDEsImNsci10cmVlIiksSmUoMixOUWUsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxKZSgzLCRRZSwyLDEsIm5nLWNvbnRhaW5lciIsMikseWUoKSxKZSg0LHFRZSwzLDAsImRpdiIsMykseWUoKSxtZSg1LCJkaXYiLDQpKDYsImRpdiIsNSksSmUoNyxLUWUs'@;
put 'NCwwLCJkaXYiLDYpLEplKDgsdWV0LDgsNCwibmctY29udGFpbmVyIiw3KSx5ZSgpKCksbWUoOSwiY2xyLW1vZGFsIiw4KSgxMCwiaDMiLDkpLE5lKDExLCJMaW1pdCBEZXB0aCIpLHllKCksbWUoMTIsImRpdiIsMTApKDEzLCJwIiksTmUoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91'@;
put 'IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSx5ZSgpKCksbWUoMTUsImRpdiIsMTEpKDE2LCJkaXYiLDEyKSxxdCgxNywiaW5wdXQiLDEzLDE0KSx5ZSgpLG1lKDE5LCJjbHItY29udHJvbC1oZWxwZXIiLDE1KSxOZSgyMCwiVG8gcmVuZGVyIHdpdGggdW5saW1pdGVk'@;
put 'IGRlcHRoLCBsZWF2ZSB0aGUgaW5wdXQgZW1wdHkiKSx5ZSgpLG1lKDIxLCJkaXYiLDE2KSgyMiwiYnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmxpbWl0RG90RGVwdGg9ITF9KSxOZSgyMywiIENhbmNlbCAiKSx5ZSgpLG1lKDI0LCJidXR0b24iLDE3KSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7QnQoaCk7Y29uc3QgXz0kaSgxOCk7cmV0dXJuIGQucmVzdWJtaXRXaXRoTWF4RGVwdGgoXy52YWx1ZSksanQoZC5saW1pdERvdERlcHRoPSExKX0pLE5lKDI1LCIgUmVzdWJtaXQgIikseWUoKSgpKCkoKSxtZSgyNiwiY2xyLW1vZGFsIiw4KSgyNywiaDMiLDkp'@;
put 'LE5lKDI4LCJXYXJuaW5nIikseWUoKSxtZSgyOSwiZGl2IiwxMCkoMzAsInAiKSxOZSgzMSkseWUoKSgpLG1lKDMyLCJkaXYiLDExKSgzMywiZGl2IiwxNikoMzQsInAiKSxOZSgzNSwiUmVuZGVyIGFueXdheSAodGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSkiKSx5ZSgpLG1lKDM2LCJidXR0'@;
put 'b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfSksTmUoMzcsIiBSZW5kZXIgIikseWUoKSgpLG1lKDM4LCJkaXYiLDE2KSgzOSwicCIpLE5lKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5k'@;
put 'ZXJpbmcpIikseWUoKSxtZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMTgpLE5lKDQzLCIgRG93bmxvYWQgIikscXQoNDQsImNsci1pY29uIiwxOSkseWUoKSxKZSg0NSxoZXQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjApLHllKCkoKSxtZSg0NiwiZGl2IiwxNikoNDcsInAi'@;
put 'KSxOZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSx5ZSgpLHF0KDQ5LCJpbnB1dCIsMTMsMjEpLG1lKDUxLCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoaCk7Y29uc3QgXz0kaSg1MCk7cmV0dXJuIGp0KGQucmVzdWJtaXRXaXRo'@;
put 'TWF4RGVwdGgoXy52YWx1ZSkpfSksTmUoNTIsIiBSZXN1Ym1pdCAiKSx5ZSgpKCksbWUoNTMsImRpdiIsMTYpKDU0LCJwIiksTmUoNTUsIkNhbmNlbCB0aGlzIHN1Ym1pc3Npb24iKSx5ZSgpLG1lKDU2LCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FuY2Vs'@;
put 'UmVuZGVyaW5nR3JhcGgoKX0pLE5lKDU3LCIgQ2FuY2VsICIpLHllKCkoKSgpKCl9MiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQubGlicmFyeUxpc3QpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxpYnJhcnlMaXN0KSxDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNQYWdpbmcpLENlKDMpLFJlKCJu'@;
put 'Z0lmIiwhZC5jb2x1bW4mJiFkLnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsZC5jb2x1bW58fGQudGFibGUpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQubGltaXREb3REZXB0aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSgxNyksUmUoImNsck1vZGFsT3BlbiIsbnVsbCE9PWQubGFyZ2VE'@;
put 'b3RGaWxlTGluZXMpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNSksZ3IoIiBUaGUgZ2VuZXJhdGVkIGRvdCBmaWxlIGhhcyAiLGQubGFyZ2VEb3RGaWxlTGluZXMsIiBsaW5lcy4gUmVuZGVyaW5nIG1heSB0YWtlIGEgbG9uZyB0aW1lLCBob3cgd291bGQgeW91IGxpa2UgdG8gcHJvY2Vl'@;
put 'ZD8gIiksQ2UoMTEpLFJlKCJkaXNhYmxlZCIsIWQuY29sdW1uJiYhZC50YWJsZSkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LFdhLFMwLEJzLE9zLGRkLGcxLERwLGthLG91LHN1LFp1LGMyLFVzLEhGLEQwLFQwLGYxLE5mLGFnLGxnLEs4LG4zXSxzdHlsZXM6WyIudG9nZ2xlLXN3aXRjaFtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0'@;
put 'aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfSNncmFwaFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAxOTVweCk7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6Ymxv'@;
put 'Y2s7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlNGU0ZTQ7bWFyZ2luLXRvcDoxMHB4fS5zZWxlY3Rpb24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttYXgtd2lkdGg6NjcwcHh9LmNvbHVtbi1hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6'@;
put 'I2Q4ZTNlOTtjb2xvcjojMDAwfS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmNhcmRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDEyMHB4'@;
put 'KX0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIC4zNXJlbSFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0'@;
put 'b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JhcGgtcmVuZGVyLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDox'@;
put 'MHB4fS5iaWdsaW5lYWdlLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHh9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXttYXJnaW46MH0ubGluZWFnZS10aXRsZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjEycHh9Lm1heC1kZXB0aC1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpey50b2dnbGUtc3dpdGNoLWNvbnRh'@;
put 'aW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToyMHB4fX0iXX0pLGN9KSgpO2Z1bmN0aW9uIHBldChjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsMTEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFYygidmFsdWUiLGEpLENlKDEpLGdyKCIgIixh'@;
put 'LCIgIil9fWZ1bmN0aW9uIGdldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDE4KX1mdW5jdGlvbiBtZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLm1ldGFE'@;
put 'YXRhU2VhcmNoPSIiLGp0KGgubWV0YUxpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIHZldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDEyKSgxLCJkaXYiLDEzKSgyLCJpbnB1dCIsMTQsMTUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv'@;
put 'bihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5tZXRhRGF0YVNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5tZXRhTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxKZSg0LGdldCwxLDAsImNsci1pY29uIiwxNiksSmUoNSxtZXQsMSwwLCJjbHItaWNvbiIs'@;
put 'MTcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLm1ldGFEYXRhU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBfZXQoYyxsKXtp'@;
put 'ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8ubWV0YURhdGFMaXN0KSl9KSgiY2xyRXhwYW5k'@;
put 'ZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGYubWV0YURhdGFJZD1oLklELGp0'@;
put 'KGYubWV0YURhdGFPbkNsaWNrKGYubWV0YURhdGFJZCxoKSl9KSxxdCgyLCJjbHItaWNvbiIsMjMpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50'@;
put 'YWJsZXMpLENlKDMpLGdyKCIgIixhLklELCIgIil9fWZ1bmN0aW9uIGJldChjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsX2V0LDQsMywiY2xyLXRyZWUtbm9kZSIsMjApLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24g'@;
put 'eWV0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyNCkscXQoMSwiY2xyLWljb24iLDI1KSxtZSgyLCJoMyIsMjYpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSB0eXBlIikseWUoKSgpKX1mdW5jdGlvbiB3ZXQoYyxsKXsxJmMmJihtZSgwLCJoNCIpLE5lKDEsIkxvYWRpbmcgbWV0YWRhdGEgdHlwZXMi'@;
put 'KSx5ZSgpKX1mdW5jdGlvbiBDZXQoYyxsKXsxJmMmJihtZSgwLCJoNCIpLE5lKDEsIkxvYWRpbmcgbWV0YWRhdGEgb2JqZWN0cyIpLHllKCkpfWZ1bmN0aW9uIE1ldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLEplKDEsd2V0LDIsMCwiaDQiLDI5KSxKZSgyLENldCwyLDAsImg0IiwyOSks'@;
put 'eWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLm1ldGF0eXBlc0xvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVuY3Rpb24geGV0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyNykoMSwic3BhbiIsMjgpLE5lKDIsIiBMb2Fk'@;
put 'aW5nLi4uICIpLHllKCksSmUoMyxNZXQsMywyLCJkaXYiLDI5KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxSZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24gRWV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzNikoMSwiaW5wdXQiLDM3LDM4KSx4dCgi'@;
put 'bmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm1ldGFPYmplY3RTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm1ldGFPYmplY3RPbkZpbHRlcigpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7'@;
put 'Q2UoMSksUmUoIm5nTW9kZWwiLGEubWV0YU9iamVjdFNlYXJjaCl9fWZ1bmN0aW9uIGtldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDQyKX1mdW5jdGlvbiBBZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyMyl9ZnVuY3Rpb24gVGV0KGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNTMp'@;
put 'LE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgxKSxncigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gRGV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIsNDgpKDEsImRpdiIsNDkpLEplKDIsa2V0LDEsMCwiY2xyLWljb24iLDUwKSxKZSgzLEFl'@;
put 'dCwxLDAsImNsci1pY29uIiw1MSksTmUoNCksSmUoNSxUZXQsMiwxLCJwIiw1MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGFibGUiLCEwKSxDZSgxKSxkcigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLENlKDEpLFJlKCJuZ0lmIiwhYS5jb3VudCks'@;
put 'Q2UoMSksUmUoIm5nSWYiLGEuY291bnQpLENlKDEpLGdyKCIgIixhLmRpc3BsYXksIiAiKSxDZSgxKSxSZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBJZXQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZSIsNDYpLEplKDEsRGV0LDYsNywiY2xyLXRyZWUtbm9kZSIsNDcpLGJhKDIs'@;
put 'ImFzeW5jIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDYpO1JlKCJjbHJMYXp5IiwhMCksQ2UoMSksUmUoImNsclJlY3Vyc2l2ZUZvck9mIixabCgyLDMsYS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIExldChjLGwpe2lmKDEm'@;
put 'YyYmKG1lKDAsImNsci1hY2NvcmRpb24tY29udGVudCIpLEplKDEsSWV0LDMsNSwiY2xyLXRyZWUiLDQ1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoMSksUmUoIm5nSWYiLGEuc2hvd0FjYyl9fWZ1bmN0aW9uIFJldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1h'@;
put 'Y2NvcmRpb24tcGFuZWwiLDQxKSx4dCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoMyk7cmV0dXJuIGp0KGg/Xy5wYW5lbENoYW5nZShoLGYpOiIiKX0pLG1lKDEsImNsci1hY2NvcmRpb24tdGl0bGUi'@;
put 'KSxxdCgyLCJjbHItaWNvbiIsNDIpLE5lKDMpLG1lKDQsInAiLDQzKSxOZSg1KSx5ZSgpKCksSmUoNixMZXQsMiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQ0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgzKSxncigiICIsYS5OQU1FLCIgIiksQ2UoMiksb3Io'@;
put 'YS5JRCl9fWZ1bmN0aW9uIE9ldChjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsUmV0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDApLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gUGV0KGMsbCl7aWYoMSZjJiYo'@;
put 'bWUoMCwiZGl2IiwzOSkoMSwiY2xyLWFjY29yZGlvbiIpLEplKDIsT2V0LDIsMSwibmctY29udGFpbmVyIiw0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgibmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiBGZXQoYyxsKXsxJmMmJnF0KDAsImNs'@;
put 'ci1pY29uIiw0Mil9ZnVuY3Rpb24gSGV0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjMpfWZ1bmN0aW9uIE5ldChjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDUzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGEuVVJJLCIgIil9fWZ1bmN0'@;
put 'aW9uIFZldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiLDQ4KSgxLCJkaXYiLDQ5KSxKZSgyLEZldCwxLDAsImNsci1pY29uIiw1MCksSmUoMyxIZXQsMSwwLCJjbHItaWNvbiIsNTEpLE5lKDQpLEplKDUsTmV0LDIsMSwicCIsNTIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwu'@;
put 'JGltcGxpY2l0O1JlKCJjbHJFeHBhbmRhYmxlIiwhMCksQ2UoMSksZHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxDZSgxKSxSZSgibmdJZiIsIWEuY291bnQpLENlKDEpLFJlKCJuZ0lmIixhLmNvdW50KSxDZSgxKSxncigiICIsYS5kaXNwbGF5LCIgIiksQ2UoMSksUmUoIm5nSWYiLCFh'@;
put 'LmNvdW50KX19ZnVuY3Rpb24gQmV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUiLDQ2KSxKZSgxLFZldCw2LDcsImNsci10cmVlLW5vZGUiLDQ3KSxiYSgyLCJhc3luYyIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtSZSgiY2xyTGF6eSIsITApLENlKDEpLFJlKCJjbHJSZWN1cnNp'@;
put 'dmVGb3JPZiIsWmwoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBqZXQoYyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJkaXYiLDU0KSxxdCgyLCJjbHItaWNvbiIsNDIpLG1lKDMsImRpdiIsNTUpKDQsInAiLDU2KSxO'@;
put 'ZSg1KSx5ZSgpLG1lKDYsInAiLDU3KSxOZSg3KSx5ZSgpKCkoKSxKZSg4LEJldCwzLDUsImNsci10cmVlIiw0NSksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMyk7Q2UoNSksZ3IoIiAiLGEuTkFNRSwiICIpLENlKDIpLGdyKCIgIixhLklELCIgIiksQ2UoMSksUmUoIm5n'@;
put 'SWYiLGQuc2hvd0FjYyl9fWZ1bmN0aW9uIHpldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzkpLEplKDEsamV0LDksMywibmctY29udGFpbmVyIiw0KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24g'@;
put 'VWV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTmUoMikseWUoKSxtZSgzLCJjbHItZGctY2VsbCIpLE5lKDQpLHllKCksbWUoNSwiY2xyLWRnLWNlbGwiKSxOZSg2KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihh'@;
put 'LlRZUEUpLENlKDIpLG9yKGEuTkFNRSksQ2UoMiksb3IoYS5WQUxVRSl9fWNvbnN0IFpldD1mdW5jdGlvbigpe3JldHVyblsxMCwyMCw1MCwxMDBdfTtmdW5jdGlvbiBZZXQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItZGF0YWdyaWQiLDU4KSgxLCJjbHItZGctY29sdW1uIiksTmUoMiwiIFRZ'@;
put 'UEUgIikscXQoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDU5KSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iKSxOZSg1LCIgTkFNRSAiKSxxdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNTkpLHllKCksbWUoNywiY2xyLWRnLWNvbHVtbiIpLE5lKDgsIiBWQUxVRSAiKSxxdCg5LCJjbHIt'@;
put 'ZGctc3RyaW5nLWZpbHRlciIsNTkpLHllKCksSmUoMTAsVWV0LDcsMywiY2xyLWRnLXJvdyIsNjApLG1lKDExLCJjbHItZGctZm9vdGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9uIiw2MSw2MikoMTQsImNsci1kZy1wYWdlLXNpemUiLDYzKSxOZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIp'@;
put 'LHllKCksTmUoMTYpLHllKCkoKSgpKSwyJmMpe2NvbnN0IGE9JGkoMTMpLGQ9VmUoMik7Q2UoMyksUmUoImNsckRnU3RyaW5nRmlsdGVyIixkLnR5cGVGaWx0ZXIpLENlKDMpLFJlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5uYW1lRmlsdGVyKSxDZSgzKSxSZSgiY2xyRGdTdHJpbmdGaWx0ZXIi'@;
put 'LGQudmFsdWVGaWx0ZXIpLENlKDEpLFJlKCJjbHJEZ0l0ZW1zT2YiLGQubWV0YU9iamVjdEF0dHJpYnV0ZXMpLENlKDIpLFJlKCJjbHJEZ1BhZ2VTaXplIiwxMCksQ2UoMiksUmUoImNsclBhZ2VTaXplT3B0aW9ucyIsJHMoOSxaZXQpKSxDZSgyKSxiMCgiICIsYS5maXJzdEl0ZW0rMSwiIC0g'@;
put 'IixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIEF0dHJpYnV0ZXMgIil9fWZ1bmN0aW9uIFdldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzApKDEsImRpdiIsMzEpLEplKDIsRWV0LDMsMSwiZGl2IiwzMikscXQoMywiYnIiKSxKZSg0LFBldCwzLDEsImRpdiIsMzMpLEpl'@;
put 'KDUsemV0LDIsMSwiZGl2IiwzMykseWUoKSxtZSg2LCJkaXYiLDM0KSg3LCJoMyIpLE5lKDgpLHllKCksSmUoOSxZZXQsMTcsMTAsImNsci1kYXRhZ3JpZCIsMzUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoIm5nSWYiLGEubWV0YU9iamVjdExpc3QmJiFhLm9iamVjdFJv'@;
put 'dXRlKSxDZSgyKSxSZSgibmdJZiIsIWEub2JqZWN0VmlldyksQ2UoMSksUmUoIm5nSWYiLGEub2JqZWN0VmlldyksQ2UoMyksb3IoYS5hc3NvT2JqZWN0U2VsZWN0ZWQpLENlKDEpLFJlKCJuZ0lmIixhLnNob3dUYWJsZSl9fWxldCBvWj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo'@;
put 'LGYsXyxUKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj1fLHRoaXMucm91dGU9VCx0aGlzLm1ldGFEYXRhU2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1l'@;
put 'dGFPYmplY3RBc3NvY2lhdGlvbnM9W10sdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhRGF0YUlkPSIiLHRoaXMubG9hZGluZz0hMCx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6'@;
put 'ZT0yMDAsdGhpcy5hc3NvVHlwZVNlbGVjdGVkPSIiLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSExLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5vYmplY3RWaWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49Vz0+Vy5jb3VudD9XaShX'@;
put 'LmRldGFpbHMpOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOlcuQVNTT0NVUkl9XX0pLnRoZW4ocGU9Pnt0aGlzLnNob3dUYWJsZT0hMCx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXBlLmF0dHJpYnV0'@;
put 'ZXMsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9Vy5OQU1FO2xldCB3ZT10aGlzLnJvdXRlci51cmw7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0Um91dGU/d2Uuc2xpY2UoMCx3ZS5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIitXLkFTU09DVVJJ'@;
put 'LnNsaWNlKDErVy5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKTp3ZSsiL29iamVjdC8iK1cuQVNTT0NVUkkuc2xpY2UoMStXLkFTU09DVVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdldEFzc29zaWF0aW9uc0NvdW50KHBlLmFzc29jaWF0aW9ucyl9KSx0aGlzLmRlYm91bmNlPSExfW5nT25Jbml0'@;
put 'KCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbWV0YWRhdGEiLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIpJiYodGhpcy5vYmplY3RSb3V0ZT0hMCx0aGlzLm9iamVjdFZpZXc9ITApLHRoaXMucGFnZVNpemU9NSxHbi5tZXRhZGF0'@;
put 'YS5tZXRhRGF0YUxpc3QmJkduLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Hbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QsdGhpcy5yZXBvc2l0b3JpZXM9R24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyx0aGlzLnJlcG9z'@;
put 'aXRvcnk9R24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Hbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaCk6KHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGF0'@;
put 'eXBlcyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS50eXBlcyxHbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3Q9dGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2'@;
put 'L21ldGFyZXBvcyIsbnVsbCkudGhlbihhPT57bGV0IGQ9ITE7dGhpcy5yZXBvc2l0b3JpZXM9W107Zm9yKGxldCBoPTA7aDxhLm91dHJlcG9zLmxlbmd0aDtoKyspdGhpcy5yZXBvc2l0b3JpZXMucHVzaChhLm91dHJlcG9zW2hdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEub3V0cmVwb3NbaF0u'@;
put 'TkFNRSYmKGQ9ITApO2lmKHRoaXMucmVwb3NpdG9yeT1kPyJGb3VuZGF0aW9uIjphLm91dHJlcG9zWzBdLk5BTUUsR24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcz10aGlzLnJlcG9zaXRvcmllcyxHbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5LHRoaXMu'@;
put 'b2JqZWN0Um91dGUpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuc2hvd0RhdGE9ITA7bGV0IGg9IiIsZj10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5vYmplY3RJRDt0aGlzLm1ldGFPYmplY3RMaXN0PVtdLHRoaXMubWV0YU9iamVjdExpc3QucHVzaCh7SUQ6ZixO'@;
put 'QU1FOmh9KSx0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdE9uQ2xpY2sodGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0uSUQsdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0pfX0pKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xs'@;
put 'YXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1tZXRhRGF0YU9uQ2xpY2soYSxk'@;
put 'KXt0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L21ldGFkYXRhIiksdGhpcy5zaG93RGF0YT0hMSx0aGlzLmxvYWRpbmc9ITAsdGhpcy5zZWxlY3RtZXRhRGF0YShhLGQpfW1ldGFPYmplY3RPbkNsaWNrKGEsZCl7dGhpcy5hc3NvT2JqZWN0U2Vs'@;
put 'ZWN0ZWQ9IiAuICIsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zZWxlY3RtZXRhT2JqZWN0KGEsZCl9c2VsZWN0bWV0YURhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5h'@;
put 'di9tZXRhb2JqZWN0cyIse1NBU0NvbnRyb2xUYWJsZTpbe21ldGF0eXBlOmEscmVwbzpoLnJlcG9zaXRvcnl9XX0pLnRoZW4oXz0+e2gubWV0YU9iamVjdExpc3Q9Xy5vYmplY3RzLGguZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoaC5tZXRhT2JqZWN0U2l6ZSksaC5sb2FkaW5nPSExLGguYXNz'@;
put 'b1R5cGVTZWxlY3RlZD1hLGguZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGguc2hvd0RhdGE9ITB9KX0pKCl9c2VsZWN0bWV0YU9iamVjdChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7'@;
put 'U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4oXz0+e2gubWV0YU9iamVjdEFzc29jaWF0aW9ucz1fLmFzc29jaWF0aW9ucyxoLnJvb3QkPVdpKGguZ2V0QXNzb3NpYXRpb25zQ291bnQoXy5hc3NvY2lhdGlvbnMpKSxoLnNob3dBY2M9ITAsaC5zaG93VGFibGU9ITA7bGV0'@;
put 'IFQ9Xy5hdHRyaWJ1dGVzLmZpbmQoaWU9PiJOYW1lIj09PWllLk5BTUUpLlZBTFVFO2guYXNzb09iamVjdFNlbGVjdGVkPVQsZC5OQU1FPVQ7bGV0IFc9aC5yb3V0ZXIudXJsO2gubG9jYXRpb24ucmVwbGFjZVN0YXRlKGgub2JqZWN0Um91dGU/Vy5zbGljZSgwLFcubGFzdEluZGV4T2YoIm9i'@;
put 'amVjdCIpKSsib2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSk6VysiL29iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpKSxoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPV8uYXR0cmlidXRlc30pfSkoKX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEsZCl7dmFyIGg9'@;
put 'dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1dfSkudGhlbihfPT57aC5tZXRhT2JqZWN0QXR0cmlidXRlcz1fLmF0dHJpYnV0ZXMsaC5zaG93VGFibGU9ITB9'@;
put 'KX0pKCl9Z2V0QXNzb3NpYXRpb25zQ291bnQoYSl7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGYgb2YgYSl7ZC5oYXMoZi5BU1NPQyl8fGQuc2V0KGYuQVNTT0Mse2NvdW50OjAsZGV0YWlsczpbXX0pO2xldCBfPWQuZ2V0KGYuQVNTT0MpO18uY291bnQrKyxfLmRldGFpbHMucHVzaCh7QVNTT0NV'@;
put 'Ukk6Zi5BU1NPQ1VSSSxOQU1FOmYuTkFNRSxkaXNwbGF5OmYuTkFNRSxVUkk6Zi5BU1NPQ1VSSS5zbGljZShmLkFTU09DVVJJLmluZGV4T2YoIjoiKSsxKX0pfWxldCBoPVtdO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24oZixfKXtoLnB1c2goe0FTU09DOl8sY291bnQ6Zi5jb3VudCxkZXRh'@;
put 'aWxzOmYuZGV0YWlscyxkaXNwbGF5Ol8rIiAoICIrZi5jb3VudCsiICkifSl9KSxofXNldFR5cGVBc3Nvc2lhdGlvbnMoYSl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucyloLkFTU09DPT09YSYmZC5wdXNoKGgpO3JldHVybiB0aGlzLmFzc29zaWF0'@;
put 'aW9uTmFtZXM9ZCxkfWFzc29zaWF0aW9uTmFtZU9uQ2xpY2soYSl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMoYSl9bWV0YUxpc3RPbkZpbHRl'@;
put 'cigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5tZXRhRGF0YVNlYXJjaCwiSUQiKSxHbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaD10aGlzLm1ldGFEYXRhU2VhcmNofW1ldGFPYmplY3RPbkZpbHRlcigpe3RoaXMubWV0YU9iamVj'@;
put 'dEF0dHJpYnV0ZXM9W10sdGhpcy5oZWxwZXJTZXJ2aWNlLm1ldGFPYmplY3RPbkZpbHRlcih0aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdFNlYXJjaCwiTkFNRSIpLHRoaXMuZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXModGhpcy5tZXRhT2JqZWN0U2l6ZSksR24ubWV0YWRhdGEu'@;
put 'bWV0YU9iamVjdFNlYXJjaD10aGlzLm1ldGFPYmplY3RTZWFyY2h9Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoYSl7aWYodm9pZCAwIT09dGhpcy5tZXRhT2JqZWN0TGlzdCYmdGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg+YSl7bGV0IGQ9MCxoPS0xO2ZvcihsZXQgZj0wO2Y8dGhpcy5tZXRh'@;
put 'T2JqZWN0TGlzdC5sZW5ndGg7ZisrKWlmKCh2b2lkIDA9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbnx8ITE9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbikmJmQrKyxkPT09YSl7aD1mO2JyZWFrfXRoaXMubWV0YU9iamVjdFNob3dMaXN0PS0xIT09aD90aGlzLm1ldGFP'@;
put 'YmplY3RMaXN0LnNsaWNlKDAsaCk6dGhpcy5tZXRhT2JqZWN0TGlzdH1lbHNlIHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3R9cGFuZWxDaGFuZ2UoYSxkKXt0aGlzLmRlYm91bmNlfHwodGhpcy5tZXRhT2JqZWN0T25DbGljayhkLklELGQpLHRoaXMuZGVib3Vu'@;
put 'Y2U9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuZGVib3VuY2U9ITF9LDYwMCkpfXVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpe0duLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGMpKHR0KHZsKSx0dChvYSksdHQoVGMpLHR0KEpkKSx0dChEcyksdHQoR2wpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1ldGFkYXRhIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNyx2YXJzOjgsY29uc3RzOltbMSwicmVw'@;
put 'by1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdG'@;
put 'b3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQtaSJdLFsxLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIs'@;
put 'ImNsci1yb3cgY2xyLWZsZXgtZ3Jvdy0xIiw0LCJuZ0lmIl0sWzMsInZhbHVlIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFyY2ggU0FTIFR5cGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBs'@;
put 'ZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBl'@;
put 'IiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3It'@;
put 'cG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwi'@;
put 'bG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0lmIl0sWzEsImNsci1yb3ciLCJjbHItZmxleC1ncm93LTEiXSxbMSwiY2xyLWNvbC02Il0sWyJjbGFzcyIsInNlYXJjaC1pbnB1dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvYmplY3RzLWNvbCIsNCwibmdJZiJdLFsxLCJjbHIt'@;
put 'Y29sLTYiLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdN'@;
put 'b2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoT2JqVHJlZUlucHV0IiwiIl0sWzEsIm9iamVjdHMtY29sIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFj'@;
put 'ay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmlnaHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5Iiw0LCJuZ0lmIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhwYW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRD'@;
put 'aGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiLDQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxvYXQtcmlnaHQgb2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdo'@;
put 'dCIsIm9iamVjdC11cmkiXSxbMSwiY29scy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIsIndvcmQtYnJlYWsiLCJtci0yMCJdLFsxLCJmbG9hdC1yaWdodCIsIm1sLTMiXSxbMSwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJj'@;
put 'bHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbInBhZ2luYXRpb24iLCIiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDApKDIsImNsci1zZWxlY3Qt'@;
put 'Y29udGFpbmVyIikoMywibGFiZWwiKSxOZSg0LCJNZXRhZGF0YSBSZXBvc2l0b3J5IikseWUoKSxtZSg1LCJzZWxlY3QiLDEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yZXBvc2l0b3J5PWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnVwZGF0ZVNl'@;
put 'bGVjdGVkUmVwb3NpdG9yeSgpfSksSmUoNixwZXQsMiwyLCJvcHRpb24iLDIpLHllKCkoKSgpLG1lKDcsImNsci10cmVlIiksSmUoOCx2ZXQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSxKZSg5LGJldCwyLDEsIm5nLWNvbnRhaW5lciIsNCkseWUoKSgpLG1lKDEwLCJkaXYiLDUpKDExLCJkaXYi'@;
put 'LDYpKDEyLCJoMyIsNyksTmUoMTMpLHllKCksSmUoMTQseWV0LDQsMCwiZGl2Iiw4KSxKZSgxNSx4ZXQsNCwxLCJkaXYiLDkpLEplKDE2LFdldCwxMCw1LCJkaXYiLDEwKSx5ZSgpKCkpLDImYSYmKENlKDUpLFJlKCJuZ01vZGVsIixkLnJlcG9zaXRvcnkpLENlKDEpLFJlKCJuZ0Zvck9mIixk'@;
put 'LnJlcG9zaXRvcmllcyksQ2UoMiksUmUoIm5nSWYiLGQubWV0YURhdGFMaXN0KSxDZSgxKSxSZSgibmdGb3JPZiIsZC5tZXRhRGF0YUxpc3QpLENlKDQpLG9yKGQuYXNzb1R5cGVTZWxlY3RlZCksQ2UoMSksUmUoIm5nSWYiLCFkLmxvYWRpbmcmJiFkLm1ldGFPYmplY3RMaXN0KSxDZSgxKSxS'@;
put 'ZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93RGF0YSkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGwxLGMxLFdhLE0wLEJzLE9zLFc4LFRwLHRnLFBFLFU4LGdILEZFLG5nLFNRLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LFFGLGRkLGcxLERRLGthLFp1LHpKLFVzLGYxLE44'@;
put 'LEg4LFRKLF9FLElKLERKLExKLEVGLG4zLHV4XSxzdHlsZXM6WyIub2JqZWN0cy1jb2xbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo3NXZoO292ZXJmbG93OnNjcm9sbDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7YmFja2dyb3VuZDp3aGl0ZTtib3JkZXItcmFkaXVzOjRweH0uY29scy1o'@;
put 'ZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmYWZhZmE7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXh9Lm9iamVjdC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0'@;
put 'aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tbGVmdDoxMHB4O2ZsZXg6MX0ucmVwby1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9LmNsci1hY2NvcmRpb24tdGl0bGVbX25nY29u'@;
put 'dGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmZsb2F0LXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDtmbG9hdDpyaWdodH0uZnVsbC13aWR0aFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ub2JqZWN0LXVyaVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjVweCAwIDB9'@;
put 'Lm9iamVjdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctbGVmdDozcHg7cGFkZGluZy1yaWdodDozcHh9Lm9iamVjdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOTtib3JkZXItcmFkaXVzOjNweH0uZGF0YWdyaWQtaG9z'@;
put 'dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp1bnNldCFpbXBvcnRhbnR9LmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5n'@;
put 'Oi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufSJdfSksYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBHZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29u'@;
put 'IiwxMil9ZnVuY3Rpb24gJGV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5yb2xlU2VhcmNoPSIiLGp0KGgucm9sZUxpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1'@;
put 'bmN0aW9uIHFldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnJvbGVTZWFyY2g9aCl9KSgia2V5dXAiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucm9sZUxpc3RPbkZpbHRlcigpKX0pLHllKCksSmUoNCxHZXQsMSwwLCJjbHItaWNvbiIsMTApLEplKDUsJGV0LDEsMCwiY2xyLWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2Rl'@;
put 'bCIsZC5yb2xlU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBLZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkseHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkucm9sZU9uQ2xpY2soaCkpfSksbWUoMSwicCIsMTYpLHF0KDIsImNsci1pY29uIiwxNyksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7ZHIoInRhYmxlLWFj'@;
put 'dGl2ZSIsYS5ST0xFVVJJPT09ZC5yb2xlVXJpKSxDZSgzKSxncigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBYZXQoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLEtldCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSx6cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUo'@;
put 'Im5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIEpldChjLGwpezEmYyYmKG1lKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWZ1bmN0aW9uIFFldChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gTWVtYmVycyBQcmVzZW50IikseWUo'@;
put 'KSl9ZnVuY3Rpb24gZXR0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLE5lKDIpLHllKCksbWUoMywidGQiLDMwKSxOZSg0KSx5ZSgpLG1lKDUsInRkIiwzMCksTmUoNikseWUoKSxtZSg3LCJ0ZCIsMzApLE5lKDgpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp'@;
put 'Y2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuVVJJTUVNKSxDZSgyKSxvcihhLk1FTUJFUk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuTUVNQkVSQ1JFQVRFRCksQ2UoMiksb3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gdHR0KGMsbCl7'@;
put 'aWYoMSZjJiYobWUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksTmUoNSwiTkFNRSIpLHllKCkoKSxtZSg2LCJ0ZCIsMjkpKDcsImIiKSxOZSg4LCJFTUFJTCIpLHllKCkoKSxtZSg5LCJ0ZCIsMjkpKDEwLCJiIiksTmUoMTEsIkNSRUFURUQiKSx5'@;
put 'ZSgpKCksbWUoMTIsInRkIiwzMCkoMTMsImIiKSxOZSgxNCwiVVBEQVRFRCIpLHllKCkoKSgpKCksbWUoMTUsInRib2R5IiksSmUoMTYsZXR0LDksNSwidHIiLDMxKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxNiksUmUoIm5nRm9yT2YiLGEucm9sZU1lbWJlcnMpfX1mdW5jdGlv'@;
put 'biBudHQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIEdyb3VwcyBQcmVzZW50ICEiKSx5ZSgpKX1mdW5jdGlvbiBydHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzApLE5lKDQpLHllKCksbWUoNSwidGQiLDMwKSxO'@;
put 'ZSg2KSx5ZSgpLG1lKDcsInRkIiwzMCksTmUoOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJTUVNKSxDZSgyKSxvcihhLk1FTUJFUk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEu'@;
put 'TUVNQkVSQ1JFQVRFRCksQ2UoMiksb3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gaXR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksTmUoNSwiTkFNRSIpLHllKCkoKSxtZSg2LCJ0ZCIsMjkpKDcsImIiKSxO'@;
put 'ZSg4LCJFTUFJTCIpLHllKCkoKSxtZSg5LCJ0ZCIsMjkpKDEwLCJiIiksTmUoMTEsIkNSRUFURUQiKSx5ZSgpKCksbWUoMTIsInRkIiwzMCkoMTMsImIiKSxOZSgxNCwiVVBEQVRFRCIpLHllKCkoKSgpKCksbWUoMTUsInRib2R5IiksSmUoMTYscnR0LDksNSwidHIiLDMxKSx5ZSgpKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1WZSgyKTtDZSgxNiksUmUoIm5nRm9yT2YiLGEucm9sZUdyb3Vwcyl9fWZ1bmN0aW9uIG90dChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInRhYmxlIiwyMikoNCwidGJvZHkiKSg1LCJ0ciIpKDYsInRkIiwyMykoNywicCIs'@;
put 'MjQpKDgsImIiKSxOZSg5KSx5ZSgpKCkoKSgpLG1lKDEwLCJ0ciIpKDExLCJ0ZCIsMjMpKDEyLCJpIiksTmUoMTMpLHllKCkoKSgpKCkoKSgpKCksbWUoMTQsImRpdiIsMjApKDE1LCJkaXYiLDIxKSgxNiwiZGl2IiwyNSkoMTcsImRpdiIpKDE4LCJoMyIpLE5lKDE5KSx5ZSgpLEplKDIwLFFl'@;
put 'dCwyLDAsImg1Iiw1KSxtZSgyMSwiZGl2IiwyNiksSmUoMjIsdHR0LDE3LDEsInRhYmxlIiwyNykseWUoKSgpLHF0KDIzLCJociIpLG1lKDI0LCJkaXYiKSgyNSwiaDMiKSxOZSgyNikseWUoKSxKZSgyNyxudHQsMiwwLCJoNSIsNSksbWUoMjgsImRpdiIsMjYpLEplKDI5LGl0dCwxNywxLCJ0'@;
put 'YWJsZSIsMjcpLHllKCkoKSxxdCgzMCwiYnIiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg5KSxvcihhLnJvbGVOYW1lKSxDZSg0KSxvcihhLnJvbGVEZXNjKSxDZSg2KSxncigiTUVNQkVSUyAoIixhLnJvbGVNZW1iZXJzQ291bnQsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09'@;
put 'YS5yb2xlTWVtYmVyc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS5yb2xlTWVtYmVyc0NvdW50KSxDZSg0KSxncigiR3JvdXBzICgiLGEucm9sZUdyb3Vwc0NvdW50LCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEucm9sZUdyb3Vwc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS5yb2xl'@;
put 'R3JvdXBzQ291bnQpfX1sZXQgd2xlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlPV8sdGhpcy5yb2xlU2VhcmNoPSIiLHRoaXMu'@;
put 'cm9sZVVyaT0iIix0aGlzLnJvbGVOYW1lPSIiLHRoaXMucm9sZURlc2M9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmxvYWRpbmc9ITF9bmdPbkluaXQoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L3JvbGVzIix2b2lkIDAh'@;
put 'PT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksR24udXNlcm5hdi5yb2xlTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50Pyh0aGlzLnJvbGVzPUduLnVzZXJuYXYu'@;
put 'cm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUduLnVzZXJuYXYucm9sZVNlYXJjaCk6dm9pZCAwPT09R24udXNlcm5hdi5yb2xlTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5sb2Fk'@;
put 'aW5nPSExLHRoaXMucm9sZXM9YS5yb2xlcyxHbi51c2VybmF2LnJvbGVMaXN0PWEucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAs'@;
put 'dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYu'@;
put 'c2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkp'@;
put 'Oih0aGlzLnJvbGVzPUduLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUduLnVzZXJuYXYucm9sZVNlYXJjaCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMucm9sZXM9YS5yb2xlcyxHbi51c2VybmF2LnJv'@;
put 'bGVMaXN0PWEucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1l'@;
put 'bWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuc2Fz'@;
put 'Z3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpfXJvbGVMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2Uu'@;
put 'bGlicmFyeU9uRmlsdGVyKHRoaXMucm9sZXMsdGhpcy5yb2xlU2VhcmNoLCJST0xFTkFNRSIpLEduLnVzZXJuYXYucm9sZVNlYXJjaD10aGlzLnJvbGVTZWFyY2h9cm9sZU9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxh'@;
put 'Y2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSkpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdh'@;
put 'bnQ6W3tyb2xlaWQ6YS5ST0xFVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vw'@;
put 'c0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9YS5ST0xFVVJJLHRoaXMucm9sZU5hbWU9YS5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWEuUk9MRURFU0N9KX1maW5kUm9sZShhLGQpe2xldCBoPSExO3JldHVybiBhLmZvckVhY2goZj0+e2YuUk9MRVVSST09PWQmJihoPWYp'@;
put 'fSksaH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQob2EpLHR0KFRjKSx0dChEcyksdHQoSmQpLHR0KEdsKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yb2xlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250'@;
put 'YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQs'@;
put 'Im5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBSb2xlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJr'@;
put 'ZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJ0YWJsZS1hY3RpdmUiLCJj'@;
put 'bGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0'@;
put 'YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsx'@;
put 'LCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIsMCkoMSwiY2xyLXRyZWUiKSxKZSgyLHFldCw2LDMsImNsci10cmVlLW5v'@;
put 'ZGUiLDEpLEplKDMsWGV0LDIsMSwibmctY29udGFpbmVyIiwyKSx5ZSgpKCksbWUoNCwiZGl2IiwzKSxKZSg1LEpldCwzLDAsImRpdiIsNCksSmUoNixvdHQsMzEsOCwiZGl2Iiw1KSx5ZSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsZC5yb2xlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGQucm9s'@;
put 'ZXMpLENlKDIpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLnJvbGVNZW1iZXJzJiYhZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmksQnUsV2EsQnMsT3MsZGQsZzEsa2EsZjEsbjNdLHN0eWxlczpbIi5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17aGVpZ2h0OjEwMCV9LnJvbGUtaW5mby10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0ucm9sZS1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRl'@;
put 'ci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnJvbGUtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlm'@;
put 'OWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXR9LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250'@;
put 'ZW50LSVDT01QJV0sIC5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDoxMDAlfS5tZW1iZXItdGFi'@;
put 'bGVbX25nY29udGVudC0lQ09NUCVdICAgdGhlYWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2RhZGFkYX0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnti'@;
put 'YWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo3MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnJvbGUtZGF0YVtfbmdjb250'@;
put 'ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJdfSksY30pKCksc3R0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJnF0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltmcF19KSxjfSkoKSxh'@;
put 'dHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3LXJvdXRlIl1dLGhv'@;
put 'c3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0pLGN9KSgpO2Z1bmN0aW9uIGx0dChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEy'@;
put 'KX1mdW5jdGlvbiBjdHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLnVzZXJTZWFyY2g9IiIsanQoaC51c2VyTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rp'@;
put 'b24gdXR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCw5KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudXNlclNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS51c2VyTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxKZSg0LGx0dCwxLDAsImNsci1pY29uIiwxMCksSmUoNSxjdHQsMSwwLCJjbHItaWNvbiIsMTEpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixk'@;
put 'LnVzZXJTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGR0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS51c2VyT25DbGljayhoKSl9KSxtZSgxLCJwIiwxNikscXQoMiwiY2xyLWljb24iLDE3KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtkcigidGFibGUtYWN0aXZl'@;
put 'IiwobnVsbD09ZC51c2VySW5mbz9udWxsOmQudXNlckluZm8uVVJJKT09PWEuVVJJKSxDZSgzKSxncigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIGh0dChjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsZHR0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRp'@;
put 'bXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gZnR0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gcHR0KGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwidHIiKSgyLCJ0'@;
put 'ZCIsMjcpLE5lKDMsIiBNZXRhZGF0YSBDcmVhdGVkOiAiKSxtZSg0LCJiIiksTmUoNSkseWUoKSgpKCksbWUoNiwidHIiKSg3LCJ0ZCIsMjcpLE5lKDgsIiBNZXRhZGF0YSBVcGRhdGVkOiAiKSxtZSg5LCJiIiksTmUoMTApLHllKCkoKSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSg1'@;
put 'KSxvcihhLnVzZXJJbmZvLk1FVEFEQVRBQ1JFQVRFRCksQ2UoNSksb3IoYS51c2VySW5mby5NRVRBREFUQVVQREFURUQpfX1mdW5jdGlvbiBndHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIs'@;
put 'MjcpKDYsInAiLDI4KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpKDExLCJwIiwyOCkoMTIsImIiKSxOZSgxMykseWUoKSgpKCkoKSxKZSgxNCxwdHQsMTEsMiwibmctY29udGFpbmVyIiw1KSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2Uo'@;
put 'OCksb3IoYS51c2VySW5mby5OQU1FKSxDZSg1KSxvcihhLnVzZXJJbmZvLkRJU1BMQVlOQU1FKSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1mdW5jdGlvbiBtdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0'@;
put 'YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpLE5lKDExLCIgVXNlciBJRDogIiksbWUoMTIsImIiKSxOZSgxMykseWUoKSgpKCksbWUoMTQsInRyIikoMTUsInRkIiwy'@;
put 'NyksTmUoMTYsIiBVc2VyIHByb3ZpZGVyIElEOiAiKSxtZSgxNywiYiIpLE5lKDE4KSx5ZSgpKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoOCksb3IoYS51c2VySW5mby5OQU1FKSxDZSg1KSxvcihhLnVzZXJJbmZvLlVSSSksQ2UoNSksb3IoYS51c2VySW5mby5QUk9WSURF'@;
put 'Uil9fWZ1bmN0aW9uIHZ0dChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gRW1haWxzIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBfdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwzMSksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzEpLE5lKDQpLHllKCkoKSksMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuVFlQRSl9fWZ1bmN0aW9uIGJ0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLE5lKDUsIkVNQUlMIikseWUoKSgpLG1lKDYsInRk'@;
put 'IiwzMSkoNywiYiIpLE5lKDgsIlRZUEUiKSx5ZSgpKCkoKSgpLG1lKDksInRib2R5IiksSmUoMTAsX3R0LDUsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEwKSxSZSgibmdGb3JPZiIsYS51c2VyRW1haWxzKX19ZnVuY3Rpb24geXR0KGMsbCl7aWYoMSZjJiYobWUo'@;
put 'MCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLEplKDMsdnR0LDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjQpLEplKDUsYnR0LDExLDEsInRhYmxlIiwyNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksZ3IoIkVNQUlMUyAoIixhLnVzZXJFbWFpbHNDb3VudHx8IjAiLCIpIiks'@;
put 'Q2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckVtYWlsc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyRW1haWxzQ291bnQpfX1mdW5jdGlvbiB3dHQoYyxsKXsxJmMmJnF0KDAsImhyIil9ZnVuY3Rpb24gQ3R0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBHcm91cHMgUHJl'@;
put 'c2VudCIpLHllKCkpfWZ1bmN0aW9uIFN0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiwzMyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSSksQ2UoMSksZ3IoIiAiLGEuR1JPVVBOQU1F'@;
put 'LCIgIil9fWZ1bmN0aW9uIE10dChjLGwpe2lmKDEmYyYmKFZyKDApLG1lKDEsInRkIiwzMyksTmUoMikseWUoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksUmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iKyhhLkdST1VQVVJJfHxhLlVSSSkp'@;
put 'LENlKDEpLGdyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiB4dHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpLEplKDEsU3R0LDIsMiwidGQiLDMyKSxKZSgyLE10dCwzLDIsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixh'@;
put 'LnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19ZnVuY3Rpb24gRXR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLEplKDIseHR0LDMsMiwidHIiLDIp'@;
put 'LHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJuZ0Zvck9mIixhLnVzZXJHcm91cHMpfX1mdW5jdGlvbiBrdHQoYyxsKXsxJmMmJnF0KDAsImhyIil9ZnVuY3Rpb24gQXR0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBSb2xlcyBQcmVzZW50IikseWUoKSl9ZnVu'@;
put 'Y3Rpb24gVHR0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMzQpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoNCk7Q2UoMSksUmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3JvbGVzLyIrZC5nZXRSb2xlVVJJKGEuUk9MRVVSSSkpLENl'@;
put 'KDEpLGdyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIER0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxKZSgyLFR0dCwzLDIsInRyIiwyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgyKSxSZSgibmdGb3JPZiIsYS51c2VyUm9sZXMpfX1m'@;
put 'dW5jdGlvbiBJdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIpLHllKCksSmUoMyxBdHQsMiwwLCJoNSIsNSksbWUoNCwiZGl2IiwyNCksSmUoNSxEdHQsMywxLCJ0YWJsZSIsMjUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGdyKCJST0xFUyAoIixh'@;
put 'LnVzZXJSb2xlc0NvdW50fHwiMCIsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS51c2VyUm9sZXNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEudXNlclJvbGVzQ291bnQpfX1mdW5jdGlvbiBMdHQoYyxsKXsxJmMmJnF0KDAsImhyIil9ZnVuY3Rpb24gUnR0KGMsbCl7MSZjJiYobWUoMCwi'@;
put 'aDUiKSxOZSgxLCJObyBMb2dpbnMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIE90dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDMxKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMSksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYS5ET01B'@;
put 'SU4pLENlKDIpLG9yKGEuVVNFUklEKX19ZnVuY3Rpb24gUHR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksTmUoNSwiRE9NQUlOIikseWUoKSgpLG1lKDYsInRkIikoNywiYiIpLE5lKDgsIlVTRVIgSUQiKSx5ZSgp'@;
put 'KCkoKSgpLG1lKDksInRib2R5IiksSmUoMTAsT3R0LDUsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEwKSxSZSgibmdGb3JPZiIsYS51c2VyTG9naW5zKX19ZnVuY3Rpb24gRnR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLEpl'@;
put 'KDMsUnR0LDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjQpLEplKDUsUHR0LDExLDEsInRhYmxlIiwyNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksZ3IoIkxPR0lOUyAoIixhLnVzZXJMb2dpbnNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckxvZ2lu'@;
put 'c0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyTG9naW5zQ291bnQpfX1mdW5jdGlvbiBIdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxKZSgxLGd0dCwxNSwzLCJkaXYiLDIwKSxKZSgyLG10dCwxOSwzLCJkaXYiLDIwKSxtZSgzLCJkaXYiLDIxKSg0LCJkaXYiLDIyKSg1LCJk'@;
put 'aXYiLDIzKSxKZSg2LHl0dCw2LDMsImRpdiIsNSksSmUoNyx3dHQsMSwwLCJociIsNSksbWUoOCwiZGl2IikoOSwiaDMiKSxOZSgxMCkseWUoKSxKZSgxMSxDdHQsMiwwLCJoNSIsNSksbWUoMTIsImRpdiIsMjQpLEplKDEzLEV0dCwzLDEsInRhYmxlIiwyNSkseWUoKSgpLEplKDE0LGt0dCwx'@;
put 'LDAsImhyIiw1KSxKZSgxNSxJdHQsNiwzLCJkaXYiLDUpLEplKDE2LEx0dCwxLDAsImhyIiw1KSxKZSgxNyxGdHQsNiwzLCJkaXYiLDUpLHF0KDE4LCJiciIpLHllKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUu'@;
put 'U2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhJiZhLnVzZXJJbmZvKSxDZSg0KSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5'@;
put 'cGUuU2FzOSksQ2UoMyksZ3IoIkdST1VQUyAoIixhLnVzZXJHcm91cHNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckdyb3Vwc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyR3JvdXBzQ291bnQpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1h'@;
put 'LlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2Fz'@;
put 'OSl9fWxldCBDbGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9Xyx0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2VyU2VhcmNoPSIi'@;
put 'LHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1OYW1lPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMuc2VydmVyVHlwZT0iIix0aGlzLlNlcnZlclR5cGU9WmMuRCx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdl'@;
put 'dFNlcnZlclR5cGUoKSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe2lmKEduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2'@;
put 'aWV3L3VzZXJuYXYvdXNlcnMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1OYW1lPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksR24udXNlcm5hdi51c2VyTGlzdCYmIXRoaXMucGFyYW1QcmVz'@;
put 'ZW50KXRoaXMudXNlcnM9R24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9R24udXNlcm5hdi51c2VyU2VhcmNoO2Vsc2UgaWYodm9pZCAwPT09R24udXNlcm5hdi51c2VyTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe05BTUU6Zi5uYW1lLFVSSTpmLmlkLFBST1ZJ'@;
put 'REVSOmYucHJvdmlkZXJJZH0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1oLEduLnVzZXJuYXYudXNlckxpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1hLnVz'@;
put 'ZXJzLEduLnVzZXJuYXYudXNlckxpc3Q9YS51c2Vyc30pKToodGhpcy51c2Vycz1Hbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Hbi51c2VybmF2LnVzZXJTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50KWlmKHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YSl7bGV0IGE9dGhp'@;
put 'cy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2ErIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGQ9PmQudGV4dCgp'@;
put 'KS50aGVuKGQ9PntsZXQgaD1KU09OLnBhcnNlKGQpO3RoaXMudXNlckRhdGE9aCx0aGlzLmxvYWRpbmc9ITE7bGV0IGY9aC5pdGVtcy5tYXAoXz0+KHtHUk9VUE5BTUU6Xy5uYW1lLFVSSTpfLmlkfSkpO3RoaXMudXNlckdyb3Vwcz1mLHRoaXMudXNlckdyb3Vwc0NvdW50PWYubGVuZ3RoLHRo'@;
put 'aXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChfPT5fLlVSST09PWEpKX0pfWVsc2V7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1'@;
put 'cmk6YX1dfSkudGhlbihoPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgWmMuRC5TYXM5OnRoaXMudXNlckluZm89aC5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1oLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1oLmVtYWlscy5sZW5ndGgsdGhpcy51'@;
put 'c2VyUm9sZXM9aC5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWgucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1oLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1oLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBaYy5ELlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10'@;
put 'aGlzLnVzZXJzLmZpbmQoZj0+Zi5VUkk9PT1hKTtlbHNle2NvbnN0IGY9aC5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOmYuSUQsTkFNRTpmLk5BTUUsRElTUExBWU5BTUU6Zi5OQU1FfX19dGhpcy51c2VyRGF0YT1oLHRoaXMudXNlckdyb3Vwcz1oLmdyb3Vwcyx0aGlzLnVzZXJHcm91'@;
put 'cHNDb3VudD1oLmdyb3Vwcy5sZW5ndGh9KX19dXNlckxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy51c2Vycyx0aGlzLnVzZXJTZWFyY2gsIk5BTUUiKSxHbi51c2VybmF2LnVzZXJTZWFyY2g9dGhpcy51c2VyU2VhcmNofXVzZXJPbkNsaWNr'@;
put 'KGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuVVJJKSksdGhp'@;
put 'cy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYS5VUkkrIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQg'@;
put 'Zj1KU09OLnBhcnNlKGgpO3RoaXMudXNlckRhdGE9Zix0aGlzLmxvYWRpbmc9ITE7bGV0IF89Zi5pdGVtcy5tYXAoVD0+KHtHUk9VUE5BTUU6VC5uYW1lLFVSSTpULmlkfSkpO3RoaXMudXNlckdyb3Vwcz1fLHRoaXMudXNlckdyb3Vwc0NvdW50PV8ubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlz'@;
put 'LnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChUPT5ULlVSST09PWEuVVJJKSl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphLlVSSX1dfSkudGhlbihmPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZl'@;
put 'clR5cGUpe2Nhc2UgWmMuRC5TYXM5OnRoaXMudXNlckluZm89Zi5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1mLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1mLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9Zi5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWYucm9sZXMubGVuZ3Ro'@;
put 'LHRoaXMudXNlckxvZ2lucz1mLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1mLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBaYy5ELlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoXz0+Xy5VUkk9PT1hLlVSSSk7ZWxzZXtjb25zdCBfPWYuZ3Jv'@;
put 'dXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpfLklELE5BTUU6Xy5OQU1FLERJU1BMQVlOQU1FOl8uTkFNRX19fXRoaXMudXNlckRhdGE9Zix0aGlzLnVzZXJHcm91cHM9Zi5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5ncm91cHMubGVuZ3RofSl9Z2V0Um9sZVVSSShhKXtyZXR1cm4g'@;
put 'YS5zcGxpdCgiT01TT0JKOklkZW50aXR5R3JvdXAiKVsxXS5zbGljZSgxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVGMpLHR0KG9hKSx0dChHbCksdHQoSmQpLHR0KERzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImFwcC11c2VyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0s'@;
put 'WyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBVc2VycyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0'@;
put 'ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIs'@;
put 'InRpbWVzIiwzLCJjbGljayJdLFszLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNs'@;
put 'YXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwidXNlci1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSB1c2VyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwidXNlci1pbmZvIl0sWzEs'@;
put 'ImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQiXSxbMSwidGFibGUiLCJ1c2VyLXRhYmxlIl0sWzEsIndpZHRoLTUwIl0sWzEsIiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsImNsYXNzIiwiIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0'@;
put 'aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiwwKSgxLCJjbHItdHJlZSIpLEplKDIsdXR0LDYsMywiY2xyLXRyZWUtbm9kZSIsMSksSmUoMyxodHQsMiwxLCJuZy1jb250YWlu'@;
put 'ZXIiLDIpLHllKCkoKSxtZSg0LCJkaXYiLDMpLEplKDUsZnR0LDMsMCwiZGl2Iiw0KSxKZSg2LEh0dCwxOSwxMSwiZGl2Iiw1KSx5ZSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsZC51c2VycyksQ2UoMSksUmUoIm5nRm9yT2YiLGQudXNlcnMpLENlKDIpLFJlKCJuZ0lmIixkLmxvYWRpbmcp'@;
put 'LENlKDEpLFJlKCJuZ0lmIixkLnVzZXJEYXRhJiYhZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmksQnUsR18sV2EsQnMsT3MsZGQsZzEsa2EsZjEsbjNdLHN0eWxlczpbIi5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnVzZXItaW5mby10ZXh0'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0udXNlci1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHgg'@;
put 'NXB4ICNkYWQ3ZDd9LnVzZXItaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNzti'@;
put 'b3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6YXV0b30udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnVzZXItZGF0YVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDoxMDAlfS51c2VyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtjdXJzb3I6cG9pbnRl'@;
put 'cn0ud2lkdGgtNTBbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJX0ud2lkdGgtMzNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMzJX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjUwMHB4fUBtZWRpYSBzY3JlZW4g'@;
put 'YW5kIChtYXgtd2lkdGg6IDc2OHB4KXsudXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KSxjfSkoKSxOdHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuaHR0cD1hLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWQsdGhp'@;
put 'cy52aXlhQXBpcz17QW5hbHl0aWNzX0luc2lnaHRzOntpbnNpZ2h0czoiL2luc2lnaHRzIn0sVmlzdWFsaXNhdGlvbjp7cmVwb3J0czoiL3JlcG9ydHMiLHJlcG9ydEltYWdlczoiL3JlcG9ydEltYWdlcyIscmVwb3J0VHJhbnNmb3JtczoiL3JlcG9ydFRyYW5zZm9ybXMiLHZpc3VhbEFuYWx5'@;
put 'dGljczoiL3Zpc3VhbEFuYWx5dGljcyJ9LENvbXB1dGU6e2pvYnM6Ii9qb2JEZWZpbml0aW9ucyIsam9iRXhlY3V0aW9uOiIvam9iRXhlY3V0aW9uIn0sRGVjaXNpb25fTWFuYWdlbWVudDp7bW9kZWxNYW5hZ2VtZW50OiIvbW9kZWxNYW5hZ2VtZW50Iixtb2RlbFJlcG9zaXRvcnk6Ii9tb2Rl'@;
put 'bFJlcG9zaXRvcnkiLG1vZGVsUHVibGlzaDoiL21vZGVsUHVibGlzaCIsbWljcm9hbmFseXRpY1Njb3JlOiIvbWljcm9hbmFseXRpY1Njb3JlIixkYXRhTWluaW5nOiIvZGF0YU1pbmluZyIsYnVzaW5lc3NSdWxlczoiL2J1c2luZXNzUnVsZXMiLHJlZmVyZW5jZURhdGE6Ii9yZWZlcmVuY2VE'@;
put 'YXRhIix0cmVhdG1lbnREZWZpbml0aW9uczoiL3RyZWF0bWVudERlZmluaXRpb25zIixzdWJqZWN0Q29udGFjdHM6Ii9zdWJqZWN0Q29udGFjdHMiLGRlY2lzaW9uc1J1bnRpbWVCdWlsZGVyOiIvZGVjaXNpb25zUnVudGltZUJ1aWxkZXIifSxDb3JlX1NlcnZpY2VzOntmb2xkZXJzOiIvZm9s'@;
put 'ZGVycyIsZmlsZXM6Ii9maWxlcyIsYW5ub3RhdGlvbnM6Ii9hbm5vdGF0aW9ucyIsYXV0aG9yaXphdGlvbjoiL2F1dGhvcml6YXRpb24iLHJlbGF0aW9uc2hpcHM6Ii9yZWxhdGlvbnNoaXBzIixTQVNMb2dvbjoiL1NBU0xvZ29uIn0sQXV0b21hdGVkX01hY2hpbmVfTGVhcm5pbmc6e21sUGlw'@;
put 'ZWxpbmVBdXRvbWF0aW9uOiIvbWxQaXBlbGluZUF1dG9tYXRpb24ifSxPdGhlcjp7aWRlbnRpdGllczoiL2lkZW50aXRpZXMifX0sdGhpcy5zZXJ2ZXJVcmw9IiI7Y29uc3QgaD10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWg/LnNl'@;
put 'cnZlclVybHx8IiIsdGhpcy5nZXRCeUNvbGxlY3Rpb24oImpvYnMiKS5zdWJzY3JpYmUoZj0+e2NvbnNvbGUubG9nKCJyZXMiLGYpfSl9Z2V0QWxsQ29sbGVjdGlvbnMoKXtyZXR1cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZl'@;
put 'clVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QnlDb2xsZWN0aW9uKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'YykoYXIoaFApLGFyKGU4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gVnR0KGMsbCl7MSZjJiZxdCgwLCJkaXYiLDkpfWZ1bmN0aW9uIEJ0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp'@;
put 'O21lKDAsInNwYW4iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5vblZhbHVlQ2xpY2soaCkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksb3IoYS5kZXNjcmlwdGlv'@;
put 'bil9fWZ1bmN0aW9uIGp0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNlY3Rpb24iLDExKSgxLCJuZ3gtanNvbi12aWV3ZXIiLDEyKSx4dCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25TZWdtZW50TGlua0NsaWNrKGgp'@;
put 'KX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLFJlKCJqc29uIixhLnZhbHVlKSgiZXhwYW5kZWQiLGQuZXhwYW5kZWQpKCJkZXB0aCIsZC5kZXB0aCkoIl9jdXJyZW50RGVwdGgiLGQuX2N1cnJlbnREZXB0aCsxKX19Y29uc3QgenR0PWZ1bmN0'@;
put 'aW9uKGMpe3JldHVyblsic2VnbWVudCIsY119LFV0dD1mdW5jdGlvbihjLGwpe3JldHVybnsic2VnbWVudC1tYWluIjohMCxleHBhbmRhYmxlOmMsZXhwYW5kZWQ6bH19O2Z1bmN0aW9uIFp0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24i'@;
put 'LDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50b2dnbGUoZikpfSksSmUoMixWdHQsMSwwLCJkaXYiLDQpLG1lKDMsInNwYW4iLDUpLE5lKDQpLHllKCksbWUoNSwic3BhbiIsNiksTmUoNiwiOiAiKSx5ZSgpLEplKDcsQnR0'@;
put 'LDIsMSwic3BhbiIsNykseWUoKSxKZSg4LGp0dCwyLDQsInNlY3Rpb24iLDgpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtSZSgibmdDbGFzcyIsSjIoNix6dHQsInNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLENlKDEpLFJlKCJuZ0NsYXNzIixRMig4LFV0dCxkLmlz'@;
put 'RXhwYW5kYWJsZShhKSxhLmV4cGFuZGVkKSksQ2UoMSksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKGEpKSxDZSgyKSxvcihhLmtleSksQ2UoMyksUmUoIm5nSWYiLCFhLmV4cGFuZGVkfHwhZC5pc0V4cGFuZGFibGUoYSkpLENlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5k'@;
put 'YWJsZShhKSl9fWxldCBZdHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgRXIsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMu'@;
put 'c2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFjaChhPT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6'@;
put 'dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0dXJuIm9iamVjdCI9PT1hLnR5cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYo'@;
put 'YS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVlKX1vblNlZ21lbnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEs'@;
put 'ZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlwZW9mIGgudmFsdWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJv'@;
put 'b2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50eXBlPSJsaW5rIjticmVha31oLnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2Fz'@;
put 'ZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8oaC50eXBlPSJudWxsIixoLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJh'@;
put 'eSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0ZT9oLnR5cGU9ImRhdGUiOihoLnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnko'@;
put 'aC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5f'@;
put 'Y3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZixfKXtsZXQgVCxXO3JldHVybiJvYmplY3QiIT10eXBlb2YgZnx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8'@;
put 'ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihUPWQuZ2V0KGYpLHZvaWQgMCE9PVQ/eyRyZWY6VH06KGQuc2V0KGYsXyksQXJyYXkuaXNBcnJheShmKT8oVz1bXSxmLmZvckVhY2goZnVuY3Rpb24oaWUscGUpe1dbcGVdPWgo'@;
put 'aWUsXysiWyIrcGUrIl0iKX0pKTooVz17fSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtXW2llXT1oKGZbaWVdLF8rIlsiK0pTT04uc3RyaW5naWZ5KGllKSsiXSIpfSkpLFcpKX0oYSwiJCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVkIixkZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlu'@;
put 'a0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOlt2YV0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xh'@;
put 'c3MiLCJ0b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVu'@;
put 'dC12YWx1ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRoIiwic2VnbWVudExpbmtDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwic2VjdGlvbiIsMCksSmUoMSxadHQsOSwxMSwi'@;
put 'c2VjdGlvbiIsMSkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nRm9yT2YiLGQuc2VnbWVudHMpKX0sZGVwZW5kZW5jaWVzOltkYyx4cyxaaSxjXSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOy5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OnZhcigtLW5n'@;
put 'eC1qc29uLWZvbnQtZmFtaWx5LCBtb25vc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1uZ3gtanNvbi1mb250LXNpemUsIDFlbSk7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHg7bWFyZ2luOjFweCAxcHggMXB4IDEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXt3b3JkLXdyYXA6YnJlYWstd29yZH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFi'@;
put 'c29sdXRlO21hcmdpbi1sZWZ0Oi0xNHB4O21hcmdpbi10b3A6M3B4O2ZvbnQtc2l6ZTouOGVtO2xpbmUtaGVpZ2h0OjEuMmVtO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjb2xvcjp2YXIoLS1uZ3gtanNvbi10b2dnbGVyLCAjNzg3ODc4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IlxcMjViYSI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0g'@;
put 'LjFzIGVhc2UtaW59Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpz'@;
put 'b24ta2V5LCAjNEUxODdDKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtc2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2'@;
put 'YXIoLS1uZ3gtanNvbi1zZXBhcmF0b3IsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdmFsdWUsICMwMDApfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNoaWxkcmVuW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMnB4fS5uZ3gtanNvbi12aWV3'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1zdHJpbmdbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc3RyaW5nLCAj'@;
put 'RkY2QjZCKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZh'@;
put 'cigtLW5neC1qc29uLW51bWJlciwgIzAwOTY4OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWJvb2xlYW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdj'@;
put 'b250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYm9vbGVhbiwgI0I5MzhBNCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWRhdGVbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0g'@;
put 'PiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZGF0ZSwgIzA1NjY4RCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5b'@;
put 'X25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWFycmF5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW9iamVjdCwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWZ1bmN0'@;
put 'aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWZ1bmN0aW9uLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1saW5rLCAjOUI1OUI2KX0ubmd4LWpzb24tdmlld2Vy'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLCAjZmZmKX0u'@;
put 'bmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5n'@;
put 'eC1qc29uLXVuZGVmaW5lZCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVD'@;
put 'T01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLWJnLCByZWQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gPiAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNl'@;
put 'Z21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50'@;
put 'LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5uZ3gtanNvbi12aWV3ZXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3RyYW5z'@;
put 'Zm9ybTpyb3RhdGUoOTBkZWcpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dn'@;
put 'bGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0nXX0pLGN9KSgpLFd0dD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRz'@;
put 'Oltvb119KSxjfSkoKSxHdHQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7aWYoIWEuaW5jbHVkZXMoIi8iKSlyZXR1cm4gYTtsZXQgZD0iIjtjb25zdCBoPWEuc3BsaXQoIi8iKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylpZigiIiE9PWhbZl0pe2NvbnN0IF89aFtmXTtkKz0iLyIr'@;
put 'XyxoW2ZdPWA8YSBocmVmPSR7ZH0+JHtffTwvYT5gfXJldHVybiBoLmpvaW4oIi8iKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToibGlua2luemUiLHR5cGU6YyxwdXJlOiEwfSksY30pKCksJHR0PSgoKT0+'@;
put 'e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6InByZXR0eWpzb24iLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7ZnVu'@;
put 'Y3Rpb24gcXR0KGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwyMiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VjKCJ2YWx1ZSIsYS52YWx1ZSksQ2UoMSksZ3IoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIEt0dChjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGdyb3Vw'@;
put 'IiwyMCksSmUoMSxxdHQsMiwyLCJvcHRpb24iLDIxKSxiYSgyLCJrZXl2YWx1ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7UmUoImxhYmVsIixhLmtleSksQ2UoMSksUmUoIm5nRm9yT2YiLFpsKDIsMixkLmNvbGxlY3Rpb25zW2Eua2V5XSkpfX1mdW5jdGlvbiBY'@;
put 'dHQoYyxsKXsxJmMmJihtZSgwLCJwIiwyMyksTmUoMSwiIFNlbGVjdCBjb2xsZWN0aW9uIHRvIHN0YXJ0ICIpLHllKCkpfWZ1bmN0aW9uIEp0dChjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDI0KX1mdW5jdGlvbiBRdHQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rp'@;
put 'b24gZW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saW5rc1NlYXJjaD0iIixqdChoLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gdG50'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjUpKDEsImRpdiIsMjYpKDIsImlucHV0IiwyNywyOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpbmtzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBCdChhKSxqdChWZSgpLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxKZSg0LFF0dCwxLDAsImNsci1pY29uIiwyOSksSmUoNSxlbnQsMSwwLCJjbHItaWNvbiIsMzApLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixk'@;
put 'LmxpbmtzU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBubnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzNCkseHQoImNsaWNrIixmdW5jdGlv'@;
put 'bihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8uZW5kcG9pbnRMaW5rcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9'@;
put 'aCl9KSxtZSgxLCJwIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkubGlua09uQ2xpY2soaCkpfSkscXQoMiwiY2xyLWljb24iLDM2KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0'@;
put 'O1JlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLHpjKCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rpb24gcm50KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxubnQsNCw0LCJjbHItdHJl'@;
put 'ZS1ub2RlIiwzMyksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBpbnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gb250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWlj'@;
put 'b24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5pdGVtc1NlYXJjaD0iIixqdChoLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gc250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9k'@;
put 'ZSIsMjUpKDEsImRpdiIsMjYpKDIsImlucHV0IiwzNywzOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLml0ZW1zU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkp'@;
put 'fSkseWUoKSxKZSg0LGludCwxLDAsImNsci1pY29uIiwyOSksSmUoNSxvbnQsMSwwLCJjbHItaWNvbiIsMzApLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLml0ZW1zU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8'@;
put 'MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBhbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzNCkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1'@;
put 'cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8uZW5kcG9pbnRJdGVtcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEp'@;
put 'O2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuaXRlbU9uQ2xpY2soaCkpfSkscXQoMiwiY2xyLWljb24iLDM2KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLCEh'@;
put 'YS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLGdyKCIgIixhLm5hbWV8fGEuaWQsIiAiKX19ZnVuY3Rpb24gbG50KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxhbnQsNCwzLCJjbHItdHJlZS1ub2RlIiwzMyksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJl'@;
put 'KCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBjbnQoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gdW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwibmd4LWpzb24tdmlld2VyIiw0OSkseHQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24o'@;
put 'aCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSx5ZSgpfTImYyYmUmUoImpzb24iLFZlKDMpLmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9ZnVuY3Rpb24gZG50KGMsbCl7aWYoMSZjJiYoVnIoMCksTmUoMSksYmEoMiwicHJldHR5anNvbiIpLHpyKCkp'@;
put 'LDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxncigiXG4gICAgICAgICAgICAiLFpsKDIsMSxhLmVuZHBvaW50SnNvbiksIlxuICAgICAgICAgICIpfX1mdW5jdGlvbiBobnQoYyxsKXtpZigxJmMmJihWcigwKSxOZSgxLCJcbiAgICAgICAgICAiKSxKZSgyLHVudCwxLDIsIm5neC1qc29uLXZp'@;
put 'ZXdlciIsNDgpLE5lKDMsIlxuICAgICAgICAgICIpLEplKDQsZG50LDMsMywibmctY29udGFpbmVyIiwxOSksTmUoNSwiXG4gICAgICAgICIpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgibmdJZiIsIWEucmF3SnNvbiksQ2UoMiksUmUoIm5nSWYiLGEucmF3SnNvbil9fWZ1'@;
put 'bmN0aW9uIGZudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImRpdiIsNDApKDIsInNwYW4iLDQxKSxOZSgzLCIgR0VUICIpLG1lKDQsInAiLDQyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uQnJlYWRjdW1zQ2xpY2soaCkpfSks'@;
put 'YmEoNSwibGlua2luemUiKSx5ZSgpLG1lKDYsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5jb3B5QnJlYWRjcnVtcygpKX0pLHF0KDcsImNsci1pY29uIiwxNSkseWUoKSgpLG1lKDgsImRpdiIsNDMpKDksImNsci1pbnB1dC1jb250YWlu'@;
put 'ZXIiLDEyKSgxMCwibGFiZWwiKSxOZSgxMSwiU3RhcnQiKSx5ZSgpLG1lKDEyLCJpbnB1dCIsNDQpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5lbmRwb2ludC5zdGFydD1oKX0pLHllKCkoKSxtZSgxMywiY2xyLWlucHV0LWNvbnRhaW5lciIs'@;
put 'MTIpKDE0LCJsYWJlbCIpLE5lKDE1LCJMaW1pdCIpLHllKCksbWUoMTYsImlucHV0Iiw0NCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmVuZHBvaW50LmxpbWl0PWgpfSkseWUoKSgpLG1lKDE3LCJidXR0b24iLDQ1KSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLHF0KDE4LCJjbHItaWNvbiIsNDYpLHllKCkoKSgpLG1lKDE5LCJwcmUiLDQ3KSxOZSgyMCwiICAgICAgICAiKSxKZSgyMSxobnQsNiwyLCJuZy1jb250YWluZXIiLDE5KSxOZSgyMiwiXG4gICAgICAi'@;
put 'KSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNCksUmUoImlubmVySFRNTCIsWmwoNSw3LGEuZW5kcG9pbnQudXJsKSxxMiksQ2UoOCksUmUoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksQ2UoNCksUmUo'@;
put 'Im5nTW9kZWwiLGEuZW5kcG9pbnQubGltaXQpKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksQ2UoMSksUmUoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LmxpbWl0JiZ2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxDZSg0KSxSZSgibmdJZiIsYS5lbmRwb2lu'@;
put 'dEpzb24pfX1sZXQgcG50PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNWaXlhU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5jb2xsZWN0aW9ucz17fSx0aGlzLmNvbGxlY3Rp'@;
put 'b249IiIsdGhpcy5lbmRwb2ludExpbmtzPVtdLHRoaXMuZW5kcG9pbnRJdGVtcz1bXSx0aGlzLmVuZHBvaW50PXt1cmw6IiIsc3RhcnQ6LTEsbGltaXQ6LTF9LHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5yYXdKc29uPSExLHRoaXMubGlu'@;
put 'a3NTZWFyY2g9IiIsdGhpcy5pdGVtc1NlYXJjaD0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZ31uZ09uSW5pdCgpe3RoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5jb2xsZWN0aW9ucz10aGlzLnNhc1ZpeWFTZXJ2aWNl'@;
put 'LmdldEFsbENvbGxlY3Rpb25zKCl9bGlua3NMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRMaW5rcyx0aGlzLmxpbmtzU2VhcmNoLCJyZWwiKSxHbi52aXlhQXBpLmxpbmtzc1NlYXJjaD10aGlzLmxpbmtzU2VhcmNofWl0ZW1z'@;
put 'TGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50SXRlbXMsdGhpcy5pdGVtc1NlYXJjaCwibmFtZSIpLEduLnZpeWFBcGkuaXRlbXNTZWFyY2g9dGhpcy5pdGVtc1NlYXJjaH1saW5rT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5o'@;
put 'cmVmKX1pdGVtT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5saW5rc1swXS5ocmVmKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9'@;
put 'PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX11cGRhdGVTZWxlY3RlZENvbGxlY3Rpb24oKXtHbi52aXlhQXBpLnNlbGVjdGVkQ29sbGVjdGlvbj10aGlzLmNvbGxlY3Rpb24sdGhpcy5lbmRwb2ludC51cmw9dGhpcy5jb2xsZWN0aW9u'@;
put 'LHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeUNvbGxlY3Rpb24odGhpcy5jb2xsZWN0aW9uKS5zdWJzY3JpYmUoYT0+e3RoaXMuZW5kcG9pbnRMaW5rcz1hLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1hLml0ZW1zP2EuaXRlbXM6W10sdGhpcy5j'@;
put 'b2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLmVuZHBvaW50SnNvbj1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9YS5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWEubGltaXR9LGE9Pnt0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExO2xldCBkPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJl'@;
put 'cXVlc3QiO2EubWVzc2FnZSYmKGQ9YS5tZXNzYWdlKSxhLmVycm9yJiYoYS5lcnJvci5tZXNzYWdlJiYoZD1hLmVycm9yLm1lc3NhZ2UpLGEuZXJyb3IucmVtZWRpYXRpb24mJihkPWAke2R9XG4ke2EuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1v'@;
put 'ZGFsKG51bGwsZCxudWxsLCJIVFRQIEVycm9yIil9KX1vbkpzb25MaW5rQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEpfW9uSnNvbkNsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQoKSwiQSI9PT1hLnNyY0VsZW1lbnQudGFnTmFtZSl7Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChh'@;
put 'LnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfX1vbkJyZWFkY3Vtc0NsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQoKSwhYS5zcmNFbGVtZW50LmhyZWYpcmV0dXJuO2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMu'@;
put 'bG9hZFVybChkKX1jb3B5SnNvbigpe3RoaXMuZW5kcG9pbnRKc29uJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLmVuZHBvaW50SnNvbixudWxsLDIpKX1jb3B5QnJlYWRjcnVtcygpe3RoaXMuZW5kcG9pbnQmJnRoaXMuZW5kcG9pbnQudXJsJiZu'@;
put 'YXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmVuZHBvaW50LnVybCl9YXBwbHlRdWVyeVBhcmFtcygpe2NvbnN0IGE9dGhpcy5lbmRwb2ludC5zdGFydCxkPXRoaXMuZW5kcG9pbnQubGltaXQsaD1gPyR7dm9pZCAwIT09YT8ic3RhcnQ9IithOiIifSR7dm9pZCAwIT09ZD8iJmxp'@;
put 'bWl0PSIrZDoiIn1gLGY9YCR7dGhpcy5lbmRwb2ludC51cmwuc3BsaXQoIj8iKVswXX0ke2h9YDt0aGlzLmxvYWRVcmwoZil9bG9hZFVybChhKXt0aGlzLmVuZHBvaW50TG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5VXJsKGEpLnN1YnNjcmliZShkPT57dGhpcy5lbmRwb2lu'@;
put 'dExpbmtzPWQubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWQuaXRlbXM/ZC5pdGVtczpbXSx0aGlzLmVuZHBvaW50SnNvbj1kLHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuZW5kcG9pbnQudXJsPWEsdGhpcy5lbmRwb2ludC5zdGFydD1kLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9'@;
put 'ZC5saW1pdH0sZD0+e3RoaXMuZW5kcG9pbnRMb2FkaW5nPSExO2xldCBoPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2QubWVzc2FnZSYmKGg9ZC5tZXNzYWdlKSxkLmVycm9yJiYoZC5lcnJvci5tZXNzYWdlJiYoaD1kLmVycm9yLm1lc3NhZ2UpLGQuZXJyb3IucmVt'@;
put 'ZWRpYXRpb24mJihoPWAke2h9XG4ke2QuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsaCxudWxsLCJIVFRQIEVycm9yIil9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVGMpLHR0'@;
put 'KE50dCksdHQob2EpLHR0KHZsKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aXlhLWFwaS1leHBsb3JlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MzMsdmFyczoxMyxjb25zdHM6W1sxLCJhcGktY29sbGVjdGlvbi1kcm9w'@;
put 'ZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNs'@;
put 'ci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xy'@;
put 'LWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJt'@;
put 'LTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0s'@;
put 'WyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNo'@;
put 'LW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBsaW5rcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGlua3NU'@;
put 'cmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwi'@;
put 'Y2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbImNscklucHV0IiwiIiwicGxhY2Vo'@;
put 'b2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaEl0ZW1zVHJlZUlucHV0IiwiIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRl'@;
put 'bXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJlbmRwb2ludC1icmVhZGNydW1zIiwzLCJpbm5lckhUTUwiLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24t'@;
put 'aXRlbXMtY2VudGVyIiwicXVlcnktcGFyYW1zIl0sWyJjbHJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJkaXNhYmxlZCIsImNsaWNr'@;
put 'Il0sWyJzaGFwZSIsInBsYXkiXSxbMSwianNvbi1hcmVhIl0sWyJjbGFzcyIsImQtYmxvY2siLDMsImpzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCIsNCwibmdJZiJdLFsxLCJkLWJsb2NrIiwzLCJqc29uIiwiZXhwYW5kZWQiLCJzZWdtZW50TGlua0NsaWNrZWQiXV0sdGVt'@;
put 'cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMCkoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLE5lKDQsIkFQSSBDb2xsZWN0aW9uIikseWUoKSxtZSg1LCJzZWxlY3QiLDEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv'@;
put 'bihmKXtyZXR1cm4gZC5jb2xsZWN0aW9uPWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpfSksSmUoNixLdHQsMyw0LCJvcHRncm91cCIsMiksYmEoNywia2V5dmFsdWUiKSx5ZSgpKCkoKSxKZSg4LFh0dCwyLDAsInAiLDMpLG1lKDks'@;
put 'ImRpdiIsNCksSmUoMTAsSnR0LDEsMCwiY2xyLXNwaW5uZXIiLDUpLHllKCksbWUoMTEsImNsci10cmVlIiksSmUoMTIsdG50LDYsMywiY2xyLXRyZWUtbm9kZSIsNiksSmUoMTMscm50LDIsMSwibmctY29udGFpbmVyIiw3KSx5ZSgpLG1lKDE0LCJjbHItdHJlZSIpLEplKDE1LHNudCw2LDMs'@;
put 'ImNsci10cmVlLW5vZGUiLDYpLEplKDE2LGxudCwyLDEsIm5nLWNvbnRhaW5lciIsNykseWUoKSgpLG1lKDE3LCJkaXYiLDgpKDE4LCJkaXYiLDkpKDE5LCJkaXYiLDEwKSgyMCwiZGl2IiwxMSkoMjEsImNsci10b2dnbGUtY29udGFpbmVyIiwxMikoMjIsImNsci10b2dnbGUtd3JhcHBlciIp'@;
put 'KDIzLCJpbnB1dCIsMTMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yYXdKc29uPWZ9KSx5ZSgpLG1lKDI0LCJsYWJlbCIpLE5lKDI1LCJSQVcgSnNvbiIpLHllKCkoKSgpLG1lKDI2LCJidXR0b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQu'@;
put 'Y29weUpzb24oKX0pLHF0KDI3LCJjbHItaWNvbiIsMTUpLHllKCkoKSxtZSgyOCwiaDQiLDE2KSxOZSgyOSwiIEFQSSBFeHBsb3JlciAiKSxKZSgzMCxjbnQsMSwwLCJjbHItc3Bpbm5lciIsMTcpLHllKCkoKSxxdCgzMSwiaHIiLDE4KSxKZSgzMixmbnQsMjMsOSwibmctY29udGFpbmVyIiwx'@;
put 'OSkseWUoKSgpKSwyJmEmJihDZSg1KSxSZSgibmdNb2RlbCIsZC5jb2xsZWN0aW9uKSxDZSgxKSxSZSgibmdGb3JPZiIsWmwoNywxMSxkLmNvbGxlY3Rpb25zKSksQ2UoMiksUmUoIm5nSWYiLGQuZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYmIWQuY29sbGVjdGlvbkxvYWRpbmcpLENlKDIpLFJl'@;
put 'KCJuZ0lmIixkLmNvbGxlY3Rpb25Mb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5lbmRwb2ludExpbmtzLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5lbmRwb2ludExpbmtzKSxDZSgyKSxSZSgibmdJZiIsZC5lbmRwb2ludEl0ZW1zLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdGb3JP'@;
put 'ZiIsZC5lbmRwb2ludEl0ZW1zKSxDZSg3KSxSZSgibmdNb2RlbCIsZC5yYXdKc29uKSxDZSg3KSxSZSgibmdJZiIsZC5lbmRwb2ludExvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmNvbGxlY3Rpb24ubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxsMSxjMSxXYSxhRSxTMCxNMCxC'@;
put 'cyxPcyxkZCxnMSxrYSxadSxVcyxEMCxEOCxUMCxmMSxqRixOOCxIOCx1MixuMyxZdHQsZHgsR3R0LCR0dF0sc3R5bGVzOlsiLmFwaS1jb2xsZWN0aW9uLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxNXB4O21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1ib3R0b206'@;
put 'MTBweH0uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXt0ZXh0LWRlY29yYXRpb246bm9uZX0u'@;
put 'anNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+bmd4LWpzb24tdmlld2Vye2hlaWdodDoxMDAlfS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgID5uZ3gtanNvbi12aWV3ZXI+Lm5neC1qc29uLXZpZXdlcntvdmVyZmxvdzphdXRvfS5qc29uLXRvZ2dsZVtfbmdjb250ZW50'@;
put 'LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O21hcmdpbjowfS5lbmRwb2ludC1icmVhZGNydW1zW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDAgMTBweH0ucXVlcnktcGFyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3'@;
put 'aWR0aDo3MHB4fSJdfSksY30pKCk7Y29uc3QgZ250PW5ldyBTaSgiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0'@;
put 'IG1udD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IGJlLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29u'@;
put 'ZmlnPXt9fWNvbmZpZ3VyZShhKXt0aGlzLmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRoaXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlz'@;
put 'LnB1c2hDb3B5UmVzcG9uc2UoZD97Y29udGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBw'@;
put 'b3J0ZWQoImNvcHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZh'@;
put 'bGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChh'@;
put 'LGQ9ITApe3RyeXt0aGlzLnNlbGVjdFRhcmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vz'@;
put 'c0luSUUxMSgpe2NvbnN0IGE9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMu'@;
put 'dGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5h'@;
put 'cHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFy'@;
put 'ZWEsITEpO3JldHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0'@;
put 'aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4'@;
put 'ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7'@;
put 'bGV0IGY7cmV0dXJuIGY9YS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJy'@;
put 'aWdodCI6ImxlZnQiXT0iLTk5OTlweCIsZi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMu'@;
put 'bGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihMcyks'@;
put 'YXIoZ250LDgpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx2bnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0'@;
put 'aGlzLmNsaXBib2FyZFNydj1mLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IEVyLHRoaXMuY2JPbkVycm9yPW5ldyBFcix0aGlzLm9uQ2xpY2s9Xz0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMu'@;
put 'dGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsXyk6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlG'@;
put 'cm9tQ29udGVudCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsXyk6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLF8pfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVu'@;
put 'ZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVS'@;
put 'ZXN1bHQoYSxkLGgpe2xldCBmPXtpc1N1Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlz'@;
put 'LmNiT25FcnJvci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5vKSx0dChO'@;
put 'aSksdHQoRm8pLHR0KG1udCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06WyJuZ3hDbGlwYm9hcmQiLCJ0YXJnZXRFbG0iXSxjb250YWluZXI6ImNvbnRhaW5lciIsY2JDb250ZW50OiJjYkNvbnRl'@;
put 'bnQiLGNiU3VjY2Vzc01zZzoiY2JTdWNjZXNzTXNnIn0sb3V0cHV0czp7Y2JPblN1Y2Nlc3M6ImNiT25TdWNjZXNzIixjYk9uRXJyb3I6ImNiT25FcnJvciJ9fSksY30pKCksX250PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'fSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgpO3ZhciBibnQ9Rig1MTcxNCk7bGV0IHludD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLC4uLmQpe2NvbnN0IGg9cGFyc2VJbnQoZFswXSl8fDIsZj0ibnVtYmVyIiE9dHlwZW9m'@;
put 'IGE/cGFyc2VJbnQoYSk6YTtyZXR1cm4oMCxibnQuUikoZixoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToiY29udmVydFNpemUiLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7Y29uc3Qgd250PVsicXVlcnlG'@;
put 'aWx0ZXIiXTtmdW5jdGlvbiBDbnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDUwKSxxdCgxLCJjbHItc3Bpbm5lciIsNTEpLHllKCkpfWZ1bmN0aW9uIFNudChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDU4KX1mdW5jdGlvbiBNbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJj'@;
put 'bHItaWNvbiIsNTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixqdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIHhudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10'@;
put 'cmVlLW5vZGUiLDUyKSgxLCJkaXYiLDUzKSgyLCJpbnB1dCIsNTQsNTUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJpZXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9u'@;
put 'RmlsdGVyKCkpfSkseWUoKSxKZSg0LFNudCwxLDAsImNsci1pY29uIiw1NiksSmUoNSxNbnQsMSwwLCJjbHItaWNvbiIsNTcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEu'@;
put 'dmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gRW50KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNTgpfWZ1bmN0aW9uIGtudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw1OSkseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDIpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSkseWUoKX19ZnVuY3Rpb24gQW50KGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNTIpKDEsImRpdiIsNTMpKDIsImlucHV0Iiw2NCw2NSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0'@;
put 'KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSx5ZSgpLEplKDQsRW50LDEsMCwiY2xyLWljb24iLDU2KSxKZSg1LGtudCwxLDAsImNsci1pY29uIiw1NykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZl'@;
put 'KDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gVG50KGMsbCl7'@;
put 'MSZjJiZxdCgwLCJjbHItaWNvbiIsNzMpfWZ1bmN0aW9uIERudChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDc0KX1mdW5jdGlvbiBJbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDY5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgp'@;
put 'Lm5nVmFyLGY9VmUoKS4kaW1wbGljaXQsXz1WZSgyKS4kaW1wbGljaXQsVD1WZSgpO3JldHVybiBqdChoPyIiOlQub25UYWJsZUNsaWNrKGYsXykpfSksVnIoMSw3MCksSmUoMixUbnQsMSwwLCJjbHItaWNvbiIsNzEpLEplKDMsRG50LDEsMCwiY2xyLWljb24iLDcyKSx6cigpLE5lKDQpLHll'@;
put 'KCl9aWYoMiZjKXtjb25zdCBhPVZlKCkubmdWYXIsZD1WZSgpLiRpbXBsaWNpdCxoPVZlKDIpLiRpbXBsaWNpdCxmPVZlKCk7ZHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgidGFibGUtYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLENlKDEpLFJlKCJuZ1N3aXRjaCIs'@;
put 'ZC5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCEwKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMSksQ2UoMSksZ3IoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gTG50KGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiBUbyB1bmxv'@;
put 'Y2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLHllKCkpfWZ1bmN0aW9uIFJudChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc1KSxKZSgxLExudCwyLDAsInNwYW4iLDM4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5u'@;
put 'Z1ZhcjtDZSgxKSxSZSgibmdJZiIsYSl9fWZ1bmN0aW9uIE9udChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwIiksSmUoMSxJbnQsNSw4LCJidXR0b24iLDY3KSxKZSgyLFJudCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDY4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1w'@;
put 'bGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEubGVuZ3RoPjApfX1mdW5jdGlvbiBQbnQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiksSmUoMSxPbnQsMywxLCJjbHItdG9vbHRpcCIsNjYpLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9VmUoMyk7Q2UoMSksUmUoIm5nVmFy'@;
put 'IixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBGbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2MSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxp'@;
put 'Y2l0O3JldHVybiBqdChWZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsNjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLGp0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLHF0KDIsImNsci1pY29uIiw2MyksTmUoMykseWUoKSxKZSg0LEFudCw2LDQsImNsci10cmVlLW5vZGUiLDIpLEplKDUsUG50LDIs'@;
put 'MSwiY2xyLXRyZWUtbm9kZSIsMykseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7ZHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLGdy'@;
put 'KCIgIixhLkxJQlJBUllOQU1FLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVzKSxDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBIbnQoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLEZudCw2LDcsImNsci10cmVlLW5vZGUiLDYwKSx6cigpKSwyJmMpe2NvbnN0IGE9'@;
put 'bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBObnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDc2KSgxLCJzcGFuIiw3NyksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBWbnQoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9Vm4oKTttZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSgyLCJkaXYiLDgwKSgzLCJkaXYiLDgxKSg0LCJidXR0b24iLDgyKSxxdCg1LCJjbHItaWNvbiIsODMpLHllKCksbWUoNiwiaDMiLDQzKSxOZSg3LCJFcnJvciIpLHllKCkoKSxtZSg4LCJkaXYiLDEwKSg5LCJwIiksTmUoMTAs'@;
put 'IllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSx5ZSgpKCksbWUoMTEsImRpdiIsMjEpKDEyLCJidXR0b24iLDg0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxOZSgxMywiIE9rICIpLHllKCkoKSgpKCkoKX19'@;
put 'ZnVuY3Rpb24gQm50KGMsbCl7MSZjJiZxdCgwLCJkaXYiLDg1KX1mdW5jdGlvbiBqbnQoYyxsKXsxJmMmJnF0KDAsImFwcC1xdWVyeSIsbnVsbCw4Nil9ZnVuY3Rpb24gem50KGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw4NykoMSwic3BhbiIsODgpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCks'@;
put 'bWUoMywiZGl2IikoNCwiaDQiKSxOZSg1LCJMb2FkaW5nIHRhYmxlIHZpZXdlciIpLHllKCkoKSgpKX1mdW5jdGlvbiBVbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksVmUoKTtjb25zdCBoPSRpKDUp'@;
put 'O3JldHVybiBqdChWZSgyKS5zZWFyY2hUYWJsZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBabnQoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMTUpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIFludChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDExNil9ZnVuY3Rpb24gV250'@;
put 'KGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTE3KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksZ3IoIiAiLG51bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBHbnQoYyxsKXtpZigxJmMmJiht'@;
put 'ZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTgpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxncigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gJG50KGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLGJhKDIsInRob3VzYW5kU2VwYXJhdG9yIikseWUo'@;
put 'KSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDEpLHc1KCIgKCIsTTUoMiw0LGEubnVtYmVyT2ZSb3dzLCIsIiksIiAiLDE9PT1hLm51bWJlck9mUm93cz8icm93Ijoicm93cyIsIiwgIixhLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1hLmZpbHRlckNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMi'@;
put 'LCIpICIpfX1mdW5jdGlvbiBxbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxKZSgxLCRudCwzLDcsInNwYW4iLDM4KSxtZSgyLCJjbHItaWNvbiIsMTE5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnJlbG9hZFRhYmxlRGF0YSgpKX0pLHll'@;
put 'KCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLm51bWJlck9mUm93cyl9fWZ1bmN0aW9uIEtudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTI1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKDUpLmVkaXRUYWJsZSgpKX0pLHF0KDEsImNsci1pY29uIiwxMzIpLG1lKDIsInNwYW4iKSxOZSgzLCJFZGl0IikseWUoKSgpfX1mdW5jdGlvbiBYbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEyNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBC'@;
put 'dChhKSxqdChWZSg1KS5nb1RvTGluZWFnZSgpKX0pLHF0KDEsImNsci1pY29uIiwxMzMpLG1lKDIsInNwYW4iKSxOZSgzLCJMaW5lYWdlIikseWUoKSgpfX1mdW5jdGlvbiBKbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZHJvcGRvd24tbWVudSIsMTI0KSgxLCJidXR0'@;
put 'b24iLDEyNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5uZXdWaWV3Ym94KCkpfSkscXQoMiwiY2xyLWljb24iLDEyNiksbWUoMywic3BhbiIpLE5lKDQsIlZpZXdib3hlcyIpLHllKCkoKSxKZSg1LEtudCw0LDAsImJ1dHRvbiIsMTI3KSxKZSg2LFhudCw0'@;
put 'LDAsImJ1dHRvbiIsMTI3KSxtZSg3LCJidXR0b24iLDEyOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5vcGVuUWIoKSl9KSxxdCg4LCJjbHItaWNvbiIsMTI5KSxtZSg5LCJzcGFuIiksTmUoMTAsIkZpbHRlciIpLHllKCkoKSxtZSgxMSwiYnV0dG9uIiwx'@;
put 'MjUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkub3BlbkRvd25sb2FkPSEwKX0pLHF0KDEyLCJjbHItaWNvbiIsMTMwKSxtZSgxMywic3BhbiIpLE5lKDE0LCJEb3dubG9hZCIpLHllKCkoKSxtZSgxNSwiYnV0dG9uIiwxMjUpLHh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuc2hvd1dlYlF1ZXJ5KCkpfSkscXQoMTYsImNsci1pY29uIiwxMzEpLG1lKDE3LCJzcGFuIiksTmUoMTgsIldlYiBRdWVyeSBVUkwiKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoNSksUmUoIm5nSWYiLGEudGFibGVFZGl0RXhp'@;
put 'c3RzKCkpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxldXJpKX19ZnVuY3Rpb24gUW50KGMsbCl7MSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duIiwxMjApKDEsImJ1dHRvbiIsMTIxKSxxdCgyLCJjbHItaWNvbiIsMTIyKSxOZSgzLCIgb3B0aW9ucyAiKSx5ZSgpLEplKDQsSm50LDE5LDIsImNsci1k'@;
put 'cm9wZG93bi1tZW51IiwxMjMpLHllKCkpLDImYyYmUmUoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCl9ZnVuY3Rpb24gZXJ0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMzQpKDEsInNwYW4iKSxOZSgyLCJGSUxURVIgOiAiKSxtZSgzLCJiIiksTmUoNCkseWUoKSgpKCkpLDImYyl7'@;
put 'Y29uc3QgYT1WZSgzKTtDZSg0KSxvcihhLnF1ZXJ5VGV4dCl9fWNvbnN0IHRydD1mdW5jdGlvbigpe3JldHVyblsiIiwiICJdfTtmdW5jdGlvbiBucnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDk1KSgxLCJzZWN0aW9uIiw5NikoMiwiZm9ybSIsOTcpKDMsImRpdiIs'@;
put 'OTgpKDQsImlucHV0Iiw5OSwxMDApLHh0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPSRpKDUpO3JldHVybiBqdChWZSgyKS5zZWFyY2hUYWJsZShoKSl9KSx5ZSgpLEplKDYsVW50LDEsMCwiY2xyLWljb24iLDEwMSksSmUoNyxabnQsMiwwLCJzcGFuIiwxMDIpLHll'@;
put 'KCksbWUoOCwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDksImNsci1jaGVja2JveC13cmFwcGVyIikoMTAsImlucHV0IiwxMDMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc2VhcmNoTnVtZXJpYz1oKX0pLHllKCksbWUoMTEsImxhYmVs'@;
put 'IiksTmUoMTIsIk51bWVyaWMiKSx5ZSgpKCkoKSgpKCksbWUoMTMsImRpdiIsMTA0KSgxNCwiaDMiLDEwNSkoMTUsImNsci10b29sdGlwIiwxMDYpKDE2LCJjbHItaWNvbiIsMTA3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmRhdGFzZXRJbmZvPSEwKX0p'@;
put 'LHllKCksSmUoMTcsWW50LDEsMCwiY2xyLWljb24iLDEwOCksSmUoMTgsV250LDIsMSwic3BhbiIsMTA5KSxKZSgxOSxHbnQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTApLHllKCksSmUoMjAscW50LDMsMSwibmctY29udGFpbmVyIiwzOCkseWUoKSgpLG1lKDIxLCJkaXYiLDExMSks'@;
put 'SmUoMjIsUW50LDUsMSwiY2xyLWRyb3Bkb3duIiwxMTIpLHllKCksSmUoMjMsZXJ0LDUsMSwiZGl2IiwxMTMpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDQpLFJlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxDZSgyKSxSZSgibmdJZiIsIWEuc2VhcmNo'@;
put 'TG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksQ2UoMyksUmUoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksQ2UoNyksUmUoIm5nSWYiLG51bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ0lmIixh'@;
put 'LnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksQ2UoMiksUmUoIm5nSWYiLGEudGFibGVUaXRsZSYmYS50YWJsZVRpdGxlLmxlbmd0aD4wKSxDZSgyKSxSZSgibmdJZiIsYS50YWJsZVRpdGxlJiYhYS5hYm9ydEFjdGl2ZSksQ2UoMSksUmUoIm5nSWYiLCIxPTEiIT09YS5xdWVy'@;
put 'eVRleHQmJiEkcyg5LHRydCkuaW5jbHVkZXMoYS5xdWVyeVRleHQpJiYhYS5hYm9ydEFjdGl2ZSl9fWZ1bmN0aW9uIHJydChjLGwpezEmYyYmKG1lKDAsImRpdiIsMTM1KSxxdCgxLCJjbHItaWNvbiIsMTM2KSxtZSgyLCJoMyIsMTM3KSxOZSgzLCJQbGVhc2Ugc2VsZWN0IGEgbGlicmFyeSIp'@;
put 'LHllKCkoKSl9ZnVuY3Rpb24gaXJ0KGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsNTEpfWZ1bmN0aW9uIG9ydChjLGwpezEmYyYmKG1lKDAsImRpdiIsMTQ1KSxxdCgxLCJjbHItaWNvbiIsMTQ2KSxtZSgyLCJoMyIsMTM3KSxOZSgzLCJQbGVhc2Ugc2VsZWN0IGEgdGFibGUiKSx5ZSgp'@;
put 'KCkpfWZ1bmN0aW9uIHNydChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInAiLDE0OSksTmUoMSwiIE5vIGxpYnJhcnkgaW5mbyBmb3VuZC4gQ2xpY2sgIiksbWUoMiwiY2xyLWljb24iLDE1MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5yZWxv'@;
put 'YWRMaWJJbmZvKCkpfSkseWUoKSxOZSgzLCIgYnV0dG9uIHRvIHJlZnJlc2guICIpLHllKCl9fWZ1bmN0aW9uIGFydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE1MSksTmUoMiwiRU5HSU5FOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0'@;
put 'IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uRU5HSU5FOiIiLCIgIil9fWZ1bmN0aW9uIGxydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE1MSksTmUoMiwiTElCSUQ6IikseWUoKSxtZSgzLCJ0ZCIsMTUyKSxOZSg0KSx5ZSgpKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1mdW5jdGlvbiBjcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE5lKDIsIkxJQk5BTUU6IikseWUoKSxtZSgzLCJ0ZCIsMTUyKSxOZSg0KSx5'@;
put 'ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJOQU1FOiIiLCIgIil9fWZ1bmN0aW9uIHVydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE1MSksTmUoMiwiTElCU0laRToiKSx5ZSgpLG1lKDMsInRkIiwx'@;
put 'NTIpLE5lKDQpLGJhKDUsImNvbnZlcnRTaXplIikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9abCg1LDEsYS5saWJpbmZvWzBdLkxJQlNJWkUpOiIiLCIgIil9fWZ1bmN0aW9uIGRydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQi'@;
put 'LDE1MSksTmUoMiwiT1dORVJTOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uT1dORVJTOiIiLCIgIil9fWZ1bmN0aW9uIGhydChjLGwpe2lmKDEmYyYmKG1lKDAsInRy'@;
put 'IikoMSwidGQiLDE1MSksTmUoMiwiUEFUSFM6IikseWUoKSxtZSgzLCJ0ZCIsMTUyKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5QQVRIUzoiIiwiICIpfX1mdW5jdGlvbiBmcnQoYyxsKXtpZigxJmMmJiht'@;
put 'ZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE5lKDIsIlBFUk1TOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEVSTVM6IiIsIiAiKX19ZnVuY3Rpb24gcHJ0KGMsbCl7aWYo'@;
put 'MSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJTQ0hFTUFTOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uU0NIRU1BUzoiIiwiICIpfX1mdW5jdGlvbiBn'@;
put 'cnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE5lKDIsIlRBQkxFX0NOVDoiKSx5ZSgpLG1lKDMsInRkIiwxNTIpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlRBQkxFX0NOVDoiIiwi'@;
put 'ICIpfX1mdW5jdGlvbiBtcnQoYyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJ0YWJsZSIpLEplKDIsYXJ0LDUsMSwidHIiLDM4KSxKZSgzLGxydCw1LDEsInRyIiwzOCksSmUoNCxjcnQsNSwxLCJ0ciIsMzgpLEplKDUsdXJ0LDYsMywidHIiLDM4KSxKZSg2LGRydCw1LDEsInRyIiwzOCksSmUo'@;
put 'NyxocnQsNSwxLCJ0ciIsMzgpLEplKDgsZnJ0LDUsMSwidHIiLDM4KSxKZSg5LHBydCw1LDEsInRyIiwzOCksSmUoMTAsZ3J0LDUsMSwidHIiLDM4KSx5ZSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgyKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uRU5HSU5FKSxDZSgxKSxS'@;
put 'ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCSUQpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJOQU1FKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5MSUJTSVpFKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uT1dORVJTKSxD'@;
put 'ZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEFUSFMpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QRVJNUyksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlNDSEVNQVMpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBdLlRBQkxF'@;
put 'X0NOVCl9fWZ1bmN0aW9uIHZydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTQ3KSxKZSgxLHNydCw0LDAsInAiLDE0OCksSmUoMixtcnQsMTEsOSwibmctY29udGFpbmVyIiwzOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPDEp'@;
put 'LENlKDEpLFJlKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPjApfX1mdW5jdGlvbiBfcnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDEzOCkscXQoMiwic2VjdGlvbiIsOTYpLG1lKDMsImRpdiIsMTM5KSg0LCJoMyIsMTQwKSxOZSg1KSx5ZSgpLG1lKDYsImNs'@;
put 'ci1pY29uIiwxMTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikucmVsb2FkTGliSW5mbygpKX0pLHllKCkoKSxxdCg3LCJkaXYiLDExMSkseWUoKSxtZSg4LCJkaXYiLDE0MSksSmUoOSxpcnQsMSwwLCJjbHItc3Bpbm5lciIsMTQyKSx5ZSgpLEplKDEwLG9y'@;
put 'dCw0LDAsImRpdiIsMTQzKSxKZSgxMSx2cnQsMywyLCJkaXYiLDE0NCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNSksZ3IoIiAiLGEubGliLCIgIiksQ2UoNCksUmUoIm5nSWYiLG51bGw9PT1hLmxpYmluZm8pLENlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvKSxDZSgx'@;
put 'KSxSZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyl9fWZ1bmN0aW9uIGJydChjLGwpezEmYyYmKG1lKDAsImgzIiwxMzcpLE5lKDEsIiBObyBkYXRhIGZvdW5kIHdpdGggZ2l2ZW4gY29uZGl0aW9ucyAiKSx5ZSgpKX1mdW5jdGlvbiB5cnQoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTM3KSxOZSgx'@;
put 'LCIgTm8gZGF0YSBmb3VuZCBkdWUgdG8gc2FzIHJlcXVlc3QgZXJyb3IgIikseWUoKSl9ZnVuY3Rpb24gd3J0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNTMpLHF0KDEsImNsci1pY29uIiwxNTQpLEplKDIsYnJ0LDIsMCwiaDMiLDE1NSksSmUoMyx5cnQsMiwwLCJoMyIsMTU1KSx5ZSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksUmUoIm5nSWYiLGEubm9EYXRhKSxDZSgxKSxSZSgibmdJZiIsYS5ub0RhdGFSZXFFcnIpfX1mdW5jdGlvbiBDcnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE1NikscXQoMSwiaG90LXRhYmxlIiwxNTcpLHllKCkpLDImYyl7Y29uc3QgYT1W'@;
put 'ZSgyKTtDZSgxKSxSZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGEuaG90VGFibGUuY29sdW1ucykoImNv'@;
put 'cHlQYXN0ZSIsYS5ob3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsYS5ob3RUYWJsZS5jb250ZXh0TWVudSkoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixhLmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJtb2RpZnlDb2xXaWR0'@;
put 'aCIsYS5tYXhXaWR0aENoZWtlcikoImNlbGxzIixhLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoInJvd0hlYWRlcnMiLGEuaG90VGFibGUucm93SGVhZGVycykoInJvd0hlYWRlcldpZHRoIixhLmhvdFRhYmxl'@;
put 'LnJvd0hlYWRlcldpZHRoKSgicm93SGVpZ2h0cyIsYS5ob3RUYWJsZS5yb3dIZWlnaHRzKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24gU3J0KGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMTU4KSxOZSgxKSxxdCgyLCJjb250YWN0LWxpbmsiKSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksZ3IoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQsIiByb3dzLCBjb250YWN0ICIpfX1mdW5jdGlvbiBNcnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDg5KSxKZSgxLG5ydCwy'@;
put 'NCwxMCwiZGl2Iiw5MCksSmUoMixycnQsNCwwLCJkaXYiLDkxKSxKZSgzLF9ydCwxMiw0LCJuZy1jb250YWluZXIiLDM4KSxKZSg0LHdydCw0LDIsImRpdiIsOTIpLEplKDUsQ3J0LDIsMTgsImRpdiIsOTMpLG1lKDYsImRpdiIpLEplKDcsU3J0LDMsMSwicCIsOTQpLHllKCkoKSksMiZjKXtj'@;
put 'b25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEudGFibGUpLENlKDEpLFJlKCJuZ0lmIiwhKGEubGlifHxhLnRhYmxlfHxhLm5vRGF0YVJlcUVycnx8YS5ub0RhdGEpKSxDZSgxKSxSZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJiFhLnRhYmxlJiZhLmxpYiksQ2UoMSks'@;
put 'UmUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciksQ2UoMSksUmUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiZhLnRhYmxlKSxDZSgyKSxSZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkmJmEuaG90'@;
put 'VGFibGUuZGF0YSYmYS5ob3RUYWJsZS5kYXRhLmxlbmd0aD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19bGV0IEhUPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxwZSx3ZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2Fz'@;
put 'U3RvcmVTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnJvdXRlPV8sdGhpcy5ldmVudFNlcnZpY2U9VCx0aGlzLmxvZ2dlclNlcnZpY2U9Vyx0aGlzLmhlbHBlclNlcnZpY2U9aWUsdGhpcy5sb2NhdGlvbj1wZSx0aGlzLmNkZj13ZSx0aGlzLnF1ZXJ5Rmls'@;
put 'dGVyQ29tcExpc3Q9bmV3IGVoLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlzLmxpYmluZm89bnVsbCx0aGlzLnRhYmxldXJpPW51bGwsdGhpcy5m'@;
put 'aWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmFib3J0QWN0aXZlPSExLHRoaXMudXJsRmlsdGVyUGs9bnVsbCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRoaXMudGFibGVGbGFnPSEw'@;
put 'LHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9ITEsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMubm9EYXRhPSExLHRoaXMubm9EYXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLm9wZW5Eb3dubG9h'@;
put 'ZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5kb3dubG9hZEZvcm1hdD0iQ1NWIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEsdGhpcy5zZWFyY2hOdW1lcmljPSExLHRoaXMubnVtYmVyT2ZSb3dz'@;
put 'PW51bGwsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8w'@;
put 'LHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGluZ3M6e30sYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vuc2VL'@;
put 'ZXk6dm9pZCAwLHJvd0hlYWRlcnM6RWU9PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjIwLGNvbnRleHRNZW51OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVyc19vbmx5Il0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5'@;
put 'Q29sdW1uSGVhZGVyc09ubHk6ITB9LGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVy'@;
put 'OihFZSxaZSxpdCxldCx5dCxFdCk9Pntjb25zdCBTdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IEp0LG5uPSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCB2bj10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLE5uPXZuP3ZuWzBd'@;
put 'WzFdOi0xLGNyPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChObik7SnQ9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbY3JdLEp0JiYobm49YExBQkVMOiAke0p0Py5sYWJlbH08YnI+VFlQRTogJHtKdD8udHlwZX08YnI+TEVOR1RIOiAke0p0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHtKdD8u'@;
put 'Zm9ybWF0fWApfXJldHVybiBTdC5pbm5lckhUTUw9bm4sU3R9fX19fSx0aGlzLmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITEsdGhpcy52aWV3Ym94T3Blbj0hMSx0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgQWcsdGhpcy5zYXNqc0NvbmZpZz10'@;
put 'aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1uZ09uSW5pdCgpeyIiIT09R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb24mJjA9PT1PYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcykubGVuZ3RoJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbR24udmlld2VyLmN1cnJl'@;
put 'bnRTZWxlY3Rpb25dLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSx2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0mJihHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9kYXRhIiksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9r'@;
put 'ZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlLmxpY2Vuc2VLZXk9YX0pfW5ld1ZpZXdib3goKXt0aGlzLnZpZXdib3hPcGVuPSEwfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0'@;
put 'ZXIoKX1zZWFyY2hUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGg9YS52YWx1ZSxmPWQubGliKyIuIitkLnRhYmxlLF89cGFyc2VJbnQoZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpfHwwO3lpZWxkIGQuc2Fz'@;
put 'U3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGgsZC5zZWFyY2hOdW1lcmljLGYsXykudGhlbihUPT57VC5zYXNwYXJhbXN8fFQudmlld0RhdGE/KGQuaG90VGFibGUuZGF0YT1ULnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPVQuJHZpZXdkYXRhLGQuZHNtZXRhPVQuZHNtZXRhLGQuc2V0RFNO'@;
put 'b3RlKCksZC5udW1iZXJPZlJvd3M9VC5zYXNwYXJhbXNbMF0uTk9CUyxkLnF1ZXJ5VGV4dD1ULnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxkLmhlYWRlclBrcz1ULnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxlbmd0aD9kLm5vRGF0YT0h'@;
put 'MDooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEsZC5zZXR1cEhvdCgpKSk6ZC5zZWFyY2hMb2FkaW5nPSExfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKX0pLGQuc2VhcmNoTG9hZGluZz0hMX0pKCl9cmVsb2FkVGFibGVEYXRhKCl7dGhpcy52aWV3RGF0YSh0aGlzLnVy'@;
put 'bEZpbHRlclBrfHwwKX1yZWxvYWRMaWJJbmZvKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5saWJpbmZvPW51bGwsYS5zYXNTdG9yZVNlcnZpY2UucmVmcmVzaExpYkluZm8oYS5saWIpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1maShmdW5jdGlvbiooaCl7YS5saWJpbmZv'@;
put 'PWgubGliaW5mbyxHbi52aWV3ZXIubGliaW5mbz1hLmxpYmluZm87Y29uc3QgZj1hLmxpYnJhcmllcy5maW5kKF89Pl8uTElCUkFSWVJFRj09PWEubGliKTtmJiYoZi5saWJpbmZvPWEubGliaW5mbyl9KTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMp'@;
put 'fX0oKSxkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLG51bGw9PT1hLmxpYmluZm8mJihhLmxpYmluZm89W10pfSl9KSgpfWZpbHRlckZuKGEpe3RoaXMubGlicmFyaWVzPXRoaXMubGlicmFyaWVzLmZpbHRlcihoPT4tMSE9PWguTElCUkFSWU5BTUUudG9Mb3dlckNhc2UoKS5pbmRleE9m'@;
put 'KGEudG9Mb2NhbGVMb3dlckNhc2UoKSkpfWRvd25sb2FkRGF0YSgpe2xldCBhPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLGQ9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBXLGY9IiZ0eXBlPSIrdGhpcy5k'@;
put 'b3dubG9hZEZvcm1hdCxfPSImdGFibGU9Iit0aGlzLnRhYmxlVGl0bGUsVD0iU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiI7Vz10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hvdC5w'@;
put 'YXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpLHdpbmRvdy5vcGVuKGEraCsiLz9fcHJvZ3JhbT0iK2QrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSIrZitfK1QrIiZmaWx0ZXI9IitXKSx0aGlzLm9wZW5Eb3dubG9h'@;
put 'ZD0hMX1kb3dubG9hZERETCgpe2xldCBhPXRoaXMubGliLGQ9dGhpcy50YWJsZSxoPXRoaXMuZG93bmxvYWRGb3JtYXQucmVwbGFjZSgiX0RETCIsIiIpLGY9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsXz10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBUPXRoaXMuc2FzU2Vydmlj'@;
put 'ZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZitUKyIvP19wcm9ncmFtPSIrXysiL3NlcnZpY2VzL3B1YmxpYy9nZXRkZGwiK2AmZHM9JHtkfSZsaWJyZWY9JHthfSZmbGF2b3VyPSR7aH0keyJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0'@;
put 'bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIn1gKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1vbkNsaUNvbW1hbmRGb2N1cyhhKXthLnByZXZlbnREZWZhdWx0KCksYS50YXJnZXQuc2VsZWN0KCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2Vk'@;
put 'aXRvci8iK3RoaXMubGliVGFiKX10YWJsZUVkaXRFeGlzdHMoKXtsZXQgYT17fTthPUduLmVkaXRvci5saWJzQW5kVGFibGVzO2xldCBkPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMV0saD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzBdO3JldHVybiEhYVtoXSYmYVtoXS5pbmNsdWRlcyhkKX1n'@;
put 'b1RvTGluZWFnZSgpe2xldCBkPWAvdmlldy9saW5lYWdlLyR7dGhpcy50YWJsZXVyaS5zcGxpdCgiXFwiKVsxXX0vUkVWRVJTRWA7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChkKX1zaG93V2ViUXVlcnkoKXtsZXQgYTt0aGlzLndlYlF1ZXJ5PSEwLGE9dHlwZW9mIHRoaXMucm91dGUuc25h'@;
put 'cHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKTtsZXQgZD13aW5kb3cubG9jYXRpb24ucG9ydC5sZW5ndGg+MD8iOiIrd2luZG93LmxvY2F0aW9uLnBvcnQ6IiI7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0'@;
put 'RXhlY3V0aW9uUGF0aCgpO2xldCBfPWAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSR7ZH0vJHtofS8/X3Byb2dyYW09JHt0aGlzLnNhc2pzQ29uZmlnLmFwcExvY30vc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEmdHlwZT1XRUIke3Ro'@;
put 'aXMud2ViUXVlcnlUYWI/IlRBQiI6IkNTViJ9JnRhYmxlPSR7dGhpcy50YWJsZVRpdGxlfSR7IiZmaWx0ZXI9IithfWA7dGhpcy53ZWJRdWVyeVRleHQ9Xy5yZXBsYWNlKC8gL2dpbSwiJTIwIil9Y29weVRvQ2xpcCgpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7'@;
put 'YS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGEuc3R5bGUubGVmdD0iMCIsYS5zdHlsZS50b3A9IjAiLGEuc3R5bGUub3BhY2l0eT0iMCIsYS52YWx1ZT10aGlzLndlYlF1ZXJ5VGV4dCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuZm9jdXMoKSxhLnNlbGVjdCgpLGRvY3VtZW50LmV4'@;
put 'ZWNDb21tYW5kKCJjb3B5IiksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31jaGVja0V4cGFuZChhKXt9'@;
put 'Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWVJFRiE9PWQuTElCUkFSWVJFRiYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVy'@;
put 'U2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyaWVzLCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxp'@;
put 'YnJhcnlFeHBhbmRlZENoYW5nZShhLGQpe2EmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGQudGFibGVzP2QuZXhwYW5kZWQ9ISFofHwhZC5leHBhbmRl'@;
put 'ZDp5aWVsZCBmLnNlbGVjdFRhYmxlKGEsITEsZCksZC5leHBhbmRlZCl7Zi5jZGYuZGV0ZWN0Q2hhbmdlcygpO2xldCBfPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNzZWFyY2hfJHtkLkxJQlJBUllSRUZ9YCk7Zi5sb2dnZXJTZXJ2aWNlLmxvZygiW2xpYlRyZWVTZWFyY2hJbnB1dF0iLF8p'@;
put 'LF8mJl8uZm9jdXMoKSxkJiZkLmxpYmluZm8mJihmLmxpYmluZm89ZC5saWJpbmZvKSxmLmxpYiYmZi50YWJsZSYmIWg/Zi5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVuKCgp'@;
put 'PT57Zi5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrZi5saWJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pOmYubGliJiYhZi50YWJsZSYmZi5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L2RhdGEvIitmLmxpYil9Zi5jb2xsYXBzZUxpYnJhcnlJdGVtcyhm'@;
put 'LmxpYnJhcmllcyxkKX0pKCl9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMudGFibGU9YSx0aGlzLnNlbGVjdExpYlRhYmxlKGEpLHRoaXMudmlld0RhdGEoMCl9c2VsZWN0VGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2gu'@;
put 'bG9hZGluZ1RhYmxlcz0hMCxmLnRhYmxlPSExLGYudGFibGVEaXNhYmxlPSEwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YT9Hbi52aWV3ZXIudGFibGVzU2V0JiZkPyhmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExLGYudGFibGVzPUduLnZpZXdlci50YWJsZXMsZi5saWJp'@;
put 'bmZvPUduLnZpZXdlci5saWJpbmZvKTooZi5saWJpbmZvPW51bGwseWllbGQgZi5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKF89PntmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExO2xldCBUPV8ubXB0YWJsZXMubWFwKGZ1bmN0aW9uKFcpe3JldHVybiBXLk1F'@;
put 'TU5BTUV9KTtmLmxpYmluZm89Xy5saWJpbmZvfHxbXSxmLnRhYmxlcz1ULGgmJihoLnRhYmxlcz1ULGgubGliaW5mbz1mLmxpYmluZm8pLEduLnZpZXdlci5saWJyYXJpZXM9Zi5saWJyYXJpZXMsR24udmlld2VyLmxpYnJhcnk9Zi5saWIsR24udmlld2VyLnRhYmxlcz1mLnRhYmxlcyxHbi52'@;
put 'aWV3ZXIubGliaW5mbz1mLmxpYmluZm8sR24udmlld2VyLnRhYmxlc1NldD0hMH0pLmNhdGNoKF89PntmLmxvZ2dlclNlcnZpY2UuZXJyb3IoXyksZi5hYm9ydEFjdGl2ZT0hMCxmLm5vRGF0YT0hMCxmLnRhYmxlVGl0bGU9IiIsZi50YWJsZURpc2FibGU9ITB9KSk6Zi50YWJsZURpc2FibGU9'@;
put 'ITAsR24udmlld2VyLmxpYnJhcnk9Zi5saWIsZHx8Zi5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0haC5leHBhbmRlZH0pKCl9c2VsZWN0TGliVGFibGUoYSxkKXsiUGxlYXNlIHNlbGVjdCB0YWJsZSIhPT1hPyh0aGlzLmFjdGlvbkRpc2FibGU9'@;
put 'ITEsdGhpcy5saWJUYWI9dGhpcy5saWIrIi4iK3RoaXMudGFibGUpOnRoaXMuYWN0aW9uRGlzYWJsZT0hMCxHbi52aWV3ZXIudGFibGU9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5saWJUYWIpfWNsZWFyR2xvYmFsc0ZpbHRlcigp'@;
put 'e0duLnZpZXdlci5maWx0ZXIubGliZHM9IiIsR24udmlld2VyLmZpbHRlci53aGVyZUNsYXVzZT0iIixHbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIsR24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEduLnZpZXdlci5maWx0ZXIuY29scz1bXSxHbi52aWV3ZXIuZmlsdGVyLnZhbHM9'@;
put 'W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISF0aGlzLmxpYlRhYiYmYSsiLiIrZD09PXRoaXMubGliVGFifXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9u'@;
put 'RmlsdGVyKHRoaXMubGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEduLnZpZXdlci5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGlicmFyeVJlc2V0RmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnJlc2V0QXJyYXlGaWx0ZXIodGhp'@;
put 'cy5saWJyYXJpZXMpfXZpZXdEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBoO2lmKGQubG9hZGluZ1RhYmxlVmlldz0hMCx0eXBlb2YgZC5saWJEYXRhc2V0PiJ1IiloPWQubGliKyIuIitkLnRhYmxlO2Vsc2UgaWYodHlwZW9mIGQubGliPiJ1IiYmdHlwZW9m'@;
put 'IGQudGFibGU+InUiKXtsZXQgVD1bXTtpZihUPWQubGliRGF0YXNldC5zcGxpdCgiLiIpLEduLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKFc9PntkLmxpYnJhcmllcz1XLnNh'@;
put 'c2xpYnN9KS5jYXRjaChXPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFcpfSksZC5saWI9VFswXSxHbi52aWV3ZXIuc3RhcnR1cFNldClkLnRhYmxlcz1Hbi52aWV3ZXIudGFibGVzO2Vsc2V7bGV0IFc9ZC5saWJyYXJpZXMuZmluZChpZT0+aWUuTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09'@;
put 'ZC5saWIudG9Mb3dlckNhc2UoKSk7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihpZT0+e2QudGFibGVzPWllLm1wdGFibGVzLm1hcChmdW5jdGlvbihwZSl7cmV0dXJuIHBlLk1FTU5BTUV9KSxXLnRhYmxlcz1kLnRhYmxlcyxHbi52aWV3ZXIubGlicmFy'@;
put 'aWVzPWQubGlicmFyaWVzLEduLnZpZXdlci50YWJsZXM9ZC50YWJsZXMsR24udmlld2VyLnN0YXJ0dXBTZXQ9ITB9KS5jYXRjaChpZT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihpZSl9KX1kLnRhYmxlPVRbMV0sZC50YWJsZUZsYWc9ITEsaD1kLmxpYkRhdGFzZXQsZC5saWJUYWI9aH1lbHNl'@;
put 'IEduLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKFQ9PntkLmxpYnJhcmllcz1ULnNhc2xpYnN9KS5jYXRjaChUPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpfSksdHlwZW9m'@;
put 'IGQudGFibGU8InUiJiYoR24udmlld2VyLnN0YXJ0dXBTZXQ/ZC50YWJsZXM9R24udmlld2VyLnRhYmxlczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKFQ9PntkLnRhYmxlcz1ULm1wdGFibGVzLm1hcChmdW5jdGlvbihXKXtyZXR1cm4gVy5NRU1OQU1F'@;
put 'fSl9KS5jYXRjaChUPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpLGQucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pLGQudGFibGVGbGFnPSExLGg9ZC5saWIrIi4iK2QudGFibGUsZC50YWJsZVRpdGxlPWgsZC5saWJU'@;
put 'YWI9aCk7ZC5yb3V0ZXIudXJsLnNwbGl0KCIvIikubGVuZ3RoPjMmJmgmJih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShoLGEpLnRoZW4oVD0+e2lmKFQucXVlcnkubGVuZ3RoPjAmJiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmMD09PUduLnZpZXdlci5maWx0ZXIuY2xhdXNlcy5s'@;
put 'ZW5ndGgmJihHbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PWQuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVC5xdWVyeSksR24udmlld2VyLmZpbHRlci5saWJkcz1kLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sZC5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVz'@;
put 'ZSgidmlld2VyIixULmNvbHMpKSxkLmFib3J0QWN0aXZlPSExLGQuZmlsdGVyQ29scz1ULmNvbHMsenooZC5maWx0ZXJDb2xzLFtdLFQuJHZpZXdkYXRhKSxkLm51bWJlck9mUm93cz1ULnNhc3BhcmFtc1swXS5OT0JTLGQuaGVhZGVyUGtzPVQuc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxp'@;
put 'dCgiICIpLCJTQVM5Ij09PWQuc2FzanNDb25maWcuc2VydmVyVHlwZSl7bGV0IEVlPVQuc2FzcGFyYW1zWzBdLlRBQkxFVVJJO0VlJiZFZS5sZW5ndGg+MCYmKGQudGFibGV1cmk9RWUpfWQuaG90VGFibGUuZGF0YT1ULnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPVQuJHZpZXdkYXRhLGQuZHNt'@;
put 'ZXRhPVQuZHNtZXRhLGQuc2V0RFNOb3RlKCksZC5xdWVyeVRleHQ9VC5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQ7bGV0IFc9W10saWU9W107Zm9yKGxldCBFZSBpbiBULnZpZXdkYXRhWzBdKUVlJiZpZS5wdXNoKEVlKTtmb3IobGV0IEVlPTA7RWU8aWUubGVuZ3RoO0VlKyspVy5wdXNoKHtk'@;
put 'YXRhOmllW0VlXX0pO2QuaG90VGFibGUuY29sSGVhZGVycz1pZSxkLmhvdFRhYmxlLmNvbHVtbnM9VyxkLmhvdFRhYmxlLmNlbGxzPWZ1bmN0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX0sZC50YWJsZUZsYWc9ITE7bGV0IHdlPVtdO3dlPWguc3BsaXQoIi4iKSxkLmxpYj13ZVswXSxkLnRh'@;
put 'YmxlPXdlWzFdLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoPyhkLm5vRGF0YT0hMCxkLnRhYmxlRmxhZz0hMCk6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSExKSxkLm5vRGF0YVJlcUVycj0hMX0pLmNhdGNoKFQ9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCksZC5hYm9ydEFjdGl2ZT0h'@;
put 'MCxkLm5vRGF0YVJlcUVycj0hMH0pKSxkLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJmgmJmQucm91dGVyLm5hdmlnYXRlKDAhPT1hP1siL3ZpZXcvZGF0YS8iK2grIi8iK2FdOlsiL3ZpZXcvZGF0YS8iK2hdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtsZXQgZj1k'@;
put 'LnRhYmxlLF89ZC5saWJyYXJpZXMuZmluZChUPT5ULkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO18/KEduLnZpZXdlci5saWJyYXJpZXMubGVuZ3RoPjAmJihkLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzLGQubGlicmFyaWVzU2VhcmNoPUdu'@;
put 'LnZpZXdlci5saWJyYXJpZXNTZWFyY2gpLGQubGlicmFyeU9uQ2xpY2soZC5saWIsXywhMCkpOmQubGliaW5mbz1bXSxkLnRhYmxlPWZ8fGQudGFibGUsZC5saWJyYXJpZXMmJmQuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGQubGlicmFyaWVzKSxkLnJvdXRlci51cmwuaW5jbHVk'@;
put 'ZXMoIi9kYXRhIikmJmQuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGQubG9hZGluZ1RhYmxlVmlldz0hMSwhZC5ub0RhdGEmJiFkLm5vRGF0YVJlcUVyciYmaCYmZC5zZXR1cEhvdCgpLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyfHxzZXRUaW1lb3V0KCgpPT57bGV0IFQ9ZG9jdW1l'@;
put 'bnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7VCYmKFQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixXPT57c2V0VGltZW91dCgoKT0+e2xldCBpZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO2llJiZpZS5jbGljaygpfSwx'@;
put 'MDApfSksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITApfSwyZTMpfSkoKX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1vcGVuUWIoKXt0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlW'@;
put 'YXJpYWJsZXModGhpcy5saWIrIi4iK3RoaXMudGFibGUsdGhpcy5maWx0ZXJDb2xzKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdLGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVs'@;
put 'bFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2xldCBmPWEuY2xhdXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRzLmxlbmd0aDwxKXJldHVybiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmKEduLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxHbi52aWV3ZXIuZmlsdGVy'@;
put 'LnF1ZXJ5PVtdLEduLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZltfXS5l'@;
put 'bGVtZW50cztkPVQuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiBudWxsPT09Vy52YXJpYWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goVCl9fWlmKGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tjb25zdCBmPXtncm91cExvZ2ljOmEu'@;
put 'Y2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goVD0+e2NvbnN0IFc9e2ZpbHRlckNsYXVzZXM6W119O1QuZWxlbWVudHMuZm9yRWFjaChpZT0+e1cuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUo'@;
put 'aWUpKX0pLFcuY2xhdXNlTG9naWM9VC5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVykpfSk7Y29uc3QgXz1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNh'@;
put 'dmVRdWVyeShhLmxpYmRzLF8pLnRoZW4oVD0+e2EucXVlcnlUZXh0PVQucmVzdWx0WzBdLkZJTFRFUl9URVhUO2xldCBXPVQucmVzdWx0WzBdLkZJTFRFUl9SSzthLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzKyIvIitXXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJl'@;
put 'c2VydmUifSksYS52aWV3RGF0YShXKSxhLmZpbHRlcj0hMX0pLmNhdGNoKFQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCl9KSxhLnN1Ym1pdExvYWRpbmc9ITF9fSkoKX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfXNldERTTm90ZSgpe2NvbnN0'@;
put 'IGE9dGhpcy5kc21ldGEuZmluZChmPT4iTk9URVMiPT09Zi5OQU1FKSxkPXRoaXMuZHNtZXRhLmZpbmQoZj0+IkREX0xPTkdERVNDIj09PWYuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9TSE9SVERFU0MiPT09Zi5OQU1FKTt0aGlzLmRzTm90ZT1hJiZhLlZBTFVFP2EuVkFMVUU6'@;
put 'ZCYmZC5WQUxVRT9kLlZBTFVFOmgmJmguVkFMVUU/aC5WQUxVRToiIn1zZXR1cEhvdCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5sb2FkaW5nVGFibGVWaWV3JiZ0aGlzLmxpYkRhdGFzZXQmJih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJo'@;
put 'b3RJbnN0YW5jZSIpLHRoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2hlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihhLGQpe3JldHVybiBhPjUwMD81MDA6YX0sYWZ0ZXJHZXRDb2xIZWFkZXI6KGEsZCk9'@;
put 'Pntjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChhKTtoJiZ0aGlzLmhlYWRlclBrcy5pbmRleE9mKGgpPi0xJiZkLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpfX0pKX0sMWUzKX1sb2FkV2l0aFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBm'@;
put 'aShmdW5jdGlvbiooKXthLnN3aXRjaEZsYWc9ITAsYS50YWJsZVRpdGxlPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbXx8MCxhLnVybEZpbHRlclBrPXBhcnNlSW50KGEucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkfHwiMCIpO2xldCBoPWEucm91dGUuc25hcHNob3QucGFy'@;
put 'YW1zLmxpYk1lbTthLmxpYkRhdGFzZXQ9aCxoLmluY2x1ZGVzKCIuIil8fChhLmxpYj1oKSx5aWVsZCBhLnZpZXdEYXRhKGEudXJsRmlsdGVyUGspLGEubm9EYXRhP3NldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMH0sMTIwMCk6c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSExfSwx'@;
put 'MjAwKX0pKCl9bG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSExLGEubGlicmFyaWVzTG9hZGluZz0hMCxHbi52aWV3ZXIuc3RhcnR1cFNldD9zZXRUaW1lb3V0KCgpPT57YS5saWJyYXJpZXM9R24udmlld2VyLmxp'@;
put 'YnJhcmllcyxhLmxpYnJhcmllc1NlYXJjaD1Hbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoLGEubGliPUduLnZpZXdlci5saWJyYXJ5LGEubGlicmFyaWVzVHJlZUV4cGFuZGVkPSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJh'@;
put 'cmllcyl9LDEwMCk6KGEubm9EYXRhUmVxRXJyPSExLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57YS5saWJyYXJpZXM9ZC5zYXNsaWJzLEduLnZpZXdlci5saWJyYXJpZXM9YS5saWJyYXJpZXMsR24udmlld2VyLnN0YXJ0dXBTZXQ9ITAsYS5saWJyYXJpZXNM'@;
put 'b2FkaW5nPSExLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCksYS5saWJyYXJpZXNMb2FkaW5nPSExLGEubm9EYXRhUmVxRXJyPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXt9bmdBZnRl'@;
put 'ckNvbnRlbnRJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5ob3RUYWJsZS5kYXRhLmxlbmd0aD4wJiYoYS50YWJsZUZsYWc9ITApLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57YS53aGVyZVN0cmluZz1kLnN0cmluZyxhLmNs'@;
put 'YXVzZXM9ZC5vYmosYS5saWJkcz1kLmxpYmRzfSksdHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSI/YS5sb2FkV2l0aFBhcmFtZXRlcnMoKTphLmxvYWRXaXRob3V0UGFyYW1ldGVycygpfSkoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu'@;
put 'ZXcoYXx8YykodHQoQzApLHR0KGJkKSx0dChvYSksdHQoRHMpLHR0KEdsKSx0dCh2bCksdHQodzApLHR0KFRjKSx0dChKZCksdHQoVWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJv'@;
put 'KHdudCw1KSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9aCl9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OTUsdmFyczoyOSxjb25zdHM6W1szLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8g'@;
put 'dGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hl'@;
put 'c3QiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIi'@;
put 'LCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImNsci1jb2wtbWQtNiJdLFsxLCJkb3dubG9hZC1zZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbInZhbHVlIiwiQ1NWIl0sWyJ2YWx1ZSIsIlNBUyJdLFsidmFsdWUi'@;
put 'LCJQR1NRTF9EREwiXSxbInZhbHVlIiwiU0FTX0RETCJdLFsidmFsdWUiLCJUU1FMX0RETCJdLFsidmFsdWUiLCJFWENFTCJdLFsidmFsdWUiLCJNQVJLRE9XTiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJj'@;
put 'bGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiaWQiLCJjbGljayJdLFsxLCJtb2RhbC1ib2R5Iiwid2ViLXF1ZXJ5Il0sWzEsInJvdyJdLFsxLCJjbHItY29sLWxnLTEyIiwiY2xyLWNvbC1tZC0xMiIsImNsci1jb2wtc20t'@;
put 'MTIiLCJjbHItY29sLXhzLTEyIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJidG4tZ3JvdXAiXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRl'@;
put 'bW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsImNhcmQtYmxvY2siLCJ3b3JkLWJyZWFrLWFsbCJdLFsicm93cyIsIjQiLCJjb2xzIiwiNTAiLCJ0eXBlIiwidGV4dCIsInJlYWRvbmx5IiwiIiwxLCJ3ZWItcXVlcnktdGV4dCIsInctMTAwIiwzLCJ2YWx1ZSIsImZvY3VzIl0sWyJjbGlDb21t'@;
put 'YW5kSW5wdXQiLCIiXSxbMSwiY2FyZC1mb290ZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsIm5neENsaXBib2FyZCIsImNsaWNrIl0sWyJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2Rh'@;
put 'bENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJidG4tc20iLDMsImNsaWNrIl0sWyJ0eXBl'@;
put 'Iiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0'@;
put 'bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDQsIm5nSWYiXSxbMywib3Bl'@;
put 'biIsImRzbWV0YSIsIm9wZW5DaGFuZ2UiXSxbMywidmlld2JveE1vZGFsIiwidmlld2JveE1vZGFsQ2hhbmdlIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNs'@;
put 'cklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJd'@;
put 'LFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUi'@;
put 'LCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywiaWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtbGluayIsMywiZGMt'@;
put 'bG9ja2VkLWNvbnRyb2wiLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJd'@;
put 'LFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJd'@;
put 'LFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJt'@;
put 'b2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImFy'@;
put 'aWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtYmFja2Ryb3AiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsImhlYWRlci1yb3cgY2xyLXJv'@;
put 'dyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayBub0RhdGEiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xy'@;
put 'LWZsZXgtMSIsNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwi'@;
put 'Zm9ybS1ibG9jayIsInRhYmxlLXNlYXJjaC13cmFwcGVyIiwic3ciLCJjbHItY29sLW1kIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUi'@;
put 'LCJzZWFyY2gtaW5wdXQiLDMsInR5cGUiLCJrZXl1cC5lbnRlciJdLFsic2VhcmNoRWwiLCIiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVj'@;
put 'a2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1zbS1yb3ciXSxbMSwidmlld2VyVGl0bGUiLCJjbHItZmxleC1jb2x1bW4iLCJk'@;
put 'LWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdo'@;
put 'dCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3cgbXQtNSBtci01Iiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJs'@;
put 'ZyIsNCwiY2xySWZPcGVuIl0sWzEsIm9wdGlvbnMtY29sIiwiY2xyLWNvbC1tZCJdLFsiY2xhc3MiLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbInNoYXBl'@;
put 'Iiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93IiwibXQtNSIsIm1yLTUiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIs'@;
put 'ImxnIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLDMsImNsaWNrIl0sWzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJi'@;
put 'dG4tb3V0bGluZSIsImZpbHRlclNpZGUiXSxbInNoYXBlIiwiY29nIiwic2l6ZSIsIjE1Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duSXRlbSIs'@;
put 'IiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIs'@;
put 'NCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91'@;
put 'ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNoYXBlIiwic3dpdGNoIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxb'@;
put 'MSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iXSxbMSwidmlld2VyVGl0'@;
put 'bGUiLCJtdC0xNyJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxpYmluZm8gbS0wIGNsci1yb3ciLDQsIm5n'@;
put 'SWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJsaWJpbmZvIiwibS0wIiwiY2xyLXJvdyJdLFsiY2xhc3MiLCJ0ZXh0'@;
put 'LWNlbnRlciBtLTAgdy0xMDAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiLCJ3LTEwMCJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0wIiwiZm9udC1ib2xkIl0sWzEsImNhcmQtYmxvY2siLCJu'@;
put 'b0RhdGEiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3Ry'@;
put 'ZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwibW9kaWZ5Q29s'@;
put 'V2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJyb3dIZWFkZXJzIiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYo'@;
put 'MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiLDApLHh0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiBkLmxvYWRNb3JlTGlicmFyaWVzKCl9KSxKZSgxLENudCwyLDAsImRpdiIsMSksbWUoMiwiY2xyLXRyZWUiKSxKZSgzLHhudCw2LDMsImNsci10cmVlLW5vZGUiLDIpLEpl'@;
put 'KDQsSG50LDIsMSwibmctY29udGFpbmVyIiwzKSx5ZSgpLEplKDUsTm50LDMsMCwiZGl2Iiw0KSx5ZSgpLG1lKDYsImRpdiIsNSksSmUoNyxWbnQsMTQsMCwiZGl2Iiw2KSxKZSg4LEJudCwxLDAsImRpdiIsNyksbWUoOSwiY2xyLW1vZGFsIiw4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixm'@;
put 'dW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuRG93bmxvYWQ9Zn0pLG1lKDEwLCJoMyIsOSksTmUoMTEsIkRvd25sb2FkIikseWUoKSxtZSgxMiwiZGl2IiwxMCkoMTMsImRpdiIsMTEpKDE0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIsMTIpKDE1LCJsYWJlbCIpLE5lKDE2LCJQbGVhc2UgY2hvb3Nl'@;
put 'IGRvd25sb2FkIGZvcm1hdCIpLHllKCksbWUoMTcsInNlbGVjdCIsMTMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kb3dubG9hZEZvcm1hdD1mfSksbWUoMTgsIm9wdGlvbiIsMTQpLE5lKDE5LCJDU1YiKSx5ZSgpLG1lKDIwLCJvcHRpb24iLDE1KSxOZSgyMSwi'@;
put 'RGF0YWxpbmVzIChjYXJkcyBmaWxlKSIpLHllKCksbWUoMjIsIm9wdGlvbiIsMTYpLE5lKDIzLCJEREwgKFBHU1FMIEZsYXZvdXIpIikseWUoKSxtZSgyNCwib3B0aW9uIiwxNyksTmUoMjUsIkRETCAoU0FTIEZsYXZvdXIpIikseWUoKSxtZSgyNiwib3B0aW9uIiwxOCksTmUoMjcsIkRETCAo'@;
put 'VFNRTCBGbGF2b3VyKSIpLHllKCksbWUoMjgsIm9wdGlvbiIsMTkpLE5lKDI5LCJFeGNlbCAoLnhsc3gpIikseWUoKSxtZSgzMCwib3B0aW9uIiwyMCksTmUoMzEsIk1hcmtkb3duICgubWQpIikseWUoKSgpKCkoKSgpLG1lKDMyLCJkaXYiLDIxKSgzMywiYnV0dG9uIiwyMikseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBkLm9wZW5Eb3dubG9hZD0hMX0pLE5lKDM0LCIgQ2FuY2VsICIpLHllKCksbWUoMzUsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kb3dubG9hZEZvcm1hdC5pbmNsdWRlcygiRERMIik/ZC5kb3dubG9hZERETCgpOmQuZG93'@;
put 'bmxvYWREYXRhKCl9KSxOZSgzNiwiIE9rICIpLHllKCkoKSgpLG1lKDM3LCJjbHItbW9kYWwiLDgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLndlYlF1ZXJ5PWZ9KSxtZSgzOCwiaDMiLDkpLE5lKDM5LCIgV2ViIFF1ZXJ5IFVSTCAiKSx5ZSgpLG1lKDQw'@;
put 'LCJkaXYiLDI0KSg0MSwiZGl2IiwyNSkoNDIsImRpdiIsMjYpKDQzLCJkaXYiLDI3KSg0NCwiZGl2IiwyOCkoNDUsInNwYW4iKSxOZSg0NiwiQ29weSB0aGUgYmVsb3cgaW50byB5b3VyIHByZWZlcnJlZCBjbGllbnQgdG9vbDoiKSx5ZSgpLG1lKDQ3LCJkaXYiLDI5KSg0OCwiZGl2IiwzMCks'@;
put 'eHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLndlYlF1ZXJ5VGFiPSEwLGQuc2hvd1dlYlF1ZXJ5KCl9KSxxdCg0OSwiaW5wdXQiLDMxKSxtZSg1MCwibGFiZWwiKSxOZSg1MSwiVEFCIikseWUoKSgpLG1lKDUyLCJkaXYiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQu'@;
put 'd2ViUXVlcnlUYWI9ITEsZC5zaG93V2ViUXVlcnkoKX0pLHF0KDUzLCJpbnB1dCIsMzEpLG1lKDU0LCJsYWJlbCIpLE5lKDU1LCJDU1YiKSx5ZSgpKCkoKSgpLG1lKDU2LCJkaXYiLDMyKSg1NywidGV4dGFyZWEiLDMzLDM0KSx4dCgiZm9jdXMiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2xp'@;
put 'Q29tbWFuZEZvY3VzKGYpfSksTmUoNTksIiAgICAgICAgICAgICAgIikseWUoKSgpLG1lKDYwLCJkaXYiLDM1KSg2MSwiYnV0dG9uIiwzNikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNvcHlUb0NsaXAoKX0pLE5lKDYyLCIgY29weSB0byBjbGlwYm9hcmQgIikseWUoKSgpKCko'@;
put 'KSgpKCksbWUoNjMsImRpdiIsMjEpKDY0LCJidXR0b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQud2ViUXVlcnk9ITF9KSxOZSg2NSwiIGNsb3NlICIpLHllKCkoKSgpLG1lKDY2LCJjbHItbW9kYWwiLDM3KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihm'@;
put 'KXtyZXR1cm4gZC5maWx0ZXI9Zn0pLG1lKDY3LCJoMyIsOSksTmUoNjgsIiBGaWx0ZXIgZm9yIHRhYmxlOiIpLG1lKDY5LCJzcGFuIiksTmUoNzApLHllKCkoKSxtZSg3MSwiZGl2IiwxMCksSmUoNzIsam50LDIsMCwiYXBwLXF1ZXJ5IiwzOCkseWUoKSxtZSg3MywiZGl2IiwyMSkoNzQsImJ1'@;
put 'dHRvbiIsMzkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNldEZpbHRlcigpfSksTmUoNzUsIiByZXNldCBmaWx0ZXIgIikseWUoKSxtZSg3NiwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbHRlcj0hMSxkLnJlbW92ZVF1ZXJ5KCl9KSxO'@;
put 'ZSg3NywiIENhbmNlbCAiKSx5ZSgpLG1lKDc4LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VuZENsYXVzZSgpfSksTmUoNzksIiBPayAiKSx5ZSgpKCkoKSxtZSg4MCwiY2xyLW1vZGFsIiw0MikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24o'@;
put 'Zil7cmV0dXJuIGQucXVlcnlFcnI9Zn0pLG1lKDgxLCJoMyIsNDMpLE5lKDgyLCJFcnJvciIpLHllKCksbWUoODMsImRpdiIsMTApKDg0LCJwIiksTmUoODUpLHllKCkoKSxtZSg4NiwiZGl2IiwyMSkoODcsImJ1dHRvbiIsNDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVy'@;
put 'eUVycj0hMX0pLE5lKDg4LCIgQ2FuY2VsICIpLHllKCksbWUoODksImJ1dHRvbiIsNDUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDkwLCIgT2sgIikseWUoKSgpKCksSmUoOTEsem50LDYsMCwiZGl2Iiw0NiksSmUoOTIsTXJ0LDgsNiwiZGl2Iiw0'@;
put 'NykseWUoKSxtZSg5MywiYXBwLWRhdGFzZXQtaW5mbyIsNDgpLHh0KCJvcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kYXRhc2V0SW5mbz1mfSkseWUoKSxtZSg5NCwiYXBwLXZpZXdib3hlcyIsNDkpLHh0KCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBk'@;
put 'LnZpZXdib3hPcGVuPWZ9KSx5ZSgpKSwyJmEpe2NvbnN0IGg9JGkoNTgpO0NlKDEpLFJlKCJuZ0lmIixkLmxpYnJhcmllc0xvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmxpYnJhcmllcyksQ2UoMSksUmUoIm5nRm9yT2YiLGQubGlicmFyaWVzKSxDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJp'@;
put 'ZXNQYWdpbmcpLENlKDIpLFJlKCJuZ0lmIixkLm51bGxWYXJpYWJsZXMpLENlKDEpLFJlKCJuZ0lmIixkLm51bGxWYXJpYWJsZXMpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQub3BlbkRvd25sb2FkKSgiY2xyTW9kYWxTaXplIiwibWQiKSxDZSg4KSxSZSgibmdNb2RlbCIsZC5kb3dubG9h'@;
put 'ZEZvcm1hdCksQ2UoMTgpLFJlKCJpZCIsZC50YWJsZVRpdGxlKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLndlYlF1ZXJ5KSgiY2xyTW9kYWxTaXplIiwibGciKSxDZSgxMiksUmUoImNoZWNrZWQiLGQud2ViUXVlcnlUYWIpLENlKDQpLFJlKCJjaGVja2VkIiwhZC53ZWJRdWVyeVRhYiks'@;
put 'Q2UoNCksRWMoInZhbHVlIixkLndlYlF1ZXJ5VGV4dCksQ2UoNCksUmUoIm5neENsaXBib2FyZCIsaCksQ2UoNSksUmUoImNsck1vZGFsT3BlbiIsZC5maWx0ZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNCksZ3IoIiAiLGQubGliVGFiLCIgIiks'@;
put 'Q2UoMiksUmUoIm5nSWYiLGQuZmlsdGVyKSxDZSg2KSxSZSgiY2xyTG9hZGluZyIsZC5zdWJtaXRMb2FkaW5nKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLnF1ZXJ5RXJyKSxDZSg1KSxvcihkLnF1ZXJ5RXJyTWVzc2FnZSksQ2UoNiksUmUoIm5nSWYiLGQubG9hZGluZ1RhYmxlVmlldyks'@;
put 'Q2UoMSksUmUoIm5nSWYiLCFkLmxvYWRpbmdUYWJsZVZpZXcpLENlKDEpLFJlKCJvcGVuIixkLmRhdGFzZXRJbmZvKSgiZHNtZXRhIixkLmRzbWV0YSksQ2UoMSksUmUoInZpZXdib3hNb2RhbCIsZC52aWV3Ym94T3Blbil9fSxkZXBlbmRlbmNpZXM6W3hzZSx4cyxaaSxuZCx0aCx2bnQsQ3As'@;
put 'bDEsYzEsV2EsUzAsTTAsQnMsd3AsT3MscjIsZGQsZzEsRHAsa2Esb3Usc3UsWnUsYzIsZGgsVXMsWEosRDAsRDgsVDAsZjEsTjgsSDgsTmYsYWcsbGcsSzgsamIsVWIsemIsdTIseHksbjMsQXNlLGpFLGNVLFU3LERzZSx5bnRdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtt'@;
put 'YXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0udG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1p'@;
put 'bjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmhlYWRlci1yb3dbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLm9wdGlvbnMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5zd1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtt'@;
put 'YXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHh9LmZpbHRlclNpZGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MjZweDttYXJnaW4tYm90dG9tOjE5cHh9Lm9wdGlvbnMt'@;
put 'ZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaWNvbnttYXJnaW4tcmlnaHQ6NXB4fS52aWV3ZXJUaXRsZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fS5kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0'@;
put 'aDoxODBweDttYXJnaW4tdG9wOi0xOHB4O3BhZGRpbmc6MH0uZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmNhcmRGbGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZs'@;
put 'ZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubm9EYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MX0uZmlsdGVyQnRuW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5lZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmJ0blZpZXdbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIWltcG9ydGFudH0uY29udGVudC1h'@;
put 'cmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5kb3dubG9hZC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXQhaW1wb3J0'@;
put 'YW50fS5yZWZyZXNoLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tbGVmdDo1cHh9LmxpYmluZm9bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAyMHB4O292ZXJmbG93OmF1dG99aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnBy'@;
put 'aW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0OSl9Lm5vLXRhYmxlLXNlbGVjdGVkLWluZm9bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNv'@;
put 'bHVtbn0ud2ViLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0OjM1dmh9LndlYi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAud2ViLXF1ZXJ5LXRleHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDoxMDBweH1AbWVkaWEgc2NyZWVu'@;
put 'IGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LmZpbHRlckJ0bltfbmdjb250ZW50LSVDT01QJV0sIC5lZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KXsucm93W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXttYXJnaW4tcmlnaHQ6MHJlbTttYXJnaW4tbGVmdDowcmVtfX0iXX0pLGN9KSgpO2NvbnN0IHhydD1be3BhdGg6IiIsY29tcG9uZW50OmF0dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpI'@;
put 'VH0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpIVH0se3BhdGg6ImRhdGEvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpIVH0se3BhdGg6ImRhdGEvOmxpYk1lbSIsY29tcG9uZW50OkhUfSx7cGF0aDoibGluZWFnZSIsY29tcG9uZW50OkZUfSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86'@;
put 'ZGlyZWN0aW9uIixjb21wb25lbnQ6RlR9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpGVH0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVsb2FkIixjb21wb25lbnQ6RlR9LHtwYXRoOiJ2aXlhLWFwaS1leHBs'@;
put 'b3JlciIsY29tcG9uZW50OnBudH0se3BhdGg6Im1ldGFkYXRhIixjb21wb25lbnQ6b1p9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElEIixjb21wb25lbnQ6b1p9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElELzpvYmplY3ROYW1lIixjb21wb25lbnQ6b1p9LHtwYXRo'@;
put 'OiJ1c2VybmF2Iixjb21wb25lbnQ6c3R0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIsY29tcG9uZW50OkNsZX0se3BhdGg6InVzZXJzLzp1cmkiLGNvbXBvbmVudDpDbGV9LHtwYXRoOiJncm91cHMiLGNvbXBv'@;
put 'bmVudDplYWV9LHtwYXRoOiJncm91cHMvOnVyaSIsY29tcG9uZW50OmVhZX0se3BhdGg6InJvbGVzIixjb21wb25lbnQ6d2xlfSx7cGF0aDoicm9sZXMvOnVyaSIsY29tcG9uZW50OndsZX1dfV19XTtsZXQgRXJ0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2hjLmZvckNoaWxkKHhydCksaGNdfSksY30pKCksa3J0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'fSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W0ZzZSxvbyxFcnQsX250LHFsLF91LF83LmZvclJvb3QoKSxCNyxWNyx0dyxmVSxDMl19KSxjfSkoKTtjb25zdCBUcnQ9aGMuZm9yUm9vdChbe3BhdGg6IiIscmVkaXJlY3RUbzoiaG9tZSIscGF0aE1h'@;
put 'dGNoOiJmdWxsIn0se3BhdGg6InZpZXciLGxvYWRDaGlsZHJlbjooKT0+a3J0fSx7cGF0aDoicmV2aWV3Iixjb21wb25lbnQ6QkdlLGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRvYXBwcm92ZSJ9LHtwYXRoOiIiLGxvYWRDaGlsZHJlbjooKT0+Vkdl'@;
put 'fV19LHtwYXRoOiJsaWNlbnNpbmciLGxvYWRDaGlsZHJlbjooKT0+c1dlfSx7cGF0aDoiaG9tZSIsbG9hZENoaWxkcmVuOigpPT5oVX0se3BhdGg6ImVkaXRvciIsbG9hZENoaWxkcmVuOigpPT52WWV9LHtwYXRoOiJzdGFnZSIsbG9hZENoaWxkcmVuOigpPT5HR2V9LHtwYXRoOiJzeXN0ZW0i'@;
put 'LGxvYWRDaGlsZHJlbjooKT0+cyRlfSx7cGF0aDoiZGVwbG95Iixsb2FkQ2hpbGRyZW46KCk9PlRFZX0se3BhdGg6IioqIixjb21wb25lbnQ6WXhlfV0se3VzZUhhc2g6ITB9KTtsZXQgRHJ0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjLGJvb3RzdHJhcDpbcVNlXX0pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W1V4LGJkLHBVXSxpbXBvcnRzOltaeGUsRUcscWwsRDZlLEZoZSxUcnQsVjcsX3UsQjcsaFUsdHcsQzIsV3R0XX0pLGN9KSgpO0wxZSgpLmJvb3RzdHJhcE1v'@;
put 'ZHVsZShEcnQpfSw1NjMyMTooYXQsSWUsRik9Pnt2YXIgYWU9RigxNzE1NikuZGVmYXVsdDtzZWxmLGF0LmV4cG9ydHM9KCgpPT57dmFyIHg9ezI2NTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oayl7cmV0'@;
put 'dXJuIGsmJmsuX19lc01vZHVsZT9rOntkZWZhdWx0Omt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kZWNvZGVUb2tlbj1PLmhhc1Rva2VuRXhwaXJlZD1PLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9Ty5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9'@;
put 'dm9pZCAwO3ZhciBLPXooUig2MjQ1KSk7ZnVuY3Rpb24gSShrLEUpe3JldHVybigwLEsuZGVmYXVsdCkoaykuZXhwLShuZXcgRGF0ZSkudmFsdWVPZigpLzFlMzw9RX1PLmlzQWNjZXNzVG9rZW5FeHBpcmluZz1mdW5jdGlvbihrLEUpe3JldHVybiB2b2lkIDA9PT1FJiYoRT0zNjAwKSwha3x8'@;
put 'SShrLEUpfSxPLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdm9pZCAwPT09RSYmKEU9MzApLCFrfHxJKGssRSl9LE8uaGFzVG9rZW5FeHBpcmVkPWZ1bmN0aW9uKGspe3JldHVybiFrfHxJKGssMCl9LE8uZGVjb2RlVG9rZW49ZnVuY3Rpb24oayl7dmFyIEU7'@;
put 'dHJ5e0U9KDAsSy5kZWZhdWx0KShrKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW4gc3VwcGxpZWQuIil9cmV0dXJuIEV9fSw2Nzk5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRl'@;
put 'P2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSl9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9dGhpcyYm'@;
put 'dGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'SyhSKDI2NTYpLE8pfSwzMjU5OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIFI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oeil7Zm9yKHZhciBLLEk9MSxrPWFyZ3VtZW50cy5sZW5ndGg7STxrO0krKylmb3Io'@;
put 'dmFyIEUgaW4gSz1hcmd1bWVudHNbSV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEssRSkmJih6W0VdPUtbRV0pO3JldHVybiB6fSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8u'@;
put 'cHJlZml4TWVzc2FnZT12b2lkIDAsTy5wcmVmaXhNZXNzYWdlPWZ1bmN0aW9uKHosSyl7aWYoIm9iamVjdCI9PXR5cGVvZiB6KWlmKHouaGFzT3duUHJvcGVydHkoIm1lc3NhZ2UiKSl6Lm1lc3NhZ2U9Syt6Lm1lc3NhZ2U7ZWxzZXtpZighei5oYXNPd25Qcm9wZXJ0eSgiYm9keSIpKXJldHVy'@;
put 'biBSKFIoe30seikse21lc3NhZ2U6S30pO2lmKCJvYmplY3QiPT10eXBlb2Ygei5ib2R5JiYoei5tZXNzYWdlPXouYm9keS5tZXNzYWdlP0srei5ib2R5Lm1lc3NhZ2U6SyksInN0cmluZyI9PXR5cGVvZiB6LmJvZHkpe3ZhciBJPXZvaWQgMDt0cnl7ST1KU09OLnBhcnNlKHouYm9keSl9Y2F0'@;
put 'Y2h7cmV0dXJuIHoubWVzc2FnZT1LLHp9cmV0dXJuIEkubWVzc2FnZT1JLm1lc3NhZ2U/SytJLm1lc3NhZ2U6Syx6LmJvZHk9SSx6fX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHomJih6PUsreiksen19LDk3Nzg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlz'@;
put 'Ll9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAw'@;
put 'PT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMzI1OSksTyksSyhSKDEwNjQpLE8pfSwxMDY0OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oVixCKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90'@;
put 'eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oWSxYKXtZLl9fcHJvdG9fXz1YfXx8ZnVuY3Rpb24oWSxYKXtmb3IodmFyIFUgaW4gWClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWCxVKSYmKFlbVV09WFtVXSl9KShWLEIpfSxmdW5j'@;
put 'dGlvbihWLEIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBCJiZudWxsIT09Qil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKEIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFkoKXt0aGlzLmNvbnN0cnVjdG9yPVZ9eihW'@;
put 'LEIpLFYucHJvdG90eXBlPW51bGw9PT1CP09iamVjdC5jcmVhdGUoQik6KFkucHJvdG90eXBlPUIucHJvdG90eXBlLG5ldyBZKX0pLEk9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKFYsQil7dmFyIFk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmVltTeW1ib2wuaXRlcmF0b3JdO2lm'@;
put 'KCFZKXJldHVybiBWO3ZhciBYLFUscT1ZLmNhbGwoViksZWU9W107dHJ5e2Zvcig7KHZvaWQgMD09PUJ8fEItLSA+MCkmJiEoWD1xLm5leHQoKSkuZG9uZTspZWUucHVzaChYLnZhbHVlKX1jYXRjaCh0ZSl7VT17ZXJyb3I6dGV9fWZpbmFsbHl7dHJ5e1gmJiFYLmRvbmUmJihZPXEucmV0dXJu'@;
put 'KSYmWS5jYWxsKHEpfWZpbmFsbHl7aWYoVSl0aHJvdyBVLmVycm9yfX1yZXR1cm4gZWV9LGs9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihWLEIsWSl7aWYoWXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBYLFU9MCxxPUIubGVuZ3RoO1U8cTtVKyspIVgmJlUgaW4g'@;
put 'Qnx8KFh8fChYPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEIsMCxVKSksWFtVXT1CW1VdKTtyZXR1cm4gVi5jb25jYXQoWHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoQikpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXJ2ZXJU'@;
put 'eXBlRXJyb3I9dm9pZCAwO3ZhciBFPVIoMzkwMCksaj1mdW5jdGlvbihWKXtmdW5jdGlvbiBCKFkpe3ZvaWQgMD09PVkmJihZPVtdKTt2YXIgWD10aGlzLFU9KFk9ayhbXSxJKG5ldyBTZXQoWSkpLCExKSkubGVuZ3RoP1kuam9pbigiLCAiKS50cmltKCk6W0UuU2VydmVyVHlwZS5TYXNWaXlh'@;
put 'LEUuU2VydmVyVHlwZS5TYXM5LEUuU2VydmVyVHlwZS5TYXNqc10uam9pbigiLCAiKS50cmltKCk7cmV0dXJuIFU9VS5yZXBsYWNlKC8sXHMoW14sXSopJC8sIiBhbmQgJDEiKSwoWD1WLmNhbGwodGhpcywiSW52YWxpZCBzZXJ2ZXIgdHlwZTogdmFsaWQgb3B0aW9uIi5jb25jYXQoMSE9PVku'@;
put 'bGVuZ3RoPyJzIjoiIiwiICIpLmNvbmNhdCgxIT09WS5sZW5ndGg/ImFyZSI6ImlzIiwiICIpLmNvbmNhdChVKSl8fHRoaXMpLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFgsQi5wcm90b3R5cGUpLFh9cmV0dXJuIEsoQixWKSxCfShFcnJvcik7Ty5TZXJ2'@;
put 'ZXJUeXBlRXJyb3I9an0sMzkwNjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShxLm5l'@;
put 'eHQodWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhyb3codWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxjZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUoZnVu'@;
put 'Y3Rpb24oRyl7RyhjZSl9KSkudGhlbihvZSxzZSl9aGUoKHE9cS5hcHBseShZLFh8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJvdyBl'@;
put 'ZVsxXTtyZXR1cm4gZWVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2UoMSkscmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rp'@;
put 'b24gc2UoaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihVKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhy'@;
put 'b3d8fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxsKHEpLDApOnEubmV4dCkmJiEoZWU9ZWUuY2FsbChxLGNlWzFdKSkuZG9uZSlyZXR1cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNlIDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJldHVy'@;
put 'biBvZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25lOiExfTtjYXNlIDU6b2UubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtjb250aW51ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChlZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAmJmVl'@;
put 'W2VlLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7b2U9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighZWV8fGNlWzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2UubGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVlWzFd'@;
put 'LGVlPWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJlbDxlZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uub3BzLnB1c2goY2UpO2JyZWFrfWVlWzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2goRyl7Y2U9WzYsR10scT0wfWZpbmFsbHl7VT1l'@;
put 'ZT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW2hlLHVlXSl9fX0sST10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oWSxYKXt2YXIgVT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZZW1N5bWJvbC5pdGVyYXRv'@;
put 'cl07aWYoIVUpcmV0dXJuIFk7dmFyIHEsZWUsdGU9VS5jYWxsKFkpLG9lPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1YfHxYLS0gPjApJiYhKHE9dGUubmV4dCgpKS5kb25lOylvZS5wdXNoKHEudmFsdWUpfWNhdGNoKHNlKXtlZT17ZXJyb3I6c2V9fWZpbmFsbHl7dHJ5e3EmJiFxLmRvbmUmJihV'@;
put 'PXRlLnJldHVybikmJlUuY2FsbCh0ZSl9ZmluYWxseXtpZihlZSl0aHJvdyBlZS5lcnJvcn19cmV0dXJuIG9lfSxrPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oWSxYLFUpe2lmKFV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgcSxlZT0wLHRlPVgubGVuZ3RoO2Vl'@;
put 'PHRlO2VlKyspIXEmJmVlIGluIFh8fChxfHwocT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChYLDAsZWUpKSxxW2VlXT1YW2VlXSk7cmV0dXJuIFkuY29uY2F0KHF8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFgpKX0sRT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rp'@;
put 'b24oWSl7cmV0dXJuIFkmJlkuX19lc01vZHVsZT9ZOntkZWZhdWx0Oll9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy51cGRhdGVDc3Y9Ty5jcmVhdGVDc3Y9Ty5yZWFkQ3N2PXZvaWQgMDt2YXIgaj1SKDE1NTkpLFY9RShSKDc1NjUpKTtPLnJl'@;
put 'YWRDc3Y9ZnVuY3Rpb24oWSl7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsai5yZWFkRmlsZSkoWSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKS5zcGxp'@;
put 'dCgiXG4iKS5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFUubGVuZ3RofSkubWFwKGZ1bmN0aW9uKFUpe3JldHVybiBVLnNwbGl0KCIsIil9KV19fSl9KX0sTy5jcmVhdGVDc3Y9ZnVuY3Rpb24oWSxYLFUpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHE7'@;
put 'cmV0dXJuIEsodGhpcyxmdW5jdGlvbihlZSl7c3dpdGNoKGVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9KDAsVi5kZWZhdWx0KShYLHtoZWFkZXI6MT09PVgubGVuZ3RoLGNvbHVtbnM6VX0pLFs0LCgwLGouY3JlYXRlRmlsZSkoWSxxKV07Y2FzZSAxOnJldHVybiBlZS5zZW50KCksWzJdfX0p'@;
put 'fSl9LE8udXBkYXRlQ3N2PWZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGVlLHRlLG9lO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LEIoWSxYLFUscSldO2Nhc2Ug'@;
put 'MTpyZXR1cm4gZWU9c2Uuc2VudCgpLHEmJih0ZT0wPT09ZWUubGVuZ3RoPzE6ZWUubGVuZ3RoLChvZT1VLmZpbmRJbmRleChmdW5jdGlvbihoZSl7cmV0dXJuIGhlPT09cX0pKT4tMT9YLnNwbGljZShvZSwwLHRlKTooVS5zcGxpY2UoMCwwLHEpLFguc3BsaWNlKDAsMCx0ZSkpKSxlZS5wdXNo'@;
put 'KFgpLFs0LCgwLE8uY3JlYXRlQ3N2KShZLGVlLFUpXTtjYXNlIDI6cmV0dXJuIHNlLnNlbnQoKSxbMl19fSl9KX07dmFyIEI9ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGUsb2Usc2U7cmV0dXJuIEsodGhpcyxmdW5j'@;
put 'dGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6aWYoWC5sZW5ndGghPT1VLmxlbmd0aCl7aWYoWC5sZW5ndGg+VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIXF8fFgubGVu'@;
put 'Z3RoKzEhPT1VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlmKHEmJlUuaW5jbHVkZXMocSkpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVs'@;
put 'ZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7cmV0dXJuWzQsKDAsTy5yZWFkQ3N2KShZKS5jYXRjaChmdW5jdGlvbih1ZSl7cmV0dXJuW119KV07Y2FzZSAxOmlmKGVlPWhlLnNlbnQoKSx0ZT1lZVswXSl7aWYoVS5sZW5ndGg+dGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibnVtYmVyIG9m'@;
put 'IHByb3ZpZGVkIGNvbHVtbnMgYXJlIGdyZWF0ZXIgdGhhbiBudW1iZXIgb2YgZXhpc3RpbmcgY29sdW1ucyIpO2lmKFUubGVuZ3RoPHRlLmxlbmd0aCl7aWYoIXF8fFUubGVuZ3RoKzEhPT10ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUg'@;
put 'bGVzcyB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYob2U9dGUuZmluZEluZGV4KGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWU9PT1xfSksc2U9ayhbXSxJKFUpLCExKSwhKG9lPi0xKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhp'@;
put 'c3RpbmcgY29sdW1ucyIpO2lmKHNlLnNwbGljZShvZSwwLHEpLEpTT04uc3RyaW5naWZ5KFUpIT09SlNPTi5zdHJpbmdpZnkoc2UpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIil9ZWxzZXtpZihKU09OLnN0cmluZ2lm'@;
put 'eShVKSE9PUpTT04uc3RyaW5naWZ5KHRlKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKHEmJiFVLmluY2x1ZGVzKHEpKXRocm93IG5ldyBFcnJvcigiY2FuIG5vdCBhZGQgbmV3IGlkIHRvIGV4aXN0aW5nIGRh'@;
put 'dGEiKX19cmV0dXJuWzIsZWVdfX0pfSl9fSwxNTU5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEcsYixELEgpe3ZvaWQgMD09PUgmJihIPUQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShHLEgse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGJbRF19fSl9OmZ1bmN0aW9uKEcsYixELEgpe3ZvaWQgMD09PUgmJihIPUQpLEdbSF09YltEXX0pLEs9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEcsYil7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KEcsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmJ9KX06ZnVuY3Rpb24oRyxiKXtHLmRlZmF1bHQ9Yn0pLEk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEcpe2lmKEcmJkcuX19lc01vZHVsZSlyZXR1cm4gRzt2YXIgYj17fTtpZihu'@;
put 'dWxsIT1HKWZvcih2YXIgRCBpbiBHKSJkZWZhdWx0IiE9PUQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLEQpJiZ6KGIsRyxEKTtyZXR1cm4gSyhiLEcpLGJ9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEcsYixELEgpe3JldHVybiBuZXcoRHx8KEQ9'@;
put 'UHJvbWlzZSkpKGZ1bmN0aW9uKE4sZyl7ZnVuY3Rpb24gQyhwKXt0cnl7dihILm5leHQocCkpfWNhdGNoKHcpe2codyl9fWZ1bmN0aW9uIFMocCl7dHJ5e3YoSC50aHJvdyhwKSl9Y2F0Y2godyl7Zyh3KX19ZnVuY3Rpb24gdihwKXt2YXIgdztwLmRvbmU/TihwLnZhbHVlKToodz1wLnZhbHVl'@;
put 'LHcgaW5zdGFuY2VvZiBEP3c6bmV3IEQoZnVuY3Rpb24oSil7Sih3KX0pKS50aGVuKEMsUyl9digoSD1ILmFwcGx5KEcsYnx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRyxiKXt2YXIgRCxILE4sZyxDPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24o'@;
put 'KXtpZigxJk5bMF0pdGhyb3cgTlsxXTtyZXR1cm4gTlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBnPXtuZXh0OlMoMCksdGhyb3c6UygxKSxyZXR1cm46UygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'fSksZztmdW5jdGlvbiBTKHYpe3JldHVybiBmdW5jdGlvbihwKXtyZXR1cm4gZnVuY3Rpb24odyl7aWYoRCl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtDOyl0cnl7aWYoRD0xLEgmJihOPTImd1swXT9ILnJldHVybjp3WzBdP0gu'@;
put 'dGhyb3d8fCgoTj1ILnJldHVybikmJk4uY2FsbChIKSwwKTpILm5leHQpJiYhKE49Ti5jYWxsKEgsd1sxXSkpLmRvbmUpcmV0dXJuIE47c3dpdGNoKEg9MCxOJiYodz1bMiZ3WzBdLE4udmFsdWVdKSx3WzBdKXtjYXNlIDA6Y2FzZSAxOk49dzticmVhaztjYXNlIDQ6cmV0dXJuIEMubGFiZWwr'@;
put 'Kyx7dmFsdWU6d1sxXSxkb25lOiExfTtjYXNlIDU6Qy5sYWJlbCsrLEg9d1sxXSx3PVswXTtjb250aW51ZTtjYXNlIDc6dz1DLm9wcy5wb3AoKSxDLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChOPShOPUMudHJ5cykubGVuZ3RoPjAmJk5bTi5sZW5ndGgtMV0pfHw2IT09d1sw'@;
put 'XSYmMiE9PXdbMF0pKXtDPTA7Y29udGludWV9aWYoMz09PXdbMF0mJighTnx8d1sxXT5OWzBdJiZ3WzFdPE5bM10pKXtDLmxhYmVsPXdbMV07YnJlYWt9aWYoNj09PXdbMF0mJkMubGFiZWw8TlsxXSl7Qy5sYWJlbD1OWzFdLE49dzticmVha31pZihOJiZDLmxhYmVsPE5bMl0pe0MubGFiZWw9'@;
put 'TlsyXSxDLm9wcy5wdXNoKHcpO2JyZWFrfU5bMl0mJkMub3BzLnBvcCgpLEMudHJ5cy5wb3AoKTtjb250aW51ZX13PWIuY2FsbChHLEMpfWNhdGNoKEope3c9WzYsSl0sSD0wfWZpbmFsbHl7RD1OPTB9aWYoNSZ3WzBdKXRocm93IHdbMV07cmV0dXJue3ZhbHVlOndbMF0/d1sxXTp2b2lkIDAs'@;
put 'ZG9uZTohMH19KFt2LHBdKX19fSxqPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihHLGIpe3ZhciBEPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJkdbU3ltYm9sLml0ZXJhdG9yXTtpZighRClyZXR1cm4gRzt2YXIgSCxOLGc9RC5jYWxsKEcpLEM9W107dHJ5e2Zvcig7KHZvaWQgMD09'@;
put 'PWJ8fGItLSA+MCkmJiEoSD1nLm5leHQoKSkuZG9uZTspQy5wdXNoKEgudmFsdWUpfWNhdGNoKFMpe049e2Vycm9yOlN9fWZpbmFsbHl7dHJ5e0gmJiFILmRvbmUmJihEPWcucmV0dXJuKSYmRC5jYWxsKGcpfWZpbmFsbHl7aWYoTil0aHJvdyBOLmVycm9yfX1yZXR1cm4gQ30sVj10aGlzJiZ0'@;
put 'aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKEcsYixEKXtpZihEfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIEgsTj0wLGc9Yi5sZW5ndGg7TjxnO04rKykhSCYmTiBpbiBifHwoSHx8KEg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYiwwLE4pKSxIW05dPWJbTl0pO3JldHVy'@;
put 'biBHLmNvbmNhdChIfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiKSl9LEI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEcpe3JldHVybiBHJiZHLl9fZXNNb2R1bGU/Rzp7ZGVmYXVsdDpHfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLE8uaXNUZXN0RmlsZT1PLnRlc3RGaWxlUmVnRXhwPU8uY3JlYXRlUmVhZFN0cmVhbT1PLmNyZWF0ZVdyaXRlU3RyZWFtPU8uZ2V0UmVhbFBhdGg9Ty5iYXNlNjRFbmNvZGVGaWxlPU8uYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPU8ucGF0aFNlcEVzY2FwZWQ9Ty5jb3B5PU8ubW92'@;
put 'ZUZpbGU9Ty5nZXRSZWxhdGl2ZVBhdGg9Ty51bmlmeUZpbGVQYXRoPU8uZGVsZXRlRm9sZGVyPU8uZGVsZXRlRmlsZT1PLmNyZWF0ZUZpbGU9Ty5jcmVhdGVGb2xkZXI9Ty5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9Ty5saXN0U3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFNhc0Zp'@;
put 'bGVzSW5Gb2xkZXI9Ty5saXN0SW5pRmlsZXNJbkZvbGRlcj1PLmxpc3RGaWxlc0luRm9sZGVyPU8ucmVhZEZpbGVCaW5hcnk9Ty5yZWFkRmlsZT1PLmlzRm9sZGVyPU8uZm9sZGVyRXhpc3RzPU8uZmlsZUV4aXN0cz12b2lkIDA7dmFyIFk9QihSKDU2NzQpKSxYPUIoUig5ODQpKSxVPUIoUigy'@;
put 'NTIwKSkscT1SKDYyNjYpLGVlPUkoUigyOTc1KSk7ZnVuY3Rpb24gdGUoRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKEcsWS5kZWZhdWx0LmNvbnN0YW50'@;
put 'cy5GX09LKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSldfSl9KX1mdW5jdGlvbiBvZShHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVs'@;
put 'dC5wcm9taXNlcy5yZWFkRmlsZShHKV19KX0pfWZ1bmN0aW9uIHNlKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0p'@;
put 'LnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIEQuZmlsdGVyKGZ1bmN0aW9uKEgpe3JldHVybiFILmlzRGlyZWN0b3J5KCl9KS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZX0pfSldfSl9KX1mdW5jdGlvbiBoZShHLGIsRCl7cmV0dXJuIHZvaWQgMD09PWImJihiPSEwKSx2b2lkIDA9PT1E'@;
put 'JiYoRD1bXSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSD10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oZyl7cmV0dXJuIGsoSCx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEMsUz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYiYmZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNEaXJlY3RvcnkoKX0pLmxlbmd0aD8oQz1bXSxbNCwoMCxxLmFz'@;
put 'eW5jRm9yRWFjaCkoZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNEaXJlY3RvcnkoKX0pLGZ1bmN0aW9uKHApe3JldHVybiBrKFMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB3LEosbmU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihkZSl7c3dpdGNoKGRlLmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuIEQuaW5jbHVkZXModz1wLm5hbWUpP1szLDJdOihKPVUuZGVmYXVsdC5qb2luKEcsdyksbmU9W1YoW10saihDKSwhMSldLFs0LGhlKEosYixEKV0pO2Nhc2UgMTpDPVYuYXBwbHkodm9pZCAwLG5lLmNvbmNhdChbai5hcHBseSh2b2lkIDAsW2RlLnNlbnQoKS5tYXAoZnVuY3Rp'@;
put 'b24oZmUpe3JldHVybiBVLmRlZmF1bHQuam9pbih3LGZlKX0pXSksITFdKSksZGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9KV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4gdi5zZW50KCksWzIsVihWKFtdLGooZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIXAuaXNEaXJlY3Rvcnko'@;
put 'KX0pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5uYW1lfSkpLCExKSxqKEMpLCExKV07Y2FzZSAyOnJldHVyblsyLGcubWFwKGZ1bmN0aW9uKHApe3JldHVybiBwLm5hbWV9KV19fSl9KX0pXX0pfSl9ZnVuY3Rpb24gdWUoRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMubWtkaXIoRyx7cmVjdXJzaXZlOiEwfSldfSl9KX1mdW5jdGlvbiBjZShHLGIsRCl7dm9pZCAwPT09YiYmKGI9VS5kZWZhdWx0LnNlcCksdm9pZCAwPT09RCYmKEQ9Ii8iKTt2YXIgSD17dW5p'@;
put 'eDoiLyIsd2luOiJcXCJ9LE49T2JqZWN0LmtleXMoSCkuZmluZChmdW5jdGlvbihDKXtyZXR1cm4gSFtDXT09PWJ9KTtpZihOKXt2YXIgZz1IW09iamVjdC5rZXlzKEgpLmZpbmQoZnVuY3Rpb24oQyl7cmV0dXJuIEMhPT1OfSldO3JldHVybiBOPUhbTl0sRy5zcGxpdChnKS5qb2luKE4pfXJl'@;
put 'dHVybiBHLnNwbGl0KEQpLmpvaW4oYil9Ty5maWxlRXhpc3RzPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhHLFkuZGVmYXVsdC5jb25z'@;
put 'dGFudHMuRl9PSykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9LE8uZm9sZGVyRXhpc3RzPXRlLE8uaXNGb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhp'@;
put 'cyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMubHN0YXQoRykudGhlbihmdW5jdGlvbihEKXtyZXR1cm4gRC5pc0RpcmVjdG9yeSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9LE8ucmVhZEZpbGU9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gdm9pZCAw'@;
put 'PT09YiYmKGI9InV0ZjgiKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKEcsYildfSl9KX0sTy5yZWFkRmlsZUJpbmFyeT1vZSxPLmxpc3RGaWxlc0luRm9sZGVyPXNl'@;
put 'LE8ubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHNlKEcpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCku'@;
put 'ZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBELmVuZHNXaXRoKCIuaW5pIil9KV19fSl9KX0sTy5saXN0U2FzRmlsZXNJbkZvbGRlcj1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIHZvaWQgMD09PWImJihiPSExKSx2b2lkIDA9PT1EJiYoRD1bXSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsaGUoRyxiLEQpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCkuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiBnLmVuZHNXaXRoKCIuc2FzIil9KV19fSl9KX0sTy5saXN0U3ViRm9s'@;
put 'ZGVyc0luRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oRCl7'@;
put 'cmV0dXJuIEQuZmlsdGVyKGZ1bmN0aW9uKEgpe3JldHVybiBILmlzRGlyZWN0b3J5KCl9KS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZX0pfSldfSl9KX0sTy5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9aGUsTy5jcmVhdGVGb2xkZXI9dWUsTy5jcmVhdGVGaWxlPWZ1bmN0'@;
put 'aW9uKEcsYixEKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4oRz1jZShHKSkuc3BsaXQoVS5kZWZhdWx0LnNlcCkubGVuZ3RoPjE/KChIPUcuc3BsaXQo'@;
put 'VS5kZWZhdWx0LnNlcCkpLnBvcCgpLFs0LHRlKE49SC5qb2luKFUuZGVmYXVsdC5zZXApKV0pOlszLDNdO2Nhc2UgMTpyZXR1cm4gZy5zZW50KCk/WzMsM106WzQsdWUoTildO2Nhc2UgMjpnLnNlbnQoKSxnLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy53cml0'@;
put 'ZUZpbGUoRyxiLEQpXX19KX0pfSxPLmRlbGV0ZUZpbGU9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucmVtb3ZlKEcpXX0pfSl9LE8uZGVsZXRlRm9sZGVyPWZ1bmN0'@;
put 'aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRCxIKXsoMCxYLmRlZmF1bHQpKEcse30sZnVuY3Rpb24oTil7cmV0dXJuIE4/SChOKTpEKCl9KX0pXX0pfSl9'@;
put 'LE8udW5pZnlGaWxlUGF0aD1jZSxPLmdldFJlbGF0aXZlUGF0aD1mdW5jdGlvbihHLGIpe3ZhciBEPUcuc3BsaXQoVS5kZWZhdWx0LnNlcCksSD1iLnNwbGl0KFUuZGVmYXVsdC5zZXApLE49W10sZz1bXTtELmZvckVhY2goZnVuY3Rpb24ocCx3KXt2b2lkIDAhPT1IW3ddJiZEW3ddPT09SFt3'@;
put 'XT9OLnB1c2gocCk6cCYmZy5wdXNoKHApfSk7dmFyIEM9Ti5qb2luKFUuZGVmYXVsdC5zZXApLFM9bmV3IFJlZ0V4cCgiXiIuY29uY2F0KFUuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpKSksdj1uZXcgUmVnRXhwKCIiLmNvbmNhdChVLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xc'@;
put 'L2csIlxcXFwiKSwiJCIpKTtyZXR1cm4oZy5sZW5ndGg/Ii4uIi5jb25jYXQoVS5kZWZhdWx0LnNlcCkucmVwZWF0KGcubGVuZ3RoKToiLiIuY29uY2F0KFUuZGVmYXVsdC5zZXApKStiLnJlcGxhY2UoQywiIikucmVwbGFjZShTLCIiKS5yZXBsYWNlKHYsIiIpfSxPLm1vdmVGaWxlPWZ1bmN0'@;
put 'aW9uKEcsYil7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMucmVuYW1lKEcsYildfSl9KX0sTy5jb3B5PWZ1bmN0aW9uKEcsYil7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9p'@;
put 'ZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMixZLmRlZmF1bHQuY29weShHLGIpXX0pfSl9LE8ucGF0aFNlcEVzY2FwZWQ9VS5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksTy5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24oRyl7'@;
put 'cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixvZShHKS50aGVuKGZ1bmN0aW9uKEQpe3ZhciBIPVUuZGVmYXVsdC5leHRuYW1lKEcpLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9PT1IJiYoSD0ic3Zn'@;
put 'K3htbCIpLCJkYXRhOmltYWdlLyIrSCsiO2Jhc2U2NCwiK0QudG9TdHJpbmcoImJhc2U2NCIpfSldfSl9KX0sTy5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'WzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKEcse2VuY29kaW5nOiJiYXNlNjQifSldfSl9KX0sTy5nZXRSZWFsUGF0aD1mdW5jdGlvbihHKXtyZXR1cm4gWS5kZWZhdWx0LnJlYWxwYXRoU3luYyhHKX0sTy5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsZWUuZmlsZUV4aXN0cyhHKV07Y2FzZSAxOnJldHVybiBiLnNlbnQoKT9bMixZLmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0oRyx7ZmxhZ3M6'@;
put 'ImEifSldOls0LGVlLmNyZWF0ZUZpbGUoRywiIildO2Nhc2UgMjpyZXR1cm4gYi5zZW50KCksWzIsWS5kZWZhdWx0LmNyZWF0ZVdyaXRlU3RyZWFtKEcse2ZsYWdzOiJhIn0pXX19KX0pfSxPLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24oRyl7cmV0dXJuIGsodm9pZCAwLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5jcmVhdGVSZWFkU3RyZWFtKEcpXX0pfSl9LE8udGVzdEZpbGVSZWdFeHA9L1wudGVzdFwuKFxkK1wuKT9zYXMkL2ksTy5pc1Rlc3RGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBPLnRlc3RG'@;
put 'aWxlUmVnRXhwLnRlc3QoRyl9fSw1NjI2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGspe3JldHVybiBrJiZrLl9fZXNNb2R1bGU/azp7ZGVmYXVsdDprfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9f'@;
put 'ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0QWJzb2x1dGVQYXRoPXZvaWQgMDt2YXIgSz16KFIoMjUyMCkpLEk9eihSKDc0MzUpKTtPLmdldEFic29sdXRlUGF0aD1mdW5jdGlvbihrLEUpe3JldHVybiBLLmRlZmF1bHQuaXNBYnNvbHV0ZShrKXx8L15+Ly5leGVjKGspP0suZGVmYXVsdC5u'@;
put 'b3JtYWxpemUoay5yZXBsYWNlKC9efi8sSS5kZWZhdWx0LmhvbWVkaXIoKSkpOksuZGVmYXVsdC5qb2luKEUsayl9fSwyOTc1OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEUsaixW'@;
put 'LEIpe3ZvaWQgMD09PUImJihCPVYpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLEIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGpbVl19fSl9OmZ1bmN0aW9uKEUsaixWLEIpe3ZvaWQgMD09PUImJihCPVYpLEVbQl09altWXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0'@;
put 'YXJ8fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIEUpImRlZmF1bHQiPT09Vnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVil8fHooaixFLFYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5yZWFkQ3N2PU8uY3Jl'@;
put 'YXRlQ3N2PU8udXBkYXRlQ3N2PU8udGVzdEZpbGVSZWdFeHA9Ty5pc1Rlc3RGaWxlPU8uZ2V0UmVhbFBhdGg9Ty5iYXNlNjRFbmNvZGVGaWxlPU8uYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPU8uY29weT1PLnBhdGhTZXBFc2NhcGVkPU8ubW92ZUZpbGU9Ty51bmlmeUZpbGVQYXRoPU8uZ2V0UmVs'@;
put 'YXRpdmVQYXRoPU8uZGVsZXRlRm9sZGVyPU8uZGVsZXRlRmlsZT1PLmNyZWF0ZVdyaXRlU3RyZWFtPU8uY3JlYXRlUmVhZFN0cmVhbT1PLmNyZWF0ZUZvbGRlcj1PLmNyZWF0ZUZpbGU9Ty5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9Ty5saXN0U3ViRm9sZGVyc0luRm9sZGVyPU8u'@;
put 'bGlzdFNhc0ZpbGVzSW5Gb2xkZXI9Ty5saXN0SW5pRmlsZXNJbkZvbGRlcj1PLmxpc3RGaWxlc0luRm9sZGVyPU8ucmVhZEZpbGVCaW5hcnk9Ty5yZWFkRmlsZT1PLmlzRm9sZGVyPU8uZm9sZGVyRXhpc3RzPU8uZmlsZUV4aXN0cz12b2lkIDA7dmFyIEk9UigxNTU5KTtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoTywiZmlsZUV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZmlsZUV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZm9sZGVyRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5mb2xkZXJFeGlz'@;
put 'dHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImlzRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc0ZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicmVhZEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJ'@;
put 'LnJlYWRGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJyZWFkRmlsZUJpbmFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucmVhZEZpbGVCaW5hcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJs'@;
put 'ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0RmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibGlzdEluaUZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RJbmlGaWxlc0luRm9sZGVyfX0pLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0U2FzRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdFNhc0ZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxl'@;
put 'OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdEZpbGVzQW5kU3Vi'@;
put 'Rm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVhdGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVhdGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVhdGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY3JlYXRlUmVhZFN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY3JlYXRlUmVhZFN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywi'@;
put 'Y3JlYXRlV3JpdGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZVdyaXRlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJkZWxldGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5kZWxldGVGaWxl'@;
put 'fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJkZWxldGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmRlbGV0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0UmVsYXRpdmVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gSS5nZXRSZWxhdGl2ZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInVuaWZ5RmlsZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnVuaWZ5RmlsZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIm1vdmVGaWxlIix7'@;
put 'ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5tb3ZlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicGF0aFNlcEVzY2FwZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnBhdGhTZXBFc2NhcGVkfX0pLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShPLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jb3B5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJiYXNlNjRFbmNvZGVJbWFnZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmJhc2U2NEVuY29kZUltYWdl'@;
put 'RmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiYmFzZTY0RW5jb2RlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuYmFzZTY0RW5jb2RlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0UmVhbFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiBJLmdldFJlYWxQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJpc1Rlc3RGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1Rlc3RGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ0ZXN0RmlsZVJlZ0V4'@;
put 'cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudGVzdEZpbGVSZWdFeHB9fSk7dmFyIGs9UigzOTA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidXBkYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay51cGRhdGVDc3Z9fSksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KE8sImNyZWF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsuY3JlYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJyZWFkQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay5yZWFkQ3N2'@;
put 'fX0pLEsoUig1NjI2KSxPKX0sMjc3NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm5ld0xpbmU9Ty5jYXBpdGFsaXplRmlyc3RDaGFyPU8uc2FuaXRpemVTcGVjaWFsQ2hhcnM9Ty5wYWRXaXRoTnVtYmVy'@;
put 'PXZvaWQgMDt2YXIgej1SKDUzMDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJwYWRXaXRoTnVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei5wYWRXaXRoTnVtYmVyfX0pO3ZhciBLPVIoOTI3NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInNhbml0aXpl'@;
put 'U3BlY2lhbENoYXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5zYW5pdGl6ZVNwZWNpYWxDaGFyc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY2FwaXRhbGl6ZUZpcnN0Q2hhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsuY2Fw'@;
put 'aXRhbGl6ZUZpcnN0Q2hhcn19KTt2YXIgST1SKDE2MjgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJuZXdMaW5lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5uZXdMaW5lfX0pfSw1MzA2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhZFdpdGhOdW1iZXI9dm9pZCAwLE8ucGFkV2l0aE51bWJlcj1mdW5jdGlvbihSLHope3JldHVybiB2b2lkIDA9PT16JiYoej0wKSxSPjk/UjoiIi5jb25jYXQoeikuY29uY2F0KFIpfX0sMTYyODooTSxPLFIpPT57InVzZSBzdHJpY3Qi'@;
put 'O3ZhciB6PVIoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ubmV3TGluZT12b2lkIDAsTy5uZXdMaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIndpbjMyIj09PXoucGxhdGZvcm0/IlxcclxcbiI6IlxcbiJ9fSw5Mjc1OihNLE8pPT57InVzZSBz'@;
put 'dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmNhcGl0YWxpemVGaXJzdENoYXI9Ty5zYW5pdGl6ZVNwZWNpYWxDaGFycz12b2lkIDAsTy5zYW5pdGl6ZVNwZWNpYWxDaGFycz1mdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC9bXHUw'@;
put 'MDFiXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1PUlpjZi1ucXJ5PT48XS9nLCIiKX0sTy5jYXBpdGFsaXplRmlyc3RDaGFyPWZ1bmN0aW9uKFIpe3JldHVybiBSLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Iuc2xpY2UoMSl9fSw2NDY3OmZ1'@;
put 'bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEkpe3JldHVybiBJJiZJLl9fZXNNb2R1bGU/STp7ZGVmYXVsdDpJfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNT'@;
put 'cGVjaWFsTWlzc2luZz1PLmNob2ljZVZhbGlkYXRvcj1PLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1PLnVybFZhbGlkYXRvcj12b2lkIDA7dmFyIEs9eihSKDQ4MSkpO08udXJsVmFsaWRhdG9yPWZ1bmN0aW9uKEksayl7cmV0dXJuISFLLmRlZmF1bHQuaXNIdHRwVXJpKEkpfHwhIUsuZGVmYXVs'@;
put 'dC5pc0h0dHBzVXJpKEkpfHwiIj09PUl8fGt9LE8uY29uZmlybWF0aW9uVmFsaWRhdG9yPWZ1bmN0aW9uKEkpe3JldHVybiEwPT09SXx8ITE9PT1JfSxPLmNob2ljZVZhbGlkYXRvcj1mdW5jdGlvbihJLGssRSl7cmV0dXJuIEk+MCYmSTw9a3x8RX0sTy5pc1NwZWNpYWxNaXNzaW5nPWZ1bmN0'@;
put 'aW9uKEkpe3JldHVybigic3RyaW5nIiE9dHlwZW9mIEl8fCFJLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoSSl9fSw3NzU3OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVUaW1lc3RhbXA9Ty50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDt2YXIgej1SKDEzMDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ0aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gei50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJnZW5lcmF0ZVRpbWVzdGFtcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHouZ2VuZXJhdGVUaW1lc3RhbXB9fSl9LDEzMDI6KE0sTyxSKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0ZVRpbWVzdGFtcD1PLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO3ZhciB6PVIoMjc3Nyk7Ty50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPWZ1bmN0aW9uKEspe3Zv'@;
put 'aWQgMD09PUsmJihLPURhdGUubm93KCkpO3ZhciBJPW5ldyBEYXRlKEspO3JldHVybltJLmdldEZ1bGxZZWFyKCksKDAsei5wYWRXaXRoTnVtYmVyKShJLmdldE1vbnRoKCkrMSksKDAsei5wYWRXaXRoTnVtYmVyKShJLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygwLHoucGFkV2l0aE51'@;
put 'bWJlcikoSS5nZXRIb3VycygpKSwoMCx6LnBhZFdpdGhOdW1iZXIpKEkuZ2V0TWludXRlcygpKSwoMCx6LnBhZFdpdGhOdW1iZXIpKEkuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpfSxPLmdlbmVyYXRlVGltZXN0YW1wPWZ1bmN0aW9uKEssSSl7dm9pZCAwPT09SyYmKEs9IiIpO3ZhciBrPW5l'@;
put 'dyBEYXRlLEU9W2suZ2V0VVRDRnVsbFllYXIoKSxrLmdldFVUQ01vbnRoKCkrMSxrLmdldFVUQ0RhdGUoKSxrLmdldFVUQ0hvdXJzKCksay5nZXRVVENNaW51dGVzKCksay5nZXRVVENTZWNvbmRzKCldO3JldHVybiBFPUUubWFwKGZ1bmN0aW9uKGope3JldHVybigwLHoucGFkV2l0aE51bWJl'@;
put 'cikoail9KSxJJiZLJiZJPEUubGVuZ3RoJiZJPj0wJiZFLnNwbGljZShJLDAsSyksRS5qb2luKEk/IiI6Syl9fSw4MjM5OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNvbmZpZ1R5cGVzPXZvaWQg'@;
put 'MCwoUj1PLkNvbmZpZ1R5cGVzfHwoTy5Db25maWdUeXBlcz17fSkpLkJ1aWxkPSJidWlsZENvbmZpZyIsUi5TZXJ2aWNlPSJzZXJ2aWNlQ29uZmlnIixSLkpvYj0iam9iQ29uZmlnIixSLlRlc3Q9InRlc3RDb25maWciLFIuRG9jPSJkb2NDb25maWciLFIuRGVwbG95PSJkZXBsb3lDb25maWci'@;
put 'LFIuU3RyZWFtPSJzdHJlYW1Db25maWciLFIuQXV0aD0iYXV0aENvbmZpZyJ9LDI0Mjc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxODk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzNjkyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNjkzOTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5NZW1iZXJUeXBlPXZvaWQgMCwoUj1PLk1lbWJlclR5cGV8fChPLk1lbWJlclR5cGU9e30pKS5zZXJ2aWNlPSJzZXJ2aWNlIixSLmZpbGU9ImZpbGUiLFIuZm9sZGVyPSJmb2xkZXIifSwzMzI3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTE2NTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM5MDA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0'@;
put 'aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KX06ZnVuY3Rpb24oSSxrLEUsail7dm9p'@;
put 'ZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoODIzOSksTyksSyhSKDI0MjcpLE8pLEsoUigxODkpLE8pLEsoUigzNjkyKSxPKSxLKFIoNjkzOSksTyksSyhSKDMzMjcpLE8pLEsoUig1MTY1KSxPKSxLKFIoNDA2OSksTyksSyhSKDg5MzIpLE8pLEsoUig0KSxPKSxLKFIo'@;
put 'MjAxNSksTyksSyhSKDg1MTUpLE8pLEsoUig1MzEzKSxPKSxLKFIoODk3OSksTyl9LDQwNjk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNNYWNyb1ZhcnM9dm9pZCAwLE8uaXNNYWNyb1ZhcnM9ZnVuY3Rp'@;
put 'b24oUil7cmV0dXJuIFImJiJvYmplY3QiPT10eXBlb2YgUi5tYWNyb1ZhcnMmJiFBcnJheS5pc0FycmF5KFIubWFjcm9WYXJzKX19LDg5MzI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OihNLE8pPT57InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBU0pzRmlsZVR5cGU9dm9pZCAwLChSPU8uU0FTSnNGaWxlVHlwZXx8KE8uU0FTSnNGaWxlVHlwZT17fSkpLnNlcnZpY2U9IlNlcnZpY2UiLFIuam9iPSJKb2IiLFIudGVz'@;
put 'dD0iVGVzdCIsUi5maWxlPSJGaWxlIn0sMjAxNTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLE8uU2VydmVyVHlwZT12b2lkIDAsKFI9Ty5TZXJ2ZXJUeXBlfHwoTy5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0iU0FTVklZQSIsUi5TYXM5PSJTQVM5IixSLlNhc2pzPSJTQVNKUyJ9LDUzMTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4OTc5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gej1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihqKXtmb3IodmFyIFYsQj0xLFk9YXJndW1lbnRz'@;
put 'Lmxlbmd0aDtCPFk7QisrKWZvcih2YXIgWCBpbiBWPWFyZ3VtZW50c1tCXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixYKSYmKGpbWF09VltYXSk7cmV0dXJuIGp9LHouYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSksTy5UYXJnZXQ9dm9pZCAwO3ZhciBLPVIoODIzOSksST1SKDg1MTUpLGs9Uig2NzgxKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaihWLEIpe3ZhciBZPXRoaXM7dm9pZCAwPT09QiYmKEI9e30pLHRoaXMuX3NlcnZlclR5cGU9SS5TZXJ2ZXJUeXBlLlNhc1ZpeWEs'@;
put 'dGhpcy5nZXRDb25maWc9ZnVuY3Rpb24oWCxVKXtyZXR1cm4geih6KHt9LFkuX2NvbmZpZ1tYXXx8e30pLFVbWF0pfTt0cnl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldDogSW5wdXQgSlNPTiBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTt0aGlzLl9jb25maWc9Qix0aGlz'@;
put 'Ll9uYW1lPSgwLGsudmFsaWRhdGVUYXJnZXROYW1lKShWLm5hbWUpLHRoaXMuX3NlcnZlclVybD0oMCxrLnZhbGlkYXRlU2VydmVyVXJsKShWLnNlcnZlclVybCksdGhpcy5fc2VydmVyVHlwZT0oMCxrLnZhbGlkYXRlU2VydmVyVHlwZSkoVi5zZXJ2ZXJUeXBlKSx0aGlzLl9odHRwc0FnZW50'@;
put 'T3B0aW9ucz0oMCxrLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnMpKFYuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuX2FwcExvYz0oMCxrLnZhbGlkYXRlQXBwTG9jKShWLmFwcExvYyksdGhpcy5fY29udGV4dE5hbWU9KDAsay52YWxpZGF0ZUNvbnRleHROYW1lKShWLmNvbnRleHROYW1lLHRo'@;
put 'aXMuX3NlcnZlclR5cGUpLHRoaXMuX3NlcnZlck5hbWU9KDAsay52YWxpZGF0ZVNlcnZlck5hbWUpKFYuc2VydmVyTmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zeW5jRm9sZGVyPSgwLGsudmFsaWRhdGVTeW5jRm9sZGVyKShWLnN5bmNGb2xkZXIpLHRoaXMuX3JlcG9zaXRvcnlOYW1l'@;
put 'PSgwLGsudmFsaWRhdGVSZXBvc2l0b3J5TmFtZSkoVi5yZXBvc2l0b3J5TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSxWLmRvY0NvbmZpZyYmKHRoaXMuX2RvY0NvbmZpZz0oMCxrLnZhbGlkYXRlRG9jQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkRvYyxWKSkpLFYuYXV0aENv'@;
put 'bmZpZyYmKHRoaXMuX2F1dGhDb25maWc9KDAsay52YWxpZGF0ZUF1dGhDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuQXV0aCxWKSkpLFYuYXV0aENvbmZpZ1NhczkmJih0aGlzLl9hdXRoQ29uZmlnU2FzOT0oMCxrLnZhbGlkYXRlQXV0aENvbmZpZ1NhczkpKFYuYXV0aENv'@;
put 'bmZpZ1NhczkpKSxWLmJ1aWxkQ29uZmlnJiYodGhpcy5fYnVpbGRDb25maWc9KDAsay52YWxpZGF0ZUJ1aWxkQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkJ1aWxkLFYpLHRoaXMuX25hbWUpKSx0aGlzLl9kZXBsb3lDb25maWc9KDAsay52YWxpZGF0ZURlcGxveUNvbmZp'@;
put 'ZykoVi5kZXBsb3lDb25maWc/dGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5EZXBsb3ksVik6e2RlcGxveVNlcnZpY2VQYWNrOiEwLGRlcGxveVNjcmlwdHM6W119KSxWLnNlcnZpY2VDb25maWcmJih0aGlzLl9zZXJ2aWNlQ29uZmlnPSgwLGsudmFsaWRhdGVTZXJ2aWNlQ29uZmlnKSh0'@;
put 'aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLlNlcnZpY2UsVikpKSxWLmpvYkNvbmZpZyYmKHRoaXMuX2pvYkNvbmZpZz0oMCxrLnZhbGlkYXRlSm9iQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkpvYixWKSkpLFYuc3RyZWFtQ29uZmlnJiYodGhpcy5fc3RyZWFtQ29u'@;
put 'ZmlnPSgwLGsudmFsaWRhdGVTdHJlYW1Db25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuU3RyZWFtLFYpKSksVi50ZXN0Q29uZmlnJiYodGhpcy5fdGVzdENvbmZpZz0oMCxrLnZhbGlkYXRlVGVzdENvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5UZXN0LFYp'@;
put 'KSksVi5tYWNyb0ZvbGRlcnMmJlYubWFjcm9Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX21hY3JvRm9sZGVycz1WLm1hY3JvRm9sZGVycyksVi5wcm9ncmFtRm9sZGVycyYmVi5wcm9ncmFtRm9sZGVycy5sZW5ndGgmJih0aGlzLl9wcm9ncmFtRm9sZGVycz1WLnByb2dyYW1Gb2xkZXJzKSxWLmJp'@;
put 'bmFyeUZvbGRlcnMmJlYuYmluYXJ5Rm9sZGVycy5sZW5ndGgmJih0aGlzLl9iaW5hcnlGb2xkZXJzPVYuYmluYXJ5Rm9sZGVycyksVi5zeW5jRGlyZWN0b3JpZXMmJlYuc3luY0RpcmVjdG9yaWVzLmxlbmd0aCYmKHRoaXMuX3N5bmNEaXJlY3Rvcmllcz0oMCxrLnZhbGlkYXRlU3luY0RpcmVj'@;
put 'dG9yaWVzKShWLnN5bmNEaXJlY3RvcmllcykpfWNhdGNoKFgpe3Rocm93IG5ldyBFcnJvcigiRXJyb3IgcGFyc2luZyB0YXJnZXQ6ICIuY29uY2F0KFgubWVzc2FnZSkpfX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzZXJ2ZXJVcmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyVXJsfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0p'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic2VydmVyVHlwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2ZXJUeXBlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiaHR0cHNBZ2Vu'@;
put 'dE9wdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faHR0cHNBZ2VudE9wdGlvbnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJhcHBMb2MiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBw'@;
put 'TG9jfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiZG9jQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY0NvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoai5wcm90b3R5cGUsImF1dGhDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0aENvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImF1dGhDb25maWdTYXM5Iix7Z2V0'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWdTYXM5fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiYnVpbGRDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVpbGRDb25maWd9LGVu'@;
put 'dW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJkZXBsb3lDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVwbG95Q29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic2VydmljZUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2aWNlQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiam9iQ29uZmlnIix7Z2V0'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2pvYkNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInN0cmVhbUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJlYW1Db25maWd9LGVudW1l'@;
put 'cmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJtYWNyb0ZvbGRlcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFjcm9Gb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShqLnByb3RvdHlwZSwicHJvZ3JhbUZvbGRlcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvZ3JhbUZvbGRlcnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJiaW5hcnlGb2xkZXJzIix7'@;
put 'Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JpbmFyeUZvbGRlcnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJjb250ZXh0TmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZXh0TmFtZX0s'@;
put 'ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInNlcnZlck5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyTmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoai5wcm90b3R5cGUsInJlcG9zaXRvcnlOYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlOYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwidGVzdENvbmZpZyIse2dl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXN0Q29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic3luY0ZvbGRlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW5jRm9sZGVyfSxlbnVtZXJh'@;
put 'YmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic3luY0RpcmVjdG9yaWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N5bmNEaXJlY3Rvcmllc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxqLnByb3RvdHlw'@;
put 'ZS50b0pzb249ZnVuY3Rpb24oVil7dmFyIEIsWSxYO3ZvaWQgMD09PVYmJihWPSEwKTt2YXIgVT17bmFtZTp0aGlzLm5hbWUsc2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHNlcnZlclR5cGU6dGhpcy5zZXJ2ZXJUeXBlLGh0dHBzQWdlbnRPcHRpb25zOnRoaXMuaHR0cHNBZ2VudE9wdGlvbnMs'@;
put 'YXBwTG9jOnRoaXMuYXBwTG9jLGRvY0NvbmZpZzp0aGlzLmRvY0NvbmZpZyxkZXBsb3lDb25maWc6dGhpcy5kZXBsb3lDb25maWd9O3JldHVybiEobnVsbD09PShCPXRoaXMubWFjcm9Gb2xkZXJzKXx8dm9pZCAwPT09QikmJkIubGVuZ3RoJiYoVS5tYWNyb0ZvbGRlcnM9dGhpcy5tYWNyb0Zv'@;
put 'bGRlcnMpLCEobnVsbD09PShZPXRoaXMucHJvZ3JhbUZvbGRlcnMpfHx2b2lkIDA9PT1ZKSYmWS5sZW5ndGgmJihVLnByb2dyYW1Gb2xkZXJzPXRoaXMucHJvZ3JhbUZvbGRlcnMpLCEobnVsbD09PShYPXRoaXMuYmluYXJ5Rm9sZGVycyl8fHZvaWQgMD09PVgpJiZYLmxlbmd0aCYmKFUuYmlu'@;
put 'YXJ5Rm9sZGVycz10aGlzLmJpbmFyeUZvbGRlcnMpLHRoaXMuYXV0aENvbmZpZyYmKFUuYXV0aENvbmZpZz10aGlzLmF1dGhDb25maWcpLHRoaXMuYXV0aENvbmZpZ1NhczkmJihVLmF1dGhDb25maWdTYXM5PXRoaXMuYXV0aENvbmZpZ1NhczkpLHRoaXMuc3luY0RpcmVjdG9yaWVzP1Uuc3lu'@;
put 'Y0RpcmVjdG9yaWVzPXRoaXMuc3luY0RpcmVjdG9yaWVzOlYmJihVLnN5bmNEaXJlY3Rvcmllcz1bXSksdGhpcy5idWlsZENvbmZpZz9VLmJ1aWxkQ29uZmlnPXRoaXMuYnVpbGRDb25maWc6ViYmKFUuYnVpbGRDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLGJ1aWxkT3V0'@;
put 'cHV0RmlsZU5hbWU6IiIuY29uY2F0KHRoaXMubmFtZSwiLnNhcyIpLGJ1aWxkT3V0cHV0Rm9sZGVyOiJzYXNqc2J1aWxkIixidWlsZFJlc3VsdHNGb2xkZXI6InNhc2pzcmVzdWx0cyIsbWFjcm9WYXJzOnt9fSksdGhpcy5qb2JDb25maWc/VS5qb2JDb25maWc9dGhpcy5qb2JDb25maWc6ViYm'@;
put 'KFUuam9iQ29uZmlnPXtqb2JGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc2VydmljZUNvbmZpZz9VLnNlcnZpY2VDb25maWc9dGhpcy5zZXJ2aWNlQ29uZmlnOlYmJihVLnNlcnZpY2VDb25maWc9e3NlcnZpY2VGb2xkZXJzOltd'@;
put 'LGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc3RyZWFtQ29uZmlnP1Uuc3RyZWFtQ29uZmlnPXRoaXMuc3RyZWFtQ29uZmlnOlYmJihVLnN0cmVhbUNvbmZpZz17c3RyZWFtV2ViRm9sZGVyOiIiLHN0cmVhbVdlYjohMSx3ZWJTb3VyY2VQYXRoOiIi'@;
put 'LHN0cmVhbVNlcnZpY2VOYW1lOiIiLGFzc2V0UGF0aHM6W119KSx0aGlzLnRlc3RDb25maWc/VS50ZXN0Q29uZmlnPXRoaXMudGVzdENvbmZpZzpWJiYoVS50ZXN0Q29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e30sdGVzdFNldFVwOiIiLHRlc3RUZWFy'@;
put 'RG93bjoiIn0pLHRoaXMuc2VydmVyVHlwZT09PUkuU2VydmVyVHlwZS5TYXNWaXlhP1UuY29udGV4dE5hbWU9dGhpcy5jb250ZXh0TmFtZTp0aGlzLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzOSYmKFUuc2VydmVyTmFtZT10aGlzLnNlcnZlck5hbWUsVS5yZXBvc2l0b3J5TmFtZT10'@;
put 'aGlzLnJlcG9zaXRvcnlOYW1lKSxVfSxqfSgpO08uVGFyZ2V0PUV9LDY3ODE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oayl7cmV0dXJuIGsmJmsuX19lc01vZHVsZT9rOntkZWZhdWx0Omt9fTtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1PLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9Ty52YWxpZGF0ZVN5bmNGb2xkZXI9Ty52YWxpZGF0ZVNlcnZlck5hbWU9Ty52YWxpZGF0ZUNvbnRleHROYW1lPU8udmFsaWRh'@;
put 'dGVTdHJlYW1Db25maWc9Ty52YWxpZGF0ZURlcGxveUNvbmZpZz1PLnZhbGlkYXRlSm9iQ29uZmlnPU8udmFsaWRhdGVUZXN0Q29uZmlnPU8udmFsaWRhdGVTZXJ2aWNlQ29uZmlnPU8udmFsaWRhdGVCdWlsZENvbmZpZz1PLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9Ty52YWxpZGF0ZUF1dGhD'@;
put 'b25maWc9Ty52YWxpZGF0ZURvY0NvbmZpZz1PLnZhbGlkYXRlQXBwTG9jPU8udmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucz1PLnZhbGlkYXRlU2VydmVyVXJsPU8udmFsaWRhdGVUYXJnZXROYW1lPU8udmFsaWRhdGVTZXJ2ZXJUeXBlPXZvaWQgMDt2YXIgSz16KFIoNDgxKSksST1SKDM5MDAp'@;
put 'O08udmFsaWRhdGVTZXJ2ZXJUeXBlPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgdHlwZTogYHNlcnZlclR5cGVgIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihrIT09SS5TZXJ2ZXJUeXBlLlNhczkmJmshPT1JLlNlcnZlclR5cGUu'@;
put 'U2FzVml5YSYmayE9PUkuU2VydmVyVHlwZS5TYXNqcyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIHR5cGU6IFN1cHBvcnRlZCB2YWx1ZXMgZm9yICBgc2VydmVyVHlwZWAgYXJlICIuY29uY2F0KEkuU2VydmVyVHlwZS5TYXNWaXlhLCIsICIpLmNvbmNhdChJLlNlcnZlclR5cGUu'@;
put 'U2FzOSwiIGFuZCAiKS5jb25jYXQoSS5TZXJ2ZXJUeXBlLlNhc2pzLCIuIikpO3JldHVybiBrfSxPLnZhbGlkYXRlVGFyZ2V0TmFtZT1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3Ig'@;
put 'dW5kZWZpbmVkLiIpO2lmKGsudHJpbSgpLmluY2x1ZGVzKCIgIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGluY2x1ZGUgc3BhY2VzLiIpO2lmKCEvXlthLXpBLVowLTlcLV0rJC9pLnRlc3QoaykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlk'@;
put 'IHRhcmdldCBuYW1lOiBgbmFtZWAgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgZGFzaGVzLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlU2VydmVyVXJsPWZ1bmN0aW9uKGspe2lmKG51bGw9PWsmJihrPSIiKSwiIiE9PWsmJiFLLmRlZmF1bHQuaXNIdHRwVXJp'@;
put 'KGspJiYhSy5kZWZhdWx0LmlzSHR0cHNVcmkoaykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciBVUkw6IGBzZXJ2ZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20o'@;
put 'OnBvcnQpLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9ZnVuY3Rpb24oayl7aWYoayl7aWYoIm9iamVjdCIhPXR5cGVvZiBrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5'@;
put 'IG9yIGFuIG9iamVjdCBvZiBgSHR0cHNBZ2VudE9wdGlvbnNgIik7aWYobnVsbD09ay5hbGxvd0luc2VjdXJlUmVxdWVzdHMpay5hbGxvd0luc2VjdXJlUmVxdWVzdHM9ITE7ZWxzZSBpZigiYm9vbGVhbiIhPXR5cGVvZiBrLmFsbG93SW5zZWN1cmVSZXF1ZXN0cyl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9ucy5hbGxvd0luc2VjdXJlUmVxdWVzdHNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYSBib29sZWFuIik7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBrLmNhUGF0aCYmKGsuY2FQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVv'@;
put 'ZiBrLmtleVBhdGgmJihrLmtleVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGsuY2VydFBhdGgmJihrLmNlcnRQYXRoPXZvaWQgMCksa319LE8udmFsaWRhdGVBcHBMb2M9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExv'@;
put 'Y2AgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighay5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgbXVzdCBzdGFydCB3aXRoIGEgYC9gLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlRG9jQ29uZmln'@;
put 'PWZ1bmN0aW9uKGspe2lmKGt8fChrPXt9KSwiYm9vbGVhbiIhPXR5cGVvZiBrLmRpc3BsYXlNYWNyb0NvcmUmJihrLmRpc3BsYXlNYWNyb0NvcmU9dm9pZCAwKSwiYm9vbGVhbiIhPXR5cGVvZiBrLmVuYWJsZUxpbmVhZ2UmJihrLmVuYWJsZUxpbmVhZ2U9dm9pZCAwKSwic3RyaW5nIiE9dHlw'@;
put 'ZW9mIGsub3V0RGlyZWN0b3J5JiYoay5vdXREaXJlY3Rvcnk9dm9pZCAwKSwic3RyaW5nIj09dHlwZW9mIGsuZGF0YUNvbnRyb2xsZXJVcmwpe2lmKCIiIT09ay5kYXRhQ29udHJvbGxlclVybCYmIUsuZGVmYXVsdC5pc0h0dHBVcmkoay5kYXRhQ29udHJvbGxlclVybCkmJiFLLmRlZmF1bHQu'@;
put 'aXNIdHRwc1VyaShrLmRhdGFDb250cm9sbGVyVXJsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRGF0YSBDb250cm9sbGVyIFVybDogYGRhdGFDb250cm9sbGVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMp'@;
put 'Oi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKX1lbHNlIGsuZGF0YUNvbnRyb2xsZXJVcmw9dm9pZCAwO3JldHVybiBrfSxPLnZhbGlkYXRlQXV0aENvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51'@;
put 'bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighay51c2Vy'@;
put 'TmFtZXx8IWsucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgY2FuIG5vdCBiZSBlbXB0eSIpO3JldHVybiBrfSxPLnZhbGlkYXRlQnVpbGRDb25maWc9ZnVuY3Rpb24oayxFKXtpZighayl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIkludmFsaWQgYnVpbGQgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5idWlsZFJlc3VsdHNGb2xkZXJ8fChrLmJ1aWxkUmVzdWx0c0ZvbGRlcj0ic2FzanNyZXN1bHRzIiksay5idWlsZE91dHB1dEZvbGRlcnx8KGsuYnVpbGRP'@;
put 'dXRwdXRGb2xkZXI9InNhc2pzYnVpbGQiKSxrLmJ1aWxkT3V0cHV0RmlsZU5hbWV8fChrLmJ1aWxkT3V0cHV0RmlsZU5hbWU9IiIuY29uY2F0KEUsIi5zYXMiKSksay5pbml0UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsudGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLm1h'@;
put 'Y3JvVmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrfSxPLnZhbGlkYXRlU2VydmljZUNvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmljZSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmluaXRQcm9n'@;
put 'cmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsuc2VydmljZUZvbGRlcnN8fChrLnNlcnZpY2VGb2xkZXJzPVtdKSxrLm1hY3JvVmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrfSxPLnZhbGlkYXRlVGVzdENvbmZpZz1mdW5jdGlvbihrKXtp'@;
put 'Zighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGVzdCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmluaXRQcm9ncmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsubWFjcm9WYXJz'@;
put 'fHwoay5tYWNyb1ZhcnM9e30pLGsudGVzdFNldFVwfHwoay50ZXN0U2V0VXA9IiIpLGsudGVzdFRlYXJEb3dufHwoay50ZXN0VGVhckRvd249IiIpLGt9LE8udmFsaWRhdGVKb2JDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGpvYiBjb25maWc6IEpT'@;
put 'T04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmluaXRQcm9ncmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsuam9iRm9sZGVyc3x8KGsuam9iRm9sZGVycz1bXSksay5tYWNyb1ZhcnN8fChrLm1hY3JvVmFy'@;
put 'cz17fSksa30sTy52YWxpZGF0ZURlcGxveUNvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGVwbG95IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuZGVwbG95U2VydmljZVBhY2s9ISFrLmRlcGxveVNl'@;
put 'cnZpY2VQYWNrLGsuZGVwbG95U2NyaXB0c3x8KGsuZGVwbG95U2NyaXB0cz1bXSksa30sTy52YWxpZGF0ZVN0cmVhbUNvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQu'@;
put 'Iik7aWYoITAhPT1rLnN0cmVhbVdlYiYmITEhPT1rLnN0cmVhbVdlYil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYmAgY2Fubm90IGJlIGEgbm9uLWJvb2xlYW4gdmFsdWUuIik7aWYoay5zdHJlYW1XZWImJiFrLnN0cmVhbVdlYkZvbGRlcil0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYkZvbGRlcmAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGBzdHJlYW1XZWJgIGlzIHRydWUuIik7aWYoay5zdHJlYW1XZWImJiFrLndlYlNvdXJjZVBhdGgpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGB3ZWJTb3VyY2VQYXRoYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLnN0cmVhbUxvZ28mJiJzdHJpbmciIT10eXBlb2Ygay5zdHJlYW1Mb2dvJiYoay5zdHJlYW1Mb2dvPXZvaWQgMCksay5hc3NldFBhdGhz'@;
put 'fHwoay5hc3NldFBhdGhzPVtdKSxrLnN0cmVhbVNlcnZpY2VOYW1lfHwoay5zdHJlYW1TZXJ2aWNlTmFtZT0iY2xpY2ttZSIpLGt9LE8udmFsaWRhdGVDb250ZXh0TmFtZT1mdW5jdGlvbihrLEUpe3JldHVybiBFIT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fGs/azoiU0FTIEpvYiBFeGVjdXRp'@;
put 'b24gY29tcHV0ZSBjb250ZXh0In0sTy52YWxpZGF0ZVNlcnZlck5hbWU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gRSE9PUkuU2VydmVyVHlwZS5TYXM5fHxrP2s6IlNBU0FwcCJ9LE8udmFsaWRhdGVTeW5jRm9sZGVyPWZ1bmN0aW9uKGspe2lmKCJzdHJpbmciPT10eXBlb2YgayYmaylyZXR1cm4g'@;
put 'a30sTy52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPWZ1bmN0aW9uKGssRSl7cmV0dXJuIEUhPT1JLlNlcnZlclR5cGUuU2FzOXx8az9rOiJGb3VuZGF0aW9uIn0sTy52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0Rp'@;
put 'cmVjdG9yaWVzIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuZm9yRWFjaChmdW5jdGlvbihFKXtpZighRS5sb2NhbHx8IUUucmVtb3RlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3J5IGNvbmZpZzogdmFsdWVzIG9mIHBy'@;
put 'b3BlcnR5ICdsb2NhbCcgYW5kICdyZW1vdGUgY2FuIG5vdCBiZSBlbXB0eSBvciB1bmRlZmluZWQiKX0pLGt9fSwyOTI3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRSl7cmV0'@;
put 'dXJuIEUmJkUuX19lc01vZHVsZT9FOntkZWZhdWx0OkV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kZWNvZGVGcm9tQmFzZTY0PU8uZW5jb2RlVG9CYXNlNjQ9dm9pZCAwO3ZhciBJPUsoUig1ODM1KSksaz0ie3Nhc2pzX2VuY29kZWR9IjtP'@;
put 'LmVuY29kZVRvQmFzZTY0PWZ1bmN0aW9uKEUpe3ZhciBqPUkuZGVmYXVsdC5yYW5kb21CeXRlcygxMDApLnRvU3RyaW5nKCJoZXgiKSxWPXouZnJvbShqK0UpLnRvU3RyaW5nKCJiYXNlNjQiKTtyZXR1cm4gaytWfSxPLmRlY29kZUZyb21CYXNlNjQ9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuc3Rh'@;
put 'cnRzV2l0aChrKT8oRT1FLnJlcGxhY2UoL157c2FzanNfZW5jb2RlZH0vLCIiKSx6LmZyb20oRSwiYmFzZTY0IikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjAwKSk6RX19LDU4MTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVl'@;
put 'OiEwfSksTy5ieXRlc1RvU2l6ZT12b2lkIDAsTy5ieXRlc1RvU2l6ZT1mdW5jdGlvbihSLHosSyl7aWYodm9pZCAwPT09eiYmKHo9MSksdm9pZCAwPT09SyYmKEs9MTA5OTUxMTYyNzc3NiksMD09PVIpcmV0dXJuIjAgQiI7Uj1SPks/SzpSO3ZhciBJPXo8MD8wOnosaz1NYXRoLmZsb29yKE1h'@;
put 'dGgubG9nKFIpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oUi9NYXRoLnBvdygxMDI0LGspKS50b0ZpeGVkKEkpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW2tdfX0sODY1MzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksTy5jaHVuaz12b2lkIDAsTy5jaHVuaz1mdW5jdGlvbihSLHope3JldHVybiB2b2lkIDA9PT16JiYoej0yMjApLFIubGVuZ3RoPD16P1tSXTooUi5tYXRjaChuZXcgUmVnRXhwKCIuezEsIit6KyJ9IiwiZyIpKXx8W10pLmZpbHRlcihmdW5jdGlvbihLKXtyZXR1cm4hIUt9KX19'@;
put 'LDY0NTc6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFI9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKEssSSl7dmFyIGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmS1tTeW1ib2wuaXRlcmF0b3JdO2lmKCFrKXJldHVybiBLO3ZhciBFLGosVj1rLmNhbGwoSyksQj1bXTt0'@;
put 'cnl7Zm9yKDsodm9pZCAwPT09SXx8SS0tID4wKSYmIShFPVYubmV4dCgpKS5kb25lOylCLnB1c2goRS52YWx1ZSl9Y2F0Y2goWSl7aj17ZXJyb3I6WX19ZmluYWxseXt0cnl7RSYmIUUuZG9uZSYmKGs9Vi5yZXR1cm4pJiZrLmNhbGwoVil9ZmluYWxseXtpZihqKXRocm93IGouZXJyb3J9fXJl'@;
put 'dHVybiBCfSx6PXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oSyxJLGspe2lmKGt8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgRSxqPTAsVj1JLmxlbmd0aDtqPFY7aisrKSFFJiZqIGluIEl8fChFfHwoRT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJLDAsaikp'@;
put 'LEVbal09SVtqXSk7cmV0dXJuIEsuY29uY2F0KEV8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEkpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZGlmZj12b2lkIDAsTy5kaWZmPWZ1bmN0aW9uKEssSSl7dmFyIGs9Sy5maWx0ZXIoZnVu'@;
put 'Y3Rpb24oail7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBqPyFKU09OLnN0cmluZ2lmeShJKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeShqKSk6IUkuaW5jbHVkZXMoail9KSxFPUkuZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiJvYmplY3QiPT10eXBlb2Ygaj8hSlNPTi5zdHJpbmdpZnkoSyku'@;
put 'aW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkoaikpOiFLLmluY2x1ZGVzKGopfSk7cmV0dXJuIHooeihbXSxSKGspLCExKSxSKEUpLCExKX19LDE1Mjk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0RXhlY3V0'@;
put 'b3JQYXRoPXZvaWQgMDt2YXIgUj17U0FTVklZQToiL1NBU0pvYkV4ZWN1dGlvbiIsU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8ifTtPLmdldEV4ZWN1dG9yUGF0aD1mdW5jdGlvbih6KXtyZXR1cm4gej8oej16LnRvVXBwZXJDYXNlKCksUlt6XXx8IiIpOiIifX0sMzMxNjooTSxPLFIpPT57'@;
put 'InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldFRyZWVFeGFtcGxlPU8uaXNGaWxlVHJlZT12b2lkIDA7dmFyIHo9UigzOTAwKTtPLmlzRmlsZVRyZWU9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJkUubWVtYmVycyYmQXJyYXku'@;
put 'aXNBcnJheShFLm1lbWJlcnMpJiYwPT09RS5tZW1iZXJzLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4hSyhqKSYmIUkoaikmJiFrKGopfSkubGVuZ3RofTt2YXIgSz1mdW5jdGlvbihFKXtyZXR1cm4gRSYmInN0cmluZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXouTWVtYmVyVHlwZS5z'@;
put 'ZXJ2aWNlJiYic3RyaW5nIj09dHlwZW9mIEUuY29kZX0sST1mdW5jdGlvbihFKXtyZXR1cm4gRSYmInN0cmluZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXouTWVtYmVyVHlwZS5maWxlJiYic3RyaW5nIj09dHlwZW9mIEUuY29kZX0saz1mdW5jdGlvbihFKXtyZXR1cm4gRSYmInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXouTWVtYmVyVHlwZS5mb2xkZXImJkUubWVtYmVycyYmQXJyYXkuaXNBcnJheShFLm1lbWJlcnMpJiYwPT09RS5tZW1iZXJzLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4hSyhqKSYmIUkoaikmJiFrKGopfSkubGVuZ3RofTtPLmdldFRyZWVF'@;
put 'eGFtcGxlPWZ1bmN0aW9uKCl7cmV0dXJue21lbWJlcnM6W3tuYW1lOiJqb2JzIix0eXBlOnouTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6ImV4dHJhY3QiLHR5cGU6ei5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToibWFrZWRhdGExIix0eXBlOnouTWVtYmVyVHlw'@;
put 'ZS5zZXJ2aWNlLGNvZGU6IiVwdXQgSGVsbG8gV29ybGQhOyJ9XX1dfV19fX0sNjI2NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihYLFUscSxlZSl7dm9pZCAwPT09ZWUmJihlZT1x'@;
put 'KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCxlZSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVVtxXX19KX06ZnVuY3Rpb24oWCxVLHEsZWUpe3ZvaWQgMD09PWVlJiYoZWU9cSksWFtlZV09VVtxXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKFgs'@;
put 'VSl7Zm9yKHZhciBxIGluIFgpImRlZmF1bHQiPT09cXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUscSl8fHooVSxYLHEpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jaHVuaz1PLmRpZmY9Ty5ieXRlc1RvU2l6ZT1P'@;
put 'LmdldEV4ZWN1dG9yUGF0aD1PLmRlY29kZUZyb21CYXNlNjQ9Ty5lbmNvZGVUb0Jhc2U2ND1PLnVybE9yaWdpbj1PLmdlbmVyYXRlUGF0aEZvclNhcz1PLmdldE1hY3Jvc1BhdGg9Ty5lc2NhcGVXaW5TbGFzaGVzPU8uaXNMaW51eD1PLmlzV2luZG93cz1PLnVuaXFBcnJheT1PLmFzeW5jRm9y'@;
put 'RWFjaD1PLnV1aWR2ND12b2lkIDA7dmFyIEk9UigxMTMxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidXVpZHY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS51dWlkdjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImFzeW5jRm9yRWFjaCIse2VudW1lcmFi'@;
put 'bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuYXN5bmNGb3JFYWNofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ1bmlxQXJyYXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnVuaXFBcnJheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiaXNXaW5k'@;
put 'b3dzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1dpbmRvd3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImlzTGludXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzTGludXh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8s'@;
put 'ImVzY2FwZVdpblNsYXNoZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmVzY2FwZVdpblNsYXNoZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldE1hY3Jvc1BhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdldE1hY3Jv'@;
put 'c1BhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdlbmVyYXRlUGF0aEZvclNhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2VuZXJhdGVQYXRoRm9yU2FzfX0pLEsoUigzMzE2KSxPKTt2YXIgaz1SKDk2NTIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShP'@;
put 'LCJ1cmxPcmlnaW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrLnVybE9yaWdpbn19KTt2YXIgRT1SKDI5MjcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJlbmNvZGVUb0Jhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuZW5jb2Rl'@;
put 'VG9CYXNlNjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImRlY29kZUZyb21CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmRlY29kZUZyb21CYXNlNjR9fSk7dmFyIGo9UigxNTI5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0RXhlY3V0b3JQ'@;
put 'YXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gai5nZXRFeGVjdXRvclBhdGh9fSk7dmFyIFY9Uig1ODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJieXRlc1RvU2l6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFYuYnl0ZXNUb1NpemV9'@;
put 'fSk7dmFyIEI9Uig2NDU3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZGlmZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuZGlmZn19KTt2YXIgWT1SKDg2NTMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjaHVuayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIFkuY2h1bmt9fSl9LDk2NTI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udXJsT3JpZ2luPXZvaWQgMCxPLnVybE9yaWdpbj1mdW5jdGlvbihSKXtpZigiIj09PVIpcmV0dXJuIFI7dmFy'@;
put 'IHo7dHJ5e3o9bmV3IFVSTChSKS5vcmlnaW59Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVSTC4iKX1yZXR1cm4gen19LDExMzE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkp'@;
put 'e3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFy'@;
put 'IHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9u'@;
put 'KGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJvdzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1i'@;
put 'b2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4i'@;
put 'KTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVl'@;
put 'XSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVl'@;
put 'O2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0mJnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVsw'@;
put 'XSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2'@;
put 'LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19LGs9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGope3JldHVybiBqJiZqLl9fZXNNb2R1bGU/'@;
put 'ajp7ZGVmYXVsdDpqfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVQYXRoRm9yU2FzPU8uZ2V0TWFjcm9zUGF0aD1PLmVzY2FwZVdpblNsYXNoZXM9Ty5pc0xpbnV4PU8uaXNXaW5kb3dzPU8udW5pcUFycmF5PU8udXVpZHY0PU8u'@;
put 'YXN5bmNGb3JFYWNoPXZvaWQgMDt2YXIgRT1rKFIoMjUyMCkpO08uYXN5bmNGb3JFYWNoPWZ1bmN0aW9uKGosVil7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEI7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihZKXtzd2l0Y2goWS5sYWJlbCl7Y2FzZSAwOkI9MCxZ'@;
put 'LmxhYmVsPTE7Y2FzZSAxOnJldHVybiBCPGoubGVuZ3RoP1s0LFYoaltCXSxCLGopXTpbMyw0XTtjYXNlIDI6WS5zZW50KCksWS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gQisrLFszLDFdO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sTy51dWlkdjQ9ZnVuY3Rpb24oKXtyZXR1cm4ieHh4eHh4eHgt'@;
put 'eHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csZnVuY3Rpb24oail7dmFyIFY9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PWo/VjozJlZ8OCkudG9TdHJpbmcoMTYpfSl9LE8udW5pcUFycmF5PWZ1bmN0aW9uKGope3JldHVybiBBcnJheS5mcm9tKG5l'@;
put 'dyBTZXQoaikpfSxPLmlzV2luZG93cz1mdW5jdGlvbigpe3JldHVybiJ3aW4zMiI9PT16LnBsYXRmb3JtfSxPLmlzTGludXg9ZnVuY3Rpb24oKXtyZXR1cm4ibGludXgiPT09ei5wbGF0Zm9ybX0sTy5lc2NhcGVXaW5TbGFzaGVzPWZ1bmN0aW9uKGope3JldHVybigwLE8uaXNXaW5kb3dzKSgp'@;
put 'P2oucmVwbGFjZSgvXFwvZywiXFxcXCIpOmp9LE8uZ2V0TWFjcm9zUGF0aD1mdW5jdGlvbigpe3JldHVybiBFLmRlZmF1bHQuam9pbigiLyIsIi4uIiwibWFjcm9zIil9LE8uZ2VuZXJhdGVQYXRoRm9yU2FzPWZ1bmN0aW9uKGope3JldHVybiBqLnJlcGxhY2UoL1xcL2csIi8iKX19LDk4MDk6'@;
put 'KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5iaWdudW09Uig0NTkwKSx6LmRlZmluZT1SKDI1MDApLmRlZmluZSx6LmJhc2U9UigxOTc5KSx6LmNvbnN0YW50cz1SKDY4MjYpLHouZGVjb2RlcnM9Uig4MzA3KSx6LmVuY29kZXJzPVIoNjU3OSl9LDI1MDA6KE0sTyxSKT0+eyJ1'@;
put 'c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNjU3OSksSz1SKDgzMDcpLEk9Uig1NzE3KTtmdW5jdGlvbiBrKEUsail7dGhpcy5uYW1lPUUsdGhpcy5ib2R5PWosdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fU8uZGVmaW5lPWZ1bmN0aW9uKEUsail7cmV0dXJuIG5ldyBrKEUsail9LGsu'@;
put 'cHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihFKXtjb25zdCBqPXRoaXMubmFtZTtmdW5jdGlvbiBWKEIpe3RoaXMuX2luaXROYW1lZChCLGopfXJldHVybiBJKFYsRSksVi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihCLFkpe0UuY2FsbCh0aGlzLEIsWSl9LG5ldyBWKHRo'@;
put 'aXMpfSxrLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShFPUV8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbRV09dGhpcy5fY3JlYXRlTmFtZWQoS1tFXSkpLHRoaXMuZGVjb2RlcnNbRV19LGsucHJvdG90eXBlLmRl'@;
put 'Y29kZT1mdW5jdGlvbihFLGosVil7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoaikuZGVjb2RlKEUsVil9LGsucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KEU9RXx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tFXT10'@;
put 'aGlzLl9jcmVhdGVOYW1lZCh6W0VdKSksdGhpcy5lbmNvZGVyc1tFXX0say5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEUsaixWKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihqKS5lbmNvZGUoRSxWKX19LDY2MjU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyksSz1S'@;
put 'KDg0NjUpLmIsST1SKDIzOTkpLkJ1ZmZlcjtmdW5jdGlvbiBrKGosVil7Sy5jYWxsKHRoaXMsViksSS5pc0J1ZmZlcihqKT8odGhpcy5iYXNlPWosdGhpcy5vZmZzZXQ9MCx0aGlzLmxlbmd0aD1qLmxlbmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIEUoaixW'@;
put 'KXtpZihBcnJheS5pc0FycmF5KGopKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT1qLm1hcChmdW5jdGlvbihCKXtyZXR1cm4gRS5pc0VuY29kZXJCdWZmZXIoQil8fChCPW5ldyBFKEIsVikpLHRoaXMubGVuZ3RoKz1CLmxlbmd0aCxCfSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2Yg'@;
put 'ail7aWYoISgwPD1qJiZqPD0yNTUpKXJldHVybiBWLmVycm9yKCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1qLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGopdGhpcy52YWx1ZT1qLHRoaXMubGVuZ3RoPUkuYnl0ZUxlbmd0aChqKTtl'@;
put 'bHNle2lmKCFJLmlzQnVmZmVyKGopKXJldHVybiBWLmVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAiK3R5cGVvZiBqKTt0aGlzLnZhbHVlPWosdGhpcy5sZW5ndGg9ai5sZW5ndGh9fXooayxLKSxPLkM9ayxrLmlzRGVjb2RlckJ1ZmZlcj1mdW5jdGlvbihqKXtyZXR1cm4gaiBpbnN0YW5jZW9m'@;
put 'IGt8fCJvYmplY3QiPT10eXBlb2YgaiYmSS5pc0J1ZmZlcihqLmJhc2UpJiYiRGVjb2RlckJ1ZmZlciI9PT1qLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2Ygai5vZmZzZXQmJiJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnNhdmUmJiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBqLnJlc3RvcmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLmlzRW1wdHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnJlYWRVSW50OCYmImZ1bmN0aW9uIj09dHlwZW9mIGouc2tpcCYmImZ1bmN0aW9uIj09dHlwZW9mIGoucmF3fSxrLnByb3RvdHlwZS5zYXZlPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjpLLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxrLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGope2NvbnN0IFY9bmV3IGsodGhpcy5iYXNlKTtyZXR1cm4gVi5vZmZzZXQ9ai5vZmZzZXQsVi5sZW5ndGg9dGhp'@;
put 'cy5vZmZzZXQsdGhpcy5vZmZzZXQ9ai5vZmZzZXQsSy5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsai5yZXBvcnRlciksVn0say5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxrLnByb3RvdHlwZS5yZWFkVUludDg9ZnVu'@;
put 'Y3Rpb24oail7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihqfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LGsucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oaixWKXtpZighKHRoaXMub2Zm'@;
put 'c2V0K2o8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihWfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7Y29uc3QgQj1uZXcgayh0aGlzLmJhc2UpO3JldHVybiBCLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsQi5vZmZzZXQ9dGhpcy5vZmZzZXQsQi5sZW5ndGg9'@;
put 'dGhpcy5vZmZzZXQraix0aGlzLm9mZnNldCs9aixCfSxrLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShqP2oub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sTy5SPUUsRS5pc0VuY29kZXJCdWZmZXI9ZnVuY3Rpb24oail7cmV0dXJuIGog'@;
put 'aW5zdGFuY2VvZiBFfHwib2JqZWN0Ij09dHlwZW9mIGomJiJFbmNvZGVyQnVmZmVyIj09PWouY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBqLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGouam9pbn0sRS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihqLFYpe3JldHVybiBq'@;
put 'fHwoaj1JLmFsbG9jKHRoaXMubGVuZ3RoKSksVnx8KFY9MCksMD09PXRoaXMubGVuZ3RofHwoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oQil7Qi5qb2luKGosViksVis9Qi5sZW5ndGh9KTooIm51bWJlciI9PXR5cGVvZiB0aGlzLnZhbHVl'@;
put 'P2pbVl09dGhpcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWU/ai53cml0ZSh0aGlzLnZhbHVlLFYpOkkuaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weShqLFYpLFYrPXRoaXMubGVuZ3RoKSksan19LDE5Nzk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25z'@;
put 'dCB6PU87ei5SZXBvcnRlcj1SKDg0NjUpLmIsei5EZWNvZGVyQnVmZmVyPVIoNjYyNSkuQyx6LkVuY29kZXJCdWZmZXI9Uig2NjI1KS5SLHouTm9kZT1SKDE5NDkpfSwxOTQ5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg0NjUpLmIsSz1SKDY2MjUpLlIsST1SKDY2MjUpLkMs'@;
put 'az1SKDk3NDYpLEU9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwi'@;
put 'aXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxqPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMi'@;
put 'XS5jb25jYXQoRSk7ZnVuY3Rpb24gVihZLFgsVSl7Y29uc3QgcT17fTt0aGlzLl9iYXNlU3RhdGU9cSxxLm5hbWU9VSxxLmVuYz1ZLHEucGFyZW50PVh8fG51bGwscS5jaGlsZHJlbj1udWxsLHEudGFnPW51bGwscS5hcmdzPW51bGwscS5yZXZlcnNlQXJncz1udWxsLHEuY2hvaWNlPW51bGws'@;
put 'cS5vcHRpb25hbD0hMSxxLmFueT0hMSxxLm9iaj0hMSxxLnVzZT1udWxsLHEudXNlRGVjb2Rlcj1udWxsLHEua2V5PW51bGwscS5kZWZhdWx0PW51bGwscS5leHBsaWNpdD1udWxsLHEuaW1wbGljaXQ9bnVsbCxxLmNvbnRhaW5zPW51bGwscS5wYXJlbnR8fChxLmNoaWxkcmVuPVtdLHRoaXMu'@;
put 'X3dyYXAoKSl9TS5leHBvcnRzPVY7Y29uc3QgQj1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1w'@;
put 'bGljaXQiLCJjb250YWlucyJdO1YucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7Y29uc3QgWT10aGlzLl9iYXNlU3RhdGUsWD17fTtCLmZvckVhY2goZnVuY3Rpb24ocSl7WFtxXT1ZW3FdfSk7Y29uc3QgVT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihYLnBhcmVudCk7cmV0dXJuIFUuX2Jhc2VT'@;
put 'dGF0ZT1YLFV9LFYucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7Y29uc3QgWT10aGlzLl9iYXNlU3RhdGU7ai5mb3JFYWNoKGZ1bmN0aW9uKFgpe3RoaXNbWF09ZnVuY3Rpb24oKXtjb25zdCBVPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBZLmNoaWxkcmVuLnB1c2goVSks'@;
put 'VVtYXS5hcHBseShVLGFyZ3VtZW50cyl9fSx0aGlzKX0sVi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7ayhudWxsPT09WC5wYXJlbnQpLFkuY2FsbCh0aGlzKSxYLmNoaWxkcmVuPVguY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVy'@;
put 'biBVLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksay5lcXVhbChYLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sVi5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGUsVT1ZLmZp'@;
put 'bHRlcihmdW5jdGlvbihxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO1k9WS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIShxIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1VLmxlbmd0aCYmKGsobnVsbD09PVguY2hpbGRyZW4p'@;
put 'LFguY2hpbGRyZW49VSxVLmZvckVhY2goZnVuY3Rpb24ocSl7cS5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PVkubGVuZ3RoJiYoayhudWxsPT09WC5hcmdzKSxYLmFyZ3M9WSxYLnJldmVyc2VBcmdzPVkubWFwKGZ1bmN0aW9uKHEpe2lmKCJvYmplY3QiIT10eXBlb2YgcXx8'@;
put 'cS5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gcTtjb25zdCBlZT17fTtyZXR1cm4gT2JqZWN0LmtleXMocSkuZm9yRWFjaChmdW5jdGlvbih0ZSl7dGU9PSgwfHRlKSYmKHRlfD0wKSxlZVtxW3RlXV09dGV9KSxlZX0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2Rl'@;
put 'Y29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVs'@;
put 'bCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oWSl7Vi5wcm90b3R5cGVbWV09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoWSsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksRS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKFkpe1YucHJvdG90eXBlW1ldPWZ1bmN0aW9uKCl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGUsVT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBrKG51bGw9PT1YLnRhZyksWC50YWc9WSx0aGlzLl91c2VBcmdzKFUpLHRoaXN9fSksVi5wcm90b3R5'@;
put 'cGUudXNlPWZ1bmN0aW9uKFkpe2soWSk7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVgudXNlKSxYLnVzZT1ZLHRoaXN9LFYucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxWLnByb3Rv'@;
put 'dHlwZS5kZWY9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVguZGVmYXVsdCksWC5kZWZhdWx0PVksWC5vcHRpb25hbD0hMCx0aGlzfSxWLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1'@;
put 'cm4gayhudWxsPT09WC5leHBsaWNpdCYmbnVsbD09PVguaW1wbGljaXQpLFguZXhwbGljaXQ9WSx0aGlzfSxWLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5leHBsaWNpdCYmbnVsbD09PVguaW1wbGljaXQp'@;
put 'LFguaW1wbGljaXQ9WSx0aGlzfSxWLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXtjb25zdCBZPXRoaXMuX2Jhc2VTdGF0ZSxYPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFkub2JqPSEwLDAhPT1YLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhYKSx0aGlzfSxW'@;
put 'LnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVgua2V5KSxYLmtleT1ZLHRoaXN9LFYucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LFYucHJvdG90eXBlLmNo'@;
put 'b2ljZT1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5jaG9pY2UpLFguY2hvaWNlPVksdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhZKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIFlbVV19KSksdGhpc30sVi5wcm90b3R5cGUuY29udGFpbnM9'@;
put 'ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVgudXNlKSxYLmNvbnRhaW5zPVksdGhpc30sVi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1VLnBhcmVudClyZXR1cm4gWS53'@;
put 'cmFwUmVzdWx0KFUuY2hpbGRyZW5bMF0uX2RlY29kZShZLFgpKTtsZXQgcSxlZT1VLmRlZmF1bHQsdGU9ITAsb2U9bnVsbDtpZihudWxsIT09VS5rZXkmJihvZT1ZLmVudGVyS2V5KFUua2V5KSksVS5vcHRpb25hbCl7bGV0IHNlPW51bGw7aWYobnVsbCE9PVUuZXhwbGljaXQ/c2U9VS5leHBs'@;
put 'aWNpdDpudWxsIT09VS5pbXBsaWNpdD9zZT1VLmltcGxpY2l0Om51bGwhPT1VLnRhZyYmKHNlPVUudGFnKSxudWxsIT09c2V8fFUuYW55KXtpZih0ZT10aGlzLl9wZWVrVGFnKFksc2UsVS5hbnkpLFkuaXNFcnJvcih0ZSkpcmV0dXJuIHRlfWVsc2V7Y29uc3QgaGU9WS5zYXZlKCk7dHJ5e251'@;
put 'bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLFksWCk6dGhpcy5fZGVjb2RlQ2hvaWNlKFksWCksdGU9ITB9Y2F0Y2h7dGU9ITF9WS5yZXN0b3JlKGhlKX19aWYoVS5vYmomJnRlJiYocT1ZLmVudGVyT2JqZWN0KCkpLHRlKXtpZihudWxsIT09VS5leHBsaWNpdCl7Y29u'@;
put 'c3QgaGU9dGhpcy5fZGVjb2RlVGFnKFksVS5leHBsaWNpdCk7aWYoWS5pc0Vycm9yKGhlKSlyZXR1cm4gaGU7WT1oZX1jb25zdCBzZT1ZLm9mZnNldDtpZihudWxsPT09VS51c2UmJm51bGw9PT1VLmNob2ljZSl7bGV0IGhlO1UuYW55JiYoaGU9WS5zYXZlKCkpO2NvbnN0IHVlPXRoaXMuX2Rl'@;
put 'Y29kZVRhZyhZLG51bGwhPT1VLmltcGxpY2l0P1UuaW1wbGljaXQ6VS50YWcsVS5hbnkpO2lmKFkuaXNFcnJvcih1ZSkpcmV0dXJuIHVlO1UuYW55P2VlPVkucmF3KGhlKTpZPXVlfWlmKFgmJlgudHJhY2smJm51bGwhPT1VLnRhZyYmWC50cmFjayhZLnBhdGgoKSxzZSxZLmxlbmd0aCwidGFn'@;
put 'Z2VkIiksWCYmWC50cmFjayYmbnVsbCE9PVUudGFnJiZYLnRyYWNrKFkucGF0aCgpLFkub2Zmc2V0LFkubGVuZ3RoLCJjb250ZW50IiksVS5hbnl8fChlZT1udWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxZLFgpOnRoaXMuX2RlY29kZUNob2ljZShZLFgpKSxZLmlz'@;
put 'RXJyb3IoZWUpKXJldHVybiBlZTtpZihVLmFueXx8bnVsbCE9PVUuY2hvaWNlfHxudWxsPT09VS5jaGlsZHJlbnx8VS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGhlKXtoZS5fZGVjb2RlKFksWCl9KSxVLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1VLnRhZ3x8ImJpdHN0ciI9PT1VLnRhZykp'@;
put 'e2NvbnN0IGhlPW5ldyBJKGVlKTtlZT10aGlzLl9nZXRVc2UoVS5jb250YWlucyxZLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShoZSxYKX19cmV0dXJuIFUub2JqJiZ0ZSYmKGVlPVkubGVhdmVPYmplY3QocSkpLG51bGw9PT1VLmtleXx8bnVsbD09PWVlJiYhMCE9PXRlP251bGwhPT1v'@;
put 'ZSYmWS5leGl0S2V5KG9lKTpZLmxlYXZlS2V5KG9lLFUua2V5LGVlKSxlZX0sVi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oWSxYLFUpe2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09WXx8InNldCI9PT1ZP251bGw6InNlcW9mIj09PVl8fCJzZXRvZiI9'@;
put 'PT1ZP3RoaXMuX2RlY29kZUxpc3QoWCxZLHEuYXJnc1swXSxVKTovc3RyJC8udGVzdChZKT90aGlzLl9kZWNvZGVTdHIoWCxZLFUpOiJvYmppZCI9PT1ZJiZxLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoWCxxLmFyZ3NbMF0scS5hcmdzWzFdLFUpOiJvYmppZCI9PT1ZP3RoaXMuX2RlY29kZU9i'@;
put 'amlkKFgsbnVsbCxudWxsLFUpOiJnZW50aW1lIj09PVl8fCJ1dGN0aW1lIj09PVk/dGhpcy5fZGVjb2RlVGltZShYLFksVSk6Im51bGxfIj09PVk/dGhpcy5fZGVjb2RlTnVsbChYLFUpOiJib29sIj09PVk/dGhpcy5fZGVjb2RlQm9vbChYLFUpOiJvYmpEZXNjIj09PVk/dGhpcy5fZGVjb2Rl'@;
put 'U3RyKFgsWSxVKToiaW50Ij09PVl8fCJlbnVtIj09PVk/dGhpcy5fZGVjb2RlSW50KFgscS5hcmdzJiZxLmFyZ3NbMF0sVSk6bnVsbCE9PXEudXNlP3RoaXMuX2dldFVzZShxLnVzZSxYLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShYLFUpOlguZXJyb3IoInVua25vd24gdGFnOiAiK1kp'@;
put 'fSxWLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFUudXNlRGVjb2Rlcj10aGlzLl91c2UoWSxYKSxrKG51bGw9PT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuX2Jh'@;
put 'c2VTdGF0ZS5jaGlsZHJlblswXSxVLmltcGxpY2l0IT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLmNsb25lKCksVS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9VS5pbXBsaWNpdCksVS51c2VEZWNvZGVyfSxWLnBy'@;
put 'b3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGU7bGV0IHE9bnVsbCxlZT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoVS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24odGUpe2NvbnN0IG9lPVkuc2F2ZSgpLHNlPVUuY2hvaWNlW3RlXTt0cnl7Y29u'@;
put 'c3QgaGU9c2UuX2RlY29kZShZLFgpO2lmKFkuaXNFcnJvcihoZSkpcmV0dXJuITE7cT17dHlwZTp0ZSx2YWx1ZTpoZX0sZWU9ITB9Y2F0Y2h7cmV0dXJuIFkucmVzdG9yZShvZSksITF9cmV0dXJuITB9LHRoaXMpLGVlP3E6WS5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LFYucHJvdG90'@;
put 'eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKFkpe3JldHVybiBuZXcgSyhZLHRoaXMucmVwb3J0ZXIpfSxWLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKFksWCxVKXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsIT09cS5kZWZhdWx0JiZxLmRlZmF1bHQ9PT1ZKXJl'@;
put 'dHVybjtjb25zdCBlZT10aGlzLl9lbmNvZGVWYWx1ZShZLFgsVSk7cmV0dXJuIHZvaWQgMD09PWVlfHx0aGlzLl9za2lwRGVmYXVsdChlZSxYLFUpP3ZvaWQgMDplZX0sVi5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKFksWCxVKXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtpZihu'@;
put 'dWxsPT09cS5wYXJlbnQpcmV0dXJuIHEuY2hpbGRyZW5bMF0uX2VuY29kZShZLFh8fG5ldyB6KTtsZXQgZWU9bnVsbDtpZih0aGlzLnJlcG9ydGVyPVgscS5vcHRpb25hbCYmdm9pZCAwPT09WSl7aWYobnVsbD09PXEuZGVmYXVsdClyZXR1cm47WT1xLmRlZmF1bHR9bGV0IHRlPW51bGwsb2U9'@;
put 'ITE7aWYocS5hbnkpZWU9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihZKTtlbHNlIGlmKHEuY2hvaWNlKWVlPXRoaXMuX2VuY29kZUNob2ljZShZLFgpO2Vsc2UgaWYocS5jb250YWlucyl0ZT10aGlzLl9nZXRVc2UocS5jb250YWlucyxVKS5fZW5jb2RlKFksWCksb2U9ITA7ZWxzZSBpZihx'@;
put 'LmNoaWxkcmVuKXRlPXEuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHNlKXtpZigibnVsbF8iPT09c2UuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHNlLl9lbmNvZGUobnVsbCxYLFkpO2lmKG51bGw9PT1zZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gWC5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBr'@;
put 'ZXkiKTtjb25zdCBoZT1YLmVudGVyS2V5KHNlLl9iYXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIFkpcmV0dXJuIFguZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO2NvbnN0IHVlPXNlLl9lbmNvZGUoWVtzZS5fYmFzZVN0YXRlLmtleV0s'@;
put 'WCxZKTtyZXR1cm4gWC5sZWF2ZUtleShoZSksdWV9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihzZSl7cmV0dXJuIHNlfSksdGU9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0ZSk7ZWxzZSBpZigic2Vxb2YiPT09cS50YWd8fCJzZXRvZiI9PT1xLnRhZyl7aWYoIXEuYXJnc3x8MSE9PXEuYXJn'@;
put 'cy5sZW5ndGgpcmV0dXJuIFguZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitxLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoWSkpcmV0dXJuIFguZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTtjb25zdCBzZT10aGlzLmNsb25lKCk7c2UuX2Jhc2VTdGF0ZS5p'@;
put 'bXBsaWNpdD1udWxsLHRlPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWS5tYXAoZnVuY3Rpb24oaGUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sWSkuX2VuY29kZShoZSxYKX0sc2UpKX1lbHNlIG51bGwhPT1xLnVzZT9lZT10aGlzLl9nZXRVc2UocS51'@;
put 'c2UsVSkuX2VuY29kZShZLFgpOih0ZT10aGlzLl9lbmNvZGVQcmltaXRpdmUocS50YWcsWSksb2U9ITApO2lmKCFxLmFueSYmbnVsbD09PXEuY2hvaWNlKXtjb25zdCBzZT1udWxsIT09cS5pbXBsaWNpdD9xLmltcGxpY2l0OnEudGFnLGhlPW51bGw9PT1xLmltcGxpY2l0PyJ1bml2ZXJzYWwi'@;
put 'OiJjb250ZXh0IjtudWxsPT09c2U/bnVsbD09PXEudXNlJiZYLmVycm9yKCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5IGZvciAudXNlKCkiKTpudWxsPT09cS51c2UmJihlZT10aGlzLl9lbmNvZGVDb21wb3NpdGUoc2Usb2UsaGUsdGUpKX1yZXR1cm4gbnVsbCE9PXEuZXhwbGljaXQmJihl'@;
put 'ZT10aGlzLl9lbmNvZGVDb21wb3NpdGUocS5leHBsaWNpdCwhMSwiY29udGV4dCIsZWUpKSxlZX0sVi5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlLHE9VS5jaG9pY2VbWS50eXBlXTtyZXR1cm4gcXx8ayghMSxZLnR5cGUrIiBu'@;
put 'b3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhVLmNob2ljZSkpKSxxLl9lbmNvZGUoWS52YWx1ZSxYKX0sVi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KFkpKXJldHVy'@;
put 'biB0aGlzLl9lbmNvZGVTdHIoWCxZKTtpZigib2JqaWQiPT09WSYmVS5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChYLFUucmV2ZXJzZUFyZ3NbMF0sVS5hcmdzWzFdKTtpZigib2JqaWQiPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoWCxudWxsLG51bGwpO2lmKCJnZW50aW1l'@;
put 'Ij09PVl8fCJ1dGN0aW1lIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoWCxZKTtpZigibnVsbF8iPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09WXx8ImVudW0iPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlSW50KFgsVS5hcmdzJiZVLnJldmVyc2VBcmdzWzBd'@;
put 'KTtpZigiYm9vbCI9PT1ZKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKFgpO2lmKCJvYmpEZXNjIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihYLFkpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK1kpfSxWLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oWSl7cmV0'@;
put 'dXJuL15bMC05IF0qJC8udGVzdChZKX0sVi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oWSl7cmV0dXJuL15bQS1aYS16MC05ICcoKSssLS4vOj0/XSokLy50ZXN0KFkpfX0sODQ2NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KTtmdW5jdGlvbiBLKGspe3Ro'@;
put 'aXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczprfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIEkoayxFKXt0aGlzLnBhdGg9ayx0aGlzLnJldGhyb3coRSl9Ty5iPUssSy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihrKXtyZXR1cm4gayBpbnN0YW5jZW9mIEl9'@;
put 'LEsucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajprLm9iaixwYXRoTGVuOmsucGF0aC5sZW5ndGh9fSxLLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtFLm9iaj1r'@;
put 'Lm9iaixFLnBhdGg9RS5wYXRoLnNsaWNlKDAsay5wYXRoTGVuKX0sSy5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKGspfSxLLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fcmVwb3J0'@;
put 'ZXJTdGF0ZTtFLnBhdGg9RS5wYXRoLnNsaWNlKDAsay0xKX0sSy5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24oayxFLGope2NvbnN0IFY9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkoayksbnVsbCE9PVYub2JqJiYoVi5vYmpbRV09ail9LEsucHJvdG90eXBlLnBhdGg9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0sSy5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX3JlcG9ydGVyU3RhdGUsRT1rLm9iajtyZXR1cm4gay5vYmo9e30sRX0sSy5wcm90b3R5cGUubGVhdmVPYmplY3Q9'@;
put 'ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9yZXBvcnRlclN0YXRlLGo9RS5vYmo7cmV0dXJuIEUub2JqPWssan0sSy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oayl7bGV0IEU7Y29uc3Qgaj10aGlzLl9yZXBvcnRlclN0YXRlLFY9ayBpbnN0YW5jZW9mIEk7aWYoRT1WP2s6bmV3IEkoai5w'@;
put 'YXRoLm1hcChmdW5jdGlvbihCKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoQikrIl0ifSkuam9pbigiIiksay5tZXNzYWdlfHxrLGsuc3RhY2spLCFqLm9wdGlvbnMucGFydGlhbCl0aHJvdyBFO3JldHVybiBWfHxqLmVycm9ycy5wdXNoKEUpLEV9LEsucHJvdG90eXBlLndyYXBSZXN1bHQ9'@;
put 'ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBFLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcihrKT9udWxsOmssZXJyb3JzOkUuZXJyb3JzfTprfSx6KEksRXJyb3IpLEkucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24oayl7aWYodGhp'@;
put 'cy5tZXNzYWdlPWsrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsSSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKEUpe3RoaXMuc3Rh'@;
put 'Y2s9RS5zdGFja31yZXR1cm4gdGhpc319LDE2MDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBSKHope2NvbnN0IEs9e307cmV0dXJuIE9iamVjdC5rZXlzKHopLmZvckVhY2goZnVuY3Rpb24oSSl7KDB8SSk9PUkmJihJfD0wKSxLW3pbSV1dPUl9KSxLfU8udGFnQ2xhc3M9ezA6InVu'@;
put 'aXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxPLnRhZ0NsYXNzQnlOYW1lPVIoTy50YWdDbGFzcyksTy50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNj'@;
put 'Iiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0'@;
put 'aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LE8udGFnQnlOYW1lPVIoTy50YWcpfSw2ODI2OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouX3JldmVy'@;
put 'c2U9ZnVuY3Rpb24oSyl7Y29uc3QgST17fTtyZXR1cm4gT2JqZWN0LmtleXMoSykuZm9yRWFjaChmdW5jdGlvbihrKXsoMHxrKT09ayYmKGt8PTApLElbS1trXV09a30pLEl9LHouZGVyPVIoMTYwKX0sMTY3MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoNDU5'@;
put 'MCksST1SKDY2MjUpLkMsaz1SKDE5NDkpLEU9UigxNjApO2Z1bmN0aW9uIGooWCl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPVgubmFtZSx0aGlzLmVudGl0eT1YLHRoaXMudHJlZT1uZXcgVix0aGlzLnRyZWUuX2luaXQoWC5ib2R5KX1mdW5jdGlvbiBWKFgpe2suY2FsbCh0aGlzLCJkZXIi'@;
put 'LFgpfWZ1bmN0aW9uIEIoWCxVKXtsZXQgcT1YLnJlYWRVSW50OChVKTtpZihYLmlzRXJyb3IocSkpcmV0dXJuIHE7Y29uc3QgZWU9RS50YWdDbGFzc1txPj42XSx0ZT0wPT0oMzImcSk7aWYoMzE9PSgzMSZxKSl7bGV0IG9lPXE7Zm9yKHE9MDsxMjg9PSgxMjgmb2UpOyl7aWYob2U9WC5yZWFk'@;
put 'VUludDgoVSksWC5pc0Vycm9yKG9lKSlyZXR1cm4gb2U7cTw8PTcscXw9MTI3Jm9lfX1lbHNlIHEmPTMxO3JldHVybntjbHM6ZWUscHJpbWl0aXZlOnRlLHRhZzpxLHRhZ1N0cjpFLnRhZ1txXX19ZnVuY3Rpb24gWShYLFUscSl7bGV0IGVlPVgucmVhZFVJbnQ4KHEpO2lmKFguaXNFcnJvcihl'@;
put 'ZSkpcmV0dXJuIGVlO2lmKCFVJiYxMjg9PT1lZSlyZXR1cm4gbnVsbDtpZighKDEyOCZlZSkpcmV0dXJuIGVlO2NvbnN0IHRlPTEyNyZlZTtpZih0ZT40KXJldHVybiBYLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7ZWU9MDtmb3IobGV0IG9lPTA7b2U8dGU7b2UrKyl7ZWU8'@;
put 'PD04O2NvbnN0IHNlPVgucmVhZFVJbnQ4KHEpO2lmKFguaXNFcnJvcihzZSkpcmV0dXJuIHNlO2VlfD1zZX1yZXR1cm4gZWV9TS5leHBvcnRzPWosai5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIEkuaXNEZWNvZGVyQnVmZmVyKFgpfHwoWD1uZXcgSShYLFUpKSx0aGlz'@;
put 'LnRyZWUuX2RlY29kZShYLFUpfSx6KFYsayksVi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oWCxVLHEpe2lmKFguaXNFbXB0eSgpKXJldHVybiExO2NvbnN0IGVlPVguc2F2ZSgpLHRlPUIoWCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytVKyciJyk7cmV0dXJuIFguaXNFcnJvcih0ZSk/'@;
put 'dGU6KFgucmVzdG9yZShlZSksdGUudGFnPT09VXx8dGUudGFnU3RyPT09VXx8dGUudGFnU3RyKyJvZiI9PT1VfHxxKX0sVi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihYLFUscSl7Y29uc3QgZWU9QihYLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytVKyciJyk7aWYoWC5pc0Vy'@;
put 'cm9yKGVlKSlyZXR1cm4gZWU7bGV0IHRlPVkoWCxlZS5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK1UrJyInKTtpZihYLmlzRXJyb3IodGUpKXJldHVybiB0ZTtpZighcSYmZWUudGFnIT09VSYmZWUudGFnU3RyIT09VSYmZWUudGFnU3RyKyJvZiIhPT1VKXJldHVybiBY'@;
put 'LmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytVKyciJyk7aWYoZWUucHJpbWl0aXZlfHxudWxsIT09dGUpcmV0dXJuIFguc2tpcCh0ZSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK1UrJyInKTtjb25zdCBvZT1YLnNhdmUoKSxzZT10aGlzLl9za2lwVW50aWxFbmQoWCwnRmFp'@;
put 'bGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gWC5pc0Vycm9yKHNlKT9zZToodGU9WC5vZmZzZXQtb2Uub2Zmc2V0LFgucmVzdG9yZShvZSksWC5za2lwKHRlLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrVSsnIicpKX0sVi5w'@;
put 'cm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbihYLFUpe2Zvcig7Oyl7Y29uc3QgcT1CKFgsVSk7aWYoWC5pc0Vycm9yKHEpKXJldHVybiBxO2NvbnN0IGVlPVkoWCxxLnByaW1pdGl2ZSxVKTtpZihYLmlzRXJyb3IoZWUpKXJldHVybiBlZTtsZXQgdGU7aWYodGU9cS5wcmltaXRpdmV8'@;
put 'fG51bGwhPT1lZT9YLnNraXAoZWUpOnRoaXMuX3NraXBVbnRpbEVuZChYLFUpLFguaXNFcnJvcih0ZSkpcmV0dXJuIHRlO2lmKCJlbmQiPT09cS50YWdTdHIpYnJlYWt9fSxWLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihYLFUscSxlZSl7Y29uc3QgdGU9W107Zm9yKDshWC5pc0Vt'@;
put 'cHR5KCk7KXtjb25zdCBvZT10aGlzLl9wZWVrVGFnKFgsImVuZCIpO2lmKFguaXNFcnJvcihvZSkpcmV0dXJuIG9lO2NvbnN0IHNlPXEuZGVjb2RlKFgsImRlciIsZWUpO2lmKFguaXNFcnJvcihzZSkmJm9lKWJyZWFrO3RlLnB1c2goc2UpfXJldHVybiB0ZX0sVi5wcm90b3R5cGUuX2RlY29k'@;
put 'ZVN0cj1mdW5jdGlvbihYLFUpe2lmKCJiaXRzdHIiPT09VSl7Y29uc3QgcT1YLnJlYWRVSW50OCgpO3JldHVybiBYLmlzRXJyb3IocSk/cTp7dW51c2VkOnEsZGF0YTpYLnJhdygpfX1pZigiYm1wc3RyIj09PVUpe2NvbnN0IHE9WC5yYXcoKTtpZihxLmxlbmd0aCUyPT0xKXJldHVybiBYLmVy'@;
put 'cm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2xldCBlZT0iIjtmb3IobGV0IHRlPTA7dGU8cS5sZW5ndGgvMjt0ZSsrKWVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHEucmVhZFVJbnQxNkJFKDIqdGUpKTtyZXR1cm4gZWV9aWYoIm51bXN0ciI9'@;
put 'PT1VKXtjb25zdCBxPVgucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKHEpP3E6WC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1VfHwib2JqRGVzYyI9PT1VKXJl'@;
put 'dHVybiBYLnJhdygpO2lmKCJwcmludHN0ciI9PT1VKXtjb25zdCBxPVgucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIocSk/cTpYLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJl'@;
put 'dHVybi9zdHIkLy50ZXN0KFUpP1gucmF3KCkudG9TdHJpbmcoKTpYLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitVKyIgdW5zdXBwb3J0ZWQiKX0sVi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKFgsVSxxKXtsZXQgZWU7Y29uc3QgdGU9W107bGV0IG9lPTAsc2U9'@;
put 'MDtmb3IoOyFYLmlzRW1wdHkoKTspc2U9WC5yZWFkVUludDgoKSxvZTw8PTcsb2V8PTEyNyZzZSwhKDEyOCZzZSkmJih0ZS5wdXNoKG9lKSxvZT0wKTtpZigxMjgmc2UmJnRlLnB1c2gob2UpLGVlPXE/dGU6W3RlWzBdLzQwfDAsdGVbMF0lNDBdLmNvbmNhdCh0ZS5zbGljZSgxKSksVSl7bGV0'@;
put 'IGNlPVVbZWUuam9pbigiICIpXTt2b2lkIDA9PT1jZSYmKGNlPVVbZWUuam9pbigiLiIpXSksdm9pZCAwIT09Y2UmJihlZT1jZSl9cmV0dXJuIGVlfSxWLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihYLFUpe2NvbnN0IHE9WC5yYXcoKS50b1N0cmluZygpO2xldCBlZSx0ZSxvZSxz'@;
put 'ZSxoZSx1ZTtpZigiZ2VudGltZSI9PT1VKWVlPTB8cS5zbGljZSgwLDQpLHRlPTB8cS5zbGljZSg0LDYpLG9lPTB8cS5zbGljZSg2LDgpLHNlPTB8cS5zbGljZSg4LDEwKSxoZT0wfHEuc2xpY2UoMTAsMTIpLHVlPTB8cS5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1VKXJldHVy'@;
put 'biBYLmVycm9yKCJEZWNvZGluZyAiK1UrIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7ZWU9MHxxLnNsaWNlKDAsMiksdGU9MHxxLnNsaWNlKDIsNCksb2U9MHxxLnNsaWNlKDQsNiksc2U9MHxxLnNsaWNlKDYsOCksaGU9MHxxLnNsaWNlKDgsMTApLHVlPTB8cS5zbGljZSgxMCwxMiks'@;
put 'ZWU9ZWU8NzA/MmUzK2VlOjE5MDArZWV9cmV0dXJuIERhdGUuVVRDKGVlLHRlLTEsb2Usc2UsaGUsdWUsMCl9LFYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LFYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKFgpe2NvbnN0IFU9WC5yZWFkVUlu'@;
put 'dDgoKTtyZXR1cm4gWC5pc0Vycm9yKFUpP1U6MCE9PVV9LFYucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24oWCxVKXtjb25zdCBxPVgucmF3KCk7bGV0IGVlPW5ldyBLKHEpO3JldHVybiBVJiYoZWU9VVtlZS50b1N0cmluZygxMCldfHxlZSksZWV9LFYucHJvdG90eXBlLl91c2U9ZnVu'@;
put 'Y3Rpb24oWCxVKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgWCYmKFg9WChVKSksWC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDgzMDc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5kZXI9UigxNjcxKSx6LnBlbT1SKDk2MzEpfSw5NjMxOihNLE8sUik9PnsidXNlIHN0'@;
put 'cmljdCI7Y29uc3Qgej1SKDU3MTcpLEs9UigyMzk5KS5CdWZmZXIsST1SKDE2NzEpO2Z1bmN0aW9uIGsoRSl7SS5jYWxsKHRoaXMsRSksdGhpcy5lbmM9InBlbSJ9eihrLEkpLE0uZXhwb3J0cz1rLGsucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihFLGope2NvbnN0IFY9RS50b1N0cmluZygp'@;
put 'LnNwbGl0KC9bXHJcbl0rL2cpLEI9ai5sYWJlbC50b1VwcGVyQ2FzZSgpLFk9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO2xldCBYPS0xLFU9LTE7Zm9yKGxldCB0ZT0wO3RlPFYubGVuZ3RoO3RlKyspe2NvbnN0IG9lPVZbdGVdLm1hdGNoKFkpO2lmKG51bGwhPT1vZSYmb2Vb'@;
put 'Ml09PT1CKXtpZigtMSE9PVgpe2lmKCJFTkQiIT09b2VbMV0pYnJlYWs7VT10ZTticmVha31pZigiQkVHSU4iIT09b2VbMV0pYnJlYWs7WD10ZX19aWYoLTE9PT1YfHwtMT09PVUpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK0IpO2NvbnN0IHE9Vi5zbGlj'@;
put 'ZShYKzEsVSkuam9pbigiIik7cS5yZXBsYWNlKC9bXmEtejAtOSsvPV0rL2dpLCIiKTtjb25zdCBlZT1LLmZyb20ocSwiYmFzZTY0Iik7cmV0dXJuIEkucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsZWUsail9fSw2OTg0OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcp'@;
put 'LEs9UigyMzk5KS5CdWZmZXIsST1SKDE5NDkpLGs9UigxNjApO2Z1bmN0aW9uIEUoQil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPUIubmFtZSx0aGlzLmVudGl0eT1CLHRoaXMudHJlZT1uZXcgaix0aGlzLnRyZWUuX2luaXQoQi5ib2R5KX1mdW5jdGlvbiBqKEIpe0kuY2FsbCh0aGlzLCJk'@;
put 'ZXIiLEIpfWZ1bmN0aW9uIFYoQil7cmV0dXJuIEI8MTA/IjAiK0I6Qn1NLmV4cG9ydHM9RSxFLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oQixZKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoQixZKS5qb2luKCl9LHooaixJKSxqLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0'@;
put 'aW9uKEIsWSxYLFUpe2NvbnN0IHE9ZnVuY3Rpb24ob2Usc2UsaGUsdWUpe2xldCBjZTtpZigic2Vxb2YiPT09b2U/b2U9InNlcSI6InNldG9mIj09PW9lJiYob2U9InNldCIpLGsudGFnQnlOYW1lLmhhc093blByb3BlcnR5KG9lKSljZT1rLnRhZ0J5TmFtZVtvZV07ZWxzZXtpZigibnVtYmVy'@;
put 'IiE9dHlwZW9mIG9lfHwoMHxvZSkhPT1vZSlyZXR1cm4gdWUuZXJyb3IoIlVua25vd24gdGFnOiAiK29lKTtjZT1vZX1yZXR1cm4gY2U+PTMxP3VlLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooc2V8fChjZXw9MzIpLGNlfD1rLnRhZ0NsYXNzQnlOYW1l'@;
put 'W2hlfHwidW5pdmVyc2FsIl08PDYsY2UpfShCLFksWCx0aGlzLnJlcG9ydGVyKTtpZihVLmxlbmd0aDwxMjgpe2NvbnN0IG9lPUsuYWxsb2MoMik7cmV0dXJuIG9lWzBdPXEsb2VbMV09VS5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbb2UsVV0pfWxldCBlZT0xO2ZvcihsZXQg'@;
put 'b2U9VS5sZW5ndGg7b2U+PTI1NjtvZT4+PTgpZWUrKztjb25zdCB0ZT1LLmFsbG9jKDIrZWUpO3RlWzBdPXEsdGVbMV09MTI4fGVlO2ZvcihsZXQgb2U9MStlZSxzZT1VLmxlbmd0aDtzZT4wO29lLS0sc2U+Pj04KXRlW29lXT0yNTUmc2U7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZm'@;
put 'ZXIoW3RlLFVdKX0sai5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihCLFkpe2lmKCJiaXRzdHIiPT09WSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxCLnVudXNlZCxCLmRhdGFdKTtpZigiYm1wc3RyIj09PVkpe2NvbnN0IFg9Sy5hbGxvYygyKkIubGVuZ3RoKTtm'@;
put 'b3IobGV0IFU9MDtVPEIubGVuZ3RoO1UrKylYLndyaXRlVUludDE2QkUoQi5jaGFyQ29kZUF0KFUpLDIqVSk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWCl9cmV0dXJuIm51bXN0ciI9PT1ZP3RoaXMuX2lzTnVtc3RyKEIpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik6'@;
put 'dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09WT90aGlzLl9pc1ByaW50c3RyKEIpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik6dGhpcy5yZXBvcnRlci5l'@;
put 'cnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5'@;
put 'cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChZKXx8Im9iakRlc2MiPT09WT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1krIiB1'@;
put 'bnN1cHBvcnRlZCIpfSxqLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oQixZLFgpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7aWYoIVkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighWS5o'@;
put 'YXNPd25Qcm9wZXJ0eShCKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtCPVlbQl0uc3BsaXQoL1tccy5dKy9nKTtmb3IobGV0IHRlPTA7dGU8Qi5sZW5ndGg7dGUrKylCW3RlXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoQikp'@;
put 'e0I9Qi5zbGljZSgpO2ZvcihsZXQgdGU9MDt0ZTxCLmxlbmd0aDt0ZSsrKUJbdGVdfD0wfWlmKCFBcnJheS5pc0FycmF5KEIpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnko'@;
put 'QikpO2lmKCFYKXtpZihCWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7Qi5zcGxpY2UoMCwyLDQwKkJbMF0rQlsxXSl9bGV0IFU9MDtmb3IobGV0IHRlPTA7dGU8Qi5sZW5ndGg7dGUrKyl7bGV0IG9lPUJbdGVdO2ZvcihV'@;
put 'Kys7b2U+PTEyODtvZT4+PTcpVSsrfWNvbnN0IHE9Sy5hbGxvYyhVKTtsZXQgZWU9cS5sZW5ndGgtMTtmb3IobGV0IHRlPUIubGVuZ3RoLTE7dGU+PTA7dGUtLSl7bGV0IG9lPUJbdGVdO2ZvcihxW2VlLS1dPTEyNyZvZTsob2U+Pj03KT4wOylxW2VlLS1dPTEyOHwxMjcmb2V9cmV0dXJuIHRo'@;
put 'aXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9LGoucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEIsWSl7bGV0IFg7Y29uc3QgVT1uZXcgRGF0ZShCKTtyZXR1cm4iZ2VudGltZSI9PT1ZP1g9W1YoVS5nZXRVVENGdWxsWWVhcigpKSxWKFUuZ2V0VVRDTW9udGgoKSsxKSxWKFUuZ2V0'@;
put 'VVRDRGF0ZSgpKSxWKFUuZ2V0VVRDSG91cnMoKSksVihVLmdldFVUQ01pbnV0ZXMoKSksVihVLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1ZP1g9W1YoVS5nZXRVVENGdWxsWWVhcigpJTEwMCksVihVLmdldFVUQ01vbnRoKCkrMSksVihVLmdldFVUQ0RhdGUo'@;
put 'KSksVihVLmdldFVUQ0hvdXJzKCkpLFYoVS5nZXRVVENNaW51dGVzKCkpLFYoVS5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitZKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihYLCJvY3Rz'@;
put 'dHIiKX0sai5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LGoucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oQixZKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe2lmKCFZKXJldHVybiB0aGlzLnJlcG9ydGVy'@;
put 'LmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIVkuaGFzT3duUHJvcGVydHkoQikpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEIpKTtCPVlbQl19aWYo'@;
put 'Im51bWJlciIhPXR5cGVvZiBCJiYhSy5pc0J1ZmZlcihCKSl7Y29uc3QgcT1CLnRvQXJyYXkoKTshQi5zaWduJiYxMjgmcVswXSYmcS51bnNoaWZ0KDApLEI9Sy5mcm9tKHEpfWlmKEsuaXNCdWZmZXIoQikpe2xldCBxPUIubGVuZ3RoOzA9PT1CLmxlbmd0aCYmcSsrO2NvbnN0IGVlPUsuYWxs'@;
put 'b2MocSk7cmV0dXJuIEIuY29weShlZSksMD09PUIubGVuZ3RoJiYoZWVbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlZSl9aWYoQjwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik7aWYoQjwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIo'@;
put 'WzAsQl0pO2xldCBYPTE7Zm9yKGxldCBxPUI7cT49MjU2O3E+Pj04KVgrKztjb25zdCBVPW5ldyBBcnJheShYKTtmb3IobGV0IHE9VS5sZW5ndGgtMTtxPj0wO3EtLSlVW3FdPTI1NSZCLEI+Pj04O3JldHVybiAxMjgmVVswXSYmVS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZm'@;
put 'ZXIoSy5mcm9tKFUpKX0sai5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQj8yNTU6MCl9LGoucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oQixZKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgQiYmKEI9QihZKSksQi5f'@;
put 'Z2V0RW5jb2RlcigiZGVyIikudHJlZX0sai5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKEIsWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgcTtpZihudWxsPT09VS5kZWZhdWx0KXJldHVybiExO2NvbnN0IGVlPUIuam9pbigpO2lmKHZvaWQgMD09PVUuZGVmYXVsdEJ1'@;
put 'ZmZlciYmKFUuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShVLmRlZmF1bHQsWSxYKS5qb2luKCkpLGVlLmxlbmd0aCE9PVUuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKHE9MDtxPGVlLmxlbmd0aDtxKyspaWYoZWVbcV0hPT1VLmRlZmF1bHRCdWZmZXJbcV0pcmV0'@;
put 'dXJuITE7cmV0dXJuITB9fSw2NTc5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouZGVyPVIoNjk4NCksei5wZW09UigyODgzKX0sMjg4MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoNjk4NCk7ZnVuY3Rpb24gSShrKXtLLmNhbGwodGhpcyxr'@;
put 'KSx0aGlzLmVuYz0icGVtIn16KEksSyksTS5leHBvcnRzPUksSS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj1LLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLGspLnRvU3RyaW5nKCJiYXNlNjQiKSxWPVsiLS0tLS1CRUdJTiAiK0UubGFiZWwrIi0tLS0tIl07Zm9y'@;
put 'KGxldCBCPTA7QjxqLmxlbmd0aDtCKz02NClWLnB1c2goai5zbGljZShCLEIrNjQpKTtyZXR1cm4gVi5wdXNoKCItLS0tLUVORCAiK0UubGFiZWwrIi0tLS0tIiksVi5qb2luKCJcbiIpfX0sNDU5MDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9u'@;
put 'IEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9'@;
put 'Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEw'@;
put 'LFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rp'@;
put 'b24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxT'@;
put 'LHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5j'@;
put 'ZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1'@;
put 'cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09'@;
put 'PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFy'@;
put 'c2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZn'@;
put 'XSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0s'@;
put 'dGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVsw'@;
put 'XSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9'@;
put 'Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0w'@;
put 'LHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3Rv'@;
put 'dHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lm'@;
put 'KCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0'@;
put 'aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5s'@;
put 'ZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53'@;
put 'b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlz'@;
put 'LndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5n'@;
put 'dGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3Ro'@;
put 'aXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3Jt'@;
put 'U2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6'@;
put 'IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUs'@;
put 'NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIx'@;
put 'NiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2'@;
put 'NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jk'@;
put 'c1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUt'@;
put 'T2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMp'@;
put 'e3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2'@;
put 'Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitT'@;
put 'KSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVy'@;
put 'bygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnBy'@;
put 'b3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlz'@;
put 'LndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5'@;
put 'cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtl'@;
put 'PWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxK'@;
put 'LG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9y'@;
put 'KEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcs'@;
put 'Uz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9'@;
put 'MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9j'@;
put 'b3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10'@;
put 'aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0s'@;
put 'RS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlz'@;
put 'Lm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jk'@;
put 'c1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3Ro'@;
put 'aXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24o'@;
put 'Zyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0s'@;
put 'RS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10'@;
put 'aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxl'@;
put 'bmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5j'@;
put 'bG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9u'@;
put 'KGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53'@;
put 'b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYm'@;
put 'Zz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigw'@;
put 'IT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10'@;
put 'aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2Lndv'@;
put 'cmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5n'@;
put 'dGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2'@;
put 'ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNs'@;
put 'b25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMu'@;
put 'bmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihT'@;
put 'PWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRo'@;
put 'aXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2'@;
put 'ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4'@;
put 'ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsUWU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9'@;
put 'WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLG90PTB8Sls3XSx1dD04MTkxJm90LE10PW90Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+'@;
put 'PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxRdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+'@;
put 'PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixGbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0'@;
put 'aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3'@;
put 'MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRo'@;
put 'LmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKFFlLGVuKXwwLHc9TWF0aC5pbXVsKFFl'@;
put 'LCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxY'@;
put 'dCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1h'@;
put 'dGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoUWUsZnQpfDAsdz13K01hdGguaW11bChRZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11'@;
put 'bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkr'@;
put 'KHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXww'@;
put 'KStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChRZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFFlLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFF0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7'@;
put 'ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFF0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAs'@;
put 'dj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoUWUsTnQpfDAsdz13K01hdGguaW11bChRZSxtbil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUXQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKFdlLFF0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5v'@;
put 'Pj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQs'@;
put 'ZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxt'@;
put 'bil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFF0KXwwKStNYXRoLmltdWwoUWUsSXQpfDAsdz13K01hdGguaW11bChRZSxRdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEz'@;
put 'KXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChE'@;
put 'ZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0'@;
put 'KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFF0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAs'@;
put 'dz13K01hdGguaW11bChiZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChRZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkr'@;
put 'TWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZl'@;
put 'LEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'dXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUXQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFF0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoUWUsenQpfDAsdz13K01h'@;
put 'dGguaW11bChRZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01h'@;
put 'dGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChi'@;
put 'bixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQp'@;
put 'fDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxRdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRo'@;
put 'LmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoUWUsc24pfDAsdz13K01hdGguaW11'@;
put 'bChRZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsRm4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8'@;
put 'MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01h'@;
put 'dGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxRdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsUXQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwo'@;
put 'UGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoUWUsJHQpfDAsdz13K01hdGguaW11bChRZSxG'@;
put 'bil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02'@;
put 'NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRo'@;
put 'LmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFF0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxRdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11'@;
put 'bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRo'@;
put 'LmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKFFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChRZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50'@;
put 'KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFF0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixRdCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'emUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwk'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxRdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixRdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRo'@;
put 'LmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYr'@;
put 'TWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChV'@;
put 'dCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01h'@;
put 'dGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYp'@;
put 'fDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAs'@;
put 'dz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0o'@;
put 'cD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGgu'@;
put 'aW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSso'@;
put 'KDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQs'@;
put 'Rm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChv'@;
put 'bixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChi'@;
put 'bixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxk'@;
put 'ZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcs'@;
put 'dGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9m'@;
put 'dW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5t'@;
put 'aW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEw'@;
put 'ODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9'@;
put 'ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEp'@;
put 'cmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5'@;
put 'cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9'@;
put 'bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxRZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9UWUpLHZbeGUrT2VdPVdlK1llLFNbeGUr'@;
put 'T2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoUWU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9UWUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+'@;
put 'Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFd'@;
put 'PS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3'@;
put 'MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0w'@;
put 'O0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4x'@;
put 'M2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5s'@;
put 'ZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtP'@;
put 'ZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUs'@;
put 'dyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcg'@;
put 'QXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUu'@;
put 'aW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhp'@;
put 'cy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5t'@;
put 'dWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5'@;
put 'cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1D'@;
put 'Lmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1'@;
put 'cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10'@;
put 'aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRz'@;
put 'W0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49'@;
put 'ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAs'@;
put 'diksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRz'@;
put 'W2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1y'@;
put 'ZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0'@;
put 'aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1n'@;
put 'JTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVn'@;
put 'YXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEw'@;
put 'ODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzww'@;
put 'P3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5u'@;
put 'ZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRo'@;
put 'aXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2'@;
put 'NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlz'@;
put 'LndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90'@;
put 'eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlz'@;
put 'fSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9'@;
put 'KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStK'@;
put 'KT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4g'@;
put 'dGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hs'@;
put 'bihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNb'@;
put 'ZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jk'@;
put 'c1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihK'@;
put 'LndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8o'@;
put 'KT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5p'@;
put 'YWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVn'@;
put 'KCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVu'@;
put 'Z3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9'@;
put 'OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90'@;
put 'b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0'@;
put 'aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rp'@;
put 'b24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0w'@;
put 'LFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihn'@;
put 'KX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDAp'@;
put 'LEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUs'@;
put 'TGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8'@;
put 'PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyks'@;
put 'dy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9k'@;
put 'KGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7'@;
put 'bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtD'@;
put 'LmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMo'@;
put 'KTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9y'@;
put 'KDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90'@;
put 'b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRz'@;
put 'WzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJu'@;
put 'IHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMu'@;
put 'd29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2'@;
put 'PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIg'@;
put 'Qz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVu'@;
put 'Z3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUu'@;
put 'Z3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJv'@;
put 'dG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVk'@;
put 'KGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVk'@;
put 'IG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJl'@;
put 'ZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMs'@;
put 'Zyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp'@;
put 'cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlu'@;
put 'dm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxD'@;
put 'KXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEi'@;
put 'KX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlz'@;
put 'Lm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0'@;
put 'aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5y'@;
put 'LnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5z'@;
put 'cGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1'@;
put 'Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2Us'@;
put 'dWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcu'@;
put 'bGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09'@;
put 'dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNb'@;
put 'U109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUu'@;
put 'aW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1m'@;
put 'dW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJp'@;
put 'bWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnBy'@;
put 'b3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5p'@;
put 'bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMu'@;
put 'bS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRk'@;
put 'PWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBT'@;
put 'LmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hs'@;
put 'PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9u'@;
put 'KGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgu'@;
put 'cHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFy'@;
put 'IHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExl'@;
put 'bmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1w'@;
put 'OzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVk'@;
put 'TXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93'@;
put 'PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0'@;
put 'aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+'@;
put 'ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihn'@;
put 'KXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCks'@;
put 'Ti5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxO'@;
put 'LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwo'@;
put 'dGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7'@;
put 'aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMu'@;
put 'c2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0p'@;
put 'Lm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sOTI4MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO2Z1bmN0aW9uIEkoZmUpe3JldHVybihJPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10'@;
put 'eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHhlKXtyZXR1cm4gdHlwZW9mIHhlfTpmdW5jdGlvbih4ZSl7cmV0dXJuIHhlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ4ZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmeGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVv'@;
put 'ZiB4ZX0pKGZlKX12YXIgayxFLGo9UigyMTM2KS5jb2RlcyxWPWouRVJSX0FNQklHVU9VU19BUkdVTUVOVCxCPWouRVJSX0lOVkFMSURfQVJHX1RZUEUsWT1qLkVSUl9JTlZBTElEX0FSR19WQUxVRSxYPWouRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLFU9ai5FUlJfTUlTU0lOR19BUkdTLHE9'@;
put 'Uig1OTYxKSxlZT1SKDk1MzkpLmluc3BlY3QsdGU9Uig5NTM5KS50eXBlcyxvZT10ZS5pc1Byb21pc2Usc2U9dGUuaXNSZWdFeHAsaGU9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOlIoODA5MSkuYXNzaWduLHVlPU9iamVjdC5pcz9PYmplY3QuaXM6Uig2MDkpO2Z1bmN0aW9uIGNlKCl7'@;
put 'dmFyIGZlPVIoOTE1OCk7az1mZS5pc0RlZXBFcXVhbCxFPWZlLmlzRGVlcFN0cmljdEVxdWFsfXZhciBHPSExLGI9TS5leHBvcnRzPWcsRD17fTtmdW5jdGlvbiBIKGZlKXt0aHJvdyBmZS5tZXNzYWdlIGluc3RhbmNlb2YgRXJyb3I/ZmUubWVzc2FnZTpuZXcgcShmZSl9ZnVuY3Rpb24gTihm'@;
put 'ZSx4ZSxMZSxGZSl7aWYoIUxlKXt2YXIgT2U9ITE7aWYoMD09PXhlKU9lPSEwLEZlPSJObyB2YWx1ZSBhcmd1bWVudCBwYXNzZWQgdG8gYGFzc2VydC5vaygpYCI7ZWxzZSBpZihGZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IEZlO3ZhciBqZT1uZXcgcSh7YWN0dWFsOkxlLGV4cGVjdGVkOiEw'@;
put 'LG1lc3NhZ2U6RmUsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46ZmV9KTt0aHJvdyBqZS5nZW5lcmF0ZWRNZXNzYWdlPU9lLGplfX1mdW5jdGlvbiBnKCl7Zm9yKHZhciBmZT1hcmd1bWVudHMubGVuZ3RoLHhlPW5ldyBBcnJheShmZSksTGU9MDtMZTxmZTtMZSsrKXhlW0xlXT1hcmd1bWVu'@;
put 'dHNbTGVdO04uYXBwbHkodm9pZCAwLFtnLHhlLmxlbmd0aF0uY29uY2F0KHhlKSl9Yi5mYWlsPWZ1bmN0aW9uIGZlKHhlLExlLEZlLE9lLGplKXt2YXIgV2UsS2U9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09S2U/V2U9IkZhaWxlZCI6MT09PUtlPyhGZT14ZSx4ZT12b2lkIDApOighMT09PUcm'@;
put 'JihHPSEwLCh6LmVtaXRXYXJuaW5nP3ouZW1pdFdhcm5pbmc6Sy53YXJuLmJpbmQoSykpKCJhc3NlcnQuZmFpbCgpIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFzc2VydC5zdHJpY3RFcXVhbCgpIGluc3RlYWQgb3Igb25seSBwYXNzIGEg'@;
put 'bWVzc2FnZS4iLCJEZXByZWNhdGlvbldhcm5pbmciLCJERVAwMDk0IikpLDI9PT1LZSYmKE9lPSIhPSIpKSxGZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IEZlO3ZhciBZZT17YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG9wZXJhdG9yOnZvaWQgMD09PU9lPyJmYWlsIjpPZSxzdGFja1N0YXJ0Rm46'@;
put 'amV8fGZlfTt2b2lkIDAhPT1GZSYmKFllLm1lc3NhZ2U9RmUpO3ZhciBRZT1uZXcgcShZZSk7dGhyb3cgV2UmJihRZS5tZXNzYWdlPVdlLFFlLmdlbmVyYXRlZE1lc3NhZ2U9ITApLFFlfSxiLkFzc2VydGlvbkVycm9yPXEsYi5vaz1nLGIuZXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lm'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt4ZSE9TGUmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lm'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt4ZT09TGUmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiIhPSIsc3RhY2tTdGFydEZuOmZlfSl9LGIuZGVlcEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtp'@;
put 'Zihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxrKHhlLExlKXx8SCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6ImRlZXBFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90RGVl'@;
put 'cEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxrKHhlLExlKSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Im5vdERlZXBF'@;
put 'cXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIuZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxFKHhlLExlKXx8SCh7YWN0dWFsOnhlLGV4cGVj'@;
put 'dGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9p'@;
put 'ZCAwPT09ayYmY2UoKSxFKHhlLExlKSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Im5vdERlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIuc3RyaWN0RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8'@;
put 'Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt1ZSh4ZSxMZSl8fEgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lm'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt1ZSh4ZSxMZSkmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJub3RTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9O3ZhciBDPWZ1bmN0aW9uIGZlKHhl'@;
put 'LExlLEZlKXt2YXIgT2U9dGhpczsoZnVuY3Rpb24oamUsV2Upe2lmKCEoamUgaW5zdGFuY2VvZiBXZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGZlKSxMZS5mb3JFYWNoKGZ1bmN0aW9uKGplKXtqZSBpbiB4ZSYmKE9l'@;
put 'W2plXT12b2lkIDAhPT1GZSYmInN0cmluZyI9PXR5cGVvZiBGZVtqZV0mJnNlKHhlW2plXSkmJnhlW2plXS50ZXN0KEZlW2plXSk/RmVbamVdOnhlW2plXSl9KX07ZnVuY3Rpb24gUyhmZSx4ZSxMZSxGZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHhlKXtpZihzZSh4ZSkpcmV0dXJuIHhlLnRl'@;
put 'c3QoZmUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBCKCJleHBlY3RlZCIsWyJGdW5jdGlvbiIsIlJlZ0V4cCJdLHhlKTtpZigib2JqZWN0IiE9PUkoZmUpfHxudWxsPT09ZmUpe3ZhciBPZT1uZXcgcSh7YWN0dWFsOmZlLGV4cGVjdGVkOnhlLG1lc3NhZ2U6TGUsb3BlcmF0'@;
put 'b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOkZlfSk7dGhyb3cgT2Uub3BlcmF0b3I9RmUubmFtZSxPZX12YXIgamU9T2JqZWN0LmtleXMoeGUpO2lmKHhlIGluc3RhbmNlb2YgRXJyb3IpamUucHVzaCgibmFtZSIsIm1lc3NhZ2UiKTtlbHNlIGlmKDA9PT1qZS5sZW5ndGgpdGhy'@;
put 'b3cgbmV3IFkoImVycm9yIix4ZSwibWF5IG5vdCBiZSBhbiBlbXB0eSBvYmplY3QiKTtyZXR1cm4gdm9pZCAwPT09ayYmY2UoKSxqZS5mb3JFYWNoKGZ1bmN0aW9uKFdlKXsic3RyaW5nIj09dHlwZW9mIGZlW1dlXSYmc2UoeGVbV2VdKSYmeGVbV2VdLnRlc3QoZmVbV2VdKXx8ZnVuY3Rpb24o'@;
put 'S2UsWWUsUWUsbHQsUGUsYmUpe2lmKCEoUWUgaW4gS2UpfHwhRShLZVtRZV0sWWVbUWVdKSl7aWYoIWx0KXt2YXIgQWU9bmV3IEMoS2UsUGUpLFRlPW5ldyBDKFllLFBlLEtlKSxxZT1uZXcgcSh7YWN0dWFsOkFlLGV4cGVjdGVkOlRlLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNr'@;
put 'U3RhcnRGbjpiZX0pO3Rocm93IHFlLmFjdHVhbD1LZSxxZS5leHBlY3RlZD1ZZSxxZS5vcGVyYXRvcj1iZS5uYW1lLHFlfUgoe2FjdHVhbDpLZSxleHBlY3RlZDpZZSxtZXNzYWdlOmx0LG9wZXJhdG9yOmJlLm5hbWUsc3RhY2tTdGFydEZuOmJlfSl9fShmZSx4ZSxXZSxMZSxqZSxGZSl9KSwh'@;
put 'MH1yZXR1cm4gdm9pZCAwIT09eGUucHJvdG90eXBlJiZmZSBpbnN0YW5jZW9mIHhlfHwhRXJyb3IuaXNQcm90b3R5cGVPZih4ZSkmJiEwPT09eGUuY2FsbCh7fSxmZSl9ZnVuY3Rpb24gdihmZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGZlKXRocm93IG5ldyBCKCJmbiIsIkZ1bmN0aW9uIixm'@;
put 'ZSk7dHJ5e2ZlKCl9Y2F0Y2goeGUpe3JldHVybiB4ZX1yZXR1cm4gRH1mdW5jdGlvbiBwKGZlKXtyZXR1cm4gb2UoZmUpfHxudWxsIT09ZmUmJiJvYmplY3QiPT09SShmZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBmZS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgZmUuY2F0Y2h9ZnVuY3Rpb24g'@;
put 'dyhmZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgeGU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGZlKXtpZighcCh4ZT1mZSgpKSl0aHJvdyBuZXcgWCgiaW5zdGFuY2Ugb2YgUHJvbWlzZSIsInByb21pc2VGbiIseGUpfWVsc2V7aWYoIXAoZmUpKXRocm93'@;
put 'IG5ldyBCKCJwcm9taXNlRm4iLFsiRnVuY3Rpb24iLCJQcm9taXNlIl0sZmUpO3hlPWZlfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHhlfSkudGhlbihmdW5jdGlvbigpe3JldHVybiBEfSkuY2F0Y2goZnVuY3Rpb24oTGUpe3JldHVybiBMZX0pfSl9'@;
put 'ZnVuY3Rpb24gSihmZSx4ZSxMZSxGZSl7aWYoInN0cmluZyI9PXR5cGVvZiBMZSl7aWYoND09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEIoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxMZSk7aWYoIm9iamVjdCI9PT1JKHhlKSYmbnVsbCE9PXhl'@;
put 'KXtpZih4ZS5tZXNzYWdlPT09TGUpdGhyb3cgbmV3IFYoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgbWVzc2FnZSAiJy5jb25jYXQoeGUubWVzc2FnZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpfWVsc2UgaWYoeGU9PT1MZSl0aHJvdyBuZXcgVigiZXJyb3IvbWVzc2Fn'@;
put 'ZSIsJ1RoZSBlcnJvciAiJy5jb25jYXQoeGUsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKTtGZT1MZSxMZT12b2lkIDB9ZWxzZSBpZihudWxsIT1MZSYmIm9iamVjdCIhPT1JKExlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIExlKXRocm93IG5ldyBCKCJlcnJvciIsWyJPYmplY3Qi'@;
put 'LCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0sTGUpO2lmKHhlPT09RCl7dmFyIE9lPSIiO0xlJiZMZS5uYW1lJiYoT2UrPSIgKCIuY29uY2F0KExlLm5hbWUsIikiKSksT2UrPUZlPyI6ICIuY29uY2F0KEZlKToiLiIsSCh7YWN0dWFsOnZvaWQgMCxleHBlY3RlZDpMZSxvcGVyYXRvcjpm'@;
put 'ZS5uYW1lLG1lc3NhZ2U6Ik1pc3NpbmcgZXhwZWN0ZWQgIi5jb25jYXQoInJlamVjdHMiPT09ZmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KE9lKSxzdGFja1N0YXJ0Rm46ZmV9KX1pZihMZSYmIVMoeGUsTGUsRmUsZmUpKXRocm93IHhlfWZ1bmN0aW9uIG5lKGZlLHhl'@;
put 'LExlLEZlKXtpZih4ZSE9PUQpe2lmKCJzdHJpbmciPT10eXBlb2YgTGUmJihGZT1MZSxMZT12b2lkIDApLCFMZXx8Uyh4ZSxMZSkpe3ZhciBPZT1GZT8iOiAiLmNvbmNhdChGZSk6Ii4iO0goe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxvcGVyYXRvcjpmZS5uYW1lLG1lc3NhZ2U6IkdvdCB1bndh'@;
put 'bnRlZCAiLmNvbmNhdCgiZG9lc05vdFJlamVjdCI9PT1mZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQoT2UsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQoeGUmJnhlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46ZmV9KX10aHJvdyB4ZX19ZnVuY3Rpb24g'@;
put 'ZGUoKXtmb3IodmFyIGZlPWFyZ3VtZW50cy5sZW5ndGgseGU9bmV3IEFycmF5KGZlKSxMZT0wO0xlPGZlO0xlKyspeGVbTGVdPWFyZ3VtZW50c1tMZV07Ti5hcHBseSh2b2lkIDAsW2RlLHhlLmxlbmd0aF0uY29uY2F0KHhlKSl9Yi50aHJvd3M9ZnVuY3Rpb24gZmUoeGUpe2Zvcih2YXIgTGU9'@;
put 'YXJndW1lbnRzLmxlbmd0aCxGZT1uZXcgQXJyYXkoTGU+MT9MZS0xOjApLE9lPTE7T2U8TGU7T2UrKylGZVtPZS0xXT1hcmd1bWVudHNbT2VdO0ouYXBwbHkodm9pZCAwLFtmZSx2KHhlKV0uY29uY2F0KEZlKSl9LGIucmVqZWN0cz1mdW5jdGlvbiBmZSh4ZSl7Zm9yKHZhciBMZT1hcmd1bWVu'@;
put 'dHMubGVuZ3RoLEZlPW5ldyBBcnJheShMZT4xP0xlLTE6MCksT2U9MTtPZTxMZTtPZSsrKUZlW09lLTFdPWFyZ3VtZW50c1tPZV07cmV0dXJuIHcoeGUpLnRoZW4oZnVuY3Rpb24oamUpe3JldHVybiBKLmFwcGx5KHZvaWQgMCxbZmUsamVdLmNvbmNhdChGZSkpfSl9LGIuZG9lc05vdFRocm93'@;
put 'PWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFyIExlPWFyZ3VtZW50cy5sZW5ndGgsRmU9bmV3IEFycmF5KExlPjE/TGUtMTowKSxPZT0xO09lPExlO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtuZS5hcHBseSh2b2lkIDAsW2ZlLHYoeGUpXS5jb25jYXQoRmUpKX0sYi5kb2VzTm90UmVqZWN0'@;
put 'PWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFyIExlPWFyZ3VtZW50cy5sZW5ndGgsRmU9bmV3IEFycmF5KExlPjE/TGUtMTowKSxPZT0xO09lPExlO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtyZXR1cm4gdyh4ZSkudGhlbihmdW5jdGlvbihqZSl7cmV0dXJuIG5lLmFwcGx5KHZvaWQgMCxb'@;
put 'ZmUsamVdLmNvbmNhdChGZSkpfSl9LGIuaWZFcnJvcj1mdW5jdGlvbiBmZSh4ZSl7aWYobnVsbCE9eGUpe3ZhciBMZT0iaWZFcnJvciBnb3QgdW53YW50ZWQgZXhjZXB0aW9uOiAiOyJvYmplY3QiPT09SSh4ZSkmJiJzdHJpbmciPT10eXBlb2YgeGUubWVzc2FnZT9MZSs9MD09PXhlLm1lc3Nh'@;
put 'Z2UubGVuZ3RoJiZ4ZS5jb25zdHJ1Y3Rvcj94ZS5jb25zdHJ1Y3Rvci5uYW1lOnhlLm1lc3NhZ2U6TGUrPWVlKHhlKTt2YXIgRmU9bmV3IHEoe2FjdHVhbDp4ZSxleHBlY3RlZDpudWxsLG9wZXJhdG9yOiJpZkVycm9yIixtZXNzYWdlOkxlLHN0YWNrU3RhcnRGbjpmZX0pLE9lPXhlLnN0YWNr'@;
put 'O2lmKCJzdHJpbmciPT10eXBlb2YgT2Upe3ZhciBqZT1PZS5zcGxpdCgiXG4iKTtqZS5zaGlmdCgpO2Zvcih2YXIgV2U9RmUuc3RhY2suc3BsaXQoIlxuIiksS2U9MDtLZTxqZS5sZW5ndGg7S2UrKyl7dmFyIFllPVdlLmluZGV4T2YoamVbS2VdKTtpZigtMSE9PVllKXtXZT1XZS5zbGljZSgw'@;
put 'LFllKTticmVha319RmUuc3RhY2s9IiIuY29uY2F0KFdlLmpvaW4oIlxuIiksIlxuIikuY29uY2F0KGplLmpvaW4oIlxuIikpfXRocm93IEZlfX0sYi5zdHJpY3Q9aGUoZGUsYix7ZXF1YWw6Yi5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6Yi5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6Yi5ub3RT'@;
put 'dHJpY3RFcXVhbCxub3REZWVwRXF1YWw6Yi5ub3REZWVwU3RyaWN0RXF1YWx9KSxiLnN0cmljdC5zdHJpY3Q9Yi5zdHJpY3R9LDU5NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoTixnLEMpe3JldHVybiBnIGluIE4/T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KE4sZyx7dmFsdWU6QyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOk5bZ109QyxOfWZ1bmN0aW9uIGsoTixnKXtyZXR1cm4hZ3x8Im9iamVjdCIhPT1YKGcpJiYiZnVuY3Rpb24iIT10eXBlb2YgZz9FKE4pOmd9ZnVuY3Rpb24gRShOKXtpZih2b2lkIDA9'@;
put 'PT1OKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIE59ZnVuY3Rpb24gaihOKXt2YXIgZz0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBq'@;
put 'PWZ1bmN0aW9uKEMpe2lmKG51bGw9PT1DfHwtMT09PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQykuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpKXJldHVybiBDO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBDKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIg'@;
put 'YmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7aWYodm9pZCAwIT09Zyl7aWYoZy5oYXMoQykpcmV0dXJuIGcuZ2V0KEMpO2cuc2V0KEMsdil9ZnVuY3Rpb24gdigpe3JldHVybiBWKEMsYXJndW1lbnRzLFkodGhpcykuY29uc3RydWN0b3IpfXJldHVybiB2LnByb3RvdHlwZT1PYmplY3QuY3JlYXRl'@;
put 'KEMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxCKHYsQyl9LGooTil9ZnVuY3Rpb24gVihOLGcsQyl7cmV0dXJuKFY9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNv'@;
put 'bnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0'@;
put 'Y2h7cmV0dXJuITF9fSgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKFMsdixwKXt2YXIgdz1bbnVsbF07dy5wdXNoLmFwcGx5KHcsdik7dmFyIEo9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoUyx3KSk7cmV0dXJuIHAmJkIoSixwLnByb3RvdHlwZSksSn0pLmFwcGx5KG51bGwsYXJndW1l'@;
put 'bnRzKX1mdW5jdGlvbiBCKE4sZyl7cmV0dXJuKEI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihDLFMpe3JldHVybiBDLl9fcHJvdG9fXz1TLEN9KShOLGcpfWZ1bmN0aW9uIFkoTil7cmV0dXJuKFk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpm'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gZy5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihnKX0pKE4pfWZ1bmN0aW9uIFgoTil7cmV0dXJuKFg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZyl7cmV0dXJuIHR5'@;
put 'cGVvZiBnfTpmdW5jdGlvbihnKXtyZXR1cm4gZyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGd9KShOKX12YXIgVT1SKDk1MzkpLmluc3BlY3QscT1SKDIxMzYpLmNvZGVzLkVS'@;
put 'Ul9JTlZBTElEX0FSR19UWVBFO2Z1bmN0aW9uIGVlKE4sZyxDKXtyZXR1cm4odm9pZCAwPT09Q3x8Qz5OLmxlbmd0aCkmJihDPU4ubGVuZ3RoKSxOLnN1YnN0cmluZyhDLWcubGVuZ3RoLEMpPT09Z312YXIgdGU9IiIsb2U9IiIsc2U9IiIsaGU9IiIsdWU9e2RlZXBTdHJpY3RFcXVhbDoiRXhw'@;
put 'ZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQi'@;
put 'OicsZGVlcEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsOiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1l'@;
put 'cXVhbCB0bzonLG5vdFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBzdHJpY3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVh'@;
put 'bDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzonLG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVuZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6'@;
put 'In07ZnVuY3Rpb24gRyhOKXt2YXIgZz1PYmplY3Qua2V5cyhOKSxDPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKE4pKTtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKFMpe0NbU109TltTXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLCJtZXNzYWdlIix7dmFsdWU6Ti5t'@;
put 'ZXNzYWdlfSksQ31mdW5jdGlvbiBiKE4pe3JldHVybiBVKE4se2NvbXBhY3Q6ITEsY3VzdG9tSW5zcGVjdDohMSxkZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eTohMSxzb3J0ZWQ6ITAsZ2V0dGVyczohMH0pfXZhciBI'@;
put 'PWZ1bmN0aW9uKE4pe2Z1bmN0aW9uIGcocCl7dmFyIHc7aWYoZnVuY3Rpb24oWWUsUWUpe2lmKCEoWWUgaW5zdGFuY2VvZiBRZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZyksIm9iamVjdCIhPT1YKHApfHxudWxsPT09'@;
put 'cCl0aHJvdyBuZXcgcSgib3B0aW9ucyIsIk9iamVjdCIscCk7dmFyIEo9cC5tZXNzYWdlLG5lPXAub3BlcmF0b3IsZGU9cC5zdGFja1N0YXJ0Rm4sZmU9cC5hY3R1YWwseGU9cC5leHBlY3RlZCxMZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7aWYoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTAsbnVs'@;
put 'bCE9Sil3PWsodGhpcyxZKGcpLmNhbGwodGhpcyxTdHJpbmcoSikpKTtlbHNlIGlmKHouc3RkZXJyJiZ6LnN0ZGVyci5pc1RUWSYmKHouc3RkZXJyJiZ6LnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09ei5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyh0ZT0iXHgxYlszNG0iLG9lPSJceDFiWzMy'@;
put 'bSIsaGU9Ilx4MWJbMzltIixzZT0iXHgxYlszMW0iKToodGU9IiIsb2U9IiIsaGU9IiIsc2U9IiIpKSwib2JqZWN0Ij09PVgoZmUpJiZudWxsIT09ZmUmJiJvYmplY3QiPT09WCh4ZSkmJm51bGwhPT14ZSYmInN0YWNrImluIGZlJiZmZSBpbnN0YW5jZW9mIEVycm9yJiYic3RhY2siaW4geGUm'@;
put 'JnhlIGluc3RhbmNlb2YgRXJyb3ImJihmZT1HKGZlKSx4ZT1HKHhlKSksImRlZXBTdHJpY3RFcXVhbCI9PT1uZXx8InN0cmljdEVxdWFsIj09PW5lKXc9ayh0aGlzLFkoZykuY2FsbCh0aGlzLGZ1bmN0aW9uIEQoTixnLEMpe3ZhciBTPSIiLHY9IiIscD0wLHc9IiIsSj0hMSxuZT1iKE4pLGRl'@;
put 'PW5lLnNwbGl0KCJcbiIpLGZlPWIoZykuc3BsaXQoIlxuIikseGU9MCxMZT0iIjtpZigic3RyaWN0RXF1YWwiPT09QyYmIm9iamVjdCI9PT1YKE4pJiYib2JqZWN0Ij09PVgoZykmJm51bGwhPT1OJiZudWxsIT09ZyYmKEM9InN0cmljdEVxdWFsT2JqZWN0IiksMT09PWRlLmxlbmd0aCYmMT09'@;
put 'PWZlLmxlbmd0aCYmZGVbMF0hPT1mZVswXSl7dmFyIEZlPWRlWzBdLmxlbmd0aCtmZVswXS5sZW5ndGg7aWYoRmU8PTEwKXtpZighKCJvYmplY3QiPT09WChOKSYmbnVsbCE9PU58fCJvYmplY3QiPT09WChnKSYmbnVsbCE9PWd8fDA9PT1OJiYwPT09ZykpcmV0dXJuIiIuY29uY2F0KHVlW0Nd'@;
put 'LCJcblxuIikrIiIuY29uY2F0KGRlWzBdLCIgIT09ICIpLmNvbmNhdChmZVswXSwiXG4iKX1lbHNlIGlmKCJzdHJpY3RFcXVhbE9iamVjdCIhPT1DJiZGZTwoei5zdGRlcnImJnouc3RkZXJyLmlzVFRZP3ouc3RkZXJyLmNvbHVtbnM6ODApKXtmb3IoO2RlWzBdW3hlXT09PWZlWzBdW3hlXTsp'@;
put 'eGUrKzt4ZT4yJiYoTGU9IlxuICAiLmNvbmNhdChmdW5jdGlvbihxZSxYZSl7aWYoWGU9TWF0aC5mbG9vcihYZSksMD09cWUubGVuZ3RofHwwPT1YZSlyZXR1cm4iIjt2YXIgVWU9cWUubGVuZ3RoKlhlO2ZvcihYZT1NYXRoLmZsb29yKE1hdGgubG9nKFhlKS9NYXRoLmxvZygyKSk7WGU7KXFl'@;
put 'Kz1xZSxYZS0tO3JldHVybiBxZStxZS5zdWJzdHJpbmcoMCxVZS1xZS5sZW5ndGgpfSgiICIseGUpLCJeIikseGU9MCl9fWZvcih2YXIgT2U9ZGVbZGUubGVuZ3RoLTFdLGplPWZlW2ZlLmxlbmd0aC0xXTtPZT09PWplJiYoeGUrKzwyP3c9IlxuICAiLmNvbmNhdChPZSkuY29uY2F0KHcpOlM9'@;
put 'T2UsZGUucG9wKCksZmUucG9wKCksMCE9PWRlLmxlbmd0aCYmMCE9PWZlLmxlbmd0aCk7KU9lPWRlW2RlLmxlbmd0aC0xXSxqZT1mZVtmZS5sZW5ndGgtMV07dmFyIFdlPU1hdGgubWF4KGRlLmxlbmd0aCxmZS5sZW5ndGgpO2lmKDA9PT1XZSl7dmFyIEtlPW5lLnNwbGl0KCJcbiIpO2lmKEtl'@;
put 'Lmxlbmd0aD4zMClmb3IoS2VbMjZdPSIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKTtLZS5sZW5ndGg+Mjc7KUtlLnBvcCgpO3JldHVybiIiLmNvbmNhdCh1ZS5ub3RJZGVudGljYWwsIlxuXG4iKS5jb25jYXQoS2Uuam9pbigiXG4iKSwiXG4iKX14ZT4zJiYodz0iXG4iLmNvbmNhdCh0'@;
put 'ZSwiLi4uIikuY29uY2F0KGhlKS5jb25jYXQodyksSj0hMCksIiIhPT1TJiYodz0iXG4gICIuY29uY2F0KFMpLmNvbmNhdCh3KSxTPSIiKTt2YXIgWWU9MCxRZT11ZVtDXSsiXG4iLmNvbmNhdChvZSwiKyBhY3R1YWwiKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoc2UsIi0gZXhwZWN0ZWQiKS5j'@;
put 'b25jYXQoaGUpLGx0PSIgIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSwiIExpbmVzIHNraXBwZWQiKTtmb3IoeGU9MDt4ZTxXZTt4ZSsrKXt2YXIgUGU9eGUtcDtpZihkZS5sZW5ndGg8eGUrMSlQZT4xJiZ4ZT4yJiYoUGU+ND8odis9IlxuIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdCho'@;
put 'ZSksSj0hMCk6UGU+MyYmKHYrPSJcbiAgIi5jb25jYXQoZmVbeGUtMl0pLFllKyspLHYrPSJcbiAgIi5jb25jYXQoZmVbeGUtMV0pLFllKyspLHA9eGUsUys9IlxuIi5jb25jYXQoc2UsIi0iKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoZmVbeGVdKSxZZSsrO2Vsc2UgaWYoZmUubGVuZ3RoPHhl'@;
put 'KzEpUGU+MSYmeGU+MiYmKFBlPjQ/KHYrPSJcbiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpLEo9ITApOlBlPjMmJih2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTJdKSxZZSsrKSx2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTFdKSxZZSsrKSxwPXhlLHYrPSJcbiIuY29uY2F0KG9lLCIrIiku'@;
put 'Y29uY2F0KGhlLCIgIikuY29uY2F0KGRlW3hlXSksWWUrKztlbHNle3ZhciBiZT1mZVt4ZV0sQWU9ZGVbeGVdLFRlPUFlIT09YmUmJighZWUoQWUsIiwiKXx8QWUuc2xpY2UoMCwtMSkhPT1iZSk7VGUmJmVlKGJlLCIsIikmJmJlLnNsaWNlKDAsLTEpPT09QWUmJihUZT0hMSxBZSs9IiwiKSxU'@;
put 'ZT8oUGU+MSYmeGU+MiYmKFBlPjQ/KHYrPSJcbiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpLEo9ITApOlBlPjMmJih2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTJdKSxZZSsrKSx2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTFdKSxZZSsrKSxwPXhlLHYrPSJcbiIuY29uY2F0KG9lLCIrIiku'@;
put 'Y29uY2F0KGhlLCIgIikuY29uY2F0KEFlKSxTKz0iXG4iLmNvbmNhdChzZSwiLSIpLmNvbmNhdChoZSwiICIpLmNvbmNhdChiZSksWWUrPTIpOih2Kz1TLFM9IiIsMSE9PVBlJiYwIT09eGV8fCh2Kz0iXG4gICIuY29uY2F0KEFlKSxZZSsrKSl9aWYoWWU+MjAmJnhlPFdlLTIpcmV0dXJuIiIu'@;
put 'Y29uY2F0KFFlKS5jb25jYXQobHQsIlxuIikuY29uY2F0KHYsIlxuIikuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpLmNvbmNhdChTLCJcbiIpKyIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKX1yZXR1cm4iIi5jb25jYXQoUWUpLmNvbmNhdChKP2x0OiIiLCJcbiIpLmNvbmNhdCh2'@;
put 'KS5jb25jYXQoUykuY29uY2F0KHcpLmNvbmNhdChMZSl9KGZlLHhlLG5lKSkpO2Vsc2UgaWYoIm5vdERlZXBTdHJpY3RFcXVhbCI9PT1uZXx8Im5vdFN0cmljdEVxdWFsIj09PW5lKXt2YXIgRmU9dWVbbmVdLE9lPWIoZmUpLnNwbGl0KCJcbiIpO2lmKCJub3RTdHJpY3RFcXVhbCI9PT1uZSYm'@;
put 'Im9iamVjdCI9PT1YKGZlKSYmbnVsbCE9PWZlJiYoRmU9dWUubm90U3RyaWN0RXF1YWxPYmplY3QpLE9lLmxlbmd0aD4zMClmb3IoT2VbMjZdPSIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKTtPZS5sZW5ndGg+Mjc7KU9lLnBvcCgpO3c9ayh0aGlzLDE9PT1PZS5sZW5ndGg/WShnKS5j'@;
put 'YWxsKHRoaXMsIiIuY29uY2F0KEZlLCIgIikuY29uY2F0KE9lWzBdKSk6WShnKS5jYWxsKHRoaXMsIiIuY29uY2F0KEZlLCJcblxuIikuY29uY2F0KE9lLmpvaW4oIlxuIiksIlxuIikpKX1lbHNle3ZhciBqZT1iKGZlKSxXZT0iIixLZT11ZVtuZV07Im5vdERlZXBFcXVhbCI9PT1uZXx8Im5v'@;
put 'dEVxdWFsIj09PW5lPyhqZT0iIi5jb25jYXQodWVbbmVdLCJcblxuIikuY29uY2F0KGplKSkubGVuZ3RoPjEwMjQmJihqZT0iIi5jb25jYXQoamUuc2xpY2UoMCwxMDIxKSwiLi4uIikpOihXZT0iIi5jb25jYXQoYih4ZSkpLGplLmxlbmd0aD41MTImJihqZT0iIi5jb25jYXQoamUuc2xpY2Uo'@;
put 'MCw1MDkpLCIuLi4iKSksV2UubGVuZ3RoPjUxMiYmKFdlPSIiLmNvbmNhdChXZS5zbGljZSgwLDUwOSksIi4uLiIpKSwiZGVlcEVxdWFsIj09PW5lfHwiZXF1YWwiPT09bmU/amU9IiIuY29uY2F0KEtlLCJcblxuIikuY29uY2F0KGplLCJcblxuc2hvdWxkIGVxdWFsXG5cbiIpOldlPSIgIi5j'@;
put 'b25jYXQobmUsIiAiKS5jb25jYXQoV2UpKSx3PWsodGhpcyxZKGcpLmNhbGwodGhpcywiIi5jb25jYXQoamUpLmNvbmNhdChXZSkpKX1yZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PUxlLHcuZ2VuZXJhdGVkTWVzc2FnZT0hSixPYmplY3QuZGVmaW5lUHJvcGVydHkoRSh3KSwibmFtZSIs'@;
put 'e3ZhbHVlOiJBc3NlcnRpb25FcnJvciBbRVJSX0FTU0VSVElPTl0iLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdy5jb2RlPSJFUlJfQVNTRVJUSU9OIix3LmFjdHVhbD1mZSx3LmV4cGVjdGVkPXhlLHcub3BlcmF0b3I9bmUsRXJyb3IuY2FwdHVyZVN0YWNr'@;
put 'VHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKEUodyksZGUpLHcubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLGsodyl9dmFyIFM7cmV0dXJuIGZ1bmN0aW9uKHAsdyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHcmJm51bGwhPT13KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Np'@;
put 'b24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3JiZ3LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHcmJkIocCx3KX0oZyxOKSxTPVt7a2V5OiJ0b1N0cmlu'@;
put 'ZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIi5jb25jYXQodGhpcy5uYW1lLCIgWyIpLmNvbmNhdCh0aGlzLmNvZGUsIl06ICIpLmNvbmNhdCh0aGlzLm1lc3NhZ2UpfX0se2tleTpVLmN1c3RvbSx2YWx1ZTpmdW5jdGlvbihwLHcpe3JldHVybiBVKHRoaXMsZnVuY3Rpb24oSil7Zm9yKHZh'@;
put 'ciBuZT0xO25lPGFyZ3VtZW50cy5sZW5ndGg7bmUrKyl7dmFyIGRlPW51bGwhPWFyZ3VtZW50c1tuZV0/YXJndW1lbnRzW25lXTp7fSxmZT1PYmplY3Qua2V5cyhkZSk7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihmZT1mZS5jb25jYXQoT2JqZWN0'@;
put 'LmdldE93blByb3BlcnR5U3ltYm9scyhkZSkuZmlsdGVyKGZ1bmN0aW9uKHhlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZSx4ZSkuZW51bWVyYWJsZX0pKSksZmUuZm9yRWFjaChmdW5jdGlvbih4ZSl7SyhKLHhlLGRlW3hlXSl9KX1yZXR1cm4gSn0oe30sdyx7'@;
put 'Y3VzdG9tSW5zcGVjdDohMSxkZXB0aDowfSkpfX1dLFMmJmZ1bmN0aW9uIEkoTixnKXtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl7dmFyIFM9Z1tDXTtTLmVudW1lcmFibGU9Uy5lbnVtZXJhYmxlfHwhMSxTLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gUyYmKFMud3JpdGFibGU9ITAp'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFMua2V5LFMpfX0oZy5wcm90b3R5cGUsUyksZ30oaihFcnJvcikpO00uZXhwb3J0cz1IfSwyMTM2OihNLE8sUik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geihYKXtyZXR1cm4oej0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09'@;
put 'dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihVKXtyZXR1cm4gdHlwZW9mIFV9OmZ1bmN0aW9uKFUpe3JldHVybiBVJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZVLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZVIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgVX0p'@;
put 'KFgpfWZ1bmN0aW9uIEkoWCl7cmV0dXJuKEk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihVKXtyZXR1cm4gVS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihVKX0pKFgpfWZ1bmN0aW9uIGsoWCxVKXtyZXR1cm4oaz1PYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHEsZWUpe3JldHVybiBxLl9fcHJvdG9fXz1lZSxxfSkoWCxVKX12YXIgRSxqLFY9e307ZnVuY3Rpb24gQihYLFUscSl7cXx8KHE9RXJyb3IpO3ZhciBlZT1mdW5jdGlvbih0ZSl7ZnVuY3Rpb24gb2Uoc2UsaGUsdWUpe3ZhciBjZTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oRyxiKXtpZighKEcgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxvZSksY2U9ZnVuY3Rpb24gSyhYLFUpe3JldHVybiFVfHwib2JqZWN0IiE9PXooVSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBV'@;
put 'P2Z1bmN0aW9uKHEpe2lmKHZvaWQgMD09PXEpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gcX0oWCk6VX0odGhpcyxJKG9lKS5jYWxsKHRoaXMsInN0cmluZyI9PXR5cGVv'@;
put 'ZiBVP1U6VShzZSxoZSx1ZSkpKSxjZS5jb2RlPVgsY2V9cmV0dXJuIGZ1bmN0aW9uKHNlLGhlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaGUmJm51bGwhPT1oZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIp'@;
put 'O3NlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhlJiZoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpzZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksaGUmJmsoc2UsaGUpfShvZSx0ZSksb2V9KHEpO1ZbWF09ZWV9ZnVuY3Rpb24gWShYLFUpe2lmKEFycmF5LmlzQXJy'@;
put 'YXkoWCkpe3ZhciBxPVgubGVuZ3RoO3JldHVybiBYPVgubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4gU3RyaW5nKGVlKX0pLHE+Mj8ib25lIG9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoWC5zbGljZSgwLHEtMSkuam9pbigiLCAiKSwiLCBvciAiKStYW3EtMV06Mj09PXE/Im9uZSBvZiAiLmNv'@;
put 'bmNhdChVLCIgIikuY29uY2F0KFhbMF0sIiBvciAiKS5jb25jYXQoWFsxXSk6Im9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoWFswXSl9cmV0dXJuIm9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoU3RyaW5nKFgpKX1CKCJFUlJfQU1CSUdVT1VTX0FSR1VNRU5UIiwnVGhlICIlcyIgYXJndW1l'@;
put 'bnQgaXMgYW1iaWd1b3VzLiAlcycsVHlwZUVycm9yKSxCKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oWCxVLHEpe3ZhciBlZSxzZSx1ZSxHO2lmKHZvaWQgMD09PUUmJihFPVIoOTI4MikpLEUoInN0cmluZyI9PXR5cGVvZiBYLCInbmFtZScgbXVzdCBiZSBhIHN0cmluZyIpLCJz'@;
put 'dHJpbmciPT10eXBlb2YgVSYmIm5vdCAiPT09VS5zdWJzdHIoMCw0KT8oZWU9Im11c3Qgbm90IGJlIixVPVUucmVwbGFjZSgvXm5vdCAvLCIiKSk6ZWU9Im11c3QgYmUiLHVlPVgsKHZvaWQgMD09PUd8fEc+dWUubGVuZ3RoKSYmKEc9dWUubGVuZ3RoKSwiIGFyZ3VtZW50Ij09PXVlLnN1YnN0'@;
put 'cmluZyhHLTksRykpc2U9IlRoZSAiLmNvbmNhdChYLCIgIikuY29uY2F0KGVlLCIgIikuY29uY2F0KFkoVSwidHlwZSIpKTtlbHNle3ZhciBoZT1mdW5jdGlvbih1ZSxjZSxHKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIEcmJihHPTApLCEoRysxPnVlLmxlbmd0aCkmJi0xIT09dWUuaW5kZXhP'@;
put 'ZigiLiIsRyl9KFgpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtzZT0nVGhlICInLmNvbmNhdChYLCciICcpLmNvbmNhdChoZSwiICIpLmNvbmNhdChlZSwiICIpLmNvbmNhdChZKFUsInR5cGUiKSl9cmV0dXJuIHNlKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoeihxKSl9LFR5cGVFcnJvciks'@;
put 'QigiRVJSX0lOVkFMSURfQVJHX1ZBTFVFIixmdW5jdGlvbihYLFUpe3ZhciBxPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiaXMgaW52YWxpZCI7dm9pZCAwPT09aiYmKGo9Uig5NTM5KSk7dmFyIGVlPWouaW5zcGVjdChVKTtyZXR1cm4g'@;
put 'ZWUubGVuZ3RoPjEyOCYmKGVlPSIiLmNvbmNhdChlZS5zbGljZSgwLDEyOCksIi4uLiIpKSwiVGhlIGFyZ3VtZW50ICciLmNvbmNhdChYLCInICIpLmNvbmNhdChxLCIuIFJlY2VpdmVkICIpLmNvbmNhdChlZSl9LFR5cGVFcnJvcixSYW5nZUVycm9yKSxCKCJFUlJfSU5WQUxJRF9SRVRVUk5f'@;
put 'VkFMVUUiLGZ1bmN0aW9uKFgsVSxxKXt2YXIgZWU7cmV0dXJuIGVlPXEmJnEuY29uc3RydWN0b3ImJnEuY29uc3RydWN0b3IubmFtZT8iaW5zdGFuY2Ugb2YgIi5jb25jYXQocS5jb25zdHJ1Y3Rvci5uYW1lKToidHlwZSAiLmNvbmNhdCh6KHEpKSwiRXhwZWN0ZWQgIi5jb25jYXQoWCwnIHRv'@;
put 'IGJlIHJldHVybmVkIGZyb20gdGhlICInKS5jb25jYXQoVSwnIicpKyIgZnVuY3Rpb24gYnV0IGdvdCAiLmNvbmNhdChlZSwiLiIpfSxUeXBlRXJyb3IpLEIoIkVSUl9NSVNTSU5HX0FSR1MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBYPWFyZ3VtZW50cy5sZW5ndGgsVT1uZXcgQXJyYXkoWCkscT0w'@;
put 'O3E8WDtxKyspVVtxXT1hcmd1bWVudHNbcV07dm9pZCAwPT09RSYmKEU9Uig5MjgyKSksRShVLmxlbmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBlZT0iVGhlICIsdGU9VS5sZW5ndGg7c3dpdGNoKFU9VS5tYXAoZnVuY3Rpb24ob2Upe3JldHVy'@;
put 'biciJy5jb25jYXQob2UsJyInKX0pLHRlKXtjYXNlIDE6ZWUrPSIiLmNvbmNhdChVWzBdLCIgYXJndW1lbnQiKTticmVhaztjYXNlIDI6ZWUrPSIiLmNvbmNhdChVWzBdLCIgYW5kICIpLmNvbmNhdChVWzFdLCIgYXJndW1lbnRzIik7YnJlYWs7ZGVmYXVsdDplZSs9VS5zbGljZSgwLHRlLTEp'@;
put 'LmpvaW4oIiwgIiksZWUrPSIsIGFuZCAiLmNvbmNhdChVW3RlLTFdLCIgYXJndW1lbnRzIil9cmV0dXJuIiIuY29uY2F0KGVlLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSxNLmV4cG9ydHMuY29kZXM9Vn0sOTE1ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHoo'@;
put 'YmUsQWUpe3JldHVybiBmdW5jdGlvbihUZSl7aWYoQXJyYXkuaXNBcnJheShUZSkpcmV0dXJuIFRlfShiZSl8fGZ1bmN0aW9uKFRlLHFlKXt2YXIgWGU9W10sVWU9ITAsaHQ9ITEsTWU9dm9pZCAwO3RyeXtmb3IodmFyIERlLHplPVRlW1N5bWJvbC5pdGVyYXRvcl0oKTshKFVlPShEZT16ZS5u'@;
put 'ZXh0KCkpLmRvbmUpJiYoWGUucHVzaChEZS52YWx1ZSksIXFlfHxYZS5sZW5ndGghPT1xZSk7VWU9ITApO31jYXRjaChvdCl7aHQ9ITAsTWU9b3R9ZmluYWxseXt0cnl7VWV8fG51bGw9PXplLnJldHVybnx8emUucmV0dXJuKCl9ZmluYWxseXtpZihodCl0aHJvdyBNZX19cmV0dXJuIFhlfShi'@;
put 'ZSxBZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIEsoYmUpe3JldHVybihLPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2Yg'@;
put 'U3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKEFlKXtyZXR1cm4gdHlwZW9mIEFlfTpmdW5jdGlvbihBZSl7cmV0dXJuIEFlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZBZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmQWUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBBZX0p'@;
put 'KGJlKX12YXIgST12b2lkIDAhPT0vYS9nLmZsYWdzLGs9ZnVuY3Rpb24oYmUpe3ZhciBBZT1bXTtyZXR1cm4gYmUuZm9yRWFjaChmdW5jdGlvbihUZSl7cmV0dXJuIEFlLnB1c2goVGUpfSksQWV9LEU9ZnVuY3Rpb24oYmUpe3ZhciBBZT1bXTtyZXR1cm4gYmUuZm9yRWFjaChmdW5jdGlvbihU'@;
put 'ZSxxZSl7cmV0dXJuIEFlLnB1c2goW3FlLFRlXSl9KSxBZX0saj1PYmplY3QuaXM/T2JqZWN0LmlzOlIoNjA5KSxWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbigpe3JldHVybltdfSxCPU51bWJlci5pc05hTj9OdW1i'@;
put 'ZXIuaXNOYU46UigzNjApO2Z1bmN0aW9uIFkoYmUpe3JldHVybiBiZS5jYWxsLmJpbmQoYmUpfXZhciBYPVkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksVT1ZKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpLHE9WShPYmplY3QucHJvdG90eXBlLnRvU3Ry'@;
put 'aW5nKSxlZT1SKDk1MzkpLnR5cGVzLHRlPWVlLmlzQW55QXJyYXlCdWZmZXIsb2U9ZWUuaXNBcnJheUJ1ZmZlclZpZXcsc2U9ZWUuaXNEYXRlLGhlPWVlLmlzTWFwLHVlPWVlLmlzUmVnRXhwLGNlPWVlLmlzU2V0LEc9ZWUuaXNOYXRpdmVFcnJvcixiPWVlLmlzQm94ZWRQcmltaXRpdmUsRD1l'@;
put 'ZS5pc051bWJlck9iamVjdCxIPWVlLmlzU3RyaW5nT2JqZWN0LE49ZWUuaXNCb29sZWFuT2JqZWN0LGc9ZWUuaXNCaWdJbnRPYmplY3QsQz1lZS5pc1N5bWJvbE9iamVjdCxTPWVlLmlzRmxvYXQzMkFycmF5LHY9ZWUuaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gcChiZSl7aWYoMD09PWJlLmxl'@;
put 'bmd0aHx8YmUubGVuZ3RoPjEwKXJldHVybiEwO2Zvcih2YXIgQWU9MDtBZTxiZS5sZW5ndGg7QWUrKyl7dmFyIFRlPWJlLmNoYXJDb2RlQXQoQWUpO2lmKFRlPDQ4fHxUZT41NylyZXR1cm4hMH1yZXR1cm4gMTA9PT1iZS5sZW5ndGgmJmJlPj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiB3KGJl'@;
put 'KXtyZXR1cm4gT2JqZWN0LmtleXMoYmUpLmZpbHRlcihwKS5jb25jYXQoVihiZSkuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChiZSkpKX1mdW5jdGlvbiBKKGJlLEFlKXtpZihiZT09PUFlKXJldHVybiAwO2Zvcih2YXIgVGU9YmUubGVuZ3RoLHFl'@;
put 'PUFlLmxlbmd0aCxYZT0wLFVlPU1hdGgubWluKFRlLHFlKTtYZTxVZTsrK1hlKWlmKGJlW1hlXSE9PUFlW1hlXSl7VGU9YmVbWGVdLHFlPUFlW1hlXTticmVha31yZXR1cm4gVGU8cWU/LTE6cWU8VGU/MTowfXZhciBmZT0wLHhlPTEsTGU9MixGZT0zO2Z1bmN0aW9uIE9lKGJlLEFlLFRlLHFl'@;
put 'KXtpZihiZT09PUFlKXJldHVybiAwIT09YmV8fCFUZXx8aihiZSxBZSk7aWYoVGUpe2lmKCJvYmplY3QiIT09SyhiZSkpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBiZSYmQihiZSkmJkIoQWUpO2lmKCJvYmplY3QiIT09SyhBZSl8fG51bGw9PT1iZXx8bnVsbD09PUFlfHxPYmplY3QuZ2V0UHJv'@;
put 'dG90eXBlT2YoYmUpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKEFlKSlyZXR1cm4hMX1lbHNle2lmKG51bGw9PT1iZXx8Im9iamVjdCIhPT1LKGJlKSlyZXR1cm4obnVsbD09PUFlfHwib2JqZWN0IiE9PUsoQWUpKSYmYmU9PUFlO2lmKG51bGw9PT1BZXx8Im9iamVjdCIhPT1LKEFlKSlyZXR1'@;
put 'cm4hMX12YXIgWGUsVWUsaHQsTWUsSHQsUHQsRGU9cShiZSk7aWYoRGUhPT1xKEFlKSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGJlKSl7aWYoYmUubGVuZ3RoIT09QWUubGVuZ3RoKXJldHVybiExO3ZhciB6ZT13KGJlKSxvdD13KEFlKTtyZXR1cm4gemUubGVuZ3RoPT09b3QubGVuZ3Ro'@;
put 'JiZXZShiZSxBZSxUZSxxZSx4ZSx6ZSl9aWYoIltvYmplY3QgT2JqZWN0XSI9PT1EZSYmKCFoZShiZSkmJmhlKEFlKXx8IWNlKGJlKSYmY2UoQWUpKSlyZXR1cm4hMTtpZihzZShiZSkpe2lmKCFzZShBZSl8fERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChiZSkhPT1EYXRlLnByb3RvdHlw'@;
put 'ZS5nZXRUaW1lLmNhbGwoQWUpKXJldHVybiExfWVsc2UgaWYodWUoYmUpKXtpZighdWUoQWUpfHwoaHQ9YmUsTWU9QWUsIShJP2h0LnNvdXJjZT09PU1lLnNvdXJjZSYmaHQuZmxhZ3M9PT1NZS5mbGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaHQpPT09UmVnRXhwLnByb3Rv'@;
put 'dHlwZS50b1N0cmluZy5jYWxsKE1lKSkpKXJldHVybiExfWVsc2UgaWYoRyhiZSl8fGJlIGluc3RhbmNlb2YgRXJyb3Ipe2lmKGJlLm1lc3NhZ2UhPT1BZS5tZXNzYWdlfHxiZS5uYW1lIT09QWUubmFtZSlyZXR1cm4hMX1lbHNle2lmKG9lKGJlKSl7aWYoVGV8fCFTKGJlKSYmIXYoYmUpKXtp'@;
put 'ZigoSHQ9YmUpLmJ5dGVMZW5ndGghPT0oUHQ9QWUpLmJ5dGVMZW5ndGh8fDAhPT1KKG5ldyBVaW50OEFycmF5KEh0LmJ1ZmZlcixIdC5ieXRlT2Zmc2V0LEh0LmJ5dGVMZW5ndGgpLG5ldyBVaW50OEFycmF5KFB0LmJ1ZmZlcixQdC5ieXRlT2Zmc2V0LFB0LmJ5dGVMZW5ndGgpKSlyZXR1cm4h'@;
put 'MX1lbHNlIGlmKCFmdW5jdGlvbihIdCxQdCl7aWYoSHQuYnl0ZUxlbmd0aCE9PVB0LmJ5dGVMZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvbj0wO29uPEh0LmJ5dGVMZW5ndGg7b24rKylpZihIdFtvbl0hPT1QdFtvbl0pcmV0dXJuITE7cmV0dXJuITB9KGJlLEFlKSlyZXR1cm4hMTt2YXIgdXQ9'@;
put 'dyhiZSksTXQ9dyhBZSk7cmV0dXJuIHV0Lmxlbmd0aD09PU10Lmxlbmd0aCYmV2UoYmUsQWUsVGUscWUsZmUsdXQpfWlmKGNlKGJlKSlyZXR1cm4hKCFjZShBZSl8fGJlLnNpemUhPT1BZS5zaXplKSYmV2UoYmUsQWUsVGUscWUsTGUpO2lmKGhlKGJlKSlyZXR1cm4hKCFoZShBZSl8fGJlLnNp'@;
put 'emUhPT1BZS5zaXplKSYmV2UoYmUsQWUsVGUscWUsRmUpO2lmKHRlKGJlKSl7aWYoKFhlPWJlKS5ieXRlTGVuZ3RoIT09KFVlPUFlKS5ieXRlTGVuZ3RofHwwIT09SihuZXcgVWludDhBcnJheShYZSksbmV3IFVpbnQ4QXJyYXkoVWUpKSlyZXR1cm4hMX1lbHNlIGlmKGIoYmUpJiYhZnVuY3Rp'@;
put 'b24oSHQsUHQpe3JldHVybiBEKEh0KT9EKFB0KSYmaihOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChIdCksTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpKTpIKEh0KT9IKFB0KSYmU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09U3RyaW5nLnByb3RvdHlw'@;
put 'ZS52YWx1ZU9mLmNhbGwoUHQpOk4oSHQpP04oUHQpJiZCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09Qm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KTpnKEh0KT9nKFB0KSYmQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09QmlnSW50LnByb3Rv'@;
put 'dHlwZS52YWx1ZU9mLmNhbGwoUHQpOkMoUHQpJiZTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YuY2FsbChIdCk9PT1TeW1ib2wucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCl9KGJlLEFlKSlyZXR1cm4hMX1yZXR1cm4gV2UoYmUsQWUsVGUscWUsZmUpfWZ1bmN0aW9uIGplKGJlLEFlKXtyZXR1'@;
put 'cm4gQWUuZmlsdGVyKGZ1bmN0aW9uKFRlKXtyZXR1cm4gVShiZSxUZSl9KX1mdW5jdGlvbiBXZShiZSxBZSxUZSxxZSxYZSxVZSl7aWYoNT09PWFyZ3VtZW50cy5sZW5ndGgpe1VlPU9iamVjdC5rZXlzKGJlKTt2YXIgaHQ9T2JqZWN0LmtleXMoQWUpO2lmKFVlLmxlbmd0aCE9PWh0Lmxlbmd0'@;
put 'aClyZXR1cm4hMX1mb3IodmFyIE1lPTA7TWU8VWUubGVuZ3RoO01lKyspaWYoIVgoQWUsVWVbTWVdKSlyZXR1cm4hMTtpZihUZSYmNT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBEZT1WKGJlKTtpZigwIT09RGUubGVuZ3RoKXt2YXIgemU9MDtmb3IoTWU9MDtNZTxEZS5sZW5ndGg7TWUrKyl7'@;
put 'dmFyIG90PURlW01lXTtpZihVKGJlLG90KSl7aWYoIVUoQWUsb3QpKXJldHVybiExO1VlLnB1c2gob3QpLHplKyt9ZWxzZSBpZihVKEFlLG90KSlyZXR1cm4hMX12YXIgdXQ9VihBZSk7aWYoRGUubGVuZ3RoIT09dXQubGVuZ3RoJiZqZShBZSx1dCkubGVuZ3RoIT09emUpcmV0dXJuITF9ZWxz'@;
put 'ZXt2YXIgTXQ9VihBZSk7aWYoMCE9PU10Lmxlbmd0aCYmMCE9PWplKEFlLE10KS5sZW5ndGgpcmV0dXJuITF9fWlmKDA9PT1VZS5sZW5ndGgmJihYZT09PWZlfHxYZT09PXhlJiYwPT09YmUubGVuZ3RofHwwPT09YmUuc2l6ZSkpcmV0dXJuITA7aWYodm9pZCAwPT09cWUpcWU9e3ZhbDE6bmV3'@;
put 'IE1hcCx2YWwyOm5ldyBNYXAscG9zaXRpb246MH07ZWxzZXt2YXIgSHQ9cWUudmFsMS5nZXQoYmUpO2lmKHZvaWQgMCE9PUh0KXt2YXIgUHQ9cWUudmFsMi5nZXQoQWUpO2lmKHZvaWQgMCE9PVB0KXJldHVybiBIdD09PVB0fXFlLnBvc2l0aW9uKyt9cWUudmFsMS5zZXQoYmUscWUucG9zaXRp'@;
put 'b24pLHFlLnZhbDIuc2V0KEFlLHFlLnBvc2l0aW9uKTt2YXIgb249ZnVuY3Rpb24oQ24sVXQsYm4sV24sZW4sJG4pe3ZhciBIbj0wO2lmKCRuPT09TGUpe2lmKCFmdW5jdGlvbih3dCxYdCxfdCxOdCl7Zm9yKHZhciBtbj1udWxsLHJ0PWsod3QpLEl0PTA7SXQ8cnQubGVuZ3RoO0l0Kyspe3Zh'@;
put 'ciBRdD1ydFtJdF07aWYoIm9iamVjdCI9PT1LKFF0KSYmbnVsbCE9PVF0KW51bGw9PT1tbiYmKG1uPW5ldyBTZXQpLG1uLmFkZChRdCk7ZWxzZSBpZighWHQuaGFzKFF0KSl7aWYoX3R8fCFRZSh3dCxYdCxRdCkpcmV0dXJuITE7bnVsbD09PW1uJiYobW49bmV3IFNldCksbW4uYWRkKFF0KX19'@;
put 'aWYobnVsbCE9PW1uKXtmb3IodmFyIER0PWsoWHQpLHB0PTA7cHQ8RHQubGVuZ3RoO3B0Kyspe3ZhciBZdD1EdFtwdF07aWYoIm9iamVjdCI9PT1LKFl0KSYmbnVsbCE9PVl0KXtpZighS2UobW4sWXQsX3QsTnQpKXJldHVybiExfWVsc2UgaWYoIV90JiYhd3QuaGFzKFl0KSYmIUtlKG1uLFl0'@;
put 'LF90LE50KSlyZXR1cm4hMX1yZXR1cm4gMD09PW1uLnNpemV9cmV0dXJuITB9KENuLFV0LGJuLGVuKSlyZXR1cm4hMX1lbHNlIGlmKCRuPT09RmUpe2lmKCFmdW5jdGlvbih3dCxYdCxfdCxOdCl7Zm9yKHZhciBtbj1udWxsLHJ0PUUod3QpLEl0PTA7SXQ8cnQubGVuZ3RoO0l0Kyspe3ZhciBR'@;
put 'dD16KHJ0W0l0XSwyKSxEdD1RdFswXSxwdD1RdFsxXTtpZigib2JqZWN0Ij09PUsoRHQpJiZudWxsIT09RHQpbnVsbD09PW1uJiYobW49bmV3IFNldCksbW4uYWRkKER0KTtlbHNle3ZhciBZdD1YdC5nZXQoRHQpO2lmKHZvaWQgMD09PVl0JiYhWHQuaGFzKER0KXx8IU9lKHB0LFl0LF90LE50'@;
put 'KSl7aWYoX3R8fCFsdCh3dCxYdCxEdCxwdCxOdCkpcmV0dXJuITE7bnVsbD09PW1uJiYobW49bmV3IFNldCksbW4uYWRkKER0KX19fWlmKG51bGwhPT1tbil7Zm9yKHZhciBJbj1FKFh0KSx6dD0wO3p0PEluLmxlbmd0aDt6dCsrKXt2YXIgeW49eihJblt6dF0sMikseG49KER0PXluWzBdLHlu'@;
put 'WzFdKTtpZigib2JqZWN0Ij09PUsoRHQpJiZudWxsIT09RHQpe2lmKCFQZShtbix3dCxEdCx4bixfdCxOdCkpcmV0dXJuITF9ZWxzZSBpZighKF90fHx3dC5oYXMoRHQpJiZPZSh3dC5nZXQoRHQpLHhuLCExLE50KXx8UGUobW4sd3QsRHQseG4sITEsTnQpKSlyZXR1cm4hMX1yZXR1cm4gMD09'@;
put 'PW1uLnNpemV9cmV0dXJuITB9KENuLFV0LGJuLGVuKSlyZXR1cm4hMX1lbHNlIGlmKCRuPT09eGUpZm9yKDtIbjxDbi5sZW5ndGg7SG4rKyl7aWYoIVgoQ24sSG4pKXtpZihYKFV0LEhuKSlyZXR1cm4hMTtmb3IodmFyIGZ0PU9iamVjdC5rZXlzKENuKTtIbjxmdC5sZW5ndGg7SG4rKyl7dmFy'@;
put 'IGZuPWZ0W0huXTtpZighWChVdCxmbil8fCFPZShDbltmbl0sVXRbZm5dLGJuLGVuKSlyZXR1cm4hMX1yZXR1cm4gZnQubGVuZ3RoPT09T2JqZWN0LmtleXMoVXQpLmxlbmd0aH1pZighWChVdCxIbil8fCFPZShDbltIbl0sVXRbSG5dLGJuLGVuKSlyZXR1cm4hMX1mb3IoSG49MDtIbjxXbi5s'@;
put 'ZW5ndGg7SG4rKyl7dmFyIGhuPVduW0huXTtpZighT2UoQ25baG5dLFV0W2huXSxibixlbikpcmV0dXJuITF9cmV0dXJuITB9KGJlLEFlLFRlLFVlLHFlLFhlKTtyZXR1cm4gcWUudmFsMS5kZWxldGUoYmUpLHFlLnZhbDIuZGVsZXRlKEFlKSxvbn1mdW5jdGlvbiBLZShiZSxBZSxUZSxxZSl7'@;
put 'Zm9yKHZhciBYZT1rKGJlKSxVZT0wO1VlPFhlLmxlbmd0aDtVZSsrKXt2YXIgaHQ9WGVbVWVdO2lmKE9lKEFlLGh0LFRlLHFlKSlyZXR1cm4gYmUuZGVsZXRlKGh0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBZZShiZSl7c3dpdGNoKEsoYmUpKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIG51bGw7'@;
put 'Y2FzZSJvYmplY3QiOnJldHVybjtjYXNlInN5bWJvbCI6cmV0dXJuITE7Y2FzZSJzdHJpbmciOmJlPStiZTtjYXNlIm51bWJlciI6aWYoQihiZSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gUWUoYmUsQWUsVGUpe3ZhciBxZT1ZZShUZSk7cmV0dXJuIHFlPz8oQWUuaGFzKHFlKSYmIWJl'@;
put 'LmhhcyhxZSkpfWZ1bmN0aW9uIGx0KGJlLEFlLFRlLHFlLFhlKXt2YXIgVWU9WWUoVGUpO2lmKG51bGwhPVVlKXJldHVybiBVZTt2YXIgaHQ9QWUuZ2V0KFVlKTtyZXR1cm4hKHZvaWQgMD09PWh0JiYhQWUuaGFzKFVlKXx8IU9lKHFlLGh0LCExLFhlKSkmJiFiZS5oYXMoVWUpJiZPZShxZSxo'@;
put 'dCwhMSxYZSl9ZnVuY3Rpb24gUGUoYmUsQWUsVGUscWUsWGUsVWUpe2Zvcih2YXIgaHQ9ayhiZSksTWU9MDtNZTxodC5sZW5ndGg7TWUrKyl7dmFyIERlPWh0W01lXTtpZihPZShUZSxEZSxYZSxVZSkmJk9lKHFlLEFlLmdldChEZSksWGUsVWUpKXJldHVybiBiZS5kZWxldGUoRGUpLCEwfXJl'@;
put 'dHVybiExfU0uZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBPZShiZSxBZSwhMSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gT2UoYmUsQWUsITApfX19LDgyMjQ6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24o'@;
put 'Tyl7cmV0dXJuIE99fSw5NjY5OihNLE8sUik9PntNLmV4cG9ydHM9UigxNjA5KX0sNTQ0ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDYwMjYpLEk9Uig0MzcyKSxrPVIoNTMyNyksRT1SKDQwOTcpLGo9Uig0MTA5KSxWPVIoNzk4NSksQj1SKDc4NzQpLFk9Uigy'@;
put 'NjQ4KSxYPVIoNjQ0KSxVPVIoMjA1KTtNLmV4cG9ydHM9ZnVuY3Rpb24ocSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2U9cS5kYXRhLGhlPXEuaGVhZGVycyx1ZT1xLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBjZSgpe3EuY2FuY2VsVG9rZW4mJnEuY2FuY2Vs'@;
put 'VG9rZW4udW5zdWJzY3JpYmUob2UpLHEuc2lnbmFsJiZxLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsb2UpfXouaXNGb3JtRGF0YShzZSkmJnouaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSYmZGVsZXRlIGhlWyJDb250ZW50LVR5cGUiXTt2YXIgRz1uZXcgWE1MSHR0cFJlcXVl'@;
put 'c3Q7aWYocS5hdXRoKXt2YXIgYj1xLmF1dGgudXNlcm5hbWV8fCIiLEQ9cS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChxLmF1dGgucGFzc3dvcmQpKToiIjtoZS5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EoYisiOiIrRCl9dmFyIEg9RShxLmJhc2VVUkws'@;
put 'cS51cmwpO2Z1bmN0aW9uIE4oKXtpZihHKXt2YXIgUz0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIEc/aihHLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsO0soZnVuY3Rpb24ocCl7ZWUocCksY2UoKX0sZnVuY3Rpb24ocCl7dGUocCksY2UoKX0se2RhdGE6dWUmJiJ0ZXh0IiE9PXVl'@;
put 'JiYianNvbiIhPT11ZT9HLnJlc3BvbnNlOkcucmVzcG9uc2VUZXh0LHN0YXR1czpHLnN0YXR1cyxzdGF0dXNUZXh0Okcuc3RhdHVzVGV4dCxoZWFkZXJzOlMsY29uZmlnOnEscmVxdWVzdDpHfSksRz1udWxsfX1pZihHLm9wZW4ocS5tZXRob2QudG9VcHBlckNhc2UoKSxrKEgscS5wYXJhbXMs'@;
put 'cS5wYXJhbXNTZXJpYWxpemVyKSwhMCksRy50aW1lb3V0PXEudGltZW91dCwib25sb2FkZW5kImluIEc/Ry5vbmxvYWRlbmQ9TjpHLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0cmJjQ9PT1HLnJlYWR5U3RhdGUmJigwIT09Ry5zdGF0dXN8fEcucmVzcG9uc2VVUkwmJjA9PT1HLnJl'@;
put 'c3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KE4pfSxHLm9uYWJvcnQ9ZnVuY3Rpb24oKXtHJiYodGUobmV3IFkoIlJlcXVlc3QgYWJvcnRlZCIsWS5FQ09OTkFCT1JURUQscSxHKSksRz1udWxsKX0sRy5vbmVycm9yPWZ1bmN0aW9uKCl7dGUobmV3IFkoIk5ldHdvcmsg'@;
put 'RXJyb3IiLFkuRVJSX05FVFdPUksscSxHLEcpKSxHPW51bGx9LEcub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIFM9cS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrcS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiO3EudGltZW91dEVycm9yTWVzc2FnZSYmKFM9cS50aW1l'@;
put 'b3V0RXJyb3JNZXNzYWdlKSx0ZShuZXcgWShTLChxLnRyYW5zaXRpb25hbHx8QikuY2xhcmlmeVRpbWVvdXRFcnJvcj9ZLkVUSU1FRE9VVDpZLkVDT05OQUJPUlRFRCxxLEcpKSxHPW51bGx9LHouaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGc9KHEud2l0aENyZWRlbnRpYWxzfHxWKEgp'@;
put 'KSYmcS54c3JmQ29va2llTmFtZT9JLnJlYWQocS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2cmJihoZVtxLnhzcmZIZWFkZXJOYW1lXT1nKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBHJiZ6LmZvckVhY2goaGUsZnVuY3Rpb24oUyx2KXt2b2lkIDA9PT1zZSYmImNvbnRlbnQtdHlwZSI9PT12LnRv'@;
put 'TG93ZXJDYXNlKCk/ZGVsZXRlIGhlW3ZdOkcuc2V0UmVxdWVzdEhlYWRlcih2LFMpfSksei5pc1VuZGVmaW5lZChxLndpdGhDcmVkZW50aWFscyl8fChHLndpdGhDcmVkZW50aWFscz0hIXEud2l0aENyZWRlbnRpYWxzKSx1ZSYmImpzb24iIT09dWUmJihHLnJlc3BvbnNlVHlwZT1xLnJlc3Bv'@;
put 'bnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIHEub25Eb3dubG9hZFByb2dyZXNzJiZHLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixxLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIHEub25VcGxvYWRQcm9ncmVzcyYmRy51cGxvYWQmJkcudXBsb2FkLmFkZEV2'@;
put 'ZW50TGlzdGVuZXIoInByb2dyZXNzIixxLm9uVXBsb2FkUHJvZ3Jlc3MpLChxLmNhbmNlbFRva2VufHxxLnNpZ25hbCkmJihvZT1mdW5jdGlvbihTKXtHJiYodGUoIVN8fFMmJlMudHlwZT9uZXcgWDpTKSxHLmFib3J0KCksRz1udWxsKX0scS5jYW5jZWxUb2tlbiYmcS5jYW5jZWxUb2tlbi5z'@;
put 'dWJzY3JpYmUob2UpLHEuc2lnbmFsJiYocS5zaWduYWwuYWJvcnRlZD9vZSgpOnEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixvZSkpKSxzZXx8KHNlPW51bGwpO3ZhciBDPVUoSCk7QyYmLTE9PT1bImh0dHAiLCJodHRwcyIsImZpbGUiXS5pbmRleE9mKEMpP3RlKG5ldyBZKCJV'@;
put 'bnN1cHBvcnRlZCBwcm90b2NvbCAiK0MrIjoiLFkuRVJSX0JBRF9SRVFVRVNULHEpKTpHLnNlbmQoc2UpfSl9fSwxNjA5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoMTg0OSksST1SKDMyMSksaz1SKDcxODUpLEU9ZnVuY3Rpb24gaihWKXt2YXIgQj1uZXcgSShW'@;
put 'KSxZPUsoSS5wcm90b3R5cGUucmVxdWVzdCxCKTtyZXR1cm4gei5leHRlbmQoWSxJLnByb3RvdHlwZSxCKSx6LmV4dGVuZChZLEIpLFkuY3JlYXRlPWZ1bmN0aW9uKFgpe3JldHVybiBqKGsoVixYKSl9LFl9KFIoNTU0NikpO0UuQXhpb3M9SSxFLkNhbmNlbGVkRXJyb3I9Uig2NDQpLEUuQ2Fu'@;
put 'Y2VsVG9rZW49Uig0OTcyKSxFLmlzQ2FuY2VsPVIoNjUwMiksRS5WRVJTSU9OPVIoNzI4OCkudmVyc2lvbixFLnRvRm9ybURhdGE9Uig3Njc1KSxFLkF4aW9zRXJyb3I9UigyNjQ4KSxFLkNhbmNlbD1FLkNhbmNlbGVkRXJyb3IsRS5hbGw9ZnVuY3Rpb24oail7cmV0dXJuIFByb21pc2UuYWxs'@;
put 'KGopfSxFLnNwcmVhZD1SKDg3MTMpLEUuaXNBeGlvc0Vycm9yPVIoNjI2OCksTS5leHBvcnRzPUUsTS5leHBvcnRzLmRlZmF1bHQ9RX0sNDk3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQ0KTtmdW5jdGlvbiBLKEkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBJKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgazt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oail7az1qfSk7dmFyIEU9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihqKXtpZihFLl9saXN0ZW5lcnMpe3ZhciBWLEI9RS5fbGlz'@;
put 'dGVuZXJzLmxlbmd0aDtmb3IoVj0wO1Y8QjtWKyspRS5fbGlzdGVuZXJzW1ZdKGopO0UuX2xpc3RlbmVycz1udWxsfX0pLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGope3ZhciBWLEI9bmV3IFByb21pc2UoZnVuY3Rpb24oWSl7RS5zdWJzY3JpYmUoWSksVj1ZfSkudGhlbihqKTtyZXR1'@;
put 'cm4gQi5jYW5jZWw9ZnVuY3Rpb24oKXtFLnVuc3Vic2NyaWJlKFYpfSxCfSxJKGZ1bmN0aW9uKGope0UucmVhc29ufHwoRS5yZWFzb249bmV3IHooaiksayhFLnJlYXNvbikpfSl9Sy5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRo'@;
put 'aXMucmVhc29ufSxLLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oSSl7dGhpcy5yZWFzb24/SSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEkpOnRoaXMuX2xpc3RlbmVycz1bSV19LEsucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9u'@;
put 'KEkpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIGs9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoSSk7LTEhPT1rJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGssMSl9fSxLLnNvdXJjZT1mdW5jdGlvbigpe3ZhciBJO3JldHVybnt0b2tlbjpuZXcgSyhmdW5jdGlvbihrKXtJPWt9KSxjYW5jZWw6'@;
put 'SX19LE0uZXhwb3J0cz1LfSw2NDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDI2NDgpO2Z1bmN0aW9uIEsoSSl7ei5jYWxsKHRoaXMsST8/ImNhbmNlbGVkIix6LkVSUl9DQU5DRUxFRCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1SKDQ4NjcpLmluaGVyaXRzKEsseix7X19D'@;
put 'QU5DRUxfXzohMH0pLE0uZXhwb3J0cz1LfSw2NTAyOk09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiEoIU98fCFPLl9fQ0FOQ0VMX18pfX0sMzIxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoNTMyNyksST1SKDc4Miksaz1SKDM1'@;
put 'NzIpLEU9Uig3MTg1KSxqPVIoNDA5NyksVj1SKDQ4NzUpLEI9Vi52YWxpZGF0b3JzO2Z1bmN0aW9uIFkoWCl7dGhpcy5kZWZhdWx0cz1YLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBJLHJlc3BvbnNlOm5ldyBJfX1ZLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKFgsVSl7InN0'@;
put 'cmluZyI9PXR5cGVvZiBYPyhVPVV8fHt9KS51cmw9WDpVPVh8fHt9LFUubWV0aG9kPShVPUUodGhpcy5kZWZhdWx0cyxVKSkubWV0aG9kP1UubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKToiZ2V0Ijt2'@;
put 'YXIgcT1VLnRyYW5zaXRpb25hbDt2b2lkIDAhPT1xJiZWLmFzc2VydE9wdGlvbnMocSx7c2lsZW50SlNPTlBhcnNpbmc6Qi50cmFuc2l0aW9uYWwoQi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpCLnRyYW5zaXRpb25hbChCLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Qi50cmFu'@;
put 'c2l0aW9uYWwoQi5ib29sZWFuKX0sITEpO3ZhciBlZT1bXSx0ZT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYil7ImZ1bmN0aW9uIj09dHlwZW9mIGIucnVuV2hlbiYmITE9PT1iLnJ1bldoZW4oVSl8fCh0ZT10ZSYmYi5zeW5jaHJvbm91cyxlZS51bnNo'@;
put 'aWZ0KGIuZnVsZmlsbGVkLGIucmVqZWN0ZWQpKX0pO3ZhciBvZSxzZT1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3NlLnB1c2goYi5mdWxmaWxsZWQsYi5yZWplY3RlZCl9KSwhdGUpe3ZhciBoZT1bayx2b2lkIDBdO2ZvcihBcnJheS5wcm90'@;
put 'b3R5cGUudW5zaGlmdC5hcHBseShoZSxlZSksaGU9aGUuY29uY2F0KHNlKSxvZT1Qcm9taXNlLnJlc29sdmUoVSk7aGUubGVuZ3RoOylvZT1vZS50aGVuKGhlLnNoaWZ0KCksaGUuc2hpZnQoKSk7cmV0dXJuIG9lfWZvcih2YXIgdWU9VTtlZS5sZW5ndGg7KXt2YXIgY2U9ZWUuc2hpZnQoKSxH'@;
put 'PWVlLnNoaWZ0KCk7dHJ5e3VlPWNlKHVlKX1jYXRjaChiKXtHKGIpO2JyZWFrfX10cnl7b2U9ayh1ZSl9Y2F0Y2goYil7cmV0dXJuIFByb21pc2UucmVqZWN0KGIpfWZvcig7c2UubGVuZ3RoOylvZT1vZS50aGVuKHNlLnNoaWZ0KCksc2Uuc2hpZnQoKSk7cmV0dXJuIG9lfSxZLnByb3RvdHlw'@;
put 'ZS5nZXRVcmk9ZnVuY3Rpb24oWCl7WD1FKHRoaXMuZGVmYXVsdHMsWCk7dmFyIFU9aihYLmJhc2VVUkwsWC51cmwpO3JldHVybiBLKFUsWC5wYXJhbXMsWC5wYXJhbXNTZXJpYWxpemVyKX0sei5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihYKXtZ'@;
put 'LnByb3RvdHlwZVtYXT1mdW5jdGlvbihVLHEpe3JldHVybiB0aGlzLnJlcXVlc3QoRShxfHx7fSx7bWV0aG9kOlgsdXJsOlUsZGF0YToocXx8e30pLmRhdGF9KSl9fSksei5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oWCl7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oZWUsdGUsb2Upe3JldHVybiB0aGlzLnJlcXVlc3QoRShvZXx8e30se21ldGhvZDpYLGhlYWRlcnM6cT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6ZWUsZGF0YTp0ZX0pKX19WS5wcm90b3R5cGVbWF09VSgpLFkucHJvdG90eXBlW1grIkZvcm0i'@;
put 'XT1VKCEwKX0pLE0uZXhwb3J0cz1ZfSwyNjQ4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtmdW5jdGlvbiBLKEUsaixWLEIsWSl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9RSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGomJih0aGlzLmNvZGU9aiksViYmKHRo'@;
put 'aXMuY29uZmlnPVYpLEImJih0aGlzLnJlcXVlc3Q9QiksWSYmKHRoaXMucmVzcG9uc2U9WSl9ei5pbmhlcml0cyhLLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixu'@;
put 'dW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVz'@;
put 'cG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBJPUsucHJvdG90eXBlLGs9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJF'@;
put 'UlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIl0uZm9yRWFjaChmdW5jdGlvbihFKXtrW0VdPXt2YWx1ZTpFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssayksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KEksImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSksSy5mcm9tPWZ1bmN0aW9uKEUsaixWLEIsWSxYKXt2YXIgVT1PYmplY3QuY3JlYXRlKEkpO3JldHVybiB6LnRvRmxhdE9iamVjdChFLFUsZnVuY3Rpb24ocSl7cmV0dXJuIHEhPT1FcnJvci5wcm90b3R5cGV9'@;
put 'KSxLLmNhbGwoVSxFLm1lc3NhZ2UsaixWLEIsWSksVS5uYW1lPUUubmFtZSxYJiZPYmplY3QuYXNzaWduKFUsWCksVX0sTS5leHBvcnRzPUt9LDc4MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7ZnVuY3Rpb24gSygpe3RoaXMuaGFuZGxlcnM9W119Sy5wcm90b3R5cGUu'@;
put 'dXNlPWZ1bmN0aW9uKEksayxFKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6SSxyZWplY3RlZDprLHN5bmNocm9ub3VzOiEhRSYmRS5zeW5jaHJvbm91cyxydW5XaGVuOkU/RS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxLLnByb3RvdHlwZS5l'@;
put 'amVjdD1mdW5jdGlvbihJKXt0aGlzLmhhbmRsZXJzW0ldJiYodGhpcy5oYW5kbGVyc1tJXT1udWxsKX0sSy5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihJKXt6LmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihrKXtudWxsIT09ayYmSShrKX0pfSxNLmV4cG9ydHM9S30sNDA5Nzoo'@;
put 'TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMTc5MyksSz1SKDczMDMpO00uZXhwb3J0cz1mdW5jdGlvbihJLGspe3JldHVybiBJJiYheihrKT9LKEksayk6a319LDM1NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9Uig4NTI3KSxJPVIoNjUwMiksaz1SKDU1'@;
put 'NDYpLEU9Uig2NDQpO2Z1bmN0aW9uIGooVil7aWYoVi5jYW5jZWxUb2tlbiYmVi5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksVi5zaWduYWwmJlYuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEV9TS5leHBvcnRzPWZ1bmN0aW9uKFYpe3JldHVybiBqKFYpLFYuaGVhZGVycz1WLmhl'@;
put 'YWRlcnN8fHt9LFYuZGF0YT1LLmNhbGwoVixWLmRhdGEsVi5oZWFkZXJzLFYudHJhbnNmb3JtUmVxdWVzdCksVi5oZWFkZXJzPXoubWVyZ2UoVi5oZWFkZXJzLmNvbW1vbnx8e30sVi5oZWFkZXJzW1YubWV0aG9kXXx8e30sVi5oZWFkZXJzKSx6LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJo'@;
put 'ZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sZnVuY3Rpb24oQil7ZGVsZXRlIFYuaGVhZGVyc1tCXX0pLChWLmFkYXB0ZXJ8fGsuYWRhcHRlcikoVikudGhlbihmdW5jdGlvbihCKXtyZXR1cm4gaihWKSxCLmRhdGE9Sy5jYWxsKFYsQi5kYXRhLEIuaGVhZGVycyxWLnRyYW5z'@;
put 'Zm9ybVJlc3BvbnNlKSxCfSxmdW5jdGlvbihCKXtyZXR1cm4gSShCKXx8KGooViksQiYmQi5yZXNwb25zZSYmKEIucmVzcG9uc2UuZGF0YT1LLmNhbGwoVixCLnJlc3BvbnNlLmRhdGEsQi5yZXNwb25zZS5oZWFkZXJzLFYudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QoQil9'@;
put 'KX19LDcxODU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz1mdW5jdGlvbihLLEkpe0k9SXx8e307dmFyIGs9e307ZnVuY3Rpb24gRShVLHEpe3JldHVybiB6LmlzUGxhaW5PYmplY3QoVSkmJnouaXNQbGFpbk9iamVjdChxKT96Lm1lcmdlKFUscSk6ei5p'@;
put 'c1BsYWluT2JqZWN0KHEpP3oubWVyZ2Uoe30scSk6ei5pc0FycmF5KHEpP3Euc2xpY2UoKTpxfWZ1bmN0aW9uIGooVSl7cmV0dXJuIHouaXNVbmRlZmluZWQoSVtVXSk/ei5pc1VuZGVmaW5lZChLW1VdKT92b2lkIDA6RSh2b2lkIDAsS1tVXSk6RShLW1VdLElbVV0pfWZ1bmN0aW9uIFYoVSl7'@;
put 'aWYoIXouaXNVbmRlZmluZWQoSVtVXSkpcmV0dXJuIEUodm9pZCAwLElbVV0pfWZ1bmN0aW9uIEIoVSl7cmV0dXJuIHouaXNVbmRlZmluZWQoSVtVXSk/ei5pc1VuZGVmaW5lZChLW1VdKT92b2lkIDA6RSh2b2lkIDAsS1tVXSk6RSh2b2lkIDAsSVtVXSl9ZnVuY3Rpb24gWShVKXtyZXR1cm4g'@;
put 'VSBpbiBJP0UoS1tVXSxJW1VdKTpVIGluIEs/RSh2b2lkIDAsS1tVXSk6dm9pZCAwfXZhciBYPXt1cmw6VixtZXRob2Q6VixkYXRhOlYsYmFzZVVSTDpCLHRyYW5zZm9ybVJlcXVlc3Q6Qix0cmFuc2Zvcm1SZXNwb25zZTpCLHBhcmFtc1NlcmlhbGl6ZXI6Qix0aW1lb3V0OkIsdGltZW91dE1l'@;
put 'c3NhZ2U6Qix3aXRoQ3JlZGVudGlhbHM6QixhZGFwdGVyOkIscmVzcG9uc2VUeXBlOkIseHNyZkNvb2tpZU5hbWU6Qix4c3JmSGVhZGVyTmFtZTpCLG9uVXBsb2FkUHJvZ3Jlc3M6QixvbkRvd25sb2FkUHJvZ3Jlc3M6QixkZWNvbXByZXNzOkIsbWF4Q29udGVudExlbmd0aDpCLG1heEJvZHlM'@;
put 'ZW5ndGg6QixiZWZvcmVSZWRpcmVjdDpCLHRyYW5zcG9ydDpCLGh0dHBBZ2VudDpCLGh0dHBzQWdlbnQ6QixjYW5jZWxUb2tlbjpCLHNvY2tldFBhdGg6QixyZXNwb25zZUVuY29kaW5nOkIsdmFsaWRhdGVTdGF0dXM6WX07cmV0dXJuIHouZm9yRWFjaChPYmplY3Qua2V5cyhLKS5jb25jYXQo'@;
put 'T2JqZWN0LmtleXMoSSkpLGZ1bmN0aW9uKFUpe3ZhciBxPVhbVV18fGosZWU9cShVKTt6LmlzVW5kZWZpbmVkKGVlKSYmcSE9PVl8fChrW1VdPWVlKX0pLGt9fSw2MDI2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyNjQ4KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyxJLGspe3ZhciBF'@;
put 'PWsuY29uZmlnLnZhbGlkYXRlU3RhdHVzO2suc3RhdHVzJiZFJiYhRShrLnN0YXR1cyk/SShuZXcgeigiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2suc3RhdHVzLFt6LkVSUl9CQURfUkVRVUVTVCx6LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioay5zdGF0dXMvMTAw'@;
put 'KS00XSxrLmNvbmZpZyxrLnJlcXVlc3QsaykpOksoayl9fSw4NTI3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoNTU0Nik7TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFKXt2YXIgaj10aGlzfHxLO3JldHVybiB6LmZvckVhY2goRSxmdW5jdGlvbihWKXtJPVYuY2Fs'@;
put 'bChqLEksayl9KSxJfX0sNTU0NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDQ4NjcpLEk9Uig2MDE2KSxrPVIoMjY0OCksRT1SKDc4NzQpLGo9Uig3Njc1KSxWPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn07ZnVu'@;
put 'Y3Rpb24gQihVLHEpeyFLLmlzVW5kZWZpbmVkKFUpJiZLLmlzVW5kZWZpbmVkKFVbIkNvbnRlbnQtVHlwZSJdKSYmKFVbIkNvbnRlbnQtVHlwZSJdPXEpfXZhciBZLFg9e3RyYW5zaXRpb25hbDpFLGFkYXB0ZXI6KCh0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUifHx2b2lkIDAhPT16JiYiW29i'@;
put 'amVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeikpJiYoWT1SKDU0NDgpKSxZKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihVLHEpe2lmKEkocSwiQWNjZXB0IiksSShxLCJDb250ZW50LVR5cGUiKSxLLmlzRm9ybURhdGEoVSl8fEsuaXNBcnJheUJ1'@;
put 'ZmZlcihVKXx8Sy5pc0J1ZmZlcihVKXx8Sy5pc1N0cmVhbShVKXx8Sy5pc0ZpbGUoVSl8fEsuaXNCbG9iKFUpKXJldHVybiBVO2lmKEsuaXNBcnJheUJ1ZmZlclZpZXcoVSkpcmV0dXJuIFUuYnVmZmVyO2lmKEsuaXNVUkxTZWFyY2hQYXJhbXMoVSkpcmV0dXJuIEIocSwiYXBwbGljYXRpb24v'@;
put 'eC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKSxVLnRvU3RyaW5nKCk7dmFyIGVlLHRlPUsuaXNPYmplY3QoVSksb2U9cSYmcVsiQ29udGVudC1UeXBlIl07aWYoKGVlPUsuaXNGaWxlTGlzdChVKSl8fHRlJiYibXVsdGlwYXJ0L2Zvcm0tZGF0YSI9PT1vZSl7dmFyIHNlPXRo'@;
put 'aXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gaihlZT97ImZpbGVzW10iOlV9OlUsc2UmJm5ldyBzZSl9cmV0dXJuIHRlfHwiYXBwbGljYXRpb24vanNvbiI9PT1vZT8oQihxLCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oaGUsdWUsY2Upe2lmKEsuaXNTdHJpbmcoaGUpKXRy'@;
put 'eXtyZXR1cm4oMCxKU09OLnBhcnNlKShoZSksSy50cmltKGhlKX1jYXRjaChHKXtpZigiU3ludGF4RXJyb3IiIT09Ry5uYW1lKXRocm93IEd9cmV0dXJuKDAsSlNPTi5zdHJpbmdpZnkpKGhlKX0oVSkpOlV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy50cmFu'@;
put 'c2l0aW9uYWx8fFgudHJhbnNpdGlvbmFsLG9lPSEocSYmcS5zaWxlbnRKU09OUGFyc2luZykmJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKG9lfHxxJiZxLmZvcmNlZEpTT05QYXJzaW5nJiZLLmlzU3RyaW5nKFUpJiZVLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoVSl9Y2F0'@;
put 'Y2goc2Upe2lmKG9lKXRocm93IlN5bnRheEVycm9yIj09PXNlLm5hbWU/ay5mcm9tKHNlLGsuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6c2V9cmV0dXJuIFV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJY'@;
put 'LVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOlIoMTYyMyl9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKFUpe3JldHVybiBVPj0yMDAmJlU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwg'@;
put 'dGV4dC9wbGFpbiwgKi8qIn19fTtLLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sZnVuY3Rpb24oVSl7WC5oZWFkZXJzW1VdPXt9fSksSy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oVSl7WC5oZWFkZXJzW1VdPUsubWVyZ2UoVil9KSxNLmV4cG9ydHM9'@;
put 'WH0sNzg3NDpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX19LDcyODg6TT0+e00uZXhwb3J0cz17dmVyc2lvbjoiMC4yNy4yIn19LDE4NDk6TT0+eyJ1c2Ugc3RyaWN0IjtN'@;
put 'LmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHo9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLEs9MDtLPHoubGVuZ3RoO0srKyl6W0tdPWFyZ3VtZW50c1tLXTtyZXR1cm4gTy5hcHBseShSLHopfX19LDUzMjc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgej1SKDQ4NjcpO2Z1bmN0aW9uIEsoSSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChJKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVw'@;
put 'bGFjZSgvJTVEL2dpLCJdIil9TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFKXtpZighaylyZXR1cm4gSTt2YXIgajtpZihFKWo9RShrKTtlbHNlIGlmKHouaXNVUkxTZWFyY2hQYXJhbXMoaykpaj1rLnRvU3RyaW5nKCk7ZWxzZXt2YXIgVj1bXTt6LmZvckVhY2goayxmdW5jdGlvbihZLFgpe251'@;
put 'bGwhPVkmJih6LmlzQXJyYXkoWSk/WCs9IltdIjpZPVtZXSx6LmZvckVhY2goWSxmdW5jdGlvbihVKXt6LmlzRGF0ZShVKT9VPVUudG9JU09TdHJpbmcoKTp6LmlzT2JqZWN0KFUpJiYoVT1KU09OLnN0cmluZ2lmeShVKSksVi5wdXNoKEsoWCkrIj0iK0soVSkpfSkpfSksaj1WLmpvaW4oIiYi'@;
put 'KX1pZihqKXt2YXIgQj1JLmluZGV4T2YoIiMiKTstMSE9PUImJihJPUkuc2xpY2UoMCxCKSksSSs9KC0xPT09SS5pbmRleE9mKCI/Iik/Ij8iOiImIikran1yZXR1cm4gSX19LDczMDM6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtyZXR1cm4gUj9PLnJlcGxhY2Uo'@;
put 'L1wvKyQvLCIiKSsiLyIrUi5yZXBsYWNlKC9eXC8rLywiIik6T319LDQzNzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz16LmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKEssSSxrLEUsaixWKXt2YXIgQj1bXTtCLnB1c2goSysi'@;
put 'PSIrZW5jb2RlVVJJQ29tcG9uZW50KEkpKSx6LmlzTnVtYmVyKGspJiZCLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShrKS50b0dNVFN0cmluZygpKSx6LmlzU3RyaW5nKEUpJiZCLnB1c2goInBhdGg9IitFKSx6LmlzU3RyaW5nKGopJiZCLnB1c2goImRvbWFpbj0iK2opLCEwPT09ViYmQi5w'@;
put 'dXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9Qi5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKEspe3ZhciBJPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitLKyIpPShbXjtdKikiKSk7cmV0dXJuIEk/ZGVjb2RlVVJJQ29tcG9uZW50KElbM10pOm51'@;
put 'bGx9LHJlbW92ZTpmdW5jdGlvbihLKXt0aGlzLndyaXRlKEssIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX19LDE3OTM6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVu'@;
put 'Y3Rpb24oTyl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChPKX19LDYyNjg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz1mdW5jdGlvbihLKXtyZXR1cm4gei5pc09iamVjdChLKSYmITA9PT1LLmlzQXhpb3NFcnJvcn19LDc5'@;
put 'ODU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz16LmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgSyxJPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJh'@;
put 'Iik7ZnVuY3Rpb24gRShqKXt2YXIgVj1qO3JldHVybiBJJiYoay5zZXRBdHRyaWJ1dGUoImhyZWYiLFYpLFY9ay5ocmVmKSxrLnNldEF0dHJpYnV0ZSgiaHJlZiIsVikse2hyZWY6ay5ocmVmLHByb3RvY29sOmsucHJvdG9jb2w/ay5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6'@;
put 'ay5ob3N0LHNlYXJjaDprLnNlYXJjaD9rLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOmsuaGFzaD9rLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTprLmhvc3RuYW1lLHBvcnQ6ay5wb3J0LHBhdGhuYW1lOiIvIj09PWsucGF0aG5hbWUuY2hhckF0KDApP2sucGF0'@;
put 'aG5hbWU6Ii8iK2sucGF0aG5hbWV9fXJldHVybiBLPUUod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGope3ZhciBWPXouaXNTdHJpbmcoaik/RShqKTpqO3JldHVybiBWLnByb3RvY29sPT09Sy5wcm90b2NvbCYmVi5ob3N0PT09Sy5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEw'@;
put 'fX0sNjAxNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7TS5leHBvcnRzPWZ1bmN0aW9uKEssSSl7ei5mb3JFYWNoKEssZnVuY3Rpb24oayxFKXtFIT09SSYmRS50b1VwcGVyQ2FzZSgpPT09SS50b1VwcGVyQ2FzZSgpJiYoS1tJXT1rLGRlbGV0ZSBLW0VdKX0pfX0sMTYy'@;
put 'MzpNPT57TS5leHBvcnRzPW51bGx9LDQxMDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQt'@;
put 'c2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSl7dmFyIGssRSxqLFY9'@;
put 'e307cmV0dXJuIEkmJnouZm9yRWFjaChJLnNwbGl0KCJcbiIpLGZ1bmN0aW9uKEIpe2lmKGo9Qi5pbmRleE9mKCI6Iiksaz16LnRyaW0oQi5zdWJzdHIoMCxqKSkudG9Mb3dlckNhc2UoKSxFPXoudHJpbShCLnN1YnN0cihqKzEpKSxrKXtpZihWW2tdJiZLLmluZGV4T2Yoayk+PTApcmV0dXJu'@;
put 'O1Zba109InNldC1jb29raWUiPT09az8oVltrXT9WW2tdOltdKS5jb25jYXQoW0VdKTpWW2tdP1Zba10rIiwgIitFOkV9fSksVn19LDIwNTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXt2YXIgUj0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhPKTtyZXR1'@;
put 'cm4gUiYmUlsxXXx8IiJ9fSw4NzEzOk09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBmdW5jdGlvbihSKXtyZXR1cm4gTy5hcHBseShudWxsLFIpfX19LDc2NzU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoNDg2Nyk7'@;
put 'TS5leHBvcnRzPWZ1bmN0aW9uKEksayl7az1rfHxuZXcgRm9ybURhdGE7dmFyIEU9W107ZnVuY3Rpb24gaihWKXtyZXR1cm4gbnVsbD09PVY/IiI6Sy5pc0RhdGUoVik/Vi50b0lTT1N0cmluZygpOksuaXNBcnJheUJ1ZmZlcihWKXx8Sy5pc1R5cGVkQXJyYXkoVik/ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIEJsb2I/bmV3IEJsb2IoW1ZdKTp6LmZyb20oVik6Vn1yZXR1cm4gZnVuY3Rpb24gVihCLFkpe2lmKEsuaXNQbGFpbk9iamVjdChCKXx8Sy5pc0FycmF5KEIpKXtpZigtMSE9PUUuaW5kZXhPZihCKSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrWSk7'@;
put 'RS5wdXNoKEIpLEsuZm9yRWFjaChCLGZ1bmN0aW9uKFgsVSl7aWYoIUsuaXNVbmRlZmluZWQoWCkpe3ZhciBxLGVlPVk/WSsiLiIrVTpVO2lmKFgmJiFZJiYib2JqZWN0Ij09dHlwZW9mIFgpaWYoSy5lbmRzV2l0aChVLCJ7fSIpKVg9SlNPTi5zdHJpbmdpZnkoWCk7ZWxzZSBpZihLLmVuZHNX'@;
put 'aXRoKFUsIltdIikmJihxPUsudG9BcnJheShYKSkpcmV0dXJuIHZvaWQgcS5mb3JFYWNoKGZ1bmN0aW9uKHRlKXshSy5pc1VuZGVmaW5lZCh0ZSkmJmsuYXBwZW5kKGVlLGoodGUpKX0pO1YoWCxlZSl9fSksRS5wb3AoKX1lbHNlIGsuYXBwZW5kKFksaihCKSl9KEkpLGt9fSw0ODc1OihNLE8s'@;
put 'Uik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MTA4KSxLPVIoNzI4OCkudmVyc2lvbixJPVIoMjY0OCksaz17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goZnVuY3Rpb24oaixWKXtrW2pdPWZ1bmN0aW9uKEIpe3Jl'@;
put 'dHVybiB0eXBlb2YgQj09PWp8fCJhIisoVjwxPyJuICI6IiAiKStqfX0pO3ZhciBFPXt9O2sudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGosVixCKXtmdW5jdGlvbiBZKFgsVSl7cmV0dXJuIltBeGlvcyB2IitLKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrWCsiJyIrVSsoQj8iLiAiK0I6IiIp'@;
put 'fXJldHVybiBmdW5jdGlvbihYLFUscSl7aWYoITE9PT1qKXRocm93IG5ldyBJKFkoVSwiIGhhcyBiZWVuIHJlbW92ZWQiKyhWPyIgaW4gIitWOiIiKSksSS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIFYmJiFFW1VdJiYoRVtVXT0hMCx6Lndhcm4oWShVLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBz'@;
put 'aW5jZSB2IitWKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFqfHxqKFgsVSxxKX19LE0uZXhwb3J0cz17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihqLFYsQil7aWYoIm9iamVjdCIhPXR5cGVvZiBqKXRocm93IG5ldyBJKCJvcHRpb25zIG11c3QgYmUgYW4g'@;
put 'b2JqZWN0IixJLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtmb3IodmFyIFk9T2JqZWN0LmtleXMoaiksWD1ZLmxlbmd0aDtYLS0gPjA7KXt2YXIgVT1ZW1hdLHE9VltVXTtpZihxKXt2YXIgZWU9altVXSx0ZT12b2lkIDA9PT1lZXx8cShlZSxVLGopO2lmKCEwIT09dGUpdGhyb3cgbmV3IEkoIm9w'@;
put 'dGlvbiAiK1UrIiBtdXN0IGJlICIrdGUsSS5FUlJfQkFEX09QVElPTl9WQUxVRSl9ZWxzZSBpZighMCE9PUIpdGhyb3cgbmV3IEkoIlVua25vd24gb3B0aW9uICIrVSxJLkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6a319LDQ4Njc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixL'@;
put 'PVIoMTg0OSksST1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGs9KHo9T2JqZWN0LmNyZWF0ZShudWxsKSxmdW5jdGlvbihHKXt2YXIgYj1JLmNhbGwoRyk7cmV0dXJuIHpbYl18fCh6W2JdPWIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KTtmdW5jdGlvbiBFKEcpe3JldHVybiBHPUcu'@;
put 'dG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXtyZXR1cm4gayhiKT09PUd9fWZ1bmN0aW9uIGooRyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRyl9ZnVuY3Rpb24gVihHKXtyZXR1cm4gdm9pZCAwPT09R312YXIgQj1FKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIFkoRyl7cmV0dXJuIG51bGwhPT1H'@;
put 'JiYib2JqZWN0Ij09dHlwZW9mIEd9ZnVuY3Rpb24gWChHKXtpZigib2JqZWN0IiE9PWsoRykpcmV0dXJuITE7dmFyIGI9T2JqZWN0LmdldFByb3RvdHlwZU9mKEcpO3JldHVybiBudWxsPT09Ynx8Yj09PU9iamVjdC5wcm90b3R5cGV9dmFyIFU9RSgiRGF0ZSIpLHE9RSgiRmlsZSIpLGVlPUUo'@;
put 'IkJsb2IiKSx0ZT1FKCJGaWxlTGlzdCIpO2Z1bmN0aW9uIG9lKEcpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1JLmNhbGwoRyl9dmFyIHNlPUUoIlVSTFNlYXJjaFBhcmFtcyIpO2Z1bmN0aW9uIGhlKEcsYil7aWYobnVsbCE9RylpZigib2JqZWN0IiE9dHlwZW9mIEcmJihHPVtHXSks'@;
put 'aihHKSlmb3IodmFyIEQ9MCxIPUcubGVuZ3RoO0Q8SDtEKyspYi5jYWxsKG51bGwsR1tEXSxELEcpO2Vsc2UgZm9yKHZhciBOIGluIEcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsTikmJmIuY2FsbChudWxsLEdbTl0sTixHKX12YXIgdWUsY2U9KHVlPXR5cGVvZiBV'@;
put 'aW50OEFycmF5PCJ1IiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpLGZ1bmN0aW9uKEcpe3JldHVybiB1ZSYmRyBpbnN0YW5jZW9mIHVlfSk7TS5leHBvcnRzPXtpc0FycmF5OmosaXNBcnJheUJ1ZmZlcjpCLGlzQnVmZmVyOmZ1bmN0aW9uKEcpe3JldHVybiBudWxsIT09RyYm'@;
put 'IVYoRykmJm51bGwhPT1HLmNvbnN0cnVjdG9yJiYhVihHLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIEcuY29uc3RydWN0b3IuaXNCdWZmZXImJkcuY29uc3RydWN0b3IuaXNCdWZmZXIoRyl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oRyl7dmFyIGI9IltvYmplY3QgRm9ybURhdGFd'@;
put 'IjtyZXR1cm4gRyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGb3JtRGF0YSYmRyBpbnN0YW5jZW9mIEZvcm1EYXRhfHxJLmNhbGwoRyk9PT1ifHxvZShHLnRvU3RyaW5nKSYmRy50b1N0cmluZygpPT09Yil9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKEcpe3JldHVybiB0eXBlb2YgQXJyYXlC'@;
put 'dWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KEcpOkcmJkcuYnVmZmVyJiZCKEcuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oRyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBHfSxpc051bWJlcjpmdW5jdGlvbihHKXtyZXR1cm4ibnVtYmVyIj09dHlw'@;
put 'ZW9mIEd9LGlzT2JqZWN0OlksaXNQbGFpbk9iamVjdDpYLGlzVW5kZWZpbmVkOlYsaXNEYXRlOlUsaXNGaWxlOnEsaXNCbG9iOmVlLGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oRyl7cmV0dXJuIFkoRykmJm9lKEcucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOnNlLGlzU3RhbmRh'@;
put 'cmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKHR5cGVvZiBuYXZpZ2F0b3I+InUifHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJnR5cGVvZiB3aW5kb3c8'@;
put 'InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUifSxmb3JFYWNoOmhlLG1lcmdlOmZ1bmN0aW9uIEcoKXt2YXIgYj17fTtmdW5jdGlvbiBEKGcsQyl7YltDXT1YKGJbQ10pJiZYKGcpP0coYltDXSxnKTpYKGcpP0coe30sZyk6aihnKT9nLnNsaWNlKCk6Z31mb3IodmFyIEg9MCxOPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGg7SDxOO0grKyloZShhcmd1bWVudHNbSF0sRCk7cmV0dXJuIGJ9LGV4dGVuZDpmdW5jdGlvbihHLGIsRCl7cmV0dXJuIGhlKGIsZnVuY3Rpb24oSCxOKXtHW05dPUQmJiJmdW5jdGlvbiI9PXR5cGVvZiBIP0soSCxEKTpIfSksR30sdHJpbTpmdW5jdGlvbihHKXtyZXR1cm4gRy50cmlt'@;
put 'P0cudHJpbSgpOkcucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihHKXtyZXR1cm4gNjUyNzk9PT1HLmNoYXJDb2RlQXQoMCkmJihHPUcuc2xpY2UoMSkpLEd9LGluaGVyaXRzOmZ1bmN0aW9uKEcsYixELEgpe0cucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5w'@;
put 'cm90b3R5cGUsSCksRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxEJiZPYmplY3QuYXNzaWduKEcucHJvdG90eXBlLEQpfSx0b0ZsYXRPYmplY3Q6ZnVuY3Rpb24oRyxiLEQpe3ZhciBILE4sZyxDPXt9O2I9Ynx8e307ZG97Zm9yKE49KEg9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRykp'@;
put 'Lmxlbmd0aDtOLS0gPjA7KUNbZz1IW05dXXx8KGJbZ109R1tnXSxDW2ddPSEwKTtHPU9iamVjdC5nZXRQcm90b3R5cGVPZihHKX13aGlsZShHJiYoIUR8fEQoRyxiKSkmJkchPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gYn0sa2luZE9mOmssa2luZE9mVGVzdDpFLGVuZHNXaXRoOmZ1bmN0'@;
put 'aW9uKEcsYixEKXtHPVN0cmluZyhHKSwodm9pZCAwPT09RHx8RD5HLmxlbmd0aCkmJihEPUcubGVuZ3RoKTt2YXIgSD1HLmluZGV4T2YoYixELT1iLmxlbmd0aCk7cmV0dXJuLTEhPT1IJiZIPT09RH0sdG9BcnJheTpmdW5jdGlvbihHKXtpZighRylyZXR1cm4gbnVsbDt2YXIgYj1HLmxlbmd0'@;
put 'aDtpZihWKGIpKXJldHVybiBudWxsO2Zvcih2YXIgRD1uZXcgQXJyYXkoYik7Yi0tID4wOylEW2JdPUdbYl07cmV0dXJuIER9LGlzVHlwZWRBcnJheTpjZSxpc0ZpbGVMaXN0OnRlfX0sNTYyMzpNPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE8oSyxJLGspe0sgaW5zdGFuY2VvZiBSZWdFeHAm'@;
put 'JihLPVIoSyxrKSksSSBpbnN0YW5jZW9mIFJlZ0V4cCYmKEk9UihJLGspKTt2YXIgRT16KEssSSxrKTtyZXR1cm4gRSYme3N0YXJ0OkVbMF0sZW5kOkVbMV0scHJlOmsuc2xpY2UoMCxFWzBdKSxib2R5Omsuc2xpY2UoRVswXStLLmxlbmd0aCxFWzFdKSxwb3N0Omsuc2xpY2UoRVsxXStJLmxl'@;
put 'bmd0aCl9fWZ1bmN0aW9uIFIoSyxJKXt2YXIgaz1JLm1hdGNoKEspO3JldHVybiBrP2tbMF06bnVsbH1mdW5jdGlvbiB6KEssSSxrKXt2YXIgRSxqLFYsQixZLFg9ay5pbmRleE9mKEspLFU9ay5pbmRleE9mKEksWCsxKSxxPVg7aWYoWD49MCYmVT4wKXtpZihLPT09SSlyZXR1cm5bWCxVXTtm'@;
put 'b3IoRT1bXSxWPWsubGVuZ3RoO3E+PTAmJiFZOylxPT1YPyhFLnB1c2gocSksWD1rLmluZGV4T2YoSyxxKzEpKToxPT1FLmxlbmd0aD9ZPVtFLnBvcCgpLFVdOigoaj1FLnBvcCgpKTxWJiYoVj1qLEI9VSksVT1rLmluZGV4T2YoSSxxKzEpKSxxPVg8VSYmWD49MD9YOlU7RS5sZW5ndGgmJihZ'@;
put 'PVtWLEJdKX1yZXR1cm4gWX1NLmV4cG9ydHM9TyxPLnJhbmdlPXp9LDk3NDI6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty5ieXRlTGVuZ3RoPWZ1bmN0aW9uKEIpe3ZhciBZPWooQiksVT1ZWzFdO3JldHVybiAzKihZWzBdK1UpLzQtVX0sTy50b0J5dGVBcnJheT1mdW5jdGlvbihCKXt2YXIgWSxY'@;
put 'LGNlLFU9aihCKSxxPVVbMF0sZWU9VVsxXSx0ZT1uZXcgSygzKihxKyhjZT1lZSkpLzQtY2UpLG9lPTAsc2U9ZWU+MD9xLTQ6cTtmb3IoWD0wO1g8c2U7WCs9NClZPXpbQi5jaGFyQ29kZUF0KFgpXTw8MTh8eltCLmNoYXJDb2RlQXQoWCsxKV08PDEyfHpbQi5jaGFyQ29kZUF0KFgrMildPDw2'@;
put 'fHpbQi5jaGFyQ29kZUF0KFgrMyldLHRlW29lKytdPVk+PjE2JjI1NSx0ZVtvZSsrXT1ZPj44JjI1NSx0ZVtvZSsrXT0yNTUmWTtyZXR1cm4gMj09PWVlJiYoWT16W0IuY2hhckNvZGVBdChYKV08PDJ8eltCLmNoYXJDb2RlQXQoWCsxKV0+PjQsdGVbb2UrK109MjU1JlkpLDE9PT1lZSYmKFk9'@;
put 'eltCLmNoYXJDb2RlQXQoWCldPDwxMHx6W0IuY2hhckNvZGVBdChYKzEpXTw8NHx6W0IuY2hhckNvZGVBdChYKzIpXT4+Mix0ZVtvZSsrXT1ZPj44JjI1NSx0ZVtvZSsrXT0yNTUmWSksdGV9LE8uZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihCKXtmb3IodmFyIFksWD1CLmxlbmd0aCxVPVglMyxx'@;
put 'PVtdLHRlPTAsb2U9WC1VO3RlPG9lO3RlKz0xNjM4MylxLnB1c2goVihCLHRlLHRlKzE2MzgzPm9lP29lOnRlKzE2MzgzKSk7cmV0dXJuIDE9PT1VP3EucHVzaChSWyhZPUJbWC0xXSk+PjJdK1JbWTw8NCY2M10rIj09Iik6Mj09PVUmJnEucHVzaChSWyhZPShCW1gtMl08PDgpK0JbWC0xXSk+'@;
put 'PjEwXStSW1k+PjQmNjNdK1JbWTw8MiY2M10rIj0iKSxxLmpvaW4oIiIpfTtmb3IodmFyIFI9W10sej1bXSxLPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LEk9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2'@;
put 'Nzg5Ky8iLGs9MDtrPDY0OysraylSW2tdPUlba10seltJLmNoYXJDb2RlQXQoayldPWs7ZnVuY3Rpb24gaihCKXt2YXIgWT1CLmxlbmd0aDtpZihZJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgWD1CLmlu'@;
put 'ZGV4T2YoIj0iKTtyZXR1cm4tMT09PVgmJihYPVkpLFtYLFg9PT1ZPzA6NC1YJTRdfWZ1bmN0aW9uIFYoQixZLFgpe2Zvcih2YXIgcSxlZT1bXSx0ZT1ZO3RlPFg7dGUrPTMpZWUucHVzaChSWyhxPShCW3RlXTw8MTYmMTY3MTE2ODApKyhCW3RlKzFdPDw4JjY1MjgwKSsoMjU1JkJbdGUrMl0p'@;
put 'KT4+MTgmNjNdK1JbcT4+MTImNjNdK1JbcT4+NiY2M10rUls2MyZxXSk7cmV0dXJuIGVlLmpvaW4oIiIpfXpbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHpbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSwzNTUwOmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rp'@;
put 'b24gSSh2LHApe2lmKCF2KXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsodixwKXt2LnN1cGVyXz1wO3ZhciB3PWZ1bmN0aW9uKCl7fTt3LnByb3RvdHlwZT1wLnByb3RvdHlwZSx2LnByb3RvdHlwZT1uZXcgdyx2LnByb3RvdHlwZS5jb25zdHJ1Y3Rv'@;
put 'cj12fWZ1bmN0aW9uIEUodixwLHcpe2lmKEUuaXNCTih2KSlyZXR1cm4gdjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09diYmKCJsZSIhPT1wJiYiYmUiIT09cHx8KHc9cCxwPTEwKSx0aGlzLl9pbml0KHZ8fDAscHx8'@;
put 'MTAsd3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVu'@;
put 'Y3Rpb24gVih2LHApe3ZhciB3PXYuY2hhckNvZGVBdChwKTtyZXR1cm4gdz49NDgmJnc8PTU3P3ctNDg6dz49NjUmJnc8PTcwP3ctNTU6dz49OTcmJnc8PTEwMj93LTg3OnZvaWQgSSghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit2KX1mdW5jdGlvbiBCKHYscCx3KXt2YXIgSj1WKHYsdyk7'@;
put 'cmV0dXJuIHctMT49cCYmKEp8PVYodix3LTEpPDw0KSxKfWZ1bmN0aW9uIFkodixwLHcsSil7Zm9yKHZhciBuZT0wLGRlPTAsZmU9TWF0aC5taW4odi5sZW5ndGgsdykseGU9cDt4ZTxmZTt4ZSsrKXt2YXIgTGU9di5jaGFyQ29kZUF0KHhlKS00ODtuZSo9SixkZT1MZT49NDk/TGUtNDkrMTA6'@;
put 'TGU+PTE3P0xlLTE3KzEwOkxlLEkoTGU+PTAmJmRlPEosIkludmFsaWQgY2hhcmFjdGVyIiksbmUrPWRlfXJldHVybiBuZX1mdW5jdGlvbiBYKHYscCl7di53b3Jkcz1wLndvcmRzLHYubGVuZ3RoPXAubGVuZ3RoLHYubmVnYXRpdmU9cC5uZWdhdGl2ZSx2LnJlZD1wLnJlZH1pZihFLmlzQk49'@;
put 'ZnVuY3Rpb24odil7cmV0dXJuIHYgaW5zdGFuY2VvZiBFfHxudWxsIT09diYmIm9iamVjdCI9PXR5cGVvZiB2JiZ2LmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh2LndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24odixwKXtyZXR1cm4gdi5jbXAocCk+MD92'@;
put 'OnB9LEUubWluPWZ1bmN0aW9uKHYscCl7cmV0dXJuIHYuY21wKHApPDA/djpwfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih2LHAsdyl7aWYoIm51bWJlciI9PXR5cGVvZiB2KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHYscCx3KTtpZigib2JqZWN0Ij09dHlwZW9mIHYpcmV0dXJuIHRo'@;
put 'aXMuX2luaXRBcnJheSh2LHAsdyk7ImhleCI9PT1wJiYocD0xNiksSShwPT09KDB8cCkmJnA+PTImJnA8PTM2KTt2YXIgSj0wOyItIj09PSh2PXYudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoSisrLHRoaXMubmVnYXRpdmU9MSksSjx2Lmxlbmd0aCYmKDE2PT09cD90aGlz'@;
put 'Ll9wYXJzZUhleCh2LEosdyk6KHRoaXMuX3BhcnNlQmFzZSh2LHAsSiksImxlIj09PXcmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxwLHcpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHYscCx3KXt2PDAmJih0aGlzLm5lZ2F0aXZlPTEsdj0tdiksdjw2NzEw'@;
put 'ODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdl0sdGhpcy5sZW5ndGg9MSk6djw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ2LHYvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKHY8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4'@;
put 'NjMmdix2LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT13JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkscCx3KX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih2LHAsdyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIHYubGVuZ3RoKSx2Lmxl'@;
put 'bmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh2Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBKPTA7Sjx0aGlzLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT0wO3Zh'@;
put 'ciBuZSxkZSxmZT0wO2lmKCJiZSI9PT13KWZvcihKPXYubGVuZ3RoLTEsbmU9MDtKPj0wO0otPTMpdGhpcy53b3Jkc1tuZV18PShkZT12W0pdfHZbSi0xXTw8OHx2W0otMl08PDE2KTw8ZmUmNjcxMDg4NjMsdGhpcy53b3Jkc1tuZSsxXT1kZT4+PjI2LWZlJjY3MTA4ODYzLChmZSs9MjQpPj0y'@;
put 'NiYmKGZlLT0yNixuZSsrKTtlbHNlIGlmKCJsZSI9PT13KWZvcihKPTAsbmU9MDtKPHYubGVuZ3RoO0orPTMpdGhpcy53b3Jkc1tuZV18PShkZT12W0pdfHZbSisxXTw8OHx2W0orMl08PDE2KTw8ZmUmNjcxMDg4NjMsdGhpcy53b3Jkc1tuZSsxXT1kZT4+PjI2LWZlJjY3MTA4ODYzLChmZSs9'@;
put 'MjQpPj0yNiYmKGZlLT0yNixuZSsrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHYscCx3KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHYubGVuZ3RoLXApLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEo9'@;
put 'MDtKPHRoaXMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPTA7dmFyIG5lLGRlPTAsZmU9MDtpZigiYmUiPT09dylmb3IoSj12Lmxlbmd0aC0xO0o+PXA7Si09MiluZT1CKHYscCxKKTw8ZGUsdGhpcy53b3Jkc1tmZV18PTY3MTA4ODYzJm5lLGRlPj0xOD8oZGUtPTE4LHRoaXMud29yZHNbZmUr'@;
put 'PTFdfD1uZT4+PjI2KTpkZSs9ODtlbHNlIGZvcihKPSh2Lmxlbmd0aC1wKSUyPT0wP3ArMTpwO0o8di5sZW5ndGg7Sis9MiluZT1CKHYscCxKKTw8ZGUsdGhpcy53b3Jkc1tmZV18PTY3MTA4ODYzJm5lLGRlPj0xOD8oZGUtPTE4LHRoaXMud29yZHNbZmUrPTFdfD1uZT4+PjI2KTpkZSs9ODt0'@;
put 'aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHYscCx3KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgSj0wLG5lPTE7bmU8PTY3MTA4ODYzO25lKj1wKUorKztKLS0sbmU9bmUvcHwwO2Zvcih2YXIgZGU9di5sZW5ndGgtdyxmZT1kZSVK'@;
put 'LHhlPU1hdGgubWluKGRlLGRlLWZlKSt3LExlPTAsRmU9dztGZTx4ZTtGZSs9SilMZT1ZKHYsRmUsRmUrSixwKSx0aGlzLmltdWxuKG5lKSx0aGlzLndvcmRzWzBdK0xlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPUxlOnRoaXMuX2lhZGRuKExlKTtpZigwIT09ZmUpe3ZhciBPZT0xO2ZvcihM'@;
put 'ZT1ZKHYsRmUsdi5sZW5ndGgscCksRmU9MDtGZTxmZTtGZSsrKU9lKj1wO3RoaXMuaW11bG4oT2UpLHRoaXMud29yZHNbMF0rTGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9TGU6dGhpcy5faWFkZG4oTGUpfXRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odil7di53'@;
put 'b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD10aGlzLmxlbmd0aCx2Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdi5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLl9tb3ZlPWZ1'@;
put 'bmN0aW9uKHYpe1godix0aGlzKX0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdj1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHYpLHZ9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odil7Zm9yKDt0aGlzLmxlbmd0aDx2Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3Ro'@;
put 'KytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5j'@;
put 'dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e0UucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmlu'@;
put 'c3BlY3QuY3VzdG9tIildPVV9Y2F0Y2h7RS5wcm90b3R5cGUuaW5zcGVjdD1VfWVsc2UgRS5wcm90b3R5cGUuaW5zcGVjdD1VO2Z1bmN0aW9uIFUoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgcT1bIiIsIjAiLCIwMCIsIjAw'@;
put 'MCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxlZT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSx0ZT1bMCwwLDMzNTU0NDMyLDQzMDQ2'@;
put 'NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0'@;
put 'MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBvZSh2LHAsdyl7dy5uZWdhdGl2ZT1wLm5lZ2F0aXZlXnYubmVn'@;
put 'YXRpdmU7dmFyIEo9di5sZW5ndGgrcC5sZW5ndGh8MDt3Lmxlbmd0aD1KLEo9Si0xfDA7dmFyIG5lPTB8di53b3Jkc1swXSxkZT0wfHAud29yZHNbMF0sZmU9bmUqZGUsTGU9ZmUvNjcxMDg4NjR8MDt3LndvcmRzWzBdPTY3MTA4ODYzJmZlO2Zvcih2YXIgRmU9MTtGZTxKO0ZlKyspe2Zvcih2'@;
put 'YXIgT2U9TGU+Pj4yNixqZT02NzEwODg2MyZMZSxXZT1NYXRoLm1pbihGZSxwLmxlbmd0aC0xKSxLZT1NYXRoLm1heCgwLEZlLXYubGVuZ3RoKzEpO0tlPD1XZTtLZSsrKU9lKz0oZmU9KG5lPTB8di53b3Jkc1tGZS1LZXwwXSkqKGRlPTB8cC53b3Jkc1tLZV0pK2plKS82NzEwODg2NHwwLGpl'@;
put 'PTY3MTA4ODYzJmZlO3cud29yZHNbRmVdPTB8amUsTGU9MHxPZX1yZXR1cm4gMCE9PUxlP3cud29yZHNbRmVdPTB8TGU6dy5sZW5ndGgtLSx3Ll9zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHYscCl7dmFyIHc7aWYocD0wfHB8fDEsMTY9PT0odj12fHwxMCl8fCJoZXgi'@;
put 'PT09dil7dz0iIjtmb3IodmFyIEo9MCxuZT0wLGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl7dmFyIGZlPXRoaXMud29yZHNbZGVdLHhlPSgxNjc3NzIxNSYoZmU8PEp8bmUpKS50b1N0cmluZygxNik7bmU9ZmU+Pj4yNC1KJjE2Nzc3MjE1LChKKz0yKT49MjYmJihKLT0yNixkZS0tKSx3PTAh'@;
put 'PT1uZXx8ZGUhPT10aGlzLmxlbmd0aC0xP3FbNi14ZS5sZW5ndGhdK3hlK3c6eGUrd31mb3IoMCE9PW5lJiYodz1uZS50b1N0cmluZygxNikrdyk7dy5sZW5ndGglcCE9MDspdz0iMCIrdztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih3PSItIit3KSx3fWlmKHY9PT0oMHx2KSYmdj49MiYm'@;
put 'djw9MzYpe3ZhciBMZT1lZVt2XSxGZT10ZVt2XTt3PSIiO3ZhciBPZT10aGlzLmNsb25lKCk7Zm9yKE9lLm5lZ2F0aXZlPTA7IU9lLmlzWmVybygpOyl7dmFyIGplPU9lLm1vZHJuKEZlKS50b1N0cmluZyh2KTt3PShPZT1PZS5pZGl2bihGZSkpLmlzWmVybygpP2plK3c6cVtMZS1qZS5sZW5n'@;
put 'dGhdK2plK3d9Zm9yKHRoaXMuaXNaZXJvKCkmJih3PSIwIit3KTt3Lmxlbmd0aCVwIT0wOyl3PSIwIit3O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHc9Ii0iK3cpLHd9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5j'@;
put 'dGlvbigpe3ZhciB2PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD92Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3Ro'@;
put 'PjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy12OnZ9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxqJiYoRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVu'@;
put 'Y3Rpb24odixwKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShqLHYscCl9KSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHYscCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdixwKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odixwLHcpe3RoaXMuX3N0cmlw'@;
put 'KCk7dmFyIEo9dGhpcy5ieXRlTGVuZ3RoKCksbmU9d3x8TWF0aC5tYXgoMSxKKTtJKEo8PW5lLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShuZT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgZmUseGUsZGU9KHhlPW5lLChmZT12KS5hbGxv'@;
put 'Y1Vuc2FmZT9mZS5hbGxvY1Vuc2FmZSh4ZSk6bmV3IGZlKHhlKSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1wPyJMRSI6IkJFIildKGRlLEopLGRlfSxFLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbih2LHApe2Zvcih2YXIgdz0wLEo9MCxuZT0wLGRlPTA7'@;
put 'bmU8dGhpcy5sZW5ndGg7bmUrKyl7dmFyIGZlPXRoaXMud29yZHNbbmVdPDxkZXxKO3ZbdysrXT0yNTUmZmUsdzx2Lmxlbmd0aCYmKHZbdysrXT1mZT4+OCYyNTUpLHc8di5sZW5ndGgmJih2W3crK109ZmU+PjE2JjI1NSksNj09PWRlPyh3PHYubGVuZ3RoJiYodlt3KytdPWZlPj4yNCYyNTUp'@;
put 'LEo9MCxkZT0wKTooSj1mZT4+PjI0LGRlKz0yKX1pZih3PHYubGVuZ3RoKWZvcih2W3crK109Sjt3PHYubGVuZ3RoOyl2W3crK109MH0sRS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24odixwKXtmb3IodmFyIHc9di5sZW5ndGgtMSxKPTAsbmU9MCxkZT0wO25lPHRoaXMubGVu'@;
put 'Z3RoO25lKyspe3ZhciBmZT10aGlzLndvcmRzW25lXTw8ZGV8Sjt2W3ctLV09MjU1JmZlLHc+PTAmJih2W3ctLV09ZmU+PjgmMjU1KSx3Pj0wJiYodlt3LS1dPWZlPj4xNiYyNTUpLDY9PT1kZT8odz49MCYmKHZbdy0tXT1mZT4+MjQmMjU1KSxKPTAsZGU9MCk6KEo9ZmU+Pj4yNCxkZSs9Mil9'@;
put 'aWYodz49MClmb3Iodlt3LS1dPUo7dz49MDspdlt3LS1dPTB9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbih2KXtyZXR1cm4gMzItTWF0aC5jbHozMih2KX06ZnVuY3Rpb24odil7dmFyIHA9dix3PTA7cmV0dXJuIHA+PTQwOTYmJih3Kz0xMyxwPj4+PTEzKSxw'@;
put 'Pj02NCYmKHcrPTcscD4+Pj03KSxwPj04JiYodys9NCxwPj4+PTQpLHA+PTImJih3Kz0yLHA+Pj49MiksdytwfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odil7aWYoMD09PXYpcmV0dXJuIDI2O3ZhciBwPXYsdz0wO3JldHVybiEoODE5MSZwKSYmKHcrPTEzLHA+Pj49MTMpLCEo'@;
put 'MTI3JnApJiYodys9NyxwPj4+PTcpLCEoMTUmcCkmJih3Kz00LHA+Pj49NCksISgzJnApJiYodys9MixwPj4+PTIpLCEoMSZwKSYmdysrLHd9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBwPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTty'@;
put 'ZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3B9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHY9MCxwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciB3PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbcF0pO2lmKHYrPXcs'@;
put 'MjYhPT13KWJyZWFrfXJldHVybiB2fSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5v'@;
put 'dG4odikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy50ZXN0bih2LTEpP3RoaXMubm90bih2KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAw'@;
put 'IT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9'@;
put 'ZnVuY3Rpb24odil7Zm9yKDt0aGlzLmxlbmd0aDx2Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twXXx2LndvcmRzW3BdO3JldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlw'@;
put 'ZS5pb3I9ZnVuY3Rpb24odil7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8di5uZWdhdGl2ZSkpLHRoaXMuaXVvcih2KX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3Iodik6di5jbG9uZSgpLmlvcih0aGlz'@;
put 'KX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih2KTp2LmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odil7dmFyIHA7cD10aGlzLmxlbmd0aD52Lmxlbmd0aD92OnRo'@;
put 'aXM7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT10aGlzLndvcmRzW3ddJnYud29yZHNbd107cmV0dXJuIHRoaXMubGVuZ3RoPXAubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odil7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRp'@;
put 'dmV8di5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodil9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodik6di5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odil7cmV0dXJu'@;
put 'IHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh2KTp2LmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHYpe3ZhciBwLHc7dGhpcy5sZW5ndGg+di5sZW5ndGg/KHA9dGhpcyx3PXYpOihwPXYsdz10aGlzKTtmb3IodmFyIEo9MDtK'@;
put 'PHcubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPXAud29yZHNbSl1edy53b3Jkc1tKXTtpZih0aGlzIT09cClmb3IoO0o8cC5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09cC53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9cC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhv'@;
put 'cj1mdW5jdGlvbih2KXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXx2Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih2KX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih2KTp2LmNsb25lKCkuaXhvcih0aGlz'@;
put 'KX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHYpOnYuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odil7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3Zh'@;
put 'ciBwPTB8TWF0aC5jZWlsKHYvMjYpLHc9diUyNjt0aGlzLl9leHBhbmQocCksdz4wJiZwLS07Zm9yKHZhciBKPTA7SjxwO0orKyl0aGlzLndvcmRzW0pdPTY3MTA4ODYzJn50aGlzLndvcmRzW0pdO3JldHVybiB3PjAmJih0aGlzLndvcmRzW0pdPX50aGlzLndvcmRzW0pdJjY3MTA4ODYzPj4y'@;
put 'Ni13KSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odil9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odixwKXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHc9di8yNnwwLEo9diUyNjtyZXR1cm4g'@;
put 'dGhpcy5fZXhwYW5kKHcrMSksdGhpcy53b3Jkc1t3XT1wP3RoaXMud29yZHNbd118MTw8Sjp0aGlzLndvcmRzW3ddJn4oMTw8SiksdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih2KXt2YXIgcCx3LEo7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT12Lm5lZ2F0aXZl'@;
put 'KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAscD10aGlzLmlzdWIodiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09di5uZWdhdGl2ZSlyZXR1cm4gdi5uZWdhdGl2ZT0wLHA9dGhpcy5pc3ViKHYpLHYubmVnYXRpdmU9MSxwLl9ub3Jt'@;
put 'U2lnbigpO3RoaXMubGVuZ3RoPnYubGVuZ3RoPyh3PXRoaXMsSj12KToodz12LEo9dGhpcyk7Zm9yKHZhciBuZT0wLGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT02NzEwODg2MyYocD0oMHx3LndvcmRzW2RlXSkrKDB8Si53b3Jkc1tkZV0pK25lKSxuZT1wPj4+MjY7Zm9y'@;
put 'KDswIT09bmUmJmRlPHcubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09NjcxMDg4NjMmKHA9KDB8dy53b3Jkc1tkZV0pK25lKSxuZT1wPj4+MjY7aWYodGhpcy5sZW5ndGg9dy5sZW5ndGgsMCE9PW5lKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPW5lLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih3'@;
put 'IT09dGhpcylmb3IoO2RlPHcubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dy53b3Jkc1tkZV07cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih2KXt2YXIgcDtyZXR1cm4gMCE9PXYubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh2Lm5lZ2F0aXZlPTAscD10aGlz'@;
put 'LnN1Yih2KSx2Lm5lZ2F0aXZlXj0xLHApOjA9PT12Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHA9di5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHApOnRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHYpOnYuY2xvbmUoKS5pYWRk'@;
put 'KHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHYpe2lmKDAhPT12Lm5lZ2F0aXZlKXt2Lm5lZ2F0aXZlPTA7dmFyIHA9dGhpcy5pYWRkKHYpO3JldHVybiB2Lm5lZ2F0aXZlPTEscC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w'@;
put 'LHRoaXMuaWFkZCh2KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgdyxKLG5lPXRoaXMuY21wKHYpO2lmKDA9PT1uZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7bmU+MD8odz10aGlzLEo9dik6KHc9dixKPXRo'@;
put 'aXMpO2Zvcih2YXIgZGU9MCxmZT0wO2ZlPEoubGVuZ3RoO2ZlKyspZGU9KHA9KDB8dy53b3Jkc1tmZV0pLSgwfEoud29yZHNbZmVdKStkZSk+PjI2LHRoaXMud29yZHNbZmVdPTY3MTA4ODYzJnA7Zm9yKDswIT09ZGUmJmZlPHcubGVuZ3RoO2ZlKyspZGU9KHA9KDB8dy53b3Jkc1tmZV0pK2Rl'@;
put 'KT4+MjYsdGhpcy53b3Jkc1tmZV09NjcxMDg4NjMmcDtpZigwPT09ZGUmJmZlPHcubGVuZ3RoJiZ3IT09dGhpcylmb3IoO2ZlPHcubGVuZ3RoO2ZlKyspdGhpcy53b3Jkc1tmZV09dy53b3Jkc1tmZV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGZlKSx3IT09dGhp'@;
put 'cyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih2KX07dmFyIHNlPWZ1bmN0aW9uKHYscCx3KXt2YXIgSixuZSxkZSxmZT12LndvcmRzLHhlPXAud29yZHMsTGU9dy53b3JkcyxGZT0w'@;
put 'LE9lPTB8ZmVbMF0samU9ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8ZmVbMV0sWWU9ODE5MSZLZSxRZT1LZT4+PjEzLGx0PTB8ZmVbMl0sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8ZmVbM10sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8ZmVbNF0sVWU9ODE5MSZYZSxodD1YZT4+PjEz'@;
put 'LE1lPTB8ZmVbNV0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLG90PTB8ZmVbNl0sdXQ9ODE5MSZvdCxNdD1vdD4+PjEzLEh0PTB8ZmVbN10sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8ZmVbOF0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8ZmVbOV0sZW49ODE5MSZXbiwkbj1Xbj4+PjEz'@;
put 'LEhuPTB8eGVbMF0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8eGVbMV0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8eGVbMl0sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8eGVbM10sSXQ9ODE5MSZydCxRdD1ydD4+PjEzLER0PTB8eGVbNF0scHQ9ODE5MSZEdCxZdD1EdD4+PjEz'@;
put 'LEluPTB8eGVbNV0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8eGVbNl0sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8eGVbN10sJHQ9ODE5MSZSbixGbj1Sbj4+PjEzLG5pPTB8eGVbOF0sbG49ODE5MSZuaSxqbj1uaT4+PjEzLHFyPTB8eGVbOV0sZ2k9ODE5MSZxcix4cj1xcj4+PjEz'@;
put 'O3cubmVnYXRpdmU9di5uZWdhdGl2ZV5wLm5lZ2F0aXZlLHcubGVuZ3RoPTE5O3ZhciBVaT0oRmUrKEo9TWF0aC5pbXVsKGplLGZ0KSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKGplLGZuKSkrTWF0aC5pbXVsKFdlLGZ0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9TWF0aC5pbXVsKFdlLGZu'@;
put 'KSkrKG5lPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2MyxKPU1hdGguaW11bChZZSxmdCksbmU9KG5lPU1hdGguaW11bChZZSxmbikpK01hdGguaW11bChRZSxmdCl8MCxkZT1NYXRoLmltdWwoUWUsZm4pO3ZhciBLcj0oRmUrKEo9SitNYXRoLmltdWwoamUsd3QpfDApfDApKygo'@;
put 'ODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLFh0KXwwKSsobmU+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFBlLGZ0KSxuZT0obmU9TWF0aC5p'@;
put 'bXVsKFBlLGZuKSkrTWF0aC5pbXVsKGJlLGZ0KXwwLGRlPU1hdGguaW11bChiZSxmbiksSj1KK01hdGguaW11bChZZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoUWUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKFFlLFh0KXwwO3ZhciBubz0oRmUrKEo9SitN'@;
put 'YXRoLmltdWwoamUsTnQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLG1uKXwwKSsobmU+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLEo9TWF0aC5p'@;
put 'bXVsKFRlLGZ0KSxuZT0obmU9TWF0aC5pbXVsKFRlLGZuKSkrTWF0aC5pbXVsKHFlLGZ0KXwwLGRlPU1hdGguaW11bChxZSxmbiksSj1KK01hdGguaW11bChQZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKGJl'@;
put 'LFh0KXwwLEo9SitNYXRoLmltdWwoWWUsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKFFlLE50KXwwLGRlPWRlK01hdGguaW11bChRZSxtbil8MDt2YXIgSHI9KEZlKyhKPUorTWF0aC5pbXVsKGplLEl0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoamUsUXQpfDApK01hdGguaW11bChXZSxJdCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxRdCl8MCkrKG5lPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2MyxKPU1hdGguaW11bChVZSxmdCksbmU9KG5lPU1hdGguaW11bChVZSxmbikpK01hdGguaW11'@;
put 'bChodCxmdCl8MCxkZT1NYXRoLmltdWwoaHQsZm4pLEo9SitNYXRoLmltdWwoVGUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLGRlPWRlK01hdGguaW11bChxZSxYdCl8MCxKPUorTWF0aC5pbXVsKFBlLE50KXwwLG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCxkZT1kZStNYXRoLmltdWwoYmUsbW4pfDAsSj1KK01hdGguaW11bChZZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLFF0KXwwKStNYXRoLmltdWwoUWUsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKFFlLFF0KXwwO3ZhciBxaT0o'@;
put 'RmUrKEo9SitNYXRoLmltdWwoamUscHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLFl0KXwwKSsobmU+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYz'@;
put 'LEo9TWF0aC5pbXVsKERlLGZ0KSxuZT0obmU9TWF0aC5pbXVsKERlLGZuKSkrTWF0aC5pbXVsKHplLGZ0KXwwLGRlPU1hdGguaW11bCh6ZSxmbiksSj1KK01hdGguaW11bChVZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsZGU9ZGUrTWF0'@;
put 'aC5pbXVsKGh0LFh0KXwwLEo9SitNYXRoLmltdWwoVGUsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLGRlPWRlK01hdGguaW11bChxZSxtbil8MCxKPUorTWF0aC5pbXVsKFBlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsUXQpfDAp'@;
put 'K01hdGguaW11bChiZSxJdCl8MCxkZT1kZStNYXRoLmltdWwoYmUsUXQpfDAsSj1KK01hdGguaW11bChZZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoUWUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFFlLFl0KXwwO3ZhciBKaT0oRmUrKEo9SitNYXRoLmlt'@;
put 'dWwoamUsenQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLHluKXwwKSsobmU+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKHV0'@;
put 'LGZ0KSxuZT0obmU9TWF0aC5pbXVsKHV0LGZuKSkrTWF0aC5pbXVsKE10LGZ0KXwwLGRlPU1hdGguaW11bChNdCxmbiksSj1KK01hdGguaW11bChEZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLFh0KXww'@;
put 'LEo9SitNYXRoLmltdWwoVWUsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKGh0LE50KXwwLGRlPWRlK01hdGguaW11bChodCxtbil8MCxKPUorTWF0aC5pbXVsKFRlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsUXQpfDApK01hdGguaW11bChxZSxJ'@;
put 'dCl8MCxkZT1kZStNYXRoLmltdWwocWUsUXQpfDAsSj1KK01hdGguaW11bChQZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLFl0KXwwLEo9SitNYXRoLmltdWwoWWUsenQpfDAsbmU9KG5lPW5lK01hdGgu'@;
put 'aW11bChZZSx5bil8MCkrTWF0aC5pbXVsKFFlLHp0KXwwLGRlPWRlK01hdGguaW11bChRZSx5bil8MDt2YXIgYW89KEZlKyhKPUorTWF0aC5pbXVsKGplLHNuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCkpPDwxMyl8MDtG'@;
put 'ZT0oKGRlPWRlK01hdGguaW11bChXZSxCbil8MCkrKG5lPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2MyxKPU1hdGguaW11bChQdCxmdCksbmU9KG5lPU1hdGguaW11bChQdCxmbikpK01hdGguaW11bChvbixmdCl8MCxkZT1NYXRoLmltdWwob24sZm4pLEo9SitNYXRoLmltdWwo'@;
put 'dXQsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLGRlPWRlK01hdGguaW11bChNdCxYdCl8MCxKPUorTWF0aC5pbXVsKERlLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCxkZT1kZStNYXRo'@;
put 'LmltdWwoemUsbW4pfDAsSj1KK01hdGguaW11bChVZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LFF0KXwwLEo9SitNYXRoLmltdWwoVGUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxZdCl8MCkr'@;
put 'TWF0aC5pbXVsKHFlLHB0KXwwLGRlPWRlK01hdGguaW11bChxZSxZdCl8MCxKPUorTWF0aC5pbXVsKFBlLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCxkZT1kZStNYXRoLmltdWwoYmUseW4pfDAsSj1KK01hdGguaW11bChZZSxzbil8MCxu'@;
put 'ZT0obmU9bmUrTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoUWUsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKFFlLEJuKXwwO3ZhciBybz0oRmUrKEo9SitNYXRoLmltdWwoamUsJHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxGbil8MCkrTWF0aC5pbXVsKFdlLCR0'@;
put 'KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLEZuKXwwKSsobmU+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFV0LGZ0KSxuZT0obmU9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLGRlPU1hdGguaW11bChibixmbiks'@;
put 'Sj1KK01hdGguaW11bChQdCx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLFh0KXwwLEo9SitNYXRoLmltdWwodXQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKE10LE50'@;
put 'KXwwLGRlPWRlK01hdGguaW11bChNdCxtbil8MCxKPUorTWF0aC5pbXVsKERlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsUXQpfDApK01hdGguaW11bCh6ZSxJdCl8MCxkZT1kZStNYXRoLmltdWwoemUsUXQpfDAsSj1KK01hdGguaW11bChVZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5p'@;
put 'bXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LFl0KXwwLEo9SitNYXRoLmltdWwoVGUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLGRlPWRlK01hdGguaW11bChxZSx5bil8MCxKPUorTWF0aC5p'@;
put 'bXVsKFBlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCxkZT1kZStNYXRoLmltdWwoYmUsQm4pfDAsSj1KK01hdGguaW11bChZZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoUWUsJHQpfDAsZGU9ZGUr'@;
put 'TWF0aC5pbXVsKFFlLEZuKXwwO3ZhciBpbz0oRmUrKEo9SitNYXRoLmltdWwoamUsbG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLGpuKXwwKSsobmU+Pj4xMyl8'@;
put 'MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLGZ0KSxuZT0obmU9TWF0aC5pbXVsKGVuLGZuKSkrTWF0aC5pbXVsKCRuLGZ0KXwwLGRlPU1hdGguaW11bCgkbixmbiksSj1KK01hdGguaW11bChVdCx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LFh0KXwwKStN'@;
put 'YXRoLmltdWwoYm4sd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLFh0KXwwLEo9SitNYXRoLmltdWwoUHQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLGRlPWRlK01hdGguaW11bChvbixtbil8MCxKPUorTWF0aC5pbXVsKHV0LEl0KXwwLG5l'@;
put 'PShuZT1uZStNYXRoLmltdWwodXQsUXQpfDApK01hdGguaW11bChNdCxJdCl8MCxkZT1kZStNYXRoLmltdWwoTXQsUXQpfDAsSj1KK01hdGguaW11bChEZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLFl0'@;
put 'KXwwLEo9SitNYXRoLmltdWwoVWUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLGRlPWRlK01hdGguaW11bChodCx5bil8MCxKPUorTWF0aC5pbXVsKFRlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChx'@;
put 'ZSxzbil8MCxkZT1kZStNYXRoLmltdWwocWUsQm4pfDAsSj1KK01hdGguaW11bChQZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLEZuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLEZuKXwwLEo9SitNYXRoLmltdWwoWWUsbG4pfDAsbmU9KG5lPW5lK01h'@;
put 'dGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKFFlLGxuKXwwLGRlPWRlK01hdGguaW11bChRZSxqbil8MDt2YXIgR2k9KEZlKyhKPUorTWF0aC5pbXVsKGplLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUseHIpfDApK01hdGguaW11bChXZSxnaSl8MCkpPDwxMyl8'@;
put 'MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSx4cil8MCkrKG5lPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2MyxKPU1hdGguaW11bChlbix3dCksbmU9KG5lPU1hdGguaW11bChlbixYdCkpK01hdGguaW11bCgkbix3dCl8MCxkZT1NYXRoLmltdWwoJG4sWHQpLEo9SitNYXRoLmlt'@;
put 'dWwoVXQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxtbil8MCkrTWF0aC5pbXVsKGJuLE50KXwwLGRlPWRlK01hdGguaW11bChibixtbil8MCxKPUorTWF0aC5pbXVsKFB0LEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsUXQpfDApK01hdGguaW11bChvbixJdCl8MCxkZT1kZStN'@;
put 'YXRoLmltdWwob24sUXQpfDAsSj1KK01hdGguaW11bCh1dCxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LFl0KXwwLEo9SitNYXRoLmltdWwoRGUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSx5bil8'@;
put 'MCkrTWF0aC5pbXVsKHplLHp0KXwwLGRlPWRlK01hdGguaW11bCh6ZSx5bil8MCxKPUorTWF0aC5pbXVsKFVlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCxkZT1kZStNYXRoLmltdWwoaHQsQm4pfDAsSj1KK01hdGguaW11bChUZSwkdCl8'@;
put 'MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLEZuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLEZuKXwwLEo9SitNYXRoLmltdWwoUGUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwLGRlPWRlK01hdGguaW11bChi'@;
put 'ZSxqbil8MDt2YXIgaG89KEZlKyhKPUorTWF0aC5pbXVsKFllLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoWWUseHIpfDApK01hdGguaW11bChRZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChRZSx4cil8MCkrKG5lPj4+MTMpfDApKyhobz4+PjI2'@;
put 'KXwwLGhvJj02NzEwODg2MyxKPU1hdGguaW11bChlbixOdCksbmU9KG5lPU1hdGguaW11bChlbixtbikpK01hdGguaW11bCgkbixOdCl8MCxkZT1NYXRoLmltdWwoJG4sbW4pLEo9SitNYXRoLmltdWwoVXQsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxRdCl8MCkrTWF0aC5pbXVsKGJu'@;
put 'LEl0KXwwLGRlPWRlK01hdGguaW11bChibixRdCl8MCxKPUorTWF0aC5pbXVsKFB0LHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCxkZT1kZStNYXRoLmltdWwob24sWXQpfDAsSj1KK01hdGguaW11bCh1dCx6dCl8MCxuZT0obmU9bmUrTWF0'@;
put 'aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LHluKXwwLEo9SitNYXRoLmltdWwoRGUsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLGRlPWRlK01hdGguaW11bCh6ZSxCbil8MCxKPUorTWF0'@;
put 'aC5pbXVsKFVlLCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsRm4pfDApK01hdGguaW11bChodCwkdCl8MCxkZT1kZStNYXRoLmltdWwoaHQsRm4pfDAsSj1KK01hdGguaW11bChUZSxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDAsZGU9'@;
put 'ZGUrTWF0aC5pbXVsKHFlLGpuKXwwO3ZhciB5cj0oRmUrKEo9SitNYXRoLmltdWwoUGUsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChQZSx4cil8MCkrTWF0aC5pbXVsKGJlLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKGJlLHhyKXwwKSsobmU+Pj4x'@;
put 'Myl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLEl0KSxuZT0obmU9TWF0aC5pbXVsKGVuLFF0KSkrTWF0aC5pbXVsKCRuLEl0KXwwLGRlPU1hdGguaW11bCgkbixRdCksSj1KK01hdGguaW11bChVdCxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LFl0KXww'@;
put 'KStNYXRoLmltdWwoYm4scHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLFl0KXwwLEo9SitNYXRoLmltdWwoUHQsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLGRlPWRlK01hdGguaW11bChvbix5bil8MCxKPUorTWF0aC5pbXVsKHV0LHNuKXww'@;
put 'LG5lPShuZT1uZStNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8MCxkZT1kZStNYXRoLmltdWwoTXQsQm4pfDAsSj1KK01hdGguaW11bChEZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLEZuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHpl'@;
put 'LEZuKXwwLEo9SitNYXRoLmltdWwoVWUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwLGRlPWRlK01hdGguaW11bChodCxqbil8MDt2YXIgUGk9KEZlKyhKPUorTWF0aC5pbXVsKFRlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoVGUseHIpfDApK01hdGguaW11bChxZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChxZSx4cil8MCkrKG5lPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2MyxKPU1hdGguaW11bChlbixwdCksbmU9KG5lPU1hdGguaW11bChlbixZdCkpK01hdGguaW11'@;
put 'bCgkbixwdCl8MCxkZT1NYXRoLmltdWwoJG4sWXQpLEo9SitNYXRoLmltdWwoVXQsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCx5bil8MCkrTWF0aC5pbXVsKGJuLHp0KXwwLGRlPWRlK01hdGguaW11bChibix5bil8MCxKPUorTWF0aC5pbXVsKFB0LHNuKXwwLG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCxkZT1kZStNYXRoLmltdWwob24sQm4pfDAsSj1KK01hdGguaW11bCh1dCwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LEZuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LEZuKXwwLEo9SitNYXRo'@;
put 'LmltdWwoRGUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwLGRlPWRlK01hdGguaW11bCh6ZSxqbil8MDt2YXIgTG89KEZlKyhKPUorTWF0aC5pbXVsKFVlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVWUseHIpfDAp'@;
put 'K01hdGguaW11bChodCxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChodCx4cil8MCkrKG5lPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2MyxKPU1hdGguaW11bChlbix6dCksbmU9KG5lPU1hdGguaW11bChlbix5bikpK01hdGguaW11bCgkbix6dCl8MCxkZT1N'@;
put 'YXRoLmltdWwoJG4seW4pLEo9SitNYXRoLmltdWwoVXQsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxCbil8MCkrTWF0aC5pbXVsKGJuLHNuKXwwLGRlPWRlK01hdGguaW11bChibixCbil8MCxKPUorTWF0aC5pbXVsKFB0LCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsRm4pfDAp'@;
put 'K01hdGguaW11bChvbiwkdCl8MCxkZT1kZStNYXRoLmltdWwob24sRm4pfDAsSj1KK01hdGguaW11bCh1dCxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKE10LGpuKXwwO3ZhciBocz0oRmUrKEo9SitNYXRoLmlt'@;
put 'dWwoRGUsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChEZSx4cil8MCkrTWF0aC5pbXVsKHplLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKHplLHhyKXwwKSsobmU+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVu'@;
put 'LHNuKSxuZT0obmU9TWF0aC5pbXVsKGVuLEJuKSkrTWF0aC5pbXVsKCRuLHNuKXwwLGRlPU1hdGguaW11bCgkbixCbiksSj1KK01hdGguaW11bChVdCwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LEZuKXwwKStNYXRoLmltdWwoYm4sJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLEZuKXww'@;
put 'LEo9SitNYXRoLmltdWwoUHQsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwLGRlPWRlK01hdGguaW11bChvbixqbil8MDt2YXIgcnM9KEZlKyhKPUorTWF0aC5pbXVsKHV0LGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'dXQseHIpfDApK01hdGguaW11bChNdCxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChNdCx4cil8MCkrKG5lPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxKPU1hdGguaW11bChlbiwkdCksbmU9KG5lPU1hdGguaW11bChlbixGbikpK01hdGguaW11bCgkbiwk'@;
put 'dCl8MCxkZT1NYXRoLmltdWwoJG4sRm4pLEo9SitNYXRoLmltdWwoVXQsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxqbil8MCkrTWF0aC5pbXVsKGJuLGxuKXwwLGRlPWRlK01hdGguaW11bChibixqbil8MDt2YXIgUmM9KEZlKyhKPUorTWF0aC5pbXVsKFB0LGdpKXwwKXwwKSsoKDgx'@;
put 'OTEmKG5lPShuZT1uZStNYXRoLmltdWwoUHQseHIpfDApK01hdGguaW11bChvbixnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChvbix4cil8MCkrKG5lPj4+MTMpfDApKyhSYz4+PjI2KXwwLFJjJj02NzEwODg2MyxKPU1hdGguaW11bChlbixsbiksbmU9KG5lPU1hdGguaW11'@;
put 'bChlbixqbikpK01hdGguaW11bCgkbixsbil8MCxkZT1NYXRoLmltdWwoJG4sam4pO3ZhciB1bD0oRmUrKEo9SitNYXRoLmltdWwoVXQsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVdCx4cil8MCkrTWF0aC5pbXVsKGJuLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUr'@;
put 'TWF0aC5pbXVsKGJuLHhyKXwwKSsobmU+Pj4xMyl8MCkrKHVsPj4+MjYpfDAsdWwmPTY3MTA4ODYzO3ZhciBPYz0oRmUrKEo9TWF0aC5pbXVsKGVuLGdpKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKGVuLHhyKSkrTWF0aC5pbXVsKCRuLGdpKXwwKSk8PDEzKXwwO3JldHVybiBGZT0o'@;
put 'KGRlPU1hdGguaW11bCgkbix4cikpKyhuZT4+PjEzKXwwKSsoT2M+Pj4yNil8MCxPYyY9NjcxMDg4NjMsTGVbMF09VWksTGVbMV09S3IsTGVbMl09bm8sTGVbM109SHIsTGVbNF09cWksTGVbNV09SmksTGVbNl09YW8sTGVbN109cm8sTGVbOF09aW8sTGVbOV09R2ksTGVbMTBdPWhvLExlWzEx'@;
put 'XT15cixMZVsxMl09UGksTGVbMTNdPUxvLExlWzE0XT1ocyxMZVsxNV09cnMsTGVbMTZdPVJjLExlWzE3XT11bCxMZVsxOF09T2MsMCE9PUZlJiYoTGVbMTldPUZlLHcubGVuZ3RoKyspLHd9O2Z1bmN0aW9uIGhlKHYscCx3KXt3Lm5lZ2F0aXZlPXAubmVnYXRpdmVedi5uZWdhdGl2ZSx3Lmxl'@;
put 'bmd0aD12Lmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIEo9MCxuZT0wLGRlPTA7ZGU8dy5sZW5ndGgtMTtkZSsrKXt2YXIgZmU9bmU7bmU9MDtmb3IodmFyIHhlPTY3MTA4ODYzJkosTGU9TWF0aC5taW4oZGUscC5sZW5ndGgtMSksRmU9TWF0aC5tYXgoMCxkZS12Lmxlbmd0aCsxKTtGZTw9TGU7'@;
put 'RmUrKyl7dmFyIGplPSgwfHYud29yZHNbZGUtRmVdKSooMHxwLndvcmRzW0ZlXSksV2U9NjcxMDg4NjMmamU7eGU9NjcxMDg4NjMmKFdlPVdlK3hlfDApLG5lKz0oZmU9KGZlPWZlKyhqZS82NzEwODg2NHwwKXwwKSsoV2U+Pj4yNil8MCk+Pj4yNixmZSY9NjcxMDg4NjN9dy53b3Jkc1tkZV09'@;
put 'eGUsSj1mZSxmZT1uZX1yZXR1cm4gMCE9PUo/dy53b3Jkc1tkZV09Sjp3Lmxlbmd0aC0tLHcuX3N0cmlwKCl9ZnVuY3Rpb24gdWUodixwLHcpe3JldHVybiBoZSh2LHAsdyl9ZnVuY3Rpb24gY2UodixwKXt0aGlzLng9dix0aGlzLnk9cH1NYXRoLmltdWx8fChzZT1vZSksRS5wcm90b3R5cGUu'@;
put 'bXVsVG89ZnVuY3Rpb24odixwKXt2YXIgdz10aGlzLmxlbmd0aCt2Lmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT12Lmxlbmd0aD9zZSh0aGlzLHYscCk6dzw2Mz9vZSh0aGlzLHYscCk6dzwxMDI0P2hlKHRoaXMsdixwKTp1ZSh0aGlzLHYscCl9LGNlLnByb3RvdHlwZS5t'@;
put 'YWtlUkJUPWZ1bmN0aW9uKHYpe2Zvcih2YXIgcD1uZXcgQXJyYXkodiksdz1FLnByb3RvdHlwZS5fY291bnRCaXRzKHYpLTEsSj0wO0o8djtKKyspcFtKXT10aGlzLnJldkJpbihKLHcsdik7cmV0dXJuIHB9LGNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odixwLHcpe2lmKDA9PT12fHx2'@;
put 'PT09dy0xKXJldHVybiB2O2Zvcih2YXIgSj0wLG5lPTA7bmU8cDtuZSsrKUp8PSgxJnYpPDxwLW5lLTEsdj4+PTE7cmV0dXJuIEp9LGNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHYscCx3LEosbmUsZGUpe2Zvcih2YXIgZmU9MDtmZTxkZTtmZSsrKUpbZmVdPXBbdltmZV1dLG5lW2Zl'@;
put 'XT13W3ZbZmVdXX0sY2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih2LHAsdyxKLG5lLGRlKXt0aGlzLnBlcm11dGUoZGUsdixwLHcsSixuZSk7Zm9yKHZhciBmZT0xO2ZlPG5lO2ZlPDw9MSlmb3IodmFyIHhlPWZlPDwxLExlPU1hdGguY29zKDIqTWF0aC5QSS94ZSksRmU9TWF0aC5z'@;
put 'aW4oMipNYXRoLlBJL3hlKSxPZT0wO09lPG5lO09lKz14ZSlmb3IodmFyIGplPUxlLFdlPUZlLEtlPTA7S2U8ZmU7S2UrKyl7dmFyIFllPXdbT2UrS2VdLFFlPUpbT2UrS2VdLGx0PXdbT2UrS2UrZmVdLFBlPUpbT2UrS2UrZmVdLGJlPWplKmx0LVdlKlBlO1BlPWplKlBlK1dlKmx0LHdbT2Ur'@;
put 'S2VdPVllKyhsdD1iZSksSltPZStLZV09UWUrUGUsd1tPZStLZStmZV09WWUtbHQsSltPZStLZStmZV09UWUtUGUsS2UhPT14ZSYmKGJlPUxlKmplLUZlKldlLFdlPUxlKldlK0ZlKmplLGplPWJlKX19LGNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih2LHApe3ZhciB3PTF8TWF0'@;
put 'aC5tYXgocCx2KSxKPTEmdyxuZT0wO2Zvcih3PXcvMnwwO3c7dz4+Pj0xKW5lKys7cmV0dXJuIDE8PG5lKzErSn0sY2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih2LHAsdyl7aWYoISh3PD0xKSlmb3IodmFyIEo9MDtKPHcvMjtKKyspe3ZhciBuZT12W0pdO3ZbSl09dlt3LUotMV0s'@;
put 'dlt3LUotMV09bmUsbmU9cFtKXSxwW0pdPS1wW3ctSi0xXSxwW3ctSi0xXT0tbmV9fSxjZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PTAsSj0wO0o8cC8yO0orKyl7dmFyIG5lPTgxOTIqTWF0aC5yb3VuZCh2WzIqSisxXS9wKStNYXRoLnJvdW5kKHZb'@;
put 'MipKXS9wKSt3O3ZbSl09NjcxMDg4NjMmbmUsdz1uZTw2NzEwODg2ND8wOm5lLzY3MTA4ODY0fDB9cmV0dXJuIHZ9LGNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHYscCx3LEope2Zvcih2YXIgbmU9MCxkZT0wO2RlPHA7ZGUrKyl3WzIqZGVdPTgxOTEmKG5lKz0wfHZbZGVdKSx3'@;
put 'WzIqZGUrMV09ODE5MSYobmU+Pj49MTMpLG5lPj4+PTEzO2ZvcihkZT0yKnA7ZGU8SjsrK2RlKXdbZGVdPTA7SSgwPT09bmUpLEkoMD09KC04MTkyJm5lKSl9LGNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHYpe2Zvcih2YXIgcD1uZXcgQXJyYXkodiksdz0wO3c8djt3KyspcFt3XT0wO3Jl'@;
put 'dHVybiBwfSxjZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbih2LHAsdyl7dmFyIEo9Mip0aGlzLmd1ZXNzTGVuMTNiKHYubGVuZ3RoLHAubGVuZ3RoKSxuZT10aGlzLm1ha2VSQlQoSiksZGU9dGhpcy5zdHViKEopLGZlPW5ldyBBcnJheShKKSx4ZT1uZXcgQXJyYXkoSiksTGU9bmV3IEFycmF5'@;
put 'KEopLEZlPW5ldyBBcnJheShKKSxPZT1uZXcgQXJyYXkoSiksamU9bmV3IEFycmF5KEopLFdlPXcud29yZHM7V2UubGVuZ3RoPUosdGhpcy5jb252ZXJ0MTNiKHYud29yZHMsdi5sZW5ndGgsZmUsSiksdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsRmUsSiksdGhpcy50cmFuc2Zv'@;
put 'cm0oZmUsZGUseGUsTGUsSixuZSksdGhpcy50cmFuc2Zvcm0oRmUsZGUsT2UsamUsSixuZSk7Zm9yKHZhciBLZT0wO0tlPEo7S2UrKyl7dmFyIFllPXhlW0tlXSpPZVtLZV0tTGVbS2VdKmplW0tlXTtMZVtLZV09eGVbS2VdKmplW0tlXStMZVtLZV0qT2VbS2VdLHhlW0tlXT1ZZX1yZXR1cm4g'@;
put 'dGhpcy5jb25qdWdhdGUoeGUsTGUsSiksdGhpcy50cmFuc2Zvcm0oeGUsTGUsV2UsZGUsSixuZSksdGhpcy5jb25qdWdhdGUoV2UsZGUsSiksdGhpcy5ub3JtYWxpemUxM2IoV2UsSiksdy5uZWdhdGl2ZT12Lm5lZ2F0aXZlXnAubmVnYXRpdmUsdy5sZW5ndGg9di5sZW5ndGgrcC5sZW5ndGgs'@;
put 'dy5fc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHYpe3ZhciBwPW5ldyBFKG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt2Lmxlbmd0aCksdGhpcy5tdWxUbyh2LHApfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHYpe3ZhciBwPW5ldyBFKG51'@;
put 'bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt2Lmxlbmd0aCksdWUodGhpcyx2LHApfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odix0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odil7dmFyIHA9'@;
put 'djwwO3AmJih2PS12KSxJKCJudW1iZXIiPT10eXBlb2YgdiksSSh2PDY3MTA4ODY0KTtmb3IodmFyIHc9MCxKPTA7Sjx0aGlzLmxlbmd0aDtKKyspe3ZhciBuZT0oMHx0aGlzLndvcmRzW0pdKSp2LGRlPSg2NzEwODg2MyZuZSkrKDY3MTA4ODYzJncpO3c+Pj0yNix3Kz1uZS82NzEwODg2NHww'@;
put 'LHcrPWRlPj4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZkZX1yZXR1cm4gMCE9PXcmJih0aGlzLndvcmRzW0pdPXcsdGhpcy5sZW5ndGgrKykscD90aGlzLmluZWcoKTp0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odil9LEUu'@;
put 'cHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHYpe3ZhciBwPWZ1bmN0aW9uKGRlKXtmb3IodmFyIGZl'@;
put 'PW5ldyBBcnJheShkZS5iaXRMZW5ndGgoKSkseGU9MDt4ZTxmZS5sZW5ndGg7eGUrKylmZVt4ZV09ZGUud29yZHNbeGUvMjZ8MF0+Pj54ZSUyNiYxO3JldHVybiBmZX0odik7aWYoMD09PXAubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIHc9dGhpcyxKPTA7SjxwLmxlbmd0aCYmMD09'@;
put 'PXBbSl07SisrLHc9dy5zcXIoKSk7aWYoKytKPHAubGVuZ3RoKWZvcih2YXIgbmU9dy5zcXIoKTtKPHAubGVuZ3RoO0orKyxuZT1uZS5zcXIoKSkwIT09cFtKXSYmKHc9dy5tdWwobmUpKTtyZXR1cm4gd30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHYpe0koIm51bWJlciI9PXR5cGVv'@;
put 'ZiB2JiZ2Pj0wKTt2YXIgcCx3PXYlMjYsSj0odi13KS8yNixuZT02NzEwODg2Mz4+PjI2LXc8PDI2LXc7aWYoMCE9PXcpe3ZhciBkZT0wO2ZvcihwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciBmZT10aGlzLndvcmRzW3BdJm5lO3RoaXMud29yZHNbcF09KDB8dGhpcy53b3Jkc1twXSktZmU8'@;
put 'PHd8ZGUsZGU9ZmU+Pj4yNi13fWRlJiYodGhpcy53b3Jkc1twXT1kZSx0aGlzLmxlbmd0aCsrKX1pZigwIT09Sil7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wO3AtLSl0aGlzLndvcmRzW3ArSl09dGhpcy53b3Jkc1twXTtmb3IocD0wO3A8SjtwKyspdGhpcy53b3Jkc1twXT0wO3RoaXMubGVu'@;
put 'Z3RoKz1KfXJldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih2KXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odil9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih2LHAsdyl7dmFyIEo7SSgibnVtYmVyIj09dHlwZW9mIHYm'@;
put 'JnY+PTApLEo9cD8ocC1wJTI2KS8yNjowO3ZhciBuZT12JTI2LGRlPU1hdGgubWluKCh2LW5lKS8yNix0aGlzLmxlbmd0aCksZmU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5uZTw8bmUseGU9dztpZihKLT1kZSxKPU1hdGgubWF4KDAsSikseGUpe2Zvcih2YXIgTGU9MDtMZTxkZTtMZSsrKXhlLndv'@;
put 'cmRzW0xlXT10aGlzLndvcmRzW0xlXTt4ZS5sZW5ndGg9ZGV9aWYoMCE9PWRlKWlmKHRoaXMubGVuZ3RoPmRlKWZvcih0aGlzLmxlbmd0aC09ZGUsTGU9MDtMZTx0aGlzLmxlbmd0aDtMZSsrKXRoaXMud29yZHNbTGVdPXRoaXMud29yZHNbTGUrZGVdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRo'@;
put 'aXMubGVuZ3RoPTE7dmFyIEZlPTA7Zm9yKExlPXRoaXMubGVuZ3RoLTE7TGU+PTAmJigwIT09RmV8fExlPj1KKTtMZS0tKXt2YXIgT2U9MHx0aGlzLndvcmRzW0xlXTt0aGlzLndvcmRzW0xlXT1GZTw8MjYtbmV8T2U+Pj5uZSxGZT1PZSZmZX1yZXR1cm4geGUmJjAhPT1GZSYmKHhlLndvcmRz'@;
put 'W3hlLmxlbmd0aCsrXT1GZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHYscCx3KXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odixwLHcpfSxF'@;
put 'LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odil9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25l'@;
put 'KCkuaXNocm4odil9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHYpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHA9diUyNix3PSh2LXApLzI2O3JldHVybiEodGhp'@;
put 'cy5sZW5ndGg8PXd8fCEodGhpcy53b3Jkc1t3XSYxPDxwKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHA9diUyNix3PSh2LXApLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3'@;
put 'aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9dz90aGlzOigwIT09cCYmdysrLHRoaXMubGVuZ3RoPU1hdGgubWluKHcsdGhpcy5sZW5ndGgpLDAhPT1wJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwKSx0aGlzLl9zdHJpcCgp'@;
put 'KX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odil9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHYpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgdiksSSh2PDY3MTA4ODY0KSx2PDA/dGhpcy5pc3Vibigtdik6MCE9PXRoaXMu'@;
put 'bmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9dj8odGhpcy53b3Jkc1swXT12LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lh'@;
put 'ZGRuKHYpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odil7dGhpcy53b3Jkc1swXSs9djtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3BdPj02NzEwODg2NDtwKyspdGhpcy53b3Jkc1twXS09NjcxMDg4NjQscD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tw'@;
put 'KzFdPTE6dGhpcy53b3Jkc1twKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHArMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odil7aWYoSSgibnVtYmVyIj09dHlwZW9mIHYpLEkodjw2NzEwODg2NCksdjwwKXJldHVybiB0aGlzLmlhZGRu'@;
put 'KC12KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09diwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBd'@;
put 'LHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbcF08MDtwKyspdGhpcy53b3Jkc1twXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1twKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHYpe3Jl'@;
put 'dHVybiB0aGlzLmNsb25lKCkuaWFkZG4odil9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih2KX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih2LHAsdyl7dmFyIEosbmU7dGhpcy5fZXhwYW5kKHYubGVuZ3RoK3cpO3ZhciBmZT0wO2ZvcihKPTA7Sjx2Lmxlbmd0aDtKKyspe25lPSgwfHRoaXMud29yZHNbSit3XSkr'@;
put 'ZmU7dmFyIHhlPSgwfHYud29yZHNbSl0pKnA7ZmU9KChuZS09NjcxMDg4NjMmeGUpPj4yNiktKHhlLzY3MTA4ODY0fDApLHRoaXMud29yZHNbSit3XT02NzEwODg2MyZuZX1mb3IoO0o8dGhpcy5sZW5ndGgtdztKKyspZmU9KG5lPSgwfHRoaXMud29yZHNbSit3XSkrZmUpPj4yNix0aGlzLndv'@;
put 'cmRzW0ord109NjcxMDg4NjMmbmU7aWYoMD09PWZlKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihJKC0xPT09ZmUpLGZlPTAsSj0wO0o8dGhpcy5sZW5ndGg7SisrKWZlPShuZT0tKDB8dGhpcy53b3Jkc1tKXSkrZmUpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJm5lO3JldHVybiB0aGlz'@;
put 'Lm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odixwKXt2YXIgdyxKPXRoaXMuY2xvbmUoKSxuZT12LGRlPTB8bmUud29yZHNbbmUubGVuZ3RoLTFdOzAhPSh3PTI2LXRoaXMuX2NvdW50Qml0cyhkZSkpJiYobmU9bmUudXNobG4odyksSi5p'@;
put 'dXNobG4odyksZGU9MHxuZS53b3Jkc1tuZS5sZW5ndGgtMV0pO3ZhciBmZSx4ZT1KLmxlbmd0aC1uZS5sZW5ndGg7aWYoIm1vZCIhPT1wKXsoZmU9bmV3IEUobnVsbCkpLmxlbmd0aD14ZSsxLGZlLndvcmRzPW5ldyBBcnJheShmZS5sZW5ndGgpO2Zvcih2YXIgTGU9MDtMZTxmZS5sZW5ndGg7'@;
put 'TGUrKylmZS53b3Jkc1tMZV09MH12YXIgRmU9Si5jbG9uZSgpLl9pc2hsbnN1Ym11bChuZSwxLHhlKTswPT09RmUubmVnYXRpdmUmJihKPUZlLGZlJiYoZmUud29yZHNbeGVdPTEpKTtmb3IodmFyIE9lPXhlLTE7T2U+PTA7T2UtLSl7dmFyIGplPTY3MTA4ODY0KigwfEoud29yZHNbbmUubGVu'@;
put 'Z3RoK09lXSkrKDB8Si53b3Jkc1tuZS5sZW5ndGgrT2UtMV0pO2ZvcihqZT1NYXRoLm1pbihqZS9kZXwwLDY3MTA4ODYzKSxKLl9pc2hsbnN1Ym11bChuZSxqZSxPZSk7MCE9PUoubmVnYXRpdmU7KWplLS0sSi5uZWdhdGl2ZT0wLEouX2lzaGxuc3VibXVsKG5lLDEsT2UpLEouaXNaZXJvKCl8'@;
put 'fChKLm5lZ2F0aXZlXj0xKTtmZSYmKGZlLndvcmRzW09lXT1qZSl9cmV0dXJuIGZlJiZmZS5fc3RyaXAoKSxKLl9zdHJpcCgpLCJkaXYiIT09cCYmMCE9PXcmJkouaXVzaHJuKHcpLHtkaXY6ZmV8fG51bGwsbW9kOkp9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odixwLHcpe3JldHVy'@;
put 'biBJKCF2LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXYubmVnYXRpdmU/KGRlPXRoaXMubmVnKCkuZGl2bW9kKHYscCksIm1vZCIhPT1wJiYoSj1kZS5kaXYubmVnKCkpLCJkaXYiIT09cCYmKG5lPWRl'@;
put 'Lm1vZC5uZWcoKSx3JiYwIT09bmUubmVnYXRpdmUmJm5lLmlhZGQodikpLHtkaXY6Sixtb2Q6bmV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXYubmVnYXRpdmU/KGRlPXRoaXMuZGl2bW9kKHYubmVnKCkscCksIm1vZCIhPT1wJiYoSj1kZS5kaXYubmVnKCkpLHtkaXY6Sixtb2Q6ZGUubW9k'@;
put 'fSk6dGhpcy5uZWdhdGl2ZSZ2Lm5lZ2F0aXZlPyhkZT10aGlzLm5lZygpLmRpdm1vZCh2Lm5lZygpLHApLCJkaXYiIT09cCYmKG5lPWRlLm1vZC5uZWcoKSx3JiYwIT09bmUubmVnYXRpdmUmJm5lLmlzdWIodikpLHtkaXY6ZGUuZGl2LG1vZDpuZX0pOnYubGVuZ3RoPnRoaXMubGVuZ3RofHx0'@;
put 'aGlzLmNtcCh2KTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT12Lmxlbmd0aD8iZGl2Ij09PXA/e2Rpdjp0aGlzLmRpdm4odi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09cD97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kcm4odi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2'@;
put 'bih2LndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2Rybih2LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodixwKTt2YXIgSixuZSxkZX0sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmRpdm1vZCh2LCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5j'@;
put 'dGlvbih2KXtyZXR1cm4gdGhpcy5kaXZtb2QodiwibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmRpdm1vZCh2LCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHYpe3ZhciBwPXRoaXMuZGl2bW9kKHYpO2lm'@;
put 'KHAubW9kLmlzWmVybygpKXJldHVybiBwLmRpdjt2YXIgdz0wIT09cC5kaXYubmVnYXRpdmU/cC5tb2QuaXN1Yih2KTpwLm1vZCxKPXYudXNocm4oMSksbmU9di5hbmRsbigxKSxkZT13LmNtcChKKTtyZXR1cm4gZGU8MHx8MT09PW5lJiYwPT09ZGU/cC5kaXY6MCE9PXAuZGl2Lm5lZ2F0aXZl'@;
put 'P3AuZGl2LmlzdWJuKDEpOnAuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbih2KXt2YXIgcD12PDA7cCYmKHY9LXYpLEkodjw9NjcxMDg4NjMpO2Zvcih2YXIgdz02NzEwODg2NCV2LEo9MCxuZT10aGlzLmxlbmd0aC0xO25lPj0wO25lLS0pSj0odypKKygwfHRoaXMu'@;
put 'd29yZHNbbmVdKSkldjtyZXR1cm4gcD8tSjpKfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLm1vZHJuKHYpfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih2KXt2YXIgcD12PDA7cCYmKHY9LXYpLEkodjw9NjcxMDg4NjMpO2Zvcih2YXIgdz0wLEo9dGhpcy5s'@;
put 'ZW5ndGgtMTtKPj0wO0otLSl7dmFyIG5lPSgwfHRoaXMud29yZHNbSl0pKzY3MTA4ODY0Knc7dGhpcy53b3Jkc1tKXT1uZS92fDAsdz1uZSV2fXJldHVybiB0aGlzLl9zdHJpcCgpLHA/dGhpcy5pbmVnKCk6dGhpc30sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5j'@;
put 'bG9uZSgpLmlkaXZuKHYpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHYpe0koMD09PXYubmVnYXRpdmUpLEkoIXYuaXNaZXJvKCkpO3ZhciBwPXRoaXMsdz12LmNsb25lKCk7cD0wIT09cC5uZWdhdGl2ZT9wLnVtb2Qodik6cC5jbG9uZSgpO2Zvcih2YXIgSj1uZXcgRSgxKSxuZT1uZXcg'@;
put 'RSgwKSxkZT1uZXcgRSgwKSxmZT1uZXcgRSgxKSx4ZT0wO3AuaXNFdmVuKCkmJncuaXNFdmVuKCk7KXAuaXVzaHJuKDEpLHcuaXVzaHJuKDEpLCsreGU7Zm9yKHZhciBMZT13LmNsb25lKCksRmU9cC5jbG9uZSgpOyFwLmlzWmVybygpOyl7Zm9yKHZhciBPZT0wLGplPTE7IShwLndvcmRzWzBd'@;
put 'JmplKSYmT2U8MjY7KytPZSxqZTw8PTEpO2lmKE9lPjApZm9yKHAuaXVzaHJuKE9lKTtPZS0tID4wOykoSi5pc09kZCgpfHxuZS5pc09kZCgpKSYmKEouaWFkZChMZSksbmUuaXN1YihGZSkpLEouaXVzaHJuKDEpLG5lLml1c2hybigxKTtmb3IodmFyIFdlPTAsS2U9MTshKHcud29yZHNbMF0m'@;
put 'S2UpJiZXZTwyNjsrK1dlLEtlPDw9MSk7aWYoV2U+MClmb3Iody5pdXNocm4oV2UpO1dlLS0gPjA7KShkZS5pc09kZCgpfHxmZS5pc09kZCgpKSYmKGRlLmlhZGQoTGUpLGZlLmlzdWIoRmUpKSxkZS5pdXNocm4oMSksZmUuaXVzaHJuKDEpO3AuY21wKHcpPj0wPyhwLmlzdWIodyksSi5pc3Vi'@;
put 'KGRlKSxuZS5pc3ViKGZlKSk6KHcuaXN1YihwKSxkZS5pc3ViKEopLGZlLmlzdWIobmUpKX1yZXR1cm57YTpkZSxiOmZlLGdjZDp3Lml1c2hsbih4ZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odil7SSgwPT09di5uZWdhdGl2ZSksSSghdi5pc1plcm8oKSk7dmFyIHA9dGhpcyx3'@;
put 'PXYuY2xvbmUoKTtwPTAhPT1wLm5lZ2F0aXZlP3AudW1vZCh2KTpwLmNsb25lKCk7Zm9yKHZhciBKLG5lPW5ldyBFKDEpLGRlPW5ldyBFKDApLGZlPXcuY2xvbmUoKTtwLmNtcG4oMSk+MCYmdy5jbXBuKDEpPjA7KXtmb3IodmFyIHhlPTAsTGU9MTshKHAud29yZHNbMF0mTGUpJiZ4ZTwyNjsr'@;
put 'K3hlLExlPDw9MSk7aWYoeGU+MClmb3IocC5pdXNocm4oeGUpO3hlLS0gPjA7KW5lLmlzT2RkKCkmJm5lLmlhZGQoZmUpLG5lLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKHcud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3Iody5pdXNocm4oRmUpO0Zl'@;
put 'LS0gPjA7KWRlLmlzT2RkKCkmJmRlLmlhZGQoZmUpLGRlLml1c2hybigxKTtwLmNtcCh3KT49MD8ocC5pc3ViKHcpLG5lLmlzdWIoZGUpKToody5pc3ViKHApLGRlLmlzdWIobmUpKX1yZXR1cm4oSj0wPT09cC5jbXBuKDEpP25lOmRlKS5jbXBuKDApPDAmJkouaWFkZCh2KSxKfSxFLnByb3Rv'@;
put 'dHlwZS5nY2Q9ZnVuY3Rpb24odil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdi5hYnMoKTtpZih2LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBwPXRoaXMuY2xvbmUoKSx3PXYuY2xvbmUoKTtwLm5lZ2F0aXZlPTAsdy5uZWdhdGl2ZT0wO2Zvcih2YXIgSj0wO3AuaXNFdmVuKCkm'@;
put 'JncuaXNFdmVuKCk7SisrKXAuaXVzaHJuKDEpLHcuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtwLmlzRXZlbigpOylwLml1c2hybigxKTtmb3IoO3cuaXNFdmVuKCk7KXcuaXVzaHJuKDEpO3ZhciBuZT1wLmNtcCh3KTtpZihuZTwwKXt2YXIgZGU9cDtwPXcsdz1kZX1lbHNlIGlmKDA9PT1uZXx8'@;
put 'MD09PXcuY21wbigxKSlicmVhaztwLmlzdWIodyl9cmV0dXJuIHcuaXVzaGxuKEopfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmVnY2QodikuYS51bW9kKHYpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1sw'@;
put 'XSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ2fSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2Yg'@;
put 'dik7dmFyIHA9diUyNix3PSh2LXApLzI2LEo9MTw8cDtpZih0aGlzLmxlbmd0aDw9dylyZXR1cm4gdGhpcy5fZXhwYW5kKHcrMSksdGhpcy53b3Jkc1t3XXw9Six0aGlzO2Zvcih2YXIgbmU9SixkZT13OzAhPT1uZSYmZGU8dGhpcy5sZW5ndGg7ZGUrKyl7dmFyIGZlPTB8dGhpcy53b3Jkc1tk'@;
put 'ZV07bmU9KGZlKz1uZSk+Pj4yNix0aGlzLndvcmRzW2RlXT1mZSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1uZSYmKHRoaXMud29yZHNbZGVdPW5lLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlz'@;
put 'LndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHYpe3ZhciBwLHc9djwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhdylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdylyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpcD0xO2Vsc2V7dyYmKHY9'@;
put 'LXYpLEkodjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEo9MHx0aGlzLndvcmRzWzBdO3A9Sj09PXY/MDpKPHY/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcDpwfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9'@;
put 'PT12Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09di5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgcD10aGlzLnVjbXAodik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXA6cH0sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih2KXtpZih0aGlzLmxlbmd0aD52'@;
put 'Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx2Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHA9MCx3PXRoaXMubGVuZ3RoLTE7dz49MDt3LS0pe3ZhciBKPTB8dGhpcy53b3Jkc1t3XSxuZT0wfHYud29yZHNbd107aWYoSiE9PW5lKXtKPG5lP3A9LTE6Sj5uZSYmKHA9MSk7YnJlYWt9'@;
put 'fXJldHVybiBwfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odil7cmV0dXJuIDE9PT10aGlzLmNtcG4odil9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHYpe3JldHVybiAxPT09dGhpcy5jbXAodil9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wbih2KT49'@;
put 'MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcCh2KT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHYpe3JldHVybi0xPT09dGhpcy5jbXBuKHYpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbih2KXtyZXR1cm4tMT09PXRoaXMuY21wKHYpfSxFLnByb3Rv'@;
put 'dHlwZS5sdGVuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcG4odik8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbXAodik8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbih2KXtyZXR1cm4gMD09PXRoaXMuY21wbih2KX0sRS5wcm90b3R5cGUuZXE9'@;
put 'ZnVuY3Rpb24odil7cmV0dXJuIDA9PT10aGlzLmNtcCh2KX0sRS5yZWQ9ZnVuY3Rpb24odil7cmV0dXJuIG5ldyBDKHYpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih2KXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9'@;
put 'PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHYuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh2KX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGlu'@;
put 'IHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5yZWQ9dix0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih2KXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVh'@;
put 'ZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh2KX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsdil9LEUu'@;
put 'cHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1'@;
put 'YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdil9'@;
put 'LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11'@;
put 'bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHYpLHRoaXMucmVkLm11bCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx2KSx0aGlzLnJlZC5pbXVsKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhp'@;
put 'cy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVk'@;
put 'U3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJl'@;
put 'ZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt'@;
put 'YmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkJiYhdi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93'@;
put 'KHRoaXMsdil9O3ZhciBHPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gYih2LHApe3RoaXMubmFtZT12LHRoaXMucD1uZXcgRShwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5p'@;
put 'c3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gRCgpe2IuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBIKCl7Yi5jYWxsKHRoaXMs'@;
put 'InAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIE4oKXtiLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVu'@;
put 'Y3Rpb24gZygpe2IuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBDKHYpe2lmKCJzdHJpbmciPT10eXBlb2Ygdil7dmFyIHA9RS5fcHJpbWUodik7dGhpcy5tPXAu'@;
put 'cCx0aGlzLnByaW1lPXB9ZWxzZSBJKHYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09dix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gUyh2KXtDLmNhbGwodGhpcyx2KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0w'@;
put 'JiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5p'@;
put 'c3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWIucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdj1uZXcgRShudWxsKTtyZXR1cm4gdi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWls'@;
put 'KHRoaXMubi8xMykpLHZ9LGIucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odil7dmFyIHAsdz12O2Rve3RoaXMuc3BsaXQodyx0aGlzLnRtcCkscD0odz0odz10aGlzLmltdWxLKHcpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUocD50aGlzLm4pO3ZhciBKPXA8dGhpcy5u'@;
put 'Py0xOncudWNtcCh0aGlzLnApO3JldHVybiAwPT09Sj8ody53b3Jkc1swXT0wLHcubGVuZ3RoPTEpOko+MD93LmlzdWIodGhpcy5wKTp2b2lkIDAhPT13LnN0cmlwP3cuc3RyaXAoKTp3Ll9zdHJpcCgpLHd9LGIucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHYscCl7di5pdXNocm4odGhpcy5u'@;
put 'LDAscCl9LGIucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHYpe3JldHVybiB2LmltdWwodGhpcy5rKX0sayhELGIpLEQucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PTQxOTQzMDMsSj1NYXRoLm1pbih2Lmxlbmd0aCw5KSxuZT0wO25lPEo7bmUrKylwLndvcmRzW25l'@;
put 'XT12LndvcmRzW25lXTtpZihwLmxlbmd0aD1KLHYubGVuZ3RoPD05KXJldHVybiB2LndvcmRzWzBdPTAsdm9pZCh2Lmxlbmd0aD0xKTt2YXIgZGU9di53b3Jkc1s5XTtmb3IocC53b3Jkc1twLmxlbmd0aCsrXT1kZSZ3LG5lPTEwO25lPHYubGVuZ3RoO25lKyspe3ZhciBmZT0wfHYud29yZHNb'@;
put 'bmVdO3Yud29yZHNbbmUtMTBdPShmZSZ3KTw8NHxkZT4+PjIyLGRlPWZlfXYud29yZHNbbmUtMTBdPWRlPj4+PTIyLHYubGVuZ3RoLT0wPT09ZGUmJnYubGVuZ3RoPjEwPzEwOjl9LEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHYpe3Yud29yZHNbdi5sZW5ndGhdPTAsdi53b3Jkc1t2Lmxl'@;
put 'bmd0aCsxXT0wLHYubGVuZ3RoKz0yO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIEo9MHx2LndvcmRzW3ddO3Yud29yZHNbd109NjcxMDg4NjMmKHArPTk3NypKKSxwPTY0KkorKHAvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT12LndvcmRzW3YubGVuZ3RoLTFdJiYodi5sZW5n'@;
put 'dGgtLSwwPT09di53b3Jkc1t2Lmxlbmd0aC0xXSYmdi5sZW5ndGgtLSksdn0sayhILGIpLGsoTixiKSxrKGcsYiksZy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odil7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXt2YXIgSj0xOSooMHx2LndvcmRzW3ddKStwLG5lPTY3MTA4ODYz'@;
put 'Jko7Sj4+Pj0yNix2LndvcmRzW3ddPW5lLHA9Sn1yZXR1cm4gMCE9PXAmJih2LndvcmRzW3YubGVuZ3RoKytdPXApLHZ9LEUuX3ByaW1lPWZ1bmN0aW9uKHYpe2lmKEdbdl0pcmV0dXJuIEdbdl07dmFyIHA7aWYoImsyNTYiPT09dilwPW5ldyBEO2Vsc2UgaWYoInAyMjQiPT09dilwPW5ldyBI'@;
put 'O2Vsc2UgaWYoInAxOTIiPT09dilwPW5ldyBOO2Vsc2V7aWYoInAyNTUxOSIhPT12KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3YpO3A9bmV3IGd9cmV0dXJuIEdbdl09cCxwfSxDLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih2KXtJKDA9PT12Lm5lZ2F0aXZlLCJyZWQg'@;
put 'd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkodi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sQy5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odixwKXtJKDA9PSh2Lm5lZ2F0aXZlfHAubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZl'@;
put 'cyIpLEkodi5yZWQmJnYucmVkPT09cC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sQy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodikuX2ZvcmNlUmVkKHRoaXMpOihYKHYsdi51bW9kKHRoaXMu'@;
put 'bSkuX2ZvcmNlUmVkKHRoaXMpKSx2KX0sQy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHYpe3JldHVybiB2LmlzWmVybygpP3YuY2xvbmUoKTp0aGlzLm0uc3ViKHYpLl9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciB3'@;
put 'PXYuYWRkKHApO3JldHVybiB3LmNtcCh0aGlzLm0pPj0wJiZ3LmlzdWIodGhpcy5tKSx3Ll9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgdz12LmlhZGQocCk7cmV0dXJuIHcuY21wKHRoaXMubSk+PTAmJncuaXN1'@;
put 'Yih0aGlzLm0pLHd9LEMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgdz12LnN1YihwKTtyZXR1cm4gdy5jbXBuKDApPDAmJncuaWFkZCh0aGlzLm0pLHcuX2ZvcmNlUmVkKHRoaXMpfSxDLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHYscCl7dGhp'@;
put 'cy5fdmVyaWZ5Mih2LHApO3ZhciB3PXYuaXN1YihwKTtyZXR1cm4gdy5jbXBuKDApPDAmJncuaWFkZCh0aGlzLm0pLHd9LEMucHJvdG90eXBlLnNobD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkxKHYpLHRoaXMuaW1vZCh2LnVzaGxuKHApKX0sQy5wcm90b3R5cGUuaW11bD1m'@;
put 'dW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkyKHYscCksdGhpcy5pbW9kKHYuaW11bChwKSl9LEMucHJvdG90eXBlLm11bD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkyKHYscCksdGhpcy5pbW9kKHYubXVsKHApKX0sQy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih2'@;
put 'KXtyZXR1cm4gdGhpcy5pbXVsKHYsdi5jbG9uZSgpKX0sQy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLm11bCh2LHYpfSxDLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHYpe2lmKHYuaXNaZXJvKCkpcmV0dXJuIHYuY2xvbmUoKTt2YXIgcD10aGlzLm0uYW5kbG4oMyk7'@;
put 'aWYoSShwJTI9PTEpLDM9PT1wKXt2YXIgdz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHYsdyl9Zm9yKHZhciBKPXRoaXMubS5zdWJuKDEpLG5lPTA7IUouaXNaZXJvKCkmJjA9PT1KLmFuZGxuKDEpOyluZSsrLEouaXVzaHJuKDEpO0koIUouaXNaZXJv'@;
put 'KCkpO3ZhciBkZT1uZXcgRSgxKS50b1JlZCh0aGlzKSxmZT1kZS5yZWROZWcoKSx4ZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksTGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihMZT1uZXcgRSgyKkxlKkxlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coTGUseGUpLmNtcChmZSk7KUxlLnJl'@;
put 'ZElBZGQoZmUpO2Zvcih2YXIgRmU9dGhpcy5wb3coTGUsSiksT2U9dGhpcy5wb3codixKLmFkZG4oMSkuaXVzaHJuKDEpKSxqZT10aGlzLnBvdyh2LEopLFdlPW5lOzAhPT1qZS5jbXAoZGUpOyl7Zm9yKHZhciBLZT1qZSxZZT0wOzAhPT1LZS5jbXAoZGUpO1llKyspS2U9S2UucmVkU3FyKCk7'@;
put 'SShZZTxXZSk7dmFyIFFlPXRoaXMucG93KEZlLG5ldyBFKDEpLml1c2hsbihXZS1ZZS0xKSk7T2U9T2UucmVkTXVsKFFlKSxGZT1RZS5yZWRTcXIoKSxqZT1qZS5yZWRNdWwoRmUpLFdlPVllfXJldHVybiBPZX0sQy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih2KXt2YXIgcD12Ll9pbnZtcCh0'@;
put 'aGlzLm0pO3JldHVybiAwIT09cC5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChwKS5yZWROZWcoKSk6dGhpcy5pbW9kKHApfSxDLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odixwKXtpZihwLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09cC5jbXBu'@;
put 'KDEpKXJldHVybiB2LmNsb25lKCk7dmFyIHc9bmV3IEFycmF5KDE2KTt3WzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLHdbMV09djtmb3IodmFyIEo9MjtKPHcubGVuZ3RoO0orKyl3W0pdPXRoaXMubXVsKHdbSi0xXSx2KTt2YXIgbmU9d1swXSxkZT0wLGZlPTAseGU9cC5iaXRMZW5ndGgoKSUy'@;
put 'Njtmb3IoMD09PXhlJiYoeGU9MjYpLEo9cC5sZW5ndGgtMTtKPj0wO0otLSl7Zm9yKHZhciBMZT1wLndvcmRzW0pdLEZlPXhlLTE7RmU+PTA7RmUtLSl7dmFyIE9lPUxlPj5GZSYxO25lIT09d1swXSYmKG5lPXRoaXMuc3FyKG5lKSksMCE9PU9lfHwwIT09ZGU/KGRlPDw9MSxkZXw9T2UsKDQ9'@;
put 'PSsrZmV8fDA9PT1KJiYwPT09RmUpJiYobmU9dGhpcy5tdWwobmUsd1tkZV0pLGZlPTAsZGU9MCkpOmZlPTB9eGU9MjZ9cmV0dXJuIG5lfSxDLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odil7dmFyIHA9di51bW9kKHRoaXMubSk7cmV0dXJuIHA9PT12P3AuY2xvbmUoKTpwfSxDLnBy'@;
put 'b3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih2KXt2YXIgcD12LmNsb25lKCk7cmV0dXJuIHAucmVkPW51bGwscH0sRS5tb250PWZ1bmN0aW9uKHYpe3JldHVybiBuZXcgUyh2KX0sayhTLEMpLFMucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5pbW9kKHYu'@;
put 'dXNobG4odGhpcy5zaGlmdCkpfSxTLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih2KXt2YXIgcD10aGlzLmltb2Qodi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHAucmVkPW51bGwscH0sUy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2LHApe2lmKHYuaXNaZXJvKCl8fHAuaXNaZXJv'@;
put 'KCkpcmV0dXJuIHYud29yZHNbMF09MCx2Lmxlbmd0aD0xLHY7dmFyIHc9di5pbXVsKHApLEo9dy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksbmU9dy5pc3ViKEopLml1c2hybih0aGlzLnNoaWZ0KSxkZT1uZTtyZXR1cm4g'@;
put 'bmUuY21wKHRoaXMubSk+PTA/ZGU9bmUuaXN1Yih0aGlzLm0pOm5lLmNtcG4oMCk8MCYmKGRlPW5lLmlhZGQodGhpcy5tKSksZGUuX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odixwKXtpZih2LmlzWmVybygpfHxwLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5f'@;
put 'Zm9yY2VSZWQodGhpcyk7dmFyIHc9di5tdWwocCksSj13Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxuZT13LmlzdWIoSikuaXVzaHJuKHRoaXMuc2hpZnQpLGRlPW5lO3JldHVybiBuZS5jbXAodGhpcy5tKT49MD9kZT1u'@;
put 'ZS5pc3ViKHRoaXMubSk6bmUuY21wbigwKTwwJiYoZGU9bmUuaWFkZCh0aGlzLm0pKSxkZS5fZm9yY2VSZWQodGhpcyl9LFMucHJvdG90eXBlLmludm09ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuaW1vZCh2Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0o'@;
put 'TT1SLm5tZChNKSx0aGlzKX0sMzY0NDooTSxPLFIpPT57dmFyIHo9UigxMDQ4KSxLPVIoNTYyMyk7TS5leHBvcnRzPWZ1bmN0aW9uKHNlKXtyZXR1cm4gc2U/KCJ7fSI9PT1zZS5zdWJzdHIoMCwyKSYmKHNlPSJcXHtcXH0iK3NlLnN1YnN0cigyKSksb2UoKGhlPXNlLGhlLnNwbGl0KCJcXFxc'@;
put 'Iikuam9pbihJKS5zcGxpdCgiXFx7Iikuam9pbihrKS5zcGxpdCgiXFx9Iikuam9pbihFKS5zcGxpdCgiXFwsIikuam9pbihqKS5zcGxpdCgiXFwuIikuam9pbihWKSksITApLm1hcChZKSk6W107dmFyIGhlfTt2YXIgST0iXDBTTEFTSCIrTWF0aC5yYW5kb20oKSsiXDAiLGs9IlwwT1BFTiIr'@;
put 'TWF0aC5yYW5kb20oKSsiXDAiLEU9IlwwQ0xPU0UiK01hdGgucmFuZG9tKCkrIlwwIixqPSJcMENPTU1BIitNYXRoLnJhbmRvbSgpKyJcMCIsVj0iXDBQRVJJT0QiK01hdGgucmFuZG9tKCkrIlwwIjtmdW5jdGlvbiBCKHNlKXtyZXR1cm4gcGFyc2VJbnQoc2UsMTApPT1zZT9wYXJzZUludChz'@;
put 'ZSwxMCk6c2UuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBZKHNlKXtyZXR1cm4gc2Uuc3BsaXQoSSkuam9pbigiXFwiKS5zcGxpdChrKS5qb2luKCJ7Iikuc3BsaXQoRSkuam9pbigifSIpLnNwbGl0KGopLmpvaW4oIiwiKS5zcGxpdChWKS5qb2luKCIuIil9ZnVuY3Rpb24gWChzZSl7aWYoIXNl'@;
put 'KXJldHVyblsiIl07dmFyIGhlPVtdLHVlPUsoInsiLCJ9IixzZSk7aWYoIXVlKXJldHVybiBzZS5zcGxpdCgiLCIpO3ZhciBHPXVlLmJvZHksYj11ZS5wb3N0LEQ9dWUucHJlLnNwbGl0KCIsIik7RFtELmxlbmd0aC0xXSs9InsiK0crIn0iO3ZhciBIPVgoYik7cmV0dXJuIGIubGVuZ3RoJiYo'@;
put 'RFtELmxlbmd0aC0xXSs9SC5zaGlmdCgpLEQucHVzaC5hcHBseShELEgpKSxoZS5wdXNoLmFwcGx5KGhlLEQpLGhlfWZ1bmN0aW9uIFUoc2Upe3JldHVybiJ7IitzZSsifSJ9ZnVuY3Rpb24gcShzZSl7cmV0dXJuL14tPzBcZC8udGVzdChzZSl9ZnVuY3Rpb24gZWUoc2UsaGUpe3JldHVybiBz'@;
put 'ZTw9aGV9ZnVuY3Rpb24gdGUoc2UsaGUpe3JldHVybiBzZT49aGV9ZnVuY3Rpb24gb2Uoc2UsaGUpe3ZhciB1ZT1bXSxjZT1LKCJ7IiwifSIsc2UpO2lmKCFjZXx8L1wkJC8udGVzdChjZS5wcmUpKXJldHVybltzZV07dmFyIEcsYj0vXi0/XGQrXC5cLi0/XGQrKD86XC5cLi0/XGQrKT8kLy50'@;
put 'ZXN0KGNlLmJvZHkpLEQ9L15bYS16QS1aXVwuXC5bYS16QS1aXSg/OlwuXC4tP1xkKyk/JC8udGVzdChjZS5ib2R5KSxIPWJ8fEQsTj1jZS5ib2R5LmluZGV4T2YoIiwiKT49MDtpZighSCYmIU4pcmV0dXJuIGNlLnBvc3QubWF0Y2goLywuKlx9Lyk/b2Uoc2U9Y2UucHJlKyJ7IitjZS5ib2R5'@;
put 'K0UrY2UucG9zdCk6W3NlXTtpZihIKUc9Y2UuYm9keS5zcGxpdCgvXC5cLi8pO2Vsc2UgaWYoMT09PShHPVgoY2UuYm9keSkpLmxlbmd0aCYmMT09PShHPW9lKEdbMF0sITEpLm1hcChVKSkubGVuZ3RoKXJldHVybihTPWNlLnBvc3QubGVuZ3RoP29lKGNlLnBvc3QsITEpOlsiIl0pLm1hcChm'@;
put 'dW5jdGlvbihLZSl7cmV0dXJuIGNlLnByZStHWzBdK0tlfSk7dmFyIGcsQz1jZS5wcmUsUz1jZS5wb3N0Lmxlbmd0aD9vZShjZS5wb3N0LCExKTpbIiJdO2lmKEgpe3ZhciB2PUIoR1swXSkscD1CKEdbMV0pLHc9TWF0aC5tYXgoR1swXS5sZW5ndGgsR1sxXS5sZW5ndGgpLEo9Mz09Ry5sZW5n'@;
put 'dGg/TWF0aC5hYnMoQihHWzJdKSk6MSxuZT1lZTtwPHYmJihKKj0tMSxuZT10ZSk7dmFyIGRlPUcuc29tZShxKTtnPVtdO2Zvcih2YXIgZmU9djtuZShmZSxwKTtmZSs9Sil7dmFyIHhlO2lmKEQpIlxcIj09PSh4ZT1TdHJpbmcuZnJvbUNoYXJDb2RlKGZlKSkmJih4ZT0iIik7ZWxzZSBpZih4'@;
put 'ZT1TdHJpbmcoZmUpLGRlKXt2YXIgTGU9dy14ZS5sZW5ndGg7aWYoTGU+MCl7dmFyIEZlPW5ldyBBcnJheShMZSsxKS5qb2luKCIwIik7eGU9ZmU8MD8iLSIrRmUreGUuc2xpY2UoMSk6RmUreGV9fWcucHVzaCh4ZSl9fWVsc2UgZz16KEcsZnVuY3Rpb24oS2Upe3JldHVybiBvZShLZSwhMSl9'@;
put 'KTtmb3IodmFyIE9lPTA7T2U8Zy5sZW5ndGg7T2UrKylmb3IodmFyIGplPTA7amU8Uy5sZW5ndGg7amUrKyl7dmFyIFdlPUMrZ1tPZV0rU1tqZV07KCFoZXx8SHx8V2UpJiZ1ZS5wdXNoKFdlKX1yZXR1cm4gdWV9fSw5OTMxOihNLE8sUik9Pnt2YXIgejtmdW5jdGlvbiBLKGspe3RoaXMucmFu'@;
put 'ZD1rfWlmKE0uZXhwb3J0cz1mdW5jdGlvbihrKXtyZXR1cm4genx8KHo9bmV3IEsobnVsbCkpLHouZ2VuZXJhdGUoayl9LE0uZXhwb3J0cy5SYW5kPUssSy5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX3JhbmQoayl9LEsucHJvdG90eXBlLl9yYW5kPWZ1bmN0'@;
put 'aW9uKGspe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKGspO2Zvcih2YXIgRT1uZXcgVWludDhBcnJheShrKSxqPTA7ajxFLmxlbmd0aDtqKyspRVtqXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBFfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2Vs'@;
put 'Zi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9LLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihrKXt2YXIgRT1uZXcgVWludDhBcnJheShrKTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKEUpLEV9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0'@;
put 'UmFuZG9tVmFsdWVzP0sucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGspe3ZhciBFPW5ldyBVaW50OEFycmF5KGspO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhFKSxFfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKEsucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7'@;
put 'dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgST1SKDkyMTQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBJLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO0sucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGspe3Jl'@;
put 'dHVybiBJLnJhbmRvbUJ5dGVzKGspfX1jYXRjaHt9fSw0NDk3OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBLKEIpe3ouaXNCdWZmZXIoQil8fChCPXouZnJvbShCKSk7Zm9yKHZhciBZPUIubGVuZ3RoLzR8MCxYPW5ldyBBcnJheShZKSxVPTA7VTxZO1UrKylYW1Vd'@;
put 'PUIucmVhZFVJbnQzMkJFKDQqVSk7cmV0dXJuIFh9ZnVuY3Rpb24gSShCKXtmb3IoOzA8Qi5sZW5ndGg7QisrKUJbMF09MH1mdW5jdGlvbiBrKEIsWSxYLFUscSl7Zm9yKHZhciBlZSx0ZSxvZSxzZSxoZT1YWzBdLHVlPVhbMV0sY2U9WFsyXSxHPVhbM10sYj1CWzBdXllbMF0sRD1CWzFdXllb'@;
put 'MV0sSD1CWzJdXllbMl0sTj1CWzNdXllbM10sZz00LEM9MTtDPHE7QysrKWVlPWhlW2I+Pj4yNF1edWVbRD4+PjE2JjI1NV1eY2VbSD4+PjgmMjU1XV5HWzI1NSZOXV5ZW2crK10sdGU9aGVbRD4+PjI0XV51ZVtIPj4+MTYmMjU1XV5jZVtOPj4+OCYyNTVdXkdbMjU1JmJdXllbZysrXSxvZT1o'@;
put 'ZVtIPj4+MjRdXnVlW04+Pj4xNiYyNTVdXmNlW2I+Pj44JjI1NV1eR1syNTUmRF1eWVtnKytdLHNlPWhlW04+Pj4yNF1edWVbYj4+PjE2JjI1NV1eY2VbRD4+PjgmMjU1XV5HWzI1NSZIXV5ZW2crK10sYj1lZSxEPXRlLEg9b2UsTj1zZTtyZXR1cm4gZWU9KFVbYj4+PjI0XTw8MjR8VVtEPj4+'@;
put 'MTYmMjU1XTw8MTZ8VVtIPj4+OCYyNTVdPDw4fFVbMjU1Jk5dKV5ZW2crK10sdGU9KFVbRD4+PjI0XTw8MjR8VVtIPj4+MTYmMjU1XTw8MTZ8VVtOPj4+OCYyNTVdPDw4fFVbMjU1JmJdKV5ZW2crK10sb2U9KFVbSD4+PjI0XTw8MjR8VVtOPj4+MTYmMjU1XTw8MTZ8VVtiPj4+OCYyNTVdPDw4'@;
put 'fFVbMjU1JkRdKV5ZW2crK10sc2U9KFVbTj4+PjI0XTw8MjR8VVtiPj4+MTYmMjU1XTw8MTZ8VVtEPj4+OCYyNTVdPDw4fFVbMjU1JkhdKV5ZW2crK10sW2VlPj4+PTAsdGU+Pj49MCxvZT4+Pj0wLHNlPj4+PTBdfXZhciBFPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxqPWZ1bmN0'@;
put 'aW9uKCl7Zm9yKHZhciBCPW5ldyBBcnJheSgyNTYpLFk9MDtZPDI1NjtZKyspQltZXT1ZPDEyOD9ZPDwxOlk8PDFeMjgzO2Zvcih2YXIgWD1bXSxVPVtdLHE9W1tdLFtdLFtdLFtdXSxlZT1bW10sW10sW10sW11dLHRlPTAsb2U9MCxzZT0wO3NlPDI1NjsrK3NlKXt2YXIgaGU9b2Veb2U8PDFe'@;
put 'b2U8PDJeb2U8PDNeb2U8PDQ7WFt0ZV09aGU9aGU+Pj44XjI1NSZoZV45OSxVW2hlXT10ZTt2YXIgdWU9Qlt0ZV0sY2U9Qlt1ZV0sRz1CW2NlXSxiPTI1NypCW2hlXV4xNjg0MzAwOCpoZTtxWzBdW3RlXT1iPDwyNHxiPj4+OCxxWzFdW3RlXT1iPDwxNnxiPj4+MTYscVsyXVt0ZV09Yjw8OHxi'@;
put 'Pj4+MjQscVszXVt0ZV09YixlZVswXVtoZV09KGI9MTY4NDMwMDkqR142NTUzNypjZV4yNTcqdWVeMTY4NDMwMDgqdGUpPDwyNHxiPj4+OCxlZVsxXVtoZV09Yjw8MTZ8Yj4+PjE2LGVlWzJdW2hlXT1iPDw4fGI+Pj4yNCxlZVszXVtoZV09YiwwPT09dGU/dGU9b2U9MToodGU9dWVeQltCW0Jb'@;
put 'R151ZV1dXSxvZV49QltCW29lXV0pfXJldHVybntTQk9YOlgsSU5WX1NCT1g6VSxTVUJfTUlYOnEsSU5WX1NVQl9NSVg6ZWV9fSgpO2Z1bmN0aW9uIFYoQil7dGhpcy5fa2V5PUsoQiksdGhpcy5fcmVzZXQoKX1WLmJsb2NrU2l6ZT0xNixWLmtleVNpemU9MzIsVi5wcm90b3R5cGUuYmxvY2tT'@;
put 'aXplPVYuYmxvY2tTaXplLFYucHJvdG90eXBlLmtleVNpemU9Vi5rZXlTaXplLFYucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgQj10aGlzLl9rZXksWT1CLmxlbmd0aCxYPVkrNixVPTQqKFgrMSkscT1bXSxlZT0wO2VlPFk7ZWUrKylxW2VlXT1CW2VlXTtmb3IoZWU9WTtl'@;
put 'ZTxVO2VlKyspe3ZhciB0ZT1xW2VlLTFdO2VlJVk9PTA/KHRlPWouU0JPWFsodGU9dGU8PDh8dGU+Pj4yNCk+Pj4yNF08PDI0fGouU0JPWFt0ZT4+PjE2JjI1NV08PDE2fGouU0JPWFt0ZT4+PjgmMjU1XTw8OHxqLlNCT1hbMjU1JnRlXSx0ZV49RVtlZS9ZfDBdPDwyNCk6WT42JiZlZSVZPT00'@;
put 'JiYodGU9ai5TQk9YW3RlPj4+MjRdPDwyNHxqLlNCT1hbdGU+Pj4xNiYyNTVdPDwxNnxqLlNCT1hbdGU+Pj44JjI1NV08PDh8ai5TQk9YWzI1NSZ0ZV0pLHFbZWVdPXFbZWUtWV1edGV9Zm9yKHZhciBvZT1bXSxzZT0wO3NlPFU7c2UrKyl7dmFyIGhlPVUtc2UsdWU9cVtoZS0oc2UlND8wOjQp'@;
put 'XTtvZVtzZV09c2U8NHx8aGU8PTQ/dWU6ai5JTlZfU1VCX01JWFswXVtqLlNCT1hbdWU+Pj4yNF1dXmouSU5WX1NVQl9NSVhbMV1bai5TQk9YW3VlPj4+MTYmMjU1XV1eai5JTlZfU1VCX01JWFsyXVtqLlNCT1hbdWU+Pj44JjI1NV1dXmouSU5WX1NVQl9NSVhbM11bai5TQk9YWzI1NSZ1ZV1d'@;
put 'fXRoaXMuX25Sb3VuZHM9WCx0aGlzLl9rZXlTY2hlZHVsZT1xLHRoaXMuX2ludktleVNjaGVkdWxlPW9lfSxWLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oQil7cmV0dXJuIGsoQj1LKEIpLHRoaXMuX2tleVNjaGVkdWxlLGouU1VCX01JWCxqLlNCT1gsdGhpcy5fblJvdW5k'@;
put 'cyl9LFYucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihCKXt2YXIgWT10aGlzLmVuY3J5cHRCbG9ja1JhdyhCKSxYPXouYWxsb2NVbnNhZmUoMTYpO3JldHVybiBYLndyaXRlVUludDMyQkUoWVswXSwwKSxYLndyaXRlVUludDMyQkUoWVsxXSw0KSxYLndyaXRlVUludDMyQkUoWVsy'@;
put 'XSw4KSxYLndyaXRlVUludDMyQkUoWVszXSwxMiksWH0sVi5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKEIpe3ZhciBZPShCPUsoQikpWzFdO0JbMV09QlszXSxCWzNdPVk7dmFyIFg9ayhCLHRoaXMuX2ludktleVNjaGVkdWxlLGouSU5WX1NVQl9NSVgsai5JTlZfU0JPWCx0aGlz'@;
put 'Ll9uUm91bmRzKSxVPXouYWxsb2NVbnNhZmUoMTYpO3JldHVybiBVLndyaXRlVUludDMyQkUoWFswXSwwKSxVLndyaXRlVUludDMyQkUoWFszXSw0KSxVLndyaXRlVUludDMyQkUoWFsyXSw4KSxVLndyaXRlVUludDMyQkUoWFsxXSwxMiksVX0sVi5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24o'@;
put 'KXtJKHRoaXMuX2tleVNjaGVkdWxlKSxJKHRoaXMuX2ludktleVNjaGVkdWxlKSxJKHRoaXMuX2tleSl9LE0uZXhwb3J0cy5BRVM9Vn0sNDg0ODooTSxPLFIpPT57dmFyIHo9Uig0NDk3KSxLPVIoOTUwOSkuQnVmZmVyLEk9UigxMDI3KSxrPVIoNTcxNyksRT1SKDMyODgpLGo9Uig3Mjk1KSxW'@;
put 'PVIoNjg1KTtmdW5jdGlvbiBCKFksWCxVLHEpe0kuY2FsbCh0aGlzKTt2YXIgZWU9Sy5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgei5BRVMoWCk7dmFyIHRlPXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soZWUpO3RoaXMuX2doYXNoPW5ldyBFKHRlKSxVPWZ1bmN0aW9uKG9lLHNlLGhl'@;
put 'KXtpZigxMj09PXNlLmxlbmd0aClyZXR1cm4gb2UuX2ZpbklEPUsuY29uY2F0KFtzZSxLLmZyb20oWzAsMCwwLDFdKV0pLEsuY29uY2F0KFtzZSxLLmZyb20oWzAsMCwwLDJdKV0pO3ZhciB1ZT1uZXcgRShoZSksY2U9c2UubGVuZ3RoLEc9Y2UlMTY7dWUudXBkYXRlKHNlKSxHJiZ1ZS51cGRh'@;
put 'dGUoSy5hbGxvYyhHPTE2LUcsMCkpLHVlLnVwZGF0ZShLLmFsbG9jKDgsMCkpO3ZhciBiPTgqY2UsRD1LLmFsbG9jKDgpO0Qud3JpdGVVSW50QkUoYiwwLDgpLHVlLnVwZGF0ZShEKSxvZS5fZmluSUQ9dWUuc3RhdGU7dmFyIEg9Sy5mcm9tKG9lLl9maW5JRCk7cmV0dXJuIFYoSCksSH0odGhp'@;
put 'cyxVLHRlKSx0aGlzLl9wcmV2PUsuZnJvbShVKSx0aGlzLl9jYWNoZT1LLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1xLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPVksdGhpcy5fYXV0aFRhZz1udWxsLHRo'@;
put 'aXMuX2NhbGxlZD0hMX1rKEIsSSksQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihZKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgWD0xNi10aGlzLl9hbGVuJTE2O1g8MTYmJihYPUsuYWxsb2MoWCwwKSx0aGlzLl9naGFzaC51cGRhdGUoWCkpfXRoaXMuX2NhbGxlZD0h'@;
put 'MDt2YXIgVT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxZKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/WTpVKSx0aGlzLl9sZW4rPVkubGVuZ3RoLFV9LEIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFn'@;
put 'KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIFk9aih0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0'@;
put 'aGlzLl9kZWNyeXB0JiZmdW5jdGlvbihYLFUpe3ZhciBxPTA7WC5sZW5ndGghPT1VLmxlbmd0aCYmcSsrO2Zvcih2YXIgZWU9TWF0aC5taW4oWC5sZW5ndGgsVS5sZW5ndGgpLHRlPTA7dGU8ZWU7Kyt0ZSlxKz1YW3RlXV5VW3RlXTtyZXR1cm4gcX0oWSx0aGlzLl9hdXRoVGFnKSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9WSx0aGlzLl9jaXBoZXIuc2NydWIoKX0sQi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFLLmlzQnVmZmVyKHRo'@;
put 'aXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sQi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihZKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1ZfSxCLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVu'@;
put 'c3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKFkpLHRoaXMuX2FsZW4rPVkubGVuZ3RofSxNLmV4cG9ydHM9Qn0sNDY5NjooTSxPLFIpPT57dmFyIHo9UigxNDk0KSxLPVIoNjE5MyksST1SKDQ5NDYpO08uY3JlYXRlQ2lwaGVyPU8uQ2lwaGVyPXouY3JlYXRlQ2lwaGVyLE8u'@;
put 'Y3JlYXRlQ2lwaGVyaXY9Ty5DaXBoZXJpdj16LmNyZWF0ZUNpcGhlcml2LE8uY3JlYXRlRGVjaXBoZXI9Ty5EZWNpcGhlcj1LLmNyZWF0ZURlY2lwaGVyLE8uY3JlYXRlRGVjaXBoZXJpdj1PLkRlY2lwaGVyaXY9Sy5jcmVhdGVEZWNpcGhlcml2LE8ubGlzdENpcGhlcnM9Ty5nZXRDaXBoZXJz'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKEkpfX0sNjE5MzooTSxPLFIpPT57dmFyIHo9Uig0ODQ4KSxLPVIoOTUwOSkuQnVmZmVyLEk9Uig0NSksaz1SKDU5NjkpLEU9UigxMDI3KSxqPVIoNDQ5NyksVj1SKDMwNDgpO2Z1bmN0aW9uIEIoVSxxLGVlKXtFLmNhbGwodGhpcyksdGhp'@;
put 'cy5fY2FjaGU9bmV3IFksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBqLkFFUyhxKSx0aGlzLl9wcmV2PUsuZnJvbShlZSksdGhpcy5fbW9kZT1VLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIFkoKXt0aGlzLmNhY2hlPUsuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24g'@;
put 'WChVLHEsZWUpe3ZhciB0ZT1JW1UudG9Mb3dlckNhc2UoKV07aWYoIXRlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgZWUmJihlZT1LLmZyb20oZWUpKSwiR0NNIiE9PXRlLm1vZGUmJmVlLmxlbmd0aCE9PXRlLml2KXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrZWUubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPUsuZnJvbShxKSkscS5sZW5ndGghPT10ZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0'@;
put 'cmVhbSI9PT10ZS50eXBlP25ldyBrKHRlLm1vZHVsZSxxLGVlLCEwKToiYXV0aCI9PT10ZS50eXBlP25ldyB6KHRlLm1vZHVsZSxxLGVlLCEwKTpuZXcgQih0ZS5tb2R1bGUscSxlZSl9Uig1NzE3KShCLEUpLEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSl7dmFyIHEsZWU7dGhpcy5f'@;
put 'Y2FjaGUuYWRkKFUpO2Zvcih2YXIgdGU9W107cT10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOyllZT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxxKSx0ZS5wdXNoKGVlKTtyZXR1cm4gSy5jb25jYXQodGUpfSxCLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVT10'@;
put 'aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbihxKXt2YXIgZWU9cVsxNV07aWYoZWU8MXx8ZWU+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciB0ZT0tMTsrK3RlPGVlOylpZihxW3RlKygxNi1l'@;
put 'ZSldIT09ZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1lZSlyZXR1cm4gcS5zbGljZSgwLDE2LWVlKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsVSkpO2lmKFUpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBs'@;
put 'ZW5ndGgiKX0sQi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVSl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVSx0aGlzfSxZLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVSl7dGhpcy5jYWNoZT1LLmNvbmNhdChbdGhpcy5jYWNoZSxVXSl9LFkucHJvdG90eXBlLmdldD1m'@;
put 'dW5jdGlvbihVKXt2YXIgcTtpZihVKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gcT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNikscX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gcT10aGlzLmNhY2hlLnNs'@;
put 'aWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNikscTtyZXR1cm4gbnVsbH0sWS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0sTy5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbihVLHEpe3ZhciBlZT1J'@;
put 'W1UudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciB0ZT1WKHEsITEsZWUua2V5LGVlLml2KTtyZXR1cm4gWChVLHRlLmtleSx0ZS5pdil9LE8uY3JlYXRlRGVjaXBoZXJpdj1YfSwxNDk0OihNLE8sUik9Pnt2YXIgej1S'@;
put 'KDQ1KSxLPVIoNDg0OCksST1SKDk1MDkpLkJ1ZmZlcixrPVIoNTk2OSksRT1SKDEwMjcpLGo9Uig0NDk3KSxWPVIoMzA0OCk7ZnVuY3Rpb24gQihxLGVlLHRlKXtFLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IFgsdGhpcy5fY2lwaGVyPW5ldyBqLkFFUyhlZSksdGhpcy5fcHJldj1JLmZy'@;
put 'b20odGUpLHRoaXMuX21vZGU9cSx0aGlzLl9hdXRvcGFkZGluZz0hMH1SKDU3MTcpKEIsRSksQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXt2YXIgZWUsdGU7dGhpcy5fY2FjaGUuYWRkKHEpO2Zvcih2YXIgb2U9W107ZWU9dGhpcy5fY2FjaGUuZ2V0KCk7KXRlPXRoaXMuX21vZGUu'@;
put 'ZW5jcnlwdCh0aGlzLGVlKSxvZS5wdXNoKHRlKTtyZXR1cm4gSS5jb25jYXQob2UpfTt2YXIgWT1JLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBYKCl7dGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIFUocSxlZSx0ZSl7dmFyIG9lPXpbcS50b0xvd2VyQ2FzZSgpXTtpZighb2Up'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBlZSYmKGVlPUkuZnJvbShlZSkpLGVlLmxlbmd0aCE9PW9lLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK2VlLmxlbmd0aCk7aWYoInN0cmlu'@;
put 'ZyI9PXR5cGVvZiB0ZSYmKHRlPUkuZnJvbSh0ZSkpLCJHQ00iIT09b2UubW9kZSYmdGUubGVuZ3RoIT09b2UuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIit0ZS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09b2UudHlwZT9uZXcgayhvZS5tb2R1bGUsZWUsdGUp'@;
put 'OiJhdXRoIj09PW9lLnR5cGU/bmV3IEsob2UubW9kdWxlLGVlLHRlKTpuZXcgQihvZS5tb2R1bGUsZWUsdGUpfUIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBxPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIHE9dGhpcy5fbW9kZS5lbmNy'@;
put 'eXB0KHRoaXMscSksdGhpcy5fY2lwaGVyLnNjcnViKCkscTtpZighcS5lcXVhbHMoWSkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sQi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24ocSl7'@;
put 'cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhcSx0aGlzfSxYLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocSl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxxXSl9LFgucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgcT10aGlzLmNh'@;
put 'Y2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHF9cmV0dXJuIG51bGx9LFgucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBxPTE2LXRoaXMuY2FjaGUubGVuZ3RoLGVlPUkuYWxsb2NVbnNhZmUocSksdGU9LTE7Kyt0ZTxxOyll'@;
put 'ZS53cml0ZVVJbnQ4KHEsdGUpO3JldHVybiBJLmNvbmNhdChbdGhpcy5jYWNoZSxlZV0pfSxPLmNyZWF0ZUNpcGhlcml2PVUsTy5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24ocSxlZSl7dmFyIHRlPXpbcS50b0xvd2VyQ2FzZSgpXTtpZighdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBz'@;
put 'dWl0ZSB0eXBlIik7dmFyIG9lPVYoZWUsITEsdGUua2V5LHRlLml2KTtyZXR1cm4gVShxLG9lLmtleSxvZS5pdil9fSwzMjg4OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPXouYWxsb2MoMTYsMCk7ZnVuY3Rpb24gSShFKXt2YXIgaj16LmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4g'@;
put 'ai53cml0ZVVJbnQzMkJFKEVbMF0+Pj4wLDApLGoud3JpdGVVSW50MzJCRShFWzFdPj4+MCw0KSxqLndyaXRlVUludDMyQkUoRVsyXT4+PjAsOCksai53cml0ZVVJbnQzMkJFKEVbM10+Pj4wLDEyKSxqfWZ1bmN0aW9uIGsoRSl7dGhpcy5oPUUsdGhpcy5zdGF0ZT16LmFsbG9jKDE2LDApLHRo'@;
put 'aXMuY2FjaGU9ei5hbGxvY1Vuc2FmZSgwKX1rLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihFKXtmb3IodmFyIGo9LTE7KytqPEUubGVuZ3RoOyl0aGlzLnN0YXRlW2pdXj1FW2pdO3RoaXMuX211bHRpcGx5KCl9LGsucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgRSxq'@;
put 'LFYsQj1bKEU9dGhpcy5oKS5yZWFkVUludDMyQkUoMCksRS5yZWFkVUludDMyQkUoNCksRS5yZWFkVUludDMyQkUoOCksRS5yZWFkVUludDMyQkUoMTIpXSxZPVswLDAsMCwwXSxYPS0xOysrWDwxMjg7KXtmb3IodGhpcy5zdGF0ZVt+fihYLzgpXSYxPDw3LVglOCYmKFlbMF1ePUJbMF0sWVsx'@;
put 'XV49QlsxXSxZWzJdXj1CWzJdLFlbM11ePUJbM10pLFY9MCE9KDEmQlszXSksaj0zO2o+MDtqLS0pQltqXT1CW2pdPj4+MXwoMSZCW2otMV0pPDwzMTtCWzBdPUJbMF0+Pj4xLFYmJihCWzBdPS01MjAwOTM2OTZeQlswXSl9dGhpcy5zdGF0ZT1JKFkpfSxrLnByb3RvdHlwZS51cGRhdGU9ZnVu'@;
put 'Y3Rpb24oRSl7dmFyIGo7Zm9yKHRoaXMuY2FjaGU9ei5jb25jYXQoW3RoaXMuY2FjaGUsRV0pO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspaj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChqKX0say5wcm90b3R5cGUuZmlu'@;
put 'YWw9ZnVuY3Rpb24oRSxqKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goei5jb25jYXQoW3RoaXMuY2FjaGUsS10sMTYpKSx0aGlzLmdoYXNoKEkoWzAsRSwwLGpdKSksdGhpcy5zdGF0ZX0sTS5leHBvcnRzPWt9LDY4NTpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKE8pe2Zv'@;
put 'cih2YXIgUix6PU8ubGVuZ3RoO3otLTspe2lmKDI1NSE9PShSPU8ucmVhZFVJbnQ4KHopKSl7UisrLE8ud3JpdGVVSW50OChSLHopO2JyZWFrfU8ud3JpdGVVSW50OCgwLHopfX19LDUyOTI6KE0sTyxSKT0+e3ZhciB6PVIoNzI5NSk7Ty5lbmNyeXB0PWZ1bmN0aW9uKEssSSl7dmFyIGs9eihJ'@;
put 'LEsuX3ByZXYpO3JldHVybiBLLl9wcmV2PUsuX2NpcGhlci5lbmNyeXB0QmxvY2soayksSy5fcHJldn0sTy5kZWNyeXB0PWZ1bmN0aW9uKEssSSl7dmFyIGs9Sy5fcHJldjtLLl9wcmV2PUk7dmFyIEU9Sy5fY2lwaGVyLmRlY3J5cHRCbG9jayhJKTtyZXR1cm4geihFLGspfX0sNjMxMTooTSxP'@;
put 'LFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDcyOTUpO2Z1bmN0aW9uIEkoayxFLGope3ZhciBWPUUubGVuZ3RoLEI9SyhFLGsuX2NhY2hlKTtyZXR1cm4gay5fY2FjaGU9ay5fY2FjaGUuc2xpY2UoViksay5fcHJldj16LmNvbmNhdChbay5fcHJldixqP0U6Ql0pLEJ9Ty5lbmNyeXB0'@;
put 'PWZ1bmN0aW9uKGssRSxqKXtmb3IodmFyIFYsQj16LmFsbG9jVW5zYWZlKDApO0UubGVuZ3RoOyl7aWYoMD09PWsuX2NhY2hlLmxlbmd0aCYmKGsuX2NhY2hlPWsuX2NpcGhlci5lbmNyeXB0QmxvY2soay5fcHJldiksay5fcHJldj16LmFsbG9jVW5zYWZlKDApKSwhKGsuX2NhY2hlLmxlbmd0'@;
put 'aDw9RS5sZW5ndGgpKXtCPXouY29uY2F0KFtCLEkoayxFLGopXSk7YnJlYWt9Qj16LmNvbmNhdChbQixJKGssRS5zbGljZSgwLFY9ay5fY2FjaGUubGVuZ3RoKSxqKV0pLEU9RS5zbGljZShWKX1yZXR1cm4gQn19LDE1MTA6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9u'@;
put 'IEsoayxFLGope2Zvcih2YXIgVixCLFk9LTEsWD0wOysrWTw4OylWPUUmMTw8Ny1ZPzEyODowLFgrPSgxMjgmKEI9ay5fY2lwaGVyLmVuY3J5cHRCbG9jayhrLl9wcmV2KVswXV5WKSk+PlklOCxrLl9wcmV2PUkoay5fcHJldixqP1Y6Qik7cmV0dXJuIFh9ZnVuY3Rpb24gSShrLEUpe3ZhciBq'@;
put 'PWsubGVuZ3RoLFY9LTEsQj16LmFsbG9jVW5zYWZlKGsubGVuZ3RoKTtmb3Ioaz16LmNvbmNhdChbayx6LmZyb20oW0VdKV0pOysrVjxqOylCW1ZdPWtbVl08PDF8a1tWKzFdPj43O3JldHVybiBCfU8uZW5jcnlwdD1mdW5jdGlvbihrLEUsail7Zm9yKHZhciBWPUUubGVuZ3RoLEI9ei5hbGxv'@;
put 'Y1Vuc2FmZShWKSxZPS0xOysrWTxWOylCW1ldPUsoayxFW1ldLGopO3JldHVybiBCfX0sMTk2NDooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSyhJLGssRSl7dmFyIGo9SS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJLl9wcmV2KVswXV5rO3JldHVybiBJLl9wcmV2PXou'@;
put 'Y29uY2F0KFtJLl9wcmV2LnNsaWNlKDEpLHouZnJvbShbRT9rOmpdKV0pLGp9Ty5lbmNyeXB0PWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9ay5sZW5ndGgsVj16LmFsbG9jVW5zYWZlKGopLEI9LTE7KytCPGo7KVZbQl09SyhJLGtbQl0sRSk7cmV0dXJuIFZ9fSw2MDA5OihNLE8sUik9Pnt2'@;
put 'YXIgej1SKDcyOTUpLEs9Uig5NTA5KS5CdWZmZXIsST1SKDY4NSk7ZnVuY3Rpb24gayhFKXt2YXIgaj1FLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KEUuX3ByZXYpO3JldHVybiBJKEUuX3ByZXYpLGp9Ty5lbmNyeXB0PWZ1bmN0aW9uKEUsail7dmFyIFY9TWF0aC5jZWlsKGoubGVuZ3RoLzE2'@;
put 'KSxCPUUuX2NhY2hlLmxlbmd0aDtFLl9jYWNoZT1LLmNvbmNhdChbRS5fY2FjaGUsSy5hbGxvY1Vuc2FmZSgxNipWKV0pO2Zvcih2YXIgWT0wO1k8VjtZKyspe3ZhciBYPWsoRSksVT1CKzE2Klk7RS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzBdLFUrMCksRS5fY2FjaGUud3JpdGVVSW50MzJC'@;
put 'RShYWzFdLFUrNCksRS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzJdLFUrOCksRS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzNdLFUrMTIpfXZhciBxPUUuX2NhY2hlLnNsaWNlKDAsai5sZW5ndGgpO3JldHVybiBFLl9jYWNoZT1FLl9jYWNoZS5zbGljZShqLmxlbmd0aCkseihqLHEpfX0sMTA4'@;
put 'NDooTSxPKT0+e08uZW5jcnlwdD1mdW5jdGlvbihSLHope3JldHVybiBSLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHopfSxPLmRlY3J5cHQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4gUi5fY2lwaGVyLmRlY3J5cHRCbG9jayh6KX19LDQ1OihNLE8sUik9Pnt2YXIgej17RUNCOlIoMTA4NCksQ0JDOlIo'@;
put 'NTI5MiksQ0ZCOlIoNjMxMSksQ0ZCODpSKDE5NjQpLENGQjE6UigxNTEwKSxPRkI6Uig4ODYxKSxDVFI6Uig2MDA5KSxHQ006Uig2MDA5KX0sSz1SKDQ5NDYpO2Zvcih2YXIgSSBpbiBLKUtbSV0ubW9kdWxlPXpbS1tJXS5tb2RlXTtNLmV4cG9ydHM9S30sODg2MTooTSxPLFIpPT57dmFyIHo9'@;
put 'Uig4NzY0KS5CdWZmZXIsSz1SKDcyOTUpO2Z1bmN0aW9uIEkoayl7cmV0dXJuIGsuX3ByZXY9ay5fY2lwaGVyLmVuY3J5cHRCbG9jayhrLl9wcmV2KSxrLl9wcmV2fU8uZW5jcnlwdD1mdW5jdGlvbihrLEUpe2Zvcig7ay5fY2FjaGUubGVuZ3RoPEUubGVuZ3RoOylrLl9jYWNoZT16LmNvbmNh'@;
put 'dChbay5fY2FjaGUsSShrKV0pO3ZhciBqPWsuX2NhY2hlLnNsaWNlKDAsRS5sZW5ndGgpO3JldHVybiBrLl9jYWNoZT1rLl9jYWNoZS5zbGljZShFLmxlbmd0aCksSyhFLGopfX0sNTk2OTooTSxPLFIpPT57dmFyIHo9Uig0NDk3KSxLPVIoOTUwOSkuQnVmZmVyLEk9UigxMDI3KTtmdW5jdGlv'@;
put 'biBrKEUsaixWLEIpe0kuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IHouQUVTKGopLHRoaXMuX3ByZXY9Sy5mcm9tKFYpLHRoaXMuX2NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Sy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PUIsdGhpcy5fbW9kZT1FfVIo'@;
put 'NTcxNykoayxJKSxrLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxFLHRoaXMuX2RlY3J5cHQpfSxrLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sTS5leHBvcnRzPWt9LDM2MTQ6KE0s'@;
put 'TyxSKT0+e3ZhciB6PVIoNzY2NyksSz1SKDQ2OTYpLEk9Uig0NSksaz1SKDk3MTUpLEU9UigzMDQ4KTtmdW5jdGlvbiBqKEIsWSxYKXtpZihCPUIudG9Mb3dlckNhc2UoKSxJW0JdKXJldHVybiBLLmNyZWF0ZUNpcGhlcml2KEIsWSxYKTtpZihrW0JdKXJldHVybiBuZXcgeih7a2V5OlksaXY6'@;
put 'WCxtb2RlOkJ9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1mdW5jdGlvbiBWKEIsWSxYKXtpZihCPUIudG9Mb3dlckNhc2UoKSxJW0JdKXJldHVybiBLLmNyZWF0ZURlY2lwaGVyaXYoQixZLFgpO2lmKGtbQl0pcmV0dXJuIG5ldyB6KHtrZXk6WSxpdjpYLG1v'@;
put 'ZGU6QixkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9Ty5jcmVhdGVDaXBoZXI9Ty5DaXBoZXI9ZnVuY3Rpb24oQixZKXt2YXIgWCxVO2lmKEI9Qi50b0xvd2VyQ2FzZSgpLElbQl0pWD1JW0JdLmtleSxVPUlbQl0uaXY7ZWxzZXtpZigha1tC'@;
put 'XSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtYPTgqa1tCXS5rZXksVT1rW0JdLml2fXZhciBxPUUoWSwhMSxYLFUpO3JldHVybiBqKEIscS5rZXkscS5pdil9LE8uY3JlYXRlQ2lwaGVyaXY9Ty5DaXBoZXJpdj1qLE8uY3JlYXRlRGVjaXBoZXI9Ty5EZWNpcGhl'@;
put 'cj1mdW5jdGlvbihCLFkpe3ZhciBYLFU7aWYoQj1CLnRvTG93ZXJDYXNlKCksSVtCXSlYPUlbQl0ua2V5LFU9SVtCXS5pdjtlbHNle2lmKCFrW0JdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1g9OCprW0JdLmtleSxVPWtbQl0uaXZ9dmFyIHE9RShZLCExLFgs'@;
put 'VSk7cmV0dXJuIFYoQixxLmtleSxxLml2KX0sTy5jcmVhdGVEZWNpcGhlcml2PU8uRGVjaXBoZXJpdj1WLE8ubGlzdENpcGhlcnM9Ty5nZXRDaXBoZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKGspLmNvbmNhdChLLmdldENpcGhlcnMoKSl9fSw3NjY3OihNLE8sUik9Pnt2YXIg'@;
put 'ej1SKDEwMjcpLEs9Uig1MjUxKSxJPVIoNTcxNyksaz1SKDk1MDkpLkJ1ZmZlcixFPXsiZGVzLWVkZTMtY2JjIjpLLkNCQy5pbnN0YW50aWF0ZShLLkVERSksImRlcy1lZGUzIjpLLkVERSwiZGVzLWVkZS1jYmMiOksuQ0JDLmluc3RhbnRpYXRlKEsuRURFKSwiZGVzLWVkZSI6Sy5FREUsImRl'@;
put 'cy1jYmMiOksuQ0JDLmluc3RhbnRpYXRlKEsuREVTKSwiZGVzLWVjYiI6Sy5ERVN9O2Z1bmN0aW9uIGooVil7ei5jYWxsKHRoaXMpO3ZhciBCLFk9Vi5tb2RlLnRvTG93ZXJDYXNlKCksWD1FW1ldO0I9Vi5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIFU9Vi5rZXk7ay5pc0J1ZmZl'@;
put 'cihVKXx8KFU9ay5mcm9tKFUpKSwiZGVzLWVkZSIhPT1ZJiYiZGVzLWVkZS1jYmMiIT09WXx8KFU9ay5jb25jYXQoW1UsVS5zbGljZSgwLDgpXSkpO3ZhciBxPVYuaXY7ay5pc0J1ZmZlcihxKXx8KHE9ay5mcm9tKHEpKSx0aGlzLl9kZXM9WC5jcmVhdGUoe2tleTpVLGl2OnEsdHlwZTpCfSl9'@;
put 'RS5kZXM9RVsiZGVzLWNiYyJdLEUuZGVzMz1FWyJkZXMtZWRlMy1jYmMiXSxNLmV4cG9ydHM9aixJKGoseiksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXtyZXR1cm4gay5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoVikpfSxqLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gay5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDk3MTU6KE0sTyk9PntPWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LE9bImRlcy1jYmMiXT1PLmRlcz17a2V5OjgsaXY6OH0sT1siZGVzLWVkZTMtY2JjIl09Ty5kZXMzPXtrZXk6MjQsaXY6OH0sT1siZGVzLWVkZTMiXT17a2V5OjI0LGl2'@;
put 'OjB9LE9bImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxPWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMzY2MzooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDM1NTApLEk9UigxNzk4KTtmdW5jdGlvbiBrKGope3ZhciBWLEI9ai5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtk'@;
put 'b3tWPW5ldyBLKEkoQikpfXdoaWxlKFYuY21wKGoubW9kdWx1cyk+PTB8fCFWLnVtb2Qoai5wcmltZTEpfHwhVi51bW9kKGoucHJpbWUyKSk7cmV0dXJuIFZ9ZnVuY3Rpb24gRShqLFYpe3ZhciBjZSxHLEI9e2JsaW5kZXI6KEc9ayhjZT1WKSkudG9SZWQoSy5tb250KGNlLm1vZHVsdXMpKS5y'@;
put 'ZWRQb3cobmV3IEsoY2UucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOkcuaW52bShjZS5tb2R1bHVzKX0sWT1WLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFg9bmV3IEsoaikubXVsKEIuYmxpbmRlcikudW1vZChWLm1vZHVsdXMpLFU9WC50b1JlZChLLm1vbnQoVi5wcmltZTEp'@;
put 'KSxxPVgudG9SZWQoSy5tb250KFYucHJpbWUyKSksZWU9Vi5jb2VmZmljaWVudCx0ZT1WLnByaW1lMSxvZT1WLnByaW1lMixzZT1VLnJlZFBvdyhWLmV4cG9uZW50MSkuZnJvbVJlZCgpLGhlPXEucmVkUG93KFYuZXhwb25lbnQyKS5mcm9tUmVkKCksdWU9c2UuaXN1YihoZSkuaW11bChlZSku'@;
put 'dW1vZCh0ZSkuaW11bChvZSk7cmV0dXJuIGhlLmlhZGQodWUpLmltdWwoQi51bmJsaW5kZXIpLnVtb2QoVi5tb2R1bHVzKS50b0FycmF5TGlrZSh6LCJiZSIsWSl9RS5nZXRyPWssTS5leHBvcnRzPUV9LDYwNDI6KE0sTyxSKT0+e00uZXhwb3J0cz1SKDUyMDcpfSw0NzQzOihNLE8sUik9Pnt2'@;
put 'YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoMzQ4MiksST1SKDg0NzMpLGs9Uig1NzE3KSxFPVIoMjk1Nyksaj1SKDc3NTMpLFY9Uig1MjA3KTtmdW5jdGlvbiBCKHEpe0kuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZWU9VltxXTtpZighZWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3Nh'@;
put 'Z2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9ZWUuaGFzaCx0aGlzLl9oYXNoPUsoZWUuaGFzaCksdGhpcy5fdGFnPWVlLmlkLHRoaXMuX3NpZ25UeXBlPWVlLnNpZ259ZnVuY3Rpb24gWShxKXtJLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGVlPVZbcV07aWYoIWVlKXRocm93IG5ldyBFcnJv'@;
put 'cigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9SyhlZS5oYXNoKSx0aGlzLl90YWc9ZWUuaWQsdGhpcy5fc2lnblR5cGU9ZWUuc2lnbn1mdW5jdGlvbiBYKHEpe3JldHVybiBuZXcgQihxKX1mdW5jdGlvbiBVKHEpe3JldHVybiBuZXcgWShxKX1PYmplY3Qua2V5cyhWKS5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKHEpe1ZbcV0uaWQ9ei5mcm9tKFZbcV0uaWQsImhleCIpLFZbcS50b0xvd2VyQ2FzZSgpXT1WW3FdfSksayhCLEkuV3JpdGFibGUpLEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihxLGVlLHRlKXt0aGlzLl9oYXNoLnVwZGF0ZShxKSx0ZSgpfSxCLnByb3RvdHlw'@;
put 'ZS51cGRhdGU9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBxJiYocT16LmZyb20ocSxlZSkpLHRoaXMuX2hhc2gudXBkYXRlKHEpLHRoaXN9LEIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24ocSxlZSl7dGhpcy5lbmQoKTt2YXIgdGU9dGhpcy5faGFzaC5kaWdlc3QoKSxv'@;
put 'ZT1FKHRlLHEsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gZWU/b2UudG9TdHJpbmcoZWUpOm9lfSxrKFksSS5Xcml0YWJsZSksWS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHEsZWUsdGUpe3RoaXMuX2hhc2gudXBkYXRlKHEpLHRlKCl9LFkucHJv'@;
put 'dG90eXBlLnVwZGF0ZT1mdW5jdGlvbihxLGVlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHEmJihxPXouZnJvbShxLGVlKSksdGhpcy5faGFzaC51cGRhdGUocSksdGhpc30sWS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHEsZWUsdGUpeyJzdHJpbmciPT10eXBlb2YgZWUmJihlZT16LmZy'@;
put 'b20oZWUsdGUpKSx0aGlzLmVuZCgpO3ZhciBvZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBqKGVlLG9lLHEsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sTS5leHBvcnRzPXtTaWduOlgsVmVyaWZ5OlUsY3JlYXRlU2lnbjpYLGNyZWF0ZVZlcmlmeTpVfX0sMjk1NzooTSxPLFIpPT57'@;
put 'dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDgzNTUpLEk9UigzNjYzKSxrPVIoNjk0OCkuZWMsRT1SKDM1NTApLGo9Uig5ODApLFY9UigxMzA4KTtmdW5jdGlvbiBCKHEsZWUsdGUsb2Upe2lmKChxPXouZnJvbShxLnRvQXJyYXkoKSkpLmxlbmd0aDxlZS5ieXRlTGVuZ3RoKCkpe3ZhciBzZT16'@;
put 'LmFsbG9jKGVlLmJ5dGVMZW5ndGgoKS1xLmxlbmd0aCk7cT16LmNvbmNhdChbc2UscV0pfXZhciBoZT10ZS5sZW5ndGgsdWU9ZnVuY3Rpb24oYixEKXtiPShiPVkoYixEKSkubW9kKEQpO3ZhciBIPXouZnJvbShiLnRvQXJyYXkoKSk7aWYoSC5sZW5ndGg8RC5ieXRlTGVuZ3RoKCkpe3ZhciBO'@;
put 'PXouYWxsb2MoRC5ieXRlTGVuZ3RoKCktSC5sZW5ndGgpO0g9ei5jb25jYXQoW04sSF0pfXJldHVybiBIfSh0ZSxlZSksY2U9ei5hbGxvYyhoZSk7Y2UuZmlsbCgxKTt2YXIgRz16LmFsbG9jKGhlKTtyZXR1cm4gRz1LKG9lLEcpLnVwZGF0ZShjZSkudXBkYXRlKHouZnJvbShbMF0pKS51cGRh'@;
put 'dGUocSkudXBkYXRlKHVlKS5kaWdlc3QoKSxjZT1LKG9lLEcpLnVwZGF0ZShjZSkuZGlnZXN0KCkse2s6Rz1LKG9lLEcpLnVwZGF0ZShjZSkudXBkYXRlKHouZnJvbShbMV0pKS51cGRhdGUocSkudXBkYXRlKHVlKS5kaWdlc3QoKSx2OmNlPUsob2UsRykudXBkYXRlKGNlKS5kaWdlc3QoKX19'@;
put 'ZnVuY3Rpb24gWShxLGVlKXt2YXIgdGU9bmV3IEUocSksb2U9KHEubGVuZ3RoPDwzKS1lZS5iaXRMZW5ndGgoKTtyZXR1cm4gb2U+MCYmdGUuaXNocm4ob2UpLHRlfWZ1bmN0aW9uIFgocSxlZSx0ZSl7dmFyIG9lLHNlO2Rve2ZvcihvZT16LmFsbG9jKDApOzgqb2UubGVuZ3RoPHEuYml0TGVu'@;
put 'Z3RoKCk7KWVlLnY9Syh0ZSxlZS5rKS51cGRhdGUoZWUudikuZGlnZXN0KCksb2U9ei5jb25jYXQoW29lLGVlLnZdKTtzZT1ZKG9lLHEpLGVlLms9Syh0ZSxlZS5rKS51cGRhdGUoZWUudikudXBkYXRlKHouZnJvbShbMF0pKS5kaWdlc3QoKSxlZS52PUsodGUsZWUuaykudXBkYXRlKGVlLnYp'@;
put 'LmRpZ2VzdCgpfXdoaWxlKC0xIT09c2UuY21wKHEpKTtyZXR1cm4gc2V9ZnVuY3Rpb24gVShxLGVlLHRlLG9lKXtyZXR1cm4gcS50b1JlZChFLm1vbnQodGUpKS5yZWRQb3coZWUpLmZyb21SZWQoKS5tb2Qob2UpfU0uZXhwb3J0cz1mdW5jdGlvbihxLGVlLHRlLG9lLHNlKXt2YXIgaGU9aihl'@;
put 'ZSk7aWYoaGUuY3VydmUpe2lmKCJlY2RzYSIhPT1vZSYmImVjZHNhL3JzYSIhPT1vZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oYixEKXt2YXIgSD1WW0QuY3VydmUuam9pbigiLiIpXTtpZighSCl0aHJvdyBuZXcgRXJyb3IoInVu'@;
put 'a25vd24gY3VydmUgIitELmN1cnZlLmpvaW4oIi4iKSk7dmFyIGc9bmV3IGsoSCkua2V5RnJvbVByaXZhdGUoRC5wcml2YXRlS2V5KS5zaWduKGIpO3JldHVybiB6LmZyb20oZy50b0RFUigpKX0ocSxoZSl9aWYoImRzYSI9PT1oZS50eXBlKXtpZigiZHNhIiE9PW9lKXRocm93IG5ldyBFcnJv'@;
put 'cigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihiLEQsSCl7Zm9yKHZhciBOLGc9RC5wYXJhbXMucHJpdl9rZXksQz1ELnBhcmFtcy5wLFM9RC5wYXJhbXMucSx2PUQucGFyYW1zLmcscD1uZXcgRSgwKSx3PVkoYixTKS5tb2QoUyksSj0hMSxuZT1CKGcsUyxiLEgp'@;
put 'OyExPT09SjspcD1VKHYsTj1YKFMsbmUsSCksQyxTKSwwPT09KEo9Ti5pbnZtKFMpLmltdWwody5hZGQoZy5tdWwocCkpKS5tb2QoUykpLmNtcG4oMCkmJihKPSExLHA9bmV3IEUoMCkpO3JldHVybiBmdW5jdGlvbihkZSxmZSl7ZGU9ZGUudG9BcnJheSgpLGZlPWZlLnRvQXJyYXkoKSwxMjgm'@;
put 'ZGVbMF0mJihkZT1bMF0uY29uY2F0KGRlKSksMTI4JmZlWzBdJiYoZmU9WzBdLmNvbmNhdChmZSkpO3ZhciBMZT1bNDgsZGUubGVuZ3RoK2ZlLmxlbmd0aCs0LDIsZGUubGVuZ3RoXTtyZXR1cm4gTGU9TGUuY29uY2F0KGRlLFsyLGZlLmxlbmd0aF0sZmUpLHouZnJvbShMZSl9KHAsSil9KHEs'@;
put 'aGUsdGUpfWlmKCJyc2EiIT09b2UmJiJlY2RzYS9yc2EiIT09b2UpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cT16LmNvbmNhdChbc2UscV0pO2Zvcih2YXIgdWU9aGUubW9kdWx1cy5ieXRlTGVuZ3RoKCksY2U9WzAsMV07cS5sZW5ndGgrY2UubGVuZ3RoKzE8'@;
put 'dWU7KWNlLnB1c2goMjU1KTtjZS5wdXNoKDApO2Zvcih2YXIgRz0tMTsrK0c8cS5sZW5ndGg7KWNlLnB1c2gocVtHXSk7cmV0dXJuIEkoY2UsaGUpfSxNLmV4cG9ydHMuZ2V0S2V5PUIsTS5leHBvcnRzLm1ha2VLZXk9WH0sNzc1MzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1S'@;
put 'KDM1NTApLEk9Uig2OTQ4KS5lYyxrPVIoOTgwKSxFPVIoMTMwOCk7ZnVuY3Rpb24gaihWLEIpe2lmKFYuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoVi5jbXAoQik+PUIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfU0uZXhwb3J0cz1mdW5jdGlv'@;
put 'bihWLEIsWSxYLFUpe3ZhciBxPWsoWSk7aWYoImVjIj09PXEudHlwZSl7aWYoImVjZHNhIiE9PVgmJiJlY2RzYS9yc2EiIT09WCl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihjZSxHLGIpe3ZhciBEPUVbYi5kYXRhLmFsZ29yaXRobS5j'@;
put 'dXJ2ZS5qb2luKCIuIildO2lmKCFEKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK2IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IEkoRCkudmVyaWZ5KEcsY2UsYi5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShWLEIscSl9aWYoImRzYSI9'@;
put 'PT1xLnR5cGUpe2lmKCJkc2EiIT09WCl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihjZSxHLGIpe3ZhciBEPWIuZGF0YS5wLEg9Yi5kYXRhLnEsTj1iLmRhdGEuZyxnPWIuZGF0YS5wdWJfa2V5LEM9ay5zaWduYXR1cmUuZGVjb2RlKGNl'@;
put 'LCJkZXIiKSxTPUMucyx2PUMucjtqKFMsSCksaih2LEgpO3ZhciBwPUsubW9udChEKSx3PVMuaW52bShIKTtyZXR1cm4gMD09PU4udG9SZWQocCkucmVkUG93KG5ldyBLKEcpLm11bCh3KS5tb2QoSCkpLmZyb21SZWQoKS5tdWwoZy50b1JlZChwKS5yZWRQb3codi5tdWwodykubW9kKEgpKS5m'@;
put 'cm9tUmVkKCkpLm1vZChEKS5tb2QoSCkuY21wKHYpfShWLEIscSl9aWYoInJzYSIhPT1YJiYiZWNkc2EvcnNhIiE9PVgpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtCPXouY29uY2F0KFtVLEJdKTtmb3IodmFyIGVlPXEubW9kdWx1cy5ieXRlTGVuZ3RoKCksdGU9'@;
put 'WzFdLG9lPTA7Qi5sZW5ndGgrdGUubGVuZ3RoKzI8ZWU7KXRlLnB1c2goMjU1KSxvZSsrO3RlLnB1c2goMCk7Zm9yKHZhciBzZT0tMTsrK3NlPEIubGVuZ3RoOyl0ZS5wdXNoKEJbc2VdKTt0ZT16LmZyb20odGUpO3ZhciBoZT1LLm1vbnQocS5tb2R1bHVzKTtWPShWPW5ldyBLKFYpLnRvUmVk'@;
put 'KGhlKSkucmVkUG93KG5ldyBLKHEucHVibGljRXhwb25lbnQpKSxWPXouZnJvbShWLmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciB1ZT1vZTw4PzE6MDtmb3IoZWU9TWF0aC5taW4oVi5sZW5ndGgsdGUubGVuZ3RoKSxWLmxlbmd0aCE9PXRlLmxlbmd0aCYmKHVlPTEpLHNlPS0xOysrc2U8ZWU7'@;
put 'KXVlfD1WW3NlXV50ZVtzZV07cmV0dXJuIDA9PT11ZX19LDcyOTU6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihLLEkpe2Zvcih2YXIgaz1NYXRoLm1pbihLLmxlbmd0aCxJLmxlbmd0aCksRT1uZXcgeihrKSxqPTA7ajxrOysrailFW2pdPUtbal1e'@;
put 'SVtqXTtyZXR1cm4gRX19LDg3NjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpO2NvbnN0IEs9Uig5NzQyKSxJPVIoNjQ1KSxrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGls'@;
put 'Lmluc3BlY3QuY3VzdG9tIik6bnVsbDtPLkJ1ZmZlcj1WLE8uU2xvd0J1ZmZlcj1mdW5jdGlvbihNZSl7cmV0dXJuK01lIT1NZSYmKE1lPTApLFYuYWxsb2MoK01lKX0sTy5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCBFPTIxNDc0ODM2NDc7ZnVuY3Rpb24gaihNZSl7aWYoTWU+RSl0aHJv'@;
put 'dyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK01lKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTtjb25zdCBEZT1uZXcgVWludDhBcnJheShNZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihEZSxWLnByb3RvdHlwZSksRGV9ZnVuY3Rpb24gVihNZSxEZSx6ZSl7'@;
put 'aWYoIm51bWJlciI9PXR5cGVvZiBNZSl7aWYoInN0cmluZyI9PXR5cGVvZiBEZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gWChNZSl9cmV0dXJuIEIoTWUsRGUs'@;
put 'emUpfWZ1bmN0aW9uIEIoTWUsRGUsemUpe2lmKCJzdHJpbmciPT10eXBlb2YgTWUpcmV0dXJuIGZ1bmN0aW9uKE10LEh0KXtpZigic3RyaW5nIj09dHlwZW9mIEh0JiYiIiE9PUh0fHwoSHQ9InV0ZjgiKSwhVi5pc0VuY29kaW5nKEh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVu'@;
put 'Y29kaW5nOiAiK0h0KTtjb25zdCBQdD0wfHRlKE10LEh0KTtsZXQgb249aihQdCk7Y29uc3QgQ249b24ud3JpdGUoTXQsSHQpO3JldHVybiBDbiE9PVB0JiYob249b24uc2xpY2UoMCxDbikpLG9ufShNZSxEZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KE1lKSlyZXR1cm4gZnVuY3Rpb24oTXQp'@;
put 'e2lmKFRlKE10LFVpbnQ4QXJyYXkpKXtjb25zdCBIdD1uZXcgVWludDhBcnJheShNdCk7cmV0dXJuIHEoSHQuYnVmZmVyLEh0LmJ5dGVPZmZzZXQsSHQuYnl0ZUxlbmd0aCl9cmV0dXJuIFUoTXQpfShNZSk7aWYobnVsbD09TWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3Vt'@;
put 'ZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgTWUpO2lmKFRlKE1lLEFycmF5QnVmZmVyKXx8TWUmJlRlKE1lLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5'@;
put 'cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihUZShNZSxTaGFyZWRBcnJheUJ1ZmZlcil8fE1lJiZUZShNZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcShNZSxEZSx6ZSk7aWYoIm51bWJlciI9PXR5cGVvZiBNZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVl'@;
put 'IiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCBvdD1NZS52YWx1ZU9mJiZNZS52YWx1ZU9mKCk7aWYobnVsbCE9b3QmJm90IT09TWUpcmV0dXJuIFYuZnJvbShvdCxEZSx6ZSk7Y29uc3QgdXQ9ZnVuY3Rpb24oTXQpe2lm'@;
put 'KFYuaXNCdWZmZXIoTXQpKXtjb25zdCBIdD0wfGVlKE10Lmxlbmd0aCksUHQ9aihIdCk7cmV0dXJuIDA9PT1QdC5sZW5ndGh8fE10LmNvcHkoUHQsMCwwLEh0KSxQdH1yZXR1cm4gdm9pZCAwIT09TXQubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgTXQubGVuZ3RofHxxZShNdC5sZW5ndGgpP2oo'@;
put 'MCk6VShNdCk6IkJ1ZmZlciI9PT1NdC50eXBlJiZBcnJheS5pc0FycmF5KE10LmRhdGEpP1UoTXQuZGF0YSk6dm9pZCAwfShNZSk7aWYodXQpcmV0dXJuIHV0O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBNZVtTeW1i'@;
put 'b2wudG9QcmltaXRpdmVdKXJldHVybiBWLmZyb20oTWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksRGUsemUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXks'@;
put 'IG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIE1lKX1mdW5jdGlvbiBZKE1lKXtpZigibnVtYmVyIiE9dHlwZW9mIE1lKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoTWU8MCl0aHJvdyBu'@;
put 'ZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK01lKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBYKE1lKXtyZXR1cm4gWShNZSksaihNZTwwPzA6MHxlZShNZSkpfWZ1bmN0aW9uIFUoTWUpe2NvbnN0IERlPU1lLmxlbmd0aDwwPzA6MHxlZShNZS5sZW5ndGgp'@;
put 'LHplPWooRGUpO2ZvcihsZXQgb3Q9MDtvdDxEZTtvdCs9MSl6ZVtvdF09MjU1Jk1lW290XTtyZXR1cm4gemV9ZnVuY3Rpb24gcShNZSxEZSx6ZSl7aWYoRGU8MHx8TWUuYnl0ZUxlbmd0aDxEZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91'@;
put 'bmRzJyk7aWYoTWUuYnl0ZUxlbmd0aDxEZSsoemV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgb3Q7cmV0dXJuIG90PXZvaWQgMD09PURlJiZ2b2lkIDA9PT16ZT9uZXcgVWludDhBcnJheShNZSk6dm9pZCAwPT09'@;
put 'emU/bmV3IFVpbnQ4QXJyYXkoTWUsRGUpOm5ldyBVaW50OEFycmF5KE1lLERlLHplKSxPYmplY3Quc2V0UHJvdG90eXBlT2Yob3QsVi5wcm90b3R5cGUpLG90fWZ1bmN0aW9uIGVlKE1lKXtpZihNZT49RSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIg'@;
put 'bGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrRS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfE1lfWZ1bmN0aW9uIHRlKE1lLERlKXtpZihWLmlzQnVmZmVyKE1lKSlyZXR1cm4gTWUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhNZSl8fFRlKE1lLEFycmF5QnVmZmVy'@;
put 'KSlyZXR1cm4gTWUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIE1lKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBN'@;
put 'ZSk7Y29uc3QgemU9TWUubGVuZ3RoLG90PWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIW90JiYwPT09emUpcmV0dXJuIDA7bGV0IHV0PSExO2Zvcig7Oylzd2l0Y2goRGUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHplO2Nh'@;
put 'c2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFBlKE1lKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnplO2Nhc2UiaGV4IjpyZXR1cm4gemU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYmUoTWUpLmxlbmd0aDtk'@;
put 'ZWZhdWx0OmlmKHV0KXJldHVybiBvdD8tMTpQZShNZSkubGVuZ3RoO0RlPSgiIitEZSkudG9Mb3dlckNhc2UoKSx1dD0hMH19ZnVuY3Rpb24gb2UoTWUsRGUsemUpe2xldCBvdD0hMTtpZigodm9pZCAwPT09RGV8fERlPDApJiYoRGU9MCksRGU+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09emV8'@;
put 'fHplPnRoaXMubGVuZ3RoKSYmKHplPXRoaXMubGVuZ3RoKSx6ZTw9MCl8fCh6ZT4+Pj0wKTw9KERlPj4+PTApKXJldHVybiIiO2ZvcihNZXx8KE1lPSJ1dGY4Iik7Oylzd2l0Y2goTWUpe2Nhc2UiaGV4IjpyZXR1cm4gcCh0aGlzLERlLHplKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVy'@;
put 'biBnKHRoaXMsRGUsemUpO2Nhc2UiYXNjaWkiOnJldHVybiBTKHRoaXMsRGUsemUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHYodGhpcyxEZSx6ZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBOKHRoaXMsRGUsemUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxl'@;
put 'IjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdyh0aGlzLERlLHplKTtkZWZhdWx0OmlmKG90KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrTWUpO01lPShNZSsiIikudG9Mb3dlckNhc2UoKSxvdD0hMH19ZnVuY3Rpb24gc2UoTWUsRGUsemUpe2NvbnN0IG90PU1lW0Rl'@;
put 'XTtNZVtEZV09TWVbemVdLE1lW3plXT1vdH1mdW5jdGlvbiBoZShNZSxEZSx6ZSxvdCx1dCl7aWYoMD09PU1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHplPyhvdD16ZSx6ZT0wKTp6ZT4yMTQ3NDgzNjQ3P3plPTIxNDc0ODM2NDc6emU8LTIxNDc0ODM2NDgmJih6ZT0t'@;
put 'MjE0NzQ4MzY0OCkscWUoemU9K3plKSYmKHplPXV0PzA6TWUubGVuZ3RoLTEpLHplPDAmJih6ZT1NZS5sZW5ndGgremUpLHplPj1NZS5sZW5ndGgpe2lmKHV0KXJldHVybi0xO3plPU1lLmxlbmd0aC0xfWVsc2UgaWYoemU8MCl7aWYoIXV0KXJldHVybi0xO3plPTB9aWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiBEZSYmKERlPVYuZnJvbShEZSxvdCkpLFYuaXNCdWZmZXIoRGUpKXJldHVybiAwPT09RGUubGVuZ3RoPy0xOnVlKE1lLERlLHplLG90LHV0KTtpZigibnVtYmVyIj09dHlwZW9mIERlKXJldHVybiBEZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5p'@;
put 'bmRleE9mP3V0P1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChNZSxEZSx6ZSk6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChNZSxEZSx6ZSk6dWUoTWUsW0RlXSx6ZSxvdCx1dCk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBu'@;
put 'dW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdWUoTWUsRGUsemUsb3QsdXQpe2xldCBNdCxIdD0xLFB0PU1lLmxlbmd0aCxvbj1EZS5sZW5ndGg7aWYodm9pZCAwIT09b3QmJigidWNzMiI9PT0ob3Q9U3RyaW5nKG90KS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW90fHwidXRmMTZsZSI9'@;
put 'PT1vdHx8InV0Zi0xNmxlIj09PW90KSl7aWYoTWUubGVuZ3RoPDJ8fERlLmxlbmd0aDwyKXJldHVybi0xO0h0PTIsUHQvPTIsb24vPTIsemUvPTJ9ZnVuY3Rpb24gQ24oVXQsYm4pe3JldHVybiAxPT09SHQ/VXRbYm5dOlV0LnJlYWRVSW50MTZCRShibipIdCl9aWYodXQpe2xldCBVdD0tMTtm'@;
put 'b3IoTXQ9emU7TXQ8UHQ7TXQrKylpZihDbihNZSxNdCk9PT1DbihEZSwtMT09PVV0PzA6TXQtVXQpKXtpZigtMT09PVV0JiYoVXQ9TXQpLE10LVV0KzE9PT1vbilyZXR1cm4gVXQqSHR9ZWxzZS0xIT09VXQmJihNdC09TXQtVXQpLFV0PS0xfWVsc2UgZm9yKHplK29uPlB0JiYoemU9UHQtb24p'@;
put 'LE10PXplO010Pj0wO010LS0pe2xldCBVdD0hMDtmb3IobGV0IGJuPTA7Ym48b247Ym4rKylpZihDbihNZSxNdCtibikhPT1DbihEZSxibikpe1V0PSExO2JyZWFrfWlmKFV0KXJldHVybiBNdH1yZXR1cm4tMX1mdW5jdGlvbiBjZShNZSxEZSx6ZSxvdCl7emU9TnVtYmVyKHplKXx8MDtjb25z'@;
put 'dCB1dD1NZS5sZW5ndGgtemU7b3Q/KG90PU51bWJlcihvdCkpPnV0JiYob3Q9dXQpOm90PXV0O2NvbnN0IE10PURlLmxlbmd0aDtsZXQgSHQ7Zm9yKG90Pk10LzImJihvdD1NdC8yKSxIdD0wO0h0PG90OysrSHQpe2NvbnN0IFB0PXBhcnNlSW50KERlLnN1YnN0cigyKkh0LDIpLDE2KTtpZihx'@;
put 'ZShQdCkpcmV0dXJuIEh0O01lW3plK0h0XT1QdH1yZXR1cm4gSHR9ZnVuY3Rpb24gRyhNZSxEZSx6ZSxvdCl7cmV0dXJuIEFlKFBlKERlLE1lLmxlbmd0aC16ZSksTWUsemUsb3QpfWZ1bmN0aW9uIGIoTWUsRGUsemUsb3Qpe3JldHVybiBBZShmdW5jdGlvbih1dCl7Y29uc3QgTXQ9W107Zm9y'@;
put 'KGxldCBIdD0wO0h0PHV0Lmxlbmd0aDsrK0h0KU10LnB1c2goMjU1JnV0LmNoYXJDb2RlQXQoSHQpKTtyZXR1cm4gTXR9KERlKSxNZSx6ZSxvdCl9ZnVuY3Rpb24gRChNZSxEZSx6ZSxvdCl7cmV0dXJuIEFlKGJlKERlKSxNZSx6ZSxvdCl9ZnVuY3Rpb24gSChNZSxEZSx6ZSxvdCl7cmV0dXJu'@;
put 'IEFlKGZ1bmN0aW9uKHV0LE10KXtsZXQgSHQsUHQsb247Y29uc3QgQ249W107Zm9yKGxldCBVdD0wO1V0PHV0Lmxlbmd0aCYmISgoTXQtPTIpPDApOysrVXQpSHQ9dXQuY2hhckNvZGVBdChVdCksUHQ9SHQ+Pjgsb249SHQlMjU2LENuLnB1c2gob24pLENuLnB1c2goUHQpO3JldHVybiBDbn0o'@;
put 'RGUsTWUubGVuZ3RoLXplKSxNZSx6ZSxvdCl9ZnVuY3Rpb24gTihNZSxEZSx6ZSl7cmV0dXJuIEsuZnJvbUJ5dGVBcnJheSgwPT09RGUmJnplPT09TWUubGVuZ3RoP01lOk1lLnNsaWNlKERlLHplKSl9ZnVuY3Rpb24gZyhNZSxEZSx6ZSl7emU9TWF0aC5taW4oTWUubGVuZ3RoLHplKTtjb25z'@;
put 'dCBvdD1bXTtsZXQgdXQ9RGU7Zm9yKDt1dDx6ZTspe2NvbnN0IE10PU1lW3V0XTtsZXQgSHQ9bnVsbCxQdD1NdD4yMzk/NDpNdD4yMjM/MzpNdD4xOTE/MjoxO2lmKHV0K1B0PD16ZSl7bGV0IG9uLENuLFV0LGJuO3N3aXRjaChQdCl7Y2FzZSAxOk10PDEyOCYmKEh0PU10KTticmVhaztjYXNl'@;
put 'IDI6b249TWVbdXQrMV0sMTI4PT0oMTkyJm9uKSYmKGJuPSgzMSZNdCk8PDZ8NjMmb24sYm4+MTI3JiYoSHQ9Ym4pKTticmVhaztjYXNlIDM6b249TWVbdXQrMV0sQ249TWVbdXQrMl0sMTI4PT0oMTkyJm9uKSYmMTI4PT0oMTkyJkNuKSYmKGJuPSgxNSZNdCk8PDEyfCg2MyZvbik8PDZ8NjMm'@;
put 'Q24sYm4+MjA0NyYmKGJuPDU1Mjk2fHxibj41NzM0MykmJihIdD1ibikpO2JyZWFrO2Nhc2UgNDpvbj1NZVt1dCsxXSxDbj1NZVt1dCsyXSxVdD1NZVt1dCszXSwxMjg9PSgxOTImb24pJiYxMjg9PSgxOTImQ24pJiYxMjg9PSgxOTImVXQpJiYoYm49KDE1Jk10KTw8MTh8KDYzJm9uKTw8MTJ8'@;
put 'KDYzJkNuKTw8Nnw2MyZVdCxibj42NTUzNSYmYm48MTExNDExMiYmKEh0PWJuKSl9fW51bGw9PT1IdD8oSHQ9NjU1MzMsUHQ9MSk6SHQ+NjU1MzUmJihIdC09NjU1MzYsb3QucHVzaChIdD4+PjEwJjEwMjN8NTUyOTYpLEh0PTU2MzIwfDEwMjMmSHQpLG90LnB1c2goSHQpLHV0Kz1QdH1yZXR1'@;
put 'cm4gZnVuY3Rpb24oTXQpe2NvbnN0IEh0PU10Lmxlbmd0aDtpZihIdDw9QylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsTXQpO2xldCBQdD0iIixvbj0wO2Zvcig7b248SHQ7KVB0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxNdC5zbGljZShvbixv'@;
put 'bis9QykpO3JldHVybiBQdH0ob3QpfU8ua01heExlbmd0aD1FLChWLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7Y29uc3QgTWU9bmV3IFVpbnQ4QXJyYXkoMSksRGU9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoRGUs'@;
put 'VWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihNZSxEZSksNDI9PT1NZS5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpfHx2b2lkIDA9PT16fHwiZnVuY3Rpb24iIT10eXBlb2Ygei5lcnJvcnx8ei5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5'@;
put 'IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJh'@;
put 'YmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKFYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihWLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0'@;
put 'aGlzLmJ5dGVPZmZzZXR9fSksVi5wb29sU2l6ZT04MTkyLFYuZnJvbT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIEIoTWUsRGUsemUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoVi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihWLFVpbnQ4'@;
put 'QXJyYXkpLFYuYWxsb2M9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiB1dD1EZSxNdD16ZSxZKG90PU1lKSxvdDw9MD9qKG90KTp2b2lkIDAhPT11dD8ic3RyaW5nIj09dHlwZW9mIE10P2oob3QpLmZpbGwodXQsTXQpOmoob3QpLmZpbGwodXQpOmoob3QpO3ZhciBvdCx1dCxNdH0sVi5hbGxv'@;
put 'Y1Vuc2FmZT1mdW5jdGlvbihNZSl7cmV0dXJuIFgoTWUpfSxWLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihNZSl7cmV0dXJuIFgoTWUpfSxWLmlzQnVmZmVyPWZ1bmN0aW9uKE1lKXtyZXR1cm4gbnVsbCE9TWUmJiEwPT09TWUuX2lzQnVmZmVyJiZNZSE9PVYucHJvdG90eXBlfSxWLmNvbXBh'@;
put 'cmU9ZnVuY3Rpb24oTWUsRGUpe2lmKFRlKE1lLFVpbnQ4QXJyYXkpJiYoTWU9Vi5mcm9tKE1lLE1lLm9mZnNldCxNZS5ieXRlTGVuZ3RoKSksVGUoRGUsVWludDhBcnJheSkmJihEZT1WLmZyb20oRGUsRGUub2Zmc2V0LERlLmJ5dGVMZW5ndGgpKSwhVi5pc0J1ZmZlcihNZSl8fCFWLmlzQnVm'@;
put 'ZmVyKERlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihNZT09PURlKXJldHVybiAwO2xldCB6ZT1NZS5sZW5ndGgsb3Q9RGUubGVuZ3RoO2ZvcihsZXQgdXQ9MCxN'@;
put 'dD1NYXRoLm1pbih6ZSxvdCk7dXQ8TXQ7Kyt1dClpZihNZVt1dF0hPT1EZVt1dF0pe3plPU1lW3V0XSxvdD1EZVt1dF07YnJlYWt9cmV0dXJuIHplPG90Py0xOm90PHplPzE6MH0sVi5pc0VuY29kaW5nPWZ1bmN0aW9uKE1lKXtzd2l0Y2goU3RyaW5nKE1lKS50b0xvd2VyQ2FzZSgpKXtjYXNl'@;
put 'ImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFYuY29u'@;
put 'Y2F0PWZ1bmN0aW9uKE1lLERlKXtpZighQXJyYXkuaXNBcnJheShNZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1NZS5sZW5ndGgpcmV0dXJuIFYuYWxsb2MoMCk7bGV0IHplO2lmKHZvaWQgMD09PURl'@;
put 'KWZvcihEZT0wLHplPTA7emU8TWUubGVuZ3RoOysremUpRGUrPU1lW3plXS5sZW5ndGg7Y29uc3Qgb3Q9Vi5hbGxvY1Vuc2FmZShEZSk7bGV0IHV0PTA7Zm9yKHplPTA7emU8TWUubGVuZ3RoOysremUpe2xldCBNdD1NZVt6ZV07aWYoVGUoTXQsVWludDhBcnJheSkpdXQrTXQubGVuZ3RoPm90'@;
put 'Lmxlbmd0aD8oVi5pc0J1ZmZlcihNdCl8fChNdD1WLmZyb20oTXQpKSxNdC5jb3B5KG90LHV0KSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwob3QsTXQsdXQpO2Vsc2V7aWYoIVYuaXNCdWZmZXIoTXQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJl'@;
put 'IGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtNdC5jb3B5KG90LHV0KX11dCs9TXQubGVuZ3RofXJldHVybiBvdH0sVi5ieXRlTGVuZ3RoPXRlLFYucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxWLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlzLmxlbmd0aDtpZihNZSUyIT0w'@;
put 'KXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2ZvcihsZXQgRGU9MDtEZTxNZTtEZSs9MilzZSh0aGlzLERlLERlKzEpO3JldHVybiB0aGlzfSxWLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlz'@;
put 'Lmxlbmd0aDtpZihNZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2ZvcihsZXQgRGU9MDtEZTxNZTtEZSs9NClzZSh0aGlzLERlLERlKzMpLHNlKHRoaXMsRGUrMSxEZSsyKTtyZXR1cm4gdGhpc30sVi5wcm90'@;
put 'b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7Y29uc3QgTWU9dGhpcy5sZW5ndGg7aWYoTWUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IobGV0IERlPTA7RGU8TWU7RGUrPTgpc2UodGhpcyxEZSxEZSs3KSxz'@;
put 'ZSh0aGlzLERlKzEsRGUrNiksc2UodGhpcyxEZSsyLERlKzUpLHNlKHRoaXMsRGUrMyxEZSs0KTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9Vi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PU1lPyIi'@;
put 'OjA9PT1hcmd1bWVudHMubGVuZ3RoP2codGhpcywwLE1lKTpvZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihNZSl7aWYoIVYuaXNCdWZmZXIoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1'@;
put 'cm4gdGhpcz09PU1lfHwwPT09Vi5jb21wYXJlKHRoaXMsTWUpfSxWLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7bGV0IE1lPSIiO2NvbnN0IERlPU8uSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIE1lPXRoaXMudG9TdHJpbmcoImhleCIsMCxEZSkucmVwbGFjZSgvKC57Mn0pL2csIiQx'@;
put 'ICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5EZSYmKE1lKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK01lKyI+In0sayYmKFYucHJvdG90eXBlW2tdPVYucHJvdG90eXBlLmluc3BlY3QpLFYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oTWUsRGUsemUsb3QsdXQpe2lmKFRlKE1lLFVpbnQ4QXJyYXkp'@;
put 'JiYoTWU9Vi5mcm9tKE1lLE1lLm9mZnNldCxNZS5ieXRlTGVuZ3RoKSksIVYuaXNCdWZmZXIoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9m'@;
put 'IE1lKTtpZih2b2lkIDA9PT1EZSYmKERlPTApLHZvaWQgMD09PXplJiYoemU9TWU/TWUubGVuZ3RoOjApLHZvaWQgMD09PW90JiYob3Q9MCksdm9pZCAwPT09dXQmJih1dD10aGlzLmxlbmd0aCksRGU8MHx8emU+TWUubGVuZ3RofHxvdDwwfHx1dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFu'@;
put 'Z2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYob3Q+PXV0JiZEZT49emUpcmV0dXJuIDA7aWYob3Q+PXV0KXJldHVybi0xO2lmKERlPj16ZSlyZXR1cm4gMTtpZih0aGlzPT09TWUpcmV0dXJuIDA7bGV0IE10PSh1dD4+Pj0wKS0ob3Q+Pj49MCksSHQ9KHplPj4+PTApLShEZT4+Pj0w'@;
put 'KTtjb25zdCBQdD1NYXRoLm1pbihNdCxIdCksb249dGhpcy5zbGljZShvdCx1dCksQ249TWUuc2xpY2UoRGUsemUpO2ZvcihsZXQgVXQ9MDtVdDxQdDsrK1V0KWlmKG9uW1V0XSE9PUNuW1V0XSl7TXQ9b25bVXRdLEh0PUNuW1V0XTticmVha31yZXR1cm4gTXQ8SHQ/LTE6SHQ8TXQ/MTowfSxW'@;
put 'LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoTWUsRGUsemUpfSxWLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gaGUodGhpcyxNZSxEZSx6ZSwhMCl9LFYucHJvdG90eXBlLmxhc3RJbmRleE9m'@;
put 'PWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gaGUodGhpcyxNZSxEZSx6ZSwhMSl9LFYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE1lLERlLHplLG90KXtpZih2b2lkIDA9PT1EZSlvdD0idXRmOCIsemU9dGhpcy5sZW5ndGgsRGU9MDtlbHNlIGlmKHZvaWQgMD09PXplJiYic3RyaW5nIj09'@;
put 'dHlwZW9mIERlKW90PURlLHplPXRoaXMubGVuZ3RoLERlPTA7ZWxzZXtpZighaXNGaW5pdGUoRGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtEZT4+Pj0wLGlzRmluaXRl'@;
put 'KHplKT8oemU+Pj49MCx2b2lkIDA9PT1vdCYmKG90PSJ1dGY4IikpOihvdD16ZSx6ZT12b2lkIDApfWNvbnN0IHV0PXRoaXMubGVuZ3RoLURlO2lmKCh2b2lkIDA9PT16ZXx8emU+dXQpJiYoemU9dXQpLE1lLmxlbmd0aD4wJiYoemU8MHx8RGU8MCl8fERlPnRoaXMubGVuZ3RoKXRocm93IG5l'@;
put 'dyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO290fHwob3Q9InV0ZjgiKTtsZXQgTXQ9ITE7Zm9yKDs7KXN3aXRjaChvdCl7Y2FzZSJoZXgiOnJldHVybiBjZSh0aGlzLE1lLERlLHplKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBH'@;
put 'KHRoaXMsTWUsRGUsemUpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGIodGhpcyxNZSxEZSx6ZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBEKHRoaXMsTWUsRGUsemUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxl'@;
put 'IjpyZXR1cm4gSCh0aGlzLE1lLERlLHplKTtkZWZhdWx0OmlmKE10KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrb3QpO290PSgiIitvdCkudG9Mb3dlckNhc2UoKSxNdD0hMH19LFYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZm'@;
put 'ZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgQz00MDk2O2Z1bmN0aW9uIFMoTWUsRGUsemUpe2xldCBvdD0iIjt6ZT1NYXRoLm1pbihNZS5sZW5ndGgsemUpO2ZvcihsZXQgdXQ9RGU7dXQ8emU7Kyt1dClvdCs9U3RyaW5nLmZy'@;
put 'b21DaGFyQ29kZSgxMjcmTWVbdXRdKTtyZXR1cm4gb3R9ZnVuY3Rpb24gdihNZSxEZSx6ZSl7bGV0IG90PSIiO3plPU1hdGgubWluKE1lLmxlbmd0aCx6ZSk7Zm9yKGxldCB1dD1EZTt1dDx6ZTsrK3V0KW90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKE1lW3V0XSk7cmV0dXJuIG90fWZ1bmN0aW9u'@;
put 'IHAoTWUsRGUsemUpe2NvbnN0IG90PU1lLmxlbmd0aDsoIURlfHxEZTwwKSYmKERlPTApLCghemV8fHplPDB8fHplPm90KSYmKHplPW90KTtsZXQgdXQ9IiI7Zm9yKGxldCBNdD1EZTtNdDx6ZTsrK010KXV0Kz1YZVtNZVtNdF1dO3JldHVybiB1dH1mdW5jdGlvbiB3KE1lLERlLHplKXtjb25z'@;
put 'dCBvdD1NZS5zbGljZShEZSx6ZSk7bGV0IHV0PSIiO2ZvcihsZXQgTXQ9MDtNdDxvdC5sZW5ndGgtMTtNdCs9Mil1dCs9U3RyaW5nLmZyb21DaGFyQ29kZShvdFtNdF0rMjU2Km90W010KzFdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gSihNZSxEZSx6ZSl7aWYoTWUlMSE9MHx8TWU8MCl0aHJvdyBu'@;
put 'ZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoTWUrRGU+emUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBuZShNZSxEZSx6ZSxvdCx1dCxNdCl7aWYoIVYuaXNCdWZmZXIoTWUpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihEZT51dHx8RGU8TXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHplK290Pk1lLmxlbmd0aCl0aHJvdyBuZXcg'@;
put 'UmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gZGUoTWUsRGUsemUsb3QsdXQpe0tlKERlLG90LHV0LE1lLHplLDcpO2xldCBNdD1OdW1iZXIoRGUmQmlnSW50KDQyOTQ5NjcyOTUpKTtNZVt6ZSsrXT1NdCxNdD4+PTgsTWVbemUrK109TXQsTXQ+Pj04LE1lW3plKytd'@;
put 'PU10LE10Pj49OCxNZVt6ZSsrXT1NdDtsZXQgSHQ9TnVtYmVyKERlPj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIE1lW3plKytdPUh0LEh0Pj49OCxNZVt6ZSsrXT1IdCxIdD4+PTgsTWVbemUrK109SHQsSHQ+Pj04LE1lW3plKytdPUh0LHplfWZ1bmN0aW9uIGZlKE1l'@;
put 'LERlLHplLG90LHV0KXtLZShEZSxvdCx1dCxNZSx6ZSw3KTtsZXQgTXQ9TnVtYmVyKERlJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7TWVbemUrN109TXQsTXQ+Pj04LE1lW3plKzZdPU10LE10Pj49OCxNZVt6ZSs1XT1NdCxNdD4+PTgsTWVbemUrNF09TXQ7bGV0IEh0PU51bWJlcihEZT4+QmlnSW50'@;
put 'KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBNZVt6ZSszXT1IdCxIdD4+PTgsTWVbemUrMl09SHQsSHQ+Pj04LE1lW3plKzFdPUh0LEh0Pj49OCxNZVt6ZV09SHQsemUrOH1mdW5jdGlvbiB4ZShNZSxEZSx6ZSxvdCx1dCxNdCl7aWYoemUrb3Q+TWUubGVuZ3RoKXRocm93IG5ldyBS'@;
put 'YW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZih6ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBMZShNZSxEZSx6ZSxvdCx1dCl7cmV0dXJuIERlPStEZSx6ZT4+Pj0wLHV0fHx4ZShNZSwwLHplLDQpLEkud3JpdGUoTWUsRGUs'@;
put 'emUsb3QsMjMsNCksemUrNH1mdW5jdGlvbiBGZShNZSxEZSx6ZSxvdCx1dCl7cmV0dXJuIERlPStEZSx6ZT4+Pj0wLHV0fHx4ZShNZSwwLHplLDgpLEkud3JpdGUoTWUsRGUsemUsb3QsNTIsOCksemUrOH1WLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihNZSxEZSl7Y29uc3QgemU9dGhpcy5s'@;
put 'ZW5ndGg7KE1lPX5+TWUpPDA/KE1lKz16ZSk8MCYmKE1lPTApOk1lPnplJiYoTWU9emUpLChEZT12b2lkIDA9PT1EZT96ZTp+fkRlKTwwPyhEZSs9emUpPDAmJihEZT0wKTpEZT56ZSYmKERlPXplKSxEZTxNZSYmKERlPU1lKTtjb25zdCBvdD10aGlzLnN1YmFycmF5KE1lLERlKTtyZXR1cm4g'@;
put 'T2JqZWN0LnNldFByb3RvdHlwZU9mKG90LFYucHJvdG90eXBlKSxvdH0sVi5wcm90b3R5cGUucmVhZFVpbnRMRT1WLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKE1lLERlLHplKXtNZT4+Pj0wLERlPj4+PTAsemV8fEooTWUsRGUsdGhpcy5sZW5ndGgpO2xldCBvdD10aGlzW01lXSx1'@;
put 'dD0xLE10PTA7Zm9yKDsrK010PERlJiYodXQqPTI1Nik7KW90Kz10aGlzW01lK010XSp1dDtyZXR1cm4gb3R9LFYucHJvdG90eXBlLnJlYWRVaW50QkU9Vi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVu'@;
put 'Z3RoKTtsZXQgb3Q9dGhpc1tNZSstLURlXSx1dD0xO2Zvcig7RGU+MCYmKHV0Kj0yNTYpOylvdCs9dGhpc1tNZSstLURlXSp1dDtyZXR1cm4gb3R9LFYucHJvdG90eXBlLnJlYWRVaW50OD1WLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxK'@;
put 'KE1lLDEsdGhpcy5sZW5ndGgpLHRoaXNbTWVdfSxWLnByb3RvdHlwZS5yZWFkVWludDE2TEU9Vi5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKSx0aGlzW01lXXx0aGlzW01lKzFdPDw4fSxWLnByb3Rv'@;
put 'dHlwZS5yZWFkVWludDE2QkU9Vi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKSx0aGlzW01lXTw8OHx0aGlzW01lKzFdfSxWLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Vi5wcm90b3R5cGUucmVhZFVJ'@;
put 'bnQzMkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tNZV18dGhpc1tNZSsxXTw8OHx0aGlzW01lKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tNZSszXX0sVi5wcm90b3R5cGUucmVhZFVpbnQzMkJFPVYucHJvdG90eXBlLnJlYWRV'@;
put 'SW50MzJCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tNZV0rKHRoaXNbTWUrMV08PDE2fHRoaXNbTWUrMl08PDh8dGhpc1tNZSszXSl9LFYucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1VZShmdW5jdGlvbihN'@;
put 'ZSl7WWUoTWU+Pj49MCwib2Zmc2V0Iik7Y29uc3QgRGU9dGhpc1tNZV0semU9dGhpc1tNZSs3XTt2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fFFlKE1lLHRoaXMubGVuZ3RoLTgpO2NvbnN0IG90PURlKzI1Nip0aGlzWysrTWVdKzY1NTM2KnRoaXNbKytNZV0rdGhpc1srK01lXSoyKioyNCx1'@;
put 'dD10aGlzWysrTWVdKzI1Nip0aGlzWysrTWVdKzY1NTM2KnRoaXNbKytNZV0remUqMioqMjQ7cmV0dXJuIEJpZ0ludChvdCkrKEJpZ0ludCh1dCk8PEJpZ0ludCgzMikpfSksVi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lKXtZZShNZT4+Pj0wLCJvZmZzZXQiKTtj'@;
put 'b25zdCBEZT10aGlzW01lXSx6ZT10aGlzW01lKzddO3ZvaWQgMCE9PURlJiZ2b2lkIDAhPT16ZXx8UWUoTWUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgb3Q9RGUqMioqMjQrNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt0aGlzWysrTWVdLHV0PXRoaXNbKytNZV0qMioqMjQrNjU1MzYq'@;
put 'dGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt6ZTtyZXR1cm4oQmlnSW50KG90KTw8QmlnSW50KDMyKSkrQmlnSW50KHV0KX0pLFYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVuZ3RoKTtsZXQgb3Q9dGhp'@;
put 'c1tNZV0sdXQ9MSxNdD0wO2Zvcig7KytNdDxEZSYmKHV0Kj0yNTYpOylvdCs9dGhpc1tNZStNdF0qdXQ7cmV0dXJuIHV0Kj0xMjgsb3Q+PXV0JiYob3QtPU1hdGgucG93KDIsOCpEZSkpLG90fSxWLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oTWUsRGUsemUpe01lPj4+PTAsRGU+Pj49'@;
put 'MCx6ZXx8SihNZSxEZSx0aGlzLmxlbmd0aCk7bGV0IG90PURlLHV0PTEsTXQ9dGhpc1tNZSstLW90XTtmb3IoO290PjAmJih1dCo9MjU2KTspTXQrPXRoaXNbTWUrLS1vdF0qdXQ7cmV0dXJuIHV0Kj0xMjgsTXQ+PXV0JiYoTXQtPU1hdGgucG93KDIsOCpEZSkpLE10fSxWLnByb3RvdHlwZS5y'@;
put 'ZWFkSW50OD1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbTWVdPy0xKigyNTUtdGhpc1tNZV0rMSk6dGhpc1tNZV19LFYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKE1lLERlKXtNZT4+Pj0wLERlfHxKKE1lLDIs'@;
put 'dGhpcy5sZW5ndGgpO2NvbnN0IHplPXRoaXNbTWVdfHRoaXNbTWUrMV08PDg7cmV0dXJuIDMyNzY4JnplPzQyOTQ5MDE3NjB8emU6emV9LFYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKE1lLERlKXtNZT4+Pj0wLERlfHxKKE1lLDIsdGhpcy5sZW5ndGgpO2NvbnN0IHplPXRoaXNb'@;
put 'TWUrMV18dGhpc1tNZV08PDg7cmV0dXJuIDMyNzY4JnplPzQyOTQ5MDE3NjB8emU6emV9LFYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSx0aGlzW01lXXx0aGlzW01lKzFdPDw4fHRoaXNbTWUrMl08'@;
put 'PDE2fHRoaXNbTWUrM108PDI0fSxWLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksdGhpc1tNZV08PDI0fHRoaXNbTWUrMV08PDE2fHRoaXNbTWUrMl08PDh8dGhpc1tNZSszXX0sVi5wcm90b3R5cGUu'@;
put 'cmVhZEJpZ0ludDY0TEU9VWUoZnVuY3Rpb24oTWUpe1llKE1lPj4+PTAsIm9mZnNldCIpO2NvbnN0IERlPXRoaXNbTWVdLHplPXRoaXNbTWUrN107cmV0dXJuIHZvaWQgMCE9PURlJiZ2b2lkIDAhPT16ZXx8UWUoTWUsdGhpcy5sZW5ndGgtOCksKEJpZ0ludCh0aGlzW01lKzRdKzI1Nip0aGlz'@;
put 'W01lKzVdKzY1NTM2KnRoaXNbTWUrNl0rKHplPDwyNCkpPDxCaWdJbnQoMzIpKStCaWdJbnQoRGUrMjU2KnRoaXNbKytNZV0rNjU1MzYqdGhpc1srK01lXSsxNjc3NzIxNip0aGlzWysrTWVdKX0pLFYucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lKXtZZShNZT4+Pj0w'@;
put 'LCJvZmZzZXQiKTtjb25zdCBEZT10aGlzW01lXSx6ZT10aGlzW01lKzddO3ZvaWQgMCE9PURlJiZ2b2lkIDAhPT16ZXx8UWUoTWUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgb3Q9KERlPDwyNCkrNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt0aGlzWysrTWVdO3JldHVybihCaWdJbnQo'@;
put 'b3QpPDxCaWdJbnQoMzIpKStCaWdJbnQoMTY3NzcyMTYqdGhpc1srK01lXSs2NTUzNip0aGlzWysrTWVdKzI1Nip0aGlzWysrTWVdK3plKX0pLFYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSxJLnJl'@;
put 'YWQodGhpcyxNZSwhMCwyMyw0KX0sVi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCExLDIzLDQpfSxWLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oTWUsRGUp'@;
put 'e3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDgsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCEwLDUyLDgpfSxWLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDgsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCExLDUy'@;
put 'LDgpfSxWLnByb3RvdHlwZS53cml0ZVVpbnRMRT1WLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihNZSxEZSx6ZSxvdCl7TWU9K01lLERlPj4+PTAsemU+Pj49MCwhb3QmJm5lKHRoaXMsTWUsRGUsemUsTWF0aC5wb3coMiw4KnplKS0xLDApO2xldCB1dD0xLE10PTA7Zm9yKHRoaXNb'@;
put 'RGVdPTI1NSZNZTsrK010PHplJiYodXQqPTI1Nik7KXRoaXNbRGUrTXRdPU1lL3V0JjI1NTtyZXR1cm4gRGUremV9LFYucHJvdG90eXBlLndyaXRlVWludEJFPVYucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKE1lLERlLHplLG90KXtNZT0rTWUsRGU+Pj49MCx6ZT4+Pj0wLCFvdCYm'@;
put 'bmUodGhpcyxNZSxEZSx6ZSxNYXRoLnBvdygyLDgqemUpLTEsMCk7bGV0IHV0PXplLTEsTXQ9MTtmb3IodGhpc1tEZSt1dF09MjU1Jk1lOy0tdXQ+PTAmJihNdCo9MjU2KTspdGhpc1tEZSt1dF09TWUvTXQmMjU1O3JldHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVVaW50OD1WLnByb3Rv'@;
put 'dHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsMSwyNTUsMCksdGhpc1tEZV09MjU1Jk1lLERlKzF9LFYucHJvdG90eXBlLndyaXRlVWludDE2TEU9Vi5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlv'@;
put 'bihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIsNjU1MzUsMCksdGhpc1tEZV09MjU1Jk1lLHRoaXNbRGUrMV09TWU+Pj44LERlKzJ9LFYucHJvdG90eXBlLndyaXRlVWludDE2QkU9Vi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihN'@;
put 'ZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIsNjU1MzUsMCksdGhpc1tEZV09TWU+Pj44LHRoaXNbRGUrMV09MjU1Jk1lLERlKzJ9LFYucHJvdG90eXBlLndyaXRlVWludDMyTEU9Vi5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihNZSxE'@;
put 'ZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0RlKzNdPU1lPj4+MjQsdGhpc1tEZSsyXT1NZT4+PjE2LHRoaXNbRGUrMV09TWU+Pj44LHRoaXNbRGVdPTI1NSZNZSxEZSs0fSxWLnByb3RvdHlwZS53cml0ZVVpbnQzMkJF'@;
put 'PVYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tEZV09TWU+Pj4yNCx0aGlzW0RlKzFdPU1lPj4+MTYsdGhpc1tEZSsyXT1NZT4+PjgsdGhpc1tEZSsz'@;
put 'XT0yNTUmTWUsRGUrNH0sVi5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZGUodGhpcyxNZSxEZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPVVlKGZ1bmN0'@;
put 'aW9uKE1lLERlPTApe3JldHVybiBmZSh0aGlzLE1lLERlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oTWUsRGUsemUsb3Qpe2lmKE1lPStNZSxEZT4+Pj0wLCFvdCl7Y29uc3QgUHQ9TWF0aC5wb3coMiw4'@;
put 'KnplLTEpO25lKHRoaXMsTWUsRGUsemUsUHQtMSwtUHQpfWxldCB1dD0wLE10PTEsSHQ9MDtmb3IodGhpc1tEZV09MjU1Jk1lOysrdXQ8emUmJihNdCo9MjU2KTspTWU8MCYmMD09PUh0JiYwIT09dGhpc1tEZSt1dC0xXSYmKEh0PTEpLHRoaXNbRGUrdXRdPShNZS9NdD4+MCktSHQmMjU1O3Jl'@;
put 'dHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihNZSxEZSx6ZSxvdCl7aWYoTWU9K01lLERlPj4+PTAsIW90KXtjb25zdCBQdD1NYXRoLnBvdygyLDgqemUtMSk7bmUodGhpcyxNZSxEZSx6ZSxQdC0xLC1QdCl9bGV0IHV0PXplLTEsTXQ9MSxIdD0wO2Zvcih0aGlz'@;
put 'W0RlK3V0XT0yNTUmTWU7LS11dD49MCYmKE10Kj0yNTYpOylNZTwwJiYwPT09SHQmJjAhPT10aGlzW0RlK3V0KzFdJiYoSHQ9MSksdGhpc1tEZSt1dF09KE1lL010Pj4wKS1IdCYyNTU7cmV0dXJuIERlK3plfSxWLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVy'@;
put 'biBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwxLDEyNywtMTI4KSxNZTwwJiYoTWU9MjU1K01lKzEpLHRoaXNbRGVdPTI1NSZNZSxEZSsxfSxWLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhp'@;
put 'cyxNZSxEZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tEZV09MjU1Jk1lLHRoaXNbRGUrMV09TWU+Pj44LERlKzJ9LFYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIsMzI3NjcsLTMyNzY4KSx0'@;
put 'aGlzW0RlXT1NZT4+PjgsdGhpc1tEZSsxXT0yNTUmTWUsRGUrMn0sVi5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0RlXT0yNTUmTWUs'@;
put 'dGhpc1tEZSsxXT1NZT4+PjgsdGhpc1tEZSsyXT1NZT4+PjE2LHRoaXNbRGUrM109TWU+Pj4yNCxEZSs0fSxWLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDIxNDc0ODM2NDcsLTIxNDc0'@;
put 'ODM2NDgpLE1lPDAmJihNZT00Mjk0OTY3Mjk1K01lKzEpLHRoaXNbRGVdPU1lPj4+MjQsdGhpc1tEZSsxXT1NZT4+PjE2LHRoaXNbRGUrMl09TWU+Pj44LHRoaXNbRGUrM109MjU1Jk1lLERlKzR9LFYucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1'@;
put 'cm4gZGUodGhpcyxNZSxEZSwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZmUodGhpcyxNZSxEZSwtQmlnSW50KCIweDgwMDAw'@;
put 'MDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIExlKHRoaXMsTWUsRGUsITAsemUpfSxWLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oTWUsRGUsemUpe3Jl'@;
put 'dHVybiBMZSh0aGlzLE1lLERlLCExLHplKX0sVi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIEZlKHRoaXMsTWUsRGUsITAsemUpfSxWLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gRmUodGhpcyxNZSxE'@;
put 'ZSwhMSx6ZSl9LFYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oTWUsRGUsemUsb3Qpe2lmKCFWLmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZih6ZXx8KHplPTApLG90fHwwPT09b3R8fChvdD10aGlzLmxlbmd0aCksRGU+'@;
put 'PU1lLmxlbmd0aCYmKERlPU1lLmxlbmd0aCksRGV8fChEZT0wKSxvdD4wJiZvdDx6ZSYmKG90PXplKSxvdD09PXplfHwwPT09TWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoRGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIp'@;
put 'O2lmKHplPDB8fHplPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYob3Q8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtvdD50aGlzLmxlbmd0aCYmKG90PXRoaXMubGVuZ3RoKSxNZS5sZW5n'@;
put 'dGgtRGU8b3QtemUmJihvdD1NZS5sZW5ndGgtRGUremUpO2NvbnN0IHV0PW90LXplO3JldHVybiB0aGlzPT09TWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihEZSx6ZSxvdCk6VWludDhBcnJheS5wcm90b3R5cGUu'@;
put 'c2V0LmNhbGwoTWUsdGhpcy5zdWJhcnJheSh6ZSxvdCksRGUpLHV0fSxWLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKE1lLERlLHplLG90KXtpZigic3RyaW5nIj09dHlwZW9mIE1lKXtpZigic3RyaW5nIj09dHlwZW9mIERlPyhvdD1EZSxEZT0wLHplPXRoaXMubGVuZ3RoKToic3RyaW5nIj09'@;
put 'dHlwZW9mIHplJiYob3Q9emUsemU9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PW90JiYic3RyaW5nIiE9dHlwZW9mIG90KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG90JiYhVi5pc0VuY29kaW5nKG90KSl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK290KTtpZigxPT09TWUubGVuZ3RoKXtjb25zdCBNdD1NZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1vdCYmTXQ8MTI4fHwibGF0aW4xIj09PW90KSYmKE1lPU10KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgTWU/TWUmPTI1NToiYm9v'@;
put 'bGVhbiI9PXR5cGVvZiBNZSYmKE1lPU51bWJlcihNZSkpO2lmKERlPDB8fHRoaXMubGVuZ3RoPERlfHx0aGlzLmxlbmd0aDx6ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoemU8PURlKXJldHVybiB0aGlzO2xldCB1dDtpZihEZT4+Pj0wLHplPXZvaWQg'@;
put 'MD09PXplP3RoaXMubGVuZ3RoOnplPj4+MCxNZXx8KE1lPTApLCJudW1iZXIiPT10eXBlb2YgTWUpZm9yKHV0PURlO3V0PHplOysrdXQpdGhpc1t1dF09TWU7ZWxzZXtjb25zdCBNdD1WLmlzQnVmZmVyKE1lKT9NZTpWLmZyb20oTWUsb3QpLEh0PU10Lmxlbmd0aDtpZigwPT09SHQpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK01lKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IodXQ9MDt1dDx6ZS1EZTsrK3V0KXRoaXNbdXQrRGVdPU10W3V0JUh0XX1yZXR1cm4gdGhpc307Y29uc3QgT2U9e307ZnVuY3Rpb24gamUoTWUsRGUsemUpe09lW01l'@;
put 'XT1jbGFzcyBleHRlbmRzIHple2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWVzc2FnZSIse3ZhbHVlOkRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9YCR7dGhpcy5uYW1lfSBb'@;
put 'JHtNZX1dYCxkZWxldGUgdGhpcy5uYW1lfWdldCBjb2RlKCl7cmV0dXJuIE1lfXNldCBjb2RlKG90KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm90LHdyaXRhYmxlOiEwfSl9dG9TdHJpbmcoKXtyZXR1cm5g'@;
put 'JHt0aGlzLm5hbWV9IFske01lfV06ICR7dGhpcy5tZXNzYWdlfWB9fX1mdW5jdGlvbiBXZShNZSl7bGV0IERlPSIiLHplPU1lLmxlbmd0aDtjb25zdCBvdD0iLSI9PT1NZVswXT8xOjA7Zm9yKDt6ZT49b3QrNDt6ZS09MylEZT1gXyR7TWUuc2xpY2UoemUtMyx6ZSl9JHtEZX1gO3JldHVybmAk'@;
put 'e01lLnNsaWNlKDAsemUpfSR7RGV9YH1mdW5jdGlvbiBLZShNZSxEZSx6ZSxvdCx1dCxNdCl7aWYoTWU+emV8fE1lPERlKXtjb25zdCBIdD0iYmlnaW50Ij09dHlwZW9mIERlPyJuIjoiIjtsZXQgUHQ7dGhyb3cgUHQ9TXQ+Mz8wPT09RGV8fERlPT09QmlnSW50KDApP2A+PSAwJHtIdH0gYW5k'@;
put 'IDwgMiR7SHR9ICoqICR7OCooTXQrMSl9JHtIdH1gOmA+PSAtKDIke0h0fSAqKiAkezgqKE10KzEpLTF9JHtIdH0pIGFuZCA8IDIgKiogJHs4KihNdCsxKS0xfSR7SHR9YDpgPj0gJHtEZX0ke0h0fSBhbmQgPD0gJHt6ZX0ke0h0fWAsbmV3IE9lLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIixQ'@;
put 'dCxNZSl9dmFyIEh0LFB0LG9uO0h0PW90LG9uPU10LFllKFB0PXV0LCJvZmZzZXQiKSx2b2lkIDAhPT1IdFtQdF0mJnZvaWQgMCE9PUh0W1B0K29uXXx8UWUoUHQsSHQubGVuZ3RoLShvbisxKSl9ZnVuY3Rpb24gWWUoTWUsRGUpe2lmKCJudW1iZXIiIT10eXBlb2YgTWUpdGhyb3cgbmV3IE9l'@;
put 'LkVSUl9JTlZBTElEX0FSR19UWVBFKERlLCJudW1iZXIiLE1lKX1mdW5jdGlvbiBRZShNZSxEZSx6ZSl7dGhyb3cgTWF0aC5mbG9vcihNZSkhPT1NZT8oWWUoTWUsemUpLG5ldyBPZS5FUlJfT1VUX09GX1JBTkdFKHplfHwib2Zmc2V0IiwiYW4gaW50ZWdlciIsTWUpKTpEZTwwP25ldyBPZS5F'@;
put 'UlJfQlVGRkVSX09VVF9PRl9CT1VORFM6bmV3IE9lLkVSUl9PVVRfT0ZfUkFOR0UoemV8fCJvZmZzZXQiLGA+PSAke3plPzE6MH0gYW5kIDw9ICR7RGV9YCxNZSl9amUoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsZnVuY3Rpb24oTWUpe3JldHVybiBNZT9gJHtNZX0gaXMgb3V0c2lkZSBv'@;
put 'ZiBidWZmZXIgYm91bmRzYDoiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kcyJ9LFJhbmdlRXJyb3IpLGplKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oTWUsRGUpe3JldHVybmBUaGUgIiR7TWV9IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUg'@;
put 'bnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIERlfWB9LFR5cGVFcnJvciksamUoIkVSUl9PVVRfT0ZfUkFOR0UiLGZ1bmN0aW9uKE1lLERlLHplKXtsZXQgb3Q9YFRoZSB2YWx1ZSBvZiAiJHtNZX0iIGlzIG91dCBvZiByYW5nZS5gLHV0PXplO3JldHVybiBOdW1iZXIuaXNJbnRlZ2Vy'@;
put 'KHplKSYmTWF0aC5hYnMoemUpPjQyOTQ5NjcyOTY/dXQ9V2UoU3RyaW5nKHplKSk6ImJpZ2ludCI9PXR5cGVvZiB6ZSYmKHV0PVN0cmluZyh6ZSksKHplPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8emU8LShCaWdJbnQoMikqKkJpZ0ludCgzMikpKSYmKHV0PVdlKHV0KSksdXQrPSJuIiksb3Qr'@;
put 'PWAgSXQgbXVzdCBiZSAke0RlfS4gUmVjZWl2ZWQgJHt1dH1gLG90fSxSYW5nZUVycm9yKTtjb25zdCBsdD0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFBlKE1lLERlKXtsZXQgemU7RGU9RGV8fDEvMDtjb25zdCBvdD1NZS5sZW5ndGg7bGV0IHV0PW51bGw7Y29uc3QgTXQ9W107Zm9y'@;
put 'KGxldCBIdD0wO0h0PG90OysrSHQpe2lmKHplPU1lLmNoYXJDb2RlQXQoSHQpLHplPjU1Mjk1JiZ6ZTw1NzM0NCl7aWYoIXV0KXtpZih6ZT41NjMxOSl7KERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoSHQrMT09PW90KXsoRGUtPTMpPi0xJiZNdC5wdXNoKDIz'@;
put 'OSwxOTEsMTg5KTtjb250aW51ZX11dD16ZTtjb250aW51ZX1pZih6ZTw1NjMyMCl7KERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSksdXQ9emU7Y29udGludWV9emU9NjU1MzYrKHV0LTU1Mjk2PDwxMHx6ZS01NjMyMCl9ZWxzZSB1dCYmKERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkx'@;
put 'LDE4OSk7aWYodXQ9bnVsbCx6ZTwxMjgpe2lmKChEZS09MSk8MClicmVhaztNdC5wdXNoKHplKX1lbHNlIGlmKHplPDIwNDgpe2lmKChEZS09Mik8MClicmVhaztNdC5wdXNoKHplPj42fDE5Miw2MyZ6ZXwxMjgpfWVsc2UgaWYoemU8NjU1MzYpe2lmKChEZS09Myk8MClicmVhaztNdC5wdXNo'@;
put 'KHplPj4xMnwyMjQsemU+PjYmNjN8MTI4LDYzJnplfDEyOCl9ZWxzZXtpZighKHplPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKERlLT00KTwwKWJyZWFrO010LnB1c2goemU+PjE4fDI0MCx6ZT4+MTImNjN8MTI4LHplPj42JjYzfDEyOCw2MyZ6'@;
put 'ZXwxMjgpfX1yZXR1cm4gTXR9ZnVuY3Rpb24gYmUoTWUpe3JldHVybiBLLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKERlKXtpZigoRGU9KERlPURlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKGx0LCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtEZS5sZW5ndGglNCE9MDspRGUrPSI9'@;
put 'IjtyZXR1cm4gRGV9KE1lKSl9ZnVuY3Rpb24gQWUoTWUsRGUsemUsb3Qpe2xldCB1dDtmb3IodXQ9MDt1dDxvdCYmISh1dCt6ZT49RGUubGVuZ3RofHx1dD49TWUubGVuZ3RoKTsrK3V0KURlW3V0K3plXT1NZVt1dF07cmV0dXJuIHV0fWZ1bmN0aW9uIFRlKE1lLERlKXtyZXR1cm4gTWUgaW5z'@;
put 'dGFuY2VvZiBEZXx8bnVsbCE9TWUmJm51bGwhPU1lLmNvbnN0cnVjdG9yJiZudWxsIT1NZS5jb25zdHJ1Y3Rvci5uYW1lJiZNZS5jb25zdHJ1Y3Rvci5uYW1lPT09RGUubmFtZX1mdW5jdGlvbiBxZShNZSl7cmV0dXJuIE1lIT1NZX1jb25zdCBYZT1mdW5jdGlvbigpe2NvbnN0IE1lPSIwMTIz'@;
put 'NDU2Nzg5YWJjZGVmIixEZT1uZXcgQXJyYXkoMjU2KTtmb3IobGV0IHplPTA7emU8MTY7Kyt6ZSl7Y29uc3Qgb3Q9MTYqemU7Zm9yKGxldCB1dD0wO3V0PDE2OysrdXQpRGVbb3QrdXRdPU1lW3plXStNZVt1dF19cmV0dXJuIERlfSgpO2Z1bmN0aW9uIFVlKE1lKXtyZXR1cm4gdHlwZW9mIEJp'@;
put 'Z0ludD4idSI/aHQ6TWV9ZnVuY3Rpb24gaHQoKXt0aHJvdyBuZXcgRXJyb3IoIkJpZ0ludCBub3Qgc3VwcG9ydGVkIil9fSwxOTI0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyMTApLEs9Uig1NTU5KSxJPUsoeigiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO00uZXhwb3J0'@;
put 'cz1mdW5jdGlvbihrLEUpe3ZhciBqPXooaywhIUUpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBqJiZJKGssIi5wcm90b3R5cGUuIik+LTE/SyhqKTpqfX0sNTU1OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODYxMiksSz1SKDIxMCksST1LKCIlRnVuY3Rpb24ucHJvdG90eXBl'@;
put 'LmFwcGx5JSIpLGs9SygiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSIpLEU9SygiJVJlZmxlY3QuYXBwbHklIiwhMCl8fHouY2FsbChrLEkpLGo9SygiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIiwhMCksVj1LKCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSIsITApLEI9Sygi'@;
put 'JU1hdGgubWF4JSIpO2lmKFYpdHJ5e1Yoe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7Vj1udWxsfU0uZXhwb3J0cz1mdW5jdGlvbihYKXt2YXIgVT1FKHosayxhcmd1bWVudHMpO3JldHVybiBqJiZWJiZqKFUsImxlbmd0aCIpLmNvbmZpZ3VyYWJsZSYmVihVLCJsZW5ndGgiLHt2YWx1ZToxK0Io'@;
put 'MCxYLmxlbmd0aC0oYXJndW1lbnRzLmxlbmd0aC0xKSl9KSxVfTt2YXIgWT1mdW5jdGlvbigpe3JldHVybiBFKHosSSxhcmd1bWVudHMpfTtWP1YoTS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOll9KTpNLmV4cG9ydHMuYXBwbHk9WX0sMTAyNzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZm'@;
put 'ZXIsSz1SKDI4MzApLlRyYW5zZm9ybSxJPVIoMjU1MykuU3RyaW5nRGVjb2RlcjtmdW5jdGlvbiBrKEUpe0suY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgRSx0aGlzLmhhc2hNb2RlP3RoaXNbRV09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMu'@;
put 'X2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9Uig1NzE3KShrLEspLGsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihFLGosVil7InN0cmlu'@;
put 'ZyI9PXR5cGVvZiBFJiYoRT16LmZyb20oRSxqKSk7dmFyIEI9dGhpcy5fdXBkYXRlKEUpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KFYmJihCPXRoaXMuX3RvU3RyaW5nKEIsVikpLEIpfSxrLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30say5wcm90b3R5cGUuZ2V0'@;
put 'QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxrLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3Vw'@;
put 'cG9ydGVkIHN0YXRlIil9LGsucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0say5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihFLGosVil7dmFyIEI7dHJ5e3RoaXMuaGFzaE1v'@;
put 'ZGU/dGhpcy5fdXBkYXRlKEUpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoRSkpfWNhdGNoKFkpe0I9WX1maW5hbGx5e1YoQil9fSxrLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oRSl7dmFyIGo7dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goVil7aj1WfUUoail9LGsucHJv'@;
put 'dG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKEUpe3ZhciBqPXRoaXMuX19maW5hbCgpfHx6LmFsbG9jKDApO3JldHVybiBFJiYoaj10aGlzLl90b1N0cmluZyhqLEUsITApKSxqfSxrLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oRSxqLFYpe2lmKHRoaXMuX2RlY29kZXJ8fCh0'@;
put 'aGlzLl9kZWNvZGVyPW5ldyBJKGopLHRoaXMuX2VuY29kaW5nPWopLHRoaXMuX2VuY29kaW5nIT09ail0aHJvdyBuZXcgRXJyb3IoImNhbid0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgQj10aGlzLl9kZWNvZGVyLndyaXRlKEUpO3JldHVybiBWJiYoQis9dGhpcy5fZGVjb2Rlci5lbmQoKSks'@;
put 'Qn0sTS5leHBvcnRzPWt9LDEwNDg6TT0+e00uZXhwb3J0cz1mdW5jdGlvbihSLHope2Zvcih2YXIgSz1bXSxJPTA7STxSLmxlbmd0aDtJKyspe3ZhciBrPXooUltJXSxJKTtPKGspP0sucHVzaC5hcHBseShLLGspOksucHVzaChrKX1yZXR1cm4gS307dmFyIE89QXJyYXkuaXNBcnJheXx8ZnVu'@;
put 'Y3Rpb24oUil7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSKX19LDUxMDg6KE0sTyxSKT0+e3ZhciB6PVIoOTUzOSksSz1SKDkyODIpO2Z1bmN0aW9uIEkoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX12YXIgayxFPUFycmF5LnBy'@;
put 'b3RvdHlwZS5zbGljZSxqPXt9O2s9dm9pZCAwIT09Ui5nJiZSLmcuY29uc29sZT9SLmcuY29uc29sZTp0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNvbnNvbGU/d2luZG93LmNvbnNvbGU6e307Zm9yKHZhciBWPVtbZnVuY3Rpb24oKXt9LCJsb2ciXSxbZnVuY3Rpb24oKXtrLmxvZy5hcHBs'@;
put 'eShrLGFyZ3VtZW50cyl9LCJpbmZvIl0sW2Z1bmN0aW9uKCl7ay5sb2cuYXBwbHkoayxhcmd1bWVudHMpfSwid2FybiJdLFtmdW5jdGlvbigpe2sud2Fybi5hcHBseShrLGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbihxKXtqW3FdPUkoKX0sInRpbWUiXSxbZnVuY3Rpb24ocSl7dmFy'@;
put 'IGVlPWpbcV07aWYoIWVlKXRocm93IG5ldyBFcnJvcigiTm8gc3VjaCBsYWJlbDogIitxKTtkZWxldGUgaltxXTt2YXIgdGU9SSgpLWVlO2subG9nKHErIjogIit0ZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24oKXt2YXIgcT1uZXcgRXJyb3I7cS5uYW1lPSJUcmFjZSIscS5tZXNzYWdl'@;
put 'PXouZm9ybWF0LmFwcGx5KG51bGwsYXJndW1lbnRzKSxrLmVycm9yKHEuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24ocSl7ay5sb2coei5pbnNwZWN0KHEpKyJcbiIpfSwiZGlyIl0sW2Z1bmN0aW9uKHEpe2lmKCFxKXt2YXIgZWU9RS5jYWxsKGFyZ3VtZW50cywxKTtLLm9rKCExLHouZm9y'@;
put 'bWF0LmFwcGx5KG51bGwsZWUpKX19LCJhc3NlcnQiXV0sQj0wO0I8Vi5sZW5ndGg7QisrKXt2YXIgWT1WW0JdLFU9WVsxXTtrW1VdfHwoa1tVXT1ZWzBdKX1NLmV4cG9ydHM9a30sNjM5MzooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDY5NDgpLEk9Uig2NDI2KTtNLmV4cG9y'@;
put 'dHM9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyBFKFYpfTt2YXIgaz17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUx'@;
put 'OTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBFKFYpe3Ro'@;
put 'aXMuY3VydmVUeXBlPWtbVl0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpWfSksdGhpcy5jdXJ2ZT1uZXcgSy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIGooVixCLFkpe0FycmF5LmlzQXJyYXkoVil8fChWPVYudG9BcnJh'@;
put 'eSgpKTt2YXIgWD1uZXcgeihWKTtpZihZJiZYLmxlbmd0aDxZKXt2YXIgVT1uZXcgeihZLVgubGVuZ3RoKTtVLmZpbGwoMCksWD16LmNvbmNhdChbVSxYXSl9cmV0dXJuIEI/WC50b1N0cmluZyhCKTpYfWsucDIyND1rLnNlY3AyMjRyMSxrLnAyNTY9ay5zZWNwMjU2cjE9ay5wcmltZTI1NnYx'@;
put 'LGsucDE5Mj1rLnNlY3AxOTJyMT1rLnByaW1lMTkydjEsay5wMzg0PWsuc2VjcDM4NHIxLGsucDUyMT1rLnNlY3A1MjFyMSxFLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oVixCKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGlj'@;
put 'S2V5KFYsQil9LEUucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oVixCLFkpe3JldHVybiBCPUJ8fCJ1dGY4Iix6LmlzQnVmZmVyKFYpfHwoVj1uZXcgeihWLEIpKSxqKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhWKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZh'@;
put 'dGUoKSkuZ2V0WCgpLFksdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LEUucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihWLEIpe3ZhciBZPXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09QiwhMCk7cmV0dXJuImh5YnJpZCI9PT1CJiYoWVswXT1ZW1kubGVuZ3Ro'@;
put 'LTFdJTI/Nzo2KSxqKFksVil9LEUucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oVil7cmV0dXJuIGoodGhpcy5rZXlzLmdldFByaXZhdGUoKSxWKX0sRS5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKFYsQil7cmV0dXJuIEI9Qnx8InV0ZjgiLHouaXNCdWZmZXIoVil8'@;
put 'fChWPW5ldyB6KFYsQikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKFYpLHRoaXN9LEUucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oVixCKXtCPUJ8fCJ1dGY4Iix6LmlzQnVmZmVyKFYpfHwoVj1uZXcgeihWLEIpKTt2YXIgWT1uZXcgSShWKTtyZXR1cm4gWT1ZLnRvU3RyaW5n'@;
put 'KDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKFkpLHRoaXN9fSw2NDI2OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwi'@;
put 'QXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSly'@;
put 'ZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Yg'@;
put 'ej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDg2MjMpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTty'@;
put 'ZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5n'@;
put 'dGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9m'@;
put 'IGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9p'@;
put 'bml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9'@;
put 'MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5p'@;
put 'dEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0'@;
put 'OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2lu'@;
put 'aXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9'@;
put 'TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29y'@;
put 'ZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1tw'@;
put 'XXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3Ro'@;
put 'aXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2'@;
put 'LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tK'@;
put 'XXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4'@;
put 'NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBd'@;
put 'Kz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhp'@;
put 'cy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5l'@;
put 'Z2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5n'@;
put 'dGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2'@;
put 'YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9'@;
put 'WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2'@;
put 'LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRp'@;
put 'dmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2'@;
put 'O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEw'@;
put 'ODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTAp'@;
put 'fHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5l'@;
put 'Lmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3Zh'@;
put 'ciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9y'@;
put 'KHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBn'@;
put 'PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51'@;
put 'bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4g'@;
put 'SSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVM'@;
put 'ZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMu'@;
put 'Y2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4o'@;
put 'MjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0x'@;
put 'MyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEz'@;
put 'KSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0x'@;
put 'XSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihn'@;
put 'Kz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygp'@;
put 'Lmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5p'@;
put 'dW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3Rv'@;
put 'dHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0'@;
put 'aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9n'@;
put 'OnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdh'@;
put 'dGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0w'@;
put 'O3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4'@;
put 'b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhp'@;
put 'cyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2'@;
put 'YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+'@;
put 'MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4g'@;
put 'dGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUp'@;
put 'cmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1T'@;
put 'aWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3'@;
put 'PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxl'@;
put 'bmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxD'@;
put 'KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1'@;
put 'Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdh'@;
put 'dGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxl'@;
put 'bmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYm'@;
put 'SjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1'@;
put 'Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9l'@;
put 'LFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsUWU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1N'@;
put 'ZT4+PjEzLG90PTB8Sls3XSx1dD04MTkxJm90LE10PW90Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+'@;
put 'PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxRdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+'@;
put 'PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixGbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0'@;
put 'aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1h'@;
put 'dGguaW11bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcr'@;
put 'TWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKFFlLGVuKXwwLHc9TWF0aC5pbXVsKFFlLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXww'@;
put 'O2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxm'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoUWUsZnQpfDAsdz13K01hdGguaW11bChRZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXww'@;
put 'O3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11'@;
put 'bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChRZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFFlLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdl'@;
put 'LE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFF0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFF0KXwwKSsocD4+'@;
put 'PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01h'@;
put 'dGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoUWUsTnQpfDAsdz13K01hdGguaW11bChRZSxtbil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUXQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFF0KXwwO3ZhciBubz0oZmUrKHY9'@;
put 'ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVs'@;
put 'KERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYr'@;
put 'TWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRo'@;
put 'LmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFF0KXwwKStNYXRoLmltdWwoUWUsSXQpfDAsdz13K01hdGguaW11bChRZSxRdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11'@;
put 'bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkr'@;
put 'KHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXww'@;
put 'KStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFF0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxRdCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChRZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'V2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxx'@;
put 'aSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRo'@;
put 'LmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUXQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFF0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoUWUsenQpfDAsdz13K01hdGguaW11bChRZSx5bil8MCx2PXYrTWF0aC5pbXVsKGpl'@;
put 'LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0'@;
put 'KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01h'@;
put 'dGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwo'@;
put 'aHQsSXQpfDAsdz13K01hdGguaW11bChodCxRdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQ'@;
put 'ZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoUWUsc24pfDAsdz13K01hdGguaW11bChRZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoamUsRm4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8'@;
put 'PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11'@;
put 'bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10'@;
put 'LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxRdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsUXQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQp'@;
put 'fDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8'@;
put 'MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoUWUsJHQpfDAsdz13K01hdGguaW11bChRZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGpl'@;
put 'LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1N'@;
put 'YXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJ'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFF0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxRdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXww'@;
put 'LHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13'@;
put 'K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1w'@;
put 'K01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKFFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChRZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11'@;
put 'bChibixOdCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFF0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixRdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQs'@;
put 'WXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBH'@;
put 'aT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9'@;
put 'TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxRdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixRdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZ'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXww'@;
put 'LHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRo'@;
put 'LmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRo'@;
put 'LmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0'@;
put 'KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVs'@;
put 'KHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiks'@;
put 'dj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDAp'@;
put 'K01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmlt'@;
put 'dWwoYm4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAs'@;
put 'aHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJz'@;
put 'Jj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsx'@;
put 'Nl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJv'@;
put 'dG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0'@;
put 'aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxm'@;
put 'ZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9'@;
put 'NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShn'@;
put 'KSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKysp'@;
put 'dnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3'@;
put 'KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7'@;
put 'T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxRZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9UWUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9'@;
put 'PW5lJiYoUWU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9UWUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90'@;
put 'b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1m'@;
put 'dW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5j'@;
put 'b252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJv'@;
put 'dG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtl'@;
put 'UkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3Jkcyxn'@;
put 'Lmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0q'@;
put 'TGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5l'@;
put 'Z2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMu'@;
put 'bXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcx'@;
put 'MDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l'@;
put 'KCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9u'@;
put 'KHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBT'@;
put 'PXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9u'@;
put 'KGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0'@;
put 'aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0Nd'@;
put 'PTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9'@;
put 'PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUu'@;
put 'd29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMu'@;
put 'bGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxl'@;
put 'bmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90'@;
put 'eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hy'@;
put 'bihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0'@;
put 'aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9z'@;
put 'aXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJv'@;
put 'dG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZl'@;
put 'PzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxF'@;
put 'LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhp'@;
put 'cy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigw'@;
put 'IT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVn'@;
put 'YXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxn'@;
put 'LndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7'@;
put 'aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5w'@;
put 'cm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFy'@;
put 'IEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJt'@;
put 'dWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWlu'@;
put 'KExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAo'@;
put 'KSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9'@;
put 'PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5u'@;
put 'ZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYo'@;
put 'cD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndv'@;
put 'cmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUu'@;
put 'cHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhp'@;
put 'cy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJu'@;
put 'KDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3'@;
put 'MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9'@;
put 'KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJ'@;
put 'KDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlz'@;
put 'RXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7'@;
put 'eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0t'@;
put 'ID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxi'@;
put 'OkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgx'@;
put 'KSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5p'@;
put 'dXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6'@;
put 'KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygp'@;
put 'O3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1Mu'@;
put 'aXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhp'@;
put 'cy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118'@;
put 'PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxF'@;
put 'LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRp'@;
put 'dmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/'@;
put 'MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5l'@;
put 'Z2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jk'@;
put 'c1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNt'@;
put 'cChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUu'@;
put 'cHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUu'@;
put 'ZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJ'@;
put 'KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUu'@;
put 'cHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFk'@;
put 'ZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9'@;
put 'LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJ'@;
put 'U3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9'@;
put 'LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3Fy'@;
put 'dCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5j'@;
put 'dGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwi'@;
put 'cmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiks'@;
put 'dGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTky'@;
put 'IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1m'@;
put 'dW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihn'@;
put 'KXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRo'@;
put 'aXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1w'@;
put 'PWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11'@;
put 'bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJp'@;
put 'cCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihn'@;
put 'LEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMu'@;
put 'd29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBl'@;
put 'LmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMv'@;
put 'NjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0w'@;
put 'O1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107'@;
put 'dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9'@;
put 'LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0ko'@;
put 'MD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1l'@;
put 'P3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3Rv'@;
put 'dHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMp'@;
put 'O3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9y'@;
put 'Y2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3Zlcmlm'@;
put 'eTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0'@;
put 'aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5p'@;
put 'c1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygp'@;
put 'JiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1Jl'@;
put 'ZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGpl'@;
put 'PTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90'@;
put 'eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1'@;
put 'cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFy'@;
put 'IHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAh'@;
put 'PT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09'@;
put 'PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYo'@;
put 'Zy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5z'@;
put 'aGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4g'@;
put 'bmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49'@;
put 'MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0o'@;
put 'TT1SLm5tZChNKSx0aGlzKX0sMzQ4MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTcxNyksSz1SKDIzMTgpLEk9Uig5Nzg1KSxrPVIoOTA3MiksRT1SKDEwMjcpO2Z1bmN0aW9uIGooVil7RS5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Vn16KGosRSksai5wcm90b3R5'@;
put 'cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9oYXNoLnVwZGF0ZShWKX0sai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LE0uZXhwb3J0cz1mdW5jdGlvbihWKXtyZXR1cm4ibWQ1Ij09PShWPVYudG9Mb3dlckNhc2UoKSk/bmV3IEs6'@;
put 'InJtZDE2MCI9PT1WfHwicmlwZW1kMTYwIj09PVY/bmV3IEk6bmV3IGooayhWKSl9fSw4MDI4OihNLE8sUik9Pnt2YXIgej1SKDIzMTgpO00uZXhwb3J0cz1mdW5jdGlvbihLKXtyZXR1cm4obmV3IHopLnVwZGF0ZShLKS5kaWdlc3QoKX19LDgzNTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej1SKDU3MTcpLEs9UigxMDMxKSxJPVIoMTAyNyksaz1SKDk1MDkpLkJ1ZmZlcixFPVIoODAyOCksaj1SKDk3ODUpLFY9Uig5MDcyKSxCPWsuYWxsb2MoMTI4KTtmdW5jdGlvbiBZKFgsVSl7SS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgVSYmKFU9ay5mcm9tKFUp'@;
put 'KTt2YXIgcT0ic2hhNTEyIj09PVh8fCJzaGEzODQiPT09WD8xMjg6NjQ7dGhpcy5fYWxnPVgsdGhpcy5fa2V5PVUsVS5sZW5ndGg+cT9VPSgicm1kMTYwIj09PVg/bmV3IGo6VihYKSkudXBkYXRlKFUpLmRpZ2VzdCgpOlUubGVuZ3RoPHEmJihVPWsuY29uY2F0KFtVLEJdLHEpKTtmb3IodmFy'@;
put 'IGVlPXRoaXMuX2lwYWQ9ay5hbGxvY1Vuc2FmZShxKSx0ZT10aGlzLl9vcGFkPWsuYWxsb2NVbnNhZmUocSksb2U9MDtvZTxxO29lKyspZWVbb2VdPTU0XlVbb2VdLHRlW29lXT05Ml5VW29lXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09WD9uZXcgajpWKFgpLHRoaXMuX2hhc2gudXBkYXRlKGVl'@;
put 'KX16KFksSSksWS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihYKXt0aGlzLl9oYXNoLnVwZGF0ZShYKX0sWS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IGo6Vih0aGlzLl9hbGcp'@;
put 'KS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKFgpLmRpZ2VzdCgpfSxNLmV4cG9ydHM9ZnVuY3Rpb24oWCxVKXtyZXR1cm4icm1kMTYwIj09PShYPVgudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09WD9uZXcgWSgicm1kMTYwIixVKToibWQ1Ij09PVg/bmV3IEsoRSxVKTpuZXcgWShY'@;
put 'LFUpfX0sMTAzMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTcxNyksSz1SKDk1MDkpLkJ1ZmZlcixJPVIoMTAyNyksaz1LLmFsbG9jKDEyOCksRT02NDtmdW5jdGlvbiBqKFYsQil7SS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgQiYmKEI9Sy5mcm9tKEIp'@;
put 'KSx0aGlzLl9hbGc9Vix0aGlzLl9rZXk9QixCLmxlbmd0aD5FP0I9VihCKTpCLmxlbmd0aDxFJiYoQj1LLmNvbmNhdChbQixrXSxFKSk7Zm9yKHZhciBZPXRoaXMuX2lwYWQ9Sy5hbGxvY1Vuc2FmZShFKSxYPXRoaXMuX29wYWQ9Sy5hbGxvY1Vuc2FmZShFKSxVPTA7VTxFO1UrKylZW1VdPTU0'@;
put 'XkJbVV0sWFtVXT05Ml5CW1VdO3RoaXMuX2hhc2g9W1ldfXooaixJKSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFYpe3RoaXMuX2hhc2gucHVzaChWKX0sai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fYWxnKEsuY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1'@;
put 'cm4gdGhpcy5fYWxnKEsuY29uY2F0KFt0aGlzLl9vcGFkLFZdKSl9LE0uZXhwb3J0cz1qfSw1ODM1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Ty5yYW5kb21CeXRlcz1PLnJuZz1PLnBzZXVkb1JhbmRvbUJ5dGVzPU8ucHJuZz1SKDE3OTgpLE8uY3JlYXRlSGFzaD1PLkhhc2g9UigzNDgyKSxP'@;
put 'LmNyZWF0ZUhtYWM9Ty5IbWFjPVIoODM1NSk7dmFyIHo9Uig2MDQyKSxLPU9iamVjdC5rZXlzKHopLEk9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KEspO08uZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEl9O3Zh'@;
put 'ciBrPVIoNTYzMik7Ty5wYmtkZjI9ay5wYmtkZjIsTy5wYmtkZjJTeW5jPWsucGJrZGYyU3luYzt2YXIgRT1SKDM2MTQpO08uQ2lwaGVyPUUuQ2lwaGVyLE8uY3JlYXRlQ2lwaGVyPUUuY3JlYXRlQ2lwaGVyLE8uQ2lwaGVyaXY9RS5DaXBoZXJpdixPLmNyZWF0ZUNpcGhlcml2PUUuY3JlYXRl'@;
put 'Q2lwaGVyaXYsTy5EZWNpcGhlcj1FLkRlY2lwaGVyLE8uY3JlYXRlRGVjaXBoZXI9RS5jcmVhdGVEZWNpcGhlcixPLkRlY2lwaGVyaXY9RS5EZWNpcGhlcml2LE8uY3JlYXRlRGVjaXBoZXJpdj1FLmNyZWF0ZURlY2lwaGVyaXYsTy5nZXRDaXBoZXJzPUUuZ2V0Q2lwaGVycyxPLmxpc3RDaXBo'@;
put 'ZXJzPUUubGlzdENpcGhlcnM7dmFyIGo9UigyNjA3KTtPLkRpZmZpZUhlbGxtYW5Hcm91cD1qLkRpZmZpZUhlbGxtYW5Hcm91cCxPLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1qLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxPLmdldERpZmZpZUhlbGxtYW49ai5nZXREaWZmaWVIZWxsbWFu'@;
put 'LE8uY3JlYXRlRGlmZmllSGVsbG1hbj1qLmNyZWF0ZURpZmZpZUhlbGxtYW4sTy5EaWZmaWVIZWxsbWFuPWouRGlmZmllSGVsbG1hbjt2YXIgVj1SKDQ3NDMpO08uY3JlYXRlU2lnbj1WLmNyZWF0ZVNpZ24sTy5TaWduPVYuU2lnbixPLmNyZWF0ZVZlcmlmeT1WLmNyZWF0ZVZlcmlmeSxPLlZl'@;
put 'cmlmeT1WLlZlcmlmeSxPLmNyZWF0ZUVDREg9Uig2MzkzKTt2YXIgQj1SKDc5MDApO08ucHVibGljRW5jcnlwdD1CLnB1YmxpY0VuY3J5cHQsTy5wcml2YXRlRW5jcnlwdD1CLnByaXZhdGVFbmNyeXB0LE8ucHVibGljRGVjcnlwdD1CLnB1YmxpY0RlY3J5cHQsTy5wcml2YXRlRGVjcnlwdD1C'@;
put 'LnByaXZhdGVEZWNyeXB0O3ZhciBZPVIoNzk2Myk7Ty5yYW5kb21GaWxsPVkucmFuZG9tRmlsbCxPLnJhbmRvbUZpbGxTeW5jPVkucmFuZG9tRmlsbFN5bmMsTy5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihbInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBp'@;
put 'cyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwid2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMiLCJodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiXS5qb2luKCJcbiIpKX0sTy5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9D'@;
put 'SEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMs'@;
put 'UlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSw1MDU2OihN'@;
put 'LE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcjtjb25zdHtUcmFuc2Zvcm06S309UigyODMwKSxJPXouZnJvbShbMjM5LDE4NywxOTFdKTtjbGFzcyBrIGV4dGVuZHMgS3tjb25zdHJ1Y3RvcihjZT17fSl7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTohMCwuLi5jZX0pO2NvbnN0IEc9e307'@;
put 'bGV0IGI7Zm9yKGxldCBEIGluIGNlKUdbQihEKV09Y2VbRF07aWYoYj10aGlzLm5vcm1hbGl6ZShHKSl0aHJvdyBiO3N3aXRjaChHLnJlY29yZF9kZWxpbWl0ZXIpe2Nhc2UiYXV0byI6Ry5yZWNvcmRfZGVsaW1pdGVyPW51bGw7YnJlYWs7Y2FzZSJ1bml4IjpHLnJlY29yZF9kZWxpbWl0ZXI9'@;
put 'IlxuIjticmVhaztjYXNlIm1hYyI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcciI7YnJlYWs7Y2FzZSJ3aW5kb3dzIjpHLnJlY29yZF9kZWxpbWl0ZXI9IlxyXG4iO2JyZWFrO2Nhc2UiYXNjaWkiOkcucmVjb3JkX2RlbGltaXRlcj0iXHgxZSI7YnJlYWs7Y2FzZSJ1bmljb2RlIjpHLnJlY29yZF9k'@;
put 'ZWxpbWl0ZXI9Ilx1MjAyOCJ9dGhpcy5vcHRpb25zPUcsdGhpcy5zdGF0ZT17c3RvcDohMX0sdGhpcy5pbmZvPXtyZWNvcmRzOjB9fW5vcm1hbGl6ZShjZSl7aWYobnVsbD09Y2UuYm9tfHwhMT09PWNlLmJvbSljZS5ib209ITE7ZWxzZSBpZighMCE9PWNlLmJvbSlyZXR1cm4gbmV3IGooIkNT'@;
put 'Vl9PUFRJT05fQk9PTEVBTl9JTlZBTElEX1RZUEUiLFsib3B0aW9uIGBib21gIGlzIG9wdGlvbmFsIGFuZCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSwiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5ib20pfWBdKTtpZihudWxsPT1jZS5kZWxpbWl0ZXIpY2UuZGVsaW1pdGVyPSIsIjtlbHNl'@;
put 'IGlmKHouaXNCdWZmZXIoY2UuZGVsaW1pdGVyKSljZS5kZWxpbWl0ZXI9Y2UuZGVsaW1pdGVyLnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLmRlbGltaXRlcilyZXR1cm4gbmV3IGooIkNTVl9PUFRJT05fREVMSU1JVEVSX0lOVkFMSURfVFlQRSIsWyJvcHRpb24gYGRl'@;
put 'bGltaXRlcmAgbXVzdCBiZSBhIGJ1ZmZlciBvciBhIHN0cmluZywiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5kZWxpbWl0ZXIpfWBdKTtpZihudWxsPT1jZS5xdW90ZSljZS5xdW90ZT0nIic7ZWxzZSBpZighMD09PWNlLnF1b3RlKWNlLnF1b3RlPSciJztlbHNlIGlmKCExPT09Y2UucXVv'@;
put 'dGUpY2UucXVvdGU9IiI7ZWxzZSBpZih6LmlzQnVmZmVyKGNlLnF1b3RlKSljZS5xdW90ZT1jZS5xdW90ZS50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5xdW90ZSlyZXR1cm4gbmV3IGooIkNTVl9PUFRJT05fUVVPVEVfSU5WQUxJRF9UWVBFIixbIm9wdGlvbiBgcXVv'@;
put 'dGVgIG11c3QgYmUgYSBib29sZWFuLCBhIGJ1ZmZlciBvciBhIHN0cmluZywiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5xdW90ZSl9YF0pO2lmKG51bGwhPWNlLnF1b3RlZHx8KGNlLnF1b3RlZD0hMSksbnVsbCE9Y2UucXVvdGVkX2VtcHR5fHwoY2UucXVvdGVkX2VtcHR5PXZvaWQgMCks'@;
put 'bnVsbD09Y2UucXVvdGVkX21hdGNofHwhMT09PWNlLnF1b3RlZF9tYXRjaD9jZS5xdW90ZWRfbWF0Y2g9bnVsbDpBcnJheS5pc0FycmF5KGNlLnF1b3RlZF9tYXRjaCl8fChjZS5xdW90ZWRfbWF0Y2g9W2NlLnF1b3RlZF9tYXRjaF0pLGNlLnF1b3RlZF9tYXRjaClmb3IobGV0IEcgb2YgY2Uu'@;
put 'cXVvdGVkX21hdGNoKXtjb25zdCBiPUcgaW5zdGFuY2VvZiBSZWdFeHA7aWYoInN0cmluZyIhPXR5cGVvZiBHJiYhYilyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiBxdW90ZWRfbWF0Y2ggbXVzdCBiZSBhIHN0cmluZyBvciBhIHJlZ2V4LCBnb3QgJHtKU09OLnN0cmluZ2lmeShHKX1g'@;
put 'KX1pZihudWxsIT1jZS5xdW90ZWRfc3RyaW5nfHwoY2UucXVvdGVkX3N0cmluZz0hMSksbnVsbCE9Y2UuZW9mfHwoY2UuZW9mPSEwKSxudWxsPT1jZS5lc2NhcGUpY2UuZXNjYXBlPSciJztlbHNlIGlmKHouaXNCdWZmZXIoY2UuZXNjYXBlKSljZS5lc2NhcGU9Y2UuZXNjYXBlLnRvU3RyaW5n'@;
put 'KCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLmVzY2FwZSlyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiBlc2NhcGUgbXVzdCBiZSBhIGJ1ZmZlciBvciBhIHN0cmluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UuZXNjYXBlKX1gKTtpZihjZS5lc2NhcGUubGVuZ3RoPjEpcmV0'@;
put 'dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogZXNjYXBlIG11c3QgYmUgb25lIGNoYXJhY3RlciwgZ290ICR7Y2UuZXNjYXBlLmxlbmd0aH0gY2hhcmFjdGVyc2ApO2lmKG51bGwhPWNlLmhlYWRlcnx8KGNlLmhlYWRlcj0hMSksY2UuY29sdW1ucz10aGlzLm5vcm1hbGl6ZV9jb2x1bW5zKGNl'@;
put 'LmNvbHVtbnMpLG51bGwhPWNlLnF1b3RlZHx8KGNlLnF1b3RlZD0hMSksbnVsbCE9Y2UuY2FzdHx8KGNlLmNhc3Q9e30pLG51bGwhPWNlLmNhc3QuYmlnaW50fHwoY2UuY2FzdC5iaWdpbnQ9Rz0+IiIrRyksbnVsbCE9Y2UuY2FzdC5ib29sZWFufHwoY2UuY2FzdC5ib29sZWFuPUc9Pkc/IjEi'@;
put 'OiIiKSxudWxsIT1jZS5jYXN0LmRhdGV8fChjZS5jYXN0LmRhdGU9Rz0+IiIrRy5nZXRUaW1lKCkpLG51bGwhPWNlLmNhc3QubnVtYmVyfHwoY2UuY2FzdC5udW1iZXI9Rz0+IiIrRyksbnVsbCE9Y2UuY2FzdC5vYmplY3R8fChjZS5jYXN0Lm9iamVjdD1HPT5KU09OLnN0cmluZ2lmeShHKSks'@;
put 'bnVsbCE9Y2UuY2FzdC5zdHJpbmd8fChjZS5jYXN0LnN0cmluZz1mdW5jdGlvbihHKXtyZXR1cm4gR30pLG51bGw9PWNlLnJlY29yZF9kZWxpbWl0ZXIpY2UucmVjb3JkX2RlbGltaXRlcj0iXG4iO2Vsc2UgaWYoei5pc0J1ZmZlcihjZS5yZWNvcmRfZGVsaW1pdGVyKSljZS5yZWNvcmRfZGVs'@;
put 'aW1pdGVyPWNlLnJlY29yZF9kZWxpbWl0ZXIudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgY2UucmVjb3JkX2RlbGltaXRlcilyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiByZWNvcmRfZGVsaW1pdGVyIG11c3QgYmUgYSBidWZmZXIgb3IgYSBzdHJpbmcsIGdvdCAk'@;
put 'e0pTT04uc3RyaW5naWZ5KGNlLnJlY29yZF9kZWxpbWl0ZXIpfWApfV90cmFuc2Zvcm0oY2UsRyxiKXtpZighMD09PXRoaXMuc3RhdGUuc3RvcClyZXR1cm47aWYoIUFycmF5LmlzQXJyYXkoY2UpJiYib2JqZWN0IiE9dHlwZW9mIGNlKXJldHVybiB0aGlzLnN0YXRlLnN0b3A9ITAsYihFcnJv'@;
put 'cihgSW52YWxpZCBSZWNvcmQ6IGV4cGVjdCBhbiBhcnJheSBvciBhbiBvYmplY3QsIGdvdCAke0pTT04uc3RyaW5naWZ5KGNlKX1gKSk7aWYoMD09PXRoaXMuaW5mby5yZWNvcmRzKWlmKEFycmF5LmlzQXJyYXkoY2UpKXtpZighMD09PXRoaXMub3B0aW9ucy5oZWFkZXImJiF0aGlzLm9wdGlv'@;
put 'bnMuY29sdW1ucylyZXR1cm4gdGhpcy5zdGF0ZS5zdG9wPSEwLGIoRXJyb3IoIlVuZGlzY292ZXJhYmxlIENvbHVtbnM6IGhlYWRlciBvcHRpb24gcmVxdWlyZXMgY29sdW1uIG9wdGlvbiBvciBvYmplY3QgcmVjb3JkcyIpKX1lbHNlIG51bGwhPXRoaXMub3B0aW9ucy5jb2x1bW5zfHwodGhp'@;
put 'cy5vcHRpb25zLmNvbHVtbnM9dGhpcy5ub3JtYWxpemVfY29sdW1ucyhPYmplY3Qua2V5cyhjZSkpKTswPT09dGhpcy5pbmZvLnJlY29yZHMmJih0aGlzLmJvbSgpLHRoaXMuaGVhZGVycygpKTt0cnl7dGhpcy5lbWl0KCJyZWNvcmQiLGNlLHRoaXMuaW5mby5yZWNvcmRzKX1jYXRjaChIKXty'@;
put 'ZXR1cm4gdGhpcy5zdGF0ZS5zdG9wPSEwLHRoaXMuZW1pdCgiZXJyb3IiLEgpfWxldCBEO2lmKHRoaXMub3B0aW9ucy5lb2Ype2lmKEQ9dGhpcy5zdHJpbmdpZnkoY2UpLHZvaWQgMD09PUQpcmV0dXJuO0QrPXRoaXMub3B0aW9ucy5yZWNvcmRfZGVsaW1pdGVyfWVsc2V7aWYoRD10aGlzLnN0'@;
put 'cmluZ2lmeShjZSksdm9pZCAwPT09RClyZXR1cm47KHRoaXMub3B0aW9ucy5oZWFkZXJ8fHRoaXMuaW5mby5yZWNvcmRzKSYmKEQ9dGhpcy5vcHRpb25zLnJlY29yZF9kZWxpbWl0ZXIrRCl9dGhpcy5pbmZvLnJlY29yZHMrKyx0aGlzLnB1c2goRCksYigpfV9mbHVzaChjZSl7MD09PXRoaXMu'@;
put 'aW5mby5yZWNvcmRzJiYodGhpcy5ib20oKSx0aGlzLmhlYWRlcnMoKSksY2UoKX1zdHJpbmdpZnkoY2UsRz0hMSl7aWYoIm9iamVjdCIhPXR5cGVvZiBjZSlyZXR1cm4gY2U7Y29uc3R7Y29sdW1uczpifT10aGlzLm9wdGlvbnMsSD1bXTtpZihBcnJheS5pc0FycmF5KGNlKSl7YiYmY2Uuc3Bs'@;
put 'aWNlKGIubGVuZ3RoKTtmb3IobGV0IGc9MDtnPGNlLmxlbmd0aDtnKyspe2NvbnN0IEM9Y2VbZ10sW1Msdl09dGhpcy5fX2Nhc3QoQyx7aW5kZXg6Zyxjb2x1bW46ZyxyZWNvcmRzOnRoaXMuaW5mby5yZWNvcmRzLGhlYWRlcjpHfSk7aWYoUylyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9y'@;
put 'IixTKTtIW2ddPVt2LENdfX1lbHNlIGlmKGIpZm9yKGxldCBnPTA7ZzxiLmxlbmd0aDtnKyspe2NvbnN0IEM9aGUoY2UsYltnXS5rZXkpLFtTLHZdPXRoaXMuX19jYXN0KEMse2luZGV4OmcsY29sdW1uOmJbZ10ua2V5LHJlY29yZHM6dGhpcy5pbmZvLnJlY29yZHMsaGVhZGVyOkd9KTtpZihT'@;
put 'KXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLFMpO0hbZ109W3YsQ119ZWxzZSBmb3IobGV0IGcgb2YgY2Upe2NvbnN0IEM9Y2VbZ10sW1Msdl09dGhpcy5fX2Nhc3QoQyx7aW5kZXg6aSxjb2x1bW46YltpXS5rZXkscmVjb3Jkczp0aGlzLmluZm8ucmVjb3JkcyxoZWFkZXI6R30pO2lm'@;
put 'KFMpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsUyk7SC5wdXNoKFt2LENdKX1sZXQgTj0iIjtmb3IobGV0IGc9MDtnPEgubGVuZ3RoO2crKyl7bGV0IEMsUyxbdixwXT1IW2ddO2lmKCJzdHJpbmciPT10eXBlb2YgdilDPXRoaXMub3B0aW9ucztlbHNlIGlmKFYodikpe2lmKEM9dix2'@;
put 'PUMudmFsdWUsZGVsZXRlIEMudmFsdWUsInN0cmluZyIhPXR5cGVvZiB2JiZudWxsIT12KXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLEVycm9yKGBJbnZhbGlkIENhc3RpbmcgVmFsdWU6IHJldHVybmVkIHZhbHVlIG11c3QgcmV0dXJuIGEgc3RyaW5nLCBudWxsIG9yIHVuZGVmaW5l'@;
put 'ZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodil9YCkpO2lmKEM9ey4uLnRoaXMub3B0aW9ucywuLi5DfSxTPXRoaXMubm9ybWFsaXplKEMpKXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLFMpfWVsc2V7aWYobnVsbCE9dilyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixFcnJvcihg'@;
put 'SW52YWxpZCBDYXN0aW5nIFZhbHVlOiByZXR1cm5lZCB2YWx1ZSBtdXN0IHJldHVybiBhIHN0cmluZywgYW4gb2JqZWN0LCBudWxsIG9yIHVuZGVmaW5lZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodil9YCkpO0M9dGhpcy5vcHRpb25zfWNvbnN0e2RlbGltaXRlcjp3LGVzY2FwZTpKLHF1b3Rl'@;
put 'Om5lLHF1b3RlZDpkZSxxdW90ZWRfZW1wdHk6ZmUscXVvdGVkX3N0cmluZzp4ZSxxdW90ZWRfbWF0Y2g6TGUscmVjb3JkX2RlbGltaXRlcjpGZX09QztpZih2KXtpZigic3RyaW5nIiE9dHlwZW9mIHYpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLEVycm9yKGBGb3JtYXR0ZXIgbXVzdCByZXR1'@;
put 'cm4gYSBzdHJpbmcsIG51bGwgb3IgdW5kZWZpbmVkLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2KX1gKSksbnVsbDtjb25zdCBPZT13Lmxlbmd0aCYmdi5pbmRleE9mKHcpPj0wLGplPSIiIT09bmUmJnYuaW5kZXhPZihuZSk+PTAsV2U9di5pbmRleE9mKEopPj0wJiZKIT09bmUsS2U9di5pbmRl'@;
put 'eE9mKEZlKT49MCxZZT14ZSYmInN0cmluZyI9PXR5cGVvZiBwO2xldCBRZT1MZSYmTGUuZmlsdGVyKFBlPT4ic3RyaW5nIj09dHlwZW9mIFBlPy0xIT09di5pbmRleE9mKFBlKTpQZS50ZXN0KHYpKTtRZT1RZSYmUWUubGVuZ3RoPjA7Y29uc3QgbHQ9ITA9PT1qZXx8T2V8fEtlfHxkZXx8WWV8'@;
put 'fFFlO2lmKCEwPT09bHQmJiEwPT09V2Upe2NvbnN0IFBlPSJcXCI9PT1KP25ldyBSZWdFeHAoSitKLCJnIik6bmV3IFJlZ0V4cChKLCJnIik7dj12LnJlcGxhY2UoUGUsSitKKX1pZighMD09PWplKXtjb25zdCBQZT1uZXcgUmVnRXhwKG5lLCJnIik7dj12LnJlcGxhY2UoUGUsSituZSl9ITA9'@;
put 'PT1sdCYmKHY9bmUrdituZSksTis9dn1lbHNlKCEwPT09ZmV8fCIiPT09cCYmITA9PT14ZSYmITEhPT1mZSkmJihOKz1uZStuZSk7ZyE9PUgubGVuZ3RoLTEmJihOKz13KX1yZXR1cm4gTn1ib20oKXshMD09PXRoaXMub3B0aW9ucy5ib20mJnRoaXMucHVzaChJKX1oZWFkZXJzKCl7aWYoITE9'@;
put 'PT10aGlzLm9wdGlvbnMuaGVhZGVyfHx2b2lkIDA9PT10aGlzLm9wdGlvbnMuY29sdW1ucylyZXR1cm47bGV0IGNlPXRoaXMub3B0aW9ucy5jb2x1bW5zLm1hcChHPT5HLmhlYWRlcik7Y2U9dGhpcy5vcHRpb25zLmVvZj90aGlzLnN0cmluZ2lmeShjZSwhMCkrdGhpcy5vcHRpb25zLnJlY29y'@;
put 'ZF9kZWxpbWl0ZXI6dGhpcy5zdHJpbmdpZnkoY2UpLHRoaXMucHVzaChjZSl9X19jYXN0KGNlLEcpe2NvbnN0IGI9dHlwZW9mIGNlO3RyeXtyZXR1cm4ic3RyaW5nIj09PWI/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5zdHJpbmcoY2UsRyldOiJiaWdpbnQiPT09Yj9bdm9pZCAwLHRoaXMu'@;
put 'b3B0aW9ucy5jYXN0LmJpZ2ludChjZSxHKV06Im51bWJlciI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QubnVtYmVyKGNlLEcpXToiYm9vbGVhbiI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QuYm9vbGVhbihjZSxHKV06Y2UgaW5zdGFuY2VvZiBEYXRlP1t2b2lkIDAsdGhp'@;
put 'cy5vcHRpb25zLmNhc3QuZGF0ZShjZSxHKV06Im9iamVjdCI9PT1iJiZudWxsIT09Y2U/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5vYmplY3QoY2UsRyldOlt2b2lkIDAsY2UsY2VdfWNhdGNoKEQpe3JldHVybltEXX19bm9ybWFsaXplX2NvbHVtbnMoY2Upe2lmKG51bGwhPWNlKXtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGNlKXRocm93IEVycm9yKCdJbnZhbGlkIG9wdGlvbiAiY29sdW1ucyI6IGV4cGVjdCBhbiBhcnJheSBvciBhbiBvYmplY3QnKTtpZihBcnJheS5pc0FycmF5KGNlKSl7Y29uc3QgRz1bXTtmb3IobGV0IGIgb2YgY2UpaWYoInN0cmluZyI9PXR5cGVvZiBiKUcucHVz'@;
put 'aCh7a2V5OmIsaGVhZGVyOmJ9KTtlbHNle2lmKCJvYmplY3QiIT10eXBlb2YgYnx8dm9pZCAwPT09Ynx8QXJyYXkuaXNBcnJheShiKSl0aHJvdyBFcnJvcigiSW52YWxpZCBjb2x1bW4gZGVmaW5pdGlvbjogZXhwZWN0IGEgc3RyaW5nIG9yIGFuIG9iamVjdCIpO2lmKCFiLmtleSl0aHJvdyBF'@;
put 'cnJvcignSW52YWxpZCBjb2x1bW4gZGVmaW5pdGlvbjogcHJvcGVydHkgImtleSIgaXMgcmVxdWlyZWQnKTt2b2lkIDA9PT1iLmhlYWRlciYmKGIuaGVhZGVyPWIua2V5KSxHLnB1c2goYil9Y2U9R31lbHNle2NvbnN0IEc9W107Zm9yKGxldCBiIGluIGNlKUcucHVzaCh7a2V5OmIsaGVhZGVy'@;
put 'OmNlW2JdfSk7Y2U9R31yZXR1cm4gY2V9fX1jb25zdCBFPWZ1bmN0aW9uKCl7bGV0IHVlLGNlLEc7Zm9yKGxldCBEIGluIGFyZ3VtZW50cyl7Y29uc3QgSD1hcmd1bWVudHNbRF0sTj10eXBlb2YgSDtpZih2b2lkIDA9PT11ZSYmQXJyYXkuaXNBcnJheShIKSl1ZT1IO2Vsc2UgaWYodm9pZCAw'@;
put 'PT09Y2UmJlYoSCkpY2U9SDtlbHNle2lmKHZvaWQgMCE9PUd8fCJmdW5jdGlvbiIhPT1OKXRocm93IG5ldyBqKCJDU1ZfSU5WQUxJRF9BUkdVTUVOVCIsWyJJbnZhbGlkIGFyZ3VtZW50OiIsYGdvdCAke0pTT04uc3RyaW5naWZ5KEgpfSBhdCBpbmRleCAke0R9YF0pO0c9SH19Y29uc3QgYj1u'@;
put 'ZXcgayhjZSk7aWYoRyl7Y29uc3QgRD1bXTtiLm9uKCJyZWFkYWJsZSIsZnVuY3Rpb24oKXtsZXQgSDtmb3IoO251bGwhPT0oSD10aGlzLnJlYWQoKSk7KUQucHVzaChIKX0pLGIub24oImVycm9yIixmdW5jdGlvbihIKXtHKEgpfSksYi5vbigiZW5kIixmdW5jdGlvbigpe0codm9pZCAwLEQu'@;
put 'am9pbigiIikpfSl9aWYodm9pZCAwIT09dWUpaWYoImZ1bmN0aW9uIj09dHlwZW9mIHNldEltbWVkaWF0ZSlzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKXtmb3IobGV0IEQgb2YgdWUpYi53cml0ZShEKTtiLmVuZCgpfSk7ZWxzZXtmb3IobGV0IEQgb2YgdWUpYi53cml0ZShEKTtiLmVuZCgpfXJl'@;
put 'dHVybiBifTtjbGFzcyBqIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoY2UsRywuLi5iKXtBcnJheS5pc0FycmF5KEcpJiYoRz1HLmpvaW4oIiAiKSksc3VwZXIoRyksdm9pZCAwIT09RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsaiksdGhp'@;
put 'cy5jb2RlPWNlO2Zvcihjb25zdCBEIG9mIGIpZm9yKGNvbnN0IEggaW4gRCl7Y29uc3QgTj1EW0hdO3RoaXNbSF09ei5pc0J1ZmZlcihOKT9OLnRvU3RyaW5nKCk6bnVsbD09Tj9OOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoTikpfX19RS5TdHJpbmdpZmllcj1rLEUuQ3N2RXJyb3I9aixN'@;
put 'LmV4cG9ydHM9RTtjb25zdCBWPWZ1bmN0aW9uKHVlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHVlJiZudWxsIT09dWUmJiFBcnJheS5pc0FycmF5KHVlKX0sQj1mdW5jdGlvbih1ZSl7cmV0dXJuIHVlLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihjZSxHKXtyZXR1cm4iXyIrRy50b0xv'@;
put 'd2VyQ2FzZSgpfSl9LFk9Ii4iLmNoYXJDb2RlQXQoMCksWD0vXFwoXFwpPy9nLFU9UmVnRXhwKCJbXi5bXFxdXSt8XFxbKD86KFteXCInXVteW10qKXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKSIs'@;
put 'ImciKSxxPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGVlPS9eXHcqJC8sdGU9ZnVuY3Rpb24odWUpe2NvbnN0IGNlPXR5cGVvZiB1ZTtyZXR1cm4ic3ltYm9sIj09PWNlfHwib2JqZWN0Ij09PWNlJiZ1ZSYmIltvYmplY3QgU3ltYm9sXSI9PT1P'@;
put 'YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodWUpfSxzZT1mdW5jdGlvbih1ZSl7aWYoInN0cmluZyI9PXR5cGVvZiB1ZXx8dGUodWUpKXJldHVybiB1ZTtjb25zdCBjZT1gJHt1ZX1gO3JldHVybiIwIj09Y2UmJjEvdWU9PS1JTkZJTklUWT8iLTAiOmNlfSxoZT1mdW5jdGlvbih1ZSxj'@;
put 'ZSl7bGV0IEc9MDtjb25zdCBiPShjZT1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodWUpP3VlOmZ1bmN0aW9uKEcsYil7aWYoQXJyYXkuaXNBcnJheShHKSlyZXR1cm4hMTtjb25zdCBEPXR5cGVvZiBHO3JldHVybiEoIm51bWJlciIhPT1EJiYic3ltYm9sIiE9PUQmJiJi'@;
put 'b29sZWFuIiE9PUQmJkcmJiF0ZShHKSl8fGVlLnRlc3QoRyl8fCFxLnRlc3QoRyl8fG51bGwhPWImJkcgaW4gT2JqZWN0KGIpfSh1ZSxjZSk/W3VlXTpmdW5jdGlvbihHKXtjb25zdCBiPVtdO3JldHVybiBHLmNoYXJDb2RlQXQoMCk9PT1ZJiZiLnB1c2goIiIpLEcucmVwbGFjZShVLGZ1bmN0'@;
put 'aW9uKEQsSCxOLGcpe2xldCBDPUQ7Tj9DPWcucmVwbGFjZShYLCIkMSIpOkgmJihDPUgudHJpbSgpKSxiLnB1c2goQyl9KSxifSh1ZSl9KGNlLHVlKSkubGVuZ3RoO2Zvcig7bnVsbCE9dWUmJkc8YjspdWU9dWVbc2UoY2VbRysrXSldO3JldHVybiBHJiZHPT09Yj91ZTp2b2lkIDB9fSw3NTY1'@;
put 'OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcjtjb25zdCBLPVIoNTA1Nikse1N0cmluZ0RlY29kZXI6SX09UigyNTUzKTtNLmV4cG9ydHM9ZnVuY3Rpb24oayxFPXt9KXtjb25zdCBqPVtdO2Z1bmN0aW9uIFYoWSl7WSYmai5wdXNoKFkudG9TdHJpbmcoKSl9ei5pc0J1ZmZlcihrKSYm'@;
put 'KGs9KG5ldyBJKS53cml0ZShrKSk7bGV0IEI9bmV3IEsuU3RyaW5naWZpZXIoRSk7Qi5vbigiZGF0YSIsVik7Zm9yKGxldCBZIG9mIGspQi53cml0ZShZKTtyZXR1cm4gQi5lbmQoKSxCLm9mZigiZGF0YSIsViksai5qb2luKCIiKX19LDQyODk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'ej1SKDIyMTUpLEs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImZvbyIpLEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxrPUFycmF5LnByb3RvdHlwZS5jb25jYXQsRT1PYmplY3QuZGVmaW5lUHJvcGVydHksaj1SKDEwNDQpKCksVj1FJiZq'@;
put 'LEI9ZnVuY3Rpb24oWCxVLHEsZWUpe2lmKFUgaW4gWClpZighMD09PWVlKXtpZihYW1VdPT09cSlyZXR1cm59ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YodGU9ZWUpfHwiW29iamVjdCBGdW5jdGlvbl0iIT09SS5jYWxsKHRlKXx8IWVlKCkpcmV0dXJuO3ZhciB0ZTtWP0UoWCxVLHtjb25m'@;
put 'aWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpxLHdyaXRhYmxlOiEwfSk6WFtVXT1xfSxZPWZ1bmN0aW9uKFgsVSl7dmFyIHE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp7fSxlZT16KFUpO0smJihlZT1rLmNhbGwoZWUsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9s'@;
put 'cyhVKSkpO2Zvcih2YXIgdGU9MDt0ZTxlZS5sZW5ndGg7dGUrPTEpQihYLGVlW3RlXSxVW2VlW3RlXV0scVtlZVt0ZV1dKX07WS5zdXBwb3J0c0Rlc2NyaXB0b3JzPSEhVixNLmV4cG9ydHM9WX0sNTI1MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO08udXRpbHM9UigxMjc4KSxPLkNpcGhlcj1S'@;
put 'KDU3NTYpLE8uREVTPVIoMzI3KSxPLkNCQz1SKDkwNTEpLE8uRURFPVIoNjUxKX0sOTA1MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0NiksSz1SKDU3MTcpLEk9e307ZnVuY3Rpb24gayhFKXt6LmVxdWFsKEUubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5p'@;
put 'dj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBqPTA7ajx0aGlzLml2Lmxlbmd0aDtqKyspdGhpcy5pdltqXT1FW2pdfU8uaW5zdGFudGlhdGU9ZnVuY3Rpb24oRSl7ZnVuY3Rpb24gaihYKXtFLmNhbGwodGhpcyxYKSx0aGlzLl9jYmNJbml0KCl9SyhqLEUpO2Zvcih2YXIgVj1PYmplY3Qua2V5cyhJ'@;
put 'KSxCPTA7QjxWLmxlbmd0aDtCKyspe3ZhciBZPVZbQl07ai5wcm90b3R5cGVbWV09SVtZXX1yZXR1cm4gai5jcmVhdGU9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBqKFgpfSxqfSxJLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEU9bmV3IGsodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0'@;
put 'ZT1FfSxJLl91cGRhdGU9ZnVuY3Rpb24oRSxqLFYsQil7dmFyIFg9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLFU9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIHE9MDtxPHRoaXMuYmxvY2tTaXplO3ErKylVW3FdXj1FW2orcV07'@;
put 'Zm9yKFguX3VwZGF0ZS5jYWxsKHRoaXMsVSwwLFYsQikscT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKVVbcV09VltCK3FdfWVsc2V7Zm9yKFguX3VwZGF0ZS5jYWxsKHRoaXMsRSxqLFYsQikscT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKVZbQitxXV49VVtxXTtmb3IocT0wO3E8dGhpcy5ibG9j'@;
put 'a1NpemU7cSsrKVVbcV09RVtqK3FdfX19LDU3NTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpO2Z1bmN0aW9uIEsoSSl7dGhpcy5vcHRpb25zPUksdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVy'@;
put 'PW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MH1NLmV4cG9ydHM9SyxLLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sSy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEkpe3JldHVybiAwPT09SS5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3Ro'@;
put 'aXMuX3VwZGF0ZURlY3J5cHQoSSk6dGhpcy5fdXBkYXRlRW5jcnlwdChJKX0sSy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihJLGspe2Zvcih2YXIgRT1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsSS5sZW5ndGgtayksaj0wO2o8RTtqKyspdGhpcy5idWZm'@;
put 'ZXJbdGhpcy5idWZmZXJPZmYral09SVtrK2pdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9RSxFfSxLLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsSSxrKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXpl'@;
put 'fSxLLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihJKXt2YXIgaz0wLEU9MCxWPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK0kubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYoays9dGhpcy5fYnVmZmVyKEks'@;
put 'ayksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihFKz10aGlzLl9mbHVzaEJ1ZmZlcihWLEUpKSk7Zm9yKHZhciBCPUkubGVuZ3RoLShJLmxlbmd0aC1rKSV0aGlzLmJsb2NrU2l6ZTtrPEI7ays9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKEksayxWLEUpLEUrPXRo'@;
put 'aXMuYmxvY2tTaXplO2Zvcig7azxJLmxlbmd0aDtrKyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09SVtrXTtyZXR1cm4gVn0sSy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oSSl7Zm9yKHZhciBrPTAsRT0wLGo9TWF0aC5jZWlsKCh0aGlz'@;
put 'LmJ1ZmZlck9mZitJLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsVj1uZXcgQXJyYXkoaip0aGlzLmJsb2NrU2l6ZSk7aj4wO2otLSlrKz10aGlzLl9idWZmZXIoSSxrKSxFKz10aGlzLl9mbHVzaEJ1ZmZlcihWLEUpO3JldHVybiBrKz10aGlzLl9idWZmZXIoSSxrKSxWfSxLLnByb3RvdHlw'@;
put 'ZS5maW5hbD1mdW5jdGlvbihJKXt2YXIgayxFO3JldHVybiBJJiYoaz10aGlzLnVwZGF0ZShJKSksRT0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksaz9rLmNvbmNhdChFKTpFfSxLLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9u'@;
put 'KEksayl7aWYoMD09PWspcmV0dXJuITE7Zm9yKDtrPEkubGVuZ3RoOylJW2srK109MDtyZXR1cm4hMH0sSy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBJPW5ldyBBcnJheSh0'@;
put 'aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEksMCksSX0sSy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEkpe3JldHVybiBJfSxLLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7ei5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJs'@;
put 'b2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgST1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihJLDApLHRoaXMuX3VucGFkKEkpfX0sMzI3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KSxLPVIoNTcx'@;
put 'NyksST1SKDEyNzgpLGs9Uig1NzU2KTtmdW5jdGlvbiBFKCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIGooQil7ay5jYWxsKHRoaXMsQik7dmFyIFk9bmV3IEU7dGhpcy5fZGVzU3RhdGU9WSx0aGlzLmRlcml2ZUtleXMoWSxCLmtleSl9SyhqLGspLE0u'@;
put 'ZXhwb3J0cz1qLGouY3JlYXRlPWZ1bmN0aW9uKEIpe3JldHVybiBuZXcgaihCKX07dmFyIFY9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO2oucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oQixZKXtCLmtleXM9bmV3IEFycmF5KDMyKSx6LmVxdWFsKFkubGVuZ3RoLHRo'@;
put 'aXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgWD1JLnJlYWRVSW50MzJCRShZLDApLFU9SS5yZWFkVUludDMyQkUoWSw0KTtJLnBjMShYLFUsQi50bXAsMCksWD1CLnRtcFswXSxVPUIudG1wWzFdO2Zvcih2YXIgcT0wO3E8Qi5rZXlzLmxlbmd0aDtxKz0yKXt2YXIgZWU9'@;
put 'VltxPj4+MV07WD1JLnIyOHNobChYLGVlKSxVPUkucjI4c2hsKFUsZWUpLEkucGMyKFgsVSxCLmtleXMscSl9fSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEIsWSxYLFUpe3ZhciBxPXRoaXMuX2Rlc1N0YXRlLGVlPUkucmVhZFVJbnQzMkJFKEIsWSksdGU9SS5yZWFkVUludDMyQkUo'@;
put 'QixZKzQpO0kuaXAoZWUsdGUscS50bXAsMCksZWU9cS50bXBbMF0sdGU9cS50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQocSxlZSx0ZSxxLnRtcCwwKTp0aGlzLl9kZWNyeXB0KHEsZWUsdGUscS50bXAsMCksdGU9cS50bXBbMV0sSS53cml0ZVVJbnQzMkJFKFgs'@;
put 'ZWU9cS50bXBbMF0sVSksSS53cml0ZVVJbnQzMkJFKFgsdGUsVSs0KX0sai5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihCLFkpe2Zvcih2YXIgWD1CLmxlbmd0aC1ZLFU9WTtVPEIubGVuZ3RoO1UrKylCW1VdPVg7cmV0dXJuITB9LGoucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihCKXtmb3Io'@;
put 'dmFyIFk9QltCLmxlbmd0aC0xXSxYPUIubGVuZ3RoLVk7WDxCLmxlbmd0aDtYKyspei5lcXVhbChCW1hdLFkpO3JldHVybiBCLnNsaWNlKDAsQi5sZW5ndGgtWSl9LGoucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKEIsWSxYLFUscSl7Zm9yKHZhciBlZT1ZLHRlPVgsb2U9MDtvZTxCLmtl'@;
put 'eXMubGVuZ3RoO29lKz0yKXt2YXIgc2U9Qi5rZXlzW29lXSxoZT1CLmtleXNbb2UrMV07SS5leHBhbmQodGUsQi50bXAsMCk7dmFyIHVlPUkuc3Vic3RpdHV0ZShzZV49Qi50bXBbMF0saGVePUIudG1wWzFdKSxjZT10ZTt0ZT0oZWVeSS5wZXJtdXRlKHVlKSk+Pj4wLGVlPWNlfUkucmlwKHRl'@;
put 'LGVlLFUscSl9LGoucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKEIsWSxYLFUscSl7Zm9yKHZhciBlZT1YLHRlPVksb2U9Qi5rZXlzLmxlbmd0aC0yO29lPj0wO29lLT0yKXt2YXIgc2U9Qi5rZXlzW29lXSxoZT1CLmtleXNbb2UrMV07SS5leHBhbmQoZWUsQi50bXAsMCk7dmFyIHVlPUku'@;
put 'c3Vic3RpdHV0ZShzZV49Qi50bXBbMF0saGVePUIudG1wWzFdKSxjZT1lZTtlZT0odGVeSS5wZXJtdXRlKHVlKSk+Pj4wLHRlPWNlfUkucmlwKGVlLHRlLFUscSl9fSw2NTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpLEs9Uig1NzE3KSxJPVIoNTc1Niksaz1SKDMyNyk7'@;
put 'ZnVuY3Rpb24gRShWLEIpe3ouZXF1YWwoQi5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBZPUIuc2xpY2UoMCw4KSxYPUIuc2xpY2UoOCwxNiksVT1CLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09Vj9bay5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtl'@;
put 'eTpZfSksay5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpYfSksay5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpVfSldOltrLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OlV9KSxrLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Olh9KSxrLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIs'@;
put 'a2V5Oll9KV19ZnVuY3Rpb24gaihWKXtJLmNhbGwodGhpcyxWKTt2YXIgQj1uZXcgRSh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9Qn1LKGosSSksTS5leHBvcnRzPWosai5jcmVhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyBqKFYpfSxqLnByb3RvdHlwZS5f'@;
put 'dXBkYXRlPWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBVPXRoaXMuX2VkZVN0YXRlO1UuY2lwaGVyc1swXS5fdXBkYXRlKFYsQixZLFgpLFUuY2lwaGVyc1sxXS5fdXBkYXRlKFksWCxZLFgpLFUuY2lwaGVyc1syXS5fdXBkYXRlKFksWCxZLFgpfSxqLnByb3RvdHlwZS5fcGFkPWsucHJvdG90eXBl'@;
put 'Ll9wYWQsai5wcm90b3R5cGUuX3VucGFkPWsucHJvdG90eXBlLl91bnBhZH0sMTI3ODooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPLnJlYWRVSW50MzJCRT1mdW5jdGlvbihJLGspe3JldHVybihJWzAra108PDI0fElbMStrXTw8MTZ8SVsyK2tdPDw4fElbMytrXSk+Pj4wfSxPLndyaXRlVUludDMy'@;
put 'QkU9ZnVuY3Rpb24oSSxrLEUpe0lbMCtFXT1rPj4+MjQsSVsxK0VdPWs+Pj4xNiYyNTUsSVsyK0VdPWs+Pj44JjI1NSxJWzMrRV09MjU1Jmt9LE8uaXA9ZnVuY3Rpb24oSSxrLEUsail7Zm9yKHZhciBWPTAsQj0wLFk9NjtZPj0wO1ktPTIpe2Zvcih2YXIgWD0wO1g8PTI0O1grPTgpVjw8PTEs'@;
put 'Vnw9az4+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7WCs9OClWPDw9MSxWfD1JPj4+WCtZJjF9Zm9yKFk9NjtZPj0wO1ktPTIpe2ZvcihYPTE7WDw9MjU7WCs9OClCPDw9MSxCfD1rPj4+WCtZJjE7Zm9yKFg9MTtYPD0yNTtYKz04KUI8PD0xLEJ8PUk+Pj5YK1kmMX1FW2orMF09Vj4+PjAsRVtqKzFd'@;
put 'PUI+Pj4wfSxPLnJpcD1mdW5jdGlvbihJLGssRSxqKXtmb3IodmFyIFY9MCxCPTAsWT0wO1k8NDtZKyspZm9yKHZhciBYPTI0O1g+PTA7WC09OClWPDw9MSxWfD1rPj4+WCtZJjEsVjw8PTEsVnw9ST4+PlgrWSYxO2ZvcihZPTQ7WTw4O1krKylmb3IoWD0yNDtYPj0wO1gtPTgpQjw8PTEsQnw9'@;
put 'az4+PlgrWSYxLEI8PD0xLEJ8PUk+Pj5YK1kmMTtFW2orMF09Vj4+PjAsRVtqKzFdPUI+Pj4wfSxPLnBjMT1mdW5jdGlvbihJLGssRSxqKXtmb3IodmFyIFY9MCxCPTAsWT03O1k+PTU7WS0tKXtmb3IodmFyIFg9MDtYPD0yNDtYKz04KVY8PD0xLFZ8PWs+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7'@;
put 'WCs9OClWPDw9MSxWfD1JPj5YK1kmMX1mb3IoWD0wO1g8PTI0O1grPTgpVjw8PTEsVnw9az4+WCtZJjE7Zm9yKFk9MTtZPD0zO1krKyl7Zm9yKFg9MDtYPD0yNDtYKz04KUI8PD0xLEJ8PWs+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7WCs9OClCPDw9MSxCfD1JPj5YK1kmMX1mb3IoWD0wO1g8PTI0'@;
put 'O1grPTgpQjw8PTEsQnw9ST4+WCtZJjE7RVtqKzBdPVY+Pj4wLEVbaisxXT1CPj4+MH0sTy5yMjhzaGw9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSTw8ayYyNjg0MzU0NTV8ST4+PjI4LWt9O3ZhciBSPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwy'@;
put 'MSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO08ucGMyPWZ1bmN0aW9uKEksayxFLGope2Zvcih2YXIgVj0wLEI9MCxZPVIubGVuZ3RoPj4+MSxYPTA7WDxZO1grKylWPDw9MSxWfD1JPj4+UltYXSYxO2Zv'@;
put 'cihYPVk7WDxSLmxlbmd0aDtYKyspQjw8PTEsQnw9az4+PlJbWF0mMTtFW2orMF09Vj4+PjAsRVtqKzFdPUI+Pj4wfSxPLmV4cGFuZD1mdW5jdGlvbihJLGssRSl7dmFyIGo9MCxWPTA7aj0oMSZJKTw8NXxJPj4+Mjc7Zm9yKHZhciBCPTIzO0I+PTE1O0ItPTQpajw8PTYsanw9ST4+PkImNjM7'@;
put 'Zm9yKEI9MTE7Qj49MztCLT00KVZ8PUk+Pj5CJjYzLFY8PD02O1Z8PSgzMSZJKTw8MXxJPj4+MzEsa1tFKzBdPWo+Pj4wLGtbRSsxXT1WPj4+MH07dmFyIHo9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcs'@;
put 'OCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3'@;
put 'LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwx'@;
put 'NSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMs'@;
put 'OCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwx'@;
put 'MiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEz'@;
put 'LDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIs'@;
put 'MTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07Ty5zdWJzdGl0dXRl'@;
put 'PWZ1bmN0aW9uKEksayl7Zm9yKHZhciBFPTAsaj0wO2o8NDtqKyspRTw8PTQsRXw9els2NCpqKyhJPj4+MTgtNipqJjYzKV07Zm9yKGo9MDtqPDQ7aisrKUU8PD00LEV8PXpbMjU2KzY0KmorKGs+Pj4xOC02KmomNjMpXTtyZXR1cm4gRT4+PjB9O3ZhciBLPVsxNiwyNSwxMiwxMSwzLDIwLDQs'@;
put 'MTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtPLnBlcm11dGU9ZnVuY3Rpb24oSSl7Zm9yKHZhciBrPTAsRT0wO0U8Sy5sZW5ndGg7RSsrKWs8PD0xLGt8PUk+Pj5LW0VdJjE7cmV0dXJuIGs+Pj4wfSxPLnBhZFNwbGl0'@;
put 'PWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9SS50b1N0cmluZygyKTtqLmxlbmd0aDxrOylqPSIwIitqO2Zvcih2YXIgVj1bXSxCPTA7QjxrO0IrPUUpVi5wdXNoKGouc2xpY2UoQixCK0UpKTtyZXR1cm4gVi5qb2luKCIgIil9fSwyNjA3OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZl'@;
put 'cixLPVIoMzU5MCksST1SKDk3OTkpLGs9Uig3NDI2KSxFPXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07Ty5EaWZmaWVIZWxsbWFuR3JvdXA9Ty5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9Ty5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uKGope3ZhciBWPW5ldyB6KElbal0ucHJpbWUs'@;
put 'ImhleCIpLEI9bmV3IHooSVtqXS5nZW4sImhleCIpO3JldHVybiBuZXcgayhWLEIpfSxPLmNyZWF0ZURpZmZpZUhlbGxtYW49Ty5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIGooVixCLFksWCl7cmV0dXJuIHouaXNCdWZmZXIoQil8fHZvaWQgMD09PUVbQl0/aihWLCJiaW5hcnkiLEIsWSk6KEI9'@;
put 'Qnx8ImJpbmFyeSIsWD1YfHwiYmluYXJ5IixZPVl8fG5ldyB6KFsyXSksei5pc0J1ZmZlcihZKXx8KFk9bmV3IHooWSxYKSksIm51bWJlciI9PXR5cGVvZiBWP25ldyBrKEsoVixZKSxZLCEwKTooei5pc0J1ZmZlcihWKXx8KFY9bmV3IHooVixCKSksbmV3IGsoVixZLCEwKSkpfX0sNzQyNjoo'@;
put 'TSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDM2MjApLEk9bmV3KFIoMzA0NykpLGs9bmV3IEsoMjQpLEU9bmV3IEsoMTEpLGo9bmV3IEsoMTApLFY9bmV3IEsoMyksQj1uZXcgSyg3KSxZPVIoMzU5MCksWD1SKDE3OTgpO2Z1bmN0aW9uIFUoc2UsaGUpe3JldHVybiBoZT1oZXx8'@;
put 'InV0ZjgiLHouaXNCdWZmZXIoc2UpfHwoc2U9bmV3IHooc2UsaGUpKSx0aGlzLl9wdWI9bmV3IEsoc2UpLHRoaXN9ZnVuY3Rpb24gcShzZSxoZSl7cmV0dXJuIGhlPWhlfHwidXRmOCIsei5pc0J1ZmZlcihzZSl8fChzZT1uZXcgeihzZSxoZSkpLHRoaXMuX3ByaXY9bmV3IEsoc2UpLHRoaXN9'@;
put 'TS5leHBvcnRzPXRlO3ZhciBlZT17fTtmdW5jdGlvbiB0ZShzZSxoZSx1ZSl7dGhpcy5zZXRHZW5lcmF0b3IoaGUpLHRoaXMuX19wcmltZT1uZXcgSyhzZSksdGhpcy5fcHJpbWU9Sy5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49c2UubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAs'@;
put 'dGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCx1ZT8odGhpcy5zZXRQdWJsaWNLZXk9VSx0aGlzLnNldFByaXZhdGVLZXk9cSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gb2Uoc2UsaGUpe3ZhciB1ZT1uZXcgeihzZS50b0FycmF5KCkpO3JldHVybiBoZT91ZS50'@;
put 'b1N0cmluZyhoZSk6dWV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHRlLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uKHNlLGhl'@;
put 'KXt2YXIgdWU9aGUudG9TdHJpbmcoImhleCIpLGNlPVt1ZSxzZS50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihjZSBpbiBlZSlyZXR1cm4gZWVbY2VdO3ZhciBHLGI9MDtpZihzZS5pc0V2ZW4oKXx8IVkuc2ltcGxlU2lldmV8fCFZLmZlcm1hdFRlc3Qoc2UpfHwhSS50ZXN0KHNlKSlyZXR1'@;
put 'cm4gYis9MSxlZVtjZV09Yis9IjAyIj09PXVlfHwiMDUiPT09dWU/ODo0LGI7c3dpdGNoKEkudGVzdChzZS5zaHJuKDEpKXx8KGIrPTIpLHVlKXtjYXNlIjAyIjpzZS5tb2QoaykuY21wKEUpJiYoYis9OCk7YnJlYWs7Y2FzZSIwNSI6KEc9c2UubW9kKGopKS5jbXAoVikmJkcuY21wKEIpJiYo'@;
put 'Yis9OCk7YnJlYWs7ZGVmYXVsdDpiKz00fXJldHVybiBlZVtjZV09YixifSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSx0ZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBLKFgo'@;
put 'dGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSx0ZS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihzZSl7dmFyIGhlPShzZT0oc2U9bmV3'@;
put 'IEsoc2UpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdWU9bmV3IHooaGUudG9BcnJheSgpKSxjZT10aGlzLmdldFByaW1lKCk7aWYodWUubGVuZ3RoPGNlLmxlbmd0aCl7dmFyIEc9bmV3IHooY2UubGVuZ3RoLXVlLmxlbmd0aCk7Ry5maWxsKDAp'@;
put 'LHVlPXouY29uY2F0KFtHLHVlXSl9cmV0dXJuIHVlfSx0ZS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHNlKXtyZXR1cm4gb2UodGhpcy5fcHViLHNlKX0sdGUucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oc2Upe3JldHVybiBvZSh0aGlzLl9wcml2LHNlKX0sdGUu'@;
put 'cHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKHNlKXtyZXR1cm4gb2UodGhpcy5fX3ByaW1lLHNlKX0sdGUucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihzZSl7cmV0dXJuIG9lKHRoaXMuX2dlbixzZSl9LHRlLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oc2UsaGUp'@;
put 'e3JldHVybiBoZT1oZXx8InV0ZjgiLHouaXNCdWZmZXIoc2UpfHwoc2U9bmV3IHooc2UsaGUpKSx0aGlzLl9fZ2VuPXNlLHRoaXMuX2dlbj1uZXcgSyhzZSksdGhpc319LDM1OTA6KE0sTyxSKT0+e3ZhciB6PVIoMTc5OCk7TS5leHBvcnRzPXNlLHNlLnNpbXBsZVNpZXZlPXRlLHNlLmZlcm1h'@;
put 'dFRlc3Q9b2U7dmFyIEs9UigzNjIwKSxJPW5ldyBLKDI0KSxrPW5ldyhSKDMwNDcpKSxFPW5ldyBLKDEpLGo9bmV3IEsoMiksVj1uZXcgSyg1KSxCPShuZXcgSygxNiksbmV3IEsoOCksbmV3IEsoMTApKSxZPW5ldyBLKDMpLFg9KG5ldyBLKDcpLG5ldyBLKDExKSksVT1uZXcgSyg0KSxxPShu'@;
put 'ZXcgSygxMiksbnVsbCk7ZnVuY3Rpb24gdGUoaGUpe2Zvcih2YXIgdWU9ZnVuY3Rpb24gZWUoKXtpZihudWxsIT09cSlyZXR1cm4gcTt2YXIgaGU9W107aGVbMF09Mjtmb3IodmFyIHVlPTEsY2U9MztjZTwxMDQ4NTc2O2NlKz0yKXtmb3IodmFyIEc9TWF0aC5jZWlsKE1hdGguc3FydChjZSkp'@;
put 'LGI9MDtiPHVlJiZoZVtiXTw9RyYmY2UlaGVbYl0hPTA7YisrKTt1ZSE9PWImJmhlW2JdPD1HfHwoaGVbdWUrK109Y2UpfXJldHVybiBxPWhlLGhlfSgpLGNlPTA7Y2U8dWUubGVuZ3RoO2NlKyspaWYoMD09PWhlLm1vZG4odWVbY2VdKSlyZXR1cm4gMD09PWhlLmNtcG4odWVbY2VdKTtyZXR1'@;
put 'cm4hMH1mdW5jdGlvbiBvZShoZSl7dmFyIHVlPUsubW9udChoZSk7cmV0dXJuIDA9PT1qLnRvUmVkKHVlKS5yZWRQb3coaGUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gc2UoaGUsdWUpe2lmKGhlPDE2KXJldHVybiBuZXcgSygyPT09dWV8fDU9PT11ZT9bMTQwLDEyM106'@;
put 'WzE0MCwzOV0pO3ZhciBjZSxHO2Zvcih1ZT1uZXcgSyh1ZSk7Oyl7Zm9yKGNlPW5ldyBLKHooTWF0aC5jZWlsKGhlLzgpKSk7Y2UuYml0TGVuZ3RoKCk+aGU7KWNlLmlzaHJuKDEpO2lmKGNlLmlzRXZlbigpJiZjZS5pYWRkKEUpLGNlLnRlc3RuKDEpfHxjZS5pYWRkKGopLHVlLmNtcChqKSl7'@;
put 'aWYoIXVlLmNtcChWKSlmb3IoO2NlLm1vZChCKS5jbXAoWSk7KWNlLmlhZGQoVSl9ZWxzZSBmb3IoO2NlLm1vZChJKS5jbXAoWCk7KWNlLmlhZGQoVSk7aWYodGUoRz1jZS5zaHJuKDEpKSYmdGUoY2UpJiZvZShHKSYmb2UoY2UpJiZrLnRlc3QoRykmJmsudGVzdChjZSkpcmV0dXJuIGNlfX19'@;
put 'LDM2MjA6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gayhnLEMpe2cuc3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90'@;
put 'eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBTLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwh'@;
put 'PT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAw'@;
put 'IT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoNzc0OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBWKGcsQyl7dmFyIFM9Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBTPj02NSYmUzw9NzA/Uy01NTpTPj05NyYmUzw9MTAyP1MtODc6Uy00OCYxNX1mdW5jdGlvbiBCKGcsQyxTKXt2YXIg'@;
put 'dj1WKGcsUyk7cmV0dXJuIFMtMT49QyYmKHZ8PVYoZyxTLTEpPDw0KSx2fWZ1bmN0aW9uIFkoZyxDLFMsdil7Zm9yKHZhciBwPTAsdz1NYXRoLm1pbihnLmxlbmd0aCxTKSxKPUM7Sjx3O0orKyl7dmFyIG5lPWcuY2hhckNvZGVBdChKKS00ODtwKj12LHArPW5lPj00OT9uZS00OSsxMDpuZT49'@;
put 'MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1'@;
put 'bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLFMpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsUyk7'@;
put 'aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLFMpOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHY9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHYrKyx0aGlzLm5lZ2F0'@;
put 'aXZlPTEpLHY8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx2LFMpOih0aGlzLl9wYXJzZUJhc2UoZyxDLHYpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsUyl7Zzww'@;
put 'JiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcx'@;
put 'OTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUyl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLFMpe2lmKEko'@;
put 'Im51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhp'@;
put 'cy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3LEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xLHA9MDt2Pj0wO3YtPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YtMV08PDh8Z1t2LTJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1K'@;
put 'JjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1TKWZvcih2PTAscD0wO3Y8Zy5sZW5ndGg7dis9Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdisxXTw8OHxnW3YrMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcx'@;
put 'MDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsUyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9y'@;
put 'KHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHc9MCxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMTt2Pj1DO3YtPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFd'@;
put 'fD1wPj4+MjYpOncrPTg7ZWxzZSBmb3Iodj0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt2PGcubGVuZ3RoO3YrPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7dGhpcy5zdHJpcCgpfSxF'@;
put 'LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxTKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgdj0wLHA9MTtwPD02NzEwODg2MztwKj1DKXYrKzt2LS0scD1wL0N8MDtmb3IodmFyIHc9Zy5sZW5ndGgtUyxKPXcldixuZT1NYXRoLm1pbih3LHctSikrUyxk'@;
put 'ZT0wLGZlPVM7ZmU8bmU7ZmUrPXYpZGU9WShnLGZlLGZlK3YsQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKTtpZigwIT09Sil7dmFyIHhlPTE7Zm9yKGRlPVkoZyxmZSxnLmxlbmd0aCxDKSxmZT0wO2Zl'@;
put 'PEo7ZmUrKyl4ZSo9Qzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zv'@;
put 'cih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0'@;
put 'dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09'@;
put 'PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlz'@;
put 'fSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBYPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2'@;
put 'NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTEx'@;
put 'MTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZShnLEMsUyl7Uy5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHY9Zy5sZW5ndGgrQy5sZW5ndGh8MDtTLmxlbmd0aD12LHY9di0xfDA7dmFy'@;
put 'IHA9MHxnLndvcmRzWzBdLHc9MHxDLndvcmRzWzBdLEo9cCp3LGRlPUovNjcxMDg4NjR8MDtTLndvcmRzWzBdPTY3MTA4ODYzJko7Zm9yKHZhciBmZT0xO2ZlPHY7ZmUrKyl7Zm9yKHZhciB4ZT1kZT4+PjI2LExlPTY3MTA4ODYzJmRlLEZlPU1hdGgubWluKGZlLEMubGVuZ3RoLTEpLE9lPU1h'@;
put 'dGgubWF4KDAsZmUtZy5sZW5ndGgrMSk7T2U8PUZlO09lKyspeGUrPShKPShwPTB8Zy53b3Jkc1tmZS1PZXwwXSkqKHc9MHxDLndvcmRzW09lXSkrTGUpLzY3MTA4ODY0fDAsTGU9NjcxMDg4NjMmSjtTLndvcmRzW2ZlXT0wfExlLGRlPTB8eGV9cmV0dXJuIDAhPT1kZT9TLndvcmRzW2ZlXT0w'@;
put 'fGRlOlMubGVuZ3RoLS0sUy5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIFM7aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7Uz0iIjtmb3IodmFyIHY9MCxwPTAsdz0wO3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj10aGlzLndvcmRz'@;
put 'W3ddLG5lPSgxNjc3NzIxNSYoSjw8dnxwKSkudG9TdHJpbmcoMTYpO1M9MCE9KHA9Sj4+PjI0LXYmMTY3NzcyMTUpfHx3IT09dGhpcy5sZW5ndGgtMT9YWzYtbmUubGVuZ3RoXStuZStTOm5lK1MsKHYrPTIpPj0yNiYmKHYtPTI2LHctLSl9Zm9yKDAhPT1wJiYoUz1wLnRvU3RyaW5nKDE2KStT'@;
put 'KTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGRlPVVbZ10sZmU9cVtnXTtTPSIiO3ZhciB4ZT10aGlzLmNsb25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygp'@;
put 'Oyl7dmFyIExlPXhlLm1vZG4oZmUpLnRvU3RyaW5nKGcpO1M9KHhlPXhlLmlkaXZuKGZlKSkuaXNaZXJvKCk/TGUrUzpYW2RlLUxlLmxlbmd0aF0rTGUrU31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAiK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZl'@;
put 'JiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMu'@;
put 'bGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90'@;
put 'b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PWopLHRoaXMudG9BcnJheUxpa2UoaixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7'@;
put 'cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PXRoaXMuYnl0ZUxlbmd0aCgpLHA9U3x8TWF0aC5tYXgoMSx2KTtJKHY8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgi'@;
put 'KSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB3LEosbmU9ImxlIj09PUMsZGU9bmV3IGcocCksZmU9dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtK'@;
put 'XT13O2Zvcig7SjxwO0orKylkZVtKXT0wfWVsc2V7Zm9yKEo9MDtKPHAtdjtKKyspZGVbSl09MDtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtwLUotMV09d31yZXR1cm4gZGV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHoz'@;
put 'Mj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxTPTA7cmV0dXJuIEM+PTQwOTYmJihTKz0xMyxDPj4+PTEzKSxDPj02NCYmKFMrPTcsQz4+Pj03KSxDPj04JiYoUys9NCxDPj4+PTQpLEM+PTImJihTKz0yLEM+Pj49MiksUytDfSxFLnBy'@;
put 'b3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsUz0wO3JldHVybiEoODE5MSZDKSYmKFMrPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoUys9NyxDPj4+PTcpLCEoMTUmQykmJihTKz00LEM+Pj49NCksISgzJkMpJiYoUys9MixDPj4+PTIpLCEo'@;
put 'MSZDKSYmUysrLFN9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5p'@;
put 'c1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPVMsMjYhPT1TKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgu'@;
put 'Y2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'dGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVn'@;
put 'KCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zv'@;
put 'cih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcp'@;
put 'fSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUo'@;
put 'KS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIFM9MDtTPEMubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU10mZy53b3Jkc1tTXTty'@;
put 'ZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'bGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnBy'@;
put 'b3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxTO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsUz1nKTooQz1nLFM9dGhpcyk7Zm9yKHZhciB2PTA7djxTLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdXlMud29yZHNbdl07aWYodGhpcyE9PUMpZm9yKDt2PEMu'@;
put 'bGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5w'@;
put 'cm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgp'@;
put 'Lml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLFM9ZyUyNjt0aGlzLl9leHBhbmQoQyksUz4wJiZDLS07Zm9yKHZhciB2PTA7djxDO3Yr'@;
put 'Kyl0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJn50aGlzLndvcmRzW3ZdO3JldHVybiBTPjAmJih0aGlzLndvcmRzW3ZdPX50aGlzLndvcmRzW3ZdJjY3MTA4ODYzPj4yNi1TKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90'@;
put 'bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nLzI2fDAsdj1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdPUM/dGhpcy53b3Jkc1tTXXwxPDx2OnRoaXMud29yZHNbU10mfigxPDx2'@;
put 'KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsUyx2O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtp'@;
put 'ZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYu'@;
put 'bGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pKygwfHYud29yZHNbd10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrcCkscD1DPj4+MjY7aWYodGhp'@;
put 'cy5sZW5ndGg9Uy5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoUyE9PXRoaXMpZm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29yZHNbd107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihn'@;
put 'KXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5u'@;
put 'ZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBn'@;
put 'Lm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRp'@;
put 'dmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgdz0wLEo9MDtKPHYubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pLSgwfHYud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYz'@;
put 'JkM7Zm9yKDswIT09dyYmSjxTLmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2lmKDA9PT13JiZKPFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO0o8Uy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09Uy53b3Jkc1tKXTtyZXR1cm4g'@;
put 'dGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsSiksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixw'@;
put 'LHcsSj1nLndvcmRzLG5lPUMud29yZHMsZGU9Uy53b3JkcyxmZT0wLHhlPTB8SlswXSxMZT04MTkxJnhlLEZlPXhlPj4+MTMsT2U9MHxKWzFdLGplPTgxOTEmT2UsV2U9T2U+Pj4xMyxLZT0wfEpbMl0sWWU9ODE5MSZLZSxRZT1LZT4+PjEzLGx0PTB8SlszXSxQZT04MTkxJmx0LGJlPWx0Pj4+'@;
put 'MTMsQWU9MHxKWzRdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfEpbNV0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8Sls2XSxEZT04MTkxJk1lLHplPU1lPj4+MTMsb3Q9MHxKWzddLHV0PTgxOTEmb3QsTXQ9b3Q+Pj4xMyxIdD0wfEpbOF0sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENu'@;
put 'PTB8Sls5XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMsV249MHxuZVswXSxlbj04MTkxJlduLCRuPVduPj4+MTMsSG49MHxuZVsxXSxmdD04MTkxJkhuLGZuPUhuPj4+MTMsaG49MHxuZVsyXSx3dD04MTkxJmhuLFh0PWhuPj4+MTMsX3Q9MHxuZVszXSxOdD04MTkxJl90LG1uPV90Pj4+MTMscnQ9'@;
put 'MHxuZVs0XSxJdD04MTkxJnJ0LFF0PXJ0Pj4+MTMsRHQ9MHxuZVs1XSxwdD04MTkxJkR0LFl0PUR0Pj4+MTMsSW49MHxuZVs2XSx6dD04MTkxJkluLHluPUluPj4+MTMseG49MHxuZVs3XSxzbj04MTkxJnhuLEJuPXhuPj4+MTMsUm49MHxuZVs4XSwkdD04MTkxJlJuLEZuPVJuPj4+MTMsbmk9'@;
put 'MHxuZVs5XSxsbj04MTkxJm5pLGpuPW5pPj4+MTM7Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIHFyPShmZSsodj1NYXRoLmltdWwoTGUsZW4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKExlLCRuKSkrTWF0aC5pbXVsKEZlLGVuKXwwKSk8PDEz'@;
put 'KXwwO2ZlPSgodz1NYXRoLmltdWwoRmUsJG4pKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoamUsZW4pLHA9KHA9TWF0aC5pbXVsKGplLCRuKSkrTWF0aC5pbXVsKFdlLGVuKXwwLHc9TWF0aC5pbXVsKFdlLCRuKTt2YXIgZ2k9KGZlKyh2PXYrTWF0'@;
put 'aC5pbXVsKExlLGZ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChGZSxmdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsZm4pfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChZZSxl'@;
put 'bikscD0ocD1NYXRoLmltdWwoWWUsJG4pKStNYXRoLmltdWwoUWUsZW4pfDAsdz1NYXRoLmltdWwoUWUsJG4pLHY9ditNYXRoLmltdWwoamUsZnQpfDAscD0ocD1wK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKFdlLGZ0KXwwLHc9dytNYXRoLmltdWwoV2UsZm4pfDA7dmFyIHhyPShm'@;
put 'ZSsodj12K01hdGguaW11bChMZSx3dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFh0KXwwKStNYXRoLmltdWwoRmUsd3QpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFh0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRo'@;
put 'LmltdWwoUGUsZW4pLHA9KHA9TWF0aC5pbXVsKFBlLCRuKSkrTWF0aC5pbXVsKGJlLGVuKXwwLHc9TWF0aC5pbXVsKGJlLCRuKSx2PXYrTWF0aC5pbXVsKFllLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsZm4pfDApK01hdGguaW11bChRZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFFlLGZuKXww'@;
put 'LHY9ditNYXRoLmltdWwoamUsd3QpfDAscD0ocD1wK01hdGguaW11bChqZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwLHc9dytNYXRoLmltdWwoV2UsWHQpfDA7dmFyIFVpPShmZSsodj12K01hdGguaW11bChMZSxOdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG1uKXww'@;
put 'KStNYXRoLmltdWwoRmUsTnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLG1uKXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVGUsZW4pLHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKHFlLGVuKXwwLHc9TWF0aC5p'@;
put 'bXVsKHFlLCRuKSx2PXYrTWF0aC5pbXVsKFBlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsZm4pfDApK01hdGguaW11bChiZSxmdCl8MCx3PXcrTWF0aC5pbXVsKGJlLGZuKXwwLHY9ditNYXRoLmltdWwoWWUsd3QpfDAscD0ocD1wK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKFFl'@;
put 'LHd0KXwwLHc9dytNYXRoLmltdWwoUWUsWHQpfDAsdj12K01hdGguaW11bChqZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLG1uKXwwKStNYXRoLmltdWwoV2UsTnQpfDAsdz13K01hdGguaW11bChXZSxtbil8MDt2YXIgS3I9KGZlKyh2PXYrTWF0aC5pbXVsKExlLEl0KXwwKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChGZSxJdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUXQpfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChVZSxlbikscD0ocD1NYXRoLmltdWwoVWUsJG4p'@;
put 'KStNYXRoLmltdWwoaHQsZW4pfDAsdz1NYXRoLmltdWwoaHQsJG4pLHY9ditNYXRoLmltdWwoVGUsZnQpfDAscD0ocD1wK01hdGguaW11bChUZSxmbil8MCkrTWF0aC5pbXVsKHFlLGZ0KXwwLHc9dytNYXRoLmltdWwocWUsZm4pfDAsdj12K01hdGguaW11bChQZSx3dCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsdz13K01hdGguaW11bChiZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFllLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsbW4pfDApK01hdGguaW11bChRZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFFlLG1uKXwwLHY9ditNYXRoLmltdWwo'@;
put 'amUsSXQpfDAscD0ocD1wK01hdGguaW11bChqZSxRdCl8MCkrTWF0aC5pbXVsKFdlLEl0KXwwLHc9dytNYXRoLmltdWwoV2UsUXQpfDA7dmFyIG5vPShmZSsodj12K01hdGguaW11bChMZSxwdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoRmUs'@;
put 'cHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFl0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoRGUsZW4pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKHplLGVuKXwwLHc9TWF0aC5pbXVsKHplLCRuKSx2PXYr'@;
put 'TWF0aC5pbXVsKFVlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChodCxmdCl8MCx3PXcrTWF0aC5pbXVsKGh0LGZuKXwwLHY9ditNYXRoLmltdWwoVGUsd3QpfDAscD0ocD1wK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLHc9dytNYXRo'@;
put 'LmltdWwocWUsWHQpfDAsdj12K01hdGguaW11bChQZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLG1uKXwwKStNYXRoLmltdWwoYmUsTnQpfDAsdz13K01hdGguaW11bChiZSxtbil8MCx2PXYrTWF0aC5pbXVsKFllLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUXQpfDApK01hdGguaW11'@;
put 'bChRZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFF0KXwwLHY9ditNYXRoLmltdWwoamUscHQpfDAscD0ocD1wK01hdGguaW11bChqZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwLHc9dytNYXRoLmltdWwoV2UsWXQpfDA7dmFyIEhyPShmZSsodj12K01hdGguaW11bChMZSx6dCl8MCl8MCkr'@;
put 'KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHluKXwwKStNYXRoLmltdWwoRmUsenQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLHluKXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwodXQsZW4pLHA9KHA9TWF0aC5pbXVsKHV0'@;
put 'LCRuKSkrTWF0aC5pbXVsKE10LGVuKXwwLHc9TWF0aC5pbXVsKE10LCRuKSx2PXYrTWF0aC5pbXVsKERlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bCh6ZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHplLGZuKXwwLHY9ditNYXRoLmltdWwoVWUsd3QpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLHc9dytNYXRoLmltdWwoaHQsWHQpfDAsdj12K01hdGguaW11bChUZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLG1uKXwwKStNYXRoLmltdWwocWUsTnQpfDAsdz13K01hdGguaW11bChxZSxtbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFBlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChiZSxJdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFF0KXwwLHY9ditNYXRoLmltdWwoWWUscHQpfDAscD0ocD1wK01hdGguaW11bChZZSxZdCl8MCkrTWF0aC5pbXVsKFFlLHB0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'UWUsWXQpfDAsdj12K01hdGguaW11bChqZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoV2UsenQpfDAsdz13K01hdGguaW11bChXZSx5bil8MDt2YXIgcWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'TGUsQm4pfDApK01hdGguaW11bChGZSxzbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsQm4pfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChQdCxlbikscD0ocD1NYXRoLmltdWwoUHQsJG4pKStNYXRoLmltdWwob24sZW4pfDAs'@;
put 'dz1NYXRoLmltdWwob24sJG4pLHY9ditNYXRoLmltdWwodXQsZnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxmbil8MCkrTWF0aC5pbXVsKE10LGZ0KXwwLHc9dytNYXRoLmltdWwoTXQsZm4pfDAsdj12K01hdGguaW11bChEZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFh0KXwwKStNYXRo'@;
put 'LmltdWwoemUsd3QpfDAsdz13K01hdGguaW11bCh6ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFVlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChodCxOdCl8MCx3PXcrTWF0aC5pbXVsKGh0LG1uKXwwLHY9ditNYXRoLmltdWwoVGUsSXQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChUZSxRdCl8MCkrTWF0aC5pbXVsKHFlLEl0KXwwLHc9dytNYXRoLmltdWwocWUsUXQpfDAsdj12K01hdGguaW11bChQZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsdz13K01hdGguaW11bChiZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFll'@;
put 'LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChRZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFFlLHluKXwwLHY9ditNYXRoLmltdWwoamUsc24pfDAscD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0aC5pbXVsKFdlLHNuKXwwLHc9dytNYXRoLmltdWwoV2UsQm4p'@;
put 'fDA7dmFyIEppPShmZSsodj12K01hdGguaW11bChMZSwkdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEZuKXwwKStNYXRoLmltdWwoRmUsJHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEZuKXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9Njcx'@;
put 'MDg4NjMsdj1NYXRoLmltdWwoVXQsZW4pLHA9KHA9TWF0aC5pbXVsKFV0LCRuKSkrTWF0aC5pbXVsKGJuLGVuKXwwLHc9TWF0aC5pbXVsKGJuLCRuKSx2PXYrTWF0aC5pbXVsKFB0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsZm4pfDApK01hdGguaW11bChvbixmdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKG9uLGZuKXwwLHY9ditNYXRoLmltdWwodXQsd3QpfDAscD0ocD1wK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLHc9dytNYXRoLmltdWwoTXQsWHQpfDAsdj12K01hdGguaW11bChEZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwo'@;
put 'emUsTnQpfDAsdz13K01hdGguaW11bCh6ZSxtbil8MCx2PXYrTWF0aC5pbXVsKFVlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUXQpfDApK01hdGguaW11bChodCxJdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFF0KXwwLHY9ditNYXRoLmltdWwoVGUscHQpfDAscD0ocD1wK01hdGguaW11bChU'@;
put 'ZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLHc9dytNYXRoLmltdWwocWUsWXQpfDAsdj12K01hdGguaW11bChQZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAsdz13K01hdGguaW11bChiZSx5bil8MCx2PXYrTWF0aC5pbXVsKFllLHNuKXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoWWUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCx3PXcrTWF0aC5pbXVsKFFlLEJuKXwwLHY9ditNYXRoLmltdWwoamUsJHQpfDAscD0ocD1wK01hdGguaW11bChqZSxGbil8MCkrTWF0aC5pbXVsKFdlLCR0KXwwLHc9dytNYXRoLmltdWwoV2UsRm4pfDA7dmFy'@;
put 'IGFvPShmZSsodj12K01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGpuKXwwKStNYXRoLmltdWwoRmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGpuKXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMs'@;
put 'dj1NYXRoLmltdWwoVXQsZnQpLHA9KHA9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLHc9TWF0aC5pbXVsKGJuLGZuKSx2PXYrTWF0aC5pbXVsKFB0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWHQpfDApK01hdGguaW11bChvbix3dCl8MCx3PXcrTWF0aC5pbXVsKG9u'@;
put 'LFh0KXwwLHY9ditNYXRoLmltdWwodXQsTnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKE10LE50KXwwLHc9dytNYXRoLmltdWwoTXQsbW4pfDAsdj12K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFF0KXwwKStNYXRoLmltdWwoemUsSXQp'@;
put 'fDAsdz13K01hdGguaW11bCh6ZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11bChodCxwdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFl0KXwwLHY9ditNYXRoLmltdWwoVGUsenQpfDAscD0ocD1wK01hdGguaW11bChUZSx5bil8'@;
put 'MCkrTWF0aC5pbXVsKHFlLHp0KXwwLHc9dytNYXRoLmltdWwocWUseW4pfDAsdj12K01hdGguaW11bChQZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsdz13K01hdGguaW11bChiZSxCbil8MCx2PXYrTWF0aC5pbXVsKFllLCR0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoWWUsRm4pfDApK01hdGguaW11bChRZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFFlLEZuKXwwO3ZhciBybz0oZmUrKHY9ditNYXRoLmltdWwoamUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChqZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXww'@;
put 'O2ZlPSgodz13K01hdGguaW11bChXZSxqbil8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHd0KSxwPShwPU1hdGguaW11bChVdCxYdCkpK01hdGguaW11bChibix3dCl8MCx3PU1hdGguaW11bChibixYdCksdj12K01hdGguaW11bChQdCxO'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LG1uKXwwKStNYXRoLmltdWwob24sTnQpfDAsdz13K01hdGguaW11bChvbixtbil8MCx2PXYrTWF0aC5pbXVsKHV0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUXQpfDApK01hdGguaW11bChNdCxJdCl8MCx3PXcrTWF0aC5pbXVsKE10LFF0KXww'@;
put 'LHY9ditNYXRoLmltdWwoRGUscHQpfDAscD0ocD1wK01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLHc9dytNYXRoLmltdWwoemUsWXQpfDAsdj12K01hdGguaW11bChVZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsdz13'@;
put 'K01hdGguaW11bChodCx5bil8MCx2PXYrTWF0aC5pbXVsKFRlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8MCx3PXcrTWF0aC5pbXVsKHFlLEJuKXwwLHY9ditNYXRoLmltdWwoUGUsJHQpfDAscD0ocD1wK01hdGguaW11bChQZSxGbil8MCkrTWF0'@;
put 'aC5pbXVsKGJlLCR0KXwwLHc9dytNYXRoLmltdWwoYmUsRm4pfDA7dmFyIGlvPShmZSsodj12K01hdGguaW11bChZZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFllLGpuKXwwKStNYXRoLmltdWwoUWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFFlLGpu'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsTnQpLHA9KHA9TWF0aC5pbXVsKFV0LG1uKSkrTWF0aC5pbXVsKGJuLE50KXwwLHc9TWF0aC5pbXVsKGJuLG1uKSx2PXYrTWF0aC5pbXVsKFB0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQs'@;
put 'UXQpfDApK01hdGguaW11bChvbixJdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFF0KXwwLHY9ditNYXRoLmltdWwodXQscHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLHc9dytNYXRoLmltdWwoTXQsWXQpfDAsdj12K01hdGguaW11bChEZSx6dCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKERlLHluKXwwKStNYXRoLmltdWwoemUsenQpfDAsdz13K01hdGguaW11bCh6ZSx5bil8MCx2PXYrTWF0aC5pbXVsKFVlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCx3PXcrTWF0aC5pbXVsKGh0LEJuKXwwLHY9ditN'@;
put 'YXRoLmltdWwoVGUsJHQpfDAscD0ocD1wK01hdGguaW11bChUZSxGbil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLHc9dytNYXRoLmltdWwocWUsRm4pfDA7dmFyIEdpPShmZSsodj12K01hdGguaW11bChQZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRo'@;
put 'LmltdWwoYmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGJlLGpuKXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsSXQpLHA9KHA9TWF0aC5pbXVsKFV0LFF0KSkrTWF0aC5pbXVsKGJuLEl0KXwwLHc9TWF0aC5pbXVsKGJu'@;
put 'LFF0KSx2PXYrTWF0aC5pbXVsKFB0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFl0KXwwLHY9ditNYXRoLmltdWwodXQsenQpfDAscD0ocD1wK01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXww'@;
put 'LHc9dytNYXRoLmltdWwoTXQseW4pfDAsdj12K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoemUsc24pfDAsdz13K01hdGguaW11bCh6ZSxCbil8MCx2PXYrTWF0aC5pbXVsKFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsRm4pfDAp'@;
put 'K01hdGguaW11bChodCwkdCl8MCx3PXcrTWF0aC5pbXVsKGh0LEZuKXwwO3ZhciBobz0oZmUrKHY9ditNYXRoLmltdWwoVGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxqbil8MCkrTWF0aC5pbXVsKHFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChx'@;
put 'ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHB0KSxwPShwPU1hdGguaW11bChVdCxZdCkpK01hdGguaW11bChibixwdCl8MCx3PU1hdGguaW11bChibixZdCksdj12K01hdGguaW11bChQdCx6dCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAsdz13K01hdGguaW11bChvbix5bil8MCx2PXYrTWF0aC5pbXVsKHV0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8MCx3PXcrTWF0aC5pbXVsKE10LEJuKXwwLHY9ditNYXRoLmltdWwoRGUsJHQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChEZSxGbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLHc9dytNYXRoLmltdWwoemUsRm4pfDA7dmFyIHlyPShmZSsodj12K01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDAp'@;
put 'KTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsenQpLHA9KHA9TWF0aC5pbXVsKFV0LHluKSkrTWF0aC5pbXVsKGJuLHp0KXwwLHc9TWF0aC5pbXVsKGJuLHluKSx2PXYrTWF0aC5p'@;
put 'bXVsKFB0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCx3PXcrTWF0aC5pbXVsKG9uLEJuKXwwLHY9ditNYXRoLmltdWwodXQsJHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxGbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'TXQsRm4pfDA7dmFyIFBpPShmZSsodj12K01hdGguaW11bChEZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoemUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHplLGpuKXwwKSsocD4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQ'@;
put 'aSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsc24pLHA9KHA9TWF0aC5pbXVsKFV0LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLHc9TWF0aC5pbXVsKGJuLEJuKSx2PXYrTWF0aC5pbXVsKFB0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsRm4pfDApK01hdGguaW11bChvbiwkdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKG9uLEZuKXwwO3ZhciBMbz0oZmUrKHY9ditNYXRoLmltdWwodXQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChNdCxqbil8MCkrKHA+Pj4xMyl8MCkrKExv'@;
put 'Pj4+MjYpfDAsTG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LCR0KSxwPShwPU1hdGguaW11bChVdCxGbikpK01hdGguaW11bChibiwkdCl8MCx3PU1hdGguaW11bChibixGbik7dmFyIGhzPShmZSsodj12K01hdGguaW11bChQdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKG9uLGpuKXwwKSsocD4+PjEzKXwwKSsoaHM+Pj4yNil8MCxocyY9NjcxMDg4NjM7dmFyIHJzPShmZSsodj1NYXRoLmltdWwoVXQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFV0'@;
put 'LGpuKSkrTWF0aC5pbXVsKGJuLGxuKXwwKSk8PDEzKXwwO3JldHVybiBmZT0oKHc9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKHJzPj4+MjYpfDAscnMmPTY3MTA4ODYzLGRlWzBdPXFyLGRlWzFdPWdpLGRlWzJdPXhyLGRlWzNdPVVpLGRlWzRdPUtyLGRlWzVdPW5vLGRlWzZdPUhy'@;
put 'LGRlWzddPXFpLGRlWzhdPUppLGRlWzldPWFvLGRlWzEwXT1ybyxkZVsxMV09aW8sZGVbMTJdPUdpLGRlWzEzXT1obyxkZVsxNF09eXIsZGVbMTVdPVBpLGRlWzE2XT1MbyxkZVsxN109aHMsZGVbMThdPXJzLDAhPT1mZSYmKGRlWzE5XT1mZSxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBvZShn'@;
put 'LEMsUyl7cmV0dXJuKG5ldyBzZSkubXVscChnLEMsUyl9ZnVuY3Rpb24gc2UoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fCh0ZT1lZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgdj10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxl'@;
put 'bmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsQyk6djw2Mz9lZSh0aGlzLGcsQyk6djwxMDI0P2Z1bmN0aW9uKHAsdyxKKXtKLm5lZ2F0aXZlPXcubmVnYXRpdmVecC5uZWdhdGl2ZSxKLmxlbmd0aD1wLmxlbmd0aCt3Lmxlbmd0aDtmb3IodmFyIG5lPTAsZGU9MCxmZT0wO2ZlPEoubGVu'@;
put 'Z3RoLTE7ZmUrKyl7dmFyIHhlPWRlO2RlPTA7Zm9yKHZhciBMZT02NzEwODg2MyZuZSxGZT1NYXRoLm1pbihmZSx3Lmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLXAubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXt2YXIgV2U9KDB8cC53b3Jkc1tmZS1PZV0pKigwfHcud29yZHNbT2VdKSxLZT02'@;
put 'NzEwODg2MyZXZTtMZT02NzEwODg2MyYoS2U9S2UrTGV8MCksZGUrPSh4ZT0oeGU9eGUrKFdlLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEwODg2M31KLndvcmRzW2ZlXT1MZSxuZT14ZSx4ZT1kZX1yZXR1cm4gMCE9PW5lP0oud29yZHNbZmVdPW5lOkoubGVuZ3Ro'@;
put 'LS0sSi5zdHJpcCgpfSh0aGlzLGcsQyk6b2UodGhpcyxnLEMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHY9MDt2PGc7disrKUNbdl09dGhpcy5yZXZCaW4odixTLGcpO3JldHVy'@;
put 'biBDfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxTKXtpZigwPT09Z3x8Zz09PVMtMSlyZXR1cm4gZztmb3IodmFyIHY9MCxwPTA7cDxDO3ArKyl2fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHZ9LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxTLHYscCx3'@;
put 'KXtmb3IodmFyIEo9MDtKPHc7SisrKXZbSl09Q1tnW0pdXSxwW0pdPVNbZ1tKXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLFMsdixwLHcpe3RoaXMucGVybXV0ZSh3LGcsQyxTLHYscCk7Zm9yKHZhciBKPTE7SjxwO0o8PD0xKWZvcih2YXIgbmU9Sjw8MSxkZT1NYXRo'@;
put 'LmNvcygyKk1hdGguUEkvbmUpLGZlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIExlPWRlLEZlPWZlLE9lPTA7T2U8SjtPZSsrKXt2YXIgamU9U1t4ZStPZV0sV2U9dlt4ZStPZV0sS2U9U1t4ZStPZStKXSxZZT12W3hlK09lK0pdLFFlPUxlKktlLUZl'@;
put 'KlllO1llPUxlKlllK0ZlKktlLFNbeGUrT2VdPWplKyhLZT1RZSksdlt4ZStPZV09V2UrWWUsU1t4ZStPZStKXT1qZS1LZSx2W3hlK09lK0pdPVdlLVllLE9lIT09bmUmJihRZT1kZSpMZS1mZSpGZSxGZT1kZSpGZStmZSpMZSxMZT1RZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVu'@;
put 'Y3Rpb24oZyxDKXt2YXIgUz0xfE1hdGgubWF4KEMsZyksdj0xJlMscD0wO2ZvcihTPVMvMnwwO1M7Uz4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3Z9LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLFMpe2lmKCEoUzw9MSkpZm9yKHZhciB2PTA7djxTLzI7disrKXt2YXIgcD1n'@;
put 'W3ZdO2dbdl09Z1tTLXYtMV0sZ1tTLXYtMV09cCxwPUNbdl0sQ1t2XT0tQ1tTLXYtMV0sQ1tTLXYtMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTAsdj0wO3Y8Qy8yO3YrKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip2KzFdL0Mp'@;
put 'K01hdGgucm91bmQoZ1syKnZdL0MpK1M7Z1t2XT02NzEwODg2MyZwLFM9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLFMsdil7Zm9yKHZhciBwPTAsdz0wO3c8Qzt3KyspU1syKnddPTgxOTEmKHArPTB8Z1t3'@;
put 'XSksU1syKncrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3Iodz0yKkM7dzx2OysrdylTW3ddPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9MDtTPGc7UysrKUNbU109MDtyZXR1cm4g'@;
put 'Q30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQodiksdz10aGlzLnN0dWIodiksSj1uZXcgQXJyYXkodiksbmU9bmV3IEFycmF5KHYpLGRlPW5ldyBBcnJheSh2KSxmZT1u'@;
put 'ZXcgQXJyYXkodikseGU9bmV3IEFycmF5KHYpLExlPW5ldyBBcnJheSh2KSxGZT1TLndvcmRzO0ZlLmxlbmd0aD12LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLEosdiksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsZmUsdiksdGhpcy50cmFuc2Zvcm0oSix3LG5l'@;
put 'LGRlLHYscCksdGhpcy50cmFuc2Zvcm0oZmUsdyx4ZSxMZSx2LHApO2Zvcih2YXIgT2U9MDtPZTx2O09lKyspe3ZhciBqZT1uZVtPZV0qeGVbT2VdLWRlW09lXSpMZVtPZV07ZGVbT2VdPW5lW09lXSpMZVtPZV0rZGVbT2VdKnhlW09lXSxuZVtPZV09amV9cmV0dXJuIHRoaXMuY29uanVnYXRl'@;
put 'KG5lLGRlLHYpLHRoaXMudHJhbnNmb3JtKG5lLGRlLEZlLHcsdixwKSx0aGlzLmNvbmp1Z2F0ZShGZSx3LHYpLHRoaXMubm9ybWFsaXplMTNiKEZlLHYpLFMubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLFMuc3RyaXAoKX0sRS5wcm90'@;
put 'b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRz'@;
put 'PW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksb2UodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEko'@;
put 'Zzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpnLHA9KDY3MTA4ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJu'@;
put 'IDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlw'@;
put 'ZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24odyl7Zm9yKHZhciBKPW5ldyBBcnJheSh3LmJpdExlbmd0aCgpKSxuZT0wO25lPEoubGVuZ3RoO25lKyspe3ZhciBmZT1uZSUy'@;
put 'NjtKW25lXT0ody53b3Jkc1tuZS8yNnwwXSYxPDxmZSk+Pj5mZX1yZXR1cm4gSn0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIFM9dGhpcyx2PTA7djxDLmxlbmd0aCYmMD09PUNbdl07disrLFM9Uy5zcXIoKSk7aWYoKyt2PEMubGVuZ3RoKWZvcih2YXIgcD1T'@;
put 'LnNxcigpO3Y8Qy5sZW5ndGg7disrLHA9cC5zcXIoKSkwIT09Q1t2XSYmKFM9Uy5tdWwocCkpO3JldHVybiBTfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLFM9ZyUyNix2PShnLVMpLzI2LHA9NjcxMDg4NjM+Pj4yNi1T'@;
put 'PDwyNi1TO2lmKDAhPT1TKXt2YXIgdz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBKPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLUo8PFN8dyx3PUo+Pj4yNi1TfXcmJih0aGlzLndvcmRzW0NdPXcsdGhpcy5sZW5ndGgrKyl9aWYoMCE9'@;
put 'PXYpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ZdPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHY7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9dn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsUyl7dmFyIHY7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHY9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsdz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxl'@;
put 'bmd0aCksSj02NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9UztpZih2LT13LHY9TWF0aC5tYXgoMCx2KSxuZSl7Zm9yKHZhciBkZT0wO2RlPHc7ZGUrKyluZS53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZV07bmUubGVuZ3RoPXd9aWYoMCE9PXcpaWYodGhpcy5sZW5ndGg+dylmb3IodGhpcy5s'@;
put 'ZW5ndGgtPXcsZGU9MDtkZTx0aGlzLmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPXRoaXMud29yZHNbZGUrd107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3IoZGU9dGhpcy5sZW5ndGgtMTtkZT49MCYmKDAhPT1mZXx8ZGU+PXYpO2RlLS0pe3ZhciB4'@;
put 'ZT0wfHRoaXMud29yZHNbZGVdO3RoaXMud29yZHNbZGVdPWZlPDwyNi1wfHhlPj4+cCxmZT14ZSZKfXJldHVybiBuZSYmMCE9PWZlJiYobmUud29yZHNbbmUubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgp'@;
put 'fSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxTKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90'@;
put 'b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1TfHwhKHRoaXMud29yZHNbU10mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09'@;
put 'dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PVM/dGhpczooMCE9PUMmJlMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihTLHRo'@;
put 'aXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRu'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSks'@;
put 'dGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgm'@;
put 'JnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3Rv'@;
put 'dHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhp'@;
put 'cztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0Nd'@;
put 'Kz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4o'@;
put 'Zyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHA7'@;
put 'dGhpcy5fZXhwYW5kKGcubGVuZ3RoK1MpO3ZhciBKPTA7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrU10pK0o7dmFyIG5lPSgwfGcud29yZHNbdl0pKkM7Sj0oKHAtPTY3MTA4ODYzJm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrU109Njcx'@;
put 'MDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtUzt2KyspSj0ocD0oMHx0aGlzLndvcmRzW3YrU10pK0opPj4yNix0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcDtpZigwPT09SilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09SiksSj0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKylKPShw'@;
put 'PS0oMHx0aGlzLndvcmRzW3ZdKStKKT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBTLHY9dGhpcy5jbG9uZSgpLHA9Zyx3PTB8cC53b3Jkc1twLmxl'@;
put 'bmd0aC0xXTswIT0oUz0yNi10aGlzLl9jb3VudEJpdHModykpJiYocD1wLnVzaGxuKFMpLHYuaXVzaGxuKFMpLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgSixuZT12Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhKPW5ldyBFKG51bGwpKS5sZW5ndGg9bmUrMSxKLndvcmRz'@;
put 'PW5ldyBBcnJheShKLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPEoubGVuZ3RoO2RlKyspSi53b3Jkc1tkZV09MH12YXIgZmU9di5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1mZS5uZWdhdGl2ZSYmKHY9ZmUsSiYmKEoud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+'@;
put 'PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfHYud29yZHNbcC5sZW5ndGgreGVdKSsoMHx2LndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoTGU9TWF0aC5taW4oTGUvd3wwLDY3MTA4ODYzKSx2Ll9pc2hsbnN1Ym11bChwLExlLHhlKTswIT09di5uZWdhdGl2ZTspTGUtLSx2Lm5lZ2F0aXZl'@;
put 'PTAsdi5faXNobG5zdWJtdWwocCwxLHhlKSx2LmlzWmVybygpfHwodi5uZWdhdGl2ZV49MSk7SiYmKEoud29yZHNbeGVdPUxlKX1yZXR1cm4gSiYmSi5zdHJpcCgpLHYuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1TJiZ2Lml1c2hybihTKSx7ZGl2Okp8fG51bGwsbW9kOnZ9fSxFLnByb3RvdHlw'@;
put 'ZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih2PXcu'@;
put 'ZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6dixtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8odz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVn'@;
put 'KCkpLHtkaXY6dixtb2Q6dy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6dy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50'@;
put 'aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7'@;
put 'ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB2LHAsd30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBl'@;
put 'Lm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2'@;
put 'bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgUz0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx2PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLHc9Uy5jbXAodik7cmV0dXJuIHc8MHx8MT09PXAmJjA9PT13P0MuZGl2OjAhPT1DLmRpdi5uZWdh'@;
put 'dGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxTPTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklZztyZXR1cm4g'@;
put 'U30sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSs2NzEwODg2NCpDO3RoaXMud29yZHNbU109di9nfDAsQz12JWd9cmV0dXJuIHRoaXMuc3RyaXAo'@;
put 'KX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9D'@;
put 'LnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdj1uZXcgRSgxKSxwPW5ldyBFKDApLHc9bmV3IEUoMCksSj1uZXcgRSgxKSxuZT0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpLCsrbmU7Zm9yKHZhciBkZT1TLmNsb25lKCksZmU9Qy5jbG9uZSgpOyFD'@;
put 'LmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLExlPTE7IShDLndvcmRzWzBdJkxlKSYmeGU8MjY7Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKEMuaXVzaHJuKHhlKTt4ZS0tID4wOykodi5pc09kZCgpfHxwLmlzT2RkKCkpJiYodi5pYWRkKGRlKSxwLmlzdWIoZmUpKSx2Lml1c2hybigxKSxwLml1'@;
put 'c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKFMud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3IoUy5pdXNocm4oRmUpO0ZlLS0gPjA7KSh3LmlzT2RkKCl8fEouaXNPZGQoKSkmJih3LmlhZGQoZGUpLEouaXN1YihmZSkpLHcuaXVzaHJuKDEpLEouaXVzaHJu'@;
put 'KDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyksdi5pc3ViKHcpLHAuaXN1YihKKSk6KFMuaXN1YihDKSx3LmlzdWIodiksSi5pc3ViKHApKX1yZXR1cm57YTp3LGI6SixnY2Q6Uy5pdXNobG4obmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEko'@;
put 'IWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdixwPW5ldyBFKDEpLHc9bmV3IEUoMCksSj1TLmNsb25lKCk7Qy5jbXBuKDEpPjAmJlMuY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLGRlPTE7IShD'@;
put 'LndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChKKSxwLml1c2hybigxKTtmb3IodmFyIGZlPTAseGU9MTshKFMud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClm'@;
put 'b3IoUy5pdXNocm4oZmUpO2ZlLS0gPjA7KXcuaXNPZGQoKSYmdy5pYWRkKEopLHcuaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUykscC5pc3ViKHcpKTooUy5pc3ViKEMpLHcuaXN1YihwKSl9cmV0dXJuKHY9MD09PUMuY21wbigxKT9wOncpLmNtcG4oMCk8MCYmdi5pYWRkKGcpLHZ9'@;
put 'LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLFM9Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB2PTA7Qy5p'@;
put 'c0V2ZW4oKSYmUy5pc0V2ZW4oKTt2KyspQy5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoUyk7aWYocDwwKXt2YXIgdz1DO0M9UyxTPXd9ZWxzZSBpZigwPT09'@;
put 'cHx8MD09PVMuY21wbigxKSlicmVhaztDLmlzdWIoUyl9cmV0dXJuIFMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jk'@;
put 'c1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBl'@;
put 'b2YgZyk7dmFyIEM9ZyUyNixTPShnLUMpLzI2LHY9MTw8QztpZih0aGlzLmxlbmd0aDw9UylyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXXw9dix0aGlzO2Zvcih2YXIgcD12LHc9UzswIT09cCYmdzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPTB8dGhpcy53b3Jkc1t3XTtw'@;
put 'PShKKz1wKT4+PjI2LHRoaXMud29yZHNbd109SiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1t3XT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxF'@;
put 'LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLFM9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhUylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmUylyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtTJiYoZz0tZyksSShnPD02NzEw'@;
put 'ODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdj0wfHRoaXMud29yZHNbMF07Qz12PT09Zz8wOnY8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUp'@;
put 'cmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVy'@;
put 'biAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9MHx0aGlzLndvcmRzW1NdLHA9MHxnLndvcmRzW1NdO2lmKHYhPT1wKXt2PHA/Qz0tMTp2PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90'@;
put 'b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0'@;
put 'ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgSChnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwi'@;
put 'cmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4'@;
put 'dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJl'@;
put 'ZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRk'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRT'@;
put 'aGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJp'@;
put 'ZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0s'@;
put 'RS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mg'@;
put 'b25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f'@;
put 'dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgaGU9'@;
put 'e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhp'@;
put 'cy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEcoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEQoKXt1'@;
put 'ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJp'@;
put 'bWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBOKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNo'@;
put 'aWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRp'@;
put 'dih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8x'@;
put 'MykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLFM9Zztkb3t0aGlzLnNwbGl0KFMsdGhpcy50bXApLEM9KFM9KFM9dGhpcy5pbXVsSyhTKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgdj1DPHRoaXMubj8tMTpTLnVj'@;
put 'bXAodGhpcy5wKTtyZXR1cm4gMD09PXY/KFMud29yZHNbMF09MCxTLmxlbmd0aD0xKTp2PjA/Uy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Uy5zdHJpcD9TLnN0cmlwKCk6Uy5fc3RyaXAoKSxTfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0s'@;
put 'dWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sayhjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTQxOTQzMDMsdj1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPWcud29y'@;
put 'ZHNbcF07aWYoQy5sZW5ndGg9dixnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIHc9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT13JlMscD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIEo9MHxnLndvcmRzW3BdO2cud29yZHNbcC0x'@;
put 'MF09KEomUyk8PDR8dz4+PjIyLHc9Sn1nLndvcmRzW3AtMTBdPXc+Pj49MjIsZy5sZW5ndGgtPTA9PT13JiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7'@;
put 'Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0wfGcud29yZHNbU107Zy53b3Jkc1tTXT02NzEwODg2MyYoQys9OTc3KnYpLEM9NjQqdisoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVu'@;
put 'Z3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxrKEcsdWUpLGsoYix1ZSksayhELHVlKSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTE5KigwfGcud29yZHNbU10pK0MscD02NzEwODg2MyZ2O3Y+Pj49MjYsZy53b3Jkc1tT'@;
put 'XT1wLEM9dn1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGhlW2ddKXJldHVybiBoZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09'@;
put 'ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IER9cmV0dXJuIGhlW2ddPUMsQ30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBw'@;
put 'b3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJl'@;
put 'ZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgu'@;
put 'cHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmFkZChDKTtyZXR1cm4gUy5jbXAodGhp'@;
put 'cy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTfSxILnByb3RvdHlwZS5z'@;
put 'dWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5zdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlz'@;
put 'dWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5f'@;
put 'dmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LEgucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xv'@;
put 'bmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIFM9'@;
put 'dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLFMpfWZvcih2YXIgdj10aGlzLm0uc3VibigxKSxwPTA7IXYuaXNaZXJvKCkmJjA9PT12LmFuZGxuKDEpOylwKyssdi5pdXNocm4oMSk7SSghdi5pc1plcm8oKSk7dmFyIHc9bmV3IEUoMSkudG9SZWQodGhp'@;
put 'cyksSj13LnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxkZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGRlPW5ldyBFKDIqZGUqZGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhkZSxuZSkuY21wKEopOylkZS5yZWRJQWRkKEopO2Zvcih2YXIgZmU9dGhpcy5wb3coZGUs'@;
put 'dikseGU9dGhpcy5wb3coZyx2LmFkZG4oMSkuaXVzaHJuKDEpKSxMZT10aGlzLnBvdyhnLHYpLEZlPXA7MCE9PUxlLmNtcCh3KTspe2Zvcih2YXIgT2U9TGUsamU9MDswIT09T2UuY21wKHcpO2plKyspT2U9T2UucmVkU3FyKCk7SShqZTxGZSk7dmFyIFdlPXRoaXMucG93KGZlLG5ldyBFKDEp'@;
put 'Lml1c2hsbihGZS1qZS0xKSk7eGU9eGUucmVkTXVsKFdlKSxmZT1XZS5yZWRTcXIoKSxMZT1MZS5yZWRNdWwoZmUpLEZlPWplfXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdh'@;
put 'dGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5'@;
put 'KDE2KTtTWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLFNbMV09Zztmb3IodmFyIHY9Mjt2PFMubGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVsKFNbdi0xXSxnKTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLHY9Qy5sZW5ndGgtMTt2Pj0w'@;
put 'O3YtLSl7Zm9yKHZhciBkZT1DLndvcmRzW3ZdLGZlPW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhlPWRlPj5mZSYxO3AhPT1TWzBdJiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9eGUsKDQ9PSsrSnx8MD09PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0w'@;
put 'LHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sSC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVy'@;
put 'biBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE4oZyl9LGsoTixIKSxOLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24o'@;
put 'Zyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBTPWcuaW11bChDKSx2'@;
put 'PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRk'@;
put 'KHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIFM9Zy5tdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1p'@;
put 'bnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5w'@;
put 'cm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShNPVIubm1kKE0pLHRoaXMpfSw2OTQ4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Tzt6LnZlcnNpb249Uig4NTk3KS5p'@;
put 'OCx6LnV0aWxzPVIoOTUzKSx6LnJhbmQ9Uig5OTMxKSx6LmN1cnZlPVIoODI1NCksei5jdXJ2ZXM9Uig1NDI3KSx6LmVjPVIoNzk1NCksei5lZGRzYT1SKDU5ODApfSw0OTE4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoOTUzKSxJPUsuZ2V0TkFGLGs9Sy5nZXRK'@;
put 'U0YsRT1LLmFzc2VydDtmdW5jdGlvbiBqKEIsWSl7dGhpcy50eXBlPUIsdGhpcy5wPW5ldyB6KFkucCwxNiksdGhpcy5yZWQ9WS5wcmltZT96LnJlZChZLnByaW1lKTp6Lm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IHooMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyB6KDEpLnRv'@;
put 'UmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgeigyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPVkubiYmbmV3IHooWS5uLDE2KSx0aGlzLmc9WS5nJiZ0aGlzLnBvaW50RnJvbUpTT04oWS5nLFkuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5'@;
put 'KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBYPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFYfHxYLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxs'@;
put 'Oih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIFYoQixZKXt0aGlzLmN1cnZlPUIsdGhpcy50eXBlPVksdGhpcy5wcmVjb21wdXRlZD1udWxsfU0uZXhwb3J0cz1qLGoucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhy'@;
put 'b3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sai5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxqLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oQixZKXtFKEIucHJlY29tcHV0ZWQpO3ZhciBYPUIu'@;
put 'X2dldERvdWJsZXMoKSxVPUkoWSwxLHRoaXMuX2JpdExlbmd0aCkscT0oMTw8WC5zdGVwKzEpLShYLnN0ZXAlMj09MD8yOjEpO3EvPTM7dmFyIGVlLHRlLG9lPVtdO2ZvcihlZT0wO2VlPFUubGVuZ3RoO2VlKz1YLnN0ZXApe3RlPTA7Zm9yKHZhciBzZT1lZStYLnN0ZXAtMTtzZT49ZWU7c2Ut'@;
put 'LSl0ZT0odGU8PDEpK1Vbc2VdO29lLnB1c2godGUpfWZvcih2YXIgaGU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHVlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxjZT1xO2NlPjA7Y2UtLSl7Zm9yKGVlPTA7ZWU8b2UubGVuZ3RoO2VlKyspKHRlPW9lW2VlXSk9PT1jZT91ZT11'@;
put 'ZS5taXhlZEFkZChYLnBvaW50c1tlZV0pOnRlPT09LWNlJiYodWU9dWUubWl4ZWRBZGQoWC5wb2ludHNbZWVdLm5lZygpKSk7aGU9aGUuYWRkKHVlKX1yZXR1cm4gaGUudG9QKCl9LGoucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKEIsWSl7Zm9yKHZhciBYPTQsVT1CLl9nZXROQUZQb2lu'@;
put 'dHMoWCkscT1VLnBvaW50cyxlZT1JKFksWD1VLnduZCx0aGlzLl9iaXRMZW5ndGgpLHRlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxvZT1lZS5sZW5ndGgtMTtvZT49MDtvZS0tKXtmb3IodmFyIHNlPTA7b2U+PTAmJjA9PT1lZVtvZV07b2UtLSlzZSsrO2lmKG9lPj0wJiZzZSsrLHRl'@;
put 'PXRlLmRibHAoc2UpLG9lPDApYnJlYWs7dmFyIGhlPWVlW29lXTtFKDAhPT1oZSksdGU9ImFmZmluZSI9PT1CLnR5cGU/dGUubWl4ZWRBZGQoaGU+MD9xW2hlLTE+PjFdOnFbLWhlLTE+PjFdLm5lZygpKTp0ZS5hZGQoaGU+MD9xW2hlLTE+PjFdOnFbLWhlLTE+PjFdLm5lZygpKX1yZXR1cm4i'@;
put 'YWZmaW5lIj09PUIudHlwZT90ZS50b1AoKTp0ZX0sai5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oQixZLFgsVSxxKXt2YXIgZWUsdGUsb2Usc2U9dGhpcy5fd25hZlQxLGhlPXRoaXMuX3duYWZUMix1ZT10aGlzLl93bmFmVDMsY2U9MDtmb3IoZWU9MDtlZTxVO2VlKyspe3ZhciBH'@;
put 'PShvZT1ZW2VlXSkuX2dldE5BRlBvaW50cyhCKTtzZVtlZV09Ry53bmQsaGVbZWVdPUcucG9pbnRzfWZvcihlZT1VLTE7ZWU+PTE7ZWUtPTIpe3ZhciBiPWVlLTEsRD1lZTtpZigxPT09c2VbYl0mJjE9PT1zZVtEXSl7dmFyIEg9W1lbYl0sbnVsbCxudWxsLFlbRF1dOzA9PT1ZW2JdLnkuY21w'@;
put 'KFlbRF0ueSk/KEhbMV09WVtiXS5hZGQoWVtEXSksSFsyXT1ZW2JdLnRvSigpLm1peGVkQWRkKFlbRF0ubmVnKCkpKTowPT09WVtiXS55LmNtcChZW0RdLnkucmVkTmVnKCkpPyhIWzFdPVlbYl0udG9KKCkubWl4ZWRBZGQoWVtEXSksSFsyXT1ZW2JdLmFkZChZW0RdLm5lZygpKSk6KEhbMV09'@;
put 'WVtiXS50b0ooKS5taXhlZEFkZChZW0RdKSxIWzJdPVlbYl0udG9KKCkubWl4ZWRBZGQoWVtEXS5uZWcoKSkpO3ZhciBOPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLGc9ayhYW2JdLFhbRF0pO2ZvcihjZT1NYXRoLm1heChnWzBdLmxlbmd0aCxjZSksdWVbYl09bmV3IEFycmF5KGNlKSx1ZVtE'@;
put 'XT1uZXcgQXJyYXkoY2UpLHRlPTA7dGU8Y2U7dGUrKyl1ZVtiXVt0ZV09TlszKigxKygwfGdbMF1bdGVdKSkrKDErKDB8Z1sxXVt0ZV0pKV0sdWVbRF1bdGVdPTAsaGVbYl09SH1lbHNlIHVlW2JdPUkoWFtiXSxzZVtiXSx0aGlzLl9iaXRMZW5ndGgpLHVlW0RdPUkoWFtEXSxzZVtEXSx0aGlz'@;
put 'Ll9iaXRMZW5ndGgpLGNlPU1hdGgubWF4KHVlW2JdLmxlbmd0aCxjZSksY2U9TWF0aC5tYXgodWVbRF0ubGVuZ3RoLGNlKX12YXIgdj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkscD10aGlzLl93bmFmVDQ7Zm9yKGVlPWNlO2VlPj0wO2VlLS0pe2Zvcih2YXIgdz0wO2VlPj0wOyl7dmFy'@;
put 'IEo9ITA7Zm9yKHRlPTA7dGU8VTt0ZSsrKXBbdGVdPTB8dWVbdGVdW2VlXSwwIT09cFt0ZV0mJihKPSExKTtpZighSilicmVhazt3KyssZWUtLX1pZihlZT49MCYmdysrLHY9di5kYmxwKHcpLGVlPDApYnJlYWs7Zm9yKHRlPTA7dGU8VTt0ZSsrKXt2YXIgbmU9cFt0ZV07MCE9PW5lJiYobmU+'@;
put 'MD9vZT1oZVt0ZV1bbmUtMT4+MV06bmU8MCYmKG9lPWhlW3RlXVstbmUtMT4+MV0ubmVnKCkpLHY9ImFmZmluZSI9PT1vZS50eXBlP3YubWl4ZWRBZGQob2UpOnYuYWRkKG9lKSl9fWZvcihlZT0wO2VlPFU7ZWUrKyloZVtlZV09bnVsbDtyZXR1cm4gcT92OnYudG9QKCl9LGouQmFzZVBvaW50'@;
put 'PVYsVi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxWLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxqLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihC'@;
put 'LFkpe0I9Sy50b0FycmF5KEIsWSk7dmFyIFg9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PUJbMF18fDY9PT1CWzBdfHw3PT09QlswXSkmJkIubGVuZ3RoLTE9PTIqWClyZXR1cm4gNj09PUJbMF0/RShCW0IubGVuZ3RoLTFdJTI9PTApOjc9PT1CWzBdJiZFKEJbQi5sZW5ndGgtMV0lMj09'@;
put 'MSksdGhpcy5wb2ludChCLnNsaWNlKDEsMStYKSxCLnNsaWNlKDErWCwxKzIqWCkpO2lmKCgyPT09QlswXXx8Mz09PUJbMF0pJiZCLmxlbmd0aC0xPT09WClyZXR1cm4gdGhpcy5wb2ludEZyb21YKEIuc2xpY2UoMSwxK1gpLDM9PT1CWzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9p'@;
put 'bnQgZm9ybWF0Iil9LFYucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuZW5jb2RlKEIsITApfSxWLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEIpe3ZhciBZPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksWD10aGlzLmdldFgoKS50b0FycmF5'@;
put 'KCJiZSIsWSk7cmV0dXJuIEI/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KFgpOls0XS5jb25jYXQoWCx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsWSkpfSxWLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSy5lbmNvZGUodGhpcy5fZW5jb2RlKFkpLEIp'@;
put 'fSxWLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKEIpe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIFk9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBZLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksWS5kb3VibGVzPXRoaXMuX2dldERv'@;
put 'dWJsZXMoNCxCKSxZLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9WSx0aGlzfSxWLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbihCKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgWT10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFZ'@;
put 'JiZZLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoQi5iaXRMZW5ndGgoKSsxKS9ZLnN0ZXApfSxWLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbihCLFkpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5k'@;
put 'b3VibGVzO2Zvcih2YXIgWD1bdGhpc10sVT10aGlzLHE9MDtxPFk7cSs9Qil7Zm9yKHZhciBlZT0wO2VlPEI7ZWUrKylVPVUuZGJsKCk7WC5wdXNoKFUpfXJldHVybntzdGVwOkIscG9pbnRzOlh9fSxWLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKEIpe2lmKHRoaXMucHJlY29t'@;
put 'cHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIFk9W3RoaXNdLFg9KDE8PEIpLTEsVT0xPT09WD9udWxsOnRoaXMuZGJsKCkscT0xO3E8WDtxKyspWVtxXT1ZW3EtMV0uYWRkKFUpO3JldHVybnt3bmQ6Qixwb2ludHM6WX19LFYu'@;
put 'cHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LFYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oQil7Zm9yKHZhciBZPXRoaXMsWD0wO1g8QjtYKyspWT1ZLmRibCgpO3JldHVybiBZfX0sMTEzODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUzKSxLPVIo'@;
put 'Mzc4NSksST1SKDU3MTcpLGs9Uig0OTE4KSxFPXouYXNzZXJ0O2Z1bmN0aW9uIGooQil7dGhpcy50d2lzdGVkPTEhPSgwfEIuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxCLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxrLmNhbGwodGhpcywiZWR3YXJkcyIsQiksdGhp'@;
put 'cy5hPW5ldyBLKEIuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IEsoQi5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBLKEIuZCwxNikudG9SZWQodGhpcy5yZWQpLHRo'@;
put 'aXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLEUoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfEIuYyl9ZnVuY3Rpb24gVihCLFksWCxVLHEpe2suQmFzZVBvaW50LmNhbGwodGhpcyxCLCJwcm9qZWN0aXZlIiksbnVsbD09PVkm'@;
put 'Jm51bGw9PT1YJiZudWxsPT09VT8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBLKFksMTYpLHRoaXMueT1uZXcgSyhYLDE2KSx0'@;
put 'aGlzLno9VT9uZXcgSyhVLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9cSYmbmV3IEsocSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5y'@;
put 'ZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYm'@;
put 'KHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9SShqLGspLE0uZXhwb3J0cz1qLGoucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLm1PbmVBP0IucmVkTmVnKCk6dGhp'@;
put 'cy5hLnJlZE11bChCKX0sai5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMub25lQz9COnRoaXMuYy5yZWRNdWwoQil9LGoucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gdGhpcy5wb2ludChCLFksWCxVKX0sai5wcm90b3R5cGUucG9pbnRG'@;
put 'cm9tWD1mdW5jdGlvbihCLFkpeyhCPW5ldyBLKEIsMTYpKS5yZWR8fChCPUIudG9SZWQodGhpcy5yZWQpKTt2YXIgWD1CLnJlZFNxcigpLFU9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChYKSkscT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoWCkp'@;
put 'LGVlPVUucmVkTXVsKHEucmVkSW52bSgpKSx0ZT1lZS5yZWRTcXJ0KCk7aWYoMCE9PXRlLnJlZFNxcigpLnJlZFN1YihlZSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIG9lPXRlLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihZJiYhb2V8fCFZ'@;
put 'JiZvZSkmJih0ZT10ZS5yZWROZWcoKSksdGhpcy5wb2ludChCLHRlKX0sai5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbihCLFkpeyhCPW5ldyBLKEIsMTYpKS5yZWR8fChCPUIudG9SZWQodGhpcy5yZWQpKTt2YXIgWD1CLnJlZFNxcigpLFU9WC5yZWRTdWIodGhpcy5jMikscT1YLnJl'@;
put 'ZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKSxlZT1VLnJlZE11bChxLnJlZEludm0oKSk7aWYoMD09PWVlLmNtcCh0aGlzLnplcm8pKXtpZihZKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyxCKX12'@;
put 'YXIgdGU9ZWUucmVkU3FydCgpO2lmKDAhPT10ZS5yZWRTcXIoKS5yZWRTdWIoZWUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0ZS5mcm9tUmVkKCkuaXNPZGQoKSE9PVkmJih0ZT10ZS5yZWROZWcoKSksdGhpcy5wb2ludCh0ZSxCKX0s'@;
put 'ai5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oQil7aWYoQi5pc0luZmluaXR5KCkpcmV0dXJuITA7Qi5ub3JtYWxpemUoKTt2YXIgWT1CLngucmVkU3FyKCksWD1CLnkucmVkU3FyKCksVT1ZLnJlZE11bCh0aGlzLmEpLnJlZEFkZChYKSxxPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJl'@;
put 'ZEFkZCh0aGlzLmQucmVkTXVsKFkpLnJlZE11bChYKSkpO3JldHVybiAwPT09VS5jbXAocSl9LEkoVixrLkJhc2VQb2ludCksai5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihCKXtyZXR1cm4gVi5mcm9tSlNPTih0aGlzLEIpfSxqLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihC'@;
put 'LFksWCxVKXtyZXR1cm4gbmV3IFYodGhpcyxCLFksWCxVKX0sVi5mcm9tSlNPTj1mdW5jdGlvbihCLFkpe3JldHVybiBuZXcgVihCLFlbMF0sWVsxXSxZWzJdKX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmlu'@;
put 'aXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxWLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LFYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgQj10aGlzLngucmVkU3FyKCksWT10aGlzLnkucmVk'@;
put 'U3FyKCksWD10aGlzLnoucmVkU3FyKCk7WD1YLnJlZElBZGQoWCk7dmFyIFU9dGhpcy5jdXJ2ZS5fbXVsQShCKSxxPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKEIpLnJlZElTdWIoWSksZWU9VS5yZWRBZGQoWSksdGU9ZWUucmVkU3ViKFgpLG9lPVUucmVkU3ViKFkp'@;
put 'LHNlPXEucmVkTXVsKHRlKSxoZT1lZS5yZWRNdWwob2UpLHVlPXEucmVkTXVsKG9lKSxjZT10ZS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHNlLGhlLGNlLHVlKX0sVi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgQixZLFgsVSxxLGVlLHRlPXRoaXMueC5y'@;
put 'ZWRBZGQodGhpcy55KS5yZWRTcXIoKSxvZT10aGlzLngucmVkU3FyKCksc2U9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIGhlPShVPXRoaXMuY3VydmUuX211bEEob2UpKS5yZWRBZGQoc2UpO3RoaXMuek9uZT8oQj10ZS5yZWRTdWIob2UpLnJlZFN1YihzZSku'@;
put 'cmVkTXVsKGhlLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLFk9aGUucmVkTXVsKFUucmVkU3ViKHNlKSksWD1oZS5yZWRTcXIoKS5yZWRTdWIoaGUpLnJlZFN1YihoZSkpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1oZS5yZWRTdWIocSkucmVkSVN1YihxKSxCPXRlLnJlZFN1YihvZSkucmVkSVN1'@;
put 'YihzZSkucmVkTXVsKGVlKSxZPWhlLnJlZE11bChVLnJlZFN1YihzZSkpLFg9aGUucmVkTXVsKGVlKSl9ZWxzZSBVPW9lLnJlZEFkZChzZSkscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9VS5yZWRTdWIocSkucmVkU3ViKHEpLEI9dGhpcy5jdXJ2ZS5fbXVsQyh0ZS5y'@;
put 'ZWRJU3ViKFUpKS5yZWRNdWwoZWUpLFk9dGhpcy5jdXJ2ZS5fbXVsQyhVKS5yZWRNdWwob2UucmVkSVN1YihzZSkpLFg9VS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsWSxYKX0sVi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgp'@;
put 'P3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LFYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oQil7dmFyIFk9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChCLnkucmVkU3ViKEIueCkpLFg9dGhpcy55LnJlZEFkZCh0aGlzLngp'@;
put 'LnJlZE11bChCLnkucmVkQWRkKEIueCkpLFU9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoQi50KSxxPXRoaXMuei5yZWRNdWwoQi56LnJlZEFkZChCLnopKSxlZT1YLnJlZFN1YihZKSx0ZT1xLnJlZFN1YihVKSxvZT1xLnJlZEFkZChVKSxzZT1YLnJlZEFkZChZKSxoZT1l'@;
put 'ZS5yZWRNdWwodGUpLHVlPW9lLnJlZE11bChzZSksY2U9ZWUucmVkTXVsKHNlKSxHPXRlLnJlZE11bChvZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoaGUsdWUsRyxjZSl9LFYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKEIpe3ZhciBZLFgsVT10aGlzLnoucmVkTXVsKEIueikscT1V'@;
put 'LnJlZFNxcigpLGVlPXRoaXMueC5yZWRNdWwoQi54KSx0ZT10aGlzLnkucmVkTXVsKEIueSksb2U9dGhpcy5jdXJ2ZS5kLnJlZE11bChlZSkucmVkTXVsKHRlKSxzZT1xLnJlZFN1YihvZSksaGU9cS5yZWRBZGQob2UpLHVlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoQi54LnJlZEFk'@;
put 'ZChCLnkpKS5yZWRJU3ViKGVlKS5yZWRJU3ViKHRlKSxjZT1VLnJlZE11bChzZSkucmVkTXVsKHVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhZPVUucmVkTXVsKGhlKS5yZWRNdWwodGUucmVkU3ViKHRoaXMuY3VydmUuX211bEEoZWUpKSksWD1zZS5yZWRNdWwoaGUpKTooWT1VLnJl'@;
put 'ZE11bChoZSkucmVkTXVsKHRlLnJlZFN1YihlZSkpLFg9dGhpcy5jdXJ2ZS5fbXVsQyhzZSkucmVkTXVsKGhlKSksdGhpcy5jdXJ2ZS5wb2ludChjZSxZLFgpfSxWLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP0I6Qi5pc0luZmluaXR5KCk/dGhp'@;
put 'czp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChCKTp0aGlzLl9wcm9qQWRkKEIpfSxWLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoQik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxCKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRo'@;
put 'aXMsQil9LFYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihCLFksWCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxZXSxbQixYXSwyLCExKX0sVi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihCLFksWCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxb'@;
put 'dGhpcyxZXSxbQixYXSwyLCEwKX0sVi5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBCPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKEIpLHRoaXMueT10aGlzLnkucmVkTXVsKEIpLHRoaXMudCYm'@;
put 'KHRoaXMudD10aGlzLnQucmVkTXVsKEIpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LFYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJl'@;
put 'ZE5lZygpKX0sVi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LFYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxWLnByb3RvdHlwZS5lcT1m'@;
put 'dW5jdGlvbihCKXtyZXR1cm4gdGhpcz09PUJ8fDA9PT10aGlzLmdldFgoKS5jbXAoQi5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKEIuZ2V0WSgpKX0sVi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEIpe3ZhciBZPUIudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnop'@;
put 'O2lmKDA9PT10aGlzLnguY21wKFkpKXJldHVybiEwO2Zvcih2YXIgWD1CLmNsb25lKCksVT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoWC5pYWRkKHRoaXMuY3VydmUubiksWC5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihZLnJlZElBZGQoVSksMD09PXRo'@;
put 'aXMueC5jbXAoWSkpcmV0dXJuITB9fSxWLnByb3RvdHlwZS50b1A9Vi5wcm90b3R5cGUubm9ybWFsaXplLFYucHJvdG90eXBlLm1peGVkQWRkPVYucHJvdG90eXBlLmFkZH0sODI1NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PU87ei5iYXNlPVIoNDkxOCksei5zaG9ydD1SKDY2NzMp'@;
put 'LHoubW9udD1SKDI4ODEpLHouZWR3YXJkcz1SKDExMzgpfSwyODgxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoNTcxNyksST1SKDQ5MTgpLGs9Uig5NTMpO2Z1bmN0aW9uIEUoVil7SS5jYWxsKHRoaXMsIm1vbnQiLFYpLHRoaXMuYT1uZXcgeihWLmEsMTYpLnRv'@;
put 'UmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHooVi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgeig0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyB6KDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRk'@;
put 'KHRoaXMudHdvKSl9ZnVuY3Rpb24gaihWLEIsWSl7SS5CYXNlUG9pbnQuY2FsbCh0aGlzLFYsInByb2plY3RpdmUiKSxudWxsPT09QiYmbnVsbD09PVk/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyB6KEIsMTYpLHRoaXMuej1uZXcg'@;
put 'eihZLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfUsoRSxJKSxNLmV4cG9ydHM9RSxFLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihWKXt2YXIg'@;
put 'Qj1WLm5vcm1hbGl6ZSgpLngsWT1CLnJlZFNxcigpLFg9WS5yZWRNdWwoQikucmVkQWRkKFkucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChCKTtyZXR1cm4gMD09PVgucmVkU3FydCgpLnJlZFNxcigpLmNtcChYKX0sSyhqLEkuQmFzZVBvaW50KSxFLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5j'@;
put 'dGlvbihWLEIpe3JldHVybiB0aGlzLnBvaW50KGsudG9BcnJheShWLEIpLDEpfSxFLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihWLEIpe3JldHVybiBuZXcgaih0aGlzLFYsQil9LEUucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oVil7cmV0dXJuIGouZnJvbUpTT04odGhpcyxW'@;
put 'KX0sai5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sai5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGouZnJvbUpTT049ZnVuY3Rpb24oVixCKXtyZXR1cm4gbmV3'@;
put 'IGooVixCWzBdLEJbMV18fFYub25lKX0sai5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5m'@;
put 'cm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxqLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sai5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLEI9dGhpcy54LnJl'@;
put 'ZFN1Yih0aGlzLnopLnJlZFNxcigpLFk9Vi5yZWRTdWIoQiksWD1WLnJlZE11bChCKSxVPVkucmVkTXVsKEIucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChZKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFgsVSl9LGoucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBF'@;
put 'cnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LGoucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oVixCKXt2YXIgWT10aGlzLngucmVkQWRkKHRoaXMueiksWD10aGlzLngucmVkU3ViKHRoaXMueiksVT1WLngucmVkQWRkKFYueikscT1WLngucmVkU3ViKFYueiku'@;
put 'cmVkTXVsKFkpLGVlPVUucmVkTXVsKFgpLHRlPUIuei5yZWRNdWwocS5yZWRBZGQoZWUpLnJlZFNxcigpKSxvZT1CLngucmVkTXVsKHEucmVkSVN1YihlZSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRlLG9lKX0sai5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFYpe2Zvcih2'@;
put 'YXIgQj1WLmNsb25lKCksWT10aGlzLFg9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFU9W107MCE9PUIuY21wbigwKTtCLml1c2hybigxKSlVLnB1c2goQi5hbmRsbigxKSk7Zm9yKHZhciBxPVUubGVuZ3RoLTE7cT49MDtxLS0pMD09PVVbcV0/KFk9WS5kaWZmQWRkKFgsdGhpcyksWD1Y'@;
put 'LmRibCgpKTooWD1ZLmRpZmZBZGQoWCx0aGlzKSxZPVkuZGJsKCkpO3JldHVybiBYfSxqLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxqLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7'@;
put 'dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sai5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oVil7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoVi5nZXRYKCkpfSxqLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54'@;
put 'PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LGoucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjY3MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6'@;
put 'PVIoOTUzKSxLPVIoMzc4NSksST1SKDU3MTcpLGs9Uig0OTE4KSxFPXouYXNzZXJ0O2Z1bmN0aW9uIGooWSl7ay5jYWxsKHRoaXMsInNob3J0IixZKSx0aGlzLmE9bmV3IEsoWS5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBLKFkuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMu'@;
put 'dGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oWSksdGhpcy5fZW5kb1du'@;
put 'YWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gVihZLFgsVSxxKXtrLkJhc2VQb2ludC5jYWxsKHRoaXMsWSwiYWZmaW5lIiksbnVsbD09PVgmJm51bGw9PT1VPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMu'@;
put 'eD1uZXcgSyhYLDE2KSx0aGlzLnk9bmV3IEsoVSwxNikscSYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwo'@;
put 'dGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBCKFksWCxVLHEpe2suQmFzZVBvaW50LmNhbGwodGhpcyxZLCJqYWNvYmlhbiIpLG51bGw9PT1YJiZudWxsPT09VSYmbnVsbD09PXE/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9'@;
put 'dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBLKDApKToodGhpcy54PW5ldyBLKFgsMTYpLHRoaXMueT1uZXcgSyhVLDE2KSx0aGlzLno9bmV3IEsocSwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlz'@;
put 'LnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1JKGosayksTS5leHBvcnRzPWosai5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlv'@;
put 'bihZKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgWCxVO2lmKFkuYmV0YSlYPW5ldyBLKFkuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIHE9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7WD0oWD1xWzBdLmNtcChxWzFd'@;
put 'KTwwP3FbMF06cVsxXSkudG9SZWQodGhpcy5yZWQpfWlmKFkubGFtYmRhKVU9bmV3IEsoWS5sYW1iZGEsMTYpO2Vsc2V7dmFyIGVlPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKGVlWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoWCkpP1U9ZWVbMF06RSgwPT09'@;
put 'dGhpcy5nLm11bChVPWVlWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoWCkpKX1yZXR1cm57YmV0YTpYLGxhbWJkYTpVLGJhc2lzOlkuYmFzaXM/WS5iYXNpcy5tYXAoZnVuY3Rpb24odGUpe3JldHVybnthOm5ldyBLKHRlLmEsMTYpLGI6bmV3IEsodGUuYiwxNil9fSk6dGhpcy5fZ2V0RW5k'@;
put 'b0Jhc2lzKFUpfX19LGoucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oWSl7dmFyIFg9WT09PXRoaXMucD90aGlzLnJlZDpLLm1vbnQoWSksVT1uZXcgSygyKS50b1JlZChYKS5yZWRJbnZtKCkscT1VLnJlZE5lZygpLGVlPW5ldyBLKDMpLnRvUmVkKFgpLnJlZE5lZygpLnJlZFNx'@;
put 'cnQoKS5yZWRNdWwoVSk7cmV0dXJuW3EucmVkQWRkKGVlKS5mcm9tUmVkKCkscS5yZWRTdWIoZWUpLmZyb21SZWQoKV19LGoucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYLFUscSxlZSx0ZSxvZSxzZSxoZSx1ZSxjZT10aGlzLm4udXNocm4oTWF0aC5mbG9v'@;
put 'cih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEc9WSxiPXRoaXMubi5jbG9uZSgpLEQ9bmV3IEsoMSksSD1uZXcgSygwKSxOPW5ldyBLKDApLGc9bmV3IEsoMSksQz0wOzAhPT1HLmNtcG4oMCk7KXt2YXIgUz1iLmRpdihHKTtoZT1iLnN1YihTLm11bChHKSksdWU9Ti5zdWIoUy5tdWwoRCkpO3Zh'@;
put 'ciB2PWcuc3ViKFMubXVsKEgpKTtpZighcSYmaGUuY21wKGNlKTwwKVg9c2UubmVnKCksVT1ELHE9aGUubmVnKCksZWU9dWU7ZWxzZSBpZihxJiYyPT0rK0MpYnJlYWs7c2U9aGUsYj1HLEc9aGUsTj1ELEQ9dWUsZz1ILEg9dn10ZT1oZS5uZWcoKSxvZT11ZTt2YXIgcD1xLnNxcigpLmFkZChl'@;
put 'ZS5zcXIoKSk7cmV0dXJuIHRlLnNxcigpLmFkZChvZS5zcXIoKSkuY21wKHApPj0wJiYodGU9WCxvZT1VKSxxLm5lZ2F0aXZlJiYocT1xLm5lZygpLGVlPWVlLm5lZygpKSx0ZS5uZWdhdGl2ZSYmKHRlPXRlLm5lZygpLG9lPW9lLm5lZygpKSxbe2E6cSxiOmVlfSx7YTp0ZSxiOm9lfV19LGou'@;
put 'cHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oWSl7dmFyIFg9dGhpcy5lbmRvLmJhc2lzLFU9WFswXSxxPVhbMV0sZWU9cS5iLm11bChZKS5kaXZSb3VuZCh0aGlzLm4pLHRlPVUuYi5uZWcoKS5tdWwoWSkuZGl2Um91bmQodGhpcy5uKSxvZT1lZS5tdWwoVS5hKSxzZT10ZS5tdWwocS5h'@;
put 'KSxoZT1lZS5tdWwoVS5iKSx1ZT10ZS5tdWwocS5iKTtyZXR1cm57azE6WS5zdWIob2UpLnN1YihzZSksazI6aGUuYWRkKHVlKS5uZWcoKX19LGoucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oWSxYKXsoWT1uZXcgSyhZLDE2KSkucmVkfHwoWT1ZLnRvUmVkKHRoaXMucmVkKSk7dmFy'@;
put 'IFU9WS5yZWRTcXIoKS5yZWRNdWwoWSkucmVkSUFkZChZLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYikscT1VLnJlZFNxcnQoKTtpZigwIT09cS5yZWRTcXIoKS5yZWRTdWIoVSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIGVlPXEu'@;
put 'ZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKFgmJiFlZXx8IVgmJmVlKSYmKHE9cS5yZWROZWcoKSksdGhpcy5wb2ludChZLHEpfSxqLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihZKXtpZihZLmluZilyZXR1cm4hMDt2YXIgWD1ZLngsVT1ZLnkscT10aGlzLmEucmVkTXVsKFgpLGVlPVgu'@;
put 'cmVkU3FyKCkucmVkTXVsKFgpLnJlZElBZGQocSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09VS5yZWRTcXIoKS5yZWRJU3ViKGVlKS5jbXBuKDApfSxqLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oWSxYLFUpe2Zvcih2YXIgcT10aGlzLl9lbmRvV25hZlQxLGVlPXRo'@;
put 'aXMuX2VuZG9XbmFmVDIsdGU9MDt0ZTxZLmxlbmd0aDt0ZSsrKXt2YXIgb2U9dGhpcy5fZW5kb1NwbGl0KFhbdGVdKSxzZT1ZW3RlXSxoZT1zZS5fZ2V0QmV0YSgpO29lLmsxLm5lZ2F0aXZlJiYob2UuazEuaW5lZygpLHNlPXNlLm5lZyghMCkpLG9lLmsyLm5lZ2F0aXZlJiYob2UuazIuaW5l'@;
put 'ZygpLGhlPWhlLm5lZyghMCkpLHFbMip0ZV09c2UscVsyKnRlKzFdPWhlLGVlWzIqdGVdPW9lLmsxLGVlWzIqdGUrMV09b2UuazJ9Zm9yKHZhciB1ZT10aGlzLl93bmFmTXVsQWRkKDEscSxlZSwyKnRlLFUpLGNlPTA7Y2U8Mip0ZTtjZSsrKXFbY2VdPW51bGwsZWVbY2VdPW51bGw7cmV0dXJu'@;
put 'IHVlfSxJKFYsay5CYXNlUG9pbnQpLGoucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFksWCxVKXtyZXR1cm4gbmV3IFYodGhpcyxZLFgsVSl9LGoucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oWSxYKXtyZXR1cm4gVi5mcm9tSlNPTih0aGlzLFksWCl9LFYucHJvdG90eXBlLl9n'@;
put 'ZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgWT10aGlzLnByZWNvbXB1dGVkO2lmKFkmJlkuYmV0YSlyZXR1cm4gWS5iZXRhO3ZhciBYPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihZKXt2YXIg'@;
put 'VT10aGlzLmN1cnZlLHE9ZnVuY3Rpb24oZWUpe3JldHVybiBVLnBvaW50KGVlLngucmVkTXVsKFUuZW5kby5iZXRhKSxlZS55KX07WS5iZXRhPVgsWC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpZLm5hZiYme3duZDpZLm5hZi53bmQscG9pbnRzOlkubmFmLnBvaW50cy5tYXAocSl9LGRv'@;
put 'dWJsZXM6WS5kb3VibGVzJiZ7c3RlcDpZLmRvdWJsZXMuc3RlcCxwb2ludHM6WS5kb3VibGVzLnBvaW50cy5tYXAocSl9fX1yZXR1cm4gWH19LFYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0'@;
put 'ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNv'@;
put 'bXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LFYuZnJvbUpTT049ZnVuY3Rpb24oWSxYLFUpeyJzdHJpbmciPT10eXBlb2YgWCYmKFg9SlNPTi5wYXJzZShYKSk7dmFyIHE9WS5wb2ludChYWzBdLFhb'@;
put 'MV0sVSk7aWYoIVhbMl0pcmV0dXJuIHE7ZnVuY3Rpb24gZWUob2Upe3JldHVybiBZLnBvaW50KG9lWzBdLG9lWzFdLFUpfXZhciB0ZT1YWzJdO3JldHVybiBxLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91Ymxlczp0ZS5kb3VibGVzJiZ7c3RlcDp0ZS5kb3VibGVzLnN0ZXAscG9pbnRzOltx'@;
put 'XS5jb25jYXQodGUuZG91Ymxlcy5wb2ludHMubWFwKGVlKSl9LG5hZjp0ZS5uYWYmJnt3bmQ6dGUubmFmLnduZCxwb2ludHM6W3FdLmNvbmNhdCh0ZS5uYWYucG9pbnRzLm1hcChlZSkpfX0scX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHko'@;
put 'KT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxWLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5m'@;
put 'fSxWLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5pbmYpcmV0dXJuIFk7aWYoWS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShZKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKFkpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09'@;
put 'PXRoaXMueC5jbXAoWS54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBYPXRoaXMueS5yZWRTdWIoWS55KTswIT09WC5jbXBuKDApJiYoWD1YLnJlZE11bCh0aGlzLngucmVkU3ViKFkueCkucmVkSW52bSgpKSk7dmFyIFU9WC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMu'@;
put 'eCkucmVkSVN1YihZLngpLHE9WC5yZWRNdWwodGhpcy54LnJlZFN1YihVKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUscSl9LFYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBZPXRoaXMueS5yZWRBZGQodGhp'@;
put 'cy55KTtpZigwPT09WS5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIFg9dGhpcy5jdXJ2ZS5hLFU9dGhpcy54LnJlZFNxcigpLHE9WS5yZWRJbnZtKCksZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKS5yZWRJQWRkKFgpLnJlZE11bChxKSx0ZT1lZS5yZWRT'@;
put 'cXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksb2U9ZWUucmVkTXVsKHRoaXMueC5yZWRTdWIodGUpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGUsb2UpfSxWLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVk'@;
put 'KCl9LFYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sVi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFkpe3JldHVybiBZPW5ldyBLKFksMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhZKT90aGlzLmN1cnZlLl9maXhl'@;
put 'ZE5hZk11bCh0aGlzLFkpOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW1ldKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsWSl9LFYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihZLFgsVSl7dmFyIHE9W3RoaXMsWF0sZWU9W1ksVV07cmV0dXJu'@;
put 'IHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChxLGVlKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEscSxlZSwyKX0sVi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihZLFgsVSl7dmFyIHE9W3RoaXMsWF0sZWU9W1ksVV07cmV0dXJuIHRoaXMuY3VydmUuZW5k'@;
put 'bz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChxLGVlLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEscSxlZSwyLCEwKX0sVi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oWSl7cmV0dXJuIHRoaXM9PT1ZfHx0aGlzLmluZj09PVkuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKFku'@;
put 'eCkmJjA9PT10aGlzLnkuY21wKFkueSkpfSxWLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oWSl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIFg9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihZJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgVT10aGlzLnByZWNv'@;
put 'bXB1dGVkLHE9ZnVuY3Rpb24oZWUpe3JldHVybiBlZS5uZWcoKX07WC5wcmVjb21wdXRlZD17bmFmOlUubmFmJiZ7d25kOlUubmFmLnduZCxwb2ludHM6VS5uYWYucG9pbnRzLm1hcChxKX0sZG91YmxlczpVLmRvdWJsZXMmJntzdGVwOlUuZG91Ymxlcy5zdGVwLHBvaW50czpVLmRvdWJsZXMu'@;
put 'cG9pbnRzLm1hcChxKX19fXJldHVybiBYfSxWLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxJKEIsay5CYXNlUG9p'@;
put 'bnQpLGoucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihZLFgsVSl7cmV0dXJuIG5ldyBCKHRoaXMsWSxYLFUpfSxCLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBZPXRoaXMuei5yZWRJ'@;
put 'bnZtKCksWD1ZLnJlZFNxcigpLFU9dGhpcy54LnJlZE11bChYKSxxPXRoaXMueS5yZWRNdWwoWCkucmVkTXVsKFkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUscSl9LEIucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJl'@;
put 'ZE5lZygpLHRoaXMueil9LEIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihZKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gWTtpZihZLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgWD1ZLnoucmVkU3FyKCksVT10aGlzLnoucmVkU3FyKCkscT10aGlzLngucmVkTXVsKFgpLGVlPVku'@;
put 'eC5yZWRNdWwoVSksdGU9dGhpcy55LnJlZE11bChYLnJlZE11bChZLnopKSxvZT1ZLnkucmVkTXVsKFUucmVkTXVsKHRoaXMueikpLHNlPXEucmVkU3ViKGVlKSxoZT10ZS5yZWRTdWIob2UpO2lmKDA9PT1zZS5jbXBuKDApKXJldHVybiAwIT09aGUuY21wbigwKT90aGlzLmN1cnZlLmpwb2lu'@;
put 'dChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgdWU9c2UucmVkU3FyKCksY2U9dWUucmVkTXVsKHNlKSxHPXEucmVkTXVsKHVlKSxiPWhlLnJlZFNxcigpLnJlZElBZGQoY2UpLnJlZElTdWIoRykucmVkSVN1YihHKSxEPWhlLnJlZE11bChHLnJlZElTdWIoYikpLnJlZElTdWIodGUu'@;
put 'cmVkTXVsKGNlKSksSD10aGlzLnoucmVkTXVsKFkueikucmVkTXVsKHNlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYixELEgpfSxCLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihZKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gWS50b0ooKTtpZihZLmlzSW5maW5pdHkoKSly'@;
put 'ZXR1cm4gdGhpczt2YXIgWD10aGlzLnoucmVkU3FyKCksVT10aGlzLngscT1ZLngucmVkTXVsKFgpLGVlPXRoaXMueSx0ZT1ZLnkucmVkTXVsKFgpLnJlZE11bCh0aGlzLnopLG9lPVUucmVkU3ViKHEpLHNlPWVlLnJlZFN1Yih0ZSk7aWYoMD09PW9lLmNtcG4oMCkpcmV0dXJuIDAhPT1zZS5j'@;
put 'bXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBoZT1vZS5yZWRTcXIoKSx1ZT1oZS5yZWRNdWwob2UpLGNlPVUucmVkTXVsKGhlKSxHPXNlLnJlZFNxcigpLnJlZElBZGQodWUpLnJlZElTdWIoY2UpLnJlZElTdWIoY2UpLGI9c2UucmVkTXVs'@;
put 'KGNlLnJlZElTdWIoRykpLnJlZElTdWIoZWUucmVkTXVsKHVlKSksRD10aGlzLnoucmVkTXVsKG9lKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoRyxiLEQpfSxCLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKFkpe2lmKDA9PT1ZKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJl'@;
put 'dHVybiB0aGlzO2lmKCFZKXJldHVybiB0aGlzLmRibCgpO3ZhciBYO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgVT10aGlzO2ZvcihYPTA7WDxZO1grKylVPVUuZGJsKCk7cmV0dXJuIFV9dmFyIHE9dGhpcy5jdXJ2ZS5hLGVlPXRoaXMuY3VydmUudGludix0'@;
put 'ZT10aGlzLngsb2U9dGhpcy55LHNlPXRoaXMueixoZT1zZS5yZWRTcXIoKS5yZWRTcXIoKSx1ZT1vZS5yZWRBZGQob2UpO2ZvcihYPTA7WDxZO1grKyl7dmFyIGNlPXRlLnJlZFNxcigpLEc9dWUucmVkU3FyKCksYj1HLnJlZFNxcigpLEQ9Y2UucmVkQWRkKGNlKS5yZWRJQWRkKGNlKS5yZWRJ'@;
put 'QWRkKHEucmVkTXVsKGhlKSksSD10ZS5yZWRNdWwoRyksTj1ELnJlZFNxcigpLnJlZElTdWIoSC5yZWRBZGQoSCkpLGc9SC5yZWRJU3ViKE4pLEM9RC5yZWRNdWwoZyk7Qz1DLnJlZElBZGQoQykucmVkSVN1YihiKTt2YXIgUz11ZS5yZWRNdWwoc2UpO1grMTxZJiYoaGU9aGUucmVkTXVsKGIp'@;
put 'KSx0ZT1OLHNlPVMsdWU9Q31yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGUsdWUucmVkTXVsKGVlKSxzZSl9LEIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUu'@;
put 'dGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LEIucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIFksWCxVO2lmKHRoaXMuek9uZSl7dmFyIHE9dGhpcy54LnJlZFNxcigpLGVlPXRoaXMueS5yZWRTcXIoKSx0ZT1lZS5yZWRTcXIoKSxvZT10aGlzLngucmVkQWRk'@;
put 'KGVlKS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIodGUpO29lPW9lLnJlZElBZGQob2UpO3ZhciBzZT1xLnJlZEFkZChxKS5yZWRJQWRkKHEpLGhlPXNlLnJlZFNxcigpLnJlZElTdWIob2UpLnJlZElTdWIob2UpLHVlPXRlLnJlZElBZGQodGUpO3VlPSh1ZT11ZS5yZWRJQWRkKHVlKSku'@;
put 'cmVkSUFkZCh1ZSksWT1oZSxYPXNlLnJlZE11bChvZS5yZWRJU3ViKGhlKSkucmVkSVN1Yih1ZSksVT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgY2U9dGhpcy54LnJlZFNxcigpLEc9dGhpcy55LnJlZFNxcigpLGI9Ry5yZWRTcXIoKSxEPXRoaXMueC5yZWRBZGQoRykucmVkU3Fy'@;
put 'KCkucmVkSVN1YihjZSkucmVkSVN1YihiKTtEPUQucmVkSUFkZChEKTt2YXIgSD1jZS5yZWRBZGQoY2UpLnJlZElBZGQoY2UpLE49SC5yZWRTcXIoKSxnPWIucmVkSUFkZChiKTtnPShnPWcucmVkSUFkZChnKSkucmVkSUFkZChnKSxZPU4ucmVkSVN1YihEKS5yZWRJU3ViKEQpLFg9SC5yZWRN'@;
put 'dWwoRC5yZWRJU3ViKFkpKS5yZWRJU3ViKGcpLFU9KFU9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKFUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLFgsVSl9LEIucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBZLFgsVTtpZih0aGlzLnpPbmUpe3ZhciBxPXRo'@;
put 'aXMueC5yZWRTcXIoKSxlZT10aGlzLnkucmVkU3FyKCksdGU9ZWUucmVkU3FyKCksb2U9dGhpcy54LnJlZEFkZChlZSkucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHRlKTtvZT1vZS5yZWRJQWRkKG9lKTt2YXIgc2U9cS5yZWRBZGQocSkucmVkSUFkZChxKS5yZWRJQWRkKHRoaXMuY3Vy'@;
put 'dmUuYSksaGU9c2UucmVkU3FyKCkucmVkSVN1YihvZSkucmVkSVN1YihvZSk7WT1oZTt2YXIgdWU9dGUucmVkSUFkZCh0ZSk7dWU9KHVlPXVlLnJlZElBZGQodWUpKS5yZWRJQWRkKHVlKSxYPXNlLnJlZE11bChvZS5yZWRJU3ViKGhlKSkucmVkSVN1Yih1ZSksVT10aGlzLnkucmVkQWRkKHRo'@;
put 'aXMueSl9ZWxzZXt2YXIgY2U9dGhpcy56LnJlZFNxcigpLEc9dGhpcy55LnJlZFNxcigpLGI9dGhpcy54LnJlZE11bChHKSxEPXRoaXMueC5yZWRTdWIoY2UpLnJlZE11bCh0aGlzLngucmVkQWRkKGNlKSk7RD1ELnJlZEFkZChEKS5yZWRJQWRkKEQpO3ZhciBIPWIucmVkSUFkZChiKSxOPShI'@;
put 'PUgucmVkSUFkZChIKSkucmVkQWRkKEgpO1k9RC5yZWRTcXIoKS5yZWRJU3ViKE4pLFU9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoRykucmVkSVN1YihjZSk7dmFyIGc9Ry5yZWRTcXIoKTtnPShnPShnPWcucmVkSUFkZChnKSkucmVkSUFkZChnKSkucmVkSUFkZChn'@;
put 'KSxYPUQucmVkTXVsKEgucmVkSVN1YihZKSkucmVkSVN1YihnKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWSxYLFUpfSxCLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5jdXJ2ZS5hLFg9dGhpcy54LFU9dGhpcy55LHE9dGhpcy56LGVlPXEucmVkU3FyKCkucmVkU3Fy'@;
put 'KCksdGU9WC5yZWRTcXIoKSxvZT1VLnJlZFNxcigpLHNlPXRlLnJlZEFkZCh0ZSkucmVkSUFkZCh0ZSkucmVkSUFkZChZLnJlZE11bChlZSkpLGhlPVgucmVkQWRkKFgpLHVlPShoZT1oZS5yZWRJQWRkKGhlKSkucmVkTXVsKG9lKSxjZT1zZS5yZWRTcXIoKS5yZWRJU3ViKHVlLnJlZEFkZCh1'@;
put 'ZSkpLEc9dWUucmVkSVN1YihjZSksYj1vZS5yZWRTcXIoKTtiPShiPShiPWIucmVkSUFkZChiKSkucmVkSUFkZChiKSkucmVkSUFkZChiKTt2YXIgRD1zZS5yZWRNdWwoRykucmVkSVN1YihiKSxIPVUucmVkQWRkKFUpLnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoY2UsRCxI'@;
put 'KX0sQi5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgWT10aGlzLngucmVkU3FyKCksWD10aGlzLnkucmVkU3FyKCksVT10aGlzLnoucmVkU3FyKCkscT1YLnJlZFNxcigpLGVlPVkucmVkQWRkKFkp'@;
put 'LnJlZElBZGQoWSksdGU9ZWUucmVkU3FyKCksb2U9dGhpcy54LnJlZEFkZChYKS5yZWRTcXIoKS5yZWRJU3ViKFkpLnJlZElTdWIocSksc2U9KG9lPShvZT0ob2U9b2UucmVkSUFkZChvZSkpLnJlZEFkZChvZSkucmVkSUFkZChvZSkpLnJlZElTdWIodGUpKS5yZWRTcXIoKSxoZT1xLnJlZElB'@;
put 'ZGQocSk7aGU9KGhlPShoZT1oZS5yZWRJQWRkKGhlKSkucmVkSUFkZChoZSkpLnJlZElBZGQoaGUpO3ZhciB1ZT1lZS5yZWRJQWRkKG9lKS5yZWRTcXIoKS5yZWRJU3ViKHRlKS5yZWRJU3ViKHNlKS5yZWRJU3ViKGhlKSxjZT1YLnJlZE11bCh1ZSk7Y2U9KGNlPWNlLnJlZElBZGQoY2UpKS5y'@;
put 'ZWRJQWRkKGNlKTt2YXIgRz10aGlzLngucmVkTXVsKHNlKS5yZWRJU3ViKGNlKTtHPShHPUcucmVkSUFkZChHKSkucmVkSUFkZChHKTt2YXIgYj10aGlzLnkucmVkTXVsKHVlLnJlZE11bChoZS5yZWRJU3ViKHVlKSkucmVkSVN1YihvZS5yZWRNdWwoc2UpKSk7Yj0oYj0oYj1iLnJlZElBZGQo'@;
put 'YikpLnJlZElBZGQoYikpLnJlZElBZGQoYik7dmFyIEQ9dGhpcy56LnJlZEFkZChvZSkucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKHNlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoRyxiLEQpfSxCLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oWSxYKXtyZXR1cm4gWT1uZXcgSyhZLFgp'@;
put 'LHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxZKX0sQi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oWSl7aWYoImFmZmluZSI9PT1ZLnR5cGUpcmV0dXJuIHRoaXMuZXEoWS50b0ooKSk7aWYodGhpcz09PVkpcmV0dXJuITA7dmFyIFg9dGhpcy56LnJlZFNxcigpLFU9WS56LnJlZFNxcigpO2lmKDAh'@;
put 'PT10aGlzLngucmVkTXVsKFUpLnJlZElTdWIoWS54LnJlZE11bChYKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgcT1YLnJlZE11bCh0aGlzLnopLGVlPVUucmVkTXVsKFkueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGVlKS5yZWRJU3ViKFkueS5yZWRNdWwocSkpLmNtcG4oMCl9LEIucHJv'@;
put 'dG90eXBlLmVxWFRvUD1mdW5jdGlvbihZKXt2YXIgWD10aGlzLnoucmVkU3FyKCksVT1ZLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoWCk7aWYoMD09PXRoaXMueC5jbXAoVSkpcmV0dXJuITA7Zm9yKHZhciBxPVkuY2xvbmUoKSxlZT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKFgpOzsp'@;
put 'e2lmKHEuaWFkZCh0aGlzLmN1cnZlLm4pLHEuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoVS5yZWRJQWRkKGVlKSwwPT09dGhpcy54LmNtcChVKSlyZXR1cm4hMH19LEIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBK'@;
put 'UG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxCLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10'@;
put 'aGlzLnouY21wbigwKX19LDU0Mjc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPU8sST1SKDM3MTUpLGs9Uig4MjU0KSxFPVIoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gaihCKXt0aGlzLmN1cnZlPSJzaG9ydCI9PT1CLnR5cGU/bmV3IGsuc2hvcnQoQik6ImVkd2FyZHMiPT09Qi50eXBl'@;
put 'P25ldyBrLmVkd2FyZHMoQik6bmV3IGsubW9udChCKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPUIuaGFzaCxFKHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksRSh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZh'@;
put 'bGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIFYoQixZKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSyxCLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgWD1uZXcgaihZKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEssQix7Y29uZmln'@;
put 'dXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6WH0pLFh9fSl9Sy5QcmVzZXRDdXJ2ZT1qLFYoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOkku'@;
put 'c2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLFYoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAy'@;
put 'MjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMy'@;
put 'NTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNj'@;
put 'MWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLFYoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAw'@;
put 'MDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQw'@;
put 'NmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0'@;
put 'NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxWKCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjIixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6SS5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFk'@;
put 'NzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5'@;
put 'ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksVigicDUyMSIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3'@;
put 'M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5'@;
put 'OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOkkuc2hhNTEyLGdSZWQ6ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZh'@;
put 'OGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcw'@;
put 'ODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLFYoImN1cnZlMjU1MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIs'@;
put 'bjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxWKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAw'@;
put 'MDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2'@;
put 'NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3RyeXt6PVIoMTAzNyl9Y2F0Y2h7ej12b2lkIDB9Vigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6SS5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMz'@;
put 'NDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0'@;
put 'MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRj'@;
put 'ZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsel19KX0sNzk1NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDIxNTYpLEk9Uig5NTMpLGs9Uig1NDI3'@;
put 'KSxFPVIoOTkzMSksaj1JLmFzc2VydCxWPVIoMTI1MSksQj1SKDYxMSk7ZnVuY3Rpb24gWShYKXtpZighKHRoaXMgaW5zdGFuY2VvZiBZKSlyZXR1cm4gbmV3IFkoWCk7InN0cmluZyI9PXR5cGVvZiBYJiYoaihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxYKSwiVW5r'@;
put 'bm93biBjdXJ2ZSAiK1gpLFg9a1tYXSksWCBpbnN0YW5jZW9mIGsuUHJlc2V0Q3VydmUmJihYPXtjdXJ2ZTpYfSksdGhpcy5jdXJ2ZT1YLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9WC5j'@;
put 'dXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKFguY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9WC5oYXNofHxYLmN1cnZlLmhhc2h9TS5leHBvcnRzPVksWS5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihYKXtyZXR1cm4gbmV3IFYodGhpcyxYKX0sWS5wcm90b3R5cGUua2V5RnJv'@;
put 'bVByaXZhdGU9ZnVuY3Rpb24oWCxVKXtyZXR1cm4gVi5mcm9tUHJpdmF0ZSh0aGlzLFgsVSl9LFkucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oWCxVKXtyZXR1cm4gVi5mcm9tUHVibGljKHRoaXMsWCxVKX0sWS5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihYKXtYfHwo'@;
put 'WD17fSk7Zm9yKHZhciBVPW5ldyBLKHtoYXNoOnRoaXMuaGFzaCxwZXJzOlgucGVycyxwZXJzRW5jOlgucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6WC5lbnRyb3B5fHxFKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6WC5lbnRyb3B5JiZYLmVudHJvcHlFbmN8fCJ1dGY4Iixu'@;
put 'b25jZTp0aGlzLm4udG9BcnJheSgpfSkscT10aGlzLm4uYnl0ZUxlbmd0aCgpLGVlPXRoaXMubi5zdWIobmV3IHooMikpOzspe3ZhciB0ZT1uZXcgeihVLmdlbmVyYXRlKHEpKTtpZighKHRlLmNtcChlZSk+MCkpcmV0dXJuIHRlLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUodGUpfX0s'@;
put 'WS5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKFgsVSl7dmFyIHE9OCpYLmJ5dGVMZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHE+MCYmKFg9WC51c2hybihxKSksIVUmJlguY21wKHRoaXMubik+PTA/WC5zdWIodGhpcy5uKTpYfSxZLnByb3RvdHlwZS5zaWduPWZ1'@;
put 'bmN0aW9uKFgsVSxxLGVlKXsib2JqZWN0Ij09dHlwZW9mIHEmJihlZT1xLHE9bnVsbCksZWV8fChlZT17fSksVT10aGlzLmtleUZyb21Qcml2YXRlKFUscSksWD10aGlzLl90cnVuY2F0ZVRvTihuZXcgeihYLDE2KSk7Zm9yKHZhciB0ZT10aGlzLm4uYnl0ZUxlbmd0aCgpLG9lPVUuZ2V0UHJp'@;
put 'dmF0ZSgpLnRvQXJyYXkoImJlIix0ZSksc2U9WC50b0FycmF5KCJiZSIsdGUpLGhlPW5ldyBLKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5Om9lLG5vbmNlOnNlLHBlcnM6ZWUucGVycyxwZXJzRW5jOmVlLnBlcnNFbmN8fCJ1dGY4In0pLHVlPXRoaXMubi5zdWIobmV3IHooMSkpLGNlPTA7O2Nl'@;
put 'Kyspe3ZhciBHPWVlLms/ZWUuayhjZSk6bmV3IHooaGUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKEc9dGhpcy5fdHJ1bmNhdGVUb04oRywhMCkpLmNtcG4oMSk8PTB8fEcuY21wKHVlKT49MCkpe3ZhciBiPXRoaXMuZy5tdWwoRyk7aWYoIWIuaXNJbmZpbml0eSgpKXt2'@;
put 'YXIgRD1iLmdldFgoKSxIPUQudW1vZCh0aGlzLm4pO2lmKDAhPT1ILmNtcG4oMCkpe3ZhciBOPUcuaW52bSh0aGlzLm4pLm11bChILm11bChVLmdldFByaXZhdGUoKSkuaWFkZChYKSk7aWYoMCE9PShOPU4udW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgZz0oYi5nZXRZKCkuaXNPZGQoKT8x'@;
put 'OjApfCgwIT09RC5jbXAoSCk/MjowKTtyZXR1cm4gZWUuY2Fub25pY2FsJiZOLmNtcCh0aGlzLm5oKT4wJiYoTj10aGlzLm4uc3ViKE4pLGdePTEpLG5ldyBCKHtyOkgsczpOLHJlY292ZXJ5UGFyYW06Z30pfX19fX19LFkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihYLFUscSxlZSl7WD10'@;
put 'aGlzLl90cnVuY2F0ZVRvTihuZXcgeihYLDE2KSkscT10aGlzLmtleUZyb21QdWJsaWMocSxlZSk7dmFyIHRlPShVPW5ldyBCKFUsImhleCIpKS5yLG9lPVUucztpZih0ZS5jbXBuKDEpPDB8fHRlLmNtcCh0aGlzLm4pPj0wfHxvZS5jbXBuKDEpPDB8fG9lLmNtcCh0aGlzLm4pPj0wKXJldHVy'@;
put 'biExO3ZhciBzZSxoZT1vZS5pbnZtKHRoaXMubiksdWU9aGUubXVsKFgpLnVtb2QodGhpcy5uKSxjZT1oZS5tdWwodGUpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEoc2U9dGhpcy5nLmptdWxBZGQodWUscS5nZXRQdWJsaWMoKSxjZSkpLmlzSW5maW5p'@;
put 'dHkoKSYmc2UuZXFYVG9QKHRlKTohKHNlPXRoaXMuZy5tdWxBZGQodWUscS5nZXRQdWJsaWMoKSxjZSkpLmlzSW5maW5pdHkoKSYmMD09PXNlLmdldFgoKS51bW9kKHRoaXMubikuY21wKHRlKX0sWS5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihYLFUscSxlZSl7aigoMyZxKT09'@;
put 'PXEsIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxVPW5ldyBCKFUsZWUpO3ZhciB0ZT10aGlzLm4sb2U9bmV3IHooWCksc2U9VS5yLGhlPVUucyx1ZT0xJnEsY2U9cT4+MTtpZihzZS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJmNl'@;
put 'KXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7c2U9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKGNlP3NlLmFkZCh0aGlzLmN1cnZlLm4pOnNlLHVlKTt2YXIgRz1VLnIuaW52bSh0ZSksYj10ZS5zdWIob2UpLm11bChHKS51bW9kKHRlKSxEPWhl'@;
put 'Lm11bChHKS51bW9kKHRlKTtyZXR1cm4gdGhpcy5nLm11bEFkZChiLHNlLEQpfSxZLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKFgsVSxxLGVlKXtpZihudWxsIT09KFU9bmV3IEIoVSxlZSkpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIFUucmVjb3ZlcnlQYXJhbTtmb3Io'@;
put 'dmFyIHRlPTA7dGU8NDt0ZSsrKXt2YXIgb2U7dHJ5e29lPXRoaXMucmVjb3ZlclB1YktleShYLFUsdGUpfWNhdGNoe2NvbnRpbnVlfWlmKG9lLmVxKHEpKXJldHVybiB0ZX10aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sMTI1MTooTSxP'@;
put 'LFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDk1MykuYXNzZXJ0O2Z1bmN0aW9uIEkoayxFKXt0aGlzLmVjPWssdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxFLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoRS5wcml2LEUucHJpdkVuYyksRS5wdWImJnRoaXMuX2lt'@;
put 'cG9ydFB1YmxpYyhFLnB1YixFLnB1YkVuYyl9TS5leHBvcnRzPUksSS5mcm9tUHVibGljPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4gRSBpbnN0YW5jZW9mIEk/RTpuZXcgSShrLHtwdWI6RSxwdWJFbmM6an0pfSxJLmZyb21Qcml2YXRlPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4gRSBpbnN0YW5j'@;
put 'ZW9mIEk/RTpuZXcgSShrLHtwcml2OkUscHJpdkVuYzpqfSl9LEkucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gay5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OmsudmFsaWRhdGUo'@;
put 'KT9rLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LEkucHJvdG90eXBlLmdl'@;
put 'dFB1YmxpYz1mdW5jdGlvbihrLEUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgayYmKEU9ayxrPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxFP3RoaXMucHViLmVuY29kZShFLGspOnRoaXMucHVifSxJLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1'@;
put 'bmN0aW9uKGspe3JldHVybiJoZXgiPT09az90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxJLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihrLEUpe3RoaXMucHJpdj1uZXcgeihrLEV8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2'@;
put 'ZS5uKX0sSS5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihrLEUpe2lmKGsueHx8ay55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9LKGsueCwiTmVlZCB4IGNvb3JkaW5hdGUiKToic2hvcnQiIT09dGhpcy5lYy5jdXJ2ZS50eXBlJiYiZWR3YXJkcyIhPT10aGlz'@;
put 'LmVjLmN1cnZlLnR5cGV8fEsoay54JiZrLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoay54LGsueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoayxFKX0sSS5wcm90b3R5cGUuZGVyaXZlPWZ1'@;
put 'bmN0aW9uKGspe3JldHVybiBrLnZhbGlkYXRlKCl8fEsoay52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLGsubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxJLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4gdGhpcy5lYy5zaWduKGssdGhpcyxFLGop'@;
put 'fSxJLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoayxFLHRoaXMpfSxJLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAi'@;
put 'Kyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNjExOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoOTUzKSxJPUsuYXNzZXJ0O2Z1bmN0aW9uIGsoWSxYKXtpZihZIGluc3RhbmNlb2YgaylyZXR1cm4gWTt0aGlzLl9pbXBvcnRERVIoWSxYKXx8'@;
put 'KEkoWS5yJiZZLnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgeihZLnIsMTYpLHRoaXMucz1uZXcgeihZLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1ZLnJlY292ZXJ5UGFyYW0/bnVsbDpZLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIEUoKXt0aGlz'@;
put 'LnBsYWNlPTB9ZnVuY3Rpb24gaihZLFgpe3ZhciBVPVlbWC5wbGFjZSsrXTtpZighKDEyOCZVKSlyZXR1cm4gVTt2YXIgcT0xNSZVO2lmKDA9PT1xfHxxPjQpcmV0dXJuITE7Zm9yKHZhciBlZT0wLHRlPTAsb2U9WC5wbGFjZTt0ZTxxO3RlKyssb2UrKyllZTw8PTgsZWV8PVlbb2VdLGVlPj4+'@;
put 'PTA7cmV0dXJuIShlZTw9MTI3KSYmKFgucGxhY2U9b2UsZWUpfWZ1bmN0aW9uIFYoWSl7Zm9yKHZhciBYPTAsVT1ZLmxlbmd0aC0xOyFZW1hdJiYhKDEyOCZZW1grMV0pJiZYPFU7KVgrKztyZXR1cm4gMD09PVg/WTpZLnNsaWNlKFgpfWZ1bmN0aW9uIEIoWSxYKXtpZihYPDEyOClZLnB1c2go'@;
put 'WCk7ZWxzZXt2YXIgVT0xKyhNYXRoLmxvZyhYKS9NYXRoLkxOMj4+PjMpO2ZvcihZLnB1c2goMTI4fFUpOy0tVTspWS5wdXNoKFg+Pj4oVTw8MykmMjU1KTtZLnB1c2goWCl9fU0uZXhwb3J0cz1rLGsucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oWSxYKXtZPUsudG9BcnJheShZLFgp'@;
put 'O3ZhciBVPW5ldyBFO2lmKDQ4IT09WVtVLnBsYWNlKytdKXJldHVybiExO3ZhciBxPWooWSxVKTtpZighMT09PXF8fHErVS5wbGFjZSE9PVkubGVuZ3RofHwyIT09WVtVLnBsYWNlKytdKXJldHVybiExO3ZhciBlZT1qKFksVSk7aWYoITE9PT1lZSlyZXR1cm4hMTt2YXIgdGU9WS5zbGljZShV'@;
put 'LnBsYWNlLGVlK1UucGxhY2UpO2lmKFUucGxhY2UrPWVlLDIhPT1ZW1UucGxhY2UrK10pcmV0dXJuITE7dmFyIG9lPWooWSxVKTtpZighMT09PW9lfHxZLmxlbmd0aCE9PW9lK1UucGxhY2UpcmV0dXJuITE7dmFyIHNlPVkuc2xpY2UoVS5wbGFjZSxvZStVLnBsYWNlKTtpZigwPT09dGVbMF0p'@;
put 'e2lmKCEoMTI4JnRlWzFdKSlyZXR1cm4hMTt0ZT10ZS5zbGljZSgxKX1pZigwPT09c2VbMF0pe2lmKCEoMTI4JnNlWzFdKSlyZXR1cm4hMTtzZT1zZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyB6KHRlKSx0aGlzLnM9bmV3IHooc2UpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxr'@;
put 'LnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihZKXt2YXIgWD10aGlzLnIudG9BcnJheSgpLFU9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JlhbMF0mJihYPVswXS5jb25jYXQoWCkpLDEyOCZVWzBdJiYoVT1bMF0uY29uY2F0KFUpKSxYPVYoWCksVT1WKFUpOyEoVVswXXx8MTI4JlVbMV0pOylV'@;
put 'PVUuc2xpY2UoMSk7dmFyIHE9WzJdO0IocSxYLmxlbmd0aCksKHE9cS5jb25jYXQoWCkpLnB1c2goMiksQihxLFUubGVuZ3RoKTt2YXIgZWU9cS5jb25jYXQoVSksdGU9WzQ4XTtyZXR1cm4gQih0ZSxlZS5sZW5ndGgpLHRlPXRlLmNvbmNhdChlZSksSy5lbmNvZGUodGUsWSl9fSw1OTgwOihN'@;
put 'LE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzE1KSxLPVIoNTQyNyksST1SKDk1Myksaz1JLmFzc2VydCxFPUkucGFyc2VCeXRlcyxqPVIoOTA4NyksVj1SKDM2MjIpO2Z1bmN0aW9uIEIoWSl7aWYoaygiZWQyNTUxOSI9PT1ZLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFy'@;
put 'IiksISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKFkpO3RoaXMuY3VydmU9WT1LW1ldLmN1cnZlLHRoaXMuZz1ZLmcsdGhpcy5nLnByZWNvbXB1dGUoWS5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1ZLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xl'@;
put 'bmd0aD1NYXRoLmNlaWwoWS5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD16LnNoYTUxMn1NLmV4cG9ydHM9QixCLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFksWCl7WT1FKFkpO3ZhciBVPXRoaXMua2V5RnJvbVNlY3JldChYKSxxPXRoaXMuaGFzaEludChVLm1lc3NhZ2VQcmVmaXgoKSxZ'@;
put 'KSxlZT10aGlzLmcubXVsKHEpLHRlPXRoaXMuZW5jb2RlUG9pbnQoZWUpLG9lPXRoaXMuaGFzaEludCh0ZSxVLnB1YkJ5dGVzKCksWSkubXVsKFUucHJpdigpKSxzZT1xLmFkZChvZSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6ZWUsUzpzZSxSZW5j'@;
put 'b2RlZDp0ZX0pfSxCLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oWSxYLFUpe1k9RShZKSxYPXRoaXMubWFrZVNpZ25hdHVyZShYKTt2YXIgcT10aGlzLmtleUZyb21QdWJsaWMoVSksZWU9dGhpcy5oYXNoSW50KFguUmVuY29kZWQoKSxxLnB1YkJ5dGVzKCksWSksdGU9dGhpcy5nLm11bChY'@;
put 'LlMoKSk7cmV0dXJuIFguUigpLmFkZChxLnB1YigpLm11bChlZSkpLmVxKHRlKX0sQi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgWT10aGlzLmhhc2goKSxYPTA7WDxhcmd1bWVudHMubGVuZ3RoO1grKylZLnVwZGF0ZShhcmd1bWVudHNbWF0pO3JldHVybiBJLmludEZy'@;
put 'b21MRShZLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LEIucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oWSl7cmV0dXJuIGouZnJvbVB1YmxpYyh0aGlzLFkpfSxCLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKFkpe3JldHVybiBqLmZyb21TZWNyZXQodGhp'@;
put 'cyxZKX0sQi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIFY/WTpuZXcgVih0aGlzLFkpfSxCLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihZKXt2YXIgWD1ZLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0'@;
put 'aCk7cmV0dXJuIFhbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9WS5nZXRYKCkuaXNPZGQoKT8xMjg6MCxYfSxCLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihZKXt2YXIgWD0oWT1JLnBhcnNlQnl0ZXMoWSkpLmxlbmd0aC0xLFU9WS5zbGljZSgwLFgpLmNvbmNhdCgtMTI5JllbWF0p'@;
put 'LHE9MCE9KDEyOCZZW1hdKSxlZT1JLmludEZyb21MRShVKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKGVlLHEpfSxCLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oWSl7cmV0dXJuIFkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxCLnByb3RvdHlwZS5kZWNv'@;
put 'ZGVJbnQ9ZnVuY3Rpb24oWSl7cmV0dXJuIEkuaW50RnJvbUxFKFkpfSxCLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKFkpe3JldHVybiBZIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sOTA4NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUzKSxLPXouYXNzZXJ0LEk9'@;
put 'ei5wYXJzZUJ5dGVzLGs9ei5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiBFKGosVil7dGhpcy5lZGRzYT1qLHRoaXMuX3NlY3JldD1JKFYuc2VjcmV0KSxqLmlzUG9pbnQoVi5wdWIpP3RoaXMuX3B1Yj1WLnB1Yjp0aGlzLl9wdWJCeXRlcz1JKFYucHViKX1FLmZyb21QdWJsaWM9ZnVuY3Rpb24o'@;
put 'aixWKXtyZXR1cm4gViBpbnN0YW5jZW9mIEU/VjpuZXcgRShqLHtwdWI6Vn0pfSxFLmZyb21TZWNyZXQ9ZnVuY3Rpb24oaixWKXtyZXR1cm4gViBpbnN0YW5jZW9mIEU/VjpuZXcgRShqLHtzZWNyZXQ6Vn0pfSxFLnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Vj'@;
put 'cmV0fSxrKEUsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksayhFLCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRk'@;
put 'c2EuZy5tdWwodGhpcy5wcml2KCkpfSksayhFLCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5lZGRzYSxWPXRoaXMuaGFzaCgpLEI9ai5lbmNvZGluZ0xlbmd0aC0xLFk9Vi5zbGljZSgwLGouZW5jb2RpbmdMZW5ndGgpO3JldHVybiBZWzBdJj0yNDgsWVtCXSY9MTI3LFlbQl18'@;
put 'PTY0LFl9KSxrKEUsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksayhFLCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxrKEUsIm1l'@;
put 'c3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksRS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihqKXtyZXR1cm4gSyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRz'@;
put 'YS5zaWduKGosdGhpcyl9LEUucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihqLFYpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShqLFYsdGhpcyl9LEUucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihqKXtyZXR1cm4gSyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHki'@;
put 'KSx6LmVuY29kZSh0aGlzLnNlY3JldCgpLGopfSxFLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oail7cmV0dXJuIHouZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxqKX0sTS5leHBvcnRzPUV9LDM2MjI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9Uig5NTMpLEk9'@;
put 'Sy5hc3NlcnQsaz1LLmNhY2hlZFByb3BlcnR5LEU9Sy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIGooVixCKXt0aGlzLmVkZHNhPVYsIm9iamVjdCIhPXR5cGVvZiBCJiYoQj1FKEIpKSxBcnJheS5pc0FycmF5KEIpJiYoQj17UjpCLnNsaWNlKDAsVi5lbmNvZGluZ0xlbmd0aCksUzpCLnNsaWNlKFYu'@;
put 'ZW5jb2RpbmdMZW5ndGgpfSksSShCLlImJkIuUywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksVi5pc1BvaW50KEIuUikmJih0aGlzLl9SPUIuUiksQi5TIGluc3RhbmNlb2YgeiYmKHRoaXMuX1M9Qi5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KEIuUik/Qi5SOkIuUmVuY29k'@;
put 'ZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheShCLlMpP0IuUzpCLlNlbmNvZGVkfWsoaiwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLGsoaiwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2lu'@;
put 'dCh0aGlzLlJlbmNvZGVkKCkpfSksayhqLCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxrKGosIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxqLnByb3RvdHlw'@;
put 'ZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sai5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gSy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LE0uZXhwb3J0cz1qfSwx'@;
put 'MDM3Ok09PntNLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMy'@;
put 'Y2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4'@;
put 'NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1'@;
put 'NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQw'@;
put 'YTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2'@;
put 'NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5'@;
put 'OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3'@;
put 'YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVl'@;
put 'Njg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQy'@;
put 'YmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0'@;
put 'NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1'@;
put 'ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgw'@;
put 'ZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2'@;
put 'YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDli'@;
put 'ZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdm'@;
put 'ODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4'@;
put 'ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZh'@;
put 'NmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRh'@;
put 'ZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUz'@;
put 'MGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2'@;
put 'ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJh'@;
put 'YTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJl'@;
put 'OWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWEx'@;
put 'ZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYz'@;
put 'MjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBh'@;
put 'ZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVl'@;
put 'ODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFl'@;
put 'MTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNh'@;
put 'MzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5'@;
put 'NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4'@;
put 'NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0'@;
put 'NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1'@;
put 'MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUz'@;
put 'MjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgi'@;
put 'XSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYy'@;
put 'OWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5'@;
put 'YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJl'@;
put 'MjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJj'@;
put 'ZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5'@;
put 'ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFi'@;
put 'NmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5'@;
put 'IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5'@;
put 'ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3'@;
put 'ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5'@;
put 'MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1'@;
put 'MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1'@;
put 'Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcw'@;
put 'Zjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5'@;
put 'Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5Nzlh'@;
put 'ZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEz'@;
put 'YTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkz'@;
put 'Mzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4'@;
put 'ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3'@;
put 'OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMz'@;
put 'MTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2'@;
put 'MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJj'@;
put 'YTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFk'@;
put 'ZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYx'@;
put 'YiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUz'@;
put 'MDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRm'@;
put 'YWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5'@;
put 'M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIx'@;
put 'MDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgy'@;
put 'NzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJm'@;
put 'NTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdk'@;
put 'YiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZm'@;
put 'MTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlk'@;
put 'NjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0'@;
put 'OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2Yjli'@;
put 'OGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2Zh'@;
put 'OWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQz'@;
put 'NDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJd'@;
put 'LFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVj'@;
put 'N2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1'@;
put 'MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2Ux'@;
put 'M2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMy'@;
put 'YTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNh'@;
put 'NzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2Yy'@;
put 'YjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIs'@;
put 'IjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQx'@;
put 'ODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNm'@;
put 'MmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBk'@;
put 'YTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1'@;
put 'NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUy'@;
put 'ZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3'@;
put 'MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJd'@;
put 'LFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZh'@;
put 'YmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4'@;
put 'YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4'@;
put 'ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2'@;
put 'MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4'@;
put 'MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2'@;
put 'NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQw'@;
put 'IiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1'@;
put 'M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIx'@;
put 'Mjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMx'@;
put 'YzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3'@;
put 'MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1'@;
put 'ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUx'@;
put 'ZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJd'@;
put 'LFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFm'@;
put 'YTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZi'@;
put 'MzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5'@;
put 'YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2'@;
put 'YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYz'@;
put 'YTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMz'@;
put 'ODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2Iiwi'@;
put 'ZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZi'@;
put 'MzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjlj'@;
put 'ZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdm'@;
put 'MzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3'@;
put 'MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRl'@;
put 'MDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYz'@;
put 'NDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVh'@;
put 'MDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1'@;
put 'MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4'@;
put 'ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3'@;
put 'NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3'@;
put 'YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEw'@;
put 'ZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2Nj'@;
put 'NTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlk'@;
put 'NjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBj'@;
put 'ZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4'@;
put 'Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4'@;
put 'MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAz'@;
put 'ZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlk'@;
put 'OGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRl'@;
put 'ZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2'@;
put 'M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2Mw'@;
put 'MDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2Nl'@;
put 'ZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBj'@;
put 'NTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5'@;
put 'OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUx'@;
put 'NGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFj'@;
put 'ZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMx'@;
put 'MGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRj'@;
put 'MWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3'@;
put 'NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQy'@;
put 'NGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhl'@;
put 'N2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhm'@;
put 'ODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUy'@;
put 'Mjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4'@;
put 'NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcw'@;
put 'NTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4'@;
put 'M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3'@;
put 'MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2'@;
put 'OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNj'@;
put 'MzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFk'@;
put 'ZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMx'@;
put 'ZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2'@;
put 'OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0'@;
put 'NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2Vj'@;
put 'MWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZm'@;
put 'MTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0'@;
put 'ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVh'@;
put 'Mzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0'@;
put 'NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYy'@;
put 'MzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMx'@;
put 'ODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LDk1MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PU8sSz1SKDM3ODUpLEk9Uig5NzQ2KSxrPVIoNDUwNCk7ei5hc3NlcnQ9SSx6LnRvQXJyYXk9ay50'@;
put 'b0FycmF5LHouemVybzI9ay56ZXJvMix6LnRvSGV4PWsudG9IZXgsei5lbmNvZGU9ay5lbmNvZGUsei5nZXROQUY9ZnVuY3Rpb24oRSxqLFYpe3ZhciBCPW5ldyBBcnJheShNYXRoLm1heChFLmJpdExlbmd0aCgpLFYpKzEpO0IuZmlsbCgwKTtmb3IodmFyIFk9MTw8aisxLFg9RS5jbG9uZSgp'@;
put 'LFU9MDtVPEIubGVuZ3RoO1UrKyl7dmFyIHEsZWU9WC5hbmRsbihZLTEpO1guaXNPZGQoKT9YLmlzdWJuKHE9ZWU+KFk+PjEpLTE/KFk+PjEpLWVlOmVlKTpxPTAsQltVXT1xLFguaXVzaHJuKDEpfXJldHVybiBCfSx6LmdldEpTRj1mdW5jdGlvbihFLGope3ZhciBWPVtbXSxbXV07RT1FLmNs'@;
put 'b25lKCksaj1qLmNsb25lKCk7Zm9yKHZhciBCLFk9MCxYPTA7RS5jbXBuKC1ZKT4wfHxqLmNtcG4oLVgpPjA7KXt2YXIgVSxxLGVlPUUuYW5kbG4oMykrWSYzLHRlPWouYW5kbG4oMykrWCYzOzM9PT1lZSYmKGVlPS0xKSwzPT09dGUmJih0ZT0tMSksVT0xJmVlPzMhPShCPUUuYW5kbG4oNykr'@;
put 'WSY3KSYmNSE9PUJ8fDIhPT10ZT9lZTotZWU6MCxWWzBdLnB1c2goVSkscT0xJnRlPzMhPShCPWouYW5kbG4oNykrWCY3KSYmNSE9PUJ8fDIhPT1lZT90ZTotdGU6MCxWWzFdLnB1c2gocSksMipZPT09VSsxJiYoWT0xLVkpLDIqWD09PXErMSYmKFg9MS1YKSxFLml1c2hybigxKSxqLml1c2hy'@;
put 'bigxKX1yZXR1cm4gVn0sei5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbihFLGosVil7dmFyIEI9Il8iK2o7RS5wcm90b3R5cGVbal09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tCXT90aGlzW0JdOnRoaXNbQl09Vi5jYWxsKHRoaXMpfX0sei5wYXJzZUJ5dGVzPWZ1bmN0aW9uKEUp'@;
put 'e3JldHVybiJzdHJpbmciPT10eXBlb2YgRT96LnRvQXJyYXkoRSwiaGV4Iik6RX0sei5pbnRGcm9tTEU9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBLKEUsImhleCIsImxlIil9fSwzNzg1OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMp'@;
put 'e2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0'@;
put 'aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJl'@;
put 'IikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDU1NjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihn'@;
put 'LEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zv'@;
put 'cih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8'@;
put 'fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5j'@;
put 'bXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihD'@;
put 'PTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNl'@;
put 'KGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlz'@;
put 'Lmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5s'@;
put 'ZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlz'@;
put 'Lmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5n'@;
put 'dGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2'@;
put 'PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5f'@;
put 'cGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9'@;
put 'PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0y'@;
put 'KXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9'@;
put 'MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1sw'@;
put 'XStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRz'@;
put 'WzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhp'@;
put 'cy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVu'@;
put 'Z3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigp'@;
put 'fSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjog'@;
put 'IikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAi'@;
put 'LCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUs'@;
put 'NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEz'@;
put 'NzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07'@;
put 'ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02'@;
put 'NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0p'@;
put 'Kih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBT'@;
put 'O2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1'@;
put 'KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlm'@;
put 'KGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xl'@;
put 'K1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlw'@;
put 'ZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRz'@;
put 'WzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9C'@;
put 'dWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0'@;
put 'aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJs'@;
put 'ZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDsh'@;
put 'ZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3Jl'@;
put 'dHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1'@;
put 'cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJp'@;
put 'dHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96'@;
put 'ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAw'@;
put 'IT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90'@;
put 'b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0'@;
put 'aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTty'@;
put 'ZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xv'@;
put 'bmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFy'@;
put 'IEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90'@;
put 'b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9'@;
put 'Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0'@;
put 'aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgp'@;
put 'Lml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0ko'@;
put 'Im51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2'@;
put 'XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7'@;
put 'dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhp'@;
put 'cy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlz'@;
put 'dWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3dd'@;
put 'KStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztl'@;
put 'bHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9'@;
put 'dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCku'@;
put 'aWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRp'@;
put 'dmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10'@;
put 'aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29y'@;
put 'ZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0'@;
put 'aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14'@;
put 'ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsUWU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4x'@;
put 'MyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLG90PTB8Sls3XSx1dD04MTkxJm90LE10PW90Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhu'@;
put 'PTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxRdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLElu'@;
put 'PTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixGbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMu'@;
put 'bGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYz'@;
put 'LHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwo'@;
put 'RmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKFFlLGVuKXwwLHc9TWF0aC5pbXVsKFFlLCRuKSx2'@;
put 'PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkr'@;
put 'TWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11'@;
put 'bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoUWUsZnQpfDAsdz13K01hdGguaW11bChRZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRo'@;
put 'LmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChRZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFFlLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFF0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3'@;
put 'PXcrTWF0aC5pbXVsKEZlLFF0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01h'@;
put 'dGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoUWUsTnQpfDAsdz13K01hdGguaW11bChRZSxtbil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUXQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKFdlLFF0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYp'@;
put 'fDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAs'@;
put 'dz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkr'@;
put 'TWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFF0KXwwKStNYXRoLmltdWwoUWUsSXQpfDAsdz13K01hdGguaW11bChRZSxRdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2Zl'@;
put 'PSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFF0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01h'@;
put 'dGguaW11bChiZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChRZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5p'@;
put 'bXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXww'@;
put 'KSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4p'@;
put 'fDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUXQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFF0KXwwLHY9ditNYXRo'@;
put 'LmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoUWUsenQpfDAsdz13K01hdGguaW11'@;
put 'bChRZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8'@;
put 'MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01h'@;
put 'dGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxRdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'UGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoUWUsc24pfDAsdz13K01hdGguaW11bChRZSxC'@;
put 'bil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsRm4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxq'@;
put 'bil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1h'@;
put 'dGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11'@;
put 'bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxRdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsUXQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24p'@;
put 'fDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoUWUsJHQpfDAsdz13K01hdGguaW11bChRZSxGbil8MDt2'@;
put 'YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2'@;
put 'Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwo'@;
put 'b24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFF0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxRdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxw'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJu'@;
put 'KXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwo'@;
put 'WWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKFFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChRZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShw'@;
put 'PU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFF0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixRdCl8MCx2PXYrTWF0aC5pbXVsKHV0'@;
put 'LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4p'@;
put 'fDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkr'@;
put 'KEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxRdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixRdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwo'@;
put 'b24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChE'@;
put 'ZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5p'@;
put 'bXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCks'@;
put 'cD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11'@;
put 'bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHpl'@;
put 'LEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXIm'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01h'@;
put 'dGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01h'@;
put 'dGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChi'@;
put 'bixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEm'@;
put 'KHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStN'@;
put 'YXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikp'@;
put 'KyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109'@;
put 'aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55'@;
put 'PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlv'@;
put 'bihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUs'@;
put 'dy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHww'@;
put 'KXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rp'@;
put 'b24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJu'@;
put 'IGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJh'@;
put 'bnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9y'@;
put 'KHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxRZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9UWUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09'@;
put 'amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoUWU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9UWUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlw'@;
put 'Kys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0s'@;
put 'c2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0'@;
put 'fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09'@;
put 'PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5s'@;
put 'ZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9'@;
put 'dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2'@;
put 'YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0'@;
put 'aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXko'@;
put 'dGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jk'@;
put 'c1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93'@;
put 'PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0'@;
put 'aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30s'@;
put 'RS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndv'@;
put 'cmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2Zv'@;
put 'cihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rp'@;
put 'b24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUp'@;
put 'e2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3dd'@;
put 'O2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4g'@;
put 'bmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0'@;
put 'aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9'@;
put 'KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUs'@;
put 'ImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+'@;
put 'PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMu'@;
put 'aXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2'@;
put 'ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVu'@;
put 'Z3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzww'@;
put 'KXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRz'@;
put 'WzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFk'@;
put 'ZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnBy'@;
put 'b3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhp'@;
put 'cy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYs'@;
put 'dGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5u'@;
put 'ZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3'@;
put 'PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9'@;
put 'dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxl'@;
put 'bmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRz'@;
put 'W3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2'@;
put 'Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcp'@;
put 'KSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2'@;
put 'bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJk'@;
put 'aXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMu'@;
put 'X3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUu'@;
put 'dW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0Mu'@;
put 'bW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7'@;
put 'SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhp'@;
put 'cy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5w'@;
put 'cm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3'@;
put 'IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0x'@;
put 'KTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lm'@;
put 'KEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3Vi'@;
put 'KHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMu'@;
put 'Y2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+'@;
put 'MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChT'@;
put 'KT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihn'@;
put 'LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlz'@;
put 'RXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUu'@;
put 'aW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0s'@;
put 'RS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMu'@;
put 'X2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNb'@;
put 'd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMp'@;
put 'cmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6'@;
put 'MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlz'@;
put 'LnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7'@;
put 'Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBl'@;
put 'LnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxF'@;
put 'LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl'@;
put 'cnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i'@;
put 'ZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUu'@;
put 'cHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBv'@;
put 'bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'X3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhp'@;
put 'cyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlz'@;
put 'Lm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5j'@;
put 'dGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0'@;
put 'aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIy'@;
put 'PXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0'@;
put 'aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChT'@;
put 'LHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlz'@;
put 'LnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNl'@;
put 'LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3Ro'@;
put 'PTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5s'@;
put 'ZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109Njcx'@;
put 'MDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9'@;
put 'ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlv'@;
put 'bihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitn'@;
put 'KTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlw'@;
put 'ZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIo'@;
put 'ZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0'@;
put 'aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4o'@;
put 'MCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0'@;
put 'aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7'@;
put 'cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90'@;
put 'eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhp'@;
put 'cy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgp'@;
put 'O2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1M'@;
put 'ZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZl'@;
put 'KSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0'@;
put 'aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2Kysp'@;
put 'U1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtw'@;
put 'IT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIg'@;
put 'Qz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90'@;
put 'b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3Rv'@;
put 'dHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5t'@;
put 'KSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5p'@;
put 'c1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQp'@;
put 'LHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0'@;
put 'aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sODA5MTpNPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE8oUix6KXtpZihudWxsPT1SKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdCIpO2Zvcih2YXIg'@;
put 'Sz1PYmplY3QoUiksST0xO0k8YXJndW1lbnRzLmxlbmd0aDtJKyspe3ZhciBrPWFyZ3VtZW50c1tJXTtpZihudWxsIT1rKWZvcih2YXIgRT1PYmplY3Qua2V5cyhPYmplY3QoaykpLGo9MCxWPUUubGVuZ3RoO2o8VjtqKyspe3ZhciBCPUVbal0sWT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj'@;
put 'cmlwdG9yKGssQik7dm9pZCAwIT09WSYmWS5lbnVtZXJhYmxlJiYoS1tCXT1rW0JdKX19cmV0dXJuIEt9TS5leHBvcnRzPXthc3NpZ246Tyxwb2x5ZmlsbDpmdW5jdGlvbigpe09iamVjdC5hc3NpZ258fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsImFzc2lnbiIse2VudW1lcmFibGU6'@;
put 'ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOk99KX19fSw3MTg3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDUxMDgpLEk9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxrPUkmJiJmdW5jdGlvbiI9PXR5cGVvZiBJLmFwcGx5P0kuYXBw'@;
put 'bHk6ZnVuY3Rpb24oaGUsdWUsY2Upe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChoZSx1ZSxjZSl9O3o9SSYmImZ1bmN0aW9uIj09dHlwZW9mIEkub3duS2V5cz9JLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihoZSl7cmV0dXJuIE9i'@;
put 'amVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhoZSkpfTpmdW5jdGlvbihoZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlKX07dmFyIEU9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihoZSl7cmV0dXJuIGhl'@;
put 'IT1oZX07ZnVuY3Rpb24gaigpe2ouaW5pdC5jYWxsKHRoaXMpfU0uZXhwb3J0cz1qLE0uZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oY2UsRyl7ZnVuY3Rpb24gYihIKXtoZS5yZW1vdmVMaXN0ZW5lcih1ZSxEKSxHKEgpfWZ1bmN0aW9u'@;
put 'IEQoKXsiZnVuY3Rpb24iPT10eXBlb2YgaGUucmVtb3ZlTGlzdGVuZXImJmhlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsYiksY2UoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX12YXIgSDtzZShoZSx1ZSxELHtvbmNlOiEwfSksImVycm9yIiE9PXVlJiYiZnVuY3Rpb24iPT10eXBlb2YoSD1o'@;
put 'ZSkub24mJnNlKEgsImVycm9yIixiLHtvbmNlOiEwfSl9KX0sai5FdmVudEVtaXR0ZXI9aixqLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxqLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxqLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgVj0xMDtmdW5jdGlvbiBCKGhlKXtp'@;
put 'ZigiZnVuY3Rpb24iIT10eXBlb2YgaGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGhlKX1mdW5jdGlvbiBZKGhlKXtyZXR1cm4gdm9pZCAwPT09aGUuX21heExpc3Rl'@;
put 'bmVycz9qLmRlZmF1bHRNYXhMaXN0ZW5lcnM6aGUuX21heExpc3RlbmVyc31mdW5jdGlvbiBYKGhlLHVlLGNlLEcpe3ZhciBiLEQsSDtpZihCKGNlKSx2b2lkIDA9PT0oRD1oZS5fZXZlbnRzKT8oRD1oZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksaGUuX2V2ZW50c0NvdW50PTApOih2'@;
put 'b2lkIDAhPT1ELm5ld0xpc3RlbmVyJiYoaGUuZW1pdCgibmV3TGlzdGVuZXIiLHVlLGNlLmxpc3RlbmVyP2NlLmxpc3RlbmVyOmNlKSxEPWhlLl9ldmVudHMpLEg9RFt1ZV0pLHZvaWQgMD09PUgpSD1EW3VlXT1jZSwrK2hlLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBIP0g9RFt1ZV09Rz9bY2UsSF06W0gsY2VdOkc/SC51bnNoaWZ0KGNlKTpILnB1c2goY2UpLChiPVkoaGUpKT4wJiZILmxlbmd0aD5iJiYhSC53YXJuZWQpe0gud2FybmVkPSEwO3ZhciBnPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAi'@;
put 'K0gubGVuZ3RoKyIgIitTdHJpbmcodWUpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2cubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixnLmVtaXR0ZXI9aGUsZy50eXBlPXVlLGcuY291bnQ9SC5s'@;
put 'ZW5ndGgsSyYmSy53YXJuJiZLLndhcm4oZyl9cmV0dXJuIGhlfWZ1bmN0aW9uIFUoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlz'@;
put 'dGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIHEoaGUsdWUsY2Upe3ZhciBHPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpoZSx0eXBlOnVlLGxpc3RlbmVyOmNlfSxiPVUuYmluZChHKTtyZXR1'@;
put 'cm4gYi5saXN0ZW5lcj1jZSxHLndyYXBGbj1iLGJ9ZnVuY3Rpb24gZWUoaGUsdWUsY2Upe3ZhciBHPWhlLl9ldmVudHM7aWYodm9pZCAwPT09RylyZXR1cm5bXTt2YXIgYj1HW3VlXTtyZXR1cm4gdm9pZCAwPT09Yj9bXToiZnVuY3Rpb24iPT10eXBlb2YgYj9jZT9bYi5saXN0ZW5lcnx8Yl06'@;
put 'W2JdOmNlP2Z1bmN0aW9uKEQpe2Zvcih2YXIgSD1uZXcgQXJyYXkoRC5sZW5ndGgpLE49MDtOPEgubGVuZ3RoOysrTilIW05dPURbTl0ubGlzdGVuZXJ8fERbTl07cmV0dXJuIEh9KGIpOm9lKGIsYi5sZW5ndGgpfWZ1bmN0aW9uIHRlKGhlKXt2YXIgdWU9dGhpcy5fZXZlbnRzO2lmKHZvaWQg'@;
put 'MCE9PXVlKXt2YXIgY2U9dWVbaGVdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1jZSlyZXR1cm4gY2UubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIG9lKGhlLHVlKXtmb3IodmFyIGNlPW5ldyBBcnJheSh1ZSksRz0wO0c8dWU7KytHKWNlW0ddPWhlW0dd'@;
put 'O3JldHVybiBjZX1mdW5jdGlvbiBzZShoZSx1ZSxjZSxHKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgaGUub24pRy5vbmNlP2hlLm9uY2UodWUsY2UpOmhlLm9uKHVlLGNlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'J1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBoZSk7aGUuYWRkRXZlbnRMaXN0ZW5lcih1ZSxmdW5jdGlvbiBiKEQpe0cub25jZSYmaGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih1ZSxiKSxjZShEKX0pfX1P'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFZ9LHNldDpmdW5jdGlvbihoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBoZXx8aGU8MHx8RShoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2'@;
put 'YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytoZSsiLiIpO1Y9aGV9fSksai5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1P'@;
put 'YmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sai5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJz'@;
put 'PWZ1bmN0aW9uKGhlKXtpZigibnVtYmVyIiE9dHlwZW9mIGhlfHxoZTwwfHxFKGhlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2hlKyIuIik7cmV0dXJu'@;
put 'IHRoaXMuX21heExpc3RlbmVycz1oZSx0aGlzfSxqLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gWSh0aGlzKX0sai5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihoZSl7Zm9yKHZhciB1ZT1bXSxjZT0xO2NlPGFyZ3VtZW50cy5sZW5ndGg7Y2UrKyl1ZS5wdXNo'@;
put 'KGFyZ3VtZW50c1tjZV0pO3ZhciBHPSJlcnJvciI9PT1oZSxiPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1iKUc9RyYmdm9pZCAwPT09Yi5lcnJvcjtlbHNlIGlmKCFHKXJldHVybiExO2lmKEcpe3ZhciBEO2lmKHVlLmxlbmd0aD4wJiYoRD11ZVswXSksRCBpbnN0YW5jZW9mIEVycm9yKXRo'@;
put 'cm93IEQ7dmFyIEg9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisoRD8iICgiK0QubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyBILmNvbnRleHQ9RCxIfXZhciBOPWJbaGVdO2lmKHZvaWQgMD09PU4pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE4payhOLHRoaXMsdWUpO2Vsc2V7'@;
put 'dmFyIGc9Ti5sZW5ndGgsQz1vZShOLGcpO2ZvcihjZT0wO2NlPGc7KytjZSlrKENbY2VdLHRoaXMsdWUpfXJldHVybiEwfSxqLnByb3RvdHlwZS5vbj1qLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuIFgodGhpcyxoZSx1ZSwhMSl9LGoucHJvdG90eXBlLnBy'@;
put 'ZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuIFgodGhpcyxoZSx1ZSwhMCl9LGoucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBCKHVlKSx0aGlzLm9uKGhlLHEodGhpcyxoZSx1ZSkpLHRoaXN9LGoucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9'@;
put 'ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBCKHVlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihoZSxxKHRoaXMsaGUsdWUpKSx0aGlzfSxqLnByb3RvdHlwZS5vZmY9ai5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oaGUsdWUpe3ZhciBjZSxHLGIsRCxIO2lmKEIodWUpLHZvaWQgMD09'@;
put 'PShHPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KGNlPUdbaGVdKSlyZXR1cm4gdGhpcztpZihjZT09PXVlfHxjZS5saXN0ZW5lcj09PXVlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBHW2hlXSxH'@;
put 'LnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixoZSxjZS5saXN0ZW5lcnx8dWUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBjZSl7Zm9yKGI9LTEsRD1jZS5sZW5ndGgtMTtEPj0wO0QtLSlpZihjZVtEXT09PXVlfHxjZVtEXS5saXN0ZW5lcj09PXVlKXtI'@;
put 'PWNlW0RdLmxpc3RlbmVyLGI9RDticmVha31pZihiPDApcmV0dXJuIHRoaXM7MD09PWI/Y2Uuc2hpZnQoKTpmdW5jdGlvbihOLGcpe2Zvcig7ZysxPE4ubGVuZ3RoO2crKylOW2ddPU5bZysxXTtOLnBvcCgpfShjZSxiKSwxPT09Y2UubGVuZ3RoJiYoR1toZV09Y2VbMF0pLHZvaWQgMCE9PUcu'@;
put 'cmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGhlLEh8fHVlKX1yZXR1cm4gdGhpc30sai5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGhlKXt2YXIgdWUsY2UsRztpZih2b2lkIDA9PT0oY2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztp'@;
put 'Zih2b2lkIDA9PT1jZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PWNlW2hlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRz'@;
put 'PU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIGNlW2hlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGIsRD1PYmplY3Qua2V5cyhjZSk7Zm9yKEc9MDtHPEQubGVuZ3RoOysrRykicmVtb3ZlTGlzdGVuZXIiIT09KGI9RFtHXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJz'@;
put 'KGIpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHVlPWNlW2hlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lciho'@;
put 'ZSx1ZSk7ZWxzZSBpZih2b2lkIDAhPT11ZSlmb3IoRz11ZS5sZW5ndGgtMTtHPj0wO0ctLSl0aGlzLnJlbW92ZUxpc3RlbmVyKGhlLHVlW0ddKTtyZXR1cm4gdGhpc30sai5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGhlKXtyZXR1cm4gZWUodGhpcyxoZSwhMCl9LGoucHJvdG90eXBl'@;
put 'LnJhd0xpc3RlbmVycz1mdW5jdGlvbihoZSl7cmV0dXJuIGVlKHRoaXMsaGUsITEpfSxqLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBoZS5saXN0ZW5lckNvdW50P2hlLmxpc3RlbmVyQ291bnQodWUpOnRlLmNhbGwoaGUsdWUpfSxqLnBy'@;
put 'b3RvdHlwZS5saXN0ZW5lckNvdW50PXRlLGoucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD96KHRoaXMuX2V2ZW50cyk6W119fSwzMDQ4OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoMjMxOCk7TS5leHBvcnRzPWZ1'@;
put 'bmN0aW9uKEksayxFLGope2lmKHouaXNCdWZmZXIoSSl8fChJPXouZnJvbShJLCJiaW5hcnkiKSksayYmKHouaXNCdWZmZXIoayl8fChrPXouZnJvbShrLCJiaW5hcnkiKSksOCE9PWsubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBi'@;
put 'eXRlIGxlbmd0aCIpO2Zvcih2YXIgVj1FLzgsQj16LmFsbG9jKFYpLFk9ei5hbGxvYyhqfHwwKSxYPXouYWxsb2MoMCk7Vj4wfHxqPjA7KXt2YXIgVT1uZXcgSztVLnVwZGF0ZShYKSxVLnVwZGF0ZShJKSxrJiZVLnVwZGF0ZShrKSxYPVUuZGlnZXN0KCk7dmFyIHE9MDtpZihWPjApe3ZhciBl'@;
put 'ZT1CLmxlbmd0aC1WO3E9TWF0aC5taW4oVixYLmxlbmd0aCksWC5jb3B5KEIsZWUsMCxxKSxWLT1xfWlmKHE8WC5sZW5ndGgmJmo+MCl7dmFyIHRlPVkubGVuZ3RoLWosb2U9TWF0aC5taW4oaixYLmxlbmd0aC1xKTtYLmNvcHkoWSx0ZSxxLHErb2UpLGotPW9lfX1yZXR1cm4gWC5maWxsKDAp'@;
put 'LHtrZXk6QixpdjpZfX19LDQwMjk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUzMjApLEs9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7TS5leHBvcnRzPWZ1bmN0aW9uKGssRSxqKXtpZigheihFKSl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgVjthcmd1bWVudHMubGVuZ3RoPj0zJiYoVj1qKSwiW29iamVjdCBBcnJheV0iPT09Sy5jYWxsKGspP2Z1bmN0aW9uKEIsWSxYKXtmb3IodmFyIFU9MCxxPUIubGVuZ3RoO1U8cTtVKyspSS5jYWxsKEIsVSkmJihu'@;
put 'dWxsPT1YP1koQltVXSxVLEIpOlkuY2FsbChYLEJbVV0sVSxCKSl9KGssRSxWKToic3RyaW5nIj09dHlwZW9mIGs/ZnVuY3Rpb24oQixZLFgpe2Zvcih2YXIgVT0wLHE9Qi5sZW5ndGg7VTxxO1UrKyludWxsPT1YP1koQi5jaGFyQXQoVSksVSxCKTpZLmNhbGwoWCxCLmNoYXJBdChVKSxVLEIp'@;
put 'fShrLEUsVik6ZnVuY3Rpb24oQixZLFgpe2Zvcih2YXIgVSBpbiBCKUkuY2FsbChCLFUpJiYobnVsbD09WD9ZKEJbVV0sVSxCKTpZLmNhbGwoWCxCW1VdLFUsQikpfShrLEUsVil9fSw2MjMwOk09PntNLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9ybURhdGE6d2luZG93'@;
put 'LkZvcm1EYXRhfSw1MzAyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7Y29uc3QgST1SKDc3KSxrPVIoMjUyMCksRT1SKDEzODEpLm1rZGlyc1N5bmMsaj1SKDMxOCkudXRpbWVzTWlsbGlzU3luYyxWPVIoMjczMyk7ZnVuY3Rpb24gQihxLGVlLHRlLG9l'@;
put 'KXtjb25zdCBzZT0ob2UuZGVyZWZlcmVuY2U/SS5zdGF0U3luYzpJLmxzdGF0U3luYykoZWUpO2lmKHNlLmlzRGlyZWN0b3J5KCkpcmV0dXJuIGhlPXNlLGNlPWVlLEc9dGUsYj1vZSxxP1UoY2UsRyxiKTooRD1oZS5tb2RlLEg9Y2UsZz1iLEkubWtkaXJTeW5jKE49RyksVShILE4sZyksWChO'@;
put 'LEQpKTt2YXIgaGUsY2UsRyxiLEQsSCxOLGc7aWYoc2UuaXNGaWxlKCl8fHNlLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fHNlLmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24oaGUsdWUsY2UsRyxiKXtyZXR1cm4gdWU/ZnVuY3Rpb24oRCxILE4sZyl7aWYoZy5vdmVyd3JpdGUpcmV0dXJu'@;
put 'IEkudW5saW5rU3luYyhOKSxZKEQsSCxOLGcpO2lmKGcuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7Tn0nIGFscmVhZHkgZXhpc3RzYCl9KGhlLGNlLEcsYik6WShoZSxjZSxHLGIpfShzZSxxLGVlLHRlLG9lKTtpZihzZS5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlv'@;
put 'bihoZSx1ZSxjZSxHKXtsZXQgYj1JLnJlYWRsaW5rU3luYyh1ZSk7aWYoRy5kZXJlZmVyZW5jZSYmKGI9ay5yZXNvbHZlKHouY3dkKCksYikpLGhlKXtsZXQgRDt0cnl7RD1JLnJlYWRsaW5rU3luYyhjZSl9Y2F0Y2goSCl7aWYoIkVJTlZBTCI9PT1ILmNvZGV8fCJVTktOT1dOIj09PUguY29k'@;
put 'ZSlyZXR1cm4gSS5zeW1saW5rU3luYyhiLGNlKTt0aHJvdyBIfWlmKEcuZGVyZWZlcmVuY2UmJihEPWsucmVzb2x2ZSh6LmN3ZCgpLEQpKSxWLmlzU3JjU3ViZGlyKGIsRCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtifScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAn'@;
put 'JHtEfScuYCk7aWYoSS5zdGF0U3luYyhjZSkuaXNEaXJlY3RvcnkoKSYmVi5pc1NyY1N1YmRpcihELGIpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtEfScgd2l0aCAnJHtifScuYCk7cmV0dXJuIGZ1bmN0aW9uKEgsTil7cmV0dXJuIEkudW5saW5rU3luYyhOKSxJLnN5'@;
put 'bWxpbmtTeW5jKEgsTil9KGIsY2UpfXJldHVybiBJLnN5bWxpbmtTeW5jKGIsY2UpfShxLGVlLHRlLG9lKTt0aHJvdyBzZS5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtlZX1gKTpzZS5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEg'@;
put 'RklGTyBwaXBlOiAke2VlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke2VlfWApfWZ1bmN0aW9uIFkocSxlZSx0ZSxvZSl7cmV0dXJuIEkuY29weUZpbGVTeW5jKGVlLHRlKSxvZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJihoZT1lZSx1ZT10ZSwwPT0oMTI4JihzZT1xLm1vZGUpKSYmWCh1'@;
put 'ZSwxMjh8c2UpLGZ1bmN0aW9uKGNlLEcpe2NvbnN0IGI9SS5zdGF0U3luYyhjZSk7aihHLGIuYXRpbWUsYi5tdGltZSl9KGhlLHVlKSksWCh0ZSxxLm1vZGUpO3ZhciBzZSxoZSx1ZX1mdW5jdGlvbiBYKHEsZWUpe3JldHVybiBJLmNobW9kU3luYyhxLGVlKX1mdW5jdGlvbiBVKHEsZWUsdGUp'@;
put 'e0kucmVhZGRpclN5bmMocSkuZm9yRWFjaChvZT0+ZnVuY3Rpb24oc2UsaGUsdWUsY2Upe2NvbnN0IEc9ay5qb2luKGhlLHNlKSxiPWsuam9pbih1ZSxzZSkse2Rlc3RTdGF0OkR9PVYuY2hlY2tQYXRoc1N5bmMoRyxiLCJjb3B5IixjZSk7cmV0dXJuIGZ1bmN0aW9uKEgsTixnLEMpe2lmKCFD'@;
put 'LmZpbHRlcnx8Qy5maWx0ZXIoTixnKSlyZXR1cm4gQihILE4sZyxDKX0oRCxHLGIsY2UpfShvZSxxLGVlLHRlKSl9TS5leHBvcnRzPWZ1bmN0aW9uKHEsZWUsdGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0ZSYmKHRlPXtmaWx0ZXI6dGV9KSwodGU9dGV8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIi'@;
put 'aW4gdGUpfHwhIXRlLmNsb2JiZXIsdGUub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gdGU/ISF0ZS5vdmVyd3JpdGU6dGUuY2xvYmJlcix0ZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PXouYXJjaCYmSy53YXJuKCJmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBv'@;
put 'cHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG4gICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5Iik7Y29uc3R7c3JjU3RhdDpvZSxkZXN0U3RhdDpzZX09Vi5jaGVja1BhdGhzU3luYyhxLGVlLCJj'@;
put 'b3B5Iix0ZSk7cmV0dXJuIFYuY2hlY2tQYXJlbnRQYXRoc1N5bmMocSxvZSxlZSwiY29weSIpLGZ1bmN0aW9uKGhlLHVlLGNlLEcpe2lmKEcuZmlsdGVyJiYhRy5maWx0ZXIodWUsY2UpKXJldHVybjtjb25zdCBiPWsuZGlybmFtZShjZSk7cmV0dXJuIEkuZXhpc3RzU3luYyhiKXx8RShiKSxC'@;
put 'KGhlLHVlLGNlLEcpfShzZSxxLGVlLHRlKX19LDg2OTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9e2NvcHlTeW5jOlIoNTMwMil9fSw3MTg5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7Y29uc3QgST1SKDc3KSxrPVIoMjUyMCksRT1S'@;
put 'KDEzODEpLm1rZGlycyxqPVIoOTI1NykucGF0aEV4aXN0cyxWPVIoMzE4KS51dGltZXNNaWxsaXMsQj1SKDI3MzMpO2Z1bmN0aW9uIFkodWUsY2UsRyxiLEQpe2NvbnN0IEg9ay5kaXJuYW1lKEcpO2ooSCwoTixnKT0+Tj9EKE4pOmc/VSh1ZSxjZSxHLGIsRCk6dm9pZCBFKEgsQz0+Qz9EKEMp'@;
put 'OlUodWUsY2UsRyxiLEQpKSl9ZnVuY3Rpb24gWCh1ZSxjZSxHLGIsRCxIKXtQcm9taXNlLnJlc29sdmUoRC5maWx0ZXIoRyxiKSkudGhlbihOPT5OP3VlKGNlLEcsYixELEgpOkgoKSxOPT5IKE4pKX1mdW5jdGlvbiBVKHVlLGNlLEcsYixEKXsoYi5kZXJlZmVyZW5jZT9JLnN0YXQ6SS5sc3Rh'@;
put 'dCkoY2UsKEgsTik9PntyZXR1cm4gSD9EKEgpOk4uaXNEaXJlY3RvcnkoKT8oZz1OLFM9Y2Usdj1HLHA9Yix3PUQsdWU/b2UoUyx2LHAsdyk6KEo9Zy5tb2RlLG5lPVMsZmU9cCx4ZT13LHZvaWQgSS5ta2RpcihkZT12LExlPT57aWYoTGUpcmV0dXJuIHhlKExlKTtvZShuZSxkZSxmZSxGZT0+'@;
put 'RmU/eGUoRmUpOnRlKGRlLEoseGUpKX0pKSk6Ti5pc0ZpbGUoKXx8Ti5pc0NoYXJhY3RlckRldmljZSgpfHxOLmlzQmxvY2tEZXZpY2UoKT9mdW5jdGlvbihnLEMsUyx2LHAsdyl7cmV0dXJuIEM/ZnVuY3Rpb24oSixuZSxkZSxmZSx4ZSl7aWYoIWZlLm92ZXJ3cml0ZSlyZXR1cm4gZmUuZXJy'@;
put 'b3JPbkV4aXN0P3hlKG5ldyBFcnJvcihgJyR7ZGV9JyBhbHJlYWR5IGV4aXN0c2ApKTp4ZSgpO0kudW5saW5rKGRlLExlPT5MZT94ZShMZSk6cShKLG5lLGRlLGZlLHhlKSl9KGcsUyx2LHAsdyk6cShnLFMsdixwLHcpfShOLHVlLGNlLEcsYixEKTpOLmlzU3ltYm9saWNMaW5rKCk/ZnVuY3Rp'@;
put 'b24gaGUodWUsY2UsRyxiLEQpe0kucmVhZGxpbmsoY2UsKEgsTik9Pkg/RChIKTooYi5kZXJlZmVyZW5jZSYmKE49ay5yZXNvbHZlKHouY3dkKCksTikpLHVlP3ZvaWQgSS5yZWFkbGluayhHLChnLEMpPT5nPyJFSU5WQUwiPT09Zy5jb2RlfHwiVU5LTk9XTiI9PT1nLmNvZGU/SS5zeW1saW5r'@;
put 'KE4sRyxEKTpEKGcpOihiLmRlcmVmZXJlbmNlJiYoQz1rLnJlc29sdmUoei5jd2QoKSxDKSksQi5pc1NyY1N1YmRpcihOLEMpP0QobmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtOfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtDfScuYCkpOnVlLmlzRGlyZWN0b3J5KCkmJkIu'@;
put 'aXNTcmNTdWJkaXIoQyxOKT9EKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtDfScgd2l0aCAnJHtOfScuYCkpOmZ1bmN0aW9uKFMsdixwKXtJLnVubGluayh2LHc9Pnc/cCh3KTpJLnN5bWxpbmsoUyx2LHApKX0oTixHLEQpKSk6SS5zeW1saW5rKE4sRyxEKSkpfSh1ZSxjZSxHLGIs'@;
put 'RCk6Ti5pc1NvY2tldCgpP0QobmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke2NlfWApKTpOLmlzRklGTygpP0QobmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtjZX1gKSk6RChuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtjZX1gKSk7dmFyIGcs'@;
put 'Uyx2LHAsdyxKLG5lLGRlLGZlLHhlfSl9ZnVuY3Rpb24gcSh1ZSxjZSxHLGIsRCl7SS5jb3B5RmlsZShjZSxHLEg9PntyZXR1cm4gSD9EKEgpOmIucHJlc2VydmVUaW1lc3RhbXBzPyhnPWNlLEM9RyxTPUQsMD09KDEyOCYoTj11ZS5tb2RlKSk/dGUoQywxMjh8Tix2PT52P1Modik6ZWUoTixn'@;
put 'LEMsUykpOmVlKE4sZyxDLFMpKTp0ZShHLHVlLm1vZGUsRCk7dmFyIE4sZyxDLFN9KX1mdW5jdGlvbiBlZSh1ZSxjZSxHLGIpe3ZhciBILE47SD1HLE49RD0+RD9iKEQpOnRlKEcsdWUsYiksSS5zdGF0KGNlLChnLEMpPT5nP04oZyk6VihILEMuYXRpbWUsQy5tdGltZSxOKSl9ZnVuY3Rpb24g'@;
put 'dGUodWUsY2UsRyl7cmV0dXJuIEkuY2htb2QodWUsY2UsRyl9ZnVuY3Rpb24gb2UodWUsY2UsRyxiKXtJLnJlYWRkaXIodWUsKEQsSCk9PkQ/YihEKTpzZShILHVlLGNlLEcsYikpfWZ1bmN0aW9uIHNlKHVlLGNlLEcsYixEKXtjb25zdCBIPXVlLnBvcCgpO3JldHVybiBIP2Z1bmN0aW9uKE4s'@;
put 'ZyxDLFMsdixwKXtjb25zdCB3PWsuam9pbihDLGcpLEo9ay5qb2luKFMsZyk7Qi5jaGVja1BhdGhzKHcsSiwiY29weSIsdiwobmUsZGUpPT57aWYobmUpcmV0dXJuIHAobmUpO2NvbnN0e2Rlc3RTdGF0OmZlfT1kZTt2YXIgeGUsTGUsRmUsT2UsamU7eGU9ZmUsTGU9dyxGZT1KLGplPXhlPT54'@;
put 'ZT9wKHhlKTpzZShOLEMsUyx2LHApLChPZT12KS5maWx0ZXI/WChVLHhlLExlLEZlLE9lLGplKTpVKHhlLExlLEZlLE9lLGplKX0pfSh1ZSxILGNlLEcsYixEKTpEKCl9TS5leHBvcnRzPWZ1bmN0aW9uKHVlLGNlLEcsYil7ImZ1bmN0aW9uIiE9dHlwZW9mIEd8fGI/ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIEcmJihHPXtmaWx0ZXI6R30pOihiPUcsRz17fSksYj1ifHxmdW5jdGlvbigpe30sKEc9R3x8e30pLmNsb2JiZXI9ISgiY2xvYmJlciJpbiBHKXx8ISFHLmNsb2JiZXIsRy5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiBHPyEhRy5vdmVyd3JpdGU6Ry5jbG9iYmVyLEcucHJlc2VydmVUaW1l'@;
put 'c3RhbXBzJiYiaWEzMiI9PT16LmFyY2gmJksud2FybigiZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMt'@;
put 'ZXh0cmEvaXNzdWVzLzI2OSIpLEIuY2hlY2tQYXRocyh1ZSxjZSwiY29weSIsRywoRCxIKT0+e2lmKEQpcmV0dXJuIGIoRCk7Y29uc3R7c3JjU3RhdDpOLGRlc3RTdGF0Omd9PUg7Qi5jaGVja1BhcmVudFBhdGhzKHVlLE4sY2UsImNvcHkiLEM9PkM/YihDKTpHLmZpbHRlcj9YKFksZyx1ZSxj'@;
put 'ZSxHLGIpOlkoZyx1ZSxjZSxHLGIpKX0pfX0sNjQ2NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2s7TS5leHBvcnRzPXtjb3B5OnooUig3MTg5KSl9fSw1NTkwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9t'@;
put 'aXNlLEs9Uig3NzQ5KSxJPVIoMjUyMCksaz1SKDEzODEpLEU9Uig0NTQyKSxqPXooZnVuY3Rpb24oKXt2YXIgQj1hZShmdW5jdGlvbiooWSl7bGV0IFg7dHJ5e1g9eWllbGQgSy5yZWFkZGlyKFkpfWNhdGNoe3JldHVybiBrLm1rZGlycyhZKX1yZXR1cm4gUHJvbWlzZS5hbGwoWC5tYXAoVT0+'@;
put 'RS5yZW1vdmUoSS5qb2luKFksVSkpKSl9KTtyZXR1cm4gZnVuY3Rpb24oWSl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7ZnVuY3Rpb24gVihCKXtsZXQgWTt0cnl7WT1LLnJlYWRkaXJTeW5jKEIpfWNhdGNoe3JldHVybiBrLm1rZGlyc1N5bmMoQil9WS5mb3JFYWNoKFg9'@;
put 'PntYPUkuam9pbihCLFgpLEUucmVtb3ZlU3luYyhYKX0pfU0uZXhwb3J0cz17ZW1wdHlEaXJTeW5jOlYsZW1wdHlkaXJTeW5jOlYsZW1wdHlEaXI6aixlbXB0eWRpcjpqfX0sNjUzMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDI1MjAp'@;
put 'LEk9Uig3Nyksaz1SKDEzODEpO00uZXhwb3J0cz17Y3JlYXRlRmlsZTp6KGZ1bmN0aW9uKEUsail7ZnVuY3Rpb24gVigpe0kud3JpdGVGaWxlKEUsIiIsQj0+e2lmKEIpcmV0dXJuIGooQik7aigpfSl9SS5zdGF0KEUsKEIsWSk9PntpZighQiYmWS5pc0ZpbGUoKSlyZXR1cm4gaigpO2NvbnN0'@;
put 'IFg9Sy5kaXJuYW1lKEUpO0kuc3RhdChYLChVLHEpPT57aWYoVSlyZXR1cm4iRU5PRU5UIj09PVUuY29kZT9rLm1rZGlycyhYLGVlPT57aWYoZWUpcmV0dXJuIGooZWUpO1YoKX0pOmooVSk7cS5pc0RpcmVjdG9yeSgpP1YoKTpJLnJlYWRkaXIoWCxlZT0+e2lmKGVlKXJldHVybiBqKGVlKX0p'@;
put 'fSl9KX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0aW9uKEUpe2xldCBqO3RyeXtqPUkuc3RhdFN5bmMoRSl9Y2F0Y2h7fWlmKGomJmouaXNGaWxlKCkpcmV0dXJuO2NvbnN0IFY9Sy5kaXJuYW1lKEUpO3RyeXtJLnN0YXRTeW5jKFYpLmlzRGlyZWN0b3J5KCl8fEkucmVhZGRpclN5bmMoVil9Y2F0'@;
put 'Y2goQil7aWYoIUJ8fCJFTk9FTlQiIT09Qi5jb2RlKXRocm93IEI7ay5ta2RpcnNTeW5jKFYpfUkud3JpdGVGaWxlU3luYyhFLCIiKX19fSwxNzIwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDY1MzApLEs9Uig0MTQ3KSxJPVIoMzYzNSk7TS5leHBvcnRzPXtjcmVhdGVGaWxl'@;
put 'OnouY3JlYXRlRmlsZSxjcmVhdGVGaWxlU3luYzp6LmNyZWF0ZUZpbGVTeW5jLGVuc3VyZUZpbGU6ei5jcmVhdGVGaWxlLGVuc3VyZUZpbGVTeW5jOnouY3JlYXRlRmlsZVN5bmMsY3JlYXRlTGluazpLLmNyZWF0ZUxpbmssY3JlYXRlTGlua1N5bmM6Sy5jcmVhdGVMaW5rU3luYyxlbnN1cmVM'@;
put 'aW5rOksuY3JlYXRlTGluayxlbnN1cmVMaW5rU3luYzpLLmNyZWF0ZUxpbmtTeW5jLGNyZWF0ZVN5bWxpbms6SS5jcmVhdGVTeW1saW5rLGNyZWF0ZVN5bWxpbmtTeW5jOkkuY3JlYXRlU3ltbGlua1N5bmMsZW5zdXJlU3ltbGluazpJLmNyZWF0ZVN5bWxpbmssZW5zdXJlU3ltbGlua1N5bmM6'@;
put 'SS5jcmVhdGVTeW1saW5rU3luY319LDQxNDc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9UigyNTIwKSxJPVIoNzcpLGs9UigxMzgxKSxFPVIoOTI1NykucGF0aEV4aXN0cyx7YXJlSWRlbnRpY2FsOmp9PVIoMjczMyk7TS5leHBvcnRzPXtj'@;
put 'cmVhdGVMaW5rOnooZnVuY3Rpb24oVixCLFkpe2Z1bmN0aW9uIFgoVSxxKXtJLmxpbmsoVSxxLGVlPT57aWYoZWUpcmV0dXJuIFkoZWUpO1kobnVsbCl9KX1JLmxzdGF0KEIsKFUscSk9PntJLmxzdGF0KFYsKGVlLHRlKT0+e2lmKGVlKXJldHVybiBlZS5tZXNzYWdlPWVlLm1lc3NhZ2UucmVw'@;
put 'bGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksWShlZSk7aWYocSYmaih0ZSxxKSlyZXR1cm4gWShudWxsKTtjb25zdCBvZT1LLmRpcm5hbWUoQik7RShvZSwoc2UsaGUpPT5zZT9ZKHNlKTpoZT9YKFYsQik6dm9pZCBrLm1rZGlycyhvZSx1ZT0+e2lmKHVlKXJldHVybiBZKHVlKTtYKFYsQil9'@;
put 'KSl9KX0pfSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rpb24oVixCKXtsZXQgWTt0cnl7WT1JLmxzdGF0U3luYyhCKX1jYXRjaHt9dHJ5e2NvbnN0IFU9SS5sc3RhdFN5bmMoVik7aWYoWSYmaihVLFkpKXJldHVybn1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxz'@;
put 'dGF0IiwiZW5zdXJlTGluayIpLFV9Y29uc3QgWD1LLmRpcm5hbWUoQik7cmV0dXJuIEkuZXhpc3RzU3luYyhYKXx8ay5ta2RpcnNTeW5jKFgpLEkubGlua1N5bmMoVixCKX19fSw2MDcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDI1MjApLEs9Uig3NyksST1SKDkyNTcpLnBh'@;
put 'dGhFeGlzdHM7TS5leHBvcnRzPXtzeW1saW5rUGF0aHM6ZnVuY3Rpb24oayxFLGope2lmKHouaXNBYnNvbHV0ZShrKSlyZXR1cm4gSy5sc3RhdChrLFY9PlY/KFYubWVzc2FnZT1WLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksaihWKSk6aihudWxsLHt0b0N3ZDpr'@;
put 'LHRvRHN0Omt9KSk7e2NvbnN0IFY9ei5kaXJuYW1lKEUpLEI9ei5qb2luKFYsayk7cmV0dXJuIEkoQiwoWSxYKT0+WT9qKFkpOlg/aihudWxsLHt0b0N3ZDpCLHRvRHN0Omt9KTpLLmxzdGF0KGssVT0+VT8oVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxp'@;
put 'bmsiKSxqKFUpKTpqKG51bGwse3RvQ3dkOmssdG9Ec3Q6ei5yZWxhdGl2ZShWLGspfSkpKX19LHN5bWxpbmtQYXRoc1N5bmM6ZnVuY3Rpb24oayxFKXtsZXQgajtpZih6LmlzQWJzb2x1dGUoaykpe2lmKGo9Sy5leGlzdHNTeW5jKGspLCFqKXRocm93IG5ldyBFcnJvcigiYWJzb2x1dGUgc3Jj'@;
put 'cGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDprLHRvRHN0Omt9fXtjb25zdCBWPXouZGlybmFtZShFKSxCPXouam9pbihWLGspO2lmKGo9Sy5leGlzdHNTeW5jKEIpLGopcmV0dXJue3RvQ3dkOkIsdG9Ec3Q6a307aWYoaj1LLmV4aXN0c1N5bmMoayksIWopdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOmssdG9Ec3Q6ei5yZWxhdGl2ZShWLGspfX19fX0sOTI1OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3Nyk7TS5leHBvcnRzPXtzeW1saW5rVHlwZTpmdW5jdGlvbihLLEksayl7aWYo'@;
put 'az0iZnVuY3Rpb24iPT10eXBlb2YgST9JOmssST0iZnVuY3Rpb24iIT10eXBlb2YgSSYmSSlyZXR1cm4gayhudWxsLEkpO3oubHN0YXQoSywoRSxqKT0+e2lmKEUpcmV0dXJuIGsobnVsbCwiZmlsZSIpO0k9aiYmai5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIixrKG51bGwsSSl9KX0sc3lt'@;
put 'bGlua1R5cGVTeW5jOmZ1bmN0aW9uKEssSSl7bGV0IGs7aWYoSSlyZXR1cm4gSTt0cnl7az16LmxzdGF0U3luYyhLKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIGsmJmsuaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9fX0sMzYzNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9'@;
put 'Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDI1MjApLEk9Uig3NzQ5KSxrPVIoMTM4MSksRT1rLm1rZGlycyxqPWsubWtkaXJzU3luYyxWPVIoNjA3MiksQj1WLnN5bWxpbmtQYXRocyxZPVYuc3ltbGlua1BhdGhzU3luYyxYPVIoOTI1OSksVT1YLnN5bWxpbmtUeXBlLHE9WC5zeW1saW5rVHlw'@;
put 'ZVN5bmMsZWU9Uig5MjU3KS5wYXRoRXhpc3RzLHthcmVJZGVudGljYWw6dGV9PVIoMjczMyk7ZnVuY3Rpb24gb2Uoc2UsaGUsdWUsY2Upe0Ioc2UsaGUsKEcsYik9PntpZihHKXJldHVybiBjZShHKTtzZT1iLnRvRHN0LFUoYi50b0N3ZCx1ZSwoRCxIKT0+e2lmKEQpcmV0dXJuIGNlKEQpO2Nv'@;
put 'bnN0IE49Sy5kaXJuYW1lKGhlKTtlZShOLChnLEMpPT5nP2NlKGcpOkM/SS5zeW1saW5rKHNlLGhlLEgsY2UpOnZvaWQgRShOLFM9PntpZihTKXJldHVybiBjZShTKTtJLnN5bWxpbmsoc2UsaGUsSCxjZSl9KSl9KX0pfU0uZXhwb3J0cz17Y3JlYXRlU3ltbGluazp6KGZ1bmN0aW9uKHNlLGhl'@;
put 'LHVlLGNlKXtjZT0iZnVuY3Rpb24iPT10eXBlb2YgdWU/dWU6Y2UsdWU9ImZ1bmN0aW9uIiE9dHlwZW9mIHVlJiZ1ZSxJLmxzdGF0KGhlLChHLGIpPT57IUcmJmIuaXNTeW1ib2xpY0xpbmsoKT9Qcm9taXNlLmFsbChbSS5zdGF0KHNlKSxJLnN0YXQoaGUpXSkudGhlbigoW0QsSF0pPT57aWYo'@;
put 'dGUoRCxIKSlyZXR1cm4gY2UobnVsbCk7b2Uoc2UsaGUsdWUsY2UpfSk6b2Uoc2UsaGUsdWUsY2UpfSl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbihzZSxoZSx1ZSl7bGV0IGNlO3RyeXtjZT1JLmxzdGF0U3luYyhoZSl9Y2F0Y2h7fWlmKGNlJiZjZS5pc1N5bWJvbGljTGluaygpKXtj'@;
put 'b25zdCBEPUkuc3RhdFN5bmMoc2UpLEg9SS5zdGF0U3luYyhoZSk7aWYodGUoRCxIKSlyZXR1cm59Y29uc3QgRz1ZKHNlLGhlKTtzZT1HLnRvRHN0LHVlPXEoRy50b0N3ZCx1ZSk7Y29uc3QgYj1LLmRpcm5hbWUoaGUpO3JldHVybiBJLmV4aXN0c1N5bmMoYil8fGooYiksSS5zeW1saW5rU3lu'@;
put 'YyhzZSxoZSx1ZSl9fX0sNzc0OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDc3KSxJPVsiYWNjZXNzIiwiYXBwZW5kRmlsZSIsImNobW9kIiwiY2hvd24iLCJjbG9zZSIsImNvcHlGaWxlIiwiZmNobW9kIiwiZmNob3duIiwiZmRhdGFz'@;
put 'eW5jIiwiZnN0YXQiLCJmc3luYyIsImZ0cnVuY2F0ZSIsImZ1dGltZXMiLCJsY2htb2QiLCJsY2hvd24iLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRlbXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5rIiwicmVhbHBhdGgiLCJyZW5hbWUiLCJy'@;
put 'bSIsInJtZGlyIiwic3RhdCIsInN5bWxpbmsiLCJ0cnVuY2F0ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJdLmZpbHRlcihrPT4iZnVuY3Rpb24iPT10eXBlb2YgS1trXSk7T2JqZWN0LmFzc2lnbihPLEspLEkuZm9yRWFjaChrPT57T1trXT16KEtba10pfSksTy5yZWFscGF0aC5u'@;
put 'YXRpdmU9eihLLnJlYWxwYXRoLm5hdGl2ZSksTy5leGlzdHM9ZnVuY3Rpb24oayxFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRT9LLmV4aXN0cyhrLEUpOm5ldyBQcm9taXNlKGo9PksuZXhpc3RzKGssaikpfSxPLnJlYWQ9ZnVuY3Rpb24oayxFLGosVixCLFkpe3JldHVybiJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBZP0sucmVhZChrLEUsaixWLEIsWSk6bmV3IFByb21pc2UoKFgsVSk9PntLLnJlYWQoayxFLGosVixCLChxLGVlLHRlKT0+e2lmKHEpcmV0dXJuIFUocSk7WCh7Ynl0ZXNSZWFkOmVlLGJ1ZmZlcjp0ZX0pfSl9KX0sTy53cml0ZT1mdW5jdGlvbihrLEUsLi4uail7cmV0dXJu'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGpbai5sZW5ndGgtMV0/Sy53cml0ZShrLEUsLi4uaik6bmV3IFByb21pc2UoKFYsQik9PntLLndyaXRlKGssRSwuLi5qLChZLFgsVSk9PntpZihZKXJldHVybiBCKFkpO1Yoe2J5dGVzV3JpdHRlbjpYLGJ1ZmZlcjpVfSl9KX0pfSwiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgSy53cml0ZXYmJihPLndyaXRldj1mdW5jdGlvbihrLEUsLi4uail7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGpbai5sZW5ndGgtMV0/Sy53cml0ZXYoayxFLC4uLmopOm5ldyBQcm9taXNlKChWLEIpPT57Sy53cml0ZXYoayxFLC4uLmosKFksWCxVKT0+e2lmKFkpcmV0dXJuIEIoWSk7'@;
put 'Vih7Ynl0ZXNXcml0dGVuOlgsYnVmZmVyczpVfSl9KX0pfSl9LDU2NzQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ey4uLlIoNzc0OSksLi4uUig4NjkwKSwuLi5SKDY0NjQpLC4uLlIoNTU5MCksLi4uUigxNzIwKSwuLi5SKDY1NzMpLC4uLlIoMTM4MSksLi4uUig0MDI2KSwu'@;
put 'Li5SKDUzMCksLi4uUigxMzE1KSwuLi5SKDkyNTcpLC4uLlIoNDU0Mil9fSw2NTczOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLEs9Uig3MTgzKTtLLm91dHB1dEpzb249eihSKDM1MDgpKSxLLm91dHB1dEpzb25TeW5jPVIoOTU3OCksSy5vdXRw'@;
put 'dXRKU09OPUsub3V0cHV0SnNvbixLLm91dHB1dEpTT05TeW5jPUsub3V0cHV0SnNvblN5bmMsSy53cml0ZUpTT049Sy53cml0ZUpzb24sSy53cml0ZUpTT05TeW5jPUsud3JpdGVKc29uU3luYyxLLnJlYWRKU09OPUsucmVhZEpzb24sSy5yZWFkSlNPTlN5bmM9Sy5yZWFkSnNvblN5bmMsTS5l'@;
put 'eHBvcnRzPUt9LDcxODM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNjgxMyk7TS5leHBvcnRzPXtyZWFkSnNvbjp6LnJlYWRGaWxlLHJlYWRKc29uU3luYzp6LnJlYWRGaWxlU3luYyx3cml0ZUpzb246ei53cml0ZUZpbGUsd3JpdGVKc29uU3luYzp6LndyaXRlRmlsZVN5bmN9'@;
put 'fSw5NTc4OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Onp9PVIoNjc4MCkse291dHB1dEZpbGVTeW5jOkt9PVIoMTMxNSk7TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFKXtjb25zdCBqPXooayxFKTtLKEksaixFKX19LDM1MDg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtj'@;
put 'b25zdHtzdHJpbmdpZnk6en09Uig2NzgwKSx7b3V0cHV0RmlsZTpLfT1SKDEzMTUpO00uZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBJPWFlKGZ1bmN0aW9uKihrLEUsaj17fSl7Y29uc3QgVj16KEUsaik7eWllbGQgSyhrLFYsail9KTtyZXR1cm4gZnVuY3Rpb24oayxFKXtyZXR1cm4gSS5hcHBs'@;
put 'eSh0aGlzLGFyZ3VtZW50cyl9fSgpfSwxMzgxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLHttYWtlRGlyOkssbWFrZURpclN5bmM6SX09Uig4MjMzKSxrPXooSyk7TS5leHBvcnRzPXtta2RpcnM6ayxta2RpcnNTeW5jOkksbWtkaXJwOmssbWtk'@;
put 'aXJwU3luYzpJLGVuc3VyZURpcjprLGVuc3VyZURpclN5bmM6SX19LDgyMzM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzc0OSkse2NoZWNrUGF0aDpLfT1SKDM0NjgpLEk9az0+Im51bWJlciI9PXR5cGVvZiBrP2s6e21vZGU6NTExLC4uLmt9Lm1vZGU7TS5leHBvcnRzLm1h'@;
put 'a2VEaXI9ZnVuY3Rpb24oKXt2YXIgaz1hZShmdW5jdGlvbiooRSxqKXtyZXR1cm4gSyhFKSx6Lm1rZGlyKEUse21vZGU6SShqKSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5jdGlvbihFLGope3JldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksTS5leHBvcnRzLm1ha2VEaXJT'@;
put 'eW5jPShrLEUpPT4oSyhrKSx6Lm1rZGlyU3luYyhrLHttb2RlOkkoRSkscmVjdXJzaXZlOiEwfSkpfSwzNDY4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtjb25zdCBLPVIoMjUyMCk7TS5leHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihJKXtpZigid2luMzIiPT09ei5w'@;
put 'bGF0Zm9ybSYmL1s8PjoifD8qXS8udGVzdChJLnJlcGxhY2UoSy5wYXJzZShJKS5yb290LCIiKSkpe2NvbnN0IGs9bmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtJfWApO3Rocm93IGsuY29kZT0iRUlOVkFMIixrfX19LDQwMjY6KE0sTyxSKT0+eyJ1c2Ug'@;
put 'c3RyaWN0IjtNLmV4cG9ydHM9e21vdmVTeW5jOlIoNjAwNil9fSw2MDA2OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KSxLPVIoMjUyMCksST1SKDg2OTApLmNvcHlTeW5jLGs9Uig0NTQyKS5yZW1vdmVTeW5jLEU9UigxMzgxKS5ta2RpcnBTeW5jLGo9UigyNzMzKTtmdW5j'@;
put 'dGlvbiBWKEIsWSxYKXt0cnl7ei5yZW5hbWVTeW5jKEIsWSl9Y2F0Y2goVSl7aWYoIkVYREVWIiE9PVUuY29kZSl0aHJvdyBVO3JldHVybiBJKHE9QixZLHtvdmVyd3JpdGU6WCxlcnJvck9uRXhpc3Q6ITB9KSxrKHEpfXZhciBxfU0uZXhwb3J0cz1mdW5jdGlvbihCLFksWCl7Y29uc3QgVT0o'@;
put 'WD1YfHx7fSkub3ZlcndyaXRlfHxYLmNsb2JiZXJ8fCExLHtzcmNTdGF0OnEsaXNDaGFuZ2luZ0Nhc2U6ZWU9ITF9PWouY2hlY2tQYXRoc1N5bmMoQixZLCJtb3ZlIixYKTtyZXR1cm4gai5jaGVja1BhcmVudFBhdGhzU3luYyhCLHEsWSwibW92ZSIpLGZ1bmN0aW9uKHRlKXtjb25zdCBvZT1L'@;
put 'LmRpcm5hbWUodGUpO3JldHVybiBLLnBhcnNlKG9lKS5yb290PT09b2V9KFkpfHxFKEsuZGlybmFtZShZKSksZnVuY3Rpb24odGUsb2Usc2UsaGUpe2lmKGhlKXJldHVybiBWKHRlLG9lLHNlKTtpZihzZSlyZXR1cm4gayhvZSksVih0ZSxvZSxzZSk7aWYoei5leGlzdHNTeW5jKG9lKSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7cmV0dXJuIFYodGUsb2Usc2UpfShCLFksVSxlZSl9fSw1MzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrO00uZXhwb3J0cz17bW92ZTp6KFIoNDM2KSl9fSw0MzY6KE0sTyxSKT0+'@;
put 'eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpLEs9UigyNTIwKSxJPVIoNjQ2NCkuY29weSxrPVIoNDU0MikucmVtb3ZlLEU9UigxMzgxKS5ta2RpcnAsaj1SKDkyNTcpLnBhdGhFeGlzdHMsVj1SKDI3MzMpO2Z1bmN0aW9uIEIoWCxVLHEsZWUsdGUpe3JldHVybiBlZT9ZKFgsVSxxLHRlKTpx'@;
put 'P2soVSxvZT0+b2U/dGUob2UpOlkoWCxVLHEsdGUpKTp2b2lkIGooVSwob2Usc2UpPT5vZT90ZShvZSk6c2U/dGUobmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpKTpZKFgsVSxxLHRlKSl9ZnVuY3Rpb24gWShYLFUscSxlZSl7ei5yZW5hbWUoWCxVLHRlPT57cmV0dXJuIHRlPyJF'@;
put 'WERFViIhPT10ZS5jb2RlP2VlKHRlKToodWU9ZWUsdm9pZCBJKG9lPVgsVSx7b3ZlcndyaXRlOnEsZXJyb3JPbkV4aXN0OiEwfSxHPT5HP3VlKEcpOmsob2UsdWUpKSk6ZWUoKTt2YXIgb2UsdWV9KX1NLmV4cG9ydHM9ZnVuY3Rpb24oWCxVLHEsZWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBxJiYo'@;
put 'ZWU9cSxxPXt9KTtjb25zdCB0ZT1xLm92ZXJ3cml0ZXx8cS5jbG9iYmVyfHwhMTtWLmNoZWNrUGF0aHMoWCxVLCJtb3ZlIixxLChvZSxzZSk9PntpZihvZSlyZXR1cm4gZWUob2UpO2NvbnN0e3NyY1N0YXQ6aGUsaXNDaGFuZ2luZ0Nhc2U6dWU9ITF9PXNlO1YuY2hlY2tQYXJlbnRQYXRocyhY'@;
put 'LGhlLFUsIm1vdmUiLGNlPT5jZT9lZShjZSk6ZnVuY3Rpb24oRyl7Y29uc3QgYj1LLmRpcm5hbWUoRyk7cmV0dXJuIEsucGFyc2UoYikucm9vdD09PWJ9KFUpP0IoWCxVLHRlLHVlLGVlKTp2b2lkIEUoSy5kaXJuYW1lKFUpLEc9Pkc/ZWUoRyk6QihYLFUsdGUsdWUsZWUpKSl9KX19LDEzMTU6'@;
put 'KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9Uig3NyksST1SKDI1MjApLGs9UigxMzgxKSxFPVIoOTI1NykucGF0aEV4aXN0cztNLmV4cG9ydHM9e291dHB1dEZpbGU6eihmdW5jdGlvbihqLFYsQixZKXsiZnVuY3Rpb24iPT10eXBlb2YgQiYm'@;
put 'KFk9QixCPSJ1dGY4Iik7Y29uc3QgWD1JLmRpcm5hbWUoaik7RShYLChVLHEpPT5VP1koVSk6cT9LLndyaXRlRmlsZShqLFYsQixZKTp2b2lkIGsubWtkaXJzKFgsZWU9PntpZihlZSlyZXR1cm4gWShlZSk7Sy53cml0ZUZpbGUoaixWLEIsWSl9KSl9KSxvdXRwdXRGaWxlU3luYzpmdW5jdGlv'@;
put 'bihqLC4uLlYpe2NvbnN0IEI9SS5kaXJuYW1lKGopO2lmKEsuZXhpc3RzU3luYyhCKSlyZXR1cm4gSy53cml0ZUZpbGVTeW5jKGosLi4uVik7ay5ta2RpcnNTeW5jKEIpLEsud3JpdGVGaWxlU3luYyhqLC4uLlYpfX19LDkyNTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4'@;
put 'MSkuZnJvbVByb21pc2UsSz1SKDc3NDkpO00uZXhwb3J0cz17cGF0aEV4aXN0czp6KGZ1bmN0aW9uKEkpe3JldHVybiBLLmFjY2VzcyhJKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pLHBhdGhFeGlzdHNTeW5jOksuZXhpc3RzU3luY319LDQ1NDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0'@;
put 'Ijtjb25zdCB6PVIoNzcpLEs9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssST1SKDM0NTYpO00uZXhwb3J0cz17cmVtb3ZlOksoZnVuY3Rpb24oayxFKXtpZih6LnJtKXJldHVybiB6LnJtKGsse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0sRSk7SShrLEUpfSkscmVtb3ZlU3luYzpmdW5jdGlvbihrKXtp'@;
put 'Zih6LnJtU3luYylyZXR1cm4gei5ybVN5bmMoayx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSk7SS5zeW5jKGspfX19LDM0NTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2NvbnN0IEs9Uig3NyksST1SKDI1MjApLGs9Uig5MjgyKSxFPSJ3aW4zMiI9PT16LnBsYXRmb3Jt'@;
put 'O2Z1bmN0aW9uIGoodGUpe1sidW5saW5rIiwiY2htb2QiLCJzdGF0IiwibHN0YXQiLCJybWRpciIsInJlYWRkaXIiXS5mb3JFYWNoKG9lPT57dGVbb2VdPXRlW29lXXx8S1tvZV0sdGVbb2UrPSJTeW5jIl09dGVbb2VdfHxLW29lXX0pLHRlLm1heEJ1c3lUcmllcz10ZS5tYXhCdXN5VHJpZXN8'@;
put 'fDN9ZnVuY3Rpb24gVih0ZSxvZSxzZSl7bGV0IGhlPTA7ImZ1bmN0aW9uIj09dHlwZW9mIG9lJiYoc2U9b2Usb2U9e30pLGsodGUsInJpbXJhZjogbWlzc2luZyBwYXRoIiksay5zdHJpY3RFcXVhbCh0eXBlb2YgdGUsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmci'@;
put 'KSxrLnN0cmljdEVxdWFsKHR5cGVvZiBzZSwiZnVuY3Rpb24iLCJyaW1yYWY6IGNhbGxiYWNrIGZ1bmN0aW9uIHJlcXVpcmVkIiksayhvZSwicmltcmFmOiBpbnZhbGlkIG9wdGlvbnMgYXJndW1lbnQgcHJvdmlkZWQiKSxrLnN0cmljdEVxdWFsKHR5cGVvZiBvZSwib2JqZWN0IiwicmltcmFm'@;
put 'OiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKSxqKG9lKSxCKHRlLG9lLGZ1bmN0aW9uIHVlKGNlKXtpZihjZSl7aWYoKCJFQlVTWSI9PT1jZS5jb2RlfHwiRU5PVEVNUFRZIj09PWNlLmNvZGV8fCJFUEVSTSI9PT1jZS5jb2RlKSYmaGU8b2UubWF4QnVzeVRyaWVzKXJldHVybiBoZSsrLHNl'@;
put 'dFRpbWVvdXQoKCk9PkIodGUsb2UsdWUpLDEwMCpoZSk7IkVOT0VOVCI9PT1jZS5jb2RlJiYoY2U9bnVsbCl9c2UoY2UpfSl9ZnVuY3Rpb24gQih0ZSxvZSxzZSl7ayh0ZSksayhvZSksaygiZnVuY3Rpb24iPT10eXBlb2Ygc2UpLG9lLmxzdGF0KHRlLChoZSx1ZSk9PmhlJiYiRU5PRU5UIj09'@;
put 'PWhlLmNvZGU/c2UobnVsbCk6aGUmJiJFUEVSTSI9PT1oZS5jb2RlJiZFP1kodGUsb2UsaGUsc2UpOnVlJiZ1ZS5pc0RpcmVjdG9yeSgpP1UodGUsb2UsaGUsc2UpOnZvaWQgb2UudW5saW5rKHRlLGNlPT57aWYoY2Upe2lmKCJFTk9FTlQiPT09Y2UuY29kZSlyZXR1cm4gc2UobnVsbCk7aWYo'@;
put 'IkVQRVJNIj09PWNlLmNvZGUpcmV0dXJuIEU/WSh0ZSxvZSxjZSxzZSk6VSh0ZSxvZSxjZSxzZSk7aWYoIkVJU0RJUiI9PT1jZS5jb2RlKXJldHVybiBVKHRlLG9lLGNlLHNlKX1yZXR1cm4gc2UoY2UpfSkpfWZ1bmN0aW9uIFkodGUsb2Usc2UsaGUpe2sodGUpLGsob2UpLGsoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGhlKSxvZS5jaG1vZCh0ZSw0MzgsdWU9Pnt1ZT9oZSgiRU5PRU5UIj09PXVlLmNvZGU/bnVsbDpzZSk6b2Uuc3RhdCh0ZSwoY2UsRyk9PntjZT9oZSgiRU5PRU5UIj09PWNlLmNvZGU/bnVsbDpzZSk6Ry5pc0RpcmVjdG9yeSgpP1UodGUsb2Usc2UsaGUpOm9lLnVubGluayh0'@;
put 'ZSxoZSl9KX0pfWZ1bmN0aW9uIFgodGUsb2Usc2Upe2xldCBoZTtrKHRlKSxrKG9lKTt0cnl7b2UuY2htb2RTeW5jKHRlLDQzOCl9Y2F0Y2godWUpe2lmKCJFTk9FTlQiPT09dWUuY29kZSlyZXR1cm47dGhyb3cgc2V9dHJ5e2hlPW9lLnN0YXRTeW5jKHRlKX1jYXRjaCh1ZSl7aWYoIkVOT0VO'@;
put 'VCI9PT11ZS5jb2RlKXJldHVybjt0aHJvdyBzZX1oZS5pc0RpcmVjdG9yeSgpP2VlKHRlLG9lLHNlKTpvZS51bmxpbmtTeW5jKHRlKX1mdW5jdGlvbiBVKHRlLG9lLHNlLGhlKXtrKHRlKSxrKG9lKSxrKCJmdW5jdGlvbiI9PXR5cGVvZiBoZSksb2Uucm1kaXIodGUsdWU9Pnt2YXIgY2UsRyxi'@;
put 'OyF1ZXx8IkVOT1RFTVBUWSIhPT11ZS5jb2RlJiYiRUVYSVNUIiE9PXVlLmNvZGUmJiJFUEVSTSIhPT11ZS5jb2RlP2hlKHVlJiYiRU5PVERJUiI9PT11ZS5jb2RlP3NlOnVlKTooRz1vZSxiPWhlLGsoY2U9dGUpLGsoRyksaygiZnVuY3Rpb24iPT10eXBlb2YgYiksRy5yZWFkZGlyKGNlLChE'@;
put 'LEgpPT57aWYoRClyZXR1cm4gYihEKTtsZXQgTixnPUgubGVuZ3RoO2lmKDA9PT1nKXJldHVybiBHLnJtZGlyKGNlLGIpO0guZm9yRWFjaChDPT57VihJLmpvaW4oY2UsQyksRyxTPT57aWYoIU4pcmV0dXJuIFM/YihOPVMpOnZvaWQoMD09LS1nJiZHLnJtZGlyKGNlLGIpKX0pfSl9KSl9KX1m'@;
put 'dW5jdGlvbiBxKHRlLG9lKXtsZXQgc2U7aihvZT1vZXx8e30pLGsodGUsInJpbXJhZjogbWlzc2luZyBwYXRoIiksay5zdHJpY3RFcXVhbCh0eXBlb2YgdGUsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxrKG9lLCJyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucyIp'@;
put 'LGsuc3RyaWN0RXF1YWwodHlwZW9mIG9lLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCIpO3RyeXtzZT1vZS5sc3RhdFN5bmModGUpfWNhdGNoKGhlKXtpZigiRU5PRU5UIj09PWhlLmNvZGUpcmV0dXJuOyJFUEVSTSI9PT1oZS5jb2RlJiZFJiZYKHRlLG9lLGhl'@;
put 'KX10cnl7c2UmJnNlLmlzRGlyZWN0b3J5KCk/ZWUodGUsb2UsbnVsbCk6b2UudW5saW5rU3luYyh0ZSl9Y2F0Y2goaGUpe2lmKCJFTk9FTlQiPT09aGUuY29kZSlyZXR1cm47aWYoIkVQRVJNIj09PWhlLmNvZGUpcmV0dXJuIEU/WCh0ZSxvZSxoZSk6ZWUodGUsb2UsaGUpO2lmKCJFSVNESVIi'@;
put 'IT09aGUuY29kZSl0aHJvdyBoZTtlZSh0ZSxvZSxoZSl9fWZ1bmN0aW9uIGVlKHRlLG9lLHNlKXtrKHRlKSxrKG9lKTt0cnl7b2Uucm1kaXJTeW5jKHRlKX1jYXRjaChoZSl7aWYoIkVOT1RESVIiPT09aGUuY29kZSl0aHJvdyBzZTtpZigiRU5PVEVNUFRZIj09PWhlLmNvZGV8fCJFRVhJU1Qi'@;
put 'PT09aGUuY29kZXx8IkVQRVJNIj09PWhlLmNvZGUpIWZ1bmN0aW9uKHVlLGNlKXtpZihrKHVlKSxrKGNlKSxjZS5yZWFkZGlyU3luYyh1ZSkuZm9yRWFjaChHPT5xKEkuam9pbih1ZSxHKSxjZSkpLCFFKXJldHVybiBjZS5ybWRpclN5bmModWUsY2UpO3tjb25zdCBHPURhdGUubm93KCk7ZG97'@;
put 'dHJ5e3JldHVybiBjZS5ybWRpclN5bmModWUsY2UpfWNhdGNoe319d2hpbGUoRGF0ZS5ub3coKS1HPDUwMCl9fSh0ZSxvZSk7ZWxzZSBpZigiRU5PRU5UIiE9PWhlLmNvZGUpdGhyb3cgaGV9fU0uZXhwb3J0cz1WLFYuc3luYz1xfSwyNzMzOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qg'@;
put 'ej1SKDc3NDkpLEs9UigyNTIwKSxJPVIoOTUzOSk7ZnVuY3Rpb24gayhCLFksWCl7Y29uc3QgVT1YLmRlcmVmZXJlbmNlP3E9Pnouc3RhdChxLHtiaWdpbnQ6ITB9KTpxPT56LmxzdGF0KHEse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbVShCKSxVKFkpLmNhdGNoKHE9PntpZigi'@;
put 'RU5PRU5UIj09PXEuY29kZSlyZXR1cm4gbnVsbDt0aHJvdyBxfSldKS50aGVuKChbcSxlZV0pPT4oe3NyY1N0YXQ6cSxkZXN0U3RhdDplZX0pKX1mdW5jdGlvbiBFKEIsWSl7cmV0dXJuIFkuaW5vJiZZLmRldiYmWS5pbm89PT1CLmlubyYmWS5kZXY9PT1CLmRldn1mdW5jdGlvbiBqKEIsWSl7'@;
put 'Y29uc3QgWD1LLnJlc29sdmUoQikuc3BsaXQoSy5zZXApLmZpbHRlcihxPT5xKSxVPUsucmVzb2x2ZShZKS5zcGxpdChLLnNlcCkuZmlsdGVyKHE9PnEpO3JldHVybiBYLnJlZHVjZSgocSxlZSx0ZSk9PnEmJlVbdGVdPT09ZWUsITApfWZ1bmN0aW9uIFYoQixZLFgpe3JldHVybmBDYW5ub3Qg'@;
put 'JHtYfSAnJHtCfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtZfScuYH1NLmV4cG9ydHM9e2NoZWNrUGF0aHM6ZnVuY3Rpb24oQixZLFgsVSxxKXtJLmNhbGxiYWNraWZ5KGspKEIsWSxVLChlZSx0ZSk9PntpZihlZSlyZXR1cm4gcShlZSk7Y29uc3R7c3JjU3RhdDpvZSxkZXN0'@;
put 'U3RhdDpzZX09dGU7aWYoc2Upe2lmKEUob2Usc2UpKXtjb25zdCBoZT1LLmJhc2VuYW1lKEIpLHVlPUsuYmFzZW5hbWUoWSk7cmV0dXJuIm1vdmUiPT09WCYmaGUhPT11ZSYmaGUudG9Mb3dlckNhc2UoKT09PXVlLnRvTG93ZXJDYXNlKCk/cShudWxsLHtzcmNTdGF0Om9lLGRlc3RTdGF0OnNl'@;
put 'LGlzQ2hhbmdpbmdDYXNlOiEwfSk6cShuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIikpfWlmKG9lLmlzRGlyZWN0b3J5KCkmJiFzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBxKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGly'@;
put 'ZWN0b3J5ICcke1l9JyB3aXRoIGRpcmVjdG9yeSAnJHtCfScuYCkpO2lmKCFvZS5pc0RpcmVjdG9yeSgpJiZzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBxKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7WX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtCfScuYCkpfXJl'@;
put 'dHVybiBvZS5pc0RpcmVjdG9yeSgpJiZqKEIsWSk/cShuZXcgRXJyb3IoVihCLFksWCkpKTpxKG51bGwse3NyY1N0YXQ6b2UsZGVzdFN0YXQ6c2V9KX0pfSxjaGVja1BhdGhzU3luYzpmdW5jdGlvbihCLFksWCxVKXtjb25zdHtzcmNTdGF0OnEsZGVzdFN0YXQ6ZWV9PWZ1bmN0aW9uKHRlLG9l'@;
put 'LHNlKXtsZXQgaGU7Y29uc3QgdWU9c2UuZGVyZWZlcmVuY2U/Rz0+ei5zdGF0U3luYyhHLHtiaWdpbnQ6ITB9KTpHPT56LmxzdGF0U3luYyhHLHtiaWdpbnQ6ITB9KSxjZT11ZSh0ZSk7dHJ5e2hlPXVlKG9lKX1jYXRjaChHKXtpZigiRU5PRU5UIj09PUcuY29kZSlyZXR1cm57c3JjU3RhdDpj'@;
put 'ZSxkZXN0U3RhdDpudWxsfTt0aHJvdyBHfXJldHVybntzcmNTdGF0OmNlLGRlc3RTdGF0OmhlfX0oQixZLFUpO2lmKGVlKXtpZihFKHEsZWUpKXtjb25zdCB0ZT1LLmJhc2VuYW1lKEIpLG9lPUsuYmFzZW5hbWUoWSk7aWYoIm1vdmUiPT09WCYmdGUhPT1vZSYmdGUudG9Mb3dlckNhc2UoKT09'@;
put 'PW9lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6cSxkZXN0U3RhdDplZSxpc0NoYW5naW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpfWlmKHEuaXNEaXJlY3RvcnkoKSYmIWVlLmlzRGlyZWN0b3J5'@;
put 'KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7WX0nIHdpdGggZGlyZWN0b3J5ICcke0J9Jy5gKTtpZighcS5pc0RpcmVjdG9yeSgpJiZlZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3Rvcnkg'@;
put 'JyR7WX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtCfScuYCl9aWYocS5pc0RpcmVjdG9yeSgpJiZqKEIsWSkpdGhyb3cgbmV3IEVycm9yKFYoQixZLFgpKTtyZXR1cm57c3JjU3RhdDpxLGRlc3RTdGF0OmVlfX0sY2hlY2tQYXJlbnRQYXRoczpmdW5jdGlvbiBCKFksWCxVLHEsZWUpe2NvbnN0'@;
put 'IHRlPUsucmVzb2x2ZShLLmRpcm5hbWUoWSkpLG9lPUsucmVzb2x2ZShLLmRpcm5hbWUoVSkpO2lmKG9lPT09dGV8fG9lPT09Sy5wYXJzZShvZSkucm9vdClyZXR1cm4gZWUoKTt6LnN0YXQob2Use2JpZ2ludDohMH0sKHNlLGhlKT0+c2U/IkVOT0VOVCI9PT1zZS5jb2RlP2VlKCk6ZWUoc2Up'@;
put 'OkUoWCxoZSk/ZWUobmV3IEVycm9yKFYoWSxVLHEpKSk6QihZLFgsb2UscSxlZSkpfSxjaGVja1BhcmVudFBhdGhzU3luYzpmdW5jdGlvbiBCKFksWCxVLHEpe2NvbnN0IGVlPUsucmVzb2x2ZShLLmRpcm5hbWUoWSkpLHRlPUsucmVzb2x2ZShLLmRpcm5hbWUoVSkpO2lmKHRlPT09ZWV8fHRl'@;
put 'PT09Sy5wYXJzZSh0ZSkucm9vdClyZXR1cm47bGV0IG9lO3RyeXtvZT16LnN0YXRTeW5jKHRlLHtiaWdpbnQ6ITB9KX1jYXRjaChzZSl7aWYoIkVOT0VOVCI9PT1zZS5jb2RlKXJldHVybjt0aHJvdyBzZX1pZihFKFgsb2UpKXRocm93IG5ldyBFcnJvcihWKFksVSxxKSk7cmV0dXJuIEIoWSxY'@;
put 'LHRlLHEpfSxpc1NyY1N1YmRpcjpqLGFyZUlkZW50aWNhbDpFfX0sMzE4OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KTtNLmV4cG9ydHM9e3V0aW1lc01pbGxpczpmdW5jdGlvbihLLEksayxFKXt6Lm9wZW4oSywicisiLChqLFYpPT57aWYoailyZXR1cm4gRShqKTt6LmZ1'@;
put 'dGltZXMoVixJLGssQj0+e3ouY2xvc2UoVixZPT57RSYmRShCfHxZKX0pfSl9KX0sdXRpbWVzTWlsbGlzU3luYzpmdW5jdGlvbihLLEksayl7Y29uc3QgRT16Lm9wZW5TeW5jKEssInIrIik7cmV0dXJuIHouZnV0aW1lc1N5bmMoRSxJLGspLHouY2xvc2VTeW5jKEUpfX19LDczMzQ6KE0sTyxS'@;
put 'KT0+e3ZhciB6PVIoNDE1NSk7TS5leHBvcnRzPVksWS5yZWFscGF0aD1ZLFkuc3luYz1YLFkucmVhbHBhdGhTeW5jPVgsWS5tb25rZXlwYXRjaD1mdW5jdGlvbigpe0sucmVhbHBhdGg9WSxLLnJlYWxwYXRoU3luYz1YfSxZLnVubW9ua2V5cGF0Y2g9ZnVuY3Rpb24oKXtLLnJlYWxwYXRoPUks'@;
put 'Sy5yZWFscGF0aFN5bmM9a307dmFyIEs9UigyNTM1KSxJPUsucmVhbHBhdGgsaz1LLnJlYWxwYXRoU3luYyxqPS9edlswLTVdXC4vLnRlc3Qoei52ZXJzaW9uKSxWPVIoNzA1OSk7ZnVuY3Rpb24gQihVKXtyZXR1cm4gVSYmInJlYWxwYXRoIj09PVUuc3lzY2FsbCYmKCJFTE9PUCI9PT1VLmNv'@;
put 'ZGV8fCJFTk9NRU0iPT09VS5jb2RlfHwiRU5BTUVUT09MT05HIj09PVUuY29kZSl9ZnVuY3Rpb24gWShVLHEsZWUpe2lmKGopcmV0dXJuIEkoVSxxLGVlKTsiZnVuY3Rpb24iPT10eXBlb2YgcSYmKGVlPXEscT1udWxsKSxJKFUscSxmdW5jdGlvbih0ZSxvZSl7Qih0ZSk/Vi5yZWFscGF0aChV'@;
put 'LHEsZWUpOmVlKHRlLG9lKX0pfWZ1bmN0aW9uIFgoVSxxKXtpZihqKXJldHVybiBrKFUscSk7dHJ5e3JldHVybiBrKFUscSl9Y2F0Y2goZWUpe2lmKEIoZWUpKXJldHVybiBWLnJlYWxwYXRoU3luYyhVLHEpO3Rocm93IGVlfX19LDcwNTk6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUx'@;
put 'MDgpLEk9UigyNTIwKSxrPSJ3aW4zMiI9PT16LnBsYXRmb3JtLEU9UigyNTM1KSxqPXouZW52Lk5PREVfREVCVUcmJi9mcy8udGVzdCh6LmVudi5OT0RFX0RFQlVHKTtpZihrKXZhciBCPS8oLio/KSg/OltcL1xcXSt8JCkvZztlbHNlIEI9LyguKj8pKD86W1wvXSt8JCkvZztpZihrKXZhciBZ'@;
put 'PS9eKD86W2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dW15cXFwvXSspP1tcXFwvXSovO2Vsc2UgWT0vXltcL10qLztPLnJlYWxwYXRoU3luYz1mdW5jdGlvbihYLFUpe2lmKFg9SS5yZXNvbHZlKFgpLFUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLFgp'@;
put 'KXJldHVybiBVW1hdO3ZhciBxLGVlLHRlLG9lLHNlPVgsaGU9e30sdWU9e307ZnVuY3Rpb24gY2UoKXt2YXIgZz1ZLmV4ZWMoWCk7cT1nWzBdLmxlbmd0aCxlZT1nWzBdLHRlPWdbMF0sb2U9IiIsayYmIXVlW3RlXSYmKEUubHN0YXRTeW5jKHRlKSx1ZVt0ZV09ITApfWZvcihjZSgpO3E8WC5s'@;
put 'ZW5ndGg7KXtCLmxhc3RJbmRleD1xO3ZhciBHPUIuZXhlYyhYKTtpZihvZT1lZSxlZSs9R1swXSxxPUIubGFzdEluZGV4LCEodWVbdGU9b2UrR1sxXV18fFUmJlVbdGVdPT09dGUpKXt2YXIgYjtpZihVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSx0ZSkpYj1VW3Rl'@;
put 'XTtlbHNle3ZhciBEPUUubHN0YXRTeW5jKHRlKTtpZighRC5pc1N5bWJvbGljTGluaygpKXt1ZVt0ZV09ITAsVSYmKFVbdGVdPXRlKTtjb250aW51ZX12YXIgSD1udWxsO2lmKCFrKXt2YXIgTj1ELmRldi50b1N0cmluZygzMikrIjoiK0QuaW5vLnRvU3RyaW5nKDMyKTtoZS5oYXNPd25Qcm9w'@;
put 'ZXJ0eShOKSYmKEg9aGVbTl0pfW51bGw9PT1IJiYoRS5zdGF0U3luYyh0ZSksSD1FLnJlYWRsaW5rU3luYyh0ZSkpLGI9SS5yZXNvbHZlKG9lLEgpLFUmJihVW3RlXT1iKSxrfHwoaGVbTl09SCl9WD1JLnJlc29sdmUoYixYLnNsaWNlKHEpKSxjZSgpfX1yZXR1cm4gVSYmKFVbc2VdPVgpLFh9'@;
put 'LE8ucmVhbHBhdGg9ZnVuY3Rpb24oWCxVLHEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBxJiYocT1mdW5jdGlvbiBWKFgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBYP1g6ZnVuY3Rpb24oKXt2YXIgVTtpZihqKXt2YXIgcT1uZXcgRXJyb3I7VT1mdW5jdGlvbih0ZSl7dGUmJihxLm1lc3Nh'@;
put 'Z2U9dGUubWVzc2FnZSxlZSh0ZT1xKSl9fWVsc2UgVT1lZTtyZXR1cm4gVTtmdW5jdGlvbiBlZSh0ZSl7aWYodGUpe2lmKHoudGhyb3dEZXByZWNhdGlvbil0aHJvdyB0ZTtpZighei5ub0RlcHJlY2F0aW9uKXt2YXIgb2U9ImZzOiBtaXNzaW5nIGNhbGxiYWNrICIrKHRlLnN0YWNrfHx0ZS5t'@;
put 'ZXNzYWdlKTt6LnRyYWNlRGVwcmVjYXRpb24/Sy50cmFjZShvZSk6Sy5lcnJvcihvZSl9fX19KCl9KFUpLFU9bnVsbCksWD1JLnJlc29sdmUoWCksVSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsWCkpcmV0dXJuIHoubmV4dFRpY2socS5iaW5kKG51bGwsbnVsbCxV'@;
put 'W1hdKSk7dmFyIGVlLHRlLG9lLHNlLGhlPVgsdWU9e30sY2U9e307ZnVuY3Rpb24gRygpe3ZhciBnPVkuZXhlYyhYKTtlZT1nWzBdLmxlbmd0aCx0ZT1nWzBdLG9lPWdbMF0sc2U9IiIsayYmIWNlW29lXT9FLmxzdGF0KG9lLGZ1bmN0aW9uKEMpe2lmKEMpcmV0dXJuIHEoQyk7Y2Vbb2VdPSEw'@;
put 'LGIoKX0pOnoubmV4dFRpY2soYil9ZnVuY3Rpb24gYigpe2lmKGVlPj1YLmxlbmd0aClyZXR1cm4gVSYmKFVbaGVdPVgpLHEobnVsbCxYKTtCLmxhc3RJbmRleD1lZTt2YXIgZz1CLmV4ZWMoWCk7cmV0dXJuIHNlPXRlLHRlKz1nWzBdLGVlPUIubGFzdEluZGV4LGNlW29lPXNlK2dbMV1dfHxV'@;
put 'JiZVW29lXT09PW9lP3oubmV4dFRpY2soYik6VSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsb2UpP04oVVtvZV0pOkUubHN0YXQob2UsRCl9ZnVuY3Rpb24gRChnLEMpe2lmKGcpcmV0dXJuIHEoZyk7aWYoIUMuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gY2Vbb2Vd'@;
put 'PSEwLFUmJihVW29lXT1vZSksei5uZXh0VGljayhiKTtpZighayl7dmFyIFM9Qy5kZXYudG9TdHJpbmcoMzIpKyI6IitDLmluby50b1N0cmluZygzMik7aWYodWUuaGFzT3duUHJvcGVydHkoUykpcmV0dXJuIEgobnVsbCx1ZVtTXSxvZSl9RS5zdGF0KG9lLGZ1bmN0aW9uKHYpe2lmKHYpcmV0'@;
put 'dXJuIHEodik7RS5yZWFkbGluayhvZSxmdW5jdGlvbihwLHcpe2t8fCh1ZVtTXT13KSxIKHAsdyl9KX0pfWZ1bmN0aW9uIEgoZyxDLFMpe2lmKGcpcmV0dXJuIHEoZyk7dmFyIHY9SS5yZXNvbHZlKHNlLEMpO1UmJihVW1NdPXYpLE4odil9ZnVuY3Rpb24gTihnKXtYPUkucmVzb2x2ZShnLFgu'@;
put 'c2xpY2UoZWUpKSxHKCl9RygpfX0sNzY0ODpNPT57InVzZSBzdHJpY3QiO3ZhciBPPUFycmF5LnByb3RvdHlwZS5zbGljZSxSPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7TS5leHBvcnRzPWZ1bmN0aW9uKHope3ZhciBLPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEt8fCJbb2JqZWN0'@;
put 'IEZ1bmN0aW9uXSIhPT1SLmNhbGwoSykpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK0spO2Zvcih2YXIgSSxrPU8uY2FsbChhcmd1bWVudHMsMSksRT1NYXRoLm1heCgwLEsubGVuZ3RoLWsubGVuZ3RoKSxqPVtd'@;
put 'LFY9MDtWPEU7VisrKWoucHVzaCgiJCIrVik7aWYoST1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2ouam9pbigiLCIpKyIpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfSIpKGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIEkpe3ZhciBZ'@;
put 'PUsuYXBwbHkodGhpcyxrLmNvbmNhdChPLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmplY3QoWSk9PT1ZP1k6dGhpc31yZXR1cm4gSy5hcHBseSh6LGsuY29uY2F0KE8uY2FsbChhcmd1bWVudHMpKSl9KSxLLnByb3RvdHlwZSl7dmFyIEI9ZnVuY3Rpb24oKXt9O0IucHJvdG90eXBlPUsu'@;
put 'cHJvdG90eXBlLEkucHJvdG90eXBlPW5ldyBCLEIucHJvdG90eXBlPW51bGx9cmV0dXJuIEl9fSw4NjEyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig3NjQ4KTtNLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fHp9LDIxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3Zh'@;
put 'ciB6LEs9U3ludGF4RXJyb3IsST1GdW5jdGlvbixrPVR5cGVFcnJvcixFPWZ1bmN0aW9uKFMpe3RyeXtyZXR1cm4gSSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcrUysiKS5jb25zdHJ1Y3RvcjsiKSgpfWNhdGNoe319LGo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtpZihqKXRy'@;
put 'eXtqKHt9LCIiKX1jYXRjaHtqPW51bGx9dmFyIFY9ZnVuY3Rpb24oKXt0aHJvdyBuZXcga30sQj1qP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBWfWNhdGNoe3RyeXtyZXR1cm4gaihhcmd1bWVudHMsImNhbGxlZSIpLmdldH1jYXRjaHtyZXR1cm4gVn19fSgpOlYsWT1SKDE0MDUpKCksWD1PYmpl'@;
put 'Y3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKFMpe3JldHVybiBTLl9fcHJvdG9fX30sVT17fSxxPXR5cGVvZiBVaW50OEFycmF5PiJ1Ij96OlgoVWludDhBcnJheSksZWU9eyIlQWdncmVnYXRlRXJyb3IlIjp0eXBlb2YgQWdncmVnYXRlRXJyb3I+InUiP3o6QWdncmVnYXRlRXJyb3IsIiVB'@;
put 'cnJheSUiOkFycmF5LCIlQXJyYXlCdWZmZXIlIjp0eXBlb2YgQXJyYXlCdWZmZXI+InUiP3o6QXJyYXlCdWZmZXIsIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI6WT9YKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk6eiwiJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUiOnosIiVBc3lu'@;
put 'Y0Z1bmN0aW9uJSI6VSwiJUFzeW5jR2VuZXJhdG9yJSI6VSwiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIjpVLCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiOlUsIiVBdG9taWNzJSI6dHlwZW9mIEF0b21pY3M+InUiP3o6QXRvbWljcywiJUJpZ0ludCUiOnR5cGVvZiBCaWdJbnQ+InUiP3o6'@;
put 'QmlnSW50LCIlQmlnSW50NjRBcnJheSUiOnR5cGVvZiBCaWdJbnQ2NEFycmF5PiJ1Ij96OkJpZ0ludDY0QXJyYXksIiVCaWdVaW50NjRBcnJheSUiOnR5cGVvZiBCaWdVaW50NjRBcnJheT4idSI/ejpCaWdVaW50NjRBcnJheSwiJUJvb2xlYW4lIjpCb29sZWFuLCIlRGF0YVZpZXclIjp0eXBl'@;
put 'b2YgRGF0YVZpZXc+InUiP3o6RGF0YVZpZXcsIiVEYXRlJSI6RGF0ZSwiJWRlY29kZVVSSSUiOmRlY29kZVVSSSwiJWRlY29kZVVSSUNvbXBvbmVudCUiOmRlY29kZVVSSUNvbXBvbmVudCwiJWVuY29kZVVSSSUiOmVuY29kZVVSSSwiJWVuY29kZVVSSUNvbXBvbmVudCUiOmVuY29kZVVSSUNv'@;
put 'bXBvbmVudCwiJUVycm9yJSI6RXJyb3IsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOkV2YWxFcnJvciwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP3o6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/ejpGbG9h'@;
put 'dDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/ejpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6SSwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6VSwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP3o6'@;
put 'SW50OEFycmF5LCIlSW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5PiJ1Ij96OkludDE2QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP3o6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5'@;
put 'cGUlIjpZP1goWChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKTp6LCIlSlNPTiUiOiJvYmplY3QiPT10eXBlb2YgSlNPTj9KU09OOnosIiVNYXAlIjp0eXBlb2YgTWFwPiJ1Ij96Ok1hcCwiJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIE1hcDwidSImJlk/WCgobmV3IE1hcClbU3ltYm9s'@;
put 'Lml0ZXJhdG9yXSgpKTp6LCIlTWF0aCUiOk1hdGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVPYmplY3QlIjpPYmplY3QsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlwZW9mIFByb21pc2U+InUiP3o6UHJvbWlzZSwiJVByb3h5JSI6'@;
put 'dHlwZW9mIFByb3h5PiJ1Ij96OlByb3h5LCIlUmFuZ2VFcnJvciUiOlJhbmdlRXJyb3IsIiVSZWZlcmVuY2VFcnJvciUiOlJlZmVyZW5jZUVycm9yLCIlUmVmbGVjdCUiOnR5cGVvZiBSZWZsZWN0PiJ1Ij96OlJlZmxlY3QsIiVSZWdFeHAlIjpSZWdFeHAsIiVTZXQlIjp0eXBlb2YgU2V0PiJ1'@;
put 'Ij96OlNldCwiJVNldEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIFNldDwidSImJlk/WCgobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKTp6LCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP3o6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmcl'@;
put 'IjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOlk/WCgiIltTeW1ib2wuaXRlcmF0b3JdKCkpOnosIiVTeW1ib2wlIjpZP1N5bWJvbDp6LCIlU3ludGF4RXJyb3IlIjpLLCIlVGhyb3dUeXBlRXJyb3IlIjpCLCIlVHlwZWRBcnJheSUiOnEsIiVUeXBlRXJyb3IlIjprLCIlVWlu'@;
put 'dDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1Ij96OlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/ejpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij96OlVpbnQxNkFy'@;
put 'cmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUiP3o6VWludDMyQXJyYXksIiVVUklFcnJvciUiOlVSSUVycm9yLCIlV2Vha01hcCUiOnR5cGVvZiBXZWFrTWFwPiJ1Ij96OldlYWtNYXAsIiVXZWFrUmVmJSI6dHlwZW9mIFdlYWtSZWY+InUiP3o6V2Vha1JlZiwiJVdl'@;
put 'YWtTZXQlIjp0eXBlb2YgV2Vha1NldD4idSI/ejpXZWFrU2V0fTt0cnl7bnVsbC5lcnJvcn1jYXRjaChTKXt2YXIgdGU9WChYKFMpKTtlZVsiJUVycm9yLnByb3RvdHlwZSUiXT10ZX12YXIgb2U9ZnVuY3Rpb24gUyh2KXt2YXIgcDtpZigiJUFzeW5jRnVuY3Rpb24lIj09PXYpcD1FKCJhc3lu'@;
put 'YyBmdW5jdGlvbiAoKSB7fSIpO2Vsc2UgaWYoIiVHZW5lcmF0b3JGdW5jdGlvbiUiPT09dilwPUUoImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT12KXA9RSgiYXN5bmMgZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJh'@;
put 'dG9yJSI9PT12KXt2YXIgdz1TKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiKTt3JiYocD13LnByb3RvdHlwZSl9ZWxzZSBpZigiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIj09PXYpe3ZhciBKPVMoIiVBc3luY0dlbmVyYXRvciUiKTtKJiYocD1YKEoucHJvdG90eXBlKSl9cmV0dXJuIGVl'@;
put 'W3ZdPXAscH0sc2U9eyIlQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIkFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvdHlwZSUiOlsiQXJyYXkiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG9fZW50cmllcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJlbnRyaWVzIl0sIiVB'@;
put 'cnJheVByb3RvX2ZvckVhY2glIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZm9yRWFjaCJdLCIlQXJyYXlQcm90b19rZXlzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImtleXMiXSwiJUFycmF5UHJvdG9fdmFsdWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsInZhbHVlcyJdLCIlQXN5bmNGdW5j'@;
put 'dGlvblByb3RvdHlwZSUiOlsiQXN5bmNGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3IlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90'@;
put 'eXBlIiwicHJvdG90eXBlIl0sIiVCb29sZWFuUHJvdG90eXBlJSI6WyJCb29sZWFuIiwicHJvdG90eXBlIl0sIiVEYXRhVmlld1Byb3RvdHlwZSUiOlsiRGF0YVZpZXciLCJwcm90b3R5cGUiXSwiJURhdGVQcm90b3R5cGUlIjpbIkRhdGUiLCJwcm90b3R5cGUiXSwiJUVycm9yUHJvdG90eXBl'@;
put 'JSI6WyJFcnJvciIsInByb3RvdHlwZSJdLCIlRXZhbEVycm9yUHJvdG90eXBlJSI6WyJFdmFsRXJyb3IiLCJwcm90b3R5cGUiXSwiJUZsb2F0MzJBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVGbG9hdDY0QXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0NjRB'@;
put 'cnJheSIsInByb3RvdHlwZSJdLCIlRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3IlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90'@;
put 'eXBlIiwicHJvdG90eXBlIl0sIiVJbnQ4QXJyYXlQcm90b3R5cGUlIjpbIkludDhBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MTZBcnJheVByb3RvdHlwZSUiOlsiSW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MzJBcnJheVByb3RvdHlwZSUiOlsiSW50MzJBcnJheSIsInByb3RvdHlw'@;
put 'ZSJdLCIlSlNPTlBhcnNlJSI6WyJKU09OIiwicGFyc2UiXSwiJUpTT05TdHJpbmdpZnklIjpbIkpTT04iLCJzdHJpbmdpZnkiXSwiJU1hcFByb3RvdHlwZSUiOlsiTWFwIiwicHJvdG90eXBlIl0sIiVOdW1iZXJQcm90b3R5cGUlIjpbIk51bWJlciIsInByb3RvdHlwZSJdLCIlT2JqZWN0UHJv'@;
put 'dG90eXBlJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiXSwiJU9ialByb3RvX3RvU3RyaW5nJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyJdLCIlT2JqUHJvdG9fdmFsdWVPZiUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidmFsdWVPZiJdLCIlUHJvbWlzZVByb3RvdHlwZSUiOlsi'@;
put 'UHJvbWlzZSIsInByb3RvdHlwZSJdLCIlUHJvbWlzZVByb3RvX3RoZW4lIjpbIlByb21pc2UiLCJwcm90b3R5cGUiLCJ0aGVuIl0sIiVQcm9taXNlX2FsbCUiOlsiUHJvbWlzZSIsImFsbCJdLCIlUHJvbWlzZV9yZWplY3QlIjpbIlByb21pc2UiLCJyZWplY3QiXSwiJVByb21pc2VfcmVzb2x2'@;
put 'ZSUiOlsiUHJvbWlzZSIsInJlc29sdmUiXSwiJVJhbmdlRXJyb3JQcm90b3R5cGUlIjpbIlJhbmdlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSI6WyJSZWZlcmVuY2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVnRXhwUHJvdG90eXBlJSI6WyJSZWdFeHAi'@;
put 'LCJwcm90b3R5cGUiXSwiJVNldFByb3RvdHlwZSUiOlsiU2V0IiwicHJvdG90eXBlIl0sIiVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiU2hhcmVkQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJVN0cmluZ1Byb3RvdHlwZSUiOlsiU3RyaW5nIiwicHJvdG90eXBlIl0sIiVTeW1i'@;
put 'b2xQcm90b3R5cGUlIjpbIlN5bWJvbCIsInByb3RvdHlwZSJdLCIlU3ludGF4RXJyb3JQcm90b3R5cGUlIjpbIlN5bnRheEVycm9yIiwicHJvdG90eXBlIl0sIiVUeXBlZEFycmF5UHJvdG90eXBlJSI6WyJUeXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVUeXBlRXJyb3JQcm90b3R5cGUlIjpb'@;
put 'IlR5cGVFcnJvciIsInByb3RvdHlwZSJdLCIlVWludDhBcnJheVByb3RvdHlwZSUiOlsiVWludDhBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4Q2xhbXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MTZBcnJheVByb3RvdHlwZSUi'@;
put 'OlsiVWludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQzMkFycmF5UHJvdG90eXBlJSI6WyJVaW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlVVJJRXJyb3JQcm90b3R5cGUlIjpbIlVSSUVycm9yIiwicHJvdG90eXBlIl0sIiVXZWFrTWFwUHJvdG90eXBlJSI6WyJXZWFrTWFwIiwicHJv'@;
put 'dG90eXBlIl0sIiVXZWFrU2V0UHJvdG90eXBlJSI6WyJXZWFrU2V0IiwicHJvdG90eXBlIl19LGhlPVIoODYxMiksdWU9Uig3NjQyKSxjZT1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksRz1oZS5jYWxsKEZ1bmN0aW9uLmFwcGx5LEFycmF5LnByb3RvdHlw'@;
put 'ZS5zcGxpY2UpLGI9aGUuY2FsbChGdW5jdGlvbi5jYWxsLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksRD1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksSD1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsUmVnRXhwLnByb3RvdHlwZS5leGVjKSxOPS9bXiUuW1xd'@;
put 'XSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2csZz0vXFwoXFwpPy9nLEM9ZnVuY3Rpb24oUyx2KXt2YXIgcCx3PVM7aWYodWUoc2UsdykmJih3PSIlIisocD1zZVt3XSlbMF0r'@;
put 'IiUiKSx1ZShlZSx3KSl7dmFyIEo9ZWVbd107aWYoSj09PVUmJihKPW9lKHcpKSx2b2lkIDA9PT1KJiYhdil0aHJvdyBuZXcgaygiaW50cmluc2ljICIrUysiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpwLG5hbWU6'@;
put 'dyx2YWx1ZTpKfX10aHJvdyBuZXcgSygiaW50cmluc2ljICIrUysiIGRvZXMgbm90IGV4aXN0ISIpfTtNLmV4cG9ydHM9ZnVuY3Rpb24oUyx2KXtpZigic3RyaW5nIiE9dHlwZW9mIFN8fDA9PT1TLmxlbmd0aCl0aHJvdyBuZXcgaygiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0'@;
put 'eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJiJib29sZWFuIiE9dHlwZW9mIHYpdGhyb3cgbmV3IGsoJyJhbGxvd01pc3NpbmciIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7aWYobnVsbD09PUgoL14lP1teJV0qJT8kLyxTKSl0aHJvdyBuZXcgSygiYCVgIG1heSBub3Qg'@;
put 'YmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZSIpO3ZhciBwPWZ1bmN0aW9uKFllKXt2YXIgUWU9RChZZSwwLDEpLGx0PUQoWWUsLTEpO2lmKCIlIj09PVFlJiYiJSIhPT1sdCl0aHJvdyBuZXcgSygiaW52YWxpZCBp'@;
put 'bnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCIpO2lmKCIlIj09PWx0JiYiJSIhPT1RZSl0aHJvdyBuZXcgSygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciBQZT1bXTtyZXR1cm4gYihZZSxOLGZ1bmN0aW9uKGJlLEFlLFRl'@;
put 'LHFlKXtQZVtQZS5sZW5ndGhdPVRlP2IocWUsZywiJDEiKTpBZXx8YmV9KSxQZX0oUyksdz1wLmxlbmd0aD4wP3BbMF06IiIsSj1DKCIlIit3KyIlIix2KSxuZT1KLm5hbWUsZGU9Si52YWx1ZSxmZT0hMSx4ZT1KLmFsaWFzO3hlJiYodz14ZVswXSxHKHAsY2UoWzAsMV0seGUpKSk7Zm9yKHZh'@;
put 'ciBMZT0xLEZlPSEwO0xlPHAubGVuZ3RoO0xlKz0xKXt2YXIgT2U9cFtMZV0samU9RChPZSwwLDEpLFdlPUQoT2UsLTEpO2lmKCgnIic9PT1qZXx8IiciPT09amV8fCJgIj09PWplfHwnIic9PT1XZXx8IiciPT09V2V8fCJgIj09PVdlKSYmamUhPT1XZSl0aHJvdyBuZXcgSygicHJvcGVydHkg'@;
put 'bmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcyIpO2lmKCJjb25zdHJ1Y3RvciIhPT1PZSYmRmV8fChmZT0hMCksdWUoZWUsbmU9IiUiKyh3Kz0iLiIrT2UpKyIlIikpZGU9ZWVbbmVdO2Vsc2UgaWYobnVsbCE9ZGUpe2lmKCEoT2UgaW4gZGUpKXtpZighdil0aHJv'@;
put 'dyBuZXcgaygiYmFzZSBpbnRyaW5zaWMgZm9yICIrUysiIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZihqJiZMZSsxPj1wLmxlbmd0aCl7dmFyIEtlPWooZGUsT2UpO2RlPShGZT0hIUtlKSYmImdldCJpbiBLZSYmISgib3JpZ2luYWxWYWx1'@;
put 'ZSJpbiBLZS5nZXQpP0tlLmdldDpkZVtPZV19ZWxzZSBGZT11ZShkZSxPZSksZGU9ZGVbT2VdO0ZlJiYhZmUmJihlZVtuZV09ZGUpfX1yZXR1cm4gZGV9fSw2NzcyOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsocSxlZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3du'@;
put 'UHJvcGVydHkuY2FsbChxLGVlKX1PLnNldG9wdHM9ZnVuY3Rpb24ocSxlZSx0ZSl7aWYodGV8fCh0ZT17fSksdGUubWF0Y2hCYXNlJiYtMT09PWVlLmluZGV4T2YoIi8iKSl7aWYodGUubm9nbG9ic3Rhcil0aHJvdyBuZXcgRXJyb3IoImJhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXIi'@;
put 'KTtlZT0iKiovIitlZX12YXIgc2U7cS5zaWxlbnQ9ISF0ZS5zaWxlbnQscS5wYXR0ZXJuPWVlLHEuc3RyaWN0PSExIT09dGUuc3RyaWN0LHEucmVhbHBhdGg9ISF0ZS5yZWFscGF0aCxxLnJlYWxwYXRoQ2FjaGU9dGUucmVhbHBhdGhDYWNoZXx8T2JqZWN0LmNyZWF0ZShudWxsKSxxLmZvbGxv'@;
put 'dz0hIXRlLmZvbGxvdyxxLmRvdD0hIXRlLmRvdCxxLm1hcms9ISF0ZS5tYXJrLHEubm9kaXI9ISF0ZS5ub2RpcixxLm5vZGlyJiYocS5tYXJrPSEwKSxxLnN5bmM9ISF0ZS5zeW5jLHEubm91bmlxdWU9ISF0ZS5ub3VuaXF1ZSxxLm5vbnVsbD0hIXRlLm5vbnVsbCxxLm5vc29ydD0hIXRlLm5v'@;
put 'c29ydCxxLm5vY2FzZT0hIXRlLm5vY2FzZSxxLnN0YXQ9ISF0ZS5zdGF0LHEubm9wcm9jZXNzPSEhdGUubm9wcm9jZXNzLHEuYWJzb2x1dGU9ISF0ZS5hYnNvbHV0ZSxxLmZzPXRlLmZzfHxJLHEubWF4TGVuZ3RoPXRlLm1heExlbmd0aHx8MS8wLHEuY2FjaGU9dGUuY2FjaGV8fE9iamVjdC5j'@;
put 'cmVhdGUobnVsbCkscS5zdGF0Q2FjaGU9dGUuc3RhdENhY2hlfHxPYmplY3QuY3JlYXRlKG51bGwpLHEuc3ltbGlua3M9dGUuc3ltbGlua3N8fE9iamVjdC5jcmVhdGUobnVsbCksKHNlPXEpLmlnbm9yZT10ZS5pZ25vcmV8fFtdLEFycmF5LmlzQXJyYXkoc2UuaWdub3JlKXx8KHNlLmlnbm9y'@;
put 'ZT1bc2UuaWdub3JlXSksc2UuaWdub3JlLmxlbmd0aCYmKHNlLmlnbm9yZT1zZS5pZ25vcmUubWFwKFkpKSxxLmNoYW5nZWRDd2Q9ITE7dmFyIG9lPXouY3dkKCk7Syh0ZSwiY3dkIik/KHEuY3dkPWsucmVzb2x2ZSh0ZS5jd2QpLHEuY2hhbmdlZEN3ZD1xLmN3ZCE9PW9lKTpxLmN3ZD1vZSxx'@;
put 'LnJvb3Q9dGUucm9vdHx8ay5yZXNvbHZlKHEuY3dkLCIvIikscS5yb290PWsucmVzb2x2ZShxLnJvb3QpLCJ3aW4zMiI9PT16LnBsYXRmb3JtJiYocS5yb290PXEucm9vdC5yZXBsYWNlKC9cXC9nLCIvIikpLHEuY3dkQWJzPWoocS5jd2QpP3EuY3dkOlgocSxxLmN3ZCksIndpbjMyIj09PXou'@;
put 'cGxhdGZvcm0mJihxLmN3ZEFicz1xLmN3ZEFicy5yZXBsYWNlKC9cXC9nLCIvIikpLHEubm9tb3VudD0hIXRlLm5vbW91bnQsdGUubm9uZWdhdGU9ITAsdGUubm9jb21tZW50PSEwLHRlLmFsbG93V2luZG93c0VzY2FwZT0hMSxxLm1pbmltYXRjaD1uZXcgVihlZSx0ZSkscS5vcHRpb25zPXEu'@;
put 'bWluaW1hdGNoLm9wdGlvbnN9LE8ub3duUHJvcD1LLE8ubWFrZUFicz1YLE8uZmluaXNoPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9cS5ub3VuaXF1ZSx0ZT1lZT9bXTpPYmplY3QuY3JlYXRlKG51bGwpLG9lPTAsc2U9cS5tYXRjaGVzLmxlbmd0aDtvZTxzZTtvZSsrKXt2YXIgaGU9cS5tYXRj'@;
put 'aGVzW29lXTtpZihoZSYmMCE9PU9iamVjdC5rZXlzKGhlKS5sZW5ndGgpe3ZhciB1ZT1PYmplY3Qua2V5cyhoZSk7ZWU/dGUucHVzaC5hcHBseSh0ZSx1ZSk6dWUuZm9yRWFjaChmdW5jdGlvbihHKXt0ZVtHXT0hMH0pfWVsc2UgaWYocS5ub251bGwpe3ZhciBjZT1xLm1pbmltYXRjaC5nbG9i'@;
put 'U2V0W29lXTtlZT90ZS5wdXNoKGNlKTp0ZVtjZV09ITB9fWlmKGVlfHwodGU9T2JqZWN0LmtleXModGUpKSxxLm5vc29ydHx8KHRlPXRlLnNvcnQoQikpLHEubWFyayl7Zm9yKG9lPTA7b2U8dGUubGVuZ3RoO29lKyspdGVbb2VdPXEuX21hcmsodGVbb2VdKTtxLm5vZGlyJiYodGU9dGUuZmls'@;
put 'dGVyKGZ1bmN0aW9uKEcpe3ZhciBiPSEvXC8kLy50ZXN0KEcpLEQ9cS5jYWNoZVtHXXx8cS5jYWNoZVtYKHEsRyldO3JldHVybiBiJiZEJiYoYj0iRElSIiE9PUQmJiFBcnJheS5pc0FycmF5KEQpKSxifSkpfXEuaWdub3JlLmxlbmd0aCYmKHRlPXRlLmZpbHRlcihmdW5jdGlvbihHKXtyZXR1'@;
put 'cm4hVShxLEcpfSkpLHEuZm91bmQ9dGV9LE8ubWFyaz1mdW5jdGlvbihxLGVlKXt2YXIgdGU9WChxLGVlKSxvZT1xLmNhY2hlW3RlXSxzZT1lZTtpZihvZSl7dmFyIGhlPSJESVIiPT09b2V8fEFycmF5LmlzQXJyYXkob2UpLHVlPSIvIj09PWVlLnNsaWNlKC0xKTtpZihoZSYmIXVlP3NlKz0i'@;
put 'LyI6IWhlJiZ1ZSYmKHNlPXNlLnNsaWNlKDAsLTEpKSxzZSE9PWVlKXt2YXIgY2U9WChxLHNlKTtxLnN0YXRDYWNoZVtjZV09cS5zdGF0Q2FjaGVbdGVdLHEuY2FjaGVbY2VdPXEuY2FjaGVbdGVdfX1yZXR1cm4gc2V9LE8uaXNJZ25vcmVkPVUsTy5jaGlsZHJlbklnbm9yZWQ9ZnVuY3Rpb24o'@;
put 'cSxlZSl7cmV0dXJuISFxLmlnbm9yZS5sZW5ndGgmJnEuaWdub3JlLnNvbWUoZnVuY3Rpb24odGUpe3JldHVybiEoIXRlLmdtYXRjaGVyfHwhdGUuZ21hdGNoZXIubWF0Y2goZWUpKX0pfTt2YXIgST1SKDM3MTApLGs9UigyNTIwKSxFPVIoMTE3MSksaj1SKDQwOTUpLFY9RS5NaW5pbWF0Y2g7'@;
put 'ZnVuY3Rpb24gQihxLGVlKXtyZXR1cm4gcS5sb2NhbGVDb21wYXJlKGVlLCJlbiIpfWZ1bmN0aW9uIFkocSl7dmFyIGVlPW51bGw7aWYoIi8qKiI9PT1xLnNsaWNlKC0zKSl7dmFyIHRlPXEucmVwbGFjZSgvKFwvXCpcKikrJC8sIiIpO2VlPW5ldyBWKHRlLHtkb3Q6ITB9KX1yZXR1cm57bWF0'@;
put 'Y2hlcjpuZXcgVihxLHtkb3Q6ITB9KSxnbWF0Y2hlcjplZX19ZnVuY3Rpb24gWChxLGVlKXt2YXIgdGU9ZWU7cmV0dXJuIHRlPSIvIj09PWVlLmNoYXJBdCgwKT9rLmpvaW4ocS5yb290LGVlKTpqKGVlKXx8IiI9PT1lZT9lZTpxLmNoYW5nZWRDd2Q/ay5yZXNvbHZlKHEuY3dkLGVlKTprLnJl'@;
put 'c29sdmUoZWUpLCJ3aW4zMiI9PT16LnBsYXRmb3JtJiYodGU9dGUucmVwbGFjZSgvXFwvZywiLyIpKSx0ZX1mdW5jdGlvbiBVKHEsZWUpe3JldHVybiEhcS5pZ25vcmUubGVuZ3RoJiZxLmlnbm9yZS5zb21lKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUubWF0Y2hlci5tYXRjaChlZSl8fCEoIXRl'@;
put 'LmdtYXRjaGVyfHwhdGUuZ21hdGNoZXIubWF0Y2goZWUpKX0pfX0sMjg4NDooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7TS5leHBvcnRzPXVlO3ZhciBJPVIoNzMzNCksaz1SKDExNzEpLEU9Uig1NzE3KSxqPVIoNzE4NykuRXZlbnRFbWl0dGVyLFY9UigyNTIwKSxCPVIoOTI4'@;
put 'MiksWT1SKDQwOTUpLFg9Uig0NzUxKSxVPVIoNjc3MikscT1VLnNldG9wdHMsZWU9VS5vd25Qcm9wLHRlPVIoNzg0NCksb2U9KFIoOTUzOSksVS5jaGlsZHJlbklnbm9yZWQpLHNlPVUuaXNJZ25vcmVkLGhlPVIoNzc4KTtmdW5jdGlvbiB1ZShiLEQsSCl7aWYoImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IEQmJihIPUQsRD17fSksRHx8KEQ9e30pLEQuc3luYyl7aWYoSCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2IiKTtyZXR1cm4gWChiLEQpfXJldHVybiBuZXcgRyhiLEQsSCl9dWUuc3luYz1YO3ZhciBjZT11ZS5HbG9iU3luYz1YLkdsb2JTeW5j'@;
put 'O2Z1bmN0aW9uIEcoYixELEgpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBEJiYoSD1ELEQ9bnVsbCksRCYmRC5zeW5jKXtpZihIKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYiIpO3JldHVybiBuZXcgY2UoYixEKX1pZighKHRoaXMgaW5zdGFuY2Vv'@;
put 'ZiBHKSlyZXR1cm4gbmV3IEcoYixELEgpO3EodGhpcyxiLEQpLHRoaXMuX2RpZFJlYWxQYXRoPSExO3ZhciBOPXRoaXMubWluaW1hdGNoLnNldC5sZW5ndGg7dGhpcy5tYXRjaGVzPW5ldyBBcnJheShOKSwiZnVuY3Rpb24iPT10eXBlb2YgSCYmKEg9aGUoSCksdGhpcy5vbigiZXJyb3IiLEgp'@;
put 'LHRoaXMub24oImVuZCIsZnVuY3Rpb24ocCl7SChudWxsLHApfSkpO3ZhciBnPXRoaXM7aWYodGhpcy5fcHJvY2Vzc2luZz0wLHRoaXMuX2VtaXRRdWV1ZT1bXSx0aGlzLl9wcm9jZXNzUXVldWU9W10sdGhpcy5wYXVzZWQ9ITEsdGhpcy5ub3Byb2Nlc3MpcmV0dXJuIHRoaXM7aWYoMD09PU4p'@;
put 'cmV0dXJuIHYoKTtmb3IodmFyIEM9ITAsUz0wO1M8TjtTKyspdGhpcy5fcHJvY2Vzcyh0aGlzLm1pbmltYXRjaC5zZXRbU10sUywhMSx2KTtmdW5jdGlvbiB2KCl7LS1nLl9wcm9jZXNzaW5nLGcuX3Byb2Nlc3Npbmc8PTAmJihDP3oubmV4dFRpY2soZnVuY3Rpb24oKXtnLl9maW5pc2goKX0p'@;
put 'OmcuX2ZpbmlzaCgpKX1DPSExfXVlLmdsb2I9dWUsdWUuaGFzTWFnaWM9ZnVuY3Rpb24oYixEKXt2YXIgSD1mdW5jdGlvbihDLFMpe2lmKG51bGw9PT1TfHwib2JqZWN0IiE9dHlwZW9mIFMpcmV0dXJuIEM7Zm9yKHZhciB2PU9iamVjdC5rZXlzKFMpLHA9di5sZW5ndGg7cC0tOylDW3ZbcF1d'@;
put 'PVNbdltwXV07cmV0dXJuIEN9KHt9LEQpO0gubm9wcm9jZXNzPSEwO3ZhciBOPW5ldyBHKGIsSCkubWluaW1hdGNoLnNldDtpZighYilyZXR1cm4hMTtpZihOLmxlbmd0aD4xKXJldHVybiEwO2Zvcih2YXIgZz0wO2c8TlswXS5sZW5ndGg7ZysrKWlmKCJzdHJpbmciIT10eXBlb2YgTlswXVtn'@;
put 'XSlyZXR1cm4hMDtyZXR1cm4hMX0sdWUuR2xvYj1HLEUoRyxqKSxHLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7aWYoQih0aGlzIGluc3RhbmNlb2YgRyksIXRoaXMuYWJvcnRlZCl7aWYodGhpcy5yZWFscGF0aCYmIXRoaXMuX2RpZFJlYWxwYXRoKXJldHVybiB0aGlzLl9yZWFscGF0'@;
put 'aCgpO1UuZmluaXNoKHRoaXMpLHRoaXMuZW1pdCgiZW5kIix0aGlzLmZvdW5kKX19LEcucHJvdG90eXBlLl9yZWFscGF0aD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kaWRSZWFscGF0aCl7dGhpcy5fZGlkUmVhbHBhdGg9ITA7dmFyIGI9dGhpcy5tYXRjaGVzLmxlbmd0aDtpZigwPT09YilyZXR1'@;
put 'cm4gdGhpcy5fZmluaXNoKCk7Zm9yKHZhciBEPXRoaXMsSD0wO0g8dGhpcy5tYXRjaGVzLmxlbmd0aDtIKyspdGhpcy5fcmVhbHBhdGhTZXQoSCxOKX1mdW5jdGlvbiBOKCl7MD09LS1iJiZELl9maW5pc2goKX19LEcucHJvdG90eXBlLl9yZWFscGF0aFNldD1mdW5jdGlvbihiLEQpe3ZhciBI'@;
put 'PXRoaXMubWF0Y2hlc1tiXTtpZighSClyZXR1cm4gRCgpO3ZhciBOPU9iamVjdC5rZXlzKEgpLGc9dGhpcyxDPU4ubGVuZ3RoO2lmKDA9PT1DKXJldHVybiBEKCk7dmFyIFM9dGhpcy5tYXRjaGVzW2JdPU9iamVjdC5jcmVhdGUobnVsbCk7Ti5mb3JFYWNoKGZ1bmN0aW9uKHYscCl7dj1nLl9t'@;
put 'YWtlQWJzKHYpLEkucmVhbHBhdGgodixnLnJlYWxwYXRoQ2FjaGUsZnVuY3Rpb24odyxKKXt3PyJzdGF0Ij09PXcuc3lzY2FsbD9TW3ZdPSEwOmcuZW1pdCgiZXJyb3IiLHcpOlNbSl09ITAsMD09LS1DJiYoZy5tYXRjaGVzW2JdPVMsRCgpKX0pfSl9LEcucHJvdG90eXBlLl9tYXJrPWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiBVLm1hcmsodGhpcyxiKX0sRy5wcm90b3R5cGUuX21ha2VBYnM9ZnVuY3Rpb24oYil7cmV0dXJuIFUubWFrZUFicyh0aGlzLGIpfSxHLnByb3RvdHlwZS5hYm9ydD1mdW5jdGlvbigpe3RoaXMuYWJvcnRlZD0hMCx0aGlzLmVtaXQoImFib3J0Iil9LEcucHJvdG90eXBl'@;
put 'LnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWR8fCh0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXQoInBhdXNlIikpfSxHLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLnBhdXNlZCl7aWYodGhpcy5lbWl0KCJyZXN1bWUiKSx0aGlzLnBhdXNlZD0hMSx0aGlzLl9lbWl0UXVl'@;
put 'dWUubGVuZ3RoKXt2YXIgYj10aGlzLl9lbWl0UXVldWUuc2xpY2UoMCk7dGhpcy5fZW1pdFF1ZXVlLmxlbmd0aD0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgSD1iW0RdO3RoaXMuX2VtaXRNYXRjaChIWzBdLEhbMV0pfX1pZih0aGlzLl9wcm9jZXNzUXVldWUubGVuZ3RoKXt2'@;
put 'YXIgTj10aGlzLl9wcm9jZXNzUXVldWUuc2xpY2UoMCk7Zm9yKHRoaXMuX3Byb2Nlc3NRdWV1ZS5sZW5ndGg9MCxEPTA7RDxOLmxlbmd0aDtEKyspe3ZhciBnPU5bRF07dGhpcy5fcHJvY2Vzc2luZy0tLHRoaXMuX3Byb2Nlc3MoZ1swXSxnWzFdLGdbMl0sZ1szXSl9fX19LEcucHJvdG90eXBl'@;
put 'Ll9wcm9jZXNzPWZ1bmN0aW9uKGIsRCxILE4pe2lmKEIodGhpcyBpbnN0YW5jZW9mIEcpLEIoImZ1bmN0aW9uIj09dHlwZW9mIE4pLCF0aGlzLmFib3J0ZWQpaWYodGhpcy5fcHJvY2Vzc2luZysrLHRoaXMucGF1c2VkKXRoaXMuX3Byb2Nlc3NRdWV1ZS5wdXNoKFtiLEQsSCxOXSk7ZWxzZXtm'@;
put 'b3IodmFyIGcsQz0wOyJzdHJpbmciPT10eXBlb2YgYltDXTspQysrO3N3aXRjaChDKXtjYXNlIGIubGVuZ3RoOnJldHVybiB2b2lkIHRoaXMuX3Byb2Nlc3NTaW1wbGUoYi5qb2luKCIvIiksRCxOKTtjYXNlIDA6Zz1udWxsO2JyZWFrO2RlZmF1bHQ6Zz1iLnNsaWNlKDAsQykuam9pbigiLyIp'@;
put 'fXZhciBTLHY9Yi5zbGljZShDKTtudWxsPT09Zz9TPSIuIjooKFkoZyl8fFkoYi5tYXAoZnVuY3Rpb24odyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB3P3c6IlsqXSJ9KS5qb2luKCIvIikpKSYmKGcmJlkoZyl8fChnPSIvIitnKSksUz1nKTt2YXIgcD10aGlzLl9tYWtlQWJzKFMpO2lmKG9l'@;
put 'KHRoaXMsUykpcmV0dXJuIE4oKTt2WzBdPT09ay5HTE9CU1RBUj90aGlzLl9wcm9jZXNzR2xvYlN0YXIoZyxTLHAsdixELEgsTik6dGhpcy5fcHJvY2Vzc1JlYWRkaXIoZyxTLHAsdixELEgsTil9fSxHLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXI9ZnVuY3Rpb24oYixELEgsTixnLEMsUyl7'@;
put 'dmFyIHY9dGhpczt0aGlzLl9yZWFkZGlyKEgsQyxmdW5jdGlvbihwLHcpe3JldHVybiB2Ll9wcm9jZXNzUmVhZGRpcjIoYixELEgsTixnLEMsdyxTKX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXIyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMsdil7aWYoIVMpcmV0dXJuIHYoKTtmb3Io'@;
put 'dmFyIHA9TlswXSx3PSEhdGhpcy5taW5pbWF0Y2gubmVnYXRlLG5lPXRoaXMuZG90fHwiLiI9PT1wLl9nbG9iLmNoYXJBdCgwKSxkZT1bXSxmZT0wO2ZlPFMubGVuZ3RoO2ZlKyspKCIuIiE9PShMZT1TW2ZlXSkuY2hhckF0KDApfHxuZSkmJih3JiYhYj8hTGUubWF0Y2gocCk6TGUubWF0Y2go'@;
put 'cCkpJiZkZS5wdXNoKExlKTt2YXIgeGU9ZGUubGVuZ3RoO2lmKDA9PT14ZSlyZXR1cm4gdigpO2lmKDE9PT1OLmxlbmd0aCYmIXRoaXMubWFyayYmIXRoaXMuc3RhdCl7Zm9yKHRoaXMubWF0Y2hlc1tnXXx8KHRoaXMubWF0Y2hlc1tnXT1PYmplY3QuY3JlYXRlKG51bGwpKSxmZT0wO2ZlPHhl'@;
put 'O2ZlKyspe3ZhciBMZT1kZVtmZV07YiYmKExlPSIvIiE9PWI/YisiLyIrTGU6YitMZSksIi8iIT09TGUuY2hhckF0KDApfHx0aGlzLm5vbW91bnR8fChMZT1WLmpvaW4odGhpcy5yb290LExlKSksdGhpcy5fZW1pdE1hdGNoKGcsTGUpfXJldHVybiB2KCl9Zm9yKE4uc2hpZnQoKSxmZT0wO2Zl'@;
put 'PHhlO2ZlKyspTGU9ZGVbZmVdLGImJihMZT0iLyIhPT1iP2IrIi8iK0xlOmIrTGUpLHRoaXMuX3Byb2Nlc3MoW0xlXS5jb25jYXQoTiksZyxDLHYpO3YoKX0sRy5wcm90b3R5cGUuX2VtaXRNYXRjaD1mdW5jdGlvbihiLEQpe2lmKCF0aGlzLmFib3J0ZWQmJiFzZSh0aGlzLEQpKWlmKHRoaXMu'@;
put 'cGF1c2VkKXRoaXMuX2VtaXRRdWV1ZS5wdXNoKFtiLERdKTtlbHNle3ZhciBIPVkoRCk/RDp0aGlzLl9tYWtlQWJzKEQpO2lmKHRoaXMubWFyayYmKEQ9dGhpcy5fbWFyayhEKSksdGhpcy5hYnNvbHV0ZSYmKEQ9SCksIXRoaXMubWF0Y2hlc1tiXVtEXSl7aWYodGhpcy5ub2Rpcil7dmFyIE49'@;
put 'dGhpcy5jYWNoZVtIXTtpZigiRElSIj09PU58fEFycmF5LmlzQXJyYXkoTikpcmV0dXJufXRoaXMubWF0Y2hlc1tiXVtEXT0hMDt2YXIgZz10aGlzLnN0YXRDYWNoZVtIXTtnJiZ0aGlzLmVtaXQoInN0YXQiLEQsZyksdGhpcy5lbWl0KCJtYXRjaCIsRCl9fX0sRy5wcm90b3R5cGUuX3JlYWRk'@;
put 'aXJJbkdsb2JTdGFyPWZ1bmN0aW9uKGIsRCl7aWYoIXRoaXMuYWJvcnRlZCl7aWYodGhpcy5mb2xsb3cpcmV0dXJuIHRoaXMuX3JlYWRkaXIoYiwhMSxEKTt2YXIgSD10aGlzLE49dGUoImxzdGF0XDAiK2IsZnVuY3Rpb24oZyxDKXtpZihnJiYiRU5PRU5UIj09PWcuY29kZSlyZXR1cm4gRCgp'@;
put 'O3ZhciBTPUMmJkMuaXNTeW1ib2xpY0xpbmsoKTtILnN5bWxpbmtzW2JdPVMsU3x8IUN8fEMuaXNEaXJlY3RvcnkoKT9ILl9yZWFkZGlyKGIsITEsRCk6KEguY2FjaGVbYl09IkZJTEUiLEQoKSl9KTtOJiZILmZzLmxzdGF0KGIsTil9fSxHLnByb3RvdHlwZS5fcmVhZGRpcj1mdW5jdGlvbihi'@;
put 'LEQsSCl7aWYoIXRoaXMuYWJvcnRlZCYmKEg9dGUoInJlYWRkaXJcMCIrYisiXDAiK0QsSCkpKXtpZihEJiYhZWUodGhpcy5zeW1saW5rcyxiKSlyZXR1cm4gdGhpcy5fcmVhZGRpckluR2xvYlN0YXIoYixIKTtpZihlZSh0aGlzLmNhY2hlLGIpKXt2YXIgTj10aGlzLmNhY2hlW2JdO2lmKCFO'@;
put 'fHwiRklMRSI9PT1OKXJldHVybiBIKCk7aWYoQXJyYXkuaXNBcnJheShOKSlyZXR1cm4gSChudWxsLE4pfXRoaXMuZnMucmVhZGRpcihiLChnPXRoaXMsQz1iLFM9SCxmdW5jdGlvbih2LHApe3Y/Zy5fcmVhZGRpckVycm9yKEMsdixTKTpnLl9yZWFkZGlyRW50cmllcyhDLHAsUyl9KSl9dmFy'@;
put 'IGcsQyxTfSxHLnByb3RvdHlwZS5fcmVhZGRpckVudHJpZXM9ZnVuY3Rpb24oYixELEgpe2lmKCF0aGlzLmFib3J0ZWQpe2lmKCF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpZm9yKHZhciBOPTA7TjxELmxlbmd0aDtOKyspe3ZhciBnPURbTl07dGhpcy5jYWNoZVtnPSIvIj09PWI/YitnOmIrIi8i'@;
put 'K2ddPSEwfXJldHVybiB0aGlzLmNhY2hlW2JdPUQsSChudWxsLEQpfX0sRy5wcm90b3R5cGUuX3JlYWRkaXJFcnJvcj1mdW5jdGlvbihiLEQsSCl7aWYoIXRoaXMuYWJvcnRlZCl7c3dpdGNoKEQuY29kZSl7Y2FzZSJFTk9UU1VQIjpjYXNlIkVOT1RESVIiOnZhciBOPXRoaXMuX21ha2VBYnMo'@;
put 'Yik7aWYodGhpcy5jYWNoZVtOXT0iRklMRSIsTj09PXRoaXMuY3dkQWJzKXt2YXIgZz1uZXcgRXJyb3IoRC5jb2RlKyIgaW52YWxpZCBjd2QgIit0aGlzLmN3ZCk7Zy5wYXRoPXRoaXMuY3dkLGcuY29kZT1ELmNvZGUsdGhpcy5lbWl0KCJlcnJvciIsZyksdGhpcy5hYm9ydCgpfWJyZWFrO2Nh'@;
put 'c2UiRU5PRU5UIjpjYXNlIkVMT09QIjpjYXNlIkVOQU1FVE9PTE9ORyI6Y2FzZSJVTktOT1dOIjp0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMoYildPSExO2JyZWFrO2RlZmF1bHQ6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKGIpXT0hMSx0aGlzLnN0cmljdCYmKHRoaXMuZW1pdCgiZXJyb3Ii'@;
put 'LEQpLHRoaXMuYWJvcnQoKSksdGhpcy5zaWxlbnR8fEsuZXJyb3IoImdsb2IgZXJyb3IiLEQpfXJldHVybiBIKCl9fSxHLnByb3RvdHlwZS5fcHJvY2Vzc0dsb2JTdGFyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMpe3ZhciB2PXRoaXM7dGhpcy5fcmVhZGRpcihILEMsZnVuY3Rpb24ocCx3KXt2'@;
put 'Ll9wcm9jZXNzR2xvYlN0YXIyKGIsRCxILE4sZyxDLHcsUyl9KX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NHbG9iU3RhcjI9ZnVuY3Rpb24oYixELEgsTixnLEMsUyx2KXtpZighUylyZXR1cm4gdigpO3ZhciBwPU4uc2xpY2UoMSksdz1iP1tiXTpbXSxKPXcuY29uY2F0KHApO3RoaXMuX3Byb2Nl'@;
put 'c3MoSixnLCExLHYpO3ZhciBkZT1TLmxlbmd0aDtpZih0aGlzLnN5bWxpbmtzW0hdJiZDKXJldHVybiB2KCk7Zm9yKHZhciBmZT0wO2ZlPGRlO2ZlKyspaWYoIi4iIT09U1tmZV0uY2hhckF0KDApfHx0aGlzLmRvdCl7dmFyIHhlPXcuY29uY2F0KFNbZmVdLHApO3RoaXMuX3Byb2Nlc3MoeGUs'@;
put 'ZywhMCx2KTt2YXIgTGU9dy5jb25jYXQoU1tmZV0sTik7dGhpcy5fcHJvY2VzcyhMZSxnLCEwLHYpfXYoKX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NTaW1wbGU9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXM7dGhpcy5fc3RhdChiLGZ1bmN0aW9uKGcsQyl7Ti5fcHJvY2Vzc1NpbXBsZTIoYixE'@;
put 'LGcsQyxIKX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vzc1NpbXBsZTI9ZnVuY3Rpb24oYixELEgsTixnKXtpZih0aGlzLm1hdGNoZXNbRF18fCh0aGlzLm1hdGNoZXNbRF09T2JqZWN0LmNyZWF0ZShudWxsKSksIU4pcmV0dXJuIGcoKTtpZihiJiZZKGIpJiYhdGhpcy5ub21vdW50KXt2YXIgQz0v'@;
put 'W1wvXFxdJC8udGVzdChiKTsiLyI9PT1iLmNoYXJBdCgwKT9iPVYuam9pbih0aGlzLnJvb3QsYik6KGI9Vi5yZXNvbHZlKHRoaXMucm9vdCxiKSxDJiYoYis9Ii8iKSl9IndpbjMyIj09PXoucGxhdGZvcm0mJihiPWIucmVwbGFjZSgvXFwvZywiLyIpKSx0aGlzLl9lbWl0TWF0Y2goRCxiKSxn'@;
put 'KCl9LEcucHJvdG90eXBlLl9zdGF0PWZ1bmN0aW9uKGIsRCl7dmFyIEg9dGhpcy5fbWFrZUFicyhiKSxOPSIvIj09PWIuc2xpY2UoLTEpO2lmKGIubGVuZ3RoPnRoaXMubWF4TGVuZ3RoKXJldHVybiBEKCk7aWYoIXRoaXMuc3RhdCYmZWUodGhpcy5jYWNoZSxIKSl7dmFyIGc9dGhpcy5jYWNo'@;
put 'ZVtIXTtpZihBcnJheS5pc0FycmF5KGcpJiYoZz0iRElSIiksIU58fCJESVIiPT09ZylyZXR1cm4gRChudWxsLGcpO2lmKE4mJiJGSUxFIj09PWcpcmV0dXJuIEQoKX12YXIgQz10aGlzLnN0YXRDYWNoZVtIXTtpZih2b2lkIDAhPT1DKXtpZighMT09PUMpcmV0dXJuIEQobnVsbCxDKTt2YXIg'@;
put 'Uz1DLmlzRGlyZWN0b3J5KCk/IkRJUiI6IkZJTEUiO3JldHVybiBOJiYiRklMRSI9PT1TP0QoKTpEKG51bGwsUyxDKX12YXIgdj10aGlzLHA9dGUoInN0YXRcMCIrSCxmdW5jdGlvbih3LEope2lmKEomJkouaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gdi5mcy5zdGF0KEgsZnVuY3Rpb24obmUs'@;
put 'ZGUpe25lP3YuX3N0YXQyKGIsSCxudWxsLEosRCk6di5fc3RhdDIoYixILG5lLGRlLEQpfSk7di5fc3RhdDIoYixILHcsSixEKX0pO3AmJnYuZnMubHN0YXQoSCxwKX0sRy5wcm90b3R5cGUuX3N0YXQyPWZ1bmN0aW9uKGIsRCxILE4sZyl7aWYoSCYmKCJFTk9FTlQiPT09SC5jb2RlfHwiRU5P'@;
put 'VERJUiI9PT1ILmNvZGUpKXJldHVybiB0aGlzLnN0YXRDYWNoZVtEXT0hMSxnKCk7dmFyIEM9Ii8iPT09Yi5zbGljZSgtMSk7aWYodGhpcy5zdGF0Q2FjaGVbRF09TiwiLyI9PT1ELnNsaWNlKC0xKSYmTiYmIU4uaXNEaXJlY3RvcnkoKSlyZXR1cm4gZyhudWxsLCExLE4pO3ZhciBTPSEwO3Jl'@;
put 'dHVybiBOJiYoUz1OLmlzRGlyZWN0b3J5KCk/IkRJUiI6IkZJTEUiKSx0aGlzLmNhY2hlW0RdPXRoaXMuY2FjaGVbRF18fFMsQyYmIkZJTEUiPT09Uz9nKCk6ZyhudWxsLFMsTil9fSw0NzUxOihNLE8sUik9Pnt2YXIgej1SKDUxMDgpLEs9Uig0MTU1KTtNLmV4cG9ydHM9ZWUsZWUuR2xvYlN5'@;
put 'bmM9dGU7dmFyIEk9Uig3MzM0KSxrPVIoMTE3MSksRT0oUigyODg0KSxSKDk1MzkpLFIoMjUyMCkpLGo9Uig5MjgyKSxWPVIoNDA5NSksQj1SKDY3NzIpLFk9Qi5zZXRvcHRzLFg9Qi5vd25Qcm9wLFU9Qi5jaGlsZHJlbklnbm9yZWQscT1CLmlzSWdub3JlZDtmdW5jdGlvbiBlZShvZSxzZSl7'@;
put 'aWYoImZ1bmN0aW9uIj09dHlwZW9mIHNlfHwzPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2JcblNlZTogaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzE2NyIpO3JldHVybiBuZXcg'@;
put 'dGUob2Usc2UpLmZvdW5kfWZ1bmN0aW9uIHRlKG9lLHNlKXtpZighb2UpdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgcGF0dGVybiIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZXx8Mz09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlk'@;
put 'ZWQgdG8gc3luYyBnbG9iXG5TZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1nbG9iL2lzc3Vlcy8xNjciKTtpZighKHRoaXMgaW5zdGFuY2VvZiB0ZSkpcmV0dXJuIG5ldyB0ZShvZSxzZSk7aWYoWSh0aGlzLG9lLHNlKSx0aGlzLm5vcHJvY2VzcylyZXR1cm4gdGhpczt2YXIg'@;
put 'aGU9dGhpcy5taW5pbWF0Y2guc2V0Lmxlbmd0aDt0aGlzLm1hdGNoZXM9bmV3IEFycmF5KGhlKTtmb3IodmFyIHVlPTA7dWU8aGU7dWUrKyl0aGlzLl9wcm9jZXNzKHRoaXMubWluaW1hdGNoLnNldFt1ZV0sdWUsITEpO3RoaXMuX2ZpbmlzaCgpfXRlLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0'@;
put 'aW9uKCl7aWYoai5vayh0aGlzIGluc3RhbmNlb2YgdGUpLHRoaXMucmVhbHBhdGgpe3ZhciBvZT10aGlzO3RoaXMubWF0Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uKHNlLGhlKXt2YXIgdWU9b2UubWF0Y2hlc1toZV09T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIGNlIGluIHNlKXRyeXtjZT1v'@;
put 'ZS5fbWFrZUFicyhjZSksdWVbSS5yZWFscGF0aFN5bmMoY2Usb2UucmVhbHBhdGhDYWNoZSldPSEwfWNhdGNoKEcpe2lmKCJzdGF0IiE9PUcuc3lzY2FsbCl0aHJvdyBHO3VlW29lLl9tYWtlQWJzKGNlKV09ITB9fSl9Qi5maW5pc2godGhpcyl9LHRlLnByb3RvdHlwZS5fcHJvY2Vzcz1mdW5j'@;
put 'dGlvbihvZSxzZSxoZSl7ai5vayh0aGlzIGluc3RhbmNlb2YgdGUpO2Zvcih2YXIgdWUsY2U9MDsic3RyaW5nIj09dHlwZW9mIG9lW2NlXTspY2UrKztzd2l0Y2goY2Upe2Nhc2Ugb2UubGVuZ3RoOnJldHVybiB2b2lkIHRoaXMuX3Byb2Nlc3NTaW1wbGUob2Uuam9pbigiLyIpLHNlKTtjYXNl'@;
put 'IDA6dWU9bnVsbDticmVhaztkZWZhdWx0OnVlPW9lLnNsaWNlKDAsY2UpLmpvaW4oIi8iKX12YXIgRyxiPW9lLnNsaWNlKGNlKTtudWxsPT09dWU/Rz0iLiI6KChWKHVlKXx8VihvZS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBIP0g6IlsqXSJ9KS5qb2luKCIvIikp'@;
put 'KSYmKHVlJiZWKHVlKXx8KHVlPSIvIit1ZSkpLEc9dWUpO3ZhciBEPXRoaXMuX21ha2VBYnMoRyk7VSh0aGlzLEcpfHwoYlswXT09PWsuR0xPQlNUQVI/dGhpcy5fcHJvY2Vzc0dsb2JTdGFyKHVlLEcsRCxiLHNlLGhlKTp0aGlzLl9wcm9jZXNzUmVhZGRpcih1ZSxHLEQsYixzZSxoZSkpfSx0'@;
put 'ZS5wcm90b3R5cGUuX3Byb2Nlc3NSZWFkZGlyPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3ZhciBiPXRoaXMuX3JlYWRkaXIoaGUsRyk7aWYoYil7Zm9yKHZhciBEPXVlWzBdLEg9ISF0aGlzLm1pbmltYXRjaC5uZWdhdGUsZz10aGlzLmRvdHx8Ii4iPT09RC5fZ2xvYi5jaGFyQXQoMCks'@;
put 'Qz1bXSxTPTA7UzxiLmxlbmd0aDtTKyspKCIuIiE9PSh3PWJbU10pLmNoYXJBdCgwKXx8ZykmJihIJiYhb2U/IXcubWF0Y2goRCk6dy5tYXRjaChEKSkmJkMucHVzaCh3KTt2YXIgdj1DLmxlbmd0aDtpZigwIT09dilpZigxIT09dWUubGVuZ3RofHx0aGlzLm1hcmt8fHRoaXMuc3RhdClmb3Io'@;
put 'dWUuc2hpZnQoKSxTPTA7Uzx2O1MrKyl3PUNbU10sdGhpcy5fcHJvY2Vzcygob2U/W29lLHddOlt3XSkuY29uY2F0KHVlKSxjZSxHKTtlbHNlIGZvcih0aGlzLm1hdGNoZXNbY2VdfHwodGhpcy5tYXRjaGVzW2NlXT1PYmplY3QuY3JlYXRlKG51bGwpKSxTPTA7Uzx2O1MrKyl7dmFyIHc9Q1tT'@;
put 'XTtvZSYmKHc9Ii8iIT09b2Uuc2xpY2UoLTEpP29lKyIvIit3Om9lK3cpLCIvIiE9PXcuY2hhckF0KDApfHx0aGlzLm5vbW91bnR8fCh3PUUuam9pbih0aGlzLnJvb3QsdykpLHRoaXMuX2VtaXRNYXRjaChjZSx3KX19fSx0ZS5wcm90b3R5cGUuX2VtaXRNYXRjaD1mdW5jdGlvbihvZSxzZSl7'@;
put 'aWYoIXEodGhpcyxzZSkpe3ZhciBoZT10aGlzLl9tYWtlQWJzKHNlKTtpZih0aGlzLm1hcmsmJihzZT10aGlzLl9tYXJrKHNlKSksdGhpcy5hYnNvbHV0ZSYmKHNlPWhlKSwhdGhpcy5tYXRjaGVzW29lXVtzZV0pe2lmKHRoaXMubm9kaXIpe3ZhciB1ZT10aGlzLmNhY2hlW2hlXTtpZigiRElS'@;
put 'Ij09PXVlfHxBcnJheS5pc0FycmF5KHVlKSlyZXR1cm59dGhpcy5tYXRjaGVzW29lXVtzZV09ITAsdGhpcy5zdGF0JiZ0aGlzLl9zdGF0KHNlKX19fSx0ZS5wcm90b3R5cGUuX3JlYWRkaXJJbkdsb2JTdGFyPWZ1bmN0aW9uKG9lKXtpZih0aGlzLmZvbGxvdylyZXR1cm4gdGhpcy5fcmVhZGRp'@;
put 'cihvZSwhMSk7dmFyIHNlLGhlO3RyeXtoZT10aGlzLmZzLmxzdGF0U3luYyhvZSl9Y2F0Y2goY2Upe2lmKCJFTk9FTlQiPT09Y2UuY29kZSlyZXR1cm4gbnVsbH12YXIgdWU9aGUmJmhlLmlzU3ltYm9saWNMaW5rKCk7cmV0dXJuIHRoaXMuc3ltbGlua3Nbb2VdPXVlLHVlfHwhaGV8fGhlLmlz'@;
put 'RGlyZWN0b3J5KCk/c2U9dGhpcy5fcmVhZGRpcihvZSwhMSk6dGhpcy5jYWNoZVtvZV09IkZJTEUiLHNlfSx0ZS5wcm90b3R5cGUuX3JlYWRkaXI9ZnVuY3Rpb24ob2Usc2Upe2lmKHNlJiYhWCh0aGlzLnN5bWxpbmtzLG9lKSlyZXR1cm4gdGhpcy5fcmVhZGRpckluR2xvYlN0YXIob2UpO2lm'@;
put 'KFgodGhpcy5jYWNoZSxvZSkpe3ZhciBoZT10aGlzLmNhY2hlW29lXTtpZighaGV8fCJGSUxFIj09PWhlKXJldHVybiBudWxsO2lmKEFycmF5LmlzQXJyYXkoaGUpKXJldHVybiBoZX10cnl7cmV0dXJuIHRoaXMuX3JlYWRkaXJFbnRyaWVzKG9lLHRoaXMuZnMucmVhZGRpclN5bmMob2UpKX1j'@;
put 'YXRjaCh1ZSl7cmV0dXJuIHRoaXMuX3JlYWRkaXJFcnJvcihvZSx1ZSksbnVsbH19LHRlLnByb3RvdHlwZS5fcmVhZGRpckVudHJpZXM9ZnVuY3Rpb24ob2Usc2Upe2lmKCF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpZm9yKHZhciBoZT0wO2hlPHNlLmxlbmd0aDtoZSsrKXt2YXIgdWU9c2VbaGVd'@;
put 'O3RoaXMuY2FjaGVbdWU9Ii8iPT09b2U/b2UrdWU6b2UrIi8iK3VlXT0hMH1yZXR1cm4gdGhpcy5jYWNoZVtvZV09c2Usc2V9LHRlLnByb3RvdHlwZS5fcmVhZGRpckVycm9yPWZ1bmN0aW9uKG9lLHNlKXtzd2l0Y2goc2UuY29kZSl7Y2FzZSJFTk9UU1VQIjpjYXNlIkVOT1RESVIiOnZhciBo'@;
put 'ZT10aGlzLl9tYWtlQWJzKG9lKTtpZih0aGlzLmNhY2hlW2hlXT0iRklMRSIsaGU9PT10aGlzLmN3ZEFicyl7dmFyIHVlPW5ldyBFcnJvcihzZS5jb2RlKyIgaW52YWxpZCBjd2QgIit0aGlzLmN3ZCk7dGhyb3cgdWUucGF0aD10aGlzLmN3ZCx1ZS5jb2RlPXNlLmNvZGUsdWV9YnJlYWs7Y2Fz'@;
put 'ZSJFTk9FTlQiOmNhc2UiRUxPT1AiOmNhc2UiRU5BTUVUT09MT05HIjpjYXNlIlVOS05PV04iOnRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhvZSldPSExO2JyZWFrO2RlZmF1bHQ6aWYodGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKG9lKV09ITEsdGhpcy5zdHJpY3QpdGhyb3cgc2U7dGhpcy5z'@;
put 'aWxlbnR8fHouZXJyb3IoImdsb2IgZXJyb3IiLHNlKX19LHRlLnByb3RvdHlwZS5fcHJvY2Vzc0dsb2JTdGFyPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3ZhciBiPXRoaXMuX3JlYWRkaXIoaGUsRyk7aWYoYil7dmFyIEQ9dWUuc2xpY2UoMSksSD1vZT9bb2VdOltdLE49SC5jb25jYXQo'@;
put 'RCk7dGhpcy5fcHJvY2VzcyhOLGNlLCExKTt2YXIgZz1iLmxlbmd0aDtpZighdGhpcy5zeW1saW5rc1toZV18fCFHKWZvcih2YXIgQz0wO0M8ZztDKyspaWYoIi4iIT09YltDXS5jaGFyQXQoMCl8fHRoaXMuZG90KXt2YXIgUz1ILmNvbmNhdChiW0NdLEQpO3RoaXMuX3Byb2Nlc3MoUyxjZSwh'@;
put 'MCk7dmFyIHY9SC5jb25jYXQoYltDXSx1ZSk7dGhpcy5fcHJvY2Vzcyh2LGNlLCEwKX19fSx0ZS5wcm90b3R5cGUuX3Byb2Nlc3NTaW1wbGU9ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZT10aGlzLl9zdGF0KG9lKTtpZih0aGlzLm1hdGNoZXNbc2VdfHwodGhpcy5tYXRjaGVzW3NlXT1PYmplY3Qu'@;
put 'Y3JlYXRlKG51bGwpKSxoZSl7aWYob2UmJlYob2UpJiYhdGhpcy5ub21vdW50KXt2YXIgdWU9L1tcL1xcXSQvLnRlc3Qob2UpOyIvIj09PW9lLmNoYXJBdCgwKT9vZT1FLmpvaW4odGhpcy5yb290LG9lKToob2U9RS5yZXNvbHZlKHRoaXMucm9vdCxvZSksdWUmJihvZSs9Ii8iKSl9IndpbjMy'@;
put 'Ij09PUsucGxhdGZvcm0mJihvZT1vZS5yZXBsYWNlKC9cXC9nLCIvIikpLHRoaXMuX2VtaXRNYXRjaChzZSxvZSl9fSx0ZS5wcm90b3R5cGUuX3N0YXQ9ZnVuY3Rpb24ob2Upe3ZhciBzZT10aGlzLl9tYWtlQWJzKG9lKSxoZT0iLyI9PT1vZS5zbGljZSgtMSk7aWYob2UubGVuZ3RoPnRoaXMu'@;
put 'bWF4TGVuZ3RoKXJldHVybiExO2lmKCF0aGlzLnN0YXQmJlgodGhpcy5jYWNoZSxzZSkpe3ZhciB1ZT10aGlzLmNhY2hlW3NlXTtpZihBcnJheS5pc0FycmF5KHVlKSYmKHVlPSJESVIiKSwhaGV8fCJESVIiPT09dWUpcmV0dXJuIHVlO2lmKGhlJiYiRklMRSI9PT11ZSlyZXR1cm4hMX12YXIg'@;
put 'Y2U9dGhpcy5zdGF0Q2FjaGVbc2VdO2lmKCFjZSl7dmFyIEc7dHJ5e0c9dGhpcy5mcy5sc3RhdFN5bmMoc2UpfWNhdGNoKGIpe2lmKGImJigiRU5PRU5UIj09PWIuY29kZXx8IkVOT1RESVIiPT09Yi5jb2RlKSlyZXR1cm4gdGhpcy5zdGF0Q2FjaGVbc2VdPSExLCExfWlmKEcmJkcuaXNTeW1i'@;
put 'b2xpY0xpbmsoKSl0cnl7Y2U9dGhpcy5mcy5zdGF0U3luYyhzZSl9Y2F0Y2h7Y2U9R31lbHNlIGNlPUd9cmV0dXJuIHRoaXMuc3RhdENhY2hlW3NlXT1jZSx1ZT0hMCxjZSYmKHVlPWNlLmlzRGlyZWN0b3J5KCk/IkRJUiI6IkZJTEUiKSx0aGlzLmNhY2hlW3NlXT10aGlzLmNhY2hlW3NlXXx8'@;
put 'dWUsKCFoZXx8IkZJTEUiIT09dWUpJiZ1ZX0sdGUucHJvdG90eXBlLl9tYXJrPWZ1bmN0aW9uKG9lKXtyZXR1cm4gQi5tYXJrKHRoaXMsb2UpfSx0ZS5wcm90b3R5cGUuX21ha2VBYnM9ZnVuY3Rpb24ob2Upe3JldHVybiBCLm1ha2VBYnModGhpcyxvZSl9fSw3Mjk2OihNLE8sUik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIHo9UigyMTApKCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiLCEwKTtpZih6KXRyeXt6KFtdLCJsZW5ndGgiKX1jYXRjaHt6PW51bGx9TS5leHBvcnRzPXp9LDY0NTg6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oUil7aWYobnVsbD09'@;
put 'PVJ8fCJvYmplY3QiIT10eXBlb2YgUilyZXR1cm4gUjtpZihSIGluc3RhbmNlb2YgT2JqZWN0KXZhciB6PXtfX3Byb3RvX186TyhSKX07ZWxzZSB6PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFIpLmZvckVhY2goZnVuY3Rpb24oSyl7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KHosSyxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFIsSykpfSksen07dmFyIE89T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihSKXtyZXR1cm4gUi5fX3Byb3RvX199fSw3NzooTSxPLFIpPT57dmFyIHosSyxJPVIoNDE1NSksaz1SKDUx'@;
put 'MDgpLEU9Uig1NDQzKSxqPVIoMjE2MSksVj1SKDg1MjApLEI9Uig2NDU4KSxZPVIoOTUzOSk7ZnVuY3Rpb24gWCh1ZSxjZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLHose2dldDpmdW5jdGlvbigpe3JldHVybiBjZX19KX0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgU3ltYm9sLmZvcj8oej1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5xdWV1ZSIpLEs9U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucHJldmlvdXMiKSk6KHo9Il9fX2dyYWNlZnVsLWZzLnF1ZXVlIixLPSJfX19ncmFjZWZ1bC1mcy5wcmV2aW91cyIpO3ZhciBVLHE9ZnVuY3Rpb24o'@;
put 'KXt9O2Z1bmN0aW9uIHRlKHVlKXtqKHVlKSx1ZS5ncmFjZWZ1bGlmeT10ZSx1ZS5jcmVhdGVSZWFkU3RyZWFtPWZ1bmN0aW9uKGZlLHhlKXtyZXR1cm4gbmV3IHVlLlJlYWRTdHJlYW0oZmUseGUpfSx1ZS5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbihmZSx4ZSl7cmV0dXJuIG5ldyB1ZS5X'@;
put 'cml0ZVN0cmVhbShmZSx4ZSl9O3ZhciBjZT11ZS5yZWFkRmlsZTt1ZS5yZWFkRmlsZT1mdW5jdGlvbihmZSx4ZSxMZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHhlJiYoTGU9eGUseGU9bnVsbCksZnVuY3Rpb24gRmUoT2UsamUsV2UsS2Upe3JldHVybiBjZShPZSxqZSxmdW5jdGlvbihZ'@;
put 'ZSl7IVllfHwiRU1GSUxFIiE9PVllLmNvZGUmJiJFTkZJTEUiIT09WWUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgV2UmJldlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbRmUsW09lLGplLFdlXSxZZSxLZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUpfTt2YXIgRz11'@;
put 'ZS53cml0ZUZpbGU7dWUud3JpdGVGaWxlPWZ1bmN0aW9uKGZlLHhlLExlLEZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTGUmJihGZT1MZSxMZT1udWxsKSxmdW5jdGlvbiBPZShqZSxXZSxLZSxZZSxRZSl7cmV0dXJuIEcoamUsV2UsS2UsZnVuY3Rpb24obHQpeyFsdHx8IkVNRklMRSIh'@;
put 'PT1sdC5jb2RlJiYiRU5GSUxFIiE9PWx0LmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIFllJiZZZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW09lLFtqZSxXZSxLZSxZZV0sbHQsUWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLExlLEZlKX07dmFyIGI9dWUuYXBwZW5kRmls'@;
put 'ZTtiJiYodWUuYXBwZW5kRmlsZT1mdW5jdGlvbihmZSx4ZSxMZSxGZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9bnVsbCksZnVuY3Rpb24gT2UoamUsV2UsS2UsWWUsUWUpe3JldHVybiBiKGplLFdlLEtlLGZ1bmN0aW9uKGx0KXshbHR8fCJFTUZJTEUiIT09bHQu'@;
put 'Y29kZSYmIkVORklMRSIhPT1sdC5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBZZSYmWWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOm9lKFtPZSxbamUsV2UsS2UsWWVdLGx0LFFlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShmZSx4ZSxMZSxGZSl9KTt2YXIgRD11ZS5jb3B5RmlsZTtEJiYo'@;
put 'dWUuY29weUZpbGU9ZnVuY3Rpb24oZmUseGUsTGUsRmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMZSYmKEZlPUxlLExlPTApLGZ1bmN0aW9uIE9lKGplLFdlLEtlLFllLFFlKXtyZXR1cm4gRChqZSxXZSxLZSxmdW5jdGlvbihsdCl7IWx0fHwiRU1GSUxFIiE9PWx0LmNvZGUmJiJFTkZJ'@;
put 'TEUiIT09bHQuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgWWUmJlllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbT2UsW2plLFdlLEtlLFllXSxsdCxRZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUsRmUpfSk7dmFyIEg9dWUucmVhZGRpcjt1ZS5yZWFkZGlyPWZ1bmN0'@;
put 'aW9uKGZlLHhlLExlKXsiZnVuY3Rpb24iPT10eXBlb2YgeGUmJihMZT14ZSx4ZT1udWxsKTt2YXIgRmU9Ti50ZXN0KEkudmVyc2lvbik/ZnVuY3Rpb24oamUsV2UsS2UsWWUpe3JldHVybiBIKGplLE9lKGplLFdlLEtlLFllKSl9OmZ1bmN0aW9uKGplLFdlLEtlLFllKXtyZXR1cm4gSChqZSxX'@;
put 'ZSxPZShqZSxXZSxLZSxZZSkpfTtyZXR1cm4gRmUoZmUseGUsTGUpO2Z1bmN0aW9uIE9lKGplLFdlLEtlLFllKXtyZXR1cm4gZnVuY3Rpb24oUWUsbHQpeyFRZXx8IkVNRklMRSIhPT1RZS5jb2RlJiYiRU5GSUxFIiE9PVFlLmNvZGU/KGx0JiZsdC5zb3J0JiZsdC5zb3J0KCksImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIEtlJiZLZS5jYWxsKHRoaXMsUWUsbHQpKTpvZShbRmUsW2plLFdlLEtlXSxRZSxZZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9fX07dmFyIE49L152WzAtNV1cLi87aWYoInYwLjgiPT09SS52ZXJzaW9uLnN1YnN0cigwLDQpKXt2YXIgZz1WKHVlKTt3PWcuUmVhZFN0cmVh'@;
put 'bSxKPWcuV3JpdGVTdHJlYW19dmFyIEM9dWUuUmVhZFN0cmVhbTtDJiYody5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDLnByb3RvdHlwZSksdy5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3ZhciBmZT10aGlzO2RlKGZlLnBhdGgsZmUuZmxhZ3MsZmUubW9kZSxmdW5jdGlvbih4ZSxMZSl7'@;
put 'eGU/KGZlLmF1dG9DbG9zZSYmZmUuZGVzdHJveSgpLGZlLmVtaXQoImVycm9yIix4ZSkpOihmZS5mZD1MZSxmZS5lbWl0KCJvcGVuIixMZSksZmUucmVhZCgpKX0pfSk7dmFyIFM9dWUuV3JpdGVTdHJlYW07UyYmKEoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLEoucHJv'@;
put 'dG90eXBlLm9wZW49ZnVuY3Rpb24oKXt2YXIgZmU9dGhpcztkZShmZS5wYXRoLGZlLmZsYWdzLGZlLm1vZGUsZnVuY3Rpb24oeGUsTGUpe3hlPyhmZS5kZXN0cm95KCksZmUuZW1pdCgiZXJyb3IiLHhlKSk6KGZlLmZkPUxlLGZlLmVtaXQoIm9wZW4iLExlKSl9KX0pLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eSh1ZSwiUmVhZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3fSxzZXQ6ZnVuY3Rpb24oZmUpe3c9ZmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLCJXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biBKfSxzZXQ6ZnVuY3Rpb24oZmUpe0o9ZmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIHY9dztPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9LHNldDpmdW5jdGlvbihmZSl7dj1mZX0sZW51bWVy'@;
put 'YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgcD1KO2Z1bmN0aW9uIHcoZmUseGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygdz8oQy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6dy5hcHBseShPYmplY3QuY3JlYXRlKHcucHJvdG90eXBlKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEoo'@;
put 'ZmUseGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgSj8oUy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6Si5hcHBseShPYmplY3QuY3JlYXRlKEoucHJvdG90eXBlKSxhcmd1bWVudHMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiRmlsZVdyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHB9LHNldDpmdW5jdGlvbihmZSl7cD1mZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgbmU9dWUub3BlbjtmdW5jdGlvbiBkZShmZSx4ZSxMZSxGZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9bnVsbCksZnVuY3Rpb24gT2Uo'@;
put 'amUsV2UsS2UsWWUsUWUpe3JldHVybiBuZShqZSxXZSxLZSxmdW5jdGlvbihsdCxQZSl7IWx0fHwiRU1GSUxFIiE9PWx0LmNvZGUmJiJFTkZJTEUiIT09bHQuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgWWUmJlllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbT2UsW2plLFdlLEtlLFllXSxs'@;
put 'dCxRZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUsRmUpfXJldHVybiB1ZS5vcGVuPWRlLHVlfWZ1bmN0aW9uIG9lKHVlKXtxKCJFTlFVRVVFIix1ZVswXS5uYW1lLHVlWzFdKSxFW3pdLnB1c2godWUpLGhlKCl9ZnVuY3Rpb24gc2UoKXtmb3IodmFyIHVlPURhdGUubm93'@;
put 'KCksY2U9MDtjZTxFW3pdLmxlbmd0aDsrK2NlKUVbel1bY2VdLmxlbmd0aD4yJiYoRVt6XVtjZV1bM109dWUsRVt6XVtjZV1bNF09dWUpO2hlKCl9ZnVuY3Rpb24gaGUoKXtpZihjbGVhclRpbWVvdXQoVSksVT12b2lkIDAsMCE9PUVbel0ubGVuZ3RoKXt2YXIgdWU9RVt6XS5zaGlmdCgpLGNl'@;
put 'PXVlWzBdLEc9dWVbMV0sYj11ZVsyXSxEPXVlWzNdLEg9dWVbNF07aWYodm9pZCAwPT09RClxKCJSRVRSWSIsY2UubmFtZSxHKSxjZS5hcHBseShudWxsLEcpO2Vsc2UgaWYoRGF0ZS5ub3coKS1EPj02ZTQpe3EoIlRJTUVPVVQiLGNlLm5hbWUsRyk7dmFyIE49Ry5wb3AoKTsiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgTiYmTi5jYWxsKG51bGwsYil9ZWxzZXt2YXIgZz1EYXRlLm5vdygpLUgsQz1NYXRoLm1heChILUQsMSk7Zz49TWF0aC5taW4oMS4yKkMsMTAwKT8ocSgiUkVUUlkiLGNlLm5hbWUsRyksY2UuYXBwbHkobnVsbCxHLmNvbmNhdChbRF0pKSk6RVt6XS5wdXNoKHVlKX12b2lkIDA9'@;
put 'PT1VJiYoVT1zZXRUaW1lb3V0KGhlLDApKX19WS5kZWJ1Z2xvZz9xPVkuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmKHE9ZnVuY3Rpb24oKXt2YXIgdWU9WS5mb3JtYXQuYXBwbHkoWSxhcmd1bWVudHMpO3VlPSJHRlM0OiAiK3VlLnNw'@;
put 'bGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiksay5lcnJvcih1ZSl9KSxFW3pdfHwoWChFLFIuZ1t6XXx8W10pLEUuY2xvc2U9ZnVuY3Rpb24odWUpe2Z1bmN0aW9uIGNlKEcsYil7cmV0dXJuIHVlLmNhbGwoRSxHLGZ1bmN0aW9uKEQpe0R8fHNlKCksImZ1bmN0aW9uIj09dHlwZW9mIGImJmIu'@;
put 'YXBwbHkodGhpcyxhcmd1bWVudHMpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZSxLLHt2YWx1ZTp1ZX0pLGNlfShFLmNsb3NlKSxFLmNsb3NlU3luYz1mdW5jdGlvbih1ZSl7ZnVuY3Rpb24gY2UoRyl7dWUuYXBwbHkoRSxhcmd1bWVudHMpLHNlKCl9cmV0dXJuIE9iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShjZSxLLHt2YWx1ZTp1ZX0pLGNlfShFLmNsb3NlU3luYyksL1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVHfHwiIikmJkkub24oImV4aXQiLGZ1bmN0aW9uKCl7cShFW3pdKSxSKDkyODIpLmVxdWFsKEVbel0ubGVuZ3RoLDApfSkpLFIuZ1t6XXx8WChSLmcs'@;
put 'RVt6XSksTS5leHBvcnRzPXRlKEIoRSkpLEkuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIJiYhRS5fX3BhdGNoZWQmJihNLmV4cG9ydHM9dGUoRSksRS5fX3BhdGNoZWQ9ITApfSw4NTIwOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9UigyODMwKS5TdHJlYW07TS5leHBvcnRz'@;
put 'PWZ1bmN0aW9uKEkpe3JldHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIGsoRSxqKXtpZighKHRoaXMgaW5zdGFuY2VvZiBrKSlyZXR1cm4gbmV3IGsoRSxqKTtLLmNhbGwodGhpcyk7dmFyIFY9dGhpczt0aGlzLnBhdGg9RSx0aGlzLmZkPW51bGwsdGhpcy5yZWFkYWJsZT0hMCx0aGlzLnBhdXNl'@;
put 'ZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixqPWp8fHt9O2Zvcih2YXIgQj1PYmplY3Qua2V5cyhqKSxZPTAsWD1CLmxlbmd0aDtZPFg7WSsrKXt2YXIgVT1CW1ldO3RoaXNbVV09altVXX1pZih0aGlzLmVuY29kaW5nJiZ0aGlzLnNldEVu'@;
put 'Y29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVuZD0xLzA7ZWxzZSBpZigibnVtYmVy'@;
put 'IiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51bGw9PT10aGlzLmZkP0kub3Blbih0'@;
put 'aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24ocSxlZSl7aWYocSlyZXR1cm4gVi5lbWl0KCJlcnJvciIscSksdm9pZChWLnJlYWRhYmxlPSExKTtWLmZkPWVlLFYuZW1pdCgib3BlbiIsZWUpLFYuX3JlYWQoKX0pOnoubmV4dFRpY2soZnVuY3Rpb24oKXtWLl9yZWFkKCl9'@;
put 'KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gayhFLGope2lmKCEodGhpcyBpbnN0YW5jZW9mIGspKXJldHVybiBuZXcgayhFLGopO0suY2FsbCh0aGlzKSx0aGlzLnBhdGg9RSx0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlzLmVuY29kaW5nPSJiaW5hcnki'@;
put 'LHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0ZW49MCxqPWp8fHt9O2Zvcih2YXIgVj1PYmplY3Qua2V5cyhqKSxCPTAsWT1WLmxlbmd0aDtCPFk7QisrKXt2YXIgWD1WW0JdO3RoaXNbWF09altYXX1pZih2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMu'@;
put 'c3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVldWU9W10sbnVsbD09PXRoaXMu'@;
put 'ZmQmJih0aGlzLl9vcGVuPUkub3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9UigzMjA4KSxJPXouY3dkLGs9bnVsbCxF'@;
put 'PXouZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNfHx6LnBsYXRmb3JtO3ouY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIGt8fChrPUkuY2FsbCh6KSksa307dHJ5e3ouY3dkKCl9Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiB6LmNoZGlyKXt2YXIgaj16LmNoZGlyO3ouY2hkaXI9ZnVuY3Rpb24o'@;
put 'Vil7az1udWxsLGouY2FsbCh6LFYpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZih6LmNoZGlyLGopfU0uZXhwb3J0cz1mdW5jdGlvbihWKXt2YXIgc2Usb2U7ZnVuY3Rpb24gQihzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSxjZSl7cmV0dXJuIHNl'@;
put 'LmNhbGwoVixoZSx1ZSxmdW5jdGlvbihHKXt0ZShHKSYmKEc9bnVsbCksY2UmJmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBZKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlKXt0cnl7cmV0dXJuIHNlLmNhbGwoVixoZSx1ZSl9Y2F0Y2goY2Upe2lmKCF0ZShjZSkp'@;
put 'dGhyb3cgY2V9fX1mdW5jdGlvbiBYKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlLGNlLEcpe3JldHVybiBzZS5jYWxsKFYsaGUsdWUsY2UsZnVuY3Rpb24oYil7dGUoYikmJihiPW51bGwpLEcmJkcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFUoc2Upe3JldHVybiBz'@;
put 'ZSYmZnVuY3Rpb24oaGUsdWUsY2Upe3RyeXtyZXR1cm4gc2UuY2FsbChWLGhlLHVlLGNlKX1jYXRjaChHKXtpZighdGUoRykpdGhyb3cgR319fWZ1bmN0aW9uIHEoc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUsY2Upe2Z1bmN0aW9uIEcoYixEKXtEJiYoRC51aWQ8MCYmKEQudWlkKz00'@;
put 'Mjk0OTY3Mjk2KSxELmdpZDwwJiYoRC5naWQrPTQyOTQ5NjcyOTYpKSxjZSYmY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB1ZSYmKGNlPXVlLHVlPW51bGwpLHVlP3NlLmNhbGwoVixoZSx1ZSxHKTpzZS5jYWxsKFYsaGUsRyl9fWZ1bmN0aW9uIGVl'@;
put 'KHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlKXt2YXIgY2U9dWU/c2UuY2FsbChWLGhlLHVlKTpzZS5jYWxsKFYsaGUpO3JldHVybiBjZSYmKGNlLnVpZDwwJiYoY2UudWlkKz00Mjk0OTY3Mjk2KSxjZS5naWQ8MCYmKGNlLmdpZCs9NDI5NDk2NzI5NikpLGNlfX1mdW5jdGlvbiB0ZShz'@;
put 'ZSl7cmV0dXJuIXNlfHwiRU5PU1lTIj09PXNlLmNvZGV8fCEoei5nZXR1aWQmJjA9PT16LmdldHVpZCgpfHwiRUlOVkFMIiE9PXNlLmNvZGUmJiJFUEVSTSIhPT1zZS5jb2RlKX1LLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmei52ZXJzaW9uLm1hdGNoKC9edjBcLjZcLlswLTJdfF52'@;
put 'MFwuNVwuLykmJigoc2U9VikubGNobW9kPWZ1bmN0aW9uKGhlLHVlLGNlKXtzZS5vcGVuKGhlLEsuT19XUk9OTFl8Sy5PX1NZTUxJTkssdWUsZnVuY3Rpb24oRyxiKXtHP2NlJiZjZShHKTpzZS5mY2htb2QoYix1ZSxmdW5jdGlvbihEKXtzZS5jbG9zZShiLGZ1bmN0aW9uKEgpe2NlJiZjZShE'@;
put 'fHxIKX0pfSl9KX0sc2UubGNobW9kU3luYz1mdW5jdGlvbihoZSx1ZSl7dmFyIGNlLEc9c2Uub3BlblN5bmMoaGUsSy5PX1dST05MWXxLLk9fU1lNTElOSyx1ZSksYj0hMDt0cnl7Y2U9c2UuZmNobW9kU3luYyhHLHVlKSxiPSExfWZpbmFsbHl7aWYoYil0cnl7c2UuY2xvc2VTeW5jKEcpfWNh'@;
put 'dGNoe31lbHNlIHNlLmNsb3NlU3luYyhHKX1yZXR1cm4gY2V9KSxWLmx1dGltZXN8fGZ1bmN0aW9uKHNlKXtLLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmc2UuZnV0aW1lcz8oc2UubHV0aW1lcz1mdW5jdGlvbihoZSx1ZSxjZSxHKXtzZS5vcGVuKGhlLEsuT19TWU1MSU5LLGZ1bmN0'@;
put 'aW9uKGIsRCl7Yj9HJiZHKGIpOnNlLmZ1dGltZXMoRCx1ZSxjZSxmdW5jdGlvbihIKXtzZS5jbG9zZShELGZ1bmN0aW9uKE4pe0cmJkcoSHx8Til9KX0pfSl9LHNlLmx1dGltZXNTeW5jPWZ1bmN0aW9uKGhlLHVlLGNlKXt2YXIgRyxiPXNlLm9wZW5TeW5jKGhlLEsuT19TWU1MSU5LKSxEPSEw'@;
put 'O3RyeXtHPXNlLmZ1dGltZXNTeW5jKGIsdWUsY2UpLEQ9ITF9ZmluYWxseXtpZihEKXRyeXtzZS5jbG9zZVN5bmMoYil9Y2F0Y2h7fWVsc2Ugc2UuY2xvc2VTeW5jKGIpfXJldHVybiBHfSk6c2UuZnV0aW1lcyYmKHNlLmx1dGltZXM9ZnVuY3Rpb24oaGUsdWUsY2UsRyl7RyYmei5uZXh0VGlj'@;
put 'ayhHKX0sc2UubHV0aW1lc1N5bmM9ZnVuY3Rpb24oKXt9KX0oViksVi5jaG93bj1YKFYuY2hvd24pLFYuZmNob3duPVgoVi5mY2hvd24pLFYubGNob3duPVgoVi5sY2hvd24pLFYuY2htb2Q9QihWLmNobW9kKSxWLmZjaG1vZD1CKFYuZmNobW9kKSxWLmxjaG1vZD1CKFYubGNobW9kKSxWLmNo'@;
put 'b3duU3luYz1VKFYuY2hvd25TeW5jKSxWLmZjaG93blN5bmM9VShWLmZjaG93blN5bmMpLFYubGNob3duU3luYz1VKFYubGNob3duU3luYyksVi5jaG1vZFN5bmM9WShWLmNobW9kU3luYyksVi5mY2htb2RTeW5jPVkoVi5mY2htb2RTeW5jKSxWLmxjaG1vZFN5bmM9WShWLmxjaG1vZFN5bmMp'@;
put 'LFYuc3RhdD1xKFYuc3RhdCksVi5mc3RhdD1xKFYuZnN0YXQpLFYubHN0YXQ9cShWLmxzdGF0KSxWLnN0YXRTeW5jPWVlKFYuc3RhdFN5bmMpLFYuZnN0YXRTeW5jPWVlKFYuZnN0YXRTeW5jKSxWLmxzdGF0U3luYz1lZShWLmxzdGF0U3luYyksVi5jaG1vZCYmIVYubGNobW9kJiYoVi5sY2ht'@;
put 'b2Q9ZnVuY3Rpb24oc2UsaGUsdWUpe3VlJiZ6Lm5leHRUaWNrKHVlKX0sVi5sY2htb2RTeW5jPWZ1bmN0aW9uKCl7fSksVi5jaG93biYmIVYubGNob3duJiYoVi5sY2hvd249ZnVuY3Rpb24oc2UsaGUsdWUsY2Upe2NlJiZ6Lm5leHRUaWNrKGNlKX0sVi5sY2hvd25TeW5jPWZ1bmN0aW9uKCl7'@;
put 'fSksIndpbjMyIj09PUUmJihWLnJlbmFtZT0iZnVuY3Rpb24iIT10eXBlb2YgVi5yZW5hbWU/Vi5yZW5hbWU6ZnVuY3Rpb24oc2Upe2Z1bmN0aW9uIGhlKHVlLGNlLEcpe3ZhciBiPURhdGUubm93KCksRD0wO3NlKHVlLGNlLGZ1bmN0aW9uIEgoTil7aWYoTiYmKCJFQUNDRVMiPT09Ti5jb2Rl'@;
put 'fHwiRVBFUk0iPT09Ti5jb2RlKSYmRGF0ZS5ub3coKS1iPDZlNClyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1Yuc3RhdChjZSxmdW5jdGlvbihnLEMpe2cmJiJFTk9FTlQiPT09Zy5jb2RlP3NlKHVlLGNlLEgpOkcoTil9KX0sRCksdm9pZChEPDEwMCYmKEQrPTEwKSk7RyYmRyhOKX0p'@;
put 'fXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihoZSxzZSksaGV9KFYucmVuYW1lKSksVi5yZWFkPSJmdW5jdGlvbiIhPXR5cGVvZiBWLnJlYWQ/Vi5yZWFkOmZ1bmN0aW9uKHNlKXtmdW5jdGlvbiBoZSh1ZSxjZSxHLGIsRCxIKXt2YXIgTjtpZihI'@;
put 'JiYiZnVuY3Rpb24iPT10eXBlb2YgSCl7dmFyIGc9MDtOPWZ1bmN0aW9uKEMsUyx2KXtpZihDJiYiRUFHQUlOIj09PUMuY29kZSYmZzwxMClyZXR1cm4gZysrLHNlLmNhbGwoVix1ZSxjZSxHLGIsRCxOKTtILmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIHNlLmNhbGwoVix1ZSxjZSxH'@;
put 'LGIsRCxOKX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoaGUsc2UpLGhlfShWLnJlYWQpLFYucmVhZFN5bmM9ImZ1bmN0aW9uIiE9dHlwZW9mIFYucmVhZFN5bmM/Vi5yZWFkU3luYzoob2U9Vi5yZWFkU3luYyxmdW5jdGlvbihzZSxoZSx1ZSxj'@;
put 'ZSxHKXtmb3IodmFyIGI9MDs7KXRyeXtyZXR1cm4gb2UuY2FsbChWLHNlLGhlLHVlLGNlLEcpfWNhdGNoKEQpe2lmKCJFQUdBSU4iPT09RC5jb2RlJiZiPDEwKXtiKys7Y29udGludWV9dGhyb3cgRH19KX19LDEwNDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDIxMCkoIiVPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHklIiwhMCksSz1mdW5jdGlvbigpe2lmKHopdHJ5e3JldHVybiB6KHt9LCJhIix7dmFsdWU6MX0pLCEwfWNhdGNoe3JldHVybiExfXJldHVybiExfTtLLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIUsoKSlyZXR1cm4gbnVsbDt0cnl7cmV0'@;
put 'dXJuIDEhPT16KFtdLCJsZW5ndGgiLHt2YWx1ZToxfSkubGVuZ3RofWNhdGNoe3JldHVybiEwfX0sTS5leHBvcnRzPUt9LDE0MDU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLEs9Uig1NDE5KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4iZnVuY3Rpb24iPT10eXBlb2YgeiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiB6KCJmb28iKSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImJhciIpJiZLKCl9fSw1NDE5Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1'@;
put 'bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIE89e30sUj1TeW1ib2woInRlc3QiKSx6PU9iamVjdChSKTtp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIFJ8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFIpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh6KSlyZXR1cm4hMTtmb3IoUiBpbiBPW1JdPTQyLE8pcmV0dXJu'@;
put 'ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5rZXlzJiYwIT09T2JqZWN0LmtleXMoTykubGVuZ3RofHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJjAhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKS5sZW5ndGgpcmV0dXJuITE7dmFy'@;
put 'IEs9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKTtpZigxIT09Sy5sZW5ndGh8fEtbMF0hPT1SfHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKE8sUikpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl'@;
put 'c2NyaXB0b3Ipe3ZhciBJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTyxSKTtpZig0MiE9PUkudmFsdWV8fCEwIT09SS5lbnVtZXJhYmxlKXJldHVybiExfXJldHVybiEwfX0sNjQxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTQxOSk7TS5leHBvcnRzPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHooKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSw3NjQyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig4NjEyKTtNLmV4cG9ydHM9ei5jYWxsKEZ1bmN0aW9uLmNhbGwsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSl9LDMzNDk6KE0sTyxSKT0+eyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoODQ3MykuVHJhbnNmb3JtO2Z1bmN0aW9uIEkoayl7Sy5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPXouYWxsb2NVbnNhZmUoayksdGhpcy5fYmxvY2tTaXplPWssdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCww'@;
put 'LDBdLHRoaXMuX2ZpbmFsaXplZD0hMX1SKDU3MTcpKEksSyksSS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihrLEUsail7dmFyIFY9bnVsbDt0cnl7dGhpcy51cGRhdGUoayxFKX1jYXRjaChCKXtWPUJ9aihWKX0sSS5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKGspe3ZhciBFPW51'@;
put 'bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChqKXtFPWp9ayhFKX0sSS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGssRSl7aWYoZnVuY3Rpb24oVSxxKXtpZighei5pc0J1ZmZlcihVKSYmInN0cmluZyIhPXR5cGVvZiBVKXRocm93IG5ldyBUeXBlRXJyb3IoIkRhdGEg'@;
put 'bXVzdCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlciIpfShrKSx0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt6LmlzQnVmZmVyKGspfHwoaz16LmZyb20oayxFKSk7Zm9yKHZhciBqPXRoaXMuX2Jsb2NrLFY9MDt0aGlzLl9ibG9ja09mZnNl'@;
put 'dCtrLmxlbmd0aC1WPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIEI9dGhpcy5fYmxvY2tPZmZzZXQ7Qjx0aGlzLl9ibG9ja1NpemU7KWpbQisrXT1rW1YrK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO1Y8ay5sZW5ndGg7KWpbdGhpcy5fYmxvY2tPZmZzZXQr'@;
put 'K109a1tWKytdO2Zvcih2YXIgWT0wLFg9OCprLmxlbmd0aDtYPjA7KytZKXRoaXMuX2xlbmd0aFtZXSs9WCwoWD10aGlzLl9sZW5ndGhbWV0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW1ldLT00Mjk0OTY3Mjk2KlgpO3JldHVybiB0aGlzfSxJLnByb3RvdHlwZS5fdXBkYXRlPWZ1'@;
put 'bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxJLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oayl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7dGhpcy5fZmluYWxpemVkPSEw'@;
put 'O3ZhciBFPXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9PWsmJihFPUUudG9TdHJpbmcoaykpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIGo9MDtqPDQ7KytqKXRoaXMuX2xlbmd0aFtqXT0wO3JldHVybiBFfSxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0'@;
put 'aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxNLmV4cG9ydHM9SX0sMzcxNTooTSxPLFIpPT57dmFyIHo9Tzt6LnV0aWxzPVIoNjQzNiksei5jb21tb249Uig1NzcyKSx6LnNoYT1SKDkwNDEpLHoucmlwZW1kPVIoMjk0OSksei5obWFjPVIoMjM0'@;
put 'NCksei5zaGExPXouc2hhLnNoYTEsei5zaGEyNTY9ei5zaGEuc2hhMjU2LHouc2hhMjI0PXouc2hhLnNoYTIyNCx6LnNoYTM4ND16LnNoYS5zaGEzODQsei5zaGE1MTI9ei5zaGEuc2hhNTEyLHoucmlwZW1kMTYwPXoucmlwZW1kLnJpcGVtZDE2MH0sNTc3MjooTSxPLFIpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciB6PVIoNjQzNiksSz1SKDk3NDYpO2Z1bmN0aW9uIEkoKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5o'@;
put 'bWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMy'@;
put 'fU8uQmxvY2tIYXNoPUksSS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGssRSl7aWYoaz16LnRvQXJyYXkoayxFKSx0aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZy5jb25jYXQoayk6ayx0aGlzLnBlbmRpbmdUb3RhbCs9ay5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0'@;
put 'aD49dGhpcy5fZGVsdGE4KXt2YXIgaj0oaz10aGlzLnBlbmRpbmcpLmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPWsuc2xpY2Uoay5sZW5ndGgtaixrLmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksaz16LmpvaW4zMihrLDAsay5s'@;
put 'ZW5ndGgtaix0aGlzLmVuZGlhbik7Zm9yKHZhciBWPTA7VjxrLmxlbmd0aDtWKz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZShrLFYsVit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sSS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9w'@;
put 'YWQoKSksSyhudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3Qoayl9LEkucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnBlbmRpbmdUb3RhbCxFPXRoaXMuX2RlbHRhOCxqPUUtKGsrdGhpcy5wYWRMZW5ndGgpJUUsVj1uZXcgQXJyYXkoait0aGlzLnBhZExlbmd0'@;
put 'aCk7VlswXT0xMjg7Zm9yKHZhciBCPTE7QjxqO0IrKylWW0JdPTA7aWYoazw8PTMsImJpZyI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBZPTg7WTx0aGlzLnBhZExlbmd0aDtZKyspVltCKytdPTA7VltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPWs+Pj4yNCYyNTUs'@;
put 'VltCKytdPWs+Pj4xNiYyNTUsVltCKytdPWs+Pj44JjI1NSxWW0IrK109MjU1Jmt9ZWxzZSBmb3IoVltCKytdPTI1NSZrLFZbQisrXT1rPj4+OCYyNTUsVltCKytdPWs+Pj4xNiYyNTUsVltCKytdPWs+Pj4yNCYyNTUsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsWT04O1k8'@;
put 'dGhpcy5wYWRMZW5ndGg7WSsrKVZbQisrXT0wO3JldHVybiBWfX0sMjM0NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDk3NDYpO2Z1bmN0aW9uIEkoayxFLGope2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSShrLEUsaik7dGhpcy5IYXNoPWss'@;
put 'dGhpcy5ibG9ja1NpemU9ay5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9ay5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KHoudG9BcnJheShFLGopKX1NLmV4cG9ydHM9SSxJLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihrKXtrLmxlbmd0aD50'@;
put 'aGlzLmJsb2NrU2l6ZSYmKGs9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShrKS5kaWdlc3QoKSksSyhrLmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgRT1rLmxlbmd0aDtFPHRoaXMuYmxvY2tTaXplO0UrKylrLnB1c2goMCk7Zm9yKEU9MDtFPGsubGVuZ3RoO0UrKylrW0VdXj01NDtm'@;
put 'b3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGspLEU9MDtFPGsubGVuZ3RoO0UrKylrW0VdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGspfSxJLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUo'@;
put 'ayxFKSx0aGlzfSxJLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KGspfX0sMjk0OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDU3NzIpLEk9'@;
put 'ei5yb3RsMzIsaz16LnN1bTMyLEU9ei5zdW0zMl8zLGo9ei5zdW0zMl80LFY9Sy5CbG9ja0hhc2g7ZnVuY3Rpb24gQigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQjtWLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3'@;
put 'MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24gWShzZSxoZSx1ZSxjZSl7cmV0dXJuIHNlPD0xNT9oZV51ZV5jZTpzZTw9MzE/aGUmdWV8fmhlJmNlOnNlPD00Nz8oaGV8fnVlKV5jZTpzZTw9NjM/aGUmY2V8dWUmfmNlOmhlXih1ZXx+Y2UpfWZ1bmN0aW9u'@;
put 'IFgoc2Upe3JldHVybiBzZTw9MTU/MDpzZTw9MzE/MTUxODUwMDI0OTpzZTw9NDc/MTg1OTc3NTM5MzpzZTw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4fWZ1bmN0aW9uIFUoc2Upe3JldHVybiBzZTw9MTU/MTM1MjgyOTkyNjpzZTw9MzE/MTU0ODYwMzY4NDpzZTw9NDc/MTgzNjA3MjY5MTpz'@;
put 'ZTw9NjM/MjA1Mzk5NDIxNzowfXouaW5oZXJpdHMoQixWKSxPLnJpcGVtZDE2MD1CLEIuYmxvY2tTaXplPTUxMixCLm91dFNpemU9MTYwLEIuaG1hY1N0cmVuZ3RoPTE5MixCLnBhZExlbmd0aD02NCxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHNlLGhlKXtmb3IodmFyIHVlPXRoaXMu'@;
put 'aFswXSxjZT10aGlzLmhbMV0sRz10aGlzLmhbMl0sYj10aGlzLmhbM10sRD10aGlzLmhbNF0sSD11ZSxOPWNlLGc9RyxDPWIsUz1ELHY9MDt2PDgwO3YrKyl7dmFyIHA9ayhJKGoodWUsWSh2LGNlLEcsYiksc2VbcVt2XStoZV0sWCh2KSksdGVbdl0pLEQpO3VlPUQsRD1iLGI9SShHLDEwKSxH'@;
put 'PWNlLGNlPXAscD1rKEkoaihILFkoNzktdixOLGcsQyksc2VbZWVbdl0raGVdLFUodikpLG9lW3ZdKSxTKSxIPVMsUz1DLEM9SShnLDEwKSxnPU4sTj1wfXA9RSh0aGlzLmhbMV0sRyxDKSx0aGlzLmhbMV09RSh0aGlzLmhbMl0sYixTKSx0aGlzLmhbMl09RSh0aGlzLmhbM10sRCxIKSx0aGlz'@;
put 'LmhbM109RSh0aGlzLmhbNF0sdWUsTiksdGhpcy5oWzRdPUUodGhpcy5oWzBdLGNlLGcpLHRoaXMuaFswXT1wfSxCLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHNlKXtyZXR1cm4iaGV4Ij09PXNlP3oudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOnouc3BsaXQzMih0aGlzLmgsImxpdHRs'@;
put 'ZSIpfTt2YXIgcT1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0'@;
put 'LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxlZT1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwz'@;
put 'LDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSx0ZT1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQs'@;
put 'OSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sb2U9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIs'@;
put 'OCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSw5MDQxOihNLE8sUik9Pnsi'@;
put 'dXNlIHN0cmljdCI7Ty5zaGExPVIoNDc2MSksTy5zaGEyMjQ9Uig3OTkpLE8uc2hhMjU2PVIoOTM0NCksTy5zaGEzODQ9Uig3NzIpLE8uc2hhNTEyPVIoNTkwMCl9LDQ3NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxJPVIoNzAzOCksaz16LnJvdGwz'@;
put 'MixFPXouc3VtMzIsaj16LnN1bTMyXzUsVj1JLmZ0XzEsQj1LLkJsb2NrSGFzaCxZPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBYKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWCkpcmV0dXJuIG5ldyBYO0IuY2FsbCh0aGlzKSx0aGlzLmg9'@;
put 'WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX16LmluaGVyaXRzKFgsQiksTS5leHBvcnRzPVgsWC5ibG9ja1NpemU9NTEyLFgub3V0U2l6ZT0xNjAsWC5obWFjU3RyZW5ndGg9ODAsWC5wYWRMZW5ndGg9'@;
put 'NjQsWC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihVLHEpe2Zvcih2YXIgZWU9dGhpcy5XLHRlPTA7dGU8MTY7dGUrKyllZVt0ZV09VVtxK3RlXTtmb3IoO3RlPGVlLmxlbmd0aDt0ZSsrKWVlW3RlXT1rKGVlW3RlLTNdXmVlW3RlLThdXmVlW3RlLTE0XV5lZVt0ZS0xNl0sMSk7dmFyIG9l'@;
put 'PXRoaXMuaFswXSxzZT10aGlzLmhbMV0saGU9dGhpcy5oWzJdLHVlPXRoaXMuaFszXSxjZT10aGlzLmhbNF07Zm9yKHRlPTA7dGU8ZWUubGVuZ3RoO3RlKyspe3ZhciBHPX5+KHRlLzIwKSxiPWooayhvZSw1KSxWKEcsc2UsaGUsdWUpLGNlLGVlW3RlXSxZW0ddKTtjZT11ZSx1ZT1oZSxoZT1r'@;
put 'KHNlLDMwKSxzZT1vZSxvZT1ifXRoaXMuaFswXT1FKHRoaXMuaFswXSxvZSksdGhpcy5oWzFdPUUodGhpcy5oWzFdLHNlKSx0aGlzLmhbMl09RSh0aGlzLmhbMl0saGUpLHRoaXMuaFszXT1FKHRoaXMuaFszXSx1ZSksdGhpcy5oWzRdPUUodGhpcy5oWzRdLGNlKX0sWC5wcm90b3R5cGUuX2Rp'@;
put 'Z2VzdD1mdW5jdGlvbihVKXtyZXR1cm4iaGV4Ij09PVU/ei50b0hleDMyKHRoaXMuaCwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3OTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig5MzQ0KTtmdW5jdGlvbiBJKCl7aWYoISh0aGlzIGluc3RhbmNl'@;
put 'b2YgSSkpcmV0dXJuIG5ldyBJO0suY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfXouaW5oZXJpdHMoSSxLKSxNLmV4cG9ydHM9SSxJLmJsb2NrU2l6'@;
put 'ZT01MTIsSS5vdXRTaXplPTIyNCxJLmhtYWNTdHJlbmd0aD0xOTIsSS5wYWRMZW5ndGg9NjQsSS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihrKXtyZXR1cm4iaGV4Ij09PWs/ei50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTp6LnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyks'@;
put 'ImJpZyIpfX0sOTM0NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDU3NzIpLEk9Uig3MDM4KSxrPVIoOTc0NiksRT16LnN1bTMyLGo9ei5zdW0zMl80LFY9ei5zdW0zMl81LEI9SS5jaDMyLFk9SS5tYWozMixYPUkuczBfMjU2LFU9SS5zMV8yNTYscT1JLmcwXzI1'@;
put 'NixlZT1JLmcxXzI1Nix0ZT1LLkJsb2NrSGFzaCxvZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTky'@;
put 'NTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMx'@;
put 'MzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAw'@;
put 'LDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3'@;
put 'MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiBzZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHNlKSlyZXR1cm4gbmV3IHNlO3RlLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkw'@;
put 'NDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPW9lLHRoaXMuVz1uZXcgQXJyYXkoNjQpfXouaW5oZXJpdHMoc2UsdGUpLE0uZXhwb3J0cz1zZSxzZS5ibG9ja1NpemU9NTEyLHNlLm91dFNpemU9MjU2LHNlLmhtYWNTdHJl'@;
put 'bmd0aD0xOTIsc2UucGFkTGVuZ3RoPTY0LHNlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGhlLHVlKXtmb3IodmFyIGNlPXRoaXMuVyxHPTA7RzwxNjtHKyspY2VbR109aGVbdWUrR107Zm9yKDtHPGNlLmxlbmd0aDtHKyspY2VbR109aihlZShjZVtHLTJdKSxjZVtHLTddLHEoY2VbRy0x'@;
put 'NV0pLGNlW0ctMTZdKTt2YXIgYj10aGlzLmhbMF0sRD10aGlzLmhbMV0sSD10aGlzLmhbMl0sTj10aGlzLmhbM10sZz10aGlzLmhbNF0sQz10aGlzLmhbNV0sUz10aGlzLmhbNl0sdj10aGlzLmhbN107Zm9yKGsodGhpcy5rLmxlbmd0aD09PWNlLmxlbmd0aCksRz0wO0c8Y2UubGVuZ3RoO0cr'@;
put 'Kyl7dmFyIHA9Vih2LFUoZyksQihnLEMsUyksdGhpcy5rW0ddLGNlW0ddKSx3PUUoWChiKSxZKGIsRCxIKSk7dj1TLFM9QyxDPWcsZz1FKE4scCksTj1ILEg9RCxEPWIsYj1FKHAsdyl9dGhpcy5oWzBdPUUodGhpcy5oWzBdLGIpLHRoaXMuaFsxXT1FKHRoaXMuaFsxXSxEKSx0aGlzLmhbMl09'@;
put 'RSh0aGlzLmhbMl0sSCksdGhpcy5oWzNdPUUodGhpcy5oWzNdLE4pLHRoaXMuaFs0XT1FKHRoaXMuaFs0XSxnKSx0aGlzLmhbNV09RSh0aGlzLmhbNV0sQyksdGhpcy5oWzZdPUUodGhpcy5oWzZdLFMpLHRoaXMuaFs3XT1FKHRoaXMuaFs3XSx2KX0sc2UucHJvdG90eXBlLl9kaWdlc3Q9ZnVu'@;
put 'Y3Rpb24oaGUpe3JldHVybiJoZXgiPT09aGU/ei50b0hleDMyKHRoaXMuaCwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1OTAwKTtmdW5jdGlvbiBJKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkp'@;
put 'cmV0dXJuIG5ldyBJO0suY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2'@;
put 'NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfXouaW5oZXJpdHMoSSxLKSxNLmV4cG9ydHM9SSxJLmJsb2NrU2l6ZT0xMDI0LEkub3V0U2l6ZT0zODQsSS5obWFjU3RyZW5ndGg9MTkyLEkucGFkTGVuZ3RoPTEyOCxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9u'@;
put 'KGspe3JldHVybiJoZXgiPT09az96LnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTp6LnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU5MDA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxJPVIoOTc0Niksaz16LnJvdHI2'@;
put 'NF9oaSxFPXoucm90cjY0X2xvLGo9ei5zaHI2NF9oaSxWPXouc2hyNjRfbG8sQj16LnN1bTY0LFk9ei5zdW02NF9oaSxYPXouc3VtNjRfbG8sVT16LnN1bTY0XzRfaGkscT16LnN1bTY0XzRfbG8sZWU9ei5zdW02NF81X2hpLHRlPXouc3VtNjRfNV9sbyxvZT1LLkJsb2NrSGFzaCxzZT1bMTEx'@;
put 'NjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2'@;
put 'MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4'@;
put 'MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5'@;
put 'OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4'@;
put 'MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYz'@;
put 'NTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2'@;
put 'LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcy'@;
put 'MzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQx'@;
put 'ODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0'@;
put 'LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1'@;
put 'MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGhlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaGUpKXJldHVybiBuZXcgaGU7b2UuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcy'@;
put 'MCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1zZSx0'@;
put 'aGlzLlc9bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24gdWUodyxKLG5lLGRlLGZlKXt2YXIgeGU9dyZuZV5+dyZmZTtyZXR1cm4geGU8MCYmKHhlKz00Mjk0OTY3Mjk2KSx4ZX1mdW5jdGlvbiBjZSh3LEosbmUsZGUsZmUseGUpe3ZhciBMZT1KJmRlXn5KJnhlO3JldHVybiBMZTwwJiYoTGUrPTQy'@;
put 'OTQ5NjcyOTYpLExlfWZ1bmN0aW9uIEcodyxKLG5lLGRlLGZlKXt2YXIgeGU9dyZuZV53JmZlXm5lJmZlO3JldHVybiB4ZTwwJiYoeGUrPTQyOTQ5NjcyOTYpLHhlfWZ1bmN0aW9uIGIodyxKLG5lLGRlLGZlLHhlKXt2YXIgTGU9SiZkZV5KJnhlXmRlJnhlO3JldHVybiBMZTwwJiYoTGUrPTQy'@;
put 'OTQ5NjcyOTYpLExlfWZ1bmN0aW9uIEQodyxKKXt2YXIgbmU9ayh3LEosMjgpXmsoSix3LDIpXmsoSix3LDcpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIEgodyxKKXt2YXIgbmU9RSh3LEosMjgpXkUoSix3LDIpXkUoSix3LDcpO3JldHVybiBuZTwwJiYobmUr'@;
put 'PTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIE4odyxKKXt2YXIgbmU9ayh3LEosMTQpXmsodyxKLDE4KV5rKEosdyw5KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBnKHcsSil7dmFyIG5lPUUodyxKLDE0KV5FKHcsSiwxOCleRShKLHcsOSk7cmV0dXJuIG5lPDAm'@;
put 'JihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gQyh3LEope3ZhciBuZT1rKHcsSiwxKV5rKHcsSiw4KV5qKHcsSiw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBTKHcsSil7dmFyIG5lPUUodyxKLDEpXkUodyxKLDgpXlYodyxKLDcpO3JldHVybiBuZTww'@;
put 'JiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIHYodyxKKXt2YXIgbmU9ayh3LEosMTkpXmsoSix3LDI5KV5qKHcsSiw2KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBwKHcsSil7dmFyIG5lPUUodyxKLDE5KV5FKEosdywyOSleVih3LEosNik7cmV0dXJu'@;
put 'IG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ei5pbmhlcml0cyhoZSxvZSksTS5leHBvcnRzPWhlLGhlLmJsb2NrU2l6ZT0xMDI0LGhlLm91dFNpemU9NTEyLGhlLmhtYWNTdHJlbmd0aD0xOTIsaGUucGFkTGVuZ3RoPTEyOCxoZS5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbih3'@;
put 'LEope2Zvcih2YXIgbmU9dGhpcy5XLGRlPTA7ZGU8MzI7ZGUrKyluZVtkZV09d1tKK2RlXTtmb3IoO2RlPG5lLmxlbmd0aDtkZSs9Mil7dmFyIGZlPXYobmVbZGUtNF0sbmVbZGUtM10pLHhlPXAobmVbZGUtNF0sbmVbZGUtM10pLExlPW5lW2RlLTE0XSxGZT1uZVtkZS0xM10sT2U9QyhuZVtk'@;
put 'ZS0zMF0sbmVbZGUtMjldKSxqZT1TKG5lW2RlLTMwXSxuZVtkZS0yOV0pLFdlPW5lW2RlLTMyXSxLZT1uZVtkZS0zMV07bmVbZGVdPVUoZmUseGUsTGUsRmUsT2UsamUsV2UsS2UpLG5lW2RlKzFdPXEoZmUseGUsTGUsRmUsT2UsamUsV2UsS2UpfX0saGUucHJvdG90eXBlLl91cGRhdGU9ZnVu'@;
put 'Y3Rpb24odyxKKXt0aGlzLl9wcmVwYXJlQmxvY2sodyxKKTt2YXIgbmU9dGhpcy5XLGRlPXRoaXMuaFswXSxmZT10aGlzLmhbMV0seGU9dGhpcy5oWzJdLExlPXRoaXMuaFszXSxGZT10aGlzLmhbNF0sT2U9dGhpcy5oWzVdLGplPXRoaXMuaFs2XSxXZT10aGlzLmhbN10sS2U9dGhpcy5oWzhd'@;
put 'LFllPXRoaXMuaFs5XSxRZT10aGlzLmhbMTBdLGx0PXRoaXMuaFsxMV0sUGU9dGhpcy5oWzEyXSxiZT10aGlzLmhbMTNdLEFlPXRoaXMuaFsxNF0sVGU9dGhpcy5oWzE1XTtJKHRoaXMuay5sZW5ndGg9PT1uZS5sZW5ndGgpO2Zvcih2YXIgcWU9MDtxZTxuZS5sZW5ndGg7cWUrPTIpe3ZhciBY'@;
put 'ZT1BZSxVZT1UZSxodD1OKEtlLFllKSxNZT1nKEtlLFllKSxEZT11ZShLZSwwLFFlLDAsUGUpLHplPWNlKDAsWWUsMCxsdCwwLGJlKSxvdD10aGlzLmtbcWVdLHV0PXRoaXMua1txZSsxXSxNdD1uZVtxZV0sSHQ9bmVbcWUrMV0sUHQ9ZWUoWGUsVWUsaHQsTWUsRGUsemUsb3QsdXQsTXQsSHQp'@;
put 'LG9uPXRlKFhlLFVlLGh0LE1lLERlLHplLG90LHV0LE10LEh0KTtYZT1EKGRlLGZlKSxVZT1IKGRlLGZlKSxodD1HKGRlLDAseGUsMCxGZSksTWU9YigwLGZlLDAsTGUsMCxPZSk7dmFyIENuPVkoWGUsVWUsaHQsTWUpLFV0PVgoWGUsVWUsaHQsTWUpO0FlPVBlLFRlPWJlLFBlPVFlLGJlPWx0'@;
put 'LFFlPUtlLGx0PVllLEtlPVkoamUsV2UsUHQsb24pLFllPVgoV2UsV2UsUHQsb24pLGplPUZlLFdlPU9lLEZlPXhlLE9lPUxlLHhlPWRlLExlPWZlLGRlPVkoUHQsb24sQ24sVXQpLGZlPVgoUHQsb24sQ24sVXQpfUIodGhpcy5oLDAsZGUsZmUpLEIodGhpcy5oLDIseGUsTGUpLEIodGhpcy5o'@;
put 'LDQsRmUsT2UpLEIodGhpcy5oLDYsamUsV2UpLEIodGhpcy5oLDgsS2UsWWUpLEIodGhpcy5oLDEwLFFlLGx0KSxCKHRoaXMuaCwxMixQZSxiZSksQih0aGlzLmgsMTQsQWUsVGUpfSxoZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/ei50b0hleDMyKHRo'@;
put 'aXMuaCwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MDM4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gSyhFLGosVil7cmV0dXJuIEUmal5+RSZWfWZ1bmN0aW9uIEkoRSxqLFYpe3JldHVybiBFJmpeRSZWXmomVn1mdW5jdGlv'@;
put 'biBrKEUsaixWKXtyZXR1cm4gRV5qXlZ9Ty5mdF8xPWZ1bmN0aW9uKEUsaixWLEIpe3JldHVybiAwPT09RT9LKGosVixCKToxPT09RXx8Mz09PUU/ayhqLFYsQik6Mj09PUU/SShqLFYsQik6dm9pZCAwfSxPLmNoMzI9SyxPLm1hajMyPUksTy5wMzI9ayxPLnMwXzI1Nj1mdW5jdGlvbihFKXty'@;
put 'ZXR1cm4geihFLDIpXnooRSwxMyleeihFLDIyKX0sTy5zMV8yNTY9ZnVuY3Rpb24oRSl7cmV0dXJuIHooRSw2KV56KEUsMTEpXnooRSwyNSl9LE8uZzBfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiB6KEUsNyleeihFLDE4KV5FPj4+M30sTy5nMV8yNTY9ZnVuY3Rpb24oRSl7cmV0dXJuIHooRSwx'@;
put 'NyleeihFLDE5KV5FPj4+MTB9fSw2NDM2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KSxLPVIoNTcxNyk7ZnVuY3Rpb24gSShWLEIpe3JldHVybiA1NTI5Nj09KDY0NTEyJlYuY2hhckNvZGVBdChCKSkmJiEoQjwwfHxCKzE+PVYubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZW'@;
put 'LmNoYXJDb2RlQXQoQisxKSl9ZnVuY3Rpb24gayhWKXtyZXR1cm4oVj4+PjI0fFY+Pj44JjY1MjgwfFY8PDgmMTY3MTE2ODB8KDI1NSZWKTw8MjQpPj4+MH1mdW5jdGlvbiBFKFYpe3JldHVybiAxPT09Vi5sZW5ndGg/IjAiK1Y6Vn1mdW5jdGlvbiBqKFYpe3JldHVybiA3PT09Vi5sZW5ndGg/'@;
put 'IjAiK1Y6Nj09PVYubGVuZ3RoPyIwMCIrVjo1PT09Vi5sZW5ndGg/IjAwMCIrVjo0PT09Vi5sZW5ndGg/IjAwMDAiK1Y6Mz09PVYubGVuZ3RoPyIwMDAwMCIrVjoyPT09Vi5sZW5ndGg/IjAwMDAwMCIrVjoxPT09Vi5sZW5ndGg/IjAwMDAwMDAiK1Y6Vn1PLmluaGVyaXRzPUssTy50b0FycmF5'@;
put 'PWZ1bmN0aW9uKFYsQil7aWYoQXJyYXkuaXNBcnJheShWKSlyZXR1cm4gVi5zbGljZSgpO2lmKCFWKXJldHVybltdO3ZhciBZPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgVilpZihCKXtpZigiaGV4Ij09PUIpZm9yKChWPVYucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0w'@;
put 'JiYoVj0iMCIrViksVT0wO1U8Vi5sZW5ndGg7VSs9MilZLnB1c2gocGFyc2VJbnQoVltVXStWW1UrMV0sMTYpKX1lbHNlIGZvcih2YXIgWD0wLFU9MDtVPFYubGVuZ3RoO1UrKyl7dmFyIHE9Vi5jaGFyQ29kZUF0KFUpO3E8MTI4P1lbWCsrXT1xOnE8MjA0OD8oWVtYKytdPXE+PjZ8MTkyLFlb'@;
put 'WCsrXT02MyZxfDEyOCk6SShWLFUpPyhxPTY1NTM2KygoMTAyMyZxKTw8MTApKygxMDIzJlYuY2hhckNvZGVBdCgrK1UpKSxZW1grK109cT4+MTh8MjQwLFlbWCsrXT1xPj4xMiY2M3wxMjgsWVtYKytdPXE+PjYmNjN8MTI4LFlbWCsrXT02MyZxfDEyOCk6KFlbWCsrXT1xPj4xMnwyMjQsWVtY'@;
put 'KytdPXE+PjYmNjN8MTI4LFlbWCsrXT02MyZxfDEyOCl9ZWxzZSBmb3IoVT0wO1U8Vi5sZW5ndGg7VSsrKVlbVV09MHxWW1VdO3JldHVybiBZfSxPLnRvSGV4PWZ1bmN0aW9uKFYpe2Zvcih2YXIgQj0iIixZPTA7WTxWLmxlbmd0aDtZKyspQis9RShWW1ldLnRvU3RyaW5nKDE2KSk7cmV0dXJu'@;
put 'IEJ9LE8uaHRvbmw9ayxPLnRvSGV4MzI9ZnVuY3Rpb24oVixCKXtmb3IodmFyIFk9IiIsWD0wO1g8Vi5sZW5ndGg7WCsrKXt2YXIgVT1WW1hdOyJsaXR0bGUiPT09QiYmKFU9ayhVKSksWSs9aihVLnRvU3RyaW5nKDE2KSl9cmV0dXJuIFl9LE8uemVybzI9RSxPLnplcm84PWosTy5qb2luMzI9'@;
put 'ZnVuY3Rpb24oVixCLFksWCl7dmFyIFU9WS1CO3ooVSU0PT0wKTtmb3IodmFyIHE9bmV3IEFycmF5KFUvNCksZWU9MCx0ZT1CO2VlPHEubGVuZ3RoO2VlKyssdGUrPTQpcVtlZV09KCJiaWciPT09WD9WW3RlXTw8MjR8Vlt0ZSsxXTw8MTZ8Vlt0ZSsyXTw8OHxWW3RlKzNdOlZbdGUrM108PDI0'@;
put 'fFZbdGUrMl08PDE2fFZbdGUrMV08PDh8Vlt0ZV0pPj4+MDtyZXR1cm4gcX0sTy5zcGxpdDMyPWZ1bmN0aW9uKFYsQil7Zm9yKHZhciBZPW5ldyBBcnJheSg0KlYubGVuZ3RoKSxYPTAsVT0wO1g8Vi5sZW5ndGg7WCsrLFUrPTQpe3ZhciBxPVZbWF07ImJpZyI9PT1CPyhZW1VdPXE+Pj4yNCxZ'@;
put 'W1UrMV09cT4+PjE2JjI1NSxZW1UrMl09cT4+PjgmMjU1LFlbVSszXT0yNTUmcSk6KFlbVSszXT1xPj4+MjQsWVtVKzJdPXE+Pj4xNiYyNTUsWVtVKzFdPXE+Pj44JjI1NSxZW1VdPTI1NSZxKX1yZXR1cm4gWX0sTy5yb3RyMzI9ZnVuY3Rpb24oVixCKXtyZXR1cm4gVj4+PkJ8Vjw8MzItQn0s'@;
put 'Ty5yb3RsMzI9ZnVuY3Rpb24oVixCKXtyZXR1cm4gVjw8QnxWPj4+MzItQn0sTy5zdW0zMj1mdW5jdGlvbihWLEIpe3JldHVybiBWK0I+Pj4wfSxPLnN1bTMyXzM9ZnVuY3Rpb24oVixCLFkpe3JldHVybiBWK0IrWT4+PjB9LE8uc3VtMzJfND1mdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gVitC'@;
put 'K1krWD4+PjB9LE8uc3VtMzJfNT1mdW5jdGlvbihWLEIsWSxYLFUpe3JldHVybiBWK0IrWStYK1U+Pj4wfSxPLnN1bTY0PWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBxPVgrVltCKzFdPj4+MDtWW0JdPShxPFg/MTowKStZK1ZbQl0+Pj4wLFZbQisxXT1xfSxPLnN1bTY0X2hpPWZ1bmN0aW9uKFYs'@;
put 'QixZLFgpe3JldHVybihCK1g+Pj4wPEI/MTowKStWK1k+Pj4wfSxPLnN1bTY0X2xvPWZ1bmN0aW9uKFYsQixZLFgpe3JldHVybiBCK1g+Pj4wfSxPLnN1bTY0XzRfaGk9ZnVuY3Rpb24oVixCLFksWCxVLHEsZWUsdGUpe3ZhciBvZT0wLHNlPUI7cmV0dXJuIG9lKz0oc2U9c2UrWD4+PjApPEI/'@;
put 'MTowLG9lKz0oc2U9c2UrcT4+PjApPHE/MTowLFYrWStVK2VlKyhvZSs9KHNlPXNlK3RlPj4+MCk8dGU/MTowKT4+PjB9LE8uc3VtNjRfNF9sbz1mdW5jdGlvbihWLEIsWSxYLFUscSxlZSx0ZSl7cmV0dXJuIEIrWCtxK3RlPj4+MH0sTy5zdW02NF81X2hpPWZ1bmN0aW9uKFYsQixZLFgsVSxx'@;
put 'LGVlLHRlLG9lLHNlKXt2YXIgaGU9MCx1ZT1CO3JldHVybiBoZSs9KHVlPXVlK1g+Pj4wKTxCPzE6MCxoZSs9KHVlPXVlK3E+Pj4wKTxxPzE6MCxoZSs9KHVlPXVlK3RlPj4+MCk8dGU/MTowLFYrWStVK2VlK29lKyhoZSs9KHVlPXVlK3NlPj4+MCk8c2U/MTowKT4+PjB9LE8uc3VtNjRfNV9s'@;
put 'bz1mdW5jdGlvbihWLEIsWSxYLFUscSxlZSx0ZSxvZSxzZSl7cmV0dXJuIEIrWCtxK3RlK3NlPj4+MH0sTy5yb3RyNjRfaGk9ZnVuY3Rpb24oVixCLFkpe3JldHVybihCPDwzMi1ZfFY+Pj5ZKT4+PjB9LE8ucm90cjY0X2xvPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4oVjw8MzItWXxCPj4+WSk+'@;
put 'Pj4wfSxPLnNocjY0X2hpPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gVj4+Pll9LE8uc2hyNjRfbG89ZnVuY3Rpb24oVixCLFkpe3JldHVybihWPDwzMi1ZfEI+Pj5ZKT4+PjB9fSwyMTU2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzE1KSxLPVIoNDUwNCksST1SKDk3NDYpO2Z1'@;
put 'bmN0aW9uIGsoRSl7aWYoISh0aGlzIGluc3RhbmNlb2YgaykpcmV0dXJuIG5ldyBrKEUpO3RoaXMuaGFzaD1FLmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhRS5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT1FLm1pbkVudHJvcHl8fHRoaXMu'@;
put 'aGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBqPUsudG9BcnJheShFLmVudHJvcHksRS5lbnRyb3B5RW5jfHwiaGV4IiksVj1LLnRvQXJyYXkoRS5ub25jZSxFLm5vbmNlRW5jfHwi'@;
put 'aGV4IiksQj1LLnRvQXJyYXkoRS5wZXJzLEUucGVyc0VuY3x8ImhleCIpO0koai5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoaixWLEIpfU0uZXhwb3J0cz1rLGsu'@;
put 'cHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEUsaixWKXt2YXIgQj1FLmNvbmNhdChqKS5jb25jYXQoVik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgWT0wO1k8dGhpcy5WLmxlbmd0aDtZKyspdGhpcy5LW1ld'@;
put 'PTAsdGhpcy5WW1ldPTE7dGhpcy5fdXBkYXRlKEIpLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxrLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgei5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxrLnByb3RvdHlwZS5fdXBk'@;
put 'YXRlPWZ1bmN0aW9uKEUpe3ZhciBqPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtFJiYoaj1qLnVwZGF0ZShFKSksdGhpcy5LPWouZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxFJiYodGhpcy5LPXRoaXMuX2htYWMo'@;
put 'KS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoRSkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LGsucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihFLGosVixCKXsic3RyaW5nIiE9dHlwZW9mIGomJihCPVYsVj1qLGo9bnVs'@;
put 'bCksRT1LLnRvQXJyYXkoRSxqKSxWPUsudG9BcnJheShWLEIpLEkoRS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShFLmNvbmNhdChWfHxbXSkpLHRoaXMuX3Jl'@;
put 'c2VlZD0xfSxrLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihFLGosVixCKXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgaiYmKEI9VixWPWosaj1udWxsKSxWJiYoVj1L'@;
put 'LnRvQXJyYXkoVixCfHwiaGV4IiksdGhpcy5fdXBkYXRlKFYpKTtmb3IodmFyIFk9W107WS5sZW5ndGg8RTspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxZPVkuY29uY2F0KHRoaXMuVik7dmFyIFg9WS5zbGljZSgwLEUpO3JldHVybiB0aGlzLl91cGRhdGUo'@;
put 'ViksdGhpcy5fcmVzZWVkKyssSy5lbmNvZGUoWCxqKX19LDY0NTooTSxPKT0+e08ucmVhZD1mdW5jdGlvbihSLHosSyxJLGspe3ZhciBFLGosVj04KmstSS0xLEI9KDE8PFYpLTEsWT1CPj4xLFg9LTcsVT1LP2stMTowLHE9Sz8tMToxLGVlPVJbeitVXTtmb3IoVSs9cSxFPWVlJigxPDwtWCkt'@;
put 'MSxlZT4+PS1YLFgrPVY7WD4wO0U9MjU2KkUrUlt6K1VdLFUrPXEsWC09OCk7Zm9yKGo9RSYoMTw8LVgpLTEsRT4+PS1YLFgrPUk7WD4wO2o9MjU2KmorUlt6K1VdLFUrPXEsWC09OCk7aWYoMD09PUUpRT0xLVk7ZWxzZXtpZihFPT09QilyZXR1cm4gaj9OYU46MS8wKihlZT8tMToxKTtqKz1N'@;
put 'YXRoLnBvdygyLEkpLEUtPVl9cmV0dXJuKGVlPy0xOjEpKmoqTWF0aC5wb3coMixFLUkpfSxPLndyaXRlPWZ1bmN0aW9uKFIseixLLEksayxFKXt2YXIgaixWLEIsWT04KkUtay0xLFg9KDE8PFkpLTEsVT1YPj4xLHE9MjM9PT1rP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxl'@;
put 'ZT1JPzA6RS0xLHRlPUk/MTotMSxvZT16PDB8fDA9PT16JiYxL3o8MD8xOjA7Zm9yKHo9TWF0aC5hYnMoeiksaXNOYU4oeil8fHo9PT0xLzA/KFY9aXNOYU4oeik/MTowLGo9WCk6KGo9TWF0aC5mbG9vcihNYXRoLmxvZyh6KS9NYXRoLkxOMikseiooQj1NYXRoLnBvdygyLC1qKSk8MSYmKGot'@;
put 'LSxCKj0yKSwoeis9aitVPj0xP3EvQjpxKk1hdGgucG93KDIsMS1VKSkqQj49MiYmKGorKyxCLz0yKSxqK1U+PVg/KFY9MCxqPVgpOmorVT49MT8oVj0oeipCLTEpKk1hdGgucG93KDIsayksais9VSk6KFY9eipNYXRoLnBvdygyLFUtMSkqTWF0aC5wb3coMixrKSxqPTApKTtrPj04O1JbSytl'@;
put 'ZV09MjU1JlYsZWUrPXRlLFYvPTI1NixrLT04KTtmb3Ioaj1qPDxrfFYsWSs9aztZPjA7UltLK2VlXT0yNTUmaixlZSs9dGUsai89MjU2LFktPTgpO1JbSytlZS10ZV18PTEyOCpvZX19LDc4NDQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDI0NzkpLEk9T2JqZWN0LmNyZWF0ZShudWxs'@;
put 'KSxrPVIoNzc4KTtNLmV4cG9ydHM9SyhmdW5jdGlvbihFLGope3JldHVybiBJW0VdPyhJW0VdLnB1c2goaiksbnVsbCk6KElbRV09W2pdLFY9RSxrKGZ1bmN0aW9uIEIoKXt2YXIgWT1JW1ZdLFg9WS5sZW5ndGgsVT1mdW5jdGlvbihlZSl7Zm9yKHZhciB0ZT1lZS5sZW5ndGgsb2U9W10sc2U9'@;
put 'MDtzZTx0ZTtzZSsrKW9lW3NlXT1lZVtzZV07cmV0dXJuIG9lfShhcmd1bWVudHMpO3RyeXtmb3IodmFyIHE9MDtxPFg7cSsrKVlbcV0uYXBwbHkobnVsbCxVKX1maW5hbGx5e1kubGVuZ3RoPlg/KFkuc3BsaWNlKDAsWCksei5uZXh0VGljayhmdW5jdGlvbigpe0IuYXBwbHkobnVsbCxVKX0p'@;
put 'KTpkZWxldGUgSVtWXX19KSk7dmFyIFZ9KX0sNTcxNzpNPT57TS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE8sUil7UiYmKE8uc3VwZXJfPVIsTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVl'@;
put 'Ok8sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbihPLFIpe2lmKFIpe08uc3VwZXJfPVI7dmFyIHo9ZnVuY3Rpb24oKXt9O3oucHJvdG90eXBlPVIucHJvdG90eXBlLE8ucHJvdG90eXBlPW5ldyB6LE8ucHJvdG90eXBlLmNvbnN0cnVjdG9y'@;
put 'PU99fX0sMjU4NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQxMCkoKSxLPVIoMTkyNCkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxJPWZ1bmN0aW9uKGope3JldHVybiEoeiYmaiYmIm9iamVjdCI9PXR5cGVvZiBqJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gaikmJiJb'@;
put 'b2JqZWN0IEFyZ3VtZW50c10iPT09SyhqKX0saz1mdW5jdGlvbihqKXtyZXR1cm4hIUkoail8fG51bGwhPT1qJiYib2JqZWN0Ij09dHlwZW9mIGomJiJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgmJmoubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iIT09SyhqKSYmIltvYmplY3QgRnVuY3Rp'@;
put 'b25dIj09PUsoai5jYWxsZWUpfSxFPWZ1bmN0aW9uKCl7cmV0dXJuIEkoYXJndW1lbnRzKX0oKTtJLmlzTGVnYWN5QXJndW1lbnRzPWssTS5leHBvcnRzPUU/STprfSw1MzIwOk09PnsidXNlIHN0cmljdCI7dmFyIE8sUix6PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxLPSJvYmplY3Qi'@;
put 'PT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEsmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e089T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rp'@;
put 'b24oKXt0aHJvdyBSfX0pLFI9e30sSyhmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLE8pfWNhdGNoKFUpe1UhPT1SJiYoSz1udWxsKX1lbHNlIEs9bnVsbDt2YXIgST0vXlxzKmNsYXNzXGIvLGs9ZnVuY3Rpb24oVSl7dHJ5e3ZhciBxPXouY2FsbChVKTtyZXR1cm4gSS50ZXN0KHEpfWNhdGNo'@;
put 'e3JldHVybiExfX0sRT1mdW5jdGlvbihVKXt0cnl7cmV0dXJuIWsoVSkmJih6LmNhbGwoVSksITApfWNhdGNoe3JldHVybiExfX0saj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsQj0hKDAgaW5bLF0p'@;
put 'LFk9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIFg9ZG9jdW1lbnQuYWxsO2ouY2FsbChYKT09PWouY2FsbChkb2N1bWVudC5hbGwpJiYoWT1mdW5jdGlvbihVKXtpZigoQnx8IVUpJiYodm9pZCAwPT09VXx8Im9iamVjdCI9PXR5cGVvZiBV'@;
put 'KSl0cnl7dmFyIHE9ai5jYWxsKFUpO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09cXx8IltvYmplY3QgSFRNTCBkb2N1bWVudC5hbGwgY2xhc3NdIj09PXF8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1xfHwiW29iamVjdCBPYmplY3RdIj09PXEpJiZudWxsPT1V'@;
put 'KCIiKX1jYXRjaHt9cmV0dXJuITF9KX1NLmV4cG9ydHM9Sz9mdW5jdGlvbihVKXtpZihZKFUpKXJldHVybiEwO2lmKCFVfHwiZnVuY3Rpb24iIT10eXBlb2YgVSYmIm9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO3RyeXtLKFUsbnVsbCxPKX1jYXRjaChxKXtpZihxIT09UilyZXR1cm4hMX1y'@;
put 'ZXR1cm4hayhVKSYmRShVKX06ZnVuY3Rpb24oVSl7aWYoWShVKSlyZXR1cm4hMDtpZighVXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFUmJiJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4hMTtpZihWKXJldHVybiBFKFUpO2lmKGsoVSkpcmV0dXJuITE7dmFyIHE9ai5jYWxsKFUpO3JldHVybiEoIltv'@;
put 'YmplY3QgRnVuY3Rpb25dIiE9PXEmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1xJiYhL15cW29iamVjdCBIVE1MLy50ZXN0KHEpKSYmRShVKX19LDg2NjI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsST1GdW5jdGlvbi5w'@;
put 'cm90b3R5cGUudG9TdHJpbmcsaz0vXlxzKig/OmZ1bmN0aW9uKT9cKi8sRT1SKDY0MTApKCksaj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7TS5leHBvcnRzPWZ1bmN0aW9uKFYpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBWKXJldHVybiExO2lmKGsudGVzdChJLmNhbGwoVikpKXJldHVybiEwO2lm'@;
put 'KCFFKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT1LLmNhbGwoVik7aWYoIWopcmV0dXJuITE7aWYodm9pZCAwPT09eil7dmFyIEI9ZnVuY3Rpb24oKXtpZighRSlyZXR1cm4hMTt0cnl7cmV0dXJuIEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNo'@;
put 'e319KCk7ej0hIUImJmooQil9cmV0dXJuIGooVik9PT16fX0sODYxMTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gTyE9T319LDM2MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTU1OSksSz1SKDQyODkpLEk9Uig4NjExKSxrPVIoOTQxNSks'@;
put 'RT1SKDMxOTQpLGo9eihrKCksTnVtYmVyKTtLKGose2dldFBvbHlmaWxsOmssaW1wbGVtZW50YXRpb246SSxzaGltOkV9KSxNLmV4cG9ydHM9an0sOTQxNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODYxMSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05h'@;
put 'TiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46en19LDMxOTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyODkpLEs9Uig5NDE1KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST1LKCk7cmV0dXJuIHooTnVtYmVyLHtpc05hTjpJ'@;
put 'fSx7aXNOYU46ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOIT09SX19KSxJfX0sNTY5MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDAyOSksSz1SKDMwODMpLEk9UigxOTI0KSxrPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxFPVIoNjQxMCkoKSxqPVIoNzI5'@;
put 'NiksVj10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Ui5nOmdsb2JhbFRoaXMsQj1LKCksWT1JKCJBcnJheS5wcm90b3R5cGUuaW5kZXhPZiIsITApfHxmdW5jdGlvbihlZSx0ZSl7Zm9yKHZhciBvZT0wO29lPGVlLmxlbmd0aDtvZSs9MSlpZihlZVtvZV09PT10ZSlyZXR1cm4gb2U7cmV0dXJuLTF9'@;
put 'LFg9SSgiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLFU9e30scT1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7RSYmaiYmcSYmeihCLGZ1bmN0aW9uKGVlKXt2YXIgdGU9bmV3IFZbZWVdO2lmKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB0ZSl7dmFyIG9lPXEodGUpLHNlPWoob2UsU3ltYm9sLnRvU3Ry'@;
put 'aW5nVGFnKTtpZighc2Upe3ZhciBoZT1xKG9lKTtzZT1qKGhlLFN5bWJvbC50b1N0cmluZ1RhZyl9VVtlZV09c2UuZ2V0fX0pLE0uZXhwb3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiExO2lmKCFFfHwhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBl'@;
put 'ZSkpe3ZhciB0ZT1YKGsoZWUpLDgsLTEpO3JldHVybiBZKEIsdGUpPi0xfXJldHVybiEhaiYmKG9lPWVlLHNlPSExLHooVSxmdW5jdGlvbihoZSx1ZSl7aWYoIXNlKXRyeXtzZT1oZS5jYWxsKG9lKT09PXVlfWNhdGNoe319KSxzZSk7dmFyIG9lLHNlfX0sNjgxMzooTSxPLFIpPT57bGV0IHo7'@;
put 'dHJ5e3o9Uig3Nyl9Y2F0Y2h7ej1SKDQxMjkpfWNvbnN0IEs9Uig4OTgxKSx7c3RyaW5naWZ5Okksc3RyaXBCb206a309Uig2NzgwKSxFPXtyZWFkRmlsZTpLLmZyb21Qcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGo9YWUoZnVuY3Rpb24qKFYsQj17fSl7InN0cmluZyI9PXR5cGVvZiBCJiYoQj17'@;
put 'ZW5jb2Rpbmc6Qn0pO2NvbnN0IFk9Qi5mc3x8eixYPSEoInRocm93cyJpbiBCKXx8Qi50aHJvd3M7bGV0IFUscT15aWVsZCBLLmZyb21DYWxsYmFjayhZLnJlYWRGaWxlKShWLEIpO3E9ayhxKTt0cnl7VT1KU09OLnBhcnNlKHEsQj9CLnJldml2ZXI6bnVsbCl9Y2F0Y2goZWUpe2lmKFgpdGhy'@;
put 'b3cgZWUubWVzc2FnZT1gJHtWfTogJHtlZS5tZXNzYWdlfWAsZWU7cmV0dXJuIG51bGx9cmV0dXJuIFV9KTtyZXR1cm4gZnVuY3Rpb24oVil7cmV0dXJuIGouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkscmVhZEZpbGVTeW5jOmZ1bmN0aW9uKGosVj17fSl7InN0cmluZyI9PXR5cGVvZiBW'@;
put 'JiYoVj17ZW5jb2Rpbmc6Vn0pO2NvbnN0IEI9Vi5mc3x8eixZPSEoInRocm93cyJpbiBWKXx8Vi50aHJvd3M7dHJ5e2xldCBYPUIucmVhZEZpbGVTeW5jKGosVik7cmV0dXJuIFg9ayhYKSxKU09OLnBhcnNlKFgsVi5yZXZpdmVyKX1jYXRjaChYKXtpZihZKXRocm93IFgubWVzc2FnZT1gJHtq'@;
put 'fTogJHtYLm1lc3NhZ2V9YCxYO3JldHVybiBudWxsfX0sd3JpdGVGaWxlOksuZnJvbVByb21pc2UoZnVuY3Rpb24oKXt2YXIgaj1hZShmdW5jdGlvbiooVixCLFk9e30pe2NvbnN0IFg9WS5mc3x8eixVPUkoQixZKTt5aWVsZCBLLmZyb21DYWxsYmFjayhYLndyaXRlRmlsZSkoVixVLFkpfSk7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKFYsQil7cmV0dXJuIGouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksd3JpdGVGaWxlU3luYzpmdW5jdGlvbihqLFYsQj17fSl7Y29uc3QgWT1CLmZzfHx6LFg9SShWLEIpO3JldHVybiBZLndyaXRlRmlsZVN5bmMoaixYLEIpfX07TS5leHBvcnRzPUV9LDY3ODA6'@;
put 'KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyO00uZXhwb3J0cz17c3RyaW5naWZ5OmZ1bmN0aW9uKEsse0VPTDpJPSJcbiIsZmluYWxFT0w6az0hMCxyZXBsYWNlcjpFPW51bGwsc3BhY2VzOmp9PXt9KXtjb25zdCBWPWs/SToiIjtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoSyxFLGopLnJl'@;
put 'cGxhY2UoL1xuL2csSSkrVn0sc3RyaXBCb206ZnVuY3Rpb24oSyl7cmV0dXJuIHouaXNCdWZmZXIoSykmJihLPUsudG9TdHJpbmcoInV0ZjgiKSksSy5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjI0NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooail7dGhpcy5tZXNzYWdl'@;
put 'PWp9Ui5yKE8pLFIuZChPLHtJbnZhbGlkVG9rZW5FcnJvcjooKT0+ayxkZWZhdWx0OigpPT5FfSksKHoucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZENoYXJhY3RlckVycm9yIjt2YXIgSz10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJpbmQo'@;
put 'd2luZG93KXx8ZnVuY3Rpb24oail7dmFyIFY9U3RyaW5nKGopLnJlcGxhY2UoLz0rJC8sIiIpO2lmKFYubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IHooIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7Zm9yKHZhciBCLFks'@;
put 'WD0wLFU9MCxxPSIiO1k9Vi5jaGFyQXQoVSsrKTt+WSYmKEI9WCU0PzY0KkIrWTpZLFgrKyU0KT9xKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZCPj4oLTIqWCY2KSk6MClZPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsv'@;
put 'PSIuaW5kZXhPZihZKTtyZXR1cm4gcX07ZnVuY3Rpb24gayhqKXt0aGlzLm1lc3NhZ2U9an0oay5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkVG9rZW5FcnJvciI7Y29uc3QgRT1mdW5jdGlvbihqLFYpe2lmKCJzdHJpbmciIT10eXBlb2Ygail0aHJvdyBuZXcgaygiSW52YWxp'@;
put 'ZCB0b2tlbiBzcGVjaWZpZWQiKTt2YXIgQj0hMD09PShWPVZ8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBJKGope3ZhciBWPWoucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKFYubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztj'@;
put 'YXNlIDI6Vis9Ij09IjticmVhaztjYXNlIDM6Vis9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoSyhWKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihZLFgpe3ZhciBVPVguY2hhckNvZGVBdCgw'@;
put 'KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gVS5sZW5ndGg8MiYmKFU9IjAiK1UpLCIlIitVfSkpfWNhdGNoe3JldHVybiBLKFYpfX0oai5zcGxpdCgiLiIpW0JdKSl9Y2F0Y2goWSl7dGhyb3cgbmV3IGsoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK1kubWVzc2FnZSl9'@;
put 'fX0sMjMxODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTcxNyksSz1SKDMzNDkpLEk9Uig5NTA5KS5CdWZmZXIsaz1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIEUoKXtLLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1'@;
put 'NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gaihVLHEpe3JldHVybiBVPDxxfFU+Pj4zMi1xfWZ1bmN0aW9uIFYoVSxxLGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gaihVKyhxJmVlfH5xJnRlKStvZStzZXwwLGhlKStxfDB9ZnVuY3Rpb24gQihVLHEsZWUsdGUsb2Usc2UsaGUp'@;
put 'e3JldHVybiBqKFUrKHEmdGV8ZWUmfnRlKStvZStzZXwwLGhlKStxfDB9ZnVuY3Rpb24gWShVLHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiBqKFUrKHFeZWVedGUpK29lK3NlfDAsaGUpK3F8MH1mdW5jdGlvbiBYKFUscSxlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIGooVSsoZWVeKHF8fnRlKSkr'@;
put 'b2Urc2V8MCxoZSkrcXwwfXooRSxLKSxFLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBVPWsscT0wO3E8MTY7KytxKVVbcV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpxKTt2YXIgZWU9dGhpcy5fYSx0ZT10aGlzLl9iLG9lPXRoaXMuX2Msc2U9dGhpcy5fZDtlZT1W'@;
put 'KGVlLHRlLG9lLHNlLFVbMF0sMzYxNDA5MDM2MCw3KSxzZT1WKHNlLGVlLHRlLG9lLFVbMV0sMzkwNTQwMjcxMCwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzJdLDYwNjEwNTgxOSwxNyksdGU9Vih0ZSxvZSxzZSxlZSxVWzNdLDMyNTA0NDE5NjYsMjIpLGVlPVYoZWUsdGUsb2Usc2UsVVs0XSw0'@;
put 'MTE4NTQ4Mzk5LDcpLHNlPVYoc2UsZWUsdGUsb2UsVVs1XSwxMjAwMDgwNDI2LDEyKSxvZT1WKG9lLHNlLGVlLHRlLFVbNl0sMjgyMTczNTk1NSwxNyksdGU9Vih0ZSxvZSxzZSxlZSxVWzddLDQyNDkyNjEzMTMsMjIpLGVlPVYoZWUsdGUsb2Usc2UsVVs4XSwxNzcwMDM1NDE2LDcpLHNlPVYo'@;
put 'c2UsZWUsdGUsb2UsVVs5XSwyMzM2NTUyODc5LDEyKSxvZT1WKG9lLHNlLGVlLHRlLFVbMTBdLDQyOTQ5MjUyMzMsMTcpLHRlPVYodGUsb2Usc2UsZWUsVVsxMV0sMjMwNDU2MzEzNCwyMiksZWU9VihlZSx0ZSxvZSxzZSxVWzEyXSwxODA0NjAzNjgyLDcpLHNlPVYoc2UsZWUsdGUsb2UsVVsx'@;
put 'M10sNDI1NDYyNjE5NSwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzE0XSwyNzkyOTY1MDA2LDE3KSxlZT1CKGVlLHRlPVYodGUsb2Usc2UsZWUsVVsxNV0sMTIzNjUzNTMyOSwyMiksb2Usc2UsVVsxXSw0MTI5MTcwNzg2LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVs2XSwzMjI1NDY1NjY0LDkpLG9l'@;
put 'PUIob2Usc2UsZWUsdGUsVVsxMV0sNjQzNzE3NzEzLDE0KSx0ZT1CKHRlLG9lLHNlLGVlLFVbMF0sMzkyMTA2OTk5NCwyMCksZWU9QihlZSx0ZSxvZSxzZSxVWzVdLDM1OTM0MDg2MDUsNSksc2U9QihzZSxlZSx0ZSxvZSxVWzEwXSwzODAxNjA4Myw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbMTVd'@;
put 'LDM2MzQ0ODg5NjEsMTQpLHRlPUIodGUsb2Usc2UsZWUsVVs0XSwzODg5NDI5NDQ4LDIwKSxlZT1CKGVlLHRlLG9lLHNlLFVbOV0sNTY4NDQ2NDM4LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVsxNF0sMzI3NTE2MzYwNiw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbM10sNDEwNzYwMzMzNSwxNCksdGU9'@;
put 'Qih0ZSxvZSxzZSxlZSxVWzhdLDExNjM1MzE1MDEsMjApLGVlPUIoZWUsdGUsb2Usc2UsVVsxM10sMjg1MDI4NTgyOSw1KSxzZT1CKHNlLGVlLHRlLG9lLFVbMl0sNDI0MzU2MzUxMiw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbN10sMTczNTMyODQ3MywxNCksZWU9WShlZSx0ZT1CKHRlLG9lLHNl'@;
put 'LGVlLFVbMTJdLDIzNjgzNTk1NjIsMjApLG9lLHNlLFVbNV0sNDI5NDU4ODczOCw0KSxzZT1ZKHNlLGVlLHRlLG9lLFVbOF0sMjI3MjM5MjgzMywxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzExXSwxODM5MDMwNTYyLDE2KSx0ZT1ZKHRlLG9lLHNlLGVlLFVbMTRdLDQyNTk2NTc3NDAsMjMpLGVl'@;
put 'PVkoZWUsdGUsb2Usc2UsVVsxXSwyNzYzOTc1MjM2LDQpLHNlPVkoc2UsZWUsdGUsb2UsVVs0XSwxMjcyODkzMzUzLDExKSxvZT1ZKG9lLHNlLGVlLHRlLFVbN10sNDEzOTQ2OTY2NCwxNiksdGU9WSh0ZSxvZSxzZSxlZSxVWzEwXSwzMjAwMjM2NjU2LDIzKSxlZT1ZKGVlLHRlLG9lLHNlLFVb'@;
put 'MTNdLDY4MTI3OTE3NCw0KSxzZT1ZKHNlLGVlLHRlLG9lLFVbMF0sMzkzNjQzMDA3NCwxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzNdLDM1NzI0NDUzMTcsMTYpLHRlPVkodGUsb2Usc2UsZWUsVVs2XSw3NjAyOTE4OSwyMyksZWU9WShlZSx0ZSxvZSxzZSxVWzldLDM2NTQ2MDI4MDksNCksc2U9'@;
put 'WShzZSxlZSx0ZSxvZSxVWzEyXSwzODczMTUxNDYxLDExKSxvZT1ZKG9lLHNlLGVlLHRlLFVbMTVdLDUzMDc0MjUyMCwxNiksZWU9WChlZSx0ZT1ZKHRlLG9lLHNlLGVlLFVbMl0sMzI5OTYyODY0NSwyMyksb2Usc2UsVVswXSw0MDk2MzM2NDUyLDYpLHNlPVgoc2UsZWUsdGUsb2UsVVs3XSwx'@;
put 'MTI2ODkxNDE1LDEwKSxvZT1YKG9lLHNlLGVlLHRlLFVbMTRdLDI4Nzg2MTIzOTEsMTUpLHRlPVgodGUsb2Usc2UsZWUsVVs1XSw0MjM3NTMzMjQxLDIxKSxlZT1YKGVlLHRlLG9lLHNlLFVbMTJdLDE3MDA0ODU1NzEsNiksc2U9WChzZSxlZSx0ZSxvZSxVWzNdLDIzOTk5ODA2OTAsMTApLG9l'@;
put 'PVgob2Usc2UsZWUsdGUsVVsxMF0sNDI5MzkxNTc3MywxNSksdGU9WCh0ZSxvZSxzZSxlZSxVWzFdLDIyNDAwNDQ0OTcsMjEpLGVlPVgoZWUsdGUsb2Usc2UsVVs4XSwxODczMzEzMzU5LDYpLHNlPVgoc2UsZWUsdGUsb2UsVVsxNV0sNDI2NDM1NTU1MiwxMCksb2U9WChvZSxzZSxlZSx0ZSxV'@;
put 'WzZdLDI3MzQ3Njg5MTYsMTUpLHRlPVgodGUsb2Usc2UsZWUsVVsxM10sMTMwOTE1MTY0OSwyMSksZWU9WChlZSx0ZSxvZSxzZSxVWzRdLDQxNDk0NDQyMjYsNiksc2U9WChzZSxlZSx0ZSxvZSxVWzExXSwzMTc0NzU2OTE3LDEwKSxvZT1YKG9lLHNlLGVlLHRlLFVbMl0sNzE4Nzg3MjU5LDE1'@;
put 'KSx0ZT1YKHRlLG9lLHNlLGVlLFVbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK2VlfDAsdGhpcy5fYj10aGlzLl9iK3RlfDAsdGhpcy5fYz10aGlzLl9jK29lfDAsdGhpcy5fZD10aGlzLl9kK3NlfDB9LEUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9j'@;
put 'a1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1'@;
put 'NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgVT1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gVS53cml0ZUludDMyTEUodGhpcy5fYSww'@;
put 'KSxVLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLFUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksVS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksVX0sTS5leHBvcnRzPUV9LDMwNDc6KE0sTyxSKT0+e3ZhciB6PVIoNjI0MCksSz1SKDk5MzEpO2Z1bmN0aW9uIEkoayl7dGhpcy5yYW5kPWt8fG5l'@;
put 'dyBLLlJhbmR9TS5leHBvcnRzPUksSS5jcmVhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBJKGspfSxJLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKGspe3ZhciBFPWsuYml0TGVuZ3RoKCksaj1NYXRoLmNlaWwoRS84KTtkb3t2YXIgVj1uZXcgeih0aGlzLnJhbmQuZ2VuZXJhdGUo'@;
put 'aikpfXdoaWxlKFYuY21wKGspPj0wKTtyZXR1cm4gVn0sSS5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbihrLEUpe3ZhciBqPUUuc3ViKGspO3JldHVybiBrLmFkZCh0aGlzLl9yYW5kYmVsb3coaikpfSxJLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGssRSxqKXt2YXIgVj1rLmJpdExl'@;
put 'bmd0aCgpLEI9ei5tb250KGspLFk9bmV3IHooMSkudG9SZWQoQik7RXx8KEU9TWF0aC5tYXgoMSxWLzQ4fDApKTtmb3IodmFyIFg9ay5zdWJuKDEpLFU9MDshWC50ZXN0bihVKTtVKyspO2Zvcih2YXIgcT1rLnNocm4oVSksZWU9WC50b1JlZChCKTtFPjA7RS0tKXt2YXIgdGU9dGhpcy5fcmFu'@;
put 'ZHJhbmdlKG5ldyB6KDIpLFgpO2omJmoodGUpO3ZhciBvZT10ZS50b1JlZChCKS5yZWRQb3cocSk7aWYoMCE9PW9lLmNtcChZKSYmMCE9PW9lLmNtcChlZSkpe2Zvcih2YXIgc2U9MTtzZTxVO3NlKyspe2lmKDA9PT0ob2U9b2UucmVkU3FyKCkpLmNtcChZKSlyZXR1cm4hMTtpZigwPT09b2Uu'@;
put 'Y21wKGVlKSlicmVha31pZihzZT09PVUpcmV0dXJuITF9fXJldHVybiEwfSxJLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKGssRSl7dmFyIGo9ay5iaXRMZW5ndGgoKSxWPXoubW9udChrKSxCPW5ldyB6KDEpLnRvUmVkKFYpO0V8fChFPU1hdGgubWF4KDEsai80OHwwKSk7Zm9yKHZh'@;
put 'ciBZPWsuc3VibigxKSxYPTA7IVkudGVzdG4oWCk7WCsrKTtmb3IodmFyIFU9ay5zaHJuKFgpLHE9WS50b1JlZChWKTtFPjA7RS0tKXt2YXIgZWU9dGhpcy5fcmFuZHJhbmdlKG5ldyB6KDIpLFkpLHRlPWsuZ2NkKGVlKTtpZigwIT09dGUuY21wbigxKSlyZXR1cm4gdGU7dmFyIG9lPWVlLnRv'@;
put 'UmVkKFYpLnJlZFBvdyhVKTtpZigwIT09b2UuY21wKEIpJiYwIT09b2UuY21wKHEpKXtmb3IodmFyIHNlPTE7c2U8WDtzZSsrKXtpZigwPT09KG9lPW9lLnJlZFNxcigpKS5jbXAoQikpcmV0dXJuIG9lLmZyb21SZWQoKS5zdWJuKDEpLmdjZChrKTtpZigwPT09b2UuY21wKHEpKWJyZWFrfWlm'@;
put 'KHNlPT09WClyZXR1cm4ob2U9b2UucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZChrKX19cmV0dXJuITF9fSw2MjQwOmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0'@;
put 'aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4g'@;
put 'Zzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4'@;
put 'cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDY2MTkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4g'@;
put 'Uz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyks'@;
put 'Sj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcu'@;
put 'Y29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1'@;
put 'bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3Zh'@;
put 'ciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5'@;
put 'KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRo'@;
put 'aXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJh'@;
put 'eSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5j'@;
put 'ZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18'@;
put 'PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9'@;
put 'Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVu'@;
put 'Z3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9'@;
put 'QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9Njcx'@;
put 'MDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9'@;
put 'Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0'@;
put 'aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJp'@;
put 'cCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZl'@;
put 'LGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109'@;
put 'MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1b'@;
put 'IiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwz'@;
put 'MzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQx'@;
put 'MDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5u'@;
put 'ZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKysp'@;
put 'e2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHww'@;
put 'LExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4'@;
put 'Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0'@;
put 'aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1V'@;
put 'W2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMu'@;
put 'aXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMu'@;
put 'd29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBj'@;
put 'YW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lk'@;
put 'IDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgo'@;
put 'KSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUo'@;
put 'KTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxm'@;
put 'ZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49'@;
put 'NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEy'@;
put 'NyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0'@;
put 'dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2'@;
put 'IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3Ru'@;
put 'KGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9'@;
put 'PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1'@;
put 'bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5p'@;
put 'b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0s'@;
put 'RS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7'@;
put 'Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxn'@;
put 'Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhp'@;
put 'cy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5s'@;
put 'ZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUu'@;
put 'cHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0w'@;
put 'fE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyks'@;
put 'dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5f'@;
put 'ZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJu'@;
put 'IHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7'@;
put 'dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVu'@;
put 'Z3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3'@;
put 'KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09'@;
put 'Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5j'@;
put 'dGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0x'@;
put 'LHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtK'@;
put 'Kyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxl'@;
put 'bmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9l'@;
put 'Pj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsUWU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEz'@;
put 'LG90PTB8Sls3XSx1dD04MTkxJm90LE10PW90Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhu'@;
put 'PTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxRdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhu'@;
put 'PTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixGbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVs'@;
put 'KExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11'@;
put 'bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5p'@;
put 'bXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKFFlLGVuKXwwLHc9TWF0aC5pbXVsKFFlLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgo'@;
put 'dz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoUWUsZnQpfDAsdz13K01hdGguaW11bChRZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBV'@;
put 'aT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9'@;
put 'TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxm'@;
put 'bil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChRZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFFlLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXww'@;
put 'LHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFF0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFF0KXwwKSsocD4+PjEzKXww'@;
put 'KSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11'@;
put 'bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFllLG1uKXwwKStNYXRoLmltdWwoUWUsTnQpfDAsdz13K01hdGguaW11bChRZSxtbil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUXQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFF0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRo'@;
put 'LmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVu'@;
put 'KSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwo'@;
put 'YmUsbW4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFF0KXwwKStNYXRoLmltdWwoUWUsSXQpfDAsdz13K01hdGguaW11bChRZSxRdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxw'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRo'@;
put 'LmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFF0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFll'@;
put 'LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChRZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4p'@;
put 'fDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9Njcx'@;
put 'MDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwo'@;
put 'aHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUXQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFF0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQ'@;
put 'ZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoUWUsenQpfDAsdz13K01hdGguaW11bChRZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8'@;
put 'PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11'@;
put 'bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10'@;
put 'LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwoaHQsSXQp'@;
put 'fDAsdz13K01hdGguaW11bChodCxRdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8'@;
put 'MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoUWUsc24pfDAsdz13K01hdGguaW11bChRZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoamUsRm4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXww'@;
put 'O2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXww'@;
put 'LHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxRdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsUXQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13'@;
put 'K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0'@;
put 'aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoUWUsJHQpfDAsdz13K01hdGguaW11bChRZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXww'@;
put 'KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmlt'@;
put 'dWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKHV0LFF0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxRdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGgu'@;
put 'aW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGgu'@;
put 'aW11bChZZSxqbil8MCkrTWF0aC5pbXVsKFFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChRZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixO'@;
put 'dCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFF0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixRdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDAp'@;
put 'K01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0oZmUr'@;
put 'KHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5p'@;
put 'bXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxRdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixRdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2'@;
put 'PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytN'@;
put 'YXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwo'@;
put 'Ym4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJu'@;
put 'KXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwo'@;
put 'VWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShw'@;
put 'PU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0'@;
put 'LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxu'@;
put 'KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01h'@;
put 'dGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGgu'@;
put 'aW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4s'@;
put 'Rm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3'@;
put 'MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEw'@;
put 'ODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8s'@;
put 'ZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBl'@;
put 'Lm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAu'@;
put 'bmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxl'@;
put 'bmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4'@;
put 'NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUu'@;
put 'cHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEm'@;
put 'Zyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlz'@;
put 'LnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7'@;
put 'dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxRZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9UWUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYo'@;
put 'UWU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9UWUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUu'@;
put 'Y29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlv'@;
put 'bihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0'@;
put 'MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBl'@;
put 'LnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYp'@;
put 'LHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0'@;
put 'aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2Vd'@;
put 'O2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZl'@;
put 'PWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8o'@;
put 'ZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11'@;
put 'bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMm'@;
put 'Qyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11'@;
put 'bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zv'@;
put 'cih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMs'@;
put 'dj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0ko'@;
put 'Im51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndv'@;
put 'cmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhp'@;
put 'cy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVv'@;
put 'ZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNb'@;
put 'ZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3Ro'@;
put 'PTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsr'@;
put 'XT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNo'@;
put 'bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0s'@;
put 'RS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8'@;
put 'ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUg'@;
put 'bnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBl'@;
put 'Lm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10'@;
put 'aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3Rv'@;
put 'dHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jk'@;
put 'c1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhp'@;
put 'cy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9'@;
put 'MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRz'@;
put 'W3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09'@;
put 'PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5'@;
put 'cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9'@;
put 'di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwx'@;
put 'LG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8'@;
put 'MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0'@;
put 'cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMu'@;
put 'bmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1v'@;
put 'ZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBd'@;
put 'KSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90'@;
put 'eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZt'@;
put 'b2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9'@;
put 'Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0'@;
put 'JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhp'@;
put 'cy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1n'@;
put 'Lm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigp'@;
put 'OylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+'@;
put 'MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOyko'@;
put 'dy5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2Nk'@;
put 'OlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5l'@;
put 'dyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4o'@;
put 'MSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1'@;
put 'YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBD'@;
put 'PXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVu'@;
put 'KCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2Nk'@;
put 'KGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhp'@;
put 'cztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3Rv'@;
put 'dHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMp'@;
put 'cmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpD'@;
put 'fSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZl'@;
put 'PzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxw'@;
put 'PTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0s'@;
put 'RS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90'@;
put 'eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlz'@;
put 'LnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90'@;
put 'eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJv'@;
put 'dG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJv'@;
put 'dG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBv'@;
put 'bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f'@;
put 'dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlz'@;
put 'KX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigp'@;
put 'e3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93'@;
put 'KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5u'@;
put 'PXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlv'@;
put 'biBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNh'@;
put 'bGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmlu'@;
put 'dj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0'@;
put 'aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykp'@;
put 'LmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMu'@;
put 'X3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zv'@;
put 'cih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNb'@;
put 'Qy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxL'@;
put 'PWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4'@;
put 'NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5s'@;
put 'ZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7'@;
put 'aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJv'@;
put 'dG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcu'@;
put 'bmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMu'@;
put 'cHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5h'@;
put 'ZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBT'@;
put 'PWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQo'@;
put 'dGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyks'@;
put 'dGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmlt'@;
put 'b2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8o'@;
put 'KSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09'@;
put 'di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlz'@;
put 'KTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9'@;
put 'PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmlu'@;
put 'dm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3'@;
put 'IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1sw'@;
put 'XSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8'@;
put 'MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5j'@;
put 'bG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1pl'@;
put 'cm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCks'@;
put 'dz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUo'@;
put 'MCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAu'@;
put 'aXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5t'@;
put 'ZChNKSx0aGlzKX0sOTc0NjpNPT57ZnVuY3Rpb24gTyhSLHope2lmKCFSKXRocm93IG5ldyBFcnJvcih6fHwiQXNzZXJ0aW9uIGZhaWxlZCIpfU0uZXhwb3J0cz1PLE8uZXF1YWw9ZnVuY3Rpb24oUix6LEspe2lmKFIhPXopdGhyb3cgbmV3IEVycm9yKEt8fCJBc3NlcnRpb24gZmFpbGVkOiAi'@;
put 'K1IrIiAhPSAiK3opfX0sNDUwNDooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUj1PO2Z1bmN0aW9uIHooSSl7cmV0dXJuIDE9PT1JLmxlbmd0aD8iMCIrSTpJfWZ1bmN0aW9uIEsoSSl7Zm9yKHZhciBrPSIiLEU9MDtFPEkubGVuZ3RoO0UrKylrKz16KElbRV0udG9TdHJpbmcoMTYpKTtyZXR1'@;
put 'cm4ga31SLnRvQXJyYXk9ZnVuY3Rpb24oSSxrKXtpZihBcnJheS5pc0FycmF5KEkpKXJldHVybiBJLnNsaWNlKCk7aWYoIUkpcmV0dXJuW107dmFyIEU9W107aWYoInN0cmluZyIhPXR5cGVvZiBJKXtmb3IodmFyIGo9MDtqPEkubGVuZ3RoO2orKylFW2pdPTB8SVtqXTtyZXR1cm4gRX1pZigi'@;
put 'aGV4Ij09PWspZm9yKChJPUkucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoST0iMCIrSSksaj0wO2o8SS5sZW5ndGg7ais9MilFLnB1c2gocGFyc2VJbnQoSVtqXStJW2orMV0sMTYpKTtlbHNlIGZvcihqPTA7ajxJLmxlbmd0aDtqKyspe3ZhciBWPUkuY2hhckNv'@;
put 'ZGVBdChqKSxCPVY+PjgsWT0yNTUmVjtCP0UucHVzaChCLFkpOkUucHVzaChZKX1yZXR1cm4gRX0sUi56ZXJvMj16LFIudG9IZXg9SyxSLmVuY29kZT1mdW5jdGlvbihJLGspe3JldHVybiJoZXgiPT09az9LKEkpOkl9fSwxMTcxOihNLE8sUik9Pnt2YXIgej1SKDUxMDgpO00uZXhwb3J0cz1l'@;
put 'ZSxlZS5NaW5pbWF0Y2g9dGU7dmFyIEs9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFIoMjUyMCl9Y2F0Y2h7fX0oKXx8e3NlcDoiLyJ9O2VlLnNlcD1LLnNlcDt2YXIgST1lZS5HTE9CU1RBUj10ZS5HTE9CU1RBUj17fSxrPVIoMzY0NCksRT17IiEiOntvcGVuOiIoPzooPyEoPzoiLGNsb3NlOiIp'@;
put 'KVteL10qPykifSwiPyI6e29wZW46Iig/OiIsY2xvc2U6Iik/In0sIisiOntvcGVuOiIoPzoiLGNsb3NlOiIpKyJ9LCIqIjp7b3BlbjoiKD86IixjbG9zZToiKSoifSwiQCI6e29wZW46Iig/OiIsY2xvc2U6IikifX0saj0iW14vXSIsVj1qKyIqPyIsWD0iKCkuKnt9Kz9bXV4kXFwhIi5zcGxp'@;
put 'dCgiIikucmVkdWNlKGZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gdWVbY2VdPSEwLHVlfSx7fSksVT0vXC8rLztmdW5jdGlvbiBxKHVlLGNlKXtjZT1jZXx8e307dmFyIEc9e307cmV0dXJuIE9iamVjdC5rZXlzKHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe0dbYl09dWVbYl19KSxPYmplY3Qua2V5'@;
put 'cyhjZSkuZm9yRWFjaChmdW5jdGlvbihiKXtHW2JdPWNlW2JdfSksR31mdW5jdGlvbiBlZSh1ZSxjZSxHKXtyZXR1cm4gc2UoY2UpLEd8fChHPXt9KSwhKCFHLm5vY29tbWVudCYmIiMiPT09Y2UuY2hhckF0KDApKSYmbmV3IHRlKGNlLEcpLm1hdGNoKHVlKX1mdW5jdGlvbiB0ZSh1ZSxjZSl7'@;
put 'aWYoISh0aGlzIGluc3RhbmNlb2YgdGUpKXJldHVybiBuZXcgdGUodWUsY2UpO3NlKHVlKSxjZXx8KGNlPXt9KSx1ZT11ZS50cmltKCksY2UuYWxsb3dXaW5kb3dzRXNjYXBlfHwiLyI9PT1LLnNlcHx8KHVlPXVlLnNwbGl0KEsuc2VwKS5qb2luKCIvIikpLHRoaXMub3B0aW9ucz1jZSx0aGlz'@;
put 'LnNldD1bXSx0aGlzLnBhdHRlcm49dWUsdGhpcy5yZWdleHA9bnVsbCx0aGlzLm5lZ2F0ZT0hMSx0aGlzLmNvbW1lbnQ9ITEsdGhpcy5lbXB0eT0hMSx0aGlzLnBhcnRpYWw9ISFjZS5wYXJ0aWFsLHRoaXMubWFrZSgpfWZ1bmN0aW9uIG9lKHVlLGNlKXtyZXR1cm4gY2V8fChjZT10aGlzIGlu'@;
put 'c3RhbmNlb2YgdGU/dGhpcy5vcHRpb25zOnt9KSxzZSh1ZT12b2lkIDA9PT11ZT90aGlzLnBhdHRlcm46dWUpLGNlLm5vYnJhY2V8fCEvXHsoPzooPyFceykuKSpcfS8udGVzdCh1ZSk/W3VlXTprKHVlKX1lZS5maWx0ZXI9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBjZT1jZXx8e30sZnVuY3Rp'@;
put 'b24oRyxiLEQpe3JldHVybiBlZShHLHVlLGNlKX19LGVlLmRlZmF1bHRzPWZ1bmN0aW9uKHVlKXtpZighdWV8fCJvYmplY3QiIT10eXBlb2YgdWV8fCFPYmplY3Qua2V5cyh1ZSkubGVuZ3RoKXJldHVybiBlZTt2YXIgY2U9ZWUsRz1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIGNlKGIsRCxxKHVl'@;
put 'LEgpKX07cmV0dXJuKEcuTWluaW1hdGNoPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG5ldyBjZS5NaW5pbWF0Y2goYixxKHVlLEQpKX0pLmRlZmF1bHRzPWZ1bmN0aW9uKGIpe3JldHVybiBjZS5kZWZhdWx0cyhxKHVlLGIpKS5NaW5pbWF0Y2h9LEcuZmlsdGVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJu'@;
put 'IGNlLmZpbHRlcihiLHEodWUsRCkpfSxHLmRlZmF1bHRzPWZ1bmN0aW9uKGIpe3JldHVybiBjZS5kZWZhdWx0cyhxKHVlLGIpKX0sRy5tYWtlUmU9ZnVuY3Rpb24oYixEKXtyZXR1cm4gY2UubWFrZVJlKGIscSh1ZSxEKSl9LEcuYnJhY2VFeHBhbmQ9ZnVuY3Rpb24oYixEKXtyZXR1cm4gY2Uu'@;
put 'YnJhY2VFeHBhbmQoYixxKHVlLEQpKX0sRy5tYXRjaD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIGNlLm1hdGNoKGIsRCxxKHVlLEgpKX0sR30sdGUuZGVmYXVsdHM9ZnVuY3Rpb24odWUpe3JldHVybiBlZS5kZWZhdWx0cyh1ZSkuTWluaW1hdGNofSx0ZS5wcm90b3R5cGUuZGVidWc9ZnVuY3Rp'@;
put 'b24oKXt9LHRlLnByb3RvdHlwZS5tYWtlPWZ1bmN0aW9uKCl7dmFyIHVlPXRoaXMucGF0dGVybixjZT10aGlzLm9wdGlvbnM7aWYoY2Uubm9jb21tZW50fHwiIyIhPT11ZS5jaGFyQXQoMCkpaWYodWUpe3RoaXMucGFyc2VOZWdhdGUoKTt2YXIgRz10aGlzLmdsb2JTZXQ9dGhpcy5icmFjZUV4'@;
put 'cGFuZCgpO2NlLmRlYnVnJiYodGhpcy5kZWJ1Zz1mdW5jdGlvbigpe3ouZXJyb3IuYXBwbHkoeixhcmd1bWVudHMpfSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sRyksRz10aGlzLmdsb2JQYXJ0cz1HLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5zcGxpdChVKX0pLHRoaXMuZGVidWcodGhp'@;
put 'cy5wYXR0ZXJuLEcpLEc9Ry5tYXAoZnVuY3Rpb24oYixELEgpe3JldHVybiBiLm1hcCh0aGlzLnBhcnNlLHRoaXMpfSx0aGlzKSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybixHKSxHPUcuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybi0xPT09Yi5pbmRleE9mKCExKX0pLHRoaXMuZGVidWcodGhp'@;
put 'cy5wYXR0ZXJuLEcpLHRoaXMuc2V0PUd9ZWxzZSB0aGlzLmVtcHR5PSEwO2Vsc2UgdGhpcy5jb21tZW50PSEwfSx0ZS5wcm90b3R5cGUucGFyc2VOZWdhdGU9ZnVuY3Rpb24oKXt2YXIgdWU9dGhpcy5wYXR0ZXJuLGNlPSExLGI9MDtpZighdGhpcy5vcHRpb25zLm5vbmVnYXRlKXtmb3IodmFy'@;
put 'IEQ9MCxIPXVlLmxlbmd0aDtEPEgmJiIhIj09PXVlLmNoYXJBdChEKTtEKyspY2U9IWNlLGIrKztiJiYodGhpcy5wYXR0ZXJuPXVlLnN1YnN0cihiKSksdGhpcy5uZWdhdGU9Y2V9fSxlZS5icmFjZUV4cGFuZD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIG9lKHVlLGNlKX0sdGUucHJvdG90eXBl'@;
put 'LmJyYWNlRXhwYW5kPW9lO3ZhciBzZT1mdW5jdGlvbih1ZSl7aWYoInN0cmluZyIhPXR5cGVvZiB1ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHBhdHRlcm4iKTtpZih1ZS5sZW5ndGg+NjU1MzYpdGhyb3cgbmV3IFR5cGVFcnJvcigicGF0dGVybiBpcyB0b28gbG9uZyIpfTt0ZS5w'@;
put 'cm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odWUsY2Upe3NlKHVlKTt2YXIgRz10aGlzLm9wdGlvbnM7aWYoIioqIj09PXVlKXtpZighRy5ub2dsb2JzdGFyKXJldHVybiBJO3VlPSIqIn1pZigiIj09PXVlKXJldHVybiIiO3ZhciBiLEQ9IiIsSD0hIUcubm9jYXNlLE49ITEsZz1bXSxDPVtdLFM9'@;
put 'ITEsdj0tMSxwPS0xLHc9Ii4iPT09dWUuY2hhckF0KDApPyIiOkcuZG90PyIoPyEoPzpefFxcLylcXC57MSwyfSg/OiR8XFwvKSkiOiIoPyFcXC4pIixKPXRoaXM7ZnVuY3Rpb24gbmUoKXtpZihiKXtzd2l0Y2goYil7Y2FzZSIqIjpEKz1WLEg9ITA7YnJlYWs7Y2FzZSI/IjpEKz1qLEg9ITA7'@;
put 'YnJlYWs7ZGVmYXVsdDpEKz0iXFwiK2J9Si5kZWJ1ZygiY2xlYXJTdGF0ZUNoYXIgJWogJWoiLGIsRCksYj0hMX19Zm9yKHZhciBkZSxmZT0wLHhlPXVlLmxlbmd0aDtmZTx4ZSYmKGRlPXVlLmNoYXJBdChmZSkpO2ZlKyspaWYodGhpcy5kZWJ1ZygiJXNcdCVzICVzICVqIix1ZSxmZSxELGRl'@;
put 'KSxOJiZYW2RlXSlEKz0iXFwiK2RlLE49ITE7ZWxzZSBzd2l0Y2goZGUpe2Nhc2UiLyI6cmV0dXJuITE7Y2FzZSJcXCI6bmUoKSxOPSEwO2NvbnRpbnVlO2Nhc2UiPyI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiQCI6Y2FzZSIhIjppZih0aGlzLmRlYnVnKCIlc1x0JXMgJXMgJWogPC0tIHN0YXRl'@;
put 'Q2hhciIsdWUsZmUsRCxkZSksUyl7dGhpcy5kZWJ1ZygiICBpbiBjbGFzcyIpLCIhIj09PWRlJiZmZT09PXArMSYmKGRlPSJeIiksRCs9ZGU7Y29udGludWV9Si5kZWJ1ZygiY2FsbCBjbGVhclN0YXRlQ2hhciAlaiIsYiksbmUoKSxiPWRlLEcubm9leHQmJm5lKCk7Y29udGludWU7Y2FzZSIo'@;
put 'IjppZihTKXtEKz0iKCI7Y29udGludWV9aWYoIWIpe0QrPSJcXCgiO2NvbnRpbnVlfWcucHVzaCh7dHlwZTpiLHN0YXJ0OmZlLTEscmVTdGFydDpELmxlbmd0aCxvcGVuOkVbYl0ub3BlbixjbG9zZTpFW2JdLmNsb3NlfSksdGhpcy5kZWJ1ZygicGxUeXBlICVqICVqIixiLEQrPSIhIj09PWI/'@;
put 'Iig/Oig/ISg/OiI6Iig/OiIpLGI9ITE7Y29udGludWU7Y2FzZSIpIjppZihTfHwhZy5sZW5ndGgpe0QrPSJcXCkiO2NvbnRpbnVlfW5lKCksSD0hMDt2YXIgTGU9Zy5wb3AoKTtEKz1MZS5jbG9zZSwiISI9PT1MZS50eXBlJiZDLnB1c2goTGUpLExlLnJlRW5kPUQubGVuZ3RoO2NvbnRpbnVl'@;
put 'O2Nhc2UifCI6aWYoU3x8IWcubGVuZ3RofHxOKXtEKz0iXFx8IixOPSExO2NvbnRpbnVlfW5lKCksRCs9InwiO2NvbnRpbnVlO2Nhc2UiWyI6aWYobmUoKSxTKXtEKz0iXFwiK2RlO2NvbnRpbnVlfVM9ITAscD1mZSx2PUQubGVuZ3RoLEQrPWRlO2NvbnRpbnVlO2Nhc2UiXSI6aWYoZmU9PT1w'@;
put 'KzF8fCFTKXtEKz0iXFwiK2RlLE49ITE7Y29udGludWV9dmFyIEZlPXVlLnN1YnN0cmluZyhwKzEsZmUpO3RyeXtSZWdFeHAoIlsiK0ZlKyJdIil9Y2F0Y2h7dmFyIE9lPXRoaXMucGFyc2UoRmUsaGUpO0Q9RC5zdWJzdHIoMCx2KSsiXFxbIitPZVswXSsiXFxdIixIPUh8fE9lWzFdLFM9ITE7'@;
put 'Y29udGludWV9SD0hMCxTPSExLEQrPWRlO2NvbnRpbnVlO2RlZmF1bHQ6bmUoKSxOP049ITE6IVhbZGVdfHwiXiI9PT1kZSYmU3x8KEQrPSJcXCIpLEQrPWRlfWZvcihTJiYoRmU9dWUuc3Vic3RyKHArMSksT2U9dGhpcy5wYXJzZShGZSxoZSksRD1ELnN1YnN0cigwLHYpKyJcXFsiK09lWzBd'@;
put 'LEg9SHx8T2VbMV0pLExlPWcucG9wKCk7TGU7TGU9Zy5wb3AoKSl7dmFyIGplPUQuc2xpY2UoTGUucmVTdGFydCtMZS5vcGVuLmxlbmd0aCk7dGhpcy5kZWJ1Zygic2V0dGluZyB0YWlsIixELExlKSxqZT1qZS5yZXBsYWNlKC8oKD86XFx7Mn0pezAsNjR9KShcXD8pXHwvZyxmdW5jdGlvbihN'@;
put 'ZSxEZSx6ZSl7cmV0dXJuIHplfHwoemU9IlxcIiksRGUrRGUremUrInwifSksdGhpcy5kZWJ1ZygidGFpbD0lalxuICAgJXMiLGplLGplLExlLEQpO3ZhciBXZT0iKiI9PT1MZS50eXBlP1Y6Ij8iPT09TGUudHlwZT9qOiJcXCIrTGUudHlwZTtIPSEwLEQ9RC5zbGljZSgwLExlLnJlU3RhcnQp'@;
put 'K1dlKyJcXCgiK2plfW5lKCksTiYmKEQrPSJcXFxcIik7dmFyIEtlPSExO3N3aXRjaChELmNoYXJBdCgwKSl7Y2FzZSJbIjpjYXNlIi4iOmNhc2UiKCI6S2U9ITB9Zm9yKHZhciBZZT1DLmxlbmd0aC0xO1llPi0xO1llLS0pe3ZhciBRZT1DW1llXSxsdD1ELnNsaWNlKDAsUWUucmVTdGFydCks'@;
put 'UGU9RC5zbGljZShRZS5yZVN0YXJ0LFFlLnJlRW5kLTgpLGJlPUQuc2xpY2UoUWUucmVFbmQtOCxRZS5yZUVuZCksQWU9RC5zbGljZShRZS5yZUVuZCk7YmUrPUFlO3ZhciBUZT1sdC5zcGxpdCgiKCIpLmxlbmd0aC0xLHFlPUFlO2ZvcihmZT0wO2ZlPFRlO2ZlKyspcWU9cWUucmVwbGFjZSgv'@;
put 'XClbKyo/XT8vLCIiKTt2YXIgWGU9IiI7IiI9PT0oQWU9cWUpJiZjZSE9PWhlJiYoWGU9IiQiKSxEPWx0K1BlK0FlK1hlK2JlfWlmKCIiIT09RCYmSCYmKEQ9Iig/PS4pIitEKSxLZSYmKEQ9dytEKSxjZT09PWhlKXJldHVybltELEhdO2lmKCFIKXJldHVybiB1ZS5yZXBsYWNlKC9cXCguKS9n'@;
put 'LCIkMSIpO3ZhciBVZT1HLm5vY2FzZT8iaSI6IiI7dHJ5e3ZhciBodD1uZXcgUmVnRXhwKCJeIitEKyIkIixVZSl9Y2F0Y2h7cmV0dXJuIG5ldyBSZWdFeHAoIiQuIil9cmV0dXJuIGh0Ll9nbG9iPXVlLGh0Ll9zcmM9RCxodH07dmFyIGhlPXt9O2VlLm1ha2VSZT1mdW5jdGlvbih1ZSxjZSl7'@;
put 'cmV0dXJuIG5ldyB0ZSh1ZSxjZXx8e30pLm1ha2VSZSgpfSx0ZS5wcm90b3R5cGUubWFrZVJlPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWdleHB8fCExPT09dGhpcy5yZWdleHApcmV0dXJuIHRoaXMucmVnZXhwO3ZhciB1ZT10aGlzLnNldDtpZighdWUubGVuZ3RoKXJldHVybiB0aGlzLnJlZ2V4'@;
put 'cD0hMSx0aGlzLnJlZ2V4cDt2YXIgY2U9dGhpcy5vcHRpb25zLEc9Y2Uubm9nbG9ic3Rhcj9WOmNlLmRvdD8iKD86KD8hKD86XFwvfF4pKD86XFwuezEsMn0pKCR8XFwvKSkuKSo/IjoiKD86KD8hKD86XFwvfF4pXFwuKS4pKj8iLGI9Y2Uubm9jYXNlPyJpIjoiIixEPXVlLm1hcChmdW5jdGlv'@;
put 'bihIKXtyZXR1cm4gSC5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIE49PT1JP0c6InN0cmluZyI9PXR5cGVvZiBOP04ucmVwbGFjZSgvWy1bXF17fSgpKis/LixcXF4kfCNcc10vZywiXFwkJiIpOk4uX3NyY30pLmpvaW4oIlxcLyIpfSkuam9pbigifCIpO0Q9Il4oPzoiK0QrIikkIix0aGlzLm5l'@;
put 'Z2F0ZSYmKEQ9Il4oPyEiK0QrIikuKiQiKTt0cnl7dGhpcy5yZWdleHA9bmV3IFJlZ0V4cChELGIpfWNhdGNoe3RoaXMucmVnZXhwPSExfXJldHVybiB0aGlzLnJlZ2V4cH0sZWUubWF0Y2g9ZnVuY3Rpb24odWUsY2UsRyl7dmFyIGI9bmV3IHRlKGNlLEc9R3x8e30pO3JldHVybiB1ZT11ZS5m'@;
put 'aWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIGIubWF0Y2goRCl9KSxiLm9wdGlvbnMubm9udWxsJiYhdWUubGVuZ3RoJiZ1ZS5wdXNoKGNlKSx1ZX0sdGUucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHVlLGNlKXtpZih2b2lkIDA9PT1jZSYmKGNlPXRoaXMucGFydGlhbCksdGhpcy5kZWJ1Zygi'@;
put 'bWF0Y2giLHVlLHRoaXMucGF0dGVybiksdGhpcy5jb21tZW50KXJldHVybiExO2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI9PT11ZTtpZigiLyI9PT11ZSYmY2UpcmV0dXJuITA7dmFyIEc9dGhpcy5vcHRpb25zOyIvIiE9PUsuc2VwJiYodWU9dWUuc3BsaXQoSy5zZXApLmpvaW4oIi8iKSksdWU9'@;
put 'dWUuc3BsaXQoVSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sInNwbGl0Iix1ZSk7dmFyIGIsRCxIPXRoaXMuc2V0O2Zvcih0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwic2V0IixIKSxEPXVlLmxlbmd0aC0xO0Q+PTAmJiEoYj11ZVtEXSk7RC0tKTtmb3IoRD0wO0Q8SC5sZW5ndGg7RCsrKXt2'@;
put 'YXIgTj1IW0RdLGc9dWU7aWYoRy5tYXRjaEJhc2UmJjE9PT1OLmxlbmd0aCYmKGc9W2JdKSx0aGlzLm1hdGNoT25lKGcsTixjZSkpcmV0dXJuISFHLmZsaXBOZWdhdGV8fCF0aGlzLm5lZ2F0ZX1yZXR1cm4hRy5mbGlwTmVnYXRlJiZ0aGlzLm5lZ2F0ZX0sdGUucHJvdG90eXBlLm1hdGNoT25l'@;
put 'PWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiPXRoaXMub3B0aW9uczt0aGlzLmRlYnVnKCJtYXRjaE9uZSIse3RoaXM6dGhpcyxmaWxlOnVlLHBhdHRlcm46Y2V9KSx0aGlzLmRlYnVnKCJtYXRjaE9uZSIsdWUubGVuZ3RoLGNlLmxlbmd0aCk7Zm9yKHZhciBEPTAsSD0wLE49dWUubGVuZ3RoLGc9'@;
put 'Y2UubGVuZ3RoO0Q8TiYmSDxnO0QrKyxIKyspe3RoaXMuZGVidWcoIm1hdGNoT25lIGxvb3AiKTt2YXIgQyxTPWNlW0hdLHY9dWVbRF07aWYodGhpcy5kZWJ1ZyhjZSxTLHYpLCExPT09UylyZXR1cm4hMTtpZihTPT09SSl7dGhpcy5kZWJ1ZygiR0xPQlNUQVIiLFtjZSxTLHZdKTt2YXIgcD1E'@;
put 'LHc9SCsxO2lmKHc9PT1nKXtmb3IodGhpcy5kZWJ1ZygiKiogYXQgdGhlIGVuZCIpO0Q8TjtEKyspaWYoIi4iPT09dWVbRF18fCIuLiI9PT11ZVtEXXx8IWIuZG90JiYiLiI9PT11ZVtEXS5jaGFyQXQoMCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKDtwPE47KXt2YXIgSj11ZVtwXTtpZih0aGlz'@;
put 'LmRlYnVnKCJcbmdsb2JzdGFyIHdoaWxlIix1ZSxwLGNlLHcsSiksdGhpcy5tYXRjaE9uZSh1ZS5zbGljZShwKSxjZS5zbGljZSh3KSxHKSlyZXR1cm4gdGhpcy5kZWJ1ZygiZ2xvYnN0YXIgZm91bmQgbWF0Y2ghIixwLE4sSiksITA7aWYoIi4iPT09Snx8Ii4uIj09PUp8fCFiLmRvdCYmIi4i'@;
put 'PT09Si5jaGFyQXQoMCkpe3RoaXMuZGVidWcoImRvdCBkZXRlY3RlZCEiLHVlLHAsY2Usdyk7YnJlYWt9dGhpcy5kZWJ1ZygiZ2xvYnN0YXIgc3dhbGxvdyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZSIpLHArK31yZXR1cm4hKCFHfHwodGhpcy5kZWJ1ZygiXG4+Pj4gbm8gbWF0Y2gsIHBhcnRp'@;
put 'YWw/Iix1ZSxwLGNlLHcpLHAhPT1OKSl9aWYoInN0cmluZyI9PXR5cGVvZiBTP3RoaXMuZGVidWcoInN0cmluZyBtYXRjaCIsUyx2LEM9dj09PVMpOihDPXYubWF0Y2goUyksdGhpcy5kZWJ1ZygicGF0dGVybiBtYXRjaCIsUyx2LEMpKSwhQylyZXR1cm4hMX1pZihEPT09TiYmSD09PWcpcmV0'@;
put 'dXJuITA7aWYoRD09PU4pcmV0dXJuIEc7aWYoSD09PWcpcmV0dXJuIEQ9PT1OLTEmJiIiPT09dWVbRF07dGhyb3cgbmV3IEVycm9yKCJ3dGY/Iil9fSw0MjQ0Ok09PnsidXNlIHN0cmljdCI7dmFyIE89ZnVuY3Rpb24oUil7cmV0dXJuIFIhPVJ9O00uZXhwb3J0cz1mdW5jdGlvbihSLHope3Jl'@;
put 'dHVybiAwPT09UiYmMD09PXo/MS9SPT0xL3o6Uj09PXp8fCEoIU8oUil8fCFPKHopKX19LDYwOTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4OSksSz1SKDU1NTkpLEk9Uig0MjQ0KSxrPVIoNTYyNCksRT1SKDIyODEpLGo9SyhrKCksT2JqZWN0KTt6KGose2dldFBvbHlmaWxs'@;
put 'OmssaW1wbGVtZW50YXRpb246SSxzaGltOkV9KSxNLmV4cG9ydHM9an0sNTYyNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI0NCk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6en19LDIyODE6KE0sTyxS'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU2MjQpLEs9Uig0Mjg5KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST16KCk7cmV0dXJuIEsoT2JqZWN0LHtpczpJfSx7aXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzIT09SX19KSxJfX0sODk4NzooTSxPLFIpPT57InVzZSBzdHJpY3Qi'@;
put 'O3ZhciB6O2lmKCFPYmplY3Qua2V5cyl7dmFyIEs9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxJPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaz1SKDE0MTQpLEU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxqPSFFLmNhbGwoe3RvU3RyaW5nOm51bGx9'@;
put 'LCJ0b1N0cmluZyIpLFY9RS5jYWxsKGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIiksQj1bInRvU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLFk9ZnVu'@;
put 'Y3Rpb24ocSl7dmFyIGVlPXEuY29uc3RydWN0b3I7cmV0dXJuIGVlJiZlZS5wcm90b3R5cGU9PT1xfSxYPXskYXBwbGljYXRpb25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZyYW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlu'@;
put 'bmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNoYW5nZTohMCwkb25tb3pmdWxsc2NyZWVuZXJyb3I6ITAsJG91dGVySGVpZ2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwkcGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEw'@;
put 'LCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxmOiEwLCR3ZWJraXRJbmRleGVkREI6ITAsJHdlYmtpdFN0b3JhZ2VJbmZvOiEwLCR3aW5kb3c6ITB9LFU9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIHEgaW4gd2luZG93KXRyeXtpZighWFsiJCIr'@;
put 'cV0mJksuY2FsbCh3aW5kb3cscSkmJm51bGwhPT13aW5kb3dbcV0mJiJvYmplY3QiPT10eXBlb2Ygd2luZG93W3FdKXRyeXtZKHdpbmRvd1txXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVybiEwfXJldHVybiExfSgpO3o9ZnVuY3Rpb24ocSl7dmFyIGVlPW51bGwhPT1xJiYib2JqZWN0'@;
put 'Ij09dHlwZW9mIHEsdGU9IltvYmplY3QgRnVuY3Rpb25dIj09PUkuY2FsbChxKSxvZT1rKHEpLHNlPWVlJiYiW29iamVjdCBTdHJpbmddIj09PUkuY2FsbChxKSxoZT1bXTtpZighZWUmJiF0ZSYmIW9lKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1v'@;
put 'YmplY3QiKTt2YXIgdWU9ViYmdGU7aWYoc2UmJnEubGVuZ3RoPjAmJiFLLmNhbGwocSwwKSlmb3IodmFyIGNlPTA7Y2U8cS5sZW5ndGg7KytjZSloZS5wdXNoKFN0cmluZyhjZSkpO2lmKG9lJiZxLmxlbmd0aD4wKWZvcih2YXIgRz0wO0c8cS5sZW5ndGg7KytHKWhlLnB1c2goU3RyaW5nKEcp'@;
put 'KTtlbHNlIGZvcih2YXIgYiBpbiBxKXVlJiYicHJvdG90eXBlIj09PWJ8fCFLLmNhbGwocSxiKXx8aGUucHVzaChTdHJpbmcoYikpO2lmKGopZm9yKHZhciBEPWZ1bmN0aW9uKE4pe2lmKHR5cGVvZiB3aW5kb3c+InUifHwhVSlyZXR1cm4gWShOKTt0cnl7cmV0dXJuIFkoTil9Y2F0Y2h7cmV0'@;
put 'dXJuITF9fShxKSxIPTA7SDxCLmxlbmd0aDsrK0gpRCYmImNvbnN0cnVjdG9yIj09PUJbSF18fCFLLmNhbGwocSxCW0hdKXx8aGUucHVzaChCW0hdKTtyZXR1cm4gaGV9fU0uZXhwb3J0cz16fSwyMjE1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9QXJyYXkucHJvdG90eXBlLnNsaWNl'@;
put 'LEs9UigxNDE0KSxJPU9iamVjdC5rZXlzLGs9ST9mdW5jdGlvbihqKXtyZXR1cm4gSShqKX06Uig4OTg3KSxFPU9iamVjdC5rZXlzO2suc2hpbT1mdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKXt2YXIgaj1mdW5jdGlvbigpe3ZhciBWPU9iamVjdC5rZXlzKGFyZ3VtZW50cyk7cmV0dXJuIFYm'@;
put 'JlYubGVuZ3RoPT09YXJndW1lbnRzLmxlbmd0aH0oMSwyKTtqfHwoT2JqZWN0LmtleXM9ZnVuY3Rpb24oVil7cmV0dXJuIEsoVik/RSh6LmNhbGwoVikpOkUoVil9KX1lbHNlIE9iamVjdC5rZXlzPWs7cmV0dXJuIE9iamVjdC5rZXlzfHxrfSxNLmV4cG9ydHM9a30sMTQxNDpNPT57InVzZSBz'@;
put 'dHJpY3QiO3ZhciBPPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7TS5leHBvcnRzPWZ1bmN0aW9uKFIpe3ZhciB6PU8uY2FsbChSKSxLPSJbb2JqZWN0IEFyZ3VtZW50c10iPT09ejtyZXR1cm4gS3x8KEs9IltvYmplY3QgQXJyYXldIiE9PXomJm51bGwhPT1SJiYib2JqZWN0Ij09dHlwZW9m'@;
put 'IFImJiJudW1iZXIiPT10eXBlb2YgUi5sZW5ndGgmJlIubGVuZ3RoPj0wJiYiW29iamVjdCBGdW5jdGlvbl0iPT09Ty5jYWxsKFIuY2FsbGVlKSksS319LDc3ODooTSxPLFIpPT57dmFyIHo9UigyNDc5KTtmdW5jdGlvbiBLKGspe3ZhciBFPWZ1bmN0aW9uKCl7cmV0dXJuIEUuY2FsbGVkP0Uu'@;
put 'dmFsdWU6KEUuY2FsbGVkPSEwLEUudmFsdWU9ay5hcHBseSh0aGlzLGFyZ3VtZW50cykpfTtyZXR1cm4gRS5jYWxsZWQ9ITEsRX1mdW5jdGlvbiBJKGspe3ZhciBFPWZ1bmN0aW9uKCl7aWYoRS5jYWxsZWQpdGhyb3cgbmV3IEVycm9yKEUub25jZUVycm9yKTtyZXR1cm4gRS5jYWxsZWQ9ITAs'@;
put 'RS52YWx1ZT1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIEUub25jZUVycm9yPShrLm5hbWV8fCJGdW5jdGlvbiB3cmFwcGVkIHdpdGggYG9uY2VgIikrIiBzaG91bGRuJ3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIixFLmNhbGxlZD0hMSxFfU0uZXhwb3J0cz16KEspLE0uZXhw'@;
put 'b3J0cy5zdHJpY3Q9eihJKSxLLnByb3RvPUsoZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJvbmNlIix7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzKX0sY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0'@;
put 'aW9uLnByb3RvdHlwZSwib25jZVN0cmljdCIse3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9LDc0MzU6KE0sTyk9PntPLmVuZGlhbm5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxPLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVv'@;
put 'ZiBsb2NhdGlvbjwidSI/bG9jYXRpb24uaG9zdG5hbWU6IiJ9LE8ubG9hZGF2Zz1mdW5jdGlvbigpe3JldHVybltdfSxPLnVwdGltZT1mdW5jdGlvbigpe3JldHVybiAwfSxPLmZyZWVtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sTy50b3RhbG1lbT1mdW5jdGlvbigp'@;
put 'e3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxPLmNwdXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sTy50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIkJyb3dzZXIifSxPLnJlbGVhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSI/bmF2aWdhdG9yLmFwcFZlcnNpb246IiJ9LE8u'@;
put 'bmV0d29ya0ludGVyZmFjZXM9Ty5nZXROZXR3b3JrSW50ZXJmYWNlcz1mdW5jdGlvbigpe3JldHVybnt9fSxPLmFyY2g9ZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdCJ9LE8ucGxhdGZvcm09ZnVuY3Rpb24oKXtyZXR1cm4iYnJvd3NlciJ9LE8udG1wZGlyPU8udG1wRGlyPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIi90bXAifSxPLkVPTD0iXG4iLE8uaG9tZWRpcj1mdW5jdGlvbigpe3JldHVybiIvIn19LDI4MTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk4MDkpO08uY2VydGlmaWNhdGU9UigxOTM0KTt2YXIgSz16LmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24o'@;
put 'KXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlz'@;
put 'LmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtPLlJTQVByaXZhdGVLZXk9Szt2YXIgST16LmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlv'@;
put 'bigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7Ty5SU0FQdWJsaWNLZXk9STt2YXIgaz16LmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhp'@;
put 'cy5rZXkoImFsZ29yaXRobSIpLnVzZShFKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO08uUHVibGljS2V5PWs7dmFyIEU9ei5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIp'@;
put 'Lm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIiku'@;
put 'aW50KCkpLm9wdGlvbmFsKCkpfSksaj16LmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEUpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0'@;
put 'cigpKX0pO08uUHJpdmF0ZUtleT1qO3ZhciBWPXouZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5z'@;
put 'ZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEo'@;
put 'KS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO08uRW5jcnlwdGVkUHJpdmF0ZUtleT1WO3ZhciBCPXouZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigp'@;
put 'e3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtPLkRTQVBy'@;
put 'aXZhdGVLZXk9QixPLkRTQXBhcmFtPXouZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIFk9ei5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRl'@;
put 'S2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShYKSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtPLkVDUHJpdmF0ZUtleT1ZO3ZhciBYPXouZGVmaW5lKCJFQ1BhcmFt'@;
put 'ZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KTtPLnNpZ25hdHVyZT16LmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sMTkz'@;
put 'NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTgwOSksSz16LmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksST16LmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVl'@;
put 'IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxrPXouZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmpp'@;
put 'ZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksRT16LmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShr'@;
put 'KSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLGo9ei5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihJKX0pLFY9ei5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2Yoail9KSxCPXou'@;
put 'ZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShWKX0pfSksWT16LmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShLKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51'@;
put 'c2UoSykpfSksWD16LmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxVPXouZGVmaW5l'@;
put 'KCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoayksdGhpcy5rZXkoImlz'@;
put 'c3VlciIpLnVzZShCKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoWSksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKEUpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFs'@;
put 'KCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihYKS5vcHRpb25hbCgpKX0pLHE9ei5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlz'@;
put 'LnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoVSksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShrKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTtNLmV4cG9ydHM9cX0sNzYzMTooTSxPLFIpPT57dmFyIHo9L1Byb2MtVHlw'@;
put 'ZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sSz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sST0vXi0t'@;
put 'LS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyKy89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxrPVIoMzA0OCksRT1SKDQ2OTYpLGo9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKFYsQil7dmFyIFksWD1WLnRvU3RyaW5nKCksVT1YLm1h'@;
put 'dGNoKHopO2lmKFUpe3ZhciBxPSJhZXMiK1VbMV0sZWU9ai5mcm9tKFVbMl0sImhleCIpLHRlPWouZnJvbShVWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iiksb2U9ayhCLGVlLnNsaWNlKDAsOCkscGFyc2VJbnQoVVsxXSwxMCkpLmtleSxzZT1bXSxoZT1FLmNyZWF0ZURlY2lw'@;
put 'aGVyaXYocSxvZSxlZSk7c2UucHVzaChoZS51cGRhdGUodGUpKSxzZS5wdXNoKGhlLmZpbmFsKCkpLFk9ai5jb25jYXQoc2UpfWVsc2V7dmFyIHVlPVgubWF0Y2goSSk7WT1qLmZyb20odWVbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOlgubWF0Y2goSylb'@;
put 'MV0sZGF0YTpZfX19LDk4MDooTSxPLFIpPT57dmFyIHo9UigyODE4KSxLPVIoMjU2MiksST1SKDc2MzEpLGs9Uig0Njk2KSxFPVIoNTYzMiksaj1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBWKEIpe3ZhciBZOyJvYmplY3QiIT10eXBlb2YgQnx8ai5pc0J1ZmZlcihCKXx8KFk9Qi5wYXNzcGhy'@;
put 'YXNlLEI9Qi5rZXkpLCJzdHJpbmciPT10eXBlb2YgQiYmKEI9ai5mcm9tKEIpKTt2YXIgWCxVLG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTixnLHE9SShCLFkpLGVlPXEudGFnLHRlPXEuZGF0YTtzd2l0Y2goZWUpe2Nhc2UiQ0VSVElGSUNBVEUiOlU9ei5jZXJ0aWZpY2F0ZS5kZWNvZGUodGUs'@;
put 'ImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFV8fChVPXouUHVibGljS2V5LmRlY29kZSh0ZSwiZGVyIikpLFg9VS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6'@;
put 'cmV0dXJuIHouUlNBUHVibGljS2V5LmRlY29kZShVLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIFUuc3ViamVjdFByaXZhdGVLZXk9VS5zdWJqZWN0UHVibGljS2V5LHt0eXBlOiJlYyIsZGF0YTpVfTtjYXNlIjEuMi44NDAuMTAw'@;
put 'NDAuNC4xIjpyZXR1cm4gVS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9ei5EU0FwYXJhbS5kZWNvZGUoVS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6VS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkg'@;
put 'aWQgIitYKX1jYXNlIkVOQ1JZUFRFRCBQUklWQVRFIEtFWSI6c2U9WSxoZT0ob2U9dGU9ei5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIikpLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCx1ZT1wYXJzZUludChvZS5hbGdvcml0aG0uZGVjcnlwdC5rZGUu'@;
put 'a2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLGNlPUtbb2UuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbigiLiIpXSxHPW9lLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixiPW9lLnN1YmplY3RQcml2YXRlS2V5LEQ9cGFyc2VJbnQoY2Uuc3BsaXQoIi0iKVsxXSwx'@;
put 'MCkvOCxIPUUucGJrZGYyU3luYyhzZSxoZSx1ZSxELCJzaGExIiksTj1rLmNyZWF0ZURlY2lwaGVyaXYoY2UsSCxHKSwoZz1bXSkucHVzaChOLnVwZGF0ZShiKSksZy5wdXNoKE4uZmluYWwoKSksdGU9ai5jb25jYXQoZyk7Y2FzZSJQUklWQVRFIEtFWSI6c3dpdGNoKFg9KFU9ei5Qcml2YXRl'@;
put 'S2V5LmRlY29kZSh0ZSwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gei5SU0FQcml2YXRlS2V5LmRlY29kZShVLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1'@;
put 'cm57Y3VydmU6VS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTp6LkVDUHJpdmF0ZUtleS5kZWNvZGUoVS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFUuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT16LkRTQXBh'@;
put 'cmFtLmRlY29kZShVLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6VS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitYKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gei5SU0FQdWJsaWNLZXku'@;
put 'ZGVjb2RlKHRlLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIHouUlNBUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpO2Nhc2UiRFNBIFBSSVZBVEUgS0VZIjpyZXR1cm57dHlwZToiZHNhIixwYXJhbXM6ei5EU0FQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIil9O2Nhc2Ui'@;
put 'RUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZToodGU9ei5FQ1ByaXZhdGVLZXkuZGVjb2RlKHRlLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OnRlLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrZWUpfX1NLmV4cG9y'@;
put 'dHM9VixWLnNpZ25hdHVyZT16LnNpZ25hdHVyZX0sNDA5NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7ZnVuY3Rpb24gSyhrKXtyZXR1cm4iLyI9PT1rLmNoYXJBdCgwKX1mdW5jdGlvbiBJKGspe3ZhciBFPS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwv'@;
put 'XStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/KSQvLmV4ZWMoayksaj1FWzFdfHwiIixWPSEoIWp8fCI6Ij09PWouY2hhckF0KDEpKTtyZXR1cm4hKCFFWzJdJiYhVil9TS5leHBvcnRzPSJ3aW4zMiI9PT16LnBsYXRmb3JtP0k6SyxNLmV4cG9ydHMucG9zaXg9SyxNLmV4cG9ydHMud2lu'@;
put 'MzI9SX0sMTcyNTpNPT57TS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE8sUil7Ty5zdXBlcl89UixPLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6TyxlbnVtZXJhYmxlOiExLHdyaXRhYmxl'@;
put 'OiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rpb24oTyxSKXtPLnN1cGVyXz1SO3ZhciB6PWZ1bmN0aW9uKCl7fTt6LnByb3RvdHlwZT1SLnByb3RvdHlwZSxPLnByb3RvdHlwZT1uZXcgeixPLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PfX0sMjk3NDpNPT57TS5leHBvcnRzPWZ1bmN0aW9u'@;
put 'KE8pe3JldHVybiBPJiYib2JqZWN0Ij09dHlwZW9mIE8mJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLnJlYWRVSW50OH19LDgwNTk6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9LyVb'@;
put 'c2RqJV0vZztPLmZvcm1hdD1mdW5jdGlvbihTKXtpZighc2UoUykpe2Zvcih2YXIgdj1bXSxwPTA7cDxhcmd1bWVudHMubGVuZ3RoO3ArKyl2LnB1c2goaihhcmd1bWVudHNbcF0pKTtyZXR1cm4gdi5qb2luKCIgIil9cD0xO2Zvcih2YXIgdz1hcmd1bWVudHMsSj13Lmxlbmd0aCxuZT1TdHJp'@;
put 'bmcoUykucmVwbGFjZShJLGZ1bmN0aW9uKGZlKXtpZigiJSUiPT09ZmUpcmV0dXJuIiUiO2lmKHA+PUopcmV0dXJuIGZlO3N3aXRjaChmZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyh3W3ArK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIod1twKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpT'@;
put 'T04uc3RyaW5naWZ5KHdbcCsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIGZlfX0pLGRlPXdbcF07cDxKO2RlPXdbKytwXSl0ZShkZSl8fCFjZShkZSk/bmUrPSIgIitkZTpuZSs9IiAiK2ooZGUpO3JldHVybiBuZX0sTy5kZXByZWNhdGU9ZnVuY3Rpb24oUyx2'@;
put 'KXtpZihoZShSLmcucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE8uZGVwcmVjYXRlKFMsdikuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PXoubm9EZXByZWNhdGlvbilyZXR1cm4gUzt2YXIgcD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighcCl7aWYoei50aHJvd0Rl'@;
put 'cHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcih2KTt6LnRyYWNlRGVwcmVjYXRpb24/Sy50cmFjZSh2KTpLLmVycm9yKHYpLHA9ITB9cmV0dXJuIFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGssRT17fTtmdW5jdGlvbiBqKFMsdil7dmFyIHA9e3NlZW46W10sc3R5bGl6ZTpCfTtyZXR1'@;
put 'cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKHAuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYocC5jb2xvcnM9YXJndW1lbnRzWzNdKSxlZSh2KT9wLnNob3dIaWRkZW49djp2JiZPLl9leHRlbmQocCx2KSxoZShwLnNob3dIaWRkZW4pJiYocC5zaG93SGlkZGVuPSEx'@;
put 'KSxoZShwLmRlcHRoKSYmKHAuZGVwdGg9MiksaGUocC5jb2xvcnMpJiYocC5jb2xvcnM9ITEpLGhlKHAuY3VzdG9tSW5zcGVjdCkmJihwLmN1c3RvbUluc3BlY3Q9ITApLHAuY29sb3JzJiYocC5zdHlsaXplPVYpLFkocCxTLHAuZGVwdGgpfWZ1bmN0aW9uIFYoUyx2KXt2YXIgcD1qLnN0eWxl'@;
put 'c1t2XTtyZXR1cm4gcD8iXHgxYlsiK2ouY29sb3JzW3BdWzBdKyJtIitTKyJceDFiWyIrai5jb2xvcnNbcF1bMV0rIm0iOlN9ZnVuY3Rpb24gQihTLHYpe3JldHVybiBTfWZ1bmN0aW9uIFkoUyx2LHApe2lmKFMuY3VzdG9tSW5zcGVjdCYmdiYmRCh2Lmluc3BlY3QpJiZ2Lmluc3BlY3QhPT1P'@;
put 'Lmluc3BlY3QmJighdi5jb25zdHJ1Y3Rvcnx8di5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT12KSl7dmFyIHc9di5pbnNwZWN0KHAsUyk7cmV0dXJuIHNlKHcpfHwodz1ZKFMsdyxwKSksd312YXIgSj1mdW5jdGlvbihqZSxXZSl7aWYoaGUoV2UpKXJldHVybiBqZS5zdHlsaXplKCJ1bmRlZmlu'@;
put 'ZWQiLCJ1bmRlZmluZWQiKTtpZihzZShXZSkpe3ZhciBLZT0iJyIrSlNPTi5zdHJpbmdpZnkoV2UpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIGplLnN0eWxpemUoS2UsInN0cmluZyIpfXJldHVybiBvZShX'@;
put 'ZSk/amUuc3R5bGl6ZSgiIitXZSwibnVtYmVyIik6ZWUoV2UpP2plLnN0eWxpemUoIiIrV2UsImJvb2xlYW4iKTp0ZShXZSk/amUuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KFMsdik7aWYoSilyZXR1cm4gSjt2YXIgV2UsbmU9T2JqZWN0LmtleXModiksZGU9KFdlPXt9LG5lLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oS2UsWWUpe1dlW0tlXT0hMH0pLFdlKTtpZihTLnNob3dIaWRkZW4mJihuZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2KSksYih2KSYmKG5lLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8bmUuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIFgodik7'@;
put 'aWYoMD09PW5lLmxlbmd0aCl7aWYoRCh2KSlyZXR1cm4gUy5zdHlsaXplKCJbRnVuY3Rpb24iKyh2Lm5hbWU/IjogIit2Lm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKHVlKHYpKXJldHVybiBTLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLCJyZWdleHAiKTtp'@;
put 'ZihHKHYpKXJldHVybiBTLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSwiZGF0ZSIpO2lmKGIodikpcmV0dXJuIFgodil9dmFyIHhlLExlPSIiLEZlPSExLE9lPVsieyIsIn0iXTtyZXR1cm4gcSh2KSYmKEZlPSEwLE9lPVsiWyIsIl0iXSksRCh2KSYmKExlPSIgW0Z1'@;
put 'bmN0aW9uIisodi5uYW1lPyI6ICIrdi5uYW1lOiIiKSsiXSIpLHVlKHYpJiYoTGU9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSksRyh2KSYmKExlPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHYpKSxiKHYpJiYoTGU9IiAiK1godikpLDAhPT1uZS5s'@;
put 'ZW5ndGh8fEZlJiYwIT12Lmxlbmd0aD9wPDA/dWUodik/Uy5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSwicmVnZXhwIik6Uy5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooUy5zZWVuLnB1c2godikseGU9RmU/ZnVuY3Rpb24oamUsV2UsS2UsWWUsUWUp'@;
put 'e2Zvcih2YXIgbHQ9W10sUGU9MCxiZT1XZS5sZW5ndGg7UGU8YmU7KytQZSlDKFdlLFN0cmluZyhQZSkpP2x0LnB1c2goVShqZSxXZSxLZSxZZSxTdHJpbmcoUGUpLCEwKSk6bHQucHVzaCgiIik7cmV0dXJuIFFlLmZvckVhY2goZnVuY3Rpb24oQWUpe0FlLm1hdGNoKC9eXGQrJC8pfHxsdC5w'@;
put 'dXNoKFUoamUsV2UsS2UsWWUsQWUsITApKX0pLGx0fShTLHYscCxkZSxuZSk6bmUubWFwKGZ1bmN0aW9uKGplKXtyZXR1cm4gVShTLHYscCxkZSxqZSxGZSl9KSxTLnNlZW4ucG9wKCksZnVuY3Rpb24oamUsV2UsS2Upe3JldHVybiBqZS5yZWR1Y2UoZnVuY3Rpb24oUWUsbHQpe3JldHVybiBs'@;
put 'dC5pbmRleE9mKCJcbiIpLFFlK2x0LnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MD9LZVswXSsoIiI9PT1XZT8iIjpXZSsiXG4gIikrIiAiK2plLmpvaW4oIixcbiAgIikrIiAiK0tlWzFdOktlWzBdK1dlKyIgIitqZS5qb2luKCIsICIpKyIgIitLZVsxXX0o'@;
put 'eGUsTGUsT2UpKTpPZVswXStMZStPZVsxXX1mdW5jdGlvbiBYKFMpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTKSsiXSJ9ZnVuY3Rpb24gVShTLHYscCx3LEosbmUpe3ZhciBkZSxmZSx4ZTtpZigoeGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2'@;
put 'LEopfHx7dmFsdWU6dltKXX0pLmdldD9mZT1TLnN0eWxpemUoeGUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTp4ZS5zZXQmJihmZT1TLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxDKHcsSil8fChkZT0iWyIrSisiXSIpLGZlfHwoUy5zZWVuLmlu'@;
put 'ZGV4T2YoeGUudmFsdWUpPDA/KGZlPXRlKHApP1koUyx4ZS52YWx1ZSxudWxsKTpZKFMseGUudmFsdWUscC0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKGZlPW5lP2ZlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihMZSl7cmV0dXJuIiAgIitMZX0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIr'@;
put 'ZmUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKExlKXtyZXR1cm4iICAgIitMZX0pLmpvaW4oIlxuIikpOmZlPVMuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksaGUoZGUpKXtpZihuZSYmSi5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gZmU7KGRlPUpTT04uc3RyaW5naWZ5KCIiK0op'@;
put 'KS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhkZT1kZS5zdWJzdHIoMSxkZS5sZW5ndGgtMiksZGU9Uy5zdHlsaXplKGRlLCJuYW1lIikpOihkZT1kZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiks'@;
put 'ZGU9Uy5zdHlsaXplKGRlLCJzdHJpbmciKSl9cmV0dXJuIGRlKyI6ICIrZmV9ZnVuY3Rpb24gcShTKXtyZXR1cm4gQXJyYXkuaXNBcnJheShTKX1mdW5jdGlvbiBlZShTKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBTfWZ1bmN0aW9uIHRlKFMpe3JldHVybiBudWxsPT09U31mdW5jdGlvbiBv'@;
put 'ZShTKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFN9ZnVuY3Rpb24gc2UoUyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTfWZ1bmN0aW9uIGhlKFMpe3JldHVybiB2b2lkIDA9PT1TfWZ1bmN0aW9uIHVlKFMpe3JldHVybiBjZShTKSYmIltvYmplY3QgUmVnRXhwXSI9PT1IKFMpfWZ1bmN0aW9u'@;
put 'IGNlKFMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgUyYmbnVsbCE9PVN9ZnVuY3Rpb24gRyhTKXtyZXR1cm4gY2UoUykmJiJbb2JqZWN0IERhdGVdIj09PUgoUyl9ZnVuY3Rpb24gYihTKXtyZXR1cm4gY2UoUykmJigiW29iamVjdCBFcnJvcl0iPT09SChTKXx8UyBpbnN0YW5jZW9mIEVycm9y'@;
put 'KX1mdW5jdGlvbiBEKFMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTfWZ1bmN0aW9uIEgoUyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTKX1mdW5jdGlvbiBOKFMpe3JldHVybiBTPDEwPyIwIitTLnRvU3RyaW5nKDEwKTpTLnRvU3RyaW5nKDEwKX1PLmRlYnVn'@;
put 'bG9nPWZ1bmN0aW9uKFMpe2lmKGhlKGspJiYoaz16LmVudi5OT0RFX0RFQlVHfHwiIiksUz1TLnRvVXBwZXJDYXNlKCksIUVbU10paWYobmV3IFJlZ0V4cCgiXFxiIitTKyJcXGIiLCJpIikudGVzdChrKSl7dmFyIHY9ei5waWQ7RVtTXT1mdW5jdGlvbigpe3ZhciBwPU8uZm9ybWF0LmFwcGx5'@;
put 'KE8sYXJndW1lbnRzKTtLLmVycm9yKCIlcyAlZDogJXMiLFMsdixwKX19ZWxzZSBFW1NdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gRVtTXX0sTy5pbnNwZWN0PWosai5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpb'@;
put 'MzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LGouc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVh'@;
put 'bjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sTy5pc0FycmF5PXEsTy5pc0Jvb2xlYW49ZWUsTy5pc051bGw9dGUsTy5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihTKXtyZXR1cm4gbnVs'@;
put 'bD09U30sTy5pc051bWJlcj1vZSxPLmlzU3RyaW5nPXNlLE8uaXNTeW1ib2w9ZnVuY3Rpb24oUyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBTfSxPLmlzVW5kZWZpbmVkPWhlLE8uaXNSZWdFeHA9dWUsTy5pc09iamVjdD1jZSxPLmlzRGF0ZT1HLE8uaXNFcnJvcj1iLE8uaXNGdW5jdGlvbj1E'@;
put 'LE8uaXNQcmltaXRpdmU9ZnVuY3Rpb24oUyl7cmV0dXJuIG51bGw9PT1TfHwiYm9vbGVhbiI9PXR5cGVvZiBTfHwibnVtYmVyIj09dHlwZW9mIFN8fCJzdHJpbmciPT10eXBlb2YgU3x8InN5bWJvbCI9PXR5cGVvZiBTfHx2b2lkIDA9PT1TfSxPLmlzQnVmZmVyPVIoMjk3NCk7dmFyIGc9WyJK'@;
put 'YW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBDKFMsdil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLHYpfU8ubG9nPWZ1bmN0aW9uKCl7dmFyIFMsdjtLLmxv'@;
put 'ZygiJXMgLSAlcyIsKHY9W04oKFM9bmV3IERhdGUpLmdldEhvdXJzKCkpLE4oUy5nZXRNaW51dGVzKCkpLE4oUy5nZXRTZWNvbmRzKCkpXS5qb2luKCI6IiksW1MuZ2V0RGF0ZSgpLGdbUy5nZXRNb250aCgpXSx2XS5qb2luKCIgIikpLE8uZm9ybWF0LmFwcGx5KE8sYXJndW1lbnRzKSl9LE8u'@;
put 'aW5oZXJpdHM9UigxNzI1KSxPLl9leHRlbmQ9ZnVuY3Rpb24oUyx2KXtpZighdnx8IWNlKHYpKXJldHVybiBTO2Zvcih2YXIgcD1PYmplY3Qua2V5cyh2KSx3PXAubGVuZ3RoO3ctLTspU1twW3ddXT12W3Bbd11dO3JldHVybiBTfX0sMjUyMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6'@;
put 'PVIoNDE1NSksSz0id2luMzIiPT09ei5wbGF0Zm9ybSxJPVIoODA1OSk7ZnVuY3Rpb24gayhvZSxzZSl7Zm9yKHZhciBoZT1bXSx1ZT0wO3VlPG9lLmxlbmd0aDt1ZSsrKXt2YXIgY2U9b2VbdWVdO2NlJiYiLiIhPT1jZSYmKCIuLiI9PT1jZT9oZS5sZW5ndGgmJiIuLiIhPT1oZVtoZS5sZW5n'@;
put 'dGgtMV0/aGUucG9wKCk6c2UmJmhlLnB1c2goIi4uIik6aGUucHVzaChjZSkpfXJldHVybiBoZX1mdW5jdGlvbiBFKG9lKXtmb3IodmFyIHNlPW9lLmxlbmd0aC0xLGhlPTA7aGU8PXNlJiYhb2VbaGVdO2hlKyspO2Zvcih2YXIgdWU9c2U7dWU+PTAmJiFvZVt1ZV07dWUtLSk7cmV0dXJuIDA9'@;
put 'PT1oZSYmdWU9PT1zZT9vZTpoZT51ZT9bXTpvZS5zbGljZShoZSx1ZSsxKX12YXIgaj0vXihbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNcU10qPykkLyxWPS9eKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXFxcL10rP3wpKFwuW14uXC9c'@;
put 'XF0qfCkpKD86W1xcXC9dKikkLyxCPXt9O2Z1bmN0aW9uIFkob2Upe3ZhciBzZT1qLmV4ZWMob2UpLGhlPShzZVsxXXx8IiIpKyhzZVsyXXx8IiIpLGNlPVYuZXhlYyhzZVszXXx8IiIpO3JldHVybltoZSxjZVsxXSxjZVsyXSxjZVszXV19ZnVuY3Rpb24gWChvZSl7dmFyIHNlPWouZXhlYyhv'@;
put 'ZSksaGU9c2VbMV18fCIiLHVlPSEhaGUmJiI6IiE9PWhlWzFdO3JldHVybntkZXZpY2U6aGUsaXNVbmM6dWUsaXNBYnNvbHV0ZTp1ZXx8ISFzZVsyXSx0YWlsOnNlWzNdfX1mdW5jdGlvbiBVKG9lKXtyZXR1cm4iXFxcXCIrb2UucmVwbGFjZSgvXltcXFwvXSsvLCIiKS5yZXBsYWNlKC9bXFxc'@;
put 'L10rL2csIlxcIil9Qi5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBvZT0iIixzZT0iIixoZT0hMSx1ZT1hcmd1bWVudHMubGVuZ3RoLTE7dWU+PS0xO3VlLS0pe3ZhciBjZTtpZih1ZT49MD9jZT1hcmd1bWVudHNbdWVdOm9lPyhjZT16LmVudlsiPSIrb2VdKSYmY2Uuc3Vic3RyKDAsMyku'@;
put 'dG9Mb3dlckNhc2UoKT09PW9lLnRvTG93ZXJDYXNlKCkrIlxcInx8KGNlPW9lKyJcXCIpOmNlPXouY3dkKCksIUkuaXNTdHJpbmcoY2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoY2Upe3ZhciBHPVgoY2UpLGI9'@;
put 'Ry5kZXZpY2UsRD1HLmlzVW5jLEg9Ry5pc0Fic29sdXRlLE49Ry50YWlsO2lmKCghYnx8IW9lfHxiLnRvTG93ZXJDYXNlKCk9PT1vZS50b0xvd2VyQ2FzZSgpKSYmKG9lfHwob2U9YiksaGV8fChzZT1OKyJcXCIrc2UsaGU9SCksb2UmJmhlKSlicmVha319cmV0dXJuIEQmJihvZT1VKG9lKSks'@;
put 'b2UrKGhlPyJcXCI6IiIpKyhzZT1rKHNlLnNwbGl0KC9bXFxcL10rLyksIWhlKS5qb2luKCJcXCIpKXx8Ii4ifSxCLm5vcm1hbGl6ZT1mdW5jdGlvbihvZSl7dmFyIHNlPVgob2UpLGhlPXNlLmRldmljZSx1ZT1zZS5pc1VuYyxjZT1zZS5pc0Fic29sdXRlLEc9c2UudGFpbCxiPS9bXFxcL10k'@;
put 'Ly50ZXN0KEcpO3JldHVybihHPWsoRy5zcGxpdCgvW1xcXC9dKy8pLCFjZSkuam9pbigiXFwiKSl8fGNlfHwoRz0iLiIpLEcmJmImJihHKz0iXFwiKSx1ZSYmKGhlPVUoaGUpKSxoZSsoY2U/IlxcIjoiIikrR30sQi5pc0Fic29sdXRlPWZ1bmN0aW9uKG9lKXtyZXR1cm4gWChvZSkuaXNBYnNv'@;
put 'bHV0ZX0sQi5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBvZT1bXSxzZT0wO3NlPGFyZ3VtZW50cy5sZW5ndGg7c2UrKyl7dmFyIGhlPWFyZ3VtZW50c1tzZV07aWYoIUkuaXNTdHJpbmcoaGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJp'@;
put 'bmdzIik7aGUmJm9lLnB1c2goaGUpfXZhciB1ZT1vZS5qb2luKCJcXCIpO3JldHVybi9eW1xcXC9dezJ9W15cXFwvXS8udGVzdChvZVswXSl8fCh1ZT11ZS5yZXBsYWNlKC9eW1xcXC9dezIsfS8sIlxcIikpLEIubm9ybWFsaXplKHVlKX0sQi5yZWxhdGl2ZT1mdW5jdGlvbihvZSxzZSl7b2U9'@;
put 'Qi5yZXNvbHZlKG9lKSxzZT1CLnJlc29sdmUoc2UpO2Zvcih2YXIgaGU9b2UudG9Mb3dlckNhc2UoKSx1ZT1zZS50b0xvd2VyQ2FzZSgpLGNlPUUoc2Uuc3BsaXQoIlxcIikpLEc9RShoZS5zcGxpdCgiXFwiKSksYj1FKHVlLnNwbGl0KCJcXCIpKSxEPU1hdGgubWluKEcubGVuZ3RoLGIubGVu'@;
put 'Z3RoKSxIPUQsTj0wO048RDtOKyspaWYoR1tOXSE9PWJbTl0pe0g9TjticmVha31pZigwPT1IKXJldHVybiBzZTt2YXIgZz1bXTtmb3IoTj1IO048Ry5sZW5ndGg7TisrKWcucHVzaCgiLi4iKTtyZXR1cm4oZz1nLmNvbmNhdChjZS5zbGljZShIKSkpLmpvaW4oIlxcIil9LEIuX21ha2VMb25n'@;
put 'PWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhvZSkpcmV0dXJuIG9lO2lmKCFvZSlyZXR1cm4iIjt2YXIgc2U9Qi5yZXNvbHZlKG9lKTtyZXR1cm4vXlthLXpBLVpdXDpcXC8udGVzdChzZSk/IlxcXFw/XFwiK3NlOi9eXFxcXFtePy5dLy50ZXN0KHNlKT8iXFxcXD9cXFVOQ1xcIitzZS5z'@;
put 'dWJzdHJpbmcoMik6b2V9LEIuZGlybmFtZT1mdW5jdGlvbihvZSl7dmFyIHNlPVkob2UpLGhlPXNlWzBdLHVlPXNlWzFdO3JldHVybiBoZXx8dWU/KHVlJiYodWU9dWUuc3Vic3RyKDAsdWUubGVuZ3RoLTEpKSxoZSt1ZSk6Ii4ifSxCLmJhc2VuYW1lPWZ1bmN0aW9uKG9lLHNlKXt2YXIgaGU9'@;
put 'WShvZSlbMl07cmV0dXJuIHNlJiZoZS5zdWJzdHIoLTEqc2UubGVuZ3RoKT09PXNlJiYoaGU9aGUuc3Vic3RyKDAsaGUubGVuZ3RoLXNlLmxlbmd0aCkpLGhlfSxCLmV4dG5hbWU9ZnVuY3Rpb24ob2Upe3JldHVybiBZKG9lKVszXX0sQi5mb3JtYXQ9ZnVuY3Rpb24ob2Upe2lmKCFJLmlzT2Jq'@;
put 'ZWN0KG9lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2Ygb2UpO2lmKCFJLmlzU3RyaW5nKG9lLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEg'@;
put 'c3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIrdHlwZW9mIG9lLnJvb3QpO3ZhciBoZT1vZS5kaXIsdWU9b2UuYmFzZXx8IiI7cmV0dXJuIGhlP2hlW2hlLmxlbmd0aC0xXT09PUIuc2VwP2hlK3VlOmhlK0Iuc2VwK3VlOnVlfSxCLnBhcnNlPWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhv'@;
put 'ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2Ygb2UpO3ZhciBzZT1ZKG9lKTtpZighc2V8fDQhPT1zZS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK29lKyInIik7cmV0'@;
put 'dXJue3Jvb3Q6c2VbMF0sZGlyOnNlWzBdK3NlWzFdLnNsaWNlKDAsLTEpLGJhc2U6c2VbMl0sZXh0OnNlWzNdLG5hbWU6c2VbMl0uc2xpY2UoMCxzZVsyXS5sZW5ndGgtc2VbM10ubGVuZ3RoKX19LEIuc2VwPSJcXCIsQi5kZWxpbWl0ZXI9IjsiO3ZhciBxPS9eKFwvP3wpKFtcc1xTXSo/KSgo'@;
put 'PzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxlZT17fTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIHEuZXhlYyhvZSkuc2xpY2UoMSl9ZWUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgb2U9IiIsc2U9ITEsaGU9YXJndW1lbnRzLmxlbmd0aC0xO2hlPj0tMSYm'@;
put 'IXNlO2hlLS0pe3ZhciB1ZT1oZT49MD9hcmd1bWVudHNbaGVdOnouY3dkKCk7aWYoIUkuaXNTdHJpbmcodWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7dWUmJihvZT11ZSsiLyIrb2Usc2U9Ii8iPT09dWVbMF0pfXJl'@;
put 'dHVybihzZT8iLyI6IiIpKyhvZT1rKG9lLnNwbGl0KCIvIiksIXNlKS5qb2luKCIvIikpfHwiLiJ9LGVlLm5vcm1hbGl6ZT1mdW5jdGlvbihvZSl7dmFyIHNlPWVlLmlzQWJzb2x1dGUob2UpLGhlPW9lJiYiLyI9PT1vZVtvZS5sZW5ndGgtMV07cmV0dXJuKG9lPWsob2Uuc3BsaXQoIi8iKSwh'@;
put 'c2UpLmpvaW4oIi8iKSl8fHNlfHwob2U9Ii4iKSxvZSYmaGUmJihvZSs9Ii8iKSwoc2U/Ii8iOiIiKStvZX0sZWUuaXNBYnNvbHV0ZT1mdW5jdGlvbihvZSl7cmV0dXJuIi8iPT09b2UuY2hhckF0KDApfSxlZS5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBvZT0iIixzZT0wO3NlPGFyZ3VtZW50'@;
put 'cy5sZW5ndGg7c2UrKyl7dmFyIGhlPWFyZ3VtZW50c1tzZV07aWYoIUkuaXNTdHJpbmcoaGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7aGUmJihvZSs9b2U/Ii8iK2hlOmhlKX1yZXR1cm4gZWUubm9ybWFsaXplKG9lKX0s'@;
put 'ZWUucmVsYXRpdmU9ZnVuY3Rpb24ob2Usc2Upe29lPWVlLnJlc29sdmUob2UpLnN1YnN0cigxKSxzZT1lZS5yZXNvbHZlKHNlKS5zdWJzdHIoMSk7Zm9yKHZhciBoZT1FKG9lLnNwbGl0KCIvIikpLHVlPUUoc2Uuc3BsaXQoIi8iKSksY2U9TWF0aC5taW4oaGUubGVuZ3RoLHVlLmxlbmd0aCks'@;
put 'Rz1jZSxiPTA7YjxjZTtiKyspaWYoaGVbYl0hPT11ZVtiXSl7Rz1iO2JyZWFrfXZhciBEPVtdO2ZvcihiPUc7YjxoZS5sZW5ndGg7YisrKUQucHVzaCgiLi4iKTtyZXR1cm4oRD1ELmNvbmNhdCh1ZS5zbGljZShHKSkpLmpvaW4oIi8iKX0sZWUuX21ha2VMb25nPWZ1bmN0aW9uKG9lKXtyZXR1'@;
put 'cm4gb2V9LGVlLmRpcm5hbWU9ZnVuY3Rpb24ob2Upe3ZhciBzZT10ZShvZSksaGU9c2VbMF0sdWU9c2VbMV07cmV0dXJuIGhlfHx1ZT8odWUmJih1ZT11ZS5zdWJzdHIoMCx1ZS5sZW5ndGgtMSkpLGhlK3VlKToiLiJ9LGVlLmJhc2VuYW1lPWZ1bmN0aW9uKG9lLHNlKXt2YXIgaGU9dGUob2Up'@;
put 'WzJdO3JldHVybiBzZSYmaGUuc3Vic3RyKC0xKnNlLmxlbmd0aCk9PT1zZSYmKGhlPWhlLnN1YnN0cigwLGhlLmxlbmd0aC1zZS5sZW5ndGgpKSxoZX0sZWUuZXh0bmFtZT1mdW5jdGlvbihvZSl7cmV0dXJuIHRlKG9lKVszXX0sZWUuZm9ybWF0PWZ1bmN0aW9uKG9lKXtpZighSS5pc09iamVj'@;
put 'dChvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIG9lKTtpZighSS5pc1N0cmluZyhvZS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0'@;
put 'cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBvZS5yb290KTtyZXR1cm4ob2UuZGlyP29lLmRpcitlZS5zZXA6IiIpKyhvZS5iYXNlfHwiIil9LGVlLnBhcnNlPWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRo'@;
put 'U3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2Ygb2UpO3ZhciBzZT10ZShvZSk7aWYoIXNlfHw0IT09c2UubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitvZSsiJyIpO3JldHVybiBzZVsxXT1zZVsxXXx8IiIsc2VbMl09c2VbMl18fCIiLHNl'@;
put 'WzNdPXNlWzNdfHwiIix7cm9vdDpzZVswXSxkaXI6c2VbMF0rc2VbMV0uc2xpY2UoMCwtMSksYmFzZTpzZVsyXSxleHQ6c2VbM10sbmFtZTpzZVsyXS5zbGljZSgwLHNlWzJdLmxlbmd0aC1zZVszXS5sZW5ndGgpfX0sZWUuc2VwPSIvIixlZS5kZWxpbWl0ZXI9IjoiLE0uZXhwb3J0cz1LP0I6'@;
put 'ZWUsTS5leHBvcnRzLnBvc2l4PWVlLE0uZXhwb3J0cy53aW4zMj1CfSw1NjMyOihNLE8sUik9PntPLnBia2RmMj1SKDg2MzgpLE8ucGJrZGYyU3luYz1SKDEyNTcpfSw4NjM4OihNLE8sUik9Pnt2YXIgeixLLEk9Uig5NTA5KS5CdWZmZXIsaz1SKDczNTcpLEU9UigyMzY4KSxqPVIoMTI1Nyks'@;
put 'Vj1SKDc3NzcpLEI9Ui5nLmNyeXB0byYmUi5nLmNyeXB0by5zdWJ0bGUsWT17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEt'@;
put 'NTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0sWD1bXTtmdW5jdGlvbiBVKCl7cmV0dXJuIEt8fChLPVIuZy5wcm9jZXNzJiZSLmcucHJvY2Vzcy5uZXh0VGljaz9SLmcucHJvY2Vzcy5uZXh0VGljazpSLmcucXVldWVNaWNyb3Rhc2s/Ui5nLnF1ZXVlTWljcm90YXNrOlIuZy5zZXRJ'@;
put 'bW1lZGlhdGU/Ui5nLnNldEltbWVkaWF0ZTpSLmcuc2V0VGltZW91dCl9ZnVuY3Rpb24gcShlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIEIuaW1wb3J0S2V5KCJyYXciLGVlLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIEIuZGVyaXZl'@;
put 'Qml0cyh7bmFtZToiUEJLREYyIixzYWx0OnRlLGl0ZXJhdGlvbnM6b2UsaGFzaDp7bmFtZTpoZX19LHVlLHNlPDwzKX0pLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiBJLmZyb20odWUpfSl9TS5leHBvcnRzPWZ1bmN0aW9uKGVlLHRlLG9lLHNlLGhlLHVlKXsiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'aGUmJih1ZT1oZSxoZT12b2lkIDApO3ZhciBHLGIsY2U9WVsoaGU9aGV8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYoY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLmcuUHJvbWlzZSl7aWYoayhvZSxzZSksZWU9VihlZSxFLCJQYXNzd29yZCIpLHRlPVYodGUsRSwiU2FsdCIpLCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiB1ZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpO0c9ZnVuY3Rpb24oRyl7aWYoUi5nLnByb2Nlc3MmJiFSLmcucHJvY2Vzcy5icm93c2VyfHwhQnx8IUIuaW1wb3J0S2V5fHwhQi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJl'@;
put 'c29sdmUoITEpO2lmKHZvaWQgMCE9PVhbR10pcmV0dXJuIFhbR107dmFyIGI9cSh6PXp8fEkuYWxsb2MoOCkseiwxMCwxMjgsRykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiBYW0ddPWIsYn0oY2UpLnRoZW4oZnVuY3Rpb24o'@;
put 'Ryl7cmV0dXJuIEc/cShlZSx0ZSxvZSxzZSxjZSk6aihlZSx0ZSxvZSxzZSxoZSl9KSxiPXVlLEcudGhlbihmdW5jdGlvbihEKXtVKCkoZnVuY3Rpb24oKXtiKG51bGwsRCl9KX0sZnVuY3Rpb24oRCl7VSgpKGZ1bmN0aW9uKCl7YihEKX0pfSl9ZWxzZSBVKCkoZnVuY3Rpb24oKXt2YXIgRzt0'@;
put 'cnl7Rz1qKGVlLHRlLG9lLHNlLGhlKX1jYXRjaChiKXtyZXR1cm4gdWUoYil9dWUobnVsbCxHKX0pfX0sMjM2ODooTSxPLFIpPT57dmFyIHosSz1SKDQxNTUpO3o9Ui5nLnByb2Nlc3MmJlIuZy5wcm9jZXNzLmJyb3dzZXI/InV0Zi04IjpSLmcucHJvY2VzcyYmUi5nLnByb2Nlc3MudmVyc2lv'@;
put 'bj9wYXJzZUludChLLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLE0uZXhwb3J0cz16fSw3MzU3Ok09Pnt2YXIgTz1NYXRoLnBvdygyLDMwKS0xO00uZXhwb3J0cz1mdW5jdGlvbihSLHope2lmKCJudW1iZXIiIT10eXBlb2Yg'@;
put 'Uil0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKFI8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2Ygeil0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlciIpO2lm'@;
put 'KHo8MHx8ej5PfHx6IT16KXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSwxMjU3OihNLE8sUik9Pnt2YXIgej1SKDgwMjgpLEs9Uig5Nzg1KSxJPVIoOTA3Miksaz1SKDk1MDkpLkJ1ZmZlcixFPVIoNzM1Nyksaj1SKDIzNjgpLFY9Uig3Nzc3KSxCPWsuYWxsb2MoMTI4'@;
put 'KSxZPXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gWChVLHEsZWUpe3ZhciBHLHRlPSJybWQxNjAiPT09KEc9VSl8fCJyaXBlbWQxNjAiPT09Rz9mdW5jdGlvbiBEKEgpe3JldHVy'@;
put 'bihuZXcgSykudXBkYXRlKEgpLmRpZ2VzdCgpfToibWQ1Ij09PUc/ejpmdW5jdGlvbiBiKEgpe3JldHVybiBJKEcpLnVwZGF0ZShIKS5kaWdlc3QoKX0sb2U9InNoYTUxMiI9PT1VfHwic2hhMzg0Ij09PVU/MTI4OjY0O3EubGVuZ3RoPm9lP3E9dGUocSk6cS5sZW5ndGg8b2UmJihxPWsuY29u'@;
put 'Y2F0KFtxLEJdLG9lKSk7Zm9yKHZhciBzZT1rLmFsbG9jVW5zYWZlKG9lK1lbVV0pLGhlPWsuYWxsb2NVbnNhZmUob2UrWVtVXSksdWU9MDt1ZTxvZTt1ZSsrKXNlW3VlXT01NF5xW3VlXSxoZVt1ZV09OTJecVt1ZV07dmFyIGNlPWsuYWxsb2NVbnNhZmUob2UrZWUrNCk7c2UuY29weShjZSww'@;
put 'LDAsb2UpLHRoaXMuaXBhZDE9Y2UsdGhpcy5pcGFkMj1zZSx0aGlzLm9wYWQ9aGUsdGhpcy5hbGc9VSx0aGlzLmJsb2Nrc2l6ZT1vZSx0aGlzLmhhc2g9dGUsdGhpcy5zaXplPVlbVV19WC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFUscSl7cmV0dXJuIFUuY29weShxLHRoaXMuYmxvY2tzaXpl'@;
put 'KSx0aGlzLmhhc2gocSkuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSxNLmV4cG9ydHM9ZnVuY3Rpb24oVSxxLGVlLHRlLG9lKXtFKGVlLHRlKTt2YXIgc2U9bmV3IFgob2U9b2V8fCJzaGExIixVPVYoVSxqLCJQYXNzd29yZCIpLChxPVYocSxq'@;
put 'LCJTYWx0IikpLmxlbmd0aCksaGU9ay5hbGxvY1Vuc2FmZSh0ZSksdWU9ay5hbGxvY1Vuc2FmZShxLmxlbmd0aCs0KTtxLmNvcHkodWUsMCwwLHEubGVuZ3RoKTtmb3IodmFyIGNlPTAsRz1ZW29lXSxiPU1hdGguY2VpbCh0ZS9HKSxEPTE7RDw9YjtEKyspe3VlLndyaXRlVUludDMyQkUoRCxx'@;
put 'Lmxlbmd0aCk7Zm9yKHZhciBIPXNlLnJ1bih1ZSxzZS5pcGFkMSksTj1ILGc9MTtnPGVlO2crKyl7Tj1zZS5ydW4oTixzZS5pcGFkMik7Zm9yKHZhciBDPTA7QzxHO0MrKylIW0NdXj1OW0NdfUguY29weShoZSxjZSksY2UrPUd9cmV0dXJuIGhlfX0sNzc3NzooTSxPLFIpPT57dmFyIHo9Uig5'@;
put 'NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKEssSSxrKXtpZih6LmlzQnVmZmVyKEspKXJldHVybiBLO2lmKCJzdHJpbmciPT10eXBlb2YgSylyZXR1cm4gei5mcm9tKEssSSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEspKXJldHVybiB6LmZyb20oSy5idWZmZXIpO3Rocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoaysiIG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXciKX19LDQxNTU6TT0+e3ZhciBPLFIsej1NLmV4cG9ydHM9e307ZnVuY3Rpb24gSygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5l'@;
put 'ZCIpfWZ1bmN0aW9uIEkoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGsoZWUpe2lmKE89PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGVlLDApO2lmKChPPT09S3x8IU8pJiZzZXRUaW1lb3V0KXJldHVybiBPPXNl'@;
put 'dFRpbWVvdXQsc2V0VGltZW91dChlZSwwKTt0cnl7cmV0dXJuIE8oZWUsMCl9Y2F0Y2h7dHJ5e3JldHVybiBPLmNhbGwobnVsbCxlZSwwKX1jYXRjaHtyZXR1cm4gTy5jYWxsKHRoaXMsZWUsMCl9fX0hZnVuY3Rpb24oKXt0cnl7Tz0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRU'@;
put 'aW1lb3V0Okt9Y2F0Y2h7Tz1LfXRyeXtSPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Okl9Y2F0Y2h7Uj1JfX0oKTt2YXIgRSxqPVtdLFY9ITEsQj0tMTtmdW5jdGlvbiBZKCl7ViYmRSYmKFY9ITEsRS5sZW5ndGg/aj1FLmNvbmNhdChqKTpCPS0xLGoubGVu'@;
put 'Z3RoJiZYKCkpfWZ1bmN0aW9uIFgoKXtpZighVil7dmFyIGVlPWsoWSk7Vj0hMDtmb3IodmFyIHRlPWoubGVuZ3RoO3RlOyl7Zm9yKEU9aixqPVtdOysrQjx0ZTspRSYmRVtCXS5ydW4oKTtCPS0xLHRlPWoubGVuZ3RofUU9bnVsbCxWPSExLGZ1bmN0aW9uKG9lKXtpZihSPT09Y2xlYXJUaW1l'@;
put 'b3V0KXJldHVybiBjbGVhclRpbWVvdXQob2UpO2lmKChSPT09SXx8IVIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIFI9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChvZSk7dHJ5e3JldHVybiBSKG9lKX1jYXRjaHt0cnl7cmV0dXJuIFIuY2FsbChudWxsLG9lKX1jYXRjaHtyZXR1cm4gUi5jYWxs'@;
put 'KHRoaXMsb2UpfX19KGVlKX19ZnVuY3Rpb24gVShlZSx0ZSl7dGhpcy5mdW49ZWUsdGhpcy5hcnJheT10ZX1mdW5jdGlvbiBxKCl7fXoubmV4dFRpY2s9ZnVuY3Rpb24oZWUpe3ZhciB0ZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZh'@;
put 'ciBvZT0xO29lPGFyZ3VtZW50cy5sZW5ndGg7b2UrKyl0ZVtvZS0xXT1hcmd1bWVudHNbb2VdO2oucHVzaChuZXcgVShlZSx0ZSkpLDEhPT1qLmxlbmd0aHx8Vnx8ayhYKX0sVS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sei50aXRs'@;
put 'ZT0iYnJvd3NlciIsei5icm93c2VyPSEwLHouZW52PXt9LHouYXJndj1bXSx6LnZlcnNpb249IiIsei52ZXJzaW9ucz17fSx6Lm9uPXEsei5hZGRMaXN0ZW5lcj1xLHoub25jZT1xLHoub2ZmPXEsei5yZW1vdmVMaXN0ZW5lcj1xLHoucmVtb3ZlQWxsTGlzdGVuZXJzPXEsei5lbWl0PXEsei5w'@;
put 'cmVwZW5kTGlzdGVuZXI9cSx6LnByZXBlbmRPbmNlTGlzdGVuZXI9cSx6Lmxpc3RlbmVycz1mdW5jdGlvbihlZSl7cmV0dXJuW119LHouYmluZGluZz1mdW5jdGlvbihlZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSx6LmN3ZD1mdW5jdGlv'@;
put 'bigpe3JldHVybiIvIn0sei5jaGRpcj1mdW5jdGlvbihlZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sei51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sNjI0NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzY4OSksSz17fTtL'@;
put 'LnJ1bGVzPVIoMzcwNCkubWFwKGZ1bmN0aW9uKEkpe3JldHVybntydWxlOkksc3VmZml4OkkucmVwbGFjZSgvXihcKlwufFwhKS8sIiIpLHB1bnlTdWZmaXg6LTEsd2lsZGNhcmQ6IioiPT09SS5jaGFyQXQoMCksZXhjZXB0aW9uOiIhIj09PUkuY2hhckF0KDApfX0pLEsuZW5kc1dpdGg9ZnVu'@;
put 'Y3Rpb24oSSxrKXtyZXR1cm4tMSE9PUkuaW5kZXhPZihrLEkubGVuZ3RoLWsubGVuZ3RoKX0sSy5maW5kUnVsZT1mdW5jdGlvbihJKXt2YXIgaz16LnRvQVNDSUkoSSk7cmV0dXJuIEsucnVsZXMucmVkdWNlKGZ1bmN0aW9uKEUsail7cmV0dXJuLTE9PT1qLnB1bnlTdWZmaXgmJihqLnB1bnlT'@;
put 'dWZmaXg9ei50b0FTQ0lJKGouc3VmZml4KSksSy5lbmRzV2l0aChrLCIuIitqLnB1bnlTdWZmaXgpfHxrPT09ai5wdW55U3VmZml4P2o6RX0sbnVsbCl9LE8uZXJyb3JDb2Rlcz17RE9NQUlOX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgdG9vIHNob3J0LiIsRE9NQUlOX1RPT19MT05HOiJEb21h'@;
put 'aW4gbmFtZSB0b28gbG9uZy4gSXQgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyNTUgY2hhcnMuIixMQUJFTF9TVEFSVFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IHN0YXJ0IHdpdGggYSBkYXNoLiIsTEFCRUxfRU5EU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVs'@;
put 'IGNhbiBub3QgZW5kIHdpdGggYSBkYXNoLiIsTEFCRUxfVE9PX0xPTkc6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBtb3N0IDYzIGNoYXJzIGxvbmcuIixMQUJFTF9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBsZWFzdCAxIGNoYXJhY3RlciBsb25n'@;
put 'LiIsTEFCRUxfSU5WQUxJRF9DSEFSUzoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBkYXNoZXMuIn0sSy52YWxpZGF0ZT1mdW5jdGlvbihJKXt2YXIgaz16LnRvQVNDSUkoSSk7aWYoay5sZW5ndGg8MSlyZXR1cm4iRE9NQUlO'@;
put 'X1RPT19TSE9SVCI7aWYoay5sZW5ndGg+MjU1KXJldHVybiJET01BSU5fVE9PX0xPTkciO2Zvcih2YXIgRSxqPWsuc3BsaXQoIi4iKSxWPTA7VjxqLmxlbmd0aDsrK1Ype2lmKCEoRT1qW1ZdKS5sZW5ndGgpcmV0dXJuIkxBQkVMX1RPT19TSE9SVCI7aWYoRS5sZW5ndGg+NjMpcmV0dXJuIkxB'@;
put 'QkVMX1RPT19MT05HIjtpZigiLSI9PT1FLmNoYXJBdCgwKSlyZXR1cm4iTEFCRUxfU1RBUlRTX1dJVEhfREFTSCI7aWYoIi0iPT09RS5jaGFyQXQoRS5sZW5ndGgtMSkpcmV0dXJuIkxBQkVMX0VORFNfV0lUSF9EQVNIIjtpZighL15bYS16MC05XC1dKyQvLnRlc3QoRSkpcmV0dXJuIkxBQkVM'@;
put 'X0lOVkFMSURfQ0hBUlMifX0sTy5wYXJzZT1mdW5jdGlvbihJKXtpZigic3RyaW5nIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWluIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgaz1JLnNsaWNlKDApLnRvTG93ZXJDYXNlKCk7Ii4iPT09ay5jaGFyQXQoay5sZW5n'@;
put 'dGgtMSkmJihrPWsuc2xpY2UoMCxrLmxlbmd0aC0xKSk7dmFyIEU9Sy52YWxpZGF0ZShrKTtpZihFKXJldHVybntpbnB1dDpJLGVycm9yOnttZXNzYWdlOk8uZXJyb3JDb2Rlc1tFXSxjb2RlOkV9fTt2YXIgaj17aW5wdXQ6SSx0bGQ6bnVsbCxzbGQ6bnVsbCxkb21haW46bnVsbCxzdWJkb21h'@;
put 'aW46bnVsbCxsaXN0ZWQ6ITF9LFY9ay5zcGxpdCgiLiIpO2lmKCJsb2NhbCI9PT1WW1YubGVuZ3RoLTFdKXJldHVybiBqO3ZhciBCPWZ1bmN0aW9uKCl7cmV0dXJuL3huLS0vLnRlc3QoaykmJihqLmRvbWFpbiYmKGouZG9tYWluPXoudG9BU0NJSShqLmRvbWFpbikpLGouc3ViZG9tYWluJiYo'@;
put 'ai5zdWJkb21haW49ei50b0FTQ0lJKGouc3ViZG9tYWluKSkpLGp9LFk9Sy5maW5kUnVsZShrKTtpZighWSlyZXR1cm4gVi5sZW5ndGg8Mj9qOihqLnRsZD1WLnBvcCgpLGouc2xkPVYucG9wKCksai5kb21haW49W2ouc2xkLGoudGxkXS5qb2luKCIuIiksVi5sZW5ndGgmJihqLnN1YmRvbWFp'@;
put 'bj1WLnBvcCgpKSxCKCkpO2oubGlzdGVkPSEwO3ZhciBYPVkuc3VmZml4LnNwbGl0KCIuIiksVT1WLnNsaWNlKDAsVi5sZW5ndGgtWC5sZW5ndGgpO3JldHVybiBZLmV4Y2VwdGlvbiYmVS5wdXNoKFguc2hpZnQoKSksai50bGQ9WC5qb2luKCIuIiksVS5sZW5ndGg/KFkud2lsZGNhcmQmJihY'@;
put 'LnVuc2hpZnQoVS5wb3AoKSksai50bGQ9WC5qb2luKCIuIikpLFUubGVuZ3RoJiYoai5zbGQ9VS5wb3AoKSxqLmRvbWFpbj1bai5zbGQsai50bGRdLmpvaW4oIi4iKSxVLmxlbmd0aCYmKGouc3ViZG9tYWluPVUuam9pbigiLiIpKSksQigpKTpCKCl9LE8uZ2V0PWZ1bmN0aW9uKEkpe3JldHVy'@;
put 'biBJJiZPLnBhcnNlKEkpLmRvbWFpbnx8bnVsbH0sTy5pc1ZhbGlkPWZ1bmN0aW9uKEkpe3ZhciBrPU8ucGFyc2UoSSk7cmV0dXJuISghay5kb21haW58fCFrLmxpc3RlZCl9fSw3OTAwOihNLE8sUik9PntPLnB1YmxpY0VuY3J5cHQ9Uig2NTU5KSxPLnByaXZhdGVEZWNyeXB0PVIoNjEzOCks'@;
put 'Ty5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbih6LEspe3JldHVybiBPLnB1YmxpY0VuY3J5cHQoeixLLCEwKX0sTy5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKHosSyl7cmV0dXJuIE8ucHJpdmF0ZURlY3J5cHQoeixLLCEwKX19LDkxOTk6KE0sTyxSKT0+e3ZhciB6PVIoMzQ4MiksSz1SKDk1MDkp'@;
put 'LkJ1ZmZlcjtmdW5jdGlvbiBJKGspe3ZhciBFPUsuYWxsb2NVbnNhZmUoNCk7cmV0dXJuIEUud3JpdGVVSW50MzJCRShrLDApLEV9TS5leHBvcnRzPWZ1bmN0aW9uKGssRSl7Zm9yKHZhciBqLFY9Sy5hbGxvYygwKSxCPTA7Vi5sZW5ndGg8RTspaj1JKEIrKyksVj1LLmNvbmNhdChbVix6KCJz'@;
put 'aGExIikudXBkYXRlKGspLnVwZGF0ZShqKS5kaWdlc3QoKV0pO3JldHVybiBWLnNsaWNlKDAsRSl9fSwyMTQ0OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxl'@;
put 'ZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpL'@;
put 'LkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDcxMDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8'@;
put 'PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztK'@;
put 'Kyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0'@;
put 'b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcs'@;
put 'QyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0i'@;
put 'PT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9B'@;
put 'cnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9'@;
put 'WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRv'@;
put 'QXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVu'@;
put 'Z3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18'@;
put 'Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3Yr'@;
put 'MV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGgu'@;
put 'Y2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8'@;
put 'PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3'@;
put 'Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0t'@;
put 'LHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRk'@;
put 'bihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnBy'@;
put 'b3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRo'@;
put 'aXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4g'@;
put 'dGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'MT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIw'@;
put 'MCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0'@;
put 'MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYz'@;
put 'Miw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5n'@;
put 'Lm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIg'@;
put 'eGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4'@;
put 'ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9'@;
put 'IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpu'@;
put 'ZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFb'@;
put 'Z107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkm'@;
put 'JihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07'@;
put 'cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBz'@;
put 'YWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0'@;
put 'aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1h'@;
put 'dGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7'@;
put 'Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4o'@;
put 'OCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03'@;
put 'LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMr'@;
put 'PTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0'@;
put 'aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVh'@;
put 'a31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRu'@;
put 'KDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVn'@;
put 'YXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcp'@;
put 'e2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5'@;
put 'cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBT'@;
put 'PTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZl'@;
put 'KSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+'@;
put 'Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disr'@;
put 'KXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBl'@;
put 'LnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2Vp'@;
put 'bChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJp'@;
put 'cCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMr'@;
put 'MSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn'@;
put 'YXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5n'@;
put 'dGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0'@;
put 'aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53'@;
put 'b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2'@;
put 'ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtp'@;
put 'ZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25v'@;
put 'cm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0o'@;
put 'MHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9'@;
put 'PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9'@;
put 'MHxKWzJdLFllPTgxOTEmS2UsUWU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLG90PTB8Sls3'@;
put 'XSx1dD04MTkxJm90LE10PW90Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0s'@;
put 'd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxRdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10s'@;
put 'c249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixGbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8'@;
put 'MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikp'@;
put 'K01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZu'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKFFlLGVuKXwwLHc9TWF0aC5pbXVsKFFlLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUs'@;
put 'Zm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGgu'@;
put 'aW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoUWUsZnQpfDAsdz13K01hdGguaW11bChRZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9'@;
put 'ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVs'@;
put 'KFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYr'@;
put 'TWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChRZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFFlLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRo'@;
put 'LmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFF0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFF0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4y'@;
put 'Nil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8'@;
put 'MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXww'@;
put 'KStNYXRoLmltdWwoUWUsTnQpfDAsdz13K01hdGguaW11bChRZSxtbil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUXQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFF0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUs'@;
put 'cHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1h'@;
put 'dGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAs'@;
put 'dj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFF0KXwwKStNYXRoLmltdWwoUWUsSXQpfDAsdz13K01hdGguaW11bChRZSxRdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhy'@;
put 'Pj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUs'@;
put 'ZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxt'@;
put 'bil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFF0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChRZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFp'@;
put 'PShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1N'@;
put 'YXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZu'@;
put 'KXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAs'@;
put 'dz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUXQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFF0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkr'@;
put 'TWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoUWUsenQpfDAsdz13K01hdGguaW11bChRZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2Zl'@;
put 'PSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01h'@;
put 'dGguaW11bChodCxRdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5p'@;
put 'bXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoUWUsc24pfDAsdz13K01hdGguaW11bChRZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoamUsRm4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13'@;
put 'K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRo'@;
put 'LmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxRdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsUXQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11'@;
put 'bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJl'@;
put 'LHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoUWUsJHQpfDAsdz13K01hdGguaW11bChRZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQp'@;
put 'KStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKHV0LFF0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxRdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'VWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxC'@;
put 'bil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxq'@;
put 'bil8MCkrTWF0aC5pbXVsKFFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChRZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1h'@;
put 'dGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFF0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixRdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11'@;
put 'bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRo'@;
put 'LmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0'@;
put 'KSxwPShwPU1hdGguaW11bChVdCxRdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixRdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwo'@;
put 'emUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'VGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAs'@;
put 'dz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRo'@;
put 'LmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDAp'@;
put 'fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11'@;
put 'bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEz'@;
put 'KXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQ'@;
put 'dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxs'@;
put 'bil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sRm4pO3ZhciBo'@;
put 'cz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3Zh'@;
put 'ciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVsw'@;
put 'XT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhz'@;
put 'LGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1'@;
put 'bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUs'@;
put 'Si5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtP'@;
put 'ZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jk'@;
put 'c1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBl'@;
put 'Ll9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0x'@;
put 'LGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUo'@;
put 'dyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNb'@;
put 'eGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxRZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9UWUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoUWU9ZGUqTGUt'@;
put 'ZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9UWUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRl'@;
put 'PWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zv'@;
put 'cih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0'@;
put 'aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVu'@;
put 'Y3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5z'@;
put 'dHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRo'@;
put 'aXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1u'@;
put 'ZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRp'@;
put 'dmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5w'@;
put 'cm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhp'@;
put 'cyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2'@;
put 'LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUu'@;
put 'cHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1u'@;
put 'ZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5s'@;
put 'ZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9'@;
put 'PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1K'@;
put 'PDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgr'@;
put 'PXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0w'@;
put 'KSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMu'@;
put 'd29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZl'@;
put 'PTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09'@;
put 'PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5'@;
put 'cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndv'@;
put 'cmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIp'@;
put 'LHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0'@;
put 'aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFk'@;
put 'ZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7'@;
put 'cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2'@;
put 'ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZv'@;
put 'cih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihn'@;
put 'KX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'LmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9'@;
put 'KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJu'@;
put 'IHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmRE'@;
put 'aXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgt'@;
put 'cC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09'@;
put 'ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2'@;
put 'Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRp'@;
put 'diIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUm'@;
put 'JjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcu'@;
put 'bmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxT'@;
put 'JiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVs'@;
put 'bH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9k'@;
put 'IiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigx'@;
put 'KSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9'@;
put 'dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tT'@;
put 'XSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZl'@;
put 'KSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hy'@;
put 'bigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNP'@;
put 'ZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgp'@;
put 'fHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxu'@;
put 'KG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9'@;
put 'Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZh'@;
put 'ciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3Lmlz'@;
put 'dWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xv'@;
put 'bmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVz'@;
put 'aHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1v'@;
put 'ZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'd29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFy'@;
put 'IHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1pl'@;
put 'cm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7'@;
put 'aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3Rv'@;
put 'dHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30s'@;
put 'RS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jk'@;
put 'c1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5'@;
put 'cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxy'@;
put 'ZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhp'@;
put 'cy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNl'@;
put 'UmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJl'@;
put 'ZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJl'@;
put 'ZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhp'@;
put 'cy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0'@;
put 'aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90'@;
put 'b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJ'@;
put 'KHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51'@;
put 'bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5i'@;
put 'aXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lm'@;
put 'KCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxn'@;
put 'KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIu'@;
put 'X2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFy'@;
put 'IGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhp'@;
put 'cy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCks'@;
put 'U30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00'@;
put 'MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgr'@;
put 'K109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9u'@;
put 'KGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0'@;
put 'dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7Uysr'@;
put 'KXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYi'@;
put 'PT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92'@;
put 'ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8'@;
put 'Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJl'@;
put 'ZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rp'@;
put 'b24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChD'@;
put 'KTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgu'@;
put 'cHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9k'@;
put 'KGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwo'@;
put 'QykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4g'@;
put 'Zy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigx'@;
put 'KTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhp'@;
put 'cy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3'@;
put 'KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rp'@;
put 'b24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9S'@;
put 'ZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0w'@;
put 'LG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8'@;
put 'PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9'@;
put 'LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmlt'@;
put 'b2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5p'@;
put 'c1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVy'@;
put 'biBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNl'@;
put 'UmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlz'@;
put 'Lm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlz'@;
put 'KX0sNjEzODooTSxPLFIpPT57dmFyIHo9Uig5ODApLEs9Uig5MTk5KSxJPVIoNzg1OSksaz1SKDIxNDQpLEU9UigzNjYzKSxqPVIoMzQ4MiksVj1SKDQ4MTgpLEI9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKFksWCxVKXt2YXIgcTtxPVkucGFkZGluZz9ZLnBhZGRpbmc6VT8x'@;
put 'OjQ7dmFyIGVlLHRlPXooWSksb2U9dGUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoWC5sZW5ndGg+b2V8fG5ldyBrKFgpLmNtcCh0ZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtlZT1VP1YobmV3IGsoWCksdGUpOkUoWCx0ZSk7dmFyIHNlPUIuYWxs'@;
put 'b2Mob2UtZWUubGVuZ3RoKTtpZihlZT1CLmNvbmNhdChbc2UsZWVdLG9lKSw0PT09cSlyZXR1cm4gZnVuY3Rpb24oaGUsdWUpe3ZhciBjZT1oZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxHPWooInNoYTEiKS51cGRhdGUoQi5hbGxvYygwKSkuZGlnZXN0KCksYj1HLmxlbmd0aDtpZigwIT09dWVb'@;
put 'MF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIEQ9dWUuc2xpY2UoMSxiKzEpLEg9dWUuc2xpY2UoYisxKSxOPUkoRCxLKEgsYikpLGc9SShILEsoTixjZS1iLTEpKTtpZihmdW5jdGlvbihTLHYpe1M9Qi5mcm9tKFMpLHY9Qi5mcm9tKHYpO3ZhciBwPTAsdz1TLmxl'@;
put 'bmd0aDtTLmxlbmd0aCE9PXYubGVuZ3RoJiYocCsrLHc9TWF0aC5taW4oUy5sZW5ndGgsdi5sZW5ndGgpKTtmb3IodmFyIEo9LTE7KytKPHc7KXArPVNbSl1edltKXTtyZXR1cm4gcH0oRyxnLnNsaWNlKDAsYikpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIg'@;
put 'Qz1iOzA9PT1nW0NdOylDKys7aWYoMSE9PWdbQysrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gZy5zbGljZShDKX0odGUsZWUpO2lmKDE9PT1xKXJldHVybiBmdW5jdGlvbihoZSx1ZSxjZSl7Zm9yKHZhciBHPXVlLnNsaWNlKDAsMiksYj0yLEQ9MDswIT09'@;
put 'dWVbYisrXTspaWYoYj49dWUubGVuZ3RoKXtEKys7YnJlYWt9dmFyIEg9dWUuc2xpY2UoMixiLTEpO2lmKCgiMDAwMiIhPT1HLnRvU3RyaW5nKCJoZXgiKSYmIWNlfHwiMDAwMSIhPT1HLnRvU3RyaW5nKCJoZXgiKSYmY2UpJiZEKyssSC5sZW5ndGg8OCYmRCsrLEQpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIHVlLnNsaWNlKGIpfSgwLGVlLFUpO2lmKDM9PT1xKXJldHVybiBlZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sNjU1OTooTSxPLFIpPT57dmFyIHo9Uig5ODApLEs9UigxNzk4KSxJPVIoMzQ4Miksaz1SKDkxOTkpLEU9'@;
put 'Uig3ODU5KSxqPVIoMjE0NCksVj1SKDQ4MTgpLEI9UigzNjYzKSxZPVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihYLFUscSl7dmFyIGVlO2VlPVgucGFkZGluZz9YLnBhZGRpbmc6cT8xOjQ7dmFyIHRlLG9lPXooWCk7aWYoND09PWVlKXRlPWZ1bmN0aW9uKHNlLGhlKXt2YXIg'@;
put 'dWU9c2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksY2U9aGUubGVuZ3RoLEc9SSgic2hhMSIpLnVwZGF0ZShZLmFsbG9jKDApKS5kaWdlc3QoKSxiPUcubGVuZ3RoLEQ9MipiO2lmKGNlPnVlLUQtMil0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgSD1ZLmFsbG9jKHVlLWNl'@;
put 'LUQtMiksTj11ZS1iLTEsZz1LKGIpLEM9RShZLmNvbmNhdChbRyxILFkuYWxsb2MoMSwxKSxoZV0sTiksayhnLE4pKSxTPUUoZyxrKEMsYikpO3JldHVybiBuZXcgaihZLmNvbmNhdChbWS5hbGxvYygxKSxTLENdLHVlKSl9KG9lLFUpO2Vsc2UgaWYoMT09PWVlKXRlPWZ1bmN0aW9uKHNlLGhl'@;
put 'LHVlKXt2YXIgY2UsRz1oZS5sZW5ndGgsYj1zZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihHPmItMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIGNlPXVlP1kuYWxsb2MoYi1HLTMsMjU1KTpmdW5jdGlvbihEKXtmb3IodmFyIEgsTj1ZLmFsbG9jVW5zYWZl'@;
put 'KEQpLGc9MCxDPUsoMipEKSxTPTA7ZzxEOylTPT09Qy5sZW5ndGgmJihDPUsoMipEKSxTPTApLChIPUNbUysrXSkmJihOW2crK109SCk7cmV0dXJuIE59KGItRy0zKSxuZXcgaihZLmNvbmNhdChbWS5mcm9tKFswLHVlPzE6Ml0pLGNlLFkuYWxsb2MoMSksaGVdLGIpKX0ob2UsVSxxKTtlbHNl'@;
put 'e2lmKDMhPT1lZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKCh0ZT1uZXcgaihVKSkuY21wKG9lLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGF0YSB0b28gbG9uZyBmb3IgbW9kdWx1cyIpfXJldHVybiBxP0IodGUsb2UpOlYodGUsb2UpfX0sNDgxODooTSxP'@;
put 'LFIpPT57dmFyIHo9UigyMTQ0KSxLPVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihJLGspe3JldHVybiBLLmZyb20oSS50b1JlZCh6Lm1vbnQoay5tb2R1bHVzKSkucmVkUG93KG5ldyB6KGsucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDc4NTk6TT0+'@;
put 'e00uZXhwb3J0cz1mdW5jdGlvbihPLFIpe2Zvcih2YXIgej1PLmxlbmd0aCxLPS0xOysrSzx6OylPW0tdXj1SW0tdO3JldHVybiBPfX0sMzY4OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO1IucihPKSxSLmQoTyx7ZGVjb2RlOigpPT5vZSxkZWZhdWx0OigpPT5jZSxlbmNvZGU6KCk9PnNlLHRv'@;
put 'QVNDSUk6KCk9PnVlLHRvVW5pY29kZTooKT0+aGUsdWNzMmRlY29kZTooKT0+VSx1Y3MyZW5jb2RlOigpPT5xfSk7Y29uc3Qgej0yMTQ3NDgzNjQ3LEs9MzYsST0vXnhuLS0vLGs9L1teXDAtXHg3Rl0vLEU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLGo9e292ZXJmbG93OiJPdmVyZmxv'@;
put 'dzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFY9TWF0aC5mbG9vcixCPVN0cmluZy5mcm9tQ2hh'@;
put 'ckNvZGU7ZnVuY3Rpb24gWShHKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihqW0ddKX1mdW5jdGlvbiBYKEcsYil7Y29uc3QgRD1HLnNwbGl0KCJAIik7bGV0IEg9IiI7cmV0dXJuIEQubGVuZ3RoPjEmJihIPURbMF0rIkAiLEc9RFsxXSksSCtmdW5jdGlvbihnLEMpe2NvbnN0IFM9W107bGV0IHY9'@;
put 'Zy5sZW5ndGg7Zm9yKDt2LS07KVNbdl09QyhnW3ZdKTtyZXR1cm4gU30oKEc9Ry5yZXBsYWNlKEUsIi4iKSkuc3BsaXQoIi4iKSxiKS5qb2luKCIuIil9ZnVuY3Rpb24gVShHKXtjb25zdCBiPVtdO2xldCBEPTA7Y29uc3QgSD1HLmxlbmd0aDtmb3IoO0Q8SDspe2NvbnN0IE49Ry5jaGFyQ29k'@;
put 'ZUF0KEQrKyk7aWYoTj49NTUyOTYmJk48PTU2MzE5JiZEPEgpe2NvbnN0IGc9Ry5jaGFyQ29kZUF0KEQrKyk7NTYzMjA9PSg2NDUxMiZnKT9iLnB1c2goKCgxMDIzJk4pPDwxMCkrKDEwMjMmZykrNjU1MzYpOihiLnB1c2goTiksRC0tKX1lbHNlIGIucHVzaChOKX1yZXR1cm4gYn1jb25zdCBx'@;
put 'PUc9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkcpLGVlPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEcrMjIrNzUqKEc8MjYpLSgoMCE9Yik8PDUpfSx0ZT1mdW5jdGlvbihHLGIsRCl7bGV0IEg9MDtmb3IoRz1EP1YoRy83MDApOkc+PjEsRys9VihHL2IpO0c+NDU1O0grPUspRz1WKEcvMzUpO3Jl'@;
put 'dHVybiBWKEgrMzYqRy8oRyszOCkpfSxvZT1mdW5jdGlvbihHKXtjb25zdCBiPVtdLEQ9Ry5sZW5ndGg7bGV0IEg9MCxOPTEyOCxnPTcyLEM9Ry5sYXN0SW5kZXhPZigiLSIpO0M8MCYmKEM9MCk7Zm9yKGxldCB2PTA7djxDOysrdilHLmNoYXJDb2RlQXQodik+PTEyOCYmWSgibm90LWJhc2lj'@;
put 'IiksYi5wdXNoKEcuY2hhckNvZGVBdCh2KSk7Zm9yKGxldCB2PUM+MD9DKzE6MDt2PEQ7KXtjb25zdCBwPUg7Zm9yKGxldCBKPTEsbmU9Szs7bmUrPUspe3Y+PUQmJlkoImludmFsaWQtaW5wdXQiKTtjb25zdCBkZT0oUz1HLmNoYXJDb2RlQXQodisrKSk+PTQ4JiZTPDU4P1MtNDgrMjY6Uz49'@;
put 'NjUmJlM8OTE/Uy02NTpTPj05NyYmUzwxMjM/Uy05NzpLO2RlPj1LJiZZKCJpbnZhbGlkLWlucHV0IiksZGU+Vigoei1IKS9KKSYmWSgib3ZlcmZsb3ciKSxIKz1kZSpKO2NvbnN0IGZlPW5lPD1nPzE6bmU+PWcrMjY/MjY6bmUtZztpZihkZTxmZSlicmVhaztjb25zdCB4ZT1LLWZlO0o+Vih6'@;
put 'L3hlKSYmWSgib3ZlcmZsb3ciKSxKKj14ZX1jb25zdCB3PWIubGVuZ3RoKzE7Zz10ZShILXAsdywwPT1wKSxWKEgvdyk+ei1OJiZZKCJvdmVyZmxvdyIpLE4rPVYoSC93KSxIJT13LGIuc3BsaWNlKEgrKywwLE4pfXZhciBTO3JldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5iKX0sc2U9'@;
put 'ZnVuY3Rpb24oRyl7Y29uc3QgYj1bXSxEPShHPVUoRykpLmxlbmd0aDtsZXQgSD0xMjgsTj0wLGc9NzI7Zm9yKGNvbnN0IHYgb2YgRyl2PDEyOCYmYi5wdXNoKEIodikpO2NvbnN0IEM9Yi5sZW5ndGg7bGV0IFM9Qztmb3IoQyYmYi5wdXNoKCItIik7UzxEOyl7bGV0IHY9ejtmb3IoY29uc3Qg'@;
put 'dyBvZiBHKXc+PUgmJnc8diYmKHY9dyk7Y29uc3QgcD1TKzE7di1IPlYoKHotTikvcCkmJlkoIm92ZXJmbG93IiksTis9KHYtSCkqcCxIPXY7Zm9yKGNvbnN0IHcgb2YgRylpZih3PEgmJisrTj56JiZZKCJvdmVyZmxvdyIpLHc9PT1IKXtsZXQgSj1OO2ZvcihsZXQgbmU9Szs7bmUrPUspe2Nv'@;
put 'bnN0IGRlPW5lPD1nPzE6bmU+PWcrMjY/MjY6bmUtZztpZihKPGRlKWJyZWFrO2NvbnN0IGZlPUotZGUseGU9Sy1kZTtiLnB1c2goQihlZShkZStmZSV4ZSwwKSkpLEo9VihmZS94ZSl9Yi5wdXNoKEIoZWUoSiwwKSkpLGc9dGUoTixwLFM9PT1DKSxOPTAsKytTfSsrTiwrK0h9cmV0dXJuIGIu'@;
put 'am9pbigiIil9LGhlPWZ1bmN0aW9uKEcpe3JldHVybiBYKEcsZnVuY3Rpb24oYil7cmV0dXJuIEkudGVzdChiKT9vZShiLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOmJ9KX0sdWU9ZnVuY3Rpb24oRyl7cmV0dXJuIFgoRyxmdW5jdGlvbihiKXtyZXR1cm4gay50ZXN0KGIpPyJ4bi0tIitzZShi'@;
put 'KTpifSl9LGNlPXt2ZXJzaW9uOiIyLjEuMCIsdWNzMjp7ZGVjb2RlOlUsZW5jb2RlOnF9LGRlY29kZTpvZSxlbmNvZGU6c2UsdG9BU0NJSTp1ZSx0b1VuaWNvZGU6aGV9fSw3MTI5OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVu'@;
put 'Y3Rpb24geihJKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChJLnJlcGxhY2UoL1wrL2csIiAiKSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEsoSSl7dHJ5e3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoSSl9Y2F0Y2h7cmV0dXJuIG51bGx9fU8uc3RyaW5naWZ5PWZ1bmN0'@;
put 'aW9uKEksayl7az1rfHwiIjt2YXIgRSxqLFY9W107Zm9yKGogaW4ic3RyaW5nIiE9dHlwZW9mIGsmJihrPSI/IiksSSlpZihSLmNhbGwoSSxqKSl7aWYoKEU9SVtqXSl8fG51bGwhPUUmJiFpc05hTihFKXx8KEU9IiIpLGo9SyhqKSxFPUsoRSksbnVsbD09PWp8fG51bGw9PT1FKWNvbnRpbnVl'@;
put 'O1YucHVzaChqKyI9IitFKX1yZXR1cm4gVi5sZW5ndGg/aytWLmpvaW4oIiYiKToiIn0sTy5wYXJzZT1mdW5jdGlvbihJKXtmb3IodmFyIGssRT0vKFtePT8jJl0rKT0/KFteJl0qKS9nLGo9e307az1FLmV4ZWMoSSk7KXt2YXIgVj16KGtbMV0pLEI9eihrWzJdKTtudWxsPT09Vnx8bnVsbD09'@;
put 'PUJ8fFYgaW4ganx8KGpbVl09Qil9cmV0dXJuIGp9fSwxNzk4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPTY1NTM2LGs9Uig5NTA5KS5CdWZmZXIsRT1SLmcuY3J5cHRvfHxSLmcubXNDcnlwdG87TS5leHBvcnRzPUUmJkUuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9u'@;
put 'KGosVil7aWYoaj40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIEI9ay5hbGxvY1Vuc2FmZShqKTtpZihqPjApaWYoaj5LKWZvcih2YXIgWT0wO1k8ajtZKz1LKUUuZ2V0UmFuZG9tVmFsdWVzKEIuc2xpY2UoWSxZ'@;
put 'K0spKTtlbHNlIEUuZ2V0UmFuZG9tVmFsdWVzKEIpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBWP3oubmV4dFRpY2soZnVuY3Rpb24oKXtWKG51bGwsQil9KTpCfTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3Vw'@;
put 'cG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDc5NjM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoKXt0aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVy'@;
put 'IGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgST1SKDk1MDkpLGs9UigxNzk4KSxFPUkuQnVmZmVyLGo9SS5rTWF4TGVuZ3RoLFY9Ui5nLmNyeXB0b3x8Ui5nLm1zQ3J5cHRv'@;
put 'LEI9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiBZKHEsZWUpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cSE9cSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKHE+Qnx8cTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWlu'@;
put 'dDMyIik7aWYocT5qfHxxPmVlKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gWChxLGVlLHRlKXtpZigibnVtYmVyIiE9dHlwZW9mIHF8fHEhPXEpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYocT5CfHxx'@;
put 'PDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYocStlZT50ZXx8cT5qKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gVShxLGVlLHRlLG9lKXtpZih6LmJyb3dzZXIpe3ZhciBoZT1uZXcgVWludDhBcnJheShx'@;
put 'LmJ1ZmZlcixlZSx0ZSk7cmV0dXJuIFYuZ2V0UmFuZG9tVmFsdWVzKGhlKSxvZT92b2lkIHoubmV4dFRpY2soZnVuY3Rpb24oKXtvZShudWxsLHEpfSk6cX1pZighb2UpcmV0dXJuIGsodGUpLmNvcHkocSxlZSkscTtrKHRlLGZ1bmN0aW9uKHVlLGNlKXtpZih1ZSlyZXR1cm4gb2UodWUpO2Nl'@;
put 'LmNvcHkocSxlZSksb2UobnVsbCxxKX0pfVYmJlYuZ2V0UmFuZG9tVmFsdWVzfHwhei5icm93c2VyPyhPLnJhbmRvbUZpbGw9ZnVuY3Rpb24ocSxlZSx0ZSxvZSl7aWYoIShFLmlzQnVmZmVyKHEpfHxxIGluc3RhbmNlb2YgUi5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJi'@;
put 'dWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlZSlvZT1lZSxlZT0wLHRlPXEubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHRlKW9lPXRlLHRlPXEubGVuZ3RoLWVlO2Vsc2UgaWYoImZ1bmN0aW9uIiE9'@;
put 'dHlwZW9mIG9lKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIFkoZWUscS5sZW5ndGgpLFgodGUsZWUscS5sZW5ndGgpLFUocSxlZSx0ZSxvZSl9LE8ucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24ocSxlZSx0ZSl7aWYodm9pZCAw'@;
put 'PT09ZWUmJihlZT0wKSwhKEUuaXNCdWZmZXIocSl8fHEgaW5zdGFuY2VvZiBSLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIFkoZWUscS5sZW5ndGgpLHZvaWQgMD09PXRlJiYo'@;
put 'dGU9cS5sZW5ndGgtZWUpLFgodGUsZWUscS5sZW5ndGgpLFUocSxlZSx0ZSl9KTooTy5yYW5kb21GaWxsPUssTy5yYW5kb21GaWxsU3luYz1LKX0sNDI4MTpNPT57InVzZSBzdHJpY3QiO3ZhciBPPXt9O2Z1bmN0aW9uIFIoSyxJLGspe2t8fChrPUVycm9yKTt2YXIgRT1mdW5jdGlvbihqKXt2'@;
put 'YXIgVixCO2Z1bmN0aW9uIFkoWCxVLHEpe3JldHVybiBqLmNhbGwodGhpcywic3RyaW5nIj09dHlwZW9mIEk/STpJKFgsVSxxKSl8fHRoaXN9cmV0dXJuIEI9aiwoVj1ZKS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksVi5wcm90b3R5cGUuY29uc3RydWN0b3I9VixWLl9f'@;
put 'cHJvdG9fXz1CLFl9KGspO0UucHJvdG90eXBlLm5hbWU9ay5uYW1lLEUucHJvdG90eXBlLmNvZGU9SyxPW0tdPUV9ZnVuY3Rpb24geihLLEkpe2lmKEFycmF5LmlzQXJyYXkoSykpe3ZhciBrPUsubGVuZ3RoO3JldHVybiBLPUsubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBTdHJpbmcoRSl9KSxr'@;
put 'PjI/Im9uZSBvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0KEsuc2xpY2UoMCxrLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrS1trLTFdOjI9PT1rPyJvbmUgb2YgIi5jb25jYXQoSSwiICIpLmNvbmNhdChLWzBdLCIgb3IgIikuY29uY2F0KEtbMV0pOiJvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0'@;
put 'KEtbMF0pfXJldHVybiJvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0KFN0cmluZyhLKSl9UigiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihLLEkpe3JldHVybidUaGUgdmFsdWUgIicrSSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrSysnIid9LFR5cGVFcnJvciksUigiRVJS'@;
put 'X0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKEssSSxrKXt2YXIgRSxCLFgscTtpZigic3RyaW5nIj09dHlwZW9mIEkmJiJub3QgIj09PUkuc3Vic3RyKDAsNCk/KEU9Im11c3Qgbm90IGJlIixJPUkucmVwbGFjZSgvXm5vdCAvLCIiKSk6RT0ibXVzdCBiZSIsWD1LLCh2b2lkIDA9PT1xfHxx'@;
put 'PlgubGVuZ3RoKSYmKHE9WC5sZW5ndGgpLCIgYXJndW1lbnQiPT09WC5zdWJzdHJpbmcocS05LHEpKUI9IlRoZSAiLmNvbmNhdChLLCIgIikuY29uY2F0KEUsIiAiKS5jb25jYXQoeihJLCJ0eXBlIikpO2Vsc2V7dmFyIFk9ZnVuY3Rpb24oWCxVLHEpe3JldHVybiJudW1iZXIiIT10eXBlb2Yg'@;
put 'cSYmKHE9MCksIShxKzE+WC5sZW5ndGgpJiYtMSE9PVguaW5kZXhPZigiLiIscSl9KEspPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtCPSdUaGUgIicuY29uY2F0KEssJyIgJykuY29uY2F0KFksIiAiKS5jb25jYXQoRSwiICIpLmNvbmNhdCh6KEksInR5cGUiKSl9cmV0dXJuIEIrIi4gUmVjZWl2'@;
put 'ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2Ygayl9LFR5cGVFcnJvciksUigiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksUigiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKEspe3JldHVybiJUaGUgIitLKyIgbWV0aG9kIGlz'@;
put 'IG5vdCBpbXBsZW1lbnRlZCJ9KSxSKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLFIoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihLKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitLKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxS'@;
put 'KCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxSKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLFIoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiks'@;
put 'UigiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLFIoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihLKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitLfSxUeXBlRXJyb3IpLFIoIkVSUl9TVFJF'@;
put 'QU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLE0uZXhwb3J0cy5xPU99LDY3NTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKFUpe3ZhciBxPVtdO2Zvcih2YXIg'@;
put 'ZWUgaW4gVSlxLnB1c2goZWUpO3JldHVybiBxfTtNLmV4cG9ydHM9Qjt2YXIgST1SKDk0ODEpLGs9Uig0MjI5KTtSKDU3MTcpKEIsSSk7Zm9yKHZhciBFPUsoay5wcm90b3R5cGUpLGo9MDtqPEUubGVuZ3RoO2orKyl7dmFyIFY9RVtqXTtCLnByb3RvdHlwZVtWXXx8KEIucHJvdG90eXBlW1Zd'@;
put 'PWsucHJvdG90eXBlW1ZdKX1mdW5jdGlvbiBCKFUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihVKTtJLmNhbGwodGhpcyxVKSxrLmNhbGwodGhpcyxVKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsVSYmKCExPT09VS5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCEx'@;
put 'PT09VS53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09VS5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixZKSkpfWZ1bmN0aW9uIFkoKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHx6Lm5leHRUaWNrKFgsdGhpcyl9ZnVuY3Rp'@;
put 'b24gWChVKXtVLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3Jp'@;
put 'dGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZv'@;
put 'aWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKFUpe3ZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUm'@;
put 'JnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1VLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPVUpfX0pfSwyNzI1OihNLE8sUik9PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUs7dmFyIHo9Uig0NjA1KTtmdW5jdGlvbiBL'@;
put 'KEkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEspKXJldHVybiBuZXcgSyhJKTt6LmNhbGwodGhpcyxJKX1SKDU3MTcpKEsseiksSy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihJLGssRSl7RShudWxsLEkpfX0sOTQ4MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MTU1'@;
put 'KTtNLmV4cG9ydHM9SCxILlJlYWRhYmxlU3RhdGU9RCxSKDcxODcpO3ZhciBWLEk9ZnVuY3Rpb24oV2UsS2Upe3JldHVybiBXZS5saXN0ZW5lcnMoS2UpLmxlbmd0aH0saz1SKDI1MDMpLEU9Uig4NzY0KS5CdWZmZXIsaj0odm9pZCAwIT09Ui5nP1IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5k'@;
put 'b3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxCPVIoNDYxNik7Vj1CJiZCLmRlYnVnbG9nP0IuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgWSxYLFUscT1SKDczMjcpLGVlPVIoMTE5NSksdGU9UigyNDU3KS5nZXRIaWdoV2F0'@;
put 'ZXJNYXJrLG9lPVIoNDI4MSkucSxzZT1vZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxoZT1vZS5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLHVlPW9lLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGNlPW9lLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7Uig1NzE3KShILGsp'@;
put 'O3ZhciBHPWVlLmVycm9yT3JEZXN0cm95LGI9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gRChXZSxLZSxZZSl7ej16fHxSKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIFllJiYoWWU9S2UgaW5zdGFuY2VvZiB6KSx0aGlzLm9iamVjdE1vZGU9'@;
put 'ISEoV2U9V2V8fHt9KS5vYmplY3RNb2RlLFllJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFXZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz10ZSh0aGlzLFdlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLFllKSx0aGlzLmJ1ZmZlcj1uZXcgcSx0'@;
put 'aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRh'@;
put 'YmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1XZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIVdlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVm'@;
put 'YXVsdEVuY29kaW5nPVdlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLFdlLmVuY29kaW5nJiYoWXx8KFk9UigyNTUzKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRl'@;
put 'Y29kZXI9bmV3IFkoV2UuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9V2UuZW5jb2RpbmcpfWZ1bmN0aW9uIEgoV2Upe2lmKHo9enx8Uig2NzUzKSwhKHRoaXMgaW5zdGFuY2VvZiBIKSlyZXR1cm4gbmV3IEgoV2UpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IEQoV2UsdGhpcyx0aGlzIGluc3Rh'@;
put 'bmNlb2YgeiksdGhpcy5yZWFkYWJsZT0hMCxXZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBXZS5yZWFkJiYodGhpcy5fcmVhZD1XZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgV2UuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9V2UuZGVzdHJveSkpLGsuY2FsbCh0aGlzKX1mdW5jdGlvbiBOKFdl'@;
put 'LEtlLFllLFFlLGx0KXtWKCJyZWFkYWJsZUFkZENodW5rIixLZSk7dmFyIFBlLEFlLFRlLHFlLFhlLGJlPVdlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1LZSliZS5yZWFkaW5nPSExLGZ1bmN0aW9uKEFlLFRlKXtpZihWKCJvbkVvZkNodW5rIiksIVRlLmVuZGVkKXtpZihUZS5kZWNvZGVy'@;
put 'KXt2YXIgcWU9VGUuZGVjb2Rlci5lbmQoKTtxZSYmcWUubGVuZ3RoJiYoVGUuYnVmZmVyLnB1c2gocWUpLFRlLmxlbmd0aCs9VGUub2JqZWN0TW9kZT8xOnFlLmxlbmd0aCl9VGUuZW5kZWQ9ITAsVGUuc3luYz92KEFlKTooVGUubmVlZFJlYWRhYmxlPSExLFRlLmVtaXR0ZWRSZWFkYWJsZXx8'@;
put 'KFRlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwKEFlKSkpfX0oV2UsYmUpO2Vsc2UgaWYobHR8fChBZT1iZSxFLmlzQnVmZmVyKFhlPVRlPUtlKXx8WGUgaW5zdGFuY2VvZiBqfHwic3RyaW5nIj09dHlwZW9mIFRlfHx2b2lkIDA9PT1UZXx8QWUub2JqZWN0TW9kZXx8KHFlPW5ldyBzZSgiY2h1bmsi'@;
put 'LFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLFRlKSksUGU9cWUpLFBlKUcoV2UsUGUpO2Vsc2UgaWYoYmUub2JqZWN0TW9kZXx8S2UmJktlLmxlbmd0aD4wKWlmKCJzdHJpbmciPT10eXBlb2YgS2V8fGJlLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihLZSk9PT1F'@;
put 'LnByb3RvdHlwZXx8KEtlPWZ1bmN0aW9uKEFlKXtyZXR1cm4gRS5mcm9tKEFlKX0oS2UpKSxRZSliZS5lbmRFbWl0dGVkP0coV2UsbmV3IGNlKTpnKFdlLGJlLEtlLCEwKTtlbHNlIGlmKGJlLmVuZGVkKUcoV2UsbmV3IGhlKTtlbHNle2lmKGJlLmRlc3Ryb3llZClyZXR1cm4hMTtiZS5yZWFk'@;
put 'aW5nPSExLGJlLmRlY29kZXImJiFZZT8oS2U9YmUuZGVjb2Rlci53cml0ZShLZSksYmUub2JqZWN0TW9kZXx8MCE9PUtlLmxlbmd0aD9nKFdlLGJlLEtlLCExKTp3KFdlLGJlKSk6ZyhXZSxiZSxLZSwhMSl9ZWxzZSBRZXx8KGJlLnJlYWRpbmc9ITEsdyhXZSxiZSkpO3JldHVybiFiZS5lbmRl'@;
put 'ZCYmKGJlLmxlbmd0aDxiZS5oaWdoV2F0ZXJNYXJrfHwwPT09YmUubGVuZ3RoKX1mdW5jdGlvbiBnKFdlLEtlLFllLFFlKXtLZS5mbG93aW5nJiYwPT09S2UubGVuZ3RoJiYhS2Uuc3luYz8oS2UuYXdhaXREcmFpbj0wLFdlLmVtaXQoImRhdGEiLFllKSk6KEtlLmxlbmd0aCs9S2Uub2JqZWN0'@;
put 'TW9kZT8xOlllLmxlbmd0aCxRZT9LZS5idWZmZXIudW5zaGlmdChZZSk6S2UuYnVmZmVyLnB1c2goWWUpLEtlLm5lZWRSZWFkYWJsZSYmdihXZSkpLHcoV2UsS2UpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihXZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPVdlKX19KSxILnByb3RvdHlwZS5kZXN0'@;
put 'cm95PWVlLmRlc3Ryb3ksSC5wcm90b3R5cGUuX3VuZGVzdHJveT1lZS51bmRlc3Ryb3ksSC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oV2UsS2Upe0tlKFdlKX0sSC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihXZSxLZSl7dmFyIFllLFFlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJu'@;
put 'IFFlLm9iamVjdE1vZGU/WWU9ITA6InN0cmluZyI9PXR5cGVvZiBXZSYmKChLZT1LZXx8UWUuZGVmYXVsdEVuY29kaW5nKSE9PVFlLmVuY29kaW5nJiYoV2U9RS5mcm9tKFdlLEtlKSxLZT0iIiksWWU9ITApLE4odGhpcyxXZSxLZSwhMSxZZSl9LEgucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rp'@;
put 'b24oV2Upe3JldHVybiBOKHRoaXMsV2UsbnVsbCwhMCwhMSl9LEgucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LEgucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKFdlKXtZfHwoWT1SKDI1NTMpLlN0cmlu'@;
put 'Z0RlY29kZXIpO3ZhciBLZT1uZXcgWShXZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPUtlLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgWWU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVh'@;
put 'ZCxRZT0iIjtudWxsIT09WWU7KVFlKz1LZS53cml0ZShZZS5kYXRhKSxZZT1ZZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09UWUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goUWUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3Ro'@;
put 'PVFlLmxlbmd0aCx0aGlzfTt2YXIgQz0xMDczNzQxODI0O2Z1bmN0aW9uIFMoV2UsS2Upe3JldHVybiBXZTw9MHx8MD09PUtlLmxlbmd0aCYmS2UuZW5kZWQ/MDpLZS5vYmplY3RNb2RlPzE6V2UhPVdlP0tlLmZsb3dpbmcmJktlLmxlbmd0aD9LZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpL'@;
put 'ZS5sZW5ndGg6KFdlPktlLmhpZ2hXYXRlck1hcmsmJihLZS5oaWdoV2F0ZXJNYXJrPSgoWWU9V2UpPj1DP1llPUM6KFllLS0sWWV8PVllPj4+MSxZZXw9WWU+Pj4yLFllfD1ZZT4+PjQsWWV8PVllPj4+OCxZZXw9WWU+Pj4xNixZZSsrKSxZZSkpLFdlPD1LZS5sZW5ndGg/V2U6S2UuZW5kZWQ/'@;
put 'S2UubGVuZ3RoOihLZS5uZWVkUmVhZGFibGU9ITAsMCkpO3ZhciBZZX1mdW5jdGlvbiB2KFdlKXt2YXIgS2U9V2UuX3JlYWRhYmxlU3RhdGU7VigiZW1pdFJlYWRhYmxlIixLZS5uZWVkUmVhZGFibGUsS2UuZW1pdHRlZFJlYWRhYmxlKSxLZS5uZWVkUmVhZGFibGU9ITEsS2UuZW1pdHRlZFJl'@;
put 'YWRhYmxlfHwoVigiZW1pdFJlYWRhYmxlIixLZS5mbG93aW5nKSxLZS5lbWl0dGVkUmVhZGFibGU9ITAsSy5uZXh0VGljayhwLFdlKSl9ZnVuY3Rpb24gcChXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO1YoImVtaXRSZWFkYWJsZV8iLEtlLmRlc3Ryb3llZCxLZS5sZW5ndGgsS2UuZW5k'@;
put 'ZWQpLEtlLmRlc3Ryb3llZHx8IUtlLmxlbmd0aCYmIUtlLmVuZGVkfHwoV2UuZW1pdCgicmVhZGFibGUiKSxLZS5lbWl0dGVkUmVhZGFibGU9ITEpLEtlLm5lZWRSZWFkYWJsZT0hS2UuZmxvd2luZyYmIUtlLmVuZGVkJiZLZS5sZW5ndGg8PUtlLmhpZ2hXYXRlck1hcmsseGUoV2UpfWZ1bmN0'@;
put 'aW9uIHcoV2UsS2Upe0tlLnJlYWRpbmdNb3JlfHwoS2UucmVhZGluZ01vcmU9ITAsSy5uZXh0VGljayhKLFdlLEtlKSl9ZnVuY3Rpb24gSihXZSxLZSl7Zm9yKDshS2UucmVhZGluZyYmIUtlLmVuZGVkJiYoS2UubGVuZ3RoPEtlLmhpZ2hXYXRlck1hcmt8fEtlLmZsb3dpbmcmJjA9PT1LZS5s'@;
put 'ZW5ndGgpOyl7dmFyIFllPUtlLmxlbmd0aDtpZihWKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLFdlLnJlYWQoMCksWWU9PT1LZS5sZW5ndGgpYnJlYWt9S2UucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gbmUoV2Upe3ZhciBLZT1XZS5fcmVhZGFibGVTdGF0ZTtLZS5yZWFkYWJsZUxpc3Rlbmlu'@;
put 'Zz1XZS5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsS2UucmVzdW1lU2NoZWR1bGVkJiYhS2UucGF1c2VkP0tlLmZsb3dpbmc9ITA6V2UubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJldlLnJlc3VtZSgpfWZ1bmN0aW9uIGRlKFdlKXtWKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxX'@;
put 'ZS5yZWFkKDApfWZ1bmN0aW9uIGZlKFdlLEtlKXtWKCJyZXN1bWUiLEtlLnJlYWRpbmcpLEtlLnJlYWRpbmd8fFdlLnJlYWQoMCksS2UucmVzdW1lU2NoZWR1bGVkPSExLFdlLmVtaXQoInJlc3VtZSIpLHhlKFdlKSxLZS5mbG93aW5nJiYhS2UucmVhZGluZyYmV2UucmVhZCgwKX1mdW5jdGlv'@;
put 'biB4ZShXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO2ZvcihWKCJmbG93IixLZS5mbG93aW5nKTtLZS5mbG93aW5nJiZudWxsIT09V2UucmVhZCgpOyk7fWZ1bmN0aW9uIExlKFdlLEtlKXtyZXR1cm4gMD09PUtlLmxlbmd0aD9udWxsOihLZS5vYmplY3RNb2RlP1llPUtlLmJ1ZmZlci5z'@;
put 'aGlmdCgpOiFXZXx8V2U+PUtlLmxlbmd0aD8oWWU9S2UuZGVjb2Rlcj9LZS5idWZmZXIuam9pbigiIik6MT09PUtlLmJ1ZmZlci5sZW5ndGg/S2UuYnVmZmVyLmZpcnN0KCk6S2UuYnVmZmVyLmNvbmNhdChLZS5sZW5ndGgpLEtlLmJ1ZmZlci5jbGVhcigpKTpZZT1LZS5idWZmZXIuY29uc3Vt'@;
put 'ZShXZSxLZS5kZWNvZGVyKSxZZSk7dmFyIFllfWZ1bmN0aW9uIEZlKFdlKXt2YXIgS2U9V2UuX3JlYWRhYmxlU3RhdGU7VigiZW5kUmVhZGFibGUiLEtlLmVuZEVtaXR0ZWQpLEtlLmVuZEVtaXR0ZWR8fChLZS5lbmRlZD0hMCxLLm5leHRUaWNrKE9lLEtlLFdlKSl9ZnVuY3Rpb24gT2UoV2Us'@;
put 'S2Upe2lmKFYoImVuZFJlYWRhYmxlTlQiLFdlLmVuZEVtaXR0ZWQsV2UubGVuZ3RoKSwhV2UuZW5kRW1pdHRlZCYmMD09PVdlLmxlbmd0aCYmKFdlLmVuZEVtaXR0ZWQ9ITAsS2UucmVhZGFibGU9ITEsS2UuZW1pdCgiZW5kIiksV2UuYXV0b0Rlc3Ryb3kpKXt2YXIgWWU9S2UuX3dyaXRhYmxl'@;
put 'U3RhdGU7KCFZZXx8WWUuYXV0b0Rlc3Ryb3kmJlllLmZpbmlzaGVkKSYmS2UuZGVzdHJveSgpfX1mdW5jdGlvbiBqZShXZSxLZSl7Zm9yKHZhciBZZT0wLFFlPVdlLmxlbmd0aDtZZTxRZTtZZSsrKWlmKFdlW1llXT09PUtlKXJldHVybiBZZTtyZXR1cm4tMX1ILnByb3RvdHlwZS5yZWFkPWZ1'@;
put 'bmN0aW9uKFdlKXtWKCJyZWFkIixXZSksV2U9cGFyc2VJbnQoV2UsMTApO3ZhciBLZT10aGlzLl9yZWFkYWJsZVN0YXRlLFllPVdlO2lmKDAhPT1XZSYmKEtlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PVdlJiZLZS5uZWVkUmVhZGFibGUmJigoMCE9PUtlLmhpZ2hXYXRlck1hcms/S2UubGVu'@;
put 'Z3RoPj1LZS5oaWdoV2F0ZXJNYXJrOktlLmxlbmd0aD4wKXx8S2UuZW5kZWQpKXJldHVybiBWKCJyZWFkOiBlbWl0UmVhZGFibGUiLEtlLmxlbmd0aCxLZS5lbmRlZCksMD09PUtlLmxlbmd0aCYmS2UuZW5kZWQ/RmUodGhpcyk6dih0aGlzKSxudWxsO2lmKDA9PT0oV2U9UyhXZSxLZSkpJiZL'@;
put 'ZS5lbmRlZClyZXR1cm4gMD09PUtlLmxlbmd0aCYmRmUodGhpcyksbnVsbDt2YXIgUWUsbHQ9S2UubmVlZFJlYWRhYmxlO3JldHVybiBWKCJuZWVkIHJlYWRhYmxlIixsdCksKDA9PT1LZS5sZW5ndGh8fEtlLmxlbmd0aC1XZTxLZS5oaWdoV2F0ZXJNYXJrKSYmVigibGVuZ3RoIGxlc3MgdGhh'@;
put 'biB3YXRlcm1hcmsiLGx0PSEwKSxLZS5lbmRlZHx8S2UucmVhZGluZz9WKCJyZWFkaW5nIG9yIGVuZGVkIixsdD0hMSk6bHQmJihWKCJkbyByZWFkIiksS2UucmVhZGluZz0hMCxLZS5zeW5jPSEwLDA9PT1LZS5sZW5ndGgmJihLZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoS2UuaGln'@;
put 'aFdhdGVyTWFyayksS2Uuc3luYz0hMSxLZS5yZWFkaW5nfHwoV2U9UyhZZSxLZSkpKSxudWxsPT09KFFlPVdlPjA/TGUoV2UsS2UpOm51bGwpPyhLZS5uZWVkUmVhZGFibGU9S2UubGVuZ3RoPD1LZS5oaWdoV2F0ZXJNYXJrLFdlPTApOihLZS5sZW5ndGgtPVdlLEtlLmF3YWl0RHJhaW49MCks'@;
put 'MD09PUtlLmxlbmd0aCYmKEtlLmVuZGVkfHwoS2UubmVlZFJlYWRhYmxlPSEwKSxZZSE9PVdlJiZLZS5lbmRlZCYmRmUodGhpcykpLG51bGwhPT1RZSYmdGhpcy5lbWl0KCJkYXRhIixRZSksUWV9LEgucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKFdlKXtHKHRoaXMsbmV3IHVlKCJfcmVhZCgp'@;
put 'IikpfSxILnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKFdlLEtlKXt2YXIgWWU9dGhpcyxRZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChRZS5waXBlc0NvdW50KXtjYXNlIDA6UWUucGlwZXM9V2U7YnJlYWs7Y2FzZSAxOlFlLnBpcGVzPVtRZS5waXBlcyxXZV07YnJlYWs7ZGVmYXVsdDpR'@;
put 'ZS5waXBlcy5wdXNoKFdlKX1RZS5waXBlc0NvdW50Kz0xLFYoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsUWUucGlwZXNDb3VudCxLZSk7dmFyIGx0PUtlJiYhMT09PUtlLmVuZHx8V2U9PT1LLnN0ZG91dHx8V2U9PT1LLnN0ZGVycj9NZTpiZTtmdW5jdGlvbiBiZSgpe1YoIm9uZW5kIiksV2Uu'@;
put 'ZW5kKCl9UWUuZW5kRW1pdHRlZD9LLm5leHRUaWNrKGx0KTpZZS5vbmNlKCJlbmQiLGx0KSxXZS5vbigidW5waXBlIixmdW5jdGlvbiBQZShEZSx6ZSl7Vigib251bnBpcGUiKSxEZT09PVllJiZ6ZSYmITE9PT16ZS5oYXNVbnBpcGVkJiYoemUuaGFzVW5waXBlZD0hMCxWKCJjbGVhbnVwIiks'@;
put 'V2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVZSksV2UucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaHQpLFdlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsQWUpLFdlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWGUpLFdlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLFBlKSxZZS5yZW1vdmVMaXN0'@;
put 'ZW5lcigiZW5kIixiZSksWWUucmVtb3ZlTGlzdGVuZXIoImVuZCIsTWUpLFllLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixxZSksVGU9ITAsIVFlLmF3YWl0RHJhaW58fFdlLl93cml0YWJsZVN0YXRlJiYhV2UuX3dyaXRhYmxlU3RhdGUubmVlZERyYWlufHxBZSgpKX0pO3ZhciBEZSxBZT0oRGU9'@;
put 'WWUsZnVuY3Rpb24oKXt2YXIgemU9RGUuX3JlYWRhYmxlU3RhdGU7VigicGlwZU9uRHJhaW4iLHplLmF3YWl0RHJhaW4pLHplLmF3YWl0RHJhaW4mJnplLmF3YWl0RHJhaW4tLSwwPT09emUuYXdhaXREcmFpbiYmSShEZSwiZGF0YSIpJiYoemUuZmxvd2luZz0hMCx4ZShEZSkpfSk7V2Uub24o'@;
put 'ImRyYWluIixBZSk7dmFyIFRlPSExO2Z1bmN0aW9uIHFlKERlKXtWKCJvbmRhdGEiKTt2YXIgemU9V2Uud3JpdGUoRGUpO1YoImRlc3Qud3JpdGUiLHplKSwhMT09PXplJiYoKDE9PT1RZS5waXBlc0NvdW50JiZRZS5waXBlcz09PVdlfHxRZS5waXBlc0NvdW50PjEmJi0xIT09amUoUWUucGlw'@;
put 'ZXMsV2UpKSYmIVRlJiYoVigiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixRZS5hd2FpdERyYWluKSxRZS5hd2FpdERyYWluKyspLFllLnBhdXNlKCkpfWZ1bmN0aW9uIFhlKERlKXtWKCJvbmVycm9yIixEZSksTWUoKSxXZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFhlKSwwPT09SShX'@;
put 'ZSwiZXJyb3IiKSYmRyhXZSxEZSl9ZnVuY3Rpb24gVWUoKXtXZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixodCksTWUoKX1mdW5jdGlvbiBodCgpe1YoIm9uZmluaXNoIiksV2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVZSksTWUoKX1mdW5jdGlvbiBNZSgpe1YoInVucGlwZSIpLFllLnVu'@;
put 'cGlwZShXZSl9cmV0dXJuIFllLm9uKCJkYXRhIixxZSksZnVuY3Rpb24oRGUsemUsb3Qpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBEZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIERlLnByZXBlbmRMaXN0ZW5lcih6ZSxvdCk7RGUuX2V2ZW50cyYmRGUuX2V2ZW50c1t6ZV0/QXJyYXkuaXNBcnJh'@;
put 'eShEZS5fZXZlbnRzW3plXSk/RGUuX2V2ZW50c1t6ZV0udW5zaGlmdChvdCk6RGUuX2V2ZW50c1t6ZV09W290LERlLl9ldmVudHNbemVdXTpEZS5vbih6ZSxvdCl9KFdlLCJlcnJvciIsWGUpLFdlLm9uY2UoImNsb3NlIixVZSksV2Uub25jZSgiZmluaXNoIixodCksV2UuZW1pdCgicGlwZSIs'@;
put 'WWUpLFFlLmZsb3dpbmd8fChWKCJwaXBlIHJlc3VtZSIpLFllLnJlc3VtZSgpKSxXZX0sSC5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKFdlKXt2YXIgS2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxZZT17aGFzVW5waXBlZDohMX07aWYoMD09PUtlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYo'@;
put 'MT09PUtlLnBpcGVzQ291bnQpcmV0dXJuIFdlJiZXZSE9PUtlLnBpcGVzfHwoV2V8fChXZT1LZS5waXBlcyksS2UucGlwZXM9bnVsbCxLZS5waXBlc0NvdW50PTAsS2UuZmxvd2luZz0hMSxXZSYmV2UuZW1pdCgidW5waXBlIix0aGlzLFllKSksdGhpcztpZighV2Upe3ZhciBRZT1LZS5waXBl'@;
put 'cyxsdD1LZS5waXBlc0NvdW50O0tlLnBpcGVzPW51bGwsS2UucGlwZXNDb3VudD0wLEtlLmZsb3dpbmc9ITE7Zm9yKHZhciBQZT0wO1BlPGx0O1BlKyspUWVbUGVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBiZT1qZShLZS5waXBlcyxXZSk7'@;
put 'cmV0dXJuLTE9PT1iZXx8KEtlLnBpcGVzLnNwbGljZShiZSwxKSxLZS5waXBlc0NvdW50LT0xLDE9PT1LZS5waXBlc0NvdW50JiYoS2UucGlwZXM9S2UucGlwZXNbMF0pLFdlLmVtaXQoInVucGlwZSIsdGhpcyxZZSkpLHRoaXN9LEgucHJvdG90eXBlLmFkZExpc3RlbmVyPUgucHJvdG90eXBl'@;
put 'Lm9uPWZ1bmN0aW9uKFdlLEtlKXt2YXIgWWU9ay5wcm90b3R5cGUub24uY2FsbCh0aGlzLFdlLEtlKSxRZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PVdlPyhRZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PVFlLmZs'@;
put 'b3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1XZSYmKFFlLmVuZEVtaXR0ZWR8fFFlLnJlYWRhYmxlTGlzdGVuaW5nfHwoUWUucmVhZGFibGVMaXN0ZW5pbmc9UWUubmVlZFJlYWRhYmxlPSEwLFFlLmZsb3dpbmc9ITEsUWUuZW1pdHRlZFJlYWRhYmxlPSExLFYoIm9uIHJlYWRh'@;
put 'YmxlIixRZS5sZW5ndGgsUWUucmVhZGluZyksUWUubGVuZ3RoP3YodGhpcyk6UWUucmVhZGluZ3x8Sy5uZXh0VGljayhkZSx0aGlzKSkpLFllfSxILnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihXZSxLZSl7dmFyIFllPWsucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwo'@;
put 'dGhpcyxXZSxLZSk7cmV0dXJuInJlYWRhYmxlIj09PVdlJiZLLm5leHRUaWNrKG5lLHRoaXMpLFllfSxILnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oV2Upe3ZhciBLZT1rLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Jl'@;
put 'dHVybiJyZWFkYWJsZSIhPT1XZSYmdm9pZCAwIT09V2V8fEsubmV4dFRpY2sobmUsdGhpcyksS2V9LEgucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBZZSxXZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBXZS5mbG93aW5nfHwoVigicmVzdW1lIiksV2UuZmxvd2luZz0hV2Uu'@;
put 'cmVhZGFibGVMaXN0ZW5pbmcsKFllPVdlKS5yZXN1bWVTY2hlZHVsZWR8fChZZS5yZXN1bWVTY2hlZHVsZWQ9ITAsSy5uZXh0VGljayhmZSx0aGlzLFllKSkpLFdlLnBhdXNlZD0hMSx0aGlzfSxILnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBWKCJjYWxsIHBhdXNlIGZsb3dp'@;
put 'bmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihWKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRo'@;
put 'aXN9LEgucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oV2Upe3ZhciBLZT10aGlzLFllPXRoaXMuX3JlYWRhYmxlU3RhdGUsUWU9ITE7Zm9yKHZhciBsdCBpbiBXZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKFYoIndyYXBwZWQgZW5kIiksWWUuZGVjb2RlciYmIVllLmVuZGVkKXt2YXIgYmU9WWUu'@;
put 'ZGVjb2Rlci5lbmQoKTtiZSYmYmUubGVuZ3RoJiZLZS5wdXNoKGJlKX1LZS5wdXNoKG51bGwpfSksV2Uub24oImRhdGEiLGZ1bmN0aW9uKGJlKXtWKCJ3cmFwcGVkIGRhdGEiKSxZZS5kZWNvZGVyJiYoYmU9WWUuZGVjb2Rlci53cml0ZShiZSkpLFllLm9iamVjdE1vZGUmJm51bGw9PWJlfHwo'@;
put 'WWUub2JqZWN0TW9kZXx8YmUmJmJlLmxlbmd0aCkmJihLZS5wdXNoKGJlKXx8KFFlPSEwLFdlLnBhdXNlKCkpKX0pLFdlKXZvaWQgMD09PXRoaXNbbHRdJiYiZnVuY3Rpb24iPT10eXBlb2YgV2VbbHRdJiYodGhpc1tsdF09ZnVuY3Rpb24oYmUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBX'@;
put 'ZVtiZV0uYXBwbHkoV2UsYXJndW1lbnRzKX19KGx0KSk7Zm9yKHZhciBQZT0wO1BlPGIubGVuZ3RoO1BlKyspV2Uub24oYltQZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxiW1BlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKGJlKXtWKCJ3cmFwcGVkIF9yZWFkIixiZSksUWUmJihRZT0h'@;
put 'MSxXZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihILnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9Uig1ODUwKSksWCh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3Rv'@;
put 'dHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxl'@;
put 'OiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKFdlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPVdlKX19KSxILl9mcm9tTGlzdD1MZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlTGVu'@;
put 'Z3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEguZnJvbT1mdW5jdGlvbihXZSxLZSl7cmV0dXJuIHZvaWQgMD09PVUmJihVPVIoNTE2NykpLFUoSCxXZSxLZSl9'@;
put 'KX0sNDYwNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1CO3ZhciB6PVIoNDI4MSkucSxLPXouRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsST16LkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxrPXouRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyxFPXouRVJSX1RS'@;
put 'QU5TRk9STV9XSVRIX0xFTkdUSF8wLGo9Uig2NzUzKTtmdW5jdGlvbiBWKFUscSl7dmFyIGVlPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2VlLnRyYW5zZm9ybWluZz0hMTt2YXIgdGU9ZWUud3JpdGVjYjtpZihudWxsPT09dGUpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBJKTtlZS53cml0'@;
put 'ZWNodW5rPW51bGwsZWUud3JpdGVjYj1udWxsLG51bGwhPXEmJnRoaXMucHVzaChxKSx0ZShVKTt2YXIgb2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtvZS5yZWFkaW5nPSExLChvZS5uZWVkUmVhZGFibGV8fG9lLmxlbmd0aDxvZS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChvZS5oaWdoV2F0'@;
put 'ZXJNYXJrKX1mdW5jdGlvbiBCKFUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihVKTtqLmNhbGwodGhpcyxVKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Vi5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRl'@;
put 'Y2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsVSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBVLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1VLnRy'@;
put 'YW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIFUuZmx1c2gmJih0aGlzLl9mbHVzaD1VLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIixZKX1mdW5jdGlvbiBZKCl7dmFyIFU9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJv'@;
put 'eWVkP1godGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKGZ1bmN0aW9uKHEsZWUpe1goVSxxLGVlKX0pfWZ1bmN0aW9uIFgoVSxxLGVlKXtpZihxKXJldHVybiBVLmVtaXQoImVycm9yIixxKTtpZihudWxsIT1lZSYmVS5wdXNoKGVlKSxVLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBu'@;
put 'ZXcgRTtpZihVLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IGs7cmV0dXJuIFUucHVzaChudWxsKX1SKDU3MTcpKEIsaiksQi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihVLHEpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLGoucHJv'@;
put 'dG90eXBlLnB1c2guY2FsbCh0aGlzLFUscSl9LEIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oVSxxLGVlKXtlZShuZXcgSygiX3RyYW5zZm9ybSgpIikpfSxCLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oVSxxLGVlKXt2YXIgdGU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYodGUu'@;
put 'd3JpdGVjYj1lZSx0ZS53cml0ZWNodW5rPVUsdGUud3JpdGVlbmNvZGluZz1xLCF0ZS50cmFuc2Zvcm1pbmcpe3ZhciBvZT10aGlzLl9yZWFkYWJsZVN0YXRlOyh0ZS5uZWVkVHJhbnNmb3JtfHxvZS5uZWVkUmVhZGFibGV8fG9lLmxlbmd0aDxvZS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVh'@;
put 'ZChvZS5oaWdoV2F0ZXJNYXJrKX19LEIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKFUpe3ZhciBxPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1xLndyaXRlY2h1bmt8fHEudHJhbnNmb3JtaW5nP3EubmVlZFRyYW5zZm9ybT0hMDoocS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNm'@;
put 'b3JtKHEud3JpdGVjaHVuayxxLndyaXRlZW5jb2RpbmcscS5hZnRlclRyYW5zZm9ybSkpfSxCLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihVLHEpe2oucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxVLGZ1bmN0aW9uKGVlKXtxKGVlKX0pfX0sNDIyOTooTSxPLFIpPT57InVzZSBz'@;
put 'dHJpY3QiO3ZhciB6LEs9Uig0MTU1KTtmdW5jdGlvbiBJKHcpe3ZhciBKPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG5lLGRlLGZlKXt2YXIgeGU9bmUuZW50cnk7Zm9yKG5lLmVudHJ5PW51bGw7eGU7KXt2YXIg'@;
put 'TGU9eGUuY2FsbGJhY2s7ZGUucGVuZGluZ2NiLS0sTGUodm9pZCAwKSx4ZT14ZS5uZXh0fWRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW5lfShKLHcpfX1NLmV4cG9ydHM9SCxILldyaXRhYmxlU3RhdGU9RDt2YXIgQixrPXtkZXByZWNhdGU6Uig0OTI3KX0sRT1SKDI1MDMpLGo9Uig4NzY0'@;
put 'KS5CdWZmZXIsVj0odm9pZCAwIT09Ui5nP1IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxZPVIoMTE5NSksWD1SKDI0NTcpLmdldEhpZ2hXYXRlck1hcmssVT1SKDQyODEpLnEscT1VLkVSUl9JTlZB'@;
put 'TElEX0FSR19UWVBFLGVlPVUuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsdGU9VS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssb2U9VS5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLHNlPVUuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsaGU9VS5FUlJfU1RSRUFNX05VTExfVkFMVUVTLHVlPVUuRVJSX1NU'@;
put 'UkVBTV9XUklURV9BRlRFUl9FTkQsY2U9VS5FUlJfVU5LTk9XTl9FTkNPRElORyxHPVkuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gYigpe31mdW5jdGlvbiBEKHcsSixuZSl7ej16fHxSKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIG5lJiYobmU9SiBpbnN0YW5jZW9mIHopLHRoaXMub2JqZWN0'@;
put 'TW9kZT0hISh3PXd8fHt9KS5vYmplY3RNb2RlLG5lJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF3LndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVgodGhpcyx3LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLG5lKSx0aGlzLmZpbmFsQ2FsbGVkPSEx'@;
put 'LHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PXcuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dy5kZWZhdWx0RW5jb2Rpbmd8'@;
put 'fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKGZlKXshZnVuY3Rpb24oeGUsTGUpe3ZhciBLZSxGZT14ZS5fd3JpdGFibGVTdGF0ZSxPZT1G'@;
put 'ZS5zeW5jLGplPUZlLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGplKXRocm93IG5ldyB0ZTtpZigoS2U9RmUpLndyaXRpbmc9ITEsS2Uud3JpdGVjYj1udWxsLEtlLmxlbmd0aC09S2Uud3JpdGVsZW4sS2Uud3JpdGVsZW49MCxMZSkhZnVuY3Rpb24oS2UsWWUsUWUsbHQsUGUpey0t'@;
put 'WWUucGVuZGluZ2NiLFFlPyhLLm5leHRUaWNrKFBlLGx0KSxLLm5leHRUaWNrKHAsS2UsWWUpLEtlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxHKEtlLGx0KSk6KFBlKGx0KSxLZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRyhLZSxsdCkscChLZSxZZSkpfSh4ZSxG'@;
put 'ZSxPZSxMZSxqZSk7ZWxzZXt2YXIgV2U9UyhGZSl8fHhlLmRlc3Ryb3llZDtXZXx8RmUuY29ya2VkfHxGZS5idWZmZXJQcm9jZXNzaW5nfHwhRmUuYnVmZmVyZWRSZXF1ZXN0fHxDKHhlLEZlKSxPZT9LLm5leHRUaWNrKGcseGUsRmUsV2UsamUpOmcoeGUsRmUsV2UsamUpfX0oSixmZSl9LHRo'@;
put 'aXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9'@;
put 'PXcuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISF3LmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgSSh0aGlzKX1mdW5jdGlvbiBIKHcpe3ZhciBKPXRoaXMgaW5zdGFuY2VvZih6PXp8fFIoNjc1MykpO2lmKCFK'@;
put 'JiYhQi5jYWxsKEgsdGhpcykpcmV0dXJuIG5ldyBIKHcpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IEQodyx0aGlzLEopLHRoaXMud3JpdGFibGU9ITAsdyYmKCJmdW5jdGlvbiI9PXR5cGVvZiB3LndyaXRlJiYodGhpcy5fd3JpdGU9dy53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIHcud3Jp'@;
put 'dGV2JiYodGhpcy5fd3JpdGV2PXcud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2Ygdy5kZXN0cm95JiYodGhpcy5fZGVzdHJveT13LmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiB3LmZpbmFsJiYodGhpcy5fZmluYWw9dy5maW5hbCkpLEUuY2FsbCh0aGlzKX1mdW5jdGlvbiBOKHcsSixu'@;
put 'ZSxkZSxmZSx4ZSxMZSl7Si53cml0ZWxlbj1kZSxKLndyaXRlY2I9TGUsSi53cml0aW5nPSEwLEouc3luYz0hMCxKLmRlc3Ryb3llZD9KLm9ud3JpdGUobmV3IHNlKCJ3cml0ZSIpKTpuZT93Ll93cml0ZXYoZmUsSi5vbndyaXRlKTp3Ll93cml0ZShmZSx4ZSxKLm9ud3JpdGUpLEouc3luYz0h'@;
put 'MX1mdW5jdGlvbiBnKHcsSixuZSxkZSl7dmFyIGZlLHhlO25lfHwoZmU9dywwPT09KHhlPUopLmxlbmd0aCYmeGUubmVlZERyYWluJiYoeGUubmVlZERyYWluPSExLGZlLmVtaXQoImRyYWluIikpKSxKLnBlbmRpbmdjYi0tLGRlKCkscCh3LEopfWZ1bmN0aW9uIEModyxKKXtKLmJ1ZmZlclBy'@;
put 'b2Nlc3Npbmc9ITA7dmFyIG5lPUouYnVmZmVyZWRSZXF1ZXN0O2lmKHcuX3dyaXRldiYmbmUmJm5lLm5leHQpe3ZhciBmZT1uZXcgQXJyYXkoSi5idWZmZXJlZFJlcXVlc3RDb3VudCkseGU9Si5jb3JrZWRSZXF1ZXN0c0ZyZWU7eGUuZW50cnk9bmU7Zm9yKHZhciBMZT0wLEZlPSEwO25lOylm'@;
put 'ZVtMZV09bmUsbmUuaXNCdWZ8fChGZT0hMSksbmU9bmUubmV4dCxMZSs9MTtmZS5hbGxCdWZmZXJzPUZlLE4odyxKLCEwLEoubGVuZ3RoLGZlLCIiLHhlLmZpbmlzaCksSi5wZW5kaW5nY2IrKyxKLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx4ZS5uZXh0PyhKLmNvcmtlZFJlcXVlc3RzRnJl'@;
put 'ZT14ZS5uZXh0LHhlLm5leHQ9bnVsbCk6Si5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEkoSiksSi5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtuZTspe3ZhciBPZT1uZS5jaHVuaztpZihOKHcsSiwhMSxKLm9iamVjdE1vZGU/MTpPZS5sZW5ndGgsT2UsbmUuZW5jb2RpbmcsbmUu'@;
put 'Y2FsbGJhY2spLG5lPW5lLm5leHQsSi5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEoud3JpdGluZylicmVha31udWxsPT09bmUmJihKLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9Si5idWZmZXJlZFJlcXVlc3Q9bmUsSi5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIFModyl7cmV0dXJu'@;
put 'IHcuZW5kaW5nJiYwPT09dy5sZW5ndGgmJm51bGw9PT13LmJ1ZmZlcmVkUmVxdWVzdCYmIXcuZmluaXNoZWQmJiF3LndyaXRpbmd9ZnVuY3Rpb24gdih3LEope3cuX2ZpbmFsKGZ1bmN0aW9uKG5lKXtKLnBlbmRpbmdjYi0tLG5lJiZHKHcsbmUpLEoucHJlZmluaXNoZWQ9ITAsdy5lbWl0KCJw'@;
put 'cmVmaW5pc2giKSxwKHcsSil9KX1mdW5jdGlvbiBwKHcsSil7dmFyIGZlLHhlLG5lPVMoSik7aWYobmUmJihmZT13LCh4ZT1KKS5wcmVmaW5pc2hlZHx8eGUuZmluYWxDYWxsZWR8fCgiZnVuY3Rpb24iIT10eXBlb2YgZmUuX2ZpbmFsfHx4ZS5kZXN0cm95ZWQ/KHhlLnByZWZpbmlzaGVkPSEw'@;
put 'LGZlLmVtaXQoInByZWZpbmlzaCIpKTooeGUucGVuZGluZ2NiKysseGUuZmluYWxDYWxsZWQ9ITAsSy5uZXh0VGljayh2LGZlLHhlKSkpLDA9PT1KLnBlbmRpbmdjYiYmKEouZmluaXNoZWQ9ITAsdy5lbWl0KCJmaW5pc2giKSxKLmF1dG9EZXN0cm95KSkpe3ZhciBkZT13Ll9yZWFkYWJsZVN0'@;
put 'YXRlOyghZGV8fGRlLmF1dG9EZXN0cm95JiZkZS5lbmRFbWl0dGVkKSYmdy5kZXN0cm95KCl9cmV0dXJuIG5lfVIoNTcxNykoSCxFKSxELnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHc9dGhpcy5idWZmZXJlZFJlcXVlc3QsSj1bXTt3OylKLnB1c2godyksdz13Lm5l'@;
put 'eHQ7cmV0dXJuIEp9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShELnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OmsuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNl'@;
put 'IF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/'@;
put 'KEI9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbih3KXtyZXR1cm4hIUIuY2FsbCh0aGlzLHcpfHx0aGlzPT09SCYmdyYmdy5fd3JpdGFibGVTdGF0ZSBpbnN0YW5j'@;
put 'ZW9mIER9fSkpOkI9ZnVuY3Rpb24odyl7cmV0dXJuIHcgaW5zdGFuY2VvZiB0aGlzfSxILnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Ryh0aGlzLG5ldyBvZSl9LEgucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcsSixuZSl7dmFyIGRlLEZlLE9lLGplLGZlPXRoaXMuX3dyaXRhYmxlU3Rh'@;
put 'dGUseGU9ITEsTGU9IWZlLm9iamVjdE1vZGUmJihqLmlzQnVmZmVyKGRlPXcpfHxkZSBpbnN0YW5jZW9mIFYpO3JldHVybiBMZSYmIWouaXNCdWZmZXIodykmJih3PWouZnJvbSh3KSksImZ1bmN0aW9uIj09dHlwZW9mIEomJihuZT1KLEo9bnVsbCksTGU/Sj0iYnVmZmVyIjpKfHwoSj1mZS5k'@;
put 'ZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBuZSYmKG5lPWIpLGZlLmVuZGluZz8oRmU9dGhpcyxPZT1uZSxqZT1uZXcgdWUsRyhGZSxqZSksSy5uZXh0VGljayhPZSxqZSkpOihMZXx8ZnVuY3Rpb24oRmUsT2UsamUsV2Upe3ZhciBLZTtyZXR1cm4gbnVsbD09PWplP0tlPW5l'@;
put 'dyBoZToic3RyaW5nIj09dHlwZW9mIGplfHxPZS5vYmplY3RNb2RlfHwoS2U9bmV3IHEoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLGplKSksIUtlfHwoRyhGZSxLZSksSy5uZXh0VGljayhXZSxLZSksITEpfSh0aGlzLGZlLHcsbmUpKSYmKGZlLnBlbmRpbmdjYisrLHhlPWZ1bmN0aW9u'@;
put 'KEZlLE9lLGplLFdlLEtlLFllKXtpZighamUpe3ZhciBRZT0oVGU9V2UsKEFlPU9lKS5vYmplY3RNb2RlfHwhMT09PUFlLmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT10eXBlb2YgVGV8fChUZT1qLmZyb20oVGUsS2UpKSxUZSk7V2UhPT1RZSYmKGplPSEwLEtlPSJidWZmZXIiLFdlPVFlKX12'@;
put 'YXIgQWUsVGUsbHQ9T2Uub2JqZWN0TW9kZT8xOldlLmxlbmd0aDtPZS5sZW5ndGgrPWx0O3ZhciBQZT1PZS5sZW5ndGg8T2UuaGlnaFdhdGVyTWFyaztpZihQZXx8KE9lLm5lZWREcmFpbj0hMCksT2Uud3JpdGluZ3x8T2UuY29ya2VkKXt2YXIgYmU9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdDtP'@;
put 'ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpXZSxlbmNvZGluZzpLZSxpc0J1ZjpqZSxjYWxsYmFjazpZZSxuZXh0Om51bGx9LGJlP2JlLm5leHQ9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdDpPZS5idWZmZXJlZFJlcXVlc3Q9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdCxPZS5idWZmZXJlZFJl'@;
put 'cXVlc3RDb3VudCs9MX1lbHNlIE4oRmUsT2UsITEsbHQsV2UsS2UsWWUpO3JldHVybiBQZX0odGhpcyxmZSxMZSx3LEosbmUpKSx4ZX0sSC5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEgucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigp'@;
put 'e3ZhciB3PXRoaXMuX3dyaXRhYmxlU3RhdGU7dy5jb3JrZWQmJih3LmNvcmtlZC0tLHcud3JpdGluZ3x8dy5jb3JrZWR8fHcuYnVmZmVyUHJvY2Vzc2luZ3x8IXcuYnVmZmVyZWRSZXF1ZXN0fHxDKHRoaXMsdykpfSxILnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odyl7'@;
put 'aWYoInN0cmluZyI9PXR5cGVvZiB3JiYodz13LnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKHcrIiIpLnRvTG93ZXJDYXNlKCkp'@;
put 'Pi0xKSl0aHJvdyBuZXcgY2Uodyk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXcsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'X3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRl'@;
put 'LmhpZ2hXYXRlck1hcmt9fSksSC5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHcsSixuZSl7bmUobmV3IGVlKCJfd3JpdGUoKSIpKX0sSC5wcm90b3R5cGUuX3dyaXRldj1udWxsLEgucHJvdG90eXBlLmVuZD1mdW5jdGlvbih3LEosbmUpe3ZhciB4ZSxMZSxkZT10aGlzLl93cml0YWJsZVN0'@;
put 'YXRlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB3PyhuZT13LHc9bnVsbCxKPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBKJiYobmU9SixKPW51bGwpLG51bGwhPXcmJnRoaXMud3JpdGUodyxKKSxkZS5jb3JrZWQmJihkZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxkZS5lbmRpbmd8fChM'@;
put 'ZT1uZSwoeGU9ZGUpLmVuZGluZz0hMCxwKHRoaXMseGUpLExlJiYoeGUuZmluaXNoZWQ/Sy5uZXh0VGljayhMZSk6dGhpcy5vbmNlKCJmaW5pc2giLExlKSkseGUuZW5kZWQ9ITAsdGhpcy53cml0YWJsZT0hMSksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0'@;
put 'YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9p'@;
put 'ZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih3KXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dyl9fSksSC5wcm90b3R5cGUuZGVzdHJveT1ZLmRlc3Ryb3ksSC5w'@;
put 'cm90b3R5cGUuX3VuZGVzdHJveT1ZLnVuZGVzdHJveSxILnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih3LEope0oodyl9fSw1ODUwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDQxNTUpO2Z1bmN0aW9uIEkoaGUsdWUsY2Upe3JldHVybih1ZT0ic3ltYm9sIj09dHlwZW9m'@;
put 'KGI9ZnVuY3Rpb24oRCxIKXtpZigib2JqZWN0IiE9dHlwZW9mIER8fG51bGw9PT1EKXJldHVybiBEO3ZhciBOPURbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1OKXt2YXIgZz1OLmNhbGwoRCwic3RyaW5nIik7aWYoIm9iamVjdCIhPXR5cGVvZiBnKXJldHVybiBnO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhEKX0odWUpKT9iOlN0cmluZyhiKSlpbiBoZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsdWUse3ZhbHVlOmNlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwLHdyaXRhYmxlOiEwfSk6aGVbdWVdPWNlLGhlO3ZhciBifXZhciBrPVIoODYxMCksRT1TeW1ib2woImxhc3RSZXNvbHZlIiksaj1TeW1ib2woImxhc3RSZWplY3QiKSxWPVN5bWJvbCgiZXJyb3IiKSxCPVN5bWJvbCgiZW5kZWQiKSxZPVN5bWJvbCgibGFzdFByb21pc2UiKSxYPVN5bWJv'@;
put 'bCgiaGFuZGxlUHJvbWlzZSIpLFU9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBxKGhlLHVlKXtyZXR1cm57dmFsdWU6aGUsZG9uZTp1ZX19ZnVuY3Rpb24gZWUoaGUpe3ZhciB1ZT1oZVtFXTtpZihudWxsIT09dWUpe3ZhciBjZT1oZVtVXS5yZWFkKCk7bnVsbCE9PWNlJiYoaGVbWV09bnVs'@;
put 'bCxoZVtFXT1udWxsLGhlW2pdPW51bGwsdWUocShjZSwhMSkpKX19ZnVuY3Rpb24gdGUoaGUpe0submV4dFRpY2soZWUsaGUpfXZhciBvZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxzZT1PYmplY3Quc2V0UHJvdG90eXBlT2YoKEkoej17Z2V0IHN0cmVhbSgpe3JldHVy'@;
put 'biB0aGlzW1VdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGhlPXRoaXMsdWU9dGhpc1tWXTtpZihudWxsIT09dWUpcmV0dXJuIFByb21pc2UucmVqZWN0KHVlKTtpZih0aGlzW0JdKXJldHVybiBQcm9taXNlLnJlc29sdmUocSh2b2lkIDAsITApKTtpZih0aGlzW1VdLmRlc3Ryb3llZClyZXR1cm4g'@;
put 'bmV3IFByb21pc2UoZnVuY3Rpb24oRCxIKXtLLm5leHRUaWNrKGZ1bmN0aW9uKCl7aGVbVl0/SChoZVtWXSk6RChxKHZvaWQgMCwhMCkpfSl9KTt2YXIgY2UsRCxILEc9dGhpc1tZXTtpZihHKWNlPW5ldyBQcm9taXNlKChEPUcsSD10aGlzLGZ1bmN0aW9uKE4sZyl7RC50aGVuKGZ1bmN0aW9u'@;
put 'KCl7SFtCXT9OKHEodm9pZCAwLCEwKSk6SFtYXShOLGcpfSxnKX0pKTtlbHNle3ZhciBiPXRoaXNbVV0ucmVhZCgpO2lmKG51bGwhPT1iKXJldHVybiBQcm9taXNlLnJlc29sdmUocShiLCExKSk7Y2U9bmV3IFByb21pc2UodGhpc1tYXSl9cmV0dXJuIHRoaXNbWV09Y2UsY2V9fSxTeW1ib2wu'@;
put 'YXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksSSh6LCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHVlLGNlKXtoZVtVXS5kZXN0cm95KG51bGwsZnVuY3Rpb24oRyl7Rz9jZShHKTp1ZShxKHZvaWQgMCwhMCkp'@;
put 'fSl9KX0pLHopLG9lKTtNLmV4cG9ydHM9ZnVuY3Rpb24oaGUpe3ZhciB1ZSxjZT1PYmplY3QuY3JlYXRlKHNlLChJKHVlPXt9LFUse3ZhbHVlOmhlLHdyaXRhYmxlOiEwfSksSSh1ZSxFLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSSh1ZSxqLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSks'@;
put 'SSh1ZSxWLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSSh1ZSxCLHt2YWx1ZTpoZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksSSh1ZSxYLHt2YWx1ZTpmdW5jdGlvbihHLGIpe3ZhciBEPWNlW1VdLnJlYWQoKTtEPyhjZVtZXT1udWxsLGNlW0VdPW51bGwsY2Vb'@;
put 'al09bnVsbCxHKHEoRCwhMSkpKTooY2VbRV09RyxjZVtqXT1iKX0sd3JpdGFibGU6ITB9KSx1ZSkpO3JldHVybiBjZVtZXT1udWxsLGsoaGUsZnVuY3Rpb24oRyl7aWYoRyYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PUcuY29kZSl7dmFyIGI9Y2Vbal07cmV0dXJuIG51bGwhPT1i'@;
put 'JiYoY2VbWV09bnVsbCxjZVtFXT1udWxsLGNlW2pdPW51bGwsYihHKSksdm9pZChjZVtWXT1HKX12YXIgRD1jZVtFXTtudWxsIT09RCYmKGNlW1ldPW51bGwsY2VbRV09bnVsbCxjZVtqXT1udWxsLEQocSh2b2lkIDAsITApKSksY2VbQl09ITB9KSxoZS5vbigicmVhZGFibGUiLHRlLmJpbmQo'@;
put 'bnVsbCxjZSkpLGNlfX0sNzMyNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooWSxYKXt2YXIgVT1PYmplY3Qua2V5cyhZKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFkpO1gmJihxPXEuZmlsdGVy'@;
put 'KGZ1bmN0aW9uKGVlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihZLGVlKS5lbnVtZXJhYmxlfSkpLFUucHVzaC5hcHBseShVLHEpfXJldHVybiBVfWZ1bmN0aW9uIEsoWSl7Zm9yKHZhciBYPTE7WDxhcmd1bWVudHMubGVuZ3RoO1grKyl7dmFyIFU9bnVsbCE9YXJn'@;
put 'dW1lbnRzW1hdP2FyZ3VtZW50c1tYXTp7fTtYJTI/eihPYmplY3QoVSksITApLmZvckVhY2goZnVuY3Rpb24ocSl7SShZLHEsVVtxXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhZLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny'@;
put 'aXB0b3JzKFUpKTp6KE9iamVjdChVKSkuZm9yRWFjaChmdW5jdGlvbihxKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxxLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVSxxKSl9KX1yZXR1cm4gWX1mdW5jdGlvbiBJKFksWCxVKXtyZXR1cm4oWD1FKFgpKWluIFk/T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KFksWCx7dmFsdWU6VSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOllbWF09VSxZfWZ1bmN0aW9uIEUoWSl7dmFyIFg9ZnVuY3Rpb24oVSxxKXtpZigib2JqZWN0IiE9dHlwZW9mIFV8fG51bGw9PT1VKXJldHVybiBVO3ZhciBlZT1VW1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZWUpe3ZhciB0ZT1lZS5jYWxsKFUsInN0cmluZyIpO2lmKCJvYmplY3QiIT10eXBlb2YgdGUpcmV0dXJuIHRlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0'@;
put 'dXJuIFN0cmluZyhVKX0oWSk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBYP1g6U3RyaW5nKFgpfXZhciBqPVIoODc2NCkuQnVmZmVyLFY9UigyMzYxKS5pbnNwZWN0LEI9ViYmVi5jdXN0b218fCJpbnNwZWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBZKCl7KGZ1bmN0aW9uKGVl'@;
put 'LHRlKXtpZighKGVlIGluc3RhbmNlb2YgdGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxZKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXZhciBYLFU7cmV0dXJuIFg9WSwoVT1be2tl'@;
put 'eToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciB0ZT17ZGF0YTplZSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9dGU6dGhpcy5oZWFkPXRlLHRoaXMudGFpbD10ZSwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3Zh'@;
put 'ciB0ZT17ZGF0YTplZSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPXRlKSx0aGlzLmhlYWQ9dGUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3Jl'@;
put 'dHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZWV9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2'@;
put 'YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgdGU9dGhpcy5oZWFkLG9lPSIiK3RlLmRhdGE7dGU9dGUubmV4dDspb2UrPWVlK3RlLmRhdGE7cmV0dXJuIG9lfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMu'@;
put 'bGVuZ3RoKXJldHVybiBqLmFsbG9jKDApO2Zvcih2YXIgaGU9ai5hbGxvY1Vuc2FmZShlZT4+PjApLHVlPXRoaXMuaGVhZCxjZT0wO3VlOylqLnByb3RvdHlwZS5jb3B5LmNhbGwodWUuZGF0YSxoZSxjZSksY2UrPXVlLmRhdGEubGVuZ3RoLHVlPXVlLm5leHQ7cmV0dXJuIGhlfX0se2tleToi'@;
put 'Y29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZTtyZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhvZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOm9lPWVlPT09dGhpcy5oZWFkLmRhdGEu'@;
put 'bGVuZ3RoP3RoaXMuc2hpZnQoKTp0ZT90aGlzLl9nZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1ZmZlcihlZSksb2V9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIHRl'@;
put 'PXRoaXMuaGVhZCxvZT0xLHNlPXRlLmRhdGE7Zm9yKGVlLT1zZS5sZW5ndGg7dGU9dGUubmV4dDspe3ZhciBoZT10ZS5kYXRhLHVlPWVlPmhlLmxlbmd0aD9oZS5sZW5ndGg6ZWU7aWYoc2UrPXVlPT09aGUubGVuZ3RoP2hlOmhlLnNsaWNlKDAsZWUpLDA9PShlZS09dWUpKXt1ZT09PWhlLmxl'@;
put 'bmd0aD8oKytvZSx0aGlzLmhlYWQ9dGUubmV4dD90ZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXRlLHRlLmRhdGE9aGUuc2xpY2UodWUpKTticmVha30rK29lfXJldHVybiB0aGlzLmxlbmd0aC09b2Usc2V9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlZSl7'@;
put 'dmFyIHRlPWouYWxsb2NVbnNhZmUoZWUpLG9lPXRoaXMuaGVhZCxzZT0xO2ZvcihvZS5kYXRhLmNvcHkodGUpLGVlLT1vZS5kYXRhLmxlbmd0aDtvZT1vZS5uZXh0Oyl7dmFyIGhlPW9lLmRhdGEsdWU9ZWU+aGUubGVuZ3RoP2hlLmxlbmd0aDplZTtpZihoZS5jb3B5KHRlLHRlLmxlbmd0aC1l'@;
put 'ZSwwLHVlKSwwPT0oZWUtPXVlKSl7dWU9PT1oZS5sZW5ndGg/KCsrc2UsdGhpcy5oZWFkPW9lLm5leHQ/b2UubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1vZSxvZS5kYXRhPWhlLnNsaWNlKHVlKSk7YnJlYWt9KytzZX1yZXR1cm4gdGhpcy5sZW5ndGgtPXNlLHRlfX0se2tleTpC'@;
put 'LHZhbHVlOmZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4gVih0aGlzLEsoSyh7fSx0ZSkse30se2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSkmJmZ1bmN0aW9uIGsoWSxYKXtmb3IodmFyIFU9MDtVPFgubGVuZ3RoO1UrKyl7dmFyIHE9WFtVXTtxLmVudW1lcmFibGU9cS5lbnVtZXJhYmxl'@;
put 'fHwhMSxxLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gcSYmKHEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLEUocS5rZXkpLHEpfX0oWC5wcm90b3R5cGUsVSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksWX0oKX0sMTE5'@;
put 'NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7ZnVuY3Rpb24gSyhFLGope2soRSxqKSxJKEUpfWZ1bmN0aW9uIEkoRSl7RS5fd3JpdGFibGVTdGF0ZSYmIUUuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxFLl9yZWFkYWJsZVN0YXRlJiYhRS5fcmVhZGFibGVTdGF0ZS5l'@;
put 'bWl0Q2xvc2V8fEUuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBrKEUsail7RS5lbWl0KCJlcnJvciIsail9TS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uKEUsail7dmFyIFY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRo'@;
put 'aXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhqP2ooRSk6RSYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx6Lm5leHRUaWNrKGss'@;
put 'dGhpcyxFKSk6ei5uZXh0VGljayhrLHRoaXMsRSkpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShF'@;
put 'fHxudWxsLGZ1bmN0aW9uKFgpeyFqJiZYP1YuX3dyaXRhYmxlU3RhdGU/Vi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/ei5uZXh0VGljayhJLFYpOihWLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx6Lm5leHRUaWNrKEssVixYKSk6ei5uZXh0VGljayhLLFYsWCk6aj8oei5u'@;
put 'ZXh0VGljayhJLFYpLGooWCkpOnoubmV4dFRpY2soSSxWKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxl'@;
put 'U3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0'@;
put 'aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uKEUs'@;
put 'ail7dmFyIFY9RS5fcmVhZGFibGVTdGF0ZSxCPUUuX3dyaXRhYmxlU3RhdGU7ViYmVi5hdXRvRGVzdHJveXx8QiYmQi5hdXRvRGVzdHJveT9FLmRlc3Ryb3koaik6RS5lbWl0KCJlcnJvciIsail9fX0sODYxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4MSkucS5FUlJfU1RS'@;
put 'RUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBLKCl7fU0uZXhwb3J0cz1mdW5jdGlvbiBJKGssRSxqKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRSlyZXR1cm4gSShrLG51bGwsRSk7dmFyIGhlLHVlO0V8fChFPXt9KSxoZT1qfHxLLHVlPSExLGo9ZnVuY3Rpb24oKXtpZighdWUpe3VlPSEw'@;
put 'O2Zvcih2YXIgY2U9YXJndW1lbnRzLmxlbmd0aCxHPW5ldyBBcnJheShjZSksYj0wO2I8Y2U7YisrKUdbYl09YXJndW1lbnRzW2JdO2hlLmFwcGx5KHRoaXMsRyl9fTt2YXIgVj1FLnJlYWRhYmxlfHwhMSE9PUUucmVhZGFibGUmJmsucmVhZGFibGUsQj1FLndyaXRhYmxlfHwhMSE9PUUud3Jp'@;
put 'dGFibGUmJmsud3JpdGFibGUsWT1mdW5jdGlvbigpe2sud3JpdGFibGV8fFUoKX0sWD1rLl93cml0YWJsZVN0YXRlJiZrLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLFU9ZnVuY3Rpb24oKXtCPSExLFg9ITAsVnx8ai5jYWxsKGspfSxxPWsuX3JlYWRhYmxlU3RhdGUmJmsuX3JlYWRhYmxlU3Rh'@;
put 'dGUuZW5kRW1pdHRlZCxlZT1mdW5jdGlvbigpe1Y9ITEscT0hMCxCfHxqLmNhbGwoayl9LHRlPWZ1bmN0aW9uKGhlKXtqLmNhbGwoayxoZSl9LG9lPWZ1bmN0aW9uKCl7dmFyIGhlO3JldHVybiBWJiYhcT8oay5fcmVhZGFibGVTdGF0ZSYmay5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KGhlPW5l'@;
put 'dyB6KSxqLmNhbGwoayxoZSkpOkImJiFYPyhrLl93cml0YWJsZVN0YXRlJiZrLl93cml0YWJsZVN0YXRlLmVuZGVkfHwoaGU9bmV3IHopLGouY2FsbChrLGhlKSk6dm9pZCAwfSxzZT1mdW5jdGlvbigpe2sucmVxLm9uKCJmaW5pc2giLFUpfTtyZXR1cm4gZnVuY3Rpb24oaGUpe3JldHVybiBo'@;
put 'ZS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBoZS5hYm9ydH0oayk/KGsub24oImNvbXBsZXRlIixVKSxrLm9uKCJhYm9ydCIsb2UpLGsucmVxP3NlKCk6ay5vbigicmVxdWVzdCIsc2UpKTpCJiYhay5fd3JpdGFibGVTdGF0ZSYmKGsub24oImVuZCIsWSksay5vbigiY2xvc2UiLFkp'@;
put 'KSxrLm9uKCJlbmQiLGVlKSxrLm9uKCJmaW5pc2giLFUpLCExIT09RS5lcnJvciYmay5vbigiZXJyb3IiLHRlKSxrLm9uKCJjbG9zZSIsb2UpLGZ1bmN0aW9uKCl7ay5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFUpLGsucmVtb3ZlTGlzdGVuZXIoImFib3J0IixvZSksay5yZW1vdmVMaXN0'@;
put 'ZW5lcigicmVxdWVzdCIsc2UpLGsucmVxJiZrLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxrLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkpLGsucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixZKSxrLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLGsucmVtb3ZlTGlzdGVuZXIoImVuZCIs'@;
put 'ZWUpLGsucmVtb3ZlTGlzdGVuZXIoImVycm9yIix0ZSksay5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLG9lKX19fSw1MTY3Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sOTk0'@;
put 'NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MjgxKS5xLEk9Sy5FUlJfTUlTU0lOR19BUkdTLGs9Sy5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBFKEIpe2lmKEIpdGhyb3cgQn1mdW5jdGlvbiBqKEIpe0IoKX1mdW5jdGlvbiBWKEIsWSl7cmV0dXJuIEIucGlwZShZ'@;
put 'KX1NLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIEI9YXJndW1lbnRzLmxlbmd0aCxZPW5ldyBBcnJheShCKSxYPTA7WDxCO1grKylZW1hdPWFyZ3VtZW50c1tYXTt2YXIgVSx0ZSxxPSh0ZT1ZKS5sZW5ndGg/ImZ1bmN0aW9uIiE9dHlwZW9mIHRlW3RlLmxlbmd0aC0xXT9FOnRlLnBvcCgp'@;
put 'OkU7aWYoQXJyYXkuaXNBcnJheShZWzBdKSYmKFk9WVswXSksWS5sZW5ndGg8Mil0aHJvdyBuZXcgSSgic3RyZWFtcyIpO3ZhciBlZT1ZLm1hcChmdW5jdGlvbih0ZSxvZSl7dmFyIHNlPW9lPFkubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGhlLHVlLGNlLEcpe3ZhciBILE47SD1HLE49ITEs'@;
put 'Rz1mdW5jdGlvbigpe058fChOPSEwLEguYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfTt2YXIgYj0hMTtoZS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7Yj0hMH0pLHZvaWQgMD09PXomJih6PVIoODYxMCkpLHooaGUse3JlYWRhYmxlOnVlLHdyaXRhYmxlOmNlfSxmdW5jdGlvbihIKXtpZihIKXJl'@;
put 'dHVybiBHKEgpO2I9ITAsRygpfSk7dmFyIEQ9ITE7cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKCFiJiYhRClyZXR1cm4gRD0hMCxmdW5jdGlvbihOKXtyZXR1cm4gTi5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBOLmFib3J0fShoZSk/aGUuYWJvcnQoKToiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'aGUuZGVzdHJveT9oZS5kZXN0cm95KCk6dm9pZCBHKEh8fG5ldyBrKCJwaXBlIikpfX0odGUsc2Usb2U+MCxmdW5jdGlvbihoZSl7VXx8KFU9aGUpLGhlJiZlZS5mb3JFYWNoKGopLHNlfHwoZWUuZm9yRWFjaChqKSxxKFUpKX0pfSk7cmV0dXJuIFkucmVkdWNlKFYpfX0sMjQ1NzooTSxPLFIp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7TS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uKEssSSxrLEUpe3ZhciBWLGo9bnVsbCE9KFY9SSkuaGlnaFdhdGVyTWFyaz9WLmhpZ2hXYXRlck1hcms6RT9WW2tdOm51bGw7aWYo'@;
put 'bnVsbCE9ail7aWYoIWlzRmluaXRlKGopfHxNYXRoLmZsb29yKGopIT09anx8ajwwKXRocm93IG5ldyB6KEU/azoiaGlnaFdhdGVyTWFyayIsaik7cmV0dXJuIE1hdGguZmxvb3Ioail9cmV0dXJuIEsub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwyNTAzOihNLE8sUik9PntNLmV4cG9ydHM9Uig3'@;
put 'MTg3KS5FdmVudEVtaXR0ZXJ9LDg0NzM6KE0sTyxSKT0+eyhPPU0uZXhwb3J0cz1SKDk0ODEpKS5TdHJlYW09TyxPLlJlYWRhYmxlPU8sTy5Xcml0YWJsZT1SKDQyMjkpLE8uRHVwbGV4PVIoNjc1MyksTy5UcmFuc2Zvcm09Uig0NjA1KSxPLlBhc3NUaHJvdWdoPVIoMjcyNSksTy5maW5pc2hl'@;
put 'ZD1SKDg2MTApLE8ucGlwZWxpbmU9Uig5OTQ2KX0sNzQxODpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPLFIpe2lmKFI9Ui5zcGxpdCgiOiIpWzBdLCEoTz0rTykpcmV0dXJuITE7c3dpdGNoKFIpe2Nhc2UiaHR0cCI6Y2FzZSJ3cyI6cmV0dXJuIDgwIT09TztjYXNlImh0'@;
put 'dHBzIjpjYXNlIndzcyI6cmV0dXJuIDQ0MyE9PU87Y2FzZSJmdHAiOnJldHVybiAyMSE9PU87Y2FzZSJnb3BoZXIiOnJldHVybiA3MCE9PU87Y2FzZSJmaWxlIjpyZXR1cm4hMX1yZXR1cm4gMCE9PU99fSw5ODQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSk7Y29uc3QgSz1SKDkyODIpLEk9Uigy'@;
put 'NTIwKSxrPVIoNzIxNyk7bGV0IEU7dHJ5e0U9UigyODg0KX1jYXRjaHt9Y29uc3Qgaj17bm9zb3J0OiEwLHNpbGVudDohMH07bGV0IFY9MDtjb25zdCBCPSJ3aW4zMiI9PT16LnBsYXRmb3JtLFk9Y2U9PntpZihbInVubGluayIsImNobW9kIiwic3RhdCIsImxzdGF0Iiwicm1kaXIiLCJyZWFk'@;
put 'ZGlyIl0uZm9yRWFjaChHPT57Y2VbR109Y2VbR118fGtbR10sY2VbRys9IlN5bmMiXT1jZVtHXXx8a1tHXX0pLGNlLm1heEJ1c3lUcmllcz1jZS5tYXhCdXN5VHJpZXN8fDMsY2UuZW1maWxlV2FpdD1jZS5lbWZpbGVXYWl0fHwxZTMsITE9PT1jZS5nbG9iJiYoY2UuZGlzYWJsZUdsb2I9ITAp'@;
put 'LCEwIT09Y2UuZGlzYWJsZUdsb2ImJnZvaWQgMD09PUUpdGhyb3cgRXJyb3IoImdsb2IgZGVwZW5kZW5jeSBub3QgZm91bmQsIHNldCBgb3B0aW9ucy5kaXNhYmxlR2xvYiA9IHRydWVgIGlmIGludGVudGlvbmFsIik7Y2UuZGlzYWJsZUdsb2I9Y2UuZGlzYWJsZUdsb2J8fCExLGNlLmdsb2I9'@;
put 'Y2UuZ2xvYnx8an0sWD0oY2UsRyxiKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiBHJiYoYj1HLEc9e30pLEsoY2UsInJpbXJhZjogbWlzc2luZyBwYXRoIiksSy5lcXVhbCh0eXBlb2YgY2UsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxLLmVxdWFsKHR5cGVvZiBi'@;
put 'LCJmdW5jdGlvbiIsInJpbXJhZjogY2FsbGJhY2sgZnVuY3Rpb24gcmVxdWlyZWQiKSxLKEcsInJpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkIiksSy5lcXVhbCh0eXBlb2YgRywib2JqZWN0IiwicmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKSxZKEcp'@;
put 'O2xldCBEPTAsSD1udWxsLE49MDtjb25zdCBnPShDLFMpPT5DP2IoQyk6KE49Uy5sZW5ndGgsMD09PU4/YigpOnZvaWQgUy5mb3JFYWNoKHY9Pntjb25zdCBwPXc9PntpZih3KXtpZigoIkVCVVNZIj09PXcuY29kZXx8IkVOT1RFTVBUWSI9PT13LmNvZGV8fCJFUEVSTSI9PT13LmNvZGUpJiZE'@;
put 'PEcubWF4QnVzeVRyaWVzKXJldHVybiBEKyssc2V0VGltZW91dCgoKT0+VSh2LEcscCksMTAwKkQpO2lmKCJFTUZJTEUiPT09dy5jb2RlJiZWPEcuZW1maWxlV2FpdClyZXR1cm4gc2V0VGltZW91dCgoKT0+VSh2LEcscCksVisrKTsiRU5PRU5UIj09PXcuY29kZSYmKHc9bnVsbCl9Vj0wLEg9'@;
put 'SHx8dywwPT0tLU4mJmIoSCl9O1UodixHLHApfSkpO2lmKEcuZGlzYWJsZUdsb2J8fCFFLmhhc01hZ2ljKGNlKSlyZXR1cm4gZyhudWxsLFtjZV0pO0cubHN0YXQoY2UsKEMsUyk9PntpZighQylyZXR1cm4gZyhudWxsLFtjZV0pO0UoY2UsRy5nbG9iLGcpfSl9LFU9KGNlLEcsYik9PntLKGNl'@;
put 'KSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIGIpLEcubHN0YXQoY2UsKEQsSCk9PkQmJiJFTk9FTlQiPT09RC5jb2RlP2IobnVsbCk6KEQmJiJFUEVSTSI9PT1ELmNvZGUmJkImJnEoY2UsRyxELGIpLEgmJkguaXNEaXJlY3RvcnkoKT90ZShjZSxHLEQsYik6dm9pZCBHLnVubGluayhjZSxO'@;
put 'PT57aWYoTil7aWYoIkVOT0VOVCI9PT1OLmNvZGUpcmV0dXJuIGIobnVsbCk7aWYoIkVQRVJNIj09PU4uY29kZSlyZXR1cm4gQj9xKGNlLEcsTixiKTp0ZShjZSxHLE4sYik7aWYoIkVJU0RJUiI9PT1OLmNvZGUpcmV0dXJuIHRlKGNlLEcsTixiKX1yZXR1cm4gYihOKX0pKSl9LHE9KGNlLEcs'@;
put 'YixEKT0+e0soY2UpLEsoRyksSygiZnVuY3Rpb24iPT10eXBlb2YgRCksRy5jaG1vZChjZSw0MzgsSD0+e0g/RCgiRU5PRU5UIj09PUguY29kZT9udWxsOmIpOkcuc3RhdChjZSwoTixnKT0+e04/RCgiRU5PRU5UIj09PU4uY29kZT9udWxsOmIpOmcuaXNEaXJlY3RvcnkoKT90ZShjZSxHLGIs'@;
put 'RCk6Ry51bmxpbmsoY2UsRCl9KX0pfSxlZT0oY2UsRyxiKT0+e0soY2UpLEsoRyk7dHJ5e0cuY2htb2RTeW5jKGNlLDQzOCl9Y2F0Y2goSCl7aWYoIkVOT0VOVCI9PT1ILmNvZGUpcmV0dXJuO3Rocm93IGJ9bGV0IEQ7dHJ5e0Q9Ry5zdGF0U3luYyhjZSl9Y2F0Y2goSCl7aWYoIkVOT0VOVCI9'@;
put 'PT1ILmNvZGUpcmV0dXJuO3Rocm93IGJ9RC5pc0RpcmVjdG9yeSgpP2hlKGNlLEcsYik6Ry51bmxpbmtTeW5jKGNlKX0sdGU9KGNlLEcsYixEKT0+e0soY2UpLEsoRyksSygiZnVuY3Rpb24iPT10eXBlb2YgRCksRy5ybWRpcihjZSxIPT57IUh8fCJFTk9URU1QVFkiIT09SC5jb2RlJiYiRUVY'@;
put 'SVNUIiE9PUguY29kZSYmIkVQRVJNIiE9PUguY29kZT9EKEgmJiJFTk9URElSIj09PUguY29kZT9iOkgpOm9lKGNlLEcsRCl9KX0sb2U9KGNlLEcsYik9PntLKGNlKSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIGIpLEcucmVhZGRpcihjZSwoRCxIKT0+e2lmKEQpcmV0dXJuIGIoRCk7bGV0'@;
put 'IE4sZz1ILmxlbmd0aDtpZigwPT09ZylyZXR1cm4gRy5ybWRpcihjZSxiKTtILmZvckVhY2goQz0+e1goSS5qb2luKGNlLEMpLEcsUz0+e2lmKCFOKXJldHVybiBTP2IoTj1TKTp2b2lkKDA9PS0tZyYmRy5ybWRpcihjZSxiKSl9KX0pfSl9LHNlPShjZSxHKT0+e2xldCBiO2lmKFkoRz1HfHx7'@;
put 'fSksSyhjZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxLLmVxdWFsKHR5cGVvZiBjZSwic3RyaW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLEsoRywicmltcmFmOiBtaXNzaW5nIG9wdGlvbnMiKSxLLmVxdWFsKHR5cGVvZiBHLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlv'@;
put 'bnMgc2hvdWxkIGJlIG9iamVjdCIpLEcuZGlzYWJsZUdsb2J8fCFFLmhhc01hZ2ljKGNlKSliPVtjZV07ZWxzZSB0cnl7Ry5sc3RhdFN5bmMoY2UpLGI9W2NlXX1jYXRjaHtiPUUuc3luYyhjZSxHLmdsb2IpfWlmKGIubGVuZ3RoKWZvcihsZXQgRD0wO0Q8Yi5sZW5ndGg7RCsrKXtjb25zdCBI'@;
put 'PWJbRF07bGV0IE47dHJ5e049Ry5sc3RhdFN5bmMoSCl9Y2F0Y2goZyl7aWYoIkVOT0VOVCI9PT1nLmNvZGUpcmV0dXJuOyJFUEVSTSI9PT1nLmNvZGUmJkImJmVlKEgsRyxnKX10cnl7TiYmTi5pc0RpcmVjdG9yeSgpP2hlKEgsRyxudWxsKTpHLnVubGlua1N5bmMoSCl9Y2F0Y2goZyl7aWYo'@;
put 'IkVOT0VOVCI9PT1nLmNvZGUpcmV0dXJuO2lmKCJFUEVSTSI9PT1nLmNvZGUpcmV0dXJuIEI/ZWUoSCxHLGcpOmhlKEgsRyxnKTtpZigiRUlTRElSIiE9PWcuY29kZSl0aHJvdyBnO2hlKEgsRyxnKX19fSxoZT0oY2UsRyxiKT0+e0soY2UpLEsoRyk7dHJ5e0cucm1kaXJTeW5jKGNlKX1jYXRj'@;
put 'aChEKXtpZigiRU5PRU5UIj09PUQuY29kZSlyZXR1cm47aWYoIkVOT1RESVIiPT09RC5jb2RlKXRocm93IGI7IkVOT1RFTVBUWSIhPT1ELmNvZGUmJiJFRVhJU1QiIT09RC5jb2RlJiYiRVBFUk0iIT09RC5jb2RlfHx1ZShjZSxHKX19LHVlPShjZSxHKT0+e0soY2UpLEsoRyksRy5yZWFkZGly'@;
put 'U3luYyhjZSkuZm9yRWFjaChIPT5zZShJLmpvaW4oY2UsSCksRykpO2NvbnN0IGI9Qj8xMDA6MTtsZXQgRD0wO2Zvcig7Oyl7bGV0IEg9ITA7dHJ5e2NvbnN0IE49Ry5ybWRpclN5bmMoY2UsRyk7cmV0dXJuIEg9ITEsTn1maW5hbGx5e2lmKCsrRDxiJiZIKWNvbnRpbnVlfX19O00uZXhwb3J0'@;
put 'cz1YLFguc3luYz1zZX0sOTc4NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9Uig1NzE3KSxJPVIoMzM0OSksaz1uZXcgQXJyYXkoMTYpLEU9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAs'@;
put 'OSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10saj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAs'@;
put 'MywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxWPVsxMSwx'@;
put 'NCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDEx'@;
put 'LDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxCPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEs'@;
put 'MTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSxZPVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLFg9WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQy'@;
put 'MTcsMF07ZnVuY3Rpb24gVSgpe0kuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gcSh1ZSxjZSl7cmV0dXJuIHVlPDxjZXx1ZT4+'@;
put 'PjMyLWNlfWZ1bmN0aW9uIGVlKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoY2VeR15iKStIK058MCxnKStEfDB9ZnVuY3Rpb24gdGUodWUsY2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKyhjZSZHfH5jZSZiKStIK058MCxnKStEfDB9ZnVuY3Rpb24gb2UodWUsY2UsRyxiLEQs'@;
put 'SCxOLGcpe3JldHVybiBxKHVlKygoY2V8fkcpXmIpK0grTnwwLGcpK0R8MH1mdW5jdGlvbiBzZSh1ZSxjZSxHLGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKGNlJmJ8RyZ+YikrSCtOfDAsZykrRHwwfWZ1bmN0aW9uIGhlKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoY2VeKEd8fmIp'@;
put 'KStIK058MCxnKStEfDB9SyhVLEkpLFUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHVlPWssY2U9MDtjZTwxNjsrK2NlKXVlW2NlXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KmNlKTtmb3IodmFyIEc9MHx0aGlzLl9hLGI9MHx0aGlzLl9iLEQ9MHx0aGlzLl9jLEg9'@;
put 'MHx0aGlzLl9kLE49MHx0aGlzLl9lLGc9MHx0aGlzLl9hLEM9MHx0aGlzLl9iLFM9MHx0aGlzLl9jLHY9MHx0aGlzLl9kLHA9MHx0aGlzLl9lLHc9MDt3PDgwO3crPTEpe3ZhciBKLG5lO3c8MTY/KEo9ZWUoRyxiLEQsSCxOLHVlW0Vbd11dLFlbMF0sVlt3XSksbmU9aGUoZyxDLFMsdixwLHVl'@;
put 'W2pbd11dLFhbMF0sQlt3XSkpOnc8MzI/KEo9dGUoRyxiLEQsSCxOLHVlW0Vbd11dLFlbMV0sVlt3XSksbmU9c2UoZyxDLFMsdixwLHVlW2pbd11dLFhbMV0sQlt3XSkpOnc8NDg/KEo9b2UoRyxiLEQsSCxOLHVlW0Vbd11dLFlbMl0sVlt3XSksbmU9b2UoZyxDLFMsdixwLHVlW2pbd11dLFhb'@;
put 'Ml0sQlt3XSkpOnc8NjQ/KEo9c2UoRyxiLEQsSCxOLHVlW0Vbd11dLFlbM10sVlt3XSksbmU9dGUoZyxDLFMsdixwLHVlW2pbd11dLFhbM10sQlt3XSkpOihKPWhlKEcsYixELEgsTix1ZVtFW3ddXSxZWzRdLFZbd10pLG5lPWVlKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzRdLEJbd10pKSxHPU4s'@;
put 'Tj1ILEg9cShELDEwKSxEPWIsYj1KLGc9cCxwPXYsdj1xKFMsMTApLFM9QyxDPW5lfXZhciBkZT10aGlzLl9iK0QrdnwwO3RoaXMuX2I9dGhpcy5fYytIK3B8MCx0aGlzLl9jPXRoaXMuX2QrTitnfDAsdGhpcy5fZD10aGlzLl9lK0crQ3wwLHRoaXMuX2U9dGhpcy5fYStiK1N8MCx0aGlzLl9h'@;
put 'PWRlfSxVLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09m'@;
put 'ZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIHVlPXou'@;
put 'YWxsb2M/ei5hbGxvYygyMCk6bmV3IHooMjApO3JldHVybiB1ZS53cml0ZUludDMyTEUodGhpcy5fYSwwKSx1ZS53cml0ZUludDMyTEUodGhpcy5fYiw0KSx1ZS53cml0ZUludDMyTEUodGhpcy5fYyw4KSx1ZS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksdWUud3JpdGVJbnQzMkxFKHRoaXMu'@;
put 'X2UsMTYpLHVlfSxNLmV4cG9ydHM9VX0sOTUwOTooTSxPLFIpPT57dmFyIHo9Uig4NzY0KSxLPXouQnVmZmVyO2Z1bmN0aW9uIEkoRSxqKXtmb3IodmFyIFYgaW4gRSlqW1ZdPUVbVl19ZnVuY3Rpb24gayhFLGosVil7cmV0dXJuIEsoRSxqLFYpfUsuZnJvbSYmSy5hbGxvYyYmSy5hbGxvY1Vu'@;
put 'c2FmZSYmSy5hbGxvY1Vuc2FmZVNsb3c/TS5leHBvcnRzPXo6KEkoeixPKSxPLkJ1ZmZlcj1rKSxrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEsucHJvdG90eXBlKSxJKEssayksay5mcm9tPWZ1bmN0aW9uKEUsaixWKXtpZigibnVtYmVyIj09dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSyhFLGosVil9LGsuYWxsb2M9ZnVuY3Rpb24oRSxqLFYpe2lmKCJudW1iZXIiIT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIEI9SyhFKTtyZXR1cm4g'@;
put 'dm9pZCAwIT09aj8ic3RyaW5nIj09dHlwZW9mIFY/Qi5maWxsKGosVik6Qi5maWxsKGopOkIuZmlsbCgwKSxCfSxrLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEUpe2lmKCJudW1iZXIiIT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0'@;
put 'dXJuIEsoRSl9LGsuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKEUpe2lmKCJudW1iZXIiIT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHouU2xvd0J1ZmZlcihFKX19LDIzOTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgeixLPVIoNDE1NSksST1SKDg3NjQpLGs9SS5CdWZmZXIsRT17fTtmb3IoeiBpbiBJKUkuaGFzT3duUHJvcGVydHkoeikmJiJTbG93QnVmZmVyIiE9PXomJiJCdWZmZXIiIT09eiYmKEVbel09SVt6XSk7dmFyIGo9RS5CdWZmZXI9e307Zm9yKHogaW4gaylrLmhhc093blByb3BlcnR5KHop'@;
put 'JiYiYWxsb2NVbnNhZmUiIT09eiYmImFsbG9jVW5zYWZlU2xvdyIhPT16JiYoalt6XT1rW3pdKTtpZihFLkJ1ZmZlci5wcm90b3R5cGU9ay5wcm90b3R5cGUsai5mcm9tJiZqLmZyb20hPT1VaW50OEFycmF5LmZyb218fChqLmZyb209ZnVuY3Rpb24oVixCLFkpe2lmKCJudW1iZXIiPT10eXBl'@;
put 'b2YgVil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBWKTtpZihWJiZ2b2lkIDA9PT1WLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQg'@;
put 'bXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBWKTtyZXR1cm4gayhWLEIsWSl9KSxqLmFsbG9jfHwoai5hbGxvYz1mdW5jdGlvbihWLEIsWSl7aWYoIm51bWJl'@;
put 'ciIhPXR5cGVvZiBWKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBWKTtpZihWPDB8fFY+PTIxNDc0ODM2NDgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytWKyci'@;
put 'IGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgWD1rKFYpO3JldHVybiBCJiYwIT09Qi5sZW5ndGg/InN0cmluZyI9PXR5cGVvZiBZP1guZmlsbChCLFkpOlguZmlsbChCKTpYLmZpbGwoMCksWH0pLCFFLmtTdHJpbmdNYXhMZW5ndGgpdHJ5e0Uua1N0cmluZ01heExlbmd0aD1L'@;
put 'LmJpbmRpbmcoImJ1ZmZlciIpLmtTdHJpbmdNYXhMZW5ndGh9Y2F0Y2h7fUUuY29uc3RhbnRzfHwoRS5jb25zdGFudHM9e01BWF9MRU5HVEg6RS5rTWF4TGVuZ3RofSxFLmtTdHJpbmdNYXhMZW5ndGgmJihFLmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD1FLmtTdHJpbmdNYXhMZW5ndGgp'@;
put 'KSxNLmV4cG9ydHM9RX0sNDE4OTooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSyhJLGspe3RoaXMuX2Jsb2NrPXouYWxsb2MoSSksdGhpcy5fZmluYWxTaXplPWssdGhpcy5fYmxvY2tTaXplPUksdGhpcy5fbGVuPTB9Sy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9u'@;
put 'KEksayl7InN0cmluZyI9PXR5cGVvZiBJJiYoST16LmZyb20oSSxrPWt8fCJ1dGY4IikpO2Zvcih2YXIgRT10aGlzLl9ibG9jayxqPXRoaXMuX2Jsb2NrU2l6ZSxWPUkubGVuZ3RoLEI9dGhpcy5fbGVuLFk9MDtZPFY7KXtmb3IodmFyIFg9QiVqLFU9TWF0aC5taW4oVi1ZLGotWCkscT0wO3E8'@;
put 'VTtxKyspRVtYK3FdPUlbWStxXTtZKz1VLChCKz1VKSVqPT0wJiZ0aGlzLl91cGRhdGUoRSl9cmV0dXJuIHRoaXMuX2xlbis9Vix0aGlzfSxLLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oSSl7dmFyIGs9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1trXT0xMjgsdGhp'@;
put 'cy5fYmxvY2suZmlsbCgwLGsrMSksaz49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgRT04KnRoaXMuX2xlbjtpZihFPD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoRSx0aGlzLl9ibG9ja1Np'@;
put 'emUtNCk7ZWxzZXt2YXIgaj0oNDI5NDk2NzI5NSZFKT4+PjA7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSgoRS1qKS80Mjk0OTY3Mjk2LHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGosdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9i'@;
put 'bG9jayk7dmFyIEI9dGhpcy5faGFzaCgpO3JldHVybiBJP0IudG9TdHJpbmcoSSk6Qn0sSy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LE0uZXhwb3J0cz1LfSw5MDcyOihNLE8s'@;
put 'Uik9Pnt2YXIgej1NLmV4cG9ydHM9ZnVuY3Rpb24oSyl7Sz1LLnRvTG93ZXJDYXNlKCk7dmFyIEk9eltLXTtpZighSSl0aHJvdyBuZXcgRXJyb3IoSysiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgSX07ei5zaGE9Uig0NDQ4KSx6LnNo'@;
put 'YTE9Uig4MzM2KSx6LnNoYTIyND1SKDg0MzIpLHouc2hhMjU2PVIoNzQ5OSksei5zaGEzODQ9UigxNjg2KSx6LnNoYTUxMj1SKDc4MTYpfSw0NDQ4OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig0MTg5KSxJPVIoOTUwOSkuQnVmZmVyLGs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5'@;
put 'NDAwNzU4OCwtODk5NDk3NTE0XSxFPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gVihZKXtyZXR1cm4gWTw8MzB8WT4+PjJ9ZnVuY3Rpb24gQihZLFgsVSxxKXtyZXR1cm4gMD09PVk/WCZVfH5YJnE6'@;
put 'Mj09PVk/WCZVfFgmcXxVJnE6WF5VXnF9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9'@;
put 'LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYLFU9dGhpcy5fdyxxPTB8dGhpcy5fYSxlZT0wfHRoaXMuX2IsdGU9MHx0aGlzLl9jLG9lPTB8dGhpcy5fZCxzZT0wfHRoaXMuX2UsaGU9MDtoZTwxNjsrK2hlKVVbaGVdPVkucmVhZEludDMyQkUoNCpoZSk7Zm9yKDto'@;
put 'ZTw4MDsrK2hlKVVbaGVdPVVbaGUtM11eVVtoZS04XV5VW2hlLTE0XV5VW2hlLTE2XTtmb3IodmFyIHVlPTA7dWU8ODA7Kyt1ZSl7dmFyIGNlPX5+KHVlLzIwKSxHPTB8KChYPXEpPDw1fFg+Pj4yNykrQihjZSxlZSx0ZSxvZSkrc2UrVVt1ZV0ra1tjZV07c2U9b2Usb2U9dGUsdGU9VihlZSks'@;
put 'ZWU9cSxxPUd9dGhpcy5fYT1xK3RoaXMuX2F8MCx0aGlzLl9iPWVlK3RoaXMuX2J8MCx0aGlzLl9jPXRlK3RoaXMuX2N8MCx0aGlzLl9kPW9lK3RoaXMuX2R8MCx0aGlzLl9lPXNlK3RoaXMuX2V8MH0sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgWT1JLmFsbG9jVW5zYWZlKDIw'@;
put 'KTtyZXR1cm4gWS53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLFkud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksWS53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLFl9LE0uZXhwb3J0cz1q'@;
put 'fSw4MzM2OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig0MTg5KSxJPVIoOTUwOSkuQnVmZmVyLGs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxFPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwo'@;
put 'dGhpcyw2NCw1Nil9ZnVuY3Rpb24gVihYKXtyZXR1cm4gWDw8NXxYPj4+Mjd9ZnVuY3Rpb24gQihYKXtyZXR1cm4gWDw8MzB8WD4+PjJ9ZnVuY3Rpb24gWShYLFUscSxlZSl7cmV0dXJuIDA9PT1YP1UmcXx+VSZlZToyPT09WD9VJnF8VSZlZXxxJmVlOlVecV5lZX16KGosSyksai5wcm90b3R5'@;
put 'cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihYKXtmb3IodmFy'@;
put 'IFUscT10aGlzLl93LGVlPTB8dGhpcy5fYSx0ZT0wfHRoaXMuX2Isb2U9MHx0aGlzLl9jLHNlPTB8dGhpcy5fZCxoZT0wfHRoaXMuX2UsdWU9MDt1ZTwxNjsrK3VlKXFbdWVdPVgucmVhZEludDMyQkUoNCp1ZSk7Zm9yKDt1ZTw4MDsrK3VlKXFbdWVdPShVPXFbdWUtM11ecVt1ZS04XV5xW3Vl'@;
put 'LTE0XV5xW3VlLTE2XSk8PDF8VT4+PjMxO2Zvcih2YXIgY2U9MDtjZTw4MDsrK2NlKXt2YXIgRz1+fihjZS8yMCksYj1WKGVlKStZKEcsdGUsb2Usc2UpK2hlK3FbY2VdK2tbR118MDtoZT1zZSxzZT1vZSxvZT1CKHRlKSx0ZT1lZSxlZT1ifXRoaXMuX2E9ZWUrdGhpcy5fYXwwLHRoaXMuX2I9'@;
put 'dGUrdGhpcy5fYnwwLHRoaXMuX2M9b2UrdGhpcy5fY3wwLHRoaXMuX2Q9c2UrdGhpcy5fZHwwLHRoaXMuX2U9aGUrdGhpcy5fZXwwfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBYPUkuYWxsb2NVbnNhZmUoMjApO3JldHVybiBYLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCks'@;
put 'WC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxYLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksWH0sTS5leHBvcnRzPWp9LDg0MzI6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDc0'@;
put 'OTkpLEk9Uig0MTg5KSxrPVIoOTUwOSkuQnVmZmVyLEU9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEkuY2FsbCh0aGlzLDY0LDU2KX16KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhp'@;
put 'cy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3Zh'@;
put 'ciBWPWsuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBWLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFYud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksVi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxWLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxWLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxWLndy'@;
put 'aXRlSW50MzJCRSh0aGlzLl9mLDIwKSxWLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxWfSxNLmV4cG9ydHM9an0sNzQ5OTooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNDE4OSksST1SKDk1MDkpLkJ1ZmZlcixrPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5'@;
put 'NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgs'@;
put 'NjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1'@;
put 'NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYx'@;
put 'Niw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLEU9bmV3IEFycmF5'@;
put 'KDY0KTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEsuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBWKHEsZWUsdGUpe3JldHVybiB0ZV5xJihlZV50ZSl9ZnVuY3Rpb24gQihxLGVlLHRlKXtyZXR1cm4gcSZlZXx0ZSYocXxlZSl9ZnVuY3Rpb24gWShxKXtyZXR1cm4ocT4+'@;
put 'PjJ8cTw8MzApXihxPj4+MTN8cTw8MTkpXihxPj4+MjJ8cTw8MTApfWZ1bmN0aW9uIFgocSl7cmV0dXJuKHE+Pj42fHE8PDI2KV4ocT4+PjExfHE8PDIxKV4ocT4+PjI1fHE8PDcpfWZ1bmN0aW9uIFUocSl7cmV0dXJuKHE+Pj43fHE8PDI1KV4ocT4+PjE4fHE8PDE0KV5xPj4+M316KGosSyks'@;
put 'ai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYz'@;
put 'NSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXtmb3IodmFyIGVlLHRlPXRoaXMuX3csb2U9MHx0aGlzLl9hLHNlPTB8dGhpcy5fYixoZT0wfHRoaXMuX2MsdWU9MHx0aGlzLl9kLGNlPTB8dGhpcy5fZSxHPTB8dGhpcy5fZixiPTB8dGhp'@;
put 'cy5fZyxEPTB8dGhpcy5faCxIPTA7SDwxNjsrK0gpdGVbSF09cS5yZWFkSW50MzJCRSg0KkgpO2Zvcig7SDw2NDsrK0gpdGVbSF09MHwoKChlZT10ZVtILTJdKT4+PjE3fGVlPDwxNSleKGVlPj4+MTl8ZWU8PDEzKV5lZT4+PjEwKSt0ZVtILTddK1UodGVbSC0xNV0pK3RlW0gtMTZdO2Zvcih2'@;
put 'YXIgTj0wO048NjQ7KytOKXt2YXIgZz1EK1goY2UpK1YoY2UsRyxiKStrW05dK3RlW05dfDAsQz1ZKG9lKStCKG9lLHNlLGhlKXwwO0Q9YixiPUcsRz1jZSxjZT11ZStnfDAsdWU9aGUsaGU9c2Usc2U9b2Usb2U9ZytDfDB9dGhpcy5fYT1vZSt0aGlzLl9hfDAsdGhpcy5fYj1zZSt0aGlzLl9i'@;
put 'fDAsdGhpcy5fYz1oZSt0aGlzLl9jfDAsdGhpcy5fZD11ZSt0aGlzLl9kfDAsdGhpcy5fZT1jZSt0aGlzLl9lfDAsdGhpcy5fZj1HK3RoaXMuX2Z8MCx0aGlzLl9nPWIrdGhpcy5fZ3wwLHRoaXMuX2g9RCt0aGlzLl9ofDB9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHE9SS5h'@;
put 'bGxvY1Vuc2FmZSgzMik7cmV0dXJuIHEud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCkscS53cml0ZUludDMyQkUodGhpcy5fYiw0KSxxLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLHEud3JpdGVJbnQz'@;
put 'MkJFKHRoaXMuX2YsMjApLHEud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLHF9LE0uZXhwb3J0cz1qfSwxNjg2OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig3ODE2KSxJPVIoNDE4OSksaz1SKDk1MDkpLkJ1ZmZlcixFPW5ldyBBcnJheSgx'@;
put 'NjApO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSS5jYWxsKHRoaXMsMTI4LDExMil9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhp'@;
put 'cy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQx'@;
put 'NDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBWPWsuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIEIoWSxYLFUp'@;
put 'e1Yud3JpdGVJbnQzMkJFKFksVSksVi53cml0ZUludDMyQkUoWCxVKzQpfXJldHVybiBCKHRoaXMuX2FoLHRoaXMuX2FsLDApLEIodGhpcy5fYmgsdGhpcy5fYmwsOCksQih0aGlzLl9jaCx0aGlzLl9jbCwxNiksQih0aGlzLl9kaCx0aGlzLl9kbCwyNCksQih0aGlzLl9laCx0aGlzLl9lbCwz'@;
put 'MiksQih0aGlzLl9maCx0aGlzLl9mbCw0MCksVn0sTS5leHBvcnRzPWp9LDc4MTY6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDQxODkpLEk9Uig5NTA5KS5CdWZmZXIsaz1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5'@;
put 'OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwx'@;
put 'MzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQz'@;
put 'NDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQw'@;
put 'MTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1'@;
put 'NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgy'@;
put 'MDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIz'@;
put 'NzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIs'@;
put 'MTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMz'@;
put 'OTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAz'@;
put 'MTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEy'@;
put 'NDYxODk1OTFdLEU9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBWKHNlLGhlLHVlKXtyZXR1cm4gdWVec2UmKGhlXnVlKX1mdW5jdGlvbiBCKHNlLGhlLHVlKXtyZXR1cm4gc2UmaGV8dWUmKHNl'@;
put 'fGhlKX1mdW5jdGlvbiBZKHNlLGhlKXtyZXR1cm4oc2U+Pj4yOHxoZTw8NCleKGhlPj4+MnxzZTw8MzApXihoZT4+Pjd8c2U8PDI1KX1mdW5jdGlvbiBYKHNlLGhlKXtyZXR1cm4oc2U+Pj4xNHxoZTw8MTgpXihzZT4+PjE4fGhlPDwxNCleKGhlPj4+OXxzZTw8MjMpfWZ1bmN0aW9uIFUoc2Us'@;
put 'aGUpe3JldHVybihzZT4+PjF8aGU8PDMxKV4oc2U+Pj44fGhlPDwyNClec2U+Pj43fWZ1bmN0aW9uIHEoc2UsaGUpe3JldHVybihzZT4+PjF8aGU8PDMxKV4oc2U+Pj44fGhlPDwyNCleKHNlPj4+N3xoZTw8MjUpfWZ1bmN0aW9uIGVlKHNlLGhlKXtyZXR1cm4oc2U+Pj4xOXxoZTw8MTMpXiho'@;
put 'ZT4+PjI5fHNlPDwzKV5zZT4+PjZ9ZnVuY3Rpb24gdGUoc2UsaGUpe3JldHVybihzZT4+PjE5fGhlPDwxMyleKGhlPj4+Mjl8c2U8PDMpXihzZT4+PjZ8aGU8PDI2KX1mdW5jdGlvbiBvZShzZSxoZSl7cmV0dXJuIHNlPj4+MDxoZT4+PjA/MTowfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0x'@;
put 'NTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMy'@;
put 'MDksdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihzZSl7Zm9yKHZhciBoZT10aGlzLl93LHVlPTB8dGhpcy5fYWgsY2U9MHx0aGlzLl9iaCxHPTB8dGhpcy5fY2gsYj0wfHRoaXMuX2RoLEQ9MHx0aGlzLl9laCxIPTB8dGhpcy5fZmgsTj0wfHRoaXMuX2doLGc9MHx0aGlzLl9o'@;
put 'aCxDPTB8dGhpcy5fYWwsUz0wfHRoaXMuX2JsLHY9MHx0aGlzLl9jbCxwPTB8dGhpcy5fZGwsdz0wfHRoaXMuX2VsLEo9MHx0aGlzLl9mbCxuZT0wfHRoaXMuX2dsLGRlPTB8dGhpcy5faGwsZmU9MDtmZTwzMjtmZSs9MiloZVtmZV09c2UucmVhZEludDMyQkUoNCpmZSksaGVbZmUrMV09c2Uu'@;
put 'cmVhZEludDMyQkUoNCpmZSs0KTtmb3IoO2ZlPDE2MDtmZSs9Mil7dmFyIHhlPWhlW2ZlLTMwXSxMZT1oZVtmZS0zMCsxXSxGZT1VKHhlLExlKSxPZT1xKExlLHhlKSxqZT1lZSh4ZT1oZVtmZS00XSxMZT1oZVtmZS00KzFdKSxXZT10ZShMZSx4ZSksUWU9aGVbZmUtMzJdLGx0PWhlW2ZlLTMy'@;
put 'KzFdLFBlPU9lK2hlW2ZlLTE0KzFdfDAsYmU9RmUraGVbZmUtMTRdK29lKFBlLE9lKXwwO2JlPShiZT1iZStqZStvZShQZT1QZStXZXwwLFdlKXwwKStRZStvZShQZT1QZStsdHwwLGx0KXwwLGhlW2ZlXT1iZSxoZVtmZSsxXT1QZX1mb3IodmFyIEFlPTA7QWU8MTYwO0FlKz0yKXtiZT1oZVtB'@;
put 'ZV0sUGU9aGVbQWUrMV07dmFyIFRlPUIodWUsY2UsRykscWU9QihDLFMsdiksWGU9WSh1ZSxDKSxVZT1ZKEMsdWUpLGh0PVgoRCx3KSxNZT1YKHcsRCksRGU9a1tBZV0semU9a1tBZSsxXSxvdD1WKEQsSCxOKSx1dD1WKHcsSixuZSksTXQ9ZGUrTWV8MCxIdD1nK2h0K29lKE10LGRlKXwwO0h0'@;
put 'PShIdD0oSHQ9SHQrb3Qrb2UoTXQ9TXQrdXR8MCx1dCl8MCkrRGUrb2UoTXQ9TXQremV8MCx6ZSl8MCkrYmUrb2UoTXQ9TXQrUGV8MCxQZSl8MDt2YXIgUHQ9VWUrcWV8MCxvbj1YZStUZStvZShQdCxVZSl8MDtnPU4sZGU9bmUsTj1ILG5lPUosSD1ELEo9dyxEPWIrSHQrb2Uodz1wK010fDAs'@;
put 'cCl8MCxiPUcscD12LEc9Y2Usdj1TLGNlPXVlLFM9Qyx1ZT1IdCtvbitvZShDPU10K1B0fDAsTXQpfDB9dGhpcy5fYWw9dGhpcy5fYWwrQ3wwLHRoaXMuX2JsPXRoaXMuX2JsK1N8MCx0aGlzLl9jbD10aGlzLl9jbCt2fDAsdGhpcy5fZGw9dGhpcy5fZGwrcHwwLHRoaXMuX2VsPXRoaXMuX2Vs'@;
put 'K3d8MCx0aGlzLl9mbD10aGlzLl9mbCtKfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrbmV8MCx0aGlzLl9obD10aGlzLl9obCtkZXwwLHRoaXMuX2FoPXRoaXMuX2FoK3VlK29lKHRoaXMuX2FsLEMpfDAsdGhpcy5fYmg9dGhpcy5fYmgrY2Urb2UodGhpcy5fYmwsUyl8MCx0aGlzLl9jaD10aGlzLl9j'@;
put 'aCtHK29lKHRoaXMuX2NsLHYpfDAsdGhpcy5fZGg9dGhpcy5fZGgrYitvZSh0aGlzLl9kbCxwKXwwLHRoaXMuX2VoPXRoaXMuX2VoK0Qrb2UodGhpcy5fZWwsdyl8MCx0aGlzLl9maD10aGlzLl9maCtIK29lKHRoaXMuX2ZsLEopfDAsdGhpcy5fZ2g9dGhpcy5fZ2grTitvZSh0aGlzLl9nbCxu'@;
put 'ZSl8MCx0aGlzLl9oaD10aGlzLl9oaCtnK29lKHRoaXMuX2hsLGRlKXwwfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBzZT1JLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBoZSh1ZSxjZSxHKXtzZS53cml0ZUludDMyQkUodWUsRyksc2Uud3JpdGVJbnQzMkJFKGNlLEcrNCl9'@;
put 'cmV0dXJuIGhlKHRoaXMuX2FoLHRoaXMuX2FsLDApLGhlKHRoaXMuX2JoLHRoaXMuX2JsLDgpLGhlKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxoZSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksaGUodGhpcy5fZWgsdGhpcy5fZWwsMzIpLGhlKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxoZSh0aGlzLl9n'@;
put 'aCx0aGlzLl9nbCw0OCksaGUodGhpcy5faGgsdGhpcy5faGwsNTYpLHNlfSxNLmV4cG9ydHM9an0sMjgzMDooTSxPLFIpPT57TS5leHBvcnRzPUs7dmFyIHo9Uig3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gSygpe3ouY2FsbCh0aGlzKX1SKDU3MTcpKEsseiksSy5SZWFkYWJsZT1SKDk0'@;
put 'ODEpLEsuV3JpdGFibGU9Uig0MjI5KSxLLkR1cGxleD1SKDY3NTMpLEsuVHJhbnNmb3JtPVIoNDYwNSksSy5QYXNzVGhyb3VnaD1SKDI3MjUpLEsuZmluaXNoZWQ9Uig4NjEwKSxLLnBpcGVsaW5lPVIoOTk0NiksSy5TdHJlYW09SyxLLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEksayl7dmFy'@;
put 'IEU9dGhpcztmdW5jdGlvbiBqKGVlKXtJLndyaXRhYmxlJiYhMT09PUkud3JpdGUoZWUpJiZFLnBhdXNlJiZFLnBhdXNlKCl9ZnVuY3Rpb24gVigpe0UucmVhZGFibGUmJkUucmVzdW1lJiZFLnJlc3VtZSgpfUUub24oImRhdGEiLGopLEkub24oImRyYWluIixWKSxJLl9pc1N0ZGlvfHxrJiYh'@;
put 'MT09PWsuZW5kfHwoRS5vbigiZW5kIixZKSxFLm9uKCJjbG9zZSIsWCkpO3ZhciBCPSExO2Z1bmN0aW9uIFkoKXtCfHwoQj0hMCxJLmVuZCgpKX1mdW5jdGlvbiBYKCl7Qnx8KEI9ITAsImZ1bmN0aW9uIj09dHlwZW9mIEkuZGVzdHJveSYmSS5kZXN0cm95KCkpfWZ1bmN0aW9uIFUoZWUpe2lm'@;
put 'KHEoKSwwPT09ei5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgZWV9ZnVuY3Rpb24gcSgpe0UucmVtb3ZlTGlzdGVuZXIoImRhdGEiLGopLEkucmVtb3ZlTGlzdGVuZXIoImRyYWluIixWKSxFLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkpLEUucmVtb3ZlTGlzdGVuZXIoImNsb3Nl'@;
put 'IixYKSxFLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsVSksSS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFUpLEUucmVtb3ZlTGlzdGVuZXIoImVuZCIscSksRS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHEpLEkucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixxKX1yZXR1cm4gRS5vbigiZXJyb3IiLFUp'@;
put 'LEkub24oImVycm9yIixVKSxFLm9uKCJlbmQiLHEpLEUub24oImNsb3NlIixxKSxJLm9uKCJjbG9zZSIscSksSS5lbWl0KCJwaXBlIixFKSxJfX0sMjU1MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9ei5pc0VuY29kaW5nfHxmdW5jdGlvbihxKXtzd2l0'@;
put 'Y2goKHE9IiIrcSkmJnEudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJl'@;
put 'dHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBJKHEpe3ZhciBlZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbih0ZSl7dmFyIG9lPWZ1bmN0aW9uKHNlKXtpZighc2UpcmV0dXJuInV0ZjgiO2Zvcih2YXIgaGU7Oylzd2l0Y2goc2Upe2Nhc2UidXRmOCI6Y2FzZSJ1dGYt'@;
put 'OCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVy'@;
put 'biBzZTtkZWZhdWx0OmlmKGhlKXJldHVybjtzZT0oIiIrc2UpLnRvTG93ZXJDYXNlKCksaGU9ITB9fSh0ZSk7aWYoInN0cmluZyIhPXR5cGVvZiBvZSYmKHouaXNFbmNvZGluZz09PUt8fCFLKHRlKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3RlKTtyZXR1cm4gb2V8'@;
put 'fHRlfShxKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1qLHRoaXMuZW5kPVYsZWU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9RSxlZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Qix0aGlzLmVuZD1ZLGVlPTM7YnJlYWs7ZGVmYXVsdDpy'@;
put 'ZXR1cm4gdGhpcy53cml0ZT1YLHZvaWQodGhpcy5lbmQ9VSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj16LmFsbG9jVW5zYWZlKGVlKX1mdW5jdGlvbiBrKHEpe3JldHVybiBxPD0xMjc/MDpxPj41PT02PzI6cT4+ND09MTQ/MzpxPj4zPT0zMD80OnE+'@;
put 'PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gRShxKXt2YXIgZWU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCx0ZT1mdW5jdGlvbihvZSxzZSxoZSl7aWYoMTI4IT0oMTkyJnNlWzBdKSlyZXR1cm4gb2UubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihvZS5sYXN0TmVlZD4xJiZzZS5sZW5ndGg+MSl7'@;
put 'aWYoMTI4IT0oMTkyJnNlWzFdKSlyZXR1cm4gb2UubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihvZS5sYXN0TmVlZD4yJiZzZS5sZW5ndGg+MiYmMTI4IT0oMTkyJnNlWzJdKSlyZXR1cm4gb2UubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMscSk7cmV0dXJuIHZvaWQgMCE9PXRlP3RlOnRoaXMu'@;
put 'bGFzdE5lZWQ8PXEubGVuZ3RoPyhxLmNvcHkodGhpcy5sYXN0Q2hhcixlZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KHEuY29weSh0aGlzLmxhc3RDaGFyLGVlLDAscS5sZW5ndGgpLHZvaWQodGhpcy5s'@;
put 'YXN0TmVlZC09cS5sZW5ndGgpKX1mdW5jdGlvbiBqKHEsZWUpe2lmKChxLmxlbmd0aC1lZSklMj09MCl7dmFyIHRlPXEudG9TdHJpbmcoInV0ZjE2bGUiLGVlKTtpZih0ZSl7dmFyIG9lPXRlLmNoYXJDb2RlQXQodGUubGVuZ3RoLTEpO2lmKG9lPj01NTI5NiYmb2U8PTU2MzE5KXJldHVybiB0'@;
put 'aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdLHRlLnNsaWNlKDAsLTEpfXJldHVybiB0ZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5s'@;
put 'YXN0Q2hhclswXT1xW3EubGVuZ3RoLTFdLHEudG9TdHJpbmcoInV0ZjE2bGUiLGVlLHEubGVuZ3RoLTEpfWZ1bmN0aW9uIFYocSl7dmFyIGVlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZWUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZs'@;
put 'ZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTplZX1mdW5jdGlvbiBCKHEsZWUpe3ZhciB0ZT0ocS5sZW5ndGgtZWUpJTM7cmV0dXJuIDA9PT10ZT9xLnRvU3RyaW5nKCJiYXNlNjQiLGVlKToodGhpcy5sYXN0TmVlZD0zLXRlLHRoaXMubGFzdFRvdGFsPTMsMT09PXRlP3RoaXMu'@;
put 'bGFzdENoYXJbMF09cVtxLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09cVtxLmxlbmd0aC0xXSkscS50b1N0cmluZygiYmFzZTY0IixlZSxxLmxlbmd0aC10ZSkpfWZ1bmN0aW9uIFkocSl7dmFyIGVlPXEmJnEubGVuZ3RoP3RoaXMu'@;
put 'd3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZWUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6ZWV9ZnVuY3Rpb24gWChxKXtyZXR1cm4gcS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBVKHEpe3JldHVybiBxJiZxLmxl'@;
put 'bmd0aD90aGlzLndyaXRlKHEpOiIifU8uU3RyaW5nRGVjb2Rlcj1JLEkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2lmKDA9PT1xLmxlbmd0aClyZXR1cm4iIjt2YXIgZWUsdGU7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KGVlPXRoaXMuZmlsbExhc3QocSkpKXJldHVybiIi'@;
put 'O3RlPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgdGU9MDtyZXR1cm4gdGU8cS5sZW5ndGg/ZWU/ZWUrdGhpcy50ZXh0KHEsdGUpOnRoaXMudGV4dChxLHRlKTplZXx8IiJ9LEkucHJvdG90eXBlLmVuZD1mdW5jdGlvbihxKXt2YXIgZWU9cSYmcS5sZW5ndGg/dGhpcy53cml0'@;
put 'ZShxKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9lZSsiXHVmZmZkIjplZX0sSS5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihxLGVlKXt2YXIgdGU9ZnVuY3Rpb24oc2UsaGUsdWUpe3ZhciBjZT1oZS5sZW5ndGgtMTtpZihjZTx1ZSlyZXR1cm4gMDt2YXIgRz1rKGhlW2NlXSk7cmV0dXJuIEc+'@;
put 'PTA/KEc+MCYmKHNlLmxhc3ROZWVkPUctMSksRyk6LS1jZTx1ZXx8LTI9PT1HPzA6KEc9ayhoZVtjZV0pKT49MD8oRz4wJiYoc2UubGFzdE5lZWQ9Ry0yKSxHKTotLWNlPHVlfHwtMj09PUc/MDooRz1rKGhlW2NlXSkpPj0wPyhHPjAmJigyPT09Rz9HPTA6c2UubGFzdE5lZWQ9Ry0zKSxHKTow'@;
put 'fSh0aGlzLHEsZWUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBxLnRvU3RyaW5nKCJ1dGY4IixlZSk7dGhpcy5sYXN0VG90YWw9dGU7dmFyIG9lPXEubGVuZ3RoLSh0ZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gcS5jb3B5KHRoaXMubGFzdENoYXIsMCxvZSkscS50b1N0cmluZygidXRmOCIs'@;
put 'ZWUsb2UpfSxJLnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihxKXtpZih0aGlzLmxhc3ROZWVkPD1xLmxlbmd0aClyZXR1cm4gcS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmco'@;
put 'dGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtxLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAscS5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPXEubGVuZ3RofX0sNzg1NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9UigzNjg5KSxL'@;
put 'PVIoNDU2NCksST1SKDc1Miksaz1SKDIyMjQpLnksRT1SKDU3NjEpLm0saj1SKDg5NzEpLlUsVj1SKDc2NTIpLEI9Uig0NTYpLHtmcm9tQ2FsbGJhY2s6WX09Uig3MDQxKSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpYfT1SKDEyNjkpLFU9L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0Mt'@;
put 'XHg1Qlx4NUQtXHg3RV0rJC8scT0vW1x4MDAtXHgxRl0vLGVlPVsiXG4iLCJcciIsIlwwIl0sdGU9L1tceDIwLVx4M0FceDNDLVx4N0VdKy8sb2U9L1tceDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1ceDdFXS8sc2U9e2phbjowLGZlYjoxLG1hcjoyLGFwcjozLG1heTo0LGp1'@;
put 'bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5LG5vdjoxMCxkZWM6MTF9LGhlPTIxNDc0ODM2NDdlMyx1ZT0nSW52YWxpZCBzYW1lU2l0ZUNvbnRleHQgb3B0aW9uIGZvciBnZXRDb29raWVzKCk7IGV4cGVjdGVkIG9uZSBvZiAic3RyaWN0IiwgImxheCIsIG9yICJub25lIic7ZnVuY3Rpb24g'@;
put 'Y2UoUWUpe1YudmFsaWRhdGUoVi5pc05vbkVtcHR5U3RyaW5nKFFlKSxRZSk7Y29uc3QgbHQ9U3RyaW5nKFFlKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PWx0fHwibGF4Ij09PWx0fHwic3RyaWN0Ij09PWx0P2x0Om51bGx9Y29uc3QgRz1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNp'@;
put 'bGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVEOiJ1bnNhZmUtZGlzYWJsZWQifSksYj0vKD86Xig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9JCl8KD86Xig/Oig/OlthLWZcZF17MSw0'@;
put 'fTopezd9KD86W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezZ9KD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06'@;
put 'KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDJ9fDopfCg/OlthLWZcZF17MSw0fTopezR9KD86KD86OlthLWZcZF17MSw0fSl7MCwxfToo'@;
put 'PzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDN9fDopfCg/OlthLWZcZF17MSw0fTopezN9KD86KD86OlthLWZcZF17MSw0fSl7MCwyfTooPzoyNVswLTVd'@;
put 'fDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezJ9KD86KD86OlthLWZcZF17MSw0fSl7MCwzfTooPzoyNVswLTVdfDJbMC00XVxk'@;
put 'fDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDV9fDopfCg/OlthLWZcZF17MSw0fTopezF9KD86KD86OlthLWZcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsx'@;
put 'LTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDZ9fDopfCg/OjooPzooPzo6W2EtZlxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18'@;
put 'MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsN318OikpKSQpLyxEPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3fSg/OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJb'@;
put 'MC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEt'@;
put 'OV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00'@;
put 'XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDN9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezN9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMn06'@;
put 'KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mQS1G'@;
put 'XFxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNX18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7'@;
put 'MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDZ9fDopfFxuKD86Oig/'@;
put 'Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsN318OikpXG4pKD86JVswLTlh'@;
put 'LXpBLVpdezEsfSk/XFxdP1xuIi5yZXBsYWNlKC9ccypcL1wvLiokL2dtLCIiKS5yZXBsYWNlKC9cbi9nLCIiKS50cmltKCksSD1uZXcgUmVnRXhwKGBeJHtEfSRgKTtmdW5jdGlvbiBOKFFlLGx0LFBlLGJlKXtsZXQgQWU9MDtmb3IoO0FlPFFlLmxlbmd0aDspe2NvbnN0IFRlPVFlLmNoYXJD'@;
put 'b2RlQXQoQWUpO2lmKFRlPD00N3x8VGU+PTU4KWJyZWFrO0FlKyt9cmV0dXJuIEFlPGx0fHxBZT5QZT9udWxsOmJlfHxBZT09UWUubGVuZ3RoP3BhcnNlSW50KFFlLnN1YnN0cigwLEFlKSwxMCk6bnVsbH1mdW5jdGlvbiBnKFFlKXtjb25zdCBsdD1RZS5zcGxpdCgiOiIpLFBlPVswLDAsMF07'@;
put 'aWYoMyE9PWx0Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IGJlPTA7YmU8MztiZSsrKXtjb25zdCBUZT1OKGx0W2JlXSwxLDIsMj09YmUpO2lmKG51bGw9PT1UZSlyZXR1cm4gbnVsbDtQZVtiZV09VGV9cmV0dXJuIFBlfWZ1bmN0aW9uIEMoUWUpe1FlPVN0cmluZyhRZSkuc3Vic3RyKDAs'@;
put 'MykudG9Mb3dlckNhc2UoKTtjb25zdCBsdD1zZVtRZV07cmV0dXJuIGx0Pj0wP2x0Om51bGx9ZnVuY3Rpb24gUyhRZSl7aWYoIVFlKXJldHVybjtjb25zdCBsdD1RZS5zcGxpdChvZSk7aWYoIWx0KXJldHVybjtsZXQgUGU9bnVsbCxiZT1udWxsLEFlPW51bGwsVGU9bnVsbCxxZT1udWxsLFhl'@;
put 'PW51bGw7Zm9yKGxldCBVZT0wO1VlPGx0Lmxlbmd0aDtVZSsrKXtjb25zdCBodD1sdFtVZV0udHJpbSgpO2lmKCFodC5sZW5ndGgpY29udGludWU7bGV0IE1lO251bGw9PT1BZSYmKE1lPWcoaHQpLE1lKT8oUGU9TWVbMF0sYmU9TWVbMV0sQWU9TWVbMl0pOm51bGwhPT1UZXx8KE1lPU4oaHQs'@;
put 'MSwyLCEwKSxudWxsPT09TWUpP251bGwhPT1xZXx8KE1lPUMoaHQpLG51bGw9PT1NZSk/bnVsbD09PVhlJiYoTWU9TihodCwyLDQsITApLG51bGwhPT1NZSYmKFhlPU1lLFhlPj03MCYmWGU8PTk5P1hlKz0xOTAwOlhlPj0wJiZYZTw9NjkmJihYZSs9MmUzKSkpOnFlPU1lOlRlPU1lfXJldHVy'@;
put 'biBudWxsPT09VGV8fG51bGw9PT1xZXx8bnVsbD09PVhlfHxudWxsPT09QWV8fFRlPDF8fFRlPjMxfHxYZTwxNjAxfHxQZT4yM3x8YmU+NTl8fEFlPjU5P3ZvaWQgMDpuZXcgRGF0ZShEYXRlLlVUQyhYZSxxZSxUZSxQZSxiZSxBZSkpfWZ1bmN0aW9uIHYoUWUpe3JldHVybiBWLnZhbGlkYXRl'@;
put 'KFYuaXNEYXRlKFFlKSxRZSksUWUudG9VVENTdHJpbmcoKX1mdW5jdGlvbiBwKFFlKXtyZXR1cm4gbnVsbD09UWU/bnVsbDooUWU9UWUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpLEgudGVzdChRZSkmJihRZT1RZS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSx6JiYvW15cdTAw'@;
put 'MDEtXHUwMDdmXS8udGVzdChRZSkmJihRZT16LnRvQVNDSUkoUWUpKSxRZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiB3KFFlLGx0LFBlKXtpZihudWxsPT1RZXx8bnVsbD09bHQpcmV0dXJuIG51bGw7aWYoITEhPT1QZSYmKFFlPXAoUWUpLGx0PXAobHQpKSxRZT09bHQpcmV0dXJuITA7Y29u'@;
put 'c3QgYmU9UWUubGFzdEluZGV4T2YobHQpO3JldHVybiEoYmU8PTB8fFFlLmxlbmd0aCE9PWx0Lmxlbmd0aCtiZXx8Ii4iIT09UWUuc3Vic3RyKGJlLTEsMSl8fGIudGVzdChRZSkpfWZ1bmN0aW9uIEooUWUpe2lmKCFRZXx8Ii8iIT09UWUuc3Vic3RyKDAsMSkpcmV0dXJuIi8iO2lmKCIvIj09'@;
put 'PVFlKXJldHVybiBRZTtjb25zdCBsdD1RZS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiAwPT09bHQ/Ii8iOlFlLnNsaWNlKDAsbHQpfWZ1bmN0aW9uIGRlKFFlLGx0KXtpZihsdCYmIm9iamVjdCI9PXR5cGVvZiBsdHx8KGx0PXt9KSxWLmlzRW1wdHlTdHJpbmcoUWUpfHwhVi5pc1N0cmluZyhR'@;
put 'ZSkpcmV0dXJuIG51bGw7Y29uc3QgUGU9KFFlPVFlLnRyaW0oKSkuaW5kZXhPZigiOyIpLGJlPWZ1bmN0aW9uIG5lKFFlLGx0KXtRZT1mdW5jdGlvbihxZSl7aWYoVi5pc0VtcHR5U3RyaW5nKHFlKSlyZXR1cm4gcWU7Zm9yKGxldCBYZT0wO1hlPGVlLmxlbmd0aDtYZSsrKXtjb25zdCBVZT1x'@;
put 'ZS5pbmRleE9mKGVlW1hlXSk7LTEhPT1VZSYmKHFlPXFlLnN1YnN0cigwLFVlKSl9cmV0dXJuIHFlfShRZSksVi52YWxpZGF0ZShWLmlzU3RyaW5nKFFlKSxRZSk7bGV0IFBlLGJlLEFlPVFlLmluZGV4T2YoIj0iKTtpZihsdCkwPT09QWUmJihBZT0oUWU9UWUuc3Vic3RyKDEpKS5pbmRleE9m'@;
put 'KCI9IikpO2Vsc2UgaWYoQWU8PTApcmV0dXJuO2lmKEFlPD0wPyhQZT0iIixiZT1RZS50cmltKCkpOihQZT1RZS5zdWJzdHIoMCxBZSkudHJpbSgpLGJlPVFlLnN1YnN0cihBZSsxKS50cmltKCkpLHEudGVzdChQZSl8fHEudGVzdChiZSkpcmV0dXJuO2NvbnN0IFRlPW5ldyBqZTtyZXR1cm4g'@;
put 'VGUua2V5PVBlLFRlLnZhbHVlPWJlLFRlfSgtMT09PVBlP1FlOlFlLnN1YnN0cigwLFBlKSwhIWx0Lmxvb3NlKTtpZighYmUpcmV0dXJuO2lmKC0xPT09UGUpcmV0dXJuIGJlO2NvbnN0IEFlPVFlLnNsaWNlKFBlKzEpLnRyaW0oKTtpZigwPT09QWUubGVuZ3RoKXJldHVybiBiZTtjb25zdCBU'@;
put 'ZT1BZS5zcGxpdCgiOyIpO2Zvcig7VGUubGVuZ3RoOyl7Y29uc3QgcWU9VGUuc2hpZnQoKS50cmltKCk7aWYoMD09PXFlLmxlbmd0aCljb250aW51ZTtjb25zdCBYZT1xZS5pbmRleE9mKCI9Iik7bGV0IFVlLGh0O3N3aXRjaCgtMT09PVhlPyhVZT1xZSxodD1udWxsKTooVWU9cWUuc3Vic3Ry'@;
put 'KDAsWGUpLGh0PXFlLnN1YnN0cihYZSsxKSksVWU9VWUudHJpbSgpLnRvTG93ZXJDYXNlKCksaHQmJihodD1odC50cmltKCkpLFVlKXtjYXNlImV4cGlyZXMiOmlmKGh0KXtjb25zdCBNZT1TKGh0KTtNZSYmKGJlLmV4cGlyZXM9TWUpfWJyZWFrO2Nhc2UibWF4LWFnZSI6aWYoaHQmJi9eLT9b'@;
put 'MC05XSskLy50ZXN0KGh0KSl7Y29uc3QgTWU9cGFyc2VJbnQoaHQsMTApO2JlLnNldE1heEFnZShNZSl9YnJlYWs7Y2FzZSJkb21haW4iOmlmKGh0KXtjb25zdCBNZT1odC50cmltKCkucmVwbGFjZSgvXlwuLywiIik7TWUmJihiZS5kb21haW49TWUudG9Mb3dlckNhc2UoKSl9YnJlYWs7Y2Fz'@;
put 'ZSJwYXRoIjpiZS5wYXRoPWh0JiYiLyI9PT1odFswXT9odDpudWxsO2JyZWFrO2Nhc2Uic2VjdXJlIjpiZS5zZWN1cmU9ITA7YnJlYWs7Y2FzZSJodHRwb25seSI6YmUuaHR0cE9ubHk9ITA7YnJlYWs7Y2FzZSJzYW1lc2l0ZSI6c3dpdGNoKGh0P2h0LnRvTG93ZXJDYXNlKCk6IiIpe2Nhc2Ui'@;
put 'c3RyaWN0IjpiZS5zYW1lU2l0ZT0ic3RyaWN0IjticmVhaztjYXNlImxheCI6YmUuc2FtZVNpdGU9ImxheCI7YnJlYWs7Y2FzZSJub25lIjpiZS5zYW1lU2l0ZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDpiZS5zYW1lU2l0ZT12b2lkIDB9YnJlYWs7ZGVmYXVsdDpiZS5leHRlbnNpb25zPWJlLmV4'@;
put 'dGVuc2lvbnN8fFtdLGJlLmV4dGVuc2lvbnMucHVzaChxZSl9fXJldHVybiBiZX1mdW5jdGlvbiBmZShRZSl7bGV0IGx0O3RyeXtsdD1KU09OLnBhcnNlKFFlKX1jYXRjaChQZSl7cmV0dXJuIFBlfXJldHVybiBsdH1mdW5jdGlvbiB4ZShRZSl7aWYoIVFlfHxWLmlzRW1wdHlTdHJpbmcoUWUp'@;
put 'KXJldHVybiBudWxsO2xldCBsdDtpZigic3RyaW5nIj09dHlwZW9mIFFlKXtpZihsdD1mZShRZSksbHQgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNlIGx0PVFlO2NvbnN0IFBlPW5ldyBqZTtmb3IobGV0IGJlPTA7YmU8amUuc2VyaWFsaXphYmxlUHJvcGVydGllcy5sZW5ndGg7'@;
put 'YmUrKyl7Y29uc3QgQWU9amUuc2VyaWFsaXphYmxlUHJvcGVydGllc1tiZV07dm9pZCAwIT09bHRbQWVdJiZsdFtBZV0hPT1PZVtBZV0mJihQZVtBZV09ImV4cGlyZXMiPT09QWV8fCJjcmVhdGlvbiI9PT1BZXx8Imxhc3RBY2Nlc3NlZCI9PT1BZT9udWxsPT09bHRbQWVdP251bGw6IkluZmlu'@;
put 'aXR5Ij09bHRbQWVdPyJJbmZpbml0eSI6bmV3IERhdGUobHRbQWVdKTpsdFtBZV0pfXJldHVybiBQZX1mdW5jdGlvbiBMZShRZSxsdCl7Vi52YWxpZGF0ZShWLmlzT2JqZWN0KFFlKSxRZSksVi52YWxpZGF0ZShWLmlzT2JqZWN0KGx0KSxsdCk7bGV0IFBlPTA7cmV0dXJuIFBlPShsdC5wYXRo'@;
put 'P2x0LnBhdGgubGVuZ3RoOjApLShRZS5wYXRoP1FlLnBhdGgubGVuZ3RoOjApLDAhPT1QZXx8KFBlPShRZS5jcmVhdGlvbj9RZS5jcmVhdGlvbi5nZXRUaW1lKCk6aGUpLShsdC5jcmVhdGlvbj9sdC5jcmVhdGlvbi5nZXRUaW1lKCk6aGUpLDAhPT1QZXx8KFBlPVFlLmNyZWF0aW9uSW5kZXgt'@;
put 'bHQuY3JlYXRpb25JbmRleCkpLFBlfWZ1bmN0aW9uIEZlKFFlKXtpZihRZSBpbnN0YW5jZW9mIE9iamVjdClyZXR1cm4gUWU7dHJ5e1FlPWRlY29kZVVSSShRZSl9Y2F0Y2h7fXJldHVybiBLKFFlKX1jb25zdCBPZT17a2V5OiIiLHZhbHVlOiIiLGV4cGlyZXM6IkluZmluaXR5IixtYXhBZ2U6'@;
put 'bnVsbCxkb21haW46bnVsbCxwYXRoOm51bGwsc2VjdXJlOiExLGh0dHBPbmx5OiExLGV4dGVuc2lvbnM6bnVsbCxob3N0T25seTpudWxsLHBhdGhJc0RlZmF1bHQ6bnVsbCxjcmVhdGlvbjpudWxsLGxhc3RBY2Nlc3NlZDpudWxsLHNhbWVTaXRlOnZvaWQgMH07Y2xhc3MgamV7Y29uc3RydWN0'@;
put 'b3IobHQ9e30pe2NvbnN0IFBlPVgoKTtQZSYmKHRoaXNbUGVdPXRoaXMuaW5zcGVjdCksT2JqZWN0LmFzc2lnbih0aGlzLE9lLGx0KSx0aGlzLmNyZWF0aW9uPXRoaXMuY3JlYXRpb258fG5ldyBEYXRlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjcmVhdGlvbkluZGV4Iix7Y29uZmln'@;
put 'dXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6KytqZS5jb29raWVzQ3JlYXRlZH0pfWluc3BlY3QoKXtjb25zdCBsdD1EYXRlLm5vdygpLFBlPW51bGwhPXRoaXMuaG9zdE9ubHk/dGhpcy5ob3N0T25seToiPyIsYmU9dGhpcy5jcmVhdGlvbj9sdC10aGlzLmNyZWF0'@;
put 'aW9uLmdldFRpbWUoKSsibXMiOiI/IixBZT10aGlzLmxhc3RBY2Nlc3NlZD9sdC10aGlzLmxhc3RBY2Nlc3NlZC5nZXRUaW1lKCkrIm1zIjoiPyI7cmV0dXJuYENvb2tpZT0iJHt0aGlzLnRvU3RyaW5nKCl9OyBob3N0T25seT0ke1BlfTsgYUFnZT0ke0FlfTsgY0FnZT0ke2JlfSJgfXRvSlNP'@;
put 'Tigpe2NvbnN0IGx0PXt9O2Zvcihjb25zdCBQZSBvZiBqZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzKXRoaXNbUGVdIT09T2VbUGVdJiYoImV4cGlyZXMiPT09UGV8fCJjcmVhdGlvbiI9PT1QZXx8Imxhc3RBY2Nlc3NlZCI9PT1QZT9sdFtQZV09bnVsbD09PXRoaXNbUGVdP251bGw6IkluZmlu'@;
put 'aXR5Ij09dGhpc1tQZV0/IkluZmluaXR5Ijp0aGlzW1BlXS50b0lTT1N0cmluZygpOiJtYXhBZ2UiPT09UGU/bnVsbCE9PXRoaXNbUGVdJiYobHRbUGVdPXRoaXNbUGVdPT0xLzB8fHRoaXNbUGVdPT0tMS8wP3RoaXNbUGVdLnRvU3RyaW5nKCk6dGhpc1tQZV0pOnRoaXNbUGVdIT09T2VbUGVd'@;
put 'JiYobHRbUGVdPXRoaXNbUGVdKSk7cmV0dXJuIGx0fWNsb25lKCl7cmV0dXJuIHhlKHRoaXMudG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIVUudGVzdCh0aGlzLnZhbHVlKXx8ISh0aGlzLmV4cGlyZXM9PTEvMHx8dGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZXx8Uyh0aGlzLmV4cGlyZXMp'@;
put 'KXx8bnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlPD0wfHxudWxsIT10aGlzLnBhdGgmJiF0ZS50ZXN0KHRoaXMucGF0aCkpcmV0dXJuITE7Y29uc3QgbHQ9dGhpcy5jZG9tYWluKCk7cmV0dXJuIShsdCYmKGx0Lm1hdGNoKC9cLiQvKXx8bnVsbD09SS5nZXRQdWJsaWNTdWZmaXgobHQp'@;
put 'KSl9c2V0RXhwaXJlcyhsdCl7dGhpcy5leHBpcmVzPWx0IGluc3RhbmNlb2YgRGF0ZT9sdDpTKGx0KXx8IkluZmluaXR5In1zZXRNYXhBZ2UobHQpe3RoaXMubWF4QWdlPWx0PT09MS8wfHxsdD09PS0xLzA/bHQudG9TdHJpbmcoKTpsdH1jb29raWVTdHJpbmcoKXtsZXQgbHQ9dGhpcy52YWx1'@;
put 'ZTtyZXR1cm4gbnVsbD09bHQmJihsdD0iIiksIiI9PT10aGlzLmtleT9sdDpgJHt0aGlzLmtleX09JHtsdH1gfXRvU3RyaW5nKCl7bGV0IGx0PXRoaXMuY29va2llU3RyaW5nKCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP2x0Kz1gOyBFeHBp'@;
put 'cmVzPSR7dih0aGlzLmV4cGlyZXMpfWA6bHQrPWA7IEV4cGlyZXM9JHt0aGlzLmV4cGlyZXN9YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlIT0xLzAmJihsdCs9YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYhdGhpcy5ob3N0T25seSYmKGx0Kz1gOyBE'@;
put 'b21haW49JHt0aGlzLmRvbWFpbn1gKSx0aGlzLnBhdGgmJihsdCs9YDsgUGF0aD0ke3RoaXMucGF0aH1gKSx0aGlzLnNlY3VyZSYmKGx0Kz0iOyBTZWN1cmUiKSx0aGlzLmh0dHBPbmx5JiYobHQrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYmIm5vbmUiIT09dGhpcy5zYW1lU2l0ZSl7'@;
put 'Y29uc3QgUGU9amUuc2FtZVNpdGVDYW5vbmljYWxbdGhpcy5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpXTtsdCs9YDsgU2FtZVNpdGU9JHtQZXx8dGhpcy5zYW1lU2l0ZX1gfXJldHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKFBlPT57bHQrPWA7ICR7UGV9YH0p'@;
put 'LGx0fVRUTChsdCl7aWYobnVsbCE9dGhpcy5tYXhBZ2UpcmV0dXJuIHRoaXMubWF4QWdlPD0wPzA6MWUzKnRoaXMubWF4QWdlO2xldCBQZT10aGlzLmV4cGlyZXM7cmV0dXJuIFBlIT0xLzA/KFBlIGluc3RhbmNlb2YgRGF0ZXx8KFBlPVMoUGUpfHwxLzApLFBlPT0xLzA/MS8wOlBlLmdldFRp'@;
put 'bWUoKS0obHR8fERhdGUubm93KCkpKToxLzB9ZXhwaXJ5VGltZShsdCl7aWYobnVsbCE9dGhpcy5tYXhBZ2Upe2NvbnN0IGJlPXRoaXMubWF4QWdlPD0wPy0xLzA6MWUzKnRoaXMubWF4QWdlO3JldHVybihsdHx8dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUpLmdldFRpbWUoKStiZX1yZXR1cm4g'@;
put 'dGhpcy5leHBpcmVzPT0xLzA/MS8wOnRoaXMuZXhwaXJlcy5nZXRUaW1lKCl9ZXhwaXJ5RGF0ZShsdCl7Y29uc3QgUGU9dGhpcy5leHBpcnlUaW1lKGx0KTtyZXR1cm4gUGU9PTEvMD9uZXcgRGF0ZShoZSk6UGU9PS0xLzA/bmV3IERhdGUoMCk6bmV3IERhdGUoUGUpfWlzUGVyc2lzdGVudCgp'@;
put 'e3JldHVybiBudWxsIT10aGlzLm1heEFnZXx8dGhpcy5leHBpcmVzIT0xLzB9Y2Fub25pY2FsaXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxsOnAodGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWxpemVkRG9tYWluKCl9fWZ1bmN0aW9u'@;
put 'IFdlKFFlKXtpZihudWxsIT1RZSl7Y29uc3QgbHQ9UWUudG9Mb3dlckNhc2UoKTtzd2l0Y2gobHQpe2Nhc2UgRy5TVFJJQ1Q6Y2FzZSBHLlNJTEVOVDpjYXNlIEcuRElTQUJMRUQ6cmV0dXJuIGx0fX1yZXR1cm4gRy5TSUxFTlR9amUuY29va2llc0NyZWF0ZWQ9MCxqZS5wYXJzZT1kZSxqZS5m'@;
put 'cm9tSlNPTj14ZSxqZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKE9lKSxqZS5zYW1lU2l0ZUxldmVsPXtzdHJpY3Q6MyxsYXg6Mixub25lOjF9LGplLnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJMYXgifTtjbGFzcyBLZXtjb25zdHJ1Y3Rvcihs'@;
put 'dCxQZT17cmVqZWN0UHVibGljU3VmZml4ZXM6ITB9KXsiYm9vbGVhbiI9PXR5cGVvZiBQZSYmKFBlPXtyZWplY3RQdWJsaWNTdWZmaXhlczpQZX0pLFYudmFsaWRhdGUoVi5pc09iamVjdChQZSksUGUpLHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXM9UGUucmVqZWN0UHVibGljU3VmZml4ZXMs'@;
put 'dGhpcy5lbmFibGVMb29zZU1vZGU9ISFQZS5sb29zZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW49ImJvb2xlYW4iIT10eXBlb2YgUGUuYWxsb3dTcGVjaWFsVXNlRG9tYWlufHxQZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5zdG9yZT1sdHx8bmV3IEUsdGhpcy5wcmVmaXhT'@;
put 'ZWN1cml0eT1XZShQZS5wcmVmaXhTZWN1cml0eSksdGhpcy5fY2xvbmVTeW5jPVllKCJjbG9uZSIpLHRoaXMuX2ltcG9ydENvb2tpZXNTeW5jPVllKCJfaW1wb3J0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llc1N5bmM9WWUoImdldENvb2tpZXMiKSx0aGlzLmdldENvb2tpZVN0cmluZ1N5bmM9'@;
put 'WWUoImdldENvb2tpZVN0cmluZyIpLHRoaXMuZ2V0U2V0Q29va2llU3RyaW5nc1N5bmM9WWUoImdldFNldENvb2tpZVN0cmluZ3MiKSx0aGlzLnJlbW92ZUFsbENvb2tpZXNTeW5jPVllKCJyZW1vdmVBbGxDb29raWVzIiksdGhpcy5zZXRDb29raWVTeW5jPVllKCJzZXRDb29raWUiKSx0aGlz'@;
put 'LnNlcmlhbGl6ZVN5bmM9WWUoInNlcmlhbGl6ZSIpfXNldENvb2tpZShsdCxQZSxiZSxBZSl7bGV0IFRlO2lmKFYudmFsaWRhdGUoVi5pc05vbkVtcHR5U3RyaW5nKFBlKSxBZSxiZSksVi5pc0Z1bmN0aW9uKFBlKSlyZXR1cm4oQWU9UGUpKG5ldyBFcnJvcigiTm8gVVJMIHdhcyBzcGVjaWZp'@;
put 'ZWQiKSk7Y29uc3QgcWU9RmUoUGUpO2lmKFYuaXNGdW5jdGlvbihiZSkmJihBZT1iZSxiZT17fSksVi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oQWUpLEFlKSwhVi5pc05vbkVtcHR5U3RyaW5nKGx0KSYmIVYuaXNPYmplY3QobHQpJiZsdCBpbnN0YW5jZW9mIFN0cmluZyYmMD09bHQubGVuZ3Ro'@;
put 'KXJldHVybiBBZShudWxsKTtjb25zdCBYZT1wKHFlLmhvc3RuYW1lKSxVZT1iZS5sb29zZXx8dGhpcy5lbmFibGVMb29zZU1vZGU7bGV0IGh0PW51bGw7aWYoYmUuc2FtZVNpdGVDb250ZXh0JiYoaHQ9Y2UoYmUuc2FtZVNpdGVDb250ZXh0KSwhaHQpKXJldHVybiBBZShuZXcgRXJyb3IodWUp'@;
put 'KTtpZigic3RyaW5nIj09dHlwZW9mIGx0fHxsdCBpbnN0YW5jZW9mIFN0cmluZyl7aWYoIShsdD1qZS5wYXJzZShsdCx7bG9vc2U6VWV9KSkpcmV0dXJuIFRlPW5ldyBFcnJvcigiQ29va2llIGZhaWxlZCB0byBwYXJzZSIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpfWVsc2UgaWYoIShs'@;
put 'dCBpbnN0YW5jZW9mIGplKSlyZXR1cm4gVGU9bmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBzZXRDb29raWUgbXVzdCBiZSBhIENvb2tpZSBvYmplY3Qgb3Igc3RyaW5nIiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7Y29uc3QgTWU9YmUubm93fHxuZXcgRGF0ZTtpZih0aGlzLnJl'@;
put 'amVjdFB1YmxpY1N1ZmZpeGVzJiZsdC5kb21haW4mJm51bGw9PUkuZ2V0UHVibGljU3VmZml4KGx0LmNkb21haW4oKSx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLGlnbm9yZUVycm9yOmJlLmlnbm9yZUVycm9yfSkmJiFILnRlc3QobHQuZG9tYWlu'@;
put 'KSlyZXR1cm4gVGU9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7aWYobHQuZG9tYWluKXtpZighdyhYZSxsdC5jZG9tYWluKCksITEpKXJldHVybiBUZT1uZXcgRXJyb3IoYENvb2tpZSBub3Qg'@;
put 'aW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6JHtsdC5jZG9tYWluKCl9IFJlcXVlc3Q6JHtYZX1gKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKTtudWxsPT1sdC5ob3N0T25seSYmKGx0Lmhvc3RPbmx5PSExKX1lbHNlIGx0Lmhvc3RPbmx5PSEwLGx0LmRvbWFpbj1YZTtpZihsdC5w'@;
put 'YXRoJiYiLyI9PT1sdC5wYXRoWzBdfHwobHQucGF0aD1KKHFlLnBhdGhuYW1lKSxsdC5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PWJlLmh0dHAmJmx0Lmh0dHBPbmx5KXJldHVybiBUZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEFl'@;
put 'KGJlLmlnbm9yZUVycm9yP251bGw6VGUpO2lmKCJub25lIiE9PWx0LnNhbWVTaXRlJiZ2b2lkIDAhPT1sdC5zYW1lU2l0ZSYmaHQmJiJub25lIj09PWh0KXJldHVybiBUZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0Iiks'@;
put 'QWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7Y29uc3QgRGU9dGhpcy5wcmVmaXhTZWN1cml0eT09PUcuU0lMRU5UO2lmKHRoaXMucHJlZml4U2VjdXJpdHkhPT1HLkRJU0FCTEVEKXtsZXQgb3QsdXQ9ITE7aWYoVi52YWxpZGF0ZShWLmlzT2JqZWN0KE10PWx0KSxNdCksIU10LmtleS5zdGFy'@;
put 'dHNXaXRoKCJfX1NlY3VyZS0iKXx8TXQuc2VjdXJlP2Z1bmN0aW9uKE10KXtyZXR1cm4gVi52YWxpZGF0ZShWLmlzT2JqZWN0KE10KSksIU10LmtleS5zdGFydHNXaXRoKCJfX0hvc3QtIil8fE10LnNlY3VyZSYmTXQuaG9zdE9ubHkmJm51bGwhPU10LnBhdGgmJiIvIj09PU10LnBhdGh9KGx0'@;
put 'KXx8KHV0PSEwLG90PSJDb29raWUgaGFzIF9fSG9zdCBwcmVmaXggYnV0IGVpdGhlciBTZWN1cmUgb3IgSG9zdE9ubHkgYXR0cmlidXRlIGlzIG5vdCBzZXQgb3IgUGF0aCBpcyBub3QgJy8nIik6KHV0PSEwLG90PSJDb29raWUgaGFzIF9fU2VjdXJlIHByZWZpeCBidXQgU2VjdXJlIGF0dHJp'@;
put 'YnV0ZSBpcyBub3Qgc2V0IiksdXQpcmV0dXJuIEFlKGJlLmlnbm9yZUVycm9yfHxEZT9udWxsOm5ldyBFcnJvcihvdCkpfXZhciBNdDtjb25zdCB6ZT10aGlzLnN0b3JlO3plLnVwZGF0ZUNvb2tpZXx8KHplLnVwZGF0ZUNvb2tpZT1mdW5jdGlvbihvdCx1dCxNdCl7dGhpcy5wdXRDb29raWUo'@;
put 'dXQsTXQpfSksemUuZmluZENvb2tpZShsdC5kb21haW4sbHQucGF0aCxsdC5rZXksZnVuY3Rpb24ob3QsdXQpe2lmKG90KXJldHVybiBBZShvdCk7Y29uc3QgTXQ9ZnVuY3Rpb24oSHQpe2lmKEh0KXJldHVybiBBZShIdCk7QWUobnVsbCxsdCl9O2lmKHV0KXtpZighMT09PWJlLmh0dHAmJnV0'@;
put 'Lmh0dHBPbmx5KXJldHVybiBvdD1uZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOm90KTtsdC5jcmVhdGlvbj11dC5jcmVhdGlvbixsdC5jcmVhdGlvbkluZGV4PXV0LmNyZWF0aW9uSW5k'@;
put 'ZXgsbHQubGFzdEFjY2Vzc2VkPU1lLHplLnVwZGF0ZUNvb2tpZSh1dCxsdCxNdCl9ZWxzZSBsdC5jcmVhdGlvbj1sdC5sYXN0QWNjZXNzZWQ9TWUsemUucHV0Q29va2llKGx0LE10KX0pfWdldENvb2tpZXMobHQsUGUsYmUpe1YudmFsaWRhdGUoVi5pc05vbkVtcHR5U3RyaW5nKGx0KSxiZSxs'@;
put 'dCk7Y29uc3QgQWU9RmUobHQpO1YuaXNGdW5jdGlvbihQZSkmJihiZT1QZSxQZT17fSksVi52YWxpZGF0ZShWLmlzT2JqZWN0KFBlKSxiZSxQZSksVi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oYmUpLGJlKTtjb25zdCBUZT1wKEFlLmhvc3RuYW1lKSxxZT1BZS5wYXRobmFtZXx8Ii8iO2xldCBY'@;
put 'ZT1QZS5zZWN1cmU7bnVsbCE9WGV8fCFBZS5wcm90b2NvbHx8Imh0dHBzOiIhPUFlLnByb3RvY29sJiYid3NzOiIhPUFlLnByb3RvY29sfHwoWGU9ITApO2xldCBVZT0wO2lmKFBlLnNhbWVTaXRlQ29udGV4dCl7Y29uc3QgTXQ9Y2UoUGUuc2FtZVNpdGVDb250ZXh0KTtpZihVZT1qZS5zYW1l'@;
put 'U2l0ZUxldmVsW010XSwhVWUpcmV0dXJuIGJlKG5ldyBFcnJvcih1ZSkpfWxldCBodD1QZS5odHRwO251bGw9PWh0JiYoaHQ9ITApO2NvbnN0IE1lPVBlLm5vd3x8RGF0ZS5ub3coKSxEZT0hMSE9PVBlLmV4cGlyZSx6ZT0hIVBlLmFsbFBhdGhzLG90PXRoaXMuc3RvcmU7ZnVuY3Rpb24gdXQo'@;
put 'TXQpe2lmKE10Lmhvc3RPbmx5KXtpZihNdC5kb21haW4hPVRlKXJldHVybiExfWVsc2UgaWYoIXcoVGUsTXQuZG9tYWluLCExKSlyZXR1cm4hMTtyZXR1cm4hKCF6ZSYmIWoocWUsTXQucGF0aCl8fE10LnNlY3VyZSYmIVhlfHxNdC5odHRwT25seSYmIWh0fHxVZSYmamUuc2FtZVNpdGVMZXZl'@;
put 'bFtNdC5zYW1lU2l0ZXx8Im5vbmUiXT5VZXx8RGUmJk10LmV4cGlyeVRpbWUoKTw9TWUmJihvdC5yZW1vdmVDb29raWUoTXQuZG9tYWluLE10LnBhdGgsTXQua2V5LCgpPT57fSksMSkpfW90LmZpbmRDb29raWVzKFRlLHplP251bGw6cWUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4sKE10'@;
put 'LEh0KT0+e2lmKE10KXJldHVybiBiZShNdCk7SHQ9SHQuZmlsdGVyKHV0KSwhMSE9PVBlLnNvcnQmJihIdD1IdC5zb3J0KExlKSk7Y29uc3QgUHQ9bmV3IERhdGU7Zm9yKGNvbnN0IG9uIG9mIEh0KW9uLmxhc3RBY2Nlc3NlZD1QdDtiZShudWxsLEh0KX0pfWdldENvb2tpZVN0cmluZyguLi5s'@;
put 'dCl7Y29uc3QgUGU9bHQucG9wKCk7Vi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oUGUpLFBlKSxsdC5wdXNoKGZ1bmN0aW9uKGJlLEFlKXtiZT9QZShiZSk6UGUobnVsbCxBZS5zb3J0KExlKS5tYXAoVGU9PlRlLmNvb2tpZVN0cmluZygpKS5qb2luKCI7ICIpKX0pLHRoaXMuZ2V0Q29va2llcy5h'@;
put 'cHBseSh0aGlzLGx0KX1nZXRTZXRDb29raWVTdHJpbmdzKC4uLmx0KXtjb25zdCBQZT1sdC5wb3AoKTtWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihQZSksUGUpLGx0LnB1c2goZnVuY3Rpb24oYmUsQWUpe2JlP1BlKGJlKTpQZShudWxsLEFlLm1hcChUZT0+VGUudG9TdHJpbmcoKSkpfSksdGhp'@;
put 'cy5nZXRDb29raWVzLmFwcGx5KHRoaXMsbHQpfXNlcmlhbGl6ZShsdCl7Vi52YWxpZGF0ZShWLmlzRnVuY3Rpb24obHQpLGx0KTtsZXQgUGU9dGhpcy5zdG9yZS5jb25zdHJ1Y3Rvci5uYW1lO1YuaXNPYmplY3QoUGUpJiYoUGU9bnVsbCk7Y29uc3QgYmU9e3ZlcnNpb246YHRvdWdoLWNvb2tp'@;
put 'ZUAke0J9YCxzdG9yZVR5cGU6UGUscmVqZWN0UHVibGljU3VmZml4ZXM6ISF0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGVuYWJsZUxvb3NlTW9kZTohIXRoaXMuZW5hYmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjohIXRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHByZWZp'@;
put 'eFNlY3VyaXR5OldlKHRoaXMucHJlZml4U2VjdXJpdHkpLGNvb2tpZXM6W119O2lmKCF0aGlzLnN0b3JlLmdldEFsbENvb2tpZXN8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMpcmV0dXJuIGx0KG5ldyBFcnJvcigic3RvcmUgZG9lcyBub3Qgc3VwcG9ydCBn'@;
put 'ZXRBbGxDb29raWVzIGFuZCBjYW5ub3QgYmUgc2VyaWFsaXplZCIpKTt0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMoKEFlLFRlKT0+QWU/bHQoQWUpOihiZS5jb29raWVzPVRlLm1hcChxZT0+KGRlbGV0ZShxZT1xZSBpbnN0YW5jZW9mIGplP3FlLnRvSlNPTigpOnFlKS5jcmVhdGlvbkluZGV4'@;
put 'LHFlKSksbHQobnVsbCxiZSkpKX10b0pTT04oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVTeW5jKCl9X2ltcG9ydENvb2tpZXMobHQsUGUpe2xldCBiZT1sdC5jb29raWVzO2lmKCFiZXx8IUFycmF5LmlzQXJyYXkoYmUpKXJldHVybiBQZShuZXcgRXJyb3IoInNlcmlhbGl6ZWQgamFyIGhhcyBu'@;
put 'byBjb29raWVzIGFycmF5IikpO2JlPWJlLnNsaWNlKCk7Y29uc3QgQWU9VGU9PntpZihUZSlyZXR1cm4gUGUoVGUpO2lmKCFiZS5sZW5ndGgpcmV0dXJuIFBlKFRlLHRoaXMpO2xldCBxZTt0cnl7cWU9eGUoYmUuc2hpZnQoKSl9Y2F0Y2goWGUpe3JldHVybiBQZShYZSl9aWYobnVsbD09PXFl'@;
put 'KXJldHVybiBBZShudWxsKTt0aGlzLnN0b3JlLnB1dENvb2tpZShxZSxBZSl9O0FlKCl9Y2xvbmUobHQsUGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoUGU9bHQsbHQ9bnVsbCksdGhpcy5zZXJpYWxpemUoKGJlLEFlKT0+e2lmKGJlKXJldHVybiBQZShiZSk7S2UuZGVzZXJpYWxpemUoQWUs'@;
put 'bHQsUGUpfSl9Y2xvbmVTeW5jKGx0KXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKCk7aWYoIWx0LnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIGNsb25lIGRlc3RpbmF0aW9uIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNl'@;
put 'IGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLl9jbG9uZVN5bmMobHQpfXJlbW92ZUFsbENvb2tpZXMobHQpe1YudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGx0KSxsdCk7Y29uc3QgUGU9dGhpcy5zdG9yZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUGUucmVtb3ZlQWxsQ29va2llcyYm'@;
put 'UGUucmVtb3ZlQWxsQ29va2llcyE9PWsucHJvdG90eXBlLnJlbW92ZUFsbENvb2tpZXMpcmV0dXJuIFBlLnJlbW92ZUFsbENvb2tpZXMobHQpO1BlLmdldEFsbENvb2tpZXMoKGJlLEFlKT0+e2lmKGJlKXJldHVybiBsdChiZSk7aWYoMD09PUFlLmxlbmd0aClyZXR1cm4gbHQobnVsbCk7bGV0'@;
put 'IFRlPTA7Y29uc3QgcWU9W107ZnVuY3Rpb24gWGUoVWUpe2lmKFVlJiZxZS5wdXNoKFVlKSxUZSsrLFRlPT09QWUubGVuZ3RoKXJldHVybiBsdChxZS5sZW5ndGg/cWVbMF06bnVsbCl9QWUuZm9yRWFjaChVZT0+e1BlLnJlbW92ZUNvb2tpZShVZS5kb21haW4sVWUucGF0aCxVZS5rZXksWGUp'@;
put 'fSl9KX1zdGF0aWMgZGVzZXJpYWxpemUobHQsUGUsYmUpe2xldCBBZTtpZigzIT09YXJndW1lbnRzLmxlbmd0aCYmKGJlPVBlLFBlPW51bGwpLFYudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGJlKSxiZSksInN0cmluZyI9PXR5cGVvZiBsdCl7aWYoQWU9ZmUobHQpLEFlIGluc3RhbmNlb2YgRXJy'@;
put 'b3IpcmV0dXJuIGJlKEFlKX1lbHNlIEFlPWx0O2NvbnN0IFRlPW5ldyBLZShQZSx7cmVqZWN0UHVibGljU3VmZml4ZXM6QWUucmVqZWN0UHVibGljU3VmZml4ZXMsbG9vc2VNb2RlOkFlLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46QWUuYWxsb3dTcGVjaWFsVXNlRG9t'@;
put 'YWluLHByZWZpeFNlY3VyaXR5OkFlLnByZWZpeFNlY3VyaXR5fSk7VGUuX2ltcG9ydENvb2tpZXMoQWUscWU9PntpZihxZSlyZXR1cm4gYmUocWUpO2JlKG51bGwsVGUpfSl9c3RhdGljIGRlc2VyaWFsaXplU3luYyhsdCxQZSl7Y29uc3QgYmU9InN0cmluZyI9PXR5cGVvZiBsdD9KU09OLnBh'@;
put 'cnNlKGx0KTpsdCxBZT1uZXcgS2UoUGUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOmJlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpiZS5lbmFibGVMb29zZU1vZGV9KTtpZighQWUuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgc3RvcmUgaXMgbm90'@;
put 'IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIEFlLl9pbXBvcnRDb29raWVzU3luYyhiZSksQWV9fWZ1bmN0aW9uIFllKFFlKXtyZXR1cm4gZnVuY3Rpb24oLi4ubHQpe2lmKCF0aGlzLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2ll'@;
put 'SmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO2xldCBQZSxiZTtpZih0aGlzW1FlXSguLi5sdCwoQWUsVGUpPT57UGU9QWUsYmU9VGV9KSxQZSl0aHJvdyBQZTtyZXR1cm4gYmV9fUtlLmZyb21KU09OPUtlLmRlc2VyaWFsaXplU3luYyxbIl9p'@;
put 'bXBvcnRDb29raWVzIiwiY2xvbmUiLCJnZXRDb29raWVzIiwiZ2V0Q29va2llU3RyaW5nIiwiZ2V0U2V0Q29va2llU3RyaW5ncyIsInJlbW92ZUFsbENvb2tpZXMiLCJzZXJpYWxpemUiLCJzZXRDb29raWUiXS5mb3JFYWNoKFFlPT57S2UucHJvdG90eXBlW1FlXT1ZKEtlLnByb3RvdHlwZVtR'@;
put 'ZV0pfSksS2UuZGVzZXJpYWxpemU9WShLZS5kZXNlcmlhbGl6ZSksTy52ZXJzaW9uPUIsTy5Db29raWVKYXI9S2UsTy5Db29raWU9amUsTy5TdG9yZT1rLE8uTWVtb3J5Q29va2llU3RvcmU9RSxPLnBhcnNlRGF0ZT1TLE8uZm9ybWF0RGF0ZT12LE8ucGFyc2U9ZGUsTy5mcm9tSlNPTj14ZSxP'@;
put 'LmRvbWFpbk1hdGNoPXcsTy5kZWZhdWx0UGF0aD1KLE8ucGF0aE1hdGNoPWosTy5nZXRQdWJsaWNTdWZmaXg9SS5nZXRQdWJsaWNTdWZmaXgsTy5jb29raWVDb21wYXJlPUxlLE8ucGVybXV0ZURvbWFpbj1SKDczMjQpLnBlcm11dGVEb21haW4sTy5wZXJtdXRlUGF0aD1mdW5jdGlvbihRZSl7'@;
put 'aWYoVi52YWxpZGF0ZShWLmlzU3RyaW5nKFFlKSksIi8iPT09UWUpcmV0dXJuWyIvIl07Y29uc3QgbHQ9W1FlXTtmb3IoO1FlLmxlbmd0aD4xOyl7Y29uc3QgUGU9UWUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09UGUpYnJlYWs7UWU9UWUuc3Vic3RyKDAsUGUpLGx0LnB1c2goUWUpfXJldHVy'@;
put 'biBsdC5wdXNoKCIvIiksbHR9LE8uY2Fub25pY2FsRG9tYWluPXAsTy5QcmVmaXhTZWN1cml0eUVudW09RyxPLlBhcmFtZXRlckVycm9yPVYuUGFyYW1ldGVyRXJyb3J9LDU3NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtmcm9tQ2FsbGJhY2s6en09Uig3MDQxKSxLPVIoMjIyNCku'@;
put 'eSxJPVIoNzMyNCkucGVybXV0ZURvbWFpbixrPVIoODk3MSkuVSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpFLGdldFV0aWxJbnNwZWN0Omp9PVIoMTI2OSk7Y2xhc3MgViBleHRlbmRzIEt7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9ITAsdGhpcy5pZHg9T2JqZWN0'@;
put 'LmNyZWF0ZShudWxsKTtjb25zdCBYPUUoKTtYJiYodGhpc1tYXT10aGlzLmluc3BlY3QpfWluc3BlY3QoKXtyZXR1cm5geyBpZHg6ICR7aihCKSh0aGlzLmlkeCwhMSwyKX0gfWB9ZmluZENvb2tpZShYLFUscSxlZSl7cmV0dXJuIGVlKG51bGwsdGhpcy5pZHhbWF0mJnRoaXMuaWR4W1hdW1Vd'@;
put 'P3RoaXMuaWR4W1hdW1VdW3FdfHxudWxsOnZvaWQgMCl9ZmluZENvb2tpZXMoWCxVLHEsZWUpe2NvbnN0IHRlPVtdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBxJiYoZWU9cSxxPSEwKSwhWClyZXR1cm4gZWUobnVsbCxbXSk7bGV0IG9lO29lPVU/ZnVuY3Rpb24odWUpe09iamVjdC5rZXlzKHVl'@;
put 'KS5mb3JFYWNoKGNlPT57aWYoayhVLGNlKSl7Y29uc3QgRz11ZVtjZV07Zm9yKGNvbnN0IGIgaW4gRyl0ZS5wdXNoKEdbYl0pfX0pfTpmdW5jdGlvbih1ZSl7Zm9yKGNvbnN0IGNlIGluIHVlKXtjb25zdCBHPXVlW2NlXTtmb3IoY29uc3QgYiBpbiBHKXRlLnB1c2goR1tiXSl9fTtjb25zdCBz'@;
put 'ZT1JKFgscSl8fFtYXSxoZT10aGlzLmlkeDtzZS5mb3JFYWNoKHVlPT57Y29uc3QgY2U9aGVbdWVdO2NlJiZvZShjZSl9KSxlZShudWxsLHRlKX1wdXRDb29raWUoWCxVKXt0aGlzLmlkeFtYLmRvbWFpbl18fCh0aGlzLmlkeFtYLmRvbWFpbl09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5p'@;
put 'ZHhbWC5kb21haW5dW1gucGF0aF18fCh0aGlzLmlkeFtYLmRvbWFpbl1bWC5wYXRoXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtYLmRvbWFpbl1bWC5wYXRoXVtYLmtleV09WCxVKG51bGwpfXVwZGF0ZUNvb2tpZShYLFUscSl7dGhpcy5wdXRDb29raWUoVSxxKX1yZW1vdmVDb29r'@;
put 'aWUoWCxVLHEsZWUpe3RoaXMuaWR4W1hdJiZ0aGlzLmlkeFtYXVtVXSYmdGhpcy5pZHhbWF1bVV1bcV0mJmRlbGV0ZSB0aGlzLmlkeFtYXVtVXVtxXSxlZShudWxsKX1yZW1vdmVDb29raWVzKFgsVSxxKXtyZXR1cm4gdGhpcy5pZHhbWF0mJihVP2RlbGV0ZSB0aGlzLmlkeFtYXVtVXTpkZWxl'@;
put 'dGUgdGhpcy5pZHhbWF0pLHEobnVsbCl9cmVtb3ZlQWxsQ29va2llcyhYKXtyZXR1cm4gdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKSxYKG51bGwpfWdldEFsbENvb2tpZXMoWCl7Y29uc3QgVT1bXSxxPXRoaXMuaWR4O09iamVjdC5rZXlzKHEpLmZvckVhY2goZWU9PntPYmplY3Qua2V5'@;
put 'cyhxW2VlXSkuZm9yRWFjaCh0ZT0+e09iamVjdC5rZXlzKHFbZWVdW3RlXSkuZm9yRWFjaChvZT0+e251bGwhPT1vZSYmVS5wdXNoKHFbZWVdW3RlXVtvZV0pfSl9KX0pLFUuc29ydCgoZWUsdGUpPT4oZWUuY3JlYXRpb25JbmRleHx8MCktKHRlLmNyZWF0aW9uSW5kZXh8fDApKSxYKG51bGws'@;
put 'VSl9fWZ1bmN0aW9uIEIoWSl7Y29uc3QgWD1PYmplY3Qua2V5cyhZKTtpZigwPT09WC5sZW5ndGgpcmV0dXJuIltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7fSI7bGV0IFU9IltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG4iO3JldHVybiBPYmplY3Qua2V5cyhZKS5mb3JFYWNoKChxLGVl'@;
put 'KT0+e1UrPWZ1bmN0aW9uKHRlLG9lKXtsZXQgaGU9YCAgJyR7dGV9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKG9lKS5mb3JFYWNoKCh1ZSxjZSxHKT0+e2hlKz1mdW5jdGlvbihiLEQpe2NvbnN0IEg9IiAgICAiO2xldCBOPWAke0h9JyR7Yn0n'@;
put 'OiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMoRCkuZm9yRWFjaCgoZyxDLFMpPT57Tis9YCAgICAgICR7Z306ICR7RFtnXS5pbnNwZWN0KCl9YCxDPFMubGVuZ3RoLTEmJihOKz0iLCIpLE4rPSJcbiJ9KSxOKz1gJHtIfX1gLE59KHVlLG9lW3VlXSks'@;
put 'Y2U8Ry5sZW5ndGgtMSYmKGhlKz0iLCIpLGhlKz0iXG4ifSksaGUrPSIgIH0iLGhlfShxLFlbcV0pLGVlPFgubGVuZ3RoLTEmJihVKz0iLCIpLFUrPSJcbiJ9KSxVKz0ifSIsVX1bImZpbmRDb29raWUiLCJmaW5kQ29va2llcyIsInB1dENvb2tpZSIsInVwZGF0ZUNvb2tpZSIsInJlbW92ZUNv'@;
put 'b2tpZSIsInJlbW92ZUNvb2tpZXMiLCJyZW1vdmVBbGxDb29raWVzIiwiZ2V0QWxsQ29va2llcyJdLmZvckVhY2goWT0+e1YucHJvdG90eXBlW1ldPXooVi5wcm90b3R5cGVbWV0pfSksTy5tPVZ9LDg5NzE6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty5VPWZ1bmN0aW9uKFIseil7cmV0dXJuIHo9'@;
put 'PT1SfHwwPT09Ui5pbmRleE9mKHopJiYoIi8iPT09ei5zdWJzdHIoLTEpfHwiLyI9PT1SLnN1YnN0cih6Lmxlbmd0aCwxKSl9fSw3MzI0OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc1Mik7Ty5wZXJtdXRlRG9tYWluPWZ1bmN0aW9uKEssSSl7Y29uc3Qgaz16LmdldFB1Ymxp'@;
put 'Y1N1ZmZpeChLLHthbGxvd1NwZWNpYWxVc2VEb21haW46SX0pO2lmKCFrKXJldHVybiBudWxsO2lmKGs9PUspcmV0dXJuW0tdOyIuIj09Sy5zbGljZSgtMSkmJihLPUsuc2xpY2UoMCwtMSkpO2NvbnN0IEU9Sy5zbGljZSgwLC0oay5sZW5ndGgrMSkpLnNwbGl0KCIuIikucmV2ZXJzZSgpO2xl'@;
put 'dCBqPWs7Y29uc3QgVj1bal07Zm9yKDtFLmxlbmd0aDspaj1gJHtFLnNoaWZ0KCl9LiR7an1gLFYucHVzaChqKTtyZXR1cm4gVn19LDc1MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig2MjQ0KSxLPVsibG9jYWwiLCJleGFtcGxlIiwiaW52YWxpZCIsImxvY2FsaG9zdCIsInRl'@;
put 'c3QiXSxJPVsibG9jYWxob3N0IiwiaW52YWxpZCJdO08uZ2V0UHVibGljU3VmZml4PWZ1bmN0aW9uKGssRT17fSl7Y29uc3Qgaj1rLnNwbGl0KCIuIiksVj1qW2oubGVuZ3RoLTFdLFk9ISFFLmlnbm9yZUVycm9yO2lmKEUuYWxsb3dTcGVjaWFsVXNlRG9tYWluJiZLLmluY2x1ZGVzKFYpKXtp'@;
put 'ZihqLmxlbmd0aD4xKXJldHVybmAke2pbai5sZW5ndGgtMl19LiR7Vn1gO2lmKEkuaW5jbHVkZXMoVikpcmV0dXJuYCR7Vn1gfWlmKCFZJiZLLmluY2x1ZGVzKFYpKXRocm93IG5ldyBFcnJvcihgQ29va2llIGhhcyBkb21haW4gc2V0IHRvIHRoZSBwdWJsaWMgc3VmZml4ICIke1Z9IiB3aGlj'@;
put 'aCBpcyBhIHNwZWNpYWwgdXNlIGRvbWFpbi4gVG8gYWxsb3cgdGhpcywgY29uZmlndXJlIHlvdXIgQ29va2llSmFyIHdpdGgge2FsbG93U3BlY2lhbFVzZURvbWFpbjp0cnVlLCByZWplY3RQdWJsaWNTdWZmaXhlczogZmFsc2V9LmApO3JldHVybiB6LmdldChrKX19LDIyMjQ6KE0sTyk9Pnsi'@;
put 'dXNlIHN0cmljdCI7Ty55PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zeW5jaHJvbm91cz0hMX1maW5kQ29va2llKFIseixLLEkpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1maW5kQ29va2llcyhSLHosSyxJKXt0aHJvdyBuZXcgRXJyb3IoImZp'@;
put 'bmRDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXB1dENvb2tpZShSLHope3Rocm93IG5ldyBFcnJvcigicHV0Q29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXVwZGF0ZUNvb2tpZShSLHosSyl7dGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9'@;
put 'cmVtb3ZlQ29va2llKFIseixLLEkpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZXMoUix6LEspe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVBbGxDb29raWVzKFIp'@;
put 'e3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1nZXRBbGxDb29raWVzKFIpe3Rocm93IG5ldyBFcnJvcigiZ2V0QWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQgKHRoZXJlZm9yZSBqYXIgY2Fubm90IGJlIHNlcmlhbGl6ZWQpIil9fX0s'@;
put 'MTI2OTooTSxPLFIpPT57ZnVuY3Rpb24geigpe3RyeXtyZXR1cm4gUig5NTM5KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSygpe3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpfU8uZ2V0VXRpbEluc3BlY3Q9ZnVuY3Rpb24oSSxrPXt9KXtjb25z'@;
put 'dCBFPShrLnJlcXVpcmVVdGlsfHx6KSgpO3JldHVybiBmdW5jdGlvbihqLFYsQil7cmV0dXJuIEU/RS5pbnNwZWN0KGosVixCKTpJKGopfX0sTy5nZXRDdXN0b21JbnNwZWN0U3ltYm9sPWZ1bmN0aW9uKEk9e30pe3JldHVybihJLmxvb2t1cEN1c3RvbUluc3BlY3RTeW1ib2x8fEspKCl8fGZ1'@;
put 'bmN0aW9uKGspe2NvbnN0IEU9KGsucmVxdWlyZVV0aWx8fHopKCk7cmV0dXJuIEU/RS5pbnNwZWN0LmN1c3RvbTpudWxsfShJKX19LDc2NTI6KE0sTyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUihrKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yga31mdW5jdGlvbiB6KGspe3JldHVybiJz'@;
put 'dHJpbmciPT10eXBlb2Yga3x8ayBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiBLKGspe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09dG9TdHJpbmcuY2FsbChrKX1jbGFzcyBJIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uRSl7c3VwZXIoLi4uRSl9fU8uUGFyYW1ldGVyRXJyb3I9'@;
put 'SSxPLmlzRnVuY3Rpb249UixPLmlzTm9uRW1wdHlTdHJpbmc9ZnVuY3Rpb24oayl7cmV0dXJuIHooaykmJiIiIT09a30sTy5pc0RhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIGZ1bmN0aW9uKEUsail7dHJ5e3JldHVybiBFIGluc3RhbmNlb2Ygan1jYXRjaHtyZXR1cm4hMX19KGssRGF0ZSkmJiJu'@;
put 'dW1iZXIiPT10eXBlb2YoRT1rLmdldFRpbWUoKSkmJkUlMT09MDt2YXIgRX0sTy5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uKGspe3JldHVybiIiPT09a3x8ayBpbnN0YW5jZW9mIFN0cmluZyYmIiI9PT1rLnRvU3RyaW5nKCl9LE8uaXNTdHJpbmc9eixPLmlzT2JqZWN0PUssTy52YWxpZGF0ZT1m'@;
put 'dW5jdGlvbihrLEUsail7aWYoUihFKXx8KGo9RSxFPW51bGwpLEsoail8fChqPXtFcnJvcjoiRmFpbGVkIENoZWNrIn0pLCFrKXtpZighRSl0aHJvdyBuZXcgSShqKTtFKG5ldyBJKGopKX19fSw0NTY6TT0+e00uZXhwb3J0cz0iNC4xLjMifSw3MDQxOihNLE8pPT57InVzZSBzdHJpY3QiO08u'@;
put 'ZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKCh6LEspPT57YXJndW1lbnRzW2FyZ3VtZW50cy5s'@;
put 'ZW5ndGhdPShJLGspPT57aWYoSSlyZXR1cm4gSyhJKTt6KGspfSxhcmd1bWVudHMubGVuZ3RoKyssUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX0sTy5mcm9tUHJvbWlzZT1mdW5jdGlvbihSKXtyZXR1cm4g'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3Qgej1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeilyZXR1cm4gUi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLGFy'@;
put 'Z3VtZW50cy5sZW5ndGgtLSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKS50aGVuKEs9PnoobnVsbCxLKSx6KX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX19LDY3MjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oVil7Zm9yKHZhciBCLFk9MSxYPWFyZ3VtZW50cy5sZW5ndGg7WTxYO1krKylmb3IodmFyIFUgaW4gQj1hcmd1bWVudHNbWV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsVSkmJihWW1VdPUJbVV0pO3JldHVybiBWfSx6'@;
put 'LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oVSxxKXtmdW5jdGlvbiBlZShzZSl7dHJ5e29lKFgubmV4dChzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rp'@;
put 'b24gdGUoc2Upe3RyeXtvZShYLnRocm93KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiBvZShzZSl7dmFyIGhlO3NlLmRvbmU/VShzZS52YWx1ZSk6KGhlPXNlLnZhbHVlLGhlIGluc3RhbmNlb2YgWT9oZTpuZXcgWShmdW5jdGlvbih1ZSl7dWUoaGUpfSkpLnRoZW4oZWUsdGUpfW9l'@;
put 'KChYPVguYXBwbHkoVixCfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihWLEIpe3ZhciBZLFgsVSxxLGVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlVbMF0pdGhyb3cgVVsxXTtyZXR1cm4gVVsxXX0sdHJ5czpbXSxvcHM6W119O3Jl'@;
put 'dHVybiBxPXtuZXh0OnRlKDApLHRocm93OnRlKDEpLHJldHVybjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oaGUpe2lmKFkpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZWU7KXRyeXtpZihZPTEsWCYmKFU9MiZoZVswXT9YLnJldHVybjpoZVswXT9YLnRocm93fHwoKFU9WC5yZXR1cm4pJiZVLmNhbGwoWCksMCk6WC5uZXh0KSYm'@;
put 'IShVPVUuY2FsbChYLGhlWzFdKSkuZG9uZSlyZXR1cm4gVTtzd2l0Y2goWD0wLFUmJihoZT1bMiZoZVswXSxVLnZhbHVlXSksaGVbMF0pe2Nhc2UgMDpjYXNlIDE6VT1oZTticmVhaztjYXNlIDQ6cmV0dXJuIGVlLmxhYmVsKysse3ZhbHVlOmhlWzFdLGRvbmU6ITF9O2Nhc2UgNTplZS5sYWJl'@;
put 'bCsrLFg9aGVbMV0saGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpoZT1lZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFU9KFU9ZWUudHJ5cykubGVuZ3RoPjAmJlVbVS5sZW5ndGgtMV0pfHw2IT09aGVbMF0mJjIhPT1oZVswXSkpe2VlPTA7Y29udGludWV9'@;
put 'aWYoMz09PWhlWzBdJiYoIVV8fGhlWzFdPlVbMF0mJmhlWzFdPFVbM10pKXtlZS5sYWJlbD1oZVsxXTticmVha31pZig2PT09aGVbMF0mJmVlLmxhYmVsPFVbMV0pe2VlLmxhYmVsPVVbMV0sVT1oZTticmVha31pZihVJiZlZS5sYWJlbDxVWzJdKXtlZS5sYWJlbD1VWzJdLGVlLm9wcy5wdXNo'@;
put 'KGhlKTticmVha31VWzJdJiZlZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZX1oZT1CLmNhbGwoVixlZSl9Y2F0Y2godWUpe2hlPVs2LHVlXSxYPTB9ZmluYWxseXtZPVU9MH1pZig1JmhlWzBdKXRocm93IGhlWzFdO3JldHVybnt2YWx1ZTpoZVswXT9oZVsxXTp2b2lkIDAsZG9u'@;
put 'ZTohMH19KFtvZSxzZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNvbnRleHRNYW5hZ2VyPXZvaWQgMDt2YXIgaz1SKDU5MjgpLEU9Uig5Nzc4KSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gVihCLFkpe3RoaXMuc2VydmVyVXJsPUIsdGhp'@;
put 'cy5yZXF1ZXN0Q2xpZW50PVksdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJEYXRhIE1pbmluZyBjb21wdXRlIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0'@;
put 'aW9uIGNvbXB1dGUgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGNvbXB1dGUgY29udGV4dCIsIlNBUyBTdHVkaW8gY29tcHV0ZSBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBjb21wdXRlIGNvbnRleHQiXSx0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzPVsiQ0FTIEZv'@;
put 'cm1hdHMgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiRGF0YSBNaW5pbmcgbGF1bmNoZXIgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkpvYiBGbG93IEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gbGF1bmNoZXIg'@;
put 'Y29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGxhdW5jaGVyIGNvbnRleHQiXSxCJiYoMCxrLmlzVXJsKShCKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KFYucHJvdG90eXBlLCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0c30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImdldERl'@;
put 'ZmF1bHRMYXVuY2hlckNvbnRleHRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksVi5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKEIpe3JldHVybiBLKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAw'@;
put 'MDAiKSxCKS5jYXRjaChmdW5jdGlvbihVKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHRzLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsKChZPVguc2VudCgpLnJlc3VsdCkmJlkuaXRlbXM/WS5pdGVtczpbXSkubWFwKGZ1bmN0'@;
put 'aW9uKFUpe3JldHVybntjcmVhdGVkQnk6VS5jcmVhdGVkQnksaWQ6VS5pZCxuYW1lOlUubmFtZSx2ZXJzaW9uOlUudmVyc2lvbixhdHRyaWJ1dGVzOnt9fX0pXX19KX0pfSxWLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKEIpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbigpe3ZhciBZO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2xhdW5jaGVyL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksQiku'@;
put 'Y2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGdldHRpbmcgbGF1bmNoZXIgY29udGV4dHMuICIpfSldO2Nhc2UgMTpyZXR1cm5bMiwoKFk9WC5zZW50KCkucmVzdWx0KSYmWS5pdGVtcz9ZLml0ZW1zOltdKS5tYXAoZnVuY3Rpb24oVSl7'@;
put 'cmV0dXJue2NyZWF0ZWRCeTpVLmNyZWF0ZWRCeSxpZDpVLmlkLG5hbWU6VS5uYW1lLHZlcnNpb246VS52ZXJzaW9uLGF0dHJpYnV0ZXM6e319fSldfX0pfSl9LFYucHJvdG90eXBlLmNyZWF0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEIsWSxYLFUscSxlZSl7cmV0dXJuIEsodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lLHNlLGhlLHVlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0Q29t'@;
put 'cHV0ZUNvbnRleHRzLCJDb21wdXRlIGNvbnRleHQgJyIuY29uY2F0KEIsIicgYWxyZWFkeSBleGlzdHMuIikpLFs0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRzKHEpXTtjYXNlIDE6aWYoY2Uuc2VudCgpLmZpbmQoZnVuY3Rpb24oRyl7cmV0dXJuIEcubmFtZT09PUJ9KSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkNvbXB1dGUgY29udGV4dCAnIi5jb25jYXQoQiwiJyBhbHJlYWR5IGV4aXN0cy4iKSk7cmV0dXJuIFk/dGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cy5pbmNsdWRlcyhZKT9bMyw0XTpbNCx0aGlzLmdldExhdW5jaGVyQ29udGV4dHMocSldOlszLDRdO2Nhc2UgMjpyZXR1cm4gY2Uu'@;
put 'c2VudCgpLmZpbmQoZnVuY3Rpb24oRyl7cmV0dXJuIEcubmFtZT09PVl9KT9bMyw0XToodGU9IlRoZSBsYXVuY2hlciBjb250ZXh0IGZvciAiLmNvbmNhdChZKSxbNCx0aGlzLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChZLHRlLCJkaXJlY3QiLHEpLmNhdGNoKGZ1bmN0aW9uKEcpe3Rocm93IG5l'@;
put 'dyBFcnJvcigiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gIi5jb25jYXQoRykpfSldKTtjYXNlIDM6aWYoIShvZT1jZS5zZW50KCkpfHwhb2UubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuIik7WT1vZS5u'@;
put 'YW1lLGNlLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBzZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxxJiYoc2UuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KHEpKSxoZT17cmV1c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9LFgmJihoZT16KHooe30saGUpLHtydW5TZXJ2'@;
put 'ZXJBczpYfSkpLHVlPXtuYW1lOkIsbGF1bmNoQ29udGV4dDp7Y29udGV4dE5hbWU6WXx8IiJ9LGF0dHJpYnV0ZXM6aGV9LGVlJiZlZS5sZW5ndGg/dWUuYXV0aG9yaXplZFVzZXJzPWVlOnVlLmF1dGhvcml6ZUFsbEF1dGhlbnRpY2F0ZWRVc2Vycz0hMCxVJiYodWUuZW52aXJvbm1lbnQ9e2F1'@;
put 'dG9FeGVjTGluZXM6VX0pLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMiKSx1ZSxxKS5jYXRjaChmdW5jdGlvbihHKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoRywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgY29t'@;
put 'cHV0ZSBjb250ZXh0LiAiKX0pXTtjYXNlIDU6cmV0dXJuWzIsY2Uuc2VudCgpLnJlc3VsdF19fSl9KX0sVi5wcm90b3R5cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiB2b2lkIDA9PT1YJiYoWD0iZGlyZWN0IiksSyh0aGlzLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXt2YXIgcSxlZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2godGUubGFiZWwpe2Nhc2UgMDppZighQil0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0'@;
put 'TGF1bmNoZXJDb250ZXh0cywiTGF1bmNoZXIgY29udGV4dCAnIi5jb25jYXQoQiwiJyBhbHJlYWR5IGV4aXN0cy4iKSksWzQsdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKFUpXTtjYXNlIDE6aWYodGUuc2VudCgpLmZpbmQoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5uYW1lPT09Qn0pKXRocm93'@;
put 'IG5ldyBFcnJvcigiTGF1bmNoZXIgY29udGV4dCAnIi5jb25jYXQoQiwiJyBhbHJlYWR5IGV4aXN0cy4iKSk7cmV0dXJuIHE9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sVSYmKHEuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFUpKSxlZT17bmFtZTpCLGRlc2Ny'@;
put 'aXB0aW9uOlksbGF1bmNoVHlwZTpYfSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9sYXVuY2hlci9jb250ZXh0cyIpLGVlLFUpLmNhdGNoKGZ1bmN0aW9uKG9lKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkob2UsIkVycm9yIHdoaWxlIGNy'@;
put 'ZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIpfSldO2Nhc2UgMjpyZXR1cm5bMix0ZS5zZW50KCkucmVzdWx0XX19KX0pfSxWLnByb3RvdHlwZS5lZGl0Q29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oQixZLFgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVLHEs'@;
put 'ZWUsdGU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihvZSl7c3dpdGNoKG9lLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShCKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoQix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRpbmcgZGVmYXVsdCBTQVMg'@;
put 'Y29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKEIsWCldO2Nhc2UgMTpyZXR1cm4oVT1vZS5zZW50KCkpP1szLDNdOls0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFkuaWQsWCldO2Nhc2UgMjpVPW9lLnNlbnQo'@;
put 'KSxvZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KFUuaWQpLFgpLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdyBzZSYmNDA0PT09c2Uuc3RhdHVzP25ldyBF'@;
put 'cnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KEIsIicgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci4iKSk6c2V9KV07Y2FzZSA0OnJldHVybiBxPW9lLnNlbnQoKSx0ZT1xLmV0YWcsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dCgiL2NvbXB1dGUvY29udGV4dHMvIi5jb25jYXQoKGVl'@;
put 'PXEucmVzdWx0KS5pZCkseih6KHooe30sZWUpLFkpLHthdHRyaWJ1dGVzOnooeih7fSxlZS5hdHRyaWJ1dGVzKSxZLmF0dHJpYnV0ZXMpfSksWCx7IklmLU1hdGNoIjp0ZX0pXTtjYXNlIDU6cmV0dXJuWzIsb2Uuc2VudCgpXX19KX0pfSxWLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5'@;
put 'TmFtZT1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBYO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZl'@;
put 'clVybCwnL2NvbXB1dGUvY29udGV4dHM/ZmlsdGVyPWVxKG5hbWUsICInKS5jb25jYXQoQiwnIiknKSxZKS5jYXRjaChmdW5jdGlvbihxKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkocSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgbmFtZS4gIil9KV07Y2FzZSAx'@;
put 'OmlmKCEoWD1VLnNlbnQoKS5yZXN1bHQpfHwhWC5pdGVtc3x8IVguaXRlbXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KEIsIicgd2FzIG5vdCBmb3VuZCBhdCAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInLiIpKTtyZXR1cm5bMixYLml0ZW1zWzBd'@;
put 'XX19KX0pfSxWLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQ9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChCKSxZKS5jYXRjaChmdW5jdGlvbihVKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgaWQuICIpfSld'@;
put 'O2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKS5yZXN1bHRdfX0pfSl9LFYucHJvdG90eXBlLmdldEV4ZWN1dGFibGVDb250ZXh0cz1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBYLFUscSxlZSx0ZSxvZSxzZSx1ZSxjZTtyZXR1cm4gSSh0'@;
put 'aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksWT8uYWNjZXNzX3Rva2VuKS5jYXRjaChmdW5jdGlvbihiKXt0'@;
put 'aHJvdygwLEUucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0pXTtjYXNlIDE6WD1HLnNlbnQoKS5yZXN1bHQscT1bXSxlZT0oVT1YLml0ZW1zfHxbXSkubWFwKGZ1bmN0aW9uKGIpe3ZhciBEPVsiJXB1dCAmPXN5c3VzZXJpZDsiXTty'@;
put 'ZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQigidGVzdC0iLmNvbmNhdChiLm5hbWUpLEQsYi5uYW1lLFksbnVsbCwhMSwhMCwhMCkuY2F0Y2goZnVuY3Rpb24oSCl7cmV0dXJuIEh9KX19KSx0ZT1bXSxvZT0wLHNlPWVlLEcubGFiZWw9MjtjYXNlIDI6cmV0dXJuIG9lPHNlLmxlbmd0aD8oY2U9'@;
put 'KHVlPXRlKS5wdXNoLFs0LCgwLHNlW29lXSkoKV0pOlszLDVdO2Nhc2UgMzpjZS5hcHBseSh1ZSxbRy5zZW50KCldKSxHLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBvZSsrLFszLDJdO2Nhc2UgNTpyZXR1cm4gdGUuZm9yRWFjaChmdW5jdGlvbihiLEQpe2lmKGImJmIubG9nKXRyeXt2YXIgTj0i'@;
put 'IixnPWIubG9nLnNwbGl0KCJcbiIpLmZpbmQoZnVuY3Rpb24oQyl7cmV0dXJuIEMuc3RhcnRzV2l0aCgiU1lTVVNFUklEPSIpfSk7ZyYmKE49Zy5yZXBsYWNlKCJTWVNVU0VSSUQ9IiwiIikscS5wdXNoKHtjcmVhdGVkQnk6VVtEXS5jcmVhdGVkQnksaWQ6VVtEXS5pZCxuYW1lOlVbRF0ubmFt'@;
put 'ZSx2ZXJzaW9uOlVbRF0udmVyc2lvbixhdHRyaWJ1dGVzOntzeXNVc2VySWQ6Tn19KSl9Y2F0Y2goQyl7dGhyb3cgQ319KSxbMixxXX19KX0pfSxWLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3ZhciBYLFU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihxKXtzd2l0Y2gocS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0'@;
put 'IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApLFg9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sWSYmKFguQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFkpKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKEIsWSldO2Nhc2Ug'@;
put 'MTpyZXR1cm4gVT1xLnNlbnQoKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KFUuaWQpLFkpXTtjYXNlIDI6cmV0dXJuWzIscS5zZW50KCldfX0pfSl9LFYucHJvdG90eXBlLnZhbGlkYXRl'@;
put 'Q29udGV4dE5hbWU9ZnVuY3Rpb24oQil7aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIil9LFYucHJvdG90eXBlLmlzRGVmYXVsdENvbnRleHQ9ZnVuY3Rpb24oQixZLFgsVSl7aWYodm9pZCAwPT09WSYmKFk9dGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRl'@;
put 'eHRzKSx2b2lkIDA9PT1YJiYoWD0iIiksdm9pZCAwPT09VSYmKFU9ITEpLFkuaW5jbHVkZXMoQikpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdChYKS5jb25jYXQoVT8iXG5EZWZhdWx0IGNvbnRleHRzOiIrWS5tYXAoZnVuY3Rpb24ocSxlZSl7cmV0dXJuIlxuIi5jb25jYXQoZWUrMSwiLiAi'@;
put 'KS5jb25jYXQocSl9KToiIikpfSxWfSgpO08uQ29udGV4dE1hbmFnZXI9an0sODMwNjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihYLFUscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24odGUs'@;
put 'b2Upe2Z1bmN0aW9uIHNlKGNlKXt0cnl7dWUoZWUubmV4dChjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiBoZShjZSl7dHJ5e3VlKGVlLnRocm93KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIHVlKGNlKXt2YXIgRztjZS5kb25lP3RlKGNlLnZhbHVlKTooRz1jZS52YWx1ZSxH'@;
put 'IGluc3RhbmNlb2YgcT9HOm5ldyBxKGZ1bmN0aW9uKGIpe2IoRyl9KSkudGhlbihzZSxoZSl9dWUoKGVlPWVlLmFwcGx5KFgsVXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWCxVKXt2YXIgcSxlZSx0ZSxvZSxzZT17bGFiZWw6MCxzZW50OmZ1'@;
put 'bmN0aW9uKCl7aWYoMSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm4gdGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gb2U9e25leHQ6aGUoMCksdGhyb3c6aGUoMSkscmV0dXJuOmhlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYob2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzfSksb2U7ZnVuY3Rpb24gaGUodWUpe3JldHVybiBmdW5jdGlvbihjZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe2lmKHEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7c2U7KXRyeXtpZihxPTEsZWUmJih0ZT0y'@;
put 'JkdbMF0/ZWUucmV0dXJuOkdbMF0/ZWUudGhyb3d8fCgodGU9ZWUucmV0dXJuKSYmdGUuY2FsbChlZSksMCk6ZWUubmV4dCkmJiEodGU9dGUuY2FsbChlZSxHWzFdKSkuZG9uZSlyZXR1cm4gdGU7c3dpdGNoKGVlPTAsdGUmJihHPVsyJkdbMF0sdGUudmFsdWVdKSxHWzBdKXtjYXNlIDA6Y2Fz'@;
put 'ZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBzZS5sYWJlbCsrLHt2YWx1ZTpHWzFdLGRvbmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLGVlPUdbMV0sRz1bMF07Y29udGludWU7Y2FzZSA3Okc9c2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCh0ZT0o'@;
put 'dGU9c2UudHJ5cykubGVuZ3RoPjAmJnRlW3RlLmxlbmd0aC0xXSl8fDYhPT1HWzBdJiYyIT09R1swXSkpe3NlPTA7Y29udGludWV9aWYoMz09PUdbMF0mJighdGV8fEdbMV0+dGVbMF0mJkdbMV08dGVbM10pKXtzZS5sYWJlbD1HWzFdO2JyZWFrfWlmKDY9PT1HWzBdJiZzZS5sYWJlbDx0ZVsx'@;
put 'XSl7c2UubGFiZWw9dGVbMV0sdGU9RzticmVha31pZih0ZSYmc2UubGFiZWw8dGVbMl0pe3NlLmxhYmVsPXRlWzJdLHNlLm9wcy5wdXNoKEcpO2JyZWFrfXRlWzJdJiZzZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZX1HPVUuY2FsbChYLHNlKX1jYXRjaChiKXtHPVs2LGJdLGVl'@;
put 'PTB9ZmluYWxseXtxPXRlPTB9aWYoNSZHWzBdKXRocm93IEdbMV07cmV0dXJue3ZhbHVlOkdbMF0/R1sxXTp2b2lkIDAsZG9uZTohMH19KFt1ZSxjZV0pfX19LEk9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihYLFUscSl7aWYocXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9y'@;
put 'KHZhciBlZSx0ZT0wLG9lPVUubGVuZ3RoO3RlPG9lO3RlKyspIWVlJiZ0ZSBpbiBVfHwoZWV8fChlZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChVLDAsdGUpKSxlZVt0ZV09VVt0ZV0pO3JldHVybiBYLmNvbmNhdChlZXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVSkpfTtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVM5QXBpQ2xpZW50PXZvaWQgMDt2YXIgaz1SKDc3NTcpLEU9Uig2MjMwKSxqPVIoNzk1KSxWPVIoNTkyOCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIFgoVSxxLGVlKXt0aGlzLnNlcnZlclVybD1VLHRoaXMu'@;
put 'am9ic1BhdGg9cSxVJiYoMCxWLmlzVXJsKShVKSx0aGlzLnJlcXVlc3RDbGllbnQ9bmV3IGouU2FzOVJlcXVlc3RDbGllbnQoVSxlZSl9cmV0dXJuIFgucHJvdG90eXBlLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fSxYLnByb3RvdHlwZS5z'@;
put 'ZXRDb25maWc9ZnVuY3Rpb24oVSl7VSYmKHRoaXMuc2VydmVyVXJsPVUpfSxYLnByb3RvdHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKFUscSxlZSl7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lLHNlLGhlLHVlLGNlLEc7cmV0dXJuIEsodGhpcyxm'@;
put 'dW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5sb2dpbihxLGVlLHRoaXMuam9ic1BhdGgpXTtjYXNlIDE6cmV0dXJuIGIuc2VudCgpLHRlPVsiZGF0YSBfbnVsbF87IiwiZmlsZSBfd2Vib3V0OyIsInB1dCAnRXhlY3V0ZWQgc2Fz'@;
put 'anMgcnVuJzsiLCJydW47Il0sb2U9WShJKEkoW10sVSwhMCksdGUsITApLmpvaW4oIlxuIikpLHNlPSIvVXNlciBGb2xkZXJzLyIuY29uY2F0KHEsIi9NeSBGb2xkZXIvc2FzanMvcnVubmVyIiksaGU9Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrb2UuZ2V0Qm91bmRhcnkoKSx1'@;
put 'ZT1vZS5nZXRMZW5ndGhTeW5jKCksY2U9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjpoZSwiQ29udGVudC1MZW5ndGgiOnVlLENvbm5lY3Rpb246ImtlZXAtYWxpdmUifSxHPSIiLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNh'@;
put 'dCgiX3Byb2dyYW09IitzZSsiJl9kZWJ1Zz1sb2ciKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdChHLG9lLHZvaWQgMCxoZSxjZSldO2Nhc2UgMjpyZXR1cm5bMixiLnNlbnQoKS5yZXN1bHRdfX0pfSl9LFh9KCk7Ty5TQVM5QXBpQ2xpZW50PUI7dmFyIFk9ZnVuY3Rpb24oWCl7dmFyIFU9'@;
put 'bmV3IEUscT0ic2FzanMtZXhlY3V0ZS1zYXM5LSIuY29uY2F0KCgwLGsuZ2VuZXJhdGVUaW1lc3RhbXApKCIiKSwiLnNhcyIpO3JldHVybiBVLmFwcGVuZChxLFgse2ZpbGVuYW1lOnEsY29udGVudFR5cGU6InRleHQvcGxhaW4ifSksVX19LDk4MjE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihjZSxHLGIsRCl7cmV0dXJuIG5ldyhifHwoYj1Qcm9taXNlKSkoZnVuY3Rpb24oSCxOKXtmdW5jdGlvbiBnKHYpe3RyeXtTKEQubmV4dCh2KSl9Y2F0Y2gocCl7TihwKX19ZnVuY3Rp'@;
put 'b24gQyh2KXt0cnl7UyhELnRocm93KHYpKX1jYXRjaChwKXtOKHApfX1mdW5jdGlvbiBTKHYpe3ZhciBwO3YuZG9uZT9IKHYudmFsdWUpOihwPXYudmFsdWUscCBpbnN0YW5jZW9mIGI/cDpuZXcgYihmdW5jdGlvbih3KXt3KHApfSkpLnRoZW4oZyxDKX1TKChEPUQuYXBwbHkoY2UsR3x8W10p'@;
put 'KS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oY2UsRyl7dmFyIGIsRCxILE4sZz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZIWzBdKXRocm93IEhbMV07cmV0dXJuIEhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gTj17bmV4dDpDKDApLHRo'@;
put 'cm93OkMoMSkscmV0dXJuOkMoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihOW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLE47ZnVuY3Rpb24gQyhTKXtyZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIGZ1bmN0aW9uKHApe2lmKGIpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZzspdHJ5e2lmKGI9MSxEJiYoSD0yJnBbMF0/RC5yZXR1cm46cFswXT9ELnRocm93fHwoKEg9RC5yZXR1cm4pJiZILmNhbGwoRCksMCk6RC5uZXh0KSYmIShIPUguY2FsbChELHBbMV0pKS5kb25lKXJldHVy'@;
put 'biBIO3N3aXRjaChEPTAsSCYmKHA9WzImcFswXSxILnZhbHVlXSkscFswXSl7Y2FzZSAwOmNhc2UgMTpIPXA7YnJlYWs7Y2FzZSA0OnJldHVybiBnLmxhYmVsKysse3ZhbHVlOnBbMV0sZG9uZTohMX07Y2FzZSA1OmcubGFiZWwrKyxEPXBbMV0scD1bMF07Y29udGludWU7Y2FzZSA3OnA9Zy5v'@;
put 'cHMucG9wKCksZy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoSD0oSD1nLnRyeXMpLmxlbmd0aD4wJiZIW0gubGVuZ3RoLTFdKXx8NiE9PXBbMF0mJjIhPT1wWzBdKSl7Zz0wO2NvbnRpbnVlfWlmKDM9PT1wWzBdJiYoIUh8fHBbMV0+SFswXSYmcFsxXTxIWzNdKSl7Zy5sYWJl'@;
put 'bD1wWzFdO2JyZWFrfWlmKDY9PT1wWzBdJiZnLmxhYmVsPEhbMV0pe2cubGFiZWw9SFsxXSxIPXA7YnJlYWt9aWYoSCYmZy5sYWJlbDxIWzJdKXtnLmxhYmVsPUhbMl0sZy5vcHMucHVzaChwKTticmVha31IWzJdJiZnLm9wcy5wb3AoKSxnLnRyeXMucG9wKCk7Y29udGludWV9cD1HLmNhbGwo'@;
put 'Y2UsZyl9Y2F0Y2godyl7cD1bNix3XSxEPTB9ZmluYWxseXtiPUg9MH1pZig1JnBbMF0pdGhyb3cgcFsxXTtyZXR1cm57dmFsdWU6cFswXT9wWzFdOnZvaWQgMCxkb25lOiEwfX0oW1Msdl0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNB'@;
put 'U1ZpeWFBcGlDbGllbnQ9dm9pZCAwO3ZhciBFPVIoNTkyOCksaj1SKDYyMzApLFY9UigxMzk1KSxCPVIoNjkwMyksWT1SKDY3MiksWD1SKDkwOTcpLFU9Uig5Nzc4KSxxPVIoMTM0MyksZWU9Uig3MDQpLHRlPVIoNjQ5Niksb2U9UigxNjIyKSxzZT1SKDM1NjkpLGhlPVIoMzY2KSx1ZT1mdW5j'@;
put 'dGlvbigpe2Z1bmN0aW9uIGNlKEcsYixELEgpe3RoaXMuc2VydmVyVXJsPUcsdGhpcy5yb290Rm9sZGVyTmFtZT1iLHRoaXMuY29udGV4dE5hbWU9RCx0aGlzLnJlcXVlc3RDbGllbnQ9SCx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnNlc3Npb25NYW5hZ2VyPW5ldyBCLlNlc3Npb25NYW5hZ2VyKHRo'@;
put 'aXMuc2VydmVyVXJsLHRoaXMuY29udGV4dE5hbWUsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmNvbnRleHRNYW5hZ2VyPW5ldyBZLkNvbnRleHRNYW5hZ2VyKHRoaXMuc2VydmVyVXJsLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5mb2xkZXJNYXA9bmV3IE1hcCxHJiYoMCxFLmlzVXJsKShH'@;
put 'KX1yZXR1cm4gY2UucHJvdG90eXBlLmFwcGVuZFJlcXVlc3Q9ZnVuY3Rpb24oRyxiLEQpe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KEcsYixEKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLnByb3RvdHlwZSwiZGVidWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f'@;
put 'ZGVidWd9LHNldDpmdW5jdGlvbihHKXt0aGlzLl9kZWJ1Zz1HLHRoaXMuc2Vzc2lvbk1hbmFnZXImJih0aGlzLnNlc3Npb25NYW5hZ2VyLmRlYnVnPUcpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGNlLnByb3RvdHlwZS5nZXRKb2JzSW5Gb2xkZXI9ZnVuY3Rpb24oRyl7cmV0'@;
put 'dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiBiPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0'@;
put 'KEcpOkcsdGhpcy5mb2xkZXJNYXAuZ2V0KGIpP1syLHRoaXMuZm9sZGVyTWFwLmdldChiKV06WzQsdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChiKV07Y2FzZSAxOnJldHVybiBELnNlbnQoKSxbMix0aGlzLmZvbGRlck1hcC5nZXQoYildfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRDb25maWc9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHJvb3RGb2xkZXJOYW1lOnRoaXMucm9vdEZvbGRlck5hbWV9fSxjZS5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKEcsYil7RyYmKHRoaXMuc2VydmVyVXJsPUcpLGImJih0aGlzLnJvb3RGb2xkZXJOYW1lPWIpfSxj'@;
put 'ZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENv'@;
put 'bXB1dGVDb250ZXh0cyhHKV07Y2FzZSAxOnJldHVyblsyLGIuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9LGNlLnByb3RvdHlw'@;
put 'ZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldExhdW5jaGVyQ29u'@;
put 'dGV4dHMoRyldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEV4ZWN1dGFibGVDb250ZXh0cz1mdW5jdGlvbihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRj'@;
put 'aChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIGI9dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyksWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRFeGVjdXRhYmxlQ29udGV4dHMoYixHKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlU2Vzc2lv'@;
put 'bj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEgsTjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYiYmKEQu'@;
put 'QXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KGIpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIsYildO2Nhc2UgMTppZihIPWcuc2VudCgpLnJlc3VsdCwhKE49SC5pdGVtcyYmSC5pdGVtcy5sZW5ndGg/SC5pdGVtcy5maW5k'@;
put 'KGZ1bmN0aW9uKEMpe3JldHVybiBDLm5hbWU9PT1HfSk6bnVsbCkpdGhyb3cgbmV3IEVycm9yKCJFeGVjdXRpb24gY29udGV4dCAiLmNvbmNhdChHLCIgbm90IGZvdW5kLiIpKTtyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2NvbXB1dGUvY29udGV4dHMvIi5jb25jYXQoTi5p'@;
put 'ZCwiL3Nlc3Npb25zIikse30sYildO2Nhc2UgMjpyZXR1cm5bMixnLnNlbnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihHLGIsRCxILE4sZyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGso'@;
put 'dGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuY3JlYXRlQ29tcHV0ZUNvbnRleHQoRyxiLEQsSCxOLGcpXTtjYXNlIDE6cmV0dXJuWzIsQy5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVMYXVuY2hlckNv'@;
put 'bnRleHQ9ZnVuY3Rpb24oRyxiLEQsSCl7cmV0dXJuIHZvaWQgMD09PUQmJihEPSJkaXJlY3QiKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2Vy'@;
put 'LmNyZWF0ZUxhdW5jaGVyQ29udGV4dChHLGIsRCxIKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlz'@;
put 'LGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5lZGl0Q29tcHV0ZUNvbnRleHQoRyxiLEQpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlv'@;
put 'bihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmRlbGV0ZUNvbXB1dGVDb250ZXh0KEcsYildO2Nhc2UgMTpyZXR1cm5b'@;
put 'MixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24oRyxiLEQsSCxOLGcsQyxTLHYscCx3KXtyZXR1cm4gdm9pZCAwPT09TiYmKE49bnVsbCksdm9pZCAwPT09ZyYmKGc9ITEpLHZvaWQgMD09PUMmJihDPSExKSx2b2lkIDA9PT1TJiYoUz0hMCksdm9p'@;
put 'ZCAwPT09cCYmKHA9ITEpLEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihKKXtyZXR1cm5bMiwoMCxvZS5leGVjdXRlT25Db21wdXRlQXBpKSh0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXNzaW9uTWFuYWdlcix0aGlzLnJvb3RGb2xkZXJO'@;
put 'YW1lLEcsYixELEgsTixnLEMsUyx2LHAsdyldfSl9KX0sY2UucHJvdG90eXBlLmdldEZvbGRlcj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5b'@;
put 'NCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9Ii5jb25jYXQoRyksYikudGhlbihmdW5jdGlvbihIKXtyZXR1cm4gSC5yZXN1bHR9KV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5j'@;
put 'dGlvbihHLGIsRCxILE4pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOmlmKCFEJiYhSCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQg'@;
put 'Zm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiBIfHwhRD9bMywyXTpbNCx0aGlzLmdldEZvbGRlclVyaShELE4pXTtjYXNlIDE6SD1TLnNlbnQoKSxTLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBnPXtBY2NlcHQ6ImFwcGxpY2F0aW9uL3ZuZC5zYXMuZmlsZStqc29uIiwiQ29udGVudC1EaXNw'@;
put 'b3NpdGlvbiI6J2ZpbGVuYW1lPSInLmNvbmNhdChHLCciOycpfSwoQz1uZXcgaikuYXBwZW5kKCJmaWxlIixiLEcpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIvZmlsZXMvZmlsZXM/cGFyZW50Rm9sZGVyVXJpPSIuY29uY2F0KEgsIiZ0eXBlRGVmTmFtZT1maWxlI3Jhd1VwbG9hZCIp'@;
put 'LEMsTiwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitDLl9ib3VuZGFyeSxnKV07Y2FzZSAzOnJldHVyblsyLFMuc2VudCgpLnJlc3VsdF19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUZvbGRlcj1mdW5jdGlvbihHLGIsRCxILE4pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQg'@;
put 'MCxmdW5jdGlvbigpe3ZhciBnLEMsUyx2LHc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihKKXtzd2l0Y2goSi5sYWJlbCl7Y2FzZSAwOmlmKGc9ei5sb2dnZXJ8fEssIWImJiFEKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7'@;
put 'cmV0dXJuIER8fCFiP1szLDZdOls0LHRoaXMuZ2V0Rm9sZGVyVXJpKGIsSCldO2Nhc2UgMTppZihEPUouc2VudCgpKXJldHVyblszLDNdO2lmKGcuaW5mbygiUGFyZW50IGZvbGRlciBhdCBwYXRoICciLmNvbmNhdChiLCInIGlzIG5vdCBwcmVzZW50LiIpKSxDPWIuc3Vic3RyaW5nKDAsYi5s'@;
put 'YXN0SW5kZXhPZigiLyIpKSxTPSIiLmNvbmNhdChiLnNwbGl0KCIvIikucG9wKCkpLCIiPT09Qyl0aHJvdyBuZXcgVi5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcihiLHRoaXMuc2VydmVyVXJsLEgpO3JldHVybiBnLmluZm8oIkNyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nIi5jb25jYXQoUywi'@;
put 'JyBpbiAnIikuY29uY2F0KEMsIiciKSksWzQsdGhpcy5jcmVhdGVGb2xkZXIoUyxDLHZvaWQgMCxIKV07Y2FzZSAyOnJldHVybiB2PUouc2VudCgpLGcuaW5mbygiUGFyZW50IGZvbGRlciAnIi5jb25jYXQoUywiJyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC4iKSksRD0iL2ZvbGRl'@;
put 'cnMvZm9sZGVycy8iLmNvbmNhdCh2LmlkKSxbMyw2XTtjYXNlIDM6cmV0dXJuIE4/WzQsdGhpcy5nZXRGb2xkZXJVcmkoYisiLyIrRyxIKV06WzMsNl07Y2FzZSA0OnJldHVybiBKLnNlbnQoKT9bNCx0aGlzLmRlbGV0ZUZvbGRlcihiKyIvIitHLEgpXTpbMyw2XTtjYXNlIDU6Si5zZW50KCks'@;
put 'Si5sYWJlbD02O2Nhc2UgNjpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2ZvbGRlcnMvZm9sZGVycz9wYXJlbnRGb2xkZXJVcmk9Ii5jb25jYXQoRCkse25hbWU6Ryx0eXBlOiJmb2xkZXIifSxIKS5jYXRjaChmdW5jdGlvbihuZSl7dmFyIGRlPW5lLm1lc3NhZ2UsZmU9bmUu'@;
put 'cmVzcG9uc2U7aWYoZGUmJmZlJiZmZS5kYXRhJiZmZS5kYXRhLm1lc3NhZ2Upe3ZhciB4ZT1mZS5zdGF0dXMsTGU9W2RlLGZlLmRhdGEubWVzc2FnZV0ubWFwKGZ1bmN0aW9uKEZlKXtyZXR1cm4vXC4kLy50ZXN0KEZlKT9GZToiIi5jb25jYXQoRmUsIi4iKX0pO3Rocm93IE58fDQwOSE9PXhl'@;
put 'fHxMZS5wdXNoKCdUbyBvdmVycmlkZSwgcGxlYXNlIHNldCAiaXNGb3JjZWQiIHRvICJ0cnVlIi4nKSxMZS5qb2luKCIgIil9dGhyb3cgbmV9KV07Y2FzZSA3OnJldHVybiB3PUouc2VudCgpLnJlc3VsdCxbNCx0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKCIiLmNvbmNhdChiLCIvIikuY29uY2F0'@;
put 'KEcpLEgpXTtjYXNlIDg6cmV0dXJuIEouc2VudCgpLFsyLHddfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVKb2JEZWZpbml0aW9uPWZ1bmN0aW9uKEcsYixELEgsTil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihnKXtzd2l0'@;
put 'Y2goZy5sYWJlbCl7Y2FzZSAwOmlmKCFEJiYhSCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiBIfHwhRD9bMywyXTpbNCx0aGlzLmdldEZvbGRlclVyaShELE4pXTtjYXNlIDE6SD1nLnNlbnQoKSxnLmxh'@;
put 'YmVsPTI7Y2FzZSAyOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2pvYkRlZmluaXRpb25zL2RlZmluaXRpb25zP3BhcmVudEZvbGRlclVyaT0iKS5jb25jYXQoSCkse25hbWU6RyxwYXJhbWV0ZXJzOlt7bmFtZToiX2FkZGplc2Jl'@;
put 'Z2luZW5kbWFjcm9zIix0eXBlOiJDSEFSQUNURVIiLGRlZmF1bHRWYWx1ZToiZmFsc2UifV0sdHlwZToiQ29tcHV0ZSIsY29kZTpifSxOKV07Y2FzZSAzOnJldHVyblsyLGcuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0QXV0aENvZGU9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRD10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSIpLmNvbmNh'@;
put 'dChHLCImcmVzcG9uc2VfdHlwZT1jb2RlIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChiLHZvaWQgMCwidGV4dC9wbGFpbiIpLnRoZW4oZnVuY3Rpb24oTil7cmV0dXJuIE4ucmVzdWx0fSkudGhlbihmdW5jdGlvbihOKXtyZXR1cm4gSShELHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2'@;
put 'YXIgZyxDLFMsdjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHApe3N3aXRjaChwLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGc9IiIsKDAsWC5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoTik/WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShOKV06WzMsMl07Y2FzZSAxOnJldHVybiBDPXAu'@;
put 'c2VudCgpLFM9Qy5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSwodj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPVMsWzIsZz12LnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0XTtjYXNlIDI6cmV0dXJuIFM9Ti5zcGxp'@;
put 'dCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSwodj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPVMsdiYmKGc9di5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksWzIsZ119fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IG51bGx9KV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW49ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuWzIsKDAsc2Uu'@;
put 'Z2V0QWNjZXNzVG9rZW5Gb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQsRyxiLEQpXX0pfSl9LGNlLnByb3RvdHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3Jl'@;
put 'dHVyblsyLCgwLGhlLnJlZnJlc2hUb2tlbnNGb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQsRyxiLEQpXX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVDbGllbnQ9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxIO3JldHVybiBrKHRo'@;
put 'aXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRD10aGlzLnNlcnZlclVybCsiL29hdXRoL2NsaWVudHMvIi5jb25jYXQoRyksSD17fSxiJiYoSC5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoYikpLFs0LHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUo'@;
put 'RCxiKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpLnJlc3VsdF19fSl9KX0sY2UucHJvdG90eXBlLmV4ZWN1dGVDb21wdXRlSm9iPWZ1bmN0aW9uKEcsYixELEgsTixnLEMsUyx2LHApe3JldHVybiB2b2lkIDA9PT1nJiYoZz0hMCksdm9pZCAwPT09QyYmKEM9ITEpLHZvaWQgMD09PXYmJih2'@;
put 'PSExKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB3LEosbmUsZGUsZmUseGUsTGUsRmUsT2UsamUsV2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihLZSl7c3dpdGNoKEtlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHc9KE58fHt9KS5hY2Nlc3NfdG9rZW4sTj9bNCwoMCxlZS5n'@;
put 'ZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxOKV06WzMsMl07Y2FzZSAxOnc9S2Uuc2VudCgpLmFjY2Vzc190b2tlbixLZS5sYWJlbD0yO2Nhc2UgMjppZigoMCxFLmlzUmVsYXRpdmVQYXRoKShHKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBw'@;
put 'YXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lIik7cmV0dXJuIEo9Ry5zcGxpdCgiLyIpLG5lPUoucG9wKCksZGU9Si5qb2luKCIvIiksZmU9KDAsRS5pc1JlbGF0aXZlUGF0aCkoRyk/IiIuY29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUs'@;
put 'Ii8iKS5jb25jYXQoZGUpOmRlLFs0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoZmUsdykuY2F0Y2goZnVuY3Rpb24oWWUpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKShZZSwiRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmb2xkZXIgbWFwLiAiKX0pXTtjYXNlIDM6aWYoS2Uuc2VudCgpLCEoeGU9'@;
put 'dGhpcy5mb2xkZXJNYXAuZ2V0KGZlKSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZm9sZGVyICciLmNvbmNhdChmZSwiJyB3YXMgbm90IGZvdW5kIG9uICciKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIiciKSk7aWYoIShMZT14ZT8uZmluZChmdW5jdGlvbihZZSl7cmV0dXJuIFllLm5hbWU9PT1u'@;
put 'ZX0pKSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2lmKEZlPUxlPy5jb2RlKXJldHVyblszLDVdO2lmKCEoT2U9TGU/LmxpbmtzLmZpbmQoZnVuY3Rpb24oWWUpe3JldHVybiJnZXRSZXNvdXJjZSI9PT1ZZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJVUkkgb2Ygam9i'@;
put 'IGRlZmluaXRpb24gd2FzIG5vdCBmb3VuZC4iKTtyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KE9lLmhyZWYpLHcpLmNhdGNoKGZ1bmN0aW9uKFllKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoWWUsIkVycm9yIHdoaWxl'@;
put 'IGdldHRpbmcgam9iIGRlZmluaXRpb24uICIpfSldO2Nhc2UgNDpqZT1LZS5zZW50KCkucmVzdWx0LExlLmNvZGU9RmU9amUuY29kZSxLZS5sYWJlbD01O2Nhc2UgNTpyZXR1cm4gRmV8fChGZT0iIiksV2U9RmUucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJcbiIpLFs0LHRoaXMuZXhl'@;
put 'Y3V0ZVNjcmlwdChHLFdlLGIsTixILEQsQyxnLFMsdixwKV07Y2FzZSA2OnJldHVyblsyLEtlLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24oRyxiLEQsSCxOKXt2YXIgZyxDLFM7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFy'@;
put 'IHYscCx3LEosbmUsZGUsZmUseGUsTGUsRmUsT2UsamUsV2UsS2UsWWUsUWUsbHQsUGUsYmUsQWUsVGU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihxZSl7c3dpdGNoKHFlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHY9KE58fHt9KS5hY2Nlc3NfdG9rZW4sTj9bNCwoMCxlZS5nZXRUb2tlbnMpKHRo'@;
put 'aXMucmVxdWVzdENsaWVudCxOKV06WzMsMl07Y2FzZSAxOnY9cWUuc2VudCgpLmFjY2Vzc190b2tlbixxZS5sYWJlbD0yO2Nhc2UgMjppZigoMCxFLmlzUmVsYXRpdmVQYXRoKShHKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3Qg'@;
put 'YmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lLiIpO3JldHVybiBwPUcuc3BsaXQoIi8iKSx3PXAucG9wKCksSj1wLmpvaW4oIi8iKSxuZT0oMCxFLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChK'@;
put 'KTpKLFs0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAobmUsdildO2Nhc2UgMzppZihxZS5zZW50KCksIShkZT10aGlzLmZvbGRlck1hcC5nZXQobmUpKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBmb2xkZXIgJyIuY29uY2F0KG5lLCInIHdhcyBub3QgZm91bmQgb24gJyIpLmNvbmNhdCh0aGlzLnNl'@;
put 'cnZlclVybCwiJy4iKSk7cmV0dXJuIGZlPWRlPy5maW5kKGZ1bmN0aW9uKFhlKXtyZXR1cm4gWGUubmFtZT09PXd9KSx4ZT1bXSxIJiZPYmplY3Qua2V5cyhIKS5sZW5ndGg/WzQsdGhpcy51cGxvYWRUYWJsZXMoSCx2KV06WzMsNV07Y2FzZSA0OnhlPXFlLnNlbnQoKSxxZS5sYWJlbD01O2Nh'@;
put 'c2UgNTppZighZmUpdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtyZXR1cm4gTGU9bnVsbD09PShnPWZlPy5saW5rcy5maW5kKGZ1bmN0aW9uKFhlKXtyZXR1cm4iZ2V0UmVzb3VyY2UiPT09WGUucmVsfSkpfHx2b2lkIDA9PT1nP3ZvaWQgMDpnLmhyZWYsWzQsdGhpcy5y'@;
put 'ZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChMZSksdildO2Nhc2UgNjpyZXR1cm4gRmU9cWUuc2VudCgpLnJlc3VsdCxPZT17X2NvbnRleHROYW1lOmIsX3Byb2dyYW06IiIuY29uY2F0KG5lLCIvIikuY29uY2F0KHcpLF93ZWJpbl9maWxlX2NvdW50'@;
put 'OnhlLmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEwLF9PTUlUSlNPTkxPRzohMCxfT01JVFNFU1NJT05SRVNVTFRTOiEwLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfSxEJiYoT2UuX09NSVRURVhUTE9HPSJmYWxzZSIsT2UuX09NSVRTRVNTSU9OUkVTVUxUUz0iZmFsc2Ui'@;
put 'LE9lLl9ERUJVRz0xMzEpLHhlLmZvckVhY2goZnVuY3Rpb24oWGUsVWUpe09lWyJfd2ViaW5fZmlsZXVyaSIuY29uY2F0KFVlKzEpXT0iL2ZpbGVzL2ZpbGVzLyIuY29uY2F0KFhlLmZpbGUuaWQpLE9lWyJfd2ViaW5fbmFtZSIuY29uY2F0KFVlKzEpXT1YZS50YWJsZU5hbWV9KSxqZT17bmFt'@;
put 'ZToiZXhlYy0iLmNvbmNhdCh3KSxkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjpGZSxhcmd1bWVudHM6T2V9LFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2pvYkV4ZWN1dGlvbi9qb2JzP19hY3Rpb249d2Fp'@;
put 'dCIpLGplLHYpXTtjYXNlIDc6cmV0dXJuIFdlPXFlLnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5wb2xsSm9iU3RhdGUoV2UsTikuY2F0Y2goZnVuY3Rpb24oWGUpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKShYZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pXTtjYXNlIDg6'@;
put 'cmV0dXJuIEtlPXFlLnNlbnQoKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2pvYkV4ZWN1dGlvbi9qb2JzLyIpLmNvbmNhdChXZS5pZCksdildO2Nhc2UgOTpyZXR1cm4gWWU9cWUuc2VudCgpLnJlc3VsdCxQZT1ZZS5yZXN1bHRzWyJfd2Vi'@;
put 'b3V0Lmpzb24iXSxiZT1ZZS5saW5rcy5maW5kKGZ1bmN0aW9uKFhlKXtyZXR1cm4ibG9nIj09PVhlLnJlbH0pLFBlP1s0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoUGUsIi9jb250ZW50IiksdiwidGV4dC9wbGFpbiIpXTpbMywxMV07'@;
put 'Y2FzZSAxMDpRZT1xZS5zZW50KCkscWUubGFiZWw9MTE7Y2FzZSAxMTpyZXR1cm4gRCYmYmU/WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChiZS5ocmVmLCIvY29udGVudCIpLHYpLnRoZW4oZnVuY3Rpb24oWGUpe3JldHVybiBYZS5y'@;
put 'ZXN1bHQuaXRlbXMubWFwKGZ1bmN0aW9uKFVlKXtyZXR1cm4gVWUubGluZX0pLmpvaW4oIlxuIil9KV06WzMsMTNdO2Nhc2UgMTI6bHQ9cWUuc2VudCgpLHFlLmxhYmVsPTEzO2Nhc2UgMTM6aWYoImZhaWxlZCI9PT1LZSl0aHJvdyBuZXcgVi5Kb2JFeGVjdXRpb25FcnJvcihudWxsPT09KEM9'@;
put 'WWUuZXJyb3IpfHx2b2lkIDA9PT1DP3ZvaWQgMDpDLmVycm9yQ29kZSxudWxsPT09KFM9WWUuZXJyb3IpfHx2b2lkIDA9PT1TP3ZvaWQgMDpTLm1lc3NhZ2UsbHQpO3JldHVybiBBZT17cmVzdWx0OlFlPy5yZXN1bHQsbG9nOmx0fSwoVGU9WWUuZXJyb3IpJiYoQWUuZXJyb3I9VGUpLFsyLEFl'@;
put 'XX19KX0pfSxjZS5wcm90b3R5cGUucG9wdWxhdGVGb2xkZXJNYXA9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxOLGc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOnJldHVybiBEPSgwLEUu'@;
put 'aXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0KEcpOkcsdGhpcy5mb2xkZXJNYXAuZ2V0KEQpP1syXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCgiL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIrRCksYiku'@;
put 'Y2F0Y2goZnVuY3Rpb24odil7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHYsIkVycm9yIHdoaWxlIGdldHRpbmcgZm9sZGVyLiAiKX0pXTtjYXNlIDE6aWYoIShOPVMuc2VudCgpLnJlc3VsdCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGF0aCAiLmNvbmNhdChELCIgZG9lcyBub3QgZXhpc3Qg'@;
put 'b24gIikuY29uY2F0KHRoaXMuc2VydmVyVXJsKSk7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdChOLmlkLCIvbWVtYmVycz9saW1pdD0iKS5jb25jYXQoTi5tZW1iZXJDb3VudDw1MDA/NTAwOk4ubWVtYmVyQ291bnQpLGIpLmNhdGNo'@;
put 'KGZ1bmN0aW9uKHYpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh2LCJFcnJvciB3aGlsZSBnZXR0aW5nIG1lbWJlcnMuICIpfSldO2Nhc2UgMjpyZXR1cm4gZz1TLnNlbnQoKS5yZXN1bHQsdGhpcy5mb2xkZXJNYXAuc2V0KEQsZy5pdGVtcyksWzJdfX0pfSl9LGNlLnByb3RvdHlwZS5wb2xs'@;
put 'Sm9iU3RhdGU9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuWzIsKDAscS5wb2xsSm9iU3RhdGUpKHRoaXMucmVxdWVzdENsaWVudCxHLHRoaXMuZGVidWcsYixEKV19KX0pfSxjZS5w'@;
put 'cm90b3R5cGUudXBsb2FkVGFibGVzPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMiwoMCx0ZS51cGxvYWRUYWJsZXMpKHRoaXMucmVxdWVzdENsaWVudCxHLGIpXX0pfSl9LGNlLnBy'@;
put 'b3RvdHlwZS5nZXRGb2xkZXJEZXRhaWxzPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsSDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ9KDAsRS5pc1VyaSkoRyk/RzoiL2Zv'@;
put 'bGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIuY29uY2F0KEcpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoRCksYikuY2F0Y2goZnVuY3Rpb24oZyl7aWYoZyBpbnN0YW5jZW9mIFYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBnO3Jl'@;
put 'dHVybntyZXN1bHQ6bnVsbH19KV07Y2FzZSAxOnJldHVybihIPU4uc2VudCgpLnJlc3VsdCk/WzIsSF06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Rm9sZGVyVXJpPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQ7cmV0'@;
put 'dXJuIGsodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhHLGIpXTtjYXNlIDE6cmV0dXJuKEQ9SC5zZW50KCkpP1syLCIvZm9sZGVycy9mb2xkZXJzLyIuY29uY2F0KEQuaWQpXTpbMix2b2lkIDBdfX0pfSl9LGNl'@;
put 'LnByb3RvdHlwZS5nZXRSZWN5Y2xlQmluVXJpPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0'@;
put 'KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KCIvZm9sZGVycy9mb2xkZXJzL0BteVJlY3ljbGVCaW4iKSxHKS5jYXRjaChmdW5jdGlvbihIKXtpZihIIGluc3RhbmNlb2YgVi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IEg7cmV0dXJue3Jlc3VsdDpudWxsfX0pXTtjYXNlIDE6cmV0'@;
put 'dXJuKGI9RC5zZW50KCkucmVzdWx0KT9bMiwiL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdChiLmlkKV06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWU9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShHLGIpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRDb21wdXRl'@;
put 'Q29udGV4dEJ5SWQ9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQo'@;
put 'RyxiKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUubGlzdEZvbGRlcj1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIHZvaWQgMD09PUQmJihEPTIwKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE4sZztyZXR1cm4gayh0aGlzLGZ1bmN0'@;
put 'aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuKDAsRS5pc1VyaSkoRyk/KE49RyxbMywzXSk6WzMsMV07Y2FzZSAxOnJldHVybls0LHRoaXMuZ2V0Rm9sZGVyVXJpKEcsYildO2Nhc2UgMjpOPUMuc2VudCgpLEMubGFiZWw9MztjYXNlIDM6cmV0dXJuIEg9TixbNCx0aGlzLnJl'@;
put 'cXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KEgsIi9tZW1iZXJzP2xpbWl0PSIpLmNvbmNhdChEKSxiKV07Y2FzZSA0OnJldHVybihnPUMuc2VudCgpLnJlc3VsdCkmJmcuaXRlbXM/WzIsZy5pdGVtcy5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMubmFt'@;
put 'ZX0pXTpbMixbXV19fSl9KX0sY2UucHJvdG90eXBlLm1vdmVGb2xkZXI9ZnVuY3Rpb24oRyxiLEQsSCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE4sZyxDLFMsdixwO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odyl7c3dpdGNoKHcubGFiZWwpe2Nhc2UgMDpy'@;
put 'ZXR1cm4gTj1HLnNwbGl0KCIvIikucG9wKCksWzQsdGhpcy5nZXRGb2xkZXJEZXRhaWxzKGIsSCldO2Nhc2UgMTpyZXR1cm4gdy5zZW50KCk/RD1OOigoZz1iLnNwbGl0KCIvIikpLnNwbGljZShnLmxlbmd0aC0xLDEpLGI9Zy5qb2luKCIvIikpLFs0LHRoaXMuZ2V0Rm9sZGVyVXJpKEcsSCld'@;
put 'O2Nhc2UgMjpyZXR1cm4gQz13LnNlbnQoKSxbNCx0aGlzLmdldEZvbGRlclVyaShiLEgpXTtjYXNlIDM6cmV0dXJuIFM9dy5zZW50KCksQz8odj1DPy5zcGxpdCgiLyIpLnBvcCgpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wYXRjaCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChD'@;
put 'KSx7aWQ6dixuYW1lOkQscGFyZW50Rm9sZGVyVXJpOlN9LEgpLmNhdGNoKGZ1bmN0aW9uKEope3Rocm93IEouY29kZSYmIkVOT1RGT1VORCI9PT1KLmNvZGU/e2JvZHk6e21lc3NhZ2U6IkZvbGRlciAnIi5jb25jYXQoRy5zcGxpdCgiLyIpLnBvcCgpLCInIHdhcyBub3QgZm91bmQuIil9fTpK'@;
put 'fSldKTpbMix2b2lkIDBdO2Nhc2UgNDpyZXR1cm4ocD13LnNlbnQoKS5yZXN1bHQpP1syLHBdOlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmRlbGV0ZUZvbGRlcj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEgsTixnO3Jl'@;
put 'dHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldFJlY3ljbGVCaW5VcmkoYildO2Nhc2UgMTpyZXR1cm4gRD1TLnNlbnQoKSxIPUcuc3BsaXQoIi8iKS5wb3AoKXx8IiIsZz0oTj1uZXcgRGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5n'@;
put 'KCkrIiAiK04udG9Mb2NhbGVUaW1lU3RyaW5nKCksWzQsdGhpcy5tb3ZlRm9sZGVyKEcsRCxIKyIgIitnLGIpXTtjYXNlIDI6cmV0dXJuWzIsUy5zZW50KCldfX0pfSl9LGNlfSgpO08uU0FTVml5YUFwaUNsaWVudD11ZX0sNTk1NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6'@;
put 'PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oaGUpe2Zvcih2YXIgdWUsY2U9MSxHPWFyZ3VtZW50cy5sZW5ndGg7Y2U8RztjZSsrKWZvcih2YXIgYiBpbiB1ZT1hcmd1bWVudHNbY2VdKU9iamVjdC5wcm90b3R5cGUuaGFz'@;
put 'T3duUHJvcGVydHkuY2FsbCh1ZSxiKSYmKGhlW2JdPXVlW2JdKTtyZXR1cm4gaGV9LHouYXBwbHkodGhpcyxhcmd1bWVudHMpfSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihoZSx1ZSxjZSxHKXtyZXR1cm4gbmV3KGNlfHwoY2U9UHJvbWlzZSkpKGZ1bmN0aW9uKGIsRCl7ZnVu'@;
put 'Y3Rpb24gSChDKXt0cnl7ZyhHLm5leHQoQykpfWNhdGNoKFMpe0QoUyl9fWZ1bmN0aW9uIE4oQyl7dHJ5e2coRy50aHJvdyhDKSl9Y2F0Y2goUyl7RChTKX19ZnVuY3Rpb24gZyhDKXt2YXIgUztDLmRvbmU/YihDLnZhbHVlKTooUz1DLnZhbHVlLFMgaW5zdGFuY2VvZiBjZT9TOm5ldyBjZShm'@;
put 'dW5jdGlvbih2KXt2KFMpfSkpLnRoZW4oSCxOKX1nKChHPUcuYXBwbHkoaGUsdWV8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGhlLHVlKXt2YXIgY2UsRyxiLEQsSD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZiWzBdKXRocm93IGJb'@;
put 'MV07cmV0dXJuIGJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gRD17bmV4dDpOKDApLHRocm93Ok4oMSkscmV0dXJuOk4oMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihEW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEQ7ZnVuY3Rpb24gTihnKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24oQyl7cmV0dXJuIGZ1bmN0aW9uKFMpe2lmKGNlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0g7KXRyeXtpZihjZT0xLEcmJihiPTImU1swXT9HLnJldHVybjpTWzBdP0cudGhyb3d8fCgoYj1HLnJldHVy'@;
put 'bikmJmIuY2FsbChHKSwwKTpHLm5leHQpJiYhKGI9Yi5jYWxsKEcsU1sxXSkpLmRvbmUpcmV0dXJuIGI7c3dpdGNoKEc9MCxiJiYoUz1bMiZTWzBdLGIudmFsdWVdKSxTWzBdKXtjYXNlIDA6Y2FzZSAxOmI9UzticmVhaztjYXNlIDQ6cmV0dXJuIEgubGFiZWwrKyx7dmFsdWU6U1sxXSxkb25l'@;
put 'OiExfTtjYXNlIDU6SC5sYWJlbCsrLEc9U1sxXSxTPVswXTtjb250aW51ZTtjYXNlIDc6Uz1ILm9wcy5wb3AoKSxILnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChiPShiPUgudHJ5cykubGVuZ3RoPjAmJmJbYi5sZW5ndGgtMV0pfHw2IT09U1swXSYmMiE9PVNbMF0pKXtIPTA7'@;
put 'Y29udGludWV9aWYoMz09PVNbMF0mJighYnx8U1sxXT5iWzBdJiZTWzFdPGJbM10pKXtILmxhYmVsPVNbMV07YnJlYWt9aWYoNj09PVNbMF0mJkgubGFiZWw8YlsxXSl7SC5sYWJlbD1iWzFdLGI9UzticmVha31pZihiJiZILmxhYmVsPGJbMl0pe0gubGFiZWw9YlsyXSxILm9wcy5wdXNoKFMp'@;
put 'O2JyZWFrfWJbMl0mJkgub3BzLnBvcCgpLEgudHJ5cy5wb3AoKTtjb250aW51ZX1TPXVlLmNhbGwoaGUsSCl9Y2F0Y2godil7Uz1bNix2XSxHPTB9ZmluYWxseXtjZT1iPTB9aWYoNSZTWzBdKXRocm93IFNbMV07cmV0dXJue3ZhbHVlOlNbMF0/U1sxXTp2b2lkIDAsZG9uZTohMH19KFtnLENd'@;
put 'KX19fSxrPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oaGUsdWUsY2Upe2lmKGNlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIEcsYj0wLEQ9dWUubGVuZ3RoO2I8RDtiKyspIUcmJmIgaW4gdWV8fChHfHwoRz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh1ZSww'@;
put 'LGIpKSxHW2JdPXVlW2JdKTtyZXR1cm4gaGUuY29uY2F0KEd8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHVlKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRT1SKDU5MjgpLGo9UigxMjMwKSxWPVIoOTgyMSksQj1SKDgzMDYpLFk9'@;
put 'UigzNDY3KSxYPVIoMTUyNyksVT1SKDM5MDApLHE9Uig0NTg4KSxlZT1SKDM2MDIpLHRlPVIoODIxNyksb2U9e3NlcnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4'@;
put 'ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6VS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOmouTG9naW5N'@;
put 'ZWNoYW5pc20uRGVmYXVsdH0sc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBoZSh1ZSl7dmFyIGNlPXRoaXM7dGhpcy5zYXNqc0NvbmZpZz1uZXcgai5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2FzVml5YUFwaUNsaWVudD1udWxsLHRoaXMuc2FzOUFwaUNsaWVudD1udWxsLHRo'@;
put 'aXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0'@;
put 'b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBLKGNlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxiLEQsSCxOO3JldHVybiBJKHRoaXMsZnVu'@;
put 'Y3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxudWxsPT09KEc9dGhpcy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PUc/dm9pZCAwOkcucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMTpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShiPXRoaXMuY29tcHV0'@;
put 'ZUpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Yj92b2lkIDA6Yi5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSAyOnJldHVybiBnLnNlbnQoKSxbNCxudWxsPT09KEQ9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PUQ/dm9pZCAwOkQucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nh'@;
put 'c2UgMzpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShIPXRoaXMuZmlsZVVwbG9hZGVyKXx8dm9pZCAwPT09SD92b2lkIDA6SC5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSA0OnJldHVybiBnLnNlbnQoKSxbNCxudWxsPT09KE49dGhpcy5zYXNqc0pvYkV4ZWN1dG9yKXx8dm9pZCAw'@;
put 'PT09Tj92b2lkIDA6Ti5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSA1OnJldHVybiBnLnNlbnQoKSxbMl19fSl9KX0sdGhpcy5zZXRWZXJib3NlTW9kZT1mdW5jdGlvbihHKXt2YXIgYjtudWxsPT09KGI9Y2UucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWJ8fGIuc2V0VmVyYm9zZU1v'@;
put 'ZGUoRyl9LHRoaXMuc2FzanNDb25maWc9eih6KHt9LG9lKSx1ZSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX1yZXR1cm4gaGUucHJvdG90eXBlLmdldENzcmZUb2tlbj1mdW5jdGlvbih1ZSl7dmFyIGNlO3JldHVybiB2b2lkIDA9PT11ZSYmKHVlPSJnZW5lcmFsIiksbnVsbD09PShjZT10'@;
put 'aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2UuZ2V0Q3NyZlRva2VuKHVlKX0saGUucHJvdG90eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24odWUpe3ZhciBjZSxHLGI9dWUubGluZXNPZkNvZGUsRD11ZS5maWxlTmFtZSxIPXVlLmNvbnRleHROYW1lLE49dWUucnVu'@;
put 'VGltZSxnPXVlLmF1dGhDb25maWcsQz11ZS5hdXRoQ29uZmlnU2FzOSxTPXVlLmRlYnVnO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDppZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVk'@;
put 'KCJleGVjdXRlU2NyaXB0IixbVS5TZXJ2ZXJUeXBlLlNhczksVS5TZXJ2ZXJUeXBlLlNhc2pzLFUuU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhczkpcmV0dXJuWzMsMl07aWYoIUMpdGhyb3cgbmV3IEVycm9yKCJBdXRo'@;
put 'IGNvbmZpZyBmb3Igc2FzOSBpcyBub3QgcHJvdmlkZWQiKTtyZXR1cm5bNCxudWxsPT09KGNlPXRoaXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5leGVjdXRlU2NyaXB0KGIsQy51c2VyTmFtZSxDLnBhc3N3b3JkKV07Y2FzZSAxOmNhc2UgMzpjYXNlIDU6cmV0dXJu'@;
put 'WzIsdi5zZW50KCldO2Nhc2UgMjpyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDRdOls0LG51bGw9PT0oRz10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09Rz92b2lkIDA6Ry5leGVjdXRlU2NyaXB0KGIuam9pbigiXG4iKSxO'@;
put 'LGcpXTtjYXNlIDQ6aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpcmV0dXJuWzMsNl07aWYoIShIPUh8fHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxl'@;
put 'YXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7aWYoIUQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5hbWUgaXMgcmVxdWlyZWQgaW4gY2FzZSBvZiBTQVMgVklZQS4gUGxlYXNlIHByb3ZpZGUgYSBgZmlsZU5hbWVgLiIpO3JldHVybls0'@;
put 'LHRoaXMuc2FzVml5YUFwaUNsaWVudC5leGVjdXRlU2NyaXB0KEQsYixILGcsbnVsbCxTfHx0aGlzLnNhc2pzQ29uZmlnLmRlYnVnKV07Y2FzZSA2OnJldHVyblsyXX19KX0pfSxoZS5wcm90b3R5cGUuZXhlY3V0ZUpvYj1mdW5jdGlvbih1ZSxjZSxHKXt2YXIgYjtyZXR1cm4gSyh0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtVLlNlcnZlclR5cGUuU2FzanNdKSxbNCxudWxsPT09KGI9dGhpcy5zYXNKU0Fw'@;
put 'aUNsaWVudCl8fHZvaWQgMD09PWI/dm9pZCAwOmIuZXhlY3V0ZUpvYih1ZSxjZSxHKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNv'@;
put 'bnRleHRzKHVlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldExhdW5jaGVyQ29udGV4dHM9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChj'@;
put 'ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRMYXVuY2hlckNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0TGF1bmNoZXJDb250ZXh0cyh1ZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50'@;
put 'KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldERlZmF1bHRDb21wdXRlQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzVml5YUFwaUNsaWVudC5n'@;
put 'ZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl9LGhlLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAw'@;
put 'OnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRFeGVjdXRhYmxlQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRFeGVjdXRhYmxlQ29udGV4dHModWUpXTtjYXNlIDE6cmV0dXJuWzIsY2Uuc2VudCgpXX19KX0pfSxo'@;
put 'ZS5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9k'@;
put 'U3VwcG9ydGVkKCJjcmVhdGVDb21wdXRlQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUNvbXB1dGVDb250ZXh0KHVlLGNlLEcsYixELEgpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5j'@;
put 'cmVhdGVMYXVuY2hlckNvbnRleHQ9ZnVuY3Rpb24odWUsY2UsRyxiKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0'@;
put 'ZUxhdW5jaGVyQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dCh1ZSxjZSxHLGIpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5lZGl0Q29tcHV0ZUNvbnRleHQ9'@;
put 'ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJlZGl0Q29tcHV0ZUNvbnRleHQiLFtVLlNlcnZl'@;
put 'clR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5lZGl0Q29tcHV0ZUNvbnRleHQodWUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmRlbGV0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1Zp'@;
put 'eWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRleHQodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZT1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVD'@;
put 'b250ZXh0QnlOYW1lKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9u'@;
put 'KEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZCh1ZSxjZSldO2Nhc2Ug'@;
put 'MTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmNyZWF0ZVNlc3Npb249ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4g'@;
put 'dGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24odWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVGb2xk'@;
put 'ZXI9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBEP1s0LEQuY3JlYXRlRm9sZGVyKHVlLGNlLEcsYixIKV06WzMsMl07Y2Fz'@;
put 'ZSAxOmNhc2UgMzpyZXR1cm5bMixOLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGb2xkZXIodWUsY2UsRyxiLEgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbih1ZSxjZSxHLGIsRCxIKXtyZXR1cm4gSyh0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEg/WzQsSC5jcmVhdGVGaWxlKHVlLGNlLEcsYixEKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixOLnNlbnQoKV07Y2FzZSAyOnJldHVybls0'@;
put 'LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGaWxlKHVlLGNlLEcsYixEKV19fSl9KX0saGUucHJvdG90eXBlLmdldEZvbGRlcj1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2go'@;
put 'Ry5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRGb2xkZXIiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRGb2xkZXIodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3Rv'@;
put 'dHlwZS5kZWxldGVGb2xkZXI9ZnVuY3Rpb24odWUsY2Upe3ZhciBHO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRl'@;
put 'Rm9sZGVyIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCxudWxsPT09KEc9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Rz92b2lkIDA6Ry5kZWxldGVGb2xkZXIodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5saXN0Rm9sZGVy'@;
put 'PWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibGlzdEZvbGRlciIsW1UuU2VydmVy'@;
put 'VHlwZS5TYXNWaXlhXSksWzQsbnVsbD09PShiPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PWI/dm9pZCAwOmIubGlzdEZvbGRlcih1ZSxjZSxHKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUubW92ZUZvbGRlcj1mdW5jdGlvbih1ZSxjZSxH'@;
put 'LGIpe3ZhciBEO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibW92ZUZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSks'@;
put 'WzQsbnVsbD09PShEPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUQ/dm9pZCAwOkQubW92ZUZvbGRlcih1ZSxjZSxHLGIpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVKb2JEZWZpbml0aW9uPWZ1bmN0aW9uKHVlLGNlLEcsYixE'@;
put 'LEgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlSm9iRGVmaW5pdGlvbiIsW1UuU2VydmVyVHlwZS5TYXNWaXlh'@;
put 'XSksSD9bNCxILmNyZWF0ZUpvYkRlZmluaXRpb24odWUsY2UsRyxiLEQpXTpbMywyXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLE4uc2VudCgpXTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUpvYkRlZmluaXRpb24odWUsY2UsRyxiLEQpXX19KX0pfSxoZS5w'@;
put 'cm90b3R5cGUuZ2V0QXV0aENvZGU9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBdXRoQ29k'@;
put 'ZSIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEF1dGhDb2RlKHVlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKHVlLGNlLEcpe3JldHVybiBLKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtVLlNlcnZlclR5cGUuU2FzVml5YSxVLlNlcnZlclR5cGUuU2FzanNdKSx0aGlz'@;
put 'LnNhc2pzQ29uZmlnLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzanM/WzMsMl06WzQsdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbih1ZSxHKV07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixiLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVu'@;
put 'dC5nZXRBY2Nlc3NUb2tlbih1ZSxjZSxHKV19fSl9KX0saGUucHJvdG90eXBlLnJlZnJlc2hUb2tlbnM9ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAw'@;
put 'OnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJyZWZyZXNoVG9rZW5zIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVS5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzSlNBcGlDbGll'@;
put 'bnQucmVmcmVzaFRva2VucyhHKV07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixiLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKHVlLGNlLEcpXX19KX0pfSxoZS5wcm90b3R5cGUuZGVsZXRlQ2xpZW50PWZ1bmN0aW9uKHVlLGNlKXty'@;
put 'ZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNsaWVudCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5z'@;
put 'YXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNsaWVudCh1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldFNhc2pzQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2FzanNDb25maWd9LGhlLnByb3RvdHlwZS5nZXRVc2VyTmFtZT1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnVzZXJOYW1lfSxoZS5wcm90b3R5cGUuc2V0U0FTanNDb25maWc9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3JldHVybiB0aGlzLnNhc2pzQ29u'@;
put 'ZmlnPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSx1ZSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKSxbMl19KX0pfSxoZS5wcm90b3R5cGUuc2V0RGVidWdTdGF0ZT1mdW5jdGlvbih1ZSl7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz11ZSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQmJih0aGlzLnNh'@;
put 'c1ZpeWFBcGlDbGllbnQuZGVidWc9dWUpfSxoZS5wcm90b3R5cGUuY2hlY2tTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih1ZSl7cmV0dXJuWzIsdGhpcy5hdXRoTWFuYWdlci5jaGVja1Nlc3Np'@;
put 'b24oKV19KX0pfSxoZS5wcm90b3R5cGUubG9nSW49ZnVuY3Rpb24odWUsY2UsRyxiKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9e30pLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihEKXtpZih0aGlzLnNhc2pzQ29uZmlnLmxvZ2luTWVjaGFu'@;
put 'aXNtPT09ai5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0KXtpZighdWV8fCFjZSl0aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2Vy'@;
put 'LmxvZ0luKHVlLGNlKV19aWYodHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVkaXJlY3RlZCBsb2dpbiBtZWNoYW5pc20gaXMgb25seSBhdmFpbGFibGUgZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4iKTtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2VyLnJlZGlyZWN0ZWRM'@;
put 'b2dJbihiKV19KX0pfSxoZS5wcm90b3R5cGUubG9nT3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9LGhlLnByb3RvdHlwZS51cGxvYWRGaWxlPWZ1bmN0aW9uKHVlLGNlLEcsYixEKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9e30pLEsodGhpcyx2b2lkIDAs'@;
put 'dm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBiPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSxiKSxbNCx0aGlzLmZpbGVVcGxvYWRlci5leGVjdXRlKHVlLHtmaWxlczpjZSxwYXJhbXM6R30sYixEKV07Y2Fz'@;
put 'ZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbih1ZSxjZSxHLGIsRCxIKXtyZXR1cm4gdm9pZCAwPT09RyYmKEc9e30pLHZvaWQgMD09PUgmJihIPVtdKSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOO3JldHVybiBJ'@;
put 'KHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRz16KHooe30sdGhpcy5zYXNqc0NvbmZpZyksRyksKE49KDAsRS52YWxpZGF0ZUlucHV0KShjZSkpLnN0YXR1cz9HLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzanM/WzMsMl06WzQsdGhpcy5zYXNq'@;
put 'c0pvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxiLEQsSCldOlszLDEyXTtjYXNlIDE6Y2FzZSAzOmNhc2UgNTpjYXNlIDg6Y2FzZSAxMDpyZXR1cm5bMixnLnNlbnQoKV07Y2FzZSAyOnJldHVybiBHLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzVml5YXx8bnVsbD09Ry51c2VDb21w'@;
put 'dXRlQXBpP1szLDddOkcudXNlQ29tcHV0ZUFwaT9bNCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNlLEcsYixEKV06WzMsNF07Y2FzZSA0OnJldHVybiBHLmNvbnRleHROYW1lfHwoRz16KHooe30sRykse2NvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRl'@;
put 'IGNvbnRleHQifSkpLFs0LHRoaXMuamVzSm9iRXhlY3V0b3IuZXhlY3V0ZSh1ZSxjZSxHLGIsRCxIKV07Y2FzZSA2OnJldHVyblszLDExXTtjYXNlIDc6cmV0dXJuIEcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5JiZHLnVzZXJuYW1lJiZHLnBhc3N3b3JkP1s0LHRoaXMuc2FzOUpv'@;
put 'YkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyldOlszLDldO2Nhc2UgOTpyZXR1cm5bNCx0aGlzLndlYkpvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxiLEQsSCldO2Nhc2UgMTE6cmV0dXJuWzMsMTNdO2Nhc2UgMTI6cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNwb25z'@;
put 'ZShOLm1zZykpXTtjYXNlIDEzOnJldHVyblsyXX19KX0pfSxoZS5wcm90b3R5cGUuZGVwbG95U2VydmljZVBhY2s9ZnVuY3Rpb24odWUsY2UsRyxiLEQpe3JldHVybiB2b2lkIDA9PT1EJiYoRD0hMSksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOO3JldHVybiBJKHRo'@;
put 'aXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVwbG95U2VydmljZVBhY2siLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLEg9bnVsbCxHfHxjZT8oR3x8KEc9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpLGNlfHwo'@;
put 'Y2U9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNWaXlhPyhIPW5ldyBWLlNBU1ZpeWFBcGlDbGllbnQoRyxjZSx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCkpLmRlYnVn'@;
put 'PXRoaXMuc2FzanNDb25maWcuZGVidWc6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhczkmJihIPW5ldyBCLlNBUzlBcGlDbGllbnQoRyx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSk6KE49bnVsbCx0aGlzLnNh'@;
put 'c2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YT9OPXRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmKE49dGhpcy5zYXM5QXBpQ2xpZW50LmdldENvbmZpZygpKSxH'@;
put 'PU4uc2VydmVyVXJsLGNlPU4ucm9vdEZvbGRlck5hbWUpLHVlLm1lbWJlcnNbMF0ubWVtYmVycyYmdWUubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQoZnVuY3Rpb24oUyl7cmV0dXJuImZvbGRlciI9PT1TLnR5cGU/LTE6MX0pLFs0LHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKGNlLHVl'@;
put 'Lm1lbWJlcnMsYixILEQpXTtjYXNlIDE6cmV0dXJuIEMuc2VudCgpLFsyXX19KX0pfSxoZS5wcm90b3R5cGUuc3RhcnRDb21wdXRlSm9iPWZ1bmN0aW9uKHVlLGNlLEcsYixELEgsTixnLEMpe3ZhciBTLHYscCx3O3JldHVybiB2b2lkIDA9PT1HJiYoRz17fSksdm9pZCAwPT09TiYmKE49ITEp'@;
put 'LEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihKKXtpZihHPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSxHKSx0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJzdGFydENvbXB1dGVKb2IiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLCFHLmNvbnRl'@;
put 'eHROYW1lKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7cmV0dXJuIEM/KG51bGw9PT0oUz10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1T'@;
put 'fHxTLnNldFZlcmJvc2VNb2RlKEMpLG51bGw9PT0odj10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT12fHx2LmVuYWJsZVZlcmJvc2VNb2RlKCkpOiExPT09QyYmKG51bGw9PT0ocD10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1wfHxwLmRpc2FibGVWZXJib3NlTW9kZSgpKSxb'@;
put 'MixudWxsPT09KHc9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09dz92b2lkIDA6dy5leGVjdXRlQ29tcHV0ZUpvYih1ZSxHLmNvbnRleHROYW1lLEcuZGVidWcsY2UsYiwhIUQsITEsSCxOLGcpXX0pfSl9LGhlLnByb3RvdHlwZS5mZXRjaExvZ0ZpbGVDb250ZW50PWZ1bmN0aW9u'@;
put 'KHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh1ZSxjZSkudGhlbihmdW5jdGlvbihiKXtpZighYilyZXR1cm4g'@;
put 'UHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNwb25zZSgiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgbG9nLiBSZXNwb25zZSB3YXMgbm90IHByb3ZpZGVkLiIpKTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGIucmVzdWx0KX1jYXRjaChEKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGou'@;
put 'RXJyb3JSZXNwb25zZSgiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgbG9nLiBUaGUgcmVzdWx0IGlzIG5vdCB2YWxpZC4iLEQpKX19KV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0U2FzUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4gayhbXSx0aGlzLnJl'@;
put 'cXVlc3RDbGllbnQuZ2V0UmVxdWVzdHMoKSwhMCkuc29ydChFLmNvbXBhcmVUaW1lc3RhbXBzKX0saGUucHJvdG90eXBlLmNsZWFyU2FzUmVxdWVzdHM9ZnVuY3Rpb24oKXt0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJSZXF1ZXN0cygpfSxoZS5wcm90b3R5cGUuc2V0dXBDb25maWd1cmF0aW9u'@;
put 'PWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7dmFyIHVlPSIiLmNvbmNhdChsb2NhdGlvbi5wcm90b2NvbCwiLy8iKS5jb25jYXQobG9jYXRpb24u'@;
put 'aG9zdG5hbWUpO2xvY2F0aW9uLnBvcnQmJih1ZT0iIi5jb25jYXQodWUsIjoiKS5jb25jYXQobG9jYXRpb24ucG9ydCkpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPXVlfWVsc2UgdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9IiI7Ii8iPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJV'@;
put 'cmwuc2xpY2UoLTEpJiYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwuc2xpY2UoMCwtMSkpLHRoaXMucmVxdWVzdENsaWVudD90aGlzLnJlcXVlc3RDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2Fz'@;
put 'anNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpOnRoaXMucmVxdWVzdENsaWVudD1uZXcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc2pzP2VlLlNhc2pzUmVxdWVzdENsaWVudDpxLlJlcXVlc3RDbGllbnQpKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJs'@;
put 'LHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMsdGhpcy5zYXNqc0NvbmZpZy5yZXF1ZXN0SGlzdG9yeUxpbWl0LHRoaXMuc2FzanNDb25maWcudmVyYm9zZSksdGhpcy5qb2JzUGF0aD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YT90'@;
put 'aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNWaXlhOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5P3RoaXMuc2FzanNDb25maWcucGF0aFNBUzk6dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTSlMsdGhpcy5hdXRoTWFuYWdlcj1uZXcgWC5BdXRoTWFuYWdlcih0'@;
put 'aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YSYmKHRoaXMuc2FzVml5'@;
put 'YUFwaUNsaWVudD90aGlzLnNhc1ZpeWFBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBwTG9jKTp0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bmV3IFYuU0FTVml5YUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVy'@;
put 'bCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVy'@;
put 'VHlwZS5TYXM5JiYodGhpcy5zYXM5QXBpQ2xpZW50P3RoaXMuc2FzOUFwaUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpOnRoaXMuc2FzOUFwaUNsaWVudD1uZXcgQi5TQVM5QXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1Bh'@;
put 'dGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNqcyYmKHRoaXMuc2FzSlNBcGlDbGllbnR8fCh0aGlzLnNhc0pTQXBpQ2xpZW50PW5ldyBZLlNBU2pzQXBpQ2xpZW50KHRoaXMucmVxdWVz'@;
put 'dENsaWVudCkpKSx0aGlzLmZpbGVVcGxvYWRlcj1uZXcgdGUuRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgdGUu'@;
put 'V2ViSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2FzVml5YUFwaUNsaWVudCksdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW5ldyB0ZS5TYXNqc0pvYkV4'@;
put 'ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLnNhczlKb2JFeGVjdXRvcj1uZXcgdGUuU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw'@;
put 'ZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgdGUuQ29tcHV0ZUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNs'@;
put 'aWVudCksdGhpcy5qZXNKb2JFeGVjdXRvcj1uZXcgdGUuSmVzSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KX0saGUucHJvdG90eXBlLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcz1mdW5jdGlvbih1ZSxjZSxHLGIsRCl7cmV0dXJu'@;
put 'IEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsRS5hc3luY0ZvckVhY2gpKGNlLGZ1bmN0aW9uKGcpe3JldHVybiBLKEgsdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpzd2l0Y2goZy50eXBlKXtjYXNlImZvbGRlciI6cmV0dXJuWzMsMV07Y2FzZSJmaWxlIjpyZXR1cm5bMywzXTtjYXNlInNlcnZpY2UiOnJldHVyblszLDVdfXJldHVyblszLDddO2Nhc2UgMTpy'@;
put 'ZXR1cm5bNCx0aGlzLmNyZWF0ZUZvbGRlcihnLm5hbWUsdWUsdm9pZCAwLEcsYixEKV07Y2FzZSAyOnJldHVybiBDLnNlbnQoKSxbMyw4XTtjYXNlIDM6cmV0dXJuWzQsdGhpcy5jcmVhdGVGaWxlKGcubmFtZSxnLmNvZGUsdWUsdm9pZCAwLEcsYildO2Nhc2UgNDpyZXR1cm4gQy5zZW50KCks'@;
put 'WzMsOF07Y2FzZSA1OnJldHVybls0LHRoaXMuY3JlYXRlSm9iRGVmaW5pdGlvbihnLm5hbWUsZy5jb2RlLHVlLHZvaWQgMCxHLGIpXTtjYXNlIDY6cmV0dXJuIEMuc2VudCgpLFszLDhdO2Nhc2UgNzp0aHJvdyBuZXcgRXJyb3IoIlVuaWRlbnRpZmllZCBtZW1iZXIgJyIuY29uY2F0KGcubmFt'@;
put 'ZSwiJyBwcm92aWRlZC4iKSk7Y2FzZSA4OnJldHVybiJmb2xkZXIiPT09Zy50eXBlJiZnLm1lbWJlcnMmJmcubWVtYmVycy5sZW5ndGg/WzQsdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoIiIuY29uY2F0KHVlLCIvIikuY29uY2F0KGcubmFtZSksZy5tZW1iZXJzLEcsYixEKV06WzMs'@;
put 'MTBdO2Nhc2UgOTpDLnNlbnQoKSxDLmxhYmVsPTEwO2Nhc2UgMTA6cmV0dXJuWzJdfX0pfSl9KV07Y2FzZSAxOnJldHVybiBOLnNlbnQoKSxbMl19fSl9KX0saGUucHJvdG90eXBlLmlzTWV0aG9kU3VwcG9ydGVkPWZ1bmN0aW9uKHVlLGNlKXtpZighdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU'@;
put 'eXBlfHwhY2UuaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAnIi5jb25jYXQodWUsIicgaXMgb25seSBzdXBwb3J0ZWQgb24gIikuY29uY2F0KGNlLmpvaW4oIiwgIiksIiBzZXJ2ZXJzLiIpKX0saGUucHJvdG90eXBlLmVuYWJs'@;
put 'ZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKHVlLGNlKXt2YXIgRztudWxsPT09KEc9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09R3x8Ry5lbmFibGVWZXJib3NlTW9kZSh1ZSxjZSl9LGhlLnByb3RvdHlwZS5kaXNhYmxlVmVyYm9zZU1vZGU9ZnVuY3Rpb24oKXt2YXIgdWU7bnVsbD09PSh1'@;
put 'ZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT11ZXx8dWUuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LGhlfSgpO08uZGVmYXVsdD1zZX0sMzQ2NzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2Jq'@;
put 'ZWN0LmFzc2lnbnx8ZnVuY3Rpb24oVSl7Zm9yKHZhciBxLGVlPTEsdGU9YXJndW1lbnRzLmxlbmd0aDtlZTx0ZTtlZSsrKWZvcih2YXIgb2UgaW4gcT1hcmd1bWVudHNbZWVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxLG9lKSYmKFVbb2VdPXFbb2VdKTtyZXR1cm4g'@;
put 'VX0sei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFUscSxlZSx0ZSl7cmV0dXJuIG5ldyhlZXx8KGVlPVByb21pc2UpKShmdW5jdGlvbihvZSxzZSl7ZnVuY3Rpb24gaGUoRyl7dHJ5e2NlKHRlLm5leHQoRykpfWNhdGNoKGIpe3NlKGIp'@;
put 'fX1mdW5jdGlvbiB1ZShHKXt0cnl7Y2UodGUudGhyb3coRykpfWNhdGNoKGIpe3NlKGIpfX1mdW5jdGlvbiBjZShHKXt2YXIgYjtHLmRvbmU/b2UoRy52YWx1ZSk6KGI9Ry52YWx1ZSxiIGluc3RhbmNlb2YgZWU/YjpuZXcgZWUoZnVuY3Rpb24oRCl7RChiKX0pKS50aGVuKGhlLHVlKX1jZSgo'@;
put 'dGU9dGUuYXBwbHkoVSxxfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihVLHEpe3ZhciBlZSx0ZSxvZSxzZSxoZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvZVswXSl0aHJvdyBvZVsxXTtyZXR1cm4gb2VbMV19LHRyeXM6W10sb3Bz'@;
put 'OltdfTtyZXR1cm4gc2U9e25leHQ6dWUoMCksdGhyb3c6dWUoMSkscmV0dXJuOnVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoc2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksc2U7ZnVuY3Rpb24gdWUoY2Upe3JldHVybiBmdW5jdGlvbihHKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24oYil7aWYoZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7aGU7KXRyeXtpZihlZT0xLHRlJiYob2U9MiZiWzBdP3RlLnJldHVybjpiWzBdP3RlLnRocm93fHwoKG9lPXRlLnJldHVybikmJm9lLmNhbGwo'@;
put 'dGUpLDApOnRlLm5leHQpJiYhKG9lPW9lLmNhbGwodGUsYlsxXSkpLmRvbmUpcmV0dXJuIG9lO3N3aXRjaCh0ZT0wLG9lJiYoYj1bMiZiWzBdLG9lLnZhbHVlXSksYlswXSl7Y2FzZSAwOmNhc2UgMTpvZT1iO2JyZWFrO2Nhc2UgNDpyZXR1cm4gaGUubGFiZWwrKyx7dmFsdWU6YlsxXSxkb25l'@;
put 'OiExfTtjYXNlIDU6aGUubGFiZWwrKyx0ZT1iWzFdLGI9WzBdO2NvbnRpbnVlO2Nhc2UgNzpiPWhlLm9wcy5wb3AoKSxoZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgob2U9KG9lPWhlLnRyeXMpLmxlbmd0aD4wJiZvZVtvZS5sZW5ndGgtMV0pfHw2IT09YlswXSYmMiE9PWJb'@;
put 'MF0pKXtoZT0wO2NvbnRpbnVlfWlmKDM9PT1iWzBdJiYoIW9lfHxiWzFdPm9lWzBdJiZiWzFdPG9lWzNdKSl7aGUubGFiZWw9YlsxXTticmVha31pZig2PT09YlswXSYmaGUubGFiZWw8b2VbMV0pe2hlLmxhYmVsPW9lWzFdLG9lPWI7YnJlYWt9aWYob2UmJmhlLmxhYmVsPG9lWzJdKXtoZS5s'@;
put 'YWJlbD1vZVsyXSxoZS5vcHMucHVzaChiKTticmVha31vZVsyXSYmaGUub3BzLnBvcCgpLGhlLnRyeXMucG9wKCk7Y29udGludWV9Yj1xLmNhbGwoVSxoZSl9Y2F0Y2goRCl7Yj1bNixEXSx0ZT0wfWZpbmFsbHl7ZWU9b2U9MH1pZig1JmJbMF0pdGhyb3cgYlsxXTtyZXR1cm57dmFsdWU6Ylsw'@;
put 'XT9iWzFdOnZvaWQgMCxkb25lOiEwfX0oW2NlLEddKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVNqc0FwaUNsaWVudD12b2lkIDA7dmFyIGs9Uig2MjMwKSxFPVIoMzkwMCksaj1SKDk3NzgpLFY9Uig1NyksQj1SKDI0OSksWT1SKDcw'@;
put 'NCksWD1mdW5jdGlvbigpe2Z1bmN0aW9uIFUocSl7dGhpcy5yZXF1ZXN0Q2xpZW50PXF9cmV0dXJuIFUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdD1mdW5jdGlvbihxKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0'@;
put 'aW9uKGVlKXtzd2l0Y2goZWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT9bNCwoMCxZLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LHEsRS5TZXJ2ZXJUeXBlLlNhc2pzKV06WzMsMl07Y2FzZSAxOnJldHVyblsyLGVlLnNlbnQoKS5hY2Nlc3NfdG9rZW5dO2Nhc2UgMjpyZXR1cm5bMl19'@;
put 'fSl9KX0sVS5wcm90b3R5cGUuZGVwbG95PWZ1bmN0aW9uKHEsZWUsdGUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldEFjY2Vz'@;
put 'c1Rva2VuRm9yUmVxdWVzdCh0ZSldO2Nhc2UgMTpyZXR1cm4gb2U9aGUuc2VudCgpLHEuYXBwTG9jPXEuYXBwTG9jfHxlZSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95IixxLG9lLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9k'@;
put 'eUxlbmd0aDoxLzB9KV07Y2FzZSAyOnJldHVybiBzZT1oZS5zZW50KCkucmVzdWx0LFsyLFByb21pc2UucmVzb2x2ZShzZSldfX0pfSl9LFUucHJvdG90eXBlLmRlcGxveVppcEZpbGU9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRl'@;
put 'LG9lLHNlLGhlLHVlLGNlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGU9UigyOTc1KS5jcmVhdGVSZWFkU3RyZWFtLFs0LHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KGVlKV07Y2FzZSAxOnJldHVybiBvZT1HLnNlbnQoKSxb'@;
put 'NCx0ZShxKV07Y2FzZSAyOnJldHVybiBzZT1HLnNlbnQoKSwoaGU9bmV3IGspLmFwcGVuZCgiZmlsZSIsc2UpLHVlPSJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdChoZS5nZXRCb3VuZGFyeSgpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJp'@;
put 'dmUvZGVwbG95L3VwbG9hZCIsaGUsb2UsdWUse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSldO2Nhc2UgMzpyZXR1cm4gY2U9Ry5zZW50KCkucmVzdWx0LFsyLFByb21pc2UucmVzb2x2ZShjZSldfX0pfSl9LFUucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rp'@;
put 'b24ocSxlZSx0ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLHNlLGhlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24odWUpe3N3aXRjaCh1ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBvZT10ZT90ZS5hY2Nlc3NfdG9rZW46dm9pZCAwLHNlPXEuX3Byb2dyYW0u'@;
put 'c3RhcnRzV2l0aCgiLyIpP3EuX3Byb2dyYW06IiIuY29uY2F0KGVlLCIvIikuY29uY2F0KHEuX3Byb2dyYW0pLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9zdHAvZXhlY3V0ZSIseih6KHtfZGVidWc6MTMxfSxxKSx7X3Byb2dyYW06c2V9KSxvZSldO2Nhc2UgMTpyZXR1'@;
put 'cm5bMix7cmVzdWx0OihoZT11ZS5zZW50KCkpLnJlc3VsdCxsb2c6aGUubG9nfV19fSl9KX0sVS5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihxLGVlLHRlKXtyZXR1cm4gdm9pZCAwPT09ZWUmJihlZT0ic2FzIiksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIg'@;
put 'b2Usc2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QodGUpXTtjYXNlIDE6cmV0dXJuIG9lPWhlLnNlbnQoKSxzZT17bG9nOiIifSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9z'@;
put 'dCgiU0FTanNBcGkvY29kZS9leGVjdXRlIix7Y29kZTpxLHJ1blRpbWU6ZWV9LG9lKS50aGVuKGZ1bmN0aW9uKHVlKXt2YXIgRz11ZS5wcmludE91dHB1dCxiPXVlLnJlc3VsdDtzZS5sb2c9dWUubG9nLEcmJihzZS5wcmludE91dHB1dD1HKSxiJiYoc2Uud2Vib3V0PWIpfSkuY2F0Y2goZnVu'@;
put 'Y3Rpb24odWUpe3Rocm93KDAsai5wcmVmaXhNZXNzYWdlKSh1ZSwiRXJyb3Igd2hpbGUgc2VuZGluZyBQT1NUIHJlcXVlc3QgdG8gZXhlY3V0ZSBjb2RlLiAiKX0pXTtjYXNlIDI6cmV0dXJuIGhlLnNlbnQoKSxbMixzZV19fSl9KX0sVS5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW49ZnVuY3Rp'@;
put 'b24ocSxlZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih0ZSl7cmV0dXJuWzIsKDAsVi5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQscSxlZSldfSl9KX0sVS5wcm90b3R5cGUucmVmcmVzaFRv'@;
put 'a2Vucz1mdW5jdGlvbihxKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGVlKXtyZXR1cm5bMiwoMCxCLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LHEpXX0pfSl9LFV9KCk7Ty5TQVNqc0FwaUNs'@;
put 'aWVudD1YfSw2OTAzOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWCxVLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLG9lKXtmdW5jdGlvbiBzZShj'@;
put 'ZSl7dHJ5e3VlKGVlLm5leHQoY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gaGUoY2Upe3RyeXt1ZShlZS50aHJvdyhjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIEc7Y2UuZG9uZT90ZShjZS52YWx1ZSk6KEc9Y2UudmFsdWUsRyBpbnN0YW5jZW9mIHE/Rzpu'@;
put 'ZXcgcShmdW5jdGlvbihiKXtiKEcpfSkpLnRoZW4oc2UsaGUpfXVlKChlZT1lZS5hcHBseShYLFV8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFgsVSl7dmFyIHEsZWUsdGUsb2Usc2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdGVb'@;
put 'MF0pdGhyb3cgdGVbMV07cmV0dXJuIHRlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG9lPXtuZXh0OmhlKDApLHRocm93OmhlKDEpLHJldHVybjpoZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKG9lW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30p'@;
put 'LG9lO2Z1bmN0aW9uIGhlKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihHKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3NlOyl0cnl7aWYocT0xLGVlJiYodGU9MiZHWzBdP2VlLnJldHVybjpH'@;
put 'WzBdP2VlLnRocm93fHwoKHRlPWVlLnJldHVybikmJnRlLmNhbGwoZWUpLDApOmVlLm5leHQpJiYhKHRlPXRlLmNhbGwoZWUsR1sxXSkpLmRvbmUpcmV0dXJuIHRlO3N3aXRjaChlZT0wLHRlJiYoRz1bMiZHWzBdLHRlLnZhbHVlXSksR1swXSl7Y2FzZSAwOmNhc2UgMTp0ZT1HO2JyZWFrO2Nh'@;
put 'c2UgNDpyZXR1cm4gc2UubGFiZWwrKyx7dmFsdWU6R1sxXSxkb25lOiExfTtjYXNlIDU6c2UubGFiZWwrKyxlZT1HWzFdLEc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpHPXNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodGU9KHRlPXNlLnRyeXMpLmxlbmd0'@;
put 'aD4wJiZ0ZVt0ZS5sZW5ndGgtMV0pfHw2IT09R1swXSYmMiE9PUdbMF0pKXtzZT0wO2NvbnRpbnVlfWlmKDM9PT1HWzBdJiYoIXRlfHxHWzFdPnRlWzBdJiZHWzFdPHRlWzNdKSl7c2UubGFiZWw9R1sxXTticmVha31pZig2PT09R1swXSYmc2UubGFiZWw8dGVbMV0pe3NlLmxhYmVsPXRlWzFd'@;
put 'LHRlPUc7YnJlYWt9aWYodGUmJnNlLmxhYmVsPHRlWzJdKXtzZS5sYWJlbD10ZVsyXSxzZS5vcHMucHVzaChHKTticmVha310ZVsyXSYmc2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWV9Rz1VLmNhbGwoWCxzZSl9Y2F0Y2goYil7Rz1bNixiXSxlZT0wfWZpbmFsbHl7cT10ZT0w'@;
put 'fWlmKDUmR1swXSl0aHJvdyBHWzFdO3JldHVybnt2YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRvbmU6ITB9fShbdWUsY2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXNzaW9uTWFuYWdlcj12b2lkIDA7dmFyIEU9UigxMjMwKSxqPVIo'@;
put 'MTM5NSksVj1SKDU5MjgpLEI9Uig5Nzc4KSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWChVLHEsZWUpe3RoaXMuc2VydmVyVXJsPVUsdGhpcy5jb250ZXh0TmFtZT1xLHRoaXMucmVxdWVzdENsaWVudD1lZSx0aGlzLmxvZ2dlZEVycm9ycz1bXSx0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcj0i'@;
put 'RXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlIGxpbmsuICIsdGhpcy5zZXNzaW9ucz1bXSx0aGlzLmN1cnJlbnRDb250ZXh0PW51bGwsdGhpcy5zZXR0aW5nQ29udGV4dD0hMSx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGU9e3ByaW50ZWQ6ITEsc3RhdGU6'@;
put 'RS5TZXNzaW9uU3RhdGUuTm9TdGF0ZX0sVSYmKDAsVi5pc1VybCkoVSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwiZGVidWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWd9LHNldDpmdW5jdGlvbihVKXt0aGlzLl9kZWJ1Zz1VfSxlbnVtZXJh'@;
put 'YmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFgucHJvdG90eXBlLmlzU2Vzc2lvblZhbGlkPWZ1bmN0aW9uKFUpe2lmKCFVKXJldHVybiExO3ZhciBxPSgobmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShVLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1lKCkpLzFlMztyZXR1cm4hKCFVLmF0'@;
put 'dHJpYnV0ZXN8fHE+PVUuYXR0cmlidXRlcy5zZXNzaW9uSW5hY3RpdmVUaW1lb3V0KX0sWC5wcm90b3R5cGUucmVtb3ZlU2Vzc2lvbkZyb21Qb29sPWZ1bmN0aW9uKFUpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuaWQhPT1VLmlkfSl9'@;
put 'LFgucHJvdG90eXBlLnJlbW92ZUV4cGlyZWRTZXNzaW9ucz1mdW5jdGlvbigpe3ZhciBVPXRoaXM7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gVS5pc1Nlc3Npb25WYWxpZChxKX0pfSxYLnByb3RvdHlwZS50aHJvd0Vycm9ycz1mdW5jdGlv'@;
put 'bihVLHEpe3Rocm93IHE/KDAsQi5wcmVmaXhNZXNzYWdlKShuZXcgRXJyb3IoVS5qb2luKCIuICIpKSxxKTpuZXcgRXJyb3IoVS5tYXAoZnVuY3Rpb24oZWUpe3JldHVybiBlZS5tZXNzYWdlP2VlLm1lc3NhZ2U6ZWV9KS5qb2luKCIuICIpKX0sWC5wcm90b3R5cGUuZ2V0U2Vzc2lvbj1mdW5j'@;
put 'dGlvbihVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSx0ZSxvZSxzZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBxPVtdLGVlPSExLHRlPWZ1bmN0aW9uKCl7cS5sZW5ndGgmJiFl'@;
put 'ZSYmKGVlPSEwLHNlLnRocm93RXJyb3JzKHEpKX0sdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSx0aGlzLnNlc3Npb25zLmxlbmd0aD8odGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2wob2U9dGhpcy5zZXNzaW9uc1swXSksdGhpcy5jcmVhdGVTZXNzaW9ucyhVKS5jYXRjaChmdW5jdGlv'@;
put 'bih1ZSl7cS5wdXNoKHVlKX0pLHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oVSkuY2F0Y2goZnVuY3Rpb24odWUpe3EucHVzaCh1ZSl9KSx0ZSgpLFsyLG9lXSk6WzMsMV07Y2FzZSAxOnJldHVybiB0aGlzLmNyZWF0ZVNlc3Npb25zKFUpLmNhdGNoKGZ1bmN0aW9uKHVlKXtxLnB1c2go'@;
put 'dWUpfSksWzQsdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihVKS5jYXRjaChmdW5jdGlvbih1ZSl7cS5wdXNoKHVlKX0pXTtjYXNlIDI6cmV0dXJuIGhlLnNlbnQoKSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLG9lPXRoaXMuc2Vzc2lvbnMucG9wKCksdGhpcy5yZW1vdmVTZXNz'@;
put 'aW9uRnJvbVBvb2wob2UpLHRlKCksWzIsb2VdfX0pfSl9LFgucHJvdG90eXBlLmdldEVycm9yTWVzc2FnZT1mdW5jdGlvbihVLHEsZWUpe3JldHVybiIiLmNvbmNhdChlZSwiIHJlcXVlc3QgdG8gIikuY29uY2F0KHEsIiBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiKS5jb25jYXQoVS5yZXNw'@;
put 'b25zZS5zdGF0dXN8fCJ1bmtub3duIiwiLiAiKStVLnJlc3BvbnNlLmRhdGEubWVzc2FnZXx8IiJ9LFgucHJvdG90eXBlLmNsZWFyU2Vzc2lvbj1mdW5jdGlvbihVLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZT10aGlzO3JldHVybiBrKHRoaXMs'@;
put 'ZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBlZT0iL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoVSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShlZSxxKS50aGVuKGZ1bmN0aW9uKCl7dGUuc2Vzc2lvbnM9dGUuc2Vzc2lvbnMuZmlsdGVyKGZ1bmN0'@;
put 'aW9uKHNlKXtyZXR1cm4gc2UuaWQhPT1VfSl9KS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKHRlLmdldEVycm9yTWVzc2FnZShzZSxlZSwiREVMRVRFIiksIkVycm9yIHdoaWxlIGRlbGV0aW5nIHNlc3Npb24uICIpfSldO2Nhc2UgMTpyZXR1cm5bMixvZS5z'@;
put 'ZW50KCldfX0pfSl9LFgucHJvdG90eXBlLmNyZWF0ZVNlc3Npb25zPWZ1bmN0aW9uKFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9'@;
put 'W10sdGhpcy5zZXNzaW9ucy5sZW5ndGg/WzMsMl06WzQsKDAsVi5hc3luY0ZvckVhY2gpKG5ldyBBcnJheSgxKSxmdW5jdGlvbigpe3JldHVybiBJKGVlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpy'@;
put 'ZXR1cm5bNCx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKFUpLmNhdGNoKGZ1bmN0aW9uKHNlKXtxLnB1c2goc2UpfSldO2Nhc2UgMTpyZXR1cm4gb2Uuc2VudCgpLFsyXX19KX0pfSldO2Nhc2UgMTp0ZS5zZW50KCksdGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuIHEubGVuZ3RoJiZ0aGlz'@;
put 'LnRocm93RXJyb3JzKHEsIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpLFsyXX19KX0pfSxYLnByb3RvdHlwZS53YWl0Rm9yQ3VycmVudENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVT10aGlzO3JldHVybiBrKHRo'@;
put 'aXMsZnVuY3Rpb24ocSl7cmV0dXJuWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oZWUpe3ZhciB0ZT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe1UuY3VycmVudENvbnRleHQmJihVLnNldHRpbmdDb250ZXh0PSExLGNsZWFySW50ZXJ2YWwodGUpLGVlKCkpfSwxMDApfSldfSl9KX0sWC5wcm90b3R5'@;
put 'cGUuY3JlYXRlQW5kV2FpdEZvclNlc3Npb249ZnVuY3Rpb24oVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsdGUsb2Usc2UsaGU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHVlKXtzd2l0Y2godWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhp'@;
put 'cy5jdXJyZW50Q29udGV4dD9bMyw0XTp0aGlzLnNldHRpbmdDb250ZXh0P1szLDJdOls0LHRoaXMuc2V0Q3VycmVudENvbnRleHQoVSldO2Nhc2UgMTpyZXR1cm4gdWUuc2VudCgpLFszLDRdO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpXTtjYXNlIDM6dWUu'@;
put 'c2VudCgpLHVlLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBxPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KHRoaXMuY3VycmVudENvbnRleHQuaWQsIi9zZXNzaW9ucyIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHEse30sVSkuY2F0Y2go'@;
put 'ZnVuY3Rpb24oY2Upe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShoZS5nZXRFcnJvck1lc3NhZ2UoY2UscSwiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDU6aWYoZWU9dWUuc2VudCgpLCh0ZT1lZS5yZXN1bHQpLmV0YWc9b2U9ZWUuZXRhZywhKHNl'@;
put 'PXRlLmxpbmtzLmZpbmQoZnVuY3Rpb24oY2Upe3JldHVybiJzdGF0ZSI9PT1jZS5yZWx9KSkpdGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJuIHRlLnN0YXRlVXJsPXNlLmhyZWYsWzQsdGhpcy53YWl0Rm9yU2Vzc2lvbih0ZSxvZSxVKV07Y2FzZSA2OnJldHVybiB1ZS5z'@;
put 'ZW50KCksdGhpcy5zZXNzaW9ucy5wdXNoKHRlKSxbMix0ZV19fSl9KX0sWC5wcm90b3R5cGUuc2V0Q3VycmVudENvbnRleHQ9ZnVuY3Rpb24oVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsb2Usc2U9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9u'@;
put 'KGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5jdXJyZW50Q29udGV4dD9bMywyXToocT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksdGhpcy5zZXR0aW5nQ29udGV4dD0hMCxbNCx0aGlzLnJlcXVlc3RDbGll'@;
put 'bnQuZ2V0KHEsVSkuY2F0Y2goZnVuY3Rpb24odWUpe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShzZS5nZXRFcnJvck1lc3NhZ2UodWUscSwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgbGlzdCBvZiBjb250ZXh0cy4gIil9KV0pO2Nhc2UgMTppZihlZT1oZS5zZW50KCkucmVzdWx0LCEo'@;
put 'b2U9KGVlJiZlZS5pdGVtcyYmZWUuaXRlbXMubGVuZ3RoP2VlLml0ZW1zOltdKS5maW5kKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUubmFtZT09PXNlLmNvbnRleHROYW1lfSkpKXRocm93IG5ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KHRoaXMuY29udGV4dE5hbWUsIicgd2FzIG5v'@;
put 'dCBmb3VuZCBvbiB0aGUgc2VydmVyICIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiLiIpKTt0aGlzLmN1cnJlbnRDb250ZXh0PW9lLFByb21pc2UucmVzb2x2ZSgpLGhlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSxYLnByb3RvdHlwZS53YWl0Rm9yU2Vzc2lvbj1mdW5jdGlvbihV'@;
put 'LHEsZWUpe3ZhciB0ZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2UsaGUsdWUsY2UsYixEO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gc2U9VS5zdGF0ZVVybCxoZT16LmxvZ2dlcnx8Sywob2U9'@;
put 'VS5zdGF0ZSkhPT1FLlNlc3Npb25TdGF0ZS5QZW5kaW5nJiZvZSE9PUUuU2Vzc2lvblN0YXRlLlJ1bm5pbmcmJm9lIT09RS5TZXNzaW9uU3RhdGUuTm9TdGF0ZT9bMyw2XTpzZT8odGhpcy5kZWJ1ZyYmIXRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkJiYoaGUuaW5mbygiUG9sbGlu'@;
put 'ZzogIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwrc2UpKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMCksdWU9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoc2UsIj93YWl0PTMwIiksWzQsdGhpcy5nZXRTZXNzaW9uU3RhdGUodWUscSxlZSkuY2F0Y2goZnVuY3Rp'@;
put 'b24oTil7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKE4sIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHNlc3Npb24uICIpfSldKTpbMyw0XTtjYXNlIDE6cmV0dXJuIGNlPUguc2VudCgpLGI9Y2UucmVzcG9uc2VTdGF0dXMsb2U9Y2UucmVzdWx0LnRyaW0oKSx0aGlzLmRlYnVnJiZ0aGlzLnBy'@;
put 'aW50ZWRTZXNzaW9uU3RhdGUuc3RhdGUhPT1vZSYmKGhlLmluZm8oIkN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBpcyAnIi5jb25jYXQob2UsIiciKSksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlPW9lLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSExKSxvZT9bMywzXToo'@;
put 'RD1uZXcgai5Ob1Nlc3Npb25TdGF0ZUVycm9yKGIsdGhpcy5zZXJ2ZXJVcmwrc2UsbnVsbD09PSh0ZT1VLmxpbmtzLmZpbmQoZnVuY3Rpb24oTil7cmV0dXJuImxvZyI9PT1OLnJlbH0pKXx8dm9pZCAwPT09dGU/dm9pZCAwOnRlLmhyZWYpLHRoaXMubG9nZ2VkRXJyb3JzLmZpbmQoZnVuY3Rp'@;
put 'b24oTil7cmV0dXJuIE4uc2VydmVyUmVzcG9uc2VTdGF0dXM9PT1ELnNlcnZlclJlc3BvbnNlU3RhdHVzfSl8fCh0aGlzLmxvZ2dlZEVycm9ycy5wdXNoKEQpLGhlLmluZm8oRC5tZXNzYWdlKSksWzQsdGhpcy53YWl0Rm9yU2Vzc2lvbihVLHEsZWUpXSk7Y2FzZSAyOnJldHVyblsyLEguc2Vu'@;
put 'dCgpXTtjYXNlIDM6Y2FzZSA2OnJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1bXSxbMixvZV07Y2FzZSA0OnRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO2Nhc2UgNTpyZXR1cm5bMyw3XTtjYXNlIDc6cmV0dXJuWzJdfX0pfSl9LFgucHJvdG90eXBlLmdldFNlc3Npb25TdGF0ZT1m'@;
put 'dW5jdGlvbihVLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0ZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoVSxlZSwidGV4dC9wbGFp'@;
put 'biIseyJJZi1Ob25lLU1hdGNoIjpxfSkudGhlbihmdW5jdGlvbihzZSl7cmV0dXJue3Jlc3VsdDpzZS5yZXN1bHQscmVzcG9uc2VTdGF0dXM6c2Uuc3RhdHVzfX0pLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkodGUuZ2V0RXJyb3JNZXNzYWdlKHNlLFUsIkdF'@;
put 'VCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUuICIpfSldO2Nhc2UgMTpyZXR1cm5bMixvZS5zZW50KCldfX0pfSl9LFgucHJvdG90eXBlLmdldFZhcmlhYmxlPWZ1bmN0aW9uKFUscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRl'@;
put 'LG9lPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvc2Vzc2lvbnMvIikuY29uY2F0KFUsIi92YXJpYWJsZXMvIikuY29uY2F0KHEpLFs0LHRoaXMucmVxdWVz'@;
put 'dENsaWVudC5nZXQodGUsZWUpLmNhdGNoKGZ1bmN0aW9uKGhlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkob2UuZ2V0RXJyb3JNZXNzYWdlKGhlLHRlLCJHRVQiKSwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc2Vzc2lvbiB2YXJpYWJsZSAnIi5jb25jYXQocSwiJy4gIikpfSldO2Nhc2UgMTpy'@;
put 'ZXR1cm5bMixzZS5zZW50KCldfX0pfSl9LFh9KCk7Ty5TZXNzaW9uTWFuYWdlcj1ZfSwxNjIyOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258'@;
put 'fGZ1bmN0aW9uKHRlKXtmb3IodmFyIG9lLHNlPTEsaGU9YXJndW1lbnRzLmxlbmd0aDtzZTxoZTtzZSsrKWZvcih2YXIgdWUgaW4gb2U9YXJndW1lbnRzW3NlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2UsdWUpJiYodGVbdWVdPW9lW3VlXSk7cmV0dXJuIHRlfSxJ'@;
put 'LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odGUsb2Usc2UsaGUpe3JldHVybiBuZXcoc2V8fChzZT1Qcm9taXNlKSkoZnVuY3Rpb24odWUsY2Upe2Z1bmN0aW9uIEcoSCl7dHJ5e0QoaGUubmV4dChIKSl9Y2F0Y2goTil7Y2UoTil9fWZ1'@;
put 'bmN0aW9uIGIoSCl7dHJ5e0QoaGUudGhyb3coSCkpfWNhdGNoKE4pe2NlKE4pfX1mdW5jdGlvbiBEKEgpe3ZhciBOO0guZG9uZT91ZShILnZhbHVlKTooTj1ILnZhbHVlLE4gaW5zdGFuY2VvZiBzZT9OOm5ldyBzZShmdW5jdGlvbihnKXtnKE4pfSkpLnRoZW4oRyxiKX1EKChoZT1oZS5hcHBs'@;
put 'eSh0ZSxvZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odGUsb2Upe3ZhciBzZSxoZSx1ZSxjZSxHPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnVlWzBdKXRocm93IHVlWzFdO3JldHVybiB1ZVsxXX0sdHJ5czpbXSxvcHM6W119O3Jl'@;
put 'dHVybiBjZT17bmV4dDpiKDApLHRocm93OmIoMSkscmV0dXJuOmIoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihjZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjZTtmdW5jdGlvbiBiKEQpe3JldHVybiBmdW5jdGlvbihIKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24oTil7aWYoc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7RzspdHJ5e2lmKHNlPTEsaGUmJih1ZT0yJk5bMF0/aGUucmV0dXJuOk5bMF0/aGUudGhyb3d8fCgodWU9aGUucmV0dXJuKSYmdWUuY2FsbChoZSksMCk6aGUubmV4'@;
put 'dCkmJiEodWU9dWUuY2FsbChoZSxOWzFdKSkuZG9uZSlyZXR1cm4gdWU7c3dpdGNoKGhlPTAsdWUmJihOPVsyJk5bMF0sdWUudmFsdWVdKSxOWzBdKXtjYXNlIDA6Y2FzZSAxOnVlPU47YnJlYWs7Y2FzZSA0OnJldHVybiBHLmxhYmVsKysse3ZhbHVlOk5bMV0sZG9uZTohMX07Y2FzZSA1Okcu'@;
put 'bGFiZWwrKyxoZT1OWzFdLE49WzBdO2NvbnRpbnVlO2Nhc2UgNzpOPUcub3BzLnBvcCgpLEcudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHVlPSh1ZT1HLnRyeXMpLmxlbmd0aD4wJiZ1ZVt1ZS5sZW5ndGgtMV0pfHw2IT09TlswXSYmMiE9PU5bMF0pKXtHPTA7Y29udGludWV9'@;
put 'aWYoMz09PU5bMF0mJighdWV8fE5bMV0+dWVbMF0mJk5bMV08dWVbM10pKXtHLmxhYmVsPU5bMV07YnJlYWt9aWYoNj09PU5bMF0mJkcubGFiZWw8dWVbMV0pe0cubGFiZWw9dWVbMV0sdWU9TjticmVha31pZih1ZSYmRy5sYWJlbDx1ZVsyXSl7Ry5sYWJlbD11ZVsyXSxHLm9wcy5wdXNoKE4p'@;
put 'O2JyZWFrfXVlWzJdJiZHLm9wcy5wb3AoKSxHLnRyeXMucG9wKCk7Y29udGludWV9Tj1vZS5jYWxsKHRlLEcpfWNhdGNoKGcpe049WzYsZ10saGU9MH1maW5hbGx5e3NlPXVlPTB9aWYoNSZOWzBdKXRocm93IE5bMV07cmV0dXJue3ZhbHVlOk5bMF0/TlsxXTp2b2lkIDAsZG9uZTohMH19KFtE'@;
put 'LEhdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5leGVjdXRlT25Db21wdXRlQXBpPXZvaWQgMDt2YXIgaj1SKDc3NTcpLFY9Uig5Nzc4KSxCPVIoMzYwNyksWT1SKDcwNCksWD1SKDU5MjgpLFU9Uig3MTQpLHE9UigxMzQzKSxlZT1SKDY0'@;
put 'OTYpO08uZXhlY3V0ZU9uQ29tcHV0ZUFwaT1mdW5jdGlvbiB0ZShvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILE4sZyxDLFMsdil7dmFyIHAsdztyZXR1cm4gdm9pZCAwPT09RCYmKEQ9bnVsbCksdm9pZCAwPT09SCYmKEg9ITEpLHZvaWQgMD09PU4mJihOPSExKSx2b2lkIDA9PT1nJiYoZz0hMCks'@;
put 'dm9pZCAwPT09UyYmKFM9ITEpLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEosbmUsZGUsZmUseGUsTGUsRmUsT2UsamUsV2UsS2UsWWUsUWUsbHQsUGUsYmUsQWUsVGUscWUsWGUsVWUsaHQsTWU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKERlKXtzd2l0Y2goRGUu'@;
put 'bGFiZWwpe2Nhc2UgMDpyZXR1cm4gSj0oYnx8e30pLmFjY2Vzc190b2tlbixiP1s0LCgwLFkuZ2V0VG9rZW5zKShvZSxiKV06WzMsMl07Y2FzZSAxOko9RGUuc2VudCgpLmFjY2Vzc190b2tlbixEZS5sYWJlbD0yO2Nhc2UgMjpuZT16LmxvZ2dlcnx8SyxEZS5sYWJlbD0zO2Nhc2UgMzpyZXR1'@;
put 'cm4gRGUudHJ5cy5wdXNoKFszLDE5LCwyMF0pLGRlPXZvaWQgMCxbNCxzZS5nZXRTZXNzaW9uKEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbi4gIil9KV07Y2FzZSA0OnJldHVybiBmZT1EZS5zZW50'@;
put 'KCksZGU9ZmUuaWQsUz9bNCxzZS5nZXRWYXJpYWJsZShkZSwiU1lTSk9CSUQiLEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiB2YXJpYWJsZS4gIil9KV06WzMsNl07Y2FzZSA1Oih4ZT1EZS5zZW50'@;
put 'KCkucmVzdWx0KSYmeGUudmFsdWUmJihMZT1oZT91ZS5zcGxpdChoZSkuam9pbigiIikucmVwbGFjZSgvXlwvLywiIik6dWUsKHoubG9nZ2VyfHxLKS5pbmZvKCJUcmlnZ2VyaW5nICciLmNvbmNhdChMZSwiJyB3aXRoIFBJRCAiKS5jb25jYXQoeGUudmFsdWUsIiBhdCAiKS5jb25jYXQoKDAs'@;
put 'ai50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTKSgpKSkpLERlLmxhYmVsPTY7Y2FzZSA2OnJldHVybiBGZT12b2lkIDAsKDAsWC5pc1JlbGF0aXZlUGF0aCkodWUpP0ZlPSJleGVjLSIuY29uY2F0KHVlLmluY2x1ZGVzKCIvIik/dWUuc3BsaXQoIi8iKVsxXTp1ZSk6KE9lPXVlLnNwbGl0KCIv'@;
put 'IiksRmU9T2UucG9wKCkpLGplPXtTWVNfSkVTX0pPQl9VUkk6IiIsX3Byb2dyYW06KDAsWC5pc1JlbGF0aXZlUGF0aCkodWUpP2hlKyIvIit1ZTp1ZX0sdiYmKGplPUkoSSh7fSxqZSksdikpLEgmJihqZT1JKEkoe30samUpLHtfREVCVUc6MTMxfSkpLFdlPVtdLEQ/SlNPTi5zdHJpbmdpZnko'@;
put 'RCkuaW5jbHVkZXMoIjsiKT9bNCwoMCxlZS51cGxvYWRUYWJsZXMpKG9lLEQsSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIHRhYmxlcy4gIil9KV06WzMsOF06WzMsOV07Y2FzZSA3OnJldHVybiBXZT1EZS5z'@;
put 'ZW50KCksamUuX3dlYmluX2ZpbGVfY291bnQ9V2UubGVuZ3RoLFdlLmZvckVhY2goZnVuY3Rpb24oemUsb3Qpe2plWyJfd2ViaW5fZmlsZXVyaSIuY29uY2F0KG90KzEpXT0iL2ZpbGVzL2ZpbGVzLyIuY29uY2F0KHplLmZpbGUuaWQpLGplWyJfd2ViaW5fbmFtZSIuY29uY2F0KG90KzEpXT16'@;
put 'ZS50YWJsZU5hbWV9KSxbMyw5XTtjYXNlIDg6amU9SShJKHt9LGplKSwoMCxVLmZvcm1hdERhdGFGb3JSZXF1ZXN0KShEKSksRGUubGFiZWw9OTtjYXNlIDk6cmV0dXJuIEtlPXtuYW1lOkZlfHwiRGVmYXVsdCBKb2IgTmFtZSIsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGNvZGU6'@;
put 'Y2UsdmFyaWFibGVzOmplLHZlcnNpb246Mn0sWzQsb2UucG9zdCgiL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoZGUsIi9qb2JzIiksS2UsSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIpfSldO2Nh'@;
put 'c2UgMTA6cmV0dXJuIFllPURlLnNlbnQoKSxRZT1ZZS5yZXN1bHQsZz8oSCYmKG5lLmluZm8oIkpvYiBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yICciLmNvbmNhdChGZSwiJy4iKSksbmUuaW5mbygiWW91IGNhbiBtb25pdG9yIHRoZSBqb2IgcHJvZ3Jlc3MgYXQgJyIuY29uY2F0KG9lLmdldEJh'@;
put 'c2VVcmwoKSkuY29uY2F0KFFlLmxpbmtzLmZpbmQoZnVuY3Rpb24oemUpe3JldHVybiJzdGF0ZSI9PT16ZS5yZWx9KS5ocmVmLCInLiIpKSksWzQsKDAscS5wb2xsSm9iU3RhdGUpKG9lLFFlLEgsYixDLHtzZXNzaW9uOmZlLHNlc3Npb25NYW5hZ2VyOnNlfSkuY2F0Y2goZnVuY3Rpb24oemUp'@;
put 'e3JldHVybiBrKE1lLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb3QsdXQsTXQsSHQsUHQsb247cmV0dXJuIEUodGhpcyxmdW5jdGlvbihDbil7c3dpdGNoKENuLmxhYmVsKXtjYXNlIDA6cmV0dXJuIG90PW51bGw9PT0oUHQ9emU/LnJlc3BvbnNlKXx8dm9pZCAwPT09UHQ/dm9pZCAw'@;
put 'OlB0LmRhdGEsdXQ9L2Vycj1bMC05XSosLy5leGVjKG90KSwiNTExMyIhPT0obnVsbD09PShvbj11dD8uWzBdKXx8dm9pZCAwPT09b24/dm9pZCAwOm9uLnNsaWNlKDQsLTEpKT9bMywyXTooTXQ9UWUubGlua3MuZmluZChmdW5jdGlvbihVdCl7cmV0dXJuInVwIj09PVV0LnJlbH0pLmhyZWYr'@;
put 'Ii9sb2ciLEh0PXplLFs0LCgwLFguZmV0Y2hMb2dCeUNodW5rcykob2UsSixNdCwxZTYpXSk7Y2FzZSAxOkh0LmxvZz1Dbi5zZW50KCksQ24ubGFiZWw9MjtjYXNlIDI6dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfX0pfSl9'@;
put 'KV0pOlsyLGZlXTtjYXNlIDExOnJldHVybiBsdD1EZS5zZW50KCksYj9bNCwoMCxZLmdldFRva2Vucykob2UsYildOlszLDEzXTtjYXNlIDEyOko9RGUuc2VudCgpLmFjY2Vzc190b2tlbixEZS5sYWJlbD0xMztjYXNlIDEzOnJldHVybls0LG9lLmdldCgiL2NvbXB1dGUvc2Vzc2lvbnMvIi5j'@;
put 'b25jYXQoZGUsIi9qb2JzLyIpLmNvbmNhdChRZS5pZCksSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSldO2Nhc2UgMTQ6cmV0dXJuIFBlPURlLnNlbnQoKS5yZXN1bHQsYmU9dm9pZCAwLEFlPSIi'@;
put 'LFRlPVBlLmxpbmtzLmZpbmQoZnVuY3Rpb24oemUpe3JldHVybiJsb2ciPT09emUucmVsfSksSCYmVGU/KHFlPSIiLmNvbmNhdChUZS5ocmVmLCIvY29udGVudCIpLFhlPW51bGwhPT0odz1udWxsPT09KHA9UGUubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PXA/dm9pZCAwOnAubGluZUNvdW50'@;
put 'KSYmdm9pZCAwIT09dz93OjFlNixbNCwoMCxYLmZldGNoTG9nQnlDaHVua3MpKG9lLEoscWUsWGUpXSk6WzMsMTZdO2Nhc2UgMTU6QWU9RGUuc2VudCgpLERlLmxhYmVsPTE2O2Nhc2UgMTY6aWYobHQ9PT1xLkpvYlN0YXRlLkZhaWxlZHx8bHQ9PT1xLkpvYlN0YXRlLkVycm9yKXRocm93IG5l'@;
put 'dyBCLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcihQZSxBZSk7cmV0dXJuIE4/KFVlPSIvY29tcHV0ZS9zZXNzaW9ucy8iLmNvbmNhdChkZSwiL2ZpbGVyZWZzL193ZWJvdXQvY29udGVudCIpLFs0LG9lLmdldChVZSxKLCJ0ZXh0L3BsYWluIikuY2F0Y2goZnVuY3Rpb24oemUpe3JldHVybiBr'@;
put 'KE1lLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb3QsdXQsTXQsSHQ7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihQdCl7c3dpdGNoKFB0LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHplIGluc3RhbmNlb2YgQi5Ob3RGb3VuZEVycm9yJiZUZT8ob3Q9IiIuY29uY2F0KFRlLmhyZWYsIi9jb250'@;
put 'ZW50IiksdXQ9bnVsbCE9PShIdD1udWxsPT09KE10PVBlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1NdD92b2lkIDA6TXQubGluZUNvdW50KSYmdm9pZCAwIT09SHQ/SHQ6MWU2LFs0LCgwLFguZmV0Y2hMb2dCeUNodW5rcykob2UsSixvdCx1dCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIEFl'@;
put 'PVB0LnNlbnQoKSxbMixQcm9taXNlLnJlamVjdCh7c3RhdHVzOjUwMCxsb2c6QWV9KV07Y2FzZSAyOnJldHVyblsyLHtyZXN1bHQ6SlNPTi5zdHJpbmdpZnkoemUpfV19fSl9KX0pXSk6WzIse2pvYjpQZSxsb2c6QWV9XTtjYXNlIDE3OnJldHVybiBiZT1EZS5zZW50KCksWzQsc2UuY2xlYXJT'@;
put 'ZXNzaW9uKGRlLEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGNsZWFyaW5nIHNlc3Npb24uICIpfSldO2Nhc2UgMTg6cmV0dXJuIERlLnNlbnQoKSxbMix7cmVzdWx0OmJlPy5yZXN1bHQsbG9nOkFlfV07Y2FzZSAxOTppZig0'@;
put 'MDQ9PT0oaHQ9RGUuc2VudCgpKS5zdGF0dXMpcmV0dXJuWzIsdGUob2Usc2UsaGUsdWUsY2UsRyxiLEQsSCwhMSwhMCldO3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKShodCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHNjcmlwdC4gIik7Y2FzZSAyMDpyZXR1cm5bMl19fSl9KX19LDc0NTg6ZnVu'@;
put 'Y3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNl'@;
put 'KXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkp'@;
put 'LnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6'@;
put 'W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJvdzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihv'@;
put 'ZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSks'@;
put 'MCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2Fz'@;
put 'ZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29u'@;
put 'dGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0mJnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNo'@;
put 'KHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZToh'@;
put 'MH19KFt0ZSxvZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEZpbGVTdHJlYW09dm9pZCAwO3ZhciBrPVIoMjk3NSksRT1SKDc3NTcpO08uZ2V0RmlsZVN0cmVhbT1mdW5jdGlvbihqLFYpe3JldHVybiBLKHZvaWQgMCx2b2lkIDAs'@;
put 'dm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGVlKXtzd2l0Y2goZWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gQj1SKDI5NzUpLmNyZWF0ZVdyaXRlU3RyZWFtLFk9Vnx8ei5jd2QoKSxbNCwoMCxrLmlzRm9sZGVyKShZKV07Y2FzZSAxOnJldHVy'@;
put 'biBlZS5zZW50KCk/KFg9IiIuY29uY2F0KGoubmFtZXx8ImpvYiIsIi0iKS5jb25jYXQoKDAsRS5nZW5lcmF0ZVRpbWVzdGFtcCkoKSwiLmxvZyIpLFU9UigyNTIwKSxxPVUuam9pbihWfHx6LmN3ZCgpLFgpLFs0LEIocSldKTpbMywzXTtjYXNlIDI6Y2FzZSA0OnJldHVyblsyLGVlLnNlbnQo'@;
put 'KV07Y2FzZSAzOnJldHVybls0LEIoWSldfX0pfSl9fSwxMzQzOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKG9lKXtmb3Io'@;
put 'dmFyIHNlLGhlPTEsdWU9YXJndW1lbnRzLmxlbmd0aDtoZTx1ZTtoZSsrKWZvcih2YXIgY2UgaW4gc2U9YXJndW1lbnRzW2hlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsY2UpJiYob2VbY2VdPXNlW2NlXSk7cmV0dXJuIG9lfSxJLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ob2Usc2UsaGUsdWUpe3JldHVybiBuZXcoaGV8fChoZT1Qcm9taXNlKSkoZnVuY3Rpb24oY2UsRyl7ZnVuY3Rpb24gYihOKXt0cnl7SCh1ZS5uZXh0KE4pKX1jYXRjaChnKXtHKGcpfX1mdW5jdGlvbiBEKE4pe3RyeXtIKHVl'@;
put 'LnRocm93KE4pKX1jYXRjaChnKXtHKGcpfX1mdW5jdGlvbiBIKE4pe3ZhciBnO04uZG9uZT9jZShOLnZhbHVlKTooZz1OLnZhbHVlLGcgaW5zdGFuY2VvZiBoZT9nOm5ldyBoZShmdW5jdGlvbihDKXtDKGcpfSkpLnRoZW4oYixEKX1IKCh1ZT11ZS5hcHBseShvZSxzZXx8W10pKS5uZXh0KCkp'@;
put 'fSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZSx1ZSxjZSxHLGI9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJuIGNlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEc9e25leHQ6RCgwKSx0aHJv'@;
put 'dzpEKDEpLHJldHVybjpEKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoR1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxHO2Z1bmN0aW9uIEQoSCl7cmV0dXJuIGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihnKXtpZihoZSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtiOyl0cnl7aWYoaGU9MSx1ZSYmKGNlPTImZ1swXT91ZS5yZXR1cm46Z1swXT91ZS50aHJvd3x8KChjZT11ZS5yZXR1cm4pJiZjZS5jYWxsKHVlKSwwKTp1ZS5uZXh0KSYmIShjZT1jZS5jYWxsKHVlLGdbMV0p'@;
put 'KS5kb25lKXJldHVybiBjZTtzd2l0Y2godWU9MCxjZSYmKGc9WzImZ1swXSxjZS52YWx1ZV0pLGdbMF0pe2Nhc2UgMDpjYXNlIDE6Y2U9ZzticmVhaztjYXNlIDQ6cmV0dXJuIGIubGFiZWwrKyx7dmFsdWU6Z1sxXSxkb25lOiExfTtjYXNlIDU6Yi5sYWJlbCsrLHVlPWdbMV0sZz1bMF07Y29u'@;
put 'dGludWU7Y2FzZSA3Omc9Yi5vcHMucG9wKCksYi50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoY2U9KGNlPWIudHJ5cykubGVuZ3RoPjAmJmNlW2NlLmxlbmd0aC0xXSl8fDYhPT1nWzBdJiYyIT09Z1swXSkpe2I9MDtjb250aW51ZX1pZigzPT09Z1swXSYmKCFjZXx8Z1sxXT5j'@;
put 'ZVswXSYmZ1sxXTxjZVszXSkpe2IubGFiZWw9Z1sxXTticmVha31pZig2PT09Z1swXSYmYi5sYWJlbDxjZVsxXSl7Yi5sYWJlbD1jZVsxXSxjZT1nO2JyZWFrfWlmKGNlJiZiLmxhYmVsPGNlWzJdKXtiLmxhYmVsPWNlWzJdLGIub3BzLnB1c2goZyk7YnJlYWt9Y2VbMl0mJmIub3BzLnBvcCgp'@;
put 'LGIudHJ5cy5wb3AoKTtjb250aW51ZX1nPXNlLmNhbGwob2UsYil9Y2F0Y2goQyl7Zz1bNixDXSx1ZT0wfWZpbmFsbHl7aGU9Y2U9MH1pZig1JmdbMF0pdGhyb3cgZ1sxXTtyZXR1cm57dmFsdWU6Z1swXT9nWzFdOnZvaWQgMCxkb25lOiEwfX0oW0gsTl0pfX19LGo9dGhpcyYmdGhpcy5fX3Nw'@;
put 'cmVhZEFycmF5fHxmdW5jdGlvbihvZSxzZSxoZSl7aWYoaGV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgdWUsY2U9MCxHPXNlLmxlbmd0aDtjZTxHO2NlKyspIXVlJiZjZSBpbiBzZXx8KHVlfHwodWU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc2UsMCxjZSkpLHVlW2NlXT1z'@;
put 'ZVtjZV0pO3JldHVybiBvZS5jb25jYXQodWV8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHNlKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRvUG9sbD1PLnBvbGxKb2JTdGF0ZT1PLkpvYlN0YXRlPXZvaWQgMDt2YXIgVixvZSxCPVIo'@;
put 'NzA0KSxZPVIoMTM5NSksWD1SKDEyMzApLFU9Uig1OTI4KTsob2U9Vj1PLkpvYlN0YXRlfHwoTy5Kb2JTdGF0ZT17fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixvZS5SdW5uaW5nPSJydW5uaW5nIixvZS5QZW5kaW5nPSJwZW5kaW5nIixvZS5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLG9l'@;
put 'Lk5vU3RhdGU9IiIsb2UuRmFpbGVkPSJmYWlsZWQiLG9lLkVycm9yPSJlcnJvciIsTy5wb2xsSm9iU3RhdGU9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRCxILE4sZyxDLFMsdixwLHcsSjtyZXR1cm4gRSh0'@;
put 'aGlzLGZ1bmN0aW9uKG5lKXtzd2l0Y2gobmUubGFiZWwpe2Nhc2UgMDppZihiPXoubG9nZ2VyfHxLLEQ9Y2U/LnN0cmVhbUxvZ3x8ITEsSD1be21heFBvbGxDb3VudDoyMDAscG9sbEludGVydmFsOjMwMH0se21heFBvbGxDb3VudDozMDAscG9sbEludGVydmFsOjNlM30se21heFBvbGxDb3Vu'@;
put 'dDo1MDAscG9sbEludGVydmFsOjNlNH0se21heFBvbGxDb3VudDozNDAwLHBvbGxJbnRlcnZhbDo2ZTR9XSx2b2lkIDAhPT1jZT8oTj1bY2VdLHZvaWQgMCE9PShnPWNlLnBvbGxTdHJhdGVneSk/KHRlKGcpLGc9Zy5zb3J0KGZ1bmN0aW9uKGRlLGZlKXtyZXR1cm4gZGUubWF4UG9sbENvdW50'@;
put 'LWZlLm1heFBvbGxDb3VudH0pLE49aihqKFtdLE4sITApLGcsITApKTpOPWooaihbXSxOLCEwKSxILCEwKSk6Tj1ILEM9Ti5zcGxpY2UoMCwxKVswXSxjZT1JKEkoe30sQyksY2V8fHt9KSwhKFM9c2UubGlua3MuZmluZChmdW5jdGlvbihkZSl7cmV0dXJuInN0YXRlIj09PWRlLnJlbH0pKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkpvYiBzdGF0ZSBsaW5rIHdhcyBub3QgZm91bmQuIik7cmV0dXJuWzQscShvZSxzZSxWLk5vU3RhdGUsaGUsdWUpLmNhdGNoKGZ1bmN0aW9uKGRlKXtyZXR1cm4gYi5lcnJvcigiRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gIi5jb25jYXQoUy5ocmVmLCIu'@;
put 'IFN0YXJ0aW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5nLiIpLGRlKSxWLlVuYXZhaWxhYmxlfSldO2Nhc2UgMTpyZXR1cm4gdj1uZS5zZW50KCkscD0wLHY9PT1WLkNvbXBsZXRlZD9bMixQcm9taXNlLnJlc29sdmUodildOkQmJigwLFUuaXNOb2RlKSgpP1s0LCgwLFIoNzQ1'@;
put 'OCkuZ2V0RmlsZVN0cmVhbSkoc2UsY2UubG9nRm9sZGVyUGF0aCldOlszLDNdO2Nhc2UgMjp3PW5lLnNlbnQoKSxuZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCwoMCxPLmRvUG9sbCkob2Usc2UsdixoZSxwLGNlLHVlLEQsdyxHKV07Y2FzZSA0OmlmKEo9bmUuc2VudCgpLHA9Si5wb2xsQ291'@;
put 'bnQsIWVlKHY9Si5zdGF0ZSl8fHA+PWNlLm1heFBvbGxDb3VudCYmIU4ubGVuZ3RoKXJldHVyblsyLHZdO25lLmxhYmVsPTU7Y2FzZSA1OnJldHVybiBOLmxlbmd0aCYmZWUodik/KEM9Ti5zcGxpY2UoMCwxKVswXSxjZSYmKEMubG9nRm9sZGVyUGF0aD1jZS5sb2dGb2xkZXJQYXRoKSxbNCwo'@;
put 'MCxPLmRvUG9sbCkob2Usc2UsdixoZSxwLEMsdWUsRCx3LEcpXSk6WzMsN107Y2FzZSA2OnJldHVybiBKPW5lLnNlbnQoKSx2PUouc3RhdGUscD1KLnBvbGxDb3VudCxbMyw1XTtjYXNlIDc6cmV0dXJuIHcmJncuZW5kKCksWzIsdl19fSl9KX07dmFyIHE9ZnVuY3Rpb24ob2Usc2UsaGUsdWUs'@;
put 'Y2Upe3JldHVybiBrKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcsYjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIEc9c2UubGlua3MuZmluZChmdW5jdGlvbihIKXtyZXR1cm4ic3RhdGUiPT09SC5yZWx9KSxlZSho'@;
put 'ZSk/KGI9dm9pZCAwLGNlP1s0LCgwLEIuZ2V0VG9rZW5zKShvZSxjZSldOlszLDJdKTpbMyw0XTtjYXNlIDE6Yj1ELnNlbnQoKSxELmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LG9lLmdldCgiIi5jb25jYXQoRy5ocmVmLCI/X2FjdGlvbj13YWl0JndhaXQ9MzAwIiksYj8uYWNjZXNzX3Rva2Vu'@;
put 'LCJ0ZXh0L3BsYWluIix7fSx1ZSkuY2F0Y2goZnVuY3Rpb24oSCl7dGhyb3cgbmV3IFkuSm9iU3RhdGVQb2xsRXJyb3Ioc2UuaWQsSCl9KV07Y2FzZSAzOnJldHVyblsyLEQuc2VudCgpLnJlc3VsdC50cmltKCldO2Nhc2UgNDpyZXR1cm5bMixoZV19fSl9KX0sZWU9ZnVuY3Rpb24ob2Upe3Jl'@;
put 'dHVybiBvZT09PVYuUnVubmluZ3x8b2U9PT1WLk5vU3RhdGV8fG9lPT09Vi5QZW5kaW5nfHxvZT09PVYuVW5hdmFpbGFibGV9O08uZG9Qb2xsPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTil7cmV0dXJuIGsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxD'@;
put 'LFMsdixwLHcsSixuZSxkZSxmZSx4ZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKExlKXtzd2l0Y2goTGUubGFiZWwpe2Nhc2UgMDpnPUcubWF4UG9sbENvdW50LEM9Ry5wb2xsSW50ZXJ2YWwsUz16LmxvZ2dlcnx8Syx2PXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oRmUpe3JldHVybiJzdGF0ZSI9'@;
put 'PT1GZS5yZWx9KSxwPTAsdz1oZSxKPVYuTm9TdGF0ZSxuZT0wLGRlPWZ1bmN0aW9uKCl7dmFyIEZlLE9lLEtlLFllLFFlLGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTWUpe3N3aXRjaChNZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBOJiZjZSYmY2Ul'@;
put 'MTA9PTAmJmI/KEtlPShGZT1OLnNlc3Npb24pLmlkLFFlPXNlLmlkLFs0LChPZT1OLnNlc3Npb25NYW5hZ2VyKS5nZXRTZXNzaW9uU3RhdGUoRmUuc3RhdGVVcmwsRmUuZXRhZyxZZT1iLmFjY2Vzc190b2tlbikuY2F0Y2goZnVuY3Rpb24oRGUpe3Rocm93IG5ldyBZLkpvYlN0YXRlUG9sbEVy'@;
put 'cm9yKFFlLERlKX0pXSk6WzMsMl07Y2FzZSAxOmlmKGx0PU1lLnNlbnQoKSxiZT1sdC5yZXNwb25zZVN0YXR1cywhKEFlPWZ1bmN0aW9uKERlKXtyZXR1cm5bWC5TZXNzaW9uU3RhdGUuUnVubmluZyxYLlNlc3Npb25TdGF0ZS5JZGxlXS5pbmNsdWRlcyhEZSl9KShQZT1sdC5yZXN1bHQpfHwy'@;
put 'MDAhPT1iZSl0aHJvdyBPZS5jbGVhclNlc3Npb24oS2UsWWUpLFRlPUFlKFBlKT8iU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgbm90IDIwMC4gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgIi5jb25jYXQoYmUsIi4iKToiU2Vzc2lvbiBzdGF0ZSBvZiB0aGUgam9iIGlzIG5vdCAncnVu'@;
put 'bmluZycgb3IgJ2lkbGUnLiBTZXNzaW9uIHN0YXRlIGlzICciLmNvbmNhdChQZSwiJyIpLG5ldyBZLkpvYlN0YXRlUG9sbEVycm9yKFFlLG5ldyBFcnJvcihUZSkpO01lLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LHEob2Usc2Usdyx1ZSxiKS5jYXRjaChmdW5jdGlvbihEZSl7aWYocCsrLGNl'@;
put 'Pj1nfHxwPj01KXRocm93IERlO3JldHVybiBTLmVycm9yKCJFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAiLmNvbmNhdCh2LmhyZWYsIi4gUmVzdW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuIiksRGUpLFYuVW5hdmFpbGFibGV9KV07Y2FzZSAzOnJldHVybiB3'@;
put 'PU1lLnNlbnQoKSxjZSsrLHFlPXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oRGUpe3JldHVybiJzZWxmIj09PURlLnJlbH0pLmhyZWYsRD9bNCxvZS5nZXQocWUsYj8uYWNjZXNzX3Rva2VuKV06WzMsN107Y2FzZSA0OnJldHVybiBYZT1NZS5zZW50KCkucmVzdWx0LFVlPW51bGwhPT0oeGU9bnVs'@;
put 'bD09PShmZT1YZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09ZmU/dm9pZCAwOmZlLmxpbmVDb3VudCkmJnZvaWQgMCE9PXhlP3hlOjFlNiwoaHQ9KCgwLFUuaXNOb2RlKSgpP1IoMjA4MCk6e3NhdmVMb2c6bnVsbH0pLnNhdmVMb2cpP1s0LGh0KHNlLG9lLG5lLFVlLEgsYj8uYWNjZXNzX3Rv'@;
put 'a2VuKV06WzMsNl07Y2FzZSA1Ok1lLnNlbnQoKSxNZS5sYWJlbD02O2Nhc2UgNjpuZSs9VWUsTWUubGFiZWw9NztjYXNlIDc6cmV0dXJuIHVlJiZKIT09dyYmKFMuaW5mbygiUG9sbGluZzogIi5jb25jYXQob2UuZ2V0QmFzZVVybCgpK3FlLCIvc3RhdGUiKSksUy5pbmZvKCJDdXJyZW50IGpv'@;
put 'YiBzdGF0ZTogIi5jb25jYXQodykpLEo9dyksdyE9PVYuVW5hdmFpbGFibGUmJnA+MCYmKHA9MCksdz09PVYuQ29tcGxldGVkP1szLDldOls0LCgwLFUuZGVsYXkpKEMpXTtjYXNlIDg6TWUuc2VudCgpLE1lLmxhYmVsPTk7Y2FzZSA5OnJldHVyblsyXX19KX0sTGUubGFiZWw9MTtjYXNlIDE6'@;
put 'cmV0dXJuIGVlKHcpJiZjZTw9Zz9bNSxkZSgpXTpbMywzXTtjYXNlIDI6cmV0dXJuIExlLnNlbnQoKSxbMywxXTtjYXNlIDM6cmV0dXJuWzIse3N0YXRlOncscG9sbENvdW50OmNlfV19fSl9KX07dmFyIHRlPWZ1bmN0aW9uKG9lKXt2YXIgc2U9ZnVuY3Rpb24oaGUsdWUpe3Rocm93IG5ldyBF'@;
put 'cnJvcigiUG9sbCBzdHJhdGVnaWVzIGFyZSBub3QgdmFsaWQuIi5jb25jYXQoaGU/IiAiLmNvbmNhdChoZSk6IiIpLmNvbmNhdCh1ZT8iIEludmFsaWQgcG9sbCBzdHJhdGVneTogXG4iLmNvbmNhdChKU09OLnN0cmluZ2lmeSh1ZSxudWxsLDIpKToiIikpfTtvZS5mb3JFYWNoKGZ1bmN0aW9u'@;
put 'KGhlLHVlKXt2YXIgY2U9aGUubWF4UG9sbENvdW50LEc9aGUucG9sbEludGVydmFsO2NlPDE/c2UoIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLGhlKTowIT09dWU/Y2U8PW9lW3VlLTFdLm1heFBvbGxDb3VudCYmc2UoIidtYXhQb2xsQ291bnQnIGhhcyB0byBi'@;
put 'ZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLGhlKTpHPDEmJnNlKCIncG9sbEludGVydmFsJyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixoZSl9KX19LDIwODA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQx'@;
put 'NTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihVLHEpe2Z1bmN0aW9uIGVlKHNlKXt0cnl7b2UoWC5uZXh0KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiB0ZShzZSl7'@;
put 'dHJ5e29lKFgudGhyb3coc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1bmN0aW9uIG9lKHNlKXt2YXIgaGU7c2UuZG9uZT9VKHNlLnZhbHVlKTooaGU9c2UudmFsdWUsaGUgaW5zdGFuY2VvZiBZP2hlOm5ldyBZKGZ1bmN0aW9uKHVlKXt1ZShoZSl9KSkudGhlbihlZSx0ZSl9b2UoKFg9WC5hcHBs'@;
put 'eShWLEJ8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFYsQil7dmFyIFksWCxVLHEsZWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVVswXSl0aHJvdyBVWzFdO3JldHVybiBVWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHE9e25l'@;
put 'eHQ6dGUoMCksdGhyb3c6dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRlKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe3JldHVybiBmdW5jdGlvbihoZSl7'@;
put 'aWYoWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtlZTspdHJ5e2lmKFk9MSxYJiYoVT0yJmhlWzBdP1gucmV0dXJuOmhlWzBdP1gudGhyb3d8fCgoVT1YLnJldHVybikmJlUuY2FsbChYKSwwKTpYLm5leHQpJiYhKFU9VS5jYWxs'@;
put 'KFgsaGVbMV0pKS5kb25lKXJldHVybiBVO3N3aXRjaChYPTAsVSYmKGhlPVsyJmhlWzBdLFUudmFsdWVdKSxoZVswXSl7Y2FzZSAwOmNhc2UgMTpVPWhlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZWUubGFiZWwrKyx7dmFsdWU6aGVbMV0sZG9uZTohMX07Y2FzZSA1OmVlLmxhYmVsKyssWD1oZVsx'@;
put 'XSxoZT1bMF07Y29udGludWU7Y2FzZSA3OmhlPWVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVT0oVT1lZS50cnlzKS5sZW5ndGg+MCYmVVtVLmxlbmd0aC0xXSl8fDYhPT1oZVswXSYmMiE9PWhlWzBdKSl7ZWU9MDtjb250aW51ZX1pZigzPT09aGVb'@;
put 'MF0mJighVXx8aGVbMV0+VVswXSYmaGVbMV08VVszXSkpe2VlLmxhYmVsPWhlWzFdO2JyZWFrfWlmKDY9PT1oZVswXSYmZWUubGFiZWw8VVsxXSl7ZWUubGFiZWw9VVsxXSxVPWhlO2JyZWFrfWlmKFUmJmVlLmxhYmVsPFVbMl0pe2VlLmxhYmVsPVVbMl0sZWUub3BzLnB1c2goaGUpO2JyZWFr'@;
put 'fVVbMl0mJmVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlfWhlPUIuY2FsbChWLGVlKX1jYXRjaCh1ZSl7aGU9WzYsdWVdLFg9MH1maW5hbGx5e1k9VT0wfWlmKDUmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJue3ZhbHVlOmhlWzBdP2hlWzFdOnZvaWQgMCxkb25lOiEwfX0oW29l'@;
put 'LHNlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uc2F2ZUxvZz12b2lkIDA7dmFyIEU9Uig1OTI4KSxqPVIoNjEzMSk7Ty5zYXZlTG9nPWZ1bmN0aW9uKFYsQixZLFgsVSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24oKXt2YXIgZWUsdGUsb2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNlIDA6aWYoIXEpdGhyb3cgbmV3IEVycm9yKCJMb2dzIGZvciBqb2IgIi5jb25jYXQoVi5pZCwiIGNhbm5vdCBiZSBmZXRjaGVkIHdpdGhvdXQgYSB2YWxpZCBhY2Nlc3MgdG9r'@;
put 'ZW4uIikpO2lmKCFVKXRocm93IG5ldyBFcnJvcigiTG9ncyBmb3Igam9iICIuY29uY2F0KFYuaWQsIiBjYW5ub3QgYmUgd3JpdHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLiIpKTtpZihlZT16LmxvZ2dlcnx8SywhKHRlPVYubGlua3MuZmluZChmdW5jdGlvbihoZSl7cmV0dXJu'@;
put 'ImxvZyI9PT1oZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJMb2cgVVJMIGZvciBqb2IgIi5jb25jYXQoVi5pZCwiIHdhcyBub3QgZm91bmQuIikpO3JldHVybls0LCgwLEUuZmV0Y2hMb2cpKEIscSwiIi5jb25jYXQodGUuaHJlZiwiL2NvbnRlbnQiKSxZLFgpXTtjYXNlIDE6cmV0dXJuIG9l'@;
put 'PXNlLnNlbnQoKSxlZS5pbmZvKCJXcml0aW5nIGxvZ3MgdG8gIi5jb25jYXQoVS5wYXRoKSksWzQsKDAsai53cml0ZVN0cmVhbSkoVSxvZXx8IiIpXTtjYXNlIDI6cmV0dXJuIHNlLnNlbnQoKSxbMl19fSl9KX19LDY0OTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlz'@;
put 'JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxqLFYsQil7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBVKHRlKXt0cnl7ZWUoQi5uZXh0KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBxKHRlKXt0cnl7ZWUoQi50aHJvdyh0ZSkpfWNh'@;
put 'dGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gZWUodGUpe3ZhciBvZTt0ZS5kb25lP1kodGUudmFsdWUpOihvZT10ZS52YWx1ZSxvZSBpbnN0YW5jZW9mIFY/b2U6bmV3IFYoZnVuY3Rpb24oc2Upe3NlKG9lKX0pKS50aGVuKFUscSl9ZWUoKEI9Qi5hcHBseShFLGp8fFtdKSkubmV4dCgpKX0pfSxL'@;
put 'PXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUsail7dmFyIFYsQixZLFgsVT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZZWzBdKXRocm93IFlbMV07cmV0dXJuIFlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWD17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJu'@;
put 'OnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihYW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFg7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2Vu'@;
put 'ZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VTspdHJ5e2lmKFY9MSxCJiYoWT0yJm9lWzBdP0IucmV0dXJuOm9lWzBdP0IudGhyb3d8fCgoWT1CLnJldHVybikmJlkuY2FsbChCKSwwKTpCLm5leHQpJiYhKFk9WS5jYWxsKEIsb2VbMV0pKS5kb25lKXJldHVybiBZO3N3aXRj'@;
put 'aChCPTAsWSYmKG9lPVsyJm9lWzBdLFkudmFsdWVdKSxvZVswXSl7Y2FzZSAwOmNhc2UgMTpZPW9lO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVS5sYWJlbCsrLHt2YWx1ZTpvZVsxXSxkb25lOiExfTtjYXNlIDU6VS5sYWJlbCsrLEI9b2VbMV0sb2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpvZT1VLm9w'@;
put 'cy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChZPShZPVUudHJ5cykubGVuZ3RoPjAmJllbWS5sZW5ndGgtMV0pfHw2IT09b2VbMF0mJjIhPT1vZVswXSkpe1U9MDtjb250aW51ZX1pZigzPT09b2VbMF0mJighWXx8b2VbMV0+WVswXSYmb2VbMV08WVszXSkpe1Uu'@;
put 'bGFiZWw9b2VbMV07YnJlYWt9aWYoNj09PW9lWzBdJiZVLmxhYmVsPFlbMV0pe1UubGFiZWw9WVsxXSxZPW9lO2JyZWFrfWlmKFkmJlUubGFiZWw8WVsyXSl7VS5sYWJlbD1ZWzJdLFUub3BzLnB1c2gob2UpO2JyZWFrfVlbMl0mJlUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZX1v'@;
put 'ZT1qLmNhbGwoRSxVKX1jYXRjaChzZSl7b2U9WzYsc2VdLEI9MH1maW5hbGx5e1Y9WT0wfWlmKDUmb2VbMF0pdGhyb3cgb2VbMV07cmV0dXJue3ZhbHVlOm9lWzBdP29lWzFdOnZvaWQgMCxkb25lOiEwfX0oW2VlLHRlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLE8udXBsb2FkVGFibGVzPXZvaWQgMDt2YXIgST1SKDk3NzgpLGs9UigyNDAyKTtPLnVwbG9hZFRhYmxlcz1mdW5jdGlvbihFLGosVil7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscSxlZSx0ZTtyZXR1cm4gSyh0aGlzLGZ1'@;
put 'bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpmb3IoWCBpbiBCPVtdLFk9W10sailZLnB1c2goWCk7VT0wLG9lLmxhYmVsPTE7Y2FzZSAxOmlmKCEoVTxZLmxlbmd0aCkpcmV0dXJuWzMsNF07aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PShlZT0oMCxrLmNvbnZl'@;
put 'cnRUb0NTVikoaixxPVlbVV0pKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7cmV0dXJuWzQsRS51cGxvYWRGaWxlKCIvZmlsZXMvZmlsZXMjcmF3VXBsb2FkIixlZSxWKS5jYXRjaChmdW5j'@;
put 'dGlvbihzZSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKHNlLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZS4gIil9KV07Y2FzZSAyOnRlPW9lLnNlbnQoKSxCLnB1c2goe3RhYmxlTmFtZTpxLGZpbGU6dGUucmVzdWx0fSksb2UubGFiZWw9MztjYXNlIDM6cmV0dXJuIFUrKyxbMywxXTtj'@;
put 'YXNlIDQ6cmV0dXJuWzIsQl19fSl9KX19LDYxMzE6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEssSSxrLEUpe3JldHVybiBuZXcoa3x8KGs9UHJvbWlzZSkpKGZ1bmN0aW9uKGosVil7ZnVuY3Rpb24gQihVKXt0cnl7WChF'@;
put 'Lm5leHQoVSkpfWNhdGNoKHEpe1YocSl9fWZ1bmN0aW9uIFkoVSl7dHJ5e1goRS50aHJvdyhVKSl9Y2F0Y2gocSl7VihxKX19ZnVuY3Rpb24gWChVKXt2YXIgcTtVLmRvbmU/aihVLnZhbHVlKToocT1VLnZhbHVlLHEgaW5zdGFuY2VvZiBrP3E6bmV3IGsoZnVuY3Rpb24oZWUpe2VlKHEpfSkp'@;
put 'LnRoZW4oQixZKX1YKChFPUUuYXBwbHkoSyxJfHxbXSkpLm5leHQoKSl9KX0sej10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihLLEkpe3ZhciBrLEUsaixWLEI9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmalswXSl0aHJvdyBqWzFdO3JldHVybiBqWzFdfSx0cnlzOltd'@;
put 'LG9wczpbXX07cmV0dXJuIFY9e25leHQ6WSgwKSx0aHJvdzpZKDEpLHJldHVybjpZKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxWO2Z1bmN0aW9uIFkoWCl7cmV0dXJuIGZ1bmN0aW9uKFUpe3JldHVy'@;
put 'biBmdW5jdGlvbihxKXtpZihrKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0I7KXRyeXtpZihrPTEsRSYmKGo9MiZxWzBdP0UucmV0dXJuOnFbMF0/RS50aHJvd3x8KChqPUUucmV0dXJuKSYmai5jYWxsKEUpLDApOkUubmV4dCkm'@;
put 'JiEoaj1qLmNhbGwoRSxxWzFdKSkuZG9uZSlyZXR1cm4gajtzd2l0Y2goRT0wLGomJihxPVsyJnFbMF0sai52YWx1ZV0pLHFbMF0pe2Nhc2UgMDpjYXNlIDE6aj1xO2JyZWFrO2Nhc2UgNDpyZXR1cm4gQi5sYWJlbCsrLHt2YWx1ZTpxWzFdLGRvbmU6ITF9O2Nhc2UgNTpCLmxhYmVsKyssRT1x'@;
put 'WzFdLHE9WzBdO2NvbnRpbnVlO2Nhc2UgNzpxPUIub3BzLnBvcCgpLEIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGo9KGo9Qi50cnlzKS5sZW5ndGg+MCYmaltqLmxlbmd0aC0xXSl8fDYhPT1xWzBdJiYyIT09cVswXSkpe0I9MDtjb250aW51ZX1pZigzPT09cVswXSYmKCFq'@;
put 'fHxxWzFdPmpbMF0mJnFbMV08alszXSkpe0IubGFiZWw9cVsxXTticmVha31pZig2PT09cVswXSYmQi5sYWJlbDxqWzFdKXtCLmxhYmVsPWpbMV0saj1xO2JyZWFrfWlmKGomJkIubGFiZWw8alsyXSl7Qi5sYWJlbD1qWzJdLEIub3BzLnB1c2gocSk7YnJlYWt9alsyXSYmQi5vcHMucG9wKCks'@;
put 'Qi50cnlzLnBvcCgpO2NvbnRpbnVlfXE9SS5jYWxsKEssQil9Y2F0Y2goZWUpe3E9WzYsZWVdLEU9MH1maW5hbGx5e2s9aj0wfWlmKDUmcVswXSl0aHJvdyBxWzFdO3JldHVybnt2YWx1ZTpxWzBdP3FbMV06dm9pZCAwLGRvbmU6ITB9fShbWCxVXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ud3JpdGVTdHJlYW09dm9pZCAwLE8ud3JpdGVTdHJlYW09ZnVuY3Rpb24oSyxJKXtyZXR1cm4gUih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oayl7cmV0dXJuWzIsSy53cml0ZShJKyJc'@;
put 'biIsZnVuY3Rpb24oRSl7cmV0dXJuIEU/UHJvbWlzZS5yZWplY3QoRSk6UHJvbWlzZS5yZXNvbHZlKCl9KV19KX0pfX0sMjg1MTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCksSz1SKDQxNTUpLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG9lLHNl'@;
put 'LGhlLHVlKXtyZXR1cm4gbmV3KGhlfHwoaGU9UHJvbWlzZSkpKGZ1bmN0aW9uKGNlLEcpe2Z1bmN0aW9uIGIoTil7dHJ5e0godWUubmV4dChOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gRChOKXt0cnl7SCh1ZS50aHJvdyhOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gSChOKXt2YXIg'@;
put 'ZztOLmRvbmU/Y2UoTi52YWx1ZSk6KGc9Ti52YWx1ZSxnIGluc3RhbmNlb2YgaGU/ZzpuZXcgaGUoZnVuY3Rpb24oQyl7QyhnKX0pKS50aGVuKGIsRCl9SCgodWU9dWUuYXBwbHkob2Usc2V8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKG9lLHNl'@;
put 'KXt2YXIgaGUsdWUsY2UsRyxiPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmNlWzBdKXRocm93IGNlWzFdO3JldHVybiBjZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBHPXtuZXh0OkQoMCksdGhyb3c6RCgxKSxyZXR1cm46RCgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv'@;
put 'bCYmKEdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksRztmdW5jdGlvbiBEKEgpe3JldHVybiBmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oZyl7aWYoaGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zv'@;
put 'cig7YjspdHJ5e2lmKGhlPTEsdWUmJihjZT0yJmdbMF0/dWUucmV0dXJuOmdbMF0/dWUudGhyb3d8fCgoY2U9dWUucmV0dXJuKSYmY2UuY2FsbCh1ZSksMCk6dWUubmV4dCkmJiEoY2U9Y2UuY2FsbCh1ZSxnWzFdKSkuZG9uZSlyZXR1cm4gY2U7c3dpdGNoKHVlPTAsY2UmJihnPVsyJmdbMF0s'@;
put 'Y2UudmFsdWVdKSxnWzBdKXtjYXNlIDA6Y2FzZSAxOmNlPWc7YnJlYWs7Y2FzZSA0OnJldHVybiBiLmxhYmVsKysse3ZhbHVlOmdbMV0sZG9uZTohMX07Y2FzZSA1OmIubGFiZWwrKyx1ZT1nWzFdLGc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpnPWIub3BzLnBvcCgpLGIudHJ5cy5wb3AoKTtjb250'@;
put 'aW51ZTtkZWZhdWx0OmlmKCEoKGNlPShjZT1iLnRyeXMpLmxlbmd0aD4wJiZjZVtjZS5sZW5ndGgtMV0pfHw2IT09Z1swXSYmMiE9PWdbMF0pKXtiPTA7Y29udGludWV9aWYoMz09PWdbMF0mJighY2V8fGdbMV0+Y2VbMF0mJmdbMV08Y2VbM10pKXtiLmxhYmVsPWdbMV07YnJlYWt9aWYoNj09'@;
put 'PWdbMF0mJmIubGFiZWw8Y2VbMV0pe2IubGFiZWw9Y2VbMV0sY2U9ZzticmVha31pZihjZSYmYi5sYWJlbDxjZVsyXSl7Yi5sYWJlbD1jZVsyXSxiLm9wcy5wdXNoKGcpO2JyZWFrfWNlWzJdJiZiLm9wcy5wb3AoKSxiLnRyeXMucG9wKCk7Y29udGludWV9Zz1zZS5jYWxsKG9lLGIpfWNhdGNo'@;
put 'KEMpe2c9WzYsQ10sdWU9MH1maW5hbGx5e2hlPWNlPTB9aWYoNSZnWzBdKXRocm93IGdbMV07cmV0dXJue3ZhbHVlOmdbMF0/Z1sxXTp2b2lkIDAsZG9uZTohMH19KFtILE5dKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5BdXRoTWFuYWdl'@;
put 'cj12b2lkIDA7dmFyIEU9UigzOTAwKSxqPVIoMTM5NSksVj1SKDU5MjgpLEI9UigxMTcwKSxZPVIoNTQxOCksWD1SKDQ1ODIpLFU9Uig2NTQ3KSxxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gb2Uoc2UsaGUsdWUsY2Upe3ZhciBHPXRoaXM7dGhpcy5zZXJ2ZXJVcmw9c2UsdGhpcy5zZXJ2ZXJUeXBl'@;
put 'PWhlLHRoaXMucmVxdWVzdENsaWVudD11ZSx0aGlzLmxvZ2luQ2FsbGJhY2s9Y2UsdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD0iL1NBU0xvZ29uIix0aGlzLmV4dHJhY3RVc2VyTmFtZT1mdW5jdGlvbihiKXtzd2l0Y2goRy5z'@;
put 'ZXJ2ZXJUeXBlKXtjYXNlIEUuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVybiBiPy5pZDtjYXNlIEUuU2VydmVyVHlwZS5TYXM5OnJldHVybiIiO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBiPy51c2VybmFtZTtkZWZhdWx0OnJldHVybiB6LmVycm9yKCJTZXJ2ZXIgVHlwZSBub3Qg'@;
put 'Zm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWU9ZnVuY3Rpb24oYil7c3dpdGNoKEcuc2VydmVyVHlwZSl7Y2FzZSBFLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gYj8ubmFtZTtjYXNlIEUuU2VydmVyVHlwZS5TYXM5OnJl'@;
put 'dHVybigwLEIuZXh0cmFjdFVzZXJMb25nTmFtZVNhczkpKGIpO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBiPy5kaXNwbGF5TmFtZTtkZWZhdWx0OnJldHVybiB6LmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0'@;
put 'aGlzLnNldExvZ2luVXJsPWZ1bmN0aW9uKGIpe3ZhciBEPWJbMV0ucmVwbGFjZSgvXD8uKi8sIiIpO2lmKCIvIj09PURbMF0pe0Q9RC5zdWJzdHIoMSk7dmFyIEg9Ry5zZXJ2ZXJVcmw/IiIuY29uY2F0KEcuc2VydmVyVXJsLCIvIikuY29uY2F0KEQpOiIiLmNvbmNhdChEKTtHLmxvZ2luVXJs'@;
put 'PUcuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNWaXlhP0g6SC5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9naW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJU'@;
put 'eXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzVml5YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9nb24vbG9nb3V0Iix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD10aGlzLnNlcnZlclVybCt0aGlzLnJlZGlyZWN0ZWRM'@;
put 'b2dpblVybH1yZXR1cm4gb2UucHJvdG90eXBlLnJlZGlyZWN0ZWRMb2dJbj1mdW5jdGlvbihzZSl7dmFyIGhlPXNlLm9uTG9nZ2VkT3V0O3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxHLGIsRCxILE4sZyxDLFM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih2'@;
put 'KXtzd2l0Y2godi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDE6cmV0dXJuIHVlPXYuc2VudCgpLEc9dWUudXNlck5hbWUsYj11ZS51c2VyTG9uZ05hbWUsdWUuaXNMb2dnZWRJbj8oKEsubG9nZ2VyfHx6KS5sb2coImxvZ2luIHdhcyBub3QgYXR0'@;
put 'ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLFs0LHRoaXMubG9naW5DYWxsYmFjaygpXSk6WzMsM107Y2FzZSAyOnJldHVybiB2LnNlbnQoKSxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTpHLHVzZXJMb25nTmFtZTpifV07Y2FzZSAzOnJldHVybls0LCgwLFku'@;
put 'b3BlbldlYlBhZ2UpKHRoaXMucmVkaXJlY3RlZExvZ2luVXJsLCJTQVNMb2dvbiIse3dpZHRoOjUwMCxoZWlnaHQ6NjAwfSxoZSldO2Nhc2UgNDpyZXR1cm4oRD12LnNlbnQoKSk/dGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/WzMsNl06WzQsKDAsVS52ZXJpZnlTYXNW'@;
put 'aXlhTG9naW4pKEQpXTpbMix7aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XTtjYXNlIDU6cmV0dXJuIE49di5zZW50KCksWzMsOF07Y2FzZSA2OnJldHVybls0LCgwLFgudmVyaWZ5U2FzOUxvZ2luKShEKV07Y2FzZSA3Ok49di5zZW50KCksdi5sYWJlbD04O2Nh'@;
put 'c2UgODpyZXR1cm4gSD1OLmlzTG9nZ2VkSW4sRC5jbG9zZSgpLEg/dGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhczk/WzMsMTBdOls0LHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKV06WzMsMTNdO2Nhc2UgOTp2LnNlbnQoKSx2LmxhYmVsPTEwO2Nhc2UgMTA6cmV0dXJu'@;
put 'WzQsdGhpcy5mZXRjaFVzZXJOYW1lKCldO2Nhc2UgMTE6cmV0dXJuIGc9di5zZW50KCksQz1nLnVzZXJOYW1lLFM9Zy51c2VyTG9uZ05hbWUsWzQsdGhpcy5sb2dpbkNhbGxiYWNrKCldO2Nhc2UgMTI6cmV0dXJuIHYuc2VudCgpLFsyLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOkMsdXNlckxv'@;
put 'bmdOYW1lOlN9XTtjYXNlIDEzOnJldHVyblsyLHtpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn1dfX0pfSl9LG9lLnByb3RvdHlwZS5sb2dJbj1mdW5jdGlvbihzZSxoZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHVlLGNlLGIs'@;
put 'RCxILE4sZyxDO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdWU9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2VybmFtZTpzZSxwYXNzd29yZDpoZX0sdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIixbNCx0aGlzLmNoZWNr'@;
put 'U2Vzc2lvbigpXTtjYXNlIDE6cmV0dXJuIGNlPVMuc2VudCgpLGI9Y2UubG9naW5Gb3JtLEQ9Y2UudXNlckxvbmdOYW1lLGNlLmlzTG9nZ2VkSW4/KChLLmxvZ2dlcnx8eikubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSxb'@;
put 'NCx0aGlzLmxvZ2luQ2FsbGJhY2soKV0pOlszLDNdO2Nhc2UgMjpyZXR1cm4gUy5zZW50KCksdGhpcy51c2VyTmFtZT11ZS51c2VybmFtZSx0aGlzLnVzZXJMb25nTmFtZT1ELFsyLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxv'@;
put 'bmdOYW1lfV07Y2FzZSAzOnJldHVybls0LHRoaXMuc2VuZExvZ2luUmVxdWVzdChiLHVlKV07Y2FzZSA0OnJldHVybiBIPVMuc2VudCgpLChOPXRlKHRoaXMuc2VydmVyVHlwZSxIKSk/WzMsOV06ZWUoSCk/WzQsdGhpcy5nZXRMb2dpbkZvcm0oSCldOlszLDddO2Nhc2UgNTpyZXR1cm4gZz1T'@;
put 'LnNlbnQoKSxbNCx0aGlzLnNlbmRMb2dpblJlcXVlc3QoZyx1ZSldO2Nhc2UgNjpIPVMuc2VudCgpLFMubGFiZWw9NztjYXNlIDc6cmV0dXJuWzQsdGhpcy5jaGVja1Nlc3Npb24oKV07Y2FzZSA4OkM9Uy5zZW50KCksTj1DLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9Qy51c2VyTG9u'@;
put 'Z05hbWUsUy5sYWJlbD05O2Nhc2UgOTpyZXR1cm4gTj90aGlzLnNlcnZlclR5cGUhPT1FLlNlcnZlclR5cGUuU2FzOT9bMywxMV06WzQsdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpXTpbMywxMl07Y2FzZSAxMDpTLnNlbnQoKSxTLmxhYmVsPTExO2Nhc2UgMTE6dGhpcy5sb2dpbkNh'@;
put 'bGxiYWNrKCksdGhpcy51c2VyTmFtZT11ZS51c2VybmFtZSxTLmxhYmVsPTEyO2Nhc2UgMTI6cmV0dXJuWzIse2lzTG9nZ2VkSW46Tix1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX1dfX0pfSl9LG9lLnByb3RvdHlwZS5wZXJmb3JtQ0FTU2Vj'@;
put 'dXJpdHlDaGVjaz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gc2U9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTU3RvcmVk'@;
put 'UHJvY2Vzcy9qX3NwcmluZ19jYXNfc2VjdXJpdHlfY2hlY2siKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvU0FTTG9nb24vbG9naW4/c2VydmljZT0iLmNvbmNhdChzZSksdm9pZCAwKS5jYXRjaChmdW5jdGlvbih1ZSl7aWYoISh1ZSBpbnN0YW5jZW9mIGouTm90Rm91bmRFcnJvcikp'@;
put 'dGhyb3cgdWV9KV07Y2FzZSAxOnJldHVybiBoZS5zZW50KCksWzJdfX0pfSl9LG9lLnByb3RvdHlwZS5zZW5kTG9naW5SZXF1ZXN0PWZ1bmN0aW9uKHNlLGhlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7'@;
put 'c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwse3VzZXJuYW1lOmhlLnVzZXJuYW1lLHBhc3N3b3JkOmhlLnBhc3N3b3JkfSx2b2lkIDAp'@;
put 'XTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLEQuc2VudCgpLnJlc3VsdF07Y2FzZSAyOmZvcihHIGluIHNlKWhlW0ddPXNlW0ddO3JldHVybiBiPSgwLFYuc2VyaWFsaXplKShoZSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCxiLHZvaWQgMCwidGV4dC9wbGFpbiIs'@;
put 'eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2VwdDoiKi8qIn0pXX19KX0pfSxvZS5wcm90b3R5cGUuY2hlY2tTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGhlLHVlLGNl'@;
put 'LEc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDE6cmV0dXJuIHNlPWIuc2VudCgpLHVlPXNlLnVzZXJOYW1lLGNlPXNlLnVzZXJMb25nTmFtZSxHPW51bGwsKGhlPXNlLmlzTG9nZ2Vk'@;
put 'SW4pP1szLDRdOls0LHRoaXMubG9nT3V0KCldO2Nhc2UgMjpyZXR1cm4gYi5zZW50KCksWzQsdGhpcy5nZXROZXdMb2dpbkZvcm0oKV07Y2FzZSAzOkc9Yi5zZW50KCksYi5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMixQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46aGUsdXNlck5hbWU6dWUs'@;
put 'dXNlckxvbmdOYW1lOmNlLGxvZ2luRm9ybTpHfSldfX0pfSl9LG9lLnByb3RvdHlwZS5nZXROZXdMb2dpbkZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVs'@;
put 'KXtjYXNlIDA6cmV0dXJuIHRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNqcz9bMix0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRoZW4oZnVuY3Rpb24odWUpe3ZhciBjZSxiPW51bGw9PT0oY2U9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRP'@;
put 'S0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHVlLnJlc3VsdCkpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2VbMV07YiYmKGRvY3VtZW50LmNvb2tpZT1iKX0pXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9n'@;
put 'aW5VcmwucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIiksdm9pZCAwLCJ0ZXh0L3BsYWluIildO2Nhc2UgMTpyZXR1cm4gc2U9aGUuc2VudCgpLnJlc3VsdCxbNCx0aGlzLmdldExvZ2luRm9ybShzZSldO2Nhc2UgMjpyZXR1cm5bMixoZS5zZW50KCldfX0p'@;
put 'fSl9LG9lLnByb3RvdHlwZS5mZXRjaFVzZXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGhlLHVlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBzZT0iIi5jb25jYXQo'@;
put 'dGhpcy5zZXJ2ZXJVcmwsdGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9pZGVudGl0aWVzL3VzZXJzL0BjdXJyZW50VXNlciI6dGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNTdG9yZWRQcm9jZXNzIjoiL1NBU2pzQXBpL3Nlc3Npb24iKSxb'@;
put 'NCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHNlLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKGZ1bmN0aW9uKEcpe3JldHVybntyZXN1bHQ6ImF1dGhFcnIifX0pXTtjYXNlIDE6cmV0dXJuIGhlPWNlLnNlbnQoKS5yZXN1bHQsKHVlPSJhdXRoRXJyIiE9PWhlKT9bMywzXTpbNCx0aGlzLmxv'@;
put 'Z091dCgpXTtjYXNlIDI6cmV0dXJuIGNlLnNlbnQoKSxbMix7aXNMb2dnZWRJbjp1ZSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XTtjYXNlIDM6cmV0dXJuWzIse2lzTG9nZ2VkSW46dWUsdXNlck5hbWU6dGhpcy5leHRyYWN0VXNlck5hbWUoaGUpLHVzZXJMb25nTmFtZTp0aGlzLmV4'@;
put 'dHJhY3RVc2VyTG9uZ05hbWUoaGUpfV19fSl9KX0sb2UucHJvdG90eXBlLmdldExvZ2luRm9ybT1mdW5jdGlvbihzZSl7dmFyIGhlPS88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb258bG9naW4pW14iXSopLio+Ly5leGVjKHNlKSx1ZT17fTtpZihoZSYmaGUubGVuZ3RoKXt0aGlzLnNldExvZ2lu'@;
put 'VXJsKGhlKTt2YXIgY2U9KHNlPXNlLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRjaCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTtjZSYmY2UuZm9yRWFjaChmdW5jdGlvbihHKXt2YXIgYj1HLm1hdGNoKC9uYW1lPSIoW14iXSopIlxzdmFsdWU9IihbXiJdKikvKTtiJiZi'@;
put 'Lmxlbmd0aCYmKHVlW2JbMV1dPWJbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKHVlKS5sZW5ndGg/dWU6bnVsbH0sb2UucHJvdG90eXBlLmxvZ091dD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oc2Upe3Jl'@;
put 'dHVybiB0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJDc3JmVG9rZW5zKCksWzIsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pXX0pfSl9LG9lfSgpO08uQXV0aE1hbmFnZXI9cTt2YXIgZWU9ZnVuY3Rpb24ob2Up'@;
put 'e3JldHVybi9BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0aGUgc3lzdGVtIHdhcyB2ZXJpZnlpbmcgeW91ciBjcmVkZW50aWFscy4gUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHMgYWdhaW4uL2dtLnRlc3Qob2UpfSx0ZT1mdW5jdGlvbihvZSxzZSl7cmV0dXJuIG9lPT09RS5TZXJ2ZXJU'@;
put 'eXBlLlNhc2pzP3NlPy5sb2dnZWRpbjovWW91IGhhdmUgc2lnbmVkIGluL2dtLnRlc3Qoc2UpfX0sNTc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVu'@;
put 'Y3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7dHJ5e3RlKFkudGhyb3cob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKTooc2U9b2Uu'@;
put 'dmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5KGosVnx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJlbDowLHNl'@;
put 'bnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OmVlKDApLHRocm93OmVlKDEpLHJldHVybjplZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYoWD0yJnNl'@;
put 'WzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFksc2VbMV0pKS5kb25lKXJldHVybiBYO3N3aXRjaChZPTAsWCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpYPXNlO2Jy'@;
put 'ZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5cykubGVu'@;
put 'Z3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8c2VbMV0+WFswXSYmc2VbMV08WFszXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9WFsxXSxY'@;
put 'PXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1WLmNhbGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlmKDUmc2Vb'@;
put 'MF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz12b2lkIDA7dmFyIEk9Uig5Nzc4KSxr'@;
put 'PVIoOTAxNyksRT1SKDM5MDApO08uZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz1mdW5jdGlvbihqLFYsQil7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFg7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihVKXtzd2l0Y2goVS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGou'@;
put 'cG9zdCgiL1NBU2pzQXBpL2F1dGgvdG9rZW4iLFg9e2NsaWVudElkOlYsY29kZTpCfSx2b2lkIDApLnRoZW4oZnVuY3Rpb24ocSl7dmFyIGVlPXEucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46ZWUuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjplZS5yZWZyZXNoVG9rZW59fSkuY2F0Y2go'@;
put 'ZnVuY3Rpb24ocSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKHEsKDAsay5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9yU2FzanMiLEUuU2VydmVyVHlwZS5TYXNqcywiL1NBU2pzQXBpL2F1dGgvdG9rZW4iLFgs'@;
put 'VikpfSldO2Nhc2UgMTpyZXR1cm5bMixVLnNlbnQoKV19fSl9KX19LDM1Njk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gbmV3KFh8fChYPVByb21pc2UpKShm'@;
put 'dW5jdGlvbihxLGVlKXtmdW5jdGlvbiB0ZShoZSl7dHJ5e3NlKFUubmV4dChoZSkpfWNhdGNoKHVlKXtlZSh1ZSl9fWZ1bmN0aW9uIG9lKGhlKXt0cnl7c2UoVS50aHJvdyhoZSkpfWNhdGNoKHVlKXtlZSh1ZSl9fWZ1bmN0aW9uIHNlKGhlKXt2YXIgdWU7aGUuZG9uZT9xKGhlLnZhbHVlKToo'@;
put 'dWU9aGUudmFsdWUsdWUgaW5zdGFuY2VvZiBYP3VlOm5ldyBYKGZ1bmN0aW9uKGNlKXtjZSh1ZSl9KSkudGhlbih0ZSxvZSl9c2UoKFU9VS5hcHBseShCLFl8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEIsWSl7dmFyIFgsVSxxLGVlLHRlPXts'@;
put 'YWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnFbMF0pdGhyb3cgcVsxXTtyZXR1cm4gcVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBlZT17bmV4dDpvZSgwKSx0aHJvdzpvZSgxKSxyZXR1cm46b2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihlZVtTeW1ib2wuaXRlcmF0'@;
put 'b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlZTtmdW5jdGlvbiBvZShzZSl7cmV0dXJuIGZ1bmN0aW9uKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe2lmKFgpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dGU7KXRyeXtpZihY'@;
put 'PTEsVSYmKHE9MiZ1ZVswXT9VLnJldHVybjp1ZVswXT9VLnRocm93fHwoKHE9VS5yZXR1cm4pJiZxLmNhbGwoVSksMCk6VS5uZXh0KSYmIShxPXEuY2FsbChVLHVlWzFdKSkuZG9uZSlyZXR1cm4gcTtzd2l0Y2goVT0wLHEmJih1ZT1bMiZ1ZVswXSxxLnZhbHVlXSksdWVbMF0pe2Nhc2UgMDpj'@;
put 'YXNlIDE6cT11ZTticmVhaztjYXNlIDQ6cmV0dXJuIHRlLmxhYmVsKysse3ZhbHVlOnVlWzFdLGRvbmU6ITF9O2Nhc2UgNTp0ZS5sYWJlbCsrLFU9dWVbMV0sdWU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp1ZT10ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEo'@;
put 'KHE9KHE9dGUudHJ5cykubGVuZ3RoPjAmJnFbcS5sZW5ndGgtMV0pfHw2IT09dWVbMF0mJjIhPT11ZVswXSkpe3RlPTA7Y29udGludWV9aWYoMz09PXVlWzBdJiYoIXF8fHVlWzFdPnFbMF0mJnVlWzFdPHFbM10pKXt0ZS5sYWJlbD11ZVsxXTticmVha31pZig2PT09dWVbMF0mJnRlLmxhYmVs'@;
put 'PHFbMV0pe3RlLmxhYmVsPXFbMV0scT11ZTticmVha31pZihxJiZ0ZS5sYWJlbDxxWzJdKXt0ZS5sYWJlbD1xWzJdLHRlLm9wcy5wdXNoKHVlKTticmVha31xWzJdJiZ0ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZX11ZT1ZLmNhbGwoQix0ZSl9Y2F0Y2goY2Upe3VlPVs2LGNl'@;
put 'XSxVPTB9ZmluYWxseXtYPXE9MH1pZig1JnVlWzBdKXRocm93IHVlWzFdO3JldHVybnt2YWx1ZTp1ZVswXT91ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtzZSxoZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEFjY2Vzc1Rva2VuRm9y'@;
put 'Vml5YT12b2lkIDA7dmFyIGs9UigzOTAwKSxFPVIoOTc3OCksaj1SKDEzOTUpLFY9Uig5MDE3KTtPLmdldEFjY2Vzc1Rva2VuRm9yVml5YT1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSx0ZSxvZSxzZTtyZXR1cm4gSSh0'@;
put 'aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT12b2lkIDA9PT16P2J0b2EoWSsiOiIrWCk6ei5mcm9tKFkrIjoiK1gpLnRvU3RyaW5nKCJiYXNlNjQiKSxlZT0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIix0ZT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitx'@;
put 'LEFjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LG9lPW5ldyBVUkxTZWFyY2hQYXJhbXMoe2dyYW50X3R5cGU6ImF1dGhvcml6YXRpb25fY29kZSIsY29kZTpVfSksc2U9bmV3IFVSTFNlYXJjaFBhcmFtcyhvZSksWzQsQi5wb3N0KGVlLHNlLHZvaWQgMCwiYXBwbGljYXRpb24veC13d3ctZm9y'@;
put 'bS11cmxlbmNvZGVkIix0ZSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIHVlLnJlc3VsdH0pLmNhdGNoKGZ1bmN0aW9uKHVlKXt0aHJvdyB1ZSBpbnN0YW5jZW9mIGouQ2VydGlmaWNhdGVFcnJvcj91ZTooMCxFLnByZWZpeE1lc3NhZ2UpKHVlLCgwLFYuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQ'@;
put 'cmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclZpeWEiLGsuU2VydmVyVHlwZS5TYXNWaXlhLGVlLG9lLHRlLFksWCkpfSldO2Nhc2UgMTpyZXR1cm5bMixoZS5zZW50KCldfX0pfSl9fSw5MDE3OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT1PLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PXZvaWQgMDt2YXIgej1SKDM5MDApLEs9ZnVuY3Rpb24oSSl7cmV0dXJuIlJlc3BvbnNlIGZyb20gIi5j'@;
put 'b25jYXQoST09PXouU2VydmVyVHlwZS5TYXNWaXlhPyJWaXlhIjoiU2FzanMiLCIgaXMgYmVsb3cuIil9O08uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9ZnVuY3Rpb24oSSxrLEUsaixWLEIsWSxYKXt2YXIgVT1mdW5jdGlvbihlZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGVlLG51bGws'@;
put 'Mil9LHE9WyJFcnJvciB3aGlsZSAiLmNvbmNhdChJLCIgZnJvbSAiKS5jb25jYXQoaiksIlRocm93biBieSB0aGUgQHNhc2pzL2FkYXB0ZXIgIi5jb25jYXQoaywiIGZ1bmN0aW9uLiIpXTtyZXR1cm4gViYmKHEucHVzaCgiUGF5bG9hZDoiKSxxLnB1c2goVShWKSkpLEImJihxLnB1c2goIkhl'@;
put 'YWRlcnM6IikscS5wdXNoKFUoQikpKSxZJiZxLnB1c2goIkNsaWVudElkOiAiLmNvbmNhdChZKSksWCYmcS5wdXNoKCJDbGllbnRTZWNyZXQ6ICIuY29uY2F0KFgpKSxxLnB1c2goIiIpLHEucHVzaCgiIi5jb25jYXQoSyhFKSkpLHEucHVzaCgiIikscS5qb2luKCJcbiIpfSxPLmdldFRva2Vu'@;
put 'UmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSS5zcGxpdCgiIi5jb25jYXQoSyhrKSwiXG4iKSkucG9wKCl9fSw3MDQ6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVy'@;
put 'fHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShxLm5leHQodWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhyb3codWUpKX1jYXRjaChjZSl7dGUo'@;
put 'Y2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxjZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUoZnVuY3Rpb24oRyl7RyhjZSl9KSkudGhlbihvZSxzZSl9aGUoKHE9cS5hcHBseShZLFh8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRo'@;
put 'aXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJvdyBlZVsxXTtyZXR1cm4gZWVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2UoMSkscmV0dXJu'@;
put 'OnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24gc2UoaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihVKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxsKHEpLDApOnEubmV4dCkmJiEoZWU9ZWUuY2FsbChxLGNlWzFdKSkuZG9uZSlyZXR1'@;
put 'cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNlIDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJldHVybiBvZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25lOiExfTtjYXNlIDU6b2UubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtjb250aW51'@;
put 'ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChlZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAmJmVlW2VlLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7b2U9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighZWV8fGNl'@;
put 'WzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2UubGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVlWzFdLGVlPWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJlbDxlZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uub3BzLnB1c2goY2UpO2JyZWFrfWVl'@;
put 'WzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2goRyl7Y2U9WzYsR10scT0wfWZpbmFsbHl7VT1lZT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW2hlLHVl'@;
put 'XSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VG9rZW5zPXZvaWQgMDt2YXIgRT1SKDY3OTkpLGo9UigzOTAwKSxWPVIoMzY2KSxCPVIoMjQ5KTtPLmdldFRva2Vucz1mdW5jdGlvbihZLFgsVSl7cmV0dXJuIHZvaWQgMD09PVUmJihV'@;
put 'PWouU2VydmVyVHlwZS5TYXNWaXlhKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLHRlLG9lLHNlLHVlLGNlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDppZihxPXoubG9nZ2VyfHxLLHRlPVgucmVmcmVzaF90b2tlbixv'@;
put 'ZT1YLmNsaWVudCxzZT1YLnNlY3JldCwhKDAsRS5pc0FjY2Vzc1Rva2VuRXhwaXJpbmcpKGVlPVguYWNjZXNzX3Rva2VuKSYmISgwLEUuaXNSZWZyZXNoVG9rZW5FeHBpcmluZykodGUpKXJldHVyblszLDVdO2lmKCgwLEUuaGFzVG9rZW5FeHBpcmVkKSh0ZSkpdGhyb3cgcS5lcnJvcigiVW5h'@;
put 'YmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIiksbmV3IEVycm9yKCJVbmFibGUgdG8gb2J0YWluIG5ldyBhY2Nlc3MgdG9rZW4uIFlvdXIgcmVmcmVzaCB0b2tlbiBoYXMgZXhwaXJlZC4iKTtyZXR1cm4gcS5pbmZvKCJSZWZy'@;
put 'ZXNoaW5nIGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbnMuIiksVSE9PWouU2VydmVyVHlwZS5TYXNWaXlhP1szLDJdOls0LCgwLFYucmVmcmVzaFRva2Vuc0ZvclZpeWEpKFksb2Usc2UsdGUpXTtjYXNlIDE6cmV0dXJuIGNlPUcuc2VudCgpLFszLDRdO2Nhc2UgMjpyZXR1cm5bNCwoMCxCLnJl'@;
put 'ZnJlc2hUb2tlbnNGb3JTYXNqcykoWSx0ZSldO2Nhc2UgMzpjZT1HLnNlbnQoKSxHLmxhYmVsPTQ7Y2FzZSA0OmVlPSh1ZT1jZSkuYWNjZXNzX3Rva2VuLHRlPXVlLnJlZnJlc2hfdG9rZW4sRy5sYWJlbD01O2Nhc2UgNTpyZXR1cm5bMix7YWNjZXNzX3Rva2VuOmVlLHJlZnJlc2hfdG9rZW46'@;
put 'dGUsY2xpZW50Om9lLHNlY3JldDpzZX1dfX0pfSl9fSwxNTI3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5n'@;
put 'ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06'@;
put 'ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihr'@;
put 'LEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMjg1MSksTyksSyhSKDkwOTcpLE8pLEsoUig5MTY2KSxPKX0sOTA5NzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVl'@;
put 'OiEwfSksTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD12b2lkIDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD1mdW5jdGlvbihSKXtyZXR1cm4vPGZvcm0uK2FjdGlvbj0iKC4qTG9nb25cL29hdXRoXC9hdXRob3JpemVbXiJdKikuKj4vZ20udGVzdChSKX19LDkxNjY6KE0sTyk9PnsidXNl'@;
put 'IHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNMb2dJblJlcXVpcmVkPXZvaWQgMCxPLmlzTG9nSW5SZXF1aXJlZD1mdW5jdGlvbihSKXtyZXR1cm4vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29uKXwobG9naW4pW14iXSopLio+L2dt'@;
put 'LnRlc3QoUil9fSw1NDE4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEUsaixWLEIpe3JldHVybiBuZXcoVnx8KFY9UHJvbWlzZSkpKGZ1bmN0aW9uKFksWCl7ZnVuY3Rpb24gVSh0ZSl7dHJ5e2VlKEIubmV4dCh0ZSkp'@;
put 'fWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gcSh0ZSl7dHJ5e2VlKEIudGhyb3codGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIGVlKHRlKXt2YXIgb2U7dGUuZG9uZT9ZKHRlLnZhbHVlKToob2U9dGUudmFsdWUsb2UgaW5zdGFuY2VvZiBWP29lOm5ldyBWKGZ1bmN0aW9uKHNlKXtz'@;
put 'ZShvZSl9KSkudGhlbihVLHEpfWVlKChCPUIuYXBwbHkoRSxqfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihFLGope3ZhciBWLEIsWSxYLFU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWVswXSl0aHJvdyBZWzFdO3JldHVybiBZWzFd'@;
put 'fSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFg9e25leHQ6cSgwKSx0aHJvdzpxKDEpLHJldHVybjpxKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxYO2Z1bmN0aW9uIHEoZWUpe3JldHVybiBmdW5jdGlv'@;
put 'bih0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtpZihWKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1U7KXRyeXtpZihWPTEsQiYmKFk9MiZvZVswXT9CLnJldHVybjpvZVswXT9CLnRocm93fHwoKFk9Qi5yZXR1cm4pJiZZLmNhbGwo'@;
put 'QiksMCk6Qi5uZXh0KSYmIShZPVkuY2FsbChCLG9lWzFdKSkuZG9uZSlyZXR1cm4gWTtzd2l0Y2goQj0wLFkmJihvZT1bMiZvZVswXSxZLnZhbHVlXSksb2VbMF0pe2Nhc2UgMDpjYXNlIDE6WT1vZTticmVhaztjYXNlIDQ6cmV0dXJuIFUubGFiZWwrKyx7dmFsdWU6b2VbMV0sZG9uZTohMX07'@;
put 'Y2FzZSA1OlUubGFiZWwrKyxCPW9lWzFdLG9lPVswXTtjb250aW51ZTtjYXNlIDc6b2U9VS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWT0oWT1VLnRyeXMpLmxlbmd0aD4wJiZZW1kubGVuZ3RoLTFdKXx8NiE9PW9lWzBdJiYyIT09b2VbMF0pKXtVPTA7'@;
put 'Y29udGludWV9aWYoMz09PW9lWzBdJiYoIVl8fG9lWzFdPllbMF0mJm9lWzFdPFlbM10pKXtVLmxhYmVsPW9lWzFdO2JyZWFrfWlmKDY9PT1vZVswXSYmVS5sYWJlbDxZWzFdKXtVLmxhYmVsPVlbMV0sWT1vZTticmVha31pZihZJiZVLmxhYmVsPFlbMl0pe1UubGFiZWw9WVsyXSxVLm9wcy5w'@;
put 'dXNoKG9lKTticmVha31ZWzJdJiZVLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWV9b2U9ai5jYWxsKEUsVSl9Y2F0Y2goc2Upe29lPVs2LHNlXSxCPTB9ZmluYWxseXtWPVk9MH1pZig1Jm9lWzBdKXRocm93IG9lWzFdO3JldHVybnt2YWx1ZTpvZVswXT9vZVsxXTp2b2lkIDAsZG9u'@;
put 'ZTohMH19KFtlZSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm9wZW5XZWJQYWdlPXZvaWQgMDt2YXIgST1SKDEyMTApLGs9e3dpZHRoOjUwMCxoZWlnaHQ6NjAwfTtPLm9wZW5XZWJQYWdlPWZ1bmN0aW9uKEUsaixWLEIpe3JldHVy'@;
put 'biB2b2lkIDA9PT1qJiYoaj0iIiksdm9pZCAwPT09ViYmKFY9aykseih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWSxYLFUscSxlZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2godGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gWT1WLndpZHRoLFg9Vi5oZWlnaHQs'@;
put 'VT1zY3JlZW4ud2lkdGgvMi1ZLzIscT1zY3JlZW4uaGVpZ2h0LzItWC8yLChlZT13aW5kb3cub3BlbihFLGosInRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0iLmNvbmNhdChZLCIsaGVpZ2h0PSIpLmNvbmNhdChYLCIsbGVmdD0iKS5jb25jYXQoVSwiLHRvcD0iKS5jb25j'@;
put 'YXQocSkpKT9bMywyXTpbNCwoQj8/SS5vcGVuTG9naW5Qcm9tcHQpKCldO2Nhc2UgMTpyZXR1cm5bMix0ZS5zZW50KCk/d2luZG93Lm9wZW4oRSxqLCJ0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9Ii5jb25jYXQoWSwiLGhlaWdodD0iKS5jb25jYXQoWCwiLGxlZnQ9Iiku'@;
put 'Y29uY2F0KFUsIix0b3A9IikuY29uY2F0KHEpKTpudWxsXTtjYXNlIDI6cmV0dXJuWzIsZWVdfX0pfSl9fSwyNDk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNl'@;
put 'KSkoZnVuY3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7dHJ5e3RlKFkudGhyb3cob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKToo'@;
put 'c2U9b2UudmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5KGosVnx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJl'@;
put 'bDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OmVlKDApLHRocm93OmVlKDEpLHJldHVybjplZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYo'@;
put 'WD0yJnNlWzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFksc2VbMV0pKS5kb25lKXJldHVybiBYO3N3aXRjaChZPTAsWCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpY'@;
put 'PXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5'@;
put 'cykubGVuZ3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8c2VbMV0+WFswXSYmc2VbMV08WFszXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9'@;
put 'WFsxXSxYPXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1WLmNhbGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlm'@;
put 'KDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucmVmcmVzaFRva2Vuc0ZvclNhc2pzPXZvaWQgMDt2YXIgST1SKDk3'@;
put 'NzgpLGs9Uig5MDE3KSxFPVIoMzkwMCk7Ty5yZWZyZXNoVG9rZW5zRm9yU2FzanM9ZnVuY3Rpb24oaixWKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsai5wb3N0'@;
put 'KCIvU0FTanNBcGkvYXV0aC9yZWZyZXNoIix2b2lkIDAsdm9pZCAwLHZvaWQgMCx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrVn0pLnRoZW4oZnVuY3Rpb24oVSl7dmFyIHE9VS5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpxLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46cS5yZWZyZXNo'@;
put 'VG9rZW59fSkuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKFUsKDAsay5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclNhc2pzIixFLlNlcnZlclR5cGUuU2FzanMsIi9TQVNqc0FwaS9hdXRo'@;
put 'L3JlZnJlc2giKSl9KV07Y2FzZSAxOnJldHVyblsyLFguc2VudCgpXX19KX0pfX0sMzY2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9t'@;
put 'aXNlKSkoZnVuY3Rpb24oZWUsdGUpe2Z1bmN0aW9uIG9lKHVlKXt0cnl7aGUocS5uZXh0KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gc2UodWUpe3RyeXtoZShxLnRocm93KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gaGUodWUpe3ZhciBjZTt1ZS5kb25lP2VlKHVl'@;
put 'LnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBVKGZ1bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4ob2Usc2UpfWhlKChxPXEuYXBwbHkoWSxYfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihZLFgpe3ZhciBVLHEsZWUs'@;
put 'dGUsb2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZWVbMF0pdGhyb3cgZWVbMV07cmV0dXJuIGVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5'@;
put 'bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoVSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtv'@;
put 'ZTspdHJ5e2lmKFU9MSxxJiYoZWU9MiZjZVswXT9xLnJldHVybjpjZVswXT9xLnRocm93fHwoKGVlPXEucmV0dXJuKSYmZWUuY2FsbChxKSwwKTpxLm5leHQpJiYhKGVlPWVlLmNhbGwocSxjZVsxXSkpLmRvbmUpcmV0dXJuIGVlO3N3aXRjaChxPTAsZWUmJihjZT1bMiZjZVswXSxlZS52YWx1'@;
put 'ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOmVlPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gb2UubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1Om9lLmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPW9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2Nv'@;
put 'bnRpbnVlO2RlZmF1bHQ6aWYoISgoZWU9KGVlPW9lLnRyeXMpLmxlbmd0aD4wJiZlZVtlZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0mJjIhPT1jZVswXSkpe29lPTA7Y29udGludWV9aWYoMz09PWNlWzBdJiYoIWVlfHxjZVsxXT5lZVswXSYmY2VbMV08ZWVbM10pKXtvZS5sYWJlbD1jZVsxXTti'@;
put 'cmVha31pZig2PT09Y2VbMF0mJm9lLmxhYmVsPGVlWzFdKXtvZS5sYWJlbD1lZVsxXSxlZT1jZTticmVha31pZihlZSYmb2UubGFiZWw8ZWVbMl0pe29lLmxhYmVsPWVlWzJdLG9lLm9wcy5wdXNoKGNlKTticmVha31lZVsyXSYmb2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWV9'@;
put 'Y2U9WC5jYWxsKFksb2UpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5e1U9ZWU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFtoZSx1ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KSxPLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDt2YXIgaz1SKDM5MDApLEU9Uig5Nzc4KSxqPVIoNjIzMCksVj1SKDU5MjgpLEI9Uig5MDE3KTtPLnJlZnJlc2hUb2tlbnNGb3JWaXlhPWZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQg'@;
put 'MCxmdW5jdGlvbigpe3ZhciBlZSx0ZSxvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDppZighKDAsVi5pc05vZGUpKCkpdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgJ3JlZnJlc2hUb2tlbnNGb3JWaXlhJyBjYW4gb25seSBiZSB1c2VkIGJ5'@;
put 'IE5vZGUuIik7cmV0dXJuIGVlPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLHRlPXZvaWQgMD09PXo/YnRvYShYKyI6IitVKTp6LmZyb20oWCsiOiIrVSkudG9TdHJpbmcoImJhc2U2NCIpLG9lPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiK3RlfSwoc2U9bmV3IGopLmFwcGVuZCgiZ3JhbnRfdHlw'@;
put 'ZSIsInJlZnJlc2hfdG9rZW4iKSxzZS5hcHBlbmQoInJlZnJlc2hfdG9rZW4iLHEpLFs0LFkucG9zdChlZSxzZSx2b2lkIDAsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrc2UuX2JvdW5kYXJ5LG9lKS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUucmVzdWx0fSkuY2F0Y2go'@;
put 'ZnVuY3Rpb24odWUpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKSh1ZSwoMCxCLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yVml5YSIsay5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZWUsc2Usb2UsWCxVKSl9KV07Y2FzZSAxOnJl'@;
put 'dHVyblsyLGhlLnNlbnQoKV19fSl9KX19LDQ1ODI6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oayxFLGosVil7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oQixZKXtmdW5jdGlvbiBYKGVlKXt0cnl7'@;
put 'cShWLm5leHQoZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIFUoZWUpe3RyeXtxKFYudGhyb3coZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIHEoZWUpe3ZhciB0ZTtlZS5kb25lP0IoZWUudmFsdWUpOih0ZT1lZS52YWx1ZSx0ZSBpbnN0YW5jZW9mIGo/dGU6bmV3IGooZnVu'@;
put 'Y3Rpb24ob2Upe29lKHRlKX0pKS50aGVuKFgsVSl9cSgoVj1WLmFwcGx5KGssRXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oayxFKXt2YXIgaixWLEIsWSxYPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkJbMF0pdGhyb3cgQlsxXTty'@;
put 'ZXR1cm4gQlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBZPXtuZXh0OlUoMCksdGhyb3c6VSgxKSxyZXR1cm46VSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWTtmdW5jdGlvbiBVKHEpe3JldHVy'@;
put 'biBmdW5jdGlvbihlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtpZihqKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1g7KXRyeXtpZihqPTEsViYmKEI9MiZ0ZVswXT9WLnJldHVybjp0ZVswXT9WLnRocm93fHwoKEI9Vi5yZXR1cm4p'@;
put 'JiZCLmNhbGwoViksMCk6Vi5uZXh0KSYmIShCPUIuY2FsbChWLHRlWzFdKSkuZG9uZSlyZXR1cm4gQjtzd2l0Y2goVj0wLEImJih0ZT1bMiZ0ZVswXSxCLnZhbHVlXSksdGVbMF0pe2Nhc2UgMDpjYXNlIDE6Qj10ZTticmVhaztjYXNlIDQ6cmV0dXJuIFgubGFiZWwrKyx7dmFsdWU6dGVbMV0s'@;
put 'ZG9uZTohMX07Y2FzZSA1OlgubGFiZWwrKyxWPXRlWzFdLHRlPVswXTtjb250aW51ZTtjYXNlIDc6dGU9WC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoQj0oQj1YLnRyeXMpLmxlbmd0aD4wJiZCW0IubGVuZ3RoLTFdKXx8NiE9PXRlWzBdJiYyIT09dGVb'@;
put 'MF0pKXtYPTA7Y29udGludWV9aWYoMz09PXRlWzBdJiYoIUJ8fHRlWzFdPkJbMF0mJnRlWzFdPEJbM10pKXtYLmxhYmVsPXRlWzFdO2JyZWFrfWlmKDY9PT10ZVswXSYmWC5sYWJlbDxCWzFdKXtYLmxhYmVsPUJbMV0sQj10ZTticmVha31pZihCJiZYLmxhYmVsPEJbMl0pe1gubGFiZWw9Qlsy'@;
put 'XSxYLm9wcy5wdXNoKHRlKTticmVha31CWzJdJiZYLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWV9dGU9RS5jYWxsKGssWCl9Y2F0Y2gob2Upe3RlPVs2LG9lXSxWPTB9ZmluYWxseXtqPUI9MH1pZig1JnRlWzBdKXRocm93IHRlWzFdO3JldHVybnt2YWx1ZTp0ZVswXT90ZVsxXTp2'@;
put 'b2lkIDAsZG9uZTohMH19KFtxLGVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udmVyaWZ5U2FzOUxvZ2luPXZvaWQgMDt2YXIgST1SKDU5MjgpO08udmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uKGspe3JldHVybiB6KHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbigpe3ZhciBFLGosVjtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKEIpe3N3aXRjaChCLmxhYmVsKXtjYXNlIDA6RT0hMSxqPW5ldyBEYXRlLFY9MCxCLmxhYmVsPTE7Y2FzZSAxOnJldHVybls0LCgwLEkuZGVsYXkpKDFlMyldO2Nhc2UgMjppZihCLnNlbnQoKSxrLmNs'@;
put 'b3NlZClyZXR1cm5bMyw0XTtFPWsud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJmsud2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0LmluY2x1ZGVzKCJZb3UgaGF2ZSBzaWduZWQgaW4uIiksVj0oKG5ldyBEYXRlKS52YWx1ZU9mKCktai52YWx1ZU9mKCkp'@;
put 'LzFlMyxCLmxhYmVsPTM7Y2FzZSAzOmlmKCFFJiZWPDMwMClyZXR1cm5bMywxXTtCLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyLHtpc0xvZ2dlZEluOkV9XX19KX0pfX0sNjU0NzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlv'@;
put 'bihrLEUsaixWKXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5jdGlvbihCLFkpe2Z1bmN0aW9uIFgoZWUpe3RyeXtxKFYubmV4dChlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gVShlZSl7dHJ5e3EoVi50aHJvdyhlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gcShl'@;
put 'ZSl7dmFyIHRlO2VlLmRvbmU/QihlZS52YWx1ZSk6KHRlPWVlLnZhbHVlLHRlIGluc3RhbmNlb2Ygaj90ZTpuZXcgaihmdW5jdGlvbihvZSl7b2UodGUpfSkpLnRoZW4oWCxVKX1xKChWPVYuYXBwbHkoayxFfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5j'@;
put 'dGlvbihrLEUpe3ZhciBqLFYsQixZLFg9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmQlswXSl0aHJvdyBCWzFdO3JldHVybiBCWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFk9e25leHQ6VSgwKSx0aHJvdzpVKDEpLHJldHVybjpVKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3lt'@;
put 'Ym9sJiYoWVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxZO2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe2lmKGopdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIp'@;
put 'O2Zvcig7WDspdHJ5e2lmKGo9MSxWJiYoQj0yJnRlWzBdP1YucmV0dXJuOnRlWzBdP1YudGhyb3d8fCgoQj1WLnJldHVybikmJkIuY2FsbChWKSwwKTpWLm5leHQpJiYhKEI9Qi5jYWxsKFYsdGVbMV0pKS5kb25lKXJldHVybiBCO3N3aXRjaChWPTAsQiYmKHRlPVsyJnRlWzBdLEIudmFsdWVd'@;
put 'KSx0ZVswXSl7Y2FzZSAwOmNhc2UgMTpCPXRlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gWC5sYWJlbCsrLHt2YWx1ZTp0ZVsxXSxkb25lOiExfTtjYXNlIDU6WC5sYWJlbCsrLFY9dGVbMV0sdGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp0ZT1YLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWU7'@;
put 'ZGVmYXVsdDppZighKChCPShCPVgudHJ5cykubGVuZ3RoPjAmJkJbQi5sZW5ndGgtMV0pfHw2IT09dGVbMF0mJjIhPT10ZVswXSkpe1g9MDtjb250aW51ZX1pZigzPT09dGVbMF0mJighQnx8dGVbMV0+QlswXSYmdGVbMV08QlszXSkpe1gubGFiZWw9dGVbMV07YnJlYWt9aWYoNj09PXRlWzBd'@;
put 'JiZYLmxhYmVsPEJbMV0pe1gubGFiZWw9QlsxXSxCPXRlO2JyZWFrfWlmKEImJlgubGFiZWw8QlsyXSl7WC5sYWJlbD1CWzJdLFgub3BzLnB1c2godGUpO2JyZWFrfUJbMl0mJlgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250aW51ZX10ZT1FLmNhbGwoayxYKX1jYXRjaChvZSl7dGU9WzYs'@;
put 'b2VdLFY9MH1maW5hbGx5e2o9Qj0wfWlmKDUmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJue3ZhbHVlOnRlWzBdP3RlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3EsZWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc0xvZ2dlZEluU0FTVklZ'@;
put 'QT1PLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7dmFyIEk9Uig1OTI4KTtPLnZlcmlmeVNhc1ZpeWFMb2dpbj1mdW5jdGlvbihrKXt2YXIgRSxqO3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBWLEIsWSxYO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oVSl7c3dp'@;
put 'dGNoKFUubGFiZWwpe2Nhc2UgMDpWPSExLEI9bmV3IERhdGUsWT0wLFUubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSAyOmlmKFUuc2VudCgpLGsuY2xvc2VkKXJldHVyblszLDRdO1Y9KDAsTy5pc0xvZ2dlZEluU0FTVklZQSkoKSxZPSgobmV3IERhdGUp'@;
put 'LnZhbHVlT2YoKS1CLnZhbHVlT2YoKSkvMWUzLFUubGFiZWw9MztjYXNlIDM6aWYoIVYmJlk8MzAwKXJldHVyblszLDFdO1UubGFiZWw9NDtjYXNlIDQ6WD0hMSxCPW5ldyBEYXRlLFUubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSA2OmlmKFUuc2VudCgp'@;
put 'LGsuY2xvc2VkKXJldHVyblszLDhdO1g9ay53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKXx8KG51bGw9PT0oaj1udWxsPT09KEU9ay53aW5kb3cuZG9jdW1lbnQuYm9keSl8fHZvaWQgMD09PUU/dm9pZCAwOkUuaW5uZXJUZXh0KXx8dm9pZCAwPT09aj92b2lkIDA6'@;
put 'ai5pbmNsdWRlcygiWW91IGhhdmUgc2lnbmVkIGluLiIpKSxZPSgobmV3IERhdGUpLnZhbHVlT2YoKS1CLnZhbHVlT2YoKSkvMWUzLFUubGFiZWw9NztjYXNlIDc6aWYoIVgmJlk8MzAwKXJldHVyblszLDVdO1UubGFiZWw9ODtjYXNlIDg6cmV0dXJuWzIse2lzTG9nZ2VkSW46ViYmWH1dfX0p'@;
put 'fSl9LE8uaXNMb2dnZWRJblNBU1ZJWUE9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJDdXJyZW50LVVzZXIiKSYmZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJ1c2VySWQiKX19LDQwMzc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDt2YXIgej1SKDI0MDIpLEs9Uig1OTI4KTtPLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gaylpZihBcnJheS5pc0FycmF5KGtbRV0p'@;
put 'KXt2YXIgaj1FLFY9KDAsei5jb252ZXJ0VG9DU1YpKGssRSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVYpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKCgwLEsuaXNO'@;
put 'b2RlKSgpKUkuYXBwZW5kKGosVix7ZmlsZW5hbWU6IiIuY29uY2F0KGosIi5jc3YiKSxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7dmFyIEI9bmV3IEJsb2IoW1ZdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7SS5hcHBlbmQoaixCLCIiLmNvbmNhdChqLCIuY3N2Iikp'@;
put 'fX1yZXR1cm4gSX19LDIxNzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT12b2lkIDA7dmFyIHo9UigyNDAyKSxLPVIoNDc5OSk7Ty5nZW5lcmF0ZVRhYmxlVXBs'@;
put 'b2FkRm9ybT1mdW5jdGlvbihJLGspe3ZhciBFPVtdLGo9e30sVj0wO2Zvcih2YXIgQiBpbiBrKXtWKyssKDAsei5pc0Zvcm1hdHNUYWJsZSkoQil8fEUucHVzaChCKTt2YXIgWT0oMCx6LmNvbnZlcnRUb0NTVikoayxCKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09WSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7WS5sZW5ndGg+MTZlMz8oMCxLLnNwbGl0Q2h1bmtzKShZKS5tYXAoZnVuY3Rpb24oWCl7SS5hcHBlbmQoInNhc2pzIi5jb25jYXQoViwiZGF0YSIpLFgp'@;
put 'fSk6alsic2FzanMiLmNvbmNhdChWLCJkYXRhIildPVl9cmV0dXJuIGouc2FzanNfdGFibGVzPUUuam9pbigiICIpLHtmb3JtRGF0YTpJLHJlcXVlc3RQYXJhbXM6an19fSwzNjA3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8'@;
put 'fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGssRSxqLFYpe3ZvaWQgMD09PVYmJihWPWopO3ZhciBCPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRSxqKTtCJiYhKCJnZXQiaW4gQj8hRS5fX2VzTW9kdWxlOkIud3JpdGFibGV8fEIuY29uZmlndXJhYmxlKXx8KEI9e2VudW1lcmFi'@;
put 'bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVbal19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssVixCKX06ZnVuY3Rpb24oayxFLGosVil7dm9pZCAwPT09ViYmKFY9aiksa1tWXT1FW2pdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oayxFKXtmb3IodmFyIGog'@;
put 'aW4gaykiZGVmYXVsdCI9PT1qfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxqKXx8eihFLGssail9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgST1SKDU5NTYpO0soUigxMjMwKSxPKSxLKFIoMTM5NSksTyksSyhS'@;
put 'KDk4MjEpLE8pLEsoUig4MzA2KSxPKSxLKFIoMzQ2NyksTyksSyhSKDM2MDIpLE8pLE8uZGVmYXVsdD1JLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihCLFkpe3JldHVybih6PU9iamVj'@;
put 'dC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihYLFUpe1guX19wcm90b19fPVV9fHxmdW5jdGlvbihYLFUpe2Zvcih2YXIgcSBpbiBVKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLHEpJiYoWFtxXT1VW3FdKX0p'@;
put 'KEIsWSl9LGZ1bmN0aW9uKEIsWSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFkmJm51bGwhPT1ZKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoWSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gWCgpe3RoaXMuY29uc3Ry'@;
put 'dWN0b3I9Qn16KEIsWSksQi5wcm90b3R5cGU9bnVsbD09PVk/T2JqZWN0LmNyZWF0ZShZKTooWC5wcm90b3R5cGU9WS5wcm90b3R5cGUsbmV3IFgpfSksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNlKSkoZnVuY3Rpb24o'@;
put 'cSxlZSl7ZnVuY3Rpb24gdGUoaGUpe3RyeXtzZShVLm5leHQoaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBvZShoZSl7dHJ5e3NlKFUudGhyb3coaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBzZShoZSl7dmFyIHVlO2hlLmRvbmU/cShoZS52YWx1ZSk6KHVlPWhlLnZh'@;
put 'bHVlLHVlIGluc3RhbmNlb2YgWD91ZTpuZXcgWChmdW5jdGlvbihjZSl7Y2UodWUpfSkpLnRoZW4odGUsb2UpfXNlKChVPVUuYXBwbHkoQixZfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihCLFkpe3ZhciBYLFUscSxlZSx0ZT17bGFiZWw6MCxz'@;
put 'ZW50OmZ1bmN0aW9uKCl7aWYoMSZxWzBdKXRocm93IHFbMV07cmV0dXJuIHFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gZWU9e25leHQ6b2UoMCksdGhyb3c6b2UoMSkscmV0dXJuOm9lKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzfSksZWU7ZnVuY3Rpb24gb2Uoc2Upe3JldHVybiBmdW5jdGlvbihoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtpZihYKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3RlOyl0cnl7aWYoWD0xLFUmJihx'@;
put 'PTImdWVbMF0/VS5yZXR1cm46dWVbMF0/VS50aHJvd3x8KChxPVUucmV0dXJuKSYmcS5jYWxsKFUpLDApOlUubmV4dCkmJiEocT1xLmNhbGwoVSx1ZVsxXSkpLmRvbmUpcmV0dXJuIHE7c3dpdGNoKFU9MCxxJiYodWU9WzImdWVbMF0scS52YWx1ZV0pLHVlWzBdKXtjYXNlIDA6Y2FzZSAxOnE9'@;
put 'dWU7YnJlYWs7Y2FzZSA0OnJldHVybiB0ZS5sYWJlbCsrLHt2YWx1ZTp1ZVsxXSxkb25lOiExfTtjYXNlIDU6dGUubGFiZWwrKyxVPXVlWzFdLHVlPVswXTtjb250aW51ZTtjYXNlIDc6dWU9dGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChxPShxPXRl'@;
put 'LnRyeXMpLmxlbmd0aD4wJiZxW3EubGVuZ3RoLTFdKXx8NiE9PXVlWzBdJiYyIT09dWVbMF0pKXt0ZT0wO2NvbnRpbnVlfWlmKDM9PT11ZVswXSYmKCFxfHx1ZVsxXT5xWzBdJiZ1ZVsxXTxxWzNdKSl7dGUubGFiZWw9dWVbMV07YnJlYWt9aWYoNj09PXVlWzBdJiZ0ZS5sYWJlbDxxWzFdKXt0'@;
put 'ZS5sYWJlbD1xWzFdLHE9dWU7YnJlYWt9aWYocSYmdGUubGFiZWw8cVsyXSl7dGUubGFiZWw9cVsyXSx0ZS5vcHMucHVzaCh1ZSk7YnJlYWt9cVsyXSYmdGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWV9dWU9WS5jYWxsKEIsdGUpfWNhdGNoKGNlKXt1ZT1bNixjZV0sVT0wfWZp'@;
put 'bmFsbHl7WD1xPTB9aWYoNSZ1ZVswXSl0aHJvdyB1ZVsxXTtyZXR1cm57dmFsdWU6dWVbMF0/dWVbMV06dm9pZCAwLGRvbmU6ITB9fShbc2UsaGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAw'@;
put 'O3ZhciBFPVIoMzkwMCksaj1SKDEzOTUpLFY9ZnVuY3Rpb24oQil7ZnVuY3Rpb24gWShYLFUpe3ZhciBxPUIuY2FsbCh0aGlzLFgsRS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfHx0aGlzO3JldHVybiBxLnNhc1ZpeWFBcGlDbGllbnQ9VSxxfXJldHVybiBLKFksQiksWS5wcm90b3R5cGUuZXhlY3V0'@;
put 'ZT1mdW5jdGlvbihYLFUscSxlZSx0ZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLGhlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih1ZSl7cmV0dXJuIG9lPWVlfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sWzIsbmV3IFBy'@;
put 'b21pc2UoZnVuY3Rpb24oY2UsRyl7dmFyIGI7bnVsbD09PShiPWhlLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1ifHxiLmV4ZWN1dGVDb21wdXRlSm9iKFgscS5jb250ZXh0TmFtZSxxLmRlYnVnLFUsdGUsITAsITApLnRoZW4oZnVuY3Rpb24oRCl7aGUuc2FzVml5YUFwaUNsaWVudC5h'@;
put 'cHBlbmRSZXF1ZXN0KEQsWCxxLmRlYnVnKSxjZShELnJlc3VsdCl9KS5jYXRjaChmdW5jdGlvbihEKXtyZXR1cm4gSShoZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQg'@;
put 'aW5zdGFuY2VvZiBqLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEQsWCxxLmRlYnVnKSxHKG5ldyBqLkVycm9yUmVzcG9uc2UoRD8ubWVzc2FnZSxEKSkpLEQgaW5zdGFuY2VvZiBqLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhp'@;
put 'cy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBILmV4ZWN1dGUoWCxVLHEsZWUpLnRoZW4oZnVuY3Rpb24oZyl7Y2UoZyl9LGZ1bmN0aW9uKGcpe0coZyl9KX0pLFs0LG9lKCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIE4uc2VudCgpLFszLDNdO2Nhc2UgMjpHKG5ldyBq'@;
put 'LkVycm9yUmVzcG9uc2UoRD8ubWVzc2FnZSxEKSksTi5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sWX0oUig2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO08uQ29tcHV0ZUpvYkV4ZWN1dG9yPVZ9LDM0OTE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixL'@;
put 'PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihZLFgpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihVLHEpe1UuX19wcm90b19fPXF9fHxmdW5jdGlvbihVLHEpe2Zvcih2YXIgZWUgaW4gcSlP'@;
put 'YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxlZSkmJihVW2VlXT1xW2VlXSl9KShZLFgpfSxmdW5jdGlvbihZLFgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBYJiZudWxsIT09WCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFgp'@;
put 'KyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFUoKXt0aGlzLmNvbnN0cnVjdG9yPVl9eihZLFgpLFkucHJvdG90eXBlPW51bGw9PT1YP09iamVjdC5jcmVhdGUoWCk6KFUucHJvdG90eXBlPVgucHJvdG90eXBlLG5ldyBVKX0pLEk9dGhpcyYmdGhpcy5fX2F3YWl0'@;
put 'ZXJ8fGZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKGVlLHRlKXtmdW5jdGlvbiBvZSh1ZSl7dHJ5e2hlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIHNlKHVlKXt0cnl7aGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXt0'@;
put 'ZShjZSl9fWZ1bmN0aW9uIGhlKHVlKXt2YXIgY2U7dWUuZG9uZT9lZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVuKG9lLHNlKX1oZSgocT1xLmFwcGx5KFksWHx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYm'@;
put 'dGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWSxYKXt2YXIgVSxxLGVlLHRlLG9lPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmVlWzBdKXRocm93IGVlWzFdO3JldHVybiBlZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB0ZT17bmV4dDpzZSgwKSx0aHJvdzpzZSgxKSxyZXR1'@;
put 'cm46c2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih0ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0ZTtmdW5jdGlvbiBzZShoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7b2U7KXRyeXtpZihVPTEscSYmKGVlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KChlZT1xLnJldHVybikmJmVlLmNhbGwocSksMCk6cS5uZXh0KSYmIShlZT1lZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJl'@;
put 'dHVybiBlZTtzd2l0Y2gocT0wLGVlJiYoY2U9WzImY2VbMF0sZWUudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTplZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIG9lLmxhYmVsKysse3ZhbHVlOmNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpvZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRp'@;
put 'bnVlO2Nhc2UgNzpjZT1vZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGVlPShlZT1vZS50cnlzKS5sZW5ndGg+MCYmZWVbZWUubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXtvZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCFlZXx8'@;
put 'Y2VbMV0+ZWVbMF0mJmNlWzFdPGVlWzNdKSl7b2UubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZvZS5sYWJlbDxlZVsxXSl7b2UubGFiZWw9ZWVbMV0sZWU9Y2U7YnJlYWt9aWYoZWUmJm9lLmxhYmVsPGVlWzJdKXtvZS5sYWJlbD1lZVsyXSxvZS5vcHMucHVzaChjZSk7YnJlYWt9'@;
put 'ZWVbMl0mJm9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVguY2FsbChZLG9lKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXtVPWVlPTB9aWYoNSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbaGUs'@;
put 'dWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5GaWxlVXBsb2FkZXI9dm9pZCAwO3ZhciBFPVIoNTkyOCksaj1SKDEzOTUpLFY9UigzOTAwKSxCPWZ1bmN0aW9uKFkpe2Z1bmN0aW9uIFgoVSxxLGVlLHRlKXt2YXIgb2U9WS5jYWxsKHRo'@;
put 'aXMsVSxxKXx8dGhpcztyZXR1cm4gb2Uuam9ic1BhdGg9ZWUsb2UucmVxdWVzdENsaWVudD10ZSxvZX1yZXR1cm4gSyhYLFkpLFgucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oVSxxLGVlLHRlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2UsaGUs'@;
put 'dWUsY2UsRyxiLEQsSCxOLGcsQyxTLHA9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHcpe2lmKG9lPXEuZmlsZXMsc2U9cS5wYXJhbXMsaGU9dGV8fGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSwhb2U/Lmxlbmd0aCl0aHJvdyBuZXcgai5FcnJvclJlc3BvbnNlKCJB'@;
put 'dCBsZWFzdCBvbmUgZmlsZSBtdXN0IGJlIHByb3ZpZGVkLiIpO2lmKCFVfHwiIj09PVUpdGhyb3cgbmV3IGouRXJyb3JSZXNwb25zZSgic2FzSm9iIG11c3QgYmUgcHJvdmlkZWQuIik7Zm9yKGNlIGluIHVlPSIiLHNlKXNlLmhhc093blByb3BlcnR5KGNlKSYmKHVlKz0iJiIuY29uY2F0KGNl'@;
put 'LCI9IikuY29uY2F0KHNlW2NlXSkpO2ZvcihHPWVlLmFwcExvYz9lZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStVLnJlcGxhY2UoL15cLy8sIiIpOlUsYj0iIi5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrRykuY29uY2F0KHVlKSxEPW5ldyBGb3Jt'@;
put 'RGF0YSxIPTAsTj1vZTtIPE4ubGVuZ3RoO0grKylELmFwcGVuZCgiZmlsZSIsKGc9TltIXSkuZmlsZSxnLmZpbGVOYW1lKTtyZXR1cm4oQz10aGlzLnJlcXVlc3RDbGllbnQuZ2V0Q3NyZlRva2VuKCJmaWxlIikpJiZELmFwcGVuZCgiX2NzcmYiLEMudmFsdWUpLGVlLmRlYnVnJiZELmFwcGVu'@;
put 'ZCgiX2RlYnVnIiwiMTMxIiksZWUuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXNWaXlhJiZlZS5jb250ZXh0TmFtZSYmRC5hcHBlbmQoIl9jb250ZXh0bmFtZSIsZWUuY29udGV4dE5hbWUpLFM9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1U'@;
put 'eXBlIjoidGV4dC9wbGFpbiJ9LFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEosbmUpe3AucmVxdWVzdENsaWVudC5wb3N0KGIsRCx2b2lkIDAsImFwcGxpY2F0aW9uL2pzb24iLFMpLnRoZW4oZnVuY3Rpb24oZGUpe3JldHVybiBJKHAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBmZTty'@;
put 'ZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHhlKXtzd2l0Y2goeGUubGFiZWwpe2Nhc2UgMDppZih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChkZSxVLGVlLmRlYnVnKSxmZT1kZS5yZXN1bHQsIWVlLmRlYnVnKXJldHVyblszLDZdO3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2Ug'@;
put 'Vi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuWzMsMV07Y2FzZSBWLlNlcnZlclR5cGUuU2FzOTpyZXR1cm5bMywzXTtjYXNlIFYuU2VydmVyVHlwZS5TYXNqczpyZXR1cm5bMyw0XX1yZXR1cm5bMyw1XTtjYXNlIDE6cmV0dXJuWzQsKDAsRS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShk'@;
put 'ZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LGVlLnNlcnZlclVybCldO2Nhc2UgMjpyZXR1cm4gZmU9eGUuc2VudCgpLFszLDVdO2Nhc2UgMzpyZXR1cm4gZmU9InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQ/KDAsRS5wYXJzZVdlYm91dFJlc3BvbnNlKShkZS5yZXN1bHQsYik6ZGUucmVz'@;
put 'dWx0LFszLDVdO2Nhc2UgNDpyZXR1cm4gZmU9InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQ/KDAsRS5nZXRWYWxpZEpzb24pKGRlLnJlc3VsdCk6ZGUucmVzdWx0LFszLDVdO2Nhc2UgNTpyZXR1cm5bMyw3XTtjYXNlIDY6ZmU9InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQ/KDAsRS5nZXRW'@;
put 'YWxpZEpzb24pKGRlLnJlc3VsdCk6ZGUucmVzdWx0LHhlLmxhYmVsPTc7Y2FzZSA3OnJldHVybiBKKGZlKSxbMl19fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKGRlKXtyZXR1cm4gSShwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZmU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHhl'@;
put 'KXtzd2l0Y2goeGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZGUgaW5zdGFuY2VvZiBqLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZGUsVSxlZS5kZWJ1ZyksbmUobmV3IGouRXJyb3JSZXNwb25zZShkZT8ubWVzc2FnZSxkZSkpKSxkZSBpbnN0'@;
put 'YW5jZW9mIGouTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIGZlLmV4ZWN1dGUoVSxxLGVlLHRlKS50aGVuKGZ1bmN0aW9uKExlKXtKKExlKX0sZnVuY3Rpb24oTGUpe25lKExlKX0pfSksWzQsaGUoKV0pOlszLDJdO2Nhc2Ug'@;
put 'MTpyZXR1cm4geGUuc2VudCgpLFszLDNdO2Nhc2UgMjpuZShuZXcgai5FcnJvclJlc3BvbnNlKCJGaWxlIHVwbG9hZCByZXF1ZXN0IGZhaWxlZC4iLGRlKSkseGUubGFiZWw9MztjYXNlIDM6cmV0dXJuWzJdfX0pfSl9KX0pXX0pfSl9LFh9KFIoNjExOCkuQmFzZUpvYkV4ZWN1dG9yKTtPLkZp'@;
put 'bGVVcGxvYWRlcj1CfSw0NDQ2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oWCxVKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rp'@;
put 'b24ocSxlZSl7cS5fX3Byb3RvX189ZWV9fHxmdW5jdGlvbihxLGVlKXtmb3IodmFyIHRlIGluIGVlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZSx0ZSkmJihxW3RlXT1lZVt0ZV0pfSkoWCxVKX0sZnVuY3Rpb24oWCxVKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVSYm'@;
put 'bnVsbCE9PVUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhVKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1YfXooWCxVKSxYLnByb3RvdHlwZT1udWxsPT09VT9PYmplY3QuY3Jl'@;
put 'YXRlKFUpOihxLnByb3RvdHlwZT1VLnByb3RvdHlwZSxuZXcgcSl9KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihYLFUscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24odGUsb2Upe2Z1bmN0aW9uIHNlKGNlKXt0cnl7dWUoZWUubmV4dChjZSkpfWNh'@;
put 'dGNoKEcpe29lKEcpfX1mdW5jdGlvbiBoZShjZSl7dHJ5e3VlKGVlLnRocm93KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIHVlKGNlKXt2YXIgRztjZS5kb25lP3RlKGNlLnZhbHVlKTooRz1jZS52YWx1ZSxHIGluc3RhbmNlb2YgcT9HOm5ldyBxKGZ1bmN0aW9uKGIpe2IoRyl9KSku'@;
put 'dGhlbihzZSxoZSl9dWUoKGVlPWVlLmFwcGx5KFgsVXx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWCxVKXt2YXIgcSxlZSx0ZSxvZSxzZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm4gdGVb'@;
put 'MV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gb2U9e25leHQ6aGUoMCksdGhyb3c6aGUoMSkscmV0dXJuOmhlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYob2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksb2U7ZnVuY3Rpb24gaGUodWUpe3JldHVy'@;
put 'biBmdW5jdGlvbihjZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe2lmKHEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7c2U7KXRyeXtpZihxPTEsZWUmJih0ZT0yJkdbMF0/ZWUucmV0dXJuOkdbMF0/ZWUudGhyb3d8fCgodGU9ZWUucmV0'@;
put 'dXJuKSYmdGUuY2FsbChlZSksMCk6ZWUubmV4dCkmJiEodGU9dGUuY2FsbChlZSxHWzFdKSkuZG9uZSlyZXR1cm4gdGU7c3dpdGNoKGVlPTAsdGUmJihHPVsyJkdbMF0sdGUudmFsdWVdKSxHWzBdKXtjYXNlIDA6Y2FzZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBzZS5sYWJlbCsrLHt2'@;
put 'YWx1ZTpHWzFdLGRvbmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLGVlPUdbMV0sRz1bMF07Y29udGludWU7Y2FzZSA3Okc9c2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCh0ZT0odGU9c2UudHJ5cykubGVuZ3RoPjAmJnRlW3RlLmxlbmd0aC0xXSl8fDYh'@;
put 'PT1HWzBdJiYyIT09R1swXSkpe3NlPTA7Y29udGludWV9aWYoMz09PUdbMF0mJighdGV8fEdbMV0+dGVbMF0mJkdbMV08dGVbM10pKXtzZS5sYWJlbD1HWzFdO2JyZWFrfWlmKDY9PT1HWzBdJiZzZS5sYWJlbDx0ZVsxXSl7c2UubGFiZWw9dGVbMV0sdGU9RzticmVha31pZih0ZSYmc2UubGFi'@;
put 'ZWw8dGVbMl0pe3NlLmxhYmVsPXRlWzJdLHNlLm9wcy5wdXNoKEcpO2JyZWFrfXRlWzJdJiZzZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZX1HPVUuY2FsbChYLHNlKX1jYXRjaChiKXtHPVs2LGJdLGVlPTB9ZmluYWxseXtxPXRlPTB9aWYoNSZHWzBdKXRocm93IEdbMV07cmV0'@;
put 'dXJue3ZhbHVlOkdbMF0/R1sxXTp2b2lkIDAsZG9uZTohMH19KFt1ZSxjZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkplc0pvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgRT1SKDM5MDApLGo9UigxMzk1KSxWPVIoNjExOCksQj1SKDU5Mjgp'@;
put 'LFk9ZnVuY3Rpb24oWCl7ZnVuY3Rpb24gVShxLGVlKXt2YXIgdGU9WC5jYWxsKHRoaXMscSxFLlNlcnZlclR5cGUuU2FzVml5YSl8fHRoaXM7cmV0dXJuIHRlLnNhc1ZpeWFBcGlDbGllbnQ9ZWUsdGV9cmV0dXJuIEsoVSxYKSxVLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKHEsZWUsdGUs'@;
put 'b2Usc2UsaGUpe3JldHVybiB2b2lkIDA9PT1oZSYmKGhlPVtdKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxHPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gdWU9b2V8fGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxbMixu'@;
put 'ZXcgUHJvbWlzZShmdW5jdGlvbihELEgpe3ZhciBOO251bGw9PT0oTj1HLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1OfHxOLmV4ZWN1dGVKb2IocSx0ZS5jb250ZXh0TmFtZSx0ZS5kZWJ1ZyxlZSxzZSkudGhlbihmdW5jdGlvbihnKXtHLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVx'@;
put 'dWVzdChnLHEsdGUuZGVidWcpO3ZhciBDPSgwLEIuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKGcsaGUpO0QoQyl9KS5jYXRjaChmdW5jdGlvbihnKXtyZXR1cm4gSShHLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQz10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7'@;
put 'c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZyBpbnN0YW5jZW9mIGouSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChnLHEsdGUuZGVidWcpLEgobmV3IGouRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSksZyBpbnN0YW5jZW9m'@;
put 'IGouTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIEMuZXhlY3V0ZShxLGVlLHRlLG9lLHNlLGhlKS50aGVuKGZ1bmN0aW9uKHYpe0Qodil9LGZ1bmN0aW9uKHYpe0godil9KX0pLFs0LHVlKCldKTpbMywyXTtjYXNlIDE6cmV0'@;
put 'dXJuIFMuc2VudCgpLFszLDNdO2Nhc2UgMjpIKG5ldyBqLkVycm9yUmVzcG9uc2UoZz8ubWVzc2FnZSxnKSksUy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sVX0oVi5CYXNlSm9iRXhlY3V0b3IpO08uSmVzSm9iRXhlY3V0b3I9WX0sNjExODpmdW5jdGlvbihNLE8s'@;
put 'Uil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLGosVixCKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1bmN0aW9uIFUodGUpe3RyeXtlZShCLm5leHQodGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIHEo'@;
put 'dGUpe3RyeXtlZShCLnRocm93KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBlZSh0ZSl7dmFyIG9lO3RlLmRvbmU/WSh0ZS52YWx1ZSk6KG9lPXRlLnZhbHVlLG9lIGluc3RhbmNlb2YgVj9vZTpuZXcgVihmdW5jdGlvbihzZSl7c2Uob2UpfSkpLnRoZW4oVSxxKX1lZSgoQj1CLmFw'@;
put 'cGx5KEUsanx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRSxqKXt2YXIgVixCLFksWCxVPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJllbMF0pdGhyb3cgWVsxXTtyZXR1cm4gWVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBYPXtu'@;
put 'ZXh0OnEoMCksdGhyb3c6cSgxKSxyZXR1cm46cSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWDtmdW5jdGlvbiBxKGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihvZSl7aWYo'@;
put 'Vil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtVOyl0cnl7aWYoVj0xLEImJihZPTImb2VbMF0/Qi5yZXR1cm46b2VbMF0/Qi50aHJvd3x8KChZPUIucmV0dXJuKSYmWS5jYWxsKEIpLDApOkIubmV4dCkmJiEoWT1ZLmNhbGwoQixv'@;
put 'ZVsxXSkpLmRvbmUpcmV0dXJuIFk7c3dpdGNoKEI9MCxZJiYob2U9WzImb2VbMF0sWS52YWx1ZV0pLG9lWzBdKXtjYXNlIDA6Y2FzZSAxOlk9b2U7YnJlYWs7Y2FzZSA0OnJldHVybiBVLmxhYmVsKysse3ZhbHVlOm9lWzFdLGRvbmU6ITF9O2Nhc2UgNTpVLmxhYmVsKyssQj1vZVsxXSxvZT1b'@;
put 'MF07Y29udGludWU7Y2FzZSA3Om9lPVUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFk9KFk9VS50cnlzKS5sZW5ndGg+MCYmWVtZLmxlbmd0aC0xXSl8fDYhPT1vZVswXSYmMiE9PW9lWzBdKSl7VT0wO2NvbnRpbnVlfWlmKDM9PT1vZVswXSYmKCFZfHxv'@;
put 'ZVsxXT5ZWzBdJiZvZVsxXTxZWzNdKSl7VS5sYWJlbD1vZVsxXTticmVha31pZig2PT09b2VbMF0mJlUubGFiZWw8WVsxXSl7VS5sYWJlbD1ZWzFdLFk9b2U7YnJlYWt9aWYoWSYmVS5sYWJlbDxZWzJdKXtVLmxhYmVsPVlbMl0sVS5vcHMucHVzaChvZSk7YnJlYWt9WVsyXSYmVS5vcHMucG9w'@;
put 'KCksVS50cnlzLnBvcCgpO2NvbnRpbnVlfW9lPWouY2FsbChFLFUpfWNhdGNoKHNlKXtvZT1bNixzZV0sQj0wfWZpbmFsbHl7Vj1ZPTB9aWYoNSZvZVswXSl0aHJvdyBvZVsxXTtyZXR1cm57dmFsdWU6b2VbMF0/b2VbMV06dm9pZCAwLGRvbmU6ITB9fShbZWUsdGVdKX19fTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5CYXNlSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBJPVIoNTkyOCksaz1mdW5jdGlvbigpe2Z1bmN0aW9uIEUoaixWKXt2YXIgQj10aGlzO3RoaXMuc2VydmVyVXJsPWosdGhpcy5zZXJ2ZXJUeXBlPVYsdGhpcy53YWl0aW5n'@;
put 'UmVxdWVzdHM9W10sdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4geihCLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWT10aGlzO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxJLmFzeW5j'@;
put 'Rm9yRWFjaCkodGhpcy53YWl0aW5nUmVxdWVzdHMsZnVuY3Rpb24oVSl7cmV0dXJuIHooWSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihxKXtzd2l0Y2gocS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LFUoKV07Y2FzZSAxOnJldHVybiBxLnNlbnQoKSxb'@;
put 'Ml19fSl9KX0pXTtjYXNlIDE6cmV0dXJuIFguc2VudCgpLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdLFsyXX19KX0pfX1yZXR1cm4gRS5wcm90b3R5cGUuYXBwZW5kV2FpdGluZ1JlcXVlc3Q9ZnVuY3Rpb24oail7dGhpcy53YWl0aW5nUmVxdWVzdHMucHVzaChqKX0sRS5wcm90b3R5cGUuZ2V0'@;
put 'UmVxdWVzdFBhcmFtcz1mdW5jdGlvbihqKXt2YXIgVj17fTtyZXR1cm4gai5kZWJ1ZyYmKFYuX29taXR0ZXh0bG9nPSJmYWxzZSIsVi5fb21pdHNlc3Npb25yZXN1bHRzPSJmYWxzZSIsVi5fZGVidWc9MTMxKSxWfSxFfSgpO08uQmFzZUpvYkV4ZWN1dG9yPWt9LDI2OTM6ZnVuY3Rpb24oTSxP'@;
put 'LFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKG9lLHNlKXtvZS5fX3Byb3RvX189c2V9fHxm'@;
put 'dW5jdGlvbihvZSxzZSl7Zm9yKHZhciBoZSBpbiBzZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsaGUpJiYob2VbaGVdPXNlW2hlXSl9KShlZSx0ZSl9LGZ1bmN0aW9uKGVlLHRlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGUmJm51bGwhPT10ZSl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHRlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvZSgpe3RoaXMuY29uc3RydWN0b3I9ZWV9eihlZSx0ZSksZWUucHJvdG90eXBlPW51bGw9PT10ZT9PYmplY3QuY3JlYXRlKHRlKToob2Uu'@;
put 'cHJvdG90eXBlPXRlLnByb3RvdHlwZSxuZXcgb2UpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlLG9lPTEsc2U9YXJndW1lbnRzLmxlbmd0aDtvZTxzZTtvZSsrKWZvcih2YXIgaGUgaW4g'@;
put 'dGU9YXJndW1lbnRzW29lXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGUsaGUpJiYoZWVbaGVdPXRlW2hlXSk7cmV0dXJuIGVlfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZWUsdGUsb2Usc2Upe3JldHVy'@;
put 'biBuZXcob2V8fChvZT1Qcm9taXNlKSkoZnVuY3Rpb24oaGUsdWUpe2Z1bmN0aW9uIGNlKEQpe3RyeXtiKHNlLm5leHQoRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBHKEQpe3RyeXtiKHNlLnRocm93KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gYihEKXt2YXIgSDtELmRvbmU/'@;
put 'aGUoRC52YWx1ZSk6KEg9RC52YWx1ZSxIIGluc3RhbmNlb2Ygb2U/SDpuZXcgb2UoZnVuY3Rpb24oTil7TihIKX0pKS50aGVuKGNlLEcpfWIoKHNlPXNlLmFwcGx5KGVlLHRlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihlZSx0ZSl7dmFyIG9l'@;
put 'LHNlLGhlLHVlLGNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmhlWzBdKXRocm93IGhlWzFdO3JldHVybiBoZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB1ZT17bmV4dDpHKDApLHRocm93OkcoMSkscmV0dXJuOkcoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih1'@;
put 'ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1ZTtmdW5jdGlvbiBHKGIpe3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oSCl7aWYob2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7'@;
put 'Y2U7KXRyeXtpZihvZT0xLHNlJiYoaGU9MiZIWzBdP3NlLnJldHVybjpIWzBdP3NlLnRocm93fHwoKGhlPXNlLnJldHVybikmJmhlLmNhbGwoc2UpLDApOnNlLm5leHQpJiYhKGhlPWhlLmNhbGwoc2UsSFsxXSkpLmRvbmUpcmV0dXJuIGhlO3N3aXRjaChzZT0wLGhlJiYoSD1bMiZIWzBdLGhl'@;
put 'LnZhbHVlXSksSFswXSl7Y2FzZSAwOmNhc2UgMTpoZT1IO2JyZWFrO2Nhc2UgNDpyZXR1cm4gY2UubGFiZWwrKyx7dmFsdWU6SFsxXSxkb25lOiExfTtjYXNlIDU6Y2UubGFiZWwrKyxzZT1IWzFdLEg9WzBdO2NvbnRpbnVlO2Nhc2UgNzpIPWNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2Nv'@;
put 'bnRpbnVlO2RlZmF1bHQ6aWYoISgoaGU9KGhlPWNlLnRyeXMpLmxlbmd0aD4wJiZoZVtoZS5sZW5ndGgtMV0pfHw2IT09SFswXSYmMiE9PUhbMF0pKXtjZT0wO2NvbnRpbnVlfWlmKDM9PT1IWzBdJiYoIWhlfHxIWzFdPmhlWzBdJiZIWzFdPGhlWzNdKSl7Y2UubGFiZWw9SFsxXTticmVha31p'@;
put 'Zig2PT09SFswXSYmY2UubGFiZWw8aGVbMV0pe2NlLmxhYmVsPWhlWzFdLGhlPUg7YnJlYWt9aWYoaGUmJmNlLmxhYmVsPGhlWzJdKXtjZS5sYWJlbD1oZVsyXSxjZS5vcHMucHVzaChIKTticmVha31oZVsyXSYmY2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWV9SD10ZS5jYWxs'@;
put 'KGVlLGNlKX1jYXRjaChOKXtIPVs2LE5dLHNlPTB9ZmluYWxseXtvZT1oZT0wfWlmKDUmSFswXSl0aHJvdyBIWzFdO3JldHVybnt2YWx1ZTpIWzBdP0hbMV06dm9pZCAwLGRvbmU6ITB9fShbYixEXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p'@;
put 'LE8uU2FzOUpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgaj1SKDYyMzApLFY9UigxMzk1KSxCPVIoNTkyOCksWT1SKDYxMTgpLFg9Uig3OTUpLFU9ZnVuY3Rpb24oZWUpe2Z1bmN0aW9uIHRlKG9lLHNlLGhlLHVlLGNlKXt2YXIgRz1lZS5jYWxsKHRoaXMsb2Usc2UpfHx0aGlzO3JldHVybiBHLmpv'@;
put 'YnNQYXRoPWhlLEcucmVxdWVzdENsaWVudD11ZSxHLnNhczlSZXF1ZXN0Q2xpZW50PW5ldyBYLlNhczlSZXF1ZXN0Q2xpZW50KG9lLGNlKSxHfXJldHVybiBLKHRlLGVlKSx0ZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihvZSxzZSxoZSl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKCl7dmFyIHVlLGNlLEcsYixELEgsTj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZih1ZT0oMCxCLmlzUmVsYXRpdmVQYXRoKShvZSkmJmhlLmFwcExvYz9oZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStvZS5yZXBs'@;
put 'YWNlKC9eXC8vLCIiKTpvZSxjZT0iIi5jb25jYXQoaGUuc2VydmVyVXJsKS5jb25jYXQodGhpcy5qb2JzUGF0aCwiPyIpLmNvbmNhdCgiX3Byb2dyYW09Iit1ZSksY2U9IiIuY29uY2F0KGNlKS5jb25jYXQoaGUudXNlcm5hbWUmJmhlLnBhc3N3b3JkPyImX3VzZXJuYW1lPSIraGUudXNlcm5h'@;
put 'bWUrIiZfcGFzc3dvcmQ9IitoZS5wYXNzd29yZDoiIiksY2U9IiIuY29uY2F0KGNlKS5jb25jYXQoaGUuZGVidWc/IiZfZGVidWc9MTMxIjoiIiksRz1JKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhoZSkpLGI9bmV3IGosc2UpdHJ5e2I9cShiLHNlKX1jYXRjaChDKXtyZXR1cm5bMixQcm9t'@;
put 'aXNlLnJlamVjdChuZXcgVi5FcnJvclJlc3BvbnNlKEM/Lm1lc3NhZ2UsQykpXX1lbHNlIHNlPSIiO2ZvcihEIGluIEcpRy5oYXNPd25Qcm9wZXJ0eShEKSYmYi5hcHBlbmQoRCxHW0RdKTtyZXR1cm5bNCx0aGlzLnNhczlSZXF1ZXN0Q2xpZW50LmxvZ2luKGhlLnVzZXJuYW1lLGhlLnBhc3N3'@;
put 'b3JkLHRoaXMuam9ic1BhdGgpXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpLEg9c2UmJk9iamVjdC5rZXlzKHNlKS5sZW5ndGg/Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrYi5fYm91bmRhcnk6InRleHQvcGxhaW4iLFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEMsUyl7cmV0dXJu'@;
put 'IE4uc2FzOVJlcXVlc3RDbGllbnQucG9zdChjZSxiLHZvaWQgMCxILHtBY2NlcHQ6IiovKiIsQ29ubmVjdGlvbjoiS2VlcC1BbGl2ZSJ9KS50aGVuKGZ1bmN0aW9uKHYpe04ucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHYsb2UsaGUuZGVidWcpLEModil9KS5jYXRjaChmdW5jdGlvbih2'@;
put 'KXt2YXIgcD12O3YucmVzdWx0JiYiIiE9PXYucmVzdWx0P3A9di5yZXN1bHQ6di5tZXNzYWdlJiYocD12Lm1lc3NhZ2UpLE4ucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHAsb2UsaGUuZGVidWcpLFMobmV3IFYuRXJyb3JSZXNwb25zZSh2Py5tZXNzYWdlLHYpKX0pfSldfX0pfSl9LHRl'@;
put 'LnByb3RvdHlwZS5nZXRSZXF1ZXN0UGFyYW1zPWZ1bmN0aW9uKG9lKXt2YXIgc2U9e307cmV0dXJuIG9lLmRlYnVnJiYoc2UuX2RlYnVnPTEzMSksc2V9LHRlfShZLkJhc2VKb2JFeGVjdXRvcik7Ty5TYXM5Sm9iRXhlY3V0b3I9VTt2YXIgcT1mdW5jdGlvbihlZSx0ZSl7Zm9yKHZhciBvZSBp'@;
put 'biB0ZSl7dmFyIHNlPW9lLGhlPSgwLEIuY29udmVydFRvQ1NWKSh0ZSxvZSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PWhlKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtl'@;
put 'ZS5hcHBlbmQoc2UsaGUse2ZpbGVuYW1lOiIiLmNvbmNhdChzZSwiLmNzdiIpLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9cmV0dXJuIGVlfX0sMTA2NTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9u'@;
put 'KGVlLHRlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ob2Usc2Upe29lLl9fcHJvdG9fXz1zZX18fGZ1bmN0aW9uKG9lLHNlKXtmb3IodmFyIGhlIGluIHNlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv'@;
put 'cGVydHkuY2FsbChzZSxoZSkmJihvZVtoZV09c2VbaGVdKX0pKGVlLHRlKX0sZnVuY3Rpb24oZWUsdGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSYmbnVsbCE9PXRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodGUpKyIgaXMgbm90IGEgY29u'@;
put 'c3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG9lKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lZX16KGVlLHRlKSxlZS5wcm90b3R5cGU9bnVsbD09PXRlP09iamVjdC5jcmVhdGUodGUpOihvZS5wcm90b3R5cGU9dGUucHJvdG90eXBlLG5ldyBvZSl9KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZWUpe2Zvcih2YXIgdGUsb2U9MSxzZT1hcmd1bWVudHMubGVuZ3RoO29lPHNlO29lKyspZm9yKHZhciBoZSBpbiB0ZT1hcmd1bWVudHNbb2VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxo'@;
put 'ZSkmJihlZVtoZV09dGVbaGVdKTtyZXR1cm4gZWV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlZSx0ZSxvZSxzZSl7cmV0dXJuIG5ldyhvZXx8KG9lPVByb21pc2UpKShmdW5jdGlvbihoZSx1ZSl7ZnVuY3Rpb24gY2UoRCl7dHJ5'@;
put 'e2Ioc2UubmV4dChEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIEcoRCl7dHJ5e2Ioc2UudGhyb3coRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBiKEQpe3ZhciBIO0QuZG9uZT9oZShELnZhbHVlKTooSD1ELnZhbHVlLEggaW5zdGFuY2VvZiBvZT9IOm5ldyBvZShmdW5jdGlvbihO'@;
put 'KXtOKEgpfSkpLnRoZW4oY2UsRyl9Yigoc2U9c2UuYXBwbHkoZWUsdGV8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2UsaGUsdWUsY2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaGVbMF0pdGhyb3cgaGVb'@;
put 'MV07cmV0dXJuIGhlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHVlPXtuZXh0OkcoMCksdGhyb3c6RygxKSxyZXR1cm46RygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHVlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHVlO2Z1bmN0aW9uIEco'@;
put 'Yil7cmV0dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlvbihIKXtpZihvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtjZTspdHJ5e2lmKG9lPTEsc2UmJihoZT0yJkhbMF0/c2UucmV0dXJuOkhbMF0/c2UudGhyb3d8fCgo'@;
put 'aGU9c2UucmV0dXJuKSYmaGUuY2FsbChzZSksMCk6c2UubmV4dCkmJiEoaGU9aGUuY2FsbChzZSxIWzFdKSkuZG9uZSlyZXR1cm4gaGU7c3dpdGNoKHNlPTAsaGUmJihIPVsyJkhbMF0saGUudmFsdWVdKSxIWzBdKXtjYXNlIDA6Y2FzZSAxOmhlPUg7YnJlYWs7Y2FzZSA0OnJldHVybiBjZS5s'@;
put 'YWJlbCsrLHt2YWx1ZTpIWzFdLGRvbmU6ITF9O2Nhc2UgNTpjZS5sYWJlbCsrLHNlPUhbMV0sSD1bMF07Y29udGludWU7Y2FzZSA3Okg9Y2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChoZT0oaGU9Y2UudHJ5cykubGVuZ3RoPjAmJmhlW2hlLmxlbmd0'@;
put 'aC0xXSl8fDYhPT1IWzBdJiYyIT09SFswXSkpe2NlPTA7Y29udGludWV9aWYoMz09PUhbMF0mJighaGV8fEhbMV0+aGVbMF0mJkhbMV08aGVbM10pKXtjZS5sYWJlbD1IWzFdO2JyZWFrfWlmKDY9PT1IWzBdJiZjZS5sYWJlbDxoZVsxXSl7Y2UubGFiZWw9aGVbMV0saGU9SDticmVha31pZiho'@;
put 'ZSYmY2UubGFiZWw8aGVbMl0pe2NlLmxhYmVsPWhlWzJdLGNlLm9wcy5wdXNoKEgpO2JyZWFrfWhlWzJdJiZjZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZX1IPXRlLmNhbGwoZWUsY2UpfWNhdGNoKE4pe0g9WzYsTl0sc2U9MH1maW5hbGx5e29lPWhlPTB9aWYoNSZIWzBdKXRo'@;
put 'cm93IEhbMV07cmV0dXJue3ZhbHVlOkhbMF0/SFsxXTp2b2lkIDAsZG9uZTohMH19KFtiLERdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TYXNqc0pvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgaj1SKDYyMzApLFY9UigzOTAwKSxCPVIoMTM5'@;
put 'NSksWT1SKDQwMzcpLFg9Uig1OTI4KSxVPVIoNTkyOCkscT1mdW5jdGlvbihlZSl7ZnVuY3Rpb24gdGUob2Usc2UsaGUpe3ZhciB1ZT1lZS5jYWxsKHRoaXMsb2UsVi5TZXJ2ZXJUeXBlLlNhc2pzKXx8dGhpcztyZXR1cm4gdWUuam9ic1BhdGg9c2UsdWUucmVxdWVzdENsaWVudD1oZSx1ZX1y'@;
put 'ZXR1cm4gSyh0ZSxlZSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7cmV0dXJuIHZvaWQgMD09PUcmJihHPVtdKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiLEQsSCxOLGcsQyxTLHA9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0'@;
put 'aW9uKHcpe2lmKGI9dWUsRD0oMCxVLmlzUmVsYXRpdmVQYXRoKShvZSkmJmhlLmFwcExvYz9oZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStvZS5yZXBsYWNlKC9eXC8vLCIiKTpvZSxIPSIiLmNvbmNhdChoZS5zZXJ2ZXJVcmwpLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNh'@;
put 'dCgiX3Byb2dyYW09IitEKSxOPUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGhlKSksZz0oMCxYLmdldEZvcm1EYXRhKSgpLHNlKXRyeXtnPSgwLFkuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkoZyxzZSl9Y2F0Y2goSil7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IEIuRXJyb3JSZXNw'@;
put 'b25zZShKPy5tZXNzYWdlLEopKV19Zm9yKEMgaW4gTilOLmhhc093blByb3BlcnR5KEMpJiZnLmFwcGVuZChDLE5bQ10pO3JldHVybiBTPWcgaW5zdGFuY2VvZiBqJiZ0eXBlb2YgRm9ybURhdGE+InUiPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdChnLmdldEJvdW5k'@;
put 'YXJ5KCkpOnZvaWQgMCxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihKLG5lKXtwLnJlcXVlc3RDbGllbnQucG9zdChILGcsY2U/LmFjY2Vzc190b2tlbixTKS50aGVuKGZ1bmN0aW9uKGRlKXtyZXR1cm4gayhwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZmUseGU7cmV0dXJuIEUodGhp'@;
put 'cyxmdW5jdGlvbihMZSl7aWYoT2JqZWN0LmVudHJpZXMoZGUucmVzdWx0KS5sZW5ndGg8MSl0aHJvdyBuZXcgQi5Kb2JFeGVjdXRpb25FcnJvcigwLCJObyB3ZWJvdXQgd2FzIHJldHVybmVkIGJ5IGpvYiAiLmNvbmNhdChELCIuICBQbGVhc2UgY2hlY2sgdGhlIFNBUyBsb2cgZm9yIG1vcmUg'@;
put 'aW5mby4iKSxkZS5sb2cpO3JldHVybihmZT1kZS5yZXN1bHQpJiYic3RyaW5nIj09dHlwZW9mIGZlJiZmZS50cmltKCkmJihkZS5yZXN1bHQ9KDAsVS5nZXRWYWxpZEpzb24pKGZlKSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZGUsb2UsaGUuZGVidWcpLHhlPSgwLFUuYXBw'@;
put 'ZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKGRlLEcpLEooeGUpLFsyXX0pfSl9KS5jYXRjaChmdW5jdGlvbihkZSl7cmV0dXJuIGsocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuIGRlIGluc3RhbmNlb2YgQi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGRlLG9lLGhlLmRlYnVnKSxuZShuZXcgQi5FcnJvclJlc3BvbnNlKGRlPy5tZXNzYWdlLGRlKSkpLGRlIGluc3RhbmNlb2YgQi5Mb2dpblJlcXVpcmVk'@;
put 'RXJyb3I/KHVlfHxuZShuZXcgQi5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIsZGUpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGZlLmV4ZWN1dGUob2Usc2UsaGUsdWUsY2UsRykudGhlbihmdW5jdGlvbihMZSl7SihMZSl9LGZ1bmN0aW9uKExlKXtuZShMZSl9KX0pLGI/WzQsYigpXTpbMywyXSk6WzMsM107Y2FzZSAxOnhlLnNlbnQoKSx4ZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw0XTtjYXNlIDM6bmUobmV3IEIu'@;
put 'RXJyb3JSZXNwb25zZShkZT8ubWVzc2FnZSxkZSkpLHhlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSl9KV19KX0pfSx0ZX0oUig2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO08uU2FzanNKb2JFeGVjdXRvcj1xfSw2MDg0OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHos'@;
put 'Sz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oZWUsdGUpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihvZSxzZSl7b2UuX19wcm90b19fPXNlfXx8ZnVuY3Rpb24ob2Usc2Upe2Zvcih2YXIg'@;
put 'aGUgaW4gc2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLGhlKSYmKG9lW2hlXT1zZVtoZV0pfSkoZWUsdGUpfSxmdW5jdGlvbihlZSx0ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRlJiZudWxsIT09dGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5k'@;
put 'cyB2YWx1ZSAiK1N0cmluZyh0ZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gb2UoKXt0aGlzLmNvbnN0cnVjdG9yPWVlfXooZWUsdGUpLGVlLnByb3RvdHlwZT1udWxsPT09dGU/T2JqZWN0LmNyZWF0ZSh0ZSk6KG9lLnByb3RvdHlwZT10ZS5wcm90b3R5cGUs'@;
put 'bmV3IG9lKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlZSl7Zm9yKHZhciB0ZSxvZT0xLHNlPWFyZ3VtZW50cy5sZW5ndGg7b2U8c2U7b2UrKylmb3IodmFyIGhlIGluIHRlPWFyZ3VtZW50c1tvZV0pT2JqZWN0'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLGhlKSYmKGVlW2hlXT10ZVtoZV0pO3JldHVybiBlZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGVlLHRlLG9lLHNlKXtyZXR1cm4gbmV3KG9lfHwob2U9UHJvbWlzZSkp'@;
put 'KGZ1bmN0aW9uKGhlLHVlKXtmdW5jdGlvbiBjZShEKXt0cnl7YihzZS5uZXh0KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gRyhEKXt0cnl7YihzZS50aHJvdyhEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIGIoRCl7dmFyIEg7RC5kb25lP2hlKEQudmFsdWUpOihIPUQudmFsdWUs'@;
put 'SCBpbnN0YW5jZW9mIG9lP0g6bmV3IG9lKGZ1bmN0aW9uKE4pe04oSCl9KSkudGhlbihjZSxHKX1iKChzZT1zZS5hcHBseShlZSx0ZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZSxzZSxoZSx1ZSxjZT17bGFiZWw6MCxz'@;
put 'ZW50OmZ1bmN0aW9uKCl7aWYoMSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm4gaGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdWU9e25leHQ6RygwKSx0aHJvdzpHKDEpLHJldHVybjpHKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzfSksdWU7ZnVuY3Rpb24gRyhiKXtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKG9lKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2NlOyl0cnl7aWYob2U9MSxzZSYmKGhl'@;
put 'PTImSFswXT9zZS5yZXR1cm46SFswXT9zZS50aHJvd3x8KChoZT1zZS5yZXR1cm4pJiZoZS5jYWxsKHNlKSwwKTpzZS5uZXh0KSYmIShoZT1oZS5jYWxsKHNlLEhbMV0pKS5kb25lKXJldHVybiBoZTtzd2l0Y2goc2U9MCxoZSYmKEg9WzImSFswXSxoZS52YWx1ZV0pLEhbMF0pe2Nhc2UgMDpj'@;
put 'YXNlIDE6aGU9SDticmVhaztjYXNlIDQ6cmV0dXJuIGNlLmxhYmVsKysse3ZhbHVlOkhbMV0sZG9uZTohMX07Y2FzZSA1OmNlLmxhYmVsKyssc2U9SFsxXSxIPVswXTtjb250aW51ZTtjYXNlIDc6SD1jZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGhl'@;
put 'PShoZT1jZS50cnlzKS5sZW5ndGg+MCYmaGVbaGUubGVuZ3RoLTFdKXx8NiE9PUhbMF0mJjIhPT1IWzBdKSl7Y2U9MDtjb250aW51ZX1pZigzPT09SFswXSYmKCFoZXx8SFsxXT5oZVswXSYmSFsxXTxoZVszXSkpe2NlLmxhYmVsPUhbMV07YnJlYWt9aWYoNj09PUhbMF0mJmNlLmxhYmVsPGhl'@;
put 'WzFdKXtjZS5sYWJlbD1oZVsxXSxoZT1IO2JyZWFrfWlmKGhlJiZjZS5sYWJlbDxoZVsyXSl7Y2UubGFiZWw9aGVbMl0sY2Uub3BzLnB1c2goSCk7YnJlYWt9aGVbMl0mJmNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlfUg9dGUuY2FsbChlZSxjZSl9Y2F0Y2goTil7SD1bNixO'@;
put 'XSxzZT0wfWZpbmFsbHl7b2U9aGU9MH1pZig1JkhbMF0pdGhyb3cgSFsxXTtyZXR1cm57dmFsdWU6SFswXT9IWzFdOnZvaWQgMCxkb25lOiEwfX0oW2IsRF0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLldlYkpvYkV4ZWN1dG9yPXZvaWQg'@;
put 'MDt2YXIgaj1SKDYyMzApLFY9UigzOTAwKSxCPVIoMTM5NSksWT1SKDQwMzcpLFg9UigyMTcwKSxVPVIoNTkyOCkscT1mdW5jdGlvbihlZSl7ZnVuY3Rpb24gdGUob2Usc2UsaGUsdWUsY2Upe3ZhciBHPWVlLmNhbGwodGhpcyxvZSxzZSl8fHRoaXM7cmV0dXJuIEcuam9ic1BhdGg9aGUsRy5y'@;
put 'ZXF1ZXN0Q2xpZW50PXVlLEcuc2FzVml5YUFwaUNsaWVudD1jZSxHfXJldHVybiBLKHRlLGVlKSx0ZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHKXtyZXR1cm4gdm9pZCAwPT09RyYmKEc9W10pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFy'@;
put 'IGIsRCxILE4sZyxDLFMsdixwLEosbmUsZGUseGU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKExlKXtzd2l0Y2goTGUubGFiZWwpe2Nhc2UgMDppZihiPXVlLEQ9KDAsVS5pc1JlbGF0aXZlUGF0aCkob2UpJiZoZS5hcHBMb2M/aGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrb2Uu'@;
put 'cmVwbGFjZSgvXlwvLywiIik6b2UsSD0iIi5jb25jYXQoaGUuc2VydmVyVXJsKS5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrRCksaGUuc2VydmVyVHlwZSE9PVYuU2VydmVyVHlwZS5TYXNWaXlhKXJldHVyblszLDVdO049dm9pZCAwLExlLmxhYmVsPTE7'@;
put 'Y2FzZSAxOnJldHVybiBMZS50cnlzLnB1c2goWzEsMywsNF0pLFs0LHRoaXMuZ2V0Sm9iVXJpKG9lKV07Y2FzZSAyOnJldHVybiBOPUxlLnNlbnQoKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGc9TGUuc2VudCgpLFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEZlLE9lKXtyZXR1cm4gayh4ZSx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGplPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihXZSl7c3dpdGNoKFdlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGcgaW5zdGFuY2VvZiBCLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBqZS5leGVjdXRlKG9lLHNlLGhlLHVlLGNlLEcpLnRoZW4oZnVuY3Rpb24oS2Upe0ZlKEtlKX0sZnVuY3Rpb24oS2Upe09lKEtlKX0pfSksYj9bNCxiKCldOlszLDJdKTpbMywzXTtjYXNlIDE6V2Uuc2VudCgpLFdlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpPZShu'@;
put 'ZXcgQi5FcnJvclJlc3BvbnNlKGc/Lm1lc3NhZ2UsZykpLFdlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSldO2Nhc2UgNDpIKz1OLmxlbmd0aD4wPyImX2pvYj0iK046IiIsTi5sZW5ndGg+MCYmKEg9KEgrPSImX2pvYj0iK04pLnJlcGxhY2UoIl9wcm9ncmFtPSIsIl9fcHJvZ3Jh'@;
put 'bT0iKSksSCs9aGUuY29udGV4dE5hbWUmJiEvXHMvLnRlc3QoaGUuY29udGV4dE5hbWUpPyImX2NvbnRleHRuYW1lPSIuY29uY2F0KGhlLmNvbnRleHROYW1lKToiIixMZS5sYWJlbD01O2Nhc2UgNTppZihDPUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGhlKSksUz0oMCxVLmdldEZvcm1E'@;
put 'YXRhKSgpLHNlKWlmKHY9SlNPTi5zdHJpbmdpZnkoc2UpLGhlLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOXx8di5sZW5ndGg+NWU1fHx2LmluY2x1ZGVzKCI7IikpdHJ5e1M9KDAsWS5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShTLHNlKX1jYXRjaChGZSl7cmV0dXJuWzIsUHJvbWlz'@;
put 'ZS5yZWplY3QobmV3IEIuRXJyb3JSZXNwb25zZShGZT8ubWVzc2FnZSxGZSkpXX1lbHNlIHRyeXtwPSgwLFguZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm0pKFMsc2UpLEo9cC5yZXF1ZXN0UGFyYW1zLFM9cC5mb3JtRGF0YSxDPUkoSSh7fSxDKSxKKX1jYXRjaChGZSl7cmV0dXJuWzIsUHJvbWlz'@;
put 'ZS5yZWplY3QobmV3IEIuRXJyb3JSZXNwb25zZShGZT8ubWVzc2FnZSxGZSkpXX1mb3IobmUgaW4gQylDLmhhc093blByb3BlcnR5KG5lKSYmUy5hcHBlbmQobmUsQ1tuZV0pO3JldHVybiBkZT1TIGluc3RhbmNlb2YgaiYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij8ibXVsdGlwYXJ0L2Zvcm0tZGF0'@;
put 'YTsgYm91bmRhcnk9Ii5jb25jYXQoUy5nZXRCb3VuZGFyeSgpKTp2b2lkIDAsWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRmUsT2Upe3hlLnJlcXVlc3RDbGllbnQucG9zdChILFMsY2U/LmFjY2Vzc190b2tlbixkZSkudGhlbihmdW5jdGlvbihqZSl7cmV0dXJuIGsoeGUsdm9pZCAwLHZvaWQg'@;
put 'MCxmdW5jdGlvbigpe3ZhciBXZSxLZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFllKXtzd2l0Y2goWWUubGFiZWwpe2Nhc2UgMDppZih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChqZSxvZSxoZS5kZWJ1ZyksV2U9amUucmVzdWx0LCFoZS5kZWJ1ZylyZXR1cm5bMyw0XTtzd2l0'@;
put 'Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFYuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVyblszLDFdO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuWzMsM119cmV0dXJuWzMsNF07Y2FzZSAxOnJldHVybls0LCgwLFUucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoamUucmVzdWx0LHRo'@;
put 'aXMucmVxdWVzdENsaWVudCx0aGlzLnNlcnZlclVybCldO2Nhc2UgMjpyZXR1cm4gV2U9WWUuc2VudCgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gV2U9InN0cmluZyI9PXR5cGVvZiBqZS5yZXN1bHQ/KDAsVS5wYXJzZVdlYm91dFJlc3BvbnNlKShqZS5yZXN1bHQsSCk6amUucmVzdWx0LFszLDRd'@;
put 'O2Nhc2UgNDpyZXR1cm4gS2U9KDAsVS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDpXZSxsb2c6amUubG9nfSxHKSxGZShLZSksWzJdfX0pfSl9KS5jYXRjaChmdW5jdGlvbihqZSl7cmV0dXJuIGsoeGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXZT10aGlz'@;
put 'O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oS2Upe3N3aXRjaChLZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBqZSBpbnN0YW5jZW9mIEIuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChqZSxvZSxoZS5kZWJ1ZyksT2UobmV3IEIuRXJyb3JSZXNwb25z'@;
put 'ZShqZT8ubWVzc2FnZSxqZSkpKSxqZSBpbnN0YW5jZW9mIEIuTG9naW5SZXF1aXJlZEVycm9yPyh1ZXx8T2UobmV3IEIuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4i'@;
put 'LGplKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBXZS5leGVjdXRlKG9lLHNlLGhlLHVlLGNlLEcpLnRoZW4oZnVuY3Rpb24oWWUpe0ZlKFllKX0sZnVuY3Rpb24oWWUpe09lKFllKX0pfSksYj9bNCxiKCldOlszLDJdKTpbMywzXTtjYXNlIDE6S2Uuc2Vu'@;
put 'dCgpLEtlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpPZShuZXcgQi5FcnJvclJlc3BvbnNlKGplPy5tZXNzYWdlLGplKSksS2UubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KX0pXX19KX0pfSx0ZS5wcm90b3R5cGUuZ2V0Sm9iVXJpPWZ1bmN0aW9uKG9lKXtyZXR1'@;
put 'cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2UsaGUsdWUsY2UsRyxiO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDppZighdGhpcy5zYXNWaXlhQXBpQ2xpZW50KXJldHVyblsyLCIiXTtpZihzZT0iIiwoMCxVLmlzUmVsYXRp'@;
put 'dmVQYXRoKShvZSk/KGNlPW9lLnNwbGl0KCIvIiksaGU9Y2UubGVuZ3RoPjE/Y2VbMF06IiIsdWU9Y2UubGVuZ3RoPjE/Y2VbMV06IiIpOihjZT1vZS5zcGxpdCgiLyIpLHVlPWNlLnBvcCgpfHwiIixoZT1jZS5qb2luKCIvIikpLCF1ZSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVt'@;
put 'cHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Sm9ic0luRm9sZGVyKGhlKV07Y2FzZSAxOnJldHVybihHPUQuc2VudCgpKSYmKGI9Ry5maW5kKGZ1bmN0aW9uKEgpe3JldHVybiBILm5hbWU9PT11ZSYmImpvYkRlZmluaXRpb24iPT09'@;
put 'SC5jb250ZW50VHlwZX0pKSYmKHNlPWIudXJpKSxbMixzZV19fSl9KX0sdGV9KFIoNjExOCkuQmFzZUpvYkV4ZWN1dG9yKTtPLldlYkpvYkV4ZWN1dG9yPXF9LDgyMTc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVj'@;
put 'dC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxn'@;
put 'ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJk'@;
put 'ZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUigxNTcwKSxPKSxLKFIoMzQ5MSksTyksSyhSKDQ0NDYpLE8pLEsoUig2MTE4KSxP'@;
put 'KSxLKFIoMjY5MyksTyksSyhSKDYwODQpLE8pLEsoUigxMDY1KSxPKX0sNDU4ODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlv'@;
put 'bih1ZSl7Zm9yKHZhciBjZSxHPTEsYj1hcmd1bWVudHMubGVuZ3RoO0c8YjtHKyspZm9yKHZhciBEIGluIGNlPWFyZ3VtZW50c1tHXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2UsRCkmJih1ZVtEXT1jZVtEXSk7cmV0dXJuIHVlfSxJLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odWUsY2UsRyxiKXtyZXR1cm4gbmV3KEd8fChHPVByb21pc2UpKShmdW5jdGlvbihELEgpe2Z1bmN0aW9uIE4oUyl7dHJ5e0MoYi5uZXh0KFMpKX1jYXRjaCh2KXtIKHYpfX1mdW5jdGlvbiBnKFMpe3RyeXtDKGIudGhyb3co'@;
put 'UykpfWNhdGNoKHYpe0godil9fWZ1bmN0aW9uIEMoUyl7dmFyIHY7Uy5kb25lP0QoUy52YWx1ZSk6KHY9Uy52YWx1ZSx2IGluc3RhbmNlb2YgRz92Om5ldyBHKGZ1bmN0aW9uKHApe3Aodil9KSkudGhlbihOLGcpfUMoKGI9Yi5hcHBseSh1ZSxjZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYm'@;
put 'dGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odWUsY2Upe3ZhciBHLGIsRCxILE49e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmRFswXSl0aHJvdyBEWzFdO3JldHVybiBEWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEg9e25leHQ6ZygwKSx0aHJvdzpnKDEpLHJldHVybjpnKDIp'@;
put 'fSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoSFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxIO2Z1bmN0aW9uIGcoQyl7cmV0dXJuIGZ1bmN0aW9uKFMpe3JldHVybiBmdW5jdGlvbih2KXtpZihHKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBp'@;
put 'cyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO047KXRyeXtpZihHPTEsYiYmKEQ9MiZ2WzBdP2IucmV0dXJuOnZbMF0/Yi50aHJvd3x8KChEPWIucmV0dXJuKSYmRC5jYWxsKGIpLDApOmIubmV4dCkmJiEoRD1ELmNhbGwoYix2WzFdKSkuZG9uZSlyZXR1cm4gRDtzd2l0Y2goYj0wLEQmJih2'@;
put 'PVsyJnZbMF0sRC52YWx1ZV0pLHZbMF0pe2Nhc2UgMDpjYXNlIDE6RD12O2JyZWFrO2Nhc2UgNDpyZXR1cm4gTi5sYWJlbCsrLHt2YWx1ZTp2WzFdLGRvbmU6ITF9O2Nhc2UgNTpOLmxhYmVsKyssYj12WzFdLHY9WzBdO2NvbnRpbnVlO2Nhc2UgNzp2PU4ub3BzLnBvcCgpLE4udHJ5cy5wb3Ao'@;
put 'KTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEQ9KEQ9Ti50cnlzKS5sZW5ndGg+MCYmRFtELmxlbmd0aC0xXSl8fDYhPT12WzBdJiYyIT09dlswXSkpe049MDtjb250aW51ZX1pZigzPT09dlswXSYmKCFEfHx2WzFdPkRbMF0mJnZbMV08RFszXSkpe04ubGFiZWw9dlsxXTticmVha31pZig2PT09'@;
put 'dlswXSYmTi5sYWJlbDxEWzFdKXtOLmxhYmVsPURbMV0sRD12O2JyZWFrfWlmKEQmJk4ubGFiZWw8RFsyXSl7Ti5sYWJlbD1EWzJdLE4ub3BzLnB1c2godik7YnJlYWt9RFsyXSYmTi5vcHMucG9wKCksTi50cnlzLnBvcCgpO2NvbnRpbnVlfXY9Y2UuY2FsbCh1ZSxOKX1jYXRjaChwKXt2PVs2'@;
put 'LHBdLGI9MH1maW5hbGx5e0c9RD0wfWlmKDUmdlswXSl0aHJvdyB2WzFdO3JldHVybnt2YWx1ZTp2WzBdP3ZbMV06dm9pZCAwLGRvbmU6ITB9fShbQyxTXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udGhyb3dJZkVycm9yPU8uUmVxdWVz'@;
put 'dENsaWVudD12b2lkIDA7dmFyIGo9Uig5NjY5KSxWPVIoODM3MyksQj1SKDE1MjcpLFk9UigxMzk1KSxYPVIoMjgxMyksVT1SKDk3NzgpLHE9Uig5NTI2KSxlZT1SKDU5MjgpLHRlPVIoMTAwNSksb2U9Uig5NTM5KSxzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHVlKGNlLEcsYixEKXt2YXIgSD10'@;
put 'aGlzO3RoaXMuYmFzZVVybD1jZSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMucmVxdWVzdHNMaW1pdD0xMCx0aGlzLnZlcmJvc2VNb2RlPSExLHRoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmdldFJlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEgucmVxdWVzdHN9'@;
put 'LHRoaXMuY2xlYXJSZXF1ZXN0cz1mdW5jdGlvbigpe0gucmVxdWVzdHM9W119LHRoaXMuYXV0aG9yaXplPWZ1bmN0aW9uKE4pe3JldHVybiBrKEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEMsUyx2LHAsdyxKLG5lLGRlLGZlLHhlLExlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24o'@;
put 'RmUpe3N3aXRjaChGZS5sYWJlbCl7Y2FzZSAwOmZvcihDPXt9LFM9Ti5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSwodj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPVMscD12LnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3Jp'@;
put 'emF0aW9uIiksZz1wP3RoaXMuYmFzZVVybCtwLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik6bnVsbCx3PXA/LnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0IiksSj0wLG5lPXc7SjxuZS5sZW5ndGg7SisrKSJ1c2VyX29hdXRoX2FwcHJvdmFsIj09PShkZT1uZVtKXSkubmFtZSYmKGRlLnZhbHVlPSJ0'@;
put 'cnVlIiksQ1tkZS5uYW1lXT1kZS52YWx1ZTtmb3IoTGUgaW4oZmU9T2JqZWN0LmtleXMoQykuZmluZChmdW5jdGlvbihPZSl7cmV0dXJuIE9lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJjc3JmIil9KSkmJih0aGlzLmNzcmZUb2tlbi52YWx1ZT1DW2ZlXSx0aGlzLmNzcmZUb2tlbi5oZWFk'@;
put 'ZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKSx4ZT1uZXcgRm9ybURhdGEsQylDLmhhc093blByb3BlcnR5KExlKSYmeGUuYXBwZW5kKExlLENbTGVdKTtpZighZyl0aHJvdyBuZXcgRXJyb3IoIkF1dGggRm9ybSBVUkwgaXMgbnVsbCBvciB1bmRlZmlu'@;
put 'ZWQuIik7cmV0dXJuWzQsdGhpcy5odHRwQ2xpZW50LnBvc3QoZyx4ZSx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oZnVuY3Rpb24oT2Upe3JldHVybiBPZS5kYXRhfSkuY2F0Y2goZnVuY3Rpb24o'@;
put 'T2Upeyh6LmxvZ2dlcnx8SykuZXJyb3IoT2UpfSldO2Nhc2UgMTpyZXR1cm5bMixGZS5zZW50KCldfX0pfSl9LHRoaXMucHJldHRpZnlTdHJpbmc9ZnVuY3Rpb24oTil7cmV0dXJuKDAsb2UuaW5zcGVjdCkoTix7Y29sb3JzOiJibGVhY2hlZCIhPT1ILnZlcmJvc2VNb2RlfSl9LHRoaXMucGFy'@;
put 'c2VJbnRlcmNlcHRlZEJvZHk9ZnVuY3Rpb24oTil7aWYoIU4pcmV0dXJuIiI7dmFyIGc7aWYoInN0cmluZyI9PXR5cGVvZiBOKXRyeXtnPUpTT04ucGFyc2UoTil9Y2F0Y2h7Zz1OfWVsc2UgZz1OO3ZhciBDPUgucHJldHRpZnlTdHJpbmcoZykuc3BsaXQoIlxuIik7cmV0dXJuIEMubGVuZ3Ro'@;
put 'PjUxJiYoQy5zcGxpY2UoNTApLEMucHVzaCgiLi4uIikpLEMuam9pbigiXG4iKX0sdGhpcy5kZWZhdWx0SW50ZXJjZXB0aW9uQ2FsbEJhY2s9ZnVuY3Rpb24oTil7dmFyIGcsQz0iTm90IHByb3ZpZGVkIixTPXtfaGVhZGVyOiIiLmNvbmNhdChDLCJcbiIpLHJlczp7cmF3SGVhZGVyczpbQ119'@;
put 'fSx2PU47aWYoai5kZWZhdWx0LmlzQXhpb3NFcnJvcihOKSl7dmFyIHA9Ti5yZXNwb25zZSx3PU4ucmVxdWVzdCxKPU4uY29uZmlnO2lmKHApdj1wO2Vsc2V7aWYodyl7dmFyIG5lPXcuX2hlYWRlcixkZT13Ll9jdXJyZW50UmVxdWVzdDtuZT9TLl9oZWFkZXI9bmU6ZGUmJmRlLl9oZWFkZXIm'@;
put 'JihTLl9oZWFkZXI9ZGUuX2hlYWRlcik7dmFyIGZlPXcucmVzO2ZlJiZmZS5yYXdIZWFkZXJzJiYoUy5yZXMucmF3SGVhZGVycz1mZS5yYXdIZWFkZXJzKX12PXtzdGF0dXM6QyxyZXF1ZXN0OlMsY29uZmlnOkp8fHtkYXRhOkN9LGRhdGE6Q319fXZhciB4ZT12LnN0YXR1cyxPZT12LmRhdGEs'@;
put 'amU9di5jb25maWcuZGF0YSxXZT12LnJlcXVlc3R8fFMsS2U9V2UuX2hlYWRlcixZZT1XZS5yZXMucmF3SGVhZGVycy5yZWR1Y2UoZnVuY3Rpb24obHQsUGUsYmUpe3JldHVybiBsdCsoYmUlMj09MD8iIi5jb25jYXQoMD09PWJlPyIiOiJcbiIpLmNvbmNhdChQZSk6IjogIi5jb25jYXQoUGUp'@;
put 'KX0sIiIpLFFlPUgucGFyc2VJbnRlcmNlcHRlZEJvZHkoT2UpO3JldHVybiBudWxsPT09KGc9ei5sb2dnZXIpfHx2b2lkIDA9PT1nfHxnLmluZm8oIkhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuIi5jb25jYXQoS2UpLmNvbmNhdChILnBhcnNlSW50ZXJjZXB0ZWRCb2R5KGplKSwi'@;
put 'XG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogIikuY29uY2F0KEgucHJldHRpZnlTdHJpbmcoeGUpLCJcblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxuIikuY29uY2F0KFllKS5jb25jYXQoUWU/IlxuXG4iLmNvbmNhdChRZSk6IiIsIlxuIikpLE59LHRoaXMuc2V0VmVyYm9zZU1v'@;
put 'ZGU9ZnVuY3Rpb24oTil7SC52ZXJib3NlTW9kZT1OLEgudmVyYm9zZU1vZGU/SC5lbmFibGVWZXJib3NlTW9kZSgpOkguZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMuZW5hYmxlVmVyYm9zZU1vZGU9ZnVuY3Rpb24oTixnKXt2b2lkIDA9PT1OJiYoTj1ILmRlZmF1bHRJbnRlcmNlcHRpb25D'@;
put 'YWxsQmFjayksdm9pZCAwPT09ZyYmKGc9SC5kZWZhdWx0SW50ZXJjZXB0aW9uQ2FsbEJhY2spLEguaHR0cEludGVyY2VwdG9yPUguaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKE4sZyl9LHRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKCl7SC5odHRwSW50ZXJj'@;
put 'ZXB0b3ImJkguaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZWplY3QoSC5odHRwSW50ZXJjZXB0b3IpfSx0aGlzLmdldEhlYWRlcnM9ZnVuY3Rpb24oTixnKXt2YXIgQz17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PWcmJihDWyJDb250ZW50'@;
put 'LVR5cGUiXT1nKSxDLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1nPyJhcHBsaWNhdGlvbi9qc29uIjoiKi8qIixOJiYoQy5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoTikpLEguY3NyZlRva2VuLmhlYWRlck5hbWUmJkguY3NyZlRva2VuLnZhbHVlJiYoQ1tILmNzcmZUb2tl'@;
put 'bi5oZWFkZXJOYW1lXT1ILmNzcmZUb2tlbi52YWx1ZSksQ30sdGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW49ZnVuY3Rpb24oTil7dmFyIGc9SC5wYXJzZUNzcmZUb2tlbihOKTtnJiYoSC5maWxlVXBsb2FkQ3NyZlRva2VuPWcpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2Vu'@;
put 'PWZ1bmN0aW9uKE4pe3ZhciBnPUgucGFyc2VDc3JmVG9rZW4oTik7ZyYmKEguY3NyZlRva2VuPWcpfSx0aGlzLnBhcnNlQ3NyZlRva2VuPWZ1bmN0aW9uKE4pe3ZhciBnLEM9bnVsbD09PShnPU4uaGVhZGVyc1sieC1jc3JmLWhlYWRlciJdKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy50b0xvd2Vy'@;
put 'Q2FzZSgpO2lmKEMpcmV0dXJue2hlYWRlck5hbWU6Qyx2YWx1ZTpOLmhlYWRlcnNbQ118fCIifX0sdGhpcy5oYW5kbGVFcnJvcj1mdW5jdGlvbihOLGcsQyl7cmV0dXJuIHZvaWQgMD09PUMmJihDPSExKSxrKEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBTLHY7cmV0dXJuIEUodGhp'@;
put 'cyxmdW5jdGlvbihwKXtzd2l0Y2gocC5sYWJlbCl7Y2FzZSAwOnJldHVybiBTPU4ucmVzcG9uc2UsTiBpbnN0YW5jZW9mIFkuQXV0aG9yaXplRXJyb3I/WzQsdGhpcy5odHRwQ2xpZW50LmdldChOLmNvbmZpcm1Vcmwse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7IkNvbnRlbnQtVHlw'@;
put 'ZSI6InRleHQvcGxhaW4iLEFjY2VwdDoiKi8qIn19KS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZ2V0dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pXTpbMyw1XTtjYXNlIDE6cmV0dXJuIHY9cC5zZW50KCksKDAsQi5pc0F1dGhv'@;
put 'cml6ZUZvcm1SZXF1aXJlZCkodj8uZGF0YSk/WzQsdGhpcy5hdXRob3JpemUodi5kYXRhKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgYXV0aG9yaXppbmcgcmVxdWVzdC4gIil9KV06WzMsM107Y2FzZSAyOnAuc2VudCgpLHAubGFi'@;
put 'ZWw9MztjYXNlIDM6cmV0dXJuWzQsZygpLmNhdGNoKGZ1bmN0aW9uKHcpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh3LCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSldO2Nhc2UgNDpyZXR1cm5bMixwLnNlbnQoKV07Y2FzZSA1OmlmKE4gaW5z'@;
put 'dGFuY2VvZiBZLkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLE47cmV0dXJuIE4gaW5zdGFuY2VvZiB0ZS5JbnZhbGlkU0FTanNDc3JmRXJyb3I/WzQsdGhpcy5odHRwQ2xpZW50LmdldCgiLyIse3dpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rp'@;
put 'b24odyl7dmFyIEosbmU9bnVsbD09PShKPS88c2NyaXB0PmRvY3VtZW50LmNvb2tpZSA9ICcoWFNSRi1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2FtZVNpdGU9U3RyaWN0OyBQYXRoPVwvOyknPFwvc2NyaXB0Pi8uZXhlYyh3LmRhdGEpKXx8dm9pZCAwPT09Sj92b2lkIDA6SlsxXTtuZSYm'@;
put 'KGRvY3VtZW50LmNvb2tpZT1uZSl9KS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgcmUtZmV0Y2hpbmcgQ1NSRiB0b2tlbi4iKX0pXTpbMyw4XTtjYXNlIDY6cmV0dXJuIHAuc2VudCgpLFs0LGcoKS5jYXRjaChmdW5jdGlvbih3KXt0'@;
put 'aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pXTtjYXNlIDc6cmV0dXJuWzIscC5zZW50KCldO2Nhc2UgODpyZXR1cm4gNDAzIT09Uz8uc3RhdHVzJiY0NDkhPT1TPy5zdGF0dXM/WzMsMTFdOih0aGlz'@;
put 'LnBhcnNlQW5kU2V0Q3NyZlRva2VuKFMpLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlP1s0LGcoKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRs'@;
put 'ZUVycm9yLiAiKX0pXTpbMywxMF0pO2Nhc2UgOTpyZXR1cm5bMixwLnNlbnQoKV07Y2FzZSAxMDp0aHJvdyBOO2Nhc2UgMTE6aWYoNDA0PT09Uz8uc3RhdHVzKXRocm93IG5ldyBZLk5vdEZvdW5kRXJyb3IoUy5jb25maWcudXJsKTtpZig1MDI9PT1TPy5zdGF0dXMpe2lmKEMpdGhyb3cgbmV3'@;
put 'IFkuSW50ZXJuYWxTZXJ2ZXJFcnJvcjtyZXR1cm5bMl19cC5sYWJlbD0xMjtjYXNlIDEyOnRocm93IE4uaXNBeGlvc0Vycm9yJiYiVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSI9PT1OLmNvZGU/bmV3IFkuQ2VydGlmaWNhdGVFcnJvcihOLm1lc3NhZ2UpOk4ubWVzc2FnZT9OOigw'@;
put 'LFUucHJlZml4TWVzc2FnZSkoTiwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfX0pfSl9LHRoaXMuY3JlYXRlSHR0cENsaWVudChjZSxHKSxiJiYodGhpcy5yZXF1ZXN0c0xpbWl0PWIpLEQmJih0aGlzLnNldFZlcmJvc2VNb2RlKEQpLHRoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKSl9'@;
put 'cmV0dXJuIHVlLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oY2UsRyl7dGhpcy5jcmVhdGVIdHRwQ2xpZW50KGNlLEcpfSx1ZS5wcm90b3R5cGUuc2F2ZUxvY2FsU3RvcmFnZVRva2VuPWZ1bmN0aW9uKGNlLEcpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsY2UpLGxv'@;
put 'Y2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLEcpfSx1ZS5wcm90b3R5cGUuZ2V0Q3NyZlRva2VuPWZ1bmN0aW9uKGNlKXtyZXR1cm4gdm9pZCAwPT09Y2UmJihjZT0iZ2VuZXJhbCIpLCJmaWxlIj09PWNlP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tlbn0s'@;
put 'dWUucHJvdG90eXBlLmNsZWFyQ3NyZlRva2Vucz1mdW5jdGlvbigpe3RoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9fSx1ZS5wcm90b3R5cGUuY2xlYXJMb2NhbFN0b3JhZ2VUb2tl'@;
put 'bnM9ZnVuY3Rpb24oKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLCIiKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIiwiIil9LHVlLnByb3RvdHlwZS5nZXRCYXNlVXJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5iYXNl'@;
put 'VVJMfHwiIn0sdWUucHJvdG90eXBlLmFwcGVuZFJlcXVlc3Q9ZnVuY3Rpb24oY2UsRyxiKXt2YXIgRD0iIixIPSIiLE49bnVsbDtiJiYoY2U/LmxvZz8oRD0oMCxlZS5wYXJzZVNvdXJjZUNvZGUpKGNlLmxvZyksSD0oMCxlZS5wYXJzZUdlbmVyYXRlZENvZGUpKGNlLmxvZyksTj1jZT8ucmVz'@;
put 'dWx0P2NlLnJlc3VsdC5XT1JLOmNlLmxvZyk6Y2U/LnJlc3VsdCYmKCJzdHJpbmciPT10eXBlb2YgY2UucmVzdWx0JiYoRD0oMCxlZS5wYXJzZVNvdXJjZUNvZGUpKGNlLnJlc3VsdCksSD0oMCxlZS5wYXJzZUdlbmVyYXRlZENvZGUpKGNlLnJlc3VsdCkpLE49Y2UucmVzdWx0LldPUkspKTt2'@;
put 'YXIgZz0ic3RyaW5nIj09dHlwZW9mIGNlPy5yZXN1bHQ/Y2U/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShjZT8ucmVzdWx0LG51bGwsMik7dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmNlPy5sb2d8fGd8fGNlLHNlcnZpY2VMaW5rOkcsdGltZXN0YW1wOm5ldyBEYXRlLHNvdXJjZUNvZGU6'@;
put 'RCxnZW5lcmF0ZWRDb2RlOkgsU0FTV09SSzpOfSksdGhpcy5yZXF1ZXN0cy5sZW5ndGg+dGhpcy5yZXF1ZXN0c0xpbWl0JiZ0aGlzLnJlcXVlc3RzLnNwbGljZSgwLDEpfSx1ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGNlLEcsYixELEgpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0iYXBwbGlj'@;
put 'YXRpb24vanNvbiIpLHZvaWQgMD09PUQmJihEPXt9KSx2b2lkIDA9PT1IJiYoSD0hMSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTixnLEM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFMpe3JldHVybiBOPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoRyxiKSksRCks'@;
put 'Zz17aGVhZGVyczpOLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1iPyJ0ZXh0IjoianNvbiIsd2l0aENyZWRlbnRpYWxzOiEwfSwidGV4dC9wbGFpbiI9PT1iJiYoZy50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQoY2UsZykudGhlbihmdW5jdGlv'@;
put 'bih2KXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikodiksQy5wYXJzZVJlc3BvbnNlKHYpfSkuY2F0Y2goZnVuY3Rpb24odil7cmV0dXJuIGsoQyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHA9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHcpe3N3aXRjaCh3LmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcih2LGZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0KGNlLEcsYixEKS5jYXRjaChmdW5jdGlvbihKKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoSiwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KX0sSCld'@;
put 'O2Nhc2UgMTpyZXR1cm5bMix3LnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKGNlLEcsYixELEgsTil7cmV0dXJuIHZvaWQgMD09PUQmJihEPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09SCYmKEg9e30pLHZvaWQgMD09PU4mJihOPXt9KSxrKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFMpe3JldHVybiBnPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoYixEKSksSCksWzIsdGhpcy5odHRwQ2xpZW50LnBvc3QoY2UsRyxJKHtoZWFkZXJzOmcsd2l0aENyZWRlbnRpYWxz'@;
put 'OiEwfSxOKSkudGhlbihmdW5jdGlvbih2KXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikodiksQy5wYXJzZVJlc3BvbnNlKHYpfSkuY2F0Y2goZnVuY3Rpb24odil7cmV0dXJuIGsoQyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHA9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHcp'@;
put 'e3N3aXRjaCh3LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcih2LGZ1bmN0aW9uKCl7cmV0dXJuIHAucG9zdChjZSxHLGIsRCxIKX0pXTtjYXNlIDE6cmV0dXJuWzIsdy5zZW50KCldfX0pfSl9KV19KX0pfSx1ZS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGNlLEcsYixE'@;
put 'KXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9e30pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIEg9SShJKHt9LHRoaXMuZ2V0SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIikpLEQpLFsyLHRoaXMu'@;
put 'aHR0cENsaWVudC5wdXQoY2UsRyx7aGVhZGVyczpILHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oQyl7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3IpKEMpLE4ucGFyc2VSZXNwb25zZShDKX0pLmNhdGNoKGZ1bmN0aW9uKEMpe3JldHVybiBrKE4sdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbigpe3ZhciBTPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih2KXtzd2l0Y2godi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoQyxmdW5jdGlvbigpe3JldHVybiBTLnB1dChjZSxHLGIsRCl9KV07Y2FzZSAxOnJldHVyblsyLHYuc2VudCgpXX19KX0pfSld'@;
put 'fSl9KX0sdWUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihjZSxHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixEPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihIKXtyZXR1cm4gYj10aGlzLmdldEhlYWRlcnMoRywiYXBwbGljYXRpb24vanNvbiIp'@;
put 'LFsyLHRoaXMuaHR0cENsaWVudC5kZWxldGUoY2Use2hlYWRlcnM6Yix3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKE4pe3JldHVybigwLE8udGhyb3dJZkVycm9yKShOKSxELnBhcnNlUmVzcG9uc2UoTil9KS5jYXRjaChmdW5jdGlvbihOKXtyZXR1cm4gayhELHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXt2YXIgZz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9yKE4sZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWxldGUoY2UsRyl9KV07Y2FzZSAxOnJldHVyblsyLEMuc2VudCgp'@;
put 'XX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKGNlLEcsYil7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEg9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3JldHVybiBEPXRoaXMuZ2V0'@;
put 'SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIiksWzIsdGhpcy5odHRwQ2xpZW50LnBhdGNoKGNlLEcse2hlYWRlcnM6RCx3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKGcpe3JldHVybigwLE8udGhyb3dJZkVycm9yKShnKSxILnBhcnNlUmVzcG9uc2UoZyl9KS5jYXRjaChm'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gayhILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9yKGcsZnVuY3Rpb24oKXtyZXR1cm4gQy5wYXRjaChjZSxH'@;
put 'LGIpfSldO2Nhc2UgMTpyZXR1cm5bMixTLnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS51cGxvYWRGaWxlPWZ1bmN0aW9uKGNlLEcsYil7dmFyIEQ7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTixnO3JldHVybiBFKHRoaXMsZnVuY3Rpb24o'@;
put 'Qyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpIPXRoaXMuZ2V0SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIiksIShudWxsPT09KEQ9dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXx8dm9pZCAwPT09RCkmJkQudmFsdWUmJihIW3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi5oZWFkZXJOYW1l'@;
put 'XT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4udmFsdWUpLEMubGFiZWw9MTtjYXNlIDE6cmV0dXJuIEMudHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCx0aGlzLmh0dHBDbGllbnQucG9zdChjZSxHLHtoZWFkZXJzOkgsdHJhbnNmb3JtUmVxdWVzdDpmdW5jdGlvbihTKXtyZXR1cm4gU319KV07Y2Fz'@;
put 'ZSAyOnJldHVyblsyLHtyZXN1bHQ6KGc9Qy5zZW50KCkpLmRhdGEsZXRhZzpnLmhlYWRlcnMuZXRhZ31dO2Nhc2UgMzppZihOPUMuc2VudCgpLDQwMz09PShudWxsPT0oZz1OLnJlc3BvbnNlKT92b2lkIDA6Zy5zdGF0dXMpfHw0NDk9PT1nPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRG'@;
put 'aWxlVXBsb2FkQ3NyZlRva2VuKGcpLHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbilyZXR1cm5bMix0aGlzLnVwbG9hZEZpbGUoY2UsRyxiKV07dGhyb3cgTn10aHJvdyBOO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sdWUucHJvdG90eXBlLnBhcnNlUmVzcG9uc2U9ZnVuY3Rpb24oY2Upe3ZhciBH'@;
put 'LGI9Y2U/LmhlYWRlcnM/Y2UuaGVhZGVycy5ldGFnOiIiLEQ9ITE7dHJ5e0c9InN0cmluZyI9PXR5cGVvZiBjZS5kYXRhP0pTT04ucGFyc2UoY2UuZGF0YSk6Y2UuZGF0YX1jYXRjaHt0cnl7Rz1KU09OLnBhcnNlKCgwLFgucGFyc2VXZWJvdXRSZXNwb25zZSkoY2UuZGF0YSkpfWNhdGNoe0c9'@;
put 'Y2UuZGF0YX1EPSEwfXZhciBIPXtyZXN1bHQ6RyxldGFnOmIsc3RhdHVzOmNlLnN0YXR1c307cmV0dXJuIEQmJihILmxvZz1jZS5kYXRhKSxIfSx1ZS5wcm90b3R5cGUuY3JlYXRlSHR0cENsaWVudD1mdW5jdGlvbihjZSxHKXt2YXIgYj1HP25ldyBWLkFnZW50KEcpOnZvaWQgMDt0aGlzLmh0'@;
put 'dHBDbGllbnQ9KDAsZWUuY3JlYXRlQXhpb3NJbnN0YW5jZSkoY2UsYiksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVzPWZ1bmN0aW9uKEQpe3JldHVybiBEPj0yMDAmJkQ8PTQwMX19LHVlfSgpO08uUmVxdWVzdENsaWVudD1zZSxPLnRocm93SWZFcnJvcj1mdW5jdGlv'@;
put 'bih1ZSl7dmFyIGNlLEcsYixELEgsTixnO3N3aXRjaCh1ZS5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJvYmplY3QiPT10eXBlb2YgdWUuZGF0YSYmImludmFsaWRfZ3JhbnQiPT09dWUuZGF0YS5lcnJvcil0aHJvdyBuZXcgWS5Mb2dpblJlcXVpcmVkRXJyb3IodWUuZGF0YSk7aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiB1ZS5kYXRhJiYiaW52YWxpZCBjc3JmIHRva2VuISI9PT11ZS5kYXRhLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IHRlLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgdWUuZGF0YT9uZXcgWS5Mb2dpblJlcXVpcmVkRXJy'@;
put 'b3IodWUuZGF0YSk6bmV3IFkuTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0oRz1udWxsPT09KGNlPXVlLmRhdGEpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2UuZW50aXR5SUQpJiZ2b2lkIDAhPT1HJiZHLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyBZLkxvZ2luUmVxdWlyZWRFcnJv'@;
put 'cjtpZigic3RyaW5nIj09dHlwZW9mIHVlLmRhdGEmJigwLEIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHVlLmRhdGEpKXRocm93IG5ldyBZLkF1dGhvcml6ZUVycm9yKCJBdXRob3JpemF0aW9uIHJlcXVpcmVkIix1ZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9m'@;
put 'IHVlLmRhdGEmJigwLEIuaXNMb2dJblJlcXVpcmVkKSh1ZS5kYXRhKSYmKG51bGw9PT0oRD1udWxsPT09KGI9dWUuY29uZmlnKXx8dm9pZCAwPT09Yj92b2lkIDA6Yi51cmwpfHx2b2lkIDA9PT1EfHwhRC5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyBZLkxvZ2luUmVx'@;
put 'dWlyZWRFcnJvcjtpZihudWxsIT09KEg9dWUuZGF0YSkmJnZvaWQgMCE9PUgmJkguYXV0aF9yZXF1ZXN0KXRocm93IG5ldyBZLkF1dGhvcml6ZUVycm9yKHVlLmRhdGEubWVzc2FnZSx1ZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KGc9bnVsbD09PShOPXVlLmNvbmZpZyl8fHZv'@;
put 'aWQgMD09PU4/dm9pZCAwOk4udXJsKSYmdm9pZCAwIT09ZyYmZy5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IHEuU0FTOUF1dGhFcnJvcjt2YXIgUz1oZSh1ZS5kYXRhKTtpZihTKXRocm93IFN9O3ZhciBoZT1mdW5jdGlvbih1ZSl7aWYoIXVlKXJldHVybiBudWxsO3RyeXt2'@;
put 'YXIgY2U9SlNPTi5wYXJzZSh1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7aWYoY2UuZXJyb3JDb2RlJiZjZS5tZXNzYWdlKXJldHVybiBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcihjZS5lcnJvckNvZGUsY2UubWVzc2FnZSx1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSl9Y2F0Y2h7fXRy'@;
put 'eXtpZih1ZT8uaW5jbHVkZXMoJ3siZXJyb3JDb2RlJykmJihOPXVlLnNwbGl0KCd7ImVycm9yQ29kZScpKS5sZW5ndGg+MSl7dmFyIEc9J3siZXJyb3JDb2RlJytOWzFdLnNwbGl0KCcifScpWzBdKycifScsYj1KU09OLnBhcnNlKEcucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5l'@;
put 'dyBZLkpvYkV4ZWN1dGlvbkVycm9yKGIuZXJyb3JDb2RlLGIubWVzc2FnZSx1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikpfX1jYXRjaHt9dHJ5e2lmKHVlPy5tYXRjaCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSkmJihOPXVlLnNwbGl0KC9zdG9yZWQgcHJvY2VzcyBub3QgZm91'@;
put 'bmQ6IC9pKSkubGVuZ3RoPjEpe3ZhciBEPU5bMV0uc3BsaXQoIjxpPiIpWzFdLnNwbGl0KCI8L2k+IilbMF0sSD1ELmVuZHNXaXRoKCJydW5uZXIiKT8iU0FTSlMgcnVubmVyIG5vdCBmb3VuZC4gSGVyZSdzIHRoZSBsaW5rIChodHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5u'@;
put 'ZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6IlN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogIi5jb25jYXQoRCk7cmV0dXJuIG5ldyBZLkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxILCIiKX19Y2F0Y2h7fXRyeXt2YXIgTjtpZighdWU/Lm1hdGNo'@;
put 'KC8+PndlYm91dEJFR0lOPDwvKSYmdWU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmdWU/Lm1hdGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLi9pKSYmKE49dWUuc3BsaXQoIjxoMj5TQVMgTG9nPC9oMj4iKSkubGVuZ3RoPjEpe3ZhciBnPU5bMV0uc3Bs'@;
put 'aXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcig1MDAsSD0iVGhpcyByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4iLGcpfX1jYXRjaHt9cmV0dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihxLGVlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odGUsb2Upe3RlLl9fcHJvdG9fXz1vZX18fGZ1bmN0aW9uKHRlLG9lKXtm'@;
put 'b3IodmFyIHNlIGluIG9lKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvZSxzZSkmJih0ZVtzZV09b2Vbc2VdKX0pKHEsZWUpfSxmdW5jdGlvbihxLGVlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZWUmJm51bGwhPT1lZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBl'@;
put 'eHRlbmRzIHZhbHVlICIrU3RyaW5nKGVlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiB0ZSgpe3RoaXMuY29uc3RydWN0b3I9cX16KHEsZWUpLHEucHJvdG90eXBlPW51bGw9PT1lZT9PYmplY3QuY3JlYXRlKGVlKToodGUucHJvdG90eXBlPWVlLnByb3RvdHlw'@;
put 'ZSxuZXcgdGUpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHEpe2Zvcih2YXIgZWUsdGU9MSxvZT1hcmd1bWVudHMubGVuZ3RoO3RlPG9lO3RlKyspZm9yKHZhciBzZSBpbiBlZT1hcmd1bWVudHNbdGVdKU9iamVj'@;
put 'dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZSxzZSkmJihxW3NlXT1lZVtzZV0pO3JldHVybiBxfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ocSxlZSx0ZSxvZSl7cmV0dXJuIG5ldyh0ZXx8KHRlPVByb21pc2UpKShm'@;
put 'dW5jdGlvbihzZSxoZSl7ZnVuY3Rpb24gdWUoYil7dHJ5e0cob2UubmV4dChiKSl9Y2F0Y2goRCl7aGUoRCl9fWZ1bmN0aW9uIGNlKGIpe3RyeXtHKG9lLnRocm93KGIpKX1jYXRjaChEKXtoZShEKX19ZnVuY3Rpb24gRyhiKXt2YXIgRDtiLmRvbmU/c2UoYi52YWx1ZSk6KEQ9Yi52YWx1ZSxE'@;
put 'IGluc3RhbmNlb2YgdGU/RDpuZXcgdGUoZnVuY3Rpb24oSCl7SChEKX0pKS50aGVuKHVlLGNlKX1HKChvZT1vZS5hcHBseShxLGVlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihxLGVlKXt2YXIgdGUsb2Usc2UsaGUsdWU9e2xhYmVsOjAsc2Vu'@;
put 'dDpmdW5jdGlvbigpe2lmKDEmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJuIHNlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGhlPXtuZXh0OmNlKDApLHRocm93OmNlKDEpLHJldHVybjpjZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGhlW1N5bWJvbC5pdGVyYXRvcl09ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpc30pLGhlO2Z1bmN0aW9uIGNlKEcpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZnVuY3Rpb24oRCl7aWYodGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dWU7KXRyeXtpZih0ZT0xLG9lJiYo'@;
put 'c2U9MiZEWzBdP29lLnJldHVybjpEWzBdP29lLnRocm93fHwoKHNlPW9lLnJldHVybikmJnNlLmNhbGwob2UpLDApOm9lLm5leHQpJiYhKHNlPXNlLmNhbGwob2UsRFsxXSkpLmRvbmUpcmV0dXJuIHNlO3N3aXRjaChvZT0wLHNlJiYoRD1bMiZEWzBdLHNlLnZhbHVlXSksRFswXSl7Y2FzZSAw'@;
put 'OmNhc2UgMTpzZT1EO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdWUubGFiZWwrKyx7dmFsdWU6RFsxXSxkb25lOiExfTtjYXNlIDU6dWUubGFiZWwrKyxvZT1EWzFdLEQ9WzBdO2NvbnRpbnVlO2Nhc2UgNzpEPXVlLm9wcy5wb3AoKSx1ZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgo'@;
put 'c2U9KHNlPXVlLnRyeXMpLmxlbmd0aD4wJiZzZVtzZS5sZW5ndGgtMV0pfHw2IT09RFswXSYmMiE9PURbMF0pKXt1ZT0wO2NvbnRpbnVlfWlmKDM9PT1EWzBdJiYoIXNlfHxEWzFdPnNlWzBdJiZEWzFdPHNlWzNdKSl7dWUubGFiZWw9RFsxXTticmVha31pZig2PT09RFswXSYmdWUubGFiZWw8'@;
put 'c2VbMV0pe3VlLmxhYmVsPXNlWzFdLHNlPUQ7YnJlYWt9aWYoc2UmJnVlLmxhYmVsPHNlWzJdKXt1ZS5sYWJlbD1zZVsyXSx1ZS5vcHMucHVzaChEKTticmVha31zZVsyXSYmdWUub3BzLnBvcCgpLHVlLnRyeXMucG9wKCk7Y29udGludWV9RD1lZS5jYWxsKHEsdWUpfWNhdGNoKEgpe0Q9WzYs'@;
put 'SF0sb2U9MH1maW5hbGx5e3RlPXNlPTB9aWYoNSZEWzBdKXRocm93IERbMV07cmV0dXJue3ZhbHVlOkRbMF0/RFsxXTp2b2lkIDAsZG9uZTohMH19KFtHLGJdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TYXM5UmVxdWVzdENsaWVudD12'@;
put 'b2lkIDA7dmFyIGo9Uig4MjI0KSxWPVIoNzg1NyksQj1SKDk3NzgpLFk9Uig0NTg4KSxYPVIoMTM5NSksVT1mdW5jdGlvbihxKXtmdW5jdGlvbiBlZSh0ZSxvZSl7dmFyIHNlPXEuY2FsbCh0aGlzLHRlLG9lKXx8dGhpcztyZXR1cm4gc2UuaHR0cENsaWVudC5kZWZhdWx0cy5tYXhSZWRpcmVj'@;
put 'dHM9MCxzZS5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVzPWZ1bmN0aW9uKGhlKXtyZXR1cm4gaGU+PTIwMCYmaGU8MzAzfSxqLmRlZmF1bHQmJigoMCxqLmRlZmF1bHQpKHNlLmh0dHBDbGllbnQpLHNlLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPW5ldyBWLkNvb2tpZUphciks'@;
put 'c2V9cmV0dXJuIEsoZWUscSksZWUucHJvdG90eXBlLmxvZ2luPWZ1bmN0aW9uKHRlLG9lLHNlKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaGU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih1ZSl7c3dpdGNoKHVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGhlPSIv'@;
put 'VXNlciBGb2xkZXJzLyIuY29uY2F0KHRlLCIvTXkgRm9sZGVyL3Nhc2pzL3J1bm5lciIpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXI/KHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXIucmVtb3ZlQWxsQ29va2llcygpLFs0LHRoaXMuZ2V0KCIiLmNvbmNhdChzZSwiP19wcm9ncmFt'@;
put 'PSIpLmNvbmNhdChoZSwiJl91c2VybmFtZT0iKS5jb25jYXQodGUsIiZfcGFzc3dvcmQ9IikuY29uY2F0KG9lKSx2b2lkIDAsInRleHQvcGxhaW4iKV0pOlszLDJdO2Nhc2UgMTp1ZS5zZW50KCksdWUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9LGVlLnByb3RvdHlwZS5nZXQ9ZnVu'@;
put 'Y3Rpb24odGUsb2Usc2UsaGUsdWUpe3JldHVybiB2b2lkIDA9PT1zZSYmKHNlPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09aGUmJihoZT17fSksdm9pZCAwPT09dWUmJih1ZT0hMSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgY2UsRyxiPXRoaXM7cmV0dXJuIEUo'@;
put 'dGhpcyxmdW5jdGlvbihEKXtyZXR1cm4gY2U9SShJKHt9LHRoaXMuZ2V0SGVhZGVycyhvZSxzZSkpLGhlKSxHPXtoZWFkZXJzOmNlLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1zZT8idGV4dCI6Impzb24iLHdpdGhDcmVkZW50aWFsczohMH0sInRleHQvcGxhaW4iPT09c2UmJihHLnRy'@;
put 'YW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksWzIsdGhpcy5odHRwQ2xpZW50LmdldCh0ZSxHKS50aGVuKGZ1bmN0aW9uKEgpe3JldHVybiAzMDI9PT1ILnN0YXR1cz9iLmdldChILmhlYWRlcnMubG9jYXRpb24sb2Usc2UpOigoMCxZLnRocm93SWZFcnJvcikoSCksYi5wYXJzZVJlc3BvbnNlKEgp'@;
put 'KX0pLmNhdGNoKGZ1bmN0aW9uKEgpe3JldHVybiBrKGIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOmlmKEggaW5zdGFuY2VvZiBYLkpvYkV4ZWN1dGlvbkVycm9yKXRocm93IEg7cmV0'@;
put 'dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihILGZ1bmN0aW9uKCl7cmV0dXJuIE4uZ2V0KHRlLG9lLHNlLGhlKS5jYXRjaChmdW5jdGlvbihDKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoQywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KX0sdWUpLmNh'@;
put 'dGNoKGZ1bmN0aW9uKEMpe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShDLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KV07Y2FzZSAxOnJldHVyblsyLGcuc2VudCgpXX19KX0pfSldfSl9KX0sZWUucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odGUsb2Usc2UsaGUsdWUpe3JldHVy'@;
put 'biB2b2lkIDA9PT1oZSYmKGhlPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09dWUmJih1ZT17fSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgY2UsRz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIGNlPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMo'@;
put 'c2UsaGUpKSx1ZSksWzIsdGhpcy5odHRwQ2xpZW50LnBvc3QodGUsb2Use2hlYWRlcnM6Y2Usd2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihEKXtyZXR1cm4gayhHLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxh'@;
put 'YmVsKXtjYXNlIDA6cmV0dXJuIDMwMiE9PUQuc3RhdHVzP1szLDJdOls0LHRoaXMuZ2V0KEQuaGVhZGVycy5sb2NhdGlvbix2b2lkIDAsaGUsdWUpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldO2Nhc2UgMjpyZXR1cm4oMCxZLnRocm93SWZFcnJvcikoRCksWzIsdGhpcy5wYXJzZVJlc3Bv'@;
put 'bnNlKEQpXX19KX0pfSkuY2F0Y2goZnVuY3Rpb24oRCl7cmV0dXJuIGsoRyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihELGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEgucG9zdCh0ZSxvZSxzZSxoZSx1ZSl9KV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSldfSl9KX0sZWV9KFkuUmVxdWVzdENsaWVudCk7Ty5TYXM5UmVxdWVzdENsaWVudD1VfSwzNjAyOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlz'@;
put 'JiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oayxFKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oaixWKXtqLl9fcHJvdG9fXz1WfXx8ZnVuY3Rpb24oaixWKXtmb3IodmFyIEIgaW4gVilPYmplY3Qu'@;
put 'cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixCKSYmKGpbQl09VltCXSl9KShrLEUpfSxmdW5jdGlvbihrLEUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBFJiZudWxsIT09RSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKEUpKyIgaXMgbm90'@;
put 'IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGooKXt0aGlzLmNvbnN0cnVjdG9yPWt9eihrLEUpLGsucHJvdG90eXBlPW51bGw9PT1FP09iamVjdC5jcmVhdGUoRSk6KGoucHJvdG90eXBlPUUucHJvdG90eXBlLG5ldyBqKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBU0pTX0xPR1NfU0VQQVJBVE9SPU8uU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDt2YXIgST1mdW5jdGlvbihrKXtmdW5jdGlvbiBFKCl7dmFyIGo9bnVsbCE9PWsmJmsuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBqLmdldEhlYWRl'@;
put 'cnM9ZnVuY3Rpb24oVixCKXt2YXIgWSxYPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09QiYmKFhbIkNvbnRlbnQtVHlwZSJdPUIpLFguQWNjZXB0PSJhcHBsaWNhdGlvbi9qc29uIj09PUI/QjoiKi8qIixWfHx0eXBlb2Ygd2luZG93PiJ1Inx8KFY9bnVs'@;
put 'bCE9PShZPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhY2Nlc3NUb2tlbiIpKSYmdm9pZCAwIT09WT9ZOnZvaWQgMCksViYmKFguQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFYpKSxYfSxqfXJldHVybiBLKEUsayksRS5wcm90b3R5cGUucGFyc2VSZXNwb25zZT1mdW5jdGlvbihqKXt2'@;
put 'YXIgVixCLFksWD1qPy5oZWFkZXJzP2ouaGVhZGVycy5ldGFnOiIiLFU9e307dHJ5e1U9InN0cmluZyI9PXR5cGVvZiBqLmRhdGE/SlNPTi5wYXJzZShqLmRhdGEpOmouZGF0YX1jYXRjaHtpZihqLmRhdGEuaW5jbHVkZXMoTy5TQVNKU19MT0dTX1NFUEFSQVRPUikpe3ZhciBxPWouZGF0YSxl'@;
put 'ZT1xLnNwbGl0KE8uU0FTSlNfTE9HU19TRVBBUkFUT1IpO3ZvaWQgMCE9PShWPWVlLnNwbGljZSgwLDEpWzBdKSYmKFU9Vik7dmFyIHRlPWVlLnNwbGljZSgwLGVlLmxlbmd0aC0xKSxvZT1uZXcgUmVnRXhwKCIiLmNvbmNhdChPLlNBU0pTX0xPR1NfU0VQQVJBVE9SLCIkIikpLHNlPWVlWzBd'@;
put 'O3NlJiYob2UudGVzdChxKT90ZS5sZW5ndGg+MSYmdGUucHVzaChzZSk6WT1zZSksQj10ZS5qb2luKE8uU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2UgVT1qLmRhdGF9dmFyIGhlPXtyZXN1bHQ6VSxsb2c6Qnx8IiIsZXRhZzpYLHN0YXR1czpqLnN0YXR1c307cmV0dXJuIFkmJihoZS5wcmlu'@;
put 'dE91dHB1dD1ZKSxoZX0sRX0oUig0NTg4KS5SZXF1ZXN0Q2xpZW50KTtPLlNhc2pzUmVxdWVzdENsaWVudD1JLE8uU0FTSlNfTE9HU19TRVBBUkFUT1I9IlNBU0pTX0xPR1NfU0VQQVJBVE9SXzE2M2VlMTdiNmZmMjRmMDI4OTI4OTcyZDgwYTI2Nzg0In0sNDcwOihNLE8pPT57InVzZSBzdHJp'@;
put 'Y3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2NjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NzY2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDk3NTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'TywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ3ODI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pfSw0MTY4OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9'@;
put 'LDM4NDA6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzMTUzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTQyODooTSxPKT0+'@;
put 'eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU4NDE6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFIsSztPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Mb2dpbk1lY2hhbmlzbT1P'@;
put 'LlNBU2pzQ29uZmlnPXZvaWQgMCxPLlNBU2pzQ29uZmlnPWZ1bmN0aW9uKCl7dGhpcy5zZXJ2ZXJVcmw9IiIsdGhpcy5wYXRoU0FTSlM9IiIsdGhpcy5wYXRoU0FTOT0iIix0aGlzLnBhdGhTQVNWaXlhPSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuc2VydmVyVHlwZT1udWxsLHRoaXMuZGVidWc9'@;
put 'ITAsdGhpcy52ZXJib3NlPSEwLHRoaXMuY29udGV4dE5hbWU9IiIsdGhpcy51c2VDb21wdXRlQXBpPW51bGwsdGhpcy5sb2dpbk1lY2hhbmlzbT1SLkRlZmF1bHQsdGhpcy5yZXF1ZXN0SGlzdG9yeUxpbWl0PTEwfSwoSz1SPU8uTG9naW5NZWNoYW5pc218fChPLkxvZ2luTWVjaGFuaXNtPXt9'@;
put 'KSkuRGVmYXVsdD0iRGVmYXVsdCIsSy5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sNjAzODooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXNzaW9uU3RhdGU9dm9pZCAwLChSPU8uU2Vzc2lvblN0'@;
put 'YXRlfHwoTy5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsUi5SdW5uaW5nPSJydW5uaW5nIixSLlBlbmRpbmc9InBlbmRpbmciLFIuSWRsZT0iaWRsZSIsUi5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLFIuTm9TdGF0ZT0iIixSLkZhaWxlZD0iZmFpbGVkIixSLkVy'@;
put 'cm9yPSJlcnJvciJ9LDk0OTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NjUwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0s'@;
put 'MTI0OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3Rv'@;
put 'X189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3Rv'@;
put 'dHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5BdXRob3JpemVFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFLGope3ZhciBWPUkuY2FsbCh0aGlzLEUpfHx0aGlzO3JldHVybiBWLm1lc3NhZ2U9'@;
put 'RSxWLmNvbmZpcm1Vcmw9aixWLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVixrLnByb3RvdHlwZSksVn1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkF1dGhvcml6ZUVycm9yPUt9LDk0NjU6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10'@;
put 'aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmpl'@;
put 'Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMg'@;
put 'bm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJf'@;
put 'X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNlcnRpZmljYXRlRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSl7dmFyIGo9SS5jYWxsKHRoaXMsIiIuY29uY2F0KEUsIlxuUGxlYXNlIHZpc2l0IHRoZSBsaW5rIGJlbG93IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9u'@;
put 'IG9uIHRoaXMgaXNzdWU6XG4tICIpLmNvbmNhdCgiaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4NCIsIlxuIikpfHx0aGlzO3JldHVybiBqLm5hbWU9IkNlcnRpZmljYXRlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihq'@;
put 'LGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uQ2VydGlmaWNhdGVFcnJvcj1LfSw1MjY3OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3Rv'@;
put 'dHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVu'@;
put 'Y3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIo'@;
put 'SSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO3ZhciBL'@;
put 'PWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqKXt2YXIgVj1JLmNhbGwodGhpcywiRXJyb3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIil8fHRoaXM7cmV0dXJuIFYuam9iPUUsVi5sb2c9aixWLm5hbWU9IkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYs'@;
put 'ay5wcm90b3R5cGUpLFZ9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9S30sOTIzMjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5FcnJvclJlc3BvbnNlPXZvaWQg'@;
put 'MCxPLkVycm9yUmVzcG9uc2U9ZnVuY3Rpb24oeixLLEkpe3ZhciBrPUs7aWYoIm9iamVjdCIhPXR5cGVvZiBLKXRyeXtrPUpTT04ucGFyc2UoSyl9Y2F0Y2h7ST1LLGs9IiJ9dGhpcy5lcnJvcj17bWVzc2FnZTp6LGRldGFpbHM6ayxyYXc6SX19fSw1MTA5OmZ1bmN0aW9uKE0sTyl7InVzZSBz'@;
put 'dHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9y'@;
put 'KHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAi'@;
put 'K1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5JbnRlcm5hbFNlcnZlckVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKCl7dmFyIEU9SS5jYWxsKHRoaXMsIkVycm9yOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuIil8fHRoaXM7cmV0dXJuIEUu'@;
put 'bmFtZT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5JbnRlcm5hbFNlcnZlckVycm9yPUt9LDU1MTg6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlz'@;
put 'Ll9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90'@;
put 'eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29u'@;
put 'c3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KSxPLkludmFsaWRKc29uRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNhbGwodGhpcywiRXJyb3I6IGludmFsaWQgSnNvbiBzdHJpbmciKXx8dGhpcztyZXR1cm4gRS5uYW1lPSJJbnZhbGlkSnNvbkVycm9yIixPYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkludmFsaWRKc29uRXJyb3I9S30sMTAwNTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihS'@;
put 'PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1q'@;
put 'W1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMu'@;
put 'Y29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSW52YWxpZFNBU2pzQ3NyZkVycm9y'@;
put 'PXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKCl7dmFyIEU9dGhpcztyZXR1cm4oRT1JLmNhbGwodGhpcywiQXV0aCBlcnJvcjogIi5jb25jYXQoIkludmFsaWQgQ1NSRiB0b2tlbiEiKSl8fHRoaXMpLm5hbWU9IkludmFsaWRTQVNqc0NzcmZFcnJvciIsT2JqZWN0LnNldFBy'@;
put 'b3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5JbnZhbGlkU0FTanNDc3JmRXJyb3I9S30sODUzMTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihS'@;
put 'PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1q'@;
put 'W1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMu'@;
put 'Y29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSm9iRXhlY3V0aW9uRXJyb3I9dm9p'@;
put 'ZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqLFYpe3ZhciBCPUkuY2FsbCh0aGlzLCJFcnJvciBDb2RlICIuY29uY2F0KEUsIjogIikuY29uY2F0KGopKXx8dGhpcztyZXR1cm4gQi5lcnJvckNvZGU9RSxCLmVycm9yTWVzc2FnZT1qLEIucmVzdWx0PVYsQi5uYW1lPSJKb2JF'@;
put 'eGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEIsay5wcm90b3R5cGUpLEJ9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Kb2JFeGVjdXRpb25FcnJvcj1LfSw5MDc5OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChS'@;
put 'PWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w'@;
put 'ZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51'@;
put 'bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'Ty5Kb2JTdGF0ZVBvbGxFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFLGope3ZhciBWPUkuY2FsbCh0aGlzLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0ZSBmb3Igam9iICIuY29uY2F0KEUsIjogIikuY29uY2F0KGoubWVzc2FnZXx8aikpfHx0aGlzO3Jl'@;
put 'dHVybiBWLm9yaWdpbmFsRXJyb3I9aixWLm5hbWU9IkpvYlN0YXRlUG9sbEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVixrLnByb3RvdHlwZSksVn1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkpvYlN0YXRlUG9sbEVycm9yPUt9LDMwOTY6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmlj'@;
put 'dCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFy'@;
put 'IFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3Ry'@;
put 'aW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkpzb25QYXJzZUFycmF5RXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNhbGwodGhpcywiQ2FuIG5vdCBwYXJzZSBhcnJheSBvYmplY3QgdG8ganNvbi4iKXx8dGhpcztyZXR1cm4g'@;
put 'RS5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkpzb25QYXJzZUFycmF5RXJyb3I9S30sNjc0MzpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRo'@;
put 'aXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90'@;
put 'b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBj'@;
put 'b25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLE8uTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUpe3ZhciBqPXRoaXMsVj1FP0pTT04uc3RyaW5naWZ5KEUsbnVsbCwyKToiWW91IG11c3QgYmUgbG9nZ2VkIGluIHRvIGFjY2VzcyB0aGlzIHJlc291cmNlIjty'@;
put 'ZXR1cm4oaj1JLmNhbGwodGhpcywiQXV0aCBlcnJvcjogIi5jb25jYXQoVikpfHx0aGlzKS5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uTG9naW5SZXF1aXJlZEVycm9yPUt9'@;
put 'LDc4NjQ6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJv'@;
put 'dG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJv'@;
put 'dG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLk5vU2Vzc2lvblN0YXRlRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqLFYpe3ZhciBCPUkuY2FsbCh0aGlzLCJDb3VsZCBub3QgZ2V0IHNl'@;
put 'c3Npb24gc3RhdGUuIFNlcnZlciByZXNwb25kZWQgd2l0aCAiLmNvbmNhdChFLCIgd2hpbHN0IGNoZWNraW5nIHN0YXRlOiAiKS5jb25jYXQoaikpfHx0aGlzO3JldHVybiBCLnNlcnZlclJlc3BvbnNlU3RhdHVzPUUsQi5zZXNzaW9uU3RhdGVVcmw9aixCLmxvZ1VybD1WLEIubmFtZT0iTm9T'@;
put 'ZXNzaW9uU3RhdHVzIixPYmplY3Quc2V0UHJvdG90eXBlT2YoQixrLnByb3RvdHlwZSksQn1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLk5vU2Vzc2lvblN0YXRlRXJyb3I9S30sOTU3NzpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwo'@;
put 'Uj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv'@;
put 'cGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBu'@;
put 'dWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p'@;
put 'LE8uTm90Rm91bmRFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFKXt2YXIgaj1JLmNhbGwodGhpcywiRXJyb3I6IFJlc291cmNlIGF0ICIuY29uY2F0KEUsIiB3YXMgbm90IGZvdW5kIikpfHx0aGlzO3JldHVybiBqLnVybD1FLGoubmFtZT0iTm90Rm91bmRFcnJv'@;
put 'ciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGosay5wcm90b3R5cGUpLGp9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Ob3RGb3VuZEVycm9yPUt9LDkyNzk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihFLGop'@;
put 'e3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihWLEIpe1YuX19wcm90b19fPUJ9fHxmdW5jdGlvbihWLEIpe2Zvcih2YXIgWSBpbiBCKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLFkp'@;
put 'JiYoVltZXT1CW1ldKX0pKEUsail9LGZ1bmN0aW9uKEUsail7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGomJm51bGwhPT1qKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24g'@;
put 'Vigpe3RoaXMuY29uc3RydWN0b3I9RX16KEUsaiksRS5wcm90b3R5cGU9bnVsbD09PWo/T2JqZWN0LmNyZWF0ZShqKTooVi5wcm90b3R5cGU9ai5wcm90b3R5cGUsbmV3IFYpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uUm9vdEZvbGRlck5v'@;
put 'dEZvdW5kRXJyb3I9dm9pZCAwO3ZhciBJPVIoNjc5OSksaz1mdW5jdGlvbihFKXtmdW5jdGlvbiBqKFYsQixZKXt2YXIgWD10aGlzLFU9IlJvb3QgZm9sZGVyICIuY29uY2F0KFYsIiB3YXMgbm90IGZvdW5kLiIpKyJcblBsZWFzZSBjaGVjayAiLmNvbmNhdChCLCIvU0FTRHJpdmUuIikrIlxu'@;
put 'SWYgdGhlIGZvbGRlciBET0VTIGV4aXN0IHRoZW4gaXQgaXMgbGlrZWx5IGEgcGVybWlzc2lvbiBwcm9ibGVtLlxuIjtpZihZKXt2YXIgcT0oMCxJLmRlY29kZVRva2VuKShZKS5zY29wZTtVKz0iWW91ciBhY2Nlc3MgdG9rZW4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBzY29wZXM6XG4iKyhx'@;
put 'PXEubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4iKiAiK2VlfSkpLmpvaW4oIlxuIil9cmV0dXJuKFg9RS5jYWxsKHRoaXMsVSl8fHRoaXMpLm5hbWU9IlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoWCxqLnByb3RvdHlwZSksWH1yZXR1cm4gSyhqLEUpLGp9'@;
put 'KEVycm9yKTtPLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPWt9LDk1MjY6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5z'@;
put 'dGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1r'@;
put 'P09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBUzlBdXRoRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNh'@;
put 'bGwodGhpcywiVGhlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlZCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzZXQgb2YgY3JlZGVudGlhbHMuIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVP'@;
put 'ZihFLGsucHJvdG90eXBlKSxFfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uU0FTOUF1dGhFcnJvcj1LfSw4ODc1OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3Rv'@;
put 'dHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVu'@;
put 'Y3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIo'@;
put 'SSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5XZWJvdXRSZXNwb25zZUVycm9yPXZvaWQgMDt2YXIgSz1mdW5j'@;
put 'dGlvbihJKXtmdW5jdGlvbiBrKEUpe3ZhciBqPUkuY2FsbCh0aGlzLCJFcnJvcjogZXJyb3Igd2hpbGUgcGFyc2luZyByZXNwb25zZSBmcm9tICIuY29uY2F0KEUpKXx8dGhpcztyZXR1cm4gai51cmw9RSxqLm5hbWU9IldlYm91dFJlc3BvbnNlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVP'@;
put 'ZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uV2Vib3V0UmVzcG9uc2VFcnJvcj1LfSwxMzk1OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxF'@;
put 'LGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtb'@;
put 'RV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMTI0KSxPKSxLKFIoOTQ2NSksTyksSyhSKDUyNjcpLE8pLEsoUig5MjMyKSxPKSxLKFIoNTEwOSksTyksSyhSKDU1MTgp'@;
put 'LE8pLEsoUig4NTMxKSxPKSxLKFIoOTA3OSksTyksSyhSKDMwOTYpLE8pLEsoUig2NzQzKSxPKSxLKFIoNzg2NCksTyksSyhSKDk1NzcpLE8pLEsoUig5Mjc5KSxPKSxLKFIoODg3NSksTyl9LDEyMzA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3Jl'@;
put 'YXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwo'@;
put 'Vj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGsp'@;
put 'e2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUig0NzApLE8pLEsoUig0NjY2KSxPKSxLKFIoNDk3'@;
put 'NSksTyksSyhSKDU3NjYpLE8pLEsoUigyMTUpLE8pLEsoUig0NzgyKSxPKSxLKFIoNDE2OCksTyksSyhSKDg1MTYpLE8pLEsoUigzODQwKSxPKSxLKFIoNTg0MSksTyksSyhSKDE0MjgpLE8pLEsoUig2MDM4KSxPKSxLKFIoOTQ5MyksTyksSyhSKDMxNTMpLE8pLEsoUig4NjUwKSxPKSxLKFIo'@;
put 'NjE3NyksTyksSyhSKDEzOTUpLE8pfSwzMzAyOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIFI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oSSl7Zm9yKHZhciBrLEU9MSxqPWFyZ3VtZW50cy5sZW5ndGg7RTxq'@;
put 'O0UrKylmb3IodmFyIFYgaW4gaz1hcmd1bWVudHNbRV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssVikmJihJW1ZdPWtbVl0pO3JldHVybiBJfSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSSxrLEUsail7'@;
put 'cmV0dXJuIG5ldyhFfHwoRT1Qcm9taXNlKSkoZnVuY3Rpb24oVixCKXtmdW5jdGlvbiBZKHEpe3RyeXtVKGoubmV4dChxKSl9Y2F0Y2goZWUpe0IoZWUpfX1mdW5jdGlvbiBYKHEpe3RyeXtVKGoudGhyb3cocSkpfWNhdGNoKGVlKXtCKGVlKX19ZnVuY3Rpb24gVShxKXt2YXIgZWU7cS5kb25l'@;
put 'P1YocS52YWx1ZSk6KGVlPXEudmFsdWUsZWUgaW5zdGFuY2VvZiBFP2VlOm5ldyBFKGZ1bmN0aW9uKHRlKXt0ZShlZSl9KSkudGhlbihZLFgpfVUoKGo9ai5hcHBseShJLGt8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEksayl7dmFyIEUsaixW'@;
put 'LEIsWT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZWWzBdKXRocm93IFZbMV07cmV0dXJuIFZbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gQj17bmV4dDpYKDApLHRocm93OlgoMSkscmV0dXJuOlgoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihCW1N5bWJvbC5pdGVy'@;
put 'YXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEI7ZnVuY3Rpb24gWChVKXtyZXR1cm4gZnVuY3Rpb24ocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtpZihFKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1k7KXRyeXtpZihFPTEs'@;
put 'aiYmKFY9MiZlZVswXT9qLnJldHVybjplZVswXT9qLnRocm93fHwoKFY9ai5yZXR1cm4pJiZWLmNhbGwoaiksMCk6ai5uZXh0KSYmIShWPVYuY2FsbChqLGVlWzFdKSkuZG9uZSlyZXR1cm4gVjtzd2l0Y2goaj0wLFYmJihlZT1bMiZlZVswXSxWLnZhbHVlXSksZWVbMF0pe2Nhc2UgMDpjYXNl'@;
put 'IDE6Vj1lZTticmVhaztjYXNlIDQ6cmV0dXJuIFkubGFiZWwrKyx7dmFsdWU6ZWVbMV0sZG9uZTohMX07Y2FzZSA1OlkubGFiZWwrKyxqPWVlWzFdLGVlPVswXTtjb250aW51ZTtjYXNlIDc6ZWU9WS5vcHMucG9wKCksWS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVj0oVj1Z'@;
put 'LnRyeXMpLmxlbmd0aD4wJiZWW1YubGVuZ3RoLTFdKXx8NiE9PWVlWzBdJiYyIT09ZWVbMF0pKXtZPTA7Y29udGludWV9aWYoMz09PWVlWzBdJiYoIVZ8fGVlWzFdPlZbMF0mJmVlWzFdPFZbM10pKXtZLmxhYmVsPWVlWzFdO2JyZWFrfWlmKDY9PT1lZVswXSYmWS5sYWJlbDxWWzFdKXtZLmxh'@;
put 'YmVsPVZbMV0sVj1lZTticmVha31pZihWJiZZLmxhYmVsPFZbMl0pe1kubGFiZWw9VlsyXSxZLm9wcy5wdXNoKGVlKTticmVha31WWzJdJiZZLm9wcy5wb3AoKSxZLnRyeXMucG9wKCk7Y29udGludWV9ZWU9ay5jYWxsKEksWSl9Y2F0Y2godGUpe2VlPVs2LHRlXSxqPTB9ZmluYWxseXtFPVY9'@;
put 'MH1pZig1JmVlWzBdKXRocm93IGVlWzFdO3JldHVybnt2YWx1ZTplZVswXT9lZVsxXTp2b2lkIDAsZG9uZTohMH19KFtVLHFdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz12b2lkIDAs'@;
put 'Ty5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz1mdW5jdGlvbihJLGspe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBFLGo7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihWKXtyZXR1cm4gRT17fSxrPy5sZW5ndGg/KGo9ay5yZWR1Y2UoZnVuY3Rpb24oQixZ'@;
put 'KXtyZXR1cm4gQltZXT1JW1ldLEJ9LHt9KSxFPVIoe3Jlc3VsdDpJLnJlc3VsdH0saikpOkU9SS5yZXN1bHQsWzIsRV19KX0pfX0sNzkyMjpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSyxJLGssRSl7cmV0dXJuIG5ldyhr'@;
put 'fHwoaz1Qcm9taXNlKSkoZnVuY3Rpb24oaixWKXtmdW5jdGlvbiBCKFUpe3RyeXtYKEUubmV4dChVKSl9Y2F0Y2gocSl7VihxKX19ZnVuY3Rpb24gWShVKXt0cnl7WChFLnRocm93KFUpKX1jYXRjaChxKXtWKHEpfX1mdW5jdGlvbiBYKFUpe3ZhciBxO1UuZG9uZT9qKFUudmFsdWUpOihxPVUu'@;
put 'dmFsdWUscSBpbnN0YW5jZW9mIGs/cTpuZXcgayhmdW5jdGlvbihlZSl7ZWUocSl9KSkudGhlbihCLFkpfVgoKEU9RS5hcHBseShLLEl8fFtdKSkubmV4dCgpKX0pfSx6PXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEssSSl7dmFyIGssRSxqLFYsQj17bGFiZWw6MCxzZW50OmZ1'@;
put 'bmN0aW9uKCl7aWYoMSZqWzBdKXRocm93IGpbMV07cmV0dXJuIGpbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVj17bmV4dDpZKDApLHRocm93OlkoMSkscmV0dXJuOlkoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihWW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpc30pLFY7ZnVuY3Rpb24gWShYKXtyZXR1cm4gZnVuY3Rpb24oVSl7cmV0dXJuIGZ1bmN0aW9uKHEpe2lmKGspdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7QjspdHJ5e2lmKGs9MSxFJiYoaj0yJnFbMF0/RS5yZXR1cm46'@;
put 'cVswXT9FLnRocm93fHwoKGo9RS5yZXR1cm4pJiZqLmNhbGwoRSksMCk6RS5uZXh0KSYmIShqPWouY2FsbChFLHFbMV0pKS5kb25lKXJldHVybiBqO3N3aXRjaChFPTAsaiYmKHE9WzImcVswXSxqLnZhbHVlXSkscVswXSl7Y2FzZSAwOmNhc2UgMTpqPXE7YnJlYWs7Y2FzZSA0OnJldHVybiBC'@;
put 'LmxhYmVsKysse3ZhbHVlOnFbMV0sZG9uZTohMX07Y2FzZSA1OkIubGFiZWwrKyxFPXFbMV0scT1bMF07Y29udGludWU7Y2FzZSA3OnE9Qi5vcHMucG9wKCksQi50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaj0oaj1CLnRyeXMpLmxlbmd0aD4wJiZqW2oubGVuZ3RoLTFdKXx8'@;
put 'NiE9PXFbMF0mJjIhPT1xWzBdKSl7Qj0wO2NvbnRpbnVlfWlmKDM9PT1xWzBdJiYoIWp8fHFbMV0+alswXSYmcVsxXTxqWzNdKSl7Qi5sYWJlbD1xWzFdO2JyZWFrfWlmKDY9PT1xWzBdJiZCLmxhYmVsPGpbMV0pe0IubGFiZWw9alsxXSxqPXE7YnJlYWt9aWYoaiYmQi5sYWJlbDxqWzJdKXtC'@;
put 'LmxhYmVsPWpbMl0sQi5vcHMucHVzaChxKTticmVha31qWzJdJiZCLm9wcy5wb3AoKSxCLnRyeXMucG9wKCk7Y29udGludWV9cT1JLmNhbGwoSyxCKX1jYXRjaChlZSl7cT1bNixlZV0sRT0wfWZpbmFsbHl7az1qPTB9aWYoNSZxWzBdKXRocm93IHFbMV07cmV0dXJue3ZhbHVlOnFbMF0/cVsx'@;
put 'XTp2b2lkIDAsZG9uZTohMH19KFtYLFVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5hc3luY0ZvckVhY2g9dm9pZCAwLE8uYXN5bmNGb3JFYWNoPWZ1bmN0aW9uKEssSSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u'@;
put 'KCl7dmFyIGs7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihFKXtzd2l0Y2goRS5sYWJlbCl7Y2FzZSAwOms9MCxFLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBrPEsubGVuZ3RoP1s0LEkoS1trXSxrLEspXTpbMyw0XTtjYXNlIDI6RS5zZW50KCksRS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gaysrLFsz'@;
put 'LDFdO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX19LDM3OTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uY29tcGFyZVRpbWVzdGFtcHM9dm9pZCAwLE8uY29tcGFyZVRpbWVzdGFtcHM9ZnVuY3Rpb24oUix6KXty'@;
put 'ZXR1cm4gei50aW1lc3RhbXAuZ2V0VGltZSgpLVIudGltZXN0YW1wLmdldFRpbWUoKX19LDI0MDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzRm9ybWF0c1RhYmxlPU8uY29u'@;
put 'dmVydFRvQ1NWPXZvaWQgMDt2YXIgSz1SKDY0NjcpLEk9Uig5Nzc4KTtPLmNvbnZlcnRUb0NTVj1mdW5jdGlvbihFLGope3ZhciBWO2lmKCFFW2pdKXRocm93KDAsSS5wcmVmaXhNZXNzYWdlKSgiTm8gdGFibGUgcHJvdmlkZWQgdG8gYmUgY29udmVydGVkIHRvIENTVi4iLCJFcnJvciB3aGls'@;
put 'ZSBjb252ZXJ0aW5nIHRvIENTVi4gIik7dmFyIEI9RVtqXTtpZighQXJyYXkuaXNBcnJheShCKSlyZXR1cm4iIjt2YXIgWSxYPW51bGw9PT0oVj1FWyIkIi5jb25jYXQoaildKXx8dm9pZCAwPT09Vj92b2lkIDA6Vi5mb3JtYXRzLFU9W10scT0hMTtYJiYoVT1PYmplY3Qua2V5cyhYKS5tYXAo'@;
put 'ZnVuY3Rpb24odGUpe3JldHVybiIiLmNvbmNhdCh0ZSwiOiIpLmNvbmNhdChYW3RlXSl9KSk7dmFyIGVlPU9iamVjdC5rZXlzKEJbMF0pO3JldHVybiBlZS5mb3JFYWNoKGZ1bmN0aW9uKHRlKXtpZighWHx8IU9iamVjdC5rZXlzKFgpLmluY2x1ZGVzKHRlKSl7dmFyIG9lPSExLHNlPSExO2lm'@;
put 'KEIuZm9yRWFjaChmdW5jdGlvbihiKXtudWxsPT09Ylt0ZV18fCJudW1iZXIiPT10eXBlb2YgYlt0ZV0/b2U9ITA6InN0cmluZyI9PXR5cGVvZiBiW3RlXSYmKDAsSy5pc1NwZWNpYWxNaXNzaW5nKShiW3RlXSkmJihzZT0hMCl9KSxvZSYmc2UpVS5wdXNoKCIiLmNvbmNhdCh0ZSwiOmJlc3Qu'@;
put 'IikpLFh8fChYPXt9KSxYW3RlXT0iYmVzdC4iO2Vsc2V7dmFyIGhlPW51bGwsdWU9ITEsY2U9LTEsRz1CLm1hcChmdW5jdGlvbihiLEQpe2lmKGJbdGVdfHwiIj09PWJbdGVdKXtoZT91ZXx8KGNlPSh1ZT0oIiI9PT1iW3RlXXx8InN0cmluZyI9PXR5cGVvZiBiW3RlXT8iY2hhcnMiOiJudW1i'@;
put 'ZXIiKSE9PWhlKT9EKzE6LTEpOmhlPSIiPT09Ylt0ZV18fCJzdHJpbmciPT10eXBlb2YgYlt0ZV0/ImNoYXJzIjoibnVtYmVyIjt2YXIgTj12b2lkIDA7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiW3RlXSYmKE49ayhiW3RlXSkpLE59fSkuc29ydChmdW5jdGlvbihiLEQpe3JldHVybiBELWJ9'@;
put 'KVswXTtHJiZHPjMyNzY1JiYocT0hMCksdWUmJnouZXJyb3IoIlJvdyAoIi5jb25jYXQoY2UsIiksIENvbHVtbiAoIikuY29uY2F0KHRlLCIpIGhhcyBtaXhlZCB0eXBlczogRVJST1IiKSksVS5wdXNoKCIiLmNvbmNhdCh0ZSwiOiIpLmNvbmNhdCgiY2hhcnMiPT09aGU/IiRjaGFyIjoiIiku'@;
put 'Y29uY2F0KEd8fCgiY2hhcnMiPT09aGU/IjEiOiJiZXN0IiksIi4iKSl9fX0pLFgmJihVPVUuc29ydChmdW5jdGlvbih0ZSxvZSl7cmV0dXJuIGVlLmluZGV4T2YodGUucmVwbGFjZSgvOi4qLywiIikpLWVlLmluZGV4T2Yob2UucmVwbGFjZSgvOi4qLywiIikpfSkpLHE/IkVSUk9SOiBMQVJH'@;
put 'RSBTVFJJTkcgTEVOR1RIIjooWT1CLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJuIE9iamVjdC5rZXlzKHRlKS5tYXAoZnVuY3Rpb24ob2Usc2Upe3ZhciBoZSx1ZT10ZVtvZV07aWYoIm51bWJlciI9PXR5cGVvZiB1ZSlyZXR1cm4gdWU7aWYoaGU9bnVsbD09PXVlPyIiOnVlLFgmJiJiZXN0LiI9'@;
put 'PT1YW29lXSl7aWYoaGUmJiEoMCxLLmlzU3BlY2lhbE1pc3NpbmcpKGhlKSl0aHJvdyBuZXcgRXJyb3IoIkEgU3BlY2lhbCBtaXNzaW5nIHZhbHVlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tICdBJyB0byAnWicsICdfJywgJy5bYS16XScsICcuXyciKTt2YXIgY2U9aGUu'@;
put 'aW5jbHVkZXMoIi4iKT8iIjoiLiI7cmV0dXJuIiIuY29uY2F0KGNlKS5jb25jYXQoaGUudG9Mb3dlckNhc2UoKSl9cmV0dXJuIGhlPWhlLnJlcGxhY2UoLyIvZywnIiInKSwoaGU9JyInLmNvbmNhdChoZSwnIicpKS5zdWJzdHJpbmcoMSxoZS5sZW5ndGgtMSkuc2VhcmNoKC8oXHR8XG58XHJ8'@;
put 'LHxcJ3xcIikvZ20pPDAmJihoZT1oZS5zdWJzdHJpbmcoMSxoZS5sZW5ndGgtMSkpLCIiPT09KGhlPWhlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIikpJiZVW3NlXS5pbmNsdWRlcygiYmVzdCIpJiYoaGU9Ii4iKSxoZX0pLmpvaW4oIiwiKX0pLFUuam9pbigiLCIpLnJlcGxhY2UoLywvZywiICIp'@;
put 'KyJcclxuIitZLmpvaW4oIlxyXG4iKSl9LE8uaXNGb3JtYXRzVGFibGU9ZnVuY3Rpb24oRSl7cmV0dXJuL15cJC4qLy50ZXN0KEUpfTt2YXIgaz1mdW5jdGlvbihFKXtmb3IodmFyIGo9RS5sZW5ndGgsVj1FLmxlbmd0aC0xO1Y+PTA7Vi0tKXt2YXIgQj1FLmNoYXJDb2RlQXQoVik7Qj4xMjcm'@;
put 'JkI8PTIwNDc/aisrOkI+MjA0NyYmQjw9NjU1MzUmJihqKz0yKSxCPj01NjMyMCYmQjw9NTczNDMmJlYtLX1yZXR1cm4gan19LDYxMTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jcmVhdGVBeGlvc0lu'@;
put 'c3RhbmNlPXZvaWQgMDt2YXIgej1SKDk2NjkpO08uY3JlYXRlQXhpb3NJbnN0YW5jZT1mdW5jdGlvbihLLEkpe3JldHVybiB6LmRlZmF1bHQuY3JlYXRlKHtiYXNlVVJMOkssaHR0cHNBZ2VudDpJfSl9fSw5ODI1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShP'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRlbGF5PXZvaWQgMCxPLmRlbGF5PWZ1bmN0aW9uKFIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih6KXtyZXR1cm4gc2V0VGltZW91dCh6LFIpfSl9fSw5OTA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUp'@;
put 'LEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFUpe2Z1bmN0aW9uIHEob2Upe3RyeXt0ZShZLm5leHQob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0cnl7'@;
put 'dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Upe3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihzZT1vZS52YWx1ZSxzZSBpbnN0YW5jZW9mIEI/c2U6bmV3IEIoZnVuY3Rpb24oaGUpe2hlKHNlKX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHkoaixW'@;
put 'fHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWFswXSl0aHJvdyBYWzFdO3JldHVybiBYWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6ZWUo'@;
put 'MCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1bmN0aW9uIGVlKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYoQil0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihYPTImc2VbMF0/WS5yZXR1cm46c2VbMF0/WS50aHJvd3x8KChYPVkucmV0dXJuKSYmWC5jYWxsKFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxzZVsx'@;
put 'XSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9c2U7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxhYmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1bMF07'@;
put 'Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlzKS5sZW5ndGg+MCYmWFtYLmxlbmd0aC0xXSl8fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxzZVsx'@;
put 'XT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1YWzFdLFg9c2U7YnJlYWt9aWYoWCYmcS5sYWJlbDxYWzJdKXtxLmxhYmVsPVhbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9wKCks'@;
put 'cS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtzZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYoNSZzZVswXSl0aHJvdyBzZVsxXTtyZXR1cm57dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsb2VdKX19fTtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5mZXRjaExvZz1PLmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO3ZhciBFPVIoOTc3OCk7Ty5mZXRjaExvZ0J5Q2h1bmtzPWZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBJKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGsodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLE8uZmV0Y2hMb2cpKGosVixCLDAsWSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKV19fSl9KX0sTy5mZXRjaExvZz1mdW5jdGlvbihqLFYsQixZLFgpe3JldHVybiBJKHZvaWQgMCx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFUscSxlZSx0ZSxvZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHNlKXtzd2l0Y2goc2UubGFiZWwpe2Nhc2UgMDpVPXoubG9nZ2VyfHxLLHE9IiIsZWU9WDwxZTQ/WDoxZTQsc2UubGFiZWw9MTtjYXNlIDE6cmV0dXJuIFUuaW5mbygiRmV0Y2hp'@;
put 'bmcgbG9ncyBmcm9tIGxpbmUgbm86ICIuY29uY2F0KFkrMSwiIHRvICIpLmNvbmNhdChZK2VlLCIgb2YgIikuY29uY2F0KFgsIi4iKSksWzQsai5nZXQoIiIuY29uY2F0KEIsIj9zdGFydD0iKS5jb25jYXQoWSwiJmxpbWl0PSIpLmNvbmNhdChlZSksVikudGhlbihmdW5jdGlvbihoZSl7cmV0'@;
put 'dXJuIGhlLnJlc3VsdH0pLmNhdGNoKGZ1bmN0aW9uKGhlKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoaGUsIkVycm9yIHdoaWxlIGdldHRpbmcgbG9nLiAiKX0pXTtjYXNlIDI6aWYoMD09PSh0ZT1zZS5zZW50KCkpLml0ZW1zLmxlbmd0aClyZXR1cm5bMyw0XTtvZT10ZS5pdGVtcy5tYXAo'@;
put 'ZnVuY3Rpb24oaGUpe3JldHVybiBoZS5saW5lfSkuam9pbigiXG4iKSxxKz1vZSxZKz1lZSxzZS5sYWJlbD0zO2Nhc2UgMzppZihZPFgpcmV0dXJuWzMsMV07c2UubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzIscV19fSl9KX19LDcxNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXZvaWQgMDt2YXIgej1SKDI0MDIpLEs9Uig0Nzk5KTtPLmZvcm1hdERhdGFGb3JSZXF1ZXN0PWZ1bmN0aW9uKEkpe3ZhciBrPVtdLEU9MCxqPXt9O2Zvcih2YXIgViBpbiBJKWlmKCEo'@;
put 'MCx6LmlzRm9ybWF0c1RhYmxlKShWKXx8IU9iamVjdC5rZXlzKEkpLmluY2x1ZGVzKFYucmVwbGFjZSgvXlwkLywiIikpKXtFKyssKDAsei5pc0Zvcm1hdHNUYWJsZSkoVil8fGsucHVzaChWKTt2YXIgQj0oMCx6LmNvbnZlcnRUb0NTVikoSSxWKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBM'@;
put 'RU5HVEgiPT09Qil0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7aWYoQi5sZW5ndGg+MTZlMyl7dmFyIFk9KDAsSy5zcGxpdENodW5rcykoQik7alsic2FzanMiLmNvbmNhdChFLCJkYXRhMCIp'@;
put 'XT1ZLmxlbmd0aCxZLmZvckVhY2goZnVuY3Rpb24oWCxVKXtqWyJzYXNqcyIuY29uY2F0KEUsImRhdGEiKS5jb25jYXQoVSsxKV09WH0pfWVsc2Ugalsic2FzanMiLmNvbmNhdChFLCJkYXRhIildPUJ9cmV0dXJuIGouc2FzanNfdGFibGVzPWsuam9pbigiICIpLGp9fSw4NDU4OihNLE8sUik9'@;
put 'PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0Rm9ybURhdGE9dm9pZCAwO3ZhciB6PVIoNTkyOCksSz1SKDYyMzApO08uZ2V0Rm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4oMCx6LmlzTm9kZSkoKT9uZXcgSzpuZXcg'@;
put 'Rm9ybURhdGF9fSwxODg0OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VmFsaWRKc29uPXZvaWQgMDt2YXIgej1SKDEzOTUpO08uZ2V0VmFsaWRKc29uPWZ1bmN0aW9uKEspe3RyeXtpZihudWxsPT1L'@;
put 'KXRocm93IG5ldyB6LkludmFsaWRKc29uRXJyb3I7aWYoQXJyYXkuaXNBcnJheShLKSl0aHJvdyBuZXcgei5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10eXBlb2YgSz9LOiIiPT09Sz97fTpKU09OLnBhcnNlKEspfWNhdGNoKEkpe3Rocm93IEkgaW5zdGFuY2VvZiB6Lkpz'@;
put 'b25QYXJzZUFycmF5RXJyb3I/STpuZXcgei5JbnZhbGlkSnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7'@;
put 'dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku'@;
put 'Y2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUigzMzAyKSxPKSxLKFIoNzkyMiksTyksSyhSKDM3OTMpLE8pLEsoUigyNDAyKSxPKSxLKFIoNjExNiksTyksSyhSKDk4MjUpLE8pLEsoUig5OTApLE8pLEsoUigx'@;
put 'ODg0KSxPKSxLKFIoNDI0MyksTyksSyhSKDI1NyksTyksSyhSKDIpLE8pLEsoUigyNjE1KSxPKSxLKFIoMjkyMCksTyksSyhSKDI0MjIpLE8pLEsoUigzMSksTyksSyhSKDY1MTUpLE8pLEsoUig2NDE2KSxPKSxLKFIoMjgxMyksTyksSyhSKDk4OTYpLE8pLEsoUig0Nzk5KSxPKSxLKFIoNDUx'@;
put 'NiksTyksSyhSKDg0NTgpLE8pfSw0MjQzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc05vZGU9dm9pZCAwLE8uaXNOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXom'@;
put 'Jm51bGwhPXoudmVyc2lvbnMmJm51bGwhPXoudmVyc2lvbnMubm9kZX19LDI1NzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc1JlbGF0aXZlUGF0aD12b2lkIDAsTy5pc1JlbGF0aXZlUGF0aD1mdW5jdGlv'@;
put 'bihSKXtyZXR1cm4hIVImJiFSLnN0YXJ0c1dpdGgoIi8iKX19LDI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNVcmk9dm9pZCAwLE8uaXNVcmk9ZnVuY3Rpb24oUil7cmV0dXJuL15cL2ZvbGRlcnNcL2Zv'@;
put 'bGRlcnNcLy8udGVzdChSKX19LDI2MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNVcmw9dm9pZCAwLE8uaXNVcmw9ZnVuY3Rpb24oUil7dHJ5e3ZhciB6PW5ldyBVUkwoUik7aWYoIVsiaHR0cDoiLCJo'@;
put 'dHRwczoiXS5pbmNsdWRlcyh6LnByb3RvY29sKSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH19LDEyMTA6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsVix6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gbmV3KFl8fChZPVBy'@;
put 'b21pc2UpKShmdW5jdGlvbihVLHEpe2Z1bmN0aW9uIGVlKHNlKXt0cnl7b2UoWC5uZXh0KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiB0ZShzZSl7dHJ5e29lKFgudGhyb3coc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1bmN0aW9uIG9lKHNlKXt2YXIgaGU7c2UuZG9uZT9VKHNlLnZh'@;
put 'bHVlKTooaGU9c2UudmFsdWUsaGUgaW5zdGFuY2VvZiBZP2hlOm5ldyBZKGZ1bmN0aW9uKHVlKXt1ZShoZSl9KSkudGhlbihlZSx0ZSl9b2UoKFg9WC5hcHBseShWLEJ8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFYsQil7dmFyIFksWCxVLHEs'@;
put 'ZWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVVswXSl0aHJvdyBVWzFdO3JldHVybiBVWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHE9e25leHQ6dGUoMCksdGhyb3c6dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRl'@;
put 'cmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRlKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe3JldHVybiBmdW5jdGlvbihoZSl7aWYoWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtlZTspdHJ5e2lm'@;
put 'KFk9MSxYJiYoVT0yJmhlWzBdP1gucmV0dXJuOmhlWzBdP1gudGhyb3d8fCgoVT1YLnJldHVybikmJlUuY2FsbChYKSwwKTpYLm5leHQpJiYhKFU9VS5jYWxsKFgsaGVbMV0pKS5kb25lKXJldHVybiBVO3N3aXRjaChYPTAsVSYmKGhlPVsyJmhlWzBdLFUudmFsdWVdKSxoZVswXSl7Y2FzZSAw'@;
put 'OmNhc2UgMTpVPWhlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZWUubGFiZWwrKyx7dmFsdWU6aGVbMV0sZG9uZTohMX07Y2FzZSA1OmVlLmxhYmVsKyssWD1oZVsxXSxoZT1bMF07Y29udGludWU7Y2FzZSA3OmhlPWVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYo'@;
put 'ISgoVT0oVT1lZS50cnlzKS5sZW5ndGg+MCYmVVtVLmxlbmd0aC0xXSl8fDYhPT1oZVswXSYmMiE9PWhlWzBdKSl7ZWU9MDtjb250aW51ZX1pZigzPT09aGVbMF0mJighVXx8aGVbMV0+VVswXSYmaGVbMV08VVszXSkpe2VlLmxhYmVsPWhlWzFdO2JyZWFrfWlmKDY9PT1oZVswXSYmZWUubGFi'@;
put 'ZWw8VVsxXSl7ZWUubGFiZWw9VVsxXSxVPWhlO2JyZWFrfWlmKFUmJmVlLmxhYmVsPFVbMl0pe2VlLmxhYmVsPVVbMl0sZWUub3BzLnB1c2goaGUpO2JyZWFrfVVbMl0mJmVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlfWhlPUIuY2FsbChWLGVlKX1jYXRjaCh1ZSl7aGU9WzYs'@;
put 'dWVdLFg9MH1maW5hbGx5e1k9VT0wfWlmKDUmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJue3ZhbHVlOmhlWzBdP2hlWzFdOnZvaWQgMCxkb25lOiEwfX0oW29lLHNlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ub3BlbkxvZ2luUHJvbXB0'@;
put 'PXZvaWQgMCwoVj1SfHwoUj17fSkpLnN0eWxlcz0ic2FzanNBZGFwdGVyU3R5bGVzIixWLm92ZXJsYXk9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0QkciLFYuZGlhbG9nPSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdCI7dmFyIEk9InNhc2pzLWFkYXB0ZXIiLGs9e3BvcFVwOiIiLmNvbmNhdChJ'@;
put 'LCJwb3BVcCIpLHBvcFVwQkc6IiIuY29uY2F0KEksInBvcFVwQkciKX07Ty5vcGVuTG9naW5Qcm9tcHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVil7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQixZLFgsVSxxLGVlLHRlLG9l'@;
put 'O3JldHVybiBLKHRoaXMsZnVuY3Rpb24oc2Upe3JldHVybihCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIikpLmlkPVIuc3R5bGVzLEIuaW5uZXJUZXh0PWosKFk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlkPVIub3ZlcmxheSxZLmNsYXNzTGlzdC5hZGQoay5wb3BV'@;
put 'cEJHKSwoWD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaWQ9Ui5kaWFsb2csWC5jbGFzc0xpc3QuYWRkKGsucG9wVXApLChVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImgxIikpLmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsWC5hcHBlbmRDaGlsZChVKSxxPWRvY3VtZW50'@;
put 'LmNyZWF0ZUVsZW1lbnQoImRpdiIpLChlZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpLmlubmVyVGV4dD0iWW91IG5lZWQgdG8gcmVsb2dpbiwgY2xpY2sgT0sgdG8gbG9naW4uIixxLmFwcGVuZENoaWxkKGVlKSxYLmFwcGVuZENoaWxkKHEpLCh0ZT1kb2N1bWVudC5jcmVhdGVF'@;
put 'bGVtZW50KCJidXR0b24iKSkuY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiksdGUuaW5uZXJUZXh0PSJDYW5jZWwiLHRlLm9uY2xpY2s9ZnVuY3Rpb24oKXtFKCksVighMSl9LFguYXBwZW5kQ2hpbGQodGUpLChvZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKSkuY2xhc3NMaXN0LmFk'@;
put 'ZCgiY29uZmlybSIpLG9lLmlubmVyVGV4dD0iT2siLG9lLm9uY2xpY2s9ZnVuY3Rpb24oKXtFKCksVighMCl9LFguYXBwZW5kQ2hpbGQob2UpLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChCKSxkb2N1bWVudC5ib2R5LmFw'@;
put 'cGVuZENoaWxkKFkpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWCksWzJdfSl9KX0pfTt2YXIgRT1mdW5jdGlvbigpe09iamVjdC52YWx1ZXMoUikuZm9yRWFjaChmdW5jdGlvbihWKXt2YXIgQixZPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFYpO251bGw9PT0oQj1ZPy5wYXJlbnROb2Rl'@;
put 'KXx8dm9pZCAwPT09Qnx8Qi5yZW1vdmVDaGlsZChZKX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8ifSxqPSJcbi4iLmNvbmNhdChrLnBvcFVwQkcsIiAsXG4uIikuY29uY2F0KGsucG9wVXAsIiB7XG4gIHotaW5kZXg6IDEwMDAwO1xufVxuLiIpLmNvbmNhdChrLnBvcFVw'@;
put 'LCIge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA0MCU7XG4gIGxlZnQ6IDUwJTtc'@;
put 'biAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogJ1BUIFNhbnMnLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB6LWluZGV4OiA5OTk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6'@;
put 'IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG4uIikuY29uY2F0KGsu'@;
put 'cG9wVXAsIiA+IGgxIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDVweDtcbiAgbWluLWhlaWdodDogNDBweDtcbiAgZm9udC1zaXplOiAxLjJl'@;
put 'bTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIGJvcmRlci13aWR0aDogNXB4O1xuICBib3JkZXItY29sb3I6IGJsYWNr'@;
put 'O1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLTEwOHB4KTtcbiAgbWFyZ2luOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBi'@;
put 'b3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICNjY2M7XG4gIGJvcmRlci1zdHlsZTogbm9uZSBub25lIHNvbGlkIG5vbmU7'@;
put 'XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBkaXYgPiBzcGFuIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6'@;
put 'IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IDEwOHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiAuY2FuY2VsIHtcbiAg'@;
put 'ZmxvYXQ6IGxlZnQ7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiAuY29uZmlybSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4gYnV0dG9uIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xu'@;
put 'ICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTBweDtcbiAgd2lkdGg6IDUwJTtcbiAgYm9yZGVyOiAxcHggbm9uZSAjY2NjO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtc'@;
put 'biAgaGVpZ2h0OiA1MHB4O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDEsIDEsIDEsIDAuMik7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiA+IGJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbi4iKS5jb25jYXQoay5wb3BVcEJHLCIge1xuICBkaXNw'@;
put 'bGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgb3BhY2l0eTogMC45NTtcbiAgei1pbmRleDogNTA7XG4gIGJhY2tncm91bmQt'@;
put 'aW1hZ2U6IHJhZGlhbC1ncmFkaWVudCgjMDM3OGNkLCAjMDEyMDM2KTtcbn1cbiIpfSwyOTIwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm5lZWRzUmV0cnk9dm9pZCAwLE8ubmVlZHNSZXRyeT1mdW5jdGlv'@;
put 'bihSKXtyZXR1cm4hIVImJihSLmluY2x1ZGVzKCciZXJyb3JDb2RlIjo0MDMnKSYmUi5pbmNsdWRlcygiX2NzcmYiKSYmUi5pbmNsdWRlcygiWC1DU1JGLVRPS0VOIil8fFIuaW5jbHVkZXMoJyJzdGF0dXMiOjQwMycpJiZSLmluY2x1ZGVzKCciZXJyb3IiOiJGb3JiaWRkZW4iJyl8fFIuaW5j'@;
put 'bHVkZXMoJyJzdGF0dXMiOjQ0OScpJiZSLmluY2x1ZGVzKCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzLCByZXRyeSBvcmlnaW5hbCByZXF1ZXN0IikpfX0sMjQyMjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5w'@;
put 'YXJzZUdlbmVyYXRlZENvZGU9dm9pZCAwLE8ucGFyc2VHZW5lcmF0ZWRDb2RlPWZ1bmN0aW9uKFIpe3JldHVybiBSLnNwbGl0KCJcbiIpLmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4gei50cmltKCkuc3RhcnRzV2l0aCgiTVBSSU5UIil9KS5qb2luKCJcclxuIil9fSwzMTooTSxPLFIpPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VTYXNWaXlhTG9nPXZvaWQgMCxPLnBhcnNlU2FzVml5YUxvZz1mdW5jdGlvbihLKXt2YXIgSTt0cnl7ST1LLml0ZW1zP0suaXRlbXMubWFwKGZ1'@;
put 'bmN0aW9uKGspe3JldHVybiBrLmxpbmV9KS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KEspfWNhdGNoKGspe3ouZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2UiLGspLEk9S31yZXR1cm4gSX19LDY1MTU6KE0sTyk9PnsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VTb3VyY2VDb2RlPXZvaWQgMCxPLnBhcnNlU291cmNlQ29kZT1mdW5jdGlvbihSKXtyZXR1cm4gUi5zcGxpdCgiXG4iKS5maWx0ZXIoZnVuY3Rpb24oeil7cmV0dXJuIHoudHJpbSgp'@;
put 'LnN1YnN0cmluZygwLDEwKS50cmltU3RhcnQoKS5tYXRjaCgvXlxkLyl9KS5qb2luKCJcclxuIil9fSw2NDE2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGssRSxqLFYpe3JldHVybiBuZXcoanx8KGo9UHJvbWlzZSkp'@;
put 'KGZ1bmN0aW9uKEIsWSl7ZnVuY3Rpb24gWChlZSl7dHJ5e3EoVi5uZXh0KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBVKGVlKXt0cnl7cShWLnRocm93KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBxKGVlKXt2YXIgdGU7ZWUuZG9uZT9CKGVlLnZhbHVlKToodGU9ZWUu'@;
put 'dmFsdWUsdGUgaW5zdGFuY2VvZiBqP3RlOm5ldyBqKGZ1bmN0aW9uKG9lKXtvZSh0ZSl9KSkudGhlbihYLFUpfXEoKFY9Vi5hcHBseShrLEV8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGssRSl7dmFyIGosVixCLFksWD17bGFiZWw6MCxzZW50'@;
put 'OmZ1bmN0aW9uKCl7aWYoMSZCWzBdKXRocm93IEJbMV07cmV0dXJuIEJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWT17bmV4dDpVKDApLHRocm93OlUoMSkscmV0dXJuOlUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihZW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpc30pLFk7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVuY3Rpb24oZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7aWYoail0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtYOyl0cnl7aWYoaj0xLFYmJihCPTImdGVbMF0/Vi5y'@;
put 'ZXR1cm46dGVbMF0/Vi50aHJvd3x8KChCPVYucmV0dXJuKSYmQi5jYWxsKFYpLDApOlYubmV4dCkmJiEoQj1CLmNhbGwoVix0ZVsxXSkpLmRvbmUpcmV0dXJuIEI7c3dpdGNoKFY9MCxCJiYodGU9WzImdGVbMF0sQi52YWx1ZV0pLHRlWzBdKXtjYXNlIDA6Y2FzZSAxOkI9dGU7YnJlYWs7Y2Fz'@;
put 'ZSA0OnJldHVybiBYLmxhYmVsKysse3ZhbHVlOnRlWzFdLGRvbmU6ITF9O2Nhc2UgNTpYLmxhYmVsKyssVj10ZVsxXSx0ZT1bMF07Y29udGludWU7Y2FzZSA3OnRlPVgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEI9KEI9WC50cnlzKS5sZW5ndGg+MCYm'@;
put 'QltCLmxlbmd0aC0xXSl8fDYhPT10ZVswXSYmMiE9PXRlWzBdKSl7WD0wO2NvbnRpbnVlfWlmKDM9PT10ZVswXSYmKCFCfHx0ZVsxXT5CWzBdJiZ0ZVsxXTxCWzNdKSl7WC5sYWJlbD10ZVsxXTticmVha31pZig2PT09dGVbMF0mJlgubGFiZWw8QlsxXSl7WC5sYWJlbD1CWzFdLEI9dGU7YnJl'@;
put 'YWt9aWYoQiYmWC5sYWJlbDxCWzJdKXtYLmxhYmVsPUJbMl0sWC5vcHMucHVzaCh0ZSk7YnJlYWt9QlsyXSYmWC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlfXRlPUUuY2FsbChrLFgpfWNhdGNoKG9lKXt0ZT1bNixvZV0sVj0wfWZpbmFsbHl7aj1CPTB9aWYoNSZ0ZVswXSl0aHJv'@;
put 'dyB0ZVsxXTtyZXR1cm57dmFsdWU6dGVbMF0/dGVbMV06dm9pZCAwLGRvbmU6ITB9fShbcSxlZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2U9dm9pZCAwO3ZhciBJPVIoNTkyOCk7Ty5wYXJz'@;
put 'ZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBWLEI7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihZKXtpZihWPWsuc3BsaXQoLzxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDogNTAw'@;
put 'cHgiIHNyYz0ifDxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQtY29sb3I6Q2FudmFzOyIgc3JjPS8pWzFdLCEoQj1WP1Yuc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1lPi8pWzBdOm51bGwpKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRv'@;
put 'IGZpbmQgd2Vib3V0IGZpbGUgVVJMLiIpO3JldHVyblsyLEUuZ2V0KGorQix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKGZ1bmN0aW9uKFgpe3JldHVybigwLEkuZ2V0VmFsaWRKc29uKShYLnJlc3VsdCl9KV19KX0pfX0sMjgxMzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEw'@;
put 'OCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VXZWJvdXRSZXNwb25zZT12b2lkIDA7dmFyIEs9UigxMzk1KTtPLnBhcnNlV2Vib3V0UmVzcG9uc2U9ZnVuY3Rpb24oSSxrKXt2YXIgRT0iIjtpZihJLmluY2x1ZGVzKCI+PndlYm91dEJF'@;
put 'R0lOPDwiKSl0cnl7RT1JLnNwbGl0KCI+PndlYm91dEJFR0lOPDwiKVsxXS5zcGxpdCgiPj53ZWJvdXRFTkQ8PCIpWzBdfWNhdGNoKGope2lmKGspdGhyb3cgbmV3IEsuV2Vib3V0UmVzcG9uc2VFcnJvcihrKTtFPSIiLHouZXJyb3Ioail9cmV0dXJuIEV9fSwxMTcwOihNLE8pPT57InVzZSBz'@;
put 'dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PXZvaWQgMDt2YXIgUj1bIkxvZyBPZmYiXTtPLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PWZ1bmN0aW9uKHope3ZhciBLPXo/Lm1hdGNoKC8idGl0'@;
put 'bGUiOlxzPyIuKj8iLyksST1LPy5bMF0uc3BsaXQoIjoiKVsxXS50cmltKCksaz1JPy5pbmRleE9mKCIgIik7cmV0dXJuIEk/KFIubWFwKGZ1bmN0aW9uKEUpe3ZhciBqPUk/LmluZGV4T2YoRSl8fC0xO2o+LTEmJihrPWorRS5sZW5ndGgpfSksSS5zbGljZShrLC0xKS50cmltKCkpOiJ1bmtu'@;
put 'b3duIn19LDk4OTY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uc2VyaWFsaXplPXZvaWQgMCxPLnNlcmlhbGl6ZT1mdW5jdGlvbihSKXt2YXIgej1bXTtmb3IodmFyIEsgaW4gUilpZihSLmhhc093blByb3Bl'@;
put 'cnR5KEspKWlmKFJbS11pbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgST0wLGs9UltLXS5sZW5ndGg7STxrO0krKyl6LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KEspKyI9IitlbmNvZGVVUklDb21wb25lbnQoUltLXVtJXSkpO2Vsc2Ugei5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChLKSsiPSIr'@;
put 'ZW5jb2RlVVJJQ29tcG9uZW50KFJbS10pKTtyZXR1cm4gei5qb2luKCImIil9fSw0Nzk5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnNwbGl0Q2h1bmtzPXZvaWQgMCxPLnNwbGl0Q2h1bmtzPWZ1bmN0aW9u'@;
put 'KFIpe2Zvcih2YXIgej0xNmUzLEs9TWF0aC5jZWlsKFIubGVuZ3RoL3opLEk9bmV3IEFycmF5KEspLGs9MCxFPTA7azxLOysrayxFKz16KUlba109Ui5zdWJzdHIoRSx6KTtyZXR1cm4gSX19LDQ1MTY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNN'@;
put 'b2R1bGUiLHt2YWx1ZTohMH0pLE8udmFsaWRhdGVJbnB1dD1PLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPU8uTU9SRV9JTkZPPXZvaWQgMCxPLk1PUkVfSU5GTz0iRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9zYXNqcy5pby9zYXNqcy1hZGFwdGVyLyNyZXF1ZXN0LXJlc3BvbnNlIixPLklO'@;
put 'VkFMSURfVEFCTEVfU1RSVUNUVVJFPSJQYXJhbWV0ZXIgZGF0YSBjb250YWlucyBpbnZhbGlkIHRhYmxlIHN0cnVjdHVyZS4gIi5jb25jYXQoTy5NT1JFX0lORk8pLE8udmFsaWRhdGVJbnB1dD1mdW5jdGlvbih6KXtpZihudWxsPT09eilyZXR1cm57c3RhdHVzOiEwLG1zZzoiIn07aWYoIm9i'@;
put 'amVjdCIhPT1SKHopKXJldHVybntzdGF0dXM6ITEsbXNnOk8uSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkV9O3ZhciBLPWZ1bmN0aW9uKFgpe3JldHVybiBYLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyh6KS5pbmNsdWRlcyhYLnJlcGxhY2UoL15cJC8sIiIpKX07Zm9yKHZhciBJIGluIHop'@;
put 'e2lmKCFJLm1hdGNoKC9eW2EtekEtWl9dLykmJiFLKEkpKXJldHVybntzdGF0dXM6ITEsbXNnOiJGaXJzdCBsZXR0ZXIgb2YgdGFibGUgc2hvdWxkIGJlIGFscGhhYmV0IG9yIHVuZGVyc2NvcmUuIn07aWYoIUkubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qJC8pJiYhSyhJKSlyZXR1'@;
put 'cm57c3RhdHVzOiExLG1zZzoiVGFibGUgbmFtZSBzaG91bGQgYmUgYWxwaGFudW1lcmljLiJ9O2lmKEkubGVuZ3RoPjMyKXJldHVybntzdGF0dXM6ITEsbXNnOiJNYXhpbXVtIGxlbmd0aCBmb3IgdGFibGUgbmFtZSBjb3VsZCBiZSAzMiBjaGFyYWN0ZXJzLiJ9O2lmKCJBcnJheSIhPT1SKHpb'@;
put 'SV0pJiYhSyhJKSlyZXR1cm57c3RhdHVzOiExLG1zZzpPLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTtmb3IodmFyIGs9MCxFPXpbSV07azxFLmxlbmd0aDtrKyspe3ZhciBqPUVba107aWYoIm9iamVjdCIhPT1SKGopKXJldHVybntzdGF0dXM6ITEsbXNnOiJUYWJsZSAiLmNvbmNhdChJLCIg'@;
put 'Y29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICIpLmNvbmNhdChPLk1PUkVfSU5GTyl9O2Zvcih2YXIgVj0wLEI9T2JqZWN0LmtleXMoaik7VjxCLmxlbmd0aDtWKyspe3ZhciBZPUJbVl07aWYodm9pZCAwPT09altZXSlyZXR1cm57c3RhdHVzOiExLG1zZzoiQSByb3cgaW4gdGFibGUgIi5j'@;
put 'b25jYXQoSSwiIGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gIikuY29uY2F0KFksIi4iKX19fX1yZXR1cm57c3RhdHVzOiEwLG1zZzoiIn19O3ZhciBSPWZ1bmN0aW9uKHope3JldHVybiBBcnJheS5pc0FycmF5KHopPyJBcnJheSI6dHlwZW9mIHp9'@;
put 'fSw4OTgxOihNLE8pPT57InVzZSBzdHJpY3QiO08uZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ueil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHpbei5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChLLEkpPT57Ui5j'@;
put 'YWxsKHRoaXMsLi4ueiwoayxFKT0+bnVsbCE9az9JKGspOksoRSkpfSk7Ui5hcHBseSh0aGlzLHopfSwibmFtZSIse3ZhbHVlOlIubmFtZX0pfSxPLmZyb21Qcm9taXNlPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ueil7Y29uc3QgSz16W3ou'@;
put 'bGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLKXJldHVybiBSLmFwcGx5KHRoaXMseik7Ui5hcHBseSh0aGlzLHouc2xpY2UoMCwtMSkpLnRoZW4oST0+SyhudWxsLEkpLEspfSwibmFtZSIse3ZhbHVlOlIubmFtZX0pfX0sNDU2NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6'@;
put 'PVIoNzQxOCksSz1SKDcxMjkpLEk9L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxrPS9bXG5cclx0XS9nLEU9L15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxqPS86XGQrJC8sVj0vXihbYS16'@;
put 'XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxCPS9eW2EtekEtWl06LztmdW5jdGlvbiBZKHNlKXtyZXR1cm4oc2V8fCIiKS50b1N0cmluZygpLnJlcGxhY2UoSSwiIil9dmFyIFg9W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKHNlLGhlKXty'@;
put 'ZXR1cm4gZWUoaGUucHJvdG9jb2wpP3NlLnJlcGxhY2UoL1xcL2csIi8iKTpzZX0sWyIvIiwicGF0aG5hbWUiXSxbIkAiLCJhdXRoIiwxXSxbTmFOLCJob3N0Iix2b2lkIDAsMSwxXSxbLzooXGQqKSQvLCJwb3J0Iix2b2lkIDAsMV0sW05hTiwiaG9zdG5hbWUiLHZvaWQgMCwxLDFdXSxVPXto'@;
put 'YXNoOjEscXVlcnk6MX07ZnVuY3Rpb24gcShzZSl7dmFyIGhlLHVlPSh0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09Ui5nP1IuZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkubG9jYXRpb258fHt9LGNlPXt9LEc9dHlwZW9mKHNlPXNlfHx1ZSk7aWYoImJsb2I6Ij09PXNlLnBy'@;
put 'b3RvY29sKWNlPW5ldyBvZSh1bmVzY2FwZShzZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1HKWZvcihoZSBpbiBjZT1uZXcgb2Uoc2Use30pLFUpZGVsZXRlIGNlW2hlXTtlbHNlIGlmKCJvYmplY3QiPT09Ryl7Zm9yKGhlIGluIHNlKWhlIGluIFV8fChjZVtoZV09c2VbaGVd'@;
put 'KTt2b2lkIDA9PT1jZS5zbGFzaGVzJiYoY2Uuc2xhc2hlcz1FLnRlc3Qoc2UuaHJlZikpfXJldHVybiBjZX1mdW5jdGlvbiBlZShzZSl7cmV0dXJuImZpbGU6Ij09PXNlfHwiZnRwOiI9PT1zZXx8Imh0dHA6Ij09PXNlfHwiaHR0cHM6Ij09PXNlfHwid3M6Ij09PXNlfHwid3NzOiI9PT1zZX1m'@;
put 'dW5jdGlvbiB0ZShzZSxoZSl7c2U9KHNlPVkoc2UpKS5yZXBsYWNlKGssIiIpLGhlPWhlfHx7fTt2YXIgdWUsY2U9Vi5leGVjKHNlKSxHPWNlWzFdP2NlWzFdLnRvTG93ZXJDYXNlKCk6IiIsYj0hIWNlWzJdLEQ9ISFjZVszXSxIPTA7cmV0dXJuIGI/RD8odWU9Y2VbMl0rY2VbM10rY2VbNF0s'@;
put 'SD1jZVsyXS5sZW5ndGgrY2VbM10ubGVuZ3RoKToodWU9Y2VbMl0rY2VbNF0sSD1jZVsyXS5sZW5ndGgpOkQ/KHVlPWNlWzNdK2NlWzRdLEg9Y2VbM10ubGVuZ3RoKTp1ZT1jZVs0XSwiZmlsZToiPT09Rz9IPj0yJiYodWU9dWUuc2xpY2UoMikpOmVlKEcpP3VlPWNlWzRdOkc/YiYmKHVlPXVl'@;
put 'LnNsaWNlKDIpKTpIPj0yJiZlZShoZS5wcm90b2NvbCkmJih1ZT1jZVs0XSkse3Byb3RvY29sOkcsc2xhc2hlczpifHxlZShHKSxzbGFzaGVzQ291bnQ6SCxyZXN0OnVlfX1mdW5jdGlvbiBvZShzZSxoZSx1ZSl7aWYoc2U9KHNlPVkoc2UpKS5yZXBsYWNlKGssIiIpLCEodGhpcyBpbnN0YW5j'@;
put 'ZW9mIG9lKSlyZXR1cm4gbmV3IG9lKHNlLGhlLHVlKTt2YXIgY2UsRyxiLEQsSCxOLGc9WC5zbGljZSgpLEM9dHlwZW9mIGhlLFM9dGhpcyx2PTA7Zm9yKCJvYmplY3QiIT09QyYmInN0cmluZyIhPT1DJiYodWU9aGUsaGU9bnVsbCksdWUmJiJmdW5jdGlvbiIhPXR5cGVvZiB1ZSYmKHVlPUsu'@;
put 'cGFyc2UpLGNlPSEoRz10ZShzZXx8IiIsaGU9cShoZSkpKS5wcm90b2NvbCYmIUcuc2xhc2hlcyxTLnNsYXNoZXM9Ry5zbGFzaGVzfHxjZSYmaGUuc2xhc2hlcyxTLnByb3RvY29sPUcucHJvdG9jb2x8fGhlLnByb3RvY29sfHwiIixzZT1HLnJlc3QsKCJmaWxlOiI9PT1HLnByb3RvY29sJiYo'@;
put 'MiE9PUcuc2xhc2hlc0NvdW50fHxCLnRlc3Qoc2UpKXx8IUcuc2xhc2hlcyYmKEcucHJvdG9jb2x8fEcuc2xhc2hlc0NvdW50PDJ8fCFlZShTLnByb3RvY29sKSkpJiYoZ1szXT1bLyguKikvLCJwYXRobmFtZSJdKTt2PGcubGVuZ3RoO3YrKykiZnVuY3Rpb24iIT10eXBlb2YoRD1nW3ZdKT8o'@;
put 'Tj1EWzFdLChiPURbMF0pIT1iP1NbTl09c2U6InN0cmluZyI9PXR5cGVvZiBiP34oSD0iQCI9PT1iP3NlLmxhc3RJbmRleE9mKGIpOnNlLmluZGV4T2YoYikpJiYoIm51bWJlciI9PXR5cGVvZiBEWzJdPyhTW05dPXNlLnNsaWNlKDAsSCksc2U9c2Uuc2xpY2UoSCtEWzJdKSk6KFNbTl09c2Uu'@;
put 'c2xpY2UoSCksc2U9c2Uuc2xpY2UoMCxIKSkpOihIPWIuZXhlYyhzZSkpJiYoU1tOXT1IWzFdLHNlPXNlLnNsaWNlKDAsSC5pbmRleCkpLFNbTl09U1tOXXx8Y2UmJkRbM10mJmhlW05dfHwiIixEWzRdJiYoU1tOXT1TW05dLnRvTG93ZXJDYXNlKCkpKTpzZT1EKHNlLFMpO3VlJiYoUy5xdWVy'@;
put 'eT11ZShTLnF1ZXJ5KSksY2UmJmhlLnNsYXNoZXMmJiIvIiE9PVMucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT1TLnBhdGhuYW1lfHwiIiE9PWhlLnBhdGhuYW1lKSYmKFMucGF0aG5hbWU9ZnVuY3Rpb24ocCx3KXtpZigiIj09PXApcmV0dXJuIHc7Zm9yKHZhciBKPSh3fHwiLyIpLnNwbGl0'@;
put 'KCIvIikuc2xpY2UoMCwtMSkuY29uY2F0KHAuc3BsaXQoIi8iKSksbmU9Si5sZW5ndGgsZGU9SltuZS0xXSxmZT0hMSx4ZT0wO25lLS07KSIuIj09PUpbbmVdP0ouc3BsaWNlKG5lLDEpOiIuLiI9PT1KW25lXT8oSi5zcGxpY2UobmUsMSkseGUrKyk6eGUmJigwPT09bmUmJihmZT0hMCksSi5z'@;
put 'cGxpY2UobmUsMSkseGUtLSk7cmV0dXJuIGZlJiZKLnVuc2hpZnQoIiIpLCIuIiE9PWRlJiYiLi4iIT09ZGV8fEoucHVzaCgiIiksSi5qb2luKCIvIil9KFMucGF0aG5hbWUsaGUucGF0aG5hbWUpKSwiLyIhPT1TLnBhdGhuYW1lLmNoYXJBdCgwKSYmZWUoUy5wcm90b2NvbCkmJihTLnBhdGhu'@;
put 'YW1lPSIvIitTLnBhdGhuYW1lKSx6KFMucG9ydCxTLnByb3RvY29sKXx8KFMuaG9zdD1TLmhvc3RuYW1lLFMucG9ydD0iIiksUy51c2VybmFtZT1TLnBhc3N3b3JkPSIiLFMuYXV0aCYmKH4oSD1TLmF1dGguaW5kZXhPZigiOiIpKT8oUy51c2VybmFtZT1TLmF1dGguc2xpY2UoMCxIKSxTLnVz'@;
put 'ZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoUy51c2VybmFtZSkpLFMucGFzc3dvcmQ9Uy5hdXRoLnNsaWNlKEgrMSksUy5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KFMucGFzc3dvcmQpKSk6Uy51c2VybmFtZT1lbmNv'@;
put 'ZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KFMuYXV0aCkpLFMuYXV0aD1TLnBhc3N3b3JkP1MudXNlcm5hbWUrIjoiK1MucGFzc3dvcmQ6Uy51c2VybmFtZSksUy5vcmlnaW49ImZpbGU6IiE9PVMucHJvdG9jb2wmJmVlKFMucHJvdG9jb2wpJiZTLmhvc3Q/Uy5wcm90b2NvbCsi'@;
put 'Ly8iK1MuaG9zdDoibnVsbCIsUy5ocmVmPVMudG9TdHJpbmcoKX1vZS5wcm90b3R5cGU9e3NldDpmdW5jdGlvbihzZSxoZSx1ZSl7dmFyIGNlPXRoaXM7c3dpdGNoKHNlKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIGhlJiZoZS5sZW5ndGgmJihoZT0odWV8fEsucGFyc2UpKGhlKSks'@;
put 'Y2Vbc2VdPWhlO2JyZWFrO2Nhc2UicG9ydCI6Y2Vbc2VdPWhlLHooaGUsY2UucHJvdG9jb2wpP2hlJiYoY2UuaG9zdD1jZS5ob3N0bmFtZSsiOiIraGUpOihjZS5ob3N0PWNlLmhvc3RuYW1lLGNlW3NlXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6Y2Vbc2VdPWhlLGNlLnBvcnQmJihoZSs9'@;
put 'IjoiK2NlLnBvcnQpLGNlLmhvc3Q9aGU7YnJlYWs7Y2FzZSJob3N0IjpjZVtzZV09aGUsai50ZXN0KGhlKT8oaGU9aGUuc3BsaXQoIjoiKSxjZS5wb3J0PWhlLnBvcCgpLGNlLmhvc3RuYW1lPWhlLmpvaW4oIjoiKSk6KGNlLmhvc3RuYW1lPWhlLGNlLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJv'@;
put 'dG9jb2wiOmNlLnByb3RvY29sPWhlLnRvTG93ZXJDYXNlKCksY2Uuc2xhc2hlcz0hdWU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihoZSl7dmFyIEc9InBhdGhuYW1lIj09PXNlPyIvIjoiIyI7Y2Vbc2VdPWhlLmNoYXJBdCgwKSE9PUc/RytoZTpoZX1lbHNlIGNlW3NlXT1o'@;
put 'ZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjpjZVtzZV09ZW5jb2RlVVJJQ29tcG9uZW50KGhlKTticmVhaztjYXNlImF1dGgiOnZhciBiPWhlLmluZGV4T2YoIjoiKTt+Yj8oY2UudXNlcm5hbWU9aGUuc2xpY2UoMCxiKSxjZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25l'@;
put 'bnQoZGVjb2RlVVJJQ29tcG9uZW50KGNlLnVzZXJuYW1lKSksY2UucGFzc3dvcmQ9aGUuc2xpY2UoYisxKSxjZS5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGNlLnBhc3N3b3JkKSkpOmNlLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVV'@;
put 'UklDb21wb25lbnQoaGUpKX1mb3IodmFyIEQ9MDtEPFgubGVuZ3RoO0QrKyl7dmFyIEg9WFtEXTtIWzRdJiYoY2VbSFsxXV09Y2VbSFsxXV0udG9Mb3dlckNhc2UoKSl9cmV0dXJuIGNlLmF1dGg9Y2UucGFzc3dvcmQ/Y2UudXNlcm5hbWUrIjoiK2NlLnBhc3N3b3JkOmNlLnVzZXJuYW1lLGNl'@;
put 'Lm9yaWdpbj0iZmlsZToiIT09Y2UucHJvdG9jb2wmJmVlKGNlLnByb3RvY29sKSYmY2UuaG9zdD9jZS5wcm90b2NvbCsiLy8iK2NlLmhvc3Q6Im51bGwiLGNlLmhyZWY9Y2UudG9TdHJpbmcoKSxjZX0sdG9TdHJpbmc6ZnVuY3Rpb24oc2Upe3NlJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2V8fChz'@;
put 'ZT1LLnN0cmluZ2lmeSk7dmFyIGhlLHVlPXRoaXMsY2U9dWUuaG9zdCxHPXVlLnByb3RvY29sO0cmJiI6IiE9PUcuY2hhckF0KEcubGVuZ3RoLTEpJiYoRys9IjoiKTt2YXIgYj1HKyh1ZS5wcm90b2NvbCYmdWUuc2xhc2hlc3x8ZWUodWUucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiB1ZS51'@;
put 'c2VybmFtZT8oYis9dWUudXNlcm5hbWUsdWUucGFzc3dvcmQmJihiKz0iOiIrdWUucGFzc3dvcmQpLGIrPSJAIik6dWUucGFzc3dvcmQ/KGIrPSI6Iit1ZS5wYXNzd29yZCxiKz0iQCIpOiJmaWxlOiIhPT11ZS5wcm90b2NvbCYmZWUodWUucHJvdG9jb2wpJiYhY2UmJiIvIiE9PXVlLnBhdGhu'@;
put 'YW1lJiYoYis9IkAiKSwoIjoiPT09Y2VbY2UubGVuZ3RoLTFdfHxqLnRlc3QodWUuaG9zdG5hbWUpJiYhdWUucG9ydCkmJihjZSs9IjoiKSxiKz1jZSt1ZS5wYXRobmFtZSwoaGU9Im9iamVjdCI9PXR5cGVvZiB1ZS5xdWVyeT9zZSh1ZS5xdWVyeSk6dWUucXVlcnkpJiYoYis9Ij8iIT09aGUu'@;
put 'Y2hhckF0KDApPyI/IitoZTpoZSksdWUuaGFzaCYmKGIrPXVlLmhhc2gpLGJ9fSxvZS5leHRyYWN0UHJvdG9jb2w9dGUsb2UubG9jYXRpb249cSxvZS50cmltTGVmdD1ZLG9lLnFzPUssTS5leHBvcnRzPW9lfSw0OTI3OihNLE8sUik9Pnt2YXIgej1SKDUxMDgpO2Z1bmN0aW9uIEsoSSl7dHJ5'@;
put 'e2lmKCFSLmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciBrPVIuZy5sb2NhbFN0b3JhZ2VbSV07cmV0dXJuIG51bGwhPWsmJiJ0cnVlIj09PVN0cmluZyhrKS50b0xvd2VyQ2FzZSgpfU0uZXhwb3J0cz1mdW5jdGlvbihJLGspe2lmKEsoIm5vRGVwcmVjYXRpb24i'@;
put 'KSlyZXR1cm4gSTt2YXIgRT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighRSl7aWYoSygidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihrKTtLKCJ0cmFjZURlcHJlY2F0aW9uIik/ei50cmFjZShrKTp6Lndhcm4oayksRT0hMH1yZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50'@;
put 'cyl9fX0sMzg0Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIE8mJiJvYmplY3QiPT10eXBlb2YgTyYmImZ1bmN0aW9uIj09dHlwZW9mIE8uY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIE8uZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIE8ucmVhZFVJbnQ4fX0sNTk1NTooTSxPLFIp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjU4NCksSz1SKDg2NjIpLEk9Uig2NDMwKSxrPVIoNTY5Mik7ZnVuY3Rpb24gRShKKXtyZXR1cm4gSi5jYWxsLmJpbmQoSil9dmFyIGo9dHlwZW9mIEJpZ0ludDwidSIsVj10eXBlb2YgU3ltYm9sPCJ1IixCPUUoT2JqZWN0LnByb3RvdHlwZS50b1N0'@;
put 'cmluZyksWT1FKE51bWJlci5wcm90b3R5cGUudmFsdWVPZiksWD1FKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZiksVT1FKEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YpO2lmKGopdmFyIHE9RShCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YpO2lmKFYpdmFyIGVlPUUoU3ltYm9sLnByb3RvdHlw'@;
put 'ZS52YWx1ZU9mKTtmdW5jdGlvbiB0ZShKLG5lKXtpZigib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e3JldHVybiBuZShKKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gb2UoSil7cmV0dXJuIltvYmplY3QgTWFwXSI9PT1CKEopfWZ1bmN0aW9uIHNlKEope3JldHVybiJbb2Jq'@;
put 'ZWN0IFNldF0iPT09QihKKX1mdW5jdGlvbiBoZShKKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1CKEopfWZ1bmN0aW9uIHVlKEope3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PUIoSil9ZnVuY3Rpb24gY2UoSil7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUIoSil9ZnVu'@;
put 'Y3Rpb24gRyhKKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmKGNlLndvcmtpbmc/Y2UoSik6SiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKX1mdW5jdGlvbiBiKEope3JldHVybiJbb2JqZWN0IERhdGFWaWV3XSI9PT1CKEopfWZ1bmN0aW9uIEQoSil7cmV0dXJuIHR5cGVvZiBEYXRh'@;
put 'VmlldzwidSImJihiLndvcmtpbmc/YihKKTpKIGluc3RhbmNlb2YgRGF0YVZpZXcpfU8uaXNBcmd1bWVudHNPYmplY3Q9eixPLmlzR2VuZXJhdG9yRnVuY3Rpb249SyxPLmlzVHlwZWRBcnJheT1rLE8uaXNQcm9taXNlPWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJkog'@;
put 'aW5zdGFuY2VvZiBQcm9taXNlfHxudWxsIT09SiYmIm9iamVjdCI9PXR5cGVvZiBKJiYiZnVuY3Rpb24iPT10eXBlb2YgSi50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgSi5jYXRjaH0sTy5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1'@;
put 'IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhKKTprKEopfHxEKEopfSxPLmlzVWludDhBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iVWludDhBcnJheSI9PT1JKEopfSxPLmlzVWludDhDbGFtcGVkQXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFy'@;
put 'cmF5Ij09PUkoSil9LE8uaXNVaW50MTZBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iVWludDE2QXJyYXkiPT09SShKKX0sTy5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uKEope3JldHVybiJVaW50MzJBcnJheSI9PT1JKEopfSxPLmlzSW50OEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJJbnQ4QXJy'@;
put 'YXkiPT09SShKKX0sTy5pc0ludDE2QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkludDE2QXJyYXkiPT09SShKKX0sTy5pc0ludDMyQXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkludDMyQXJyYXkiPT09SShKKX0sTy5pc0Zsb2F0MzJBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iRmxvYXQzMkFy'@;
put 'cmF5Ij09PUkoSil9LE8uaXNGbG9hdDY0QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkZsb2F0NjRBcnJheSI9PT1JKEopfSxPLmlzQmlnSW50NjRBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iQmlnSW50NjRBcnJheSI9PT1JKEopfSxPLmlzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24oSil7cmV0'@;
put 'dXJuIkJpZ1VpbnQ2NEFycmF5Ij09PUkoSil9LG9lLndvcmtpbmc9dHlwZW9mIE1hcDwidSImJm9lKG5ldyBNYXApLE8uaXNNYXA9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBNYXA8InUiJiYob2Uud29ya2luZz9vZShKKTpKIGluc3RhbmNlb2YgTWFwKX0sc2Uud29ya2luZz10eXBlb2Yg'@;
put 'U2V0PCJ1IiYmc2UobmV3IFNldCksTy5pc1NldD1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIFNldDwidSImJihzZS53b3JraW5nP3NlKEopOkogaW5zdGFuY2VvZiBTZXQpfSxoZS53b3JraW5nPXR5cGVvZiBXZWFrTWFwPCJ1IiYmaGUobmV3IFdlYWtNYXApLE8uaXNXZWFrTWFwPWZ1bmN0'@;
put 'aW9uKEope3JldHVybiB0eXBlb2YgV2Vha01hcDwidSImJihoZS53b3JraW5nP2hlKEopOkogaW5zdGFuY2VvZiBXZWFrTWFwKX0sdWUud29ya2luZz10eXBlb2YgV2Vha1NldDwidSImJnVlKG5ldyBXZWFrU2V0KSxPLmlzV2Vha1NldD1mdW5jdGlvbihKKXtyZXR1cm4gdWUoSil9LGNlLndv'@;
put 'cmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmY2UobmV3IEFycmF5QnVmZmVyKSxPLmlzQXJyYXlCdWZmZXI9RyxiLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3PCJ1IiYmYihuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLE8u'@;
put 'aXNEYXRhVmlldz1EO3ZhciBIPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6dm9pZCAwO2Z1bmN0aW9uIE4oSil7cmV0dXJuIltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdIj09PUIoSil9ZnVuY3Rpb24gZyhKKXtyZXR1cm4gdm9pZCAwIT09SCYmKHZv'@;
put 'aWQgMD09PU4ud29ya2luZyYmKE4ud29ya2luZz1OKG5ldyBIKSksTi53b3JraW5nP04oSik6SiBpbnN0YW5jZW9mIEgpfWZ1bmN0aW9uIEMoSil7cmV0dXJuIHRlKEosWSl9ZnVuY3Rpb24gUyhKKXtyZXR1cm4gdGUoSixYKX1mdW5jdGlvbiB2KEope3JldHVybiB0ZShKLFUpfWZ1bmN0aW9u'@;
put 'IHAoSil7cmV0dXJuIGomJnRlKEoscSl9ZnVuY3Rpb24gdyhKKXtyZXR1cm4gViYmdGUoSixlZSl9Ty5pc1NoYXJlZEFycmF5QnVmZmVyPWcsTy5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24oSil7cmV0dXJuIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT09QihKKX0sTy5pc01hcEl0ZXJhdG9y'@;
put 'PWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09QihKKX0sTy5pc1NldEl0ZXJhdG9yPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IFNldCBJdGVyYXRvcl0iPT09QihKKX0sTy5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBH'@;
put 'ZW5lcmF0b3JdIj09PUIoSil9LE8uaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09QihKKX0sTy5pc051bWJlck9iamVjdD1DLE8uaXNTdHJpbmdPYmplY3Q9UyxPLmlzQm9vbGVhbk9iamVjdD12LE8u'@;
put 'aXNCaWdJbnRPYmplY3Q9cCxPLmlzU3ltYm9sT2JqZWN0PXcsTy5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uKEope3JldHVybiBDKEopfHxTKEopfHx2KEopfHxwKEopfHx3KEopfSxPLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBVaW50OEFycmF5PCJ1IiYm'@;
put 'KEcoSil8fGcoSikpfSxbImlzUHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLEose2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoSisiIGlz'@;
put 'IG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbihKKXtmb3IodmFyIG5lPU9iamVjdC5rZXlzKEopLGRlPXt9LGZlPTA7ZmU8bmUu'@;
put 'bGVuZ3RoO2ZlKyspZGVbbmVbZmVdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEosbmVbZmVdKTtyZXR1cm4gZGV9LGs9LyVbc2RqJV0vZztPLmZvcm1hdD1mdW5jdGlvbihKKXtpZighdWUoSikpe2Zvcih2YXIgbmU9W10sZGU9MDtkZTxhcmd1bWVudHMubGVuZ3RoO2RlKysp'@;
put 'bmUucHVzaChCKGFyZ3VtZW50c1tkZV0pKTtyZXR1cm4gbmUuam9pbigiICIpfWRlPTE7Zm9yKHZhciBmZT1hcmd1bWVudHMseGU9ZmUubGVuZ3RoLExlPVN0cmluZyhKKS5yZXBsYWNlKGssZnVuY3Rpb24oT2Upe2lmKCIlJSI9PT1PZSlyZXR1cm4iJSI7aWYoZGU+PXhlKXJldHVybiBPZTtz'@;
put 'd2l0Y2goT2Upe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoZmVbZGUrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoZmVbZGUrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZmVbZGUrK10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBPZX19'@;
put 'KSxGZT1mZVtkZV07ZGU8eGU7RmU9ZmVbKytkZV0pc2UoRmUpfHwhYihGZSk/TGUrPSIgIitGZTpMZSs9IiAiK0IoRmUpO3JldHVybiBMZX0sTy5kZXByZWNhdGU9ZnVuY3Rpb24oSixuZSl7aWYodm9pZCAwIT09eiYmITA9PT16Lm5vRGVwcmVjYXRpb24pcmV0dXJuIEo7aWYodm9pZCAwPT09'@;
put 'eilyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTy5kZXByZWNhdGUoSixuZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgZGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWRlKXtpZih6LnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG5lKTt6LnRyYWNlRGVwcmVjYXRpb24/'@;
put 'Sy50cmFjZShuZSk6Sy5lcnJvcihuZSksZGU9ITB9cmV0dXJuIEouYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIEU9e30saj0vXiQvO2lmKHouZW52Lk5PREVfREVCVUcpe3ZhciBWPXouZW52Lk5PREVfREVCVUc7Vj1WLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYiKS5y'@;
put 'ZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxhY2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSxqPW5ldyBSZWdFeHAoIl4iK1YrIiQiLCJpIil9ZnVuY3Rpb24gQihKLG5lKXt2YXIgZGU9e3NlZW46W10sc3R5bGl6ZTpYfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKGRlLmRlcHRoPWFy'@;
put 'Z3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKGRlLmNvbG9ycz1hcmd1bWVudHNbM10pLG9lKG5lKT9kZS5zaG93SGlkZGVuPW5lOm5lJiZPLl9leHRlbmQoZGUsbmUpLGNlKGRlLnNob3dIaWRkZW4pJiYoZGUuc2hvd0hpZGRlbj0hMSksY2UoZGUuZGVwdGgpJiYoZGUuZGVwdGg9'@;
put 'MiksY2UoZGUuY29sb3JzKSYmKGRlLmNvbG9ycz0hMSksY2UoZGUuY3VzdG9tSW5zcGVjdCkmJihkZS5jdXN0b21JbnNwZWN0PSEwKSxkZS5jb2xvcnMmJihkZS5zdHlsaXplPVkpLFUoZGUsSixkZS5kZXB0aCl9ZnVuY3Rpb24gWShKLG5lKXt2YXIgZGU9Qi5zdHlsZXNbbmVdO3JldHVybiBk'@;
put 'ZT8iXHgxYlsiK0IuY29sb3JzW2RlXVswXSsibSIrSisiXHgxYlsiK0IuY29sb3JzW2RlXVsxXSsibSI6Sn1mdW5jdGlvbiBYKEosbmUpe3JldHVybiBKfWZ1bmN0aW9uIFUoSixuZSxkZSl7aWYoSi5jdXN0b21JbnNwZWN0JiZuZSYmTihuZS5pbnNwZWN0KSYmbmUuaW5zcGVjdCE9PU8uaW5z'@;
put 'cGVjdCYmKCFuZS5jb25zdHJ1Y3Rvcnx8bmUuY29uc3RydWN0b3IucHJvdG90eXBlIT09bmUpKXt2YXIgZmU9bmUuaW5zcGVjdChkZSxKKTtyZXR1cm4gdWUoZmUpfHwoZmU9VShKLGZlLGRlKSksZmV9dmFyIHhlPWZ1bmN0aW9uKFFlLGx0KXtpZihjZShsdCkpcmV0dXJuIFFlLnN0eWxpemUo'@;
put 'InVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKHVlKGx0KSl7dmFyIFBlPSInIitKU09OLnN0cmluZ2lmeShsdCkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gUWUuc3R5bGl6ZShQZSwic3RyaW5nIil9cmV0'@;
put 'dXJuIGhlKGx0KT9RZS5zdHlsaXplKCIiK2x0LCJudW1iZXIiKTpvZShsdCk/UWUuc3R5bGl6ZSgiIitsdCwiYm9vbGVhbiIpOnNlKGx0KT9RZS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oSixuZSk7aWYoeGUpcmV0dXJuIHhlO3ZhciBsdCxMZT1PYmplY3Qua2V5cyhuZSksRmU9'@;
put 'KGx0PXt9LExlLmZvckVhY2goZnVuY3Rpb24oUGUsYmUpe2x0W1BlXT0hMH0pLGx0KTtpZihKLnNob3dIaWRkZW4mJihMZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuZSkpLEgobmUpJiYoTGUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxMZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0w'@;
put 'KSlyZXR1cm4gcShuZSk7aWYoMD09PUxlLmxlbmd0aCl7aWYoTihuZSkpcmV0dXJuIEouc3R5bGl6ZSgiW0Z1bmN0aW9uIisobmUubmFtZT8iOiAiK25lLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKEcobmUpKXJldHVybiBKLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5j'@;
put 'YWxsKG5lKSwicmVnZXhwIik7aWYoRChuZSkpcmV0dXJuIEouc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwiZGF0ZSIpO2lmKEgobmUpKXJldHVybiBxKG5lKX12YXIgamUsV2U9IiIsS2U9ITEsWWU9WyJ7IiwifSJdO3JldHVybiB0ZShuZSkmJihLZT0hMCxZZT1b'@;
put 'IlsiLCJdIl0pLE4obmUpJiYoV2U9IiBbRnVuY3Rpb24iKyhuZS5uYW1lPyI6ICIrbmUubmFtZToiIikrIl0iKSxHKG5lKSYmKFdlPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmUpKSxEKG5lKSYmKFdlPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG5l'@;
put 'KSksSChuZSkmJihXZT0iICIrcShuZSkpLDAhPT1MZS5sZW5ndGh8fEtlJiYwIT1uZS5sZW5ndGg/ZGU8MD9HKG5lKT9KLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwicmVnZXhwIik6Si5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooSi5zZWVuLnB1'@;
put 'c2gobmUpLGplPUtlP2Z1bmN0aW9uKFFlLGx0LFBlLGJlLEFlKXtmb3IodmFyIFRlPVtdLHFlPTAsWGU9bHQubGVuZ3RoO3FlPFhlOysrcWUpdihsdCxTdHJpbmcocWUpKT9UZS5wdXNoKGVlKFFlLGx0LFBlLGJlLFN0cmluZyhxZSksITApKTpUZS5wdXNoKCIiKTtyZXR1cm4gQWUuZm9yRWFj'@;
put 'aChmdW5jdGlvbihVZSl7VWUubWF0Y2goL15cZCskLyl8fFRlLnB1c2goZWUoUWUsbHQsUGUsYmUsVWUsITApKX0pLFRlfShKLG5lLGRlLEZlLExlKTpMZS5tYXAoZnVuY3Rpb24oUWUpe3JldHVybiBlZShKLG5lLGRlLEZlLFFlLEtlKX0pLEouc2Vlbi5wb3AoKSxmdW5jdGlvbihRZSxsdCxQ'@;
put 'ZSl7cmV0dXJuIFFlLnJlZHVjZShmdW5jdGlvbihBZSxUZSl7cmV0dXJuIFRlLmluZGV4T2YoIlxuIiksQWUrVGUucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApPjYwP1BlWzBdKygiIj09PWx0PyIiOmx0KyJcbiAiKSsiICIrUWUuam9pbigiLFxuICAiKSsiICIr'@;
put 'UGVbMV06UGVbMF0rbHQrIiAiK1FlLmpvaW4oIiwgIikrIiAiK1BlWzFdfShqZSxXZSxZZSkpOlllWzBdK1dlK1llWzFdfWZ1bmN0aW9uIHEoSil7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEopKyJdIn1mdW5jdGlvbiBlZShKLG5lLGRlLGZlLHhlLExlKXt2YXIg'@;
put 'RmUsT2UsamU7aWYoKGplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmUseGUpfHx7dmFsdWU6bmVbeGVdfSkuZ2V0P09lPUouc3R5bGl6ZShqZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOmplLnNldCYmKE9lPUouc3R5bGl6ZSgiW1NldHRl'@;
put 'cl0iLCJzcGVjaWFsIikpLHYoZmUseGUpfHwoRmU9IlsiK3hlKyJdIiksT2V8fChKLnNlZW4uaW5kZXhPZihqZS52YWx1ZSk8MD8oT2U9c2UoZGUpP1UoSixqZS52YWx1ZSxudWxsKTpVKEosamUudmFsdWUsZGUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihPZT1MZT9PZS5zcGxpdCgiXG4iKS5t'@;
put 'YXAoZnVuY3Rpb24oV2Upe3JldHVybiIgICIrV2V9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIrT2Uuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKFdlKXtyZXR1cm4iICAgIitXZX0pLmpvaW4oIlxuIikpOk9lPUouc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksY2UoRmUpKXtp'@;
put 'ZihMZSYmeGUubWF0Y2goL15cZCskLykpcmV0dXJuIE9lOyhGZT1KU09OLnN0cmluZ2lmeSgiIit4ZSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KEZlPUZlLnNsaWNlKDEsLTEpLEZlPUouc3R5bGl6ZShGZSwibmFtZSIpKTooRmU9RmUucmVwbGFjZSgvJy9nLCJc'@;
put 'XCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLEZlPUouc3R5bGl6ZShGZSwic3RyaW5nIikpfXJldHVybiBGZSsiOiAiK09lfWZ1bmN0aW9uIHRlKEope3JldHVybiBBcnJheS5pc0FycmF5KEopfWZ1bmN0aW9uIG9lKEope3JldHVybiJib29sZWFuIj09'@;
put 'dHlwZW9mIEp9ZnVuY3Rpb24gc2UoSil7cmV0dXJuIG51bGw9PT1KfWZ1bmN0aW9uIGhlKEope3JldHVybiJudW1iZXIiPT10eXBlb2YgSn1mdW5jdGlvbiB1ZShKKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEp9ZnVuY3Rpb24gY2UoSil7cmV0dXJuIHZvaWQgMD09PUp9ZnVuY3Rpb24gRyhK'@;
put 'KXtyZXR1cm4gYihKKSYmIltvYmplY3QgUmVnRXhwXSI9PT1nKEopfWZ1bmN0aW9uIGIoSil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBKJiZudWxsIT09Sn1mdW5jdGlvbiBEKEope3JldHVybiBiKEopJiYiW29iamVjdCBEYXRlXSI9PT1nKEopfWZ1bmN0aW9uIEgoSil7cmV0dXJuIGIoSikm'@;
put 'JigiW29iamVjdCBFcnJvcl0iPT09ZyhKKXx8SiBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBOKEope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBKfWZ1bmN0aW9uIGcoSil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChKKX1mdW5jdGlvbiBDKEope3JldHVybiBK'@;
put 'PDEwPyIwIitKLnRvU3RyaW5nKDEwKTpKLnRvU3RyaW5nKDEwKX1PLmRlYnVnbG9nPWZ1bmN0aW9uKEope2lmKEo9Si50b1VwcGVyQ2FzZSgpLCFFW0pdKWlmKGoudGVzdChKKSl7dmFyIG5lPXoucGlkO0VbSl09ZnVuY3Rpb24oKXt2YXIgZGU9Ty5mb3JtYXQuYXBwbHkoTyxhcmd1bWVudHMp'@;
put 'O0suZXJyb3IoIiVzICVkOiAlcyIsSixuZSxkZSl9fWVsc2UgRVtKXT1mdW5jdGlvbigpe307cmV0dXJuIEVbSl19LE8uaW5zcGVjdD1CLEIuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5'@;
put 'Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxCLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIs'@;
put 'dW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LE8udHlwZXM9Uig1OTU1KSxPLmlzQXJyYXk9dGUsTy5pc0Jvb2xlYW49b2UsTy5pc051bGw9c2UsTy5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihKKXtyZXR1'@;
put 'cm4gbnVsbD09Sn0sTy5pc051bWJlcj1oZSxPLmlzU3RyaW5nPXVlLE8uaXNTeW1ib2w9ZnVuY3Rpb24oSil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBKfSxPLmlzVW5kZWZpbmVkPWNlLE8uaXNSZWdFeHA9RyxPLnR5cGVzLmlzUmVnRXhwPUcsTy5pc09iamVjdD1iLE8uaXNEYXRlPUQsTy50'@;
put 'eXBlcy5pc0RhdGU9RCxPLmlzRXJyb3I9SCxPLnR5cGVzLmlzTmF0aXZlRXJyb3I9SCxPLmlzRnVuY3Rpb249TixPLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKEope3JldHVybiBudWxsPT09Snx8ImJvb2xlYW4iPT10eXBlb2YgSnx8Im51bWJlciI9PXR5cGVvZiBKfHwic3RyaW5nIj09dHlwZW9m'@;
put 'IEp8fCJzeW1ib2wiPT10eXBlb2YgSnx8dm9pZCAwPT09Sn0sTy5pc0J1ZmZlcj1SKDM4NCk7dmFyIFM9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiB2KEosbmUpe3JldHVybiBPYmplY3Qu'@;
put 'cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSixuZSl9Ty5sb2c9ZnVuY3Rpb24oKXt2YXIgSixuZTtLLmxvZygiJXMgLSAlcyIsKG5lPVtDKChKPW5ldyBEYXRlKS5nZXRIb3VycygpKSxDKEouZ2V0TWludXRlcygpKSxDKEouZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpLFtKLmdldERh'@;
put 'dGUoKSxTW0ouZ2V0TW9udGgoKV0sbmVdLmpvaW4oIiAiKSksTy5mb3JtYXQuYXBwbHkoTyxhcmd1bWVudHMpKX0sTy5pbmhlcml0cz1SKDU3MTcpLE8uX2V4dGVuZD1mdW5jdGlvbihKLG5lKXtpZighbmV8fCFiKG5lKSlyZXR1cm4gSjtmb3IodmFyIGRlPU9iamVjdC5rZXlzKG5lKSxmZT1k'@;
put 'ZS5sZW5ndGg7ZmUtLTspSltkZVtmZV1dPW5lW2RlW2ZlXV07cmV0dXJuIEp9O3ZhciBwPXR5cGVvZiBTeW1ib2w8InUiP1N5bWJvbCgidXRpbC5wcm9taXNpZnkuY3VzdG9tIik6dm9pZCAwO2Z1bmN0aW9uIHcoSixuZSl7aWYoIUope3ZhciBkZT1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJl'@;
put 'amVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO2RlLnJlYXNvbj1KLEo9ZGV9cmV0dXJuIG5lKEopfU8ucHJvbWlzaWZ5PWZ1bmN0aW9uKEope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBKKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlw'@;
put 'ZSBGdW5jdGlvbicpO2lmKHAmJkpbcF0pe3ZhciBuZTtpZigiZnVuY3Rpb24iIT10eXBlb2YobmU9SltwXSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ1dGlsLnByb21pc2lmeS5jdXN0b20iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO3JldHVybiBPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkobmUscCx7dmFsdWU6bmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuZX1mdW5jdGlvbiBuZSgpe2Zvcih2YXIgZGUsZmUseGU9bmV3IFByb21pc2UoZnVuY3Rpb24oT2UsamUpe2RlPU9lLGZlPWplfSksTGU9W10sRmU9MDtGZTxhcmd1'@;
put 'bWVudHMubGVuZ3RoO0ZlKyspTGUucHVzaChhcmd1bWVudHNbRmVdKTtMZS5wdXNoKGZ1bmN0aW9uKE9lLGplKXtPZT9mZShPZSk6ZGUoamUpfSk7dHJ5e0ouYXBwbHkodGhpcyxMZSl9Y2F0Y2goT2Upe2ZlKE9lKX1yZXR1cm4geGV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZSxP'@;
put 'YmplY3QuZ2V0UHJvdG90eXBlT2YoSikpLHAmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSxwLHt2YWx1ZTpuZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5lLEkoSikpfSxPLnByb21pc2lmeS5jdXN0b209cCxP'@;
put 'LmNhbGxiYWNraWZ5PWZ1bmN0aW9uKEope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBKKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2Z1bmN0aW9uIG5lKCl7Zm9yKHZhciBkZT1bXSxmZT0wO2ZlPGFyZ3VtZW50'@;
put 'cy5sZW5ndGg7ZmUrKylkZS5wdXNoKGFyZ3VtZW50c1tmZV0pO3ZhciB4ZT1kZS5wb3AoKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uIik7dmFyIExlPXRoaXMsRmU9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4geGUuYXBwbHkoTGUsYXJndW1lbnRzKX07Si5hcHBseSh0aGlzLGRlKS50aGVuKGZ1bmN0aW9uKE9lKXt6Lm5leHRUaWNrKEZlLmJpbmQobnVsbCxudWxsLE9lKSl9LGZ1bmN0aW9uKE9lKXt6Lm5leHRUaWNrKHcuYmluZChudWxsLE9lLEZlKSl9KX1yZXR1cm4gT2JqZWN0'@;
put 'LnNldFByb3RvdHlwZU9mKG5lLE9iamVjdC5nZXRQcm90b3R5cGVPZihKKSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobmUsSShKKSksbmV9fSw0ODE6KE0sTyxSKT0+eyFmdW5jdGlvbih6KXsidXNlIHN0cmljdCI7ei5leHBvcnRzLmlzX3VyaT1JLHouZXhwb3J0cy5pc19odHRwX3VyaT1r'@;
put 'LHouZXhwb3J0cy5pc19odHRwc191cmk9RSx6LmV4cG9ydHMuaXNfd2ViX3VyaT1qLHouZXhwb3J0cy5pc1VyaT1JLHouZXhwb3J0cy5pc0h0dHBVcmk9ayx6LmV4cG9ydHMuaXNIdHRwc1VyaT1FLHouZXhwb3J0cy5pc1dlYlVyaT1qO3ZhciBLPWZ1bmN0aW9uKFYpe3JldHVybiBWLm1hdGNo'@;
put 'KC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBJKFYpe2lmKFYmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoVikmJiEv'@;
put 'JVteMC05YS1mXS9pLnRlc3QoVikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChWKSl7dmFyIEIsWSxYLFUscSxlZT0iIix0ZT0iIjtpZihlZT0oQj1LKFYpKVsxXSxZPUJbMl0sWD1CWzNdLFU9Qls0XSxxPUJbNV0sZWUmJmVlLmxlbmd0aCYmWC5sZW5ndGg+PTApe2lmKFkm'@;
put 'JlkubGVuZ3RoKXtpZigwIT09WC5sZW5ndGgmJiEvXlwvLy50ZXN0KFgpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChYKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wtXC5dKiQvLnRlc3QoZWUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIHRlKz1lZSsiOiIsWSYmWS5sZW5ndGgmJih0'@;
put 'ZSs9Ii8vIitZKSx0ZSs9WCxVJiZVLmxlbmd0aCYmKHRlKz0iPyIrVSkscSYmcS5sZW5ndGgmJih0ZSs9IiMiK3EpLHRlfX19ZnVuY3Rpb24gayhWLEIpe2lmKEkoVikpe3ZhciBZLFgsVSxxLGVlPSIiLHRlPSIiLG9lPSIiLHNlPSIiO2lmKGVlPShZPUsoVikpWzFdLHRlPVlbMl0sWD1ZWzNd'@;
put 'LFU9WVs0XSxxPVlbNV0sZWUpe2lmKEIpe2lmKCJodHRwcyIhPWVlLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT1lZS50b0xvd2VyQ2FzZSgpKXJldHVybjtpZih0ZSlyZXR1cm4vOihcZCspJC8udGVzdCh0ZSkmJihvZT10ZS5tYXRjaCgvOihcZCspJC8pWzBdLHRlPXRl'@;
put 'LnJlcGxhY2UoLzpcZCskLywiIikpLHNlKz1lZSsiOiIsc2UrPSIvLyIrdGUsb2UmJihzZSs9b2UpLHNlKz1YLFUmJlUubGVuZ3RoJiYoc2UrPSI/IitVKSxxJiZxLmxlbmd0aCYmKHNlKz0iIyIrcSksc2V9fX1mdW5jdGlvbiBFKFYpe3JldHVybiBrKFYsITApfWZ1bmN0aW9uIGooVil7cmV0'@;
put 'dXJuIGsoVil8fEUoVil9fShNPVIubm1kKE0pKX0sNjQzMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDAyOSksSz1SKDMwODMpLEk9UigxOTI0KSxrPVIoNzI5NiksRT1JKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksaj1SKDY0MTApKCksVj10eXBlb2YgZ2xvYmFsVGhp'@;
put 'cz4idSI/Ui5nOmdsb2JhbFRoaXMsQj1LKCksWT1JKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksWD17fSxVPU9iamVjdC5nZXRQcm90b3R5cGVPZjtqJiZrJiZVJiZ6KEIsZnVuY3Rpb24oZWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBWW2VlXSl7dmFyIHRlPW5ldyBWW2VlXTtpZihTeW1i'@;
put 'b2wudG9TdHJpbmdUYWcgaW4gdGUpe3ZhciBvZT1VKHRlKSxzZT1rKG9lLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIXNlKXt2YXIgaGU9VShvZSk7c2U9ayhoZSxTeW1ib2wudG9TdHJpbmdUYWcpfVhbZWVdPXNlLmdldH19fSk7dmFyIHE9Uig1NjkyKTtNLmV4cG9ydHM9ZnVuY3Rpb24oZWUp'@;
put 'e3JldHVybiEhcShlZSkmJihqJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWU/KHRlPWVlLG9lPSExLHooWCxmdW5jdGlvbihzZSxoZSl7aWYoIW9lKXRyeXt2YXIgdWU9c2UuY2FsbCh0ZSk7dWU9PT1oZSYmKG9lPXVlKX1jYXRjaHt9fSksb2UpOlkoRShlZSksOCwtMSkpO3ZhciB0ZSxvZX19'@;
put 'LDI0Nzk6TT0+e00uZXhwb3J0cz1mdW5jdGlvbiBPKFIseil7aWYoUiYmeilyZXR1cm4gTyhSKSh6KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgUil0aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkIHdyYXBwZXIgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmtleXMoUikuZm9yRWFjaChmdW5jdGlv'@;
put 'bihJKXtLW0ldPVJbSV19KSxLO2Z1bmN0aW9uIEsoKXtmb3IodmFyIEk9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGs9MDtrPEkubGVuZ3RoO2srKylJW2tdPWFyZ3VtZW50c1trXTt2YXIgRT1SLmFwcGx5KHRoaXMsSSksaj1JW0kubGVuZ3RoLTFdO3JldHVybiJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBFJiZFIT09aiYmT2JqZWN0LmtleXMoaikuZm9yRWFjaChmdW5jdGlvbihWKXtFW1ZdPWpbVl19KSxFfX19LDk1MDooKT0+e30sNjYwMTooKT0+e30sOTIxNDooKT0+e30sODYyMzooKT0+e30sNzc0ODooKT0+e30sNTU2ODooKT0+e30sMjUzNTooKT0+e30sMzcxMDooKT0+e30sNTQ0'@;
put 'MzooKT0+e30sNDEyOTooKT0+e30sNjYxOTooKT0+e30sNzEwODooKT0+e30sMjM2MTooKT0+e30sNDYxNjooKT0+e30sNzIxNzooKT0+e30sODM3MzooKT0+e30sMzA4MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVsiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5IiwiRmxv'@;
put 'YXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJJbnQ4QXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5Il0sSz10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Ui5nOmdsb2JhbFRoaXM7'@;
put 'TS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBJPVtdLGs9MDtrPHoubGVuZ3RoO2srKykiZnVuY3Rpb24iPT10eXBlb2YgS1t6W2tdXSYmKElbSS5sZW5ndGhdPXpba10pO3JldHVybiBJfX0sNDk0NjpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgt'@;
put 'ZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVy'@;
put 'IjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5'@;
put 'IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJt'@;
put 'b2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJs'@;
put 'b2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFl'@;
put 'cy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1j'@;
put 'ZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6'@;
put 'eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lw'@;
put 'aGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFF'@;
put 'UyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6'@;
put 'MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6'@;
put 'MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoi'@;
put 'R0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDUyMDc6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlw'@;
put 'dGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQw'@;
put 'MjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYi'@;
put 'LCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7'@;
put 'InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2'@;
put 'NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIx'@;
put 'MzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFz'@;
put 'aCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoi'@;
put 'In0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7'@;
put 'InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6'@;
put 'eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNp'@;
put 'Z24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAy'@;
put 'MDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYw'@;
put 'ODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4x'@;
put 'MzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwzMjA4Ok09PnsidXNlIHN0'@;
put 'cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIsIlNfSUZNVCI6NjE0NDAsIlNfSUZSRUciOjMyNzY4LCJTX0lGRElSIjoxNjM4NCwiU19JRkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZM'@;
put 'TksiOjQwOTYwLCJTX0lGU09DSyI6NDkxNTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6MTMxMDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQUEVORCI6OCwiT19ESVJFQ1RPUlkiOjEwNDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6'@;
put 'MjA5NzE1MiwiT19OT05CTE9DSyI6NCwiU19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwiU19JWFVTUiI6NjQsIlNfSVJXWEciOjU2LCJTX0lSR1JQIjozMiwiU19JV0dSUCI6MTYsIlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIs'@;
put 'IlNfSVhPVEgiOjEsIkUyQklHIjo3LCJFQUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6NDksIkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJTiI6MzUsIkVBTFJFQURZIjozNywiRUJBREYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVD'@;
put 'SElMRCI6MTAsIkVDT05OQUJPUlRFRCI6NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVBRExLIjoxMSwiRURFU1RBRERSUkVRIjozOSwiRURPTSI6MzMsIkVEUVVPVCI6NjksIkVFWElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2'@;
put 'NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjkyLCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJFSU8iOjUsIkVJU0NPTk4iOjU2LCJFSVNESVIiOjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5B'@;
put 'TUVUT09MT05HIjo2MywiRU5FVERPV04iOjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklMRSI6MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRBIjo5NiwiRU5PREVWIjoxOSwiRU5PRU5UIjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVN'@;
put 'IjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJPVE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6OTksIkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1NywiRU5PVERJUiI6MjAsIkVOT1RFTVBUWSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVO'@;
put 'WElPIjo2LCJFT1BOT1RTVVBQIjoxMDIsIkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9UTyI6MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQzLCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdFIjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3'@;
put 'MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VUIjo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYiOjE4LCJTSUdIVVAiOjEsIlNJR0lOVCI6MiwiU0lHUVVJVCI6MywiU0lHSUxMIjo0LCJTSUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJ'@;
put 'R0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lHVVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQRSI6MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJNIjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NPTlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJT'@;
put 'SUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwiU0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJTSUdQUk9GIjoyNywiU0lHV0lOQ0giOjI4LCJTSUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNTTF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZ'@;
put 'X1JFTkVHT1RJQVRJT04iOjI2MjE0NCwiU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwiU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMyNzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2'@;
put 'NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNBIjowLCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUIjo0LCJTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1Nf'@;
put 'SURfQlVHIjoxLCJTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRyI6MiwiU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4'@;
put 'MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNTSU9OIjoxMzEwNzIsIlNTTF9PUF9OT19RVUVSWV9NVFUiOjQwOTYsIlNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9P'@;
put 'UF9OT19TU0x2MiI6MTY3NzcyMTYsIlNTTF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQiOjE2Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFfMSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xf'@;
put 'T1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NMX09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNFIjoxMDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFIjo1MjQyODgsIlNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVV'@;
put 'U0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExTX0Q1X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JPTExCQUNLX0JVRyI6ODM4ODYwOCwiRU5HSU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9N'@;
put 'RVRIT0RfUkFORCI6OCwiRU5HSU5FX01FVEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVOR0lORV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVOR0lORV9NRVRIT0RfRElHRVNUUyI6MTI4LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9N'@;
put 'RVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwiOjY1NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUiOjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9f'@;
put 'Q0hFQ0tfR0VORVJBVE9SIjo0LCJESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwiUlNBX1BLQ1MxX1BBRERJTkciOjEsIlJTQV9TU0xWMjNfUEFERElORyI6MiwiUlNBX05PX1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMx'@;
put 'X1BBRERJTkciOjUsIlJTQV9QS0NTMV9QU1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIjoyLCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0si'@;
put 'OjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9Jyl9LDk3OTk6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3'@;
put 'NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZm'@;
put 'ZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlh'@;
put 'NjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFj'@;
put 'ZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5'@;
put 'ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZm'@;
put 'ZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVm'@;
put 'MTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4'@;
put 'MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5'@;
put 'N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNi'@;
put 'MTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIz'@;
put 'ZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3'@;
put 'ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVh'@;
put 'NmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEw'@;
put 'OGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVm'@;
put 'OTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgz'@;
put 'NjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRj'@;
put 'NTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcx'@;
put 'ZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNj'@;
put 'MTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2Vl'@;
put 'MmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIz'@;
put 'NGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4'@;
put 'NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhj'@;
put 'YTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2Jh'@;
put 'NjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcw'@;
put 'OTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0'@;
put 'MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3'@;
put 'MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZm'@;
put 'YjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3'@;
put 'ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNj'@;
put 'NDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFi'@;
put 'MzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYz'@;
put 'ZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1'@;
put 'NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5'@;
put 'ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcx'@;
put 'OWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYy'@;
put 'MTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4'@;
put 'MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVh'@;
put 'ODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2Ix'@;
put 'YTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0'@;
put 'N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5'@;
put 'NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4'@;
put 'YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSw4NTk3Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPXtpODoi'@;
put 'Ni41LjQifX0sMjU2MjpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4'@;
put 'LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIs'@;
put 'IjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2'@;
put 'Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX0sMzcwNDpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCdbImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibmV0LmFjIiwibWlsLmFjIiwib3JnLmFjIiwiYWQiLCJub20uYWQiLCJhZSIsImNv'@;
put 'LmFlIiwibmV0LmFlIiwib3JnLmFlIiwic2NoLmFlIiwiYWMuYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJhZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21l'@;
put 'LmFlcm8iLCJhZ2VudHMuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJsaW5lLmFlcm8iLCJhaXJwb3J0LmFlcm8iLCJhaXItc3VydmVpbGxhbmNlLmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhaXItdHJhZmZpYy1jb250cm9sLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFtdXNlbWVudC5h'@;
put 'ZXJvIiwiYXNzb2NpYXRpb24uYWVybyIsImF1dGhvci5hZXJvIiwiYmFsbG9vbmluZy5hZXJvIiwiYnJva2VyLmFlcm8iLCJjYWEuYWVybyIsImNhcmdvLmFlcm8iLCJjYXRlcmluZy5hZXJvIiwiY2VydGlmaWNhdGlvbi5hZXJvIiwiY2hhbXBpb25zaGlwLmFlcm8iLCJjaGFydGVyLmFlcm8i'@;
put 'LCJjaXZpbGF2aWF0aW9uLmFlcm8iLCJjbHViLmFlcm8iLCJjb25mZXJlbmNlLmFlcm8iLCJjb25zdWx0YW50LmFlcm8iLCJjb25zdWx0aW5nLmFlcm8iLCJjb250cm9sLmFlcm8iLCJjb3VuY2lsLmFlcm8iLCJjcmV3LmFlcm8iLCJkZXNpZ24uYWVybyIsImRnY2EuYWVybyIsImVkdWNhdG9y'@;
put 'LmFlcm8iLCJlbWVyZ2VuY3kuYWVybyIsImVuZ2luZS5hZXJvIiwiZW5naW5lZXIuYWVybyIsImVudGVydGFpbm1lbnQuYWVybyIsImVxdWlwbWVudC5hZXJvIiwiZXhjaGFuZ2UuYWVybyIsImV4cHJlc3MuYWVybyIsImZlZGVyYXRpb24uYWVybyIsImZsaWdodC5hZXJvIiwiZnVlbC5hZXJv'@;
put 'IiwiZ2xpZGluZy5hZXJvIiwiZ292ZXJubWVudC5hZXJvIiwiZ3JvdW5kaGFuZGxpbmcuYWVybyIsImdyb3VwLmFlcm8iLCJoYW5nZ2xpZGluZy5hZXJvIiwiaG9tZWJ1aWx0LmFlcm8iLCJpbnN1cmFuY2UuYWVybyIsImpvdXJuYWwuYWVybyIsImpvdXJuYWxpc3QuYWVybyIsImxlYXNpbmcu'@;
put 'YWVybyIsImxvZ2lzdGljcy5hZXJvIiwibWFnYXppbmUuYWVybyIsIm1haW50ZW5hbmNlLmFlcm8iLCJtZWRpYS5hZXJvIiwibWljcm9saWdodC5hZXJvIiwibW9kZWxsaW5nLmFlcm8iLCJuYXZpZ2F0aW9uLmFlcm8iLCJwYXJhY2h1dGluZy5hZXJvIiwicGFyYWdsaWRpbmcuYWVybyIsInBh'@;
put 'c3Nlbmdlci1hc3NvY2lhdGlvbi5hZXJvIiwicGlsb3QuYWVybyIsInByZXNzLmFlcm8iLCJwcm9kdWN0aW9uLmFlcm8iLCJyZWNyZWF0aW9uLmFlcm8iLCJyZXBib2R5LmFlcm8iLCJyZXMuYWVybyIsInJlc2VhcmNoLmFlcm8iLCJyb3RvcmNyYWZ0LmFlcm8iLCJzYWZldHkuYWVybyIsInNj'@;
put 'aWVudGlzdC5hZXJvIiwic2VydmljZXMuYWVybyIsInNob3cuYWVybyIsInNreWRpdmluZy5hZXJvIiwic29mdHdhcmUuYWVybyIsInN0dWRlbnQuYWVybyIsInRyYWRlci5hZXJvIiwidHJhZGluZy5hZXJvIiwidHJhaW5lci5hZXJvIiwidW5pb24uYWVybyIsIndvcmtpbmdncm91cC5hZXJv'@;
put 'Iiwid29ya3MuYWVybyIsImFmIiwiZ292LmFmIiwiY29tLmFmIiwib3JnLmFmIiwibmV0LmFmIiwiZWR1LmFmIiwiYWciLCJjb20uYWciLCJvcmcuYWciLCJuZXQuYWciLCJjby5hZyIsIm5vbS5hZyIsImFpIiwib2ZmLmFpIiwiY29tLmFpIiwibmV0LmFpIiwib3JnLmFpIiwiYWwiLCJjb20u'@;
put 'YWwiLCJlZHUuYWwiLCJnb3YuYWwiLCJtaWwuYWwiLCJuZXQuYWwiLCJvcmcuYWwiLCJhbSIsImNvLmFtIiwiY29tLmFtIiwiY29tbXVuZS5hbSIsIm5ldC5hbSIsIm9yZy5hbSIsImFvIiwiZWQuYW8iLCJndi5hbyIsIm9nLmFvIiwiY28uYW8iLCJwYi5hbyIsIml0LmFvIiwiYXEiLCJhciIs'@;
put 'ImJldC5hciIsImNvbS5hciIsImNvb3AuYXIiLCJlZHUuYXIiLCJnb2IuYXIiLCJnb3YuYXIiLCJpbnQuYXIiLCJtaWwuYXIiLCJtdXNpY2EuYXIiLCJtdXR1YWwuYXIiLCJuZXQuYXIiLCJvcmcuYXIiLCJzZW5hc2EuYXIiLCJ0dXIuYXIiLCJhcnBhIiwiZTE2NC5hcnBhIiwiaW4tYWRkci5h'@;
put 'cnBhIiwiaXA2LmFycGEiLCJpcmlzLmFycGEiLCJ1cmkuYXJwYSIsInVybi5hcnBhIiwiYXMiLCJnb3YuYXMiLCJhc2lhIiwiYXQiLCJhYy5hdCIsImNvLmF0IiwiZ3YuYXQiLCJvci5hdCIsInN0aC5hYy5hdCIsImF1IiwiY29tLmF1IiwibmV0LmF1Iiwib3JnLmF1IiwiZWR1LmF1IiwiZ292'@;
put 'LmF1IiwiYXNuLmF1IiwiaWQuYXUiLCJpbmZvLmF1IiwiY29uZi5hdSIsIm96LmF1IiwiYWN0LmF1IiwibnN3LmF1IiwibnQuYXUiLCJxbGQuYXUiLCJzYS5hdSIsInRhcy5hdSIsInZpYy5hdSIsIndhLmF1IiwiYWN0LmVkdS5hdSIsImNhdGhvbGljLmVkdS5hdSIsIm5zdy5lZHUuYXUiLCJu'@;
put 'dC5lZHUuYXUiLCJxbGQuZWR1LmF1Iiwic2EuZWR1LmF1IiwidGFzLmVkdS5hdSIsInZpYy5lZHUuYXUiLCJ3YS5lZHUuYXUiLCJxbGQuZ292LmF1Iiwic2EuZ292LmF1IiwidGFzLmdvdi5hdSIsInZpYy5nb3YuYXUiLCJ3YS5nb3YuYXUiLCJzY2hvb2xzLm5zdy5lZHUuYXUiLCJhdyIsImNv'@;
put 'bS5hdyIsImF4IiwiYXoiLCJjb20uYXoiLCJuZXQuYXoiLCJpbnQuYXoiLCJnb3YuYXoiLCJvcmcuYXoiLCJlZHUuYXoiLCJpbmZvLmF6IiwicHAuYXoiLCJtaWwuYXoiLCJuYW1lLmF6IiwicHJvLmF6IiwiYml6LmF6IiwiYmEiLCJjb20uYmEiLCJlZHUuYmEiLCJnb3YuYmEiLCJtaWwuYmEi'@;
put 'LCJuZXQuYmEiLCJvcmcuYmEiLCJiYiIsImJpei5iYiIsImNvLmJiIiwiY29tLmJiIiwiZWR1LmJiIiwiZ292LmJiIiwiaW5mby5iYiIsIm5ldC5iYiIsIm9yZy5iYiIsInN0b3JlLmJiIiwidHYuYmIiLCIqLmJkIiwiYmUiLCJhYy5iZSIsImJmIiwiZ292LmJmIiwiYmciLCJhLmJnIiwiYi5i'@;
put 'ZyIsImMuYmciLCJkLmJnIiwiZS5iZyIsImYuYmciLCJnLmJnIiwiaC5iZyIsImkuYmciLCJqLmJnIiwiay5iZyIsImwuYmciLCJtLmJnIiwibi5iZyIsIm8uYmciLCJwLmJnIiwicS5iZyIsInIuYmciLCJzLmJnIiwidC5iZyIsInUuYmciLCJ2LmJnIiwidy5iZyIsInguYmciLCJ5LmJnIiwi'@;
put 'ei5iZyIsIjAuYmciLCIxLmJnIiwiMi5iZyIsIjMuYmciLCI0LmJnIiwiNS5iZyIsIjYuYmciLCI3LmJnIiwiOC5iZyIsIjkuYmciLCJiaCIsImNvbS5iaCIsImVkdS5iaCIsIm5ldC5iaCIsIm9yZy5iaCIsImdvdi5iaCIsImJpIiwiY28uYmkiLCJjb20uYmkiLCJlZHUuYmkiLCJvci5iaSIs'@;
put 'Im9yZy5iaSIsImJpeiIsImJqIiwiYXNzby5iaiIsImJhcnJlYXUuYmoiLCJnb3V2LmJqIiwiYm0iLCJjb20uYm0iLCJlZHUuYm0iLCJnb3YuYm0iLCJuZXQuYm0iLCJvcmcuYm0iLCJibiIsImNvbS5ibiIsImVkdS5ibiIsImdvdi5ibiIsIm5ldC5ibiIsIm9yZy5ibiIsImJvIiwiY29tLmJv'@;
put 'IiwiZWR1LmJvIiwiZ29iLmJvIiwiaW50LmJvIiwib3JnLmJvIiwibmV0LmJvIiwibWlsLmJvIiwidHYuYm8iLCJ3ZWIuYm8iLCJhY2FkZW1pYS5ibyIsImFncm8uYm8iLCJhcnRlLmJvIiwiYmxvZy5ibyIsImJvbGl2aWEuYm8iLCJjaWVuY2lhLmJvIiwiY29vcGVyYXRpdmEuYm8iLCJkZW1v'@;
put 'Y3JhY2lhLmJvIiwiZGVwb3J0ZS5ibyIsImVjb2xvZ2lhLmJvIiwiZWNvbm9taWEuYm8iLCJlbXByZXNhLmJvIiwiaW5kaWdlbmEuYm8iLCJpbmR1c3RyaWEuYm8iLCJpbmZvLmJvIiwibWVkaWNpbmEuYm8iLCJtb3ZpbWllbnRvLmJvIiwibXVzaWNhLmJvIiwibmF0dXJhbC5ibyIsIm5vbWJy'@;
put 'ZS5ibyIsIm5vdGljaWFzLmJvIiwicGF0cmlhLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInBsdXJpbmFjaW9uYWwuYm8iLCJwdWVibG8uYm8iLCJyZXZpc3RhLmJvIiwic2FsdWQuYm8iLCJ0ZWNub2xvZ2lhLmJvIiwidGtzYXQuYm8iLCJ0cmFuc3BvcnRlLmJvIiwid2lr'@;
put 'aS5ibyIsImJyIiwiOWd1YWN1LmJyIiwiYWJjLmJyIiwiYWRtLmJyIiwiYWR2LmJyIiwiYWdyLmJyIiwiYWp1LmJyIiwiYW0uYnIiLCJhbmFuaS5iciIsImFwYXJlY2lkYS5iciIsImFwcC5iciIsImFycS5iciIsImFydC5iciIsImF0by5iciIsImIuYnIiLCJiYXJ1ZXJpLmJyIiwiYmVsZW0u'@;
put 'YnIiLCJiaHouYnIiLCJiaWIuYnIiLCJiaW8uYnIiLCJibG9nLmJyIiwiYm1kLmJyIiwiYm9hdmlzdGEuYnIiLCJic2IuYnIiLCJjYW1waW5hZ3JhbmRlLmJyIiwiY2FtcGluYXMuYnIiLCJjYXhpYXMuYnIiLCJjaW0uYnIiLCJjbmcuYnIiLCJjbnQuYnIiLCJjb20uYnIiLCJjb250YWdlbS5i'@;
put 'ciIsImNvb3AuYnIiLCJjb3ouYnIiLCJjcmkuYnIiLCJjdWlhYmEuYnIiLCJjdXJpdGliYS5iciIsImRlZi5iciIsImRlcy5iciIsImRldC5iciIsImRldi5iciIsImVjbi5iciIsImVjby5iciIsImVkdS5iciIsImVtcC5iciIsImVuZi5iciIsImVuZy5iciIsImVzcC5iciIsImV0Yy5iciIs'@;
put 'ImV0aS5iciIsImZhci5iciIsImZlaXJhLmJyIiwiZmxvZy5iciIsImZsb3JpcGEuYnIiLCJmbS5iciIsImZuZC5iciIsImZvcnRhbC5iciIsImZvdC5iciIsImZvei5iciIsImZzdC5iciIsImcxMi5iciIsImdlby5iciIsImdnZi5iciIsImdvaWFuaWEuYnIiLCJnb3YuYnIiLCJhYy5nb3Yu'@;
put 'YnIiLCJhbC5nb3YuYnIiLCJhbS5nb3YuYnIiLCJhcC5nb3YuYnIiLCJiYS5nb3YuYnIiLCJjZS5nb3YuYnIiLCJkZi5nb3YuYnIiLCJlcy5nb3YuYnIiLCJnby5nb3YuYnIiLCJtYS5nb3YuYnIiLCJtZy5nb3YuYnIiLCJtcy5nb3YuYnIiLCJtdC5nb3YuYnIiLCJwYS5nb3YuYnIiLCJwYi5n'@;
put 'b3YuYnIiLCJwZS5nb3YuYnIiLCJwaS5nb3YuYnIiLCJwci5nb3YuYnIiLCJyai5nb3YuYnIiLCJybi5nb3YuYnIiLCJyby5nb3YuYnIiLCJyci5nb3YuYnIiLCJycy5nb3YuYnIiLCJzYy5nb3YuYnIiLCJzZS5nb3YuYnIiLCJzcC5nb3YuYnIiLCJ0by5nb3YuYnIiLCJncnUuYnIiLCJpbWIu'@;
put 'YnIiLCJpbmQuYnIiLCJpbmYuYnIiLCJqYWIuYnIiLCJqYW1wYS5iciIsImpkZi5iciIsImpvaW52aWxsZS5iciIsImpvci5iciIsImp1cy5iciIsImxlZy5iciIsImxlbC5iciIsImxvZy5iciIsImxvbmRyaW5hLmJyIiwibWFjYXBhLmJyIiwibWFjZWlvLmJyIiwibWFuYXVzLmJyIiwibWFy'@;
put 'aW5nYS5iciIsIm1hdC5iciIsIm1lZC5iciIsIm1pbC5iciIsIm1vcmVuYS5iciIsIm1wLmJyIiwibXVzLmJyIiwibmF0YWwuYnIiLCJuZXQuYnIiLCJuaXRlcm9pLmJyIiwiKi5ub20uYnIiLCJub3QuYnIiLCJudHIuYnIiLCJvZG8uYnIiLCJvbmcuYnIiLCJvcmcuYnIiLCJvc2FzY28uYnIi'@;
put 'LCJwYWxtYXMuYnIiLCJwb2EuYnIiLCJwcGcuYnIiLCJwcm8uYnIiLCJwc2MuYnIiLCJwc2kuYnIiLCJwdmguYnIiLCJxc2wuYnIiLCJyYWRpby5iciIsInJlYy5iciIsInJlY2lmZS5iciIsInJlcC5iciIsInJpYmVpcmFvLmJyIiwicmlvLmJyIiwicmlvYnJhbmNvLmJyIiwicmlvcHJldG8u'@;
put 'YnIiLCJzYWx2YWRvci5iciIsInNhbXBhLmJyIiwic2FudGFtYXJpYS5iciIsInNhbnRvYW5kcmUuYnIiLCJzYW9iZXJuYXJkby5iciIsInNhb2dvbmNhLmJyIiwic2VnLmJyIiwic2pjLmJyIiwic2xnLmJyIiwic2x6LmJyIiwic29yb2NhYmEuYnIiLCJzcnYuYnIiLCJ0YXhpLmJyIiwidGMu'@;
put 'YnIiLCJ0ZWMuYnIiLCJ0ZW8uYnIiLCJ0aGUuYnIiLCJ0bXAuYnIiLCJ0cmQuYnIiLCJ0dXIuYnIiLCJ0di5iciIsInVkaS5iciIsInZldC5iciIsInZpeC5iciIsInZsb2cuYnIiLCJ3aWtpLmJyIiwiemxnLmJyIiwiYnMiLCJjb20uYnMiLCJuZXQuYnMiLCJvcmcuYnMiLCJlZHUuYnMiLCJn'@;
put 'b3YuYnMiLCJidCIsImNvbS5idCIsImVkdS5idCIsImdvdi5idCIsIm5ldC5idCIsIm9yZy5idCIsImJ2IiwiYnciLCJjby5idyIsIm9yZy5idyIsImJ5IiwiZ292LmJ5IiwibWlsLmJ5IiwiY29tLmJ5Iiwib2YuYnkiLCJieiIsImNvbS5ieiIsIm5ldC5ieiIsIm9yZy5ieiIsImVkdS5ieiIs'@;
put 'Imdvdi5ieiIsImNhIiwiYWIuY2EiLCJiYy5jYSIsIm1iLmNhIiwibmIuY2EiLCJuZi5jYSIsIm5sLmNhIiwibnMuY2EiLCJudC5jYSIsIm51LmNhIiwib24uY2EiLCJwZS5jYSIsInFjLmNhIiwic2suY2EiLCJ5ay5jYSIsImdjLmNhIiwiY2F0IiwiY2MiLCJjZCIsImdvdi5jZCIsImNmIiwi'@;
put 'Y2ciLCJjaCIsImNpIiwib3JnLmNpIiwib3IuY2kiLCJjb20uY2kiLCJjby5jaSIsImVkdS5jaSIsImVkLmNpIiwiYWMuY2kiLCJuZXQuY2kiLCJnby5jaSIsImFzc28uY2kiLCJhXHhlOXJvcG9ydC5jaSIsImludC5jaSIsInByZXNzZS5jaSIsIm1kLmNpIiwiZ291di5jaSIsIiouY2siLCIh'@;
put 'd3d3LmNrIiwiY2wiLCJjby5jbCIsImdvYi5jbCIsImdvdi5jbCIsIm1pbC5jbCIsImNtIiwiY28uY20iLCJjb20uY20iLCJnb3YuY20iLCJuZXQuY20iLCJjbiIsImFjLmNuIiwiY29tLmNuIiwiZWR1LmNuIiwiZ292LmNuIiwibmV0LmNuIiwib3JnLmNuIiwibWlsLmNuIiwiXHU1MTZjXHU1'@;
put 'M2Y4LmNuIiwiXHU3ZjUxXHU3ZWRjLmNuIiwiXHU3ZGIyXHU3ZDYxLmNuIiwiYWguY24iLCJiai5jbiIsImNxLmNuIiwiZmouY24iLCJnZC5jbiIsImdzLmNuIiwiZ3ouY24iLCJneC5jbiIsImhhLmNuIiwiaGIuY24iLCJoZS5jbiIsImhpLmNuIiwiaGwuY24iLCJobi5jbiIsImpsLmNuIiwi'@;
put 'anMuY24iLCJqeC5jbiIsImxuLmNuIiwibm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwieGouY24iLCJ4ei5jbiIsInluLmNuIiwiemouY24iLCJoay5jbiIsIm1vLmNuIiwidHcuY24iLCJjbyIsImFydHMuY28i'@;
put 'LCJjb20uY28iLCJlZHUuY28iLCJmaXJtLmNvIiwiZ292LmNvIiwiaW5mby5jbyIsImludC5jbyIsIm1pbC5jbyIsIm5ldC5jbyIsIm5vbS5jbyIsIm9yZy5jbyIsInJlYy5jbyIsIndlYi5jbyIsImNvbSIsImNvb3AiLCJjciIsImFjLmNyIiwiY28uY3IiLCJlZC5jciIsImZpLmNyIiwiZ28u'@;
put 'Y3IiLCJvci5jciIsInNhLmNyIiwiY3UiLCJjb20uY3UiLCJlZHUuY3UiLCJvcmcuY3UiLCJuZXQuY3UiLCJnb3YuY3UiLCJpbmYuY3UiLCJjdiIsImNvbS5jdiIsImVkdS5jdiIsImludC5jdiIsIm5vbWUuY3YiLCJvcmcuY3YiLCJjdyIsImNvbS5jdyIsImVkdS5jdyIsIm5ldC5jdyIsIm9y'@;
put 'Zy5jdyIsImN4IiwiZ292LmN4IiwiY3kiLCJhYy5jeSIsImJpei5jeSIsImNvbS5jeSIsImVrbG9nZXMuY3kiLCJnb3YuY3kiLCJsdGQuY3kiLCJtaWwuY3kiLCJuZXQuY3kiLCJvcmcuY3kiLCJwcmVzcy5jeSIsInByby5jeSIsInRtLmN5IiwiY3oiLCJkZSIsImRqIiwiZGsiLCJkbSIsImNv'@;
put 'bS5kbSIsIm5ldC5kbSIsIm9yZy5kbSIsImVkdS5kbSIsImdvdi5kbSIsImRvIiwiYXJ0LmRvIiwiY29tLmRvIiwiZWR1LmRvIiwiZ29iLmRvIiwiZ292LmRvIiwibWlsLmRvIiwibmV0LmRvIiwib3JnLmRvIiwic2xkLmRvIiwid2ViLmRvIiwiZHoiLCJhcnQuZHoiLCJhc3NvLmR6IiwiY29t'@;
put 'LmR6IiwiZWR1LmR6IiwiZ292LmR6Iiwib3JnLmR6IiwibmV0LmR6IiwicG9sLmR6Iiwic29jLmR6IiwidG0uZHoiLCJlYyIsImNvbS5lYyIsImluZm8uZWMiLCJuZXQuZWMiLCJmaW4uZWMiLCJrMTIuZWMiLCJtZWQuZWMiLCJwcm8uZWMiLCJvcmcuZWMiLCJlZHUuZWMiLCJnb3YuZWMiLCJn'@;
put 'b2IuZWMiLCJtaWwuZWMiLCJlZHUiLCJlZSIsImVkdS5lZSIsImdvdi5lZSIsInJpaWsuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJjb20uZWUiLCJwcmkuZWUiLCJhaXAuZWUiLCJvcmcuZWUiLCJmaWUuZWUiLCJlZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsIm1pbC5l'@;
put 'ZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCIqLmVyIiwiZXMiLCJjb20uZXMiLCJub20uZXMiLCJvcmcuZXMiLCJnb2IuZXMiLCJlZHUuZXMiLCJldCIsImNvbS5ldCIsImdvdi5ldCIsIm9yZy5ldCIsImVkdS5ldCIsImJpei5ldCIsIm5hbWUuZXQiLCJpbmZvLmV0'@;
put 'IiwibmV0LmV0IiwiZXUiLCJmaSIsImFsYW5kLmZpIiwiZmoiLCJhYy5maiIsImJpei5maiIsImNvbS5maiIsImdvdi5maiIsImluZm8uZmoiLCJtaWwuZmoiLCJuYW1lLmZqIiwibmV0LmZqIiwib3JnLmZqIiwicHJvLmZqIiwiKi5mayIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9y'@;
put 'Zy5mbSIsImZtIiwiZm8iLCJmciIsImFzc28uZnIiLCJjb20uZnIiLCJnb3V2LmZyIiwibm9tLmZyIiwicHJkLmZyIiwidG0uZnIiLCJhZXJvcG9ydC5mciIsImF2b2NhdC5mciIsImF2b3Vlcy5mciIsImNjaS5mciIsImNoYW1iYWdyaS5mciIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy5mciIs'@;
put 'ImV4cGVydHMtY29tcHRhYmxlcy5mciIsImdlb21ldHJlLWV4cGVydC5mciIsImdyZXRhLmZyIiwiaHVpc3NpZXItanVzdGljZS5mciIsIm1lZGVjaW4uZnIiLCJub3RhaXJlcy5mciIsInBoYXJtYWNpZW4uZnIiLCJwb3J0LmZyIiwidmV0ZXJpbmFpcmUuZnIiLCJnYSIsImdiIiwiZWR1Lmdk'@;
put 'IiwiZ292LmdkIiwiZ2QiLCJnZSIsImNvbS5nZSIsImVkdS5nZSIsImdvdi5nZSIsIm9yZy5nZSIsIm1pbC5nZSIsIm5ldC5nZSIsInB2dC5nZSIsImdmIiwiZ2ciLCJjby5nZyIsIm5ldC5nZyIsIm9yZy5nZyIsImdoIiwiY29tLmdoIiwiZWR1LmdoIiwiZ292LmdoIiwib3JnLmdoIiwibWls'@;
put 'LmdoIiwiZ2kiLCJjb20uZ2kiLCJsdGQuZ2kiLCJnb3YuZ2kiLCJtb2QuZ2kiLCJlZHUuZ2kiLCJvcmcuZ2kiLCJnbCIsImNvLmdsIiwiY29tLmdsIiwiZWR1LmdsIiwibmV0LmdsIiwib3JnLmdsIiwiZ20iLCJnbiIsImFjLmduIiwiY29tLmduIiwiZWR1LmduIiwiZ292LmduIiwib3JnLmdu'@;
put 'IiwibmV0LmduIiwiZ292IiwiZ3AiLCJjb20uZ3AiLCJuZXQuZ3AiLCJtb2JpLmdwIiwiZWR1LmdwIiwib3JnLmdwIiwiYXNzby5ncCIsImdxIiwiZ3IiLCJjb20uZ3IiLCJlZHUuZ3IiLCJuZXQuZ3IiLCJvcmcuZ3IiLCJnb3YuZ3IiLCJncyIsImd0IiwiY29tLmd0IiwiZWR1Lmd0IiwiZ29i'@;
put 'Lmd0IiwiaW5kLmd0IiwibWlsLmd0IiwibmV0Lmd0Iiwib3JnLmd0IiwiZ3UiLCJjb20uZ3UiLCJlZHUuZ3UiLCJnb3YuZ3UiLCJndWFtLmd1IiwiaW5mby5ndSIsIm5ldC5ndSIsIm9yZy5ndSIsIndlYi5ndSIsImd3IiwiZ3kiLCJjby5neSIsImNvbS5neSIsImVkdS5neSIsImdvdi5neSIs'@;
put 'Im5ldC5neSIsIm9yZy5neSIsImhrIiwiY29tLmhrIiwiZWR1LmhrIiwiZ292LmhrIiwiaWR2LmhrIiwibmV0LmhrIiwib3JnLmhrIiwiXHU1MTZjXHU1M2Y4LmhrIiwiXHU2NTU5XHU4MGIyLmhrIiwiXHU2NTRlXHU4MGIyLmhrIiwiXHU2NTNmXHU1ZTljLmhrIiwiXHU1MDBiXHU0ZWJhLmhr'@;
put 'IiwiXHU0ZTJhXHVmZmZkXHVmZmZkLmhrIiwiXHU3Yjg3XHU0ZWJhLmhrIiwiXHU3ZGIyXHU3ZWRjLmhrIiwiXHU3ZjUxXHU3ZWRjLmhrIiwiXHU3ZWM0XHU3ZTU0LmhrIiwiXHU3ZGIyXHU3ZDYxLmhrIiwiXHU3ZjUxXHU3ZDYxLmhrIiwiXHU3ZWM0XHU3ZWM3LmhrIiwiXHU3ZDQ0XHU3ZTU0'@;
put 'LmhrIiwiXHU3ZDQ0XHU3ZWM3LmhrIiwiaG0iLCJobiIsImNvbS5obiIsImVkdS5obiIsIm9yZy5obiIsIm5ldC5obiIsIm1pbC5obiIsImdvYi5obiIsImhyIiwiaXouaHIiLCJmcm9tLmhyIiwibmFtZS5ociIsImNvbS5ociIsImh0IiwiY29tLmh0Iiwic2hvcC5odCIsImZpcm0uaHQiLCJp'@;
put 'bmZvLmh0IiwiYWR1bHQuaHQiLCJuZXQuaHQiLCJwcm8uaHQiLCJvcmcuaHQiLCJtZWQuaHQiLCJhcnQuaHQiLCJjb29wLmh0IiwicG9sLmh0IiwiYXNzby5odCIsImVkdS5odCIsInJlbC5odCIsImdvdXYuaHQiLCJwZXJzby5odCIsImh1IiwiY28uaHUiLCJpbmZvLmh1Iiwib3JnLmh1Iiwi'@;
put 'cHJpdi5odSIsInNwb3J0Lmh1IiwidG0uaHUiLCIyMDAwLmh1IiwiYWdyYXIuaHUiLCJib2x0Lmh1IiwiY2FzaW5vLmh1IiwiY2l0eS5odSIsImVyb3RpY2EuaHUiLCJlcm90aWthLmh1IiwiZmlsbS5odSIsImZvcnVtLmh1IiwiZ2FtZXMuaHUiLCJob3RlbC5odSIsImluZ2F0bGFuLmh1Iiwi'@;
put 'am9nYXN6Lmh1Iiwia29ueXZlbG8uaHUiLCJsYWthcy5odSIsIm1lZGlhLmh1IiwibmV3cy5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzdWxpLmh1Iiwic3pleC5odSIsInRvenNkZS5odSIsInV0YXphcy5odSIsInZpZGVvLmh1IiwiaWQiLCJhYy5pZCIsImJpei5pZCIs'@;
put 'ImNvLmlkIiwiZGVzYS5pZCIsImdvLmlkIiwibWlsLmlkIiwibXkuaWQiLCJuZXQuaWQiLCJvci5pZCIsInBvbnBlcy5pZCIsInNjaC5pZCIsIndlYi5pZCIsImllIiwiZ292LmllIiwiaWwiLCJhYy5pbCIsImNvLmlsIiwiZ292LmlsIiwiaWRmLmlsIiwiazEyLmlsIiwibXVuaS5pbCIsIm5l'@;
put 'dC5pbCIsIm9yZy5pbCIsImltIiwiYWMuaW0iLCJjby5pbSIsImNvbS5pbSIsImx0ZC5jby5pbSIsIm5ldC5pbSIsIm9yZy5pbSIsInBsYy5jby5pbSIsInR0LmltIiwidHYuaW0iLCJpbiIsImNvLmluIiwiZmlybS5pbiIsIm5ldC5pbiIsIm9yZy5pbiIsImdlbi5pbiIsImluZC5pbiIsIm5p'@;
put 'Yy5pbiIsImFjLmluIiwiZWR1LmluIiwicmVzLmluIiwiZ292LmluIiwibWlsLmluIiwiaW5mbyIsImludCIsImV1LmludCIsImlvIiwiY29tLmlvIiwiaXEiLCJnb3YuaXEiLCJlZHUuaXEiLCJtaWwuaXEiLCJjb20uaXEiLCJvcmcuaXEiLCJuZXQuaXEiLCJpciIsImFjLmlyIiwiY28uaXIi'@;
put 'LCJnb3YuaXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwibmV0LmlzIiwiY29tLmlzIiwiZWR1LmlzIiwiZ292LmlzIiwib3JnLmlz'@;
put 'IiwiaW50LmlzIiwiaXQiLCJnb3YuaXQiLCJlZHUuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVt'@;
put 'aWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZy'@;
put 'aXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQi'@;
put 'LCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0Iiwi'@;
put 'cHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJv'@;
put 'bC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby1hLWFkaWdlLml0IiwidHJlbnRpbm8tYWFkaWdlLml0IiwidHJlbnRpbm8tYWx0by1hZGlnZS5p'@;
put 'dCIsInRyZW50aW5vLWFsdG9hZGlnZS5pdCIsInRyZW50aW5vLXMtdGlyb2wuaXQiLCJ0cmVudGluby1zdGlyb2wuaXQiLCJ0cmVudGluby1zdWQtdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluby1zdWR0aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZHRpcm9s'@;
put 'Lml0IiwidHJlbnRpbm8tc3VlZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5v'@;
put 'cy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVk'@;
put 'dGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIu'@;
put 'aXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5p'@;
put 'dCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhl'@;
put 'OWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0'@;
put 'dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5p'@;
put 'dCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFsc2FuLml0'@;
put 'IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25h'@;
put 'Lml0IiwiYm9semFuby1hbHRvYWRpZ2UuaXQiLCJib2x6YW5vLml0IiwiYm96ZW4tc3VkdGlyb2wuaXQiLCJib3plbi1zXHhmY2R0aXJvbC5pdCIsImJvemVuLXN1ZWR0aXJvbC5pdCIsImJvemVuLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0'@;
put 'IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ1bHNhbi5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRp'@;
put 'by5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2Vz'@;
put 'ZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5p'@;
put 'dCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0Iiwi'@;
put 'ZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0Iiwi'@;
put 'Z2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0Iiwi'@;
put 'bGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEu'@;
put 'aXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1u'@;
put 'Lml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS1icmlhbnphLml0IiwibW9uemEtZS1kZWxsYS1icmlhbnphLml0IiwibW9uemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0'@;
put 'IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFk'@;
put 'b3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56'@;
put 'YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIs'@;
put 'InJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUu'@;
put 'aXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic3VlZHRpcm9sLml0Iiwic1x4ZmNkdGly'@;
put 'b2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxl'@;
put 'dHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1'@;
put 'ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2'@;
put 'aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImNvbS5qbyIsIm9yZy5qbyIsIm5l'@;
put 'dC5qbyIsImVkdS5qbyIsInNjaC5qbyIsImdvdi5qbyIsIm1pbC5qbyIsIm5hbWUuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3Jp'@;
put 'LmpwIiwiY2hpYmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIs'@;
put 'ImthZ2F3YS5qcCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0'@;
put 'YS5qcCIsIm9rYXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5q'@;
put 'cCIsIndha2F5YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTYxMWJcdTc3ZTUuanAiLCJcdTYxMWJcdTVhOWIuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTgzMjhcdTU3Y2Uu'@;
put 'anAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTY3'@;
put 'NzFcdTRlYWMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVc'@;
put 'dTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjZjZcdTY4'@;
put 'MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQuanAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2Jc'@;
put 'dTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiKi5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiKi5uYWdveWEuanAi'@;
put 'LCIqLnNhcHBvcm8uanAiLCIqLnNlbmRhaS5qcCIsIioueW9rb2hhbWEuanAiLCIhY2l0eS5rYXdhc2FraS5qcCIsIiFjaXR5LmtpdGFreXVzaHUuanAiLCIhY2l0eS5rb2JlLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiFjaXR5LnNlbmRhaS5qcCIsIiFjaXR5'@;
put 'Lnlva29oYW1hLmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpw'@;
put 'IiwiaGF6dS5haWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5h'@;
put 'aWNoaS5qcCIsImthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5q'@;
put 'cCIsIm5pc2hpby5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpw'@;
put 'Iiwic2hpbnNoaXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hp'@;
put 'LmpwIiwidG95b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5h'@;
put 'a2l0YS5qcCIsImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIs'@;
put 'ImthbWlrb2FuaS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRh'@;
put 'LmpwIiwibW9yaXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRh'@;
put 'LmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9y'@;
put 'aS5qcCIsIm1pc2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJz'@;
put 'aGljaGlub2hlLmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEu'@;
put 'anAiLCJjaG9zZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9t'@;
put 'aXlhLmNoaWJhLmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwi'@;
put 'a2lzYXJhenUuY2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJh'@;
put 'LmpwIiwibXV0c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIs'@;
put 'Im9uanVrdS5jaGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpw'@;
put 'Iiwic29zYS5jaGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGli'@;
put 'YS5qcCIsInlva2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImth'@;
put 'bWlqaW1hLmVoaW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5q'@;
put 'cCIsInNhaWpvLmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3Vp'@;
put 'LmpwIiwiZWloZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWku'@;
put 'anAiLCJzYWJhZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5m'@;
put 'dWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNo'@;
put 'aS5mdWt1b2thLmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJh'@;
put 'LmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9r'@;
put 'YS5qcCIsIm1peWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vv'@;
put 'a2EuanAiLCJva2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1'@;
put 'cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFr'@;
put 'YXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpw'@;
put 'IiwieWFuYWdhd2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hp'@;
put 'bWEuanAiLCJkYXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIs'@;
put 'Imhpcm9uby5mdWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAi'@;
put 'LCJrYW5leWFtYS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5q'@;
put 'cCIsIm1paGFydS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3Rl'@;
put 'Z28uZnVrdXNoaW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1h'@;
put 'LmpwIiwic3VrYWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIs'@;
put 'InlhbWF0c3VyaS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJo'@;
put 'YXNoaW1hLmdpZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1Lmpw'@;
put 'Iiwia2FzYW1hdHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1Lmpw'@;
put 'Iiwib2dha2kuZ2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21p'@;
put 'a2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIs'@;
put 'ImlzZXNha2kuZ3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpw'@;
put 'IiwibWVpd2EuZ3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEu'@;
put 'anAiLCJvdGEuZ3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlh'@;
put 'c2hpLmd1bm1hLmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEu'@;
put 'aGlyb3NoaW1hLmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpw'@;
put 'Iiwia2FpdGEuaGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3No'@;
put 'aW1hLmpwIiwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1h'@;
put 'LmpwIiwidGFrZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFz'@;
put 'aGliZXRzdS5ob2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIs'@;
put 'ImJpcmF0b3JpLmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2th'@;
put 'aWRvLmpwIiwiZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtv'@;
put 'ZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhv'@;
put 'a3V0by5ob2trYWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5o'@;
put 'b2trYWlkby5qcCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUu'@;
put 'aG9ra2FpZG8uanAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUu'@;
put 'aG9ra2FpZG8uanAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2Fp'@;
put 'ZG8uanAiLCJtYXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpw'@;
put 'IiwibmFpZS5ob2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVt'@;
put 'dXJvLmhva2thaWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2tr'@;
put 'YWlkby5qcCIsIm9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9r'@;
put 'a2FpZG8uanAiLCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAi'@;
put 'LCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFt'@;
put 'YWtpLmhva2thaWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJp'@;
put 'dWNoaS5ob2trYWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2tr'@;
put 'YWlkby5qcCIsInRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91'@;
put 'cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2Fp'@;
put 'ZG8uanAiLCJ3YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdv'@;
put 'Lmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFt'@;
put 'aS5oeW9nby5qcCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpw'@;
put 'IiwibmlzaGlub21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9n'@;
put 'by5qcCIsInNoaXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9n'@;
put 'by5qcCIsInRveW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFr'@;
put 'aS5qcCIsImRhaWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIs'@;
put 'ImluYS5pYmFyYWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdh'@;
put 'dXJhLmliYXJha2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5q'@;
put 'cCIsIm9taXRhbWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dh'@;
put 'LmliYXJha2kuanAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVy'@;
put 'YS5pYmFyYWtpLmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6'@;
put 'dS5pc2hpa2F3YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIs'@;
put 'Im5ha2Fub3RvLmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIs'@;
put 'InRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImlj'@;
put 'aGlub2hlLml3YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdh'@;
put 'dGUuanAiLCJraXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdh'@;
put 'dGUuanAiLCJvZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwi'@;
put 'dG9uby5pd2F0ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1l'@;
put 'LmthZ2F3YS5qcCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdh'@;
put 'd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fn'@;
put 'b3NoaW1hLmpwIiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5r'@;
put 'YWdvc2hpbWEuanAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdh'@;
put 'LmthbmFnYXdhLmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwi'@;
put 'aGlyYXRzdWthLmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJt'@;
put 'aXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpw'@;
put 'IiwidHN1a3VpLmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpw'@;
put 'IiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAi'@;
put 'LCJtb3RveWFtYS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29j'@;
put 'aGkuanAiLCJvdG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5q'@;
put 'cCIsInVtYWppLmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlh'@;
put 'bWFrdXNhLmt1bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uu'@;
put 'a3VtYW1vdG8uanAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1'@;
put 'bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAi'@;
put 'LCJrYW1lb2thLmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5q'@;
put 'cCIsIm1pbmFtaS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNh'@;
put 'a3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5t'@;
put 'aWUuanAiLCJpc2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5q'@;
put 'cCIsIm1laXdhLm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFr'@;
put 'aS5taWUuanAiLCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5'@;
put 'YWdpLmpwIiwiaXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2Fucmlr'@;
put 'dS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJz'@;
put 'ZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0'@;
put 'b21lLm1peWFnaS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5q'@;
put 'cCIsImh5dWdhLm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlh'@;
put 'c2hpLm1peWF6YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4u'@;
put 'bWl5YXpha2kuanAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2ku'@;
put 'anAiLCJ0YWthemFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhv'@;
put 'a3UubmFnYW5vLmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlp'@;
put 'eWFtYS5uYWdhbm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5u'@;
put 'YWdhbm8uanAiLCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1h'@;
put 'a2kubmFnYW5vLmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5u'@;
put 'YWdhbm8uanAiLCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJv'@;
put 'b2t1d2EubmFnYW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5q'@;
put 'cCIsInNoaW5hbm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5q'@;
put 'cCIsInRhdHN1bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2Fr'@;
put 'YS5uYWdhbm8uanAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5h'@;
put 'Z2FzYWtpLmpwIiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIs'@;
put 'InNhaWthaS5uYWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4u'@;
put 'bmFnYXNha2kuanAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNo'@;
put 'aWJhLm5hcmEuanAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlh'@;
put 'a2UubmFyYS5qcCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEu'@;
put 'anAiLCJzaGluam8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5h'@;
put 'cmEuanAiLCJ5YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJr'@;
put 'YW1vLm5paWdhdGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5q'@;
put 'cCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3'@;
put 'YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVt'@;
put 'YS5uaWlnYXRhLmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhp'@;
put 'bWVzaGltYS5vaXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAi'@;
put 'LCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpw'@;
put 'Iiwia2FnYW1pbm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEu'@;
put 'anAiLCJuaWltaS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEu'@;
put 'anAiLCJ0YWthaGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAi'@;
put 'LCJndXNoaWthbWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2Eu'@;
put 'anAiLCJpemVuYS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFp'@;
put 'dG8ub2tpbmF3YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWku'@;
put 'b2tpbmF3YS5qcCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9u'@;
put 'YWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5v'@;
put 'Lm9zYWthLmpwIiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1p'@;
put 'eW9zaGkub3Nha2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21h'@;
put 'Lm9zYWthLmpwIiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5q'@;
put 'cCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5v'@;
put 'c2FrYS5qcCIsInNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlz'@;
put 'aGkub3Nha2EuanAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAi'@;
put 'LCJhcml0YS5zYWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hp'@;
put 'bWEuc2FnYS5qcCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2Fn'@;
put 'YS5qcCIsInNhZ2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1h'@;
put 'LmpwIiwiZnVqaW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEu'@;
put 'anAiLCJoaWRha2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1p'@;
put 'aXp1bWkuc2FpdGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5q'@;
put 'cCIsImtpdGFtb3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0'@;
put 'YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNh'@;
put 'aXRhbWEuanAiLCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1h'@;
put 'LmpwIiwic2F0dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0'@;
put 'b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwi'@;
put 'eW9zaGlkYS5zYWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdh'@;
put 'LmpwIiwia29zZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNo'@;
put 'aW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJh'@;
put 'a2FnaS5zaGltYW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5v'@;
put 'a2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIs'@;
put 'InNoaW1hbmUuc2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRh'@;
put 'bWkuc2hpenVva2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9r'@;
put 'YS5qcCIsImhhbWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFt'@;
put 'aS5zaGl6dW9rYS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNo'@;
put 'aXp1b2thLmpwIiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5q'@;
put 'cCIsInNoaW1vZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2ku'@;
put 'anAiLCJpY2hpa2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9j'@;
put 'aGlnaS5qcCIsIm1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdp'@;
put 'LmpwIiwib2h0YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2No'@;
put 'aWdpLmpwIiwidHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3Vz'@;
put 'aGltYS5qcCIsImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1h'@;
put 'LmpwIiwibmFrYWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAi'@;
put 'LCJha2lydW5vLnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8u'@;
put 'anAiLCJmdWNodS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9r'@;
put 'eW8uanAiLCJoaW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRv'@;
put 'a3lvLmpwIiwia29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWlu'@;
put 'YXRvLnRva3lvLmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50'@;
put 'b2t5by5qcCIsIm9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEu'@;
put 'dG9reW8uanAiLCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3Rv'@;
put 'dXJhLnRvdHRvcmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9u'@;
put 'YWdvLnRvdHRvcmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5q'@;
put 'cCIsImthbWlpY2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0'@;
put 'YWthb2thLnRveWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1h'@;
put 'LmpwIiwiYXJpZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53'@;
put 'YWtheWFtYS5qcCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIs'@;
put 'ImtvemFnYXdhLndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hp'@;
put 'cmFoYW1hLndha2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAi'@;
put 'LCJoaWdhc2hpbmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1p'@;
put 'a2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEu'@;
put 'anAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlh'@;
put 'bWFnYXRhLmpwIiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIs'@;
put 'InlvbmV6YXdhLnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNo'@;
put 'aS5qcCIsIm1pdG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAi'@;
put 'LCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtv'@;
put 'LnlhbWFuYXNoaS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55'@;
put 'YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55'@;
put 'YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1h'@;
put 'bmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsIm9yZy5rZyIsIm5ldC5rZyIs'@;
put 'ImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIsIm1pbC5rZyIsIioua2giLCJraSIsImVkdS5raSIsImJpei5raSIsIm5ldC5raSIsIm9yZy5raSIsImdvdi5raSIsImluZm8ua2kiLCJjb20ua2kiLCJrbSIsIm9yZy5rbSIsIm5vbS5rbSIsImdvdi5rbSIsInByZC5rbSIsInRtLmttIiwiZWR1'@;
put 'LmttIiwibWlsLmttIiwiYXNzLmttIiwiY29tLmttIiwiY29vcC5rbSIsImFzc28ua20iLCJwcmVzc2Uua20iLCJtZWRlY2luLmttIiwibm90YWlyZXMua20iLCJwaGFybWFjaWVucy5rbSIsInZldGVyaW5haXJlLmttIiwiZ291di5rbSIsImtuIiwibmV0LmtuIiwib3JnLmtuIiwiZWR1Lmtu'@;
put 'IiwiZ292LmtuIiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwi'@;
put 'cmUua3IiLCJzYy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVq'@;
put 'dS5rciIsImplb25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJr'@;
put 'eiIsIm9yZy5reiIsImVkdS5reiIsIm5ldC5reiIsImdvdi5reiIsIm1pbC5reiIsImNvbS5reiIsImxhIiwiaW50LmxhIiwibmV0LmxhIiwiaW5mby5sYSIsImVkdS5sYSIsImdvdi5sYSIsInBlci5sYSIsImNvbS5sYSIsIm9yZy5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292Lmxi'@;
put 'IiwibmV0LmxiIiwib3JnLmxiIiwibGMiLCJjb20ubGMiLCJuZXQubGMiLCJjby5sYyIsIm9yZy5sYyIsImVkdS5sYyIsImdvdi5sYyIsImxpIiwibGsiLCJnb3YubGsiLCJzY2gubGsiLCJuZXQubGsiLCJpbnQubGsiLCJjb20ubGsiLCJvcmcubGsiLCJlZHUubGsiLCJuZ28ubGsiLCJzb2Mu'@;
put 'bGsiLCJ3ZWIubGsiLCJsdGQubGsiLCJhc3NuLmxrIiwiZ3JwLmxrIiwiaG90ZWwubGsiLCJhYy5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwib3JnLmxyIiwibmV0LmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5s'@;
put 'cyIsIm5ldC5scyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiY29tLmx2IiwiZWR1Lmx2IiwiZ292Lmx2Iiwib3JnLmx2IiwibWlsLmx2IiwiaWQubHYiLCJuZXQubHYiLCJhc24ubHYiLCJjb25mLmx2IiwibHkiLCJjb20ubHkiLCJuZXQubHkiLCJnb3YubHki'@;
put 'LCJwbGMubHkiLCJlZHUubHkiLCJzY2gubHkiLCJtZWQubHkiLCJvcmcubHkiLCJpZC5seSIsIm1hIiwiY28ubWEiLCJuZXQubWEiLCJnb3YubWEiLCJvcmcubWEiLCJhYy5tYSIsInByZXNzLm1hIiwibWMiLCJ0bS5tYyIsImFzc28ubWMiLCJtZCIsIm1lIiwiY28ubWUiLCJuZXQubWUiLCJv'@;
put 'cmcubWUiLCJlZHUubWUiLCJhYy5tZSIsImdvdi5tZSIsIml0cy5tZSIsInByaXYubWUiLCJtZyIsIm9yZy5tZyIsIm5vbS5tZyIsImdvdi5tZyIsInByZC5tZyIsInRtLm1nIiwiZWR1Lm1nIiwibWlsLm1nIiwiY29tLm1nIiwiY28ubWciLCJtaCIsIm1pbCIsIm1rIiwiY29tLm1rIiwib3Jn'@;
put 'Lm1rIiwibmV0Lm1rIiwiZWR1Lm1rIiwiZ292Lm1rIiwiaW5mLm1rIiwibmFtZS5tayIsIm1sIiwiY29tLm1sIiwiZWR1Lm1sIiwiZ291di5tbCIsImdvdi5tbCIsIm5ldC5tbCIsIm9yZy5tbCIsInByZXNzZS5tbCIsIioubW0iLCJtbiIsImdvdi5tbiIsImVkdS5tbiIsIm9yZy5tbiIsIm1v'@;
put 'IiwiY29tLm1vIiwibmV0Lm1vIiwib3JnLm1vIiwiZWR1Lm1vIiwiZ292Lm1vIiwibW9iaSIsIm1wIiwibXEiLCJtciIsImdvdi5tciIsIm1zIiwiY29tLm1zIiwiZWR1Lm1zIiwiZ292Lm1zIiwibmV0Lm1zIiwib3JnLm1zIiwibXQiLCJjb20ubXQiLCJlZHUubXQiLCJuZXQubXQiLCJvcmcu'@;
put 'bXQiLCJtdSIsImNvbS5tdSIsIm5ldC5tdSIsIm9yZy5tdSIsImdvdi5tdSIsImFjLm11IiwiY28ubXUiLCJvci5tdSIsIm11c2V1bSIsImFjYWRlbXkubXVzZXVtIiwiYWdyaWN1bHR1cmUubXVzZXVtIiwiYWlyLm11c2V1bSIsImFpcmd1YXJkLm11c2V1bSIsImFsYWJhbWEubXVzZXVtIiwi'@;
put 'YWxhc2thLm11c2V1bSIsImFtYmVyLm11c2V1bSIsImFtYnVsYW5jZS5tdXNldW0iLCJhbWVyaWNhbi5tdXNldW0iLCJhbWVyaWNhbmEubXVzZXVtIiwiYW1lcmljYW5hbnRpcXVlcy5tdXNldW0iLCJhbWVyaWNhbmFydC5tdXNldW0iLCJhbXN0ZXJkYW0ubXVzZXVtIiwiYW5kLm11c2V1bSIs'@;
put 'ImFubmVmcmFuay5tdXNldW0iLCJhbnRocm8ubXVzZXVtIiwiYW50aHJvcG9sb2d5Lm11c2V1bSIsImFudGlxdWVzLm11c2V1bSIsImFxdWFyaXVtLm11c2V1bSIsImFyYm9yZXR1bS5tdXNldW0iLCJhcmNoYWVvbG9naWNhbC5tdXNldW0iLCJhcmNoYWVvbG9neS5tdXNldW0iLCJhcmNoaXRl'@;
put 'Y3R1cmUubXVzZXVtIiwiYXJ0Lm11c2V1bSIsImFydGFuZGRlc2lnbi5tdXNldW0iLCJhcnRjZW50ZXIubXVzZXVtIiwiYXJ0ZGVjby5tdXNldW0iLCJhcnRlZHVjYXRpb24ubXVzZXVtIiwiYXJ0Z2FsbGVyeS5tdXNldW0iLCJhcnRzLm11c2V1bSIsImFydHNhbmRjcmFmdHMubXVzZXVtIiwi'@;
put 'YXNtYXRhcnQubXVzZXVtIiwiYXNzYXNzaW5hdGlvbi5tdXNldW0iLCJhc3Npc2kubXVzZXVtIiwiYXNzb2NpYXRpb24ubXVzZXVtIiwiYXN0cm9ub215Lm11c2V1bSIsImF0bGFudGEubXVzZXVtIiwiYXVzdGluLm11c2V1bSIsImF1c3RyYWxpYS5tdXNldW0iLCJhdXRvbW90aXZlLm11c2V1'@;
put 'bSIsImF2aWF0aW9uLm11c2V1bSIsImF4aXMubXVzZXVtIiwiYmFkYWpvei5tdXNldW0iLCJiYWdoZGFkLm11c2V1bSIsImJhaG4ubXVzZXVtIiwiYmFsZS5tdXNldW0iLCJiYWx0aW1vcmUubXVzZXVtIiwiYmFyY2Vsb25hLm11c2V1bSIsImJhc2ViYWxsLm11c2V1bSIsImJhc2VsLm11c2V1'@;
put 'bSIsImJhdGhzLm11c2V1bSIsImJhdWVybi5tdXNldW0iLCJiZWF1eGFydHMubXVzZXVtIiwiYmVlbGRlbmdlbHVpZC5tdXNldW0iLCJiZWxsZXZ1ZS5tdXNldW0iLCJiZXJnYmF1Lm11c2V1bSIsImJlcmtlbGV5Lm11c2V1bSIsImJlcmxpbi5tdXNldW0iLCJiZXJuLm11c2V1bSIsImJpYmxl'@;
put 'Lm11c2V1bSIsImJpbGJhby5tdXNldW0iLCJiaWxsLm11c2V1bSIsImJpcmRhcnQubXVzZXVtIiwiYmlydGhwbGFjZS5tdXNldW0iLCJib25uLm11c2V1bSIsImJvc3Rvbi5tdXNldW0iLCJib3RhbmljYWwubXVzZXVtIiwiYm90YW5pY2FsZ2FyZGVuLm11c2V1bSIsImJvdGFuaWNnYXJkZW4u'@;
put 'bXVzZXVtIiwiYm90YW55Lm11c2V1bSIsImJyYW5keXdpbmV2YWxsZXkubXVzZXVtIiwiYnJhc2lsLm11c2V1bSIsImJyaXN0b2wubXVzZXVtIiwiYnJpdGlzaC5tdXNldW0iLCJicml0aXNoY29sdW1iaWEubXVzZXVtIiwiYnJvYWRjYXN0Lm11c2V1bSIsImJydW5lbC5tdXNldW0iLCJicnVz'@;
put 'c2VsLm11c2V1bSIsImJydXNzZWxzLm11c2V1bSIsImJydXhlbGxlcy5tdXNldW0iLCJidWlsZGluZy5tdXNldW0iLCJidXJnaG9mLm11c2V1bSIsImJ1cy5tdXNldW0iLCJidXNoZXkubXVzZXVtIiwiY2FkYXF1ZXMubXVzZXVtIiwiY2FsaWZvcm5pYS5tdXNldW0iLCJjYW1icmlkZ2UubXVz'@;
put 'ZXVtIiwiY2FuLm11c2V1bSIsImNhbmFkYS5tdXNldW0iLCJjYXBlYnJldG9uLm11c2V1bSIsImNhcnJpZXIubXVzZXVtIiwiY2FydG9vbmFydC5tdXNldW0iLCJjYXNhZGVsYW1vbmVkYS5tdXNldW0iLCJjYXN0bGUubXVzZXVtIiwiY2FzdHJlcy5tdXNldW0iLCJjZWx0aWMubXVzZXVtIiwi'@;
put 'Y2VudGVyLm11c2V1bSIsImNoYXR0YW5vb2dhLm11c2V1bSIsImNoZWx0ZW5oYW0ubXVzZXVtIiwiY2hlc2FwZWFrZWJheS5tdXNldW0iLCJjaGljYWdvLm11c2V1bSIsImNoaWxkcmVuLm11c2V1bSIsImNoaWxkcmVucy5tdXNldW0iLCJjaGlsZHJlbnNnYXJkZW4ubXVzZXVtIiwiY2hpcm9w'@;
put 'cmFjdGljLm11c2V1bSIsImNob2NvbGF0ZS5tdXNldW0iLCJjaHJpc3RpYW5zYnVyZy5tdXNldW0iLCJjaW5jaW5uYXRpLm11c2V1bSIsImNpbmVtYS5tdXNldW0iLCJjaXJjdXMubXVzZXVtIiwiY2l2aWxpc2F0aW9uLm11c2V1bSIsImNpdmlsaXphdGlvbi5tdXNldW0iLCJjaXZpbHdhci5t'@;
put 'dXNldW0iLCJjbGludG9uLm11c2V1bSIsImNsb2NrLm11c2V1bSIsImNvYWwubXVzZXVtIiwiY29hc3RhbGRlZmVuY2UubXVzZXVtIiwiY29keS5tdXNldW0iLCJjb2xkd2FyLm11c2V1bSIsImNvbGxlY3Rpb24ubXVzZXVtIiwiY29sb25pYWx3aWxsaWFtc2J1cmcubXVzZXVtIiwiY29sb3Jh'@;
put 'ZG9wbGF0ZWF1Lm11c2V1bSIsImNvbHVtYmlhLm11c2V1bSIsImNvbHVtYnVzLm11c2V1bSIsImNvbW11bmljYXRpb24ubXVzZXVtIiwiY29tbXVuaWNhdGlvbnMubXVzZXVtIiwiY29tbXVuaXR5Lm11c2V1bSIsImNvbXB1dGVyLm11c2V1bSIsImNvbXB1dGVyaGlzdG9yeS5tdXNldW0iLCJj'@;
put 'b211bmljYVx4ZTdceGY1ZXMubXVzZXVtIiwiY29udGVtcG9yYXJ5Lm11c2V1bSIsImNvbnRlbXBvcmFyeWFydC5tdXNldW0iLCJjb252ZW50Lm11c2V1bSIsImNvcGVuaGFnZW4ubXVzZXVtIiwiY29ycG9yYXRpb24ubXVzZXVtIiwiY29ycmVpb3MtZS10ZWxlY29tdW5pY2FceGU3XHhmNWVz'@;
put 'Lm11c2V1bSIsImNvcnZldHRlLm11c2V1bSIsImNvc3R1bWUubXVzZXVtIiwiY291bnRyeWVzdGF0ZS5tdXNldW0iLCJjb3VudHkubXVzZXVtIiwiY3JhZnRzLm11c2V1bSIsImNyYW5icm9vay5tdXNldW0iLCJjcmVhdGlvbi5tdXNldW0iLCJjdWx0dXJhbC5tdXNldW0iLCJjdWx0dXJhbGNl'@;
put 'bnRlci5tdXNldW0iLCJjdWx0dXJlLm11c2V1bSIsImN5YmVyLm11c2V1bSIsImN5bXJ1Lm11c2V1bSIsImRhbGkubXVzZXVtIiwiZGFsbGFzLm11c2V1bSIsImRhdGFiYXNlLm11c2V1bSIsImRkci5tdXNldW0iLCJkZWNvcmF0aXZlYXJ0cy5tdXNldW0iLCJkZWxhd2FyZS5tdXNldW0iLCJk'@;
put 'ZWxtZW5ob3JzdC5tdXNldW0iLCJkZW5tYXJrLm11c2V1bSIsImRlcG90Lm11c2V1bSIsImRlc2lnbi5tdXNldW0iLCJkZXRyb2l0Lm11c2V1bSIsImRpbm9zYXVyLm11c2V1bSIsImRpc2NvdmVyeS5tdXNldW0iLCJkb2xscy5tdXNldW0iLCJkb25vc3RpYS5tdXNldW0iLCJkdXJoYW0ubXVz'@;
put 'ZXVtIiwiZWFzdGFmcmljYS5tdXNldW0iLCJlYXN0Y29hc3QubXVzZXVtIiwiZWR1Y2F0aW9uLm11c2V1bSIsImVkdWNhdGlvbmFsLm11c2V1bSIsImVneXB0aWFuLm11c2V1bSIsImVpc2VuYmFobi5tdXNldW0iLCJlbGJ1cmcubXVzZXVtIiwiZWx2ZW5kcmVsbC5tdXNldW0iLCJlbWJyb2lk'@;
put 'ZXJ5Lm11c2V1bSIsImVuY3ljbG9wZWRpYy5tdXNldW0iLCJlbmdsYW5kLm11c2V1bSIsImVudG9tb2xvZ3kubXVzZXVtIiwiZW52aXJvbm1lbnQubXVzZXVtIiwiZW52aXJvbm1lbnRhbGNvbnNlcnZhdGlvbi5tdXNldW0iLCJlcGlsZXBzeS5tdXNldW0iLCJlc3NleC5tdXNldW0iLCJlc3Rh'@;
put 'dGUubXVzZXVtIiwiZXRobm9sb2d5Lm11c2V1bSIsImV4ZXRlci5tdXNldW0iLCJleGhpYml0aW9uLm11c2V1bSIsImZhbWlseS5tdXNldW0iLCJmYXJtLm11c2V1bSIsImZhcm1lcXVpcG1lbnQubXVzZXVtIiwiZmFybWVycy5tdXNldW0iLCJmYXJtc3RlYWQubXVzZXVtIiwiZmllbGQubXVz'@;
put 'ZXVtIiwiZmlndWVyZXMubXVzZXVtIiwiZmlsYXRlbGlhLm11c2V1bSIsImZpbG0ubXVzZXVtIiwiZmluZWFydC5tdXNldW0iLCJmaW5lYXJ0cy5tdXNldW0iLCJmaW5sYW5kLm11c2V1bSIsImZsYW5kZXJzLm11c2V1bSIsImZsb3JpZGEubXVzZXVtIiwiZm9yY2UubXVzZXVtIiwiZm9ydG1p'@;
put 'c3NvdWxhLm11c2V1bSIsImZvcnR3b3J0aC5tdXNldW0iLCJmb3VuZGF0aW9uLm11c2V1bSIsImZyYW5jYWlzZS5tdXNldW0iLCJmcmFua2Z1cnQubXVzZXVtIiwiZnJhbnppc2thbmVyLm11c2V1bSIsImZyZWVtYXNvbnJ5Lm11c2V1bSIsImZyZWlidXJnLm11c2V1bSIsImZyaWJvdXJnLm11'@;
put 'c2V1bSIsImZyb2cubXVzZXVtIiwiZnVuZGFjaW8ubXVzZXVtIiwiZnVybml0dXJlLm11c2V1bSIsImdhbGxlcnkubXVzZXVtIiwiZ2FyZGVuLm11c2V1bSIsImdhdGV3YXkubXVzZXVtIiwiZ2VlbHZpbmNrLm11c2V1bSIsImdlbW9sb2dpY2FsLm11c2V1bSIsImdlb2xvZ3kubXVzZXVtIiwi'@;
put 'Z2VvcmdpYS5tdXNldW0iLCJnaWVzc2VuLm11c2V1bSIsImdsYXMubXVzZXVtIiwiZ2xhc3MubXVzZXVtIiwiZ29yZ2UubXVzZXVtIiwiZ3JhbmRyYXBpZHMubXVzZXVtIiwiZ3Jhei5tdXNldW0iLCJndWVybnNleS5tdXNldW0iLCJoYWxsb2ZmYW1lLm11c2V1bSIsImhhbWJ1cmcubXVzZXVt'@;
put 'IiwiaGFuZHNvbi5tdXNldW0iLCJoYXJ2ZXN0Y2VsZWJyYXRpb24ubXVzZXVtIiwiaGF3YWlpLm11c2V1bSIsImhlYWx0aC5tdXNldW0iLCJoZWltYXR1bmR1aHJlbi5tdXNldW0iLCJoZWxsYXMubXVzZXVtIiwiaGVsc2lua2kubXVzZXVtIiwiaGVtYnlnZHNmb3JidW5kLm11c2V1bSIsImhl'@;
put 'cml0YWdlLm11c2V1bSIsImhpc3RvaXJlLm11c2V1bSIsImhpc3RvcmljYWwubXVzZXVtIiwiaGlzdG9yaWNhbHNvY2lldHkubXVzZXVtIiwiaGlzdG9yaWNob3VzZXMubXVzZXVtIiwiaGlzdG9yaXNjaC5tdXNldW0iLCJoaXN0b3Jpc2NoZXMubXVzZXVtIiwiaGlzdG9yeS5tdXNldW0iLCJo'@;
put 'aXN0b3J5b2ZzY2llbmNlLm11c2V1bSIsImhvcm9sb2d5Lm11c2V1bSIsImhvdXNlLm11c2V1bSIsImh1bWFuaXRpZXMubXVzZXVtIiwiaWxsdXN0cmF0aW9uLm11c2V1bSIsImltYWdlYW5kc291bmQubXVzZXVtIiwiaW5kaWFuLm11c2V1bSIsImluZGlhbmEubXVzZXVtIiwiaW5kaWFuYXBv'@;
put 'bGlzLm11c2V1bSIsImluZGlhbm1hcmtldC5tdXNldW0iLCJpbnRlbGxpZ2VuY2UubXVzZXVtIiwiaW50ZXJhY3RpdmUubXVzZXVtIiwiaXJhcS5tdXNldW0iLCJpcm9uLm11c2V1bSIsImlzbGVvZm1hbi5tdXNldW0iLCJqYW1pc29uLm11c2V1bSIsImplZmZlcnNvbi5tdXNldW0iLCJqZXJ1'@;
put 'c2FsZW0ubXVzZXVtIiwiamV3ZWxyeS5tdXNldW0iLCJqZXdpc2gubXVzZXVtIiwiamV3aXNoYXJ0Lm11c2V1bSIsImpmay5tdXNldW0iLCJqb3VybmFsaXNtLm11c2V1bSIsImp1ZGFpY2EubXVzZXVtIiwianVkeWdhcmxhbmQubXVzZXVtIiwianVlZGlzY2hlcy5tdXNldW0iLCJqdWlmLm11'@;
put 'c2V1bSIsImthcmF0ZS5tdXNldW0iLCJrYXJpa2F0dXIubXVzZXVtIiwia2lkcy5tdXNldW0iLCJrb2ViZW5oYXZuLm11c2V1bSIsImtvZWxuLm11c2V1bSIsImt1bnN0Lm11c2V1bSIsImt1bnN0c2FtbWx1bmcubXVzZXVtIiwia3Vuc3R1bmRkZXNpZ24ubXVzZXVtIiwibGFib3IubXVzZXVt'@;
put 'IiwibGFib3VyLm11c2V1bSIsImxham9sbGEubXVzZXVtIiwibGFuY2FzaGlyZS5tdXNldW0iLCJsYW5kZXMubXVzZXVtIiwibGFucy5tdXNldW0iLCJsXHhlNG5zLm11c2V1bSIsImxhcnNzb24ubXVzZXVtIiwibGV3aXNtaWxsZXIubXVzZXVtIiwibGluY29sbi5tdXNldW0iLCJsaW56Lm11'@;
put 'c2V1bSIsImxpdmluZy5tdXNldW0iLCJsaXZpbmdoaXN0b3J5Lm11c2V1bSIsImxvY2FsaGlzdG9yeS5tdXNldW0iLCJsb25kb24ubXVzZXVtIiwibG9zYW5nZWxlcy5tdXNldW0iLCJsb3V2cmUubXVzZXVtIiwibG95YWxpc3QubXVzZXVtIiwibHVjZXJuZS5tdXNldW0iLCJsdXhlbWJvdXJn'@;
put 'Lm11c2V1bSIsImx1emVybi5tdXNldW0iLCJtYWQubXVzZXVtIiwibWFkcmlkLm11c2V1bSIsIm1hbGxvcmNhLm11c2V1bSIsIm1hbmNoZXN0ZXIubXVzZXVtIiwibWFuc2lvbi5tdXNldW0iLCJtYW5zaW9ucy5tdXNldW0iLCJtYW54Lm11c2V1bSIsIm1hcmJ1cmcubXVzZXVtIiwibWFyaXRp'@;
put 'bWUubXVzZXVtIiwibWFyaXRpbW8ubXVzZXVtIiwibWFyeWxhbmQubXVzZXVtIiwibWFyeWxodXJzdC5tdXNldW0iLCJtZWRpYS5tdXNldW0iLCJtZWRpY2FsLm11c2V1bSIsIm1lZGl6aW5oaXN0b3Jpc2NoZXMubXVzZXVtIiwibWVlcmVzLm11c2V1bSIsIm1lbW9yaWFsLm11c2V1bSIsIm1l'@;
put 'c2F2ZXJkZS5tdXNldW0iLCJtaWNoaWdhbi5tdXNldW0iLCJtaWRhdGxhbnRpYy5tdXNldW0iLCJtaWxpdGFyeS5tdXNldW0iLCJtaWxsLm11c2V1bSIsIm1pbmVycy5tdXNldW0iLCJtaW5pbmcubXVzZXVtIiwibWlubmVzb3RhLm11c2V1bSIsIm1pc3NpbGUubXVzZXVtIiwibWlzc291bGEu'@;
put 'bXVzZXVtIiwibW9kZXJuLm11c2V1bSIsIm1vbWEubXVzZXVtIiwibW9uZXkubXVzZXVtIiwibW9ubW91dGgubXVzZXVtIiwibW9udGljZWxsby5tdXNldW0iLCJtb250cmVhbC5tdXNldW0iLCJtb3Njb3cubXVzZXVtIiwibW90b3JjeWNsZS5tdXNldW0iLCJtdWVuY2hlbi5tdXNldW0iLCJt'@;
put 'dWVuc3Rlci5tdXNldW0iLCJtdWxob3VzZS5tdXNldW0iLCJtdW5jaWUubXVzZXVtIiwibXVzZWV0Lm11c2V1bSIsIm11c2V1bWNlbnRlci5tdXNldW0iLCJtdXNldW12ZXJlbmlnaW5nLm11c2V1bSIsIm11c2ljLm11c2V1bSIsIm5hdGlvbmFsLm11c2V1bSIsIm5hdGlvbmFsZmlyZWFybXMu'@;
put 'bXVzZXVtIiwibmF0aW9uYWxoZXJpdGFnZS5tdXNldW0iLCJuYXRpdmVhbWVyaWNhbi5tdXNldW0iLCJuYXR1cmFsaGlzdG9yeS5tdXNldW0iLCJuYXR1cmFsaGlzdG9yeW11c2V1bS5tdXNldW0iLCJuYXR1cmFsc2NpZW5jZXMubXVzZXVtIiwibmF0dXJlLm11c2V1bSIsIm5hdHVyaGlzdG9y'@;
put 'aXNjaGVzLm11c2V1bSIsIm5hdHV1cndldGVuc2NoYXBwZW4ubXVzZXVtIiwibmF1bWJ1cmcubXVzZXVtIiwibmF2YWwubXVzZXVtIiwibmVicmFza2EubXVzZXVtIiwibmV1ZXMubXVzZXVtIiwibmV3aGFtcHNoaXJlLm11c2V1bSIsIm5ld2plcnNleS5tdXNldW0iLCJuZXdtZXhpY28ubXVz'@;
put 'ZXVtIiwibmV3cG9ydC5tdXNldW0iLCJuZXdzcGFwZXIubXVzZXVtIiwibmV3eW9yay5tdXNldW0iLCJuaWVwY2UubXVzZXVtIiwibm9yZm9say5tdXNldW0iLCJub3J0aC5tdXNldW0iLCJucncubXVzZXVtIiwibnljLm11c2V1bSIsIm55bnkubXVzZXVtIiwib2NlYW5vZ3JhcGhpYy5tdXNl'@;
put 'dW0iLCJvY2Vhbm9ncmFwaGlxdWUubXVzZXVtIiwib21haGEubXVzZXVtIiwib25saW5lLm11c2V1bSIsIm9udGFyaW8ubXVzZXVtIiwib3BlbmFpci5tdXNldW0iLCJvcmVnb24ubXVzZXVtIiwib3JlZ29udHJhaWwubXVzZXVtIiwib3RhZ28ubXVzZXVtIiwib3hmb3JkLm11c2V1bSIsInBh'@;
put 'Y2lmaWMubXVzZXVtIiwicGFkZXJib3JuLm11c2V1bSIsInBhbGFjZS5tdXNldW0iLCJwYWxlby5tdXNldW0iLCJwYWxtc3ByaW5ncy5tdXNldW0iLCJwYW5hbWEubXVzZXVtIiwicGFyaXMubXVzZXVtIiwicGFzYWRlbmEubXVzZXVtIiwicGhhcm1hY3kubXVzZXVtIiwicGhpbGFkZWxwaGlh'@;
put 'Lm11c2V1bSIsInBoaWxhZGVscGhpYWFyZWEubXVzZXVtIiwicGhpbGF0ZWx5Lm11c2V1bSIsInBob2VuaXgubXVzZXVtIiwicGhvdG9ncmFwaHkubXVzZXVtIiwicGlsb3RzLm11c2V1bSIsInBpdHRzYnVyZ2gubXVzZXVtIiwicGxhbmV0YXJpdW0ubXVzZXVtIiwicGxhbnRhdGlvbi5tdXNl'@;
put 'dW0iLCJwbGFudHMubXVzZXVtIiwicGxhemEubXVzZXVtIiwicG9ydGFsLm11c2V1bSIsInBvcnRsYW5kLm11c2V1bSIsInBvcnRsbGlnYXQubXVzZXVtIiwicG9zdHMtYW5kLXRlbGVjb21tdW5pY2F0aW9ucy5tdXNldW0iLCJwcmVzZXJ2YXRpb24ubXVzZXVtIiwicHJlc2lkaW8ubXVzZXVt'@;
put 'IiwicHJlc3MubXVzZXVtIiwicHJvamVjdC5tdXNldW0iLCJwdWJsaWMubXVzZXVtIiwicHVib2wubXVzZXVtIiwicXVlYmVjLm11c2V1bSIsInJhaWxyb2FkLm11c2V1bSIsInJhaWx3YXkubXVzZXVtIiwicmVzZWFyY2gubXVzZXVtIiwicmVzaXN0YW5jZS5tdXNldW0iLCJyaW9kZWphbmVp'@;
put 'cm8ubXVzZXVtIiwicm9jaGVzdGVyLm11c2V1bSIsInJvY2thcnQubXVzZXVtIiwicm9tYS5tdXNldW0iLCJydXNzaWEubXVzZXVtIiwic2FpbnRsb3Vpcy5tdXNldW0iLCJzYWxlbS5tdXNldW0iLCJzYWx2YWRvcmRhbGkubXVzZXVtIiwic2FsemJ1cmcubXVzZXVtIiwic2FuZGllZ28ubXVz'@;
put 'ZXVtIiwic2FuZnJhbmNpc2NvLm11c2V1bSIsInNhbnRhYmFyYmFyYS5tdXNldW0iLCJzYW50YWNydXoubXVzZXVtIiwic2FudGFmZS5tdXNldW0iLCJzYXNrYXRjaGV3YW4ubXVzZXVtIiwic2F0eC5tdXNldW0iLCJzYXZhbm5haGdhLm11c2V1bSIsInNjaGxlc2lzY2hlcy5tdXNldW0iLCJz'@;
put 'Y2hvZW5icnVubi5tdXNldW0iLCJzY2hva29sYWRlbi5tdXNldW0iLCJzY2hvb2wubXVzZXVtIiwic2Nod2Vpei5tdXNldW0iLCJzY2llbmNlLm11c2V1bSIsInNjaWVuY2VhbmRoaXN0b3J5Lm11c2V1bSIsInNjaWVuY2VhbmRpbmR1c3RyeS5tdXNldW0iLCJzY2llbmNlY2VudGVyLm11c2V1'@;
put 'bSIsInNjaWVuY2VjZW50ZXJzLm11c2V1bSIsInNjaWVuY2UtZmljdGlvbi5tdXNldW0iLCJzY2llbmNlaGlzdG9yeS5tdXNldW0iLCJzY2llbmNlcy5tdXNldW0iLCJzY2llbmNlc25hdHVyZWxsZXMubXVzZXVtIiwic2NvdGxhbmQubXVzZXVtIiwic2VhcG9ydC5tdXNldW0iLCJzZXR0bGVt'@;
put 'ZW50Lm11c2V1bSIsInNldHRsZXJzLm11c2V1bSIsInNoZWxsLm11c2V1bSIsInNoZXJicm9va2UubXVzZXVtIiwic2liZW5pay5tdXNldW0iLCJzaWxrLm11c2V1bSIsInNraS5tdXNldW0iLCJza29sZS5tdXNldW0iLCJzb2NpZXR5Lm11c2V1bSIsInNvbG9nbmUubXVzZXVtIiwic291bmRh'@;
put 'bmR2aXNpb24ubXVzZXVtIiwic291dGhjYXJvbGluYS5tdXNldW0iLCJzb3V0aHdlc3QubXVzZXVtIiwic3BhY2UubXVzZXVtIiwic3B5Lm11c2V1bSIsInNxdWFyZS5tdXNldW0iLCJzdGFkdC5tdXNldW0iLCJzdGFsYmFucy5tdXNldW0iLCJzdGFybmJlcmcubXVzZXVtIiwic3RhdGUubXVz'@;
put 'ZXVtIiwic3RhdGVvZmRlbGF3YXJlLm11c2V1bSIsInN0YXRpb24ubXVzZXVtIiwic3RlYW0ubXVzZXVtIiwic3RlaWVybWFyay5tdXNldW0iLCJzdGpvaG4ubXVzZXVtIiwic3RvY2tob2xtLm11c2V1bSIsInN0cGV0ZXJzYnVyZy5tdXNldW0iLCJzdHV0dGdhcnQubXVzZXVtIiwic3Vpc3Nl'@;
put 'Lm11c2V1bSIsInN1cmdlb25zaGFsbC5tdXNldW0iLCJzdXJyZXkubXVzZXVtIiwic3ZpenplcmEubXVzZXVtIiwic3dlZGVuLm11c2V1bSIsInN5ZG5leS5tdXNldW0iLCJ0YW5rLm11c2V1bSIsInRjbS5tdXNldW0iLCJ0ZWNobm9sb2d5Lm11c2V1bSIsInRlbGVrb21tdW5pa2F0aW9uLm11'@;
put 'c2V1bSIsInRlbGV2aXNpb24ubXVzZXVtIiwidGV4YXMubXVzZXVtIiwidGV4dGlsZS5tdXNldW0iLCJ0aGVhdGVyLm11c2V1bSIsInRpbWUubXVzZXVtIiwidGltZWtlZXBpbmcubXVzZXVtIiwidG9wb2xvZ3kubXVzZXVtIiwidG9yaW5vLm11c2V1bSIsInRvdWNoLm11c2V1bSIsInRvd24u'@;
put 'bXVzZXVtIiwidHJhbnNwb3J0Lm11c2V1bSIsInRyZWUubXVzZXVtIiwidHJvbGxleS5tdXNldW0iLCJ0cnVzdC5tdXNldW0iLCJ0cnVzdGVlLm11c2V1bSIsInVocmVuLm11c2V1bSIsInVsbS5tdXNldW0iLCJ1bmRlcnNlYS5tdXNldW0iLCJ1bml2ZXJzaXR5Lm11c2V1bSIsInVzYS5tdXNl'@;
put 'dW0iLCJ1c2FudGlxdWVzLm11c2V1bSIsInVzYXJ0cy5tdXNldW0iLCJ1c2NvdW50cnllc3RhdGUubXVzZXVtIiwidXNjdWx0dXJlLm11c2V1bSIsInVzZGVjb3JhdGl2ZWFydHMubXVzZXVtIiwidXNnYXJkZW4ubXVzZXVtIiwidXNoaXN0b3J5Lm11c2V1bSIsInVzaHVhaWEubXVzZXVtIiwi'@;
put 'dXNsaXZpbmdoaXN0b3J5Lm11c2V1bSIsInV0YWgubXVzZXVtIiwidXZpYy5tdXNldW0iLCJ2YWxsZXkubXVzZXVtIiwidmFudGFhLm11c2V1bSIsInZlcnNhaWxsZXMubXVzZXVtIiwidmlraW5nLm11c2V1bSIsInZpbGxhZ2UubXVzZXVtIiwidmlyZ2luaWEubXVzZXVtIiwidmlydHVhbC5t'@;
put 'dXNldW0iLCJ2aXJ0dWVsLm11c2V1bSIsInZsYWFuZGVyZW4ubXVzZXVtIiwidm9sa2Vua3VuZGUubXVzZXVtIiwid2FsZXMubXVzZXVtIiwid2FsbG9uaWUubXVzZXVtIiwid2FyLm11c2V1bSIsIndhc2hpbmd0b25kYy5tdXNldW0iLCJ3YXRjaGFuZGNsb2NrLm11c2V1bSIsIndhdGNoLWFu'@;
put 'ZC1jbG9jay5tdXNldW0iLCJ3ZXN0ZXJuLm11c2V1bSIsIndlc3RmYWxlbi5tdXNldW0iLCJ3aGFsaW5nLm11c2V1bSIsIndpbGRsaWZlLm11c2V1bSIsIndpbGxpYW1zYnVyZy5tdXNldW0iLCJ3aW5kbWlsbC5tdXNldW0iLCJ3b3Jrc2hvcC5tdXNldW0iLCJ5b3JrLm11c2V1bSIsInlvcmtz'@;
put 'aGlyZS5tdXNldW0iLCJ5b3NlbWl0ZS5tdXNldW0iLCJ5b3V0aC5tdXNldW0iLCJ6b29sb2dpY2FsLm11c2V1bSIsInpvb2xvZ3kubXVzZXVtIiwiXHUwNWQ5XHUwNWU4XHUwNWQ1XHUwNWU5XHUwNWRjXHUwNWQ5XHUwNWRkLm11c2V1bSIsIlx1MDQzOFx1MDQzYVx1MDQzZVx1MDQzYy5tdXNl'@;
put 'dW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5hbWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13Iiwi'@;
put 'Y28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibXVzZXVtLm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJvcmcubXgiLCJnb2IubXgiLCJlZHUubXgiLCJuZXQubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIs'@;
put 'Imdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoiLCJuYSIsImluZm8ubmEiLCJwcm8ubmEiLCJuYW1lLm5hIiwic2Nob29sLm5h'@;
put 'Iiwib3IubmEiLCJkci5uYSIsInVzLm5hIiwibXgubmEiLCJjYS5uYSIsImluLm5hIiwiY2MubmEiLCJ0di5uYSIsIndzLm5hIiwibW9iaS5uYSIsImNvLm5hIiwiY29tLm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJjb20ubmYi'@;
put 'LCJuZXQubmYiLCJwZXIubmYiLCJyZWMubmYiLCJ3ZWIubmYiLCJhcnRzLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJvdGhlci5uZiIsInN0b3JlLm5mIiwibmciLCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmci'@;
put 'LCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5v'@;
put 'IiwidmdzLm5vIiwiZnlsa2VzYmlibC5ubyIsImZvbGtlYmlibC5ubyIsIm11c2V1bS5ubyIsImlkcmV0dC5ubyIsInByaXYubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiZGVwLm5vIiwia29tbXVuZS5ubyIsImhlcmFkLm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5u'@;
put 'byIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5u'@;
put 'byIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8i'@;
put 'LCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicnVtdW5kZGFsLm5vIiwiYnJ5bmUubm8iLCJicm9u'@;
put 'bm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4'@;
put 'bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJt'@;
put 'alx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwi'@;
put 'c2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5v'@;
put 'Iiwidm9zc2V2YW5nZW4ubm8iLCJhZmpvcmQubm8iLCJceGU1ZmpvcmQubm8iLCJhZ2RlbmVzLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbGFoZWFkanUubm8iLCJc'@;
put 'eGUxbGFoZWFkanUubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFuZGFzdW9sby5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwi'@;
put 'YXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza3ZvbGwubm8iLCJhc2tveS5ubyIsImFza1x4Zjh5Lm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVy'@;
put 'ZS5ubyIsImF1cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFsZXN0cmFuZC5ubyIsImJhbGxhbmdlbi5ubyIsImJhbGF0Lm5vIiwiYlx4'@;
put 'ZTFsXHhlMXQubm8iLCJiYWxzZmpvcmQubm8iLCJiYWhjY2F2dW90bmEubm8iLCJiXHhlMWhjY2F2dW90bmEubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFpZGFyLm5vIiwiYlx4ZTFpZFx4'@;
put 'ZTFyLm5vIiwiYmVyZy5ubyIsImJlcmdlbi5ubyIsImJlcmxldmFnLm5vIiwiYmVybGV2XHhlNWcubm8iLCJiZWFyYWx2YWhraS5ubyIsImJlYXJhbHZceGUxaGtpLm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5u'@;
put 'byIsImJqdWduLm5vIiwiYm9kby5ubyIsImJvZFx4Zjgubm8iLCJiYWRhZGRqYS5ubyIsImJceGU1ZFx4ZTVkZGpceGU1Lm5vIiwiYnVkZWpqdS5ubyIsImJva24ubm8iLCJicmVtYW5nZXIubm8iLCJicm9ubm95Lm5vIiwiYnJceGY4bm5ceGY4eS5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5u'@;
put 'byIsImJhcnVtLm5vIiwiYlx4ZTZydW0ubm8iLCJiby50ZWxlbWFyay5ubyIsImJceGY4LnRlbGVtYXJrLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImJpZXZhdC5ubyIsImJpZXZceGUxdC5ubyIsImJvbWxvLm5vIiwiYlx4ZjhtbG8ubm8iLCJiYXRzZmpvcmQu'@;
put 'bm8iLCJiXHhlNXRzZmpvcmQubm8iLCJiYWhjYXZ1b3RuYS5ubyIsImJceGUxaGNhdnVvdG5hLm5vIiwiZG92cmUubm8iLCJkcmFtbWVuLm5vIiwiZHJhbmdlZGFsLm5vIiwiZHlyb3kubm8iLCJkeXJceGY4eS5ubyIsImRvbm5hLm5vIiwiZFx4ZjhubmEubm8iLCJlaWQubm8iLCJlaWRmam9y'@;
put 'ZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwiZXZlbmVzLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2'@;
put 'MVx1MDE2MWkubm8iLCJldmplLW9nLWhvcm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZnVvc3Nrby5ubyIsImZ1b2lza3Uubm8iLCJmZWRqZS5ubyIsImZldC5ubyIsImZpbm5veS5ubyIsImZpbm5ceGY4eS5ubyIsImZpdGphci5ubyIsImZqYWxlci5ubyIsImZqZWxsLm5v'@;
put 'IiwiZmxha3N0YWQubm8iLCJmbGF0YW5nZXIubm8iLCJmbGVra2Vmam9yZC5ubyIsImZsZXNiZXJnLm5vIiwiZmxvcmEubm8iLCJmbGEubm8iLCJmbFx4ZTUubm8iLCJmb2xsZGFsLm5vIiwiZm9yc2FuZC5ubyIsImZvc25lcy5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8i'@;
put 'LCJmcm9zdGEubm8iLCJmcmFuYS5ubyIsImZyXHhlNm5hLm5vIiwiZnJveWEubm8iLCJmclx4Zjh5YS5ubyIsImZ1c2Eubm8iLCJmeXJlc2RhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJnYW12aWsubm8iLCJnYW5nYXZpaWthLm5vIiwiZ1x4ZTFcdTAxNGJnYXZpaWthLm5vIiwi'@;
put 'Z2F1bGFyLm5vIiwiZ2F1c2RhbC5ubyIsImdpbGRlc2thbC5ubyIsImdpbGRlc2tceGU1bC5ubyIsImdpc2tlLm5vIiwiZ2plbW5lcy5ubyIsImdqZXJkcnVtLm5vIiwiZ2plcnN0YWQubm8iLCJnamVzZGFsLm5vIiwiZ2pvdmlrLm5vIiwiZ2pceGY4dmlrLm5vIiwiZ2xvcHBlbi5ubyIsImdv'@;
put 'bC5ubyIsImdyYW4ubm8iLCJncmFuZS5ubyIsImdyYW52aW4ubm8iLCJncmF0YW5nZW4ubm8iLCJncmltc3RhZC5ubyIsImdyb25nLm5vIiwia3JhYW5naGtlLm5vIiwia3JceGU1YW5naGtlLm5vIiwiZ3J1ZS5ubyIsImd1bGVuLm5vIiwiaGFkc2VsLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eu'@;
put 'bm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYWJtZXIubm8iLCJoXHhlMWJtZXIubm8iLCJoYXBtaXIubm8iLCJoXHhlMXBtaXIubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFtbWFyZmVhc3RhLm5vIiwiaFx4ZTFtbVx4ZTFyZmVhc3RhLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJo'@;
put 'YXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiYWtub2x1b2t0YS5ubyIsIlx4ZTFrXHUwMTRib2x1b2t0YS5ubyIsImhhdHRmamVsbGRhbC5ubyIsImFhcmJvcnRlLm5vIiwiaGF1Z2VzdW5kLm5vIiwiaGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhlcm95Lm1vcmUtb2ctcm9t'@;
put 'c2RhbC5ubyIsImhlclx4Zjh5Lm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJoaXRyYS5ubyIsImhqYXJ0ZGFsLm5vIiwiaGplbG1lbGFuZC5ubyIsImhvYm9sLm5vIiwiaG9iXHhmOGwubm8iLCJob2Yubm8iLCJob2wu'@;
put 'bm8iLCJob2xlLm5vIiwiaG9sbWVzdHJhbmQubm8iLCJob2x0YWxlbi5ubyIsImhvbHRceGU1bGVuLm5vIiwiaG9ybmluZGFsLm5vIiwiaG9ydGVuLm5vIiwiaHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaFx4ZTZnZWJv'@;
put 'c3RhZC5ubyIsImhveWFuZ2VyLm5vIiwiaFx4Zjh5YW5nZXIubm8iLCJob3lsYW5kZXQubm8iLCJoXHhmOHlsYW5kZXQubm8iLCJoYS5ubyIsImhceGU1Lm5vIiwiaWJlc3RhZC5ubyIsImluZGVyb3kubm8iLCJpbmRlclx4Zjh5Lm5vIiwiaXZlbGFuZC5ubyIsImpldm5ha2VyLm5vIiwiam9u'@;
put 'ZGFsLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJrYXJhc2pvay5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJsc295Lm5vIiwiZ2Fsc2Eubm8iLCJnXHhlMWxzXHhlMS5ubyIsImthcm1veS5ubyIsImthcm1ceGY4eS5ubyIsImth'@;
put 'dXRva2Vpbm8ubm8iLCJndW92ZGFnZWFpZG51Lm5vIiwia2xlcHAubm8iLCJrbGFidS5ubyIsImtsXHhlNmJ1Lm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIs'@;
put 'Imtyb2RzaGVyYWQubm8iLCJrclx4Zjhkc2hlcmFkLm5vIiwia3ZhbHN1bmQubm8iLCJyYWhra2VyYXZqdS5ubyIsInJceGUxaGtrZXJceGUxdmp1Lm5vIiwia3ZhbS5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3ZpdHNc'@;
put 'eGY4eS5ubyIsImt2YWZqb3JkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwia3ZhbmFuZ2VuLm5vIiwia3ZceGU2bmFuZ2VuLm5vIiwibmF2dW90bmEubm8iLCJuXHhlMXZ1b3RuYS5ubyIsImthZmpvcmQubm8iLCJrXHhlNWZqb3JkLm5vIiwiZ2FpdnVvdG5hLm5v'@;
put 'IiwiZ1x4ZTFpdnVvdG5hLm5vIiwibGFydmlrLm5vIiwibGF2YW5nZW4ubm8iLCJsYXZhZ2lzLm5vIiwibG9hYmF0Lm5vIiwibG9hYlx4ZTF0Lm5vIiwibGViZXNieS5ubyIsImRhdnZlc2lpZGEubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5u'@;
put 'byIsImxlbnZpay5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQubm8iLCJsaW5kZXNuZXMubm8iLCJsaW5kYXMubm8iLCJsaW5k'@;
put 'XHhlNXMubm8iLCJsb20ubm8iLCJsb3BwYS5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImx1bmQubm8iLCJsdW5uZXIubm8iLCJsdXJveS5ubyIsImx1clx4Zjh5Lm5vIiwibHVzdGVyLm5vIiwibHluZ2RhbC5ubyIsImx5bmdlbi5ubyIsIml2Z3Uubm8iLCJsYXJkYWwubm8iLCJs'@;
put 'ZXJkYWwubm8iLCJsXHhlNnJkYWwubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9yZW5za29nLm5vIiwibFx4ZjhyZW5za29nLm5vIiwibG90ZW4ubm8iLCJsXHhmOHRlbi5ubyIsIm1hbHZpay5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtdW9zYXQubm8i'@;
put 'LCJtdW9zXHhlMXQubm8iLCJtYW5kYWwubm8iLCJtYXJrZXIubm8iLCJtYXJuYXJkYWwubm8iLCJtYXNmam9yZGVuLm5vIiwibWVsYW5kLm5vIiwibWVsZGFsLm5vIiwibWVsaHVzLm5vIiwibWVsb3kubm8iLCJtZWxceGY4eS5ubyIsIm1lcmFrZXIubm8iLCJtZXJceGU1a2VyLm5vIiwibW9h'@;
put 'cmVrZS5ubyIsIm1vXHhlNXJla2Uubm8iLCJtaWRzdW5kLm5vIiwibWlkdHJlLWdhdWxkYWwubm8iLCJtb2RhbGVuLm5vIiwibW9kdW0ubm8iLCJtb2xkZS5ubyIsIm1vc2tlbmVzLm5vIiwibW9zcy5ubyIsIm1vc3Zpay5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwibWFsYXR2'@;
put 'dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm5hbWRhbHNlaWQubm8iLCJhZWpyaWUubm8iLCJuYW1zb3Mubm8iLCJuYW1zc2tvZ2FuLm5vIiwibmFhbWVzamV2dWVtaWUubm8iLCJuXHhlNVx4ZTVtZXNqZXZ1ZW1pZS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsIm5hbm5lc3RhZC5ubyIs'@;
put 'Im5hcnZpay5ubyIsIm5hcnZpaWthLm5vIiwibmF1c3RkYWwubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lcy5ha2Vyc2h1cy5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwidW5qYXJnYS5ubyIsInVualx4ZTFyZ2Eubm8iLCJuZXNz'@;
put 'ZXQubm8iLCJuaXNzZWRhbC5ubyIsIm5pdHRlZGFsLm5vIiwibm9yZC1hdXJkYWwubm8iLCJub3JkLWZyb24ubm8iLCJub3JkLW9kYWwubm8iLCJub3JkZGFsLm5vIiwibm9yZGthcHAubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwibm9yZHJlLWxhbmQubm8iLCJu'@;
put 'b3JkcmVpc2Eubm8iLCJyYWlzYS5ubyIsInJceGUxaXNhLm5vIiwibm9yZS1vZy11dmRhbC5ubyIsIm5vdG9kZGVuLm5vIiwibmFyb3kubm8iLCJuXHhlNnJceGY4eS5ubyIsIm5vdHRlcm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVz'@;
put 'Lm5vIiwib3BwZGFsLm5vIiwib3BwZWdhcmQubm8iLCJvcHBlZ1x4ZTVyZC5ubyIsIm9ya2RhbC5ubyIsIm9ybGFuZC5ubyIsIlx4ZjhybGFuZC5ubyIsIm9yc2tvZy5ubyIsIlx4Zjhyc2tvZy5ubyIsIm9yc3RhLm5vIiwiXHhmOHJzdGEubm8iLCJvcy5oZWRtYXJrLm5vIiwib3MuaG9yZGFs'@;
put 'YW5kLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwib3N0cmUtdG90ZW4ubm8iLCJceGY4c3RyZS10b3Rlbi5ubyIsIm92ZXJoYWxsYS5ubyIsIm92cmUtZWlrZXIubm8iLCJceGY4dnJlLWVpa2VyLm5vIiwib3llci5ubyIsIlx4Zjh5ZXIubm8iLCJveWdhcmRl'@;
put 'bi5ubyIsIlx4Zjh5Z2FyZGVuLm5vIiwib3lzdHJlLXNsaWRyZS5ubyIsIlx4Zjh5c3RyZS1zbGlkcmUubm8iLCJwb3JzYW5nZXIubm8iLCJwb3JzYW5ndS5ubyIsInBvcnNceGUxXHUwMTRiZ3Uubm8iLCJwb3JzZ3J1bm4ubm8iLCJyYWRveS5ubyIsInJhZFx4Zjh5Lm5vIiwicmFra2VzdGFk'@;
put 'Lm5vIiwicmFuYS5ubyIsInJ1b3ZhdC5ubyIsInJhbmRhYmVyZy5ubyIsInJhdW1hLm5vIiwicmVuZGFsZW4ubm8iLCJyZW5uZWJ1Lm5vIiwicmVubmVzb3kubm8iLCJyZW5uZXNceGY4eS5ubyIsInJpbmRhbC5ubyIsInJpbmdlYnUubm8iLCJyaW5nZXJpa2Uubm8iLCJyaW5nc2FrZXIubm8i'@;
put 'LCJyaXNzYS5ubyIsInJpc29yLm5vIiwicmlzXHhmOHIubm8iLCJyb2FuLm5vIiwicm9sbGFnLm5vIiwicnlnZ2Uubm8iLCJyYWxpbmdlbi5ubyIsInJceGU2bGluZ2VuLm5vIiwicm9kb3kubm8iLCJyXHhmOGRceGY4eS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mu'@;
put 'bm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJyYWRlLm5vIiwiclx4ZTVkZS5ubyIsInNhbGFuZ2VuLm5vIiwic2llbGxhay5ubyIsInNhbHRkYWwubm8iLCJzYWxh'@;
put 'dC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwic1x4ZTFsYXQubm8iLCJzYW1uYW5nZXIubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS52ZXN0Zm9sZC5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95'@;
put 'Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5vIiwic2lnZGFsLm5vIiwic2lsamFuLm5vIiwic2lyZGFsLm5vIiwic2thdW4ubm8iLCJza2Vkc21vLm5vIiwi'@;
put 'c2tpLm5vIiwic2tpZW4ubm8iLCJza2lwdHZldC5ubyIsInNramVydm95Lm5vIiwic2tqZXJ2XHhmOHkubm8iLCJza2llcnZhLm5vIiwic2tpZXJ2XHhlMS5ubyIsInNramFrLm5vIiwic2tqXHhlNWsubm8iLCJza29kamUubm8iLCJza2FubGFuZC5ubyIsInNrXHhlNW5sYW5kLm5vIiwic2th'@;
put 'bml0Lm5vIiwic2tceGUxbml0Lm5vIiwic21vbGEubm8iLCJzbVx4ZjhsYS5ubyIsInNuaWxsZmpvcmQubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25vYXNhLm5vIiwic25hYXNlLm5vIiwic25ceGU1YXNlLm5vIiwic29nbmRhbC5ubyIsInNva25kYWwubm8iLCJzb2xhLm5vIiwi'@;
put 'c29sdW5kLm5vIiwic29uZ2RhbGVuLm5vIiwic29ydGxhbmQubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFs'@;
put 'Lm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwib21hc3Z1b3RuYS5ubyIsInN0cmFuZC5ubyIsInN0cmFuZGEubm8iLCJzdHJ5bi5ubyIsInN1bGEubm8iLCJzdWxkYWwubm8iLCJzdW5kLm5vIiwic3VubmRhbC5ubyIsInN1cm5hZGFsLm5vIiwic3ZlaW8ubm8i'@;
put 'LCJzdmVsdmlrLm5vIiwic3lra3lsdmVuLm5vIiwic29nbmUubm8iLCJzXHhmOGduZS5ubyIsInNvbW5hLm5vIiwic1x4ZjhtbmEubm8iLCJzb25kcmUtbGFuZC5ubyIsInNceGY4bmRyZS1sYW5kLm5vIiwic29yLWF1cmRhbC5ubyIsInNceGY4ci1hdXJkYWwubm8iLCJzb3ItZnJvbi5ubyIs'@;
put 'InNceGY4ci1mcm9uLm5vIiwic29yLW9kYWwubm8iLCJzXHhmOHItb2RhbC5ubyIsInNvci12YXJhbmdlci5ubyIsInNceGY4ci12YXJhbmdlci5ubyIsIm1hdHRhLXZhcmpqYXQubm8iLCJtXHhlMXR0YS12XHhlMXJqamF0Lm5vIiwic29yZm9sZC5ubyIsInNceGY4cmZvbGQubm8iLCJzb3Jy'@;
put 'ZWlzYS5ubyIsInNceGY4cnJlaXNhLm5vIiwic29ydW0ubm8iLCJzXHhmOHJ1bS5ubyIsInRhbmEubm8iLCJkZWF0bnUubm8iLCJ0aW1lLm5vIiwidGluZ3ZvbGwubm8iLCJ0aW5uLm5vIiwidGplbGRzdW5kLm5vIiwiZGllbGRkYW51b3JyaS5ubyIsInRqb21lLm5vIiwidGpceGY4bWUubm8i'@;
put 'LCJ0b2trZS5ubyIsInRvbGdhLm5vIiwidG9yc2tlbi5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb21zYS5ubyIsInJvbXNhLm5vIiwidHJvbmRoZWltLm5vIiwidHJvYW5kaW4ubm8iLCJ0cnlzaWwubm8iLCJ0cmFuYS5ubyIs'@;
put 'InRyXHhlNm5hLm5vIiwidHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsImRpdnRhc3Z1b2RuYS5ubyIsImRpdnR0YXN2dW90bmEubm8iLCJ0eXNuZXMubm8iLCJ0eXN2YXIubm8iLCJ0eXN2'@;
put 'XHhlNnIubm8iLCJ0b25zYmVyZy5ubyIsInRceGY4bnNiZXJnLm5vIiwidWxsZW5zYWtlci5ubyIsInVsbGVuc3Zhbmcubm8iLCJ1bHZpay5ubyIsInV0c2lyYS5ubyIsInZhZHNvLm5vIiwidmFkc1x4Zjgubm8iLCJjYWhjZXN1b2xvLm5vIiwiXHUwMTBkXHhlMWhjZXN1b2xvLm5vIiwidmFr'@;
put 'c2RhbC5ubyIsInZhbGxlLm5vIiwidmFuZy5ubyIsInZhbnlsdmVuLm5vIiwidmFyZG8ubm8iLCJ2YXJkXHhmOC5ubyIsInZhcmdnYXQubm8iLCJ2XHhlMXJnZ1x4ZTF0Lm5vIiwidmVmc24ubm8iLCJ2YWFwc3RlLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5u'@;
put 'byIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwidmVzdG5lcy5ubyIsInZlc3RyZS1zbGlkcmUubm8iLCJ2ZXN0cmUtdG90ZW4ubm8iLCJ2ZXN0dmFnb3kubm8iLCJ2ZXN0dlx4ZTVnXHhmOHkubm8iLCJ2ZXZlbHN0YWQubm8iLCJ2aWsubm8iLCJ2'@;
put 'aWtuYS5ubyIsInZpbmRhZmpvcmQubm8iLCJ2b2xkYS5ubyIsInZvc3Mubm8iLCJ2YXJveS5ubyIsInZceGU2clx4Zjh5Lm5vIiwidmFnYW4ubm8iLCJ2XHhlNWdhbi5ubyIsInZvYWdhdC5ubyIsInZhZ3NveS5ubyIsInZceGU1Z3NceGY4eS5ubyIsInZhZ2Eubm8iLCJ2XHhlNWdceGU1Lm5v'@;
put 'IiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJ2YWxlci5oZWRtYXJrLm5vIiwidlx4ZTVsZXIuaGVkbWFyay5ubyIsIioubnAiLCJuciIsImJpei5uciIsImluZm8ubnIiLCJnb3YubnIiLCJlZHUubnIiLCJvcmcubnIiLCJuZXQubnIiLCJjb20ubnIiLCJu'@;
put 'dSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56IiwibWlsLm56IiwibVx1MDEwMW9yaS5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJz'@;
put 'Y2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25pb24iLCJvcmciLCJwYSIsImFjLnBhIiwiZ29iLnBhIiwiY29tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwiZWR1'@;
put 'LnBhIiwibmV0LnBhIiwiaW5nLnBhIiwiYWJvLnBhIiwibWVkLnBhIiwibm9tLnBhIiwicGUiLCJlZHUucGUiLCJnb2IucGUiLCJub20ucGUiLCJtaWwucGUiLCJvcmcucGUiLCJjb20ucGUiLCJuZXQucGUiLCJwZiIsImNvbS5wZiIsIm9yZy5wZiIsImVkdS5wZiIsIioucGciLCJwaCIsImNv'@;
put 'bS5waCIsIm5ldC5waCIsIm9yZy5waCIsImdvdi5waCIsImVkdS5waCIsIm5nby5waCIsIm1pbC5waCIsImkucGgiLCJwayIsImNvbS5wayIsIm5ldC5wayIsImVkdS5wayIsIm9yZy5wayIsImZhbS5wayIsImJpei5wayIsIndlYi5wayIsImdvdi5wayIsImdvYi5wayIsImdvay5wayIsImdv'@;
put 'bi5wayIsImdvcC5wayIsImdvcy5wayIsImluZm8ucGsiLCJwbCIsImNvbS5wbCIsIm5ldC5wbCIsIm9yZy5wbCIsImFpZC5wbCIsImFncm8ucGwiLCJhdG0ucGwiLCJhdXRvLnBsIiwiYml6LnBsIiwiZWR1LnBsIiwiZ21pbmEucGwiLCJnc20ucGwiLCJpbmZvLnBsIiwibWFpbC5wbCIsIm1p'@;
put 'YXN0YS5wbCIsIm1lZGlhLnBsIiwibWlsLnBsIiwibmllcnVjaG9tb3NjaS5wbCIsIm5vbS5wbCIsInBjLnBsIiwicG93aWF0LnBsIiwicHJpdi5wbCIsInJlYWxlc3RhdGUucGwiLCJyZWwucGwiLCJzZXgucGwiLCJzaG9wLnBsIiwic2tsZXAucGwiLCJzb3MucGwiLCJzemtvbGEucGwiLCJ0'@;
put 'YXJnaS5wbCIsInRtLnBsIiwidG91cmlzbS5wbCIsInRyYXZlbC5wbCIsInR1cnlzdHlrYS5wbCIsImdvdi5wbCIsImFwLmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsInVzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cHNwLmdvdi5wbCIsInBzcC5n'@;
put 'b3YucGwiLCJ3c2tyLmdvdi5wbCIsImt3cC5nb3YucGwiLCJtdy5nb3YucGwiLCJ1Zy5nb3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVnaW0uZ292LnBsIiwidXBvdy5nb3YucGwiLCJ1dy5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwicGEuZ292LnBsIiwicG8uZ292LnBs'@;
put 'IiwicHNzZS5nb3YucGwiLCJwdXAuZ292LnBsIiwicnpndy5nb3YucGwiLCJzYS5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJ3c2EuZ292LnBsIiwic2tvLmdvdi5wbCIsInV6cy5nb3YucGwiLCJ3aWloLmdvdi5wbCIsIndpbmIuZ292LnBsIiwicGluYi5nb3YucGwiLCJ3aW9z'@;
put 'Lmdvdi5wbCIsIndpdGQuZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInBpdy5nb3YucGwiLCJ3aXcuZ292LnBsIiwiZ3Jpdy5nb3YucGwiLCJ3aWYuZ292LnBsIiwib3VtLmdvdi5wbCIsInNkbi5nb3YucGwiLCJ6cC5nb3YucGwiLCJ1cHBvLmdvdi5wbCIsIm11cC5nb3YucGwiLCJ3dW96Lmdv'@;
put 'di5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsIm9pcm0uZ292LnBsIiwiYXVndXN0b3cucGwiLCJiYWJpYS1nb3JhLnBsIiwiYmVkemluLnBsIiwiYmVza2lkeS5wbCIsImJpYWxvd2llemEucGwiLCJiaWFseXN0b2sucGwiLCJiaWVsYXdhLnBsIiwiYmllc3pjemFkeS5wbCIsImJvbGVzbGF3aWVj'@;
put 'LnBsIiwiYnlkZ29zemN6LnBsIiwiYnl0b20ucGwiLCJjaWVzenluLnBsIiwiY3plbGFkei5wbCIsImN6ZXN0LnBsIiwiZGx1Z29sZWthLnBsIiwiZWxibGFnLnBsIiwiZWxrLnBsIiwiZ2xvZ293LnBsIiwiZ25pZXpuby5wbCIsImdvcmxpY2UucGwiLCJncmFqZXdvLnBsIiwiaWxhd2EucGwi'@;
put 'LCJqYXdvcnpuby5wbCIsImplbGVuaWEtZ29yYS5wbCIsImpnb3JhLnBsIiwia2FsaXN6LnBsIiwia2F6aW1pZXJ6LWRvbG55LnBsIiwia2FycGFjei5wbCIsImthcnR1enkucGwiLCJrYXN6dWJ5LnBsIiwia2F0b3dpY2UucGwiLCJrZXBuby5wbCIsImtldHJ6eW4ucGwiLCJrbG9kemtvLnBs'@;
put 'Iiwia29iaWVyenljZS5wbCIsImtvbG9icnplZy5wbCIsImtvbmluLnBsIiwia29uc2tvd29sYS5wbCIsImt1dG5vLnBsIiwibGFweS5wbCIsImxlYm9yay5wbCIsImxlZ25pY2EucGwiLCJsZXphanNrLnBsIiwibGltYW5vd2EucGwiLCJsb216YS5wbCIsImxvd2ljei5wbCIsImx1YmluLnBs'@;
put 'IiwibHVrb3cucGwiLCJtYWxib3JrLnBsIiwibWFsb3BvbHNrYS5wbCIsIm1hem93c3plLnBsIiwibWF6dXJ5LnBsIiwibWllbGVjLnBsIiwibWllbG5vLnBsIiwibXJhZ293by5wbCIsIm5ha2xvLnBsIiwibm93YXJ1ZGEucGwiLCJueXNhLnBsIiwib2xhd2EucGwiLCJvbGVja28ucGwiLCJv'@;
put 'bGt1c3oucGwiLCJvbHN6dHluLnBsIiwib3BvY3puby5wbCIsIm9wb2xlLnBsIiwib3N0cm9kYS5wbCIsIm9zdHJvbGVrYS5wbCIsIm9zdHJvd2llYy5wbCIsIm9zdHJvd3dsa3AucGwiLCJwaWxhLnBsIiwicGlzei5wbCIsInBvZGhhbGUucGwiLCJwb2RsYXNpZS5wbCIsInBvbGtvd2ljZS5w'@;
put 'bCIsInBvbW9yemUucGwiLCJwb21vcnNraWUucGwiLCJwcm9jaG93aWNlLnBsIiwicHJ1c3prb3cucGwiLCJwcnpld29yc2sucGwiLCJwdWxhd3kucGwiLCJyYWRvbS5wbCIsInJhd2EtbWF6LnBsIiwicnlibmlrLnBsIiwicnplc3pvdy5wbCIsInNhbm9rLnBsIiwic2VqbnkucGwiLCJzbGFz'@;
put 'ay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInNrb2N6b3cucGwiLCJzdGFyYWNob3dpY2UucGwiLCJzdGFyZ2FyZC5wbCIsInN1d2Fsa2kucGwiLCJzd2lkbmljYS5wbCIsInN3aWVib2R6aW4ucGwiLCJzd2lub3Vqc2NpZS5wbCIsInN6Y3plY2lu'@;
put 'LnBsIiwic3pjenl0bm8ucGwiLCJ0YXJub2JyemVnLnBsIiwidGdvcnkucGwiLCJ0dXJlay5wbCIsInR5Y2h5LnBsIiwidXN0a2EucGwiLCJ3YWxicnp5Y2gucGwiLCJ3YXJtaWEucGwiLCJ3YXJzemF3YS5wbCIsIndhdy5wbCIsIndlZ3Jvdy5wbCIsIndpZWx1bi5wbCIsIndsb2NsLnBsIiwi'@;
put 'd2xvY2xhd2VrLnBsIiwid29kemlzbGF3LnBsIiwid29sb21pbi5wbCIsIndyb2NsYXcucGwiLCJ6YWNocG9tb3IucGwiLCJ6YWdhbi5wbCIsInphcm93LnBsIiwiemdvcmEucGwiLCJ6Z29yemVsZWMucGwiLCJwbSIsInBuIiwiZ292LnBuIiwiY28ucG4iLCJvcmcucG4iLCJlZHUucG4iLCJu'@;
put 'ZXQucG4iLCJwb3N0IiwicHIiLCJjb20ucHIiLCJuZXQucHIiLCJvcmcucHIiLCJnb3YucHIiLCJlZHUucHIiLCJpc2xhLnByIiwicHJvLnByIiwiYml6LnByIiwiaW5mby5wciIsIm5hbWUucHIiLCJlc3QucHIiLCJwcm9mLnByIiwiYWMucHIiLCJwcm8iLCJhYWEucHJvIiwiYWNhLnBybyIs'@;
put 'ImFjY3QucHJvIiwiYXZvY2F0LnBybyIsImJhci5wcm8iLCJjcGEucHJvIiwiZW5nLnBybyIsImp1ci5wcm8iLCJsYXcucHJvIiwibWVkLnBybyIsInJlY2h0LnBybyIsInBzIiwiZWR1LnBzIiwiZ292LnBzIiwic2VjLnBzIiwicGxvLnBzIiwiY29tLnBzIiwib3JnLnBzIiwibmV0LnBzIiwi'@;
put 'cHQiLCJuZXQucHQiLCJnb3YucHQiLCJvcmcucHQiLCJlZHUucHQiLCJpbnQucHQiLCJwdWJsLnB0IiwiY29tLnB0Iiwibm9tZS5wdCIsInB3IiwiY28ucHciLCJuZS5wdyIsIm9yLnB3IiwiZWQucHciLCJnby5wdyIsImJlbGF1LnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5'@;
put 'IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwib3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwibm9tLnJlIiwicm8iLCJhcnRzLnJvIiwi'@;
put 'Y29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28ucnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIs'@;
put 'ImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwibmV0LnNhIiwib3JnLnNhIiwiZ292LnNhIiwibWVkLnNhIiwicHViLnNhIiwiZWR1LnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJu'@;
put 'ZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsImVkdS5zYyIsInNkIiwiY29tLnNkIiwibmV0LnNkIiwib3JnLnNkIiwiZWR1LnNkIiwibWVkLnNkIiwidHYuc2QiLCJnb3Yuc2QiLCJpbmZvLnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJi'@;
put 'LnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwia29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5i'@;
put 'aWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJj'@;
put 'b20uc2ciLCJuZXQuc2ciLCJvcmcuc2ciLCJnb3Yuc2ciLCJlZHUuc2ciLCJwZXIuc2ciLCJzaCIsImNvbS5zaCIsIm5ldC5zaCIsImdvdi5zaCIsIm9yZy5zaCIsIm1pbC5zaCIsInNpIiwic2oiLCJzayIsInNsIiwiY29tLnNsIiwibmV0LnNsIiwiZWR1LnNsIiwiZ292LnNsIiwib3JnLnNs'@;
put 'Iiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNvIiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvbS5zcyIs'@;
put 'ImVkdS5zcyIsImdvdi5zcyIsIm1lLnNzIiwibmV0LnNzIiwib3JnLnNzIiwic2NoLnNzIiwic3QiLCJjby5zdCIsImNvbS5zdCIsImNvbnN1bGFkby5zdCIsImVkdS5zdCIsImVtYmFpeGFkYS5zdCIsIm1pbC5zdCIsIm5ldC5zdCIsIm9yZy5zdCIsInByaW5jaXBlLnN0Iiwic2FvdG9tZS5z'@;
put 'dCIsInN0b3JlLnN0Iiwic3UiLCJzdiIsImNvbS5zdiIsImVkdS5zdiIsImdvYi5zdiIsIm9yZy5zdiIsInJlZC5zdiIsInN4IiwiZ292LnN4Iiwic3kiLCJlZHUuc3kiLCJnb3Yuc3kiLCJuZXQuc3kiLCJtaWwuc3kiLCJjb20uc3kiLCJvcmcuc3kiLCJzeiIsImNvLnN6IiwiYWMuc3oiLCJv'@;
put 'cmcuc3oiLCJ0YyIsInRkIiwidGVsIiwidGYiLCJ0ZyIsInRoIiwiYWMudGgiLCJjby50aCIsImdvLnRoIiwiaW4udGgiLCJtaS50aCIsIm5ldC50aCIsIm9yLnRoIiwidGoiLCJhYy50aiIsImJpei50aiIsImNvLnRqIiwiY29tLnRqIiwiZWR1LnRqIiwiZ28udGoiLCJnb3YudGoiLCJpbnQu'@;
put 'dGoiLCJtaWwudGoiLCJuYW1lLnRqIiwibmV0LnRqIiwibmljLnRqIiwib3JnLnRqIiwidGVzdC50aiIsIndlYi50aiIsInRrIiwidGwiLCJnb3YudGwiLCJ0bSIsImNvbS50bSIsImNvLnRtIiwib3JnLnRtIiwibmV0LnRtIiwibm9tLnRtIiwiZ292LnRtIiwibWlsLnRtIiwiZWR1LnRtIiwi'@;
put 'dG4iLCJjb20udG4iLCJlbnMudG4iLCJmaW4udG4iLCJnb3YudG4iLCJpbmQudG4iLCJpbmZvLnRuIiwiaW50bC50biIsIm1pbmNvbS50biIsIm5hdC50biIsIm5ldC50biIsIm9yZy50biIsInBlcnNvLnRuIiwidG91cmlzbS50biIsInRvIiwiY29tLnRvIiwiZ292LnRvIiwibmV0LnRvIiwi'@;
put 'b3JnLnRvIiwiZWR1LnRvIiwibWlsLnRvIiwidHIiLCJhdi50ciIsImJicy50ciIsImJlbC50ciIsImJpei50ciIsImNvbS50ciIsImRyLnRyIiwiZWR1LnRyIiwiZ2VuLnRyIiwiZ292LnRyIiwiaW5mby50ciIsIm1pbC50ciIsImsxMi50ciIsImtlcC50ciIsIm5hbWUudHIiLCJuZXQudHIi'@;
put 'LCJvcmcudHIiLCJwb2wudHIiLCJ0ZWwudHIiLCJ0c2sudHIiLCJ0di50ciIsIndlYi50ciIsIm5jLnRyIiwiZ292Lm5jLnRyIiwidHQiLCJjby50dCIsImNvbS50dCIsIm9yZy50dCIsIm5ldC50dCIsImJpei50dCIsImluZm8udHQiLCJwcm8udHQiLCJpbnQudHQiLCJjb29wLnR0Iiwiam9i'@;
put 'cy50dCIsIm1vYmkudHQiLCJ0cmF2ZWwudHQiLCJtdXNldW0udHQiLCJhZXJvLnR0IiwibmFtZS50dCIsImdvdi50dCIsImVkdS50dCIsInR2IiwidHciLCJlZHUudHciLCJnb3YudHciLCJtaWwudHciLCJjb20udHciLCJuZXQudHciLCJvcmcudHciLCJpZHYudHciLCJnYW1lLnR3IiwiZWJp'@;
put 'ei50dyIsImNsdWIudHciLCJcdTdkYjJcdThkZWYudHciLCJcdTdkNDRcdTdlNTQudHciLCJcdTU1NDZcdTY5NmQudHciLCJ0eiIsImFjLnR6IiwiY28udHoiLCJnby50eiIsImhvdGVsLnR6IiwiaW5mby50eiIsIm1lLnR6IiwibWlsLnR6IiwibW9iaS50eiIsIm5lLnR6Iiwib3IudHoiLCJz'@;
put 'Yy50eiIsInR2LnR6IiwidWEiLCJjb20udWEiLCJlZHUudWEiLCJnb3YudWEiLCJpbi51YSIsIm5ldC51YSIsIm9yZy51YSIsImNoZXJrYXNzeS51YSIsImNoZXJrYXN5LnVhIiwiY2hlcm5pZ292LnVhIiwiY2hlcm5paGl2LnVhIiwiY2hlcm5pdnRzaS51YSIsImNoZXJub3Z0c3kudWEiLCJj'@;
put 'ay51YSIsImNuLnVhIiwiY3IudWEiLCJjcmltZWEudWEiLCJjdi51YSIsImRuLnVhIiwiZG5lcHJvcGV0cm92c2sudWEiLCJkbmlwcm9wZXRyb3Zzay51YSIsImRvbmV0c2sudWEiLCJkcC51YSIsImlmLnVhIiwiaXZhbm8tZnJhbmtpdnNrLnVhIiwia2gudWEiLCJraGFya2l2LnVhIiwia2hh'@;
put 'cmtvdi51YSIsImtoZXJzb24udWEiLCJraG1lbG5pdHNraXkudWEiLCJraG1lbG55dHNreWkudWEiLCJraWV2LnVhIiwia2lyb3ZvZ3JhZC51YSIsImttLnVhIiwia3IudWEiLCJrcnltLnVhIiwia3MudWEiLCJrdi51YSIsImt5aXYudWEiLCJsZy51YSIsImx0LnVhIiwibHVnYW5zay51YSIs'@;
put 'Imx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3Bv'@;
put 'bC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInZpbm5pY2EudWEiLCJ2aW5ueXRzaWEudWEiLCJ2bi51YSIsInZvbHluLnVhIiwieWFsdGEudWEiLCJ6YXBvcml6aHpoZS51YSIsInphcG9y'@;
put 'aXpoemhpYS51YSIsInpoaXRvbWlyLnVhIiwiemh5dG9teXIudWEiLCJ6cC51YSIsInp0LnVhIiwidWciLCJjby51ZyIsIm9yLnVnIiwiYWMudWciLCJzYy51ZyIsImdvLnVnIiwibmUudWciLCJjb20udWciLCJvcmcudWciLCJ1ayIsImFjLnVrIiwiY28udWsiLCJnb3YudWsiLCJsdGQudWsi'@;
put 'LCJtZS51ayIsIm5ldC51ayIsIm5ocy51ayIsIm9yZy51ayIsInBsYy51ayIsInBvbGljZS51ayIsIiouc2NoLnVrIiwidXMiLCJkbmkudXMiLCJmZWQudXMiLCJpc2EudXMiLCJraWRzLnVzIiwibnNuLnVzIiwiYWsudXMiLCJhbC51cyIsImFyLnVzIiwiYXMudXMiLCJhei51cyIsImNhLnVz'@;
put 'IiwiY28udXMiLCJjdC51cyIsImRjLnVzIiwiZGUudXMiLCJmbC51cyIsImdhLnVzIiwiZ3UudXMiLCJoaS51cyIsImlhLnVzIiwiaWQudXMiLCJpbC51cyIsImluLnVzIiwia3MudXMiLCJreS51cyIsImxhLnVzIiwibWEudXMiLCJtZC51cyIsIm1lLnVzIiwibWkudXMiLCJtbi51cyIsIm1v'@;
put 'LnVzIiwibXMudXMiLCJtdC51cyIsIm5jLnVzIiwibmQudXMiLCJuZS51cyIsIm5oLnVzIiwibmoudXMiLCJubS51cyIsIm52LnVzIiwibnkudXMiLCJvaC51cyIsIm9rLnVzIiwib3IudXMiLCJwYS51cyIsInByLnVzIiwicmkudXMiLCJzYy51cyIsInNkLnVzIiwidG4udXMiLCJ0eC51cyIs'@;
put 'InV0LnVzIiwidmkudXMiLCJ2dC51cyIsInZhLnVzIiwid2EudXMiLCJ3aS51cyIsInd2LnVzIiwid3kudXMiLCJrMTIuYWsudXMiLCJrMTIuYWwudXMiLCJrMTIuYXIudXMiLCJrMTIuYXMudXMiLCJrMTIuYXoudXMiLCJrMTIuY2EudXMiLCJrMTIuY28udXMiLCJrMTIuY3QudXMiLCJrMTIu'@;
put 'ZGMudXMiLCJrMTIuZGUudXMiLCJrMTIuZmwudXMiLCJrMTIuZ2EudXMiLCJrMTIuZ3UudXMiLCJrMTIuaWEudXMiLCJrMTIuaWQudXMiLCJrMTIuaWwudXMiLCJrMTIuaW4udXMiLCJrMTIua3MudXMiLCJrMTIua3kudXMiLCJrMTIubGEudXMiLCJrMTIubWEudXMiLCJrMTIubWQudXMiLCJr'@;
put 'MTIubWUudXMiLCJrMTIubWkudXMiLCJrMTIubW4udXMiLCJrMTIubW8udXMiLCJrMTIubXMudXMiLCJrMTIubXQudXMiLCJrMTIubmMudXMiLCJrMTIubmUudXMiLCJrMTIubmgudXMiLCJrMTIubmoudXMiLCJrMTIubm0udXMiLCJrMTIubnYudXMiLCJrMTIubnkudXMiLCJrMTIub2gudXMi'@;
put 'LCJrMTIub2sudXMiLCJrMTIub3IudXMiLCJrMTIucGEudXMiLCJrMTIucHIudXMiLCJrMTIuc2MudXMiLCJrMTIudG4udXMiLCJrMTIudHgudXMiLCJrMTIudXQudXMiLCJrMTIudmkudXMiLCJrMTIudnQudXMiLCJrMTIudmEudXMiLCJrMTIud2EudXMiLCJrMTIud2kudXMiLCJrMTIud3ku'@;
put 'dXMiLCJjYy5hay51cyIsImNjLmFsLnVzIiwiY2MuYXIudXMiLCJjYy5hcy51cyIsImNjLmF6LnVzIiwiY2MuY2EudXMiLCJjYy5jby51cyIsImNjLmN0LnVzIiwiY2MuZGMudXMiLCJjYy5kZS51cyIsImNjLmZsLnVzIiwiY2MuZ2EudXMiLCJjYy5ndS51cyIsImNjLmhpLnVzIiwiY2MuaWEu'@;
put 'dXMiLCJjYy5pZC51cyIsImNjLmlsLnVzIiwiY2MuaW4udXMiLCJjYy5rcy51cyIsImNjLmt5LnVzIiwiY2MubGEudXMiLCJjYy5tYS51cyIsImNjLm1kLnVzIiwiY2MubWUudXMiLCJjYy5taS51cyIsImNjLm1uLnVzIiwiY2MubW8udXMiLCJjYy5tcy51cyIsImNjLm10LnVzIiwiY2MubmMu'@;
put 'dXMiLCJjYy5uZC51cyIsImNjLm5lLnVzIiwiY2MubmgudXMiLCJjYy5uai51cyIsImNjLm5tLnVzIiwiY2MubnYudXMiLCJjYy5ueS51cyIsImNjLm9oLnVzIiwiY2Mub2sudXMiLCJjYy5vci51cyIsImNjLnBhLnVzIiwiY2MucHIudXMiLCJjYy5yaS51cyIsImNjLnNjLnVzIiwiY2Muc2Qu'@;
put 'dXMiLCJjYy50bi51cyIsImNjLnR4LnVzIiwiY2MudXQudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2MudmEudXMiLCJjYy53YS51cyIsImNjLndpLnVzIiwiY2Mud3YudXMiLCJjYy53eS51cyIsImxpYi5hay51cyIsImxpYi5hbC51cyIsImxpYi5hci51cyIsImxpYi5hcy51cyIsImxp'@;
put 'Yi5hei51cyIsImxpYi5jYS51cyIsImxpYi5jby51cyIsImxpYi5jdC51cyIsImxpYi5kYy51cyIsImxpYi5mbC51cyIsImxpYi5nYS51cyIsImxpYi5ndS51cyIsImxpYi5oaS51cyIsImxpYi5pYS51cyIsImxpYi5pZC51cyIsImxpYi5pbC51cyIsImxpYi5pbi51cyIsImxpYi5rcy51cyIs'@;
put 'ImxpYi5reS51cyIsImxpYi5sYS51cyIsImxpYi5tYS51cyIsImxpYi5tZC51cyIsImxpYi5tZS51cyIsImxpYi5taS51cyIsImxpYi5tbi51cyIsImxpYi5tby51cyIsImxpYi5tcy51cyIsImxpYi5tdC51cyIsImxpYi5uYy51cyIsImxpYi5uZC51cyIsImxpYi5uZS51cyIsImxpYi5uaC51'@;
put 'cyIsImxpYi5uai51cyIsImxpYi5ubS51cyIsImxpYi5udi51cyIsImxpYi5ueS51cyIsImxpYi5vaC51cyIsImxpYi5vay51cyIsImxpYi5vci51cyIsImxpYi5wYS51cyIsImxpYi5wci51cyIsImxpYi5yaS51cyIsImxpYi5zYy51cyIsImxpYi5zZC51cyIsImxpYi50bi51cyIsImxpYi50'@;
put 'eC51cyIsImxpYi51dC51cyIsImxpYi52aS51cyIsImxpYi52dC51cyIsImxpYi52YS51cyIsImxpYi53YS51cyIsImxpYi53aS51cyIsImxpYi53eS51cyIsInB2dC5rMTIubWEudXMiLCJjaHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJhbm4tYXJib3IubWkudXMiLCJjb2cu'@;
put 'bWkudXMiLCJkc3QubWkudXMiLCJlYXRvbi5taS51cyIsImdlbi5taS51cyIsIm11cy5taS51cyIsInRlYy5taS51cyIsIndhc2h0ZW5hdy5taS51cyIsInV5IiwiY29tLnV5IiwiZWR1LnV5IiwiZ3ViLnV5IiwibWlsLnV5IiwibmV0LnV5Iiwib3JnLnV5IiwidXoiLCJjby51eiIsImNvbS51'@;
put 'eiIsIm5ldC51eiIsIm9yZy51eiIsInZhIiwidmMiLCJjb20udmMiLCJuZXQudmMiLCJvcmcudmMiLCJnb3YudmMiLCJtaWwudmMiLCJlZHUudmMiLCJ2ZSIsImFydHMudmUiLCJiaWIudmUiLCJjby52ZSIsImNvbS52ZSIsImUxMi52ZSIsImVkdS52ZSIsImZpcm0udmUiLCJnb2IudmUiLCJn'@;
put 'b3YudmUiLCJpbmZvLnZlIiwiaW50LnZlIiwibWlsLnZlIiwibmV0LnZlIiwibm9tLnZlIiwib3JnLnZlIiwicmFyLnZlIiwicmVjLnZlIiwic3RvcmUudmUiLCJ0ZWMudmUiLCJ3ZWIudmUiLCJ2ZyIsInZpIiwiY28udmkiLCJjb20udmkiLCJrMTIudmkiLCJuZXQudmkiLCJvcmcudmkiLCJ2'@;
put 'biIsImNvbS52biIsIm5ldC52biIsIm9yZy52biIsImVkdS52biIsImdvdi52biIsImludC52biIsImFjLnZuIiwiYml6LnZuIiwiaW5mby52biIsIm5hbWUudm4iLCJwcm8udm4iLCJoZWFsdGgudm4iLCJ2dSIsImNvbS52dSIsImVkdS52dSIsIm5ldC52dSIsIm9yZy52dSIsIndmIiwid3Mi'@;
put 'LCJjb20ud3MiLCJuZXQud3MiLCJvcmcud3MiLCJnb3Yud3MiLCJlZHUud3MiLCJ5dCIsIlx1MDYyN1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDU3MFx1MDU2MVx1MDU3NSIsIlx1MDlhY1x1MDliZVx1MDk4Mlx1MDliMlx1MDliZSIsIlx1MDQzMVx1MDQzMyIsIlx1MDYy'@;
put 'N1x1MDY0NFx1MDYyOFx1MDYyZFx1MDYzMVx1MDY0YVx1MDY0NiIsIlx1MDQzMVx1MDQzNVx1MDQzYiIsIlx1NGUyZFx1NTZmZCIsIlx1NGUyZFx1NTcwYiIsIlx1MDYyN1x1MDY0NFx1MDYyY1x1MDYzMlx1MDYyN1x1MDYyNlx1MDYzMSIsIlx1MDY0NVx1MDYzNVx1MDYzMSIsIlx1MDQzNVx1'@;
put 'MDQ0ZSIsIlx1MDNiNVx1MDNjNSIsIlx1MDY0NVx1MDY0OFx1MDYzMVx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyNyIsIlx1MTBkMlx1MTBkNCIsIlx1MDNiNVx1MDNiYiIsIlx1OTk5OVx1NmUyZiIsIlx1NTE2Y1x1NTNmOC5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIu'@;
put 'XHU5OTk5XHU2ZTJmIiwiXHU2NTNmXHU1ZTljLlx1OTk5OVx1NmUyZiIsIlx1NTAwYlx1NGViYS5cdTk5OTlcdTZlMmYiLCJcdTdkYjJcdTdkNjEuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1MGNhZFx1MGNiZVx1MGNiMFx1MGNhNCIsIlx1MGIyZFx1MGIz'@;
put 'ZVx1MGIzMFx1MGIyNCIsIlx1MDlhZFx1MDliZVx1MDlmMFx1MDlhNCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNFx1MDkyZVx1MDk0ZCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDk0Ylx1MDkyNCIsIlx1MDY4MFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGQyZFx1MGQzZVx1MGQzMFx1MGQy'@;
put 'NFx1MGQwMiIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIsIlx1MDYyOFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MDYyOFx1MDZiZVx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGMyZFx1MGMzZVx1MGMzMFx1MGMyNFx1MGM0ZCIsIlx1MGFhZFx1MGFiZVx1MGFiMFx1MGFhNCIsIlx1MGEyZFx1'@;
put 'MGEzZVx1MGEzMFx1MGEyNCIsIlx1MDlhZFx1MDliZVx1MDliMFx1MDlhNCIsIlx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZSIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1'@;
put 'MDYzMVx1MDYyN1x1MDY0MiIsIlx1MDYyN1x1MDY0NFx1MDYyN1x1MDYzMVx1MDYyZlx1MDY0NiIsIlx1ZDU1Y1x1YWQ2ZCIsIlx1MDQ5Ylx1MDQzMFx1MDQzNyIsIlx1MGVhNVx1MGViMlx1MGVhNyIsIlx1MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRjZiIsIlx1MGI4N1x1MGJiMlx1MGI5OVx1MGJj'@;
put 'ZFx1MGI5NVx1MGJjOCIsIlx1MDYyN1x1MDY0NFx1MDY0NVx1MDYzYVx1MDYzMVx1MDYyOCIsIlx1MDQzY1x1MDQzYVx1MDQzNCIsIlx1MDQzY1x1MDQzZVx1MDQzZCIsIlx1NmZiM1x1OTU4MCIsIlx1NmZiM1x1OTVlOCIsIlx1MDY0NVx1MDY0NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIs'@;
put 'Ilx1MDYzOVx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDZhOVx1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDY0M1x1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY0MVx1MDY0NFx1MDYzM1x1MDYzN1x1MDY0YVx1MDY0NiIsIlx1MDQ0MVx1'@;
put 'MDQ0MFx1MDQzMSIsIlx1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0'@;
put 'NDNcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDMwXHUwNDNhLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0MFx1MDQ0NCIsIlx1MDY0Mlx1MDYzN1x1MDYzMSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDYyOSIsIlx1MDYyN1x1'@;
put 'MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDZjMyIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDY0NyIsIlx1MDYzM1x1MDY0OFx1MDYyZlx1'@;
put 'MDYyN1x1MDY0NiIsIlx1NjViMFx1NTJhMFx1NTc2MSIsIlx1MGI5YVx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJhYVx1MGJjZFx1MGJhYVx1MGJjMlx1MGJiMFx1MGJjZCIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyOSIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYy'@;
put 'NyIsIlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyOFx1MGUzNlx1MGUwMVx1MGUyOVx1MGUzMi5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMThcdTBlMzhcdTBlMjNcdTBlMDFcdTBlMzRcdTBlMDguXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTIzXHUwZTMxXHUwZTEwXHUwZTFhXHUwZTMy'@;
put 'XHUwZTI1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxN1x1MGUyYlx1MGUzMlx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlNDBcdTBlMTlcdTBlNDdcdTBlMTUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTJkXHUwZTA3XHUwZTA0XHUwZTRjXHUwZTAxXHUwZTIzLlx1MGU0NFx1'@;
put 'MGUxN1x1MGUyMiIsIlx1MDYyYVx1MDY0OFx1MDY0Nlx1MDYzMyIsIlx1NTNmMFx1NzA2MyIsIlx1NTNmMFx1NmU3ZSIsIlx1ODFmYVx1NzA2MyIsIlx1MDQ0M1x1MDQzYVx1MDQ0MCIsIlx1MDYyN1x1MDY0NFx1MDY0YVx1MDY0NVx1MDY0NiIsInh4eCIsInllIiwiY29tLnllIiwiZWR1Lnll'@;
put 'IiwiZ292LnllIiwibmV0LnllIiwibWlsLnllIiwib3JnLnllIiwiYWMuemEiLCJhZ3JpYy56YSIsImFsdC56YSIsImNvLnphIiwiZWR1LnphIiwiZ292LnphIiwiZ3JvbmRhci56YSIsImxhdy56YSIsIm1pbC56YSIsIm5ldC56YSIsIm5nby56YSIsIm5pYy56YSIsIm5pcy56YSIsIm5vbS56'@;
put 'YSIsIm9yZy56YSIsInNjaG9vbC56YSIsInRtLnphIiwid2ViLnphIiwiem0iLCJhYy56bSIsImJpei56bSIsImNvLnptIiwiY29tLnptIiwiZWR1LnptIiwiZ292LnptIiwiaW5mby56bSIsIm1pbC56bSIsIm5ldC56bSIsIm9yZy56bSIsInNjaC56bSIsInp3IiwiYWMuenciLCJjby56dyIs'@;
put 'Imdvdi56dyIsIm1pbC56dyIsIm9yZy56dyIsImFhYSIsImFhcnAiLCJhYmFydGgiLCJhYmIiLCJhYmJvdHQiLCJhYmJ2aWUiLCJhYmMiLCJhYmxlIiwiYWJvZ2FkbyIsImFidWRoYWJpIiwiYWNhZGVteSIsImFjY2VudHVyZSIsImFjY291bnRhbnQiLCJhY2NvdW50YW50cyIsImFjbyIsImFj'@;
put 'dG9yIiwiYWRhYyIsImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxmYXJvbWVvIiwiYWxpYmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0'@;
put 'YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIs'@;
put 'ImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIs'@;
put 'ImF1dG8iLCJhdXRvcyIsImF2aWFuY2EiLCJhd3MiLCJheGEiLCJhenVyZSIsImJhYnkiLCJiYWlkdSIsImJhbmFtZXgiLCJiYW5hbmFyZXB1YmxpYyIsImJhbmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMi'@;
put 'LCJiYXNlYmFsbCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwi'@;
put 'YmlrZSIsImJpbmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9v'@;
put 'ayIsImJvb2tpbmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVnYXR0aSIsImJ1aWxkIiwiYnVpbGRlcnMiLCJidXNpbmVz'@;
put 'cyIsImJ1eSIsImJ1enoiLCJiemgiLCJjYWIiLCJjYWZlIiwiY2FsIiwiY2FsbCIsImNhbHZpbmtsZWluIiwiY2FtIiwiY2FtZXJhIiwiY2FtcCIsImNhbmNlcnJlc2VhcmNoIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRz'@;
put 'IiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjYnMiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIs'@;
put 'ImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjaXR5ZWF0cyIsImNsYWltcyIsImNsZWFuaW5nIiwi'@;
put 'Y2xpY2siLCJjbGluaWMiLCJjbGluaXF1ZSIsImNsb3RoaW5nIiwiY2xvdWQiLCJjbHViIiwiY2x1Ym1lZCIsImNvYWNoIiwiY29kZXMiLCJjb2ZmZWUiLCJjb2xsZWdlIiwiY29sb2duZSIsImNvbWNhc3QiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29t'@;
put 'cHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2tpbmdjaGFubmVsIiwiY29vbCIsImNvcnNpY2EiLCJjb3VudHJ5IiwiY291cG9uIiwiY291cG9ucyIsImNvdXJzZXMiLCJjcGEi'@;
put 'LCJjcmVkaXQiLCJjcmVkaXRjYXJkIiwiY3JlZGl0dW5pb24iLCJjcmlja2V0IiwiY3Jvd24iLCJjcnMiLCJjcnVpc2UiLCJjcnVpc2VzIiwiY3Vpc2luZWxsYSIsImN5bXJ1IiwiY3lvdSIsImRhYnVyIiwiZGFkIiwiZGFuY2UiLCJkYXRhIiwiZGF0ZSIsImRhdGluZyIsImRhdHN1biIsImRh'@;
put 'eSIsImRjbGsiLCJkZHMiLCJkZWFsIiwiZGVhbGVyIiwiZGVhbHMiLCJkZWdyZWUiLCJkZWxpdmVyeSIsImRlbGwiLCJkZWxvaXR0ZSIsImRlbHRhIiwiZGVtb2NyYXQiLCJkZW50YWwiLCJkZW50aXN0IiwiZGVzaSIsImRlc2lnbiIsImRldiIsImRobCIsImRpYW1vbmRzIiwiZGlldCIsImRp'@;
put 'Z2l0YWwiLCJkaXJlY3QiLCJkaXJlY3RvcnkiLCJkaXNjb3VudCIsImRpc2NvdmVyIiwiZGlzaCIsImRpeSIsImRucCIsImRvY3MiLCJkb2N0b3IiLCJkb2ciLCJkb21haW5zIiwiZG90IiwiZG93bmxvYWQiLCJkcml2ZSIsImR0diIsImR1YmFpIiwiZHVubG9wIiwiZHVwb250IiwiZHVyYmFu'@;
put 'IiwiZHZhZyIsImR2ciIsImVhcnRoIiwiZWF0IiwiZWNvIiwiZWRla2EiLCJlZHVjYXRpb24iLCJlbWFpbCIsImVtZXJjayIsImVuZXJneSIsImVuZ2luZWVyIiwiZW5naW5lZXJpbmciLCJlbnRlcnByaXNlcyIsImVwc29uIiwiZXF1aXBtZW50IiwiZXJpY3Nzb24iLCJlcm5pIiwiZXNxIiwi'@;
put 'ZXN0YXRlIiwiZXRpc2FsYXQiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2UiLCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJm'@;
put 'YXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWF0IiwiZmlkZWxpdHkiLCJmaWRvIiwiZmlsbSIsImZpbmFsIiwiZmluYW5jZSIsImZpbmFuY2lhbCIsImZpcmUiLCJmaXJlc3RvbmUiLCJmaXJtZGFsZSIsImZpc2giLCJm'@;
put 'aXNoaW5nIiwiZml0IiwiZml0bmVzcyIsImZsaWNrciIsImZsaWdodHMiLCJmbGlyIiwiZmxvcmlzdCIsImZsb3dlcnMiLCJmbHkiLCJmb28iLCJmb29kIiwiZm9vZG5ldHdvcmsiLCJmb290YmFsbCIsImZvcmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3gi'@;
put 'LCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250ZG9vciIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJn'@;
put 'YXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29k'@;
put 'YWRkeSIsImdvbGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWFyZGlhbiIsImd1Y2NpIiwiZ3Vn'@;
put 'ZSIsImd1aWRlIiwiZ3VpdGFycyIsImd1cnUiLCJoYWlyIiwiaGFtYnVyZyIsImhhbmdvdXQiLCJoYXVzIiwiaGJvIiwiaGRmYyIsImhkZmNiYW5rIiwiaGVhbHRoIiwiaGVhbHRoY2FyZSIsImhlbHAiLCJoZWxzaW5raSIsImhlcmUiLCJoZXJtZXMiLCJoZ3R2IiwiaGlwaG9wIiwiaGlzYW1p'@;
put 'dHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJob3RlbGVzIiwiaG90'@;
put 'ZWxzIiwiaG90bWFpbCIsImhvdXNlIiwiaG93IiwiaHNiYyIsImh1Z2hlcyIsImh5YXR0IiwiaHl1bmRhaSIsImlibSIsImljYmMiLCJpY2UiLCJpY3UiLCJpZWVlIiwiaWZtIiwiaWthbm8iLCJpbWFtYXQiLCJpbWRiIiwiaW1tbyIsImltbW9iaWxpZW4iLCJpbmMiLCJpbmR1c3RyaWVzIiwi'@;
put 'aW5maW5pdGkiLCJpbmciLCJpbmsiLCJpbnN0aXR1dGUiLCJpbnN1cmFuY2UiLCJpbnN1cmUiLCJpbnRlcm5hdGlvbmFsIiwiaW50dWl0IiwiaW52ZXN0bWVudHMiLCJpcGlyYW5nYSIsImlyaXNoIiwiaXNtYWlsaSIsImlzdCIsImlzdGFuYnVsIiwiaXRhdSIsIml0diIsImphZ3VhciIsImph'@;
put 'dmEiLCJqY2IiLCJqZWVwIiwiamV0enQiLCJqZXdlbHJ5IiwiamlvIiwiamxsIiwiam1wIiwiam5qIiwiam9idXJnIiwiam90Iiwiam95IiwianBtb3JnYW4iLCJqcHJzIiwianVlZ29zIiwianVuaXBlciIsImthdWZlbiIsImtkZGkiLCJrZXJyeWhvdGVscyIsImtlcnJ5bG9naXN0aWNzIiwi'@;
put 'a2Vycnlwcm9wZXJ0aWVzIiwia2ZoIiwia2lhIiwia2lkcyIsImtpbSIsImtpbmRlciIsImtpbmRsZSIsImtpdGNoZW4iLCJraXdpIiwia29lbG4iLCJrb21hdHN1Iiwia29zaGVyIiwia3BtZyIsImtwbiIsImtyZCIsImtyZWQiLCJrdW9rZ3JvdXAiLCJreW90byIsImxhY2FpeGEiLCJsYW1i'@;
put 'b3JnaGluaSIsImxhbWVyIiwibGFuY2FzdGVyIiwibGFuY2lhIiwibGFuZCIsImxhbmRyb3ZlciIsImxhbnhlc3MiLCJsYXNhbGxlIiwibGF0IiwibGF0aW5vIiwibGF0cm9iZSIsImxhdyIsImxhd3llciIsImxkcyIsImxlYXNlIiwibGVjbGVyYyIsImxlZnJhayIsImxlZ2FsIiwibGVnbyIs'@;
put 'ImxleHVzIiwibGdidCIsImxpZGwiLCJsaWZlIiwibGlmZWluc3VyYW5jZSIsImxpZmVzdHlsZSIsImxpZ2h0aW5nIiwibGlrZSIsImxpbGx5IiwibGltaXRlZCIsImxpbW8iLCJsaW5jb2xuIiwibGluZGUiLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9h'@;
put 'biIsImxvYW5zIiwibG9ja2VyIiwibG9jdXMiLCJsb2Z0IiwibG9sIiwibG9uZG9uIiwibG90dGUiLCJsb3R0byIsImxvdmUiLCJscGwiLCJscGxmaW5hbmNpYWwiLCJsdGQiLCJsdGRhIiwibHVuZGJlY2siLCJsdXhlIiwibHV4dXJ5IiwibWFjeXMiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29u'@;
put 'IiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hhbGxzIiwibWFzZXJhdGkiLCJtYXR0ZWwiLCJtYmEiLCJtY2tpbnNleSIsIm1lZCIsIm1lZGlhIiwibWVldCIsIm1lbGJvdXJu'@;
put 'ZSIsIm1lbWUiLCJtZW1vcmlhbCIsIm1lbiIsIm1lbnUiLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5'@;
put 'IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIiLCJtdXNpYyIsIm11dHVhbCIsIm5hYiIsIm5hZ295YSIsIm5hdHVyYSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwi'@;
put 'bmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRod2VzdGVybm11dHVhbCIs'@;
put 'Im5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGRuYXZ5Iiwib2xsbyIsIm9tZWdhIiwib25lIiwib25nIiwib25sIiwib25saW5l'@;
put 'Iiwib29vIiwib3BlbiIsIm9yYWNsZSIsIm9yYW5nZSIsIm9yZ2FuaWMiLCJvcmlnaW5zIiwib3Nha2EiLCJvdHN1a2EiLCJvdHQiLCJvdmgiLCJwYWdlIiwicGFuYXNvbmljIiwicGFyaXMiLCJwYXJzIiwicGFydG5lcnMiLCJwYXJ0cyIsInBhcnR5IiwicGFzc2FnZW5zIiwicGF5IiwicGNj'@;
put 'dyIsInBldCIsInBmaXplciIsInBoYXJtYWN5IiwicGhkIiwicGhpbGlwcyIsInBob25lIiwicGhvdG8iLCJwaG90b2dyYXBoeSIsInBob3RvcyIsInBoeXNpbyIsInBpY3MiLCJwaWN0ZXQiLCJwaWN0dXJlcyIsInBpZCIsInBpbiIsInBpbmciLCJwaW5rIiwicGlvbmVlciIsInBpenphIiwi'@;
put 'cGxhY2UiLCJwbGF5IiwicGxheXN0YXRpb24iLCJwbHVtYmluZyIsInBsdXMiLCJwbmMiLCJwb2hsIiwicG9rZXIiLCJwb2xpdGllIiwicG9ybiIsInByYW1lcmljYSIsInByYXhpIiwicHJlc3MiLCJwcmltZSIsInByb2QiLCJwcm9kdWN0aW9ucyIsInByb2YiLCJwcm9ncmVzc2l2ZSIsInBy'@;
put 'b21vIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicHJvdGVjdGlvbiIsInBydSIsInBydWRlbnRpYWwiLCJwdWIiLCJwd2MiLCJxcG9uIiwicXVlYmVjIiwicXVlc3QiLCJyYWNpbmciLCJyYWRpbyIsInJlYWQiLCJyZWFsZXN0YXRlIiwicmVhbHRvciIsInJlYWx0eSIsInJlY2lwZXMiLCJy'@;
put 'ZWQiLCJyZWRzdG9uZSIsInJlZHVtYnJlbGxhIiwicmVoYWIiLCJyZWlzZSIsInJlaXNlbiIsInJlaXQiLCJyZWxpYW5jZSIsInJlbiIsInJlbnQiLCJyZW50YWxzIiwicmVwYWlyIiwicmVwb3J0IiwicmVwdWJsaWNhbiIsInJlc3QiLCJyZXN0YXVyYW50IiwicmV2aWV3IiwicmV2aWV3cyIs'@;
put 'InJleHJvdGgiLCJyaWNoIiwicmljaGFyZGxpIiwicmljb2giLCJyaWwiLCJyaW8iLCJyaXAiLCJyb2NoZXIiLCJyb2NrcyIsInJvZGVvIiwicm9nZXJzIiwicm9vbSIsInJzdnAiLCJydWdieSIsInJ1aHIiLCJydW4iLCJyd2UiLCJyeXVreXUiLCJzYWFybGFuZCIsInNhZmUiLCJzYWZldHki'@;
put 'LCJzYWt1cmEiLCJzYWxlIiwic2Fsb24iLCJzYW1zY2x1YiIsInNhbXN1bmciLCJzYW5kdmlrIiwic2FuZHZpa2Nvcm9tYW50Iiwic2Fub2ZpIiwic2FwIiwic2FybCIsInNhcyIsInNhdmUiLCJzYXhvIiwic2JpIiwic2JzIiwic2NhIiwic2NiIiwic2NoYWVmZmxlciIsInNjaG1pZHQiLCJz'@;
put 'Y2hvbGFyc2hpcHMiLCJzY2hvb2wiLCJzY2h1bGUiLCJzY2h3YXJ6Iiwic2NpZW5jZSIsInNjb3QiLCJzZWFyY2giLCJzZWF0Iiwic2VjdXJlIiwic2VjdXJpdHkiLCJzZWVrIiwic2VsZWN0Iiwic2VuZXIiLCJzZXJ2aWNlcyIsInNlcyIsInNldmVuIiwic2V3Iiwic2V4Iiwic2V4eSIsInNm'@;
put 'ciIsInNoYW5ncmlsYSIsInNoYXJwIiwic2hhdyIsInNoZWxsIiwic2hpYSIsInNoaWtzaGEiLCJzaG9lcyIsInNob3AiLCJzaG9wcGluZyIsInNob3VqaSIsInNob3ciLCJzaG93dGltZSIsInNpbGsiLCJzaW5hIiwic2luZ2xlcyIsInNpdGUiLCJza2kiLCJza2luIiwic2t5Iiwic2t5cGUi'@;
put 'LCJzbGluZyIsInNtYXJ0Iiwic21pbGUiLCJzbmNmIiwic29jY2VyIiwic29jaWFsIiwic29mdGJhbmsiLCJzb2Z0d2FyZSIsInNvaHUiLCJzb2xhciIsInNvbHV0aW9ucyIsInNvbmciLCJzb255Iiwic295Iiwic3BhIiwic3BhY2UiLCJzcG9ydCIsInNwb3QiLCJzcmwiLCJzdGFkYSIsInN0'@;
put 'YXBsZXMiLCJzdGFyIiwic3RhdGViYW5rIiwic3RhdGVmYXJtIiwic3RjIiwic3RjZ3JvdXAiLCJzdG9ja2hvbG0iLCJzdG9yYWdlIiwic3RvcmUiLCJzdHJlYW0iLCJzdHVkaW8iLCJzdHVkeSIsInN0eWxlIiwic3Vja3MiLCJzdXBwbGllcyIsInN1cHBseSIsInN1cHBvcnQiLCJzdXJmIiwi'@;
put 'c3VyZ2VyeSIsInN1enVraSIsInN3YXRjaCIsInN3aXNzIiwic3lkbmV5Iiwic3lzdGVtcyIsInRhYiIsInRhaXBlaSIsInRhbGsiLCJ0YW9iYW8iLCJ0YXJnZXQiLCJ0YXRhbW90b3JzIiwidGF0YXIiLCJ0YXR0b28iLCJ0YXgiLCJ0YXhpIiwidGNpIiwidGRrIiwidGVhbSIsInRlY2giLCJ0'@;
put 'ZWNobm9sb2d5IiwidGVtYXNlayIsInRlbm5pcyIsInRldmEiLCJ0aGQiLCJ0aGVhdGVyIiwidGhlYXRyZSIsInRpYWEiLCJ0aWNrZXRzIiwidGllbmRhIiwidGlmZmFueSIsInRpcHMiLCJ0aXJlcyIsInRpcm9sIiwidGptYXh4IiwidGp4IiwidGttYXh4IiwidG1hbGwiLCJ0b2RheSIsInRv'@;
put 'a3lvIiwidG9vbHMiLCJ0b3AiLCJ0b3JheSIsInRvc2hpYmEiLCJ0b3RhbCIsInRvdXJzIiwidG93biIsInRveW90YSIsInRveXMiLCJ0cmFkZSIsInRyYWRpbmciLCJ0cmFpbmluZyIsInRyYXZlbCIsInRyYXZlbGNoYW5uZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0'@;
put 'cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVy'@;
put 'c2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2xrc3dhZ2VuIiwidm9sdm8iLCJ2b3RlIiwidm90aW5n'@;
put 'Iiwidm90byIsInZveWFnZSIsInZ1ZWxvcyIsIndhbGVzIiwid2FsbWFydCIsIndhbHRlciIsIndhbmciLCJ3YW5nZ291Iiwid2F0Y2giLCJ3YXRjaGVzIiwid2VhdGhlciIsIndlYXRoZXJjaGFubmVsIiwid2ViY2FtIiwid2ViZXIiLCJ3ZWJzaXRlIiwid2VkZGluZyIsIndlaWJvIiwid2Vp'@;
put 'ciIsIndob3N3aG8iLCJ3aWVuIiwid2lraSIsIndpbGxpYW1oaWxsIiwid2luIiwid2luZG93cyIsIndpbmUiLCJ3aW5uZXJzIiwid21lIiwid29sdGVyc2tsdXdlciIsIndvb2RzaWRlIiwid29yayIsIndvcmtzIiwid29ybGQiLCJ3b3ciLCJ3dGMiLCJ3dGYiLCJ4Ym94IiwieGVyb3giLCJ4'@;
put 'ZmluaXR5IiwieGlodWFuIiwieGluIiwiXHUwOTE1XHUwOTQ5XHUwOTJlIiwiXHUzMGJiXHUzMGZjXHUzMGViIiwiXHU0ZjViXHU1YzcxIiwiXHU2MTQ4XHU1NTg0IiwiXHU5NmM2XHU1NmUyIiwiXHU1NzI4XHU3ZWJmIiwiXHU3MGI5XHU3NzBiIiwiXHUwZTA0XHUwZTJkXHUwZTIxIiwiXHU1'@;
put 'MTZiXHU1MzY2IiwiXHUwNjQ1XHUwNjQ4XHUwNjQyXHUwNjM5IiwiXHU1MTZjXHU3NmNhIiwiXHU1MTZjXHU1M2Y4IiwiXHU5OTk5XHU2ODNjXHU5MWNjXHU2MmM5IiwiXHU3ZjUxXHU3YWQ5IiwiXHU3OWZiXHU1MmE4IiwiXHU2MjExXHU3MjMxXHU0ZjYwIiwiXHUwNDNjXHUwNDNlXHUwNDQx'@;
put 'XHUwNDNhXHUwNDMyXHUwNDMwIiwiXHUwNDNhXHUwNDMwXHUwNDQyXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhIiwiXHUwNDNlXHUwNDNkXHUwNDNiXHUwNDMwXHUwNDM5XHUwNDNkIiwiXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyIiwiXHU4MDU0XHU5MDFhIiwiXHUwNWU3XHUwNWQ1XHUwNWRk'@;
put 'IiwiXHU2NWY2XHU1YzFhIiwiXHU1ZmFlXHU1MzVhIiwiXHU2ZGUxXHU5YTZjXHU5NTIxIiwiXHUzMGQ1XHUzMGExXHUzMGMzXHUzMGI3XHUzMGU3XHUzMGYzIiwiXHUwNDNlXHUwNDQwXHUwNDMzIiwiXHUwOTI4XHUwOTQ3XHUwOTFmIiwiXHUzMGI5XHUzMGM4XHUzMGEyIiwiXHUzMGEyXHUz'@;
put 'MGRlXHUzMGJlXHUzMGYzIiwiXHVjMGJjXHVjMTMxIiwiXHU1NTQ2XHU2ODA3IiwiXHU1NTQ2XHU1ZTk3IiwiXHU1NTQ2XHU1N2NlIiwiXHUwNDM0XHUwNDM1XHUwNDQyXHUwNDM4IiwiXHUzMGRkXHUzMGE0XHUzMGYzXHUzMGM4IiwiXHU2NWIwXHU5NWZiIiwiXHU1YmI2XHU5NmZiIiwiXHUw'@;
put 'NjQzXHUwNjQ4XHUwNjQ1IiwiXHU0ZTJkXHU2NTg3XHU3ZjUxIiwiXHU0ZTJkXHU0ZmUxIiwiXHU1YTMxXHU0ZTUwIiwiXHU4YzM3XHU2YjRjIiwiXHU5NmZiXHU4YTBhXHU3NmM4XHU3OWQxIiwiXHU4ZDJkXHU3MjY5IiwiXHUzMGFmXHUzMGU5XHUzMGE2XHUzMGM5IiwiXHU5MDFhXHU4Y2E5'@;
put 'IiwiXHU3ZjUxXHU1ZTk3IiwiXHUwOTM4XHUwOTAyXHUwOTE3XHUwOTIwXHUwOTI4IiwiXHU5OTEwXHU1Mzg1IiwiXHU3ZjUxXHU3ZWRjIiwiXHUwNDNhXHUwNDNlXHUwNDNjIiwiXHU0ZTlhXHU5YTZjXHU5MDBhIiwiXHU4YmZhXHU1N2ZhXHU0ZTlhIiwiXHU5OGRmXHU1NGMxIiwiXHU5OGRl'@;
put 'XHU1MjI5XHU2ZDY2IiwiXHU2MjRiXHU2NzNhIiwiXHUwNjI3XHUwNjMxXHUwNjI3XHUwNjQ1XHUwNjQzXHUwNjQ4IiwiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ0XHUwNjRhXHUwNjI3XHUwNjQ2IiwiXHUwNjI3XHUwNjJhXHUwNjM1XHUwNjI3XHUwNjQ0XHUwNjI3XHUwNjJhIiwiXHUwNjI4'@;
put 'XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjI3XHUwNjI4XHUwNjQ4XHUwNjM4XHUwNjI4XHUwNjRhIiwiXHUwNjQzXHUwNjI3XHUwNjJiXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQzIiwiXHUwNjQ3XHUwNjQ1XHUwNjMxXHUwNjI3XHUwNjQ3IiwiXHViMmY3XHVjZWY0IiwiXHU2NTNm'@;
put 'XHU1ZTljIiwiXHUwNjM0XHUwNjI4XHUwNjQzXHUwNjI5IiwiXHUwNjI4XHUwNjRhXHUwNjJhXHUwNjQzIiwiXHUwNjM5XHUwNjMxXHUwNjI4IiwiXHU2NzNhXHU2Nzg0IiwiXHU3ZWM0XHU3ZWM3XHU2NzNhXHU2Nzg0IiwiXHU1MDY1XHU1ZWI3IiwiXHU2MmRiXHU4MDU4IiwiXHUwNDQwXHUw'@;
put 'NDQzXHUwNDQxIiwiXHU1OTI3XHU2MmZmIiwiXHUzMDdmXHUzMDkzXHUzMDZhIiwiXHUzMGIwXHUzMGZjXHUzMGIwXHUzMGViIiwiXHU0ZTE2XHU3NTRjIiwiXHU2NmY4XHU3YzRkIiwiXHU3ZjUxXHU1NzQwIiwiXHViMmY3XHViMTM3IiwiXHUzMGIzXHUzMGUwIiwiXHU1OTI5XHU0ZTNiXHU2'@;
put 'NTU5IiwiXHU2ZTM4XHU2MjBmIiwidmVybVx4ZjZnZW5zYmVyYXRlciIsInZlcm1ceGY2Z2Vuc2JlcmF0dW5nIiwiXHU0ZjAxXHU0ZTFhIiwiXHU0ZmUxXHU2MDZmIiwiXHU1NjA5XHU5MWNjXHU1OTI3XHU5MTUyXHU1ZTk3IiwiXHU1NjA5XHU5MWNjIiwiXHU1ZTdmXHU0ZTFjIiwiXHU2NTNm'@;
put 'XHU1MmExIiwieHl6IiwieWFjaHRzIiwieWFob28iLCJ5YW1heHVuIiwieWFuZGV4IiwieW9kb2Jhc2hpIiwieW9nYSIsInlva29oYW1hIiwieW91IiwieW91dHViZSIsInl1biIsInphcHBvcyIsInphcmEiLCJ6ZXJvIiwiemlwIiwiem9uZSIsInp1ZXJpY2giLCJjYy51YSIsImluZi51YSIs'@;
put 'Imx0ZC51YSIsIjYxMS50byIsImdyYXBob3gudXMiLCIqLmRldmNkbmFjY2Vzc28uY29tIiwiYWRvYmVhZW1jbG91ZC5jb20iLCIqLmRldi5hZG9iZWFlbWNsb3VkLmNvbSIsImhseC5saXZlIiwiYWRvYmVhZW1jbG91ZC5uZXQiLCJobHgucGFnZSIsImhseDMucGFnZSIsImJlZXAucGwiLCJh'@;
put 'aXJraXRhcHBzLmNvbSIsImFpcmtpdGFwcHMtYXUuY29tIiwiYWlya2l0YXBwcy5ldSIsImFpdmVuY2xvdWQuY29tIiwiYmFyc3kuY2EiLCIqLmNvbXB1dGUuZXN0YXRlIiwiKi5hbGNlcy5uZXR3b3JrIiwia2Fzc2VydmVyLmNvbSIsImFsdGVydmlzdGEub3JnIiwiYWx3YXlzZGF0YS5uZXQi'@;
put 'LCJjbG91ZGZyb250Lm5ldCIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tLmNuIiwidXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJjbi1ub3J0aC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJjbi1u'@;
put 'b3J0aHdlc3QtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5j'@;
put 'b20iLCJhcC1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImNhLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LWNlbnRyYWwtMS5l'@;
put 'bGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInNhLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMS5l'@;
put 'bGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5h'@;
put 'bWF6b25hd3MuY29tIiwiKi5lbGIuYW1hem9uYXdzLmNvbS5jbiIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRo'@;
put 'LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5h'@;
put 'bWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5j'@;
put 'b20iLCJzMy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAt'@;
put 'c291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFt'@;
put 'YXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3Mu'@;
put 'Y29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0'@;
put 'ZS11cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUt'@;
put 'ZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLWNlbnRyYWwt'@;
put 'MS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTIuYW1hem9uYXdzLmNv'@;
put 'bSIsInQzbDNwMHJ0Lm5ldCIsInRlbGUuYW11bmUub3JnIiwiYXBpZ2VlLmlvIiwic2lpaXRlcy5jb20iLCJhcHBzcGFjZWhvc3RlZC5jb20iLCJhcHBzcGFjZXVzZXJjb250ZW50LmNvbSIsImFwcHVkby5uZXQiLCJvbi1hcHRpYmxlLmNvbSIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZj'@;
put 'IiwiZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubmV0'@;
put 'Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhY2twbGFuZWFwcC5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIsInJzLmJhIiwiKi5iYW56YWkuY2xvdWQiLCJhcHAuYmFuemFpY2xvdWQuaW8iLCIq'@;
put 'LmJhY2t5YXJkcy5iYW56YWljbG91ZC5pbyIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNl'@;
put 'LnNob3AiLCIqLmJlZ2V0LmFwcCIsImJldGFpbmFib3guY29tIiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5j'@;
put 'b20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFyay5pbyIsInVrMC5iaWd2LmlvIiwiZGguYnl0ZW1hcmsuY28udWsiLCJ2bS5ieXRlbWFyay5jby51ayIsImNhZmpzLmNvbSIs'@;
put 'Im15Y2QuZXUiLCJkcnIuYWMiLCJ1d3UuYWkiLCJjYXJyZC5jbyIsImNyZC5jbyIsImp1Lm1wIiwiYWUub3JnIiwiYnIuY29tIiwiY24uY29tIiwiY29tLmRlIiwiY29tLnNlIiwiZGUuY29tIiwiZXUuY29tIiwiZ2IubmV0IiwiaHUubmV0IiwianAubmV0IiwianBuLmNvbSIsIm1leC5jb20i'@;
put 'LCJydS5jb20iLCJzYS5jb20iLCJzZS5uZXQiLCJ1ay5jb20iLCJ1ay5uZXQiLCJ1cy5jb20iLCJ6YS5ieiIsInphLmNvbSIsImFyLmNvbSIsImh1LmNvbSIsImtyLmNvbSIsIm5vLmNvbSIsInFjLmNvbSIsInV5LmNvbSIsImFmcmljYS5jb20iLCJnci5jb20iLCJpbi5uZXQiLCJ3ZWIuaW4i'@;
put 'LCJ1cy5vcmciLCJjby5jb20iLCJhdXMuYmFza2V0YmFsbCIsIm56LmJhc2tldGJhbGwiLCJyYWRpby5hbSIsInJhZGlvLmZtIiwiYy5sYSIsImNlcnRtZ3Iub3JnIiwiY3gudWEiLCJkaXNjb3Vyc2UuZ3JvdXAiLCJkaXNjb3Vyc2UudGVhbSIsImNsZXZlcmFwcHMuaW8iLCJjbGVyay5hcHAi'@;
put 'LCJjbGVya3N0YWdlLmFwcCIsIioubGNsLmRldiIsIioubGNsc3RhZ2UuZGV2IiwiKi5zdGcuZGV2IiwiKi5zdGdzdGFnZS5kZXYiLCJjbGlja3Jpc2luZy5uZXQiLCJjNjYubWUiLCJjbG91ZDY2LndzIiwiY2xvdWQ2Ni56b25lIiwiamRldmNsb3VkLmNvbSIsIndwZGV2Y2xvdWQuY29tIiwi'@;
put 'Y2xvdWRhY2Nlc3MuaG9zdCIsImZyZWVzaXRlLmhvc3QiLCJjbG91ZGFjY2Vzcy5uZXQiLCJjbG91ZGNvbnRyb2xsZWQuY29tIiwiY2xvdWRjb250cm9sYXBwLmNvbSIsIiouY2xvdWRlcmEuc2l0ZSIsInBhZ2VzLmRldiIsInRyeWNsb3VkZmxhcmUuY29tIiwid29ya2Vycy5kZXYiLCJ3bmV4'@;
put 'dC5hcHAiLCJjby5jYSIsIioub3RhcC5jbyIsImNvLmN6IiwiYy5jZG43Ny5vcmciLCJjZG43Ny1zc2wubmV0Iiwici5jZG43Ny5uZXQiLCJyc2MuY2RuNzcub3JnIiwic3NsLm9yaWdpbi5jZG43Ny1zZWN1cmUub3JnIiwiY2xvdWRucy5hc2lhIiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNs'@;
put 'dWIiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJjbG91ZG5zLm9yZyIsImNsb3VkbnMucHJvIiwiY2xvdWRucy5wdyIsImNsb3VkbnMudXMiLCJjbnB5LmdkbiIsImNvZGViZXJnLnBhZ2UiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGlu'@;
put 'Zy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImFjLnJ1IiwiZWR1LnJ1IiwiZ292LnJ1IiwiaW50LnJ1IiwibWlsLnJ1IiwidGVzdC5ydSIsImR5bi5jb3NpZG5zLmRlIiwiZHluYW1pc2NoZXMtZG5zLmRlIiwiZG5zdXBkYXRlci5kZSIsImludGVybmV0LWRucy5kZSIsImwtby1nLWktbi5k'@;
put 'ZSIsImR5bmFtaWMtZG5zLmluZm8iLCJmZXN0ZS1pcC5uZXQiLCJrbngtc2VydmVyLm5ldCIsInN0YXRpYy1hY2Nlc3MubmV0IiwicmVhbG0uY3oiLCIqLmNyeXB0b25vbWljLm5ldCIsImN1cGNha2UuaXMiLCJjdXJ2LmRldiIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVy'@;
put 'LW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsImN5b24ubGluayIsImN5b24uc2l0ZSIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImRhcGxpZS5tZSIsImxvY2FsaG9zdC5kYXBsaWUubWUi'@;
put 'LCJkYXR0b2xvY2FsLmNvbSIsImRhdHRvcmVsYXkuY29tIiwiZGF0dG93ZWIuY29tIiwibXlkYXR0by5jb20iLCJkYXR0b2xvY2FsLm5ldCIsIm15ZGF0dG8ubmV0IiwiYml6LmRrIiwiY28uZGsiLCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCIq'@;
put 'LmRhcHBzLmVhcnRoIiwiKi5ienouZGFwcHMuZWFydGgiLCJidWlsdHdpdGhkYXJrLmNvbSIsImRlbW8uZGF0YWRldGVjdC5jb20iLCJpbnN0YW5jZS5kYXRhZGV0ZWN0LmNvbSIsImVkZ2VzdGFjay5tZSIsImRkbnM1LmNvbSIsImRlYmlhbi5uZXQiLCJkZW5vLmRldiIsImRlbm8tc3RhZ2lu'@;
put 'Zy5kZXYiLCJkZWR5bi5pbyIsImRldGEuYXBwIiwiZGV0YS5kZXYiLCIqLnJzcy5teS5pZCIsIiouZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMu'@;
put 'Y29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsIm15ZHJvYm8uY29tIiwiZHJ1ZC5pbyIsImRydWQudXMiLCJkdWNrZG5zLm9yZyIsImJpcC5zaCIsImJpdGJyaWRnZS5uZXQiLCJkeS5maSIsInR1bmsub3JnIiwiZHluZG5zLWF0LWhvbWUuY29tIiwiZHluZG5zLWF0LXdv'@;
put 'cmsuY29tIiwiZHluZG5zLWJsb2cuY29tIiwiZHluZG5zLWZyZWUuY29tIiwiZHluZG5zLWhvbWUuY29tIiwiZHluZG5zLWlwLmNvbSIsImR5bmRucy1tYWlsLmNvbSIsImR5bmRucy1vZmZpY2UuY29tIiwiZHluZG5zLXBpY3MuY29tIiwiZHluZG5zLXJlbW90ZS5jb20iLCJkeW5kbnMtc2Vy'@;
put 'dmVyLmNvbSIsImR5bmRucy13ZWIuY29tIiwiZHluZG5zLXdpa2kuY29tIiwiZHluZG5zLXdvcmsuY29tIiwiZHluZG5zLmJpeiIsImR5bmRucy5pbmZvIiwiZHluZG5zLm9yZyIsImR5bmRucy50diIsImF0LWJhbmQtY2FtcC5uZXQiLCJhdGguY3giLCJiYXJyZWwtb2Yta25vd2xlZGdlLmlu'@;
put 'Zm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiYmV0dGVyLXRoYW4udHYiLCJibG9nZG5zLmNvbSIsImJsb2dkbnMubmV0IiwiYmxvZ2Rucy5vcmciLCJibG9nc2l0ZS5vcmciLCJib2xkbHlnb2luZ25vd2hlcmUub3JnIiwiYnJva2UtaXQubmV0IiwiYnV5c2hvdXNlcy5uZXQiLCJj'@;
put 'ZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2FsaWFzLm5ldCIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8uY29tIiwiZG5zZG9qby5uZXQiLCJkbnNkb2pvLm9yZyIsImRvZXMtaXQubmV0IiwiZG9lc250ZXhpc3QuY29tIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0LmNvbSIs'@;
put 'ImRvbnRleGlzdC5uZXQiLCJkb250ZXhpc3Qub3JnIiwiZG9vbWRucy5jb20iLCJkb29tZG5zLm9yZyIsImR2cmRucy5vcmciLCJkeW4tby1zYXVyLmNvbSIsImR5bmFsaWFzLmNvbSIsImR5bmFsaWFzLm5ldCIsImR5bmFsaWFzLm9yZyIsImR5bmF0aG9tZS5uZXQiLCJkeW5kbnMud3MiLCJl'@;
put 'bmRvZmludGVybmV0Lm5ldCIsImVuZG9maW50ZXJuZXQub3JnIiwiZW5kb2Z0aGVpbnRlcm5ldC5vcmciLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmb3ItYmV0dGVyLmJpeiIs'@;
put 'ImZvci1tb3JlLmJpeiIsImZvci1vdXIuaW5mbyIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6IiwiZm9yZ290Lmhlci5uYW1lIiwiZm9yZ290Lmhpcy5uYW1lIiwiZnJvbS1hay5jb20iLCJmcm9tLWFsLmNvbSIsImZyb20tYXIuY29tIiwiZnJvbS1hei5uZXQiLCJmcm9tLWNhLmNvbSIs'@;
put 'ImZyb20tY28ubmV0IiwiZnJvbS1jdC5jb20iLCJmcm9tLWRjLmNvbSIsImZyb20tZGUuY29tIiwiZnJvbS1mbC5jb20iLCJmcm9tLWdhLmNvbSIsImZyb20taGkuY29tIiwiZnJvbS1pYS5jb20iLCJmcm9tLWlkLmNvbSIsImZyb20taWwuY29tIiwiZnJvbS1pbi5jb20iLCJmcm9tLWtzLmNv'@;
put 'bSIsImZyb20ta3kuY29tIiwiZnJvbS1sYS5uZXQiLCJmcm9tLW1hLmNvbSIsImZyb20tbWQuY29tIiwiZnJvbS1tZS5vcmciLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5k'@;
put 'LmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW55Lm5ldCIsImZyb20tb2guY29tIiwiZnJvbS1vay5jb20iLCJmcm9tLW9yLmNvbSIsImZyb20tcGEuY29tIiwiZnJvbS1wci5jb20iLCJmcm9t'@;
put 'LXJpLmNvbSIsImZyb20tc2MuY29tIiwiZnJvbS1zZC5jb20iLCJmcm9tLXRuLmNvbSIsImZyb20tdHguY29tIiwiZnJvbS11dC5jb20iLCJmcm9tLXZhLmNvbSIsImZyb20tdnQuY29tIiwiZnJvbS13YS5jb20iLCJmcm9tLXdpLmNvbSIsImZyb20td3YuY29tIiwiZnJvbS13eS5jb20iLCJm'@;
put 'dHBhY2Nlc3MuY2MiLCJmdWV0dGVydGRhc25ldHouZGUiLCJnYW1lLWhvc3Qub3JnIiwiZ2FtZS1zZXJ2ZXIuY2MiLCJnZXRteWlwLmNvbSIsImdldHMtaXQubmV0IiwiZ28uZHluZG5zLm9yZyIsImdvdGRucy5jb20iLCJnb3RkbnMub3JnIiwiZ3Jva3MtdGhlLmluZm8iLCJncm9rcy10aGlz'@;
put 'LmluZm8iLCJoYW0tcmFkaW8tb3AubmV0IiwiaGVyZS1mb3ItbW9yZS5pbmZvIiwiaG9iYnktc2l0ZS5jb20iLCJob2JieS1zaXRlLm9yZyIsImhvbWUuZHluZG5zLm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5uZXQiLCJob21lZnRwLm9yZyIsImhvbWVpcC5uZXQiLCJob21lbGludXgu'@;
put 'Y29tIiwiaG9tZWxpbnV4Lm5ldCIsImhvbWVsaW51eC5vcmciLCJob21ldW5peC5jb20iLCJob21ldW5peC5uZXQiLCJob21ldW5peC5vcmciLCJpYW1hbGxhbWEuY29tIiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1hbmFyY2hpc3QuY29tIiwiaXMtYS1ibG9nZ2VyLmNvbSIsImlzLWEtYm9v'@;
put 'a2tlZXBlci5jb20iLCJpcy1hLWJydWluc2Zhbi5vcmciLCJpcy1hLWJ1bGxzLWZhbi5jb20iLCJpcy1hLWNhbmRpZGF0ZS5vcmciLCJpcy1hLWNhdGVyZXIuY29tIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNoZWYubmV0IiwiaXMtYS1jaGVmLm9yZyIs'@;
put 'ImlzLWEtY29uc2VydmF0aXZlLmNvbSIsImlzLWEtY3BhLmNvbSIsImlzLWEtY3ViaWNsZS1zbGF2ZS5jb20iLCJpcy1hLWRlbW9jcmF0LmNvbSIsImlzLWEtZGVzaWduZXIuY29tIiwiaXMtYS1kb2N0b3IuY29tIiwiaXMtYS1maW5hbmNpYWxhZHZpc29yLmNvbSIsImlzLWEtZ2Vlay5jb20i'@;
put 'LCJpcy1hLWdlZWsubmV0IiwiaXMtYS1nZWVrLm9yZyIsImlzLWEtZ3JlZW4uY29tIiwiaXMtYS1ndXJ1LmNvbSIsImlzLWEtaGFyZC13b3JrZXIuY29tIiwiaXMtYS1odW50ZXIuY29tIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1sYW5kc2NhcGVyLmNvbSIsImlzLWEtbGF3eWVyLmNvbSIs'@;
put 'ImlzLWEtbGliZXJhbC5jb20iLCJpcy1hLWxpYmVydGFyaWFuLmNvbSIsImlzLWEtbGludXgtdXNlci5vcmciLCJpcy1hLWxsYW1hLmNvbSIsImlzLWEtbXVzaWNpYW4uY29tIiwiaXMtYS1uYXNjYXJmYW4uY29tIiwiaXMtYS1udXJzZS5jb20iLCJpcy1hLXBhaW50ZXIuY29tIiwiaXMtYS1w'@;
put 'YXRzZmFuLm9yZyIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc294ZmFuLm9yZyIsImlz'@;
put 'LWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1h'@;
put 'cnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtYnkudXMiLCJpcy1jZXJ0aWZpZWQuY29tIiwiaXMtZm91bmQub3JnIiwiaXMtZ29uZS5jb20iLCJpcy1pbnRvLWFuaW1lLmNvbSIsImlzLWludG8tY2Fycy5jb20iLCJpcy1pbnRvLWNh'@;
put 'cnRvb25zLmNvbSIsImlzLWludG8tZ2FtZXMuY29tIiwiaXMtbGVldC5jb20iLCJpcy1sb3N0Lm9yZyIsImlzLW5vdC1jZXJ0aWZpZWQuY29tIiwiaXMtc2F2ZWQub3JnIiwiaXMtc2xpY2suY29tIiwiaXMtdWJlcmxlZXQuY29tIiwiaXMtdmVyeS1iYWQub3JnIiwiaXMtdmVyeS1ldmlsLm9y'@;
put 'ZyIsImlzLXZlcnktZ29vZC5vcmciLCJpcy12ZXJ5LW5pY2Uub3JnIiwiaXMtdmVyeS1zd2VldC5vcmciLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWdlZWsubmV0IiwiaXNhLWdlZWsub3JnIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91'@;
put 'LmNvbSIsImlzdGVpbmdlZWsuZGUiLCJpc3RtZWluLmRlIiwia2lja3MtYXNzLm5ldCIsImtpY2tzLWFzcy5vcmciLCJrbm93c2l0YWxsLmluZm8iLCJsYW5kLTQtc2FsZS51cyIsImxlYnRpbW5ldHouZGUiLCJsZWl0dW5nc2VuLmRlIiwibGlrZXMtcGllLmNvbSIsImxpa2VzY2FuZHkuY29t'@;
put 'IiwibWVyc2VpbmUubnUiLCJtaW5lLm51IiwibWlzY29uZnVzZWQub3JnIiwibXlwZXRzLndzIiwibXlwaG90b3MuY2MiLCJuZWF0LXVybC5jb20iLCJvZmZpY2Utb24tdGhlLm5ldCIsIm9uLXRoZS13ZWIudHYiLCJwb2R6b25lLm5ldCIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmci'@;
put 'LCJzYXZlcy10aGUtd2hhbGVzLmNvbSIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2NyYXBwaW5nLmNjIiwic2VsZmlwLmJpeiIsInNlbGZpcC5jb20iLCJzZWxmaXAuaW5mbyIsInNlbGZpcC5uZXQiLCJzZWxmaXAub3JnIiwic2VsbHMtZm9yLWxlc3MuY29tIiwic2VsbHMtZm9yLXUuY29tIiwi'@;
put 'c2VsbHMtaXQubmV0Iiwic2VsbHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5jb20iLCJzZXJ2ZWJicy5uZXQiLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5uZXQiLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdhbWUub3JnIiwic2hhY2tuZXQubnUiLCJzaW1wbGUtdXJsLmNvbSIsInNwYWNlLXRv'@;
put 'LXJlbnQuY29tIiwic3R1ZmYtNC1zYWxlLm9yZyIsInN0dWZmLTQtc2FsZS51cyIsInRlYWNoZXMteW9nYS5jb20iLCJ0aHJ1aGVyZS5uZXQiLCJ0cmFldW10Z2VyYWRlLmRlIiwid2ViaG9wLmJpeiIsIndlYmhvcC5pbmZvIiwid2ViaG9wLm5ldCIsIndlYmhvcC5vcmciLCJ3b3JzZS10aGFu'@;
put 'LnR2Iiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiZGRuc3MuZGUiLCJkeW4uZGRuc3MuZGUiLCJkeW5kbnMuZGRuc3MuZGUiLCJkeW5kbnMxLmRlIiwiZHluLWlwMjQuZGUiLCJob21lLXdlYnNlcnZlci5kZSIsImR5bi5ob21lLXdlYnNlcnZlci5kZSIsIm15aG9tZS1zZXJ2ZXIuZGUiLCJkZG5z'@;
put 'cy5vcmciLCJkZWZpbmltYS5uZXQiLCJkZWZpbmltYS5pbyIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsImJjaS5kbnN0cmFjZS5wcm8iLCJkZG5zZnJlZS5jb20iLCJkZG5zZ2Vlay5jb20iLCJnaWl6ZS5jb20iLCJnbGVlemUuY29tIiwia296b3cu'@;
put 'Y29tIiwibG9zZXlvdXJpcC5jb20iLCJvb2d1eS5jb20iLCJ0aGV3b3JrcGMuY29tIiwiY2FzYWNhbS5uZXQiLCJkeW51Lm5ldCIsImFjY2Vzc2NhbS5vcmciLCJjYW1kdnIub3JnIiwiZnJlZWRkbnMub3JnIiwibXl3aXJlLm9yZyIsIndlYnJlZGlyZWN0Lm9yZyIsIm15ZGRucy5yb2NrcyIs'@;
put 'ImJsb2dzaXRlLnh5eiIsImR5bnY2Lm5ldCIsImU0LmN6IiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImVsZW1lbnRvci5jbG91ZCIsImVsZW1lbnRvci5jb29sIiwiZW4tcm9vdC5mciIsIm15dHVsZWFwLmNvbSIsInR1bGVhcC1wYXJ0bmVycy5jb20iLCJlbmNyLmFwcCIs'@;
put 'ImVuY29yZWFwaS5jb20iLCJvbnJlZC5vbmUiLCJzdGFnaW5nLm9ucmVkLm9uZSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNk'@;
put 'LmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5ldS5vcmci'@;
put 'LCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWMuZXUub3JnIiwibWUuZXUu'@;
put 'b3JnIiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIsInBhcmlzLmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInEtYS5ldS5vcmciLCJyby5ldS5vcmci'@;
put 'LCJydS5ldS5vcmciLCJzZS5ldS5vcmciLCJzaS5ldS5vcmciLCJzay5ldS5vcmciLCJ0ci5ldS5vcmciLCJ1ay5ldS5vcmciLCJ1cy5ldS5vcmciLCJldXJvZGlyLnJ1IiwiZXUtMS5ldmVubm9kZS5jb20iLCJldS0yLmV2ZW5ub2RlLmNvbSIsImV1LTMuZXZlbm5vZGUuY29tIiwiZXUtNC5l'@;
put 'dmVubm9kZS5jb20iLCJ1cy0xLmV2ZW5ub2RlLmNvbSIsInVzLTIuZXZlbm5vZGUuY29tIiwidXMtMy5ldmVubm9kZS5jb20iLCJ1cy00LmV2ZW5ub2RlLmNvbSIsInR3bWFpbC5jYyIsInR3bWFpbC5uZXQiLCJ0d21haWwub3JnIiwibXltYWlsZXIuY29tLnR3IiwidXJsLnR3Iiwib25mYWJy'@;
put 'aWNhLmNvbSIsImFwcHMuZmJzYnguY29tIiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlh'@;
put 'LnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJh'@;
put 'cm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEu'@;
put 'c3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1Iiwi'@;
put 'bGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1'@;
put 'Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0Iiwi'@;
put 'dS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZhc3RseWxiLm5ldCIsIm1hcC5mYXN0bHlsYi5uZXQiLCJmcmVldGxzLmZhc3RseS5uZXQiLCJtYXAuZmFzdGx5Lm5ldCIsImEucHJvZC5mYXN0bHkubmV0IiwiZ2xvYmFsLnByb2Qu'@;
put 'ZmFzdGx5Lm5ldCIsImEuc3NsLmZhc3RseS5uZXQiLCJiLnNzbC5mYXN0bHkubmV0IiwiZ2xvYmFsLnNzbC5mYXN0bHkubmV0IiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJmZWRvcmFpbmZy'@;
put 'YWNsb3VkLm9yZyIsImZlZG9yYXBlb3BsZS5vcmciLCJjbG91ZC5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5zdGcuZmVkb3JhcHJvamVjdC5vcmciLCJjb25uLnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwibXlkb2Jpc3MuY29tIiwiZmgt'@;
put 'bXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5tZSIsImZpbGVnZWFyLWF1Lm1lIiwiZmlsZWdlYXItZGUubWUiLCJmaWxlZ2Vhci1nYi5tZSIsImZpbGVnZWFyLWllLm1lIiwiZmlsZWdlYXItanAubWUiLCJmaWxlZ2Vhci1zZy5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZpcmV3ZWIuYXBwIiwiZmxh'@;
put 'cC5pZCIsIm9uZmxhc2hkcml2ZS5hcHAiLCJmbGRydi5jb20iLCJmbHkuZGV2IiwiZWRnZWFwcC5uZXQiLCJzaHcuaW8iLCJmbHlubmhvc3RpbmcubmV0IiwiZm9yZ2VibG9ja3MuY29tIiwiaWQuZm9yZ2Vyb2NrLmlvIiwiZnJhbWVyLmFwcCIsImZyYW1lcmNhbnZhcy5jb20iLCIqLmZydXNr'@;
put 'eS5kZSIsInJhdnBhZ2UuY28uaWwiLCIwZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hvcy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIndpZW4uZnVua2ZldWVy'@;
put 'LmF0IiwiKi5mdXR1cmVjbXMuYXQiLCIqLmV4LmZ1dHVyZWNtcy5hdCIsIiouaW4uZnV0dXJlY21zLmF0IiwiZnV0dXJlaG9zdGluZy5hdCIsImZ1dHVyZW1haWxpbmcuYXQiLCIqLmV4Lm9ydHNpbmZvLmF0IiwiKi5rdW5kZW4ub3J0c2luZm8uYXQiLCIqLnN0YXRpY3MuY2xvdWQiLCJpbmRl'@;
put 'cGVuZGVudC1jb21taXNzaW9uLnVrIiwiaW5kZXBlbmRlbnQtaW5xdWVzdC51ayIsImluZGVwZW5kZW50LWlucXVpcnkudWsiLCJpbmRlcGVuZGVudC1wYW5lbC51ayIsImluZGVwZW5kZW50LXJldmlldy51ayIsInB1YmxpYy1pbnF1aXJ5LnVrIiwicm95YWwtY29tbWlzc2lvbi51ayIsImNh'@;
put 'bXBhaWduLmdvdi51ayIsInNlcnZpY2UuZ292LnVrIiwiYXBpLmdvdi51ayIsImdlaGlybi5uZS5qcCIsInVzZXJjb250ZW50LmpwIiwiZ2VudGFwcHMuY29tIiwiZ2VudGxlbnRhcGlzLmNvbSIsImxhYi5tcyIsImNkbi1lZGdlcy5uZXQiLCJnaG9zdC5pbyIsImdzai5ieiIsImdpdGh1YnVz'@;
put 'ZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5q'@;
put 'cCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2Fw'@;
put 'cGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNt'@;
put 'LmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVy'@;
put 'LmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxv'@;
put 'bGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBh'@;
put 'cmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAi'@;
put 'LCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZl'@;
put 'cnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJjbG91ZGFwcHMuZGlnaXRhbCIsImxvbmRvbi5jbG91ZGFwcHMuZGlnaXRhbCIsInB5bW50LnVrIiwiaG9tZW9mZmlj'@;
put 'ZS5nb3YudWsiLCJyby5pbSIsImdvaXAuZGUiLCJydW4uYXBwIiwiYS5ydW4uYXBwIiwid2ViLmFwcCIsIiouMGVtbS5jb20iLCJhcHBzcG90LmNvbSIsIiouci5hcHBzcG90LmNvbSIsImNvZGVzcG90LmNvbSIsImdvb2dsZWFwaXMuY29tIiwiZ29vZ2xlY29kZS5jb20iLCJwYWdlc3BlZWRt'@;
put 'b2JpbGl6ZXIuY29tIiwicHVibGlzaHByb3h5LmNvbSIsIndpdGhnb29nbGUuY29tIiwid2l0aHlvdXR1YmUuY29tIiwiKi5nYXRld2F5LmRldiIsImNsb3VkLmdvb2ciLCJ0cmFuc2xhdGUuZ29vZyIsIioudXNlcmNvbnRlbnQuZ29vZyIsImNsb3VkZnVuY3Rpb25zLm5ldCIsImJsb2dzcG90'@;
put 'LmFlIiwiYmxvZ3Nwb3QuYWwiLCJibG9nc3BvdC5hbSIsImJsb2dzcG90LmJhIiwiYmxvZ3Nwb3QuYmUiLCJibG9nc3BvdC5iZyIsImJsb2dzcG90LmJqIiwiYmxvZ3Nwb3QuY2EiLCJibG9nc3BvdC5jZiIsImJsb2dzcG90LmNoIiwiYmxvZ3Nwb3QuY2wiLCJibG9nc3BvdC5jby5hdCIsImJs'@;
put 'b2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3QuY28uaWwiLCJibG9nc3BvdC5jby5rZSIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jby56YSIsImJsb2dzcG90LmNvbSIsImJsb2dzcG90LmNvbS5hciIsImJsb2dzcG90LmNvbS5hdSIsImJsb2dzcG90LmNvbS5i'@;
put 'ciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNvbS5jbyIsImJsb2dzcG90LmNvbS5jeSIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dzcG90LmNvbS5lcyIsImJsb2dzcG90LmNvbS5tdCIsImJsb2dzcG90LmNvbS5uZyIsImJsb2dzcG90LmNvbS50ciIs'@;
put 'ImJsb2dzcG90LmNvbS51eSIsImJsb2dzcG90LmN2IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsImJsb2dzcG90LmRrIiwiYmxvZ3Nwb3QuZmkiLCJibG9nc3BvdC5mciIsImJsb2dzcG90LmdyIiwiYmxvZ3Nwb3QuaGsiLCJibG9nc3BvdC5ociIsImJsb2dzcG90Lmh1IiwiYmxvZ3Nw'@;
put 'b3QuaWUiLCJibG9nc3BvdC5pbiIsImJsb2dzcG90LmlzIiwiYmxvZ3Nwb3QuaXQiLCJibG9nc3BvdC5qcCIsImJsb2dzcG90LmtyIiwiYmxvZ3Nwb3QubGkiLCJibG9nc3BvdC5sdCIsImJsb2dzcG90Lmx1IiwiYmxvZ3Nwb3QubWQiLCJibG9nc3BvdC5tayIsImJsb2dzcG90Lm1yIiwiYmxv'@;
put 'Z3Nwb3QubXgiLCJibG9nc3BvdC5teSIsImJsb2dzcG90Lm5sIiwiYmxvZ3Nwb3Qubm8iLCJibG9nc3BvdC5wZSIsImJsb2dzcG90LnB0IiwiYmxvZ3Nwb3QucWEiLCJibG9nc3BvdC5yZSIsImJsb2dzcG90LnJvIiwiYmxvZ3Nwb3QucnMiLCJibG9nc3BvdC5ydSIsImJsb2dzcG90LnNlIiwi'@;
put 'YmxvZ3Nwb3Quc2ciLCJibG9nc3BvdC5zaSIsImJsb2dzcG90LnNrIiwiYmxvZ3Nwb3Quc24iLCJibG9nc3BvdC50ZCIsImJsb2dzcG90LnR3IiwiYmxvZ3Nwb3QudWciLCJibG9nc3BvdC52biIsImdvdXBpbGUuZnIiLCJnb3YubmwiLCJhd3NtcHBsLmNvbSIsImdceGZjbnN0aWdiZXN0ZWxs'@;
put 'ZW4uZGUiLCJnXHhmY25zdGlnbGllZmVybi5kZSIsImZpbi5jaSIsImZyZWUuaHIiLCJjYWEubGkiLCJ1YS5ycyIsImNvbmYuc2UiLCJocy56b25lIiwiaHMucnVuIiwiaGFzaGJhbmcuc2giLCJoYXN1cmEuYXBwIiwiaGFzdXJhLWFwcC5pbyIsInBhZ2VzLml0LmhzLWhlaWxicm9ubi5kZSIs'@;
put 'ImhlcGZvcmdlLm9yZyIsImhlcm9rdWFwcC5jb20iLCJoZXJva3Vzc2wuY29tIiwicmF2ZW5kYi5jbG91ZCIsIm15cmF2ZW5kYi5jb20iLCJyYXZlbmRiLmNvbW11bml0eSIsInJhdmVuZGIubWUiLCJkZXZlbG9wbWVudC5ydW4iLCJyYXZlbmRiLnJ1biIsImhvbWVza2xlcC5wbCIsInNlY2Fh'@;
put 'cy5oayIsImhvcGxpeC5zaG9wIiwib3J4LmJpeiIsImJpei5nbCIsImNvbC5uZyIsImZpcm0ubmciLCJnZW4ubmciLCJsdGQubmciLCJuZ28ubmciLCJlZHUuc2NvdCIsInNjaC5zbyIsImhvc3R5aG9zdGluZy5pbyIsImhceGU0a2tpbmVuLmZpIiwiKi5tb29uc2NhbGUuaW8iLCJtb29uc2Nh'@;
put 'bGUubmV0IiwiaWtpLmZpIiwiaWJ4b3MuaXQiLCJpbGlhZGJveG9zLml0IiwiaW1wZXJ0cml4Y2RuLmNvbSIsImltcGVydHJpeC5jb20iLCJzbXVzaGNkbi5jb20iLCJ3cGhvc3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVy'@;
put 'bGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tZHNsLm5ldCIsImluLWRzbC5vcmciLCJpbi12cG4uZGUiLCJpbi12cG4ubmV0IiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJy'@;
put 'IiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwibWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVn'@;
put 'LmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJyIiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwi'@;
put 'bmE0dS5ydSIsImlvcHN5cy5zZSIsImlwaWZvbnkubmV0IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUiLCJpc2Vydi5kZXYiLCJpb2JiLm5ldCIsIm1lbC5jbG91ZGxldHMuY29tLmF1'@;
put 'IiwiY2xvdWQuaW50ZXJob3N0c29sdXRpb25zLmJlIiwidXNlcnMuc2NhbGUudmlydHVhbGNsb3VkLmNvbS5iciIsIm15Y2xvdWQuYnkiLCJhbHAxLmFlLmZsb3cuY2giLCJhcHBlbmdpbmUuZmxvdy5jaCIsImVzLTEuYXhhcm5ldC5jbG91ZCIsImRpYWRlbS5jbG91ZCIsInZpcC5qZWxhc3Rp'@;
put 'Yy5jbG91ZCIsImplbGUuY2xvdWQiLCJpdDEuZXVyLmFydWJhLmplbnYtYXJ1YmEuY2xvdWQiLCJpdDEuamVudi1hcnViYS5jbG91ZCIsImtlbGl3ZWIuY2xvdWQiLCJjcy5rZWxpd2ViLmNsb3VkIiwib3hhLmNsb3VkIiwidG4ub3hhLmNsb3VkIiwidWsub3hhLmNsb3VkIiwicHJpbWV0ZWwu'@;
put 'Y2xvdWQiLCJ1ay5wcmltZXRlbC5jbG91ZCIsImNhLnJlY2xhaW0uY2xvdWQiLCJ1ay5yZWNsYWltLmNsb3VkIiwidXMucmVjbGFpbS5jbG91ZCIsImNoLnRyZW5kaG9zdGluZy5jbG91ZCIsImRlLnRyZW5kaG9zdGluZy5jbG91ZCIsImplbGUuY2x1YiIsImFtc2NvbXB1dGUuY29tIiwiY2xp'@;
put 'Y2tldGNsb3VkLmNvbSIsImRvcGFhcy5jb20iLCJoaWRvcmEuY29tIiwicGFhcy5ob3N0ZWQtYnktcHJldmlkZXIuY29tIiwicmFnLWNsb3VkLmhvc3RldXIuY29tIiwicmFnLWNsb3VkLWNoLmhvc3RldXIuY29tIiwiamNsb3VkLmlrLXNlcnZlci5jb20iLCJqY2xvdWQtdmVyLWpwYy5pay1z'@;
put 'ZXJ2ZXIuY29tIiwiZGVtby5qZWxhc3RpYy5jb20iLCJraWxhdGlyb24uY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJsb24ud2FmYWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMu'@;
put 'ZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImNsb3VkLWZyMS51'@;
put 'bmlzcGFjZS5pbyIsImpjLm5lZW4uaXQiLCJjbG91ZC5qZWxhc3RpYy5vcGVuLnRpbS5pdCIsImpjbG91ZC5reiIsInVwYWFzLmthenRlbGVwb3J0Lmt6IiwiY2xvdWRqaWZmeS5uZXQiLCJmcmExLWRlLmNsb3VkamlmZnkubmV0Iiwid2VzdDEtdXMuY2xvdWRqaWZmeS5uZXQiLCJqbHMtc3Rv'@;
put 'MS5lbGFzdHgubmV0IiwiamxzLXN0bzIuZWxhc3R4Lm5ldCIsImpscy1zdG8zLmVsYXN0eC5uZXQiLCJmYXN0c3RhY2tzLm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0Iiwibnkt'@;
put 'MS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJqZWxhc3Rp'@;
put 'Yy50c3VrYWVydS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQucnUiLCJqZWxhc3RpYy5yZWdydWhvc3RpbmcucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIs'@;
put 'InBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwiKi50cml0b24uem9uZSIsIiou'@;
put 'Y25zLmpveWVudC5jb20iLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwia3Rpc3RvcnkuY29tIiwia2Fwc2kuZmkiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIm95YS50byIsImt1'@;
put 'bGV1dmVuLmNsb3VkIiwiZXpwcm94eS5rdWxldXZlbi5iZSIsImNvLmtyZCIsImVkdS5rcmQiLCJrcmVsbGlhbi5uZXQiLCJ3ZWJ0aGluZ3MuaW8iLCJnaXQtcmVwb3MuZGUiLCJsY3ViZS1zZXJ2ZXIuZGUiLCJzdm4tcmVwb3MuZGUiLCJsZWFkcGFnZXMuY28iLCJscGFnZXMuY28iLCJscHVz'@;
put 'ZXJjb250ZW50LmNvbSIsImxlbHV4LnNpdGUiLCJjby5idXNpbmVzcyIsImNvLmVkdWNhdGlvbiIsImNvLmV2ZW50cyIsImNvLmZpbmFuY2lhbCIsImNvLm5ldHdvcmsiLCJjby5wbGFjZSIsImNvLnRlY2hub2xvZ3kiLCJhcHAubG1wbS5jb20iLCJsaW5reWFyZC5jbG91ZCIsImxpbmt5YXJk'@;
put 'LWNsb3VkLmNoIiwibWVtYmVycy5saW5vZGUuY29tIiwiKi5ub2RlYmFsYW5jZXIubGlub2RlLmNvbSIsIioubGlub2Rlb2JqZWN0cy5jb20iLCJpcC5saW5vZGV1c2VyY29udGVudC5jb20iLCJ3ZS5icyIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9jYWx6b25lLnh5eiIsImxvZ2lubGlu'@;
put 'ZS5hcHAiLCJsb2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJzZXJ2ZXJzLnJ1biIsImxvaG11cy5tZSIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5w'@;
put 'bCIsInN3aWRuaWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY28udWsiLCJiYXJzeW9ubGluZS5jby51ayIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmNsdWIiLCJiYXJzeS5kZSIsImJh'@;
put 'cnN5LmV1IiwiYmFyc3kuaW4iLCJiYXJzeS5pbmZvIiwiYmFyc3kuaW8iLCJiYXJzeS5tZSIsImJhcnN5Lm1lbnUiLCJiYXJzeS5tb2JpIiwiYmFyc3kubmV0IiwiYmFyc3kub25saW5lIiwiYmFyc3kub3JnIiwiYmFyc3kucHJvIiwiYmFyc3kucHViIiwiYmFyc3kucm8iLCJiYXJzeS5zaG9w'@;
put 'IiwiYmFyc3kuc2l0ZSIsImJhcnN5LnN1cHBvcnQiLCJiYXJzeS51ayIsIioubWFnZW50b3NpdGUuY2xvdWQiLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwiaGIuY2xkbWFpbC5ydSIsImNuLnZ1IiwibWF6ZXBsYXkuY29tIiwibWNwZS5tZSIsIm1jZGlyLm1lIiwibWNkaXIucnUi'@;
put 'LCJtY3ByZS5ydSIsInZwcy5tY2Rpci5ydSIsIm1lZGlhdGVjaC5ieSIsIm1lZGlhdGVjaC5kZXYiLCJocmEuaGVhbHRoIiwibWluaXNlcnZlci5jb20iLCJtZW1zZXQubmV0IiwibWVzc2VybGkuYXBwIiwiKi5jbG91ZC5tZXRhY2VudHJ1bS5jeiIsImN1c3RvbS5tZXRhY2VudHJ1bS5jeiIs'@;
put 'ImZsdC5jbG91ZC5tdW5pLmN6IiwidXNyLmNsb3VkLm11bmkuY3oiLCJtZXRlb3JhcHAuY29tIiwiZXUubWV0ZW9yYXBwLmNvbSIsImNvLnBsIiwiKi5henVyZWNvbnRhaW5lci5pbyIsImF6dXJld2Vic2l0ZXMubmV0IiwiYXp1cmUtbW9iaWxlLm5ldCIsImNsb3VkYXBwLm5ldCIsImF6dXJl'@;
put 'c3RhdGljYXBwcy5uZXQiLCIxLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjZW50cmFsdXMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3Rhc2lhLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0ZXVyb3BlLmF6dXJlc3RhdGljYXBwcy5uZXQi'@;
put 'LCJ3ZXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjc3guY2MiLCJtaW50ZXJlLnNpdGUiLCJmb3J0ZS5pZCIsIm1vemlsbGEtaW90Lm9yZyIsImJtb2F0dGFjaG1lbnRzLm9yZyIsIm5ldC5ydSIsIm9yZy5ydSIsInBwLnJ1IiwiaG9zdGVkcGkuY29tIiwiY3VzdG9tZXIubXl0aGljLWJl'@;
put 'YXN0cy5jb20iLCJjYXJhY2FsLm15dGhpYy1iZWFzdHMuY29tIiwiZmVudGlnZXIubXl0aGljLWJlYXN0cy5jb20iLCJseW54Lm15dGhpYy1iZWFzdHMuY29tIiwib2NlbG90Lm15dGhpYy1iZWFzdHMuY29tIiwib25jaWxsYS5teXRoaWMtYmVhc3RzLmNvbSIsIm9uemEubXl0aGljLWJlYXN0'@;
put 'cy5jb20iLCJzcGhpbngubXl0aGljLWJlYXN0cy5jb20iLCJ2cy5teXRoaWMtYmVhc3RzLmNvbSIsIngubXl0aGljLWJlYXN0cy5jb20iLCJ5YWxpLm15dGhpYy1iZWFzdHMuY29tIiwiY3VzdC5yZXRyb3NudWIuY28udWsiLCJ1aS5uYWJ1LmNhc2EiLCJwb255LmNsdWIiLCJvZi5mYXNoaW9u'@;
put 'IiwiaW4ubG9uZG9uIiwib2YubG9uZG9uIiwiZnJvbS5tYXJrZXRpbmciLCJ3aXRoLm1hcmtldGluZyIsImZvci5tZW4iLCJyZXBhaXIubWVuIiwiYW5kLm1vbSIsImZvci5tb20iLCJmb3Iub25lIiwidW5kZXIub25lIiwiZm9yLnNhbGUiLCJ0aGF0LndpbiIsImZyb20ud29yayIsInRvLndv'@;
put 'cmsiLCJjbG91ZC5ub3NwYW1wcm94eS5jb20iLCJuZXRsaWZ5LmFwcCIsIjR1LmNvbSIsIm5ncm9rLmlvIiwibmgtc2Vydi5jby51ayIsIm5mc2hvc3QuY29tIiwiKi5kZXZlbG9wZXIuYXBwIiwibm9vcC5hcHAiLCIqLm5vcnRoZmxhbmsuYXBwIiwiKi5idWlsZC5ydW4iLCIqLmNvZGUucnVu'@;
put 'IiwiKi5kYXRhYmFzZS5ydW4iLCIqLm1pZ3JhdGlvbi5ydW4iLCJub3RpY2VhYmxlLm5ld3MiLCJkbnNraW5nLmNoIiwibXlwaS5jbyIsIm40dC5jbyIsIjAwMXd3dy5jb20iLCJkZG5zbGl2ZS5jb20iLCJteWlwaG9zdC5jb20iLCJmb3J1bXouaW5mbyIsIjE2LWIuaXQiLCIzMi1iLml0Iiwi'@;
put 'NjQtYi5pdCIsInNvdW5kY2FzdC5tZSIsInRjcDQubWUiLCJkbnN1cC5uZXQiLCJoaWNhbS5uZXQiLCJub3ctZG5zLm5ldCIsIm93bmlwLm5ldCIsInZwbmRucy5uZXQiLCJkeW5zZXJ2Lm9yZyIsIm5vdy1kbnMub3JnIiwieDQ0My5wdyIsIm5vdy1kbnMudG9wIiwibnRkbGwudG9wIiwiZnJl'@;
put 'ZWRkbnMudXMiLCJjcmFmdGluZy54eXoiLCJ6YXB0by54eXoiLCJuc3VwZGF0ZS5pbmZvIiwibmVyZHBvbC5vdmgiLCJibG9nc3l0ZS5jb20iLCJicmFzaWxpYS5tZSIsImNhYmxlLW1vZGVtLm9yZyIsImNpc2NvZnJlYWsuY29tIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVz'@;
put 'Lm9yZyIsImRhbW5zZXJ2ZXIuY29tIiwiZGRucy5tZSIsImRpdGNoeW91cmlwLmNvbSIsImRuc2Zvci5tZSIsImRuc2lza2lua3kuY29tIiwiZHZyY2FtLmluZm8iLCJkeW5ucy5jb20iLCJlYXRpbmctb3JnYW5pYy5uZXQiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ2Vla2dhbGF4eS5jb20iLCJn'@;
put 'b2xmZmFuLnVzIiwiaGVhbHRoLWNhcmVyZWZvcm0uY29tIiwiaG9tZXNlY3VyaXR5bWFjLmNvbSIsImhvbWVzZWN1cml0eXBjLmNvbSIsImhvcHRvLm1lIiwiaWxvdmVjb2xsZWdlLmluZm8iLCJsb2dpbnRvLm1lIiwibWxiZmFuLm9yZyIsIm1tYWZhbi5iaXoiLCJteWFjdGl2ZWRpcmVjdG9y'@;
put 'eS5jb20iLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEuY29tIiwibXlzZWN1cml0eWNhbWVyYS5uZXQiLCJteXNlY3VyaXR5Y2FtZXJhLm9yZyIsIm5ldC1mcmVha3MuY29tIiwibmZsZmFuLm9yZyIs'@;
put 'Im5obGZhbi5uZXQiLCJuby1pcC5jYSIsIm5vLWlwLmNvLnVrIiwibm8taXAubmV0Iiwibm9pcC51cyIsIm9udGhld2lmaS5jb20iLCJwZ2FmYW4ubmV0IiwicG9pbnQydGhpcy5jb20iLCJwb2ludHRvLnVzIiwicHJpdmF0aXplaGVhbHRoaW5zdXJhbmNlLm5ldCIsInF1aWNrc3l0ZXMuY29t'@;
put 'IiwicmVhZC1ib29rcy5vcmciLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmVleGNoYW5nZS5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29tIiwidWZjZmFuLm9yZyIsInVudXN1YWxwZXJzb24uY29tIiwi'@;
put 'd29ya2lzYm9yaW5nLmNvbSIsIjN1dGlsaXRpZXMuY29tIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJkZG5za2luZy5jb20iLCJnb3RkbnMuY2giLCJob3B0by5vcmciLCJteWZ0cC5iaXoiLCJteWZ0cC5vcmciLCJteXZuYy5jb20iLCJuby1pcC5iaXoiLCJuby1pcC5pbmZvIiwibm8t'@;
put 'aXAub3JnIiwibm9pcC5tZSIsInJlZGlyZWN0bWUubmV0Iiwic2VydmViZWVyLmNvbSIsInNlcnZlYmxvZy5uZXQiLCJzZXJ2ZWNvdW50ZXJzdHJpa2UuY29tIiwic2VydmVmdHAuY29tIiwic2VydmVnYW1lLmNvbSIsInNlcnZlaGFsZmxpZmUuY29tIiwic2VydmVodHRwLmNvbSIsInNlcnZl'@;
put 'aXJjLmNvbSIsInNlcnZlbWluZWNyYWZ0Lm5ldCIsInNlcnZlbXAzLmNvbSIsInNlcnZlcGljcy5jb20iLCJzZXJ2ZXF1YWtlLmNvbSIsInN5dGVzLm5ldCIsIndlYmhvcC5tZSIsInphcHRvLm9yZyIsInN0YWdlLm5vZGVhcnQuaW8iLCJwY2xvdWQuaG9zdCIsIm55Yy5tbiIsInN0YXRpYy5v'@;
put 'YnNlcnZhYmxldXNlcmNvbnRlbnQuY29tIiwiY3lhLmdnIiwib21nLmxvbCIsImNsb3VkeWNsdXN0ZXIubmV0Iiwib21uaXdlLnNpdGUiLCJzZXJ2aWNlLm9uZSIsIm5pZC5pbyIsIm9wZW5zb2NpYWwuc2l0ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRl'@;
put 'LmNvbSIsInRlY2gub3JhbmdlIiwiYXV0aGdlYXItc3RhZ2luZy5jb20iLCJhdXRoZ2VhcmFwcHMuY29tIiwic2t5Z2VhcmFwcC5jb20iLCJvdXRzeXN0ZW1zY2xvdWQuY29tIiwiKi53ZWJwYWFzLm92aC5uZXQiLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIm93bnByb3ZpZGVyLmNvbSIsIm93bi5w'@;
put 'bSIsIioub3dvLmNvZGVzIiwib3gucnMiLCJveS5sYyIsInBnZm9nLmNvbSIsInBhZ2Vmcm9udGFwcC5jb20iLCJwYWdleGwuY29tIiwiKi5wYXl3aGlybC5jb20iLCJiYXIwLm5ldCIsImJhcjEubmV0IiwiYmFyMi5uZXQiLCJyZHYudG8iLCJhcnQucGwiLCJnbGl3aWNlLnBsIiwia3Jha293'@;
put 'LnBsIiwicG96bmFuLnBsIiwid3JvYy5wbCIsInpha29wYW5lLnBsIiwicGFudGhlb25zaXRlLmlvIiwiZ290cGFudGhlb24uY29tIiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsImxrMy5ydSIsIm9uLXdlYi5mciIsImJjLnBsYXRmb3JtLnNoIiwiZW50LnBsYXRmb3JtLnNoIiwi'@;
put 'ZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsInBsZXNrbnMuY29tIiwiZHluNTMuaW8i'@;
put 'LCJvbnBvcnRlci5ydW4iLCJjby5ibiIsInBvc3RtYW4tZWNoby5jb20iLCJwc3Rtbi5pbyIsIm1vY2sucHN0bW4uaW8iLCJodHRwYmluLm9yZyIsInByZXF1YWxpZnltZS50b2RheSIsInhlbi5wcmdtci5jb20iLCJwcml2LmF0IiwicHJ2Y3kucGFnZSIsIiouZHdlYi5saW5rIiwicHJvdG9u'@;
put 'ZXQuaW8iLCJjaGlydXJnaWVucy1kZW50aXN0ZXMtZW4tZnJhbmNlLmZyIiwiYnllbi5zaXRlIiwicHVidGxzLm9yZyIsInB5dGhvbmFueXdoZXJlLmNvbSIsImV1LnB5dGhvbmFueXdoZXJlLmNvbSIsInFvdG8uaW8iLCJxdWFsaWZpb2FwcC5jb20iLCJxYnVzZXIuY29tIiwiY2xvdWRzaXRl'@;
put 'LmJ1aWxkZXJzIiwiaW5zdGFuY2VzLnNwYXduLmNjIiwiaW5zdGFudGNsb3VkLmNuIiwicmFzLnJ1IiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsImRldi1teXFuYXBjbG91ZC5jb20iLCJhbHBoYS1teXFuYXBjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCIqLnF1aXBl'@;
put 'bGVtZW50cy5jb20iLCJ2YXBvci5jbG91ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJnLnZicnBsc2J4LmlvIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJhbmNoZXIuY2xvdWQiLCIqLm9uLXJpby5pbyIsInJlYWR0aGVkb2NzLmlvIiwicmhjbG91ZC5j'@;
put 'b20iLCJhcHAucmVuZGVyLmNvbSIsIm9ucmVuZGVyLmNvbSIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbC5ydW4iLCJyZXNpbmRldmljZS5pbyIsImRldmljZXMucmVzaW5zdGFnaW5nLmlvIiwiaHpjLmlvIiwid2VsbGJlaW5nem9uZS5ldSIsIndlbGxiZWluZ3pvbmUuY28udWsiLCJh'@;
put 'ZGltby5jby51ayIsIml0Y291bGRiZXdvci5zZSIsImdpdC1wYWdlcy5yaXQuZWR1Iiwicm9ja3kucGFnZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUw'@;
put 'NDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1'@;
put 'MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCIqLmJ1aWxkZXIuY29k'@;
put 'ZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsInNhbmRjYXRzLmlvIiwibG9nb2lwLmRlIiwibG9nb2lwLmNvbSIsImZyLXBhci0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJmci1wYXItMi5iYXJlbWV0YWwuc2N3LmNsb3VkIiwibmwtYW1z'@;
put 'LTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImZuYy5mci1wYXIuc2N3LmNsb3VkIiwiZnVuY3Rpb25zLmZuYy5mci1wYXIuc2N3LmNsb3VkIiwiazhzLmZyLXBhci5zY3cuY2xvdWQiLCJub2Rlcy5rOHMuZnItcGFyLnNjdy5jbG91ZCIsInMzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy13ZWJzaXRl'@;
put 'LmZyLXBhci5zY3cuY2xvdWQiLCJ3aG0uZnItcGFyLnNjdy5jbG91ZCIsInByaXYuaW5zdGFuY2VzLnNjdy5jbG91ZCIsInB1Yi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwiazhzLnNjdy5jbG91ZCIsIms4cy5ubC1hbXMuc2N3LmNsb3VkIiwibm9kZXMuazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJz'@;
put 'My5ubC1hbXMuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5ubC1hbXMuc2N3LmNsb3VkIiwid2htLm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMucGwtd2F3LnNjdy5jbG91ZCIsIm5vZGVzLms4cy5wbC13YXcuc2N3LmNsb3VkIiwiczMucGwtd2F3LnNjdy5jbG91ZCIsInMzLXdlYnNpdGUucGwtd2F3'@;
put 'LnNjdy5jbG91ZCIsInNjYWxlYm9vay5zY3cuY2xvdWQiLCJzbWFydGxhYmVsaW5nLnNjdy5jbG91ZCIsImRlZGlib3guZnIiLCJzY2hva29rZWtzLm5ldCIsImdvdi5zY290Iiwic2VydmljZS5nb3Yuc2NvdCIsInNjcnlzZWMuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5jb20iLCJmaXJld2Fs'@;
put 'bC1nYXRld2F5LmRlIiwibXktZ2F0ZXdheS5kZSIsIm15LXJvdXRlci5kZSIsInNwZG5zLmRlIiwic3BkbnMuZXUiLCJmaXJld2FsbC1nYXRld2F5Lm5ldCIsIm15LWZpcmV3YWxsLm9yZyIsIm15ZmlyZXdhbGwub3JnIiwic3BkbnMub3JnIiwic2VpZGF0Lm5ldCIsInNlbGxmeS5zdG9yZSIs'@;
put 'InNlbnNlZXJpbmcubmV0IiwibWluaXNpdGUubXMiLCJtYWduZXQucGFnZSIsImJpei51YSIsImNvLnVhIiwicHAudWEiLCJzaGlmdGNyeXB0by5kZXYiLCJzaGlmdGNyeXB0by5pbyIsInNoaWZ0ZWRpdC5pbyIsIm15c2hvcGJsb2Nrcy5jb20iLCJteXNob3BpZnkuY29tIiwic2hvcGl0c2l0'@;
put 'ZS5jb20iLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0IiwiYm91bnR5LWZ1bGwuY29tIiwiYWxwaGEuYm91bnR5LWZ1bGwu'@;
put 'Y29tIiwiYmV0YS5ib3VudHktZnVsbC5jb20iLCJzbWFsbC13ZWIub3JnIiwidnA0Lm1lIiwidHJ5LXNub3dwbG93LmNvbSIsInNyaHQuc2l0ZSIsInN0YWNraGVyby1uZXR3b3JrLmNvbSIsIm11c2ljaWFuLmlvIiwibm92ZWNvcmUuc2l0ZSIsInN0YXRpYy5sYW5kIiwiZGV2LnN0YXRpYy5s'@;
put 'YW5kIiwic2l0ZXMuc3RhdGljLmxhbmQiLCJzdG9yZWJhc2Uuc3RvcmUiLCJ2cHMtaG9zdC5uZXQiLCJhdGwuamVsYXN0aWMudnBzLWhvc3QubmV0IiwibmpzLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInJpYy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20i'@;
put 'LCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiY3VzdG9tZXIuc3BlZWRwYXJ0bmVyLmRlIiwibXlzcHJlYWRzaG9wLmF0IiwibXlzcHJlYWRzaG9wLmNvbS5hdSIsIm15c3ByZWFkc2hvcC5iZSIsIm15c3ByZWFkc2hvcC5jYSIsIm15c3ByZWFkc2hvcC5jaCIs'@;
put 'Im15c3ByZWFkc2hvcC5jb20iLCJteXNwcmVhZHNob3AuZGUiLCJteXNwcmVhZHNob3AuZGsiLCJteXNwcmVhZHNob3AuZXMiLCJteXNwcmVhZHNob3AuZmkiLCJteXNwcmVhZHNob3AuZnIiLCJteXNwcmVhZHNob3AuaWUiLCJteXNwcmVhZHNob3AuaXQiLCJteXNwcmVhZHNob3AubmV0Iiwi'@;
put 'bXlzcHJlYWRzaG9wLm5sIiwibXlzcHJlYWRzaG9wLm5vIiwibXlzcHJlYWRzaG9wLnBsIiwibXlzcHJlYWRzaG9wLnNlIiwibXlzcHJlYWRzaG9wLmNvLnVrIiwiYXBpLnN0ZGxpYi5jb20iLCJzdG9yai5mYXJtIiwidXR3ZW50ZS5pbyIsInNvYy5zcmNmLm5ldCIsInVzZXIuc3JjZi5uZXQi'@;
put 'LCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3UucGFiYS5zZSIsIiouczV5LmlvIiwiKi5zZW5zaW9zaXRlLmNsb3VkIiwic3luY2xvdWQuaXQiLCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFz'@;
put 'LmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwidnBucGx1'@;
put 'cy50byIsImRpcmVjdC5xdWlja2Nvbm5lY3QudG8iLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsImJldGEudGFpbHNjYWxlLm5ldCIsInRzLm5ldCIsImdkYS5wbCIsImdkYW5zay5wbCIsImdkeW5pYS5wbCIsIm1lZC5wbCIsInNvcG90LnBsIiwic2l0ZS50Yi1ob3N0aW5n'@;
put 'LmNvbSIsImVkdWdpdC5pbyIsInMzLnRlY2tpZHMub3JnIiwidGVsZWJpdC5hcHAiLCJ0ZWxlYml0LmlvIiwiKi50ZWxlYml0Lnh5eiIsImd3aWRkbGUuY28udWsiLCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1'@;
put 'c3QuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kZXYudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kaXNyZWMudGhpbmdkdXN0LmlvIiwicmVzZXJ2'@;
put 'ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2plY3QubmV0IiwiYmxveGNtcy5jb20iLCJ0b3dubmV3cy1zdGFnaW5nLmNvbSIsInRi'@;
put 'aXRzLm1lIiwiMTJocC5hdCIsIjJpeC5hdCIsIjRsaW1hLmF0IiwibGltYS1jaXR5LmF0IiwiMTJocC5jaCIsIjJpeC5jaCIsIjRsaW1hLmNoIiwibGltYS1jaXR5LmNoIiwidHJhZmZpY3BsZXguY2xvdWQiLCJkZS5jb29sIiwiMTJocC5kZSIsIjJpeC5kZSIsIjRsaW1hLmRlIiwibGltYS1j'@;
put 'aXR5LmRlIiwiMTMzNy5waWN0dXJlcyIsImNsYW4ucmlwIiwibGltYS1jaXR5LnJvY2tzIiwid2Vic3BhY2Uucm9ja3MiLCJsaW1hLnpvbmUiLCIqLnRyYW5zdXJsLmJlIiwiKi50cmFuc3VybC5ldSIsIioudHJhbnN1cmwubmwiLCJzaXRlLnRyYW5zaXAubWUiLCJ0dXhmYW1pbHkub3JnIiwi'@;
put 'ZGQtZG5zLmRlIiwiZGlza3N0YXRpb24uZXUiLCJkaXNrc3RhdGlvbi5vcmciLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRp'@;
put 'c2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJ0eXBlZHJlYW0uYXBwIiwicHJvLnR5cGVmb3JtLmNvbSIsInViZXIuc3BhY2UiLCIqLnViZXJzcGFjZS5kZSIsImhrLmNvbSIsImhrLm9yZyIsImx0ZC5oayIsImluYy5oayIsIm5hbWUucG0iLCJzY2gudGYiLCJiaXoud2YiLCJzY2gu'@;
put 'd2YiLCJvcmcueXQiLCJ2aXJ0dWFsdXNlci5kZSIsInZpcnR1YWwtdXNlci5kZSIsInVwbGkuaW8iLCJ1cm93bi5jbG91ZCIsImRuc3VwZGF0ZS5pbmZvIiwibGliLmRlLnVzIiwiMjAzOC5pbyIsInZlcmNlbC5hcHAiLCJ2ZXJjZWwuZGV2Iiwibm93LnNoIiwicm91dGVyLm1hbmFnZW1lbnQi'@;
put 'LCJ2LWluZm8uaW5mbyIsInZvb3Jsb3Blci5jbG91ZCIsIm5la28uYW0iLCJueWFhLmFtIiwiYmUuYXgiLCJjYXQuYXgiLCJlcy5heCIsImV1LmF4IiwiZ2cuYXgiLCJtYy5heCIsInVzLmF4IiwieHkuYXgiLCJubC5jaSIsInh4LmdsIiwiYXBwLmdwIiwiYmxvZy5ndCIsImRlLmd0IiwidG8u'@;
put 'Z3QiLCJiZS5neSIsImNjLmhuIiwiYmxvZy5rZyIsImlvLmtnIiwianAua2ciLCJ0di5rZyIsInVrLmtnIiwidXMua2ciLCJkZS5scyIsImF0Lm1kIiwiZGUubWQiLCJqcC5tZCIsInRvLm1kIiwiaW5kaWUucG9ybiIsInZ4bC5zaCIsImNoLnRjIiwibWUudGMiLCJ3ZS50YyIsIm55YW4udG8i'@;
put 'LCJhdC52ZyIsImJsb2cudnUiLCJkZXYudnUiLCJtZS52dSIsInYudWEiLCIqLnZ1bHRyb2JqZWN0cy5jb20iLCJ3YWZmbGVjZWxsLmNvbSIsIioud2ViaGFyZS5kZXYiLCJyZXNlcnZlLW9ubGluZS5uZXQiLCJyZXNlcnZlLW9ubGluZS5jb20iLCJib29rb25saW5lLmFwcCIsImhvdGVsd2l0'@;
put 'aGZsaWdodC5jb20iLCJ3ZWRlcGxveS5pbyIsIndlZGVwbG95Lm1lIiwid2VkZXBsb3kuc2giLCJyZW1vdGV3ZC5jb20iLCJwYWdlcy53aWFyZHdlYi5jb20iLCJ3bWZsYWJzLm9yZyIsInRvb2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwi'@;
put 'bWVzc3dpdGhkbnMuY29tIiwid29sdGxhYi1kZW1vLmNvbSIsIm15Zm9ydW0uY29tbXVuaXR5IiwiY29tbXVuaXR5LXByby5kZSIsImRpc2t1c3Npb25zYmVyZWljaC5kZSIsImNvbW11bml0eS1wcm8ubmV0IiwibWVpbmZvcnVtLm5ldCIsImFmZmluaXR5bG90dGVyeS5vcmcudWsiLCJyYWZm'@;
put 'bGVlbnRyeS5vcmcudWsiLCJ3ZWVrbHlsb3R0ZXJ5Lm9yZy51ayIsIndwZW5naW5lcG93ZXJlZC5jb20iLCJqcy53cGVuZ2luZXBvd2VyZWQuY29tIiwid2l4c2l0ZS5jb20iLCJlZGl0b3J4LmlvIiwiaGFsZi5ob3N0IiwieG5iYXkuY29tIiwidTIueG5iYXkuY29tIiwidTItbG9jYWwueG5i'@;
put 'YXkuY29tIiwiY2lzdHJvbi5ubCIsImRlbW9uLm5sIiwieHM0YWxsLnNwYWNlIiwieWFuZGV4Y2xvdWQubmV0Iiwic3RvcmFnZS55YW5kZXhjbG91ZC5uZXQiLCJ3ZWJzaXRlLnlhbmRleGNsb3VkLm5ldCIsIm9mZmljaWFsLmFjYWRlbXkiLCJ5b2xhc2l0ZS5jb20iLCJ5Ym8uZmFpdGgiLCJ5'@;
put 'b21iby5tZSIsImhvbWVsaW5rLm9uZSIsInliby5wYXJ0eSIsInliby5yZXZpZXciLCJ5Ym8uc2NpZW5jZSIsInliby50cmFkZSIsInluaC5mciIsIm5vaG9zdC5tZSIsIm5vaG8uc3QiLCJ6YS5uZXQiLCJ6YS5vcmciLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2Vy'@;
put 'dmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0nKX19LG09e307ZnVuY3Rpb24gbGUoTSl7dmFyIE89bVtNXTtpZih2b2lkIDAhPT1PKXJldHVybiBPLmV4cG9ydHM7dmFyIFI9bVtNXT17aWQ6TSxsb2FkZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIHhbTV0uY2FsbChSLmV4cG9ydHMsUixS'@;
put 'LmV4cG9ydHMsbGUpLFIubG9hZGVkPSEwLFIuZXhwb3J0c31yZXR1cm4gbGUuZD0oTSxPKT0+e2Zvcih2YXIgUiBpbiBPKWxlLm8oTyxSKSYmIWxlLm8oTSxSKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KE0sUix7ZW51bWVyYWJsZTohMCxnZXQ6T1tSXX0pfSxsZS5nPWZ1bmN0aW9uKCl7aWYo'@;
put 'Im9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2h7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbGUubz0oTSxPKT0+T2JqZWN0LnBy'@;
put 'b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE0sTyksbGUucj1NPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KE0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShN'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbGUubm1kPU09PihNLnBhdGhzPVtdLE0uY2hpbGRyZW58fChNLmNoaWxkcmVuPVtdKSxNKSxsZSgzNjA3KX0pKCl9LDEyMDcwOmZ1bmN0aW9uKGF0LEllLEYpeyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8'@;
put 'fGZ1bmN0aW9uKFIpe3JldHVybiBSJiZSLl9fZXNNb2R1bGU/Ujp7ZGVmYXVsdDpSfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEllLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxJZS5pc1NwZWNpYWxNaXNzaW5nPUllLmNob2ljZVZhbGlkYXRvcj1JZS5jb25maXJtYXRpb25WYWxpZGF0b3I9'@;
put 'SWUudXJsVmFsaWRhdG9yPXZvaWQgMDt2YXIgeD1hZShGKDc4NTMyKSk7SWUudXJsVmFsaWRhdG9yPWZ1bmN0aW9uKFIseil7cmV0dXJuISF4LmRlZmF1bHQuaXNIdHRwVXJpKFIpfHwhIXguZGVmYXVsdC5pc0h0dHBzVXJpKFIpfHwiIj09PVJ8fHp9LEllLmNvbmZpcm1hdGlvblZhbGlkYXRv'@;
put 'cj1mdW5jdGlvbihSKXtyZXR1cm4hMD09PVJ8fCExPT09Un0sSWUuY2hvaWNlVmFsaWRhdG9yPWZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUj4wJiZSPD16fHxLfSxJZS5pc1NwZWNpYWxNaXNzaW5nPWZ1bmN0aW9uKFIpe3JldHVybigic3RyaW5nIiE9dHlwZW9mIFJ8fCFSLmluY2x1ZGVzKCIu'@;
put 'LiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoUil9fSw3Njc3MTooYXQsSWUpPT57InVzZSBzdHJpY3QiO3ZhciB4O0llLkQ9dm9pZCAwLCh4PUllLkR8fChJZS5EPXt9KSkuU2FzVml5YT0iU0FTVklZQSIseC5TYXM5PSJTQVM5Iix4LlNhc2pzPSJTQVNK'@;
put 'UyJ9LDUxNzE0OihhdCxJZSk9PnsidXNlIHN0cmljdCI7SWUuUj12b2lkIDAsSWUuUj1mdW5jdGlvbih4LG0sbGUpe2lmKHZvaWQgMD09PW0mJihtPTEpLHZvaWQgMD09PWxlJiYobGU9MTA5OTUxMTYyNzc3NiksMD09PXgpcmV0dXJuIjAgQiI7eD14PmxlP2xlOng7dmFyIFI9bTwwPzA6bSx6'@;
put 'PU1hdGguZmxvb3IoTWF0aC5sb2coeCkvTWF0aC5sb2coMTAyNCkpO3JldHVybih4L01hdGgucG93KDEwMjQseikpLnRvRml4ZWQoUikrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bel19fSw4MDc4ODpmdW5jdGlvbihhdCl7dmFyIEllPXt2ZXJzaW9uOiIxLjE1LjAifTtJZVs0Mzdd'@;
put 'PWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6'@;
put 'Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZi'@;
put 'XHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2'@;
put 'M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1'@;
put 'MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhi'@;
put 'MVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7'@;
put 'cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbNjIwXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVc'@;
put 'eDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBcdTAxMDVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMDdc'@;
put 'eGM0XHUwMTA0XHUwMTE4XHUwMTE5XHUwMTQyXHhmNFx4ZjZcdTAxMDZceGZiXHhmOVx1MDE1YVx4ZDZceGRjXHhhMlx1MDE0MVx4YTVcdTAxNWJcdTAxOTJcdTAxNzlcdTAxN2JceGYzXHhkM1x1MDE0NFx1MDE0M1x1MDE3YVx1MDE3Y1x4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4'@;
put 'YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1Njlc'@;
put 'dTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1'@;
put 'MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2'@;
put 'NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBm'@;
put 'XHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdm'@;
put 'XHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUw'@;
put 'M2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYy'@;
put 'XHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUy'@;
put 'NTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhh'@;
put 'XHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09'@;
put 'bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODUwXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5'@;
put 'XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGVi'@;
put 'XHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5'@;
put 'Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4'@;
put 'ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdc'@;
put 'eGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NTJdPWZ1'@;
put 'bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9'@;
put 'Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2Fc'@;
put 'eGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1'@;
put 'OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2'@;
put 'Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4'@;
put 'ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0p'@;
put 'LGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4'@;
put 'MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4'@;
put 'ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUy'@;
put 'NTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1'@;
put 'NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhi'@;
put 'ZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCks'@;
put 'SWVbODYxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIz'@;
put 'NDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZc'@;
put 'eGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1'@;
put 'NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlc'@;
put 'dTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1'@;
put 'MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hh'@;
put 'ckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg2NV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4'@;
put 'MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4'@;
put 'ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUy'@;
put 'NTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZj'@;
put 'XHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlc'@;
put 'dTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkm'@;
put 'Jih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgx'@;
put 'NVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQx'@;
put 'M1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1'@;
put 'MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1'@;
put 'MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1'@;
put 'MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1'@;
put 'MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdCht'@;
put 'KTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NzRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgx'@;
put 'ZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBl'@;
put 'MDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBc'@;
put 'dTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdc'@;
put 'dTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4'@;
put 'OTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3'@;
put 'ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDEwY1x4ZmNceGU5XHUwMTBmXHhlNFx1MDEwZVx1MDE2NFx1MDEwZFx1MDExYlx1MDExYVx1MDEzOVx4Y2RcdTAxM2VcdTAxZWFceGM0XHhjMVx4Yzlc'@;
put 'dTAxN2VcdTAxN2RceGY0XHhmNlx4ZDNcdTAxNmZceGRhXHhmZFx4ZDZceGRjXHUwMTYwXHUwMTNkXHhkZFx1MDE1OFx1MDE2NVx4ZTFceGVkXHhmM1x4ZmFcdTAxNDhcdTAxNDdcdTAxNmVceGQ0XHUwMTYxXHUwMTU5XHUwMTU1XHUwMTU0XHhiY1x4YTdceGFiXHhiYlx1MjU5MVx1MjU5Mlx1'@;
put 'MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1'@;
put 'MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4'@;
put 'XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29k'@;
put 'ZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbOTMyXT1mdW5jdGlvbigpe3ZhciBtLEY9W10sYWU9e30seD1bXTtmb3IoeFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgw'@;
put 'ZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9'@;
put 'flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNjFcdWZmNjJcdWZmNjNcdWZmNjRcdWZmNjVcdWZmNjZcdWZmNjdcdWZmNjhcdWZmNjlcdWZmNmFcdWZmNmJcdWZmNmNcdWZmNmRcdWZmNmVcdWZmNmZcdWZmNzBcdWZmNzFcdWZmNzJcdWZmNzNcdWZmNzRcdWZmNzVc'@;
put 'dWZmNzZcdWZmNzdcdWZmNzhcdWZmNzlcdWZmN2FcdWZmN2JcdWZmN2NcdWZmN2RcdWZmN2VcdWZmN2ZcdWZmODBcdWZmODFcdWZmODJcdWZmODNcdWZmODRcdWZmODVcdWZmODZcdWZmODdcdWZmODhcdWZmODlcdWZmOGFcdWZmOGJcdWZmOGNcdWZmOGRcdWZmOGVcdWZmOGZcdWZmOTBcdWZm'@;
put 'OTFcdWZmOTJcdWZmOTNcdWZmOTRcdWZmOTVcdWZmOTZcdWZmOTdcdWZmOThcdWZmOTlcdWZmOWFcdWZmOWJcdWZmOWNcdWZmOWRcdWZmOWVcdWZmOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZm'@;
put 'MWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAy'@;
put 'NVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxMFx1MzAxMVx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHVmZmZkXHhmN1x1'@;
put 'ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUy'@;
put 'NWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjA4'@;
put 'XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjVlZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'YWVbeFsxMjldW21dXT0zMzAyNCttLEZbMzMwMjQrbV09eFsxMjldW21dKTtmb3IoeFsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZm'@;
put 'MjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThc'@;
put 'dTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMw'@;
put 'NzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZc'@;
put 'dTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMF1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGFlW3hbMTMwXVttXV09MzMyODArbSxGWzMzMjgwK21dPXhbMTMwXVttXSk7Zm9yKHhbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3'@;
put 'XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUz'@;
put 'MGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRl'@;
put 'XHUzMGRmXHVmZmZkXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3'@;
put 'XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUw'@;
put 'M2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'eFsxMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMV1bbV1dPTMzNTM2K20sRlszMzUzNittXT14WzEzMV1bbV0pO2Zvcih4WzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQx'@;
put 'NFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1'@;
put 'MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQz'@;
put 'YVx1MDQzYlx1MDQzY1x1MDQzZFx1ZmZmZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUy'@;
put 'Ylx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMl0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMTMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzJdW21dXT0zMzc5MittLEZbMzM3OTIrbV09eFsxMzJdW21dKTtmb3IoeFsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0'@;
put 'NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlc'@;
put 'dWZmZmRcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFc'@;
put 'dTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'eFsxMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM1XVttXV09MzQ1NjArbSxGWzM0NTYwK21dPXhbMTM1XVttXSk7Zm9yKHhbMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2'@;
put 'NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBh'@;
put 'XHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0'@;
put 'ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPXhbMTM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNl1bbV1dPTM0ODE2K20sRlszNDgxNittXT14WzEzNl1bbV0pO2Zvcih4WzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2'@;
put 'Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1'@;
put 'NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1ZmZmZFx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3'@;
put 'Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1'@;
put 'ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJl'@;
put 'MVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1'@;
put 'NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOVx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzddW21dXT0zNTA3MittLEZbMzUwNzIrbV09eFsxMzddW21dKTtmb3IoeFsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0'@;
put 'Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNc'@;
put 'dTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRl'@;
put 'MTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdc'@;
put 'dTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3'@;
put 'MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNc'@;
put 'dTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4'@;
put 'YzRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM4XVttXV09MzUzMjgrbSxGWzM1MzI4K21dPXhbMTM4XVttXSk7Zm9yKHhbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1'@;
put 'MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0'@;
put 'XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHVmZmZkXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2'@;
put 'NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIx'@;
put 'XHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1'@;
put 'MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5'@;
put 'XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5'@;
put 'MWU3XHU1YzUxXHU1YzQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOV1bbV1dPTM1NTg0K20sRlszNTU4NCttXT14WzEzOV1bbV0pO2Zvcih4WzE0MF09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1'@;
put 'OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2Nm'@;
put 'Ylx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1ZmZmZFx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1'@;
put 'N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2'@;
put 'Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1'@;
put 'NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5'@;
put 'NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1'@;
put 'NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDBdW21dXT0zNTg0MCttLEZbMzU4NDArbV09eFsxNDBdW21dKTtmb3Io'@;
put 'eFsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJc'@;
put 'dTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgw'@;
put 'MDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhc'@;
put 'dTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3'@;
put 'NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZc'@;
put 'dTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThm'@;
put 'MDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJc'@;
put 'dTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQxXVttXV09MzYwOTYrbSxGWzM2MDk2K21dPXhb'@;
put 'MTQxXVttXSk7Zm9yKHhbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUy'@;
put 'XHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1'@;
put 'M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHVmZmZkXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4'@;
put 'XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2'@;
put 'Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdm'@;
put 'XHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1'@;
put 'MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3'@;
put 'XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Ml1bbV1dPTM2MzUyK20s'@;
put 'RlszNjM1MittXT14WzE0Ml1bbV0pO2Zvcih4WzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFl'@;
put 'ZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1'@;
put 'NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1ZmZmZFx1NmU5Nlx1NmY2NFx1NzZmZVx1N2Qx'@;
put 'NFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZlx1'@;
put 'NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYy'@;
put 'ZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1'@;
put 'ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1'@;
put 'Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDNd'@;
put 'W21dXT0zNjYwOCttLEZbMzY2MDgrbV09eFsxNDNdW21dKTtmb3IoeFsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThm'@;
put 'YjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFc'@;
put 'dThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0'@;
put 'MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdc'@;
put 'dTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdj'@;
put 'YmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNc'@;
put 'dThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0'@;
put 'YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NF1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMTQ0XVttXV09MzY4NjQrbSxGWzM2ODY0K21dPXhbMTQ0XVttXSk7Zm9yKHhbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4'@;
put 'ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2'@;
put 'XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHVm'@;
put 'ZmZkXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFj'@;
put 'XHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1'@;
put 'YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJm'@;
put 'XHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1'@;
put 'NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDVdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NV1bbV1dPTM3MTIwK20sRlszNzEyMCttXT14WzE0NV1bbV0pO2Zvcih4WzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1'@;
put 'NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5'@;
put 'NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1'@;
put 'N2I1MVx1ODRjNFx1ZmZmZFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1'@;
put 'N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNVx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1'@;
put 'OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0'@;
put 'M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1'@;
put 'NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Nl0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMTQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDZdW21dXT0zNzM3NittLEZbMzczNzYrbV09eFsxNDZdW21dKTtmb3IoeFsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVc'@;
put 'dTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcw'@;
put 'YjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRc'@;
put 'dTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdWZmZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVm'@;
put 'NTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVc'@;
put 'dTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVj'@;
put 'NGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJc'@;
put 'dTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDddLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzE0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ3XVttXV09Mzc2MzIrbSxGWzM3NjMyK21dPXhbMTQ3XVttXSk7Zm9yKHhbMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTgyXHU1YzNm'@;
put 'XHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4'@;
put 'MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJh'@;
put 'XHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHVmZmZkXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3'@;
put 'Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVh'@;
put 'XHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4'@;
put 'NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIy'@;
put 'XHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OF1bbV1dPTM3ODg4K20sRlszNzg4OCttXT14WzE0OF1bbV0pO2Zvcih4WzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1'@;
put 'Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTky'@;
put 'Ylx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1ZmZmZFx1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1'@;
put 'ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThi'@;
put 'M1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1'@;
put 'NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0'@;
put 'Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzE0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDldW21dXT0zODE0NCttLEZbMzgxNDQrbV09eFsxNDldW21dKTtmb3IoeFsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2Rc'@;
put 'dTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkx'@;
put 'ZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVc'@;
put 'dTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdh'@;
put 'MTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRc'@;
put 'dTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1'@;
put 'NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUwXVttXV09Mzg0MDArbSxGWzM4NDAwK21dPXhbMTUwXVttXSk7Zm9yKHhbMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRh'@;
put 'XHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3'@;
put 'ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHVmZmZkXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYx'@;
put 'XHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2'@;
put 'M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2Fk'@;
put 'XHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0'@;
put 'ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0'@;
put 'XHU4MDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MV1bbV1dPTM4NjU2K20sRlszODY1NittXT14WzE1MV1bbV0pO2Zvcih4WzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJm'@;
put 'Y1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1'@;
put 'NmU3ZVx1Nzg5N1x1ODE1NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1'@;
put 'NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYw'@;
put 'OVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1'@;
put 'NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5'@;
put 'YVx1NTA4NVx1NTBiNFx1NTBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTJdW21dXT0zODkxMittLEZbMzg5MTIrbV09eFsxNTJdW21dKTtmb3IoeFsxNTNdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUx'@;
put 'MWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZc'@;
put 'dTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUy'@;
put 'MmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFc'@;
put 'dTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRl'@;
put 'MTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFc'@;
put 'dTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0'@;
put 'YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YThcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUzXVttXV09MzkxNjgrbSxGWzM5MTY4K21dPXhbMTUzXVttXSk7'@;
put 'Zm9yKHhbMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1'@;
put 'NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1'@;
put 'XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHVmZmZkXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1'@;
put 'NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEz'@;
put 'XHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1'@;
put 'N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQx'@;
put 'XHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1'@;
put 'OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NF1bbV1dPTM5NDI0K20sRlszOTQyNCtt'@;
put 'XT14WzE1NF1bbV0pO2Zvcih4WzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1'@;
put 'NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIx'@;
put 'Nlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1ZmZmZFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1'@;
put 'NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0'@;
put 'Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1'@;
put 'NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRi'@;
put 'Y1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1'@;
put 'NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTVdW21dXT0zOTY4'@;
put 'MCttLEZbMzk2ODArbV09eFsxNTVdW21dKTtmb3IoeFsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNc'@;
put 'dTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVm'@;
put 'ODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlc'@;
put 'dTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYw'@;
put 'OWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFc'@;
put 'dTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYx'@;
put 'NWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFc'@;
put 'dTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MTU2XVttXV09Mzk5MzYrbSxGWzM5OTM2K21dPXhbMTU2XVttXSk7Zm9yKHhbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVl'@;
put 'XHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2'@;
put 'MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHVmZmZkXHU2MzY5'@;
put 'XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2'@;
put 'NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1'@;
put 'XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2'@;
put 'NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVm'@;
put 'XHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTddW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzE1N11bbV1dPTQwMTkyK20sRls0MDE5MittXT14WzE1N11bbV0pO2Zvcih4WzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZl'@;
put 'OVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1'@;
put 'Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0'@;
put 'ZVx1ZmZmZFx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1'@;
put 'NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZFx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2'@;
put 'Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1'@;
put 'NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEw'@;
put 'Y1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU4'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNThdW21dXT00MDQ0OCttLEZbNDA0NDgrbV09eFsxNThdW21dKTtmb3IoeFsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZh'@;
put 'YjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRc'@;
put 'dTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZi'@;
put 'ZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNc'@;
put 'dTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZk'@;
put 'NzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVc'@;
put 'dTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZl'@;
put 'YjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTldLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzE1OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU5XVttXV09NDA3MDQrbSxGWzQwNzA0K21dPXhbMTU5XVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2'@;
put 'Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4'@;
put 'XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3'@;
put 'MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHVmZmZkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJl'@;
put 'XHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3'@;
put 'MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJm'@;
put 'XHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3'@;
put 'NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRlMFx1'@;
put 'NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1'@;
put 'YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1'@;
put 'NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZlx1ZmZmZFx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0'@;
put 'OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1'@;
put 'NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2'@;
put 'Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1'@;
put 'NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5'@;
put 'YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlc'@;
put 'dTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdh'@;
put 'ZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVc'@;
put 'dTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdi'@;
put 'ZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRc'@;
put 'dTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3'@;
put 'ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMx'@;
put 'XHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHVmZmZkXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3'@;
put 'ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4'@;
put 'XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3'@;
put 'ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2'@;
put 'XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1'@;
put 'ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIw'@;
put 'ZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ZmZmZFx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1'@;
put 'ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMy'@;
put 'Zlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1'@;
put 'ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3'@;
put 'OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1'@;
put 'ODU1OFx1ODU0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1Yzlc'@;
put 'dTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2'@;
put 'YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlc'@;
put 'dTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3'@;
put 'YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFc'@;
put 'dTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4'@;
put 'YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5Mzhc'@;
put 'dTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMw'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFm'@;
put 'XHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4'@;
put 'YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHVmZmZkXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBj'@;
put 'XHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4'@;
put 'YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4Yzdj'@;
put 'XHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4'@;
put 'ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEw'@;
put 'XHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1b'@;
put 'bV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4'@;
put 'N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1'@;
put 'OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1ZmZmZFx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZh'@;
put 'ZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1'@;
put 'OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEw'@;
put 'Mlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1'@;
put 'OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1'@;
put 'YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkx'@;
put 'MzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkz'@;
put 'YWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRc'@;
put 'dTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1'@;
put 'YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRc'@;
put 'dTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3'@;
put 'MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3Nzlc'@;
put 'dTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4'@;
put 'MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09'@;
put 'NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5'@;
put 'OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFk'@;
put 'XHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHVmZmZkXHU5YTNlXHU5YTU1XHU5'@;
put 'YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYx'@;
put 'XHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5'@;
put 'Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2'@;
put 'XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5'@;
put 'ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1'@;
put 'OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3'@;
put 'ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1ZmZmZFx1'@;
put 'OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3'@;
put 'Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJc'@;
put 'dTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUx'@;
put 'NGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3Yzdc'@;
put 'dWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVk'@;
put 'YjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2Jc'@;
put 'dTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5'@;
put 'ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZc'@;
put 'dTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhbMjM3XVttXSk7Zm9yKHhbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2Jk'@;
put 'XHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3'@;
put 'OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4'@;
put 'XHU4NGI0XHU4NTUzXHU4NTU5XHVmZmZkXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVm'@;
put 'YTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4'@;
put 'XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVm'@;
put 'YTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZi'@;
put 'XHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM4XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20sRls2MDkyOCttXT14WzIzOF1bbV0pO2Zvcih4WzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3'@;
put 'Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N2U4YVx1ODkxY1x1'@;
put 'OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3'@;
put 'MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1ZmZmZFx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1'@;
put 'NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1'@;
put 'M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1'@;
put 'NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1Njhj'@;
put 'Zlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzI1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTBdW21dXT02NGUzK20sRls2NGUzK21dPXhbMjUwXVttXSk7Zm9yKHhbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2'@;
put 'XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3'@;
put 'MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFm'@;
put 'XHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4'@;
put 'MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0'@;
put 'XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5'@;
put 'MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMx'@;
put 'XHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPXhbMjUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MV1bbV1dPTY0MjU2K20sRls2NDI1NittXT14WzI1MV1bbV0pO2Zvcih4WzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTJdW21dXT02NDUxMittLEZbNjQ1MTIrbV09eFsyNTJdW21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxJZVs5MzZdPWZ1bmN0aW9uKCl7dmFy'@;
put 'IG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0'@;
put 'NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzBdW21dXT0wK20sRlswK21dPXhbMF1bbV0pO2Zvcih4WzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0'@;
put 'NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1'@;
put 'NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGVi'@;
put 'N1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1'@;
put 'NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYz'@;
put 'NVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1'@;
put 'NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5'@;
put 'Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMjldW21dXT0zMzAyNCttLEZbMzMwMjQrbV09eFsxMjldW21dKTtmb3IoeFsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjBcdTRmYjFcdTRmYjJcdTRmYjNcdTRmYjRcdTRmYjZcdTRmYjdcdTRmYjhcdTRmYjlcdTRmYmFcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRm'@;
put 'YzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDJcdTRmZDNcdTRmZDRcdTRmZDVcdTRmZDZcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJc'@;
put 'dTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDJcdTUwMDNcdTUwMDRcdTUwMDVcdTUwMDZcdTUwMDdcdTUwMDhcdTUwMDlcdTUwMGFcdWZmZmRcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUw'@;
put 'MjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmZcdTUwMzBcdTUwMzFcdTUwMzJcdTUwMzNcdTUwMzRcdTUwMzVcdTUwMzZcdTUwMzdcdTUwMzhcdTUwMzlcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJc'@;
put 'dTUwNGRcdTUwNTBcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTRcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWRcdTUwNWVcdTUwNWZcdTUwNjBcdTUwNjFcdTUwNjJcdTUwNjNcdTUwNjRcdTUwNjZcdTUwNjdcdTUwNjhcdTUwNjlcdTUwNmFcdTUwNmJcdTUwNmRcdTUwNmVcdTUw'@;
put 'NmZcdTUwNzBcdTUwNzFcdTUwNzJcdTUwNzNcdTUwNzRcdTUwNzVcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGVcdTUwOGZcdTUwOTBcdTUwOTFcdTUwOTJcdTUwOTNc'@;
put 'dTUwOTRcdTUwOTVcdTUwOTZcdTUwOTdcdTUwOThcdTUwOTlcdTUwOWFcdTUwOWJcdTUwOWNcdTUwOWRcdTUwOWVcdTUwOWZcdTUwYTBcdTUwYTFcdTUwYTJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWRcdTUwYWVcdTUwYWZcdTUwYjBcdTUwYjFcdTUwYjNcdTUwYjRcdTUwYjVcdTUw'@;
put 'YjZcdTUwYjdcdTUwYjhcdTUwYjlcdTUwYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMwXVttXV09MzMyODArbSxGWzMzMjgwK21dPXhbMTMwXVttXSk7Zm9yKHhbMTMxXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGJkXHU1MGJlXHU1MGJmXHU1MGMwXHU1MGMxXHU1MGMyXHU1MGMzXHU1MGM0XHU1MGM1XHU1MGM2XHU1MGM3XHU1MGM4XHU1MGM5XHU1MGNhXHU1MGNiXHU1MGNjXHU1MGNkXHU1MGNlXHU1MGQwXHU1'@;
put 'MGQxXHU1MGQyXHU1MGQzXHU1MGQ0XHU1MGQ1XHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiXHU1MGRjXHU1MGRkXHU1MGRlXHU1MGRmXHU1MGUwXHU1MGUxXHU1MGUyXHU1MGUzXHU1MGU0XHU1MGU1XHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0'@;
put 'XHU1MGY2XHU1MGY3XHU1MGY4XHU1MGY5XHU1MGZhXHU1MGZjXHU1MGZkXHU1MGZlXHU1MGZmXHU1MTAwXHU1MTAxXHU1MTAyXHU1MTAzXHU1MTA0XHU1MTA1XHU1MTA4XHVmZmZkXHU1MTA5XHU1MTBhXHU1MTBjXHU1MTBkXHU1MTBlXHU1MTBmXHU1MTEwXHU1MTExXHU1MTEzXHU1MTE0XHU1'@;
put 'MTE1XHU1MTE2XHU1MTE3XHU1MTE4XHU1MTE5XHU1MTFhXHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1MTFmXHU1MTIwXHU1MTIyXHU1MTIzXHU1MTI0XHU1MTI1XHU1MTI2XHU1MTI3XHU1MTI4XHU1MTI5XHU1MTJhXHU1MTJiXHU1MTJjXHU1MTJkXHU1MTJlXHU1MTJmXHU1MTMwXHU1MTMx'@;
put 'XHU1MTMyXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM2XHU1MTM3XHU1MTM4XHU1MTM5XHU1MTNhXHU1MTNiXHU1MTNjXHU1MTNkXHU1MTNlXHU1MTQyXHU1MTQ3XHU1MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkXHU1'@;
put 'MTVlXHU1MTVmXHU1MTYwXHU1MTYxXHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4'@;
put 'XHU1MTlhXHU1MTlkXHU1MTllXHU1MTlmXHU1MWExXHU1MWEzXHU1MWE2XHU1MWE3XHU1MWE4XHU1MWE5XHU1MWFhXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1'@;
put 'MWQwXHU1MWQyXHU1MWQzXHU1MWQ0XHU1MWQ1XHU1MWQ2XHU1MWQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMV1bbV1dPTMzNTM2K20sRlszMzUzNittXT14WzEzMV1bbV0pO2Zvcih4'@;
put 'WzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1'@;
put 'NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIz'@;
put 'Mlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1'@;
put 'NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4'@;
put 'YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1'@;
put 'NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJk'@;
put 'ZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1'@;
put 'NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzJdW21dXT0zMzc5MittLEZbMzM3OTIrbV09eFsx'@;
put 'MzJdW21dKTtmb3IoeFsxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlc'@;
put 'dTUzMmJcdTUzMmNcdTUzMmRcdTUzMmZcdTUzMzBcdTUzMzFcdTUzMzJcdTUzMzNcdTUzMzRcdTUzMzVcdTUzMzZcdTUzMzdcdTUzMzhcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUz'@;
put 'NWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGZcdWZmZmRcdTUzOTBcdTUzOTFcdTUzOTJcdTUzOTNcdTUzOTRcdTUzOTZc'@;
put 'dTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWZcdTUzYjBcdTUzYjFcdTUzYjJcdTUzYjNcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUz'@;
put 'YzBcdTUzYzNcdTUzYzRcdTUzYzVcdTUzYzZcdTUzYzdcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJc'@;
put 'dTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0'@;
put 'NWFcdTU0NWRcdTU0NWVcdTU0NWZcdTU0NjBcdTU0NjFcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjlcdTU0NmFcdTU0NmJcdTU0NmNcdTU0NmRcdTU0NmVcdTU0NmZcdTU0NzBcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlc'@;
put 'dTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMzXVttXV09MzQwNDgrbSxG'@;
put 'WzM0MDQ4K21dPXhbMTMzXVttXSk7Zm9yKHhbMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMz'@;
put 'XHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1NGUwXHU1NGUxXHU1NGUyXHU1NGUzXHU1NGU0XHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1NGY0XHU1NGY1XHU1NGY2XHU1NGY3XHU1NGY4XHU1NGY5XHU1NGZiXHU1NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1'@;
put 'NTA0XHU1NTA1XHU1NTA4XHU1NTBhXHU1NTBiXHU1NTBjXHU1NTBkXHU1NTBlXHU1NTEyXHU1NTEzXHU1NTE1XHU1NTE2XHU1NTE3XHU1NTE4XHU1NTE5XHU1NTFhXHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2XHVmZmZkXHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJk'@;
put 'XHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiXHU1NTRjXHU1NTRkXHU1NTRlXHU1NTRmXHU1NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1NTU3XHU1NTU4XHU1NTU5XHU1NTVhXHU1'@;
put 'NTViXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmXHU1NTcwXHU1NTcxXHU1NTcyXHU1NTczXHU1NTc0XHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkwXHU1NTkyXHU1NTkz'@;
put 'XHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwXHU1NWExXHU1NWEyXHU1NWEzXHU1NWE0XHU1NWE1XHU1NWE2XHU1NWE4XHU1NWE5XHU1NWFhXHU1NWFiXHU1NWFjXHU1NWFkXHU1NWFlXHU1NWFmXHU1NWIwXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1'@;
put 'NWJjXHU1NWJmXHU1NWMwXHU1NWMxXHU1NWMyXHU1NWMzXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3XHU1NWQ4XHU1NWQ5XHU1NWRhXHU1NWRiXHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYw'@;
put 'XHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4XHU1NWY5XHU1NWZhXHU1NWZiXHU1NWZjXHU1NWZmXHU1NjAyXHU1NjAzXHU1NjA0XHU1NjA1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNF1b'@;
put 'bV1dPTM0MzA0K20sRlszNDMwNCttXT14WzEzNF1bbV0pO2Zvcih4WzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYx'@;
put 'NVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1'@;
put 'NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2'@;
put 'NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1'@;
put 'NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZh'@;
put 'Ylx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1'@;
put 'NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZm'@;
put 'N1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcwZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM1XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxMzVdW21dXT0zNDU2MCttLEZbMzQ1NjArbV09eFsxMzVdW21dKTtmb3IoeFsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3MTJcdTU3MTNcdTU3MTRcdTU3MTVcdTU3MTZcdTU3MTdcdTU3MThcdTU3MTlcdTU3'@;
put 'MWFcdTU3MWJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzRcdTU3MzVcdTU3MzZcdTU3MzdcdTU3MzhcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhc'@;
put 'dTU3NDlcdTU3NGJcdTU3NTJcdTU3NTNcdTU3NTRcdTU3NTVcdTU3NTZcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODBcdWZm'@;
put 'ZmRcdTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGRcdTU3OGVcdTU3OGZcdTU3OTBcdTU3OTFcdTU3OTRcdTU3OTVcdTU3OTZcdTU3OTdcdTU3OThcdTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBc'@;
put 'dTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjlcdTU3YmFcdTU3YmJcdTU3YmNcdTU3YmRcdTU3YmVcdTU3YmZcdTU3YzBcdTU3YzFcdTU3YzRcdTU3YzVcdTU3YzZcdTU3YzdcdTU3YzhcdTU3YzlcdTU3Y2FcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3'@;
put 'ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTVcdTU3ZTZcdTU3ZTdcdTU3ZThcdTU3ZTlcdTU3ZWFcdTU3ZWJcdTU3ZWNcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFc'@;
put 'dTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjVcdTU4MjZcdTU4MjdcdTU4MjhcdTU4'@;
put 'MjlcdTU4MmJcdTU4MmNcdTU4MmRcdTU4MmVcdTU4MmZcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzZcdTU4MzdcdTU4MzhcdTU4MzlcdTU4M2FcdTU4M2JcdTU4M2NcdTU4M2RcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNl1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTM2XVttXV09MzQ4MTYrbSxGWzM0ODE2K21dPXhbMTM2XVttXSk7Zm9yKHhbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODNlXHU1ODNmXHU1ODQwXHU1ODQxXHU1ODQyXHU1ODQzXHU1'@;
put 'ODQ1XHU1ODQ2XHU1ODQ3XHU1ODQ4XHU1ODQ5XHU1ODRhXHU1ODRiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5XHU1ODVhXHU1ODViXHU1ODVjXHU1ODVkXHU1ODVmXHU1ODYwXHU1ODYxXHU1ODYyXHU1ODYzXHU1ODY0XHU1ODY2XHU1ODY3'@;
put 'XHU1ODY4XHU1ODY5XHU1ODZhXHU1ODZkXHU1ODZlXHU1ODZmXHU1ODcwXHU1ODcxXHU1ODcyXHU1ODczXHU1ODc0XHU1ODc1XHU1ODc2XHU1ODc3XHU1ODc4XHU1ODc5XHU1ODdhXHU1ODdiXHU1ODdjXHU1ODdkXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4XHU1ODhhXHU1'@;
put 'ODhiXHU1ODhjXHVmZmZkXHU1ODhkXHU1ODhlXHU1ODhmXHU1ODkwXHU1ODkxXHU1ODk0XHU1ODk1XHU1ODk2XHU1ODk3XHU1ODk4XHU1ODliXHU1ODljXHU1ODlkXHU1OGEwXHU1OGExXHU1OGEyXHU1OGEzXHU1OGE0XHU1OGE1XHU1OGE2XHU1OGE3XHU1OGFhXHU1OGFiXHU1OGFjXHU1OGFk'@;
put 'XHU1OGFlXHU1OGFmXHU1OGIwXHU1OGIxXHU1OGIyXHU1OGIzXHU1OGI0XHU1OGI1XHU1OGI2XHU1OGI3XHU1OGI4XHU1OGI5XHU1OGJhXHU1OGJiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0XHU1OGM2XHU1OGM3XHU1OGM4XHU1OGM5XHU1OGNhXHU1OGNiXHU1'@;
put 'OGNjXHU1OGNkXHU1OGNlXHU1OGNmXHU1OGQwXHU1OGQyXHU1OGQzXHU1OGQ0XHU1OGQ2XHU1OGQ3XHU1OGQ4XHU1OGQ5XHU1OGRhXHU1OGRiXHU1OGRjXHU1OGRkXHU1OGRlXHU1OGRmXHU1OGUwXHU1OGUxXHU1OGUyXHU1OGUzXHU1OGU1XHU1OGU2XHU1OGU3XHU1OGU4XHU1OGU5XHU1OGVh'@;
put 'XHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhXHU1OGZiXHU1OGZjXHU1OGZkXHU1OGZlXHU1OGZmXHU1OTAwXHU1OTAxXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4XHU1OTA5XHU1OTBhXHU1OTBiXHU1OTBjXHU1OTBlXHU1OTEwXHU1OTExXHU1'@;
put 'OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFkXHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM3XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzN11bbV1dPTM1MDcyK20sRlszNTA3MittXT14WzEzN11bbV0pO2Zvcih4WzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1'@;
put 'NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2'@;
put 'Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1'@;
put 'NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTliNFx1NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTlj'@;
put 'OFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1NTllMFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1'@;
put 'NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEy'@;
put 'MVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1'@;
put 'NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOF0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzhdW21dXT0zNTMyOCttLEZbMzUzMjgrbV09eFsxMzhdW21dKTtmb3IoeFsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNjFcdTVhNjNc'@;
put 'dTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmJcdTVhNmNcdTVhNmRcdTVhNmVcdTVhNmZcdTVhNzBcdTVhNzFcdTVhNzJcdTVhNzNcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODBcdTVhODFcdTVhODJcdTVhODNcdTVhODRcdTVhODVcdTVhODZcdTVh'@;
put 'ODdcdTVhODhcdTVhODlcdTVhOGFcdTVhOGJcdTVhOGNcdTVhOGRcdTVhOGVcdTVhOGZcdTVhOTBcdTVhOTFcdTVhOTNcdTVhOTRcdTVhOTVcdTVhOTZcdTVhOTdcdTVhOThcdTVhOTlcdTVhOWNcdTVhOWRcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTFcdTVhYTJcdTVhYTNcdTVhYTRcdTVhYTVc'@;
put 'dTVhYTZcdTVhYTdcdTVhYThcdTVhYTlcdTVhYWJcdTVhYWNcdWZmZmRcdTVhYWRcdTVhYWVcdTVhYWZcdTVhYjBcdTVhYjFcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjlcdTVhYmFcdTVhYmJcdTVhYmNcdTVhYmRcdTVhYmZcdTVhYzBcdTVhYzNcdTVhYzRcdTVhYzVcdTVhYzZcdTVhYzdcdTVh'@;
put 'YzhcdTVhY2FcdTVhY2JcdTVhY2RcdTVhY2VcdTVhY2ZcdTVhZDBcdTVhZDFcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWNcdTVhZWRcdTVhZWVcdTVhZWZcdTVhZjBc'@;
put 'dTVhZjJcdTVhZjNcdTVhZjRcdTVhZjVcdTVhZjZcdTVhZjdcdTVhZjhcdTVhZjlcdTVhZmFcdTVhZmJcdTVhZmNcdTVhZmRcdTVhZmVcdTVhZmZcdTViMDBcdTViMDFcdTViMDJcdTViMDNcdTViMDRcdTViMDVcdTViMDZcdTViMDdcdTViMDhcdTViMGFcdTViMGJcdTViMGNcdTViMGRcdTVi'@;
put 'MGVcdTViMGZcdTViMTBcdTViMTFcdTViMTJcdTViMTNcdTViMTRcdTViMTVcdTViMThcdTViMTlcdTViMWFcdTViMWJcdTViMWNcdTViMWRcdTViMWVcdTViMWZcdTViMjBcdTViMjFcdTViMjJcdTViMjNcdTViMjRcdTViMjVcdTViMjZcdTViMjdcdTViMjhcdTViMjlcdTViMmFcdTViMmJc'@;
put 'dTViMmNcdTViMmRcdTViMmVcdTViMmZcdTViMzBcdTViMzFcdTViMzNcdTViMzVcdTViMzZcdTViMzhcdTViMzlcdTViM2FcdTViM2JcdTViM2NcdTViM2RcdTViM2VcdTViM2ZcdTViNDFcdTViNDJcdTViNDNcdTViNDRcdTViNDVcdTViNDZcdTViNDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM5XVttXV09MzU1ODQrbSxGWzM1NTg0K21dPXhbMTM5XVttXSk7Zm9yKHhbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU1YjQ4XHU1YjQ5XHU1YjRhXHU1YjRiXHU1YjRjXHU1YjRkXHU1YjRlXHU1YjRmXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1'@;
put 'YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMx'@;
put 'XHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmXHVmZmZkXHU1YmQxXHU1YmQ0XHU1YmQ1XHU1YmQ2XHU1YmQ3XHU1YmQ4XHU1YmQ5XHU1YmRhXHU1YmRiXHU1YmRjXHU1YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1YmU3XHU1YmU5XHU1YmVhXHU1YmViXHU1'@;
put 'YmVjXHU1YmVkXHU1YmVmXHU1YmYxXHU1YmYyXHU1YmYzXHU1YmY0XHU1YmY1XHU1YmY2XHU1YmY3XHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEzXHU1YzE3XHU1YzE5XHU1YzFi'@;
put 'XHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1YzRkXHU1YzUyXHU1YzUzXHU1'@;
put 'YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3XHU1YzY4XHU1YzY5XHU1YzZhXHU1YzZiXHU1YzZjXHU1YzZkXHU1YzcwXHU1YzcyXHU1YzczXHU1Yzc0XHU1Yzc1XHU1Yzc2XHU1Yzc3XHU1Yzc4XHU1YzdiXHU1Yzdj'@;
put 'XHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzXHU1Yzg0XHU1Yzg1XHU1Yzg2XHU1Yzg3XHU1Yzg5XHU1YzhhXHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkXHU1YzllXHU1YzlmXHU1Y2EwXHU1Y2ExXHU1Y2E0XHU1Y2E1XHU1Y2E2XHU1Y2E3XHU1Y2E4XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MF1bbV1dPTM1ODQwK20sRlszNTg0MCttXT14WzE0MF1bbV0pO2Zvcih4WzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1'@;
put 'NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1NWNkZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNm'@;
put 'NVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1'@;
put 'NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQz'@;
put 'Y1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1'@;
put 'NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4'@;
put 'MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1'@;
put 'NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDFdW21dXT0zNjA5NittLEZbMzYwOTYrbV09eFsxNDFdW21dKTtmb3IoeFsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkYTFcdTVkYTJcdTVkYTNcdTVkYTRcdTVkYTVcdTVkYTZcdTVkYTdcdTVkYThcdTVkYTlcdTVkYWFcdTVkYWJcdTVkYWNcdTVkYWRcdTVkYWVcdTVkYWZcdTVkYjBcdTVkYjFcdTVkYjJcdTVkYjNcdTVkYjRcdTVkYjVcdTVkYjZcdTVkYjhc'@;
put 'dTVkYjlcdTVkYmFcdTVkYmJcdTVkYmNcdTVkYmRcdTVkYmVcdTVkYmZcdTVkYzBcdTVkYzFcdTVkYzJcdTVkYzNcdTVkYzRcdTVkYzZcdTVkYzdcdTVkYzhcdTVkYzlcdTVkY2FcdTVkY2JcdTVkY2NcdTVkY2VcdTVkY2ZcdTVkZDBcdTVkZDFcdTVkZDJcdTVkZDNcdTVkZDRcdTVkZDVcdTVk'@;
put 'ZDZcdTVkZDdcdTVkZDhcdTVkZDlcdTVkZGFcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWRcdWZmZmRcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjhcdTVkZjlcdTVkZmFcdTVkZmJcdTVkZmNcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFc'@;
put 'dTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWVcdTVlMWZcdTVlMjBcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjRcdTVlMjVcdTVlMjhcdTVlMjlcdTVlMmFcdTVlMmJcdTVlMmNcdTVlMmZcdTVlMzBcdTVlMzJcdTVlMzNcdTVlMzRcdTVlMzVcdTVlMzZcdTVlMzlcdTVl'@;
put 'M2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDZcdTVlNDdcdTVlNDhcdTVlNDlcdTVlNGFcdTVlNGJcdTVlNGRcdTVlNGVcdTVlNGZcdTVlNTBcdTVlNTFcdTVlNTJcdTVlNTNcdTVlNTZcdTVlNTdcdTVlNThcdTVlNTlcdTVlNWFcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBc'@;
put 'dTVlNjNcdTVlNjRcdTVlNjVcdTVlNjZcdTVlNjdcdTVlNjhcdTVlNjlcdTVlNmFcdTVlNmJcdTVlNmNcdTVlNmRcdTVlNmVcdTVlNmZcdTVlNzBcdTVlNzFcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVl'@;
put 'OGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYThcdTVlYTlcdTVlYWFcdTVlYWJcdTVlYWNcdTVlYWVcdTVlYWZcdTVlYjBcdTVlYjFcdTVlYjJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmZcdTVlYzBcdTVlYzFcdTVlYzJc'@;
put 'dTVlYzNcdTVlYzRcdTVlYzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQyXVttXV09MzYzNTIrbSxGWzM2MzUyK21dPXhbMTQyXVttXSk7Zm9yKHhbMTQzXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiXHU1ZWNjXHU1ZWNkXHU1ZWNlXHU1ZWNmXHU1ZWQwXHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjXHU1ZWRkXHU1ZWRlXHU1ZWRmXHU1ZWUwXHU1ZWUx'@;
put 'XHU1ZWUyXHU1ZWUzXHU1ZWU0XHU1ZWU1XHU1ZWU2XHU1ZWU3XHU1ZWU5XHU1ZWViXHU1ZWVjXHU1ZWVkXHU1ZWVlXHU1ZWVmXHU1ZWYwXHU1ZWYxXHU1ZWYyXHU1ZWYzXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5XHU1ZjBjXHU1'@;
put 'ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHVmZmZkXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjMyXHU1ZjMzXHU1ZjM0XHU1ZjM1XHU1ZjM2XHU1ZjM3XHU1ZjM4'@;
put 'XHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNmXHU1ZjQxXHU1ZjQyXHU1ZjQzXHU1ZjQ0XHU1ZjQ1XHU1ZjQ2XHU1ZjQ3XHU1ZjQ4XHU1ZjQ5XHU1ZjRhXHU1ZjRiXHU1ZjRjXHU1ZjRkXHU1ZjRlXHU1ZjRmXHU1ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1'@;
put 'ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1ZjkzXHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1Zjli'@;
put 'XHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyXHU1ZmEzXHU1ZmE0XHU1ZmE1XHU1ZmE2XHU1ZmE3XHU1ZmE5XHU1ZmFiXHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1ZmIxXHU1ZmIyXHU1ZmIzXHU1ZmI0XHU1ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJlXHU1ZmJmXHU1ZmMwXHU1'@;
put 'ZmMxXHU1ZmMyXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0XHU1ZmY2'@;
put 'XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0M11bbV1dPTM2NjA4K20sRlszNjYwOCttXT14WzE0M11bbV0pO2Zvcih4WzE0NF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAz'@;
put 'MFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1'@;
put 'NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4'@;
put 'Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1'@;
put 'NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBkMFx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBm'@;
put 'MVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1'@;
put 'NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEyZlx1NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEz'@;
put 'ZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDRdW21dXT0zNjg2NCttLEZbMzY4NjQrbV09eFsxNDRdW21dKTtm'@;
put 'b3IoeFsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTZcdTYxNTdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNWJcdTYxNWNcdTYx'@;
put 'NWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjlcdTYxNmFcdTYxNmJcdTYxNmNcdTYxNmRcdTYxNmVcdTYxNmZcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzhcdTYxNzlcdTYxN2FcdTYxN2JcdTYxN2NcdTYxN2RcdTYxN2VcdTYxN2Zc'@;
put 'dTYxODBcdTYxODFcdTYxODJcdTYxODNcdTYxODRcdTYxODVcdTYxODZcdTYxODdcdTYxODhcdTYxODlcdTYxOGFcdTYxOGNcdTYxOGRcdTYxOGZcdTYxOTBcdTYxOTFcdTYxOTJcdTYxOTNcdTYxOTVcdWZmZmRcdTYxOTZcdTYxOTdcdTYxOThcdTYxOTlcdTYxOWFcdTYxOWJcdTYxOWNcdTYx'@;
put 'OWVcdTYxOWZcdTYxYTBcdTYxYTFcdTYxYTJcdTYxYTNcdTYxYTRcdTYxYTVcdTYxYTZcdTYxYWFcdTYxYWJcdTYxYWRcdTYxYWVcdTYxYWZcdTYxYjBcdTYxYjFcdTYxYjJcdTYxYjNcdTYxYjRcdTYxYjVcdTYxYjZcdTYxYjhcdTYxYjlcdTYxYmFcdTYxYmJcdTYxYmNcdTYxYmRcdTYxYmZc'@;
put 'dTYxYzBcdTYxYzFcdTYxYzNcdTYxYzRcdTYxYzVcdTYxYzZcdTYxYzdcdTYxYzlcdTYxY2NcdTYxY2RcdTYxY2VcdTYxY2ZcdTYxZDBcdTYxZDNcdTYxZDVcdTYxZDZcdTYxZDdcdTYxZDhcdTYxZDlcdTYxZGFcdTYxZGJcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTBcdTYxZTFcdTYx'@;
put 'ZTJcdTYxZTNcdTYxZTRcdTYxZTVcdTYxZTdcdTYxZThcdTYxZTlcdTYxZWFcdTYxZWJcdTYxZWNcdTYxZWRcdTYxZWVcdTYxZWZcdTYxZjBcdTYxZjFcdTYxZjJcdTYxZjNcdTYxZjRcdTYxZjZcdTYxZjdcdTYxZjhcdTYxZjlcdTYxZmFcdTYxZmJcdTYxZmNcdTYxZmRcdTYxZmVcdTYyMDBc'@;
put 'dTYyMDFcdTYyMDJcdTYyMDNcdTYyMDRcdTYyMDVcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYy'@;
put 'MzhcdTYyMzlcdTYyM2FcdTYyM2JcdTYyM2NcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ1XVttXV09MzcxMjArbSxGWzM3MTIwK21d'@;
put 'PXhbMTQ1XVttXSk7Zm9yKHhbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2MjVjXHU2MjVkXHU2MjVlXHU2MjVmXHU2MjYwXHU2MjYxXHU2MjYyXHU2'@;
put 'MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2MjhiXHU2MjhjXHU2MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2Mjk0XHU2Mjk5XHU2Mjlj'@;
put 'XHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxXHVmZmZkXHU2MmMzXHU2MmNiXHU2MmNmXHU2MmQxXHU2MmQ1XHU2'@;
put 'MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAwXHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEyXHU2MzEzXHU2MzE0'@;
put 'XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzXHU2MzM0XHU2MzM1XHU2MzM2XHU2MzM3XHU2MzM4XHU2MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2'@;
put 'MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2XHU2MzU3XHU2MzU4XHU2MzU5XHU2MzVhXHU2MzViXHU2MzVjXHU2MzVkXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1'@;
put 'XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5XHU2MzlhXHU2MzliXHU2MzljXHU2MzlkXHU2MzllXHU2MzlmXHU2M2ExXHU2M2E0XHU2'@;
put 'M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Nl1bbV1dPTM3Mzc2'@;
put 'K20sRlszNzM3NittXT14WzE0Nl1bbV0pO2Zvcih4WzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1'@;
put 'NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1NjNlN1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNm'@;
put 'Y1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNVx1NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1'@;
put 'NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1'@;
put 'M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2M1x1NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1'@;
put 'NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1NjQ4OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5'@;
put 'Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1'@;
put 'NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'NDddW21dXT0zNzYzMittLEZbMzc2MzIrbV09eFsxNDddW21dKTtmb3IoeFsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTdcdTY0ZThc'@;
put 'dTY0ZTlcdTY0ZWFcdTY0ZWJcdTY0ZWNcdTY0ZWRcdTY0ZWVcdTY0ZWZcdTY0ZjBcdTY0ZjFcdTY0ZjJcdTY0ZjNcdTY0ZjRcdTY0ZjVcdTY0ZjZcdTY0ZjdcdTY0ZjhcdTY0ZjlcdTY0ZmFcdTY0ZmJcdTY0ZmNcdTY0ZmRcdTY0ZmVcdTY0ZmZcdTY1MDFcdTY1MDJcdTY1MDNcdTY1MDRcdTY1'@;
put 'MDVcdTY1MDZcdTY1MDdcdTY1MDhcdTY1MGFcdTY1MGJcdTY1MGNcdTY1MGRcdTY1MGVcdTY1MGZcdTY1MTBcdTY1MTFcdTY1MTNcdTY1MTRcdTY1MTVcdTY1MTZcdTY1MTdcdTY1MTlcdTY1MWFcdTY1MWJcdTY1MWNcdTY1MWRcdTY1MWVcdTY1MWZcdTY1MjBcdTY1MjFcdWZmZmRcdTY1MjJc'@;
put 'dTY1MjNcdTY1MjRcdTY1MjZcdTY1MjdcdTY1MjhcdTY1MjlcdTY1MmFcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDBcdTY1NDFcdTY1NDJcdTY1NDNcdTY1NDRcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1'@;
put 'NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzhcdTY1NzlcdTY1N2Fc'@;
put 'dTY1N2JcdTY1N2NcdTY1N2RcdTY1N2VcdTY1N2ZcdTY1ODBcdTY1ODFcdTY1ODJcdTY1ODNcdTY1ODRcdTY1ODVcdTY1ODZcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1'@;
put 'YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjFcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YjVcdTY1YjZcdTY1YjdcdTY1YjhcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFc'@;
put 'dTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDhcdTY1ZDlcdTY1ZGFcdTY1ZGJcdTY1ZGNcdTY1ZGRcdTY1ZGVcdTY1ZGZcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OF1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTQ4XVttXV09Mzc4ODgrbSxGWzM3ODg4K21dPXhbMTQ4XVttXSk7Zm9yKHhbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZiXHU2NWZj'@;
put 'XHU2NWZkXHU2NWZlXHU2NWZmXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2'@;
put 'NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3XHU2NjM4XHU2NjM5XHU2NjNhXHU2NjNiXHU2NjNkXHU2NjNmXHU2NjQwXHU2NjQyXHU2NjQ0XHU2NjQ1XHU2NjQ2XHU2NjQ3XHU2NjQ4XHU2NjQ5XHU2NjRhXHU2NjRkXHU2NjRlXHU2NjUwXHU2NjUxXHU2NjU4'@;
put 'XHVmZmZkXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5XHU2NjZhXHU2NjZiXHU2NjZjXHU2NjZkXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2'@;
put 'NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4XHU2Njk5XHU2NjlhXHU2NjliXHU2NjljXHU2NjllXHU2NjlmXHU2NmEwXHU2NmExXHU2NmEyXHU2NmEzXHU2NmE0'@;
put 'XHU2NmE1XHU2NmE2XHU2NmE5XHU2NmFhXHU2NmFiXHU2NmFjXHU2NmFkXHU2NmFmXHU2NmIwXHU2NmIxXHU2NmIyXHU2NmIzXHU2NmI1XHU2NmI2XHU2NmI3XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmXHU2NmMwXHU2NmMxXHU2NmMyXHU2NmMzXHU2NmM0XHU2NmM1XHU2'@;
put 'NmM2XHU2NmM3XHU2NmM4XHU2NmM5XHU2NmNhXHU2NmNiXHU2NmNjXHU2NmNkXHU2NmNlXHU2NmNmXHU2NmQwXHU2NmQxXHU2NmQyXHU2NmQzXHU2NmQ0XHU2NmQ1XHU2NmQ2XHU2NmQ3XHU2NmQ4XHU2NmRhXHU2NmRlXHU2NmRmXHU2NmUwXHU2NmUxXHU2NmUyXHU2NmUzXHU2NmU0XHU2NmU1'@;
put 'XHU2NmU3XHU2NmU4XHU2NmVhXHU2NmViXHU2NmVjXHU2NmVkXHU2NmVlXHU2NmVmXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2NzAzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDld'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OV1bbV1dPTM4MTQ0K20sRlszODE0NCttXT14WzE0OV1bbV0pO2Zvcih4WzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1Njcw'@;
put 'ZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1NjcyM1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1'@;
put 'NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1N1x1Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3'@;
put 'MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1'@;
put 'NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1NjdiY1x1NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1Njdj'@;
put 'ZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1'@;
put 'NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1NjgxY1x1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1Njgy'@;
put 'ZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MF0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTBdW21dXT0zODQwMCttLEZbMzg0MDArbV09eFsxNTBdW21dKTtmb3IoeFsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4NWNcdTY4NWRcdTY4NWVcdTY4'@;
put 'NWZcdTY4NmFcdTY4NmNcdTY4NmRcdTY4NmVcdTY4NmZcdTY4NzBcdTY4NzFcdTY4NzJcdTY4NzNcdTY4NzVcdTY4NzhcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4N2RcdTY4N2VcdTY4N2ZcdTY4ODBcdTY4ODJcdTY4ODRcdTY4ODdcdTY4ODhcdTY4ODlcdTY4OGFcdTY4OGJcdTY4OGNc'@;
put 'dTY4OGRcdTY4OGVcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OThcdTY4OTlcdTY4OWFcdTY4OWJcdTY4OWNcdTY4OWRcdTY4OWVcdTY4OWZcdTY4YTBcdTY4YTFcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4'@;
put 'YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4YjhcdWZmZmRcdTY4YjlcdTY4YmFcdTY4YmJcdTY4YmNcdTY4YmRcdTY4YmVcdTY4YmZcdTY4YzFcdTY4YzNcdTY4YzRcdTY4YzVcdTY4YzZcdTY4YzdcdTY4YzhcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRc'@;
put 'dTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGJcdTY4ZGNcdTY4ZGRcdTY4ZGVcdTY4ZGZcdTY4ZTFcdTY4ZTJcdTY4ZTRcdTY4ZTVcdTY4ZTZcdTY4ZTdcdTY4ZThcdTY4ZTlcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4ZWRcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4'@;
put 'ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDZcdTY5MDdcdTY5MDhcdTY5MDlcdTY5MGFcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTNcdTY5MTRcdTY5MTVcdTY5MTZcdTY5MTdcdTY5MThcdTY5MTlcdTY5MWFcdTY5MWJcdTY5MWNcdTY5MWRcdTY5MWVc'@;
put 'dTY5MjFcdTY5MjJcdTY5MjNcdTY5MjVcdTY5MjZcdTY5MjdcdTY5MjhcdTY5MjlcdTY5MmFcdTY5MmJcdTY5MmNcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDNcdTY5'@;
put 'NDRcdTY5NDVcdTY5NDZcdTY5NDdcdTY5NDhcdTY5NDlcdTY5NGFcdTY5NGJcdTY5NGNcdTY5NGRcdTY5NGVcdTY5NGZcdTY5NTBcdTY5NTFcdTY5NTJcdTY5NTNcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTFd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUxXVttXV09Mzg2NTYrbSxGWzM4NjU2K21dPXhbMTUxXVttXSk7Zm9yKHhbMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTYxXHU2'@;
put 'OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyXHU2OTczXHU2OTc0XHU2OTc1XHU2OTc2XHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThl'@;
put 'XHU2OThmXHU2OTkwXHU2OTkxXHU2OTkyXHU2OTkzXHU2OTk2XHU2OTk3XHU2OTk5XHU2OTlhXHU2OTlkXHU2OTllXHU2OTlmXHU2OWEwXHU2OWExXHU2OWEyXHU2OWEzXHU2OWE0XHU2OWE1XHU2OWE2XHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIzXHU2'@;
put 'OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2OWJhXHU2OWJjXHU2OWJkXHVmZmZkXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyXHU2OWMzXHU2OWM0XHU2OWM1XHU2OWM2XHU2OWM3XHU2OWM4XHU2OWM5XHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1XHU2OWQ2XHU2OWQ3'@;
put 'XHU2OWQ4XHU2OWQ5XHU2OWRhXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxXHU2OWUyXHU2OWUzXHU2OWU0XHU2OWU1XHU2OWU2XHU2OWU3XHU2OWU4XHU2OWU5XHU2OWVhXHU2OWViXHU2OWVjXHU2OWVlXHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzXHU2OWY0XHU2OWY1XHU2OWY2XHU2OWY3XHU2'@;
put 'OWY4XHU2OWY5XHU2OWZhXHU2OWZiXHU2OWZjXHU2OWZlXHU2YTAwXHU2YTAxXHU2YTAyXHU2YTAzXHU2YTA0XHU2YTA1XHU2YTA2XHU2YTA3XHU2YTA4XHU2YTA5XHU2YTBiXHU2YTBjXHU2YTBkXHU2YTBlXHU2YTBmXHU2YTEwXHU2YTExXHU2YTEyXHU2YTEzXHU2YTE0XHU2YTE1XHU2YTE2'@;
put 'XHU2YTE5XHU2YTFhXHU2YTFiXHU2YTFjXHU2YTFkXHU2YTFlXHU2YTIwXHU2YTIyXHU2YTIzXHU2YTI0XHU2YTI1XHU2YTI2XHU2YTI3XHU2YTI5XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2XHU2YTM3XHU2YTM4XHU2YTM5XHU2YTNhXHU2'@;
put 'YTNiXHU2YTNjXHU2YTNmXHU2YTQwXHU2YTQxXHU2YTQyXHU2YTQzXHU2YTQ1XHU2YTQ2XHU2YTQ4XHU2YTQ5XHU2YTRhXHU2YTRiXHU2YTRjXHU2YTRkXHU2YTRlXHU2YTRmXHU2YTUxXHU2YTUyXHU2YTUzXHU2YTU0XHU2YTU1XHU2YTU2XHU2YTU3XHU2YTVhXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Ml1bbV1dPTM4OTEyK20sRlszODkxMittXT14WzE1Ml1bbV0pO2Zvcih4WzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1NmE2Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3'@;
put 'YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4Ylx1NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1'@;
put 'NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1NmFhZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFi'@;
put 'Ylx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFjOVx1NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1'@;
put 'NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1NmFlNVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFm'@;
put 'Mlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIwMFx1NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1'@;
put 'NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1NmIxY1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzE1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTNdW21dXT0zOTE2OCttLEZbMzkxNjgrbV09eFsxNTNdW21dKTtmb3IoeFsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTZiMmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGRcdTZiNGVcdTZiNGZcdTZiNTBcdTZi'@;
put 'NTFcdTZiNTJcdTZiNTNcdTZiNTRcdTZiNTVcdTZiNTZcdTZiNTdcdTZiNThcdTZiNWFcdTZiNWJcdTZiNWNcdTZiNWRcdTZiNWVcdTZiNWZcdTZiNjBcdTZiNjFcdTZiNjhcdTZiNjlcdTZiNmJcdTZiNmNcdTZiNmRcdTZiNmVcdTZiNmZcdTZiNzBcdTZiNzFcdTZiNzJcdTZiNzNcdTZiNzRc'@;
put 'dTZiNzVcdTZiNzZcdTZiNzdcdTZiNzhcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODhcdWZmZmRcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWNcdTZiOWRcdTZiOWVcdTZiOWZcdTZiYTBcdTZi'@;
put 'YTJcdTZiYTNcdTZiYTRcdTZiYTVcdTZiYTZcdTZiYTdcdTZiYThcdTZiYTlcdTZiYWJcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYWZcdTZiYjBcdTZiYjFcdTZiYjJcdTZiYjZcdTZiYjhcdTZiYjlcdTZiYmFcdTZiYmJcdTZiYmNcdTZiYmRcdTZiYmVcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzZc'@;
put 'dTZiYzdcdTZiYzhcdTZiYzlcdTZiY2FcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGNcdTZiZGRcdTZiZGVcdTZiZGZcdTZiZTBcdTZiZTJcdTZiZTNcdTZiZTRcdTZiZTVcdTZiZTZcdTZiZTdcdTZiZThcdTZiZTlcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZi'@;
put 'ZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmVcdTZiZmZcdTZjMDBcdTZjMDFcdTZjMDJcdTZjMDNcdTZjMDRcdTZjMDhcdTZjMDlcdTZjMGFcdTZjMGJcdTZjMGNcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBc'@;
put 'dTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGJcdTZjNGNcdTZjNGRcdTZjNGVcdTZjNGZcdTZjNTFcdTZjNTJcdTZjNTNcdTZj'@;
put 'NTZcdTZjNThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU0XVttXV09Mzk0MjQrbSxGWzM5NDI0K21dPXhbMTU0XVttXSk7Zm9yKHhbMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiXHU2YzZjXHU2YzZkXHU2YzZlXHU2YzZmXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2YzgwXHU2'@;
put 'Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2Y2Mw'@;
put 'XHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4XHVmZmZkXHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0XHU2'@;
put 'Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmXHU2ZDIwXHU2ZDIxXHU2ZDIyXHU2ZDIzXHU2ZDI0XHU2ZDI2'@;
put 'XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYyXHU2'@;
put 'ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdiXHU2ZDdkXHU2ZDdlXHU2ZDdmXHU2ZDgwXHU2ZDgxXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhk'@;
put 'XHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZDk5XHU2ZDlhXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2ZGIxXHU2ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5XHU2ZGJhXHU2ZGJiXHU2ZGJjXHU2ZGJkXHU2ZGJlXHU2ZGMxXHU2ZGMyXHU2'@;
put 'ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NV1bbV1dPTM5NjgwK20sRlszOTY4MCttXT14WzE1NV1bbV0pO2Zvcih4WzE1Nl09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1'@;
put 'NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUwMlx1NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUx'@;
put 'OVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1'@;
put 'NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2'@;
put 'OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1NmU3OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1'@;
put 'NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmVi'@;
put 'M1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1'@;
put 'NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTZdW21dXT0zOTkzNittLEZbMzk5MzYrbV09eFsxNTZdW21dKTtmb3IoeFsxNTdd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmFcdTZlZmJcdTZlZmNcdTZlZmRcdTZlZmVcdTZlZmZcdTZmMDBcdTZmMDFcdTZmMDNcdTZmMDRc'@;
put 'dTZmMDVcdTZmMDdcdTZmMDhcdTZmMGFcdTZmMGJcdTZmMGNcdTZmMGRcdTZmMGVcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTZcdTZmMTdcdTZmMThcdTZmMTlcdTZmMWFcdTZmMWJcdTZmMWNcdTZmMWRcdTZmMWVcdTZmMWZcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZm'@;
put 'MjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzdcdTZmMzhcdTZmMzlcdTZmM2FcdTZmM2JcdTZmM2NcdTZmM2RcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDJcdWZmZmRcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGVcdTZmNGZc'@;
put 'dTZmNTBcdTZmNTFcdTZmNTJcdTZmNTNcdTZmNTRcdTZmNTVcdTZmNTZcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjdcdTZmNjhcdTZmNjlcdTZmNmFcdTZmNmJcdTZmNmNcdTZmNmZcdTZmNzBcdTZmNzFcdTZm'@;
put 'NzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2RcdTZmN2VcdTZmN2ZcdTZmODBcdTZmODFcdTZmODJcdTZmODNcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGZcdTZmOTBcdTZmOTFcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTVcdTZmOTZcdTZmOTdcdTZmOThc'@;
put 'dTZmOTlcdTZmOWFcdTZmOWJcdTZmOWRcdTZmOWVcdTZmOWZcdTZmYTBcdTZmYTJcdTZmYTNcdTZmYTRcdTZmYTVcdTZmYTZcdTZmYThcdTZmYTlcdTZmYWFcdTZmYWJcdTZmYWNcdTZmYWRcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjFcdTZmYjJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZm'@;
put 'YmFcdTZmYmJcdTZmYmNcdTZmYmRcdTZmYmVcdTZmYmZcdTZmYzFcdTZmYzNcdTZmYzRcdTZmYzVcdTZmYzZcdTZmYzdcdTZmYzhcdTZmY2FcdTZmY2JcdTZmY2NcdTZmY2RcdTZmY2VcdTZmY2ZcdTZmZDBcdTZmZDNcdTZmZDRcdTZmZDVcdTZmZDZcdTZmZDdcdTZmZDhcdTZmZDlcdTZmZGFc'@;
put 'dTZmZGJcdTZmZGNcdTZmZGRcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU3XVttXV09NDAxOTIrbSxGWzQwMTkyK21dPXhbMTU3XVtt'@;
put 'XSk7Zm9yKHhbMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmU2XHU2ZmU3XHU2ZmU4XHU2ZmU5XHU2ZmVhXHU2ZmViXHU2ZmVjXHU2ZmVkXHU2ZmYwXHU2ZmYxXHU2ZmYyXHU2ZmYzXHU2ZmY0XHU2ZmY1XHU2ZmY2XHU2ZmY3'@;
put 'XHU2ZmY4XHU2ZmY5XHU2ZmZhXHU2ZmZiXHU2ZmZjXHU2ZmZkXHU2ZmZlXHU2ZmZmXHU3MDAwXHU3MDAxXHU3MDAyXHU3MDAzXHU3MDA0XHU3MDA1XHU3MDA2XHU3MDA3XHU3MDA4XHU3MDA5XHU3MDBhXHU3MDBiXHU3MDBjXHU3MDBkXHU3MDBlXHU3MDBmXHU3MDEwXHU3MDEyXHU3MDEzXHU3'@;
put 'MDE0XHU3MDE1XHU3MDE2XHU3MDE3XHU3MDE4XHU3MDE5XHU3MDFjXHU3MDFkXHU3MDFlXHU3MDFmXHU3MDIwXHU3MDIxXHU3MDIyXHU3MDI0XHU3MDI1XHU3MDI2XHU3MDI3XHU3MDI4XHU3MDI5XHU3MDJhXHVmZmZkXHU3MDJiXHU3MDJjXHU3MDJkXHU3MDJlXHU3MDJmXHU3MDMwXHU3MDMx'@;
put 'XHU3MDMyXHU3MDMzXHU3MDM0XHU3MDM2XHU3MDM3XHU3MDM4XHU3MDNhXHU3MDNiXHU3MDNjXHU3MDNkXHU3MDNlXHU3MDNmXHU3MDQwXHU3MDQxXHU3MDQyXHU3MDQzXHU3MDQ0XHU3MDQ1XHU3MDQ2XHU3MDQ3XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDRkXHU3MDRlXHU3MDUwXHU3'@;
put 'MDUxXHU3MDUyXHU3MDUzXHU3MDU0XHU3MDU1XHU3MDU2XHU3MDU3XHU3MDU4XHU3MDU5XHU3MDVhXHU3MDViXHU3MDVjXHU3MDVkXHU3MDVmXHU3MDYwXHU3MDYxXHU3MDYyXHU3MDYzXHU3MDY0XHU3MDY1XHU3MDY2XHU3MDY3XHU3MDY4XHU3MDY5XHU3MDZhXHU3MDZlXHU3MDcxXHU3MDcy'@;
put 'XHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllXHU3MDlmXHU3'@;
put 'MGEwXHU3MGExXHU3MGEyXHU3MGEzXHU3MGE0XHU3MGE1XHU3MGE2XHU3MGE3XHU3MGE4XHU3MGE5XHU3MGFhXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1XHU3MGI2XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiXHU3MGNjXHU3MGNkXHU3MGNl'@;
put 'XHU3MGNmXHU3MGQwXHU3MGQxXHU3MGQyXHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ3XHU3MGRhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OF1bbV1dPTQwNDQ4K20sRls0MDQ0'@;
put 'OCttXT14WzE1OF1bbV0pO2Zvcih4WzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBm'@;
put 'M1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEwNVx1NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1'@;
put 'NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1NzEyYlx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEz'@;
put 'YVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1'@;
put 'NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4'@;
put 'MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1'@;
put 'NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFj'@;
put 'Nlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTldW21dXT00'@;
put 'MDcwNCttLEZbNDA3MDQrbV09eFsxNTldW21dKTtmb3IoeFsxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxZDZcdTcxZDdcdTcxZDhcdTcxZDlcdTcxZGFcdTcxZGJcdTcxZGNcdTcxZGRcdTcxZGVcdTcxZGZcdTcxZTFcdTcx'@;
put 'ZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZThcdTcxZTlcdTcxZWFcdTcxZWJcdTcxZWNcdTcxZWRcdTcxZWZcdTcxZjBcdTcxZjFcdTcxZjJcdTcxZjNcdTcxZjRcdTcxZjVcdTcxZjZcdTcxZjdcdTcxZjhcdTcxZmFcdTcxZmJcdTcxZmNcdTcxZmRcdTcxZmVcdTcxZmZcdTcyMDBcdTcyMDFc'@;
put 'dTcyMDJcdTcyMDNcdTcyMDRcdTcyMDVcdTcyMDdcdTcyMDhcdTcyMDlcdTcyMGFcdTcyMGJcdTcyMGNcdTcyMGRcdTcyMGVcdTcyMGZcdTcyMTBcdTcyMTFcdTcyMTJcdTcyMTNcdTcyMTRcdTcyMTVcdTcyMTZcdTcyMTdcdTcyMThcdTcyMTlcdTcyMWFcdWZmZmRcdTcyMWJcdTcyMWNcdTcy'@;
put 'MWVcdTcyMWZcdTcyMjBcdTcyMjFcdTcyMjJcdTcyMjNcdTcyMjRcdTcyMjVcdTcyMjZcdTcyMjdcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDBcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDRcdTcyNDVcdTcyNDZc'@;
put 'dTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcy'@;
put 'NzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODVcdTcyODZcdTcyODdcdTcyODhcdTcyODlcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTNcdTcyOTRcdTcyOTVcdTcyOTZcdTcyOTdcdTcyOThcdTcyOTlcdTcyOWFcdTcyOWJcdTcyOWNc'@;
put 'dTcyOWRcdTcyOWVcdTcyYTBcdTcyYTFcdTcyYTJcdTcyYTNcdTcyYTRcdTcyYTVcdTcyYTZcdTcyYTdcdTcyYThcdTcyYTlcdTcyYWFcdTcyYWJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmFcdTcyYmJcdTcyYmNcdTcyYmRcdTcyYmVcdTcyYmZcdTcyYzBcdTcyYzVcdTcy'@;
put 'YzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMTYwXVttXV09NDA5NjArbSxGWzQwOTYwK21dPXhbMTYwXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZmNWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJc'@;
put 'dTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIy'@;
put 'NjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2Jc'@;
put 'dTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MTYxXVttXV09NDEyMTYrbSxGWzQxMjE2K21dPXhbMTYxXVttXSk7Zm9yKHhbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhl'@;
put 'XHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUy'@;
put 'NDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5'@;
put 'XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzE2Ml1bbV1dPTQxNDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYx'@;
put 'NVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1'@;
put 'ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0'@;
put 'Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYz'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtmb3IoeFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMw'@;
put 'NTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVc'@;
put 'dTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMw'@;
put 'OGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzE2NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21dPXhbMTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUz'@;
put 'MGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNj'@;
put 'XHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUz'@;
put 'MGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY1'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQwK20sRls0MjI0MCttXT14WzE2NV1bbV0pO2Zvcih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1'@;
put 'MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNi'@;
put 'YVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1'@;
put 'ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NFx1ZmZmZFx1ZmZmZFx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMVx1ZmZmZFx1ZmUzM1x1ZmUzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE2Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjZdW21dXT00MjQ5NittLEZbNDI0OTYrbV09eFsxNjZdW21dKTtmb3IoeFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFc'@;
put 'dTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFc'@;
put 'dTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY3XVttXV09NDI3NTIrbSxGWzQyNzUyK21dPXhbMTY3XVttXSk7Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUy'@;
put 'NTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZm'@;
put 'XHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThiXHUyNThjXHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUy'@;
put 'NWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVj'@;
put 'XHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4XHVmZmZkXHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUz'@;
put 'MTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1'@;
put 'XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPXhbMTY4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCttXT14WzE2OF1bbV0pO2Zvcih4WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNFx1ZmZmZFx1MjEyMVx1'@;
put 'MzIzMVx1ZmZmZFx1MjAxMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OVx1ZmU0YVx1ZmU0Ylx1ZmU0Y1x1ZmU0ZFx1ZmU0ZVx1ZmU0Zlx1ZmU1MFx1ZmU1MVx1ZmU1Mlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1'@;
put 'N1x1ZmU1OVx1ZmU1YVx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmZmZFx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUw'@;
put 'OFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1'@;
put 'MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUz'@;
put 'Zlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjldW21dXT00MzI2NCttLEZbNDMyNjQrbV09eFsxNjldW21dKTtmb3IoeFsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTJcdTcyZTNcdTcyZTRcdTcyZTVcdTcyZTZcdTcyZTdcdTcyZWFcdTcyZWJcdTcyZjVcdTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDRcdTczMDVcdTczMDZcdTczMDdcdTczMDhc'@;
put 'dTczMDlcdTczMGJcdTczMGNcdTczMGRcdTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTczMjZcdTczMjdcdTczMjhcdTczMmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTcz'@;
put 'M2JcdTczM2NcdTczM2RcdTczNDBcdTczNDFcdTczNDJcdTczNDNcdTczNDRcdTczNDVcdTczNDZcdTczNDdcdTczNDhcdWZmZmRcdTczNDlcdTczNGFcdTczNGJcdTczNGNcdTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNThcdTczNTlcdTczNWFcdTczNWJc'@;
put 'dTczNWNcdTczNWRcdTczNWVcdTczNWZcdTczNjFcdTczNjJcdTczNjNcdTczNjRcdTczNjVcdTczNjZcdTczNjdcdTczNjhcdTczNjlcdTczNmFcdTczNmJcdTczNmVcdTczNzBcdTczNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcwXVttXV09NDM1MjArbSxGWzQzNTIwK21dPXhbMTcwXVttXSk7Zm9yKHhbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3MzdjXHU3MzdkXHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3Mzhj'@;
put 'XHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzXHU3M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3'@;
put 'M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2Rj'@;
put 'XHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3M2Y0XHU3M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MV1bbV1dPTQzNzc2K20sRls0Mzc3NittXT14WzE3MV1bbV0pO2Zvcih4WzE3Ml09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzNmOFx1NzNmOVx1NzNmYVx1NzNmYlx1NzNmY1x1NzNmZFx1NzNmZVx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwMlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMVx1NzQx'@;
put 'Mlx1NzQxM1x1NzQxNFx1NzQxNVx1NzQxNlx1NzQxN1x1NzQxOFx1NzQxOVx1NzQxY1x1NzQxZFx1NzQxZVx1NzQxZlx1NzQyMFx1NzQyMVx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzN1x1NzQzOFx1NzQzOVx1NzQzYVx1NzQzYlx1'@;
put 'NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0Mlx1NzQ0M1x1NzQ0NFx1NzQ0NVx1NzQ0Nlx1NzQ0N1x1NzQ0OFx1NzQ0OVx1NzQ0YVx1NzQ0Ylx1NzQ0Y1x1NzQ0ZFx1ZmZmZFx1NzQ0ZVx1NzQ0Zlx1NzQ1MFx1NzQ1MVx1NzQ1Mlx1NzQ1M1x1NzQ1NFx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2'@;
put 'MFx1NzQ2MVx1NzQ2Mlx1NzQ2M1x1NzQ2NFx1NzQ2NVx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2OVx1NzQ2YVx1NzQ2Ylx1NzQ2Y1x1NzQ2ZVx1NzQ2Zlx1NzQ3MVx1NzQ3Mlx1NzQ3M1x1NzQ3NFx1NzQ3NVx1NzQ3OFx1NzQ3OVx1NzQ3YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzJdW21dXT00NDAzMittLEZbNDQwMzIrbV09eFsxNzJdW21dKTtmb3IoeFsx'@;
put 'NzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTFcdTc0OTJcdTc0OTNcdTc0'@;
put 'OTRcdTc0OTVcdTc0OTZcdTc0OTdcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWJcdTc0OWRcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTJcdTc0YTNcdTc0YTRcdTc0YTVcdTc0YTZcdTc0YWFcdTc0YWJcdTc0YWNcdTc0YWRcdTc0YWVcdTc0YWZcdTc0YjBcdTc0YjFcdTc0YjJcdTc0YjNcdTc0YjRc'@;
put 'dTc0YjVcdTc0YjZcdTc0YjdcdTc0YjhcdTc0YjlcdTc0YmJcdTc0YmNcdTc0YmRcdTc0YmVcdTc0YmZcdTc0YzBcdTc0YzFcdTc0YzJcdTc0YzNcdTc0YzRcdTc0YzVcdTc0YzZcdTc0YzdcdWZmZmRcdTc0YzhcdTc0YzlcdTc0Y2FcdTc0Y2JcdTc0Y2NcdTc0Y2RcdTc0Y2VcdTc0Y2ZcdTc0'@;
put 'ZDBcdTc0ZDFcdTc0ZDNcdTc0ZDRcdTc0ZDVcdTc0ZDZcdTc0ZDdcdTc0ZDhcdTc0ZDlcdTc0ZGFcdTc0ZGJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTdcdTc0ZThcdTc0ZTlcdTc0ZWFcdTc0ZWJcdTc0ZWNcdTc0ZWRcdTc0ZjBcdTc0ZjFcdTc0ZjJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTczXVttXV09NDQyODgrbSxGWzQ0Mjg4K21dPXhbMTcz'@;
put 'XVttXSk7Zm9yKHhbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZhXHU3NGZiXHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3'@;
put 'NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3NTIxXHU3NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5'@;
put 'XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3'@;
put 'NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3NTdiXHU3NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NF1bbV1dPTQ0NTQ0K20sRls0'@;
put 'NDU0NCttXT14WzE3NF1bbV0pO2Zvcih4WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1'@;
put 'NzVhMlx1NzVhNlx1NzVhN1x1NzVhOFx1NzVhOVx1NzVhYVx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVk'@;
put 'Zlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwN1x1ZmZmZFx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1'@;
put 'NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0'@;
put 'Mlx1NzY0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzVdW21d'@;
put 'XT00NDgwMCttLEZbNDQ4MDArbV09eFsxNzVdW21dKTtmb3IoeFsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NDVcdTc2NDZcdTc2NDdcdTc2NDhcdTc2NDlcdTc2NGFcdTc2NGJcdTc2NGVcdTc2NGZcdTc2NTBcdTc2NTFc'@;
put 'dTc2NTJcdTc2NTNcdTc2NTVcdTc2NTdcdTc2NThcdTc2NTlcdTc2NWFcdTc2NWJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjRcdTc2NjVcdTc2NjZcdTc2NjdcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzBcdTc2NzFcdTc2NzJcdTc2NzNcdTc2'@;
put 'NzRcdTc2NzVcdTc2NzZcdTc2NzdcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRcdTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2OWFcdTc2OWJcdWZmZmRcdTc2OWNcdTc2OWRc'@;
put 'dTc2OWVcdTc2OWZcdTc2YTBcdTc2YTFcdTc2YTJcdTc2YTNcdTc2YTVcdTc2YTZcdTc2YTdcdTc2YThcdTc2YTlcdTc2YWFcdTc2YWJcdTc2YWNcdTc2YWRcdTc2YWZcdTc2YjBcdTc2YjNcdTc2YjVcdTc2YjZcdTc2YjdcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YmJcdTc2YmNcdTc2YmRcdTc2'@;
put 'YmVcdTc2YzBcdTc2YzFcdTc2YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhc'@;
put 'dTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3'@;
put 'MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVc'@;
put 'dTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGFlW3hbMTc2XVttXV09NDUwNTYrbSxGWzQ1MDU2K21dPXhbMTc2XVttXSk7Zm9yKHhbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRh'@;
put 'XHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3'@;
put 'NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZk'@;
put 'XHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3NzQ5XHU3NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3'@;
put 'NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBk'@;
put 'XHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1'@;
put 'ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4'@;
put 'XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzddW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihhZVt4WzE3N11bbV1dPTQ1MzEyK20sRls0NTMxMittXT14WzE3N11bbV0pO2Zvcih4WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2'@;
put 'OVx1Nzc2YVx1Nzc2ZFx1Nzc2ZVx1Nzc2Zlx1Nzc3MFx1Nzc3MVx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3NVx1Nzc3Nlx1Nzc3N1x1Nzc3OFx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4Nlx1Nzc4N1x1Nzc4OFx1Nzc4OVx1Nzc4YVx1Nzc4Ylx1Nzc4Zlx1Nzc5MFx1'@;
put 'Nzc5M1x1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5N1x1Nzc5OFx1Nzc5OVx1Nzc5YVx1Nzc5Ylx1Nzc5Y1x1Nzc5ZFx1Nzc5ZVx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNlx1NzdiN1x1NzdiOFx1Nzdi'@;
put 'OVx1NzdiYVx1ZmZmZFx1NzdiY1x1NzdiZVx1NzdjMFx1NzdjMVx1NzdjMlx1NzdjM1x1NzdjNFx1NzdjNVx1NzdjNlx1NzdjN1x1NzdjOFx1NzdjOVx1NzdjYVx1NzdjYlx1NzdjY1x1NzdjZVx1NzdjZlx1NzdkMFx1NzdkMVx1NzdkMlx1NzdkM1x1NzdkNFx1NzdkNVx1NzdkNlx1NzdkOFx1'@;
put 'NzdkOVx1NzdkYVx1NzdkZFx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlMVx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNj'@;
put 'YVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1'@;
put 'NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQz'@;
put 'ZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PXhbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzhdW21dXT00NTU2OCttLEZbNDU1NjgrbV09eFsxNzhdW21dKTtmb3IoeFsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3'@;
put 'ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDNcdTc4MDRcdTc4MDVcdTc4MDZcdTc4MDdcdTc4MDhcdTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFc'@;
put 'dTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4'@;
put 'NTRcdTc4NThcdTc4NTlcdTc4NWFcdWZmZmRcdTc4NWJcdTc4NWNcdTc4NWVcdTc4NWZcdTc4NjBcdTc4NjFcdTc4NjJcdTc4NjNcdTc4NjRcdTc4NjVcdTc4NjZcdTc4NjdcdTc4NjhcdTc4NjlcdTc4NmZcdTc4NzBcdTc4NzFcdTc4NzJcdTc4NzNcdTc4NzRcdTc4NzVcdTc4NzZcdTc4Nzhc'@;
put 'dTc4NzlcdTc4N2FcdTc4N2JcdTc4N2RcdTc4N2VcdTc4N2ZcdTc4ODBcdTc4ODFcdTc4ODJcdTc4ODNcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVk'@;
put 'ZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlc'@;
put 'dTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYy'@;
put 'YmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzldLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT14WzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc5XVttXV09NDU4MjQrbSxGWzQ1ODI0K21dPXhbMTc5XVttXSk7Zm9yKHhbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3'@;
put 'ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3OGE5XHU3OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3'@;
put 'XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3'@;
put 'OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3OGYxXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZl'@;
put 'XHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3'@;
put 'YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0'@;
put 'XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1'@;
put 'YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PXhbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MF1bbV1dPTQ2MDgwK20sRls0NjA4MCttXT14WzE4MF1bbV0pO2Zvcih4WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NzkwZFx1NzkwZVx1NzkwZlx1NzkxMFx1NzkxMVx1NzkxMlx1NzkxNFx1NzkxNVx1NzkxNlx1NzkxN1x1NzkxOFx1NzkxOVx1NzkxYVx1NzkxYlx1NzkxY1x1NzkxZFx1NzkxZlx1NzkyMFx1NzkyMVx1NzkyMlx1NzkyM1x1NzkyNVx1NzkyNlx1NzkyN1x1NzkyOFx1NzkyOVx1NzkyYVx1Nzky'@;
put 'Ylx1NzkyY1x1NzkyZFx1NzkyZVx1NzkyZlx1NzkzMFx1NzkzMVx1NzkzMlx1NzkzM1x1NzkzNVx1NzkzNlx1NzkzN1x1NzkzOFx1NzkzOVx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YVx1Nzk0Ylx1Nzk0Y1x1Nzk0ZFx1Nzk0ZVx1Nzk0Zlx1Nzk1MFx1'@;
put 'Nzk1MVx1Nzk1Mlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2M1x1ZmZmZFx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MFx1Nzk3MVx1Nzk3Mlx1Nzk3M1x1Nzk3NFx1Nzk3NVx1Nzk3Nlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZFx1Nzk3'@;
put 'ZVx1Nzk3Zlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1'@;
put 'OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1Nzdh'@;
put 'YVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1'@;
put 'OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT14WzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODFdW21dXT00NjMzNittLEZbNDYzMzYrbV09eFsxODFdW21dKTtmb3IoeFsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTc5OTNcdTc5OTRcdTc5OTVcdTc5OTZcdTc5OTdcdTc5OThcdTc5OTlcdTc5OWJcdTc5OWNcdTc5OWRcdTc5OWVcdTc5OWZcdTc5YTBcdTc5YTFcdTc5YTJcdTc5YTNcdTc5YTRcdTc5YTVcdTc5YTZcdTc5YThcdTc5YTlcdTc5YWFcdTc5YWJcdTc5YWNcdTc5YWRcdTc5'@;
put 'YWVcdTc5YWZcdTc5YjBcdTc5YjFcdTc5YjJcdTc5YjRcdTc5YjVcdTc5YjZcdTc5YjdcdTc5YjhcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2NcdTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDlcdTc5ZGFc'@;
put 'dTc5ZGJcdTc5ZGNcdTc5ZGRcdTc5ZGVcdTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWFcdWZmZmRcdTc5ZWNcdTc5ZWVcdTc5ZjFcdTc5ZjJcdTc5ZjNcdTc5ZjRcdTc5ZjVcdTc5ZjZcdTc5ZjdcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdh'@;
put 'MDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMGZcdTdhMTBcdTdhMTFcdTdhMTJcdTdhMTNcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJcdTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNc'@;
put 'dTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgw'@;
put 'OWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJc'@;
put 'dThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRl'@;
put 'OGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgyXVttXV09NDY1OTIrbSxGWzQ2NTkyK21dPXhbMTgyXVttXSk7Zm9yKHhbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3YTJlXHU3YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3'@;
put 'YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUyXHU3YTUzXHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVj'@;
put 'XHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3YTZlXHU3YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3'@;
put 'YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2Qw'@;
put 'XHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2'@;
put 'NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2Fh'@;
put 'XHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0'@;
put 'ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4M11bbV1dPTQ2ODQ4K20sRls0Njg0OCttXT14WzE4M11bbV0pO2Zvcih4WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZVx1N2FhZlx1N2FiMFx1N2FiMVx1N2FiMlx1N2FiNFx1N2FiNVx1N2FiNlx1N2FiN1x1N2FiOFx1N2FiOVx1N2FiYVx1N2FiYlx1N2FiY1x1N2FiZFx1'@;
put 'N2FiZVx1N2FjMFx1N2FjMVx1N2FjMlx1N2FjM1x1N2FjNFx1N2FjNVx1N2FjNlx1N2FjN1x1N2FjOFx1N2FjOVx1N2FjYVx1N2FjY1x1N2FjZFx1N2FjZVx1N2FjZlx1N2FkMFx1N2FkMVx1N2FkMlx1N2FkM1x1N2FkNFx1N2FkNVx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2Fk'@;
put 'ZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlN1x1N2FlOFx1N2FlOVx1N2FlYVx1N2FlYlx1N2FlY1x1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmM1x1ZmZmZFx1N2FmNFx1N2FmNVx1N2FmNlx1N2FmN1x1N2FmOFx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1'@;
put 'N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5'@;
put 'YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1'@;
put 'OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4'@;
put 'Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1'@;
put 'OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODRdW21dXT00NzEwNCttLEZbNDcxMDQrbV09eFsxODRdW21dKTtmb3IoeFsxODVdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdiM2ZcdTdiNDBcdTdiNDFcdTdiNDJcdTdiNDNcdTdiNDRcdTdiNDZcdTdiNDhcdTdiNGFc'@;
put 'dTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdiNTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjNcdTdiNjRcdTdiNjVcdTdiNjZcdTdiNjdcdTdiNjhcdTdiNjlcdTdiNmFcdTdiNmJcdTdiNmNcdTdiNmRcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdi'@;
put 'N2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdiODFcdTdiODJcdTdiODNcdTdiODRcdTdiODZcdTdiODdcdTdiODhcdTdiODlcdTdiOGFcdTdiOGJcdTdiOGNcdTdiOGVcdTdiOGZcdWZmZmRcdTdiOTFcdTdiOTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZc'@;
put 'dTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjlcdTdiYmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYmVcdTdiYmZcdTdiYzBcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1'@;
put 'M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBc'@;
put 'dTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdi'@;
put 'YTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2Rc'@;
put 'dTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg1XVttXV09NDczNjArbSxGWzQ3MzYwK21dPXhbMTg1XVttXSk7Zm9y'@;
put 'KHhbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRj'@;
put 'XHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3'@;
put 'YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZkXHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIy'@;
put 'XHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2'@;
put 'ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1'@;
put 'XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5'@;
put 'ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRl'@;
put 'XHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Nl1bbV1dPTQ3NjE2K20sRls0NzYxNittXT14'@;
put 'WzE4Nl1bbV0pO2Zvcih4WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2M0M1x1N2M0NFx1N2M0NVx1N2M0Nlx1N2M0N1x1N2M0OFx1N2M0OVx1N2M0YVx1N2M0Ylx1N2M0Y1x1N2M0ZVx1N2M0Zlx1N2M1MFx1N2M1MVx1N2M1'@;
put 'Mlx1N2M1M1x1N2M1NFx1N2M1NVx1N2M1Nlx1N2M1N1x1N2M1OFx1N2M1OVx1N2M1YVx1N2M1Ylx1N2M1Y1x1N2M1ZFx1N2M1ZVx1N2M1Zlx1N2M2MFx1N2M2MVx1N2M2Mlx1N2M2M1x1N2M2NFx1N2M2NVx1N2M2Nlx1N2M2N1x1N2M2OFx1N2M2OVx1N2M2YVx1N2M2Ylx1N2M2Y1x1N2M2ZFx1'@;
put 'N2M2ZVx1N2M2Zlx1N2M3MFx1N2M3MVx1N2M3Mlx1N2M3NVx1N2M3Nlx1N2M3N1x1N2M3OFx1N2M3OVx1N2M3YVx1N2M3ZVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2M4Mlx1N2M4M1x1N2M4NFx1N2M4NVx1N2M4Nlx1N2M4N1x1ZmZmZFx1N2M4OFx1N2M4YVx1N2M4Ylx1N2M4Y1x1N2M4ZFx1N2M4'@;
put 'ZVx1N2M4Zlx1N2M5MFx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNFx1N2NiNVx1N2NiNlx1N2NiN1x1N2NiOFx1N2NiYVx1N2NiYlx1'@;
put 'NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBh'@;
put 'M1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1'@;
put 'NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBk'@;
put 'MVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODddW21dXT00Nzg3Mitt'@;
put 'LEZbNDc4NzIrbV09eFsxODddW21dKTtmb3IoeFsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdjYzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2VcdTdjY2ZcdTdjZDBcdTdjZDFcdTdj'@;
put 'ZDJcdTdjZDNcdTdjZDRcdTdjZDhcdTdjZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTFcdTdjZTJcdTdjZTNcdTdjZTRcdTdjZTVcdTdjZTZcdTdjZTdcdTdjZTlcdTdjZWFcdTdjZWJcdTdjZWNcdTdjZWRcdTdjZWVcdTdjZjBcdTdjZjFcdTdjZjJcdTdjZjNcdTdjZjRcdTdjZjVcdTdjZjZc'@;
put 'dTdjZjdcdTdjZjlcdTdjZmFcdTdjZmNcdTdjZmRcdTdjZmVcdTdjZmZcdTdkMDBcdTdkMDFcdTdkMDJcdTdkMDNcdTdkMDRcdTdkMDVcdTdkMDZcdTdkMDdcdTdkMDhcdTdkMDlcdTdkMGJcdTdkMGNcdTdkMGRcdTdkMGVcdTdkMGZcdTdkMTBcdWZmZmRcdTdkMTFcdTdkMTJcdTdkMTNcdTdk'@;
put 'MTRcdTdkMTVcdTdkMTZcdTdkMTdcdTdkMThcdTdkMTlcdTdkMWFcdTdkMWJcdTdkMWNcdTdkMWRcdTdkMWVcdTdkMWZcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVcdTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFcdTdkMmNcdTdkMmRcdTdkMmVcdTdkMzBcdTdkMzFcdTdkMzJcdTdkMzNcdTdkMzRc'@;
put 'dTdkMzVcdTdkMzZcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVk'@;
put 'ZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFc'@;
put 'dThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYz'@;
put 'NjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg4'@;
put 'XVttXV09NDgxMjgrbSxGWzQ4MTI4K21dPXhbMTg4XVttXSk7Zm9yKHhbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3ZDM5XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3'@;
put 'ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0XHU3ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVj'@;
put 'XHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3ZDcxXHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3'@;
put 'ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0'@;
put 'XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3'@;
put 'OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1'@;
put 'XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2'@;
put 'NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODldW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihhZVt4WzE4OV1bbV1dPTQ4Mzg0K20sRls0ODM4NCttXT14WzE4OV1bbV0pO2Zvcih4WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Q5OVx1N2Q5YVx1N2Q5Ylx1N2Q5Y1x1N2Q5ZFx1N2Q5ZVx1N2Q5Zlx1N2RhMFx1'@;
put 'N2RhMVx1N2RhMlx1N2RhM1x1N2RhNFx1N2RhNVx1N2RhN1x1N2RhOFx1N2RhOVx1N2RhYVx1N2RhYlx1N2RhY1x1N2RhZFx1N2RhZlx1N2RiMFx1N2RiMVx1N2RiMlx1N2RiM1x1N2RiNFx1N2RiNVx1N2RiNlx1N2RiN1x1N2RiOFx1N2RiOVx1N2RiYVx1N2RiYlx1N2RiY1x1N2RiZFx1N2Ri'@;
put 'ZVx1N2RiZlx1N2RjMFx1N2RjMVx1N2RjMlx1N2RjM1x1N2RjNFx1N2RjNVx1N2RjNlx1N2RjN1x1N2RjOFx1N2RjOVx1N2RjYVx1N2RjYlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RjZlx1N2RkMFx1N2RkMVx1N2RkMlx1N2RkM1x1N2RkNFx1N2RkNVx1N2RkNlx1N2RkN1x1N2RkOFx1N2RkOVx1'@;
put 'ZmZmZFx1N2RkYVx1N2RkYlx1N2RkY1x1N2RkZFx1N2RkZVx1N2RkZlx1N2RlMFx1N2RlMVx1N2RlMlx1N2RlM1x1N2RlNFx1N2RlNVx1N2RlNlx1N2RlN1x1N2RlOFx1N2RlOVx1N2RlYVx1N2RlYlx1N2RlY1x1N2RlZFx1N2RlZVx1N2RlZlx1N2RmMFx1N2RmMVx1N2RmMlx1N2RmM1x1N2Rm'@;
put 'NFx1N2RmNVx1N2RmNlx1N2RmN1x1N2RmOFx1N2RmOVx1N2RmYVx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1'@;
put 'NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJk'@;
put 'OVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1'@;
put 'NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkwXVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTBdW21dXT00ODY0MCttLEZbNDg2NDArbV09eFsxOTBdW21dKTtmb3IoeFsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkZmJcdTdkZmNcdTdkZmRcdTdkZmVcdTdkZmZcdTdlMDBc'@;
put 'dTdlMDFcdTdlMDJcdTdlMDNcdTdlMDRcdTdlMDVcdTdlMDZcdTdlMDdcdTdlMDhcdTdlMDlcdTdlMGFcdTdlMGJcdTdlMGNcdTdlMGRcdTdlMGVcdTdlMGZcdTdlMTBcdTdlMTFcdTdlMTJcdTdlMTNcdTdlMTRcdTdlMTVcdTdlMTZcdTdlMTdcdTdlMThcdTdlMTlcdTdlMWFcdTdlMWJcdTdl'@;
put 'MWNcdTdlMWRcdTdlMWVcdTdlMWZcdTdlMjBcdTdlMjFcdTdlMjJcdTdlMjNcdTdlMjRcdTdlMjVcdTdlMjZcdTdlMjdcdTdlMjhcdTdlMjlcdTdlMmFcdTdlMmJcdTdlMmNcdTdlMmRcdTdlMmVcdTdlMmZcdTdlMzBcdTdlMzFcdTdlMzJcdTdlMzNcdTdlMzRcdTdlMzVcdTdlMzZcdTdlMzdc'@;
put 'dTdlMzhcdTdlMzlcdWZmZmRcdTdlM2FcdTdlM2NcdTdlM2RcdTdlM2VcdTdlM2ZcdTdlNDBcdTdlNDJcdTdlNDNcdTdlNDRcdTdlNDVcdTdlNDZcdTdlNDhcdTdlNDlcdTdlNGFcdTdlNGJcdTdlNGNcdTdlNGRcdTdlNGVcdTdlNGZcdTdlNTBcdTdlNTFcdTdlNTJcdTdlNTNcdTdlNTRcdTdl'@;
put 'NTVcdTdlNTZcdTdlNTdcdTdlNThcdTdlNTlcdTdlNWFcdTdlNWJcdTdlNWNcdTdlNWRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRc'@;
put 'dTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgw'@;
put 'YWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdc'@;
put 'dTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTFdLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT14WzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkxXVttXV09NDg4OTYrbSxGWzQ4ODk2K21dPXhbMTkxXVttXSk7Zm9yKHhbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYx'@;
put 'XHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1XHU3ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3'@;
put 'ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3ZTkyXHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5'@;
put 'XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNjXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3'@;
put 'ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEz'@;
put 'XHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1'@;
put 'MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNl'@;
put 'XHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkyXS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09eFsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Ml1bbV1dPTQ5MTUyK20sRls0OTE1MittXT14WzE5Ml1bbV0pO2Zvcih4WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y1Nlx1N2Y1'@;
put 'OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2MFx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2N1x1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4Mlx1'@;
put 'N2Y4M1x1N2Y4NFx1N2Y4NVx1N2Y4Nlx1N2Y4N1x1N2Y4OFx1N2Y4OVx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Mlx1N2Y5M1x1N2Y5NVx1N2Y5Nlx1N2Y5N1x1N2Y5OFx1N2Y5OVx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOFx1N2Zh'@;
put 'OVx1N2ZhYVx1N2ZhYlx1N2ZhY1x1N2ZhZFx1N2ZhZVx1N2ZiMVx1ZmZmZFx1N2ZiM1x1N2ZiNFx1N2ZiNVx1N2ZiNlx1N2ZiN1x1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZlx1N2ZkMFx1'@;
put 'N2ZkMVx1N2ZkMlx1N2ZkM1x1N2ZkNlx1N2ZkN1x1N2ZkOVx1N2ZkYVx1N2ZkYlx1N2ZkY1x1N2ZkZFx1N2ZkZVx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAx'@;
put 'Y1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1'@;
put 'NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYz'@;
put 'Nlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT14WzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTNdW21dXT00OTQwOCttLEZbNDk0MDgrbV09eFsxOTNdW21dKTtmb3IoeFsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdmZWNcdTdmZWRcdTdmZWZcdTdmZjJcdTdmZjRcdTdmZjVcdTdmZjZcdTdmZjdcdTdmZjhcdTdmZjlcdTdmZmFcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFc'@;
put 'dTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRcdTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmJcdTgwMmNcdTgwMmRcdTgwMmVcdTgwMmZcdTgwMzBcdTgwMzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgw'@;
put 'NDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgwNTVcdTgwNTZcdTgwNTdcdWZmZmRcdTgwNTlcdTgwNWJcdTgwNWNcdTgwNWRcdTgwNWVcdTgwNWZcdTgwNjBcdTgwNjFcdTgwNjJcdTgwNjNcdTgwNjRcdTgwNjVcdTgwNjZcdTgwNjdcdTgwNjhcdTgwNmJcdTgwNmNcdTgwNmRc'@;
put 'dTgwNmVcdTgwNmZcdTgwNzBcdTgwNzJcdTgwNzNcdTgwNzRcdTgwNzVcdTgwNzZcdTgwNzdcdTgwNzhcdTgwNzlcdTgwN2FcdTgwN2JcdTgwN2NcdTgwN2RcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4'@;
put 'ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZc'@;
put 'dTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0'@;
put 'M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9eFsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk0XVttXV09NDk2NjQrbSxGWzQ5NjY0K21dPXhbMTk0XVttXSk7Zm9yKHhbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1'@;
put 'XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4'@;
put 'MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIwXHU4MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3'@;
put 'XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2'@;
put 'YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3'@;
put 'XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1'@;
put 'MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJj'@;
put 'XHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NV1bbV1dPTQ5OTIwK20sRls0OTkyMCttXT14WzE5NV1bbV0pO2Zvcih4WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0MFx1ODE0MVx1ODE0Mlx1ODE0M1x1ODE0NFx1ODE0NVx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1Ylx1ODE1Y1x1ODE1ZFx1ODE1ZVx1ODE1Zlx1ODE2MVx1ODE2Mlx1ODE2'@;
put 'M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4M1x1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4N1x1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5Mlx1ODE5M1x1'@;
put 'ODE5NFx1ODE5NVx1ODE5Nlx1ODE5N1x1ODE5OVx1ODE5YVx1ODE5ZVx1ODE5Zlx1ODFhMFx1ODFhMVx1ODFhMlx1ODFhNFx1ODFhNVx1ZmZmZFx1ODFhN1x1ODFhOVx1ODFhYlx1ODFhY1x1ODFhZFx1ODFhZVx1ODFhZlx1ODFiMFx1ODFiMVx1ODFiMlx1ODFiNFx1ODFiNVx1ODFiNlx1ODFi'@;
put 'N1x1ODFiOFx1ODFiOVx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZFx1ODFjZVx1ODFjZlx1ODFkMFx1ODFkMVx1ODFkMlx1ODFkM1x1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1'@;
put 'NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRl'@;
put 'YVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1'@;
put 'NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1Njdl'@;
put 'MFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTZdW21dXT01MDE3NittLEZbNTAxNzYrbV09eFsxOTZdW21dKTtmb3IoeFsxOTddPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDRcdTgxZDVcdTgxZDZcdTgxZDdcdTgxZDhcdTgxZDlcdTgxZGFcdTgxZGJcdTgxZGNcdTgxZGRcdTgxZGVcdTgxZGZcdTgxZTBcdTgxZTFcdTgxZTJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgx'@;
put 'ZWJcdTgxZWVcdTgxZWZcdTgxZjBcdTgxZjFcdTgxZjJcdTgxZjVcdTgxZjZcdTgxZjdcdTgxZjhcdTgxZjlcdTgxZmFcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDdcdTgyMDhcdTgyMDlcdTgyMGFcdTgyMGJcdTgyMGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTVcdTgyMTZcdTgyMTdcdTgyMThc'@;
put 'dTgyMTlcdTgyMWFcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2RcdTgyM2ZcdWZmZmRcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgy'@;
put 'NTBcdTgyNTFcdTgyNTJcdTgyNTNcdTgyNTRcdTgyNTVcdTgyNTZcdTgyNTdcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjBcdTgyNjFcdTgyNjJcdTgyNjNcdTgyNjRcdTgyNjVcdTgyNjZcdTgyNjdcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRc'@;
put 'dTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYw'@;
put 'MTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFc'@;
put 'dTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3'@;
put 'MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk3XVttXV09NTA0MzIrbSxGWzUwNDMyK21dPXhbMTk3XVttXSk7Zm9yKHhbMTk4XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4'@;
put 'MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2'@;
put 'XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZkXHU4MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4'@;
put 'MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFl'@;
put 'XHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4'@;
put 'YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNh'@;
put 'XHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1'@;
put 'NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OF1bbV1dPTUwNjg4K20sRls1MDY4OCttXT14WzE5OF1bbV0p'@;
put 'O2Zvcih4WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YVx1ODM0Ylx1ODM0Y1x1ODM0ZFx1ODM0ZVx1ODM1M1x1ODM1NVx1ODM1Nlx1ODM1N1x1'@;
put 'ODM1OFx1ODM1OVx1ODM1ZFx1ODM2Mlx1ODM3MFx1ODM3MVx1ODM3Mlx1ODM3M1x1ODM3NFx1ODM3NVx1ODM3Nlx1ODM3OVx1ODM3YVx1ODM3ZVx1ODM3Zlx1ODM4MFx1ODM4MVx1ODM4Mlx1ODM4M1x1ODM4NFx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5'@;
put 'MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMVx1ODNhMlx1ODNhM1x1ODNhNFx1ODNhNVx1ODNhNlx1ODNhN1x1ODNhY1x1ODNhZFx1ODNhZVx1ZmZmZFx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1'@;
put 'ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQz'@;
put 'ZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1'@;
put 'ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQz'@;
put 'NFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1'@;
put 'OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTldW21dXT01MDk0NCttLEZbNTA5NDQr'@;
put 'bV09eFsxOTldW21dKTtmb3IoeFsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZWVcdTgzZWZcdTgzZjNcdTgzZjRcdTgzZjVcdTgzZjZcdTgzZjdcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJc'@;
put 'dTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTJcdTg0MTNcdTg0MTRcdTg0MTVcdTg0MTZcdTg0MTdcdTg0MTlcdTg0MWFcdTg0MWJcdTg0MWVcdTg0MWZcdTg0MjBcdTg0MjFcdTg0MjJcdTg0MjNcdTg0MjlcdTg0MmFcdTg0MmJcdTg0MmNcdTg0MmRcdTg0MmVcdTg0'@;
put 'MmZcdTg0MzBcdTg0MzJcdTg0MzNcdTg0MzRcdTg0MzVcdTg0MzZcdTg0MzdcdTg0MzlcdTg0M2FcdTg0M2JcdTg0M2VcdTg0M2ZcdTg0NDBcdTg0NDFcdTg0NDJcdTg0NDNcdTg0NDRcdTg0NDVcdTg0NDdcdTg0NDhcdTg0NDlcdWZmZmRcdTg0NGFcdTg0NGJcdTg0NGNcdTg0NGRcdTg0NGVc'@;
put 'dTg0NGZcdTg0NTBcdTg0NTJcdTg0NTNcdTg0NTRcdTg0NTVcdTg0NTZcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjRcdTg0NjVcdTg0NjZcdTg0NjdcdTg0NjhcdTg0NmFcdTg0NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0'@;
put 'N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZc'@;
put 'dTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgz'@;
put 'MzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBc'@;
put 'dTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAwXVttXV09NTEy'@;
put 'MDArbSxGWzUxMjAwK21dPXhbMjAwXVttXSk7Zm9yKHhbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhm'@;
put 'XHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4'@;
put 'NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRh'@;
put 'XHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4NGY4XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4'@;
put 'NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUy'@;
put 'XHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3'@;
put 'MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1'@;
put 'XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4'@;
put 'WzIwMV1bbV1dPTUxNDU2K20sRls1MTQ1NittXT14WzIwMV1bbV0pO2Zvcih4WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUwM1x1ODUwNFx1ODUwNVx1ODUwNlx1ODUwN1x1ODUwOFx1ODUwOVx1ODUwYVx1ODUwYlx1ODUw'@;
put 'ZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyNlx1ODUyN1x1ODUyOFx1ODUyOVx1ODUyYVx1ODUyZFx1ODUyZVx1ODUyZlx1ODUzMFx1'@;
put 'ODUzMVx1ODUzMlx1ODUzM1x1ODUzNFx1ODUzNVx1ODUzNlx1ODUzZVx1ODUzZlx1ODU0MFx1ODU0MVx1ODU0Mlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0Ylx1ODU0Y1x1ODU0ZFx1ODU0ZVx1ODU0Zlx1ODU1MFx1ODU1MVx1ODU1Mlx1ODU1M1x1ODU1NFx1ODU1NVx1ZmZmZFx1ODU1'@;
put 'N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1Zlx1ODU2MFx1ODU2MVx1ODU2Mlx1ODU2M1x1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OVx1ODU2YVx1ODU2Ylx1ODU2Y1x1ODU2ZFx1ODU2ZVx1ODU2Zlx1ODU3MFx1ODU3MVx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1'@;
put 'ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNm'@;
put 'Mlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1'@;
put 'ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5'@;
put 'MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAyXVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoYWVbeFsyMDJdW21dXT01MTcxMittLEZbNTE3MTIrbV09eFsyMDJdW21dKTtmb3IoeFsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODJcdTg1ODNcdTg1ODZcdTg1ODhcdTg1ODlcdTg1OGFcdTg1OGJcdTg1'@;
put 'OGNcdTg1OGRcdTg1OGVcdTg1OTBcdTg1OTFcdTg1OTJcdTg1OTNcdTg1OTRcdTg1OTVcdTg1OTZcdTg1OTdcdTg1OThcdTg1OTlcdTg1OWFcdTg1OWRcdTg1OWVcdTg1OWZcdTg1YTBcdTg1YTFcdTg1YTJcdTg1YTNcdTg1YTVcdTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRc'@;
put 'dTg1YjFcdTg1YjJcdTg1YjNcdTg1YjRcdTg1YjVcdTg1YjZcdTg1YjhcdTg1YmFcdTg1YmJcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzBcdTg1YzJcdTg1YzNcdTg1YzRcdTg1YzVcdTg1YzZcdTg1YzdcdTg1YzhcdTg1Y2FcdTg1Y2JcdTg1Y2NcdTg1Y2RcdTg1Y2VcdTg1ZDFcdTg1'@;
put 'ZDJcdWZmZmRcdTg1ZDRcdTg1ZDZcdTg1ZDdcdTg1ZDhcdTg1ZDlcdTg1ZGFcdTg1ZGJcdTg1ZGRcdTg1ZGVcdTg1ZGZcdTg1ZTBcdTg1ZTFcdTg1ZTJcdTg1ZTNcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1ZWFcdTg1ZWJcdTg1ZWNcdTg1ZWRcdTg1ZWVcdTg1ZWZcdTg1ZjBcdTg1ZjFc'@;
put 'dTg1ZjJcdTg1ZjNcdTg1ZjRcdTg1ZjVcdTg1ZjZcdTg1ZjdcdTg1ZjhcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThi'@;
put 'ZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVc'@;
put 'dTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkw'@;
put 'NDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIw'@;
put 'M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAzXVttXV09NTE5NjgrbSxGWzUxOTY4K21dPXhbMjAzXVttXSk7Zm9yKHhbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4'@;
put 'NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4NjE5XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFl'@;
put 'XHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2XHU4NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4'@;
put 'NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYw'@;
put 'XHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1'@;
put 'NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDli'@;
put 'XHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1'@;
put 'MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA0XS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09eFsyMDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNF1bbV1dPTUyMjI0K20sRls1MjIyNCttXT14WzIwNF1bbV0pO2Zvcih4WzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY2ZFx1ODY2Zlx1ODY3MFx1'@;
put 'ODY3Mlx1ODY3M1x1ODY3NFx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3OFx1ODY4M1x1ODY4NFx1ODY4NVx1ODY4Nlx1ODY4N1x1ODY4OFx1ODY4OVx1ODY4ZVx1ODY4Zlx1ODY5MFx1ODY5MVx1ODY5Mlx1ODY5NFx1ODY5Nlx1ODY5N1x1ODY5OFx1ODY5OVx1ODY5YVx1ODY5Ylx1ODY5ZVx1ODY5'@;
put 'Zlx1ODZhMFx1ODZhMVx1ODZhMlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYlx1ODZiY1x1ODZiZFx1ODZiZVx1ODZiZlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1'@;
put 'ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkY1x1ZmZmZFx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcw'@;
put 'MVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1'@;
put 'NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQx'@;
put 'ZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1'@;
put 'NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIw'@;
put 'NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDVdW21dXT01MjQ4MCttLEZbNTI0ODArbV09eFsyMDVdW21dKTtmb3IoeFsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3MTlc'@;
put 'dTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDBcdTg3NDFcdTg3NDJcdTg3NDNcdTg3'@;
put 'NDRcdTg3NDVcdTg3NDZcdTg3NGFcdTg3NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWFcdTg3NWJcdTg3NWNcdTg3NWRcdTg3NWVcdTg3NWZcdTg3NjFcdTg3NjJcdTg3NjZcdTg3NjdcdTg3NjhcdTg3NjlcdTg3NmFcdTg3NmJc'@;
put 'dTg3NmNcdTg3NmRcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzVcdWZmZmRcdTg3NzdcdTg3NzhcdTg3NzlcdTg3N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGVcdTg3OGZcdTg3OTBcdTg3OTFcdTg3OTJcdTg3OTRcdTg3'@;
put 'OTVcdTg3OTZcdTg3OThcdTg3OTlcdTg3OWFcdTg3OWJcdTg3OWNcdTg3OWRcdTg3OWVcdTg3YTBcdTg3YTFcdTg3YTJcdTg3YTNcdTg3YTRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVc'@;
put 'dTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1'@;
put 'ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRc'@;
put 'dTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9eFsyMDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA2XVttXV09NTI3MzYrbSxGWzUyNzM2K21dPXhbMjA2XVttXSk7Zm9yKHhbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4N2M0XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4'@;
put 'N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2Vm'@;
put 'XHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4ODA4XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4'@;
put 'ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3Mjgw'@;
put 'XHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1'@;
put 'MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5'@;
put 'XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwN11bbV1dPTUyOTkyK20sRls1Mjk5MittXT14WzIwN11bbV0pO2Zvcih4WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyNFx1ODgyNVx1ODgyNlx1ODgyN1x1ODgyOFx1ODgyOVx1ODgyYVx1ODgyYlx1ODgyY1x1ODgyZFx1ODgyZVx1ODgyZlx1ODgzMFx1ODgzMVx1ODgzM1x1ODgzNFx1ODgzNVx1ODgzNlx1ODgzN1x1ODgzOFx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1'@;
put 'ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0Nlx1ODg0N1x1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg0Zlx1ODg1MFx1ODg1MVx1ODg1Mlx1ODg1M1x1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Ylx1ODg1Y1x1ODg1ZFx1ODg1ZVx1ODg1Zlx1ODg2MFx1ODg2Nlx1ODg2'@;
put 'N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YVx1ZmZmZFx1ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1'@;
put 'ODg5NVx1ODg5N1x1ODg5OFx1ODg5OVx1ODg5YVx1ODg5Ylx1ODg5ZFx1ODg5ZVx1ODg5Zlx1ODhhMFx1ODhhMVx1ODhhM1x1ODhhNVx1ODhhNlx1ODhhN1x1ODhhOFx1ODhhOVx1ODhhYVx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0'@;
put 'N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1'@;
put 'ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVj'@;
put 'NVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1'@;
put 'NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDhdW21dXT01MzI0OCttLEZbNTMyNDgrbV09eFsyMDhdW21dKTtmb3IoeFsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjJcdTg4YjNcdTg4YjRcdTg4YjVcdTg4YjZcdTg4YjhcdTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVcdTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2Fc'@;
put 'dTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGFcdTg4ZGJcdTg4ZGNcdTg4ZGRcdTg4ZGVcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTlcdTg4ZWFcdTg4ZWJcdTg4ZWNcdTg4ZWRcdTg4ZWVcdTg4ZWZcdTg4ZjJcdTg4ZjVcdTg4'@;
put 'ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDNcdTg5MDRcdTg5MDVcdTg5MDZcdTg5MDdcdTg5MDhcdWZmZmRcdTg5MDlcdTg5MGJcdTg5MGNcdTg5MGRcdTg5MGVcdTg5MGZcdTg5MTFcdTg5MTRcdTg5MTVcdTg5MTZcdTg5MTdcdTg5MThcdTg5MWNc'@;
put 'dTg5MWRcdTg5MWVcdTg5MWZcdTg5MjBcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdh'@;
put 'NzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlc'@;
put 'dTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4'@;
put 'MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2Vc'@;
put 'dTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA5XVttXV09NTM1MDQrbSxGWzUzNTA0K21dPXhbMjA5XVttXSk7Zm9yKHhbMjEwXT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRk'@;
put 'XHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4'@;
put 'OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3XHU4OTg4XHU4OTg5XHU4OThhXHU4OThi'@;
put 'XHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1'@;
put 'OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBh'@;
put 'XHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5'@;
put 'MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2'@;
put 'XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMF1bbV1dPTUzNzYwK20sRls1Mzc2MCttXT14WzIxMF1bbV0pO2Zvcih4WzIx'@;
put 'MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODlhMlx1ODlhM1x1ODlhNFx1ODlhNVx1ODlhNlx1ODlhN1x1ODlhOFx1ODlhOVx1ODlhYVx1ODlhYlx1ODlhY1x1ODlhZFx1ODlhZVx1ODlhZlx1ODliMFx1ODliMVx1ODliMlx1ODli'@;
put 'M1x1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODliOFx1ODliOVx1ODliYVx1ODliYlx1ODliY1x1ODliZFx1ODliZVx1ODliZlx1ODljMFx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1'@;
put 'ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNFx1ODlmNVx1ODlmNlx1ODlmN1x1ODlmOFx1ODlmOVx1ODlmYVx1ZmZmZFx1ODlmYlx1ODlmY1x1ODlmZFx1ODlmZVx1ODlmZlx1OGEwMVx1OGEwMlx1OGEwM1x1OGEw'@;
put 'NFx1OGEwNVx1OGEwNlx1OGEwOFx1OGEwOVx1OGEwYVx1OGEwYlx1OGEwY1x1OGEwZFx1OGEwZVx1OGEwZlx1OGExMFx1OGExMVx1OGExMlx1OGExM1x1OGExNFx1OGExNVx1OGExNlx1OGExN1x1OGExOFx1OGExOVx1OGExYVx1OGExYlx1OGExY1x1OGExZFx1NTM3MFx1ODJmMVx1NmEzMVx1'@;
put 'NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4'@;
put 'Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1'@;
put 'NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0'@;
put 'N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjExXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTFdW21dXT01NDAxNittLEZbNTQwMTYrbV09eFsyMTFd'@;
put 'W21dKTtmb3IoeFsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhMWVcdThhMWZcdThhMjBcdThhMjFcdThhMjJcdThhMjNcdThhMjRcdThhMjVcdThhMjZcdThhMjdcdThhMjhcdThhMjlcdThhMmFcdThhMmJcdThhMmNcdThh'@;
put 'MmRcdThhMmVcdThhMmZcdThhMzBcdThhMzFcdThhMzJcdThhMzNcdThhMzRcdThhMzVcdThhMzZcdThhMzdcdThhMzhcdThhMzlcdThhM2FcdThhM2JcdThhM2NcdThhM2RcdThhM2ZcdThhNDBcdThhNDFcdThhNDJcdThhNDNcdThhNDRcdThhNDVcdThhNDZcdThhNDdcdThhNDlcdThhNGFc'@;
put 'dThhNGJcdThhNGNcdThhNGRcdThhNGVcdThhNGZcdThhNTBcdThhNTFcdThhNTJcdThhNTNcdThhNTRcdThhNTVcdThhNTZcdThhNTdcdThhNThcdThhNTlcdThhNWFcdThhNWJcdThhNWNcdThhNWRcdThhNWVcdWZmZmRcdThhNWZcdThhNjBcdThhNjFcdThhNjJcdThhNjNcdThhNjRcdThh'@;
put 'NjVcdThhNjZcdThhNjdcdThhNjhcdThhNjlcdThhNmFcdThhNmJcdThhNmNcdThhNmRcdThhNmVcdThhNmZcdThhNzBcdThhNzFcdThhNzJcdThhNzNcdThhNzRcdThhNzVcdThhNzZcdThhNzdcdThhNzhcdThhN2FcdThhN2JcdThhN2NcdThhN2RcdThhN2VcdThhN2ZcdThhODBcdTZkNzRc'@;
put 'dTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThk'@;
put 'OGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2Rc'@;
put 'dTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThk'@;
put 'M2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEyXVttXV09NTQyNzIrbSxGWzU0'@;
put 'MjcyK21dPXhbMjEyXVttXSk7Zm9yKHhbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThjXHU4YThkXHU4YThlXHU4YThmXHU4'@;
put 'YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4YWE5XHU4YWFhXHU4YWFiXHU4YWFj'@;
put 'XHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMzXHU4YWM0XHU4YWM1XHU4YWM2XHU4'@;
put 'YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4YWRmXHU4YWUwXHU4YWUxXHU4YWUy'@;
put 'XHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2'@;
put 'ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5'@;
put 'XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5'@;
put 'NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxM11bbV1d'@;
put 'PTU0NTI4K20sRls1NDUyOCttXT14WzIxM11bbV0pO2Zvcih4WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlNFx1OGFlNVx1OGFlNlx1OGFlN1x1OGFlOFx1OGFlOVx1OGFlYVx1OGFlYlx1OGFlY1x1OGFlZFx1OGFlZVx1'@;
put 'OGFlZlx1OGFmMFx1OGFmMVx1OGFmMlx1OGFmM1x1OGFmNFx1OGFmNVx1OGFmNlx1OGFmN1x1OGFmOFx1OGFmOVx1OGFmYVx1OGFmYlx1OGFmY1x1OGFmZFx1OGFmZVx1OGFmZlx1OGIwMFx1OGIwMVx1OGIwMlx1OGIwM1x1OGIwNFx1OGIwNVx1OGIwNlx1OGIwOFx1OGIwOVx1OGIwYVx1OGIw'@;
put 'Ylx1OGIwY1x1OGIwZFx1OGIwZVx1OGIwZlx1OGIxMFx1OGIxMVx1OGIxMlx1OGIxM1x1OGIxNFx1OGIxNVx1OGIxNlx1OGIxN1x1OGIxOFx1OGIxOVx1OGIxYVx1OGIxYlx1OGIxY1x1OGIxZFx1OGIxZVx1OGIxZlx1OGIyMFx1OGIyMVx1OGIyMlx1OGIyM1x1ZmZmZFx1OGIyNFx1OGIyNVx1'@;
put 'OGIyN1x1OGIyOFx1OGIyOVx1OGIyYVx1OGIyYlx1OGIyY1x1OGIyZFx1OGIyZVx1OGIyZlx1OGIzMFx1OGIzMVx1OGIzMlx1OGIzM1x1OGIzNFx1OGIzNVx1OGIzNlx1OGIzN1x1OGIzOFx1OGIzOVx1OGIzYVx1OGIzYlx1OGIzY1x1OGIzZFx1OGIzZVx1OGIzZlx1OGI0MFx1OGI0MVx1OGI0'@;
put 'Mlx1OGI0M1x1OGI0NFx1OGI0NVx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1'@;
put 'NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3'@;
put 'N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1'@;
put 'OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE0XVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'YWVbeFsyMTRdW21dXT01NDc4NCttLEZbNTQ3ODQrbV09eFsyMTRdW21dKTtmb3IoeFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNDZcdThiNDdcdThiNDhcdThiNDlcdThiNGFcdThiNGJcdThiNGNcdThiNGRcdThiNGVc'@;
put 'dThiNGZcdThiNTBcdThiNTFcdThiNTJcdThiNTNcdThiNTRcdThiNTVcdThiNTZcdThiNTdcdThiNThcdThiNTlcdThiNWFcdThiNWJcdThiNWNcdThiNWRcdThiNWVcdThiNWZcdThiNjBcdThiNjFcdThiNjJcdThiNjNcdThiNjRcdThiNjVcdThiNjdcdThiNjhcdThiNjlcdThiNmFcdThi'@;
put 'NmJcdThiNmRcdThiNmVcdThiNmZcdThiNzBcdThiNzFcdThiNzJcdThiNzNcdThiNzRcdThiNzVcdThiNzZcdThiNzdcdThiNzhcdThiNzlcdThiN2FcdThiN2JcdThiN2NcdThiN2RcdThiN2VcdThiN2ZcdThiODBcdThiODFcdThiODJcdThiODNcdThiODRcdThiODVcdThiODZcdWZmZmRc'@;
put 'dThiODdcdThiODhcdThiODlcdThiOGFcdThiOGJcdThiOGNcdThiOGRcdThiOGVcdThiOGZcdThiOTBcdThiOTFcdThiOTJcdThiOTNcdThiOTRcdThiOTVcdThiOTZcdThiOTdcdThiOThcdThiOTlcdThiOWFcdThiOWJcdThiOWNcdThiOWRcdThiOWVcdThiOWZcdThiYWNcdThiYjFcdThi'@;
put 'YmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVc'@;
put 'dThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZl'@;
put 'ZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlc'@;
put 'dTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNV1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGFlW3hbMjE1XVttXV09NTUwNDArbSxGWzU1MDQwK21dPXhbMjE1XVttXSk7Zm9yKHhbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNiXHU4YzNjXHU4YzNkXHU4YzNl'@;
put 'XHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4YzVlXHU4YzVmXHU4YzYwXHU4'@;
put 'YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4YzgxXHU4YzgzXHU4Yzg0XHU4Yzg2'@;
put 'XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4Y2EzXHU4Y2E0XHU4Y2E1XHU4'@;
put 'Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZl'@;
put 'XHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1'@;
put 'MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5'@;
put 'XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE2XS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'eFsyMTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNl1bbV1dPTU1Mjk2K20sRls1NTI5NittXT14WzIxNl1bbV0pO2Zvcih4WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhZVx1OGNhZlx1OGNiMFx1OGNiMVx1OGNi'@;
put 'Mlx1OGNiM1x1OGNiNFx1OGNiNVx1OGNiNlx1OGNiN1x1OGNiOFx1OGNiOVx1OGNiYVx1OGNiYlx1OGNiY1x1OGNiZFx1OGNiZVx1OGNiZlx1OGNjMFx1OGNjMVx1OGNjMlx1OGNjM1x1OGNjNFx1OGNjNVx1OGNjNlx1OGNjN1x1OGNjOFx1OGNjOVx1OGNjYVx1OGNjYlx1OGNjY1x1OGNjZFx1'@;
put 'OGNjZVx1OGNjZlx1OGNkMFx1OGNkMVx1OGNkMlx1OGNkM1x1OGNkNFx1OGNkNVx1OGNkNlx1OGNkN1x1OGNkOFx1OGNkOVx1OGNkYVx1OGNkYlx1OGNkY1x1OGNkZFx1OGNkZVx1OGNkZlx1OGNlMFx1OGNlMVx1OGNlMlx1OGNlM1x1OGNlNFx1OGNlNVx1OGNlNlx1OGNlN1x1OGNlOFx1OGNl'@;
put 'OVx1OGNlYVx1OGNlYlx1OGNlY1x1ZmZmZFx1OGNlZFx1OGNlZVx1OGNlZlx1OGNmMFx1OGNmMVx1OGNmMlx1OGNmM1x1OGNmNFx1OGNmNVx1OGNmNlx1OGNmN1x1OGNmOFx1OGNmOVx1OGNmYVx1OGNmYlx1OGNmY1x1OGNmZFx1OGNmZVx1OGNmZlx1OGQwMFx1OGQwMVx1OGQwMlx1OGQwM1x1'@;
put 'OGQwNFx1OGQwNVx1OGQwNlx1OGQwN1x1OGQwOFx1OGQwOVx1OGQwYVx1OGQwYlx1OGQwY1x1OGQwZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZl'@;
put 'OFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1'@;
put 'NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMw'@;
put 'ZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxN10ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMjE3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTddW21dXT01NTU1MittLEZbNTU1NTIrbV09eFsyMTddW21dKTtmb3IoeFsyMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMGVcdThkMGZcdThk'@;
put 'MTBcdThkMTFcdThkMTJcdThkMTNcdThkMTRcdThkMTVcdThkMTZcdThkMTdcdThkMThcdThkMTlcdThkMWFcdThkMWJcdThkMWNcdThkMjBcdThkNTFcdThkNTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThkNmNcdThkNmVcdThkNmZcdThkNzFcdThkNzJcdThkNzhc'@;
put 'dThkNzlcdThkN2FcdThkN2JcdThkN2NcdThkN2RcdThkN2VcdThkN2ZcdThkODBcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGNcdThkOGRcdThkOGVcdThkOGZcdThkOTBcdThkOTJcdThkOTNcdThkOTVcdThkOTZcdThkOTdcdThkOThcdThkOTlcdThkOWFcdThk'@;
put 'OWJcdThkOWNcdThkOWRcdThkOWVcdThkYTBcdThkYTFcdWZmZmRcdThkYTJcdThkYTRcdThkYTVcdThkYTZcdThkYTdcdThkYThcdThkYTlcdThkYWFcdThkYWJcdThkYWNcdThkYWRcdThkYWVcdThkYWZcdThkYjBcdThkYjJcdThkYjZcdThkYjdcdThkYjlcdThkYmJcdThkYmRcdThkYzBc'@;
put 'dThkYzFcdThkYzJcdThkYzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThi'@;
put 'Y2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJc'@;
put 'dThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2'@;
put 'M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'eFsyMThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE4XVttXV09NTU4MDgrbSxGWzU1ODA4K21dPXhbMjE4XVttXSk7Zm9yKHhbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4'@;
put 'ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4ZTA0XHU4ZTA2XHU4ZTA3'@;
put 'XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4'@;
put 'ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4ZTViXHU4ZTVjXHU4ZTVk'@;
put 'XHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5'@;
put 'MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1'@;
put 'XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1'@;
put 'NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPXhbMjE5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOV1bbV1dPTU2MDY0K20sRls1NjA2NCttXT14WzIxOV1bbV0pO2Zvcih4WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OGU3M1x1OGU3NVx1OGU3N1x1OGU3OFx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OFx1OGU4OVx1OGU4YVx1OGU4Ylx1OGU4Y1x1OGU4ZFx1OGU4ZVx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NVx1OGU5'@;
put 'Nlx1OGU5N1x1OGU5OFx1OGU5OVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5Zlx1OGVhMFx1OGVhMVx1OGVhMlx1OGVhM1x1OGVhNFx1OGVhNVx1OGVhNlx1OGVhN1x1OGVhOFx1OGVhOVx1OGVhYVx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViM1x1OGViNFx1OGViNVx1OGViNlx1OGViN1x1'@;
put 'OGViOFx1OGViOVx1OGViYlx1OGViY1x1OGViZFx1OGViZVx1OGViZlx1OGVjMFx1OGVjMVx1OGVjMlx1ZmZmZFx1OGVjM1x1OGVjNFx1OGVjNVx1OGVjNlx1OGVjN1x1OGVjOFx1OGVjOVx1OGVjYVx1OGVjYlx1OGVjY1x1OGVjZFx1OGVjZlx1OGVkMFx1OGVkMVx1OGVkMlx1OGVkM1x1OGVk'@;
put 'NFx1OGVkNVx1OGVkNlx1OGVkN1x1OGVkOFx1OGVkOVx1OGVkYVx1OGVkYlx1OGVkY1x1OGVkZFx1OGVkZVx1OGVkZlx1OGVlMFx1OGVlMVx1OGVlMlx1OGVlM1x1OGVlNFx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1'@;
put 'NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJh'@;
put 'ZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1'@;
put 'ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2'@;
put 'NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjBdW21dXT01NjMyMCttLEZbNTYzMjArbV09eFsyMjBdW21dKTtmb3IoeFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZTVcdThlZTZcdThlZTdcdThlZThcdThlZTlcdThlZWFcdThlZWJcdThlZWNcdThlZWRcdThlZWVcdThlZWZcdThlZjBcdThlZjFcdThlZjJcdThlZjNcdThlZjRcdThlZjVcdThlZjZcdThlZjdcdThlZjhcdThlZjlcdThlZmFcdThlZmJcdThl'@;
put 'ZmNcdThlZmRcdThlZmVcdThlZmZcdThmMDBcdThmMDFcdThmMDJcdThmMDNcdThmMDRcdThmMDVcdThmMDZcdThmMDdcdThmMDhcdThmMDlcdThmMGFcdThmMGJcdThmMGNcdThmMGRcdThmMGVcdThmMGZcdThmMTBcdThmMTFcdThmMTJcdThmMTNcdThmMTRcdThmMTVcdThmMTZcdThmMTdc'@;
put 'dThmMThcdThmMTlcdThmMWFcdThmMWJcdThmMWNcdThmMWRcdThmMWVcdThmMWZcdThmMjBcdThmMjFcdThmMjJcdThmMjNcdWZmZmRcdThmMjRcdThmMjVcdThmMjZcdThmMjdcdThmMjhcdThmMjlcdThmMmFcdThmMmJcdThmMmNcdThmMmRcdThmMmVcdThmMmZcdThmMzBcdThmMzFcdThm'@;
put 'MzJcdThmMzNcdThmMzRcdThmMzVcdThmMzZcdThmMzdcdThmMzhcdThmMzlcdThmM2FcdThmM2JcdThmM2NcdThmM2RcdThmM2VcdThmM2ZcdThmNDBcdThmNDFcdThmNDJcdThmNDNcdThmNDRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhc'@;
put 'dTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgz'@;
put 'ZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2Nc'@;
put 'dTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1'@;
put 'MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIxXVttXV09NTY1NzYrbSxGWzU2NTc2K21dPXhbMjIxXVttXSk7Zm9yKHhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4ZjU4XHU4ZjU5XHU4'@;
put 'ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFl'@;
put 'XHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4'@;
put 'ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4'@;
put 'XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1'@;
put 'ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2'@;
put 'XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2'@;
put 'NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMl1bbV1dPTU2ODMyK20sRls1NjgzMittXT14WzIyMl1bbV0pO2Zvcih4WzIyM109Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyN1x1OTAyOFx1OTAyOVx1OTAyYVx1OTAyYlx1OTAyY1x1OTAzMFx1OTAzMVx1OTAzMlx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzOVx1OTAzYVx1'@;
put 'OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OFx1OTA0OVx1OTA0YVx1OTA0Ylx1OTA0Y1x1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1Y1x1OTA1ZFx1OTA1ZVx1OTA1Zlx1OTA2MFx1OTA2MVx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2'@;
put 'YVx1OTA2Ylx1OTA2Y1x1OTA2Zlx1OTA3MFx1OTA3MVx1OTA3Mlx1OTA3M1x1OTA3Nlx1OTA3N1x1OTA3OFx1OTA3OVx1OTA3YVx1OTA3Ylx1OTA3Y1x1OTA3ZVx1OTA4MVx1ZmZmZFx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4Y1x1OTA4ZFx1OTA4ZVx1OTA4Zlx1'@;
put 'OTA5MFx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRi'@;
put 'YVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1'@;
put 'NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRk'@;
put 'NVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1'@;
put 'NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjNdW21dXT01NzA4OCttLEZbNTcwODgrbV09eFsyMjNdW21dKTtmb3Io'@;
put 'eFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZc'@;
put 'dTkwZTBcdTkwZTNcdTkwZTRcdTkwZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDVcdTkxMDZcdTkxMDdcdTkxMDhcdTkx'@;
put 'MDlcdTkxMGFcdTkxMGJcdTkxMGNcdTkxMGRcdTkxMGVcdTkxMGZcdTkxMTBcdTkxMTFcdTkxMTJcdTkxMTNcdTkxMTRcdTkxMTVcdTkxMTZcdTkxMTdcdTkxMThcdTkxMWFcdTkxMWJcdTkxMWNcdWZmZmRcdTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjRcdTkxMjVcdTkxMjZcdTkxMjdc'@;
put 'dTkxMjhcdTkxMjlcdTkxMmFcdTkxMmJcdTkxMmNcdTkxMmRcdTkxMmVcdTkxMzBcdTkxMzJcdTkxMzNcdTkxMzRcdTkxMzVcdTkxMzZcdTkxMzdcdTkxMzhcdTkxM2FcdTkxM2JcdTkxM2NcdTkxM2RcdTkxM2VcdTkxM2ZcdTkxNDBcdTkxNDFcdTkxNDJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1'@;
put 'NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFc'@;
put 'dTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2'@;
put 'MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFc'@;
put 'dTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhb'@;
put 'MjI0XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2'@;
put 'XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTljXHU5MTlkXHU5'@;
put 'MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5MWMwXHU5MWMx'@;
put 'XHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0XHU5MWU1XHU1'@;
put 'ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2Qy'@;
put 'XHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1'@;
put 'ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNk'@;
put 'XHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20s'@;
put 'Rls1NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlNlx1OTFlN1x1OTFlOFx1OTFlOVx1OTFlYVx1OTFlYlx1OTFlY1x1OTFlZFx1OTFlZVx1OTFlZlx1OTFmMFx1OTFmMVx1OTFm'@;
put 'Mlx1OTFmM1x1OTFmNFx1OTFmNVx1OTFmNlx1OTFmN1x1OTFmOFx1OTFmOVx1OTFmYVx1OTFmYlx1OTFmY1x1OTFmZFx1OTFmZVx1OTFmZlx1OTIwMFx1OTIwMVx1OTIwMlx1OTIwM1x1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOFx1OTIwOVx1OTIwYVx1OTIwYlx1OTIwY1x1OTIwZFx1'@;
put 'OTIwZVx1OTIwZlx1OTIxMFx1OTIxMVx1OTIxMlx1OTIxM1x1OTIxNFx1OTIxNVx1OTIxNlx1OTIxN1x1OTIxOFx1OTIxOVx1OTIxYVx1OTIxYlx1OTIxY1x1OTIxZFx1OTIxZVx1OTIxZlx1OTIyMFx1OTIyMVx1OTIyMlx1OTIyM1x1OTIyNFx1ZmZmZFx1OTIyNVx1OTIyNlx1OTIyN1x1OTIy'@;
put 'OFx1OTIyOVx1OTIyYVx1OTIyYlx1OTIyY1x1OTIyZFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzMVx1OTIzMlx1OTIzM1x1OTIzNFx1OTIzNVx1OTIzNlx1OTIzN1x1OTIzOFx1OTIzOVx1OTIzYVx1OTIzYlx1OTIzY1x1OTIzZFx1OTIzZVx1OTIzZlx1OTI0MFx1OTI0MVx1OTI0Mlx1OTI0M1x1'@;
put 'OTI0NFx1OTI0NVx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkw'@;
put 'Mlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1'@;
put 'NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAy'@;
put 'Nlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZd'@;
put 'W21dXT01Nzg1NittLEZbNTc4NTYrbV09eFsyMjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyNDZcdTkyNDdcdTkyNDhcdTkyNDlcdTkyNGFcdTkyNGJcdTkyNGNcdTkyNGRcdTkyNGVcdTkyNGZcdTky'@;
put 'NTBcdTkyNTFcdTkyNTJcdTkyNTNcdTkyNTRcdTkyNTVcdTkyNTZcdTkyNTdcdTkyNThcdTkyNTlcdTkyNWFcdTkyNWJcdTkyNWNcdTkyNWRcdTkyNWVcdTkyNWZcdTkyNjBcdTkyNjFcdTkyNjJcdTkyNjNcdTkyNjRcdTkyNjVcdTkyNjZcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNmFcdTkyNmJc'@;
put 'dTkyNmNcdTkyNmRcdTkyNmVcdTkyNmZcdTkyNzBcdTkyNzFcdTkyNzJcdTkyNzNcdTkyNzVcdTkyNzZcdTkyNzdcdTkyNzhcdTkyNzlcdTkyN2FcdTkyN2JcdTkyN2NcdTkyN2RcdTkyN2VcdTkyN2ZcdTkyODBcdTkyODFcdTkyODJcdTkyODNcdTkyODRcdTkyODVcdWZmZmRcdTkyODZcdTky'@;
put 'ODdcdTkyODhcdTkyODlcdTkyOGFcdTkyOGJcdTkyOGNcdTkyOGRcdTkyOGZcdTkyOTBcdTkyOTFcdTkyOTJcdTkyOTNcdTkyOTRcdTkyOTVcdTkyOTZcdTkyOTdcdTkyOThcdTkyOTlcdTkyOWFcdTkyOWJcdTkyOWNcdTkyOWRcdTkyOWVcdTkyOWZcdTkyYTBcdTkyYTFcdTkyYTJcdTkyYTNc'@;
put 'dTkyYTRcdTkyYTVcdTkyYTZcdTkyYTdcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYx'@;
put 'MDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNc'@;
put 'dTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZj'@;
put 'ZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMjI3XVttXV09NTgxMTIrbSxGWzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5MmIwXHU5'@;
put 'MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNjXHU5MmNk'@;
put 'XHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5MmU4XHVm'@;
put 'ZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAyXHU5MzAz'@;
put 'XHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2'@;
put 'ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIy'@;
put 'XHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2'@;
put 'ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOF1bbV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYVx1OTMwYlx1OTMwY1x1OTMwZFx1OTMwZVx1OTMwZlx1'@;
put 'OTMxMFx1OTMxMVx1OTMxMlx1OTMxM1x1OTMxNFx1OTMxNVx1OTMxNlx1OTMxN1x1OTMxOFx1OTMxOVx1OTMxYVx1OTMxYlx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMFx1OTMyMVx1OTMyMlx1OTMyM1x1OTMyNFx1OTMyNVx1OTMyNlx1OTMyN1x1OTMyOFx1OTMyOVx1OTMyYVx1OTMy'@;
put 'Ylx1OTMyY1x1OTMyZFx1OTMyZVx1OTMyZlx1OTMzMFx1OTMzMVx1OTMzMlx1OTMzM1x1OTMzNFx1OTMzNVx1OTMzNlx1OTMzN1x1OTMzOFx1OTMzOVx1OTMzYVx1OTMzYlx1OTMzY1x1OTMzZFx1OTMzZlx1OTM0MFx1OTM0MVx1OTM0Mlx1OTM0M1x1OTM0NFx1OTM0NVx1OTM0Nlx1OTM0N1x1'@;
put 'OTM0OFx1OTM0OVx1ZmZmZFx1OTM0YVx1OTM0Ylx1OTM0Y1x1OTM0ZFx1OTM0ZVx1OTM0Zlx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1M1x1OTM1NFx1OTM1NVx1OTM1Nlx1OTM1N1x1OTM1OFx1OTM1OVx1OTM1YVx1OTM1Ylx1OTM1Y1x1OTM1ZFx1OTM1ZVx1OTM1Zlx1OTM2MFx1OTM2MVx1OTM2'@;
put 'Mlx1OTM2M1x1OTM2NFx1OTM2NVx1OTM2Nlx1OTM2N1x1OTM2OFx1OTM2OVx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1'@;
put 'NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAx'@;
put 'MVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1'@;
put 'NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMjI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtmb3IoeFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzNmNcdTkzNmRcdTkzNmVcdTkzNmZc'@;
put 'dTkzNzBcdTkzNzFcdTkzNzJcdTkzNzNcdTkzNzRcdTkzNzVcdTkzNzZcdTkzNzdcdTkzNzhcdTkzNzlcdTkzN2FcdTkzN2JcdTkzN2NcdTkzN2RcdTkzN2VcdTkzN2ZcdTkzODBcdTkzODFcdTkzODJcdTkzODNcdTkzODRcdTkzODVcdTkzODZcdTkzODdcdTkzODhcdTkzODlcdTkzOGFcdTkz'@;
put 'OGJcdTkzOGNcdTkzOGRcdTkzOGVcdTkzOTBcdTkzOTFcdTkzOTJcdTkzOTNcdTkzOTRcdTkzOTVcdTkzOTZcdTkzOTdcdTkzOThcdTkzOTlcdTkzOWFcdTkzOWJcdTkzOWNcdTkzOWRcdTkzOWVcdTkzOWZcdTkzYTBcdTkzYTFcdTkzYTJcdTkzYTNcdTkzYTRcdTkzYTVcdTkzYTZcdTkzYTdc'@;
put 'dTkzYThcdTkzYTlcdTkzYWFcdTkzYWJcdWZmZmRcdTkzYWNcdTkzYWRcdTkzYWVcdTkzYWZcdTkzYjBcdTkzYjFcdTkzYjJcdTkzYjNcdTkzYjRcdTkzYjVcdTkzYjZcdTkzYjdcdTkzYjhcdTkzYjlcdTkzYmFcdTkzYmJcdTkzYmNcdTkzYmRcdTkzYmVcdTkzYmZcdTkzYzBcdTkzYzFcdTkz'@;
put 'YzJcdTkzYzNcdTkzYzRcdTkzYzVcdTkzYzZcdTkzYzdcdTkzYzhcdTkzYzlcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5Zjlc'@;
put 'dTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVh'@;
put 'ZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVc'@;
put 'dTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzIzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21dPXhbMjMwXVttXSk7Zm9yKHhbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5M2Nm'@;
put 'XHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2ViXHU5'@;
put 'M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5NDA3'@;
put 'XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIxXHU5'@;
put 'NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUx'@;
put 'XHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3'@;
put 'ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2My'@;
put 'XHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMjMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2K20sRls1OTEzNittXT14WzIzMV1bbV0pO2Zvcih4WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OTQyZlx1OTQzMFx1OTQzMVx1OTQzMlx1OTQzM1x1OTQzNFx1OTQzNVx1OTQzNlx1OTQzN1x1OTQzOFx1OTQzOVx1OTQzYVx1OTQzYlx1OTQzY1x1OTQzZFx1OTQzZlx1OTQ0MFx1OTQ0MVx1OTQ0Mlx1OTQ0M1x1OTQ0NFx1OTQ0NVx1OTQ0Nlx1OTQ0N1x1OTQ0OFx1OTQ0OVx1OTQ0YVx1'@;
put 'OTQ0Ylx1OTQ0Y1x1OTQ0ZFx1OTQ0ZVx1OTQ0Zlx1OTQ1MFx1OTQ1MVx1OTQ1Mlx1OTQ1M1x1OTQ1NFx1OTQ1NVx1OTQ1Nlx1OTQ1N1x1OTQ1OFx1OTQ1OVx1OTQ1YVx1OTQ1Ylx1OTQ1Y1x1OTQ1ZFx1OTQ1ZVx1OTQ1Zlx1OTQ2MFx1OTQ2MVx1OTQ2Mlx1OTQ2M1x1OTQ2NFx1OTQ2NVx1OTQ2'@;
put 'Nlx1OTQ2N1x1OTQ2OFx1OTQ2OVx1OTQ2YVx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1ZmZmZFx1OTQ3MFx1OTQ3MVx1OTQ3Mlx1OTQ3M1x1OTQ3NFx1OTQ3NVx1OTQ3Nlx1OTQ3N1x1OTQ3OFx1OTQ3OVx1OTQ3YVx1OTQ3Ylx1OTQ3Y1x1OTQ3ZFx1OTQ3ZVx1OTQ3Zlx1OTQ4MFx1OTQ4MVx1'@;
put 'OTQ4Mlx1OTQ4M1x1OTQ4NFx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4'@;
put 'MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1'@;
put 'NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0'@;
put 'ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzIzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzJdW21dXT01OTM5MittLEZbNTkzOTIrbV09eFsyMzJdW21dKTtmb3IoeFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTk1MjdcdTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVcdTk1NzdcdTk1NzhcdTk1NzlcdTk1N2FcdTk1N2JcdTk1N2NcdTk1N2RcdTk1N2VcdTk1ODBcdTk1ODFcdTk1ODJcdTk1ODNcdTk1ODRc'@;
put 'dTk1ODVcdTk1ODZcdTk1ODdcdTk1ODhcdTk1ODlcdTk1OGFcdTk1OGJcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OGZcdTk1OTBcdTk1OTFcdTk1OTJcdTk1OTNcdTk1OTRcdTk1OTVcdTk1OTZcdTk1OTdcdTk1OThcdTk1OTlcdTk1OWFcdTk1OWJcdTk1OWNcdTk1OWRcdTk1OWVcdTk1OWZcdTk1'@;
put 'YTBcdTk1YTFcdTk1YTJcdTk1YTNcdTk1YTRcdTk1YTVcdTk1YTZcdTk1YTdcdTk1YThcdTk1YTlcdTk1YWFcdWZmZmRcdTk1YWJcdTk1YWNcdTk1YWRcdTk1YWVcdTk1YWZcdTk1YjBcdTk1YjFcdTk1YjJcdTk1YjNcdTk1YjRcdTk1YjVcdTk1YjZcdTk1YjdcdTk1YjhcdTk1YjlcdTk1YmFc'@;
put 'dTk1YmJcdTk1YmNcdTk1YmRcdTk1YmVcdTk1YmZcdTk1YzBcdTk1YzFcdTk1YzJcdTk1YzNcdTk1YzRcdTk1YzVcdTk1YzZcdTk1YzdcdTk1YzhcdTk1YzlcdTk1Y2FcdTk1Y2JcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5'@;
put 'NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBc'@;
put 'dTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZi'@;
put 'ODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdc'@;
put 'dThmOGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMzXVttXV09NTk2NDgrbSxGWzU5NjQ4K21dPXhbMjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUy'@;
put 'XHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5'@;
put 'NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZm'@;
put 'XHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2'@;
put 'MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0'@;
put 'XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4'@;
put 'ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3Mjky'@;
put 'XHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNF1bbV1dPTU5OTA0K20sRls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZFx1OTY5ZVx1OTY5Zlx1OTZhMFx1OTZhMVx1OTZhMlx1OTZhM1x1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOFx1OTZh'@;
put 'OVx1OTZhYVx1OTZhYlx1OTZhY1x1OTZhZFx1OTZhZVx1OTZhZlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNlx1OTZkN1x1OTZkOFx1'@;
put 'OTZkOVx1OTZkYVx1OTZkYlx1OTZkY1x1OTZkZFx1OTZkZVx1OTZkZlx1OTZlMVx1OTZlMlx1OTZlM1x1OTZlNFx1OTZlNVx1OTZlNlx1OTZlN1x1OTZlYlx1ZmZmZFx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZm'@;
put 'Y1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxN1x1OTcxOFx1OTcxOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1'@;
put 'NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBi'@;
put 'Y1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1'@;
put 'NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFh'@;
put 'M1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzVdW21dXT02MDE2MCttLEZbNjAxNjArbV09eFsyMzVdW21dKTtmb3IoeFsyMzZdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3MjFcdTk3MjJcdTk3MjNcdTk3MjRcdTk3MjVcdTk3MjZcdTk3MjdcdTk3MjhcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzNcdTk3MzRcdTk3MzVcdTk3MzZcdTk3'@;
put 'MzdcdTk3M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2ZcdTk3NDBcdTk3NDFcdTk3NDJcdTk3NDNcdTk3NDRcdTk3NDVcdTk3NDZcdTk3NDdcdTk3NDhcdTk3NDlcdTk3NGFcdTk3NGJcdTk3NGNcdTk3NGRcdTk3NGVcdTk3NGZcdTk3NTBcdTk3NTFcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThc'@;
put 'dTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmFcdTk3NmJcdTk3NmNcdTk3NmRcdTk3NmVcdTk3NmZcdTk3NzBcdTk3NzFcdWZmZmRcdTk3NzJcdTk3NzVcdTk3NzdcdTk3NzhcdTk3NzlcdTk3N2FcdTk3N2JcdTk3N2RcdTk3N2VcdTk3'@;
put 'N2ZcdTk3ODBcdTk3ODFcdTk3ODJcdTk3ODNcdTk3ODRcdTk3ODZcdTk3ODdcdTk3ODhcdTk3ODlcdTk3OGFcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTlcdTk3OWFcdTk3OWJcdTk3OWNcdTk3OWRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdc'@;
put 'dTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcw'@;
put 'OTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBc'@;
put 'dTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5'@;
put 'N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM2XVttXV09NjA0MTYrbSxGWzYwNDE2K21dPXhbMjM2XVttXSk7'@;
put 'Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5'@;
put 'N2I1XHU5N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2Qw'@;
put 'XHU5N2QxXHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5'@;
put 'N2YyXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVk'@;
put 'XHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3'@;
put 'ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEz'@;
put 'XHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3'@;
put 'NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3Mitt'@;
put 'XT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTgwZlx1OTgxMFx1OTgxMVx1OTgxMlx1OTgxM1x1OTgxNFx1OTgxNVx1OTgxNlx1OTgxN1x1OTgxOFx1OTgxOVx1OTgxYVx1OTgxYlx1OTgxY1x1'@;
put 'OTgxZFx1OTgxZVx1OTgxZlx1OTgyMFx1OTgyMVx1OTgyMlx1OTgyM1x1OTgyNFx1OTgyNVx1OTgyNlx1OTgyN1x1OTgyOFx1OTgyOVx1OTgyYVx1OTgyYlx1OTgyY1x1OTgyZFx1OTgyZVx1OTgyZlx1OTgzMFx1OTgzMVx1OTgzMlx1OTgzM1x1OTgzNFx1OTgzNVx1OTgzNlx1OTgzN1x1OTgz'@;
put 'OFx1OTgzOVx1OTgzYVx1OTgzYlx1OTgzY1x1OTgzZFx1OTgzZVx1OTgzZlx1OTg0MFx1OTg0MVx1OTg0Mlx1OTg0M1x1OTg0NFx1OTg0NVx1OTg0Nlx1OTg0N1x1OTg0OFx1OTg0OVx1OTg0YVx1OTg0Ylx1OTg0Y1x1OTg0ZFx1ZmZmZFx1OTg0ZVx1OTg0Zlx1OTg1MFx1OTg1MVx1OTg1Mlx1'@;
put 'OTg1M1x1OTg1NFx1OTg1NVx1OTg1Nlx1OTg1N1x1OTg1OFx1OTg1OVx1OTg1YVx1OTg1Ylx1OTg1Y1x1OTg1ZFx1OTg1ZVx1OTg1Zlx1OTg2MFx1OTg2MVx1OTg2Mlx1OTg2M1x1OTg2NFx1OTg2NVx1OTg2Nlx1OTg2N1x1OTg2OFx1OTg2OVx1OTg2YVx1OTg2Ylx1OTg2Y1x1OTg2ZFx1OTg2'@;
put 'ZVx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1'@;
put 'N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRh'@;
put 'ZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1OTRjYlx1OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1'@;
put 'OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDky'@;
put 'OCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NmZcdTk4NzBcdTk4NzFcdTk4NzJcdTk4NzNcdTk4NzRcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNc'@;
put 'dTk4YThcdTk4YTlcdTk4YWFcdTk4YWJcdTk4YWNcdTk4YWRcdTk4YWVcdTk4YWZcdTk4YjBcdTk4YjFcdTk4YjJcdTk4YjNcdTk4YjRcdTk4YjVcdTk4YjZcdTk4YjdcdTk4YjhcdTk4YjlcdTk4YmFcdTk4YmJcdTk4YmNcdTk4YmRcdTk4YmVcdTk4YmZcdTk4YzBcdTk4YzFcdTk4YzJcdTk4'@;
put 'YzNcdTk4YzRcdTk4YzVcdTk4YzZcdTk4YzdcdTk4YzhcdTk4YzlcdTk4Y2FcdTk4Y2JcdTk4Y2NcdTk4Y2RcdTk4Y2ZcdTk4ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTBcdTk4ZTFcdTk4ZTJcdTk4ZTNcdTk4ZTRcdWZmZmRcdTk4ZTVcdTk4ZTZcdTk4ZTlc'@;
put 'dTk4ZWFcdTk4ZWJcdTk4ZWNcdTk4ZWRcdTk4ZWVcdTk4ZWZcdTk4ZjBcdTk4ZjFcdTk4ZjJcdTk4ZjNcdTk4ZjRcdTk4ZjVcdTk4ZjZcdTk4ZjdcdTk4ZjhcdTk4ZjlcdTk4ZmFcdTk4ZmJcdTk4ZmNcdTk4ZmRcdTk4ZmVcdTk4ZmZcdTk5MDBcdTk5MDFcdTk5MDJcdTk5MDNcdTk5MDRcdTk5'@;
put 'MDVcdTk5MDZcdTk5MDdcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVc'@;
put 'dTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1'@;
put 'NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNc'@;
put 'dTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MjM5XVttXV09NjExODQrbSxGWzYxMTg0K21dPXhbMjM5XVttXSk7Zm9yKHhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEz'@;
put 'XHU5OTE0XHU5OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5'@;
put 'OTMwXHU5OTMxXHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRh'@;
put 'XHU5OTRiXHU5OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5'@;
put 'OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMx'@;
put 'XHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5'@;
put 'ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0'@;
put 'XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDBdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzI0MF1bbV1dPTYxNDQwK20sRls2MTQ0MCttXT14WzI0MF1bbV0pO2Zvcih4WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4Y1x1OTk4ZVx1OTk5YVx1OTk5Ylx1OTk5Y1x1OTk5ZFx1OTk5ZVx1OTk5'@;
put 'Zlx1OTlhMFx1OTlhMVx1OTlhMlx1OTlhM1x1OTlhNFx1OTlhNlx1OTlhN1x1OTlhOVx1OTlhYVx1OTlhYlx1OTlhY1x1OTlhZFx1OTlhZVx1OTlhZlx1OTliMFx1OTliMVx1OTliMlx1OTliM1x1OTliNFx1OTliNVx1OTliNlx1OTliN1x1OTliOFx1OTliOVx1OTliYVx1OTliYlx1OTliY1x1'@;
put 'OTliZFx1OTliZVx1OTliZlx1OTljMFx1OTljMVx1OTljMlx1OTljM1x1OTljNFx1OTljNVx1OTljNlx1OTljN1x1OTljOFx1OTljOVx1OTljYVx1OTljYlx1OTljY1x1OTljZFx1OTljZVx1OTljZlx1OTlkMFx1OTlkMVx1OTlkMlx1OTlkM1x1OTlkNFx1OTlkNVx1OTlkNlx1OTlkN1x1OTlk'@;
put 'OFx1ZmZmZFx1OTlkOVx1OTlkYVx1OTlkYlx1OTlkY1x1OTlkZFx1OTlkZVx1OTlkZlx1OTllMFx1OTllMVx1OTllMlx1OTllM1x1OTllNFx1OTllNVx1OTllNlx1OTllN1x1OTllOFx1OTllOVx1OTllYVx1OTllYlx1OTllY1x1OTllZFx1OTllZVx1OTllZlx1OTlmMFx1OTlmMVx1OTlmMlx1'@;
put 'OTlmM1x1OTlmNFx1OTlmNVx1OTlmNlx1OTlmN1x1OTlmOFx1OTlmOVx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2Fl'@;
put 'Nlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1'@;
put 'ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAy'@;
put 'Mlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQx'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDFdW21dXT02MTY5NittLEZbNjE2OTYrbV09eFsyNDFdW21dKTtmb3IoeFsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmFcdTk5ZmJcdTk5ZmNcdTk5ZmRcdTk5ZmVcdTk5'@;
put 'ZmZcdTlhMDBcdTlhMDFcdTlhMDJcdTlhMDNcdTlhMDRcdTlhMDVcdTlhMDZcdTlhMDdcdTlhMDhcdTlhMDlcdTlhMGFcdTlhMGJcdTlhMGNcdTlhMGRcdTlhMGVcdTlhMGZcdTlhMTBcdTlhMTFcdTlhMTJcdTlhMTNcdTlhMTRcdTlhMTVcdTlhMTZcdTlhMTdcdTlhMThcdTlhMTlcdTlhMWFc'@;
put 'dTlhMWJcdTlhMWNcdTlhMWRcdTlhMWVcdTlhMWZcdTlhMjBcdTlhMjFcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjVcdTlhMjZcdTlhMjdcdTlhMjhcdTlhMjlcdTlhMmFcdTlhMmJcdTlhMmNcdTlhMmRcdTlhMmVcdTlhMmZcdTlhMzBcdTlhMzFcdTlhMzJcdTlhMzNcdTlhMzRcdTlhMzVcdTlh'@;
put 'MzZcdTlhMzdcdTlhMzhcdWZmZmRcdTlhMzlcdTlhM2FcdTlhM2JcdTlhM2NcdTlhM2RcdTlhM2VcdTlhM2ZcdTlhNDBcdTlhNDFcdTlhNDJcdTlhNDNcdTlhNDRcdTlhNDVcdTlhNDZcdTlhNDdcdTlhNDhcdTlhNDlcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGRcdTlhNGVcdTlhNGZcdTlhNTBc'@;
put 'dTlhNTFcdTlhNTJcdTlhNTNcdTlhNTRcdTlhNTVcdTlhNTZcdTlhNTdcdTlhNThcdTlhNTlcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2'@;
put 'N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRc'@;
put 'dTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3'@;
put 'M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDJdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzI0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQyXVttXV09NjE5NTIrbSxGWzYxOTUyK21dPXhbMjQyXVttXSk7Zm9yKHhbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5'@;
put 'YTVkXHU5YTVlXHU5YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFj'@;
put 'XHU5YWFkXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5'@;
put 'YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4'@;
put 'XHU5YWZhXHU5YWZjXHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4'@;
put 'N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3'@;
put 'XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3'@;
put 'YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQz'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0M11bbV1dPTYyMjA4K20sRls2MjIwOCttXT14WzI0M11bbV0pO2Zvcih4WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIwN1x1'@;
put 'OWIwOVx1OWIwYVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNFx1OWIxNVx1OWIxNlx1OWIxN1x1OWIxOFx1OWIxOVx1OWIxYVx1OWIxYlx1OWIxY1x1OWIxZFx1OWIxZVx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNFx1OWIyNVx1OWIyNlx1OWIyN1x1OWIy'@;
put 'OFx1OWIyOVx1OWIyYVx1OWIyYlx1OWIyY1x1OWIyZFx1OWIyZVx1OWIzMFx1OWIzMVx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzNlx1OWIzN1x1OWIzOFx1OWIzOVx1OWIzYVx1OWIzZFx1OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1'@;
put 'OWI1M1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1OFx1OWI1OVx1OWI1YVx1ZmZmZFx1OWI1Ylx1OWI1Y1x1OWI1ZFx1OWI1ZVx1OWI1Zlx1OWI2MFx1OWI2MVx1OWI2Mlx1OWI2M1x1OWI2NFx1OWI2NVx1OWI2Nlx1OWI2N1x1OWI2OFx1OWI2OVx1OWI2YVx1OWI2Ylx1OWI2Y1x1OWI2ZFx1OWI2'@;
put 'ZVx1OWI2Zlx1OWI3MFx1OWI3MVx1OWI3Mlx1OWI3M1x1OWI3NFx1OWI3NVx1OWI3Nlx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3YVx1OWI3Ylx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1'@;
put 'ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2Zi'@;
put 'MFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1'@;
put 'N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzI0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDRdW21dXT02MjQ2NCttLEZbNjI0NjQrbV09eFsyNDRdW21dKTtmb3IoeFsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTliN2NcdTliN2RcdTliN2VcdTliN2ZcdTliODBcdTliODFcdTliODJcdTliODNcdTliODRcdTliODVcdTliODZcdTliODdcdTliODhcdTliODlcdTliOGFcdTliOGJcdTliOGNcdTliOGRcdTliOGVcdTliOGZcdTliOTBcdTliOTFcdTliOTJcdTliOTNcdTliOTRcdTliOTVcdTli'@;
put 'OTZcdTliOTdcdTliOThcdTliOTlcdTliOWFcdTliOWJcdTliOWNcdTliOWRcdTliOWVcdTliOWZcdTliYTBcdTliYTFcdTliYTJcdTliYTNcdTliYTRcdTliYTVcdTliYTZcdTliYTdcdTliYThcdTliYTlcdTliYWFcdTliYWJcdTliYWNcdTliYWRcdTliYWVcdTliYWZcdTliYjBcdTliYjFc'@;
put 'dTliYjJcdTliYjNcdTliYjRcdTliYjVcdTliYjZcdTliYjdcdTliYjhcdTliYjlcdTliYmFcdWZmZmRcdTliYmJcdTliYmNcdTliYmRcdTliYmVcdTliYmZcdTliYzBcdTliYzFcdTliYzJcdTliYzNcdTliYzRcdTliYzVcdTliYzZcdTliYzdcdTliYzhcdTliYzlcdTliY2FcdTliY2JcdTli'@;
put 'Y2NcdTliY2RcdTliY2VcdTliY2ZcdTliZDBcdTliZDFcdTliZDJcdTliZDNcdTliZDRcdTliZDVcdTliZDZcdTliZDdcdTliZDhcdTliZDlcdTliZGFcdTliZGJcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVc'@;
put 'dTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThk'@;
put 'ZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlc'@;
put 'dThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ1XVttXV09NjI3MjArbSxGWzYyNzIwK21dPXhbMjQ1XVttXSk7Zm9yKHhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5'@;
put 'YmY0XHU5YmY1XHU5YmY2XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBm'@;
put 'XHU5YzEwXHU5YzExXHU5YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5'@;
put 'YzJhXHU5YzJiXHU5YzJjXHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2'@;
put 'XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5'@;
put 'MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2Ew'@;
put 'XHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5'@;
put 'Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Nl1bbV1dPTYyOTc2K20sRls2Mjk3NittXT14WzI0Nl1bbV0pO2Zvcih4WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWMzY1x1OWMzZFx1OWMzZVx1OWMzZlx1OWM0MFx1OWM0MVx1OWM0Mlx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0Nlx1OWM0N1x1OWM0OFx1OWM0OVx1OWM0YVx1OWM0Ylx1OWM0Y1x1OWM0ZFx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1MVx1'@;
put 'OWM1Mlx1OWM1M1x1OWM1NFx1OWM1NVx1OWM1Nlx1OWM1N1x1OWM1OFx1OWM1OVx1OWM1YVx1OWM1Ylx1OWM1Y1x1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2MFx1OWM2MVx1OWM2Mlx1OWM2M1x1OWM2NFx1OWM2NVx1OWM2Nlx1OWM2N1x1OWM2OFx1OWM2OVx1OWM2YVx1OWM2Ylx1OWM2Y1x1OWM2'@;
put 'ZFx1OWM2ZVx1OWM2Zlx1OWM3MFx1OWM3MVx1OWM3Mlx1OWM3M1x1OWM3NFx1OWM3NVx1OWM3Nlx1OWM3N1x1OWM3OFx1OWM3OVx1OWM3YVx1ZmZmZFx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1'@;
put 'OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZVx1OWNiZlx1OWNjMFx1OWNjMVx1OWNjMlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNlMVx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNk'@;
put 'NVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1'@;
put 'OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIx'@;
put 'Zlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1'@;
put 'OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDddW21dXT02MzIzMittLEZbNjMyMzIrbV09eFsyNDddW21dKTtmb3IoeFsyNDhdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljZTNcdTljZTRcdTljZTVcdTljZTZcdTljZTdcdTljZThcdTljZTlcdTljZWFcdTljZWJcdTljZWNcdTljZWRcdTljZWVcdTljZWZcdTljZjBcdTljZjFcdTljZjJcdTljZjNcdTljZjRcdTljZjVcdTljZjZc'@;
put 'dTljZjdcdTljZjhcdTljZjlcdTljZmFcdTljZmJcdTljZmNcdTljZmRcdTljZmVcdTljZmZcdTlkMDBcdTlkMDFcdTlkMDJcdTlkMDNcdTlkMDRcdTlkMDVcdTlkMDZcdTlkMDdcdTlkMDhcdTlkMDlcdTlkMGFcdTlkMGJcdTlkMGNcdTlkMGRcdTlkMGVcdTlkMGZcdTlkMTBcdTlkMTFcdTlk'@;
put 'MTJcdTlkMTNcdTlkMTRcdTlkMTVcdTlkMTZcdTlkMTdcdTlkMThcdTlkMTlcdTlkMWFcdTlkMWJcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMWZcdTlkMjBcdTlkMjFcdWZmZmRcdTlkMjJcdTlkMjNcdTlkMjRcdTlkMjVcdTlkMjZcdTlkMjdcdTlkMjhcdTlkMjlcdTlkMmFcdTlkMmJcdTlkMmNc'@;
put 'dTlkMmRcdTlkMmVcdTlkMmZcdTlkMzBcdTlkMzFcdTlkMzJcdTlkMzNcdTlkMzRcdTlkMzVcdTlkMzZcdTlkMzdcdTlkMzhcdTlkMzlcdTlkM2FcdTlkM2JcdTlkM2NcdTlkM2RcdTlkM2VcdTlkM2ZcdTlkNDBcdTlkNDFcdTlkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ4XVttXV09NjM0ODgrbSxGWzYzNDg4K21dPXhbMjQ4XVttXSk7Zm9yKHhbMjQ5'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0'@;
put 'XHU5ZDU1XHU5ZDU2XHU5ZDU3XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5'@;
put 'ZDcwXHU5ZDcxXHU5ZDcyXHU5ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhh'@;
put 'XHU5ZDhiXHU5ZDhjXHU5ZDhkXHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OV1bbV1dPTYzNzQ0K20sRls2Mzc0NCttXT14WzI0OV1b'@;
put 'bV0pO2Zvcih4WzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhM1x1OWRhNFx1OWRhNVx1OWRhNlx1OWRhN1x1OWRhOFx1OWRhOVx1OWRhYVx1OWRhYlx1OWRhY1x1OWRhZFx1OWRhZVx1OWRhZlx1OWRiMFx1OWRiMVx1OWRi'@;
put 'Mlx1OWRiM1x1OWRiNFx1OWRiNVx1OWRiNlx1OWRiN1x1OWRiOFx1OWRiOVx1OWRiYVx1OWRiYlx1OWRiY1x1OWRiZFx1OWRiZVx1OWRiZlx1OWRjMFx1OWRjMVx1OWRjMlx1OWRjM1x1OWRjNFx1OWRjNVx1OWRjNlx1OWRjN1x1OWRjOFx1OWRjOVx1OWRjYVx1OWRjYlx1OWRjY1x1OWRjZFx1'@;
put 'OWRjZVx1OWRjZlx1OWRkMFx1OWRkMVx1OWRkMlx1OWRkM1x1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkOFx1OWRkOVx1OWRkYVx1OWRkYlx1OWRkY1x1OWRkZFx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlMVx1ZmZmZFx1OWRlMlx1OWRlM1x1OWRlNFx1OWRlNVx1OWRlNlx1OWRlN1x1OWRl'@;
put 'OFx1OWRlOVx1OWRlYVx1OWRlYlx1OWRlY1x1OWRlZFx1OWRlZVx1OWRlZlx1OWRmMFx1OWRmMVx1OWRmMlx1OWRmM1x1OWRmNFx1OWRmNVx1OWRmNlx1OWRmN1x1OWRmOFx1OWRmOVx1OWRmYVx1OWRmYlx1OWRmY1x1OWRmZFx1OWRmZVx1OWRmZlx1OWUwMFx1OWUwMVx1OWUwMlx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTBdW21dXT02NGUzK20sRls2NGUz'@;
put 'K21dPXhbMjUwXVttXSk7Zm9yKHhbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZTAzXHU5ZTA0XHU5ZTA1XHU5ZTA2XHU5ZTA3XHU5ZTA4XHU5ZTA5XHU5ZTBhXHU5ZTBiXHU5ZTBjXHU5ZTBkXHU5ZTBlXHU5ZTBmXHU5ZTEw'@;
put 'XHU5ZTExXHU5ZTEyXHU5ZTEzXHU5ZTE0XHU5ZTE1XHU5ZTE2XHU5ZTE3XHU5ZTE4XHU5ZTE5XHU5ZTFhXHU5ZTFiXHU5ZTFjXHU5ZTFkXHU5ZTFlXHU5ZTI0XHU5ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5'@;
put 'ZTU2XHU5ZTU5XHU5ZTVkXHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0XHU5ZTc1XHU5ZTc2XHU5ZTc3XHU5ZTc4XHU5ZTc5XHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTdkXHU5ZTgwXHVmZmZkXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2'@;
put 'XHU5ZTg5XHU5ZThhXHU5ZThjXHU5ZThkXHU5ZThlXHU5ZThmXHU5ZTkwXHU5ZTkxXHU5ZTk0XHU5ZTk1XHU5ZTk2XHU5ZTk3XHU5ZTk4XHU5ZTk5XHU5ZTlhXHU5ZTliXHU5ZTljXHU5ZTllXHU5ZWEwXHU5ZWExXHU5ZWEyXHU5ZWEzXHU5ZWE0XHU5ZWE1XHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5'@;
put 'ZWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MV1bbV1dPTY0'@;
put 'MjU2K20sRls2NDI1NittXT14WzI1MV1bbV0pO2Zvcih4WzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWVi'@;
put 'N1x1OWViOVx1OWViYVx1OWViY1x1OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1'@;
put 'OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYw'@;
put 'OFx1OWYwOVx1OWYwYVx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1'@;
put 'OWYyZVx1OWYzMFx1OWYzMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsyNTJdW21dXT02NDUxMittLEZbNjQ1MTIrbV09eFsyNTJdW21dKTtmb3IoeFsyNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmMzJcdTlmMzNcdTlmMzRcdTlmMzVcdTlmMzZcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2ZcdTlm'@;
put 'NDBcdTlmNDFcdTlmNDJcdTlmNDNcdTlmNDVcdTlmNDZcdTlmNDdcdTlmNDhcdTlmNDlcdTlmNGFcdTlmNGJcdTlmNGNcdTlmNGRcdTlmNGVcdTlmNGZcdTlmNTJcdTlmNTNcdTlmNTRcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNTlcdTlmNWFcdTlmNWJcdTlmNWNcdTlmNWRcdTlmNWVc'@;
put 'dTlmNWZcdTlmNjBcdTlmNjFcdTlmNjJcdTlmNjNcdTlmNjRcdTlmNjVcdTlmNjZcdTlmNjdcdTlmNjhcdTlmNjlcdTlmNmFcdTlmNmJcdTlmNmNcdTlmNmRcdTlmNmVcdTlmNmZcdTlmNzBcdTlmNzFcdTlmNzJcdTlmNzNcdTlmNzRcdTlmNzVcdTlmNzZcdTlmNzdcdTlmNzhcdWZmZmRcdTlm'@;
put 'NzlcdTlmN2FcdTlmN2JcdTlmN2NcdTlmN2RcdTlmN2VcdTlmODFcdTlmODJcdTlmOGRcdTlmOGVcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTNcdTlmOTRcdTlmOTVcdTlmOTZcdTlmOTdcdTlmOThcdTlmOWNcdTlmOWRcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTRcdTlmYTVc'@;
put 'dWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1M11bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMjUzXVttXV09NjQ3NjgrbSxGWzY0NzY4K21dPXhbMjUzXVttXSk7Zm9yKHhbMjU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVm'@;
put 'YTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVmYTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjU0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsy'@;
put 'NTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1NF1bbV1dPTY1MDI0K20sRls2NTAyNCttXT14WzI1NF1bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEllWzk0OV09ZnVuY3Rpb24oKXt2YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVc'@;
put 'eDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZn'@;
put 'aGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2'@;
put 'XHVhYzBiXHVhYzBjXHVhYzBkXHVhYzBlXHVhYzBmXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1XHVhYzI2XHVhYzI3XHVhYzI4XHVhYzI5XHVhYzJhXHVhYzJiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxXHVhYzQyXHVhYzQzXHVhYzQ0XHVhYzQ1XHVhYzQ2XHVhYzQ3XHVhYzQ4XHVhYzQ5XHVhYzRhXHVhYzRjXHVhYzRlXHVhYzRmXHVhYzUwXHVhYzUxXHVhYzUyXHVhYzUzXHVhYzU1XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkXHVhYzVlXHVhYzVmXHVhYzYwXHVhYzYxXHVhYzYyXHVhYzYzXHVhYzY0XHVhYzY1XHVhYzY2XHVhYzY3XHVhYzY4XHVhYzY5XHVhYzZhXHVhYzZiXHVhYzZjXHVhYzZkXHVh'@;
put 'YzZlXHVhYzZmXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiXHVhYzdjXHVhYzdkXHVhYzdlXHVhYzdmXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1XHVhYzk2XHVhYzk3XHVhYzk4XHVhYzk5XHVhYzlhXHVhYzli'@;
put 'XHVhYzllXHVhY2EyXHVhY2EzXHVhY2E0XHVhY2E1XHVhY2E2XHVhY2E3XHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxXHVhY2IyXHVhY2IzXHVhY2I0XHVhY2I1XHVhY2I2XHVhY2I3XHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVh'@;
put 'Y2NhXHVhY2NiXHVhY2NkXHVhY2NlXHVhY2NmXHVhY2QwXHVhY2QxXHVhY2QyXHVhY2QzXHVhY2Q0XHVhY2Q2XHVhY2Q4XHVhY2Q5XHVhY2RhXHVhY2RiXHVhY2RjXHVhY2RkXHVhY2RlXHVhY2RmXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2Yy'@;
put 'XHVhY2Y0XHVhY2Y3XHVhY2Y4XHVhY2Y5XHVhY2ZhXHVhY2ZiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3XHVhZDA4XHVhZDA5XHVhZDBhXHVhZDBiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTI5XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEyOV1bbV1dPTMzMDI0K20sRlszMzAyNCttXT14WzEyOV1bbV0pO2Zvcih4WzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQxNFx1YWQx'@;
put 'NVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQxYVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMVx1YWQyMlx1YWQyM1x1YWQyNFx1YWQyNVx1YWQyNlx1YWQyN1x1YWQyOFx1YWQyYVx1YWQyYlx1YWQyZVx1YWQyZlx1YWQzMFx1YWQzMVx1YWQzMlx1YWQzM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQzNlx1YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZFx1YWQzZVx1YWQzZlx1YWQ0MFx1YWQ0MVx1YWQ0Mlx1YWQ0M1x1YWQ0Nlx1YWQ0OFx1YWQ0YVx1YWQ0Ylx1YWQ0Y1x1YWQ0ZFx1YWQ0ZVx1YWQ0Zlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1'@;
put 'Nlx1YWQ1N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQ1OVx1YWQ1YVx1YWQ1Ylx1YWQ1Y1x1YWQ1ZFx1YWQ1ZVx1YWQ1Zlx1YWQ2MFx1YWQ2Mlx1YWQ2NFx1YWQ2NVx1YWQ2Nlx1YWQ2N1x1YWQ2OFx1YWQ2OVx1YWQ2YVx1YWQ2Ylx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1'@;
put 'YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4M1x1YWQ4NFx1YWQ4NVx1YWQ4Nlx1YWQ4N1x1YWQ4YVx1YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1YWQ5MVx1YWQ5Mlx1YWQ5M1x1YWQ5NFx1YWQ5NVx1YWQ5Nlx1YWQ5N1x1YWQ5OFx1YWQ5OVx1YWQ5YVx1YWQ5'@;
put 'Ylx1YWQ5ZVx1YWQ5Zlx1YWRhMFx1YWRhMVx1YWRhMlx1YWRhM1x1YWRhNVx1YWRhNlx1YWRhN1x1YWRhOFx1YWRhOVx1YWRhYVx1YWRhYlx1YWRhY1x1YWRhZFx1YWRhZVx1YWRhZlx1YWRiMFx1YWRiMVx1YWRiMlx1YWRiM1x1YWRiNFx1YWRiNVx1YWRiNlx1YWRiOFx1YWRiOVx1YWRiYVx1'@;
put 'YWRiYlx1YWRiY1x1YWRiZFx1YWRiZVx1YWRiZlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOVx1YWRjYVx1YWRjYlx1YWRjY1x1YWRjZFx1YWRjZVx1YWRjZlx1YWRkMlx1YWRkNFx1YWRkNVx1YWRkNlx1YWRkN1x1YWRkOFx1YWRkOVx1YWRkYVx1YWRkYlx1YWRkZFx1YWRk'@;
put 'ZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRlM1x1YWRlNVx1YWRlNlx1YWRlN1x1YWRlOFx1YWRlOVx1YWRlYVx1YWRlYlx1YWRlY1x1YWRlZFx1YWRlZVx1YWRlZlx1YWRmMFx1YWRmMVx1YWRmMlx1YWRmM1x1YWRmNFx1YWRmNVx1YWRmNlx1YWRmN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzEzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzBdW21dXT0zMzI4MCttLEZbMzMyODArbV09eFsxMzBdW21dKTtmb3IoeFsxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFl'@;
put 'MzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFc'@;
put 'dWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFl'@;
put 'ODdcdWFlODhcdWFlODlcdWFlOGFcdWFlOGJcdWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNc'@;
put 'dWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdcdWFlYThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFl'@;
put 'YzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFlYzhcdWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMxXVttXV09MzM1MzYrbSxGWzMzNTM2K21dPXhbMTMxXVttXSk7Zm9yKHhbMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlXHVhZWVmXHVhZWYwXHVhZWYxXHVhZWYyXHVhZWYzXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkXHVhZWZlXHVhZWZmXHVhZjAwXHVhZjAxXHVhZjAyXHVhZjAzXHVhZjA0'@;
put 'XHVhZjA1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExXHVhZjEyXHVhZjEzXHVhZjE0XHVhZjE1XHVhZjE2XHVhZjE3XHVhZjE4XHVhZjE5XHVhZjFhXHVhZjFiXHVhZjFjXHVhZjFkXHVh'@;
put 'ZjFlXHVhZjFmXHVhZjIwXHVhZjIxXHVhZjIyXHVhZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjI0XHVhZjI1XHVhZjI2XHVhZjI3XHVhZjI4XHVhZjI5XHVhZjJhXHVhZjJiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1XHVhZjM2XHVhZjM3XHVhZjM4'@;
put 'XHVhZjM5XHVhZjNhXHVhZjNiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhXHVhZjRiXHVhZjRjXHVhZjRkXHVhZjRlXHVhZjRmXHVhZjUxXHVhZjUyXHVhZjUzXHVhZjU0XHVhZjU1XHVhZjU2XHVhZjU3XHVhZjU4XHVhZjU5XHVhZjVhXHVhZjViXHVhZjVlXHVh'@;
put 'ZjVmXHVhZjYwXHVhZjYxXHVhZjYyXHVhZjYzXHVhZjY2XHVhZjY3XHVhZjY4XHVhZjY5XHVhZjZhXHVhZjZiXHVhZjZjXHVhZjZkXHVhZjZlXHVhZjZmXHVhZjcwXHVhZjcxXHVhZjcyXHVhZjczXHVhZjc0XHVhZjc1XHVhZjc2XHVhZjc3XHVhZjc4XHVhZjdhXHVhZjdiXHVhZjdjXHVhZjdk'@;
put 'XHVhZjdlXHVhZjdmXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5XHVhZjhhXHVhZjhiXHVhZjhjXHVhZjhkXHVhZjhlXHVhZjhmXHVhZjkyXHVhZjkzXHVhZjk0XHVhZjk2XHVhZjk3XHVhZjk4XHVhZjk5XHVhZjlhXHVhZjliXHVhZjlkXHVhZjllXHVhZjlmXHVh'@;
put 'ZmEwXHVhZmExXHVhZmEyXHVhZmEzXHVhZmE0XHVhZmE1XHVhZmE2XHVhZmE3XHVhZmE4XHVhZmE5XHVhZmFhXHVhZmFiXHVhZmFjXHVhZmFkXHVhZmFlXHVhZmFmXHVhZmIwXHVhZmIxXHVhZmIyXHVhZmIzXHVhZmI0XHVhZmI1XHVhZmI2XHVhZmI3XHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJl'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMl1bbV1dPTMzNzkyK20sRlszMzc5MittXT14WzEzMl1bbV0pO2Zvcih4WzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZiZlx1YWZjMVx1YWZjMlx1YWZjM1x1YWZjNFx1YWZjNVx1YWZjNlx1YWZjYVx1YWZjY1x1YWZjZlx1YWZkMFx1YWZkMVx1YWZkMlx1YWZkM1x1YWZkNVx1YWZkNlx1YWZkN1x1YWZkOFx1YWZkOVx1YWZkYVx1YWZkYlx1YWZkZFx1YWZk'@;
put 'ZVx1YWZkZlx1YWZlMFx1YWZlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZlMlx1YWZlM1x1YWZlNFx1YWZlNVx1YWZlNlx1YWZlN1x1YWZlYVx1YWZlYlx1YWZlY1x1YWZlZFx1YWZlZVx1YWZlZlx1YWZmMlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOVx1'@;
put 'YWZmYVx1YWZmYlx1YWZmY1x1YWZmZFx1YWZmZVx1YWZmZlx1YjAwMlx1YjAwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjAwNVx1YjAwNlx1YjAwN1x1YjAwOFx1YjAwOVx1YjAwYVx1YjAwYlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAx'@;
put 'NVx1YjAxNlx1YjAxN1x1YjAxOFx1YjAxOVx1YjAxYVx1YjAxYlx1YjAxZVx1YjAxZlx1YjAyMFx1YjAyMVx1YjAyMlx1YjAyM1x1YjAyNFx1YjAyNVx1YjAyNlx1YjAyN1x1YjAyOVx1YjAyYVx1YjAyYlx1YjAyY1x1YjAyZFx1YjAyZVx1YjAyZlx1YjAzMFx1YjAzMVx1YjAzMlx1YjAzM1x1'@;
put 'YjAzNFx1YjAzNVx1YjAzNlx1YjAzN1x1YjAzOFx1YjAzOVx1YjAzYVx1YjAzYlx1YjAzY1x1YjAzZFx1YjAzZVx1YjAzZlx1YjA0MFx1YjA0MVx1YjA0Mlx1YjA0M1x1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1'@;
put 'YVx1YjA1Ylx1YjA1Y1x1YjA1ZVx1YjA1Zlx1YjA2MFx1YjA2MVx1YjA2Mlx1YjA2M1x1YjA2NFx1YjA2NVx1YjA2Nlx1YjA2N1x1YjA2OFx1YjA2OVx1YjA2YVx1YjA2Ylx1YjA2Y1x1YjA2ZFx1YjA2ZVx1YjA2Zlx1YjA3MFx1YjA3MVx1YjA3Mlx1YjA3M1x1YjA3NFx1YjA3NVx1YjA3Nlx1'@;
put 'YjA3N1x1YjA3OFx1YjA3OVx1YjA3YVx1YjA3Ylx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NVx1YjA4Nlx1YjA4N1x1YjA4OFx1YjA4OVx1YjA4YVx1YjA4Ylx1YjA4ZVx1YjA5MFx1YjA5Mlx1YjA5M1x1YjA5NFx1YjA5NVx1YjA5Nlx1YjA5N1x1YjA5Ylx1YjA5ZFx1YjA5'@;
put 'ZVx1YjBhM1x1YjBhNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzNdW21dXT0zNDA0OCttLEZbMzQwNDgrbV09eFsxMzNdW21dKTtmb3IoeFsxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIw'@;
put 'Y2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2ZcdWIwZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZc'@;
put 'dWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIwZWJcdWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIw'@;
put 'ZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBcdWIxMDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZc'@;
put 'dWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmRcdWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIx'@;
put 'NGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZc'@;
put 'dWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIxNzRcdWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIx'@;
put 'OTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM0XVttXV09MzQzMDQrbSxGWzM0MzA0K21dPXhbMTM0XVttXSk7Zm9yKHhbMTM1XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMTllXHViMTlmXHViMWEwXHViMWExXHViMWEyXHViMWEzXHViMWE0XHViMWE1XHViMWE2XHViMWE3XHViMWE5XHViMWFhXHViMWFiXHViMWFjXHViMWFkXHViMWFlXHViMWFmXHViMWIwXHVi'@;
put 'MWIxXHViMWIyXHViMWIzXHViMWI0XHViMWI1XHViMWI2XHViMWI3XHViMWI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWI5XHViMWJhXHViMWJiXHViMWJjXHViMWJkXHViMWJlXHViMWJmXHViMWMwXHViMWMxXHViMWMyXHViMWMzXHViMWM0XHViMWM1XHViMWM2'@;
put 'XHViMWM3XHViMWM4XHViMWM5XHViMWNhXHViMWNiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWQ2XHViMWQ3XHViMWQ4XHViMWQ5XHViMWRhXHViMWRiXHViMWRlXHViMWUwXHViMWUxXHVi'@;
put 'MWUyXHViMWUzXHViMWU0XHViMWU1XHViMWU2XHViMWU3XHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxXHViMWYyXHViMWYzXHViMWY0XHViMWY1XHViMWY2XHViMWY3XHViMWY4XHViMWZhXHViMWZjXHViMWZlXHViMWZmXHViMjAwXHViMjAxXHViMjAyXHViMjAzXHViMjA2'@;
put 'XHViMjA3XHViMjA5XHViMjBhXHViMjBkXHViMjBlXHViMjBmXHViMjEwXHViMjExXHViMjEyXHViMjEzXHViMjE2XHViMjE4XHViMjFhXHViMjFiXHViMjFjXHViMjFkXHViMjFlXHViMjFmXHViMjIxXHViMjIyXHViMjIzXHViMjI0XHViMjI1XHViMjI2XHViMjI3XHViMjI4XHViMjI5XHVi'@;
put 'MjJhXHViMjJiXHViMjJjXHViMjJkXHViMjJlXHViMjJmXHViMjMwXHViMjMxXHViMjMyXHViMjMzXHViMjM1XHViMjM2XHViMjM3XHViMjM4XHViMjM5XHViMjNhXHViMjNiXHViMjNkXHViMjNlXHViMjNmXHViMjQwXHViMjQxXHViMjQyXHViMjQzXHViMjQ0XHViMjQ1XHViMjQ2XHViMjQ3'@;
put 'XHViMjQ4XHViMjQ5XHViMjRhXHViMjRiXHViMjRjXHViMjRkXHViMjRlXHViMjRmXHViMjUwXHViMjUxXHViMjUyXHViMjUzXHViMjU0XHViMjU1XHViMjU2XHViMjU3XHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxXHViMjYyXHViMjYzXHViMjY0XHViMjY1XHVi'@;
put 'MjY2XHViMjY3XHViMjZhXHViMjZiXHViMjZjXHViMjZkXHViMjZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNV1bbV1dPTM0NTYwK20sRlszNDU2MCttXT14WzEzNV1bbV0pO2Zvcih4'@;
put 'WzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI2Zlx1YjI3MFx1YjI3MVx1YjI3Mlx1YjI3M1x1YjI3Nlx1YjI3N1x1YjI3OFx1YjI3OVx1YjI3YVx1YjI3Ylx1YjI3ZFx1YjI3ZVx1YjI3Zlx1YjI4MFx1YjI4MVx1'@;
put 'YjI4Mlx1YjI4M1x1YjI4Nlx1YjI4N1x1YjI4OFx1YjI4YVx1YjI4Ylx1YjI4Y1x1YjI4ZFx1YjI4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI4Zlx1YjI5Mlx1YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5Ylx1YjI5Y1x1YjI5ZFx1YjI5ZVx1YjI5Zlx1YjJh'@;
put 'Mlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJhYlx1YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjJiOFx1YjJiOVx1YjJiYVx1YjJiYlx1YjJiY1x1YjJiZFx1YjJiZVx1'@;
put 'YjJiZlx1YjJjMFx1YjJjMVx1YjJjMlx1YjJjM1x1YjJjNFx1YjJjNVx1YjJjNlx1YjJjN1x1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkM1x1YjJkNFx1YjJkNVx1YjJkNlx1YjJkN1x1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJl'@;
put 'N1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJmMVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOVx1YjMwYVx1YjMwYlx1YjMwY1x1YjMwZFx1YjMwZVx1YjMwZlx1YjMxMlx1YjMxNlx1YjMxN1x1YjMxOFx1YjMxOVx1YjMxYVx1'@;
put 'YjMxYlx1YjMxZFx1YjMxZVx1YjMxZlx1YjMyMFx1YjMyMVx1YjMyMlx1YjMyM1x1YjMyNFx1YjMyNVx1YjMyNlx1YjMyN1x1YjMyOFx1YjMyOVx1YjMyYVx1YjMyYlx1YjMyY1x1YjMyZFx1YjMyZVx1YjMyZlx1YjMzMFx1YjMzMVx1YjMzMlx1YjMzM1x1YjMzNFx1YjMzNVx1YjMzNlx1YjMz'@;
put 'N1x1YjMzOFx1YjMzOVx1YjMzYVx1YjMzYlx1YjMzY1x1YjMzZFx1YjMzZVx1YjMzZlx1YjM0MFx1YjM0MVx1YjM0Mlx1YjM0M1x1YjM0NFx1YjM0NVx1YjM0Nlx1YjM0N1x1YjM0OFx1YjM0OVx1YjM0YVx1YjM0Ylx1YjM0Y1x1YjM0ZFx1YjM0ZVx1YjM0Zlx1YjM1MFx1YjM1MVx1YjM1Mlx1'@;
put 'YjM1M1x1YjM1N1x1YjM1OVx1YjM1YVx1YjM1ZFx1YjM2MFx1YjM2MVx1YjM2Mlx1YjM2M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzZdW21dXT0zNDgxNittLEZbMzQ4MTYrbV09eFsx'@;
put 'MzZdW21dKTtmb3IoeFsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2Jc'@;
put 'dWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJcdWIzODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIz'@;
put 'OTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIzOWVcdWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJc'@;
put 'dWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdcdWIzYjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIz'@;
put 'ZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlc'@;
put 'dWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZcdWI0MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0'@;
put 'MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0Mzlc'@;
put 'dWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2VcdWI0M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM3XVttXV09MzUwNzIrbSxG'@;
put 'WzM1MDcyK21dPXhbMTM3XVttXSk7Zm9yKHhbMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDQ1XHViNDQ2XHViNDQ3XHViNDQ4XHViNDQ5XHViNDRhXHViNDRiXHViNDRjXHViNDRkXHViNDRlXHViNDRmXHViNDUy'@;
put 'XHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5XHViNDVhXHViNDViXHViNDVjXHViNDVkXHViNDVlXHViNDVmXHViNDYyXHViNDY0XHViNDY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDY3XHViNDY4XHViNDY5XHViNDZhXHViNDZiXHViNDZkXHViNDZlXHVi'@;
put 'NDZmXHViNDcwXHViNDcxXHViNDcyXHViNDczXHViNDc0XHViNDc1XHViNDc2XHViNDc3XHViNDc4XHViNDc5XHViNDdhXHViNDdiXHViNDdjXHViNDdkXHViNDdlXHViNDdmXHViNDgxXHViNDgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDgzXHViNDg0XHViNDg1'@;
put 'XHViNDg2XHViNDg3XHViNDg5XHViNDhhXHViNDhiXHViNDhjXHViNDhkXHViNDhlXHViNDhmXHViNDkwXHViNDkxXHViNDkyXHViNDkzXHViNDk0XHViNDk1XHViNDk2XHViNDk3XHViNDk4XHViNDk5XHViNDlhXHViNDliXHViNDljXHViNDllXHViNDlmXHViNGEwXHViNGExXHViNGEyXHVi'@;
put 'NGEzXHViNGE1XHViNGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkXHViNGFlXHViNGFmXHViNGIwXHViNGIxXHViNGIyXHViNGIzXHViNGI0XHViNGI2XHViNGI4XHViNGJhXHViNGJiXHViNGJjXHViNGJkXHViNGJlXHViNGJmXHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2'@;
put 'XHViNGM3XHViNGM5XHViNGNhXHViNGNiXHViNGNjXHViNGNkXHViNGNlXHViNGNmXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2XHViNGQ3XHViNGQ4XHViNGQ5XHViNGRhXHViNGRiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3XHViNGU4XHViNGU5XHViNGVhXHVi'@;
put 'NGViXHViNGVlXHViNGYwXHViNGYyXHViNGYzXHViNGY0XHViNGY1XHViNGY2XHViNGY3XHViNGY5XHViNGZhXHViNGZiXHViNGZjXHViNGZkXHViNGZlXHViNGZmXHViNTAwXHViNTAxXHViNTAyXHViNTAzXHViNTA0XHViNTA1XHViNTA2XHViNTA3XHViNTA4XHViNTA5XHViNTBhXHViNTBi'@;
put 'XHViNTBjXHViNTBkXHViNTBlXHViNTBmXHViNTEwXHViNTExXHViNTEyXHViNTEzXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOF1b'@;
put 'bV1dPTM1MzI4K20sRlszNTMyOCttXT14WzEzOF1bbV0pO2Zvcih4WzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjUxZVx1YjUxZlx1YjUyMFx1YjUyMVx1YjUyMlx1YjUyM1x1YjUyNlx1YjUyYlx1YjUyY1x1YjUy'@;
put 'ZFx1YjUyZVx1YjUyZlx1YjUzMlx1YjUzM1x1YjUzNVx1YjUzNlx1YjUzN1x1YjUzOVx1YjUzYVx1YjUzYlx1YjUzY1x1YjUzZFx1YjUzZVx1YjUzZlx1YjU0Mlx1YjU0Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1'@;
put 'YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1YjU1NVx1YjU1Nlx1YjU1N1x1YjU1OFx1YjU1OVx1YjU1YVx1YjU1Ylx1YjU1ZVx1YjU2Mlx1YjU2M1x1YjU2NFx1YjU2NVx1YjU2Nlx1YjU2N1x1YjU2OFx1YjU2OVx1YjU2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU2'@;
put 'Ylx1YjU2Y1x1YjU2ZFx1YjU2ZVx1YjU2Zlx1YjU3MFx1YjU3MVx1YjU3Mlx1YjU3M1x1YjU3NFx1YjU3NVx1YjU3Nlx1YjU3N1x1YjU3OFx1YjU3OVx1YjU3YVx1YjU3Ylx1YjU3Y1x1YjU3ZFx1YjU3ZVx1YjU3Zlx1YjU4MFx1YjU4MVx1YjU4Mlx1YjU4M1x1YjU4NFx1YjU4NVx1YjU4Nlx1'@;
put 'YjU4N1x1YjU4OFx1YjU4OVx1YjU4YVx1YjU4Ylx1YjU4Y1x1YjU4ZFx1YjU4ZVx1YjU4Zlx1YjU5MFx1YjU5MVx1YjU5Mlx1YjU5M1x1YjU5NFx1YjU5NVx1YjU5Nlx1YjU5N1x1YjU5OFx1YjU5OVx1YjU5YVx1YjU5Ylx1YjU5Y1x1YjU5ZFx1YjU5ZVx1YjU5Zlx1YjVhMlx1YjVhM1x1YjVh'@;
put 'NVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVhY1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNlx1YjViN1x1YjViOFx1YjViOVx1YjViYVx1YjViZVx1YjViZlx1YjVjMVx1YjVjMlx1YjVjM1x1YjVjNVx1YjVjNlx1YjVjN1x1YjVjOFx1YjVjOVx1YjVjYVx1YjVjYlx1YjVjZVx1YjVkMlx1'@;
put 'YjVkM1x1YjVkNFx1YjVkNVx1YjVkNlx1YjVkN1x1YjVkOVx1YjVkYVx1YjVkYlx1YjVkY1x1YjVkZFx1YjVkZVx1YjVkZlx1YjVlMFx1YjVlMVx1YjVlMlx1YjVlM1x1YjVlNFx1YjVlNVx1YjVlNlx1YjVlN1x1YjVlOFx1YjVlOVx1YjVlYVx1YjVlYlx1YjVlZFx1YjVlZVx1YjVlZlx1YjVm'@;
put 'MFx1YjVmMVx1YjVmMlx1YjVmM1x1YjVmNFx1YjVmNVx1YjVmNlx1YjVmN1x1YjVmOFx1YjVmOVx1YjVmYVx1YjVmYlx1YjVmY1x1YjVmZFx1YjVmZVx1YjVmZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM5XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxMzldW21dXT0zNTU4NCttLEZbMzU1ODQrbV09eFsxMzldW21dKTtmb3IoeFsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2'@;
put 'MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNcdWI2MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBc'@;
put 'dWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2MjdcdWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2VcdWI2M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVc'@;
put 'dWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2NWJcdWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2'@;
put 'NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2NzhcdWI2NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVc'@;
put 'dWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2OTRcdWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2'@;
put 'YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZcdWI2YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MF1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTQwXVttXV09MzU4NDArbSxGWzM1ODQwK21dPXhbMTQwXVttXSk7Zm9yKHhbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmMzXHViNmM0XHViNmM1XHViNmM2XHViNmM3XHVi'@;
put 'NmM4XHViNmM5XHViNmNhXHViNmNiXHViNmNjXHViNmNkXHViNmNlXHViNmNmXHViNmQwXHViNmQxXHViNmQyXHViNmQzXHViNmQ1XHViNmQ2XHViNmQ3XHViNmQ4XHViNmQ5XHViNmRhXHViNmRiXHViNmRjXHViNmRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmRl'@;
put 'XHViNmRmXHViNmUwXHViNmUxXHViNmUyXHViNmUzXHViNmU0XHViNmU1XHViNmU2XHViNmU3XHViNmU4XHViNmU5XHViNmVhXHViNmViXHViNmVjXHViNmVkXHViNmVlXHViNmVmXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmZiXHViNmZjXHViNmZkXHViNmZlXHViNmZmXHViNzAyXHViNzAzXHViNzA0XHViNzA2XHViNzA3XHViNzA4XHViNzA5XHViNzBhXHViNzBiXHViNzBjXHViNzBkXHViNzBlXHViNzBmXHViNzEwXHViNzExXHViNzEyXHViNzEzXHViNzE0XHViNzE1'@;
put 'XHViNzE2XHViNzE3XHViNzE4XHViNzE5XHViNzFhXHViNzFiXHViNzFjXHViNzFkXHViNzFlXHViNzFmXHViNzIwXHViNzIxXHViNzIyXHViNzIzXHViNzI0XHViNzI1XHViNzI2XHViNzI3XHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMxXHViNzMyXHViNzMzXHViNzM0XHViNzM1XHVi'@;
put 'NzM2XHViNzM3XHViNzNhXHViNzNjXHViNzNkXHViNzNlXHViNzNmXHViNzQwXHViNzQxXHViNzQyXHViNzQzXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkXHViNzRlXHViNzRmXHViNzUwXHViNzUxXHViNzUyXHViNzUzXHViNzU2XHViNzU3XHViNzU4XHViNzU5'@;
put 'XHViNzVhXHViNzViXHViNzVjXHViNzVkXHViNzVlXHViNzVmXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5XHViNzZhXHViNzZiXHViNzZjXHViNzZkXHViNzZlXHViNzZmXHViNzcyXHViNzc0XHViNzc2XHViNzc3XHViNzc4XHViNzc5XHViNzdhXHViNzdiXHVi'@;
put 'NzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1XHViNzg2XHViNzg3XHViNzg4XHViNzg5XHViNzhhXHViNzhiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQxXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MV1bbV1dPTM2MDk2K20sRlszNjA5NittXT14WzE0MV1bbV0pO2Zvcih4WzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjc5Zlx1YjdhMVx1YjdhMlx1'@;
put 'YjdhM1x1YjdhNFx1YjdhNVx1YjdhNlx1YjdhN1x1YjdhYVx1YjdhZVx1YjdhZlx1YjdiMFx1YjdiMVx1YjdiMlx1YjdiM1x1YjdiNlx1YjdiN1x1YjdiOVx1YjdiYVx1YjdiYlx1YjdiY1x1YjdiZFx1YjdiZVx1YjdiZlx1YjdjMFx1YjdjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1YjdjMlx1YjdjM1x1YjdjNFx1YjdjNVx1YjdjNlx1YjdjOFx1YjdjYVx1YjdjYlx1YjdjY1x1YjdjZFx1YjdjZVx1YjdjZlx1YjdkMFx1YjdkMVx1YjdkMlx1YjdkM1x1YjdkNFx1YjdkNVx1YjdkNlx1YjdkN1x1YjdkOFx1YjdkOVx1YjdkYVx1YjdkYlx1YjdkY1x1YjdkZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdkZVx1YjdkZlx1YjdlMFx1YjdlMVx1YjdlMlx1YjdlM1x1YjdlNFx1YjdlNVx1YjdlNlx1YjdlN1x1YjdlOFx1YjdlOVx1YjdlYVx1YjdlYlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNVx1YjdmNlx1Yjdm'@;
put 'N1x1YjdmOFx1YjdmOVx1YjdmYVx1YjdmYlx1YjdmZVx1YjgwMlx1YjgwM1x1YjgwNFx1YjgwNVx1YjgwNlx1YjgwYVx1YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMVx1YjgxMlx1YjgxM1x1YjgxNFx1YjgxNVx1YjgxNlx1YjgxN1x1YjgxYVx1YjgxY1x1YjgxZVx1YjgxZlx1YjgyMFx1'@;
put 'YjgyMVx1YjgyMlx1YjgyM1x1YjgyNlx1YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZFx1YjgyZVx1YjgyZlx1YjgzMFx1YjgzMVx1YjgzMlx1YjgzM1x1YjgzNlx1YjgzYVx1YjgzYlx1YjgzY1x1YjgzZFx1YjgzZVx1YjgzZlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NVx1Yjg0Nlx1Yjg0'@;
put 'N1x1Yjg0OFx1Yjg0OVx1Yjg0YVx1Yjg0Ylx1Yjg0Y1x1Yjg0ZFx1Yjg0ZVx1Yjg0Zlx1Yjg1MFx1Yjg1Mlx1Yjg1NFx1Yjg1NVx1Yjg1Nlx1Yjg1N1x1Yjg1OFx1Yjg1OVx1Yjg1YVx1Yjg1Ylx1Yjg1ZVx1Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NVx1Yjg2Nlx1Yjg2N1x1Yjg2OFx1'@;
put 'Yjg2OVx1Yjg2YVx1Yjg2Ylx1Yjg2ZVx1Yjg3MFx1Yjg3Mlx1Yjg3M1x1Yjg3NFx1Yjg3NVx1Yjg3Nlx1Yjg3N1x1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZFx1Yjg3ZVx1Yjg3Zlx1Yjg4MFx1Yjg4MVx1Yjg4Mlx1Yjg4M1x1Yjg4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Ml0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDJdW21dXT0zNjM1MittLEZbMzYzNTIrbV09eFsxNDJdW21dKTtmb3IoeFsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVc'@;
put 'dWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJcdWI4OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4YTJcdWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJc'@;
put 'dWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4'@;
put 'ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4ZTBcdWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVc'@;
put 'dWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVcdWI5MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5'@;
put 'MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5MjNcdWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5Mzhc'@;
put 'dWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQzXVttXV09MzY2MDgrbSxGWzM2NjA4K21dPXhbMTQzXVttXSk7Zm9yKHhbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxXHViOTYyXHViOTYzXHViOTY0XHViOTY1XHViOTY2XHViOTY3XHViOTZhXHViOTZjXHViOTZlXHViOTZmXHViOTcwXHViOTcxXHViOTcyXHViOTczXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTdlXHViOTdmXHViOTgwXHViOTgxXHViOTgyXHViOTgzXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmXHViOTkwXHViOTkxXHViOTkyXHViOTkzXHViOTk0XHViOTk1XHViOTk2XHViOTk3XHViOTk4XHViOTk5XHViOTlh'@;
put 'XHViOTliXHViOTljXHViOTlkXHViOTllXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTlmXHViOWEwXHViOWExXHViOWEyXHViOWEzXHViOWE0XHViOWE1XHViOWE2XHViOWE3XHViOWE4XHViOWE5XHViOWFhXHViOWFiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHVi'@;
put 'OWIzXHViOWI1XHViOWI2XHViOWI3XHViOWI4XHViOWI5XHViOWJhXHViOWJiXHViOWJlXHViOWMwXHViOWMyXHViOWMzXHViOWM0XHViOWM1XHViOWM2XHViOWM3XHViOWNhXHViOWNiXHViOWNkXHViOWQzXHViOWQ0XHViOWQ1XHViOWQ2XHViOWQ3XHViOWRhXHViOWRjXHViOWRmXHViOWUw'@;
put 'XHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkXHViOWVlXHViOWVmXHViOWYwXHViOWYxXHViOWYyXHViOWYzXHViOWY2XHViOWZiXHViOWZjXHViOWZkXHViOWZlXHViOWZmXHViYTAyXHViYTAzXHViYTA0XHViYTA1XHViYTA2XHViYTA3XHViYTA5XHViYTBhXHVi'@;
put 'YTBiXHViYTBjXHViYTBkXHViYTBlXHViYTBmXHViYTEwXHViYTExXHViYTEyXHViYTEzXHViYTE0XHViYTE2XHViYTE3XHViYTE4XHViYTE5XHViYTFhXHViYTFiXHViYTFjXHViYTFkXHViYTFlXHViYTFmXHViYTIwXHViYTIxXHViYTIyXHViYTIzXHViYTI0XHViYTI1XHViYTI2XHViYTI3'@;
put 'XHViYTI4XHViYTI5XHViYTJhXHViYTJiXHViYTJjXHViYTJkXHViYTJlXHViYTJmXHViYTMwXHViYTMxXHViYTMyXHViYTMzXHViYTM0XHViYTM1XHViYTM2XHViYTM3XHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NF1bbV1dPTM2ODY0K20sRlszNjg2NCttXT14WzE0NF1bbV0pO2Zvcih4WzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE0N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZFx1YmE1ZVx1YmE1Zlx1YmE2MFx1YmE2MVx1YmE2Mlx1YmE2M1x1YmE2Nlx1YmE2YVx1YmE2Ylx1YmE2Y1x1YmE2ZFx1'@;
put 'YmE2ZVx1YmE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OVx1YmE3YVx1YmE3Ylx1YmE3Y1x1YmE3ZFx1YmE3ZVx1YmE3Zlx1YmE4MFx1YmE4MVx1YmE4Mlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4'@;
put 'Ylx1YmE4ZFx1YmE4ZVx1YmE4Zlx1YmE5MFx1YmE5MVx1YmE5Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE5M1x1YmE5NFx1YmE5NVx1YmE5Nlx1YmE5N1x1YmE5OFx1YmE5OVx1YmE5YVx1YmE5Ylx1YmE5Y1x1YmE5ZFx1YmE5ZVx1YmE5Zlx1YmFhMFx1YmFhMVx1'@;
put 'YmFhMlx1YmFhM1x1YmFhNFx1YmFhNVx1YmFhNlx1YmFhN1x1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiM1x1YmFiNFx1YmFiNVx1YmFiNlx1YmFiN1x1YmFiYVx1YmFiY1x1YmFiZVx1YmFiZlx1YmFjMFx1YmFjMVx1YmFjMlx1YmFjM1x1YmFjNVx1YmFjNlx1YmFjN1x1YmFj'@;
put 'OVx1YmFjYVx1YmFjYlx1YmFjY1x1YmFjZFx1YmFjZVx1YmFjZlx1YmFkMFx1YmFkMVx1YmFkMlx1YmFkM1x1YmFkNFx1YmFkNVx1YmFkNlx1YmFkN1x1YmFkYVx1YmFkYlx1YmFkY1x1YmFkZFx1YmFkZVx1YmFkZlx1YmFlMFx1YmFlMVx1YmFlMlx1YmFlM1x1YmFlNFx1YmFlNVx1YmFlNlx1'@;
put 'YmFlN1x1YmFlOFx1YmFlOVx1YmFlYVx1YmFlYlx1YmFlY1x1YmFlZFx1YmFlZVx1YmFlZlx1YmFmMFx1YmFmMVx1YmFmMlx1YmFmM1x1YmFmNFx1YmFmNVx1YmFmNlx1YmFmN1x1YmFmOFx1YmFmOVx1YmFmYVx1YmFmYlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIw'@;
put 'NVx1YmIwNlx1YmIwN1x1YmIwOFx1YmIwOVx1YmIwYVx1YmIwYlx1YmIwY1x1YmIwZVx1YmIxMFx1YmIxMlx1YmIxM1x1YmIxNFx1YmIxNVx1YmIxNlx1YmIxN1x1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1YmIxZVx1YmIxZlx1YmIyMVx1YmIyMlx1YmIyM1x1YmIyNFx1YmIyNVx1YmIyNlx1'@;
put 'YmIyN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDVdW21dXT0zNzEyMCttLEZbMzcxMjArbV09eFsxNDVdW21dKTtmb3IoeFsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhcdWJiMmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJc'@;
put 'dWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJi'@;
put 'NjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZcdWJiNzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2Vc'@;
put 'dWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJiODVcdWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJi'@;
put 'OWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRc'@;
put 'dWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJi'@;
put 'ZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRcdWJiZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJc'@;
put 'dWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ2XVttXV09MzczNzYrbSxGWzM3Mzc2K21dPXhbMTQ2XVttXSk7Zm9yKHhbMTQ3XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzAzXHViYzA0XHViYzA1XHViYzA2XHViYzA3XHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJi'@;
put 'XHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzM2XHViYzM3XHViYzM5XHViYzNhXHViYzNiXHViYzNjXHViYzNkXHViYzNlXHViYzNmXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHVi'@;
put 'YzRlXHViYzRmXHViYzUxXHViYzUyXHViYzUzXHViYzU0XHViYzU1XHViYzU2XHViYzU3XHViYzU4XHViYzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzVhXHViYzViXHViYzVjXHViYzVlXHViYzVmXHViYzYwXHViYzYxXHViYzYyXHViYzYzXHViYzY0XHViYzY1'@;
put 'XHViYzY2XHViYzY3XHViYzY4XHViYzY5XHViYzZhXHViYzZiXHViYzZjXHViYzZkXHViYzZlXHViYzZmXHViYzcwXHViYzcxXHViYzcyXHViYzczXHViYzc0XHViYzc1XHViYzc2XHViYzc3XHViYzc4XHViYzc5XHViYzdhXHViYzdiXHViYzdjXHViYzdkXHViYzdlXHViYzdmXHViYzgwXHVi'@;
put 'YzgxXHViYzgyXHViYzgzXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmXHViYzkwXHViYzkxXHViYzkyXHViYzkzXHViYzk2XHViYzk4XHViYzliXHViYzljXHViYzlkXHViYzllXHViYzlmXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5XHViY2FhXHViY2FiXHViY2Fj'@;
put 'XHViY2FkXHViY2FlXHViY2FmXHViY2IyXHViY2I2XHViY2I3XHViY2I4XHViY2I5XHViY2JhXHViY2JiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1XHViY2M2XHViY2M3XHViY2M4XHViY2M5XHViY2NhXHViY2NiXHViY2NjXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHVi'@;
put 'Y2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkXHViY2RlXHViY2RmXHViY2UwXHViY2UxXHViY2UyXHViY2UzXHViY2U0XHViY2U1XHViY2U2XHViY2U3XHViY2U4XHViY2U5XHViY2VhXHViY2ViXHViY2VjXHViY2VkXHViY2VlXHViY2VmXHViY2YwXHViY2YxXHViY2YyXHViY2Yz'@;
put 'XHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0N11bbV1dPTM3NjMyK20sRlszNzYzMittXT14WzE0N11bbV0pO2Zvcih4WzE0OF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmNmZVx1YmNmZlx1YmQwMFx1YmQwMVx1YmQwMlx1YmQwM1x1YmQwNlx1YmQwOFx1YmQwYVx1YmQwYlx1YmQwY1x1YmQwZFx1YmQwZVx1YmQwZlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQx'@;
put 'NVx1YmQxNlx1YmQxN1x1YmQxOFx1YmQxOVx1YmQxYVx1YmQxYlx1YmQxY1x1YmQxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQxZVx1YmQxZlx1YmQyMFx1YmQyMVx1YmQyMlx1YmQyM1x1YmQyNVx1YmQyNlx1YmQyN1x1YmQyOFx1YmQyOVx1YmQyYVx1YmQyYlx1'@;
put 'YmQyZFx1YmQyZVx1YmQyZlx1YmQzMFx1YmQzMVx1YmQzMlx1YmQzM1x1YmQzNFx1YmQzNVx1YmQzNlx1YmQzN1x1YmQzOFx1YmQzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQzYVx1YmQzYlx1YmQzY1x1YmQzZFx1YmQzZVx1YmQzZlx1YmQ0MVx1YmQ0Mlx1YmQ0'@;
put 'M1x1YmQ0NFx1YmQ0NVx1YmQ0Nlx1YmQ0N1x1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1MVx1YmQ1Mlx1YmQ1M1x1YmQ1NFx1YmQ1NVx1YmQ1Nlx1YmQ1N1x1YmQ1YVx1YmQ1Ylx1YmQ1Y1x1YmQ1ZFx1YmQ1ZVx1YmQ1Zlx1YmQ2MFx1YmQ2MVx1YmQ2Mlx1YmQ2M1x1YmQ2NVx1'@;
put 'YmQ2Nlx1YmQ2N1x1YmQ2OVx1YmQ2YVx1YmQ2Ylx1YmQ2Y1x1YmQ2ZFx1YmQ2ZVx1YmQ2Zlx1YmQ3MFx1YmQ3MVx1YmQ3Mlx1YmQ3M1x1YmQ3NFx1YmQ3NVx1YmQ3Nlx1YmQ3N1x1YmQ3OFx1YmQ3OVx1YmQ3YVx1YmQ3Ylx1YmQ3Y1x1YmQ3ZFx1YmQ3ZVx1YmQ3Zlx1YmQ4Mlx1YmQ4M1x1YmQ4'@;
put 'NVx1YmQ4Nlx1YmQ4Ylx1YmQ4Y1x1YmQ4ZFx1YmQ4ZVx1YmQ4Zlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZFx1YmQ5ZVx1YmQ5Zlx1YmRhMFx1YmRhMVx1YmRhMlx1YmRhM1x1YmRhNVx1YmRhNlx1YmRhN1x1YmRhOFx1YmRhOVx1YmRhYVx1YmRhYlx1YmRhY1x1'@;
put 'YmRhZFx1YmRhZVx1YmRhZlx1YmRiMVx1YmRiMlx1YmRiM1x1YmRiNFx1YmRiNVx1YmRiNlx1YmRiN1x1YmRiOVx1YmRiYVx1YmRiYlx1YmRiY1x1YmRiZFx1YmRiZVx1YmRiZlx1YmRjMFx1YmRjMVx1YmRjMlx1YmRjM1x1YmRjNFx1YmRjNVx1YmRjNlx1YmRjN1x1YmRjOFx1YmRjOVx1YmRj'@;
put 'YVx1YmRjYlx1YmRjY1x1YmRjZFx1YmRjZVx1YmRjZlx1YmRkMFx1YmRkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDhdW21dXT0zNzg4OCttLEZbMzc4ODgrbV09eFsxNDhdW21dKTtm'@;
put 'b3IoeFsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJk'@;
put 'ZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJkZWRcdWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVc'@;
put 'dWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhcdWJlMDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJl'@;
put 'MWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJlMjVcdWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlc'@;
put 'dWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBcdWJlNDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJl'@;
put 'NjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJlNmNcdWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFc'@;
put 'dWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZcdWJlOTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJl'@;
put 'YWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJlYjVcdWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ5XVttXV09MzgxNDQrbSxGWzM4MTQ0K21d'@;
put 'PXhbMTQ5XVttXSk7Zm9yKHhbMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWI4XHViZWI5XHViZWJhXHViZWJiXHViZWJjXHViZWJkXHViZWJlXHViZWJmXHViZWMwXHViZWMxXHViZWMyXHViZWMzXHViZWM0XHVi'@;
put 'ZWM1XHViZWM2XHViZWM3XHViZWM4XHViZWM5XHViZWNhXHViZWNiXHViZWNjXHViZWNkXHViZWNlXHViZWNmXHViZWQyXHViZWQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWQ1XHViZWQ2XHViZWQ5XHViZWRhXHViZWRiXHViZWRjXHViZWRkXHViZWRlXHViZWRm'@;
put 'XHViZWUxXHViZWUyXHViZWU2XHViZWU3XHViZWU4XHViZWU5XHViZWVhXHViZWViXHViZWVkXHViZWVlXHViZWVmXHViZWYwXHViZWYxXHViZWYyXHViZWYzXHViZWY0XHViZWY1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWY2XHViZWY3XHViZWY4XHViZWY5XHVi'@;
put 'ZWZhXHViZWZiXHViZWZjXHViZWZkXHViZWZlXHViZWZmXHViZjAwXHViZjAyXHViZjAzXHViZjA0XHViZjA1XHViZjA2XHViZjA3XHViZjBhXHViZjBiXHViZjBjXHViZjBkXHViZjBlXHViZjBmXHViZjEwXHViZjExXHViZjEyXHViZjEzXHViZjE0XHViZjE1XHViZjE2XHViZjE3XHViZjFh'@;
put 'XHViZjFlXHViZjFmXHViZjIwXHViZjIxXHViZjIyXHViZjIzXHViZjI0XHViZjI1XHViZjI2XHViZjI3XHViZjI4XHViZjI5XHViZjJhXHViZjJiXHViZjJjXHViZjJkXHViZjJlXHViZjJmXHViZjMwXHViZjMxXHViZjMyXHViZjMzXHViZjM0XHViZjM1XHViZjM2XHViZjM3XHViZjM4XHVi'@;
put 'ZjM5XHViZjNhXHViZjNiXHViZjNjXHViZjNkXHViZjNlXHViZjNmXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5XHViZjRhXHViZjRiXHViZjRjXHViZjRkXHViZjRlXHViZjRmXHViZjUyXHViZjUzXHViZjU0XHViZjU2XHViZjU3XHViZjU4XHViZjU5XHViZjVhXHViZjVi'@;
put 'XHViZjVjXHViZjVkXHViZjVlXHViZjVmXHViZjYwXHViZjYxXHViZjYyXHViZjYzXHViZjY0XHViZjY1XHViZjY2XHViZjY3XHViZjY4XHViZjY5XHViZjZhXHViZjZiXHViZjZjXHViZjZkXHViZjZlXHViZjZmXHViZjcwXHViZjcxXHViZjcyXHViZjczXHViZjc0XHViZjc1XHViZjc2XHVi'@;
put 'Zjc3XHViZjc4XHViZjc5XHViZjdhXHViZjdiXHViZjdjXHViZjdkXHViZjdlXHViZjdmXHViZjgwXHViZjgxXHViZjgyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MF1bbV1dPTM4NDAw'@;
put 'K20sRlszODQwMCttXT14WzE1MF1bbV0pO2Zvcih4WzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY4M1x1YmY4NFx1YmY4NVx1YmY4Nlx1YmY4N1x1YmY4OFx1YmY4OVx1YmY4YVx1YmY4Ylx1YmY4Y1x1YmY4ZFx1'@;
put 'YmY4ZVx1YmY4Zlx1YmY5MFx1YmY5MVx1YmY5Mlx1YmY5M1x1YmY5NVx1YmY5Nlx1YmY5N1x1YmY5OFx1YmY5OVx1YmY5YVx1YmY5Ylx1YmY5Y1x1YmY5ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY5ZVx1YmY5Zlx1YmZhMFx1YmZhMVx1YmZhMlx1YmZhM1x1YmZh'@;
put 'NFx1YmZhNVx1YmZhNlx1YmZhN1x1YmZhOFx1YmZhOVx1YmZhYVx1YmZhYlx1YmZhY1x1YmZhZFx1YmZhZVx1YmZhZlx1YmZiMVx1YmZiMlx1YmZiM1x1YmZiNFx1YmZiNVx1YmZiNlx1YmZiN1x1YmZiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmZiOVx1YmZiYVx1'@;
put 'YmZiYlx1YmZiY1x1YmZiZFx1YmZiZVx1YmZiZlx1YmZjMFx1YmZjMVx1YmZjMlx1YmZjM1x1YmZjNFx1YmZjNlx1YmZjN1x1YmZjOFx1YmZjOVx1YmZjYVx1YmZjYlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZkM1x1YmZkNVx1YmZkNlx1YmZkN1x1YmZkOFx1YmZkOVx1YmZkYVx1YmZk'@;
put 'Ylx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMlx1YmZlM1x1YmZlNFx1YmZlNVx1YmZlNlx1YmZlN1x1YmZlOFx1YmZlOVx1YmZlYVx1YmZlYlx1YmZlY1x1YmZlZFx1YmZlZVx1YmZlZlx1YmZmMFx1YmZmMVx1YmZmMlx1YmZmM1x1YmZmNFx1YmZmNVx1YmZmNlx1YmZmN1x1YmZmOFx1YmZmOVx1'@;
put 'YmZmYVx1YmZmYlx1YmZmY1x1YmZmZFx1YmZmZVx1YmZmZlx1YzAwMFx1YzAwMVx1YzAwMlx1YzAwM1x1YzAwNFx1YzAwNVx1YzAwNlx1YzAwN1x1YzAwOFx1YzAwOVx1YzAwYVx1YzAwYlx1YzAwY1x1YzAwZFx1YzAwZVx1YzAwZlx1YzAxMFx1YzAxMVx1YzAxMlx1YzAxM1x1YzAxNFx1YzAx'@;
put 'NVx1YzAxNlx1YzAxN1x1YzAxOFx1YzAxOVx1YzAxYVx1YzAxYlx1YzAxY1x1YzAxZFx1YzAxZVx1YzAxZlx1YzAyMFx1YzAyMVx1YzAyMlx1YzAyM1x1YzAyNFx1YzAyNVx1YzAyNlx1YzAyN1x1YzAyOFx1YzAyOVx1YzAyYVx1YzAyYlx1YzAyY1x1YzAyZFx1YzAyZVx1YzAyZlx1YzAzMFx1'@;
put 'YzAzMVx1YzAzMlx1YzAzM1x1YzAzNFx1YzAzNVx1YzAzNlx1YzAzN1x1YzAzOFx1YzAzOVx1YzAzYVx1YzAzYlx1YzAzZFx1YzAzZVx1YzAzZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'NTFdW21dXT0zODY1NittLEZbMzg2NTYrbV09eFsxNTFdW21dKTtmb3IoeFsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhc'@;
put 'dWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBcdWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMw'@;
put 'NjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMwNmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMwODFcdWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMw'@;
put 'OTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMwYTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZc'@;
put 'dWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJcdWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMw'@;
put 'ZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMwZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJc'@;
put 'dWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMxMWJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1Ml1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTUyXVttXV09Mzg5MTIrbSxGWzM4OTEyK21dPXhbMTUyXVttXSk7Zm9yKHhbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNi'@;
put 'XHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxXHVjMTQyXHVjMTQzXHVjMTQ0XHVjMTQ1XHVjMTQ2XHVjMTQ3XHVjMTRhXHVjMTRlXHVjMTRmXHVjMTUwXHVjMTUxXHVjMTUyXHVjMTUzXHVjMTU2XHVjMTU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTU5XHVjMTVhXHVj'@;
put 'MTViXHVjMTVkXHVjMTVlXHVjMTVmXHVjMTYwXHVjMTYxXHVjMTYyXHVjMTYzXHVjMTY2XHVjMTZhXHVjMTZiXHVjMTZjXHVjMTZkXHVjMTZlXHVjMTZmXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVjMTdjXHVjMTdkXHVjMTdlXHVjMTdmXHVjMTgwXHVjMTgxXHVjMTgyXHVjMTgzXHVjMTg0XHVjMTg2XHVjMTg3XHVjMTg4XHVjMTg5XHVjMThhXHVjMThiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3XHVjMTk4XHVjMTk5XHVjMTlhXHVjMTliXHVj'@;
put 'MTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxXHVjMWIyXHVjMWIzXHVjMWI0XHVjMWI1XHVjMWI2XHVjMWI3XHVjMWI4XHVjMWI5XHVjMWJhXHVjMWJiXHVjMWJjXHVjMWJlXHVjMWJmXHVjMWMwXHVjMWMx'@;
put 'XHVjMWMyXHVjMWMzXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkXHVjMWNlXHVjMWNmXHVjMWQwXHVjMWQxXHVjMWQyXHVjMWQzXHVjMWQ1XHVjMWQ2XHVjMWQ5XHVjMWRhXHVjMWRiXHVjMWRjXHVjMWRkXHVjMWRlXHVjMWRmXHVjMWUxXHVjMWUyXHVjMWUzXHVj'@;
put 'MWU1XHVjMWU2XHVjMWU3XHVjMWU5XHVjMWVhXHVjMWViXHVjMWVjXHVjMWVkXHVjMWVlXHVjMWVmXHVjMWYyXHVjMWY0XHVjMWY1XHVjMWY2XHVjMWY3XHVjMWY4XHVjMWY5XHVjMWZhXHVjMWZiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1XHVjMjA2XHVjMjA3XHVjMjA4'@;
put 'XHVjMjA5XHVjMjBhXHVjMjBiXHVjMjBlXHVjMjEwXHVjMjEyXHVjMjEzXHVjMjE0XHVjMjE1XHVjMjE2XHVjMjE3XHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTNd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1M11bbV1dPTM5MTY4K20sRlszOTE2OCttXT14WzE1M11bbV0pO2Zvcih4WzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIy'@;
put 'YVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNVx1YzIzNlx1YzIzN1x1YzIzOFx1YzIzOVx1YzIzYVx1YzIzYlx1YzIzY1x1YzIzZFx1YzIzZVx1YzIzZlx1YzI0MFx1YzI0MVx1YzI0Mlx1YzI0M1x1YzI0NFx1YzI0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'YzI0Nlx1YzI0N1x1YzI0OVx1YzI0YVx1YzI0Ylx1YzI0Y1x1YzI0ZFx1YzI0ZVx1YzI0Zlx1YzI1Mlx1YzI1M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OVx1YzI1YVx1YzI1Ylx1YzI1Y1x1YzI1ZFx1YzI1ZVx1YzI1Zlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2Nlx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI2N1x1YzI2OFx1YzI2OVx1YzI2YVx1YzI2Ylx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NVx1YzI3Nlx1YzI3N1x1YzI3OFx1YzI3OVx1YzI3YVx1YzI3Ylx1YzI3ZVx1YzI4MFx1YzI4Mlx1YzI4M1x1YzI4NFx1YzI4NVx1'@;
put 'YzI4Nlx1YzI4N1x1YzI4YVx1YzI4Ylx1YzI4Y1x1YzI4ZFx1YzI4ZVx1YzI4Zlx1YzI5MVx1YzI5Mlx1YzI5M1x1YzI5NFx1YzI5NVx1YzI5Nlx1YzI5N1x1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZVx1YzI5Zlx1YzJhMFx1YzJhMVx1YzJhMlx1YzJhM1x1YzJhNlx1YzJhN1x1YzJhOVx1YzJh'@;
put 'YVx1YzJhYlx1YzJhZVx1YzJhZlx1YzJiMFx1YzJiMVx1YzJiMlx1YzJiM1x1YzJiNlx1YzJiOFx1YzJiYVx1YzJiYlx1YzJiY1x1YzJiZFx1YzJiZVx1YzJiZlx1YzJjMFx1YzJjMVx1YzJjMlx1YzJjM1x1YzJjNFx1YzJjNVx1YzJjNlx1YzJjN1x1YzJjOFx1YzJjOVx1YzJjYVx1YzJjYlx1'@;
put 'YzJjY1x1YzJjZFx1YzJjZVx1YzJjZlx1YzJkMFx1YzJkMVx1YzJkMlx1YzJkM1x1YzJkNFx1YzJkNVx1YzJkNlx1YzJkN1x1YzJkOFx1YzJkOVx1YzJkYVx1YzJkYlx1YzJkZVx1YzJkZlx1YzJlMVx1YzJlMlx1YzJlNVx1YzJlNlx1YzJlN1x1YzJlOFx1YzJlOVx1YzJlYVx1YzJlZVx1YzJm'@;
put 'MFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJmNVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJmZlx1YzMwMVx1YzMwMlx1YzMwM1x1YzMwNFx1YzMwNVx1YzMwNlx1YzMwN1x1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NF0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTU0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTRdW21dXT0zOTQyNCttLEZbMzk0MjQrbV09eFsxNTRdW21dKTtmb3IoeFsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMz'@;
put 'MTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZcdWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMzMzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMz'@;
put 'NGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZcdWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJc'@;
put 'dWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMz'@;
put 'ODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJcdWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVc'@;
put 'dWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMzYWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMz'@;
put 'YzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2FcdWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTVd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU1XVttXV09Mzk2ODArbSxGWzM5NjgwK21dPXhbMTU1XVttXSk7Zm9yKHhbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVj'@;
put 'M2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzXHVjM2U0XHVjM2U1XHVjM2U2XHVjM2U3XHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlXHVjM2VmXHVjM2YwXHVjM2YxXHVjM2YyXHVjM2YzXHVjM2Y2XHVjM2Y3XHVjM2Y5XHVjM2ZhXHVjM2ZiXHVjM2ZjXHVjM2ZkXHVjM2ZlXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2ZmXHVjNDAwXHVjNDAxXHVjNDAyXHVjNDAzXHVjNDA0XHVjNDA1XHVjNDA2XHVjNDA3XHVjNDA5XHVjNDBhXHVjNDBiXHVjNDBjXHVjNDBkXHVjNDBlXHVjNDBmXHVjNDExXHVjNDEyXHVjNDEzXHVjNDE0XHVjNDE1XHVjNDE2XHVjNDE3XHVj'@;
put 'NDE4XHVjNDE5XHVjNDFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNDFiXHVjNDFjXHVjNDFkXHVjNDFlXHVjNDFmXHVjNDIwXHVjNDIxXHVjNDIyXHVjNDIzXHVjNDI1XHVjNDI2XHVjNDI3XHVjNDI4XHVjNDI5XHVjNDJhXHVjNDJiXHVjNDJkXHVjNDJlXHVjNDJm'@;
put 'XHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1XHVjNDM2XHVjNDM3XHVjNDM4XHVjNDM5XHVjNDNhXHVjNDNiXHVjNDNlXHVjNDNmXHVjNDQwXHVjNDQxXHVjNDQyXHVjNDQzXHVjNDQ0XHVjNDQ1XHVjNDQ2XHVjNDQ3XHVjNDQ5XHVjNDRhXHVjNDRiXHVjNDRjXHVjNDRkXHVjNDRlXHVjNDRmXHVj'@;
put 'NDUwXHVjNDUxXHVjNDUyXHVjNDUzXHVjNDU0XHVjNDU1XHVjNDU2XHVjNDU3XHVjNDU4XHVjNDU5XHVjNDVhXHVjNDViXHVjNDVjXHVjNDVkXHVjNDVlXHVjNDVmXHVjNDYwXHVjNDYxXHVjNDYyXHVjNDYzXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkXHVjNDZlXHVjNDZm'@;
put 'XHVjNDcwXHVjNDcxXHVjNDcyXHVjNDczXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhXHVjNDdiXHVjNDdjXHVjNDdkXHVjNDdlXHVjNDdmXHVjNDgxXHVjNDgyXHVjNDgzXHVjNDg0XHVjNDg1XHVjNDg2XHVjNDg3XHVjNDg4XHVjNDg5XHVjNDhhXHVjNDhiXHVjNDhjXHVjNDhkXHVjNDhlXHVj'@;
put 'NDhmXHVjNDkwXHVjNDkxXHVjNDkyXHVjNDkzXHVjNDk1XHVjNDk2XHVjNDk3XHVjNDk4XHVjNDk5XHVjNDlhXHVjNDliXHVjNDlkXHVjNDllXHVjNDlmXHVjNGEwXHVjNGExXHVjNGEyXHVjNGEzXHVjNGE0XHVjNGE1XHVjNGE2XHVjNGE3XHVjNGE4XHVjNGE5XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTU2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Nl1bbV1dPTM5OTM2K20sRlszOTkzNittXT14WzE1Nl1bbV0pO2Zvcih4WzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1YzRhYVx1YzRhYlx1YzRhY1x1YzRhZFx1YzRhZVx1YzRhZlx1YzRiMFx1YzRiMVx1YzRiMlx1YzRiM1x1YzRiNFx1YzRiNVx1YzRiNlx1YzRiN1x1YzRiOVx1YzRiYVx1YzRiYlx1YzRiZFx1YzRiZVx1YzRiZlx1YzRjMFx1YzRjMVx1YzRjMlx1YzRjM1x1YzRjNFx1YzRj'@;
put 'NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRjNlx1YzRjN1x1YzRjOFx1YzRjOVx1YzRjYVx1YzRjYlx1YzRjY1x1YzRjZFx1YzRjZVx1YzRjZlx1YzRkMFx1YzRkMVx1YzRkMlx1YzRkM1x1YzRkNFx1YzRkNVx1YzRkNlx1YzRkN1x1YzRkOFx1YzRkOVx1YzRkYVx1'@;
put 'YzRkYlx1YzRkY1x1YzRkZFx1YzRkZVx1YzRkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRlMFx1YzRlMVx1YzRlMlx1YzRlM1x1YzRlNFx1YzRlNVx1YzRlNlx1YzRlN1x1YzRlOFx1YzRlYVx1YzRlYlx1YzRlY1x1YzRlZFx1YzRlZVx1YzRlZlx1YzRmMlx1YzRm'@;
put 'M1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMlx1YzUwM1x1YzUwNFx1YzUwNVx1YzUwNlx1YzUwN1x1YzUwOFx1YzUwOVx1YzUwYVx1YzUwYlx1YzUwZFx1YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNVx1YzUxNlx1YzUxN1x1'@;
put 'YzUxOFx1YzUxOVx1YzUxYVx1YzUxYlx1YzUxZFx1YzUxZVx1YzUxZlx1YzUyMFx1YzUyMVx1YzUyMlx1YzUyM1x1YzUyNFx1YzUyNVx1YzUyNlx1YzUyN1x1YzUyYVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMVx1YzUzMlx1YzUzM1x1YzUzNFx1YzUzNVx1YzUzNlx1YzUzN1x1YzUz'@;
put 'YVx1YzUzY1x1YzUzZVx1YzUzZlx1YzU0MFx1YzU0MVx1YzU0Mlx1YzU0M1x1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OVx1YzU2YVx1YzU2Ylx1'@;
put 'YzU2Y1x1YzU2ZFx1YzU2ZVx1YzU2Zlx1YzU3Mlx1YzU3Nlx1YzU3N1x1YzU3OFx1YzU3OVx1YzU3YVx1YzU3Ylx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NFx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzE1N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTddW21dXT00MDE5MittLEZbNDAxOTIrbV09eFsxNTddW21dKTtmb3IoeFsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1'@;
put 'YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNc'@;
put 'dWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2'@;
put 'MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJc'@;
put 'dWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2'@;
put 'NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2Vc'@;
put 'dWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFcdWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2'@;
put 'YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU4XVttXV09NDA0NDgrbSxGWzQwNDQ4K21dPXhbMTU4XVttXSk7Zm9yKHhbMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmE4XHVjNmFhXHVjNmFiXHVjNmFjXHVjNmFkXHVjNmFlXHVjNmFmXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiXHVjNmJjXHVjNmJkXHVjNmJlXHVjNmJmXHVjNmMyXHVjNmM0XHVjNmM2XHVjNmM3XHVj'@;
put 'NmM4XHVjNmM5XHVjNmNhXHVjNmNiXHVjNmNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1XHVjNmQ2XHVjNmQ3XHVjNmQ4XHVjNmQ5XHVjNmRhXHVjNmRiXHVjNmRlXHVjNmRmXHVjNmUyXHVjNmUzXHVjNmU0XHVjNmU1'@;
put 'XHVjNmU2XHVjNmU3XHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmYzXHVjNmY0XHVjNmY1XHVjNmY2XHVjNmY3XHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlXHVjNmZmXHVjNzAwXHVjNzAxXHVj'@;
put 'NzAyXHVjNzAzXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkXHVjNzBlXHVjNzBmXHVjNzEwXHVjNzExXHVjNzEyXHVjNzEzXHVjNzE2XHVjNzE4XHVjNzFhXHVjNzFiXHVjNzFjXHVjNzFkXHVjNzFlXHVjNzFmXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5'@;
put 'XHVjNzJhXHVjNzJiXHVjNzJjXHVjNzJkXHVjNzJlXHVjNzJmXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1XHVjNzQ2XHVjNzQ3XHVjNzQ4XHVjNzQ5XHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVj'@;
put 'NzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxXHVjNzYyXHVjNzYzXHVjNzY0XHVjNzY1XHVjNzY2XHVjNzY3XHVjNzY5XHVjNzZhXHVjNzZjXHVjNzZkXHVjNzZlXHVjNzZmXHVjNzcwXHVjNzcxXHVjNzcyXHVjNzczXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdm'@;
put 'XHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliXHVjNzljXHVjNzlkXHVjNzllXHVjNzlmXHVjN2EyXHVjN2E3XHVjN2E4XHVjN2E5XHVjN2FhXHVjN2FiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVj'@;
put 'N2IzXHVjN2I1XHVjN2I2XHVjN2I3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OV1bbV1dPTQwNzA0K20sRls0MDcwNCttXT14WzE1OV1bbV0pO2Zvcih4WzE2MF09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMlx1YzdjM1x1YzdjNFx1YzdjNVx1YzdjNlx1YzdjN1x1YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMVx1YzdkMlx1YzdkM1x1YzdkNFx1'@;
put 'YzdkNVx1YzdkNlx1YzdkN1x1YzdkOVx1YzdkYVx1YzdkYlx1YzdkY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdkZVx1YzdkZlx1YzdlMFx1YzdlMVx1YzdlMlx1YzdlM1x1YzdlNVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZFx1YzdlZVx1Yzdl'@;
put 'Zlx1YzdmMFx1YzdmMVx1YzdmMlx1YzdmM1x1YzdmNFx1YzdmNVx1YzdmNlx1YzdmN1x1YzdmOFx1YzdmOVx1YzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdmYlx1YzdmY1x1YzdmZFx1YzdmZVx1YzdmZlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1'@;
put 'YzgwOVx1YzgwYlx1YzgwY1x1YzgwZFx1YzgwZVx1YzgwZlx1YzgxMlx1YzgxNFx1YzgxN1x1YzgxOFx1YzgxOVx1YzgxYVx1YzgxYlx1YzgxZVx1YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNVx1YzgyNlx1YzgyN1x1YzgyOFx1YzgyOVx1YzgyYVx1YzgyYlx1YzgyZVx1YzgzMFx1Yzgz'@;
put 'Mlx1YzgzM1x1YzgzNFx1YzgzNVx1YzgzNlx1YzgzN1x1YzgzOVx1YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1Yzg0MVx1Yzg0Mlx1Yzg0M1x1Yzg0NFx1Yzg0NVx1Yzg0Nlx1Yzg0N1x1Yzg0YVx1Yzg0Ylx1Yzg0ZVx1Yzg0Zlx1Yzg1MFx1Yzg1MVx1Yzg1Mlx1Yzg1M1x1Yzg1NVx1'@;
put 'Yzg1Nlx1Yzg1N1x1Yzg1OFx1Yzg1OVx1Yzg1YVx1Yzg1Ylx1Yzg1Y1x1Yzg1ZFx1Yzg1ZVx1Yzg1Zlx1Yzg2MFx1Yzg2MVx1Yzg2Mlx1Yzg2M1x1Yzg2NFx1Yzg2NVx1Yzg2Nlx1Yzg2N1x1Yzg2OFx1Yzg2OVx1Yzg2YVx1Yzg2Ylx1Yzg2Y1x1Yzg2ZFx1Yzg2ZVx1Yzg2Zlx1Yzg3Mlx1Yzg3'@;
put 'M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3Ylx1Yzg3Y1x1Yzg3ZFx1Yzg3ZVx1Yzg3Zlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZVx1Yzg4Zlx1Yzg5MFx1Yzg5MVx1Yzg5Mlx1Yzg5M1x1Yzg5NVx1Yzg5Nlx1Yzg5N1x1Yzg5OFx1Yzg5OVx1Yzg5YVx1Yzg5Ylx1'@;
put 'Yzg5Y1x1Yzg5ZVx1YzhhMFx1YzhhMlx1YzhhM1x1YzhhNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjBdW21dXT00MDk2MCttLEZbNDA5NjArbV09eFsxNjBdW21dKTtmb3IoeFsxNjFd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZc'@;
put 'dWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4'@;
put 'ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVcdWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRc'@;
put 'dWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3'@;
put 'XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBc'@;
put 'dTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1'@;
put 'MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4'@;
put 'M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjFdW21dXT00MTIxNittLEZbNDEyMTYrbV09eFsxNjFdW21dKTtmb3IoeFsxNjJdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MTBcdWM5MTJcdWM5MTNcdWM5MTRcdWM5MTVcdWM5MTZcdWM5MTdcdWM5MTlcdWM5MWFcdWM5MWJcdWM5MWNcdWM5MWRcdWM5MWVcdWM5MWZcdWM5MjBcdWM5MjFcdWM5MjJcdWM5'@;
put 'MjNcdWM5MjRcdWM5MjVcdWM5MjZcdWM5MjdcdWM5MjhcdWM5MjlcdWM5MmFcdWM5MmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MmRcdWM5MmVcdWM5MmZcdWM5MzBcdWM5MzFcdWM5MzJcdWM5MzNcdWM5MzVcdWM5MzZcdWM5MzdcdWM5MzhcdWM5MzlcdWM5M2Fc'@;
put 'dWM5M2JcdWM5M2NcdWM5M2RcdWM5M2VcdWM5M2ZcdWM5NDBcdWM5NDFcdWM5NDJcdWM5NDNcdWM5NDRcdWM5NDVcdWM5NDZcdWM5NDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NDhcdWM5NDlcdWM5NGFcdWM5NGJcdWM5NGNcdWM5NGRcdWM5NGVcdWM5NGZcdWM5'@;
put 'NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTlcdWM5NWFcdWM5NWJcdWM5NWNcdWM5NWRcdWM5NWVcdWM5NWZcdWM5NjJcdWM5NjRcdWM5NjVcdWM5NjZcdWM5NjdcdWM5NjhcdWM5NjlcdWM5NmFcdWM5NmJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNc'@;
put 'eGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1'@;
put 'MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNc'@;
put 'dTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Ml1bbV1dPTQxNDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NVx1Yzk3Nlx1Yzk3N1x1Yzk3OFx1Yzk3OVx1Yzk3YVx1Yzk3Ylx1Yzk3ZFx1Yzk3ZVx1Yzk3Zlx1Yzk4MFx1Yzk4MVx1Yzk4Mlx1Yzk4M1x1Yzk4'@;
put 'NFx1Yzk4NVx1Yzk4Nlx1Yzk4N1x1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk5MVx1Yzk5Mlx1Yzk5M1x1Yzk5NFx1Yzk5NVx1Yzk5Nlx1Yzk5N1x1Yzk5YVx1Yzk5Y1x1Yzk5ZVx1Yzk5Zlx1YzlhMFx1YzlhMVx1'@;
put 'YzlhMlx1YzlhM1x1YzlhNFx1YzlhNVx1YzlhNlx1YzlhN1x1YzlhOFx1YzlhOVx1YzlhYVx1YzlhYlx1YzlhY1x1YzlhZFx1YzlhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzlhZlx1YzliMFx1YzliMVx1YzliMlx1YzliM1x1YzliNFx1YzliNVx1YzliNlx1Yzli'@;
put 'N1x1YzliOFx1YzliOVx1YzliYVx1YzliYlx1YzliY1x1YzliZFx1YzliZVx1YzliZlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYlx1YzljY1x1YzljZFx1YzljZVx1YzljZlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1YzlkYlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmYwNFx1'@;
put 'ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYy'@;
put 'MFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1'@;
put 'ZmZlNlx1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1'@;
put 'N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtm'@;
put 'b3IoeFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5'@;
put 'ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVc'@;
put 'dWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBcdWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNh'@;
put 'MmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNhMzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJc'@;
put 'dTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2NcdTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMx'@;
put 'NGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMxNThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlc'@;
put 'dTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNcdTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMx'@;
put 'ODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21d'@;
put 'PXhbMTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTQ3XHVjYTQ4XHVjYTQ5XHVjYTRhXHVjYTRiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1XHVjYTU2XHVjYTU3XHVj'@;
put 'YTU4XHVjYTU5XHVjYTVhXHVjYTViXHVjYTVlXHVjYTYyXHVjYTYzXHVjYTY0XHVjYTY1XHVjYTY2XHVjYTY3XHVjYTY5XHVjYTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTZiXHVjYTZjXHVjYTZkXHVjYTZlXHVjYTZmXHVjYTcwXHVjYTcxXHVjYTcyXHVjYTcz'@;
put 'XHVjYTc0XHVjYTc1XHVjYTc2XHVjYTc3XHVjYTc4XHVjYTc5XHVjYTdhXHVjYTdiXHVjYTdjXHVjYTdlXHVjYTdmXHVjYTgwXHVjYTgxXHVjYTgyXHVjYTgzXHVjYTg1XHVjYTg2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTg3XHVjYTg4XHVjYTg5XHVjYThhXHVj'@;
put 'YThiXHVjYThjXHVjYThkXHVjYThlXHVjYThmXHVjYTkwXHVjYTkxXHVjYTkyXHVjYTkzXHVjYTk0XHVjYTk1XHVjYTk2XHVjYTk3XHVjYTk5XHVjYTlhXHVjYTliXHVjYTljXHVjYTlkXHVjYTllXHVjYTlmXHVjYWEwXHVjYWExXHVjYWEyXHVjYWEzXHVjYWE0XHVjYWE1XHVjYWE2XHVjYWE3'@;
put 'XHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4'@;
put 'XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUw'@;
put 'M2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQw'@;
put 'K20sRls0MjI0MCttXT14WzE2NV1bbV0pO2Zvcih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FhOFx1Y2FhOVx1Y2FhYVx1Y2FhYlx1Y2FhY1x1Y2FhZFx1Y2FhZVx1Y2FhZlx1Y2FiMFx1Y2FiMVx1Y2FiMlx1'@;
put 'Y2FiM1x1Y2FiNFx1Y2FiNVx1Y2FiNlx1Y2FiN1x1Y2FiOFx1Y2FiOVx1Y2FiYVx1Y2FiYlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FjNlx1Y2FjN1x1Y2FjOFx1Y2FjOVx1Y2FjYVx1Y2FjYlx1Y2Fj'@;
put 'ZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1Y2FkYVx1Y2FkYlx1Y2FkY1x1Y2FkZFx1Y2FkZVx1Y2FkZlx1Y2FlMVx1Y2FlMlx1Y2FlM1x1Y2FlNFx1Y2FlNVx1Y2FlNlx1Y2FlN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FlOFx1Y2FlOVx1'@;
put 'Y2FlYVx1Y2FlYlx1Y2FlZFx1Y2FlZVx1Y2FlZlx1Y2FmMFx1Y2FmMVx1Y2FmMlx1Y2FmM1x1Y2FmNVx1Y2FmNlx1Y2FmN1x1Y2FmOFx1Y2FmOVx1Y2FmYVx1Y2FmYlx1Y2FmY1x1Y2FmZFx1Y2FmZVx1Y2FmZlx1Y2IwMFx1Y2IwMVx1Y2IwMlx1Y2IwM1x1Y2IwNFx1Y2IwNVx1Y2IwNlx1Y2Iw'@;
put 'N1x1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1'@;
put 'MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUxZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUz'@;
put 'NVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'NjZdW21dXT00MjQ5NittLEZbNDI0OTYrbV09eFsxNjZdW21dKTtmb3IoeFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVc'@;
put 'dWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNiMjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNi'@;
put 'MmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhcdWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNiNTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNi'@;
put 'NjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVc'@;
put 'dTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMzYjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMz'@;
put 'YmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNc'@;
put 'dTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTY3XVttXV09NDI3NTIrbSxGWzQyNzUyK21dPXhbMTY3XVttXSk7Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjZkXHVjYjZlXHVjYjZmXHVjYjcwXHVjYjcxXHVjYjcyXHVjYjcz'@;
put 'XHVjYjc0XHVjYjc1XHVjYjc2XHVjYjc3XHVjYjdhXHVjYjdiXHVjYjdjXHVjYjdkXHVjYjdlXHVjYjdmXHVjYjgwXHVjYjgxXHVjYjgyXHVjYjgzXHVjYjg0XHVjYjg1XHVjYjg2XHVjYjg3XHVjYjg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjg5XHVjYjhhXHVj'@;
put 'YjhiXHVjYjhjXHVjYjhkXHVjYjhlXHVjYjhmXHVjYjkwXHVjYjkxXHVjYjkyXHVjYjkzXHVjYjk0XHVjYjk1XHVjYjk2XHVjYjk3XHVjYjk4XHVjYjk5XHVjYjlhXHVjYjliXHVjYjlkXHVjYjllXHVjYjlmXHVjYmEwXHVjYmExXHVjYmEyXHVjYmEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVjYmE0XHVjYmE1XHVjYmE2XHVjYmE3XHVjYmE4XHVjYmE5XHVjYmFhXHVjYmFiXHVjYmFjXHVjYmFkXHVjYmFlXHVjYmFmXHVjYmIwXHVjYmIxXHVjYmIyXHVjYmIzXHVjYmI0XHVjYmI1XHVjYmI2XHVjYmI3XHVjYmI5XHVjYmJhXHVjYmJiXHVjYmJjXHVjYmJkXHVj'@;
put 'YmJlXHVjYmJmXHVjYmMwXHVjYmMxXHVjYmMyXHVjYmMzXHVjYmM0XHhjNlx4ZDBceGFhXHUwMTI2XHVmZmZkXHUwMTMyXHVmZmZkXHUwMTNmXHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhXHVmZmZkXHUzMjYwXHUzMjYxXHUzMjYyXHUzMjYzXHUzMjY0XHUzMjY1XHUzMjY2'@;
put 'XHUzMjY3XHUzMjY4XHUzMjY5XHUzMjZhXHUzMjZiXHUzMjZjXHUzMjZkXHUzMjZlXHUzMjZmXHUzMjcwXHUzMjcxXHUzMjcyXHUzMjczXHUzMjc0XHUzMjc1XHUzMjc2XHUzMjc3XHUzMjc4XHUzMjc5XHUzMjdhXHUzMjdiXHUyNGQwXHUyNGQxXHUyNGQyXHUyNGQzXHUyNGQ0XHUyNGQ1XHUy'@;
put 'NGQ2XHUyNGQ3XHUyNGQ4XHUyNGQ5XHUyNGRhXHUyNGRiXHUyNGRjXHUyNGRkXHUyNGRlXHUyNGRmXHUyNGUwXHUyNGUxXHUyNGUyXHUyNGUzXHUyNGU0XHUyNGU1XHUyNGU2XHUyNGU3XHUyNGU4XHUyNGU5XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3'@;
put 'XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjhdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCttXT14WzE2OF1bbV0pO2Zvcih4WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JjNVx1Y2JjNlx1Y2JjN1x1Y2JjOFx1Y2JjOVx1Y2JjYVx1Y2JjYlx1Y2Jj'@;
put 'Y1x1Y2JjZFx1Y2JjZVx1Y2JjZlx1Y2JkMFx1Y2JkMVx1Y2JkMlx1Y2JkM1x1Y2JkNVx1Y2JkNlx1Y2JkN1x1Y2JkOFx1Y2JkOVx1Y2JkYVx1Y2JkYlx1Y2JkY1x1Y2JkZFx1Y2JkZVx1Y2JkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JlMFx1Y2JlMVx1Y2JlMlx1'@;
put 'Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1Y2JlYVx1Y2JlYlx1Y2JlY1x1Y2JlZFx1Y2JlZVx1Y2JlZlx1Y2JmMFx1Y2JmMVx1Y2JmMlx1Y2JmM1x1Y2JmNFx1Y2JmNVx1Y2JmNlx1Y2JmN1x1Y2JmOFx1Y2JmOVx1Y2JmYVx1Y2JmYlx1Y2JmY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1Y2JmZFx1Y2JmZVx1Y2JmZlx1Y2MwMFx1Y2MwMVx1Y2MwMlx1Y2MwM1x1Y2MwNFx1Y2MwNVx1Y2MwNlx1Y2MwN1x1Y2MwOFx1Y2MwOVx1Y2MwYVx1Y2MwYlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2MxNVx1Y2MxNlx1Y2MxN1x1Y2MxOFx1Y2MxOVx1Y2MxYVx1'@;
put 'Y2MxYlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUzMjAwXHUzMjAxXHUzMjAyXHUzMjAzXHUzMjA0XHUzMjA1XHUzMjA2XHUz'@;
put 'MjA3XHUzMjA4XHUzMjA5XHUzMjBhXHUzMjBiXHUzMjBjXHUzMjBkXHUzMjBlXHUzMjBmXHUzMjEwXHUzMjExXHUzMjEyXHUzMjEzXHUzMjE0XHUzMjE1XHUzMjE2XHUzMjE3XHUzMjE4XHUzMjE5XHUzMjFhXHUzMjFiXHUyNDljXHUyNDlkXHUyNDllXHUyNDlmXHUyNGEwXHUyNGExXHUyNGEy'@;
put 'XHUyNGEzXHUyNGE0XHUyNGE1XHUyNGE2XHUyNGE3XHUyNGE4XHUyNGE5XHUyNGFhXHUyNGFiXHUyNGFjXHUyNGFkXHUyNGFlXHUyNGFmXHUyNGIwXHUyNGIxXHUyNGIyXHUyNGIzXHUyNGI0XHUyNGI1XHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUy'@;
put 'NDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE2OV1bbV1dPTQzMjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1'@;
put 'Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1'@;
put 'Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4'@;
put 'ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1'@;
put 'MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3'@;
put 'Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1'@;
put 'MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcwXVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxNzBdW21dXT00MzUyMCttLEZbNDM1MjArbV09eFsxNzBdW21dKTtmb3IoeFsxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJc'@;
put 'dWNjOWRcdWNjOWVcdWNjOWZcdWNjYTFcdWNjYTJcdWNjYTNcdWNjYTRcdWNjYTVcdWNjYTZcdWNjYTdcdWNjYWFcdWNjYWVcdWNjYWZcdWNjYjBcdWNjYjFcdWNjYjJcdWNjYjNcdWNjYjZcdWNjYjdcdWNjYjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjYmFcdWNj'@;
put 'YmJcdWNjYmRcdWNjYmVcdWNjYmZcdWNjYzBcdWNjYzFcdWNjYzJcdWNjYzNcdWNjYzZcdWNjYzhcdWNjY2FcdWNjY2JcdWNjY2NcdWNjY2RcdWNjY2VcdWNjY2ZcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDVcdWNjZDZcdWNjZDdcdWNjZDhcdWNjZDlcdWNjZGFcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWNjZGJcdWNjZGNcdWNjZGRcdWNjZGVcdWNjZGZcdWNjZTBcdWNjZTFcdWNjZTJcdWNjZTNcdWNjZTVcdWNjZTZcdWNjZTdcdWNjZThcdWNjZTlcdWNjZWFcdWNjZWJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjFcdWNjZjJcdWNjZjNcdWNjZjRcdWNjZjVcdWNj'@;
put 'ZjZcdWNjZjdcdWNjZjhcdWNjZjlcdWNjZmFcdWNjZmJcdWNjZmNcdWNjZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRc'@;
put 'dTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMw'@;
put 'ZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJc'@;
put 'dTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzFdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE3MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcxXVttXV09NDM3NzYrbSxGWzQzNzc2K21dPXhbMTcxXVttXSk7Zm9yKHhbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAy'@;
put 'XHVjZDAzXHVjZDA0XHVjZDA1XHVjZDA2XHVjZDA3XHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExXHVjZDEyXHVjZDEzXHVjZDE0XHVjZDE1XHVjZDE2XHVjZDE3XHVjZDFhXHVjZDFjXHVjZDFlXHVjZDFmXHVjZDIwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVjZDIxXHVjZDIyXHVjZDIzXHVjZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkXHVjZDJlXHVjZDJmXHVjZDMwXHVjZDMxXHVjZDMyXHVjZDMzXHVjZDM0XHVjZDM1XHVjZDM2XHVjZDM3XHVjZDM4XHVjZDNhXHVjZDNiXHVjZDNjXHVjZDNkXHVjZDNlXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDNmXHVjZDQwXHVjZDQxXHVjZDQyXHVjZDQzXHVjZDQ0XHVjZDQ1XHVjZDQ2XHVjZDQ3XHVjZDQ4XHVjZDQ5XHVjZDRhXHVjZDRiXHVjZDRjXHVjZDRkXHVjZDRlXHVjZDRmXHVjZDUwXHVjZDUxXHVjZDUyXHVjZDUzXHVjZDU0XHVj'@;
put 'ZDU1XHVjZDU2XHVjZDU3XHVjZDU4XHVjZDU5XHVjZDVhXHVjZDViXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIw'@;
put 'XHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3'@;
put 'XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcyXS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxNzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Ml1bbV1dPTQ0MDMyK20sRls0NDAzMittXT14WzE3Ml1bbV0pO2Zvcih4WzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2'@;
put 'Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5'@;
put 'ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1'@;
put 'Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2RjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE3M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTczXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzNdW21dXT00NDI4OCttLEZbNDQyODgrbV09eFsxNzNdW21dKTtmb3IoeFsxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWNkYzZcdWNkYzdcdWNkYzhcdWNkYzlcdWNkY2FcdWNkY2JcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDFcdWNkZDJcdWNkZDNcdWNkZDRcdWNkZDVcdWNkZDZcdWNkZDdcdWNkZDhcdWNkZDlcdWNkZGFcdWNkZGJcdWNkZGNcdWNkZGRcdWNkZGVcdWNkZGZcdWNkZTBcdWNkZTFcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkZTJcdWNkZTNcdWNkZTRcdWNkZTVcdWNkZTZcdWNkZTdcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZcdWNkZjFcdWNkZjJcdWNkZjNcdWNkZjRcdWNkZjVcdWNkZjZcdWNkZjdcdWNkZmFcdWNkZmNcdWNkZmVcdWNk'@;
put 'ZmZcdWNlMDBcdWNlMDFcdWNlMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGRcdWNlMGVcdWNlMGZcdWNlMTBcdWNlMTFcdWNlMTJcdWNlMTNcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThc'@;
put 'dWNlMWFcdWNlMWJcdWNlMWNcdWNlMWRcdWNlMWVcdWNlMWZcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxNzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc0XVttXV09NDQ1NDQrbSxGWzQ0NTQ0K21dPXhbMTc0XVttXSk7Zm9yKHhbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2XHVjZTM3XHVjZTM4XHVjZTM5XHVjZTNhXHVjZTNiXHVjZTNjXHVjZTNkXHVjZTNlXHVjZTNmXHVjZTQwXHVjZTQxXHVjZTQyXHVjZTQzXHVjZTQ0XHVjZTQ1XHVjZTQ2XHVjZTQ3XHVjZTQ4'@;
put 'XHVjZTQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTRhXHVjZTRiXHVjZTRjXHVjZTRkXHVjZTRlXHVjZTRmXHVjZTUwXHVjZTUxXHVjZTUyXHVjZTUzXHVjZTU0XHVjZTU1XHVjZTU2XHVjZTU3XHVjZTVhXHVjZTViXHVjZTVkXHVjZTVlXHVjZTYyXHVjZTYzXHVj'@;
put 'ZTY0XHVjZTY1XHVjZTY2XHVjZTY3XHVjZTZhXHVjZTZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTZlXHVjZTZmXHVjZTcwXHVjZTcxXHVjZTcyXHVjZTczXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkXHVjZTdlXHVjZTdmXHVjZTgwXHVjZTgx'@;
put 'XHVjZTgyXHVjZTgzXHVjZTg2XHVjZTg4XHVjZThhXHVjZThiXHVjZThjXHVjZThkXHVjZThlXHVjZThmXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NV1bbV1dPTQ0ODAwK20sRls0NDgwMCttXT14WzE3NV1bbV0pO2Zvcih4WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2Vi'@;
put 'N1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2ViZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1'@;
put 'Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2Vl'@;
put 'M1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2VmNlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1'@;
put 'YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3'@;
put 'MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1'@;
put 'YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQw'@;
put 'MFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzZdW21dXT00NTA1NittLEZbNDUwNTYrbV09eFsxNzZdW21dKTtmb3IoeFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDlcdWNmMGFcdWNmMGJcdWNmMGNcdWNmMGRcdWNmMGVcdWNmMGZcdWNmMTJcdWNmMTRcdWNmMTZcdWNmMTdcdWNmMThcdWNmMTlcdWNmMWFcdWNmMWJcdWNm'@;
put 'MWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMjVcdWNmMjZcdWNmMjdcdWNmMjhcdWNmMjlcdWNmMmFcdWNmMmJcdWNmMmVcdWNmMzJcdWNmMzNcdWNmMzRcdWNmMzVcdWNmMzZcdWNmMzdcdWNmMzlcdWNmM2Fc'@;
put 'dWNmM2JcdWNmM2NcdWNmM2RcdWNmM2VcdWNmM2ZcdWNmNDBcdWNmNDFcdWNmNDJcdWNmNDNcdWNmNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNDVcdWNmNDZcdWNmNDdcdWNmNDhcdWNmNDlcdWNmNGFcdWNmNGJcdWNmNGNcdWNmNGRcdWNmNGVcdWNmNGZcdWNm'@;
put 'NTBcdWNmNTFcdWNmNTJcdWNmNTNcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWRcdWNmNWVcdWNmNWZcdWNmNjBcdWNmNjFcdWNmNjJcdWNmNjNcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBc'@;
put 'dWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFk'@;
put 'ODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlc'@;
put 'dWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFl'@;
put 'NjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc3XVttXV09NDUzMTIrbSxGWzQ1MzEyK21dPXhbMTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3XHVjZjc5XHVjZjdhXHVjZjdiXHVjZjdjXHVjZjdkXHVjZjdlXHVjZjdmXHVjZjgxXHVjZjgyXHVjZjgzXHVj'@;
put 'Zjg0XHVjZjg2XHVjZjg3XHVjZjg4XHVjZjg5XHVjZjhhXHVjZjhiXHVjZjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjhlXHVjZjhmXHVjZjkwXHVjZjkxXHVjZjkyXHVjZjkzXHVjZjk0XHVjZjk1XHVjZjk2XHVjZjk3XHVjZjk4XHVjZjk5XHVjZjlhXHVjZjli'@;
put 'XHVjZjljXHVjZjlkXHVjZjllXHVjZjlmXHVjZmEwXHVjZmEyXHVjZmEzXHVjZmE0XHVjZmE1XHVjZmE2XHVjZmE3XHVjZmE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmFhXHVjZmFiXHVjZmFjXHVjZmFkXHVjZmFlXHVjZmFmXHVjZmIxXHVjZmIyXHVjZmIzXHVj'@;
put 'ZmI0XHVjZmI1XHVjZmI2XHVjZmI3XHVjZmI4XHVjZmI5XHVjZmJhXHVjZmJiXHVjZmJjXHVjZmJkXHVjZmJlXHVjZmJmXHVjZmMwXHVjZmMxXHVjZmMyXHVjZmMzXHVjZmM1XHVjZmM2XHVjZmM3XHVjZmM4XHVjZmM5XHVjZmNhXHVjZmNiXHVhZTc5XHVhZTdiXHVhZTdjXHVhZTdkXHVhZTg0'@;
put 'XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJkXHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVhZjJjXHVhZjJkXHVh'@;
put 'ZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVhZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5XHVhZmJjXHVhZmMw'@;
put 'XHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNiXHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEwXHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHViMDQ4XHViMDRhXHVi'@;
put 'MDRjXHViMDRlXHViMDUzXHViMDU0XHViMDU1XHViMDU3XHViMDU5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OF1bbV1dPTQ1NTY4K20sRls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4'@;
put 'WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1'@;
put 'Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2Zm'@;
put 'OVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1ZDAwOVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1'@;
put 'ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAyMFx1ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3'@;
put 'ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1'@;
put 'YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEy'@;
put 'Y1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1'@;
put 'YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzldW21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsx'@;
put 'NzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMmVcdWQwMmZcdWQwMzBcdWQwMzFcdWQwMzJcdWQwMzNcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2RcdWQwM2VcdWQwM2Zc'@;
put 'dWQwNDBcdWQwNDFcdWQwNDJcdWQwNDNcdWQwNDZcdWQwNDhcdWQwNGFcdWQwNGJcdWQwNGNcdWQwNGRcdWQwNGVcdWQwNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTlcdWQwNWFcdWQwNWJcdWQw'@;
put 'NWNcdWQwNWRcdWQwNWVcdWQwNWZcdWQwNjFcdWQwNjJcdWQwNjNcdWQwNjRcdWQwNjVcdWQwNjZcdWQwNjdcdWQwNjhcdWQwNjlcdWQwNmFcdWQwNmJcdWQwNmVcdWQwNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzVcdWQwNzZc'@;
put 'dWQwNzdcdWQwNzhcdWQwNzlcdWQwN2FcdWQwN2JcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODJcdWQwODNcdWQwODRcdWQwODVcdWQwODZcdWQwODdcdWQwODhcdWQwODlcdWQwOGFcdWQwOGJcdWQwOGNcdWQwOGRcdWQwOGVcdWQwOGZcdWQwOTBcdWQwOTFcdWQwOTJcdWQwOTNcdWQwOTRcdWIx'@;
put 'ZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2Nc'@;
put 'dWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIy'@;
put 'ZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWJcdWIyZWNcdWIyZWRcdWIyZWVcdWIyZWZcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjdcdWIyZjhcdWIyZjlcdWIyZmFcdWIyZmJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVc'@;
put 'dWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxG'@;
put 'WzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDk1XHVkMDk2XHVkMDk3XHVkMDk4XHVkMDk5XHVkMDlhXHVkMDliXHVkMDljXHVkMDlkXHVkMDllXHVkMDlmXHVkMGEw'@;
put 'XHVkMGExXHVkMGEyXHVkMGEzXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkXHVkMGFlXHVkMGFmXHVkMGIwXHVkMGIxXHVkMGIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhXHVkMGJiXHVkMGJjXHVkMGJkXHVk'@;
put 'MGJlXHVkMGJmXHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVkMGM3XHVkMGNhXHVkMGNiXHVkMGNjXHVkMGNkXHVkMGNlXHVkMGNmXHVkMGQyXHVkMGQ2XHVkMGQ3XHVkMGQ4XHVkMGQ5XHVkMGRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGRiXHVkMGRlXHVkMGRm'@;
put 'XHVkMGUxXHVkMGUyXHVkMGUzXHVkMGU1XHVkMGU2XHVkMGU3XHVkMGU4XHVkMGU5XHVkMGVhXHVkMGViXHVkMGVlXHVkMGYyXHVkMGYzXHVkMGY0XHVkMGY1XHVkMGY2XHVkMGY3XHVkMGY5XHVkMGZhXHVkMGZiXHVkMGZjXHVkMGZkXHVkMGZlXHVkMGZmXHVkMTAwXHVkMTAxXHVkMTAyXHVk'@;
put 'MTAzXHVkMTA0XHViMzY3XHViMzY5XHViMzZiXHViMzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2NiXHViM2NjXHViM2Nl'@;
put 'XHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHViNDYzXHViNDY1XHVi'@;
put 'NDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHViNGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4XHViNTE0XHViNTE1'@;
put 'XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHViNTM4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1b'@;
put 'bV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEw'@;
put 'Zlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDExY1x1ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1'@;
put 'ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEz'@;
put 'Zlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NVx1ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1'@;
put 'ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjVi'@;
put 'M1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1'@;
put 'YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3'@;
put 'MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxNmVcdWQxNmZcdWQxNzBcdWQxNzFcdWQxNzJcdWQxNzNcdWQxNzRcdWQx'@;
put 'NzVcdWQxNzZcdWQxNzdcdWQxNzhcdWQxNzlcdWQxN2FcdWQxN2JcdWQxN2RcdWQxN2VcdWQxN2ZcdWQxODBcdWQxODFcdWQxODJcdWQxODNcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxOGJcdWQxOGNcdWQxOGRc'@;
put 'dWQxOGVcdWQxOGZcdWQxOTBcdWQxOTFcdWQxOTJcdWQxOTNcdWQxOTRcdWQxOTVcdWQxOTZcdWQxOTdcdWQxOThcdWQxOTlcdWQxOWFcdWQxOWJcdWQxOWNcdWQxOWRcdWQxOWVcdWQxOWZcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWQxYTlcdWQxYWFcdWQxYWJcdWQxYWNcdWQxYWRcdWQxYWVcdWQxYWZcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzFcdWQxYzJcdWQxYzNcdWQxYzRcdWQxYzVcdWQxYzZcdWQxYzdcdWQxYzhcdWQxYzlc'@;
put 'dWQxY2FcdWQxY2JcdWQxY2NcdWQxY2RcdWQxY2VcdWQxY2ZcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4'@;
put 'MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRc'@;
put 'dWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4'@;
put 'ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWQwXHVkMWQxXHVkMWQyXHVkMWQzXHVkMWQ0XHVk'@;
put 'MWQ1XHVkMWQ2XHVkMWQ3XHVkMWQ5XHVkMWRhXHVkMWRiXHVkMWRjXHVkMWRkXHVkMWRlXHVkMWRmXHVkMWUwXHVkMWUxXHVkMWUyXHVkMWUzXHVkMWU0XHVkMWU1XHVkMWU2XHVkMWU3XHVkMWU4XHVkMWU5XHVkMWVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWVi'@;
put 'XHVkMWVjXHVkMWVkXHVkMWVlXHVkMWVmXHVkMWYwXHVkMWYxXHVkMWYyXHVkMWYzXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5XHVkMWZhXHVkMWZiXHVkMWZjXHVkMWZkXHVkMWZlXHVkMWZmXHVkMjAwXHVkMjAxXHVkMjAyXHVkMjAzXHVkMjA0XHVkMjA1XHVkMjA2XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjA4XHVkMjBhXHVkMjBiXHVkMjBjXHVkMjBkXHVkMjBlXHVkMjBmXHVkMjExXHVkMjEyXHVkMjEzXHVkMjE0XHVkMjE1XHVkMjE2XHVkMjE3XHVkMjE4XHVkMjE5XHVkMjFhXHVkMjFiXHVkMjFjXHVkMjFkXHVkMjFlXHVkMjFmXHVkMjIwXHVkMjIx'@;
put 'XHVkMjIyXHVkMjIzXHVkMjI0XHVkMjI1XHVkMjI2XHVkMjI3XHVkMjI4XHVkMjI5XHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHViOThhXHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJjXHViOWJkXHVi'@;
put 'OWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlXHViOWNmXHViOWQwXHViOWQxXHViOWQyXHViOWQ4XHViOWQ5XHViOWRiXHViOWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAw'@;
put 'XHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHViYTRkXHViYTRlXHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHVi'@;
put 'YTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4XHViYWI5XHViYWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1'@;
put 'ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0Mlx1ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1ZDI1OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3MFx1ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3'@;
put 'ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1'@;
put 'YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJm'@;
put 'OVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1YmMxNlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1'@;
put 'YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZbNDczNjArbV09eFsxODVdW21dKTtmb3IoeFsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyOGRc'@;
put 'dWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTZcdWQyOTdcdWQyOThcdWQyOTlcdWQyOWFcdWQyOWJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTVcdWQyYTZcdWQyYTdcdWQyYThcdWQyYTlcdWQyYWFcdWQyYWJcdWQyYWRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjJcdWQyYjNcdWQyYjRcdWQyYjVcdWQyYjZcdWQyYjdcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzNcdWQyYzRcdWQyYzVcdWQyYzZcdWQyYzdcdWQyY2FcdWQyY2NcdWQyY2RcdWQyY2VcdWQyY2Zc'@;
put 'dWQyZDBcdWQyZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGRcdWQyZGVcdWQyZGZcdWQyZTBcdWQyZTFcdWQyZTJcdWQyZTNcdWQyZTZcdWQyZTdcdWQyZThcdWQyZTlcdWQy'@;
put 'ZWFcdWQyZWJcdWQyZWNcdWQyZWRcdWQyZWVcdWQyZWZcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBc'@;
put 'dWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJk'@;
put 'NTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhc'@;
put 'dWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVttXV09NDc2MTYrbSxGWzQ3NjE2K21dPXhbMTg2XVttXSk7Zm9yKHhbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVkMmZiXHVkMmZjXHVkMmZkXHVkMmZlXHVkMmZmXHVkMzAyXHVkMzA0XHVkMzA2XHVkMzA3XHVkMzA4XHVkMzA5XHVkMzBhXHVkMzBiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3XHVkMzE4XHVkMzE5XHVkMzFhXHVkMzFiXHVkMzFlXHVkMzIyXHVkMzIzXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxXHVkMzMyXHVkMzMzXHVkMzM0XHVkMzM1XHVkMzM2XHVkMzM3XHVkMzNhXHVkMzNlXHVkMzNmXHVkMzQwXHVkMzQxXHVkMzQyXHVkMzQz'@;
put 'XHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzRhXHVkMzRiXHVkMzRjXHVkMzRkXHVkMzRlXHVkMzRmXHVkMzUwXHVkMzUxXHVkMzUyXHVkMzUzXHVkMzU0XHVkMzU1XHVkMzU2XHVkMzU3XHVkMzU4XHVkMzU5XHVkMzVhXHVk'@;
put 'MzViXHVkMzVjXHVkMzVkXHVkMzVlXHVkMzVmXHVkMzYwXHVkMzYxXHVkMzYyXHVkMzYzXHVkMzY0XHVkMzY1XHVkMzY2XHVkMzY3XHVkMzY4XHVkMzY5XHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTczXHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThj'@;
put 'XHViZThkXHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHViZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHVi'@;
put 'ZjQ0XHViZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYwXHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGEx'@;
put 'XHVjMGEzXHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVjMGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4N11bbV1dPTQ3ODcyK20sRls0Nzg3MittXT14WzE4N11bbV0pO2Zvcih4WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3NFx1ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1'@;
put 'ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1ZDM5M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNh'@;
put 'NFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNiMFx1ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1'@;
put 'ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1ZDNkNFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzEx'@;
put 'MFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1'@;
put 'YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFj'@;
put 'NFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1'@;
put 'YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODhdW21dXT00ODEyOCttLEZbNDgxMjgrbV09eFsxODhdW21dKTtmb3IoeFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZDdcdWQzZDlcdWQzZGFcdWQzZGJcdWQzZGNcdWQzZGRcdWQzZGVcdWQzZGZcdWQzZTBcdWQzZTJcdWQzZTRcdWQzZTVcdWQzZTZcdWQzZTdcdWQzZThcdWQzZTlcdWQzZWFcdWQzZWJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJc'@;
put 'dWQzZjNcdWQzZjVcdWQzZjZcdWQzZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDJcdWQ0MDNcdWQ0MDRcdWQ0MDVcdWQ0MDZcdWQ0MDdcdWQ0MDlcdWQ0MGFcdWQ0MGJcdWQ0MGNcdWQ0MGRcdWQ0'@;
put 'MGVcdWQ0MGZcdWQ0MTBcdWQ0MTFcdWQ0MTJcdWQ0MTNcdWQ0MTRcdWQ0MTVcdWQ0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MTdcdWQ0MThcdWQ0MTlcdWQ0MWFcdWQ0MWJcdWQ0MWNcdWQ0MWVcdWQ0MWZcdWQ0MjBcdWQ0MjFcdWQ0MjJcdWQ0MjNcdWQ0MjRc'@;
put 'dWQ0MjVcdWQ0MjZcdWQ0MjdcdWQ0MjhcdWQ0MjlcdWQ0MmFcdWQ0MmJcdWQ0MmNcdWQ0MmRcdWQ0MmVcdWQ0MmZcdWQ0MzBcdWQ0MzFcdWQ0MzJcdWQ0MzNcdWQ0MzRcdWQ0MzVcdWQ0MzZcdWQ0MzdcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMy'@;
put 'NThcdWMyNjBcdWMyNjVcdWMyNmNcdWMyNmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRc'@;
put 'dWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJcdWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMz'@;
put 'NDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMzNzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBc'@;
put 'dWM0MjRcdWM0MmNcdWM0MzBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg5XVttXV09NDgzODQrbSxGWzQ4Mzg0K21dPXhbMTg5XVttXSk7Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDM4XHVkNDM5XHVkNDNhXHVkNDNiXHVkNDNjXHVkNDNkXHVkNDNlXHVkNDNmXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1XHVkNDQ2XHVkNDQ3XHVkNDQ4XHVkNDQ5XHVkNDRhXHVkNDRiXHVkNDRjXHVkNDRk'@;
put 'XHVkNDRlXHVkNDRmXHVkNDUwXHVkNDUxXHVkNDUyXHVkNDUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDU0XHVkNDU1XHVkNDU2XHVkNDU3XHVkNDU4XHVkNDU5XHVkNDVhXHVkNDViXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1XHVk'@;
put 'NDY2XHVkNDY3XHVkNDY4XHVkNDY5XHVkNDZhXHVkNDZiXHVkNDZjXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDczXHVkNDc0XHVkNDc1XHVkNDc2XHVkNDc3XHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVkNDgz'@;
put 'XHVkNDg0XHVkNDg1XHVkNDg2XHVkNDg3XHVkNDhhXHVkNDhjXHVkNDhlXHVkNDhmXHVkNDkwXHVkNDkxXHVkNDkyXHVkNDkzXHVkNDk1XHVkNDk2XHVkNDk3XHVkNDk4XHVkNDk5XHVkNDlhXHVkNDliXHVkNDljXHVkNDlkXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1XHVj'@;
put 'NDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBjXHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVjNTM4'@;
put 'XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVjNTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0XHVj'@;
put 'NTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0XHVjNWM1XHVjNWM2XHVjNWM3'@;
put 'XHVjNWM4XHVjNWM5XHVjNWNhXHVjNWNjXHVjNWNlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MF1bbV1dPTQ4NjQwK20sRls0ODY0MCttXT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRhMlx1ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRi'@;
put 'MFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRiOVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1'@;
put 'ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRl'@;
put 'MFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1ZDRmMlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1'@;
put 'YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVmZlx1YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYy'@;
put 'NFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1'@;
put 'YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZj'@;
put 'ZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTFdW21dXT00ODg5NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtm'@;
put 'b3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZmVcdWQ0ZmZcdWQ1MDBcdWQ1MDFcdWQ1MDJcdWQ1MDNcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGRcdWQ1MGVcdWQ1MGZcdWQ1'@;
put 'MTBcdWQ1MTFcdWQ1MTJcdWQ1MTNcdWQ1MTZcdWQ1MThcdWQ1MTlcdWQ1MWFcdWQ1MWJcdWQ1MWNcdWQ1MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MWVcdWQ1MWZcdWQ1MjBcdWQ1MjFcdWQ1MjJcdWQ1MjNcdWQ1MjRcdWQ1MjVcdWQ1MjZcdWQ1MjdcdWQ1Mjhc'@;
put 'dWQ1MjlcdWQ1MmFcdWQ1MmJcdWQ1MmNcdWQ1MmRcdWQ1MmVcdWQ1MmZcdWQ1MzBcdWQ1MzFcdWQ1MzJcdWQ1MzNcdWQ1MzRcdWQ1MzVcdWQ1MzZcdWQ1MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1'@;
put 'NDFcdWQ1NDJcdWQ1NDNcdWQ1NDVcdWQ1NDZcdWQ1NDdcdWQ1NDhcdWQ1NDlcdWQ1NGFcdWQ1NGJcdWQ1NGVcdWQ1NTBcdWQ1NTJcdWQ1NTNcdWQ1NTRcdWQ1NTVcdWQ1NTZcdWQ1NTdcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNc'@;
put 'dWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3'@;
put 'NGRcdWM3NGZcdWM3NTFcdWM3NTJcdWM3NTNcdWM3NTRcdWM3NTVcdWM3NTZcdWM3NTdcdWM3NThcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVc'@;
put 'dWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3'@;
put 'ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21d'@;
put 'PXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTY0XHVkNTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVkNTZlXHVkNTZmXHVkNTcwXHVkNTcxXHVkNTcyXHVkNTczXHVkNTc2XHVkNTc3XHVk'@;
put 'NTc5XHVkNTdhXHVkNTdiXHVkNTdkXHVkNTdlXHVkNTdmXHVkNTgwXHVkNTgxXHVkNTgyXHVkNTgzXHVkNTg2XHVkNThhXHVkNThiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNThjXHVkNThkXHVkNThlXHVkNThmXHVkNTkxXHVkNTkyXHVkNTkzXHVkNTk0XHVkNTk1'@;
put 'XHVkNTk2XHVkNTk3XHVkNTk4XHVkNTk5XHVkNTlhXHVkNTliXHVkNTljXHVkNTlkXHVkNTllXHVkNTlmXHVkNWEwXHVkNWExXHVkNWEyXHVkNWEzXHVkNWE0XHVkNWE2XHVkNWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWE4XHVkNWE5XHVkNWFhXHVkNWFiXHVk'@;
put 'NWFjXHVkNWFkXHVkNWFlXHVkNWFmXHVkNWIwXHVkNWIxXHVkNWIyXHVkNWIzXHVkNWI0XHVkNWI1XHVkNWI2XHVkNWI3XHVkNWI4XHVkNWI5XHVkNWJhXHVkNWJiXHVkNWJjXHVkNWJkXHVkNWJlXHVkNWJmXHVkNWMwXHVkNWMxXHVkNWMyXHVkNWMzXHVkNWM0XHVkNWM1XHVkNWM2XHVkNWM3'@;
put 'XHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVjODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVjODc4XHVjODdhXHVjODgwXHVj'@;
put 'ODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0XHVjOGY1XHVjOGZjXHVjOGZk'@;
put 'XHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVjOTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVjOThjXHVjOTkwXHVjOTk4XHVj'@;
put 'OTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4'@;
put 'K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1'@;
put 'ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVm'@;
put 'OFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYwY1x1ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1'@;
put 'ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1ZDYyYVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYz'@;
put 'N1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1'@;
put 'Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2Fl'@;
put 'Y1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1'@;
put 'Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'OTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdc'@;
put 'dWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWRcdWQ2NWVcdWQ2NWZcdWQ2NjBcdWQ2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2NjJcdWQ2NjNcdWQ2NjRcdWQ2NjVcdWQ2'@;
put 'NjZcdWQ2NjhcdWQ2NmFcdWQ2NmJcdWQ2NmNcdWQ2NmRcdWQ2NmVcdWQ2NmZcdWQ2NzJcdWQ2NzNcdWQ2NzVcdWQ2NzZcdWQ2NzdcdWQ2NzhcdWQ2NzlcdWQ2N2FcdWQ2N2JcdWQ2N2NcdWQ2N2RcdWQ2N2VcdWQ2N2ZcdWQ2ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODZcdWQ2ODdcdWQ2ODhcdWQ2ODlcdWQ2OGFcdWQ2OGJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTVcdWQ2OTZcdWQ2OTdcdWQ2OThcdWQ2OTlcdWQ2OWFcdWQ2OWJcdWQ2OWNcdWQ2OWVcdWQ2YTBcdWQ2YTJcdWQ2YTNcdWQ2YTRcdWQ2'@;
put 'YTVcdWQ2YTZcdWQ2YTdcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThc'@;
put 'dWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNk'@;
put 'MjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhc'@;
put 'dWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmFiXHVkNmFkXHVkNmFlXHVkNmFmXHVkNmIxXHVkNmIyXHVkNmIz'@;
put 'XHVkNmI0XHVkNmI1XHVkNmI2XHVkNmI3XHVkNmI4XHVkNmJhXHVkNmJjXHVkNmJkXHVkNmJlXHVkNmJmXHVkNmMwXHVkNmMxXHVkNmMyXHVkNmMzXHVkNmM2XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmNkXHVkNmNlXHVk'@;
put 'NmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVkNmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhXHVkNmRiXHVkNmRjXHVkNmRkXHVkNmRlXHVkNmRmXHVkNmUxXHVkNmUyXHVkNmUzXHVkNmU1XHVkNmU2XHVkNmU3XHVkNmU5XHVkNmVhXHVkNmViXHVkNmVjXHVkNmVkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2XHVkNmY3XHVkNmY4XHVkNmY5XHVkNmZhXHVkNmZiXHVkNmZlXHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1XHVkNzA2XHVkNzA3XHVkNzA4XHVkNzA5XHVkNzBhXHVkNzBiXHVkNzBjXHVk'@;
put 'NzBkXHVkNzBlXHVkNzBmXHVkNzEwXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVjZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0'@;
put 'XHVjZTk4XHVjZWEwXHVjZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVj'@;
put 'ZjFjXHVjZjIwXHVjZjI0XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVjZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0'@;
put 'XHVjZmUwXHVjZmUxXHVjZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0XHVkMDM1XHVkMDM4XHVkMDNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zvcih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcx'@;
put 'Ylx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1'@;
put 'ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBh'@;
put 'Y1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1'@;
put 'ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFi'@;
put 'M1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09eFsxOTddW21dKTtmb3IoeFsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3OGRcdWQ3OGVcdWQ3'@;
put 'OGZcdWQ3OTFcdWQ3OTJcdWQ3OTNcdWQ3OTRcdWQ3OTVcdWQ3OTZcdWQ3OTdcdWQ3OWFcdWQ3OWNcdWQ3OWVcdWQ3OWZcdWQ3YTBcdWQ3YTFcdWQ3YTJcdWQ3YTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQy'@;
put 'YmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZc'@;
put 'dWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQz'@;
put 'YThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQzZmZcdWQ0MDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgrbSxGWzUwNjg4K21dPXhbMTk4XVttXSk7Zm9yKHhbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDA4XHVkNDFkXHVkNDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVkNDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVk'@;
put 'NDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0'@;
put 'XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVkNTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVkNTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVk'@;
put 'NWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAxXHVkNjA0XHVkNjA4XHVkNjEwXHVkNjExXHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTk5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OV1bbV1dPTUwOTQ0K20sRls1MDk0NCttXT14WzE5OV1bbV0pO2Zvcih4WzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1'@;
put 'ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZk'@;
put 'MVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1'@;
put 'ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDBdW21dXT01MTIwMCttLEZbNTEyMDArbV09eFsyMDBdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFc'@;
put 'dTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5'@;
put 'YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJc'@;
put 'dTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0'@;
put 'NTJcdTlmOTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAyXVttXV09NTE3MTIrbSxGWzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4'@;
put 'XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3ZjhjXHU4MTU0XHU4MjIxXHU4NTkxXHU4OTQxXHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2'@;
put 'MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3XHU5NThiXHU1NTgwXHU1YmEyXHU1NzUxXHVmOTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZl'@;
put 'XHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1MDY1XHU1ZGZlXHU1ZWZhXHU2MTA2XHU2OTU3XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1'@;
put 'MTA5XHU1MjhkXHU1MjkyXHU2YWEyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwM11bbV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZm'@;
put 'Mlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1'@;
put 'NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4'@;
put 'NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1'@;
put 'NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtmb3IoeFsyMDVd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZThcdTZlYWFcdTc1NGNcdTc2'@;
put 'NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRc'@;
put 'dTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThj'@;
put 'MzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2Fc'@;
put 'dTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21dPXhbMjA1XVtt'@;
put 'XSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWQxXHU4'@;
put 'M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5MDRlXHU5MzRiXHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4'@;
put 'XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAyXHU0ZjhhXHU1MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2'@;
put 'OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4MGIxXHU4ZjVmXHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRiXHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNh'@;
put 'XHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2K20sRls1Mjcz'@;
put 'NittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1Nzdl'@;
put 'OVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1'@;
put 'N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2'@;
put 'OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDddW21dXT01'@;
put 'Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZh'@;
put 'NThcdTUxNGJcdTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFc'@;
put 'dTZhOGVcdTc0MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3'@;
put 'M2JcdTU3ZmFcdTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3'@;
put 'OTQ4XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFi'@;
put 'XHU1MTNhXHVmOTBiXHVmOTBjXHU1YTFjXHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlXHVmOTBmXHVmOTEwXHVmOTExXHVmOTEyXHVmOTEzXHU5MGEzXHVmOTE0XHVmOTE1XHVmOTE2XHVmOTE3XHVmOTE4XHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFjXHU2Njk2XHVmOTFkXHU3'@;
put 'MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDldW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1ZjkyYlx1ZjkyY1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1'@;
put 'NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzM1x1ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1Zjkz'@;
put 'Y1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1'@;
put 'NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJc'@;
put 'dTkxMzJcdTkzNWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThl'@;
put 'MGZcdTkwNWRcdTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFc'@;
put 'dTllZGJcdTViODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjExXVttXSk7Zm9yKHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRjXHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4'@;
put 'XHU5MDAzXHU5MDE0XHU5MDUzXHU5MGZkXHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0'@;
put 'ZTZkXHU3YTgxXHU0ZWRkXHU1MWFjXHU1MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVjXHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2'@;
put 'XHU5MDE3XHU5ODJkXHU1YzZmXHU4MWMwXHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2MWY2XHVmOTViXHU3NjY5XHU3Zjg1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1NDI3MittXT14WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1'@;
put 'ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1'@;
put 'NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0'@;
put 'Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21dXT01NDUyOCttLEZbNTQ1MjgrbV09eFsyMTNdW21dKTtmb3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZk'@;
put 'MGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJc'@;
put 'dTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTll'@;
put 'N2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmNc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE0XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDdjXHU5YjI3XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3'@;
put 'NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJjXHU5ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVh'@;
put 'XHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1NDBmXHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3'@;
put 'MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZhXHU4ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4'@;
put 'XHU5NzE2XHU3ODJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1'@;
put 'NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0'@;
put 'NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1'@;
put 'NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2Ri'@;
put 'Zlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTddPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVc'@;
put 'dTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0'@;
put 'NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNc'@;
put 'dTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4'@;
put 'YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVttXSk7Zm9yKHhb'@;
put 'MjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Yzc2XHU3ZDBhXHU3ZDBi'@;
put 'XHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVmXHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2'@;
put 'MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1MjVkXHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIyXHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFi'@;
put 'XHU4MThhXHU4MjM2XHU4NTg0XHU4ZmViXHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMzXHU2Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4'@;
put 'N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgwOCttXT14WzIx'@;
put 'OF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3'@;
put 'Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1'@;
put 'ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3'@;
put 'MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1'@;
put 'N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01NjA2NCttLEZb'@;
put 'NTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFc'@;
put 'dTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVm'@;
put 'YTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJc'@;
put 'dTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIwXVtt'@;
put 'XV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjVhXHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2Zi'@;
put 'XHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5'@;
put 'NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1ZjdmXHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0'@;
put 'XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVmOTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1'@;
put 'ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1'@;
put 'NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4'@;
put 'ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIyXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3'@;
put 'NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThc'@;
put 'dTcyM2RcdTcyNDBcdTcyYzBcdTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4'@;
put 'ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2'@;
put 'ZGM1XHU2ZjVmXHU3N2YzXHU3OGE5XHU4NGM2XHU5MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdh'@;
put 'XHU4MWIzXHU4MjM5XHU4NjFhXHU4N2VjXHU4YTc1XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3'@;
put 'ZTk2XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5NjVkXHU2NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRiXHU3NzAxXHU3YjZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1'@;
put 'NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2'@;
put 'ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1'@;
put 'NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlc'@;
put 'dTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2'@;
put 'OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZc'@;
put 'dTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVkMjdcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDY5XHU3NDVmXHU4MTlkXHU4NzY4XHU2ZmQ1XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4'@;
put 'XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJkXHU2NjJmXHU2NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3'@;
put 'ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4YjU4XHU4ZWZlXHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdi'@;
put 'XHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1XHU1OTMxXHU1YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2'@;
put 'YzgxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3'@;
put 'M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1'@;
put 'NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNm'@;
put 'NFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1'@;
put 'N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUx'@;
put 'YjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRc'@;
put 'dTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThh'@;
put 'OWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlc'@;
put 'dWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3'@;
put 'NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2RmXHU1Zjc5XHU2NjEzXHVmOThiXHVmOThjXHU3NWFiXHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3'@;
put 'XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVm'@;
put 'OTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlkXHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIxXHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0'@;
put 'XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MmQyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zv'@;
put 'cih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1'@;
put 'OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3'@;
put 'MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1'@;
put 'Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJl'@;
put 'NFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09'@;
put 'eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2'@;
put 'Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFc'@;
put 'dTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYy'@;
put 'ZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5YzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIr'@;
put 'bSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVmOWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1'@;
put 'ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQz'@;
put 'XHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2'@;
put 'ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2YjllXHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIz'@;
put 'M11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1'@;
put 'NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIz'@;
put 'Mlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1'@;
put 'NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2Vc'@;
put 'dTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5'@;
put 'ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFc'@;
put 'dTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNV1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjViXHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNl'@;
put 'XHU3M2U1XHVmOWU0XHU3NTcwXHU3NWNkXHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVmOWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3'@;
put 'ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMxXHU1MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYxXHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVh'@;
put 'XHU0ZjdlXHU1OGY5XHU2NWU1XHU2ZWEyXHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0pO2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0'@;
put 'OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1'@;
put 'OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1'@;
put 'Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThj'@;
put 'YTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdc'@;
put 'dTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThk'@;
put 'ZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjFcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRjXHU3YjhiXHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4'@;
put 'ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3MGI5XHU3Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1'@;
put 'XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2ZlXHU2OTY4XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2'@;
put 'ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5MjY2XHU5MmNjXHU5MzIwXHU5NzA2XHU5NzU2XHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOV1bbV1dPTYxMTg0K20sRls2MTE4NCttXT14WzIzOV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1'@;
put 'NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZm'@;
put 'YVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1'@;
put 'OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2Uz'@;
put 'MVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDBdW21dXT02MTQ0MCttLEZbNjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdc'@;
put 'dTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdk'@;
put 'MDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNc'@;
put 'dTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThi'@;
put 'NDlcdThkMDhcdTRlNGJcdTUzZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQxXVttXV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3'@;
put 'XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4MTAyXHU4MWYzXHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVmOWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3'@;
put 'YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2NkXHU3NDY4XHU3NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFlXHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZi'@;
put 'XHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2ODRlXHU3NGM2XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2'@;
put 'NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zvcih4WzI0M109'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFm'@;
put 'Mlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1'@;
put 'NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAy'@;
put 'MVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1'@;
put 'N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09eFsyNDNdW21d'@;
put 'KTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWNcdTUx'@;
put 'YzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVcdTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRc'@;
put 'dTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdj'@;
put 'NjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJcdTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZc'@;
put 'dTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQrbSxGWzYyNDY0'@;
put 'K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU2OTEyXHU2OTVhXHU2YTM1XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4'@;
put 'XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNkXHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4'@;
put 'NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQz'@;
put 'XHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0XHU4MWI1XHU4NDAzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NV1bbV1dPTYy'@;
put 'NzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNk'@;
put 'OVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1'@;
put 'NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAy'@;
put 'Y1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZl'@;
put 'NmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZc'@;
put 'dWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZj'@;
put 'ZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7Zm9yKHhbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjJhXHU1MTZiXHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0'@;
put 'ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1'@;
put 'XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZhXHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2'@;
put 'NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVmYTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsy'@;
put 'NDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OF1bbV1dPTYzNDg4K20sRls2MzQ4OCttXT14WzI0OF1bbV0pO2Zvcih4WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1'@;
put 'NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJk'@;
put 'Mlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1'@;
put 'NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OV0ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PXhbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDldW21dXT02Mzc0NCttLEZbNjM3NDQrbV09eFsyNDldW21dKTtmb3IoeFsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNc'@;
put 'dThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTcz'@;
put 'N2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJc'@;
put 'dTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsy'@;
put 'NTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUwXVttXV09NjRlMyttLEZbNjRlMyttXT14WzI1MF1bbV0pO2Zvcih4WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1OTAwOFx1OTBhMlx1'@;
put 'OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRjZlx1NmU1Nlx1NmVm'@;
put 'OFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1NjIxNlx1OTE3N1x1'@;
put 'NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NVx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTFdW21dXT02NDI1NittLEZbNjQyNTYrbV09eFsyNTFdW21dKTtmb3IoeFsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFc'@;
put 'dTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYw'@;
put 'NGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdc'@;
put 'dTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzZcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUyXVttXV09NjQ1MTIrbSxGWzY0NTEyK21dPXhbMjUyXVttXSk7Zm9yKHhbMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5'@;
put 'XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2'@;
put 'M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2'@;
put 'XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3'@;
put 'ZmIyXHU4YTcwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1M11bbV1dPTY0NzY4K20sRls2NDc2OCttXT14WzI1M11bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEllWzk1MF09ZnVu'@;
put 'Y3Rpb24oKXt2YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygp'@;
put 'KissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1'@;
put 'MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAw'@;
put 'OFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAx'@;
put 'ZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNm'@;
put 'XHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVmZTYzXHVmZTY0XHVm'@;
put 'ZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1'@;
put 'XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2MV1bbV1dPTQxMjE2K20sRls0MTIxNittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4'@;
put 'ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODhcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1'@;
put 'M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1'@;
put 'ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTMwMjFc'@;
put 'dTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZm'@;
put 'MzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJc'@;
put 'dWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYyXVttXV09NDE0NzIrbSxGWzQxNDcyK21dPXhbMTYyXVttXSk7Zm9yKHhbMTYzXT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2Ew'@;
put 'XHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUw'@;
put 'M2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUz'@;
put 'MTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNiXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2M11bbV1dPTQxNzI4K20sRls0MTcyOCttXT14WzE2M11bbV0pO2Zvcih4WzE2'@;
put 'NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0'@;
put 'MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1'@;
put 'NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUxMFx1NGUwZFx1'@;
put 'NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFm'@;
put 'Nlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1'@;
put 'NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIy'@;
put 'YVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjRdW21dXT00MTk4NCttLEZbNDE5ODQrbV09eFsxNjRd'@;
put 'W21dKTtmb3IoeFsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRl'@;
put 'ZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRc'@;
put 'dTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5MmVc'@;
put 'dTU5MzFcdTU5NzRcdTU5NzZcdTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3'@;
put 'MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVc'@;
put 'dTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRl'@;
put 'ZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY1XVttXV09NDIyNDArbSxGWzQy'@;
put 'MjQwK21dPXhbMTY1XVttXSk7Zm9yKHhbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MTcxXHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1'@;
put 'MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFh'@;
put 'XHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2XHU1ZTc2XHU1ZTc0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0XHU2YjdiXHU2'@;
put 'YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4MDMzXHU4MDdm'@;
put 'XHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0'@;
put 'ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Nl1bbV1d'@;
put 'PTQyNDk2K20sRls0MjQ5NittXT14WzE2Nl1bbV0pO2Zvcih4WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1'@;
put 'NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0'@;
put 'Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1'@;
put 'NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZj'@;
put 'ZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1'@;
put 'NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY3XVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'YWVbeFsxNjddW21dXT00Mjc1MittLEZbNDI3NTIrbV09eFsxNjddW21dKTtmb3IoeFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhc'@;
put 'dTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZcdTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcy'@;
put 'NjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdmNTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBcdThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFc'@;
put 'dTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRlOWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRm'@;
put 'OGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVc'@;
put 'dTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0NzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OF1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGFlW3hbMTY4XVttXV09NDMwMDgrbSxGWzQzMDA4K21dPXhbMTY4XVttXSk7Zm9yKHhbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0'@;
put 'XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1'@;
put 'OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4'@;
put 'XHU1YzQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2'@;
put 'XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2'@;
put 'MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4'@;
put 'XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OV1bbV1dPTQzMjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4'@;
put 'Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1'@;
put 'NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNl'@;
put 'Zlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNh'@;
put 'OFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1'@;
put 'ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJi'@;
put 'N1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MF0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMTcwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzBdW21dXT00MzUyMCttLEZbNDM1MjArbV09eFsxNzBdW21dKTtmb3IoeFsxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NDJcdTk2YjlcdTk2'@;
put 'ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdc'@;
put 'dTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0'@;
put 'YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3'@;
put 'Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVc'@;
put 'dTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYw'@;
put 'MGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdcdTYyZjFcdTYyZjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'eFsxNzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcxXVttXV09NDM3NzYrbSxGWzQzNzc2K21dPXhbMTcxXVttXSk7Zm9yKHhbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2'@;
put 'MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2N2I2'@;
put 'XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBiXHU2'@;
put 'ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2'@;
put 'ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRj'@;
put 'XHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3'@;
put 'ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0XHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPXhbMTcyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Ml1bbV1dPTQ0MDMyK20sRls0NDAzMittXT14WzE3Ml1bbV0pO2Zvcih4WzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJl'@;
put 'NVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1'@;
put 'OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1'@;
put 'OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAw'@;
put 'Nlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1'@;
put 'NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRl'@;
put 'YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTczXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzNdW21dXT00NDI4OCttLEZbNDQyODgrbV09eFsxNzNdW21dKTtmb3IoeFsxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVh'@;
put 'MjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFc'@;
put 'dTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZc'@;
put 'dTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1'@;
put 'NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNc'@;
put 'dTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZk'@;
put 'NzdcdTZkNTlcdTZkOTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc0XVttXV09NDQ1NDQrbSxGWzQ0NTQ0K21dPXhbMTc0XVttXSk7Zm9yKHhbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3'@;
put 'MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIw'@;
put 'XHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUw'@;
put 'XHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3'@;
put 'ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYz'@;
put 'XHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4'@;
put 'MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NV1bbV1dPTQ0ODAwK20sRls0NDgwMCttXT14WzE3NV1bbV0pO2Zvcih4WzE3Nl09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1'@;
put 'OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZm'@;
put 'OFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1'@;
put 'ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1'@;
put 'NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1'@;
put 'Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1'@;
put 'NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzZdW21dXT00NTA1NittLEZbNDUwNTYrbV09eFsxNzZdW21dKTtmb3Io'@;
put 'eFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdcdTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNc'@;
put 'dTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVm'@;
put 'NmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZcdTYwYmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwYzVcdTYwYmJcdTYw'@;
put 'YjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJc'@;
put 'dTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1'@;
put 'Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZc'@;
put 'dTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc3XVttXV09NDUzMTIrbSxGWzQ1MzEyK21dPXhb'@;
put 'MTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3'@;
put 'XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3'@;
put 'MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3'@;
put 'NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQyXHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4'@;
put 'XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3'@;
put 'ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2Ey'@;
put 'XHU4Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OF1bbV1dPTQ1NTY4K20s'@;
put 'Rls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZh'@;
put 'Zlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1'@;
put 'OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2Fk'@;
put 'Zlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1'@;
put 'NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5'@;
put 'OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzld'@;
put 'W21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsxNzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNzdcdTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTVi'@;
put 'ZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVlYzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZc'@;
put 'dTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2RcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2'@;
put 'NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRc'@;
put 'dTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZl'@;
put 'NWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MF1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxGWzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3'@;
put 'MTE5XHU3MTFhXHU3MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1'@;
put 'XHU3NTI2XHU3NTZiXHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4XHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3'@;
put 'ZDZlXHU3ZDcyXHU3ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAz'@;
put 'XHU4M2Y4XHU4NDBkXHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4'@;
put 'NmVkXHU4NmQ0XHU4NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODFdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1bbV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1'@;
put 'OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVm'@;
put 'Ylx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1'@;
put 'OTU4Ylx1OTU5MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1'@;
put 'OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3'@;
put 'Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1'@;
put 'NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Ml0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlc'@;
put 'dTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYx'@;
put 'MzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThc'@;
put 'dTY2OGRcdTY3MDNcdTY5OTRcdTY5NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJc'@;
put 'dTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZl'@;
put 'YjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFc'@;
put 'dTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3NjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODNdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzc5XHU3NzZh'@;
put 'XHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3'@;
put 'YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcx'@;
put 'XHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDVi'@;
put 'XHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4'@;
put 'OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYy'@;
put 'XHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1'@;
put 'OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3'@;
put 'Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBl'@;
put 'ZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1'@;
put 'NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFl'@;
put 'M1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZbNDczNjArbV09eFsxODVdW21dKTtmb3IoeFsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdc'@;
put 'dTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZm'@;
put 'MTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZm'@;
put 'ODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJc'@;
put 'dTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdi'@;
put 'OTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdc'@;
put 'dTdkYWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVttXV09NDc2MTYrbSxGWzQ3NjE2K21dPXhbMTg2XVttXSk7Zm9yKHhbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2'@;
put 'XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4'@;
put 'OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4'@;
put 'YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4'@;
put 'XHU5MTc3XHU5MTc0XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5'@;
put 'N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4'@;
put 'XHU1MTA5XHU1MTA1XHU1MWRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4N11bbV1dPTQ3ODcyK20sRls0Nzg3MittXT14WzE4N11bbV0pO2Zvcih4WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYz'@;
put 'MFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1'@;
put 'NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1'@;
put 'NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRh'@;
put 'Mlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1'@;
put 'NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5'@;
put 'Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODhdW21dXT00ODEyOCttLEZbNDgxMjgrbV09eFsxODhdW21dKTtmb3IoeFsxODldPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4'@;
put 'Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRc'@;
put 'dTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNc'@;
put 'dTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3'@;
put 'NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJc'@;
put 'dThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThm'@;
put 'MWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg5XVttXV09NDgzODQrbSxGWzQ4Mzg0K21dPXhbMTg5XVttXSk7'@;
put 'Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5'@;
put 'MmI3XHU5MmVhXHU5MmFjXHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEy'@;
put 'XHU5OTE4XHU5OWRkXHU5OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDAzXHU5ZWE5'@;
put 'XHU5ZWJlXHU5ZWNlXHU1OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1'@;
put 'NjYyXHU1Njc2XHU1OGMxXHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJj'@;
put 'XHU2NGRhXHU2NGM0XHU2NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2'@;
put 'YTQ3XHU2YTM1XHU2YTVmXHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MF1bbV1dPTQ4NjQwK20sRls0ODY0MCtt'@;
put 'XT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1'@;
put 'NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1Nzhl'@;
put 'OFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1'@;
put 'ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIw'@;
put 'Mlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1'@;
put 'OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTFdW21dXT00ODg5'@;
put 'NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtmb3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVc'@;
put 'dTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlh'@;
put 'ZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRc'@;
put 'dTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZi'@;
put 'ZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZc'@;
put 'dTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21dPXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFh'@;
put 'XHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3'@;
put 'ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMyXHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2'@;
put 'XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4'@;
put 'ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0'@;
put 'XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTNdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4'@;
put 'Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1'@;
put 'NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1'@;
put 'OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1'@;
put 'NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1'@;
put 'ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNi'@;
put 'M1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk0'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4'@;
put 'NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVc'@;
put 'dTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcy'@;
put 'NThcdTcyYTJcdTczNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdj'@;
put 'NDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVc'@;
put 'dThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkz'@;
put 'ZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTVdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODU4XHU5ODViXHU5OGJjXHU5'@;
put 'OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1Yjdk'@;
put 'XHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3'@;
put 'Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4'@;
put 'OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3'@;
put 'XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2'@;
put 'YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIyXHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk2'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zvcih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1'@;
put 'OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFj'@;
put 'Zlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1'@;
put 'NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1'@;
put 'OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIw'@;
put 'MFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1'@;
put 'OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09eFsxOTddW21dKTtmb3IoeFsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4'@;
put 'M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdc'@;
put 'dThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgrbSxGWzUwNjg4K21dPXhbMTk4XVttXSk7Zm9yKHhbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTQyXHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBmXHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1'@;
put 'M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0'@;
put 'XHU1YzEyXHU1YzNiXHU1Yzc0XHU1YzczXHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFl'@;
put 'XHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEyXHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1'@;
put 'NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0'@;
put 'XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNiXHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2'@;
put 'YzU0XHU2YzRiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMV1bbV1dPTUxNDU2K20sRls1MTQ1NittXT14WzIwMV1bbV0pO2Zvcih4WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1'@;
put 'OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMw'@;
put 'OVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZl'@;
put 'N1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1'@;
put 'NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZl'@;
put 'M1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1'@;
put 'NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDJdW21dXT01MTcxMittLEZbNTE3MTIrbV09eFsyMDJdW21dKTtmb3IoeFsyMDNdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlc'@;
put 'dTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1'@;
put 'OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThm'@;
put 'YmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlc'@;
put 'dTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0'@;
put 'ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZc'@;
put 'dTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAzXVttXV09NTE5NjgrbSxGWzUxOTY4K21dPXhbMjAzXVttXSk7Zm9yKHhbMjA0'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMw'@;
put 'XHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1'@;
put 'ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDM0XHU2MDBhXHU2MDE3XHU2'@;
put 'MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIw'@;
put 'XHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2'@;
put 'Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3'@;
put 'XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNF1bbV1dPTUyMjI0K20sRls1MjIyNCttXT14WzIwNF1b'@;
put 'bV0pO2Zvcih4WzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNk'@;
put 'MVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1'@;
put 'NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1'@;
put 'Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJi'@;
put 'YVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1'@;
put 'OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMz'@;
put 'ZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDVdW21dXT01MjQ4MCttLEZbNTI0'@;
put 'ODArbV09eFsyMDVdW21dKTtmb3IoeFsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0'@;
put 'NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFc'@;
put 'dTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVm'@;
put 'MDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJc'@;
put 'dTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2'@;
put 'MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA2XVttXV09'@;
put 'NTI3MzYrbSxGWzUyNzM2K21dPXhbMjA2XVttXSk7Zm9yKHhbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2'@;
put 'N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0'@;
put 'XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3'@;
put 'MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2'@;
put 'XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3'@;
put 'ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDddW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzIwN11bbV1dPTUyOTkyK20sRls1Mjk5MittXT14WzIwN11bbV0pO2Zvcih4WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1'@;
put 'N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBj'@;
put 'Zlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1'@;
put 'OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAz'@;
put 'N1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1'@;
put 'NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA4XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsyMDhdW21dXT01MzI0OCttLEZbNTMyNDgrbV09eFsyMDhdW21dKTtmb3IoeFsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNc'@;
put 'dTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVh'@;
put 'MGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFc'@;
put 'dTYwNjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNc'@;
put 'dTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1'@;
put 'YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRc'@;
put 'dTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDldLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzIwOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA5XVttXV09NTM1MDQrbSxGWzUzNTA0K21dPXhbMjA5XVttXSk7Zm9yKHhbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1'@;
put 'XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2'@;
put 'ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNl'@;
put 'XHU3MGUxXHU3MjQyXHU3Mjc4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYzXHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5'@;
put 'XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3'@;
put 'NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJlXHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVj'@;
put 'XHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3YThhXHU3YTg3XHU3YWQ4XHU3YjEwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEwXS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsyMTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMF1bbV1dPTUzNzYwK20sRls1Mzc2MCttXT14WzIxMF1bbV0pO2Zvcih4WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2Iw'@;
put 'NVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1'@;
put 'N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1'@;
put 'Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0'@;
put 'Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1'@;
put 'ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRi'@;
put 'Nlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzIxMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjExXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTFdW21dXT01NDAxNittLEZbNTQwMTYrbV09eFsyMTFdW21dKTtmb3IoeFsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkx'@;
put 'NGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVc'@;
put 'dTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1'@;
put 'MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4'@;
put 'MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlc'@;
put 'dTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVh'@;
put 'NGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGZcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyMTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEyXVttXV09NTQyNzIrbSxGWzU0MjcyK21dPXhbMjEyXVttXSk7Zm9yKHhbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU1ZDMwXHU1ZDEyXHU1ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNm'@;
put 'XHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2'@;
put 'MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNiXHU2MzlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2'@;
put 'NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgw'@;
put 'XHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2'@;
put 'ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxM11bbV1dPTU0NTI4K20sRls1NDUyOCttXT14WzIxM11bbV0pO2Zvcih4WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBm'@;
put 'OFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1'@;
put 'NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1'@;
put 'NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1Nzlm'@;
put 'OFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1'@;
put 'N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2Zj'@;
put 'Zlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTRdW21dXT01NDc4NCttLEZbNTQ3ODQrbV09eFsyMTRdW21dKTtmb3IoeFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgy'@;
put 'M2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVc'@;
put 'dTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2Yjlc'@;
put 'dTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4'@;
put 'OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNc'@;
put 'dThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkx'@;
put 'ZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE1XVttXV09NTUwNDArbSxGWzU1MDQwK21dPXhbMjE1XVttXSk7Zm9yKHhbMjE2XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1'@;
put 'MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4'@;
put 'XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4'@;
put 'XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFjXHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1'@;
put 'YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQx'@;
put 'XHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUxXHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2'@;
put 'MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2MGNlXHU2MGM0XHU2MTE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNl1bbV1dPTU1Mjk2K20sRls1NTI5NittXT14WzIxNl1bbV0pO2Zvcih4'@;
put 'WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1'@;
put 'NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNj'@;
put 'Y1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3'@;
put 'Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1'@;
put 'Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIz'@;
put 'OVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1'@;
put 'NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTddW21dXT01NTU1MittLEZbNTU1NTIrbV09eFsy'@;
put 'MTddW21dKTtmb3IoeFsyMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZlNzhc'@;
put 'dTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlcdTcy'@;
put 'ODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJcdTc0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0'@;
put 'MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRc'@;
put 'dTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdh'@;
put 'MDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRc'@;
put 'dTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE4XVttXV09NTU4MDgrbSxG'@;
put 'WzU1ODA4K21dPXhbMjE4XVttXSk7Zm9yKHhbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUy'@;
put 'XHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4'@;
put 'M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRj'@;
put 'XHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4'@;
put 'YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQz'@;
put 'XHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOV1b'@;
put 'bV1dPTU2MDY0K20sRls1NjA2NCttXT14WzIxOV1bbV0pO2Zvcih4WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVl'@;
put 'Y1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1'@;
put 'OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBj'@;
put 'NFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1'@;
put 'NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgz'@;
put 'ZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIwXVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsyMjBdW21dXT01NjMyMCttLEZbNTYzMjArbV09eFsyMjBdW21dKTtmb3IoeFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTVi'@;
put 'ZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZc'@;
put 'dTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0'@;
put 'MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFc'@;
put 'dTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5'@;
put 'NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMV1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMjIxXVttXV09NTY1NzYrbSxGWzU2NTc2K21dPXhbMjIxXVttXSk7Zm9yKHhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2'@;
put 'ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThk'@;
put 'XHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3'@;
put 'MTUwXHU3MTUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3'@;
put 'NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEw'@;
put 'XHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3'@;
put 'ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIyXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsyMjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMl1bbV1dPTU2ODMyK20sRls1NjgzMittXT14WzIyMl1bbV0pO2Zvcih4WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1'@;
put 'N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3'@;
put 'Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1'@;
put 'ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1'@;
put 'ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1'@;
put 'Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1'@;
put 'ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyM10ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMjIzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjNdW21dXT01NzA4OCttLEZbNTcwODgrbV09eFsyMjNdW21dKTtmb3IoeFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTFcdTg5ZTBc'@;
put 'dTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThk'@;
put 'NjlcdThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVc'@;
put 'dThmMDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJc'@;
put 'dTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTky'@;
put 'NTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBc'@;
put 'dTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsyMjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhbMjI0XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1'@;
put 'ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRi'@;
put 'XHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdl'@;
put 'XHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2'@;
put 'MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2'@;
put 'XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMjI1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20sRls1NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1'@;
put 'NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYy'@;
put 'ZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYw'@;
put 'N1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1'@;
put 'NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4'@;
put 'MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1'@;
put 'Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZdW21dXT01Nzg1NittLEZbNTc4NTYrbV09eFsyMjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJc'@;
put 'dTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdk'@;
put 'OTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgx'@;
put 'OGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2Nc'@;
put 'dTg0OWJcdTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3'@;
put 'MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVc'@;
put 'dTg4ZmNcdTg4ZjZcdTg4ZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI3XVttXV09NTgxMTIrbSxGWzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2Nm'@;
put 'XHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5'@;
put 'MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5'@;
put 'MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJkXHU5NjllXHU5NmExXHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5Nzgz'@;
put 'XHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5'@;
put 'YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1'@;
put 'XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOF1bbV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThh'@;
put 'MVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1'@;
put 'NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1'@;
put 'NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3'@;
put 'Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1'@;
put 'NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJm'@;
put 'Zlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtm'@;
put 'b3IoeFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZm'@;
put 'OTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVc'@;
put 'dTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTczNWJcdTczNjFcdTczNWFcdTczNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNjJcdTc0ODdc'@;
put 'dTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3'@;
put 'ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNc'@;
put 'dTdiY2VcdTdiYWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdm'@;
put 'ZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21d'@;
put 'PXhbMjMwXVttXSk7Zm9yKHhbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4'@;
put 'NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZl'@;
put 'XHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4'@;
put 'NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQz'@;
put 'XHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4'@;
put 'ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5XHU4ZTI2XHU4ZTI3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2'@;
put 'K20sRls1OTEzNittXT14WzIzMV1bbV0pO2Zvcih4WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1'@;
put 'OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJi'@;
put 'Nlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1'@;
put 'OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFm'@;
put 'M1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1'@;
put 'OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsy'@;
put 'MzJdW21dXT01OTM5MittLEZbNTkzOTIrbV09eFsyMzJdW21dKTtmb3IoeFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4Yzhc'@;
put 'dTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTViMjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVk'@;
put 'YWFcdTVkYThcdTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmFcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2Jc'@;
put 'dTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZh'@;
put 'NTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2Vc'@;
put 'dTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMjMzXVttXV09NTk2NDgrbSxGWzU5NjQ4K21dPXhbMjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1'@;
put 'XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3'@;
put 'NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIx'@;
put 'XHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3'@;
put 'ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1'@;
put 'XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNF1bbV1dPTU5OTA0K20sRls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0'@;
put 'NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1'@;
put 'ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkx'@;
put 'Zlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5'@;
put 'MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1'@;
put 'OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0'@;
put 'Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNV0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMjM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzVdW21dXT02MDE2MCttLEZbNjAxNjArbV09eFsyMzVdW21dKTtmb3IoeFsyMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGJcdTkyZmVcdTkzMDlcdTkz'@;
put 'MDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5Mjdc'@;
put 'dTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTli'@;
put 'OTNcdTliOTJcdTliOTBcdTliN2FcdTliOTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTll'@;
put 'ODdcdTllYWVcdTllYWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2Zc'@;
put 'dTU4ZDJcdTViMmRcdTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0'@;
put 'ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzZd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM2XVttXV09NjA0MTYrbSxGWzYwNDE2K21dPXhbMjM2XVttXSk7Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk1XHU2'@;
put 'YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUx'@;
put 'XHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3'@;
put 'NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3'@;
put 'OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2'@;
put 'XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3'@;
put 'ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlhXHU4NTllXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdh'@;
put 'ZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1'@;
put 'ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1'@;
put 'OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5'@;
put 'OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1'@;
put 'OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlh'@;
put 'MDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlhZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJc'@;
put 'dTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFc'@;
put 'dTllODlcdTllOGRcdTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVl'@;
put 'NmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZc'@;
put 'dTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcx'@;
put 'ZmRcdTczNzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM5XVttXV09NjExODQrbSxGWzYxMTg0K21dPXhbMjM5XVttXSk7Zm9yKHhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3'@;
put 'OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4'@;
put 'XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4MDc1XHU4MWQxXHU4MWQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMy'@;
put 'XHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4'@;
put 'N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1'@;
put 'XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4'@;
put 'ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MF1bbV1dPTYxNDQwK20sRls2MTQ0MCttXT14WzI0MF1bbV0pO2Zvcih4WzI0MV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1'@;
put 'OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZi'@;
put 'M1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdk'@;
put 'OFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1'@;
put 'OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1'@;
put 'YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1'@;
put 'NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDFdW21dXT02MTY5NittLEZbNjE2OTYrbV09eFsyNDFdW21dKTtmb3IoeFsyNDJd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2Jc'@;
put 'dTZhZGZcdTZhZGNcdTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcy'@;
put 'MDVcdTcyYTVcdTcyYTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRcdTc5MWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MjFcdTc5MWNcdTc5MTdcdTc5'@;
put 'MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVc'@;
put 'dTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4'@;
put 'MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBc'@;
put 'dThiNDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThiNGJcdThiNTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQyXVttXV09NjE5NTIrbSxGWzYxOTUyK21dPXhbMjQyXVtt'@;
put 'XSk7Zm9yKHhbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZk'@;
put 'XHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5'@;
put 'M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2IzXHU5'@;
put 'N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIz'@;
put 'XHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5'@;
put 'ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMw'@;
put 'XHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0M11bbV1dPTYyMjA4K20sRls2MjIw'@;
put 'OCttXT14WzI0M11bbV0pO2Zvcih4WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUx'@;
put 'NVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1'@;
put 'NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVm'@;
put 'ZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1'@;
put 'OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQw'@;
put 'ZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDRdW21dXT02'@;
put 'MjQ2NCttLEZbNjI0NjQrbV09eFsyNDRdW21dKTtmb3IoeFsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3'@;
put 'YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZc'@;
put 'dTliMTBcdTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlm'@;
put 'MmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRc'@;
put 'dTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgx'@;
put 'ZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjQ1XVttXV09NjI3MjArbSxGWzYyNzIwK21dPXhbMjQ1XVttXSk7Zm9yKHhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI5XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4'@;
put 'OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMw'@;
put 'XHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5'@;
put 'ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRl'@;
put 'XHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3'@;
put 'MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDZdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzI0Nl1bbV1dPTYyOTc2K20sRls2Mjk3NittXT14WzI0Nl1bbV0pO2Zvcih4WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1'@;
put 'ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5'@;
put 'Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1'@;
put 'OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1'@;
put 'OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEz'@;
put 'ZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1'@;
put 'N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDddW21dXT02MzIzMittLEZbNjMyMzIrbV09eFsyNDddW21dKTtmb3IoeFsyNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVc'@;
put 'dThkMTlcdThlOThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTlj'@;
put 'NGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdc'@;
put 'dTlmMzZcdTlmNDNcdTlmNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJc'@;
put 'dTc0ZTVcdTc3ZDVcdTc5MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3'@;
put 'NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVc'@;
put 'dTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDhdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzI0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ4XVttXV09NjM0ODgrbSxGWzYzNDg4K21dPXhbMjQ4XVttXSk7Zm9yKHhbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTk4XHU3ZTliXHU3ZTk5'@;
put 'XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5'@;
put 'ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5Yzcx'@;
put 'XHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNj'@;
put 'XHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3'@;
put 'Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0'@;
put 'XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OV1bbV1dPTYzNzQ0K20sRls2Mzc0NCttXT14WzI0OV1bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEllWzEyNTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4'@;
put 'MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9g'@;
put 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAy'@;
put 'Mlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1'@;
put 'XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBc'@;
put 'eGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4'@;
put 'ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjUx'@;
put 'XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5'@;
put 'Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJc'@;
put 'dTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFj'@;
put 'XHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFc'@;
put 'dTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0'@;
put 'MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLGFlPVtdLHg9e30s'@;
put 'bT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjUyXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc'@;
put 'dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3Bx'@;
put 'cnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAy'@;
put 'ZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRc'@;
put 'eGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4'@;
put 'ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0p'@;
put 'XT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjUzXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThc'@;
put 'eDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZc'@;
put 'dTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1'@;
put 'XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNc'@;
put 'dTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAz'@;
put 'YWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2Fc'@;
put 'dTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjU0XT1mdW5jdGlvbigpe2Zv'@;
put 'cih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdI'@;
put 'SUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIw'@;
put 'MThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhi'@;
put 'M1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4'@;
put 'ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLGFlPVtdLHg9e30s'@;
put 'bT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjU1XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc'@;
put 'dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3Bx'@;
put 'cnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAy'@;
put 'ZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhi'@;
put 'ZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHVmZmZkXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUw'@;
put 'NWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4'@;
put 'LGRlYzphZX19KCksSWVbMTI1Nl09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUm'@;
put 'JygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5'@;
put 'XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUw'@;
put 'NmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1'@;
put 'MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhl'@;
put 'OVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdCht'@;
put 'KSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0'@;
put 'XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1'@;
put 'ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZm'@;
put 'ZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0'@;
put 'XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFc'@;
put 'dTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsYWU9W10s'@;
put 'eD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNThdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4'@;
put 'MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamts'@;
put 'bW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAx'@;
put 'NFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJj'@;
put 'XHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhl'@;
put 'Mlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMh'@;
put 'PT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxZTRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc'@;
put 'eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRc'@;
put 'eGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4'@;
put 'YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhh'@;
put 'MFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4'@;
put 'Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5j'@;
put 'aGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2'@;
put 'XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRj'@;
put 'XHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlc'@;
put 'dTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4'@;
put 'YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhc'@;
put 'dTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZm'@;
put 'ZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMDAwN109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgw'@;
put 'NFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2Bh'@;
put 'YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1'@;
put 'XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVc'@;
put 'dTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1'@;
put 'MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2Nc'@;
put 'dTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYo'@;
put 'eFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwMDhdPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4'@;
put 'MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4'@;
put 'ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJcdWY4ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJc'@;
put 'dWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdTMwZmJcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE1XHVmZjVlXHVmZmZkXHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUz'@;
put 'MDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYx'@;
put 'XHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUy'@;
put 'NWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2'@;
put 'MV1bbV1dPTQxMjE2K20sRls0MTIxNittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1'@;
put 'MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4'@;
put 'Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1'@;
put 'ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYyXVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsxNjJdW21dXT00MTQ3MittLEZbNDE0NzIrbV09eFsxNjJdW21dKTtmb3IoeFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVc'@;
put 'dWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZm'@;
put 'MzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNc'@;
put 'dWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2M11b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYzXVttXV09NDE3MjgrbSxGWzQxNzI4K21dPXhbMTYzXVttXSk7Zm9yKHhbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUz'@;
put 'XHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUz'@;
put 'MDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhh'@;
put 'XHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY0XS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09eFsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NF1bbV1dPTQxOTg0K20sRls0MTk4NCttXT14WzE2NF1bbV0pO2Zvcih4WzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBi'@;
put 'MVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1'@;
put 'MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBl'@;
put 'OFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NV0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjVdW21dXT00MjI0MCttLEZbNDIyNDArbV09eFsxNjVdW21dKTtmb3IoeFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAz'@;
put 'OWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFc'@;
put 'dTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY2XVttXV09NDI0OTYrbSxGWzQyNDk2K21dPXhbMTY2XVttXSk7Zm9yKHhbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUw'@;
put 'NDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUw'@;
put 'NDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2N11bbV1dPTQyNzUyK20sRls0Mjc1MittXT14WzE2N11bbV0pO2Zvcih4WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1'@;
put 'MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEw'@;
put 'YVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1'@;
put 'MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjhdW21dXT00MzAwOCttLEZbNDMwMDgrbV09eFsxNjhdW21dKTtmb3IoeFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhc'@;
put 'dTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1'@;
put 'MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2Zc'@;
put 'dTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY5XVttXV09NDMyNjQrbSxGWzQzMjY0K21dPXhbMTY5XVttXSk7Zm9yKHhbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNj'@;
put 'XHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2'@;
put 'MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJj'@;
put 'XHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4'@;
put 'OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Nl1bbV1dPTQ1MDU2K20sRls0NTA1NittXT14WzE3Nl1bbV0pO2Zvcih4WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJh'@;
put 'NVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1'@;
put 'OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZi'@;
put 'OVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1'@;
put 'NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzddW21dXT00NTMxMittLEZbNDUzMTIrbV09eFsxNzddW21dKTtmb3IoeFsxNzhdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYy'@;
put 'ZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZc'@;
put 'dTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgz'@;
put 'NDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBc'@;
put 'dTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc4XVttXV09NDU1NjgrbSxGWzQ1NTY4K21dPXhbMTc4XVttXSk7Zm9yKHhbMTc5'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzNhXHU1YzFkXHU1ZTM4XHU5'@;
put 'NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4'@;
put 'XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5'@;
put 'YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZh'@;
put 'XHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OV1bbV1dPTQ1ODI0K20sRls0NTgyNCttXT14WzE3OV1b'@;
put 'bV0pO2Zvcih4WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg0MFx1'@;
put 'NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUw'@;
put 'N1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1'@;
put 'NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0'@;
put 'Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODBdW21dXT00NjA4MCttLEZbNDYw'@;
put 'ODArbV09eFsxODBdW21dKTtmb3IoeFsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5'@;
put 'NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVc'@;
put 'dTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUx'@;
put 'Y2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgxXVttXV09'@;
put 'NDYzMzYrbSxGWzQ2MzM2K21dPXhbMTgxXVttXSk7Zm9yKHhbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4'@;
put 'YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5'@;
put 'XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1'@;
put 'YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODJdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE4Ml1bbV1dPTQ2NTkyK20sRls0NjU5MittXT14WzE4Ml1bbV0pO2Zvcih4WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1'@;
put 'OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJh'@;
put 'Y1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1'@;
put 'NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgzXVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxODNdW21dXT00Njg0OCttLEZbNDY4NDgrbV09eFsxODNdW21dKTtmb3IoeFsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRc'@;
put 'dTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYx'@;
put 'MWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2Rc'@;
put 'dTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODRdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE4NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg0XVttXV09NDcxMDQrbSxGWzQ3MTA0K21dPXhbMTg0XVttXSk7Zm9yKHhbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcx'@;
put 'XHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1'@;
put 'MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUy'@;
put 'XHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg1XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxODVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NV1bbV1dPTQ3MzYwK20sRls0NzM2MCttXT14WzE4NV1bbV0pO2Zvcih4WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4'@;
put 'YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1'@;
put 'NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3'@;
put 'OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE4Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODZdW21dXT00NzYxNittLEZbNDc2MTYrbV09eFsxODZdW21dKTtmb3IoeFsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUy'@;
put 'MTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdc'@;
put 'dTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThi'@;
put 'ZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxODddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg3XVttXV09NDc4NzIrbSxGWzQ3ODcyK21dPXhbMTg3XVttXSk7Zm9yKHhbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2'@;
put 'OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIw'@;
put 'XHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3'@;
put 'YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OF1bbV1dPTQ4MTI4K20sRls0ODEyOCttXT14WzE4OF1bbV0pO2Zvcih4WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1'@;
put 'NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODEx'@;
put 'YVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1'@;
put 'N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZk'@;
put 'MVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODldW21dXT00ODM4NCttLEZbNDgzODQrbV09eFsxODldW21dKTtmb3IoeFsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZc'@;
put 'dTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRl'@;
put 'NDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThc'@;
put 'dTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgz'@;
put 'Y2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkwXVttXV09NDg2NDArbSxGWzQ4NjQwK21dPXhbMTkwXVttXSk7Zm9yKHhbMTkxXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThm'@;
put 'XHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4'@;
put 'MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3'@;
put 'XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3'@;
put 'NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MV1bbV1dPTQ4ODk2K20sRls0ODg5NittXT14WzE5MV1bbV0pO2Zvcih4'@;
put 'WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4OFx1NjEyN1x1NmU4'@;
put 'M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1'@;
put 'NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1Nzhj'@;
put 'YVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1'@;
put 'NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTJdW21dXT00OTE1MittLEZbNDkxNTIrbV09eFsx'@;
put 'OTJdW21dKTtmb3IoeFsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1'@;
put 'ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZc'@;
put 'dTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3'@;
put 'MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZc'@;
put 'dTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkzXVttXV09NDk0MDgrbSxG'@;
put 'WzQ5NDA4K21dPXhbMTkzXVttXSk7Zm9yKHhbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVl'@;
put 'XHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4'@;
put 'ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2Ni'@;
put 'XHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NF1b'@;
put 'bV1dPTQ5NjY0K20sRls0OTY2NCttXT14WzE5NF1bbV0pO2Zvcih4WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3'@;
put 'Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1'@;
put 'OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUx'@;
put 'MVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk1XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxOTVdW21dXT00OTkyMCttLEZbNDk5MjArbV09eFsxOTVdW21dKTtmb3IoeFsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRl'@;
put 'YTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVc'@;
put 'dTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYz'@;
put 'N2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Nl1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTk2XVttXV09NTAxNzYrbSxGWzUwMTc2K21dPXhbMTk2XVttXSk7Zm9yKHhbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3'@;
put 'Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0'@;
put 'XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3'@;
put 'MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk3XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxOTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5N11bbV1dPTUwNDMyK20sRls1MDQzMittXT14WzE5N11bbV0pO2Zvcih4WzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1'@;
put 'NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVj'@;
put 'Nlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1'@;
put 'NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OF0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTk4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOThdW21dXT01MDY4OCttLEZbNTA2ODgrbV09eFsxOThdW21dKTtmb3IoeFsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNc'@;
put 'dTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0'@;
put 'YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2Vc'@;
put 'dTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxOTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk5XVttXV09NTA5NDQrbSxGWzUwOTQ0K21dPXhbMTk5XVttXSk7Zm9yKHhbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYz'@;
put 'XHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1'@;
put 'OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1'@;
put 'XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMjAwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMF1bbV1dPTUxMjAwK20sRls1MTIwMCttXT14WzIwMF1bbV0pO2Zvcih4WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3'@;
put 'Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1'@;
put 'NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2'@;
put 'Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1'@;
put 'N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDFdW21dXT01MTQ1NittLEZbNTE0NTYrbV09eFsyMDFdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1'@;
put 'YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNc'@;
put 'dTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3'@;
put 'YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVc'@;
put 'dTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAyXVttXV09NTE3MTIrbSxGWzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1'@;
put 'ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZh'@;
put 'XHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1'@;
put 'YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQw'@;
put 'XHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwM11bbV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1'@;
put 'ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2'@;
put 'NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1'@;
put 'OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1Nzcz'@;
put 'YVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtm'@;
put 'b3IoeFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdc'@;
put 'dTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkw'@;
put 'MTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2Vc'@;
put 'dTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTcz'@;
put 'OGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21d'@;
put 'PXhbMjA1XVttXSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2'@;
put 'ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGVi'@;
put 'XHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4'@;
put 'YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2'@;
put 'K20sRls1MjczNittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1'@;
put 'ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2'@;
put 'OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1'@;
put 'NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsy'@;
put 'MDddW21dXT01Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3Zjlc'@;
put 'dTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3'@;
put 'NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRc'@;
put 'dTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFk'@;
put 'XHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4'@;
put 'NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJm'@;
put 'XHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDld'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3'@;
put 'NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1'@;
put 'ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMw'@;
put 'YVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4'@;
put 'OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlc'@;
put 'dTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRl'@;
put 'ODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjExXVttXSk7Zm9yKHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4'@;
put 'Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQx'@;
put 'XHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2'@;
put 'N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1NDI3MittXT14WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1'@;
put 'N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1'@;
put 'Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1'@;
put 'NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21dXT01NDUyOCttLEZbNTQ1MjgrbV09eFsyMTNdW21dKTtmb3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVc'@;
put 'dTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUy'@;
put 'MzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRc'@;
put 'dTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0'@;
put 'ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE0XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEz'@;
put 'XHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1'@;
put 'NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcw'@;
put 'XHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0'@;
put 'NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1'@;
put 'ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0'@;
put 'Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1'@;
put 'NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTdd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRm'@;
put 'M2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZc'@;
put 'dTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZj'@;
put 'M2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJc'@;
put 'dTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVtt'@;
put 'XSk7Zm9yKHhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWM3XHU1'@;
put 'MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVl'@;
put 'XHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4'@;
put 'YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIw'@;
put 'XHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgw'@;
put 'OCttXT14WzIxOF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIw'@;
put 'ZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1'@;
put 'NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5'@;
put 'M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01'@;
put 'NjA2NCttLEZbNTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgy'@;
put 'ODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlc'@;
put 'dTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgz'@;
put 'OWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjIwXVttXV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4'@;
put 'Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2Mw'@;
put 'XHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4'@;
put 'NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1'@;
put 'ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0'@;
put 'Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1'@;
put 'NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjIyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZc'@;
put 'dTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0'@;
put 'NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJc'@;
put 'dTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlm'@;
put 'XHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1'@;
put 'NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1Njdi'@;
put 'XHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5'@;
put 'OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1'@;
put 'NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZh'@;
put 'OFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTcz'@;
put 'MmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdc'@;
put 'dTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVm'@;
put 'Y2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2'@;
put 'MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5'@;
put 'XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2'@;
put 'YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2Qz'@;
put 'XHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1'@;
put 'NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRi'@;
put 'Zlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1'@;
put 'NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3'@;
put 'OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJc'@;
put 'dTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThm'@;
put 'YjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThc'@;
put 'dTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVj'@;
put 'NmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhb'@;
put 'MjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTk3XHU1OWNhXHU1OWFi'@;
put 'XHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1'@;
put 'YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVh'@;
put 'XHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5'@;
put 'YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIz'@;
put 'MF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Vh'@;
put 'ZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1'@;
put 'N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2Yz'@;
put 'Mlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1'@;
put 'NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZb'@;
put 'NTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNc'@;
put 'dTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3'@;
put 'ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlc'@;
put 'dTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVtt'@;
put 'XV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2'@;
put 'XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2'@;
put 'YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4Zjcx'@;
put 'XHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUx'@;
put 'M1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1'@;
put 'NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODlj'@;
put 'Zlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZj'@;
put 'MmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJc'@;
put 'dTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgx'@;
put 'NWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4'@;
put 'OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMx'@;
put 'XHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2'@;
put 'MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0pO2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1'@;
put 'NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2'@;
put 'ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1'@;
put 'NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRc'@;
put 'dTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0'@;
put 'OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZc'@;
put 'dTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZk'@;
put 'XHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5'@;
put 'NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYx'@;
put 'XHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3'@;
put 'YTE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOV1bbV1dPTYxMTg0K20sRls2MTE4NCttXT14WzIzOV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5'@;
put 'M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1'@;
put 'OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVh'@;
put 'M1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1'@;
put 'NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDBdW21dXT02MTQ0MCttLEZbNjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2'@;
put 'MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRc'@;
put 'dTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5'@;
put 'MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlc'@;
put 'dTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQxXVttXV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5'@;
put 'ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2'@;
put 'XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4'@;
put 'NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4Nzdj'@;
put 'XHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zv'@;
put 'cih4WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdjNlx1ODc4OFx1'@;
put 'ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2Yz'@;
put 'Nlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1'@;
put 'N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2Jk'@;
put 'YVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09'@;
put 'eFsyNDNdW21dKTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgy'@;
put 'NGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdc'@;
put 'dTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThk'@;
put 'OTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQr'@;
put 'bSxGWzYyNDY0K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5'@;
put 'ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZk'@;
put 'XHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4'@;
put 'ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0'@;
put 'NV1bbV1dPTYyNzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1'@;
put 'OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4'@;
put 'N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1'@;
put 'OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZc'@;
put 'dTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5'@;
put 'MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJc'@;
put 'dTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7cmV0dXJue2VuYzphZSxkZWM6Rn19KCksSWVbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBl'@;
put 'XHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+'@;
put 'XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJc'@;
put 'eGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAx'@;
put 'MzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVc'@;
put 'dTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4'@;
put 'ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwNzld'@;
put 'PWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6'@;
put 'Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYx'@;
put 'XHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIy'@;
put 'Ylx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4'@;
put 'YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJk'@;
put 'Ylx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEwMDgxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4'@;
put 'MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xc'@;
put 'XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhm'@;
put 'Y1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4'@;
put 'YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAy'@;
put 'MVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsYWU9W10seD17fSxt'@;
put 'PTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc'@;
put 'dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3Bx'@;
put 'cnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0'@;
put 'XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2Rc'@;
put 'eGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4'@;
put 'ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLGF0LmV4cG9ydHMmJnR5cGVv'@;
put 'ZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKGF0LmV4cG9ydHM9SWUpLGZ1bmN0aW9uKEYsYWUpeyJ1c2Ugc3RyaWN0IjtpZih0eXBlb2YgSWU+InUiKXt2YXIgeD1JZTthdC5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSI/YXQuZXhwb3J0cz1hZSh4KTpG'@;
put 'LmNwdGFibGU9YWUoeCl9ZWxzZSBJZT1hZShJZSl9KHRoaXMsZnVuY3Rpb24oRil7InVzZSBzdHJpY3QiO3ZhciBhZT17MTIwMDoidXRmMTZsZSIsMTIwMToidXRmMTZiZSIsMTJlMzoidXRmMzJsZSIsMTIwMDE6InV0ZjMyYmUiLDE2OTY5OiJ1dGY2NGxlIiwyMDEyNzoiYXNjaWkiLDY1ZTM6'@;
put 'InV0ZjciLDY1MDAxOiJ1dGY4In0seD1bODc0LDEyNTAsMTI1MSwxMjUyLDEyNTMsMTI1NCwxMjU1LDEyNTYsMWU0XSxtPVs5MzIsOTM2LDk0OSw5NTBdLGxlPVs2NTAwMV0sTT17fSxPPXt9LFI9e30sej17fSxLPWZ1bmN0aW9uKFMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFMpfSxJ'@;
put 'PWZ1bmN0aW9uKFMpe3JldHVybiBTLmNoYXJDb2RlQXQoMCl9LGs9dHlwZW9mIEJ1ZmZlcjwidSIsRT1mdW5jdGlvbigpe307aWYoayl7dmFyIGo9IUJ1ZmZlci5mcm9tO2lmKCFqKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2o9ITB9RT1qP2Z1bmN0aW9uKEMsUyl7cmV0'@;
put 'dXJuIFM/bmV3IEJ1ZmZlcihDLFMpOm5ldyBCdWZmZXIoQyl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBCdWZmZXIoQyl9KTt2YXIgVj0xMDI0LEI9QnVmZmVyLmFsbG9jVW5z'@;
put 'YWZlKFYpLFg9ZnVuY3Rpb24oUyl7dmFyIHY9ZnVuY3Rpb24oUyl7Zm9yKHZhciB2PUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNikscD0wO3A8NjU1MzY7KytwKXZbcF09MDtmb3IodmFyIHc9T2JqZWN0LmtleXMoUyksSj13Lmxlbmd0aCxuZT0wLGRlPXdbbmVdO25lPEo7KytuZSkoZGU9d1tu'@;
put 'ZV0pJiYodltkZS5jaGFyQ29kZUF0KDApXT1TW2RlXSk7cmV0dXJuIHZ9KEZbU10uZW5jKTtyZXR1cm4gZnVuY3Rpb24odyxKKXt2YXIgZGUsbmU9dy5sZW5ndGgsZmU9MCx4ZT0wLExlPTAsRmU9MDtpZigic3RyaW5nIj09dHlwZW9mIHcpZm9yKGRlPUJ1ZmZlci5hbGxvY1Vuc2FmZShuZSks'@;
put 'ZmU9MDtmZTxuZTsrK2ZlKWRlW2ZlXT12W3cuY2hhckNvZGVBdChmZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKHcpKXtmb3IoZGU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqbmUpLHhlPTAsZmU9MDtmZTxuZTsrK2ZlKShMZT13W2ZlXSk8MTI4P2RlW3hlKytdPXZbTGVdOkxlPDIyND8oZGVb'@;
put 'eGUrK109dlsoKDMxJkxlKTw8NikrKDYzJndbZmUrMV0pXSwrK2ZlKTpMZTwyNDA/KGRlW3hlKytdPXZbKCgxNSZMZSk8PDEyKSsoKDYzJndbZmUrMV0pPDw2KSsoNjMmd1tmZSsyXSldLGZlKz0yKTooRmU9KCg3JkxlKTw8MTgpKygoNjMmd1tmZSsxXSk8PDEyKSsoKDYzJndbZmUrMl0pPDw2'@;
put 'KSsoNjMmd1tmZSszXSksZmUrPTMsRmU8NjU1MzY/ZGVbeGUrK109dltGZV06KGRlW3hlKytdPXZbNTUyOTYrKChGZS09NjU1MzYpPj4xMCYxMDIzKV0sZGVbeGUrK109dls1NjMyMCsoMTAyMyZGZSldKSk7ZGU9ZGUuc2xpY2UoMCx4ZSl9ZWxzZSBmb3IoZGU9QnVmZmVyLmFsbG9jVW5zYWZl'@;
put 'KG5lKSxmZT0wO2ZlPG5lOysrZmUpZGVbZmVdPXZbd1tmZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIEomJiJidWYiIT09Sj8iYXJyIiE9PUo/ZGUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoZGUpOmRlfX0sVT1mdW5jdGlvbihTKXt2YXIgdj1GW1NdLmRlYyxwPUJ1ZmZlci5h'@;
put 'bGxvY1Vuc2FmZSgxMzEwNzIpLHc9MCxKPSIiO2Zvcih3PTA7dzx2Lmxlbmd0aDsrK3cpaWYoSj12W3ddKXt2YXIgbmU9Si5jaGFyQ29kZUF0KDApO3BbMip3XT0yNTUmbmUscFsyKncrMV09bmU+Pjh9cmV0dXJuIGZ1bmN0aW9uKGZlKXt2YXIgeGU9ZmUubGVuZ3RoLExlPTAsRmU9MDtpZigy'@;
put 'KnhlPlYmJihWPTIqeGUsQj1CdWZmZXIuYWxsb2NVbnNhZmUoVikpLEJ1ZmZlci5pc0J1ZmZlcihmZSkpZm9yKExlPTA7TGU8eGU7TGUrKylCWzIqTGVdPXBbRmU9MipmZVtMZV1dLEJbMipMZSsxXT1wW0ZlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBmZSlmb3IoTGU9MDtMZTx4ZTtM'@;
put 'ZSsrKUZlPTIqZmUuY2hhckNvZGVBdChMZSksQlsyKkxlXT1wW0ZlXSxCWzIqTGUrMV09cFtGZSsxXTtlbHNlIGZvcihMZT0wO0xlPHhlO0xlKyspQlsyKkxlXT1wW0ZlPTIqZmVbTGVdXSxCWzIqTGUrMV09cFtGZSsxXTtyZXR1cm4gQi5zbGljZSgwLDIqeGUpLnRvU3RyaW5nKCJ1Y3MyIil9'@;
put 'fSxxPWZ1bmN0aW9uKFMpe2Zvcih2YXIgdj1GW1NdLmVuYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLHc9MDt3PDEzMTA3MjsrK3cpcFt3XT0wO2Zvcih2YXIgSj1PYmplY3Qua2V5cyh2KSxuZT0wLGRlPUpbbmVdO25lPEoubGVuZ3RoOysrbmUpaWYoZGU9SltuZV0pe3ZhciBmZT1k'@;
put 'ZS5jaGFyQ29kZUF0KDApO3BbMipmZV09MjU1JnZbZGVdLHBbMipmZSsxXT12W2RlXT4+OH1yZXR1cm4gZnVuY3Rpb24oTGUsRmUpe3ZhciBPZT1MZS5sZW5ndGgsamU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqT2UpLFdlPTAsS2U9MCxZZT0wLFFlPTAsbHQ9MDtpZigic3RyaW5nIj09dHlwZW9m'@;
put 'IExlKXtmb3IoV2U9UWU9MDtXZTxPZTsrK1dlKUtlPTIqTGUuY2hhckNvZGVBdChXZSksamVbUWUrK109cFtLZSsxXXx8cFtLZV0scFtLZSsxXT4wJiYoamVbUWUrK109cFtLZV0pO2plPWplLnNsaWNlKDAsUWUpfWVsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKExlKSl7Zm9yKFdlPVFlPTA7V2U8'@;
put 'T2U7KytXZSkobHQ9TGVbV2VdKTwxMjg/S2U9bHQ6bHQ8MjI0PyhLZT0oKDMxJmx0KTw8NikrKDYzJkxlW1dlKzFdKSwrK1dlKTpsdDwyNDA/KEtlPSgoMTUmbHQpPDwxMikrKCg2MyZMZVtXZSsxXSk8PDYpKyg2MyZMZVtXZSsyXSksV2UrPTIpOihLZT0oKDcmbHQpPDwxOCkrKCg2MyZMZVtX'@;
put 'ZSsxXSk8PDEyKSsoKDYzJkxlW1dlKzJdKTw8NikrKDYzJkxlW1dlKzNdKSxXZSs9MyksS2U8NjU1MzY/KGplW1FlKytdPXBbMSsoS2UqPTIpXXx8cFtLZV0scFtLZSsxXT4wJiYoamVbUWUrK109cFtLZV0pKTooamVbUWUrK109cFsxKyhLZT0yKig1NTI5NisoKFllPUtlLTY1NTM2KT4+MTAm'@;
put 'MTAyMykpKV18fHBbS2VdLHBbS2UrMV0+MCYmKGplW1FlKytdPXBbS2VdKSxqZVtRZSsrXT1wWzErKEtlPTIqKDU2MzIwKygxMDIzJlllKSkpXXx8cFtLZV0scFtLZSsxXT4wJiYoamVbUWUrK109cFtLZV0pKTtqZT1qZS5zbGljZSgwLFFlKX1lbHNlIGZvcihXZT1RZT0wO1dlPE9lO1dlKysp'@;
put 'S2U9MipMZVtXZV0uY2hhckNvZGVBdCgwKSxqZVtRZSsrXT1wW0tlKzFdfHxwW0tlXSxwW0tlKzFdPjAmJihqZVtRZSsrXT1wW0tlXSk7cmV0dXJuIEZlJiYiYnVmIiE9PUZlPyJhcnIiIT09RmU/amUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoamUpOmplfX0sZWU9ZnVuY3Rp'@;
put 'b24oUyl7dmFyIEosdj1GW1NdLmRlYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLHc9MCxuZT0wLGRlPTAsZmU9MDtmb3IoZmU9MDtmZTw2NTUzNjsrK2ZlKXBbMipmZV09MjU1LHBbMipmZSsxXT0yNTM7Zm9yKHc9MDt3PHYubGVuZ3RoOysrdykoSj12W3ddKSYmKG5lPUouY2hhckNv'@;
put 'ZGVBdCgwKSxwW2RlPTIqd109MjU1Jm5lLHBbZGUrMV09bmU+PjgpO3JldHVybiBmdW5jdGlvbihMZSl7dmFyIEZlPUxlLmxlbmd0aCxPZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipGZSksamU9MCxXZT0wLEtlPTA7aWYoQnVmZmVyLmlzQnVmZmVyKExlKSlmb3IoamU9MDtqZTxGZTtqZSsrKTI1'@;
put 'NT09PXBbV2U9MipMZVtqZV1dJiYyNTM9PT1wW1dlKzFdJiYoV2U9MiooKExlW2plXTw8OCkrTGVbamUrMV0pLCsramUpLE9lW0tlKytdPXBbV2VdLE9lW0tlKytdPXBbV2UrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIExlKWZvcihqZT0wO2plPEZlO2plKyspV2U9MipMZS5jaGFyQ29k'@;
put 'ZUF0KGplKSwyNTU9PT1wW1dlXSYmMjUzPT09cFtXZSsxXSYmKFdlPTIqKChMZS5jaGFyQ29kZUF0KGplKTw8OCkrTGUuY2hhckNvZGVBdChqZSsxKSksKytqZSksT2VbS2UrK109cFtXZV0sT2VbS2UrK109cFtXZSsxXTtlbHNlIGZvcihqZT0wO2plPEZlO2plKyspMjU1PT09cFtXZT0yKkxl'@;
put 'W2plXV0mJjI1Mz09PXBbV2UrMV0mJihXZT0yKigoTGVbamVdPDw4KStMZVtqZSsxXSksKytqZSksT2VbS2UrK109cFtXZV0sT2VbS2UrK109cFtXZSsxXTtyZXR1cm4gT2Uuc2xpY2UoMCxLZSkudG9TdHJpbmcoInVjczIiKX19O01bNjUwMDFdPWZ1bmN0aW9uIEMoUyl7aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiBTKXJldHVybiBDKFMuc3BsaXQoIiIpLm1hcChJKSk7dmFyIHY9Uy5sZW5ndGgscD0wLHc9MDs0KnY+ViYmKFY9NCp2LEI9QnVmZmVyLmFsbG9jVW5zYWZlKFYpKTt2YXIgSj0wO3Y+PTMmJjIzOT09U1swXSYmMTg3PT1TWzFdJiYxOTE9PVNbMl0mJihKPTMpO2Zvcih2YXIgbmU9'@;
put 'MSxkZT0wLGZlPTA7Sjx2O0orPW5lKW5lPTEsKGZlPVNbSl0pPDEyOD9wPWZlOmZlPDIyND8ocD02NCooMzEmZmUpKyg2MyZTW0orMV0pLG5lPTIpOmZlPDI0MD8ocD0oKDE1JmZlKTw8MTIpKzY0Kig2MyZTW0orMV0pKyg2MyZTW0orMl0pLG5lPTMpOihwPTI2MjE0NCooNyZmZSkrKCg2MyZT'@;
put 'W0orMV0pPDwxMikrNjQqKDYzJlNbSisyXSkrKDYzJlNbSiszXSksbmU9NCkscDw2NTUzNj8oQltkZSsrXT0yNTUmcCxCW2RlKytdPXA+PjgpOih3PTU1Mjk2KygocC09NjU1MzYpPj4xMCYxMDIzKSxwPTU2MzIwKygxMDIzJnApLEJbZGUrK109MjU1JncsQltkZSsrXT13Pj4+OCxCW2RlKytd'@;
put 'PTI1NSZwLEJbZGUrK109cD4+PjgmMjU1KTtyZXR1cm4gQi5zbGljZSgwLGRlKS50b1N0cmluZygidWNzMiIpfSxPWzY1MDAxXT1mdW5jdGlvbihTLHYpe2lmKGsmJkJ1ZmZlci5pc0J1ZmZlcihTKSlyZXR1cm4gdiYmImJ1ZiIhPT12PyJhcnIiIT09dj9TLnRvU3RyaW5nKCJiaW5hcnkiKTpb'@;
put 'XS5zbGljZS5jYWxsKFMpOlM7dmFyIHA9Uy5sZW5ndGgsdz0wLEo9MCxuZT0wLGRlPSJzdHJpbmciPT10eXBlb2YgUzs0KnA+ViYmKFY9NCpwLEI9QnVmZmVyLmFsbG9jVW5zYWZlKFYpKTtmb3IodmFyIGZlPTA7ZmU8cDsrK2ZlKSh3PWRlP1MuY2hhckNvZGVBdChmZSk6U1tmZV0uY2hhckNv'@;
put 'ZGVBdCgwKSk8PTEyNz9CW25lKytdPXc6dzw9MjA0Nz8oQltuZSsrXT0xOTIrKHc+PjYpLEJbbmUrK109MTI4Kyg2MyZ3KSk6dz49NTUyOTYmJnc8PTU3MzQzPyh3LT01NTI5NiwrK2ZlLEo9KGRlP1MuY2hhckNvZGVBdChmZSk6U1tmZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKHc8PDEwKSxC'@;
put 'W25lKytdPTI0MCsoSj4+PjE4JjcpLEJbbmUrK109MTQ0KyhKPj4+MTImNjMpLEJbbmUrK109MTI4KyhKPj4+NiY2MyksQltuZSsrXT0xMjgrKDYzJkopKTooQltuZSsrXT0yMjQrKHc+PjEyKSxCW25lKytdPTEyOCsodz4+NiY2MyksQltuZSsrXT0xMjgrKDYzJncpKTtyZXR1cm4gdiYmImJ1'@;
put 'ZiIhPT12PyJhcnIiIT09dj9CLnNsaWNlKDAsbmUpLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKEIsMCxuZSk6Qi5zbGljZSgwLG5lKX19dmFyIHRlPWZ1bmN0aW9uKCl7aWYoayl7aWYoUlt4WzBdXSlyZXR1cm47dmFyIFM9MCx2PTA7Zm9yKFM9MDtTPHgubGVuZ3RoOysrUylG'@;
put 'W3Y9eFtTXV0mJihSW3ZdPVUodikselt2XT1YKHYpKTtmb3IoUz0wO1M8bS5sZW5ndGg7KytTKUZbdj1tW1NdXSYmKFJbdl09ZWUodikselt2XT1xKHYpKTtmb3IoUz0wO1M8bGUubGVuZ3RoOysrUylNW3Y9bGVbU11dJiYoUlt2XT1NW3ZdKSxPW3ZdJiYoelt2XT1PW3ZdKX19LG9lPWZ1bmN0'@;
put 'aW9uKEMsUyl7cmV0dXJuIiJ9LHNlPWZ1bmN0aW9uKFMpe2RlbGV0ZSBSW1NdLGRlbGV0ZSB6W1NdfSx1ZT17ZW5jYWNoZTp0ZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoayl7aWYoIVJbeFswXV0pcmV0dXJuO3guZm9yRWFjaChzZSksbS5mb3JFYWNoKHNlKSxsZS5mb3JFYWNoKHNlKX1iPW9l'@;
put 'LEQ9MH0sc2Jjczp4LGRiY3M6bX07dGUoKTt2YXIgY2U9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGI9b2UsRD0wO3JldHVybiBGLnV0aWxzPXtkZWNvZGU6ZnVuY3Rpb24gQyhTLHYpe3ZhciBwO2lmKHA9UltTXSly'@;
put 'ZXR1cm4gcCh2KTtpZigic3RyaW5nIj09dHlwZW9mIHYpcmV0dXJuIEMoUyx2LnNwbGl0KCIiKS5tYXAoSSkpO3ZhciBqZSx3PXYubGVuZ3RoLEo9bmV3IEFycmF5KHcpLG5lPSIiLGRlPTAsZmU9MCx4ZT0xLExlPTAsRmU9MCxPZT1GW1NdLFdlPSIiO2lmKE9lJiYoamU9T2UuZGVjKSlmb3Io'@;
put 'ZmU9MDtmZTx3O2ZlKz14ZSl7aWYoeGU9MiwobmU9amVbKHZbZmVdPDw4KSt2W2ZlKzFdXSl8fCh4ZT0xLG5lPWplW3ZbZmVdXSksIW5lKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIrdltmZV0rIiAiK3ZbZmUreGUtMV0rIiAiK2ZlKyIgIit4ZSsiICIramVbdltmZV1d'@;
put 'KTtKW0xlKytdPW5lfWVsc2V7aWYoIShXZT1hZVtTXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIrUyk7c3dpdGNoKFdlKXtjYXNlInV0ZjgiOmZvcih3Pj0zJiYyMzk9PXZbMF0mJjE4Nz09dlsxXSYmMTkxPT12WzJdJiYoZmU9Myk7ZmU8dztmZSs9eGUpeGU9MSx2W2Zl'@;
put 'XTwxMjg/ZGU9dltmZV06dltmZV08MjI0PyhkZT02NCooMzEmdltmZV0pKyg2MyZ2W2ZlKzFdKSx4ZT0yKTp2W2ZlXTwyNDA/KGRlPSgoMTUmdltmZV0pPDwxMikrNjQqKDYzJnZbZmUrMV0pKyg2MyZ2W2ZlKzJdKSx4ZT0zKTooZGU9MjYyMTQ0Kig3JnZbZmVdKSsoKDYzJnZbZmUrMV0pPDwx'@;
put 'MikrNjQqKDYzJnZbZmUrMl0pKyg2MyZ2W2ZlKzNdKSx4ZT00KSxkZTw2NTUzNnx8KEZlPTU1Mjk2KygoZGUtPTY1NTM2KT4+MTAmMTAyMyksZGU9NTYzMjArKDEwMjMmZGUpLEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShGZSkpLEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShkZSk7'@;
put 'YnJlYWs7Y2FzZSJhc2NpaSI6aWYoayYmQnVmZmVyLmlzQnVmZmVyKHYpKXJldHVybiB2LnRvU3RyaW5nKFdlKTtmb3IoZmU9MDtmZTx3O2ZlKyspSltmZV09U3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlXSk7TGU9dzticmVhaztjYXNlInV0ZjE2bGUiOmlmKHc+PTImJjI1NT09dlswXSYmMjU0'@;
put 'PT12WzFdJiYoZmU9MiksayYmQnVmZmVyLmlzQnVmZmVyKHYpKXJldHVybiB2LnRvU3RyaW5nKFdlKTtmb3IoeGU9MjtmZSsxPHc7ZmUrPXhlKUpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgodltmZSsxXTw8OCkrdltmZV0pO2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKHc+PTImJjI1ND09'@;
put 'dlswXSYmMjU1PT12WzFdJiYoZmU9MikseGU9MjtmZSsxPHc7ZmUrPXhlKUpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgodltmZV08PDgpK3ZbZmUrMV0pO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKHc+PTQmJjI1NT09dlswXSYmMjU0PT12WzFdJiYwPT09dlsyXSYmMD09PXZbM10mJihm'@;
put 'ZT00KSx4ZT00O2ZlPHc7ZmUrPXhlKShkZT0odltmZSszXTw8MjQpKyh2W2ZlKzJdPDwxNikrKHZbZmUrMV08PDgpK3ZbZmVdKT42NTUzNT8oZGUtPTY1NTM2LEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZGU+PjEwJjEwMjMpKSxKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNv'@;
put 'ZGUoNTYzMjArKDEwMjMmZGUpKSk6SltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGRlKTticmVhaztjYXNlInV0ZjMyYmUiOmZvcih3Pj00JiYyNTU9PXZbM10mJjI1ND09dlsyXSYmMD09PXZbMV0mJjA9PT12WzBdJiYoZmU9NCkseGU9NDtmZTx3O2ZlKz14ZSkoZGU9KHZbZmVdPDwyNCkr'@;
put 'KHZbZmUrMV08PDE2KSsodltmZSsyXTw8OCkrdltmZSszXSk+NjU1MzU/KGRlLT02NTUzNixKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGRlPj4xMCYxMDIzKSksSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmRlKSkpOkpbTGUrK109U3RyaW5nLmZy'@;
put 'b21DaGFyQ29kZShkZSk7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3Iodz49NCYmNDM9PXZbMF0mJjQ3PT12WzFdJiYxMTg9PXZbMl0mJih3Pj01JiY1Nj09dlszXSYmNDU9PXZbNF0/ZmU9NTooNTY9PXZbM118fDU3PT12WzNdfHw0Mz09dlszXXx8NDc9PXZbM10pJiYoZmU9NCkpO2ZlPHc7ZmUrPXhl'@;
put 'KWlmKDQzPT09dltmZV0paWYoeGU9MSw0NSE9PXZbZmUrMV0pe2Zvcig7U3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK3hlXSkubWF0Y2goL1tBLVphLXowLTkrXC9dLyk7KXhlKys7dmFyIEtlPTA7NDU9PT12W2ZlK3hlXSYmKCsreGUsS2U9MSk7Zm9yKHZhciBZZT1bXSxRZT0iIixBZT0wLFRl'@;
put 'PTAscWU9MCxYZT0wLFVlPTE7VWU8eGUtS2UmJihBZT1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUodltmZStVZSsrXSkpLFRlPWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK1VlKytdKSksWWUucHVzaChBZTw8MnxUZT4+NCksLTEhPT0ocWU9Y2UuaW5kZXhPZihT'@;
put 'dHJpbmcuZnJvbUNoYXJDb2RlKHZbZmUrVWUrK10pKSkmJihZZS5wdXNoKCgxNSZUZSk8PDR8cWU+PjIpLC0xIT09KFhlPWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK1VlKytdKSkpKSk7KVhlPDY0JiZZZS5wdXNoKCgzJnFlKTw8NnxYZSk7Zm9yKFFlPUMoMTIwMSxZZSks'@;
put 'VWU9MDtVZTxRZS5sZW5ndGg7KytVZSlKW0xlKytdPVFlLmNoYXJBdChVZSl9ZWxzZSB4ZT0yLEpbTGUrK109IisiO2Vsc2UgeGU9MSxKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUodltmZV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitT'@;
put 'KyIgIithZVtTXSl9fXJldHVybiBKLnNsaWNlKDAsTGUpLmpvaW4oIiIpfSxlbmNvZGU6ZnVuY3Rpb24gQyhTLHYscCl7aWYoUz09PUQmJmIpcmV0dXJuIGIodixwKTtpZih6W1NdKXJldHVybihiPXpbRD1TXSkodixwKTtrJiZCdWZmZXIuaXNCdWZmZXIodikmJih2PXYudG9TdHJpbmcoInV0'@;
put 'ZjgiKSk7dmFyIEZlLHc9di5sZW5ndGgsSj1rP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KncpOltdLG5lPTAsZGU9MCxmZT0wLHhlPTAsTGU9RltTXSxPZT0iIixqZT0ic3RyaW5nIj09dHlwZW9mIHY7aWYoTGUmJihGZT1MZS5lbmMpKWZvcihkZT0wO2RlPHc7KytkZSwrK2ZlKShuZT1GZVtqZT92'@;
put 'LmNoYXJBdChkZSk6dltkZV1dKT4yNTU/KEpbZmVdPW5lPj44LEpbKytmZV09MjU1Jm5lKTpKW2ZlXT0yNTUmbmU7ZWxzZXtpZighKE9lPWFlW1NdKSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDogIitTKTtzd2l0Y2goT2Upe2Nhc2UidXRmOCI6aWYoayYmamUpe2ZlPShKPUUo'@;
put 'dixPZSkpLmxlbmd0aDticmVha31mb3IoZGU9MDtkZTx3OysrZGUsKytmZSkobmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKTw9MTI3P0pbZmVdPW5lOm5lPD0yMDQ3PyhKW2ZlXT0xOTIrKG5lPj42KSxKWysrZmVdPTEyOCsoNjMmbmUpKTpuZT49NTUyOTYmJm5l'@;
put 'PD01NzM0Mz8obmUtPTU1Mjk2LHhlPShqZT92LmNoYXJDb2RlQXQoKytkZSk6dlsrK2RlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsobmU8PDEwKSxKW2ZlXT0yNDArKHhlPj4+MTgmNyksSlsrK2ZlXT0xNDQrKHhlPj4+MTImNjMpLEpbKytmZV09MTI4Kyh4ZT4+PjYmNjMpLEpbKytmZV09MTI4'@;
put 'Kyg2MyZ4ZSkpOihKW2ZlXT0yMjQrKG5lPj4xMiksSlsrK2ZlXT0xMjgrKG5lPj42JjYzKSxKWysrZmVdPTEyOCsoNjMmbmUpKTticmVhaztjYXNlImFzY2lpIjppZihrJiYic3RyaW5nIj09dHlwZW9mIHYpe2ZlPShKPUUodixPZSkpLmxlbmd0aDticmVha31mb3IoZGU9MDtkZTx3OysrZGUs'@;
put 'KytmZSl7aWYoISgobmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKTw9MTI3KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBhc2NpaSAiK25lKTtKW2ZlXT1uZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKGsmJiJzdHJpbmciPT10eXBlb2Ygdil7ZmU9KEo9RSh2LE9lKSku'@;
put 'bGVuZ3RoO2JyZWFrfWZvcihkZT0wO2RlPHc7KytkZSluZT1qZT92LmNoYXJDb2RlQXQoZGUpOnZbZGVdLmNoYXJDb2RlQXQoMCksSltmZSsrXT0yNTUmbmUsSltmZSsrXT1uZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihkZT0wO2RlPHc7KytkZSluZT1qZT92LmNoYXJDb2RlQXQoZGUp'@;
put 'OnZbZGVdLmNoYXJDb2RlQXQoMCksSltmZSsrXT1uZT4+OCxKW2ZlKytdPTI1NSZuZTticmVhaztjYXNlInV0ZjMybGUiOmZvcihkZT0wO2RlPHc7KytkZSkobmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2Kyhu'@;
put 'ZS01NTI5Njw8MTApKyh2WysrZGVdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxKW2ZlKytdPTI1NSZuZSxKW2ZlKytdPTI1NSYobmU+Pj04KSxKW2ZlKytdPTI1NSYobmU+Pj04KSxKW2ZlKytdPTI1NSYobmU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihkZT0wO2RlPHc7KytkZSkobmU9'@;
put 'amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyh2WysrZGVdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxKW2ZlKzNdPTI1NSZuZSxKW2ZlKzJdPTI1NSYobmU+Pj04KSxKW2ZlKzFdPTI1NSYo'@;
put 'bmU+Pj04KSxKW2ZlXT0yNTUmKG5lPj49OCksZmUrPTQ7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoZGU9MDtkZTx3O2RlKyspe3ZhciBXZT1qZT92LmNoYXJBdChkZSk6dltkZV0uY2hhckF0KDApO2lmKCIrIiE9PVdlKWlmKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1u'@;
put 'b3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScoKSwtLi86PyIuaW5kZXhPZihXZSk+LTEpSltmZSsrXT1XZS5jaGFyQ29kZUF0KDApO2Vsc2V7dmFyIEtlPUMoMTIwMSxXZSk7SltmZSsrXT00MyxKW2ZlKytdPWNlLmNoYXJDb2RlQXQoS2VbMF0+PjIpLEpbZmUrK109Y2UuY2hhckNvZGVBdCgoKDMm'@;
put 'S2VbMF0pPDw0KSsoKEtlWzFdfHwwKT4+NCkpLEpbZmUrK109Y2UuY2hhckNvZGVBdCgoKDE1JktlWzFdKTw8MikrKChLZVsyXXx8MCk+PjYpKSxKW2ZlKytdPTQ1fWVsc2UgSltmZSsrXT00MyxKW2ZlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBt'@;
put 'YWdpYzogIitTKyIgIithZVtTXSl9fXJldHVybiBKPUouc2xpY2UoMCxmZSksaz9wJiYiYnVmIiE9PXA/ImFyciIhPT1wP0oudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoSik6Sjoic3RyIj09cD9KLm1hcChLKS5qb2luKCIiKTpKfSxoYXNjcDpmdW5jdGlvbihTKXtyZXR1cm4h'@;
put 'KCFGW1NdJiYhYWVbU10pfSxtYWdpYzphZSxjYWNoZTp1ZX0sRn0pfSw3NTQ0NjooYXQsSWUpPT57dmFyIEYsYWUseDshZnVuY3Rpb24obSl7aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKWF0LmV4cG9ydHM9bSgpO2Vsc2UgaWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+'@;
put 'InUiKUpTWmlwU3luYz1tKCksYWU9W10sdm9pZCAwIT09KHg9ImZ1bmN0aW9uIj09dHlwZW9mKEY9bSk/Ri5hcHBseShJZSxhZSk6RikmJihhdC5leHBvcnRzPXgpO2Vsc2V7dmFyIGxlO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9sZT1nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP2xlPXdp'@;
put 'bmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9sZT1nbG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9sZT0kLmdsb2JhbDp0eXBlb2Ygc2VsZjwidSImJihsZT1zZWxmKSxsZS5KU1ppcFN5bmM9bSgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gTyhSLHosSyl7ZnVuY3Rpb24gSShqLFYp'@;
put 'e2lmKCF6W2pdKXtpZighUltqXSl7aWYoaylyZXR1cm4gayhqLCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitqKyInIil9dmFyIFk9eltqXT17ZXhwb3J0czp7fX07UltqXVswXS5jYWxsKFkuZXhwb3J0cyxmdW5jdGlvbihYKXtyZXR1cm4gSShSW2pdWzFdW1hd'@;
put 'fHxYKX0sWSxZLmV4cG9ydHMsTyxSLHosSyl9cmV0dXJuIHpbal0uZXhwb3J0c31mb3IodmFyIGs9dm9pZCAwLEU9MDtFPEsubGVuZ3RoO0UrKylJKEtbRV0pO3JldHVybiBJfSh7MTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldY'@;
put 'WVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3ouZW5jb2RlPWZ1bmN0aW9uKEksayl7Zm9yKHZhciBqLFYsQixZLFgsVSxxLEU9IiIsZWU9MDtlZTxJLmxlbmd0aDspWT0oaj1JLmNoYXJDb2RlQXQoZWUrKykpPj4yLFg9KDMmaik8PDR8KFY9SS5jaGFyQ29kZUF0'@;
put 'KGVlKyspKT4+NCxVPSgxNSZWKTw8MnwoQj1JLmNoYXJDb2RlQXQoZWUrKykpPj42LHE9NjMmQixpc05hTihWKT9VPXE9NjQ6aXNOYU4oQikmJihxPTY0KSxFPUUrSy5jaGFyQXQoWSkrSy5jaGFyQXQoWCkrSy5jaGFyQXQoVSkrSy5jaGFyQXQocSk7cmV0dXJuIEV9LHouZGVjb2RlPWZ1bmN0'@;
put 'aW9uKEksayl7dmFyIFYsQixZLFgsVSxxLEU9IiIsZWU9MDtmb3IoST1JLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtlZTxJLmxlbmd0aDspWT1LLmluZGV4T2YoSS5jaGFyQXQoZWUrKykpLFY9KDE1JihYPUsuaW5kZXhPZihJLmNoYXJBdChlZSsrKSkpKTw8NHwoVT1LLmlu'@;
put 'ZGV4T2YoSS5jaGFyQXQoZWUrKykpKT4+MixCPSgzJlUpPDw2fChxPUsuaW5kZXhPZihJLmNoYXJBdChlZSsrKSkpLEUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWTw8MnxYPj40KSw2NCE9VSYmKEUrPVN0cmluZy5mcm9tQ2hhckNvZGUoVikpLDY0IT1xJiYoRSs9U3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZShCKSk7cmV0dXJuIEV9fSx7fV0sMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBLKCl7dGhpcy5jb21wcmVzc2VkU2l6ZT0wLHRoaXMudW5jb21wcmVzc2VkU2l6ZT0wLHRoaXMuY3JjMzI9MCx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPW51bGwsdGhpcy5jb21wcmVz'@;
put 'c2VkQ29udGVudD1udWxsfUsucHJvdG90eXBlPXtnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxSLmV4cG9ydHM9S30se31dLDM6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7ei5TVE9S'@;
put 'RT17bWFnaWM6IlwwXDAiLGNvbXByZXNzOmZ1bmN0aW9uKEspe3JldHVybiBLfSx1bmNvbXByZXNzOmZ1bmN0aW9uKEspe3JldHVybiBLfSxjb21wcmVzc0lucHV0VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sei5ERUZMQVRFPU8oIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4'@;
put 'fV0sNDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIiksST1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3ODgsMjU2NzUyNDc5NCwxMjQ2MzQxMzcsMTg4NjA1NzYxNSwzOTE1NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgzMjQsMzc3MjExNTIz'@;
put 'MCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwyMTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQyODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0MDg5MDE2NjQ4LDIyMjcwNjEyMTQsNDUwNTQ4ODYxLDE4NDMyNTg2MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwxNjg0Nzc3MTUyLDQy'@;
put 'NTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAyNzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5NTM4ODYsMzU3OTg1NTMzMiwyNzI0Njg4MjQyLDEwMDY4ODgxNDUsMTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAxMDk3NzIyLDExMTkw'@;
put 'MDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAxLDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5ODAsMTM3MzUwMzU0NiwzMzY5NTU0MzA0LDMyMTgxMDQ1OTgsNTY1NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2MzAzLDY3MTI2Njk3'@;
put 'NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAsMjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUsMTk5NDE0NjE5MiwzMTE1ODUzNCwyNTYzOTA3NzcyLDQwMjM3MTc5MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1MywzOTA0NDI3MDU5LDIw'@;
put 'MTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcyMTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUyNzEyOTcsMTgwMjE5NTQ0NCw0NzY4NjQ4NjYsMjIzODAwMTM2OCw0MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2MjUwMjUsNDExMTQ1'@;
put 'MTIyMywxNzA2MDg4OTAyLDMxNDA0MjcwNCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIsMTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMyMyw0MjI0OTk0NDA1LDEzMDM1MzU5NjAsOTg0OTYxNDg2LDI3NDcwMDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQzMTEsMjc2NTIxMDcz'@;
put 'MywzNTU0MDc5OTk1LDExMzEwMTQ1MDYsODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3NywyODUyODAxNjMxLDM3MDg2NDg2NDksMTM0MjUzMzk0OCw2NTQ0NTkzMDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDksNTQ0MTc5NjM1LDMx'@;
put 'MTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkxNjcxMDU0LDcwMjEzODc3NiwyOTY2NDYwNDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1NTE4NzMsMzA4MjY0MDQ0MywzMjMzNDQyOTg5LDM5ODgyOTIzODQsMjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4NDU5NDUsMjY0Nzgx'@;
put 'NjExMSw4MTQ3MDk5NywxOTQzODAzNTIzLDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwyMjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1LDI0NjY5MDYwMTMsMTY3ODE2NzQzLDIwOTc2NTEzNzcsNDAyNzU1MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0LDQxNTA0MTcyNDUs'@;
put 'MjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIzMTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4OTcwODE0MywyMzk0ODc3OTQ1LDM5NzkxNzc2MywxNjIyMTgzNjM3LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0MDA3NjYyNiwzNTE4'@;
put 'NzE5OTg1LDI3OTczNjA5OTksMTA2ODgyODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgxMjUxMiwzNzQ3NjcyMDAzLDI4MjUzNzk2NjksODI5MzI5MTM1LDExODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4NTQwOCwxMzgyNjA1'@;
put 'MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwzMzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0LDE1NTUyNjE5NTYsMzI2ODkzNTU5MSwzMDUwMzYwNjI1LDc1MjQ1OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAzMCwxOTY5OTIyOTcy'@;
put 'LDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1MjA4NjIyLDIxMzI2MTExMiwyNDYzMjcyNjAzLDM4NTU5OTAyODUsMjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3MjYwNjEwLDE3NTkz'@;
put 'NTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1NDEsNDEzOTMyOTExNSwxODczODM2MDAxLDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAzNjgsMTcxMTY4NDU1NCwyODUyODExMTYsMjQwNTgwMTcyNyw0MTY3MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4OTYsMzYwODAwNzQw'@;
put 'NiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwyODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIzMTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgsMzY1NDcwMzgzNiwxMDg4MzU5MjcwLDkzNjkxOGUzLDI4NDc3MTQ4OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5NywzMTgzMzQyMTA4LDM0'@;
put 'MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIxMjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4Mzc2MTQsMzI5NDcxMDQ1NiwxNTY3MTAzNzQ2LDcxMTkyODcyNCwzMDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUxNjcxMTddO1IuZXhw'@;
put 'b3J0cz1mdW5jdGlvbihFLGope2lmKHR5cGVvZiBFPiJ1Inx8IUUubGVuZ3RoKXJldHVybiAwO3ZhciBWPSJzdHJpbmciIT09Sy5nZXRUeXBlT2YoRSk7dHlwZW9mIGo+InUiJiYoaj0wKTt2YXIgWD0wO2pePS0xO2Zvcih2YXIgVT0wLHE9RS5sZW5ndGg7VTxxO1UrKylYPVY/RVtVXTpFLmNo'@;
put 'YXJDb2RlQXQoVSksaj1qPj4+OF5JWzI1NSYoal5YKV07cmV0dXJuLTFean19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdXRpbHMiKTtmdW5jdGlvbiBJKGspe3RoaXMuZGF0YT1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5pbmRl'@;
put 'eD0wfUkucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5jdGlvbihrKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtrKX0sY2hlY2tJbmRleDpmdW5jdGlvbihrKXtpZih0aGlzLmxlbmd0aDxrfHxrPDApdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0'@;
put 'aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXggPSAiK2srIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihrKXt0aGlzLmNoZWNrSW5kZXgoayksdGhpcy5pbmRleD1rfSxza2lwOmZ1bmN0aW9uKGspe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtrKX0sYnl0'@;
put 'ZUF0OmZ1bmN0aW9uKGspe30scmVhZEludDpmdW5jdGlvbihrKXt2YXIgaixFPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoayksaj10aGlzLmluZGV4K2stMTtqPj10aGlzLmluZGV4O2otLSlFPShFPDw4KSt0aGlzLmJ5dGVBdChqKTtyZXR1cm4gdGhpcy5pbmRleCs9ayxFfSxyZWFkU3RyaW5n'@;
put 'OmZ1bmN0aW9uKGspe3JldHVybiBLLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMucmVhZERhdGEoaykpfSxyZWFkRGF0YTpmdW5jdGlvbihrKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKGspe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnJlYWRJbnQoNCk7cmV0'@;
put 'dXJuIG5ldyBEYXRlKDE5ODArKGs+PjI1JjEyNyksKGs+PjIxJjE1KS0xLGs+PjE2JjMxLGs+PjExJjMxLGs+PjUmNjMsKDMxJmspPDwxKX19LFIuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt6LmJhc2U2ND0hMSx6LmJpbmFyeT0h'@;
put 'MSx6LmRpcj0hMSx6LmNyZWF0ZUZvbGRlcnM9ITEsei5kYXRlPW51bGwsei5jb21wcmVzc2lvbj1udWxsLHouY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIik7ei5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKEkpe3JldHVy'@;
put 'biBLLnN0cmluZzJiaW5hcnkoSSl9LHouc3RyaW5nMlVpbnQ4QXJyYXk9ZnVuY3Rpb24oSSl7cmV0dXJuIEsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEkpfSx6LnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKEkpe3JldHVybiBLLnRyYW5zZm9ybVRvKCJzdHJpbmciLEkpfSx6LnN0cmlu'@;
put 'ZzJCbG9iPWZ1bmN0aW9uKEkpe3ZhciBrPUsudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixJKTtyZXR1cm4gSy5hcnJheUJ1ZmZlcjJCbG9iKGspfSx6LmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oSSl7cmV0dXJuIEsuYXJyYXlCdWZmZXIyQmxvYihJKX0sei50cmFuc2Zvcm1Ubz1mdW5j'@;
put 'dGlvbihJLGspe3JldHVybiBLLnRyYW5zZm9ybVRvKEksayl9LHouZ2V0VHlwZU9mPWZ1bmN0aW9uKEkpe3JldHVybiBLLmdldFR5cGVPZihJKX0sei5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEsuY2hlY2tTdXBwb3J0KEkpfSx6Lk1BWF9WQUxVRV8xNkJJVFM9Sy5NQVhfVkFM'@;
put 'VUVfMTZCSVRTLHouTUFYX1ZBTFVFXzMyQklUUz1LLk1BWF9WQUxVRV8zMkJJVFMsei5wcmV0dHk9ZnVuY3Rpb24oSSl7cmV0dXJuIEsucHJldHR5KEkpfSx6LmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihJKXtyZXR1cm4gSy5maW5kQ29tcHJlc3Npb24oSSl9LHouaXNSZWdFeHA9ZnVuY3Rp'@;
put 'b24oSSl7cmV0dXJuIEsuaXNSZWdFeHAoSSl9fSx7Ii4vdXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsST1PKCJwYWtvIik7'@;
put 'ei51bmNvbXByZXNzSW5wdXRUeXBlPUs/InVpbnQ4YXJyYXkiOiJhcnJheSIsei5jb21wcmVzc0lucHV0VHlwZT1LPyJ1aW50OGFycmF5IjoiYXJyYXkiLHoubWFnaWM9IlxiXDAiLHouY29tcHJlc3M9ZnVuY3Rpb24oayl7cmV0dXJuIEkuZGVmbGF0ZVJhdyhrKX0sei51bmNvbXByZXNzPWZ1'@;
put 'bmN0aW9uKGspe3JldHVybiBJLmluZmxhdGVSYXcoayl9fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9iYXNlNjQiKTtmdW5jdGlvbiBJKGssRSl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJKGssRSk7dGhpcy5maWxl'@;
put 'cz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9IiIsayYmdGhpcy5sb2FkKGssRSksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBqPW5ldyBJO2Zvcih2YXIgViBpbiB0aGlzKSJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzW1ZdJiYoaltWXT10aGlzW1ZdKTtyZXR1cm4gan19KEkucHJv'@;
put 'dG90eXBlPU8oIi4vb2JqZWN0IikpLmxvYWQ9TygiLi9sb2FkIiksSS5zdXBwb3J0PU8oIi4vc3VwcG9ydCIpLEkuZGVmYXVsdHM9TygiLi9kZWZhdWx0cyIpLEkudXRpbHM9TygiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxJLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKGspe3JldHVybiBL'@;
put 'LmVuY29kZShrKX0sZGVjb2RlOmZ1bmN0aW9uKGspe3JldHVybiBLLmRlY29kZShrKX19LEkuY29tcHJlc3Npb25zPU8oIi4vY29tcHJlc3Npb25zIiksUi5leHBvcnRzPUl9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJs'@;
put 'aWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9iYXNlNjQiKSxJPU8oIi4vemlwRW50cmllcyIpO1IuZXhwb3J0cz1mdW5jdGlvbihrLEUpe3ZhciBqLFYsQixZO2Zv'@;
put 'cigoRT1FfHx7fSkuYmFzZTY0JiYoaz1LLmRlY29kZShrKSksaj0oVj1uZXcgSShrLEUpKS5maWxlcyxCPTA7QjxqLmxlbmd0aDtCKyspdGhpcy5maWxlKChZPWpbQl0pLmZpbGVOYW1lLFkuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6WS5k'@;
put 'YXRlLGRpcjpZLmRpcixjb21tZW50OlkuZmlsZUNvbW1lbnQubGVuZ3RoP1kuZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOkUuY3JlYXRlRm9sZGVyc30pO3JldHVybiBWLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PVYuemlwQ29tbWVudCksdGhpc319LHsiLi9iYXNl'@;
put 'NjQiOjEsIi4vemlwRW50cmllcyI6MjJ9XSwxMTpbZnVuY3Rpb24oTyxSLHopeyhmdW5jdGlvbihLKXsidXNlIHN0cmljdCI7dmFyIEk9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBLPCJ1Iil7dmFyIGs9IUsuZnJvbTtpZighayl0cnl7Sy5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7az0hMH1J'@;
put 'PWs/ZnVuY3Rpb24oRSxqKXtyZXR1cm4gaj9uZXcgSyhFLGopOm5ldyBLKEUpfTpLLmZyb20uYmluZChLKSxLLmFsbG9jfHwoSy5hbGxvYz1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IEsoRSl9KX1SLmV4cG9ydHM9ZnVuY3Rpb24oRSxqKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEU/Sy5hbGxv'@;
put 'YyhFKTpJKEUsail9LFIuZXhwb3J0cy50ZXN0PWZ1bmN0aW9uKEUpe3JldHVybiBLLmlzQnVmZmVyKEUpfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDEyOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdWludDhBcnJh'@;
put 'eVJlYWRlciIpO2Z1bmN0aW9uIEkoayl7dGhpcy5kYXRhPWssdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEkucHJvdG90eXBlPW5ldyBLKS5yZWFkRGF0YT1mdW5jdGlvbihrKXt0aGlzLmNoZWNrT2Zmc2V0KGspO3ZhciBFPXRoaXMuZGF0YS5zbGljZSh0aGlz'@;
put 'LmluZGV4LHRoaXMuaW5kZXgrayk7cmV0dXJuIHRoaXMuaW5kZXgrPWssRX0sUi5leHBvcnRzPUl9LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vc3VwcG9ydCIpLEk9TygiLi91dGlscyIpLGs9TygiLi9jcmMz'@;
put 'MiIpLEU9TygiLi9zaWduYXR1cmUiKSxqPU8oIi4vZGVmYXVsdHMiKSxWPU8oIi4vYmFzZTY0IiksQj1PKCIuL2NvbXByZXNzaW9ucyIpLFk9TygiLi9jb21wcmVzc2VkT2JqZWN0IiksWD1PKCIuL25vZGVCdWZmZXIiKSxVPU8oIi4vdXRmOCIpLHE9TygiLi9zdHJpbmdXcml0ZXIiKSxlZT1P'@;
put 'KCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSx0ZT1mdW5jdGlvbihTKXtpZihTLl9kYXRhIGluc3RhbmNlb2YgWSYmKFMuX2RhdGE9Uy5fZGF0YS5nZXRDb250ZW50KCksUy5vcHRpb25zLmJpbmFyeT0hMCxTLm9wdGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PUkuZ2V0VHlwZU9mKFMuX2Rh'@;
put 'dGEpKSl7dmFyIHY9Uy5fZGF0YTtTLl9kYXRhPW5ldyBVaW50OEFycmF5KHYubGVuZ3RoKSwwIT09di5sZW5ndGgmJlMuX2RhdGEuc2V0KHYsMCl9cmV0dXJuIFMuX2RhdGF9LG9lPWZ1bmN0aW9uKFMpe3ZhciB2PXRlKFMpO3JldHVybiJzdHJpbmciPT09SS5nZXRUeXBlT2Yodik/IVMub3B0'@;
put 'aW9ucy5iaW5hcnkmJksubm9kZWJ1ZmZlcj9YKHYsInV0Zi04Iik6Uy5hc0JpbmFyeSgpOnZ9LHNlPWZ1bmN0aW9uKFMpe3ZhciB2PXRlKHRoaXMpO3JldHVybiBudWxsPT09dnx8dHlwZW9mIHY+InUiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYodj1WLmRlY29kZSh2KSksdj1TJiZ0aGlz'@;
put 'Lm9wdGlvbnMuYmluYXJ5P0MudXRmOGRlY29kZSh2KTpJLnRyYW5zZm9ybVRvKCJzdHJpbmciLHYpLCFTJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKHY9SS50cmFuc2Zvcm1Ubygic3RyaW5nIixDLnV0ZjhlbmNvZGUodikpKSx2KX0saGU9ZnVuY3Rpb24oUyx2LHApe3RoaXMubmFtZT1TLHRo'@;
put 'aXMuZGlyPXAuZGlyLHRoaXMuZGF0ZT1wLmRhdGUsdGhpcy5jb21tZW50PXAuY29tbWVudCx0aGlzLl9kYXRhPXYsdGhpcy5vcHRpb25zPXAsdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6cC5kaXIsZGF0ZTpwLmRhdGV9fTtoZS5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVy'@;
put 'biBzZS5jYWxsKHRoaXMsITApfSxhc0JpbmFyeTpmdW5jdGlvbigpe3JldHVybiBzZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgUz1vZSh0aGlzKTtyZXR1cm4gSS50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsUyl9LGFzVWludDhBcnJheTpmdW5jdGlvbigp'@;
put 'e3ZhciBTPW9lKHRoaXMpO3JldHVybiBJLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixTKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciB1ZT1mdW5jdGlvbihTLHYpe3ZhciB3LHA9IiI7Zm9yKHc9MDt3PHY7dysrKXAr'@;
put 'PVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JlMpLFM+Pj49ODtyZXR1cm4gcH0sY2U9ZnVuY3Rpb24oKXt2YXIgdixwLFM9e307Zm9yKHY9MDt2PGFyZ3VtZW50cy5sZW5ndGg7disrKWZvcihwIGluIGFyZ3VtZW50c1t2XSlhcmd1bWVudHNbdl0uaGFzT3duUHJvcGVydHkocCkmJnR5cGVvZiBT'@;
put 'W3BdPiJ1IiYmKFNbcF09YXJndW1lbnRzW3ZdW3BdKTtyZXR1cm4gU30sYj1mdW5jdGlvbihTLHYscCl7dmFyIEosdz1JLmdldFR5cGVPZih2KTtpZihwPWZ1bmN0aW9uKFMpe3JldHVybiEwPT09KFM9U3x8e30pLmJhc2U2NCYmbnVsbD09Uy5iaW5hcnkmJihTLmJpbmFyeT0hMCksKFM9Y2Uo'@;
put 'UyxqKSkuZGF0ZT1TLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1TLmNvbXByZXNzaW9uJiYoUy5jb21wcmVzc2lvbj1TLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLFN9KHApLHAuY3JlYXRlRm9sZGVycyYmKEo9RChTKSkmJkguY2FsbCh0aGlzLEosITApLHAuZGlyfHxudWxsPT09dnx8dHlw'@;
put 'ZW9mIHY+InUiKXAuYmFzZTY0PSExLHAuYmluYXJ5PSExLHY9bnVsbDtlbHNlIGlmKCJzdHJpbmciPT09dylwLmJpbmFyeSYmIXAuYmFzZTY0JiYhMCE9PXAub3B0aW1pemVkQmluYXJ5U3RyaW5nJiYodj1JLnN0cmluZzJiaW5hcnkodikpO2Vsc2V7aWYocC5iYXNlNjQ9ITEscC5iaW5hcnk9'@;
put 'ITAsISh3fHx2IGluc3RhbmNlb2YgWSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBvZiAnIitTKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7ImFycmF5YnVmZmVyIj09PXcmJih2PUkudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLHYpKX12YXIgbmU9bmV3IGhlKFMsdixw'@;
put 'KTtyZXR1cm4gdGhpcy5maWxlc1tTXT1uZSxuZX0sRD1mdW5jdGlvbihTKXsiLyI9PVMuc2xpY2UoLTEpJiYoUz1TLnN1YnN0cmluZygwLFMubGVuZ3RoLTEpKTt2YXIgdj1TLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIHY+MD9TLnN1YnN0cmluZygwLHYpOiIifSxIPWZ1bmN0aW9uKFMsdil7'@;
put 'cmV0dXJuIi8iIT1TLnNsaWNlKC0xKSYmKFMrPSIvIiksdj10eXBlb2YgdjwidSImJnYsdGhpcy5maWxlc1tTXXx8Yi5jYWxsKHRoaXMsUyxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczp2fSksdGhpcy5maWxlc1tTXX0sTj1mdW5jdGlvbihTLHYpe3ZhciB3LHA9bmV3IFk7cmV0dXJuIFMu'@;
put 'X2RhdGEgaW5zdGFuY2VvZiBZPyhwLnVuY29tcHJlc3NlZFNpemU9Uy5fZGF0YS51bmNvbXByZXNzZWRTaXplLHAuY3JjMzI9Uy5fZGF0YS5jcmMzMiwwPT09cC51bmNvbXByZXNzZWRTaXplfHxTLmRpcj8odj1CLlNUT1JFLHAuY29tcHJlc3NlZENvbnRlbnQ9IiIscC5jcmMzMj0wKTpTLl9k'@;
put 'YXRhLmNvbXByZXNzaW9uTWV0aG9kPT09di5tYWdpYz9wLmNvbXByZXNzZWRDb250ZW50PVMuX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKToodz1TLl9kYXRhLmdldENvbnRlbnQoKSxwLmNvbXByZXNzZWRDb250ZW50PXYuY29tcHJlc3MoSS50cmFuc2Zvcm1Ubyh2LmNvbXByZXNzSW5w'@;
put 'dXRUeXBlLHcpKSkpOigoISh3PW9lKFMpKXx8MD09PXcubGVuZ3RofHxTLmRpcikmJih2PUIuU1RPUkUsdz0iIikscC51bmNvbXByZXNzZWRTaXplPXcubGVuZ3RoLHAuY3JjMzI9ayh3KSxwLmNvbXByZXNzZWRDb250ZW50PXYuY29tcHJlc3MoSS50cmFuc2Zvcm1Ubyh2LmNvbXByZXNzSW5w'@;
put 'dXRUeXBlLHcpKSkscC5jb21wcmVzc2VkU2l6ZT1wLmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aCxwLmNvbXByZXNzaW9uTWV0aG9kPXYubWFnaWMscH0sZz1mdW5jdGlvbihTLHYscCx3KXt2YXIgT2UsamUsUWUsbHQsbmU9SS50cmFuc2Zvcm1Ubygic3RyaW5nIixVLnV0ZjhlbmNvZGUodi5u'@;
put 'YW1lKSksZGU9di5jb21tZW50fHwiIixmZT1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZShkZSkpLHhlPW5lLmxlbmd0aCE9PXYubmFtZS5sZW5ndGgsTGU9ZmUubGVuZ3RoIT09ZGUubGVuZ3RoLEZlPXYub3B0aW9ucyxXZT0iIixLZT0iIixZZT0iIjtRZT12Ll9pbml0aWFs'@;
put 'TWV0YWRhdGEuZGlyIT09di5kaXI/di5kaXI6RmUuZGlyLE9lPShsdD12Ll9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PXYuZGF0ZT92LmRhdGU6RmUuZGF0ZSkuZ2V0SG91cnMoKSxPZTw8PTYsT2V8PWx0LmdldE1pbnV0ZXMoKSxPZTw8PTUsT2V8PWx0LmdldFNlY29uZHMoKS8yLGplPWx0Lmdl'@;
put 'dEZ1bGxZZWFyKCktMTk4MCxqZTw8PTQsamV8PWx0LmdldE1vbnRoKCkrMSxqZTw8PTUsamV8PWx0LmdldERhdGUoKSx4ZSYmKEtlPXVlKDEsMSkrdWUoayhuZSksNCkrbmUsV2UrPSJ1cCIrdWUoS2UubGVuZ3RoLDIpK0tlKSxMZSYmKFllPXVlKDEsMSkrdWUodGhpcy5jcmMzMihmZSksNCkr'@;
put 'ZmUsV2UrPSJ1YyIrdWUoWWUubGVuZ3RoLDIpK1llKTt2YXIgUGU9IiI7cmV0dXJuIFBlKz0iXG5cMCIsUGUrPXhlfHxMZT8iXDBcYiI6IlwwXDAiLFBlKz1wLmNvbXByZXNzaW9uTWV0aG9kLFBlKz11ZShPZSwyKSxQZSs9dWUoamUsMiksUGUrPXVlKHAuY3JjMzIsNCksUGUrPXVlKHAuY29t'@;
put 'cHJlc3NlZFNpemUsNCksUGUrPXVlKHAudW5jb21wcmVzc2VkU2l6ZSw0KSxQZSs9dWUobmUubGVuZ3RoLDIpLFBlKz11ZShXZS5sZW5ndGgsMikse2ZpbGVSZWNvcmQ6RS5MT0NBTF9GSUxFX0hFQURFUitQZStuZStXZSxkaXJSZWNvcmQ6RS5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAi'@;
put 'K1BlK3VlKGZlLmxlbmd0aCwyKSsiXDBcMFwwXDAiKyghMD09PVFlPyJceDEwXDBcMFwwIjoiXDBcMFwwXDAiKSt1ZSh3LDQpK25lK1dlK2ZlLGNvbXByZXNzZWRPYmplY3Q6cH19LEM9e2xvYWQ6ZnVuY3Rpb24oUyx2KXt0aHJvdyBuZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZp'@;
put 'bmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1sb2FkLmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKFMpe3ZhciBwLHcsSixuZSx2PVtdO2ZvcihwIGluIHRoaXMuZmlsZXMpdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShwKSYmKG5lPW5ldyBoZSgoSj10aGlzLmZpbGVzW3BdKS5uYW1l'@;
put 'LEouX2RhdGEsY2UoSi5vcHRpb25zKSksdz1wLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgscC5sZW5ndGgpLHAuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmUyh3LG5lKSYmdi5wdXNoKG5lKSk7cmV0dXJuIHZ9LGZpbGU6ZnVuY3Rpb24oUyx2LHApe2lmKDE9PT1hcmd1'@;
put 'bWVudHMubGVuZ3RoKXtpZihJLmlzUmVnRXhwKFMpKXt2YXIgdz1TO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihKLG5lKXtyZXR1cm4hbmUuZGlyJiZ3LnRlc3QoSil9KX1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oSixuZSl7cmV0dXJuIW5lLmRpciYmSj09PVN9KVswXXx8bnVs'@;
put 'bH1yZXR1cm4gYi5jYWxsKHRoaXMsUz10aGlzLnJvb3QrUyx2LHApLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihTKXtpZighUylyZXR1cm4gdGhpcztpZihJLmlzUmVnRXhwKFMpKXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihKLG5lKXtyZXR1cm4gbmUuZGlyJiZTLnRlc3QoSil9KTt2YXIg'@;
put 'cD1ILmNhbGwodGhpcyx0aGlzLnJvb3QrUyksdz10aGlzLmNsb25lKCk7cmV0dXJuIHcucm9vdD1wLm5hbWUsd30scmVtb3ZlOmZ1bmN0aW9uKFMpe3ZhciB2PXRoaXMuZmlsZXNbUz10aGlzLnJvb3QrU107aWYodnx8KCIvIiE9Uy5zbGljZSgtMSkmJihTKz0iLyIpLHY9dGhpcy5maWxlc1tT'@;
put 'XSksdiYmIXYuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW1NdO2Vsc2UgZm9yKHZhciBwPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKEosbmUpe3JldHVybiBuZS5uYW1lLnNsaWNlKDAsUy5sZW5ndGgpPT09U30pLHc9MDt3PHAubGVuZ3RoO3crKylkZWxldGUgdGhpcy5maWxlc1twW3ddLm5hbWVdO3Jl'@;
put 'dHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbihTKXtTPWNlKFN8fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIix0eXBlOiJiYXNlNjQiLGNvbW1lbnQ6bnVsbH0pLEkuY2hlY2tTdXBwb3J0KFMudHlwZSk7dmFyIEosbmUsV2Usdj1bXSxwPTAsdz0wLGRlPUkudHJhbnNmb3Jt'@;
put 'VG8oInN0cmluZyIsdGhpcy51dGY4ZW5jb2RlKFMuY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgZmUgaW4gdGhpcy5maWxlcylpZih0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KGZlKSl7dmFyIHhlPXRoaXMuZmlsZXNbZmVdLExlPXhlLm9wdGlvbnMuY29tcHJlc3Npb258'@;
put 'fFMuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxGZT1CW0xlXTtpZighRmUpdGhyb3cgbmV3IEVycm9yKExlKyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTt2YXIgT2U9Ti5jYWxsKHRoaXMseGUsRmUpLGplPWcuY2FsbCh0aGlzLGZlLHhlLE9lLHApO3ArPWplLmZp'@;
put 'bGVSZWNvcmQubGVuZ3RoK09lLmNvbXByZXNzZWRTaXplLHcrPWplLmRpclJlY29yZC5sZW5ndGgsdi5wdXNoKGplKX1XZT1FLkNFTlRSQUxfRElSRUNUT1JZX0VORCsiXDBcMFwwXDAiK3VlKHYubGVuZ3RoLDIpK3VlKHYubGVuZ3RoLDIpK3VlKHcsNCkrdWUocCw0KSt1ZShkZS5sZW5ndGgs'@;
put 'MikrZGU7dmFyIEtlPVMudHlwZS50b0xvd2VyQ2FzZSgpO2ZvcihKPSJ1aW50OGFycmF5Ij09PUtlfHwiYXJyYXlidWZmZXIiPT09S2V8fCJibG9iIj09PUtlfHwibm9kZWJ1ZmZlciI9PT1LZT9uZXcgZWUocCt3K1dlLmxlbmd0aCk6bmV3IHEocCt3K1dlLmxlbmd0aCksbmU9MDtuZTx2Lmxl'@;
put 'bmd0aDtuZSsrKUouYXBwZW5kKHZbbmVdLmZpbGVSZWNvcmQpLEouYXBwZW5kKHZbbmVdLmNvbXByZXNzZWRPYmplY3QuY29tcHJlc3NlZENvbnRlbnQpO2ZvcihuZT0wO25lPHYubGVuZ3RoO25lKyspSi5hcHBlbmQodltuZV0uZGlyUmVjb3JkKTtKLmFwcGVuZChXZSk7dmFyIFllPUouZmlu'@;
put 'YWxpemUoKTtzd2l0Y2goUy50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2UidWludDhhcnJheSI6Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJub2RlYnVmZmVyIjpyZXR1cm4gSS50cmFuc2Zvcm1UbyhTLnR5cGUudG9Mb3dlckNhc2UoKSxZZSk7Y2FzZSJibG9iIjpyZXR1cm4gSS5hcnJheUJ1ZmZl'@;
put 'cjJCbG9iKEkudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixZZSkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUy5iYXNlNjQ/Vi5lbmNvZGUoWWUpOlllO2RlZmF1bHQ6cmV0dXJuIFllfX0sY3JjMzI6ZnVuY3Rpb24oUyx2KXtyZXR1cm4gayhTLHYpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKFMpe3Jl'@;
put 'dHVybiBJLnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZShTKSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oUyl7cmV0dXJuIFUudXRmOGRlY29kZShTKX19O1IuZXhwb3J0cz1DfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIu'@;
put 'L2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oTyxSLHop'@;
put 'eyJ1c2Ugc3RyaWN0Ijt6LkxPQ0FMX0ZJTEVfSEVBREVSPSJQS1x4MDNceDA0Iix6LkNFTlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLHouQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2Iix6LlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDci'@;
put 'LHouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDZceDA2Iix6LkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMTU6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9kYXRhUmVhZGVyIiksST1PKCIuL3V0aWxzIik7ZnVuY3Rpb24gayhFLGop'@;
put 'e3RoaXMuZGF0YT1FLGp8fCh0aGlzLmRhdGE9SS5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShrLnByb3RvdHlwZT1uZXcgSykuYnl0ZUF0PWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChF'@;
put 'KX0say5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihFKX0say5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oRSl7dGhpcy5jaGVja09mZnNldChFKTt2YXIgaj10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRl'@;
put 'eCx0aGlzLmluZGV4K0UpO3JldHVybiB0aGlzLmluZGV4Kz1FLGp9LFIuZXhwb3J0cz1rfSx7Ii4vZGF0YVJlYWRlciI6NSwiLi91dGlscyI6MjF9XSwxNjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIiksST1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07'@;
put 'SS5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihrKXtrPUsudHJhbnNmb3JtVG8oInN0cmluZyIsayksdGhpcy5kYXRhLnB1c2goayl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LFIuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0'@;
put 'aW9uKE8sUix6KXsoZnVuY3Rpb24oSyl7InVzZSBzdHJpY3QiO2lmKHouYmFzZTY0PSEwLHouYXJyYXk9ITAsei5zdHJpbmc9ITAsei5hcnJheWJ1ZmZlcj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsei5ub2RlYnVmZmVyPXR5cGVvZiBLPCJ1Iix6LnVp'@;
put 'bnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpei5ibG9iPSExO2Vsc2V7dmFyIEk9bmV3IEFycmF5QnVmZmVyKDApO3RyeXt6LmJsb2I9MD09PW5ldyBCbG9iKFtJXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3Zh'@;
put 'ciBFPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7RS5hcHBlbmQoSSksei5ibG9iPTA9PT1FLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7ei5i'@;
put 'bG9iPSExfX19fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9kYXRhUmVhZGVyIik7ZnVuY3Rpb24gSShrKXtrJiYodGhpcy5kYXRhPWssdGhpcy5sZW5ndGg9dGhpcy5k'@;
put 'YXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfShJLnByb3RvdHlwZT1uZXcgSykuYnl0ZUF0PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLmRhdGFba119LEkucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGspe2Zvcih2YXIgRT1rLmNoYXJDb2RlQXQoMCksaj1rLmNoYXJD'@;
put 'b2RlQXQoMSksVj1rLmNoYXJDb2RlQXQoMiksQj1rLmNoYXJDb2RlQXQoMyksWT10aGlzLmxlbmd0aC00O1k+PTA7LS1ZKWlmKHRoaXMuZGF0YVtZXT09PUUmJnRoaXMuZGF0YVtZKzFdPT09aiYmdGhpcy5kYXRhW1krMl09PT1WJiZ0aGlzLmRhdGFbWSszXT09PUIpcmV0dXJuIFk7cmV0dXJu'@;
put 'LTF9LEkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGspe2lmKHRoaXMuY2hlY2tPZmZzZXQoayksMD09PWspcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciBFPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrayk7cmV0dXJuIHRoaXMuaW5kZXgrPWssRX0s'@;
put 'Ui5leHBvcnRzPUl9LHsiLi9kYXRhUmVhZGVyIjo1fV0sMTk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpLEk9ZnVuY3Rpb24oayl7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KGspLHRoaXMuaW5kZXg9MH07SS5wcm90b3R5cGU9e2FwcGVuZDpmdW5j'@;
put 'dGlvbihrKXswIT09ay5sZW5ndGgmJihrPUsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGspLHRoaXMuZGF0YS5zZXQoayx0aGlzLmluZGV4KSx0aGlzLmluZGV4Kz1rLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LFIuZXhwb3J0cz1JfSx7Ii4vdXRp'@;
put 'bHMiOjIxfV0sMjA6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Zm9yKHZhciBLPU8oIi4vdXRpbHMiKSxJPU8oIi4vc3VwcG9ydCIpLGs9TygiLi9ub2RlQnVmZmVyIiksRT1uZXcgQXJyYXkoMjU2KSxqPTA7ajwyNTY7aisrKUVbal09aj49MjUyPzY6aj49MjQ4PzU6aj49MjQwPzQ6'@;
put 'aj49MjI0PzM6aj49MTkyPzI6MTtFWzI1NF09RVsyNTRdPTE7dmFyIEI9ZnVuY3Rpb24oWCxVKXt2YXIgcTtmb3IoKFU9VXx8WC5sZW5ndGgpPlgubGVuZ3RoJiYoVT1YLmxlbmd0aCkscT1VLTE7cT49MCYmMTI4PT0oMTkyJlhbcV0pOylxLS07cmV0dXJuIHE8MHx8MD09PXE/VTpxK0VbWFtx'@;
put 'XV0+VT9xOlV9LFk9ZnVuY3Rpb24oWCl7dmFyIHEsZWUsdGUsb2Usc2U9WC5sZW5ndGgsaGU9bmV3IEFycmF5KDIqc2UpO2ZvcihlZT0wLHE9MDtxPHNlOylpZigodGU9WFtxKytdKTwxMjgpaGVbZWUrK109dGU7ZWxzZSBpZigob2U9RVt0ZV0pPjQpaGVbZWUrK109NjU1MzMscSs9b2UtMTtl'@;
put 'bHNle2Zvcih0ZSY9Mj09PW9lPzMxOjM9PT1vZT8xNTo3O29lPjEmJnE8c2U7KXRlPXRlPDw2fDYzJlhbcSsrXSxvZS0tO29lPjE/aGVbZWUrK109NjU1MzM6dGU8NjU1MzY/aGVbZWUrK109dGU6KGhlW2VlKytdPTU1Mjk2fCh0ZS09NjU1MzYpPj4xMCYxMDIzLGhlW2VlKytdPTU2MzIwfDEw'@;
put 'MjMmdGUpfXJldHVybiBoZS5sZW5ndGghPT1lZSYmKGhlLnN1YmFycmF5P2hlPWhlLnN1YmFycmF5KDAsZWUpOmhlLmxlbmd0aD1lZSksSy5hcHBseUZyb21DaGFyQ29kZShoZSl9O3oudXRmOGVuY29kZT1mdW5jdGlvbihVKXtyZXR1cm4gSS5ub2RlYnVmZmVyP2soVSwidXRmLTgiKTpmdW5j'@;
put 'dGlvbihYKXt2YXIgVSxxLGVlLHRlLG9lLHNlPVgubGVuZ3RoLGhlPTA7Zm9yKHRlPTA7dGU8c2U7dGUrKyk1NTI5Nj09KDY0NTEyJihxPVguY2hhckNvZGVBdCh0ZSkpKSYmdGUrMTxzZSYmNTYzMjA9PSg2NDUxMiYoZWU9WC5jaGFyQ29kZUF0KHRlKzEpKSkmJihxPTY1NTM2KyhxLTU1Mjk2'@;
put 'PDwxMCkrKGVlLTU2MzIwKSx0ZSsrKSxoZSs9cTwxMjg/MTpxPDIwNDg/MjpxPDY1NTM2PzM6NDtmb3IoVT1JLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoaGUpOm5ldyBBcnJheShoZSksb2U9MCx0ZT0wO29lPGhlO3RlKyspNTUyOTY9PSg2NDUxMiYocT1YLmNoYXJDb2RlQXQodGUpKSkm'@;
put 'JnRlKzE8c2UmJjU2MzIwPT0oNjQ1MTImKGVlPVguY2hhckNvZGVBdCh0ZSsxKSkpJiYocT02NTUzNisocS01NTI5Njw8MTApKyhlZS01NjMyMCksdGUrKykscTwxMjg/VVtvZSsrXT1xOnE8MjA0OD8oVVtvZSsrXT0xOTJ8cT4+PjYsVVtvZSsrXT0xMjh8NjMmcSk6cTw2NTUzNj8oVVtvZSsr'@;
put 'XT0yMjR8cT4+PjEyLFVbb2UrK109MTI4fHE+Pj42JjYzLFVbb2UrK109MTI4fDYzJnEpOihVW29lKytdPTI0MHxxPj4+MTgsVVtvZSsrXT0xMjh8cT4+PjEyJjYzLFVbb2UrK109MTI4fHE+Pj42JjYzLFVbb2UrK109MTI4fDYzJnEpO3JldHVybiBVfShVKX0sei51dGY4ZGVjb2RlPWZ1bmN0'@;
put 'aW9uKFUpe2lmKEkubm9kZWJ1ZmZlcilyZXR1cm4gSy50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsVSkudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciBxPVtdLGVlPTAsdGU9KFU9Sy50cmFuc2Zvcm1UbyhJLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsVSkpLmxlbmd0aDtlZTx0'@;
put 'ZTspe3ZhciBzZT1CKFUsTWF0aC5taW4oZWUrNjU1MzYsdGUpKTtxLnB1c2goWShJLnVpbnQ4YXJyYXk/VS5zdWJhcnJheShlZSxzZSk6VS5zbGljZShlZSxzZSkpKSxlZT1zZX1yZXR1cm4gcS5qb2luKCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6'@;
put 'MjF9XSwyMTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N1cHBvcnQiKSxJPU8oIi4vY29tcHJlc3Npb25zIiksaz1PKCIuL25vZGVCdWZmZXIiKTtmdW5jdGlvbiBFKFgpe3JldHVybiBYfWZ1bmN0aW9uIGooWCxVKXtmb3IodmFyIHE9MDtxPFgubGVuZ3RoOysr'@;
put 'cSlVW3FdPTI1NSZYLmNoYXJDb2RlQXQocSk7cmV0dXJuIFV9ZnVuY3Rpb24gVihYKXt2YXIgVT02NTUzNixxPVtdLGVlPVgubGVuZ3RoLHRlPXouZ2V0VHlwZU9mKFgpLG9lPTAsc2U9ITA7dHJ5e3N3aXRjaCh0ZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5'@;
put 'KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkpO2JyZWFrO2Nhc2Uibm9kZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGsoMCkpfX1jYXRjaHtzZT0hMX1pZighc2Upe2Zvcih2YXIgaGU9IiIsdWU9MDt1ZTxYLmxlbmd0aDt1ZSsrKWhlKz1TdHJpbmcuZnJvbUNoYXJDb2Rl'@;
put 'KFhbdWVdKTtyZXR1cm4gaGV9Zm9yKDtvZTxlZSYmVT4xOyl0cnl7cS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwiYXJyYXkiPT09dGV8fCJub2RlYnVmZmVyIj09PXRlP1guc2xpY2Uob2UsTWF0aC5taW4ob2UrVSxlZSkpOlguc3ViYXJyYXkob2UsTWF0aC5taW4ob2Ur'@;
put 'VSxlZSkpKSksb2UrPVV9Y2F0Y2h7VT1NYXRoLmZsb29yKFUvMil9cmV0dXJuIHEuam9pbigiIil9ZnVuY3Rpb24gQihYLFUpe2Zvcih2YXIgcT0wO3E8WC5sZW5ndGg7cSsrKVVbcV09WFtxXTtyZXR1cm4gVX16LnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oWCl7Zm9yKHZhciBVPSIiLHE9MDtx'@;
put 'PFgubGVuZ3RoO3ErKylVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZYLmNoYXJDb2RlQXQocSkpO3JldHVybiBVfSx6LmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oWCl7ei5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtYXSx7dHlwZToiYXBwbGljYXRpb24v'@;
put 'emlwIn0pfWNhdGNoe3RyeXt2YXIgcT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO3JldHVybiBxLmFwcGVuZChYKSxxLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIp'@;
put 'fWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LHouYXBwbHlGcm9tQ2hhckNvZGU9Vjt2YXIgWT17fTtZLnN0cmluZz17c3RyaW5nOkUsYXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIGooWCxuZXcgQXJyYXkoWC5sZW5ndGgpKX0sYXJy'@;
put 'YXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIFkuc3RyaW5nLnVpbnQ4YXJyYXkoWCkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBqKFgsbmV3IFVpbnQ4QXJyYXkoWC5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gaihYLGsoWC5sZW5ndGgp'@;
put 'KX19LFkuYXJyYXk9e3N0cmluZzpWLGFycmF5OkUsYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFgpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWCl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJu'@;
put 'IGsoWCl9fSxZLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oWCl7cmV0dXJuIFYobmV3IFVpbnQ4QXJyYXkoWCkpfSxhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihuZXcgVWludDhBcnJheShYKSxuZXcgQXJyYXkoWC5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOkUsdWludDhhcnJh'@;
put 'eTpmdW5jdGlvbihYKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWCl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIGsobmV3IFVpbnQ4QXJyYXkoWCkpfX0sWS51aW50OGFycmF5PXtzdHJpbmc6VixhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihYLG5ldyBBcnJheShYLmxlbmd0aCkp'@;
put 'fSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gWC5idWZmZXJ9LHVpbnQ4YXJyYXk6RSxub2RlYnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBrKFgpfX0sWS5ub2RlYnVmZmVyPXtzdHJpbmc6VixhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihYLG5ldyBBcnJheShYLmxlbmd0aCkp'@;
put 'fSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gWS5ub2RlYnVmZmVyLnVpbnQ4YXJyYXkoWCkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBCKFgsbmV3IFVpbnQ4QXJyYXkoWC5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpFfSx6LnRyYW5zZm9ybVRvPWZ1bmN0aW9u'@;
put 'KFgsVSl7aWYoVXx8KFU9IiIpLCFYKXJldHVybiBVO3ouY2hlY2tTdXBwb3J0KFgpO3ZhciBxPXouZ2V0VHlwZU9mKFUpO3JldHVybiBZW3FdW1hdKFUpfSx6LmdldFR5cGVPZj1mdW5jdGlvbihYKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFg/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09'@;
put 'PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChYKT8iYXJyYXkiOksubm9kZWJ1ZmZlciYmay50ZXN0KFgpPyJub2RlYnVmZmVyIjpLLnVpbnQ4YXJyYXkmJlggaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5IjpLLmFycmF5YnVmZmVyJiZYIGluc3RhbmNlb2YgQXJyYXlC'@;
put 'dWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LHouY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKFgpe2lmKCFLW1gudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKFgrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpfSx6Lk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsei5NQVhf'@;
put 'VkFMVUVfMzJCSVRTPS0xLHoucHJldHR5PWZ1bmN0aW9uKFgpe3ZhciBxLGVlLFU9IiI7Zm9yKGVlPTA7ZWU8KFh8fCIiKS5sZW5ndGg7ZWUrKylVKz0iXFx4IisoKHE9WC5jaGFyQ29kZUF0KGVlKSk8MTY/IjAiOiIiKStxLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBVfSx6'@;
put 'LmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihYKXtmb3IodmFyIFUgaW4gSSlpZihJLmhhc093blByb3BlcnR5KFUpJiZJW1VdLm1hZ2ljPT09WClyZXR1cm4gSVtVXTtyZXR1cm4gbnVsbH0sei5pc1JlZ0V4cD1mdW5jdGlvbihYKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5w'@;
put 'cm90b3R5cGUudG9TdHJpbmcuY2FsbChYKX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N0cmluZ1JlYWRlciIpLEk9TygiLi9ub2RlQnVmZmVyUmVhZGVy'@;
put 'Iiksaz1PKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKSxFPU8oIi4vdXRpbHMiKSxqPU8oIi4vc2lnbmF0dXJlIiksVj1PKCIuL3ppcEVudHJ5IiksQj1PKCIuL3N1cHBvcnQiKSxZPU8oIi4vb2JqZWN0Iik7ZnVuY3Rpb24gWChVLHEpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1xLFUm'@;
put 'JnRoaXMubG9hZChVKX1YLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihxIT09VSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIrRS5wcmV0'@;
put 'dHkocSkrIiwgZXhwZWN0ZWQgIitFLnByZXR0eShVKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhp'@;
put 'cy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10'@;
put 'aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PVkudXRmOGRlY29kZSh0aGlzLnpp'@;
put 'cENvbW1lbnQpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRo'@;
put 'aXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQo'@;
put 'OCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307'@;
put 'Zm9yKHZhciBlZSx0ZSxvZSxVPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8VTspZWU9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLG9lPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodGUpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtlZV09'@;
put 'e2lkOmVlLGxlbmd0aDp0ZSx2YWx1ZTpvZX19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2Vu'@;
put 'dHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93IG5ldyBFcnJvcigiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rp'@;
put 'b24oKXt2YXIgVSxxO2ZvcihVPTA7VTx0aGlzLmZpbGVzLmxlbmd0aDtVKyspdGhpcy5yZWFkZXIuc2V0SW5kZXgoKHE9dGhpcy5maWxlc1tVXSkubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUoai5MT0NBTF9GSUxFX0hFQURFUikscS5yZWFkTG9jYWxQYXJ0KHRoaXMu'@;
put 'cmVhZGVyKSxxLmhhbmRsZVVURjgoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgVTtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09ai5DRU5UUkFMX0ZJTEVfSEVBREVSOykoVT1uZXcgVih7'@;
put 'emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKFUpfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoai5DRU5UUkFMX0RJ'@;
put 'UkVDVE9SWV9FTkQpO2lmKC0xPT09VSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KFUpLHRoaXMuY2hlY2tTaWduYXR1cmUoai5DRU5UUkFMX0RJUkVDVE9SWV9FTkQp'@;
put 'LHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PUUuTUFYX1ZBTFVF'@;
put 'XzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PUUuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09RS5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLC0xPT09KFU9'@;
put 'dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoai5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJl'@;
put 'YWRlci5zZXRJbmRleChVKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENl'@;
put 'bnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoai5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oVSl7dmFyIHE9RS5nZXRUeXBlT2YoVSk7dGhpcy5yZWFkZXI9InN0cmluZyIh'@;
put 'PT1xfHxCLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09cT9uZXcgSShVKTpuZXcgayhFLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixVKSk6bmV3IEsoVSx0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oVSl7dGhpcy5wcmVwYXJlUmVhZGVy'@;
put 'KFUpLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSxSLmV4cG9ydHM9WH0seyIuL25vZGVCdWZmZXJSZWFkZXIiOjEyLCIuL29iamVjdCI6MTMsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIu'@;
put 'L3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4LCIuL3V0aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N0cmluZ1JlYWRlciIpLEk9TygiLi91dGlscyIpLGs9TygiLi9jb21wcmVzc2VkT2JqZWN0'@;
put 'IiksRT1PKCIuL29iamVjdCIpO2Z1bmN0aW9uIGooVixCKXt0aGlzLm9wdGlvbnM9Vix0aGlzLmxvYWRPcHRpb25zPUJ9ai5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4gMjA0OD09'@;
put 'KDIwNDgmdGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgWD1WLmluZGV4O1Yuc2V0SW5kZXgoQik7dmFyIFU9Vi5yZWFkRGF0YShZKTtyZXR1cm4gVi5zZXRJbmRleChYKSxVfX0scHJlcGFyZUNvbnRl'@;
put 'bnQ6ZnVuY3Rpb24oVixCLFksWCxVKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcT1JLnRyYW5zZm9ybVRvKFgudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpLGVlPVgudW5jb21wcmVzcyhxKTtpZihlZS5sZW5ndGghPT1VKXRocm93IG5ldyBFcnJvcigi'@;
put 'QnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBlZX19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oVil7dmFyIEIsWTtpZihWLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vi5yZWFkSW50KDIpLFk9Vi5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9Vi5y'@;
put 'ZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLFYuc2tpcChZKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZy'@;
put 'b20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oQj1JLmZpbmRDb21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDog'@;
put 'Y29tcHJlc3Npb24gIitJLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0aGlzLmRlY29tcHJlc3NlZD1uZXcgayx0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNz'@;
put 'ZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3JjMzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRl'@;
put 'Y29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChWLFYuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxCKSx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJlcGFyZUNvbnRlbnQoVixWLmluZGV4LHRoaXMuY29tcHJl'@;
put 'c3NlZFNpemUsQix0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPUkudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCgpKSxFLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9'@;
put 'PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihWKXtpZih0aGlzLnZlcnNpb25NYWRlQnk9Vi5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD1WLnJlYWRJbnQoMiksdGhp'@;
put 'cy5iaXRGbGFnPVYucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPVYucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Vi5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9Vi5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9Vi5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1W'@;
put 'LnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1WLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1WLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1WLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9Vi5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxG'@;
put 'aWxlQXR0cmlidXRlcz1WLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPVYucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVYucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3Vw'@;
put 'cG9ydGVkIik7dGhpcy5maWxlTmFtZT1WLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoViksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChWKSx0aGlzLmZpbGVDb21tZW50PVYucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0'@;
put 'aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihWKXtpZih0aGlzLmV4dHJhRmllbGRzWzFdKXt2YXIgQj1uZXcgSyh0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1J'@;
put 'Lk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9Qi5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09SS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1CLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1JLk1BWF9W'@;
put 'QUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PUIucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1CLnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKFYpe3ZhciBZ'@;
put 'LFgsVSxCPVYuaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307Vi5pbmRleDxCK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KVk9Vi5yZWFkSW50KDIpLFg9Vi5yZWFkSW50KDIpLFU9Vi5yZWFkU3RyaW5nKFgpLHRoaXMuZXh0cmFGaWVsZHNbWV09e2lkOlks'@;
put 'bGVuZ3RoOlgsdmFsdWU6VX19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPUUudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PUUudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBWPXRoaXMu'@;
put 'ZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1WJiYodGhpcy5maWxlTmFtZT1WKTt2YXIgQj10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtudWxsIT09QiYmKHRoaXMuZmlsZUNvbW1lbnQ9Qil9fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9u'@;
put 'KCl7dmFyIFY9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoVil7dmFyIEI9bmV3IEsoVi52YWx1ZSk7cmV0dXJuIDEhPT1CLnJlYWRJbnQoMSl8fEUuY3JjMzIodGhpcy5maWxlTmFtZSkhPT1CLnJlYWRJbnQoNCk/bnVsbDpFLnV0ZjhkZWNvZGUoQi5yZWFkU3RyaW5nKFYubGVuZ3RoLTUp'@;
put 'KX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBWPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKFYpe3ZhciBCPW5ldyBLKFYudmFsdWUpO3JldHVybiAxIT09Qi5yZWFkSW50KDEpfHxFLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpIT09'@;
put 'Qi5yZWFkSW50KDQpP251bGw6RS51dGY4ZGVjb2RlKEIucmVhZFN0cmluZyhWLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxSLmV4cG9ydHM9an0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoyMX1dLDI0OltmdW5j'@;
put 'dGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBqPXt9OygwLE8oIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoaixPKCIuL2xpYi9kZWZsYXRlIiksTygiLi9saWIvaW5mbGF0ZSIpLE8oIi4vbGliL3psaWIvY29uc3RhbnRzIikpLFIuZXhwb3J0cz1qfSx7Ii4vbGliL2RlZmxhdGUi'@;
put 'OjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi96bGliL2RlZmxhdGUuanMiKSxJPU8oIi4vdXRpbHMvY29tbW9uIiksaz1PKCIu'@;
put 'L3V0aWxzL3N0cmluZ3MiKSxFPU8oIi4vemxpYi9tZXNzYWdlcyIpLGo9TygiLi96bGliL3pzdHJlYW0iKSx0ZT1mdW5jdGlvbih1ZSl7dGhpcy5vcHRpb25zPUkuYXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0'@;
put 'ZWd5OjAsdG86IiJ9LHVlfHx7fSk7dmFyIGNlPXRoaXMub3B0aW9ucztjZS5yYXcmJmNlLndpbmRvd0JpdHM+MD9jZS53aW5kb3dCaXRzPS1jZS53aW5kb3dCaXRzOmNlLmd6aXAmJmNlLndpbmRvd0JpdHM+MCYmY2Uud2luZG93Qml0czwxNiYmKGNlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVy'@;
put 'cj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBqLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgRz1LLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sY2UubGV2ZWwsY2UubWV0aG9kLGNlLndpbmRvd0JpdHMsY2UubWVtTGV2ZWwsY2Uuc3Ry'@;
put 'YXRlZ3kpO2lmKDAhPT1HKXRocm93IG5ldyBFcnJvcihFW0ddKTtjZS5oZWFkZXImJksuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sY2UuaGVhZGVyKX07ZnVuY3Rpb24gb2UodWUsY2Upe3ZhciBHPW5ldyB0ZShjZSk7aWYoRy5wdXNoKHVlLCEwKSxHLmVycil0aHJvdyBHLm1zZztyZXR1'@;
put 'cm4gRy5yZXN1bHR9dGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odWUsY2Upe3ZhciBELEgsRz10aGlzLnN0cm0sYj10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7SD1jZT09PX5+Y2U/Y2U6ITA9PT1jZT80OjAsRy5pbnB1dD0ic3RyaW5nIj09dHlwZW9m'@;
put 'IHVlP2suc3RyaW5nMmJ1Zih1ZSk6dWUsRy5uZXh0X2luPTAsRy5hdmFpbF9pbj1HLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09Ry5hdmFpbF9vdXQmJihHLm91dHB1dD1uZXcgSS5CdWY4KGIpLEcubmV4dF9vdXQ9MCxHLmF2YWlsX291dD1iKSwxIT09KEQ9Sy5kZWZsYXRlKEcsSCkpJiYwIT09'@;
put 'RClyZXR1cm4gdGhpcy5vbkVuZChEKSx0aGlzLmVuZGVkPSEwLCExOygwPT09Ry5hdmFpbF9vdXR8fDA9PT1HLmF2YWlsX2luJiY0PT09SCkmJnRoaXMub25EYXRhKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP2suYnVmMmJpbnN0cmluZyhJLnNocmlua0J1ZihHLm91dHB1dCxHLm5leHRf'@;
put 'b3V0KSk6SS5zaHJpbmtCdWYoRy5vdXRwdXQsRy5uZXh0X291dCkpfXdoaWxlKChHLmF2YWlsX2luPjB8fDA9PT1HLmF2YWlsX291dCkmJjEhPT1EKTtyZXR1cm4gNCE9PUh8fChEPUsuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoRCksdGhpcy5lbmRlZD0hMCwwPT09RCl9LHRl'@;
put 'LnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odWUpe3RoaXMuY2h1bmtzLnB1c2godWUpfSx0ZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odWUpezA9PT11ZSYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOkkuZmxhdHRlbkNo'@;
put 'dW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXVlLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LHouRGVmbGF0ZT10ZSx6LmRlZmxhdGU9b2Usei5kZWZsYXRlUmF3PWZ1bmN0aW9uIHNlKHVlLGNlKXtyZXR1cm4oY2U9Y2V8fHt9KS5yYXc9ITAsb2UodWUsY2UpfSx6'@;
put 'Lmd6aXA9ZnVuY3Rpb24gaGUodWUsY2Upe3JldHVybihjZT1jZXx8e30pLmd6aXA9ITAsb2UodWUsY2UpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9kZWZsYXRlLmpzIjozMiwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0i'@;
put 'OjM5fV0sMjY6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi96bGliL2luZmxhdGUuanMiKSxJPU8oIi4vdXRpbHMvY29tbW9uIiksaz1PKCIuL3V0aWxzL3N0cmluZ3MiKSxFPU8oIi4vemxpYi9jb25zdGFudHMiKSxqPU8oIi4vemxpYi9tZXNzYWdlcyIpLFY9Tygi'@;
put 'Li96bGliL3pzdHJlYW0iKSxCPU8oIi4vemxpYi9nemhlYWRlciIpLFk9ZnVuY3Rpb24ocSl7dGhpcy5vcHRpb25zPUkuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxxfHx7fSk7dmFyIGVlPXRoaXMub3B0aW9ucztlZS5yYXcmJmVlLndpbmRvd0JpdHM+PTAm'@;
put 'JmVlLndpbmRvd0JpdHM8MTYmJihlZS53aW5kb3dCaXRzPS1lZS53aW5kb3dCaXRzLDA9PT1lZS53aW5kb3dCaXRzJiYoZWUud2luZG93Qml0cz0tMTUpKSxlZS53aW5kb3dCaXRzPj0wJiZlZS53aW5kb3dCaXRzPDE2JiYhKHEmJnEud2luZG93Qml0cykmJihlZS53aW5kb3dCaXRzKz0zMiks'@;
put 'ZWUud2luZG93Qml0cz4xNSYmZWUud2luZG93Qml0czw0OCYmKDE1JmVlLndpbmRvd0JpdHN8fChlZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFYsdGhpcy5zdHJtLmF2YWlsX291dD0w'@;
put 'O3ZhciB0ZT1LLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sZWUud2luZG93Qml0cyk7aWYodGUhPT1FLlpfT0spdGhyb3cgbmV3IEVycm9yKGpbdGVdKTt0aGlzLmhlYWRlcj1uZXcgQixLLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gWChxLGVlKXt2'@;
put 'YXIgdGU9bmV3IFkoZWUpO2lmKHRlLnB1c2gocSwhMCksdGUuZXJyKXRocm93IHRlLm1zZztyZXR1cm4gdGUucmVzdWx0fVkucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24ocSxlZSl7dmFyIHNlLGhlLHVlLGNlLEcsdGU9dGhpcy5zdHJtLG9lPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhp'@;
put 'cy5lbmRlZClyZXR1cm4hMTtoZT1lZT09PX5+ZWU/ZWU6ITA9PT1lZT9FLlpfRklOSVNIOkUuWl9OT19GTFVTSCx0ZS5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHE/ay5iaW5zdHJpbmcyYnVmKHEpOnEsdGUubmV4dF9pbj0wLHRlLmF2YWlsX2luPXRlLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09'@;
put 'dGUuYXZhaWxfb3V0JiYodGUub3V0cHV0PW5ldyBJLkJ1Zjgob2UpLHRlLm5leHRfb3V0PTAsdGUuYXZhaWxfb3V0PW9lKSwoc2U9Sy5pbmZsYXRlKHRlLEUuWl9OT19GTFVTSCkpIT09RS5aX1NUUkVBTV9FTkQmJnNlIT09RS5aX09LKXJldHVybiB0aGlzLm9uRW5kKHNlKSx0aGlzLmVuZGVk'@;
put 'PSEwLCExO3RlLm5leHRfb3V0JiYoMD09PXRlLmF2YWlsX291dHx8c2U9PT1FLlpfU1RSRUFNX0VORHx8MD09PXRlLmF2YWlsX2luJiZoZT09PUUuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KHVlPWsudXRmOGJvcmRlcih0ZS5vdXRwdXQsdGUubmV4dF9vdXQpLGNl'@;
put 'PXRlLm5leHRfb3V0LXVlLEc9ay5idWYyc3RyaW5nKHRlLm91dHB1dCx1ZSksdGUubmV4dF9vdXQ9Y2UsdGUuYXZhaWxfb3V0PW9lLWNlLGNlJiZJLmFycmF5U2V0KHRlLm91dHB1dCx0ZS5vdXRwdXQsdWUsY2UsMCksdGhpcy5vbkRhdGEoRykpOnRoaXMub25EYXRhKEkuc2hyaW5rQnVmKHRl'@;
put 'Lm91dHB1dCx0ZS5uZXh0X291dCkpKX13aGlsZSh0ZS5hdmFpbF9pbj4wJiZzZSE9PUUuWl9TVFJFQU1fRU5EKTtyZXR1cm4gc2U9PT1FLlpfU1RSRUFNX0VORCYmKGhlPUUuWl9GSU5JU0gpLGhlIT09RS5aX0ZJTklTSHx8KHNlPUsuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQo'@;
put 'c2UpLHRoaXMuZW5kZWQ9ITAsc2U9PT1FLlpfT0spfSxZLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24ocSl7dGhpcy5jaHVua3MucHVzaChxKX0sWS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24ocSl7cT09PUUuWl9PSyYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRv'@;
put 'P3RoaXMuY2h1bmtzLmpvaW4oIiIpOkkuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXEsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sei5JbmZsYXRlPVksei5pbmZsYXRlPVgsei5pbmZsYXRlUmF3PWZ1bmN0aW9uIFUocSxlZSl7cmV0dXJuKGVl'@;
put 'PWVlfHx7fSkucmF3PSEwLFgocSxlZSl9LHoudW5nemlwPVh9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvY29uc3RhbnRzIjozMCwiLi96bGliL2d6aGVhZGVyIjozMywiLi96bGliL2luZmxhdGUuanMiOjM1LCIuL3psaWIvbWVzc2FnZXMiOjM3'@;
put 'LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBJbnQzMkFycmF5PCJ1Ijt6LmFzc2lnbj1mdW5jdGlvbihFKXtmb3IodmFyIGo9QXJy'@;
put 'YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2oubGVuZ3RoOyl7dmFyIFY9ai5zaGlmdCgpO2lmKFYpe2lmKCJvYmplY3QiIT10eXBlb2YgVil0aHJvdyBuZXcgVHlwZUVycm9yKFYrIm11c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgQiBpbiBWKVYuaGFzT3duUHJvcGVy'@;
put 'dHkoQikmJihFW0JdPVZbQl0pfX1yZXR1cm4gRX0sei5zaHJpbmtCdWY9ZnVuY3Rpb24oRSxqKXtyZXR1cm4gRS5sZW5ndGg9PT1qP0U6RS5zdWJhcnJheT9FLnN1YmFycmF5KDAsaik6KEUubGVuZ3RoPWosRSl9O3ZhciBJPXthcnJheVNldDpmdW5jdGlvbihFLGosVixCLFkpe2lmKGouc3Vi'@;
put 'YXJyYXkmJkUuc3ViYXJyYXkpRS5zZXQoai5zdWJhcnJheShWLFYrQiksWSk7ZWxzZSBmb3IodmFyIFg9MDtYPEI7WCsrKUVbWStYXT1qW1YrWF19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oRSl7dmFyIGosVixCLFksWCxVO2ZvcihCPTAsaj0wLFY9RS5sZW5ndGg7ajxWO2orKylCKz1FW2pd'@;
put 'Lmxlbmd0aDtmb3IoVT1uZXcgVWludDhBcnJheShCKSxZPTAsaj0wLFY9RS5sZW5ndGg7ajxWO2orKylVLnNldChYPUVbal0sWSksWSs9WC5sZW5ndGg7cmV0dXJuIFV9fSxrPXthcnJheVNldDpmdW5jdGlvbihFLGosVixCLFkpe2Zvcih2YXIgWD0wO1g8QjtYKyspRVtZK1hdPWpbVitYXX0s'@;
put 'ZmxhdHRlbkNodW5rczpmdW5jdGlvbihFKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sRSl9fTt6LnNldFR5cGVkPWZ1bmN0aW9uKEUpe0U/KHouQnVmOD1VaW50OEFycmF5LHouQnVmMTY9VWludDE2QXJyYXksei5CdWYzMj1JbnQzMkFycmF5LHouYXNzaWduKHosSSkpOih6LkJ1Zjg9QXJy'@;
put 'YXksei5CdWYxNj1BcnJheSx6LkJ1ZjMyPUFycmF5LHouYXNzaWduKHosaykpfSx6LnNldFR5cGVkKEspfSx7fV0sMjg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9jb21tb24iKSxJPSEwLGs9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxb'@;
put 'MF0pfWNhdGNoe0k9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7az0hMX1mb3IodmFyIEU9bmV3IEsuQnVmOCgyNTYpLGo9MDtqPDI1NjtqKyspRVtqXT1qPj0yNTI/NjpqPj0yNDg/NTpqPj0yNDA/NDpqPj0yMjQ/MzpqPj0x'@;
put 'OTI/MjoxO2Z1bmN0aW9uIFYoQixZKXtpZihZPDY1NTM3JiYoQi5zdWJhcnJheSYma3x8IUIuc3ViYXJyYXkmJkkpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsSy5zaHJpbmtCdWYoQixZKSk7Zm9yKHZhciBYPSIiLFU9MDtVPFk7VSsrKVgrPVN0cmluZy5mcm9tQ2hh'@;
put 'ckNvZGUoQltVXSk7cmV0dXJuIFh9RVsyNTRdPUVbMjU0XT0xLHouc3RyaW5nMmJ1Zj1mdW5jdGlvbihCKXt2YXIgWSxYLFUscSxlZSx0ZT1CLmxlbmd0aCxvZT0wO2ZvcihxPTA7cTx0ZTtxKyspNTUyOTY9PSg2NDUxMiYoWD1CLmNoYXJDb2RlQXQocSkpKSYmcSsxPHRlJiY1NjMyMD09KDY0'@;
put 'NTEyJihVPUIuY2hhckNvZGVBdChxKzEpKSkmJihYPTY1NTM2KyhYLTU1Mjk2PDwxMCkrKFUtNTYzMjApLHErKyksb2UrPVg8MTI4PzE6WDwyMDQ4PzI6WDw2NTUzNj8zOjQ7Zm9yKFk9bmV3IEsuQnVmOChvZSksZWU9MCxxPTA7ZWU8b2U7cSsrKTU1Mjk2PT0oNjQ1MTImKFg9Qi5jaGFyQ29k'@;
put 'ZUF0KHEpKSkmJnErMTx0ZSYmNTYzMjA9PSg2NDUxMiYoVT1CLmNoYXJDb2RlQXQocSsxKSkpJiYoWD02NTUzNisoWC01NTI5Njw8MTApKyhVLTU2MzIwKSxxKyspLFg8MTI4P1lbZWUrK109WDpYPDIwNDg/KFlbZWUrK109MTkyfFg+Pj42LFlbZWUrK109MTI4fDYzJlgpOlg8NjU1MzY/KFlb'@;
put 'ZWUrK109MjI0fFg+Pj4xMixZW2VlKytdPTEyOHxYPj4+NiY2MyxZW2VlKytdPTEyOHw2MyZYKTooWVtlZSsrXT0yNDB8WD4+PjE4LFlbZWUrK109MTI4fFg+Pj4xMiY2MyxZW2VlKytdPTEyOHxYPj4+NiY2MyxZW2VlKytdPTEyOHw2MyZYKTtyZXR1cm4gWX0sei5idWYyYmluc3RyaW5nPWZ1'@;
put 'bmN0aW9uKEIpe3JldHVybiBWKEIsQi5sZW5ndGgpfSx6LmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oQil7Zm9yKHZhciBZPW5ldyBLLkJ1ZjgoQi5sZW5ndGgpLFg9MCxVPVkubGVuZ3RoO1g8VTtYKyspWVtYXT1CLmNoYXJDb2RlQXQoWCk7cmV0dXJuIFl9LHouYnVmMnN0cmluZz1mdW5jdGlv'@;
put 'bihCLFkpe3ZhciBYLFUscSxlZSx0ZT1ZfHxCLmxlbmd0aCxvZT1uZXcgQXJyYXkoMip0ZSk7Zm9yKFU9MCxYPTA7WDx0ZTspaWYoKHE9QltYKytdKTwxMjgpb2VbVSsrXT1xO2Vsc2UgaWYoKGVlPUVbcV0pPjQpb2VbVSsrXT02NTUzMyxYKz1lZS0xO2Vsc2V7Zm9yKHEmPTI9PT1lZT8zMToz'@;
put 'PT09ZWU/MTU6NztlZT4xJiZYPHRlOylxPXE8PDZ8NjMmQltYKytdLGVlLS07ZWU+MT9vZVtVKytdPTY1NTMzOnE8NjU1MzY/b2VbVSsrXT1xOihvZVtVKytdPTU1Mjk2fChxLT02NTUzNik+PjEwJjEwMjMsb2VbVSsrXT01NjMyMHwxMDIzJnEpfXJldHVybiBWKG9lLFUpfSx6LnV0Zjhib3Jk'@;
put 'ZXI9ZnVuY3Rpb24oQixZKXt2YXIgWDtmb3IoKFk9WXx8Qi5sZW5ndGgpPkIubGVuZ3RoJiYoWT1CLmxlbmd0aCksWD1ZLTE7WD49MCYmMTI4PT0oMTkyJkJbWF0pOylYLS07cmV0dXJuIFg8MHx8MD09PVg/WTpYK0VbQltYXV0+WT9YOll9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlv'@;
put 'bihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0cz1mdW5jdGlvbiBLKEksayxFLGope2Zvcih2YXIgVj02NTUzNSZJfDAsQj1JPj4+MTYmNjU1MzV8MCxZPTA7MCE9PUU7KXtFLT1ZPUU+MmUzPzJlMzpFO2Rve0I9QisoVj1WK2tbaisrXXwwKXwwfXdoaWxlKC0tWSk7ViU9NjU1MjEsQiU9'@;
put 'NjU1MjF9cmV0dXJuIFZ8Qjw8MTZ8MH19LHt9XSwzMDpbZnVuY3Rpb24oTyxSLHope1IuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJF'@;
put 'QU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpf'@;
put 'RklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBJPWZ1bmN0aW9u'@;
put 'IEsoKXtmb3IodmFyIEUsaj1bXSxWPTA7VjwyNTY7VisrKXtFPVY7Zm9yKHZhciBCPTA7Qjw4O0IrKylFPTEmRT8zOTg4MjkyMzg0XkU+Pj4xOkU+Pj4xO2pbVl09RX1yZXR1cm4gan0oKTtSLmV4cG9ydHM9ZnVuY3Rpb24gayhFLGosVixCKXt2YXIgWT1JLFg9QitWO0VePS0xO2Zvcih2YXIg'@;
put 'VT1CO1U8WDtVKyspRT1FPj4+OF5ZWzI1NSYoRV5qW1VdKV07cmV0dXJuLTFeRX19LHt9XSwzMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuLi91dGlscy9jb21tb24iKSxJPU8oIi4vdHJlZXMiKSxrPU8oIi4vYWRsZXIzMiIpLEU9TygiLi9jcmMzMiIpLGo9Tygi'@;
put 'Li9tZXNzYWdlcyIpLFY9MCxxPTAsdGU9LTIsSD0yLE49OCx3PTI4NixKPTMwLG5lPTE5LGRlPTIqdysxLGZlPTE1LHhlPTMsTGU9MjU4LEZlPUxlK3hlKzEsamU9NDIsbHQ9MTEzO2Z1bmN0aW9uIFVlKHJ0LEl0KXtyZXR1cm4gcnQubXNnPWpbSXRdLEl0fWZ1bmN0aW9uIGh0KHJ0KXtyZXR1'@;
put 'cm4ocnQ8PDEpLShydD40Pzk6MCl9ZnVuY3Rpb24gTWUocnQpe2Zvcih2YXIgSXQ9cnQubGVuZ3RoOy0tSXQ+PTA7KXJ0W0l0XT0wfWZ1bmN0aW9uIERlKHJ0KXt2YXIgSXQ9cnQuc3RhdGUsUXQ9SXQucGVuZGluZztRdD5ydC5hdmFpbF9vdXQmJihRdD1ydC5hdmFpbF9vdXQpLDAhPT1RdCYm'@;
put 'KEsuYXJyYXlTZXQocnQub3V0cHV0LEl0LnBlbmRpbmdfYnVmLEl0LnBlbmRpbmdfb3V0LFF0LHJ0Lm5leHRfb3V0KSxydC5uZXh0X291dCs9UXQsSXQucGVuZGluZ19vdXQrPVF0LHJ0LnRvdGFsX291dCs9UXQscnQuYXZhaWxfb3V0LT1RdCxJdC5wZW5kaW5nLT1RdCwwPT09SXQucGVuZGlu'@;
put 'ZyYmKEl0LnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiB6ZShydCxJdCl7SS5fdHJfZmx1c2hfYmxvY2socnQscnQuYmxvY2tfc3RhcnQ+PTA/cnQuYmxvY2tfc3RhcnQ6LTEscnQuc3Ryc3RhcnQtcnQuYmxvY2tfc3RhcnQsSXQpLHJ0LmJsb2NrX3N0YXJ0PXJ0LnN0cnN0YXJ0LERlKHJ0LnN0'@;
put 'cm0pfWZ1bmN0aW9uIG90KHJ0LEl0KXtydC5wZW5kaW5nX2J1ZltydC5wZW5kaW5nKytdPUl0fWZ1bmN0aW9uIHV0KHJ0LEl0KXtydC5wZW5kaW5nX2J1ZltydC5wZW5kaW5nKytdPUl0Pj4+OCYyNTUscnQucGVuZGluZ19idWZbcnQucGVuZGluZysrXT0yNTUmSXR9ZnVuY3Rpb24gTXQocnQs'@;
put 'SXQsUXQsRHQpe3ZhciBwdD1ydC5hdmFpbF9pbjtyZXR1cm4gcHQ+RHQmJihwdD1EdCksMD09PXB0PzA6KHJ0LmF2YWlsX2luLT1wdCxLLmFycmF5U2V0KEl0LHJ0LmlucHV0LHJ0Lm5leHRfaW4scHQsUXQpLDE9PT1ydC5zdGF0ZS53cmFwP3J0LmFkbGVyPWsocnQuYWRsZXIsSXQscHQsUXQp'@;
put 'OjI9PT1ydC5zdGF0ZS53cmFwJiYocnQuYWRsZXI9RShydC5hZGxlcixJdCxwdCxRdCkpLHJ0Lm5leHRfaW4rPXB0LHJ0LnRvdGFsX2luKz1wdCxwdCl9ZnVuY3Rpb24gSHQocnQsSXQpe3ZhciBwdCxZdCxRdD1ydC5tYXhfY2hhaW5fbGVuZ3RoLER0PXJ0LnN0cnN0YXJ0LEluPXJ0LnByZXZf'@;
put 'bGVuZ3RoLHp0PXJ0Lm5pY2VfbWF0Y2gseW49cnQuc3Ryc3RhcnQ+cnQud19zaXplLUZlP3J0LnN0cnN0YXJ0LShydC53X3NpemUtRmUpOjAseG49cnQud2luZG93LHNuPXJ0LndfbWFzayxCbj1ydC5wcmV2LFJuPXJ0LnN0cnN0YXJ0K0xlLCR0PXhuW0R0K0luLTFdLEZuPXhuW0R0K0luXTty'@;
put 'dC5wcmV2X2xlbmd0aD49cnQuZ29vZF9tYXRjaCYmKFF0Pj49MiksenQ+cnQubG9va2FoZWFkJiYoenQ9cnQubG9va2FoZWFkKTtkb3tpZih4blsocHQ9SXQpK0luXT09PUZuJiZ4bltwdCtJbi0xXT09PSR0JiZ4bltwdF09PT14bltEdF0mJnhuWysrcHRdPT09eG5bRHQrMV0pe0R0Kz0yLHB0'@;
put 'Kys7ZG97fXdoaWxlKHhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysr'@;
put 'RHRdPT09eG5bKytwdF0mJkR0PFJuKTtpZihZdD1MZS0oUm4tRHQpLER0PVJuLUxlLFl0PkluKXtpZihydC5tYXRjaF9zdGFydD1JdCxJbj1ZdCxZdD49enQpYnJlYWs7JHQ9eG5bRHQrSW4tMV0sRm49eG5bRHQrSW5dfX19d2hpbGUoKEl0PUJuW0l0JnNuXSk+eW4mJjAhPS0tUXQpO3JldHVy'@;
put 'biBJbjw9cnQubG9va2FoZWFkP0luOnJ0Lmxvb2thaGVhZH1mdW5jdGlvbiBQdChydCl7dmFyIFF0LER0LHB0LFl0LEluLEl0PXJ0Lndfc2l6ZTtkb3tpZihZdD1ydC53aW5kb3dfc2l6ZS1ydC5sb29rYWhlYWQtcnQuc3Ryc3RhcnQscnQuc3Ryc3RhcnQ+PUl0KyhJdC1GZSkpe0suYXJyYXlT'@;
put 'ZXQocnQud2luZG93LHJ0LndpbmRvdyxJdCxJdCwwKSxydC5tYXRjaF9zdGFydC09SXQscnQuc3Ryc3RhcnQtPUl0LHJ0LmJsb2NrX3N0YXJ0LT1JdCxRdD1EdD1ydC5oYXNoX3NpemU7ZG97cHQ9cnQuaGVhZFstLVF0XSxydC5oZWFkW1F0XT1wdD49SXQ/cHQtSXQ6MH13aGlsZSgtLUR0KTtR'@;
put 'dD1EdD1JdDtkb3twdD1ydC5wcmV2Wy0tUXRdLHJ0LnByZXZbUXRdPXB0Pj1JdD9wdC1JdDowfXdoaWxlKC0tRHQpO1l0Kz1JdH1pZigwPT09cnQuc3RybS5hdmFpbF9pbilicmVhaztpZihEdD1NdChydC5zdHJtLHJ0LndpbmRvdyxydC5zdHJzdGFydCtydC5sb29rYWhlYWQsWXQpLHJ0Lmxv'@;
put 'b2thaGVhZCs9RHQscnQubG9va2FoZWFkK3J0Lmluc2VydD49eGUpZm9yKHJ0Lmluc19oPXJ0LndpbmRvd1tJbj1ydC5zdHJzdGFydC1ydC5pbnNlcnRdLHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbSW4rMV0pJnJ0Lmhhc2hfbWFzaztydC5pbnNlcnQmJihy'@;
put 'dC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W0luK3hlLTFdKSZydC5oYXNoX21hc2sscnQucHJldltJbiZydC53X21hc2tdPXJ0LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPUluLEluKysscnQuaW5zZXJ0LS0sIShydC5sb29rYWhlYWQrcnQuaW5z'@;
put 'ZXJ0PHhlKSk7KTt9d2hpbGUocnQubG9va2FoZWFkPEZlJiYwIT09cnQuc3RybS5hdmFpbF9pbil9ZnVuY3Rpb24gQ24ocnQsSXQpe2Zvcih2YXIgUXQsRHQ7Oyl7aWYocnQubG9va2FoZWFkPEZlKXtpZihQdChydCkscnQubG9va2FoZWFkPEZlJiZJdD09PVYpcmV0dXJuIDE7aWYoMD09PXJ0'@;
put 'Lmxvb2thaGVhZClicmVha31pZihRdD0wLHJ0Lmxvb2thaGVhZD49eGUmJihydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0K3hlLTFdKSZydC5oYXNoX21hc2ssUXQ9cnQucHJldltydC5zdHJzdGFydCZydC53X21hc2tdPXJ0LmhlYWRbcnQu'@;
put 'aW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPXJ0LnN0cnN0YXJ0KSwwIT09UXQmJnJ0LnN0cnN0YXJ0LVF0PD1ydC53X3NpemUtRmUmJihydC5tYXRjaF9sZW5ndGg9SHQocnQsUXQpKSxydC5tYXRjaF9sZW5ndGg+PXhlKWlmKER0PUkuX3RyX3RhbGx5KHJ0LHJ0LnN0cnN0YXJ0LXJ0Lm1hdGNo'@;
put 'X3N0YXJ0LHJ0Lm1hdGNoX2xlbmd0aC14ZSkscnQubG9va2FoZWFkLT1ydC5tYXRjaF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPD1ydC5tYXhfbGF6eV9tYXRjaCYmcnQubG9va2FoZWFkPj14ZSl7cnQubWF0Y2hfbGVuZ3RoLS07ZG97cnQuc3Ryc3RhcnQrKyxydC5pbnNfaD0ocnQuaW5zX2g8'@;
put 'PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0K3hlLTFdKSZydC5oYXNoX21hc2ssUXQ9cnQucHJldltydC5zdHJzdGFydCZydC53X21hc2tdPXJ0LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPXJ0LnN0cnN0YXJ0fXdoaWxlKDAhPS0tcnQubWF0Y2hfbGVuZ3Ro'@;
put 'KTtydC5zdHJzdGFydCsrfWVsc2UgcnQuc3Ryc3RhcnQrPXJ0Lm1hdGNoX2xlbmd0aCxydC5tYXRjaF9sZW5ndGg9MCxydC5pbnNfaD1ydC53aW5kb3dbcnQuc3Ryc3RhcnRdLHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3RhcnQrMV0pJnJ0Lmhh'@;
put 'c2hfbWFzaztlbHNlIER0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0XSkscnQubG9va2FoZWFkLS0scnQuc3Ryc3RhcnQrKztpZihEdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9cnQuc3Ryc3RhcnQ8'@;
put 'eGUtMT9ydC5zdHJzdGFydDp4ZS0xLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIFV0KHJ0LEl0KXtmb3IodmFyIFF0LER0LHB0Ozspe2lmKHJ0Lmxv'@;
put 'b2thaGVhZDxGZSl7aWYoUHQocnQpLHJ0Lmxvb2thaGVhZDxGZSYmSXQ9PT1WKXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9aWYoUXQ9MCxydC5sb29rYWhlYWQ+PXhlJiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4'@;
put 'ZS0xXSkmcnQuaGFzaF9tYXNrLFF0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydCkscnQucHJldl9sZW5ndGg9cnQubWF0Y2hfbGVuZ3RoLHJ0LnByZXZfbWF0Y2g9cnQubWF0Y2hfc3RhcnQscnQu'@;
put 'bWF0Y2hfbGVuZ3RoPXhlLTEsMCE9PVF0JiZydC5wcmV2X2xlbmd0aDxydC5tYXhfbGF6eV9tYXRjaCYmcnQuc3Ryc3RhcnQtUXQ8PXJ0Lndfc2l6ZS1GZSYmKHJ0Lm1hdGNoX2xlbmd0aD1IdChydCxRdCkscnQubWF0Y2hfbGVuZ3RoPD01JiYoMT09PXJ0LnN0cmF0ZWd5fHxydC5tYXRjaF9s'@;
put 'ZW5ndGg9PT14ZSYmcnQuc3Ryc3RhcnQtcnQubWF0Y2hfc3RhcnQ+NDA5NikmJihydC5tYXRjaF9sZW5ndGg9eGUtMSkpLHJ0LnByZXZfbGVuZ3RoPj14ZSYmcnQubWF0Y2hfbGVuZ3RoPD1ydC5wcmV2X2xlbmd0aCl7cHQ9cnQuc3Ryc3RhcnQrcnQubG9va2FoZWFkLXhlLER0PUkuX3RyX3Rh'@;
put 'bGx5KHJ0LHJ0LnN0cnN0YXJ0LTEtcnQucHJldl9tYXRjaCxydC5wcmV2X2xlbmd0aC14ZSkscnQubG9va2FoZWFkLT1ydC5wcmV2X2xlbmd0aC0xLHJ0LnByZXZfbGVuZ3RoLT0yO2RveysrcnQuc3Ryc3RhcnQ8PXB0JiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0Lndp'@;
put 'bmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLFF0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydCl9d2hpbGUoMCE9LS1ydC5wcmV2X2xlbmd0aCk7aWYocnQubWF0Y2hfYXZhaWxh'@;
put 'YmxlPTAscnQubWF0Y2hfbGVuZ3RoPXhlLTEscnQuc3Ryc3RhcnQrKyxEdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYocnQubWF0Y2hfYXZhaWxhYmxlKXtpZigoRHQ9SS5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnQtMV0p'@;
put 'KSYmemUocnQsITEpLHJ0LnN0cnN0YXJ0KysscnQubG9va2FoZWFkLS0sMD09PXJ0LnN0cm0uYXZhaWxfb3V0KXJldHVybiAxfWVsc2UgcnQubWF0Y2hfYXZhaWxhYmxlPTEscnQuc3Ryc3RhcnQrKyxydC5sb29rYWhlYWQtLX1yZXR1cm4gcnQubWF0Y2hfYXZhaWxhYmxlJiYoRHQ9SS5fdHJf'@;
put 'dGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnQtMV0pLHJ0Lm1hdGNoX2F2YWlsYWJsZT0wKSxydC5pbnNlcnQ9cnQuc3Ryc3RhcnQ8eGUtMT9ydC5zdHJzdGFydDp4ZS0xLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUo'@;
put 'cnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCk/MToyfXZhciAkbixlbj1mdW5jdGlvbihydCxJdCxRdCxEdCxwdCl7dGhpcy5nb29kX2xlbmd0aD1ydCx0aGlzLm1heF9sYXp5PUl0LHRoaXMubmljZV9sZW5ndGg9UXQsdGhpcy5tYXhfY2hhaW49RHQsdGhpcy5mdW5jPXB0fTtmdW5jdGlv'@;
put 'biBmdCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMu'@;
put 'bWV0aG9kPU4sdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0w'@;
put 'LHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0'@;
put 'PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9'@;
put 'bmV3IEsuQnVmMTYoMipkZSksdGhpcy5keW5fZHRyZWU9bmV3IEsuQnVmMTYoMiooMipKKzEpKSx0aGlzLmJsX3RyZWU9bmV3IEsuQnVmMTYoMiooMipuZSsxKSksTWUodGhpcy5keW5fbHRyZWUpLE1lKHRoaXMuZHluX2R0cmVlKSxNZSh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGws'@;
put 'dGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBLLkJ1ZjE2KGZlKzEpLHRoaXMuaGVhcD1uZXcgSy5CdWYxNigyKncrMSksTWUodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IEsuQnVmMTYo'@;
put 'Mip3KzEpLE1lKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5i'@;
put 'aV92YWxpZD0wfWZ1bmN0aW9uIGZuKHJ0KXt2YXIgSXQ7cmV0dXJuIHJ0JiZydC5zdGF0ZT8ocnQudG90YWxfaW49cnQudG90YWxfb3V0PTAscnQuZGF0YV90eXBlPUgsKEl0PXJ0LnN0YXRlKS5wZW5kaW5nPTAsSXQucGVuZGluZ19vdXQ9MCxJdC53cmFwPDAmJihJdC53cmFwPS1JdC53cmFw'@;
put 'KSxJdC5zdGF0dXM9SXQud3JhcD9qZTpsdCxydC5hZGxlcj0yPT09SXQud3JhcD8wOjEsSXQubGFzdF9mbHVzaD1WLEkuX3RyX2luaXQoSXQpLHEpOlVlKHJ0LHRlKX1mdW5jdGlvbiBobihydCl7dmFyIEl0PWZuKHJ0KTtyZXR1cm4gSXQ9PT1xJiZmdW5jdGlvbiBIbihydCl7cnQud2luZG93'@;
put 'X3NpemU9MipydC53X3NpemUsTWUocnQuaGVhZCkscnQubWF4X2xhenlfbWF0Y2g9JG5bcnQubGV2ZWxdLm1heF9sYXp5LHJ0Lmdvb2RfbWF0Y2g9JG5bcnQubGV2ZWxdLmdvb2RfbGVuZ3RoLHJ0Lm5pY2VfbWF0Y2g9JG5bcnQubGV2ZWxdLm5pY2VfbGVuZ3RoLHJ0Lm1heF9jaGFpbl9sZW5n'@;
put 'dGg9JG5bcnQubGV2ZWxdLm1heF9jaGFpbixydC5zdHJzdGFydD0wLHJ0LmJsb2NrX3N0YXJ0PTAscnQubG9va2FoZWFkPTAscnQuaW5zZXJ0PTAscnQubWF0Y2hfbGVuZ3RoPXJ0LnByZXZfbGVuZ3RoPXhlLTEscnQubWF0Y2hfYXZhaWxhYmxlPTAscnQuaW5zX2g9MH0ocnQuc3RhdGUpLEl0'@;
put 'fWZ1bmN0aW9uIFh0KHJ0LEl0LFF0LER0LHB0LFl0KXtpZighcnQpcmV0dXJuIHRlO3ZhciBJbj0xO2lmKC0xPT09SXQmJihJdD02KSxEdDwwPyhJbj0wLER0PS1EdCk6RHQ+MTUmJihJbj0yLER0LT0xNikscHQ8MXx8cHQ+OXx8UXQhPT1OfHxEdDw4fHxEdD4xNXx8SXQ8MHx8SXQ+OXx8WXQ8'@;
put 'MHx8WXQ+NClyZXR1cm4gVWUocnQsdGUpOzg9PT1EdCYmKER0PTkpO3ZhciB6dD1uZXcgZnQ7cmV0dXJuIHJ0LnN0YXRlPXp0LHp0LnN0cm09cnQsenQud3JhcD1Jbix6dC5nemhlYWQ9bnVsbCx6dC53X2JpdHM9RHQsenQud19zaXplPTE8PHp0LndfYml0cyx6dC53X21hc2s9enQud19zaXpl'@;
put 'LTEsenQuaGFzaF9iaXRzPXB0KzcsenQuaGFzaF9zaXplPTE8PHp0Lmhhc2hfYml0cyx6dC5oYXNoX21hc2s9enQuaGFzaF9zaXplLTEsenQuaGFzaF9zaGlmdD1+figoenQuaGFzaF9iaXRzK3hlLTEpL3hlKSx6dC53aW5kb3c9bmV3IEsuQnVmOCgyKnp0Lndfc2l6ZSksenQuaGVhZD1uZXcg'@;
put 'Sy5CdWYxNih6dC5oYXNoX3NpemUpLHp0LnByZXY9bmV3IEsuQnVmMTYoenQud19zaXplKSx6dC5saXRfYnVmc2l6ZT0xPDxwdCs2LHp0LnBlbmRpbmdfYnVmX3NpemU9NCp6dC5saXRfYnVmc2l6ZSx6dC5wZW5kaW5nX2J1Zj1uZXcgSy5CdWY4KHp0LnBlbmRpbmdfYnVmX3NpemUpLHp0LmRf'@;
put 'YnVmPXp0LmxpdF9idWZzaXplPj4xLHp0LmxfYnVmPTMqenQubGl0X2J1ZnNpemUsenQubGV2ZWw9SXQsenQuc3RyYXRlZ3k9WXQsenQubWV0aG9kPVF0LGhuKHJ0KX0kbj1bbmV3IGVuKDAsMCwwLDAsZnVuY3Rpb24gb24ocnQsSXQpe3ZhciBRdD02NTUzNTtmb3IoUXQ+cnQucGVuZGluZ19i'@;
put 'dWZfc2l6ZS01JiYoUXQ9cnQucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihydC5sb29rYWhlYWQ8PTEpe2lmKFB0KHJ0KSwwPT09cnQubG9va2FoZWFkJiZJdD09PVYpcmV0dXJuIDE7aWYoMD09PXJ0Lmxvb2thaGVhZClicmVha31ydC5zdHJzdGFydCs9cnQubG9va2FoZWFkLHJ0Lmxvb2th'@;
put 'aGVhZD0wO3ZhciBEdD1ydC5ibG9ja19zdGFydCtRdDtpZigoMD09PXJ0LnN0cnN0YXJ0fHxydC5zdHJzdGFydD49RHQpJiYocnQubG9va2FoZWFkPXJ0LnN0cnN0YXJ0LUR0LHJ0LnN0cnN0YXJ0PUR0LHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpfHxydC5zdHJzdGFydC1ydC5i'@;
put 'bG9ja19zdGFydD49cnQud19zaXplLUZlJiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHJ0Lmluc2VydD0wLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOihydC5zdHJzdGFydD5ydC5ibG9ja19zdGFydCYmemUo'@;
put 'cnQsITEpLDEpfSksbmV3IGVuKDQsNCw4LDQsQ24pLG5ldyBlbig0LDUsMTYsOCxDbiksbmV3IGVuKDQsNiwzMiwzMixDbiksbmV3IGVuKDQsNCwxNiwxNixVdCksbmV3IGVuKDgsMTYsMzIsMzIsVXQpLG5ldyBlbig4LDE2LDEyOCwxMjgsVXQpLG5ldyBlbig4LDMyLDEyOCwyNTYsVXQpLG5l'@;
put 'dyBlbigzMiwxMjgsMjU4LDEwMjQsVXQpLG5ldyBlbigzMiwyNTgsMjU4LDQwOTYsVXQpXSx6LmRlZmxhdGVJbml0PWZ1bmN0aW9uIF90KHJ0LEl0KXtyZXR1cm4gWHQocnQsSXQsTiwxNSw4LDApfSx6LmRlZmxhdGVJbml0Mj1YdCx6LmRlZmxhdGVSZXNldD1obix6LmRlZmxhdGVSZXNldEtl'@;
put 'ZXA9Zm4sei5kZWZsYXRlU2V0SGVhZGVyPWZ1bmN0aW9uIHd0KHJ0LEl0KXtyZXR1cm4gcnQmJnJ0LnN0YXRlJiYyPT09cnQuc3RhdGUud3JhcD8ocnQuc3RhdGUuZ3poZWFkPUl0LHEpOnRlfSx6LmRlZmxhdGU9ZnVuY3Rpb24gTnQocnQsSXQpe3ZhciBRdCxEdCxwdCxZdDtpZighcnR8fCFy'@;
put 'dC5zdGF0ZXx8SXQ+NXx8SXQ8MClyZXR1cm4gcnQ/VWUocnQsdGUpOnRlO2lmKER0PXJ0LnN0YXRlLCFydC5vdXRwdXR8fCFydC5pbnB1dCYmMCE9PXJ0LmF2YWlsX2lufHw2NjY9PT1EdC5zdGF0dXMmJjQhPT1JdClyZXR1cm4gVWUocnQsMD09PXJ0LmF2YWlsX291dD8tNTp0ZSk7aWYoRHQu'@;
put 'c3RybT1ydCxRdD1EdC5sYXN0X2ZsdXNoLER0Lmxhc3RfZmx1c2g9SXQsRHQuc3RhdHVzPT09amUpaWYoMj09PUR0LndyYXApcnQuYWRsZXI9MCxvdChEdCwzMSksb3QoRHQsMTM5KSxvdChEdCw4KSxEdC5nemhlYWQ/KG90KER0LChEdC5nemhlYWQudGV4dD8xOjApKyhEdC5nemhlYWQuaGNy'@;
put 'Yz8yOjApKyhEdC5nemhlYWQuZXh0cmE/NDowKSsoRHQuZ3poZWFkLm5hbWU/ODowKSsoRHQuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLG90KER0LDI1NSZEdC5nemhlYWQudGltZSksb3QoRHQsRHQuZ3poZWFkLnRpbWU+PjgmMjU1KSxvdChEdCxEdC5nemhlYWQudGltZT4+MTYmMjU1KSxvdChE'@;
put 'dCxEdC5nemhlYWQudGltZT4+MjQmMjU1KSxvdChEdCw5PT09RHQubGV2ZWw/MjpEdC5zdHJhdGVneT49Mnx8RHQubGV2ZWw8Mj80OjApLG90KER0LDI1NSZEdC5nemhlYWQub3MpLER0Lmd6aGVhZC5leHRyYSYmRHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKG90KER0LDI1NSZEdC5nemhlYWQu'@;
put 'ZXh0cmEubGVuZ3RoKSxvdChEdCxEdC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLER0Lmd6aGVhZC5oY3JjJiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLDApKSxEdC5nemluZGV4PTAsRHQuc3RhdHVzPTY5KToob3QoRHQsMCksb3QoRHQsMCks'@;
put 'b3QoRHQsMCksb3QoRHQsMCksb3QoRHQsMCksb3QoRHQsOT09PUR0LmxldmVsPzI6RHQuc3RyYXRlZ3k+PTJ8fER0LmxldmVsPDI/NDowKSxvdChEdCwzKSxEdC5zdGF0dXM9bHQpO2Vsc2V7dmFyIEluPU4rKER0LndfYml0cy04PDw0KTw8ODtJbnw9KER0LnN0cmF0ZWd5Pj0yfHxEdC5sZXZl'@;
put 'bDwyPzA6RHQubGV2ZWw8Nj8xOjY9PT1EdC5sZXZlbD8yOjMpPDw2LDAhPT1EdC5zdHJzdGFydCYmKElufD0zMiksSW4rPTMxLUluJTMxLER0LnN0YXR1cz1sdCx1dChEdCxJbiksMCE9PUR0LnN0cnN0YXJ0JiYodXQoRHQscnQuYWRsZXI+Pj4xNiksdXQoRHQsNjU1MzUmcnQuYWRsZXIpKSxy'@;
put 'dC5hZGxlcj0xfWlmKDY5PT09RHQuc3RhdHVzKWlmKER0Lmd6aGVhZC5leHRyYSl7Zm9yKHB0PUR0LnBlbmRpbmc7RHQuZ3ppbmRleDwoNjU1MzUmRHQuZ3poZWFkLmV4dHJhLmxlbmd0aCkmJihEdC5wZW5kaW5nIT09RHQucGVuZGluZ19idWZfc2l6ZXx8KER0Lmd6aGVhZC5oY3JjJiZEdC5w'@;
put 'ZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRGUocnQpLHB0PUR0LnBlbmRpbmcsRHQucGVuZGluZyE9PUR0LnBlbmRpbmdfYnVmX3NpemUpKTspb3QoRHQsMjU1JkR0Lmd6aGVhZC5leHRyYVtEdC5nemluZGV4XSksRHQu'@;
put 'Z3ppbmRleCsrO0R0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRHQuZ3ppbmRleD09PUR0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihEdC5nemluZGV4PTAsRHQuc3RhdHVzPTczKX1lbHNl'@;
put 'IER0LnN0YXR1cz03MztpZig3Mz09PUR0LnN0YXR1cylpZihEdC5nemhlYWQubmFtZSl7cHQ9RHQucGVuZGluZztkb3tpZihEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSYmKER0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5k'@;
put 'aW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRGUocnQpLHB0PUR0LnBlbmRpbmcsRHQucGVuZGluZz09PUR0LnBlbmRpbmdfYnVmX3NpemUpKXtZdD0xO2JyZWFrfVl0PUR0Lmd6aW5kZXg8RHQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZEdC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KER0Lmd6'@;
put 'aW5kZXgrKyk6MCxvdChEdCxZdCl9d2hpbGUoMCE9PVl0KTtEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLDA9PT1ZdCYmKER0Lmd6aW5kZXg9MCxEdC5zdGF0dXM9OTEpfWVsc2UgRHQu'@;
put 'c3RhdHVzPTkxO2lmKDkxPT09RHQuc3RhdHVzKWlmKER0Lmd6aGVhZC5jb21tZW50KXtwdD1EdC5wZW5kaW5nO2Rve2lmKER0LnBlbmRpbmc9PT1EdC5wZW5kaW5nX2J1Zl9zaXplJiYoRHQuZ3poZWFkLmhjcmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0LnBlbmRp'@;
put 'bmdfYnVmLER0LnBlbmRpbmctcHQscHQpKSxEZShydCkscHQ9RHQucGVuZGluZyxEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSkpe1l0PTE7YnJlYWt9WXQ9RHQuZ3ppbmRleDxEdC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JkR0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQo'@;
put 'RHQuZ3ppbmRleCsrKTowLG90KER0LFl0KX13aGlsZSgwIT09WXQpO0R0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksMD09PVl0JiYoRHQuc3RhdHVzPTEwMyl9ZWxzZSBEdC5zdGF0dXM9'@;
put 'MTAzO2lmKDEwMz09PUR0LnN0YXR1cyYmKER0Lmd6aGVhZC5oY3JjPyhEdC5wZW5kaW5nKzI+RHQucGVuZGluZ19idWZfc2l6ZSYmRGUocnQpLER0LnBlbmRpbmcrMjw9RHQucGVuZGluZ19idWZfc2l6ZSYmKG90KER0LDI1NSZydC5hZGxlciksb3QoRHQscnQuYWRsZXI+PjgmMjU1KSxydC5h'@;
put 'ZGxlcj0wLER0LnN0YXR1cz1sdCkpOkR0LnN0YXR1cz1sdCksMCE9PUR0LnBlbmRpbmcpe2lmKERlKHJ0KSwwPT09cnQuYXZhaWxfb3V0KXJldHVybiBEdC5sYXN0X2ZsdXNoPS0xLHF9ZWxzZSBpZigwPT09cnQuYXZhaWxfaW4mJmh0KEl0KTw9aHQoUXQpJiY0IT09SXQpcmV0dXJuIFVlKHJ0'@;
put 'LC01KTtpZig2NjY9PT1EdC5zdGF0dXMmJjAhPT1ydC5hdmFpbF9pbilyZXR1cm4gVWUocnQsLTUpO2lmKDAhPT1ydC5hdmFpbF9pbnx8MCE9PUR0Lmxvb2thaGVhZHx8SXQhPT1WJiY2NjYhPT1EdC5zdGF0dXMpe3ZhciB5bj0yPT09RHQuc3RyYXRlZ3k/ZnVuY3Rpb24gV24ocnQsSXQpe2Zv'@;
put 'cih2YXIgUXQ7Oyl7aWYoMD09PXJ0Lmxvb2thaGVhZCYmKFB0KHJ0KSwwPT09cnQubG9va2FoZWFkKSl7aWYoSXQ9PT1WKXJldHVybiAxO2JyZWFrfWlmKHJ0Lm1hdGNoX2xlbmd0aD0wLFF0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0XSkscnQubG9va2FoZWFkLS0s'@;
put 'cnQuc3Ryc3RhcnQrKyxRdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9MCw0PT09SXQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFp'@;
put 'bF9vdXQpPzE6Mn0oRHQsSXQpOjM9PT1EdC5zdHJhdGVneT9mdW5jdGlvbiBibihydCxJdCl7Zm9yKHZhciBRdCxEdCxwdCxZdCxJbj1ydC53aW5kb3c7Oyl7aWYocnQubG9va2FoZWFkPD1MZSl7aWYoUHQocnQpLHJ0Lmxvb2thaGVhZDw9TGUmJkl0PT09VilyZXR1cm4gMTtpZigwPT09cnQu'@;
put 'bG9va2FoZWFkKWJyZWFrfWlmKHJ0Lm1hdGNoX2xlbmd0aD0wLHJ0Lmxvb2thaGVhZD49eGUmJnJ0LnN0cnN0YXJ0PjAmJihEdD1JbltwdD1ydC5zdHJzdGFydC0xXSk9PT1JblsrK3B0XSYmRHQ9PT1JblsrK3B0XSYmRHQ9PT1JblsrK3B0XSl7WXQ9cnQuc3Ryc3RhcnQrTGU7ZG97fXdoaWxl'@;
put 'KER0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJnB0PFl0KTtydC5tYXRjaF9sZW5ndGg9TGUtKFl0LXB0KSxydC5tYXRjaF9s'@;
put 'ZW5ndGg+cnQubG9va2FoZWFkJiYocnQubWF0Y2hfbGVuZ3RoPXJ0Lmxvb2thaGVhZCl9aWYocnQubWF0Y2hfbGVuZ3RoPj14ZT8oUXQ9SS5fdHJfdGFsbHkocnQsMSxydC5tYXRjaF9sZW5ndGgteGUpLHJ0Lmxvb2thaGVhZC09cnQubWF0Y2hfbGVuZ3RoLHJ0LnN0cnN0YXJ0Kz1ydC5tYXRj'@;
put 'aF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPTApOihRdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVhZC0tLHJ0LnN0cnN0YXJ0KyspLFF0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHJ0Lmluc2Vy'@;
put 'dD0wLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCk/MToyfShEdCxJdCk6JG5bRHQubGV2ZWxdLmZ1bmMoRHQsSXQpO2lmKCgzPT09eW58fDQ9PT15bikmJihEdC5zdGF0dXM9'@;
put 'NjY2KSwxPT09eW58fDM9PT15bilyZXR1cm4gMD09PXJ0LmF2YWlsX291dCYmKER0Lmxhc3RfZmx1c2g9LTEpLHE7aWYoMj09PXluJiYoMT09PUl0P0kuX3RyX2FsaWduKER0KTo1IT09SXQmJihJLl90cl9zdG9yZWRfYmxvY2soRHQsMCwwLCExKSwzPT09SXQmJihNZShEdC5oZWFkKSwwPT09'@;
put 'RHQubG9va2FoZWFkJiYoRHQuc3Ryc3RhcnQ9MCxEdC5ibG9ja19zdGFydD0wLER0Lmluc2VydD0wKSkpLERlKHJ0KSwwPT09cnQuYXZhaWxfb3V0KSlyZXR1cm4gRHQubGFzdF9mbHVzaD0tMSxxfXJldHVybiA0IT09SXQ/cTpEdC53cmFwPD0wPzE6KDI9PT1EdC53cmFwPyhvdChEdCwyNTUm'@;
put 'cnQuYWRsZXIpLG90KER0LHJ0LmFkbGVyPj44JjI1NSksb3QoRHQscnQuYWRsZXI+PjE2JjI1NSksb3QoRHQscnQuYWRsZXI+PjI0JjI1NSksb3QoRHQsMjU1JnJ0LnRvdGFsX2luKSxvdChEdCxydC50b3RhbF9pbj4+OCYyNTUpLG90KER0LHJ0LnRvdGFsX2luPj4xNiYyNTUpLG90KER0LHJ0'@;
put 'LnRvdGFsX2luPj4yNCYyNTUpKToodXQoRHQscnQuYWRsZXI+Pj4xNiksdXQoRHQsNjU1MzUmcnQuYWRsZXIpKSxEZShydCksRHQud3JhcD4wJiYoRHQud3JhcD0tRHQud3JhcCksMCE9PUR0LnBlbmRpbmc/cToxKX0sei5kZWZsYXRlRW5kPWZ1bmN0aW9uIG1uKHJ0KXt2YXIgSXQ7cmV0dXJu'@;
put 'IHJ0JiZydC5zdGF0ZT8oSXQ9cnQuc3RhdGUuc3RhdHVzKSE9PWplJiY2OSE9PUl0JiY3MyE9PUl0JiY5MSE9PUl0JiYxMDMhPT1JdCYmSXQhPT1sdCYmNjY2IT09SXQ/VWUocnQsdGUpOihydC5zdGF0ZT1udWxsLEl0PT09bHQ/VWUocnQsLTMpOnEpOnRlfSx6LmRlZmxhdGVJbmZvPSJwYWtv'@;
put 'IGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9tZXNzYWdlcyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPWZ1bmN0aW9u'@;
put 'IEsoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oTyxSLHop'@;
put 'eyJ1c2Ugc3RyaWN0IjtSLmV4cG9ydHM9ZnVuY3Rpb24oRSxqKXt2YXIgVixCLFksWCxVLHEsZWUsdGUsb2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTLHYscCx3LEo7dz1FLmlucHV0LFk9KEI9RS5uZXh0X2luKSsoRS5hdmFpbF9pbi01KSxKPUUub3V0cHV0LFU9KFg9RS5uZXh0X291'@;
put 'dCktKGotRS5hdmFpbF9vdXQpLHE9WCsoRS5hdmFpbF9vdXQtMjU3KSxlZT0oVj1FLnN0YXRlKS5kbWF4LHRlPVYud3NpemUsb2U9Vi53aGF2ZSxzZT1WLnduZXh0LGhlPVYud2luZG93LHVlPVYuaG9sZCxjZT1WLmJpdHMsRz1WLmxlbmNvZGUsYj1WLmRpc3Rjb2RlLEQ9KDE8PFYubGVuYml0'@;
put 'cyktMSxIPSgxPDxWLmRpc3RiaXRzKS0xO2U6ZG97Y2U8MTUmJih1ZSs9d1tCKytdPDxjZSx1ZSs9d1tCKytdPDwoY2UrPTgpLGNlKz04KSxOPUdbdWUmRF07dDpmb3IoOzspe2lmKHVlPj4+PWc9Tj4+PjI0LGNlLT1nLDA9PShnPU4+Pj4xNiYyNTUpKUpbWCsrXT02NTUzNSZOO2Vsc2V7aWYo'@;
put 'ISgxNiZnKSl7aWYoNjQmZyl7aWYoMzImZyl7Vi5tb2RlPTEyO2JyZWFrIGV9RS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsVi5tb2RlPTMwO2JyZWFrIGV9Tj1HWyg2NTUzNSZOKSsodWUmKDE8PGcpLTEpXTtjb250aW51ZSB0fWZvcihDPTY1NTM1Jk4sKGcmPTE1KSYmKGNl'@;
put 'PGcmJih1ZSs9d1tCKytdPDxjZSxjZSs9OCksQys9dWUmKDE8PGcpLTEsdWU+Pj49ZyxjZS09ZyksY2U8MTUmJih1ZSs9d1tCKytdPDxjZSx1ZSs9d1tCKytdPDwoY2UrPTgpLGNlKz04KSxOPWJbdWUmSF07Oyl7aWYodWU+Pj49Zz1OPj4+MjQsY2UtPWcsMTYmKGc9Tj4+PjE2JjI1NSkpe2lm'@;
put 'KFM9NjU1MzUmTixjZTwoZyY9MTUpJiYodWUrPXdbQisrXTw8Y2UsKGNlKz04KTxnJiYodWUrPXdbQisrXTw8Y2UsY2UrPTgpKSwoUys9dWUmKDE8PGcpLTEpPmVlKXtFLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFYubW9kZT0zMDticmVhayBlfWlmKHVlPj4+PWcsY2Ut'@;
put 'PWcsUz4oZz1YLVUpKXtpZigoZz1TLWcpPm9lJiZWLnNhbmUpe0UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVi5tb2RlPTMwO2JyZWFrIGV9aWYodj0wLHA9aGUsMD09PXNlKXtpZih2Kz10ZS1nLGc8Qyl7Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO3Y9'@;
put 'WC1TLHA9Sn19ZWxzZSBpZihzZTxnKXtpZih2Kz10ZStzZS1nLChnLT1zZSk8Qyl7Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO2lmKHY9MCxzZTxDKXtDLT1nPXNlO2Rve0pbWCsrXT1oZVt2KytdfXdoaWxlKC0tZyk7dj1YLVMscD1KfX19ZWxzZSBpZih2Kz1zZS1nLGc8Qyl7'@;
put 'Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO3Y9WC1TLHA9Sn1mb3IoO0M+MjspSltYKytdPXBbdisrXSxKW1grK109cFt2KytdLEpbWCsrXT1wW3YrK10sQy09MztDJiYoSltYKytdPXBbdisrXSxDPjEmJihKW1grK109cFt2KytdKSl9ZWxzZXt2PVgtUztkb3tKW1grK109Slt2'@;
put 'KytdLEpbWCsrXT1KW3YrK10sSltYKytdPUpbdisrXSxDLT0zfXdoaWxlKEM+Mik7QyYmKEpbWCsrXT1KW3YrK10sQz4xJiYoSltYKytdPUpbdisrXSkpfWJyZWFrfWlmKDY0Jmcpe0UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLFYubW9kZT0zMDticmVhayBlfU49YlsoNjU1MzUmTikr'@;
put 'KHVlJigxPDxnKS0xKV19fWJyZWFrfX13aGlsZShCPFkmJlg8cSk7dWUmPSgxPDwoY2UtPShDPWNlPj4zKTw8MykpLTEsRS5uZXh0X2luPUItPUMsRS5uZXh0X291dD1YLEUuYXZhaWxfaW49QjxZP1ktQis1OjUtKEItWSksRS5hdmFpbF9vdXQ9WDxxP3EtWCsyNTc6MjU3LShYLXEpLFYuaG9s'@;
put 'ZD11ZSxWLmJpdHM9Y2V9fSx7fV0sMzU6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi4vdXRpbHMvY29tbW9uIiksST1PKCIuL2FkbGVyMzIiKSxrPU8oIi4vY3JjMzIiKSxFPU8oIi4vaW5mZmFzdCIpLGo9TygiLi9pbmZ0cmVlcyIpLGVlPTAsc2U9LTIsYj0xLE1l'@;
put 'PTg1MixEZT01OTI7ZnVuY3Rpb24gdXQod3Qpe3JldHVybih3dD4+PjI0JjI1NSkrKHd0Pj4+OCY2NTI4MCkrKCg2NTI4MCZ3dCk8PDgpKygoMjU1Jnd0KTw8MjQpfWZ1bmN0aW9uIE10KCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhp'@;
put 'cy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5n'@;
put 'dGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGws'@;
put 'dGhpcy5sZW5zPW5ldyBLLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBLLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIEh0KHd0KXt2YXIgWHQ7cmV0dXJuIHd0JiZ3dC5zdGF0'@;
put 'ZT8od3QudG90YWxfaW49d3QudG90YWxfb3V0PShYdD13dC5zdGF0ZSkudG90YWw9MCx3dC5tc2c9IiIsWHQud3JhcCYmKHd0LmFkbGVyPTEmWHQud3JhcCksWHQubW9kZT1iLFh0Lmxhc3Q9MCxYdC5oYXZlZGljdD0wLFh0LmRtYXg9MzI3NjgsWHQuaGVhZD1udWxsLFh0LmhvbGQ9MCxYdC5i'@;
put 'aXRzPTAsWHQubGVuY29kZT1YdC5sZW5keW49bmV3IEsuQnVmMzIoTWUpLFh0LmRpc3Rjb2RlPVh0LmRpc3RkeW49bmV3IEsuQnVmMzIoRGUpLFh0LnNhbmU9MSxYdC5iYWNrPS0xLGVlKTpzZX1mdW5jdGlvbiBQdCh3dCl7dmFyIFh0O3JldHVybiB3dCYmd3Quc3RhdGU/KChYdD13dC5zdGF0'@;
put 'ZSkud3NpemU9MCxYdC53aGF2ZT0wLFh0LnduZXh0PTAsSHQod3QpKTpzZX1mdW5jdGlvbiBvbih3dCxYdCl7dmFyIF90LE50O3JldHVybiF3dHx8IXd0LnN0YXRlfHwoTnQ9d3Quc3RhdGUsWHQ8MD8oX3Q9MCxYdD0tWHQpOihfdD0xKyhYdD4+NCksWHQ8NDgmJihYdCY9MTUpKSxYdCYmKFh0'@;
put 'PDh8fFh0PjE1KSk/c2U6KG51bGwhPT1OdC53aW5kb3cmJk50LndiaXRzIT09WHQmJihOdC53aW5kb3c9bnVsbCksTnQud3JhcD1fdCxOdC53Yml0cz1YdCxQdCh3dCkpfWZ1bmN0aW9uIENuKHd0LFh0KXt2YXIgX3QsTnQ7cmV0dXJuIHd0PyhOdD1uZXcgTXQsd3Quc3RhdGU9TnQsTnQud2lu'@;
put 'ZG93PW51bGwsKF90PW9uKHd0LFh0KSkhPT1lZSYmKHd0LnN0YXRlPW51bGwpLF90KTpzZX12YXIgV24sZW4sYm49ITA7ZnVuY3Rpb24gJG4od3Qpe2lmKGJuKXt2YXIgWHQ7Zm9yKFduPW5ldyBLLkJ1ZjMyKDUxMiksZW49bmV3IEsuQnVmMzIoMzIpLFh0PTA7WHQ8MTQ0Oyl3dC5sZW5zW1h0'@;
put 'KytdPTg7Zm9yKDtYdDwyNTY7KXd0LmxlbnNbWHQrK109OTtmb3IoO1h0PDI4MDspd3QubGVuc1tYdCsrXT03O2Zvcig7WHQ8Mjg4Oyl3dC5sZW5zW1h0KytdPTg7Zm9yKGooMSx3dC5sZW5zLDAsMjg4LFduLDAsd3Qud29yayx7Yml0czo5fSksWHQ9MDtYdDwzMjspd3QubGVuc1tYdCsrXT01'@;
put 'O2ooMix3dC5sZW5zLDAsMzIsZW4sMCx3dC53b3JrLHtiaXRzOjV9KSxibj0hMX13dC5sZW5jb2RlPVduLHd0LmxlbmJpdHM9OSx3dC5kaXN0Y29kZT1lbix3dC5kaXN0Yml0cz01fXouaW5mbGF0ZVJlc2V0PVB0LHouaW5mbGF0ZVJlc2V0Mj1vbix6LmluZmxhdGVSZXNldEtlZXA9SHQsei5p'@;
put 'bmZsYXRlSW5pdD1mdW5jdGlvbiBVdCh3dCl7cmV0dXJuIENuKHd0LDE1KX0sei5pbmZsYXRlSW5pdDI9Q24sei5pbmZsYXRlPWZ1bmN0aW9uIGZ0KHd0LFh0KXt2YXIgX3QsTnQsbW4scnQsSXQsUXQsRHQscHQsWXQsSW4senQseW4seG4sc24sUm4sJHQsRm4sbmksbG4sam4scXIsZ2ksVWks'@;
put 'S3IsQm49MCx4cj1uZXcgSy5CdWY4KDQpLG5vPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighd3R8fCF3dC5zdGF0ZXx8IXd0Lm91dHB1dHx8IXd0LmlucHV0JiYwIT09d3QuYXZhaWxfaW4pcmV0dXJuIHNlOzEyPT09KF90PXd0LnN0YXRlKS5t'@;
put 'b2RlJiYoX3QubW9kZT0xMyksSXQ9d3QubmV4dF9vdXQsbW49d3Qub3V0cHV0LHJ0PXd0Lm5leHRfaW4sTnQ9d3QuaW5wdXQscHQ9X3QuaG9sZCxZdD1fdC5iaXRzLEluPVF0PXd0LmF2YWlsX2luLHp0PUR0PXd0LmF2YWlsX291dCxnaT1lZTtlOmZvcig7Oylzd2l0Y2goX3QubW9kZSl7Y2Fz'@;
put 'ZSBiOmlmKDA9PT1fdC53cmFwKXtfdC5tb2RlPTEzO2JyZWFrfWZvcig7WXQ8MTY7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoMiZfdC53cmFwJiYzNTYxNT09PXB0KXtfdC5jaGVjaz0wLHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90'@;
put 'LmNoZWNrPWsoX3QuY2hlY2sseHIsMiwwKSxwdD0wLFl0PTAsX3QubW9kZT0yO2JyZWFrfWlmKF90LmZsYWdzPTAsX3QuaGVhZCYmKF90LmhlYWQuZG9uZT0hMSksISgxJl90LndyYXApfHwoKCgyNTUmcHQpPDw4KSsocHQ+PjgpKSUzMSl7d3QubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNr'@;
put 'IixfdC5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZwdCkpe3d0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9aWYoWXQtPTQscXI9OCsoMTUmKHB0Pj4+PTQpKSwwPT09X3Qud2JpdHMpX3Qud2JpdHM9cXI7ZWxzZSBpZihxcj5fdC53Yml0cyl7d3Qu'@;
put 'bXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixfdC5tb2RlPTMwO2JyZWFrfV90LmRtYXg9MTw8cXIsd3QuYWRsZXI9X3QuY2hlY2s9MSxfdC5tb2RlPTUxMiZwdD8xMDoxMixwdD0wLFl0PTA7YnJlYWs7Y2FzZSAyOmZvcig7WXQ8MTY7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFty'@;
put 'dCsrXTw8WXQsWXQrPTh9aWYoX3QuZmxhZ3M9cHQsOCE9KDI1NSZfdC5mbGFncykpe3d0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmX3QuZmxhZ3Mpe3d0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixfdC5tb2RlPTMw'@;
put 'O2JyZWFrfV90LmhlYWQmJihfdC5oZWFkLnRleHQ9cHQ+PjgmMSksNTEyJl90LmZsYWdzJiYoeHJbMF09MjU1JnB0LHhyWzFdPXB0Pj4+OCYyNTUsX3QuY2hlY2s9ayhfdC5jaGVjayx4ciwyLDApKSxwdD0wLFl0PTAsX3QubW9kZT0zO2Nhc2UgMzpmb3IoO1l0PDMyOyl7aWYoMD09PVF0KWJy'@;
put 'ZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90LmhlYWQmJihfdC5oZWFkLnRpbWU9cHQpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LHhyWzJdPXB0Pj4+MTYmMjU1LHhyWzNdPXB0Pj4+MjQmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIs'@;
put 'NCwwKSkscHQ9MCxZdD0wLF90Lm1vZGU9NDtjYXNlIDQ6Zm9yKDtZdDwxNjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5oZWFkJiYoX3QuaGVhZC54ZmxhZ3M9MjU1JnB0LF90LmhlYWQub3M9cHQ+PjgpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1'@;
put 'NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsMiwwKSkscHQ9MCxZdD0wLF90Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZfdC5mbGFncyl7Zm9yKDtZdDwxNjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5sZW5ndGg9'@;
put 'cHQsX3QuaGVhZCYmKF90LmhlYWQuZXh0cmFfbGVuPXB0KSw1MTImX3QuZmxhZ3MmJih4clswXT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1NSxfdC5jaGVjaz1rKF90LmNoZWNrLHhyLDIsMCkpLHB0PTAsWXQ9MH1lbHNlIF90LmhlYWQmJihfdC5oZWFkLmV4dHJhPW51bGwpO190Lm1vZGU9Njtj'@;
put 'YXNlIDY6aWYoMTAyNCZfdC5mbGFncyYmKCh5bj1fdC5sZW5ndGgpPlF0JiYoeW49UXQpLHluJiYoX3QuaGVhZCYmKHFyPV90LmhlYWQuZXh0cmFfbGVuLV90Lmxlbmd0aCxfdC5oZWFkLmV4dHJhfHwoX3QuaGVhZC5leHRyYT1uZXcgQXJyYXkoX3QuaGVhZC5leHRyYV9sZW4pKSxLLmFycmF5'@;
put 'U2V0KF90LmhlYWQuZXh0cmEsTnQscnQseW4scXIpKSw1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1rKF90LmNoZWNrLE50LHluLHJ0KSksUXQtPXluLHJ0Kz15bixfdC5sZW5ndGgtPXluKSxfdC5sZW5ndGgpKWJyZWFrIGU7X3QubGVuZ3RoPTAsX3QubW9kZT03O2Nhc2UgNzppZigyMDQ4Jl90'@;
put 'LmZsYWdzKXtpZigwPT09UXQpYnJlYWsgZTt5bj0wO2Rve3FyPU50W3J0K3luKytdLF90LmhlYWQmJnFyJiZfdC5sZW5ndGg8NjU1MzYmJihfdC5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUocXIpKX13aGlsZShxciYmeW48UXQpO2lmKDUxMiZfdC5mbGFncyYmKF90LmNoZWNrPWso'@;
put 'X3QuY2hlY2ssTnQseW4scnQpKSxRdC09eW4scnQrPXluLHFyKWJyZWFrIGV9ZWxzZSBfdC5oZWFkJiYoX3QuaGVhZC5uYW1lPW51bGwpO190Lmxlbmd0aD0wLF90Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZfdC5mbGFncyl7aWYoMD09PVF0KWJyZWFrIGU7eW49MDtkb3txcj1OdFtydCt5bisr'@;
put 'XSxfdC5oZWFkJiZxciYmX3QubGVuZ3RoPDY1NTM2JiYoX3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHFyKSl9d2hpbGUocXImJnluPFF0KTtpZig1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1rKF90LmNoZWNrLE50LHluLHJ0KSksUXQtPXluLHJ0Kz15bixxcilicmVhayBl'@;
put 'fWVsc2UgX3QuaGVhZCYmKF90LmhlYWQuY29tbWVudD1udWxsKTtfdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZfdC5mbGFncyl7Zm9yKDtZdDwxNjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihwdCE9PSg2NTUzNSZfdC5jaGVjaykpe3d0Lm1zZz0i'@;
put 'aGVhZGVyIGNyYyBtaXNtYXRjaCIsX3QubW9kZT0zMDticmVha31wdD0wLFl0PTB9X3QuaGVhZCYmKF90LmhlYWQuaGNyYz1fdC5mbGFncz4+OSYxLF90LmhlYWQuZG9uZT0hMCksd3QuYWRsZXI9X3QuY2hlY2s9MCxfdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtZdDwzMjspe2lmKDA9'@;
put 'PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH13dC5hZGxlcj1fdC5jaGVjaz11dChwdCkscHQ9MCxZdD0wLF90Lm1vZGU9MTE7Y2FzZSAxMTppZigwPT09X3QuaGF2ZWRpY3QpcmV0dXJuIHd0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0'@;
put 'LHd0LmF2YWlsX2luPVF0LF90LmhvbGQ9cHQsX3QuYml0cz1ZdCwyO3d0LmFkbGVyPV90LmNoZWNrPTEsX3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1YdHx8Nj09PVh0KWJyZWFrIGU7Y2FzZSAxMzppZihfdC5sYXN0KXtwdD4+Pj03Jll0LFl0LT03Jll0LF90Lm1vZGU9Mjc7YnJlYWt9Zm9y'@;
put 'KDtZdDwzOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fXN3aXRjaChfdC5sYXN0PTEmcHQsWXQtPTEsMyYocHQ+Pj49MSkpe2Nhc2UgMDpfdC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZigkbihfdCksX3QubW9kZT0yMCw2PT09WHQpe3B0Pj4+PTIsWXQt'@;
put 'PTI7YnJlYWsgZX1icmVhaztjYXNlIDI6X3QubW9kZT0xNzticmVhaztjYXNlIDM6d3QubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLF90Lm1vZGU9MzB9cHQ+Pj49MixZdC09MjticmVhaztjYXNlIDE0OmZvcihwdD4+Pj03Jll0LFl0LT03Jll0O1l0PDMyOyl7aWYoMD09PVF0KWJyZWFrIGU7'@;
put 'UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCg2NTUzNSZwdCkhPShwdD4+PjE2XjY1NTM1KSl7d3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixfdC5tb2RlPTMwO2JyZWFrfWlmKF90Lmxlbmd0aD02NTUzNSZwdCxwdD0wLFl0PTAsX3QubW9kZT0xNSw2PT09WHQp'@;
put 'YnJlYWsgZTtjYXNlIDE1Ol90Lm1vZGU9MTY7Y2FzZSAxNjppZih5bj1fdC5sZW5ndGgpe2lmKHluPlF0JiYoeW49UXQpLHluPkR0JiYoeW49RHQpLDA9PT15bilicmVhayBlO0suYXJyYXlTZXQobW4sTnQscnQseW4sSXQpLFF0LT15bixydCs9eW4sRHQtPXluLEl0Kz15bixfdC5sZW5ndGgt'@;
put 'PXluO2JyZWFrfV90Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO1l0PDE0Oyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKF90Lm5sZW49MjU3KygzMSZwdCksWXQtPTUsX3QubmRpc3Q9MSsoMzEmKHB0Pj4+PTUpKSxZdC09NSxfdC5uY29kZT00'@;
put 'KygxNSYocHQ+Pj49NSkpLHB0Pj4+PTQsWXQtPTQsX3Qubmxlbj4yODZ8fF90Lm5kaXN0PjMwKXt3dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixfdC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9MCxfdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtfdC5oYXZlPF90Lm5j'@;
put 'b2RlOyl7Zm9yKDtZdDwzOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90LmxlbnNbbm9bX3QuaGF2ZSsrXV09NyZwdCxwdD4+Pj0zLFl0LT0zfWZvcig7X3QuaGF2ZTwxOTspX3QubGVuc1tub1tfdC5oYXZlKytdXT0wO2lmKF90LmxlbmNvZGU9X3Qu'@;
put 'bGVuZHluLF90LmxlbmJpdHM9NyxnaT1qKDAsX3QubGVucywwLDE5LF90LmxlbmNvZGUsMCxfdC53b3JrLFVpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRzPVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9'@;
put 'MCxfdC5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtfdC5oYXZlPF90Lm5sZW4rX3QubmRpc3Q7KXtmb3IoOyR0PShCbj1fdC5sZW5jb2RlW3B0JigxPDxfdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsRm49NjU1MzUmQm4sISgoUm49Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1RdClicmVhayBlO1F0LS0s'@;
put 'cHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihGbjwxNilwdD4+Pj1SbixZdC09Um4sX3QubGVuc1tfdC5oYXZlKytdPUZuO2Vsc2V7aWYoMTY9PT1Gbil7Zm9yKEtyPVJuKzI7WXQ8S3I7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYocHQ+Pj49Um4s'@;
put 'WXQtPVJuLDA9PT1fdC5oYXZlKXt3dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7YnJlYWt9cXI9X3QubGVuc1tfdC5oYXZlLTFdLHluPTMrKDMmcHQpLHB0Pj4+PTIsWXQtPTJ9ZWxzZSBpZigxNz09PUZuKXtmb3IoS3I9Um4rMztZdDxLcjspe2lmKDA9PT1R'@;
put 'dClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1ZdC09Um4scXI9MCx5bj0zKyg3JihwdD4+Pj1SbikpLHB0Pj4+PTMsWXQtPTN9ZWxzZXtmb3IoS3I9Um4rNztZdDxLcjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1ZdC09Um4scXI9'@;
put 'MCx5bj0xMSsoMTI3JihwdD4+Pj1SbikpLHB0Pj4+PTcsWXQtPTd9aWYoX3QuaGF2ZSt5bj5fdC5ubGVuK190Lm5kaXN0KXt3dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7YnJlYWt9Zm9yKDt5bi0tOylfdC5sZW5zW190LmhhdmUrK109cXJ9fWlmKDMwPT09'@;
put 'X3QubW9kZSlicmVhaztpZigwPT09X3QubGVuc1syNTZdKXt3dC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsX3QubW9kZT0zMDticmVha31pZihfdC5sZW5iaXRzPTksZ2k9aigxLF90LmxlbnMsMCxfdC5ubGVuLF90LmxlbmNvZGUsMCxfdC53b3JrLFVpPXti'@;
put 'aXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRzPVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfWlmKF90LmRpc3RiaXRzPTYsX3QuZGlzdGNvZGU9X3QuZGlzdGR5bixnaT1qKDIsX3QubGVucyxfdC5ubGVuLF90Lm5kaXN0'@;
put 'LF90LmRpc3Rjb2RlLDAsX3Qud29yayxVaT17Yml0czpfdC5kaXN0Yml0c30pLF90LmRpc3RiaXRzPVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfWlmKF90Lm1vZGU9MjAsNj09PVh0KWJyZWFrIGU7Y2FzZSAyMDpfdC5tb2RlPTIx'@;
put 'O2Nhc2UgMjE6aWYoUXQ+PTYmJkR0Pj0yNTgpe3d0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0LHd0LmF2YWlsX2luPVF0LF90LmhvbGQ9cHQsX3QuYml0cz1ZdCxFKHd0LHp0KSxJdD13dC5uZXh0X291dCxtbj13dC5vdXRwdXQsRHQ9d3QuYXZhaWxfb3V0LHJ0'@;
put 'PXd0Lm5leHRfaW4sTnQ9d3QuaW5wdXQsUXQ9d3QuYXZhaWxfaW4scHQ9X3QuaG9sZCxZdD1fdC5iaXRzLDEyPT09X3QubW9kZSYmKF90LmJhY2s9LTEpO2JyZWFrfWZvcihfdC5iYWNrPTA7JHQ9KEJuPV90LmxlbmNvZGVbcHQmKDE8PF90LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxGbj02NTUz'@;
put 'NSZCbiwhKChSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCR0JiYhKDI0MCYkdCkpe2ZvcihuaT1Sbixsbj0kdCxqbj1GbjskdD0oQm49X3QubGVuY29kZVtqbisoKHB0JigxPDxuaStsbiktMSk+Pm5pKV0pPj4+MTYm'@;
put 'MjU1LEZuPTY1NTM1JkJuLCEobmkrKFJuPUJuPj4+MjQpPD1ZdCk7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9cHQ+Pj49bmksWXQtPW5pLF90LmJhY2srPW5pfWlmKHB0Pj4+PVJuLFl0LT1SbixfdC5iYWNrKz1SbixfdC5sZW5ndGg9Rm4sMD09PSR0'@;
put 'KXtfdC5tb2RlPTI2O2JyZWFrfWlmKDMyJiR0KXtfdC5iYWNrPS0xLF90Lm1vZGU9MTI7YnJlYWt9aWYoNjQmJHQpe3d0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixfdC5tb2RlPTMwO2JyZWFrfV90LmV4dHJhPTE1JiR0LF90Lm1vZGU9MjI7Y2FzZSAyMjppZihfdC5leHRy'@;
put 'YSl7Zm9yKEtyPV90LmV4dHJhO1l0PEtyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90Lmxlbmd0aCs9cHQmKDE8PF90LmV4dHJhKS0xLHB0Pj4+PV90LmV4dHJhLFl0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1fdC53YXM9X3QubGVuZ3Ro'@;
put 'LF90Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoOyR0PShCbj1fdC5kaXN0Y29kZVtwdCYoMTw8X3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxGbj02NTUzNSZCbiwhKChSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCEoMjQw'@;
put 'JiR0KSl7Zm9yKG5pPVJuLGxuPSR0LGpuPUZuOyR0PShCbj1fdC5kaXN0Y29kZVtqbisoKHB0JigxPDxuaStsbiktMSk+Pm5pKV0pPj4+MTYmMjU1LEZuPTY1NTM1JkJuLCEobmkrKFJuPUJuPj4+MjQpPD1ZdCk7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQr'@;
put 'PTh9cHQ+Pj49bmksWXQtPW5pLF90LmJhY2srPW5pfWlmKHB0Pj4+PVJuLFl0LT1SbixfdC5iYWNrKz1Sbiw2NCYkdCl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLF90Lm1vZGU9MzA7YnJlYWt9X3Qub2Zmc2V0PUZuLF90LmV4dHJhPTE1JiR0LF90Lm1vZGU9MjQ7Y2FzZSAyNDpp'@;
put 'ZihfdC5leHRyYSl7Zm9yKEtyPV90LmV4dHJhO1l0PEtyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90Lm9mZnNldCs9cHQmKDE8PF90LmV4dHJhKS0xLHB0Pj4+PV90LmV4dHJhLFl0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1pZihfdC5v'@;
put 'ZmZzZXQ+X3QuZG1heCl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsX3QubW9kZT0zMDticmVha31fdC5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PUR0KWJyZWFrIGU7aWYoX3Qub2Zmc2V0Pih5bj16dC1EdCkpe2lmKCh5bj1fdC5vZmZzZXQteW4pPl90LndoYXZlJiZf'@;
put 'dC5zYW5lKXt3dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixfdC5tb2RlPTMwO2JyZWFrfXhuPXluPl90LnduZXh0P190LndzaXplLSh5bi09X3Qud25leHQpOl90LnduZXh0LXluLHluPl90Lmxlbmd0aCYmKHluPV90Lmxlbmd0aCksc249X3Qud2luZG93fWVsc2Ugc249'@;
put 'bW4seG49SXQtX3Qub2Zmc2V0LHluPV90Lmxlbmd0aDt5bj5EdCYmKHluPUR0KSxEdC09eW4sX3QubGVuZ3RoLT15bjtkb3ttbltJdCsrXT1zblt4bisrXX13aGlsZSgtLXluKTswPT09X3QubGVuZ3RoJiYoX3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09RHQpYnJlYWsgZTttbltJ'@;
put 'dCsrXT1fdC5sZW5ndGgsRHQtLSxfdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoX3Qud3JhcCl7Zm9yKDtZdDwzMjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHR8PU50W3J0KytdPDxZdCxZdCs9OH1pZih3dC50b3RhbF9vdXQrPXp0LT1EdCxfdC50b3RhbCs9enQsenQmJih3dC5hZGxl'@;
put 'cj1fdC5jaGVjaz1fdC5mbGFncz9rKF90LmNoZWNrLG1uLHp0LEl0LXp0KTpJKF90LmNoZWNrLG1uLHp0LEl0LXp0KSksenQ9RHQsKF90LmZsYWdzP3B0OnV0KHB0KSkhPT1fdC5jaGVjayl7d3QubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsX3QubW9kZT0zMDticmVha31wdD0wLFl0PTB9'@;
put 'X3QubW9kZT0yODtjYXNlIDI4OmlmKF90LndyYXAmJl90LmZsYWdzKXtmb3IoO1l0PDMyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKHB0IT09KDQyOTQ5NjcyOTUmX3QudG90YWwpKXt3dC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLF90'@;
put 'Lm1vZGU9MzA7YnJlYWt9cHQ9MCxZdD0wfV90Lm1vZGU9Mjk7Y2FzZSAyOTpnaT0xO2JyZWFrIGU7Y2FzZSAzMDpnaT0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4gc2V9cmV0dXJuIHd0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0'@;
put 'LHd0LmF2YWlsX2luPVF0LF90LmhvbGQ9cHQsX3QuYml0cz1ZdCwoX3Qud3NpemV8fHp0IT09d3QuYXZhaWxfb3V0JiZfdC5tb2RlPDMwJiYoX3QubW9kZTwyN3x8NCE9PVh0KSkmJmZ1bmN0aW9uIEhuKHd0LFh0LF90LE50KXt2YXIgbW4scnQ9d3Quc3RhdGU7cmV0dXJuIG51bGw9PT1ydC53'@;
put 'aW5kb3cmJihydC53c2l6ZT0xPDxydC53Yml0cyxydC53bmV4dD0wLHJ0LndoYXZlPTAscnQud2luZG93PW5ldyBLLkJ1ZjgocnQud3NpemUpKSxOdD49cnQud3NpemU/KEsuYXJyYXlTZXQocnQud2luZG93LFh0LF90LXJ0LndzaXplLHJ0LndzaXplLDApLHJ0LnduZXh0PTAscnQud2hhdmU9'@;
put 'cnQud3NpemUpOigobW49cnQud3NpemUtcnQud25leHQpPk50JiYobW49TnQpLEsuYXJyYXlTZXQocnQud2luZG93LFh0LF90LU50LG1uLHJ0LnduZXh0KSwoTnQtPW1uKT8oSy5hcnJheVNldChydC53aW5kb3csWHQsX3QtTnQsTnQsMCkscnQud25leHQ9TnQscnQud2hhdmU9cnQud3NpemUp'@;
put 'OihydC53bmV4dCs9bW4scnQud25leHQ9PT1ydC53c2l6ZSYmKHJ0LnduZXh0PTApLHJ0LndoYXZlPHJ0LndzaXplJiYocnQud2hhdmUrPW1uKSkpLDB9KHd0LHd0Lm91dHB1dCx3dC5uZXh0X291dCx6dC13dC5hdmFpbF9vdXQpPyhfdC5tb2RlPTMxLC00KTooenQtPXd0LmF2YWlsX291dCx3'@;
put 'dC50b3RhbF9pbis9SW4tPXd0LmF2YWlsX2luLHd0LnRvdGFsX291dCs9enQsX3QudG90YWwrPXp0LF90LndyYXAmJnp0JiYod3QuYWRsZXI9X3QuY2hlY2s9X3QuZmxhZ3M/ayhfdC5jaGVjayxtbix6dCx3dC5uZXh0X291dC16dCk6SShfdC5jaGVjayxtbix6dCx3dC5uZXh0X291dC16dCkp'@;
put 'LHd0LmRhdGFfdHlwZT1fdC5iaXRzKyhfdC5sYXN0PzY0OjApKygxMj09PV90Lm1vZGU/MTI4OjApKygyMD09PV90Lm1vZGV8fDE1PT09X3QubW9kZT8yNTY6MCksKDA9PT1JbiYmMD09PXp0fHw0PT09WHQpJiZnaT09PWVlJiYoZ2k9LTUpLGdpKX0sei5pbmZsYXRlRW5kPWZ1bmN0aW9uIGZu'@;
put 'KHd0KXtpZighd3R8fCF3dC5zdGF0ZSlyZXR1cm4gc2U7dmFyIFh0PXd0LnN0YXRlO3JldHVybiBYdC53aW5kb3cmJihYdC53aW5kb3c9bnVsbCksd3Quc3RhdGU9bnVsbCxlZX0sei5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uIGhuKHd0LFh0KXt2YXIgX3Q7cmV0dXJuIHd0JiZ3dC5zdGF0'@;
put 'ZSYmMiYoX3Q9d3Quc3RhdGUpLndyYXA/KF90LmhlYWQ9WHQsWHQuZG9uZT0hMSxlZSk6c2V9LHouaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL2luZmZh'@;
put 'c3QiOjM0LCIuL2luZnRyZWVzIjozNn1dLDM2OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4uL3V0aWxzL2NvbW1vbiIpLFk9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1'@;
put 'LDIyNywyNTgsMCwwXSxYPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sVT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUs'@;
put 'NTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0scT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRd'@;
put 'O1IuZXhwb3J0cz1mdW5jdGlvbih0ZSxvZSxzZSxoZSx1ZSxjZSxHLGIpe3ZhciBkZSxmZSx4ZSxMZSxGZSxXZSxQZSxiZSxBZSxEPWIuYml0cyxIPTAsTj0wLGc9MCxDPTAsUz0wLHY9MCxwPTAsdz0wLEo9MCxuZT0wLE9lPW51bGwsamU9MCxLZT1uZXcgSy5CdWYxNigxNiksWWU9bmV3IEsu'@;
put 'QnVmMTYoMTYpLFFlPW51bGwsbHQ9MDtmb3IoSD0wO0g8PTE1O0grKylLZVtIXT0wO2ZvcihOPTA7TjxoZTtOKyspS2Vbb2Vbc2UrTl1dKys7Zm9yKFM9RCxDPTE1O0M+PTEmJjA9PT1LZVtDXTtDLS0pO2lmKFM+QyYmKFM9QyksMD09PUMpcmV0dXJuIHVlW2NlKytdPTIwOTcxNTIwLHVlW2Nl'@;
put 'KytdPTIwOTcxNTIwLGIuYml0cz0xLDA7Zm9yKGc9MTtnPEMmJjA9PT1LZVtnXTtnKyspO2ZvcihTPGcmJihTPWcpLHc9MSxIPTE7SDw9MTU7SCsrKWlmKHc8PD0xLCh3LT1LZVtIXSk8MClyZXR1cm4tMTtpZih3PjAmJigwPT09dGV8fDEhPT1DKSlyZXR1cm4tMTtmb3IoWWVbMV09MCxIPTE7'@;
put 'SDwxNTtIKyspWWVbSCsxXT1ZZVtIXStLZVtIXTtmb3IoTj0wO048aGU7TisrKTAhPT1vZVtzZStOXSYmKEdbWWVbb2Vbc2UrTl1dKytdPU4pO2lmKDA9PT10ZT8oT2U9UWU9RyxXZT0xOSk6MT09PXRlPyhPZT1ZLGplLT0yNTcsUWU9WCxsdC09MjU3LFdlPTI1Nik6KE9lPVUsUWU9cSxXZT0t'@;
put 'MSksbmU9MCxOPTAsSD1nLEZlPWNlLHY9UyxwPTAseGU9LTEsTGU9KEo9MTw8UyktMSwxPT09dGUmJko+ODUyfHwyPT09dGUmJko+NTkyKXJldHVybiAxO2Zvcig7Oyl7UGU9SC1wLEdbTl08V2U/KGJlPTAsQWU9R1tOXSk6R1tOXT5XZT8oYmU9UWVbbHQrR1tOXV0sQWU9T2VbamUrR1tOXV0p'@;
put 'OihiZT05NixBZT0wKSxkZT0xPDxILXAsZz1mZT0xPDx2O2Rve3VlW0ZlKyhuZT4+cCkrKGZlLT1kZSldPVBlPDwyNHxiZTw8MTZ8QWV8MH13aGlsZSgwIT09ZmUpO2ZvcihkZT0xPDxILTE7bmUmZGU7KWRlPj49MTtpZigwIT09ZGU/KG5lJj1kZS0xLG5lKz1kZSk6bmU9MCxOKyssMD09LS1L'@;
put 'ZVtIXSl7aWYoSD09PUMpYnJlYWs7SD1vZVtzZStHW05dXX1pZihIPlMmJihuZSZMZSkhPT14ZSl7Zm9yKDA9PT1wJiYocD1TKSxGZSs9Zyx3PTE8PCh2PUgtcCk7ditwPEMmJiEoKHctPUtlW3YrcF0pPD0wKTspdisrLHc8PD0xO2lmKEorPTE8PHYsMT09PXRlJiZKPjg1Mnx8Mj09PXRlJiZK'@;
put 'PjU5MilyZXR1cm4gMTt1ZVt4ZT1uZSZMZV09Uzw8MjR8djw8MTZ8RmUtY2V8MH19cmV0dXJuIDAhPT1uZSYmKHVlW0ZlK25lXT1ILXA8PDI0fDY0PDwxNnwwKSxiLmJpdHM9UywwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5l'@;
put 'eHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0'@;
put 'aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBWKGZ0KXtmb3IodmFyIGZuPWZ0Lmxlbmd0aDstLWZuPj0wOylmdFtmbl09MH12YXIgY2U9MTUsRz0xNixDPVswLDAsMCwwLDAsMCww'@;
put 'LDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLFM9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLHY9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLHA9WzE2'@;
put 'LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLEo9bmV3IEFycmF5KDU3Nik7VihKKTt2YXIgbmU9bmV3IEFycmF5KDYwKTtWKG5lKTt2YXIgZGU9bmV3IEFycmF5KDUxMik7VihkZSk7dmFyIGZlPW5ldyBBcnJheSgyNTYpO1YoZmUpO3ZhciB4ZT1uZXcgQXJy'@;
put 'YXkoMjkpO1YoeGUpO3ZhciBMZT1uZXcgQXJyYXkoMzApO1YoTGUpO3ZhciBPZSxqZSxXZSxGZT1mdW5jdGlvbihmdCxmbixobix3dCxYdCl7dGhpcy5zdGF0aWNfdHJlZT1mdCx0aGlzLmV4dHJhX2JpdHM9Zm4sdGhpcy5leHRyYV9iYXNlPWhuLHRoaXMuZWxlbXM9d3QsdGhpcy5tYXhfbGVu'@;
put 'Z3RoPVh0LHRoaXMuaGFzX3N0cmVlPWZ0JiZmdC5sZW5ndGh9LEtlPWZ1bmN0aW9uKGZ0LGZuKXt0aGlzLmR5bl90cmVlPWZ0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1mbn07ZnVuY3Rpb24gWWUoZnQpe3JldHVybiBmdDwyNTY/ZGVbZnRdOmRlWzI1NisoZnQ+Pj43KV19ZnVu'@;
put 'Y3Rpb24gUWUoZnQsZm4pe2Z0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1JmZuLGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109Zm4+Pj44JjI1NX1mdW5jdGlvbiBsdChmdCxmbixobil7ZnQuYmlfdmFsaWQ+Ry1obj8oZnQuYmlfYnVmfD1mbjw8ZnQuYmlfdmFsaWQmNjU1MzUs'@;
put 'UWUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9Zm4+PkctZnQuYmlfdmFsaWQsZnQuYmlfdmFsaWQrPWhuLUcpOihmdC5iaV9idWZ8PWZuPDxmdC5iaV92YWxpZCY2NTUzNSxmdC5iaV92YWxpZCs9aG4pfWZ1bmN0aW9uIFBlKGZ0LGZuLGhuKXtsdChmdCxoblsyKmZuXSxoblsyKmZuKzFdKX1m'@;
put 'dW5jdGlvbiBiZShmdCxmbil7dmFyIGhuPTA7ZG97aG58PTEmZnQsZnQ+Pj49MSxobjw8PTF9d2hpbGUoLS1mbj4wKTtyZXR1cm4gaG4+Pj4xfWZ1bmN0aW9uIHFlKGZ0LGZuLGhuKXt2YXIgX3QsTnQsd3Q9bmV3IEFycmF5KGNlKzEpLFh0PTA7Zm9yKF90PTE7X3Q8PWNlO190Kyspd3RbX3Rd'@;
put 'PVh0PVh0K2huW190LTFdPDwxO2ZvcihOdD0wO050PD1mbjtOdCsrKXt2YXIgbW49ZnRbMipOdCsxXTswIT09bW4mJihmdFsyKk50XT1iZSh3dFttbl0rKyxtbikpfX1mdW5jdGlvbiBVZShmdCl7dmFyIGZuO2Zvcihmbj0wO2ZuPDI4NjtmbisrKWZ0LmR5bl9sdHJlZVsyKmZuXT0wO2Zvcihm'@;
put 'bj0wO2ZuPDMwO2ZuKyspZnQuZHluX2R0cmVlWzIqZm5dPTA7Zm9yKGZuPTA7Zm48MTk7Zm4rKylmdC5ibF90cmVlWzIqZm5dPTA7ZnQuZHluX2x0cmVlWzUxMl09MSxmdC5vcHRfbGVuPWZ0LnN0YXRpY19sZW49MCxmdC5sYXN0X2xpdD1mdC5tYXRjaGVzPTB9ZnVuY3Rpb24gaHQoZnQpe2Z0'@;
put 'LmJpX3ZhbGlkPjg/UWUoZnQsZnQuYmlfYnVmKTpmdC5iaV92YWxpZD4wJiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1mdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gRGUoZnQsZm4saG4sd3Qpe3ZhciBYdD0yKmZuLF90PTIqaG47cmV0dXJuIGZ0'@;
put 'W1h0XTxmdFtfdF18fGZ0W1h0XT09PWZ0W190XSYmd3RbZm5dPD13dFtobl19ZnVuY3Rpb24gemUoZnQsZm4saG4pe2Zvcih2YXIgd3Q9ZnQuaGVhcFtobl0sWHQ9aG48PDE7WHQ8PWZ0LmhlYXBfbGVuJiYoWHQ8ZnQuaGVhcF9sZW4mJkRlKGZuLGZ0LmhlYXBbWHQrMV0sZnQuaGVhcFtYdF0s'@;
put 'ZnQuZGVwdGgpJiZYdCsrLCFEZShmbix3dCxmdC5oZWFwW1h0XSxmdC5kZXB0aCkpOylmdC5oZWFwW2huXT1mdC5oZWFwW1h0XSxobj1YdCxYdDw8PTE7ZnQuaGVhcFtobl09d3R9ZnVuY3Rpb24gb3QoZnQsZm4saG4pe3ZhciB3dCxYdCxOdCxtbixfdD0wO2lmKDAhPT1mdC5sYXN0X2xpdClk'@;
put 'b3t3dD1mdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKl90XTw8OHxmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKl90KzFdLFh0PWZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK190XSxfdCsrLDA9PT13dD9QZShmdCxYdCxmbik6KFBlKGZ0LChOdD1mZVtYdF0pKzI1NisxLGZuKSwwIT09KG1uPUNb'@;
put 'TnRdKSYmbHQoZnQsWHQtPXhlW050XSxtbiksUGUoZnQsTnQ9WWUoLS13dCksaG4pLDAhPT0obW49U1tOdF0pJiZsdChmdCx3dC09TGVbTnRdLG1uKSl9d2hpbGUoX3Q8ZnQubGFzdF9saXQpO1BlKGZ0LDI1Nixmbil9ZnVuY3Rpb24gdXQoZnQsZm4pe3ZhciBOdCxtbixJdCxobj1mbi5keW5f'@;
put 'dHJlZSx3dD1mbi5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsWHQ9Zm4uc3RhdF9kZXNjLmhhc19zdHJlZSxfdD1mbi5zdGF0X2Rlc2MuZWxlbXMscnQ9LTE7Zm9yKGZ0LmhlYXBfbGVuPTAsZnQuaGVhcF9tYXg9NTczLE50PTA7TnQ8X3Q7TnQrKykwIT09aG5bMipOdF0/KGZ0LmhlYXBbKytmdC5o'@;
put 'ZWFwX2xlbl09cnQ9TnQsZnQuZGVwdGhbTnRdPTApOmhuWzIqTnQrMV09MDtmb3IoO2Z0LmhlYXBfbGVuPDI7KWhuWzIqKEl0PWZ0LmhlYXBbKytmdC5oZWFwX2xlbl09cnQ8Mj8rK3J0OjApXT0xLGZ0LmRlcHRoW0l0XT0wLGZ0Lm9wdF9sZW4tLSxYdCYmKGZ0LnN0YXRpY19sZW4tPXd0WzIq'@;
put 'SXQrMV0pO2Zvcihmbi5tYXhfY29kZT1ydCxOdD1mdC5oZWFwX2xlbj4+MTtOdD49MTtOdC0tKXplKGZ0LGhuLE50KTtJdD1fdDtkb3tOdD1mdC5oZWFwWzFdLGZ0LmhlYXBbMV09ZnQuaGVhcFtmdC5oZWFwX2xlbi0tXSx6ZShmdCxobiwxKSxtbj1mdC5oZWFwWzFdLGZ0LmhlYXBbLS1mdC5o'@;
put 'ZWFwX21heF09TnQsZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1tbixoblsyKkl0XT1oblsyKk50XStoblsyKm1uXSxmdC5kZXB0aFtJdF09KGZ0LmRlcHRoW050XT49ZnQuZGVwdGhbbW5dP2Z0LmRlcHRoW050XTpmdC5kZXB0aFttbl0pKzEsaG5bMipOdCsxXT1oblsyKm1uKzFdPUl0LGZ0Lmhl'@;
put 'YXBbMV09SXQrKyx6ZShmdCxobiwxKX13aGlsZShmdC5oZWFwX2xlbj49Mik7ZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1mdC5oZWFwWzFdLGZ1bmN0aW9uIFRlKGZ0LGZuKXt2YXIgSXQsUXQsRHQscHQsWXQsSW4saG49Zm4uZHluX3RyZWUsd3Q9Zm4ubWF4X2NvZGUsWHQ9Zm4uc3RhdF9kZXNj'@;
put 'LnN0YXRpY190cmVlLF90PWZuLnN0YXRfZGVzYy5oYXNfc3RyZWUsTnQ9Zm4uc3RhdF9kZXNjLmV4dHJhX2JpdHMsbW49Zm4uc3RhdF9kZXNjLmV4dHJhX2Jhc2UscnQ9Zm4uc3RhdF9kZXNjLm1heF9sZW5ndGgsenQ9MDtmb3IocHQ9MDtwdDw9Y2U7cHQrKylmdC5ibF9jb3VudFtwdF09MDtm'@;
put 'b3IoaG5bMipmdC5oZWFwW2Z0LmhlYXBfbWF4XSsxXT0wLEl0PWZ0LmhlYXBfbWF4KzE7SXQ8NTczO0l0KyspKHB0PWhuWzIqaG5bMiooUXQ9ZnQuaGVhcFtJdF0pKzFdKzFdKzEpPnJ0JiYocHQ9cnQsenQrKyksaG5bMipRdCsxXT1wdCwhKFF0Pnd0KSYmKGZ0LmJsX2NvdW50W3B0XSsrLFl0'@;
put 'PTAsUXQ+PW1uJiYoWXQ9TnRbUXQtbW5dKSxmdC5vcHRfbGVuKz0oSW49aG5bMipRdF0pKihwdCtZdCksX3QmJihmdC5zdGF0aWNfbGVuKz1JbiooWHRbMipRdCsxXStZdCkpKTtpZigwIT09enQpe2Rve2ZvcihwdD1ydC0xOzA9PT1mdC5ibF9jb3VudFtwdF07KXB0LS07ZnQuYmxfY291bnRb'@;
put 'cHRdLS0sZnQuYmxfY291bnRbcHQrMV0rPTIsZnQuYmxfY291bnRbcnRdLS0senQtPTJ9d2hpbGUoenQ+MCk7Zm9yKHB0PXJ0OzAhPT1wdDtwdC0tKWZvcihRdD1mdC5ibF9jb3VudFtwdF07MCE9PVF0OykhKChEdD1mdC5oZWFwWy0tSXRdKT53dCkmJihoblsyKkR0KzFdIT09cHQmJihmdC5v'@;
put 'cHRfbGVuKz0ocHQtaG5bMipEdCsxXSkqaG5bMipEdF0saG5bMipEdCsxXT1wdCksUXQtLSl9fShmdCxmbikscWUoaG4scnQsZnQuYmxfY291bnQpfWZ1bmN0aW9uIE10KGZ0LGZuLGhuKXt2YXIgd3QsX3QsWHQ9LTEsTnQ9Zm5bMV0sbW49MCxydD03LEl0PTQ7Zm9yKDA9PT1OdCYmKHJ0PTEz'@;
put 'OCxJdD0zKSxmblsyKihobisxKSsxXT02NTUzNSx3dD0wO3d0PD1objt3dCsrKV90PU50LE50PWZuWzIqKHd0KzEpKzFdLCEoKyttbjxydCYmX3Q9PT1OdCkmJihtbjxJdD9mdC5ibF90cmVlWzIqX3RdKz1tbjowIT09X3Q/KF90IT09WHQmJmZ0LmJsX3RyZWVbMipfdF0rKyxmdC5ibF90cmVl'@;
put 'WzMyXSsrKTptbjw9MTA/ZnQuYmxfdHJlZVszNF0rKzpmdC5ibF90cmVlWzM2XSsrLG1uPTAsWHQ9X3QsMD09PU50PyhydD0xMzgsSXQ9Myk6X3Q9PT1OdD8ocnQ9NixJdD0zKToocnQ9NyxJdD00KSl9ZnVuY3Rpb24gSHQoZnQsZm4saG4pe3ZhciB3dCxfdCxYdD0tMSxOdD1mblsxXSxtbj0w'@;
put 'LHJ0PTcsSXQ9NDtmb3IoMD09PU50JiYocnQ9MTM4LEl0PTMpLHd0PTA7d3Q8PWhuO3d0KyspaWYoX3Q9TnQsTnQ9Zm5bMiood3QrMSkrMV0sISgrK21uPHJ0JiZfdD09PU50KSl7aWYobW48SXQpZG97UGUoZnQsX3QsZnQuYmxfdHJlZSl9d2hpbGUoMCE9LS1tbik7ZWxzZSAwIT09X3Q/KF90'@;
put 'IT09WHQmJihQZShmdCxfdCxmdC5ibF90cmVlKSxtbi0tKSxQZShmdCwxNixmdC5ibF90cmVlKSxsdChmdCxtbi0zLDIpKTptbjw9MTA/KFBlKGZ0LDE3LGZ0LmJsX3RyZWUpLGx0KGZ0LG1uLTMsMykpOihQZShmdCwxOCxmdC5ibF90cmVlKSxsdChmdCxtbi0xMSw3KSk7bW49MCxYdD1fdCww'@;
put 'PT09TnQ/KHJ0PTEzOCxJdD0zKTpfdD09PU50PyhydD02LEl0PTMpOihydD03LEl0PTQpfX12YXIgVXQ9ITE7ZnVuY3Rpb24gV24oZnQsZm4saG4sd3Qpe2x0KGZ0LDArKHd0PzE6MCksMyksZnVuY3Rpb24gTWUoZnQsZm4saG4sd3Qpe2h0KGZ0KSx3dCYmKFFlKGZ0LGhuKSxRZShmdCx+aG4p'@;
put 'KSxLLmFycmF5U2V0KGZ0LnBlbmRpbmdfYnVmLGZ0LndpbmRvdyxmbixobixmdC5wZW5kaW5nKSxmdC5wZW5kaW5nKz1obn0oZnQsZm4saG4sITApfXouX3RyX2luaXQ9ZnVuY3Rpb24gYm4oZnQpe1V0fHwoZnVuY3Rpb24gWGUoKXt2YXIgZnQsZm4saG4sd3QsWHQsX3Q9bmV3IEFycmF5KGNl'@;
put 'KzEpO2Zvcihobj0wLHd0PTA7d3Q8Mjg7d3QrKylmb3IoeGVbd3RdPWhuLGZ0PTA7ZnQ8MTw8Q1t3dF07ZnQrKylmZVtobisrXT13dDtmb3IoZmVbaG4tMV09d3QsWHQ9MCx3dD0wO3d0PDE2O3d0KyspZm9yKExlW3d0XT1YdCxmdD0wO2Z0PDE8PFNbd3RdO2Z0KyspZGVbWHQrK109d3Q7Zm9y'@;
put 'KFh0Pj49Nzt3dDwzMDt3dCsrKWZvcihMZVt3dF09WHQ8PDcsZnQ9MDtmdDwxPDxTW3d0XS03O2Z0KyspZGVbMjU2K1h0KytdPXd0O2Zvcihmbj0wO2ZuPD1jZTtmbisrKV90W2ZuXT0wO2ZvcihmdD0wO2Z0PD0xNDM7KUpbMipmdCsxXT04LGZ0KyssX3RbOF0rKztmb3IoO2Z0PD0yNTU7KUpb'@;
put 'MipmdCsxXT05LGZ0KyssX3RbOV0rKztmb3IoO2Z0PD0yNzk7KUpbMipmdCsxXT03LGZ0KyssX3RbN10rKztmb3IoO2Z0PD0yODc7KUpbMipmdCsxXT04LGZ0KyssX3RbOF0rKztmb3IocWUoSiwyODcsX3QpLGZ0PTA7ZnQ8MzA7ZnQrKyluZVsyKmZ0KzFdPTUsbmVbMipmdF09YmUoZnQsNSk7'@;
put 'T2U9bmV3IEZlKEosQywyNTcsMjg2LGNlKSxqZT1uZXcgRmUobmUsUywwLDMwLGNlKSxXZT1uZXcgRmUobmV3IEFycmF5KDApLHYsMCwxOSw3KX0oKSxVdD0hMCksZnQubF9kZXNjPW5ldyBLZShmdC5keW5fbHRyZWUsT2UpLGZ0LmRfZGVzYz1uZXcgS2UoZnQuZHluX2R0cmVlLGplKSxmdC5i'@;
put 'bF9kZXNjPW5ldyBLZShmdC5ibF90cmVlLFdlKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wLFVlKGZ0KX0sei5fdHJfc3RvcmVkX2Jsb2NrPVduLHouX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uICRuKGZ0LGZuLGhuLHd0KXt2YXIgWHQsX3QsTnQ9MDtmdC5sZXZlbD4wPygyPT09ZnQuc3Ry'@;
put 'bS5kYXRhX3R5cGUmJihmdC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbiBDbihmdCl7dmFyIGhuLGZuPTQwOTM2MjQ0NDc7Zm9yKGhuPTA7aG48PTMxO2huKyssZm4+Pj49MSlpZigxJmZuJiYwIT09ZnQuZHluX2x0cmVlWzIqaG5dKXJldHVybiAwO2lmKDAhPT1mdC5keW5fbHRyZWVbMThdfHww'@;
put 'IT09ZnQuZHluX2x0cmVlWzIwXXx8MCE9PWZ0LmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKGhuPTMyO2huPDI1NjtobisrKWlmKDAhPT1mdC5keW5fbHRyZWVbMipobl0pcmV0dXJuIDE7cmV0dXJuIDB9KGZ0KSksdXQoZnQsZnQubF9kZXNjKSx1dChmdCxmdC5kX2Rlc2MpLE50PWZ1bmN0'@;
put 'aW9uIFB0KGZ0KXt2YXIgZm47Zm9yKE10KGZ0LGZ0LmR5bl9sdHJlZSxmdC5sX2Rlc2MubWF4X2NvZGUpLE10KGZ0LGZ0LmR5bl9kdHJlZSxmdC5kX2Rlc2MubWF4X2NvZGUpLHV0KGZ0LGZ0LmJsX2Rlc2MpLGZuPTE4O2ZuPj0zJiYwPT09ZnQuYmxfdHJlZVsyKnBbZm5dKzFdO2ZuLS0pO3Jl'@;
put 'dHVybiBmdC5vcHRfbGVuKz0zKihmbisxKSs1KzUrNCxmbn0oZnQpLChfdD1mdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oWHQ9ZnQub3B0X2xlbiszKzc+Pj4zKSYmKFh0PV90KSk6WHQ9X3Q9aG4rNSxobis0PD1YdCYmLTEhPT1mbj9XbihmdCxmbixobix3dCk6ND09PWZ0LnN0cmF0ZWd5fHxf'@;
put 'dD09PVh0PyhsdChmdCwyKyh3dD8xOjApLDMpLG90KGZ0LEosbmUpKToobHQoZnQsNCsod3Q/MTowKSwzKSxmdW5jdGlvbiBvbihmdCxmbixobix3dCl7dmFyIFh0O2ZvcihsdChmdCxmbi0yNTcsNSksbHQoZnQsaG4tMSw1KSxsdChmdCx3dC00LDQpLFh0PTA7WHQ8d3Q7WHQrKylsdChmdCxm'@;
put 'dC5ibF90cmVlWzIqcFtYdF0rMV0sMyk7SHQoZnQsZnQuZHluX2x0cmVlLGZuLTEpLEh0KGZ0LGZ0LmR5bl9kdHJlZSxobi0xKX0oZnQsZnQubF9kZXNjLm1heF9jb2RlKzEsZnQuZF9kZXNjLm1heF9jb2RlKzEsTnQrMSksb3QoZnQsZnQuZHluX2x0cmVlLGZ0LmR5bl9kdHJlZSkpLFVlKGZ0'@;
put 'KSx3dCYmaHQoZnQpfSx6Ll90cl90YWxseT1mdW5jdGlvbiBIbihmdCxmbixobil7cmV0dXJuIGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXRdPWZuPj4+OCYyNTUsZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipmdC5sYXN0X2xpdCsxXT0yNTUmZm4sZnQucGVuZGluZ19i'@;
put 'dWZbZnQubF9idWYrZnQubGFzdF9saXRdPTI1NSZobixmdC5sYXN0X2xpdCsrLDA9PT1mbj9mdC5keW5fbHRyZWVbMipobl0rKzooZnQubWF0Y2hlcysrLGZuLS0sZnQuZHluX2x0cmVlWzIqKGZlW2huXSsyNTYrMSldKyssZnQuZHluX2R0cmVlWzIqWWUoZm4pXSsrKSxmdC5sYXN0X2xpdD09'@;
put 'PWZ0LmxpdF9idWZzaXplLTF9LHouX3RyX2FsaWduPWZ1bmN0aW9uIGVuKGZ0KXtsdChmdCwyLDMpLFBlKGZ0LDI1NixKKSxmdW5jdGlvbiBBZShmdCl7MTY9PT1mdC5iaV92YWxpZD8oUWUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wKTpmdC5iaV92YWxpZD49OCYm'@;
put 'KGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1JmZ0LmJpX2J1ZixmdC5iaV9idWY+Pj04LGZ0LmJpX3ZhbGlkLT04KX0oZnQpfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPWZ1bmN0aW9uIEsoKXt0aGlz'@;
put 'LmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90'@;
put 'eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dfSx7fSxbOV0pKDkpfSl9LDgzNDE3OihhdCxJZSxGKT0+eyFmdW5jdGlvbiB4KE0pe00udmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgTz0xMjAwLFI9MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0'@;
put 'YWJsZT1GKDgwNzg4KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPUYoODA3ODgpKSk7Zm9yKHZhciB6PVs4NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0sSz0wO0s8PTg7KytLKXoucHVzaCgxMjUwK0spO3ZhciBJPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6'@;
put 'OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0saz1mdW5jdGlvbih5KXstMSE9ei5pbmRleE9mKHkp'@;
put 'JiYoUj1JWzBdPXkpfSxqPWZ1bmN0aW9uKHkpe089eSxrKHkpfTtmdW5jdGlvbiBWKCl7aigxMjAwKSxmdW5jdGlvbiBFKCl7aygxMjUyKX0oKX1mdW5jdGlvbiBCKHkpe2Zvcih2YXIgUD1bXSxMPTAsUT15Lmxlbmd0aDtMPFE7KytMKVBbTF09eS5jaGFyQ29kZUF0KEwpO3JldHVybiBQfXZh'@;
put 'ciBVPWZ1bmN0aW9uKHkpe3ZhciBQPXkuY2hhckNvZGVBdCgwKSxMPXkuY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1QJiYyNTQ9PUw/ZnVuY3Rpb24gWSh5KXtmb3IodmFyIFA9W10sTD0wO0w8eS5sZW5ndGg+PjE7KytMKVBbTF09U3RyaW5nLmZyb21DaGFyQ29kZSh5LmNoYXJDb2RlQXQo'@;
put 'MipMKSsoeS5jaGFyQ29kZUF0KDIqTCsxKTw8OCkpO3JldHVybiBQLmpvaW4oIiIpfSh5LnNsaWNlKDIpKToyNTQ9PVAmJjI1NT09TD9mdW5jdGlvbiBYKHkpe2Zvcih2YXIgUD1bXSxMPTA7TDx5Lmxlbmd0aD4+MTsrK0wpUFtMXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHkuY2hhckNvZGVBdCgy'@;
put 'KkwrMSkrKHkuY2hhckNvZGVBdCgyKkwpPDw4KSk7cmV0dXJuIFAuam9pbigiIil9KHkuc2xpY2UoMikpOjY1Mjc5PT1QP3kuc2xpY2UoMSk6eX0scT1mdW5jdGlvbihQKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShQKX0sZWU9ZnVuY3Rpb24oUCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hh'@;
put 'ckNvZGUoUCl9O3R5cGVvZiBjcHRhYmxlPCJ1IiYmKGo9ZnVuY3Rpb24oeSl7Tz15LGsoeSl9LFU9ZnVuY3Rpb24oeSl7cmV0dXJuIDI1NT09PXkuY2hhckNvZGVBdCgwKSYmMjU0PT09eS5jaGFyQ29kZUF0KDEpP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsQih5LnNsaWNlKDIpKSk6eX0s'@;
put 'cT1mdW5jdGlvbihQKXtyZXR1cm4gMTIwMD09PU8/U3RyaW5nLmZyb21DaGFyQ29kZShQKTpjcHRhYmxlLnV0aWxzLmRlY29kZShPLFsyNTUmUCxQPj44XSlbMF19LGVlPWZ1bmN0aW9uKFApe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZShSLFtQXSlbMF19KTt2YXIgUCx0ZT1udWxsLHNl'@;
put 'PShQPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIse2VuY29kZTpmdW5jdGlvbihMKXtmb3IodmFyIFE9IiIscmU9MCxnZT0wLF9lPTAsdmU9MCxTZT0wLEhlPTAsQmU9MCxHZT0wO0dlPEwubGVuZ3RoOyl2ZT0ocmU9'@;
put 'TC5jaGFyQ29kZUF0KEdlKyspKT4+MixTZT0oMyZyZSk8PDR8KGdlPUwuY2hhckNvZGVBdChHZSsrKSk+PjQsSGU9KDE1JmdlKTw8MnwoX2U9TC5jaGFyQ29kZUF0KEdlKyspKT4+NixCZT02MyZfZSxpc05hTihnZSk/SGU9QmU9NjQ6aXNOYU4oX2UpJiYoQmU9NjQpLFErPVAuY2hhckF0KHZl'@;
put 'KStQLmNoYXJBdChTZSkrUC5jaGFyQXQoSGUpK1AuY2hhckF0KEJlKTtyZXR1cm4gUX0sZGVjb2RlOmZ1bmN0aW9uKFEpe3ZhciByZT0iIixTZT0wLEhlPTAsQmU9MCxHZT0wO1E9US5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIG50PTA7bnQ8US5sZW5ndGg7KVNlPVAuaW5k'@;
put 'ZXhPZihRLmNoYXJBdChudCsrKSksSGU9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSxyZSs9U3RyaW5nLmZyb21DaGFyQ29kZShTZTw8MnxIZT4+NCksNjQhPT0oQmU9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSkmJihyZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmSGUpPDw0fEJlPj4y'@;
put 'KSksNjQhPT0oR2U9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSkmJihyZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZCZSk8PDZ8R2UpKTtyZXR1cm4gcmV9fSksaGU9dHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYh'@;
put 'IXByb2Nlc3MudmVyc2lvbnMubm9kZSx1ZT1mdW5jdGlvbigpe307aWYodHlwZW9mIEJ1ZmZlcjwidSIpe3ZhciBjZT0hQnVmZmVyLmZyb207aWYoIWNlKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2NlPSEwfXVlPWNlP2Z1bmN0aW9uKHksUCl7cmV0dXJuIFA/bmV3IEJ1'@;
put 'ZmZlcih5LFApOm5ldyBCdWZmZXIoeSl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2N8fChCdWZmZXIuYWxsb2M9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBCdWZmZXIoeSl9KSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oeSl7'@;
put 'cmV0dXJuIG5ldyBCdWZmZXIoeSl9KX1mdW5jdGlvbiBHKHkpe3JldHVybiBoZT9CdWZmZXIuYWxsb2MoeSk6bmV3IEFycmF5KHkpfWZ1bmN0aW9uIGIoeSl7cmV0dXJuIGhlP0J1ZmZlci5hbGxvY1Vuc2FmZSh5KTpuZXcgQXJyYXkoeSl9dmFyIEQ9ZnVuY3Rpb24oUCl7cmV0dXJuIGhlP3Vl'@;
put 'KFAsImJpbmFyeSIpOlAuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihMKXtyZXR1cm4gMjU1JkwuY2hhckNvZGVBdCgwKX0pfTtmdW5jdGlvbiBIKHkpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpcmV0dXJuIEQoeSk7Zm9yKHZhciBQPW5ldyBBcnJheUJ1ZmZlcih5Lmxlbmd0aCksTD1uZXcg'@;
put 'VWludDhBcnJheShQKSxRPTA7USE9eS5sZW5ndGg7KytRKUxbUV09MjU1JnkuY2hhckNvZGVBdChRKTtyZXR1cm4gUH1mdW5jdGlvbiBOKHkpe2lmKEFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIHkubWFwKGZ1bmN0aW9uKFEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFEpfSkuam9pbigi'@;
put 'Iik7Zm9yKHZhciBQPVtdLEw9MDtMPHkubGVuZ3RoOysrTClQW0xdPVN0cmluZy5mcm9tQ2hhckNvZGUoeVtMXSk7cmV0dXJuIFAuam9pbigiIil9ZnVuY3Rpb24gQyh5KXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtpZih5IGluc3Rh'@;
put 'bmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIEMobmV3IFVpbnQ4QXJyYXkoeSkpO2Zvcih2YXIgUD1uZXcgQXJyYXkoeS5sZW5ndGgpLEw9MDtMPHkubGVuZ3RoOysrTClQW0xdPXlbTF07cmV0dXJuIFB9dmFyIFM9ZnVuY3Rpb24oeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlv'@;
put 'bihMKXtBcnJheS5pc0FycmF5KEwpP1A9UC5jb25jYXQoTCk6KHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikmJihQPVAuY29uY2F0KEMoTCkpKX0pLFB9LHY9L1x1'@;
put 'MDAwMC9nLHA9L1tcdTAwMDEtXHUwMDA2XS9nLHc9e30sSj1mdW5jdGlvbihQKXtmdW5jdGlvbiBMKEt0KXtmb3IodmFyIGduPSIiLExuPUt0Lmxlbmd0aC0xO0xuPj0wOylnbis9S3QuY2hhckF0KExuLS0pO3JldHVybiBnbn1mdW5jdGlvbiBRKEt0LGduKXtmb3IodmFyIExuPSIiO0xuLmxl'@;
put 'bmd0aDxnbjspTG4rPUt0O3JldHVybiBMbn1mdW5jdGlvbiByZShLdCxnbil7dmFyIExuPSIiK0t0O3JldHVybiBMbi5sZW5ndGg+PWduP0xuOlEoIjAiLGduLUxuLmxlbmd0aCkrTG59ZnVuY3Rpb24gZ2UoS3QsZ24pe3ZhciBMbj0iIitLdDtyZXR1cm4gTG4ubGVuZ3RoPj1nbj9MbjpRKCIg'@;
put 'Iixnbi1Mbi5sZW5ndGgpK0xufWZ1bmN0aW9uIF9lKEt0LGduKXt2YXIgTG49IiIrS3Q7cmV0dXJuIExuLmxlbmd0aD49Z24/TG46TG4rUSgiICIsZ24tTG4ubGVuZ3RoKX1QLnZlcnNpb249IjEuMjAyMTA3MjYuMSI7dmFyIEhlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIEJlKEt0LGduKXty'@;
put 'ZXR1cm4gS3Q+SGV8fEt0PC1IZT9mdW5jdGlvbiB2ZShLdCxnbil7dmFyIExuPSIiK01hdGgucm91bmQoS3QpO3JldHVybiBMbi5sZW5ndGg+PWduP0xuOlEoIjAiLGduLUxuLmxlbmd0aCkrTG59KEt0LGduKTpmdW5jdGlvbiBTZShLdCxnbil7dmFyIExuPSIiK0t0O3JldHVybiBMbi5sZW5n'@;
put 'dGg+PWduP0xuOlEoIjAiLGduLUxuLmxlbmd0aCkrTG59KE1hdGgucm91bmQoS3QpLGduKX1mdW5jdGlvbiBHZShLdCxnbil7cmV0dXJuIEt0Lmxlbmd0aD49NysoZ249Z258fDApJiYxMDM9PSgzMnxLdC5jaGFyQ29kZUF0KGduKSkmJjEwMT09KDMyfEt0LmNoYXJDb2RlQXQoZ24rMSkpJiYx'@;
put 'MTA9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzIpKSYmMTAxPT0oMzJ8S3QuY2hhckNvZGVBdChnbiszKSkmJjExND09KDMyfEt0LmNoYXJDb2RlQXQoZ24rNCkpJiY5Nz09KDMyfEt0LmNoYXJDb2RlQXQoZ24rNSkpJiYxMDg9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzYpKX1mdW5jdGlvbiBudChL'@;
put 'dCl7Zm9yKHZhciBnbj1bXSxMbj1PYmplY3Qua2V5cyhLdCksV3I9MDtXciE9PUxuLmxlbmd0aDsrK1dyKWduW0t0W0xuW1dyXV1dPUxuW1dyXTtyZXR1cm4gZ259dmFyIGR0PVtbIlN1biIsIlN1bmRheSJdLFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRu'@;
put 'ZXNkYXkiXSxbIlRodSIsIlRodXJzZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVyZGF5Il1dLEN0PVtbIkoiLCJKYW4iLCJKYW51YXJ5Il0sWyJGIiwiRmViIiwiRmVicnVhcnkiXSxbIk0iLCJNYXIiLCJNYXJjaCJdLFsiQSIsIkFwciIsIkFwcmlsIl0sWyJNIiwiTWF5Iiwi'@;
put 'TWF5Il0sWyJKIiwiSnVuIiwiSnVuZSJdLFsiSiIsIkp1bCIsIkp1bHkiXSxbIkEiLCJBdWciLCJBdWd1c3QiXSxbIlMiLCJTZXAiLCJTZXB0ZW1iZXIiXSxbIk8iLCJPY3QiLCJPY3RvYmVyIl0sWyJOIiwiTm92IiwiTm92ZW1iZXIiXSxbIkQiLCJEZWMiLCJEZWNlbWJlciJdXTtmdW5jdGlv'@;
put 'biBjdChLdCl7S3RbMF09IkdlbmVyYWwiLEt0WzFdPSIwIixLdFsyXT0iMC4wMCIsS3RbM109IiMsIyMwIixLdFs0XT0iIywjIzAuMDAiLEt0WzldPSIwJSIsS3RbMTBdPSIwLjAwJSIsS3RbMTFdPSIwLjAwRSswMCIsS3RbMTJdPSIjID8vPyIsS3RbMTNdPSIjID8/Lz8/IixLdFsxNF09Im0v'@;
put 'ZC95eSIsS3RbMTVdPSJkLW1tbS15eSIsS3RbMTZdPSJkLW1tbSIsS3RbMTddPSJtbW0teXkiLEt0WzE4XT0iaDptbSBBTS9QTSIsS3RbMTldPSJoOm1tOnNzIEFNL1BNIixLdFsyMF09Img6bW0iLEt0WzIxXT0iaDptbTpzcyIsS3RbMjJdPSJtL2QveXkgaDptbSIsS3RbMzddPSIjLCMjMCA7'@;
put 'KCMsIyMwKSIsS3RbMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIixLdFszOV09IiMsIyMwLjAwOygjLCMjMC4wMCkiLEt0WzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixLdFs0NV09Im1tOnNzIixLdFs0Nl09IltoXTptbTpzcyIsS3RbNDddPSJtbXNzLjAiLEt0WzQ4XT0iIyMwLjBF'@;
put 'KzAiLEt0WzQ5XT0iQCIsS3RbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsU24oS3QpfXZhciBidD17fTtjdChidCk7dmFyIEZ0PVtdLGt0PTA7Zm9yKGt0PTU7a3Q8PTg7KytrdClGdFtrdF09MzIra3Q7Zm9yKGt0PTIz'@;
put 'O2t0PD0yNjsrK2t0KUZ0W2t0XT0wO2ZvcihrdD0yNztrdDw9MzE7KytrdClGdFtrdF09MTQ7Zm9yKGt0PTUwO2t0PD01ODsrK2t0KUZ0W2t0XT0xNDtmb3Ioa3Q9NTk7a3Q8PTYyOysra3QpRnRba3RdPWt0LTU4O2ZvcihrdD02NztrdDw9Njg7KytrdClGdFtrdF09a3QtNTg7Zm9yKGt0PTcy'@;
put 'O2t0PD03NTsrK2t0KUZ0W2t0XT1rdC01ODtmb3Ioa3Q9Njc7a3Q8PTY4Oysra3QpRnRba3RdPWt0LTU3O2ZvcihrdD03NjtrdDw9Nzg7KytrdClGdFtrdF09a3QtNTY7Zm9yKGt0PTc5O2t0PD04MTsrK2t0KUZ0W2t0XT1rdC0zNDt2YXIgVHQ9W107ZnVuY3Rpb24gWnQoS3QsZ24sTG4pe2Zv'@;
put 'cih2YXIgV3I9S3Q8MD8tMToxLFhuPUt0KldyLGVpPTAsaXI9MSxyaT0wLG1vPTEsb2k9MCx6aT0wLEpyPU1hdGguZmxvb3IoWG4pO29pPGduJiYocmk9KEpyPU1hdGguZmxvb3IoWG4pKSppcitlaSx6aT1KcipvaSttbywhKFhuLUpyPDVlLTgpKTspWG49MS8oWG4tSnIpLGVpPWlyLGlyPXJp'@;
put 'LG1vPW9pLG9pPXppO2lmKHppPmduJiYob2k+Z24/KHppPW1vLHJpPWVpKTooemk9b2kscmk9aXIpKSwhTG4pcmV0dXJuWzAsV3IqcmksemldO3ZhciB3cz1NYXRoLmZsb29yKFdyKnJpL3ppKTtyZXR1cm5bd3MsV3Iqcmktd3MqemksemldfWZ1bmN0aW9uIHBuKEt0LGduLExuKXtpZihLdD4y'@;
put 'OTU4NDY1fHxLdDwwKXJldHVybiBudWxsO3ZhciBXcj0wfEt0LFhuPU1hdGguZmxvb3IoODY0MDAqKEt0LVdyKSksZWk9MCxpcj1bXSxyaT17RDpXcixUOlhuLHU6ODY0MDAqKEt0LVdyKS1Ybix5OjAsbTowLGQ6MCxIOjAsTTowLFM6MCxxOjB9O2lmKE1hdGguYWJzKHJpLnUpPDFlLTYmJihy'@;
put 'aS51PTApLGduJiZnbi5kYXRlMTkwNCYmKFdyKz0xNDYyKSxyaS51Pi45OTk5JiYocmkudT0wLDg2NDAwPT0rK1huJiYocmkuVD1Ybj0wLCsrV3IsKytyaS5EKSksNjA9PT1Xcilpcj1Mbj9bMTMxNywxMCwyOV06WzE5MDAsMiwyOV0sZWk9MztlbHNlIGlmKDA9PT1Xcilpcj1Mbj9bMTMxNyw4'@;
put 'LDI5XTpbMTkwMCwxLDBdLGVpPTY7ZWxzZXtXcj42MCYmLS1Xcjt2YXIgbW89bmV3IERhdGUoMTkwMCwwLDEpO21vLnNldERhdGUobW8uZ2V0RGF0ZSgpK1dyLTEpLGlyPVttby5nZXRGdWxsWWVhcigpLG1vLmdldE1vbnRoKCkrMSxtby5nZXREYXRlKCldLGVpPW1vLmdldERheSgpLFdyPDYw'@;
put 'JiYoZWk9KGVpKzYpJTcpLExuJiYoZWk9ZnVuY3Rpb24gX28oS3QsZ24pe2duWzBdLT01ODE7dmFyIExuPUt0LmdldERheSgpO3JldHVybiBLdDw2MCYmKExuPShMbis2KSU3KSxMbn0obW8saXIpKX1yZXR1cm4gcmkueT1pclswXSxyaS5tPWlyWzFdLHJpLmQ9aXJbMl0scmkuUz1YbiU2MCxY'@;
put 'bj1NYXRoLmZsb29yKFhuLzYwKSxyaS5NPVhuJTYwLFhuPU1hdGguZmxvb3IoWG4vNjApLHJpLkg9WG4scmkucT1laSxyaX1UdFs1XT1UdFs2M109JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLFR0WzZdPVR0WzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxUdFs3XT1U'@;
put 'dFs2NV09JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLFR0WzhdPVR0WzY2XT0nIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxUdFs0MV09J18oKiAjLCMjMF8pO18oKiBcXCgjLCMjMFxcKTtfKCogIi0iXyk7XyhAXyknLFR0WzQyXT0nXygiJCIqICMsIyMw'@;
put 'Xyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsVHRbNDNdPSdfKCogIywjIzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/Xyk7XyhAXyknLFR0WzQ0XT0nXygiJCIqICMsIyMwLjAwXyk7XygiJCIqIFxcKCMsIyMwLjAwXFwpO18oIiQiKiAiLSI/P18p'@;
put 'O18oQF8pJyxQLnBhcnNlX2RhdGVfY29kZT1wbjt2YXIgS249bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksdW49S24uZ2V0VGltZSgpLHFuPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiB6bihLdCxnbil7dmFyIExuPUt0LmdldFRpbWUoKTtyZXR1cm4gZ24/TG4tPTEyNjIz'@;
put 'MDRlNTpLdD49cW4mJihMbis9ODY0ZTUpLChMbi0odW4rNmU0KihLdC5nZXRUaW1lem9uZU9mZnNldCgpLUtuLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9dmFyIGtuPSIiLGVyPXsiZW4tdXMiOnt5OiJ5IixkOiJkIiwiLCI6IiwiLCIuIjoiLiIsZGF0ZToiXy8ifSwiZGUtZGUiOnt5'@;
put 'OiJqIixkOiJ0IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy4ifSwiaXQtaXQiOnt5OiJ5IixkOiJkIiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy8ifX0sdHI9ZXJba24udG9Mb3dlckNhc2UoKV18fGVyWyJlbi11cyJdLFpuPW50KHRyKSxCcj0iJCIsc2k9IiIsUXI9IiwiLHVyPSIuIixBbj0i'@;
put 'LyI7ZnVuY3Rpb24gU24oS3Qpe3N3aXRjaCgoa258fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpLdFsyN109IlskLTQwNF1lL20vZCIsS3RbMjhdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1'@;
put 'NjVlNSInLEt0WzMwXT0nbSIvImQiLyJ5eScsS3RbMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMyXT0naGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzMzXT0naGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJc'@;
put 'dTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM2XT0iWyQtNDA0XWUvbS9kIixLdFs1MF09IlskLTQwNF1lL20vZCIsS3RbNTFdPSdbJC00MDRdZSJcdTVlNzQibSJc'@;
put 'dTY3MDgiZCJcdTY1ZTUiJyxLdFs1Ml09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzUzXT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU0XT0nWyQtNDA0XWUiXHU1ZTc0Im0i'@;
put 'XHU2NzA4ImQiXHU2NWU1IicsS3RbNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFs1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFs1N109IlskLTQwNF1lL20vZCIsS3Rb'@;
put 'NThdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlInpoLWNuIjpLdFsyN109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbMjhdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzI5XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMF09J20iLSJkIi0ieXkn'@;
put 'LEt0WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMl09J2giXHU2NWY2Im1tIlx1NTIwNiInLEt0WzMzXT0naCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxL'@;
put 'dFszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM2XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1MF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTFdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUyXT0neXl5'@;
put 'eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1M109J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTRdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxLdFs1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgg'@;
put 'aCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1OF09J20iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJqYS1qcCI6S3RbMjddPSdbJC00MTFdZ2UiLiJtIi4iZCcsS3RbMjhdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJc'@;
put 'dTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMwXT0nbSIvImQiLyJ5eScsS3RbMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMyXT0naCJcdTY2NDIibW0iXHU1MjA2IicsS3RbMzNdPSdoIlx1'@;
put 'NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzRdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzM1XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszNl09J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1MF09J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1MV09J1skLTQxMV1nZ2dlIlx1NWU3'@;
put 'NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1M109J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTRdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1NV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTZd'@;
put 'PSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU3XT0nWyQtNDExXWdlIi4ibSIuImQnLEt0WzU4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJrby1rciI6S3RbMjddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFsyOF09'@;
put 'Im1tLWRkIixLdFsyOV09Im1tLWRkIixLdFszMF09Im1tLWRkLXl5IixLdFszMV09J3l5eXkiXHViMTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3YyInLEt0WzMyXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCInLEt0WzMzXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCIgc3MiXHVjZDA4IicsS3RbMzRdPSJ5'@;
put 'eXl5LW1tLWRkIixLdFszNV09Inl5eXktbW0tZGQiLEt0WzM2XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbNTBdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFs1MV09Im1tLWRkIixLdFs1Ml09Inl5eXktbW0tZGQiLEt0WzUzXT0ieXl5'@;
put 'eS1tbS1kZCIsS3RbNTRdPSJtbS1kZCIsS3RbNTVdPSJ5eXl5LW1tLWRkIixLdFs1Nl09Inl5eXktbW0tZGQiLEt0WzU3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbNThdPSJtbS1kZCI7YnJlYWs7Y2FzZSJ0aC10aCI6S3RbNTldPScidCIwJyxLdFs2MF09JyJ0'@;
put 'IjAuMDAnLEt0WzYxXT0nInQiIywjIzAnLEt0WzYyXT0nInQiIywjIzAuMDAnLEt0WzY3XT0idDAlIixLdFs2OF09InQwLjAwJSIsS3RbNjldPSJ0IyA/Lz8iLEt0WzcwXT0idCMgPz8vPz8iLEt0WzcxXT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiJyxLdFs3'@;
put 'Ml09J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsS3RbNzNdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQnLEt0Wzc0XT0nXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxLdFs3NV09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOScsS3RbNzZd'@;
put 'PSdcdTBlMGEiOiJcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0Wzc3XT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiIFx1MGUwYSI6Ilx1MGUxOVx1MGUxOScsS3RbNzhdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0Wzc5XT0nW1x1MGUw'@;
put 'YV1cdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0WzgwXT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3LjAnLEt0WzgxXT0iZC9tL2JiIn19UC5fZ2VuZXJhbF9pbnQ9ZnVuY3Rpb24gd2koS3Qpe3JldHVybiBLdC50b1N0cmluZygxMCl9O3ZhciBVcj1mdW5jdGlvbigpe3ZhciBn'@;
put 'bj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKykkLztmdW5jdGlvbiBMbihvaSl7cmV0dXJuLTE9PW9pLmluZGV4T2YoIi4iKT9vaTpvaS5yZXBsYWNlKGduLCIkMSIpfXZhciBXcj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLyxYbj0vKEVbKy1dKShcZCkkLztyZXR1cm4gZnVuY3Rpb24o'@;
put 'emkpe3ZhciBKcj1mdW5jdGlvbiBtbyhvaSl7dmFyIEpyLHppPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMob2kpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIEpyPXppPj0tNCYmemk8PS0xP29pLnRvUHJlY2lzaW9uKDEwK3ppKTpNYXRoLmFicyh6aSk8PTk/ZnVuY3Rpb24gaXIob2kpe3Zh'@;
put 'ciB6aT1vaTwwPzEyOjExLEpyPUxuKG9pLnRvRml4ZWQoMTIpKTtyZXR1cm4gSnIubGVuZ3RoPD16aXx8KEpyPW9pLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD16aT9KcjpvaS50b0V4cG9uZW50aWFsKDUpfShvaSk6MTA9PT16aT9vaS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rp'@;
put 'b24gcmkob2kpe3ZhciB6aT1MbihvaS50b0ZpeGVkKDExKSk7cmV0dXJuIHppLmxlbmd0aD4ob2k8MD8xMjoxMSl8fCIwIj09PXppfHwiLTAiPT09emk/b2kudG9QcmVjaXNpb24oNik6eml9KG9pKSxMbihmdW5jdGlvbiBlaShvaSl7cmV0dXJuLTE9PW9pLmluZGV4T2YoIkUiKT9vaTpvaS5y'@;
put 'ZXBsYWNlKFdyLCIkMUUiKS5yZXBsYWNlKFhuLCIkMTAkMiIpfShKci50b1VwcGVyQ2FzZSgpKSl9KHppKTtyZXR1cm4iLCI9PT1RciYmIi4iPT09dXI/SnI6SnIucmVwbGFjZSgvWywuXS9nLGZ1bmN0aW9uKHdzKXtyZXR1cm4iLCI9PXdzP1FyOnVyfSl9fSgpO2Z1bmN0aW9uIGppKEt0LGdu'@;
put 'KXtzd2l0Y2godHlwZW9mIEt0KXtjYXNlInN0cmluZyI6cmV0dXJuIEt0O2Nhc2UiYm9vbGVhbiI6cmV0dXJuIEt0PyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxLdCk9PT1LdD9LdC50b1N0cmluZygxMCk6VXIoS3QpO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4iIjtjYXNl'@;
put 'Im9iamVjdCI6aWYobnVsbD09S3QpcmV0dXJuIiI7aWYoS3QgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBudSgxNCx6bihLdCxnbiYmZ24uZGF0ZTE5MDQpLGduKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK0t0KX1QLl9nZW5lcmFsX251'@;
put 'bT1VcixQLl9nZW5lcmFsPWppO3ZhciBUaT0iXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5Ii5zcGxpdCgiIik7ZnVuY3Rpb24gWW8oS3QsZ24sTG4sV3Ipe3ZhciBtbyxYbj0iIixlaT0wLGlyPTAscmk9TG4ueSxvaT0wO3N3aXRj'@;
put 'aChLdCl7Y2FzZSA5ODpyaT1Mbi55KzU0MztjYXNlIDEyMTpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPXJpJTEwMCxvaT0yO2JyZWFrO2RlZmF1bHQ6bW89cmklMWU0LG9pPTR9YnJlYWs7Y2FzZSAxMDk6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Mbi5t'@;
put 'LG9pPWduLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEN0W0xuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBDdFtMbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEN0W0xuLm0tMV1bMl19YnJlYWs7Y2FzZSAxMDA6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Mbi5kLG9pPWdu'@;
put 'Lmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIGR0W0xuLnFdWzBdO2RlZmF1bHQ6cmV0dXJuIGR0W0xuLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89MSsoTG4uSCsxMSklMTIsb2k9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ci'@;
put 'YmFkIGhvdXIgZm9ybWF0OiAiK2dufWJyZWFrO2Nhc2UgNzI6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Mbi5ILG9pPWduLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitnbn1icmVhaztjYXNlIDc3OnN3aXRjaChnbi5sZW5ndGgpe2Nh'@;
put 'c2UgMTpjYXNlIDI6bW89TG4uTSxvaT1nbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgbWludXRlIGZvcm1hdDogIitnbn1icmVhaztjYXNlIDExNTppZigicyIhPWduJiYic3MiIT1nbiYmIi4wIiE9Z24mJiIuMDAiIT1nbiYmIi4wMDAiIT1nbil0aHJvdyJiYWQgc2Vjb25kIGZv'@;
put 'cm1hdDogIitnbjtyZXR1cm4gMCE9PUxuLnV8fCJzIiE9Z24mJiJzcyIhPWduPyhpcj1Xcj49Mj8zPT09V3I/MWUzOjEwMDoxPT09V3I/MTA6MSwoZWk9TWF0aC5yb3VuZChpciooTG4uUytMbi51KSkpPj02MCppciYmKGVpPTApLCJzIj09PWduPzA9PT1laT8iMCI6IiIrZWkvaXI6KFhuPXJl'@;
put 'KGVpLDIrV3IpLCJzcyI9PT1nbj9Ybi5zdWJzdHIoMCwyKToiLiIrWG4uc3Vic3RyKDIsZ24ubGVuZ3RoLTEpKSk6cmUoTG4uUyxnbi5sZW5ndGgpO2Nhc2UgOTA6c3dpdGNoKGduKXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjYXNlIltcdTBlMGFdIjpjYXNlIltcdTBlMGFcdTBlMGFdIjptbz0y'@;
put 'NCpMbi5EK0xuLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Y2FzZSJbXHUwZTE5XSI6Y2FzZSJbXHUwZTE5XHUwZTE5XSI6bW89NjAqKDI0KkxuLkQrTG4uSCkrTG4uTTticmVhaztjYXNlIltzXSI6Y2FzZSJbc3NdIjpjYXNlIltcdTBlMTddIjpjYXNlIltcdTBlMTdcdTBlMTddIjpt'@;
put 'bz02MCooNjAqKDI0KkxuLkQrTG4uSCkrTG4uTSkrTWF0aC5yb3VuZChMbi5TK0xuLnUpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFic3RpbWUgZm9ybWF0OiAiK2dufW9pPTM9PT1nbi5sZW5ndGg/MToyO2JyZWFrO2Nhc2UgMTAxOm1vPXJpLG9pPTE7YnJlYWs7Y2FzZSAzNjIzOm1vPUxu'@;
put 'LmQsb2k9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNDpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPUxuLm0sb2k9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gQ3RbTG4ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIEN0W0xuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gQ3Rb'@;
put 'TG4ubS0xXVsyXX1icmVhaztjYXNlIDM2MTE6c3dpdGNoKHJpPUxuLnkrNTQzLGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1yaSUxMDAsb2k9MjticmVhaztkZWZhdWx0Om1vPXJpJTFlNCxvaT00fWJyZWFrO2Nhc2UgMzU5NDptbz1Mbi5ILG9pPWduLmxlbmd0aDticmVhaztjYXNlIDM2'@;
put 'MDk6bW89TG4uTSxvaT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA3Om1vPUxuLlMsb2k9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3cgS3QudG9TdHJpbmcoMTYpfXZhciB6aT1vaT4wP3JlKG1vLG9pKToiIjtyZXR1cm4oOTA9PUt0P2duLmNoYXJDb2RlQXQoMSk8MzU4NDpLdDwzNTg0'@;
put 'KT96aTp6aS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKEpyKXtyZXR1cm4gVGlbK0pyXX0pfWZ1bmN0aW9uIGxvKEt0KXtpZihLdC5sZW5ndGg8PTMpcmV0dXJuIEt0O2Zvcih2YXIgTG49S3QubGVuZ3RoJTMsV3I9S3Quc3Vic3RyKDAsTG4pO0xuIT1LdC5sZW5ndGg7TG4rPTMpV3IrPShX'@;
put 'ci5sZW5ndGg+MD8iLCI6IiIpK0t0LnN1YnN0cihMbiwzKTtyZXR1cm4gV3J9dmFyIEFvPWZ1bmN0aW9uKCl7dmFyIGduPS8lL2c7ZnVuY3Rpb24gWG4oYW4sVnQpe3ZhciBXdCxkbj1hbi5pbmRleE9mKCJFIiktYW4uaW5kZXhPZigiLiIpLTE7aWYoYW4ubWF0Y2goL14jKzAuMEVcKzAkLykp'@;
put 'e2lmKDA9PVZ0KXJldHVybiIwLjBFKzAiO2lmKFZ0PDApcmV0dXJuIi0iK1huKGFuLC1WdCk7dmFyIFRuPWFuLmluZGV4T2YoIi4iKTstMT09PVRuJiYoVG49YW4uaW5kZXhPZigiRSIpKTt2YXIgbnI9TWF0aC5mbG9vcihNYXRoLmxvZyhWdCkqTWF0aC5MT0cxMEUpJVRuO2lmKG5yPDAmJihu'@;
put 'cis9VG4pLC0xPT09KFd0PShWdC9NYXRoLnBvdygxMCxucikpLnRvUHJlY2lzaW9uKGRuKzErKFRuK25yKSVUbikpLmluZGV4T2YoImUiKSl7dmFyIGJyPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1XdC5pbmRleE9mKCIuIik/V3Q9V3QuY2hhckF0KDAp'@;
put 'KyIuIitXdC5zdWJzdHIoMSkrIkUrIisoYnItV3QubGVuZ3RoK25yKTpXdCs9IkUrIisoYnItbnIpOyIwLiI9PT1XdC5zdWJzdHIoMCwyKTspV3Q9KFd0PVd0LmNoYXJBdCgwKStXdC5zdWJzdHIoMixUbikrIi4iK1d0LnN1YnN0cigyK1RuKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIiku'@;
put 'cmVwbGFjZSgvXjArXC4vLCIwLiIpO1d0PVd0LnJlcGxhY2UoL1wrLS8sIi0iKX1XdD1XdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKFpyLExyLE1pLGNpKXtyZXR1cm4gTHIrTWkrY2kuc3Vic3RyKDAsKFRuK25yKSVUbikrIi4iK2NpLnN1YnN0cihucikr'@;
put 'IkUifSl9ZWxzZSBXdD1WdC50b0V4cG9uZW50aWFsKGRuKTtyZXR1cm4gYW4ubWF0Y2goL0VcKzAwJC8pJiZXdC5tYXRjaCgvZVsrLV1cZCQvKSYmKFd0PVd0LnN1YnN0cigwLFd0Lmxlbmd0aC0xKSsiMCIrV3QuY2hhckF0KFd0Lmxlbmd0aC0xKSksYW4ubWF0Y2goL0VcLS8pJiZXdC5tYXRj'@;
put 'aCgvZVwrLykmJihXdD1XdC5yZXBsYWNlKC9lXCsvLCJlIikpLFd0LnJlcGxhY2UoImUiLCJFIil9dmFyIGVpPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyxtbz0vXiMqMCpcLihbMCNdKykvLG9pPS9cKS4qWzAjXS8semk9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIEpyKGFuKXtm'@;
put 'b3IodmFyIFd0LFZ0PSIiLGRuPTA7ZG4hPWFuLmxlbmd0aDsrK2RuKXN3aXRjaChXdD1hbi5jaGFyQ29kZUF0KGRuKSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOlZ0Kz0iICI7YnJlYWs7Y2FzZSA0ODpWdCs9IjAiO2JyZWFrO2RlZmF1bHQ6VnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoV3QpfXJl'@;
put 'dHVybiBWdH1mdW5jdGlvbiB3cyhhbixWdCl7dmFyIFd0PU1hdGgucG93KDEwLFZ0KTtyZXR1cm4iIitNYXRoLnJvdW5kKGFuKld0KS9XdH1mdW5jdGlvbiB2cyhhbixWdCl7aWYoVnQ+MTEpcmV0dXJuIHZzKGFuLDExKSpNYXRoLnBvdygxMCxWdC0xMSk7dmFyIFd0PWFuLU1hdGguZmxvb3Io'@;
put 'YW4pLGRuPU1hdGgucG93KDEwLFZ0KTtyZXR1cm4gVnQ8KCIiK01hdGgucm91bmQoV3QqZG4pKS5sZW5ndGg/MDpNYXRoLnJvdW5kKFd0KmRuKX1mdW5jdGlvbiBoYShhbixWdCxXdCl7aWYoNDA9PT1hbi5jaGFyQ29kZUF0KDApJiYhVnQubWF0Y2gob2kpKXt2YXIgZG49VnQucmVwbGFjZSgv'@;
put 'XCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIFd0Pj0wP2hhKCJuIixkbixXdCk6IigiK2hhKCJuIixkbiwtV3QpKyIpIn1pZig0ND09PVZ0LmNoYXJDb2RlQXQoVnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBXcihhbixWdCxXdCl7Zm9yKHZh'@;
put 'ciBkbj1WdC5sZW5ndGgtMTs0ND09PVZ0LmNoYXJDb2RlQXQoZG4tMSk7KS0tZG47cmV0dXJuIEFvKGFuLFZ0LnN1YnN0cigwLGRuKSxXdC9NYXRoLnBvdygxMCwzKihWdC5sZW5ndGgtZG4pKSl9KGFuLFZ0LFd0KTtpZigtMSE9PVZ0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gTG4o'@;
put 'YW4sVnQsV3Qpe3ZhciBkbj1WdC5yZXBsYWNlKGduLCIiKSxUbj1WdC5sZW5ndGgtZG4ubGVuZ3RoO3JldHVybiBBbyhhbixkbixXdCpNYXRoLnBvdygxMCwyKlRuKSkrUSgiJSIsVG4pfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9mKCJFIikpcmV0dXJuIFhuKFZ0LFd0KTtpZigzNj09'@;
put 'PVZ0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK2hhKGFuLFZ0LnN1YnN0cigiICI9PVZ0LmNoYXJBdCgxKT8yOjEpLFd0KTt2YXIgVG4sbnIsYnIsWnIsTHI9TWF0aC5hYnMoV3QpLE1pPVd0PDA/Ii0iOiIiO2lmKFZ0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBNaStCZShMcixWdC5sZW5ndGgp'@;
put 'O2lmKFZ0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KFRuPUJlKFd0LDApKSYmKFRuPSIiKSxUbi5sZW5ndGg+VnQubGVuZ3RoP1RuOkpyKFZ0LnN1YnN0cigwLFZ0Lmxlbmd0aC1Ubi5sZW5ndGgpKStUbjtpZihucj1WdC5tYXRjaChlaSkpcmV0dXJuIGZ1bmN0aW9uIGlyKGFuLFZ0'@;
put 'LFd0KXt2YXIgZG49cGFyc2VJbnQoYW5bNF0sMTApLFRuPU1hdGgucm91bmQoVnQqZG4pLG5yPU1hdGguZmxvb3IoVG4vZG4pLGJyPVRuLW5yKmRuLFpyPWRuO3JldHVybiBXdCsoMD09PW5yPyIiOiIiK25yKSsiICIrKDA9PT1icj9RKCIgIixhblsxXS5sZW5ndGgrMSthbls0XS5sZW5ndGgp'@;
put 'OmdlKGJyLGFuWzFdLmxlbmd0aCkrYW5bMl0rIi8iK2FuWzNdK3JlKFpyLGFuWzRdLmxlbmd0aCkpfShucixMcixNaSk7aWYoVnQubWF0Y2goL14jKzArJC8pKXJldHVybiBNaStCZShMcixWdC5sZW5ndGgtVnQuaW5kZXhPZigiMCIpKTtpZihucj1WdC5tYXRjaChtbykpcmV0dXJuIFRuPXdz'@;
put 'KFd0LG5yWzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrSnIobnJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitKcihuclsxXSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihVbyx0aSl7cmV0dXJuIi4iK3RpK1EoIjAiLEpyKG5yWzFdKS5sZW5ndGgtdGkubGVuZ3Ro'@;
put 'KX0pLC0xIT09VnQuaW5kZXhPZigiMC4iKT9UbjpUbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFZ0PVZ0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbnI9VnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBNaSt3cyhMcixuclsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTld'@;
put 'KTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLG5yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobnI9VnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIE1pK2xvKEJlKExyLDApKTtpZihucj1WdC5tYXRjaCgvXiMsIyMwXC4oWyMw'@;
put 'XSowKSQvKSlyZXR1cm4gV3Q8MD8iLSIraGEoYW4sVnQsLVd0KTpsbygiIisoTWF0aC5mbG9vcihXdCkrZnVuY3Rpb24gbWwoYW4sVnQpe3JldHVybiBWdDwoIiIrTWF0aC5yb3VuZCgoYW4tTWF0aC5mbG9vcihhbikpKk1hdGgucG93KDEwLFZ0KSkpLmxlbmd0aD8xOjB9KFd0LG5yWzFdLmxl'@;
put 'bmd0aCkpKSsiLiIrcmUodnMoV3QsbnJbMV0ubGVuZ3RoKSxuclsxXS5sZW5ndGgpO2lmKG5yPVZ0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBoYShhbixWdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxXdCk7aWYobnI9VnQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJu'@;
put 'IFRuPUwoaGEoYW4sVnQucmVwbGFjZSgvW1xcLV0vZywiIiksV3QpKSxicj0wLEwoTChWdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKFVvKXtyZXR1cm4gYnI8VG4ubGVuZ3RoP1RuLmNoYXJBdChicisrKToiMCI9PT1Vbz8iMCI6IiJ9KSk7aWYoVnQubWF0'@;
put 'Y2goemkpKXJldHVybiIoIisoVG49aGEoYW4sIiMjIyMjIyMjIyMiLFd0KSkuc3Vic3RyKDAsMykrIikgIitUbi5zdWJzdHIoMywzKSsiLSIrVG4uc3Vic3RyKDYpO3ZhciBjaT0iIjtpZihucj1WdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIGJyPU1hdGgu'@;
put 'bWluKG5yWzRdLmxlbmd0aCw3KSxacj1adChMcixNYXRoLnBvdygxMCxiciktMSwhMSksVG49IiIrTWksIiAiPT0oY2k9QW8oIm4iLG5yWzFdLFpyWzFdKSkuY2hhckF0KGNpLmxlbmd0aC0xKSYmKGNpPWNpLnN1YnN0cigwLGNpLmxlbmd0aC0xKSsiMCIpLFRuKz1jaStuclsyXSsiLyIrbnJb'@;
put 'M10sKGNpPV9lKFpyWzJdLGJyKSkubGVuZ3RoPG5yWzRdLmxlbmd0aCYmKGNpPUpyKG5yWzRdLnN1YnN0cihucls0XS5sZW5ndGgtY2kubGVuZ3RoKSkrY2kpLFRuKz1jaTtpZihucj1WdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9TWF0aC5taW4o'@;
put 'TWF0aC5tYXgobnJbMV0ubGVuZ3RoLG5yWzRdLmxlbmd0aCksNyksTWkrKChacj1adChMcixNYXRoLnBvdygxMCxiciktMSwhMCkpWzBdfHwoWnJbMV0/IiI6IjAiKSkrIiAiKyhaclsxXT9nZShaclsxXSxicikrbnJbMl0rIi8iK25yWzNdK19lKFpyWzJdLGJyKTpRKCIgIiwyKmJyKzErbnJb'@;
put 'Ml0ubGVuZ3RoK25yWzNdLmxlbmd0aCkpO2lmKG5yPVZ0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBUbj1CZShXdCwwKSxWdC5sZW5ndGg8PVRuLmxlbmd0aD9UbjpKcihWdC5zdWJzdHIoMCxWdC5sZW5ndGgtVG4ubGVuZ3RoKSkrVG47aWYobnI9VnQubWF0Y2goL14oWyMwP10rKVwuKFsj'@;
put 'MF0rKSQvKSl7VG49IiIrV3QudG9GaXhlZChNYXRoLm1pbihuclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLGJyPVRuLmluZGV4T2YoIi4iKTt2YXIgQ289VnQuaW5kZXhPZigiLiIpLWJyLHBvPVZ0Lmxlbmd0aC1Ubi5sZW5ndGgtQ287cmV0dXJuIEpyKFZ0LnN1'@;
put 'YnN0cigwLENvKStUbitWdC5zdWJzdHIoVnQubGVuZ3RoLXBvKSl9aWYobnI9VnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBicj12cyhXdCxuclsxXS5sZW5ndGgpLFd0PDA/Ii0iK2hhKGFuLFZ0LC1XdCk6bG8oZnVuY3Rpb24gemwoYW4pe3JldHVybiBhbjwyMTQ3NDgz'@;
put 'NjQ3JiZhbj4tMjE0NzQ4MzY0OD8iIisoYW4+PTA/MHxhbjphbi0xfDApOiIiK01hdGguZmxvb3IoYW4pfShXdCkpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oVW8pe3JldHVybiIwMCwiKyhVby5sZW5ndGg8Mz9yZSgwLDMtVW8ubGVuZ3Ro'@;
put 'KToiIikrVW99KSsiLiIrcmUoYnIsbnJbMV0ubGVuZ3RoKTtzd2l0Y2goVnQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIGhhKGFuLCIjLCMjMC4wMCIsV3QpO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBWaT1sbyhCZShMciwwKSk7cmV0dXJuIjAiIT09Vmk/'@;
put 'TWkrVmk6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gaGEoYW4sIiMjIywjIzAuMDAiLFd0KS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJldHVybiBoYShhbiwiIywjIzAuMDAiLFd0KS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0'@;
put 'ZWQgZm9ybWF0IHwiK1Z0KyJ8Iil9ZnVuY3Rpb24gcm4oYW4sVnQpe3ZhciBXdCxkbj1hbi5pbmRleE9mKCJFIiktYW4uaW5kZXhPZigiLiIpLTE7aWYoYW4ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVZ0KXJldHVybiIwLjBFKzAiO2lmKFZ0PDApcmV0dXJuIi0iK3JuKGFuLC1WdCk7'@;
put 'dmFyIFRuPWFuLmluZGV4T2YoIi4iKTstMT09PVRuJiYoVG49YW4uaW5kZXhPZigiRSIpKTt2YXIgbnI9TWF0aC5mbG9vcihNYXRoLmxvZyhWdCkqTWF0aC5MT0cxMEUpJVRuO2lmKG5yPDAmJihucis9VG4pLCEoV3Q9KFZ0L01hdGgucG93KDEwLG5yKSkudG9QcmVjaXNpb24oZG4rMSsoVG4r'@;
put 'bnIpJVRuKSkubWF0Y2goL1tFZV0vKSl7dmFyIGJyPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGguTE9HMTBFKTstMT09PVd0LmluZGV4T2YoIi4iKT9XdD1XdC5jaGFyQXQoMCkrIi4iK1d0LnN1YnN0cigxKSsiRSsiKyhici1XdC5sZW5ndGgrbnIpOld0Kz0iRSsiKyhici1uciksV3Q9'@;
put 'V3QucmVwbGFjZSgvXCstLywiLSIpfVd0PVd0LnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oWnIsTHIsTWksY2kpe3JldHVybiBMcitNaStjaS5zdWJzdHIoMCwoVG4rbnIpJVRuKSsiLiIrY2kuc3Vic3RyKG5yKSsiRSJ9KX1lbHNlIFd0PVZ0LnRvRXhwb25l'@;
put 'bnRpYWwoZG4pO3JldHVybiBhbi5tYXRjaCgvRVwrMDAkLykmJld0Lm1hdGNoKC9lWystXVxkJC8pJiYoV3Q9V3Quc3Vic3RyKDAsV3QubGVuZ3RoLTEpKyIwIitXdC5jaGFyQXQoV3QubGVuZ3RoLTEpKSxhbi5tYXRjaCgvRVwtLykmJld0Lm1hdGNoKC9lXCsvKSYmKFd0PVd0LnJlcGxhY2Uo'@;
put 'L2VcKy8sImUiKSksV3QucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiBfbihhbixWdCxXdCl7aWYoNDA9PT1hbi5jaGFyQ29kZUF0KDApJiYhVnQubWF0Y2gob2kpKXt2YXIgZG49VnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJu'@;
put 'IFd0Pj0wP19uKCJuIixkbixXdCk6IigiK19uKCJuIixkbiwtV3QpKyIpIn1pZig0ND09PVZ0LmNoYXJDb2RlQXQoVnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiB5ZihhbixWdCxXdCl7Zm9yKHZhciBkbj1WdC5sZW5ndGgtMTs0ND09PVZ0LmNoYXJDb2RlQXQoZG4tMSk7KS0tZG47cmV0'@;
put 'dXJuIEFvKGFuLFZ0LnN1YnN0cigwLGRuKSxXdC9NYXRoLnBvdygxMCwzKihWdC5sZW5ndGgtZG4pKSl9KGFuLFZ0LFd0KTtpZigtMSE9PVZ0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gb3AoYW4sVnQsV3Qpe3ZhciBkbj1WdC5yZXBsYWNlKGduLCIiKSxUbj1WdC5sZW5ndGgtZG4u'@;
put 'bGVuZ3RoO3JldHVybiBBbyhhbixkbixXdCpNYXRoLnBvdygxMCwyKlRuKSkrUSgiJSIsVG4pfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9mKCJFIikpcmV0dXJuIHJuKFZ0LFd0KTtpZigzNj09PVZ0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK19uKGFuLFZ0LnN1YnN0cigiICI9PVZ0'@;
put 'LmNoYXJBdCgxKT8yOjEpLFd0KTt2YXIgVG4sbnIsYnIsWnIsTHI9TWF0aC5hYnMoV3QpLE1pPVd0PDA/Ii0iOiIiO2lmKFZ0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBNaStyZShMcixWdC5sZW5ndGgpO2lmKFZ0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIFRuPSIiK1d0LDA9PT1XdCYmKFRu'@;
put 'PSIiKSxUbi5sZW5ndGg+VnQubGVuZ3RoP1RuOkpyKFZ0LnN1YnN0cigwLFZ0Lmxlbmd0aC1Ubi5sZW5ndGgpKStUbjtpZihucj1WdC5tYXRjaChlaSkpcmV0dXJuIGZ1bmN0aW9uIHJpKGFuLFZ0LFd0KXtyZXR1cm4gV3QrKDA9PT1WdD8iIjoiIitWdCkrUSgiICIsYW5bMV0ubGVuZ3RoKzIr'@;
put 'YW5bNF0ubGVuZ3RoKX0obnIsTHIsTWkpO2lmKFZ0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gTWkrcmUoTHIsVnQubGVuZ3RoLVZ0LmluZGV4T2YoIjAiKSk7aWYobnI9VnQubWF0Y2gobW8pKXJldHVybiBUbj0oVG49KCIiK1d0KS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitKcihuclsx'@;
put 'XSkpLnJlcGxhY2UoL1wuJC8sIi4iK0pyKG5yWzFdKSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihVbyx0aSl7cmV0dXJuIi4iK3RpK1EoIjAiLEpyKG5yWzFdKS5sZW5ndGgtdGkubGVuZ3RoKX0pLC0xIT09VnQuaW5kZXhPZigiMC4iKT9UbjpUbi5yZXBsYWNlKC9eMFwuLywiLiIp'@;
put 'O2lmKFZ0PVZ0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbnI9VnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBNaSsoIiIrTHIpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLG5yWzFdLmxl'@;
put 'bmd0aD8iMC4iOiIuIik7aWYobnI9VnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIE1pK2xvKCIiK0xyKTtpZihucj1WdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gV3Q8MD8iLSIrX24oYW4sVnQsLVd0KTpsbygiIitXdCkrIi4iK1EoIjAiLG5yWzFdLmxl'@;
put 'bmd0aCk7aWYobnI9VnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIF9uKGFuLFZ0LnJlcGxhY2UoL14jLCMqLC8sIiIpLFd0KTtpZihucj1WdC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gVG49TChfbihhbixWdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxXdCkpLGJy'@;
put 'PTAsTChMKFZ0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVW8pe3JldHVybiBicjxUbi5sZW5ndGg/VG4uY2hhckF0KGJyKyspOiIwIj09PVVvPyIwIjoiIn0pKTtpZihWdC5tYXRjaCh6aSkpcmV0dXJuIigiKyhUbj1fbihhbiwiIyMjIyMjIyMjIyIsV3Qp'@;
put 'KS5zdWJzdHIoMCwzKSsiKSAiK1RuLnN1YnN0cigzLDMpKyItIitUbi5zdWJzdHIoNik7dmFyIGNpPSIiO2lmKG5yPVZ0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9TWF0aC5taW4obnJbNF0ubGVuZ3RoLDcpLFpyPVp0KExyLE1hdGgucG93KDEwLGJy'@;
put 'KS0xLCExKSxUbj0iIitNaSwiICI9PShjaT1BbygibiIsbnJbMV0sWnJbMV0pKS5jaGFyQXQoY2kubGVuZ3RoLTEpJiYoY2k9Y2kuc3Vic3RyKDAsY2kubGVuZ3RoLTEpKyIwIiksVG4rPWNpK25yWzJdKyIvIituclszXSwoY2k9X2UoWnJbMl0sYnIpKS5sZW5ndGg8bnJbNF0ubGVuZ3RoJiYo'@;
put 'Y2k9SnIobnJbNF0uc3Vic3RyKG5yWzRdLmxlbmd0aC1jaS5sZW5ndGgpKStjaSksVG4rPWNpO2lmKG5yPVZ0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBicj1NYXRoLm1pbihNYXRoLm1heChuclsxXS5sZW5ndGgsbnJbNF0ubGVuZ3RoKSw3KSxNaSso'@;
put 'KFpyPVp0KExyLE1hdGgucG93KDEwLGJyKS0xLCEwKSlbMF18fChaclsxXT8iIjoiMCIpKSsiICIrKFpyWzFdP2dlKFpyWzFdLGJyKStuclsyXSsiLyIrbnJbM10rX2UoWnJbMl0sYnIpOlEoIiAiLDIqYnIrMStuclsyXS5sZW5ndGgrbnJbM10ubGVuZ3RoKSk7aWYobnI9VnQubWF0Y2goL15b'@;
put 'IzA/XSskLykpcmV0dXJuIFZ0Lmxlbmd0aDw9KFRuPSIiK1d0KS5sZW5ndGg/VG46SnIoVnQuc3Vic3RyKDAsVnQubGVuZ3RoLVRuLmxlbmd0aCkpK1RuO2lmKG5yPVZ0Lm1hdGNoKC9eKFsjMF0rKVwuKFsjMF0rKSQvKSl7VG49IiIrV3QudG9GaXhlZChNYXRoLm1pbihuclsyXS5sZW5ndGgs'@;
put 'MTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLGJyPVRuLmluZGV4T2YoIi4iKTt2YXIgQ289VnQuaW5kZXhPZigiLiIpLWJyLHBvPVZ0Lmxlbmd0aC1Ubi5sZW5ndGgtQ287cmV0dXJuIEpyKFZ0LnN1YnN0cigwLENvKStUbitWdC5zdWJzdHIoVnQubGVuZ3RoLXBvKSl9aWYobnI9VnQu'@;
put 'bWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBXdDwwPyItIitfbihhbixWdCwtV3QpOmxvKCIiK1d0KS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFVvKXtyZXR1cm4iMDAsIisoVW8ubGVuZ3RoPDM/cmUoMCwzLVVvLmxlbmd0'@;
put 'aCk6IiIpK1VvfSkrIi4iK3JlKDAsbnJbMV0ubGVuZ3RoKTt2YXIgVmk9bG8oIiIrTHIpO3N3aXRjaChWdCl7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6cmV0dXJuIjAiIT09Vmk/TWkrVmk6IiI7Y2FzZSIjLCMwMCI6cmV0dXJuIjAwIiE9PShWaT1yZShWaSwyKSk/'@;
put 'TWkrVmk6IiI7ZGVmYXVsdDppZihWdC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIF9uKGFuLFZ0LnNsaWNlKDAsVnQubGFzdEluZGV4T2YoIi4iKSksV3QpK0pyKFZ0LnNsaWNlKFZ0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitW'@;
put 'dCsifCIpfXJldHVybiBmdW5jdGlvbihWdCxXdCxkbil7cmV0dXJuIjAsMCI9PVd0JiYoV3Q9IiMsIzAwIiksKDB8ZG4pPT09ZG4/X24oVnQsV3QsZG4pOmhhKFZ0LFd0LGRuKX19KCk7ZnVuY3Rpb24geG8oS3Qpe2Zvcih2YXIgZ249W10sTG49ITEsV3I9MCxYbj0wO1dyPEt0Lmxlbmd0aDsr'@;
put 'K1dyKXN3aXRjaChLdC5jaGFyQ29kZUF0KFdyKSl7Y2FzZSAzNDpMbj0hTG47YnJlYWs7Y2FzZSA5NTpjYXNlIDQyOmNhc2UgOTI6KytXcjticmVhaztjYXNlIDU5OmduW2duLmxlbmd0aF09S3Quc3Vic3RyKFhuLFdyLVhuKSxYbj1XcisxfWlmKGduW2duLmxlbmd0aF09S3Quc3Vic3RyKFhu'@;
put 'KSwhMD09PUxuKXRocm93IG5ldyBFcnJvcigiRm9ybWF0IHwiK0t0KyJ8IHVudGVybWluYXRlZCBzdHJpbmcgIik7cmV0dXJuIGdufVAuX3NwbGl0PXhvO3ZhciBoaT0vXFtbSGhNbVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gdGEoS3Qpe2Zvcih2YXIgZ249MCxMbj0iIixX'@;
put 'cj0iIjtnbjxLdC5sZW5ndGg7KXN3aXRjaChMbj1LdC5jaGFyQXQoZ24pKXtjYXNlIkciOkdlKEt0LGduKSYmKGduKz02KSxnbisrO2JyZWFrO2Nhc2UnIic6Zm9yKDszNCE9PUt0LmNoYXJDb2RlQXQoKytnbikmJmduPEt0Lmxlbmd0aDspOysrZ247YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpn'@;
put 'bis9MjticmVhaztjYXNlIkAiOisrZ247YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PUt0LmNoYXJBdChnbisxKXx8IjIiPT09S3QuY2hhckF0KGduKzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJk'@;
put 'IjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PUt0LnN1YnN0cihnbiwzKS50b1VwcGVyQ2FzZSgpfHwiQU0vUE0iPT09S3Quc3Vic3RyKGduLDUpLnRvVXBwZXJDYXNlKCl8fCJc'@;
put 'dTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PUt0LnN1YnN0cihnbiw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrZ247YnJlYWs7Y2FzZSJbIjpmb3IoV3I9TG47Il0iIT09S3QuY2hhckF0KGduKyspJiZnbjxLdC5sZW5ndGg7KVdyKz1LdC5jaGFyQXQoZ24pO2lmKFdyLm1hdGNoKGhp'@;
put 'KSlyZXR1cm4hMDticmVhaztjYXNlIi4iOmNhc2UiMCI6Y2FzZSIjIjpmb3IoO2duPEt0Lmxlbmd0aCYmKCIwIz8uLEUrLSUiLmluZGV4T2YoTG49S3QuY2hhckF0KCsrZ24pKT4tMXx8IlxcIj09TG4mJiItIj09S3QuY2hhckF0KGduKzEpJiYiMCMiLmluZGV4T2YoS3QuY2hhckF0KGduKzIp'@;
put 'KT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7S3QuY2hhckF0KCsrZ24pPT09TG47KTticmVhaztjYXNlIioiOisrZ24sKCIgIj09S3QuY2hhckF0KGduKXx8IioiPT1LdC5jaGFyQXQoZ24pKSYmKytnbjticmVhaztjYXNlIigiOmNhc2UiKSI6KytnbjticmVhaztjYXNlIjEiOmNhc2UiMiI6'@;
put 'Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO2duPEt0Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoS3QuY2hhckF0KCsrZ24pKT4tMTspO2JyZWFrO2RlZmF1bHQ6Kytnbn1yZXR1cm4hMX1mdW5jdGlvbiBNbihLdCxnbixM'@;
put 'bixXcil7Zm9yKHZhciBvaSx6aSxKcixYbj1bXSxlaT0iIixpcj0wLHJpPSIiLG1vPSJ0Iix3cz0iSCI7aXI8S3QubGVuZ3RoOylzd2l0Y2gocmk9S3QuY2hhckF0KGlyKSl7Y2FzZSJHIjppZighR2UoS3QsaXIpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK3Jp'@;
put 'KyIgaW4gIitLdCk7WG5bWG4ubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LGlyKz03O2JyZWFrO2Nhc2UnIic6Zm9yKGVpPSIiOzM0IT09KEpyPUt0LmNoYXJDb2RlQXQoKytpcikpJiZpcjxLdC5sZW5ndGg7KWVpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEpyKTtYbltYbi5sZW5ndGhdPXt0'@;
put 'OiJ0Iix2OmVpfSwrK2lyO2JyZWFrO2Nhc2UiXFwiOnZhciB2cz1LdC5jaGFyQXQoKytpcik7WG5bWG4ubGVuZ3RoXT17dDoiKCI9PT12c3x8IikiPT09dnM/dnM6InQiLHY6dnN9LCsraXI7YnJlYWs7Y2FzZSJfIjpYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0saXIrPTI7YnJlYWs7Y2Fz'@;
put 'ZSJAIjpYbltYbi5sZW5ndGhdPXt0OiJUIix2OmdufSwrK2lyO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1LdC5jaGFyQXQoaXIrMSl8fCIyIj09PUt0LmNoYXJBdChpcisxKSl7aWYobnVsbD09b2kmJm51bGw9PShvaT1wbihnbixMbiwiMiI9PT1LdC5jaGFyQXQoaXIrMSkpKSly'@;
put 'ZXR1cm4iIjtYbltYbi5sZW5ndGhdPXt0OiJYIix2Okt0LnN1YnN0cihpciwyKX0sbW89cmksaXIrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6cmk9cmkudG9Mb3dlckNhc2UoKTtjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgi'@;
put 'OmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOmlmKGduPDB8fG51bGw9PW9pJiZudWxsPT0ob2k9cG4oZ24sTG4pKSlyZXR1cm4iIjtmb3IoZWk9cmk7Kytp'@;
put 'cjxLdC5sZW5ndGgmJkt0LmNoYXJBdChpcikudG9Mb3dlckNhc2UoKT09PXJpOyllaSs9cmk7Im0iPT09cmkmJiJoIj09PW1vLnRvTG93ZXJDYXNlKCkmJihyaT0iTSIpLCJoIj09PXJpJiYocmk9d3MpLFhuW1huLmxlbmd0aF09e3Q6cmksdjplaX0sbW89cmk7YnJlYWs7Y2FzZSJBIjpjYXNl'@;
put 'ImEiOmNhc2UiXHU0ZTBhIjp2YXIgemw9e3Q6cmksdjpyaX07aWYobnVsbD09b2kmJihvaT1wbihnbixMbikpLCJBL1AiPT09S3Quc3Vic3RyKGlyLDMpLnRvVXBwZXJDYXNlKCk/KG51bGwhPW9pJiYoemwudj1vaS5IPj0xMj8iUCI6IkEiKSx6bC50PSJUIix3cz0iaCIsaXIrPTMpOiJBTS9Q'@;
put 'TSI9PT1LdC5zdWJzdHIoaXIsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9b2kmJih6bC52PW9pLkg+PTEyPyJQTSI6IkFNIiksemwudD0iVCIsaXIrPTUsd3M9ImgiKToiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1LdC5zdWJzdHIoaXIsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9b2km'@;
put 'Jih6bC52PW9pLkg+PTEyPyJcdTRlMGJcdTUzNDgiOiJcdTRlMGFcdTUzNDgiKSx6bC50PSJUIixpcis9NSx3cz0iaCIpOih6bC50PSJ0IiwrK2lyKSxudWxsPT1vaSYmIlQiPT09emwudClyZXR1cm4iIjtYbltYbi5sZW5ndGhdPXpsLG1vPXJpO2JyZWFrO2Nhc2UiWyI6Zm9yKGVpPXJpOyJd'@;
put 'IiE9PUt0LmNoYXJBdChpcisrKSYmaXI8S3QubGVuZ3RoOyllaSs9S3QuY2hhckF0KGlyKTtpZigiXSIhPT1laS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcrZWkrInwiO2lmKGVpLm1hdGNoKGhpKSl7aWYobnVsbD09b2kmJm51bGw9PShvaT1wbihnbixMbikp'@;
put 'KXJldHVybiIiO1huW1huLmxlbmd0aF09e3Q6IloiLHY6ZWkudG9Mb3dlckNhc2UoKX0sbW89ZWkuY2hhckF0KDEpfWVsc2UgZWkuaW5kZXhPZigiJCIpPi0xJiYoZWk9KGVpLm1hdGNoKC9cJChbXi1cW1xdXSopLyl8fFtdKVsxXXx8IiQiLHRhKEt0KXx8KFhuW1huLmxlbmd0aF09e3Q6InQi'@;
put 'LHY6ZWl9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1vaSl7Zm9yKGVpPXJpOysraXI8S3QubGVuZ3RoJiYiMCI9PT0ocmk9S3QuY2hhckF0KGlyKSk7KWVpKz1yaTtYbltYbi5sZW5ndGhdPXt0OiJzIix2OmVpfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKGVpPXJpOysraXI8S3QubGVu'@;
put 'Z3RoJiYiMCM/LixFKy0lIi5pbmRleE9mKHJpPUt0LmNoYXJBdChpcikpPi0xOyllaSs9cmk7WG5bWG4ubGVuZ3RoXT17dDoibiIsdjplaX07YnJlYWs7Y2FzZSI/Ijpmb3IoZWk9cmk7S3QuY2hhckF0KCsraXIpPT09cmk7KWVpKz1yaTtYbltYbi5sZW5ndGhdPXt0OnJpLHY6ZWl9LG1vPXJp'@;
put 'O2JyZWFrO2Nhc2UiKiI6KytpciwoIiAiPT1LdC5jaGFyQXQoaXIpfHwiKiI9PUt0LmNoYXJBdChpcikpJiYrK2lyO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpYbltYbi5sZW5ndGhdPXt0OjE9PT1Xcj8idCI6cmksdjpyaX0sKytpcjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNl'@;
put 'IjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoZWk9cmk7aXI8S3QubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihLdC5jaGFyQXQoKytpcikpPi0xOyllaSs9S3QuY2hhckF0KGlyKTtYbltYbi5sZW5ndGhdPXt0OiJEIix2OmVpfTticmVhaztjYXNl'@;
put 'IiAiOlhuW1huLmxlbmd0aF09e3Q6cmksdjpyaX0sKytpcjticmVhaztjYXNlIiQiOlhuW1huLmxlbmd0aF09e3Q6InQiLHY6QnJ9LCsraXI7YnJlYWs7Y2FzZSIvIjpYbltYbi5sZW5ndGhdPVhuLmxlbmd0aD4wJiZ0YShYbltYbi5sZW5ndGgtMV0udik/e3Q6InQiLHY6QW59Ont0OiJ0Iix2'@;
put 'OiIvIn0sKytpcjticmVhaztkZWZhdWx0OmlmKC0xPT09IiwkLSsvKCk6IV4mJ357fTw+PVx1MjBhY2FjZmlqa2xvcHFydHV2d3h6UCIuaW5kZXhPZihyaSkpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrcmkrIiBpbiAiK0t0KTtYbltYbi5sZW5ndGhdPXt0OiJ0'@;
put 'Iix2OnJpfSwrK2lyfXZhciBvcCxoYT0wLHlmPTA7Zm9yKGlyPVhuLmxlbmd0aC0xLG1vPSJ0Ijtpcj49MDstLWlyKXN3aXRjaChYbltpcl0udCl7Y2FzZSJoIjpjYXNlIkgiOlhuW2lyXS50PXdzLG1vPSJoIixoYTwxJiYoaGE9MSk7YnJlYWs7Y2FzZSJzIjoob3A9WG5baXJdLnYubWF0Y2go'@;
put 'L1wuMCskLykpJiYoeWY9TWF0aC5tYXgoeWYsb3BbMF0ubGVuZ3RoLTEpKSxoYTwzJiYoaGE9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjptbz1Ybltpcl0udDticmVhaztjYXNlIm0iOiJzIj09PW1vJiYoWG5baXJdLnQ9Ik0iLGhhPDImJihoYT0yKSk7YnJlYWs7Y2FzZSJY'@;
put 'IjpicmVhaztjYXNlIloiOmhhPDEmJlhuW2lyXS52Lm1hdGNoKC9bSGhdLykmJihoYT0xKSxoYTwyJiZYbltpcl0udi5tYXRjaCgvW01tXS8pJiYoaGE9MiksaGE8MyYmWG5baXJdLnYubWF0Y2goL1tTc10vKSYmKGhhPTMpfXN3aXRjaChoYSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvaS51Pj0u'@;
put 'NSYmKG9pLnU9MCwrK29pLlMpLG9pLlM+PTYwJiYob2kuUz0wLCsrb2kuTSksb2kuTT49NjAmJihvaS5NPTAsKytvaS5IKTticmVhaztjYXNlIDI6b2kudT49LjUmJihvaS51PTAsKytvaS5TKSxvaS5TPj02MCYmKG9pLlM9MCwrK29pLk0pfXZhciBfbixybj0iIjtmb3IoaXI9MDtpcjxYbi5s'@;
put 'ZW5ndGg7Kytpcilzd2l0Y2goWG5baXJdLnQpe2Nhc2UidCI6Y2FzZSJUIjpjYXNlIiAiOmNhc2UiRCI6YnJlYWs7Y2FzZSJYIjpYbltpcl0udj0iIixYbltpcl0udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNl'@;
put 'ImUiOmNhc2UiYiI6Y2FzZSJaIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjpYbltpcl0udj1ZbyhYbltpcl0udC5jaGFyQ29kZUF0KDApLFhuW2lyXS52LG9pLHlmKSxYbltpcl0udD0idCI7YnJl'@;
put 'YWs7Y2FzZSJuIjpjYXNlIj8iOmZvcihfbj1pcisxO251bGwhPVhuW19uXSYmKCI/Ij09PShyaT1Ybltfbl0udCl8fCJEIj09PXJpfHwoIiAiPT09cml8fCJ0Ij09PXJpKSYmbnVsbCE9WG5bX24rMV0mJigiPyI9PT1YbltfbisxXS50fHwidCI9PT1YbltfbisxXS50JiYiLyI9PT1Ybltfbisx'@;
put 'XS52KXx8IigiPT09WG5baXJdLnQmJigiICI9PT1yaXx8Im4iPT09cml8fCIpIj09PXJpKXx8InQiPT09cmkmJigiLyI9PT1Ybltfbl0udnx8IiAiPT09WG5bX25dLnYmJm51bGwhPVhuW19uKzFdJiYiPyI9PVhuW19uKzFdLnQpKTspWG5baXJdLnYrPVhuW19uXS52LFhuW19uXT17djoiIix0'@;
put 'OiI7In0sKytfbjtybis9WG5baXJdLnYsaXI9X24tMTticmVhaztjYXNlIkciOlhuW2lyXS50PSJ0IixYbltpcl0udj1qaShnbixMbil9dmFyIFZ0LFd0LGFuPSIiO2lmKHJuLmxlbmd0aD4wKXs0MD09cm4uY2hhckNvZGVBdCgwKT8oVnQ9Z248MCYmNDU9PT1ybi5jaGFyQ29kZUF0KDApPy1n'@;
put 'bjpnbixXdD1BbygibiIscm4sVnQpKTooV3Q9QW8oIm4iLHJuLFZ0PWduPDAmJldyPjE/LWduOmduKSxWdDwwJiZYblswXSYmInQiPT1YblswXS50JiYoV3Q9V3Quc3Vic3RyKDEpLFhuWzBdLnY9Ii0iK1huWzBdLnYpKSxfbj0oV3Q9V3QucmVwbGFjZSgvWyxcLl0vZyxmdW5jdGlvbihicil7'@;
put 'cmV0dXJuIi4iPT1icj91cjpRcn0pKS5sZW5ndGgtMTt2YXIgZG49WG4ubGVuZ3RoO2Zvcihpcj0wO2lyPFhuLmxlbmd0aDsrK2lyKWlmKG51bGwhPVhuW2lyXSYmInQiIT1Ybltpcl0udCYmWG5baXJdLnYuaW5kZXhPZigiLiIpPi0xKXtkbj1pcjticmVha312YXIgVG49WG4ubGVuZ3RoO2lm'@;
put 'KGRuPT09WG4ubGVuZ3RoJiYtMT09PVd0LmluZGV4T2YoIkUiKSl7Zm9yKGlyPVhuLmxlbmd0aC0xO2lyPj0wOy0taXIpbnVsbD09WG5baXJdfHwtMT09PSJuPyIuaW5kZXhPZihYbltpcl0udCl8fChfbj49WG5baXJdLnYubGVuZ3RoLTE/WG5baXJdLnY9V3Quc3Vic3RyKDErKF9uLT1Ybltp'@;
put 'cl0udi5sZW5ndGgpLFhuW2lyXS52Lmxlbmd0aCk6X248MD9Ybltpcl0udj0iIjooWG5baXJdLnY9V3Quc3Vic3RyKDAsX24rMSksX249LTEpLFhuW2lyXS50PSJ0IixUbj1pcik7X24+PTAmJlRuPFhuLmxlbmd0aCYmKFhuW1RuXS52PVd0LnN1YnN0cigwLF9uKzEpK1huW1RuXS52KX1lbHNl'@;
put 'IGlmKGRuIT09WG4ubGVuZ3RoJiYtMT09PVd0LmluZGV4T2YoIkUiKSl7Zm9yKF9uPVd0LmluZGV4T2YodXIpLTEsaXI9ZG47aXI+PTA7LS1pcilpZihudWxsIT1Ybltpcl0mJi0xIT09Im4/Ii5pbmRleE9mKFhuW2lyXS50KSl7Zm9yKHppPVhuW2lyXS52LmluZGV4T2YoIi4iKT4tMSYmaXI9'@;
put 'PT1kbj9Ybltpcl0udi5pbmRleE9mKCIuIiktMTpYbltpcl0udi5sZW5ndGgtMSxhbj1Ybltpcl0udi5zdWJzdHIoemkrMSk7emk+PTA7LS16aSlfbj49MCYmKCIwIj09PVhuW2lyXS52LmNoYXJBdCh6aSl8fCIjIj09PVhuW2lyXS52LmNoYXJBdCh6aSkpJiYoYW49V3QuY2hhckF0KF9uLS0p'@;
put 'K2FuKTtYbltpcl0udj1hbixYbltpcl0udD0idCIsVG49aXJ9Zm9yKF9uPj0wJiZUbjxYbi5sZW5ndGgmJihYbltUbl0udj1XdC5zdWJzdHIoMCxfbisxKStYbltUbl0udiksX249V3QuaW5kZXhPZih1cikrMSxpcj1kbjtpcjxYbi5sZW5ndGg7KytpcilpZihudWxsIT1Ybltpcl0mJigtMSE9'@;
put 'PSJuPygiLmluZGV4T2YoWG5baXJdLnQpfHxpcj09PWRuKSl7Zm9yKHppPVhuW2lyXS52LmluZGV4T2YodXIpPi0xJiZpcj09PWRuP1huW2lyXS52LmluZGV4T2YodXIpKzE6MCxhbj1Ybltpcl0udi5zdWJzdHIoMCx6aSk7emk8WG5baXJdLnYubGVuZ3RoOysremkpX248V3QubGVuZ3RoJiYo'@;
put 'YW4rPVd0LmNoYXJBdChfbisrKSk7WG5baXJdLnY9YW4sWG5baXJdLnQ9InQiLFRuPWlyfX19Zm9yKGlyPTA7aXI8WG4ubGVuZ3RoOysraXIpbnVsbCE9WG5baXJdJiYibj8iLmluZGV4T2YoWG5baXJdLnQpPi0xJiYoWG5baXJdLnY9QW8oWG5baXJdLnQsWG5baXJdLnYsVnQ9V3I+MSYmZ248'@;
put 'MCYmaXI+MCYmIi0iPT09WG5baXItMV0udj8tZ246Z24pLnJlcGxhY2UoL1wuL2csdXIpLnJlcGxhY2UoLywvLFFyKSxYbltpcl0udD0idCIpO3ZhciBucj0iIjtmb3IoaXI9MDtpciE9PVhuLmxlbmd0aDsrK2lyKW51bGwhPVhuW2lyXSYmKG5yKz1Ybltpcl0udik7cmV0dXJuIG5yfVAuaXNf'@;
put 'ZGF0ZT10YSxQLl9ldmFsPU1uO3ZhciB5cz0vXFtbPTw+XS8sRWw9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIHNsKEt0LGduKXtpZihudWxsPT1nbilyZXR1cm4hMTt2YXIgTG49cGFyc2VGbG9hdChnblsyXSk7c3dpdGNoKGduWzFdKXtjYXNlIj0i'@;
put 'OmlmKEt0PT1MbilyZXR1cm4hMDticmVhaztjYXNlIj4iOmlmKEt0PkxuKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYoS3Q8TG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYoS3QhPUxuKXJldHVybiEwO2JyZWFrO2Nhc2UiPj0iOmlmKEt0Pj1MbilyZXR1cm4hMDticmVhaztjYXNlIjw9'@;
put 'IjppZihLdDw9TG4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbnUoS3QsZ24sTG4pe251bGw9PUxuJiYoTG49e30pO3ZhciBXcj0iIjtzd2l0Y2godHlwZW9mIEt0KXtjYXNlInN0cmluZyI6V3I9Im0vZC95eSI9PUt0JiZMbi5kYXRlTkY/TG4uZGF0ZU5GOkt0O2JyZWFrO2Nhc2UibnVt'@;
put 'YmVyIjpudWxsPT0oV3I9MTQ9PUt0JiZMbi5kYXRlTkY/TG4uZGF0ZU5GOihudWxsIT1Mbi50YWJsZT9Mbi50YWJsZTpidClbS3RdKSYmKFdyPUxuLnRhYmxlJiZMbi50YWJsZVtGdFtLdF1dfHxidFtGdFtLdF1dKSxudWxsPT1XciYmKFdyPVR0W0t0XXx8IkdlbmVyYWwiKX1pZihHZShXciww'@;
put 'KSlyZXR1cm4gamkoZ24sTG4pO2duIGluc3RhbmNlb2YgRGF0ZSYmKGduPXpuKGduLExuLmRhdGUxOTA0KSk7dmFyIFhuPWZ1bmN0aW9uIGdsKEt0LGduKXt2YXIgTG49eG8oS3QpLFdyPUxuLmxlbmd0aCxYbj1MbltXci0xXS5pbmRleE9mKCJAIik7aWYoV3I8NCYmWG4+LTEmJi0tV3IsTG4u'@;
put 'bGVuZ3RoPjQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHwiK0xuLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgZ24pcmV0dXJuWzQsND09PUxuLmxlbmd0aHx8WG4+LTE/TG5bTG4ubGVuZ3RoLTFdOiJAIl07c3dpdGNoKExuLmxlbmd0'@;
put 'aCl7Y2FzZSAxOkxuPVhuPi0xP1siR2VuZXJhbCIsIkdlbmVyYWwiLCJHZW5lcmFsIixMblswXV06W0xuWzBdLExuWzBdLExuWzBdLCJAIl07YnJlYWs7Y2FzZSAyOkxuPVhuPi0xP1tMblswXSxMblswXSxMblswXSxMblsxXV06W0xuWzBdLExuWzFdLExuWzBdLCJAIl07YnJlYWs7Y2FzZSAz'@;
put 'OkxuPVhuPi0xP1tMblswXSxMblsxXSxMblswXSxMblsyXV06W0xuWzBdLExuWzFdLExuWzJdLCJAIl19dmFyIGVpPWduPjA/TG5bMF06Z248MD9MblsxXTpMblsyXTtpZigtMT09PUxuWzBdLmluZGV4T2YoIlsiKSYmLTE9PT1MblsxXS5pbmRleE9mKCJbIikpcmV0dXJuW1dyLGVpXTtpZihu'@;
put 'dWxsIT1MblswXS5tYXRjaCh5cyl8fG51bGwhPUxuWzFdLm1hdGNoKHlzKSl7dmFyIGlyPUxuWzBdLm1hdGNoKEVsKSxyaT1MblsxXS5tYXRjaChFbCk7cmV0dXJuIHNsKGduLGlyKT9bV3IsTG5bMF1dOnNsKGduLHJpKT9bV3IsTG5bMV1dOltXcixMbltudWxsIT1pciYmbnVsbCE9cmk/Mjox'@;
put 'XV19cmV0dXJuW1dyLGVpXX0oV3IsZ24pO2lmKEdlKFhuWzFdKSlyZXR1cm4gamkoZ24sTG4pO2lmKCEwPT09Z24pZ249IlRSVUUiO2Vsc2UgaWYoITE9PT1nbilnbj0iRkFMU0UiO2Vsc2UgaWYoIiI9PT1nbnx8bnVsbD09Z24pcmV0dXJuIiI7cmV0dXJuIE1uKFhuWzFdLGduLExuLFhuWzBd'@;
put 'KX1mdW5jdGlvbiB0bChLdCxnbil7aWYoIm51bWJlciIhPXR5cGVvZiBnbil7Z249K2dufHwtMTtmb3IodmFyIExuPTA7TG48MzkyOysrTG4paWYobnVsbCE9YnRbTG5dKXtpZihidFtMbl09PUt0KXtnbj1MbjticmVha319ZWxzZSBnbjwwJiYoZ249TG4pO2duPDAmJihnbj0zOTEpfXJldHVy'@;
put 'biBidFtnbl09S3QsZ259UC5sb2FkPXRsLFAuX3RhYmxlPWJ0LFAuZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSxQLmxvYWRfdGFibGU9ZnVuY3Rpb24oZ24pe2Zvcih2YXIgTG49MDszOTIhPUxuOysrTG4pdm9pZCAwIT09Z25bTG5dJiZ0bChnbltMbl0sTG4pfSxQLmluaXRfdGFi'@;
put 'bGU9Y3QsUC5mb3JtYXQ9bnUsUC5nZXRsb2NhbGU9ZnVuY3Rpb24gdnIoKXtyZXR1cm4ga258fCJlbi1VUyJ9LFAuc2V0bG9jYWxlPWZ1bmN0aW9uIHJyKEt0KXtpZihmdW5jdGlvbiBtcihLdCl7dmFyIGduPTA7c3dpdGNoKChrbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNh'@;
put 'c2UiemgtY24iOmNhc2UiamEtanAiOmNhc2Uia28ta3IiOmZvcihnbj0yNztnbjw9MzY7KytnbilkZWxldGUgS3RbZ25dO2Zvcihnbj01MDtnbjw9NTg7KytnbilkZWxldGUgS3RbZ25dO2JyZWFrO2Nhc2UidGgtdGgiOmZvcihnbj01OTtnbjw9NjI7KytnbilkZWxldGUgS3RbZ25dO2Zvcihn'@;
put 'bj02Nztnbjw9ODE7KytnbilkZWxldGUgS3RbZ25dfX0oYnQpLGtuPUt0LFNuKGJ0KSx0eXBlb2YgSW50bDwidSIpe3ZhciBnbj1JbnRsLkRhdGVUaW1lRm9ybWF0KEt0KTtpZihnbi5mb3JtYXRUb1BhcnRzKXtmb3IodmFyIExuPWduLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUs'@;
put 'MCwwLDApKSxXcj0wO1dyPDc7KytXcilkdFtXcl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7d2Vla2RheToibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K1dyLDAsMCwwKSlbMF0udmFsdWUsZHRbV3JdWzBdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse3dlZWtk'@;
put 'YXk6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUrV3IsMCwwLDApKVswXS52YWx1ZTtmb3IodmFyIFhuPTA7WG48MTI7KytYbilDdFtYbl1bMl09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7bW9udGg6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIw'@;
put 'LFhuLDIsMCwwLDApKVswXS52YWx1ZSxDdFtYbl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7bW9udGg6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxYbiwyLDAsMCwwKSlbMF0udmFsdWUsQ3RbWG5dWzBdPUN0W1huXVsxXS5zbGljZSgwLDEpO2Zvcih2YXIgZWk9'@;
put 'IiIsaXI9MDtpcjxMbi5sZW5ndGg7Kytpcil7dmFyIHJpPUxuW2lyXS52YWx1ZTtzd2l0Y2goTG5baXJdLnR5cGUpe2Nhc2UieWVhciI6ZWkrPTI9PXJpLmxlbmd0aD8ieXkiOiJ5eXl5IjticmVhaztjYXNlIm1vbnRoIjplaSs9IjEiPT1yaT8ibSI6IjAxIj09cmk/Im1tIjpyaT09Q3RbMF1b'@;
put 'MV0/Im1tbSI6cmk9PUN0WzBdWzJdPyJtbW1tIjpyaT09Q3RbMF1bMF0/Im1tbW1tIjoibW0iO2JyZWFrO2Nhc2UiZGF5IjplaSs9IjUiPT1yaT8iZCI6IjA1Ij09cmk/ImRkIjpyaT09ZHRbMF1bMF0/ImRkZCI6cmk9PWR0WzBdWzFdPyJkZGRkIjoiZGQiO2JyZWFrO2Nhc2UibGl0ZXJhbCI6'@;
put 'ZWkrPXJpLnJlcGxhY2UoLy4vZywiXFwkJiIpLDE9PXJpLmxlbmd0aCYmKEFuPXJpKX19KEt0Lm1hdGNoKC9lbi9pKSYmS3QubWF0Y2goL3VzL2kpfHwhS3QpJiYoZWk9Im0vZC95eSIpLGJ0WzE0XT1laX1lbHNlImphLWpwIj09S3QudG9Mb3dlckNhc2UoKSYmKGJ0WzE0XT0ieXl5eVxcL21c'@;
put 'XC9kIik7dmFyIG1vPUludGwuTnVtYmVyRm9ybWF0KEt0LHt9KS5mb3JtYXQoMTIzNDU2Ny44OSk7bW8mJihRcj0obW8ubWF0Y2goLzEoLiopMi8pfHxbXSlbMV0sdXI9KG1vLm1hdGNoKC83KC4qKTgvKXx8W10pWzFdKX1lcltLdC50b0xvd2VyQ2FzZSgpXXx8KGVyW0t0LnRvTG93ZXJDYXNl'@;
put 'KCldPXsiLiI6dXIsIiwiOlFyfSksWm49bnQodHI9ZXJbS3QudG9Mb3dlckNhc2UoKV18fGVyWyJlbi11cyJdKX0sUC5ub3JtYWxpemU9ZnVuY3Rpb24gTXMoS3Qpe2Zvcih2YXIgZ249MCxMbj0wLFdyPSIiLFhuPSIiLGVpPSIiLGlyPXRyLnl8fCJ5IixyaT1pci50b1VwcGVyQ2FzZSgpLG1v'@;
put 'PXRyLmR8fCJkIixvaT1tby50b1VwcGVyQ2FzZSgpLHppPXRyWyIuIl0sSnI9dHJbIiwiXSx3cz0iMCM/RSstJSIrdHJbIiwiXSt6aTtnbjxLdC5sZW5ndGg7KXN3aXRjaChXcj1LdC5jaGFyQXQoZ24pKXtjYXNlIkciOmduKyssZWkrPVdyO2JyZWFrO2Nhc2UnIic6Zm9yKGVpKz1XcjszNCE9'@;
put 'PShMbj1LdC5jaGFyQ29kZUF0KCsrZ24pKSYmZ248S3QubGVuZ3RoOyllaSs9U3RyaW5nLmZyb21DaGFyQ29kZShMbik7ZWkrPSciJywrK2duO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6ZWkrPUt0LnNsaWNlKGduLGduKzIpLGduKz0yO2JyZWFrO2Nhc2UiQCI6ZWkrPVdyLCsrZ247YnJlYWs7'@;
put 'Y2FzZSJCIjpjYXNlImIiOisrZ24sZWkrPVdyO2JyZWFrO2Nhc2UgaXI6Y2FzZSByaTpjYXNlIG1vOmNhc2Ugb2k6ZWkrPVpuW1dyLnRvTG93ZXJDYXNlKCldLCsrZ247YnJlYWs7Y2FzZSJNIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUi'@;
put 'OmNhc2UiZyI6Y2FzZSJBIjpjYXNlImEiOmVpKz1XciwrK2duO2JyZWFrO2Nhc2UiWyI6Zm9yKFhuPVdyOyJdIiE9PUt0LmNoYXJBdChnbisrKSYmZ248S3QubGVuZ3RoOylYbis9S3QuY2hhckF0KGduKTtlaSs9WG47YnJlYWs7Y2FzZSBKcjplaSs9JyInK1dyKyciJywrK2duO2JyZWFrO2Nh'@;
put 'c2Ugemk6aWYoIShnbjxLdC5sZW5ndGgmJih3cy5pbmRleE9mKFdyPUt0LmNoYXJBdCgrK2duKSk+LTF8fCJcXCI9PVdyJiYiLSI9PUt0LmNoYXJBdChnbisxKSYmIjAjIi5pbmRleE9mKEt0LmNoYXJBdChnbisyKSk+LTEpKSl7ZWkrPSciJyt6aSsnIic7YnJlYWt9V3I9emksLS1nbjtjYXNl'@;
put 'IjAiOmNhc2UiIyI6Zm9yKGVpKz1abltXci50b0xvd2VyQ2FzZSgpXXx8V3I7Z248S3QubGVuZ3RoJiYod3MuaW5kZXhPZihXcj1LdC5jaGFyQXQoKytnbikpPi0xfHwiXFwiPT1XciYmIi0iPT1LdC5jaGFyQXQoZ24rMSkmJiIwIyIuaW5kZXhPZihLdC5jaGFyQXQoZ24rMikpPi0xKTspZWkr'@;
put 'PVpuW1dyLnRvTG93ZXJDYXNlKCldfHxXcjticmVhaztjYXNlIj8iOmZvcihlaSs9V3I7S3QuY2hhckF0KCsrZ24pPT09V3I7KWVpKz1XcjticmVhaztjYXNlIioiOmVpKz1XciwrK2duLCgiICI9PUt0LmNoYXJBdChnbil8fCIqIj09S3QuY2hhckF0KGduKSkmJihlaSs9S3QuY2hhckF0KGdu'@;
put 'KSwrK2duKTticmVhaztjYXNlIigiOmNhc2UiKSI6ZWkrPVdyLCsrZ247YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKGVpKz1XcjtnbjxLdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9m'@;
put 'KEt0LmNoYXJBdCgrK2duKSk+LTE7KWVpKz1LdC5jaGFyQXQoZ24pO2JyZWFrO2RlZmF1bHQ6ZWkrPVdyLCsrZ259cmV0dXJuIGVpfSxQLmdldGN1cnJlbmN5PWZ1bmN0aW9uIHhpKCl7cmV0dXJuIHNpfHwiVVNEIn0sUC5zZXRjdXJyZW5jeT1mdW5jdGlvbiBMaShLdCl7c2k9S3QsQnI9dHlw'@;
put 'ZW9mIEludGw8InUiP0ludGwuTnVtYmVyRm9ybWF0KGtuLHtzdHlsZToiY3VycmVuY3kiLGN1cnJlbmN5RGlzcGxheToic3ltYm9sIixjdXJyZW5jeTpLdH0pLmZvcm1hdCgwKS5yZXBsYWNlKC9bMFwuXCxcc10vZywiIik6IiQifX07Sih3KTt2YXIgT2UsbmU9eyJHZW5lcmFsIE51bWJlciI6'@;
put 'IkdlbmVyYWwiLCJHZW5lcmFsIERhdGUiOncuX3RhYmxlWzIyXSwiTG9uZyBEYXRlIjoiZGRkZCwgbW1tbSBkZCwgeXl5eSIsIk1lZGl1bSBEYXRlIjp3Ll90YWJsZVsxNV0sIlNob3J0IERhdGUiOncuX3RhYmxlWzE0XSwiTG9uZyBUaW1lIjp3Ll90YWJsZVsxOV0sIk1lZGl1bSBUaW1lIjp3'@;
put 'Ll90YWJsZVsxOF0sIlNob3J0IFRpbWUiOncuX3RhYmxlWzIwXSxDdXJyZW5jeTonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxGaXhlZDp3Ll90YWJsZVsyXSxTdGFuZGFyZDp3Ll90YWJsZVs0XSxQZXJjZW50OncuX3RhYmxlWzEwXSxTY2llbnRpZmljOncuX3RhYmxl'@;
put 'WzExXSwiWWVzL05vIjonIlllcyI7IlllcyI7Ik5vIjtAJywiVHJ1ZS9GYWxzZSI6JyJUcnVlIjsiVHJ1ZSI7IkZhbHNlIjtAJywiT24vT2ZmIjonIlllcyI7IlllcyI7Ik5vIjtAJ30sZGU9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIj'@;
put 'LCMjMFxcKScsNzonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6'@;
put 'Im0vZC95eSIsMzA6Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIk'@;
put 'IiogKCMsIyMwKTtfKCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9k'@;
put 'L3l5Iiw1MjoibS9kL3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6'@;
put 'JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5'@;
put 'Iiw3MjoibS9kL3l5Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LGZlPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10r'@;
put 'L2c7IWZ1bmN0aW9uKHkpe3kudmVyc2lvbj0iMS4yLjAiO3ZhciBMPWZ1bmN0aW9uIFAoKXtmb3IodmFyIHZlPTAsU2U9bmV3IEFycmF5KDI1NiksSGU9MDsyNTYhPUhlOysrSGUpU2VbSGVdPXZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPUhlKT8t'@;
put 'MzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEy'@;
put 'XnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MTtyZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KFNlKTpTZX0oKTt5LnRhYmxlPUwseS5ic3RyPWZ1bmN0aW9uIFEodmUsU2Upe2Zvcih2YXIgSGU9LTFeU2UsQmU9dmUubGVuZ3RoLTEsR2U9'@;
put 'MDtHZTxCZTspSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVedmUuY2hhckNvZGVBdChHZSsrKSldKT4+PjheTFsyNTUmKEhlXnZlLmNoYXJDb2RlQXQoR2UrKykpXTtyZXR1cm4gR2U9PT1CZSYmKEhlPUhlPj4+OF5MWzI1NSYoSGVedmUuY2hhckNvZGVBdChHZSkpXSksLTFeSGV9LHkuYnVmPWZ1'@;
put 'bmN0aW9uIHJlKHZlLFNlKXtpZih2ZS5sZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBnZSh2ZSxTZSl7Zm9yKHZhciBIZT0tMV5TZSxCZT12ZS5sZW5ndGgtNyxHZT0wO0dlPEJlOylIZT0oSGU9KEhlPShIZT0oSGU9KEhlPShIZT0oSGU9SGU+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+'@;
put 'PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUm'@;
put 'KEhlXnZlW0dlKytdKV07Zm9yKDtHZTxCZSs3OylIZT1IZT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV07cmV0dXJuLTFeSGV9KHZlLFNlKTtmb3IodmFyIEhlPS0xXlNlLEJlPXZlLmxlbmd0aC0zLEdlPTA7R2U8QmU7KUhlPShIZT0oSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVedmVbR2UrK10p'@;
put 'XSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXTtmb3IoO0dlPEJlKzM7KUhlPUhlPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXTtyZXR1cm4tMV5IZX0seS5zdHI9ZnVuY3Rpb24gX2UodmUsU2Upe2Zv'@;
put 'cih2YXIgbnQsZHQsSGU9LTFeU2UsQmU9MCxHZT12ZS5sZW5ndGg7QmU8R2U7KShudD12ZS5jaGFyQ29kZUF0KEJlKyspKTwxMjg/SGU9SGU+Pj44XkxbMjU1JihIZV5udCldOm50PDIwNDg/SGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVeKDE5MnxudD4+NiYzMSkpXSk+Pj44XkxbMjU1JihIZV4o'@;
put 'MTI4fDYzJm50KSldOm50Pj01NTI5NiYmbnQ8NTczNDQ/KG50PTY0KygxMDIzJm50KSxkdD0xMDIzJnZlLmNoYXJDb2RlQXQoQmUrKyksSGU9KEhlPShIZT0oSGU9SGU+Pj44XkxbMjU1JihIZV4oMjQwfG50Pj44JjcpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHxudD4+MiY2MykpXSk+Pj44Xkxb'@;
put 'MjU1JihIZV4oMTI4fGR0Pj42JjE1fCgzJm50KTw8NCkpXSk+Pj44XkxbMjU1JihIZV4oMTI4fDYzJmR0KSldKTpIZT0oSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVeKDIyNHxudD4+MTImMTUpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHxudD4+NiY2MykpXSk+Pj44XkxbMjU1JihIZV4oMTI4fDYz'@;
put 'Jm50KSldO3JldHVybi0xXkhlfX0oT2U9e30pO3ZhciBXZSxqZT1mdW5jdGlvbigpe3ZhciBTZSxQPXt9O2Z1bmN0aW9uIFEocm4pe2lmKCIvIj09cm4uY2hhckF0KHJuLmxlbmd0aC0xKSlyZXR1cm4tMT09PXJuLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9ybjpRKHJuLnNsaWNlKDAsLTEp'@;
put 'KTt2YXIgX249cm4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PV9uP3JuOnJuLnNsaWNlKDAsX24rMSl9ZnVuY3Rpb24gcmUocm4pe2lmKCIvIj09cm4uY2hhckF0KHJuLmxlbmd0aC0xKSlyZXR1cm4gcmUocm4uc2xpY2UoMCwtMSkpO3ZhciBfbj1ybi5sYXN0SW5kZXhPZigiLyIpO3Jl'@;
put 'dHVybi0xPT09X24/cm46cm4uc2xpY2UoX24rMSl9ZnVuY3Rpb24gZ2Uocm4sX24peyJzdHJpbmciPT10eXBlb2YgX24mJihfbj1uZXcgRGF0ZShfbikpO3ZhciBhbj1fbi5nZXRIb3VycygpO2FuPShhbj1hbjw8Nnxfbi5nZXRNaW51dGVzKCkpPDw1fF9uLmdldFNlY29uZHMoKT4+PjEscm4u'@;
put 'd3JpdGVfc2hpZnQoMixhbik7dmFyIFZ0PV9uLmdldEZ1bGxZZWFyKCktMTk4MDtWdD0oVnQ9VnQ8PDR8X24uZ2V0TW9udGgoKSsxKTw8NXxfbi5nZXREYXRlKCkscm4ud3JpdGVfc2hpZnQoMixWdCl9ZnVuY3Rpb24gdmUocm4pe29sKHJuLDApO2Zvcih2YXIgX249e30sYW49MDtybi5sPD1y'@;
put 'bi5sZW5ndGgtNDspe3ZhciBWdD1ybi5yZWFkX3NoaWZ0KDIpLFd0PXJuLnJlYWRfc2hpZnQoMiksZG49cm4ubCtXdCxUbj17fTsyMTU4OT09PVZ0JiYoMSYoYW49cm4ucmVhZF9zaGlmdCgxKSkmJihUbi5tdGltZT1ybi5yZWFkX3NoaWZ0KDQpKSxXdD41JiYoMiZhbiYmKFRuLmF0aW1lPXJu'@;
put 'LnJlYWRfc2hpZnQoNCkpLDQmYW4mJihUbi5jdGltZT1ybi5yZWFkX3NoaWZ0KDQpKSksVG4ubXRpbWUmJihUbi5tdD1uZXcgRGF0ZSgxZTMqVG4ubXRpbWUpKSkscm4ubD1kbixfbltWdF09VG59cmV0dXJuIF9ufWZ1bmN0aW9uIEhlKCl7cmV0dXJuIFNlfHwoU2U9Rig3ODc3MykpfWZ1bmN0'@;
put 'aW9uIEJlKHJuLF9uKXtpZig4MD09cm5bMF0mJjc1PT1yblsxXSlyZXR1cm4gSnIocm4sX24pO2lmKHJuLmxlbmd0aDw1MTIpdGhyb3cgbmV3IEVycm9yKCJDRkIgZmlsZSBzaXplICIrcm4ubGVuZ3RoKyIgPCA1MTIiKTt2YXIgYW4sV3QsZG4sVG4sbnIsYnIsVnQ9NTEyLFpyPVtdLExyPXJu'@;
put 'LnNsaWNlKDAsNTEyKTtvbChMciwwKTt2YXIgTWk9ZnVuY3Rpb24gR2Uocm4pe2lmKDgwPT1ybltybi5sXSYmNzU9PXJuW3JuLmwrMV0pcmV0dXJuWzAsMF07cm4uY2hrKEJyLCJIZWFkZXIgU2lnbmF0dXJlOiAiKSxybi5sKz0xNjt2YXIgX249cm4ucmVhZF9zaGlmdCgyLCJ1Iik7cmV0dXJu'@;
put 'W3JuLnJlYWRfc2hpZnQoMiwidSIpLF9uXX0oTHIpO3N3aXRjaChhbj1NaVswXSl7Y2FzZSAzOlZ0PTUxMjticmVhaztjYXNlIDQ6VnQ9NDA5NjticmVhaztjYXNlIDA6aWYoMD09TWlbMV0pcmV0dXJuIEpyKHJuLF9uKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTWFqb3IgVmVyc2lvbjog'@;
put 'RXhwZWN0ZWQgMyBvciA0IHNhdyAiK2FuKX01MTIhPT1WdCYmb2woTHI9cm4uc2xpY2UoMCxWdCksMjgpO3ZhciBjaT1ybi5zbGljZSgwLFZ0KTshZnVuY3Rpb24gbnQocm4sX24pe3ZhciBhbjtzd2l0Y2gocm4ubCs9Mixhbj1ybi5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9X24pdGhy'@;
put 'b3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgc2F3ICIrYW4pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9X24pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDEyIHNhdyAiK2FuKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNo'@;
put 'aWZ0OiBFeHBlY3RlZCA5IG9yIDEyIHNhdyAiK2FuKX1ybi5jaGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIikscm4uY2hrKCIwMDAwMDAwMDAwMDAiLCJSZXNlcnZlZDogIil9KExyLGFuKTt2YXIgQ289THIucmVhZF9zaGlmdCg0LCJpIik7aWYoMz09PWFuJiYwIT09Q28pdGhyb3cg'@;
put 'bmV3IEVycm9yKCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK0NvKTtMci5sKz00LFRuPUxyLnJlYWRfc2hpZnQoNCwiaSIpLExyLmwrPTQsTHIuY2hrKCIwMDEwMDAwMCIsIk1pbmkgU3RyZWFtIEN1dG9mZiBTaXplOiAiKSxucj1Mci5yZWFkX3NoaWZ0KDQsImkiKSxX'@;
put 'dD1Mci5yZWFkX3NoaWZ0KDQsImkiKSxicj1Mci5yZWFkX3NoaWZ0KDQsImkiKSxkbj1Mci5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIHBvPS0xLFZpPTA7Vmk8MTA5JiYhKChwbz1Mci5yZWFkX3NoaWZ0KDQsImkiKSk8MCk7KytWaSlacltWaV09cG87dmFyIFVvPWZ1bmN0aW9uIGR0KHJu'@;
put 'LF9uKXtmb3IodmFyIGFuPU1hdGguY2VpbChybi5sZW5ndGgvX24pLTEsVnQ9W10sV3Q9MTtXdDxhbjsrK1d0KVZ0W1d0LTFdPXJuLnNsaWNlKFd0Kl9uLChXdCsxKSpfbik7cmV0dXJuIFZ0W2FuLTFdPXJuLnNsaWNlKGFuKl9uKSxWdH0ocm4sVnQpO2J0KGJyLGRuLFVvLFZ0LFpyKTt2YXIg'@;
put 'dGk9ZnVuY3Rpb24ga3Qocm4sX24sYW4sVnQpe3ZhciBXdD1ybi5sZW5ndGgsZG49W10sVG49W10sbnI9W10sYnI9W10sWnI9VnQtMSxMcj0wLE1pPTAsY2k9MCxDbz0wO2ZvcihMcj0wO0xyPFd0OysrTHIpaWYobnI9W10sKGNpPUxyK19uKT49V3QmJihjaS09V3QpLCFUbltjaV0pe2JyPVtd'@;
put 'O3ZhciBwbz1bXTtmb3IoTWk9Y2k7TWk+PTA7KXtwb1tNaV09ITAsVG5bTWldPSEwLG5yW25yLmxlbmd0aF09TWksYnIucHVzaChybltNaV0pO3ZhciBWaT1hbltNYXRoLmZsb29yKDQqTWkvVnQpXTtpZihWdDw0KyhDbz00Kk1pJlpyKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBj'@;
put 'cm9zc2VkOiAiK01pKyIgNCAiK1Z0KTtpZighcm5bVmldfHxwb1tNaT1vcyhybltWaV0sQ28pXSlicmVha31kbltjaV09e25vZGVzOm5yLGRhdGE6U2EoW2JyXSl9fXJldHVybiBkbn0oVW8sVG4sWnIsVnQpO3RpW1RuXS5uYW1lPSIhRGlyZWN0b3J5IixXdD4wJiZuciE9PVpuJiYodGlbbnJd'@;
put 'Lm5hbWU9IiFNaW5pRkFUIiksdGlbWnJbMF1dLm5hbWU9IiFGQVQiLHRpLmZhdF9hZGRycz1acix0aS5zc3o9VnQ7dmFyIGNjPVtdLE51PVtdLFY2PVtdOyhmdW5jdGlvbiBUdChybixfbixhbixWdCxXdCxkbixUbixucil7Zm9yKHZhciBDbyxicj0wLFpyPVZ0Lmxlbmd0aD8yOjAsTHI9X25b'@;
put 'cm5dLmRhdGEsTWk9MCxjaT0wO01pPExyLmxlbmd0aDtNaSs9MTI4KXt2YXIgcG89THIuc2xpY2UoTWksTWkrMTI4KTtvbChwbyw2NCksY2k9cG8ucmVhZF9zaGlmdCgyKSxDbz1FdShwbywwLGNpLVpyKSxWdC5wdXNoKENvKTt2YXIgVmk9e25hbWU6Q28sdHlwZTpwby5yZWFkX3NoaWZ0KDEp'@;
put 'LGNvbG9yOnBvLnJlYWRfc2hpZnQoMSksTDpwby5yZWFkX3NoaWZ0KDQsImkiKSxSOnBvLnJlYWRfc2hpZnQoNCwiaSIpLEM6cG8ucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6cG8ucmVhZF9zaGlmdCgxNiksc3RhdGU6cG8ucmVhZF9zaGlmdCg0LCJpIiksc3RhcnQ6MCxzaXplOjB9OzAhPT1w'@;
put 'by5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpJiYoVmkuY3Q9WnQocG8scG8ubC04KSksMCE9PXBvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikmJihW'@;
put 'aS5tdD1adChwbyxwby5sLTgpKSxWaS5zdGFydD1wby5yZWFkX3NoaWZ0KDQsImkiKSxWaS5zaXplPXBvLnJlYWRfc2hpZnQoNCwiaSIpLFZpLnNpemU8MCYmVmkuc3RhcnQ8MCYmKFZpLnNpemU9VmkudHlwZT0wLFZpLnN0YXJ0PVpuLFZpLm5hbWU9IiIpLDU9PT1WaS50eXBlPyhicj1WaS5z'@;
put 'dGFydCxXdD4wJiZiciE9PVpuJiYoX25bYnJdLm5hbWU9IiFTdHJlYW1EYXRhIikpOlZpLnNpemU+PTQwOTY/KFZpLnN0b3JhZ2U9ImZhdCIsdm9pZCAwPT09X25bVmkuc3RhcnRdJiYoX25bVmkuc3RhcnRdPUZ0KGFuLFZpLnN0YXJ0LF9uLmZhdF9hZGRycyxfbi5zc3opKSxfbltWaS5zdGFy'@;
put 'dF0ubmFtZT1WaS5uYW1lLFZpLmNvbnRlbnQ9X25bVmkuc3RhcnRdLmRhdGEuc2xpY2UoMCxWaS5zaXplKSk6KFZpLnN0b3JhZ2U9Im1pbmlmYXQiLFZpLnNpemU8MD9WaS5zaXplPTA6YnIhPT1abiYmVmkuc3RhcnQhPT1abiYmX25bYnJdJiYoVmkuY29udGVudD1jdChWaSxfblticl0uZGF0'@;
put 'YSwoX25bbnJdfHx7fSkuZGF0YSkpKSxWaS5jb250ZW50JiZvbChWaS5jb250ZW50LDApLGRuW0NvXT1WaSxUbi5wdXNoKFZpKX19KShUbix0aSxVbyxjYyxXdCx7fSxOdSxuciksZnVuY3Rpb24gQ3Qocm4sX24sYW4pe2Zvcih2YXIgVnQ9MCxXdD0wLGRuPTAsVG49MCxucj0wLGJyPWFuLmxl'@;
put 'bmd0aCxacj1bXSxMcj1bXTtWdDxicjsrK1Z0KVpyW1Z0XT1McltWdF09VnQsX25bVnRdPWFuW1Z0XTtmb3IoO25yPExyLmxlbmd0aDsrK25yKVd0PXJuW1Z0PUxyW25yXV0uTCxkbj1ybltWdF0uUixUbj1ybltWdF0uQyxacltWdF09PT1WdCYmKC0xIT09V3QmJlpyW1d0XSE9PVd0JiYoWnJb'@;
put 'VnRdPVpyW1d0XSksLTEhPT1kbiYmWnJbZG5dIT09ZG4mJihacltWdF09WnJbZG5dKSksLTEhPT1UbiYmKFpyW1RuXT1WdCksLTEhPT1XdCYmVnQhPVpyW1Z0XSYmKFpyW1d0XT1acltWdF0sTHIubGFzdEluZGV4T2YoV3QpPG5yJiZMci5wdXNoKFd0KSksLTEhPT1kbiYmVnQhPVpyW1Z0XSYm'@;
put 'KFpyW2RuXT1acltWdF0sTHIubGFzdEluZGV4T2YoZG4pPG5yJiZMci5wdXNoKGRuKSk7Zm9yKFZ0PTE7VnQ8YnI7KytWdClacltWdF09PT1WdCYmKC0xIT09ZG4mJlpyW2RuXSE9PWRuP1pyW1Z0XT1acltkbl06LTEhPT1XdCYmWnJbV3RdIT09V3QmJihacltWdF09WnJbV3RdKSk7Zm9yKFZ0'@;
put 'PTE7VnQ8YnI7KytWdClpZigwIT09cm5bVnRdLnR5cGUpe2lmKChucj1WdCkhPVpyW25yXSlkb3tfbltWdF09X25bbnI9WnJbbnJdXSsiLyIrX25bVnRdfXdoaWxlKDAhPT1uciYmLTEhPT1acltucl0mJm5yIT1acltucl0pO1pyW1Z0XT0tMX1mb3IoX25bMF0rPSIvIixWdD0xO1Z0PGJyOysr'@;
put 'VnQpMiE9PXJuW1Z0XS50eXBlJiYoX25bVnRdKz0iLyIpfShOdSxWNixjYyksY2Muc2hpZnQoKTt2YXIgd2Y9e0ZpbGVJbmRleDpOdSxGdWxsUGF0aHM6VjZ9O3JldHVybiBfbiYmX24ucmF3JiYod2YucmF3PXtoZWFkZXI6Y2ksc2VjdG9yczpVb30pLHdmfWZ1bmN0aW9uIGN0KHJuLF9uLGFu'@;
put 'KXtmb3IodmFyIFd0PXJuLnNpemUsZG49W10sVG49cm4uc3RhcnQ7YW4mJld0PjAmJlRuPj0wOylkbi5wdXNoKF9uLnNsaWNlKFRuKnRyLFRuKnRyK3RyKSksV3QtPXRyLFRuPW9zKGFuLDQqVG4pO3JldHVybiAwPT09ZG4ubGVuZ3RoP3ByKDApOlMoZG4pLnNsaWNlKDAscm4uc2l6ZSl9ZnVu'@;
put 'Y3Rpb24gYnQocm4sX24sYW4sVnQsV3Qpe3ZhciBkbj1abjtpZihybj09PVpuKXtpZigwIT09X24pdGhyb3cgbmV3IEVycm9yKCJESUZBVCBjaGFpbiBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQiKX1lbHNlIGlmKC0xIT09cm4pe3ZhciBUbj1hbltybl0sbnI9KFZ0Pj4+MiktMTtpZighVG4pcmV0'@;
put 'dXJuO2Zvcih2YXIgYnI9MDticjxuciYmKGRuPW9zKFRuLDQqYnIpKSE9PVpuOysrYnIpV3QucHVzaChkbik7YnQob3MoVG4sVnQtNCksX24tMSxhbixWdCxXdCl9fWZ1bmN0aW9uIEZ0KHJuLF9uLGFuLFZ0LFd0KXt2YXIgZG49W10sVG49W107V3R8fChXdD1bXSk7dmFyIG5yPVZ0LTEsYnI9'@;
put 'MCxacj0wO2Zvcihicj1fbjticj49MDspe1d0W2JyXT0hMCxkbltkbi5sZW5ndGhdPWJyLFRuLnB1c2gocm5bYnJdKTt2YXIgTHI9YW5bTWF0aC5mbG9vcig0KmJyL1Z0KV07aWYoVnQ8NCsoWnI9NCpiciZucikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIiticisi'@;
put 'IDQgIitWdCk7aWYoIXJuW0xyXSlicmVhazticj1vcyhybltMcl0sWnIpfXJldHVybntub2RlczpkbixkYXRhOlNhKFtUbl0pfX1mdW5jdGlvbiBadChybixfbil7cmV0dXJuIG5ldyBEYXRlKDFlMyooYmkocm4sX24rNCkvMWU3Kk1hdGgucG93KDIsMzIpK2JpKHJuLF9uKS8xZTctMTE2NDQ0'@;
put 'NzM2MDApKX1mdW5jdGlvbiB1bihybixfbil7dmFyIGFuPV9ufHx7fSxWdD1hbi5yb290fHwiUm9vdCBFbnRyeSI7aWYocm4uRnVsbFBhdGhzfHwocm4uRnVsbFBhdGhzPVtdKSxybi5GaWxlSW5kZXh8fChybi5GaWxlSW5kZXg9W10pLHJuLkZ1bGxQYXRocy5sZW5ndGghPT1ybi5GaWxlSW5k'@;
put 'ZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09cm4uRnVsbFBhdGhzLmxlbmd0aCYmKHJuLkZ1bGxQYXRoc1swXT1WdCsiLyIscm4uRmlsZUluZGV4WzBdPXtuYW1lOlZ0LHR5cGU6NX0pLGFuLkNMU0lEJiYocm4uRmlsZUluZGV4WzBd'@;
put 'LmNsc2lkPWFuLkNMU0lEKSxmdW5jdGlvbiBxbihybil7dmFyIF9uPSJceDAxU2gzM3RKNSI7aWYoIWplLmZpbmQocm4sIi8iK19uKSl7dmFyIGFuPXByKDQpO2FuWzBdPTU1LGFuWzFdPWFuWzNdPTUwLGFuWzJdPTU0LHJuLkZpbGVJbmRleC5wdXNoKHtuYW1lOl9uLHR5cGU6Mixjb250ZW50'@;
put 'OmFuLHNpemU6NCxMOjY5LFI6NjksQzo2OX0pLHJuLkZ1bGxQYXRocy5wdXNoKHJuLkZ1bGxQYXRoc1swXStfbiksem4ocm4pfX0ocm4pfWZ1bmN0aW9uIHpuKHJuLF9uKXt1bihybik7Zm9yKHZhciBhbj0hMSxWdD0hMSxXdD1ybi5GdWxsUGF0aHMubGVuZ3RoLTE7V3Q+PTA7LS1XdCl7dmFy'@;
put 'IGRuPXJuLkZpbGVJbmRleFtXdF07c3dpdGNoKGRuLnR5cGUpe2Nhc2UgMDpWdD9hbj0hMDoocm4uRmlsZUluZGV4LnBvcCgpLHJuLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6VnQ9ITAsaXNOYU4oZG4uUipkbi5MKmRuLkMpJiYoYW49ITApLGRuLlI+LTEm'@;
put 'JmRuLkw+LTEmJmRuLlI9PWRuLkwmJihhbj0hMCk7YnJlYWs7ZGVmYXVsdDphbj0hMH19aWYoYW58fF9uKXt2YXIgVG49bmV3IERhdGUoMTk4NywxLDE5KSxucj0wLGJyPVtdO2ZvcihXdD0wO1d0PHJuLkZ1bGxQYXRocy5sZW5ndGg7KytXdCkwIT09cm4uRmlsZUluZGV4W1d0XS50eXBlJiZi'@;
put 'ci5wdXNoKFtybi5GdWxsUGF0aHNbV3RdLHJuLkZpbGVJbmRleFtXdF1dKTtmb3IoV3Q9MDtXdDxici5sZW5ndGg7KytXdCl7dmFyIFpyPVEoYnJbV3RdWzBdKTtmb3IoVnQ9ITEsbnI9MDtucjxici5sZW5ndGg7Kytucilicltucl1bMF09PT1aciYmKFZ0PSEwKTtWdHx8YnIucHVzaChbWnIs'@;
put 'e25hbWU6cmUoWnIpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEsY2xzaWQ6eGksY3Q6VG4sbXQ6VG4sY29udGVudDpudWxsfV0pfWZvcihici5zb3J0KGZ1bmN0aW9uKGNpLENvKXtyZXR1cm4gZnVuY3Rpb24gTChybixfbil7Zm9yKHZhciBhbj1ybi5zcGxpdCgiLyIpLFZ0PV9uLnNwbGl0KCIv'@;
put 'IiksV3Q9MCxkbj0wLFRuPU1hdGgubWluKGFuLmxlbmd0aCxWdC5sZW5ndGgpO1d0PFRuOysrV3Qpe2lmKGRuPWFuW1d0XS5sZW5ndGgtVnRbV3RdLmxlbmd0aClyZXR1cm4gZG47aWYoYW5bV3RdIT1WdFtXdF0pcmV0dXJuIGFuW1d0XTxWdFtXdF0/LTE6MX1yZXR1cm4gYW4ubGVuZ3RoLVZ0'@;
put 'Lmxlbmd0aH0oY2lbMF0sQ29bMF0pfSkscm4uRnVsbFBhdGhzPVtdLHJuLkZpbGVJbmRleD1bXSxXdD0wO1d0PGJyLmxlbmd0aDsrK1d0KXJuLkZ1bGxQYXRoc1tXdF09YnJbV3RdWzBdLHJuLkZpbGVJbmRleFtXdF09YnJbV3RdWzFdO2ZvcihXdD0wO1d0PGJyLmxlbmd0aDsrK1d0KXt2YXIg'@;
put 'THI9cm4uRmlsZUluZGV4W1d0XSxNaT1ybi5GdWxsUGF0aHNbV3RdO2lmKExyLm5hbWU9cmUoTWkpLnJlcGxhY2UoIi8iLCIiKSxMci5MPUxyLlI9THIuQz0tKExyLmNvbG9yPTEpLExyLnNpemU9THIuY29udGVudD9Mci5jb250ZW50Lmxlbmd0aDowLExyLnN0YXJ0PTAsTHIuY2xzaWQ9THIu'@;
put 'Y2xzaWR8fHhpLDA9PT1XdClMci5DPWJyLmxlbmd0aD4xPzE6LTEsTHIuc2l6ZT0wLExyLnR5cGU9NTtlbHNlIGlmKCIvIj09TWkuc2xpY2UoLTEpKXtmb3IobnI9V3QrMTtucjxici5sZW5ndGgmJlEocm4uRnVsbFBhdGhzW25yXSkhPU1pOysrbnIpO2ZvcihMci5DPW5yPj1ici5sZW5ndGg/'@;
put 'LTE6bnIsbnI9V3QrMTtucjxici5sZW5ndGgmJlEocm4uRnVsbFBhdGhzW25yXSkhPVEoTWkpOysrbnIpO0xyLlI9bnI+PWJyLmxlbmd0aD8tMTpucixMci50eXBlPTF9ZWxzZSBRKHJuLkZ1bGxQYXRoc1tXdCsxXXx8IiIpPT1RKE1pKSYmKExyLlI9V3QrMSksTHIudHlwZT0yfX19ZnVuY3Rp'@;
put 'b24ga24ocm4sX24pe3ZhciBhbj1fbnx8e307aWYoem4ocm4pLCJ6aXAiPT1hbi5maWxlVHlwZSlyZXR1cm4gZnVuY3Rpb24gdnMocm4sX24pe3ZhciBhbj1fbnx8e30sVnQ9W10sV3Q9W10sZG49cHIoMSksVG49YW4uY29tcHJlc3Npb24/ODowLG5yPTAsWnI9MCxMcj0wLE1pPTAsY2k9MCxD'@;
put 'bz1ybi5GdWxsUGF0aHNbMF0scG89Q28sVmk9cm4uRmlsZUluZGV4WzBdLFVvPVtdLHRpPTA7Zm9yKFpyPTE7WnI8cm4uRnVsbFBhdGhzLmxlbmd0aDsrK1pyKWlmKHBvPXJuLkZ1bGxQYXRoc1tacl0uc2xpY2UoQ28ubGVuZ3RoKSwoVmk9cm4uRmlsZUluZGV4W1pyXSkuc2l6ZSYmVmkuY29u'@;
put 'dGVudCYmIlx4MDFTaDMzdEo1IiE9cG8pe3ZhciBVbD1NaSxjYz1wcihwby5sZW5ndGgpO2ZvcihMcj0wO0xyPHBvLmxlbmd0aDsrK0xyKWNjLndyaXRlX3NoaWZ0KDEsMTI3JnBvLmNoYXJDb2RlQXQoTHIpKTtjYz1jYy5zbGljZSgwLGNjLmwpLFVvW2NpXT1PZS5idWYoVmkuY29udGVudCww'@;
put 'KTt2YXIgTnU9VmkuY29udGVudDs4PT1UbiYmKE51PW1yKE51KSksKGRuPXByKDMwKSkud3JpdGVfc2hpZnQoNCw2NzMyNDc1MiksZG4ud3JpdGVfc2hpZnQoMiwyMCksZG4ud3JpdGVfc2hpZnQoMixuciksZG4ud3JpdGVfc2hpZnQoMixUbiksVmkubXQ/Z2UoZG4sVmkubXQpOmRuLndyaXRl'@;
put 'X3NoaWZ0KDQsMCksZG4ud3JpdGVfc2hpZnQoLTQsOCZucj8wOlVvW2NpXSksZG4ud3JpdGVfc2hpZnQoNCw4Jm5yPzA6TnUubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCg0LDgmbnI/MDpWaS5jb250ZW50Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoMixjYy5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0'@;
put 'KDIsMCksTWkrPWRuLmxlbmd0aCxWdC5wdXNoKGRuKSxNaSs9Y2MubGVuZ3RoLFZ0LnB1c2goY2MpLE1pKz1OdS5sZW5ndGgsVnQucHVzaChOdSksOCZuciYmKChkbj1wcigxMikpLndyaXRlX3NoaWZ0KC00LFVvW2NpXSksZG4ud3JpdGVfc2hpZnQoNCxOdS5sZW5ndGgpLGRuLndyaXRlX3No'@;
put 'aWZ0KDQsVmkuY29udGVudC5sZW5ndGgpLE1pKz1kbi5sLFZ0LnB1c2goZG4pKSwoZG49cHIoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMjApLGRuLndyaXRlX3NoaWZ0KDIsbnIpLGRuLndyaXRlX3NoaWZ0KDIsVG4p'@;
put 'LGRuLndyaXRlX3NoaWZ0KDQsMCksZG4ud3JpdGVfc2hpZnQoLTQsVW9bY2ldKSxkbi53cml0ZV9zaGlmdCg0LE51Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoNCxWaS5jb250ZW50Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoMixjYy5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3Jp'@;
put 'dGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoNCwwKSxkbi53cml0ZV9zaGlmdCg0LFVsKSx0aSs9ZG4ubCxXdC5wdXNoKGRuKSx0aSs9Y2MubGVuZ3RoLFd0LnB1c2goY2MpLCsrY2l9cmV0dXJuKGRuPXByKDIyKSku'@;
put 'd3JpdGVfc2hpZnQoNCwxMDEwMTAyNTYpLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLGNpKSxkbi53cml0ZV9zaGlmdCgyLGNpKSxkbi53cml0ZV9zaGlmdCg0LHRpKSxkbi53cml0ZV9zaGlmdCg0LE1pKSxkbi53cml0ZV9zaGlmdCgy'@;
put 'LDApLFMoW1MoVnQpLFMoV3QpLGRuXSl9KHJuLGFuKTt2YXIgVnQ9ZnVuY3Rpb24oQ28pe2Zvcih2YXIgcG89MCxWaT0wLFVvPTA7VW88Q28uRmlsZUluZGV4Lmxlbmd0aDsrK1VvKXt2YXIgdGk9Q28uRmlsZUluZGV4W1VvXTtpZih0aS5jb250ZW50KXt2YXIgVWw9dGkuY29udGVudC5sZW5n'@;
put 'dGg7VWw+MCYmKFVsPDQwOTY/cG8rPVVsKzYzPj42OlZpKz1VbCs1MTE+PjkpfX1mb3IodmFyIGNjPUNvLkZ1bGxQYXRocy5sZW5ndGgrMz4+MixWNj1wbysxMjc+Pjcsd2Y9KHBvKzc+PjMpK1ZpK2NjK1Y2LHFkPXdmKzEyNz4+NyxiXz1xZDw9MTA5PzA6TWF0aC5jZWlsKChxZC0xMDkpLzEy'@;
put 'Nyk7d2YrcWQrYl8rMTI3Pj43PnFkOyliXz0rK3FkPD0xMDk/MDpNYXRoLmNlaWwoKHFkLTEwOSkvMTI3KTt2YXIgUTE9WzEsYl8scWQsVjYsY2MsVmkscG8sMF07cmV0dXJuIENvLkZpbGVJbmRleFswXS5zaXplPXBvPDw2LFExWzddPShDby5GaWxlSW5kZXhbMF0uc3RhcnQ9UTFbMF0rUTFb'@;
put 'MV0rUTFbMl0rUTFbM10rUTFbNF0rUTFbNV0pKyhRMVs2XSs3Pj4zKSxRMX0ocm4pLFd0PXByKFZ0WzddPDw5KSxkbj0wLFRuPTA7Zm9yKGRuPTA7ZG48ODsrK2RuKVd0LndyaXRlX3NoaWZ0KDEsc2lbZG5dKTtmb3IoZG49MDtkbjw4OysrZG4pV3Qud3JpdGVfc2hpZnQoMiwwKTtmb3IoV3Qu'@;
put 'd3JpdGVfc2hpZnQoMiw2MiksV3Qud3JpdGVfc2hpZnQoMiwzKSxXdC53cml0ZV9zaGlmdCgyLDY1NTM0KSxXdC53cml0ZV9zaGlmdCgyLDkpLFd0LndyaXRlX3NoaWZ0KDIsNiksZG49MDtkbjwzOysrZG4pV3Qud3JpdGVfc2hpZnQoMiwwKTtmb3IoV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53'@;
put 'cml0ZV9zaGlmdCg0LFZ0WzJdKSxXdC53cml0ZV9zaGlmdCg0LFZ0WzBdK1Z0WzFdK1Z0WzJdK1Z0WzNdLTEpLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCw0MDk2KSxXdC53cml0ZV9zaGlmdCg0LFZ0WzNdP1Z0WzBdK1Z0WzFdK1Z0WzJdLTE6Wm4pLFd0LndyaXRlX3No'@;
put 'aWZ0KDQsVnRbM10pLFd0LndyaXRlX3NoaWZ0KC00LFZ0WzFdP1Z0WzBdLTE6Wm4pLFd0LndyaXRlX3NoaWZ0KDQsVnRbMV0pLGRuPTA7ZG48MTA5OysrZG4pV3Qud3JpdGVfc2hpZnQoLTQsZG48VnRbMl0/VnRbMV0rZG46LTEpO2lmKFZ0WzFdKWZvcihUbj0wO1RuPFZ0WzFdOysrVG4pe2Zv'@;
put 'cig7ZG48MjM2KzEyNypUbjsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LGRuPFZ0WzJdP1Z0WzFdK2RuOi0xKTtXdC53cml0ZV9zaGlmdCgtNCxUbj09PVZ0WzFdLTE/Wm46VG4rMSl9dmFyIG5yPWZ1bmN0aW9uKENvKXtmb3IoVG4rPUNvO2RuPFRuLTE7KytkbilXdC53cml0ZV9zaGlmdCgtNCxk'@;
put 'bisxKTtDbyYmKCsrZG4sV3Qud3JpdGVfc2hpZnQoLTQsWm4pKX07Zm9yKFRuPWRuPTAsVG4rPVZ0WzFdO2RuPFRuOysrZG4pV3Qud3JpdGVfc2hpZnQoLTQsTGkuRElGU0VDVCk7Zm9yKFRuKz1WdFsyXTtkbjxUbjsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LExpLkZBVFNFQ1QpO25yKFZ0WzNd'@;
put 'KSxucihWdFs0XSk7Zm9yKHZhciBicj0wLFpyPTAsTHI9cm4uRmlsZUluZGV4WzBdO2JyPHJuLkZpbGVJbmRleC5sZW5ndGg7KyticikoTHI9cm4uRmlsZUluZGV4W2JyXSkuY29udGVudCYmISgoWnI9THIuY29udGVudC5sZW5ndGgpPDQwOTYpJiYoTHIuc3RhcnQ9VG4sbnIoWnIrNTExPj45'@;
put 'KSk7Zm9yKG5yKFZ0WzZdKzc+PjMpOzUxMSZXdC5sOylXdC53cml0ZV9zaGlmdCgtNCxMaS5FTkRPRkNIQUlOKTtmb3IoVG49ZG49MCxicj0wO2JyPHJuLkZpbGVJbmRleC5sZW5ndGg7KyticikoTHI9cm4uRmlsZUluZGV4W2JyXSkuY29udGVudCYmKFpyPUxyLmNvbnRlbnQubGVuZ3RoKSYm'@;
put 'IShacj49NDA5NikmJihMci5zdGFydD1Ubixucihacis2Mz4+NikpO2Zvcig7NTExJld0Lmw7KVd0LndyaXRlX3NoaWZ0KC00LExpLkVORE9GQ0hBSU4pO2Zvcihkbj0wO2RuPFZ0WzRdPDwyOysrZG4pe3ZhciBNaT1ybi5GdWxsUGF0aHNbZG5dO2lmKE1pJiYwIT09TWkubGVuZ3RoKXtMcj1y'@;
put 'bi5GaWxlSW5kZXhbZG5dLDA9PT1kbiYmKExyLnN0YXJ0PUxyLnNpemU/THIuc3RhcnQtMTpabik7dmFyIGNpPTA9PT1kbiYmYW4ucm9vdHx8THIubmFtZTtpZihacj0yKihjaS5sZW5ndGgrMSksV3Qud3JpdGVfc2hpZnQoNjQsY2ksInV0ZjE2bGUiKSxXdC53cml0ZV9zaGlmdCgyLFpyKSxX'@;
put 'dC53cml0ZV9zaGlmdCgxLExyLnR5cGUpLFd0LndyaXRlX3NoaWZ0KDEsTHIuY29sb3IpLFd0LndyaXRlX3NoaWZ0KC00LExyLkwpLFd0LndyaXRlX3NoaWZ0KC00LExyLlIpLFd0LndyaXRlX3NoaWZ0KC00LExyLkMpLExyLmNsc2lkKVd0LndyaXRlX3NoaWZ0KDE2LExyLmNsc2lkLCJoZXgi'@;
put 'KTtlbHNlIGZvcihicj0wO2JyPDQ7KyticilXdC53cml0ZV9zaGlmdCg0LDApO1d0LndyaXRlX3NoaWZ0KDQsTHIuc3RhdGV8fDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVf'@;
put 'c2hpZnQoNCxMci5zdGFydCksV3Qud3JpdGVfc2hpZnQoNCxMci5zaXplKSxXdC53cml0ZV9zaGlmdCg0LDApfWVsc2V7Zm9yKGJyPTA7YnI8MTc7KyticilXdC53cml0ZV9zaGlmdCg0LDApO2Zvcihicj0wO2JyPDM7KyticilXdC53cml0ZV9zaGlmdCg0LC0xKTtmb3IoYnI9MDticjwxMjsr'@;
put 'K2JyKVd0LndyaXRlX3NoaWZ0KDQsMCl9fWZvcihkbj0xO2RuPHJuLkZpbGVJbmRleC5sZW5ndGg7KytkbilpZigoTHI9cm4uRmlsZUluZGV4W2RuXSkuc2l6ZT49NDA5Nil7Zm9yKFd0Lmw9THIuc3RhcnQrMTw8OSxicj0wO2JyPExyLnNpemU7KyticilXdC53cml0ZV9zaGlmdCgxLExyLmNv'@;
put 'bnRlbnRbYnJdKTtmb3IoOzUxMSZicjsrK2JyKVd0LndyaXRlX3NoaWZ0KDEsMCl9Zm9yKGRuPTE7ZG48cm4uRmlsZUluZGV4Lmxlbmd0aDsrK2RuKWlmKChMcj1ybi5GaWxlSW5kZXhbZG5dKS5zaXplPjAmJkxyLnNpemU8NDA5Nil7Zm9yKGJyPTA7YnI8THIuc2l6ZTsrK2JyKVd0LndyaXRl'@;
put 'X3NoaWZ0KDEsTHIuY29udGVudFticl0pO2Zvcig7NjMmYnI7KyticilXdC53cml0ZV9zaGlmdCgxLDApfWZvcig7V3QubDxXdC5sZW5ndGg7KVd0LndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFd0fVAudmVyc2lvbj0iMS4xLjQiO3ZhciB2cix0cj02NCxabj0tMixCcj0iZDBjZjExZTBhMWIx'@;
put 'MWFlMSIsc2k9WzIwOCwyMDcsMTcsMjI0LDE2MSwxNzcsMjYsMjI1XSx4aT0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLExpPXtNQVhSRUdTRUNUOi02LERJRlNFQ1Q6LTQsRkFUU0VDVDotMyxFTkRPRkNIQUlOOlpuLEZSRUVTRUNUOi0xLEhFQURFUl9TSUdOQVRVUkU6QnIs'@;
put 'SEVBREVSX01JTk9SX1ZFUlNJT046IjNlMDAiLE1BWFJFR1NJRDotNixOT1NUUkVBTTotMSxIRUFERVJfQ0xTSUQ6eGksRW50cnlUeXBlczpbInVua25vd24iLCJzdG9yYWdlIiwic3RyZWFtIiwibG9ja2J5dGVzIiwicHJvcGVydHkiLCJyb290Il19O2Z1bmN0aW9uIHVyKHJuKXtmb3IodmFy'@;
put 'IF9uPW5ldyBBcnJheShybi5sZW5ndGgpLGFuPTA7YW48cm4ubGVuZ3RoOysrYW4pX25bYW5dPVN0cmluZy5mcm9tQ2hhckNvZGUocm5bYW5dKTtyZXR1cm4gX24uam9pbigiIil9ZnVuY3Rpb24gbXIocm4pe3JldHVybiB2cj92ci5kZWZsYXRlUmF3U3luYyhybik6Z2wocm4pfWZvcih2YXIg'@;
put 'cm4sX24sd2k9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLFVyPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxqaT1bMSwyLDMsNCw1LDcs'@;
put 'OSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxUaT10eXBlb2YgVWludDhBcnJheTwidSIsWW89VGk/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxsbz0wO2xvPDI1'@;
put 'NjsrK2xvKVlvW2xvXT0odm9pZCAwLDI1NSYoKF9uPTEzOTUzNiYoKHJuPWxvKTw8MXxybjw8MTEpfDU1ODE0NCYocm48PDV8cm48PDE1KSk+PjE2fF9uPj44fF9uKSk7ZnVuY3Rpb24gQW8ocm4sX24pe3ZhciBhbj1Zb1syNTUmcm5dO3JldHVybiBfbjw9OD9hbj4+PjgtX246KGFuPWFuPDw4'@;
put 'fFlvW3JuPj44JjI1NV0sX248PTE2P2FuPj4+MTYtX246KGFuPWFuPDw4fFlvW3JuPj4xNiYyNTVdKT4+PjI0LV9uKX1mdW5jdGlvbiB4byhybixfbil7dmFyIGFuPTcmX24sVnQ9X24+Pj4zO3JldHVybihybltWdF18KGFuPD02PzA6cm5bVnQrMV08PDgpKT4+PmFuJjN9ZnVuY3Rpb24gaGko'@;
put 'cm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4ocm5bVnRdfChhbjw9NT8wOnJuW1Z0KzFdPDw4KSk+Pj5hbiY3fWZ1bmN0aW9uIE1uKHJuLF9uKXt2YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0dXJuKHJuW1Z0XXwoYW48PTM/MDpybltWdCsxXTw8OCkpPj4+YW4mMzF9ZnVuY3Rp'@;
put 'b24gTXMocm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4ocm5bVnRdfChhbjw9MT8wOnJuW1Z0KzFdPDw4KSk+Pj5hbiYxMjd9ZnVuY3Rpb24geXMocm4sX24sYW4pe3ZhciBWdD03Jl9uLFd0PV9uPj4+MyxUbj1ybltXdF0+Pj5WdDtyZXR1cm4gYW48OC1WdHx8KFRufD1ybltX'@;
put 'dCsxXTw8OC1WdCxhbjwxNi1WdCl8fChUbnw9cm5bV3QrMl08PDE2LVZ0LGFuPDI0LVZ0KXx8KFRufD1ybltXdCszXTw8MjQtVnQpLFRuJigxPDxhbiktMX1mdW5jdGlvbiBFbChybixfbil7dmFyIGFuPXJuLmxlbmd0aCxWdD0yKmFuPl9uPzIqYW46X24rNSxXdD0wO2lmKGFuPj1fbilyZXR1'@;
put 'cm4gcm47aWYoaGUpe3ZhciBkbj1iKFZ0KTtpZihybi5jb3B5KXJuLmNvcHkoZG4pO2Vsc2UgZm9yKDtXdDxybi5sZW5ndGg7KytXdClkbltXdF09cm5bV3RdO3JldHVybiBkbn1pZihUaSl7dmFyIFRuPW5ldyBVaW50OEFycmF5KFZ0KTtpZihUbi5zZXQpVG4uc2V0KHJuKTtlbHNlIGZvcig7'@;
put 'V3Q8cm4ubGVuZ3RoOysrV3QpVG5bV3RdPXJuW1d0XTtyZXR1cm4gVG59cmV0dXJuIHJuLmxlbmd0aD1WdCxybn1mdW5jdGlvbiBzbChybil7Zm9yKHZhciBfbj1uZXcgQXJyYXkocm4pLGFuPTA7YW48cm47Kythbilfblthbl09MDtyZXR1cm4gX259dmFyIGdsPWZ1bmN0aW9uKF9uKXt2YXIg'@;
put 'YW49cHIoNTArTWF0aC5mbG9vcigxLjEqX24ubGVuZ3RoKSksVnQ9ZnVuY3Rpb24oYW4sVnQpe2Zvcih2YXIgV3Q9MDtXdDxhbi5sZW5ndGg7KXt2YXIgZG49TWF0aC5taW4oNjU1MzUsYW4ubGVuZ3RoLVd0KTtmb3IoVnQud3JpdGVfc2hpZnQoMSwrKFd0K2RuPT1hbi5sZW5ndGgpKSxWdC53'@;
put 'cml0ZV9zaGlmdCgyLGRuKSxWdC53cml0ZV9zaGlmdCgyLDY1NTM1Jn5kbik7ZG4tLSA+MDspVnRbVnQubCsrXT1hbltXdCsrXX1yZXR1cm4gVnQubH0oX24sYW4pO3JldHVybiBhbi5zbGljZSgwLFZ0KX07ZnVuY3Rpb24gbnUocm4sX24sYW4pe3ZhciBWdD0xLFd0PTAsZG49MCxUbj0wLG5y'@;
put 'PTAsYnI9cm4ubGVuZ3RoLFpyPVRpP25ldyBVaW50MTZBcnJheSgzMik6c2woMzIpO2Zvcihkbj0wO2RuPDMyOysrZG4pWnJbZG5dPTA7Zm9yKGRuPWJyO2RuPGFuOysrZG4pcm5bZG5dPTA7YnI9cm4ubGVuZ3RoO3ZhciBMcj1UaT9uZXcgVWludDE2QXJyYXkoYnIpOnNsKGJyKTtmb3IoZG49'@;
put 'MDtkbjxicjsrK2RuKVpyW1d0PXJuW2RuXV0rKyxWdDxXdCYmKFZ0PVd0KSxMcltkbl09MDtmb3IoWnJbMF09MCxkbj0xO2RuPD1WdDsrK2RuKVpyW2RuKzE2XT1ucj1ucitacltkbi0xXTw8MTtmb3IoZG49MDtkbjxicjsrK2RuKTAhPShucj1ybltkbl0pJiYoTHJbZG5dPVpyW25yKzE2XSsr'@;
put 'KTt2YXIgTWk9MDtmb3IoZG49MDtkbjxicjsrK2RuKWlmKDAhPShNaT1ybltkbl0pKWZvcihucj1BbyhMcltkbl0sVnQpPj5WdC1NaSxUbj0oMTw8VnQrNC1NaSktMTtUbj49MDstLVRuKV9uW25yfFRuPDxNaV09MTUmTWl8ZG48PDQ7cmV0dXJuIFZ0fXZhciB0bD1UaT9uZXcgVWludDE2QXJy'@;
put 'YXkoNTEyKTpzbCg1MTIpLEt0PVRpP25ldyBVaW50MTZBcnJheSgzMik6c2woMzIpO2lmKCFUaSl7Zm9yKHZhciBnbj0wO2duPDUxMjsrK2duKXRsW2duXT0wO2Zvcihnbj0wO2duPDMyOysrZ24pS3RbZ25dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBybj1bXSxfbj0wO19uPDMyO19uKyspcm4u'@;
put 'cHVzaCg1KTtudShybixLdCwzMik7dmFyIGFuPVtdO2Zvcihfbj0wO19uPD0xNDM7X24rKylhbi5wdXNoKDgpO2Zvcig7X248PTI1NTtfbisrKWFuLnB1c2goOSk7Zm9yKDtfbjw9Mjc5O19uKyspYW4ucHVzaCg3KTtmb3IoO19uPD0yODc7X24rKylhbi5wdXNoKDgpO251KGFuLHRsLDI4OCl9'@;
put 'KCk7dmFyIExuPVRpP25ldyBVaW50MTZBcnJheSgzMjc2OCk6c2woMzI3NjgpLFdyPVRpP25ldyBVaW50MTZBcnJheSgzMjc2OCk6c2woMzI3NjgpLFhuPVRpP25ldyBVaW50MTZBcnJheSgxMjgpOnNsKDEyOCksZWk9MSxpcj0xO2Z1bmN0aW9uIHJpKHJuLF9uKXt2YXIgYW49TW4ocm4sX24p'@;
put 'KzI1NyxWdD1Nbihybixfbis9NSkrMSxXdD1mdW5jdGlvbiB0YShybixfbil7dmFyIGFuPTcmX24sVnQ9X24+Pj4zO3JldHVybihybltWdF18KGFuPD00PzA6cm5bVnQrMV08PDgpKT4+PmFuJjE1fShybixfbis9NSkrNDtfbis9NDtmb3IodmFyIGRuPTAsVG49VGk/bmV3IFVpbnQ4QXJyYXko'@;
put 'MTkpOnNsKDE5KSxucj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sYnI9MSxacj1UaT9uZXcgVWludDhBcnJheSg4KTpzbCg4KSxMcj1UaT9uZXcgVWludDhBcnJheSg4KTpzbCg4KSxNaT1Ubi5sZW5ndGgsY2k9MDtjaTxXdDsrK2NpKVRuW3dpW2NpXV09ZG49aGko'@;
put 'cm4sX24pLGJyPGRuJiYoYnI9ZG4pLFpyW2RuXSsrLF9uKz0zO3ZhciBDbz0wO2ZvcihaclswXT0wLGNpPTE7Y2k8PWJyOysrY2kpTHJbY2ldPUNvPUNvK1pyW2NpLTFdPDwxO2ZvcihjaT0wO2NpPE1pOysrY2kpMCE9KENvPVRuW2NpXSkmJihucltjaV09THJbQ29dKyspO3ZhciBwbz0wO2Zv'@;
put 'cihjaT0wO2NpPE1pOysrY2kpaWYoMCE9KHBvPVRuW2NpXSkpe0NvPVlvW25yW2NpXV0+PjgtcG87Zm9yKHZhciBWaT0oMTw8Ny1wbyktMTtWaT49MDstLVZpKVhuW0NvfFZpPDxwb109NyZwb3xjaTw8M312YXIgVW89W107Zm9yKGJyPTE7VW8ubGVuZ3RoPGFuK1Z0Oylzd2l0Y2goQ289WG5b'@;
put 'TXMocm4sX24pXSxfbis9NyZDbyxDbz4+Pj0zKXtjYXNlIDE2OmZvcihkbj0zK3hvKHJuLF9uKSxfbis9MixDbz1Vb1tVby5sZW5ndGgtMV07ZG4tLSA+MDspVW8ucHVzaChDbyk7YnJlYWs7Y2FzZSAxNzpmb3IoZG49MytoaShybixfbiksX24rPTM7ZG4tLSA+MDspVW8ucHVzaCgwKTticmVh'@;
put 'aztjYXNlIDE4OmZvcihkbj0xMStNcyhybixfbiksX24rPTc7ZG4tLSA+MDspVW8ucHVzaCgwKTticmVhaztkZWZhdWx0OlVvLnB1c2goQ28pLGJyPENvJiYoYnI9Q28pfXZhciB0aT1Vby5zbGljZSgwLGFuKSxVbD1Vby5zbGljZShhbik7Zm9yKGNpPWFuO2NpPDI4NjsrK2NpKXRpW2NpXT0w'@;
put 'O2ZvcihjaT1WdDtjaTwzMDsrK2NpKVVsW2NpXT0wO3JldHVybiBlaT1udSh0aSxMbiwyODYpLGlyPW51KFVsLFdyLDMwKSxfbn1mdW5jdGlvbiBvaShybixfbil7dmFyIFZ0PWZ1bmN0aW9uIG1vKHJuLF9uKXtpZigzPT1yblswXSYmISgzJnJuWzFdKSlyZXR1cm5bRyhfbiksMl07Zm9yKHZh'@;
put 'ciBhbj0wLFZ0PTAsV3Q9Yihfbnx8MTw8MTgpLGRuPTAsVG49V3QubGVuZ3RoPj4+MCxucj0wLGJyPTA7ISgxJlZ0KTspaWYoVnQ9aGkocm4sYW4pLGFuKz0zLFZ0Pj4+MSlmb3IoVnQ+Pj4xPT0xPyhucj05LGJyPTUpOihhbj1yaShybixhbiksbnI9ZWksYnI9aXIpLCFfbiYmVG48ZG4rMzI3'@;
put 'NjcmJihUbj0oV3Q9RWwoV3QsZG4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciBMcj15cyhybixhbixuciksTWk9VnQ+Pj4xPT0xP3RsW0xyXTpMbltMcl07aWYoYW4rPTE1Jk1pLChNaT4+Pj00KT4+PjgmMjU1KXtpZigyNTY9PU1pKWJyZWFrO3ZhciBjaT0oTWktPTI1Nyk8OD8wOk1pLTQ+PjI7'@;
put 'Y2k+NSYmKGNpPTApO3ZhciBDbz1kbitVcltNaV07Y2k+MCYmKENvKz15cyhybixhbixjaSksYW4rPWNpKSxMcj15cyhybixhbixiciksYW4rPTE1JihNaT1WdD4+PjE9PTE/S3RbTHJdOldyW0xyXSk7dmFyIHBvPShNaT4+Pj00KTw0PzA6TWktMj4+MSxWaT1qaVtNaV07Zm9yKHBvPjAmJihW'@;
put 'aSs9eXMocm4sYW4scG8pLGFuKz1wbyksIV9uJiZUbjxDbyYmKFRuPShXdD1FbChXdCxDbykpLmxlbmd0aCk7ZG48Q287KVd0W2RuXT1XdFtkbi1WaV0sKytkbn1lbHNlIFd0W2RuKytdPU1pfWVsc2V7NyZhbiYmKGFuKz04LSg3JmFuKSk7dmFyIFpyPXJuW2FuPj4+M118cm5bMSsoYW4+Pj4z'@;
put 'KV08PDg7aWYoYW4rPTMyLCFfbiYmVG48ZG4rWnImJihUbj0oV3Q9RWwoV3QsZG4rWnIpKS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBybi5jb3B5KXJuLmNvcHkoV3QsZG4sYW4+Pj4zLChhbj4+PjMpK1pyKSxkbis9WnIsYW4rPTgqWnI7ZWxzZSBmb3IoO1pyLS0gPjA7KVd0W2RuKytd'@;
put 'PXJuW2FuPj4+M10sYW4rPTh9cmV0dXJuW19uP1d0Old0LnNsaWNlKDAsZG4pLGFuKzc+Pj4zXX0ocm4uc2xpY2Uocm4ubHx8MCksX24pO3JldHVybiBybi5sKz1WdFsxXSxWdFswXX1mdW5jdGlvbiB6aShybixfbil7aWYoIXJuKXRocm93IG5ldyBFcnJvcihfbik7dHlwZW9mIGNvbnNvbGU8'@;
put 'InUiJiZjb25zb2xlLmVycm9yKF9uKX1mdW5jdGlvbiBKcihybixfbil7dmFyIGFuPXJuO29sKGFuLDApO3ZhciBkbj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07dW4oZG4se3Jvb3Q6X24ucm9vdH0pO2Zvcih2YXIgVG49YW4ubGVuZ3RoLTQ7KDgwIT1hbltUbl18fDc1IT1hbltUbisx'@;
put 'XXx8NSE9YW5bVG4rMl18fDYhPWFuW1RuKzNdKSYmVG4+PTA7KS0tVG47YW4ubD1Ubis0LGFuLmwrPTQ7dmFyIG5yPWFuLnJlYWRfc2hpZnQoMik7YW4ubCs9Njt2YXIgYnI9YW4ucmVhZF9zaGlmdCg0KTtmb3IoYW4ubD1icixUbj0wO1RuPG5yOysrVG4pe2FuLmwrPTIwO3ZhciBacj1hbi5y'@;
put 'ZWFkX3NoaWZ0KDQpLExyPWFuLnJlYWRfc2hpZnQoNCksTWk9YW4ucmVhZF9zaGlmdCgyKSxjaT1hbi5yZWFkX3NoaWZ0KDIpLENvPWFuLnJlYWRfc2hpZnQoMik7YW4ubCs9ODt2YXIgcG89YW4ucmVhZF9zaGlmdCg0KSxWaT12ZShhbi5zbGljZShhbi5sK01pLGFuLmwrTWkrY2kpKTthbi5s'@;
put 'Kz1NaStjaStDbzt2YXIgVW89YW4ubDthbi5sPXBvKzQsd3MoYW4sWnIsTHIsZG4sVmkpLGFuLmw9VW99cmV0dXJuIGRufWZ1bmN0aW9uIHdzKHJuLF9uLGFuLFZ0LFd0KXtybi5sKz0yO3ZhciBkbj1ybi5yZWFkX3NoaWZ0KDIpLFRuPXJuLnJlYWRfc2hpZnQoMiksbnI9ZnVuY3Rpb24gX2Uo'@;
put 'cm4pe3ZhciBfbj02NTUzNSZybi5yZWFkX3NoaWZ0KDIpLGFuPTY1NTM1JnJuLnJlYWRfc2hpZnQoMiksVnQ9bmV3IERhdGUsV3Q9MzEmYW4sZG49MTUmKGFuPj4+PTUpO2FuPj4+PTQsVnQuc2V0TWlsbGlzZWNvbmRzKDApLFZ0LnNldEZ1bGxZZWFyKGFuKzE5ODApLFZ0LnNldE1vbnRoKGRu'@;
put 'LTEpLFZ0LnNldERhdGUoV3QpO3ZhciBUbj0zMSZfbixucj02MyYoX24+Pj49NSk7cmV0dXJuIFZ0LnNldEhvdXJzKF9uPj4+PTYpLFZ0LnNldE1pbnV0ZXMobnIpLFZ0LnNldFNlY29uZHMoVG48PDEpLFZ0fShybik7aWYoODI1NyZkbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJ'@;
put 'UCBlbmNyeXB0aW9uIik7Zm9yKHZhciBicj1ybi5yZWFkX3NoaWZ0KDQpLFpyPXJuLnJlYWRfc2hpZnQoNCksTHI9cm4ucmVhZF9zaGlmdCg0KSxNaT1ybi5yZWFkX3NoaWZ0KDIpLGNpPXJuLnJlYWRfc2hpZnQoMiksQ289IiIscG89MDtwbzxNaTsrK3BvKUNvKz1TdHJpbmcuZnJvbUNoYXJD'@;
put 'b2RlKHJuW3JuLmwrK10pO2lmKGNpKXt2YXIgVmk9dmUocm4uc2xpY2Uocm4ubCxybi5sK2NpKSk7KFZpWzIxNTg5XXx8e30pLm10JiYobnI9VmlbMjE1ODldLm10KSwoKFd0fHx7fSlbMjE1ODldfHx7fSkubXQmJihucj1XdFsyMTU4OV0ubXQpfXJuLmwrPWNpO3ZhciBVbz1ybi5zbGljZShy'@;
put 'bi5sLHJuLmwrWnIpO3N3aXRjaChUbil7Y2FzZSA4OlVvPWZ1bmN0aW9uIFNuKHJuLF9uKXtpZighdnIpcmV0dXJuIG9pKHJuLF9uKTt2YXIgVnQ9bmV3KDAsdnIuSW5mbGF0ZVJhdyksV3Q9VnQuX3Byb2Nlc3NDaHVuayhybi5zbGljZShybi5sKSxWdC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1'@;
put 'cm4gcm4ubCs9VnQuYnl0ZXNSZWFkLFd0fShybixMcik7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9kICIrVG4pfXZhciB0aT0hMTs4JmRuJiYoMTM0Njk1NzYwPT0oYnI9cm4ucmVhZF9zaGlmdCg0'@;
put 'KSkmJihicj1ybi5yZWFkX3NoaWZ0KDQpLHRpPSEwKSxacj1ybi5yZWFkX3NoaWZ0KDQpLExyPXJuLnJlYWRfc2hpZnQoNCkpLFpyIT1fbiYmemkodGksIkJhZCBjb21wcmVzc2VkIHNpemU6ICIrX24rIiAhPSAiK1pyKSxMciE9YW4mJnppKHRpLCJCYWQgdW5jb21wcmVzc2VkIHNpemU6ICIr'@;
put 'YW4rIiAhPSAiK0xyKTt2YXIgVWw9T2UuYnVmKFVvLDApO2JyPj4wIT1VbD4+MCYmemkodGksIkJhZCBDUkMzMiBjaGVja3N1bTogIiticisiICE9ICIrVWwpLHpsKFZ0LENvLFVvLHt1bnNhZmU6ITAsbXQ6bnJ9KX1mdW5jdGlvbiB6bChybixfbixhbixWdCl7dmFyIFd0PVZ0JiZWdC51bnNh'@;
put 'ZmU7V3R8fHVuKHJuKTt2YXIgZG49IVd0JiZqZS5maW5kKHJuLF9uKTtpZighZG4pe3ZhciBUbj1ybi5GdWxsUGF0aHNbMF07X24uc2xpY2UoMCxUbi5sZW5ndGgpPT1Ubj9Ubj1fbjooIi8iIT1Ubi5zbGljZSgtMSkmJihUbis9Ii8iKSxUbj0oVG4rX24pLnJlcGxhY2UoIi8vIiwiLyIpKSxk'@;
put 'bj17bmFtZTpyZShfbiksdHlwZToyfSxybi5GaWxlSW5kZXgucHVzaChkbikscm4uRnVsbFBhdGhzLnB1c2goVG4pLFd0fHxqZS51dGlscy5jZmJfZ2Mocm4pfXJldHVybiBkbi5jb250ZW50PWFuLGRuLnNpemU9YW4/YW4ubGVuZ3RoOjAsVnQmJihWdC5DTFNJRCYmKGRuLmNsc2lkPVZ0LkNM'@;
put 'U0lEKSxWdC5tdCYmKGRuLm10PVZ0Lm10KSxWdC5jdCYmKGRuLmN0PVZ0LmN0KSksZG59cmV0dXJuIFAuZmluZD1mdW5jdGlvbiBlcihybixfbil7dmFyIGFuPXJuLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oYnIpe3JldHVybiBici50b1VwcGVyQ2FzZSgpfSksVnQ9YW4ubWFwKGZ1bmN0aW9u'@;
put 'KGJyKXt2YXIgWnI9YnIuc3BsaXQoIi8iKTtyZXR1cm4gWnJbWnIubGVuZ3RoLSgiLyI9PWJyLnNsaWNlKC0xKT8yOjEpXX0pLFd0PSExOzQ3PT09X24uY2hhckNvZGVBdCgwKT8oV3Q9ITAsX249YW5bMF0uc2xpY2UoMCwtMSkrX24pOld0PS0xIT09X24uaW5kZXhPZigiLyIpO3ZhciBkbj1f'@;
put 'bi50b1VwcGVyQ2FzZSgpLFRuPSEwPT09V3Q/YW4uaW5kZXhPZihkbik6VnQuaW5kZXhPZihkbik7aWYoLTEhPT1UbilyZXR1cm4gcm4uRmlsZUluZGV4W1RuXTt2YXIgbnI9IWRuLm1hdGNoKHApO2Zvcihkbj1kbi5yZXBsYWNlKHYsIiIpLG5yJiYoZG49ZG4ucmVwbGFjZShwLCIhIikpLFRu'@;
put 'PTA7VG48YW4ubGVuZ3RoOysrVG4paWYoKG5yP2FuW1RuXS5yZXBsYWNlKHAsIiEiKTphbltUbl0pLnJlcGxhY2UodiwiIik9PWRufHwobnI/VnRbVG5dLnJlcGxhY2UocCwiISIpOlZ0W1RuXSkucmVwbGFjZSh2LCIiKT09ZG4pcmV0dXJuIHJuLkZpbGVJbmRleFtUbl07cmV0dXJuIG51bGx9'@;
put 'LFAucmVhZD1mdW5jdGlvbiBLbihybixfbil7c3dpdGNoKF9uJiZfbi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVuY3Rpb24gcG4ocm4sX24pe3JldHVybiBIZSgpLEJlKFNlLnJlYWRGaWxlU3luYyhybiksX24pfShybixfbik7Y2FzZSJiYXNlNjQiOnJldHVybiBCZShE'@;
put 'KHNlLmRlY29kZShybikpLF9uKTtjYXNlImJpbmFyeSI6cmV0dXJuIEJlKEQocm4pLF9uKX1yZXR1cm4gQmUocm4sX24pfSxQLnBhcnNlPUJlLFAud3JpdGU9ZnVuY3Rpb24gQW4ocm4sX24pe3ZhciBhbj1rbihybixfbik7c3dpdGNoKF9uJiZfbi50eXBlKXtjYXNlImZpbGUiOnJldHVybiBI'@;
put 'ZSgpLFNlLndyaXRlRmlsZVN5bmMoX24uZmlsZW5hbWUsYW4pLGFuO2Nhc2UiYmluYXJ5IjpyZXR1cm4gdXIoYW4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UuZW5jb2RlKHVyKGFuKSl9cmV0dXJuIGFufSxQLndyaXRlRmlsZT1mdW5jdGlvbiBRcihybixfbixhbil7SGUoKTt2YXIgVnQ9a24o'@;
put 'cm4sYW4pO1NlLndyaXRlRmlsZVN5bmMoX24sVnQpfSxQLnV0aWxzPXtjZmJfbmV3OmZ1bmN0aW9uIG1sKHJuKXt2YXIgX249e307cmV0dXJuIHVuKF9uLHJuKSxfbn0sY2ZiX2FkZDp6bCxjZmJfZGVsOmZ1bmN0aW9uIGhhKHJuLF9uKXt1bihybik7dmFyIGFuPWplLmZpbmQocm4sX24pO2lm'@;
put 'KGFuKWZvcih2YXIgVnQ9MDtWdDxybi5GaWxlSW5kZXgubGVuZ3RoOysrVnQpaWYocm4uRmlsZUluZGV4W1Z0XT09YW4pcmV0dXJuIHJuLkZpbGVJbmRleC5zcGxpY2UoVnQsMSkscm4uRnVsbFBhdGhzLnNwbGljZShWdCwxKSwhMDtyZXR1cm4hMX0sY2ZiX21vdjpmdW5jdGlvbiB5Zihybixf'@;
put 'bixhbil7dW4ocm4pO3ZhciBWdD1qZS5maW5kKHJuLF9uKTtpZihWdClmb3IodmFyIFd0PTA7V3Q8cm4uRmlsZUluZGV4Lmxlbmd0aDsrK1d0KWlmKHJuLkZpbGVJbmRleFtXdF09PVZ0KXJldHVybiBybi5GaWxlSW5kZXhbV3RdLm5hbWU9cmUoYW4pLHJuLkZ1bGxQYXRoc1tXdF09YW4sITA7'@;
put 'cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiBvcChybil7em4ocm4sITApfSxSZWFkU2hpZnQ6SGEsQ2hlY2tGaWVsZDpCaCxwcmVwX2Jsb2I6b2wsYmNvbmNhdDpTLHVzZV96bGliOmZ1bmN0aW9uIHJyKHJuKXt0cnl7dmFyIGFuPW5ldygwLHJuLkluZmxhdGVSYXcpO2lmKGFuLl9wcm9jZXNz'@;
put 'Q2h1bmsobmV3IFVpbnQ4QXJyYXkoWzMsMF0pLGFuLl9maW5pc2hGbHVzaEZsYWcpLCFhbi5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQiKTt2cj1ybn1jYXRjaChWdCl7Y29uc29sZS5lcnJvcigiY2Fubm90IHVzZSBuYXRpdmUgemxp'@;
put 'YjogIisoVnQubWVzc2FnZXx8VnQpKX19LF9kZWZsYXRlUmF3OmdsLF9pbmZsYXRlUmF3Om9pLGNvbnN0czpMaX0sUH0oKTt0cnl7V2U9Rig3ODc3Myl9Y2F0Y2h7fWZ1bmN0aW9uIEtlKHkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgeT9IKHkpOkFycmF5LmlzQXJyYXkoeSk/ZnVuY3Rpb24g'@;
put 'Zyh5KXtpZih0eXBlb2YgVWludDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBuZXcgVWludDhBcnJheSh5KX0oeSk6eX1mdW5jdGlvbiBZZSh5LFAsTCl7aWYodHlwZW9mIFdlPCJ1IiYmV2Uud3JpdGVGaWxlU3luYylyZXR1cm4gTD9XZS53cml0ZUZp'@;
put 'bGVTeW5jKHksUCxMKTpXZS53cml0ZUZpbGVTeW5jKHksUCk7dmFyIFE9InV0ZjgiPT1MP0xvKFApOlA7aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoUSx5KTtpZih0eXBlb2YgQmxvYjwidSIpe3ZhciByZT1uZXcgQmxvYihbS2UoUSldLHt0eXBlOiJhcHBs'@;
put 'aWNhdGlvbi9vY3RldC1zdHJlYW0ifSk7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXJldHVybiBuYXZpZ2F0b3IubXNTYXZlQmxvYihyZSx5KTtpZih0eXBlb2Ygc2F2ZUFzPCJ1IilyZXR1cm4gc2F2ZUFzKHJlLHkpO2lmKHR5cGVvZiBVUkw8InUiJiZ0'@;
put 'eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgZ2U9VVJMLmNyZWF0ZU9iamVjdFVSTChyZSk7aWYoIm9iamVjdCI9PXR5cGVvZiBjaHJvbWUmJiJmdW5jdGlvbiI9PXR5cGVvZihjaHJvbWUuZG93bmxvYWRzfHx7fSku'@;
put 'ZG93bmxvYWQpcmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwoZ2UpfSw2ZTQpLGNocm9tZS5kb3dubG9hZHMuZG93bmxvYWQoe3VybDpnZSxmaWxlbmFtZTp5LHNhdmVBczoh'@;
put 'MH0pO3ZhciBfZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aWYobnVsbCE9X2UuZG93bmxvYWQpcmV0dXJuIF9lLmRvd25sb2FkPXksX2UuaHJlZj1nZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF9lKSxfZS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoX2UpLFVS'@;
put 'TC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwoZ2UpfSw2ZTQpLGdlfX1pZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB2ZT1GaWxl'@;
put 'KHkpO3JldHVybiB2ZS5vcGVuKCJ3IiksdmUuZW5jb2Rpbmc9ImJpbmFyeSIsQXJyYXkuaXNBcnJheShQKSYmKFA9TihQKSksdmUud3JpdGUoUCksdmUuY2xvc2UoKSxQfWNhdGNoKFNlKXtpZighU2UubWVzc2FnZXx8IVNlLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgU2V9dGhy'@;
put 'b3cgbmV3IEVycm9yKCJjYW5ub3Qgc2F2ZSBmaWxlICIreSl9ZnVuY3Rpb24gbHQoeSl7Zm9yKHZhciBQPU9iamVjdC5rZXlzKHkpLEw9W10sUT0wO1E8UC5sZW5ndGg7KytRKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LFBbUV0pJiZMLnB1c2goUFtRXSk7cmV0dXJu'@;
put 'IEx9ZnVuY3Rpb24gUGUoeSxQKXtmb3IodmFyIEw9W10sUT1sdCh5KSxyZT0wO3JlIT09US5sZW5ndGg7KytyZSludWxsPT1MW3lbUVtyZV1dW1BdXSYmKExbeVtRW3JlXV1bUF1dPVFbcmVdKTtyZXR1cm4gTH1mdW5jdGlvbiBiZSh5KXtmb3IodmFyIFA9W10sTD1sdCh5KSxRPTA7USE9PUwu'@;
put 'bGVuZ3RoOysrUSlQW3lbTFtRXV1dPUxbUV07cmV0dXJuIFB9ZnVuY3Rpb24gQWUoeSl7Zm9yKHZhciBQPVtdLEw9bHQoeSksUT0wO1EhPT1MLmxlbmd0aDsrK1EpUFt5W0xbUV1dXT1wYXJzZUludChMW1FdLDEwKTtyZXR1cm4gUH12YXIgVWUsaHQscWU9bmV3IERhdGUoMTg5OSwxMSwzMCww'@;
put 'LDAsMCksWGU9MDtmdW5jdGlvbiBNZSgpe1hlPXFlLmdldFRpbWUoKSs2ZTQqKChuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKS1xZS5nZXRUaW1lem9uZU9mZnNldCgpKSxVZT1mdW5jdGlvbihQLEwpe3ZhciBRPVAuZ2V0VGltZSgpO3JldHVybiBMJiYoUS09MTI2MzE2OGU1KSwoUS1Y'@;
put 'ZSkvODY0ZTV9LGh0PWZ1bmN0aW9uKFApe3ZhciBMPW5ldyBEYXRlO3JldHVybiBMLnNldFRpbWUoMjQqUCo2MCo2MCoxZTMrWGUpLEx9fWZ1bmN0aW9uIG90KHkpe3ZhciBQPTAsTD0wLFE9ITEscmU9eS5tYXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00pPyhbMC05XC5dK0QpP1QoWzAt'@;
put 'OVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighcmUpdGhyb3cgbmV3IEVycm9yKCJ8Iit5KyJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9uIik7Zm9yKHZhciBnZT0xO2dlIT1yZS5sZW5ndGg7KytnZSlpZihyZVtnZV0pe3N3aXRjaChMPTEsZ2U+MyYmKFE9ITApLHJl'@;
put 'W2dlXS5zbGljZShyZVtnZV0ubGVuZ3RoLTEpKXtjYXNlIlkiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiAiK3JlW2dlXS5zbGljZShyZVtnZV0ubGVuZ3RoLTEpKTtjYXNlIkQiOkwqPTI0O2Nhc2UiSCI6TCo9NjA7Y2FzZSJNIjppZighUSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTSIpO0wqPTYwfVArPUwqcGFyc2VJbnQocmVbZ2VdLDEwKX1yZXR1cm4gUH1NZSgpO3ZhciB1dD1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIik7aXNOYU4odXQuZ2V0RnVsbFllYXIoKSkmJih1'@;
put 'dD1uZXcgRGF0ZSgiMi8xOS8xNyIpKTt2YXIgTXQ9MjAxNz09dXQuZ2V0RnVsbFllYXIoKTtmdW5jdGlvbiBIdCh5LFApe3ZhciBMPW5ldyBEYXRlKHkpO2lmKE10KXJldHVybiBQPjA/TC5zZXRUaW1lKEwuZ2V0VGltZSgpKzYwKkwuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpOlA8MCYmTC5z'@;
put 'ZXRUaW1lKEwuZ2V0VGltZSgpLTYwKkwuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpLEw7aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHk7aWYoMTkxNz09dXQuZ2V0RnVsbFllYXIoKSYmIWlzTmFOKEwuZ2V0RnVsbFllYXIoKSkpe3ZhciBRPUwuZ2V0RnVsbFllYXIoKTtyZXR1cm4geS5p'@;
put 'bmRleE9mKCIiK1EpPi0xfHxMLnNldEZ1bGxZZWFyKEwuZ2V0RnVsbFllYXIoKSsxMDApLEx9dmFyIHJlPXkubWF0Y2goL1xkKy9nKXx8WyIyMDE3IiwiMiIsIjE5IiwiMCIsIjAiLCIwIl0sZ2U9bmV3IERhdGUoK3JlWzBdLCtyZVsxXS0xLCtyZVsyXSwrcmVbM118fDAsK3JlWzRdfHwwLCty'@;
put 'ZVs1XXx8MCk7cmV0dXJuIHkuaW5kZXhPZigiWiIpPi0xJiYoZ2U9bmV3IERhdGUoZ2UuZ2V0VGltZSgpLTYwKmdlLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksZ2V9ZnVuY3Rpb24gUHQoeSl7Zm9yKHZhciBQPSIiLEw9MDtMIT15Lmxlbmd0aDsrK0wpUCs9U3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZSh5W0xdKTtyZXR1cm4gUH1mdW5jdGlvbiBvbih5KXtpZigib2JqZWN0IiE9dHlwZW9mIHl8fG51bGw9PXkpcmV0dXJuIHk7aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKHkuZ2V0VGltZSgpKTtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiBmdW5jdGlvbiBDbih5KXtm'@;
put 'b3IodmFyIFA9W10sTD0wO0w8eS5sZW5ndGg7KytMKXt2YXIgUT15W0xdOyJvYmplY3QiPT10eXBlb2YgUT9QW0xdPW9uKFEpOm51bGwhPVEmJihQW0xdPVEpfXJldHVybiBQfSh5KTt2YXIgUD17fTtmb3IodmFyIEwgaW4geSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo'@;
put 'eSxMKSYmKFBbTF09b24oeVtMXSkpO3JldHVybiBQfWZ1bmN0aW9uIFV0KHksUCl7aWYoIm9iamVjdCIhPXR5cGVvZiBQfHxudWxsPT1QKXJldHVybiB5O2Zvcih2YXIgTCBpbiBQKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEwpJiYoeVtMXT1vbihQW0xdKSk7cmV0'@;
put 'dXJuIHl9ZnVuY3Rpb24gYm4oeSxQKXtmb3IodmFyIEw9IiI7TC5sZW5ndGg8UDspTCs9eTtyZXR1cm4gTH1mdW5jdGlvbiBXbih5KXt2YXIgUD1OdW1iZXIoeSk7aWYoIWlzTmFOKFApKXJldHVybiBpc0Zpbml0ZShQKT9QOk5hTjtpZighL1xkLy50ZXN0KHkpKXJldHVybiBQO3ZhciBMPTEs'@;
put 'UT15LnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBMKj0xMDAsIiJ9KTtyZXR1cm4gaXNOYU4oUD1OdW1iZXIoUSkpJiYoUT1RLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKHJl'@;
put 'LGdlKXtyZXR1cm4gTD0tTCxnZX0pLGlzTmFOKFA9TnVtYmVyKFEpKSk/UDpQL0x9ZnVuY3Rpb24gZW4oeSl7dmFyIFA9bmV3IERhdGUoeSksTD1uZXcgRGF0ZShOYU4pLFE9UC5nZXRZZWFyKCkscmU9UC5nZXRNb250aCgpLGdlPVAuZ2V0RGF0ZSgpO3JldHVybiBpc05hTihnZSl8fFE8MHx8'@;
put 'UT44MDk5P0w6KHJlPjB8fGdlPjEpJiYxMDEhPVF8fHkudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKT9QOnkubWF0Y2goL1teLTAtOTosXC9cXF0vKT9MOlB9ZnVuY3Rpb24gJG4oeSxQKXtpZihQJiZQLnJhdyly'@;
put 'ZXR1cm57dDoicyIsdjp5fTtpZigheSlyZXR1cm57dDoieiJ9O2lmKCJUUlVFIj09PXkpcmV0dXJue3Q6ImIiLHY6ITB9O2lmKCJGQUxTRSI9PT15KXJldHVybnt0OiJiIix2OiExfTt2YXIgTD0iIixRPU51bWJlcih5KTtpZihpc0Zpbml0ZShRKSlyZXR1cm57dDoibiIsdjpRfTtpZihpc05h'@;
put 'TihRKSYmL1xkLy50ZXN0KHkpKXt2YXIgcmU9MSxnZT15LnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihudCxkdCxDdCl7cmV0dXJuIEx8fChMPSIjLCMjMCIpLGR0K0N0fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5jdGlvbihudCl7THx8KEw9IjAi'@;
put 'KSxMKz0iLiI7Zm9yKHZhciBkdD0yO2R0PD1udC5sZW5ndGg7KytkdClMKz0iMCI7cmV0dXJuIG50fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gcmUqPTEwMCxMfHwoTD0iMCIpLEwrPSIlIiwiIn0pO2lmKCFpc05hTihRPU51bWJlcihnZSkpKXJldHVybnt0OiJuIix2OlEv'@;
put 'cmUsejpMfTtpZihnZT1nZS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihudCxkdCl7cmV0dXJuIHJlPS1yZSxkdH0pLCFpc05hTihRPU51bWJlcihnZSkpKXJldHVybnt0OiJuIix2OlEvcmUsejooTHx8IjAiKSsiXyk7KCIrKEx8fCIwIikrIik7QCJ9fWU6aWYoIVB8fCFQLnJhd0Rh'@;
put 'dGVzKXt2YXIgX2U9UCYmUC5jZWxsRGF0ZXMsdmU9bmV3IERhdGUoeSksSGU9dmUuZ2V0WWVhcigpLEJlPXZlLmdldE1vbnRoKCksR2U9dmUuZ2V0RGF0ZSgpO2lmKGlzTmFOKEdlKXx8SGU8MHx8SGU+ODA5OSlicmVhayBlO2lmKChCZT4wfHxHZT4xKSYmMTAxIT1IZSlyZXR1cm57dDpfZT8i'@;
put 'ZCI6Im4iLHY6X2U/dmU6VWUodmUpLHo6UC5kYXRlTkZ8fHcuX3RhYmxlWzE0XX07aWYoeS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pKXJldHVybnt0Ol9lPyJkIjoibiIsdjpfZT92ZTpVZSh2ZSksejpQLmRh'@;
put 'dGVORnx8dy5fdGFibGVbMTRdfTtpZih5Lm1hdGNoKC9bXi0wLTk6LFwvXFxdLykpYnJlYWsgZTtyZXR1cm4gdmV9cmV0dXJue3Q6InMiLHY6eX19dmFyIHp0LEhuPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO2Z1bmN0aW9uIGhuKHkpe3JldHVybiBudWxsIT15JiYheX1m'@;
put 'dW5jdGlvbiB3dCh5KXtyZXR1cm4geS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt5LnNsaWNlKDEpfWZ1bmN0aW9uIFh0KHkpe3JldHVybiB5P3kuZGF0YT9VKHkuZGF0YSk6eS5hc05vZGVCdWZmZXImJmhlP1UoeS5hc05vZGVCdWZmZXIoKS50b1N0cmluZygiYmluYXJ5IikpOnkuYXNCaW5h'@;
put 'cnk/VSh5LmFzQmluYXJ5KCkpOnkuX2RhdGEmJnkuX2RhdGEuZ2V0Q29udGVudD9VKFB0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkuX2RhdGEuZ2V0Q29udGVudCgpLDApKSk6eS5jb250ZW50JiZ5LnR5cGU/VShQdCh5LmNvbnRlbnQpKTpudWxsOm51bGx9ZnVuY3Rpb24gX3QoeSl7'@;
put 'aWYoIXkpcmV0dXJuIG51bGw7aWYoeS5kYXRhKXJldHVybiBCKHkuZGF0YSk7aWYoeS5hc05vZGVCdWZmZXImJmhlKXJldHVybiB5LmFzTm9kZUJ1ZmZlcigpO2lmKHkuX2RhdGEmJnkuX2RhdGEuZ2V0Q29udGVudCl7dmFyIFA9eS5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9'@;
put 'PXR5cGVvZiBQP0IoUCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUCl9cmV0dXJuIHkuY29udGVudCYmeS50eXBlP3kuY29udGVudDpudWxsfWZ1bmN0aW9uIG1uKHksUCl7Zm9yKHZhciBMPXkuRnVsbFBhdGhzfHxsdCh5LmZpbGVzKSxRPVAudG9Mb3dlckNhc2UoKSxyZT1RLnJlcGxh'@;
put 'Y2UoL1wvL2csIlxcIiksZ2U9MDtnZTxMLmxlbmd0aDsrK2dlKXt2YXIgX2U9TFtnZV0udG9Mb3dlckNhc2UoKTtpZihRPT1fZXx8cmU9PV9lKXJldHVybiB5LmZpbGVzW0xbZ2VdXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBydCh5LFApe3ZhciBMPW1uKHksUCk7aWYobnVsbD09TCl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZpbGUgIitQKyIgaW4gemlwIik7cmV0dXJuIEx9ZnVuY3Rpb24gSXQoeSxQLEwpe2lmKCFMKXJldHVybiBmdW5jdGlvbiBOdCh5KXtyZXR1cm4geSYmIi5iaW4iPT09eS5uYW1lLnNsaWNlKC00KT9fdCh5KTpYdCh5KX0ocnQoeSxQKSk7aWYoIVApcmV0'@;
put 'dXJuIG51bGw7dHJ5e3JldHVybiBJdCh5LFApfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBRdCh5LFAsTCl7aWYoIUwpcmV0dXJuIFh0KHJ0KHksUCkpO2lmKCFQKXJldHVybiBudWxsO3RyeXtyZXR1cm4gUXQoeSxQKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRHQoeSxQLEwp'@;
put 'e2lmKCFMKXJldHVybiBfdChydCh5LFApKTtpZighUClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIER0KHksUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFl0KHksUCxMKXt5LkZ1bGxQYXRocz9qZS51dGlscy5jZmJfYWRkKHksUCxMKTp5LmZpbGUoUCxMKX1mdW5jdGlvbiB5bigpe3Jl'@;
put 'dHVybiB6dD9uZXcgenQ6amUudXRpbHMuY2ZiX25ldygpfWZ1bmN0aW9uIHhuKHksUCl7dmFyIEw7aWYoenQpc3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOkw9bmV3IHp0KHkse2Jhc2U2NDohMH0pO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlImFycmF5IjpMPW5ldyB6dCh5LHtiYXNlNjQ6'@;
put 'ITF9KTticmVhaztjYXNlImJ1ZmZlciI6TD1uZXcgenQoeSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX1lbHNlIHN3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpMPWplLnJlYWQoeSx7dHlwZToiYmFzZTY0In0pO2JyZWFrO2Nh'@;
put 'c2UiYmluYXJ5IjpMPWplLnJlYWQoeSx7dHlwZToiYmluYXJ5In0pO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpMPWplLnJlYWQoeSx7dHlwZToiYnVmZmVyIn0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9cmV0dXJu'@;
put 'IEx9ZnVuY3Rpb24gc24oeSxQKXtpZigiLyI9PXkuY2hhckF0KDApKXJldHVybiB5LnNsaWNlKDEpO3ZhciBMPVAuc3BsaXQoIi8iKTsiLyIhPVAuc2xpY2UoLTEpJiZMLnBvcCgpO2Zvcih2YXIgUT15LnNwbGl0KCIvIik7MCE9PVEubGVuZ3RoOyl7dmFyIHJlPVEuc2hpZnQoKTsiLi4iPT09'@;
put 'cmU/TC5wb3AoKToiLiIhPT1yZSYmTC5wdXNoKHJlKX1yZXR1cm4gTC5qb2luKCIvIil9dHlwZW9mIEpTWmlwU3luYzwidSImJih6dD1KU1ppcFN5bmMpLGF0LmV4cG9ydHMmJnR5cGVvZiB6dD4idSImJih6dD1GKDc1NDQ2KSk7dmFyIEJuPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n'@;
put 'PSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+XHJcbicsUm49Lyg/OlteIlxzPz5cL10rKVxzKj1ccyooKD86IikoPzpbXiJdKj8pKD86Iil8KD86JykoPzpbXiddKj8pKD86Jyl8KD86W14nIj5cc10rKSkvZywkdD0vPFtcL1w/XT9bYS16QS1aMC05Ol8tXSsoPzpccytbXiJccz8+XC9dK1xz'@;
put 'Kj1ccyooPzoiW14iXSoifCdbXiddKid8W14nIj5ccz1dKykpKlxzP1tcL1w/XT8+L2c7Qm4ubWF0Y2goJHQpfHwoJHQ9LzxbXj5dKj4vZyk7dmFyIEZuPS88XHcqOi8sbmk9LzwoXC8/KVx3KzovO2Z1bmN0aW9uIGxuKHksUCxMKXtmb3IodmFyIFE9e30scmU9MCxnZT0wO3JlIT09eS5sZW5n'@;
put 'dGgmJjMyIT09KGdlPXkuY2hhckNvZGVBdChyZSkpJiYxMCE9PWdlJiYxMyE9PWdlOysrcmUpO2lmKFB8fChRWzBdPXkuc2xpY2UoMCxyZSkpLHJlPT09eS5sZW5ndGgpcmV0dXJuIFE7dmFyIF9lPXkubWF0Y2goUm4pLHZlPTAsU2U9IiIsSGU9MCxCZT0iIixHZT0iIixudD0xO2lmKF9lKWZv'@;
put 'cihIZT0wO0hlIT1fZS5sZW5ndGg7KytIZSl7Zm9yKEdlPV9lW0hlXSxnZT0wO2dlIT1HZS5sZW5ndGgmJjYxIT09R2UuY2hhckNvZGVBdChnZSk7KytnZSk7Zm9yKEJlPUdlLnNsaWNlKDAsZ2UpLnRyaW0oKTszMj09R2UuY2hhckNvZGVBdChnZSsxKTspKytnZTtmb3IobnQ9MzQ9PShyZT1H'@;
put 'ZS5jaGFyQ29kZUF0KGdlKzEpKXx8Mzk9PXJlPzE6MCxTZT1HZS5zbGljZShnZSsxK250LEdlLmxlbmd0aC1udCksdmU9MDt2ZSE9QmUubGVuZ3RoJiY1OCE9PUJlLmNoYXJDb2RlQXQodmUpOysrdmUpO2lmKHZlPT09QmUubGVuZ3RoKUJlLmluZGV4T2YoIl8iKT4wJiYoQmU9QmUuc2xpY2Uo'@;
put 'MCxCZS5pbmRleE9mKCJfIikpKSxRW0JlXT1TZSxMfHwoUVtCZS50b0xvd2VyQ2FzZSgpXT1TZSk7ZWxzZXt2YXIgZHQ9KDU9PT12ZSYmInhtbG5zIj09PUJlLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrQmUuc2xpY2UodmUrMSk7aWYoUVtkdF0mJiJleHQiPT1CZS5zbGljZSh2ZS0zLHZlKSlj'@;
put 'b250aW51ZTtRW2R0XT1TZSxMfHwoUVtkdC50b0xvd2VyQ2FzZSgpXT1TZSl9fXJldHVybiBRfWZ1bmN0aW9uIGpuKHkpe3JldHVybiB5LnJlcGxhY2UobmksIjwkMSIpfXZhciBxcj17IiZxdW90OyI6JyInLCImYXBvczsiOiInIiwiJmd0OyI6Ij4iLCImbHQ7IjoiPCIsIiZhbXA7IjoiJiJ9'@;
put 'LGdpPWJlKHFyKSx4cj1mdW5jdGlvbigpe3ZhciB5PS8mKD86cXVvdHxhcG9zfGd0fGx0fGFtcHwjeD8oW1xkYS1mQS1GXSspKTsvZ2ksUD0vX3goW1xkYS1mQS1GXXs0fSlfL2dpO3JldHVybiBmdW5jdGlvbiBMKFEpe3ZhciByZT1RKyIiLGdlPXJlLmluZGV4T2YoIjwhW0NEQVRBWyIpO2lm'@;
put 'KC0xPT1nZSlyZXR1cm4gcmUucmVwbGFjZSh5LGZ1bmN0aW9uKHZlLFNlKXtyZXR1cm4gcXJbdmVdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFNlLHZlLmluZGV4T2YoIngiKT4tMT8xNjoxMCkpfHx2ZX0pLnJlcGxhY2UoUCxmdW5jdGlvbih2ZSxTZSl7cmV0dXJuIFN0cmluZy5m'@;
put 'cm9tQ2hhckNvZGUocGFyc2VJbnQoU2UsMTYpKX0pO3ZhciBfZT1yZS5pbmRleE9mKCJdXT4iKTtyZXR1cm4gTChyZS5zbGljZSgwLGdlKSkrcmUuc2xpY2UoZ2UrOSxfZSkrTChyZS5zbGljZShfZSszKSl9fSgpLFVpPS9bJjw+JyJdL2csS3I9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAx'@;
put 'Zl0vZyxubz0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBIcih5KXtyZXR1cm4oeSsiIikucmVwbGFjZShubywiX3gwMDVGJCYiKS5yZXBsYWNlKFVpLGZ1bmN0aW9uKEwpe3JldHVybiBnaVtMXX0pLnJlcGxhY2UoS3IsZnVuY3Rpb24oTCl7cmV0dXJuIl94IisoIjAwMCIrTC5jaGFy'@;
put 'Q29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIHFpKHkpe3JldHVybiBIcih5KS5yZXBsYWNlKC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gSmkoeSl7cmV0dXJuIEhyKHkpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBhbz0vW1x1MDAwMC1cdTAw'@;
put 'MWZdL2c7ZnVuY3Rpb24gcm8oeSl7cmV0dXJuKHkrIiIpLnJlcGxhY2UoVWksZnVuY3Rpb24oTCl7cmV0dXJuIGdpW0xdfSkucmVwbGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKGFvLGZ1bmN0aW9uKEwpe3JldHVybiImI3giKygiMDAwIitMLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYp'@;
put 'KS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24gaW8oeSl7cmV0dXJuKHkrIiIpLnJlcGxhY2UoVWksZnVuY3Rpb24oTCl7cmV0dXJuIGdpW0xdfSkucmVwbGFjZShhbyxmdW5jdGlvbihMKXtyZXR1cm4iJiN4IitMLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsi'@;
put 'fSl9dmFyIEdpPWZ1bmN0aW9uKCl7dmFyIHk9LyYjKFxkKyk7L2c7ZnVuY3Rpb24gUChMLFEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFEsMTApKX1yZXR1cm4gZnVuY3Rpb24oUSl7cmV0dXJuIFEucmVwbGFjZSh5LFApfX0oKSxobz1mdW5jdGlvbihQKXtyZXR1cm4g'@;
put 'UC5yZXBsYWNlKC8oXHJcbnxbXHJcbl0pL2csIiYjMTA7Iil9O2Z1bmN0aW9uIHlyKHkpe3N3aXRjaCh5KXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBQaT1mdW5jdGlvbihQKXtmb3IodmFyIEw9IiIs'@;
put 'UT0wLHJlPTAsZ2U9MCxfZT0wLHZlPTAsU2U9MDtRPFAubGVuZ3RoOykocmU9UC5jaGFyQ29kZUF0KFErKykpPDEyOD9MKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJlKTooZ2U9UC5jaGFyQ29kZUF0KFErKykscmU+MTkxJiZyZTwyMjQ/KHZlPSgzMSZyZSk8PDYsdmV8PTYzJmdlLEwrPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUodmUpKTooX2U9UC5jaGFyQ29kZUF0KFErKykscmU8MjQwP0wrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnJlKTw8MTJ8KDYzJmdlKTw8Nnw2MyZfZSk6KFNlPSgoNyZyZSk8PDE4fCg2MyZnZSk8PDEyfCg2MyZfZSk8PDZ8NjMmKHZlPVAuY2hhckNvZGVBdChRKysp'@;
put 'KSktNjU1MzYsTCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoU2U+Pj4xMCYxMDIzKSksTCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZTZSkpKSkpO3JldHVybiBMfSxMbz1mdW5jdGlvbih5KXtmb3IodmFyIFA9W10sTD0wLFE9MCxyZT0wO0w8eS5sZW5ndGg7KXN3aXRj'@;
put 'aChRPXkuY2hhckNvZGVBdChMKyspLCEwKXtjYXNlIFE8MTI4OlAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFEpKTticmVhaztjYXNlIFE8MjA0ODpQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxOTIrKFE+PjYpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZRKSkp'@;
put 'O2JyZWFrO2Nhc2UgUT49NTUyOTYmJlE8NTczNDQ6US09NTUyOTYscmU9eS5jaGFyQ29kZUF0KEwrKyktNTYzMjArKFE8PDEwKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyNDArKHJlPj4xOCY3KSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsocmU+PjEyJjYzKSkpLFAu'@;
put 'cHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsocmU+PjYmNjMpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZyZSkpKTticmVhaztkZWZhdWx0OlAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoUT4+MTIpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUo'@;
put 'MTI4KyhRPj42JjYzKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmUSkpKX1yZXR1cm4gUC5qb2luKCIiKX07aWYoaGUpe3ZhciBocz1mdW5jdGlvbihQKXt2YXIgUSxyZSxTZSxMPUJ1ZmZlci5hbGxvYygyKlAubGVuZ3RoKSxnZT0xLF9lPTAsdmU9MDtmb3IocmU9MDty'@;
put 'ZTxQLmxlbmd0aDtyZSs9Z2UpZ2U9MSwoU2U9UC5jaGFyQ29kZUF0KHJlKSk8MTI4P1E9U2U6U2U8MjI0PyhRPTY0KigzMSZTZSkrKDYzJlAuY2hhckNvZGVBdChyZSsxKSksZ2U9Mik6U2U8MjQwPyhRPTQwOTYqKDE1JlNlKSs2NCooNjMmUC5jaGFyQ29kZUF0KHJlKzEpKSsoNjMmUC5jaGFy'@;
put 'Q29kZUF0KHJlKzIpKSxnZT0zKTooZ2U9NCxRPTI2MjE0NCooNyZTZSkrNDA5NiooNjMmUC5jaGFyQ29kZUF0KHJlKzEpKSs2NCooNjMmUC5jaGFyQ29kZUF0KHJlKzIpKSsoNjMmUC5jaGFyQ29kZUF0KHJlKzMpKSx2ZT01NTI5NisoKFEtPTY1NTM2KT4+PjEwJjEwMjMpLFE9NTYzMjArKDEw'@;
put 'MjMmUSkpLDAhPT12ZSYmKExbX2UrK109MjU1JnZlLExbX2UrK109dmU+Pj44LHZlPTApLExbX2UrK109USUyNTYsTFtfZSsrXT1RPj4+ODtyZXR1cm4gTC5zbGljZSgwLF9lKS50b1N0cmluZygidWNzMiIpfSxycz0iZm9vIGJhciBiYXpceGUyXHg5OFx4ODNceGYwXHg5Zlx4OGRceGEzIjtQ'@;
put 'aShycyk9PWhzKHJzKSYmKFBpPWhzKTt2YXIgUmM9ZnVuY3Rpb24oUCl7cmV0dXJuIHVlKFAsImJpbmFyeSIpLnRvU3RyaW5nKCJ1dGY4Iil9O1BpKHJzKT09UmMocnMpJiYoUGk9UmMpLExvPWZ1bmN0aW9uKHkpe3JldHVybiB1ZSh5LCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfX12YXIg'@;
put 'eSx1bD0oeT17fSxmdW5jdGlvbihMLFEpe3ZhciByZT1MKyJ8IisoUXx8IiIpO3JldHVybiB5W3JlXT95W3JlXTp5W3JlXT1uZXcgUmVnRXhwKCI8KD86XFx3KzopPyIrTCsnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytMKyI+'@;
put 'IixRfHwiIil9KSxPYz1mdW5jdGlvbigpe3ZhciB5PVtbIm5ic3AiLCIgIl0sWyJtaWRkb3QiLCJceGI3Il0sWyJxdW90IiwnIiddLFsiYXBvcyIsIiciXSxbImd0IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAiLCImIl1dLm1hcChmdW5jdGlvbihQKXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIrUFsw'@;
put 'XSsiOyIsImlnIiksUFsxXV19KTtyZXR1cm4gZnVuY3Rpb24oTCl7Zm9yKHZhciBRPUwucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rJC8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4i'@;
put 'KS5yZXBsYWNlKC88W14+XSo+L2csIiIpLHJlPTA7cmU8eS5sZW5ndGg7KytyZSlRPVEucmVwbGFjZSh5W3JlXVswXSx5W3JlXVsxXSk7cmV0dXJuIFF9fSgpLE4wPWZ1bmN0aW9uKCl7dmFyIHk9e307cmV0dXJuIGZ1bmN0aW9uKEwpe3JldHVybiB2b2lkIDAhPT15W0xdP3lbTF06eVtMXT1u'@;
put 'ZXcgUmVnRXhwKCI8KD86dnQ6KT8iK0wrIj4oW1xcc1xcU10qPyk8Lyg/OnZ0Oik/IitMKyI+IiwiZyIpfX0oKSxzMz0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyxrMj0vPCg/OnZ0OikoW14+XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIGUwKHksUCl7dmFyIEw9bG4oeSksUT15Lm1hdGNoKE4w'@;
put 'KEwuYmFzZVR5cGUpKXx8W10scmU9W107aWYoUS5sZW5ndGghPUwuc2l6ZSl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5ndGggIitRLmxlbmd0aCsiICE9ICIrTC5zaXplKTtyZXR1cm4gcmV9cmV0dXJuIFEuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFy'@;
put 'IF9lPWdlLnJlcGxhY2UoczMsIiIpLm1hdGNoKGsyKTtfZSYmcmUucHVzaCh7djpQaShfZVsyXSksdDpfZVsxXX0pfSkscmV9dmFyIHh1PS8oXlxzfFxzJHxcbikvO2Z1bmN0aW9uIGZzKHksUCl7cmV0dXJuIjwiK3krKFAubWF0Y2goeHUpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsi'@;
put 'PiIrUCsiPC8iK3krIj4ifWZ1bmN0aW9uIFBhKHkpe3JldHVybiBsdCh5KS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuIiAiK1ArJz0iJyt5W1BdKyciJ30pLmpvaW4oIiIpfWZ1bmN0aW9uIFNyKHksUCxMKXtyZXR1cm4iPCIreSsobnVsbCE9TD9QYShMKToiIikrKG51bGwhPVA/KFAubWF0Y2go'@;
put 'eHUpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUCsiPC8iK3k6Ii8iKSsiPiJ9ZnVuY3Rpb24gUGgoeSxQKXt0cnl7cmV0dXJuIHkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIpfWNhdGNoKEwpe2lmKFApdGhyb3cgTH1yZXR1cm4iIn12YXIgQXIsYmMsaXM9e2Rj'@;
put 'OiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsZGN0ZXJtczoiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLG14OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9tYWMvZXhjZWwvMjAw'@;
put 'OC9tYWluIixyOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIixzanM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3JlLXByb3BlcnRpZXMiLHZ0OiJodHRw'@;
put 'Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIseHNpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIseHNkOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsbWFpbjpbImh0dHA6'@;
put 'Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9z'@;
put 'Y2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvMiJdfSxXaT17bzoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIix4OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCIsc3M6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206'@;
put 'b2ZmaWNlOnNwcmVhZHNoZWV0IixkdDoidXVpZDpDMkY0MTAxMC02NUIzLTExZDEtQTI5Ri0wMEFBMDBDMTQ4ODIiLG12OiJodHRwOi8vbWFjVm1sU2NoZW1hVXJpIix2OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIsaHRtbDoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0'@;
put 'MCJ9LFNhPWZ1bmN0aW9uKHkpe2Zvcih2YXIgUD1bXSxRPTA7UTx5WzBdLmxlbmd0aDsrK1EpaWYoeVswXVtRXSlmb3IodmFyIHJlPTAsZ2U9eVswXVtRXS5sZW5ndGg7cmU8Z2U7cmUrPTEwMjQwKVAucHVzaC5hcHBseShQLHlbMF1bUV0uc2xpY2UocmUscmUrMTAyNDApKTtyZXR1cm4gUH0s'@;
put 'Rmg9U2EsRXU9ZnVuY3Rpb24oeSxQLEwpe2Zvcih2YXIgUT1bXSxyZT1QO3JlPEw7cmUrPTIpUS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoWW4oeSxyZSkpKTtyZXR1cm4gUS5qb2luKCIiKS5yZXBsYWNlKHYsIiIpfSxBcz1FdSxuMD1mdW5jdGlvbih5LFAsTCl7Zm9yKHZhciBRPVtdLHJl'@;
put 'PVA7cmU8UCtMOysrcmUpUS5wdXNoKCgiMCIreVtyZV0udG9TdHJpbmcoMTYpKS5zbGljZSgtMikpO3JldHVybiBRLmpvaW4oIiIpfSxxYT1uMCxfYz1mdW5jdGlvbih5LFAsTCl7Zm9yKHZhciBRPVtdLHJlPVA7cmU8TDtyZSsrKVEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFFpKHkscmUp'@;
put 'KSk7cmV0dXJuIFEuam9pbigiIil9LEhoPV9jLElzPWZ1bmN0aW9uKHksUCl7dmFyIEw9YmkoeSxQKTtyZXR1cm4gTD4wP19jKHksUCs0LFArNCtMLTEpOiIifSxibz1JcyxyMD1mdW5jdGlvbih5LFApe3ZhciBMPWJpKHksUCk7cmV0dXJuIEw+MD9fYyh5LFArNCxQKzQrTC0xKToiIn0sVDI9'@;
put 'cjAsRDI9ZnVuY3Rpb24oeSxQKXt2YXIgTD0yKmJpKHksUCk7cmV0dXJuIEw+MD9fYyh5LFArNCxQKzQrTC0xKToiIn0sbDM9RDI7QXI9YmM9ZnVuY3Rpb24oUCxMKXt2YXIgUT1iaShQLEwpO3JldHVybiBRPjA/RXUoUCxMKzQsTCs0K1EpOiIifTt2YXIgbzAsSTIsa289ZnVuY3Rpb24oeSxQ'@;
put 'KXt2YXIgTD1iaSh5LFApO3JldHVybiBMPjA/X2MoeSxQKzQsUCs0K0wpOiIifSxDcz1rbztvMD1JMj1mdW5jdGlvbih5LFApe3JldHVybiBmdW5jdGlvbiAkYSh5LFApe2Zvcih2YXIgTD0xLTIqKHlbUCs3XT4+PjcpLFE9KCgxMjcmeVtQKzddKTw8NCkrKHlbUCs2XT4+PjQmMTUpLHJlPTE1'@;
put 'JnlbUCs2XSxnZT01O2dlPj0wOy0tZ2UpcmU9MjU2KnJlK3lbUCtnZV07cmV0dXJuIDIwNDc9PVE/MD09cmU/TCooMS8wKTpOYU46KDA9PVE/UT0tMTAyMjooUS09MTAyMyxyZSs9TWF0aC5wb3coMiw1MikpLEwqTWF0aC5wb3coMixRLTUyKSpyZSl9KHksUCl9O3ZhciBOaD1mdW5jdGlvbihQ'@;
put 'KXtyZXR1cm4gQXJyYXkuaXNBcnJheShQKX07aGUmJihFdT1mdW5jdGlvbih5LFAsTCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih5KT95LnRvU3RyaW5nKCJ1dGYxNmxlIixQLEwpLnJlcGxhY2UodiwiIik6QXMoeSxQLEwpfSxuMD1mdW5jdGlvbih5LFAsTCl7cmV0dXJuIEJ1ZmZlci5pc0J1'@;
put 'ZmZlcih5KT95LnRvU3RyaW5nKCJoZXgiLFAsUCtMKTpxYSh5LFAsTCl9LElzPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gYm8oUCxMKTt2YXIgUT1QLnJlYWRVSW50MzJMRShMKTtyZXR1cm4gUT4wP1AudG9TdHJpbmcoInV0ZjgiLEwrNCxMKzQrUS0xKToi'@;
put 'In0scjA9ZnVuY3Rpb24oUCxMKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBUMihQLEwpO3ZhciBRPVAucmVhZFVJbnQzMkxFKEwpO3JldHVybiBRPjA/UC50b1N0cmluZygidXRmOCIsTCs0LEwrNCtRLTEpOiIifSxEMj1mdW5jdGlvbihQLEwpe2lmKCFCdWZmZXIuaXNCdWZmZXIo'@;
put 'UCkpcmV0dXJuIGwzKFAsTCk7dmFyIFE9MipQLnJlYWRVSW50MzJMRShMKTtyZXR1cm4gUC50b1N0cmluZygidXRmMTZsZSIsTCs0LEwrNCtRLTEpfSxBcj1mdW5jdGlvbihQLEwpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIGJjKFAsTCk7dmFyIFE9UC5yZWFkVUludDMyTEUoTCk7'@;
put 'cmV0dXJuIFAudG9TdHJpbmcoInV0ZjE2bGUiLEwrNCxMKzQrUSl9LGtvPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gQ3MoUCxMKTt2YXIgUT1QLnJlYWRVSW50MzJMRShMKTtyZXR1cm4gUC50b1N0cmluZygidXRmOCIsTCs0LEwrNCtRKX0sX2M9ZnVuY3Rp'@;
put 'b24oUCxMLFEpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUCk/UC50b1N0cmluZygidXRmOCIsTCxRKTpIaChQLEwsUSl9LFNhPWZ1bmN0aW9uKHkpe3JldHVybiB5WzBdLmxlbmd0aD4wJiZCdWZmZXIuaXNCdWZmZXIoeVswXVswXSk/QnVmZmVyLmNvbmNhdCh5WzBdKTpGaCh5KX0sUz1mdW5j'@;
put 'dGlvbih5KXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHlbMF0pP0J1ZmZlci5jb25jYXQoeSk6W10uY29uY2F0LmFwcGx5KFtdLHkpfSxvMD1mdW5jdGlvbihQLEwpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUCk/UC5yZWFkRG91YmxlTEUoTCk6STIoUCxMKX0sTmg9ZnVuY3Rpb24oUCl7cmV0'@;
put 'dXJuIEJ1ZmZlci5pc0J1ZmZlcihQKXx8QXJyYXkuaXNBcnJheShQKX0pLHR5cGVvZiBjcHRhYmxlPCJ1IiYmKEV1PWZ1bmN0aW9uKHksUCxMKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCx5LnNsaWNlKFAsTCkpLnJlcGxhY2UodiwiIil9LF9jPWZ1bmN0aW9uKHksUCxMKXty'@;
put 'ZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEseS5zbGljZShQLEwpKX0sSXM9ZnVuY3Rpb24oeSxQKXt2YXIgTD1iaSh5LFApO3JldHVybiBMPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoUix5LnNsaWNlKFArNCxQKzQrTC0xKSk6IiJ9LHIwPWZ1bmN0aW9uKHksUCl7dmFyIEw9Ymko'@;
put 'eSxQKTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKE8seS5zbGljZShQKzQsUCs0K0wtMSkpOiIifSxEMj1mdW5jdGlvbih5LFApe3ZhciBMPTIqYmkoeSxQKTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAseS5zbGljZShQKzQsUCs0K0wtMSkpOiIifSxBcj1m'@;
put 'dW5jdGlvbih5LFApe3ZhciBMPWJpKHksUCk7cmV0dXJuIEw+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLHkuc2xpY2UoUCs0LFArNCtMKSk6IiJ9LGtvPWZ1bmN0aW9uKHksUCl7dmFyIEw9YmkoeSxQKTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLHkuc2xpY2Uo'@;
put 'UCs0LFArNCtMKSk6IiJ9KTt2YXIgUWk9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQXX0sWW49ZnVuY3Rpb24oeSxQKXtyZXR1cm4gMjU2KnlbUCsxXSt5W1BdfSxfaT1mdW5jdGlvbih5LFApe3ZhciBMPTI1Nip5W1ArMV0reVtQXTtyZXR1cm4gTDwzMjc2OD9MOi0xKig2NTUzNS1MKzEpfSxi'@;
put 'aT1mdW5jdGlvbih5LFApe3JldHVybiB5W1ArM10qKDE8PDI0KSsoeVtQKzJdPDwxNikrKHlbUCsxXTw8OCkreVtQXX0sb3M9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQKzNdPDwyNHx5W1ArMl08PDE2fHlbUCsxXTw8OHx5W1BdfSxGYT1mdW5jdGlvbih5LFApe3JldHVybiB5W1BdPDwyNHx5'@;
put 'W1ArMV08PDE2fHlbUCsyXTw8OHx5W1ArM119O2Z1bmN0aW9uIEhhKHksUCl7dmFyIFEscmUsX2UsdmUsU2UsSGUsTD0iIixnZT1bXTtzd2l0Y2goUCl7Y2FzZSJkYmNzIjppZihIZT10aGlzLmwsaGUmJkJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlMPXRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsy'@;
put 'KnkpLnRvU3RyaW5nKCJ1dGYxNmxlIik7ZWxzZSBmb3IoU2U9MDtTZTx5OysrU2UpTCs9U3RyaW5nLmZyb21DaGFyQ29kZShZbih0aGlzLEhlKSksSGUrPTI7eSo9MjticmVhaztjYXNlInV0ZjgiOkw9X2ModGhpcyx0aGlzLmwsdGhpcy5sK3kpO2JyZWFrO2Nhc2UidXRmMTZsZSI6TD1FdSh0'@;
put 'aGlzLHRoaXMubCx0aGlzLmwrKHkqPTIpKTticmVhaztjYXNlIndzdHIiOmlmKCEodHlwZW9mIGNwdGFibGU8InUiKSlyZXR1cm4gSGEuY2FsbCh0aGlzLHksImRiY3MiKTtMPWNwdGFibGUudXRpbHMuZGVjb2RlKE8sdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqeSkpLHkqPTI7YnJlYWs7'@;
put 'Y2FzZSJscHN0ci1hbnNpIjpMPUlzKHRoaXMsdGhpcy5sKSx5PTQrYmkodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBzdHItY3AiOkw9cjAodGhpcyx0aGlzLmwpLHk9NCtiaSh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHdzdHIiOkw9RDIodGhpcyx0aGlzLmwpLHk9NCsyKmJpKHRoaXMs'@;
put 'dGhpcy5sKTticmVhaztjYXNlImxwcDQiOnk9NCtiaSh0aGlzLHRoaXMubCksTD1Bcih0aGlzLHRoaXMubCksMiZ5JiYoeSs9Mik7YnJlYWs7Y2FzZSI4bHBwNCI6eT00K2JpKHRoaXMsdGhpcy5sKSxMPWtvKHRoaXMsdGhpcy5sKSwzJnkmJih5Kz00LSgzJnkpKTticmVhaztjYXNlImNzdHIi'@;
put 'OmZvcih5PTAsTD0iIjswIT09KF9lPVFpKHRoaXMsdGhpcy5sK3krKykpOylnZS5wdXNoKHEoX2UpKTtMPWdlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZvcih5PTAsTD0iIjswIT09KF9lPVluKHRoaXMsdGhpcy5sK3kpKTspZ2UucHVzaChxKF9lKSkseSs9Mjt5Kz0yLEw9Z2Uuam9p'@;
put 'bigiIik7YnJlYWs7Y2FzZSJkYmNzLWNvbnQiOmZvcihMPSIiLEhlPXRoaXMubCxTZT0wO1NlPHk7KytTZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKEhlKSlyZXR1cm4gX2U9UWkodGhpcyxIZSksdGhpcy5sPUhlKzEsdmU9SGEuY2FsbCh0aGlzLHktU2UsX2U/ImRi'@;
put 'Y3MtY29udCI6InNiY3MtY29udCIpLGdlLmpvaW4oIiIpK3ZlO2dlLnB1c2gocShZbih0aGlzLEhlKSkpLEhlKz0yfUw9Z2Uuam9pbigiIikseSo9MjticmVhaztjYXNlImNwc3RyIjppZih0eXBlb2YgY3B0YWJsZTwidSIpe0w9Y3B0YWJsZS51dGlscy5kZWNvZGUoTyx0aGlzLnNsaWNlKHRo'@;
put 'aXMubCx0aGlzLmwreSkpO2JyZWFrfWNhc2Uic2Jjcy1jb250Ijpmb3IoTD0iIixIZT10aGlzLmwsU2U9MDtTZSE9eTsrK1NlKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YoSGUpKXJldHVybiBfZT1RaSh0aGlzLEhlKSx0aGlzLmw9SGUrMSx2ZT1IYS5jYWxsKHRoaXMs'@;
put 'eS1TZSxfZT8iZGJjcy1jb250Ijoic2Jjcy1jb250IiksZ2Uuam9pbigiIikrdmU7Z2UucHVzaChxKFFpKHRoaXMsSGUpKSksSGUrPTF9TD1nZS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaCh5KXtjYXNlIDE6cmV0dXJuIFE9UWkodGhpcyx0aGlzLmwpLHRoaXMubCsrLFE7Y2FzZSAy'@;
put 'OnJldHVybiBRPSgiaSI9PT1QP19pOlluKSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLFE7Y2FzZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT1QJiYxMjgmdGhpc1t0aGlzLmwrM10/KHJlPWJpKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQscmUpOihRPSh5PjA/b3M6RmEpKHRoaXMsdGhpcy5sKSx0aGlz'@;
put 'LmwrPTQsUSk7Y2FzZSA4OmNhc2UtODppZigiZiI9PT1QKXJldHVybiByZT04PT15P28wKHRoaXMsdGhpcy5sKTpvMChbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0'@;
put 'aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxyZTt5PTg7Y2FzZSAxNjpMPW4wKHRoaXMsdGhpcy5sLHkpfX1yZXR1cm4gdGhpcy5sKz15LEx9dmFyICRvPWZ1bmN0aW9uKHksUCxMKXt5W0xdPTI1NSZQLHlbTCsxXT1QPj4+OCYyNTUseVtMKzJdPVA+Pj4xNiYyNTUseVtM'@;
put 'KzNdPVA+Pj4yNCYyNTV9LFYwPWZ1bmN0aW9uKHksUCxMKXt5W0xdPTI1NSZQLHlbTCsxXT1QPj44JjI1NSx5W0wrMl09UD4+MTYmMjU1LHlbTCszXT1QPj4yNCYyNTV9LERhPWZ1bmN0aW9uKHksUCxMKXt5W0xdPTI1NSZQLHlbTCsxXT1QPj4+OCYyNTV9O2Z1bmN0aW9uIFZoKHksUCxMKXt2'@;
put 'YXIgUT0wLHJlPTA7aWYoImRiY3MiPT09TCl7Zm9yKHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpRGEodGhpcyxQLmNoYXJDb2RlQXQocmUpLHRoaXMubCsyKnJlKTtRPTIqUC5sZW5ndGh9ZWxzZSBpZigic2JjcyI9PT1MKXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09Uilmb3IocmU9MDty'@;
put 'ZSE9UC5sZW5ndGg7KytyZSl7dmFyIGdlPWNwdGFibGUudXRpbHMuZW5jb2RlKFIsUC5jaGFyQXQocmUpKTt0aGlzW3RoaXMubCtyZV09Z2VbMF19ZWxzZSBmb3IoUD1QLnJlcGxhY2UoL1teXHgwMC1ceDdGXS9nLCJfIikscmU9MDtyZSE9UC5sZW5ndGg7KytyZSl0aGlzW3RoaXMubCtyZV09'@;
put 'MjU1JlAuY2hhckNvZGVBdChyZSk7UT1QLmxlbmd0aH1lbHNle2lmKCJoZXgiPT09TCl7Zm9yKDtyZTx5OysrcmUpdGhpc1t0aGlzLmwrK109cGFyc2VJbnQoUC5zbGljZSgyKnJlLDIqcmUrMiksMTYpfHwwO3JldHVybiB0aGlzfWlmKCJ1dGYxNmxlIj09PUwpe3ZhciBfZT1NYXRoLm1pbih0'@;
put 'aGlzLmwreSx0aGlzLmxlbmd0aCk7Zm9yKHJlPTA7cmU8TWF0aC5taW4oUC5sZW5ndGgseSk7KytyZSl7dmFyIHZlPVAuY2hhckNvZGVBdChyZSk7dGhpc1t0aGlzLmwrK109MjU1JnZlLHRoaXNbdGhpcy5sKytdPXZlPj44fWZvcig7dGhpcy5sPF9lOyl0aGlzW3RoaXMubCsrXT0wO3JldHVy'@;
put 'biB0aGlzfXN3aXRjaCh5KXtjYXNlIDE6UT0xLHRoaXNbdGhpcy5sXT0yNTUmUDticmVhaztjYXNlIDI6UT0yLHRoaXNbdGhpcy5sXT0yNTUmUCx0aGlzW3RoaXMubCsxXT0yNTUmKFA+Pj49OCk7YnJlYWs7Y2FzZSAzOlE9Myx0aGlzW3RoaXMubF09MjU1JlAsdGhpc1t0aGlzLmwrMV09MjU1'@;
put 'JihQPj4+PTgpLHRoaXNbdGhpcy5sKzJdPTI1NSYoUD4+Pj04KTticmVhaztjYXNlIDQ6UT00LCRvKHRoaXMsUCx0aGlzLmwpO2JyZWFrO2Nhc2UgODppZihRPTgsImYiPT09TCl7IWZ1bmN0aW9uIHQwKHksUCxMKXt2YXIgUT0oUDwwfHwxL1A9PS0xLzA/MTowKTw8NyxyZT0wLGdlPTAsX2U9'@;
put 'UT8tUDpQO2lzRmluaXRlKF9lKT8wPT1fZT9yZT1nZT0wOihyZT1NYXRoLmZsb29yKE1hdGgubG9nKF9lKS9NYXRoLkxOMiksZ2U9X2UqTWF0aC5wb3coMiw1Mi1yZSkscmU8PS0xMDIzJiYoIWlzRmluaXRlKGdlKXx8Z2U8TWF0aC5wb3coMiw1MikpP3JlPS0xMDIyOihnZS09TWF0aC5wb3co'@;
put 'Miw1MikscmUrPTEwMjMpKToocmU9MjA0NyxnZT1pc05hTihQKT8yNjk4NTowKTtmb3IodmFyIHZlPTA7dmU8PTU7Kyt2ZSxnZS89MjU2KXlbTCt2ZV09MjU1JmdlO3lbTCs2XT0oMTUmcmUpPDw0fDE1JmdlLHlbTCs3XT1yZT4+NHxRfSh0aGlzLFAsdGhpcy5sKTticmVha31jYXNlIDE2OmJy'@;
put 'ZWFrO2Nhc2UtNDpRPTQsVjAodGhpcyxQLHRoaXMubCl9fXJldHVybiB0aGlzLmwrPVEsdGhpc31mdW5jdGlvbiBCaCh5LFApe3ZhciBMPW4wKHRoaXMsdGhpcy5sLHkubGVuZ3RoPj4xKTtpZihMIT09eSl0aHJvdyBuZXcgRXJyb3IoUCsiRXhwZWN0ZWQgIit5KyIgc2F3ICIrTCk7dGhpcy5s'@;
put 'Kz15Lmxlbmd0aD4+MX1mdW5jdGlvbiBvbCh5LFApe3kubD1QLHkucmVhZF9zaGlmdD1IYSx5LmNoaz1CaCx5LndyaXRlX3NoaWZ0PVZofWZ1bmN0aW9uIHljKHksUCl7eS5sKz1QfWZ1bmN0aW9uIHByKHkpe3ZhciBQPUcoeSk7cmV0dXJuIG9sKFAsMCksUH1mdW5jdGlvbiBIbyh5LFAsTCl7'@;
put 'aWYoeSl7dmFyIFEscmUsZ2U7b2woeSx5Lmx8fDApO2Zvcih2YXIgX2U9eS5sZW5ndGgsdmU9MCxTZT0wO3kubDxfZTspezEyOCYodmU9eS5yZWFkX3NoaWZ0KDEpKSYmKHZlPSgxMjcmdmUpKygoMTI3JnkucmVhZF9zaGlmdCgxKSk8PDcpKTt2YXIgSGU9bWZbdmVdfHxtZls2NTUzNV07Zm9y'@;
put 'KGdlPTEyNyYoUT15LnJlYWRfc2hpZnQoMSkpLHJlPTE7cmU8NCYmMTI4JlE7KytyZSlnZSs9KDEyNyYoUT15LnJlYWRfc2hpZnQoMSkpKTw8NypyZTtTZT15LmwrZ2U7dmFyIEJlPShIZS5mfHx5YykoeSxnZSxMKTtpZih5Lmw9U2UsUChCZSxIZS5uLHZlKSlyZXR1cm59fX1mdW5jdGlvbiB3'@;
put 'Yygpe3ZhciB5PVtdLFA9aGU/MjU2OjIwNDgsTD1mdW5jdGlvbihIZSl7dmFyIEJlPXByKEhlKTtyZXR1cm4gb2woQmUsMCksQmV9LFE9TChQKSxyZT1mdW5jdGlvbigpe1EmJihRLmxlbmd0aD5RLmwmJigoUT1RLnNsaWNlKDAsUS5sKSkubD1RLmxlbmd0aCksUS5sZW5ndGg+MCYmeS5wdXNo'@;
put 'KFEpLFE9bnVsbCl9LGdlPWZ1bmN0aW9uKEhlKXtyZXR1cm4gUSYmSGU8US5sZW5ndGgtUS5sP1E6KHJlKCksUT1MKE1hdGgubWF4KEhlKzEsUCkpKX07cmV0dXJue25leHQ6Z2UscHVzaDpmdW5jdGlvbihIZSl7cmUoKSxudWxsPT0oUT1IZSkubCYmKFEubD1RLmxlbmd0aCksZ2UoUCl9LGVu'@;
put 'ZDpmdW5jdGlvbigpe3JldHVybiByZSgpLFNhKFt5XSl9LF9idWZzOnl9fWZ1bmN0aW9uIHVpKHksUCxMLFEpe3ZhciBnZSxyZT0rYjVbUF07aWYoIWlzTmFOKHJlKSl7UXx8KFE9bWZbcmVdLnB8fChMfHxbXSkubGVuZ3RofHwwKSxnZT0xKyhyZT49MTI4PzE6MCkrMSxRPj0xMjgmJisrZ2Us'@;
put 'UT49MTYzODQmJisrZ2UsUT49MjA5NzE1MiYmKytnZTt2YXIgX2U9eS5uZXh0KGdlKTtyZTw9MTI3P19lLndyaXRlX3NoaWZ0KDEscmUpOihfZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JnJlKSksX2Uud3JpdGVfc2hpZnQoMSxyZT4+NykpO2Zvcih2YXIgdmU9MDs0IT12ZTsrK3ZlKXtpZigh'@;
put 'KFE+PTEyOCkpe19lLndyaXRlX3NoaWZ0KDEsUSk7YnJlYWt9X2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZRKSksUT4+PTd9UT4wJiZOaChMKSYmeS5wdXNoKEwpfX1mdW5jdGlvbiBsdSh5LFAsTCl7dmFyIFE9b24oeSk7aWYoUC5zPyhRLmNSZWwmJihRLmMrPVAucy5jKSxRLnJSZWwmJihR'@;
put 'LnIrPVAucy5yKSk6KFEuY1JlbCYmKFEuYys9UC5jKSxRLnJSZWwmJihRLnIrPVAucikpLCFMfHxMLmJpZmY8MTIpe2Zvcig7US5jPj0yNTY7KVEuYy09MjU2O2Zvcig7US5yPj02NTUzNjspUS5yLT02NTUzNn1yZXR1cm4gUX1mdW5jdGlvbiBocih5LFAsTCl7dmFyIFE9b24oeSk7cmV0dXJu'@;
put 'IFEucz1sdShRLnMsUC5zLEwpLFEuZT1sdShRLmUsUC5zLEwpLFF9ZnVuY3Rpb24gTDIoeSxQKXtpZih5LmNSZWwmJnkuYzwwKWZvcih5PW9uKHkpO3kuYzwwOyl5LmMrPVA+OD8xNjM4NDoyNTY7aWYoeS5yUmVsJiZ5LnI8MClmb3IoeT1vbih5KTt5LnI8MDspeS5yKz1QPjg/MTA0ODU3NjpQ'@;
put 'PjU/NjU1MzY6MTYzODQ7aWYoeS5jUmVsJiZ5LmM+PShQPjg/MTYzODQ6MjU2KSlmb3IoeT1vbih5KTt5LmM+PShQPjg/MTYzODQ6MjU2KTspeS5jLT1QPjg/MTYzODQ6MjU2O2lmKHkuclJlbCYmeS5yPj0xMDQ4NTc2KWZvcih5PW9uKHkpO3kucj49MTA0ODU3NjspeS5yLT0xMDQ4NTc2O3Zh'@;
put 'ciBMPWRpKHkpO3JldHVybiF5LmNSZWwmJm51bGwhPXkuY1JlbCYmKEw9ZnVuY3Rpb24gSzcoeSl7cmV0dXJuIHkucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KEwpKSwheS5yUmVsJiZudWxsIT15LnJSZWwmJihMPWZ1bmN0aW9uIG5tKHkpe3JldHVybiB5LnJlcGxhY2UoLyhbQS1aXXxe'@;
put 'KShcZCspJC8sIiQxJCQkMiIpfShMKSksTH1mdW5jdGlvbiBtaSh5LFApe3JldHVybiAwIT15LnMucnx8eS5zLnJSZWx8fHkuZS5yIT0oUC5iaWZmPj0xMj8xMDQ4NTc1OlAuYmlmZj49OD82NTUzNjoxNjM4NCl8fHkuZS5yUmVsPzAhPXkucy5jfHx5LnMuY1JlbHx8eS5lLmMhPShQLmJpZmY+'@;
put 'PTEyPzE2MzgzOjI1NSl8fHkuZS5jUmVsP0wyKHkucyxQLmJpZmYpKyI6IitMMih5LmUsUC5iaWZmKTooeS5zLnJSZWw/IiI6IiQiKStIcyh5LnMucikrIjoiKyh5LmUuclJlbD8iIjoiJCIpK0hzKHkuZS5yKTooeS5zLmNSZWw/IiI6IiQiKStOcyh5LnMuYykrIjoiKyh5LmUuY1JlbD8iIjoi'@;
put 'JCIpK05zKHkuZS5jKX12YXIgeGQ9e307ZnVuY3Rpb24gQjAoeSl7cmV0dXJuIHBhcnNlSW50KGZ1bmN0aW9uIGMzKHkpe3JldHVybiB5LnJlcGxhY2UoL1wkKFxkKykkLywiJDEiKX0oeSksMTApLTF9ZnVuY3Rpb24gSHMoeSl7cmV0dXJuIiIrKHkrMSl9ZnVuY3Rpb24gamgoeSl7Zm9yKHZh'@;
put 'ciBQPWZ1bmN0aW9uIG5zKHkpe3JldHVybiB5LnJlcGxhY2UoL15cJChbQS1aXSkvLCIkMSIpfSh5KSxMPTAsUT0wO1EhPT1QLmxlbmd0aDsrK1EpTD0yNipMK1AuY2hhckNvZGVBdChRKS02NDtyZXR1cm4gTC0xfWZ1bmN0aW9uIE5zKHkpe2lmKHk8MCl0aHJvdyBuZXcgRXJyb3IoImludmFs'@;
put 'aWQgY29sdW1uICIreSk7dmFyIFA9IiI7Zm9yKCsreTt5O3k9TWF0aC5mbG9vcigoeS0xKS8yNikpUD1TdHJpbmcuZnJvbUNoYXJDb2RlKCh5LTEpJTI2KzY1KStQO3JldHVybiBQfWZ1bmN0aW9uIHNzKHkpe2Zvcih2YXIgUD0wLEw9MCxRPTA7UTx5Lmxlbmd0aDsrK1Epe3ZhciByZT15LmNo'@;
put 'YXJDb2RlQXQoUSk7cmU+PTQ4JiZyZTw9NTc/UD0xMCpQKyhyZS00OCk6cmU+PTY1JiZyZTw9OTAmJihMPTI2KkwrKHJlLTY0KSl9cmV0dXJue2M6TC0xLHI6UC0xfX1mdW5jdGlvbiBkaSh5KXtmb3IodmFyIFA9eS5jKzEsTD0iIjtQO1A9KFAtMSkvMjZ8MClMPVN0cmluZy5mcm9tQ2hhckNv'@;
put 'ZGUoKFAtMSklMjYrNjUpK0w7cmV0dXJuIEwrKHkucisxKX1mdW5jdGlvbiBXcyh5KXt2YXIgUD15LmluZGV4T2YoIjoiKTtyZXR1cm4tMT09UD97czpzcyh5KSxlOnNzKHkpfTp7czpzcyh5LnNsaWNlKDAsUCkpLGU6c3MoeS5zbGljZShQKzEpKX19ZnVuY3Rpb24gT28oeSxQKXtyZXR1cm4g'@;
put 'dHlwZW9mIFA+InUifHwibnVtYmVyIj09dHlwZW9mIFA/T28oeS5zLHkuZSk6KCJzdHJpbmciIT10eXBlb2YgeSYmKHk9ZGkoeSkpLCJzdHJpbmciIT10eXBlb2YgUCYmKFA9ZGkoUCkpLHk9PVA/eTp5KyI6IitQKX1mdW5jdGlvbiBPaSh5KXt2YXIgUD1KU09OLnBhcnNlKCd7InMiOnsiYyI6'@;
put 'MCwiciI6MH0sImUiOnsiYyI6MCwiciI6MH19JyksTD0wLFE9MCxyZT0wLGdlPXkubGVuZ3RoO2ZvcihMPTA7UTxnZSYmISgocmU9eS5jaGFyQ29kZUF0KFEpLTY0KTwxfHxyZT4yNik7KytRKUw9MjYqTCtyZTtmb3IoUC5zLmM9LS1MLEw9MDtRPGdlJiYhKChyZT15LmNoYXJDb2RlQXQoUSkt'@;
put 'NDgpPDB8fHJlPjkpOysrUSlMPTEwKkwrcmU7aWYoUC5zLnI9LS1MLFE9PT1nZXx8NTg9PT15LmNoYXJDb2RlQXQoKytRKSlyZXR1cm4gUC5lLmM9UC5zLmMsUC5lLnI9UC5zLnIsUDtmb3IoTD0wO1EhPWdlJiYhKChyZT15LmNoYXJDb2RlQXQoUSktNjQpPDF8fHJlPjI2KTsrK1EpTD0yNipM'@;
put 'K3JlO2ZvcihQLmUuYz0tLUwsTD0wO1EhPWdlJiYhKChyZT15LmNoYXJDb2RlQXQoUSktNDgpPDB8fHJlPjkpOysrUSlMPTEwKkwrcmU7cmV0dXJuIFAuZS5yPS0tTCxQfWZ1bmN0aW9uIHJtKHksUCl7dmFyIEw9ImQiPT15LnQmJlAgaW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPXkueil0cnl7'@;
put 'cmV0dXJuIHkudz13LmZvcm1hdCh5LnosTD9VZShQKTpQKX1jYXRjaHt9dHJ5e3JldHVybiB5Lnc9dy5mb3JtYXQoKHkuWEZ8fHt9KS5udW1GbXRJZHx8KEw/MTQ6MCksTD9VZShQKTpQKX1jYXRjaHtyZXR1cm4iIitQfX1mdW5jdGlvbiBjdSh5LFAsTCl7cmV0dXJuIG51bGw9PXl8fG51bGw9'@;
put 'PXkudHx8InoiPT15LnQ/IiI6dm9pZCAwIT09eS53P3kudzooImQiPT15LnQmJiF5LnomJkwmJkwuZGF0ZU5GJiYoeS56PUwuZGF0ZU5GKSwiZSI9PXkudD9Rb1t5LnZdfHx5LnY6cm0oeSxudWxsPT1QP3kudjpQKSl9ZnVuY3Rpb24gRWQoeSxQKXt2YXIgTD1QJiZQLnNoZWV0P1Auc2hlZXQ6'@;
put 'IlNoZWV0MSIsUT17fTtyZXR1cm4gUVtMXT15LHtTaGVldE5hbWVzOltMXSxTaGVldHM6UX19ZnVuY3Rpb24gczAoeSxQLEwpe3ZhciBRPUx8fHt9LHJlPXk/QXJyYXkuaXNBcnJheSh5KTpRLmRlbnNlO251bGwhPXRlJiZudWxsPT1yZSYmKHJlPXRlKTt2YXIgZ2U9eXx8KHJlP1tdOnt9KSxf'@;
put 'ZT0wLHZlPTA7aWYoZ2UmJm51bGwhPVEub3JpZ2luKXtpZigibnVtYmVyIj09dHlwZW9mIFEub3JpZ2luKV9lPVEub3JpZ2luO2Vsc2V7dmFyIFNlPSJzdHJpbmciPT10eXBlb2YgUS5vcmlnaW4/c3MoUS5vcmlnaW4pOlEub3JpZ2luO19lPVNlLnIsdmU9U2UuY31nZVsiIXJlZiJdfHwoZ2Vb'@;
put 'IiFyZWYiXT0iQTE6QTEiKX12YXIgSGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07aWYoZ2VbIiFyZWYiXSl7dmFyIEJlPU9pKGdlWyIhcmVmIl0pO0hlLnMuYz1CZS5zLmMsSGUucy5yPUJlLnMucixIZS5lLmM9TWF0aC5tYXgoSGUuZS5jLEJlLmUuYyksSGUuZS5yPU1hdGgubWF4'@;
put 'KEhlLmUucixCZS5lLnIpLC0xPT1fZSYmKEhlLmUucj1fZT1CZS5lLnIrMSl9Zm9yKHZhciBHZT0wO0dlIT1QLmxlbmd0aDsrK0dlKWlmKFBbR2VdKXtpZighQXJyYXkuaXNBcnJheShQW0dlXSkpdGhyb3cgbmV3IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJh'@;
put 'eXMiKTtmb3IodmFyIG50PTA7bnQhPVBbR2VdLmxlbmd0aDsrK250KWlmKCEodHlwZW9mIFBbR2VdW250XT4idSIpKXt2YXIgZHQ9e3Y6UFtHZV1bbnRdfSxDdD1fZStHZSxjdD12ZStudDtpZihIZS5zLnI+Q3QmJihIZS5zLnI9Q3QpLEhlLnMuYz5jdCYmKEhlLnMuYz1jdCksSGUuZS5yPEN0'@;
put 'JiYoSGUuZS5yPUN0KSxIZS5lLmM8Y3QmJihIZS5lLmM9Y3QpLCFQW0dlXVtudF18fCJvYmplY3QiIT10eXBlb2YgUFtHZV1bbnRdfHxBcnJheS5pc0FycmF5KFBbR2VdW250XSl8fFBbR2VdW250XWluc3RhbmNlb2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KGR0LnYpJiYoZHQuZj1QW0dlXVtu'@;
put 'dF1bMV0sZHQudj1kdC52WzBdKSxudWxsPT09ZHQudilpZihkdC5mKWR0LnQ9Im4iO2Vsc2UgaWYoUS5udWxsRXJyb3IpZHQudD0iZSIsZHQudj0wO2Vsc2V7aWYoIVEuc2hlZXRTdHVicyljb250aW51ZTtkdC50PSJ6In1lbHNlIm51bWJlciI9PXR5cGVvZiBkdC52P2R0LnQ9Im4iOiJib29s'@;
put 'ZWFuIj09dHlwZW9mIGR0LnY/ZHQudD0iYiI6ZHQudiBpbnN0YW5jZW9mIERhdGU/KGR0Lno9US5kYXRlTkZ8fHcuX3RhYmxlWzE0XSxRLmNlbGxEYXRlcz8oZHQudD0iZCIsZHQudz13LmZvcm1hdChkdC56LFVlKGR0LnYpKSk6KGR0LnQ9Im4iLGR0LnY9VWUoZHQudiksZHQudz13LmZvcm1h'@;
put 'dChkdC56LGR0LnYpKSk6ZHQudD0icyI7ZWxzZSBkdD1QW0dlXVtudF07aWYoZHQmJmR0LmgpdHJ5e2R0LlI9RnUuaHRtbF90b19ycyhkdC5oKSxkdC52PSIiO2Zvcih2YXIgYnQ9MDtidDxkdC5SLmxlbmd0aDsrK2J0KWR0LnYrPWR0LlJbYnRdLnZ8fCIifWNhdGNoe31pZihyZSlnZVtDdF18'@;
put 'fChnZVtDdF09W10pLGdlW0N0XVtjdF0mJmdlW0N0XVtjdF0ucyYmKGR0LnM9Z2VbQ3RdW2N0XS5zKSxnZVtDdF1bY3RdJiZnZVtDdF1bY3RdLnomJihkdC56PWdlW0N0XVtjdF0ueiksZ2VbQ3RdW2N0XT1kdDtlbHNle3ZhciBGdD1kaSh7YzpjdCxyOkN0fSk7Z2VbRnRdJiZnZVtGdF0ucyYm'@;
put 'KGR0LnM9Z2VbRnRdLnMpLGdlW0Z0XSYmZ2VbRnRdLnomJihkdC56PWdlW0Z0XS56KSxnZVtGdF09ZHR9fX1yZXR1cm4gSGUucy5jPDFlNyYmKGdlWyIhcmVmIl09T28oSGUpKSxnZX1mdW5jdGlvbiBrMSh5LFApe3JldHVybiBzMChudWxsLHksUCl9ZnVuY3Rpb24ga3UoeSxQKXtyZXR1cm4g'@;
put 'UHx8KFA9cHIoNCkpLFAud3JpdGVfc2hpZnQoNCx5KSxQfWZ1bmN0aW9uIENjKHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PVA/IiI6eS5yZWFkX3NoaWZ0KFAsImRiY3MiKX1mdW5jdGlvbiByYyh5LFApe3ZhciBMPSExO3JldHVybiBudWxsPT1QJiYoTD0hMCxQPXByKDQr'@;
put 'Mip5Lmxlbmd0aCkpLFAud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aCkseS5sZW5ndGg+MCYmUC53cml0ZV9zaGlmdCgwLHksImRiY3MiKSxMP1Auc2xpY2UoMCxQLmwpOlB9ZnVuY3Rpb24gb20oeSl7cmV0dXJue2ljaDp5LnJlYWRfc2hpZnQoMiksaWZudDp5LnJlYWRfc2hpZnQoMil9fWZ1bmN0'@;
put 'aW9uIGNhKHksUCl7dmFyIEw9eS5sLFE9eS5yZWFkX3NoaWZ0KDEpLHJlPUNjKHkpLGdlPVtdLF9lPXt0OnJlLGg6cmV9O2lmKDEmUSl7Zm9yKHZhciB2ZT15LnJlYWRfc2hpZnQoNCksU2U9MDtTZSE9dmU7KytTZSlnZS5wdXNoKG9tKHkpKTtfZS5yPWdlfWVsc2UgX2Uucj1be2ljaDowLGlm'@;
put 'bnQ6MH1dO3JldHVybiB5Lmw9TCtQLF9lfSFmdW5jdGlvbih5LFApe3ZhciBMO2lmKHR5cGVvZiBjcnlwdG9Ccm93c2VyaWZ5PCJ1IilMPWNyeXB0b0Jyb3dzZXJpZnk7ZWxzZSBpZih0eXBlb2YgUDwidSIpTD1QO2Vsc2UgdHJ5e0w9Rig3NzkwMyl9Y2F0Y2h7TD1udWxsfXkucmM0PWZ1bmN0'@;
put 'aW9uKFEscmUpe3ZhciBnZT1uZXcgQXJyYXkoMjU2KSxfZT0wLHZlPTAsU2U9MCxIZT0wO2Zvcih2ZT0wOzI1NiE9dmU7Kyt2ZSlnZVt2ZV09dmU7Zm9yKHZlPTA7MjU2IT12ZTsrK3ZlKVNlPVNlK2dlW3ZlXStRW3ZlJVEubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxIZT1nZVt2ZV0sZ2Vb'@;
put 'dmVdPWdlW1NlXSxnZVtTZV09SGU7dmU9U2U9MDt2YXIgQmU9RyhyZS5sZW5ndGgpO2ZvcihfZT0wO19lIT1yZS5sZW5ndGg7KytfZSlIZT1nZVt2ZT12ZSsxJjI1NV0sZ2VbdmVdPWdlW1NlPShTZStnZVt2ZV0pJTI1Nl0sZ2VbU2VdPUhlLEJlW19lXT1yZVtfZV1eZ2VbZ2VbdmVdK2dlW1Nl'@;
put 'XSYyNTVdO3JldHVybiBCZX0seS5tZDU9ZnVuY3Rpb24oUSl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjcnlwdG8iKTtyZXR1cm4gTC5jcmVhdGVIYXNoKCJtZDUiKS51cGRhdGUoQnVmZmVyLmZyb20oUSkpLmRpZ2VzdCgiaGV4Iil9fSh4ZCx0eXBlb2YgY3J5cHRvPCJ1'@;
put 'Ij9jcnlwdG86dm9pZCAwKTt2YXIgWDc9Y2E7ZnVuY3Rpb24gdXUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBMKz15LnJlYWRfc2hpZnQoMSk8PDE2LHkubCsrLHtjOlAsaVN0eWxlUmVmOkx9fWZ1bmN0aW9uIEZpKHksUCl7cmV0dXJuIG51bGw9'@;
put 'PVAmJihQPXByKDgpKSxQLndyaXRlX3NoaWZ0KC00LHkuYyksUC53cml0ZV9zaGlmdCgzLHkuaVN0eWxlUmVmfHx5LnMpLFAud3JpdGVfc2hpZnQoMSwwKSxQfWZ1bmN0aW9uIGEwKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gUCs9eS5yZWFkX3NoaWZ0KDEpPDwxNix5LmwrKyx7'@;
put 'YzotMSxpU3R5bGVSZWY6UH19ZnVuY3Rpb24gS2MoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9cHIoNCkpLFAud3JpdGVfc2hpZnQoMyx5LmlTdHlsZVJlZnx8eS5zKSxQLndyaXRlX3NoaWZ0KDEsMCksUH12YXIgemg9Q2Msc209cmM7ZnVuY3Rpb24gQXUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0'@;
put 'KDQpO3JldHVybiAwPT09UHx8NDI5NDk2NzI5NT09PVA/IiI6eS5yZWFkX3NoaWZ0KFAsImRiY3MiKX1mdW5jdGlvbiBBZCh5LFApe3ZhciBMPSExO3JldHVybiBudWxsPT1QJiYoTD0hMCxQPXByKDEyNykpLFAud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aD4wP3kubGVuZ3RoOjQyOTQ5NjcyOTUp'@;
put 'LHkubGVuZ3RoPjAmJlAud3JpdGVfc2hpZnQoMCx5LCJkYmNzIiksTD9QLnNsaWNlKDAsUC5sKTpQfXZhciBkdT1DYyxUMT1BdSxQYz1BZDtmdW5jdGlvbiBYYyh5KXt2YXIgUD15LnNsaWNlKHkubCx5LmwrNCksTD0xJlBbMF0sUT0yJlBbMF07eS5sKz00LFBbMF0mPTI1Mjt2YXIgcmU9MD09'@;
put 'PVE/bzAoWzAsMCwwLDAsUFswXSxQWzFdLFBbMl0sUFszXV0sMCk6b3MoUCwwKT4+MjtyZXR1cm4gTD9yZS8xMDA6cmV9ZnVuY3Rpb24gU3MoeSxQKXtudWxsPT1QJiYoUD1wcig0KSk7dmFyIEw9MCxRPTAscmU9MTAwKnk7aWYoeT09KDB8eSkmJnk+PS0oMTw8MjkpJiZ5PDE8PDI5P1E9MTpy'@;
put 'ZT09KDB8cmUpJiZyZT49LSgxPDwyOSkmJnJlPDE8PDI5JiYoUT0xLEw9MSksIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBSa051bWJlciAiK3kpO1Aud3JpdGVfc2hpZnQoLTQsKChMP3JlOnkpPDwyKSsoTCsyKSl9ZnVuY3Rpb24gVGQoeSl7dmFyIFA9e3M6e30sZTp7fX07cmV0'@;
put 'dXJuIFAucy5yPXkucmVhZF9zaGlmdCg0KSxQLmUucj15LnJlYWRfc2hpZnQoNCksUC5zLmM9eS5yZWFkX3NoaWZ0KDQpLFAuZS5jPXkucmVhZF9zaGlmdCg0KSxQfXZhciBKYz1UZCxEMT1mdW5jdGlvbiBVaCh5LFApe3JldHVybiBQfHwoUD1wcigxNikpLFAud3JpdGVfc2hpZnQoNCx5LnMu'@;
put 'ciksUC53cml0ZV9zaGlmdCg0LHkuZS5yKSxQLndyaXRlX3NoaWZ0KDQseS5zLmMpLFAud3JpdGVfc2hpZnQoNCx5LmUuYyksUH07ZnVuY3Rpb24gbDAoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdLFE9MDtRPFA7KytRKXt2YXIgcmU9SmMoeSk7TC5wdXNoKE9vKHJlKSl9cmV0'@;
put 'dXJuIEwuam9pbigiLCIpfWZ1bmN0aW9uIG1hKHkpe2lmKHkubGVuZ3RoLXkubDw4KXRocm93IlhMUyBYbnVtIEJ1ZmZlciB1bmRlcmZsb3ciO3JldHVybiB5LnJlYWRfc2hpZnQoOCwiZiIpfWZ1bmN0aW9uIEZjKHksUCl7cmV0dXJuKFB8fHByKDgpKS53cml0ZV9zaGlmdCg4LHksImYiKX1m'@;
put 'dW5jdGlvbiBEZCh5KXt2YXIgUD17fSxRPXkucmVhZF9zaGlmdCgxKT4+PjEscmU9eS5yZWFkX3NoaWZ0KDEpLGdlPXkucmVhZF9zaGlmdCgyLCJpIiksX2U9eS5yZWFkX3NoaWZ0KDEpLHZlPXkucmVhZF9zaGlmdCgxKSxTZT15LnJlYWRfc2hpZnQoMSk7c3dpdGNoKHkubCsrLFEpe2Nhc2Ug'@;
put 'MDpQLmF1dG89MTticmVhaztjYXNlIDE6UC5pbmRleD1yZTt2YXIgSGU9Q3JbcmVdO0hlJiYoUC5yZ2I9ejEoSGUpKTticmVhaztjYXNlIDI6UC5yZ2I9ejEoW19lLHZlLFNlXSk7YnJlYWs7Y2FzZSAzOlAudGhlbWU9cmV9cmV0dXJuIDAhPWdlJiYoUC50aW50PWdlPjA/Z2UvMzI3Njc6Z2Uv'@;
put 'MzI3NjgpLFB9ZnVuY3Rpb24gUjIoeSxQKXtpZihQfHwoUD1wcig4KSksIXl8fHkuYXV0bylyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQO251bGwhPXkuaW5kZXg/KFAud3JpdGVfc2hpZnQoMSwyKSxQLndyaXRlX3NoaWZ0KDEseS5pbmRleCkpOm51bGwh'@;
put 'PXkudGhlbWU/KFAud3JpdGVfc2hpZnQoMSw2KSxQLndyaXRlX3NoaWZ0KDEseS50aGVtZSkpOihQLndyaXRlX3NoaWZ0KDEsNSksUC53cml0ZV9zaGlmdCgxLDApKTt2YXIgTD15LnRpbnR8fDA7aWYoTD4wP0wqPTMyNzY3Okw8MCYmKEwqPTMyNzY4KSxQLndyaXRlX3NoaWZ0KDIsTCkseS5y'@;
put 'Z2ImJm51bGw9PXkudGhlbWUpe3ZhciBRPXkucmdifHwiRkZGRkZGIjsibnVtYmVyIj09dHlwZW9mIFEmJihRPSgiMDAwMDAwIitRLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpKSxQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoUS5zbGljZSgwLDIpLDE2KSksUC53cml0ZV9zaGlmdCgxLHBhcnNl'@;
put 'SW50KFEuc2xpY2UoMiw0KSwxNikpLFAud3JpdGVfc2hpZnQoMSxwYXJzZUludChRLnNsaWNlKDQsNiksMTYpKSxQLndyaXRlX3NoaWZ0KDEsMjU1KX1lbHNlIFAud3JpdGVfc2hpZnQoMiwwKSxQLndyaXRlX3NoaWZ0KDEsMCksUC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBQfWZ1bmN0aW9u'@;
put 'IGY0KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sKysse2ZCb2xkOjEmUCxmSXRhbGljOjImUCxmVW5kZXJsaW5lOjQmUCxmU3RyaWtlb3V0OjgmUCxmT3V0bGluZToxNiZQLGZTaGFkb3c6MzImUCxmQ29uZGVuc2U6NjQmUCxmRXh0ZW5kOjEyOCZQfX1mdW5jdGlvbiBwNCh5'@;
put 'LFApe3ZhciBRPXkucmVhZF9zaGlmdCg0KTtzd2l0Y2goUSl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpjYXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNUIiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W3kucmVhZF9zaGlmdCg0KV18fCIi'@;
put 'fWlmKFE+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiAiK1EudG9TdHJpbmcoMTYpKTtyZXR1cm4geS5sLT00LHkucmVhZF9zaGlmdCgwLDE9PVA/Imxwc3RyIjoibHB3c3RyIil9dmFyIHUzPTIsTWE9MyxIYz0xMixhbT04MSx0OT1bODAsYW1dLF80PXsxOntu'@;
put 'OiJDb2RlUGFnZSIsdDp1M30sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4MH0sNDp7bjoiQnl0ZUNvdW50Iix0Ok1hfSw1OntuOiJMaW5lQ291bnQiLHQ6TWF9LDY6e246IlBhcmFncmFwaENvdW50Iix0Ok1hfSw3OntuOiJTbGlkZUNvdW50Iix0'@;
put 'Ok1hfSw4OntuOiJOb3RlQ291bnQiLHQ6TWF9LDk6e246IkhpZGRlbkNvdW50Iix0Ok1hfSwxMDp7bjoiTXVsdGltZWRpYUNsaXBDb3VudCIsdDpNYX0sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRpbmdQYWlycyIsdDo0MDk2fEhjfSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIs'@;
put 'dDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9EYXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6TWF9LDE5OntuOiJTaGFyZWREb2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0s'@;
put 'MjM6e246IkFwcFZlcnNpb24iLHQ6TWEscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9LDI2OntuOiJDb250ZW50VHlwZSIsdDo4MH0sMjc6e246IkNvbnRlbnRTdGF0dXMiLHQ6ODB9LDI4OntuOiJMYW5ndWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwy'@;
put 'MTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSx3cj17MTp7bjoiQ29kZVBhZ2UiLHQ6dTN9LDI6e246IlRpdGxlIix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246'@;
put 'IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxhc3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJD'@;
put 'cmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDpNYX0sMTU6e246IldvcmRDb3VudCIsdDpNYX0sMTY6e246IkNoYXJDb3VudCIsdDpNYX0sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0Ojgw'@;
put 'fSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6TWF9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxiND1QZShfNCwibiIpLHk0PVBlKHdyLCJuIiksbG09ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJS'@;
put 'VSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2'@;
put 'OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2'@;
put 'NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LHZpPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJr'@;
put 'VXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiB3NCh5KXtyZXR1cm4geS5tYXAoZnVu'@;
put 'Y3Rpb24oUCl7cmV0dXJuW1A+PjE2JjI1NSxQPj44JjI1NSwyNTUmUF19KX12YXIgaDM9dzQoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgz'@;
put 'ODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYw'@;
put 'OCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEz'@;
put 'MDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pLENyPW9uKGgzKSxOYT13NChbMTI2MzIyNTYsOTg2ODk1MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwx'@;
put 'MzM2OTQ5NywxMjgsMzM5NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgsMTQ1Mzk5OTQsMTMwNjg4NTAsMTM5MjQzNTIsOTk2NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4'@;
put 'OTksNzQ5NDY0LDI4OTM0NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAsNzM2MzMyOCw5NTE0NTg4LDgyODg2MTcsMzAzNjgxNCwxMTE4NDgxMF0pLFFvPXswOiIjTlVMTCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5'@;
put 'OiIjTkFNRT8iLDM2OiIjTlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0sS2E9QWUoUW8pLE9sPXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3Mi'@;
put 'LCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm'@;
put 'b3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWwiOiJjdXN0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2Zm'@;
put 'aWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0aWVzK3htbCI6ImN1c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3Jt'@;
put 'YXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5w'@;
put 'aXZvdFRhYmxlK3htbCI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiY2hhcnRvYmpzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMi'@;
put 'LCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgreG1sIjoiY2hhcnRleHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxp'@;
put 'Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9E'@;
put 'TyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1l'@;
put 'eGNlbC5jb25uZWN0aW9ucyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBs'@;
put 'aWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2Zm'@;
put 'aWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24iOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90'@;
put 'cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNo'@;
put 'ZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwi'@;
put 'OiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25IZWFkZXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'b3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNh'@;
put 'dGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmdsZUNlbGxzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5z'@;
put 'bGljZXIreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndzU29ydE1hcCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlv'@;
put 'bi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3Jt'@;
put 'YXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1v'@;
put 'ZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0'@;
put 'cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiY3RybHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv'@;
put 'Y3VtZW50Lm1vZGVsK2RhdGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'b3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5v'@;
put 'cGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9w'@;
put 'ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNr'@;
put 'YWdlLnJlbGF0aW9uc2hpcHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5vbGVPYmplY3QiOiJUT0RPIiwiaW1hZ2UvcG5nIjoiVE9ETyIsc2hlZXQ6ImpzIn0sSWQ9ZnVuY3Rpb24oKXt2YXIgeT17d29ya2Jvb2tzOnt4bHN4OiJh'@;
put 'cHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIseGxzbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs'@;
put 'LnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGx0eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxh'@;
put 'dGUubWFpbit4bWwifSxzdHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxz'@;
put 'eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMifSxzaGVldHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1v'@;
put 'ZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53b3Jrc2hlZXQifSxjaGFydHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0'@;
put 'c2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24v'@;
put 'dm5kLm1zLWV4Y2VsLmRpYWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZv'@;
put 'cm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSJ9LHBpdm90czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RU'@;
put 'YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoi'@;
put 'YXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0'@;
put 'aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0'@;
put 'aW9ucyJ9LGxpbmtzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNh'@;
put 'dGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc3R5bGVzIn19O3JldHVybiBsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKFApe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKEwpe3lbUF1bTF18fCh5W1BdW0xdPXlbUF0ueGxzeCl9KX0pLGx0KHkpLmZvckVhY2goZnVuY3Rpb24oUCl7bHQoeVtQXSkuZm9yRWFjaChmdW5jdGlvbihMKXtPbFt5W1BdW0xdXT1QfSl9KSx5fSgpLE5jPWZ1bmN0aW9uIFRlKHkpe2Zvcih2YXIgUD1bXSxMPWx0KHkpLFE9MDtR'@;
put 'IT09TC5sZW5ndGg7KytRKW51bGw9PVBbeVtMW1FdXV0mJihQW3lbTFtRXV1dPVtdKSxQW3lbTFtRXV1dLnB1c2goTFtRXSk7cmV0dXJuIFB9KE9sKTtpcy5DVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIjt2YXIgZjM9U3Io'@;
put 'IlR5cGVzIixudWxsLHt4bWxuczppcy5DVCwieG1sbnM6eHNkIjppcy54c2QsInhtbG5zOnhzaSI6aXMueHNpfSksbjk9W1sieG1sIiwiYXBwbGljYXRpb24veG1sIl0sWyJiaW4iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIl0sWyJ2'@;
put 'bWwiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyJdLFsiZGF0YSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIl0sWyJibXAiLCJpbWFnZS9ibXAiXSxbInBuZyIsImltYWdl'@;
put 'L3BuZyJdLFsiZ2lmIiwiaW1hZ2UvZ2lmIl0sWyJlbWYiLCJpbWFnZS94LWVtZiJdLFsid21mIiwiaW1hZ2UveC13bWYiXSxbImpwZyIsImltYWdlL2pwZWciXSxbImpwZWciLCJpbWFnZS9qcGVnIl0sWyJ0aWYiLCJpbWFnZS90aWZmIl0sWyJ0aWZmIiwiaW1hZ2UvdGlmZiJdLFsicGRmIiwi'@;
put 'YXBwbGljYXRpb24vcGRmIl0sWyJyZWxzIixOYy5yZWxzWzBdXV0ubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBTcigiRGVmYXVsdCIsbnVsbCx7RXh0ZW5zaW9uOnlbMF0sQ29udGVudFR5cGU6eVsxXX0pfSksSGk9e1dCOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNl'@;
put 'RG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixTSEVFVDoiaHR0cDovL3NoZWV0anMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsSExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxm'@;
put 'b3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixWTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdm1sRHJhd2luZyIsWFBBVEg6Imh0dHA6Ly9zY2hlbWFzLm9w'@;
put 'ZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rUGF0aCIsWE1JU1M6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bEV4dGVybmFsTGlua1BhdGgveGxQYXRoTWlzc2luZyIs'@;
put 'WExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rIixDWE1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1'@;
put 'c3RvbVhtbCIsQ1hNTFA6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sUHJvcHMiLFZCQToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVBy'@;
put 'b2plY3QifTtmdW5jdGlvbiBCaSh5KXt2YXIgUD15Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIHkuc2xpY2UoMCxQKzEpKyJfcmVscy8iK3kuc2xpY2UoUCsxKSsiLnJlbHMifWZ1bmN0aW9uIERvKHksUCl7dmFyIEw9eyIhaWQiOnt9fTtpZigheSlyZXR1cm4gTDsiLyIhPT1QLmNoYXJBdCgw'@;
put 'KSYmKFA9Ii8iK1ApO3ZhciBRPXt9O3JldHVybih5Lm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBnZT1sbihyZSk7aWYoIjxSZWxhdGlvbnNoaXAiPT09Z2VbMF0pe3ZhciBfZT17fTtfZS5UeXBlPWdlLlR5cGUsX2UuVGFyZ2V0PWdlLlRhcmdldCxfZS5JZD1nZS5J'@;
put 'ZCxfZS5UYXJnZXRNb2RlPWdlLlRhcmdldE1vZGU7dmFyIHZlPSJFeHRlcm5hbCI9PT1nZS5UYXJnZXRNb2RlP2dlLlRhcmdldDpzbihnZS5UYXJnZXQsUCk7TFt2ZV09X2UsUVtnZS5JZF09X2V9fSksTFsiIWlkIl09USxMfWlzLlJFTFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRz'@;
put 'Lm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyI7dmFyIHVhPVNyKCJSZWxhdGlvbnNoaXBzIixudWxsLHt4bWxuczppcy5SRUxTfSk7ZnVuY3Rpb24gWGEoeSl7dmFyIFA9W0JuLHVhXTtyZXR1cm4gbHQoeVsiIWlkIl0pLmZvckVhY2goZnVuY3Rpb24oTCl7UFtQLmxlbmd0aF09U3Io'@;
put 'IlJlbGF0aW9uc2hpcCIsbnVsbCx5WyIhaWQiXVtMXSl9KSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvUmVsYXRpb25zaGlwcz4iLFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX12YXIgSTE9W0hpLkhMSU5LLEhpLlhQQVRILEhpLlhNSVNTXTtmdW5jdGlvbiB6'@;
put 'byh5LFAsTCxRLHJlLGdlKXtpZihyZXx8KHJlPXt9KSx5WyIhaWQiXXx8KHlbIiFpZCJdPXt9KSxQPDApZm9yKFA9MTt5WyIhaWQiXVsicklkIitQXTsrK1ApO2lmKHJlLklkPSJySWQiK1AscmUuVHlwZT1RLHJlLlRhcmdldD1MLGdlP3JlLlRhcmdldE1vZGU9Z2U6STEuaW5kZXhPZihyZS5U'@;
put 'eXBlKT4tMSYmKHJlLlRhcmdldE1vZGU9IkV4dGVybmFsIikseVsiIWlkIl1bcmUuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3JpdGUgcklkICIrUCk7cmV0dXJuIHlbIiFpZCJdW3JlLklkXT1yZSx5WygiLyIrcmUuVGFyZ2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09cmUsUH12YXIg'@;
put 'VHU9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiO2Z1bmN0aW9uIEwxKHksUCxMKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicreSsnIj5cbicsJyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9jcy5vYXNp'@;
put 'cy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvJysoTHx8Im9kZiIpKyIjIitQKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1mdW5jdGlvbiBWbyh5LFApe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJyt5KyciPlxuJywnICAgIDxu'@;
put 'czA6aGFzUGFydCB4bWxuczpuczA9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicrUCsnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9dmFyIFM0PWZ1bmN0aW9uKCl7dmFyIHk9JzxvZmZp'@;
put 'Y2U6ZG9jdW1lbnQtbWV0YSB4bWxuczpvZmZpY2U9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9y'@;
put 'Zy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldEpTICcrTS52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+'@;
put 'PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB5fX0oKSxQbD1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlm'@;
put 'aWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRj'@;
put 'OmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9k'@;
put 'aWZpZWREYXRlIiwiZGF0ZSJdXTtpcy5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIsSGkuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2Uv'@;
put 'MjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyI7dmFyIEphPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PW5ldyBBcnJheShQbC5sZW5ndGgpLFA9MDtQPFBsLmxlbmd0aDsrK1Ape3ZhciBMPVBsW1BdLFE9Iig/OiIrTFswXS5zbGljZSgwLExbMF0uaW5kZXhPZigiOiIp'@;
put 'KSsiOikiK0xbMF0uc2xpY2UoTFswXS5pbmRleE9mKCI6IikrMSk7eVtQXT1uZXcgUmVnRXhwKCI8IitRKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrUSsiPiIpfXJldHVybiB5fSgpO2Z1bmN0aW9uIE8yKHkpe3ZhciBQPXt9O3k9UGkoeSk7Zm9yKHZhciBMPTA7TDxQbC5sZW5ndGg7KytMKXt2'@;
put 'YXIgUT1QbFtMXSxyZT15Lm1hdGNoKEphW0xdKTtudWxsIT1yZSYmcmUubGVuZ3RoPjAmJihQW1FbMV1dPXhyKHJlWzFdKSksImRhdGUiPT09UVsyXSYmUFtRWzFdXSYmKFBbUVsxXV09SHQoUFtRWzFdXSkpfXJldHVybiBQfXZhciBQMj1TcigiY3A6Y29yZVByb3BlcnRpZXMiLG51bGwseyJ4'@;
put 'bWxuczpjcCI6aXMuQ09SRV9QUk9QUywieG1sbnM6ZGMiOmlzLmRjLCJ4bWxuczpkY3Rlcm1zIjppcy5kY3Rlcm1zLCJ4bWxuczpkY21pdHlwZSI6aXMuZGNtaXR5cGUsInhtbG5zOnhzaSI6aXMueHNpfSk7ZnVuY3Rpb24gaHUoeSxQLEwsUSxyZSl7bnVsbCE9cmVbeV18fG51bGw9PVB8fCIi'@;
put 'PT09UHx8KHJlW3ldPVAsUD1IcihQKSxRW1EubGVuZ3RoXT1MP1NyKHksUCxMKTpmcyh5LFApKX12YXIgUjE9W1siQXBwbGljYXRpb24iLCJBcHBsaWNhdGlvbiIsInN0cmluZyJdLFsiQXBwVmVyc2lvbiIsIkFwcFZlcnNpb24iLCJzdHJpbmciXSxbIkNvbXBhbnkiLCJDb21wYW55Iiwic3Ry'@;
put 'aW5nIl0sWyJEb2NTZWN1cml0eSIsIkRvY1NlY3VyaXR5Iiwic3RyaW5nIl0sWyJNYW5hZ2VyIiwiTWFuYWdlciIsInN0cmluZyJdLFsiSHlwZXJsaW5rc0NoYW5nZWQiLCJIeXBlcmxpbmtzQ2hhbmdlZCIsImJvb2wiXSxbIlNoYXJlZERvYyIsIlNoYXJlZERvYyIsImJvb2wiXSxbIkxpbmtz'@;
put 'VXBUb0RhdGUiLCJMaW5rc1VwVG9EYXRlIiwiYm9vbCJdLFsiU2NhbGVDcm9wIiwiU2NhbGVDcm9wIiwiYm9vbCJdLFsiSGVhZGluZ1BhaXJzIiwiSGVhZGluZ1BhaXJzIiwicmF3Il0sWyJUaXRsZXNPZlBhcnRzIiwiVGl0bGVzT2ZQYXJ0cyIsInJhdyJdXTtmdW5jdGlvbiB1MCh5LFAsTCxR'@;
put 'KXt2YXIgcmU9W107aWYoInN0cmluZyI9PXR5cGVvZiB5KXJlPWUwKHksUSk7ZWxzZSBmb3IodmFyIGdlPTA7Z2U8eS5sZW5ndGg7KytnZSlyZT1yZS5jb25jYXQoeVtnZV0ubWFwKGZ1bmN0aW9uKEJlKXtyZXR1cm57djpCZX19KSk7dmFyIF9lPSJzdHJpbmciPT10eXBlb2YgUD9lMChQLFEp'@;
put 'Lm1hcChmdW5jdGlvbihCZSl7cmV0dXJuIEJlLnZ9KTpQLHZlPTAsU2U9MDtpZihfZS5sZW5ndGg+MClmb3IodmFyIEhlPTA7SGUhPT1yZS5sZW5ndGg7SGUrPTIpe3N3aXRjaChTZT0rcmVbSGUrMV0udixyZVtIZV0udil7Y2FzZSJXb3Jrc2hlZXRzIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2'@;
put 'OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NVx1MDY0NCI6Y2FzZSJcdTMwZWZcdTMwZmNcdTMwYWZcdTMwYjdcdTMwZmNcdTMwYzgiOmNhc2UiXHUwNWQyXHUw'@;
put 'NWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2FzZSJceGM3YWxcdTAxMzFcdTAxNWZtYSBTYXlmYWxhclx1MDEzMSI6Y2FzZSJGZXVpbGxlcyBkZSBjYWxjdWwiOmNhc2UiRm9n'@;
put 'bGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxjdWxvIjpjYXNlIldlcmtibGFkZW4iOkwuV29ya3NoZWV0cz1TZSxMLlNoZWV0TmFtZXM9X2Uuc2xpY2UodmUsdmUrU2UpO2Jy'@;
put 'ZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2FzZSJCZW5hbm50ZSBCZXJlaWNoZSI6Y2FzZSJOYXZuZ2l2bmUgb21yXHhlNWRlciI6TC5OYW1lZFJhbmdlcz1TZSxMLkRlZmlu'@;
put 'ZWROYW1lcz1fZS5zbGljZSh2ZSx2ZStTZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpMLkNoYXJ0c2hlZXRzPVNlLEwuQ2hhcnROYW1lcz1fZS5zbGljZSh2ZSx2ZStTZSl9dmUrPVNlfX1pcy5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y'@;
put 'Zy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLEhpLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0aWVzIjt2YXIgZzM9U3IoIlByb3BlcnRp'@;
put 'ZXMiLG51bGwse3htbG5zOmlzLkVYVF9QUk9QUywieG1sbnM6dnQiOmlzLnZ0fSk7aXMuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvY3VzdG9tLXByb3BlcnRpZXMiLEhpLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFz'@;
put 'Lm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBBdz0vPFtePl0rPltePF0qL2csdW09U3IoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOmlzLkNVU1RfUFJPUFMsInhtbG5zOnZ0Ijppcy52dH0pO3ZhciBG'@;
put 'Mj17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24iLExhc3RBdXRob3I6Ikxhc3RBdXRob3IiLFJldk51bWJlcjoiUmV2aXNpb24iLEFwcGxpY2F0aW9uOiJBcHBOYW1lIixMYXN0'@;
put 'UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5hZ2VyOiJNYW5hZ2VyIixDb21wYW55OiJDb21wYW55IixBcHBWZXJzaW9uOiJWZXJzaW9uIixDb250ZW50U3RhdHVzOiJDb250'@;
put 'ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxIMj1iZShGMik7ZnVuY3Rpb24gUmQoeSxQLEwpe3lbUD1IMltQXXx8UF09TH1mdW5jdGlvbiBTYyh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCksTD15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIG5l'@;
put 'dyBEYXRlKDFlMyooTC8xZTcqTWF0aC5wb3coMiwzMikrUC8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rpb24gT2QoeSxQLEwpe3ZhciBRPXkubCxyZT15LnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihMKWZvcig7eS5sLVEmMzsp'@;
put 'Kyt5Lmw7cmV0dXJuIHJlfWZ1bmN0aW9uIFAxKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoMCwibHB3c3RyIik7cmV0dXJuIEwmJih5LmwrPTQtKFEubGVuZ3RoKzEmMykmMyksUX1mdW5jdGlvbiBxaCh5LFAsTCl7cmV0dXJuIDMxPT09UD9QMSh5KTpPZCh5LDAsTCl9ZnVuY3Rpb24gUWMo'@;
put 'eSxQLEwpe3JldHVybiBxaCh5LFAsITE9PT1MPzA6NCl9ZnVuY3Rpb24gczkoeSl7dmFyIFA9eS5sLEw9RTQoeSxhbSk7cmV0dXJuIDA9PXlbeS5sXSYmMD09eVt5LmwrMV0mJnkubC1QJjImJih5LmwrPTIpLFtMLEU0KHksTWEpXX1mdW5jdGlvbiBkbSh5LFApe2Zvcih2YXIgTD15LnJlYWRf'@;
put 'c2hpZnQoNCksUT17fSxyZT0wO3JlIT1MOysrcmUpe3ZhciBnZT15LnJlYWRfc2hpZnQoNCksX2U9eS5yZWFkX3NoaWZ0KDQpO1FbZ2VdPXkucmVhZF9zaGlmdChfZSwxMjAwPT09UD8idXRmMTZsZSI6InV0ZjgiKS5yZXBsYWNlKHYsIiIpLnJlcGxhY2UocCwiISIpLDEyMDA9PT1QJiZfZSUy'@;
put 'JiYoeS5sKz0yKX1yZXR1cm4gMyZ5LmwmJih5Lmw9eS5sPj4zPDwyKSxRfWZ1bmN0aW9uIGhtKHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KSxMPXkuc2xpY2UoeS5sLHkubCtQKTtyZXR1cm4geS5sKz1QLCgzJlApPjAmJih5LmwrPTQtKDMmUCkmMyksTH1mdW5jdGlvbiBFNCh5LFAsTCl7dmFy'@;
put 'IHJlLFE9eS5yZWFkX3NoaWZ0KDIpLGdlPUx8fHt9O2lmKHkubCs9MixQIT09SGMmJlEhPT1QJiYtMT09PXQ5LmluZGV4T2YoUCkmJig0MTI2IT0oNjU1MzQmUCl8fDQxMjYhPSg2NTUzNCZRKSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0eXBlICIrUCsiIHNhdyAiK1EpO3N3aXRjaChQ'@;
put 'PT09SGM/UTpQKXtjYXNlIDI6cmV0dXJuIHJlPXkucmVhZF9zaGlmdCgyLCJpIiksZ2UucmF3fHwoeS5sKz0yKSxyZTtjYXNlIDM6cmV0dXJuIHkucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PXkucmVhZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiB5LnJlYWRfc2hpZnQo'@;
put 'NCk7Y2FzZSAzMDpyZXR1cm4gT2QoeSwwLDQpLnJlcGxhY2UodiwiIik7Y2FzZSAzMTpyZXR1cm4gUDEoeSk7Y2FzZSA2NDpyZXR1cm4gU2MoeSk7Y2FzZSA2NTpyZXR1cm4gaG0oeSk7Y2FzZSA3MTpyZXR1cm4gZnVuY3Rpb24gRHcoeSl7dmFyIFA9e307cmV0dXJuIFAuU2l6ZT15LnJlYWRf'@;
put 'c2hpZnQoNCkseS5sKz1QLlNpemUrMy0oUC5TaXplLTEpJTQsUH0oeSk7Y2FzZSA4MDpyZXR1cm4gUWMoeSxRLCFnZS5yYXcpLnJlcGxhY2UodiwiIik7Y2FzZSA4MTpyZXR1cm4gZnVuY3Rpb24geDQoeSxQKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIlZ0VW5hbGlnbmVkU3RyaW5nIG11c3Qg'@;
put 'aGF2ZSBwb3NpdGl2ZSBsZW5ndGgiKTtyZXR1cm4gcWgoeSxQLDApfSh5LFEpLnJlcGxhY2UodiwiIik7Y2FzZSA0MTA4OnJldHVybiBmdW5jdGlvbiBhOSh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W10sUT0wO1E8UC8yOysrUSlMLnB1c2goczkoeSkpO3JldHVybiBMfSh5KTtj'@;
put 'YXNlIDQxMjY6Y2FzZSA0MTI3OnJldHVybiA0MTI3PT1RP2Z1bmN0aW9uIGk5KHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXSxRPTA7USE9UDsrK1Epe3ZhciByZT15Lmw7TFtRXT15LnJlYWRfc2hpZnQoMCwibHB3c3RyIikucmVwbGFjZSh2LCIiKSx5LmwtcmUmMiYmKHkubCs9'@;
put 'Mil9cmV0dXJuIEx9KHkpOmZ1bmN0aW9uIG85KHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXSxRPTA7USE9UDsrK1EpTFtRXT15LnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKHYsIiIpO3JldHVybiBMfSh5KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQ'@;
put 'cm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUCsiICIrUSl9fWZ1bmN0aW9uIGw5KHksUCl7dmFyIEw9cHIoNCksUT1wcig0KTtzd2l0Y2goTC53cml0ZV9zaGlmdCg0LDgwPT15PzMxOnkpLHkpe2Nhc2UgMzpRLndyaXRlX3NoaWZ0KC00LFApO2JyZWFrO2Nhc2UgNTooUT1wcig4'@;
put 'KSkud3JpdGVfc2hpZnQoOCxQLCJmIik7YnJlYWs7Y2FzZSAxMTpRLndyaXRlX3NoaWZ0KDQsUD8xOjApO2JyZWFrO2Nhc2UgNjQ6UT1mdW5jdGlvbiBvYyh5KXt2YXIgTD0oInN0cmluZyI9PXR5cGVvZiB5P25ldyBEYXRlKERhdGUucGFyc2UoeSkpOnkpLmdldFRpbWUoKS8xZTMrMTE2NDQ0'@;
put 'NzM2MDAsUT1MJU1hdGgucG93KDIsMzIpLHJlPShMLVEpL01hdGgucG93KDIsMzIpO3JlKj0xZTc7dmFyIGdlPShRKj0xZTcpL01hdGgucG93KDIsMzIpfDA7Z2U+MCYmKFElPU1hdGgucG93KDIsMzIpLHJlKz1nZSk7dmFyIF9lPXByKDgpO3JldHVybiBfZS53cml0ZV9zaGlmdCg0LFEpLF9l'@;
put 'LndyaXRlX3NoaWZ0KDQscmUpLF9lfShQKTticmVhaztjYXNlIDMxOmNhc2UgODA6Zm9yKChRPXByKDQrMiooUC5sZW5ndGgrMSkrKFAubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsUC5sZW5ndGgrMSksUS53cml0ZV9zaGlmdCgwLFAsImRiY3MiKTtRLmwhPVEubGVuZ3RoOylRLndy'@;
put 'aXRlX3NoaWZ0KDEsMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK3krIiAiK1ApfXJldHVybiBTKFtMLFFdKX1mdW5jdGlvbiBGMSh5LFApe3ZhciBMPXkubCxRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRf'@;
put 'c2hpZnQoNCksZ2U9W10sX2U9MCx2ZT0wLFNlPS0xLEhlPXt9O2ZvcihfZT0wO19lIT1yZTsrK19lKXt2YXIgQmU9eS5yZWFkX3NoaWZ0KDQpLEdlPXkucmVhZF9zaGlmdCg0KTtnZVtfZV09W0JlLEdlK0xdfWdlLnNvcnQoZnVuY3Rpb24oa3QsVHQpe3JldHVybiBrdFsxXS1UdFsxXX0pO3Zh'@;
put 'ciBudD17fTtmb3IoX2U9MDtfZSE9cmU7KytfZSl7aWYoeS5sIT09Z2VbX2VdWzFdKXt2YXIgZHQ9ITA7aWYoX2U+MCYmUClzd2l0Y2goUFtnZVtfZS0xXVswXV0udCl7Y2FzZSAyOnkubCsyPT09Z2VbX2VdWzFdJiYoeS5sKz0yLGR0PSExKTticmVhaztjYXNlIDgwOmNhc2UgNDEwODp5Lmw8'@;
put 'PWdlW19lXVsxXSYmKHkubD1nZVtfZV1bMV0sZHQ9ITEpfWlmKCghUHx8MD09X2UpJiZ5Lmw8PWdlW19lXVsxXSYmKGR0PSExLHkubD1nZVtfZV1bMV0pLGR0KXRocm93IG5ldyBFcnJvcigiUmVhZCBFcnJvcjogRXhwZWN0ZWQgYWRkcmVzcyAiK2dlW19lXVsxXSsiIGF0ICIreS5sKyIgOiIr'@;
put 'X2UpfWlmKFApe3ZhciBDdD1QW2dlW19lXVswXV07aWYobnRbQ3Qubl09RTQoeSxDdC50LHtyYXc6ITB9KSwidmVyc2lvbiI9PT1DdC5wJiYobnRbQ3Qubl09U3RyaW5nKG50W0N0Lm5dPj4xNikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1Jm50W0N0Lm5dKSkuc2xpY2UoLTQpKSwiQ29kZVBh'@;
put 'Z2UiPT1DdC5uKXN3aXRjaChudFtDdC5uXSl7Y2FzZSAwOm50W0N0Lm5dPTEyNTI7Y2FzZSA4NzQ6Y2FzZSA5MzI6Y2FzZSA5MzY6Y2FzZSA5NDk6Y2FzZSA5NTA6Y2FzZSAxMjUwOmNhc2UgMTI1MTpjYXNlIDEyNTM6Y2FzZSAxMjU0OmNhc2UgMTI1NTpjYXNlIDEyNTY6Y2FzZSAxMjU3OmNh'@;
put 'c2UgMTI1ODpjYXNlIDFlNDpjYXNlIDEyMDA6Y2FzZSAxMjAxOmNhc2UgMTI1MjpjYXNlIDY1ZTM6Y2FzZS01MzY6Y2FzZSA2NTAwMTpjYXNlLTUzNTpqKHZlPW50W0N0Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAi'@;
put 'K250W0N0Lm5dKX19ZWxzZSBpZigxPT09Z2VbX2VdWzBdKXtpZih2ZT1udC5Db2RlUGFnZT1FNCh5LHUzKSxqKHZlKSwtMSE9PVNlKXt2YXIgY3Q9eS5sO3kubD1nZVtTZV1bMV0sSGU9ZG0oeSx2ZSkseS5sPWN0fX1lbHNlIGlmKDA9PT1nZVtfZV1bMF0pe2lmKDA9PT12ZSl7U2U9X2UseS5s'@;
put 'PWdlW19lKzFdWzFdO2NvbnRpbnVlfUhlPWRtKHksdmUpfWVsc2V7dmFyIEZ0LGJ0PUhlW2dlW19lXVswXV07c3dpdGNoKHlbeS5sXSl7Y2FzZSA2NTp5LmwrPTQsRnQ9aG0oeSk7YnJlYWs7Y2FzZSAzMDpjYXNlIDMxOnkubCs9NCxGdD1RYyh5LHlbeS5sLTRdKS5yZXBsYWNlKC9cdTAwMDAr'@;
put 'JC8sIiIpO2JyZWFrO2Nhc2UgMzp5LmwrPTQsRnQ9eS5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OnkubCs9NCxGdD15LnJlYWRfc2hpZnQoNCk7YnJlYWs7Y2FzZSA1OnkubCs9NCxGdD15LnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrO2Nhc2UgMTE6eS5sKz00LEZ0PVNvKHksNCk7'@;
put 'YnJlYWs7Y2FzZSA2NDp5LmwrPTQsRnQ9SHQoU2MoeSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnBhcnNlZCB2YWx1ZTogIit5W3kubF0pfW50W2J0XT1GdH19cmV0dXJuIHkubD1MK1EsbnR9dmFyIGZtPVsiQ29kZVBhZ2UiLCJUaHVtYm5haWwiLCJfUElEX0xJTktCQVNF'@;
put 'IiwiX1BJRF9ITElOS1MiLCJTeXN0ZW1JZGVudGlmaWVyIiwiRk1USUQiXS5jb25jYXQoWyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyIsIk5hbWVkUmFuZ2VzIiwiRGVmaW5lZE5hbWVzIiwiQ2hhcnRzaGVldHMiLCJDaGFydE5hbWVzIl0pO2Z1bmN0aW9uIEl3KHkpe3N3aXRjaCh0eXBlb2Yg'@;
put 'eSl7Y2FzZSJib29sZWFuIjpyZXR1cm4gMTE7Y2FzZSJudW1iZXIiOnJldHVybigwfHkpPT15PzM6NTtjYXNlInN0cmluZyI6cmV0dXJuIDMxO2Nhc2Uib2JqZWN0IjppZih5IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gNjR9cmV0dXJuLTF9ZnVuY3Rpb24gYzkoeSxQLEwpe3ZhciBRPXByKDgp'@;
put 'LHJlPVtdLGdlPVtdLF9lPTgsdmU9MCxTZT1wcig4KSxIZT1wcig4KTtpZihTZS53cml0ZV9zaGlmdCg0LDIpLFNlLndyaXRlX3NoaWZ0KDQsMTIwMCksSGUud3JpdGVfc2hpZnQoNCwxKSxnZS5wdXNoKFNlKSxyZS5wdXNoKEhlKSxfZSs9OCtTZS5sZW5ndGgsIVApeyhIZT1wcig4KSkud3Jp'@;
put 'dGVfc2hpZnQoNCwwKSxyZS51bnNoaWZ0KEhlKTt2YXIgQmU9W3ByKDQpXTtmb3IoQmVbMF0ud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aCksdmU9MDt2ZTx5Lmxlbmd0aDsrK3ZlKXt2YXIgR2U9eVt2ZV1bMF07Zm9yKChTZT1wcig4KzIqKEdlLmxlbmd0aCsxKSsoR2UubGVuZ3RoJTI/MDoyKSkp'@;
put 'LndyaXRlX3NoaWZ0KDQsdmUrMiksU2Uud3JpdGVfc2hpZnQoNCxHZS5sZW5ndGgrMSksU2Uud3JpdGVfc2hpZnQoMCxHZSwiZGJjcyIpO1NlLmwhPVNlLmxlbmd0aDspU2Uud3JpdGVfc2hpZnQoMSwwKTtCZS5wdXNoKFNlKX1TZT1TKEJlKSxnZS51bnNoaWZ0KFNlKSxfZSs9OCtTZS5sZW5n'@;
put 'dGh9Zm9yKHZlPTA7dmU8eS5sZW5ndGg7Kyt2ZSlpZigoIVB8fFBbeVt2ZV1bMF1dKSYmIShmbS5pbmRleE9mKHlbdmVdWzBdKT4tMSkmJm51bGwhPXlbdmVdWzFdKXt2YXIgbnQ9eVt2ZV1bMV0sZHQ9MDtpZihQKXt2YXIgQ3Q9TFtkdD0rUFt5W3ZlXVswXV1dO2lmKCJ2ZXJzaW9uIj09Q3Qu'@;
put 'cCYmInN0cmluZyI9PXR5cGVvZiBudCl7dmFyIGN0PW50LnNwbGl0KCIuIik7bnQ9KCtjdFswXTw8MTYpKygrY3RbMV18fDApfVNlPWw5KEN0LnQsbnQpfWVsc2V7dmFyIGJ0PUl3KG50KTstMT09YnQmJihidD0zMSxudD1TdHJpbmcobnQpKSxTZT1sOShidCxudCl9Z2UucHVzaChTZSksKEhl'@;
put 'PXByKDgpKS53cml0ZV9zaGlmdCg0LFA/ZHQ6Mit2ZSkscmUucHVzaChIZSksX2UrPTgrU2UubGVuZ3RofXZhciBGdD04KihnZS5sZW5ndGgrMSk7Zm9yKHZlPTA7dmU8Z2UubGVuZ3RoOysrdmUpcmVbdmVdLndyaXRlX3NoaWZ0KDQsRnQpLEZ0Kz1nZVt2ZV0ubGVuZ3RoO3JldHVybiBRLndy'@;
put 'aXRlX3NoaWZ0KDQsX2UpLFEud3JpdGVfc2hpZnQoNCxnZS5sZW5ndGgpLFMoW1FdLmNvbmNhdChyZSkuY29uY2F0KGdlKSl9ZnVuY3Rpb24gdTkoeSxQLEwpe3ZhciBRPXkuY29udGVudDtpZighUSlyZXR1cm57fTtvbChRLDApO3ZhciByZSxnZSxfZSx2ZSxTZT0wO1EuY2hrKCJmZWZmIiwi'@;
put 'Qnl0ZSBPcmRlcjogIiksUS5yZWFkX3NoaWZ0KDIpO3ZhciBIZT1RLnJlYWRfc2hpZnQoNCksQmU9US5yZWFkX3NoaWZ0KDE2KTtpZihCZSE9PWplLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJkJlIT09TCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK0JlKTtp'@;
put 'ZigxIT09KHJlPVEucmVhZF9zaGlmdCg0KSkmJjIhPT1yZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAjU2V0czogIityZSk7aWYoZ2U9US5yZWFkX3NoaWZ0KDE2KSx2ZT1RLnJlYWRfc2hpZnQoNCksMT09PXJlJiZ2ZSE9PVEubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNt'@;
put 'YXRjaDogIit2ZSsiICE9PSAiK1EubCk7Mj09PXJlJiYoX2U9US5yZWFkX3NoaWZ0KDE2KSxTZT1RLnJlYWRfc2hpZnQoNCkpO3ZhciBDdCxHZT1GMShRLFApLG50PXtTeXN0ZW1JZGVudGlmaWVyOkhlfTtmb3IodmFyIGR0IGluIEdlKW50W2R0XT1HZVtkdF07aWYobnQuRk1USUQ9Z2UsMT09'@;
put 'PXJlKXJldHVybiBudDtpZihTZS1RLmw9PTImJihRLmwrPTIpLFEubCE9PVNlKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrUS5sKyIgIT09ICIrU2UpO3RyeXtDdD1GMShRLG51bGwpfWNhdGNoe31mb3IoZHQgaW4gQ3QpbnRbZHRdPUN0W2R0XTtyZXR1cm4gbnQuRk1U'@;
put 'SUQ9W2dlLF9lXSxudH1mdW5jdGlvbiB5aSh5LFAsTCxRLHJlLGdlKXt2YXIgX2U9cHIocmU/Njg6NDgpLHZlPVtfZV07X2Uud3JpdGVfc2hpZnQoMiw2NTUzNCksX2Uud3JpdGVfc2hpZnQoMiwwKSxfZS53cml0ZV9zaGlmdCg0LDg0MjQxMjU5OSksX2Uud3JpdGVfc2hpZnQoMTYsamUudXRp'@;
put 'bHMuY29uc3RzLkhFQURFUl9DTFNJRCwiaGV4IiksX2Uud3JpdGVfc2hpZnQoNCxyZT8yOjEpLF9lLndyaXRlX3NoaWZ0KDE2LFAsImhleCIpLF9lLndyaXRlX3NoaWZ0KDQscmU/Njg6NDgpO3ZhciBTZT1jOSh5LEwsUSk7aWYodmUucHVzaChTZSkscmUpe3ZhciBIZT1jOShyZSxudWxsLG51'@;
put 'bGwpO19lLndyaXRlX3NoaWZ0KDE2LGdlLCJoZXgiKSxfZS53cml0ZV9zaGlmdCg0LDY4K1NlLmxlbmd0aCksdmUucHVzaChIZSl9cmV0dXJuIFModmUpfWZ1bmN0aW9uIFBkKHksUCl7cmV0dXJuIHkucmVhZF9zaGlmdChQKSxudWxsfWZ1bmN0aW9uIFNvKHksUCl7cmV0dXJuIDE9PT15LnJl'@;
put 'YWRfc2hpZnQoUCl9ZnVuY3Rpb24gRmwoeSxQKXtyZXR1cm4gUHx8KFA9cHIoMikpLFAud3JpdGVfc2hpZnQoMiwrISF5KSxQfWZ1bmN0aW9uIGhsKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoMiwidSIpfWZ1bmN0aW9uIGZ1KHksUCl7cmV0dXJuIFB8fChQPXByKDIpKSxQLndyaXRlX3NoaWZ0'@;
put 'KDIseSksUH1mdW5jdGlvbiBIMSh5LFApe3JldHVybiBmdW5jdGlvbiBrNCh5LFAsTCl7Zm9yKHZhciBRPVtdLHJlPXkubCtQO3kubDxyZTspUS5wdXNoKEwoeSxyZS15LmwpKTtpZihyZSE9PXkubCl0aHJvdyBuZXcgRXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIFF9KHksUCxobCl9ZnVu'@;
put 'Y3Rpb24gZDkoeSxQLEwpe3JldHVybiBMfHwoTD1wcigyKSksTC53cml0ZV9zaGlmdCgxLCJlIj09UD8reTorISF5KSxMLndyaXRlX3NoaWZ0KDEsImUiPT1QPzE6MCksTH1mdW5jdGlvbiBGZCh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KEwmJkwuYmlmZj49MTI/MjoxKSxyZT0ic2Jjcy1j'@;
put 'b250IixnZT1PO0wmJkwuYmlmZj49OCYmKE89MTIwMCksTCYmOCE9TC5iaWZmPzEyPT1MLmJpZmYmJihyZT0id3N0ciIpOnkucmVhZF9zaGlmdCgxKSYmKHJlPSJkYmNzLWNvbnQiKSxMLmJpZmY+PTImJkwuYmlmZjw9NSYmKHJlPSJjcHN0ciIpO3ZhciB2ZT1RP3kucmVhZF9zaGlmdChRLHJl'@;
put 'KToiIjtyZXR1cm4gTz1nZSx2ZX1mdW5jdGlvbiBnbSh5KXt2YXIgUD1PO089MTIwMDt2YXIgU2UsTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoMSkscmU9NCZRLGdlPTgmUSxfZT0xKygxJlEpLHZlPTAsSGU9e307Z2UmJih2ZT15LnJlYWRfc2hpZnQoMikpLHJlJiYoU2U9eS5y'@;
put 'ZWFkX3NoaWZ0KDQpKTt2YXIgR2U9MD09PUw/IiI6eS5yZWFkX3NoaWZ0KEwsMj09X2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpO2lmKGdlKWZvcihIZS5fUj1bXTt2ZS0tID4wOylIZS5fUi5wdXNoKHtpZHg6eS5yZWFkX3NoaWZ0KDIpLGlmbnQ6eS5yZWFkX3NoaWZ0KDIpfSk7cmV0dXJu'@;
put 'IHJlJiYoeS5sKz1TZSksSGUudD1HZSxnZXx8KEhlLnI9Ijx0PiIrSGUudCsiPC90PiIpLE89UCxIZX1mdW5jdGlvbiBqMCh5LFApe3ZhciBMPXkuUiYmeS5SLmxlbmd0aHx8eS5yO3kuciYmKHkuUj1EbSh5LnIpKTt2YXIgUT0iIixyZT0wO0w/eS5SLmZvckVhY2goZnVuY3Rpb24oQ3Qpe3Jl'@;
put 'KyssUSs9Q3Qudnx8IiJ9KTooUT15LnR8fCIiLHJlPTEpO3ZhciBnZT1wcigzKyhyZT4xPzI6MCkpO2dlLndyaXRlX3NoaWZ0KDIsUS5sZW5ndGgpLGdlLndyaXRlX3NoaWZ0KDEsMXwocmU+MT84OjApKSxyZT4xJiZnZS53cml0ZV9zaGlmdCgyLHJlKTt2YXIgX2U9cHIoMipRLmxlbmd0aCk7'@;
put 'X2Uud3JpdGVfc2hpZnQoMipRLmxlbmd0aCxRLCJ1dGYxNmxlIik7dmFyIHZlPVtnZSxfZV07aWYoTCl7dmFyIFNlPXByKDQqeS5SLmxlbmd0aCksSGU9MDt2ZS5wdXNoKFNlKTtmb3IodmFyIEJlPTA7QmU8eS5SLmxlbmd0aDsrK0JlKXt2YXIgR2U9eS5SW0JlXTtTZS53cml0ZV9zaGlmdCgy'@;
put 'LEhlKSxIZSs9KEdlLnZ8fCIiKS5sZW5ndGg7dmFyIG50PUdlLnM/Z3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpHZS5zfSxQKTowLGR0PVAuY2VsbFhmc1tudF0uZm9udElkO1NlLndyaXRlX3NoaWZ0KDIsZHQ8ND9kdDpkdCsxKX19cmV0dXJuIFModmUpfWZ1bmN0'@;
put 'aW9uIEhkKHksUCxMKXtpZihMKXtpZihMLmJpZmY+PTImJkwuYmlmZjw9NSlyZXR1cm4geS5yZWFkX3NoaWZ0KFAsImNwc3RyIik7aWYoTC5iaWZmPj0xMilyZXR1cm4geS5yZWFkX3NoaWZ0KFAsImRiY3MtY29udCIpfXZhciByZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkucmVhZF9zaGlm'@;
put 'dChQLDA9PT1yZT8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gTjIoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKTtyZXR1cm4gMD09PVE/KHkubCsrLCIiKTpIZCh5LFEsTCl9ZnVuY3Rpb24gVjIoeSxQLEwpe2lmKEwuYmlmZj41KXJldHVybiBO'@;
put 'Mih5LDAsTCk7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09UT8oeS5sKyssIiIpOnkucmVhZF9zaGlmdChRLEwuYmlmZjw9NHx8IXkubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiBtbSh5LFAsTCl7cmV0dXJuIEx8fChMPXByKDMrMip5Lmxlbmd0aCkpLEwud3Jp'@;
put 'dGVfc2hpZnQoMix5Lmxlbmd0aCksTC53cml0ZV9zaGlmdCgxLDEpLEwud3JpdGVfc2hpZnQoMzEseSwidXRmMTZsZSIpLEx9ZnVuY3Rpb24gQTQoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpO3JldHVybiBQPjA/eS5yZWFkX3NoaWZ0KFAsInV0ZjE2bGUiKS5yZXBsYWNlKHYsIiIpOiIifWZ1'@;
put 'bmN0aW9uIF8zKHksUCl7UHx8KFA9cHIoNisyKnkubGVuZ3RoKSksUC53cml0ZV9zaGlmdCg0LDEreS5sZW5ndGgpO2Zvcih2YXIgTD0wO0w8eS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoMix5LmNoYXJDb2RlQXQoTCkpO3JldHVybiBQLndyaXRlX3NoaWZ0KDIsMCksUH1mdW5jdGlvbiBi'@;
put 'Myh5KXt2YXIgUD1wcig1MTIpLEw9MCxRPXkuVGFyZ2V0OyJmaWxlOi8vIj09US5zbGljZSgwLDcpJiYoUT1RLnNsaWNlKDcpKTt2YXIgcmU9US5pbmRleE9mKCIjIiksZ2U9cmU+LTE/MzE6MjM7c3dpdGNoKFEuY2hhckF0KDApKXtjYXNlIiMiOmdlPTI4O2JyZWFrO2Nhc2UiLiI6Z2UmPS0z'@;
put 'fVAud3JpdGVfc2hpZnQoNCwyKSxQLndyaXRlX3NoaWZ0KDQsZ2UpO3ZhciBfZT1bOCw2ODE1ODI3LDY2MTkyMzcsNDg0OTc4MCw4M107Zm9yKEw9MDtMPF9lLmxlbmd0aDsrK0wpUC53cml0ZV9zaGlmdCg0LF9lW0xdKTtpZigyOD09Z2UpXzMoUT1RLnNsaWNlKDEpLFApO2Vsc2UgaWYoMiZn'@;
put 'ZSl7Zm9yKF9lPSJlMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxMPTA7TDxfZS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoMSxwYXJzZUludChfZVtMXSwxNikpO3ZhciB2ZT1yZT4tMT9RLnNsaWNlKDAscmUpOlE7Zm9yKFAud3Jp'@;
put 'dGVfc2hpZnQoNCwyKih2ZS5sZW5ndGgrMSkpLEw9MDtMPHZlLmxlbmd0aDsrK0wpUC53cml0ZV9zaGlmdCgyLHZlLmNoYXJDb2RlQXQoTCkpO1Aud3JpdGVfc2hpZnQoMiwwKSw4JmdlJiZfMyhyZT4tMT9RLnNsaWNlKHJlKzEpOiIiLFApfWVsc2V7Zm9yKF9lPSIwMyAwMyAwMCAwMCAwMCAw'@;
put 'MCAwMCAwMCBjMCAwMCAwMCAwMCAwMCAwMCAwMCA0NiIuc3BsaXQoIiAiKSxMPTA7TDxfZS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoMSxwYXJzZUludChfZVtMXSwxNikpO2Zvcih2YXIgU2U9MDsiLi4vIj09US5zbGljZSgzKlNlLDMqU2UrMyl8fCIuLlxcIj09US5zbGljZSgzKlNlLDMq'@;
put 'U2UrMyk7KSsrU2U7Zm9yKFAud3JpdGVfc2hpZnQoMixTZSksUC53cml0ZV9zaGlmdCg0LFEubGVuZ3RoLTMqU2UrMSksTD0wO0w8US5sZW5ndGgtMypTZTsrK0wpUC53cml0ZV9zaGlmdCgxLDI1NSZRLmNoYXJDb2RlQXQoTCszKlNlKSk7Zm9yKFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRl'@;
put 'X3NoaWZ0KDIsNjU1MzUpLFAud3JpdGVfc2hpZnQoMiw1NzAwNSksTD0wO0w8NjsrK0wpUC53cml0ZV9zaGlmdCg0LDApfXJldHVybiBQLnNsaWNlKDAsUC5sKX1mdW5jdGlvbiB2bSh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQoMSkseS5y'@;
put 'ZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBoOSh5LFApe3ZhciBMPXZtKHkpO3JldHVybiBMWzNdPTAsTH1mdW5jdGlvbiBMdSh5KXtyZXR1cm57cjp5LnJlYWRfc2hpZnQoMiksYzp5LnJlYWRfc2hpZnQoMiksaXhmZTp5LnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHowKHksUCxMLFEpe3JldHVy'@;
put 'biBRfHwoUT1wcig2KSksUS53cml0ZV9zaGlmdCgyLHkpLFEud3JpdGVfc2hpZnQoMixQKSxRLndyaXRlX3NoaWZ0KDIsTHx8MCksUX1mdW5jdGlvbiBwOSh5LFAsTCl7dmFyIFE9TC5iaWZmPjg/NDoyO3JldHVyblt5LnJlYWRfc2hpZnQoUSkseS5yZWFkX3NoaWZ0KFEsImkiKSx5LnJlYWRf'@;
put 'c2hpZnQoUSwiaSIpXX1mdW5jdGlvbiBnOSh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDIpLFhjKHkpXX1mdW5jdGlvbiBLaCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6eS5yZWFkX3NoaWZ0KDIpLHI6UH0sZTp7Yzp5LnJlYWRfc2hpZnQo'@;
put 'MikscjpMfX19ZnVuY3Rpb24gVTAoeSxQKXtyZXR1cm4gUHx8KFA9cHIoOCkpLFAud3JpdGVfc2hpZnQoMix5LnMuciksUC53cml0ZV9zaGlmdCgyLHkuZS5yKSxQLndyaXRlX3NoaWZ0KDIseS5zLmMpLFAud3JpdGVfc2hpZnQoMix5LmUuYyksUH1mdW5jdGlvbiBfbSh5KXt2YXIgUD15LnJl'@;
put 'YWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6eS5yZWFkX3NoaWZ0KDEpLHI6UH0sZTp7Yzp5LnJlYWRfc2hpZnQoMSkscjpMfX19dmFyIHZhPV9tO2Z1bmN0aW9uIFQ0KHkpe3kubCs9NDt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15'@;
put 'LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubCs9MTIsW0wsUCxRXX1mdW5jdGlvbiBIbCh5KXt5LmwrPTIseS5sKz15LnJlYWRfc2hpZnQoMil9dmFyIGJtPXswOkhsLDQ6SGwsNTpIbCw2OkhsLDc6ZnVuY3Rpb24gXzkoeSl7cmV0dXJuIHkubCs9NCx5LmNmPXkucmVhZF9zaGlmdCgyKSx7fX0s'@;
put 'ODpIbCw5OkhsLDEwOkhsLDExOkhsLDEyOkhsLDEzOmZ1bmN0aW9uIHY5KHkpe3ZhciBQPXt9O3JldHVybiB5LmwrPTQseS5sKz0xNixQLmZTaGFyZWROb3RlPXkucmVhZF9zaGlmdCgyKSx5LmwrPTQsUH0sMTQ6SGwsMTU6SGwsMTY6SGwsMTc6SGwsMTg6SGwsMTk6SGwsMjA6SGwsMjE6VDR9'@;
put 'O2Z1bmN0aW9uIFJ1KHksUCl7dmFyIEw9e0JJRkZWZXI6MCxkdDowfTtzd2l0Y2goTC5CSUZGVmVyPXkucmVhZF9zaGlmdCgyKSwoUC09Mik+PTImJihMLmR0PXkucmVhZF9zaGlmdCgyKSx5LmwtPTIpLEwuQklGRlZlcil7Y2FzZSAxNTM2OmNhc2UgMTI4MDpjYXNlIDEwMjQ6Y2FzZSA3Njg6'@;
put 'Y2FzZSA1MTI6Y2FzZSAyOmNhc2UgNzpicmVhaztkZWZhdWx0OmlmKFA+Nil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgQklGRiBWZXIgIitMLkJJRkZWZXIpfXJldHVybiB5LnJlYWRfc2hpZnQoUCksTH1mdW5jdGlvbiBENCh5LFAsTCl7dmFyIFE9MTUzNixyZT0xNjtzd2l0Y2goTC5i'@;
put 'b29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOlE9MTI4MCxyZT04O2JyZWFrO2Nhc2UiYmlmZjQiOlE9NCxyZT02O2JyZWFrO2Nhc2UiYmlmZjMiOlE9MyxyZT02O2JyZWFrO2Nhc2UiYmlmZjIiOlE9MixyZT00O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3'@;
put 'IEVycm9yKCJ1bnN1cHBvcnRlZCBCSUZGIHZlcnNpb24iKX12YXIgZ2U9cHIocmUpO3JldHVybiBnZS53cml0ZV9zaGlmdCgyLFEpLGdlLndyaXRlX3NoaWZ0KDIsUCkscmU+NCYmZ2Uud3JpdGVfc2hpZnQoMiwyOTI4MikscmU+NiYmZ2Uud3JpdGVfc2hpZnQoMiwxOTk3KSxyZT44JiYoZ2Uu'@;
put 'd3JpdGVfc2hpZnQoMiw0OTE2MSksZ2Uud3JpdGVfc2hpZnQoMiwxKSxnZS53cml0ZV9zaGlmdCgyLDE3OTgpLGdlLndyaXRlX3NoaWZ0KDIsMCkpLGdlfWZ1bmN0aW9uIFkwKHksUCl7dmFyIEw9IVB8fFAuYmlmZj49OD8yOjEsUT1wcig4K0wqeS5uYW1lLmxlbmd0aCk7US53cml0ZV9zaGlm'@;
put 'dCg0LHkucG9zKSxRLndyaXRlX3NoaWZ0KDEseS5oc3x8MCksUS53cml0ZV9zaGlmdCgxLHkuZHQpLFEud3JpdGVfc2hpZnQoMSx5Lm5hbWUubGVuZ3RoKSxQLmJpZmY+PTgmJlEud3JpdGVfc2hpZnQoMSwxKSxRLndyaXRlX3NoaWZ0KEwqeS5uYW1lLmxlbmd0aCx5Lm5hbWUsUC5iaWZmPDg/'@;
put 'InNiY3MiOiJ1dGYxNmxlIik7dmFyIHJlPVEuc2xpY2UoMCxRLmwpO3JldHVybiByZS5sPVEubCxyZX1mdW5jdGlvbiBEcih5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLEpjKHkpfWZ1bmN0aW9uIGVzKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoNCksbDAoeSl9ZnVuY3Rpb24gc2MoeSxQLEwp'@;
put 'e3JldHVybiB5LnJlYWRfc2hpZnQoNCksb1MoeSwwLEwpfWZ1bmN0aW9uIFcwKHksUCxMKXt2YXIgUT0wO0wmJjI9PUwuYmlmZnx8KFE9eS5yZWFkX3NoaWZ0KDIpKTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBMJiYyPT1MLmJpZmYmJihRPTEtKHJlPj4xNSkscmUmPTMyNzY3KSxb'@;
put 'e1Vuc3luY2VkOjEmUSxEeVplcm86KDImUSk+PjEsRXhBc2M6KDQmUSk+PjIsRXhEc2M6KDgmUSk+PjN9LHJlXX1mdW5jdGlvbiBYcih5LFAsTCxRKXt2YXIgcmU9TCYmNT09TC5iaWZmO1F8fChRPXByKHJlPzMrUC5sZW5ndGg6NSsyKlAubGVuZ3RoKSksUS53cml0ZV9zaGlmdCgyLHkpLFEu'@;
put 'd3JpdGVfc2hpZnQocmU/MToyLFAubGVuZ3RoKSxyZXx8US53cml0ZV9zaGlmdCgxLDEpLFEud3JpdGVfc2hpZnQoKHJlPzE6MikqUC5sZW5ndGgsUCxyZT8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgZ2U9US5sZW5ndGg+US5sP1Euc2xpY2UoMCxRLmwpOlE7cmV0dXJuIG51bGw9PWdlLmwmJihn'@;
put 'ZS5sPWdlLmxlbmd0aCksZ2V9dmFyIFRzPVYyO2Z1bmN0aW9uIEJ0KHksUCxMKXt2YXIgUT15LmwrUCxyZT04IT1MLmJpZmYmJkwuYmlmZj8yOjQsZ2U9eS5yZWFkX3NoaWZ0KHJlKSxfZT15LnJlYWRfc2hpZnQocmUpLHZlPXkucmVhZF9zaGlmdCgyKSxTZT15LnJlYWRfc2hpZnQoMik7cmV0'@;
put 'dXJuIHkubD1RLHtzOntyOmdlLGM6dmV9LGU6e3I6X2UsYzpTZX19fWZ1bmN0aW9uIENtKHksUCxMLFEpe3ZhciBnZT0hTHx8IUwuYmlmZnx8OD09TC5iaWZmO1F8fChRPXByKEwmJjU9PUwuYmlmZj8xNjoyMCkpLFEud3JpdGVfc2hpZnQoMixnZSYmTC5jZWxsU3R5bGVzJiZ5LmZvbnRJZCYm'@;
put 'KHkuZm9udElkPDQ/eS5mb250SWQ6eS5mb250SWQrMSl8fDApO3ZhciBfZT0xO3kucHJvdGVjdGlvbiYmKHkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKF9lJj0tMikseS5wcm90ZWN0aW9uLmhpZGRlbiYmKF9lfD0yKSkseS5zdHlsZT8oUS53cml0ZV9zaGlmdCgyLHkubnVtRm10SWR8fDApLFEu'@;
put 'd3JpdGVfc2hpZnQoMiw2NTUyNHxfZSkpOihRLndyaXRlX3NoaWZ0KDIseS5udW1GbXRJZHx8MCksUS53cml0ZV9zaGlmdCgyLFA8PDR8X2UpKTt2YXIgdmU9eS5hbGlnbm1lbnR8fHt9O2lmKGdlKXt2YXIgU2U9MCxIZT0wO1dtLmluZGV4T2YodmUuaG9yaXpvbnRhbCk+LTEmJihTZXw9V20u'@;
put 'aW5kZXhPZih2ZS5ob3Jpem9udGFsKSksdmUud3JhcFRleHQmJihTZXw9OCksQjQuaW5kZXhPZih2ZS52ZXJ0aWNhbCk+LTE/U2V8PUI0LmluZGV4T2YodmUudmVydGljYWwpPDw0Om51bGw9PXZlLnZlcnRpY2FsJiYoU2V8PTMyKSxRLndyaXRlX3NoaWZ0KDEsU2UpLFEud3JpdGVfc2hpZnQo'@;
put 'MSwwKSx2ZS5zaHJpbmtUb0ZpdCYmKEhlfD0xNiksUS53cml0ZV9zaGlmdCgyLEhlKTt2YXIgQmU9bnVsbDtudWxsIT15LmJvcmRlcklkJiYoQmU9TC5Cb3JkZXJzJiZMLkJvcmRlcnNbeS5ib3JkZXJJZHx8MF18fHt9KTt2YXIgR2U9MCxudD0wLGR0PTA7QmUmJihudWxsIT1CZS5sZWZ0JiZC'@;
put 'ZS5sZWZ0LnN0eWxlJiYoR2V8PShkdD1XMi5pbmRleE9mKEJlLmxlZnQuc3R5bGUpKT4tMT9kdDowKSxudWxsIT1CZS5yaWdodCYmQmUucmlnaHQuc3R5bGUmJihHZXw9KChkdD1XMi5pbmRleE9mKEJlLnJpZ2h0LnN0eWxlKSk+LTE/ZHQ6MCk8PDQpLG51bGwhPUJlLnRvcCYmQmUudG9wLnN0'@;
put 'eWxlJiYobnR8PShkdD1XMi5pbmRleE9mKEJlLnRvcC5zdHlsZSkpPi0xP2R0OjApLG51bGwhPUJlLmJvdHRvbSYmQmUuYm90dG9tLnN0eWxlJiYobnR8PSgoZHQ9VzIuaW5kZXhPZihCZS5ib3R0b20uc3R5bGUpKT4tMT9kdDowKTw8NCkpLFEud3JpdGVfc2hpZnQoMSxHZSksUS53cml0ZV9z'@;
put 'aGlmdCgxLG50KSxRLndyaXRlX3NoaWZ0KDIsMCksUS53cml0ZV9zaGlmdCgyLDApLFEud3JpdGVfc2hpZnQoMSwwKTt2YXIgQ3Q9MCxjdD1MLkZpbGxzJiZMLkZpbGxzW3kuZmlsbElkfHwwXXx8e307KGN0LmZnQ29sb3J8fGN0LmJnQ29sb3IpJiYoQ3R8PTQpLFEud3JpdGVfc2hpZnQoMSxD'@;
put 'dCk7dmFyIGJ0PTA7YnR8PUgzKGN0LmZnQ29sb3IsNjUpLGJ0fD1IMyhjdC5iZ0NvbG9yLDY1KTw8NyxRLndyaXRlX3NoaWZ0KDIsYnQpfWVsc2UgUS53cml0ZV9zaGlmdCg0LDApLFEud3JpdGVfc2hpZnQoNCwwKSxRLndyaXRlX3NoaWZ0KDIsMCk7cmV0dXJuIFF9ZnVuY3Rpb24gVmMoeSxQ'@;
put 'LEwpe3ZhciBRPUx1KHkpOygyPT1MLmJpZmZ8fDk9PVApJiYrK3kubDt2YXIgcmU9ZnVuY3Rpb24gcG0oeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiAxPT09eS5yZWFkX3NoaWZ0KDEpP1A6MT09PVB9KHkpO3JldHVybiBRLnZhbD1yZSxRLnQ9ITA9PT1yZXx8ITE9PT1yZT8iYiI6'@;
put 'ImUiLFF9dmFyIFYxPWZ1bmN0aW9uIHkzKHksUCxMKXtyZXR1cm4gMD09PVA/IiI6VjIoeSwwLEwpfTtmdW5jdGlvbiB5OSh5LFAsTCl7dmFyIHJlLFE9eS5yZWFkX3NoaWZ0KDIpLGdlPXtmQnVpbHRJbjoxJlEsZldhbnRBZHZpc2U6UT4+PjEmMSxmV2FudFBpY3Q6UT4+PjImMSxmT2xlOlE+'@;
put 'Pj4zJjEsZk9sZUxpbms6UT4+PjQmMSxjZjpRPj4+NSYxMDIzLGZJY29uOlE+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1MLnNiY2NoJiYocmU9ZnVuY3Rpb24gUncoeSxQLEwpe3kubCs9NDt2YXIgUT15LmwrKFAtPTQpLHJlPUZkKHksMCxMKSxnZT15LnJlYWRfc2hpZnQoMik7aWYoZ2UhPT0o'@;
put 'US09eS5sKSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBBZGRpblVkZjogcGFkZGluZyA9ICIrUSsiICE9ICIrZ2UpO3JldHVybiB5LmwrPWdlLHJlfSh5LFAtMixMKSksZ2UuYm9keT1yZXx8eS5yZWFkX3NoaWZ0KFAtMiksInN0cmluZyI9PXR5cGVvZiByZSYmKGdlLk5hbWU9cmUpLGdl'@;
put 'fXZhciBLVD1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hs'@;
put 'bm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtmdW5jdGlvbiBWdyh5LFAsTCl7dmFyIFE9eS5sK1AscmU9eS5yZWFkX3No'@;
put 'aWZ0KDIpLGdlPXkucmVhZF9zaGlmdCgxKSxfZT15LnJlYWRfc2hpZnQoMSksdmU9eS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpLFNlPTA7KCFMfHxMLmJpZmY+PTUpJiYoNSE9TC5iaWZmJiYoeS5sKz0yKSxTZT15LnJlYWRfc2hpZnQoMiksNT09TC5iaWZmJiYoeS5sKz0yKSx5Lmwr'@;
put 'PTQpO3ZhciBIZT1IZCh5LF9lLEwpOzMyJnJlJiYoSGU9S1RbSGUuY2hhckNvZGVBdCgwKV0pO3ZhciBCZT1RLXkubDtMJiYyPT1MLmJpZmYmJi0tQmU7dmFyIEdlPVEhPXkubCYmMCE9PXZlJiZCZT4wP2Z1bmN0aW9uIGQ2KHksUCxMLFEpe3ZhciBfZSxyZT15LmwrUCxnZT1uNSh5LFEsTCk7'@;
put 'cmV0dXJuIHJlIT09eS5sJiYoX2U9ajMoeSxyZS15LmwsZ2UsTCkpLFtnZSxfZV19KHksQmUsTCx2ZSk6W107cmV0dXJue2NoS2V5OmdlLE5hbWU6SGUsaXRhYjpTZSxyZ2NlOkdlfX1mdW5jdGlvbiBTbSh5LFAsTCl7aWYoTC5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIHc5KHksUCxMKXszPT15'@;
put 'W3kubCsxXSYmeVt5LmxdKys7dmFyIFE9RmQoeSwwLEwpO3JldHVybiAzPT1RLmNoYXJDb2RlQXQoMCk/US5zbGljZSgxKTpRfSh5LDAsTCk7Zm9yKHZhciBRPVtdLHJlPXkubCtQLGdlPXkucmVhZF9zaGlmdChMLmJpZmY+OD80OjIpOzAhPWdlLS07KVEucHVzaChwOSh5LDAsTCkpO2lmKHku'@;
put 'bCE9cmUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIreS5sKyIgIT0gIityZSk7cmV0dXJuIFF9ZnVuY3Rpb24gancoeSxQLEwpe3ZhciBRPXZhKHksNik7c3dpdGNoKEwuYmlmZil7Y2FzZSAyOnkubCsrLFAtPTc7YnJlYWs7Y2FzZSAzOmNhc2UgNDp5LmwrPTIsUC09ODti'@;
put 'cmVhaztkZWZhdWx0OnkubCs9NixQLT0xMn1yZXR1cm5bUSxmdih5LFAsTCldfXZhciBNbT1bXTtmdW5jdGlvbiBYaCh5KXt2YXIgUD1wcigyNCksTD1zcyh5WzBdKTtQLndyaXRlX3NoaWZ0KDIsTC5yKSxQLndyaXRlX3NoaWZ0KDIsTC5yKSxQLndyaXRlX3NoaWZ0KDIsTC5jKSxQLndyaXRl'@;
put 'X3NoaWZ0KDIsTC5jKTtmb3IodmFyIFE9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLHJlPTA7cmU8MTY7KytyZSlQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoUVtyZV0sMTYpKTtyZXR1cm4gUyhbUCxiMyh5WzFdKV0pfWZ1bmN0'@;
put 'aW9uIFFUKHkpe3ZhciBQPXlbMV0uVG9vbHRpcCxMPXByKDEwKzIqKFAubGVuZ3RoKzEpKTtMLndyaXRlX3NoaWZ0KDIsMjA0OCk7dmFyIFE9c3MoeVswXSk7TC53cml0ZV9zaGlmdCgyLFEuciksTC53cml0ZV9zaGlmdCgyLFEuciksTC53cml0ZV9zaGlmdCgyLFEuYyksTC53cml0ZV9zaGlm'@;
put 'dCgyLFEuYyk7Zm9yKHZhciByZT0wO3JlPFAubGVuZ3RoOysrcmUpTC53cml0ZV9zaGlmdCgyLFAuY2hhckNvZGVBdChyZSkpO3JldHVybiBMLndyaXRlX3NoaWZ0KDIsMCksTH1mdW5jdGlvbiBWZCh5LFAsTCl7aWYoIUwuY2VsbFN0eWxlcylyZXR1cm4geWMoeSxQKTt2YXIgUT1MJiZMLmJp'@;
put 'ZmY+PTEyPzQ6MixyZT15LnJlYWRfc2hpZnQoUSksZ2U9eS5yZWFkX3NoaWZ0KFEpLF9lPXkucmVhZF9zaGlmdChRKSx2ZT15LnJlYWRfc2hpZnQoUSksU2U9eS5yZWFkX3NoaWZ0KDIpOzI9PVEmJih5LmwrPTIpO3ZhciBIZT17czpyZSxlOmdlLHc6X2UsaXhmZTp2ZSxmbGFnczpTZX07cmV0'@;
put 'dXJuKEwuYmlmZj49NXx8IUwuYmlmZikmJihIZS5sZXZlbD1TZT4+OCY3KSxIZX1NbVs4XT1mdW5jdGlvbih5LFApe3ZhciBMPXkubCtQO3kubCs9MTA7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpO3kubCs9NCx5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTQ7dmFyIHJlPXkucmVhZF9zaGlmdCgx'@;
put 'KTtyZXR1cm4geS5sKz1yZSx5Lmw9TCx7Zm10OlF9fTt2YXIgcXc9THUsS3c9SDEsaUQ9TjI7dmFyIEIyPWZ1bmN0aW9uKCl7dmFyIHk9ezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4'@;
put 'NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjcsODo4NjUsOTo0MzcsMTA6ODUwLDExOjQzNywxMzo0'@;
put 'MzcsMTQ6ODUwLDE1OjQzNywxNjo4NTAsMTc6NDM3LDE4Ojg1MCwxOTo5MzIsMjA6ODUwLDIxOjQzNywyMjo4NTAsMjM6ODY1LDI0OjQzNywyNTo0MzcsMjY6ODUwLDI3OjQzNywyODo4NjMsMjk6ODUwLDMxOjg1MiwzNDo4NTIsMzU6ODUyLDM2Ojg2MCwzNzo4NTAsMzg6ODY2LDU1Ojg1MCw2'@;
put 'NDo4NTIsNzc6OTM2LDc4Ojk0OSw3OTo5NTAsODA6ODc0LDg3OjEyNTIsODg6MTI1Miw4OToxMjUyLDEwODo4NjMsMTM0OjczNywxMzU6ODUyLDEzNjo4NTcsMjA0OjEyNTcsMjU1OjE2OTY5fSxQPWJlKHsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUs'@;
put 'MTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1Myww'@;
put 'OjIwMTI3fSk7ZnVuY3Rpb24gcmUoU2UsSGUpe3ZhciBCZT1IZXx8e307cmV0dXJuIEJlLmRhdGVORnx8KEJlLmRhdGVORj0ieXl5eW1tZGQiKSxrMShmdW5jdGlvbiBRKFNlLEhlKXt2YXIgQmU9W10sR2U9RygxKTtzd2l0Y2goSGUudHlwZSl7Y2FzZSJiYXNlNjQiOkdlPUQoc2UuZGVjb2Rl'@;
put 'KFNlKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkdlPUQoU2UpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpHZT1TZX1vbChHZSwwKTt2YXIgbnQ9R2UucmVhZF9zaGlmdCgxKSxkdD0hISgxMzYmbnQpLEN0PSExLGN0PSExO3N3aXRjaChudCl7Y2FzZSAyOmNhc2UgMzpjYXNlIDEzMTpj'@;
put 'YXNlIDEzOTpjYXNlIDI0NTpicmVhaztjYXNlIDQ4OmNhc2UgNDk6Q3Q9ITAsZHQ9ITA7YnJlYWs7Y2FzZSAxNDA6Y3Q9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBWZXJzaW9uOiAiK250LnRvU3RyaW5nKDE2KSl9dmFyIGJ0PTAsRnQ9NTIxOzI9'@;
put 'PW50JiYoYnQ9R2UucmVhZF9zaGlmdCgyKSksR2UubCs9MywyIT1udCYmKGJ0PUdlLnJlYWRfc2hpZnQoNCkpLGJ0PjEwNDg1NzYmJihidD0xZTYpLDIhPW50JiYoRnQ9R2UucmVhZF9zaGlmdCgyKSk7dmFyIGt0PUdlLnJlYWRfc2hpZnQoMiksVHQ9SGUuY29kZXBhZ2V8fDEyNTI7MiE9bnQm'@;
put 'JihHZS5sKz0xNixHZS5yZWFkX3NoaWZ0KDEpLDAhPT1HZVtHZS5sXSYmKFR0PXlbR2VbR2UubF1dKSxHZS5sKz0xLEdlLmwrPTIpLGN0JiYoR2UubCs9MzYpO2Zvcih2YXIgWnQ9W10scG49e30sS249TWF0aC5taW4oR2UubGVuZ3RoLDI9PW50PzUyMTpGdC0xMC0oQ3Q/MjY0OjApKSx1bj1j'@;
put 'dD8zMjoxMTtHZS5sPEtuJiYxMyE9R2VbR2UubF07KXN3aXRjaChwbj17fSxwbi5uYW1lPWNwdGFibGUudXRpbHMuZGVjb2RlKFR0LEdlLnNsaWNlKEdlLmwsR2UubCt1bikpLnJlcGxhY2UoL1tcdTAwMDBcclxuXS4qJC9nLCIiKSxHZS5sKz11bixwbi50eXBlPVN0cmluZy5mcm9tQ2hhckNv'@;
put 'ZGUoR2UucmVhZF9zaGlmdCgxKSksMiE9bnQmJiFjdCYmKHBuLm9mZnNldD1HZS5yZWFkX3NoaWZ0KDQpKSxwbi5sZW49R2UucmVhZF9zaGlmdCgxKSwyPT1udCYmKHBuLm9mZnNldD1HZS5yZWFkX3NoaWZ0KDIpKSxwbi5kZWM9R2UucmVhZF9zaGlmdCgxKSxwbi5uYW1lLmxlbmd0aCYmWnQu'@;
put 'cHVzaChwbiksMiE9bnQmJihHZS5sKz1jdD8xMzoxNCkscG4udHlwZSl7Y2FzZSJCIjooIUN0fHw4IT1wbi5sZW4pJiZIZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK3BuLm5hbWUrIjoiK3BuLnR5cGUpO2JyZWFrO2Nhc2UiRyI6Y2FzZSJQIjpIZS5XVEYmJmNvbnNvbGUubG9nKCJT'@;
put 'a2lwcGluZyAiK3BuLm5hbWUrIjoiK3BuLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2UiSSI6Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6Y2FzZSJPIjpjYXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcg'@;
put 'RXJyb3IoIlVua25vd24gRmllbGQgVHlwZTogIitwbi50eXBlKX1pZigxMyE9PUdlW0dlLmxdJiYoR2UubD1GdC0xKSwxMyE9PUdlLnJlYWRfc2hpZnQoMSkpdGhyb3cgbmV3IEVycm9yKCJEQkYgVGVybWluYXRvciBub3QgZm91bmQgIitHZS5sKyIgIitHZVtHZS5sXSk7R2UubD1GdDt2YXIg'@;
put 'cW49MCx6bj0wO2ZvcihCZVswXT1bXSx6bj0wO3puIT1adC5sZW5ndGg7Kyt6bilCZVswXVt6bl09WnRbem5dLm5hbWU7Zm9yKDtidC0tID4wOylpZig0MiE9PUdlW0dlLmxdKWZvcigrK0dlLmwsQmVbKytxbl09W10sem49MCx6bj0wO3puIT1adC5sZW5ndGg7Kyt6bil7dmFyIGtuPUdlLnNs'@;
put 'aWNlKEdlLmwsR2UubCtadFt6bl0ubGVuKTtHZS5sKz1adFt6bl0ubGVuLG9sKGtuLDApO3ZhciBlcj1jcHRhYmxlLnV0aWxzLmRlY29kZShUdCxrbik7c3dpdGNoKFp0W3puXS50eXBlKXtjYXNlIkMiOmVyLnRyaW0oKS5sZW5ndGgmJihCZVtxbl1bem5dPWVyLnJlcGxhY2UoL1xzKyQvLCIi'@;
put 'KSk7YnJlYWs7Y2FzZSJEIjpCZVtxbl1bem5dPTg9PT1lci5sZW5ndGg/bmV3IERhdGUoK2VyLnNsaWNlKDAsNCksK2VyLnNsaWNlKDQsNiktMSwrZXIuc2xpY2UoNiw4KSk6ZXI7YnJlYWs7Y2FzZSJGIjpCZVtxbl1bem5dPXBhcnNlRmxvYXQoZXIudHJpbSgpKTticmVhaztjYXNlIisiOmNh'@;
put 'c2UiSSI6QmVbcW5dW3puXT1jdD8yMTQ3NDgzNjQ4XmtuLnJlYWRfc2hpZnQoLTQsImkiKTprbi5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIkwiOnN3aXRjaChlci50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOkJlW3FuXVt6bl09ITA7YnJlYWs7Y2FzZSJOIjpj'@;
put 'YXNlIkYiOkJlW3FuXVt6bl09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitlcisifCIpfWJyZWFrO2Nhc2UiTSI6aWYoIWR0KXRocm93IG5ldyBFcnJvcigiREJGIFVuZXhwZWN0ZWQgTUVNTyBmb3Ig'@;
put 'dHlwZSAiK250LnRvU3RyaW5nKDE2KSk7QmVbcW5dW3puXT0iIyNNRU1PIyMiKyhjdD9wYXJzZUludChlci50cmltKCksMTApOmtuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KGVyPWVyLnJlcGxhY2UoL1x1MDAwMC9nLCIiKS50cmltKCkpJiYiLiIhPWVyJiYoQmVbcW5dW3puXT0r'@;
put 'ZXJ8fDApO2JyZWFrO2Nhc2UiQCI6QmVbcW5dW3puXT1uZXcgRGF0ZShrbi5yZWFkX3NoaWZ0KC04LCJmIiktNjIxMzU2ODMyZTUpO2JyZWFrO2Nhc2UiVCI6QmVbcW5dW3puXT1uZXcgRGF0ZSg4NjRlNSooa24ucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStrbi5yZWFkX3NoaWZ0KDQpKTticmVh'@;
put 'aztjYXNlIlkiOkJlW3FuXVt6bl09a24ucmVhZF9zaGlmdCg0LCJpIikvMWU0O2JyZWFrO2Nhc2UiTyI6QmVbcW5dW3puXT0ta24ucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoQ3QmJjg9PVp0W3puXS5sZW4pe0JlW3FuXVt6bl09a24ucmVhZF9zaGlmdCg4LCJmIik7YnJl'@;
put 'YWt9Y2FzZSJHIjpjYXNlIlAiOmtuLmwrPVp0W3puXS5sZW47YnJlYWs7Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT1adFt6bl0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK1p0W3puXS50eXBlKX19ZWxzZSBHZS5sKz1r'@;
put 'dDtpZigyIT1udCYmR2UubDxHZS5sZW5ndGgmJjI2IT1HZVtHZS5sKytdKXRocm93IG5ldyBFcnJvcigiREJGIEVPRiBNYXJrZXIgbWlzc2luZyAiKyhHZS5sLTEpKyIgb2YgIitHZS5sZW5ndGgrIiAiK0dlW0dlLmwtMV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gSGUmJkhlLnNoZWV0Um93cyYm'@;
put 'KEJlPUJlLnNsaWNlKDAsSGUuc2hlZXRSb3dzKSksQmV9KFNlLEJlKSxCZSl9dmFyIF9lPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dmVyc2lvbnM6WzIsMyw0OCw0OSwxMzEsMTM5LDE0MCwyNDVdLHRvX3dvcmtib29rOmZ1bmN0aW9uIGdlKFNlLEhlKXt0cnl7cmV0'@;
put 'dXJuIEVkKHJlKFNlLEhlKSxIZSl9Y2F0Y2goQmUpe2lmKEhlJiZIZS5XVEYpdGhyb3cgQmV9cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6cmUsZnJvbV9zaGVldDpmdW5jdGlvbiB2ZShTZSxIZSl7dmFyIEJlPUhlfHx7fTtpZigrQmUuY29kZXBhZ2U+PTAmJmoo'@;
put 'K0JlLmNvZGVwYWdlKSwic3RyaW5nIj09QmUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBEQkYgdG8gSlMgc3RyaW5nIik7dmFyIEdlPXdjKCksbnQ9SDYoU2Use2hlYWRlcjoxLHJhdzohMCxjZWxsRGF0ZXM6ITB9KSxkdD1udFswXSxDdD1udC5zbGljZSgxKSxjdD0wLGJ0'@;
put 'PTAsRnQ9MCxrdD0xO2ZvcihjdD0wO2N0PGR0Lmxlbmd0aDsrK2N0KWlmKG51bGwhPWN0KXtpZigrK0Z0LCJudW1iZXIiPT10eXBlb2YgZHRbY3RdJiYoZHRbY3RdPWR0W2N0XS50b1N0cmluZygxMCkpLCJzdHJpbmciIT10eXBlb2YgZHRbY3RdKXRocm93IG5ldyBFcnJvcigiREJGIEludmFs'@;
put 'aWQgY29sdW1uIG5hbWUgIitkdFtjdF0rIiB8Iit0eXBlb2YgZHRbY3RdKyJ8Iik7aWYoZHQuaW5kZXhPZihkdFtjdF0pIT09Y3QpZm9yKGJ0PTA7YnQ8MTAyNDsrK2J0KWlmKC0xPT1kdC5pbmRleE9mKGR0W2N0XSsiXyIrYnQpKXtkdFtjdF0rPSJfIitidDticmVha319dmFyIFR0PU9pKFNl'@;
put 'WyIhcmVmIl0pLFp0PVtdO2ZvcihjdD0wO2N0PD1UdC5lLmMtVHQucy5jOysrY3Qpe3ZhciBwbj1bXTtmb3IoYnQ9MDtidDxDdC5sZW5ndGg7KytidCludWxsIT1DdFtidF1bY3RdJiZwbi5wdXNoKEN0W2J0XVtjdF0pO2lmKDAhPXBuLmxlbmd0aCYmbnVsbCE9ZHRbY3RdKXt2YXIgS249IiIs'@;
put 'dW49IiI7Zm9yKGJ0PTA7YnQ8cG4ubGVuZ3RoOysrYnQpe3N3aXRjaCh0eXBlb2YgcG5bYnRdKXtjYXNlIm51bWJlciI6dW49IkIiO2JyZWFrO2Nhc2Uic3RyaW5nIjpkZWZhdWx0OnVuPSJDIjticmVhaztjYXNlImJvb2xlYW4iOnVuPSJMIjticmVhaztjYXNlIm9iamVjdCI6dW49cG5bYnRd'@;
put 'aW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9aWYoIkMiPT0oS249S24mJktuIT11bj8iQyI6dW4pKWJyZWFrfWt0Kz1fZVtLbl18fDAsWnRbY3RdPUtufWVsc2UgWnRbY3RdPSI/In12YXIgcW49R2UubmV4dCgzMik7Zm9yKHFuLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxxbi53cml0ZV9zaGlm'@;
put 'dCg0LEN0Lmxlbmd0aCkscW4ud3JpdGVfc2hpZnQoMiwyOTYrMzIqRnQpLHFuLndyaXRlX3NoaWZ0KDIsa3QpLGN0PTA7Y3Q8NDsrK2N0KXFuLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHFuLndyaXRlX3NoaWZ0KDQsMHwoK1BbUl18fDMpPDw4KSxjdD0wLGJ0PTA7Y3Q8ZHQubGVuZ3RoOysrY3Qp'@;
put 'aWYobnVsbCE9ZHRbY3RdKXt2YXIgem49R2UubmV4dCgzMiksa249KGR0W2N0XS5zbGljZSgtMTApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7em4ud3JpdGVfc2hpZnQoMSxrbiwic2JjcyIpLHpuLndyaXRlX3NoaWZ0KDEsIj8iPT1adFtjdF0/IkMiOlp0W2N0XSwi'@;
put 'c2JjcyIpLHpuLndyaXRlX3NoaWZ0KDQsYnQpLHpuLndyaXRlX3NoaWZ0KDEsX2VbWnRbY3RdXXx8MCksem4ud3JpdGVfc2hpZnQoMSwwKSx6bi53cml0ZV9zaGlmdCgxLDIpLHpuLndyaXRlX3NoaWZ0KDQsMCksem4ud3JpdGVfc2hpZnQoMSwwKSx6bi53cml0ZV9zaGlmdCg0LDApLHpuLndy'@;
put 'aXRlX3NoaWZ0KDQsMCksYnQrPV9lW1p0W2N0XV18fDB9dmFyIGVyPUdlLm5leHQoMjY0KTtmb3IoZXIud3JpdGVfc2hpZnQoNCwxMyksY3Q9MDtjdDw2NTsrK2N0KWVyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKGN0PTA7Y3Q8Q3QubGVuZ3RoOysrY3Qpe3ZhciB0cj1HZS5uZXh0KGt0KTtmb3Io'@;
put 'dHIud3JpdGVfc2hpZnQoMSwwKSxidD0wO2J0PGR0Lmxlbmd0aDsrK2J0KWlmKG51bGwhPWR0W2J0XSlzd2l0Y2goWnRbYnRdKXtjYXNlIkwiOnRyLndyaXRlX3NoaWZ0KDEsbnVsbD09Q3RbY3RdW2J0XT82MzpDdFtjdF1bYnRdPzg0OjcwKTticmVhaztjYXNlIkIiOnRyLndyaXRlX3NoaWZ0'@;
put 'KDgsQ3RbY3RdW2J0XXx8MCwiZiIpO2JyZWFrO2Nhc2UiRCI6Q3RbY3RdW2J0XT8odHIud3JpdGVfc2hpZnQoNCwoIjAwMDAiK0N0W2N0XVtidF0uZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTQpLCJzYmNzIiksdHIud3JpdGVfc2hpZnQoMiwoIjAwIisoQ3RbY3RdW2J0XS5nZXRNb250aCgpKzEp'@;
put 'KS5zbGljZSgtMiksInNiY3MiKSx0ci53cml0ZV9zaGlmdCgyLCgiMDAiK0N0W2N0XVtidF0uZ2V0RGF0ZSgpKS5zbGljZSgtMiksInNiY3MiKSk6dHIud3JpdGVfc2hpZnQoOCwiMDAwMDAwMDAiLCJzYmNzIik7YnJlYWs7Y2FzZSJDIjp2YXIgWm49U3RyaW5nKEN0W2N0XVtidF18fCIiKTtm'@;
put 'b3IodHIud3JpdGVfc2hpZnQoMSxabiwic2JjcyIpLEZ0PTA7RnQ8MjUwLVpuLmxlbmd0aDsrK0Z0KXRyLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1cm4gR2UubmV4dCgxKS53cml0ZV9zaGlmdCgxLDI2KSxHZS5lbmQoKX19fSgpLEU5PWZ1bmN0aW9uKCl7dmFyIHk9e0FBOiJceGMwIixCQToi'@;
put 'XHhjMSIsQ0E6Ilx4YzIiLERBOjE5NSxIQToiXHhjNCIsSkE6MTk3LEFFOiJceGM4IixCRToiXHhjOSIsQ0U6Ilx4Y2EiLEhFOiJceGNiIixBSToiXHhjYyIsQkk6Ilx4Y2QiLENJOiJceGNlIixISToiXHhjZiIsQU86Ilx4ZDIiLEJPOiJceGQzIixDTzoiXHhkNCIsRE86MjEzLEhPOiJceGQ2'@;
put 'IixBVToiXHhkOSIsQlU6Ilx4ZGEiLENVOiJceGRiIixIVToiXHhkYyIsQWE6Ilx4ZTAiLEJhOiJceGUxIixDYToiXHhlMiIsRGE6MjI3LEhhOiJceGU0IixKYToyMjksQWU6Ilx4ZTgiLEJlOiJceGU5IixDZToiXHhlYSIsSGU6Ilx4ZWIiLEFpOiJceGVjIixCaToiXHhlZCIsQ2k6Ilx4ZWUi'@;
put 'LEhpOiJceGVmIixBbzoiXHhmMiIsQm86Ilx4ZjMiLENvOiJceGY0IixEbzoyNDUsSG86Ilx4ZjYiLEF1OiJceGY5IixCdToiXHhmYSIsQ3U6Ilx4ZmIiLEh1OiJceGZjIixLQzoiXHhjNyIsS2M6Ilx4ZTciLHE6Ilx4ZTYiLHo6Ilx1MDE1MyIsYToiXHhjNiIsajoiXHUwMTUyIixETjoyMDks'@;
put 'RG46MjQxLEh5OjI1NSxTOjE2OSxjOjE3MCxSOjE3NCwiQiAiOjE4MCwwOjE3NiwxOjE3NywyOjE3OCwzOjE3OSw1OjE4MSw2OjE4Miw3OjE4MyxROjE4NSxrOjE4NixiOjIwOCxpOjIxNixsOjIyMixzOjI0MCx5OjI0OCwiISI6MTYxLCciJzoxNjIsIiMiOjE2MywiKCI6MTY0LCIlIjoxNjUs'@;
put 'IiciOjE2NywiSCAiOjE2OCwiKyI6MTcxLCI7IjoxODcsIjwiOjE4OCwiPSI6MTg5LCI+IjoxOTAsIj8iOjE5MSwieyI6MjIzfSxQPW5ldyBSZWdFeHAoIlx4MWJOKCIrbHQoeSkuam9pbigifCIpLnJlcGxhY2UoL1x8XHxcfC8sInxcXHx8IikucmVwbGFjZSgvKFs/KCkrXSkvZywiXFwkMSIp'@;
put 'KyJ8XFx8KSIsImdtIiksTD1mdW5jdGlvbihudCxkdCl7dmFyIEN0PXlbZHRdO3JldHVybiJudW1iZXIiPT10eXBlb2YgQ3Q/ZWUoQ3QpOkN0fSxRPWZ1bmN0aW9uKG50LGR0LEN0KXt2YXIgY3Q9ZHQuY2hhckNvZGVBdCgwKS0zMjw8NHxDdC5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09'@;
put 'Y3Q/bnQ6ZWUoY3QpfTtmdW5jdGlvbiBnZShudCxkdCl7dmFyIGVyLEN0PW50LnNwbGl0KC9bXG5ccl0rLyksY3Q9LTEsYnQ9LTEsRnQ9MCxrdD0wLFR0PVtdLFp0PVtdLHBuPW51bGwsS249e30sdW49W10scW49W10sem49W10sa249MDtmb3IoK2R0LmNvZGVwYWdlPj0wJiZqKCtkdC5jb2Rl'@;
put 'cGFnZSk7RnQhPT1DdC5sZW5ndGg7KytGdCl7a249MDt2YXIgc2ksdHI9Q3RbRnRdLnRyaW0oKS5yZXBsYWNlKC9ceDFCKFtceDIwLVx4MkZdKShbXHgzMC1ceDNGXSkvZyxRKS5yZXBsYWNlKFAsTCksWm49dHIucmVwbGFjZSgvOzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbih3'@;
put 'aSl7cmV0dXJuIHdpLnJlcGxhY2UoL1x1MDAwMC9nLCI7Iil9KTtpZih0ci5sZW5ndGg+MClzd2l0Y2goWm5bMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PVpuWzFdLmNoYXJBdCgwKSYmWnQucHVzaCh0ci5zbGljZSgzKS5y'@;
put 'ZXBsYWNlKC87Oy9nLCI7IikpO2JyZWFrO2Nhc2UiQyI6dmFyIHhpPSExLExpPSExLFFyPSExLHVyPSExLEFuPS0xLHZyPS0xO2ZvcihrdD0xO2t0PFpuLmxlbmd0aDsrK2t0KXN3aXRjaChabltrdF0uY2hhckF0KDApKXtjYXNlIkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjpidD1wYXJzZUlu'@;
put 'dChabltrdF0uc2xpY2UoMSkpLTEsTGk9ITA7YnJlYWs7Y2FzZSJZIjpmb3IoY3Q9cGFyc2VJbnQoWm5ba3RdLnNsaWNlKDEpKS0xLExpfHwoYnQ9MCksZXI9VHQubGVuZ3RoO2VyPD1jdDsrK2VyKVR0W2VyXT1bXTticmVhaztjYXNlIksiOiciJz09PShzaT1abltrdF0uc2xpY2UoMSkpLmNo'@;
put 'YXJBdCgwKT9zaT1zaS5zbGljZSgxLHNpLmxlbmd0aC0xKToiVFJVRSI9PT1zaT9zaT0hMDoiRkFMU0UiPT09c2k/c2k9ITE6aXNOYU4oV24oc2kpKT9pc05hTihlbihzaSkuZ2V0RGF0ZSgpKXx8KHNpPUh0KHNpKSk6KHNpPVduKHNpKSxudWxsIT09cG4mJncuaXNfZGF0ZShwbikmJihzaT1o'@;
put 'dChzaSkpKSx0eXBlb2YgY3B0YWJsZTwidSImJiJzdHJpbmciPT10eXBlb2Ygc2kmJiJzdHJpbmciIT0oZHR8fHt9KS50eXBlJiYoZHR8fHt9KS5jb2RlcGFnZSYmKHNpPWNwdGFibGUudXRpbHMuZGVjb2RlKGR0LmNvZGVwYWdlLHNpKSkseGk9ITA7YnJlYWs7Y2FzZSJFIjp1cj0hMDt2YXIg'@;
put 'cnI9YWYoWm5ba3RdLnNsaWNlKDEpLHtyOmN0LGM6YnR9KTtUdFtjdF1bYnRdPVtUdFtjdF1bYnRdLHJyXTticmVhaztjYXNlIlMiOlFyPSEwLFR0W2N0XVtidF09W1R0W2N0XVtidF0sIlM1UyJdO2JyZWFrO2Nhc2UiUiI6QW49cGFyc2VJbnQoWm5ba3RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nh'@;
put 'c2UiQyI6dnI9cGFyc2VJbnQoWm5ba3RdLnNsaWNlKDEpKS0xO2JyZWFrO2RlZmF1bHQ6aWYoZHQmJmR0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK3RyKX1pZih4aSYmKFR0W2N0XVtidF0mJjI9PVR0W2N0XVtidF0ubGVuZ3RoP1R0W2N0XVtidF1bMF09c2k6VHRb'@;
put 'Y3RdW2J0XT1zaSxwbj1udWxsKSxRcil7aWYodXIpdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIFNuPUFuPi0xJiZUdFtBbl1bdnJdO2lmKCFTbnx8IVNuWzFdKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9y'@;
put 'bXVsYSBjYW5ub3QgZmluZCBiYXNlIik7VHRbY3RdW2J0XVsxXT1qQyhTblsxXSx7cjpjdC1BbixjOmJ0LXZyfSl9YnJlYWs7Y2FzZSJGIjp2YXIgbXI9MDtmb3Ioa3Q9MTtrdDxabi5sZW5ndGg7KytrdClzd2l0Y2goWm5ba3RdLmNoYXJBdCgwKSl7Y2FzZSJYIjpidD1wYXJzZUludChabltr'@;
put 'dF0uc2xpY2UoMSkpLTEsKyttcjticmVhaztjYXNlIlkiOmZvcihjdD1wYXJzZUludChabltrdF0uc2xpY2UoMSkpLTEsZXI9VHQubGVuZ3RoO2VyPD1jdDsrK2VyKVR0W2VyXT1bXTticmVhaztjYXNlIk0iOmtuPXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpj'@;
put 'YXNlIkciOmNhc2UiUyI6Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nhc2UiUCI6cG49WnRbcGFyc2VJbnQoWm5ba3RdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpmb3Ioem49Wm5ba3RdLnNsaWNlKDEpLnNwbGl0KCIgIiksZXI9cGFyc2VJbnQoem5bMF0sMTApO2VyPD1wYXJzZUludCh6blsx'@;
put 'XSwxMCk7Kytlcilrbj1wYXJzZUludCh6blsyXSwxMCkscW5bZXItMV09MD09PWtuP3toaWRkZW46ITB9Ont3Y2g6a259LHB1KHFuW2VyLTFdKTticmVhaztjYXNlIkMiOnFuW2J0PXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSktMV18fChxbltidF09e30pO2JyZWFrO2Nhc2UiUiI6dW5bY3Q9'@;
put 'cGFyc2VJbnQoWm5ba3RdLnNsaWNlKDEpKS0xXXx8KHVuW2N0XT17fSksa24+MD8odW5bY3RdLmhwdD1rbix1bltjdF0uaHB4PVUxKGtuKSk6MD09PWtuJiYodW5bY3RdLmhpZGRlbj0hMCk7YnJlYWs7ZGVmYXVsdDppZihkdCYmZHQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVj'@;
put 'b3JkICIrdHIpfW1yPDEmJihwbj1udWxsKTticmVhaztkZWZhdWx0OmlmKGR0JiZkdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIit0cil9fXJldHVybiB1bi5sZW5ndGg+MCYmKEtuWyIhcm93cyJdPXVuKSxxbi5sZW5ndGg+MCYmKEtuWyIhY29scyJdPXFuKSxkdCYm'@;
put 'ZHQuc2hlZXRSb3dzJiYoVHQ9VHQuc2xpY2UoMCxkdC5zaGVldFJvd3MpKSxbVHQsS25dfWZ1bmN0aW9uIF9lKG50LGR0KXt2YXIgQ3Q9ZnVuY3Rpb24gcmUobnQsZHQpe3N3aXRjaChkdC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIGdlKHNlLmRlY29kZShudCksZHQpO2Nhc2UiYmluYXJ5'@;
put 'IjpyZXR1cm4gZ2UobnQsZHQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gZ2UobnQudG9TdHJpbmcoImJpbmFyeSIpLGR0KTtjYXNlImFycmF5IjpyZXR1cm4gZ2UoUHQobnQpLGR0KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrZHQudHlwZSl9KG50LGR0KSxidD1DdFsxXSxG'@;
put 'dD1rMShDdFswXSxkdCk7cmV0dXJuIGx0KGJ0KS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtGdFtrdF09YnRba3RdfSksRnR9ZnVuY3Rpb24gU2UobnQsZHQsQ3QsY3Qpe3ZhciBidD0iQztZIisoQ3QrMSkrIjtYIisoY3QrMSkrIjtLIjtzd2l0Y2gobnQudCl7Y2FzZSJuIjpidCs9bnQudnx8MCxu'@;
put 'dC5mJiYhbnQuRiYmKGJ0Kz0iO0UiK0s5KG50LmYse3I6Q3QsYzpjdH0pKTticmVhaztjYXNlImIiOmJ0Kz1udC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2UiZSI6YnQrPW50Lnd8fG50LnY7YnJlYWs7Y2FzZSJkIjpidCs9JyInKyhudC53fHxudC52KSsnIic7YnJlYWs7Y2FzZSJzIjpi'@;
put 'dCs9JyInK250LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGJ0fXJldHVybiB5WyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiB2ZShudCxkdCl7cmV0dXJuIEVkKF9lKG50LGR0KSxkdCl9LHRvX3NoZWV0Ol9lLGZyb21fc2hlZXQ6ZnVuY3Rpb24gR2UobnQsZHQpe3ZhciBG'@;
put 'dCxDdD1bIklEO1BTaGVldEpTO047RSJdLGN0PVtdLGJ0PU9pKG50WyIhcmVmIl0pLGt0PUFycmF5LmlzQXJyYXkobnQpLFR0PSJcclxuIjtDdC5wdXNoKCJQO1BHZW5lcmFsIiksQ3QucHVzaCgiRjtQMDtERzBHODtNMjU1IiksbnRbIiFjb2xzIl0mJmZ1bmN0aW9uIEhlKG50LGR0KXtkdC5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKEN0LGN0KXt2YXIgYnQ9IkY7VyIrKGN0KzEpKyIgIisoY3QrMSkrIiAiO0N0LmhpZGRlbj9idCs9IjAiOigibnVtYmVyIj09dHlwZW9mIEN0LndpZHRoJiYhQ3Qud3B4JiYoQ3Qud3B4PXhjKEN0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBDdC53cHgmJiFDdC53'@;
put 'Y2gmJihDdC53Y2g9dGYoQ3Qud3B4KSksIm51bWJlciI9PXR5cGVvZiBDdC53Y2gmJihidCs9TWF0aC5yb3VuZChDdC53Y2gpKSksIiAiIT1idC5jaGFyQXQoYnQubGVuZ3RoLTEpJiZudC5wdXNoKGJ0KX0pfShDdCxudFsiIWNvbHMiXSksbnRbIiFyb3dzIl0mJmZ1bmN0aW9uIEJlKG50LGR0'@;
put 'KXtkdC5mb3JFYWNoKGZ1bmN0aW9uKEN0LGN0KXt2YXIgYnQ9IkY7IjtDdC5oaWRkZW4/YnQrPSJNMDsiOkN0LmhwdD9idCs9Ik0iKzIwKkN0LmhwdCsiOyI6Q3QuaHB4JiYoYnQrPSJNIisyMCpqMihDdC5ocHgpKyI7IiksYnQubGVuZ3RoPjImJm50LnB1c2goYnQrIlIiKyhjdCsxKSl9KX0o'@;
put 'Q3QsbnRbIiFyb3dzIl0pLEN0LnB1c2goIkI7WSIrKGJ0LmUuci1idC5zLnIrMSkrIjtYIisoYnQuZS5jLWJ0LnMuYysxKSsiO0QiK1tidC5zLmMsYnQucy5yLGJ0LmUuYyxidC5lLnJdLmpvaW4oIiAiKSk7Zm9yKHZhciBadD1idC5zLnI7WnQ8PWJ0LmUucjsrK1p0KWZvcih2YXIgcG49YnQu'@;
put 'cy5jO3BuPD1idC5lLmM7Kytwbil7dmFyIEtuPWRpKHtyOlp0LGM6cG59KTsoRnQ9a3Q/KG50W1p0XXx8W10pW3BuXTpudFtLbl0pJiYobnVsbCE9RnQudnx8RnQuZiYmIUZ0LkYpJiZjdC5wdXNoKFNlKEZ0LDAsWnQscG4pKX1yZXR1cm4gQ3Quam9pbihUdCkrVHQrY3Quam9pbihUdCkrVHQr'@;
put 'IkUiK1R0fX19KCksTTM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQKGdlLF9lKXtmb3IodmFyIHZlPWdlLnNwbGl0KCJcbiIpLFNlPS0xLEhlPS0xLEJlPTAsR2U9W107QmUhPT12ZS5sZW5ndGg7KytCZSlpZigiQk9UIiE9PXZlW0JlXS50cmltKCkpe2lmKCEoU2U8MCkpe2Zvcih2YXIgbnQ9dmVb'@;
put 'QmVdLnRyaW0oKS5zcGxpdCgiLCIpLGR0PW50WzBdLEN0PW50WzFdLGN0PXZlWysrQmVdfHwiIjsxJihjdC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZCZTx2ZS5sZW5ndGgtMTspY3QrPSJcbiIrdmVbKytCZV07c3dpdGNoKGN0PWN0LnRyaW0oKSwrZHQpe2Nhc2UtMTppZigiQk9UIj09'@;
put 'PWN0KXtHZVsrK1NlXT1bXSxIZT0wO2NvbnRpbnVlfWlmKCJFT0QiIT09Y3QpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK2N0KTticmVhaztjYXNlIDA6R2VbU2VdW0hlXT0iVFJVRSI9PT1jdHx8IkZBTFNFIiE9PWN0JiYoaXNOYU4oV24oQ3Qp'@;
put 'KT9pc05hTihlbihDdCkuZ2V0RGF0ZSgpKT9DdDpIdChDdCk6V24oQ3QpKSwrK0hlO2JyZWFrO2Nhc2UgMTooY3Q9KGN0PWN0LnNsaWNlKDEsY3QubGVuZ3RoLTEpKS5yZXBsYWNlKC8iIi9nLCciJykpJiZjdC5tYXRjaCgvXj0iLioiJC8pJiYoY3Q9Y3Quc2xpY2UoMiwtMSkpLEdlW1NlXVtI'@;
put 'ZSsrXT0iIiE9PWN0P2N0Om51bGx9aWYoIkVPRCI9PT1jdClicmVha319ZWxzZSBHZVsrK1NlXT1bXSxIZT0wO3JldHVybiBfZSYmX2Uuc2hlZXRSb3dzJiYoR2U9R2Uuc2xpY2UoMCxfZS5zaGVldFJvd3MpKSxHZX1mdW5jdGlvbiBMKGdlLF9lKXtyZXR1cm4gazEoZnVuY3Rpb24geShnZSxf'@;
put 'ZSl7c3dpdGNoKF9lLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUChzZS5kZWNvZGUoZ2UpLF9lKTtjYXNlImJpbmFyeSI6cmV0dXJuIFAoZ2UsX2UpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gUChnZS50b1N0cmluZygiYmluYXJ5IiksX2UpO2Nhc2UiYXJyYXkiOnJldHVybiBQKFB0KGdlKSxf'@;
put 'ZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK19lLnR5cGUpfShnZSxfZSksX2UpfXZhciBnZSxfZTtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gUShnZSxfZSl7cmV0dXJuIEVkKEwoZ2UsX2UpLF9lKX0sdG9fc2hlZXQ6TCxmcm9tX3NoZWV0OihnZT1mdW5jdGlv'@;
put 'bihTZSxIZSxCZSxHZSxudCl7U2UucHVzaChIZSksU2UucHVzaChCZSsiLCIrR2UpLFNlLnB1c2goJyInK250LnJlcGxhY2UoLyIvZywnIiInKSsnIicpfSxfZT1mdW5jdGlvbihTZSxIZSxCZSxHZSl7U2UucHVzaChIZSsiLCIrQmUpLFNlLnB1c2goMT09SGU/JyInK0dlLnJlcGxhY2UoLyIv'@;
put 'ZywnIiInKSsnIic6R2UpfSxmdW5jdGlvbihTZSl7dmFyIEdlLEhlPVtdLEJlPU9pKFNlWyIhcmVmIl0pLG50PUFycmF5LmlzQXJyYXkoU2UpO2dlKEhlLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksZ2UoSGUsIlZFQ1RPUlMiLDAsQmUuZS5yLUJlLnMucisxLCIiKSxnZShIZSwiVFVQTEVTIiww'@;
put 'LEJlLmUuYy1CZS5zLmMrMSwiIiksZ2UoSGUsIkRBVEEiLDAsMCwiIik7Zm9yKHZhciBkdD1CZS5zLnI7ZHQ8PUJlLmUucjsrK2R0KXtfZShIZSwtMSwwLCJCT1QiKTtmb3IodmFyIEN0PUJlLnMuYztDdDw9QmUuZS5jOysrQ3Qpe3ZhciBjdD1kaSh7cjpkdCxjOkN0fSk7aWYoR2U9bnQ/KFNl'@;
put 'W2R0XXx8W10pW0N0XTpTZVtjdF0pc3dpdGNoKEdlLnQpe2Nhc2UibiI6dmFyIGJ0PUdlLnc7IWJ0JiZudWxsIT1HZS52JiYoYnQ9R2UudiksbnVsbD09YnQ/X2UoSGUsMSwwLEdlLmYmJiFHZS5GPyI9IitHZS5mOiIiKTpfZShIZSwwLGJ0LCJWIik7YnJlYWs7Y2FzZSJiIjpfZShIZSwwLEdl'@;
put 'LnY/MTowLEdlLnY/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UicyI6X2UoSGUsMSwwLGlzTmFOKEdlLnYpP0dlLnY6Jz0iJytHZS52KyciJyk7YnJlYWs7Y2FzZSJkIjpHZS53fHwoR2Uudz13LmZvcm1hdChHZS56fHx3Ll90YWJsZVsxNF0sVWUoSHQoR2UudikpKSksX2UoSGUsMCxHZS53'@;
put 'LCJWIik7YnJlYWs7ZGVmYXVsdDpfZShIZSwxLDAsIiIpfWVsc2UgX2UoSGUsMSwwLCIiKX19cmV0dXJuIF9lKEhlLC0xLDAsIkVPRCIpLEhlLmpvaW4oIlxyXG4iKX0pfX0oKSxPND1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoR2Upe3JldHVybiBHZS5yZXBsYWNlKC9cXGIvZywiXFwiKS5yZXBs'@;
put 'YWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9uIFAoR2Upe3JldHVybiBHZS5yZXBsYWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNlKC86L2csIlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIFEoR2UsbnQpe3JldHVybiBrMShmdW5jdGlvbiBMKEdl'@;
put 'LG50KXtmb3IodmFyIGR0PUdlLnNwbGl0KCJcbiIpLEN0PS0xLGN0PS0xLGJ0PTAsRnQ9W107YnQhPT1kdC5sZW5ndGg7KytidCl7dmFyIGt0PWR0W2J0XS50cmltKCkuc3BsaXQoIjoiKTtpZigiY2VsbCI9PT1rdFswXSl7dmFyIFR0PXNzKGt0WzFdKTtpZihGdC5sZW5ndGg8PVR0LnIpZm9y'@;
put 'KEN0PUZ0Lmxlbmd0aDtDdDw9VHQucjsrK0N0KUZ0W0N0XXx8KEZ0W0N0XT1bXSk7c3dpdGNoKEN0PVR0LnIsY3Q9VHQuYyxrdFsyXSl7Y2FzZSJ0IjpGdFtDdF1bY3RdPXkoa3RbM10pO2JyZWFrO2Nhc2UidiI6RnRbQ3RdW2N0XT0ra3RbM107YnJlYWs7Y2FzZSJ2dGYiOnZhciBadD1rdFtr'@;
put 'dC5sZW5ndGgtMV07Y2FzZSJ2dGMiOkZ0W0N0XVtjdF09Im5sIj09PWt0WzNdPyEhK2t0WzRdOitrdFs0XSwidnRmIj09a3RbMl0mJihGdFtDdF1bY3RdPVtGdFtDdF1bY3RdLFp0XSl9fX1yZXR1cm4gbnQmJm50LnNoZWV0Um93cyYmKEZ0PUZ0LnNsaWNlKDAsbnQuc2hlZXRSb3dzKSksRnR9'@;
put 'KEdlLG50KSxudCl9dmFyIGdlPVsic29jaWFsY2FsYzp2ZXJzaW9uOjEuNSIsIk1JTUUtVmVyc2lvbjogMS4wIiwiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIl0uam9pbigiXG4iKSxfZT1bIi0tU29jaWFs'@;
put 'Q2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsdmU9WyIjIFNvY2lhbENhbGMgU3ByZWFkc2hlZXQgQ29udHJvbCBTYXZlIiwicGFydDpzaGVldCJdLmpvaW4oIlxuIiksU2U9Ii0tU29j'@;
put 'aWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUtLSI7ZnVuY3Rpb24gSGUoR2Upe2lmKCFHZXx8IUdlWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciBDdCxudD1bXSxkdD1bXSxjdD0iIixidD1XcyhHZVsiIXJlZiJdKSxGdD1BcnJheS5pc0FycmF5KEdlKSxrdD1idC5zLnI7a3Q8PWJ0LmUu'@;
put 'cjsrK2t0KWZvcih2YXIgVHQ9YnQucy5jO1R0PD1idC5lLmM7KytUdClpZihjdD1kaSh7cjprdCxjOlR0fSksKEN0PUZ0PyhHZVtrdF18fFtdKVtUdF06R2VbY3RdKSYmbnVsbCE9Q3QudiYmInoiIT09Q3QudCl7c3dpdGNoKGR0PVsiY2VsbCIsY3QsInQiXSxDdC50KXtjYXNlInMiOmNhc2Ui'@;
put 'c3RyIjpkdC5wdXNoKFAoQ3QudikpO2JyZWFrO2Nhc2UibiI6Q3QuZj8oZHRbMl09InZ0ZiIsZHRbM109Im4iLGR0WzRdPUN0LnYsZHRbNV09UChDdC5mKSk6KGR0WzJdPSJ2IixkdFszXT1DdC52KTticmVhaztjYXNlImIiOmR0WzJdPSJ2dCIrKEN0LmY/ImYiOiJjIiksZHRbM109Im5sIixk'@;
put 'dFs0XT1DdC52PyIxIjoiMCIsZHRbNV09UChDdC5mfHwoQ3Qudj8iVFJVRSI6IkZBTFNFIikpO2JyZWFrO2Nhc2UiZCI6dmFyIFp0PVVlKEh0KEN0LnYpKTtkdFsyXT0idnRjIixkdFszXT0ibmQiLGR0WzRdPSIiK1p0LGR0WzVdPUN0Lnd8fHcuZm9ybWF0KEN0Lnp8fHcuX3RhYmxlWzE0XSxa'@;
put 'dCk7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX1udC5wdXNoKGR0LmpvaW4oIjoiKSl9cmV0dXJuIG50LnB1c2goInNoZWV0OmM6IisoYnQuZS5jLWJ0LnMuYysxKSsiOnI6IisoYnQuZS5yLWJ0LnMucisxKSsiOnR2ZjoxIiksbnQucHVzaCgidmFsdWVmb3JtYXQ6MTp0ZXh0LXdpa2kiKSxudC5q'@;
put 'b2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiByZShHZSxudCl7cmV0dXJuIEVkKFEoR2UsbnQpLG50KX0sdG9fc2hlZXQ6USxmcm9tX3NoZWV0OmZ1bmN0aW9uIEJlKEdlKXtyZXR1cm5bZ2UsX2UsdmUsX2UsSGUoR2UpLFNlXS5qb2luKCJcbiIpfX19KCksQjE9ZnVuY3Rp'@;
put 'b24oKXtmdW5jdGlvbiB5KEJlLEdlLG50LGR0LEN0KXtDdC5yYXc/R2VbbnRdW2R0XT1CZToiIj09PUJlfHwoR2VbbnRdW2R0XT0kbihCZSxDdCk/JG4oQmUsQ3QpLnY6QmUpfXZhciBMPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sUT17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gcmUoQmUpe2Zv'@;
put 'cih2YXIgR2U9e30sbnQ9ITEsZHQ9MCxDdD0wO2R0PEJlLmxlbmd0aDsrK2R0KTM0PT0oQ3Q9QmUuY2hhckNvZGVBdChkdCkpP250PSFudDohbnQmJkN0IGluIEwmJihHZVtDdF09KEdlW0N0XXx8MCkrMSk7Zm9yKGR0IGluIEN0PVtdLEdlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy'@;
put 'dHkuY2FsbChHZSxkdCkmJkN0LnB1c2goW0dlW2R0XSxkdF0pO2lmKCFDdC5sZW5ndGgpZm9yKGR0IGluIEdlPVEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdlLGR0KSYmQ3QucHVzaChbR2VbZHRdLGR0XSk7cmV0dXJuIEN0LnNvcnQoZnVuY3Rpb24oY3QsYnQpe3Jl'@;
put 'dHVybiBjdFswXS1idFswXXx8UVtjdFsxXV0tUVtidFsxXV19KSxMW0N0LnBvcCgpWzFdXX1mdW5jdGlvbiBfZShCZSxHZSl7cmV0dXJuIUdlfHwhR2UuUFJOfHwic2VwPSI9PUJlLnNsaWNlKDAsNCl8fEJlLmluZGV4T2YoIlx0Iik+PTB8fEJlLmluZGV4T2YoIiwiKT49MHx8QmUuaW5kZXhP'@;
put 'ZigiOyIpPj0wP2Z1bmN0aW9uIGdlKEJlLEdlKXt2YXIgbnQ9R2V8fHt9LGR0PSIiO251bGwhPXRlJiZudWxsPT1udC5kZW5zZSYmKG50LmRlbnNlPXRlKTt2YXIgQ3Q9bnQuZGVuc2U/W106e30sY3Q9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTsic2VwPSI9PUJlLnNsaWNlKDAsNCk/MTM9'@;
put 'PUJlLmNoYXJDb2RlQXQoNSkmJjEwPT1CZS5jaGFyQ29kZUF0KDYpPyhkdD1CZS5jaGFyQXQoNCksQmU9QmUuc2xpY2UoNykpOjEzPT1CZS5jaGFyQ29kZUF0KDUpfHwxMD09QmUuY2hhckNvZGVBdCg1KT8oZHQ9QmUuY2hhckF0KDQpLEJlPUJlLnNsaWNlKDYpKTpkdD1yZShCZS5zbGljZSgw'@;
put 'LDEwMjQpKTpkdD1yZShCZS5zbGljZSgwLDEwMjQpKTt2YXIgYnQ9MCxGdD0wLGt0PTAsVHQ9MCxadD0wLHBuPWR0LmNoYXJDb2RlQXQoMCksS249ITEsdW49MCxxbj1CZS5jaGFyQ29kZUF0KDApO0JlPUJlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFyIHpuPW51bGwhPW50LmRhdGVORj9m'@;
put 'dW5jdGlvbiB4ZSh5KXt2YXIgUD0ibnVtYmVyIj09dHlwZW9mIHk/dy5fdGFibGVbeV06eTtyZXR1cm4gUD1QLnJlcGxhY2UoZmUsIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK1ArIiQiKX0obnQuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIGtuKCl7dmFyIGVyPUJlLnNsaWNlKFR0LFp0KSx0cj17'@;
put 'fTtpZignIic9PWVyLmNoYXJBdCgwKSYmJyInPT1lci5jaGFyQXQoZXIubGVuZ3RoLTEpJiYoZXI9ZXIuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09ZXIubGVuZ3RoKXRyLnQ9InoiO2Vsc2UgaWYobnQucmF3KXRyLnQ9InMiLHRyLnY9ZXI7ZWxzZSBpZigwPT09ZXIudHJp'@;
put 'bSgpLmxlbmd0aCl0ci50PSJzIix0ci52PWVyO2Vsc2UgaWYoNjE9PWVyLmNoYXJDb2RlQXQoMCkpMzQ9PWVyLmNoYXJDb2RlQXQoMSkmJjM0PT1lci5jaGFyQ29kZUF0KGVyLmxlbmd0aC0xKT8odHIudD0icyIsdHIudj1lci5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0'@;
put 'aW9uIFg5KHkpe3JldHVybiAxIT15Lmxlbmd0aH0oZXIpPyh0ci50PSJuIix0ci5mPWVyLnNsaWNlKDEpKToodHIudD0icyIsdHIudj1lcik7ZWxzZSBpZigiVFJVRSI9PWVyKXRyLnQ9ImIiLHRyLnY9ITA7ZWxzZSBpZigiRkFMU0UiPT1lcil0ci50PSJiIix0ci52PSExO2Vsc2UgaWYoaXNO'@;
put 'YU4oa3Q9V24oZXIpKSlpZighaXNOYU4oZW4oZXIpLmdldERhdGUoKSl8fHpuJiZlci5tYXRjaCh6bikpe3RyLno9bnQuZGF0ZU5GfHx3Ll90YWJsZVsxNF07dmFyIFpuPTA7em4mJmVyLm1hdGNoKHpuKSYmKGVyPWZ1bmN0aW9uIExlKHksUCxMKXt2YXIgUT0tMSxyZT0tMSxnZT0tMSxfZT0t'@;
put 'MSx2ZT0tMSxTZT0tMTsoUC5tYXRjaChmZSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEdlLG50KXt2YXIgZHQ9cGFyc2VJbnQoTFtudCsxXSwxMCk7c3dpdGNoKEdlLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApKXtjYXNlInkiOlE9ZHQ7YnJlYWs7Y2FzZSJkIjpnZT1kdDticmVhaztjYXNlImgi'@;
put 'Ol9lPWR0O2JyZWFrO2Nhc2UicyI6U2U9ZHQ7YnJlYWs7Y2FzZSJtIjpfZT49MD92ZT1kdDpyZT1kdH19KSxTZT49MCYmLTE9PXZlJiZyZT49MCYmKHZlPXJlLHJlPS0xKTt2YXIgSGU9KCIiKyhRPj0wP1E6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIiso'@;
put 'cmU+PTE/cmU6MSkpLnNsaWNlKC0yKSsiLSIrKCIwMCIrKGdlPj0xP2dlOjEpKS5zbGljZSgtMik7Nz09SGUubGVuZ3RoJiYoSGU9IjAiK0hlKSw4PT1IZS5sZW5ndGgmJihIZT0iMjAiK0hlKTt2YXIgQmU9KCIwMCIrKF9lPj0wP19lOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyh2ZT49MD92'@;
put 'ZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoU2U+PTA/U2U6MCkpLnNsaWNlKC0yKTtyZXR1cm4tMT09X2UmJi0xPT12ZSYmLTE9PVNlP0hlOi0xPT1RJiYtMT09cmUmJi0xPT1nZT9CZTpIZSsiVCIrQmV9KDAsbnQuZGF0ZU5GLGVyLm1hdGNoKHpuKXx8W10pLFpuPTEpLG50LmNlbGxEYXRl'@;
put 'cz8odHIudD0iZCIsdHIudj1IdChlcixabikpOih0ci50PSJuIix0ci52PVVlKEh0KGVyLFpuKSkpLCExIT09bnQuY2VsbFRleHQmJih0ci53PXcuZm9ybWF0KHRyLnosdHIudiBpbnN0YW5jZW9mIERhdGU/VWUodHIudik6dHIudikpLG50LmNlbGxORnx8ZGVsZXRlIHRyLnp9ZWxzZSB0ci50'@;
put 'PSJzIix0ci52PWVyO2Vsc2UgdHIudD0ibiIsITEhPT1udC5jZWxsVGV4dCYmKHRyLnc9ZXIpLHRyLnY9a3Q7aWYoInoiPT10ci50fHwobnQuZGVuc2U/KEN0W2J0XXx8KEN0W2J0XT1bXSksQ3RbYnRdW0Z0XT10cik6Q3RbZGkoe2M6RnQscjpidH0pXT10cikscW49QmUuY2hhckNvZGVBdChU'@;
put 'dD1adCsxKSxjdC5lLmM8RnQmJihjdC5lLmM9RnQpLGN0LmUucjxidCYmKGN0LmUucj1idCksdW49PXBuKSsrRnQ7ZWxzZSBpZihGdD0wLCsrYnQsbnQuc2hlZXRSb3dzJiZudC5zaGVldFJvd3M8PWJ0KXJldHVybiEwfWU6Zm9yKDtadDxCZS5sZW5ndGg7KytadClzd2l0Y2godW49QmUuY2hh'@;
put 'ckNvZGVBdChadCkpe2Nhc2UgMzQ6MzQ9PT1xbiYmKEtuPSFLbik7YnJlYWs7Y2FzZSBwbjpjYXNlIDEwOmNhc2UgMTM6aWYoIUtuJiZrbigpKWJyZWFrIGV9cmV0dXJuIFp0LVR0PjAmJmtuKCksQ3RbIiFyZWYiXT1PbyhjdCksQ3R9KEJlLEdlKTprMShmdW5jdGlvbiBQKEJlLEdlKXt2YXIg'@;
put 'bnQ9R2V8fHt9LGR0PVtdO2lmKCFCZXx8MD09PUJlLmxlbmd0aClyZXR1cm4gZHQ7Zm9yKHZhciBDdD1CZS5zcGxpdCgvW1xyXG5dLyksY3Q9Q3QubGVuZ3RoLTE7Y3Q+PTAmJjA9PT1DdFtjdF0ubGVuZ3RoOyktLWN0O2Zvcih2YXIgYnQ9MTAsRnQ9MCxrdD0wO2t0PD1jdDsrK2t0KS0xPT0o'@;
put 'RnQ9Q3Rba3RdLmluZGV4T2YoIiAiKSk/RnQ9Q3Rba3RdLmxlbmd0aDpGdCsrLGJ0PU1hdGgubWF4KGJ0LEZ0KTtmb3Ioa3Q9MDtrdDw9Y3Q7KytrdCl7ZHRba3RdPVtdO3ZhciBUdD0wO2Zvcih5KEN0W2t0XS5zbGljZSgwLGJ0KS50cmltKCksZHQsa3QsVHQsbnQpLFR0PTE7VHQ8PShDdFtr'@;
put 'dF0ubGVuZ3RoLWJ0KS8xMCsxOysrVHQpeShDdFtrdF0uc2xpY2UoYnQrMTAqKFR0LTEpLGJ0KzEwKlR0KS50cmltKCksZHQsa3QsVHQsbnQpfXJldHVybiBudC5zaGVldFJvd3MmJihkdD1kdC5zbGljZSgwLG50LnNoZWV0Um93cykpLGR0fShCZSxHZSksR2UpfWZ1bmN0aW9uIHZlKEJlLEdl'@;
put 'KXt2YXIgbnQ9IiIsZHQ9InN0cmluZyI9PUdlLnR5cGU/WzAsMCwwLDBdOmZfKEJlLEdlKTtzd2l0Y2goR2UudHlwZSl7Y2FzZSJiYXNlNjQiOm50PXNlLmRlY29kZShCZSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpudD1CZTticmVhaztjYXNlImJ1ZmZlciI6bnQ9NjUwMDE9'@;
put 'PUdlLmNvZGVwYWdlP0JlLnRvU3RyaW5nKCJ1dGY4Iik6R2UuY29kZXBhZ2UmJnR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZShHZS5jb2RlcGFnZSxCZSk6QmUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOm50PVB0KEJlKTticmVhaztkZWZhdWx0'@;
put 'OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitHZS50eXBlKX1yZXR1cm4gMjM5PT1kdFswXSYmMTg3PT1kdFsxXSYmMTkxPT1kdFsyXT9udD1QaShudC5zbGljZSgzKSk6ImJpbmFyeSI9PUdlLnR5cGUmJnR5cGVvZiBjcHRhYmxlPCJ1IiYmR2UuY29kZXBhZ2UmJihudD1j'@;
put 'cHRhYmxlLnV0aWxzLmRlY29kZShHZS5jb2RlcGFnZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgyODU5MSxudCkpKSwic29jaWFsY2FsYzp2ZXJzaW9uOiI9PW50LnNsaWNlKDAsMTkpP080LnRvX3NoZWV0KCJzdHJpbmciPT1HZS50eXBlP250OlBpKG50KSxHZSk6X2UobnQsR2UpfXJldHVybnt0'@;
put 'b193b3JrYm9vazpmdW5jdGlvbiBTZShCZSxHZSl7cmV0dXJuIEVkKHZlKEJlLEdlKSxHZSl9LHRvX3NoZWV0OnZlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gSGUoQmUpe2Zvcih2YXIgZHQsR2U9W10sbnQ9T2koQmVbIiFyZWYiXSksQ3Q9QXJyYXkuaXNBcnJheShCZSksY3Q9bnQucy5yO2N0PD1u'@;
put 'dC5lLnI7KytjdCl7Zm9yKHZhciBidD1bXSxGdD1udC5zLmM7RnQ8PW50LmUuYzsrK0Z0KXt2YXIga3Q9ZGkoe3I6Y3QsYzpGdH0pO2lmKChkdD1DdD8oQmVbY3RdfHxbXSlbRnRdOkJlW2t0XSkmJm51bGwhPWR0LnYpe2Zvcih2YXIgVHQ9KGR0Lnd8fChjdShkdCksZHQudyl8fCIiKS5zbGlj'@;
put 'ZSgwLDEwKTtUdC5sZW5ndGg8MTA7KVR0Kz0iICI7YnQucHVzaChUdCsoMD09PUZ0PyIgIjoiIikpfWVsc2UgYnQucHVzaCgiICAgICAgICAgICIpfUdlLnB1c2goYnQuam9pbigiIikpfXJldHVybiBHZS5qb2luKCJcbiIpfX19KCksVG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KEFuLHZyLHJy'@;
put 'KXtpZihBbil7b2woQW4sQW4ubHx8MCk7Zm9yKHZhciBTbj1yci5FbnVtfHxRcjtBbi5sPEFuLmxlbmd0aDspe3ZhciBtcj1Bbi5yZWFkX3NoaWZ0KDIpLHdpPVNuW21yXXx8U25bNjU1MzVdLFVyPUFuLnJlYWRfc2hpZnQoMiksamk9QW4ubCtVcixfbz13aS5mJiZ3aS5mKEFuLFVyLHJyKTtp'@;
put 'ZihBbi5sPWppLHZyKF9vLHdpLG1yKSlyZXR1cm59fX1mdW5jdGlvbiBMKEFuLHZyKXtpZighQW4pcmV0dXJuIEFuO3ZhciBycj12cnx8e307bnVsbCE9dGUmJm51bGw9PXJyLmRlbnNlJiYocnIuZGVuc2U9dGUpO3ZhciBTbj1yci5kZW5zZT9bXTp7fSxtcj0iU2hlZXQxIix3aT0wLFVyPXt9'@;
put 'LGppPVttcl0sX289W10sVGk9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxZbz1yci5zaGVldFJvd3N8fDA7aWYoMj09QW5bMl0pcnIuRW51bT1Rcix5KEFuLGZ1bmN0aW9uKGhpLHRhLE1uKXtzd2l0Y2goTW4pe2Nhc2UgMDpyci52ZXJzPWhpLGhpPj00MDk2JiYocnIucXBybz0hMCk7YnJl'@;
put 'YWs7Y2FzZSA2OlRpPWhpO2JyZWFrO2Nhc2UgMTU6Y2FzZSA1MTpyci5xcHJvfHwoaGlbMV0udj1oaVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09TW4mJjExMj09KDExMiZoaVsyXSkmJigxNSZoaVsyXSk+MSYmKDE1JmhpWzJdKTwxNSYmKGhpWzFdLno9cnIu'@;
put 'ZGF0ZU5GfHx3Ll90YWJsZVsxNF0scnIuY2VsbERhdGVzJiYoaGlbMV0udD0iZCIsaGlbMV0udj1odChoaVsxXS52KSkpO3ZhciBNcz1yci5kZW5zZT8oU25baGlbMF0ucl18fFtdKVtoaVswXS5jXTpTbltkaShoaVswXSldO2lmKE1zKXtNcy50PWhpWzFdLnQsTXMudj1oaVsxXS52LG51bGwh'@;
put 'PWhpWzFdLnomJihNcy56PWhpWzFdLnopLG51bGwhPWhpWzFdLmYmJihNcy5mPWhpWzFdLmYpO2JyZWFrfXJyLmRlbnNlPyhTbltoaVswXS5yXXx8KFNuW2hpWzBdLnJdPVtdKSxTbltoaVswXS5yXVtoaVswXS5jXT1oaVsxXSk6U25bZGkoaGlbMF0pXT1oaVsxXX19LHJyKTtlbHNle2lmKDI2'@;
put 'IT1BblsyXSYmMTQhPUFuWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0FuWzJdKTtyci5FbnVtPXVyLDE0PT1BblsyXSYmKHJyLnFwcm89ITAsQW4ubD0wKSx5KEFuLGZ1bmN0aW9uKGhpLHRhLE1uKXtzd2l0Y2goTW4pe2Nhc2UgMjI6aGlbMV0udj1oaVsx'@;
put 'XS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKGhpWzNdPndpJiYoU25bIiFyZWYiXT1PbyhUaSksVXJbbXJdPVNuLFNuPXJyLmRlbnNlP1tdOnt9LFRpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0samkucHVzaChtcj0iU2hl'@;
put 'ZXQiKygod2k9aGlbM10pKzEpKSksWW8+MCYmaGlbMF0ucj49WW8pYnJlYWs7cnIuZGVuc2U/KFNuW2hpWzBdLnJdfHwoU25baGlbMF0ucl09W10pLFNuW2hpWzBdLnJdW2hpWzBdLmNdPWhpWzFdKTpTbltkaShoaVswXSldPWhpWzFdLFRpLmUuYzxoaVswXS5jJiYoVGkuZS5jPWhpWzBdLmMp'@;
put 'LFRpLmUucjxoaVswXS5yJiYoVGkuZS5yPWhpWzBdLnIpO2JyZWFrO2Nhc2UgMjc6aGlbMTRlM10mJihfb1toaVsxNGUzXVswXV09aGlbMTRlM11bMV0pfX0scnIpfWlmKFNuWyIhcmVmIl09T28oVGkpLFVyW21yXT1TbiwhX28ubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOmppLFNoZWV0czpV'@;
put 'cn07Zm9yKHZhciBsbz17fSxBbz1bXSx4bz0wO3hvPF9vLmxlbmd0aDsrK3hvKVVyW2ppW3hvXV0mJihBby5wdXNoKF9vW3hvXSksbG9bX29beG9dXT1VcltqaVt4b11dKTtyZXR1cm57U2hlZXROYW1lczpBbyxTaGVldHM6bG99fWZ1bmN0aW9uIEhlKEFuLHZyLHJyKXt2YXIgU249W3tjOjAs'@;
put 'cjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gcnIucXBybyYmMjA3NjghPXJyLnZlcnM/KFNuWzBdLmM9QW4ucmVhZF9zaGlmdCgxKSxBbi5sKyssU25bMF0ucj1Bbi5yZWFkX3NoaWZ0KDIpLEFuLmwrPTIpOihTblsyXT1Bbi5yZWFkX3NoaWZ0KDEpLFNuWzBdLmM9QW4ucmVhZF9zaGlmdCgy'@;
put 'KSxTblswXS5yPUFuLnJlYWRfc2hpZnQoMikpLFNufWZ1bmN0aW9uIEJlKEFuLHZyLHJyKXt2YXIgU249QW4ubCt2cixtcj1IZShBbiwwLHJyKTtpZihtclsxXS50PSJzIiwyMDc2OD09cnIudmVycyl7QW4ubCsrO3ZhciB3aT1Bbi5yZWFkX3NoaWZ0KDEpO3JldHVybiBtclsxXS52PUFuLnJl'@;
put 'YWRfc2hpZnQod2ksInV0ZjgiKSxtcn1yZXR1cm4gcnIucXBybyYmQW4ubCsrLG1yWzFdLnY9QW4ucmVhZF9zaGlmdChTbi1Bbi5sLCJjc3RyIiksbXJ9ZnVuY3Rpb24gR2UoQW4sdnIscnIpe3ZhciBTbj1wcig3K3JyLmxlbmd0aCk7U24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3No'@;
put 'aWZ0KDIsdnIpLFNuLndyaXRlX3NoaWZ0KDIsQW4pLFNuLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgbXI9MDttcjxTbi5sZW5ndGg7Kyttcil7dmFyIHdpPXJyLmNoYXJDb2RlQXQobXIpO1NuLndyaXRlX3NoaWZ0KDEsd2k+PTEyOD85NTp3aSl9cmV0dXJuIFNuLndyaXRlX3NoaWZ0KDEs'@;
put 'MCksU259ZnVuY3Rpb24gZHQoQW4sdnIscnIpe3ZhciBTbj1wcig3KTtyZXR1cm4gU24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3NoaWZ0KDIsdnIpLFNuLndyaXRlX3NoaWZ0KDIsQW4pLFNuLndyaXRlX3NoaWZ0KDIscnIsImkiKSxTbn1mdW5jdGlvbiBjdChBbix2cixycil7dmFy'@;
put 'IFNuPXByKDEzKTtyZXR1cm4gU24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3NoaWZ0KDIsdnIpLFNuLndyaXRlX3NoaWZ0KDIsQW4pLFNuLndyaXRlX3NoaWZ0KDgscnIsImYiKSxTbn1mdW5jdGlvbiBGdChBbix2cixycil7dmFyIFNuPTMyNzY4JnZyO3JldHVybiB2cj0oU24/QW46'@;
put 'MCkrKCh2ciY9LTMyNzY5KT49ODE5Mj92ci0xNjM4NDp2ciksKFNuPyIiOiIkIikrKHJyP05zKHZyKTpIcyh2cikpfXZhciBUdD17NTE6WyJGQUxTRSIsMF0sNTI6WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0sODA6WyJTVU0iLDY5XSw4MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEiLDY5'@;
put 'XSw4MzpbIk1JTkEiLDY5XSw4NDpbIk1BWEEiLDY5XSwxMTE6WyJUIiwxXX0sWnQ9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIrIiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5j'@;
put 'dGlvbiBLbihBbil7dmFyIHZyPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIHZyWzBdLnI9QW4ucmVhZF9zaGlmdCgyKSx2clszXT1BbltBbi5sKytdLHZyWzBdLmM9QW5bQW4ubCsrXSx2cn1mdW5jdGlvbiBxbihBbix2cixycixTbil7dmFyIG1yPXByKDYrU24ubGVuZ3RoKTtt'@;
put 'ci53cml0ZV9zaGlmdCgyLEFuKSxtci53cml0ZV9zaGlmdCgxLHJyKSxtci53cml0ZV9zaGlmdCgxLHZyKSxtci53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIHdpPTA7d2k8U24ubGVuZ3RoOysrd2kpe3ZhciBVcj1Tbi5jaGFyQ29kZUF0KHdpKTttci53cml0ZV9zaGlmdCgxLFVyPj0xMjg/'@;
put 'OTU6VXIpfXJldHVybiBtci53cml0ZV9zaGlmdCgxLDApLG1yfWZ1bmN0aW9uIGtuKEFuLHZyKXt2YXIgcnI9S24oQW4pLFNuPUFuLnJlYWRfc2hpZnQoNCksbXI9QW4ucmVhZF9zaGlmdCg0KSx3aT1Bbi5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT13aSlyZXR1cm4gMD09PVNuJiYzMjIxMjI1'@;
put 'NDcyPT09bXI/KHJyWzFdLnQ9ImUiLHJyWzFdLnY9MTUpOjA9PT1TbiYmMzQ4OTY2MDkyOD09PW1yPyhyclsxXS50PSJlIixyclsxXS52PTQyKTpyclsxXS52PTAscnI7dmFyIFVyPTMyNzY4JndpO3JldHVybiB3aT0oMzI3Njcmd2kpLTE2NDQ2LHJyWzFdLnY9KDEtMipVcikqKG1yKk1hdGgu'@;
put 'cG93KDIsd2krMzIpK1NuKk1hdGgucG93KDIsd2kpKSxycn1mdW5jdGlvbiBlcihBbix2cixycixTbil7dmFyIG1yPXByKDE0KTtpZihtci53cml0ZV9zaGlmdCgyLEFuKSxtci53cml0ZV9zaGlmdCgxLHJyKSxtci53cml0ZV9zaGlmdCgxLHZyKSwwPT1TbilyZXR1cm4gbXIud3JpdGVfc2hp'@;
put 'ZnQoNCwwKSxtci53cml0ZV9zaGlmdCg0LDApLG1yLndyaXRlX3NoaWZ0KDIsNjU1MzUpLG1yO3ZhciB3aT0wLFVyPTAsX289MDtyZXR1cm4gU248MCYmKHdpPTEsU249LVNuKSxVcj0wfE1hdGgubG9nMihTbiksMjE0NzQ4MzY0OCYoX289KFNuLz1NYXRoLnBvdygyLFVyLTMxKSk+Pj4wKXx8'@;
put 'KCsrVXIsX289KFNuLz0yKT4+PjApLFNuLT1fbyxfb3w9MjE0NzQ4MzY0OCxfbz4+Pj0wLFNuKj1NYXRoLnBvdygyLDMyKSxtci53cml0ZV9zaGlmdCg0LFNuPj4+MCksbXIud3JpdGVfc2hpZnQoNCxfbyksbXIud3JpdGVfc2hpZnQoMixVcis9MTYzODMrKHdpPzMyNzY4OjApKSxtcn1mdW5j'@;
put 'dGlvbiBCcihBbix2cil7dmFyIHJyPUtuKEFuKSxTbj1Bbi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gcnJbMV0udj1Tbixycn1mdW5jdGlvbiBMaShBbix2cil7dmFyIHJyPXByKDUrQW4ubGVuZ3RoKTtyci53cml0ZV9zaGlmdCgyLDE0ZTMpLHJyLndyaXRlX3NoaWZ0KDIsdnIpO2Zvcih2'@;
put 'YXIgU249MDtTbjxBbi5sZW5ndGg7KytTbil7dmFyIG1yPUFuLmNoYXJDb2RlQXQoU24pO3JyW3JyLmwrK109bXI+MTI3Pzk1Om1yfXJldHVybiBycltyci5sKytdPTAscnJ9dmFyIFFyPXswOntuOiJCT0YiLGY6aGx9LDE6e246IkVPRiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09S'@;
put 'REVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gdmUoQW4pe3ZhciB2cj17czp7YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiB2ci5zLmM9QW4ucmVhZF9zaGlmdCgyKSx2ci5zLnI9QW4ucmVhZF9zaGlmdCgyKSx2ci5lLmM9QW4ucmVh'@;
put 'ZF9zaGlmdCgyKSx2ci5lLnI9QW4ucmVhZF9zaGlmdCgyKSw2NTUzNT09dnIucy5jJiYodnIucy5jPXZyLmUuYz12ci5zLnI9dnIuZS5yPTApLHZyfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwxMjp7'@;
put 'bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5jdGlvbiBudChBbix2cixycil7dmFyIFNuPUhlKEFuLDAscnIpO3JldHVybiBTblsxXS52PUFuLnJlYWRfc2hpZnQoMiwiaSIpLFNufX0sMTQ6e246Ik5VTUJFUiIsZjpmdW5jdGlvbiBDdChBbix2cixycil7dmFyIFNuPUhlKEFuLDAs'@;
put 'cnIpO3JldHVybiBTblsxXS52PUFuLnJlYWRfc2hpZnQoOCwiZiIpLFNufX0sMTU6e246IkxBQkVMIixmOkJlfSwxNjp7bjoiRk9STVVMQSIsZjpmdW5jdGlvbiBidChBbix2cixycil7dmFyIFNuPUFuLmwrdnIsbXI9SGUoQW4sMCxycik7aWYobXJbMV0udj1Bbi5yZWFkX3NoaWZ0KDgsImYi'@;
put 'KSxyci5xcHJvKUFuLmw9U247ZWxzZXt2YXIgd2k9QW4ucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gcG4oQW4sdnIpe29sKEFuLDApO2Zvcih2YXIgcnI9W10sU249MCxtcj0iIix3aT0iIjtBbi5sPEFuLmxlbmd0aDspe3ZhciBVcj1BbltBbi5sKytdO3N3aXRjaChVcil7Y2FzZSAwOnJyLnB1'@;
put 'c2goQW4ucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nhc2UgMTp3aT1GdCh2clswXS5jLEFuLnJlYWRfc2hpZnQoMiksITApLG1yPUZ0KHZyWzBdLnIsQW4ucmVhZF9zaGlmdCgyKSwhMSkscnIucHVzaCh3aSttcik7YnJlYWs7Y2FzZSAyOnZhciBqaT1GdCh2clswXS5jLEFuLnJlYWRfc2hp'@;
put 'ZnQoMiksITApLF9vPUZ0KHZyWzBdLnIsQW4ucmVhZF9zaGlmdCgyKSwhMSk7d2k9RnQodnJbMF0uYyxBbi5yZWFkX3NoaWZ0KDIpLCEwKSxtcj1GdCh2clswXS5yLEFuLnJlYWRfc2hpZnQoMiksITEpLHJyLnB1c2goamkrX28rIjoiK3dpK21yKTticmVhaztjYXNlIDM6aWYoQW4ubDxBbi5s'@;
put 'ZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDpyci5wdXNoKCIoIityci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTpyci5wdXNoKEFuLnJlYWRfc2hpZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIFRpPSIi'@;
put 'O1VyPUFuW0FuLmwrK107KVRpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFVyKTtyci5wdXNoKCciJytUaS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6cnIucHVzaCgiLSIrcnIucG9wKCkpO2JyZWFrO2Nhc2UgMjM6cnIucHVzaCgiKyIrcnIucG9wKCkpO2JyZWFrO2Nhc2Ug'@;
put 'MjI6cnIucHVzaCgiTk9UKCIrcnIucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIFlvPXJyLnBvcCgpLGxvPXJyLnBvcCgpO3JyLnB1c2goWyJBTkQiLCJPUiJdW1VyLTIwXSsiKCIrbG8rIiwiK1lvKyIpIik7YnJlYWs7ZGVmYXVsdDppZihVcjwzMiYmWnRbVXJdKVlvPXJy'@;
put 'LnBvcCgpLGxvPXJyLnBvcCgpLHJyLnB1c2gobG8rWnRbVXJdK1lvKTtlbHNle2lmKCFUdFtVcl0pcmV0dXJuIFVyPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK1VyLnRvU3RyaW5nKDE2KSk6VXI8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAi'@;
put 'K1VyLnRvU3RyaW5nKDE2KSk6VXI8PTMwP2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK1VyLnRvU3RyaW5nKDE2KSk6VXI8PTExNT9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrVXIudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVycm9y'@;
put 'KCJXSzEgdW5yZWNvZ25pemVkIG9wY29kZSAiK1VyLnRvU3RyaW5nKDE2KSk7aWYoNjk9PShTbj1UdFtVcl1bMV0pJiYoU249QW5bQW4ubCsrXSksU24+cnIubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSAweCIrVXIudG9TdHJpbmcoMTYp'@;
put 'KyI6fCIrcnIuam9pbigifCIpKyJ8Iik7dmFyIEFvPXJyLnNsaWNlKC1Tbik7cnIubGVuZ3RoLT1Tbixyci5wdXNoKFR0W1VyXVswXSsiKCIrQW8uam9pbigiLCIpKyIpIil9fX0xPT1yci5sZW5ndGg/dnJbMV0uZj0iIityclswXTpjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFy'@;
put 'c2UgfCIrcnIuam9pbigifCIpKyJ8Iil9KShBbi5zbGljZShBbi5sLEFuLmwrd2kpLG1yKSxBbi5sKz13aX1yZXR1cm4gbXJ9fSwyNDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktSQU5H'@;
put 'RTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5HRTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hFRVRK'@;
put 'UyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgifSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOkJlfSw1NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0s'@;
put 'NjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMi'@;
put 'fSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6e246'@;
put 'IiJ9fSx1cj17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9'@;
put 'LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246'@;
put 'IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIHVuKEFuLHZyKXt2YXIgcnI9S24oQW4pO3JldHVybiByclsxXS50PSJzIixyclsxXS52PUFuLnJlYWRf'@;
put 'c2hpZnQodnItNCwiY3N0ciIpLHJyfX0sMjM6e246Ik5VTUJFUjE3IixmOmtufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gem4oQW4sdnIpe3ZhciBycj1LbihBbik7cnJbMV0udj1Bbi5yZWFkX3NoaWZ0KDIpO3ZhciBTbj1yclsxXS52Pj4xO2lmKDEmcnJbMV0udilzd2l0Y2goNyZT'@;
put 'bil7Y2FzZSAwOlNuPTVlMyooU24+PjMpO2JyZWFrO2Nhc2UgMTpTbj01MDAqKFNuPj4zKTticmVhaztjYXNlIDI6U249KFNuPj4zKS8yMDticmVhaztjYXNlIDM6U249KFNuPj4zKS8yMDA7YnJlYWs7Y2FzZSA0OlNuPShTbj4+MykvMmUzO2JyZWFrO2Nhc2UgNTpTbj0oU24+PjMpLzJlNDti'@;
put 'cmVhaztjYXNlIDY6U249KFNuPj4zKS8xNjticmVhaztjYXNlIDc6U249KFNuPj4zKS82NH1yZXR1cm4gcnJbMV0udj1Tbixycn19LDI1OntuOiJGT1JNVUxBMTkiLGY6ZnVuY3Rpb24gdHIoQW4sdnIpe3ZhciBycj1rbihBbik7cmV0dXJuIEFuLmwrPXZyLTE0LHJyfX0sMjY6e246IkZPUk1V'@;
put 'TEExQSJ9LDI3OntuOiJYRk9STUFUIixmOmZ1bmN0aW9uIHhpKEFuLHZyKXtmb3IodmFyIHJyPXt9LFNuPUFuLmwrdnI7QW4ubDxTbjspe3ZhciBtcj1Bbi5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PW1yKXtmb3IocnJbbXJdPVswLCIiXSxyclttcl1bMF09QW4ucmVhZF9zaGlmdCgyKTtBbltB'@;
put 'bi5sXTspcnJbbXJdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEFuW0FuLmxdKSxBbi5sKys7QW4ubCsrfX1yZXR1cm4gcnJ9fSwyODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8i'@;
put 'fSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hFRVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rpb24gWm4oQW4sdnIpe3ZhciBycj1LbihBbiksU249QW4ucmVhZF9zaGlmdCg0KTtyZXR1cm4gcnJbMV0udj1Tbj4+Nixycn19LDM4OntuOiI/PyJ9LDM5Ontu'@;
put 'OiJOVU1CRVIyNyIsZjpCcn0sNDA6e246IkZPUk1VTEEyOCIsZjpmdW5jdGlvbiBzaShBbix2cil7dmFyIHJyPUJyKEFuKTtyZXR1cm4gQW4ubCs9dnItMTAscnJ9fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7'@;
put 'bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwx'@;
put 'ODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoiPz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/'@;
put 'In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0Ontu'@;
put 'OiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0sNTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1'@;
put 'ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246'@;
put 'Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2'@;
put 'NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6ZnVuY3Rpb24gUShBbix2cil7dmFyIHJyPXZyfHx7fTtpZigrcnIuY29kZXBhZ2U+PTAmJmooK3JyLmNvZGVwYWdlKSwic3RyaW5nIj09cnIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3RyaW5n'@;
put 'Iik7dmFyIFNuPXdjKCksbXI9T2koQW5bIiFyZWYiXSksd2k9QXJyYXkuaXNBcnJheShBbiksVXI9W107Q2koU24sMCxmdW5jdGlvbiBnZShBbil7dmFyIHZyPXByKDIpO3JldHVybiB2ci53cml0ZV9zaGlmdCgyLEFuKSx2cn0oMTAzMCkpLENpKFNuLDYsZnVuY3Rpb24gU2UoQW4pe3ZhciB2'@;
put 'cj1wcig4KTtyZXR1cm4gdnIud3JpdGVfc2hpZnQoMixBbi5zLmMpLHZyLndyaXRlX3NoaWZ0KDIsQW4ucy5yKSx2ci53cml0ZV9zaGlmdCgyLEFuLmUuYyksdnIud3JpdGVfc2hpZnQoMixBbi5lLnIpLHZyfShtcikpO2Zvcih2YXIgamk9bXIucy5yO2ppPD1tci5lLnI7KytqaSlmb3IodmFy'@;
put 'IF9vPUhzKGppKSxUaT1tci5zLmM7VGk8PW1yLmUuYzsrK1RpKXtqaT09PW1yLnMuciYmKFVyW1RpXT1OcyhUaSkpO3ZhciBsbz13aT8oQW5bamldfHxbXSlbVGldOkFuW1VyW1RpXStfb107bG8mJiJ6IiE9bG8udCYmKCJuIj09bG8udD8oMHxsby52KT09bG8udiYmbG8udj49LTMyNzY4JiZs'@;
put 'by52PD0zMjc2Nz9DaShTbiwxMyxkdChqaSxUaSxsby52KSk6Q2koU24sMTQsY3QoamksVGksbG8udikpOkNpKFNuLDE1LEdlKGppLFRpLGN1KGxvKS5zbGljZSgwLDIzOSkpKSl9cmV0dXJuIENpKFNuLDEpLFNuLmVuZCgpfSxib29rX3RvX3drMzpmdW5jdGlvbiByZShBbix2cil7dmFyIHJy'@;
put 'PXZyfHx7fTtpZigrcnIuY29kZXBhZ2U+PTAmJmooK3JyLmNvZGVwYWdlKSwic3RyaW5nIj09cnIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzMgdG8gSlMgc3RyaW5nIik7dmFyIFNuPXdjKCk7Q2koU24sMCxmdW5jdGlvbiBfZShBbil7dmFyIHZyPXByKDI2KTt2ci53'@;
put 'cml0ZV9zaGlmdCgyLDQwOTYpLHZyLndyaXRlX3NoaWZ0KDIsNCksdnIud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIHJyPTAsU249MCxtcj0wLHdpPTA7d2k8QW4uU2hlZXROYW1lcy5sZW5ndGg7Kyt3aSl7dmFyIGppPUFuLlNoZWV0c1tBbi5TaGVldE5hbWVzW3dpXV07aWYoamkmJmppWyIh'@;
put 'cmVmIl0peysrbXI7dmFyIF9vPVdzKGppWyIhcmVmIl0pO3JyPF9vLmUuciYmKHJyPV9vLmUuciksU248X28uZS5jJiYoU249X28uZS5jKX19cmV0dXJuIHZyLndyaXRlX3NoaWZ0KDIscnIpLHZyLndyaXRlX3NoaWZ0KDEsbXIpLHZyLndyaXRlX3NoaWZ0KDEsU24pLHZyLndyaXRlX3NoaWZ0'@;
put 'KDIsMCksdnIud3JpdGVfc2hpZnQoMiwwKSx2ci53cml0ZV9zaGlmdCgxLDEpLHZyLndyaXRlX3NoaWZ0KDEsMiksdnIud3JpdGVfc2hpZnQoNCwwKSx2ci53cml0ZV9zaGlmdCg0LDApLHZyfShBbikpO2Zvcih2YXIgbXI9MCx3aT0wO21yPEFuLlNoZWV0TmFtZXMubGVuZ3RoOysrbXIpKEFu'@;
put 'LlNoZWV0c1tBbi5TaGVldE5hbWVzW21yXV18fHt9KVsiIXJlZiJdJiZDaShTbiwyNyxMaShBbi5TaGVldE5hbWVzW21yXSx3aSsrKSk7dmFyIFVyPTA7Zm9yKG1yPTA7bXI8QW4uU2hlZXROYW1lcy5sZW5ndGg7Kyttcil7dmFyIGppPUFuLlNoZWV0c1tBbi5TaGVldE5hbWVzW21yXV07aWYo'@;
put 'amkmJmppWyIhcmVmIl0pe2Zvcih2YXIgX289T2koamlbIiFyZWYiXSksVGk9QXJyYXkuaXNBcnJheShqaSksWW89W10sbG89X28ucy5yO2xvPD1fby5lLnI7Kytsbylmb3IodmFyIEFvPUhzKGxvKSx4bz1fby5zLmM7eG88PV9vLmUuYzsrK3hvKXtsbz09PV9vLnMuciYmKFlvW3hvXT1Ocyh4'@;
put 'bykpO3ZhciB0YT1UaT8oamlbbG9dfHxbXSlbeG9dOmppW1lvW3hvXStBb107dGEmJiJ6IiE9dGEudCYmKCJuIj09dGEudD9DaShTbiwyMyxlcihsbyx4byxVcix0YS52KSk6Q2koU24sMjIscW4obG8seG8sVXIsY3UodGEpLnNsaWNlKDAsMjM5KSkpKX0rK1VyfX1yZXR1cm4gQ2koU24sMSks'@;
put 'U24uZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIFAoQW4sdnIpe3N3aXRjaCh2ci50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIEwoRChzZS5kZWNvZGUoQW4pKSx2cik7Y2FzZSJiaW5hcnkiOnJldHVybiBMKEQoQW4pLHZyKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIEwo'@;
put 'QW4sdnIpfXRocm93IlVuc3VwcG9ydGVkIHR5cGUgIit2ci50eXBlfX19KCksRG09ZnVuY3Rpb24oKXt2YXIgeT11bCgidCIpLFA9dWwoInJQciIpO2Z1bmN0aW9uIEwoZ2Upe3ZhciBfZT1nZS5tYXRjaCh5KTtpZighX2UpcmV0dXJue3Q6InMiLHY6IiJ9O3ZhciB2ZT17dDoicyIsdjp4cihf'@;
put 'ZVsxXSl9LFNlPWdlLm1hdGNoKFApO3JldHVybiBTZSYmKHZlLnM9ZnVuY3Rpb24gSncoeSl7dmFyIFA9e30sTD15Lm1hdGNoKCR0KSxRPTAscmU9ITE7aWYoTClmb3IoO1EhPUwubGVuZ3RoOysrUSl7dmFyIGdlPWxuKExbUV0pO3N3aXRjaChnZVswXS5yZXBsYWNlKC9cdyo6L2csIiIpKXtj'@;
put 'YXNlIjxjb25kZW5zZSI6Y2FzZSI8ZXh0ZW5kIjpicmVhaztjYXNlIjxzaGFkb3ciOmlmKCFnZS52YWwpYnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93Lz4iOlAuc2hhZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09Z2UudmFs'@;
put 'KWJyZWFrO1AuY3A9SVtwYXJzZUludChnZS52YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighZ2UudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+IjpjYXNlIjxvdXRsaW5lLz4iOlAub3V0bGluZT0xO2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOlAubmFt'@;
put 'ZT1nZS52YWw7YnJlYWs7Y2FzZSI8c3oiOlAuc3o9Z2UudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIWdlLnZhbClicmVhaztjYXNlIjxzdHJpa2U+IjpjYXNlIjxzdHJpa2UvPiI6UC5zdHJpa2U9MTticmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIWdlLnZhbCli'@;
put 'cmVhaztzd2l0Y2goZ2UudmFsKXtjYXNlImRvdWJsZSI6UC51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlAudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6UC51bmRlcmxpbmU9MzR9Y2FzZSI8dT4iOmNhc2UiPHUvPiI6UC51bmRlcmxp'@;
put 'bmV8fChQLnVuZGVybGluZT0xKTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09Z2UudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxiLz4iOlAuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1nZS52YWwpYnJlYWs7Y2FzZSI8aT4i'@;
put 'OmNhc2UiPGkvPiI6UC5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpnZS5yZ2ImJihQLmNvbG9yPXtyZ2I6OD09Z2UucmdiLmxlbmd0aD9nZS5yZ2Iuc2xpY2UoMiw4KTooIjAwMDAwMCIrZ2UucmdiKS5zbGljZSgtNil9KTticmVhaztjYXNlIjxmYW1pbHki'@;
put 'OlAuZmFtaWx5PWdlLnZhbDticmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KGdlLnZhbHx8Im5vbmUiKSYmKFAudmFsaWduPWdlLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8c2NoZW1lIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRM'@;
put 'c3Q+IjpicmVhaztjYXNlIjxleHQiOnJlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpyZT0hMTticmVhaztkZWZhdWx0OmlmKDQ3IT09Z2VbMF0uY2hhckNvZGVBdCgxKSYmIXJlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrZ2VbMF0pfX1yZXR1cm4gUH0oU2Vb'@;
put 'MV0pKSx2ZX12YXIgUT0vPCg/Olx3KzopP3I+L2cscmU9LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24oX2Upe3JldHVybiBfZS5yZXBsYWNlKFEsIiIpLnNwbGl0KHJlKS5tYXAoTCkuZmlsdGVyKGZ1bmN0aW9uKHZlKXtyZXR1cm4gdmUudn0pfX0oKSxqMT17MToic2luZ2xlIiwy'@;
put 'OiJkb3VibGUiLDMzOiJzaW5nbGUtYWNjb3VudGluZyIsMzQ6ImRvdWJsZS1hY2NvdW50aW5nIn0sazk9ZnVuY3Rpb24oKXt2YXIgUD0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gUShyZSl7dmFyIGdlPVtbXSxyZS52LFtdXTtyZXR1cm4gcmUudj8ocmUucyYmZnVuY3Rpb24gTChyZSxnZSxfZSl7'@;
put 'dmFyIHZlPVtdO3JlLnVuZGVybGluZSYmdmUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IikscmUudW5kZXJsaW5lPjEmJnZlLnB1c2goInRleHQtdW5kZXJsaW5lLXN0eWxlOiIrajFbcmUudW5kZXJsaW5lXSsiOyIpLHJlLnN6JiZ2ZS5wdXNoKCJmb250LXNpemU6IityZS5z'@;
put 'eisicHQ7IikscmUub3V0bGluZSYmdmUucHVzaCgidGV4dC1lZmZlY3Q6IG91dGxpbmU7IikscmUuc2hhZG93JiZ2ZS5wdXNoKCJ0ZXh0LXNoYWRvdzogYXV0bzsiKSxyZS5jb2xvciYmcmUuY29sb3IucmdiJiZ2ZS5wdXNoKCJjb2xvcjogIyIrT3UocmUuY29sb3IucmdiKSsiOyIpLGdlLnB1'@;
put 'c2goJzxzcGFuIHN0eWxlPSInK3ZlLmpvaW4oIiIpKyciPicpLHJlLmJvbGQmJihnZS5wdXNoKCI8Yj4iKSxfZS5wdXNoKCI8L2I+IikpLHJlLml0YWxpYyYmKGdlLnB1c2goIjxpPiIpLF9lLnB1c2goIjwvaT4iKSkscmUuc3RyaWtlJiYoZ2UucHVzaCgiPHM+IiksX2UucHVzaCgiPC9zPiIp'@;
put 'KTt2YXIgU2U9cmUudmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT1TZXx8InN1cGVyIj09U2U/U2U9InN1cCI6InN1YnNjcmlwdCI9PVNlJiYoU2U9InN1YiIpLCIiIT1TZSYmKGdlLnB1c2goIjwiK1NlKyI+IiksX2UucHVzaCgiPC8iK1NlKyI+IikpLF9lLnB1c2goIjwvc3Bhbj4iKX0ocmUu'@;
put 'cyxnZVswXSxnZVsyXSksZ2VbMF0uam9pbigiIikrZ2VbMV0ucmVwbGFjZShQLCI8YnIvPiIpK2dlWzJdLmpvaW4oIiIpKToiIn1yZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBnZS5tYXAoUSkuam9pbigiIil9fSgpO2Z1bmN0aW9uIEpoKHkpe3JldHVybiB5Lm1hcChmdW5jdGlvbihMKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24gSW0oeSl7dmFyIFA9IiIsTD1bXTtyZXR1cm4geS5zJiYoeS5zLmJvbGQmJkwucHVzaCgiPGIvPiIpLHkucy5pdGFsaWMmJkwucHVzaCgiPGkvPiIpLHkucy5zdHJpa2UmJkwucHVzaCgiPHN0cmlrZS8+IikseS5zLnVuZGVybGluZSYmTC5wdXNoKCc8dSB2YWw9Iicr'@;
put 'KGptW3kucy51bmRlcmxpbmVdfHwic2luZ2xlIikrJyIvPicpLHkucy5jb2xvciYmTC5wdXNoKFVkKHkucy5jb2xvcikpLHkucy5zeiYmTC5wdXNoKCc8c3ogdmFsPSInK3kucy5zeisnIi8+JykseS5zLm5hbWUmJkwucHVzaCgnPHJGb250IHZhbD0iJyt5LnMubmFtZSsnIi8+JyksKCJzdXBl'@;
put 'ciI9PXkucy52YWxpZ258fCJzdWIiPT15LnMudmFsaWduKSYmTC5wdXNoKCc8dmVydEFsaWduIHZhbD0iJyt5LnMudmFsaWduKydzY3JpcHQiLz4nKSksTC5sZW5ndGgmJihQKz0iPHJQcj4iK0wuam9pbigiIikrIjwvclByPiIpLCI8cj4iKyhQKz1TcigidCIsSHIoeS52KSxudWxsKSkrIjwv'@;
put 'cj4ifShMKX0pLmpvaW4oIiIpfXZhciBRdz0vPCg/Olx3KzopP3RbXj5dKj4oW148XSopPFwvKD86XHcrOik/dD4vZyxBOT0vPCg/Olx3KzopP3JcYltePl0qPi8sVDk9LzwoPzpcdys6KT9yUGguKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiBEOSh5LFApe3ZhciBM'@;
put 'PSFQfHxQLmNlbGxIVE1MLFE9e307cmV0dXJuIHk/KHkubWF0Y2goL15ccyo8KD86XHcrOik/dFtePl0qPi8pPyhRLnQ9eHIoUGkoeS5zbGljZSh5LmluZGV4T2YoIj4iKSsxKS5zcGxpdCgvPFwvKD86XHcrOik/dD4vKVswXXx8IiIpKSxRLnI9UGkoeSksTCYmKFEuaD1ybyhRLnQpKSk6eS5t'@;
put 'YXRjaChBOSkmJihRLnI9UGkoeSksUS50PXhyKFBpKCh5LnJlcGxhY2UoVDksIiIpLm1hdGNoKFF3KXx8W10pLmpvaW4oIiIpLnJlcGxhY2UoJHQsIiIpKSksUS5SPURtKFEuciksTCYmKFEuaD1rOShRLlIpKSksUSk6e3Q6IiJ9fXZhciBlQz0vPCg/Olx3KzopP3NzdChbXj5dKik+KFtcc1xT'@;
put 'XSopPFwvKD86XHcrOik/c3N0Pi8sdEM9LzwoPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vZyxuQz0vPFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+LztIaS5TU1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hh'@;
put 'cmVkU3RyaW5ncyI7dmFyIGxEPS9eXHN8XHMkfFtcdFxuXHJdLztmdW5jdGlvbiBMbSh5LFApe2lmKCFQLmJvb2tTU1QpcmV0dXJuIiI7dmFyIEw9W0JuXTtMW0wubGVuZ3RoXT1Tcigic3N0IixudWxsLHt4bWxuczppcy5tYWluWzBdLGNvdW50OnkuQ291bnQsdW5pcXVlQ291bnQ6eS5Vbmlx'@;
put 'dWV9KTtmb3IodmFyIFE9MDtRIT15Lmxlbmd0aDsrK1EpaWYobnVsbCE9eVtRXSl7dmFyIHJlPXlbUV0sZ2U9IjxzaT4iO3JlLnI/Z2UrPXJlLnI6KGdlKz0iPHQiLHJlLnR8fChyZS50PSIiKSxyZS50Lm1hdGNoKGxEKSYmKGdlKz0nIHhtbDpzcGFjZT0icHJlc2VydmUiJyksZ2UrPSI+IitI'@;
put 'cihyZS50KSsiPC90PiIpLExbTC5sZW5ndGhdPWdlKz0iPC9zaT4ifXJldHVybiBMLmxlbmd0aD4yJiYoTFtMLmxlbmd0aF09Ijwvc3N0PiIsTFsxXT1MWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxMLmpvaW4oIiIpfXZhciBvQz1mdW5jdGlvbiBBMSh5LFAsTCl7dmFyIFE9MTMrNCp5LnQubGVu'@;
put 'Z3RoLHJlPXkuUiYmeS5SLmxlbmd0aHx8eS5yO3kuciYmKHkuUj1EbSh5LnIpKSxyZSYmKFErPTQrNCp5LlIubGVuZ3RoKTt2YXIgZ2U9ITE7aWYobnVsbD09TCYmKGdlPSEwLEw9cHIoUSkpLEwud3JpdGVfc2hpZnQoMSxyZT8xOjApLHJjKHkudCxMKSxyZSl7TC53cml0ZV9zaGlmdCg0LHku'@;
put 'Ui5sZW5ndGgpO2Zvcih2YXIgX2U9MCx2ZT0wO3ZlPHkuUi5sZW5ndGg7Kyt2ZSl7dmFyIFNlPXkuUlt2ZV07TC53cml0ZV9zaGlmdCgyLF9lKSxfZSs9KFNlLnZ8fCIiKS5sZW5ndGg7dmFyIEhlPVNlLnM/Z3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpTZS5zfSxQ'@;
put 'KTowO0wud3JpdGVfc2hpZnQoMixQLmNlbGxYZnNbSGVdLmZvbnRJZCl9fXJldHVybiBnZT9MLnNsaWNlKDAsTC5sKTpMfTtmdW5jdGlvbiB4Myh5LFApe3ZhciBMPXdjKCk7dWkoTCwiQnJ0QmVnaW5Tc3QiLGZ1bmN0aW9uIGlDKHksUCl7cmV0dXJuIFB8fChQPXByKDgpKSxQLndyaXRlX3No'@;
put 'aWZ0KDQseS5Db3VudCksUC53cml0ZV9zaGlmdCg0LHkuVW5pcXVlKSxQfSh5KSk7Zm9yKHZhciBRPTA7UTx5Lmxlbmd0aDsrK1EpdWkoTCwiQnJ0U1NUSXRlbSIsb0MoeVtRXSxQKSk7cmV0dXJuIHVpKEwsIkJydEVuZFNzdCIpLEwuZW5kKCl9ZnVuY3Rpb24geGEoeSl7aWYodHlwZW9mIGNw'@;
put 'dGFibGU8InUiKXJldHVybiBjcHRhYmxlLnV0aWxzLmVuY29kZShSLHkpO2Zvcih2YXIgUD1bXSxMPXkuc3BsaXQoIiIpLFE9MDtRPEwubGVuZ3RoOysrUSlQW1FdPUxbUV0uY2hhckNvZGVBdCgwKTtyZXR1cm4gUH1mdW5jdGlvbiBHMCh5LFApe3ZhciBMPXt9O3JldHVybiBMLk1ham9yPXku'@;
put 'cmVhZF9zaGlmdCgyKSxMLk1pbm9yPXkucmVhZF9zaGlmdCgyKSxQPj00JiYoeS5sKz1QLTQpLEx9ZnVuY3Rpb24gc0MoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPXkubCtQLTQsUT17fSxyZT15LnJlYWRfc2hpZnQoNCksZ2U9W107cmUtLSA+MDspZ2UucHVzaCh7dDp5LnJlYWRf'@;
put 'c2hpZnQoNCksdjp5LnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoUS5uYW1lPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUS5jb21wcz1nZSx5LmwhPUwpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YVNwYWNlTWFwRW50cnk6ICIreS5sKyIgIT0gIitMKTtyZXR1cm4gUX1mdW5jdGlvbiBJOSh5'@;
put 'LFApe3ZhciBMPXkubCtQLFE9e307US5GbGFncz02MyZ5LnJlYWRfc2hpZnQoNCkseS5sKz00LFEuQWxnSUQ9eS5yZWFkX3NoaWZ0KDQpO3ZhciByZT0hMTtzd2l0Y2goUS5BbGdJRCl7Y2FzZSAyNjEyNjpjYXNlIDI2MTI3OmNhc2UgMjYxMjg6cmU9MzY9PVEuRmxhZ3M7YnJlYWs7Y2FzZSAy'@;
put 'NjYyNTpyZT00PT0oNTImUS5GbGFncyk7YnJlYWs7Y2FzZSAwOnJlPTE2PT1RLkZsYWdzfHw0PT1RLkZsYWdzfHwzNj09US5GbGFnczticmVhaztkZWZhdWx0OnRocm93IlVucmVjb2duaXplZCBlbmNyeXB0aW9uIGFsZ29yaXRobTogIitRLkFsZ0lEfWlmKCFyZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkVuY3J5cHRpb24gRmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4gUS5BbGdJREhhc2g9eS5yZWFkX3NoaWZ0KDQpLFEuS2V5U2l6ZT15LnJlYWRfc2hpZnQoNCksUS5Qcm92aWRlclR5cGU9eS5yZWFkX3NoaWZ0KDQpLHkubCs9OCxRLkNTUE5hbWU9eS5yZWFkX3NoaWZ0KEwteS5sPj4x'@;
put 'LCJ1dGYxNmxlIikseS5sPUwsUX1mdW5jdGlvbiBSbSh5LFApe3ZhciBMPXt9LFE9eS5sK1A7cmV0dXJuIHkubCs9NCxMLlNhbHQ9eS5zbGljZSh5LmwseS5sKzE2KSx5LmwrPTE2LEwuVmVyaWZpZXI9eS5zbGljZSh5LmwseS5sKzE2KSx5LmwrPTE2LHkucmVhZF9zaGlmdCg0KSxMLlZlcmlm'@;
put 'aWVySGFzaD15LnNsaWNlKHkubCxRKSx5Lmw9USxMfWZ1bmN0aW9uIGdaKHkpe2lmKDM2IT0oNjMmeS5yZWFkX3NoaWZ0KDQpKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoIik7dmFyIEw9eS5yZWFkX3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6STkoeSxMKSx2'@;
put 'OlJtKHkseS5sZW5ndGgteS5sKX19ZnVuY3Rpb24gaEQoKXt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkOiBFQ01BLTM3NiBFeHRlbnNpYmxlIil9ZnVuY3Rpb24gbVooeSl7dmFyIFA9WyJzYWx0U2l6ZSIsImJsb2NrU2l6ZSIsImtleUJpdHMiLCJoYXNoU2l6'@;
put 'ZSIsImNpcGhlckFsZ29yaXRobSIsImNpcGhlckNoYWluaW5nIiwiaGFzaEFsZ29yaXRobSIsInNhbHRWYWx1ZSJdO3kubCs9NDt2YXIgTD15LnJlYWRfc2hpZnQoeS5sZW5ndGgteS5sLCJ1dGY4IiksUT17fTtyZXR1cm4gTC5yZXBsYWNlKCR0LGZ1bmN0aW9uKGdlKXt2YXIgX2U9bG4oZ2Up'@;
put 'O3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6UC5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtRW3ZlXT1f'@;
put 'ZVt2ZV19KTticmVhaztjYXNlIjxkYXRhSW50ZWdyaXR5IjpRLmVuY3J5cHRlZEhtYWNLZXk9X2UuZW5jcnlwdGVkSG1hY0tleSxRLmVuY3J5cHRlZEhtYWNWYWx1ZT1fZS5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMi'@;
put 'OlEuZW5jcz1bXTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOlEudXJpPV9lLnVyaTticmVhaztjYXNlIjxlbmNyeXB0ZWRLZXkiOlEuZW5jcy5wdXNoKF9lKTticmVhaztkZWZhdWx0OnRocm93IF9lWzBdfX0pLFF9ZnVuY3Rpb24gYUMoeSl7dmFyIEwsZ2UsUD0wLFE9eGEoeSkscmU9US5s'@;
put 'ZW5ndGgrMTtmb3IoKEw9RyhyZSkpWzBdPVEubGVuZ3RoLGdlPTE7Z2UhPXJlOysrZ2UpTFtnZV09UVtnZS0xXTtmb3IoZ2U9cmUtMTtnZT49MDstLWdlKVA9KCgxNjM4NCZQPzE6MCl8UDw8MSYzMjc2NyleTFtnZV07cmV0dXJuIDUyODExXlB9dmFyIGZEPWZ1bmN0aW9uKCl7dmFyIHk9WzE4'@;
put 'NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwxMjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sUD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10sTD1bNDQ3OTYsMTk5MjksMzk4NTgsMTAw'@;
put 'NTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUsNjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIx'@;
put 'ODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcwLDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwx'@;
put 'NDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwz'@;
put 'NDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIwLDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0scmU9ZnVuY3Rpb24oX2UsdmUpe3JldHVybiBmdW5jdGlvbihfZSl7cmV0dXJuIDI1NSYoX2U+PjF8X2U8PDcpfShfZV52ZSl9O3JldHVy'@;
put 'biBmdW5jdGlvbih2ZSl7Zm9yKHZhciBTZT14YSh2ZSksSGU9ZnVuY3Rpb24oX2Upe2Zvcih2YXIgdmU9UFtfZS5sZW5ndGgtMV0sU2U9MTA0LEhlPV9lLmxlbmd0aC0xO0hlPj0wOy0tSGUpZm9yKHZhciBCZT1fZVtIZV0sR2U9MDs3IT1HZTsrK0dlKTY0JkJlJiYodmVePUxbU2VdKSxCZSo9'@;
put 'MiwtLVNlO3JldHVybiB2ZX0oU2UpLEJlPVNlLmxlbmd0aCxHZT1HKDE2KSxudD0wOzE2IT1udDsrK250KUdlW250XT0wO3ZhciBjdDtmb3IoMT09KDEmQmUpJiYoR2VbQmVdPXJlKHlbMF0sSGU+PjgpLEdlWy0tQmVdPXJlKFNlW1NlLmxlbmd0aC0xXSwyNTUmSGUpKTtCZT4wOylHZVstLUJl'@;
put 'XT1yZShTZVtCZV0sSGU+PjgpLEdlWy0tQmVdPXJlKFNlW0JlXSwyNTUmSGUpO2ZvcihCZT0xNSxjdD0xNS1TZS5sZW5ndGg7Y3Q+MDspR2VbQmVdPXJlKHlbY3RdLEhlPj44KSwtLWN0LEdlWy0tQmVdPXJlKFNlW0JlXSwyNTUmSGUpLC0tQmUsLS1jdDtyZXR1cm4gR2V9fSgpO3ZhciBPbT1m'@;
put 'dW5jdGlvbigpe2Z1bmN0aW9uIHkocmUsZ2Upe3N3aXRjaChnZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFAoc2UuZGVjb2RlKHJlKSxnZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBQKHJlLGdlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFAocmUudG9TdHJpbmcoImJpbmFyeSIpLGdlKTtjYXNl'@;
put 'ImFycmF5IjpyZXR1cm4gUChQdChyZSksZ2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitnZS50eXBlKX1mdW5jdGlvbiBQKHJlLGdlKXt2YXIgdmU9KGdlfHx7fSkuZGVuc2U/W106e307aWYoIXJlLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYg'@;
put 'bWlzc2luZyB0YWJsZSIpO3JldHVybiB2ZVsiIXJlZiJdPU9vKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLHZlfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBMKHJlLGdlKXtyZXR1cm4gRWQoeShyZSxnZSksZ2UpfSx0b19zaGVldDp5LGZyb21fc2hlZXQ6ZnVuY3Rpb24gUShyZSl7'@;
put 'Zm9yKHZhciB2ZSxnZT1bIntcXHJ0ZjFcXGFuc2kiXSxfZT1PaShyZVsiIXJlZiJdKSxTZT1BcnJheS5pc0FycmF5KHJlKSxIZT1fZS5zLnI7SGU8PV9lLmUucjsrK0hlKXtnZS5wdXNoKCJcXHRyb3dkXFx0cmF1dG9maXQxIik7Zm9yKHZhciBCZT1fZS5zLmM7QmU8PV9lLmUuYzsrK0JlKWdl'@;
put 'LnB1c2goIlxcY2VsbHgiKyhCZSsxKSk7Zm9yKGdlLnB1c2goIlxccGFyZFxcaW50YmwiKSxCZT1fZS5zLmM7QmU8PV9lLmUuYzsrK0JlKXt2YXIgR2U9ZGkoe3I6SGUsYzpCZX0pOyh2ZT1TZT8ocmVbSGVdfHxbXSlbQmVdOnJlW0dlXSkmJihudWxsIT12ZS52fHx2ZS5mJiYhdmUuRikmJihn'@;
put 'ZS5wdXNoKCIgIisodmUud3x8KGN1KHZlKSx2ZS53KSkpLGdlLnB1c2goIlxcY2VsbCIpKX1nZS5wdXNoKCJcXHBhcmRcXGludGJsXFxyb3ciKX1yZXR1cm4gZ2Uuam9pbigiIikrIn0ifX19KCk7ZnVuY3Rpb24gZWYoeSl7dmFyIFA9eS5zbGljZSgiIyI9PT15WzBdPzE6MCkuc2xpY2UoMCw2'@;
put 'KTtyZXR1cm5bcGFyc2VJbnQoUC5zbGljZSgwLDIpLDE2KSxwYXJzZUludChQLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50KFAuc2xpY2UoNCw2KSwxNildfWZ1bmN0aW9uIHoxKHkpe2Zvcih2YXIgUD0wLEw9MTszIT1QOysrUClMPTI1NipMKyh5W1BdPjI1NT8yNTU6eVtQXTwwPzA6eVtQXSk7'@;
put 'cmV0dXJuIEwudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gJDAoeSxQKXtpZihudWxsPT15KXJldHVybiBudWxsIT1QO2lmKG51bGw9PVApcmV0dXJuITA7aWYoMT09eS5hdXRvJiYxPT1QLmF1dG8pcmV0dXJuITE7aWYoISF5LmF1dG8hPSEhUC5hdXRvfHxu'@;
put 'dWxsPT15LnRoZW1lIT0obnVsbD09UC50aGVtZSkpcmV0dXJuITA7aWYobnVsbCE9eS50aGVtZSlyZXR1cm4geS50aGVtZSE9UC50aGVtZXx8eS50aW50IT1QLnRpbnQ7aWYobnVsbD09eS5yZ2ImJm51bGw9PVAucmdiKXJldHVybiExO3ZhciBMPXkucmdiOyJudW1iZXIiPT10eXBlb2YgTCYm'@;
put 'KEw9TC50b1N0cmluZygxNikpLEw9TC5zbGljZSgtNik7dmFyIFE9UC5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBRJiYoUT1RLnRvU3RyaW5nKDE2KSksUT1RLnNsaWNlKC02KSxMLnRvTG93ZXJDYXNlKCkhPVEudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBQbSh5LFApe3JldHVybiBudWxs'@;
put 'PT15P251bGwhPVA6bnVsbD09UD9udWxsIT15Onkuc3R5bGUhPVAuc3R5bGV8fCQwKHkuY29sb3IsUC5jb2xvcil9ZnVuY3Rpb24gQmQoeSxQKXtpZigwPT09UClyZXR1cm4geTt2YXIgTD1mdW5jdGlvbiBwMCh5KXt2YXIgUD15WzBdLzI1NSxMPXlbMV0vMjU1LFE9eVsyXS8yNTUscmU9TWF0'@;
put 'aC5tYXgoUCxMLFEpLGdlPU1hdGgubWluKFAsTCxRKSxfZT1yZS1nZTtpZigwPT09X2UpcmV0dXJuWzAsMCxQXTt2YXIgU2UsdmU9MCxIZT1yZStnZTtzd2l0Y2goU2U9X2UvKEhlPjE/Mi1IZTpIZSkscmUpe2Nhc2UgUDp2ZT0oKEwtUSkvX2UrNiklNjticmVhaztjYXNlIEw6dmU9KFEtUCkv'@;
put 'X2UrMjticmVhaztjYXNlIFE6dmU9KFAtTCkvX2UrNH1yZXR1cm5bdmUvNixTZSxIZS8yXX0oZWYoeSkpO3JldHVybiBMWzJdPVA8MD9MWzJdKigxK1ApOjEtKDEtTFsyXSkqKDEtUCksejEoZnVuY3Rpb24gRjQoeSl7dmFyIFNlLEw9eVsxXSxRPXlbMl0scmU9MipMKihRPC41P1E6MS1RKSxn'@;
put 'ZT1RLXJlLzIsX2U9W2dlLGdlLGdlXSx2ZT02KnlbMF07aWYoMCE9PUwpc3dpdGNoKDB8dmUpe2Nhc2UgMDpjYXNlIDY6U2U9cmUqdmUsX2VbMF0rPXJlLF9lWzFdKz1TZTticmVhaztjYXNlIDE6X2VbMF0rPVNlPXJlKigyLXZlKSxfZVsxXSs9cmU7YnJlYWs7Y2FzZSAyOlNlPXJlKih2ZS0y'@;
put 'KSxfZVsxXSs9cmUsX2VbMl0rPVNlO2JyZWFrO2Nhc2UgMzpfZVsxXSs9U2U9cmUqKDQtdmUpLF9lWzJdKz1yZTticmVhaztjYXNlIDQ6U2U9cmUqKHZlLTQpLF9lWzJdKz1yZSxfZVswXSs9U2U7YnJlYWs7Y2FzZSA1Ol9lWzJdKz1TZT1yZSooNi12ZSksX2VbMF0rPXJlfWZvcih2YXIgSGU9'@;
put 'MDszIT1IZTsrK0hlKV9lW0hlXT1NYXRoLnJvdW5kKDI1NSpfZVtIZV0pO3JldHVybiBfZX0oTCkpfXZhciBsQz02LHBsPWxDO2Z1bmN0aW9uIHhjKHkpe3JldHVybiBNYXRoLmZsb29yKCh5K01hdGgucm91bmQoMTI4L3BsKS8yNTYpKnBsKX1mdW5jdGlvbiB0Zih5KXtyZXR1cm4gTWF0aC5m'@;
put 'bG9vcigoeS01KS9wbCoxMDArLjUpLzEwMH1mdW5jdGlvbiBqZCh5KXtyZXR1cm4gTWF0aC5yb3VuZCgoeSpwbCs1KS9wbCoyNTYpLzI1Nn1mdW5jdGlvbiBwdSh5KXt5LmJlc3RGaXQmJmRlbGV0ZSB5LmJlc3RGaXQseS53aWR0aD8oeS53cHg9eGMoeS53aWR0aCkseS53Y2g9dGYoeS53cHgp'@;
put 'LHkuTURXPXBsKTp5LndweD8oeS53Y2g9dGYoeS53cHgpLHkud2lkdGg9amQoeS53Y2gpLHkuTURXPXBsKToibnVtYmVyIj09dHlwZW9mIHkud2NoJiYoeS53aWR0aD1qZCh5LndjaCkseS53cHg9eGMoeS53aWR0aCkseS5NRFc9cGwpLHkuY3VzdG9tV2lkdGgmJmRlbGV0ZSB5LmN1c3RvbVdp'@;
put 'ZHRofXZhciBMOT05NixuZj1MOTtmdW5jdGlvbiBqMih5KXtyZXR1cm4gNzIqeS9uZn1mdW5jdGlvbiBVMSh5KXtyZXR1cm4geSpuZi83Mn1mdW5jdGlvbiBGbSh5KXtuZj15PXtvc3g6NzIsd2luOjk2LHdpbjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9W3ldfHx5fHxMOSxObT1nMFt5'@;
put 'XX1mdW5jdGlvbiBJMyh5KXt5LmhweD95LmhwdD1qMih5LmhweCk6eS5ocHQmJih5LmhweD1VMSh5LmhwdCkpfXZhciBIND17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGlnaHRHcmF5IixIb3J6U3RyaXBl'@;
put 'OiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGluSG9yelN0cmlwZToibGlnaHRI'@;
put 'b3Jpem9udGFsIixUaGluVmVydFN0cmlwZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LF9EPWJlKEg0KSx6Mj17b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eToxMjgsYmx1ZToyNTUsZ3JlZW46'@;
put 'MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1MjgwLGFxdWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1hcm9vbjo4Mzg4NjA4LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDoxNjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxvdzoxNjc3Njk2MCx3aGl0ZTox'@;
put 'Njc3NzIxNX07ZnVuY3Rpb24gTjQoeSxQKXtpZih5LnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlswLTlhLWZBLUZdezZ9JC8pKXJldHVybiBwYXJzZUludCh5LnJlcGxhY2UoIiMiLCIiKSwxNik7aWYoejJbeV0pcmV0dXJuIHoyW3ldO3ZhciBMPXkubWF0Y2goL3JnYlwoXHMqKFxkKilccyos'@;
put 'XHMqKFxkKilccyosXHMqKFxkKilccypcKS8pO2lmKEwpcmV0dXJuKCtMWzFdPDwxNikrKCtMWzJdPDw4KSsgK0xbM107aWYoTD15Lm1hdGNoKC9yZ2JhXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShMWzRdJiZMWzRdLmxlbmd0aD4wJiYr'@;
put 'TFs0XXx8MCl8fCtMWzFdPjB8fCtMWzJdPjB8fCtMWzNdPjA/KCtMWzFdPDwxNikrKCtMWzJdPDw4KSsgK0xbM106UD8tMToxNjc3NzIxNTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSFRNTCBjb2xvciAiK3kpfXZhciBnMD17fTtmdW5jdGlvbiBIbSh5KXt5PXl8fDk2O3ZhciBQPXtDYWxp'@;
put 'YnJpOltdLEFyaWFsOltdLCJTcGFya2Fzc2UgUmciOltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWY6W10sIkNlbnR1cnkgR290aGljIjpbXX07cmV0dXJuIFAuQ2FsaWJyaVsxMV09NyxQLkNhbGlicmlbMTJdPXs3Mjo2LDk2OjgsMTIwOjEwLDE0NDox'@;
put 'Mn1beV18fDgsUC5DYWxpYnJpWzEzXT0xMCxQLkNhbGlicmlbMTRdPTExLFAuQ2FsaWJyaVsxNl09MTIsUC5DYWxpYnJpWzE4XT0xNCxQLkNhbGlicmlbMjBdPTE2LFAuXHU1YjhiXHU0ZjUzWzExXT04LFAuXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmWzExXT04LFBbIlNwYXJrYXNz'@;
put 'ZSBSZyJdWzExXT03LFAuQXJpYWxbMTBdPTcsUFsiQ2VudHVyeSBHb3RoaWMiXVsxMl09OSxQfWcwWzcyXT1IbSg3MiksZzBbOTZdPUhtKDk2KSxnMFsxMjBdPUhtKDEyMCksZzBbMTQ0XT1IbSgxNDQpO3ZhciBObT1nMFs5Nl07ZnVuY3Rpb24gVm0oeSl7cmV0dXJuKE5tW3kubmFtZXx8eS5G'@;
put 'b250TmFtZV18fFtdKVt5LnN6fHx5LlNpemVdfWZ1bmN0aW9uIFoxKHkpe2lmKHkpe3ZhciBQPVZtKHkpO2lmKFApcmV0dXJuIHBsPVB9cmV0dXJuIHBsPTZ9ZnVuY3Rpb24gUjkoeSxQLEwpe3JldHVybiB6MShmdW5jdGlvbiB1Qyh5LFAsTCl7cmV0dXJuW01hdGgucm91bmQoUFswXSpMK3lb'@;
put 'MF0qKDEtTCkpLE1hdGgucm91bmQoUFsxXSpMK3lbMV0qKDEtTCkpLE1hdGgucm91bmQoUFsyXSpMK3lbMl0qKDEtTCkpXX0oZWYoIm51bWJlciI9PXR5cGVvZiB5LnJnYj8oIjAwMDAwIit5LnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOnkucmdiKSxlZigibnVtYmVyIj09dHlwZW9mIFAucmdi'@;
put 'PygiMDAwMDAiK1AudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6UC5yZ2IpLEwpKX1mdW5jdGlvbiBCbSh5LFAsTCl7aWYoTClzd2l0Y2goK3kpe2Nhc2UgNjQ6eT02NTticmVhaztjYXNlIDY1Onk9NjR9dmFyIFE9UCYmUFsreV18fENyWyt5XXx8TmFbK3ktMjAwXTtpZig4MT09K3kmJihRPUNy'@;
put 'WzFdKSxRfHwoUT1DclsxXSksIVEpdGhyb3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIreSk7cmV0dXJuIHoxKFEpfWZ1bmN0aW9uIFUyKHksUCxMKXt2YXIgUT17fTtyZXR1cm4gbnVsbCE9eS5pbmRleGVkJiYoUS5pbmRleD1wYXJzZUludCh5LmluZGV4ZWQsMTApLFEucmdiPUJtKFEu'@;
put 'aW5kZXgsUC5JbmRleGVkKSksbnVsbCE9eS50aGVtZSYmKFEudGhlbWU9cGFyc2VJbnQoeS50aGVtZSwxMCkpLG51bGwhPXkudGludCYmKFEudGludD1wYXJzZUZsb2F0KHkudGludCkpLG51bGwhPXkucmdiJiYoUS5yZ2I9eS5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1RLnRoZW1lJiYhUS5yZ2Im'@;
put 'JkwudGhlbWVFbGVtZW50cyYmKFEucmdiPUJkKEwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUS50aGVtZV0ucmdiLFEudGludHx8MCksUS5yYXdfcmdiPUwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUS50aGVtZV0ucmdiKSxRfWZ1bmN0aW9uIEwzKHksUCxMLFEpe1AuQm9yZGVycz1bXTt2'@;
put 'YXIgcmU9e30sZ2U9e30sX2U9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPWxuKHZlKTtzd2l0Y2goam4oU2VbMF0pKXtjYXNlIjxib3JkZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8'@;
put 'bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8Ym90dG9tLz4iOmNhc2UiPC9ib3R0b20+IjpjYXNlIjxkaWFnb25hbCI6Y2FzZSI8ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNl'@;
put 'Ijxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFsPiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNl'@;
put 'IjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3Jk'@;
put 'ZXIvPiI6cmU9e30sU2UuZGlhZ29uYWxVcCYmKHJlLmRpYWdvbmFsVXA9eXIoU2UuZGlhZ29uYWxVcCkpLFNlLmRpYWdvbmFsRG93biYmKHJlLmRpYWdvbmFsRG93bj15cihTZS5kaWFnb25hbERvd24pKSxQLkJvcmRlcnMucHVzaChyZSk7YnJlYWs7Y2FzZSI8bGVmdCI6Y2FzZSI8bGVmdD4i'@;
put 'OmdlPXJlLmxlZnQ9e30sU2Uuc3R5bGUmJihnZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNhc2UiPHJpZ2h0PiI6Z2U9cmUucmlnaHQ9e30sU2Uuc3R5bGUmJihnZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpnZT1yZS50b3A9e30s'@;
put 'U2Uuc3R5bGUmJihnZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpnZT1yZS5ib3R0b209e30sU2Uuc3R5bGUmJihnZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8L2RpYWdvbmFsPiI6cmUuZGlhZ29uYWw9Z2UsZ2U9e307YnJlYWs7Y2Fz'@;
put 'ZSI8L2hvcml6b250YWw+IjpyZS5ob3Jpem9udGFsPWdlLGdlPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOnJlLnZlcnRpY2FsPWdlLGdlPXt9O2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOmdlLmNvbG9yfHwoZ2UuY29sb3I9e30pLFNlLmF1dG8mJihnZS5jb2xvci5hdXRv'@;
put 'PXlyKFNlLmF1dG8pKSxudWxsIT1TZS5yZ2I/Z2UuY29sb3IucmdiPVNlLnJnYi5zbGljZSgtNik6U2UuaW5kZXhlZD8oZ2UuY29sb3IuaW5kZXg9cGFyc2VJbnQoU2UuaW5kZXhlZCwxMCksZ2UuY29sb3IucmdiPUJtKGdlLmNvbG9yLmluZGV4LFAuSW5kZXhlZCwhMSkpOlNlLnRoZW1lJiYo'@;
put 'Z2UuY29sb3IudGhlbWU9cGFyc2VJbnQoU2UudGhlbWUsMTApLFNlLnRpbnQmJihnZS5jb2xvci50aW50PXBhcnNlRmxvYXQoU2UudGludCkpLFNlLnRoZW1lJiZMLnRoZW1lRWxlbWVudHMmJkwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihnZS5jb2xvci5yZ2I9QmQoTC50aGVtZUVsZW1l'@;
put 'bnRzLmNsclNjaGVtZVtnZS5jb2xvci50aGVtZV0ucmdiLGdlLmNvbG9yLnRpbnR8fDApKSksIVNlLmF1dG8mJm51bGw9PVNlLnJnYiYmIVNlLmluZGV4ZWQmJmRlbGV0ZSBnZS5jb2xvcjticmVhaztjYXNlIjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTticmVhaztkZWZh'@;
put 'dWx0OmlmKFEmJlEuV1RGJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitTZVswXSsiIGluIGJvcmRlcnMiKX19KX1mdW5jdGlvbiBSMyh5LFApe3ZhciBMPVsiPCIrUF07cmV0dXJuIHkmJnkuc3R5bGU/KEwucHVzaCgnIHN0eWxlPSInK3kuc3R5bGUrJyInKSx5LmNvbG9y'@;
put 'PyhMLnB1c2goIj4iKSxMLnB1c2goVWQoeS5jb2xvciwhMCkpLEwuam9pbigiIikrIjwvIitQKyI+Iik6TC5qb2luKCIiKSsiLz4iKTpMWzBdKyIvPiJ9ZnVuY3Rpb24gTzkoeSxQLEwsUSl7UC5GaWxscz1bXTt2YXIgcmU9e30sZ2U9e30sX2U9ITEsdmU9ITE7KHlbMF0ubWF0Y2goJHQpfHxb'@;
put 'XSkuZm9yRWFjaChmdW5jdGlvbihTZSl7dmFyIEhlPWxuKFNlKTtzd2l0Y2goam4oSGVbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+IjpjYXNlIjwvZmlsbD4iOmNhc2UiPC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9y'@;
put 'PiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZp'@;
put 'bGwvPiI6UC5GaWxscy5wdXNoKHJlPXt9KTticmVhaztjYXNlIjxncmFkaWVudEZpbGw+IjpyZS5zdG9wcz1bXTticmVhaztjYXNlIjxncmFkaWVudEZpbGwiOnJlLnN0b3BzPVtdLEhlLmRlZ3JlZSYmKHJlLmFuZ2xlPStIZS5kZWdyZWUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsIjpjYXNl'@;
put 'IjxwYXR0ZXJuRmlsbD4iOkhlLnBhdHRlcm5UeXBlJiYocmUucGF0dGVyblR5cGU9SGUucGF0dGVyblR5cGUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsLz4iOmNhc2UiPC9wYXR0ZXJuRmlsbD4iOmlmKF9lKXRocm93IG5ldyBFcnJvcigiYmFkIHN0b3AiKTticmVhaztjYXNlIjxjb2xvciI6'@;
put 'Y2FzZSI8YmdDb2xvciI6Y2FzZSI8ZmdDb2xvciI6dmFyIEJlPWpuKEhlWzBdKS5zbGljZSgxKTsiY29sb3IiIT1CZSYmIXJlW0JlXSYmKHJlW0JlXT17fSk7dmFyIEdlPV9lP2dlOnJlW0JlXTtudWxsIT1IZS5pbmRleGVkJiYoR2UuaW5kZXg9cGFyc2VJbnQoSGUuaW5kZXhlZCwxMCksR2Uu'@;
put 'cmdiPUJtKEdlLmluZGV4LFAuSW5kZXhlZCkpLG51bGwhPUhlLnRoZW1lJiYoR2UudGhlbWU9cGFyc2VJbnQoSGUudGhlbWUsMTApKSxudWxsIT1IZS50aW50JiYoR2UudGludD1wYXJzZUZsb2F0KEhlLnRpbnQpKSxudWxsIT1IZS5yZ2ImJihHZS5yZ2I9SGUucmdiLnNsaWNlKC02KSksbnVs'@;
put 'bCE9SGUuYXV0byYmZGVsZXRlIHJlW0JlXSxudWxsIT1HZS50aGVtZSYmIUdlLnJnYiYmTC50aGVtZUVsZW1lbnRzJiYoR2UucmdiPUJkKEwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbR2UudGhlbWVdLnJnYixHZS50aW50fHwwKSxRLldURiYmKEdlLnJhd19yZ2I9TC50aGVtZUVsZW1lbnRz'@;
put 'LmNsclNjaGVtZVtHZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOl9lPSEwLGdlPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOl9lPSEwLGdlPXt9LG51bGwhPUhlLnBvc2l0aW9uJiYoZ2Uudj1wYXJzZUZsb2F0KEhlLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+IjpfZT0hMSxy'@;
put 'ZS5zdG9wcy5wdXNoKGdlKTticmVhaztjYXNlIjxleHQiOnZlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+Ijp2ZT0hMTticmVhaztkZWZhdWx0OmlmKFEmJlEuV1RGJiYhdmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitIZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rpb24geUQoeSxQ'@;
put 'LEwsUSl7UC5Gb250cz1bXTt2YXIgcmU9e30sZ2U9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihfZSl7dmFyIHZlPWxuKF9lKTtzd2l0Y2goam4odmVbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250'@;
put 'IjpjYXNlIjxmb250PiI6aWYoIi8+IiE9X2Uuc2xpY2UoLTIpKWJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+IjpQLkZvbnRzLnB1c2gocmUpLHJlPXt9O2JyZWFrO2Nhc2UiPG5hbWUiOnZlLnZhbCYmKHJlLm5hbWU9UGkodmUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNl'@;
put 'IjwvbmFtZT4iOmJyZWFrO2Nhc2UiPGIiOnJlLmJvbGQ9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpyZS5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjpyZS5pdGFsaWM9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxp'@;
put 'Lz4iOmNhc2UiPGk+IjpyZS5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaCh2ZS52YWwpe2Nhc2Uibm9uZSI6cmUudW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOnJlLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjpyZS51bmRlcmxpbmU9'@;
put 'MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOnJlLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOnJlLnVuZGVybGluZT0zNH1icmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+IjpyZS51bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0'@;
put 'cmlrZSI6cmUuc3RyaWtlPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOnJlLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOnJlLm91dGxpbmU9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOnJlLm91dGxpbmU9MTticmVhaztj'@;
put 'YXNlIjxzaGFkb3ciOnJlLnNoYWRvdz12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjpyZS5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6cmUuY29uZGVuc2U9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpyZS5jb25kZW5z'@;
put 'ZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6cmUuZXh0ZW5kPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOnJlLmV4dGVuZD0xO2JyZWFrO2Nhc2UiPHN6Ijp2ZS52YWwmJihyZS5zej0rdmUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztj'@;
put 'YXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHZlLnZhbHx8Im5vbmUiKSYmKHJlLnZhbGlnbj12ZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5Ijp2ZS52YWwmJihyZS5mYW1pbHk9'@;
put 'cGFyc2VJbnQodmUudmFsLDEwKSk7YnJlYWs7Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjxzY2hlbWUiOnZlLnZhbCYmKHJlLnNjaGVtZT12ZS52YWwpO2JyZWFrO2Nhc2UiPHNjaGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6'@;
put 'aWYoIjEiPT12ZS52YWwpYnJlYWs7dmUuY29kZXBhZ2U9SVtwYXJzZUludCh2ZS52YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6cmUuY29sb3J8fChyZS5jb2xvcj17fSksdmUuYXV0byYmKHJlLmNvbG9yLmF1dG89eXIodmUuYXV0bykpLHZlLnJnYj9yZS5jb2xvci5yZ2I9dmUucmdiLnNs'@;
put 'aWNlKC02KTp2ZS5pbmRleGVkPyhyZS5jb2xvci5pbmRleD1wYXJzZUludCh2ZS5pbmRleGVkLDEwKSxyZS5jb2xvci5yZ2I9Qm0ocmUuY29sb3IuaW5kZXgsUC5JbmRleGVkKSk6dmUudGhlbWUmJihyZS5jb2xvci50aGVtZT1wYXJzZUludCh2ZS50aGVtZSwxMCksdmUudGludCYmKHJlLmNv'@;
put 'bG9yLnRpbnQ9cGFyc2VGbG9hdCh2ZS50aW50KSksdmUudGhlbWUmJkwudGhlbWVFbGVtZW50cyYmTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKHJlLmNvbG9yLnJnYj1CZChMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW3JlLmNvbG9yLnRoZW1lXS5yZ2IscmUuY29sb3IudGludHx8MCkp'@;
put 'KTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpicmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpnZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmdlPSExO2JyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJy'@;
put 'ZWFrO2Nhc2UiPGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUSYmUS5XVEYmJiFnZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3ZlWzBdKyIgaW4gZm9udHMiKX19KX12YXIgam09ezA6Im5vbmUiLDE6InNpbmdsZSIsMjoiZG91'@;
put 'YmxlIiwzMzoic2luZ2xlQWNjb3VudGluZyIsMzQ6ImRvdWJsZUFjY291bnRpbmcifSx6ZD1bIm51bUZtdElkIiwiZmlsbElkIiwiZm9udElkIiwiYm9yZGVySWQiLCJ4ZklkIl0sWjI9WyJhcHBseUFsaWdubWVudCIsImFwcGx5Qm9yZGVyIiwiYXBwbHlGaWxsIiwiYXBwbHlGb250IiwiYXBw'@;
put 'bHlOdW1iZXJGb3JtYXQiLCJhcHBseVByb3RlY3Rpb24iLCJwaXZvdEJ1dHRvbiIsInF1b3RlUHJlZml4Il0seEQ9ZnVuY3Rpb24oKXt2YXIgeT0vPCg/Olx3KzopP2ZvbnQoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udD4vLFA9LzwoPzpcdys6KT9udW1GbXQoW14+XSopXC8+LyxM'@;
put 'PS88KD86XHcrOik/ZmlsbChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxsPi8scmU9LzwoPzpcdys6KT9ib3JkZXIoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1bmN0aW9uKHZlLFNlLEhlLEJlKXt2YXIgZHQsQ3QsR2U9e30sbnQ9e307cmV0dXJu'@;
put 'KGR0PXZlLm1hdGNoKHkpKSYmKHlEKGR0LEdlLEhlLEJlKSwoR2UuRm9udHN8fFtdKVswXSYmVXQobnQsR2UuRm9udHNbMF0pKSwoZHQ9dmUubWF0Y2goUCkpJiYoQ3Q9bG4oUGkoZHRbMF0pKSxudC56PUN0LmZvcm1hdENvZGU/eHIoQ3QuZm9ybWF0Q29kZSk6KFNlLk51bWJlckZtdHx8W10p'@;
put 'WytDdC5udW1GbXRJZF18fCJHZW5lcmFsIiksKGR0PXZlLm1hdGNoKEwpKSYmKE85KGR0LEdlLEhlLEJlKSwoR2UuRmlsbHN8fFtdKVswXSYmVXQobnQsR2UuRmlsbHNbMF0pKSwoZHQ9dmUubWF0Y2gocmUpKSYmKEwzKGR0LEdlLEhlLEJlKSwoR2UuQm9yZGVyc3x8W10pWzBdJiZVdChudCxH'@;
put 'ZS5Cb3JkZXJzWzBdKSksbnR9fSgpLE1aPS88KD86XHcrOik/ZHhmPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmPi9nLGtaPS88KD86XHcrOik/dGFibGVTdHlsZVxiLio/PltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZT4vZzt2YXIgWm09ZnVuY3Rpb24oKXt2YXIgUD0vPCg/Olx3Kzop'@;
put 'P251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/bnVtRm10cz4vLEw9LzwoPzpcdys6KT9jZWxsU3R5bGVYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlWGZzPi8sUT0vPCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/'@;
put 'Y2VsbFN0eWxlcz4vLHJlPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8sZ2U9LzwoPzpcdys6KT9maWxscyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxscz4vLF9lPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwv'@;
put 'KD86XHcrOik/Zm9udHM+Lyx2ZT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vLFNlPS88KD86XHcrOik/aW5kZXhlZENvbG9ycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8sSGU9LzwoPzpcdys6KT90YWJs'@;
put 'ZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlcz4vLEJlPS88KD86XHcrOik/ZHhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9uKG50LGR0LEN0KXt2YXIgYnQsY3Q9e307cmV0dXJuIG50PygoYnQ9KG50PW50LnJl'@;
put 'cGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIikpLm1hdGNoKFNlKSkmJmZ1bmN0aW9uIFA5KHksUCxMKXtQLkluZGV4ZWR8fChQLkluZGV4ZWQ9W10pO3ZhciBRPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZv'@;
put 'ckVhY2goZnVuY3Rpb24ocmUpe3ZhciBnZT1sbihyZSk7c3dpdGNoKGpuKGdlWzBdKSl7Y2FzZSI8aW5kZXhlZENvbG9ycz4iOmNhc2UiPGluZGV4ZWRDb2xvcnMiOmNhc2UiPGluZGV4ZWRDb2xvcnMvPiI6Y2FzZSI8L2luZGV4ZWRDb2xvcnM+IjpjYXNlIjwvcmdiQ29sb3I+IjpjYXNlIjxl'@;
put 'eHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxyZ2JDb2xvciI6ZGVsZXRlIGdlWzBdO3ZhciBfZT1wYXJzZUludChnZS5yZ2Iuc2xpY2UoLTYpLDE2KTtQLkluZGV4ZWQucHVzaChbX2U+PjE2JjI1NSxfZT4+OCYyNTUsMjU1Jl9lXSk7YnJlYWs7Y2Fz'@;
put 'ZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goUCkpJiZmdW5jdGlvbiBD'@;
put 'RCh5LFAsTCl7UC5OdW1iZXJGbXQ9W107Zm9yKHZhciBRPWx0KHcuX3RhYmxlKSxyZT0wO3JlPFEubGVuZ3RoOysrcmUpUC5OdW1iZXJGbXRbUVtyZV1dPXcuX3RhYmxlW1FbcmVdXTt2YXIgZ2U9eVswXS5tYXRjaCgkdCk7aWYoZ2UpZm9yKHJlPTA7cmU8Z2UubGVuZ3RoOysrcmUpe3ZhciBf'@;
put 'ZT1sbihnZVtyZV0pO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPG51bUZtdHMiOmNhc2UiPC9udW1GbXRzPiI6Y2FzZSI8bnVtRm10cy8+IjpjYXNlIjxudW1GbXRzPiI6Y2FzZSI8L251bUZtdD4iOmJyZWFrO2Nhc2UiPG51bUZtdCI6dmFyIHZlPXhyKFBpKF9lLmZvcm1hdENvZGUpKSxTZT1w'@;
put 'YXJzZUludChfZS5udW1GbXRJZCwxMCk7aWYoUC5OdW1iZXJGbXRbU2VdPXZlLFNlPjApe2lmKFNlPjM5Mil7Zm9yKFNlPTM5MjtTZT42MCYmbnVsbCE9UC5OdW1iZXJGbXRbU2VdOy0tU2UpO1AuTnVtYmVyRm10W1NlXT12ZX13LmxvYWQodmUsU2UpfWJyZWFrO2RlZmF1bHQ6aWYoTC5XVEYp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitfZVswXSsiIGluIG51bUZtdHMiKX19fShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKF9lKSkmJnlEKGJ0LGN0LGR0LEN0KSwoYnQ9bnQubWF0Y2goZ2UpKSYmTzkoYnQsY3QsZHQsQ3QpLChidD1udC5tYXRjaCh2ZSkpJiZMMyhidCxjdCxk'@;
put 'dCxDdCksKGJ0PW50Lm1hdGNoKEwpKSYmZnVuY3Rpb24gaEMoeSxQLEwpe1AuQ2VsbFN0eWxlWGY9W107dmFyIFEscmU9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIF9lPWxuKGdlKSx2ZT0wO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPGNlbGxTdHls'@;
put 'ZVhmcyI6Y2FzZSI8Y2VsbFN0eWxlWGZzPiI6Y2FzZSI8Y2VsbFN0eWxlWGZzLz4iOmNhc2UiPC9jZWxsU3R5bGVYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0'@;
put 'THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKFE9X2UpWzBdLHZlPTA7dmU8emQubGVuZ3RoOysrdmUpUVt6ZFt2ZV1dJiYoUVt6ZFt2ZV1dPXBhcnNlSW50KFFbemRbdmVdXSwxMCkpO2Zvcih2ZT0wO3ZlPFoyLmxlbmd0aDsrK3Zl'@;
put 'KVFbWjJbdmVdXSYmKFFbWjJbdmVdXT15cihRW1oyW3ZlXV0pKTtpZihQLk51bWJlckZtdCYmUS5udW1GbXRJZD4zOTIpZm9yKHZlPTM5Mjt2ZT42MDstLXZlKWlmKFAuTnVtYmVyRm10W1EubnVtRm10SWRdPT1QLk51bWJlckZtdFt2ZV0pe1EubnVtRm10SWQ9dmU7YnJlYWt9UC5DZWxsU3R5'@;
put 'bGVYZi5wdXNoKFEpO2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciBTZT17fTtfZS52ZXJ0aWNhbCYmKFNlLnZlcnRpY2FsPV9lLnZlcnRpY2FsKSxfZS5ob3Jpem9udGFsJiYoU2UuaG9yaXpvbnRhbD1fZS5ob3Jpem9udGFsKSxudWxsIT1fZS50ZXh0Um90'@;
put 'YXRpb24mJihTZS50ZXh0Um90YXRpb249X2UudGV4dFJvdGF0aW9uKSxfZS5pbmRlbnQmJihTZS5pbmRlbnQ9X2UuaW5kZW50KSxfZS53cmFwVGV4dCYmKFNlLndyYXBUZXh0PV9lLndyYXBUZXh0KSxfZS5zaHJpbmtUb0ZpdCYmKFNlLnNocmlua1RvRml0PXlyKF9lLnNocmlua1RvRml0KSks'@;
put 'US5hbGlnbm1lbnQ9U2U7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6US5wcm90ZWN0aW9uPXt9LHlyKF9lLmhpZGRlbikmJihRLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1fZS5sb2NrZWQmJihRLnByb3RlY3Rpb24uZWRpdGFibGU9IXlyKF9lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPGV4'@;
put 'dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFyZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK19lWzBdKyIgaW4gY2VsbFN0eWxlWGZzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goUSkpJiZmdW5jdGlvbiBT'@;
put 'RCh5LFAsTCl7UC5DZWxsU3R5bGVYZnx8KFAuQ2VsbFN0eWxlWGY9W10pO3ZhciBRPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBnZT1sbihyZSk7c3dpdGNoKGpuKGdlWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNh'@;
put 'c2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxTdHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIGdl'@;
put 'WzBdO3ZhciBfZT0rZ2UueGZJZDtpZihQLkNlbGxTdHlsZVhmW19lXSlQLkNlbGxTdHlsZVhmW19lXS5zdHlsZT1QaShnZS5uYW1lKTtlbHNlIGlmKCFnZS5idWlsdGluSWQpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIitfZSk7YnJlYWs7Y2FzZSI8ZXh0IjpR'@;
put 'PSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2gocmUpKSYmZnVuY3Rpb24gZEMoeSxQLEwp'@;
put 'e1AuQ2VsbFhmPVtdO3ZhciBRLHJlPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBfZT1sbihnZSksdmU9MDtzd2l0Y2goam4oX2VbMF0pKXtjYXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhm'@;
put 'cz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoUT1fZSlb'@;
put 'MF0sdmU9MDt2ZTx6ZC5sZW5ndGg7Kyt2ZSlRW3pkW3ZlXV0mJihRW3pkW3ZlXV09cGFyc2VJbnQoUVt6ZFt2ZV1dLDEwKSk7Zm9yKHZlPTA7dmU8WjIubGVuZ3RoOysrdmUpUVtaMlt2ZV1dJiYoUVtaMlt2ZV1dPXlyKFFbWjJbdmVdXSkpO2lmKFAuTnVtYmVyRm10JiZRLm51bUZtdElkPjM5'@;
put 'Milmb3IodmU9MzkyO3ZlPjYwOy0tdmUpaWYoUC5OdW1iZXJGbXRbUS5udW1GbXRJZF09PVAuTnVtYmVyRm10W3ZlXSl7US5udW1GbXRJZD12ZTticmVha31QLkNlbGxTdHlsZVhmJiZRLnhmSWQmJlAuQ2VsbFN0eWxlWGZbUS54ZklkXSYmUC5DZWxsU3R5bGVYZltRLnhmSWRdLnN0eWxlJiYo'@;
put 'US5zdHlsZT1QLkNlbGxTdHlsZVhmW1EueGZJZF0uc3R5bGUpLFAuQ2VsbFhmLnB1c2goUSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIFNlPXt9O19lLnZlcnRpY2FsJiYoU2UudmVydGljYWw9X2UudmVydGljYWwpLF9lLmhvcml6b250YWwmJihTZS5o'@;
put 'b3Jpem9udGFsPV9lLmhvcml6b250YWwpLG51bGwhPV9lLnRleHRSb3RhdGlvbiYmKFNlLnRleHRSb3RhdGlvbj1fZS50ZXh0Um90YXRpb24pLF9lLmluZGVudCYmKFNlLmluZGVudD1fZS5pbmRlbnQpLF9lLndyYXBUZXh0JiYoU2Uud3JhcFRleHQ9eXIoX2Uud3JhcFRleHQpKSxfZS5zaHJp'@;
put 'bmtUb0ZpdCYmKFNlLnNocmlua1RvRml0PXlyKF9lLnNocmlua1RvRml0KSksUS5hbGlnbm1lbnQ9U2U7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6US5wcm90ZWN0aW9uPXt9LHlyKF9lLmhpZGRlbikmJihRLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1fZS5sb2NrZWQmJihRLnByb3Rl'@;
put 'Y3Rpb24uZWRpdGFibGU9IXlyKF9lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpjYXNlIjwvZXh0PiI6cmU9ITE7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURiYmIXJlKXRocm93'@;
put 'IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrX2VbMF0rIiBpbiBjZWxsWGZzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goQmUpKSYmZnVuY3Rpb24gRjkoeSxQLEwsUSl7UC5EWEZ8fChQLkRYRj1bXSksKHlbMF0ubWF0Y2goTVopfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7UC5E'@;
put 'WEYucHVzaCh4RChyZSxQLEwsUSkpfSl9KGJ0LGN0LGR0LEN0KSwoYnQ9bnQubWF0Y2goSGUpKSYmZnVuY3Rpb24gQVooeSxQLEwsUSl7UC5UYWJsZXx8KFAuVGFibGU9W10pLCh5WzBdLm1hdGNoKGtaKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe1AuVGFibGUucHVzaChmdW5jdGlvbiB4'@;
put 'Wih5LFAsTCxRKXt2YXIgcmU9ITEsZ2U9e307cmV0dXJuKHkubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihfZSl7dmFyIHZlPWxuKF9lKTtzd2l0Y2goam4odmVbMF0pKXtjYXNlIjx0YWJsZVN0eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6Z2UubmFtZT12ZS5uYW1lLnJlcGxhY2Uo'@;
put 'L14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxnZS5yYXduYW1lPXZlLm5hbWUsZ2UucGl2b3Q9IXZlLnBpdm90fHx5cih2ZS5waXZvdCksZ2UudGFibGU9IXZlLnRhYmxlfHx5cih2ZS50YWJsZSk7YnJlYWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4'@;
put 'dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVtZW50IjppZih2ZS50eXBlJiZ2ZS5keGZJZCl7aWYoIVAuRFhGfHwhUC5EWEZbK3ZlLmR4ZklkXSl0aHJvdyBuZXcgRXJyb3IoX2UrIiBjYW5ub3QgZmluZCBEWEYiKTtnZVt2ZS50'@;
put 'eXBlXT1QLkRYRlsrdmUuZHhmSWRdfWJyZWFrO2Nhc2UiPGV4dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUSYmUS5XVEYmJiFyZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3ZlWzBdKyIgaW4gdGFibGVTdHlsZSIpfX0pLGdlfShy'@;
put 'ZSxQLDAsUSkpfSl9KGJ0LGN0LDAsQ3QpLChjdC5Gb250c3x8W10pWzBdJiZaMShjdC5Gb250c1swXSksY3QpOmN0fX0oKSxmQz1Tcigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6aXMubWFpblswXSwieG1sbnM6dnQiOmlzLnZ0fSk7ZnVuY3Rpb24gcEMoeSxQKXt2YXIgUSxMPVtCbixmQ107'@;
put 'eS5TU0YmJm51bGwhPShRPWZ1bmN0aW9uIHptKHkpe3ZhciBQPVsiPG51bUZtdHM+Il07cmV0dXJuW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihMKXtmb3IodmFyIFE9TFswXTtRPD1MWzFdOysrUSludWxsIT15W1FdJiYoUFtQLmxlbmd0aF09U3Io'@;
put 'Im51bUZtdCIsbnVsbCx7bnVtRm10SWQ6USxmb3JtYXRDb2RlOkhyKHlbUV0pfSkpfSksMT09PVAubGVuZ3RoPyIiOihQW1AubGVuZ3RoXT0iPC9udW1GbXRzPiIsUFswXT1TcigibnVtRm10cyIsbnVsbCx7Y291bnQ6UC5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFAuam9pbigiIikp'@;
put 'fSh5LlNTRikpJiYoTFtMLmxlbmd0aF09USksTFtMLmxlbmd0aF09ZnVuY3Rpb24gd0QoeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1bIjxmb250PiJdO0wuYm9sZCYmUS5wdXNoKCI8Yi8+IiksTC5pdGFsaWMmJlEucHVzaCgiPGkvPiIpLEwuc3RyaWtl'@;
put 'JiZRLnB1c2goIjxzdHJpa2UvPiIpLEwuc2hhZG93JiZRLnB1c2goIjxzaGFkb3cvPiIpLGptWytMLnVuZGVybGluZV0mJlEucHVzaCgnPHUgdmFsPSInK2ptWytMLnVuZGVybGluZV0rJyIvPicpLEwuc3omJlEucHVzaCgnPHN6IHZhbD0iJytMLnN6KyciLz4nKSxMLmNvbG9yJiZRLnB1c2go'@;
put 'VWQoTC5jb2xvciwhMCkpLEwubmFtZSYmUS5wdXNoKCc8bmFtZSB2YWw9IicrTC5uYW1lKyciLz4nKSxMLmZhbWlseSYmUS5wdXNoKCc8ZmFtaWx5IHZhbD0iJytMLmZhbWlseSsnIi8+JyksTC5zY2hlbWUmJlEucHVzaCgnPHNjaGVtZSB2YWw9IicrTC5zY2hlbWUrJyIvPicpLEwudmFsaWdu'@;
put 'JiZRLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK0wudmFsaWduKygic3ViIj09TC52YWxpZ258fCJzdXBlciI9PUwudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksUC5wdXNoKFEuam9pbigiIikrIjwvZm9udD4iKX0pLCc8Zm9udHMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIp'@;
put 'KyI8L2ZvbnRzPiJ9KCh5LlN0eWxlc3x8e30pLkZvbnRzfHxbXSksTFtMLmxlbmd0aF09ZnVuY3Rpb24gYkQoeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1udWxsO2lmKEwuc3RvcHMmJkwuc3RvcHMubGVuZ3RoKXt2YXIgcmU9e307TC5hbmdsZSYmKHJl'@;
put 'LmRlZ3JlZT1NYXRoLnJvdW5kKEwuYW5nbGUpKSxRPUwuc3RvcHMubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gU3IoInN0b3AiLFVkKGdlLCJjb2xvciIsITApLG51bGwhPWdlLnY/e3Bvc2l0aW9uOmdlLnZ9Ont9KX0pLFAucHVzaCgiPGZpbGw+IitTcigiZ3JhZGllbnRGaWxsIixRLmpvaW4o'@;
put 'IiIpLHJlKSsiPC9maWxsPiIpfWVsc2V7aWYoTC5mZ0NvbG9yKXtpZihRPShRfHwiIikrIjxmZ0NvbG9yICIsTC5mZ0NvbG9yLnRoZW1lKVErPSd0aGVtZT0iJytMLmZnQ29sb3IudGhlbWUrJyInKyhMLmZnQ29sb3IudGludD8nIHRpbnQ9IicrTC5mZ0NvbG9yLnRpbnQrJyInOiIiKSsiLz4i'@;
put 'O2Vsc2UgaWYobnVsbCE9TC5mZ0NvbG9yLmluZGV4JiZudWxsPT1MLmZnQ29sb3IucmdiKVErPSdpbmRleGVkPSInK0wuZmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKEwuZmdDb2xvci5hdXRvKVErPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PUwuZmdDb2xvci5yZ2IpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJCYWQgY29sb3IgIitsdChMLmZnQ29sb3IpLmpvaW4oInwiKSk7USs9J3JnYj0iRkYnK091KEwuZmdDb2xvci5yZ2IpKyciLz4nfSJzb2xpZCI9PUwucGF0dGVyblR5cGUmJiFMLmJnQ29sb3ImJihMLmJnQ29sb3I9e2luZGV4OjY0fSl9aWYoTC5iZ0NvbG9yKWlmKFE9KFF8fCIi'@;
put 'KSsiPGJnQ29sb3IgIixMLmJnQ29sb3IudGhlbWUpUSs9J3RoZW1lPSInK0wuYmdDb2xvci50aGVtZSsnIi8+JztlbHNlIGlmKG51bGwhPUwuYmdDb2xvci5pbmRleCYmbnVsbD09TC5iZ0NvbG9yLnJnYilRKz0naW5kZXhlZD0iJytMLmJnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihMLmJn'@;
put 'Q29sb3IuYXV0bylRKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1MLmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrbHQoTC5iZ0NvbG9yKS5qb2luKCJ8IikpO1ErPSdyZ2I9IkZGJytPdShMLmJnQ29sb3IucmdiKSsnIi8+J31QLnB1c2goIjxmaWxsPiIrU3Io'@;
put 'InBhdHRlcm5GaWxsIixRLHtwYXR0ZXJuVHlwZTpMLnBhdHRlcm5UeXBlfSkrIjwvZmlsbD4iKX19KSwnPGZpbGxzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9maWxscz4ifSgoeS5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLExbTC5sZW5ndGhdPWZ1bmN0aW9uIHdaKHkp'@;
put 'e3ZhciBQPVtdO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9W107US5wdXNoKFIzKEwubGVmdCwibGVmdCIpKSxRLnB1c2goUjMoTC5yaWdodCwicmlnaHQiKSksUS5wdXNoKFIzKEwudG9wLCJ0b3AiKSksUS5wdXNoKFIzKEwuYm90dG9tLCJib3R0b20iKSksUS5wdXNoKFIz'@;
put 'KEwuZGlhZ29uYWwsImRpYWdvbmFsIikpLFAucHVzaCgiPGJvcmRlcj4iK1Euam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9ib3JkZXJzPiJ9KCh5LlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxMW0wubGVuZ3Ro'@;
put 'XT1mdW5jdGlvbiBTWih5KXt2YXIgUD1bJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIi8+J107aWYoeSlmb3IodmFyIEw9MTtMPHkubGVuZ3RoOysrTClQLnB1c2goU3IoInhmIixudWxsLHtudW1GbXRJZDp5W0xdLm51bUZtdElkfHwwLGZvbnRJ'@;
put 'ZDp5W0xdLmZvbnRJZHx8MCxmaWxsSWQ6eVtMXS5maWxsSWR8fDAsYm9yZGVySWQ6eVtMXS5ib3JkZXJJZHx8MH0pKTtyZXR1cm4nPGNlbGxTdHlsZVhmcyBjb3VudD0iJytQLmxlbmd0aCsnIj4nK1Auam9pbigiIikrIjwvY2VsbFN0eWxlWGZzPiJ9KFAuY2VsbFN0eWxlWGZzKSwoUT1mdW5j'@;
put 'dGlvbiBDWih5KXt2YXIgUD1bXTtyZXR1cm4gUFtQLmxlbmd0aF09U3IoImNlbGxYZnMiLG51bGwpLHkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1MLmFsaWdubWVudDtkZWxldGUgTC5hbGlnbm1lbnQ7dmFyIHJlPUwucHJvdGVjdGlvbjtkZWxldGUgTC5wcm90ZWN0aW9uO3ZhciBnZT1R'@;
put 'P1NyKCJhbGlnbm1lbnQiLG51bGwsUSk6IiI7Z2UrPXJlP1NyKCJwcm90ZWN0aW9uIixudWxsLHtoaWRkZW46cmUuaGlkZGVuPzE6MCxsb2NrZWQ6cmUuZWRpdGFibGU/MDoxfSk6IiIsUFtQLmxlbmd0aF09U3IoInhmIixnZXx8bnVsbCxMKSxRJiYoTC5hbGlnbm1lbnQ9USkscmUmJihMLnBy'@;
put 'b3RlY3Rpb249cmUpfSksUFtQLmxlbmd0aF09IjwvY2VsbFhmcz4iLDI9PT1QLmxlbmd0aD8iIjooUFswXT1TcigiY2VsbFhmcyIsbnVsbCx7Y291bnQ6UC5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFAuam9pbigiIikpfShQLmNlbGxYZnMpKSYmKExbTC5sZW5ndGhdPVEpLExbTC5s'@;
put 'ZW5ndGhdPWZ1bmN0aW9uIE1EKHkpe3ZhciBQPVsnPGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIvPiddO2lmKHkpZm9yKHZhciBMPTE7TDx5Lmxlbmd0aDsrK0wpUC5wdXNoKFNyKCJjZWxsU3R5bGUiLG51bGwse25hbWU6eVtMXS5uYW1lLHhmSWQ6TH0p'@;
put 'KTtyZXR1cm4nPGNlbGxTdHlsZXMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2NlbGxTdHlsZXM+In0oUC5jZWxsU3R5bGVYZnMpLHkuU3R5bGVzLkRYRnx8KHkuU3R5bGVzLkRYRj1bXSk7dmFyIHJlPWZ1bmN0aW9uIFRaKHksUCxMKXt2YXIgUT1bJzx0YWJsZVN0eWxl'@;
put 'cyBjb3VudD0iJysoeXx8W10pLmxlbmd0aCsnIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0eWxlTWVkaXVtNCInXTtyZXR1cm4geSYmeS5sZW5ndGg/KFFbMF0rPSI+Iix5LmZvckVhY2goZnVuY3Rpb24ocmUpe1EucHVz'@;
put 'aChmdW5jdGlvbiBFWih5LFAsTCl7dmFyIFE9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxhc3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlwZSIsInNlY29uZFJvd1N0cmlwZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3Ry'@;
put 'aXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRvdGFsQ29sdW1uIiwic2Vjb25kU3VidG90YWxDb2x1bW4iLCJ0aGlyZFN1YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29u'@;
put 'ZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3ViaGVhZGluZyIsInRoaXJkQ29sdW1uU3ViaGVhZGluZyIsImZpcnN0Um93U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGly'@;
put 'ZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZih5W2dlXSl7dmFyIF9lPUZvKFAseVtnZV0pO1EucHVzaCgnPHRhYmxlU3R5bGVFbGVtZW50IGR4ZklkPSInK19lKyciIHR5cGU9IicrZ2UrJyIvPicpfX0p'@;
put 'O3ZhciByZT0nPHRhYmxlU3R5bGUgY291bnQ9IicrUS5sZW5ndGgrJyIgcGl2b3Q9IicrICshIXkucGl2b3QrJyIgbmFtZT0iJyt5Lm5hbWUrJyInO3JldHVybiBRLmxlbmd0aD9yZSsiPiIrUS5qb2luKCIiKSsiPC90YWJsZVN0eWxlPiI6cmUrIi8+In0ocmUsUCkpfSksUS5qb2luKCIiKSsi'@;
put 'PC90YWJsZVN0eWxlcz4iKTpRWzBdKyIvPiJ9KCh5LlN0eWxlc3x8e30pLlRhYmxlfHxbXSx5LlN0eWxlcy5EWEYpO3JldHVybiBMW0wubGVuZ3RoXT1mdW5jdGlvbiBVbSh5LFApe2lmKCF5Lmxlbmd0aClyZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBMPVsnPGR4ZnMgY291bnQ9Iicr'@;
put 'eS5sZW5ndGgrJyI+J107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihRKXtMLnB1c2goZnVuY3Rpb24gRUQoeSxQKXt2YXIgTD17Ym9sZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRBbGlnbiJ9LFE9WyI8ZHhmPiJdLHJlPVtdLGdlPVtdLF9lPVtdLFNlPVtdO3JldHVybiBsdCh5KS5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKEJlKXtzd2l0Y2goQmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlInVuZGVybGluZSI6Y2FzZSJjb2xvciI6Y2FzZSJ2YWxpZ24iOmNhc2Uic3oiOmNhc2UibmFtZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjaGFy'@;
put 'c2V0IjpjYXNlImZhbWlseSI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOmNhc2Uic2NoZW1lIjpyZS5wdXNoKEJlKTticmVhaztjYXNlImJnQ29sb3IiOmNhc2UiZmdDb2xvciI6X2UucHVzaChCZSk7YnJlYWs7Y2FzZSJ6IjpnZS5wdXNoKEJlKTticmVhaztjYXNlInRvcCI6Y2FzZSJi'@;
put 'b3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjpTZS5wdXNoKEJlKTticmVhaztjYXNlInBhdHRlcm5UeXBlIjpjYXNlImRpYWdvbmFsRG93biI6Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNl'@;
put 'ImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitCZSsiIGluIERYRiJ9fSkscmUubGVuZ3RoPjAmJihRLnB1c2goIjxmb250PiIpLHJlLmZvckVhY2goZnVuY3Rpb24oQmUpe3N3aXRjaChCZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNh'@;
put 'c2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpRLnB1c2goIjwiKyhMW0JlXXx8QmUpKycgdmFsPSInKyh5W0JlXT8iMSI6IjAiKSsnIi8+Jyk7YnJlYWs7Y2FzZSJjb2xvciI6US5wdXNoKFVkKHlbQmVdLEJlLCEwKSk7YnJlYWs7Y2FzZSJmYW1p'@;
put 'bHkiOmNhc2UibmFtZSI6Y2FzZSJzeiI6Y2FzZSJzY2hlbWUiOlEucHVzaCgiPCIrKExbQmVdfHxCZSkrJyB2YWw9IicreVtCZV0rJyIvPicpO2JyZWFrO2Nhc2UidW5kZXJsaW5lIjpRLnB1c2goJzx1IHZhbD0iJytqbVt5W0JlXXx8MF0rJyIvPicpO2JyZWFrO2Nhc2UidmFsaWduIjpRLnB1'@;
put 'c2goJzx2ZXJ0QWxpZ24gdmFsPSInK3kudmFsaWduKygic3ViIj09eS52YWxpZ258fCJzdXBlciI9PXkudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+Jyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK0JlKyIgOiBmb250IERYRiJ9fSksUS5wdXNoKCI8L2ZvbnQ+IikpLGdlLmxl'@;
put 'bmd0aD4wJiZRLnB1c2goJzxudW1GbXQgZm9ybWF0Q29kZT0iJytIcih5LnopKyciIG51bUZtdElkPSInK2Z1bmN0aW9uIFkzKHksUCl7aWYoIm51bWJlciI9PXR5cGVvZiB5KXJldHVybiB5O3ZhciBMPVAucmV2c3NmW3k/PyJHZW5lcmFsIl0sUT02MDtpZihudWxsPT1MKWZvcig7UTwzOTI7'@;
put 'KytRKWlmKG51bGw9PVAuc3NmW1FdKXJldHVybiB3LmxvYWQoeSxRKSxQLnNzZltRXT15LFAucmV2c3NmW3ldPVEsUTtyZXR1cm4gTH0oeS56LFApKyciLz4nKSxfZS5sZW5ndGg+MCYmKFEucHVzaCgiPGZpbGw+IiksUS5wdXNoKCI8cGF0dGVybkZpbGwiKyh5LnBhdHRlcm5UeXBlPycgcGF0'@;
put 'dGVyblR5cGU9IicreS5wYXR0ZXJuVHlwZSsnIj4nOiI+IikpLF9lLmZvckVhY2goZnVuY3Rpb24oQmUpe3N3aXRjaChCZSl7Y2FzZSJwYXR0ZXJuVHlwZSI6YnJlYWs7Y2FzZSJmZ0NvbG9yIjpjYXNlImJnQ29sb3IiOlEucHVzaChVZCh5W0JlXSxCZSwhMCkpO2JyZWFrO2RlZmF1bHQ6dGhy'@;
put 'b3ciVW5zdXBwb3J0ZWQgIitCZSsiIDogZmlsbCBEWEYifX0pLFEucHVzaCgiPC9wYXR0ZXJuRmlsbD4iKSxRLnB1c2goIjwvZmlsbD4iKSksU2UubGVuZ3RoPjA/KFEucHVzaChbIjxib3JkZXIiLG51bGwhPXkuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISF5LmRpYWdvbmFs'@;
put 'RG93bisnIic6IiIsbnVsbCE9eS5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEheS5kaWFnb25hbFVwKyciJzoiIiwiPiJdLmpvaW4oIiIpKSxTZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtRLnB1c2goUjMoeVtCZV0sQmUpKX0pLFEucHVzaCgiPC9ib3JkZXI+IikpOihudWxsIT15LmRp'@;
put 'YWdvbmFsRG93bnx8bnVsbCE9eS5kaWFnb25hbFVwKSYmUS5wdXNoKFsiPGJvcmRlciIsbnVsbCE9eS5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIXkuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT15LmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISF5LmRpYWdvbmFs'@;
put 'VXArJyInOiIiLCIvPiJdLmpvaW4oIiIpKSwxPT1RLmxlbmd0aD8iPGR4Zi8+IjpRLmpvaW4oIiIpKyI8L2R4Zj4ifShRLFApKX0pLEwuam9pbigiIikrIjwvZHhmcz4ifSh5LlN0eWxlcy5EWEYsUCksTFtMLmxlbmd0aF09cmUsTC5sZW5ndGg+MiYmKExbTC5sZW5ndGhdPSI8L3N0eWxlU2hl'@;
put 'ZXQ+IixMWzFdPUxbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEwuam9pbigiIil9ZnVuY3Rpb24gTzMoeSxQLEwpe0x8fChMPXByKDYrNCpQLmxlbmd0aCkpLEwud3JpdGVfc2hpZnQoMix5KSxyYyhQLEwpO3ZhciBRPUwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMO3JldHVybiBudWxsPT1M'@;
put 'LmwmJihMLmw9TC5sZW5ndGgpLFF9ZnVuY3Rpb24gWW0oeSl7cmV0dXJue2NvbG9yOkRkKHkpLHBvczptYSh5KX19SGkuU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyI7dmFyIFY0PVsibm9uZSIs'@;
put 'InNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3du'@;
put 'IiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLFkyPWJlKFY0KSxXbT1bImdlbmVyYWwiLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJmaWxsIiwianVzdGlmeSIsImNlbnRlckNvbnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLEI0PVsi'@;
put 'dG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlmeSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24gTjkoeSxQLEwpe0x8fChMPXByKDE2KSksTC53cml0ZV9zaGlmdCgyLFB8fDApLEwud3JpdGVfc2hpZnQoMix5Lm51bUZtdElkfHwwKSxMLndyaXRlX3NoaWZ0KDIseS5mb250SWR8fDApLEwu'@;
put 'd3JpdGVfc2hpZnQoMix5LmZpbGxJZHx8MCksTC53cml0ZV9zaGlmdCgyLHkuYm9yZGVySWR8fDApLEwud3JpdGVfc2hpZnQoMSx5LmFsaWdubWVudCYmeS5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHwwKSxMLndyaXRlX3NoaWZ0KDEseS5hbGlnbm1lbnQmJnkuYWxpZ25tZW50LmluZGVudHx8'@;
put 'MCk7dmFyIFE9MCxyZT0wO2lmKHkuYWxpZ25tZW50KXtpZih5LmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgZ2U9V20uaW5kZXhPZih5LmFsaWdubWVudC5ob3Jpem9udGFsKTtnZTwwJiYoZ2U9MCksUXw9Z2V9aWYoeS5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBfZT1CNC5pbmRleE9mKHku'@;
put 'YWxpZ25tZW50LnZlcnRpY2FsKTtfZTwwJiYoX2U9MiksUXw9X2U8PDN9eS5hbGlnbm1lbnQud3JhcFRleHQmJihRfD02NCkseS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihyZXw9MSl9cmV0dXJuIEwud3JpdGVfc2hpZnQoMSxRKSxMLndyaXRlX3NoaWZ0KDEscmUpLEwud3JpdGVfc2hpZnQo'@;
put 'MSwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTH12YXIgVzI9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFpciIsIm1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hE'@;
put 'b3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBqNCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7eS5sKz0xO3ZhciBMPURkKHkpO3JldHVybntzdHlsZTpXMltQXSxjb2xvcjpMfX1mdW5jdGlvbiBQMyh5LFApe3JldHVybiBQfHwoUD1wcigxMCkpLHkmJnkuc3R5bGUmJiIiIT15LnN0'@;
put 'eWxlJiYibm9uZSIhPXkuc3R5bGUmJi0xIT09VzIuaW5kZXhPZih5LnN0eWxlKT8oUC53cml0ZV9zaGlmdCgxLFcyLmluZGV4T2YoeS5zdHlsZSkpLFAud3JpdGVfc2hpZnQoMSwwKSx5LmNvbG9yP1IyKHkuY29sb3IsUCk6KFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCkp'@;
put 'KTooUC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApKSxQfWZ1bmN0aW9uIHR1KHksUCl7cmV0dXJuIFB8fChQPXByKDUyKSksUC53cml0ZV9zaGlmdCg0LHkueGZJZCksUC53cml0ZV9zaGlmdCgyLDEpLFAu'@;
put 'd3JpdGVfc2hpZnQoMSwreS5idWlsdGluSWQpLFAud3JpdGVfc2hpZnQoMSwwKSxBZCh5Lm5hbWV8fCIiLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfWZ1bmN0aW9uIHo0KHksUCl7IVB8fCFQLnRoZW1lRWxlbWVudHN8fCFQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxs'@;
put 'IT15LnRoZW1lJiYoeS5yZ2I9QmQoUC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVt5LnRoZW1lXS5yZ2IseS50aW50fHwwKSl9ZnVuY3Rpb24gUEQoeSxQKXt2YXIgTD13YygpO3JldHVybiB1aShMLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiBCYyh5LFApe2lmKFApe3ZhciBMPTA7'@;
put 'W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihRKXtmb3IodmFyIHJlPVFbMF07cmU8PVFbMV07KytyZSludWxsIT1QW3JlXSYmKytMfSksMCE9TCYmKHVpKHksIkJydEJlZ2luRm10cyIsa3UoTCkpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5'@;
put 'Ml1dLmZvckVhY2goZnVuY3Rpb24oUSl7Zm9yKHZhciByZT1RWzBdO3JlPD1RWzFdOysrcmUpbnVsbCE9UFtyZV0mJnVpKHksIkJydEZtdCIsTzMocmUsUFtyZV0pKX0pLHVpKHksIkJydEVuZEZtdHMiKSl9fShMLHkuU1NGKSxmdW5jdGlvbiBVNCh5LFApe3ZhciBMPVAubGVuZ3RoOzAhPUwm'@;
put 'Jih1aSh5LCJCcnRCZWdpbkZvbnRzIixrdShMKSksUC5mb3JFYWNoKGZ1bmN0aW9uKFEpe3VpKHksIkJydEZvbnQiLGZ1bmN0aW9uIHZDKHksUCl7UHx8KFA9cHIoMTUzKSksUC53cml0ZV9zaGlmdCgyLDIwKnkuc3opLGZ1bmN0aW9uIFloKHksUCl7UHx8KFA9cHIoMikpLFAud3JpdGVfc2hp'@;
put 'ZnQoMSwoeS5pdGFsaWM/MjowKXwoeS5zdHJpa2U/ODowKXwoeS5vdXRsaW5lPzE2OjApfCh5LnNoYWRvdz8zMjowKXwoeS5jb25kZW5zZT82NDowKXwoeS5leHRlbmQ/MTI4OjApKSxQLndyaXRlX3NoaWZ0KDEsMCl9KHksUCksUC53cml0ZV9zaGlmdCgyLHkuYm9sZD83MDA6NDAwKTt2YXIg'@;
put 'TD0wOyJzdXBlciI9PXkudmFsaWduP0w9MToic3ViIj09eS52YWxpZ24mJihMPTIpLFAud3JpdGVfc2hpZnQoMixMKSxQLndyaXRlX3NoaWZ0KDEseS51bmRlcmxpbmV8fDApLFAud3JpdGVfc2hpZnQoMSx5LmZhbWlseXx8MCksUC53cml0ZV9zaGlmdCgxLHkuY2hhcnNldHx8MCksUC53cml0'@;
put 'ZV9zaGlmdCgxLDApLFIyKHkuY29sb3IsUCk7dmFyIFE9MDtyZXR1cm4ibWFqb3IiPT15LnNjaGVtZSYmKFE9MSksIm1pbm9yIj09eS5zY2hlbWUmJihRPTIpLFAud3JpdGVfc2hpZnQoMSxRKSxyYyh5Lm5hbWUsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KFEpKX0pLHVpKHks'@;
put 'IkJydEVuZEZvbnRzIikpfShMLCh5LlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gX0MoeSxQKXt2YXIgTD1QLmxlbmd0aDswIT1MJiYodWkoeSwiQnJ0QmVnaW5GaWxscyIsa3UoTCkpLFAuZm9yRWFjaChmdW5jdGlvbihRKXt1aSh5LCJCcnRGaWxsIixmdW5jdGlvbiBBRCh5LFAp'@;
put 'e1B8fChQPXByKDg0KSk7dmFyIEw9WTJbeS5wYXR0ZXJuVHlwZV07bnVsbD09TCYmKEw9NDApLFAud3JpdGVfc2hpZnQoNCxMPStMKTt2YXIgUT0wO2lmKDQwIT1MKWZvcihSMih5LmZnQ29sb3J8fHtpbmRleDo2NH0sUCksUjIoeS5iZ0NvbG9yfHx7aW5kZXg6NjV9LFApO1E8MTI7KytRKVAu'@;
put 'd3JpdGVfc2hpZnQoNCwwKTtlbHNle2Zvcig7UTw0OysrUSlQLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtRPDEyOysrUSlQLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfShRKSl9KSx1aSh5LCJCcnRFbmRGaWxscyIpKX0oTCwoeS5TdHlsZXN8'@;
put 'fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIGJDKHksUCl7dmFyIEw9UC5sZW5ndGg7MCE9TCYmKHVpKHksIkJydEJlZ2luQm9yZGVycyIsa3UoTCkpLFAuZm9yRWFjaChmdW5jdGlvbihRKXt1aSh5LCJCcnRCb3JkZXIiLGZ1bmN0aW9uIEREKHksUCl7cmV0dXJuIFB8fChQPXByKDUxKSksUC53'@;
put 'cml0ZV9zaGlmdCgxLDApLFAzKHkudG9wLFApLFAzKHkuYm90dG9tLFApLFAzKHkubGVmdCxQKSxQMyh5LnJpZ2h0LFApLFAzKG51bGwsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KFEpKX0pLHVpKHksIkJydEVuZEJvcmRlcnMiKSl9KEwsKHkuU3R5bGVzfHx7fSkuQm9yZGVy'@;
put 'c3x8W10pLGZ1bmN0aW9uIElEKHksUCl7dmFyIEw9MTtpZihQJiYoTD1QLmxlbmd0aCksdWkoeSwiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLGt1KEwpKSx1aSh5LCJCcnRYRiIsTjkoe251bUZtdElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxQKWZvcih2YXIgUT0x'@;
put 'O1E8UC5sZW5ndGg7KytRKXVpKHksIkJydFhGIixOOSh7bnVtRm10SWQ6UFtRXS5udW1GbXRJZHx8MCxmb250SWQ6UFtRXS5mb250SWR8fDAsZmlsbElkOlBbUV0uZmlsbElkfHwwLGJvcmRlcklkOlBbUV0uYm9yZGVySWR8fDB9LDY1NTM1KSk7dWkoeSwiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9'@;
put 'KEwsUC5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIHlDKHksUCl7dWkoeSwiQnJ0QmVnaW5DZWxsWEZzIixrdShQLmxlbmd0aCkpLFAuZm9yRWFjaChmdW5jdGlvbihMKXt1aSh5LCJCcnRYRiIsTjkoTCwwKSl9KSx1aSh5LCJCcnRFbmRDZWxsWEZzIil9KEwsUC5jZWxsWGZzKSxmdW5jdGlvbiBM'@;
put 'RCh5LFApe3ZhciBMPTE7aWYoUCYmKEw9UC5sZW5ndGgpLHVpKHksIkJydEJlZ2luU3R5bGVzIixrdShMKSksdWkoeSwiQnJ0U3R5bGUiLHR1KHt4ZklkOjAsYnVpbHRpbklkOjAsbmFtZToiTm9ybWFsIn0pKSxQKWZvcih2YXIgUT0xO1E8UC5sZW5ndGg7KytRKXVpKHksIkJydFN0eWxlIix0'@;
put 'dSh7eGZJZDpRLGJ1aWx0aW5JZDowLG5hbWU6UFtRXS5uYW1lfSkpO3VpKHksIkJydEVuZFN0eWxlcyIpfShMLFAuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiB3Qyh5KXt1aSh5LCJCcnRCZWdpbkRYRnMiLGt1KDApKSx1aSh5LCJCcnRFbmREWEZzIil9KEwpLGZ1bmN0aW9uIFJEKHkpe3VpKHks'@;
put 'IkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9uIFY5KHksUCxMKXt2YXIgUT1wcigyMDUyKTtyZXR1cm4gUS53cml0ZV9zaGlmdCg0LHkpLEFkKFAsUSksQWQoTCxRKSxRLmxlbmd0aD5RLmw/US5zbGljZSgwLFEubCk6UX0oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVk'@;
put 'aXVtNCIpKSx1aSh5LCJCcnRFbmRUYWJsZVN0eWxlcyIpfShMKSx1aShMLCJCcnRFbmRTdHlsZVNoZWV0IiksTC5lbmQoKX1IaS5USEVNRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIEZEPVsi'@;
put 'PC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1'@;
put 'bmN0aW9uIGo5KHksUCxMKXtQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBRPXt9Oyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBnZT1sbihyZSk7c3dpdGNoKGdlWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6'@;
put 'Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6US5yZ2I9Z2UudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjpRLnJnYj1nZS5sYXN0Q2xyO2JyZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNl'@;
put 'IjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6YWNjZW50MT4iOmNhc2UiPGE6YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNl'@;
put 'IjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxhOmFjY2VudDY+IjpjYXNlIjwvYTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8'@;
put 'YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09Z2VbMF0uY2hhckF0KDEpPyhQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0ZELmluZGV4T2YoZ2VbMF0pXT1RLFE9e30pOlEubmFtZT1nZVswXS5zbGljZSgzLGdlWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKEwm'@;
put 'JkwuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiB6OSgpe31mdW5jdGlvbiBIRCgpe312YXIgWjQ9LzxhOmNsclNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8sTkQ9LzxhOmZvbnRTY2hlbWUo'@;
put 'W14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+LyxWRD0vPGE6Zm10U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmbXRTY2hlbWU+LyxTQz0vPGE6dGhlbWVFbGVtZW50cyhbXj5dKik+W1xzXFNdKjxcL2E6dGhlbWVFbGVtZW50cz4vO2Z1bmN0aW9uIEdtKHksUCl7aWYoIXl8fDA9PT15'@;
put 'Lmxlbmd0aClyZXR1cm4gR20ocmYoKSk7dmFyIEwsUT17fTtpZighKEw9eS5tYXRjaChTQykpKXRocm93IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gQ0MoeSxQLEwpe3ZhciBRO1AudGhlbWVFbGVtZW50cz17fSxbWyJjbHJT'@;
put 'Y2hlbWUiLFo0LGo5XSxbImZvbnRTY2hlbWUiLE5ELHo5XSxbImZtdFNjaGVtZSIsVkQsSERdXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtpZighKFE9eS5tYXRjaChyZVsxXSkpKXRocm93IG5ldyBFcnJvcihyZVswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7cmVbMl0oUSxQLEwp'@;
put 'fSl9KExbMF0sUSxQKSxRLnJhdz15LFF9ZnVuY3Rpb24gcmYoeSxQKXtpZihQJiZQLnRoZW1lWExTWClyZXR1cm4gUC50aGVtZVhMU1g7aWYoeSYmInN0cmluZyI9PXR5cGVvZiB5LnJhdylyZXR1cm4geS5yYXc7dmFyIEw9W0JuXTtyZXR1cm4gTFtMLmxlbmd0aF09JzxhOnRoZW1lIHhtbG5z'@;
put 'OmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZpY2UgVGhlbWUiPicsTFtMLmxlbmd0aF09IjxhOnRoZW1lRWxlbWVudHM+IixMW0wubGVuZ3RoXT0nPGE6Y2xyU2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxMW0wubGVuZ3Ro'@;
put 'XT0nPGE6ZGsxPjxhOnN5c0NsciB2YWw9IndpbmRvd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPjwvYTpkazE+JyxMW0wubGVuZ3RoXT0nPGE6bHQxPjxhOnN5c0NsciB2YWw9IndpbmRvdyIgbGFzdENscj0iRkZGRkZGIi8+PC9hOmx0MT4nLExbTC5sZW5ndGhdPSc8YTpkazI+PGE6c3JnYkNs'@;
put 'ciB2YWw9IjFGNDk3RCIvPjwvYTpkazI+JyxMW0wubGVuZ3RoXT0nPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEiLz48L2E6bHQyPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDE+PGE6c3JnYkNsciB2YWw9IjRGODFCRCIvPjwvYTphY2NlbnQxPicsTFtMLmxlbmd0aF09JzxhOmFjY2Vu'@;
put 'dDI+PGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPjwvYTphY2NlbnQyPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9IjlCQkI1OSIvPjwvYTphY2NlbnQzPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDQ+PGE6c3JnYkNsciB2YWw9IjgwNjRBMiIvPjwvYTphY2NlbnQ0'@;
put 'PicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDU+PGE6c3JnYkNsciB2YWw9IjRCQUNDNiIvPjwvYTphY2NlbnQ1PicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9IkY3OTY0NiIvPjwvYTphY2NlbnQ2PicsTFtMLmxlbmd0aF09JzxhOmhsaW5rPjxhOnNyZ2JDbHIgdmFs'@;
put 'PSIwMDAwRkYiLz48L2E6aGxpbms+JyxMW0wubGVuZ3RoXT0nPGE6Zm9sSGxpbms+PGE6c3JnYkNsciB2YWw9IjgwMDA4MCIvPjwvYTpmb2xIbGluaz4nLExbTC5sZW5ndGhdPSI8L2E6Y2xyU2NoZW1lPiIsTFtMLmxlbmd0aF09JzxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLExbTC5s'@;
put 'ZW5ndGhdPSI8YTptYWpvckZvbnQ+IixMW0wubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4nLExbTC5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxMW0wubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJK'@;
put 'cGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0'@;
put 'PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBS'@;
put 'b21hbiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIg'@;
put 'dHlwZWZhY2U9Ik55YWxhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1y'@;
put 'IiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i'@;
put 'Q2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+'@;
put 'JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlw'@;
put 'ZWZhY2U9Ik1hbmdhbCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIg'@;
put 'dHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9u'@;
put 'dCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+'@;
put 'JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2Vv'@;
put 'ciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLExbTC5sZW5ndGhdPSI8L2E6bWFqb3JGb250PiIsTFtMLmxlbmd0aF09IjxhOm1pbm9yRm9udD4iLExbTC5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FsaWJyaSIvPicsTFtMLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLExbTC5s'@;
put 'ZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNl'@;
put 'PSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIv'@;
put 'PicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IkFyaWFsIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEi'@;
put 'Lz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0'@;
put 'aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJS'@;
put 'YWF2aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9'@;
put 'IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPics'@;
put 'TFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIv'@;
put 'PicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlw'@;
put 'ZWZhY2U9IkthcnRpa2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IkFyaWFsIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxMW0wu'@;
put 'bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxMW0wubGVuZ3RoXT0iPC9hOm1pbm9yRm9udD4iLExbTC5sZW5ndGhdPSI8L2E6Zm9udFNjaGVtZT4iLExbTC5sZW5ndGhdPSc8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLExbTC5sZW5ndGhd'@;
put 'PSI8YTpmaWxsU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLExbTC5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsTFtMLmxlbmd0aF09IjxhOmdzTHN0PiIsTFtMLmxlbmd0'@;
put 'aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xy'@;
put 'Ij48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1'@;
put 'MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhT'@;
put 'aGFwZT0iMSI+JyxMW0wubGVuZ3RoXT0iPGE6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjEwMDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8+PC9hOnNjaGVt'@;
put 'ZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtM'@;
put 'Lmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09IjwvYTpmaWxsU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6bG5TdHlsZUxzdD4iLExbTC5s'@;
put 'ZW5ndGhdPSc8YTpsbiB3PSI5NTI1IiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iOTUwMDAiLz48YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZp'@;
put 'bGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLExbTC5sZW5ndGhdPSc8YTpsbiB3PSIyNTQwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2'@;
put 'YWw9InNvbGlkIi8+PC9hOmxuPicsTFtMLmxlbmd0aF09JzxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6'@;
put 'bG4+JyxMW0wubGVuZ3RoXT0iPC9hOmxuU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsTFtMLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAw'@;
put 'MCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM4MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLExbTC5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsTFtMLmxlbmd0aF09Ijwv'@;
put 'YTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNy'@;
put 'Z2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsTFtMLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsTFtMLmxl'@;
put 'bmd0aF09IjxhOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xy'@;
put 'PjwvYTpvdXRlclNoZHc+JyxMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSc8YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9udCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0i'@;
put 'dGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD4nLExbTC5sZW5ndGhdPSc8YTpzcDNkPjxhOmJldmVsVCB3PSI2MzUwMCIgaD0iMjU0MDAiLz48L2E6c3AzZD4nLExbTC5sZW5ndGhdPSI8L2E6ZWZm'@;
put 'ZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09IjxhOmJnRmlsbFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxMW0wubGVuZ3RoXT0nPGE6Z3Jh'@;
put 'ZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLExbTC5sZW5ndGhdPSI8YTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpn'@;
put 'cz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjQwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQ1MDAwIi8+PGE6c2hhZGUgdmFsPSI5OTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09Jzxh'@;
put 'OmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNp'@;
put 'cmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8+PC9hOnBhdGg+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxMW0wubGVuZ3RoXT0iPGE6Z3NM'@;
put 'c3Q+IixMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjgwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVt'@;
put 'ZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjMwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0iPC9hOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUw'@;
put 'MDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUwMDAwIi8+PC9hOnBhdGg+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09IjwvYTpiZ0ZpbGxTdHlsZUxzdD4iLExbTC5sZW5ndGhdPSI8L2E6Zm10U2NoZW1lPiIsTFtMLmxlbmd0aF09IjwvYTp0aGVtZUVsZW1l'@;
put 'bnRzPiIsTFtMLmxlbmd0aF09IjxhOm9iamVjdERlZmF1bHRzPiIsTFtMLmxlbmd0aF09IjxhOnNwRGVmPiIsTFtMLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwv'@;
put 'YTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xy'@;
put 'IHZhbD0ibHQxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsTFtMLmxlbmd0aF09IjwvYTpzcERlZj4iLExbTC5sZW5ndGhdPSI8YTpsbkRlZj4iLExbTC5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVt'@;
put 'ZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlk'@;
put 'eD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLExbTC5sZW5ndGhdPSI8L2E6bG5EZWY+IixMW0wubGVuZ3RoXT0iPC9hOm9iamVjdERlZmF1bHRzPiIsTFtMLmxlbmd0aF09IjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4iLExbTC5sZW5ndGhd'@;
put 'PSI8L2E6dGhlbWU+IixMLmpvaW4oIiIpfWZ1bmN0aW9uIGpEKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKS00LFE9W1BdO3N3aXRjaChQKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOlFbMV09ZnVu'@;
put 'Y3Rpb24gVTkoeSl7dmFyIFA9e307c3dpdGNoKFAueGNsclR5cGU9eS5yZWFkX3NoaWZ0KDIpLFAublRpbnRTaGFkZT15LnJlYWRfc2hpZnQoMiksUC54Y2xyVHlwZSl7Y2FzZSAwOmNhc2UgNDp5LmwrPTQ7YnJlYWs7Y2FzZSAxOlAueGNsclZhbHVlPWZ1bmN0aW9uIHFtKHksUCl7cmV0dXJu'@;
put 'IHljKHksUCl9KHksNCk7YnJlYWs7Y2FzZSAyOlAueGNsclZhbHVlPXZtKHkpO2JyZWFrO2Nhc2UgMzpQLnhjbHJWYWx1ZT1mdW5jdGlvbiBNQyh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpfSh5KX1yZXR1cm4geS5sKz04LFB9KHkpO2JyZWFrO2Nhc2UgNjpRWzFdPWZ1bmN0aW9uIEJEKHks'@;
put 'UCl7cmV0dXJuIHljKHksUCl9KHksTCk7YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OlFbMV09eS5yZWFkX3NoaWZ0KDE9PT1MPzE6Mik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBFeHRQcm9wIHR5cGU6ICIrUCsiICIrTCl9cmV0dXJuIFF9ZnVuY3Rpb24gVUQo'@;
put 'eSxQKXtQLmZvckVhY2goZnVuY3Rpb24oTCl7c3dpdGNoKExbMF0pe2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6YnJlYWs7Y2FzZSAxMzp5LmZvbnQmJnkuZm9udC5jb2xvciYmQXJyYXkuaXNBcnJheShM'@;
put 'WzFdLnhjbHJWYWx1ZSkmJih5LmZvbnQuY29sb3IucmdiPXoxKExbMV0ueGNsclZhbHVlKSl9fSl9ZnVuY3Rpb24gZGEoeSl7cmV0dXJuIHkvOTE0NDAwKm5mfWZ1bmN0aW9uIHhDKHksUCl7dmFyIEw9e307aWYoeS5wb3MpTC54PWRhKHkucG9zLngpLEwueT1kYSh5LnBvcy55KTtlbHNle2lm'@;
put 'KCF5LmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7TC5yPXkuZnJvbS5yfHwwLEwuYz15LmZyb20uY3x8MCx5LmZyb20uY09mZiYmKEwueD1kYSh5LmZyb20uY09mZikpLHkuZnJvbS5yT2ZmJiYoTC55PWRhKHkuZnJvbS5yT2ZmKSl9aWYoeS5leHQpTC53PWRhKHkuZXh0LngpLEwuaD1k'@;
put 'YSh5LmV4dC55KTtlbHNle2lmKCF5LnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtMLkM9eS50by5jLEwuUj15LnRvLnIseS50by5jT2ZmJiYoTC5YPWRhKHkudG8uY09mZikpLHkudG8uck9mZiYmKEwuWT1kYSh5LnRvLnJPZmYpKX1yZXR1cm4gTH1mdW5jdGlvbiBzZih5LFApe3ZhciBMPXt4'@;
put 'Oi0xLHk6LTEsdzotMSxoOi0xfTtpZih5LnBvcylMLng9ZGEoeS5wb3MueCksTC55PWRhKHkucG9zLnkpO2Vsc2V7aWYoIXkuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtMLng9WTEoUCx5LmZyb20uYywiQyIpK2RhKHkuZnJvbS5jT2ZmKSxMLnk9WTEoUCx5LmZyb20uciwiUiIpK2Rh'@;
put 'KHkuZnJvbS5yT2ZmKX1pZih5LmV4dClMLnc9ZGEoeS5leHQueCksTC5oPWRhKHkuZXh0LnkpO2Vsc2V7aWYoIXkudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO0wudz1ZMShQLHkudG8uYywiQyIpK2RhKHkudG8uY09mZiktTC54LEwuaD1ZMShQLHkudG8uciwiUiIpK2RhKHkudG8uck9mZikt'@;
put 'TC55fXJldHVybiBMfWZ1bmN0aW9uIEttKHksUCl7dmFyIEw9e3I6LTEsYzotMSx4Oi0xLHk6LTEsUjotMSxDOi0xLFg6LTEsWTotMX07c3dpdGNoKHkudHlwZSl7Y2FzZSJ0d29DZWxsQW5jaG9yIjpMLnI9eS5mcm9tLnIsTC55PWRhKHkuZnJvbS5yT2ZmKSxMLlI9eS50by5yLEwuWT1kYSh5'@;
put 'LnRvLnJPZmYpLEwuYz15LmZyb20uYyxMLng9ZGEoeS5mcm9tLmNPZmYpLEwuQz15LnRvLmMsTC5YPWRhKHkudG8uY09mZik7YnJlYWs7Y2FzZSJvbmVDZWxsQW5jaG9yIjpMLnI9eS5mcm9tLnIsTC55PWRhKHkuZnJvbS5yT2ZmKTt2YXIgUT1HMihQLEwucixMLnkrZGEoeS5leHQueSkpO0wu'@;
put 'Uj1RWzBdLEwuWT1RWzFdLEwuYz15LmZyb20uYyxMLng9ZGEoeS5mcm9tLmNPZmYpO3ZhciByZT1KbShQLEwuYyxMLngrZGEoeS5leHQueCkpO0wuQz1yZVswXSxMLlg9cmVbMV07YnJlYWs7Y2FzZSJhYnNvbHV0ZUFuY2hvciI6dmFyIGdlPUcyKFAsMCxkYSh5LnBvcy55KSk7TC5yPWdlWzBd'@;
put 'LEwueT1nZVsxXTt2YXIgX2U9RzIoUCxMLnIsTC55K2RhKHkuZXh0LnkpKTtMLlI9X2VbMF0sTC5ZPV9lWzFdO3ZhciB2ZT1HMihQLDAsZGEoeS5wb3MueCkpO0wuYz12ZVswXSxMLng9dmVbMV07dmFyIFNlPUcyKFAsTC5jLEwueCtkYSh5LmV4dC54KSk7TC5DPVNlWzBdLEwuWD1TZVsxXTti'@;
put 'cmVhaztkZWZhdWx0OnRocm93ImJhZCBhbmNob3IgdHlwZSAiK3kudHlwZX1yZXR1cm4gTH1mdW5jdGlvbiBYbSh5LFApe3ZhciBMPXkudHJpbSgpLnNwbGl0KC9ccyosXHMqLyk7UFsiIXBvcyJdPXtjOitMWzBdLHg6K0xbMV0scjorTFsyXSx5OitMWzNdLEM6K0xbNF0sWDorTFs1XSxSOitM'@;
put 'WzZdLFk6K0xbN119fWZ1bmN0aW9uIEVDKHksUCxMKXt2YXIgUT0tMTtpZihudWxsIT15LlJ8fG51bGwhPXkuQylRPTA7ZWxzZXtpZihudWxsPT15Lnh8fG51bGw9PXkueXx8bnVsbD09eS53fHxudWxsPT15LmgpdGhyb3ciY2Fubm90IHBhcnNlIGFuY2hvciAiK0pTT04uc3RyaW5naWZ5KHkp'@;
put 'O1E9MSsyKiEoeS5jfHx5LnIpfWlmKFEhPVApe3N3aXRjaChQKXtjYXNlIDA6Y2FzZSAxOmlmKDMhPVEpYnJlYWs7dmFyIHJlPUptKEwseS5jfHwwLHkueHx8MCk7eS5jPXJlWzBdLHkueD1yZVsxXTt2YXIgZ2U9RzIoTCx5LnJ8fDAseS55fHwwKTt5LnI9Z2VbMF0seS55PWdlWzFdO2JyZWFr'@;
put 'O2Nhc2UgMzppZigzPT1RKWJyZWFrO3ZhciBfZT15LmN8fDAsdmU9eS54fHwwO2RlbGV0ZSB5LmMsZGVsZXRlIHkueCx5Lng9KF9lP1k0KEwsX2UpOjApK3ZlO3ZhciBTZT15LnJ8fDAsSGU9eS55fHwwO2RlbGV0ZSB5LnIsZGVsZXRlIHkueSx5Lnk9KFNlP0YzKEwsU2UpOjApK0hlO2JyZWFr'@;
put 'O2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitQfXN3aXRjaChQKXtjYXNlIDA6aWYoMD09USlicmVhazt2YXIgQmU9Sm0oTCx5LmN8fDAsKHkueHx8MCkreS53KTtkZWxldGUgeS53LHkuQz1CZVswXSx5Llg9QmVbMV07dmFyIEdlPUcyKEwseS5yfHww'@;
put 'LCh5Lnl8fDApK3kuaCk7ZGVsZXRlIHkuaCx5LlI9R2VbMF0seS5ZPUdlWzFdO2JyZWFrO2Nhc2UgMTpjYXNlIDM6aWYoMCE9USlicmVhazt2YXIgbnQ9eS5DfHwwLGR0PXkuWHx8MDtkZWxldGUgeS5DLGRlbGV0ZSB5LlgseS53PVk0KEwsbnQpK2R0LSh5LmM/WTQoTCx5LmMpOjApLSh5Lnh8'@;
put 'fDApO3ZhciBDdD15LlJ8fDAsY3Q9eS5ZfHwwO2RlbGV0ZSB5LlIsZGVsZXRlIHkuWSx5Lmg9RjMoTCxDdCkrY3QtKHkucj9GMyhMLHkucik6MCktKHkueXx8MCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1B9fX1mdW5jdGlvbiBrQyh5'@;
put 'KXt2YXIgUD1beS5jfHwwLE1hdGgucm91bmQoeS54fHwwKSx5LnJ8fDAsTWF0aC5yb3VuZCh5Lnl8fDApXTtyZXR1cm4oUD1QLmNvbmNhdCh5LmgmJnkudz9bUFswXSxNYXRoLnJvdW5kKFBbMV0reS53KSxQWzJdLE1hdGgucm91bmQoUFszXSt5LmgpXTpbeS5DfHwwLE1hdGgucm91bmQoeS5Y'@;
put 'fHwwKSx5LlJ8fDAsTWF0aC5yb3VuZCh5Lll8fDApXSkpLmpvaW4oIiwgIil9ZnVuY3Rpb24gRjMoeSxQKXtpZigheSlyZXR1cm4gMDtmb3IodmFyIEw9MDstLVA+PTA7KXt2YXIgUT0oKHlbIiFyb3dzIl18fFtdKVtQXXx8e30pLmhweDtudWxsPT1RJiYoUT0oKHlbIiFzaGVldEZvcm1hdCJd'@;
put 'fHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1RJiYoUT0yNCksTCs9UX1yZXR1cm4gTH1mdW5jdGlvbiBZNCh5LFApe2lmKCF5KXJldHVybiAwO2Zvcih2YXIgTD0wOy0tUD49MDspe3ZhciBRPSgoeVsiIWNvbHMiXXx8W10pW1BdfHx7fSkud3B4O2lmKG51bGw9PVEmJihRPSgoeVsiIXNoZWV0'@;
put 'Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PVEpe3ZhciByZT17d2NoOjguNDN9O3B1KHJlKSx5WyIhY29scyJdJiYoeVsiIWNvbHMiXVtQXT1yZSksUT1yZS53cHh9TCs9UX1yZXR1cm4gTH1mdW5jdGlvbiBZMSh5LFAsTCl7cmV0dXJuIkMiPT1MP1k0KHksUCk6RjMoeSxQKX1m'@;
put 'dW5jdGlvbiBHMih5LFAsTCl7dmFyIFE9W1AsTF07aWYoIXkpcmV0dXJuIFE7Zm9yKDs7KXt2YXIgcmU9KHlbIiFyb3dzIl18fFtdKVtRWzBdXXx8e307aWYocmUuaGlkZGVuKSsrUVswXTtlbHNle3ZhciBnZT1yZS5ocHg7aWYobnVsbD09Z2UmJihnZT0oKHlbIiFzaGVldEZvcm1hdCJdfHx7'@;
put 'fSkucm93fHx7fSkuaHB4KSxudWxsPT1nZSYmKGdlPVUxKDE1KSksUVsxXTxnZSlicmVhaztRWzBdKyssUVsxXS09Z2V9fXJldHVybiBRfWZ1bmN0aW9uIEptKHksUCxMKXt2YXIgUT1bUCxMXTtpZigheSlyZXR1cm4gUTtmb3IoOzspe3ZhciByZT0oeVsiIWNvbHMiXXx8W10pW1FbMF1dfHx7'@;
put 'fTtpZihyZS5oaWRkZW58fDA9PT1yZS53cHgpKytRWzBdO2Vsc2V7dmFyIGdlPXJlLndweDtpZihudWxsPT1nZSYmKGdlPSgoeVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PWdlKXt2YXIgX2U9e3djaDo4LjQzfTtwdShfZSkseVsiIWNvbHMiXSYmKHlbIiFjb2xz'@;
put 'Il1bUVswXV09X2UpLGdlPV9lLndweH1pZihRWzFdPGdlKWJyZWFrO1FbMF0rKyxRWzFdLT1nZX19cmV0dXJuIFF9ZnVuY3Rpb24gT3UoeSl7cmV0dXJuKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIHk/eS50b1N0cmluZygxNik6eSkpLnNsaWNlKC02KX1mdW5jdGlvbiBVZCh5LFAsTCl7'@;
put 'dmFyIFE9InN0cmluZyI9PXR5cGVvZiBQPyEhTDohIVA7InN0cmluZyIhPXR5cGVvZiBQJiYoUD0iY29sb3IiKTt2YXIgcmU9IjwiK1ArIiAiO3JldHVybiB5LmF1dG8/cmUrJ2F1dG89IjEiLz4nOnkuaW5kZXgmJm51bGw9PXkucmdiP3JlKydpbmRleGVkPSInK3kuaW5kZXgrJyIvPic6bnVs'@;
put 'bCE9eS50aGVtZT9yZSsndGhlbWU9IicreS50aGVtZSsnIicrKHkudGludD8nIHRpbnQ9IicreS50aW50KyciJzoiIikrIi8+IjpudWxsIT15LnJnYj9yZSsncmdiPSInKyhRPyJGRiI6IiIpK091KHkucmdiKSsnIi8+JzpyZSsiLz4ifWZ1bmN0aW9uIEgzKHksUCl7aWYoIXl8fG51bGw9PXku'@;
put 'cmdiKXJldHVybiBQO2Zvcih2YXIgTD0oIjAwMDAwMCIreS5yZ2IudG9TdHJpbmcoMTYpKS5zbGljZSgtNiksUT1bTC5zbGljZSgwLDIpLEwuc2xpY2UoMiw0KSxMLnNsaWNlKDQsNildLm1hcChmdW5jdGlvbihfZSl7cmV0dXJuIHBhcnNlSW50KF9lLDE2KX0pLHJlPTA7cmU8Q3IubGVuZ3Ro'@;
put 'OysrcmUpe3ZhciBnZT1DcltyZV07aWYoZ2VbMF09PVFbMF0mJmdlWzFdPT1RWzFdJiZnZVsyXT09UVsyXSlyZXR1cm4gcmV9cmV0dXJuIENyLmxlbmd0aDw2ND8oQ3IucHVzaChbUVswXSxRWzFdLFFbMl1dKSxDci5sZW5ndGgtMSk6UH1mdW5jdGlvbiBXMSh5KXt2YXIgUD1bIiIsIiIsIiJd'@;
put 'O2lmKCF5KXJldHVybltdO3ZhciBMPSIiLFE9eSYmeS5zP2Z1bmN0aW9uIFpEKHkpe3ZhciBQPVsiIiwiIl07aWYoIXkpcmV0dXJuIFA7aWYoeS5zeiYmKFBbMF0rPSImIit5LnN6LFBbMV09IiYxMiIrUFsxXSkseS5uYW1lJiYoUFswXSs9JyYiJyt5Lm5hbWUrJyxSZWd1bGFyIicsUFsxXT0n'@;
put 'JiItLFJlZ3VsYXIiJytQWzFdKSx5LmJvbGQmJihQWzBdKz0iJkIiLFBbMV09IiZCIitQWzFdKSx5LnVuZGVybGluZSl7dmFyIEw9Mj09eS51bmRlcmxpbmU/IiZFIjoiJlUiO1BbMF0rPUwsUFsxXT1MK1BbMV19cmV0dXJuIHkuaXRhbGljJiYoUFswXSs9IiZJIixQWzFdPSImSSIrUFsxXSks'@;
put 'eS5jb2xvciYmbnVsbCE9eS5jb2xvci5yZ2ImJihQWzBdKz0iJksiK091KHkuY29sb3IucmdiKSxQWzFdKz0iJkswMDAwMDAiKSx5LnN0cmlrZSYmKFBbMF0rPSImUyIsUFsxXT0iJlMiK1BbMV0pLCJzdXBlciI9PXkudmFsaWduJiYoUFswXSs9IiZYIixQWzFdPSImWCIrUFsxXSksInN1YiI9'@;
put 'PXkudmFsaWduJiYoUFswXSs9IiZZIixQWzFdPSImWSIrUFsxXSksUH0oeS5zKTpbIiIsIiJdO3JldHVybiJzdHJpbmciPT10eXBlb2YgeT9beSx5LHldOm51bGwhPXkuZmlyc3R8fG51bGwhPXkuZXZlbnx8bnVsbCE9eS5vZGQ/KG51bGwhPXkub2RkJiYoUFswXT1XMSh5Lm9kZClbMF0pLHZv'@;
put 'aWQgMD09PXkuZmlyc3QmJlBbMF0mJihQWzFdPVBbMF0pLG51bGwhPXkuZmlyc3QmJihQWzFdPVcxKHkuZmlyc3QpWzBdKSxudWxsIT15LmV2ZW4mJihQWzJdPVcxKHkuZXZlbilbMF0pLFApOnkubGVmdHx8eS5jZW50ZXJ8fHkucmlnaHQ/KHkubGVmdCYmKEwrPSImTCIrVzEoeS5sZWZ0KVsw'@;
put 'XSkseS5jZW50ZXImJihMKz0iJkMiK1cxKHkuY2VudGVyKVswXSkseS5yaWdodCYmKEwrPSImUiIrVzEoeS5yaWdodClbMF0pLFtMLEwsTF0pOm51bGwhPXkudj9bTD1RWzBdK3kudi5yZXBsYWNlKC8mL2csIiYmIikrUVsxXSxMLExdOm51bGwhPXkudz9bTD1RWzBdK3kudytRWzFdLEwsTF06'@;
put 'QXJyYXkuaXNBcnJheSh5LlIpPyh5LlIuZm9yRWFjaChmdW5jdGlvbihyZSl7TCs9VzEocmUpWzBdfSksW0wsTCxMXSk6W119dmFyIFFtPXsxOiJMZXR0ZXIiLDM6IlRhYmxvaWQiLDU6IkxlZ2FsIiw3OiJFeGVjdXRpdmUiLDg6IkEzIiw5OiJBNCIsMTE6IkE1IiwxMjoiQjQiLDEzOiJCNSIs'@;
put 'MTQ6IkZvbGlvIiwyMDoiRW52ZWxvcGUiLDM3OiJNb25hcmNoIiw3MDoiQTYifSxaOT1iZShRbSk7SGkuQ09OTj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb25uZWN0aW9ucyI7dmFyIHQ2PVNyKCJleHRlcm5h'@;
put 'bExpbmsiLG51bGwse3htbG5zOmlzLm1haW5bMF19KTtIaS5JTUc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaW1hZ2UiLEhpLkRSQVc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VE'@;
put 'b2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZHJhd2luZyI7dmFyIFlEPXt0OiJ0b3AiLGN0cjoiY2VudGVyIixiOiJib3R0b20iLGp1c3Q6InRvcCIsZGlzdDoidG9wIn0sTEM9e2N0cjoiY2VudGVyIixkaXN0OiJjZW50ZXIiLGp1c3Q6ImNlbnRlciIsanVzdExvdzoiY2VudGVyIixsOiJs'@;
put 'ZWZ0IixyOiJyaWdodCIsdGhhaURpc3Q6ImNlbnRlciJ9O2Z1bmN0aW9uIFJDKCl7dmFyIHk9W0JuXTtyZXR1cm4geS5wdXNoKCc8eGRyOndzRHIgeG1sbnM6eGRyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvc3ByZWFkc2hlZXREcmF3aW5nIiB4'@;
put 'bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIvPicpLHkuam9pbigiIil9ZnVuY3Rpb24gT0MoeSl7dmFyIEwsUD15WyIhZGF0YSJdO3JldHVybiJiYXNlNjQiPT09eVsiIWRhdGF0eXBlIl0/KChMPVAubWF0Y2goL15kYXRhOi4q'@;
put 'LC8pKSYmKFA9UC5zbGljZShMWzBdLmxlbmd0aCkpLHNlLmRlY29kZShQKSk6UH1IaS5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7dmFyIE4zPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVte'@;
put 'Pl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIHFEKHksUCxMLFEpe3ZhciByZT1bMjE2MDAsMjE2MDBdLGdlPVsibTAsMGwwIixyZVsxXSxyZVswXSxyZVsxXSxyZVswXSwiMHhlIl0uam9pbigiLCIpLF9lPVtTcigieG1sIixudWxsLHsieG1sbnM6diI6V2ku'@;
put 'diwieG1sbnM6byI6V2kubywieG1sbnM6eCI6V2kueCwieG1sbnM6bXYiOldpLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLFNyKCJvOnNoYXBlbGF5b3V0IixTcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0sdmU9MTAyNCp5LFNlPUx8fFtdO1Nl'@;
put 'Lmxlbmd0aD4wJiZfZS5wdXNoKFNyKCJ2OnNoYXBldHlwZSIsW1NyKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxTcigidjpwYXRoIixudWxsLHtzaGFkb3dvazoiZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6ImYiLCJvOmNvbm5lY3R0eXBlIjoi'@;
put 'cmVjdCJ9KSxTcigibzpsb2NrIixudWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTpyZS5qb2luKCIsIiksIm86c3B0IjoyMDEscGF0aDpnZX0pKSxTZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXsrK3ZlLF9lPV9l'@;
put 'LmNvbmNhdChmdW5jdGlvbiBGQyh5LFApe3ZhciBMPXtpZDoiX3gwMDAwX3MiK1AsdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGlnaHQifTsoIlJhZGlvIj09eVsiIXR5cGUiXXx8IkNoZWNrYm94Ij09eVsiIXR5cGUiXXx8Ikxpc3QiPT15WyIhdHlwZSJdfHwi'@;
put 'RHJvcCI9PXlbIiF0eXBlIl0pJiYoTC5zdHJva2VkPSJmIiksIkxhYmVsIj09eVsiIXR5cGUiXSYmKEwuZmlsbGVkPSJmIik7dmFyIFE9IiI7eS50JiZQQ1t5WyIhdHlwZSJdXSYmKFE9UENbeVsiIXR5cGUiXV0ucmVwbGFjZSgvIyMjIy8sSHIoeS50KSkpO3ZhciByZT1bXTtyZXR1cm4geS5t'@;
put 'YWNybyYmcmUucHVzaChmcygieDpGbWxhTWFjcm8iLHkubWFjcm8pKSx5LmxpbmsmJnJlLnB1c2goZnMoIng6Rm1sYUxpbmsiLHkubGluaykpLHkudmFsJiZyZS5wdXNoKGZzKCJSYWRpbyI9PXlbIiF0eXBlIl18fCJDaGVja2JveCI9PXlbIiF0eXBlIl0/Ing6Q2hlY2tlZCI6Ing6VmFsIixT'@;
put 'dHJpbmcoeS52YWwpKSkseS5yZWYmJnJlLnB1c2goZnMoIng6Rm1sYVJhbmdlIix5LnJlZikpLHkuc2VsJiYiTGlzdCI9PXlbIiF0eXBlIl0mJnJlLnB1c2goZnMoIng6U2VsVHlwZSIseS5zZWwpKSx5Lm1pbiYmcmUucHVzaChmcygieDpNaW4iLFN0cmluZyh5Lm1pbikpKSx5Lm1heCYmcmUu'@;
put 'cHVzaChmcygieDpNYXgiLFN0cmluZyh5Lm1heCkpKSx5LnN0ZXAmJnJlLnB1c2goZnMoIng6SW5jIixTdHJpbmcoeS5zdGVwKSkpLHkucGFnZSYmcmUucHVzaChmcygieDpQYWdlIixTdHJpbmcoeS5wYWdlKSkpLFtdLmNvbmNhdChbIjx2OnNoYXBlIitQYShMKSsiPiJdKS5jb25jYXQoRzlb'@;
put 'eVsiIXR5cGUiXV18fFtdKS5jb25jYXQoW1FdKS5jb25jYXQoWyc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9IicreVsiIXR5cGUiXSsnIj4nLGZzKCJ4OkFuY2hvciIsa0MoeVsiIXBvcyJdKSksZnMoIng6UHJpbnRPYmplY3QiLCJGYWxzZSIpXSkuY29uY2F0KHJlKS5jb25jYXQoTFpbeVsi'@;
put 'IXR5cGUiXV18fFtdKS5jb25jYXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShCZSx2ZSkpfSk7dmFyIEhlPVB8fFtdO3JldHVybiBIZS5sZW5ndGg+MCYmX2UucHVzaChTcigidjpzaGFwZXR5cGUiLFtTcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSks'@;
put 'U3IoInY6cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTpyZS5qb2luKCIsIiksIm86c3B0IjoyMDIscGF0aDpnZX0pKSxIZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXsrK3Zl'@;
put 'LF9lPV9lLmNvbmNhdChmdW5jdGlvbiBLNCh5LFAsTCl7dmFyIFE9c3MoeVswXSkscmU9eVsxXS5maWxsfHx7fTt5WzFdLnMmJihyZT17dHlwZTp5WzFdLnMucGF0dGVyblR5cGV8fCJzb2xpZCJ9LHlbMV0ucy5mZ0NvbG9yJiYocmUuY29sb3IyPXJlLmNvbG9yMT0iIyIrT3UoeVsxXS5zLmZn'@;
put 'Q29sb3IucmdiKSkseVsxXS5zLmJnQ29sb3ImJihyZS5jb2xvcjI9IiMiK091KHlbMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgZ2U9e2NvbG9yMjpyZS5jb2xvcjJ8fCIjQkVGRjgyIix0eXBlOnJlLnR5cGV8fCJncmFkaWVudCJ9OyJncmFkaWVudCI9PWdlLnR5cGUmJihnZS5hbmdsZT0iLTE4'@;
put 'MCIpO3ZhciBfZT0iZ3JhZGllbnQiPT1nZS50eXBlP1NyKCJvOmZpbGwiLG51bGwse3R5cGU6ImdyYWRpZW50VW5zY2FsZWQiLCJ2OmV4dCI6InZpZXcifSk6bnVsbCx2ZT1TcigidjpmaWxsIixfZSxnZSksU2U9e307eVsxXS5zaGFkb3cmJih5WzFdLnNoYWRvdy5jb2xvciYmKFNlLmNvbG9y'@;
put 'PXlbMV0uc2hhZG93LmNvbG9yKSx5WzFdLnNoYWRvdy5vbiYmKFNlLm9uPXlbMV0uc2hhZG93Lm9uKSksU2Uub2JzY3VyZWQ9InQiO3ZhciBIZT0hMCxCZT0hMCxHZT15WzFdWyIhcG9zIl0/b24oeVsxXVsiIXBvcyJdKTpudWxsO3JldHVybiBHZSYmKEJlPW51bGw9PUdlLlImJm51bGw9PUdl'@;
put 'LkMmJm51bGw9PUdlLlgmJm51bGw9PUdlLlksSGU9IUdlLnImJiFHZS5jLEVDKEdlLDAsTCkpLFsiPHY6c2hhcGUiK1BhKHtpZDoiX3gwMDAwX3MiK1AsdHlwZToiI194MDAwMF90MjAyIixzdHlsZToicG9zaXRpb246YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OjgwcHQ7bWFyZ2luLXRvcDo1cHQ7'@;
put 'd2lkdGg6MTA0cHQ7aGVpZ2h0OjY0cHQ7ei1pbmRleDoxMCIrKHlbMV0uaGlkZGVuPyI7dmlzaWJpbGl0eTpoaWRkZW4iOiIiKSxmaWxsY29sb3I6cmUuY29sb3IxfHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6KHlbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+Iix2ZSxTcigi'@;
put 'djpzaGFkb3ciLG51bGwsU2UpLFNyKCJ2OnBhdGgiLG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxIZT8iPHg6'@;
put 'TW92ZVdpdGhDZWxscy8+IjoiIixCZT8iPHg6U2l6ZVdpdGhDZWxscy8+IjoiIixmcygieDpBbmNob3IiLEdlP2tDKEdlKTp5WzFdLnJhd2FuY2hvcnx8W1EuYysxLDAsUS5yKzEsMCxRLmMrMywyMCxRLnIrNSwyMF0uam9pbigiLCIpKSxmcygieDpBdXRvRmlsbCIsIkZhbHNlIiksZnMoIng6'@;
put 'Um93IixTdHJpbmcoUS5yKSksZnMoIng6Q29sdW1uIixTdHJpbmcoUS5jKSkseVsxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXX0oQmUsdmUsUSkpfSksX2UucHVzaCgiPC94bWw+IiksX2Uuam9pbigiIil9dmFyIExaPXtCdXR0b246'@;
put 'WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9G'@;
put 'aWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJlbDpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0'@;
put 'b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwv'@;
put 'eDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwv'@;
put 'eDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5Db21ibzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExpc3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8'@;
put 'eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4xPC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8'@;
put 'eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jpei8+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxQQz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0'@;
put 'LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0nQ2FsaWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYg'@;
put 'c3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmds'@;
put 'ZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6'@;
put 'YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9'@;
put 'J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6'@;
put 'ImRhZnVxIn0sRzk9e0J1dHRvbjpbJzx2OmZpbGwgY29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJv'@;
put 'cDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xs'@;
put 'OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4'@;
put 'dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxDaGVja2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIG42KHksUCxMLFEpe3ZhciByZT17'@;
put 'IiFpZCI6e319LGdlPVtTcigieG1sIixudWxsLHsieG1sbnM6diI6V2kudiwieG1sbnM6byI6V2kubywieG1sbnM6eCI6V2kueH0pLnJlcGxhY2UoL1wvPi8sIj4iKSxTcigibzpzaGFwZWxheW91dCIsU3IoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQi'@;
put 'OiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9p'@;
put 'bnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+JywnPHY6ZiBlcW49InN1bSAwIDAgQDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVx'@;
put 'bj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYgZXFuPSJwcm9kIEA2IDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4n'@;
put 'LCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8L3Y6Zm9ybXVsYXM+IiwnPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQi'@;
put 'IG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0sX2U9MTtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24odmUpe1FbdmVdJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVh'@;
put 'Y2goZnVuY3Rpb24oU2Upe1FbdmVdW1NlXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtpZihBcnJheS5pc0FycmF5KFFbdmVdW1NlXVtIZV0pKWZvcih2YXIgQmU9MDtCZTxRW3ZlXVtTZV1bSGVdLmxlbmd0aDsrK0JlKWlmKFFbdmVdW1NlXVtIZV1b'@;
put 'QmVdKXt2YXIgR2U9UVt2ZV1bU2VdW0hlXVtCZV07aWYoInJlbW90ZSI9PUdlWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9vdGVyIjtmb3IoO21uKHksInhsL21lZGlhL2ltYWdlIitfZSsiLmpwZyIpOykrK19lO3kuZmlsZSgieGwv'@;
put 'bWVkaWEvaW1hZ2UiK19lKyIuanBnIixPQyhHZSkse2JpbmFyeTohMH0pLHpvKHJlLC0xLCIuLi9tZWRpYS9pbWFnZSIrX2UrIi5qcGciLEhpLklNRyk7dmFyIG50PSJfeDAwMDBfcyIrKDEwMjUrR2UuX2NudCksZHQ9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRv'@;
put 'cDowO3otaW5kZXg6IisoR2UuX2NudCsxKSsiOyI7ZHQrPSJ3aWR0aDoiK0dlWyIhcG9zIl0udysicHg7IixkdCs9ImhlaWdodDoiK0dlWyIhcG9zIl0uaCsicHg7Ijt2YXIgQ3Q9SGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT1T'@;
put 'ZSYmKEN0Kz1TZS50b1VwcGVyQ2FzZSgpKSxRW3ZlXVtTZV1bSGVdLmxlbmd0aD4xJiYoQ3QrPUJlKSxnZS5wdXNoKFNyKCJ2OnNoYXBlIixbJzx2OmltYWdlZGF0YSBvOnJlbGlkPSJySWQnKyhHZS5fY250KzEpKyciIG86dGl0bGU9InNoZWV0anMiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0'@;
put 'IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtpZDpDdCwibzpzcGlkIjpudCx0eXBlOiIjX3gwMDAwX3Q3NSIsc3R5bGU6ZHR9KSl9fSl9KX0pLGdlLnB1c2goIjwveG1sPiIpLHkuZmlsZSgieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrTCsiSEYudm1sIixnZS5qb2luKCIiKSkseS5maWxl'@;
put 'KCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitMKyJIRi52bWwucmVscyIsWGEocmUpKX1IaS5DTU5UPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIjt2YXIgTkM9U3IoImNvbW1lbnRzIixu'@;
put 'dWxsLHt4bWxuczppcy5tYWluWzBdfSk7ZnVuY3Rpb24gVkMoeSl7dmFyIFA9W0JuLE5DXSxMPVtdO3JldHVybiBQLnB1c2goIjxhdXRob3JzPiIpLHkuZm9yRWFjaChmdW5jdGlvbihRKXtRWzFdLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBnZT1IcihyZS5hKTtMLmluZGV4T2YoZ2UpPi0x'@;
put 'fHwoTC5wdXNoKGdlKSxQLnB1c2goIjxhdXRob3I+IitnZSsiPC9hdXRob3I+IikpfSl9KSxQLnB1c2goIjwvYXV0aG9ycz4iKSxQLnB1c2goIjxjb21tZW50TGlzdD4iKSx5LmZvckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtQLnB1c2goJzxjb21tZW50IHJl'@;
put 'Zj0iJytRWzBdKyciIGF1dGhvcklkPSInK0wuaW5kZXhPZihIcihyZS5hKSkrJyI+PHRleHQ+JyksUC5wdXNoKHJlLlI/SmgocmUuUik6ZnMoInQiLG51bGw9PXJlLnQ/IiI6SHIocmUudCkpKSxQLnB1c2goIjwvdGV4dD48L2NvbW1lbnQ+Iil9KX0pLFAucHVzaCgiPC9jb21tZW50TGlzdD4i'@;
put 'KSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvY29tbWVudHM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9dmFyIFhEPUNjO2Z1bmN0aW9uIGVJKHkpe3ZhciBQPXdjKCksTD1bXTtyZXR1cm4gdWkoUCwiQnJ0QmVnaW5Db21tZW50cyIpLHVpKFAsIkJydEJl'@;
put 'Z2luQ29tbWVudEF1dGhvcnMiKSx5LmZvckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtMLmluZGV4T2YocmUuYSk+LTF8fChMLnB1c2gocmUuYS5zbGljZSgwLDU0KSksdWkoUCwiQnJ0Q29tbWVudEF1dGhvciIsZnVuY3Rpb24gSkQoeSl7cmV0dXJuIHJjKHku'@;
put 'c2xpY2UoMCw1NCkpfShyZS5hKSkpfSl9KSx1aShQLCJCcnRFbmRDb21tZW50QXV0aG9ycyIpLHVpKFAsIkJydEJlZ2luQ29tbWVudExpc3QiKSx5LmZvckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtyZS5pYXV0aG9yPUwuaW5kZXhPZihyZS5hKTt2YXIgZ2U9'@;
put 'e3M6c3MoUVswXSksZTpzcyhRWzBdKX07dWkoUCwiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiBLRCh5LFApe3JldHVybiBudWxsPT1QJiYoUD1wcigzNikpLFAud3JpdGVfc2hpZnQoNCx5WzFdLmlhdXRob3IpLEQxKHlbMF0sUCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQo'@;
put 'NCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFB9KFtnZSxyZV0pKSxyZS50JiZyZS50Lmxlbmd0aD4wJiZ1aShQLCJCcnRDb21tZW50VGV4dCIsZnVuY3Rpb24gYXIoeSxQKXt2YXIgTD0hMTtyZXR1cm4gbnVsbD09UCYmKEw9ITAsUD1wcigyMys0KnkudC5sZW5n'@;
put 'dGgpKSxQLndyaXRlX3NoaWZ0KDEsMSkscmMoeS50LFApLFAud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBrZCh5LFApe1B8fChQPXByKDQpKSxQLndyaXRlX3NoaWZ0KDIseS5pY2h8fDApLFAud3JpdGVfc2hpZnQoMix5LmlmbnR8fDApfSh7aWNoOjAsaWZudDowfSxQKSxMP1Auc2xpY2Uo'@;
put 'MCxQLmwpOlB9KHJlKSksdWkoUCwiQnJ0RW5kQ29tbWVudCIpLGRlbGV0ZSByZS5pYXV0aG9yfSl9KSx1aShQLCJCcnRFbmRDb21tZW50TGlzdCIpLHVpKFAsIkJydEVuZENvbW1lbnRzIiksUC5lbmQoKX12YXIgJDI9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsUlo9'@;
put 'WyJ4bHNiIiwieGxzbSIsInhsYW0iLCJiaWZmOCIsInhsYSJdO0hpLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixIaS5NUz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZp'@;
put 'Y2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCI7dmFyIGFmPWZ1bmN0aW9uKCl7dmFyIHk9LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxbPy0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyxQPXtyOjAsYzowfTtmdW5jdGlvbiBMKFEs'@;
put 'cmUsZ2UsX2Upe3ZhciB2ZT0hMSxTZT0hMTswPT1nZS5sZW5ndGg/U2U9ITA6IlsiPT1nZS5jaGFyQXQoMCkmJihTZT0hMCxnZT1nZS5zbGljZSgxLC0xKSksMD09X2UubGVuZ3RoP3ZlPSEwOiJbIj09X2UuY2hhckF0KDApJiYodmU9ITAsX2U9X2Uuc2xpY2UoMSwtMSkpO3ZhciBIZT1nZS5s'@;
put 'ZW5ndGg+MD8wfHBhcnNlSW50KGdlLDEwKTowLEJlPV9lLmxlbmd0aD4wPzB8cGFyc2VJbnQoX2UsMTApOjA7cmV0dXJuIHZlP0JlKz1QLmM6LS1CZSxTZT9IZSs9UC5yOi0tSGUscmUrKHZlPyIiOiIkIikrTnMoQmUpKyhTZT8iIjoiJCIpK0hzKEhlKX1yZXR1cm4gZnVuY3Rpb24ocmUsZ2Up'@;
put 'e3JldHVybiBQPWdlLHJlLnJlcGxhY2UoeSxMKX19KCkscTk9LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxk'@;
put 'fDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSzk9ZnVuY3Rpb24oUCxMKXtyZXR1cm4gUC5yZXBsYWNlKHE5LGZ1bmN0aW9uKFEscmUsZ2UsX2UsdmUsU2Upe3ZhciBIZT1qaChfZSktKGdlPzA6TC5jKSxCZT1CMChTZSktKHZlPzA6TC5yKTtyZXR1cm4g'@;
put 'cmUrIlIiKygwPT1CZT8iIjp2ZT9CZSsxOiJbIitCZSsiXSIpKyJDIisoMD09SGU/IiI6Z2U/SGUrMToiWyIrSGUrIl0iKX0pfTtmdW5jdGlvbiBqQyh5LFApe3JldHVybiB5LnJlcGxhY2UocTksZnVuY3Rpb24oTCxRLHJlLGdlLF9lLHZlKXtyZXR1cm4gUSsoIiQiPT1yZT9yZStnZTpOcyhq'@;
put 'aChnZSkrUC5jKSkrKCIkIj09X2U/X2UrdmU6SHMoQjAodmUpK1AucikpfSkucmVwbGFjZSgvKFxkKyk6KFxkKykvZyxmdW5jdGlvbihMLFEscmUpe3JldHVybiBIcyhCMChRKStQLnIpKyI6IitIcyhCMChyZSkrUC5yKX0pfWZ1bmN0aW9uIG5JKHksUCxMKXt2YXIgcmU9V3MoUCkucyxnZT1z'@;
put 'cyhMKTtyZXR1cm4gakMoeSx7cjpnZS5yLXJlLnIsYzpnZS5jLXJlLmN9KX1mdW5jdGlvbiBHMSh5KXtyZXR1cm4geS5yZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIEJhKHkpe3kubCs9MX1mdW5jdGlvbiBaZCh5LFApe3ZhciBMPXkucmVhZF9zaGlmdCgxPT1QPzE6Mik7cmV0dXJu'@;
put 'WzE2MzgzJkwsTD4+MTQmMSxMPj4xNSYxXX1mdW5jdGlvbiBKOSh5LFAsTCl7dmFyIFE9MjtpZihMKXtpZihMLmJpZmY+PTImJkwuYmlmZjw9NSlyZXR1cm4gUTkoeSk7MTI9PUwuYmlmZiYmKFE9NCl9dmFyIHJlPXkucmVhZF9zaGlmdChRKSxnZT15LnJlYWRfc2hpZnQoUSksX2U9WmQoeSwy'@;
put 'KSx2ZT1aZCh5LDIpO3JldHVybntzOntyOnJlLGM6X2VbMF0sY1JlbDpfZVsxXSxyUmVsOl9lWzJdfSxlOntyOmdlLGM6dmVbMF0sY1JlbDp2ZVsxXSxyUmVsOnZlWzJdfX19ZnVuY3Rpb24gUTkoeSl7dmFyIFA9WmQoeSwyKSxMPVpkKHksMiksUT15LnJlYWRfc2hpZnQoMSkscmU9eS5yZWFk'@;
put 'X3NoaWZ0KDEpO3JldHVybntzOntyOlBbMF0sYzpRLGNSZWw6UFsxXSxyUmVsOlBbMl19LGU6e3I6TFswXSxjOnJlLGNSZWw6TFsxXSxyUmVsOkxbMl19fX1mdW5jdGlvbiBySSh5LFAsTCl7aWYoTCYmTC5iaWZmPj0yJiZMLmJpZmY8PTUpcmV0dXJuIGZ1bmN0aW9uIFZaKHkpe3ZhciBQPVpk'@;
put 'KHksMiksTD15LnJlYWRfc2hpZnQoMSk7cmV0dXJue3I6UFswXSxjOkwsY1JlbDpQWzFdLHJSZWw6UFsyXX19KHkpO3ZhciBRPXkucmVhZF9zaGlmdChMJiYxMj09TC5iaWZmPzQ6MikscmU9WmQoeSwyKTtyZXR1cm57cjpRLGM6cmVbMF0sY1JlbDpyZVsxXSxyUmVsOnJlWzJdfX1mdW5jdGlv'@;
put 'biBldih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJue3I6UCxjOjI1NSZMLGZRdW90ZWQ6ISEoMTYzODQmTCksY1JlbDpMPj4xNSxyUmVsOkw+PjE1fX1mdW5jdGlvbiBxMih5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKV19'@;
put 'ZnVuY3Rpb24gJEMoeSxQKXt2YXIgTD1beS5yZWFkX3NoaWZ0KDEpXTtpZigxMj09UClzd2l0Y2goTFswXSl7Y2FzZSAyOkxbMF09NDticmVhaztjYXNlIDQ6TFswXT0xNjticmVhaztjYXNlIDA6TFswXT0xO2JyZWFrO2Nhc2UgMTpMWzBdPTJ9c3dpdGNoKExbMF0pe2Nhc2UgNDpMWzFdPVNv'@;
put 'KHksMSk/IlRSVUUiOiJGQUxTRSIsMTIhPVAmJih5LmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjpMWzFdPVFvW3lbeS5sXV0seS5sKz0xMj09UD80Ojg7YnJlYWs7Y2FzZSAwOnkubCs9ODticmVhaztjYXNlIDE6TFsxXT1tYSh5KTticmVhaztjYXNlIDI6TFsxXT1WMih5LDAse2JpZmY6'@;
put 'UD4wJiZQPDg/MjpQfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitMWzBdKX1yZXR1cm4gTH1mdW5jdGlvbiBpdih5LFAsTCl7Zm9yKHZhciBRPXkucmVhZF9zaGlmdCgxMj09TC5iaWZmPzQ6MikscmU9W10sZ2U9MDtnZSE9UTsrK2dlKXJlLnB1c2goKDEy'@;
put 'PT1MLmJpZmY/SmM6S2gpKHksOCkpO3JldHVybiByZX1mdW5jdGlvbiBnSSh5LFAsTCl7dmFyIFE9MCxyZT0wOzEyPT1MLmJpZmY/KFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXkucmVhZF9zaGlmdCg0KSk6KHJlPTEreS5yZWFkX3NoaWZ0KDEpLFE9MSt5LnJlYWRfc2hpZnQoMikpLEwuYmlmZj49'@;
put 'MiYmTC5iaWZmPDgmJigtLVEsMD09LS1yZSYmKHJlPTI1NikpO2Zvcih2YXIgZ2U9MCxfZT1bXTtnZSE9USYmKF9lW2dlXT1bXSk7KytnZSlmb3IodmFyIHZlPTA7dmUhPXJlOysrdmUpX2VbZ2VdW3ZlXT0kQyh5LEwuYmlmZik7cmV0dXJuIF9lfWZ1bmN0aW9uIGU1KHksUCxMKXtyZXR1cm4g'@;
put 'eS5sKz0yLFtldih5KV19ZnVuY3Rpb24gdDUoeSl7cmV0dXJuIHkubCs9NixbXX12YXIgbzY9ZTUsdkk9dDUsbHY9dDUsczY9ZTU7ZnVuY3Rpb24gcTAoeSl7cmV0dXJuIHkubCs9MixbaGwoeSksMSZ5LnJlYWRfc2hpZnQoMildfXZhciBjdj1lNSx1dj1xMCxfST10NSxiST1lNSxRQz1lNSxC'@;
put 'Mz1bIkRhdGEiLCJBbGwiLCJIZWFkZXJzIiwiPz8iLCI/RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0RhdGFUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/Q3VycmVudCJdLEdzPXsxOntuOiJQdGdFeHAiLGY6ZnVuY3Rpb24gVVooeSxQ'@;
put 'LEwpe3JldHVybiB5LmwrKyxMJiYxMj09TC5iaWZmP1t5LnJlYWRfc2hpZnQoNCwiaSIpLDBdOlt5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpXX19LDI6e246IlB0Z1RibCIsZjp5Y30sMzp7bjoiUHRnQWRkIixmOkJhfSw0OntuOiJQdGdTdWIiLGY6QmF9'@;
put 'LDU6e246IlB0Z011bCIsZjpCYX0sNjp7bjoiUHRnRGl2IixmOkJhfSw3OntuOiJQdGdQb3dlciIsZjpCYX0sODp7bjoiUHRnQ29uY2F0IixmOkJhfSw5OntuOiJQdGdMdCIsZjpCYX0sMTA6e246IlB0Z0xlIixmOkJhfSwxMTp7bjoiUHRnRXEiLGY6QmF9LDEyOntuOiJQdGdHZSIsZjpCYX0s'@;
put 'MTM6e246IlB0Z0d0IixmOkJhfSwxNDp7bjoiUHRnTmUiLGY6QmF9LDE1OntuOiJQdGdJc2VjdCIsZjpCYX0sMTY6e246IlB0Z1VuaW9uIixmOkJhfSwxNzp7bjoiUHRnUmFuZ2UiLGY6QmF9LDE4OntuOiJQdGdVcGx1cyIsZjpCYX0sMTk6e246IlB0Z1VtaW51cyIsZjpCYX0sMjA6e246IlB0'@;
put 'Z1BlcmNlbnQiLGY6QmF9LDIxOntuOiJQdGdQYXJlbiIsZjpCYX0sMjI6e246IlB0Z01pc3NBcmciLGY6QmF9LDIzOntuOiJQdGdTdHIiLGY6ZnVuY3Rpb24gR0MoeSxQLEwpe3JldHVybiB5LmwrKyxGZCh5LDAsTCl9fSwyNjp7bjoiUHRnU2hlZXQiLGY6ZnVuY3Rpb24gQ0koeSxQLEwpe3Jl'@;
put 'dHVybiB5LmwrPTUseS5sKz0yLHkubCs9Mj09TC5iaWZmPzE6NCxbIlBUR1NIRUVUIl19fSwyNzp7bjoiUHRnRW5kU2hlZXQiLGY6ZnVuY3Rpb24gZHYoeSxQLEwpe3JldHVybiB5LmwrPTI9PUwuYmlmZj80OjUsWyJQVEdFTkRTSEVFVCJdfX0sMjg6e246IlB0Z0VyciIsZjpmdW5jdGlvbiBK'@;
put 'NCh5KXtyZXR1cm4geS5sKyssUW9beS5yZWFkX3NoaWZ0KDEpXX19LDI5OntuOiJQdGdCb29sIixmOmZ1bmN0aW9uIFE0KHkpe3JldHVybiB5LmwrKywwIT09eS5yZWFkX3NoaWZ0KDEpfX0sMzA6e246IlB0Z0ludCIsZjpmdW5jdGlvbiBTaSh5KXtyZXR1cm4geS5sKysseS5yZWFkX3NoaWZ0'@;
put 'KDIpfX0sMzE6e246IlB0Z051bSIsZjpmdW5jdGlvbiBXQyh5KXtyZXR1cm4geS5sKyssbWEoeSl9fSwzMjp7bjoiUHRnQXJyYXkiLGY6ZnVuY3Rpb24gYUkoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjU7cmV0dXJuIHkubCs9Mj09TC5iaWZmPzY6MTI9PUwuYmlmZj8xNDo3LFtRXX19'@;
put 'LDMzOntuOiJQdGdGdW5jIixmOmZ1bmN0aW9uIGZJKHksUCxMKXt2YXIgUT0oOTYmeVt5LmxdKT4+NTt5LmwrPTE7dmFyIHJlPXkucmVhZF9zaGlmdChMJiZMLmJpZmY8PTM/MToyKTtyZXR1cm5bYnZbcmVdLF92W3JlXSxRXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIHBJKHks'@;
put 'UCxMKXt2YXIgUT15W3kubCsrXSxyZT15LnJlYWRfc2hpZnQoMSksZ2U9TCYmTC5iaWZmPD0zP1s4OD09UT8tMTowLHkucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gWUMoeSl7cmV0dXJuW3lbeS5sKzFdPj43LDMyNzY3JnkucmVhZF9zaGlmdCgyKV19KHkpO3JldHVybltyZSwoMD09PWdlWzBd'@;
put 'P192OmtJKVtnZVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24gcUMoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCgxKT4+PjUmMyxnZT15LnJlYWRfc2hpZnQoIUx8fEwuYmlmZj49OD80OjIpO3N3aXRjaChMLmJpZmYpe2Nhc2UgMjp5LmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2Ug'@;
put 'NDp5LmwrPTg7YnJlYWs7Y2FzZSA1OnkubCs9MTJ9cmV0dXJuW1EsMCxnZV19fSwzNjp7bjoiUHRnUmVmIixmOmZ1bmN0aW9uIFpDKHksUCxMKXt2YXIgUT0oOTYmeVt5LmxdKT4+NTtyZXR1cm4geS5sKz0xLFtRLHJJKHksMCxMKV19fSwzNzp7bjoiUHRnQXJlYSIsZjpmdW5jdGlvbiBqWih5'@;
put 'LFAsTCl7cmV0dXJuWyg5NiZ5W3kubCsrXSk+PjUsSjkoeSwwLEwpXX19LDM4OntuOiJQdGdNZW1BcmVhIixmOmZ1bmN0aW9uIFpaKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIHkubCs9TCYmMj09TC5iaWZmPzM6NCxbUSx5LnJlYWRfc2hpZnQoTCYmMj09TC5i'@;
put 'aWZmPzE6MildfX0sMzk6e246IlB0Z01lbUVyciIsZjp5Y30sNDA6e246IlB0Z01lbU5vTWVtIixmOnljfSw0MTp7bjoiUHRnTWVtRnVuYyIsZjpmdW5jdGlvbiBzdih5LFAsTCl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKT4+PjUmMyx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0s'@;
put 'NDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiBtSSh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiB5LmwrPTQsTC5iaWZmPDgmJnkubC0tLDEyPT1MLmJpZmYmJih5LmwrPTIpLFtRXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uIGlJKHksUCxMKXt2'@;
put 'YXIgUT0oOTYmeVt5LmwrK10pPj41O3JldHVybiB5LmwrPUwmJkwuYmlmZj44PzEyOkwuYmlmZjw4PzY6OCxbUV19fSw0NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlvbiBkSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sXSk+PjU7eS5sKz0xO3ZhciByZT1mdW5jdGlvbiB0dih5LFAsTCl7dmFyIFE9'@;
put 'TCYmTC5iaWZmP0wuYmlmZjo4O2lmKFE+PTImJlE8PTUpcmV0dXJuIGZ1bmN0aW9uIEJaKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgxKSxRPSgzMjc2OCZQKT4+MTUscmU9KDE2Mzg0JlApPj4xNDtyZXR1cm4gUCY9MTYzODMsMT09USYmUD49ODE5MiYmKFAtPTE2'@;
put 'Mzg0KSwxPT1yZSYmTD49MTI4JiYoTC09MjU2KSx7cjpQLGM6TCxjUmVsOnJlLHJSZWw6UX19KHkpO3ZhciByZT15LnJlYWRfc2hpZnQoUT49MTI/NDoyKSxnZT15LnJlYWRfc2hpZnQoMiksX2U9KDE2Mzg0JmdlKT4+MTQsdmU9KDMyNzY4JmdlKT4+MTU7aWYoZ2UmPTE2MzgzLDE9PXZlKWZv'@;
put 'cig7cmU+NTI0Mjg3OylyZS09MTA0ODU3NjtpZigxPT1fZSlmb3IoO2dlPjgxOTE7KWdlLT0xNjM4NDtyZXR1cm57cjpyZSxjOmdlLGNSZWw6X2UsclJlbDp2ZX19KHksMCxMKTtyZXR1cm5bUSxyZV19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gc0koeSxQLEwpe3ZhciBRPSg5NiZ5'@;
put 'W3kubCsrXSk+PjUscmU9ZnVuY3Rpb24gTlooeSxQLEwpe2lmKEwuYmlmZjw4KXJldHVybiBROSh5KTt2YXIgUT15LnJlYWRfc2hpZnQoMTI9PUwuYmlmZj80OjIpLHJlPXkucmVhZF9zaGlmdCgxMj09TC5iaWZmPzQ6MiksZ2U9WmQoeSwyKSxfZT1aZCh5LDIpO3JldHVybntzOntyOlEsYzpn'@;
put 'ZVswXSxjUmVsOmdlWzFdLHJSZWw6Z2VbMl19LGU6e3I6cmUsYzpfZVswXSxjUmVsOl9lWzFdLHJSZWw6X2VbMl19fX0oeSwwLEwpO3JldHVybltRLHJlXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBhNih5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpPj4+NSYzLHkucmVhZF9z'@;
put 'aGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIFNJKHkpe3JldHVyblt5LnJlYWRfc2hpZnQoMSk+Pj41JjMseS5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBLQyh5LFAsTCl7cmV0dXJuIDU9PUwuYmlmZj9mdW5jdGlvbiBvdih5'@;
put 'KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk+Pj41JjMsTD15LnJlYWRfc2hpZnQoMiwiaSIpO3kubCs9ODt2YXIgUT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubCs9MTIsW1AsTCxRXX0oeSk6W3kucmVhZF9zaGlmdCgxKT4+PjUmMyx5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDQpXX19'@;
put 'LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBoSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sXSk+PjU7eS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIEwmJjU9PUwuYmlmZiYmKHkubCs9MTIpLFtRLHJlLHJJKHksMCxMKV19fSw1OTp7bjoiUHRnQXJlYTNkIixmOmZ1bmN0'@;
put 'aW9uIHpDKHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41LHJlPXkucmVhZF9zaGlmdCgyLCJpIik7aWYoTCYmNT09PUwuYmlmZil5LmwrPTEyO3JldHVybltRLHJlLEo5KHksMCxMKV19fSw2MDp7bjoiUHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gYXYoeSxQLEwpe3ZhciBRPSg5NiZ5W3ku'@;
put 'bCsrXSk+PjUscmU9eS5yZWFkX3NoaWZ0KDIpLGdlPTQ7aWYoTClzd2l0Y2goTC5iaWZmKXtjYXNlIDU6Z2U9MTU7YnJlYWs7Y2FzZSAxMjpnZT02fXJldHVybiB5LmwrPWdlLFtRLHJlXX19LDYxOntuOiJQdGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gb0koeSxQLEwpe3ZhciBRPSg5NiZ5W3ku'@;
put 'bCsrXSk+PjUscmU9eS5yZWFkX3NoaWZ0KDIpLGdlPTg7aWYoTClzd2l0Y2goTC5iaWZmKXtjYXNlIDU6eS5sKz0xMixnZT02O2JyZWFrO2Nhc2UgMTI6Z2U9MTJ9cmV0dXJuIHkubCs9Z2UsW1EscmVdfX0sMjU1Ont9fSxNST17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQs'@;
put 'Njc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6'@;
put 'NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgeSBpbiBNSSlHc1t5XT1Hc1tNSVt5XV19KCk7dmFyIHRTPXsxOntuOiJQdGdFbGZMZWwiLGY6cTB9LDI6e246'@;
put 'IlB0Z0VsZlJ3IixmOmJJfSwzOntuOiJQdGdFbGZDb2wiLGY6bzZ9LDY6e246IlB0Z0VsZlJ3ViIsZjpRQ30sNzp7bjoiUHRnRWxmQ29sViIsZjpzNn0sMTA6e246IlB0Z0VsZlJhZGljYWwiLGY6Y3Z9LDExOntuOiJQdGdFbGZSYWRpY2FsUyIsZjpfSX0sMTM6e246IlB0Z0VsZkNvbFMiLGY6'@;
put 'dkl9LDE1OntuOiJQdGdFbGZDb2xTViIsZjpsdn0sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6dXZ9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIHlJKHkpe3kubCs9Mjt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoNCkscmU9eS5y'@;
put 'ZWFkX3NoaWZ0KDIpLGdlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTpQLGNvbHR5cGU6MyZMLHJ0OkIzW0w+PjImMzFdLGlkeDpRLGM6cmUsQzpnZX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0aW9uIHdJKHkpe3JldHVybiB5LmwrPTIsW3kucmVhZF9zaGlmdCg0KV19fSwyNTU6'@;
put 'e319LGw2PXswOntuOiJQdGdBdHRyTm9vcCIsZjpmdW5jdGlvbiBlUyh5KXtyZXR1cm4geS5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rpb24gVjMoeSxQLEwpe3ZhciBRPTI1NSZ5W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9TCYmMj09TC5iaWZmPzM6NCxbUV19fSwy'@;
put 'OntuOiJQdGdBdHRySWYiLGY6ZnVuY3Rpb24gbnYoeSxQLEwpe3ZhciBRPTI1NSZ5W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9MixbUSx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0sNDp7bjoiUHRnQXR0ckNob29zZSIsZjpmdW5jdGlvbiByNih5LFAsTCl7eS5sKz0yO2Zvcih2'@;
put 'YXIgUT15LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MikscmU9W10sZ2U9MDtnZTw9UTsrK2dlKXJlLnB1c2goeS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpKTtyZXR1cm4gcmV9fSw4OntuOiJQdGdBdHRyR290byIsZjpmdW5jdGlvbiBsSSh5LFAsTCl7dmFyIFE9MjU1JnlbeS5s'@;
put 'KzFdPzE6MDtyZXR1cm4geS5sKz0yLFtRLHkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKV19fSwxNjp7bjoiUHRnQXR0clN1bSIsZjpmdW5jdGlvbiB6Wih5LFAsTCl7eS5sKz1MJiYyPT1MLmJpZmY/Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6ZnVuY3Rpb24gVUMoeSl7dmFy'@;
put 'IFA9MSZ5W3kubCsxXTtyZXR1cm4geS5sKz00LFtQLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiB1SSh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDIpLHEyKHkpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gcnYoeSl7cmV0dXJuIHkucmVhZF9zaGlm'@;
put 'dCgyKSxxMih5KX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gY0koeSl7dmFyIFA9MjU1JnlbeS5sKzFdPzE6MDtyZXR1cm4geS5sKz0yLFtQLHkucmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIGozKHksUCxMLFEscmUpe2lmKFEuYmlmZjw4KXJldHVybiB5'@;
put 'Yyh5LFApO2Zvcih2YXIgZ2U9eS5sK1AsX2U9W10sdmU9MDt2ZSE9PUwubGVuZ3RoOysrdmUpc3dpdGNoKExbdmVdWzBdKXtjYXNlIlB0Z0FycmF5IjpMW3ZlXVsxXT1nSSh5LDAsUSksX2UucHVzaChMW3ZlXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpMW3ZlXVsyXT1pdih5LDAsUSks'@;
put 'X2UucHVzaChMW3ZlXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOlEmJjEyPT1RLmJpZmYmJihMW3ZlXVsxXVsxXT15LnJlYWRfc2hpZnQoNCksX2UucHVzaChMW3ZlXVsxXSkpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0'@;
put 'Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK0xbdmVdWzBdfXJldHVybiBQPWdlLXkubCwhcmUmJjAhPT1QJiZfZS5wdXNoKHljKHksUCkpLF9lfWZ1bmN0aW9uIG41KHksUCxMKXtmb3IodmFyIHJlLGdlLFE9eS5sK1AsX2U9W107USE9eS5sOylQPVEteS5sLHJlPUdzW2dlPXlbeS5s'@;
put 'XV0sKDI0PT09Z2V8fDI1PT09Z2UpJiYocmU9KDI0PT09Z2U/dFM6bDYpW3lbeS5sKzFdXSkscmUmJnJlLmY/X2UucHVzaChbcmUubixyZS5mKHksUCxMKV0pOnljKHksUCk7cmV0dXJuIF9lfWZ1bmN0aW9uIFlaKHkpe2Zvcih2YXIgUD1bXSxMPTA7TDx5Lmxlbmd0aDsrK0wpe2Zvcih2YXIg'@;
put 'UT15W0xdLHJlPVtdLGdlPTA7Z2U8US5sZW5ndGg7KytnZSl7dmFyIF9lPVFbZ2VdO3JlLnB1c2goX2U/Mj09PV9lWzBdPyciJytfZVsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOl9lWzFdOiIiKX1QLnB1c2gocmUuam9pbigiLCIpKX1yZXR1cm4gUC5qb2luKCI7Iil9bDZbMzNdPWw2WzMy'@;
put 'XTt2YXIgYzY9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LHhJPW5ldyBSZWdFeHAoL1teXHdc'@;
put 'dTRFMDAtXHU5RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiB1Nih5LFAsTCl7aWYoIXkpcmV0dXJuIlNIMzNUSlNFUlIwIjtpZihMLmJpZmY+OCYmKCF5LlhUSXx8IXkuWFRJW1BdKSlyZXR1cm4geS5TaGVldE5hbWVzW1BdO2lmKCF5LlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBR'@;
put 'PXkuWFRJW1BdO2lmKEwuYmlmZjw4KXJldHVybiBQPjFlNCYmKFAtPTY1NTM2KSxQPDAmJihQPS1QKSwwPT1QPyIiOnkuWFRJW1AtMV07aWYoIVEpcmV0dXJuIlNIMzNUSlNFUlIxIjt2YXIgcmU9IiI7aWYoTC5iaWZmPjgpc3dpdGNoKHlbUVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiByZT0t'@;
put 'MT09UVsxXT8iI1JFRiI6eS5TaGVldE5hbWVzW1FbMV1dLFFbMV09PVFbMl0/cmU6cmUrIjoiK3kuU2hlZXROYW1lc1tRWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9TC5TSUQ/eS5TaGVldE5hbWVzW0wuU0lEXToiU0gzM1RKU1NBTUUiK3lbUVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gz'@;
put 'M1RKU1NSQyIreVtRWzBdXVswXX1zd2l0Y2goeVtRWzBdXVswXVswXSl7Y2FzZSAxMDI1OnJldHVybiByZT0tMT09UVsxXT8iI1JFRiI6eS5TaGVldE5hbWVzW1FbMV1dfHwiU0gzM1RKU0VSUjMiLFFbMV09PVFbMl0/cmU6cmUrIjoiK3kuU2hlZXROYW1lc1tRWzJdXTtjYXNlIDE0ODQ5OnJl'@;
put 'dHVybiB5W1FbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihnZSl7cmV0dXJuIGdlLk5hbWV9KS5qb2luKCI7OyIpO2RlZmF1bHQ6cmV0dXJuIHlbUVswXV1bMF1bM10/KHJlPS0xPT1RWzFdPyIjUkVGIjp5W1FbMF1dWzBdWzNdW1FbMV1dfHwiU0gzM1RKU0VSUjQiLFFbMV09PVFbMl0/cmU6'@;
put 'cmUrIjoiK3lbUVswXV1bMF1bM11bUVsyXV0pOiJTSDMzVEpTRVJSMiJ9fWZ1bmN0aW9uIGNmKHksUCxMKXtyZXR1cm4gZnVuY3Rpb24gaHYoeSxQKXtpZighKHl8fFAmJlAuYmlmZjw9NSYmUC5iaWZmPj0yKSl0aHJvdyBuZXcgRXJyb3IoImVtcHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JF'@;
put 'Ri8udGVzdCh5KT95OnhJLnRlc3QoeSk/IiciK3krIiciOnl9KHU2KHksUCxMKSxMKX1mdW5jdGlvbiB4bCh5LFAsTCxRLHJlLGdlKXt2YXIgSGUsQmUsR2UsQ3QsX2U9cmUmJnJlLmJpZmZ8fDgsdmU9Z2UmJm51bGwhPVA/UDp7czp7YzowLHI6MH0sZTp7YzowLHI6MH19LFNlPVtdLG50PTAs'@;
put 'ZHQ9MCxjdD0iIjtpZigheVswXXx8IXlbMF1bMF0pcmV0dXJuIiI7Zm9yKHZhciBidD0tMSxGdD0iIixrdD0wLFR0PXlbMF0ubGVuZ3RoO2t0PFR0Oysra3Qpe3ZhciBadD15WzBdW2t0XTtzd2l0Y2goWnRbMF0pe2Nhc2UiUHRnVW1pbnVzIjpTZS5wdXNoKCItIitTZS5wb3AoKSk7YnJlYWs7'@;
put 'Y2FzZSJQdGdVcGx1cyI6U2UucHVzaCgiKyIrU2UucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6U2UucHVzaChTZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3Qi'@;
put 'OmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoSGU9U2UucG9wKCksQmU9U2UucG9wKCksYnQ+PTApe3N3aXRjaCh5WzBdW2J0XVsxXVswXSl7Y2FzZSAwOkZ0PWJuKCIgIix5WzBdW2J0XVsxXVsx'@;
put 'XSk7YnJlYWs7Y2FzZSAxOkZ0PWJuKCJcciIseVswXVtidF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoRnQ9IiIscmUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIreVswXVtidF1bMV1bMF0pfUJlKz1GdCxidD0tMX1TZS5wdXNoKEJlK2M2W1p0'@;
put 'WzBdXStIZSk7YnJlYWs7Y2FzZSJQdGdJc2VjdCI6SGU9U2UucG9wKCksQmU9U2UucG9wKCksU2UucHVzaChCZSsiICIrSGUpO2JyZWFrO2Nhc2UiUHRnVW5pb24iOkhlPVNlLnBvcCgpLEJlPVNlLnBvcCgpLFNlLnB1c2goQmUrIiwiK0hlKTticmVhaztjYXNlIlB0Z1JhbmdlIjpIZT1TZS5w'@;
put 'b3AoKSxCZT1TZS5wb3AoKSxTZS5wdXNoKEJlKyI6IitIZSk7YnJlYWs7Y2FzZSJQdGdBdHRyQ2hvb3NlIjpjYXNlIlB0Z0F0dHJHb3RvIjpjYXNlIlB0Z0F0dHJJZiI6Y2FzZSJQdGdBdHRySWZFcnJvciI6Y2FzZSJQdGdBdHRyQmF4Y2VsIjpjYXNlIlB0Z0F0dHJTZW1pIjpjYXNlIlB0Z01l'@;
put 'bUFyZWEiOmNhc2UiUHRnVGJsIjpjYXNlIlB0Z01lbUVyciI6Y2FzZSJQdGdNZW1BcmVhTiI6Y2FzZSJQdGdNZW1Ob01lbU4iOmNhc2UiUHRnQXR0ck5vb3AiOmNhc2UiUHRnU2hlZXQiOmNhc2UiUHRnRW5kU2hlZXQiOmNhc2UiUHRnTWVtRnVuYyI6Y2FzZSJQdGdNZW1Ob01lbSI6YnJlYWs7'@;
put 'Y2FzZSJQdGdSZWYiOkdlPWx1KFp0WzFdWzFdLHZlLHJlKSxTZS5wdXNoKEwyKEdlLF9lKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpHZT1MP2x1KFp0WzFdWzFdLEwscmUpOlp0WzFdWzFdLFNlLnB1c2goTDIoR2UsX2UpKTticmVhaztjYXNlIlB0Z1JlZjNkIjpudD1adFsxXVsxXSxHZT1sdSha'@;
put 'dFsxXVsyXSx2ZSxyZSksY3Q9Y2YoUSxudCxyZSksU2UucHVzaChjdCsiISIrTDIoR2UsX2UpKTticmVhaztjYXNlIlB0Z0Z1bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIEtuPVp0WzFdWzBdLHVuPVp0WzFdWzFdO0tufHwoS249MCk7dmFyIHFuPTA9PShLbiY9MTI3KT9bXTpTZS5zbGljZSgt'@;
put 'S24pO1NlLmxlbmd0aC09S24sIlVzZXIiPT09dW4mJih1bj1xbi5zaGlmdCgpKSxTZS5wdXNoKHVuKyIoIitxbi5qb2luKCIsIikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOlNlLnB1c2goWnRbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6U2Uu'@;
put 'cHVzaChTdHJpbmcoWnRbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6U2UucHVzaCgnIicrWnRbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOlNlLnB1c2goWnRbMV0pO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOkN0PWhyKFp0WzFdWzFdLEw/e3M6TH06dmUscmUp'@;
put 'LFNlLnB1c2gobWkoQ3QscmUpKTticmVhaztjYXNlIlB0Z0FyZWEiOkN0PWhyKFp0WzFdWzFdLHZlLHJlKSxTZS5wdXNoKG1pKEN0LHJlKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOm50PVp0WzFdWzFdLEN0PWhyKFp0WzFdWzJdLHZlLHJlKSxjdD1jZihRLG50LHJlKSxTZS5wdXNoKGN0KyIh'@;
put 'IittaShDdCxyZSkpO2JyZWFrO2Nhc2UiUHRnQXR0clN1bSI6U2UucHVzaCgiU1VNKCIrU2UucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciB6bj0oUS5uYW1lc3x8W10pWyhkdD1adFsxXVsyXSktMV18fChRWzBdfHxbXSlbZHRdLGtuPXpuP3puLk5hbWU6IlNIMzNUSlNOQU1F'@;
put 'IitTdHJpbmcoZHQpO2tuIGluIG81JiYoa249bzVba25dKSxTZS5wdXNoKGtuKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgdHIsZXI9WnRbMV1bMV07aWYoZHQ9WnRbMV1bMl0sIShyZS5iaWZmPD01KSl7dmFyIFpuPSIiO2lmKDE0ODQ5PT0oKFFbZXJdfHxbXSlbMF18fFtdKVswXXx8KDEw'@;
put 'MjU9PSgoUVtlcl18fFtdKVswXXx8W10pWzBdP1FbZXJdW2R0XSYmUVtlcl1bZHRdLml0YWI+MCYmKFpuPVEuU2hlZXROYW1lc1tRW2VyXVtkdF0uaXRhYi0xXSsiISIpOlpuPVEuU2hlZXROYW1lc1tkdC0xXSsiISIpLFFbZXJdJiZRW2VyXVtkdF0pWm4rPVFbZXJdW2R0XS5OYW1lO2Vsc2Ug'@;
put 'aWYoUVswXSYmUVswXVtkdF0pWm4rPVFbMF1bZHRdLk5hbWU7ZWxzZXt2YXIgc2k9KHU2KFEsZXIscmUpfHwiIikuc3BsaXQoIjs7Iik7c2lbZHQtMV0/Wm49c2lbZHQtMV06Wm4rPSJTSDMzVEpTRVJSWCJ9U2UucHVzaChabik7YnJlYWt9ZXI8MCYmKGVyPS1lciksUVtlcl0mJih0cj1RW2Vy'@;
put 'XVtkdF0pLHRyfHwodHI9e05hbWU6IlNIMzNUSlNFUlJZIn0pLFNlLnB1c2godHIuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIHhpPSIoIixMaT0iKSI7aWYoYnQ+PTApe3N3aXRjaChGdD0iIix5WzBdW2J0XVsxXVswXSl7Y2FzZSAyOnhpPWJuKCIgIix5WzBdW2J0XVsxXVsxXSkr'@;
put 'eGk7YnJlYWs7Y2FzZSAzOnhpPWJuKCJcciIseVswXVtidF1bMV1bMV0pK3hpO2JyZWFrO2Nhc2UgNDpMaT1ibigiICIseVswXVtidF1bMV1bMV0pK0xpO2JyZWFrO2Nhc2UgNTpMaT1ibigiXHIiLHlbMF1bYnRdWzFdWzFdKStMaTticmVhaztkZWZhdWx0OmlmKHJlLldURil0aHJvdyBuZXcg'@;
put 'RXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK3lbMF1bYnRdWzFdWzBdKX1idD0tMX1TZS5wdXNoKHhpK1NlLnBvcCgpK0xpKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2FzZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIzZCI6U2UucHVz'@;
put 'aCgiI1JFRiEiKTticmVhaztjYXNlIlB0Z0V4cCI6dmFyIHVyPXtjOkwuYyxyOkwucn07aWYoUS5zaGFyZWRmW2RpKEdlPXtjOlp0WzFdWzFdLHI6WnRbMV1bMF19KV0pe3ZhciBBbj1RLnNoYXJlZGZbZGkoR2UpXTtTZS5wdXNoKHhsKEFuLHZlLHVyLFEscmUpKX1lbHNle3ZhciB2cj0hMTtm'@;
put 'b3IoSGU9MDtIZSE9US5hcnJheWYubGVuZ3RoOysrSGUpaWYoIShHZS5jPChCZT1RLmFycmF5ZltIZV0pWzBdLnMuY3x8R2UuYz5CZVswXS5lLmN8fEdlLnI8QmVbMF0ucy5yfHxHZS5yPkJlWzBdLmUucikpe1NlLnB1c2goeGwoQmVbMV0sdmUsdXIsUSxyZSkpLHZyPSEwO2JyZWFrfXZyfHxT'@;
put 'ZS5wdXNoKFp0WzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpTZS5wdXNoKCJ7IitZWihadFsxXSkrIn0iKTticmVhaztjYXNlIlB0Z0F0dHJTcGFjZSI6Y2FzZSJQdGdBdHRyU3BhY2VTZW1pIjpidD1rdDticmVhaztjYXNlIlB0Z01pc3NBcmciOlNlLnB1c2goIiIpO2JyZWFrO2Nhc2UiUHRn'@;
put 'TGlzdCI6U2UucHVzaCgiVGFibGUiK1p0WzFdLmlkeCsiWyMiK1p0WzFdLnJ0KyJdIik7YnJlYWs7Y2FzZSJQdGdFbGZDb2wiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6Y2FzZSJQdGdFbGZDb2xWIjpjYXNlIlB0Z0VsZkxlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsIjpjYXNl'@;
put 'IlB0Z0VsZlJhZGljYWxMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmUnciOmNhc2UiUHRnRWxmUndWIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVMRnMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEZvcm11bGEgVG9rZW46ICIrU3Ry'@;
put 'aW5nKFp0KSl9aWYoMyE9cmUuYmlmZiYmYnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2YoeVswXVtrdF1bMF0pKXt2YXIgU249ITA7c3dpdGNoKChadD15WzBdW2J0XSlbMV1bMF0pe2Nhc2UgNDpTbj0hMTtjYXNlIDA6'@;
put 'RnQ9Ym4oIiAiLFp0WzFdWzFdKTticmVhaztjYXNlIDU6U249ITE7Y2FzZSAxOkZ0PWJuKCJcciIsWnRbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoRnQ9IiIscmUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrWnRbMV1bMF0pfVNlLnB1c2goKFNu'@;
put 'P0Z0OiIiKStTZS5wb3AoKSsoU24/IiI6RnQpKSxidD0tMX19aWYoU2UubGVuZ3RoPjEmJnJlLldURil0aHJvdyBuZXcgRXJyb3IoImJhZCBmb3JtdWxhIHN0YWNrIik7cmV0dXJuIFNlWzBdfWZ1bmN0aW9uIGZ2KHksUCxMKXt2YXIgZ2UsUT15LmwrUCxyZT0yPT1MLmJpZmY/MToyLF9lPXku'@;
put 'cmVhZF9zaGlmdChyZSk7aWYoNjU1MzU9PV9lKXJldHVybltbXSx5Yyh5LFAtMildO3ZhciB2ZT1uNSh5LF9lLEwpO3JldHVybiBQIT09X2UrcmUmJihnZT1qMyh5LFAtX2UtcmUsdmUsTCkpLHkubD1RLFt2ZSxnZV19ZnVuY3Rpb24gaTUoeSxQLEwpe3ZhciByZSxRPXkubCtQLGdlPXkucmVh'@;
put 'ZF9zaGlmdCgyKSxfZT1uNSh5LGdlLEwpO3JldHVybiA2NTUzNT09Z2U/W1tdLHljKHksUC0yKV06KFAhPT1nZSsyJiYocmU9ajMoeSxRLWdlLTIsX2UsTCkpLFtfZSxyZV0pfWZ1bmN0aW9uIHozKHksUCxMKXt2YXIgUT15LmwrUCxyZT1MdSh5KTsyPT1MLmJpZmYmJisreS5sO3ZhciBnZT1m'@;
put 'dW5jdGlvbiBuUyh5KXt2YXIgUDtpZig2NTUzNSE9PVluKHkseS5sKzYpKXJldHVyblttYSh5KSwibiJdO3N3aXRjaCh5W3kubF0pe2Nhc2UgMDpyZXR1cm4geS5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gUD0xPT09eVt5LmwrMl0seS5sKz04LFtQLCJiIl07Y2FzZSAyOnJl'@;
put 'dHVybiBQPXlbeS5sKzJdLHkubCs9OCxbUCwiZSJdO2Nhc2UgMzpyZXR1cm4geS5sKz04LFsiIiwicyJdfXJldHVybltdfSh5KSxfZT15LnJlYWRfc2hpZnQoMSk7MiE9TC5iaWZmJiYoeS5yZWFkX3NoaWZ0KDEpLEwuYmlmZj49NSYmeS5yZWFkX3NoaWZ0KDQpKTt2YXIgdmU9ZnVuY3Rpb24g'@;
put 'cjUoeSxQLEwpe3ZhciBnZSxRPXkubCtQLHJlPTI9PUwuYmlmZj8xOjIsX2U9eS5yZWFkX3NoaWZ0KHJlKTtpZig2NTUzNT09X2UpcmV0dXJuW1tdLHljKHksUC0yKV07dmFyIHZlPW41KHksX2UsTCk7cmV0dXJuIFAhPT1fZStyZSYmKGdlPWozKHksUC1fZS1yZSx2ZSxMKSkseS5sPVEsW3Zl'@;
put 'LGdlXX0oeSxRLXkubCxMKTtyZXR1cm57Y2VsbDpyZSx2YWw6Z2VbMF0sZm9ybXVsYTp2ZSxzaGFyZWQ6X2U+PjMmMSx0dDpnZVsxXX19ZnVuY3Rpb24gdWYoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCg0KSxyZT1uNSh5LFEsTCksZ2U9eS5yZWFkX3NoaWZ0KDQpO3JldHVybltyZSxnZT4w'@;
put 'P2ozKHksZ2UscmUsTCwhMCk6bnVsbF19dmFyIHJTPXVmLGg2PXVmLGlTPXVmLG9TPWZ1bmN0aW9uIGd2KHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9eS5yZWFkX3NoaWZ0KDQpLGdlPW41KHksUSxMKTtyZXR1cm5bZ2UscmU+MD9qMyh5LHJlLGdlLEwsITApOm51bGxdfSxzUz11'@;
put 'ZixFST11ZjtmdW5jdGlvbiBtdih5KXtpZigoMHx5KT09eSYmeTxNYXRoLnBvdygyLDE2KSYmeT49MCl7dmFyIFA9cHIoMTEpO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsMyksUC53cml0ZV9zaGlmdCgxLDMwKSxQLndyaXRlX3NoaWZ0KDIseSksUC53cml0ZV9zaGlmdCg0LDApLFB9dmFyIEw9'@;
put 'cHIoMTcpO3JldHVybiBMLndyaXRlX3NoaWZ0KDQsMTEpLEwud3JpdGVfc2hpZnQoMSwzMSksTC53cml0ZV9zaGlmdCg4LHkpLEwud3JpdGVfc2hpZnQoNCwwKSxMfWZ1bmN0aW9uIGFTKHkpe3ZhciBQPXByKDcpO1Aud3JpdGVfc2hpZnQoNCwzKzIqeS5sZW5ndGgpLFAud3JpdGVfc2hpZnQo'@;
put 'MSwyMyksUC53cml0ZV9zaGlmdCgyLHkubGVuZ3RoKTt2YXIgTD1wcigyKnkubGVuZ3RoKTtMLndyaXRlX3NoaWZ0KDIqeS5sZW5ndGgseSwidXRmMTZsZSIpO3ZhciBRPXByKDQpO3JldHVybiBRLndyaXRlX3NoaWZ0KDQsMCksUyhbUCxMLFFdKX1mdW5jdGlvbiBVMyh5KXtpZih5Lm1hdGNo'@;
put 'KC9eIyhESVZcLzAhfEdFVFRJTkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gR1ooeSl7dmFyIFA9cHIoMTApO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsMiksUC53cml0ZV9zaGlmdCgxLDI4KSxQLndyaXRlX3NoaWZ0KDEseSks'@;
put 'UC53cml0ZV9zaGlmdCg0LDApLFB9KCtLYVt5XSk7aWYoeS5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02'@;
put 'XXxbMS05XVxkezAsNX0pJC8pKXJldHVybiBmdW5jdGlvbiB2dih5KXt2YXIgUD1zcyh5KSxMPXByKDE1KTtyZXR1cm4gTC53cml0ZV9zaGlmdCg0LDcpLEwud3JpdGVfc2hpZnQoMSwzNiksTC53cml0ZV9zaGlmdCg0LFAuciksTC53cml0ZV9zaGlmdCgyLFAuY3woIiQiPT15LmNoYXJBdCgw'@;
put 'KT8wOjEpPDwxNHwoeS5tYXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxMLndyaXRlX3NoaWZ0KDQsMCksTH0oeSk7aWYoeS5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIGFTKHkpO3Rocm93IkZvcm11bGEgfCIreSsifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIga0k9ezA6IkJFRVAiLDE6Ik9Q'@;
put 'RU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRP'@;
put 'Vy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4'@;
put 'OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIs'@;
put 'Mzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUx'@;
put 'OiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5G'@;
put 'SU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJD'@;
put 'T01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9U'@;
put 'LkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJX'@;
put 'T1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwx'@;
put 'MDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6'@;
put 'IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJ'@;
put 'VkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExB'@;
put 'Q0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5X'@;
put 'T1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQ'@;
put 'REFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RP'@;
put 'UkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJT'@;
put 'RUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElO'@;
put 'RSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwy'@;
put 'MDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUu'@;
put 'T0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJG'@;
put 'T1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJF'@;
put 'RElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2'@;
put 'NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJ'@;
put 'VC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFS'@;
put 'RCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6'@;
put 'IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJT'@;
put 'Q0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElP'@;
put 'TlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVS'@;
put 'RS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0u'@;
put 'UFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZ'@;
put 'IiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4'@;
put 'NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6'@;
put 'IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0su'@;
put 'U0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0'@;
put 'MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQ'@;
put 'Iiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0'@;
put 'NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0'@;
put 'NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZ'@;
put 'LkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VS'@;
put 'SUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3'@;
put 'NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlM'@;
put 'RVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJ'@;
put 'T05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxM'@;
put 'Lk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJR'@;
put 'VUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LF92PXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3'@;
put 'OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJB'@;
put 'QlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0'@;
put 'MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2'@;
put 'OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVU'@;
put 'RSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUi'@;
put 'LDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEw'@;
put 'MDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dF'@;
put 'UiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwi'@;
put 'LDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5'@;
put 'OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFS'@;
put 'IiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJU'@;
put 'LklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3'@;
put 'MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5D'@;
put 'RUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFS'@;
put 'UCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoi'@;
put 'TUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklG'@;
put 'IiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4'@;
put 'OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBB'@;
put 'VVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5H'@;
put 'LkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwy'@;
put 'NzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZE'@;
put 'SVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01E'@;
put 'SVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoi'@;
put 'U1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNU'@;
put 'IiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNF'@;
put 'TlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJ'@;
put 'Vk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6'@;
put 'IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9O'@;
put 'RVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIi'@;
put 'LDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToi'@;
put 'Q1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9D'@;
put 'VDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0'@;
put 'MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFD'@;
put 'VERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQy'@;
put 'ODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNF'@;
put 'Iiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJG'@;
put 'UkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9E'@;
put 'REZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJO'@;
put 'RVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgz'@;
put 'OiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LGJ2PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQy'@;
put 'OjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5'@;
put 'OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEs'@;
put 'MTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEy'@;
put 'OjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMs'@;
put 'MjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEw'@;
put 'OjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEs'@;
put 'MzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2'@;
put 'OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6'@;
put 'MH0sbzU9eyJfeGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIs'@;
put 'Il94bGZuLkJBU0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5P'@;
put 'TS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5N'@;
put 'QVRIIjoiQ0VJTElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94'@;
put 'bGZuLkNISVNRLklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5D'@;
put 'T05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMi'@;
put 'LCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJG'@;
put 'Qy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94'@;
put 'bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5G'@;
put 'T1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNU'@;
put 'LkxJTkVBUiI6IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJ'@;
put 'U0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09T'@;
put 'SCIsIl94bGZuLklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJf'@;
put 'eGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwi'@;
put 'X3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNU'@;
put 'IiwiX3hsZm4uTkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1Qi'@;
put 'LCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJD'@;
put 'RU5USUxFLklOQyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04u'@;
put 'RElTVCI6IlBPSVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFO'@;
put 'Sy5FUSI6IlJBTksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYu'@;
put 'UCIsIl94bGZuLlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hs'@;
put 'Zm4uVC5JTlYiOiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoi'@;
put 'VkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1Qi'@;
put 'OiJaLlRFU1QifTtmdW5jdGlvbiBsUyh5KXtyZXR1cm4ib2Y6Ij09eS5zbGljZSgwLDMpJiYoeT15LnNsaWNlKDMpKSw2MT09eS5jaGFyQ29kZUF0KDApJiY2MT09KHk9eS5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKHk9eS5zbGljZSgxKSksKHk9KHk9KHk9eS5yZXBsYWNlKC9DT01cLk1J'@;
put 'Q1JPU09GVFwuL2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKFAsTCl7cmV0dXJuIEwucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7'@;
put 'fl0vZywiLCIpLnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBjUyh5KXtyZXR1cm4oIm9mOj0iK3kucmVwbGFjZShxOSwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24geXYoeSl7dmFy'@;
put 'IFA9eS5zcGxpdCgiOiIpO3JldHVybltQWzBdLnNwbGl0KCIuIilbMF0sUFswXS5zcGxpdCgiLiIpWzFdKyhQLmxlbmd0aD4xPyI6IisoUFsxXS5zcGxpdCgiLiIpWzFdfHxQWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gdVMoeSl7cmV0dXJuIHkucmVwbGFjZSgvXC4vLCIhIil9'@;
put 'dmFyIGY2PXt9LFozPXt9O0hpLldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtz'@;
put 'aGVldCJdO3ZhciBLMD10eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiB3dih5LFAsTCxRKXt2YXIgcmU9MCxnZT15Lmxlbmd0aDtpZihRKXtpZihLMD9RLmhhcyhQKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUSxQKSlmb3IodmFyIF9lPUswP1EuZ2V0KFApOlFbUF07cmU8'@;
put 'X2UubGVuZ3RoOysrcmUpaWYoeVtfZVtyZV1dLnQ9PT1QJiYoIXlbX2VbcmVdXS5yJiYhTHx8eVtfZVtyZV1dLnI9PUwpKXJldHVybiB5LkNvdW50KyssX2VbcmVdfWVsc2UgZm9yKDtyZTxnZTsrK3JlKWlmKHlbcmVdLnQ9PT1QJiYoIXlbcmVdLnImJiFMfHx5W3JlXS5yPT1MKSlyZXR1cm4g'@;
put 'eS5Db3VudCsrLHJlO3JldHVybiB5W2dlXT17dDpQLHI6TH0seS5Db3VudCsrLHkuVW5pcXVlKyssUSYmKEswPyhRLmhhcyhQKXx8US5zZXQoUCxbXSksUS5nZXQoUCkucHVzaChnZSkpOihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUSxQKXx8KFFbUF09W10pLFFbUF0u'@;
put 'cHVzaChnZSkpKSxnZX1mdW5jdGlvbiBZZCh5LFApe3ZhciBMPXttaW46eSsxLG1heDp5KzF9LFE9cGw7aWYoIVApcmV0dXJuIFA7dmFyIHJlPS0xO3JldHVybiBQLmF1dG8mJihMLmJlc3RGaXQ9MSxQLmJlc3R3aWR0aCYmKHJlPVAuYmVzdHdpZHRoKSxkZWxldGUgUC5iZXN0d2lkdGgpLG51'@;
put 'bGwhPVAud3B4P3JlPXRmKFAud3B4KTpudWxsIT1QLndjaD9yZT1QLndjaDpudWxsIT1QLndpZHRoJiYoTC5jdXN0b21XaWR0aD0xKSxyZT4tMT8oTC53aWR0aD1qZChyZSksTC5jdXN0b21XaWR0aD0xKTpudWxsIT1QLndpZHRoJiYoTC53aWR0aD1QLndpZHRoKSxQLmhpZGRlbiYmKEwuaGlk'@;
put 'ZGVuPSEwKSxMLmJlc3RGaXQmJmRlbGV0ZSBMLmN1c3RvbVdpZHRoLHBsPVEsbnVsbCE9UC5sZXZlbCYmKEwub3V0bGluZUxldmVsPUwubGV2ZWw9UC5sZXZlbCksbnVsbCE9UC5zdHlsZSYmKEwuc3R5bGU9UC5zdHlsZSksTH1mdW5jdGlvbiBOaSh5LFAsTCl7dmFyIFE9V3MoeVsiIXJlZiJd'@;
put 'KSxyZT0wLGdlPXlbIiFtZXJnZXMiXXx8W10sX2U9QXJyYXkuaXNBcnJheSh5KTtlOmZvcih2YXIgdmU9MDt2ZTw9US5lLnI7Kyt2ZSl7Zm9yKHZhciBTZT0wO1NlPGdlLmxlbmd0aDsrK1NlKWlmKGdlW1NlXS5zLnI8PXZlJiZ2ZTw9Z2VbU2VdLmUuciYmZ2VbU2VdLnMuYzw9TCYmTDw9Z2Vb'@;
put 'U2VdLmUuYyljb250aW51ZSBlO3ZhciBIZT1fZT8oeVt2ZV18fFtdKVtMXTp5W2RpKHtyOnZlLGM6TH0pXTtpZihIZSl7dmFyIEJlPTE7aWYoSGUucyYmKEJlPVZtKEhlLnMpL05tLkNhbGlicmlbMTJdfHwxKSxIZS53KXJlPU1hdGgubWF4KHJlLEhlLncubGVuZ3RoKkJlKTtlbHNlIHN3aXRj'@;
put 'aChIZS50KXtjYXNlImIiOmNhc2UiZSI6cmU9TWF0aC5tYXgocmUsNSpCZSk7YnJlYWs7Y2FzZSJzIjpyZT1NYXRoLm1heChyZSxIZS52Lmxlbmd0aCpCZSoxLjJ8MCk7YnJlYWs7Y2FzZSJuIjpybShIZSxIZS52KSxyZT1NYXRoLm1heChyZSxTdHJpbmcoSGUud3x8SGUudikubGVuZ3RoKkJl'@;
put 'KTticmVhaztjYXNlImQiOnJlPU1hdGgubWF4KHJlLDgqQmUpfX19cmU8MSYmKHJlPTEpLFAuYmVzdHdpZHRoPXJlfWZ1bmN0aW9uIGRmKHksUCl7aWYoeSl7dmFyIEw9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09UCYmKEw9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT15LmxlZnQmJih5'@;
put 'LmxlZnQ9TFswXSksbnVsbD09eS5yaWdodCYmKHkucmlnaHQ9TFsxXSksbnVsbD09eS50b3AmJih5LnRvcD1MWzJdKSxudWxsPT15LmJvdHRvbSYmKHkuYm90dG9tPUxbM10pLG51bGw9PXkuaGVhZGVyJiYoeS5oZWFkZXI9TFs0XSksbnVsbD09eS5mb290ZXImJih5LmZvb3Rlcj1MWzVdKX19'@;
put 'ZnVuY3Rpb24gRm8oeSxQKXtmb3IodmFyIEw9bHQoUCksUT0wO1E8eS5sZW5ndGg7KytRKXt2YXIgcmU9ITAsZ2U9eVtRXTtpZihnZSYmTC5sZW5ndGg9PWx0KGdlKS5sZW5ndGgmJihMLmZvckVhY2goZnVuY3Rpb24oX2Upe2lmKHJlKXtpZihudWxsPT09UFtfZV0hPShudWxsPT09Z2VbX2Vd'@;
put 'KSlyZXR1cm4gdm9pZChyZT0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiBQW19lXSlpZihbImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKF9lKT4tMSl7aWYoJDAoUFtfZV0sZ2VbX2VdKSlyZXR1cm4gdm9pZChyZT0hMSl9ZWxzZXtpZighKFsibGVmdCIsInJpZ2h0IiwidG9w'@;
put 'IiwiYm90dG9tIl0uaW5kZXhPZihfZSk+LTEpKXJldHVybiB2b2lkKHJlPSExKTtpZihQbShQW19lXSxnZVtfZV0pKXJldHVybiB2b2lkKHJlPSExKX1pZihQW19lXSE9Z2VbX2VdKXJldHVybiB2b2lkKHJlPSExKX19KSxyZSkpcmV0dXJuIFF9cmV0dXJuIHlbeS5sZW5ndGhdPW9uKFApLHku'@;
put 'bGVuZ3RoLTF9ZnVuY3Rpb24gZ3UoeSxQLEwsUSl7dmFyIHJlPVEucmV2c3NmW251bGwhPUwuej9MLno6IkdlbmVyYWwiXSxnZT02MCxfZT15Lmxlbmd0aDtpZihudWxsPT1yZSYmUS5zc2YpZm9yKDtnZTwzOTI7KytnZSlpZihudWxsPT1RLnNzZltnZV0pe3cubG9hZChMLnosZ2UpLFEuc3Nm'@;
put 'W2dlXT1MLnosUS5yZXZzc2ZbTC56XT1yZT1nZTticmVha312YXIgdmU9MCxTZT0wLEhlPTAsQmU9MDtpZihRLmNlbGxTdHlsZXMpe2lmKEwucyl7aWYoUS5Gb250cyl7TC5zLmNvbG9yfHwoTC5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgR2U9KEwucy5ib2xkPzE6'@;
put 'MCl8KEwucy5pdGFsaWM/MjowKXwoTC5zLnN0cmlrZT80OjApfChMLnMuc2hhZG93Pzg6MCk7dmU8US5Gb250cy5sZW5ndGg7Kyt2ZSl7dmFyIG50PVEuRm9udHNbdmVdO2lmKG51bGw9PW50LmZvbnRoYXNoJiYobnQuZm9udGhhc2g9KG50LmJvbGQ/MTowKXwobnQuaXRhbGljPzI6MCl8KG50'@;
put 'LnN0cmlrZT80OjApfChudC5zaGFkb3c/ODowKSksIShHZSE9bnQuZm9udGhhc2h8fCEhTC5zLmNvbG9yIT0hIW50LmNvbG9yfHxMLnMudmFsaWduIT1udC52YWxpZ258fChMLnMuc3p8fG50LnN6KSYmKEwucy5zenx8MTIpIT0obnQuc3p8fDEyKXx8TC5zLm5hbWUmJkwucy5uYW1lIT1udC5u'@;
put 'YW1lfHwoTC5zLnVuZGVybGluZXx8MCkhPShudC51bmRlcmxpbmV8fDApfHxMLnMuY29sb3ImJiQwKEwucy5jb2xvcixudC5jb2xvcikpKWJyZWFrfXZlPT1RLkZvbnRzLmxlbmd0aCYmKFEuRm9udHMucHVzaCh7c3o6TC5zLnN6fHwxMixjb2xvcjpMLnMuY29sb3J8fHt0aGVtZToxLHJnYjoi'@;
put 'MDAwMDAwIn0sbmFtZTpMLnMubmFtZXx8IkNhbGlicmkiLGZhbWlseTpMLnMuZmFtaWx5fHwyLHNjaGVtZTpMLnMuc2NoZW1lLGJvbGQ6TC5zLmJvbGQsaXRhbGljOkwucy5pdGFsaWMsc3RyaWtlOkwucy5zdHJpa2Usc2hhZG93Okwucy5zaGFkb3csdmFsaWduOkwucy52YWxpZ24sdW5kZXJs'@;
put 'aW5lOkwucy51bmRlcmxpbmV9KSwxPT1RLkZvbnRzLmxlbmd0aCYmWjEoUS5Gb250c1swXSkpfWlmKFEuRmlsbHMpe2Zvcig7U2U8US5GaWxscy5sZW5ndGg7KytTZSl7dmFyIGR0PVEuRmlsbHNbU2VdO2lmKCEhTC5zLnN0b3BzPT0hIWR0LnN0b3BzKXtpZihMLnMuc3RvcHMpe2lmKEwucy5h'@;
put 'bmdsZSE9ZHQuYW5nbGUpY29udGludWU7dmFyIEN0PSEwO2lmKEwucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0LFR0KXskMChrdCxkdC5zdG9wc1tUdF0pJiYoQ3Q9ITEpLGt0LnYhPWR0LnN0b3BzW1R0XS52JiYoQ3Q9ITEpfSksIUN0KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09TC5zLnBh'@;
put 'dHRlcm5UeXBlJiZMLnMuZmdDb2xvciYmKEwucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1MLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoTC5zLnBhdHRlcm5UeXBlIT1kdC5wYXR0ZXJuVHlwZXx8JDAoTC5zLmZnQ29sb3IsZHQuZmdDb2xvcil8fCQwKEwucy5iZ0NvbG9yLGR0LmJnQ29s'@;
put 'b3IpKWNvbnRpbnVlfWJyZWFrfX1pZihTZT09US5GaWxscy5sZW5ndGgpe3ZhciBjdD17fTtMLnMuc3RvcHM/KG51bGwhPUwucy5hbmdsZSYmKGN0LmFuZ2xlPUwucy5hbmdsZSksY3Quc3RvcHM9W10sTC5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3Qpe2N0LnN0b3BzLnB1c2gob24oa3Qp'@;
put 'KX0pKTpjdD17cGF0dGVyblR5cGU6TC5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6TC5zLmZnQ29sb3IsYmdDb2xvcjpMLnMuYmdDb2xvcn0sUS5GaWxscy5wdXNoKGN0KX19aWYoUS5Cb3JkZXJzKXtmb3IoO0hlPFEuQm9yZGVycy5sZW5ndGg7KytIZSl7dmFyIGJ0PVEuQm9yZGVyc1tIZV0sRnQ9'@;
put 'InRvcCI7aWYoTC5zW0Z0XSl7aWYoIWJ0W0Z0XXx8TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7aWYoTC5zW0Z0PSJib3R0b20iXSl7aWYoIWJ0W0Z0XXx8TC5z'@;
put 'W0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7aWYoTC5zW0Z0PSJsZWZ0Il0pe2lmKCFidFtGdF18fEwuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoTC5zW0Z0'@;
put 'XS5jb2xvcixidFtGdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2lmKEwuc1tGdD0icmlnaHQiXSl7aWYoIWJ0W0Z0XXx8TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxz'@;
put 'ZSBpZihudWxsIT1idFtGdF0pY29udGludWU7YnJlYWt9SGU9PVEuQm9yZGVycy5sZW5ndGgmJlEuQm9yZGVycy5wdXNoKHt0b3A6TC5zLnRvcCYmb24oTC5zLnRvcCl8fHZvaWQgMCxib3R0b206TC5zLmJvdHRvbSYmb24oTC5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0Okwucy5sZWZ0JiZvbihM'@;
put 'LnMubGVmdCl8fHZvaWQgMCxyaWdodDpMLnMucmlnaHQmJm9uKEwucy5yaWdodCl8fHZvaWQgMH0pfWlmKFAmJkwucy5zdHlsZSYmIk5vcm1hbCIhPT1MLnMuc3R5bGUpe2ZvcihCZT0xO0JlPFAubGVuZ3RoJiZQW0JlXS5uYW1lIT1MLnMuc3R5bGU7KytCZSk7QmU9PVAubGVuZ3RoJiZQLnB1'@;
put 'c2goe25hbWU6TC5zLnN0eWxlLG51bUZtdElkOnJlLGZvbnRJZDp2ZSxmaWxsSWQ6U2UsYm9yZGVySWQ6SGV9KX19Zm9yKGdlPTA7Z2UhPV9lOysrZ2UpaWYoeVtnZV0ubnVtRm10SWQ9PXJlJiZ5W2dlXS5mb250SWQ9PXZlJiZ5W2dlXS5maWxsSWQ9PVNlJiZ5W2dlXS5ib3JkZXJJZD09SGUm'@;
put 'JnlbZ2VdLnhmSWQ9PUJlKXtpZihMLnMmJkwucy5hbGlnbm1lbnQpe2lmKCF5W2dlXS5hbGlnbm1lbnQpY29udGludWU7aWYoTC5zLmFsaWdubWVudC5ob3Jpem9udGFsIT15W2dlXS5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8TC5zLmFsaWdubWVudC52ZXJ0aWNhbCE9eVtnZV0uYWxpZ25tZW50'@;
put 'LnZlcnRpY2FsfHxMLnMuYWxpZ25tZW50LndyYXBUZXh0IT15W2dlXS5hbGlnbm1lbnQud3JhcFRleHR8fEwucy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQhPXlbZ2VdLmFsaWdubWVudC5zaHJpbmtUb0ZpdHx8TC5zLmFsaWdubWVudC50ZXh0Um90YXRpb24hPXlbZ2VdLmFsaWdubWVudC50ZXh0'@;
put 'Um90YXRpb258fEwucy5hbGlnbm1lbnQuaW5kZW50IT15W2dlXS5hbGlnbm1lbnQuaW5kZW50KWNvbnRpbnVlfWVsc2UgaWYoeVtnZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKEwucyl7aWYoISFMLnMuaGlkZGVuPT0oIXlbZ2VdLnByb3RlY3Rpb258fCF5W2dlXS5wcm90ZWN0aW9uLmhpZGRl'@;
put 'bil8fCEhTC5zLmVkaXRhYmxlPT0oIXlbZ2VdLnByb3RlY3Rpb258fCF5W2dlXS5wcm90ZWN0aW9uLmVkaXRhYmxlKSljb250aW51ZX1lbHNlIGlmKHlbZ2VdLnByb3RlY3Rpb24pY29udGludWU7cmV0dXJuIGdlfX1lbHNlIGZvcihnZT0wO2dlIT1fZTsrK2dlKWlmKHlbZ2VdLm51bUZtdElk'@;
put 'PT09cmUpcmV0dXJuIGdlO3JldHVybiB5W19lXT17bnVtRm10SWQ6cmUsZm9udElkOnZlLGZpbGxJZDpTZSxib3JkZXJJZDpIZSx4ZklkOkJlLGFwcGx5TnVtYmVyRm9ybWF0OjF9LHZlPjAmJih5W19lXS5hcHBseUZvbnQ9MSksU2U+MCYmKHlbX2VdLmFwcGx5RmlsbD0xKSxIZT4wJiYoeVtf'@;
put 'ZV0uYXBwbHlCb3JkZXI9MSksIVAmJkwucyYmTC5zLnN0eWxlJiYiTm9ybWFsIiE9TC5zLnN0eWxlJiYoeVtfZV0uc3R5bGU9TC5zLnN0eWxlKSxMLnMmJkwucy5hbGlnbm1lbnQmJih5W19lXS5hbGlnbm1lbnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlu'@;
put 'a1RvRml0IiwiaW5kZW50IiwidGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7bnVsbCE9TC5zLmFsaWdubWVudFtrdF0mJih5W19lXS5hbGlnbm1lbnRba3RdPUwucy5hbGlnbm1lbnRba3RdKX0pKSxMLnMmJkwucy5oaWRkZW4mJih5W19lXS5wcm90ZWN0aW9ufHwoeVtfZV0u'@;
put 'cHJvdGVjdGlvbj17fSkseVtfZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLEwucyYmTC5zLmVkaXRhYmxlJiYoeVtfZV0ucHJvdGVjdGlvbnx8KHlbX2VdLnByb3RlY3Rpb249e30pLHlbX2VdLnByb3RlY3Rpb24uZWRpdGFibGU9ITApLF9lfWZ1bmN0aW9uIHA2KHksUCxMLFEscmUsZ2UsX2Us'@;
put 'dmUpeyJkIj09PXkudCYmInN0cmluZyI9PXR5cGVvZiB5LnYmJih5LnY9SHQoeS52KSk7dHJ5e2dlLmNlbGxORiYmKHkuej13Ll90YWJsZVtQXSl9Y2F0Y2goSGUpe2lmKGdlLldURil0aHJvdyBIZX1pZigoIWdlfHwhMSE9PWdlLmNlbGxUZXh0KSYmInoiIT15LnQpdHJ5e2lmKG51bGw9PXcu'@;
put 'X3RhYmxlW1BdJiZ3LmxvYWQoZGVbUF18fCJHZW5lcmFsIixQKSwiZSI9PT15LnQpeS53PXkud3x8UW9beS52XTtlbHNlIGlmKDA9PT1QKWlmKCJuIj09PXkudCl5Lnc9KDB8eS52KT09PXkudj93Ll9nZW5lcmFsX2ludCh5LnYpOncuX2dlbmVyYWxfbnVtKHkudik7ZWxzZSBpZigiZCI9PT15'@;
put 'LnQpe3ZhciBTZT1VZSh5LnYpO3kudz0oMHxTZSk9PT1TZT93Ll9nZW5lcmFsX2ludChTZSk6dy5fZ2VuZXJhbF9udW0oU2UpfWVsc2V7aWYodm9pZCAwPT09eS52KXJldHVybiIiO3kudz13Ll9nZW5lcmFsKHkudixaMyl9ZWxzZSB5Lnc9dy5mb3JtYXQoUCwiZCI9PT15LnQ/VWUoeS52KTp5'@;
put 'LnYsWjMpfWNhdGNoKEhlKXtpZihnZS5XVEYpdGhyb3cgSGV9aWYoZ2UuY2VsbFN0eWxlcyYmdmUpe2lmKHkucz17fSxudWxsIT1MJiZ2ZS5GaWxscyl0cnl7VXQoeS5zLHZlLkZpbGxzW0xdKX1jYXRjaChIZSl7aWYoZ2UuV1RGKXRocm93IEhlfWlmKG51bGwhPVEmJnZlLkZvbnRzKXRyeXtV'@;
put 'dCh5LnMsdmUuRm9udHNbUV0pfWNhdGNoKEhlKXtpZihnZS5XVEYpdGhyb3cgSGV9aWYobnVsbCE9cmUmJnZlLkJvcmRlcnMpdHJ5e1V0KHkucyx2ZS5Cb3JkZXJzW3JlXSl9Y2F0Y2goSGUpe2lmKGdlLldURil0aHJvdyBIZX19fWZ1bmN0aW9uIHM1KHksUCxMKXtpZih5JiZ5WyIhcmVmIl0p'@;
put 'e3ZhciBRPU9pKHlbIiFyZWYiXSk7aWYoUS5lLmM8US5zLmN8fFEuZS5yPFEucy5yKXRocm93IG5ldyBFcnJvcigiQmFkIHJhbmdlICgiK0wrIik6ICIreVsiIXJlZiJdKX19dmFyIEN2PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGE1PS88KD86XHcr'@;
put 'Oik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sZFM9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20sJFo9LyIoXHcqOlx3KikiLyxTdj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLGhmPS88KD86XHc6KT9jb250cm9sXGJbXj5dKltcL10/'@;
put 'Pi9nLGc2PS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxNdj0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLHh2PS88KD86XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sVEk9LzwoPzpcdzop'@;
put 'P3NoZWV0UHJvdGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLERJPS88KD86XHc6KT9zaGVldFByW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0UHIpPi8sSUk9LzwoPzpcdzopP3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hl'@;
put 'ZXRWaWV3cyk+LyxoUz0vPCg/Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+LyxtNj0vPCg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcr'@;
put 'Oik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nKT4vZyxmZj0vPCg/Olx3Oik/c2hlZXRGb3JtYXRQcltePl0qXC8+LyxFdj0vPCg/Olx3KzopP3RhYmxlUGFydHMuKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RhYmxlUGFydHM+LyxXMz0vPCg/Olx3Oik/cGFnZVNldHVwW14+XSpcLz4vLFdkPS88'@;
put 'KD86XHc6KT9yb3dCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJlYWtzKT4vLGZTPS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/Y29sQnJlYWtzKT4vLHFaPS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/'@;
put 'OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLExJPS88KD86XHc6KT9wcmludE9wdGlvbnNcYltePlwvXSpcLz4vO3ZhciBwUz0vPCg/Olx3Oik/dGFibGVQYXJ0XGJbXlwvPl0qW1wvXT8+L2c7ZnVuY3Rpb24gdjYoeSxQLEwsUSl7dmFyIHJlPWxuKHkpO0wuU2hl'@;
put 'ZXRzW1FdfHwoTC5TaGVldHNbUV09e30pLHJlLmNvZGVOYW1lJiYoTC5TaGVldHNbUV0uQ29kZU5hbWU9cmUuY29kZU5hbWUpfXZhciBfNj0vPCg/Olx3Oik/dGFiQ29sb3JbXj5dKltcL10/Pi8sbVM9LzwoPzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLHZTPS88KD86XHc6KT9vdXRs'@;
put 'aW5lUHJbXj5dKltcL10/Pi8sQ2U9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUifSxrdj1iZShDZSksUkk9e2Rpc3BsYXllZDoiZGlzcGxheWVkIixub25lOiJibGFuayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sYlM9YmUoUkkpLENTPS88KD86XHc6'@;
put 'KT9icmtbXj5dKlwvPi9nLEF2PVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLFR2PVsiZm9ybWF0Q29sdW1ucyIsImZvcm1hdFJvd3MiLCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5z'@;
put 'ZXJ0SHlwZXJsaW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIHhTKHkpe3ZhciBQPXt9O3JldHVyblsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFj'@;
put 'aChmdW5jdGlvbihMKXt5W0xdJiYoUFtMXT1wYXJzZUZsb2F0KHlbTF0pKX0pLFB9dmFyIHk2PXtDdXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToidGltZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixMaXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToi'@;
put 'bm9uZSJ9LGtTPWJlKHk2KSwkMz17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixMVDoibGVzc1RoYW4iLEdFOiJncmVhdGVyVGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxBUz1iZSgkMyk7ZnVu'@;
put 'Y3Rpb24gVFMoeSxQLEwpe3ZhciBRPVtdLHJlPXt9LGdlPSIiLF9lPSExLHZlPTAsU2U9MDtyZXR1cm4geS5yZXBsYWNlKCR0LGZ1bmN0aW9uKEhlLEJlKXt2YXIgR2U9bG4oSGUpO3N3aXRjaChqbihHZVswXSkpe2Nhc2UiPGRhdGFWYWxpZGF0aW9ucyI6Y2FzZSI8ZGF0YVZhbGlkYXRpb25z'@;
put 'PiI6Y2FzZSI8L2RhdGFWYWxpZGF0aW9ucz4iOmJyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uIjpyZT17dDprU1tHZS50eXBlfHwibm9uZSJdLHJlZjooZ2U9R2Uuc3FyZWYpP2dlLmluZGV4T2YoIiAiKT4tMT9nZTpPaShnZSk6IiJ9LEdlLm9wZXJhdG9yJiYocmUub3A9QVNbR2Uub3BlcmF0'@;
put 'b3JdKSxyZS5ibGFuaz0hIUdlLmFsbG93QmxhbmsmJnlyKEdlLmFsbG93QmxhbmspLCghR2Uuc2hvd0lucHV0TWVzc2FnZXx8IXlyKEdlLnNob3dJbnB1dE1lc3NhZ2UpKSYmKHJlLmlucHV0PSExKSxHZS5wcm9tcHRUaXRsZSYmKChyZS5pbnB1dHx8KHJlLmlucHV0PXt9KSkudGl0bGU9eHIo'@;
put 'R2UucHJvbXB0VGl0bGUpKSxHZS5wcm9tcHQmJigocmUuaW5wdXR8fChyZS5pbnB1dD17fSkpLm1lc3NhZ2U9eHIoR2UucHJvbXB0KSksKCFHZS5zaG93RXJyb3JNZXNzYWdlfHwheXIoR2Uuc2hvd0Vycm9yTWVzc2FnZSkpJiYocmUuZXJyb3I9ITEpLEdlLmVycm9yVGl0bGUmJigocmUuZXJy'@;
put 'b3J8fChyZS5lcnJvcj17fSkpLnRpdGxlPXhyKEdlLmVycm9yVGl0bGUpKSxHZS5lcnJvciYmKChyZS5lcnJvcnx8KHJlLmVycm9yPXt9KSkubWVzc2FnZT14cihHZS5lcnJvcikpLHJlLmVycm9yP3JlLmVycm9yLnN0eWxlPUdlLmVycm9yU3R5bGV8fCJzdG9wIjpHZS5lcnJvclN0eWxlJiYo'@;
put 'cmUuZXJyb3I9e3N0eWxlOkdlLmVycm9yU3R5bGV9KSxyZS50JiZRLnB1c2gocmUpO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNxcmVmPiI6U2U9QmUrSGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOmdlPXku'@;
put 'c2xpY2UoU2UsQmUpLHJlLnJlZj1nZT9nZS5pbmRleE9mKCIgIik+LTE/Z2U6T2koZ2UpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+Ijp2ZT1CZStIZS5sZW5ndGg7YnJlYWs7Y2FzZSI8'@;
put 'L2Zvcm11bGExPiI6Y2FzZSI8L2Zvcm11bGEyPiI6aWYoTClicmVhaztjYXNlIjwvZj4iOnZhciBudD14cihQaSh5LnNsaWNlKHZlLEJlKSkpO3N3aXRjaChyZS50KXtjYXNlIkxpc3QiOmlmKHJlLmx8fHJlLmYpYnJlYWs7aWYoMzQ9PW50LmNoYXJDb2RlQXQoMCkpe3JlLmw9bnQuc2xpY2Uo'@;
put 'MSwtMSkuc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6bnVsbD09cmUuZiYmKHJlLmY9bnQpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjpyZS5vcHx8KHJlLm9wPSJJTiIpLG51bGw9PXJlLnY/cmUudj1pc05h'@;
put 'TigrbnQpP250OitudDoocmUubWluPXJlLnYscmUubWF4PWlzTmFOKCtudCk/bnQ6K250LGRlbGV0ZSByZS52KX1icmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTti'@;
put 'cmVhaztkZWZhdWx0OmlmKFAmJlAuV1RGJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitHZVswXSsiIGluIGRhdGEgdmFsaWRhdGlvbiIpfXJldHVybiBIZX0pLFF9dmFyIFJ2PXtJTjoiY29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0'@;
put 'aCIsTkQ6ImVuZHNXaXRoIn0sRFM9YmUoUnYpLElTPXtMTToibGFzdE1vbnRoIixMUzoibGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9udGgiLE5XOiJuZXh0V2VlayIsVE06InRoaXNNb250aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inll'@;
put 'c3RlcmRheSJ9LFZJPWJlKElTKTtmdW5jdGlvbiB3Nih5KXt2YXIgUD17fTtyZXR1cm4gbnVsbCE9eS52YWwmJihpc05hTigreS52YWwpP1AuZj15LnZhbDpQLnY9K3kudmFsKSxQLnQ9eS50eXBlLFB9ZnVuY3Rpb24gcGYoeSl7cmV0dXJuIFNyKCJjZnZvIixudWxsLHt0eXBlOnkudCx2YWw6'@;
put 'bnVsbCE9eS52P3kudjpIcih5LmYpfSl9ZnVuY3Rpb24gQzYoeSxQLEwsUSl7dmFyIHJlPXc2KHkpO3JldHVybiByZS5jb2xvcj1VMihQLEwsUSkscmV9ZnVuY3Rpb24gTFMoeSxQLEwsUSxyZSl7dmFyIGdlPSh5Lm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBm'@;
put 'dW5jdGlvbiBCSSh5LFAsTCxRLHJlLGdlKXt2YXIgX2U9ITEsdmU9W10sU2U9e2Y6W119LEhlPTAsQmU9MCxHZT17Y2Z2b3M6W10sY29sb3JzOltdfSxudD17fSxkdD0tMSxDdD0wLGN0PSIiO3JldHVybiB5LnJlcGxhY2UoJHQsZnVuY3Rpb24oYnQsRnQpe3ZhciBrdD1sbihidCk7c3dpdGNo'@;
put 'KGpuKGt0WzBdKSl7Y2FzZSI8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIjpjYXNlIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiI6YnJlYWs7Y2FzZSI8Y2ZSdWxlIjpjYXNlIjxjZlJ1bGU+IjppZihCZT1GdCxudD1rdCxTZT17cmVmOlAsZjpbXX0sIWJ0Lm1hdGNoKC9cLz4vKSlicmVhaztjYXNl'@;
put 'IjwvY2ZSdWxlPiI6c3dpdGNoKG50LmR4ZklkJiZyZSYmcmUuRFhGJiYoU2Uucz1yZS5EWEZbK250LmR4ZklkXSksbnQudHlwZSl7Y2FzZSJkdXBsaWNhdGVWYWx1ZXMiOlNlLnQ9ImR1cCI7YnJlYWs7Y2FzZSJ1bmlxdWVWYWx1ZXMiOlNlLnQ9InVuaXF1ZSI7YnJlYWs7Y2FzZSJjb250YWlu'@;
put 'c0JsYW5rcyI6U2UudD0iYmxhbmsiLFNlLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0JsYW5rcyI6U2UudD0iYmxhbmsiLFNlLnY9ITE7YnJlYWs7Y2FzZSJjb250YWluc0Vycm9ycyI6U2UudD0iZXJyb3IiLFNlLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0Vycm9ycyI6U2UudD0i'@;
put 'ZXJyb3IiLFNlLnY9ITE7YnJlYWs7Y2FzZSJjZWxsSXMiOnN3aXRjaChudC5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnMiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoU2UudD0idGV4dCIsU2Uub3A9RFNbbnQub3BlcmF0b3JdLG51bGw9'@;
put 'PW50LnRleHQpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitTZS5vcCsiIG1pc3NpbmcgdGV4dCIpO1NlLnY9bnQudGV4dCxTZS5mPVNlLmZbMF0sbnVsbD09U2UuZiYmZGVsZXRlIFNlLmY7YnJlYWs7ZGVmYXVsdDpTZS50PSJ2YWwiLFNlLm9wPUFTW250Lm9wZXJhdG9yXSwxPT1T'@;
put 'ZS5mLmxlbmd0aD9pc05hTigrU2UuZlswXSk/U2UuZj1TZS5mWzBdOihTZS52PStTZS5mWzBdLGRlbGV0ZSBTZS5mKTooU2UubWluPWlzTmFOKCtTZS5mWzBdKT9TZS5mWzBdOitTZS5mWzBdLFNlLm1heD1pc05hTigrU2UuZlsxXSk/U2UuZlsxXTorU2UuZlsxXSxkZWxldGUgU2UuZil9YnJl'@;
put 'YWs7Y2FzZSJleHByZXNzaW9uIjpTZS50PSJmb3JtdWxhIixTZS5mPVNlLmZbMF07YnJlYWs7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnNUZXh0IjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKFNlLnQ9InRleHQiLFNlLm9wPURTW250LnR5cGVdLG51bGw9'@;
put 'PW50LnRleHQmJlNlLmYubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitTZS5vcCsiIG1pc3NpbmcgdGV4dCIpO1NlLnY9bnVsbCE9bnQudGV4dD9udC50ZXh0OlNlLmZbMV0ubWF0Y2goLyIuKiIvKT9TZS5mWzFdLnNsaWNlKDEsLTEpOlNlLmZbMV0sU2UuZj1TZS5m'@;
put 'WzBdLG51bGw9PVNlLmYmJmRlbGV0ZSBTZS5mO2JyZWFrO2Nhc2UiY29sb3JTY2FsZSI6aWYoU2UudD0ic2NhbGUiLCFTZS5jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBjb2xvclNjYWxlIik7U2UuY21pbj1DNigoR2U9U2UuY29sb3JTY2FsZSkuY2Z2b3NbMF0sR2UuY29s'@;
put 'b3JzWzBdLHJlLFEpLDM9PUdlLmNmdm9zLmxlbmd0aCYmKFNlLmNtaWQ9QzYoR2UuY2Z2b3NbMV0sR2UuY29sb3JzWzFdLHJlLFEpKSxTZS5jbWF4PUM2KEdlLmNmdm9zW0dlLmNmdm9zLmxlbmd0aC0xXSxHZS5jb2xvcnNbR2UuY2Z2b3MubGVuZ3RoLTFdLHJlLFEpO2JyZWFrO2Nhc2UiZGF0'@;
put 'YUJhciI6aWYoU2UudD0iYmFyIiwhU2UuZGF0YUJhcil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgZGF0YUJhciIpOyhHZT1TZS5kYXRhQmFyKS5jb2xvcnNbMF0mJihTZS5jb2xvcj1VMihHZS5jb2xvcnNbMF0scmUsUSkpLFNlLmNtaW49dzYoR2UuY2Z2b3NbMF0pLFNlLmNtYXg9dzYoR2Uu'@;
put 'Y2Z2b3NbMV0pO2JyZWFrO2Nhc2UiaWNvblNldCI6aWYoU2UudD0iaWNvbiIsIVNlLmljb25TZXQpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGljb25TZXQiKTtTZS50aHJlc2g9KEdlPVNlLmljb25TZXQpLmNmdm9zLm1hcChmdW5jdGlvbihUdCl7cmV0dXJuIHc2KFR0KX0pLFNlLnY9R2Uu'@;
put 'dGFnJiZHZS50YWcuaWNvblNldHx8IjNUcmFmZmljTGlnaHRzMSIsU2UucmV2PXlyKEdlLnRhZy5yZXZlcnNlfHwiZmFsc2UiKSxTZS5wY3Q9eXIoR2UudGFnLnBlcmNlbnR8fCJ0cnVlIiksU2UuaGlkZGVuPSF5cihHZS50YWcuc2hvd1ZhbHVlfHwidHJ1ZSIpO2JyZWFrO2Nhc2UidGltZVBl'@;
put 'cmlvZCI6U2UudD0iZGF0ZSIsU2Uub3A9VklbbnQudGltZVBlcmlvZF07YnJlYWs7Y2FzZSJhYm92ZUF2ZXJhZ2UiOlNlLnQ9ImF2ZyIsU2Uub3A9IjAiPT1udC5hYm92ZUF2ZXJhZ2U/IkwiOiJHIixTZS5vcCs9bnQuc3RkRGV2P250LnN0ZERldjp5cihudC5lcXVhbEF2ZXJhZ2V8fCIwIik/'@;
put 'IkUiOiJUIjticmVhaztjYXNlInRvcDEwIjpTZS50PSJyYW5rIixTZS5vcD0oeXIobnQuYm90dG9tfHwiMCIpPyJCIjoiVCIpKyh5cihudC5wZXJjZW50fHwiMCIpPyJQIjoiViIpLFNlLnY9K250LnJhbms7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCBDRiBUeXBlICIrbnQudHlw'@;
put 'ZX1pZihkZWxldGUgU2UuY29sb3JTY2FsZSxkZWxldGUgU2UuZGF0YUJhcixkZWxldGUgU2UuaWNvblNldCwhU2UudCl0aHJvdyBjb25zb2xlLmxvZyh5LnNsaWNlKEJlLEZ0K2J0Lmxlbmd0aCkpLCJiYWQgQ0YgcnVsZSI7bnVsbCE9U2UuZiYmIVNlLmYubGVuZ3RoJiZkZWxldGUgU2UuZixT'@;
put 'ZS5kZWx8fHZlLnB1c2goU2UpO2JyZWFrO2Nhc2UiPGZvcm11bGEiOmNhc2UiPGZvcm11bGE+IjpIZT1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGE+IjpTZS5mLnB1c2goeHIoeS5zbGljZShIZSxGdCkpKTticmVhaztjYXNlIjxmIjpjYXNlIjxmPiI6SGU9RnQrYnQubGVuZ3Ro'@;
put 'O2JyZWFrO2Nhc2UiPC9mPiI6U2UuZi5wdXNoKHhyKHkuc2xpY2UoSGUsRnQpKSk7YnJlYWs7Y2FzZSI8c3FyZWY+IjpDdD1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6Y3Q9eS5zbGljZShDdCxGdCksUD1jdD9jdC5pbmRleE9mKCIgIik+LTE/Y3Q6T2koY3QpOiIiLFNlLnJl'@;
put 'Zj1QLHZlLmZvckVhY2goZnVuY3Rpb24oVHQpe1R0LnJlZj1QfSk7YnJlYWs7Y2FzZSI8Y29sb3JTY2FsZSI6Y2FzZSI8Y29sb3JTY2FsZT4iOmNhc2UiPGRhdGFCYXIiOmNhc2UiPGRhdGFCYXI+IjpjYXNlIjxpY29uU2V0IjpjYXNlIjxpY29uU2V0PiI6R2U9e2Nmdm9zOltdLGNvbG9yczpb'@;
put 'XSx0YWc6a3R9LEhlPUZ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvY29sb3JTY2FsZT4iOlNlLmNvbG9yU2NhbGU9R2U7YnJlYWs7Y2FzZSI8L2RhdGFCYXI+IjpTZS5kYXRhQmFyPUdlO2JyZWFrO2Nhc2UiPC9pY29uU2V0PiI6U2UuaWNvblNldD1HZTticmVhaztjYXNlIjxjZnZvIjpjYXNl'@;
put 'IjxjZnZvLz4iOkdlLmNmdm9zLnB1c2goa3QpO2JyZWFrO2Nhc2UiPC9jZnZvPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOkdlLmNvbG9ycy5wdXNoKGt0KTticmVhaztjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxl'@;
put 'eHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTticmVhaztjYXNlIjxuZWdhdGl2ZUZpbGxDb2xvciI6Y2FzZSI8YXhpc0NvbG9yIjpjYXNlIjxib3JkZXJDb2xvciI6Y2FzZSI8bmVnYXRpdmVCb3JkZXJDb2xvciI6Y2FzZSI8Y2ZJY29uIjpTZS5kZWw9ITA7YnJlYWs7Y2FzZSI8'@;
put 'ZHhmPiI6X2U9ITAsZHQ9RnQ7YnJlYWs7Y2FzZSI8L2R4Zj4iOl9lPSExLFNlLnM9eEQoeS5zbGljZShkdCxGdCtidC5sZW5ndGgpLHJlLFEsTCk7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURil7aWYoZ2UpYnJlYWs7aWYoIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra3Rb'@;
put 'MF0rIiBpbiBjb25kZm10Iil9fXJldHVybiBidH0pLHZlfSh5LGdlLFAsTCxRLHJlKX12YXIgekk9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi9nO2Z1bmN0aW9uIGM1KHksUCl7dmFyIEw9MCxRPTAscmU9MCxnZT0wO2lmKCFQfHwhUC5DZWxsWGYpcmV0dXJuIG51'@;
put 'bGw7dmFyIF9lPVAuQ2VsbFhmW3ldO251bGwhPV9lJiYobnVsbCE9X2UubnVtRm10SWQmJihMPV9lLm51bUZtdElkKSxudWxsIT1fZS5maWxsSWQmJihRPV9lLmZpbGxJZCksbnVsbCE9X2UuZm9udElkJiYocmU9X2UuZm9udElkKSxudWxsIT1fZS5ib3JkZXJJZCYmKGdlPV9lLmJvcmRlcklk'@;
put 'KSk7dmFyIHZlPXt0OiJ6In07dHJ5e3A2KHZlLEwsUSxyZSxnZSx7V1RGOjEsY2VsbFN0eWxlczohMH0sMCxQKX1jYXRjaHt9cmV0dXJuIHZlLnN9ZnVuY3Rpb24gVUkoeSxQLEwsUSl7aWYodm9pZCAwPT09eS52JiZ2b2lkIDA9PT15LmYmJm51bGw9PXkucyYmIXkuY3x8InoiPT09eS50JiYh'@;
put 'eS5jJiYhUS5zaGVldFN0dWJzKXJldHVybiIiO3ZhciByZT0iIixnZT15LnQsX2U9eS52O2lmKCJ6IiE9PXkudClzd2l0Y2goeS50KXtjYXNlImIiOnJlPXkudj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6cmU9IiIreS52O2JyZWFrO2Nhc2UiZSI6cmU9UW9beS52XTticmVhaztjYXNlImQiOlEm'@;
put 'JlEuY2VsbERhdGVzP3JlPUh0KHkudiwtMSkudG9JU09TdHJpbmcoKTooKHk9b24oeSkpLnQ9Im4iLHJlPSIiKyh5LnY9VWUoSHQoeS52KSkpKSx0eXBlb2YgeS56PiJ1IiYmKHkuej13Ll90YWJsZVsxNF0pO2JyZWFrO2RlZmF1bHQ6cmU9eS52fXZhciB2ZT0ieiI9PXkudD8iIjpmcygidiIs'@;
put 'SHIocmUpKSxTZT17cjpQfSxIZT1RP2d1KFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx5LFEpOjA7c3dpdGNoKDAhPT1IZSYmKFNlLnM9SGUpLHkudCl7Y2FzZSJuIjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6U2UudD0iZCI7YnJlYWs7Y2FzZSJiIjpTZS50PSJiIjticmVhaztjYXNlImUiOlNl'@;
put 'LnQ9ImUiO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09eS52KXtkZWxldGUgeS50O2JyZWFrfWlmKFEmJlEuYm9va1NTVCl7dmU9ZnMoInYiLCIiK3d2KFEuU3RyaW5ncyx5LnYseS5SP3kucj1KaCh5LlIpOm51bGwsUS5yZXZTdHJpbmdzKSksU2UudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheSh5'@;
put 'LlIpPyh2ZT0iPGlzPiIrSmgoeS5SKSsiPC9pcz4iLFNlLnQ9ImlubGluZVN0ciIpOlNlLnQ9InN0ciJ9aWYoeS50IT1nZSYmKHkudD1nZSx5LnY9X2UpLHkuZil7dmFyIEJlPXkuRiYmeS5GLnNsaWNlKDAsUC5sZW5ndGgpPT1QP3t0OiJhcnJheSIscmVmOnkuRn06bnVsbDt2ZT1TcigiZiIs'@;
put 'SHIoeS5mKSxCZSkrKG51bGwhPXkudj92ZToiIil9cmV0dXJuIHkubCYmTFsiIWxpbmtzIl0ucHVzaChbUCx5LmxdKSx5LmMmJkxbIiFjb21tZW50cyJdLnB1c2goW1AseS5jXSksU3IoImMiLHZlLFNlKX12YXIgWkk9ZnVuY3Rpb24oKXt2YXIgeT0vPCg/Olx3KzopP2NbIFwvPl0vLFA9Lzxc'@;
put 'Lyg/Olx3KzopP3Jvdz4vLEw9L3I9WyInXShbXiInXSopWyInXS8sUT0vPCg/Olx3KzopP2lzPihbXFNcc10qPyk8XC8oPzpcdys6KT9pcz4vLHJlPS9yZWY9WyInXShbXiInXSopWyInXS8sZ2U9dWwoInYiKSxfZT11bCgiZiIpO3JldHVybiBmdW5jdGlvbihTZSxIZSxCZSxHZSxudCxkdCxD'@;
put 'dCl7Zm9yKHZhciB1bixxbixlcix0cixRcixjdD0wLGJ0PSIiLEZ0PVtdLGt0PVtdLFR0PTAsWnQ9MCxwbj0wLEtuPSIiLHpuPTAsa249MCxabj0wLEJyPTAsc2k9MCx4aT0wLExpPUFycmF5LmlzQXJyYXkoQ3QuQ2VsbFhmKSx1cj1bXSxBbj1bXSx2cj1BcnJheS5pc0FycmF5KEJlKSxycj1b'@;
put 'XSxTbj17fSxtcj0hMSx3aT1TZS5zcGxpdChQKSxVcj0hIUdlLnNoZWV0U3R1YnMsamk9ISFHZS5jZWxsSFRNTCxfbz0hKCExPT09R2UuY2VsbFRleHQmJiFHZS5jZWxsTkYmJiFHZS5jZWxsU3R5bGVzKSxUaT0wLFlvPXdpLmxlbmd0aDtUaSE9WW87KytUaSl7dmFyIGxvPShidD13aVtUaV0u'@;
put 'dHJpbSgpKS5sZW5ndGg7aWYoMCE9PWxvKXt2YXIgQW89MDtlOmZvcihjdD0wO2N0PGxvOysrY3Qpc3dpdGNoKGJ0W2N0XSl7Y2FzZSI+IjppZigiLyIhPWJ0W2N0LTFdKXsrK2N0O2JyZWFrIGV9R2UuY2VsbFN0eWxlcyYmbnVsbCE9KHFuPWxuKGJ0LnNsaWNlKEFvLGN0KSwhMCkpLnImJnBh'@;
put 'cnNlSW50KHFuLnIsMTApJiYoem49cGFyc2VJbnQocW4uciwxMCksU249e30sbXI9ITEscW4uaHQmJihtcj0hMCxTbi5ocHQ9cGFyc2VGbG9hdChxbi5odCksU24uaHB4PVUxKFNuLmhwdCkpLHFuLmR5RGVzY2VudCYmKG1yPSEwLFNuLmR5RGVzY2VudD1xbi5keURlc2NlbnQpLCIxIj09cW4u'@;
put 'aGlkZGVuJiYobXI9ITAsU24uaGlkZGVuPSEwKSxudWxsIT1xbi5vdXRsaW5lTGV2ZWwmJihtcj0hMCxTbi5sZXZlbD0rcW4ub3V0bGluZUxldmVsKSxxbi5zJiZDdCYmQ3QuQ2VsbFhmJiYobXI9ITAsU24ucz1jNShxbi5zLEN0KSksbXImJihyclt6bi0xXT1TbikpO2JyZWFrO2Nhc2UiPCI6'@;
put 'QW89Y3R9aWYoQW8+PWN0KWJyZWFrO2lmKHpuPW51bGwhPShxbj1sbihidC5zbGljZShBbyxjdCksITApKS5yP3BhcnNlSW50KHFuLnIsMTApOnpuKzEsa249LTEsIShHZS5zaGVldFJvd3MmJkdlLnNoZWV0Um93czx6bikpe0dlLm5vZGltfHwobnQucy5yPnpuLTEmJihudC5zLnI9em4tMSks'@;
put 'bnQuZS5yPHpuLTEmJihudC5lLnI9em4tMSkpO3ZhciB4bz17dDoicm93Iixyb3c6W10sUjp6bi0xLGlkeDpIZX07R2UuY2VsbFN0eWxlcyYmKFNuPXt9LG1yPSExLHFuLmh0JiYobXI9ITAsU24uaHB0PXBhcnNlRmxvYXQocW4uaHQpLFNuLmhweD1VMShTbi5ocHQpKSxxbi5keURlc2NlbnQm'@;
put 'Jihtcj0hMCxTbi5keURlc2NlbnQ9cW4uZHlEZXNjZW50KSwiMSI9PXFuLmhpZGRlbiYmKG1yPSEwLFNuLmhpZGRlbj0hMCksbnVsbCE9cW4ub3V0bGluZUxldmVsJiYobXI9ITAsU24ubGV2ZWw9K3FuLm91dGxpbmVMZXZlbCkscW4ucyYmKG1yPSEwLFNuLnM9YzUocW4ucyxDdCkpLG1yJiYo'@;
put 'R2UuY2FsbGJhY2s/eG8ucHJvcHM9U246cnJbem4tMV09U24pKSxGdD1idC5zbGljZShjdCkuc3BsaXQoeSk7Zm9yKHZhciBoaT0wO2hpIT1GdC5sZW5ndGgmJiI8Ij09RnRbaGldLnRyaW0oKS5jaGFyQXQoMCk7KytoaSk7Zm9yKEZ0PUZ0LnNsaWNlKGhpKSxjdD0wO2N0IT1GdC5sZW5ndGg7'@;
put 'KytjdClpZigwIT09KGJ0PUZ0W2N0XS50cmltKCkpLmxlbmd0aCl7aWYoa3Q9YnQubWF0Y2goTCksVHQ9Y3QsWnQ9MCxwbj0wLGJ0PSI8YyAiKygiPCI9PWJ0LnNsaWNlKDAsMSk/Ij4iOiIiKStidCxudWxsIT1rdCYmMj09PWt0Lmxlbmd0aCl7Zm9yKFR0PTAsS249a3RbMV0sWnQ9MDtadCE9'@;
put 'S24ubGVuZ3RoJiYhKChwbj1Lbi5jaGFyQ29kZUF0KFp0KS02NCk8MXx8cG4+MjYpOysrWnQpVHQ9MjYqVHQrcG47a249LS1UdH1lbHNlKytrbjtmb3IoWnQ9MDtadCE9YnQubGVuZ3RoJiY2MiE9PWJ0LmNoYXJDb2RlQXQoWnQpOysrWnQpO2lmKCsrWnQsKHFuPWxuKGJ0LnNsaWNlKDAsWnQp'@;
put 'LCEwKSkucnx8KHFuLnI9ZGkoe3I6em4tMSxjOmtufSkpLHVuPXt0OiIifSxudWxsIT0oa3Q9KEtuPWJ0LnNsaWNlKFp0KSkubWF0Y2goZ2UpKSYmIiIhPT1rdFsxXSYmKHVuLnY9eHIoa3RbMV0pKSxHZS5jZWxsRm9ybXVsYSl7aWYobnVsbCE9KGt0PUtuLm1hdGNoKF9lKSkmJiIiIT09a3Rb'@;
put 'MV0pe2lmKHVuLmY9eHIoUGkoa3RbMV0pKS5yZXBsYWNlKC9cclxuL2csIlxuIiksR2UueGxmbnx8KHVuLmY9RzEodW4uZikpLGt0WzBdLmluZGV4T2YoJ3Q9ImFycmF5IicpPi0xKXVuLkY9KEtuLm1hdGNoKHJlKXx8W10pWzFdLHVuLkYuaW5kZXhPZigiOiIpPi0xJiZ1ci5wdXNoKFtPaSh1'@;
put 'bi5GKSx1bi5GXSk7ZWxzZSBpZihrdFswXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEpe3RyPWxuKGt0WzBdKTt2YXIgdGE9eHIoUGkoa3RbMV0pKTtHZS54bGZufHwodGE9RzEodGEpKSxBbltwYXJzZUludCh0ci5zaSwxMCldPVt0cix0YSxxbi5yXX19ZWxzZShrdD1Lbi5tYXRjaCgvPGZb'@;
put 'Xj5dKlwvPi8pKSYmQW5bKHRyPWxuKGt0WzBdKSkuc2ldJiYodW4uZj1uSShBblt0ci5zaV1bMV0sQW5bdHIuc2ldWzJdLHFuLnIpKTt2YXIgTW49c3MocW4ucik7Zm9yKFp0PTA7WnQ8dXIubGVuZ3RoOysrWnQpTW4ucj49dXJbWnRdWzBdLnMuciYmTW4ucjw9dXJbWnRdWzBdLmUuciYmTW4u'@;
put 'Yz49dXJbWnRdWzBdLnMuYyYmTW4uYzw9dXJbWnRdWzBdLmUuYyYmKHVuLkY9dXJbWnRdWzFdKX1pZihudWxsPT1xbi50JiZ2b2lkIDA9PT11bi52KWlmKHVuLmZ8fHVuLkYpdW4udj0wLHVuLnQ9Im4iO2Vsc2V7aWYoIVVyKWNvbnRpbnVlO3VuLnQ9InoifWVsc2UgdW4udD1xbi50fHwibiI7'@;
put 'c3dpdGNoKG50LnMuYz5rbiYmKG50LnMuYz1rbiksbnQuZS5jPGtuJiYobnQuZS5jPWtuKSx1bi50KXtjYXNlIm4iOmlmKCIiPT11bi52fHxudWxsPT11bi52KXtpZighVXIpY29udGludWU7dW4udD0ieiJ9ZWxzZSB1bi52PXBhcnNlRmxvYXQodW4udik7YnJlYWs7Y2FzZSJzIjppZih0eXBl'@;
put 'b2YgdW4udj4idSIpe2lmKCFVciljb250aW51ZTt1bi50PSJ6In1lbHNlIGVyPWY2W3BhcnNlSW50KHVuLnYsMTApXSx1bi52PWVyLnQsdW4ucj1lci5yLGVyLlImJih1bi5SPWVyLlIpLGppJiYodW4uaD1lci5oKTticmVhaztjYXNlInN0ciI6dW4udD0icyIsdW4udj1udWxsIT11bi52P1Bp'@;
put 'KHVuLnYpOiIiLGppJiYodW4uaD1ybyh1bi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOmt0PUtuLm1hdGNoKFEpLHVuLnQ9InMiLG51bGwhPWt0JiYoZXI9RDkoa3RbMV0pKT8odW4udj1lci50LGVyLlImJih1bi5SPWVyLlIpLGppJiYodW4uaD1lci5oKSk6dW4udj0iIjticmVhaztjYXNl'@;
put 'ImIiOnVuLnY9eXIodW4udik7YnJlYWs7Y2FzZSJkIjpHZS5jZWxsRGF0ZXM/dW4udj1IdCh1bi52LDEpOih1bi52PVVlKEh0KHVuLnYsMSkpLHVuLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09R2UuY2VsbFRleHQmJih1bi53PXVuLnYpLHVuLnY9S2FbdW4udl19aWYoX28pe1puPUJyPXNp'@;
put 'PXhpPTAsUXI9bnVsbCxMaSYmdm9pZCAwIT09cW4ucyYmbnVsbCE9KFFyPUN0LkNlbGxYZltxbi5zXSkmJihudWxsIT1Rci5udW1GbXRJZCYmKFpuPVFyLm51bUZtdElkKSxHZS5jZWxsU3R5bGVzJiYobnVsbCE9UXIuZmlsbElkJiYoQnI9UXIuZmlsbElkKSxudWxsIT1Rci5mb250SWQmJihz'@;
put 'aT1Rci5mb250SWQpLG51bGwhPVFyLmJvcmRlcklkJiYoeGk9UXIuYm9yZGVySWQpKSk7dHJ5e3A2KHVuLFpuLEJyLHNpLHhpLEdlLDAsQ3QpfWNhdGNoe31HZS5jZWxsU3R5bGVzJiZ1bi5zJiYoUXImJlFyLmFsaWdubWVudCYmKHVuLnMuYWxpZ25tZW50PW9uKFFyLmFsaWdubWVudCkpLFFy'@;
put 'JiZRci5wcm90ZWN0aW9uJiYobnVsbCE9UXIucHJvdGVjdGlvbi5oaWRkZW4mJih1bi5zLmhpZGRlbj1Rci5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9UXIucHJvdGVjdGlvbi5lZGl0YWJsZSYmKHVuLnMuZWRpdGFibGU9UXIucHJvdGVjdGlvbi5lZGl0YWJsZSkpLFFyJiZRci5zdHlsZSYm'@;
put 'KHVuLnMuc3R5bGU9UXIuc3R5bGUpKSxHZS5jZWxsRGF0ZXMmJkxpJiYibiI9PXVuLnQmJncuaXNfZGF0ZSh3Ll90YWJsZVtabl0pJiYodW4udD0iZCIsdW4udj1odCh1bi52KSl9dmFyIE1zO0dlLm5vZGltJiYoTXM9c3MocW4uciksbnQucy5yPk1zLnImJihudC5zLnI9TXMuciksbnQuZS5y'@;
put 'PE1zLnImJihudC5lLnI9TXMucikpLEdlLmNhbGxiYWNrPyhNcz1zcyhxbi5yKSx4by5yb3dbTXMuY109dW4pOnZyPyhCZVsoTXM9c3MocW4ucikpLnJdfHwoQmVbTXMucl09W10pLEJlW01zLnJdW01zLmNdPXVuKTpCZVtxbi5yXT11bn1HZS5jYWxsYmFjayYmR2UuY2FsbGJhY2soeG8pfX19'@;
put 'VXImJiFHZS5jYWxsYmFjayYmYzUoMCxDdCkscnIubGVuZ3RoPjAmJihCZVsiIXJvd3MiXT1ycil9fSgpLFJTPVNyKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOmlzLm1haW5bMF0sInhtbG5zOnIiOmlzLnIsInhtbG5zOngxNGFjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZp'@;
put 'Y2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVuY3Rpb24gV0koeSxQLEwsUSl7dmFyIF9lLHJlPVtCbixSU10s'@;
put 'dmU9IiIsU2U9TC5TaGVldHNbTC5TaGVldE5hbWVzW3ldXTtudWxsPT1TZSYmKFNlPXt9KTt2YXIgSGU9U2VbIiFyZWYiXXx8IkExIixCZT1PaShIZSk7aWYoQmUuZS5jPjE2MzgzfHxCZS5lLnI+MTA0ODU3NSl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiK0hlKyIgZXhjZWVk'@;
put 'cyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO0JlLmUuYz1NYXRoLm1pbihCZS5lLmMsMTYzODMpLEJlLmUucj1NYXRoLm1pbihCZS5lLmMsMTA0ODU3NSksSGU9T28oQmUpfVF8fChRPXt9KSxTZVsiIWNvbW1lbnRzIl09W107dmFyIEdlPVtdLG50PVNlWyIhcHJpbnQiXTtpZihmdW5j'@;
put 'dGlvbiBabyh5LFAsTCxRLHJlKXt2YXIgZ2U9ITEsX2U9e30sdmU9bnVsbDtpZigieGxzeCIhPT1RLmJvb2tUeXBlJiZQLnZiYXJhdyl7dmFyIFNlPVAuU2hlZXROYW1lc1tMXTt0cnl7UC5Xb3JrYm9vayYmKFNlPVAuV29ya2Jvb2suU2hlZXRzW0xdLkNvZGVOYW1lfHxTZSl9Y2F0Y2h7fWdl'@;
put 'PSEwLF9lLmNvZGVOYW1lPUhyKFNlKX15JiZ5WyIhY29uZGZtdCJdJiYoX2UuZW5hYmxlRm9ybWF0Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIxIikseSYmeVsiIXRhYmNvbG9yIl0mJih2ZT0odmV8fCIiKSsnPHRhYkNvbG9yIHJnYj0iRkYnK091KHlbIiF0YWJjb2xvciJdLnJnYikrJyIvPicp'@;
put 'O3ZhciBIZT0hMSxCZT17fTtpZigoKCh5fHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5maXQmJihIZT0hMCxCZS5maXRUb1BhZ2U9MSksSGUmJih2ZT0odmV8fCIiKStTcigicGFnZVNldFVwUHIiLG51bGwsQmUpKSx5JiZ5WyIhb3V0bGluZSJdKXt2YXIgR2U9e3N1bW1hcnlCZWxv'@;
put 'dzoxLHN1bW1hcnlSaWdodDoxfTt5WyIhb3V0bGluZSJdLmFib3ZlJiYoR2Uuc3VtbWFyeUJlbG93PTApLHlbIiFvdXRsaW5lIl0ubGVmdCYmKEdlLnN1bW1hcnlSaWdodD0wKSx2ZT0odmV8fCIiKStTcigib3V0bGluZVByIixudWxsLEdlKX0hZ2UmJiF2ZXx8KHJlW3JlLmxlbmd0aF09U3Io'@;
put 'InNoZWV0UHIiLHZlLF9lKSl9KFNlLEwseSxQLHJlKSxyZVtyZS5sZW5ndGhdPVNyKCJkaW1lbnNpb24iLG51bGwse3JlZjpIZX0pLHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gT3YoeSxQLEwsUSl7dmFyIHJlPXt3b3JrYm9va1ZpZXdJZDoiMCJ9O2lmKCgoKFF8fHt9KS5Xb3JrYm9va3x8e30p'@;
put 'LlZpZXdzfHxbXSkubGVuZ3RoKXt2YXIgZ2U9US5Xb3JrYm9vay5WaWV3cyxfZT1nZVtMXXx8Z2VbMF07cmUucmlnaHRUb0xlZnQ9X2UuUlRMPyIxIjoiMCIsX2Uuem9vbSYmKHJlLnpvb21TY2FsZT1fZS56b29tKSxudWxsIT1fZS5ncmlkJiYocmUuc2hvd0dyaWRMaW5lcz1fZS5ncmlkKSxf'@;
put 'ZS52aWV3JiYocmUudmlldz1fZS52aWV3KX1udWxsIT15WyIhZ3JpZGxpbmVzIl0mJihyZS5zaG93R3JpZExpbmVzPSEheVsiIWdyaWRsaW5lcyJdKTt2YXIgdmU9IiIsU2U9e3I6MCxjOjB9O2lmKHlbIiFzZWwiXSl7aWYoIShTZT15WyIhc2VsIl0uY2VsbCkpe2lmKCF5WyIhc2VsIl0ucmFu'@;
put 'Z2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO1NlPVdzKHlbIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zfSJzdHJpbmciPT10eXBlb2YgU2UmJihTZT1zcyhTZSkpfXZhciBCZT15WyIhZnJlZXplIl0/InN0cmlu'@;
put 'ZyI9PXR5cGVvZiB5WyIhZnJlZXplIl0/c3MoeVsiIWZyZWV6ZSJdKTp5WyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKHlbIiFmcmVlemUiXSl7dmFyIEdlPWRpKEJlKSxudD17c3RhdGU6ImZyb3plbiIseFNwbGl0OkJlLmMseVNwbGl0OkJlLnIsdG9wTGVmdENlbGw6R2V9O3lbIiFzZWwiXSYm'@;
put 'KG50LmFjdGl2ZVBhbmU9KFNlLnI+PUJlLnImJkJlLnI+MD8iYm90dG9tIjoidG9wIikrKFNlLmM+PUJlLmMmJkJlLmM+MD8iUmlnaHQiOiJMZWZ0IikpLHZlPVNyKCJwYW5lIixudWxsLG50KX1pZih5WyIhc2VsIl0pe3ZhciBkdD17YWN0aXZlQ2VsbDoic3RyaW5nIj09dHlwZW9mIFNlP1Nl'@;
put 'OmRpKFNlKX07ZHQuc3FyZWY9eVsiIXNlbCJdLnJhbmdlP3lbIiFzZWwiXS5yYW5nZTpkdC5hY3RpdmVDZWxsKyI6IitkdC5hY3RpdmVDZWxsLHZlKz1Tcigic2VsZWN0aW9uIixudWxsLGR0KSx5WyIhZnJlZXplIl0mJihCZS5jPjAmJihkdC5wYW5lPSJ0b3BSaWdodCIsdmUrPVNyKCJzZWxl'@;
put 'Y3Rpb24iLG51bGwsZHQpKSxCZS5yPjAmJihkdC5wYW5lPSJib3R0b21MZWZ0Iix2ZSs9U3IoInNlbGVjdGlvbiIsbnVsbCxkdCkpLEJlLmM+MCYmQmUucj4wJiYoZHQucGFuZT0iYm90dG9tUmlnaHQiLHZlKz1Tcigic2VsZWN0aW9uIixudWxsLGR0KSkpfXJldHVybiBTcigic2hlZXRWaWV3'@;
put 'cyIsU3IoInNoZWV0VmlldyIsdmV8fG51bGwscmUpLHt9KX0oU2UsMCx5LEwpLFAuc2hlZXRGb3JtYXQpe3ZhciBkdD17ZGVmYXVsdFJvd0hlaWdodDpQLnNoZWV0Rm9ybWF0LmRlZmF1bHRSb3dIZWlnaHR8fCIxNiIsYmFzZUNvbFdpZHRoOlAuc2hlZXRGb3JtYXQuYmFzZUNvbFdpZHRofHwi'@;
put 'MTAifTtudWxsIT1QLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyYmKGR0Lm91dGxpbmVMZXZlbFJvdz1QLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdykscmVbcmUubGVuZ3RoXT1Tcigic2hlZXRGb3JtYXRQciIsbnVsbCxkdCl9ZWxzZSBpZihTZVsiIXNoZWV0Rm9ybWF0Il0pe3Zh'@;
put 'ciBDdD17fSxjdD0hMTtTZVsiIXNoZWV0Rm9ybWF0Il0ucm93JiYoU2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KGN0PSEwLEN0LmRlZmF1bHRSb3dIZWlnaHQ9U2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQsQ3QuY3VzdG9tSGVpZ2h0PTEpOlNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4'@;
put 'PyhjdD0hMCxDdC5kZWZhdWx0Um93SGVpZ2h0PWoyKFNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSxDdC5jdXN0b21IZWlnaHQ9MSk6KDA9PT1TZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdHx8MD09PVNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHxTZVsiIXNoZWV0Rm9ybWF0Il0ucm93'@;
put 'LmhpZGRlbikmJihjdD0hMCxDdC5kZWZhdWx0Um93SGVpZ2h0PUN0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LEN0LmN1c3RvbUhlaWdodD0xLEN0Lnplcm9IZWlnaHQ9MSksU2VbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCYmKEN0WyJ4MTRhYzpkeURlc2NlbnQiXT1TZVsiIXNoZWV0Rm9ybWF0'@;
put 'Il0uZHlEZXNjZW50KSksU2VbIiFzaGVldEZvcm1hdCJdLmNvbCYmKFNlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHxwdShTZVsiIXNoZWV0Rm9ybWF0Il0uY29sKSxDdC5kZWZhdWx0Q29sV2lkdGg9U2VbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS9wbHx8MCxjdD0hMCksbnVsbD09Q3Qu'@;
put 'ZGVmYXVsdFJvd0hlaWdodCYmKEN0LmRlZmF1bHRSb3dIZWlnaHQ9MTYpLG51bGw9PUN0LmRlZmF1bHRDb2xXaWR0aCYmKEN0LmRlZmF1bHRDb2xXaWR0aD0xMCksQ3Qub3V0bGluZUxldmVsUm93PUN0Lm91dGxpbmVMZXZlbFJvd3x8NyxjdCYmKHJlW3JlLmxlbmd0aF09U3IoInNoZWV0Rm9y'@;
put 'bWF0UHIiLG51bGwsQ3QpKX1udWxsIT1TZVsiIWNvbHMiXSYmU2VbIiFjb2xzIl0ubGVuZ3RoPjAmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIER2KHksUCxMKXtmb3IodmFyIHJlLFE9WyI8Y29scz4iXSxnZT0wO2dlIT1QLmxlbmd0aDsrK2dlKWlmKHJlPVBbZ2VdKXtpZihyZS5hdXRvJiZO'@;
put 'aSh5LHJlLGdlKSxyZS5zfHxyZS56KXt2YXIgX2U9e3Q6InoifTtudWxsIT1yZS5zJiYoX2Uucz1yZS5zKSxudWxsIT1yZS56JiYoX2Uuej1yZS56KSxyZS5zdHlsZT1ndShMLmNlbGxYZnMsTC5jZWxsU3R5bGVYZnMsX2UsTCl9UVtRLmxlbmd0aF09U3IoImNvbCIsbnVsbCxZZChnZSxyZSkp'@;
put 'fXJldHVybiBRW1EubGVuZ3RoXT0iPC9jb2xzPiIsUS5qb2luKCIiKX0oU2UsU2VbIiFjb2xzIl0sUCkpLHJlW19lPXJlLmxlbmd0aF09IjxzaGVldERhdGEvPiIsU2VbIiFsaW5rcyJdPVtdLG51bGwhPVNlWyIhcmVmIl0mJih2ZT1mdW5jdGlvbiBZSSh5LFAsTCxRKXt2YXIgU2UsYnQscmU9'@;
put 'W10sZ2U9W10sX2U9T2koeVsiIXJlZiJdKSx2ZT0iIixIZT0iIixCZT1bXSxHZT0wLG50PTAsZHQ9eVsiIXJvd3MiXSxDdD1BcnJheS5pc0FycmF5KHkpLGN0PXtyOkhlfSxGdD0tMTtmb3IobnQ9X2Uucy5jO250PD1fZS5lLmM7KytudClCZVtudF09TnMobnQpO2ZvcihHZT1fZS5zLnI7R2U8'@;
put 'PV9lLmUucjsrK0dlKXtmb3IoZ2U9W10sSGU9SHMoR2UpLG50PV9lLnMuYztudDw9X2UuZS5jOysrbnQpe1NlPUJlW250XStIZTt2YXIga3Q9Q3Q/KHlbR2VdfHxbXSlbbnRdOnlbU2VdO3ZvaWQgMCE9PWt0JiZudWxsIT0odmU9VUkoa3QsU2UseSxQKSkmJmdlLnB1c2godmUpfShnZS5sZW5n'@;
put 'dGg+MHx8ZHQmJmR0W0dlXSkmJihjdD17cjpIZX0sZHQmJmR0W0dlXSYmKChidD1kdFtHZV0pLmhpZGRlbiYmKGN0LmhpZGRlbj0xKSxGdD0tMSxidC5ocHg/RnQ9ajIoYnQuaHB4KTpidC5ocHQmJihGdD1idC5ocHQpLEZ0Pi0xJiYoY3QuaHQ9RnQsY3QuY3VzdG9tSGVpZ2h0PTEpLGJ0Lmxl'@;
put 'dmVsJiYoY3Qub3V0bGluZUxldmVsPWJ0LmxldmVsKSxidC5keURlc2NlbnQmJihjdFsieDE0YWM6ZHlEZXNjZW50Il09YnQuZHlEZXNjZW50KSxidC5zJiYoY3Qucz1ndShQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6InoiLHM6YnQuc30sUCksY3QuY3VzdG9tRm9ybWF0PTEpKSxyZVty'@;
put 'ZS5sZW5ndGhdPVNyKCJyb3ciLGdlLmpvaW4oIiIpLGN0KSl9aWYoZHQpZm9yKDtHZTxkdC5sZW5ndGg7KytHZSlkdCYmZHRbR2VdJiYoY3Q9e3I6R2UrMX0sKGJ0PWR0W0dlXSkuaGlkZGVuJiYoY3QuaGlkZGVuPTEpLEZ0PS0xLGJ0LmhweD9GdD1qMihidC5ocHgpOmJ0LmhwdCYmKEZ0PWJ0'@;
put 'LmhwdCksRnQ+LTEmJihjdC5odD1GdCxjdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwmJihjdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLHJlW3JlLmxlbmd0aF09U3IoInJvdyIsIiIsY3QpKTtyZXR1cm4gcmUuam9pbigiIil9KFNlLFApLHZlLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT12'@;
put 'ZSkpLHJlLmxlbmd0aD5fZSsxJiYocmVbcmUubGVuZ3RoXT0iPC9zaGVldERhdGE+IixyZVtfZV09cmVbX2VdLnJlcGxhY2UoIi8+IiwiPiIpKSxTZVsiIXByb3RlY3QiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gRWEoeSl7dmFyIFA9e3NoZWV0OjF9O3JldHVybiBBdi5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKEwpe251bGwhPXlbTF0mJnlbTF0mJihQW0xdPSIxIil9KSxUdi5mb3JFYWNoKGZ1bmN0aW9uKEwpe251bGwhPXlbTF0mJiF5W0xdJiYoUFtMXT0iMCIpfSkseS5wYXNzd29yZD9QLnBhc3N3b3JkPWFDKHkucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOnkuZW5j'@;
put 'cnlwdGlvbiYmKFAuYWxnb3JpdGhtTmFtZT15LmVuY3J5cHRpb24uYWxnbyxQLmhhc2hWYWx1ZT15LmVuY3J5cHRpb24uaGFzaCxQLnNhbHRWYWx1ZT15LmVuY3J5cHRpb24uc2FsdCxQLnNwaW5Db3VudD15LmVuY3J5cHRpb24uc3BpbiksU3IoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCxQKX0o'@;
put 'U2VbIiFwcm90ZWN0Il0pKSxudWxsIT1TZVsiIWF1dG9maWx0ZXIiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gRVMoeSxQLEwsUSl7dmFyIHJlPSJzdHJpbmciPT10eXBlb2YgeS5yZWY/eS5yZWY6T28oeS5yZWYpO0wuV29ya2Jvb2t8fChMLldvcmtib29rPXtTaGVldHM6W119KSxMLldv'@;
put 'cmtib29rLk5hbWVzfHwoTC5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIGdlPUwuV29ya2Jvb2suTmFtZXMsX2U9V3MocmUpO19lLnMucj09X2UuZS5yJiYoX2UuZS5yPVdzKFBbIiFyZWYiXSkuZS5yLHJlPU9vKF9lKSk7Zm9yKHZhciB2ZT0wO3ZlPGdlLmxlbmd0aDsrK3ZlKXt2YXIgU2U9Z2Vb'@;
put 'dmVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1TZS5OYW1lJiZTZS5TaGVldD09USl7U2UuUmVmPSInIitMLlNoZWV0TmFtZXNbUV0rIichIityZTticmVha319cmV0dXJuIHZlPT1nZS5sZW5ndGgmJmdlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6USxS'@;
put 'ZWY6IiciK0wuU2hlZXROYW1lc1tRXSsiJyEiK3JlfSksU3IoImF1dG9GaWx0ZXIiLG51bGwse3JlZjpyZX0pfShTZVsiIWF1dG9maWx0ZXIiXSxTZSxMLHkpKSxudWxsIT1TZVsiIW1lcmdlcyJdJiZTZVsiIW1lcmdlcyJdLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBKWih5'@;
put 'KXtpZigwPT09eS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPSc8bWVyZ2VDZWxscyBjb3VudD0iJyt5Lmxlbmd0aCsnIj4nLEw9MDtMIT15Lmxlbmd0aDsrK0wpUCs9JzxtZXJnZUNlbGwgcmVmPSInK09vKHlbTF0pKyciLz4nO3JldHVybiBQKyI8L21lcmdlQ2VsbHM+In0oU2VbIiFtZXJn'@;
put 'ZXMiXSkpLFNlWyIhY29uZGZtdCJdJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBqSSh5LFApe3JldHVybiB5Lm1hcChmdW5jdGlvbihMLFEpe3JldHVybiBmdW5jdGlvbiBQdSh5LFAsTCl7dmFyIFE9eS5zP0ZvKEwuRFhGLHkucyk6LTEscmU9InN0cmluZyI9PXR5cGVvZiB5LnJlZj95LnJl'@;
put 'ZjpPbyh5LnJlZiksX2U9T2kocmUucmVwbGFjZSgvXHMuKiQvLCIiKSkucztfZS5yPDAmJihfZS5yPTApLF9lLmM8MCYmKF9lLmM9MCk7dmFyIHZlPSIiLFNlPXtwcmlvcml0eTpQKzF9O3N3aXRjaChRPi0xJiYoU2UuZHhmSWQ9USkseS50KXtjYXNlInVuaXF1ZSI6U2UudHlwZT0idW5pcXVl'@;
put 'VmFsdWVzIjticmVhaztjYXNlImR1cCI6U2UudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJsYW5rIjpTZS50eXBlPSh5LnY/ImMiOiJub3RDIikrIm9udGFpbnNCbGFua3MiLHZlPSI8Zm9ybXVsYT5MRU4oVFJJTSgiK2RpKF9lKSsiKSkiKyh5LnY/Ij0iOiImZ3Q7IikrIjA8'@;
put 'L2Zvcm11bGE+IjticmVhaztjYXNlImVycm9yIjpTZS50eXBlPSh5LnY/ImMiOiJub3RDIikrIm9udGFpbnNFcnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6U2UudHlwZT0iZXhwcmVzc2lvbiIsdmU9U3IoImZvcm11bGEiLEhyKHkuZikse30pO2JyZWFrO2Nhc2UiZGF0ZSI6U2UudHlwZT0i'@;
put 'dGltZVBlcmlvZCIsU2UudGltZVBlcmlvZD1JU1t5Lm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaChTZS50eXBlPVNlLm9wZXJhdG9yPVJ2W3kub3BdLFNlLnRleHQ9eS52LHkub3Ape2Nhc2UiSU4iOnZlPSc8Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0goIicrSHIoeS52KSsnIiwnK2Rp'@;
put 'KF9lKSsiKSkpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6dmU9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNIKCInK0hyKHkudikrJyIsJytkaShfZSkrIikpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6dmU9Ijxmb3JtdWxhPkxFRlQoIitkaShfZSkrJyxMRU4oIicrSHIoeS52KSsnIikp'@;
put 'PSInK0hyKHkudikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjp2ZT0iPGZvcm11bGE+UklHSFQoIitkaShfZSkrJyxMRU4oIicrSHIoeS52KSsnIikpPSInK0hyKHkudikrJyI8L2Zvcm11bGE+J31icmVhaztjYXNlInZhbCI6U2UudHlwZT0iY2VsbElzIixTZS5vcGVyYXRvcj0kM1t5'@;
put 'Lm9wXSx2ZT1udWxsIT15Lm1pbj9TcigiZm9ybXVsYSIsSHIoU3RyaW5nKHkubWluKSkse30pK1NyKCJmb3JtdWxhIixIcihTdHJpbmcoeS5tYXgpKSx7fSk6U3IoImZvcm11bGEiLEhyKG51bGwhPXkudj9TdHJpbmcoInN0cmluZyI9PXR5cGVvZiB5LnY/JyInK3kudi5yZXBsYWNlKC8iL2cs'@;
put 'JyIiJykrJyInOnkudik6eS5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaChTZS50eXBlPSJhYm92ZUF2ZXJhZ2UiLFNlLmFib3ZlQXZlcmFnZT0iTCI9PXkub3AuY2hhckF0KDApPyIwIjoiMSIseS5vcC5jaGFyQXQoMSkpe2Nhc2UiVCI6U2UuZXF1YWxBdmVyYWdlPSIwIjticmVhaztj'@;
put 'YXNlIkUiOlNlLmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDpTZS5zdGREZXY9eS5vcC5jaGFyQXQoMSl9YnJlYWs7Y2FzZSJyYW5rIjpTZS50eXBlPSJ0b3AxMCIsU2UuYm90dG9tPSJCIj09eS5vcC5jaGFyQXQoMCk/IjEiOiIwIixTZS5wZXJjZW50PSJQIj09eS5vcC5jaGFyQXQo'@;
put 'MSk/IjEiOiIwIixTZS5yYW5rPXkudjticmVhaztjYXNlImljb24iOlNlLnR5cGU9Imljb25TZXQiO3ZhciBIZT17aWNvblNldDp5LnYscGVyY2VudDp5LnBjdD8idHJ1ZSI6ImZhbHNlIn07eS5yZXYmJihIZS5yZXZlcnNlPSJ0cnVlIikseS5oaWRkZW4mJihIZS5zaG93VmFsdWU9ImZhbHNl'@;
put 'IiksdmU9U3IoImljb25TZXQiLHkudGhyZXNoLm1hcChwZikuam9pbigiIiksSGUpO2JyZWFrO2Nhc2Uic2NhbGUiOlNlLnR5cGU9ImNvbG9yU2NhbGUiLHZlKz1wZih5LmNtaW4pLHkuY21pZCYmKHZlKz1wZih5LmNtaWQpKSx2ZSs9cGYoeS5jbWF4KSx2ZSs9VWQoeS5jbWluLmNvbG9yKSx5'@;
put 'LmNtaWQmJih2ZSs9VWQoeS5jbWlkLmNvbG9yKSksdmU9U3IoImNvbG9yU2NhbGUiLHZlKz1VZCh5LmNtYXguY29sb3IpLHt9KTticmVhaztjYXNlImJhciI6U2UudHlwZT0iZGF0YUJhciIsdmUrPXBmKHkuY21pbiksdmUrPXBmKHkuY21heCksdmU9U3IoImRhdGFCYXIiLHZlKz1VZCh5LmNv'@;
put 'bG9yKSx7fSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyh5KSwiQ0YgbWlzc2luZyB0eXBlICIreS50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIHNxcmVmPSInK3JlKyciPicrU3IoImNmUnVsZSIsIiI9PXZlP251bGw6dmUsU2UpKyI8L2NvbmRpdGlvbmFsRm9ybWF0'@;
put 'dGluZz4ifShMLFEsUCl9KS5qb2luKCIiKX0oU2VbIiFjb25kZm10Il0sUCkpLFNlWyIhdmFsaWRhdGlvbnMiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gTkkoeSl7aWYoIXl8fDA9PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD1bXSxMPTAsUT0wO1E8eS5sZW5ndGg7KytRKXt2YXIg'@;
put 'cmU9eVtRXSxnZT15NltyZS50XTtpZihyZS5yZWYmJigic3RyaW5nIiE9dHlwZW9mIHJlLnJlZnx8LTEhPXJlLnJlZi5pbmRleE9mKCIgIil8fChyZS5yZWY9T2kocmUucmVmKSxyZS5yZWYucyYmIShyZS5yZWYucy5jPDApKSkpeysrTDt2YXIgX2U9e3R5cGU6Z2UsYWxsb3dCbGFuazorKDAh'@;
put 'PXJlLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOisoMCE9cmUuaW5wdXQpLHNob3dFcnJvck1lc3NhZ2U6KygwIT1yZS5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5cGVvZiByZS5yZWY/cmUucmVmOk9vKHJlLnJlZil9O2lmKHJlLmlucHV0JiYocmUuaW5wdXQudGl0bGUmJihfZS5wcm9tcHRU'@;
put 'aXRsZT1xaShyZS5pbnB1dC50aXRsZSkpLHJlLmlucHV0Lm1lc3NhZ2UmJihfZS5wcm9tcHQ9cWkocmUuaW5wdXQubWVzc2FnZSkpKSxyZS5lcnJvciYmKHJlLmVycm9yLnRpdGxlJiYoX2UuZXJyb3JUaXRsZT1xaShyZS5lcnJvci50aXRsZSkpLHJlLmVycm9yLm1lc3NhZ2UmJihfZS5lcnJv'@;
put 'cj1xaShyZS5lcnJvci5tZXNzYWdlKSkscmUuZXJyb3Iuc3R5bGUmJihfZS5lcnJvclN0eWxlPXJlLmVycm9yLnN0eWxlKSksIWdlKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrcmUudCk7dmFyIHZlPSIiO3N3aXRjaChyZS50KXtjYXNlIkFu'@;
put 'eSI6YnJlYWs7Y2FzZSJMaXN0IjpjYXNlIkN1c3RvbSI6aWYocmUubCl7aWYocmUubC5qb2luKCIsIikubGVuZ3RoPjI1MCl0aHJvdyBuZXcgRXJyb3IoIkRWIGxlbmd0aCA+IDI1MCB0cmlnZ2VycyBjb3JydXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO3Zl'@;
put 'PSc8Zm9ybXVsYTE+IicrSHIocmUubC5qb2luKCIsIikpKyciPC9mb3JtdWxhMT4nfWVsc2UgdmU9Ijxmb3JtdWxhMT4iK0hyKHJlLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKCEk'@;
put 'M1tyZS5vcF0pdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIityZS5vcCsiIGZvciAiK3JlLnQpO2lmKF9lLm9wZXJhdG9yPSQzW3JlLm9wXSxudWxsIT1yZS52KXZlPSI8Zm9ybXVsYTE+IitIcihTdHJpbmcocmUudiBpbnN0YW5jZW9mIERhdGU/VWUocmUudik6'@;
put 'cmUudikpKyI8L2Zvcm11bGExPiI7ZWxzZXtpZihudWxsPT1yZS5taW58fG51bGw9PXJlLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK3JlLnQpO3ZlPSI8Zm9ybXVsYTE+IitIcihTdHJpbmco'@;
put 'cmUubWluIGluc3RhbmNlb2YgRGF0ZT9VZShyZS5taW4pOnJlLm1pbikpKyI8L2Zvcm11bGExPjxmb3JtdWxhMj4iK0hyKFN0cmluZyhyZS5tYXggaW5zdGFuY2VvZiBEYXRlP1VlKHJlLm1heCk6cmUubWF4KSkrIjwvZm9ybXVsYTI+In19UC5wdXNoKFNyKCJkYXRhVmFsaWRhdGlvbiIsdmV8'@;
put 'fG51bGwsX2UpKX19cmV0dXJuIEw+MD8nPGRhdGFWYWxpZGF0aW9ucyBjb3VudD0iJytMKyciPicrUC5qb2luKCIiKSsiPC9kYXRhVmFsaWRhdGlvbnM+IjoiIn0oU2VbIiF2YWxpZGF0aW9ucyJdKSk7dmFyIEZ0LGJ0PS0xLGt0PS0xO2lmKFNlWyIhbGlua3MiXS5sZW5ndGg+MCYmKHJlW3Jl'@;
put 'Lmxlbmd0aF09IjxoeXBlcmxpbmtzPiIsU2VbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24odW4pe3VuWzFdLlRhcmdldCYmKEZ0PXtyZWY6dW5bMF19LCIjIiE9dW5bMV0uVGFyZ2V0LmNoYXJBdCgwKSYmKGt0PXpvKFEsLTEsSHIodW5bMV0uVGFyZ2V0KS5yZXBsYWNlKC8jLiokLywiIiks'@;
put 'SGkuSExJTkspLEZ0WyJyOmlkIl09InJJZCIra3QpLChidD11blsxXS5UYXJnZXQuaW5kZXhPZigiIyIpKT4tMSYmKEZ0LmxvY2F0aW9uPUhyKHVuWzFdLlRhcmdldC5zbGljZShidCsxKSkpLHVuWzFdLlRvb2x0aXAmJihGdC50b29sdGlwPUhyKHVuWzFdLlRvb2x0aXApKSxyZVtyZS5sZW5n'@;
put 'dGhdPVNyKCJoeXBlcmxpbmsiLG51bGwsRnQpKX0pLHJlW3JlLmxlbmd0aF09IjwvaHlwZXJsaW5rcz4iKSxkZWxldGUgU2VbIiFsaW5rcyJdLG50KXt2YXIgVHQ9ZnVuY3Rpb24gd1MoeSl7aWYoeS5wcm9wcyl7dmFyIFA9e30sTD15LnByb3BzO3JldHVybiBMLmdyaWRsaW5lcyYmKFAuZ3Jp'@;
put 'ZExpbmVzPVAuZ3JpZExpbmVzU2V0PTEpLEwuaGVhZGluZ3MmJihQLmhlYWRpbmdzPTEpLEwuY2VudGVyWCYmKFAuaG9yaXpvbnRhbENlbnRlcmVkPTEpLEwuY2VudGVyWSYmKFAudmVydGljYWxDZW50ZXJlZD0xKSxTcigicHJpbnRPcHRpb25zIixudWxsLFApfXJldHVybiIifShudCk7VHQu'@;
put 'bGVuZ3RoJiYocmVbcmUubGVuZ3RoXT1UdCl9aWYoKG51bGwhPVNlWyIhbWFyZ2lucyJdfHxudCYmbnQubWFyZ2lucykmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIGI2KHkpe3JldHVybiBkZih5KSxTcigicGFnZU1hcmdpbnMiLG51bGwseSl9KFNlWyIhbWFyZ2lucyJdfHxudC5tYXJnaW5z'@;
put 'KSksbnQpe3ZhciBadD1mdW5jdGlvbiBPSSh5KXtpZih5LnByb3BzKXt2YXIgUD17fSxMPXkucHJvcHM7aWYoTC5vcmllbnRhdGlvbiYmKFAub3JpZW50YXRpb249TC5vcmllbnRhdGlvbiksTC5zY2FsZSYmKFAuc2NhbGU9TC5zY2FsZSksTC5maXQmJihudWxsIT1MLmZpdC5oZWlnaHQmJihQ'@;
put 'LmZpdFRvSGVpZ2h0PUwuZml0LmhlaWdodCksbnVsbCE9TC5maXQud2lkdGgmJihQLmZpdFRvV2lkdGg9TC5maXQud2lkdGgpKSxMLmRwaSYmKFAuaG9yaXpvbnRhbERwaT1QLnZlcnRpY2FsRHBpPUwuZHBpKSxudWxsIT1MLmZpcnN0JiYoUC5maXJzdFBhZ2VOdW1iZXI9TC5maXJzdCxQLnVz'@;
put 'ZUZpcnN0UGFnZU51bWJlcj0xKSxMLmJ3JiYoUC5ibGFja0FuZFdoaXRlPTEpLEwuZHJhZnQmJihQLmRyYWZ0PTEpLEwuY29tbWVudHMmJihQLmNlbGxDb21tZW50cz1DZVtMLmNvbW1lbnRzXXx8Im5vbmUiKSxMLmVycm9ycyYmKFAuZXJyb3JzPVJJW0wuZXJyb3JzXXx8Im5vbmUiKSxMLnBh'@;
put 'cGVyKXN3aXRjaCh0eXBlb2YgTC5wYXBlcil7Y2FzZSJudW1iZXIiOlAucGFwZXJTaXplPUwucGFwZXI7YnJlYWs7Y2FzZSJzdHJpbmciOlo5W0wucGFwZXJdP1AucGFwZXJTaXplPVo5W0wucGFwZXJdOitMLnBhcGVyJiYoUC5wYXBlclNpemU9K0wucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0'@;
put 'IjppZighTC5wYXBlci5oZWlnaHR8fCFMLnBhcGVyLndpZHRoKXRocm93IkN1c3RvbSBQYXBlciBTaXplIG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7UC5wYXBlckhlaWdodD1MLnBhcGVyLmhlaWdodCxQLnBhcGVyV2lkdGg9TC5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1'@;
put 'ZSIsIm92ZXIiXS5pbmRleE9mKEwub3JkZXIpPi0xJiYoUC5wYWdlT3JkZXI9Im92ZXJUaGVuRG93biIpLFNyKCJwYWdlU2V0dXAiLG51bGwsUCl9cmV0dXJuIiJ9KG50KTtadC5sZW5ndGgmJihyZVtyZS5sZW5ndGhdPVp0KSxadD1mdW5jdGlvbiBMdih5KXt2YXIgUD1bXSxMPSIiLFE9IiIs'@;
put 'cmU9IiIsZ2U9IiIsX2U9IiIsdmU9IiIsU2U9IiIsSGU9VzEoeS5oZWFkZXIpO0hlLmxlbmd0aCYmKFE9SGVbMF0sdmU9SGVbMV0sZ2U9SGVbMl0pO3ZhciBCZT1XMSh5LmZvb3Rlcik7cmV0dXJuIEJlLmxlbmd0aCYmKHJlPUJlWzBdLFNlPUJlWzFdLF9lPUJlWzJdKSxRJiZQLnB1c2goIjxv'@;
put 'ZGRIZWFkZXI+IitIcihRKSsiPC9vZGRIZWFkZXI+IikscmUmJlAucHVzaCgiPG9kZEZvb3Rlcj4iK0hyKHJlKSsiPC9vZGRGb290ZXI+IiksKF9lIT1yZXx8Z2UhPVEpJiYoTCs9JyBkaWZmZXJlbnRPZGRFdmVuPSIxIicsUC5wdXNoKCI8ZXZlbkhlYWRlcj4iK0hyKGdlKSsiPC9ldmVuSGVh'@;
put 'ZGVyPiIpLFAucHVzaCgiPGV2ZW5Gb290ZXI+IitIcihfZSkrIjwvZXZlbkZvb3Rlcj4iKSksKFNlIT1yZXx8dmUhPVEpJiYoTCs9JyBkaWZmZXJlbnRGaXJzdD0iMSInLFAucHVzaCgiPGZpcnN0SGVhZGVyPiIrSHIodmUpKyI8L2ZpcnN0SGVhZGVyPiIpLFAucHVzaCgiPGZpcnN0Rm9vdGVy'@;
put 'PiIrSHIoU2UpKyI8L2ZpcnN0Rm9vdGVyPiIpKSxQLmxlbmd0aD8iPGhlYWRlckZvb3RlciIrTCsiPiIrUC5qb2luKCIiKSsiPC9oZWFkZXJGb290ZXI+IjoiIn0obnQpLFp0Lmxlbmd0aCYmKHJlW3JlLmxlbmd0aF09WnQpfWlmKChudWxsIT1TZVsiIXJvd0JyZWFrcyJdfHxudCYmbnQucm93'@;
put 'QnJlYWtzKSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gRkkoeSl7aWYoMD09eS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPVsnPHJvd0JyZWFrcyBjb3VudD0iJyt5Lmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK3kubGVuZ3RoKyciPiddLEw9MDtMPHkubGVuZ3RoOysrTClQLnB1'@;
put 'c2goJzxicmsgaWQ9IicreVtMXS5SKyciIG1hbj0iMSIvPicpO3JldHVybiBQLmpvaW4oIiIpKyI8L3Jvd0JyZWFrcz4ifShTZVsiIXJvd0JyZWFrcyJdfHxudC5yb3dCcmVha3MpKSwobnVsbCE9U2VbIiFjb2xCcmVha3MiXXx8bnQmJm50LmNvbEJyZWFrcykmJihyZVtyZS5sZW5ndGhdPWZ1'@;
put 'bmN0aW9uIFFaKHkpe2lmKDA9PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD1bJzxjb2xCcmVha3MgY291bnQ9IicreS5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJyt5Lmxlbmd0aCsnIj4nXSxMPTA7TDx5Lmxlbmd0aDsrK0wpUC5wdXNoKCc8YnJrIGlkPSInK3lbTF0uQysnIiBt'@;
put 'YW49IjEiLz4nKTtyZXR1cm4gUC5qb2luKCIiKSsiPC9jb2xCcmVha3M+In0oU2VbIiFjb2xCcmVha3MiXXx8bnQuY29sQnJlYWtzKSksKCFQfHxQLmlnbm9yZUVDfHxudWxsPT1QLmlnbm9yZUVDKSYmKHJlW3JlLmxlbmd0aF09ZnMoImlnbm9yZWRFcnJvcnMiLFNyKCJpZ25vcmVkRXJyb3Ii'@;
put 'LG51bGwse251bWJlclN0b3JlZEFzVGV4dDoxLHNxcmVmOkhlfSkpKSxTZVsiIWNoYXJ0cyJdJiZHZS5wdXNoLmFwcGx5KEdlLFNlWyIhY2hhcnRzIl0pLFNlWyIhaW1hZ2VzIl0mJkdlLnB1c2guYXBwbHkoR2UsU2VbIiFpbWFnZXMiXSksU2VbIiFzaGFwZXMiXSYmR2UucHVzaC5hcHBseShH'@;
put 'ZSxTZVsiIXNoYXBlcyJdKSxHZS5sZW5ndGg+MCYmKGt0PXpvKFEsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyh5KzEpKyIueG1sIixIaS5EUkFXKSxyZVtyZS5sZW5ndGhdPVNyKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSxTZVsiIWRyYXdpbmciXT1HZSksKFNlWyIhY29t'@;
put 'bWVudHMiXS5sZW5ndGg+MHx8KFNlWyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wKSYmKGt0PXpvKFEsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyh5KzEpKyIudm1sIixIaS5WTUwpLHJlW3JlLmxlbmd0aF09U3IoImxlZ2FjeURyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitrdH0p'@;
put 'LFNlWyIhbGVnYWN5Il09a3QpLFNlWyIhcHJpbnQiXSYmU2VbIiFwcmludCJdLmltYWdlcyl7dmFyIHBuPVNlWyIhcHJpbnQiXS5pbWFnZXMsS249MDtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24odW4pe3BuW3VuXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKHFuKXtwblt1bl1bcW5dJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oem4pe2lmKEFycmF5LmlzQXJyYXkocG5bdW5dW3FuXVt6bl0pKWZvcih2YXIga249MDtrbjxwblt1bl1bcW5dW3puXS5sZW5ndGg7Kytrbilwblt1bl1bcW5dW3puXVtr'@;
put 'bl0mJihwblt1bl1bcW5dW3puXVtrbl0uX2NudD1LbisrKX0pfSl9KSxLbj4wJiYoa3Q9em8oUSwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKHkrMSkrIkhGLnZtbCIsSGkuVk1MKSxyZVtyZS5sZW5ndGhdPVNyKCJsZWdhY3lEcmF3aW5nSEYiLG51bGwseyJyOmlkIjoicklkIitrdH0p'@;
put 'LFNlWyIhbGVnYWN5SEYiXT1rdCl9cmV0dXJuKFNlWyIhdGFibGVzIl18fFtdKS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09Jzx0YWJsZVBhcnRzIGNvdW50PSInK1NlWyIhdGFibGVzIl0ubGVuZ3RoKyciPicsU2VbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHVuLHFuKXtrdD16byhR'@;
put 'LC0xLCIuLi90YWJsZXMvdGFibGUiKyh5KzEpKyJfIitxbisiLnhtbCIsSGkuVEFCTEUpLHJlW3JlLmxlbmd0aF09Jzx0YWJsZVBhcnQgcjppZD0icklkJytrdCsnIi8+J30pLHJlW3JlLmxlbmd0aF09IjwvdGFibGVQYXJ0cz4iKSxyZS5sZW5ndGg+MSYmKHJlW3JlLmxlbmd0aF09Ijwvd29y'@;
put 'a3NoZWV0PiIscmVbMV09cmVbMV0ucmVwbGFjZSgiLz4iLCI+IikpLHJlLmpvaW4oIiIpfWZ1bmN0aW9uICRJKHksUCxMLFEpe3ZhciByZT1mdW5jdGlvbiBQdih5LFAsTCl7dmFyIFE9cHIoMTQ1KSxyZT0oTFsiIXJvd3MiXXx8W10pW3ldfHx7fTtRLndyaXRlX3NoaWZ0KDQseSksUS53cml0'@;
put 'ZV9zaGlmdCg0LDApO3ZhciBnZT0zMjA7cmUuaHB4P2dlPTIwKmoyKHJlLmhweCk6cmUuaHB0JiYoZ2U9MjAqcmUuaHB0KSxRLndyaXRlX3NoaWZ0KDIsZ2UpLFEud3JpdGVfc2hpZnQoMSwwKTt2YXIgX2U9MDtyZS5sZXZlbCYmKF9lfD1yZS5sZXZlbCkscmUuaGlkZGVuJiYoX2V8PTE2KSwo'@;
put 'cmUuaHB4fHxyZS5ocHQpJiYoX2V8PTMyKSxRLndyaXRlX3NoaWZ0KDEsX2UpLFEud3JpdGVfc2hpZnQoMSwwKTt2YXIgdmU9MCxTZT1RLmw7US5sKz00O2Zvcih2YXIgSGU9e3I6eSxjOjB9LEJlPTA7QmU8MTY7KytCZSlpZighKFAucy5jPkJlKzE8PDEwfHxQLmUuYzxCZTw8MTApKXtmb3Io'@;
put 'dmFyIEdlPS0xLG50PS0xLGR0PUJlPDwxMDtkdDxCZSsxPDwxMDsrK2R0KUhlLmM9ZHQsKEFycmF5LmlzQXJyYXkoTCk/KExbSGUucl18fFtdKVtIZS5jXTpMW2RpKEhlKV0pJiYoR2U8MCYmKEdlPWR0KSxudD1kdCk7R2U8MHx8KCsrdmUsUS53cml0ZV9zaGlmdCg0LEdlKSxRLndyaXRlX3No'@;
put 'aWZ0KDQsbnQpKX12YXIgY3Q9US5sO3JldHVybiBRLmw9U2UsUS53cml0ZV9zaGlmdCg0LHZlKSxRLmw9Y3QsUS5sZW5ndGg+US5sP1Euc2xpY2UoMCxRLmwpOlF9KFEsTCxQKTsocmUubGVuZ3RoPjE3fHwoUFsiIXJvd3MiXXx8W10pW1FdKSYmdWkoeSwiQnJ0Um93SGRyIixyZSl9dmFyIHFJ'@;
put 'PUpjLEtJPUQxO2Z1bmN0aW9uIGpTKHkpe3JldHVyblthMCh5KSxtYSh5KSwibiJdfXZhciBsTD1KYyxZUz1EMSxxUz1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLGVvPVsiQW55IiwiV2hvbGUiLCJEZWNpbWFsIiwiTGlzdCIsIkRhdGUiLCJUaW1l'@;
put 'IiwiTGVuZ3RoIiwiQ3VzdG9tIl0sQnY9WyJJTiIsIk9UIiwiRVEiLCJORSIsIkdUIiwiTFQiLCJHRSIsIkxFIl07ZnVuY3Rpb24gd0woeSl7dmFyIFA9cHIoNCksTD1bUF0sUT1lby5pbmRleE9mKHkudCk7aWYoUTwwKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2du'@;
put 'aXplZCB0eXBlICIreS50KTt2YXIgZ2U9QnYuaW5kZXhPZih5Lm9wKTtzd2l0Y2goUSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDc6Z2U9MDticmVhaztkZWZhdWx0OmlmKC0xPT1nZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK3kub3ArIiBmb3IgIit5LnQpfVAu'@;
put 'd3JpdGVfc2hpZnQoMSwwfFEpLFAud3JpdGVfc2hpZnQoMSwxKSxQLndyaXRlX3NoaWZ0KDEsMTJ8Z2U8PDQpLFAud3JpdGVfc2hpZnQoMSwwKSxMLnB1c2goZnVuY3Rpb24gWmgoeSl7dmFyIFA9eS5zcGxpdCgvXHMqLFxzKi8pLEw9cHIoNCk7TC53cml0ZV9zaGlmdCg0LFAubGVuZ3RoKTt2'@;
put 'YXIgUT1bTF07cmV0dXJuIFAuZm9yRWFjaChmdW5jdGlvbihyZSl7US5wdXNoKEQxKE9pKHJlKSkpfSksUyhRKX0oInN0cmluZyI9PXR5cGVvZiB5LnJlZj95LnJlZjpPbyh5LnJlZikpKTt2YXIgX2U9cHIoMTYpO19lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksX2Uud3JpdGVfc2hpZnQo'@;
put 'NCw0Mjk0OTY3Mjk1KSxfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLF9lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksTC5wdXNoKF9lKTt2YXIgdmU9cHIoOCk7dmUud3JpdGVfc2hpZnQoNCwwKSx2ZS53cml0ZV9zaGlmdCg0LDApO3ZhciBTZT0xO3N3aXRjaCh5LnQpe2Nhc2UiQW55'@;
put 'IjpMLnB1c2godmUpLEwucHVzaCh2ZSk7YnJlYWs7Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYobnVsbCE9eS52fHxudWxsIT15LmYpTC5wdXNoKCJudW1iZXIiPT10eXBlb2YgeS52P212KHkudik6VTMobnVsbD09eS52P3kuZjp5LnYpKTtlbHNle2lmKG51bGw9'@;
put 'PXkubWlufHxudWxsPT15Lm1heCl0aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK3kudDtMLnB1c2goIm51bWJlciI9PXR5cGVvZiB5Lm1pbj9tdih5Lm1pbik6VTMoeS5taW4pKSxMLnB1c2goIm51bWJlciI9'@;
put 'PXR5cGVvZiB5Lm1heD9tdih5Lm1heCk6VTMoeS5tYXgpKSxTZT0yfWJyZWFrO2Nhc2UiTGlzdCI6aWYobnVsbCE9eS5sKXtMLnB1c2goYVMoeS5sLmpvaW4oIiwiKSkpO2JyZWFrfWNhc2UiQ3VzdG9tIjppZigibnVsbCIhPXkuZil7TC5wdXNoKFUzKHkuZikpO2JyZWFrfXRocm93IlVuc3Vw'@;
put 'cG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYGZgIisoIkxpc3QiPT15LnQ/IiBvciBgbGAiOiIiKSsiIHJlcXVpcmVkIGZvciBUeXBlICIreS50O2RlZmF1bHQ6dGhyb3ciWExTQiBkb2VzIG5vdCBzdXBwb3J0IERhdGEgVmFsaWRhdGlvbiB0eXBlICIreS50fXJldHVybiAxPT1TZSYmTC5wdXNo'@;
put 'KHZlKSxTKEwpfWZ1bmN0aW9uIFNMKHksUCxMLFEscmUsZ2UsX2Upe2lmKHZvaWQgMD09PVAudiYmbnVsbD09UC5zfHwieiI9PT1QLnQmJiFyZS5zaGVldFN0dWJzKXJldHVybiExO3ZhciB2ZT0iIjtzd2l0Y2goUC50KXtjYXNlImIiOnZlPVAudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KFA9'@;
put 'b24oUCkpLno9UC56fHx3Ll90YWJsZVsxNF0sUC52PVVlKEh0KFAudikpLFAudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNlImUiOnZlPSIiK1AudjticmVhaztkZWZhdWx0OnZlPVAudn12YXIgU2U9e3I6TCxjOlF9O3N3aXRjaChTZS5zPWd1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLFAs'@;
put 'cmUpLFAubCYmZ2VbIiFsaW5rcyJdLnB1c2goW2RpKFNlKSxQLmxdKSxQLmMmJmdlWyIhY29tbWVudHMiXS5wdXNoKFtkaShTZSksUC5jXSksUC50KXtjYXNlInMiOmNhc2Uic3RyIjppZihyZS5ib29rU1NUKXtpZih2ZT13dihyZS5TdHJpbmdzLFAudixQLlI/UC5yPUpoKFAuUik6bnVsbCxy'@;
put 'ZS5yZXZTdHJpbmdzKSxQLlIpZm9yKHZhciBIZT0wO0hlPFAuUi5sZW5ndGg7KytIZSlQLlJbSGVdLnMmJmd1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpQLlJbSGVdLnN9LHJlKTtTZS50PSJzIixTZS52PXZlLF9lP3VpKHksIkJydFNob3J0SXNzdCIsZnVuY3Rp'@;
put 'b24gdEwoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1wcig4KSksS2MoUCxMKSxMLndyaXRlX3NoaWZ0KDQsUC52KSxMfSgwLFNlKSk6dWkoeSwiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9uIE52KHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9cHIoMTIpKSxGaShQLEwpLEwud3JpdGVfc2hpZnQo'@;
put 'NCxQLnYpLEx9KDAsU2UpKX1lbHNlIFNlLnQ9InN0ciIsX2U/dWkoeSwiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gclkoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1wcig4KzQqeS52Lmxlbmd0aCkpLEtjKFAsTCkscmMoeS52LEwpLEwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMfShQLFNl'@;
put 'KSk6dWkoeSwiQnJ0Q2VsbFN0IixmdW5jdGlvbiB1NSh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPXByKDEyKzQqeS52Lmxlbmd0aCkpLEZpKFAsTCkscmMoeS52LEwpLEwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMfShQLFNlKSk7cmV0dXJuITA7Y2FzZSJuIjpyZXR1cm4gUC52PT0o'@;
put 'MHxQLnYpJiZQLnY+LTFlMyYmUC52PDFlMz9fZT91aSh5LCJCcnRTaG9ydFJrIixmdW5jdGlvbiBvTCh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPXByKDgpKSxLYyhQLEwpLFNzKHkudixMKSxMfShQLFNlKSk6dWkoeSwiQnJ0Q2VsbFJrIixmdW5jdGlvbiBuWSh5LFAsTCl7cmV0dXJuIG51'@;
put 'bGw9PUwmJihMPXByKDEyKSksRmkoUCxMKSxTcyh5LnYsTCksTH0oUCxTZSkpOl9lP3VpKHksIkJydFNob3J0UmVhbCIsZnVuY3Rpb24gckwoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1wcigxMikpLEtjKFAsTCksRmMoeS52LEwpLEx9KFAsU2UpKTp1aSh5LCJCcnRDZWxsUmVhbCIsZnVu'@;
put 'Y3Rpb24gVnYoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1wcigxNikpLEZpKFAsTCksRmMoeS52LEwpLEx9KFAsU2UpKSwhMDtjYXNlImIiOnJldHVybiBTZS50PSJiIixfZT91aSh5LCJCcnRTaG9ydEJvb2wiLGZ1bmN0aW9uIEh2KHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9cHIoNSkp'@;
put 'LEtjKFAsTCksTC53cml0ZV9zaGlmdCgxLHkudj8xOjApLEx9KFAsU2UpKTp1aSh5LCJCcnRDZWxsQm9vbCIsZnVuY3Rpb24gRlMoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1wcig5KSksRmkoUCxMKSxMLndyaXRlX3NoaWZ0KDEseS52PzE6MCksTH0oUCxTZSkpLCEwO2Nhc2UiZSI6cmV0'@;
put 'dXJuIFNlLnQ9ImUiLF9lP3VpKHksIkJydFNob3J0RXJyb3IiLGZ1bmN0aW9uIFZTKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9cHIoOCkpLEtjKFAsTCksTC53cml0ZV9zaGlmdCgxLHkudiksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMSwwKSxMfShQLFNlKSk6dWkoeSwi'@;
put 'QnJ0Q2VsbEVycm9yIixmdW5jdGlvbiBIUyh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPXByKDkpKSxGaShQLEwpLEwud3JpdGVfc2hpZnQoMSx5LnYpLEx9KFAsU2UpKSwhMH1yZXR1cm4gX2U/dWkoeSwiQnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gZUwoeSxQLEwpe3JldHVybiBudWxsPT1M'@;
put 'JiYoTD1wcig0KSksS2MoUCxMKX0oMCxTZSkpOnVpKHksIkJydENlbGxCbGFuayIsZnVuY3Rpb24gUUkoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1wcig4KSksRmkoUCxMKX0oMCxTZSkpLCEwfWZ1bmN0aW9uIEFMKHksUCxMLFEpe3ZhciByZT13YygpLGdlPUwuU2hlZXROYW1lc1t5XSxf'@;
put 'ZT1MLlNoZWV0c1tnZV18fHt9LHZlPWdlO3RyeXtMJiZMLldvcmtib29rJiYodmU9TC5Xb3JrYm9vay5TaGVldHNbeV0uQ29kZU5hbWV8fHZlKX1jYXRjaHt9dmFyIFNlPU9pKF9lWyIhcmVmIl18fCJBMSIpO2lmKFNlLmUuYz4xNjM4M3x8U2UuZS5yPjEwNDg1NzUpe2lmKFAuV1RGKXRocm93'@;
put 'IG5ldyBFcnJvcigiUmFuZ2UgIisoX2VbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7U2UuZS5jPU1hdGgubWluKFNlLmUuYywxNjM4MyksU2UuZS5yPU1hdGgubWluKFNlLmUuYywxMDQ4NTc1KX1yZXR1cm4gX2VbIiFsaW5rcyJdPVtdLF9l'@;
put 'WyIhY29tbWVudHMiXT1bXSx1aShyZSwiQnJ0QmVnaW5TaGVldCIpLChMLnZiYXJhd3x8X2VbIiFvdXRsaW5lIl0pJiZ1aShyZSwiQnJ0V3NQcm9wIixmdW5jdGlvbiAkMSh5LFAsTCl7bnVsbD09TCYmKEw9cHIoODQrNCp5Lmxlbmd0aCkpO3ZhciBRPTE5MjtQJiYoUC5hYm92ZSYmKFEmPS02'@;
put 'NSksUC5sZWZ0JiYoUSY9LTEyOSkpLEwud3JpdGVfc2hpZnQoMSxRKTtmb3IodmFyIHJlPTE7cmU8MzsrK3JlKUwud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUjIoe2F1dG86MX0sTCksTC53cml0ZV9zaGlmdCgtNCwtMSksTC53cml0ZV9zaGlmdCgtNCwtMSksc20oeSxMKSxMLnNsaWNlKDAs'@;
put 'TC5sKX0odmUsX2VbIiFvdXRsaW5lIl0pKSx1aShyZSwiQnJ0V3NEaW0iLEtJKFNlKSksZnVuY3Rpb24gZU0oeSxQLEwpe3VpKHksIkJydEJlZ2luV3NWaWV3cyIpLHVpKHksIkJydEJlZ2luV3NWaWV3IixmdW5jdGlvbiBtTCh5LFAsTCl7bnVsbD09TCYmKEw9cHIoMzApKTt2YXIgUT05MjQ7'@;
put 'cmV0dXJuKCgoUHx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJihRfD0zMiksaG4oeVsiIWdyaWRsaW5lcyJdKSYmKFEmPS01KSxobigoKChQfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLmdyaWQpJiYoUSY9LTUpLEwud3JpdGVfc2hpZnQoMixRKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53'@;
put 'cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMTAwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQo'@;
put 'MiwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTH0oUCxMKSksUFsiIWZyZWV6ZSJdJiZ1aSh5LCJCcnRQYW5lIixmdW5jdGlvbiAkUyh5KXt2YXIgUD1zcyh5WyIhZnJlZXplIl0pLEw9cHIoMjkpO3JldHVybiBMLndyaXRlX3NoaWZ0KDgsUC5jLCJmIiksTC53cml0ZV9zaGlmdCg4LFAuciwiZiIp'@;
put 'LEwud3JpdGVfc2hpZnQoNCxQLnIpLEwud3JpdGVfc2hpZnQoNCxQLmMpLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDEsMyksTH0oUCkpLFBbIiFzZWwiXSYmdWkoeSwiQnJ0U2VsIixmdW5jdGlvbiBkTCh5LFApe3ZhciBMPXByKDM2KSxRPXkuY2VsbDtpZighUSl7aWYoIXku'@;
put 'cmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO1E9ZGkoV3MoeS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgcmU9InN0cmluZyI9PXR5cGVvZiBRP3NzKFEpOlE7aWYoUCl7dmFyIGdlPSJzdHJpbmciPT10eXBl'@;
put 'b2YgUD9zcyhQKTpQO0wud3JpdGVfc2hpZnQoNCxyZS5yPj1nZS5yJiZyZS5jPj1nZS5jPzA6cmUucj49Z2UuciYmcmUuYzxnZS5jPzI6cmUucjxnZS5yJiZyZS5jPj1nZS5jPzE6Myl9ZWxzZSBMLndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIEwud3JpdGVfc2hpZnQoNCxyZS5yKSxMLndyaXRl'@;
put 'X3NoaWZ0KDQscmUuYyksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwxKSxMLndyaXRlX3NoaWZ0KDQscmUuciksTC53cml0ZV9zaGlmdCg0LHJlLnIpLEwud3JpdGVfc2hpZnQoNCxyZS5jKSxMLndyaXRlX3NoaWZ0KDQscmUuYyksTH0oUFsiIXNlbCJdLFBbIiFmcmVlemUi'@;
put 'XSkpLHVpKHksIkJydEVuZFdzVmlldyIpLHVpKHksIkJydEVuZFdzVmlld3MiKX0ocmUsX2UsTC5Xb3JrYm9vayksZnVuY3Rpb24gWFMoeSxQKXshUHx8IVBbIiFjb2xzIl18fCh1aSh5LCJCcnRCZWdpbkNvbEluZm9zIiksUFsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKEwsUSl7TCYmdWko'@;
put 'eSwiQnJ0Q29sSW5mbyIsZnVuY3Rpb24gaVkoeSxQLEwpe251bGw9PUwmJihMPXByKDE4KSk7dmFyIFE9WWQoeSxQKTtMLndyaXRlX3NoaWZ0KC00LHkpLEwud3JpdGVfc2hpZnQoLTQseSksTC53cml0ZV9zaGlmdCg0LDI1NiooUS53aWR0aHx8MTApKSxMLndyaXRlX3NoaWZ0KDQsMCk7dmFy'@;
put 'IHJlPTA7cmV0dXJuIFAuaGlkZGVuJiYocmV8PTEpLCJudW1iZXIiPT10eXBlb2YgUS53aWR0aCYmKHJlfD0yKSxQLmxldmVsJiYocmV8PVAubGV2ZWw8PDgpLEwud3JpdGVfc2hpZnQoMixyZSksTH0oUSxMKSl9KSx1aSh5LCJCcnRFbmRDb2xJbmZvcyIpKX0ocmUsX2UpLGZ1bmN0aW9uIE1M'@;
put 'KHksUCxMLFEpe3ZhciByZT1PaShQWyIhcmVmIl18fCJBMSIpLF9lPSIiLHZlPVtdO3VpKHksIkJydEJlZ2luU2hlZXREYXRhIik7dmFyIFNlPUFycmF5LmlzQXJyYXkoUCksSGU9cmUuZS5yO1BbIiFyb3dzIl0mJihIZT1NYXRoLm1heChyZS5lLnIsUFsiIXJvd3MiXS5sZW5ndGgtMSkpO2Zv'@;
put 'cih2YXIgQmU9cmUucy5yO0JlPD1IZTsrK0JlKXtfZT1IcyhCZSksJEkoeSxQLHJlLEJlKTt2YXIgR2U9ITE7aWYoQmU8PXJlLmUucilmb3IodmFyIG50PXJlLnMuYztudDw9cmUuZS5jOysrbnQpe0JlPT09cmUucy5yJiYodmVbbnRdPU5zKG50KSk7dmFyIGR0PVNlPyhQW0JlXXx8W10pW250'@;
put 'XTpQW3ZlW250XStfZV07R2U9ISFkdCYmU0woeSxkdCxCZSxudCxRLFAsR2UpfX11aSh5LCJCcnRFbmRTaGVldERhdGEiKX0ocmUsX2UsMCxQKSxmdW5jdGlvbiBrNih5LFApe1BbIiFwcm90ZWN0Il0mJnVpKHksIkJydFNoZWV0UHJvdGVjdGlvbiIsZnVuY3Rpb24gX0woeSxQKXtyZXR1cm4g'@;
put 'bnVsbD09UCYmKFA9cHIoNjYpKSxQLndyaXRlX3NoaWZ0KDIseS5wYXNzd29yZD9hQyh5LnBhc3N3b3JkKTowKSxQLndyaXRlX3NoaWZ0KDQsMSksW1sib2JqZWN0cyIsITFdLFsic2NlbmFyaW9zIiwhMV0sWyJmb3JtYXRDZWxscyIsITBdLFsiZm9ybWF0Q29sdW1ucyIsITBdLFsiZm9ybWF0'@;
put 'Um93cyIsITBdLFsiaW5zZXJ0Q29sdW1ucyIsITBdLFsiaW5zZXJ0Um93cyIsITBdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsITBdLFsiZGVsZXRlQ29sdW1ucyIsITBdLFsiZGVsZXRlUm93cyIsITBdLFsic2VsZWN0TG9ja2VkQ2VsbHMiLCExXSxbInNvcnQiLCEwXSxbImF1dG9GaWx0ZXIiLCEw'@;
put 'XSxbInBpdm90VGFibGVzIiwhMF0sWyJzZWxlY3RVbmxvY2tlZENlbGxzIiwhMV1dLmZvckVhY2goZnVuY3Rpb24oTCl7UC53cml0ZV9zaGlmdCg0LExbMV0/bnVsbD09eVtMWzBdXXx8eVtMWzBdXT8wOjE6bnVsbCE9eVtMWzBdXSYmeVtMWzBdXT8wOjEpfSksUH0oUFsiIXByb3RlY3QiXSkp'@;
put 'fShyZSxfZSksZnVuY3Rpb24gUVMoeSxQLEwsUSl7aWYoUFsiIWF1dG9maWx0ZXIiXSl7dmFyIHJlPVBbIiFhdXRvZmlsdGVyIl0sZ2U9InN0cmluZyI9PXR5cGVvZiByZS5yZWY/cmUucmVmOk9vKHJlLnJlZik7TC5Xb3JrYm9va3x8KEwuV29ya2Jvb2s9e1NoZWV0czpbXX0pLEwuV29ya2Jv'@;
put 'b2suTmFtZXN8fChMLldvcmtib29rLk5hbWVzPVtdKTt2YXIgX2U9TC5Xb3JrYm9vay5OYW1lcyx2ZT1XcyhnZSk7dmUucy5yPT12ZS5lLnImJih2ZS5lLnI9V3MoUFsiIXJlZiJdKS5lLnIsZ2U9T28odmUpKTtmb3IodmFyIFNlPTA7U2U8X2UubGVuZ3RoOysrU2Upe3ZhciBIZT1fZVtTZV07'@;
put 'aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PUhlLk5hbWUmJkhlLlNoZWV0PT1RKXtIZS5SZWY9IiciK0wuU2hlZXROYW1lc1tRXSsiJyEiK2dlO2JyZWFrfX1TZT09X2UubGVuZ3RoJiZfZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OlEsUmVmOiInIitMLlNo'@;
put 'ZWV0TmFtZXNbUV0rIichIitnZX0pLHVpKHksIkJydEJlZ2luQUZpbHRlciIsRDEoT2koZ2UpKSksdWkoeSwiQnJ0RW5kQUZpbHRlciIpfX0ocmUsX2UsTCx5KSxmdW5jdGlvbiB4TCh5LFApeyFQfHwhUFsiIW1lcmdlcyJdfHwodWkoeSwiQnJ0QmVnaW5NZXJnZUNlbGxzIixmdW5jdGlvbiBX'@;
put 'Uyh5LFApe3JldHVybiBudWxsPT1QJiYoUD1wcig0KSksUC53cml0ZV9zaGlmdCg0LHkpLFB9KFBbIiFtZXJnZXMiXS5sZW5ndGgpKSxQWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihMKXt1aSh5LCJCcnRNZXJnZUNlbGwiLFlTKEwpKX0pLHVpKHksIkJydEVuZE1lcmdlQ2VsbHMiKSl9'@;
put 'KHJlLF9lKSxmdW5jdGlvbiBrTCh5LFApe2lmKFApe3VpKHksIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIEtTKHksUCl7bnVsbD09UCYmKFA9cHIoMTgpKSxQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCk7'@;
put 'Zm9yKHZhciBMPTAsUT0wO1E8eS5sZW5ndGg7KytRKSgoeVtRXXx8e30pLnJlZnx8e30pLnMmJnlbUV0ucmVmLnMuYzwwfHwrK0w7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCxMKSxQfShQKSk7Zm9yKHZhciBMPTA7TDxQLmxlbmd0aDsrK0wpKChQW0xdfHx7fSkucmVmfHx7fSkucyYmUFtMXS5y'@;
put 'ZWYucy5jPDB8fHVpKHksIkJydERWYWwiLHdMKFBbTF0pKTt1aSh5LCJCcnRFbmREVmFscyIpfX0ocmUsX2VbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiBFTCh5LFAsTCl7UFsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihRKXtpZihRWzFdLlRhcmdldCl7dmFyIHJlPXpvKEwsLTEsUVsx'@;
put 'XS5UYXJnZXQucmVwbGFjZSgvIy4qJC8sIiIpLEhpLkhMSU5LKTt1aSh5LCJCcnRITGluayIsZnVuY3Rpb24gY0woeSxQKXt2YXIgTD1wcig1MCs0Kih5WzFdLlRhcmdldC5sZW5ndGgrKHlbMV0uVG9vbHRpcHx8IiIpLmxlbmd0aCkpO0QxKHtzOnNzKHlbMF0pLGU6c3MoeVswXSl9LEwpLFBj'@;
put 'KCJySWQiK1AsTCk7dmFyIFE9eVsxXS5UYXJnZXQuaW5kZXhPZigiIyIpO3JldHVybiByYygoLTE9PVE/IiI6eVsxXS5UYXJnZXQuc2xpY2UoUSsxKSl8fCIiLEwpLHJjKHlbMV0uVG9vbHRpcHx8IiIsTCkscmMoIiIsTCksTC5zbGljZSgwLEwubCl9KFEscmUpKX19KSxkZWxldGUgUFsiIWxp'@;
put 'bmtzIl19KHJlLF9lLFEpLF9lWyIhbWFyZ2lucyJdJiZ1aShyZSwiQnJ0TWFyZ2lucyIsZnVuY3Rpb24gcEwoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9cHIoNDgpKSxkZih5KSxxUy5mb3JFYWNoKGZ1bmN0aW9uKEwpe0ZjKHlbTF0sUCl9KSxQfShfZVsiIW1hcmdpbnMiXSkpLCghUHx8UC5p'@;
put 'Z25vcmVFQ3x8bnVsbD09UC5pZ25vcmVFQykmJmZ1bmN0aW9uIEpTKHksUCl7IVB8fCFQWyIhcmVmIl18fCh1aSh5LCJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MiKSx1aSh5LCJCcnRDZWxsSWdub3JlRUMiLGZ1bmN0aW9uIHZMKHkpe3ZhciBQPXByKDI0KTtyZXR1cm4gUC53cml0ZV9zaGlmdCg0'@;
put 'LDQpLFAud3JpdGVfc2hpZnQoNCwxKSxEMSh5LFApLFB9KE9pKFBbIiFyZWYiXSkpKSx1aSh5LCJCcnRFbmRDZWxsSWdub3JlRUNzIikpfShyZSxfZSksZnVuY3Rpb24gb1koeSxQLEwsUSl7aWYoUFsiIWNvbW1lbnRzIl0ubGVuZ3RoPjApe3ZhciByZT16byhRLC0xLCIuLi9kcmF3aW5ncy92'@;
put 'bWxEcmF3aW5nIisoTCsxKSsiLnZtbCIsSGkuVk1MKTt1aSh5LCJCcnRMZWdhY3lEcmF3aW5nIixQYygicklkIityZSkpLFBbIiFsZWdhY3kiXT1yZX19KHJlLF9lLHksUSksdWkocmUsIkJydEVuZFNoZWV0IikscmUuZW5kKCl9ZnVuY3Rpb24gQTYoeSl7dmFyIFEsUD1bXSxMPXkubWF0Y2go'@;
put 'L148YzpudW1DYWNoZT4vKTsoeS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgX2U9Z2UubWF0Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2PiguKik8XC9jOnY+PFwvYzpwdD4vKTtfZSYmKFBbK19lWzFd'@;
put 'XT1MPytfZVsyXTpfZVsyXSl9KTt2YXIgcmU9eHIoKHkubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oeS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihn'@;
put 'ZSl7UT1nZS5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFtQLHJlLFFdfUhpLkNIQVJUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0IixIaS5DSEFSVEVYPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29t'@;
put 'L29mZmljZS8yMDE0L3JlbGF0aW9uc2hpcHMvY2hhcnRFeCI7dmFyIGY1PS88KD86XHcrOik/Y2hhcnQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NoYXJ0Pi8samM9LzwoPzpcdys6KT9wbG90QXJlYT4oW1xzXFNdKj8pPFwvKD86XHcrOik/cGxvdEFyZWE+LyxnZj0vPCg/Olx3KzopP2xlZ2Vu'@;
put 'ZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sVDY9LzwoPzpcdys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlvbiBtMCh5LFAsTCxRLHJlLGdlLF9lLHZlKXt2YXIgU2U9Z2V8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCF5KXJldHVybiBnZTtfZSYm'@;
put 'X2UuQW5jaG9yJiYoU2VbIiFwb3MiXT1zZihfZS5BbmNob3IsdmUpLFNlWyIhcG9zVHlwZSJdPV9lLkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLFNlWyIhYWJzcG9zIl09c2YoX2UuQW5jaG9yLHZlKSxTZVsiIXJlbHBvcyJdPUttKF9lLkFuY2hvcix2ZSkpLFNlWyIhcGxvdCJd'@;
put 'PVtdO3ZhciBIZT0iIixCZT0iIixHZT15Lm1hdGNoKGY1KTtHZT8oSGU9eS5zbGljZSgwLEdlLmluZGV4KSxCZT15LnNsaWNlKEdlLmluZGV4K0dlWzBdLmxlbmd0aCkpOkhlPUJlPXk7dmFyIG50PVtdLGR0PUhlLm1hdGNoKC88YzpsYW5nLio/Pi8pfHx5Lm1hdGNoKC88YzpsYW5nLio/Pi8p'@;
put 'fHxCZS5tYXRjaCgvPGM6bGFuZy4qPz4vKTtyZXR1cm4gZHQmJihTZVsiIWxhbmciXT0obG4oZHRbMF0pfHx7fSkudmFsfHwiZW4tVVMiKSxHZSYmKChudD1HZVsxXS5tYXRjaChUNikpJiZmdW5jdGlvbiBxMSh5LFApe3ZhciBMPSIiO3kubWF0Y2goLzxjOnJpY2g+LykmJnkucmVwbGFjZSgv'@;
put 'PGE6dD4oW1xzXFNdKj8pPFwvYTp0Pi9nLGZ1bmN0aW9uKFEscmUpe0wrPXJlfSksUFsiIXRpdGxlIl09THx8IkNoYXJ0IFRpdGxlIn0obnRbMV0sU2UpLGZ1bmN0aW9uIEszKHksUCl7aWYoeSl7dmFyIEw9MCxRPTAscmU9IkEiLGdlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19O3ku'@;
put 'cmVwbGFjZShUcixmdW5jdGlvbihfZSx2ZSl7dmFyIFNlPXt0OnZlLGM6TCx3OjAsc2VyOltdfSxIZT1bXSxCZT0oX2UubWF0Y2goLzxjOnNlci8pfHxbXSkuaW5kZXgsR2U9QmU/X2Uuc2xpY2UoMCxCZSk6X2U7InNjYXR0ZXIiPT12ZSYmKEhlPV9lLm1hdGNoKC88YzpzY2F0dGVyU3R5bGUo'@;
put 'W15cLz5dKilcLz4vbSkpJiZsbihIZVswXSksImJhciI9PXZlJiYoSGU9X2UubWF0Y2goLzxjOmJhckRpcihbXlwvPl0qKVwvPi9tKSkmJihTZS5iYXJEaXI9ImJhciI9PWxuKEhlWzBdKS52YWw/ImgiOiJ2IiksKEhlPUdlLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9tKSkmJihT'@;
put 'ZS5ncm91cGluZz1sbihIZVswXSkudmFsfHwic3RhbmRhcmQiKSwoX2UubWF0Y2gocTMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihkdCl7dmFyIEN0PVtdLGN0PXt9LGJ0PVtdO2lmKGR0Lm1hdGNoKC88Yzp0eD4vKSl7dmFyIEZ0PUE2KChkdC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/KTxcL2M6'@;
put 'dHg+Lyl8fFtdKVsxXXx8IiIpfHxbXTtGdFswXSYmRnRbMF1bMF0mJihjdC5uYW1lPUZ0WzBdWzBdKSxGdFsyXSYmKGN0Lm5hbWVyZWY9RnRbMl0pfVsieFZhbCIsInlWYWwiLCJjYXQiLCJ2YWwiLCJidWJibGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7dmFyIFp0LFR0PWR0Lm1hdGNo'@;
put 'KG5ldyBSZWdFeHAoIjxjOiIra3QrIj5bXFxzXFxTXSo/PFxcL2M6IitrdCsiPiIsImdtIikpO1R0JiYoKFR0WzBdLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBuKXtadD1wbi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChUdFswXS5tYXRjaCgv'@;
put 'PGM6KD86XHcqKUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocG4pe3ZhciBLbj1BNihwbik7Z2Uucy5yPWdlLnMuYz0wLGdlLmUuYz1MLHJlPU5zKEwpLEtuWzBdLmZvckVhY2goZnVuY3Rpb24odW4scW4pe1BbcmUrSHMocW4pXT17'@;
put 'dDoibnVtYmVyIj09dHlwZW9mIHVuPyJuIjoicyIsdjp1bix6OktuWzFdfSxRPXFufSksZ2UuZS5yPFEmJihnZS5lLnI9USksKytMLFNlLncrKyxDdC5wdXNoKGt0KSwoS25bMl18fFp0KSYmYnQucHVzaChLblsyXXx8WnQpLCJ2YWwiPT1rdCYmKGN0Lno9S25bMV18fCJHZW5lcmFsIil9KSl9'@;
put 'KSwoSGU9X2UubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihjdC5zbW9vdGg9bnVsbD09bG4oSGVbMF0pLnZhbHx8eXIobG4oSGVbMF0pLnZhbCkpLGN0LmNvbHM9Q3QsY3QucmFuZ2VzPWJ0LFNlLnNlci5wdXNoKGN0KX0pLCJkb3VnaG51dCI9PXZlJiYoSGU9X2UubWF0Y2go'@;
put 'LzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKFNlLmhvbGU9KGxuKEhlWzBdKS52YWx8fDEwKS8xMDApLFBbIiFwbG90Il0ucHVzaChTZSl9KSxMPjAmJihQWyIhcmVmIl09T28oZ2UpKX19KChHZVsxXS5tYXRjaChqYyl8fFtdKVsxXSxTZSksbnVsbCE9KG50PUdlWzFdLm1hdGNoKGdm'@;
put 'KSkmJmZ1bmN0aW9uIFRMKHksUCl7dmFyIEw7UFsiIWxlZ2VuZCJdPXtwb3M6InIifSwoTD15Lm1hdGNoKC88YzpsZWdlbmRQb3MoW15cLz5dKilcLz4vbSkpJiYoUFsiIWxlZ2VuZCJdLnBvcz1sbihMWzBdKS52YWx8fCJyIil9KG50WzBdLFNlKSksU2V9dmFyIFRyPS88YzooKD86YXJlYXxs'@;
put 'aW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/KUNoYXJ0W14+XSo+KFtcc1xTXSo/KTxcL2M6KD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJs'@;
put 'ZSkoPzozRCk/Q2hhcnQ+L2dtLHEzPS88YzpzZXI+KFtcc1xTXSo/KTxcL2M6c2VyPi9nbTtIaS5DUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydHNoZWV0Ijt2YXIgWDM9U3IoImNoYXJ0c2hlZXQiLG51'@;
put 'bGwse3htbG5zOmlzLm1haW5bMF0sInhtbG5zOnIiOmlzLnJ9KTtmdW5jdGlvbiBRMyh5LFAsTCxRKXt2YXIgcmU9W0JuLFgzXTtyZXR1cm4gcmUucHVzaCgiPHNoZWV0UHIvPiIpLHJlLnB1c2goJzxzaGVldFZpZXdzPjxzaGVldFZpZXcgem9vbVNjYWxlPSIxMDAiIHdvcmtib29rVmlld0lk'@;
put 'PSIwIiB6b29tVG9GaXQ9IjEiLz48L3NoZWV0Vmlld3M+JykscmVbcmUubGVuZ3RoXT1TcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQxIn0pLHpvKFEsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyh5KzEpKyIueG1sIixIaS5EUkFXKSxyZS5sZW5ndGg+MiYmKHJlW3JlLmxlbmd0aF09'@;
put 'IjwvY2hhcnRzaGVldD4iLHJlWzFdPXJlWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxyZS5qb2luKCIiKX1mdW5jdGlvbiBucCgpe3ZhciB5PXdjKCk7cmV0dXJuIHVpKHksIkJydEJlZ2luU2hlZXQiKSx1aSh5LCJCcnRFbmRTaGVldCIpLHkuZW5kKCl9dmFyIEsyPVtbImFsbG93UmVmcmVzaFF1'@;
put 'ZXJ5IiwhMSwiYm9vbCJdLFsiYXV0b0NvbXByZXNzUGljdHVyZXMiLCEwLCJib29sIl0sWyJiYWNrdXBGaWxlIiwhMSwiYm9vbCJdLFsiY2hlY2tDb21wYXRpYmlsaXR5IiwhMSwiYm9vbCJdLFsiQ29kZU5hbWUiLCIiXSxbImRhdGUxOTA0IiwhMSwiYm9vbCJdLFsiZGVmYXVsdFRoZW1lVmVy'@;
put 'c2lvbiIsMCwiaW50Il0sWyJmaWx0ZXJQcml2YWN5IiwhMSwiYm9vbCJdLFsiaGlkZVBpdm90RmllbGRMaXN0IiwhMSwiYm9vbCJdLFsicHJvbXB0ZWRTb2x1dGlvbnMiLCExLCJib29sIl0sWyJwdWJsaXNoSXRlbXMiLCExLCJib29sIl0sWyJyZWZyZXNoQWxsQ29ubmVjdGlvbnMiLCExLCJi'@;
put 'b29sIl0sWyJzYXZlRXh0ZXJuYWxMaW5rVmFsdWVzIiwhMCwiYm9vbCJdLFsic2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXMiLCEwLCJib29sIl0sWyJzaG93SW5rQW5ub3RhdGlvbiIsITAsImJvb2wiXSxbInNob3dPYmplY3RzIiwiYWxsIl0sWyJzaG93UGl2b3RDaGFydEZpbHRlciIsITEs'@;
put 'ImJvb2wiXSxbInVwZGF0ZUxpbmtzIiwidXNlclNldCJdXSx0TT1bWyJhY3RpdmVUYWIiLDAsImludCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIsITAsImJvb2wiXSxbImZpcnN0U2hlZXQiLDAsImludCJdLFsibWluaW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3Jv'@;
put 'bGwiLCEwLCJib29sIl0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2FsU2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8iLDYwMCwiaW50Il0sWyJ2aXNpYmlsaXR5IiwidmlzaWJsZSJdXSxuTT1bXSxyTT1bWyJjYWxjQ29tcGxldGVkIiwidHJ1ZSJdLFsiY2Fs'@;
put 'Y01vZGUiLCJhdXRvIl0sWyJjYWxjT25TYXZlIiwidHJ1ZSJdLFsiY29uY3VycmVudENhbGMiLCJ0cnVlIl0sWyJmdWxsQ2FsY09uTG9hZCIsImZhbHNlIl0sWyJmdWxsUHJlY2lzaW9uIiwidHJ1ZSJdLFsiaXRlcmF0ZSIsImZhbHNlIl0sWyJpdGVyYXRlQ291bnQiLCIxMDAiXSxbIml0ZXJh'@;
put 'dGVEZWx0YSIsIjAuMDAxIl0sWyJyZWZNb2RlIiwiQTEiXV07ZnVuY3Rpb24ganYoeSxQKXtmb3IodmFyIEw9MDtMIT15Lmxlbmd0aDsrK0wpZm9yKHZhciBRPXlbTF0scmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7dmFyIGdlPVBbcmVdO2lmKG51bGw9PVFbZ2VbMF1dKVFbZ2VbMF1dPWdlWzFd'@;
put 'O2Vsc2Ugc3dpdGNoKGdlWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgUVtnZVswXV0mJihRW2dlWzBdXT15cihRW2dlWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIFFbZ2VbMF1dJiYoUVtnZVswXV09cGFyc2VJbnQoUVtnZVswXV0sMTApKX19fWZ1bmN0'@;
put 'aW9uIHp2KHksUCl7Zm9yKHZhciBMPTA7TCE9UC5sZW5ndGg7KytMKXt2YXIgUT1QW0xdO2lmKG51bGw9PXlbUVswXV0peVtRWzBdXT1RWzFdO2Vsc2Ugc3dpdGNoKFFbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiB5W1FbMF1dJiYoeVtRWzBdXT15cih5W1FbMF1dKSk7YnJlYWs7'@;
put 'Y2FzZSJpbnQiOiJzdHJpbmciPT10eXBlb2YgeVtRWzBdXSYmKHlbUVswXV09cGFyc2VJbnQoeVtRWzBdXSwxMCkpfX19ZnVuY3Rpb24gVXYoeSl7enYoeS5XQlByb3BzLEsyKSx6dih5LkNhbGNQcixyTSksanYoeS5XQlZpZXcsdE0pLGp2KHkuU2hlZXRzLG5NKSxaMy5kYXRlMTkwND15cih5'@;
put 'LldCUHJvcHMuZGF0ZTE5MDQpfXZhciBvTT0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIFp2KHksUCl7aWYoeS5sZW5ndGg+MzEpe2lmKFApcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lcyBjYW5ub3QgZXhjZWVkIDMxIGNoYXJzIil9dmFyIEw9ITA7cmV0dXJuIG9N'@;
put 'LmZvckVhY2goZnVuY3Rpb24oUSl7aWYoLTEhPXkuaW5kZXhPZihRKSl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lIGNhbm5vdCBjb250YWluIDogXFwgLyA/ICogWyBdIik7TD0hMX19KSxMfXZhciBzWT0vPFx3Kzp3b3JrYm9vay8sbFk9U3IoIndvcmtib29rIixudWxsLHt4'@;
put 'bWxuczppcy5tYWluWzBdLCJ4bWxuczpyIjppcy5yfSk7ZnVuY3Rpb24gUkwoeSxQKXt2YXIgTD1QfHx7fSxRPVtCbl07UVtRLmxlbmd0aF09bFk7dmFyIHJlPXkuV29ya2Jvb2smJih5Lldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7eS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5Nb2RpZnkm'@;
put 'JihRW1EubGVuZ3RoXT1mdW5jdGlvbiBJTCh5KXt2YXIgUD17fTtyZXR1cm4geS53YXJuJiYoUC5yZWFkT25seVJlY29tbWVuZGVkPTEpLFAudXNlck5hbWU9eS51c2VyfHwiU2hlZXQgSlMiLHkuZW5jcnlwdGlvbiYmKHkuZW5jcnlwdGlvbi5hbGdvJiYoUC5hbGdvcml0aG1OYW1lPXkuZW5j'@;
put 'cnlwdGlvbi5hbGdvKSx5LmVuY3J5cHRpb24uaGFzaCYmKFAuaGFzaFZhbHVlPXkuZW5jcnlwdGlvbi5oYXNoKSx5LmVuY3J5cHRpb24uc2FsdCYmKFAuc2FsdFZhbHVlPXkuZW5jcnlwdGlvbi5zYWx0KSx5LmVuY3J5cHRpb24uc3BpbiYmKFAuc3BpbkNvdW50PXkuZW5jcnlwdGlvbi5zcGlu'@;
put 'KSksU3IoImZpbGVTaGFyaW5nIixudWxsLFApfSh5Lldvcmtib29rLk1vZGlmeSkpO3ZhciBnZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O3kuV29ya2Jvb2smJnkuV29ya2Jvb2suV0JQcm9wcyYmKEsyLmZvckVhY2goZnVuY3Rpb24oSGUpe251bGwhPXkuV29ya2Jvb2suV0JQcm9wc1tI'@;
put 'ZVswXV0mJnkuV29ya2Jvb2suV0JQcm9wc1tIZVswXV0hPUhlWzFdJiYoZ2VbSGVbMF1dPXkuV29ya2Jvb2suV0JQcm9wc1tIZVswXV0pfSkseS5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYoZ2UuY29kZU5hbWU9eS5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRlbGV0ZSBnZS5Db2Rl'@;
put 'TmFtZSkpLFFbUS5sZW5ndGhdPVNyKCJ3b3JrYm9va1ByIixudWxsLGdlKSx5Lldvcmtib29rJiZ5Lldvcmtib29rLlByb3RlY3Rpb24mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBMTCh5KXt2YXIgUD17fTtyZXR1cm4geS5sb2NrU3RydWN0dXJlJiYoUC5sb2NrU3RydWN0dXJlPTEpLHkubG9j'@;
put 'a1dpbmRvd3MmJihQLmxvY2tXaW5kb3dzPTEpLHkuZW5jcnlwdGlvbiYmKHkuZW5jcnlwdGlvbi5hbGdvJiYoUC53b3JrYm9va0FsZ29yaXRobU5hbWU9eS5lbmNyeXB0aW9uLmFsZ28pLHkuZW5jcnlwdGlvbi5oYXNoJiYoUC53b3JrYm9va0hhc2hWYWx1ZT15LmVuY3J5cHRpb24uaGFzaCks'@;
put 'eS5lbmNyeXB0aW9uLnNhbHQmJihQLndvcmtib29rU2FsdFZhbHVlPXkuZW5jcnlwdGlvbi5zYWx0KSx5LmVuY3J5cHRpb24uc3BpbiYmKFAud29ya2Jvb2tTcGluQ291bnQ9eS5lbmNyeXB0aW9uLnNwaW4pKSxTcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLFApfSh5Lldvcmtib29rLlBy'@;
put 'b3RlY3Rpb24pKTt2YXIgX2U9eS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5TaGVldHN8fFtdLHZlPTA7aWYoX2UmJl9lWzBdJiZfZVswXS5IaWRkZW4pe2ZvcihRW1EubGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHZlPTA7dmUhPXkuU2hlZXROYW1lcy5sZW5ndGgmJl9lW3ZlXSYmX2VbdmVdLkhpZGRl'@;
put 'bjsrK3ZlKTt2ZT09eS5TaGVldE5hbWVzLmxlbmd0aCYmKHZlPTApLFFbUS5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrdmUrJyIgYWN0aXZlVGFiPSInK3ZlKyciLz4nLFFbUS5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihRW1EubGVuZ3RoXT0iPHNoZWV0cz4iLHZl'@;
put 'PTA7dmUhPXkuU2hlZXROYW1lcy5sZW5ndGg7Kyt2ZSl7dmFyIFNlPXtuYW1lOkhyKHkuU2hlZXROYW1lc1t2ZV0uc2xpY2UoMCwzMSkpfTtpZihTZS5zaGVldElkPSIiKyh2ZSsxKSxTZVsicjppZCJdPSJySWQiKyh2ZSsxKSxfZVt2ZV0pc3dpdGNoKF9lW3ZlXS5IaWRkZW4pe2Nhc2UgMTpT'@;
put 'ZS5zdGF0ZT0iaGlkZGVuIjticmVhaztjYXNlIDI6U2Uuc3RhdGU9InZlcnlIaWRkZW4ifVFbUS5sZW5ndGhdPVNyKCJzaGVldCIsbnVsbCxTZSl9cmV0dXJuIFFbUS5sZW5ndGhdPSI8L3NoZWV0cz4iLHkuRXh0ZXJuYWxXQiYmeS5FeHRlcm5hbFdCLmxlbmd0aCYmKFFbUS5sZW5ndGhdPSI8'@;
put 'ZXh0ZXJuYWxSZWZlcmVuY2VzPiIsKHkuRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oSGUsQmUpe3ZhciBHZT16byhMLndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhCZSsxKSsiLnhtbCIsSGkuWExJTkspO1FbUS5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZl'@;
put 'cmVuY2UgcjppZD0icklkJytHZSsnIi8+J30pLFFbUS5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxyZSYmKFFbUS5sZW5ndGhdPSI8ZGVmaW5lZE5hbWVzPiIseS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5OYW1lcyYmeS5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKEhl'@;
put 'KXt2YXIgQmU9e25hbWU6SGUuTmFtZX07SGUuQ29tbWVudCYmKEJlLmNvbW1lbnQ9SGUuQ29tbWVudCksbnVsbCE9SGUuU2hlZXQmJihCZS5sb2NhbFNoZWV0SWQ9IiIrSGUuU2hlZXQpLEhlLkhpZGRlbiYmKEJlLmhpZGRlbj0iMSIpLEhlLlJlZiYmKFFbUS5sZW5ndGhdPVNyKCJkZWZpbmVk'@;
put 'TmFtZSIsSHIoSGUuUmVmKSxCZSkpfSksUVtRLmxlbmd0aF09IjwvZGVmaW5lZE5hbWVzPiIpLEwmJkwucGl2b3RzJiZMLnBpdm90cy5sZW5ndGg+MCYmKFEucHVzaCgiPHBpdm90Q2FjaGVzPiIpLEwucGl2b3RzLmZvckVhY2goZnVuY3Rpb24oSGUsQmUpe1EucHVzaCgnPHBpdm90Q2FjaGUg'@;
put 'Y2FjaGVJZD0iJysoQmUrMSkrJyIgcjppZD0icklkJytIZVsyXSsnIi8+Jyl9KSxRLnB1c2goIjwvcGl2b3RDYWNoZXM+IikpLFEubGVuZ3RoPjImJihRW1EubGVuZ3RoXT0iPC93b3JrYm9vaz4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX1mdW5jdGlvbiBPTCh5'@;
put 'LFApe3JldHVybiBQfHwoUD1wcigxMjcpKSxQLndyaXRlX3NoaWZ0KDQseS5IaWRkZW4pLFAud3JpdGVfc2hpZnQoNCx5LmlUYWJJRCksUGMoeS5zdHJSZWxJRCxQKSxyYyh5Lm5hbWUuc2xpY2UoMCwzMSksUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9ZnVuY3Rpb24gV3YoeSxQ'@;
put 'KXt2YXIgTD17fTtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLEwuQXJjaElEPXkucmVhZF9zaGlmdCg0KSx5LmwrPVAtOCxMfWZ1bmN0aW9uIEhMKHksUCl7dmFyIEw9d2MoKTtyZXR1cm4gdWkoTCwiQnJ0QmVnaW5Cb29rIiksdWkoTCwiQnJ0RmlsZVZlcnNpb24iLGZ1bmN0aW9uIHNNKHksUCl7'@;
put 'UHx8KFA9cHIoMTI3KSk7Zm9yKHZhciBMPTA7NCE9TDsrK0wpUC53cml0ZV9zaGlmdCg0LDApO3JldHVybiByYygiU2hlZXRKUyIsUCkscmMoTS52ZXJzaW9uLFApLHJjKE0udmVyc2lvbixQKSxyYygiNzI2MiIsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KCkpLHVpKEwsIkJy'@;
put 'dFdiUHJvcCIsZnVuY3Rpb24gRkwoeSxQKXtQfHwoUD1wcig3MikpO3ZhciBMPTA7cmV0dXJuIHkmJnkuZmlsdGVyUHJpdmFjeSYmKEx8PTgpLFAud3JpdGVfc2hpZnQoNCxMKSxQLndyaXRlX3NoaWZ0KDQsMCksc20oeSYmeS5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIsUCksUC5zbGljZSgw'@;
put 'LFAubCl9KHkuV29ya2Jvb2smJnkuV29ya2Jvb2suV0JQcm9wc3x8bnVsbCkpLGZ1bmN0aW9uIGFNKHksUCl7aWYoUC5Xb3JrYm9vayYmUC5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgTD1QLldvcmtib29rLlNoZWV0cyxRPTAscmU9LTEsZ2U9LTE7UTxMLmxlbmd0aDsrK1EpIUxbUV18fCFM'@;
put 'W1FdLkhpZGRlbiYmLTE9PXJlP3JlPVE6MT09TFtRXS5IaWRkZW4mJi0xPT1nZSYmKGdlPVEpO2dlPnJlfHwodWkoeSwiQnJ0QmVnaW5Cb29rVmlld3MiKSx1aSh5LCJCcnRCb29rVmlldyIsZnVuY3Rpb24gZzUoeSxQKXtyZXR1cm4gUHx8KFA9cHIoMjkpKSxQLndyaXRlX3NoaWZ0KC00LDAp'@;
put 'LFAud3JpdGVfc2hpZnQoLTQsNDYwKSxQLndyaXRlX3NoaWZ0KDQsMjg4MDApLFAud3JpdGVfc2hpZnQoNCwxNzYwMCksUC53cml0ZV9zaGlmdCg0LDUwMCksUC53cml0ZV9zaGlmdCg0LHkpLFAud3JpdGVfc2hpZnQoNCx5KSxQLndyaXRlX3NoaWZ0KDEsMTIwKSxQLmxlbmd0aD5QLmw/UC5z'@;
put 'bGljZSgwLFAubCk6UH0ocmUpKSx1aSh5LCJCcnRFbmRCb29rVmlld3MiKSl9fShMLHkpLGZ1bmN0aW9uIEQ2KHksUCl7dWkoeSwiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIEw9MDtMIT1QLlNoZWV0TmFtZXMubGVuZ3RoOysrTCl1aSh5LCJCcnRCdW5kbGVTaCIsT0woe0hpZGRlbjpQ'@;
put 'Lldvcmtib29rJiZQLldvcmtib29rLlNoZWV0cyYmUC5Xb3JrYm9vay5TaGVldHNbTF0mJlAuV29ya2Jvb2suU2hlZXRzW0xdLkhpZGRlbnx8MCxpVGFiSUQ6TCsxLHN0clJlbElEOiJySWQiKyhMKzEpLG5hbWU6UC5TaGVldE5hbWVzW0xdfSkpO3VpKHksIkJydEVuZEJ1bmRsZVNocyIpfShM'@;
put 'LHkpLHVpKEwsIkJydEVuZEJvb2siKSxMLmVuZCgpfWZ1bmN0aW9uIFpMKHksUCxMLFEscmUpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9BTDpXSSkoeSxMLFEscmUpfWZ1bmN0aW9uIGxNKHksUCxMLFEscmUpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9ucDpRMykoeSxMLFEs'@;
put 'cmUpfWZ1bmN0aW9uIFdMKHksUCxMKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/eDM6TG0pKHksTCl9ZnVuY3Rpb24gSmUoeSxQLEwpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9lSTpWQykoeSxMKX12YXIgS3Y9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShb'@;
put 'XiddKikoPzonKSkvZyxYdj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIG11KHksUCl7dmFyIEw9eS5zcGxpdCgvXHMrLyksUT1bXTtpZihQfHwoUVswXT1MWzBdKSwxPT09TC5sZW5ndGgpcmV0dXJuIFE7dmFyIGdlLF9lLFNl'@;
put 'LHJlPXkubWF0Y2goS3YpO2lmKHJlKWZvcihTZT0wO1NlIT1yZS5sZW5ndGg7KytTZSktMT09PShfZT0oZ2U9cmVbU2VdLm1hdGNoKFh2KSlbMV0uaW5kZXhPZigiOiIpKT9RW2dlWzFdXT1nZVsyXS5zbGljZSgxLGdlWzJdLmxlbmd0aC0xKTpRWyJ4bWxuczoiPT09Z2VbMV0uc2xpY2UoMCw2'@;
put 'KT8ieG1sbnMiK2dlWzFdLnNsaWNlKDYpOmdlWzFdLnNsaWNlKF9lKzEpXT1nZVsyXS5zbGljZSgxLGdlWzJdLmxlbmd0aC0xKTtyZXR1cm4gUX1mdW5jdGlvbiBjTSh5KXt2YXIgTD17fTtpZigxPT09eS5zcGxpdCgvXHMrLykubGVuZ3RoKXJldHVybiBMO3ZhciByZSxnZSx2ZSxRPXkubWF0'@;
put 'Y2goS3YpO2lmKFEpZm9yKHZlPTA7dmUhPVEubGVuZ3RoOysrdmUpLTE9PT0oZ2U9KHJlPVFbdmVdLm1hdGNoKFh2KSlbMV0uaW5kZXhPZigiOiIpKT9MW3JlWzFdXT1yZVsyXS5zbGljZSgxLHJlWzJdLmxlbmd0aC0xKTpMWyJ4bWxuczoiPT09cmVbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK3Jl'@;
put 'WzFdLnNsaWNlKDYpOnJlWzFdLnNsaWNlKGdlKzEpXT1yZVsyXS5zbGljZSgxLHJlWzJdLmxlbmd0aC0xKTtyZXR1cm4gTH1mdW5jdGlvbiBHTCh5KXt2YXIgUD17fTtpZih5LkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBMPXtocHg6NCpwYXJzZUludCh5LkRlZmF1bHRSb3dIZWlnaHQpLzN9O0kz'@;
put 'KEwpLFAucm93PUx9aWYoeS5EZWZhdWx0Q29sV2lkdGgpe3ZhciBRPXt3cHg6NCpwYXJzZUludCh5LkRlZmF1bHRDb2xXaWR0aCkvM307cHUoUSksUC5jb2w9UX1yZXR1cm4gUH1mdW5jdGlvbiBSZSh5LFAsTCxRKXt2YXIgcmU9UTtzd2l0Y2goKExbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0r'@;
put 'KSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6cmU9eXIoUSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOnJlPXBhcnNlSW50KFEsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UiZmxvYXQiOnJlPXBhcnNlRmxvYXQoUSk7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6Ijpy'@;
put 'ZT1IdChRKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IitMWzBdKX15W3hyKFApXT1yZX12YXIgdU09ezA6Ik5vbmUiLDE6IlNpbmds'@;
put 'ZSIsMjoiRG91YmxlIiwzMzoiU2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxtZT1BZSh1TSk7ZnVuY3Rpb24geWUoeSxQLEwsUSl7aWYoUS5jZWxsU3R5bGVzKXtpZihMPUwucmVwbGFjZSgvXHMrL2csIiAiKSxQLkludGVyaW9yKXt2YXIgcmU9UC5JbnRlcmlvcjty'@;
put 'ZS5QYXR0ZXJuJiYocmUucGF0dGVyblR5cGU9SDRbcmUuUGF0dGVybl18fHJlLlBhdHRlcm4pLHJlLkNvbG9yJiZyZS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYocmUuZmdDb2xvcj17cmdiOnJlLkNvbG9yLnNsaWNlKDEpfSl9IWZ1bmN0aW9uIGRNKHkpe3kuQm9yZGVycyYmKHku'@;
put 'Qm9yZGVycy5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBMPVAuUG9zaXRpb24udG9Mb3dlckNhc2UoKTt5W0xdPXtzdHlsZTpxdChQLkxpbmVTdHlsZSwrUC5XZWlnaHQpLGNvbG9yOntyZ2I6KFAuQ29sb3J8fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSB5LkJvcmRlcnMpfShQKTt2'@;
put 'YXIgX2UsZ2U9TC5tYXRjaCgvPCg/Olx3KzopP0ZvbnRcc1tePl0qPi8pO2dlJiYoeXIoKF9lPWxuKGdlWzBdKSkuQm9sZCkmJihQLkJvbGQ9ITApLHlyKF9lLkl0YWxpYykmJihQLkl0YWxpYz0hMCkseXIoX2UuU3RyaWtlVGhyb3VnaCkmJihQLlN0cmlrZT0hMCksX2UuU2l6ZSYmKFAuU2l6'@;
put 'ZT0rX2UuU2l6ZSksUC5Gb250TmFtZT1fZS5Gb250TmFtZT9fZS5Gb250TmFtZToiQXJpYWwiLF9lLlVuZGVybGluZSYmKFAuVW5kZXJsaW5lPW1lW19lLlVuZGVybGluZV0pLF9lLkNvbG9yJiYoUC5SR0I9X2UuQ29sb3Iuc2xpY2UoLTYpKSksUC5BbGlnbm1lbnQmJihQLmFsaWdubWVudD17'@;
put 'fSxQLkFsaWdubWVudC5WZXJ0aWNhbCYmKFAuYWxpZ25tZW50LnZlcnRpY2FsPVAuQWxpZ25tZW50LlZlcnRpY2FsLnRvTG93ZXJDYXNlKCkpLFAuQWxpZ25tZW50Lkhvcml6b250YWwmJihQLmFsaWdubWVudC5ob3Jpem9udGFsPVAuQWxpZ25tZW50Lkhvcml6b250YWwudG9Mb3dlckNhc2Uo'@;
put 'KSkseXIoUC5BbGlnbm1lbnQuV3JhcFRleHR8fCIwIik/UC5hbGlnbm1lbnQud3JhcFRleHQ9ITA6bnVsbD09UC5BbGlnbm1lbnQuV3JhcFRleHQmJmRlbGV0ZSBQLmFsaWdubWVudC53cmFwVGV4dCx5cihQLkFsaWdubWVudC5TaHJpbmtUb0ZpdHx8IjAiKSYmKFAuYWxpZ25tZW50LnNocmlu'@;
put 'a1RvRml0PSEwKSwrUC5BbGlnbm1lbnQuSW5kZW50JiYoUC5hbGlnbm1lbnQuaW5kZW50PStQLkFsaWdubWVudC5JbmRlbnR8fDApLCtQLkFsaWdubWVudC5Sb3RhdGUmJihQLmFsaWdubWVudC50ZXh0Um90YXRpb249K1AuQWxpZ25tZW50LlJvdGF0ZXx8MCkpfXlbUC5JRF09UCwoIkRlZmF1'@;
put 'bHQiPT1QLklEfHwiTm9ybWFsIj09UC5OYW1lKSYmWjEoUCl9ZnVuY3Rpb24gcXQoeSxQKXtzd2l0Y2goeSl7Y2FzZSJOb25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJEYXNoIjpyZXR1cm4iZGFzaGVkIjtjYXNlIkRvdCI6cmV0dXJuImRvdHRlZCI7Y2FzZSJEYXNoRG90IjpyZXR1cm4iZGFzaERv'@;
put 'dCI7Y2FzZSJEYXNoRG90RG90IjpyZXR1cm4iZGFzaERvdERvdCI7Y2FzZSJTbGFudERhc2hEb3QiOnJldHVybiJzbGFudERhc2hEb3QiO2Nhc2UiRG91YmxlIjpyZXR1cm4iZG91YmxlIjtjYXNlIkNvbnRpbnVvdXMiOnN3aXRjaCgrUHx8MCl7Y2FzZSAwOnJldHVybiJoYWlyIjtjYXNlIDE6'@;
put 'cmV0dXJuInRoaW4iO2Nhc2UgMjpyZXR1cm4ibWVkaXVtIjtjYXNlIDM6cmV0dXJuInRoaWNrIn1yZXR1cm4idGhpbiJ9cmV0dXJuIHl9ZnVuY3Rpb24gaE0oeSxQLEwsUSxyZSxnZSxfZSx2ZSxTZSxIZSl7dmFyIEJlPSJHZW5lcmFsIixHZT1RLlN0eWxlSUQsbnQ9e307SGU9SGV8fHt9O3Zh'@;
put 'ciBkdD1bXSxDdD0wO2Zvcih2b2lkIDA9PT1HZSYmdmUmJihHZT12ZS5TdHlsZUlEKSx2b2lkIDA9PT1HZSYmX2UmJihHZT1fZS5TdHlsZUlEKTt2b2lkIDAhPT1nZVtHZV07KXt2YXIgY3Q9Z2VbR2VdO2lmKCJHZW5lcmFsIj09QmUmJmN0Lm5mJiYoQmU9Z2VbR2VdLm5mKSxjdC5JbnRlcmlv'@;
put 'ciYmZHQucHVzaChnZVtHZV0uSW50ZXJpb3IpLGN0LmFsaWdubWVudCYmKG50LmFsaWdubWVudHx8KG50LmFsaWdubWVudD1vbihjdC5hbGlnbm1lbnQpKSksbnVsbD09bnQuYm9sZCYmY3QuQm9sZCYmKG50LmJvbGQ9ITApLG51bGw9PW50Lml0YWxpYyYmY3QuSXRhbGljJiYobnQuaXRhbGlj'@;
put 'PSEwKSxudWxsPT1udC5zdHJpa2UmJmN0LlN0cmlrZSYmKG50LnN0cmlrZT0hMCksbnVsbD09bnQuc3omJmN0LlNpemUmJihudC5zej1jdC5TaXplKSxudWxsPT1udC5uYW1lJiZjdC5Gb250TmFtZSYmKG50Lm5hbWU9Y3QuRm9udE5hbWUpLG51bGw9PW50LnVuZGVybGluZSYmY3QuVW5kZXJs'@;
put 'aW5lJiYobnQudW5kZXJsaW5lPWN0LlVuZGVybGluZSksbnVsbD09bnQuY29sb3ImJmN0LlJHQiYmKG50LmNvbG9yPXtyZ2I6Y3QuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtudWxsPT1udFtUdF0mJmN0W1R0XSYmKG50W1R0XT1v'@;
put 'bihjdFtUdF0pKX0pLCJEZWZhdWx0Ij09R2UpYnJlYWs7R2U9Y3QuUGFyZW50fHwiRGVmYXVsdCJ9bnQubmFtZXx8KG50Lm5hbWU9Z2UuRGVmYXVsdCYmZ2UuRGVmYXVsdC5Gb250TmFtZXx8IkFyaWFsIiksbnQuc3p8fChudC5zej1nZS5EZWZhdWx0JiZnZS5EZWZhdWx0LlNpemV8fDEyKTt2'@;
put 'YXIgYnQ9IiI7aWYoeXx8US5Gb3JtdWxhfHwiU3RyaW5nIj09TC5UeXBlfHwiTnVtYmVyIj09TC5UeXBlKXN3aXRjaChMLlR5cGUpe2Nhc2UiQm9vbGVhbiI6US50PSJiIixRLnY9eXIoeSk7YnJlYWs7Y2FzZSJTdHJpbmciOlEudD0icyIsYnQ9R2koeHIoeSkpLFEudj15LmluZGV4T2YoIjwi'@;
put 'KT4tMT94cihQfHx5KS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LHkuaW5kZXhPZigiPCIpPi0xJiYoUS5SPUZ1Lmh0bWxfdG9fcnMoeHIoeSkpKTticmVhaztjYXNlIkRhdGVUaW1lIjoiWiIhPXkuc2xpY2UoLTEpJiYoeSs9IloiKSxRLnY9KEh0KHkpLW5ldyBEYXRlKERhdGUuVVRDKDE4'@;
put 'OTksMTEsMzApKSkvODY0ZTUsUS52IT1RLnY/US52PXhyKHkpOlEudjw2MCYmKFEudj1RLnYtMSksKCFCZXx8IkdlbmVyYWwiPT1CZSkmJihCZT0ieXl5eS1tbS1kZCIpO2Nhc2UiTnVtYmVyIjp2b2lkIDA9PT1RLnYmJihRLnY9K3kpLFEudHx8KFEudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3Ii'@;
put 'OlEudD0iZSIsUS52PUthW3ldLCExIT09SGUuY2VsbFRleHQmJihRLnc9eSk7YnJlYWs7ZGVmYXVsdDoiIj09eSYmIiI9PVA/US50PSJ6IjooUS50PSJzIixidD1HaSh4cih5KSksUS52PXkuaW5kZXhPZigiPCIpPi0xP3hyKFB8fHkpLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6YnQseS5pbmRl'@;
put 'eE9mKCI8Iik+LTEmJihRLlI9RnUuaHRtbF90b19ycyh4cih5KSkpKX1lbHNlIFEudD0ieiIsZGVsZXRlIFEudjtpZihmdW5jdGlvbiBKdih5LFAsTCl7aWYoInoiIT09eS50KXtpZighTHx8ITEhPT1MLmNlbGxUZXh0KXRyeXt5Lnc9ImUiPT09eS50P3kud3x8UW9beS52XToiR2VuZXJhbCI9'@;
put 'PT1QPyJuIj09PXkudD8oMHx5LnYpPT09eS52P3cuX2dlbmVyYWxfaW50KHkudik6dy5fZ2VuZXJhbF9udW0oeS52KTp3Ll9nZW5lcmFsKHkudik6ZnVuY3Rpb24gJGkoeSxQKXt2YXIgTD1uZVt5XXx8eHIoeSk7cmV0dXJuIkdlbmVyYWwiPT09TD93Ll9nZW5lcmFsKFApOncuZm9ybWF0KEws'@;
put 'UCl9KFB8fCJHZW5lcmFsIix5LnYpfWNhdGNoKGdlKXtpZihMLldURil0aHJvdyBnZX10cnl7dmFyIFE9bmVbUF18fFB8fCJHZW5lcmFsIjtpZihMLmNlbGxORiYmKHkuej1RKSxMLmNlbGxEYXRlcyYmIm4iPT15LnQmJncuaXNfZGF0ZShRKSl7dmFyIHJlPXcucGFyc2VfZGF0ZV9jb2RlKHku'@;
put 'dik7cmUmJih5LnQ9ImQiLHkudj1uZXcgRGF0ZShyZS55LHJlLm0tMSxyZS5kLHJlLkgscmUuTSxyZS5TLHJlLnUpKX19Y2F0Y2goZ2Upe2lmKEwuV1RGKXRocm93IGdlfX19KFEsQmUsSGUpLCExIT09SGUuY2VsbEZvcm11bGEpaWYoUS5Gb3JtdWxhKXt2YXIgRnQ9eHIoUS5Gb3JtdWxhKTs2'@;
put 'MT09RnQuY2hhckNvZGVBdCgwKSYmKEZ0PUZ0LnNsaWNlKDEpKSxRLmY9YWYoRnQscmUpLGRlbGV0ZSBRLkZvcm11bGEsIlJDIj09US5BcnJheVJhbmdlP1EuRj1hZigiUkM6UkMiLHJlKTpRLkFycmF5UmFuZ2UmJihRLkY9YWYoUS5BcnJheVJhbmdlLHJlKSxTZS5wdXNoKFtPaShRLkYpLFEu'@;
put 'Rl0pKX1lbHNlIGZvcihDdD0wO0N0PFNlLmxlbmd0aDsrK0N0KXJlLnI+PVNlW0N0XVswXS5zLnImJnJlLnI8PVNlW0N0XVswXS5lLnImJnJlLmM+PVNlW0N0XVswXS5zLmMmJnJlLmM8PVNlW0N0XVswXS5lLmMmJihRLkY9U2VbQ3RdWzFdKTtpZihIZS5jZWxsU3R5bGVzJiYoZHQuZm9yRWFj'@;
put 'aChmdW5jdGlvbihUdCl7IW50LnBhdHRlcm5UeXBlJiZUdC5wYXR0ZXJuVHlwZSYmKG50LnBhdHRlcm5UeXBlPVR0LnBhdHRlcm5UeXBlKSwhbnQuZmdDb2xvciYmVHQuZmdDb2xvciYmKG50LmZnQ29sb3I9VHQuZmdDb2xvcil9KSxRLnM9bnQpLHZvaWQgMCE9PVEuU3R5bGVJRCYmKFEuaXhm'@;
put 'ZT1RLlN0eWxlSUQpLFEuUiYmUS5zKXt2YXIga3Q9b24oUS5zKTtkZWxldGUga3QuYm9sZCxkZWxldGUga3QuaXRhbGljLGRlbGV0ZSBrdC51bmRlcmxpbmUsZGVsZXRlIGt0LnN0cmlrZSxRLlIuZm9yRWFjaChmdW5jdGlvbihUdCl7VHQucz1VdChvbihrdCksVHQucyl9KX19ZnVuY3Rpb24g'@;
put 'JEwoeSl7eS50PXkudnx8IiIseS50PXkudC5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSx5LnY9eS53PXkuaXhmZT12b2lkIDB9ZnVuY3Rpb24gUXYoeSl7aWYoaGUmJkJ1ZmZlci5pc0J1ZmZlcih5KSlyZXR1cm4geS50b1N0cmluZygidXRmOCIpO2lmKCJzdHJp'@;
put 'bmciPT10eXBlb2YgeSlyZXR1cm4geTtpZih0eXBlb2YgVWludDhBcnJheTwidSImJnkgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBQaShOKEMoeSkpKTt0aHJvdyBuZXcgRXJyb3IoIkJhZCBpbnB1dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgVnI9Lzwo'@;
put 'XC8/KShbXlxzPz48IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9uIHpyKHksUCl7dmFyIEw9UHx8e30sUT1VKFF2KHkpKTsoImJpbmFyeSI9PUwudHlwZXx8ImFycmF5Ij09TC50eXBlfHwiYmFzZTY0Ij09TC50eXBlKSYmKFE9dHlwZW9m'@;
put 'IGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLEIoUSkpOlBpKFEpKTt2YXIgcmU9US5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksZ2U9ITE7aWYoKDEwMjMmcmUuaW5kZXhPZigiPiIpKT5NYXRoLm1pbigxMDIzJnJlLmluZGV4T2YoIiwiKSwxMDIzJnJlLmluZGV4'@;
put 'T2YoIjsiKSkpe3ZhciBfZT1vbihMKTtyZXR1cm4gX2UudHlwZT0ic3RyaW5nIixCMS50b193b3JrYm9vayhRLF9lKX1pZigtMT09cmUuaW5kZXhPZigiPD94bWwiKSYmWyJodG1sIiwidGFibGUiLCJoZWFkIiwibWV0YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9yRWFjaChmdW5jdGlv'@;
put 'bihudSl7cmUuaW5kZXhPZigiPCIrbnUpPj0wJiYoZ2U9ITApfSksZ2UpcmV0dXJuIEZ1LnRvX3dvcmtib29rKFEsTCk7dmFyIHZlLEhlLFNlPVtdO251bGwhPXRlJiZudWxsPT1MLmRlbnNlJiYoTC5kZW5zZT10ZSk7dmFyIHVyLEJlPXt9LEdlPVtdLG50PUwuZGVuc2U/W106e30sZHQ9IiIs'@;
put 'Q3Q9e30sY3Q9e30sYnQ9e30sRnQ9bXUoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+Jyksa3Q9MCxUdD0wLFp0PTAscG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sS249e30sdW49e30scW49IiIsem49MCxrbj1bXSxlcj17fSx0cj17fSxabj0wLEJyPVtdLHNpPXt9LHhpPVtdLExp'@;
put 'PXt9LFFyPVtdLEFuPSExLHZyPVtdLHJyPVtdLFNuPXt9LG1yPTAsd2k9MCxVcj17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfX0samk9e307VnIubGFzdEluZGV4PTAsUT1RLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIF9vPSIiO3ZlPVZyLmV4ZWMo'@;
put 'USk7KXN3aXRjaCh2ZVszXT0oX289dmVbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEiPT1fbyl7aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UiLyIh'@;
put 'PT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFt2ZVszXSwhMF0pO2JyZWFrfWlmKFNlW1NlLmxlbmd0aC0xXVsxXSlicmVhazsiLyI9PT12ZVsxXT9oTShRLnNsaWNlKGt0LHZlLmluZGV4KSxxbixGdCwiY29tbWVudCI9PVNlW1NlLmxlbmd0aC0xXVswXT9MaTpjdCx7'@;
put 'YzpUdCxyOlp0fSxLbixRcltUdF0sYnQsdnIsTCk6KHFuPSIiLEZ0PW11KHZlWzBdKSxrdD12ZS5pbmRleCt2ZVswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiY2VsbCI6aWYoIi8iPT09dmVbMV18fCIvPiI9PT12ZVswXS5zbGljZSgtMikpe2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpe2lmKChj'@;
put 'dD1jTSh2ZVswXSkpLkluZGV4JiYoVHQ9K2N0LkluZGV4LTEpLFR0PHBuLnMuYyYmKHBuLnMuYz1UdCksVHQ+cG4uZS5jJiYocG4uZS5jPVR0KSx4aT1bXSwhTC5zaGVldFN0dWJzKXsrK1R0O2JyZWFrfWhNKCIiLCIiLHt9LCJjb21tZW50Ij09U2VbU2UubGVuZ3RoLTFdWzBdP0xpOmN0LHtj'@;
put 'OlR0LHI6WnR9LEtuLFFyW1R0XSxidCx2cixMKX1pZih4aS5sZW5ndGg+MCYmKGN0LmM9eGkpLCghTC5zaGVldFJvd3N8fEwuc2hlZXRSb3dzPlp0KSYmKHZvaWQgMCE9PWN0LnZ8fEwuc2hlZXRTdHVicykmJihMLmRlbnNlPyhudFtadF18fChudFtadF09W10pLG50W1p0XVtUdF09Y3QpOm50'@;
put 'W05zKFR0KStIcyhadCldPWN0KSxjdC5IUmVmJiYoY3QubD17VGFyZ2V0OnhyKGN0LkhSZWYpfSxjdC5IUmVmU2NyZWVuVGlwJiYoY3QubC5Ub29sdGlwPWN0LkhSZWZTY3JlZW5UaXApLGRlbGV0ZSBjdC5IUmVmLGRlbGV0ZSBjdC5IUmVmU2NyZWVuVGlwKSwoY3QuTWVyZ2VBY3Jvc3N8fGN0'@;
put 'Lk1lcmdlRG93bikmJihtcj1UdCsoMHxwYXJzZUludChjdC5NZXJnZUFjcm9zcywxMCkpLHdpPVp0KygwfHBhcnNlSW50KGN0Lk1lcmdlRG93biwxMCkpLChtcj5UdHx8d2k+WnQpJiZrbi5wdXNoKHtzOntjOlR0LHI6WnR9LGU6e2M6bXIscjp3aX19KSksTC5zaGVldFN0dWJzKWlmKGN0Lk1l'@;
put 'cmdlQWNyb3NzfHxjdC5NZXJnZURvd24pe2Zvcih2YXIgVGk9VHQ7VGk8PW1yOysrVGkpZm9yKHZhciBZbz1adDtZbzw9d2k7KytZbykoVGk+VHR8fFlvPlp0KSYmKEwuZGVuc2U/KG50W1lvXXx8KG50W1lvXT1bXSksbnRbWW9dW1RpXT17dDoieiJ9KTpudFtOcyhUaSkrSHMoWW8pXT17dDoi'@;
put 'eiJ9KTtUdD1tcisxfWVsc2UrK1R0O2Vsc2UgY3QuTWVyZ2VBY3Jvc3M/VHQ9bXIrMTorK1R0fWVsc2UoY3Q9Y00odmVbMF0pKS5JbmRleCYmKFR0PStjdC5JbmRleC0xKSxUdDxwbi5zLmMmJihwbi5zLmM9VHQpLFR0PnBuLmUuYyYmKHBuLmUuYz1UdCksIi8+Ij09PXZlWzBdLnNsaWNlKC0y'@;
put 'KSYmKytUdCx4aT1bXTticmVhaztjYXNlInJvdyI6Ii8iPT09dmVbMV18fCIvPiI9PT12ZVswXS5zbGljZSgtMik/KFp0PHBuLnMuciYmKHBuLnMucj1adCksWnQ+cG4uZS5yJiYocG4uZS5yPVp0KSwiLz4iPT09dmVbMF0uc2xpY2UoLTIpJiYoYnQ9bXUodmVbMF0pKS5JbmRleCYmKFp0PSti'@;
put 'dC5JbmRleC0xKSxUdD0wLCsrWnQpOigoYnQ9bXUodmVbMF0pKS5JbmRleCYmKFp0PStidC5JbmRleC0xKSxTbj17fSwoIjAiPT1idC5BdXRvRml0SGVpZ2h0fHxidC5IZWlnaHQpJiYoU24uaHB0PXBhcnNlRmxvYXQoYnQuSGVpZ2h0KSxTbi5ocHg9VTEoU24uaHB0KSxycltadF09U24pLCIx'@;
put 'Ij09YnQuSGlkZGVuJiYoU24uaGlkZGVuPSEwLHJyW1p0XT1TbikpO2JyZWFrO2Nhc2Uid29ya3NoZWV0IjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSk7R2UucHVzaChkdCkscG4u'@;
put 'cy5yPD1wbi5lLnImJnBuLnMuYzw9cG4uZS5jJiYobnRbIiFyZWYiXT1PbyhwbiksTC5zaGVldFJvd3MmJkwuc2hlZXRSb3dzPD1wbi5lLnImJihudFsiIWZ1bGxyZWYiXT1udFsiIXJlZiJdLHBuLmUucj1MLnNoZWV0Um93cy0xLG50WyIhcmVmIl09T28ocG4pKSksa24ubGVuZ3RoJiYobnRb'@;
put 'IiFtZXJnZXMiXT1rbiksUXIubGVuZ3RoPjAmJihudFsiIWNvbHMiXT1RcikscnIubGVuZ3RoPjAmJihudFsiIXJvd3MiXT1yciksQ3QmJihudFsiIXNoZWV0Rm9ybWF0Il09R0woQ3QpKSxCZVtkdF09bnR9ZWxzZSBwbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxadD1UdD0wLFNl'@;
put 'LnB1c2goW3ZlWzNdLCExXSksSGU9bXUodmVbMF0pLGR0PXhyKEhlLk5hbWUpLG50PUwuZGVuc2U/W106e30sa249W10sdnI9W10scnI9W10sVXIuU2hlZXRzLnB1c2goamk9e25hbWU6ZHQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBv'@;
put 'cCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZXtpZigiLz4iPT12ZVswXS5zbGljZSgtMikpYnJlYWs7Q3Q9bXUodmVbMF0pLFNlLnB1c2goW3ZlWzNdLCExXSksUXI9W10sQW49ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09'@;
put 'dmVbMV0/eWUoS24sdW4scW4sTCk6KHVuPW11KHZlWzBdKSxxbj0iIik7YnJlYWs7Y2FzZSJudW1iZXJmb3JtYXQiOnVuLm5mPXhyKG11KHZlWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiksbmVbdW4ubmZdJiYodW4ubmY9bmVbdW4ubmZdKTtmb3IodmFyIGxvPTA7MzkyIT1sbyYmdy5fdGFibGVb'@;
put 'bG9dIT11bi5uZjsrK2xvKTtpZigzOTI9PWxvKWZvcihsbz01NzszOTIhPWxvOysrbG8paWYobnVsbD09dy5fdGFibGVbbG9dKXt3LmxvYWQodW4ubmYsbG8pO2JyZWFrfWJyZWFrO2Nhc2UiY29sdW1uIjppZigidGFibGUiIT09U2VbU2UubGVuZ3RoLTFdWzBdfHwiLyI9PT12ZVsxXSlicmVh'@;
put 'aztpZigodXI9bXUodmVbMF0pKS5IaWRkZW4mJih1ci5oaWRkZW49ITAsZGVsZXRlIHVyLkhpZGRlbiksdXIuV2lkdGg/dXIud3B4PTQqcGFyc2VJbnQodXIuV2lkdGgsMTApLzM6K3VyLkF1dG9GaXRXaWR0aCYmKHVyLmF1dG89MSksIUFuJiZ1ci53cHg+MTApe0FuPSEwLHBsPWxDO2Zvcih2'@;
put 'YXIgQW89MDtBbzxRci5sZW5ndGg7KytBbylRcltBb10mJnB1KFFyW0FvXSl9QW4mJnB1KHVyKSxRclt1ci5JbmRleC0xfHxRci5sZW5ndGhdPXVyO2Zvcih2YXIgeG89MDt4bzwrdXIuU3BhbjsrK3hvKVFyW1FyLmxlbmd0aF09b24odXIpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8i'@;
put 'PT09dmVbMV0pYnJlYWs7VXIuTmFtZXN8fChVci5OYW1lcz1bXSk7dmFyIGhpPWxuKHZlWzBdKSx0YT17TmFtZTpoaS5OYW1lLFJlZjphZihoaS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtVci5TaGVldHMubGVuZ3RoPjAmJih0YS5TaGVldD1Vci5TaGVldHMubGVuZ3RoLTEpLFVy'@;
put 'Lk5hbWVzLnB1c2godGEpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2Fz'@;
put 'ZSJuYW1lIjpicmVhaztjYXNlImFsaWdubWVudCI6aWYoIUwuY2VsbFN0eWxlc3x8Ii8iPT09dmVbMV0pYnJlYWs7dW4uQWxpZ25tZW50PW11KHZlWzBdKTticmVhaztjYXNlImJvcmRlcnMiOiIvIiE9PXZlWzFdJiYodW4uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09'@;
put 'PXZlWzFdKWJyZWFrO3VuLkJvcmRlcnN8fCh1bi5Cb3JkZXJzPVtdKSx1bi5Cb3JkZXJzLnB1c2gobXUodmVbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpe3FuKz12ZVswXTticmVha30iLyI9PT12ZVsxXT9xbis9US5zbGljZSh6bix2ZS5pbmRleCt2'@;
put 'ZVswXS5sZW5ndGgpOnpuPXZlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFMLmNlbGxTdHlsZXN8fCIvIj09PXZlWzFdKWJyZWFrO3VuLkludGVyaW9yPW11KHZlWzBdKTticmVhaztjYXNlImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVk'@;
put 'IjpjYXNlImtleXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBl'@;
put 'cmxpbmtiYXNlIjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/UmQoZXIsX28sUS5zbGljZShabix2ZS5pbmRleCkp'@;
put 'OlpuPXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UgU2UucHVzaChbdmVb'@;
put 'M10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKTskTChMaSkseGkucHVzaChMaSl9ZWxzZSBTZS5wdXNoKFt2ZVszXSwhMV0pLExpPXth'@;
put 'OihIZT1tdSh2ZVswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT12ZVswXS5jaGFyQXQodmVb'@;
put 'MF0ubGVuZ3RoLTIpKXt2YXIgTW49bXUodmVbMF0pO250WyIhYXV0b2ZpbHRlciJdPXtyZWY6YWYoTW4uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxTZS5wdXNoKFt2ZVszXSwhMF0pfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOmlmKG50WyIhdmFsaWRhdGlvbnMiXXx8KG50WyIhdmFs'@;
put 'aWRhdGlvbnMiXT1bXSksIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFt2ZVszXSwhMF0pLHNpPXt9'@;
put 'O2JyZWFrO2Nhc2UicGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09dmVbMV0pe3ZhciBNcz0rUS5zbGljZShrdCx2ZS5pbmRleCk7KDcyPT1Nc3x8OTY9PU1zKSYmRm0oTXMpfWVsc2Uga3Q9dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1'@;
put 'bWVudHByb3BlcnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5hbWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRh'@;
put 'YmxlIjpjYXNlInNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNhc2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIv'@;
put 'Ij09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNlIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmU2UucHVzaChbdmVbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PVNl'@;
put 'Lmxlbmd0aCYmImRvY3VtZW50Ij09dmVbM118fDA9PVNlLmxlbmd0aCYmInVvZiI9PXZlWzNdKXJldHVybiBhXyhRLEwpO3ZhciB5cz0hMDtzd2l0Y2goU2VbU2UubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaCh2ZVszXSl7Y2FzZSJhbGxvd3BuZyI6'@;
put 'Y2FzZSJyZW1vdmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xvcnMiOmNhc2UiY29sb3IiOmNhc2UiaW5kZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9u'@;
put 'bHlyZWNvbW1lbmRlZCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpj'@;
put 'YXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2godmVbM10pe2Nhc2UiZGF0ZTE5MDQiOlVyLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5k'@;
put 'b3doZWlnaHQiOmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRvdyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJk'@;
put 'aXNwbGF5aW5rbm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJzaGVldGluZGV4Zmlyc3QiOmNhc2Uic2hlZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVs'@;
put 'YXMiOmNhc2UiZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNhc2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxj'@;
put 'ZWQiOmNhc2Uic3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3QiOmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJib29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5v'@;
put 'YXV0b3JlY292ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFjMSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlv'@;
put 'bnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09dmVbMF0uc2xpY2UoLTIpKWlm'@;
put 'KCIvIj09PXZlWzFdKXN3aXRjaChRLnNsaWNlKFpuLHZlLmluZGV4KSl7Y2FzZSJTaGVldEhpZGRlbiI6amkuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOmppLkhpZGRlbj0yfWVsc2UgWm49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjpudFsi'@;
put 'IW1hcmdpbnMiXXx8ZGYobnRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxudFsiIW1hcmdpbnMiXS5oZWFkZXI9bG4odmVbMF0pLk1hcmdpbjticmVhaztjYXNlImZvb3RlciI6bnRbIiFtYXJnaW5zIl18fGRmKG50WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksbnRbIiFtYXJnaW5zIl0uZm9vdGVy'@;
put 'PWxuKHZlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIEVsPWxuKHZlWzBdKTtudFsiIW1hcmdpbnMiXXx8ZGYobnRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxFbC5Ub3AmJihudFsiIW1hcmdpbnMiXS50b3A9RWwuVG9wKSxFbC5MZWZ0JiYobnRbIiFtYXJnaW5zIl0u'@;
put 'bGVmdD1FbC5MZWZ0KSxFbC5SaWdodCYmKG50WyIhbWFyZ2lucyJdLnJpZ2h0PUVsLlJpZ2h0KSxFbC5Cb3R0b20mJihudFsiIW1hcmdpbnMiXS5ib3R0b209RWwuQm90dG9tKTticmVhaztjYXNlImRpc3BsYXlyaWdodHRvbGVmdCI6VXIuVmlld3N8fChVci5WaWV3cz1bXSksVXIuVmlld3Nb'@;
put 'MF18fChVci5WaWV3c1swXT17fSksVXIuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6'@;
put 'Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVu'@;
put 'YWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlz'@;
put 'aWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJm'@;
put 'aXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dp'@;
put 'bnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFk'@;
put 'aW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6'@;
put 'Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09dmVbMF0u'@;
put 'c2xpY2UoLTIpKWlmKCIvIj09dmVbMV0pe250WyIhZnJlZXplIl18fChudFsiIWZyZWV6ZSJdPSJBMSIpO3ZhciBzbD1zcyhudFsiIWZyZWV6ZSJdKTsic3BsaXRob3Jpem9udGFsIj09dmVbM10/c2wucj0rUS5zbGljZShabix2ZS5pbmRleCk6c2wuYz0rUS5zbGljZShabix2ZS5pbmRleCks'@;
put 'bnRbIiFmcmVlemUiXT1kaShzbCl9ZWxzZSBabj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOm50WyIhZ3JpZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOm50WyIhb3V0bGluZSJdfHwobnRbIiFv'@;
put 'dXRsaW5lIl09e30pLG50WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjpudFsiIW91dGxpbmUiXXx8KG50WyIhb3V0bGluZSJdPXt9KSxudFsiIW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2Fz'@;
put 'ZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxlaXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ryb3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJv'@;
put 'cmllbnRhdGlvbiI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlvbiI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2UiZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2Ui'@;
put 'cGFyZW50ZmllbGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5cGUiOmNhc2UicHRzb3VyY2UiOmNhc2UiY2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZp'@;
put 'bGVuYW1lIjpjYXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJoaWRkZW4iOmNhc2Uic3VidG90YWwiOmNhc2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24i'@;
put 'OmNhc2UicmVmcmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVmcmVzaG5hbWUiOmNhc2UicmVmcmVzaGRhdGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVz'@;
put 'aCI6Y2FzZSJ2ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3VsYXRpb24iOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2godmVbM10pe2Nhc2UiY29s'@;
put 'YnJlYWtzIjpjYXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKHZlWzNdKXtjYXNlImF1dG9maWx0'@;
put 'ZXJjb2x1bW4iOmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2Fz'@;
put 'ZSJhdXRvZm9ybWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hlZGlueGw5IjpjYXNlInVybHN0cmluZyI6Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRl'@;
put 'eHQiOmNhc2UicmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2UiZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNlInRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpj'@;
put 'YXNlImRlY2ltYWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmllbGR0eXBlIjpjYXNlImRlbGltaXRlcnMiOmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNl'@;
put 'InZlcnNpb25sYXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dpdGNoKHZlWzNdKXtjYXNlInJhbmdlIjpzaS5yZWY9dmU7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNh'@;
put 'c2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJj'@;
put 'b21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInNv'@;
put 'cnRpbmciOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2godmVbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpj'@;
put 'YXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFs'@;
put 'aWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJtYXBpbmZvIjpjYXNlInNjaGVtYSI6Y2FzZSJkYXRhIjpzd2l0Y2godmVbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNl'@;
put 'InJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2Ui'@;
put 'ZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1pZih5c3x8dmVbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIVNl'@;
put 'W1NlLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3ZlWzNdKyJ8IitTZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI9PT1TZVtTZS5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/UmUo'@;
put 'dHIsX28sQnIsUS5zbGljZShabix2ZS5pbmRleCkpOihCcj12ZSxabj12ZS5pbmRleCt2ZVswXS5sZW5ndGgpO2JyZWFrfWlmKEwuV1RGKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrdmVbM10rInwiK1NlLmpvaW4oInwiKX12YXIgZ2w9e307cmV0dXJuIUwuYm9va1NoZWV0cyYmIUwuYm9v'@;
put 'a1Byb3BzJiYoZ2wuU2hlZXRzPUJlKSxnbC5TaGVldE5hbWVzPUdlLGdsLldvcmtib29rPVVyLGdsLlNTRj13LmdldF90YWJsZSgpLGdsLlByb3BzPWVyLGdsLkN1c3Rwcm9wcz10cixnbC5TaGVldHMmJmdsLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihudSl7dmFyIHRsPWdsLlNoZWV0'@;
put 'c1tudV07dGxbIiFtZXJnZXMiXSYmdGxbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKEt0KXsic3RyaW5nIj09dHlwZW9mIEt0JiYoS3Q9TS51dGlscy5kZWNvZGVfcmFuZ2UoS3QpKTt2YXIgZ249TS51dGlscy5lbmNvZGVfY2VsbChLdC5zKSxMbj1BcnJheS5pc0FycmF5KHRsKT8odGxb'@;
put 'S3Qucy5yXXx8W10pW0t0LnMuY106dGxbZ25dO0xuJiZMbi5zJiYobnVsbCE9TG4ucy50b3AmJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7dG9wOkxuLnMudG9wfSksbnVsbCE9TG4ucy5ib3R0b20mJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7Ym90dG9tOkxuLnMu'@;
put 'Ym90dG9tfSksbnVsbCE9TG4ucy5sZWZ0JiZxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUodGwsS3Qse2xlZnQ6TG4ucy5sZWZ0fSksbnVsbCE9TG4ucy5yaWdodCYmcW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxlKHRsLEt0LHtyaWdodDpMbi5zLnJpZ2h0fSkpfSl9KSxnbH1mdW5jdGlvbiBqYSh5'@;
put 'LFApe3N3aXRjaChQNihQPVB8fHt9KSxQLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6cmV0dXJuIHpyKHNlLmRlY29kZSh5KSxQKTtjYXNlImJpbmFyeSI6Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6cmV0dXJuIHpyKHksUCk7Y2FzZSJhcnJheSI6cmV0dXJuIHpyKE4oeSksUCl9fWZ1'@;
put 'bmN0aW9uIFZuKHkpe3JldHVybiBTcigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUiOnkuTmFtZSwic3M6UmVmZXJzVG8iOiI9IitLOSh5LlJlZix7cjowLGM6MH0pfSl9ZnVuY3Rpb24gZ00oeSxQLEwsUSxyZSxnZSxfZSl7aWYoIXl8fG51bGw9PXkudiYmbnVsbD09eS5mJiYhUS5zaGVl'@;
put 'dFN0dWJzKXJldHVybiIiO3ZhciB2ZT17fTtpZih5LmYmJih2ZVsic3M6Rm9ybXVsYSJdPSI9IitIcihLOSh5LmYsX2UpKSkseS5GJiZ5LkYuc2xpY2UoMCxQLmxlbmd0aCk9PVApe3ZhciBTZT1zcyh5LkYuc2xpY2UoUC5sZW5ndGgrMSkpO3ZlWyJzczpBcnJheVJhbmdlIl09IlJDOlIiKyhT'@;
put 'ZS5yPT1fZS5yPyIiOiJbIisoU2Uuci1fZS5yKSsiXSIpKyJDIisoU2UuYz09X2UuYz8iIjoiWyIrKFNlLmMtX2UuYykrIl0iKX1pZih5LmwmJnkubC5UYXJnZXQmJih2ZVsic3M6SFJlZiJdPUhyKHkubC5UYXJnZXQpLHkubC5Ub29sdGlwJiYodmVbIng6SFJlZlNjcmVlblRpcCJdPUhyKHku'@;
put 'bC5Ub29sdGlwKSkpLExbIiFtZXJnZXMiXSlmb3IodmFyIEhlPUxbIiFtZXJnZXMiXSxCZT0wO0JlIT1IZS5sZW5ndGg7KytCZSlIZVtCZV0ucy5jIT1fZS5jfHxIZVtCZV0ucy5yIT1fZS5yfHwoSGVbQmVdLmUuYz5IZVtCZV0ucy5jJiYodmVbInNzOk1lcmdlQWNyb3NzIl09SGVbQmVdLmUu'@;
put 'Yy1IZVtCZV0ucy5jKSxIZVtCZV0uZS5yPkhlW0JlXS5zLnImJih2ZVsic3M6TWVyZ2VEb3duIl09SGVbQmVdLmUuci1IZVtCZV0ucy5yKSk7dmFyIEdlPSIiLG50PSIiO3N3aXRjaCh5LnQpe2Nhc2UieiI6aWYoIVEuc2hlZXRTdHVicylyZXR1cm4iIjticmVhaztjYXNlIm4iOkdlPSJOdW1i'@;
put 'ZXIiLG50PVN0cmluZyh5LnYpO2JyZWFrO2Nhc2UiYiI6R2U9IkJvb2xlYW4iLG50PXkudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZSI6R2U9IkVycm9yIixudD1Rb1t5LnZdO2JyZWFrO2Nhc2UiZCI6R2U9IkRhdGVUaW1lIixudD1uZXcgRGF0ZSh5LnYpLnRvSVNPU3RyaW5nKCksbnVsbD09eS56'@;
put 'JiYoeS56PXkuenx8dy5fdGFibGVbMTRdKTticmVhaztjYXNlInMiOkdlPSJTdHJpbmciLG50PWlvKHkudnx8IiIpfXZhciBkdD1ndShRLmNlbGxYZnMsbnVsbCx5LFEpO3ZlWyJzczpTdHlsZUlEIl09InMiKygyMStkdCksdmVbInNzOkluZGV4Il09X2UuYysxO3ZhciBDdD1udWxsIT15LnY/'@;
put 'bnQ6IiIsY3Q9InoiPT15LnQ/IiI6eS5SP2Z1bmN0aW9uIFhMKHkpe3JldHVybic8c3M6RGF0YSBzczpUeXBlPSJTdHJpbmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4nK3kubWFwKGZ1bmN0aW9uKEwpe3ZhciBRPWlvKEwudik7cmV0dXJuIEwucyYmKEwucy5i'@;
put 'b2xkJiYoUT0iPEI+IitRKyI8L0I+IiksTC5zLml0YWxpYyYmKFE9IjxJPiIrUSsiPC9JPiIpLEwucy5zdHJpa2UmJihRPSI8Uz4iK1ErIjwvUz4iKSxMLnMudW5kZXJsaW5lJiYoUT0iPFU+IitRKyI8L1U+IiksInN1cGVyIj09TC5zLnZhbGlnbiYmKFE9IjxTdXA+IitRKyI8L1N1cD4iKSwi'@;
put 'c3ViIj09TC5zLnZhbGlnbiYmKFE9IjxTdWI+IitRKyI8L1N1Yj4iKSwoTC5zLm5hbWV8fEwucy5zenx8TC5zLmNvbG9yJiZudWxsIT1MLnMuY29sb3IucmdiKSYmKFE9WyI8Rm9udCIsTC5zLm5hbWU/JyBodG1sOkZhY2U9IicrTC5zLm5hbWUrJyInOiIiLEwucy5zej8nIGh0bWw6U2l6ZT0i'@;
put 'JytMLnMuc3orJyInOiIiLEwucy5jb2xvcj8nIGh0bWw6Q29sb3I9IiMnKygiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiBMLnMuY29sb3IucmdiP0wucy5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOkwucy5jb2xvci5yZ2IpKS5zbGljZSgtNikrJyInOiIiLCI+IixRLCI8L0ZvbnQ+Il0uam9p'@;
put 'bigiIikpKSxRfSkuam9pbigiIikrIjwvRGF0YT4ifSh5LlIpOic8RGF0YSBzczpUeXBlPSInK0dlKyciPicrQ3QrIjwvRGF0YT4iO3JldHVybih5LmN8fFtdKS5sZW5ndGg+MCYmKGN0Kz1mdW5jdGlvbiBlXyh5KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oUCl7dmFyIFE9U3IoInNzOkRhdGEi'@;
put 'LGhvKFAudHx8IiIpLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9KTtyZXR1cm4gU3IoIkNvbW1lbnQiLFEseyJzczpBdXRob3IiOlAuYX0pfSkuam9pbigiIil9KHkuYykpLFNyKCJDZWxsIixjdCx2ZSl9ZnVuY3Rpb24gbU0oeSxQKXt2YXIgTD0nPFJvdyBzczpJ'@;
put 'bmRleD0iJysoeSsxKSsnIic7cmV0dXJuIFAmJihQLmhweCYmIVAuaHB0JiYoUC5ocHQ9ajIoUC5ocHgpKSxQLmhwdCYmKEwrPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVpZ2h0PSInK1AuaHB0KyciJyksUC5oaWRkZW4mJihMKz0nIHNzOkhpZGRlbj0iMSInKSksTCsiPiJ9ZnVuY3Rp'@;
put 'b24gVmUoeSxQLEwpe3ZhciBRPVtdLGdlPUwuU2hlZXRzW0wuU2hlZXROYW1lc1t5XV0sX2U9Z2U/ZnVuY3Rpb24gcE0oeSxQLEwsUSl7aWYoIXl8fCEoKFF8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgcmU9US5Xb3JrYm9vay5OYW1lcyxnZT1bXSxfZT0wO19l'@;
put 'PHJlLmxlbmd0aDsrK19lKXt2YXIgdmU9cmVbX2VdO3ZlLlNoZWV0PT1MJiYodmUuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8Z2UucHVzaChWbih2ZSkpKX1yZXR1cm4gZ2Uuam9pbigiIil9KGdlLDAseSxMKToiIjtyZXR1cm4gX2UubGVuZ3RoPjAmJlEucHVzaCgiPE5hbWVzPiIrX2UrIjwv'@;
put 'TmFtZXM+IiksX2U9Z2U/ZnVuY3Rpb24gdk0oeSxQLEwsUSl7aWYoIXlbIiFyZWYiXSlyZXR1cm4iIjt2YXIgcmU9T2koeVsiIXJlZiJdKSxnZT15WyIhbWVyZ2VzIl18fFtdLF9lPTAsdmU9W107eVsiIWNvbHMiXSYmeVsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0LEZ0KXtwdShidCk7'@;
put 'dmFyIGt0PSEhYnQud2lkdGgsVHQ9WWQoRnQsYnQpLFp0PXsic3M6SW5kZXgiOkZ0KzF9O2t0JiYoWnRbInNzOldpZHRoIl09eGMoVHQud2lkdGgpKSxidC5oaWRkZW4mJihadFsic3M6SGlkZGVuIl09IjEiKSx2ZS5wdXNoKFNyKCJDb2x1bW4iLG51bGwsWnQpKX0pO2Zvcih2YXIgU2U9QXJy'@;
put 'YXkuaXNBcnJheSh5KSxIZT1yZS5zLnI7SGU8PXJlLmUucjsrK0hlKXtmb3IodmFyIEJlPVttTShIZSwoeVsiIXJvd3MiXXx8W10pW0hlXSldLEdlPXJlLnMuYztHZTw9cmUuZS5jOysrR2Upe3ZhciBudD0hMTtmb3IoX2U9MDtfZSE9Z2UubGVuZ3RoOysrX2UpaWYoIShnZVtfZV0ucy5jPkdl'@;
put 'fHxnZVtfZV0ucy5yPkhlfHxnZVtfZV0uZS5jPEdlfHxnZVtfZV0uZS5yPEhlKSl7KGdlW19lXS5zLmMhPUdlfHxnZVtfZV0ucy5yIT1IZSkmJihudD0hMCk7YnJlYWt9aWYoIW50KXt2YXIgZHQ9e3I6SGUsYzpHZX0sQ3Q9ZGkoZHQpO0JlLnB1c2goZ00oU2U/KHlbSGVdfHxbXSlbR2VdOnlb'@;
put 'Q3RdLEN0LHksUCwwLDAsZHQpKX19QmUucHVzaCgiPC9Sb3c+IiksQmUubGVuZ3RoPjImJnZlLnB1c2goQmUuam9pbigiIikpfXJldHVybiB2ZS5qb2luKCIiKX0oZ2UsUCk6IiIsX2UubGVuZ3RoPjAmJlEucHVzaCgiPFRhYmxlPiIrX2UrIjwvVGFibGU+IiksUS5wdXNoKGZ1bmN0aW9uIHh0'@;
put 'KHksUCxMLFEpe2lmKCF5KXJldHVybiIiO3ZhciByZT1bXTtpZih5WyIhbWFyZ2lucyJdJiYocmUucHVzaCgiPFBhZ2VTZXR1cD4iKSx5WyIhbWFyZ2lucyJdLmhlYWRlciYmcmUucHVzaChTcigiSGVhZGVyIixudWxsLHsieDpNYXJnaW4iOnlbIiFtYXJnaW5zIl0uaGVhZGVyfSkpLHlbIiFt'@;
put 'YXJnaW5zIl0uZm9vdGVyJiZyZS5wdXNoKFNyKCJGb290ZXIiLG51bGwseyJ4Ok1hcmdpbiI6eVsiIW1hcmdpbnMiXS5mb290ZXJ9KSkscmUucHVzaChTcigiUGFnZU1hcmdpbnMiLG51bGwseyJ4OkJvdHRvbSI6eVsiIW1hcmdpbnMiXS5ib3R0b218fCIwLjc1IiwieDpMZWZ0Ijp5WyIhbWFy'@;
put 'Z2lucyJdLmxlZnR8fCIwLjciLCJ4OlJpZ2h0Ijp5WyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43IiwieDpUb3AiOnlbIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSkscmUucHVzaCgiPC9QYWdlU2V0dXA+IikpLFEmJlEuV29ya2Jvb2smJlEuV29ya2Jvb2suU2hlZXRzJiZRLldvcmtib29rLlNo'@;
put 'ZWV0c1tMXSlpZihRLldvcmtib29rLlNoZWV0c1tMXS5IaWRkZW4pcmUucHVzaChTcigiVmlzaWJsZSIsMT09US5Xb3JrYm9vay5TaGVldHNbTF0uSGlkZGVuPyJTaGVldEhpZGRlbiI6IlNoZWV0VmVyeUhpZGRlbiIse30pKTtlbHNle2Zvcih2YXIgZ2U9MDtnZTxMJiYoIVEuV29ya2Jvb2su'@;
put 'U2hlZXRzW2dlXXx8US5Xb3JrYm9vay5TaGVldHNbZ2VdLkhpZGRlbik7KytnZSk7Z2U9PUwmJnJlLnB1c2goIjxTZWxlY3RlZC8+Iil9aWYoKCgoKFF8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJnJlLnB1c2goIjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLGhu'@;
put 'KHlbIiFncmlkbGluZXMiXSkmJnJlLnB1c2goIjxEb05vdERpc3BsYXlHcmlkbGluZXMvPiIpLHlbIiFmcmVlemUiXSl7cmUucHVzaCgiPEZyZWV6ZVBhbmVzLz4iKSxyZS5wdXNoKCI8RnJvemVuTm9TcGxpdC8+Iik7dmFyIF9lPXNzKHlbIiFmcmVlemUiXSk7X2Uucj4wJiYocmUucHVzaChm'@;
put 'cygiU3BsaXRIb3Jpem9udGFsIiwiIitfZS5yKSkscmUucHVzaChmcygiVG9wUm93Qm90dG9tUGFuZSIsIiIrX2UucikpKSxfZS5jPjAmJihyZS5wdXNoKGZzKCJTcGxpdFZlcnRpY2FsIiwiIitfZS5jKSkscmUucHVzaChmcygiTGVmdENvbHVtblJpZ2h0UGFuZSIsIiIrX2UuYykpKX1yZXR1'@;
put 'cm4geVsiIXByb3RlY3QiXSYmKHJlLnB1c2goZnMoIlByb3RlY3RDb250ZW50cyIsIlRydWUiKSkseVsiIXByb3RlY3QiXS5vYmplY3RzJiZyZS5wdXNoKGZzKCJQcm90ZWN0T2JqZWN0cyIsIlRydWUiKSkseVsiIXByb3RlY3QiXS5zY2VuYXJpb3MmJnJlLnB1c2goZnMoIlByb3RlY3RTY2Vu'@;
put 'YXJpb3MiLCJUcnVlIikpLG51bGw9PXlbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHN8fHlbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHM/bnVsbCE9eVsiIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiYheVsiIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiZy'@;
put 'ZS5wdXNoKGZzKCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikpOnJlLnB1c2goZnMoIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtbImZvcm1hdENlbGxzIiwiQWxsb3dGb3JtYXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93U2l6ZUNvbHMiXSxbImZv'@;
put 'cm1hdFJvd3MiLCJBbGxvd1NpemVSb3dzIl0sWyJpbnNlcnRDb2x1bW5zIiwiQWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dzIl0sWyJpbnNlcnRIeXBlcmxpbmtzIiwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVDb2x1bW5zIiwiQWxsb3dE'@;
put 'ZWxldGVDb2xzIl0sWyJkZWxldGVSb3dzIiwiQWxsb3dEZWxldGVSb3dzIl0sWyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIiXSxbInBpdm90VGFibGVzIiwiQWxsb3dVc2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt5WyIhcHJvdGVj'@;
put 'dCJdW3ZlWzBdXSYmcmUucHVzaCgiPCIrdmVbMV0rIi8+Iil9KSksMD09cmUubGVuZ3RoPyIiOlNyKCJXb3Jrc2hlZXRPcHRpb25zIixyZS5qb2luKCIiKSx7eG1sbnM6V2kueH0pfShnZSwwLHksTCkpLFEuam9pbigiIil9ZnVuY3Rpb24gSkwoeSxQKXtQfHwoUD17fSkseS5TU0Z8fCh5LlNT'@;
put 'Rj13LmdldF90YWJsZSgpKSx5LlNTRiYmKEoodyksdy5sb2FkX3RhYmxlKHkuU1NGKSxQLnJldnNzZj1BZSh5LlNTRiksUC5yZXZzc2ZbeS5TU0ZbNjU1MzVdXT0wLFAuc3NmPXkuU1NGLHkuU3R5bGVzPXtGb250czpQLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAi'@;
put 'fSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlAuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlAuQm9yZGVycz1be31dfSxQLmNlbGxYZnM9W10sUC5jZWxsU3R5bGVYZnM9W3tuYW1lOiJO'@;
put 'b3JtYWwifV0sZ3UoUC5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0pKTt2YXIgTD1bXTtMLnB1c2goZnVuY3Rpb24gZk0oeSxQKXt2YXIgTD1bXTtyZXR1cm4geS5Qcm9wcyYmTC5wdXNoKGZ1bmN0aW9uIGljKHksUCl7dmFyIEw9W107cmV0dXJuIGx0KEYyKS5tYXAoZnVu'@;
put 'Y3Rpb24oUSl7Zm9yKHZhciByZT0wO3JlPFBsLmxlbmd0aDsrK3JlKWlmKFBsW3JlXVsxXT09USlyZXR1cm4gUGxbcmVdO2ZvcihyZT0wO3JlPFIxLmxlbmd0aDsrK3JlKWlmKFIxW3JlXVsxXT09USlyZXR1cm4gUjFbcmVdO3Rocm93IFF9KS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKG51bGwh'@;
put 'PXlbUVsxXV0pe3ZhciByZT1QJiZQLlByb3BzJiZudWxsIT1QLlByb3BzW1FbMV1dP1AuUHJvcHNbUVsxXV06eVtRWzFdXTsiZGF0ZSI9PT1RWzJdJiYocmU9bmV3IERhdGUocmUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIHJlP3JlPVN0'@;
put 'cmluZyhyZSk6ITA9PT1yZXx8ITE9PT1yZT9yZT1yZT8iMSI6IjAiOnJlIGluc3RhbmNlb2YgRGF0ZSYmKHJlPW5ldyBEYXRlKHJlKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIiIpKSxMLnB1c2goZnMoRjJbUVsxXV18fFFbMV0scmUpKX19KSxTcigiRG9jdW1lbnRQcm9wZXJ0'@;
put 'aWVzIixMLmpvaW4oIiIpLHt4bWxuczpXaS5vfSl9KHkuUHJvcHMsUCkpLHkuQ3VzdHByb3BzJiZMLnB1c2goZnVuY3Rpb24gVHcoeSxQKXt2YXIgTD1bIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIl0sUT0iQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixyZT1bXTtyZXR1cm4geSYmbHQoeSku'@;
put 'Zm9yRWFjaChmdW5jdGlvbihnZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksZ2UpKXtmb3IodmFyIF9lPTA7X2U8UGwubGVuZ3RoOysrX2UpaWYoZ2U9PVBsW19lXVsxXSlyZXR1cm47Zm9yKF9lPTA7X2U8UjEubGVuZ3RoOysrX2UpaWYoZ2U9PVIxW19lXVsx'@;
put 'XSlyZXR1cm47Zm9yKF9lPTA7X2U8TC5sZW5ndGg7KytfZSlpZihnZT09TFtfZV0pcmV0dXJuO3ZhciB2ZT15W2dlXSxTZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIHZlPyhTZT0iZmxvYXQiLHZlPVN0cmluZyh2ZSkpOiEwPT09dmV8fCExPT09dmU/KFNlPSJib29sZWFuIix2ZT12ZT8i'@;
put 'MSI6IjAiKTp2ZT1TdHJpbmcodmUpLHJlLnB1c2goU3IoSmkoZ2UpLHZlLHsiZHQ6ZHQiOlNlfSkpfX0pLFAmJmx0KFApLmZvckVhY2goZnVuY3Rpb24oZ2Upe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLGdlKSYmKCF5fHwhT2JqZWN0LnByb3RvdHlwZS5oYXNP'@;
put 'd25Qcm9wZXJ0eS5jYWxsKHksZ2UpKSl7dmFyIF9lPVBbZ2VdLHZlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgX2U/KHZlPSJmbG9hdCIsX2U9U3RyaW5nKF9lKSk6ITA9PT1fZXx8ITE9PT1fZT8odmU9ImJvb2xlYW4iLF9lPV9lPyIxIjoiMCIpOl9lIGluc3RhbmNlb2YgRGF0ZT8odmU9'@;
put 'ImRhdGVUaW1lLnR6IixfZT1fZS50b0lTT1N0cmluZygpKTpfZT1TdHJpbmcoX2UpLHJlLnB1c2goU3IoSmkoZ2UpLF9lLHsiZHQ6ZHQiOnZlfSkpfX0pLCI8IitRKycgeG1sbnM9IicrV2kubysnIj4nK3JlLmpvaW4oIiIpKyI8LyIrUSsiPiJ9KHkuUHJvcHMseS5DdXN0cHJvcHMpKSxMLmpv'@;
put 'aW4oIiIpfSh5LFApKSxMLnB1c2goIiIpLEwucHVzaCgiIiksTC5wdXNoKCIiKTtmb3IodmFyIFE9MDtRPHkuU2hlZXROYW1lcy5sZW5ndGg7KytRKUwucHVzaChTcigiV29ya3NoZWV0IixWZShRLFAseSkseyJzczpOYW1lIjpIcih5LlNoZWV0TmFtZXNbUV0pfSkpO3JldHVybiBMWzJdPWZ1'@;
put 'bmN0aW9uIEtMKHksUCl7dmFyIFE9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0IiBzczpOYW1lPSJOb3JtYWwiPicsJzxBbGlnbm1lbnQgc3M6VmVydGljYWw9IkJvdHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpT'@;
put 'aXplPSIxMiIgc3M6Q29sb3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIsIjxOdW1iZXJGb3JtYXQvPiIsIjxQcm90ZWN0aW9uLz4iLCI8L1N0eWxlPiJdLmpvaW4oIiIpXTtyZXR1cm4gUC5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24ocmUsZ2Upe3ZhciBfZT1bXTtpZihyZS5hbGlnbm1l'@;
put 'bnQpe3ZhciB2ZT17fTtyZS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJih2ZVsic3M6U2hyaW5rVG9GaXQiXT0iMSIpLHJlLmFsaWdubWVudC53cmFwVGV4dCYmKHZlWyJzczpXcmFwVGV4dCJdPSIxIikscmUuYWxpZ25tZW50LnZlcnRpY2FsJiYodmVbInNzOlZlcnRpY2FsIl09d3QocmUuYWxp'@;
put 'Z25tZW50LnZlcnRpY2FsKSkscmUuYWxpZ25tZW50Lmhvcml6b250YWwmJih2ZVsic3M6SG9yaXpvbnRhbCJdPXd0KHJlLmFsaWdubWVudC5ob3Jpem9udGFsKSkscmUuYWxpZ25tZW50LmluZGVudCYmKHZlWyJzczpJbmRlbnQiXT1yZS5hbGlnbm1lbnQuaW5kZW50KSxyZS5hbGlnbm1lbnQu'@;
put 'dGV4dFJvdGF0aW9uJiYodmVbInNzOlJvdGF0ZSJdPXJlLmFsaWdubWVudC50ZXh0Um90YXRpb24pLF9lLnB1c2goU3IoIkFsaWdubWVudCIsbnVsbCx2ZSkpfWU6aWYobnVsbCE9cmUuZm9udElkKXt2YXIgU2U9UC5Gb250c1tyZS5mb250SWRdO2lmKCFTZSlicmVhayBlO3ZhciBIZT17InNz'@;
put 'OkZvbnROYW1lIjoiQ2FsaWJyaSIsInNzOlNpemUiOiIxMiJ9LEJlPSExO1NlLmJvbGQmJihCZT0hMCxIZVsic3M6Qm9sZCJdPSIxIiksU2UuaXRhbGljJiYoQmU9ITAsSGVbInNzOkl0YWxpYyJdPSIxIiksU2Uuc3RyaWtlJiYoQmU9ITAsSGVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIpLG51'@;
put 'bGwhPVNlLnVuZGVybGluZSYmKEJlPSEwLEhlWyJzczpVbmRlcmxpbmUiXT11TVtTZS51bmRlcmxpbmVdfHwoU2UudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikpLG51bGwhPVNlLnN6JiYoQmU9ITAsSGVbInNzOlNpemUiXT1TZS5zeiksbnVsbCE9U2UubmFtZSYmKEJlPSEwLEhlWyJzczpG'@;
put 'b250TmFtZSJdPVNlLm5hbWUpLFNlLmNvbG9yJiZudWxsIT1TZS5jb2xvci5yZ2ImJihCZT0hMCxIZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2YgU2UuY29sb3IucmdiPyIwMDAwMDAiK1NlLmNvbG9yLnJnYi50b1N0cmluZygxNik6U2UuY29sb3IucmdiKS5zbGljZSgtNikp'@;
put 'LFsic3ViIiwic3VwZXIiXS5pbmRleE9mKFNlLnZhbGlnbik+LTEmJihIZVsic3M6VmVydGljYWxBbGlnbiJdPXd0KFNlLnZhbGlnbikrInNjcmlwdCIpLEJlJiZfZS5wdXNoKFNyKCJGb250IixudWxsLEhlKSl9ZTppZihyZS5maWxsSWQ+MCl7dmFyIEdlPVAuRmlsbHNbcmUuZmlsbElkXTtp'@;
put 'ZighR2V8fCFHZS5mZ0NvbG9yfHxudWxsPT1HZS5mZ0NvbG9yLnJnYilicmVhayBlO19lLnB1c2goU3IoIkludGVyaW9yIixudWxsLHsic3M6UGF0dGVybiI6X0RbR2UucGF0dGVyblR5cGVdfHwiU29saWQiLCJzczpDb2xvciI6IiMiKygibnVtYmVyIj09dHlwZW9mIEdlLmZnQ29sb3Iucmdi'@;
put 'PyIwMCIrR2UuZmdDb2xvci5yZ2IudG9TdHJpbmcoMTYpOkdlLmZnQ29sb3IucmdiKS5zbGljZSgtNil9KSl9X2UucHVzaChTcigiTnVtYmVyRm9ybWF0IixudWxsLHsic3M6Rm9ybWF0IjpIcih3Ll90YWJsZVtyZS5udW1GbXRJZF0pfSkpO3ZhciBudD17InNzOklEIjoicyIrKDIxK2dlKX07'@;
put 'cmUuc3R5bGUmJihudFsic3M6TmFtZSJdPXJlLnN0eWxlKSxRLnB1c2goU3IoIlN0eWxlIixfZS5qb2luKCIiKSxudCkpfSksU3IoIlN0eWxlcyIsUS5qb2luKCIiKSl9KDAsUCksTFszXT1mdW5jdGlvbiB2NSh5KXtpZighKCh5fHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtm'@;
put 'b3IodmFyIFA9eS5Xb3JrYm9vay5OYW1lcyxMPVtdLFE9MDtRPFAubGVuZ3RoOysrUSl7dmFyIHJlPVBbUV07bnVsbD09cmUuU2hlZXQmJihyZS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxMLnB1c2goVm4ocmUpKSl9cmV0dXJuIFNyKCJOYW1lcyIsTC5qb2luKCIiKSl9KHkpLEJuK1NyKCJX'@;
put 'b3JrYm9vayIsTC5qb2luKCIiKSx7eG1sbnM6V2kuc3MsInhtbG5zOm8iOldpLm8sInhtbG5zOngiOldpLngsInhtbG5zOnNzIjpXaS5zcywieG1sbnM6ZHQiOldpLmR0LCJ4bWxuczpodG1sIjpXaS5odG1sfSl9ZnVuY3Rpb24ga3IoeSxQLEwsUSl7dmFyIHJlPUwsZ2U9W10sX2U9UC5zbGlj'@;
put 'ZShQLmwsUC5sK3JlKTtpZihRJiZRLmVuYyYmUS5lbmMuaW5zaXR1JiZfZS5sZW5ndGg+MClzd2l0Y2goeS5uKXtjYXNlIkJPRiI6Y2FzZSJGaWxlUGFzcyI6Y2FzZSJGaWxlTG9jayI6Y2FzZSJJbnRlcmZhY2VIZHIiOmNhc2UiUlJESW5mbyI6Y2FzZSJSUkRIZWFkIjpjYXNlIlVzckV4Y2wi'@;
put 'OmNhc2UiRU9GIjpRLmVuYy5pbnNpdHUodWUoe2xlbmd0aDpfZS5sZW5ndGh9KSwic2tpcCIpO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOlEuZW5jLmluc2l0dSh1ZSh7bGVuZ3RoOjR9KSwic2tpcCIpLF9lPUJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKF9lLnNsaWNlKDAsNCkpLEJ1ZmZl'@;
put 'ci5mcm9tKFEuZW5jLmluc2l0dShfZS5zbGljZSg0KSkpXSk7YnJlYWs7ZGVmYXVsdDpfZT1RLmVuYy5pbnNpdHUoX2UpfUFycmF5LmlzQXJyYXkoUCkmJiFBcnJheS5pc0FycmF5KF9lKSYmKF9lPUFycmF5LmZyb20oX2UpKSxnZS5wdXNoKF9lKSxQLmwrPXJlO2Zvcih2YXIgdmU9WDBbWW4o'@;
put 'UCxQLmwpXSxTZT0wO251bGwhPXZlJiYiQ29udGludWUiPT09dmUubi5zbGljZSgwLDgpOylyZT1ZbihQLFAubCsyKSxTZT1QLmwrNCxRJiZRLmVuYyYmUS5lbmMuaW5zaXR1JiZRLmVuYy5pbnNpdHUodWUoe2xlbmd0aDo0fSksInNraXAiKSwiQ29udGludWVGcnQiPT12ZS5uP1NlKz00OiJD'@;
put 'b250aW51ZUZydCI9PXZlLm4uc2xpY2UoMCwxMSkmJihTZSs9MTIsUSYmUS5lbmMmJlEuZW5jLmluc2l0dSYmUS5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6OH0pLCJza2lwIikpLF9lPVAuc2xpY2UoU2UsUC5sKzQrcmUpLFEmJlEuZW5jJiZRLmVuYy5pbnNpdHUmJl9lLmxlbmd0aD4wJiYoX2U9'@;
put 'US5lbmMuaW5zaXR1KF9lKSksZ2UucHVzaChfZSksUC5sKz00K3JlLHZlPVgwW1luKFAsUC5sKV07dmFyIEhlPVMoZ2UpO29sKEhlLDApO3ZhciBCZT0wO0hlLmxlbnM9W107Zm9yKHZhciBHZT0wO0dlPGdlLmxlbmd0aDsrK0dlKUhlLmxlbnMucHVzaChCZSksQmUrPWdlW0dlXS5sZW5ndGg7'@;
put 'aWYoSGUubGVuZ3RoPEwpdGhyb3ciWExTIFJlY29yZCAiKyh5JiZ5Lm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK0hlLmxlbmd0aCsiIDwgIitMO3JldHVybiB5LmYoSGUsSGUubGVuZ3RoLFEpfWZ1bmN0aW9uIEVjKHksUCxMKXtpZigieiIhPT15LnQmJnkuWEYpe3ZhciBRPTA7dHJ5e1E9eS56'@;
put 'fHx5LlhGLm51bUZtdElkfHwwLFAuY2VsbE5GJiYoeS56PXcuX3RhYmxlW1FdKX1jYXRjaChnZSl7aWYoUC5XVEYpdGhyb3cgZ2V9aWYoIVB8fCExIT09UC5jZWxsVGV4dCl0cnl7eS53PSJlIj09PXkudD95Lnd8fFFvW3kudl06MD09PVF8fCJHZW5lcmFsIj09UT8ibiI9PT15LnQ/KDB8eS52'@;
put 'KT09PXkudj93Ll9nZW5lcmFsX2ludCh5LnYpOncuX2dlbmVyYWxfbnVtKHkudik6dy5fZ2VuZXJhbCh5LnYpOncuZm9ybWF0KFEseS52LHtkYXRlMTkwNDohIUwsZGF0ZU5GOlAmJlAuZGF0ZU5GfSl9Y2F0Y2goZ2Upe2lmKFAuV1RGKXRocm93IGdlfWlmKFAuY2VsbERhdGVzJiZRJiYibiI9'@;
put 'PXkudCYmdy5pc19kYXRlKHcuX3RhYmxlW1FdfHxTdHJpbmcoUSkpKXt2YXIgcmU9dy5wYXJzZV9kYXRlX2NvZGUoeS52KTtyZSYmKHkudD0iZCIseS52PW5ldyBEYXRlKHJlLnkscmUubS0xLHJlLmQscmUuSCxyZS5NLHJlLlMscmUudSkpfX19ZnVuY3Rpb24gWDIoeSxQLEwpe3JldHVybnt2'@;
put 'OnksaXhmZTpQLHQ6TH19dmFyIF9NPWZ1bmN0aW9uKHksUCxMKXtQWyIhb2JqZWN0cyJdPXl9LHJwPXtTSToiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLERTSToiMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiLFVESToiMDVkNWNkZDU5YzJlMWIxMDkzOTcwODAw'@;
put 'MmIyY2Y5YWUifTtmdW5jdGlvbiBfNSh5LFApe3ZhciBMLFEscmUsZ2U7aWYoUHx8KFA9e30pLFA2KFApLFYoKSxQLmNvZGVwYWdlJiZrKFAuY29kZXBhZ2UpLHkuRnVsbFBhdGhzKXtpZihqZS5maW5kKHksIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3Jk'@;
put 'LXByb3RlY3RlZCIpO0w9amUuZmluZCh5LCIhQ29tcE9iaiIpLFE9amUuZmluZCh5LCIvV29ya2Jvb2siKXx8amUuZmluZCh5LCIvQm9vayIpfWVsc2V7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOnk9RChzZS5kZWNvZGUoeSkpO2JyZWFrO2Nhc2UiYmluYXJ5Ijp5PUQoeSk7YnJlYWs7'@;
put 'Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoeSl8fCh5PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkpKX1vbCh5LDApLFE9e2NvbnRlbnQ6eX19aWYoTCYmZnVuY3Rpb24gQWkoeSl7dmFyIFA9e30sTD15LmNvbnRlbnQ7aWYoTC5sPTI4LFAuQW5zaVVz'@;
put 'ZXJUeXBlPUwucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksUC5BbnNpQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIGc0KHkpe3JldHVybiBwNCh5LDEpfShMKSxMLmxlbmd0aC1MLmw8PTQpcmV0dXJuIFA7dmFyIFE9TC5yZWFkX3NoaWZ0KDQpO2lmKDA9PVF8fFE+NDB8fChMLmwtPTQsUC5S'@;
put 'ZXNlcnZlZDE9TC5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxMLmxlbmd0aC1MLmw8PTQpfHwxOTA3NTA1NjUyIT09KFE9TC5yZWFkX3NoaWZ0KDQpKXx8KFAuVW5pY29kZUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBKNyh5KXtyZXR1cm4gcDQoeSwyKX0oTCksMD09KFE9TC5yZWFkX3No'@;
put 'aWZ0KDQpKXx8UT40MCkpcmV0dXJuIFA7TC5sLT00LFAuUmVzZXJ2ZWQyPUwucmVhZF9zaGlmdCgwLCJscHdzdHIiKX0oTCksUC5ib29rUHJvcHMmJiFQLmJvb2tTaGVldHMpcmU9e307ZWxzZXt2YXIgX2U9aGU/ImJ1ZmZlciI6ImFycmF5IjtpZihRJiZRLmNvbnRlbnQpcmU9ZnVuY3Rpb24g'@;
put 'Yk0oeSxQKXt2YXIgTD17b3B0czp7fX0sUT17fTtudWxsIT10ZSYmbnVsbD09UC5kZW5zZSYmKFAuZGVuc2U9dGUpO3ZhciBHZSxkdCxjdCxidCxUdCxadCxyZT1QLmRlbnNlP1tdOnt9LGdlPXt9LF9lPXt9LHZlPW51bGwsU2U9W10sSGU9IiIsQmU9e30sbnQ9IiIsRnQ9e30sa3Q9W10scG49'@;
put 'W10sS249W10sdW49e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0scW49e30sem49e0ZvbnRzOltdfSxrbj1mdW5jdGlvbihKcil7cmV0dXJuIEpyPDg/Q3JbSnJdOkpyPDY0JiZLbltKci04XXx8Q3JbSnJdfSxlcj1mdW5jdGlvbihKcix3cyl7dmFyIG1sLHZz'@;
put 'PUpyLlhGLmRhdGE7dnMmJih2cy5wYXR0ZXJuVHlwZXx8bnVsbCE9dnMuaWN2Rm9yZSkmJndzJiZ3cy5jZWxsU3R5bGVzJiYoSnIucz17fSxKci5zLnBhdHRlcm5UeXBlPXZzLnBhdHRlcm5UeXBlLEpyLlhGLmZvbnQmJlV0KEpyLnMsSnIuWEYuZm9udCksdnMuZldyYXAmJigoSnIucy5hbGln'@;
put 'bm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSx2cy5mU2hyaW5rVG9GaXQmJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLnNocmlua1RvRml0PSEwKSx2cy5oYWxpZ24mJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLmhv'@;
put 'cml6b250YWw9dnMuaGFsaWduKSx2cy52YWxpZ24mJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLnZlcnRpY2FsPXZzLnZhbGlnbiksdnMuY0luZGVudCYmKChKci5zLmFsaWdubWVudHx8KEpyLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PXZzLmNJbmRlbnQpLDY0IT12'@;
put 'cy5pY3ZGb3JlJiY2NSE9dnMuaWN2QmFjayYmKChtbD16MShrbih2cy5pY3ZGb3JlKSkpJiYoSnIucy5mZ0NvbG9yPXtyZ2I6bWx9KSwobWw9ejEoa24odnMuaWN2QmFjaykpKSYmKEpyLnMuYmdDb2xvcj17cmdiOm1sfSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFj'@;
put 'aChmdW5jdGlvbih6bCl7dnNbImRnIit6bF0mJihKci5zW3psLnRvTG93ZXJDYXNlKCldPXtzdHlsZTpXMlt2c1siZGciK3psXV0sY29sb3I6e3JnYjp6MShrbih2c1siaWN2Iit6bF0pKX19KX0pKX0sdHI9ZnVuY3Rpb24oSnIsd3MsdnMpe2lmKCEod2k+MXx8dnMuc2hlZXRSb3dzJiZKci5y'@;
put 'Pj12cy5zaGVldFJvd3MpKXtpZih2cy5jZWxsU3R5bGVzJiZ3cy5YRiYmd3MuWEYuZGF0YSYmZXIod3MsdnMpLGRlbGV0ZSB3cy5peGZlLGRlbGV0ZSB3cy5YRixHZT1KcixudD1kaShKciksKCFfZXx8IV9lLnN8fCFfZS5lKSYmKF9lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLEpyLnI8'@;
put 'X2Uucy5yJiYoX2Uucy5yPUpyLnIpLEpyLmM8X2Uucy5jJiYoX2Uucy5jPUpyLmMpLEpyLnIrMT5fZS5lLnImJihfZS5lLnI9SnIucisxKSxKci5jKzE+X2UuZS5jJiYoX2UuZS5jPUpyLmMrMSksdnMuY2VsbEZvcm11bGEmJndzLmYpZm9yKHZhciBtbD0wO21sPGt0Lmxlbmd0aDsrK21sKWlm'@;
put 'KCEoa3RbbWxdWzBdLnMuYz5Kci5jfHxrdFttbF1bMF0ucy5yPkpyLnJ8fGt0W21sXVswXS5lLmM8SnIuY3x8a3RbbWxdWzBdLmUucjxKci5yKSl7d3MuRj1PbyhrdFttbF1bMF0pLChrdFttbF1bMF0ucy5jIT1Kci5jfHxrdFttbF1bMF0ucy5yIT1Kci5yKSYmZGVsZXRlIHdzLmYsd3MuZiYm'@;
put 'KHdzLmY9IiIreGwoa3RbbWxdWzFdLF9lLEpyLFNuLFpuKSk7YnJlYWt9dnMuZGVuc2U/KHJlW0pyLnJdfHwocmVbSnIucl09W10pLHJlW0pyLnJdW0pyLmNdPXdzKTpyZVtudF09d3N9fSxabj17ZW5jOiExLHNiY2NoOjAsc25hbWVzOltdLHNoYXJlZGY6RnQsYXJyYXlmOmt0LHJydGFiaWQ6'@;
put 'W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIVAmJiEhUC5jZWxsU3R5bGVzLFdURjohIVAmJiEhUC53dGZ9O1puLnBhc3N3b3JkPVAucGFzc3dvcmQ/UC5wYXNzd29yZDoiVmVsdmV0U3dlYXRzaG9wIjt2YXIgc2ksQnI9bnVsbCx4aT1b'@;
put 'XSxMaT1bXSxRcj1bXSx1cj1bXSxycj0hMSxTbj1bXTtTbi5TaGVldE5hbWVzPVpuLnNuYW1lcyxTbi5zaGFyZWRmPVpuLnNoYXJlZGYsU24uYXJyYXlmPVpuLmFycmF5ZixTbi5uYW1lcz1bXSxTbi5YVEk9W107dmFyIFRpLG1yPSIiLHdpPTAsVXI9MCxqaT1bXSxfbz1bXTtabi5jb2RlcGFn'@;
put 'ZT0xMjAwLGooMTIwMCk7Zm9yKHZhciBZbz0hMTt5Lmw8eS5sZW5ndGgtMTspe3ZhciBsbz15LmwsQW89eS5yZWFkX3NoaWZ0KDIpO2lmKFpuJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMF0pLCJoZWFkZXItMCIpLDA9PT1BbyYmIkVPRiI9PT1tcilicmVh'@;
put 'azt2YXIgeG89eS5sPT09eS5sZW5ndGg/MDp5LnJlYWRfc2hpZnQoMik7Wm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1ZShbMCwwXSksImxlbmd0aC0wIik7dmFyIGhpPVgwW0FvXTtpZihoaSYmaGkuZil7aWYoUC5ib29rU2hlZXRzJiYiQm91bmRTaGVldDgiPT09'@;
put 'bXImJiJCb3VuZFNoZWV0OCIhPT1oaS5uKWJyZWFrO2lmKG1yPWhpLm4sMj09PWhpLnJ8fDEyPT1oaS5yKXt2YXIgdGE9eS5yZWFkX3NoaWZ0KDIpO2lmKHhvLT0yLFpuJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMF0pKSwhWm4uZW5jJiZ0YSE9PUFvJiYo'@;
put 'KDI1NSZ0YSk8PDh8dGE+PjgpIT09QW8pdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIit0YSsiIT0iK0FvKTsxMj09aGkuciYmKHkubCs9MTAseG8tPTEwLFpuJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpfXZh'@;
put 'ciBNbj1rcihoaSx5LHhvLFpuKSxNcz1oaS5uO2lmKDA9PXdpJiYiQk9GIiE9TXMpY29udGludWU7c3dpdGNoKE1zKXtjYXNlIkRhdGUxOTA0IjpMLm9wdHMuRGF0ZTE5MDQ9dW4uV0JQcm9wcy5kYXRlMTkwND1NbjticmVhaztjYXNlIldyaXRlUHJvdGVjdCI6TC5vcHRzLldyaXRlUHJvdGVj'@;
put 'dD0hMDticmVhaztjYXNlIkZpbGVQYXNzIjppZihabi5lbmN8fCh5Lmw9MCx3aT0wKSxabi5lbmM9TW4sIVAucGFzc3dvcmQmJm51bGw9PU1uLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtpZihudWxsPT1Nbi52YWxpZCl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkVuY3J5cHRpb24gc2NoZW1lIHVuc3VwcG9ydGVkIik7aWYoIU1uLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSJXcml0ZUFjY2VzcyI6Wm4ubGFzdHVzZXI9TW47YnJlYWs7Y2FzZSJGaWxlU2hhcmluZyI6Y2FzZSJUZW1wbGF0'@;
put 'ZSI6Y2FzZSJCb29rQm9vbCI6Y2FzZSJVc2VzRUxGcyI6Y2FzZSJNVFJTZXR0aW5ncyI6Y2FzZSJVbmNhbGNlZCI6Y2FzZSJFeHRTU1QiOmNhc2UiQm9va0V4dCI6Y2FzZSJSaWNoVGV4dFN0cmVhbSI6Y2FzZSJCa0hpbSI6Y2FzZSJJbmRleCI6Y2FzZSJQcm90NFJldiI6Y2FzZSJQcm90NFJl'@;
put 'dlBhc3MiOmJyZWFrO2Nhc2UiQ29kZVBhZ2UiOnZhciB5cz1OdW1iZXIoTW4pO3N3aXRjaCh5cyl7Y2FzZSAyMTAxMDp5cz0xMjAwO2JyZWFrO2Nhc2UgMzI3Njg6eXM9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6eXM9MTI1Mn1qKFpuLmNvZGVwYWdlPXlzKSxZbz0hMDticmVhaztjYXNlIlJSVGFi'@;
put 'SWQiOlpuLnJydGFiaWQ9TW47YnJlYWs7Y2FzZSJXaW5Qcm90ZWN0Ijpabi53aW5sb2NrZWQ9TW47YnJlYWs7Y2FzZSJSZWZyZXNoQWxsIjpjYXNlIkNhbGNDb3VudCI6Y2FzZSJDYWxjRGVsdGEiOmNhc2UiQ2FsY0l0ZXIiOmNhc2UiQ2FsY01vZGUiOmNhc2UiQ2FsY1ByZWNpc2lvbiI6Y2Fz'@;
put 'ZSJDYWxjU2F2ZVJlY2FsYyI6TC5vcHRzW01zXT1NbjticmVhaztjYXNlIkNhbGNSZWZNb2RlIjpabi5DYWxjUmVmTW9kZT1NbjticmVhaztjYXNlIkZvcmNlRnVsbENhbGN1bGF0aW9uIjpMLm9wdHMuRnVsbENhbGM9TW47YnJlYWs7Y2FzZSJXc0Jvb2wiOk1uLmZEaWFsb2cmJihyZVsiIXR5'@;
put 'cGUiXT0iZGlhbG9nIiksTW4uZkJlbG93fHwoKHJlWyIhb3V0bGluZSJdfHwocmVbIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksTW4uZlJpZ2h0fHwoKHJlWyIhb3V0bGluZSJdfHwocmVbIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpNbi5mb250PXpuLkZvbnRz'@;
put 'W01uLmlmbnQ8ND9Nbi5pZm50Ok1uLmlmbnQtMV0scG4ucHVzaChNbik7YnJlYWs7Y2FzZSJTdXBCb29rIjpTbi5wdXNoKFtNbl0pLFNuW1NuLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSJFeHRlcm5OYW1lIjpTbltTbi5sZW5ndGgtMV0ucHVzaChNbik7YnJlYWs7Y2FzZSJMYmwiOlRp'@;
put 'PXtOYW1lOk1uLk5hbWUsUmVmOnhsKE1uLnJnY2UsX2UsbnVsbCxTbixabil9LE1uLml0YWI+MCYmKFRpLlNoZWV0PU1uLml0YWItMSksU24ubmFtZXMucHVzaChUaSksU25bMF18fChTblswXT1bXSxTblswXS5YVEk9W10pLFNuW1NuLmxlbmd0aC0xXS5wdXNoKE1uKSwiX3hsbm0uX0ZpbHRl'@;
put 'ckRhdGFiYXNlIj09TW4uTmFtZSYmTW4uaXRhYj4wJiZNbi5yZ2NlJiZNbi5yZ2NlWzBdJiZNbi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09TW4ucmdjZVswXVswXVswXSYmKF9vW01uLml0YWItMV09e3JlZjpPbyhNbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291'@;
put 'bnQiOlpuLkV4dGVybkNvdW50PU1uO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PVNuLmxlbmd0aCYmKFNuWzBdPVtdLFNuWzBdLlhUST1bXSksU25bU24ubGVuZ3RoLTFdLlhUST1TbltTbi5sZW5ndGgtMV0uWFRJLmNvbmNhdChNbiksU24uWFRJPVNuLlhUSS5jb25jYXQoTW4pO2JyZWFr'@;
put 'O2Nhc2UiTmFtZUNtdCI6aWYoWm4uYmlmZjw4KWJyZWFrO251bGwhPVRpJiYoVGkuQ29tbWVudD1NblsxXSk7YnJlYWs7Y2FzZSJQcm90ZWN0IjpyZVsiIXByb3RlY3QiXT1NbjticmVhaztjYXNlIlBhc3N3b3JkIjowIT09TW4mJlpuLldURiYmY29uc29sZS5lcnJvcigiUGFzc3dvcmQgdmVy'@;
put 'aWZpZXI6ICIrTW4pO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOmdlW01uLnBvc109TW4sWm4uc25hbWVzLnB1c2goTW4ubmFtZSk7YnJlYWs7Y2FzZSJFT0YiOmlmKHJlWyIhZ3JpZGxpbmVzIl09IUJyfHxCci5ncmlkLEJyPW51bGwsLS13aSlicmVhaztpZihfZS5lKXtpZihfZS5lLnI+MCYm'@;
put 'X2UuZS5jPjApe2lmKF9lLmUuci0tLF9lLmUuYy0tLHJlWyIhcmVmIl09T28oX2UpLFAuc2hlZXRSb3dzJiZQLnNoZWV0Um93czw9X2UuZS5yKXt2YXIgRWw9X2UuZS5yO19lLmUucj1QLnNoZWV0Um93cy0xLHJlWyIhZnVsbHJlZiJdPXJlWyIhcmVmIl0scmVbIiFyZWYiXT1PbyhfZSksX2Uu'@;
put 'ZS5yPUVsfV9lLmUucisrLF9lLmUuYysrfXhpLmxlbmd0aD4wJiYocmVbIiFtZXJnZXMiXT14aSksTGkubGVuZ3RoPjAmJl9NKExpLHJlLHpuKSxRci5sZW5ndGg+MCYmKHJlWyIhY29scyJdPVFyKSx1ci5sZW5ndGg+MCYmKHJlWyIhcm93cyJdPXVyKSx1bi5TaGVldHMucHVzaChxbil9IiI9'@;
put 'PT1IZT9CZT1yZTpRW0hlXT1yZSxyZT1QLmRlbnNlP1tdOnt9O2JyZWFrO2Nhc2UiQk9GIjppZig4PT09Wm4uYmlmZiYmKFpuLmJpZmY9ezk6Miw1MjE6MywxMDMzOjR9W0FvXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W01uLkJJRkZWZXJdfHw4KSxabi5i'@;
put 'aWZmZ3Vlc3M9MD09TW4uQklGRlZlciwwPT1Nbi5CSUZGVmVyJiY0MDk2PT1Nbi5kdCYmKFpuLmJpZmY9NSxZbz0hMCxqKFpuLmNvZGVwYWdlPTI4NTkxKSksOD09Wm4uYmlmZiYmMD09TW4uQklGRlZlciYmMTY9PU1uLmR0JiYoWm4uYmlmZj0yKSx3aSsrKWJyZWFrO2lmKHJlPVAuZGVuc2U/'@;
put 'W106e30sWm4uYmlmZjw4JiYhWW8mJihZbz0hMCxqKFpuLmNvZGVwYWdlPVAuY29kZXBhZ2V8fDEyNTIpKSxabi5iaWZmPDV8fDA9PU1uLkJJRkZWZXImJjQwOTY9PU1uLmR0KXsiIj09PUhlJiYoSGU9IlNoZWV0MSIpLF9lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07dmFyIHNsPXtwb3M6'@;
put 'eS5sLXhvLG5hbWU6SGV9O2dlW3NsLnBvc109c2wsWm4uc25hbWVzLnB1c2goSGUpfWVsc2UgSGU9KGdlW2xvXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Nbi5kdCYmKHJlWyIhdHlwZSJdPSJjaGFydCIpLDY0PT1Nbi5kdCYmKHJlWyIhdHlwZSJdPSJtYWNybyIpLHhpPVtdLExpPVtdLFpuLmFy'@;
put 'cmF5Zj1rdD1bXSxRcj1bXSx1cj1bXSxycj0hMSxxbj17SGlkZGVuOihnZVtsb118fHtoczowfSkuaHMsbmFtZTpIZX07YnJlYWs7Y2FzZSJOdW1iZXIiOmNhc2UiQklGRjJOVU0iOmNhc2UiQklGRjJJTlQiOiJjaGFydCI9PXJlWyIhdHlwZSJdJiYoUC5kZW5zZT8ocmVbTW4ucl18fFtdKVtN'@;
put 'bi5jXTpyZVtkaSh7YzpNbi5jLHI6TW4ucn0pXSkmJisrTW4uYyxUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdfHx7fSx2Ok1uLnZhbCx0OiJuIn0sVXI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLEVjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0s'@;
put 'VHQsUCk7YnJlYWs7Y2FzZSJCb29sRXJyIjpUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdLHY6TW4udmFsLHQ6TW4udH0sVXI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLEVjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCk7YnJlYWs7Y2Fz'@;
put 'ZSJSSyI6VHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXSx2Ok1uLnJrbnVtLHQ6Im4ifSxVcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKTticmVhaztjYXNlIk11bFJrIjpmb3IodmFyIGds'@;
put 'PU1uLmM7Z2w8PU1uLkM7KytnbCl7dmFyIG51PU1uLnJrcmVjW2dsLU1uLmNdWzBdO1R0PXtpeGZlOm51LFhGOnBuW251XSx2Ok1uLnJrcmVjW2dsLU1uLmNdWzFdLHQ6Im4ifSxVcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOmds'@;
put 'LHI6TW4ucn0sVHQsUCl9YnJlYWs7Y2FzZSJGb3JtdWxhIjppZigiU3RyaW5nIj09TW4udmFsKXt2ZT1NbjticmVha31pZigoVHQ9WDIoTW4udmFsLE1uLmNlbGwuaXhmZSxNbi50dCkpLlhGPXBuW1R0Lml4ZmVdLFAuY2VsbEZvcm11bGEpe3ZhciB0bD1Nbi5mb3JtdWxhO2lmKHRsJiZ0bFsw'@;
put 'XSYmdGxbMF1bMF0mJiJQdGdFeHAiPT10bFswXVswXVswXSl7dmFyIEt0PXRsWzBdWzBdWzFdWzBdLGduPXRsWzBdWzBdWzFdWzFdLExuPWRpKHtyOkt0LGM6Z259KTtGdFtMbl0/VHQuZj0iIit4bChNbi5mb3JtdWxhLF9lLE1uLmNlbGwsU24sWm4pOlR0LkY9KChQLmRlbnNlPyhyZVtLdF18'@;
put 'fFtdKVtnbl06cmVbTG5dKXx8e30pLkZ9ZWxzZSBUdC5mPSIiK3hsKE1uLmZvcm11bGEsX2UsTW4uY2VsbCxTbixabil9VXI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLEVjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cihNbi5jZWxsLFR0LFApLHZlPU1uO2JyZWFrO2Nhc2UiU3RyaW5n'@;
put 'IjppZighdmUpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO3ZlLnZhbD1NbiwoVHQ9WDIoTW4sdmUuY2VsbC5peGZlLCJzIikpLlhGPXBuW1R0Lml4ZmVdLFAuY2VsbEZvcm11bGEmJihUdC5mPSIiK3hsKHZlLmZvcm11bGEsX2UsdmUuY2VsbCxTbixa'@;
put 'bikpLFVyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIodmUuY2VsbCxUdCxQKSx2ZT1udWxsO2JyZWFrO2Nhc2UiQXJyYXkiOmt0LnB1c2goTW4pO3ZhciBXcj1kaShNblswXS5zKTtpZihkdD1QLmRlbnNlPyhyZVtNblswXS5zLnJdfHxb'@;
put 'XSlbTW5bMF0ucy5jXTpyZVtXcl0sUC5jZWxsRm9ybXVsYSYmZHQpe2lmKCF2ZXx8IVdyfHwhZHQpYnJlYWs7ZHQuZj0iIit4bChNblsxXSxfZSxNblswXSxTbixabiksZHQuRj1PbyhNblswXSl9YnJlYWs7Y2FzZSJTaHJGbWxhIjppZighUC5jZWxsRm9ybXVsYSlicmVhaztpZihudCl7aWYo'@;
put 'IXZlKWJyZWFrO0Z0W2RpKHZlLmNlbGwpXT1NblswXSwoKGR0PVAuZGVuc2U/KHJlW3ZlLmNlbGwucl18fFtdKVt2ZS5jZWxsLmNdOnJlW2RpKHZlLmNlbGwpXSl8fHt9KS5mPSIiK3hsKE1uWzBdLF9lLEdlLFNuLFpuKX1icmVhaztjYXNlIkxhYmVsU3N0IjpUdD1YMihTZVtNbi5pc3N0XS50'@;
put 'LE1uLml4ZmUsInMiKSxTZVtNbi5pc3N0XS5oJiYoVHQuaD1TZVtNbi5pc3N0XS5oKSxUdC5YRj1wbltUdC5peGZlXSxVcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKSxTZVtNbi5pc3N0XS5SJiYo'@;
put 'VHQuUj1TZVtNbi5pc3N0XS5SLm1hcChmdW5jdGlvbih6aSl7dmFyIEpyPW9uKHppKTtyZXR1cm4gemkucz09em4uRm9udHNbMF0mJihKci5zPVR0LnMpLEpyfSkpO2JyZWFrO2Nhc2UiQmxhbmsiOlAuc2hlZXRTdHVicyYmKFR0PXtpeGZlOk1uLml4ZmUsWEY6cG5bTW4uaXhmZV0sdDoieiJ9'@;
put 'LFVyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApKTticmVhaztjYXNlIk11bEJsYW5rIjppZihQLnNoZWV0U3R1YnMpZm9yKHZhciBYbj1Nbi5jO1huPD1Nbi5DOysrWG4pe3ZhciBlaT1Nbi5peGZl'@;
put 'W1huLU1uLmNdO1R0PXtpeGZlOmVpLFhGOnBuW2VpXSx0OiJ6In0sVXI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLEVjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpYbixyOk1uLnJ9LFR0LFApfWJyZWFrO2Nhc2UiUlN0cmluZyI6Y2FzZSJMYWJlbCI6Y2FzZSJCSUZGMlNUUiI6'@;
put 'KFR0PVgyKE1uLnZhbCxNbi5peGZlLCJzIikpLlhGPXBuW1R0Lml4ZmVdLFVyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApO2JyZWFrO2Nhc2UiRGltZW5zaW9ucyI6MT09PXdpJiYoX2U9TW4pO2Jy'@;
put 'ZWFrO2Nhc2UiU1NUIjooU2U9TW4pLmZvckVhY2goZnVuY3Rpb24oemkpe3ppLl9SPyh6aS5fUlswXSYmemkuX1JbMF0uaWR4PjAmJnppLl9SLnVuc2hpZnQoe2lkeDowLGlmbnQ6MH0pLHppLlI9emkuX1IubWFwKGZ1bmN0aW9uKEpyLHdzKXtyZXR1cm57dDoicyIsdjp6aS50LnNsaWNlKEpy'@;
put 'LmlkeCwoemkuX1Jbd3MrMV18fHt9KS5pZHgpLHM6em4uRm9udHNbSnIuaWZudDw0P0pyLmlmbnQ6SnIuaWZudC0xXX19KSxQLmNlbGxIVE1MJiYoemkuaD1rOSh6aS5SKSkpOlAuY2VsbEhUTUwmJih6aS5oPXJvKHppLnQpKSxkZWxldGUgemkuX1J9KTticmVhaztjYXNlIkZvcm1hdCI6aWYo'@;
put 'ND09Wm4uYmlmZil7amlbVXIrK109TW5bMV07Zm9yKHZhciBpcj0wO2lyPFVyKzE2MyYmdy5fdGFibGVbaXJdIT1NblsxXTsrK2lyKTtpcj49MTYzJiZ3LmxvYWQoTW5bMV0sVXIrMTYzKX1lbHNlIHcubG9hZChNblsxXSxNblswXSk7YnJlYWs7Y2FzZSJCSUZGMkZPUk1BVCI6amlbVXIrK109'@;
put 'TW47Zm9yKHZhciByaT0wO3JpPFVyKzE2MyYmdy5fdGFibGVbcmldIT1NbjsrK3JpKTtyaT49MTYzJiZ3LmxvYWQoTW4sVXIrMTYzKTticmVhaztjYXNlIk1lcmdlQ2VsbHMiOnhpPXhpLmNvbmNhdChNbik7YnJlYWs7Y2FzZSJPYmoiOkxpW01uLmNtb1swXV09Wm4ubGFzdG9iaj1NbjticmVh'@;
put 'aztjYXNlIlR4TyI6Wm4ubGFzdG9iai5UeE89TW47YnJlYWs7Y2FzZSJJbURhdGEiOlpuLmxhc3RvYmouSW1EYXRhPU1uO2JyZWFrO2Nhc2UiSExpbmsiOmZvcihidD1NblswXS5zLnI7YnQ8PU1uWzBdLmUucjsrK2J0KWZvcihjdD1NblswXS5zLmM7Y3Q8PU1uWzBdLmUuYzsrK2N0KShkdD1Q'@;
put 'LmRlbnNlPyhyZVtidF18fFtdKVtjdF06cmVbZGkoe2M6Y3QscjpidH0pXSkmJihkdC5sPU1uWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGJ0PU1uWzBdLnMucjtidDw9TW5bMF0uZS5yOysrYnQpZm9yKGN0PU1uWzBdLnMuYztjdDw9TW5bMF0uZS5jOysrY3QpKGR0PVAuZGVu'@;
put 'c2U/KHJlW2J0XXx8W10pW2N0XTpyZVtkaSh7YzpjdCxyOmJ0fSldKSYmZHQubCYmKGR0LmwuVG9vbHRpcD1NblsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZihabi5iaWZmPD01JiZabi5iaWZmPj0yKWJyZWFrO2R0PVAuZGVuc2U/KHJlW01uWzBdLnJdfHxbXSlbTW5bMF0uY106cmVbZGkoTW5b'@;
put 'MF0pXTt2YXIgbW89TGlbTW5bMl1dO2R0fHwoUC5kZW5zZT8ocmVbTW5bMF0ucl18fChyZVtNblswXS5yXT1bXSksZHQ9cmVbTW5bMF0ucl1bTW5bMF0uY109e3Q6InoifSk6ZHQ9cmVbZGkoTW5bMF0pXT17dDoieiJ9LF9lLmUucj1NYXRoLm1heChfZS5lLnIsTW5bMF0uciksX2Uucy5yPU1h'@;
put 'dGgubWluKF9lLnMucixNblswXS5yKSxfZS5lLmM9TWF0aC5tYXgoX2UuZS5jLE1uWzBdLmMpLF9lLnMuYz1NYXRoLm1pbihfZS5zLmMsTW5bMF0uYykpLGR0LmN8fChkdC5jPVtdKSxkdC5jLnB1c2goe2E6TW5bMV0sdDptby5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKGhpLm4pe2Nh'@;
put 'c2UiQ2xydENsaWVudCI6Y2FzZSJIZWFkZXIiOmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50ZXIiOmNhc2UiVkNlbnRlciI6Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNlIkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkki'@;
put 'OmNhc2UiU1hWREV4IjpjYXNlIlN4SXZkIjpjYXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMiOmNhc2UiQWRkaW4iOmNhc2UiU1hESSI6Y2FzZSJTWExJIjpjYXNlIlNYRXgiOmNhc2UiUXNpU1hUYWciOmNhc2UiRmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJl'@;
put 'MTEiOmNhc2UiRmVhdHVyZTEyIjpjYXNlIkxpc3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2FzZSJEeEdDb2wiOmNhc2UiRmJpIjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJhbWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9i'@;
put 'alByb3RlY3QiOmNhc2UiQ29uZEZtdDEyIjpjYXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5bGVzIjpjYXNlIlRhYmxlU3R5bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1lbnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2FzZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4i'@;
put 'OmNhc2UiRENvbk5hbWUiOmNhc2UiU1hQSSI6Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNlbGVjdCI6Y2FzZSJTeFJ1bGUiOmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRtIjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5NYW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wi'@;
put 'OmNhc2UiUHJpbnRHcmlkIjpjYXNlIlByaW50U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JOIjpjYXNlIlNjbCI6Y2FzZSJTaGVldEV4dCI6Y2FzZSJTaGVldEV4dE9wdGlvbmFsIjpjYXNlIk9iTm9NYWNyb3MiOmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2Ui'@;
put 'UGhvbmV0aWNJbmZvIjpjYXNlIk9sZU9iamVjdFNpemUiOmNhc2UiRFhGIjpjYXNlIkRYRk4iOmNhc2UiRFhGTjEyIjpjYXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhGTjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJEVmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNh'@;
put 'c2UiRENvbm4iOmNhc2UiRGJPclBhcmFtUXJ5IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2UiT2xlRGJDb25uIjpjYXNlIkV4dFN0cmluZyI6Y2FzZSJJRm10UmVjb3JkIjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0YiOmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5p'@;
put 'dHMiOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIk1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQiOmNhc2UiRFNGIjpjYXNlIkJ1aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2UiV2luZG93MSI6Y2FzZSJIaWRlT2JqIjpjYXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNl'@;
put 'clNWaWV3QmVnaW4iOmNhc2UiVXNlclNWaWV3RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpjYXNlIkRlZmF1bHRSb3dIZWlnaHQiOmJyZWFrO2Nhc2UiWEZFeHQiOlVEKHBuW01uLml4ZmVdLE1uLmV4dCk7YnJlYWs7Y2FzZSJDb2xJbmZvIjppZighWm4uY2VsbFN0eWxlcylicmVhaztmb3IoO01u'@;
put 'LmU+PU1uLnM7KVFyW01uLmUtLV09e3dpZHRoOk1uLncvMjU2LGxldmVsOk1uLmxldmVsfHwwLGhpZGRlbjohISgxJk1uLmZsYWdzKX0scnJ8fChycj0hMCkscHUoUXJbTW4uZSsxXSk7YnJlYWs7Y2FzZSJSb3ciOnZhciBvaT17fTtudWxsIT1Nbi5sZXZlbCYmKHVyW01uLnJdPW9pLG9pLmxl'@;
put 'dmVsPU1uLmxldmVsKSxNbi5oaWRkZW4mJih1cltNbi5yXT1vaSxvaS5oaWRkZW49ITApLE1uLmhwdCYmKHVyW01uLnJdPW9pLG9pLmhwdD1Nbi5ocHQsb2kuaHB4PVUxKE1uLmhwdCkpLE1uLml4ZmUmJih1cltNbi5yXT1vaSxlcihUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdfHx7'@;
put 'fSx2OjAsdDoibiJ9LFApLG9pLnM9VHQucyk7YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpjYXNlIlJpZ2h0TWFyZ2luIjpjYXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0b21NYXJnaW4iOnJlWyIhbWFyZ2lucyJdfHxkZihyZVsiIW1hcmdpbnMiXT17fSkscmVbIiFtYXJnaW5zIl1bTXMuc2xpY2Uo'@;
put 'MCwtNikudG9Mb3dlckNhc2UoKV09TW47YnJlYWs7Y2FzZSJTZWxlY3Rpb24iOnJlWyIhc2VsIl09TW47YnJlYWs7Y2FzZSJTZXR1cCI6cmVbIiFtYXJnaW5zIl18fGRmKHJlWyIhbWFyZ2lucyJdPXt9KSxyZVsiIW1hcmdpbnMiXS5oZWFkZXI9TW4uaGVhZGVyLHJlWyIhbWFyZ2lucyJdLmZv'@;
put 'b3Rlcj1Nbi5mb290ZXI7YnJlYWs7Y2FzZSJXaW5kb3cyIjpNbi5SVEwmJih1bi5WaWV3c1swXS5SVEw9ITApLEJyPU1uO2JyZWFrO2Nhc2UiQ291bnRyeSI6WnQ9TW47YnJlYWs7Y2FzZSJGb250IjpNbi5pY3YmJmtuKE1uLmljdikmJihNbi5jb2xvcj17cmdiOnoxKGtuKE1uLmljdikpfSks'@;
put 'ZGVsZXRlIE1uLmljdiwwPT16bi5Gb250cy5sZW5ndGgmJloxKE1uKSx6bi5Gb250cy5wdXNoKE1uKTticmVhaztjYXNlIlBhbGV0dGUiOktuPU1uO2JyZWFrO2Nhc2UiVGhlbWUiOnNpPU1uO2JyZWFrO2Nhc2UiQ29kZU5hbWUiOkhlP3FuLkNvZGVOYW1lPU1ufHxxbi5uYW1lOnVuLldCUHJv'@;
put 'cHMuQ29kZU5hbWU9TW58fCJUaGlzV29ya2Jvb2siO2JyZWFrO2Nhc2UiUGFuZSI6KEJyfHx7fSkuZnJvemVuJiYocmVbIiFmcmVlemUiXT1kaSh7cjpNbi55fHwwLGM6TW4ueHx8MH0pKTticmVhaztkZWZhdWx0OnN3aXRjaChoaS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQi'@;
put 'OmNhc2UiU3RhcnRCbG9jayI6Y2FzZSJFbmRCbG9jayI6Y2FzZSJGcmFtZSI6Y2FzZSJBcmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xpbmUiOmNhc2UiVGljayI6Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRMYXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJD'@;
put 'cnRMaW5lIjpjYXNlIkNydE1sRnJ0IjpjYXNlIkNydE1sRnJ0Q29udGludWUiOmNhc2UiTGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0IjpjYXNlIkNoYXJ0IjpjYXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQzREJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6'@;
put 'Y2FzZSJQbG90QXJlYSI6Y2FzZSJQbG90R3Jvd3RoIjpjYXNlIlNlcmllc0xpc3QiOmNhc2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRyZW5kIjpjYXNlIkRhdGFGb3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNhc2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNl'@;
put 'ckZtdCI6Y2FzZSJTaHRQcm9wcyI6Y2FzZSJEZWZhdWx0VGV4dCI6Y2FzZSJUZXh0IjpjYXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0Q29udGVudHMiOmNhc2UiTGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2VwdGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNh'@;
put 'c2UiTWFya2VyRm9ybWF0IjpjYXNlIlN0YXJ0T2JqZWN0IjpjYXNlIkVuZE9iamVjdCI6Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGluayI6Y2FzZSJTSUluZGV4IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNhc2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJB'@;
put 'eGlzUGFyZW50IjpjYXNlIlBvcyI6Y2FzZSJWYWx1ZVJhbmdlIjpjYXNlIlNYVmlld0V4OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBpdm90Q2hhcnRCaXRzIjpjYXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQcm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29v'@;
put 'cHQiOmNhc2UiUXNpIjpjYXNlIlFzaWYiOmNhc2UiUXNpciI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9kZSI6Y2FzZSJBdXRvRmlsdGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZvIjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJT'@;
put 'b3J0IjpjYXNlIlNvcnREYXRhIjpjYXNlIlNoYXBlUHJvcHNTdHJlYW0iOmNhc2UiTXNvRHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3JvdXAiOmNhc2UiTXNvRHJhd2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQdWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQ'@;
put 'aWN0dXJlIjpjYXNlIlBMViI6Y2FzZSJIb3Jpem9udGFsUGFnZUJyZWFrcyI6Y2FzZSJWZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFja3VwIjpjYXNlIkNvbXByZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRG'@;
put 'b250TGlzdCI6Y2FzZSJGcnRXcmFwcGVyIjpicmVhaztkZWZhdWx0OnN3aXRjaChoaS5uKXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRhciI6Y2FzZSJSYWRhckFyZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJbnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklG'@;
put 'RjJGT05UQ0xSIjpjYXNlIkJJRkYyRk1UQ05UIjpjYXNlIkJJRkYyRk9OVFhUUkEiOmNhc2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpjYXNlIkJJRkY0WEYiOmNhc2UiQklGRjJYRklOREVYIjpjYXNlIkJJRkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2Fz'@;
put 'ZSJTQ0VOQVJJTyI6Y2FzZSJEQ29uQmluIjpjYXNlIlBpY0YiOmNhc2UiRGF0YUxhYkV4dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpjYXNlIkJvcFBvcEN1c3RvbSI6Y2FzZSJSZWFsVGltZURhdGEiOmNhc2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJB'@;
put 'ZGRNZW51IjpjYXNlIkxQciI6Y2FzZSJMaXN0T2JqIjpjYXNlIkxpc3RGaWVsZCI6Y2FzZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2FzZSJUb29sYmFySGRyIjpjYXNlIlRvb2xiYXJFbmQiOmNhc2UiRERFT2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKFAuV1RG'@;
put 'KXRocm93IlVucmVjb2duaXplZCBSZWNvcmQgIitoaS5ufX19fX1lbHNlIHkubCs9eG8sWm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1ZSh7bGVuZ3RoOnhvfSkpfXJldHVybiBMLlNoZWV0TmFtZXM9bHQoZ2UpLnNvcnQoZnVuY3Rpb24oemksSnIpe3JldHVybiBO'@;
put 'dW1iZXIoemkpLU51bWJlcihKcil9KS5tYXAoZnVuY3Rpb24oemkpe3JldHVybiBnZVt6aV0ubmFtZX0pLFAuYm9va1NoZWV0c3x8KEwuU2hlZXRzPVEpLCFMLlNoZWV0TmFtZXMubGVuZ3RoJiZCZVsiIXJlZiJdPyhMLlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksTC5TaGVldHMmJihMLlNo'@;
put 'ZWV0cy5TaGVldDE9QmUpKTpMLlByZWFtYmxlPUJlLEwuU2hlZXRzJiZfby5mb3JFYWNoKGZ1bmN0aW9uKHppLEpyKXtMLlNoZWV0c1tMLlNoZWV0TmFtZXNbSnJdXVsiIWF1dG9maWx0ZXIiXT16aX0pLEwuU3RyaW5ncz1TZSxMLlNTRj13LmdldF90YWJsZSgpLFpuLmVuYyYmKEwuRW5jcnlw'@;
put 'dGlvbj1abi5lbmMpLHNpJiYoTC5UaGVtZXM9c2kpLEwuTWV0YWRhdGE9e30sdm9pZCAwIT09WnQmJihMLk1ldGFkYXRhLkNvdW50cnk9WnQpLFNuLm5hbWVzLmxlbmd0aD4wJiYodW4uTmFtZXM9U24ubmFtZXMpLEwuV29ya2Jvb2s9dW4sTH0oUS5jb250ZW50LFApO2Vsc2UgaWYoKGdlPWpl'@;
put 'LmZpbmQoeSwiUGVyZmVjdE9mZmljZV9NQUlOIikpJiZnZS5jb250ZW50KXJlPVRtLnRvX3dvcmtib29rKGdlLmNvbnRlbnQsKFAudHlwZT1fZSxQKSk7ZWxzZXtpZighKGdlPWplLmZpbmQoeSwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhZ2UuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkNh'@;
put 'bm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO3JlPVRtLnRvX3dvcmtib29rKGdlLmNvbnRlbnQsKFAudHlwZT1fZSxQKSl9UC5ib29rVkJBJiZ5LkZ1bGxQYXRocyYmamUuZmluZCh5LCIvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGlyIikmJihyZS52YmFyYXc9ZnVuY3Rpb24gWDQoeSl7dmFy'@;
put 'IFA9amUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4geS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihMLFEpe2lmKCIvIiE9PUwuc2xpY2UoLTEpJiZMLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciByZT1MLnJlcGxhY2UoL15bXlwvXSovLCJSIikucmVwbGFjZSgv'@;
put 'XC9fVkJBX1BST0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO2plLnV0aWxzLmNmYl9hZGQoUCxyZSx5LkZpbGVJbmRleFtRXS5jb250ZW50KX19KSxqZS53cml0ZShQKX0oeSkpfXZhciB2ZT17fTtyZXR1cm4geS5GdWxsUGF0aHMmJmZ1bmN0aW9uIHlNKHksUCxMKXt2YXIgUT1qZS5maW5kKHksIiFE'@;
put 'b2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKFEmJlEuc2l6ZT4wKXRyeXt2YXIgcmU9dTkoUSxfNCxycC5EU0kpO2Zvcih2YXIgZ2UgaW4gcmUpUFtnZV09cmVbZ2VdfWNhdGNoKEhlKXtpZihMLldURil0aHJvdyBIZX12YXIgX2U9amUuZmluZCh5LCIhU3VtbWFyeUluZm9ybWF0aW9u'@;
put 'Iik7aWYoX2UmJl9lLnNpemU+MCl0cnl7dmFyIHZlPXU5KF9lLHdyLHJwLlNJKTtmb3IodmFyIFNlIGluIHZlKW51bGw9PVBbU2VdJiYoUFtTZV09dmVbU2VdKX1jYXRjaChIZSl7aWYoTC5XVEYpdGhyb3cgSGV9UC5IZWFkaW5nUGFpcnMmJlAuVGl0bGVzT2ZQYXJ0cyYmKHUwKFAuSGVhZGlu'@;
put 'Z1BhaXJzLFAuVGl0bGVzT2ZQYXJ0cyxQLEwpLGRlbGV0ZSBQLkhlYWRpbmdQYWlycyxkZWxldGUgUC5UaXRsZXNPZlBhcnRzKX0oeSx2ZSxQKSxyZS5Qcm9wcz1yZS5DdXN0cHJvcHM9dmUsUC5ib29rRmlsZXMmJihyZS5jZmI9eSkscmV9dmFyIG1mPXswOntuOiJCcnRSb3dIZHIiLGY6ZnVu'@;
put 'Y3Rpb24gR0koeSxQKXt2YXIgTD17fSxRPXkubCtQO0wucj15LnJlYWRfc2hpZnQoNCkseS5sKz00O3ZhciByZT15LnJlYWRfc2hpZnQoMik7eS5sKz0xO3ZhciBnZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkubD1RLDcmZ2UmJihMLmxldmVsPTcmZ2UpLDE2JmdlJiYoTC5oaWRkZW49ITAp'@;
put 'LDMyJmdlJiYoTC5ocHQ9cmUvMjApLEx9fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24gRnYoeSl7cmV0dXJuW3V1KHkpXX19LDI6e246IkJydENlbGxSayIsZjpmdW5jdGlvbiBpTCh5KXtyZXR1cm5bdXUoeSksWGMoeSksIm4iXX19LDM6e246IkJydENlbGxFcnJvciIsZjpmdW5j'@;
put 'dGlvbiB0WSh5KXtyZXR1cm5bdXUoeSkseS5yZWFkX3NoaWZ0KDEpLCJlIl19fSw0OntuOiJCcnRDZWxsQm9vbCIsZjpmdW5jdGlvbiBQUyh5KXtyZXR1cm5bdXUoeSkseS5yZWFkX3NoaWZ0KDEpLCJiIl19fSw1OntuOiJCcnRDZWxsUmVhbCIsZjpmdW5jdGlvbiBuTCh5KXtyZXR1cm5bdXUo'@;
put 'eSksbWEoeSksIm4iXX19LDY6e246IkJydENlbGxTdCIsZjpmdW5jdGlvbiBNNih5KXtyZXR1cm5bdXUoeSksQ2MoeSksInN0ciJdfX0sNzp7bjoiQnJ0Q2VsbElzc3QiLGY6ZnVuY3Rpb24gQlMoeSl7cmV0dXJuW3V1KHkpLHkucmVhZF9zaGlmdCg0KSwicyJdfX0sODp7bjoiQnJ0Rm1sYVN0'@;
put 'cmluZyIsZjpmdW5jdGlvbiBhTCh5LFAsTCl7dmFyIFE9eS5sK1AscmU9dXUoeSk7cmUucj1MWyIhcm93Il07dmFyIF9lPVtyZSxDYyh5KSwic3RyIl07aWYoTC5jZWxsRm9ybXVsYSl7eS5sKz0yO3ZhciB2ZT1oNih5LFEteS5sLEwpO19lWzNdPXhsKHZlLG51bGwscmUsTC5zdXBib29rcyxM'@;
put 'KX1lbHNlIHkubD1RO3JldHVybiBfZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVuY3Rpb24gWlMoeSxQLEwpe3ZhciBRPXkubCtQLHJlPXV1KHkpO3JlLnI9TFsiIXJvdyJdO3ZhciBfZT1bcmUsbWEoeSksIm4iXTtpZihMLmNlbGxGb3JtdWxhKXt5LmwrPTI7dmFyIHZlPWg2KHksUS15Lmws'@;
put 'TCk7X2VbM109eGwodmUsbnVsbCxyZSxMLnN1cGJvb2tzLEwpfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIHNMKHksUCxMKXt2YXIgUT15LmwrUCxyZT11dSh5KTtyZS5yPUxbIiFyb3ciXTt2YXIgX2U9W3JlLHkucmVhZF9zaGlmdCgxKSwi'@;
put 'YiJdO2lmKEwuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXkubCxMKTtfZVszXT14bCh2ZSxudWxsLHJlLEwuc3VwYm9va3MsTCl9ZWxzZSB5Lmw9UTtyZXR1cm4gX2V9fSwxMTp7bjoiQnJ0Rm1sYUVycm9yIixmOmZ1bmN0aW9uIFVTKHksUCxMKXt2YXIgUT15LmwrUCxyZT11'@;
put 'dSh5KTtyZS5yPUxbIiFyb3ciXTt2YXIgX2U9W3JlLHkucmVhZF9zaGlmdCgxKSwiZSJdO2lmKEwuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXkubCxMKTtfZVszXT14bCh2ZSxudWxsLHJlLEwuc3VwYm9va3MsTCl9ZWxzZSB5Lmw9UTtyZXR1cm4gX2V9fSwxMjp7bjoiQnJ0'@;
put 'U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBPUyh5KXtyZXR1cm5bYTAoeSldfX0sMTM6e246IkJydFNob3J0UmsiLGY6ZnVuY3Rpb24gelMoeSl7cmV0dXJuW2EwKHkpLFhjKHkpLCJuIl19fSwxNDp7bjoiQnJ0U2hvcnRFcnJvciIsZjpmdW5jdGlvbiBOUyh5KXtyZXR1cm5bYTAoeSkseS5yZWFk'@;
put 'X3NoaWZ0KDEpLCJlIl19fSwxNTp7bjoiQnJ0U2hvcnRCb29sIixmOmZ1bmN0aW9uIFM2KHkpe3JldHVyblthMCh5KSx5LnJlYWRfc2hpZnQoMSksImIiXX19LDE2OntuOiJCcnRTaG9ydFJlYWwiLGY6alN9LDE3OntuOiJCcnRTaG9ydFN0IixmOmZ1bmN0aW9uIHg2KHkpe3JldHVyblthMCh5'@;
put 'KSxDYyh5KSwic3RyIl19fSwxODp7bjoiQnJ0U2hvcnRJc3N0IixmOmZ1bmN0aW9uIEdkKHkpe3JldHVyblthMCh5KSx5LnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntuOiJCcnRTU1RJdGVtIixmOmNhfSwyMDp7bjoiQnJ0UENESU1pc3NpbmcifSwyMTp7bjoiQnJ0UENESU51bWJlciJ9LDIy'@;
put 'OntuOiJCcnRQQ0RJQm9vbGVhbiJ9LDIzOntuOiJCcnRQQ0RJRXJyb3IifSwyNDp7bjoiQnJ0UENESVN0cmluZyJ9LDI1OntuOiJCcnRQQ0RJRGF0ZXRpbWUifSwyNjp7bjoiQnJ0UENESUluZGV4In0sMjc6e246IkJydFBDRElBTWlzc2luZyJ9LDI4OntuOiJCcnRQQ0RJQU51bWJlciJ9LDI5'@;
put 'OntuOiJCcnRQQ0RJQUJvb2xlYW4ifSwzMDp7bjoiQnJ0UENESUFFcnJvciJ9LDMxOntuOiJCcnRQQ0RJQVN0cmluZyJ9LDMyOntuOiJCcnRQQ0RJQURhdGV0aW1lIn0sMzM6e246IkJydFBDUlJlY29yZCJ9LDM0OntuOiJCcnRQQ1JSZWNvcmREdCJ9LDM1OntuOiJCcnRGUlRCZWdpbiJ9LDM2'@;
put 'OntuOiJCcnRGUlRFbmQifSwzNzp7bjoiQnJ0QUNCZWdpbiJ9LDM4OntuOiJCcnRBQ0VuZCJ9LDM5OntuOiJCcnROYW1lIixmOmZ1bmN0aW9uIHA1KHksUCxMKXt2YXIgUT15LmwrUDt5LmwrPTQseS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoNCksZ2U9ZHUoeSksX2U9c1MoeSwwLEwpLHZl'@;
put 'PUF1KHkpO3kubD1RO3ZhciBTZT17TmFtZTpnZSxQdGc6X2V9O3JldHVybiByZTwyNjg0MzU0NTUmJihTZS5TaGVldD1yZSksdmUmJihTZS5Db21tZW50PXZlKSxTZX19LDQwOntuOiJCcnRJbmRleFJvd0Jsb2NrIn0sNDI6e246IkJydEluZGV4QmxvY2sifSw0Mzp7bjoiQnJ0Rm9udCIsZjpm'@;
put 'dW5jdGlvbiBtQyh5LFAsTCl7dmFyIFE9e307US5zej15LnJlYWRfc2hpZnQoMikvMjA7dmFyIHJlPWY0KHkpO3N3aXRjaChyZS5mQm9sZCYmKFEuYm9sZD0xKSxyZS5mSXRhbGljJiYoUS5pdGFsaWM9MSkscmUuZlVuZGVybGluZSYmKFEudW5kZXJsaW5lPTEpLHJlLmZDb25kZW5zZSYmKFEu'@;
put 'Y29uZGVuc2U9MSkscmUuZkV4dGVuZCYmKFEuZXh0ZW5kPTEpLHJlLmZTaGFkb3cmJihRLnNoYWRvdz0xKSxyZS5mT3V0bGluZSYmKFEub3V0bGluZT0xKSxyZS5mU3RyaWtlb3V0JiYoUS5zdHJpa2U9MSksNzAwPT09eS5yZWFkX3NoaWZ0KDIpJiYoUS5ib2xkPTEpLHkucmVhZF9zaGlmdCgy'@;
put 'KSl7Y2FzZSAxOlEudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOlEudmFsaWduPSJzdWIifXZhciBfZT15LnJlYWRfc2hpZnQoMSk7MCE9X2UmJihRLnVuZGVybGluZT1fZSk7dmFyIHZlPXkucmVhZF9zaGlmdCgxKTt2ZT4wJiYoUS5mYW1pbHk9dmUpO3ZhciBTZT15LnJlYWRfc2hpZnQo'@;
put 'MSk7c3dpdGNoKFNlPjAmJihRLmNoYXJzZXQ9U2UpLHkubCsrLFEuY29sb3I9RGQoeSkseS5yZWFkX3NoaWZ0KDEpKXtjYXNlIDE6US5zY2hlbWU9Im1ham9yIjticmVhaztjYXNlIDI6US5zY2hlbWU9Im1pbm9yIn1yZXR1cm4gUS5uYW1lPUNjKHkpLFF9fSw0NDp7bjoiQnJ0Rm10IixmOmZ1'@;
put 'bmN0aW9uIGdDKHksUCl7cmV0dXJuW3kucmVhZF9zaGlmdCgyKSxDYyh5KV19fSw0NTp7bjoiQnJ0RmlsbCIsZjpmdW5jdGlvbiBrRCh5LFApe3ZhciBMPXkubCtQLFE9e30scmU9eS5yZWFkX3NoaWZ0KDQpO2lmKDQwIT1yZSl7US5wYXR0ZXJuVHlwZT1WNFtyZV07dmFyIGdlPURkKHkpOzY0'@;
put 'IT1nZS5pbmRleCYmKFEuZmdDb2xvcj1nZSk7dmFyIF9lPURkKHkpOzY1IT1fZS5pbmRleCYmKFEuYmdDb2xvcj1fZSl9ZWxzZXt5LmwrPTE2LHkucmVhZF9zaGlmdCg0KSxtYSh5KSxtYSh5KSxtYSh5KSxtYSh5KSxtYSh5KTtmb3IodmFyIHZlPXkucmVhZF9zaGlmdCg0KSxTZT1bXSxIZT0w'@;
put 'O0hlPHZlOysrSGUpU2UucHVzaChZbSh5KSl9cmV0dXJuIHkubD1MLFF9fSw0Njp7bjoiQnJ0Qm9yZGVyIixmOmZ1bmN0aW9uIFREKHkpe3ZhciBQPXt9O3kucmVhZF9zaGlmdCgxKTt2YXIgTD1qNCh5KTsibm9uZSIhPUwuc3R5bGUmJihQLnRvcD1MKTt2YXIgUT1qNCh5KTsibm9uZSIhPVEu'@;
put 'c3R5bGUmJihQLmJvdHRvbT1RKTt2YXIgcmU9ajQoeSk7Im5vbmUiIT1yZS5zdHlsZSYmKFAubGVmdD1yZSk7dmFyIGdlPWo0KHkpOyJub25lIiE9Z2Uuc3R5bGUmJihQLnJpZ2h0PWdlKTt2YXIgX2U9ajQoeSk7cmV0dXJuIm5vbmUiIT1fZS5zdHlsZSYmKFAuZGlhZz1fZSksUH19LDQ3Ontu'@;
put 'OiJCcnRYRiIsZjpmdW5jdGlvbiBIOSh5LFApe3ZhciBMPXkubCtQLFE9e30scmU9eS5yZWFkX3NoaWZ0KDIpLGdlPXkucmVhZF9zaGlmdCgyKSxfZT15LnJlYWRfc2hpZnQoMiksdmU9eS5yZWFkX3NoaWZ0KDIpLFNlPXkucmVhZF9zaGlmdCgyKSxIZT15LnJlYWRfc2hpZnQoMSk7eS5yZWFk'@;
put 'X3NoaWZ0KDEpO3ZhciBCZT15LnJlYWRfc2hpZnQoMiksR2U9eS5yZWFkX3NoaWZ0KDEpO3kubD1MLFEueGZJZD1yZSxRLm51bUZtdElkPWdlLFEuZm9udElkPV9lLFEuZmlsbElkPXZlLFEuYm9yZGVySWQ9U2UsMSZHZSYmMCE9US5udW1GbXRJZCYmKFEuYXBwbHlOdW1iZXJGb3JtYXQ9ITAp'@;
put 'LFEuYWxpZ25tZW50PXt9LEhlPjAmJihRLmFsaWdubWVudC50ZXh0Um90YXRpb249SGUpO3ZhciBudD0hMTtyZXR1cm4gNyZCZSYmKG50PSEwLFEuYWxpZ25tZW50Lmhvcml6b250YWw9V21bNyZCZV0pLFEuYWxpZ25tZW50LnZlcnRpY2FsPUI0W0JlPj4+MyY3XSxRLmFsaWdubWVudC52ZXJ0'@;
put 'aWNhbCYmKG50PSEwKSxCZT4+PjYmMSYmKFEuYWxpZ25tZW50LndyYXBUZXh0PSEwKSxCZT4+PjgmMSYmKFEuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxudHx8ZGVsZXRlIFEuYWxpZ25tZW50LDQmR2UmJm50JiYoUS5hcHBseUFsaWdubWVudD0hMCksUX19LDQ4OntuOiJCcnRTdHlsZSJ9'@;
put 'LDQ5OntuOiJCcnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9'@;
put 'LDU3OntuOiJCcnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOlZkfSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gVzQoeSl7dmFyIFA9e307'@;
put 'UC5pPXkucmVhZF9zaGlmdCg0KTt2YXIgTD17fTtMLnI9eS5yZWFkX3NoaWZ0KDQpLEwuYz15LnJlYWRfc2hpZnQoNCksUC5yPWRpKEwpO3ZhciBRPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZRJiYoUC5sPSIxIiksOCZRJiYoUC5hPSIxIiksUH19LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0'@;
put 'aW9uIEU2KHksUCxMKXt2YXIgUT15LmwrUCxyZT15LnJlYWRfc2hpZnQoNCksZ2U9bDAoeSksX2U9QXUoeSksdmU9QXUoeSksU2U9QXUoeSksSGU9QXUoeSksQmU9aVMoeSxQLEwpLEdlPXkubDxRP2lTKHksUCxMKTpudWxsLG50PTE1JnJlLGR0PXt0OmVvW250XSxzcXJmeDpnZSxzOltfZSx2'@;
put 'ZSxTZSxIZV19O3JldHVybiBCZSYmKGR0LmYxPUJlKSxHZSYmKGR0LmYyPUdlKSwwPT1udHx8Mz09bnR8fDc9PW50fHwoZHQub3A9QnZbcmU+PjIwJjE1XSksZHR9fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxCb29sIn0s'@;
put 'Njg6e246IkJydFN4dmNlbGxFcnIifSw2OTp7bjoiQnJ0U3h2Y2VsbERhdGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24ifSwxMjk6e246IkJydEJlZ2luU2hlZXQifSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJvb2siLGY6'@;
put 'eWMscDowfSwxMzI6e246IkJydEVuZEJvb2sifSwxMzM6e246IkJydEJlZ2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVnaW5Cb29rVmlld3MifSwxMzY6e246IkJydEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6ZnVuY3Rp'@;
put 'b24gZ0woeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5LmwrPTI4LHtSVEw6MzImUCxncmlkOiEhKDQmUCl9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXcifSwxMzk6e246IkJydEJlZ2luQ3NWaWV3cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVnaW5Dc1Zp'@;
put 'ZXcifSwxNDI6e246IkJydEVuZENzVmlldyJ9LDE0Mzp7bjoiQnJ0QmVnaW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0QmVnaW5TaGVldERhdGEifSwxNDY6e246IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1bmN0aW9u'@;
put 'IEpJKHksUCl7dmFyIEw9e30sUT15W3kubF07cmV0dXJuKyt5LmwsTC5hYm92ZT0hKDY0JlEpLEwubGVmdD0hKDEyOCZRKSx5LmwrPTE4LEwubmFtZT16aCh5LFAtMTkpLEx9fSwxNDg6e246IkJydFdzRGltIixmOnFJLHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBHUyh5LFAp'@;
put 'e3ZhciBMPXkubCtQO21hKHkpLG1hKHkpO3ZhciBRPXkucmVhZF9zaGlmdCg0LCJpIikscmU9eS5yZWFkX3NoaWZ0KDQsImkiKTtpZih5LnJlYWRfc2hpZnQoNCkseS5yZWFkX3NoaWZ0KDEpLEwhPXkubCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBCcnRQYW5lOiAiK0wrIiAhPSAiK3kubCk7cmV0'@;
put 'dXJuW2RpKHtyOlEsYzpyZX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uIHVMKHksUCl7cmV0dXJuIHkucmVhZF9zaGlmdCg0KSx7Y2VsbDpkaSh7cjp5LnJlYWRfc2hpZnQoNCksYzp5LnJlYWRfc2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBQTCh5'@;
put 'LFApe3ZhciBMPXt9LFE9eS5yZWFkX3NoaWZ0KDQpO0wuZGVmYXVsdFRoZW1lVmVyc2lvbj15LnJlYWRfc2hpZnQoNCk7dmFyIHJlPVA+OD9DYyh5KToiIjtyZXR1cm4gcmUubGVuZ3RoPjAmJihMLkNvZGVOYW1lPXJlKSxMLmF1dG9Db21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JlEpLEwuYmFj'@;
put 'a3VwRmlsZT0hISg2NCZRKSxMLmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JlEpLEwuZGF0ZTE5MDQ9ISEoMSZRKSxMLmZpbHRlclByaXZhY3k9ISEoOCZRKSxMLmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JlEpLEwucHJvbXB0ZWRTb2x1dGlvbnM9ISEoMTYmUSksTC5wdWJsaXNoSXRl'@;
put 'bXM9ISEoMjA0OCZRKSxMLnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmUSksTC5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZRKSxMLnNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzPSEhKDQmUSksTC5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZRKSxMLnNob3dPYmplY3Rz'@;
put 'PVsiYWxsIiwicGxhY2Vob2xkZXJzIiwibm9uZSJdW1E+PjEzJjNdLEwuc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmUSksTC51cGRhdGVMaW5rcz1bInVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW1E+PjgmM10sTH19LDE1NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRG'@;
put 'aWxlUmVjb3ZlciJ9LDE1Njp7bjoiQnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gY1koeSxQKXt2YXIgTD17fTtyZXR1cm4gTC5IaWRkZW49eS5yZWFkX3NoaWZ0KDQpLEwuaVRhYklEPXkucmVhZF9zaGlmdCg0KSxMLnN0clJlbElEPVQxKHksUC04KSxMLm5hbWU9Q2MoeSksTH19LDE1Nzp7bjoi'@;
put 'QnJ0Q2FsY1Byb3AifSwxNTg6e246IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBRaCh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDQpLHkucmVhZF9zaGlmdCg0KV19fSwxNjA6e246IkJydEVuZFNzdCJ9LDE2MTp7bjoiQnJ0QmVnaW5BRmlsdGVyIixmOkpj'@;
put 'fSwxNjI6e246IkJydEVuZEFGaWx0ZXIifSwxNjM6e246IkJydEJlZ2luRmlsdGVyQ29sdW1uIn0sMTY0OntuOiJCcnRFbmRGaWx0ZXJDb2x1bW4ifSwxNjU6e246IkJydEJlZ2luRmlsdGVycyJ9LDE2Njp7bjoiQnJ0RW5kRmlsdGVycyJ9LDE2Nzp7bjoiQnJ0RmlsdGVyIn0sMTY4OntuOiJC'@;
put 'cnRDb2xvckZpbHRlciJ9LDE2OTp7bjoiQnJ0SWNvbkZpbHRlciJ9LDE3MDp7bjoiQnJ0VG9wMTBGaWx0ZXIifSwxNzE6e246IkJydER5bmFtaWNGaWx0ZXIifSwxNzI6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVycyJ9LDE3Mzp7bjoiQnJ0RW5kQ3VzdG9tRmlsdGVycyJ9LDE3NDp7bjoiQnJ0'@;
put 'Q3VzdG9tRmlsdGVyIn0sMTc1OntuOiJCcnRBRmlsdGVyRGF0ZUdyb3VwSXRlbSJ9LDE3Njp7bjoiQnJ0TWVyZ2VDZWxsIixmOmxMfSwxNzc6e246IkJydEJlZ2luTWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0RW5kTWVyZ2VDZWxscyJ9LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0s'@;
put 'MTgwOntuOiJCcnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmllbGRzIn0sMTgzOntuOiJCcnRCZWdpblBDREZpZWxkIn0sMTg0OntuOiJCcnRFbmRQQ0RGaWVsZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwx'@;
put 'ODY6e246IkJydEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9LDE4OTp7bjoiQnJ0QmVnaW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0RW5kUENERkF0YmwifSwxOTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoi'@;
put 'QnJ0RW5kUENESVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJlY29yZHMifSwxOTU6e246IkJydEJlZ2luUENESGllcmFyY2hpZXMifSwxOTY6e246IkJydEVuZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdp'@;
put 'blBDREhpZXJhcmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9LDIwMDp7bjoiQnJ0RW5kUENESEZpZWxkc1VzYWdlIn0sMjAxOntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5l'@;
put 'Y3Rpb24ifSwyMDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2luRUNPbGFwUHJvcHMifSwyMDY6e246IkJydEVuZEVDT2xhcFByb3BzIn0sMjA3OntuOiJCcnRCZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBD'@;
put 'RFNDb25zb2wifSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2UifSwyMTI6e246IkJydEVuZFBDRFNDUGFnZSJ9LDIxMzp7bjoiQnJ0QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQ'@;
put 'Q0RTQ1BJdGVtIn0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRCZWdpblBDRFNDU2V0In0sMjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9LDIxOTp7bjoiQnJ0QmVnaW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZH'@;
put 'cm91cCJ9LDIyMTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdpblBDREZHUmFuZ2UifSwyMjQ6e246IkJydEVuZFBDREZHUmFuZ2UifSwyMjU6e246IkJydEJlZ2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5k'@;
put 'UENERkdEaXNjcmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNoZSJ9LDIyOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIzMDp7bjoiQnJ0RW5kUENEU0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENE'@;
put 'U0RUQ0VNZW1iZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIifSwyMzQ6e246IkJydEVuZFBDRFNEVENFTWVtYmVyIn0sMjM1OntuOiJCcnRCZWdpblBDRFNEVENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRD'@;
put 'UXVlcmllcyJ9LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENEU0RUQ1NldHMifSwyNDE6e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoi'@;
put 'QnJ0RW5kUENEU0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9LDI0NTp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6'@;
put 'e246IkJydEVuZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntuOiJCcnRCZWdpblBSRmlsdGVyIn0sMjUyOntuOiJCcnRFbmRQUkZpbHRlciJ9LDI1Mzp7bjoiQnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBO'@;
put 'YW1lcyJ9LDI1NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9LDI1ODp7bjoiQnJ0RW5kUE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVnaW5QTlBhaXIifSwyNjA6e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVn'@;
put 'aW5FQ1dlYlByb3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246IkJydEVuZEVDV1BUYWJsZXMifSwyNjU6e246IkJydEJlZ2luRUNQYXJhbXMifSwyNjY6e246IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdp'@;
put 'bkVDUGFyYW0ifSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENES1BJcyJ9LDI3MTp7bjoiQnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246IkJydEVuZFBDREtQSSJ9LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJC'@;
put 'cnRFbmREaW1zIn0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQifSwyNzg6e246IkJydEJlZ2luU3R5bGVTaGVldCJ9LDI3OTp7bjoiQnJ0RW5kU3R5bGVTaGVldCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6'@;
put 'e246IkJydEVuZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5kU1hWSXMifSwyODU6e246IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoiQnJ0RW5kU1hWRCJ9LDI4Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0'@;
put 'RW5kU1hWRHMifSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9LDI5Mjp7bjoiQnJ0RW5kU1hQSXMifSwyOTM6e246IkJydEJlZ2luU1hESSJ9LDI5NDp7bjoiQnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJ'@;
put 'cyJ9LDI5Njp7bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoiQnJ0QmVnaW5TWExJUndzIn0sMzAwOntuOiJCcnRFbmRTWExJUndzIn0sMzAxOntuOiJCcnRCZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJ'@;
put 'Q29scyJ9LDMwMzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hGb3JtYXRzIn0sMzA2OntuOiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6e246IkJydEJlZ2luU3hTZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0s'@;
put 'MzA5OntuOiJCcnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMifSwzMTI6e246IkJydEVuZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0RW5kU1hMb2NhdGlvbiJ9LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1'@;
put 'OntuOiJCcnRFbmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRCZWdpblNYVEgifSwzMTk6e246IkJydEVuZFNYVEgifSwzMjA6e246IkJydEJlZ2luSVNYVEhSd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIy'@;
put 'OntuOiJCcnRCZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwzMjU6e246IkJydEVuZFNYVERNUHMifSwzMjY6e246IkJydEJlZ2luU1hURE1QIn0sMzI3OntuOiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2lu'@;
put 'U1hUSEl0ZW1zIn0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVuZFNYVEhJdGVtIn0sMzMyOntuOiJCcnRCZWdpbk1ldGFkYXRhIn0sMzMzOntuOiJCcnRFbmRNZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGlu'@;
put 'Zm8ifSwzMzU6e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMzODp7bjoiQnJ0RW5kRXNtZGIifSwzMzk6e246IkJydEJlZ2luRXNmbWQifSwzNDA6e246IkJydEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmds'@;
put 'ZUNlbGxzIn0sMzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0In0sMzQ1OntuOiJCcnRCZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJCcnRFbmRMaXN0Q29scyJ9LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4Ontu'@;
put 'OiJCcnRFbmRMaXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6e246IkJydExpc3RDQ0ZtbGEifSwzNTI6e246IkJydExpc3RUckZtbGEifSwzNTM6e246IkJydEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRF'@;
put 'eHRlcm5hbHMifSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6VDF9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2FtZSJ9LDM1OTp7bjoiQnJ0U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVnaW5TdXBCb29rIn0sMzYxOntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246'@;
put 'IkJydEV4dGVyblNoZWV0IixmOlNtfSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5kIn0sMzY2OntuOiJCcnRFeHRlcm5Sb3dIZHIifSwzNjc6e246IkJydEV4dGVybkNlbGxCbGFuayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwz'@;
put 'Njk6e246IkJydEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxTdHJpbmcifSwzNzI6e246IkJydEJlZ2luRXNtZHgifSwzNzM6e246IkJydEVuZEVzbWR4In0sMzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoi'@;
put 'QnJ0RW5kTWR4U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246IkJydEJlZ2luTWR4S1BJIn0sMzc5OntuOiJCcnRFbmRNZHhLUEkifSwzODA6e246IkJydEJlZ2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0s'@;
put 'MzgyOntuOiJCcnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEcyJ9LDM4NTp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2Fj'@;
put 'aGVJRCJ9LDM4ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZvcyJ9LDM5MTp7bjoiQnJ0RW5kQ29sSW5mb3MifSwzOTI6e246IkJydEJlZ2luUndCcmsifSwzOTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRC'@;
put 'ZWdpbkNvbEJyayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9LDM5ODp7bjoiQnJ0SW5mbyJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQwMDp7bjoiQnJ0VXNyIn0sNDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJC'@;
put 'cnRFT0YifSw0MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3OntuOiJCcnRSUk1vdmUifSw0MDg6e246IkJydFJSRW5kTW92ZSJ9LDQwOTp7bjoiQnJ0UlJDaGdDZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0'@;
put 'MTE6e246IkJydFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJCcnRSUkluc2VydFNoIn0sNDE1OntuOiJCcnRSUkRlZk5hbWUifSw0MTY6e246IkJydFJSTm90ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7'@;
put 'bjoiQnJ0UlJUUVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1dG9GbXQifSw0MjI6e246IkJydEJlZ2luVXNlclNoVmlld3MifSw0MjM6e246IkJydEJlZ2luVXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNo'@;
put 'VmlldyJ9LDQyNTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gaDUoeSxQLEwpe3ZhciBRPXkubCtQLHJlPVRkKHkpLGdlPXkucmVhZF9zaGlmdCgxKSxfZT1bcmVdO2lmKF9lWzJdPWdlLEwuY2VsbEZvcm11bGEpe3ZhciB2ZT1yUyh5LFEt'@;
put 'eS5sLEwpO19lWzFdPXZlfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sNDI3OntuOiJCcnRTaHJGbWxhIixmOmZ1bmN0aW9uIGhMKHksUCxMKXt2YXIgUT15LmwrUCxnZT1bSmMoeSwxNildO2lmKEwuY2VsbEZvcm11bGEpe3ZhciBfZT1FSSh5LFEteS5sLEwpO2dlWzFdPV9lLHkubD1RfWVsc2Ug'@;
put 'eS5sPVE7cmV0dXJuIGdlfX0sNDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntu'@;
put 'OiJCcnRCZWdpblBDRENhbGNNZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6e246IkJydEVuZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0'@;
put 'Mzk6e246IkJydEJlZ2luUENESEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3JvdXAifSw0NDI6e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQ'@;
put 'Q0RIR0xHTWVtYmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3OntuOiJCcnRCZWdpblFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0'@;
put 'NTE6e246IkJydEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5hbWUifSw0NTQ6e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1'@;
put 'Nzp7bjoiQnJ0QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJydEVuZEF1dG9Tb3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRp'@;
put 'b25hbEZvcm1hdHRpbmcifSw0NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNvblNldCJ9LDQ2Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0s'@;
put 'NDY5OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJydEV4dGVyblZhbHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3'@;
put 'NTp7bjoiQnJ0SW5kZXhlZENvbG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uIGZMKHkpe3ZhciBQPXt9O3JldHVybiBxUy5mb3JFYWNoKGZ1bmN0aW9uKEwpe1BbTF09bWEoeSl9KSxQfX0sNDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9'@;
put 'LDQ3OTp7bjoiQnJ0QmVnaW5IZWFkZXJGb290ZXIifSw0ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdCJ9LDQ4Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQifSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRT'@;
put 'WENydEZvcm1hdHMifSw0ODU6e246IkJydFdzRm10SW5mbyIsZjpmdW5jdGlvbiBYSSh5KXt2YXIgUD17fSxMPXt9LFE9e30scmU9eS5yZWFkX3NoaWZ0KDQpLGdlPXkucmVhZF9zaGlmdCgyKTtRLndjaD1yZTw9NjU1MzY/cmUvMjU2OmdlO3ZhciBfZT15LnJlYWRfc2hpZnQoMik7TC5ocHQ9'@;
put 'X2UvMjA7dmFyIHZlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gMiZ2ZSYmKEwuaGlkZGVuPSEwKSw0JnZlJiYoUC50b3B0aGljaz0hMCksOCZ2ZSYmKFAuYm90dGhpY2s9ITApLFAucm93b3V0bGluZT15LnJlYWRfc2hpZnQoMSksUC5jb2xvdXRsaW5lPXkucmVhZF9zaGlmdCgxKSxJMyhMKSxQ'@;
put 'LnJvdz1MLHB1KFEpLFAuY29sPVEsUH19LDQ4Njp7bjoiQnJ0QmVnaW5NZ3MifSw0ODc6e246IkJydEVuZE1HcyJ9LDQ4ODp7bjoiQnJ0QmVnaW5NR01hcHMifSw0ODk6e246IkJydEVuZE1HTWFwcyJ9LDQ5MDp7bjoiQnJ0QmVnaW5NRyJ9LDQ5MTp7bjoiQnJ0RW5kTUcifSw0OTI6e246IkJy'@;
put 'dEJlZ2luTWFwIn0sNDkzOntuOiJCcnRFbmRNYXAifSw0OTQ6e246IkJydEhMaW5rIixmOmZ1bmN0aW9uIGQ1KHksUCl7dmFyIEw9eS5sK1AsUT1KYyh5LDE2KSxyZT1BdSh5KSxnZT1DYyh5KSxfZT1DYyh5KSx2ZT1DYyh5KTt5Lmw9TDt2YXIgU2U9e3JmeDpRLHJlbElkOnJlLGxvYzpnZSxk'@;
put 'aXNwbGF5OnZlfTtyZXR1cm4gX2UmJihTZS5Ub29sdGlwPV9lKSxTZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVn'@;
put 'aW5TY2VuTWFuIn0sNTAxOntuOiJCcnRFbmRTY2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJC'@;
put 'cnRCZWdpblRhYmxlU3R5bGVzIn0sNTA5OntuOiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9'@;
put 'LDUxNDp7bjoiQnJ0QmVnaW5Wb2xEZXBzIn0sNTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVn'@;
put 'aW5Wb2xUb3BpYyJ9LDUyMTp7bjoiQnJ0RW5kVm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1'@;
put 'Mjg6e246IkJydEJlZ2luQ2FsY0NoYWluJCJ9LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6'@;
put 'e246IkJydEJvb2tQcm90ZWN0aW9uIn0sNTM1OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7'@;
put 'bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOlQxfSw1NTE6'@;
put 'e246IkJydExlZ2FjeURyYXdpbmcifSw1NTI6e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3Ontu'@;
put 'OiJCcnRFbmRXZWJQdWJJdGVtIn0sNTU4OntuOiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xv'@;
put 'ciJ9LDU2NTp7bjoiQnJ0QmVnaW5JbmRleGVkQ29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9'@;
put 'LDU3NDp7bjoiQnJ0RW5kRFZhbHMifSw1Nzc6e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoi'@;
put 'QnJ0U3VwTmFtZVN0In0sNTgzOntuOiJCcnRTdXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5'@;
put 'OntuOiJCcnRDZWxsU21hcnRUYWdQcm9wZXJ0eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRC'@;
put 'ZWdpblNtYXJ0VGFncyJ9LDU5NTp7bjoiQnJ0RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246'@;
put 'IkJydEVuZFNYRmlsdGVycyJ9LDYwMTp7bjoiQnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxs'@;
put 'V2F0Y2hlcyJ9LDYwNzp7bjoiQnJ0Q2VsbFdhdGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJl'@;
put 'Z2luQm9yZGVycyJ9LDYxNDp7bjoiQnJ0RW5kQm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJC'@;
put 'cnRFbmRTdHlsZXMifSw2MjU6e246IkJydEJpZ05hbWUifSw2MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNv'@;
put 'bW1lbnRBdXRob3JzIn0sNjMxOntuOiJCcnRFbmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjpYRH0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1'@;
put 'bmN0aW9uIEJDKHkpe3ZhciBQPXt9O1AuaWF1dGhvcj15LnJlYWRfc2hpZnQoNCk7dmFyIEw9SmMoeSwxNik7cmV0dXJuIFAucmZ4PUwucyxQLnJlZj1kaShMLnMpLHkubCs9MTYsUH19LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6WDd9LDYzODp7'@;
put 'bjoiQnJ0QmVnaW5PbGVPYmplY3RzIn0sNjM5OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246'@;
put 'IkJydEFjdGl2ZVgifSw2NDU6e246IkJydEVuZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdu'@;
put 'b3JlRUNzIn0sNjUxOntuOiJCcnRDc1Byb3AiLGY6ZnVuY3Rpb24gZXAoeSxQKXtyZXR1cm4geS5sKz0xMCx7bmFtZTpDYyh5KX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7'@;
put 'bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3In0sNjU2OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0'@;
put 'cyJ9LDY2MTp7bjoiQnJ0TGlzdFBhcnQifSw2NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBB'@;
put 'ZGRpbiJ9LDY2ODp7bjoiQnJ0U1hURE1QT3JkZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7'@;
put 'bjoiQnJ0UlJTb3J0SXRlbSJ9LDY3Njp7bjoiQnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9u'@;
put 'SXNvIn0sNjgxOntuOiJCcnREVmFsTGlzdCJ9LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVh'@;
put 'ZGVyIn0sMTAyOTp7bjoiQnJ0RW5kU1hUdXBsZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxl'@;
put 'U2V0Um93In0sMTAzNDp7bjoiQnJ0RW5kU1hUdXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENE'@;
put 'Q2FsY01lbTE0In0sMTA0MDp7bjoiQnJ0U1hUSDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZv'@;
put 'RXgxNCJ9LDEwNDY6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9'@;
put 'LDEwNTE6e246IkJydEJlZ2luRGF0YWJhcjE0In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gYkwoeSxQLEwpe3ZhciBRPWZ1bmN0aW9uIEd0KHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9e307cmV0dXJuIDEmUSYm'@;
put 'KHJlLnJlZnM9ZnVuY3Rpb24gVW4oeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdO1AtLSA+MDspTC5wdXNoKERyKHkpKTtyZXR1cm4gTH0oeSkpLDImUSYmKHJlLnNxcmVmcz1mdW5jdGlvbiB5byh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W107UC0tID4wOylMLnB1'@;
put 'c2goZXMoeSkpO3JldHVybiBMfSh5KSksNCZRJiYocmUuZm9ybXVsYXM9ZnVuY3Rpb24genMoeSxQLEwpe2Zvcih2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9W107US0tID4wOylyZS5wdXNoKHNjKHksMCxMKSk7cmV0dXJuIHJlfSh5LDAsTCkpLDgmUSYmKHJlLnJlbElEPWZ1bmN0aW9uIGlt'@;
put 'KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PVA/IiI6eS5yZWFkX3NoaWZ0KFAsInV0ZjE2bGUiKX0oeSkpLHJlfSh5LDAsTCkscmU9eS5yZWFkX3NoaWZ0KDQpLGdlPUF1KHkpLF9lPUF1KHkpLHZlPUF1KHkpLFNlPUF1KHkpLEhlPShRLmZvcm11bGFzfHxbXSlbMF0sQmU9'@;
put 'KFEuZm9ybXVsYXN8fFtdKVsxXSxHZT0xNSZyZSxudD17dDplb1tHZV0sc3FyZng6US5zcXJlZnNbMF0sczpbZ2UsX2UsdmUsU2VdfTtyZXR1cm4gSGUmJihudC5mMT1IZSksQmUmJihudC5mMj1CZSksMD09R2V8fDM9PUdlfHw3PT1HZXx8KG50Lm9wPUJ2W3JlPj4yMCYxNV0pLG50fX0sMTA1'@;
put 'NDp7bjoiQnJ0QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwxMDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdy'@;
put 'b3VwcyJ9LDEwNjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3'@;
put 'OntuOiJCcnRFbmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEcyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJD'@;
put 'YWNoZUlEIn0sMTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9'@;
put 'LDEwNzk6e246IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1'@;
put 'OntuOiJCcnRTbGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5k'@;
put 'U2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2Fj'@;
put 'aGVTaVJhbmdlcyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5'@;
put 'ODp7bjoiQnJ0U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNo'@;
put 'ZU5hdGl2ZUl0ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVDMTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRC'@;
put 'ZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTExNjp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVn'@;
put 'aW5TWEVkaXQifSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5n'@;
put 'ZXMifSwxMTI1OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRC'@;
put 'ZWdpblN0eWxlU2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRp'@;
put 'b25hbEZvcm1hdHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVuZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoi'@;
put 'QnJ0RW5kUENEQ2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHlsZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRT'@;
put 'bGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQi'@;
put 'fSwxMTUyOntuOiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25TZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2Fs'@;
put 'ZTE0In0sMTE1ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRCZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZp'@;
put 'bHRlcnMxNCJ9LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0'@;
put 'QmVnaW5DZWxsSWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdp'@;
put 'bkN1c3RvbUZpbHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoi'@;
put 'QnJ0RW5kRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0'@;
put 'OntuOiJCcnRTbGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJlZ2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9'@;
put 'LDIwNjc6e246IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJ'@;
put 'U2V0dGluZ3MifSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRF'@;
put 'bmRUYWJsZVNsaWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRFbmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZv'@;
put 'dENhY2hlSUQifSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdp'@;
put 'blRpbWVsaW5lc0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVn'@;
put 'aW5UaW1lbGluZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1'@;
put 'In0sMjA5ODp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYx'@;
put 'NSJ9LDIxMDM6e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMi'@;
put 'fSwyMTA4OntuOiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFG'@;
put 'ZWVkUHIxNSJ9LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxl'@;
put 'czE1In0sMjEyMDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1vZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRh'@;
put 'YmxlIn0sMjEyNjp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6'@;
put 'MTUifSwyMTMxOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJ'@;
put 'ZFZlcnNpb24ifSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRp'@;
put 'bWVHcm91cGluZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3Ontu'@;
put 'OiJCcnRDYWxjRmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sYjU9UGUobWYsIm4iKTtiNS5CcnRGUlRBcmNoSUQkPTE2O3ZhciBYMD17Njp7bjoiRm9ybXVsYSIsZjp6M30sMTA6e246IkVPRiIsZjpQZH0sMTI6e246IkNhbGNDb3VudCIsZjpobH0sMTM6e246IkNhbGNNb2RlIixmOmhsfSwxNDp7'@;
put 'bjoiQ2FsY1ByZWNpc2lvbiIsZjpTb30sMTU6e246IkNhbGNSZWZNb2RlIixmOlNvfSwxNjp7bjoiQ2FsY0RlbHRhIixmOm1hfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6U299LDE4OntuOiJQcm90ZWN0IixmOlNvfSwxOTp7bjoiUGFzc3dvcmQiLGY6aGx9LDIwOntuOiJIZWFkZXIiLGY6VjF9LDIx'@;
put 'OntuOiJGb290ZXIiLGY6VjF9LDIzOntuOiJFeHRlcm5TaGVldCIsZjpTbX0sMjQ6e246IkxibCIsZjpWd30sMjU6e246IldpblByb3RlY3QiLGY6U299LDI2OntuOiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5j'@;
put 'dGlvbiBVdyh5LFAsTCl7cmV0dXJuIGZ1bmN0aW9uIFM5KHksUCxMKXtpZighKEwuYmlmZjw4KSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpLHJlPXkucmVhZF9zaGlmdCgyKSxnZT15LnJlYWRfc2hpZnQoMiksX2U9eS5yZWFkX3NoaWZ0KDIpLHZlPVYyKHksMCxMKTtyZXR1cm4gTC5iaWZmPDgm'@;
put 'JnkucmVhZF9zaGlmdCgxKSxbe3I6USxjOnJlfSx2ZSxfZSxnZV19fSh5LDAsTCl9fSwyOTp7bjoiU2VsZWN0aW9uIixmOmZ1bmN0aW9uIFMzKHksUCxMKXtyZXR1cm4gTCYmTC5iaWZmPDU/KHkubCs9UCx7Y2VsbDp7cjowLGM6MH19KTooeS5yZWFkX3NoaWZ0KDEpLHtjZWxsOmRpKHtyOnku'@;
put 'cmVhZF9zaGlmdCgyKSxjOnkucmVhZF9zaGlmdCgyKX0pfSl9fSwzNDp7bjoiRGF0ZTE5MDQiLGY6U299LDM1OntuOiJFeHRlcm5OYW1lIixmOnk5fSwzODp7bjoiTGVmdE1hcmdpbiIsZjptYX0sMzk6e246IlJpZ2h0TWFyZ2luIixmOm1hfSw0MDp7bjoiVG9wTWFyZ2luIixmOm1hfSw0MTp7'@;
put 'bjoiQm90dG9tTWFyZ2luIixmOm1hfSw0Mjp7bjoiUHJpbnRSb3dDb2wiLGY6U299LDQzOntuOiJQcmludEdyaWQiLGY6U299LDQ3OntuOiJGaWxlUGFzcyIsZjpmdW5jdGlvbiBWbCh5LFAsTCl7aWYoTC5lbmMpcmV0dXJuIEwuZW5jO3ZhciBRPXtUeXBlOkwuYmlmZj49OD95LnJlYWRfc2hp'@;
put 'ZnQoMik6MH07cmV0dXJuIFEuVHlwZT9mdW5jdGlvbiBnRCh5LFAsTCxRKXt2YXIgcmU9UXx8e307aWYocmUuSW5mbz15LnJlYWRfc2hpZnQoMikseS5sLT0yLDE9PT1yZS5JbmZvKXtpZihyZS5EYXRhPWZ1bmN0aW9uIF9aKHkpe3ZhciBQPXt9LEw9UC5FbmNyeXB0aW9uVmVyc2lvbkluZm89'@;
put 'RzAoeSw0KTtpZigxIT1MLk1ham9yfHwxIT1MLk1pbm9yKXRocm93InVucmVjb2duaXplZCB2ZXJzaW9uIGNvZGUgIitMLk1ham9yKyIgOiAiK0wuTWlub3I7cmV0dXJuIFAuU2FsdD15LnJlYWRfc2hpZnQoMTYpLFAuRW5jcnlwdGVkVmVyaWZpZXI9eS5yZWFkX3NoaWZ0KDE2KSxQLkVuY3J5'@;
put 'cHRlZFZlcmlmaWVySGFzaD15LnJlYWRfc2hpZnQoMTYpLFB9KHkpLEwucGFzc3dvcmQmJnR5cGVvZiBPNjwidSIpe3ZhciBnZT1PNihMLnBhc3N3b3JkLHJlLkRhdGEuU2FsdCwiMDAwMDAwMDAiKSxfZT11ZShyZS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVyK3JlLkRhdGEuRW5jcnlwdGVkVmVy'@;
put 'aWZpZXJIYXNoLCJoZXgiKSx2ZT14ZC5yYzQodWUoZ2UsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSxfZSk7US52YWxpZD14ZC5tZDUodmUuc2xpY2UoMCwxNikpPT1CdWZmZXIuZnJvbSh2ZS5zbGljZSgxNikpLnRvU3RyaW5nKCJoZXgiKSxyZS5EYXRhLktleT1nZSxRLmluc2l0dT1mdW5j'@;
put 'dGlvbiBvcih5LFApe3ZhciBMPW5ldyBBcnJheSgyNTYpLFE9MCxyZT0wLGdlPTAsX2U9MDtmdW5jdGlvbiB2ZShudCl7Zm9yKFE9MCxyZT0wLGdlPTAsX2U9MCxyZT0wOzI1NiE9cmU7KytyZSlMW3JlXT1yZTtmb3IoZ2U9MCxyZT0wOzI1NiE9cmU7KytyZSl7dHJ5e2dlPWdlK0xbcmVdK250'@;
put 'W3JlJW50Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2goZHQpe3Rocm93IGNvbnNvbGUubG9nKHJlLG50W3JlJW50Lmxlbmd0aF0pLGR0fV9lPUxbcmVdLExbcmVdPUxbZ2VdLExbZ2VdPV9lfXJlPWdlPTB9ZnVuY3Rpb24gU2UobnQpe3ZhciBkdD1HKG50Lmxlbmd0aCk7Zm9yKFE9'@;
put 'MDtRIT1udC5sZW5ndGg7KytRKV9lPUxbcmU9cmUrMSYyNTVdLExbcmVdPUxbZ2U9KGdlK0xbcmVdKSUyNTZdLExbZ2VdPV9lLGR0W1FdPW50W1FdXkxbTFtyZV0rTFtnZV0mMjU1XTtyZXR1cm4gQnVmZmVyLmZyb20oZHQpfXZhciBIZT15LktleSxCZT0wO3ZlKHVlKEhlLCJoZXgiKS50b1N0'@;
put 'cmluZygiYmluYXJ5IikpO3ZhciBHZT0wO3JldHVybiBmdW5jdGlvbihudCl7aWYoR2UrbnQubGVuZ3RoPDEwMjQpcmV0dXJuIEdlKz1udC5sZW5ndGgsU2UobnQpO3ZhciBjdD0wLGJ0PXVlKG50LnNsaWNlKGN0LGN0KyhDdD0xMDI0LUdlKSkpO2N0Kz1DdCxHZT0wO3ZhciBGdD1TZShidCk7'@;
put 'Zm9yKGN0PT1udC5sZW5ndGgmJigrK0JlLEhlPU82KFAseS5TYWx0LFI2KEJlKSksdmUodWUoSGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2N0PG50Lmxlbmd0aDspeysrQmUsSGU9TzYoUCx5LlNhbHQsUjYoQmUpKSx2ZShCdWZmZXIuZnJvbShIZSwiaGV4IikudG9TdHJpbmcoImJp'@;
put 'bmFyeSIpKTt2YXIgQ3Q9TWF0aC5taW4oMTAyNCxudC5sZW5ndGgtY3QpO2J0PXVlKG50LnNsaWNlKGN0LGN0K0N0KSksY3QrPUN0LEdlPUN0LEZ0PUJ1ZmZlci5jb25jYXQoW0Z0LFNlKGJ0KV0pfXJldHVybiBGdH19KHJlLkRhdGEsTC5wYXNzd29yZCl9fWVsc2UgaWYocmUuRGF0YT1mdW5j'@;
put 'dGlvbiB2Wih5LFApe3ZhciBMPXt9LFE9TC5FbmNyeXB0aW9uVmVyc2lvbkluZm89RzAoeSw0KTtpZihQLT00LDIhPVEuTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK1EuTWlub3IpO2lmKFEuTWFqb3I+NHx8US5NYWpvcjwyKXRocm93'@;
put 'IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitRLk1ham9yKTtMLkZsYWdzPXkucmVhZF9zaGlmdCg0KSxQLT00O3ZhciByZT15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIFAtPTQsTC5FbmNyeXB0aW9uSGVhZGVyPUk5KHkscmUpLEwuRW5jcnlwdGlvblZlcmlm'@;
put 'aWVyPVJtKHksUC09cmUpLEx9KHksUCkscmUuRGF0YSYmcmUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyJiYyNjYyNT09PXJlLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5BbGdJRCYmTC5wYXNzd29yZCYmdHlwZW9mIGdyPCJ1Iil7dmFyIFNlPWdyKEwucGFzc3dvcmQscmUuRGF0YS5FbmNyeXB0aW9u'@;
put 'VmVyaWZpZXIuU2FsdC50b1N0cmluZygiaGV4IiksIjAwMDAwMDAwIiksSGU9cmUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zOzU9PUhlfHxIZTxTZS5sZW5ndGgmJihTZT1TZS5zbGljZSgwLEhlKSk7dmFyIEJlPXVlKHJlLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlm'@;
put 'aWVyLnRvU3RyaW5nKCJoZXgiKStyZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5WZXJpZmllckhhc2gudG9TdHJpbmcoImhleCIpLCJoZXgiKSxHZT14ZC5yYzQoU2UudG9TdHJpbmcoImJpbmFyeSIpLEJlKTtRLnZhbGlkPWVsKEdlLnNsaWNlKDAsSGUpLCJTSEExIikudG9TdHJpbmcoImhl'@;
put 'eCIpPT1HZS5zbGljZShIZSkudG9TdHJpbmcoImhleCIpLHJlLkRhdGEuS2V5PVNlLFEudmFsaWQmJihRLmluc2l0dT1mdW5jdGlvbiB6Yyh5LFApe3ZhciBMPW5ldyBBcnJheSgyNTYpLFE9MCxyZT0wLGdlPTAsX2U9MCx2ZT15LkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rp'@;
put 'b24gU2UoZHQpe2ZvcihkdD1CdWZmZXIuZnJvbShkdC5zbGljZSgwLHZlKSksUT0wLHJlPTAsZ2U9MCxfZT0wLHJlPTA7MjU2IT1yZTsrK3JlKUxbcmVdPXJlO2ZvcihnZT0wLHJlPTA7MjU2IT1yZTsrK3JlKXt2YXIgQ3Q9ZHRbcmUlZHQubGVuZ3RoXTtnZT1nZStMW3JlXSsoInN0cmluZyI9'@;
put 'PXR5cGVvZiBDdD9DdC5jaGFyQ29kZUF0KDApOkN0KSYyNTUsX2U9TFtyZV0sTFtyZV09TFtnZV0sTFtnZV09X2V9cmU9Z2U9MH1mdW5jdGlvbiBIZShkdCl7dmFyIEN0PUcoZHQubGVuZ3RoKTtmb3IoUT0wO1EhPWR0Lmxlbmd0aDsrK1EpX2U9TFtyZT1yZSsxJjI1NV0sTFtyZV09TFtnZT0o'@;
put 'Z2UrTFtyZV0pJTI1Nl0sTFtnZV09X2UsQ3RbUV09ZHRbUV1eTFtMW3JlXStMW2dlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShDdCl9dmFyIEJlPXkuS2V5LEdlPTA7U2UodWUoQmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIG50PTA7cmV0dXJuIGZ1bmN0aW9uKGR0KXtpZihu'@;
put 'dCtkdC5sZW5ndGg8MTAyNClyZXR1cm4gbnQrPWR0Lmxlbmd0aCxIZShkdCk7dmFyIGN0PTEwMjQtbnQsYnQ9MCxGdD1CdWZmZXIuZnJvbShkdC5zbGljZShidCxidCtjdCkpO2J0Kz1jdCxudD0wO3ZhciBrdD1IZShGdCk7Zm9yKGJ0PT1kdC5sZW5ndGgmJigrK0dlLEJlPWdyKFAseS5FbmNy'@;
put 'eXB0aW9uVmVyaWZpZXIuU2FsdCxSNihHZSkpLFNlKEJ1ZmZlci5mcm9tKEJlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtidDxkdC5sZW5ndGg7KSsrR2UsQmU9Z3IoUCx5LkVuY3J5cHRpb25WZXJpZmllci5TYWx0LFI2KEdlKSksU2UoQnVmZmVyLmZyb20oQmUsImhleCIpLnRvU3Ry'@;
put 'aW5nKCJiaW5hcnkiKSksY3Q9TWF0aC5taW4oMTAyNCxkdC5sZW5ndGgtYnQpLEZ0PUJ1ZmZlci5mcm9tKGR0LnNsaWNlKGJ0LGJ0K2N0KSksYnQrPWN0LGN0PDEwMjQmJihudD1jdCksa3Q9QnVmZmVyLmNvbmNhdChba3QsSGUoRnQpXSk7cmV0dXJuIGt0fX0ocmUuRGF0YSxMLnBhc3N3b3Jk'@;
put 'KSl9cmV0dXJuIHJlfSh5LFAtMixMLFEpOmZ1bmN0aW9uIHBEKHksUCxMLFEpe3ZhciByZT17a2V5OmhsKHkpLHZlcmlmaWNhdGlvbkJ5dGVzOmhsKHkpfTtMLnBhc3N3b3JkJiYocmUudmVyaWZpZXI9YUMoTC5wYXNzd29yZCkpLFEudmFsaWQ9cmUudmVyaWZpY2F0aW9uQnl0ZXM9PT1yZS52'@;
put 'ZXJpZmllcixRLnZhbGlkJiYoUS5pbnNpdHU9ZnVuY3Rpb24oeSxQKXt2YXIgTD1QfHwwLFE9ZkQoeSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXt2YXIgZ2U9ZnVuY3Rpb24oeSxQLEwsUSxyZSl7dmFyIGdlLF9lO2ZvcihyZXx8KHJlPVApLFF8fChRPWZEKCIiKSksZ2U9MDtnZSE9UC5sZW5ndGg7'@;
put 'KytnZSlfZT0yNTUmKChfZT1QW2dlXSk+PjV8X2U8PDMpLHJlW2dlXT1fZV49UVtMXSxMPUwrMSYxNTtyZXR1cm5bcmUsTCxRXX0oMCxyZSxMLFEpO3JldHVybiBMPWdlWzFdLGdlWzBdfX0oTC5wYXNzd29yZCwwKSl9KHksMCxMLFEpLFF9fSw0OTp7bjoiRm9udCIsZjpmdW5jdGlvbiBQdyh5'@;
put 'LFAsTCl7dmFyIFE9e3N6OnkucmVhZF9zaGlmdCgyKS8yMH0scmU9ZjQoeSk7cmUuZkJvbGQmJihRLmJvbGQ9MSkscmUuZkl0YWxpYyYmKFEuaXRhbGljPTEpLHJlLmZVbmRlcmxpbmUmJihRLnVuZGVybGluZT0xKSxyZS5mQ29uZGVuc2UmJihRLmNvbmRlbnNlPTEpLHJlLmZFeHRlbmQmJihR'@;
put 'LmV4dGVuZD0xKSxyZS5mU2hhZG93JiYoUS5zaGFkb3c9MSkscmUuZk91dGxpbmUmJihRLm91dGxpbmU9MSkscmUuZlN0cmlrZW91dCYmKFEuc3RyaWtlPTEpO3ZhciBnZT1MJiZMLmJpZmZ8fDg7aWYoMiE9Z2UmJihRLmljdj15LnJlYWRfc2hpZnQoMiksMyE9Z2UmJjQhPWdlKSl7c3dpdGNo'@;
put 'KDcwMD09PXkucmVhZF9zaGlmdCgyKSYmKFEuYm9sZD0xKSx5LnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpRLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpRLnZhbGlnbj0ic3ViIn12YXIgdmU9eS5yZWFkX3NoaWZ0KDEpOzAhPXZlJiYoUS51bmRlcmxpbmU9dmUpO3ZhciBTZT15LnJlYWRf'@;
put 'c2hpZnQoMSk7U2U+MCYmKFEuZmFtaWx5PVNlKTt2YXIgSGU9eS5yZWFkX3NoaWZ0KDEpO0hlPjAmJihRLmNoYXJzZXQ9SGUpLHkubCs9MX1yZXR1cm4gUS5uYW1lPUZkKHksMCxMKSxRfX0sNTE6e246IlByaW50U2l6ZSIsZjpobH0sNjA6e246IkNvbnRpbnVlIn0sNjE6e246IldpbmRvdzEi'@;
put 'LGY6ZnVuY3Rpb24gUG8oeSl7cmV0dXJue1BvczpbeS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdCgyKV0sRGltOlt5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDIpXSxGbGFnczp5LnJlYWRfc2hpZnQoMiksQ3VyVGFiOnkucmVhZF9zaGlmdCgyKSxGaXJzdFRhYjp5LnJlYWRfc2hp'@;
put 'ZnQoMiksU2VsZWN0ZWQ6eS5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOnkucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOlNvfSw2NTp7bjoiUGFuZSIsZjpmdW5jdGlvbiBqVCh5LFAsTCl7aWYoTCYmTC5iaWZmPDUpcmV0dXJue307dmFyIFE9e307cmV0dXJuIFEueD15LnJlYWRf'@;
put 'c2hpZnQoMiksUS55PXkucmVhZF9zaGlmdCgyKSxRLnJ3VG9wPXkucmVhZF9zaGlmdCgyKSxRLmNvbExlZnQ9eS5yZWFkX3NoaWZ0KDIpLFEucG5uQWNjdD15LnJlYWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0KDEpLFF9fSw2Njp7bjoiQ29kZVBhZ2UiLGY6aGx9LDc3OntuOiJQbHMiLGY6eWN9'@;
put 'LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6aGx9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0sOTE6e246IkZpbGVTaGFyaW5nIn0sOTI6e246IldyaXRlQWNjZXNzIixmOmZ1bmN0aW9uIHltKHksUCxMKXtp'@;
put 'ZihMLmVuYylyZXR1cm4geS5sKz1QLCIiO3ZhciBRPXkubCxyZT1WMih5LDAsTCk7cmV0dXJuIHkucmVhZF9zaGlmdChQK1EteS5sKSxyZX19LDkzOntuOiJPYmoiLGY6ZnVuY3Rpb24gV3coeSxQLEwpe2lmKEwmJkwuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBYVCh5LFAsTCl7eS5sKz00O3Zh'@;
put 'ciBRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMiksZ2U9eS5yZWFkX3NoaWZ0KDIpO3kubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Njt2YXIgX2U9W107cmV0dXJuIF9lLnB1c2goKE1tW1FdfHx5Yyko'@;
put 'eSxQLT0zNixMKSkse2NtbzpbcmUsUSxnZV0sZnQ6X2V9fSh5LFAsTCk7dmFyIFE9VDQoeSkscmU9ZnVuY3Rpb24gWjAoeSxQLEwpe2Zvcih2YXIgUT15LmwrUCxyZT1bXTt5Lmw8UTspe3ZhciBnZT15LnJlYWRfc2hpZnQoMik7eS5sLT0yO3RyeXtyZVtnZV09Ym1bZ2VdKHksUS15LmwpfWNh'@;
put 'dGNoe3JldHVybiB5Lmw9USxyZX19cmV0dXJuIHkubCE9USYmKHkubD1RKSxyZX0oeSxQLTIyKTtyZXR1cm57Y21vOlEsZnQ6cmV9fX0sOTQ6e246IlVuY2FsY2VkIn0sOTU6e246IkNhbGNTYXZlUmVjYWxjIixmOlNvfSw5Njp7bjoiVGVtcGxhdGUifSw5Nzp7bjoiSW50bCJ9LDk5OntuOiJP'@;
put 'YmpQcm90ZWN0IixmOlNvfSwxMjU6e246IkNvbEluZm8iLGY6VmR9LDEyODp7bjoiR3V0cyIsZjpmdW5jdGlvbiBjWih5KXt5LmwrPTQ7dmFyIFA9W3kucmVhZF9zaGlmdCgyKSx5LnJlYWRfc2hpZnQoMildO2lmKDAhPT1QWzBdJiZQWzBdLS0sMCE9PVBbMV0mJlBbMV0tLSxQWzBdPjd8fFBb'@;
put 'MV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK1Auam9pbigifCIpKTtyZXR1cm4gUH19LDEyOTp7bjoiV3NCb29sIixmOmZ1bmN0aW9uIF9hKHksUCxMKXt2YXIgUT1MJiY4PT1MLmJpZmZ8fDI9PVA/eS5yZWFkX3NoaWZ0KDIpOih5LmwrPVAsMCk7cmV0dXJue2ZEaWFsb2c6'@;
put 'MTYmUSxmQmVsb3c6NjQmUSxmUmlnaHQ6MTI4JlF9fX0sMTMwOntuOiJHcmlkU2V0IixmOmhsfSwxMzE6e246IkhDZW50ZXIiLGY6U299LDEzMjp7bjoiVkNlbnRlciIsZjpTb30sMTMzOntuOiJCb3VuZFNoZWV0OCIsZjpmdW5jdGlvbiBJNCh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDQp'@;
put 'LHJlPTMmeS5yZWFkX3NoaWZ0KDEpLGdlPXkucmVhZF9zaGlmdCgxKTtzd2l0Y2goZ2Upe2Nhc2UgMDpnZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6Z2U9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpnZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OmdlPSJWQkFNb2R1bGUifXZhciBf'@;
put 'ZT1GZCh5LDAsTCk7cmV0dXJuIDA9PT1fZS5sZW5ndGgmJihfZT0iU2hlZXQxIikse3BvczpRLGhzOnJlLGR0OmdlLG5hbWU6X2V9fX0sMTM0OntuOiJXcml0ZVByb3RlY3QifSwxNDA6e246IkNvdW50cnkiLGY6ZnVuY3Rpb24gZUQoeSl7dmFyIEwsUD1bMCwwXTtyZXR1cm4gTD15LnJlYWRf'@;
put 'c2hpZnQoMiksUFswXT1sbVtMXXx8TCxMPXkucmVhZF9zaGlmdCgyKSxQWzFdPWxtW0xdfHxMLFB9fSwxNDE6e246IkhpZGVPYmoiLGY6aGx9LDE0NDp7bjoiU29ydCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpmdW5jdGlvbiBHdyh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9W107UC0t'@;
put 'ID4wOylMLnB1c2goaDkoeSkpO3JldHVybiBMfX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5hbWUifSwxNTU6e246IkZpbHRlck1vZGUifSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGY6aGx9LDE1Nzp7bjoiQXV0'@;
put 'b0ZpbHRlckluZm8ifSwxNTg6e246IkF1dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjpLd30sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBFbSh5LFApe3ZhciBMPXt9O3JldHVybiBQPDMyfHwoeS5sKz0xNixMLmhlYWRlcj1tYSh5KSxMLmZvb3Rlcj1tYSh5KSx5LmwrPTIpLEx9fSwxNzQ6'@;
put 'e246IlNjZW5NYW4ifSwxNzU6e246IlNDRU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZkIn0sMTgxOntuOiJTWExJIn0sMTgyOntuOiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9LDE4NTp7bjoiUmVjaXBOYW1lIn0s'@;
put 'MTg5OntuOiJNdWxSayIsZjpmdW5jdGlvbiBGdyh5LFApe2Zvcih2YXIgTD15LmwrUC0yLFE9eS5yZWFkX3NoaWZ0KDIpLHJlPXkucmVhZF9zaGlmdCgyKSxnZT1bXTt5Lmw8TDspZ2UucHVzaChnOSh5KSk7aWYoeS5sIT09TCl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIHJlYWQgZXJyb3IiKTt2'@;
put 'YXIgX2U9eS5yZWFkX3NoaWZ0KDIpO2lmKGdlLmxlbmd0aCE9X2UtcmUrMSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOlEsYzpyZSxDOl9lLHJrcmVjOmdlfX19LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gTDQoeSxQKXtmb3IodmFyIEw9'@;
put 'eS5sK1AtMixRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMiksZ2U9W107eS5sPEw7KWdlLnB1c2goeS5yZWFkX3NoaWZ0KDIpKTtpZih5LmwhPT1MKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBfZT15LnJlYWRfc2hpZnQoMik7aWYoZ2UubGVu'@;
put 'Z3RoIT1fZS1yZSsxKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJue3I6USxjOnJlLEM6X2UsaXhmZTpnZX19fSwxOTM6e246Ik1tcyIsZjpQZH0sMTk3OntuOiJTWERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hE'@;
put 'QkIifSwyMDE6e246IlNYTnVtIn0sMjAyOntuOiJTeEJvb2wiLGY6U299LDIwMzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0cmluZyJ9LDIwNjp7bjoiU1hEdHIifSwyMDc6e246IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIx'@;
put 'MDp7bjoiU3hUYnBnIn0sMjExOntuOiJPYlByb2oifSwyMTM6e246IlNYU3RyZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwyMTc6e246IlN4SXN4b3BlciJ9LDIxODp7bjoiQm9va0Jvb2wiLGY6aGx9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2Vu'@;
put 'YXJpb1Byb3RlY3QiLGY6U299LDIyMjp7bjoiT2xlT2JqZWN0U2l6ZSJ9LDIyNDp7bjoiWEYiLGY6ZnVuY3Rpb24gYjkoeSxQLEwpe3ZhciBRPXt9O3JldHVybiBRLmlmbnQ9eS5yZWFkX3NoaWZ0KDIpLFEubnVtRm10SWQ9eS5yZWFkX3NoaWZ0KDIpLFEuZmxhZ3M9eS5yZWFkX3NoaWZ0KDIp'@;
put 'LFEuZlN0eWxlPVEuZmxhZ3M+PjImMSxRLmRhdGE9ZnVuY3Rpb24gTjEoeSxQLEwsUSl7dmFyIHJlPXt9LGdlPXkucmVhZF9zaGlmdCg0KSxfZT15LnJlYWRfc2hpZnQoNCksdmU9eS5yZWFkX3NoaWZ0KDQpLFNlPXkucmVhZF9zaGlmdCgyKTtpZihyZS5wYXR0ZXJuVHlwZT12aVt2ZT4+MjZd'@;
put 'LCFRLmNlbGxTdHlsZXMpcmV0dXJuIHJlO3ZhciBIZT03JmdlO3N3aXRjaChIZSl7Y2FzZSAxOnJlLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOnJlLmhhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDM6cmUuaGFsaWduPSJyaWdodCJ9c3dpdGNoKHJlLmZXcmFwPWdlPj4zJjEsSGU9Z2U+'@;
put 'PjQmNyl7Y2FzZSAwOnJlLnZhbGlnbj0idG9wIjticmVhaztjYXNlIDE6cmUudmFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMjpyZS52YWxpZ249ImJvdHRvbSJ9cmV0dXJuIHJlLmZKdXN0TGFzdD1nZT4+NyYxLHJlLnRyb3Q9Z2U+PjgmMjU1LHJlLmNJbmRlbnQ9Z2U+PjE2JjE1LHJlLmZT'@;
put 'aHJpbmtUb0ZpdD1nZT4+MjAmMSxyZS5pUmVhZE9yZGVyPWdlPj4yMiYyLHJlLmZBdHJOdW09Z2U+PjI2JjEscmUuZkF0ckZudD1nZT4+MjcmMSxyZS5mQXRyQWxjPWdlPj4yOCYxLHJlLmZBdHJCZHI9Z2U+PjI5JjEscmUuZkF0clBhdD1nZT4+MzAmMSxyZS5mQXRyUHJvdD1nZT4+MzEmMSxy'@;
put 'ZS5kZ0xlZnQ9MTUmX2UscmUuZGdSaWdodD1fZT4+NCYxNSxyZS5kZ1RvcD1fZT4+OCYxNSxyZS5kZ0JvdHRvbT1fZT4+MTImMTUscmUuaWN2TGVmdD1fZT4+MTYmMTI3LHJlLmljdlJpZ2h0PV9lPj4yMyYxMjcscmUuZ3JiaXREaWFnPV9lPj4zMCYzLHJlLmljdlRvcD0xMjcmdmUscmUuaWN2'@;
put 'Qm90dG9tPXZlPj43JjEyNyxyZS5pY3ZEaWFnPXZlPj4xNCYxMjcscmUuZGdEaWFnPXZlPj4yMSYxNSxyZS5pY3ZGb3JlPTEyNyZTZSxyZS5pY3ZCYWNrPVNlPj43JjEyNyxyZS5mc3hCdXR0b249U2U+PjE0JjEscmV9KHksMCwwLEwpLFF9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5j'@;
put 'dGlvbiBoMCh5LFApe3JldHVybiAwPT09UHx8eS5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjpQZH0sMjI3OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9uIFp3KHksUCl7Zm9yKHZhciBMPVtdLFE9eS5yZWFkX3NoaWZ0KDIpO1Et'@;
put 'LTspTC5wdXNoKEtoKHkpKTtyZXR1cm4gTH19LDIzMzp7bjoiQmtIaW0ifSwyMzU6e246Ik1zb0RyYXdpbmdHcm91cCJ9LDIzNjp7bjoiTXNvRHJhd2luZyJ9LDIzNzp7bjoiTXNvRHJhd2luZ1NlbGVjdGlvbiJ9LDIzOTp7bjoiUGhvbmV0aWNJbmZvIn0sMjQwOntuOiJTeFJ1bGUifSwyNDE6'@;
put 'e246IlNYRXgifSwyNDI6e246IlN4RmlsdCJ9LDI0NDp7bjoiU3hEWEYifSwyNDU6e246IlN4SXRtIn0sMjQ2OntuOiJTeE5hbWUifSwyNDc6e246IlN4U2VsZWN0In0sMjQ4OntuOiJTWFBhaXIifSwyNDk6e246IlN4Rm1sYSJ9LDI1MTp7bjoiU3hGb3JtYXQifSwyNTI6e246IlNTVCIsZjpm'@;
put 'dW5jdGlvbiBObCh5LFApe2Zvcih2YXIgTD15LmwrUCxRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRfc2hpZnQoNCksZ2U9W10sX2U9MDtfZSE9cmUmJnkubDxMOysrX2UpZ2UucHVzaChnbSh5KSk7cmV0dXJuIGdlLkNvdW50PVEsZ2UuVW5pcXVlPXJlLGdlfX0sMjUzOntuOiJMYWJlbFNz'@;
put 'dCIsZjpmdW5jdGlvbiBVVCh5KXt2YXIgUD1MdSh5KTtyZXR1cm4gUC5pc3N0PXkucmVhZF9zaGlmdCg0KSxQfX0sMjU1OntuOiJFeHRTU1QiLGY6ZnVuY3Rpb24ga2UoeSxQKXt2YXIgTD17fTtyZXR1cm4gTC5kc3N0PXkucmVhZF9zaGlmdCgyKSx5LmwrPVAtMixMfX0sMjU2OntuOiJTWFZE'@;
put 'RXgifSwyNTk6e246IlNYRm9ybXVsYSJ9LDI5MDp7bjoiU1hEQkV4In0sMzExOntuOiJSUkRJbnNEZWwifSwzMTI6e246IlJSREhlYWQifSwzMTU6e246IlJSRENoZ0NlbGwifSwzMTc6e246IlJSVGFiSWQiLGY6SDF9LDMxODp7bjoiUlJEUmVuU2hlZXQifSwzMTk6e246IlJSU29ydCJ9LDMy'@;
put 'MDp7bjoiUlJETW92ZSJ9LDMzMDp7bjoiUlJGb3JtYXQifSwzMzE6e246IlJSQXV0b0ZtdCJ9LDMzMzp7bjoiUlJJbnNlcnRTaCJ9LDMzNDp7bjoiUlJETW92ZUJlZ2luIn0sMzM1OntuOiJSUkRNb3ZlRW5kIn0sMzM2OntuOiJSUkRJbnNEZWxCZWdpbiJ9LDMzNzp7bjoiUlJESW5zRGVsRW5k'@;
put 'In0sMzM4OntuOiJSUkRDb25mbGljdCJ9LDMzOTp7bjoiUlJERGVmTmFtZSJ9LDM0MDp7bjoiUlJEUnN0RXR4cCJ9LDM1MTp7bjoiTFJuZyJ9LDM1Mjp7bjoiVXNlc0VMRnMiLGY6U299LDM1Mzp7bjoiRFNGIixmOlBkfSw0MDE6e246IkNVc3IifSw0MDI6e246IkNiVXNyIn0sNDAzOntuOiJV'@;
put 'c3JJbmZvIn0sNDA0OntuOiJVc3JFeGNsIn0sNDA1OntuOiJGaWxlTG9jayJ9LDQwNjp7bjoiUlJESW5mbyJ9LDQwNzp7bjoiQkNVc3JzIn0sNDA4OntuOiJVc3JDaGsifSw0MjU6e246IlVzZXJCVmlldyJ9LDQyNjp7bjoiVXNlclNWaWV3QmVnaW4ifSw0Mjc6e246IlVzZXJTVmlld0VuZCJ9'@;
put 'LDQyODp7bjoiUlJEVXNlclZpZXcifSw0Mjk6e246IlFzaSJ9LDQzMDp7bjoiU3VwQm9vayIsZjpmdW5jdGlvbiBxVCh5LFAsTCl7dmFyIFE9eS5sK1AscmU9eS5yZWFkX3NoaWZ0KDIpLGdlPXkucmVhZF9zaGlmdCgyKTtpZihMLnNiY2NoPWdlLDEwMjU9PWdlfHwxNDg0OT09Z2UpcmV0dXJu'@;
put 'W2dlLHJlXTtpZihnZTwxfHxnZT4yNTUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitnZSk7Zm9yKHZhciBfZT1IZCh5LGdlKSx2ZT1bXTtRPnkubDspdmUucHVzaChOMih5KSk7cmV0dXJuW2dlLHJlLF9lLHZlXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6U299'@;
put 'LDQzMjp7bjoiQ29uZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRWYWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246IlR4TyIsZjpmdW5jdGlvbiBKVCh5LFAsTCl7dmFyIFE9eS5sLHJlPSIiLGdlPS0xO3RyeXt5LmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoTC5s'@;
put 'YXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT95LmwrPTY6ZnVuY3Rpb24gRHUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3kubCsrO3ZhciBMPXkucmVhZF9zaGlmdCgyKTt5LmwrPTJ9KHkpO3ZhciBTZT15LnJlYWRfc2hpZnQoMik7eS5yZWFkX3NoaWZ0KDIpLGdlPXkucmVhZF9zaGlm'@;
put 'dCgyKTt2YXIgQmU9eS5yZWFkX3NoaWZ0KDIpO3kubCs9QmU7Zm9yKHZhciBHZT0xO0dlPHkubGVucy5sZW5ndGgtMTsrK0dlKXtpZih5LmwtUSE9eS5sZW5zW0dlXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBudD15W3kubF07aWYoKHJlKz1IZCh5'@;
put 'LHkubGVuc1tHZSsxXS15LmxlbnNbR2VdLTEpKS5sZW5ndGg+PShudD9TZToyKlNlKSlicmVha31pZihyZS5sZW5ndGghPT1TZSYmcmUubGVuZ3RoIT09MipTZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIrU2UrIiAhPSAiK3JlLmxlbmd0aCk7cmV0dXJuIHkubD1RK1Ase3Q6cmUsaWZu'@;
put 'dDpnZX19Y2F0Y2h7cmV0dXJuIHkubD1RK1Ase3Q6cmUsaWZudDpnZX19fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOlNvfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0aW9uIGV1KHksUCl7dmFyIEw9S2goeSk7eS5sKz0xNjt2YXIgUT1mdW5jdGlvbiBJdSh5LFApe3ZhciBMPXkubCtQLFE9eS5y'@;
put 'ZWFkX3NoaWZ0KDQpO2lmKDIhPT1RKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrUSk7dmFyIHJlPXkucmVhZF9zaGlmdCgyKTt5LmwrPTI7dmFyIGdlLF9lLHZlLFNlLEJlLEdlLEhlPSIiOzE2JnJlJiYoZ2U9QTQoeSkpLDEyOCZyZSYmKF9lPUE0KHkp'@;
put 'KSwyNTc9PSgyNTcmcmUpJiYodmU9QTQoeSkpLDE9PSgyNTcmcmUpJiYoU2U9ZnVuY3Rpb24gdjMoeSxQKXt2YXIgTD15LnJlYWRfc2hpZnQoMTYpO3N3aXRjaChMKXtjYXNlImUwYzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gbTMoeSl7dmFyIFA9eS5y'@;
put 'ZWFkX3NoaWZ0KDQpLEw9eS5sLFE9ITE7UD4yNCYmKHkubCs9UC0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09eS5yZWFkX3NoaWZ0KDE2KSYmKFE9ITApLHkubD1MKTt2YXIgcmU9eS5yZWFkX3NoaWZ0KChRP1AtMjQ6UCk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKHYs'@;
put 'IiIpO3JldHVybiBRJiYoeS5sKz0yNCkscmV9KHkpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBmbCh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9IiI7UC0tID4wOylMKz0iLi4vIjt2YXIgUT15LnJlYWRfc2hpZnQoMCwibHBz'@;
put 'dHItYW5zaSIpO2lmKHkubCs9Miw1NzAwNSE9eS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PXkucmVhZF9zaGlmdCg0KSlyZXR1cm4gTCtRLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgZ2U9eS5yZWFkX3NoaWZ0KDQpO2lmKDMhPXkucmVh'@;
put 'ZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO3JldHVybiBMK3kucmVhZF9zaGlmdChnZT4+MSwidXRmMTZsZSIpLnJlcGxhY2UodiwiIil9KHkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrTCl9fSh5KSksOCZyZSYm'@;
put 'KEhlPUE0KHkpKSwzMiZyZSYmKEJlPXkucmVhZF9zaGlmdCgxNikpLDY0JnJlJiYoR2U9U2MoeSkpLHkubD1MO3ZhciBudD1fZXx8dmV8fFNlfHwiIjtudCYmSGUmJihudCs9IiMiK0hlKSxudHx8KG50PSIjIitIZSksMiZyZSYmIi8iPT1udC5jaGFyQXQoMCkmJiIvIiE9bnQuY2hhckF0KDEp'@;
put 'JiYobnQ9ImZpbGU6Ly8iK250KTt2YXIgZHQ9e1RhcmdldDpudH07cmV0dXJuIEJlJiYoZHQuZ3VpZD1CZSksR2UmJihkdC50aW1lPUdlKSxnZSYmKGR0LlRvb2x0aXA9Z2UpLGR0fSh5LFAtMjQpO3JldHVybltMLFFdfX0sNDQxOntuOiJMZWwifSw0NDI6e246IkNvZGVOYW1lIixmOk4yfSw0'@;
put 'NDM6e246IlNYRkRCVHlwZSJ9LDQ0NDp7bjoiUHJvdDRSZXZQYXNzIixmOmhsfSw0NDU6e246Ik9iTm9NYWNyb3MifSw0NDY6e246IkR2In0sNDQ4OntuOiJFeGNlbDlGaWxlIixmOlBkfSw0NDk6e246IlJlY2FsY0lkIixmOmZ1bmN0aW9uIGYwKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoMiks'@;
put 'eS5yZWFkX3NoaWZ0KDQpfSxyOjJ9LDQ1MDp7bjoiRW50RXhVMiIsZjpQZH0sNTEyOntuOiJEaW1lbnNpb25zIixmOkJ0fSw1MTM6e246IkJsYW5rIixmOnF3fSw1MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBOdyh5LFAsTCl7TC5iaWZmZ3Vlc3MmJjI9PUwuYmlmZiYmKEwuYmlmZj01KTt2'@;
put 'YXIgUT1MdSh5KSxyZT1tYSh5KTtyZXR1cm4gUS52YWw9cmUsUX19LDUxNjp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gWVQoeSxQLEwpe0wuYmlmZmd1ZXNzJiYyPT1MLmJpZmYmJihMLmJpZmY9NSk7dmFyIHJlPUx1KHkpOzI9PUwuYmlmZiYmeS5sKys7dmFyIGdlPU4yKHksMCxMKTtyZXR1cm4g'@;
put 'cmUudmFsPWdlLHJlfX0sNTE3OntuOiJCb29sRXJyIixmOlZjfSw1MTk6e246IlN0cmluZyIsZjppRH0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gJGUoeSl7dmFyIFA9e307UC5yPXkucmVhZF9zaGlmdCgyKSxQLmM9eS5yZWFkX3NoaWZ0KDIpLFAuY250PXkucmVhZF9zaGlmdCgyKS1QLmM7'@;
put 'dmFyIEw9eS5yZWFkX3NoaWZ0KDIpO3kubCs9NDt2YXIgUT15LnJlYWRfc2hpZnQoMSk7eS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIFAuaXhmZT00MDk1JnJlLDcmUSYmKFAubGV2ZWw9NyZRKSwzMiZRJiYoUC5oaWRkZW49ITApLDY0JlEmJihQLmhwdD1MLzIwKSxQfX0s'@;
put 'NTIzOntuOiJJbmRleCJ9LDU0NTp7bjoiQXJyYXkiLGY6and9LDU0OTp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpXMH0sNTY2OntuOiJUYWJsZSJ9LDU3NDp7bjoiV2luZG93MiIsZjpmdW5jdGlvbiBsWih5LFAsTCl7aWYoTCYmTC5iaWZmPj0yJiZMLmJpZmY8NSlyZXR1cm57fTt2YXIgUT15'@;
put 'LnJlYWRfc2hpZnQoMik7cmV0dXJue1JUTDo2NCZRLGdyaWQ6ISEoMiZRKSxmcm96ZW46ISEoOCZRKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIE1jKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKSxRPWc5KHkpO3JldHVybntyOlAsYzpMLGl4ZmU6UVswXSxy'@;
put 'a251bTpRWzFdfX19LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gJFQoeSxQLEwpe3JldHVybiB5LmwrPVAse319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uIEdUKHksUCxMKXtyZXR1cm5beS5yZWFkX3NoaWZ0KDIpLFYyKHksMCxMKV19fSwxMDg0'@;
put 'OntuOiJDb250aW51ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9uIEM5KHksUCxMKXt2YXIgUT1fbSh5KTt5LmwrKzt2YXIgcmU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybltpNSh5LFAtPTgsTCkscmUsUV19fSwyMDQ4OntuOiJITGlua1Rvb2x0aXAiLGY6ZnVuY3Rpb24g'@;
put 'UWEoeSxQKXt5LnJlYWRfc2hpZnQoMik7dmFyIEw9S2goeSksUT15LnJlYWRfc2hpZnQoKFAtMTApLzIsImRiY3MtY29udCIpO3JldHVybltMLFE9US5yZXBsYWNlKHYsIiIpXX19LDIwNDk6e246IldlYlB1YiJ9LDIwNTA6e246IlFzaVNYVGFnIn0sMjA1MTp7bjoiREJRdWVyeUV4dCJ9LDIw'@;
put 'NTI6e246IkV4dFN0cmluZyJ9LDIwNTM6e246IlR4dFFyeSJ9LDIwNTQ6e246IlFzaXIifSwyMDU1OntuOiJRc2lmIn0sMjA1Njp7bjoiUlJEVFFTSUYifSwyMDU3OntuOiJCT0YiLGY6UnV9LDIwNTg6e246Ik9sZURiQ29ubiJ9LDIwNTk6e246IldPcHQifSwyMDYwOntuOiJTWFZpZXdFeCJ9'@;
put 'LDIwNjE6e246IlNYVEgifSwyMDYyOntuOiJTWFBJRXgifSwyMDYzOntuOiJTWFZEVEV4In0sMjA2NDp7bjoiU1hWaWV3RXg5In0sMjA2Njp7bjoiQ29udGludWVGcnQifSwyMDY3OntuOiJSZWFsVGltZURhdGEifSwyMTI4OntuOiJDaGFydEZydEluZm8ifSwyMTI5OntuOiJGcnRXcmFwcGVy'@;
put 'In0sMjEzMDp7bjoiU3RhcnRCbG9jayJ9LDIxMzE6e246IkVuZEJsb2NrIn0sMjEzMjp7bjoiU3RhcnRPYmplY3QifSwyMTMzOntuOiJFbmRPYmplY3QifSwyMTM0OntuOiJDYXRMYWIifSwyMTM1OntuOiJZTXVsdCJ9LDIxMzY6e246IlNYVmlld0xpbmsifSwyMTM3OntuOiJQaXZvdENoYXJ0'@;
put 'Qml0cyJ9LDIxMzg6e246IkZydEZvbnRMaXN0In0sMjE0Njp7bjoiU2hlZXRFeHQifSwyMTQ3OntuOiJCb29rRXh0IixyOjEyfSwyMTQ4OntuOiJTWEFkZGwifSwyMTQ5OntuOiJDckVyciJ9LDIxNTA6e246IkhGUGljdHVyZSJ9LDIxNTE6e246IkZlYXRIZHIiLGY6UGR9LDIxNTI6e246IkZl'@;
put 'YXQifSwyMTU0OntuOiJEYXRhTGFiRXh0In0sMjE1NTp7bjoiRGF0YUxhYkV4dENvbnRlbnRzIn0sMjE1Njp7bjoiQ2VsbFdhdGNoIn0sMjE2MTp7bjoiRmVhdEhkcjExIn0sMjE2Mjp7bjoiRmVhdHVyZTExIn0sMjE2NDp7bjoiRHJvcERvd25PYmpJZHMifSwyMTY1OntuOiJDb250aW51ZUZy'@;
put 'dDExIn0sMjE2Njp7bjoiRENvbm4ifSwyMTY3OntuOiJMaXN0MTIifSwyMTY4OntuOiJGZWF0dXJlMTIifSwyMTY5OntuOiJDb25kRm10MTIifSwyMTcwOntuOiJDRjEyIn0sMjE3MTp7bjoiQ0ZFeCJ9LDIxNzI6e246IlhGQ1JDIixmOmZ1bmN0aW9uIHhtKHkpe3kubCs9Mjt2YXIgUD17Y3hm'@;
put 'czowLGNyYzowfTtyZXR1cm4gUC5jeGZzPXkucmVhZF9zaGlmdCgyKSxQLmNyYz15LnJlYWRfc2hpZnQoNCksUH0scjoxMn0sMjE3Mzp7bjoiWEZFeHQiLGY6ZnVuY3Rpb24gekQoeSxQKXt5LmwrPTI7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpO3kubCs9Mjtmb3IodmFyIHJlPXkucmVhZF9zaGlm'@;
put 'dCgyKSxnZT1bXTtyZS0tID4wOylnZS5wdXNoKGpEKHkpKTtyZXR1cm57aXhmZTpRLGV4dDpnZX19LHI6MTJ9LDIxNzQ6e246IkF1dG9GaWx0ZXIxMiJ9LDIxNzU6e246IkNvbnRpbnVlRnJ0MTIifSwyMTgwOntuOiJNRFRJbmZvIn0sMjE4MTp7bjoiTURYU3RyIn0sMjE4Mjp7bjoiTURYVHVw'@;
put 'bGUifSwyMTgzOntuOiJNRFhTZXQifSwyMTg0OntuOiJNRFhQcm9wIn0sMjE4NTp7bjoiTURYS1BJIn0sMjE4Njp7bjoiTURCIn0sMjE4Nzp7bjoiUExWIn0sMjE4ODp7bjoiQ29tcGF0MTIiLGY6U28scjoxMn0sMjE4OTp7bjoiRFhGIn0sMjE5MDp7bjoiVGFibGVTdHlsZXMiLHI6MTJ9LDIx'@;
put 'OTE6e246IlRhYmxlU3R5bGUifSwyMTkyOntuOiJUYWJsZVN0eWxlRWxlbWVudCJ9LDIxOTQ6e246IlN0eWxlRXh0In0sMjE5NTp7bjoiTmFtZVB1Ymxpc2gifSwyMTk2OntuOiJOYW1lQ210IixmOmZ1bmN0aW9uIEJ3KHksUCxMKXtpZighKEwuYmlmZjw4KSl7dmFyIFE9eS5yZWFkX3NoaWZ0'@;
put 'KDIpLHJlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm5bSGQoeSxRLEwpLEhkKHkscmUsTCldfXkubCs9UH0scjoxMn0sMjE5Nzp7bjoiU29ydERhdGEifSwyMTk4OntuOiJUaGVtZSIsZjpmdW5jdGlvbiAkbSh5LFAsTCl7dmFyIFE9eS5sK1A7aWYoMTI0MjI2IT09eS5yZWFkX3NoaWZ0KDQpKXtp'@;
put 'ZighTC5jZWxsU3R5bGVzKXJldHVybiB2b2lkKHkubD1RKTt2YXIgX2UsZ2U9eS5zbGljZSh5LmwpO3kubD1RO3RyeXtfZT14bihnZSx7dHlwZToiYXJyYXkifSl9Y2F0Y2h7cmV0dXJufXZhciB2ZT1RdChfZSwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbCIsITApO2lmKHZlKXJldHVybiBHbSh2'@;
put 'ZSxMKX19LHI6MTJ9LDIxOTk6e246IkdVSURUeXBlTGliIn0sMjIwMDp7bjoiRm5HcnAxMiJ9LDIyMDE6e246Ik5hbWVGbkdycDEyIn0sMjIwMjp7bjoiTVRSU2V0dGluZ3MiLGY6ZnVuY3Rpb24gencoeSl7cmV0dXJuWzAhPT15LnJlYWRfc2hpZnQoNCksMCE9PXkucmVhZF9zaGlmdCg0KSx5'@;
put 'LnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntuOiJDb21wcmVzc1BpY3R1cmVzIixmOlBkfSwyMjA0OntuOiJIZWFkZXJGb290ZXIifSwyMjA1OntuOiJDcnRMYXlvdXQxMiJ9LDIyMDY6e246IkNydE1sRnJ0In0sMjIwNzp7bjoiQ3J0TWxGcnRDb250aW51ZSJ9LDIyMTE6e246IkZvcmNl'@;
put 'RnVsbENhbGN1bGF0aW9uIixmOmZ1bmN0aW9uIEx0KHkpe3ZhciBQPWZ1bmN0aW9uIGY5KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4geS5sKz04LHt0eXBlOlAsZmxhZ3M6TH19KHkpO2lmKDIyMTEhPVAudHlwZSl0aHJvdyBuZXcgRXJyb3IoIklu'@;
put 'dmFsaWQgRnV0dXJlIFJlY29yZCAiK1AudHlwZSk7cmV0dXJuIDAhPT15LnJlYWRfc2hpZnQoNCl9fSwyMjEyOntuOiJTaGFwZVByb3BzU3RyZWFtIn0sMjIxMzp7bjoiVGV4dFByb3BzU3RyZWFtIn0sMjIxNDp7bjoiUmljaFRleHRTdHJlYW0ifSwyMjE1OntuOiJDcnRMYXlvdXQxMkEifSw0'@;
put 'MDk3OntuOiJVbml0cyJ9LDQwOTg6e246IkNoYXJ0In0sNDA5OTp7bjoiU2VyaWVzIn0sNDEwMjp7bjoiRGF0YUZvcm1hdCJ9LDQxMDM6e246IkxpbmVGb3JtYXQifSw0MTA1OntuOiJNYXJrZXJGb3JtYXQifSw0MTA2OntuOiJBcmVhRm9ybWF0In0sNDEwNzp7bjoiUGllRm9ybWF0In0sNDEw'@;
put 'ODp7bjoiQXR0YWNoZWRMYWJlbCJ9LDQxMDk6e246IlNlcmllc1RleHQifSw0MTE2OntuOiJDaGFydEZvcm1hdCJ9LDQxMTc6e246IkxlZ2VuZCJ9LDQxMTg6e246IlNlcmllc0xpc3QifSw0MTE5OntuOiJCYXIifSw0MTIwOntuOiJMaW5lIn0sNDEyMTp7bjoiUGllIn0sNDEyMjp7bjoiQXJl'@;
put 'YSJ9LDQxMjM6e246IlNjYXR0ZXIifSw0MTI0OntuOiJDcnRMaW5lIn0sNDEyNTp7bjoiQXhpcyJ9LDQxMjY6e246IlRpY2sifSw0MTI3OntuOiJWYWx1ZVJhbmdlIn0sNDEyODp7bjoiQ2F0U2VyUmFuZ2UifSw0MTI5OntuOiJBeGlzTGluZSJ9LDQxMzA6e246IkNydExpbmsifSw0MTMyOntu'@;
put 'OiJEZWZhdWx0VGV4dCJ9LDQxMzM6e246IlRleHQifSw0MTM0OntuOiJGb250WCIsZjpobH0sNDEzNTp7bjoiT2JqZWN0TGluayJ9LDQxNDY6e246IkZyYW1lIn0sNDE0Nzp7bjoiQmVnaW4ifSw0MTQ4OntuOiJFbmQifSw0MTQ5OntuOiJQbG90QXJlYSJ9LDQxNTQ6e246IkNoYXJ0M2QifSw0'@;
put 'MTU2OntuOiJQaWNGIn0sNDE1Nzp7bjoiRHJvcEJhciJ9LDQxNTg6e246IlJhZGFyIn0sNDE1OTp7bjoiU3VyZiJ9LDQxNjA6e246IlJhZGFyQXJlYSJ9LDQxNjE6e246IkF4aXNQYXJlbnQifSw0MTYzOntuOiJMZWdlbmRFeGNlcHRpb24ifSw0MTY0OntuOiJTaHRQcm9wcyIsZjpmdW5jdGlv'@;
put 'biBBbSh5LFAsTCl7dmFyIFE9e2FyZWE6ITF9O2lmKDUhPUwuYmlmZilyZXR1cm4geS5sKz1QLFE7dmFyIHJlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sKz0zLDE2JnJlJiYoUS5hcmVhPSEwKSxRfX0sNDE2NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6e246'@;
put 'IlNCYXNlUmVmIn0sNDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQifSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0sNDE3Njp7bjoiQWxSdW5zIn0sNDE3Nzp7bjoiQlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNscnRD'@;
put 'bGllbnQiLGY6ZnVuY3Rpb24gbkQoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCgyKSxMPVtdO1AtLSA+MDspTC5wdXNoKGg5KHkpKTtyZXR1cm4gTH19LDQxODk6e246IlNlckZtdCJ9LDQxOTE6e246IkNoYXJ0M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBvcCJ9'@;
put 'LDQxOTQ6e246IkF4Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgifSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUifSw0MTk5OntuOiJCb3BQb3BDdXN0b20ifSw0MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjpCdH0sMTp7bjoi'@;
put 'QklGRjJCTEFOSyJ9LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIHNEKHkpe3ZhciBQPUx1KHkpOysreS5sO3ZhciBMPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gUC50PSJuIixQLnZhbD1MLFB9fSwzOntuOiJCSUZGMk5VTSIsZjpmdW5jdGlvbiB4OSh5KXt2YXIgUD1MdSh5KTsrK3kubDt2'@;
put 'YXIgTD1tYSh5KTtyZXR1cm4gUC50PSJuIixQLnZhbD1MLFB9fSw0OntuOiJCSUZGMlNUUiIsZjpmdW5jdGlvbiB1Wih5LFAsTCl7TC5iaWZmZ3Vlc3MmJjU9PUwuYmlmZiYmKEwuYmlmZj0yKTt2YXIgUT1MdSh5KTsrK3kubDt2YXIgcmU9VjIoeSwwLEwpO3JldHVybiBRLnQ9InN0ciIsUS52'@;
put 'YWw9cmUsUX19LDU6e246IkJvb2xFcnIiLGY6VmN9LDc6e246IlN0cmluZyIsZjpmdW5jdGlvbiBoWih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1QPyh5LmwrKywiIik6eS5yZWFkX3NoaWZ0KFAsInNiY3MtY29udCIpfX0sODp7bjoiQklGRjJST1cifSw5OntuOiJCT0Yi'@;
put 'LGY6UnV9LDExOntuOiJJbmRleCJ9LDIyOntuOiJFeHRlcm5Db3VudCIsZjpobH0sMzA6e246IkJJRkYyRk9STUFUIixmOlRzfSwzMTp7bjoiQklGRjJGTVRDTlQifSwzMjp7bjoiQklGRjJDT0xJTkZPIn0sMzM6e246IkFycmF5IixmOmp3fSwzNjp7bjoiQ09MV0lEVEgifSwzNzp7bjoiRGVm'@;
put 'YXVsdFJvd0hlaWdodCIsZjpXMH0sNTA6e246IkJJRkYyRk9OVFhUUkEiLGY6ZnVuY3Rpb24gZlooeSxQKXt5LmwrPTYseS5sKz0yLHkubCs9MSx5LmwrPTMseS5sKz0xLHkubCs9UC0xM319LDYyOntuOiJCSUZGMldJTkRPVzIifSw1Mjp7bjoiRERFT2JqTmFtZSJ9LDY3OntuOiJCSUZGMlhG'@;
put 'In0sNjg6e246IkJJRkYyWEZJTkRFWCIsZjpobH0sNjk6e246IkJJRkYyRk9OVENMUiJ9LDg2OntuOiJCSUZGNEZNVENOVCJ9LDEyNjp7bjoiUksifSwxMjc6e246IkltRGF0YSIsZjpmdW5jdGlvbiBvRCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15LnJl'@;
put 'YWRfc2hpZnQoNCkscmU9e2ZtdDpQLGVudjpMLGxlbjpRLGRhdGE6eS5zbGljZSh5LmwseS5sK1EpfTtyZXR1cm4geS5sKz1RLHJlfX0sMTM1OntuOiJBZGRpbiJ9LDEzNjp7bjoiRWRnIn0sMTM3OntuOiJQdWIifSwxNDU6e246IlN1YiJ9LDE0ODp7bjoiTEhSZWNvcmQifSwxNDk6e246IkxI'@;
put 'TkdyYXBoIn0sMTUwOntuOiJTb3VuZCJ9LDE2OTp7bjoiQ29vcmRMaXN0In0sMTcxOntuOiJHQ1cifSwxODg6e246IlNockZtbGEifSwxOTE6e246IlRvb2xiYXJIZHIifSwxOTI6e246IlRvb2xiYXJFbmQifSwxOTQ6e246IkFkZE1lbnUifSwxOTU6e246IkRlbE1lbnUifSwyMTQ6e246IlJT'@;
put 'dHJpbmciLGY6ZnVuY3Rpb24gWHcoeSxQLEwpe3ZhciBRPXkubCtQLHJlPUx1KHkpLGdlPXkucmVhZF9zaGlmdCgyKSxfZT1IZCh5LGdlLEwpO3JldHVybiB5Lmw9USxyZS50PSJzdHIiLHJlLnZhbD1fZSxyZX19LDIyMzp7bjoiVUREZXNjIn0sMjM0OntuOiJUYWJJZENvbmYifSwzNTQ6e246'@;
put 'IlhMNU1vZGlmeSJ9LDQyMTp7bjoiRmlsZVNoYXJpbmcyIn0sNTE4OntuOiJGb3JtdWxhIixmOnozfSw1MjE6e246IkJPRiIsZjpSdX0sNTM2OntuOiJMYmwiLGY6Vnd9LDU0Nzp7bjoiRXh0ZXJuTmFtZSIsZjp5OX0sNTYxOntuOiJGb250In0sNTc5OntuOiJCSUZGM1hGIn0sMTAzMDp7bjoi'@;
put 'Rm9ybXVsYSIsZjp6M30sMTAzMzp7bjoiQk9GIixmOlJ1fSwxMDkxOntuOiJCSUZGNFhGIn0sMjE1Nzp7bjoiRmVhdEluZm8ifSwyMTYzOntuOiJGZWF0SW5mbzExIn0sMjE3Nzp7bjoiU1hBZGRsMTIifSwyMjQwOntuOiJBdXRvV2ViUHViIn0sMjI0MTp7bjoiTGlzdE9iaiJ9LDIyNDI6e246'@;
put 'Ikxpc3RGaWVsZCJ9LDIyNDM6e246Ikxpc3REViJ9LDIyNDQ6e246Ikxpc3RDb25kRm10In0sMjI0NTp7bjoiTGlzdENGIn0sMjI0Njp7bjoiRk1RcnkifSwyMjQ3OntuOiJGTVNRcnkifSwyMjQ4OntuOiJQTFYifSwyMjQ5OntuOiJMbkV4dCJ9LDIyNTA6e246Ik1rckV4dCJ9LDIyNTE6e246'@;
put 'IkNydENvb3B0In0sMjI2Mjp7bjoiRlJUQXJjaElkJCIscjoxMn0sMjkyODI6e319LFNNPVBlKFgwLCJuIik7ZnVuY3Rpb24gQ2koeSxQLEwsUSl7dmFyIHJlPStQfHwrU01bUF07aWYoIWlzTmFOKHJlKSl7dmFyIGdlPVF8fChMfHxbXSkubGVuZ3RofHwwLF9lPXkubmV4dCg0KTtfZS53cml0'@;
put 'ZV9zaGlmdCgyLHJlKSxfZS53cml0ZV9zaGlmdCgyLGdlKSxnZT4wJiZOaChMKSYmeS5wdXNoKEwpfX1mdW5jdGlvbiBKMCh5LFAsTCl7cmV0dXJuIHl8fCh5PXByKDcpKSx5LndyaXRlX3NoaWZ0KDIsUCkseS53cml0ZV9zaGlmdCgyLEwpLHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3No'@;
put 'aWZ0KDEsMCkseX1mdW5jdGlvbiByXyh5LFAsTCxRKXtpZihudWxsIT1QLnYpc3dpdGNoKFAudCl7Y2FzZSJkIjpjYXNlIm4iOnZhciByZT0iZCI9PVAudD9VZShIdChQLnYpKTpQLnY7cmV0dXJuIHZvaWQocmU9PSgwfHJlKSYmcmU+PTAmJnJlPDY1NTM2P0NpKHksMixmdW5jdGlvbiBhRCh5'@;
put 'LFAsTCl7dmFyIFE9cHIoOSk7cmV0dXJuIEowKFEseSxQKSxRLndyaXRlX3NoaWZ0KDIsTCksUX0oTCxRLHJlKSk6Q2koeSwzLGZ1bmN0aW9uIGRaKHksUCxMKXt2YXIgUT1wcigxNSk7cmV0dXJuIEowKFEseSxQKSxRLndyaXRlX3NoaWZ0KDgsTCwiZiIpLFF9KEwsUSxyZSkpKTtjYXNlImIi'@;
put 'OmNhc2UiZSI6cmV0dXJuIHZvaWQgQ2koeSw1LGZ1bmN0aW9uIG5fKHksUCxMLFEpe3ZhciByZT1wcig5KTtyZXR1cm4gSjAocmUseSxQKSxkOShMLFF8fCJiIixyZSkscmV9KEwsUSxQLnYsUC50KSk7Y2FzZSJzIjpjYXNlInN0ciI6cmV0dXJuIHZvaWQgQ2koeSw0LGZ1bmN0aW9uIFFMKHks'@;
put 'UCxMKXt2YXIgUT1wcig4KzIqTC5sZW5ndGgpO3JldHVybiBKMChRLHksUCksUS53cml0ZV9zaGlmdCgxLEwubGVuZ3RoKSxRLndyaXRlX3NoaWZ0KEwubGVuZ3RoLEwsInNiY3MiKSxRLmw8US5sZW5ndGg/US5zbGljZSgwLFEubCk6UX0oTCxRLChQLnZ8fCIiKS5zbGljZSgwLDI1NSkpKX1D'@;
put 'aSh5LDEsSjAobnVsbCxMLFEpKX1mdW5jdGlvbiByUih5LFAsTCxRLHJlKXt2YXIgZ2U9MTYrZ3UocmUuY2VsbFhmcyxyZS5jZWxsU3R5bGVYZnMsUCxyZSk7aWYobnVsbCE9UC52fHxQLmJmKWlmKFAuYmYpQ2koeSwiRm9ybXVsYSIsZnVuY3Rpb24gV1ooeSxQLEwsUSxyZSl7dmFyIGdlPXow'@;
put 'KFAsTCxyZSksX2U9ZnVuY3Rpb24gcHYoeSl7aWYobnVsbD09eSl7dmFyIFA9cHIoOCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoMSwzKSxQLndyaXRlX3NoaWZ0KDEsMCksUC53cml0ZV9zaGlmdCgyLDApLFAud3JpdGVfc2hpZnQoMiwwKSxQLndyaXRlX3NoaWZ0KDIsNjU1MzUpLFB9cmV0dXJu'@;
put 'IEZjKCJudW1iZXIiPT10eXBlb2YgeT95OjApfSh5LnYpLHZlPXByKDYpO3ZlLndyaXRlX3NoaWZ0KDIsMzMpLHZlLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBIZT1wcih5LmJmLmxlbmd0aCksQmU9MDtCZTx5LmJmLmxlbmd0aDsrK0JlKUhlW0JlXT15LmJmW0JlXTtyZXR1cm4gUyhbZ2Us'@;
put 'X2UsdmUsSGVdKX0oUCxMLFEsMCxnZSkpO2Vsc2Ugc3dpdGNoKFAudCl7Y2FzZSJkIjpjYXNlIm4iOkNpKHksIk51bWJlciIsZnVuY3Rpb24gQzMoeSxQLEwsUSl7dmFyIHJlPXByKDE0KTtyZXR1cm4gejAoeSxQLFEscmUpLEZjKEwscmUpLHJlfShMLFEsImQiPT1QLnQ/VWUoSHQoUC52KSk6'@;
put 'UC52LGdlKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOkNpKHksNTE3LGZ1bmN0aW9uIE5kKHksUCxMLFEscmUsZ2Upe3ZhciBfZT1wcig4KTtyZXR1cm4gejAoeSxQLFEsX2UpLGQ5KEwsZ2UsX2UpLF9lfShMLFEsUC52LGdlLDAsUC50KSk7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6aWYocmUu'@;
put 'Ym9va1NTVCl7dmFyIHZlPXd2KHJlLlN0cmluZ3MsUC52LFAuUj9QLnI9SmgoUC5SKTpudWxsLHJlLnJldlN0cmluZ3MpO2lmKFAuUilmb3IodmFyIFNlPTA7U2U8UC5SLmxlbmd0aDsrK1NlKVAuUltTZV0ucyYmZ3UocmUuY2VsbFhmcyxyZS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlAu'@;
put 'UltTZV0uc30scmUpO0NpKHksIkxhYmVsU3N0IixmdW5jdGlvbiBaVCh5LFAsTCxRKXt2YXIgcmU9cHIoMTApO3JldHVybiB6MCh5LFAsUSxyZSkscmUud3JpdGVfc2hpZnQoNCxMKSxyZX0oTCxRLHZlLGdlKSl9ZWxzZSBDaSh5LCJMYWJlbCIsZnVuY3Rpb24gV1QoeSxQLEwsUSxyZSl7dmFy'@;
put 'IGdlPSFyZXx8OD09cmUuYmlmZixfZT1wcigrZ2UrOCsoMStnZSkqTC5sZW5ndGgpO3JldHVybiB6MCh5LFAsUSxfZSksX2Uud3JpdGVfc2hpZnQoMixMLmxlbmd0aCksZ2UmJl9lLndyaXRlX3NoaWZ0KDEsMSksX2Uud3JpdGVfc2hpZnQoKDErZ2UpKkwubGVuZ3RoLEwsZ2U/InV0ZjE2bGUi'@;
put 'OiJzYmNzIiksX2V9KEwsUSwoUC52fHwiIikuc2xpY2UoMCwyNTUpLGdlLHJlKSk7YnJlYWs7ZGVmYXVsdDpDaSh5LCJCbGFuayIsejAoTCxRLGdlKSl9ZWxzZSBDaSh5LCJCbGFuayIsejAoTCxRLGdlKSl9ZnVuY3Rpb24gaVIoeSxQLEwpe3ZhciBCZSxRPXdjKCkscmU9TC5TaGVldE5hbWVz'@;
put 'W3ldLGdlPUwuU2hlZXRzW3JlXXx8e30sX2U9KEx8fHt9KS5Xb3JrYm9va3x8e30sdmU9KF9lLlNoZWV0c3x8W10pW3ldfHx7fSxTZT1BcnJheS5pc0FycmF5KGdlKSxIZT04PT1QLmJpZmYsR2U9IiIsbnQ9W10sZHQ9T2koZ2VbIiFyZWYiXXx8IkExIiksQ3Q9SGU/NjU1MzY6MTYzODQ7aWYo'@;
put 'ZHQuZS5jPjI1NXx8ZHQuZS5yPj1DdCl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhnZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtkdC5lLmM9TWF0aC5taW4oZHQuZS5jLDI1NSksZHQuZS5yPU1hdGgubWluKGR0LmUuYyxD'@;
put 'dC0xKX1DaShRLDIwNTcsRDQoMCwxNixQKSksQ2koUSwiQ2FsY01vZGUiLGZ1KDEpKSxDaShRLCJDYWxjQ291bnQiLGZ1KDEwMCkpLENpKFEsIkNhbGNSZWZNb2RlIixGbCghMCkpLENpKFEsIkNhbGNJdGVyIixGbCghMSkpLENpKFEsIkNhbGNEZWx0YSIsRmMoLjAwMSkpLENpKFEsIkNhbGNT'@;
put 'YXZlUmVjYWxjIixGbCghMCkpLENpKFEsIlByaW50Um93Q29sIixGbCghMSkpLENpKFEsIlByaW50R3JpZCIsRmwoITEpKSxDaShRLCJHcmlkU2V0IixmdSgxKSksQ2koUSwiR3V0cyIsZnVuY3Rpb24gSHcoeSl7dmFyIFA9cHIoOCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRl'@;
put 'X3NoaWZ0KDIseVswXT95WzBdKzE6MCksUC53cml0ZV9zaGlmdCgyLHlbMV0/eVsxXSsxOjApLFB9KFswLDBdKSksQ2koUSwiSENlbnRlciIsRmwoITEpKSxDaShRLCJWQ2VudGVyIixGbCghMSkpO3ZhciBjdD1nZVsiIXByaW50Il0mJmdlWyIhcHJpbnQiXS5tYXJnaW5zfHxnZVsiIW1hcmdp'@;
put 'bnMiXTtjdCYmKG51bGwhPWN0LmxlZnQmJkNpKFEsIkxlZnRNYXJnaW4iLEZjKGN0LmxlZnQpKSxudWxsIT1jdC5yaWdodCYmQ2koUSwiUmlnaHRNYXJnaW4iLEZjKGN0LnJpZ2h0KSksbnVsbCE9Y3QudG9wJiZDaShRLCJUb3BNYXJnaW4iLEZjKGN0LnRvcCkpLG51bGwhPWN0LmJvdHRvbSYm'@;
put 'Q2koUSwiQm90dG9tTWFyZ2luIixGYyhjdC5ib3R0b20pKSwobnVsbCE9Y3QuaGVhZGVyfHxudWxsIT1jdC5mb290ZXIpJiZDaShRLCJTZXR1cCIsZnVuY3Rpb24ga20oeSxQKXt2YXIgTD1wcigzNCksUT0hMSxyZT03MDtyZXR1cm4ibGFuZHNjYXBlIj09KFAucHJvcHN8fHt9KS5vcmllbnRh'@;
put 'dGlvbiYmKFE9ITAscmUmPS02NyksUSYmKHJlJj0tNSksTC53cml0ZV9zaGlmdCgyLDEpLEwud3JpdGVfc2hpZnQoMiwxMDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMSxyZSksTC53cml0ZV9zaGlmdCgx'@;
put 'LDApLEwud3JpdGVfc2hpZnQoMiw2MDApLEwud3JpdGVfc2hpZnQoMiw2MDApLEZjKG51bGw9PXkuaGVhZGVyPy41OnkuaGVhZGVyLEwpLEZjKG51bGw9PXkuZm9vdGVyPy41OnkuZm9vdGVyLEwpLEwud3JpdGVfc2hpZnQoMiwxKSxMfShjdCxnZVsiIXByaW50Il18fHt9KSkpLEhlJiZmdW5j'@;
put 'dGlvbiB4TSh5LFAsTCl7aWYoUCl7dmFyIFE9MDtQLmZvckVhY2goZnVuY3Rpb24ocmUsZ2UpeysrUTw9MjU2JiZyZSYmKHJlLmF1dG8mJk5pKEwscmUsZ2UpLENpKHksIkNvbEluZm8iLGZ1bmN0aW9uIHJEKHksUCl7dmFyIEw9cHIoMTIpO0wud3JpdGVfc2hpZnQoMixQKSxMLndyaXRlX3No'@;
put 'aWZ0KDIsUCksTC53cml0ZV9zaGlmdCgyLDI1Nip5LndpZHRoKSxMLndyaXRlX3NoaWZ0KDIsMCk7dmFyIFE9MDtyZXR1cm4geS5oaWRkZW4mJihRfD0xKSxMLndyaXRlX3NoaWZ0KDEsUSksTC53cml0ZV9zaGlmdCgxLFE9eS5sZXZlbHx8MCksTC53cml0ZV9zaGlmdCgyLDApLEx9KFlkKGdl'@;
put 'LHJlKSxnZSkpKX0pfX0oUSxnZVsiIWNvbHMiXSxnZSksQ2koUSwiRGltZW5zaW9ucyIsZnVuY3Rpb24ganQoeSxQKXt2YXIgTD04IT1QLmJpZmYmJlAuYmlmZj8yOjQsUT1wcigyKkwrNik7cmV0dXJuIFEud3JpdGVfc2hpZnQoTCx5LnMuciksUS53cml0ZV9zaGlmdChMLHkuZS5yKzEpLFEu'@;
put 'd3JpdGVfc2hpZnQoMix5LnMuYyksUS53cml0ZV9zaGlmdCgyLHkuZS5jKzEpLFEud3JpdGVfc2hpZnQoMiwwKSxRfShkdCxQKSksSGUmJihnZVsiIWxpbmtzIl09W10pLGdlWyIhcm93cyJdJiZIZSYmZ2VbIiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihadCxwbil7Zm9yKHZhciBLbj1Icyhw'@;
put 'biksdW49MjU2LHFuPTAsem49WnQucz8xNitndShQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlp0LnN9LFApOjAsa249ZHQucy5jO2tuPD1kdC5lLmM7KytrbikoU2U/KGdlW3BuXXx8W10pW2tuXTpnZVtudFtrbl0rS25dKSYmKGtuPHVuJiYodW49a24pLGtuPnFuJiYo'@;
put 'cW49a24pKTtxbjx1biYmKHVuPXFuPTApLENpKFEsIlJvdyIsZnVuY3Rpb24gbXQoeSxQLEwpe3ZhciBRPXByKDE2KTtRLndyaXRlX3NoaWZ0KDIsUCksUS53cml0ZV9zaGlmdCgyLExbMF0pLFEud3JpdGVfc2hpZnQoMixMWzFdKzEpLFEud3JpdGVfc2hpZnQoMiwyMCp5LmhwdHx8MjAqajIo'@;
put 'eS5ocHgpfHwzMzApLFEud3JpdGVfc2hpZnQoNCwwKTt2YXIgcmU9MDtyZXR1cm4gcmV8PTB8eS5sZXZlbCx5LmhpZGRlbiYmKHJlfD0zMikscmV8PTY0LExbMl0mJihyZXw9MTI4KSxRLndyaXRlX3NoaWZ0KDEscmUpLFEud3JpdGVfc2hpZnQoMSwxKSxRLndyaXRlX3NoaWZ0KDIsTFsyXXx8'@;
put 'MCksUX0oWnQscG4sW3VuLHFuLHpuXSkpfSk7Zm9yKHZhciBidD1kdC5zLnI7YnQ8PWR0LmUucjsrK2J0KXtHZT1IcyhidCk7Zm9yKHZhciBGdD1kdC5zLmM7RnQ8PWR0LmUuYzsrK0Z0KXtidD09PWR0LnMuciYmKG50W0Z0XT1OcyhGdCkpLEJlPW50W0Z0XStHZTt2YXIga3Q9U2U/KGdlW2J0'@;
put 'XXx8W10pW0Z0XTpnZVtCZV07a3QmJihyUihRLGt0LGJ0LEZ0LFApLEhlJiZrdC5sJiZnZVsiIWxpbmtzIl0ucHVzaChbQmUsa3QubF0pKX19dmFyIFR0PXZlLkNvZGVOYW1lfHx2ZS5uYW1lfHxyZTtyZXR1cm4oSGV8fDU9PVAuYmlmZiYmZ2VbIiFmcmVlemUiXSkmJkNpKFEsIldpbmRvdzIi'@;
put 'LGZ1bmN0aW9uIEJUKHksUCxMLFEpe3ZhciByZT1RJiZRLmJpZmZ8fDgsZ2U9cHIoOD09cmU/MTg6MTApLF9lPTE3MTg7cmV0dXJuIEw+MCYmKF9lJj0tNTEzKSxobihQWyIhZ3JpZGxpbmVzIl0pJiYoX2UmPS0zKSxQWyIhZnJlZXplIl0mJihfZXw9OCkseSYmeS5SVEwmJihfZXw9NjQpLDU9'@;
put 'PXJlJiYoX2U9NDQ2KSxnZS53cml0ZV9zaGlmdCgyLF9lKSw4PT1yZT8oZ2Uud3JpdGVfc2hpZnQoNCwwKSxnZS53cml0ZV9zaGlmdCg0LDY0KSxnZS53cml0ZV9zaGlmdCg0LDApLGdlLndyaXRlX3NoaWZ0KDQsMCkpOihnZS53cml0ZV9zaGlmdCg0LDApLGdlLndyaXRlX3NoaWZ0KDQsMCkp'@;
put 'LGdlfSgoX2UuVmlld3N8fFtdKVswXSxnZSx5KSksKEhlfHw1PT1QLmJpZmYpJiZnZVsiIWZyZWV6ZSJdJiZDaShRLCJQYW5lIixmdW5jdGlvbiB6VCh5KXsic3RyaW5nIj09dHlwZW9mIHkmJih5PXNzKHkpKTt2YXIgUD1wcigxMCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoMix5LmMpLFAud3Jp'@;
put 'dGVfc2hpZnQoMix5LnIpLFAud3JpdGVfc2hpZnQoMix5LnIpLFAud3JpdGVfc2hpZnQoMix5LmMpLFAud3JpdGVfc2hpZnQoMSwzKSxQLndyaXRlX3NoaWZ0KDEsMCksUH0oZ2VbIiFmcmVlemUiXSkpLEhlJiZnZVsiIXNlbCJdJiZDaShRLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIFI0KHksUCl7'@;
put 'dmFyIEw9cHIoMTUpLFE9eS5jZWxsO2lmKCFRKXtpZigheS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7UT1kaShXcyh5LnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciByZT0ic3RyaW5nIj09dHlwZW9mIFE/'@;
put 'c3MoUSk6UTtpZihQKXt2YXIgZ2U9InN0cmluZyI9PXR5cGVvZiBQP3NzKFApOlA7TC53cml0ZV9zaGlmdCgxLHJlLnI+PWdlLnImJnJlLmM+PWdlLmM/MDpyZS5yPj1nZS5yJiZyZS5jPGdlLmM/MjpyZS5yPGdlLnImJnJlLmM+PWdlLmM/MTozKX1lbHNlIEwud3JpdGVfc2hpZnQoMSwzKTty'@;
put 'ZXR1cm4gTC53cml0ZV9zaGlmdCgyLHJlLnIpLEwud3JpdGVfc2hpZnQoMixyZS5jKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIG05KHksUCl7UHx8KFA9cHIoNikpLFAud3JpdGVfc2hpZnQoMix5LnM/eS5zLnI6eS5yKSxQLndyaXRlX3NoaWZ0KDIs'@;
put 'eS5lP3kuZS5yOnkuciksUC53cml0ZV9zaGlmdCgxLHkucz95LnMuYzp5LmMpLFAud3JpdGVfc2hpZnQoMSx5LmU/eS5lLmM6eS5jKX0oe3M6cmUsZTpyZX0sTCksTH0oZ2VbIiFzZWwiXSxnZVsiIWZyZWV6ZSJdKSksSGUmJihnZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZDaShRLCJNZXJn'@;
put 'ZUNlbGxzIixmdW5jdGlvbiBZdyh5KXt2YXIgUD1wcigyKzgqeS5sZW5ndGgpO1Aud3JpdGVfc2hpZnQoMix5Lmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx5Lmxlbmd0aDsrK0wpVTAoeVtMXSxQKTtyZXR1cm4gUH0oZ2VbIiFtZXJnZXMiXSkpLEhlJiZmdW5jdGlvbiBCbCh5LFApe2Zvcih2YXIg'@;
put 'TD0wO0w8UFsiIWxpbmtzIl0ubGVuZ3RoOysrTCl7dmFyIFE9UFsiIWxpbmtzIl1bTF07Q2koeSwiSExpbmsiLFhoKFEpKSxRWzFdLlRvb2x0aXAmJkNpKHksIkhMaW5rVG9vbHRpcCIsUVQoUSkpfWRlbGV0ZSBQWyIhbGlua3MiXX0oUSxnZSksQ2koUSwiQ29kZU5hbWUiLG1tKFR0KSksSGUm'@;
put 'JmZ1bmN0aW9uIE1NKHksUCl7dmFyIEw9cHIoMTkpO0wud3JpdGVfc2hpZnQoNCwyMTUxKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMiwzKSxMLndyaXRlX3NoaWZ0KDEsMSksTC53cml0ZV9zaGlmdCg0LDApLENpKHksIkZlYXRIZHIiLEwp'@;
put 'LChMPXByKDM5KSkud3JpdGVfc2hpZnQoNCwyMTUyKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMiwzKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMiwxKSxMLndyaXRlX3NoaWZ0KDQsNCks'@;
put 'TC53cml0ZV9zaGlmdCgyLDApLFUwKE9pKFBbIiFyZWYiXXx8IkExIiksTCksTC53cml0ZV9zaGlmdCg0LDQpLENpKHksIkZlYXQiLEwpfShRLGdlKSxDaShRLCJFT0YiKSxRLmVuZCgpfWZ1bmN0aW9uIEVNKHksUCxMKXt2YXIgUT13YygpLHJlPSh5fHx7fSkuV29ya2Jvb2t8fHt9LGdlPXJl'@;
put 'LlNoZWV0c3x8W10sX2U9cmUuV0JQcm9wc3x8e30sdmU9OD09TC5iaWZmLFNlPTU9PUwuYmlmZjtDaShRLDIwNTcsRDQoMCw1LEwpKSwieGxhIj09TC5ib29rVHlwZSYmQ2koUSwiQWRkaW4iKSxDaShRLCJJbnRlcmZhY2VIZHIiLHZlP2Z1KDEyMDApOm51bGwpLENpKFEsIk1tcyIsZnVuY3Rp'@;
put 'b24gTHcoeSxQKXtQfHwoUD1wcih5KSk7Zm9yKHZhciBMPTA7TDx5OysrTClQLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFB9KDIpKSxTZSYmQ2koUSwiVG9vbGJhckhkciIpLFNlJiZDaShRLCJUb29sYmFyRW5kIiksQ2koUSwiSW50ZXJmYWNlRW5kIiksQ2koUSwiV3JpdGVBY2Nlc3MiLGZ1'@;
put 'bmN0aW9uIHdtKHksUCl7dmFyIEw9IVB8fDg9PVAuYmlmZixRPXByKEw/MTEyOjU0KTtmb3IoUS53cml0ZV9zaGlmdCg4PT1QLmJpZmY/MjoxLDcpLEwmJlEud3JpdGVfc2hpZnQoMSwwKSxRLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxRLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwoTD8wOjUz'@;
put 'Njg3MDkxMikpO1EubDxRLmxlbmd0aDspUS53cml0ZV9zaGlmdCgxLEw/MDozMik7cmV0dXJuIFF9KDAsTCkpLENpKFEsIkNvZGVQYWdlIixmdSh2ZT8xMjAwOjEyNTIpKSx2ZSYmQ2koUSwiRFNGIixmdSgwKSksdmUmJkNpKFEsIkV4Y2VsOUZpbGUiKSxDaShRLCJSUlRhYklkIixmdW5jdGlv'@;
put 'biBNOSh5KXtmb3IodmFyIFA9cHIoMip5KSxMPTA7TDx5OysrTClQLndyaXRlX3NoaWZ0KDIsTCsxKTtyZXR1cm4gUH0oeS5TaGVldE5hbWVzLmxlbmd0aCkpLHZlJiZ5LnZiYXJhdyYmQ2koUSwiT2JQcm9qIiksdmUmJnkudmJhcmF3JiZDaShRLCJDb2RlTmFtZSIsbW0oX2UuQ29kZU5hbWV8'@;
put 'fCJUaGlzV29ya2Jvb2siKSksQ2koUSwiQnVpbHRJbkZuR3JvdXBDb3VudCIsZnUoMTcpKSxDaShRLCJXaW5Qcm90ZWN0IixGbCghMSkpLENpKFEsIlByb3RlY3QiLEZsKCExKSksQ2koUSwiUGFzc3dvcmQiLGZ1KDApKSx2ZSYmQ2koUSwiUHJvdDRSZXYiLEZsKCExKSksdmUmJkNpKFEsIlBy'@;
put 'b3Q0UmV2UGFzcyIsZnUoMCkpLENpKFEsIldpbmRvdzEiLGZ1bmN0aW9uIE93KCl7dmFyIHk9cHIoMTgpO3JldHVybiB5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgyLDApLHkud3JpdGVfc2hpZnQoMiwyOTI4MCkseS53cml0ZV9zaGlmdCgyLDE3NjAwKSx5LndyaXRlX3NoaWZ0'@;
put 'KDIsNTYpLHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgyLDEpLHkud3JpdGVfc2hpZnQoMiw1MDApLHl9KCkpLENpKFEsIkJhY2t1cCIsRmwoITEpKSxDaShRLCJIaWRlT2JqIixmdSgwKSksQ2koUSwiRGF0ZTE5MDQiLEZsKCJ0cnVlIj09ZnVu'@;
put 'Y3Rpb24gaU0oeSl7cmV0dXJuIHkuV29ya2Jvb2smJnkuV29ya2Jvb2suV0JQcm9wcyYmeXIoeS5Xb3JrYm9vay5XQlByb3BzLmRhdGUxOTA0KT8idHJ1ZSI6ImZhbHNlIn0oeSkpKSxDaShRLCJDYWxjUHJlY2lzaW9uIixGbCghMCkpLHZlJiZDaShRLCJSZWZyZXNoQWxsIixGbCghMSkpLENp'@;
put 'KFEsIkJvb2tCb29sIixmdSgwKSksQ3I9dzQoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1XSksZnVuY3Rpb24gZVIoeSxQLEwpeygoKFB8fHt9'@;
put 'KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tzejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oUSl7Q2koeSwiRm9udCIsZnVuY3Rpb24gdzMoeSxQKXt2YXIgTD15Lm5hbWV8fCJBcmlhbCIsUT1QJiY1PT1Q'@;
put 'LmJpZmYsZ2U9cHIoUT8xNStMLmxlbmd0aDoxNisyKkwubGVuZ3RoKTtnZS53cml0ZV9zaGlmdCgyLDIwKih5LnN6fHwxMikpO3ZhciBfZT0wO3JldHVybiB5LmJvbGQmJihfZXw9MSkseS5pdGFsaWMmJihfZXw9MikseS5zdHJpa2UmJihfZXw9OCkseS5zaGFkb3cmJihfZXw9MzIpLGdlLndy'@;
put 'aXRlX3NoaWZ0KDEsX2UpLGdlLndyaXRlX3NoaWZ0KDEsMCksZ2Uud3JpdGVfc2hpZnQoMix5LmNvbG9yP0gzKHkuY29sb3IsNjQpOjY0KSxnZS53cml0ZV9zaGlmdCgyLHkuYm9sZD83MDA6NDAwKSxnZS53cml0ZV9zaGlmdCgyLCJzdXBlciI9PXkudmFsaWduPzE6InN1YiI9PXkudmFsaWdu'@;
put 'PzI6MCksZ2Uud3JpdGVfc2hpZnQoMSx5LnVuZGVybGluZXx8MCksZ2Uud3JpdGVfc2hpZnQoMSxnZS5mYW1pbHl8fDApLGdlLndyaXRlX3NoaWZ0KDEsZ2UuY2hhcnNldHx8MCksZ2Uud3JpdGVfc2hpZnQoMSwwKSxnZS53cml0ZV9zaGlmdCgxLEwubGVuZ3RoKSxRfHxnZS53cml0ZV9zaGlm'@;
put 'dCgxLDEpLGdlLndyaXRlX3NoaWZ0KChRPzE6MikqTC5sZW5ndGgsTCxRPyJzYmNzIjoidXRmMTZsZSIpLGdlfShRLEwpKX0pfShRLHksTCksZnVuY3Rpb24gdFIoeSxQLEwpe1AmJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oUSl7Zm9yKHZhciBy'@;
put 'ZT1RWzBdO3JlPD1RWzFdOysrcmUpbnVsbCE9UFtyZV0mJkNpKHksIkZvcm1hdCIsWHIocmUsUFtyZV0sTCkpfSl9KFEseS5TU0YsTCksZnVuY3Rpb24gblIoeSxQKXtmb3IodmFyIEw9MDtMPDE2OysrTClDaSh5LCJYRiIsQ20oe251bUZtdElkOjAsc3R5bGU6ITB9LDAsUCkpO1AuY2VsbFhm'@;
put 'cy5mb3JFYWNoKGZ1bmN0aW9uKFEpe0NpKHksIlhGIixDbShRLDAsUCkpfSl9KFEsTCksQ2koUSwiUGFsZXR0ZSIsZnVuY3Rpb24gJHcoeSl7dmFyIFA9cHIoMjI2KTtQLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgTD0wO0w8NTY7KytMKXt2YXIgUT15W0wrOF18fGgzW0wrOF07UC53cml0'@;
put 'ZV9zaGlmdCgxLFFbMF0pLFAud3JpdGVfc2hpZnQoMSxRWzFdKSxQLndyaXRlX3NoaWZ0KDEsUVsyXSksUC53cml0ZV9zaGlmdCgxLDApfXJldHVybiBQfShDcikpLENyPW9uKGgzKSx2ZSYmQ2koUSwiVXNlc0VMRnMiLEZsKCExKSk7dmFyIEJlPVEuZW5kKCksR2U9d2MoKTt2ZSYmQ2koR2Us'@;
put 'IkNvdW50cnkiLGZ1bmN0aW9uIHREKHkpe3JldHVybiB5fHwoeT1wcig0KSkseS53cml0ZV9zaGlmdCgyLDEpLHkud3JpdGVfc2hpZnQoMiwxKSx5fSgpKSx2ZSYmTC5TdHJpbmdzJiZmdW5jdGlvbiB0Xyh5LFAsTCxRKXt2YXIgcmU9UXx8KEx8fFtdKS5sZW5ndGh8fDA7aWYocmU8PTgyMjQp'@;
put 'cmV0dXJuIENpKHksUCxMLHJlKTt2YXIgZ2U9K1B8fCtTTVtQXTtpZighaXNOYU4oZ2UpKXtmb3IodmFyIF9lPUwucGFydHN8fFtdLHZlPTAsU2U9MCxIZT0wO0hlKyhfZVt2ZV18fDgyMjQpPD04MjI0OylIZSs9X2VbdmVdfHw4MjI0LHZlKys7dmFyIEJlPXkubmV4dCg0KTtmb3IoQmUud3Jp'@;
put 'dGVfc2hpZnQoMixnZSksQmUud3JpdGVfc2hpZnQoMixIZSkseS5wdXNoKEwuc2xpY2UoU2UsU2UrSGUpKSxTZSs9SGU7U2U8cmU7KXtmb3IoKEJlPXkubmV4dCg0KSkud3JpdGVfc2hpZnQoMiw2MCksSGU9MDtIZSsoX2VbdmVdfHw4MjI0KTw9ODIyNDspSGUrPV9lW3ZlXXx8ODIyNCx2ZSsr'@;
put 'O0JlLndyaXRlX3NoaWZ0KDIsSGUpLHkucHVzaChMLnNsaWNlKFNlLFNlK0hlKSksU2UrPUhlfX19KEdlLCJTU1QiLGZ1bmN0aW9uIGJzKHksUCl7dmFyIEw9cHIoOCk7TC53cml0ZV9zaGlmdCg0LHkuQ291bnQpLEwud3JpdGVfc2hpZnQoNCx5LlVuaXF1ZSk7Zm9yKHZhciBRPVtdLHJlPTA7'@;
put 'cmU8eS5sZW5ndGg7KytyZSlRW3JlXT1qMCh5W3JlXSxQKTt2YXIgZ2U9UyhbTF0uY29uY2F0KFEpKTtyZXR1cm4gZ2UucGFydHM9W0wubGVuZ3RoXS5jb25jYXQoUS5tYXAoZnVuY3Rpb24oX2Upe3JldHVybiBfZS5sZW5ndGh9KSksZ2V9KEwuU3RyaW5ncyxMKSksQ2koR2UsIkVPRiIpO3Zh'@;
put 'ciBudD1HZS5lbmQoKSxkdD13YygpLEN0PTAsY3Q9MDtmb3IoY3Q9MDtjdDx5LlNoZWV0TmFtZXMubGVuZ3RoOysrY3QpQ3QrPSh2ZT8xMjoxMSkrKHZlPzI6MSkqeS5TaGVldE5hbWVzW2N0XS5sZW5ndGg7dmFyIGJ0PUJlLmxlbmd0aCtDdCtudC5sZW5ndGg7Zm9yKGN0PTA7Y3Q8eS5TaGVl'@;
put 'dE5hbWVzLmxlbmd0aDsrK2N0KUNpKGR0LCJCb3VuZFNoZWV0OCIsWTAoe3BvczpidCxoczooZ2VbY3RdfHx7fSkuSGlkZGVufHwwLGR0OjAsbmFtZTp5LlNoZWV0TmFtZXNbY3RdfSxMKSksYnQrPVBbY3RdLmxlbmd0aDt2YXIga3Q9ZHQuZW5kKCk7aWYoQ3QhPWt0Lmxlbmd0aCl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIkJTOCAiK0N0KyIgIT0gIitrdC5sZW5ndGgpO3ZhciBUdD1bXTtyZXR1cm4gQmUubGVuZ3RoJiZUdC5wdXNoKEJlKSxrdC5sZW5ndGgmJlR0LnB1c2goa3QpLG50Lmxlbmd0aCYmVHQucHVzaChudCksU2EoW1R0XSl9ZnVuY3Rpb24gaV8oeSxQKXt2YXIgTD1QfHx7fTtzd2l0'@;
put 'Y2goTC5iaWZmfHwyKXtjYXNlIDg6Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBvUih5LFApe3ZhciBMPVB8fHt9LFE9W107Rm0oUCYmUC5QUEl8fDk2KSx5JiYheS5TU0YmJih5LlNTRj13LmdldF90YWJsZSgpKSx5JiZ5LlNTRiYmKEoodyksdy5sb2FkX3RhYmxlKHkuU1NGKSxMLnJldnNzZj1B'@;
put 'ZSh5LlNTRiksTC5yZXZzc2ZbeS5TU0ZbNjU1MzVdXT0wLEwuc3NmPXkuU1NGKSx5LlN0eWxlcz17Rm9udHM6TC5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpMLkZpbGxzPVt7'@;
put 'cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpMLkJvcmRlcnM9W3t9XSxEWEY6TC5EWEY9eS5TdHlsZXMmJnkuU3R5bGVzLkRYRnx8W119LFoxKEwuRm9udHNbMF0pLEwuU3RyaW5ncz1bXSxMLlN0cmluZ3MuQ291bnQ9MCxMLlN0cmluZ3MuVW5p'@;
put 'cXVlPTAsSzA/TC5yZXZTdHJpbmdzPW5ldyBNYXA6KEwucmV2U3RyaW5ncz17fSxMLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBMLnJldlN0cmluZ3MuZm9vKSxoXyhMKSxMLmNlbGxYZnM9W10sTC5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sZ3UoTC5jZWxsWGZzLEwuY2VsbFN0'@;
put 'eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSx5LlByb3BzfHwoeS5Qcm9wcz17fSk7Zm9yKHZhciByZT0wO3JlPHkuU2hlZXROYW1lcy5sZW5ndGg7KytyZSlRW1EubGVuZ3RoXT1pUihyZSxMLHkpO3JldHVybiBRLnVuc2hpZnQoRU0oeSxRLEwpKSxTYShbUV0pfSh5LFApO2Nhc2Ug'@;
put 'NDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiBoWSh5LFApe3ZhciBMPVB8fHt9O251bGwhPXRlJiZudWxsPT1MLmRlbnNlJiYoTC5kZW5zZT10ZSk7Zm9yKHZhciBRPXdjKCkscmU9MCxnZT0wO2dlPHkuU2hlZXROYW1lcy5sZW5ndGg7KytnZSl5LlNoZWV0TmFtZXNbZ2VdPT1MLnNo'@;
put 'ZWV0JiYocmU9Z2UpO2lmKDA9PXJlJiZMLnNoZWV0JiZ5LlNoZWV0TmFtZXNbMF0hPUwuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIrTC5zaGVldCk7cmV0dXJuIENpKFEsND09TC5iaWZmPzEwMzM6Mz09TC5iaWZmPzUyMTo5LEQ0KDAsMTYsTCkpLGZ1bmN0aW9u'@;
put 'IGRZKHksUCxMLFEpe3ZhciBfZSxyZT1BcnJheS5pc0FycmF5KFApLGdlPU9pKFBbIiFyZWYiXXx8IkExIiksdmU9IiIsU2U9W107aWYoZ2UuZS5jPjI1NXx8Z2UuZS5yPjE2MzgzKXtpZihRLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKFBbIiFyZWYiXXx8IkExIikrIiBleGNlZWRz'@;
put 'IGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7Z2UuZS5jPU1hdGgubWluKGdlLmUuYywyNTUpLGdlLmUucj1NYXRoLm1pbihnZS5lLmMsMTYzODMpLF9lPU9vKGdlKX1mb3IodmFyIEhlPWdlLnMucjtIZTw9Z2UuZS5yOysrSGUpe3ZlPUhzKEhlKTtmb3IodmFyIEJlPWdlLnMuYztCZTw9Z2Uu'@;
put 'ZS5jOysrQmUpe0hlPT09Z2Uucy5yJiYoU2VbQmVdPU5zKEJlKSksX2U9U2VbQmVdK3ZlO3ZhciBHZT1yZT8oUFtIZV18fFtdKVtCZV06UFtfZV07R2UmJnJfKHksR2UsSGUsQmUpfX19KFEseS5TaGVldHNbeS5TaGVldE5hbWVzW3JlXV0sMCxMKSxDaShRLDEwKSxRLmVuZCgpfSh5LFApfXRo'@;
put 'cm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIrTC5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIEZ1PWZ1bmN0aW9uKCl7dmFyIHk9e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIEwoR2UsbnQpe3ZhciBkdD1udHx8e307bnVsbCE9dGUmJm51'@;
put 'bGw9PWR0LmRlbnNlJiYoZHQuZGVuc2U9dGUpO3ZhciBDdD1kdC5kZW5zZT9bXTp7fSxjdD0oR2U9R2UucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighY3QpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5vdCBmaW5kIDx0YWJsZT4i'@;
put 'KTt2YXIgYnQ9R2UubWF0Y2goLzxcL3RhYmxlL2kpLEZ0PWN0LmluZGV4LGt0PWJ0JiZidC5pbmRleHx8R2UubGVuZ3RoLFR0PWZ1bmN0aW9uIGZ0KHksUCxMKXtpZihIbnx8InN0cmluZyI9PXR5cGVvZiBQKXJldHVybiB5LnNwbGl0KFApO2Zvcih2YXIgUT15LnNwbGl0KFApLHJlPVtRWzBd'@;
put 'XSxnZT0xO2dlPFEubGVuZ3RoOysrZ2UpcmUucHVzaChMKSxyZS5wdXNoKFFbZ2VdKTtyZXR1cm4gcmV9KEdlLnNsaWNlKEZ0LGt0KSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+IiksWnQ9LTEscG49MCxLbj0wLHVuPTAscW49e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAsYzowfX0sem49W107Zm9y'@;
put 'KEZ0PTA7RnQ8VHQubGVuZ3RoOysrRnQpe3ZhciBrbj1UdFtGdF0udHJpbSgpLGVyPWtuLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9ZXIpe2lmKCI8dGQiPT1lcnx8Ijx0aCI9PWVyKXt2YXIgdHI9a24uc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3Ioa3Q9MDtrdDx0ci5sZW5n'@;
put 'dGg7KytrdCl7dmFyIFpuPXRyW2t0XS50cmltKCk7aWYoWm4ubWF0Y2goLzx0W2RoXS9pKSl7Zm9yKHZhciBCcj1abixzaT0wOyI8Ij09QnIuY2hhckF0KDApJiYoc2k9QnIuaW5kZXhPZigiPiIpKT4tMTspQnI9QnIuc2xpY2Uoc2krMSk7Zm9yKHZhciB4aT0wO3hpPHpuLmxlbmd0aDsrK3hp'@;
put 'KXt2YXIgTGk9em5beGldO0xpLnMuYz09cG4mJkxpLnMucjxadCYmWnQ8PUxpLmUuciYmKHBuPUxpLmUuYysxLHhpPS0xKX12YXIgUXI9bG4oWm4uc2xpY2UoMCxabi5pbmRleE9mKCI+IikpKTt1bj1Rci5jb2xzcGFuPytRci5jb2xzcGFuOjEsKChLbj0rUXIucm93c3Bhbik+MXx8dW4+MSkm'@;
put 'JnpuLnB1c2goe3M6e3I6WnQsYzpwbn0sZTp7cjpadCsoS258fDEpLTEsYzpwbit1bi0xfX0pO3ZhciB1cj1Rci50fHxRclsiZGF0YS10Il18fCIiO2lmKCFCci5sZW5ndGgpe3BuKz11bjtjb250aW51ZX1pZihCcj1PYyhCcikscW4ucy5yPlp0JiYocW4ucy5yPVp0KSxxbi5lLnI8WnQmJihx'@;
put 'bi5lLnI9WnQpLHFuLnMuYz5wbiYmKHFuLnMuYz1wbikscW4uZS5jPHBuJiYocW4uZS5jPXBuKSxCci5sZW5ndGgpe3ZhciBBbj17dDoicyIsdjpCcn07ZHQucmF3fHwhQnIudHJpbSgpLmxlbmd0aHx8InMiPT11cnx8KEFuPSRuKEJyLGR0KSksZHQuZGVuc2U/KEN0W1p0XXx8KEN0W1p0XT1b'@;
put 'XSksQ3RbWnRdW3BuXT1Bbik6Q3RbZGkoe3I6WnQsYzpwbn0pXT1Bbixwbis9dW59fX19fWVsc2V7aWYoKytadCxkdC5zaGVldFJvd3MmJmR0LnNoZWV0Um93czw9WnQpey0tWnQ7YnJlYWt9cG49MH19cmV0dXJuIEN0WyIhcmVmIl09T28ocW4pLHpuLmxlbmd0aCYmKEN0WyIhbWVyZ2VzIl09'@;
put 'em4pLEN0fWZ1bmN0aW9uIHJlKEdlLG50LGR0LEN0LGN0LGJ0KXt2YXIgVHQsRnQ9R2VbIiFtZXJnZXMiXXx8W10sa3Q9W10sWnQ9e3N0eWxlOltdfSxwbj0hMTtmdW5jdGlvbiBLbihUaSxZbyxsbyl7dmFyIEFvPSIiLHhvPTA7aWYoVHRbVGldKXN3aXRjaChUdFtUaV0uc3R5bGUpe2Nhc2Ui'@;
put 'dGhpbiI6Y2FzZSJoYWlyIjpBbz0ic29saWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOkFvPSJzb2xpZCIseG89MjticmVhaztjYXNlInRoaWNrIjpBbz0ic29saWQiLHhvPTM7YnJlYWs7Y2FzZSJkb3VibGUiOkFvPSJkb3VibGUiLHhvPTM7YnJlYWs7Y2FzZSJkb3R0ZWQiOmNhc2UiZGFz'@;
put 'aERvdERvdCI6QW89ImRvdHRlZCIseG89MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3QiOkFvPSJkb3R0ZWQiLHhvPTI7YnJlYWs7Y2FzZSJkYXNoZWQiOmNhc2UiZGFzaERvdCI6Y2FzZSJzbGFudERhc2hEb3QiOkFvPSJkYXNoZWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoZWQi'@;
put 'OmNhc2UibWVkaXVtRGFzaERvdCI6QW89ImRhc2hlZCIseG89Mn1lOmlmKDA9PXhvKXtzd2l0Y2goVGkpe2Nhc2UidG9wIjotLVlvO2JyZWFrO2Nhc2UibGVmdCI6LS1sbzticmVhaztjYXNlImJvdHRvbSI6KytZbzticmVhaztjYXNlInJpZ2h0IjorK2xvfXZhciBoaT1Zbz49MCYmbG8+PTA/'@;
put 'Q3QuZGVuc2U/KEdlW1lvXXx8W10pW2xvXTpHZVtkaSh7cjpZbyxjOmxvfSldOm51bGw7aWYoaGkpe2lmKGhpLnMmJmhpLnNbe3RvcDoiYm90dG9tIixib3R0b206InRvcCIsbGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0In1bVGldXSlicmVhayBlO2hpLnMmJmhpLnMuZmdDb2xvciYmKHhvPTEp'@;
put 'fVR0LmZnQ29sb3ImJih4bz0xKSwhaGkmJnBuJiYwPT14byYmKHhvPTEpfTAhPXhvJiZ4byYmKFp0LnN0eWxlLnB1c2goImJvcmRlci0iK1RpKyItc3R5bGU6IisoQW98fCJ0cmFuc3BhcmVudCIpKSxadC5zdHlsZS5wdXNoKCJib3JkZXItIitUaSsiLXdpZHRoOiIreG8rInB4IiksIiI9PUFv'@;
put 'P1p0LnN0eWxlLnB1c2goImJvcmRlci0iK1RpKyItY29sb3I6IHRyYW5zcGFyZW50Iik6VHRbVGldLmNvbG9yJiZUdFtUaV0uY29sb3IucmdiJiZadC5zdHlsZS5wdXNoKCJib3JkZXItIitUaSsiLWNvbG9yOiMiK091KFR0W1RpXS5jb2xvci5yZ2IpKSl9Zm9yKHZhciB1bj1udC5zLmM7dW48'@;
put 'PW50LmUuYzsrK3VuKXtmb3IodmFyIHFuPTAsem49MCxrbj0wO2tuPEZ0Lmxlbmd0aDsrK2tuKWlmKCEoRnRba25dLnMucj5kdHx8RnRba25dLnMuYz51bnx8RnRba25dLmUucjxkdHx8RnRba25dLmUuYzx1bikpe2lmKEZ0W2tuXS5zLnI8ZHR8fEZ0W2tuXS5zLmM8dW4pe3FuPS0xO2JyZWFr'@;
put 'fXFuPUZ0W2tuXS5lLnItRnRba25dLnMucisxLHpuPUZ0W2tuXS5lLmMtRnRba25dLnMuYysxO2JyZWFrfWlmKCEocW48MCkpe3ZhciBlcj1kaSh7cjpkdCxjOnVufSksdHI9Q3QuZGVuc2U/KEdlW2R0XXx8W10pW3VuXTpHZVtlcl07dHI/cG49ITE6KHBuPSEwLHRyPXt0OiJ6IixzOnt9fSk7'@;
put 'dmFyIFpuPSJ6Ij09dHIudD8iIjp0ci5ofHxybyh0ci53fHwoY3UodHIpLHRyLncpfHwiIik7aWYoWnQ9e3N0eWxlOltdfSxUdD10ci5zKXt2YXIgQnI9MTtpZigoInN1cGVyIj09VHQudmFsaWdufHwic3ViIj09VHQudmFsaWduKSYmKEJyPS44Myxabj1Tcigic3BhbiIsWm4se3N0eWxlOiJ2'@;
put 'ZXJ0aWNhbC1hbGlnbjogIitUdC52YWxpZ259KSksWnQuc3R5bGUucHVzaCgiZm9udC13ZWlnaHQ6IisoVHQuYm9sZD83MDA6NDAwKSksVHQuaXRhbGljJiZadC5zdHlsZS5wdXNoKCJmb250LXN0eWxlOiBpdGFsaWMiKSwoVHQudW5kZXJsaW5lfHxUdC5zdHJpa2UpJiZadC5zdHlsZS5wdXNo'@;
put 'KCJ0ZXh0LWRlY29yYXRpb246IisoVHQudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKFR0LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxUdC5jb2xvciYmVHQuY29sb3IucmdiJiZadC5zdHlsZS5wdXNoKCJjb2xvcjogIyIrT3UoVHQuY29sb3IucmdiKSksVHQubmFtZSYmWnQuc3R5'@;
put 'bGUucHVzaCgiZm9udC1mYW1pbHk6IitUdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxUdC5zeiYmWnQuc3R5bGUucHVzaCgiZm9udC1zaXplOiIrVHQuc3oqQnIrInB0IiksbnVsbCE9PVR0LnBhdHRlcm5UeXBlJiZUdC5mZ0NvbG9yJiZUdC5mZ0NvbG9yLnJnYiYmWnQuc3R5bGUucHVzaCgiYmFj'@;
put 'a2dyb3VuZC1jb2xvcjogIyIrT3UoVHQuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5mb3JFYWNoKGZ1bmN0aW9uKFRpKXtLbihUaSxkdCx1bil9KSxxbj4xfHx6bj4xKXt2YXIgc2k9ZGkoe3I6ZHQrcW4tMSxjOnVuK3puLTF9KSx4aT1DdC5kZW5zZT8oR2VbZHQrcW4tMV18fFtdKVt1'@;
put 'bit6bi0xXTpHZVtzaV0sUXI9VHQ7VHQ9eGkmJnhpLnN8fFR0LFsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKFRpKXtLbihUaSxkdCx1bil9KSxUdD1Rcn1lbHNlWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oVGkpe0tuKFRpLGR0LHVuKX0pO2lmKFR0LmFs'@;
put 'aWdubWVudCl7aWYoVHQuYWxpZ25tZW50Lmhvcml6b250YWw/WnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogIisoeVtUdC5hbGlnbm1lbnQuaG9yaXpvbnRhbF18fFR0LmFsaWdubWVudC5ob3Jpem9udGFsKSk6Im4iPT10ci50JiZadC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIp'@;
put 'LFR0LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIHVyPVR0LmFsaWdubWVudC52ZXJ0aWNhbDtadC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIisoImNlbnRlciI9PXVyPyJtaWRkbGUiOnVyKSl9aWYoVHQuYWxpZ25tZW50LndyYXBUZXh0KVp0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNl'@;
put 'OiBwcmUtd3JhcCIpO2Vsc2V7dmFyIEFuPUN0LmRlbnNlPyhHZVtkdF18fFtdKVt1bisxXTpHZVtkaSh7cjpkdCxjOnVuKzF9KV07QW4mJiJ6IiE9QW4udCYmWnQuc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIil9fWVsc2UibiI9PXRyLnQmJlp0LnN0eWxlLnB1c2goInRleHQt'@;
put 'YWxpZ246IHJpZ2h0Iik7dmFyIHZyPSgoR2VbIiFjb2xzIl18fFtdKVt1bl18fHt9KS53cHg7bnVsbD09dnImJih2cj0oKEdlWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCl9dmFyIHJyPTA7aWYoem48PTEmJnFuPD0xJiYocnI9KChHZVsiIWNvbHMiXXx8W10pW3VuXXx8e30p'@;
put 'LndweCkmJlp0LnN0eWxlLnB1c2goIndpZHRoOiAiK3JyKyJweCIpLEdlWyIhY29uZGZtdCJdJiZnZSh0cixkdCx1bixHZVsiIWNvbmRmbXQiXSxadC5zdHlsZSxHZSksMD09WnQuc3R5bGUubGVuZ3RoP2RlbGV0ZSBadC5zdHlsZTpadC5zdHlsZT1adC5zdHlsZS5qb2luKCI7IiksQ3QuY3Nz'@;
put 'KXt2YXIgU249Y3QuaW5kZXhPZihadC5zdHlsZSk7LTE9PVNuJiYoY3QucHVzaChadC5zdHlsZSksU249Y3QubGVuZ3RoLTEpLGRlbGV0ZSBadC5zdHlsZSxadC5jbGFzcz0ic2pzIisoYnR8fCIiKSsiLSIrU259cW4+MSYmKFp0LnJvd3NwYW49cW4pLHpuPjEmJihadC5jb2xzcGFuPXpuKSxD'@;
put 'dC5lZGl0YWJsZT9abj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK1puKyI8L3NwYW4+Ijp0ciYmKFp0WyJkYXRhLXQiXT10ciYmdHIudHx8InoiLG51bGwhPXRyLnYmJihadFsiZGF0YS12Il09dHIudiksbnVsbCE9dHIueiYmKFp0WyJkYXRhLXoiXT10ci56KSksWnQuaWQ9KEN0'@;
put 'LmlkfHwic2pzIikrIi0iK2VyLGt0LnB1c2goU3IoInRkIixabixadCkpfX12YXIgd2ksbXI9e3N0eWxlOltdfTsod2k9R2VbIiFzaGVldEZvcm1hdCJdKSYmd2kucm93JiYoSTMod2kucm93KSx3aS5yb3cuaHB4JiYobXIuc3R5bGUucHVzaChbImhlaWdodCIsd2kucm93LmhweCsicHgiXSks'@;
put 'bXIuaGVpZ2h0PU1hdGgucm91bmQod2kucm93LmhweCkpKTt2YXIgVXI9R2VbIiFyb3dzIl07aWYoVXImJlVyW2R0XSl7dmFyIGppPVVyW2R0XTtqaS5ocHgmJihtci5zdHlsZS5wdXNoKFsiaGVpZ2h0IiwramkuaHB4KyJweCJdKSxtci5oZWlnaHQ9TWF0aC5yb3VuZChqaS5ocHgpKSxqaS5o'@;
put 'aWRkZW4mJm1yLnN0eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgX289W107cmV0dXJuIG1yLnN0eWxlPW1yLnN0eWxlLnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24oVGkpe3JldHVybiEoX28uaW5kZXhPZihUaVswXSk+LTF8fChfby5wdXNoKFRpWzBdKSwwKSl9KS5tYXAoZnVu'@;
put 'Y3Rpb24oVGkpe3JldHVybiBUaVswXSsiOiIrVGlbMV19KSwwPT1tci5zdHlsZS5sZW5ndGg/ZGVsZXRlIG1yLnN0eWxlOm1yLnN0eWxlPW1yLnN0eWxlLmpvaW4oIjsiKSxTcigidHIiLGt0LmpvaW4oIiIpLG1yKX1mdW5jdGlvbiBnZShHZSxudCxkdCxDdCxjdCxidCl7Q3QuZm9yRWFjaChm'@;
put 'dW5jdGlvbihGdCl7aWYoRnQuX3JlZnx8KEZ0Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBGdC5yZWY/V3MoRnQucmVmKTpGdC5yZWYpLCEoRnQuX3JlZi5zLmM+ZHR8fEZ0Ll9yZWYuZS5jPGR0fHxGdC5fcmVmLnMucj5udHx8RnQuX3JlZi5lLnI8bnR8fCJzY2FsZSIhPT1GdC50KSl7aWYoIm4i'@;
put 'IT1HZS50KXJldHVybjt2YXIga3Q7aWYobnVsbD09RnQuX21pbil7RnQuX3ZhbHVlcz1bXTtmb3IodmFyIFR0PUZ0Ll9yZWYucy5yO1R0PD1GdC5fcmVmLmUucjsrK1R0KWZvcih2YXIgWnQ9RnQuX3JlZi5zLmM7WnQ8PUZ0Ll9yZWYuZS5jOysrWnQpe3ZhciBwbj1BcnJheS5pc0FycmF5KGJ0'@;
put 'KT8oYnRbVHRdfHxbXSlbWnRdOmJ0W2RpKHtyOlR0LGM6WnR9KV07cG4mJiJuIj09cG4udCYmRnQuX3ZhbHVlcy5wdXNoKHBuLnYpfWlmKEZ0Ll92YWx1ZXMuc29ydChmdW5jdGlvbihLbix1bil7cmV0dXJuIEtuLXVufSksRnQuX21pbj1GdC5fdmFsdWVzWzBdLEZ0Ll9tYXg9RnQuX3ZhbHVl'@;
put 'cy5zbGljZSgtMSlbMF0sRnQuX2JhbmQ9RnQuX21heC1GdC5fbWluLEZ0LmNtaWQpe3N3aXRjaChGdC5jbWlkLnQpe2Nhc2UibnVtIjpGdC5fbWlkPUZ0LmNtaWQudjticmVhaztjYXNlInBlcmNlbnQiOkZ0Ll9taWQ9RnQuY21pZC52LzEwMCpGdC5fYmFuZCtGdC5fbWluO2JyZWFrO2Nhc2Ui'@;
put 'cGVyY2VudGlsZSI6RnQuX21pZD1mdW5jdGlvbiBmbih5LFApe2lmKDA9PVApcmV0dXJuIHlbMF07aWYoMTAwPT1QKXJldHVybiB5W3kubGVuZ3RoLTFdO3ZhciBRPVAvMTAwKih5Lmxlbmd0aC0xKSxyZT1RLU1hdGguZmxvb3IoUSk7cmV0dXJuIHJlKnlbTWF0aC5jZWlsKFEpXSsoMS1yZSkq'@;
put 'eVtNYXRoLmZsb29yKFEpXX0oRnQuX3ZhbHVlcyxGdC5jbWlkLnYpfUZ0Ll9iYW5kaD1GdC5fbWF4LUZ0Ll9taWQsRnQuX2JhbmRsPUZ0Ll9taWQtRnQuX21pbn19KGt0PUZ0LmNtaWQ/R2Uudj49RnQuX21pZD9SOShGdC5jbWlkLmNvbG9yLEZ0LmNtYXguY29sb3IsKEdlLnYtRnQuX21pZCkv'@;
put 'RnQuX2JhbmRoKTpSOShGdC5jbWluLmNvbG9yLEZ0LmNtaWQuY29sb3IsKEdlLnYtRnQuX21pbikvRnQuX2JhbmRsKTpSOShGdC5jbWluLmNvbG9yLEZ0LmNtYXguY29sb3IsKEdlLnYtRnQuX21pbikvRnQuX2JhbmQpKSYmY3QucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIra3QpfX0pfWZ1'@;
put 'bmN0aW9uIF9lKEdlLG50KXt2YXIgZHQ9e3NwYW46bnR8fDEsc3R5bGU6IiJ9LEN0PVtdO3JldHVybiBHZSYmR2Uud3B4JiYoZHQud2lkdGg9TWF0aC5yb3VuZCg0KkdlLndweC8zKSxDdC5wdXNoKCJ3aWR0aDoiKyhHZS53cHh8fDApKyJweCIpKSxDdC5sZW5ndGg+MCYmKGR0LnN0eWxlPUN0'@;
put 'LmpvaW4oIjsiKSksU3IoImNvbCIsbnVsbCxkdCl9ZnVuY3Rpb24gdmUoR2UsbnQsZHQpe3ZhciBDdD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtk'@;
put 'dCYmZHQuaWQmJihDdC5pZD1kdC5pZCk7dmFyIGN0PUdlWyIhY29scyJdLGJ0PUdlWyIhc2hlZXRGb3JtYXQiXTtpZihHZSYmY3Qpe2Zvcih2YXIgRnQ9MCxUdD1udC5zLmM7VHQ8PW50LmUuYzsrK1R0KXt2YXIgWnQ9Y3RbVHRdO0Z0Kz1adCYmWnQud3B4P1p0LndweDpidCYmYnQuY29sJiZi'@;
put 'dC5jb2wud3B4P2J0LmNvbC53cHg6NTN9Q3Quc3R5bGUrPSI7d2lkdGg6IitGdCsicHgifXZhciBLbixwbj1bIjx0YWJsZSIrUGEoQ3QpKyI+Il07aWYocG4ucHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRl'@;
put 'eHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisoZHQmJmR0LmdyaWRjb2xvcj9kdC5ncmlkY29sb3I6aG4oR2VbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpu'@;
put 'b3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxwbi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysobnQuZS5jLW50LnMuYysxKSsnIj4nKSxjdCl7Zm9yKHZhciB1bj1udC5zLmM7dW48TWF0aC5taW4oY3QubGVuZ3RoLG50LmUuYysxKTsrK3VuKSEoS249Y3RbdW5dKSYm'@;
put 'YnQmJmJ0LmNvbCYmKEtuPWJ0LmNvbCksS258fChLbj17d3B4OjUzfSkscG4ucHVzaChfZShLbiwxKSk7bnQuZS5jLW50LnMuYysxPmN0Lmxlbmd0aCYmKEtuPW51bGwsYnQmJmJ0LmNvbCYmKEtuPWJ0LmNvbCksS258fChLbj17d3B4OjUzfSkscG4ucHVzaChfZShLbixudC5lLmMtbnQucy5j'@;
put 'KzEtY3QubGVuZ3RoKSkpfWVsc2UgS249bnVsbCxidCYmYnQuY29sJiYoS249YnQuY29sKSxLbnx8KEtuPXt3cHg6NTN9KSxwbi5wdXNoKF9lKEtuLG50LmUuYy1udC5zLmMrMSkpO3JldHVybiBwbi5wdXNoKCI8L2NvbGdyb3VwPiIpLHBuLmpvaW4oIiIpfXZhciBTZT0nPGh0bWw+PGhlYWQ+'@;
put 'PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLEhlPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFEoR2UsbnQpe3JldHVybiBFZChMKEdlLG50KSxudCl9LHRvX3NoZWV0Okws'@;
put 'X3JvdzpyZSxCRUdJTjpTZSxFTkQ6SGUsX3ByZWFtYmxlOnZlLGh0bWxfdG9fcnM6ZnVuY3Rpb24gUChHZSl7dmFyIG50PVtdLGR0PXt9LEN0PTA7cmV0dXJuIEdlLnJlcGxhY2UoLzwoXC8/KShbXlxzPz4hXC86XSo6fCkoW15ccz8+OlwvXSspW14+XSo+L2dtLGZ1bmN0aW9uKGN0LGJ0LEZ0'@;
put 'LGt0LFR0KXt2YXIgcG49am4obG4oY3QpWzBdKS5yZXBsYWNlKC9bPFwvPl0vZywiIiksS249R2Uuc2xpY2UoQ3QsVHQpLnJlcGxhY2UoL1xzL2csIiAiKTtzd2l0Y2goS24ubGVuZ3RoPjAmJihudC5wdXNoKHt0OiJzIix2OktuLHM6ZHR9KSxkdD1vbihkdCkpLHBuLnRvTG93ZXJDYXNlKCkp'@;
put 'e2Nhc2UiYiI6Ii8iIT1idD9kdC5ib2xkPSEwOmRlbGV0ZSBkdC5ib2xkO2JyZWFrO2Nhc2UiaSI6Ii8iIT1idD9kdC5pdGFsaWM9ITA6ZGVsZXRlIGR0Lml0YWxpYzticmVhaztjYXNlInUiOiIvIiE9YnQ/ZHQudW5kZXJsaW5lPTE6ZGVsZXRlIGR0LnVuZGVybGluZTticmVhaztjYXNlInMi'@;
put 'OiIvIiE9YnQ/ZHQuc3RyaWtlPSEwOmRlbGV0ZSBkdC5zdHJpa2V9cmV0dXJuIEN0PVR0K2N0Lmxlbmd0aCxjdH0pLG50fSxmcm9tX3NoZWV0OmZ1bmN0aW9uIEJlKEdlLG50KXt2YXIgZHQ9bnR8fHt9LGN0PW51bGwhPWR0LmZvb3Rlcj9kdC5mb290ZXI6SGUsYnQ9W251bGwhPWR0LmhlYWRl'@;
put 'cj9kdC5oZWFkZXI6U2UsIiJdLEZ0PVtdLGt0PShuZXcgRGF0ZSkudmFsdWVPZigpO0dlfHwoR2U9e30pLEdlWyIhcmVmIl18fChHZVsiIXJlZiJdPSJBMTpBMSIpO3ZhciBUdD1XcyhHZVsiIXJlZiJdKTtpZihkdC5kZW5zZT1BcnJheS5pc0FycmF5KEdlKSxkdC5za2lwZW5kKXt2YXIgWnQ9'@;
put 'VHQuZS5yO2U6Zm9yKDtadD49VHQucy5yOy0tWnQpZm9yKHZhciBwbj1UdC5lLmM7cG4+PVR0LnMuYzstLXBuKWlmKG51bGwhPSgoZHQuZGVuc2U/KEdlW1p0XXx8W10pW3BuXTpHZVtkaSh7cjpadCxjOnBufSldKXx8e30pLnYpYnJlYWsgZTtUdC5lLnI9WnQ7dmFyIEtuPVR0LmUuYztlOmZv'@;
put 'cig7S24+PVR0LnMuYzstLUtuKWZvcih2YXIgdW49VHQuZS5yO3VuPj1UdC5zLnI7LS11bilpZihudWxsIT0oKGR0LmRlbnNlPyhHZVt1bl18fFtdKVtLbl06R2VbZGkoe3I6dW4sYzpLbn0pXSl8fHt9KS52KWJyZWFrIGU7VHQuZS5jPUtufWJ0LnB1c2godmUoR2UsVHQsZHQpKTtmb3IodmFy'@;
put 'IHFuPVR0LnMucjtxbjw9VHQuZS5yOysrcW4pYnQucHVzaChyZShHZSxUdCxxbixkdCxGdCxrdCkpO3JldHVybiBidC5wdXNoKCI8L3RhYmxlPiIrY3QpLGR0LmNzcyYmKGJ0WzFdPSI8c3R5bGU+XG4iK0Z0Lm1hcChmdW5jdGlvbih6bixrbil7cmV0dXJuIi5zanMiK2t0KyItIitrbisiIHsi'@;
put 'K3puKyJ9In0pLmpvaW4oIlxuIikrIjwvc3R5bGU+IiksYnQuam9pbigiIil9fX0oKTtmdW5jdGlvbiB2Zih5LFAsTCl7dmFyIFE9e307aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU+InUiKXJldHVybiBRO3ZhciByZT1nZXRDb21wdXRlZFN0eWxlKHkpO2lmKCg3MDA9PXJlWyJmb250LXdl'@;
put 'aWdodCJdfHwiYm9sZCI9PXJlWyJmb250LXdlaWdodCJdKSYmKFEuYm9sZD0hMCksKHJlWyJmb250LXN0eWxlIl18fCIiKS5tYXRjaCgvaXRhbGljLykmJihRLml0YWxpYz0hMCksKHJlWyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC91bmRlcmxpbmUvKSYmKFEudW5kZXJsaW5lPTEp'@;
put 'LChyZVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihRLnN0cmlrZT0xKSxwYXJzZUludChyZVsiZm9udC1zaXplIl0pJiYoUS5zej1wYXJzZUZsb2F0KHJlWyJmb250LXNpemUiXSkqKHJlWyJmb250LXNpemUiXS5tYXRjaCgvcHgvKT8zLzQ6MSkpLHJl'@;
put 'WyJmb250LWZhbWlseSJdJiYoUS5uYW1lPXJlWyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSkscmUuY29sb3Ipe3ZhciBnZT1ONChyZS5jb2xvci50b0xvd2VyQ2FzZSgpLCEwKTtnZT49MCYmKFEuY29sb3I9e3JnYjpnZX0pfXN3aXRjaChyZVsi'@;
put 'dGV4dC10cmFuc2Zvcm0iXSYmKFEudGV4dF90cmFuc2Zvcm09cmVbInRleHQtdHJhbnNmb3JtIl0udG9Mb3dlckNhc2UoKSksIm5vbmUiIT0ocmVbInRleHQtc2hhZG93Il18fCJub25lIikmJihRLnNoYWRvdz0hMCkscmVbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50ZXIiOlEuYWxpZ25tZW50'@;
put 'PXtob3Jpem9udGFsOiJjZW50ZXIifTticmVhaztjYXNlInJpZ2h0IjpRLmFsaWdubWVudD17aG9yaXpvbnRhbDoicmlnaHQifTticmVhaztjYXNlImxlZnQiOlEuYWxpZ25tZW50PXtob3Jpem9udGFsOiJsZWZ0In07YnJlYWs7Y2FzZSJqdXN0aWZ5IjpRLmFsaWdubWVudD17aG9yaXpvbnRh'@;
put 'bDoianVzdGlmeSJ9fXN3aXRjaChyZVsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJ0b3AiOmNhc2UibWlkZGxlIjpjYXNlImJvdHRvbSI6US5hbGlnbm1lbnR8fChRLmFsaWdubWVudD17fSksUS5hbGlnbm1lbnQudmVydGljYWw9cmVbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PVEuYWxp'@;
put 'Z25tZW50LnZlcnRpY2FsJiYoUS5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpRLnZhbGlnbj1yZVsidmVydGljYWwtYWxpZ24iXSxRLnN6JiYoUS5zei89LjgzKX12YXIgX2U9UCYmZ2V0Q29tcHV0ZWRTdHlsZShQKTtyZXR1cm4gX2Um'@;
put 'JkwmJlAmJlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPXZlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3ZlLnNsaWNlKDEpLEhlPV9lWyJib3JkZXItIit2ZSsiLXN0eWxlIl07aWYoKCJub25lIj09SGV8fCFIZSkmJihIZT1fZVsi'@;
put 'Ym9yZGVyIitTZSsiU3R5bGUiXSksIm5vbmUiIT1IZSYmSGUpe3ZhciBCZT1wYXJzZUludChfZVsiYm9yZGVyLSIrdmUrIi13aWR0aCJdfHxfZVsiYm9yZGVyIitTZSsiV2lkdGgiXSwxMCksR2U9InRoaW4iO2lmKEJlPjApe3N3aXRjaChIZSl7Y2FzZSJkb3VibGUiOkdlPSJkb3VibGUiO2Jy'@;
put 'ZWFrO2Nhc2UiZGFzaGVkIjpHZT1CZT49Mj8ibWVkaXVtRGFzaGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6R2U9QmU+PTI/Im1lZGl1bURhc2hEb3REb3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Uic29saWQiOkdlPUJlPj0zPyJ0aGljayI6QmU+PTI/Im1lZGl1bSI6InRoaW4ifWlm'@;
put 'KFFbdmVdPXtzdHlsZTpHZX0sX2VbImJvcmRlci0iK3ZlKyItY29sb3IiXXx8X2VbImJvcmRlciIrU2UrIkNvbG9yIl0pe3ZhciBudD1ONCgoX2VbImJvcmRlci0iK3ZlKyItY29sb3IiXXx8X2VbImJvcmRlciIrU2UrIkNvbG9yIl0pLnRvTG93ZXJDYXNlKCksITApO250Pj0wJiYoUVt2ZV0u'@;
put 'Y29sb3I9e3JnYjpudH0pfX19fSksUX1mdW5jdGlvbiBvXyh5LFAsTCl7dmFyIFE9eS5jaGlsZE5vZGVzO2lmKDE9PXkubm9kZVR5cGUpc3dpdGNoKHkudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlInAiOlAubGVuZ3RoPjAmJlAucHVzaCh7dDoidCIsdjoiXG4iLHM6TH0pO2JyZWFrO2Nh'@;
put 'c2Uic2VsZWN0IjpyZXR1cm4gZnVuY3Rpb24gYVIoeSxQLEwpe1AucHVzaCh7dDoidCIsdjp5LmNoaWxkcmVuW3kuc2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6TH0pfSh5LFAsTCl9aWYoUS5sZW5ndGg+MCl7dmFyIHJlPXZmKHksbnVsbCwhMSk7TCYmKEwudW5kZXJsaW5lJiYocmUudW5k'@;
put 'ZXJsaW5lPUwudW5kZXJsaW5lKSxMLnN0cmlrZSYmKHJlLnN0cmlrZT1MLnN0cmlrZSkpO2Zvcih2YXIgZ2U9MDtnZTxRLmxlbmd0aDsrK2dlKXt0cnl7aWYoUVtnZV0uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKWNvbnRpbnVlfWNhdGNoe31vXyhRW2dlXSxQLHJlKX1kZWxldGUgcmUu'@;
put 'dGV4dF90cmFuc2Zvcm19ZWxzZSBpZigzPT15Lm5vZGVUeXBlKXt2YXIgX2U9e3Q6InQiLHY6eS5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8sIiAiKS5yZXBsYWNlKC9bXG4gXSskLywiICIpLHM6TH07c3dpdGNoKEwudGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBwZXJjYXNlIjpfZS52PV9l'@;
put 'LnYudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6X2Uudj1fZS52LnRvTG93ZXJDYXNlKCl9KFAubGVuZ3RoPjB8fF9lLnYmJiIgIiE9X2UudikmJlAucHVzaChfZSl9ZWxzZSAxPT15Lm5vZGVUeXBlJiYiYnIiPT09eS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlAucHVzaCh7'@;
put 'dDoidCIsdjoiXG4iLHM6TH0pfWZ1bmN0aW9uIHNfKHksUCxMLFEscmUpe3ZhciBfZSxnZT15LmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKF9lPWdldENvbXB1dGVkU3R5bGUoeSksKF9lWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3ByZS8pJiYo'@;
put 'Z2U9Z2UucmVwbGFjZSgvXG4vZywiPGJyLz4iKSksKF9lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOmdlPWdlLnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOmdlPWdlLnRvTG93ZXJDYXNlKCl9dmFyIHZlPWZ1bmN0aW9u'@;
put 'IHNSKHksUCxMLFEpe3ZhciByZT17dDoicyIsdjpQfSxnZT0iIjtpZih5KXtMPXkuZ2V0QXR0cmlidXRlKCJkYXRhLXQiKXx8eS5nZXRBdHRyaWJ1dGUoInQiKTt2YXIgX2U9eS5nZXRBdHRyaWJ1dGUoImRhdGEtdiIpfHx5LmdldEF0dHJpYnV0ZSgidiIpO2lmKG51bGwhPShnZT15LmdldEF0'@;
put 'dHJpYnV0ZSgiZGF0YS16Iil8fHkuZ2V0QXR0cmlidXRlKCJ6IikpJiYocmUuej1nZSksbnVsbCE9TCYmbnVsbCE9X2UpcmV0dXJuIHJlLnQ9TCxyZS52PV9lLHJlfXJldHVybiBudWxsIT1QJiYoMD09UC5sZW5ndGg/cmUudD1MfHwieiI6US5yYXd8fCFQLnRyaW0oKS5sZW5ndGh8fCJzIj09'@;
put 'THx8KHJlPSRuKFAsUSkpKSxnZSYmKHJlLno9Z2UpLHJlfSh5LE9jKGdlKSxMLHJlKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJih2ZS5zPXZmKHksUCxyZS5ib3JkZXJzKSxkZWxldGUgdmUucy50ZXh0X3RyYW5zZm9ybSx5LmNoaWxkTm9kZXMubGVuZ3RoPjF8fDE9PXkuY2hp'@;
put 'bGROb2Rlcy5sZW5ndGgmJjMhPXkuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKG9fKHksdmUuUj1bXSxudWxsKSx2ZS5SJiZ2ZS5SW3ZlLlIubGVuZ3RoLTFdJiYiXG4iPT12ZS5SW3ZlLlIubGVuZ3RoLTFdLnYmJnZlLlIubGVuZ3RoLS0sKF9lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwi'@;
put 'IikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnZlLlIuZm9yRWFjaChmdW5jdGlvbihudCl7bnQudj1udC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztjYXNlImxvd2VyY2FzZSI6dmUuUi5mb3JFYWNoKGZ1bmN0aW9uKG50KXtudC52PW50LnYudG9Mb3dlckNhc2UoKX0pfWlmKCJz'@;
put 'Ij09dmUudCl7dmFyIFNlPXZlLnYubWF0Y2goL1xuLyk7IVNlJiZ2ZS5SJiZ2ZS5SLmZvckVhY2goZnVuY3Rpb24obnQpeyJzdHJpbmciPT10eXBlb2YgbnQudiYmbnQudi5tYXRjaCgvXG4vKSYmKFNlPSEwKX0pLCJzIj09dmUudCYmU2UmJih2ZS5zfHwodmUucz17fSksdmUucy5hbGlnbm1l'@;
put 'bnR8fCh2ZS5zLmFsaWdubWVudD17fSksdmUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKFApe3ZhciBIZT0iIixCZT1QLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBIik7aWYoQmUmJkJlLmxlbmd0aClmb3IodmFyIEdlPTA7R2U8QmUubGVuZ3RoJiYoIUJlW0dlXS5oYXNBdHRyaWJ1dGUo'@;
put 'ImhyZWYiKXx8IiMiPT0oSGU9QmVbR2VdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrR2UpO0hlJiYiIyIhPUhlLmNoYXJBdCgwKSYmKHZlLmw9e1RhcmdldDpIZX0pfXJldHVybiB2ZX1mdW5jdGlvbiBBTSh5LFAsTCl7dmFyIHJlLFE9UC5yb3dzO2lmKCFRKXtpZihMJiZu'@;
put 'dWxsIT1MLm9yaWdpbil0aHJvdyJVbnN1cHBvcnRlZCBvcmlnaW4gd2hlbiAiK1AudGFnTmFtZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24ga00oeSxQLEwpe0w9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShMfHx7fSkpO3ZhciBnZT17czp7cjowLGM6MH0sZTp7cjowLGM6'@;
put 'MH19O3lbIiFtZXJnZXMiXXx8KHlbIiFtZXJnZXMiXT1bXSk7Zm9yKHZhciB2ZSxfZT1QLmNoaWxkcmVuLFNlPTAsSGU9MDtIZTxfZS5sZW5ndGg7KytIZSl7dmFyIG50LEJlPV9lW0hlXSxHZT0iIjt0cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP250PWdldENvbXB1dGVkU3R5bGU6'@;
put 'QmUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIEJlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKG50PUJlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fWlmKCFudHx8Im5v'@;
put 'bmUiIT1udChCZSkuZGlzcGxheSlzd2l0Y2goQmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIlRBQkxFIjpTZT0tMSx5WyIhcmVmIl0mJihMLm9yaWdpbj0tMSksQU0oeSxCZSxMKTticmVhaztjYXNlIkJSIjpjYXNlIkhSIjpTZT0tMSx5WyIhcmVmIl0/KCsrKGdlPVdzKHlbIiFyZWYi'@;
put 'XSkpLmUucix5WyIhcmVmIl09T28oZ2UpKTp5WyIhcmVmIl09IkExOkExIjticmVhaztjYXNlIkRJViI6Y2FzZSJQIjpjYXNlIkgxIjpjYXNlIkgyIjpjYXNlIkgzIjpjYXNlIkg0IjpjYXNlIkg1IjpjYXNlIkg2IjpTZT0tMSx2ZT1zXyhCZSxudWxsLCIiLDAsTCkseVsiIXJlZiJdPyhMLm9y'@;
put 'aWdpbj0tMSxzMCh5LFtbdmVdXSxMKSk6KHlbIiFyZWYiXT0iQTEiLEFycmF5LmlzQXJyYXkoeSk/KHlbMF18fCh5WzBdPVtdKSx5WzBdWzBdPXZlKTp5LkExPXZlKSx5WyIhcm93cyJdfHwoeVsiIXJvd3MiXT1bXSksbnQmJihnZT1Xcyh5WyIhcmVmIl0pLChHZT1udChCZSkuaGVpZ2h0KSYm'@;
put 'ImF1dG8iIT1HZSYmKHlbIiFyb3dzIl1bZ2UuZS5yXT17aHB0OnBhcnNlSW50KEdlLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNlIkVNIjpjYXNlIkkiOmNhc2UiRk9OVCI6Y2FzZSJTIjpjYXNlIlNVQiI6Y2FzZSJTVVAiOmNhc2UiVSI6dmU9c18oQmUsbnVs'@;
put 'bCwiIiwwLEwpLHlbIiFyZWYiXXx8KHlbIiFyZWYiXT0iQTE6QTEiKSxzMCh5LFtbdmVdXSx7b3JpZ2luOmRpKHtyOihTZTwwPzE6MCkrKGdlPVdzKHlbIiFyZWYiXSkpLmUucixjOisrU2V9KX0pO2JyZWFrO2Nhc2UiREwiOmNhc2UiVUwiOmNhc2UiT0wiOlNlPS0xLGNvbnNvbGUuZXJyb3Io'@;
put 'IkhUTUwgQ29udmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxpc3QgZWxlbWVudCAiK0JlLnRhZ05hbWUudG9VcHBlckNhc2UoKSk7YnJlYWs7ZGVmYXVsdDpTZT0tMSxjb25zb2xlLmVycm9yKCJTa2lwcGluZyAiK0JlLnRhZ05hbWUudG9VcHBlckNhc2UoKSl9fXJldHVybiB5fSh5LFAsTCl9'@;
put 'dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9yZT1nZXRDb21wdXRlZFN0eWxlOlAub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIFAub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYocmU9UC5vd25lckRvY3VtZW50'@;
put 'LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe312YXIgZ2U9THx8e307bnVsbCE9dGUmJihnZS5kZW5zZT10ZSk7dmFyIF9lPTAsdmU9MDtpZihudWxsIT1nZS5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBnZS5vcmlnaW4pX2U9Z2Uub3JpZ2luO2Vsc2V7dmFyIFNlPSJz'@;
put 'dHJpbmciPT10eXBlb2YgZ2Uub3JpZ2luP3NzKGdlLm9yaWdpbik6Z2Uub3JpZ2luO19lPVNlLnIsdmU9U2UuY312YXIgSGU9TWF0aC5taW4oZ2Uuc2hlZXRSb3dzfHwxZTcsUS5sZW5ndGgpLEJlPXtzOntyOjAsYzowfSxlOntyOl9lLGM6dmV9fTtpZih5WyIhcmVmIl0pe3ZhciBHZT1Xcyh5'@;
put 'WyIhcmVmIl0pO0JlLnMucj1NYXRoLm1pbihCZS5zLnIsR2Uucy5yKSxCZS5zLmM9TWF0aC5taW4oQmUucy5jLEdlLnMuYyksQmUuZS5yPU1hdGgubWF4KEJlLmUucixHZS5lLnIpLEJlLmUuYz1NYXRoLm1heChCZS5lLmMsR2UuZS5jKSwtMT09X2UmJihCZS5lLnI9X2U9R2UuZS5yKzEpfXZh'@;
put 'ciBudD1bXSxkdD0wLEN0PXlbIiFyb3dzIl18fCh5WyIhcm93cyJdPVtdKSxjdD0wLGJ0PTAsRnQ9MCxrdD0wLFR0PTAsWnQ9MDtmb3IoeVsiIWNvbHMiXXx8KHlbIiFjb2xzIl09W10pO2N0PFEubGVuZ3RoJiZidDxIZTsrK2N0KXtmb3IodmFyIHBuPVFbY3RdLEtuPXBuLnBhcmVudEVsZW1l'@;
put 'bnQ7IlRBQkxFIiE9S24udGFnTmFtZS50b1VwcGVyQ2FzZSgpOylLbj1Lbi5wYXJlbnRFbGVtZW50O2lmKEtuPT1QKXtlOmlmKHR5cGVvZiByZTwidSIpe3ZhciB1bj1yZShwbik7aWYobnVsbD09dW4pYnJlYWsgZTtpZih1bi5zdHlsZXx8KHVuLnN0eWxlPXt9KSxnZS5kaXNwbGF5JiYibm9u'@;
put 'ZSI9PSh1bi5kaXNwbGF5fHx1bi5zdHlsZS5kaXNwbGF5KSljb250aW51ZTsibm9uZSI9PSh1bi5kaXNwbGF5fHx1bi5zdHlsZS5kaXNwbGF5KSYmKChDdFtidF18fChDdFtidF09e30pKS5oaWRkZW49ITApfXZhciBxbj1wbi5jZWxscztmb3IoRnQ9a3Q9MDtGdDxxbi5sZW5ndGg7KytGdCl7'@;
put 'dmFyIHpuPXFuW0Z0XSxrbj1udWxsO2lmKCEodHlwZW9mIHJlPCJ1IiYmKG51bGw9PWtuJiYoa249cmUoem4pKSxrbi5zdHlsZXx8KGtuLnN0eWxlPXt9KSxnZS5kaXNwbGF5JiZudWxsIT1rbiYmIm5vbmUiPT0oa24uZGlzcGxheXx8a24uc3R5bGUuZGlzcGxheSkpKSl7Zm9yKFp0PSt6bi5n'@;
put 'ZXRBdHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxkdD0wO2R0PG50Lmxlbmd0aDsrK2R0KXt2YXIgZXI9bnRbZHRdO2VyLnMuYz09a3QrdmUmJmVyLnMucjxidCtfZSYmYnQrX2U8PWVyLmUuciYmKGt0PWVyLmUuYysxLXZlLGR0PS0xKX0oKFR0PSt6bi5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKXx8'@;
put 'MSk+MXx8WnQ+MSkmJm50LnB1c2goe3M6e3I6YnQrX2UsYzprdCt2ZX0sZTp7cjpidCtfZSsoVHR8fDEpLTEsYzprdCt2ZSsoWnR8fDEpLTF9fSk7dmFyIHRyPXpuLmdldEF0dHJpYnV0ZSgidCIpfHwiIixabj16bi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlmKHR5cGVvZiByZTwidSIp'@;
put 'e2lmKG51bGw9PWtuJiYoa249cmUoem4pKSxudWxsPT1rbilicmVhayBlO2lmKGtuLnN0eWxlfHwoa24uc3R5bGU9e30pLDE9PVp0JiZrbi53aWR0aCYmKHlbIiFjb2xzIl1ba3QrdmVdPXlbIiFjb2xzIl1ba3QrdmVdfHx7fSxrbi53aWR0aC5tYXRjaCgvcHgvKT95WyIhY29scyJdW2t0K3Zl'@;
put 'XS53cHg9TWF0aC5tYXgocGFyc2VJbnQoa24ud2lkdGgsMTApKzUseVsiIWNvbHMiXVtrdCt2ZV0ud3B4fHwwKTprbi53aWR0aC5tYXRjaCgvcHQvKSYmKHlbIiFjb2xzIl1ba3QrdmVdLndweD1NYXRoLm1heCg0KnBhcnNlSW50KGtuLndpZHRoLDEwKS8zKzUseVsiIWNvbHMiXVtrdCt2ZV0u'@;
put 'd3B4fHwwKSkpLFR0PD0xKXtDdFtidCtfZV18fChDdFtidCtfZV09e30pO3ZhciBCcj1rbi5oZWlnaHQ7KEJyPUJyLm1hdGNoKC9wdC8pP1UxKHBhcnNlSW50KEJyLDEwKSk6cGFyc2VJbnQoQnIsMTApKT4oQ3RbYnQrX2VdLmhweHx8VTEoQ3RbYnQrX2VdLmhwdCl8fDApJiYoZGVsZXRlIEN0'@;
put 'W2J0K19lXS5ocHQsQ3RbYnQrX2VdLmhweD1Ccil9fXZhciBzaT16bjtpZih6bi5maXJzdEVsZW1lbnRDaGlsZCYmMT09em4uY2hpbGRyZW4ubGVuZ3RoJiYic3BhbiI9PXpuLmZpcnN0RWxlbWVudENoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Zvcih2YXIgeGk9MCxMaT16bi5jaGls'@;
put 'ZE5vZGVzLFFyPTA7UXI8TGkubGVuZ3RoOysrUXIpMz09TGlbUXJdLm5vZGVUeXBlJiYrK3hpOzA9PXhpJiYoem49em4uZmlyc3RFbGVtZW50Q2hpbGQpfXZhciB1cj1zXyh6bixzaSx0ciwwLGdlKTtpZihrbil7dmFyIEFuPXJlKHpuKTtpZihBbiYmIUFuLnN0eWxlJiYoQW4uc3R5bGU9e30p'@;
put 'LChBbiYmQW5bImJhY2tncm91bmQtY29sb3IiXXx8a25bImJhY2tncm91bmQtY29sb3IiXSkmJih1ci5zfHwodXIucz17fSksIXVyLnMuZmdDb2xvcikpdHJ5e3ZhciB2cj1BbiYmQW5bImJhY2tncm91bmQtY29sb3IiXXx8a25bImJhY2tncm91bmQtY29sb3IiXTt2ci5tYXRjaCgvcmdiYVso'@;
put 'XVxzKjAuKlspXS9pKSYmKHZyPWtuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciBycj1ONCh2ci50b0xvd2VyQ2FzZSgpLCEwKTtycj49MCYmKHVyLnMuZmdDb2xvcj17cmdiOnJyfSl9Y2F0Y2h7fXN3aXRjaChrblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJtaWRkbGUiOmNhc2UiYmFzZWxp'@;
put 'bmUiOnVyLnN8fCh1ci5zPXt9KSx1ci5zLmFsaWdubWVudHx8KHVyLnMuYWxpZ25tZW50PXt9KSx1ci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYoWm4mJih1ci5zfHwodXIucz17fSksIXVyLnMuZmdDb2xvcikpdHJ5e3ZhciBTbj1ONChabi50b0xvd2VyQ2FzZSgpLCEwKTtT'@;
put 'bj49MCYmKHVyLnMuZmdDb2xvcj17cmdiOlNufSl9Y2F0Y2h7fWlmKGdlLmRlbnNlPyh5W2J0K19lXXx8KHlbYnQrX2VdPVtdKSx5W2J0K19lXVtrdCt2ZV09dXIpOnlbZGkoe2M6a3QrdmUscjpidCtfZX0pXT11cixUdD4xfHxadD4xKWZvcih2YXIgbXI9YnQ7bXI8YnQrVHQ7Kyttcilmb3Io'@;
put 'dmFyIHdpPWt0O3dpPGt0K1p0Oysrd2kpYnQ9PW1yJiZrdD09d2l8fChnZS5kZW5zZT8oeVttcitfZV18fCh5W21yK19lXT1bXSkseVttcitfZV1bd2krdmVdPXt0OiJ6IixzOm9uKHVyLnN8fHt9KX0pOnlbZGkoe2M6d2krdmUscjptcitfZX0pXT17dDoieiIsczpvbih1ci5zfHx7fSl9KTtC'@;
put 'ZS5lLmM8a3QrdmUmJihCZS5lLmM9a3QrdmUpLGt0Kz1adH19KytidH19aWYobnQubGVuZ3RoJiYoeVsiIW1lcmdlcyJdPSh5WyIhbWVyZ2VzIl18fFtdKS5jb25jYXQobnQpKSxCZS5lLnI9TWF0aC5tYXgoQmUuZS5yLGJ0LTErX2UpLHlbIiFyZWYiXT1PbyhCZSksYnQ+PUhlJiYoeVsiIWZ1'@;
put 'bGxyZWYiXT1PbygoQmUuZS5yPVEubGVuZ3RoLWN0K2J0LTErX2UsQmUpKSksZ2UuYm9yZGVycylmb3IoYnQ9QmUucy5yO2J0PD1CZS5lLnI7KytidClmb3Ioa3Q9QmUucy5jO2t0PD1CZS5lLmM7KytrdClpZighZ2UuZGVuc2Upe3ZhciBVcj15W2RpKHtyOmJ0LGM6a3R9KV07aWYoIVVyfHwh'@;
put 'VXIucyljb250aW51ZTtpZihidD4wKXt2YXIgamk9eVtkaSh7cjpidC0xLGM6a3R9KV07amkmJmppLnMmJmppLnMuYm90dG9tJiZkZWxldGUgVXIucy50b3B9aWYoa3Q+MCl7dmFyIF9vPXlbZGkoe3I6YnQsYzprdC0xfSldO19vJiZfby5zJiZfby5zLmJvdHRvbSYmZGVsZXRlIFVyLnMubGVm'@;
put 'dH19cmV0dXJuIHl9ZnVuY3Rpb24gSHUoeSxQKXtyZXR1cm4gQU0oKFB8fHt9KS5kZW5zZT9bXTp7fSx5LFApfXZhciBRMD1mdW5jdGlvbigpe3ZhciB5PWZ1bmN0aW9uKFEscmUsZ2Upe3ZhciBfZT1RLnJlcGxhY2UoL1tcdFxyXG5dL2csIiAiKS50cmltKCkucmVwbGFjZSgvICsvZywiICIp'@;
put 'LnJlcGxhY2UoLzx0ZXh0OnNcLz4vZywiICIpLnJlcGxhY2UoLzx0ZXh0OnMgdGV4dDpjPSIoXGQrKSJcLz4vZyxmdW5jdGlvbihCZSxHZSl7cmV0dXJuIEFycmF5KHBhcnNlSW50KEdlLDEwKSsxKS5qb2luKCIgIil9KS5yZXBsYWNlKC88dGV4dDp0YWJbXj5dKlwvPi9nLCJcdCIpLnJlcGxh'@;
put 'Y2UoLzx0ZXh0OmxpbmUtYnJlYWtcLz4vZywiXG4iKSx2ZT14cihfZS5yZXBsYWNlKC88W14+XSo+L2csIiIpKSxTZT1bXSxIZT0wO3JldHVybiBfZS5yZXBsYWNlKC8oPHRleHQ6c3Bhbi4qPz4pKC4qPyk8W1wvXXRleHQ6c3Bhbj4vZyxmdW5jdGlvbihCZSxHZSxudCxkdCl7ZHQhPUhlJiZT'@;
put 'ZS5wdXNoKHt0OiJzIix2OnhyKF9lLnNsaWNlKEhlLGR0KSl9KTt2YXIgQ3Q9e3Q6InMiLHY6eHIobnQpfSxjdD1sbihHZSlbInN0eWxlLW5hbWUiXTtyZXR1cm4gY3QmJmdlW2N0XSYmKEN0LnM9b24oZ2VbY3RdKSksU2UucHVzaChDdCksSGU9ZHQrQmUubGVuZ3RoLCIifSksSGU8X2UubGVu'@;
put 'Z3RoJiZTZS5wdXNoKHt0OiJzIix2OnhyKF9lLnNsaWNlKEhlKSl9KSxbdmUsU2VdfSxQPXtkYXk6WyJkIiwiZGQiXSxtb250aDpbIm0iLCJtbSJdLHllYXI6WyJ5IiwieXkiXSxob3VyczpbImgiLCJoaCJdLG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBtIjpb'@;
put 'IkEvUCIsIkFNL1BNIl0sImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxlcmE6WyJlIiwiZWUiXSxxdWFydGVyOlsiXFxRbSIsJ21cXCJ0aCBxdWFydGVyIiddfSxMPWZ1bmN0aW9uKFEscmUpe3ZhciBnZT1sbihRLnNsaWNlKDAsUS5pbmRleE9mKCI+IikpKSxfZT1RLnNsaWNlKFEuaW5k'@;
put 'ZXhPZigiPiIpKzEpLHZlPXtuYW1lOmdlLm5hbWUsZmFtaWx5OmdlLmZhbWlseX07W1sicGFyZW50IiwicGFyZW50LXN0eWxlLW5hbWUiXSxbImRhdGFuYW1lIiwiZGF0YS1zdHlsZS1uYW1lIl0sWyJtcG5hbWUiLCJtYXN0ZXItcGFnZS1uYW1lIl1dLmZvckVhY2goZnVuY3Rpb24oSGUpe2dl'@;
put 'W0hlWzFdXSYmKHZlW0hlWzBdXT1nZVtIZVsxXV0pfSk7dmFyIFNlPXt9O19lLnJlcGxhY2UoJHQsZnVuY3Rpb24oSGUpe3ZhciBCZT1sbihIZSk7aWYoIjxzdHlsZTp0ZXh0LXByb3BlcnRpZXMiPT09QmVbMF0pe2lmKEJlWyJmb250LXdlaWdodCJdJiYoU2UuYm9sZD0rKCJib2xkIj09QmVb'@;
put 'ImZvbnQtd2VpZ2h0Il18fCI3MDAiPT1CZVsiZm9udC13ZWlnaHQiXSkpLCgiaXRhbGljIj09QmVbImZvbnQtc3R5bGUiXXx8Im9ibGlxdWUiPT1CZVsiZm9udC1zdHlsZSJdKSYmKFNlLml0YWxpYz0xKSwibm9uZSIhPShCZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiKT9TZS51'@;
put 'bmRlcmxpbmU9ImRvdWJsZSI9PUJlWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0/MjoxOihCZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiPT1CZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdKSYmKFNlLnVuZGVybGluZT0wKSwoQmVbImZvbnQtc2l6ZSJdfHwiIikubWF0Y2goL3B0JC8p'@;
put 'JiYoU2Uuc3o9K0JlWyJmb250LXNpemUiXS5yZXBsYWNlKCJwdCIsIiIpKSwibm9uZSIhPShCZVsidGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXXx8Im5vbmUiKSYmKFNlLnN0cmlrZT0xKSxCZVsiZm9udC1uYW1lIl0mJihTZS5uYW1lPUJlWyJmb250LW5hbWUiXSksQmUuY29sb3Ipe3ZhciBH'@;
put 'ZT1ONChCZS5jb2xvciwhMCk7R2U+PTAmJihTZS5jb2xvcj1HZSl9c3dpdGNoKEJlWyJ0ZXh0LXBvc2l0aW9uIl0pe2Nhc2Uic3VwZXIiOlNlLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2Uic3ViIjpTZS52YWxpZ249InN1YiI7YnJlYWs7ZGVmYXVsdDooQmVbInRleHQtcG9zaXRpb24iXXx8'@;
put 'IiIpLm1hdGNoKC8lLykmJihTZS52YWxpZ249Ii0iPT1CZVsidGV4dC1wb3NpdGlvbiJdLmNoYXJBdCgwKT8ic3ViIjoic3VwZXIiKX0ibm9uZSIhPShCZVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKFNlLnNoYWRvdz0xKX1yZXR1cm4iIn0pLHJlW2dlLm5hbWVdPVNlfTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24ocmUsZ2Upe3ZhciBfZT1nZXx8e307bnVsbCE9dGUmJm51bGw9PV9lLmRlbnNlJiYoX2UuZGVuc2U9dGUpO3ZhciBIZSxCZSxDdCxjdCxUdCxadCx2ZT1RdihyZSksU2U9W10sR2U9e25hbWU6IiJ9LG50PSIiLGR0PTAsYnQ9e30sRnQ9W10sa3Q9X2UuZGVuc2U/W106e30scG49e3Zh'@;
put 'bHVlOiIifSxLbj0iIix1bj0wLHpuPVtdLGtuPS0xLGVyPS0xLHRyPXtzOntyOjFlNixjOjFlN30sZTp7cjowLGM6MH19LFpuPTAsQnI9e30sc2k9W10seGk9e30sTGk9MCxRcj0wLHVyPVtdLEFuPTEsdnI9MSxycj1bXSxTbj17TmFtZXM6W119LG1yPXt9LHdpPVsiIiwiIl0sVXI9W10samk9'@;
put 'e30sX289e30sVGk9MCxZbz0iIixsbz0wLEFvPSExLHhvPSExLGhpPTA7Zm9yKFZyLmxhc3RJbmRleD0wLHZlPXZlLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIik7VHQ9VnIuZXhlYyh2ZSk7KXN3aXRj'@;
put 'aChUdFszXT1UdFszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT1UdFsxXT8oa3RbIiFyZWYiXT10ci5lLmM+PXRyLnMuYyYmdHIuZS5yPj10ci5zLnI/T28odHIpOiJBMTpBMSIsX2Uuc2hlZXRSb3dzPjAmJl9lLnNoZWV0'@;
put 'Um93czw9dHIuZS5yJiYoa3RbIiFmdWxscmVmIl09a3RbIiFyZWYiXSx0ci5lLnI9X2Uuc2hlZXRSb3dzLTEsa3RbIiFyZWYiXT1Pbyh0cikpLHNpLmxlbmd0aCYmKGt0WyIhbWVyZ2VzIl09c2kpLHVyLmxlbmd0aCYmKGt0WyIhcm93cyJdPXVyKSxDdC5uYW1lPUN0Llx1NTQwZFx1NzlmMHx8'@;
put 'Q3QubmFtZSx0eXBlb2YgSlNPTjwidSImJkpTT04uc3RyaW5naWZ5KEN0KSxGdC5wdXNoKEN0Lm5hbWUpLGJ0W0N0Lm5hbWVdPWt0LHhvPSExKToiLyIhPT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpJiYoQ3Q9bG4oVHRbMF0sITEpLGtuPWVyPS0xLHRyLnMucj10ci5zLmM9MWU3LHRy'@;
put 'LmUucj10ci5lLmM9MCxrdD1fZS5kZW5zZT9bXTp7fSxzaT1bXSx1cj1bXSx4bz0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PVR0WzFdPy0tWm46KytabjticmVhaztjYXNlInRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PVR0WzFdKXtrbis9QW4sQW49MTti'@;
put 'cmVha31pZigoY3Q9bG4oVHRbMF0sITEpKS5cdTg4NGNcdTUzZjc/a249Y3QuXHU4ODRjXHU1M2Y3LTE6LTE9PWtuJiYoa249MCksKEFuPStjdFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9yKGhpPTA7aGk8QW47KytoaSlabj4wJiYodXJba24raGldPXtsZXZlbDpabn0pO2Vy'@;
put 'PS0xO2JyZWFrO2Nhc2UiY292ZXJlZC10YWJsZS1jZWxsIjoiLyIhPT1UdFsxXSYmKytlcixfZS5zaGVldFN0dWJzJiYoX2UuZGVuc2U/KGt0W2tuXXx8KGt0W2tuXT1bXSksa3Rba25dW2VyXT17dDoieiJ9KTprdFtkaSh7cjprbixjOmVyfSldPXt0OiJ6In0pLEtuPSIiLHpuPVtdO2JyZWFr'@;
put 'O2Nhc2UidGFibGUtY2VsbCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikpKytlcixwbj1sbihUdFswXSwhMSksdnI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksWnQ9e3Q6InoiLHY6bnVsbH0s'@;
put 'cG4uZm9ybXVsYSYmMCE9X2UuY2VsbEZvcm11bGEmJihadC5mPWxTKHhyKHBuLmZvcm11bGEpKSksInN0cmluZyI9PShwbi5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fHBuWyJ2YWx1ZS10eXBlIl0pJiYoWnQudD0icyIsWnQudj14cihwblsic3RyaW5nLXZhbHVlIl18fCIiKSxfZS5kZW5z'@;
put 'ZT8oa3Rba25dfHwoa3Rba25dPVtdKSxrdFtrbl1bZXJdPVp0KTprdFtkaSh7cjprbixjOmVyfSldPVp0KSxlcis9dnItMTtlbHNlIGlmKCIvIiE9PVR0WzFdKXt2cj0xO3ZhciB0YT1Bbj9rbitBbi0xOmtuO2lmKCsrZXI+dHIuZS5jJiYodHIuZS5jPWVyKSxlcjx0ci5zLmMmJih0ci5zLmM9'@;
put 'ZXIpLGtuPHRyLnMuciYmKHRyLnMucj1rbiksdGE+dHIuZS5yJiYodHIuZS5yPXRhKSxVcj1bXSxqaT17fSxadD17dDoocG49bG4oVHRbMF0sITEpKS5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fHBuWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSxfZS5jZWxsRm9ybXVsYSlpZihwbi5mb3JtdWxh'@;
put 'JiYocG4uZm9ybXVsYT14cihwbi5mb3JtdWxhKSkscG5bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0mJnBuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoTGk9cGFyc2VJbnQocG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0sMTApfHwwLFFyPXBhcnNlSW50'@;
put 'KHBuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxadC5GPU9vKHhpPXtzOntyOmtuLGM6ZXJ9LGU6e3I6a24rTGktMSxjOmVyK1FyLTF9fSkscnIucHVzaChbeGksWnQuRl0pKSxwbi5mb3JtdWxhKVp0LmY9bFMocG4uZm9ybXVsYSk7ZWxzZSBmb3IoaGk9MDtoaTxy'@;
put 'ci5sZW5ndGg7KytoaSlrbj49cnJbaGldWzBdLnMuciYma248PXJyW2hpXVswXS5lLnImJmVyPj1ycltoaV1bMF0ucy5jJiZlcjw9cnJbaGldWzBdLmUuYyYmKFp0LkY9cnJbaGldWzFdKTtzd2l0Y2goKHBuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fHBuWyJudW1iZXItcm93cy1zcGFu'@;
put 'bmVkIl0pJiYoTGk9cGFyc2VJbnQocG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsUXI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsc2kucHVzaCh4aT17czp7cjprbixjOmVyfSxlOntyOmtuK0xpLTEsYzplcitRci0xfX0pKSxwblsibnVtYmVy'@;
put 'LWNvbHVtbnMtcmVwZWF0ZWQiXSYmKHZyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdLDEwKSksWnQudCl7Y2FzZSJib29sZWFuIjpadC50PSJiIixadC52PXlyKHBuWyJib29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2Fz'@;
put 'ZSJjdXJyZW5jeSI6WnQudD0ibiIsWnQudj1wYXJzZUZsb2F0KHBuLnZhbHVlKTticmVhaztjYXNlImRhdGUiOlp0LnQ9ImQiLFp0LnY9SHQocG5bImRhdGUtdmFsdWUiXSksX2UuY2VsbERhdGVzfHwoWnQudD0ibiIsWnQudj1VZShadC52KSksWnQuej0ibS9kL3l5IjticmVhaztjYXNlInRp'@;
put 'bWUiOlp0LnQ9Im4iLFp0LnY9b3QocG5bInRpbWUtdmFsdWUiXSkvODY0MDAsX2UuY2VsbERhdGVzJiYoWnQudD0iZCIsWnQudj1odChadC52KSksWnQuej0iSEg6TU06U1MiO2JyZWFrO2Nhc2UibnVtYmVyIjpadC50PSJuIixadC52PXBhcnNlRmxvYXQocG4uXHU2NTcwXHU2MzZlXHU2NTcw'@;
put 'XHU1MDNjKTticmVhaztkZWZhdWx0OmlmKCJzdHJpbmciIT09WnQudCYmInRleHQiIT09WnQudCYmWnQudCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZhbHVlIHR5cGUgIitadC50KTtadC50PSJzIixudWxsIT1wblsic3RyaW5nLXZhbHVlIl0mJihLbj14cihwblsic3RyaW5nLXZh'@;
put 'bHVlIl0pLHpuPVtdKX19ZWxzZXtpZihBbz0hMSwicyI9PT1adC50JiYoWnQudj1Lbnx8IiIsem4ubGVuZ3RoJiYoWnQuUj16biksQW89MD09dW4pLG1yLlRhcmdldCYmKFp0Lmw9bXIpLFVyLmxlbmd0aD4wJiYoWnQuYz1VcixVcj1bXSksS24mJiExIT09X2UuY2VsbFRleHQmJihadC53PUtu'@;
put 'KSxBbyYmKFp0LnQ9InoiLGRlbGV0ZSBadC52KSxfZS5jZWxsSFRNTCYmKFp0Lmg9WnQuUj9rOShadC5SKTpybygiIitadC52KSksKCFBb3x8X2Uuc2hlZXRTdHVicykmJiEoX2Uuc2hlZXRSb3dzJiZfZS5zaGVldFJvd3M8PWtuKSlmb3IodmFyIE1uPTA7TW48QW47KytNbil7aWYodnI9cGFy'@;
put 'c2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksX2UuZGVuc2UpZm9yKGt0W2tuK01uXXx8KGt0W2tuK01uXT1bXSksa3Rba24rTW5dW2VyXT0wPT1Nbj9adDpvbihadCk7LS12cj4wOylrdFtrbitNbl1bZXIrdnJdPW9uKFp0KTtlbHNlIGZvcihrdFtkaSh7cjpr'@;
put 'bitNbixjOmVyfSldPVp0Oy0tdnI+MDspa3RbZGkoe3I6a24rTW4sYzplcit2cn0pXT1vbihadCk7dHIuZS5jPD1lciYmKHRyLmUuYz1lcil9ZXIrPSh2cj1wYXJzZUludChwblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSktMSx2cj0wLFp0PXt9LEtuPSIiLHpuPVtdfW1y'@;
put 'PXt9O2JyZWFrO2Nhc2UiZG9jdW1lbnQiOmNhc2UiZG9jdW1lbnQtY29udGVudCI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2NcdTY1ODdcdTY4NjMiOmNhc2Uic3ByZWFkc2hlZXQiOmNhc2UiXHU0ZTNiXHU0ZjUzIjpjYXNlInNjcmlwdHMiOmNhc2Uic3R5bGVzIjpjYXNlImZvbnQt'@;
put 'ZmFjZS1kZWNscyI6Y2FzZSJtYXN0ZXItc3R5bGVzIjppZigiLyI9PT1UdFsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTogIitIZX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmU2UucHVzaChbVHRbM10sITBdKTticmVhaztj'@;
put 'YXNlImFubm90YXRpb24iOmlmKCIvIj09PVR0WzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09VHRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0hlO2ppLnQ9S24sem4ubGVuZ3RoJiYoamkuUj16biksamkuYT1ZbyxVci5wdXNoKGppKX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0'@;
put 'aC0yKSYmU2UucHVzaChbVHRbM10sITFdKTtZbz0iIixsbz0wLEtuPSIiLHVuPTAsem49W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT1UdFsxXT9Zbz12ZS5zbGljZShsbyxUdC5pbmRleCk6bG89VHQuaW5kZXgrVHRbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibWV0YSI6Y2FzZSJcdTUxNDNc'@;
put 'dTY1NzBcdTYzNmUiOmNhc2Uic2V0dGluZ3MiOmNhc2UiY29uZmlnLWl0ZW0tc2V0IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1pbmRleGVkIjpjYXNlImNvbmZpZy1pdGVtLW1hcC1lbnRyeSI6Y2FzZSJjb25maWctaXRlbS1tYXAtbmFtZWQiOmNhc2Uic2hhcGVzIjpjYXNlImZyYW1lIjpjYXNl'@;
put 'InRleHQtYm94IjpjYXNlImltYWdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGVzIjpjYXNlImxpc3Qtc3R5bGUiOmNhc2UiZm9ybSI6Y2FzZSJkZGUtbGlua3MiOmNhc2UiZXZlbnQtbGlzdGVuZXJzIjpjYXNlImNoYXJ0IjppZigiLyI9PT1UdFsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PVR0'@;
put 'WzNdKXRocm93IkJhZCBzdGF0ZTogIitIZX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmU2UucHVzaChbVHRbM10sITFdKTtLbj0iIix1bj0wLHpuPVtdO2JyZWFrO2Nhc2Uic2NpZW50aWZpYy1udW1iZXIiOmNhc2UiY3VycmVuY3ktc3ltYm9sIjpjYXNlImN1cnJl'@;
put 'bmN5LXN0eWxlIjpjYXNlInNjcmlwdCI6Y2FzZSJsaWJyYXJpZXMiOmNhc2UiYXV0b21hdGljLXN0eWxlcyI6Y2FzZSJkZWZhdWx0LXN0eWxlIjpjYXNlInBhZ2UtbGF5b3V0IjpjYXNlIm1hcCI6Y2FzZSJmb250LWZhY2UiOmNhc2UicGFyYWdyYXBoLXByb3BlcnRpZXMiOmNhc2UidGFibGUt'@;
put 'cHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jb2x1bW4tcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1yb3ctcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jZWxsLXByb3BlcnRpZXMiOmNhc2UiZnJhY3Rpb24iOmNhc2UiYm9vbGVhbi1zdHlsZSI6Y2FzZSJib29sZWFuIjpjYXNlInRleHQtc3R5bGUiOmNh'@;
put 'c2UidGV4dC1jb250ZW50IjpjYXNlInRleHQtcHJvcGVydGllcyI6Y2FzZSJlbWJlZGRlZC10ZXh0IjpjYXNlImJvZHkiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjIjpjYXNlImZvcm1zIjpjYXNlInRhYmxlLWNvbHVtbiI6Y2FzZSJ0YWJsZS1oZWFkZXItcm93cyI6Y2FzZSJ0YWJs'@;
put 'ZS1yb3dzIjpjYXNlInRhYmxlLWNvbHVtbi1ncm91cCI6Y2FzZSJ0YWJsZS1oZWFkZXItY29sdW1ucyI6Y2FzZSJ0YWJsZS1jb2x1bW5zIjpjYXNlIm51bGwtZGF0ZSI6Y2FzZSJncmFwaGljLXByb3BlcnRpZXMiOmNhc2UiY2FsY3VsYXRpb24tc2V0dGluZ3MiOmNhc2UibmFtZWQtZXhwcmVz'@;
put 'c2lvbnMiOmNhc2UibGFiZWwtcmFuZ2UiOmNhc2UibGFiZWwtcmFuZ2VzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb24iOmNhc2Uic29ydCI6Y2FzZSJzb3J0LWJ5IjpjYXNlInNvcnQtZ3JvdXBzIjpjYXNlInRhYiI6Y2FzZSJsaW5lLWJyZWFrIjpjYXNlInNwYW4iOmNhc2UicyI6Y2FzZSJkYXRl'@;
put 'IjpjYXNlIm9iamVjdCI6Y2FzZSJ0aXRsZSI6Y2FzZSJcdTY4MDdcdTk4OTgiOmNhc2UiZGVzYyI6Y2FzZSJiaW5hcnktZGF0YSI6Y2FzZSJ0YWJsZS1zb3VyY2UiOmNhc2Uic2NlbmFyaW8iOmNhc2UiaXRlcmF0aW9uIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbnMiOmNhc2UiY29udGVudC12'@;
put 'YWxpZGF0aW9uIjpjYXNlImhlbHAtbWVzc2FnZSI6Y2FzZSJlcnJvci1tZXNzYWdlIjpjYXNlImRhdGFiYXNlLXJhbmdlcyI6Y2FzZSJmaWx0ZXIiOmNhc2UiZmlsdGVyLWFuZCI6Y2FzZSJmaWx0ZXItb3IiOmNhc2UiZmlsdGVyLWNvbmRpdGlvbiI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLWJ1'@;
put 'bGxldCI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLW51bWJlciI6Y2FzZSJsaXN0LWxldmVsLXByb3BlcnRpZXMiOmNhc2Uic2VuZGVyLWZpcnN0bmFtZSI6Y2FzZSJzZW5kZXItbGFzdG5hbWUiOmNhc2Uic2VuZGVyLWluaXRpYWxzIjpjYXNlInNlbmRlci10aXRsZSI6Y2FzZSJzZW5kZXItcG9z'@;
put 'aXRpb24iOmNhc2Uic2VuZGVyLWVtYWlsIjpjYXNlInNlbmRlci1waG9uZS1wcml2YXRlIjpjYXNlInNlbmRlci1mYXgiOmNhc2Uic2VuZGVyLWNvbXBhbnkiOmNhc2Uic2VuZGVyLXBob25lLXdvcmsiOmNhc2Uic2VuZGVyLXN0cmVldCI6Y2FzZSJzZW5kZXItY2l0eSI6Y2FzZSJzZW5kZXIt'@;
put 'cG9zdGFsLWNvZGUiOmNhc2Uic2VuZGVyLWNvdW50cnkiOmNhc2Uic2VuZGVyLXN0YXRlLW9yLXByb3ZpbmNlIjpjYXNlImF1dGhvci1uYW1lIjpjYXNlImF1dGhvci1pbml0aWFscyI6Y2FzZSJjaGFwdGVyIjpjYXNlImZpbGUtbmFtZSI6Y2FzZSJ0ZW1wbGF0ZS1uYW1lIjpjYXNlInNoZWV0'@;
put 'LW5hbWUiOmNhc2UiZXZlbnQtbGlzdGVuZXIiOmNhc2UiaW5pdGlhbC1jcmVhdG9yIjpjYXNlImNyZWF0aW9uLWRhdGUiOmNhc2UicHJpbnQtZGF0ZSI6Y2FzZSJnZW5lcmF0b3IiOmNhc2UiZG9jdW1lbnQtc3RhdGlzdGljIjpjYXNlInVzZXItZGVmaW5lZCI6Y2FzZSJlZGl0aW5nLWR1cmF0'@;
put 'aW9uIjpjYXNlImVkaXRpbmctY3ljbGVzIjpjYXNlImNvbmZpZy1pdGVtIjpjYXNlInBhZ2UtbnVtYmVyIjpjYXNlInBhZ2UtY291bnQiOmNhc2UidGltZSI6Y2FzZSJjZWxsLXJhbmdlLXNvdXJjZSI6Y2FzZSJkZXRlY3RpdmUiOmNhc2Uib3BlcmF0aW9uIjpjYXNlImhpZ2hsaWdodGVkLXJh'@;
put 'bmdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGUiOmNhc2Uic291cmNlLWNlbGwtcmFuZ2UiOmNhc2Uic291cmNlLXNlcnZpY2UiOmNhc2UiZGF0YS1waWxvdC1maWVsZCI6Y2FzZSJkYXRhLXBpbG90LWxldmVsIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWxzIjpjYXNlImRhdGEtcGlsb3Qtc3Vi'@;
put 'dG90YWwiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXJzIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVyIjpjYXNlImRhdGEtcGlsb3QtZGlzcGxheS1pbmZvIjpjYXNlImRhdGEtcGlsb3Qtc29ydC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtbGF5b3V0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1maWVsZC1y'@;
put 'ZWZlcmVuY2UiOmNhc2UiZGF0YS1waWxvdC1ncm91cHMiOmNhc2UiZGF0YS1waWxvdC1ncm91cCI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwLW1lbWJlciI6Y2FzZSJyZWN0IjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2xzIjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2wiOmNhc2UiZGRlLWxpbmsi'@;
put 'OmNhc2UiZGRlLXNvdXJjZSI6Y2FzZSJwcm9wZXJ0aWVzIjpjYXNlInByb3BlcnR5IjpjYXNlInRhYmxlLXByb3RlY3Rpb24iOmNhc2UiZGF0YS1waWxvdC1ncmFuZC10b3RhbCI6Y2FzZSJvZmZpY2UtZG9jdW1lbnQtY29tbW9uLWF0dHJzIjpicmVhaztjYXNlIm51bWJlci1zdHlsZSI6Y2Fz'@;
put 'ZSJwZXJjZW50YWdlLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6aWYoIi8iPT09VHRbMV0pe2lmKEJyW0dlLm5hbWVdPW50LChIZT1TZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrSGV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5s'@;
put 'ZW5ndGgtMikmJihudD0iIixHZT1sbihUdFswXSwhMSksU2UucHVzaChbVHRbM10sITBdKSk7YnJlYWs7Y2FzZSJzdHlsZSI6Ii8+Ij09PVR0WzBdLnNsaWNlKC0yKT9MKFR0WzBdLF9vKToiLyI9PVR0WzFdP0wodmUuc2xpY2UoVGksVHQuaW5kZXgrVHRbMF0ubGVuZ3RoKSxfbyk6VGk9VHQu'@;
put 'aW5kZXg7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiZGF5IjpjYXNlIm1vbnRoIjpjYXNlInllYXIiOmNhc2UiZXJhIjpjYXNlImRheS1vZi13ZWVrIjpjYXNlIndlZWstb2YteWVhciI6Y2FzZSJxdWFydGVyIjpjYXNlImhvdXJzIjpjYXNlIm1pbnV0ZXMiOmNhc2Uic2Vjb25kcyI6Y2FzZSJh'@;
put 'bS1wbSI6c3dpdGNoKFNlW1NlLmxlbmd0aC0xXVswXSl7Y2FzZSJ0aW1lLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOkJlPWxuKFR0WzBdLCExKSxudCs9UFtUdFszXV1bImxvbmciPT09QmUuc3R5bGU/MTowXX1icmVhaztjYXNlInRleHQiOmlmKCIvPiI9PT1UdFswXS5zbGljZSgtMikpYnJl'@;
put 'YWs7aWYoIi8iPT09VHRbMV0pc3dpdGNoKFNlW1NlLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpudCs9dmUuc2xpY2UoZHQsVHQuaW5kZXgpfWVsc2UgZHQ9VHQuaW5kZXgrVHRbMF0ubGVuZ3RoO2JyZWFrO2Nhc2Ui'@;
put 'bmFtZWQtcmFuZ2UiOndpPXl2KChCZT1sbihUdFswXSwhMSkpWyJjZWxsLXJhbmdlLWFkZHJlc3MiXSk7dmFyIE1zPXtOYW1lOkJlLm5hbWUsUmVmOndpWzBdKyIhIit3aVsxXX07eG8mJihNcy5TaGVldD1GdC5sZW5ndGgpLFNuLk5hbWVzLnB1c2goTXMpO2JyZWFrO2Nhc2UicCI6Y2FzZSJc'@;
put 'dTY1ODdcdTY3MmNcdTRlMzIiOmlmKFsibWFzdGVyLXN0eWxlcyJdLmluZGV4T2YoU2VbU2UubGVuZ3RoLTFdWzBdKT4tMSlicmVhaztpZigiLyIhPT1UdFsxXXx8cG4mJnBuWyJzdHJpbmctdmFsdWUiXSlsbihUdFswXSwhMSksdW49VHQuaW5kZXgrVHRbMF0ubGVuZ3RoO2Vsc2V7dmFyIHlz'@;
put 'PXkodmUuc2xpY2UodW4sVHQuaW5kZXgpLDAsX28pO0tuPShLbi5sZW5ndGg+MD9LbisiXG4iOiIiKSt5c1swXSx6bj15c1sxXX1icmVhaztjYXNlImRhdGFiYXNlLXJhbmdlIjppZigiLyI9PT1UdFsxXSlicmVhazt0cnl7YnRbKHdpPXl2KGxuKFR0WzBdKVsidGFyZ2V0LXJhbmdlLWFkZHJl'@;
put 'c3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOndpWzFdfX1jYXRjaHt9YnJlYWs7Y2FzZSJhIjppZigiLyIhPT1UdFsxXSl7aWYoIShtcj1sbihUdFswXSwhMSkpLmhyZWYpYnJlYWs7bXIuVGFyZ2V0PXhyKG1yLmhyZWYpLGRlbGV0ZSBtci5ocmVmLCIjIj09bXIuVGFyZ2V0LmNoYXJB'@;
put 'dCgwKSYmbXIuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8od2k9eXYobXIuVGFyZ2V0LnNsaWNlKDEpKSxtci5UYXJnZXQ9IiMiK3dpWzBdKyIhIit3aVsxXSk6bXIuVGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwvXS8pJiYobXIuVGFyZ2V0PW1yLlRhcmdldC5zbGljZSgzKSl9YnJlYWs7ZGVmYXVs'@;
put 'dDpzd2l0Y2goVHRbMl0pe2Nhc2UiZGM6IjpjYXNlImNhbGNleHQ6IjpjYXNlImxvZXh0OiI6Y2FzZSJvb286IjpjYXNlImNoYXJ0b29vOiI6Y2FzZSJkcmF3OiI6Y2FzZSJzdHlsZToiOmNhc2UiY2hhcnQ6IjpjYXNlImZvcm06IjpjYXNlInVvZjoiOmNhc2UiXHU4ODY4OiI6Y2FzZSJcdTVi'@;
put 'NTc6IjpicmVhaztkZWZhdWx0OmlmKF9lLldURil0aHJvdyBuZXcgRXJyb3IoVHQpfX12YXIgRWw9e1NoZWV0czpidCxTaGVldE5hbWVzOkZ0LFdvcmtib29rOlNufTtyZXR1cm4gX2UuYm9va1NoZWV0cyYmZGVsZXRlIEVsLlNoZWV0cyxFbH19KCk7ZnVuY3Rpb24gYV8oeSxQKXtyZXR1cm4g'@;
put 'UTAoeSxQKX12YXIgSzE9ZnVuY3Rpb24oKXt2YXIgeT1bIiAgPG9mZmljZTptYXN0ZXItc3R5bGVzPiIsJyAgICA8c3R5bGU6bWFzdGVyLXBhZ2Ugc3R5bGU6bmFtZT0ibXAxIiBzdHlsZTpwYWdlLWxheW91dC1uYW1lPSJtcDEiPicsIiAgICAgIDxzdHlsZTpoZWFkZXIvPiIsJyAgICAgIDxz'@;
put 'dHlsZTpoZWFkZXItbGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxzZSIvPicsIiAgICAgIDxzdHlsZTpmb290ZXIvPiIsJyAgICAgIDxzdHlsZTpmb290ZXItbGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxzZSIvPicsIiAgICA8L3N0eWxlOm1hc3Rlci1wYWdlPiIsIiAgPC9vZmZpY2U6bWFzdGVyLXN0'@;
put 'eWxlcz4iXS5qb2luKCJcbiIpLFA9IjxvZmZpY2U6ZG9jdW1lbnQtc3R5bGVzICIrUGEoeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6'@;
put 'eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNp'@;
put 'czpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1s'@;
put 'bnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3Zn'@;
put 'LWNvbXBhdGlibGU6MS4wIiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsIm9mZmljZTp2ZXJzaW9uIjoiMS4yIn0pKyI+XG4iK3krIlxuPC9vZmZpY2U6ZG9jdW1lbnQtc3R5bGVzPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEJu'@;
put 'K1B9fSgpLHYwPWZ1bmN0aW9uKCl7dmFyIHk9ZnVuY3Rpb24odmUsU2Upe3JldHVybiBIcih2ZSkucmVwbGFjZSgvICArL2csZnVuY3Rpb24oSGUpe3JldHVybic8dGV4dDpzIHRleHQ6Yz0iJytIZS5sZW5ndGgrJyIvPid9KS5yZXBsYWNlKC9cdC9nLCI8dGV4dDp0YWIvPiIpLnJlcGxhY2Uo'@;
put 'L1xuL2csU2U/Ijx0ZXh0OmxpbmUtYnJlYWsvPiI6IjwvdGV4dDpwPjx0ZXh0OnA+IikucmVwbGFjZSgvXiAvLCI8dGV4dDpzLz4iKS5yZXBsYWNlKC8gJC8sIjx0ZXh0OnMvPiIpfSxQPWZ1bmN0aW9uKHZlKXtyZXR1cm4gdmUubWFwKGZ1bmN0aW9uKFNlKXt2YXIgSGU9IiI7cmV0dXJuIG51'@;
put 'bGwhPVNlLm9kcyYmKEhlKz0nIHRleHQ6c3R5bGUtbmFtZT0iVCcrU2Uub2RzKyciJyksU2Uudj8iPHRleHQ6c3BhbiIrSGUrIj4iK3koU2UudiwhMCkrIjwvdGV4dDpzcGFuPiI6IiJ9KS5qb2luKCIiKX0sTD0iICAgICAgICAgIDx0YWJsZTp0YWJsZS1jZWxsIC8+XG4iLHJlPWZ1bmN0aW9u'@;
put 'KHZlLFNlLEhlKXt2YXIgQmU9W107QmUucHVzaCgnICAgICAgPHRhYmxlOnRhYmxlIHRhYmxlOm5hbWU9IicrSHIoU2UuU2hlZXROYW1lc1tIZV0pKyciIHRhYmxlOnN0eWxlLW5hbWU9InRhMSI+XG4nKTt2YXIgR2U9MCxudD0wLGR0PVdzKHZlWyIhcmVmIl18fCJBMSIpLEN0PXZlWyIhbWVy'@;
put 'Z2VzIl18fFtdLGN0PTAsYnQ9QXJyYXkuaXNBcnJheSh2ZSk7aWYodmVbIiFjb2xzIl0pZm9yKG50PTA7bnQ8PWR0LmUuYzsrK250KUJlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLWNvbHVtbiIrKHZlWyIhY29scyJdW250XT8nIHRhYmxlOnN0eWxlLW5hbWU9ImNvJyt2ZVsiIWNvbHMi'@;
put 'XVtudF0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLWNvbHVtbj5cbiIpO3ZhciBrdD12ZVsiIXJvd3MiXXx8W107Zm9yKEdlPTA7R2U8ZHQucy5yOysrR2UpQmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbR2VdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W0dl'@;
put 'XS5vZHMrJyInOiIiKSsiPjwvdGFibGU6dGFibGUtcm93PlxuIik7Zm9yKDtHZTw9ZHQuZS5yOysrR2Upe2ZvcihCZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhrdFtHZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycra3RbR2VdLm9kcysnIic6IiIpKyI+XG4iKSxudD0wO250'@;
put 'PGR0LnMuYzsrK250KUJlLnB1c2goTCk7Zm9yKDtudDw9ZHQuZS5jOysrbnQpe3ZhciBUdD0hMSxadD17fSxwbj0iIjtmb3IoY3Q9MDtjdCE9Q3QubGVuZ3RoOysrY3QpaWYoIShDdFtjdF0ucy5jPm50fHxDdFtjdF0ucy5yPkdlfHxDdFtjdF0uZS5jPG50fHxDdFtjdF0uZS5yPEdlKSl7KEN0'@;
put 'W2N0XS5zLmMhPW50fHxDdFtjdF0ucy5yIT1HZSkmJihUdD0hMCksWnRbInRhYmxlOm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXT1DdFtjdF0uZS5jLUN0W2N0XS5zLmMrMSxadFsidGFibGU6bnVtYmVyLXJvd3Mtc3Bhbm5lZCJdPUN0W2N0XS5lLnItQ3RbY3RdLnMucisxO2JyZWFrfWlmKFR0'@;
put 'KUJlLnB1c2goIiAgICAgICAgICA8dGFibGU6Y292ZXJlZC10YWJsZS1jZWxsLz5cbiIpO2Vsc2V7dmFyIEtuPWRpKHtyOkdlLGM6bnR9KSx1bj1idD8odmVbR2VdfHxbXSlbbnRdOnZlW0tuXTtpZih1biYmdW4uZiYmKFp0WyJ0YWJsZTpmb3JtdWxhIl09SHIoY1ModW4uZikpLHVuLkYmJnVu'@;
put 'LkYuc2xpY2UoMCxLbi5sZW5ndGgpPT1Lbikpe3ZhciBxbj1Xcyh1bi5GKTtadFsidGFibGU6bnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXT1xbi5lLmMtcW4ucy5jKzEsWnRbInRhYmxlOm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl09cW4uZS5yLXFuLnMucisxfWlmKHVuKXtz'@;
put 'd2l0Y2godW4udCl7Y2FzZSJiIjpwbj11bi52PyJUUlVFIjoiRkFMU0UiLFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJib29sZWFuIixadFsib2ZmaWNlOmJvb2xlYW4tdmFsdWUiXT11bi52PyJ0cnVlIjoiZmFsc2UiO2JyZWFrO2Nhc2UibiI6cG49dW4ud3x8U3RyaW5nKHVuLnZ8fDApLFp0'@;
put 'WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJmbG9hdCIsWnRbIm9mZmljZTp2YWx1ZSJdPXVuLnZ8fDA7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6cG49dW4udixadFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0ic3RyaW5nIjticmVhaztjYXNlImQiOnBuPXVuLnd8fEh0KHVuLnYpLnRvSVNPU3RyaW5n'@;
put 'KCksWnRbIm9mZmljZTp2YWx1ZS10eXBlIl09ImRhdGUiLFp0WyJvZmZpY2U6ZGF0ZS12YWx1ZSJdPUh0KHVuLnYpLnRvSVNPU3RyaW5nKCksWnRbInRhYmxlOnN0eWxlLW5hbWUiXT0iY2UxIjticmVhaztkZWZhdWx0OkJlLnB1c2goTCk7Y29udGludWV9bnVsbCE9dW4ub2RzJiYhWnRbInRh'@;
put 'YmxlOnN0eWxlLW5hbWUiXSYmKFp0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlIit1bi5vZHMpO3ZhciB6bj0hdW4uUnx8dW4ubCYmdW4ubC5UYXJnZXQ/eShwbik6UCh1bi5SKTtpZih1bi5sJiZ1bi5sLlRhcmdldCl7dmFyIGtuPXVuLmwuVGFyZ2V0OyIjIiE9KGtuPSIjIj09a24uY2hhckF0'@;
put 'KDApPyIjIit1Uyhrbi5zbGljZSgxKSk6a24pLmNoYXJBdCgwKSYmIWtuLm1hdGNoKC9eXHcrOi8pJiYoa249Ii4uLyIra24pLHpuPVNyKCJ0ZXh0OmEiLHpuLHsieGxpbms6aHJlZiI6a24ucmVwbGFjZSgvJi9nLCImYW1wOyIpfSl9QmUucHVzaCgiICAgICAgICAgICIrU3IoInRhYmxlOnRh'@;
put 'YmxlLWNlbGwiLFNyKCJ0ZXh0OnAiLHpuLHt9KSxadCkrIlxuIil9ZWxzZSBCZS5wdXNoKEwpfX1CZS5wdXNoKCIgICAgICAgIDwvdGFibGU6dGFibGUtcm93PlxuIil9cmV0dXJuIEJlLnB1c2goIiAgICAgIDwvdGFibGU6dGFibGU+XG4iKSxCZS5qb2luKCIiKX0sZ2U9e2NlbnRlcjoiY2Vu'@;
put 'dGVyIixsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9O3JldHVybiBmdW5jdGlvbihTZSxIZSl7dmFyIEJlPVtCbl0sR2U9UGEoeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpu'@;
put 'YW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwi'@;
put 'eG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3Lncz'@;
put 'Lm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm1ldGEiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5k'@;
put 'b2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6cHJlc2VudGF0aW9uIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpwcmVzZW50YXRpb246MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29t'@;
put 'cGF0aWJsZToxLjAiLCJ4bWxuczpjaGFydCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y2hhcnQ6MS4wIiwieG1sbnM6ZHIzZCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHIzZDoxLjAiLCJ4bWxuczptYXRoIjoiaHR0cDovL3d3dy53'@;
put 'My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsInhtbG5zOmZvcm0iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmZvcm06MS4wIiwieG1sbnM6c2NyaXB0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzY3JpcHQ6MS4wIiwieG1sbnM6b29vIjoi'@;
put 'aHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvb2ZmaWNlIiwieG1sbnM6b29vdyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L3dyaXRlciIsInhtbG5zOm9vb2MiOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC9jYWxjIiwieG1sbnM6ZG9tIjoiaHR0cDovL3d3dy53My5vcmcvMjAw'@;
put 'MS94bWwtZXZlbnRzIiwieG1sbnM6eGZvcm1zIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMi94Zm9ybXMiLCJ4bWxuczp4c2QiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsInhtbG5zOnhzaSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiwi'@;
put 'eG1sbnM6c2hlZXQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnNoMzN0anM6MS4wIiwieG1sbnM6cnB0IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDUvcmVwb3J0IiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIs'@;
put 'InhtbG5zOnhodG1sIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsInhtbG5zOmdyZGRsIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmlldyMiLCJ4bWxuczp0YWJsZW9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA5L3RhYmxlIiwieG1sbnM6ZHJhd29vbyI6'@;
put 'Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDEwL2RyYXciLCJ4bWxuczpjYWxjZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOmNhbGM6eG1sbnM6Y2FsY2V4dDoxLjAiLCJ4bWxuczpsb2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5h'@;
put 'bWVzOmV4cGVyaW1lbnRhbDpvZmZpY2U6eG1sbnM6bG9leHQ6MS4wIiwieG1sbnM6ZmllbGQiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b29vLW1zLWludGVyb3A6eG1sbnM6ZmllbGQ6MS4wIiwieG1sbnM6Zm9ybXgiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmlt'@;
put 'ZW50YWw6b294bWwtb2RmLWludGVyb3A6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpjc3MzdCI6Imh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdGV4dC8iLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSxudD1QYSh7InhtbG5zOmNvbmZpZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1l'@;
put 'bnQ6eG1sbnM6Y29uZmlnOjEuMCIsIm9mZmljZTptaW1ldHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQifSk7ImZvZHMiPT1IZS5ib29rVHlwZT8oQmUucHVzaCgiPG9mZmljZTpkb2N1bWVudCIrR2UrbnQrIj5cbiIpLEJlLnB1c2goUzQoKS5y'@;
put 'ZXBsYWNlKC9vZmZpY2U6ZG9jdW1lbnQtbWV0YS9nLCJvZmZpY2U6bWV0YSIpKSk6QmUucHVzaCgiPG9mZmljZTpkb2N1bWVudC1jb250ZW50IitHZSsiPlxuIiksZnVuY3Rpb24odmUsU2Upe3ZhciBIZT1bXSxCZT17fTtIZS5wdXNoKCIgPG9mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIiks'@;
put 'SGUucHVzaCgnICA8bnVtYmVyOmRhdGUtc3R5bGUgc3R5bGU6bmFtZT0iTjM3IiBudW1iZXI6YXV0b21hdGljLW9yZGVyPSJ0cnVlIj5cbicpLEhlLnB1c2goJyAgIDxudW1iZXI6bW9udGggbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxIZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVt'@;
put 'YmVyOnRleHQ+XG4iKSxIZS5wdXNoKCcgICA8bnVtYmVyOmRheSBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLEhlLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLEhlLnB1c2goIiAgIDxudW1iZXI6eWVhci8+XG4iKSxIZS5wdXNoKCIgIDwvbnVtYmVyOmRhdGUt'@;
put 'c3R5bGU+XG4iKTt2YXIgR2U9MDtTZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtpZihjdCYmY3RbIiFjb2xzIl0pZm9yKHZhciBidD0wO2J0PGN0WyIhY29scyJdLmxlbmd0aDsrK2J0KWlmKGN0WyIhY29s'@;
put 'cyJdW2J0XSl7dmFyIEZ0PWN0WyIhY29scyJdW2J0XTtpZihudWxsPT1GdC53aWR0aCYmbnVsbD09RnQud3B4JiZudWxsPT1GdC53Y2gpY29udGludWU7cHUoRnQpLEZ0Lm9kcz1HZTt2YXIga3Q9Y3RbIiFjb2xzIl1bYnRdLndweCsicHgiO0hlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxl'@;
put 'Om5hbWU9ImNvJytHZSsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNvbHVtbiI+XG4nKSxIZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtY29sdW1uLXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpjb2x1bW4td2lkdGg9Iicra3QrJyIvPlxuJyksSGUucHVzaCgiICA8L3N0'@;
put 'eWxlOnN0eWxlPlxuIiksKytHZX19KTt2YXIgbnQ9MDtTZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtpZihjdCYmY3RbIiFyb3dzIl0pZm9yKHZhciBidD0wO2J0PGN0WyIhcm93cyJdLmxlbmd0aDsrK2J0'@;
put 'KWlmKGN0WyIhcm93cyJdW2J0XSl7Y3RbIiFyb3dzIl1bYnRdLm9kcz1udDt2YXIgRnQ9Y3RbIiFyb3dzIl1bYnRdLmhweCsicHgiO0hlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InJvJytudCsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLXJvdyI+XG4nKSxIZS5wdXNoKCcgICA8'@;
put 'c3R5bGU6dGFibGUtcm93LXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpyb3ctaGVpZ2h0PSInK0Z0KyciLz5cbicpLEhlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrbnR9fSksSGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0idGExIiBzdHls'@;
put 'ZTpmYW1pbHk9InRhYmxlIiBzdHlsZTptYXN0ZXItcGFnZS1uYW1lPSJtcDEiPlxuJyksSGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXByb3BlcnRpZXMgdGFibGU6ZGlzcGxheT0idHJ1ZSIgc3R5bGU6d3JpdGluZy1tb2RlPSJsci10YiIvPlxuJyksSGUucHVzaCgiICA8L3N0eWxlOnN0eWxl'@;
put 'PlxuIiksSGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY2UxIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNlbGwiIHN0eWxlOnBhcmVudC1zdHlsZS1uYW1lPSJEZWZhdWx0IiBzdHlsZTpkYXRhLXN0eWxlLW5hbWU9Ik4zNyIvPlxuJyk7dmFyIGR0PTI7bnQ9MCxTZS5TaGVldE5h'@;
put 'bWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtpZihjdClmb3IodmFyIGJ0PTAsRnQ9MCxrdD1XcyhjdFsiIXJlZiJdKSxUdD1BcnJheS5pc0FycmF5KGN0KTtidDw9a3QuZS5yOysrYnQpZm9yKEZ0PTA7RnQ8PWt0LmUuYzsr'@;
put 'K0Z0KXt2YXIgWnQ9ZGkoe3I6YnQsYzpGdH0pLHBuPVR0PyhjdFtidF18fFtdKVtGdF06Y3RbWnRdO2lmKHBuJiYocG4uc3x8cG4uUikpe3ZhciBLbj1bXTtwbi5zJiZLbi5wdXNoKFtwbiwhMF0pLHBuLlImJnBuLlIuZm9yRWFjaChmdW5jdGlvbih1bil7dW4mJnVuLnMmJktuLnB1c2goW3Vu'@;
put 'LCExXSl9KSxLbi5mb3JFYWNoKGZ1bmN0aW9uKHVuKXt2YXIgcW49dW5bMF0sem49cW4ucyxrbj0iIixlcj17InN0eWxlOm5hbWUiOih1blsxXT8iY2UiOiJUIikrZHQsInN0eWxlOmZhbWlseSI6dW5bMV0/InRhYmxlLWNlbGwiOiJ0ZXh0In07dW5bMV0mJihlclsic3R5bGU6cGFyZW50LXN0'@;
put 'eWxlLW5hbWUiXT0iRGVmYXVsdCIsZXJbInN0eWxlOmRhdGEtc3R5bGUtbmFtZSJdPSJOMCIpO3ZhciB0cj17fSxabj0hMSxCcj17fSxzaT0hMSx4aT17fSxMaT0hMTtpZih6bi5jb2xvciYmKEJyWyJmbzpjb2xvciJdPSIjIitPdSh6bi5jb2xvci5yZ2IpLHNpPSEwKSx6bi5zeiYmKEJyWyJm'@;
put 'bzpmb250LXNpemUiXT16bi5zeisicHQiLHNpPSEwKSx6bi5ib2xkJiYoQnJbImZvOmZvbnQtd2VpZ2h0Il09ImJvbGQiLHNpPSEwKSx6bi5pdGFsaWMmJihCclsiZm86Zm9udC1zdHlsZSJdPSJpdGFsaWMiLHNpPSEwKSx6bi5uYW1lJiYoQmVbem4ubmFtZV18fChCZVt6bi5uYW1lXT16bi5u'@;
put 'YW1lLm1hdGNoKC8gLyk/IiZhcG9zOyIrem4ubmFtZSsiJmFwb3M7Ijp6bi5uYW1lKSxCclsic3R5bGU6Zm9udC1uYW1lIl09em4ubmFtZSxzaT0hMCksem4uc3RyaWtlJiYoQnJbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXN0eWxlIl09InNvbGlkIixCclsic3R5bGU6dGV4dC1saW5lLXRo'@;
put 'cm91Z2gtdHlwZSJdPSJzaW5nbGUiLHNpPSEwKSx6bi51bmRlcmxpbmUmJihCclsic3R5bGU6dGV4dC11bmRlcmxpbmUtc3R5bGUiXT0ic29saWQiLEJyWyJzdHlsZTp0ZXh0LXVuZGVybGluZS13aWR0aCJdPSJhdXRvIixCclsic3R5bGU6dGV4dC11bmRlcmxpbmUtY29sb3IiXT0iZm9udC1j'@;
put 'b2xvciIsc2k9ITApLHVuWzFdKXtpZih6bi5hbGlnbm1lbnQpe3ZhciBRcj16bi5hbGlnbm1lbnQ7UXIud3JhcFRleHQmJih0clsiZm86d3JhcC1vcHRpb24iXT0id3JhcCIsWm49ITApLFFyLnZlcnRpY2FsJiYodHJbInN0eWxlOnZlcnRpY2FsLWFsaWduIl09ImNlbnRlciI9PVFyLnZlcnRp'@;
put 'Y2FsPyJtaWRkbGUiOlFyLnZlcnRpY2FsLFpuPSEwKSxnZVtRci5ob3Jpem9udGFsXSYmKHhpWyJmbzp0ZXh0LWFsaWduIl09Z2VbUXIuaG9yaXpvbnRhbF0sTGk9ITApfXpuLmZnQ29sb3ImJih0clsiZm86YmFja2dyb3VuZC1jb2xvciJdPSIjIitPdSh6bi5mZ0NvbG9yLnJnYiksWm49ITAp'@;
put 'fVpuJiYoa24rPVNyKCJzdHlsZTp0YWJsZS1jZWxsLXByb3BlcnRpZXMiLG51bGwsdHIpKSxzaSYmKGtuKz1Tcigic3R5bGU6dGV4dC1wcm9wZXJ0aWVzIixudWxsLEJyKSksTGkmJihrbis9U3IoInN0eWxlOnBhcmFncmFwaC1wcm9wZXJ0aWVzIixudWxsLHhpKSksSGUucHVzaCgiICAiK1Ny'@;
put 'KCJzdHlsZTpzdHlsZSIsa24sZXIpKyJcbiIpLHFuLm9kcz1kdCwrK2R0fSl9fX0pLEhlLnB1c2goIiA8L29mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIik7dmFyIEN0PSIgPG9mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iK2x0KEJlKS5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybicgIDxzdHls'@;
put 'ZTpmb250LWZhY2Ugc3R5bGU6bmFtZT0iJytjdCsnIiBzdmc6Zm9udC1mYW1pbHk9IicrQmVbY3RdKyciLz5cbid9KS5qb2luKCIiKSsiIDwvb2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiI7dmUucHVzaChDdCksdmUucHVzaChIZS5qb2luKCIiKSl9KEJlLFNlKSxCZS5wdXNoKCIgIDxvZmZp'@;
put 'Y2U6Ym9keT5cbiIpLEJlLnB1c2goIiAgICA8b2ZmaWNlOnNwcmVhZHNoZWV0PlxuIik7Zm9yKHZhciBkdD0wO2R0IT1TZS5TaGVldE5hbWVzLmxlbmd0aDsrK2R0KUJlLnB1c2gocmUoU2UuU2hlZXRzW1NlLlNoZWV0TmFtZXNbZHRdXSxTZSxkdCkpO3JldHVybiBCZS5wdXNoKCIgICAgPC9v'@;
put 'ZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKSxCZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4iKSxCZS5wdXNoKCJmb2RzIj09SGUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRvY3VtZW50PiI6Ijwvb2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+IiksQmUuam9pbigiIil9fSgpO2Z1bmN0aW9uIF8wKHksUCl7'@;
put 'aWYoImZvZHMiPT1QLmJvb2tUeXBlKXJldHVybiB2MCh5LFApO3ZhciBMPXluKCksUT0iIixyZT1bXSxnZT1bXTtyZXR1cm4gWXQoTCxRPSJtaW1ldHlwZSIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiKSxZdChMLFE9ImNvbnRlbnQueG1sIix2MCh5'@;
put 'LFApKSxyZS5wdXNoKFtRLCJ0ZXh0L3htbCJdKSxnZS5wdXNoKFtRLCJDb250ZW50RmlsZSJdKSxZdChMLFE9InN0eWxlcy54bWwiLEsxKHksUCkpLHJlLnB1c2goW1EsInRleHQveG1sIl0pLGdlLnB1c2goW1EsIlN0eWxlc0ZpbGUiXSksWXQoTCxRPSJtZXRhLnhtbCIsQm4rUzQoKSkscmUu'@;
put 'cHVzaChbUSwidGV4dC94bWwiXSksZ2UucHVzaChbUSwiTWV0YWRhdGFGaWxlIl0pLFl0KEwsUT0ibWFuaWZlc3QucmRmIixmdW5jdGlvbiBHaCh5KXt2YXIgUD1bQm5dO1AucHVzaCgnPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgt'@;
put 'bnMjIj5cbicpO2Zvcih2YXIgTD0wO0whPXkubGVuZ3RoOysrTClQLnB1c2goTDEoeVtMXVswXSx5W0xdWzFdKSksUC5wdXNoKFZvKCIiLHlbTF1bMF0pKTtyZXR1cm4gUC5wdXNoKEwxKCIiLCJEb2N1bWVudCIsInBrZyIpKSxQLnB1c2goIjwvcmRmOlJERj4iKSxQLmpvaW4oIiIpfShnZSkp'@;
put 'LHJlLnB1c2goW1EsImFwcGxpY2F0aW9uL3JkZit4bWwiXSksWXQoTCxRPSJNRVRBLUlORi9tYW5pZmVzdC54bWwiLGZ1bmN0aW9uIExkKHkpe3ZhciBQPVtCbl07UC5wdXNoKCc8bWFuaWZlc3Q6bWFuaWZlc3QgeG1sbnM6bWFuaWZlc3Q9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1l'@;
put 'bnQ6eG1sbnM6bWFuaWZlc3Q6MS4wIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiPlxuJyksUC5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iLyIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIiBtYW5pZmVzdDptZWRpYS10eXBlPSJhcHBsaWNhdGlvbi92bmQu'@;
put 'b2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Ii8+XG4nKTtmb3IodmFyIEw9MDtMPHkubGVuZ3RoOysrTClQLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSInK3lbTF1bMF0rJyIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iJyt5W0xdWzFdKyciLz5c'@;
put 'bicpO3JldHVybiBQLnB1c2goIjwvbWFuaWZlc3Q6bWFuaWZlc3Q+IiksUC5qb2luKCIiKX0ocmUpKSxMfWZ1bmN0aW9uIFgxKHkpe3JldHVybiBmdW5jdGlvbihMLFEpe3ZhciByZT1mdW5jdGlvbiBETSh5LFApe2lmKCFQKXJldHVybiAwO3ZhciBMPXkuU2hlZXROYW1lcy5pbmRleE9mKFAp'@;
put 'O2lmKC0xPT1MKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK1ApO3JldHVybiBMfShMLFEuc2hlZXQpO3JldHVybiB5LmZyb21fc2hlZXQoTC5TaGVldHNbTC5TaGVldE5hbWVzW3JlXV0sUSxMKX19dmFyIGxSPVgxKEZ1KSxjUj1YMSh7ZnJvbV9zaGVldDpqbH0pLHVSPVgx'@;
put 'KHR5cGVvZiBFOTwidSI/RTk6e30pLGRSPVgxKHR5cGVvZiBNMzwidSI/TTM6e30pLGxfPVgxKHR5cGVvZiBCMTwidSI/QjE6e30pLHk1PVgxKHR5cGVvZiBPbTwidSI/T206e30pLGhSPVgxKHtmcm9tX3NoZWV0OnhSfSksSU09WDEodHlwZW9mIEIyPCJ1Ij9CMjp7fSksZlI9WDEodHlwZW9m'@;
put 'IE80PCJ1Ij9PNDp7fSksYWM9Rig3NzkwMyl8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvQnJvd3NlcmlmeTtpZighYWMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBjcnlwdG8gZXh0ZW5zaW9ucyEiKTt2YXIgY189e1NIQTUxMjoic2hhNTEyIixTSEEyNTY6InNoYTI1'@;
put 'NiIsU0hBMzg0OiJzaGEzODQiLFNIQTE6InNoYTEiLE1ENToibWQ1IixNRDQ6Im1kNCIsTUQyOiJtZDIifTtmdW5jdGlvbiBlbCh5LFApe3N3aXRjaChQPShQfHwiIikucmVwbGFjZSgvLS9nLCIiKSl7Y2FzZSJTSEEtNTEyIjpjYXNlIlNIQTUxMiI6cmV0dXJuIG5ldyBhYy5jcmVhdGVIYXNo'@;
put 'KCJzaGE1MTIiKS51cGRhdGUoeSkuZGlnZXN0KCk7Y2FzZSJTSEEtMSI6Y2FzZSJTSEExIjpyZXR1cm4gbmV3IGFjLmNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUoeSkuZGlnZXN0KCk7Y2FzZSJNRDIiOnJldHVybiBuZXcgYWMuY3JlYXRlSGFzaCgibWQyIikudXBkYXRlKHkpLmRpZ2VzdCgp'@;
put 'O2RlZmF1bHQ6aWYoY19bUF0pcmV0dXJuIG5ldyBhYy5jcmVhdGVIYXNoKGNfW1BdKS51cGRhdGUoeSkuZGlnZXN0KCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK1ApfX1mdW5jdGlvbiBKMSh5LFAsTCl7aWYoInJjMiI9PUwpdGhyb3ciVW5zdXBwb3J0'@;
put 'ZWQgUkMyIjt2YXIgUT1hYy5jcmVhdGVEZWNpcGhlcml2KEx8fCJhZXMtMjU2LWNiYyIseSxQKTtyZXR1cm4gUS5zZXRBdXRvUGFkZGluZyghMSksUX1mdW5jdGlvbiBSNih5KXtyZXR1cm5bKCIwMCIrKDI1NSZ5KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoeT4+PjgmMjU1KS50'@;
put 'b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoeT4+PjE2JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKHk+Pj4yNCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpXS5qb2luKCIiKX12YXIgTzY9ZnVuY3Rpb24oeSxQLEwpe2Zvcih2YXIgUT0ic3RyaW5nIj09dHlw'@;
put 'ZW9mIFA/QnVmZmVyLmZyb20oUCwiaGV4Iik6UCxyZT0ic3RyaW5nIj09dHlwZW9mIHk/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCx5KSk6eSxnZT0ic3RyaW5nIj09dHlwZW9mIEw/QnVmZmVyLmZyb20oTCwiaGV4Iik6TCxfZT1lbChyZSwiTUQ1IiksdmU9QnVmZmVy'@;
put 'LmNvbmNhdChbX2Uuc2xpY2UoMCw1KSxRXSksU2U9MDtTZTw0OysrU2UpdmU9QnVmZmVyLmNvbmNhdChbdmUsdmVdKTt2YXIgSGU9ZWwodmUsIk1ENSIpO3JldHVybihlbChCdWZmZXIuY29uY2F0KFtIZS5zbGljZSgwLDUpLGdlXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5zbGljZSgwLDMyKX0sZ3I9ZnVuY3Rpb24oeSxQLEwpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUD9CdWZmZXIuZnJvbShQLCJoZXgiKTpQLHJlPSJzdHJpbmciPT10eXBlb2YgeT9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAw'@;
put 'LHkpKTp5LGdlPSJzdHJpbmciPT10eXBlb2YgTD9CdWZmZXIuZnJvbShMLCJoZXgiKTpMLF9lPWVsKEJ1ZmZlci5jb25jYXQoW1EscmVdKSwiU0hBMSIpO3JldHVybiBlbChCdWZmZXIuY29uY2F0KFtfZSxnZV0pLCJTSEExIil9LGIwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUCgpe31QLnByb3Rv'@;
put 'dHlwZS5idWlsZD1mdW5jdGlvbihjdCl7dGhpcy5faT0wO3ZhciBidD10aGlzLl9idWlsZChjdCwiIik7cmV0dXJuIiI9PT1idD8iIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrYnR9LFAucHJvdG90eXBlLl9idWlsZD1mdW5jdGlv'@;
put 'bihjdCxidCl7aWYodGhpcy5faSsrJTFlNj09MCYmKHRoaXMuX2M9YnRbMF0pLG51bGw9PWN0fHwib2JqZWN0IiE9dHlwZW9mIGN0JiYiZnVuY3Rpb24iIT10eXBlb2YgY3QpbnVsbCE9Y3QmJihidCs9ZnVuY3Rpb24geShjdCxidCl7cmV0dXJuIG51bGw9PWN0fHwoY3Q9Y3QudG9TdHJpbmco'@;
put 'KS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksYnQmJihjdD1jdC5yZXBsYWNlKC8iL2csIiZxdW90OyIpKSksY3R9KGN0KSk7ZWxzZXtpZighY3QubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlhNTCBub2RlIGRvZXMgbm90IGhh'@;
put 'dmUgbmFtZTogIitKU09OLnN0cmluZ2lmeShjdCkpO2J0Kz0iPCIrY3QubmFtZTt2YXIgRnQ9dGhpcztidCs9Y3QuYXR0cmlidXRlcyYmUGEoY3QuYXR0cmlidXRlcyl8fCIiLEFycmF5LmlzQXJyYXkoY3QuY2hpbGRyZW4pJiYwIT1jdC5jaGlsZHJlbi5sZW5ndGg/KGJ0Kz0iPiIsY3QuY2hp'@;
put 'bGRyZW4uZm9yRWFjaChmdW5jdGlvbihrdCl7YnQ9RnQuX2J1aWxkKGt0LGJ0KX0pLGJ0Kz0iPC8iK2N0Lm5hbWUrIj4iKTpidCs9Ii8+In1yZXR1cm4gYnR9O3ZhciBMPUJ1ZmZlci5mcm9tKFs0LDAsNCwwLDY0LDAsMCwwXSksZ2U9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZy'@;
put 'b20oWzk1LDE3OCwxNzMsMSwxMiwxODUsMjI1LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEwMywxMjcsMiwxNzgsNDQsMTMyLDUxXSl9LGtleTpCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5m'@;
put 'cm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pfX07ZnVuY3Rpb24gX2UoY3QsYnQsRnQsa3QsVHQsWnQpe3ZhciBwbj1idC50b0xvd2VyQ2FzZSgpKyItIis4Kmt0Lmxlbmd0aDtpZigiQ2hh'@;
put 'aW5pbmdNb2RlQ0JDIiE9PUZ0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIrRnQpO3ZhciBLbj1hY1tjdD8iY3JlYXRlQ2lwaGVyaXYiOiJjcmVhdGVEZWNpcGhlcml2Il0ocG4rPSItY2JjIixrdCxUdCk7S24uc2V0QXV0b1BhZGRpbmcoITEpO3ZhciB1bj1L'@;
put 'bi51cGRhdGUoWnQpLHFuPVt1bl07dHJ5e3ZhciB6bj1Lbi5maW5hbCgpO3FuLnB1c2goem4pfWNhdGNoe31yZXR1cm4gQnVmZmVyLmNvbmNhdChxbil9ZnVuY3Rpb24gdmUoY3Qpe2N0PWN0LnRvTG93ZXJDYXNlKCk7dmFyIGJ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKGFjLmdl'@;
put 'dEhhc2hlcygpLmluZGV4T2YoY3QpPDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK2N0KTt2YXIga3Q9YWMuY3JlYXRlSGFzaChjdCk7cmV0dXJuIGt0LnVwZGF0ZShCdWZmZXIuY29uY2F0KGJ0KSksa3QuZGlnZXN0KCl9ZnVuY3Rpb24gU2UoY3QsYnQs'@;
put 'RnQsa3QpeyJudW1iZXIiPT10eXBlb2Yga3QmJihrdD1IZShrdCkpO3ZhciBUdD12ZShjdCxidCxrdCk7aWYoVHQubGVuZ3RoPEZ0KXt2YXIgWnQ9QnVmZmVyLmFsbG9jKEZ0LDU0KTtUdC5jb3B5KFp0KSxUdD1adH1lbHNlIFR0Lmxlbmd0aD5GdCYmKFR0PVR0LnNsaWNlKDAsRnQpKTtyZXR1'@;
put 'cm4gVHR9ZnVuY3Rpb24gSGUoY3QsYnQpe3ZhciBGdD1CdWZmZXIuYWxsb2MoYnR8fDQpO3JldHVybiBGdC53cml0ZVVJbnQzMkxFKGN0LDApLEZ0fWZ1bmN0aW9uIEJlKGN0LGJ0LEZ0LGt0LFR0LFp0KXtmb3IodmFyIEtuPXZlKGJ0LEZ0LEJ1ZmZlci5mcm9tKGN0LCJ1dGYxNmxlIikpLHVu'@;
put 'PTA7dW48a3Q7dW4rKylLbj12ZShidCxIZSh1biksS24pO3ZhciB6bj1UdC84O2lmKChLbj12ZShidCxLbixadCkpLmxlbmd0aDx6bil7dmFyIGtuPUJ1ZmZlci5hbGxvYyh6biw1NCk7S24uY29weShrbiksS249a259ZWxzZSBLbi5sZW5ndGg+em4mJihLbj1Lbi5zbGljZSgwLHpuKSk7cmV0'@;
put 'dXJuIEtufXJldHVybiBhYy5yYW5kb21CeXRlc3x8KGFjLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKGN0KXtmb3IodmFyIGJ0PUJ1ZmZlci5hbGxvYyhjdCksRnQ9MDtGdDxjdDsrK0Z0KWJ0W0Z0XT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gYnR9KSxmdW5jdGlvbiBDdChj'@;
put 'dCxidCl7aWYoInN0cmluZyI9PXR5cGVvZiBjdClyZXR1cm4gQ3QoQnVmZmVyLmZyb20oY3QsImJpbmFyeSIpLGJ0KTt2YXIgRnQ9YWMucmFuZG9tQnl0ZXMoMzIpLGt0PXtwYWNrYWdlOntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2Fs'@;
put 'dFZhbHVlOmFjLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixrZXlCaXRzOjgqRnQubGVuZ3RofSxrZXk6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6'@;
put 'YWMucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LHNwaW5Db3VudDoxLGtleUJpdHM6MjU2fX0sVHQ9ZnVuY3Rpb24gR2UoY3QsYnQsRnQsa3QsVHQsWnQscG4sS24pe2Zvcih2YXIgdW49W10scW49Y3Q/MDo4LHpuPTAsa249'@;
put 'MCxlcj0wO2VyPEtuLmxlbmd0aDspeyhlcj0oa249ZXIpKzQwOTYpPktuLmxlbmd0aCYmKGVyPUtuLmxlbmd0aCk7dmFyIHRyPUtuLnNsaWNlKGtuK3FuLGVyK3FuKSxabj10ci5sZW5ndGglVHQ7Wm4mJih0cj1CdWZmZXIuY29uY2F0KFt0cixCdWZmZXIuYWxsb2MoVHQtWm4pXSkpO3ZhciBz'@;
put 'aT1fZShjdCxidCxGdCxwbixTZShrdCxadCxUdCx6biksdHIpO3VuLnB1c2goc2kpLHpuKyt9dmFyIHhpPUJ1ZmZlci5jb25jYXQodW4pO2lmKGN0KXhpPUJ1ZmZlci5jb25jYXQoW0hlKEtuLmxlbmd0aCw4KSx4aV0pO2Vsc2V7dmFyIExpPUtuLnJlYWRVSW50MzJMRSgwKTt4aT14aS5zbGlj'@;
put 'ZSgwLExpKX1yZXR1cm4geGl9KCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2UuYmxvY2tTaXplLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLEZ0LGN0KSxadD1hYy5yYW5kb21CeXRl'@;
put 'cyg2NCkscG49U2Uoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLGdlLmRhdGFJbnRlZ3JpdHkuaG1hY0tleSksS249X2UoITAsa3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmlu'@;
put 'ZyxGdCxwbixadCksdW49ZnVuY3Rpb24gbnQoY3QsYnQpe2N0PWN0LnRvTG93ZXJDYXNlKCk7dmFyIEZ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKGFjLmdldEhhc2hlcygpLmluZGV4T2YoY3QpPDApdGhyb3cgbmV3IEVycm9yKCJITUFDIGFsZ29yaXRobSAnIitjdCsiJyBub3Qg'@;
put 'c3VwcG9ydGVkISIpO3ZhciBUdD1hYy5jcmVhdGVIbWFjKGN0LGJ0KTtyZXR1cm4gVHQudXBkYXRlKEJ1ZmZlci5jb25jYXQoRnQpKSxUdC5kaWdlc3QoKX0oa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLFp0LFR0KSxxbj1TZShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5z'@;
put 'YWx0VmFsdWUsa3QucGFja2FnZS5ibG9ja1NpemUsZ2UuZGF0YUludGVncml0eS5obWFjVmFsdWUpLHpuPV9lKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsRnQscW4sdW4pO2t0LmRhdGFJbnRlZ3JpdHk9e2VuY3J5cHRlZEhtYWNLZXk6'@;
put 'S24sZW5jcnlwdGVkSG1hY1ZhbHVlOnpufTt2YXIga249QmUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLGdlLmtleSk7a3Qua2V5LmVuY3J5cHRlZEtleVZhbHVlPV9lKCEwLGt0LmtleS5jaXBoZXJBbGdv'@;
put 'cml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLGtuLGt0LmtleS5zYWx0VmFsdWUsRnQpO3ZhciBlcj1hYy5yYW5kb21CeXRlcygxNiksdHI9QmUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLGdlLnZlcmlm'@;
put 'aWVySGFzaC5pbnB1dCk7a3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0PV9lKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLHRyLGt0LmtleS5zYWx0VmFsdWUsZXIpO3ZhciBabj12ZShrdC5rZXkuaGFzaEFsZ29yaXRobSxlciksQnI9QmUo'@;
put 'YnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLGdlLnZlcmlmaWVySGFzaC52YWx1ZSk7a3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlPV9lKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5'@;
put 'LmNpcGhlckNoYWluaW5nLEJyLGt0LmtleS5zYWx0VmFsdWUsWm4pO3ZhciBzaT1mdW5jdGlvbiBkdChjdCl7dmFyIGJ0PXtuYW1lOiJlbmNyeXB0aW9uIixhdHRyaWJ1dGVzOnt4bWxuczoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9lbmNyeXB0aW9uIiwieG1s'@;
put 'bnM6cCI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiwieG1sbnM6YyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL2NlcnRpZmljYXRlIn0sY2hpbGRyZW46W3tuYW1l'@;
put 'OiJrZXlEYXRhIixhdHRyaWJ1dGVzOntzYWx0U2l6ZTpjdC5wYWNrYWdlLnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOmN0LnBhY2thZ2UuYmxvY2tTaXplLGtleUJpdHM6Y3QucGFja2FnZS5rZXlCaXRzLGhhc2hTaXplOmN0LnBhY2thZ2UuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmN0'@;
put 'LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmN0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTpjdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOmN0LnBhY2thZ2Uuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJk'@;
put 'YXRhSW50ZWdyaXR5IixhdHRyaWJ1dGVzOntlbmNyeXB0ZWRIbWFjS2V5OmN0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY0tleS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkSG1hY1ZhbHVlOmN0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY1ZhbHVlLnRvU3RyaW5nKCJiYXNl'@;
put 'NjQiKX19LHtuYW1lOiJrZXlFbmNyeXB0b3JzIixjaGlsZHJlbjpbe25hbWU6ImtleUVuY3J5cHRvciIsYXR0cmlidXRlczp7dXJpOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCJ9LGNoaWxkcmVuOlt7bmFtZToicDplbmNy'@;
put 'eXB0ZWRLZXkiLGF0dHJpYnV0ZXM6e3NwaW5Db3VudDpjdC5rZXkuc3BpbkNvdW50LHNhbHRTaXplOmN0LmtleS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTpjdC5rZXkuYmxvY2tTaXplLGtleUJpdHM6Y3Qua2V5LmtleUJpdHMsaGFzaFNpemU6Y3Qua2V5Lmhhc2hTaXplLGNpcGhlckFs'@;
put 'Z29yaXRobTpjdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmN0LmtleS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOmN0LmtleS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTpjdC5rZXkuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmll'@;
put 'ckhhc2hJbnB1dDpjdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlOmN0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkS2V5VmFsdWU6Y3Qu'@;
put 'a2V5LmVuY3J5cHRlZEtleVZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19XX1dfV19LGt0PShuZXcgUCkuYnVpbGQoYnQpO3JldHVybiBCdWZmZXIuY29uY2F0KFtMLEJ1ZmZlci5mcm9tKGt0LCJ1dGY4IildKX0oa3QpLHhpPWplLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gamUudXRpbHMuY2Zi'@;
put 'X2FkZCh4aSwiRW5jcnlwdGlvbkluZm8iLHNpKSxqZS51dGlscy5jZmJfYWRkKHhpLCJFbmNyeXB0ZWRQYWNrYWdlIixUdCkseGl9fSgpO2Z1bmN0aW9uIHc1KHkpe3JldHVybiBmdW5jdGlvbihMKXtmb3IodmFyIFE9MDtRIT15Lmxlbmd0aDsrK1Epe3ZhciByZT15W1FdO3ZvaWQgMD09PUxb'@;
put 'cmVbMF1dJiYoTFtyZVswXV09cmVbMV0pLCJuIj09PXJlWzJdJiYoTFtyZVswXV09TnVtYmVyKExbcmVbMF1dKSl9fX12YXIgUDY9ZnVuY3Rpb24oeSl7dzUoW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxU'@;
put 'ZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJvb2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsi'@;
put 'V1RGIiwhMV1dKSh5KSx5LmJvb2tJbWFnZXMmJih5LmNlbGxTdHlsZXM9ITApfSxoXz13NShbWyJjZWxsRGF0ZXMiLCExXSxbImJvb2tTU1QiLCExXSxbImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gUk0oeSl7cmV0dXJuIEhpLldT'@;
put 'LmluZGV4T2YoeSk+LTE/InNoZWV0IjpIaS5DUyYmeT09SGkuQ1M/ImNoYXJ0IjpIaS5EUyYmeT09SGkuRFM/ImRpYWxvZyI6SGkuTVMmJnk9PUhpLk1TPyJtYWNybyI6eSYmeS5sZW5ndGg/eToic2hlZXQifXZhciBGNj1bXTtmdW5jdGlvbiBnUih5LFAsTCxRLHJlLGdlLF9lLHZlLFNlLEhl'@;
put 'LEJlLEdlKXt0cnl7Z2VbUV09RG8oUXQoeSxMLCEwKSxQKTt2YXIgZHQsbnQ9SXQoeSxQKTtzd2l0Y2godmUpe2Nhc2Uic2hlZXQiOmR0PWZ1bmN0aW9uIE5MKHksUCxMLFEscmUsZ2UsX2UsdmUpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIENMKHksUCxMLFEscmUsZ2Us'@;
put 'X2Upe2lmKCF5KXJldHVybiB5O3ZhciB2ZT1QfHx7fTtRfHwoUT17IiFpZCI6e319KSxudWxsIT10ZSYmbnVsbD09dmUuZGVuc2UmJih2ZS5kZW5zZT10ZSk7dmFyIEhlLEN0LGN0LGJ0LEZ0LGt0LFR0LFp0LHBuLEtuLFNlPXZlLmRlbnNlP1tdOnt9LEJlPXtzOntyOjJlNixjOjJlNn0sZTp7'@;
put 'cjowLGM6MH19LEdlPVtdLG50PSExLGR0PSExLHVuPVtdO3ZlLmJpZmY9MTIsdmVbIiFyb3ciXT0wO3ZhciBxbj0wLHpuPSExLGtuPVtdLGVyPXt9LHRyPXZlLnN1cGJvb2tzfHxyZS5zdXBib29rc3x8W1tdXTtpZih0ci5zaGFyZWRmPWVyLHRyLmFycmF5Zj1rbix0ci5TaGVldE5hbWVzPXJl'@;
put 'LlNoZWV0TmFtZXN8fHJlLlNoZWV0cy5tYXAoZnVuY3Rpb24oUXIpe3JldHVybiBRci5uYW1lfSksIXZlLnN1cGJvb2tzJiYodmUuc3VwYm9va3M9dHIscmUuTmFtZXMpKWZvcih2YXIgWm49MDtabjxyZS5OYW1lcy5sZW5ndGg7Kytabil0clswXVtabisxXT1yZS5OYW1lc1tabl07dmFyIEJy'@;
put 'PVtdLHNpPVtdLHhpPSExO2lmKG1mWzE2XT17bjoiQnJ0U2hvcnRSZWFsIixmOmpTfSxIbyh5LGZ1bmN0aW9uKHVyLEFuLHZyKXtpZighZHQpc3dpdGNoKHZyKXtjYXNlIDE0ODpIZT11cjticmVhaztjYXNlIDA6Q3Q9dXIsdmUuc2hlZXRSb3dzJiZ2ZS5zaGVldFJvd3M8PUN0LnImJihkdD0h'@;
put 'MCkscG49SHMoRnQ9Q3QuciksdmVbIiFyb3ciXT1DdC5yLCh1ci5oaWRkZW58fHVyLmhwdHx8bnVsbCE9dXIubGV2ZWwpJiYodXIuaHB0JiYodXIuaHB4PVUxKHVyLmhwdCkpLHNpW3VyLnJdPXVyKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNl'@;
put 'IDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpzd2l0Y2goY3Q9e3Q6dXJbMl19LHVyWzJdKXtjYXNlIm4iOmN0LnY9dXJbMV07YnJlYWs7Y2FzZSJzIjpjdC52PShadD1mNlt1clsxXV0pLnQsdmUuY2VsbFN0'@;
put 'eWxlcyYmKGN0LlI9ZnVuY3Rpb24gdUQoeSxQKXtpZih5LlIpcmV0dXJuIHkuUjtpZihQJiZQLkZvbnRzJiYoMSE9eS5yLmxlbmd0aHx8MCE9eS5yWzBdLmljaCkpe3kuUj1bXTt2YXIgTD0wLFE9eS5yW0xdLHJlPXkucltMKzFdO2ZvcihRLmljaD4wJiZ5LlIucHVzaCh7dDoicyIsdjp5LnQu'@;
put 'c2xpY2UoMCxRLmljaCl9KTtMPHkuci5sZW5ndGgtMTsrK0wpeS5SLnB1c2goe3Q6InMiLHY6eS50LnNsaWNlKChRPXkucltMXSkuaWNoLChyZT15LnJbTCsxXSkuaWNoKSxzOlAuRm9udHNbUS5pZm50XX0pO3JldHVybiB5LlIucHVzaCh7dDoicyIsdjp5LnQuc2xpY2UoKHJlfHxRKS5pY2gp'@;
put 'LHM6UC5Gb250c1socmV8fFEpLmlmbnRdfSkseS5SfX0oWnQsX2UpKTticmVhaztjYXNlImIiOmN0LnY9ISF1clsxXTticmVhaztjYXNlImUiOmN0LnY9dXJbMV0sITEhPT12ZS5jZWxsVGV4dCYmKGN0Lnc9UW9bY3Qudl0pO2JyZWFrO2Nhc2Uic3RyIjpjdC50PSJzIixjdC52PXVyWzFdfWlm'@;
put 'KChidD1fZS5DZWxsWGZbdXJbMF0uaVN0eWxlUmVmXSkmJnA2KGN0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQsdmUsMCxfZSksdmUuY2VsbFN0eWxlcyYmY3QucyYmYnQuYWxpZ25tZW50JiYoY3Qucy5hbGlnbm1lbnQ9b24oYnQuYWxpZ25tZW50KSksa3Q9'@;
put 'LTE9PXVyWzBdLmM/a3QrMTp1clswXS5jLHZlLmRlbnNlPyhTZVtGdF18fChTZVtGdF09W10pLFNlW0Z0XVtrdF09Y3QpOlNlW05zKGt0KStwbl09Y3QsdmUuY2VsbEZvcm11bGEpe2Zvcih6bj0hMSxxbj0wO3FuPGtuLmxlbmd0aDsrK3FuKXt2YXIgcnI9a25bcW5dO0N0LnI+PXJyWzBdLnMu'@;
put 'ciYmQ3Qucjw9cnJbMF0uZS5yJiZrdD49cnJbMF0ucy5jJiZrdDw9cnJbMF0uZS5jJiYoY3QuRj1PbyhyclswXSksem49ITApfSF6biYmdXIubGVuZ3RoPjMmJihjdC5mPXVyWzNdKX1pZihCZS5zLnI+Q3QuciYmKEJlLnMucj1DdC5yKSxCZS5zLmM+a3QmJihCZS5zLmM9a3QpLEJlLmUucjxD'@;
put 'dC5yJiYoQmUuZS5yPUN0LnIpLEJlLmUuYzxrdCYmKEJlLmUuYz1rdCksdmUuY2VsbERhdGVzJiZidCYmIm4iPT1jdC50JiZ3LmlzX2RhdGUody5fdGFibGVbYnQubnVtRm10SWRdKSl7dmFyIFNuPXcucGFyc2VfZGF0ZV9jb2RlKGN0LnYpO1NuJiYoY3QudD0iZCIsY3Qudj1uZXcgRGF0ZShT'@;
put 'bi55LFNuLm0tMSxTbi5kLFNuLkgsU24uTSxTbi5TLFNuLnUpKX1icmVhaztjYXNlIDE6Y2FzZSAxMjppZighdmUuc2hlZXRTdHVic3x8bnQpYnJlYWs7Y3Q9e3Q6InoiLHY6dm9pZCAwfSxrdD0tMT09dXJbMF0uYz9rdCsxOnVyWzBdLmMsKGJ0PV9lLkNlbGxYZlt1clswXS5pU3R5bGVSZWZd'@;
put 'KSYmcDYoY3QsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCx2ZSwwLF9lKSx2ZS5jZWxsU3R5bGVzJiZjdC5zJiZidC5hbGlnbm1lbnQmJihjdC5zLmFsaWdubWVudD1vbihidC5hbGlnbm1lbnQpKSx2ZS5kZW5zZT8oU2VbRnRdfHwoU2VbRnRdPVtdKSxTZVtG'@;
put 'dF1ba3RdPWN0KTpTZVtOcyhrdCkrcG5dPWN0LEJlLnMucj5DdC5yJiYoQmUucy5yPUN0LnIpLEJlLnMuYz5rdCYmKEJlLnMuYz1rdCksQmUuZS5yPEN0LnImJihCZS5lLnI9Q3QuciksQmUuZS5jPGt0JiYoQmUuZS5jPWt0KTticmVhaztjYXNlIDE3Njp1bi5wdXNoKHVyKTticmVhaztjYXNl'@;
put 'IDQ5NDp2YXIgbXI9UVsiIWlkIl1bdXIucmVsSWRdO2Zvcihtcj8odXIuVGFyZ2V0PW1yLlRhcmdldCx1ci5sb2MmJih1ci5UYXJnZXQrPSIjIit1ci5sb2MpLHVyLlJlbD1tcik6IiI9PXVyLnJlbElkJiYodXIuVGFyZ2V0PSIjIit1ci5sb2MpLEZ0PXVyLnJmeC5zLnI7RnQ8PXVyLnJmeC5l'@;
put 'LnI7KytGdClmb3Ioa3Q9dXIucmZ4LnMuYztrdDw9dXIucmZ4LmUuYzsrK2t0KXZlLmRlbnNlPyhTZVtGdF18fChTZVtGdF09W10pLFNlW0Z0XVtrdF18fChTZVtGdF1ba3RdPXt0OiJ6Iix2OnZvaWQgMH0pLFNlW0Z0XVtrdF0ubD11cik6KFR0PWRpKHtjOmt0LHI6RnR9KSxTZVtUdF18fChT'@;
put 'ZVtUdF09e3Q6InoiLHY6dm9pZCAwfSksU2VbVHRdLmw9dXIpO2JyZWFrO2Nhc2UgNDI2OmlmKCF2ZS5jZWxsRm9ybXVsYSlicmVhaztrbi5wdXNoKHVyKSwoS249dmUuZGVuc2U/U2VbRnRdW2t0XTpTZVtOcyhrdCkrcG5dKS5mPXhsKHVyWzFdLEJlLHtyOkN0LnIsYzprdH0sdHIsdmUpLEtu'@;
put 'LkY9T28odXJbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCF2ZS5jZWxsRm9ybXVsYSlicmVhaztlcltkaSh1clswXS5zKV09dXJbMV0sKEtuPXZlLmRlbnNlP1NlW0Z0XVtrdF06U2VbTnMoa3QpK3BuXSkuZj14bCh1clsxXSxCZSx7cjpDdC5yLGM6a3R9LHRyLHZlKTticmVhaztjYXNlIDYwOmlm'@;
put 'KCF2ZS5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7dXIuZT49dXIuczspQnJbdXIuZS0tXT17d2lkdGg6dXIudy8yNTYsaGlkZGVuOiEhKDEmdXIuZmxhZ3MpLGxldmVsOnVyLmxldmVsfSx4aXx8KHhpPSEwKSxwdShCclt1ci5lKzFdKTticmVhaztjYXNlIDE2MTpTZVsiIWF1dG9maWx0ZXIiXT17'@;
put 'cmVmOk9vKHVyKX07YnJlYWs7Y2FzZSA0NzY6U2VbIiFtYXJnaW5zIl09dXI7YnJlYWs7Y2FzZSAxNDc6cmUuU2hlZXRzW0xdfHwocmUuU2hlZXRzW0xdPXt9KSx1ci5uYW1lJiYocmUuU2hlZXRzW0xdLkNvZGVOYW1lPXVyLm5hbWUpLCh1ci5hYm92ZXx8dXIubGVmdCkmJihTZVsiIW91dGxp'@;
put 'bmUiXT17YWJvdmU6dXIuYWJvdmUsbGVmdDp1ci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6cmUuVmlld3N8fChyZS5WaWV3cz1be31dKSxyZS5WaWV3c1swXXx8KHJlLlZpZXdzWzBdPXt9KSx1ci5SVEwmJihyZS5WaWV3c1swXS5SVEw9ITApLHVyLmdyaWR8fChyZS5WaWV3c1swXS5ncmlkPSEx'@;
put 'LFNlWyIhZ3JpZGxpbmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1OlNlWyIhc2hlZXRGb3JtYXQiXT11cjticmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rpb24geUwoeSxQLEwsUSl7aWYoUCl7dmFyIHJlPXtyZWY6UC5zcXJmeCx0OlAudH07UC5vcCYmKHJlLm9wPVAub3ApO3ZhciBnZT0i'@;
put 'IixfZT0iIix2ZT1QLnNxcmZ4PyJzdHJpbmciPT10eXBlb2YgUC5zcXJmeD9PaShQLnNxcmZ4LnNwbGl0KCIsIilbMF0pOlAuc3FyZng6bnVsbDtpZihQLmYxJiYoZ2U9eGwoUC5mMSx2ZSxudWxsLEwsUSwhMCkpLFAuZjImJihfZT14bChQLmYyLHZlLG51bGwsTCxRLCEwKSksUC5vcCYmWyJJ'@;
put 'TiIsIk9UIl0uaW5kZXhPZihQLm9wKT49LTEpcmUubWluPWdlLHJlLm1heD1fZTtlbHNlIGlmKFAub3ApcmUudj1nZTtlbHNlIHRyeXtzd2l0Y2goUC50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09UC5mMVswXVswXVswXSYmMT09UC5mMVswXS5sZW5ndGgpe3JlLmw9UC5mMVswXVswXVsx'@;
put 'XS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpyZS5mPWdlfX1jYXRjaHt9eVsiIXZhbGlkYXRpb25zIl18fCh5WyIhdmFsaWRhdGlvbnMiXT1bXSkseVsiIXZhbGlkYXRpb25zIl0ucHVzaChyZSl9fShTZSx1cix0cix2ZSk7YnJlYWs7Y2FzZSAxNTE6U2VbIiFmcmVlemUiXT11clsw'@;
put 'XTticmVhaztjYXNlIDE1MjpTZVsiIXNlbCJdPXVyO2JyZWFrO2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDQ5OmNhc2UgNTg5OmNhc2UgNjA3'@;
put 'OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2MTpjYXNlIDYzOTpjYXNlIDQ3'@;
put 'ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2UgNTA6Y2FzZSAyMDcwOmNhc2Ug'@;
put 'MTA0NTpicmVhaztjYXNlIDM1Om50PSEwO2JyZWFrO2Nhc2UgMzY6bnQ9ITE7YnJlYWs7Y2FzZSAzNzpHZS5wdXNoKEFuKSxudD0hMDticmVhaztjYXNlIDM4OkdlLnBvcCgpLG50PSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoQW58fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChBbnx8IiIp'@;
put 'LmluZGV4T2YoIkVuZCIpPjApJiYoIW50fHx2ZS5XVEYmJiJCcnRBQ0JlZ2luIiE9R2VbR2UubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrdnIrIiAiK0FuKX19LHZlKSxkZWxldGUgdmUuc3VwYm9va3MsZGVsZXRlIHZlWyIhcm93Il0sIVNlWyIhcmVm'@;
put 'Il0mJihCZS5zLnI8MmU2fHxIZSYmKEhlLmUucj4wfHxIZS5lLmM+MHx8SGUucy5yPjB8fEhlLnMuYz4wKSkmJihTZVsiIXJlZiJdPU9vKEhlfHxCZSkpLHZlLnNoZWV0Um93cyYmU2VbIiFyZWYiXSl7dmFyIExpPU9pKFNlWyIhcmVmIl0pO3ZlLnNoZWV0Um93czw9K0xpLmUuciYmKExpLmUu'@;
put 'cj12ZS5zaGVldFJvd3MtMSxMaS5lLnI+QmUuZS5yJiYoTGkuZS5yPUJlLmUuciksTGkuZS5yPExpLnMuciYmKExpLnMucj1MaS5lLnIpLExpLmUuYz5CZS5lLmMmJihMaS5lLmM9QmUuZS5jKSxMaS5lLmM8TGkucy5jJiYoTGkucy5jPUxpLmUuYyksU2VbIiFmdWxscmVmIl09U2VbIiFyZWYi'@;
put 'XSxTZVsiIXJlZiJdPU9vKExpKSl9cmV0dXJuIHVuLmxlbmd0aD4wJiYoU2VbIiFtZXJnZXMiXT11biksQnIubGVuZ3RoPjAmJihTZVsiIWNvbHMiXT1Cciksc2kubGVuZ3RoPjAmJihTZVsiIXJvd3MiXT1zaSksU2V9KHksUSxMLHJlLGdlLDAsdmUpOmZ1bmN0aW9uIEtaKHksUCxMLFEscmUs'@;
put 'Z2UsX2Upe2lmKCF5KXJldHVybiB5O1F8fChRPXsiIWlkIjp7fX0pLG51bGwhPXRlJiZudWxsPT1QLmRlbnNlJiYoUC5kZW5zZT10ZSk7dmFyIHZlPVAuZGVuc2U/W106e30sU2U9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sSGU9IiIsQmU9IiIsR2U9eS5tYXRjaChhNSk7R2U/KEhl'@;
put 'PXkuc2xpY2UoMCxHZS5pbmRleCksQmU9eS5zbGljZShHZS5pbmRleCtHZVswXS5sZW5ndGgpKTpIZT1CZT15O3ZhciBudD1CZS5sYXN0SW5kZXhPZigiZXh0THN0IiksQ3Q9KC0xPT1udHx8QmUuc2xpY2UobnQpLEhlLm1hdGNoKHh2KSk7Q3Q/djYoQ3RbMF0sMCxyZSxMKTooQ3Q9SGUubWF0'@;
put 'Y2goREkpKSYmZnVuY3Rpb24gX1MoeSxQLEwsUSxyZSxnZSxfZSl7djYoeS5zbGljZSgwLHkuaW5kZXhPZigiPiIpKSwwLFEscmUpO3ZhciB2ZT1QLm1hdGNoKF82KTtpZih2ZSl7dmFyIEhlPVUyKGxuKHZlWzBdKSxnZSxfZSk7TFsiIXRhYmNvbG9yIl09SGV9aWYoKHZlPVAubWF0Y2gobVMp'@;
put 'KSYmbG4odmVbMF0pLmZpdFRvUGFnZSYmKExbIiFwcmludCJdfHwoTFsiIXByaW50Il09e30pLExbIiFwcmludCJdLnByb3BzfHwoTFsiIXByaW50Il0ucHJvcHM9e30pLExbIiFwcmludCJdLnByb3BzLmZpdHx8KExbIiFwcmludCJdLnByb3BzLmZpdD17fSksbnVsbD09TFsiIXByaW50Il0u'@;
put 'cHJvcHMuZml0LmhlaWdodCYmKExbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQ9MSksbnVsbD09TFsiIXByaW50Il0ucHJvcHMuZml0LndpZHRoJiYoTFsiIXByaW50Il0ucHJvcHMuZml0LndpZHRoPTEpKSx2ZT1QLm1hdGNoKHZTKSl7TFsiIW91dGxpbmUiXT17fTt2YXIgR2U9bG4odmVb'@;
put 'MF0pO0dlLnN1bW1hcnlCZWxvdyYmKExbIiFvdXRsaW5lIl0uYWJvdmU9IXlyKEdlLnN1bW1hcnlCZWxvdykpLEdlLnN1bW1hcnlSaWdodCYmKExbIiFvdXRsaW5lIl0ubGVmdD0heXIoR2Uuc3VtbWFyeVJpZ2h0KSl9fShDdFswXSxDdFsxXXx8IiIsdmUscmUsTCxfZSxnZSk7dmFyIGN0PShI'@;
put 'ZS5tYXRjaCgvPCg/Olx3KjopP2RpbWVuc2lvbi8pfHx7aW5kZXg6LTF9KS5pbmRleDtpZihjdD4wKXt2YXIgYnQ9SGUuc2xpY2UoY3QsY3QrNTApLm1hdGNoKCRaKTtidCYmKCFQfHwhUC5ub2RpbSkmJmZ1bmN0aW9uIEFJKHksUCl7dmFyIEw9T2koUCk7TC5zLnI8PUwuZS5yJiZMLnMuYzw9'@;
put 'TC5lLmMmJkwucy5yPj0wJiZMLnMuYz49MCYmKHlbIiFyZWYiXT1PbyhMKSl9KHZlLGJ0WzFdKX12YXIgRnQ9SGUubWF0Y2goSUkpO0Z0JiZGdFsxXSYmZnVuY3Rpb24gZVkoeSxQLEwsUSl7TC5WaWV3c3x8KEwuVmlld3M9W3t9XSk7dmFyIHJlPTA7eS5yZXBsYWNlKHpJLGZ1bmN0aW9uKGdl'@;
put 'LF9lKXt2YXIgdmU9bG4oZ2UpO2lmKEwuVmlld3NbUV18fChMLlZpZXdzW1FdPXt9KSx5cih2ZS5yaWdodFRvTGVmdCkmJihMLlZpZXdzW1FdLlJUTD0hMCksdmUuc2hvd0dyaWRMaW5lcyYmKEwuVmlld3NbUV0uZ3JpZD15cih2ZS5zaG93R3JpZExpbmVzKSxudWxsPT1QWyIhZ3JpZGxpbmVz'@;
put 'Il0mJihQWyIhZ3JpZGxpbmVzIl09eXIodmUuc2hvd0dyaWRMaW5lcykpKSwrdmUuem9vbVNjYWxlJiYoTC5WaWV3c1tRXS56b29tPSt2ZS56b29tU2NhbGUpLHZlLnZpZXcmJihMLlZpZXdzW1FdLnZpZXc9dmUudmlldyksMT09KytyZSYmIi8+IiE9Z2Uuc2xpY2UoLTIpKXt2YXIgU2U9eS5z'@;
put 'bGljZShfZStnZS5sZW5ndGgpLEhlPVNlLm1hdGNoKC88XC8oPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKCFIZSlyZXR1cm4iIjt2YXIgQmU9KFNlPVNlLnNsaWNlKDAsSGUuaW5kZXgpKS5tYXRjaCgvPCg/Olx3Oik/cGFuZSg/OltePmEtel1bXj5dKik/XC8/'@;
put 'Pi8pO2lmKEJlKXt2YXIgR2U9bG4oQmVbMF0pOyJmcm96ZW4iPT1HZS5zdGF0ZT9QWyIhZnJlZXplIl09TnMoK0dlLnhTcGxpdHx8MCkrSHMoK0dlLnlTcGxpdHx8MCk6R2UudG9wTGVmdENlbGwmJihQWyIhZnJlZXplIl09R2UudG9wTGVmdENlbGwpfXZhciBudD1TZS5tYXRjaCgvPCg/Olx3'@;
put 'Oik/c2VsZWN0aW9uKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYobnQpe3ZhciBkdD1sbihudFswXSk7aWYoZHQuYWN0aXZlQ2VsbCYmKFBbIiFzZWwiXT17Y2VsbDpkdC5hY3RpdmVDZWxsfSksZHQuc3FyZWYpe3ZhciBDdD1kdC5zcXJlZi5yZXBsYWNlKC9ccy4qJC8sIiIpO1BbIiFzZWwi'@;
put 'XXx8KFBbIiFzZWwiXT17Y2VsbDpkaShXcyhDdCkucyl9KSxQWyIhc2VsIl0ucmFuZ2U9ZHQuc3FyZWZ9fX1yZXR1cm4iIn0pfShGdFsxXSx2ZSxyZSxMKTt2YXIga3Q9SGUubWF0Y2goZmYpLFR0PVtdO2lmKFAuY2VsbFN0eWxlcyl7dmFyIFp0PUhlLm1hdGNoKFN2KTtadCYmZnVuY3Rpb24g'@;
put 'RzMoeSxQLEwpe2Zvcih2YXIgUT0hMSxyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKXt2YXIgZ2U9bG4oUFtyZV0sITApO2dlLmhpZGRlbiYmKGdlLmhpZGRlbj15cihnZS5oaWRkZW4pKTt2YXIgX2U9cGFyc2VJbnQoZ2UubWluLDEwKS0xLHZlPXBhcnNlSW50KGdlLm1heCwxMCktMTtmb3IoZ2Uu'@;
put 'b3V0bGluZUxldmVsJiYoZ2UubGV2ZWw9K2dlLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIGdlLm1pbixkZWxldGUgZ2UubWF4LGdlLndpZHRoPStnZS53aWR0aCwhUSYmZ2Uud2lkdGgmJihRPSEwKSxwdShnZSksZ2Uuc3R5bGUmJihnZS5zPWM1KGdlLnN0eWxlLEwpKTtfZTw9dmU7KXlbX2Ur'@;
put 'K109b24oZ2UpfX0oVHQsWnQsX2UpfWlmKEdlJiZaSShHZVsxXSxMLHZlLFAsU2UsZ2UsX2UpLFAuY2FsbGJhY2spcmV0dXJuIHZlO3ZhciBwbj1CZS5tYXRjaChUSSk7cG4mJih2ZVsiIXByb3RlY3QiXT1mdW5jdGlvbiB0dCh5KXt2YXIgUD1sbih5LCEwLCEwKSxMPXt9O2lmKHlyKFAuc2hl'@;
put 'ZXQpKXJldHVybiBBdi5mb3JFYWNoKGZ1bmN0aW9uKFEpe0xbUV09bnVsbCE9UFtRXSYmeXIoUFtRXSl9KSxUdi5mb3JFYWNoKGZ1bmN0aW9uKFEpe0xbUV09bnVsbD09UFtRXXx8eXIoUFtRXSl9KSxQLmFsZ29yaXRobU5hbWUmJihMLmVuY3J5cHRpb249e2FsZ286UC5hbGdvcml0aG1OYW1l'@;
put 'LGhhc2g6UC5oYXNoVmFsdWUsc2FsdDpQLnNhbHRWYWx1ZSxzcGluOitQLnNwaW5Db3VudHx8MWU1fSksTH0ocG5bMF0pKTt2YXIgS249QmUubWF0Y2goZzYpO0tuJiYodmVbIiFhdXRvZmlsdGVyIl09ZnVuY3Rpb24gbDUoeSl7cmV0dXJue3JlZjooeS5tYXRjaCgvcmVmPSIoW14iXSopIi8p'@;
put 'fHxbXSlbMV19fShLblswXSkpO3ZhciB1bj1bXSxxbj1CZS5tYXRjaChDdik7aWYocW4pZm9yKGN0PTA7Y3QhPXFuLmxlbmd0aDsrK2N0KXVuW2N0XT1PaShxbltjdF0uc2xpY2UocW5bY3RdLmluZGV4T2YoJyInKSsxKSk7dmFyIHpuPSgtMT09bnQ/QmU6QmUuc2xpY2UoMCxudCkpLm1hdGNo'@;
put 'KG02KTt6biYmKHZlWyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSx6bi5tYXAoZnVuY3Rpb24oQW4pe3JldHVybiBMUyhBbixQLGdlLF9lKX0pKSksbnQ+LTEmJih6bj1CZS5zbGljZShudCkubWF0Y2gobTYpKSYmKHZlWyIhY29uZGZtdCJdfHwodmVbIiFjb25kZm10Il09W10pLHZl'@;
put 'WyIhY29uZGZtdCJdPXZlWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseSh2ZVsiIWNvbmRmbXQiXSx6bi5tYXAoZnVuY3Rpb24oQW4pe3JldHVybiBMUyhBbixQLGdlLF9lLCEwKX0pKSk7dmFyIGtuPSgtMT09bnQ/QmU6QmUuc2xpY2UoMCxudCkpLm1hdGNoKGhTKTtrbiYmKHZlWyIhdmFsaWRh'@;
put 'dGlvbnMiXT1UUyhrblswXSxQKSksbnQ+LTEmJihrbj1CZS5zbGljZShudCkubWF0Y2goaFMpKSYmKHZlWyIhdmFsaWRhdGlvbnMiXXx8KHZlWyIhdmFsaWRhdGlvbnMiXT1bXSksdmVbIiF2YWxpZGF0aW9ucyJdPXZlWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQoVFMoa25bMF0sUCwhMCkpKTt2'@;
put 'YXIgZXI9QmUubWF0Y2goZFMpO2VyJiZmdW5jdGlvbiBNUyh5LFAsTCl7Zm9yKHZhciBRPUFycmF5LmlzQXJyYXkoeSkscmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7dmFyIGdlPWxuKFBpKFBbcmVdKSwhMCk7aWYoIWdlLnJlZilyZXR1cm47dmFyIF9lPSgoTHx8e30pWyIhaWQiXXx8W10pW2dl'@;
put 'LmlkXTtfZT8oZ2UuVGFyZ2V0PV9lLlRhcmdldCxnZS5sb2NhdGlvbiYmKGdlLlRhcmdldCs9IiMiK3hyKGdlLmxvY2F0aW9uKSkpOihnZS5UYXJnZXQ9IiMiK3hyKGdlLmxvY2F0aW9uKSxfZT17VGFyZ2V0OmdlLlRhcmdldCxUYXJnZXRNb2RlOiJJbnRlcm5hbCJ9KSxnZS5SZWw9X2UsZ2Uu'@;
put 'dG9vbHRpcCYmKGdlLlRvb2x0aXA9Z2UudG9vbHRpcCxkZWxldGUgZ2UudG9vbHRpcCk7Zm9yKHZhciB2ZT1PaShnZS5yZWYpLFNlPXZlLnMucjtTZTw9dmUuZS5yOysrU2UpZm9yKHZhciBIZT12ZS5zLmM7SGU8PXZlLmUuYzsrK0hlKXt2YXIgQmU9ZGkoe2M6SGUscjpTZX0pO1E/KHlbU2Vd'@;
put 'fHwoeVtTZV09W10pLHlbU2VdW0hlXXx8KHlbU2VdW0hlXT17dDoieiIsdjp2b2lkIDB9KSx5W1NlXVtIZV0ubD1nZSk6KHlbQmVdfHwoeVtCZV09e3Q6InoiLHY6dm9pZCAwfSkseVtCZV0ubD1nZSl9fX0odmUsZXIsUSk7dmFyIHRyPUJlLm1hdGNoKExJKTt0ciYmZnVuY3Rpb24gUEkoeSxQ'@;
put 'KXt2YXIgTD1sbih5LCExLCEwKTtQWyIhcHJpbnQiXXx8KFBbIiFwcmludCJdPXt9KSxQWyIhcHJpbnQiXS5wcm9wc3x8KFBbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgUT1QWyIhcHJpbnQiXS5wcm9wcztMLmdyaWRMaW5lcyYmKFEuZ3JpZGxpbmVzPXlyKEwuZ3JpZExpbmVzKSksbnVsbCE9'@;
put 'TC5ob3Jpem9udGFsQ2VudGVyZWQmJihRLmNlbnRlclg9eXIoTC5ob3Jpem9udGFsQ2VudGVyZWQpKSxudWxsIT1MLnZlcnRpY2FsQ2VudGVyZWQmJihRLmNlbnRlclk9eXIoTC52ZXJ0aWNhbENlbnRlcmVkKSl9KHRyWzBdLHZlKTt2YXIgWm49QmUubWF0Y2goTXYpO1puJiYoKHZlWyIhcHJp'@;
put 'bnQiXXx8KHZlWyIhcHJpbnQiXT17fSkpLm1hcmdpbnM9dmVbIiFtYXJnaW5zIl09eFMobG4oWm5bMF0pKSk7dmFyIEJyPUJlLm1hdGNoKFczKTtCciYmZnVuY3Rpb24geVMoeSxQKXt2YXIgTD1sbih5LCExLCEwKTtkZWxldGUgTC5pZCxkZWxldGUgTFswXSxQWyIhcHJpbnQiXXx8KFBbIiFw'@;
put 'cmludCJdPXt9KSxQWyIhcHJpbnQiXS5wcm9wc3x8KFBbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgUT1QWyIhcHJpbnQiXS5wcm9wcztMLm9yaWVudGF0aW9uJiYoUS5vcmllbnRhdGlvbj1MLm9yaWVudGF0aW9uKSxMLnNjYWxlJiYoUS5zY2FsZT0rTC5zY2FsZSksK0wuZml0VG9IZWlnaHQ+'@;
put 'PTAmJigoUS5maXR8fChRLmZpdD17fSkpLmhlaWdodD0rTC5maXRUb0hlaWdodCksK0wuZml0VG9XaWR0aD49MCYmKChRLmZpdHx8KFEuZml0PXt9KSkud2lkdGg9K0wuZml0VG9XaWR0aCksTC5wYXBlckhlaWdodCYmTC5wYXBlcldpZHRoP1EucGFwZXI9e3dpZHRoOkwucGFwZXJXaWR0aCxo'@;
put 'ZWlnaHQ6TC5wYXBlckhlaWdodH06TC5wYXBlclNpemUmJihRLnBhcGVyPVFtW1EucGFwZXI9K0wucGFwZXJTaXplXXx8US5wYXBlciksTC5ob3Jpem9udGFsRHBpP1EuZHBpPStMLmhvcml6b250YWxEcGk6TC52ZXJ0aWNhbERwaSYmKFEuZHBpPStMLnZlcnRpY2FsRHBpKSwiYXV0b21hdGlj'@;
put 'IiE9KEwuZmlyc3RQYWdlTnVtYmVyfHwiYXV0b21hdGljIikmJihRLmZpcnN0PStMLmZpcnN0UGFnZU51bWJlcikseXIoTC5ibGFja0FuZFdoaXRlKSYmKFEuYnc9ITApLHlyKEwuZHJhZnQpJiYoUS5kcmFmdD0hMCksIm92ZXJUaGVuRG93biI9PUwucGFnZU9yZGVyJiYoUS5vcmRlcj0ib3Zl'@;
put 'ciIpLGt2W0wuY2VsbENvbW1lbnRzXSYmKFEuY29tbWVudHM9a3ZbTC5jZWxsQ29tbWVudHNdKSxiU1tMLmVycm9yc10mJihRLmVycm9ycz1iU1tMLmVycm9yc10pfShCclswXSx2ZSk7dmFyIHNpPUJlLm1hdGNoKHFaKTtzaSYmZnVuY3Rpb24gSXYoeSxQKXtpZihQWyIhcHJpbnQiXXx8KFBb'@;
put 'IiFwcmludCJdPXt9KSx5WzFdKXt2YXIgTD0iIixRPTA7eVsxXS5yZXBsYWNlKCR0LGZ1bmN0aW9uKHJlLGdlKXtpZigiLyIhPXJlLmNoYXJBdCgxKSlMPXJlLnNsaWNlKDEsLTEpLFE9Z2UrcmUubGVuZ3RoO2Vsc2UgaWYoTCl7dmFyIF9lPUwubWF0Y2goL0hlYWRlci8pPyJoZWFkZXIiOiJm'@;
put 'b290ZXIiLHZlPUwucmVwbGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO0w9IiIsUFsiIXByaW50Il1bX2VdfHwoUFsiIXByaW50Il1bX2VdPXt9KSxQWyIhcHJpbnQiXVtfZV1bdmVdPXhyKFBpKHlbMV0uc2xpY2UoUSxnZSkpKX19KX19KHNpLHZlKTt2YXIgeGk9QmUubWF0Y2goV2QpO3hpJiYo'@;
put 'KHZlWyIhcHJpbnQiXXx8KHZlWyIhcHJpbnQiXT17fSkpLnJvd0JyZWFrcz12ZVsiIXJvd0JyZWFrcyJdPWZ1bmN0aW9uIFNTKHkpe3ZhciBQPVtdO3JldHVybih5Lm1hdGNoKENTKXx8W10pLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9bG4oTCk7UC5wdXNoKHtSOitRLmlkfSl9KSxQfSh4'@;
put 'aVswXSkpO3ZhciBMaT1CZS5tYXRjaChmUyk7TGkmJigodmVbIiFwcmludCJdfHwodmVbIiFwcmludCJdPXt9KSkuY29sQnJlYWtzPXZlWyIhY29sQnJlYWtzIl09ZnVuY3Rpb24gSEkoeSl7dmFyIFA9W107cmV0dXJuKHkubWF0Y2goQ1MpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIg'@;
put 'UT1sbihMKTtQLnB1c2goe0M6K1EuaWR9KX0pLFB9KExpWzBdKSk7dmFyIFFyPVtdO2lmKChRcj1CZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJih2ZVsiIXJlbCJdPVFyWzFdKSwoUXI9QmUubWF0Y2goL2xlZ2FjeURyYXdpbmcgcjppZD0iKC4qPykiLykpJiYodmVbIiFsZWdy'@;
put 'ZWwiXT1RclsxXSksKFFyPUJlLm1hdGNoKGhmKSkmJih2ZVsiIWN0cmxpZCJdPVFyLm1hcChmdW5jdGlvbihBbil7cmV0dXJuIGxuKEFuKX0pKSwoUXI9QmUubWF0Y2goRXYpKSYmZnVuY3Rpb24gZ1MoeSxQKXt5WyIhdGFibGVyZWZzIl18fCh5WyIhdGFibGVyZWZzIl09W10pLChQLm1hdGNo'@;
put 'KHBTKXx8W10pLmZvckVhY2goZnVuY3Rpb24oTCl7eVsiIXRhYmxlcmVmcyJdLnB1c2gobG4oTCkuaWQpfSl9KHZlLFFyWzFdKSxQJiZQLm5vZGltJiYoU2Uucy5jPVNlLnMucj0wKSwhdmVbIiFyZWYiXSYmU2UuZS5jPj1TZS5zLmMmJlNlLmUucj49U2Uucy5yJiYodmVbIiFyZWYiXT1PbyhT'@;
put 'ZSkpLFAuc2hlZXRSb3dzPjAmJnZlWyIhcmVmIl0pe3ZhciB1cj1PaSh2ZVsiIXJlZiJdKTtQLnNoZWV0Um93czw9K3VyLmUuciYmKHVyLmUucj1QLnNoZWV0Um93cy0xLHVyLmUucj5TZS5lLnImJih1ci5lLnI9U2UuZS5yKSx1ci5lLnI8dXIucy5yJiYodXIucy5yPXVyLmUuciksdXIuZS5j'@;
put 'PlNlLmUuYyYmKHVyLmUuYz1TZS5lLmMpLHVyLmUuYzx1ci5zLmMmJih1ci5zLmM9dXIuZS5jKSx2ZVsiIWZ1bGxyZWYiXT12ZVsiIXJlZiJdLHZlWyIhcmVmIl09T28odXIpKX1yZXR1cm4ga3QmJih2ZVsiIXNoZWV0Rm9ybWF0Il09ZnVuY3Rpb24gWFooeSl7dmFyIFA9e30sTD17fSxRPSEx'@;
put 'LHJlPXt9LGdlPSExO3JldHVybiB5LmRlZmF1bHRSb3dIZWlnaHQmJihRPSEwLEwuaHB0PXBhcnNlRmxvYXQoeS5kZWZhdWx0Um93SGVpZ2h0KSkseS56ZXJvSGVpZ2h0JiYoUT0hMCxMLmhpZGRlbj15cih5Lnplcm9IZWlnaHQpKSx5LmJhc2VDb2xXaWR0aD8oZ2U9ITAscmUud2NoPXBhcnNl'@;
put 'RmxvYXQoeS5iYXNlQ29sV2lkdGgpKTp5LmRlZmF1bHRDb2xXaWR0aCYmKGdlPSEwLHJlLndjaD1wYXJzZUZsb2F0KHkuZGVmYXVsdENvbFdpZHRoKS01L3BsKSx5Lm91dGxpbmVMZXZlbENvbCYmKFAuY29sb3V0bGluZT1wYXJzZUludCh5Lm91dGxpbmVMZXZlbENvbCkpLHkub3V0bGluZUxl'@;
put 'dmVsUm93JiYoUC5yb3dvdXRsaW5lPXBhcnNlSW50KHkub3V0bGluZUxldmVsUm93KSkseS50aGlja0JvdHRvbSYmKFAuYm90dGhpY2s9eXIoeS50aGlja0JvdHRvbSkpLHkudGhpY2tUb3AmJihQLnRvcHRoaWNrPXlyKHkudGhpY2tUb3ApKSx5LmR5RGVzY2VudCYmKFAuZHlEZXNjZW50PXBh'@;
put 'cnNlRmxvYXQoeS5keURlc2NlbnQpKSxRJiYoSTMoTCksUC5yb3c9TCksZ2UmJihwdShyZSksUC5jb2w9cmUpLFB9KGxuKGt0WzBdKSkpLFR0Lmxlbmd0aD4wJiYodmVbIiFjb2xzIl09VHQpLHVuLmxlbmd0aD4wJiYodmVbIiFtZXJnZXMiXT11biksUVsiIWlkIl1bdmVbIiFyZWwiXV0mJih2'@;
put 'ZVsiIWRyYXdlbCJdPVFbIiFpZCJdW3ZlWyIhcmVsIl1dKSxRWyIhaWQiXVt2ZVsiIWxlZ3JlbCJdXSYmKHZlWyIhbGVnZHJhd2VsIl09UVsiIWlkIl1bdmVbIiFsZWdyZWwiXV0pLCh2ZVsiIWN0cmxpZCJdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihBbil7QW4ucmVsPVFbIiFpZCJdW0FuLmlk'@;
put 'XX0pLG51bGw9PXZlWyIhZ3JpZGxpbmVzIl0mJih2ZVsiIWdyaWRsaW5lcyJdPSEwKSx2ZX0oeSxRLEwscmUsZ2UsX2UsdmUpfShudCxQLHJlLFNlLGdlW1FdLEhlLEJlLEdlKTticmVhaztjYXNlImNoYXJ0IjpkdD1mdW5jdGlvbiBWTCh5LFAsTCxRLHJlLGdlLF9lLHZlKXtyZXR1cm4iLmJp'@;
put 'biI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiB0cCh5LFAsTCxRLHJlKXtpZigheSlyZXR1cm4geTtRfHwoUT17IiFpZCI6e319KTt2YXIgZ2U9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LF9lPVtdLHZlPSExO3JldHVybiBIbyh5LGZ1bmN0aW9uKEhlLEJlLEdl'@;
put 'KXtzd2l0Y2goR2Upe2Nhc2UgNTUwOmdlWyIhcmVsIl09SGU7YnJlYWs7Y2FzZSA2NTE6cmUuU2hlZXRzW0xdfHwocmUuU2hlZXRzW0xdPXt9KSxIZS5uYW1lJiYocmUuU2hlZXRzW0xdLkNvZGVOYW1lPUhlLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5'@;
put 'OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OnZlPSEwO2JyZWFrO2Nhc2UgMzY6dmU9ITE7YnJlYWs7Y2FzZSAzNzpfZS5wdXNoKEJlKTticmVhaztjYXNlIDM4Ol9lLnBvcCgpO2JyZWFrO2RlZmF1bHQ6aWYoKEJlfHwiIikuaW5kZXhPZigiQmVn'@;
put 'aW4iKT4wKV9lLnB1c2goQmUpO2Vsc2UgaWYoKEJlfHwiIikuaW5kZXhPZigiRW5kIik+MClfZS5wb3AoKTtlbHNlIGlmKCF2ZXx8UC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0dlKyIgIitCZSl9fSxQKSxRWyIhaWQiXVtnZVsiIXJlbCJdXSYmKGdlWyIhZHJh'@;
put 'd2VsIl09UVsiIWlkIl1bZ2VbIiFyZWwiXV0pLGdlfSh5LFEsTCxyZSxnZSk6ZnVuY3Rpb24gSjMoeSxQLEwsUSxyZSl7aWYoIXkpcmV0dXJuIHk7UXx8KFE9eyIhaWQiOnt9fSk7dmFyIF9lLGdlPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSx2ZT15Lm1hdGNo'@;
put 'KHh2KTt2ZSYmdjYodmVbMF0sMCxyZSxMKTt2YXIgU2U9eS5tYXRjaChNdik7cmV0dXJuIFNlJiYoZ2VbIiFtYXJnaW5zIl09eFMobG4oU2VbMF0pKSksKF9lPXkubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYoZ2VbIiFyZWwiXT1fZVsxXSksUVsiIWlkIl1bZ2VbIiFyZWwiXV0m'@;
put 'JihnZVsiIWRyYXdlbCJdPVFbIiFpZCJdW2dlWyIhcmVsIl1dKSxnZX0oeSwwLEwscmUsZ2UpfShudCxQLHJlLFNlLGdlW1FdLEhlKTticmVhaztjYXNlIm1hY3JvIjpkdD1mdW5jdGlvbiBCTCh5LFAsTCxRLHJlLGdlLF9lLHZlKXtyZXR1cm4gUC5zbGljZSgtNCkseyIhdHlwZSI6Im1hY3Jv'@;
put 'In19KDAsUCk7YnJlYWs7Y2FzZSJkaWFsb2ciOmR0PWZ1bmN0aW9uIGpMKHksUCxMLFEscmUsZ2UsX2UsdmUpe3JldHVybiBQLnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsUCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIr'@;
put 'dmUpfWlmKFNlLmNhbGxiYWNrKXJldHVybjtfZVtRXT1kdCxmdW5jdGlvbiBQTSh5LFAsTCxRLHJlLGdlLF9lLHZlKXtpZih5JiZ5WyIhZHJhd2VsIl0pe3ZhciBTZT1zbih5WyIhZHJhd2VsIl0uVGFyZ2V0LFEpLEhlPUJpKFNlKSxCZT1mdW5jdGlvbiBHRCh5LFAsTCxRLHJlKXt2YXIgZ2U9'@;
put 'e2NoYXJ0czpbXSxpbWFnZXM6W10sc2hhcGVzOltdfTtpZigheSlyZXR1cm4gZ2U7dmFyIF9lPXJlfHx7fTtyZXR1cm4oeS5tYXRjaCgvPFtePF0qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdv'@;
put 'Q2VsbEFuY2hvcikuKj8+L2cpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPSIiLEhlPXt0eXBlOiIifSxCZT17fSxHZT0hMCxudD0hMSxkdD0hMSxDdD0hMSxjdD17czp7fX0sYnQ9LTEsRnQ9W10sa3Q9W10sVHQ9e3M6e2FsaWdubWVudDp7aG9yaXpvbnRhbDoiY2VudGVyIix2'@;
put 'ZXJ0aWNhbDoiY2VudGVyIn19fSxadD0iIixwbj0tMSx1bj17fTt2ZS5yZXBsYWNlKCR0LGZ1bmN0aW9uKHFuLHpuKXtGdD1udWxsO3ZhciBrbj1sbihxbiksZXI9am4oa25bMF0pLnJlcGxhY2UoL1tcL10/PiQvLCIiKTtzd2l0Y2goZXIpe2Nhc2UiPGNsaWVudERhdGEiOmJyZWFrO2Nhc2Ui'@;
put 'PGFic29sdXRlQW5jaG9yIjpjYXNlIjxvbmVDZWxsQW5jaG9yIjpjYXNlIjx0d29DZWxsQW5jaG9yIjpIZS50eXBlPWpuKGtuWzBdKS5yZXBsYWNlKC9bPD5dL2csIiIpO2JyZWFrO2Nhc2UiPC9hYnNvbHV0ZUFuY2hvciI6Y2FzZSI8L29uZUNlbGxBbmNob3IiOmNhc2UiPC90d29DZWxsQW5j'@;
put 'aG9yIjpicmVhaztjYXNlIjxwb3MiOkhlLnBvcz17eDora24ueCx5Oitrbi55fTticmVhaztjYXNlIjxleHQiOkdlJiYoSGUuZXh0PXt4Oitrbi5jeCx5Oitrbi5jeX0pO2JyZWFrO2Nhc2UiPGZyb20iOmNhc2UiPHRvIjpCZT17fTticmVhaztjYXNlIjwvZnJvbSI6R2UmJihIZS5mcm9tPUJl'@;
put 'KTticmVhaztjYXNlIjwvdG8iOkdlJiYoSGUudG89QmUpO2JyZWFrO2Nhc2UiPGNvbCI6Y2FzZSI8Y29sT2ZmIjpjYXNlIjxyb3ciOmNhc2UiPHJvd09mZiI6YnQ9em4rcW4ubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2wiOkJlLmM9K3ZlLnNsaWNlKGJ0LHpuKTticmVhaztjYXNlIjwvY29sT2Zm'@;
put 'IjpCZS5jT2ZmPSt2ZS5zbGljZShidCx6bik7YnJlYWs7Y2FzZSI8L3JvdyI6QmUucj0rdmUuc2xpY2UoYnQsem4pO2JyZWFrO2Nhc2UiPC9yb3dPZmYiOkJlLnJPZmY9K3ZlLnNsaWNlKGJ0LHpuKTticmVhaztjYXNlIjxzcCI6U2U9InNoYXBlIixUdC5BbmNob3I9SGUsZ2Uuc2hhcGVzLnB1'@;
put 'c2goVHQpLEdlPSExO2JyZWFrO2Nhc2UiPC9zcCI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpY0ZyYW1lIjpTZT0iZ3JhcGhpYyIsR2U9ITE7YnJlYWs7Y2FzZSI8L2dyYXBoaWNGcmFtZSI6R2U9ITA7YnJlYWs7Y2FzZSI8cGljIjpTZT0icGljdHVyZSIsR2U9ITE7YnJlYWs7Y2FzZSI8L3Bp'@;
put 'YyI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JwU3AiOlNlPSJncm91cHNoYXBlIixHZT0hMTticmVhaztjYXNlIjwvZ3JwU3AiOkdlPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWMiOmNhc2UiPC9ncmFwaGljIjpjYXNlIjx4ZnJtIjpjYXNlIjwveGZybSI6Y2FzZSI8b2ZmIjpicmVhaztjYXNlIjxncmFw'@;
put 'aGljRGF0YSI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2dyYXBoaWNEYXRhIjpudD0hMTticmVhaztjYXNlIjxibGlwRmlsbCI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2JsaXBGaWxsIjpudD0hMTticmVhaztjYXNlIjwvYmxpcCI6YnJlYWs7Y2FzZSI8c3JjUmVjdCI6bnQ9ITA7YnJlYWs7Y2FzZSI8L3Ny'@;
put 'Y1JlY3QiOm50PSExO2JyZWFrO2Nhc2UiPG5vRmlsbCI6aWYoZHQpYnJlYWs7IjxzcFByIj09a3Quc2xpY2UoLTEpWzBdJiYoVHQucy5mZ0NvbG9yPW51bGwpO2JyZWFrO2Nhc2UiPC9zb2xpZEZpbGwiOmlmKGR0fHxDdClicmVhazsiPHNwUHIiPT1rdC5zbGljZSgtMilbMF0/VHQucy5mZ0Nv'@;
put 'bG9yPXVuOiI8clByIj09a3Quc2xpY2UoLTIpWzBdJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihjdC5zLmNvbG9yPXVuKSx1bj17fSxDdD0hMTticmVhaztjYXNlIjxwcnN0R2VvbSI6InNoYXBlIj09U2UmJihUdFsiIXNoYXBlIl09a24ucHJzdCk7YnJlYWs7Y2FzZSI8L3Byc3RHZW9t'@;
put 'IjpjYXNlIjxhdkxzdCI6YnJlYWs7Y2FzZSI8dHhCb2R5IjpudD0hMCxUdC5SPVtdO2JyZWFrO2Nhc2UiPC90eEJvZHkiOm50PSExO2JyZWFrO2Nhc2UiPGJvZHlQciI6VHQucy5hbGlnbm1lbnQudmVydGljYWw9WURba24uYW5jaG9yfHwidCJdfHwidG9wIjticmVhaztjYXNlIjxsc3RTdHls'@;
put 'ZSI6YnJlYWs7Y2FzZSI8dCI6cG49em4rcW4ubGVuZ3RoO2JyZWFrO2Nhc2UiPGJyIjpjYXNlIjxici8+IjpadCs9IlxuIjticmVhaztjYXNlIjwvdCI6WnQrPXZlLnNsaWNlKHBuLHpuKTticmVhaztjYXNlIjxwUHIiOlR0LnMuYWxpZ25tZW50Lmhvcml6b250YWx8fChUdC5zLmFsaWdubWVu'@;
put 'dC5ob3Jpem9udGFsPUxDW2tuLmFsZ258fCJsIl18fCJsZWZ0Iiksa3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoY3Qucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1MQ1trbi5hbGdufHwibCJdfHwibGVmdCIpO2JyZWFrO2Nhc2UiPHJQciI6a24uc3omJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4t'@;
put 'MSYmKFR0LnMuc3o9Y3Qucy5zej0ra24uc3ovMTAwKTticmVhaztjYXNlIjxwIjpadD0iIixjdD17dDoicyIsdjoiIixzOnthbGlnbm1lbnQ6e319fTticmVhaztjYXNlIjwvcCI6InNoYXBlIj09U2UmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFR0LnY9KFR0LnZ8fCIiKStadCxjdC52'@;
put 'PVp0LFR0LlIucHVzaChjdCkpO2JyZWFrO2Nhc2UiPGxhdGluIjprbi50eXBlZmFjZSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoY3Qucy5uYW1lPWtuLnR5cGVmYWNlKTticmVhaztjYXNlIjxzdHlsZSI6bnQ9ITAsZHQ9ITA7YnJlYWs7Y2FzZSI8L3N0eWxlIjpudD0hMSxkdD0hMTti'@;
put 'cmVhaztjYXNlIjxsblJlZiI6Y2FzZSI8ZmlsbFJlZiI6Y2FzZSI8ZWZmZWN0UmVmIjpjYXNlIjxmb250UmVmIjpicmVhaztjYXNlIjwvZmlsbFJlZiI6IWR0JiYic2hhcGUiPT1TZSYmKFR0LnMuZmdDb2xvcj11biksdW49e307YnJlYWs7Y2FzZSI8L2ZvbnRSZWYiOiFkdCYmInNoYXBlIj09'@;
put 'U2UmJihUdC5zLmNvbG9yPXVuKSx1bj17fTticmVhaztjYXNlIjxzY2hlbWVDbHIiOnZhciB0cj17YmcxOiJsdDEiLGJnMjoibHQyIix0eDE6ImRrMSIsdHgyOiJkazIifVtrbi52YWxdfHxrbi52YWwsWm49KChRLnRoZW1lRWxlbWVudHN8fHt9KS5jbHJTY2hlbWV8fFtdKS5maW5kKGZ1bmN0'@;
put 'aW9uKHNpKXtyZXR1cm4gc2kubmFtZT09dHJ9KTtabj91bi5yZ2I9Wm4ucmdiOkN0PSEwO2JyZWFrO2Nhc2UiPHNjcmdiQ2xyIjpDdD0hMDticmVhaztjYXNlIjxzcmdiQ2xyIjp1bi5yZ2I9a24udmFsLnNsaWNlKC02KTticmVhaztjYXNlIjxoc2xDbHIiOmNhc2UiPHN5c0NsciI6Y2FzZSI8'@;
put 'cHJzdENsciI6Q3Q9ITA7YnJlYWs7Y2FzZSI8Y2hhcnQiOkZ0PWdlLmNoYXJ0czt2YXIgQnI9a24uaWQ7Y2FzZSI8YmxpcCI6RnR8fChGdD1nZS5pbWFnZXMsQnI9a24uZW1iZWQpLEZ0LnB1c2goe0FuY2hvcjpIZSxUYXJnZXQ6KFBbIiFpZCJdW0JyXXx8e30pLlRhcmdldH0pLGtuLmxpbmsm'@;
put 'JihGdFtGdC5sZW5ndGgtMV0uTGluaz0oUFsiIWlkIl1ba24ubGlua118fHt9KS5UYXJnZXQpO2JyZWFrO2Nhc2UiPGdycFNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9ncnBTcFByIjpudD0hMTticmVhaztjYXNlIjxudkdycFNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9udkdycFNwUHIiOm50'@;
put 'PSExO2JyZWFrO2Nhc2UiPHNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9zcFByIjpudD0hMTticmVhaztjYXNlIjxzdHJldGNoIjpjYXNlIjwvc3RyZXRjaCI6Y2FzZSI8ZmlsbFJlY3QiOmNhc2UiPG52R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9udkdyYXBoaWNGcmFtZVByIjpjYXNlIjxjTnZH'@;
put 'cmFwaGljRnJhbWVQciI6Y2FzZSI8L2NOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjxncmFwaGljRnJhbWVMb2NrcyI6Y2FzZSI8bnZQaWNQciI6Y2FzZSI8L252UGljUHIiOmNhc2UiPGNOdlBpY1ByIjpjYXNlIjwvY052UGljUHIiOmNhc2UiPHBpY0xvY2tzIjpjYXNlIjxjTnZHcnBTcFByIjpj'@;
put 'YXNlIjwvY052R3JwU3BQciI6Y2FzZSI8Z3JwU3BMb2NrcyI6Y2FzZSI8bnZTcFByIjpjYXNlIjwvbnZTcFByIjpjYXNlIjxjTnZTcFByIjpjYXNlIjwvY052U3BQciI6Y2FzZSI8c3BMb2NrcyI6YnJlYWs7Y2FzZSI8Y052UHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9jTnZQciI6bnQ9ITE7YnJl'@;
put 'YWs7Y2FzZSI8Y3huU3AiOm50PSEwO2JyZWFrO2Nhc2UiPC9jeG5TcCI6bnQ9ITE7YnJlYWs7Y2FzZSI8Y052Q3huU3BQciI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2NOdkN4blNwUHIiOm50PSExO2JyZWFrO2Nhc2UiPG52Q3huU3BQciI6Y2FzZSI8L252Q3huU3BQciI6YnJlYWs7Y2FzZSI8ZXh0'@;
put 'THN0IjpudD0hMCxkdD0hMDticmVhaztjYXNlIjwvZXh0THN0IjpudD0hMSxkdD0hMTticmVhaztjYXNlIjwvZXh0IjpicmVhaztkZWZhdWx0OmlmKF9lJiZfZS5XVEYmJiFudCl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2tuWzBdKyIgaW4gZHJhd2luZyIpfXJldHVybiI8LyI9'@;
put 'PWVyLnNsaWNlKDAsMik/a3QucG9wKCk6Ii8+IiE9cW4uc2xpY2UocW4ubGVuZ3RoLTIpJiZrdC5wdXNoKGVyKSwiIn0pfSksZ2V9KFF0KEwsU2UsITApLERvKFF0KEwsSGUsITApLFNlKSwwLHZlLHJlKTtpZihCZSl7aWYoQmUuY2hhcnRzKWZvcih2YXIgR2U9MDtHZTxCZS5jaGFydHMubGVu'@;
put 'Z3RoOysrR2Upe3ZhciBudD1CZS5jaGFydHNbR2VdLGR0PXNuKG50LlRhcmdldCxTZSksQ3Q9QmkoZHQpLGN0PSJjaGFydCI9PVAmJjA9PUdlLGJ0PW0wKFF0KEwsZHQsITApLDAsMCxEbyhRdChMLEN0LCEwKSxkdCksMCxjdD95Om51bGwsbnQsY3Q/bnVsbDp5KTtjdHx8KHlbIiFjaGFydHMi'@;
put 'XXx8KHlbIiFjaGFydHMiXT1bXSkseVsiIWNoYXJ0cyJdLnB1c2goYnQpKX1pZihyZS5ib29rSW1hZ2VzJiZCZS5pbWFnZXMpZm9yKHZhciBGdD0wO0Z0PEJlLmltYWdlcy5sZW5ndGg7KytGdCl7dmFyIGt0PUJlLmltYWdlc1tGdF0sVHQ9eyIhdHlwZSI6ImltYWdlIiwiIXBvcyI6eEMoa3Qu'@;
put 'QW5jaG9yKSwiIXBvc1R5cGUiOmt0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpzZihrdC5BbmNob3IseSksIiFyZWxwb3MiOkttKGt0LkFuY2hvcix5KX07aWYoa3QuVGFyZ2V0JiYoVHRbIiFwYXRoIl09c24oa3QuVGFyZ2V0LFNlKSxUdFsiIWRhdGEiXT1J'@;
put 'dChMLFR0WyIhcGF0aCJdKSxUdFsiIWRhdGF0eXBlIl09InN0cmluZyI9PXR5cGVvZiBUdFsiIWRhdGEiXT8iYmluYXJ5IjoiYnVmZmVyIiksa3QuTGluayYmKFR0WyIhZGF0YXR5cGUiXXx8KFR0WyIhZGF0YXR5cGUiXT0icmVtb3RlIiksVHRbIiFsaW5rIl09a3QuTGluayksIVR0WyIhZGF0'@;
put 'YXR5cGUiXSl0aHJvdyJJbWFnZSBkYXRhIGNhbm5vdCBiZSBmb3VuZCI7eVsiIWltYWdlcyJdfHwoeVsiIWltYWdlcyJdPVtdKSx5WyIhaW1hZ2VzIl0ucHVzaChUdCl9dmFyIFp0LHBuO2lmKEJlLnNoYXBlcylmb3IodmFyIHVuPTA7dW48QmUuc2hhcGVzLmxlbmd0aDsrK3VuKXBuPXsiIXR5'@;
put 'cGUiOiJzaGFwZSIsIiFwb3MiOnNmKChadD1CZS5zaGFwZXNbdW5dKS5BbmNob3IseSksIiFwb3NUeXBlIjpadC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6c2YoWnQuQW5jaG9yLHkpLCIhcmVscG9zIjpLbShadC5BbmNob3IseSl9LFsidiIsIiFzaGFwZSIs'@;
put 'InMiLCJSIl0uZm9yRWFjaChLbikseVsiIXNoYXBlcyJdfHwoeVsiIXNoYXBlcyJdPVtdKSx5WyIhc2hhcGVzIl0ucHVzaChwbil9fWZ1bmN0aW9uIEtuKHFuKXtadFtxbl0mJihwbltxbl09WnRbcW5dKX19KGR0LHZlLHksUCxTZSwwLDAsQmUpO3ZhciBDdD1bXTtyZXR1cm4gZ2UmJmdlW1Fd'@;
put 'JiZsdChnZVtRXSkuZm9yRWFjaChmdW5jdGlvbihjdCl7aWYoZ2VbUV1bY3RdLlR5cGU9PUhpLkNNTlQpe3ZhciBidD1zbihnZVtRXVtjdF0uVGFyZ2V0LFApO2lmKCEoQ3Q9ZnVuY3Rpb24gdVkoeSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIFFEKHksUCl7dmFy'@;
put 'IEw9W10sUT1bXSxyZT17fSxnZT0hMTtyZXR1cm4gSG8oeSxmdW5jdGlvbih2ZSxTZSxIZSl7c3dpdGNoKEhlKXtjYXNlIDYzMjpRLnB1c2godmUpO2JyZWFrO2Nhc2UgNjM1OnJlPXZlO2JyZWFrO2Nhc2UgNjM3OnJlLnQ9dmUudCxyZS5oPXZlLmgscmUucj12ZS5yO2JyZWFrO2Nhc2UgNjM2'@;
put 'OmlmKHJlLmF1dGhvcj1RW3JlLmlhdXRob3JdLGRlbGV0ZSByZS5pYXV0aG9yLFAuc2hlZXRSb3dzJiZyZS5yZngmJlAuc2hlZXRSb3dzPD1yZS5yZngucilicmVhaztyZS50fHwocmUudD0iIiksZGVsZXRlIHJlLnJmeCxMLnB1c2gocmUpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2Ug'@;
put 'Mzg6YnJlYWs7Y2FzZSAzNTpnZT0hMDticmVhaztjYXNlIDM2OmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoU2V8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChTZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIWdlfHxQLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJl'@;
put 'Y29yZCAiK0hlKyIgIitTZSl9fSksTH0oeSxMKTpmdW5jdGlvbiBIQyh5LFApe2lmKHkubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIEw9W10sUT1bXSxyZT15Lm1hdGNoKC88KD86XHcrOik/YXV0aG9ycz4oW1xzXFNdKik8XC8oPzpcdys6KT9hdXRob3Jz'@;
put 'Pi8pO3JlJiZyZVsxXSYmcmVbMV0uc3BsaXQoLzxcL1x3Kjo/YXV0aG9yPi8pLmZvckVhY2goZnVuY3Rpb24oX2Upe2lmKCIiIT09X2UmJiIiIT09X2UudHJpbSgpKXt2YXIgdmU9X2UubWF0Y2goLzwoPzpcdys6KT9hdXRob3JbXj5dKj4oLiopLyk7dmUmJkwucHVzaCh2ZVsxXSl9fSk7dmFy'@;
put 'IGdlPXkubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gZ2UmJmdlWzFdJiZnZVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVhY2goZnVuY3Rpb24oX2Upe2lmKCIiIT09X2UmJiIiIT09X2UudHJp'@;
put 'bSgpKXt2YXIgdmU9X2UubWF0Y2goLzwoPzpcdys6KT9jb21tZW50W14+XSo+Lyk7aWYodmUpe3ZhciBTZT1sbih2ZVswXSksSGU9e2F1dGhvcjpTZS5hdXRob3JJZCYmTFtTZS5hdXRob3JJZF18fCJzaGVldGpzZ2hvc3QiLHJlZjpTZS5yZWYsZ3VpZDpTZS5ndWlkfSxCZT1zcyhTZS5yZWYp'@;
put 'O2lmKCEoUC5zaGVldFJvd3MmJlAuc2hlZXRSb3dzPD1CZS5yKSl7dmFyIEdlPV9lLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLG50PSEhR2UmJiEhR2VbMV0mJkQ5KEdlWzFdKXx8e3I6IiIsdDoiIixoOiIifTtIZS5yPW50LnIsIjx0PjwvdD4i'@;
put 'PT1udC5yJiYobnQudD1udC5oPSIiKSxIZS50PShudC50fHwiIikucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIiksUC5jZWxsSFRNTCYmKEhlLmg9bnQuaCksUS5wdXNoKEhlKX19fX0pLFF9KHksTCl9KEl0KHksYnQsITApLGJ0LFNlKSl8fCFDdC5sZW5ndGgpcmV0'@;
put 'dXJuOyFmdW5jdGlvbiAkOSh5LFApe3ZhciBRLEw9QXJyYXkuaXNBcnJheSh5KTtQLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBnZT1zcyhyZS5yZWYpO2lmKEw/KHlbZ2Uucl18fCh5W2dlLnJdPVtdKSxRPXlbZ2Uucl1bZ2UuY10pOlE9eVtyZS5yZWZdLCFRKXtRPXt0OiJ6In0sTD95W2dl'@;
put 'LnJdW2dlLmNdPVE6eVtyZS5yZWZdPVE7dmFyIF9lPU9pKHlbIiFyZWYiXXx8IkJEV0dPMTAwMDAwMTpBMSIpO19lLnMucj5nZS5yJiYoX2Uucy5yPWdlLnIpLF9lLmUucjxnZS5yJiYoX2UuZS5yPWdlLnIpLF9lLnMuYz5nZS5jJiYoX2Uucy5jPWdlLmMpLF9lLmUuYzxnZS5jJiYoX2UuZS5j'@;
put 'PWdlLmMpO3ZhciB2ZT1PbyhfZSk7dmUhPT15WyIhcmVmIl0mJih5WyIhcmVmIl09dmUpfVEuY3x8KFEuYz1bXSk7dmFyIFNlPXthOnJlLmF1dGhvcix0OnJlLnQscjpyZS5yfTtTZS5yJiYic3RyaW5nIj09dHlwZW9mIFNlLnImJihTZS5SPURtKFNlLnIpKSxyZS5oJiYoU2UuaD1yZS5oKSxR'@;
put 'LmMucHVzaChTZSl9KX0oZHQsQ3QpfX0pLGZ1bmN0aW9uIHBSKHksUCxMLFEscmUsZ2UsX2UpeyF5fHwheVsiIXRhYmxlcmVmcyJdfHwhTHx8IUxbIiFpZCJdfHwoeVsiIXRhYmxlcyJdPVtdLHlbIiF0YWJsZXJlZnMiXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt2YXIgU2U9TFsiIWlkIl1bdmVd'@;
put 'O2lmKFNlJiZTZS5UYXJnZXQpe3ZhciBIZT1zbihTZS5UYXJnZXQsUSk7IWZ1bmN0aW9uICQ0KHksUCxMLFEscmUpe3ZhciBnZT17c3R5bGU6e30saGVhZGVyOjB9LF9lPSExO3kucmVwbGFjZSgkdCxmdW5jdGlvbih2ZSl7dmFyIFNlPWxuKHZlKTtzd2l0Y2goam4oU2VbMF0pKXtjYXNlIjw/'@;
put 'eG1sIjpjYXNlIjwvdGFibGU+IjpjYXNlIjwvYXV0b0ZpbHRlcj4iOmNhc2UiPHNvcnRTdGF0ZSI6Y2FzZSI8c29ydFN0YXRlPiI6Y2FzZSI8L3NvcnRTdGF0ZT4iOmNhc2UiPC90YWJsZUNvbHVtbnMiOmNhc2UiPC90YWJsZUNvbHVtbnM+IjpjYXNlIjwvdGFibGVDb2x1bW4+IjpjYXNlIjxj'@;
put 'YWxjdWxhdGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhIjpjYXNlIjwvY2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYSI6Y2FzZSI8L3RvdGFsc1Jvd0Zvcm11bGE+Ijpj'@;
put 'YXNlIjx4bWxDb2x1bW5Qcj4iOmNhc2UiPHhtbENvbHVtblByIjpjYXNlIjwveG1sQ29sdW1uUHI+IjpjYXNlIjxzb3J0Q29uZGl0aW9uPiI6Y2FzZSI8c29ydENvbmRpdGlvbiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJy'@;
put 'ZWFrO2Nhc2UiPHRhYmxlIjpTZS5yZWYmJihnZS5yZWY9U2UucmVmKSxTZS5uYW1lP2dlLm5hbWU9U2UubmFtZTpTZS5kaXNwbGF5TmFtZSYmKGdlLm5hbWU9U2UuZGlzcGxheU5hbWUpLG51bGwhPVNlLmhlYWRlcnJvd2NvdW50JiYxIT0rU2UuaGVhZGVycm93Y291bnQ/Z2UuaGVhZGVyPStT'@;
put 'ZS5oZWFkZXJyb3djb3VudDpudWxsPT1TZS5oZWFkZXJyb3djb3VudCYmKGdlLmhlYWRlcj0xKTticmVhaztjYXNlIjxhdXRvRmlsdGVyIjpjYXNlIjxhdXRvRmlsdGVyPiI6Z2UuZmlsdGVyPSEwO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1ucyI6Y2FzZSI8dGFibGVDb2x1bW5zPiI6Z2UuY29s'@;
put 'cz1bXTticmVhaztjYXNlIjx0YWJsZVN0eWxlSW5mbyI6U2Uuc2hvd1Jvd1N0cmlwZXMmJihnZS5zdHlsZS5yb3dzdHJpcGU9eXIoU2Uuc2hvd1Jvd1N0cmlwZXMpKSxTZS5zaG93Q29sdW1uU3RyaXBlcyYmKGdlLnN0eWxlLmNvbHN0cmlwZT15cihTZS5zaG93Q29sdW1uU3RyaXBlcykpLFNl'@;
put 'LnNob3dGaXJzdENvbHVtbiYmKGdlLnN0eWxlLmNvbGZpcnN0PXlyKFNlLnNob3dGaXJzdENvbHVtbikpLFNlLnNob3dMYXN0Q29sdW1uJiYoZ2Uuc3R5bGUuY29sbGFzdD15cihTZS5zaG93TGFzdENvbHVtbikpLFNlLm5hbWUmJihnZS5zdHlsZS5uYW1lPVNlLm5hbWUucmVwbGFjZSgvXlRh'@;
put 'YmxlU3R5bGUvLCIiKSk7YnJlYWs7Y2FzZSI8dGFibGVDb2x1bW4iOmNhc2UiPHRhYmxlQ29sdW1uPiI6Z2UuY29scy5wdXNoKHtpZDorU2UuaWQsbmFtZTpTZS5uYW1lfSk7YnJlYWs7Y2FzZSI8ZmlsdGVyQ29sdW1uPiI6Y2FzZSI8ZmlsdGVyQ29sdW1uIjpjYXNlIjxjdXN0b21GaWx0ZXJz'@;
put 'IjpjYXNlIjxjdXN0b21GaWx0ZXJzPiI6Y2FzZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZmlsdGVyQ29sdW1uPiI6Y2FzZSI8L2N1c3RvbUZpbHRlcnM+IjpjYXNlIjwvZXh0PiI6X2U9ITE7YnJlYWs7ZGVmYXVsdDppZighX2UmJnJlLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du'@;
put 'aXplZCAiK1NlWzBdKyIgaW4gdGFibGUiKX1yZXR1cm4gdmV9KSxnZS5maWx0ZXJ8fChnZS5maWx0ZXI9ITEpLGdlLnN0eWxlLm5hbWUmJiFnZS5zdHlsZS5uYW1lLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKSYmTC5UYWJsZSYmTC5UYWJsZS5mb3JFYWNoKGZ1bmN0aW9uKHZl'@;
put 'KXsodmUubmFtZT09Z2Uuc3R5bGUubmFtZXx8dmUucmF3bmFtZT09Z2Uuc3R5bGUubmFtZSkmJihnZS5zdHlsZS5yYXc9b24odmUpKX0pLFBbIiF0YWJsZXMiXS5wdXNoKGdlKX0oSXQoUCxIZSwhMCkseSxyZSwwLF9lKX19KSxkZWxldGUgeVsiIXRhYmxlcmVmcyJdKX0oZHQseSxnZVtRXSxQ'@;
put 'LEdlLDAsU2UpLHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSImJkY2LnB1c2goW2R0LHksZ2VbUV0sUCx7U2hlZXRzOl9lfSxHZSxTZV0pLGZ1bmN0aW9uIEZNKHksUCxMLFEscmUsZ2UsX2UsdmUpe2lmKHkmJnlbIiFsZWdkcmF3ZWwiXSl7dmFyIFNlPXNuKHlbIiFsZWdkcmF3ZWwiXS5U'@;
put 'YXJnZXQsUSksSGU9UXQoTCxTZSwhMCk7SGUmJmZ1bmN0aW9uICREKHksUCxMKXt2YXIgUT0wOyh5Lm1hdGNoKE4zKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBGdCxrdCxUdCxadCxwbixLbix1bixxbixnZT0iIixfZT0hMCx2ZT0iIixTZT0tMSxIZT17fSxCZT17fSxHZT17fSxu'@;
put 'dD0tMSxkdD0tMSxDdD0iIixjdD0iIixidD0iIix6bj0hMSxrbj0hMTtzd2l0Y2gocmUucmVwbGFjZSgkdCxmdW5jdGlvbihabixCcil7dmFyIHNpPWxuKFpuKTtzd2l0Y2goam4oc2lbMF0pKXtjYXNlIjxzaGFwZSI6c2kuZmlsbGNvbG9yJiYoSGUuY29sb3IxPXNpLmZpbGxjb2xvciksc2ku'@;
put 'c3Ryb2tlY29sb3ImJihHZS5jb2xvcj1zaS5zdHJva2Vjb2xvcik7YnJlYWs7Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbD4iOiI8djpmaWxsIj09c2lbMF0mJihzaS5jb2xvcjImJihIZS5jb2xvcjI9c2kuY29sb3IyKSxzaS50eXBlJiYoSGUudHlwZT1zaS50eXBlKSk7YnJlYWs7Y2FzZSI8L2Zp'@;
put 'bGw+IjpjYXNlIjxsb2NrIjpjYXNlIjxsb2NrLz4iOmJyZWFrO2Nhc2UiPHNoYWRvdyI6c2kuY29sb3ImJihCZS5jb2xvcj1zaS5jb2xvciksc2kub24mJihCZS5vbj1zaS5vbik7YnJlYWs7Y2FzZSI8Q2xpZW50RGF0YSI6c2kuT2JqZWN0VHlwZSYmKGdlPXNpLk9iamVjdFR5cGUpO2JyZWFr'@;
put 'O2Nhc2UiPFZpc2libGUiOmNhc2UiPFZpc2libGUvPiI6X2U9ITE7YnJlYWs7Y2FzZSI8QW5jaG9yIjpjYXNlIjxBbmNob3I+IjpjYXNlIjxSb3ciOmNhc2UiPFJvdz4iOmNhc2UiPENvbHVtbiI6Y2FzZSI8Q29sdW1uPiI6Y2FzZSI8Rm1sYU1hY3JvIjpjYXNlIjxGbWxhTWFjcm8+IjpjYXNl'@;
put 'IjxGbWxhTGluayI6Y2FzZSI8Rm1sYUxpbms+IjpjYXNlIjxGbWxhUmFuZ2UiOmNhc2UiPEZtbGFSYW5nZT4iOmNhc2UiPFNlbFR5cGUiOmNhc2UiPFNlbFR5cGU+IjpjYXNlIjxWYWwiOmNhc2UiPFZhbD4iOmNhc2UiPE1pbiI6Y2FzZSI8TWluPiI6Y2FzZSI8TWF4IjpjYXNlIjxNYXg+Ijpj'@;
put 'YXNlIjxJbmMiOmNhc2UiPEluYz4iOmNhc2UiPFBhZ2UiOmNhc2UiPFBhZ2U+IjpjYXNlIjxDaGVja2VkIjpjYXNlIjxDaGVja2VkPiI6Y2FzZSI8dGV4dGJveCI6Y2FzZSI8dGV4dGJveD4iOlNlPUJyK1puLmxlbmd0aDticmVhaztjYXNlIjwvQW5jaG9yPiI6dmU9cmUuc2xpY2UoU2UsQnIp'@;
put 'LnRyaW0oKTticmVhaztjYXNlIjwvUm93PiI6bnQ9K3JlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NvbHVtbj4iOmR0PStyZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTWFjcm8+IjpDdD1yZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2Ui'@;
put 'PC9GbWxhTGluaz4iOmN0PXJlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFSYW5nZT4iOnVuPXJlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L1NlbFR5cGU+Ijpxbj1yZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9WYWw+IjpGdD0rcmUu'@;
put 'c2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvTWluPiI6a3Q9K3JlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L01heD4iOlR0PStyZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9JbmM+IjpadD0rcmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztj'@;
put 'YXNlIjwvUGFnZT4iOnBuPStyZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9DaGVja2VkPiI6S249K3JlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L3RleHRib3g+IjpidD1yZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPE1vdmVXaXRoQ2VsbHMv'@;
put 'PiI6Y2FzZSI8TW92ZVdpdGhDZWxscz4iOnpuPSEwO2JyZWFrO2Nhc2UiPFNpemVXaXRoQ2VsbHMvPiI6Y2FzZSI8U2l6ZVdpdGhDZWxscz4iOmtuPSEwfXJldHVybiIifSksZ2Upe2Nhc2UiTm90ZSI6dmFyIGVyPXFvLnNoZWV0X2dldF9jZWxsKFAsbnQ+PTAmJmR0Pj0wP2RpKHtyOm50LGM6'@;
put 'ZHR9KTpMW1FdLnJlZik7ZXIuYyYmKGVyLmMuaGlkZGVuPV9lLHZlJiYoZXIuYy5yYXdhbmNob3I9dmUsWG0odmUsZXIuYyksRUMoZXIuY1siIXBvcyJdLDIqISF6bishIWtuLFApKSxIZS5jb2xvcjEmJihlci5jLmZpbGw9SGUpLEJlLmNvbG9yJiYoZXIuYy5zaGFkb3c9QmUpLEdlLmNvbG9y'@;
put 'JiYoZXIuYy5zdHJva2U9R2UpKSwrK1E7YnJlYWs7Y2FzZSJCdXR0b24iOmNhc2UiR0JveCI6Y2FzZSJEcm9wIjpjYXNlIkxhYmVsIjpjYXNlIkNoZWNrYm94IjpjYXNlIlNjcm9sbCI6Y2FzZSJMaXN0IjpjYXNlIlJhZGlvIjpjYXNlIlNwaW4iOmNhc2UiRWRpdCI6UFsiIWNvbnRyb2xzIl18'@;
put 'fChQWyIhY29udHJvbHMiXT1bXSk7dmFyIHRyPXsiIXR5cGUiOmdlfTt2ZSYmWG0odmUsdHIpLEN0JiYodHIubWFjcm89Q3QucmVwbGFjZSgiWzBdISIsIiIpKSxjdCYmKHRyLmxpbms9Y3QpLCJTY3JvbGwiPT1nZXx8IlNwaW4iPT1nZT8obnVsbD09RnQmJihGdD0wKSxudWxsPT1rdCYmKGt0'@;
put 'PTApLG51bGw9PVR0JiYoVHQ9M2U0KSxudWxsPT1adCYmKFp0PTEpLCJTY3JvbGwiPT1nZSYmbnVsbD09cG4mJihwbj0xMCkpOiJSYWRpbyI9PWdlfHwiQ2hlY2tib3giPT1nZT8obnVsbD09S24mJihLbj0wKSxGdD1Lbik6KCJMaXN0Ij09Z2V8fCJEcm9wIj09Z2UpJiYobnVsbCE9dW4mJih0'@;
put 'ci5yZWY9dW4pLG51bGw9PXFuJiYocW49IlNpbmdsZSIpLCJMaXN0Ij09Z2UmJih0ci5zZWw9cW4pKSxudWxsIT1GdCYmKHRyLnZhbD1GdCksbnVsbCE9a3QmJih0ci5taW49a3QpLG51bGwhPVR0JiYodHIubWF4PVR0KSxudWxsIT1adCYmKHRyLnN0ZXA9WnQpLG51bGwhPXBuJiYodHIucGFn'@;
put 'ZT1wbiksYnQmJih0ci50PWJ0LnJlcGxhY2UoL1xzKjxbXHNcU10qPz5ccyovZywiIikpLFBbIiFjb250cm9scyJdLnB1c2godHIpfX0pfShQaShIZSkseSx2ZXx8W10pLHlbIiFMRFAiXT1TZSx5WyIhY3RybGlkIl0mJnlbIiFjdHJsaWQiXS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtpZihCZS5y'@;
put 'ZWwmJkJlLnJlbC5UYXJnZXQpe3ZhciBHZT1zbihCZS5yZWwuVGFyZ2V0LFEpO0JlLnBhdGg9R2UsZGVsZXRlIEJlLnJlbH19KX19KGR0LDAseSxQLDAsMCwwLEN0KSxkdH1jYXRjaChjdCl7aWYoU2UuV1RGKXRocm93IGN0fX1mdW5jdGlvbiBsYyh5KXtyZXR1cm4iLyI9PXkuY2hhckF0KDAp'@;
put 'P3kuc2xpY2UoMSk6eX12YXIgbVI9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEhNKHksUCl7aWYoRjY9W10sUDYoUD1QfHx7fSksbW4oeSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIil8fG1uKHksIm9iamVjdGRhdGEueG1sIikpcmV0dXJuIGZ1bmN0aW9uIFRNKHksUCl7UD1QfHx7fSxtbih5LCJN'@;
put 'RVRBLUlORi9tYW5pZmVzdC54bWwiKSYmZnVuY3Rpb24gVmEoeSxQKXtmb3IodmFyIFEscmUsTD1Rdih5KTtRPVZyLmV4ZWMoTCk7KXN3aXRjaChRWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09KHJlPWxuKFFbMF0sITEpKS5wYXRoJiZyZS50eXBl'@;
put 'IT09VHUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIE9wZW5Eb2N1bWVudCBpcyBub3QgYSBzcHJlYWRzaGVldCIpO2JyZWFrO2Nhc2UiZW5jcnlwdGlvbi1kYXRhIjpjYXNlImFsZ29yaXRobSI6Y2FzZSJzdGFydC1rZXktZ2VuZXJhdGlvbiI6Y2FzZSJrZXktZGVyaXZhdGlvbiI6dGhyb3cgbmV3'@;
put 'IEVycm9yKCJVbnN1cHBvcnRlZCBPRFMgRW5jcnlwdGlvbiIpO2RlZmF1bHQ6aWYoUCYmUC5XVEYpdGhyb3cgUX19KEl0KHksIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpLFApO3ZhciBMPVF0KHksImNvbnRlbnQueG1sIik7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIGNvbnRlbnQu'@;
put 'eG1sIGluIE9EUyAvIFVPRiBmaWxlIik7dmFyIFE9UTAoUGkoTCksUCk7cmV0dXJuIG1uKHksIm1ldGEueG1sIikmJihRLlByb3BzPU8yKEl0KHksIm1ldGEueG1sIikpKSxRfSh5LFApO2lmKG1uKHksIkluZGV4L0RvY3VtZW50Lml3YSIpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQg'@;
put 'TlVNQkVSUyBmaWxlIik7dmFyIGdlLF9lLEw9ZnVuY3Rpb24gcHQoeSl7Zm9yKHZhciBQPXkuRnVsbFBhdGhzfHxsdCh5LmZpbGVzKSxMPVtdLFE9MDtRPFAubGVuZ3RoOysrUSkiLyIhPVBbUV0uc2xpY2UoLTEpJiZMLnB1c2goUFtRXSk7cmV0dXJuIEwuc29ydCgpfSh5KSxRPWZ1bmN0aW9u'@;
put 'IGNtKHkpe3ZhciBQPXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNh'@;
put 'bGNjaGFpbnM6W10sdmJhOltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxw'@;
put 'cm9wczpbXSxjdXN0b214bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTtpZigheXx8IXkubWF0Y2gpcmV0dXJuIFA7dmFyIEw9e307aWYoKHkubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgcmU9bG4oUSk7c3dpdGNoKHJlWzBdLnJlcGxhY2UoRm4sIjwiKSl7Y2Fz'@;
put 'ZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOlAueG1sbnM9cmVbInhtbG5zIisocmVbMF0ubWF0Y2goLzwoXHcrKTovKXx8WyIiLCIiXSlbMV1dO2JyZWFrO2Nhc2UiPERlZmF1bHQiOkxbcmUuRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldPXJlLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92'@;
put 'ZXJyaWRlIjp2b2lkIDAhPT1QW09sW3JlLkNvbnRlbnRUeXBlXV0mJlBbT2xbcmUuQ29udGVudFR5cGVdXS5wdXNoKHJlLlBhcnROYW1lKX19KSxQLnhtbG5zIT09aXMuQ1QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitQLnhtbG5zKTtyZXR1cm4gUC5jYWxjY2hhaW49'@;
put 'UC5jYWxjY2hhaW5zLmxlbmd0aD4wP1AuY2FsY2NoYWluc1swXToiIixQLnNzdD1QLnN0cnMubGVuZ3RoPjA/UC5zdHJzWzBdOiIiLFAuc3R5bGU9UC5zdHlsZXMubGVuZ3RoPjA/UC5zdHlsZXNbMF06IiIsUC5jb25uPVAuY29ubnMubGVuZ3RoPjA/UC5jb25uc1swXToiIixQLmRlZmF1bHRz'@;
put 'PUwsZGVsZXRlIFAuY2FsY2NoYWlucyxQfShRdCh5LCJbQ29udGVudF9UeXBlc10ueG1sIikpLHJlPSExO2lmKDA9PT1RLndvcmtib29rcy5sZW5ndGgmJkl0KHksX2U9InhsL3dvcmtib29rLnhtbCIsITApJiZRLndvcmtib29rcy5wdXNoKF9lKSwwPT09US53b3JrYm9va3MubGVuZ3RoKXtp'@;
put 'ZighSXQoeSxfZT0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO1Eud29ya2Jvb2tzLnB1c2goX2UpLHJlPSEwfSJiaW4iPT1RLndvcmtib29rc1swXS5zbGljZSgtMykmJihyZT0hMCk7dmFyIHZlPXt9LFNlPXt9O2lmKCFQ'@;
put 'LmJvb2tTaGVldHMmJiFQLmJvb2tQcm9wcyl7aWYoZjY9W10sUS5zc3QpdHJ5e2Y2PWZ1bmN0aW9uIEw2KHksUCxMKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBjRCh5LFApe3ZhciBMPVtdLFE9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24oZ2UsX2UsdmUpe3N3aXRjaCh2'@;
put 'ZSl7Y2FzZSAxNTk6TC5Db3VudD1nZVswXSxMLlVuaXF1ZT1nZVsxXTticmVhaztjYXNlIDE5OkwucHVzaChnZSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTpRPSEwO2JyZWFrO2Nhc2UgMzY6UT0hMTticmVhaztkZWZhdWx0OmlmKF9lLmluZGV4T2YoIkJlZ2luIik+MHx8X2Uu'@;
put 'aW5kZXhPZigiRW5kIiksIVF8fFAuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIit2ZSsiICIrX2UpfX0pLEx9KHksTCk6ZnVuY3Rpb24gckMoeSxQKXt2YXIgTD1bXSxRPSIiO2lmKCF5KXJldHVybiBMO3ZhciByZT15Lm1hdGNoKGVDKTtpZihyZSl7UT1yZVsyXS5y'@;
put 'ZXBsYWNlKHRDLCIiKS5zcGxpdChuQyk7Zm9yKHZhciBnZT0wO2dlIT1RLmxlbmd0aDsrK2dlKXt2YXIgX2U9RDkoUVtnZV0udHJpbSgpLFApO251bGwhPV9lJiYoTFtMLmxlbmd0aF09X2UpfXJlPWxuKHJlWzFdKSxMLkNvdW50PXJlLmNvdW50LEwuVW5pcXVlPXJlLnVuaXF1ZUNvdW50fXJl'@;
put 'dHVybiBMfSh5LEwpfShJdCh5LGxjKFEuc3N0KSksUS5zc3QsUCl9Y2F0Y2gocnIpe2lmKFAuV1RGKXRocm93IHJyfVAuY2VsbFN0eWxlcyYmUS50aGVtZXMubGVuZ3RoJiYodmU9ZnVuY3Rpb24gSTYoeSxQLEwpe3JldHVybiBHbSh5LEwpfShRdCh5LFEudGhlbWVzWzBdLnJlcGxhY2UoL15c'@;
put 'Ly8sIiIpLCEwKXx8IiIsMCxQKSksUS5zdHlsZSYmKFNlPWZ1bmN0aW9uICR2KHksUCxMLFEpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIEI5KHksUCxMKXt2YXIgUT17TnVtYmVyRm10OltdfTtmb3IodmFyIHJlIGluIHcuX3RhYmxlKVEuTnVtYmVyRm10W3JlXT13Ll90'@;
put 'YWJsZVtyZV07US5DZWxsWGY9W10sUS5Gb250cz1bXSxRLkZpbGxzPVtdLFEuQm9yZGVycz1bXTt2YXIgZ2U9W10sX2U9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24oU2UsSGUsQmUpe3N3aXRjaChCZSl7Y2FzZSA0NDpRLk51bWJlckZtdFtTZVswXV09U2VbMV0sdy5sb2FkKFNlWzFdLFNlWzBd'@;
put 'KTticmVhaztjYXNlIDQzOno0KFNlLmNvbG9yLFApLFEuRm9udHMucHVzaChTZSk7YnJlYWs7Y2FzZSAxMDI1OmNhc2UgNDg6Y2FzZSA1MDc6Y2FzZSA1NzI6Y2FzZSA0NzU6Y2FzZSAxMTcxOmNhc2UgMjEwMjpjYXNlIDExMzA6Y2FzZSA1MTI6Y2FzZSAyMDk1OmNhc2UgMzA3MjpicmVhaztj'@;
put 'YXNlIDQ1OlNlLmZnQ29sb3ImJno0KFNlLmZnQ29sb3IsUCksU2UuYmdDb2xvciYmejQoU2UuYmdDb2xvcixQKSxRLkZpbGxzLnB1c2goU2UpO2JyZWFrO2Nhc2UgNDY6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJkaWFnIl0uZm9yRWFjaChmdW5jdGlvbihHZSl7U2VbR2VdJiZT'@;
put 'ZVtHZV0uY29sb3ImJno0KFNlW0dlXS5jb2xvcixQKX0pLFEuQm9yZGVycy5wdXNoKFNlKTticmVhaztjYXNlIDQ3OiJCcnRCZWdpbkNlbGxYRnMiPT1nZVtnZS5sZW5ndGgtMV0mJlEuQ2VsbFhmLnB1c2goU2UpO2JyZWFrO2Nhc2UgMzU6X2U9ITA7YnJlYWs7Y2FzZSAzNjpfZT0hMTticmVh'@;
put 'aztjYXNlIDM3OmdlLnB1c2goSGUpLF9lPSEwO2JyZWFrO2Nhc2UgMzg6Z2UucG9wKCksX2U9ITE7YnJlYWs7ZGVmYXVsdDppZigoSGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApZ2UucHVzaChIZSk7ZWxzZSBpZigoSGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKWdlLnBvcCgpO2Vsc2UgaWYo'@;
put 'IV9lfHxMLldURiYmIkJydEFDQmVnaW4iIT1nZVtnZS5sZW5ndGgtMV0pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0JlKyIgIitIZSl9fSksKFEuRm9udHN8fFtdKVswXSYmWjEoUS5Gb250c1swXSksUX0oeSxMLFEpOlptKHksTCxRKX0oSXQoeSxsYyhRLnN0eWxlKSks'@;
put 'US5zdHlsZSx2ZSxQKSl9dmFyIEhlPVEubGlua3MubWFwKGZ1bmN0aW9uKHJyKXt0cnl7dmFyIFNuPURvKFF0KHksQmkobGMocnIpKSkscnIpO3JldHVybiBmdW5jdGlvbiBVTCh5LFAsTCxRKXtyZXR1cm4iLmJpbiI9PT1MLnNsaWNlKC00KT9mdW5jdGlvbiBHNCh5LFAsTCxRKXtpZigheSly'@;
put 'ZXR1cm4geTt2YXIgcmU9UXx8e30sZ2U9ITE7SG8oeSxmdW5jdGlvbihTZSxIZSxCZSl7c3dpdGNoKEJlKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpjYXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNl'@;
put 'IDU3ODpjYXNlIDU3OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1OmdlPSEwO2JyZWFrO2Nhc2UgMzY6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZighKChIZXx8IiIpLmluZGV4T2YoIkJl'@;
put 'Z2luIik+MCkmJiEoKEhlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighZ2V8fHJlLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0JlLnRvU3RyaW5nKDE2KSsiICIrSGUpfX0scmUpfSh5LDAsMCxRKTpmdW5jdGlvbiBZOSh5LFAsTCxRKXt2YXIgcmU9UXx8e30s'@;
put 'Z2U9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fSx2ZT0hMSxTZT17fSxIZT0tMSxCZT0tMSxHZT17czp7cjowLGM6MH0sZTp7cjotMSxjOi0xfX0sbnQ9e30sZHQ9MDtyZXR1cm4oeXx8IiIpLnJlcGxhY2UoJHQsZnVuY3Rpb24oQ3QsY3Qpe3ZhciBidD1sbihDdCk7c3dpdGNoKGpuKGJ0WzBd'@;
put 'KSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZXh0ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5rPiI6Y2FzZSI8L2V4dGVybmFsQm9vaz4iOmNhc2UiPHNoZWV0TmFtZXMiOmNhc2UiPHNoZWV0TmFtZXM+IjpjYXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNhc2UiPHNo'@;
put 'ZWV0RGF0YVNldC8+IjpjYXNlIjwvc2hlZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFrO2Nhc2UiPGV4dGVybmFsQm9vayI6Y2FzZSI8ZXh0ZXJuYWxCb29rPiI6Z2UuVGFyZ2V0PVBbIiFpZCJdW2J0LmlkXS5UYXJnZXQsZ2UuTWlzc2luZz1QWyIhaWQiXVtidC5pZF0uVHlwZT09SGku'@;
put 'WE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXROYW1lIjpnZS5TaGVldE5hbWVzLnB1c2goeHIoUGkoYnQudmFsKSkpO2JyZWFrO2Nhc2UiPHNoZWV0RGF0YSI6U2U9e30sZ2UuU2hlZXRzW2dlLlNoZWV0TmFtZXNbYnQuc2hlZXRJZF1dPXlyKGJ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOlNlO2Jy'@;
put 'ZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpHZS5lLmM+PTAmJihTZVsiIXJlZiJdPU9vKEdlKSk7YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+IjpidC5yP0hlPXBhcnNlSW50KGJ0LnIsMTApLTE6SGUrKyxCZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6YnQucj9CZT1zcyhi'@;
put 'dC5yKS5jOisrQmUsbnQudD1idC50fHwibiIsInN0ciI9PW50LnQmJihudC50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpHZS5lLnI8SGUmJihHZS5lLnI9SGUpLEdlLmUuYzxCZSYmKEdlLmUuYz1CZSksU2VbZGkoe3I6SGUsYzpCZX0pXT1udCxudD17fTticmVhaztjYXNlIjx2IjpjYXNl'@;
put 'Ijx2PiI6ZHQ9Q3QubGVuZ3RoK2N0O2JyZWFrO2Nhc2UiPC92PiI6dmFyIEZ0PXhyKHkuc2xpY2UoZHQsY3QpKTtudC52PSJuIj09bnQudD9wYXJzZUZsb2F0KEZ0KTpGdDticmVhaztjYXNlIjx2Lz4iOm50LnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6dmU9ITA7YnJlYWs7Y2Fz'@;
put 'ZSI8L2RlZmluZWROYW1lcz4iOnZlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIXZlJiZyZS5XVEYpdGhyb3cidW5yZWNvZ25pemVkICIrYnRbMF0rIiBpbiBleHRlcm5hbCBsaW5rIn19KSxnZX0oeSxQLDAsUSl9KEl0KHksbGMocnIpKSxTbixycixQKX1jYXRjaHt9fSksQmU9ZnVuY3Rpb24gbTUo'@;
put 'eSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIEd2KHksUCl7dmFyIEw9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sUT1bXSxyZT0hMTtQfHwoUD17fSksUC5iaWZmPTEyO3ZhciBnZT1bXSxf'@;
put 'ZT1bW11dO3JldHVybiBfZS5TaGVldE5hbWVzPVtdLF9lLlhUST1bXSxtZlsxNl09e246IkJydEZSVEFyY2hJRCQiLGY6V3Z9LEhvKHksZnVuY3Rpb24oU2UsSGUsQmUpe3N3aXRjaChCZSl7Y2FzZSAxNTY6X2UuU2hlZXROYW1lcy5wdXNoKFNlLm5hbWUpLEwuU2hlZXRzLnB1c2goU2UpO2Jy'@;
put 'ZWFrO2Nhc2UgMTUzOkwuV0JQcm9wcz1TZTticmVhaztjYXNlIDM5Om51bGwhPVNlLlNoZWV0JiYoUC5TSUQ9U2UuU2hlZXQpLFNlLlJlZj14bChTZS5QdGcsbnVsbCxudWxsLF9lLFApLGRlbGV0ZSBQLlNJRCxkZWxldGUgU2UuUHRnLGdlLnB1c2goU2UpO2JyZWFrO2Nhc2UgMTAzNjpjYXNl'@;
put 'IDM2MTpjYXNlIDIwNzE6Y2FzZSAxNTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2Fz'@;
put 'ZSAyMTI4OmNhc2UgMjEyNTpjYXNlIDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNh'@;
put 'c2UgNjY3Ol9lWzBdLmxlbmd0aD9fZS5wdXNoKFtCZSxTZV0pOl9lWzBdPVtCZSxTZV0sX2VbX2UubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09X2UubGVuZ3RoJiYoX2VbMF09W10sX2VbMF0uWFRJPVtdKSxfZVtfZS5sZW5ndGgtMV0uWFRJPV9lW19lLmxlbmd0aC0xXS5Y'@;
put 'VEkuY29uY2F0KFNlKSxfZS5YVEk9X2UuWFRJLmNvbmNhdChTZSk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM3OlEucHVzaChIZSkscmU9ITA7YnJlYWs7Y2FzZSAzNjpjYXNlIDM4OlEucG9wKCkscmU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChIZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEo'@;
put 'KEhlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighcmV8fFAuV1RGJiYiQnJ0QUNCZWdpbiIhPVFbUS5sZW5ndGgtMV0mJiJCcnRGUlRCZWdpbiIhPVFbUS5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitCZSsiICIrSGUpfX0sUCksVXYoTCksTC5OYW1l'@;
put 'cz1nZSxMLnN1cGJvb2tzPV9lLEx9KHksTCk6ZnVuY3Rpb24gYVkoeSxQKXtpZigheSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgTD17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLEV4dGVy'@;
put 'bjpbXSx4bWxuczoiIn0sUT0hMSxyZT0ieG1sbnMiLGdlPXt9LF9lPTA7aWYoeS5yZXBsYWNlKCR0LGZ1bmN0aW9uKFNlLEhlKXt2YXIgQmU9bG4oU2UpO3N3aXRjaChqbihCZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4iOmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9m'@;
put 'aWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nLz4iOmNhc2UiPC93b3JrYm9va1ByPiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxz'@;
put 'aGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZl'@;
put 'cmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzLz4iOmNhc2UiPGRlZmluZWROYW1lLz4iOmNhc2UiPC9jYWxjUHI+IjpjYXNlIjxvbGVTaXplIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlld3M+'@;
put 'IjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXciOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXc+IjpjYXNlIjxwaXZvdENhY2hlcz4iOmNhc2UiPC9waXZvdENhY2hlcz4iOmNhc2UiPHBpdm90Q2FjaGVzIjpjYXNlIjxwaXZvdENhY2hlIjpjYXNl'@;
put 'IjxzbWFydFRhZ1ByIjpjYXNlIjxzbWFydFRhZ1ByLz4iOmNhc2UiPHNtYXJ0VGFnVHlwZXMiOmNhc2UiPHNtYXJ0VGFnVHlwZXM+IjpjYXNlIjwvc21hcnRUYWdUeXBlcz4iOmNhc2UiPHNtYXJ0VGFnVHlwZSI6Y2FzZSI8d2ViUHVibGlzaGluZyI6Y2FzZSI8d2ViUHVibGlzaGluZy8+Ijpj'@;
put 'YXNlIjxmaWxlUmVjb3ZlcnlQciI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIvPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cyI6Y2FzZSI8L3dlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdCI6Y2FzZSI8ZXh0THN0IjpjYXNl'@;
put 'IjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmNhc2UiPEFyY2hJRCI6Y2FzZSI8cmV2aXNpb25QdHIiOmJyZWFrO2Nhc2UiPHdvcmtib29rIjpTZS5tYXRjaChzWSkmJihyZT0ieG1sbnMiK1NlLm1hdGNoKC88KFx3Kyk6LylbMV0pLEwueG1sbnM9QmVbcmVdO2Jy'@;
put 'ZWFrO2Nhc2UiPGZpbGVWZXJzaW9uIjpkZWxldGUgQmVbMF0sTC5BcHBWZXJzaW9uPUJlO2JyZWFrO2Nhc2UiPGZpbGVTaGFyaW5nIjpMLk1vZGlmeT17dXNlcjpCZS51c2VyTmFtZSx3YXJuOnlyKEJlLnJlYWRPbmx5UmVjb21tZW5kZWR8fCJmYWxzZSIpfSwoQmUuYWxnb3JpdGhtTmFtZXx8'@;
put 'QmUuaGFzaFZhbHVlfHxCZS5zYWx0VmFsdWV8fEJlLnNwaW5Db3VudCkmJihMLk1vZGlmeS5lbmNyeXB0aW9uPXthbGdvOkJlLmFsZ29yaXRobU5hbWUsaGFzaDpCZS5oYXNoVmFsdWUsc2FsdDpCZS5zYWx0VmFsdWUsc3BpbjorQmUuc3BpbkNvdW50fHwxZTV9KTticmVhaztjYXNlIjx3b3Jr'@;
put 'Ym9va1ByIjpjYXNlIjx3b3JrYm9va1ByLz4iOksyLmZvckVhY2goZnVuY3Rpb24obnQpe2lmKG51bGwhPUJlW250WzBdXSlzd2l0Y2gobnRbMl0pe2Nhc2UiYm9vbCI6TC5XQlByb3BzW250WzBdXT15cihCZVtudFswXV0pO2JyZWFrO2Nhc2UiaW50IjpMLldCUHJvcHNbbnRbMF1dPXBhcnNl'@;
put 'SW50KEJlW250WzBdXSwxMCk7YnJlYWs7ZGVmYXVsdDpMLldCUHJvcHNbbnRbMF1dPUJlW250WzBdXX19KSxCZS5jb2RlTmFtZSYmKEwuV0JQcm9wcy5Db2RlTmFtZT1QaShCZS5jb2RlTmFtZSkpO2JyZWFrO2Nhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6dmFyIEdlPUwuUHJvdGVjdGlvbnx8'@;
put 'e307R2UubG9ja1N0cnVjdHVyZT15cihCZS5sb2NrU3RydWN0dXJlfHwiZmFsc2UiKSxHZS5sb2NrV2luZG93cz15cihCZS5sb2NrV2luZG93c3x8ImZhbHNlIiksQmUud29ya2Jvb2tBbGdvcml0aG1OYW1lJiYoR2UuZW5jcnlwdGlvbj17YWxnbzpCZS53b3JrYm9va0FsZ29yaXRobU5hbWUs'@;
put 'aGFzaDpCZS53b3JrYm9va0hhc2hWYWx1ZSxzYWx0OkJlLndvcmtib29rU2FsdFZhbHVlLHNwaW46K0JlLndvcmtib29rU3BpbkNvdW50fHwxZTV9KSxMLlByb3RlY3Rpb249R2U7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIEJlWzBdLEwu'@;
put 'V0JWaWV3LnB1c2goQmUpO2JyZWFrO2Nhc2UiPHNoZWV0Ijpzd2l0Y2goQmUuc3RhdGUpe2Nhc2UiaGlkZGVuIjpCZS5IaWRkZW49MTticmVhaztjYXNlInZlcnlIaWRkZW4iOkJlLkhpZGRlbj0yO2JyZWFrO2RlZmF1bHQ6QmUuSGlkZGVuPTB9ZGVsZXRlIEJlLnN0YXRlLEJlLm5hbWU9eHIo'@;
put 'UGkoQmUubmFtZSkpLGRlbGV0ZSBCZVswXSxMLlNoZWV0cy5wdXNoKEJlKTticmVhaztjYXNlIjxleHRlcm5hbFJlZmVyZW5jZSI6TC5FeHRlcm4ucHVzaChCZS5pZCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVy'@;
put 'bmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjpRPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpjYXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpRPSExO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lIjooZ2U9e30pLk5hbWU9UGkoQmUubmFtZSks'@;
put 'QmUuY29tbWVudCYmKGdlLkNvbW1lbnQ9QmUuY29tbWVudCksQmUubG9jYWxTaGVldElkJiYoZ2UuU2hlZXQ9K0JlLmxvY2FsU2hlZXRJZCkseXIoQmUuaGlkZGVufHwiMCIpJiYoZ2UuSGlkZGVuPSEwKSxfZT1IZStTZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lPiI6Z2UuUmVm'@;
put 'PXhyKFBpKHkuc2xpY2UoX2UsSGUpKSksTC5OYW1lcy5wdXNoKGdlKTticmVhaztjYXNlIjxjYWxjUHIiOmNhc2UiPGNhbGNQci8+IjpkZWxldGUgQmVbMF0sTC5DYWxjUHI9QmU7YnJlYWs7ZGVmYXVsdDppZighUSYmUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitCZVsw'@;
put 'XSsiIGluIHdvcmtib29rIil9cmV0dXJuIFNlfSksLTE9PT1pcy5tYWluLmluZGV4T2YoTC54bWxucykpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitMLnhtbG5zKTtyZXR1cm4gVXYoTCksTH0oeSxMKX0oSXQoeSxsYyhRLndvcmtib29rc1swXSkpLFEud29ya2Jvb2tz'@;
put 'WzBdLFApLEdlPXt9LG50PSIiO1EuY29yZXByb3BzLmxlbmd0aCYmKChudD1JdCh5LGxjKFEuY29yZXByb3BzWzBdKSwhMCkpJiYoR2U9TzIobnQpKSwwIT09US5leHRwcm9wcy5sZW5ndGgmJihudD1JdCh5LGxjKFEuZXh0cHJvcHNbMF0pLCEwKSkmJmZ1bmN0aW9uIHAzKHksUCxMKXt2YXIg'@;
put 'UT17fTtQfHwoUD17fSkseT1QaSh5KSxSMS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgZ2U9KHkubWF0Y2godWwocmVbMF0pKXx8W10pWzFdO3N3aXRjaChyZVsyXSl7Y2FzZSJzdHJpbmciOmdlJiYoUFtyZVsxXV09eHIoZ2UpKTticmVhaztjYXNlImJvb2wiOlBbcmVbMV1dPSJ0cnVlIj09'@;
put 'PWdlO2JyZWFrO2Nhc2UicmF3Ijp2YXIgX2U9eS5tYXRjaChuZXcgUmVnRXhwKCI8IityZVswXSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK3JlWzBdKyI+IikpO19lJiZfZS5sZW5ndGg+MCYmKFFbcmVbMV1dPV9lWzFdKX19KSxRLkhlYWRpbmdQYWlycyYmUS5UaXRsZXNPZlBhcnRzJiZ1MChR'@;
put 'LkhlYWRpbmdQYWlycyxRLlRpdGxlc09mUGFydHMsUCxMKX0obnQsR2UsUCkpO3ZhciBkdD17fTsoIVAuYm9va1NoZWV0c3x8UC5ib29rUHJvcHMpJiYwIT09US5jdXN0cHJvcHMubGVuZ3RoJiYobnQ9UXQoeSxsYyhRLmN1c3Rwcm9wc1swXSksITApKSYmKGR0PWZ1bmN0aW9uIE00KHksUCl7'@;
put 'dmFyIEw9e30sUT0iIixyZT15Lm1hdGNoKEF3KTtpZihyZSlmb3IodmFyIGdlPTA7Z2UhPXJlLmxlbmd0aDsrK2dlKXt2YXIgX2U9cmVbZ2VdLHZlPWxuKF9lKTtzd2l0Y2godmVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPFByb3BlcnRpZXMiOmJyZWFrO2Nhc2UiPHByb3BlcnR5IjpRPXhyKHZl'@;
put 'Lm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOlE9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1fZS5pbmRleE9mKCI8dnQ6Iikpe3ZhciBTZT1fZS5zcGxpdCgiPiIpLEhlPVNlWzBdLnNsaWNlKDQpLEJlPVNlWzFdO3N3aXRjaChIZSl7Y2FzZSJscHN0ciI6Y2FzZSJic3RyIjpjYXNl'@;
put 'Imxwd3N0ciI6Y2FzZSJjeSI6Y2FzZSJlcnJvciI6TFtRXT14cihCZSk7YnJlYWs7Y2FzZSJib29sIjpMW1FdPXlyKEJlKTticmVhaztjYXNlImkxIjpjYXNlImkyIjpjYXNlImk0IjpjYXNlImk4IjpjYXNlImludCI6Y2FzZSJ1aW50IjpMW1FdPXBhcnNlSW50KEJlLDEwKTticmVhaztjYXNl'@;
put 'InI0IjpjYXNlInI4IjpjYXNlImRlY2ltYWwiOkxbUV09cGFyc2VGbG9hdChCZSk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpMW1FdPUh0KEJlKTticmVhaztkZWZhdWx0OmlmKCIvIj09SGUuc2xpY2UoLTEpKWJyZWFrO1AuV1RGJiZ0eXBlb2YgY29uc29sZTwidSImJmNvbnNv'@;
put 'bGUud2FybigiVW5leHBlY3RlZCIsX2UsSGUsU2UpfX1lbHNlIGlmKCI8LyIhPT1fZS5zbGljZSgwLDIpJiZQLldURil0aHJvdyBuZXcgRXJyb3IoX2UpfX1yZXR1cm4gTH0obnQsUCkpO3ZhciBDdD17fTtpZigoUC5ib29rU2hlZXRzfHxQLmJvb2tQcm9wcykmJihCZS5TaGVldHM/Z2U9QmUu'@;
put 'U2hlZXRzLm1hcChmdW5jdGlvbihTbil7cmV0dXJuIFNuLm5hbWV9KTpHZS5Xb3Jrc2hlZXRzJiZHZS5TaGVldE5hbWVzLmxlbmd0aD4wJiYoZ2U9R2UuU2hlZXROYW1lcyksUC5ib29rUHJvcHMmJihDdC5Qcm9wcz1HZSxDdC5DdXN0cHJvcHM9ZHQpLFAuYm9va1NoZWV0cyYmdHlwZW9mIGdl'@;
put 'PCJ1IiYmKEN0LlNoZWV0TmFtZXM9Z2UpLFAuYm9va1NoZWV0cz9DdC5TaGVldE5hbWVzOlAuYm9va1Byb3BzKSlyZXR1cm4gQ3Q7Z2U9e307dmFyIGN0PXt9O1AuYm9va0RlcHMmJlEuY2FsY2NoYWluJiYoY3Q9ZnVuY3Rpb24gekwoeSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQp'@;
put 'P2Z1bmN0aW9uIERDKHksUCxMKXt2YXIgUT1bXTtyZXR1cm4gSG8oeSxmdW5jdGlvbihfZSx2ZSxTZSl7aWYoNjM9PT1TZSlRLnB1c2goX2UpO2Vsc2UgaWYoISgodmV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjB8fCh2ZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApKXRocm93IG5ldyBFcnJvcigi'@;
put 'VW5leHBlY3RlZCByZWNvcmQgIitTZSsiICIrdmUpfSksUX0oeSk6ZnVuY3Rpb24gZTYoeSl7dmFyIFA9W107aWYoIXkpcmV0dXJuIFA7dmFyIEw9MTtyZXR1cm4oeS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciByZT1sbihRKTtzd2l0Y2gocmVbMF0pe2Nhc2UiPD94'@;
put 'bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nhc2UiPGMiOmRlbGV0ZSByZVswXSxyZS5pP0w9cmUuaTpyZS5pPUwsUC5wdXNoKHJlKX19KSxQfSh5KX0oSXQoeSxsYyhRLmNhbGNjaGFpbikpLFEuY2FsY2NoYWluKSk7dmFy'@;
put 'IGt0LFR0LGJ0PTAsRnQ9e30sWnQ9QmUuU2hlZXRzO0dlLldvcmtzaGVldHM9WnQubGVuZ3RoLEdlLlNoZWV0TmFtZXM9W107Zm9yKHZhciBwbj0wO3BuIT1adC5sZW5ndGg7KytwbilHZS5TaGVldE5hbWVzW3BuXT1adFtwbl0ubmFtZTt2YXIgS249cmU/ImJpbiI6InhtbCIsdW49US53b3Jr'@;
put 'Ym9va3NbMF0ubGFzdEluZGV4T2YoIi8iKSxxbj0oUS53b3JrYm9va3NbMF0uc2xpY2UoMCx1bisxKSsiX3JlbHMvIitRLndvcmtib29rc1swXS5zbGljZSh1bisxKSsiLnJlbHMiKS5yZXBsYWNlKC9eXC8vLCIiKTttbih5LHFuKXx8KHFuPSJ4bC9fcmVscy93b3JrYm9vay4iK0tuKyIucmVs'@;
put 'cyIpO3ZhciB6bj1EbyhRdCh5LHFuLCEwKSxxbiksa249em4sZXI9W107em4mJihCZSYmQmUuRXh0ZXJuJiZCZS5FeHRlcm4ubGVuZ3RoJiZCZS5FeHRlcm4uZm9yRWFjaChmdW5jdGlvbihycixTbil7dmFyIHdpPSgiL3hsLyIrem5bIiFpZCJdW3JyXS5UYXJnZXQpLnJlcGxhY2UoL1tcL11b'@;
put 'XC9dL2csIi8iKSxVcj1RLmxpbmtzLmluZGV4T2Yod2kpO1VyPi0xJiYoZXJbU25dPUhlW1VyXSl9KSxCZSYmZGVsZXRlIEJlLkV4dGVybiksem4mJih6bj1mdW5jdGlvbiBPTSh5LFApe2lmKCF5KXJldHVybiAwO3RyeXt5PVAubWFwKGZ1bmN0aW9uKFEpe3JldHVybiBRLmlkfHwoUS5pZD1R'@;
put 'LnN0clJlbElEKSxbUS5uYW1lLHlbIiFpZCJdW1EuaWRdLlRhcmdldCxSTSh5WyIhaWQiXVtRLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4geSYmMCE9PXkubGVuZ3RoP3k6bnVsbH0oem4sQmUuU2hlZXRzKSk7dmFyIHRyPW1uKHksInhsL3dvcmtzaGVldHMvc2hlZXQu'@;
put 'eG1sIik/MTowLFpuPVtdLEJyPVtdO2U6Zm9yKGJ0PTA7YnQhPUdlLldvcmtzaGVldHM7KytidCl7dmFyIHNpPSJzaGVldCI7aWYoem4mJnpuW2J0XT8oa3Q9InhsLyIrem5bYnRdWzFdLnJlcGxhY2UoL1tcL10/eGxcLy8sIiIpLG1uKHksa3QpfHwoa3Q9em5bYnRdWzFdKSxtbih5LGt0KXx8'@;
put 'KGt0PXFuLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKSt6bltidF1bMV0pLHNpPXpuW2J0XVsyXSk6a3Q9KGt0PSJ4bC93b3Jrc2hlZXRzL3NoZWV0IisoYnQrMS10cikrIi4iK0tuKS5yZXBsYWNlKC9zaGVldDBcLi8sInNoZWV0LiIpLFR0PWt0LnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSop'@;
put 'JC8sIiQxL19yZWxzLyQzLnJlbHMiKSxabi5wdXNoKGt0KSxQJiZudWxsIT1QLnNoZWV0cylzd2l0Y2godHlwZW9mIFAuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYoYnQhPVAuc2hlZXRzKWNvbnRpbnVlIGU7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKEdlLlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJD'@;
put 'YXNlKCkhPVAuc2hlZXRzLnRvTG93ZXJDYXNlKCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoUC5zaGVldHMpKXtmb3IodmFyIHhpPTAsTGk9MDtMaSE9UC5zaGVldHMubGVuZ3RoOysrTGkpIm51bWJlciI9PXR5cGVvZiBQLnNoZWV0'@;
put 'c1tMaV0mJlAuc2hlZXRzW0xpXT09YnQmJih4aT0xKSwic3RyaW5nIj09dHlwZW9mIFAuc2hlZXRzW0xpXSYmUC5zaGVldHNbTGldLnRvTG93ZXJDYXNlKCk9PUdlLlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkmJih4aT0xKTtpZigheGkpY29udGludWUgZX19aWYoIVAuc2tpcFBhcnNl'@;
put 'KXt2YXIgUXI9Z1IoeSxrdCxUdCxHZS5TaGVldE5hbWVzW2J0XSxidCxGdCxnZSxzaSxQLEJlLHZlLFNlKTtRciYmUXJbIiFMRFAiXSYmKEJyW2J0XT1RclsiIUxEUCJdLGRlbGV0ZSBRclsiIUxEUCJdKX19aWYodHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90PCJ1Iilmb3IoYnQ9MDtidDxGNi5s'@;
put 'ZW5ndGg7KytidClwYXJzZV9zaGVldF9waXZvdC5hcHBseShudWxsLEY2W2J0XSk7aWYoQ3Q9e0RpcmVjdG9yeTpRLFdvcmtib29rOkJlLFByb3BzOkdlLEN1c3Rwcm9wczpkdCxEZXBzOmN0LFNoZWV0czpnZSxTaGVldE5hbWVzOkdlLlNoZWV0TmFtZXMsU3RyaW5nczpmNixTdHlsZXM6U2Us'@;
put 'VGhlbWVzOnZlLFNTRjp3LmdldF90YWJsZSgpfSwhUC5za2lwUGFyc2Upe2lmKGZ1bmN0aW9uIEFDKHkpeyF5fHwheS5Xb3JrYm9va3x8IXkuV29ya2Jvb2suTmFtZXN8fHkuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihQKXtpZihQLk5hbWUmJiJfeGxubS4iPT1QLk5hbWUuc2xp'@;
put 'Y2UoMCw2KSYmKCJfeGxubS5QcmludF9BcmVhIj09UC5OYW1lfHwiX3hsbm0uUHJpbnRfVGl0bGVzIj09UC5OYW1lKSl7dmFyIEw9eS5TaGVldHNbeS5TaGVldE5hbWVzW1AuU2hlZXRdXTtpZihMKXtMWyIhcHJpbnQiXXx8KExbIiFwcmludCJdPXt9KSxMWyIhcHJpbnQiXS5wcm9wc3x8KExb'@;
put 'IiFwcmludCJdLnByb3BzPXt9KTt2YXIgUT1MWyIhcHJpbnQiXSxyZT1QLlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PVAuTmFtZSl7cmUuaW5kZXhPZigiISIpPi0xJiYocmU9cmUuc2xpY2UocmUuaW5kZXhPZigiISIpKzEpKTt2YXIgZ2U9T2kocmU9cmUucmVwbGFjZSgvWyRdL2csIiIp'@;
put 'KTtRLmFyZWE9Z2V9ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1QLk5hbWUmJihRLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxyZS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oX2Upe3ZhciBTZT1XcyhfZS5zbGljZShfZS5pbmRleE9mKCIhIikrMSkucmVwbGFj'@;
put 'ZSgvWyRdL2csIiIpKTtTZS5zLmM+LTEmJihRLnRpdGxlcy5zLmM9U2Uucy5jKSxTZS5lLmM+LTEmJihRLnRpdGxlcy5lLmM9U2UuZS5jKSxTZS5zLnI+LTEmJihRLnRpdGxlcy5zLnI9U2Uucy5yKSxTZS5lLnI+LTEmJihRLnRpdGxlcy5lLnI9U2UuZS5yKX0pKX19fSl9KEN0KSxQJiZQLmJv'@;
put 'b2tGaWxlcyYmKEN0LmtleXM9TCxDdC5maWxlcz15LmZpbGVzKSxQJiZQLmJvb2tWQkEmJihRLnZiYS5sZW5ndGg+MD9DdC52YmFyYXc9SXQoeSxsYyhRLnZiYVswXSksITApOlEuZGVmYXVsdHMmJlEuZGVmYXVsdHMuYmluPT09JDImJihDdC52YmFyYXc9SXQoeSwieGwvdmJhUHJvamVjdC5i'@;
put 'aW4iLCEwKSkpLGtuJiZrblsiIWlkIl0pe2Zvcih2YXIgdXI9W10sQW49MTtBbjw9MTAyNDsrK0FuKWtuWyIhaWQiXVsicklkIitBbl0mJmtuWyIhaWQiXVsicklkIitBbl0uVHlwZSYmL2N1c3RvbVhtbCQvLnRlc3Qoa25bIiFpZCJdWyJySWQiK0FuXS5UeXBlKSYmdXIucHVzaChzbihrblsi'@;
put 'IWlkIl1bInJJZCIrQW5dLlRhcmdldCxRLndvcmtib29rc1swXSkpO3VyLmxlbmd0aD4wJiYoQ3QuQ3VzdG9tWE1MPVtdLHVyLmZvckVhY2goZnVuY3Rpb24ocnIpe3ZhciBTbj17ZGF0YTpRdCh5LGxjKHJyKSl9LG1yPUJpKHJyKTt0cnl7dmFyIHdpPURvKFF0KHksbGMobXIpLCEwKSxtcik7'@;
put 'aWYod2kpZm9yKHZhciBVcj0xO1VyPD0xMDI0OysrVXIpd2lbIiFpZCJdWyJySWQiK1VyXSYmd2lbIiFpZCJdWyJySWQiK1VyXS5UeXBlJiYvY3VzdG9tWG1sUHJvcHMkLy50ZXN0KHdpWyIhaWQiXVsicklkIitVcl0uVHlwZSkmJihTbi5wcm9wcz1RdCh5LGxjKHNuKHdpWyIhaWQiXVsicklk'@;
put 'IitVcl0uVGFyZ2V0LHJyKSkpKX1jYXRjaHt9Q3QuQ3VzdG9tWE1MLnB1c2goU24pfSkpfXZhciB2cj1EdCh5LCJ4bC9tb2RlbC9pdGVtLmRhdGEiLCEwKTt2ciYmKEN0Lm1vZGVsPXZyKSxRLmNvbm4mJihDdC5jb25uPUl0KHksbGMoUS5jb25uKSwhMCkpLGVyLmxlbmd0aCYmKEN0LkV4dGVy'@;
put 'bmFsV0I9ZXIpLEJlJiYoQmUuUFBJPW5mKX1yZXR1cm4gUC50ZW1wbGF0ZSYmKEN0Ll93c3BhdGhzPVpuLEN0Ll9zdHlwYXRoPWxjKFEuc3R5bGV8fCIiKSxDdC5fd2JwYXRoPWxjKFEud29ya2Jvb2tzWzBdfHwieGwvd29ya2Jvb2sueG1sIiksQ3QuX3ZtbHBhdGhzPUJyLEN0Ll93YnJlbHNw'@;
put 'YXRoPXFuLEN0Ll9jdD1RdCh5LCJbQ29udGVudF9UeXBlc10ueG1sIiksQ3QuZmlsZXM9eS5maWxlcyxtUihDdCx5LFApKSxDdH1mdW5jdGlvbiB2Uih5LFApe3ZhciBMPVB8fHt9O0wucGFzc3dvcmR8fChMLnBhc3N3b3JkPSJWZWx2ZXRTd2VhdHNob3AiKTt2YXIgUT0iV29ya2Jvb2siLHJl'@;
put 'PWplLmZpbmQoeSxRKTt0cnl7aWYoIShyZT1qZS5maW5kKHksUT0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO2lmKGZ1bmN0aW9uIGREKHkpe3ZhciBQPXt9O1AuaWQ9eS5y'@;
put 'ZWFkX3NoaWZ0KDAsImxwcDQiKSxQLlI9RzAoeSw0KSxQLlU9RzAoeSw0KSxQLlc9RzAoeSw0KX0ocmUuY29udGVudCksIShyZT1qZS5maW5kKHksUT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQg'@;
put 'ZmlsZSBtaXNzaW5nICIrUSk7dmFyIGdlPWZ1bmN0aW9uIFA0KHkpe3ZhciBQPVtdO3kubCs9NDtmb3IodmFyIEw9eS5yZWFkX3NoaWZ0KDQpO0wtLSA+MDspUC5wdXNoKHNDKHkpKTtyZXR1cm4gUH0ocmUuY29udGVudCk7aWYoMSE9PWdlLmxlbmd0aHx8MSE9PWdlWzBdLmNvbXBzLmxlbmd0'@;
put 'aHx8MCE9PWdlWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PWdlWzBdLm5hbWV8fCJFbmNyeXB0ZWRQYWNrYWdlIiE9PWdlWzBdLmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitRKTtpZighKHJlPWpl'@;
put 'LmZpbmQoeSxRPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTt2YXIgX2U9ZnVuY3Rpb24gRTMoeSl7dmFyIFA9W107'@;
put 'eS5sKz00O2Zvcih2YXIgTD15LnJlYWRfc2hpZnQoNCk7TC0tID4wOylQLnB1c2goeS5yZWFkX3NoaWZ0KDAsImxwcDQiKSk7cmV0dXJuIFB9KHJlLmNvbnRlbnQpO2lmKDEhPV9lLmxlbmd0aHx8IlN0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0iIT1fZVswXSl0aHJvdyBuZXcgRXJyb3IoIkVD'@;
put 'TUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK1EpO2lmKCEocmU9amUuZmluZCh5LFE9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVk'@;
put 'IGZpbGUgbWlzc2luZyAiK1EpOyFmdW5jdGlvbiBBMyh5KXt2YXIgUD1mdW5jdGlvbiBrMyh5KXt2YXIgUD17fTtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLHkubCs9NCxQLmlkPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUC5uYW1lPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUC5SPUcwKHksNCks'@;
put 'UC5VPUcwKHksNCksUC5XPUcwKHksNCksUH0oeSk7aWYoUC5lbmFtZT15LnJlYWRfc2hpZnQoMCwiOGxwcDQiKSxQLmJsa3N6PXkucmVhZF9zaGlmdCg0KSxQLmNtb2RlPXkucmVhZF9zaGlmdCg0KSw0IT15LnJlYWRfc2hpZnQoNCkpdGhyb3cgbmV3IEVycm9yKCJCYWQgIVByaW1hcnkgcmVj'@;
put 'b3JkIik7cmV0dXJuIFB9KHJlLmNvbnRlbnQpfWNhdGNoe31pZighKHJlPWplLmZpbmQoeSxRPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO3ZhciB2ZT1mdW5jdGlvbiBUMyh5KXt2'@;
put 'YXIgUD1HMCh5KTtzd2l0Y2goUC5NaW5vcil7Y2FzZSAyOnJldHVybltQLk1pbm9yLGdaKHkpXTtjYXNlIDM6cmV0dXJuW1AuTWlub3IsaEQoKV07Y2FzZSA0OnJldHVybltQLk1pbm9yLG1aKHkpXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXpl'@;
put 'ZCBWZXJzaW9uOiAiK1AuTWlub3IpfShyZS5jb250ZW50KTtpZighKHJlPWplLmZpbmQoeSxRPSIvRW5jcnlwdGVkUGFja2FnZSIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7aWYoND09dmVbMF0pcmV0dXJuIGZ1'@;
put 'bmN0aW9uIE5lKHksUCxMLFEpe3ZhciByZT1qZS51dGlscy5wcmVwX2Jsb2I7aWYoImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiE9eS51cmkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFQ01BLTM3NiBBZ2lsZSBV'@;
put 'UkkgIit5LnVyaSk7dmFyIGdlPXkuZW5jc1swXSxfZT1nZS5oYXNoQWxnb3JpdGhtLHZlPSJhZXMtMjU2LWNiYyIsU2U9QnVmZmVyLmZyb20oZ2Uuc2FsdFZhbHVlLCJiYXNlNjQiKSxIZT1CdWZmZXIuZnJvbSh5LnNhbHRWYWx1ZSwiYmFzZTY0IiksQmU9K2dlLmJsb2NrU2l6ZSxHZT0rZ2Uu'@;
put 'a2V5Qml0cz4+MyxudD1lbChCdWZmZXIuY29uY2F0KFtTZSxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEwpKV0pLF9lKSxkdD1CdWZmZXIuYWxsb2MoNCk7cmUoZHQsMCk7Zm9yKHZhciBDdD0wO0N0PGdlLnNwaW5Db3VudDsrK0N0KWR0Lmw9MCxkdC53cml0ZV9zaGlm'@;
put 'dCg0LEN0KSxudD1lbChCdWZmZXIuY29uY2F0KFtkdCxudF0pLF9lKTt2YXIgY3Q9ZnVuY3Rpb24odHIsWm4sQnIsc2kpe3ZhciB4aT1lbChCdWZmZXIuY29uY2F0KFt0cixCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKV0pLHNpKSxMaT14aS5sZW5ndGg+PUJy'@;
put 'P3hpLnNsaWNlKDAsQnIpOkJ1ZmZlci5hbGxvYyhCcik7aWYoeGkubGVuZ3RoPEJyKXtmb3IodmFyIFFyPTA7UXI8eGkubGVuZ3RoOysrUXIpTGlbUXJdPXhpW1FyXTtmb3IoO1FyPEJyOysrUXIpTGlbUXJdPTU0fXJldHVybiBMaX0obnQsMCxHZSxfZSk7c3dpdGNoKGdlLmNpcGhlckFsZ29y'@;
put 'aXRobSl7Y2FzZSJBRVMiOmlmKCJDaGFpbmluZ01vZGVDQkMiIT1nZS5jaXBoZXJDaGFpbmluZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBjaGFpbmluZyAiK2dlLmNpcGhlckNoYWluaW5nKTt2ZT0iYWVzLSIrZ2Uua2V5Qml0cysiLWNiYyI7YnJlYWs7Y2FzZSJSQzIi'@;
put 'OnZlPSJyYzIiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgYWxnbyAiK2dlLmNpcGhlckFsZ29yaXRobSl9U2U9ZnVuY3Rpb24oZXIpe2Zvcih2YXIgdHI9QnVmZmVyLmFsbG9jKEJlKSxabj0wO1puPEJlOysrWm4pdHJbWm5dPVpuPGVyLmxlbmd0'@;
put 'aD9lcltabl06NTQ7cmV0dXJuIHRyfShTZSk7dmFyIGJ0PUJ1ZmZlci5mcm9tKGdlLmVuY3J5cHRlZEtleVZhbHVlLCJiYXNlNjQiKSxGdD1KMShjdCxTZSx2ZSkudXBkYXRlKGJ0KSxrdD1KMShlbChCdWZmZXIuY29uY2F0KFtudCxCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcs'@;
put 'NTIsNzhdKV0pLF9lKS5zbGljZSgwLEdlKSxTZSx2ZSkudXBkYXRlKEJ1ZmZlci5mcm9tKGdlLmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLCJiYXNlNjQiKSksVHQ9ZWwoSjEoZWwoQnVmZmVyLmNvbmNhdChbbnQsQnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1OSw3NSwxNTgsMTIx'@;
put 'XSldKSxfZSkuc2xpY2UoMCxHZSksU2UsdmUpLnVwZGF0ZShCdWZmZXIuZnJvbShnZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dCwiYmFzZTY0IikpLF9lKSxadD0rZ2UuaGFzaFNpemV8fE1hdGgubWluKGt0Lmxlbmd0aCxUdC5sZW5ndGgpO2lmKDAhPWt0LnNsaWNlKDAsWnQpLmNvbXBh'@;
put 'cmUoVHQuc2xpY2UoMCxadCkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7cmUoUCwwKTt2YXIgcG49UC5yZWFkX3NoaWZ0KDQpO1AubCs9NDt2YXIgS249W10sdW49QnVmZmVyLmNvbmNhdChbSGUsQnVmZmVyLmFsbG9jKDQpXSk7Zm9yKHJlKHVuKSxDdD0wO1AubDxQ'@;
put 'Lmxlbmd0aDspdW4ubD1TZS5sZW5ndGgsdW4ud3JpdGVfc2hpZnQoNCxDdCksS24ucHVzaChKMShGdCxlbChCdWZmZXIuZnJvbSh1biksX2UpLnNsaWNlKDAsMTYpLHZlKS51cGRhdGUoQnVmZmVyLmZyb20oUC5zbGljZShQLmwsUC5sKzQwOTYpKSkpLFAubCs9NDA5NiwrK0N0O3ZhciB6bj1C'@;
put 'dWZmZXIuY29uY2F0KEtuKS5zbGljZSgwLHBuKSxrbj1vbihRKTtyZXR1cm4ga24udHlwZT0iYnVmZmVyIixfZih6bixrbil9KHZlWzFdLHJlLmNvbnRlbnQsTC5wYXNzd29yZHx8IiIsTCk7aWYoMj09dmVbMF0pcmV0dXJuIGZ1bmN0aW9uIGRfKHksUCxMLFEpe3ZhciByZT1qZS51dGlscy5w'@;
put 'cmVwX2Jsb2I7aWYoIlN0ZCIhPT15LnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO3ZhciBnZT15LnYuU2FsdCxfZT15LnYuVmVyaWZpZXIsdmU9eS52LlZlcmlmaWVySGFzaDtpZigzNiE9eS5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNN'@;
put 'QS0zNzYgU3RhbmRhcmQgRW5jcnlwdGlvbiBiYWQgRmxhZ3MiKTt2YXIgU2U9MCxIZT0iIjtzd2l0Y2goeS5oLkFsZ0lEKXtjYXNlIDI2MTI2OlNlPTEyOCxIZT0iYWVzLTEyOC1lY2IiO2JyZWFrO2Nhc2UgMjYxMjc6U2U9MTk2LEhlPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODpT'@;
put 'ZT0yNTYsSGU9ImFlcy0yNTYtZWNiIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKX1pZigzMjc3MiE9eS5oLkFsZ0lESGFzaCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7'@;
put 'aWYoeS5oLktleVNpemUhPVNlKXRocm93IG5ldyBFcnJvcigiQWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT15LmguUHJvdmlkZXJUeXBlKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgdW5zdXBwb3J0ZWQgUHJvdmlkZXJUeXBlICIreS5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jv'@;
put 'c29mdCBFbmhhbmNlZCBSU0EgYW5kIEFFUyBDcnlwdG9ncmFwaGljIFByb3ZpZGVyIiE9PXkuaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ3J5cHRvIFByb3ZpZGVyICIreS5oLkNTUE5hbWUpO3ZhciBHZT0iU0hBLTEiLG50PVNlPj4zLGR0PWVs'@;
put 'KEJ1ZmZlci5jb25jYXQoW2dlLGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsTCldKSxHZSksQ3Q9QnVmZmVyLmFsbG9jKDQpO3JlKEN0LDApO2Zvcih2YXIgY3Q9MDtjdDw1ZTQ7KytjdClDdC5sPTAsQ3Qud3JpdGVfc2hpZnQoNCxjdCksZHQ9ZWwoQnVmZmVyLmNvbmNhdChbQ3QsZHRdKSxH'@;
put 'ZSk7Q3QubD0wLEN0LndyaXRlX3NoaWZ0KDQsMCk7dmFyIEtuLHVuLHFuLHpuLGtuLEZ0PSh6bj0ocW49ZnVuY3Rpb24odHIsWm4sQnIpe2Zvcih2YXIgc2k9QnVmZmVyLmFsbG9jKDY0KSx4aT0wO3hpPHNpLmxlbmd0aDsrK3hpKXNpW3hpXT10cjtmb3IoeGk9MDt4aTxabi5sZW5ndGg7Kyt4'@;
put 'aSlzaVt4aV1ePVpuW3hpXTtyZXR1cm4gZWwoc2ksQnIpfSkoNTQsS249ZWwoQnVmZmVyLmNvbmNhdChbZHQsQ3RdKSxHZSksdW49R2UpLGtuPXFuKDkyLEtuLHVuKSxCdWZmZXIuY29uY2F0KFt6bixrbl0pLnNsaWNlKDAsbnQpKTtpZihKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0'@;
put 'ZSh2ZSkuc2xpY2UoMCwyMCkuY29tcGFyZShlbChKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0ZShfZSksR2UpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO3JlKFAsMCk7dmFyIGt0PVAucmVhZF9zaGlmdCg0KTtQLmwrPTQ7dmFyIFR0PVtdO2ZvcihjdD0w'@;
put 'O1AubDxQLmxlbmd0aDspVHQucHVzaChKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0ZShQLnNsaWNlKFAubCxQLmwrNDA5NikpKSxQLmwrPTQwOTYsKytjdDtyZXR1cm4gX2YoQnVmZmVyLmNvbmNhdChUdCkuc2xpY2UoMCxrdCksUSl9KHZlWzFdLHJlLmNvbnRlbnQsTC5wYXNzd29y'@;
put 'ZHx8IiIsTCk7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfXZhciBfUj1mdW5jdGlvbigpe307ZnVuY3Rpb24gYlIoeSxQKXtpZihQLnRlbXBsYXRlKXJldHVybiBfUih5LFApO2lmKCJvZHMiPT1QLmJvb2tUeXBlKXJldHVybiBfMCh5LFApO0ZtKFAmJlAu'@;
put 'UFBJfHw5NikseSYmIXkuU1NGJiYoeS5TU0Y9dy5nZXRfdGFibGUoKSkseSYmeS5TU0YmJihKKHcpLHcubG9hZF90YWJsZSh5LlNTRiksUC5yZXZzc2Y9QWUoeS5TU0YpLFAucmV2c3NmW3kuU1NGWzY1NTM1XV09MCxQLnNzZj15LlNTRikseS5TdHlsZXM9e0ZvbnRzOlAuRm9udHM9W3tzejox'@;
put 'Mixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6UC5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6UC5Cb3JkZXJzPVt7fV0sRFhGOlAuRFhG'@;
put 'PXkuU3R5bGVzJiZ5LlN0eWxlcy5EWEZ8fFtdLFRhYmxlOlAuVGFibGU9eS5TdHlsZXMmJnkuU3R5bGVzLlRhYmxlfHxbXX0sUC5vdmVycmlkZU1EVz9wbD1QLm92ZXJyaWRlTURXOloxKFAuRm9udHNbMF0pLFAucmVscz17fSxQLndicmVscz17fSxQLlN0cmluZ3M9W10sUC5TdHJpbmdzLkNv'@;
put 'dW50PTAsUC5TdHJpbmdzLlVuaXF1ZT0wLEswP1AucmV2U3RyaW5ncz1uZXcgTWFwOihQLnJldlN0cmluZ3M9e30sUC5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgUC5yZXZTdHJpbmdzLmZvbyk7dmFyIEw9Inhsc2IiPT1QLmJvb2tUeXBlPyJiaW4iOiJ4bWwiLFE9UlouaW5kZXhPZihQLmJv'@;
put 'b2tUeXBlKT4tMSxyZT17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxj'@;
put 'YWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJs'@;
put 'cHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aF8oUD1QfHx7fSk7dmFyIGdlPXluKCksX2U9IiIsdmU9MDtpZihQLmNlbGxYZnM9W10sUC5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sZ3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt9LHtyZXZz'@;
put 'c2Y6e0dlbmVyYWw6MH19KSx5LlByb3BzfHwoeS5Qcm9wcz17fSksWXQoZ2UsX2U9ImRvY1Byb3BzL2NvcmUueG1sIixmdW5jdGlvbiAkaCh5LFApe3ZhciBMPVB8fHt9LFE9W0JuLFAyXSxyZT17fTtpZigheSYmIUwuUHJvcHMpcmV0dXJuIFEuam9pbigiIik7eSYmKG51bGwhPXkuQ3JlYXRl'@;
put 'ZERhdGUmJmh1KCJkY3Rlcm1zOmNyZWF0ZWQiLCJzdHJpbmciPT10eXBlb2YgeS5DcmVhdGVkRGF0ZT95LkNyZWF0ZWREYXRlOlBoKHkuQ3JlYXRlZERhdGUsTC5XVEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LFEscmUpLG51bGwhPXkuTW9kaWZpZWREYXRlJiZodSgiZGN0ZXJt'@;
put 'czptb2RpZmllZCIsInN0cmluZyI9PXR5cGVvZiB5Lk1vZGlmaWVkRGF0ZT95Lk1vZGlmaWVkRGF0ZTpQaCh5Lk1vZGlmaWVkRGF0ZSxMLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sUSxyZSkpO2Zvcih2YXIgZ2U9MDtnZSE9UGwubGVuZ3RoOysrZ2Upe3ZhciBfZT1QbFtn'@;
put 'ZV0sdmU9TC5Qcm9wcyYmbnVsbCE9TC5Qcm9wc1tfZVsxXV0/TC5Qcm9wc1tfZVsxXV06eT95W19lWzFdXTpudWxsOyEwPT09dmU/dmU9IjEiOiExPT09dmU/dmU9IjAiOiJudW1iZXIiPT10eXBlb2YgdmUmJih2ZT1TdHJpbmcodmUpKSxudWxsIT12ZSYmaHUoX2VbMF0sdmUsbnVsbCxRLHJl'@;
put 'KX1yZXR1cm4gUS5sZW5ndGg+MiYmKFFbUS5sZW5ndGhdPSI8L2NwOmNvcmVQcm9wZXJ0aWVzPiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfSh5LlByb3BzLFApKSxyZS5jb3JlcHJvcHMucHVzaChfZSksem8oUC5yZWxzLDIsX2UsSGkuQ09SRV9QUk9QUyksX2U9'@;
put 'ImRvY1Byb3BzL2FwcC54bWwiLCF5LlByb3BzfHwheS5Qcm9wcy5TaGVldE5hbWVzKWlmKHkuV29ya2Jvb2smJnkuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIFNlPVtdLEhlPTA7SGU8eS5TaGVldE5hbWVzLmxlbmd0aDsrK0hlKTIhPSh5Lldvcmtib29rLlNoZWV0c1tIZV18fHt9KS5IaWRk'@;
put 'ZW4mJlNlLnB1c2goeS5TaGVldE5hbWVzW0hlXSk7eS5Qcm9wcy5TaGVldE5hbWVzPVNlfWVsc2UgeS5Qcm9wcy5TaGVldE5hbWVzPXkuU2hlZXROYW1lczt5LlByb3BzLldvcmtzaGVldHM9eS5Qcm9wcy5TaGVldE5hbWVzLmxlbmd0aCxZdChnZSxfZSxmdW5jdGlvbiBwcyh5KXt2YXIgUD1b'@;
put 'XSxMPVNyO3JldHVybiB5fHwoeT17fSkseS5BcHBsaWNhdGlvbj0iU2hlZXRKUyIsUFtQLmxlbmd0aF09Qm4sUFtQLmxlbmd0aF09ZzMsUjEuZm9yRWFjaChmdW5jdGlvbihRKXtpZih2b2lkIDAhPT15W1FbMV1dKXt2YXIgcmU7c3dpdGNoKFFbMl0pe2Nhc2Uic3RyaW5nIjpyZT1IcihTdHJp'@;
put 'bmcoeVtRWzFdXSkpO2JyZWFrO2Nhc2UiYm9vbCI6cmU9eVtRWzFdXT8idHJ1ZSI6ImZhbHNlIn12b2lkIDAhPT1yZSYmKFBbUC5sZW5ndGhdPUwoUVswXSxyZSkpfX0pLFBbUC5sZW5ndGhdPUwoIkhlYWRpbmdQYWlycyIsTCgidnQ6dmVjdG9yIixMKCJ2dDp2YXJpYW50IiwiPHZ0Omxwc3Ry'@;
put 'PldvcmtzaGVldHM8L3Z0Omxwc3RyPiIpK0woInZ0OnZhcmlhbnQiLEwoInZ0Omk0IixTdHJpbmcoeS5Xb3Jrc2hlZXRzKSkpLHtzaXplOjIsYmFzZVR5cGU6InZhcmlhbnQifSkpLFBbUC5sZW5ndGhdPUwoIlRpdGxlc09mUGFydHMiLEwoInZ0OnZlY3RvciIseS5TaGVldE5hbWVzLm1hcChm'@;
put 'dW5jdGlvbihRKXtyZXR1cm4iPHZ0Omxwc3RyPiIrSHIoUSkrIjwvdnQ6bHBzdHI+In0pLmpvaW4oIiIpLHtzaXplOnkuV29ya3NoZWV0cyxiYXNlVHlwZToibHBzdHIifSkpLFAubGVuZ3RoPjImJihQW1AubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+Iiwi'@;
put 'PiIpKSxQLmpvaW4oIiIpfSh5LlByb3BzKSkscmUuZXh0cHJvcHMucHVzaChfZSksem8oUC5yZWxzLDMsX2UsSGkuRVhUX1BST1BTKSx5LkN1c3Rwcm9wcyE9PXkuUHJvcHMmJmx0KHkuQ3VzdHByb3BzfHx7fSkubGVuZ3RoPjAmJihZdChnZSxfZT0iZG9jUHJvcHMvY3VzdG9tLnhtbCIsZnVu'@;
put 'Y3Rpb24gZDAoeSl7dmFyIFA9W0JuLHVtXTtpZigheSlyZXR1cm4gUC5qb2luKCIiKTt2YXIgTD0xO3JldHVybiBsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXsrK0wsUFtQLmxlbmd0aF09U3IoInByb3BlcnR5IixmdW5jdGlvbiBlYSh5LFApe3N3aXRjaCh0eXBlb2YgeSl7Y2FzZSJzdHJp'@;
put 'bmciOnZhciBMPVNyKCJ2dDpscHdzdHIiLEhyKHkpKTtyZXR1cm4gUCYmKEw9TC5yZXBsYWNlKC8mcXVvdDsvZywiX3gwMDIyXyIpKSxMO2Nhc2UibnVtYmVyIjpyZXR1cm4gU3IoKDB8eSk9PXk/InZ0Omk0IjoidnQ6cjgiLEhyKFN0cmluZyh5KSkpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIFNy'@;
put 'KCJ2dDpib29sIix5PyJ0cnVlIjoiZmFsc2UiKX1pZih5IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gU3IoInZ0OmZpbGV0aW1lIixQaCh5KSk7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gc2VyaWFsaXplICIreSl9KHlbcmVdLCEwKSx7Zm10aWQ6IntENUNERDUwNS0yRTlDLTEwMUItOTM5'@;
put 'Ny0wODAwMkIyQ0Y5QUV9IixwaWQ6TCxuYW1lOkhyKHJlKX0pfSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9KHkuQ3VzdHByb3BzKSkscmUuY3VzdHByb3BzLnB1c2goX2UpLHpvKFAucmVs'@;
put 'cyw0LF9lLEhpLkNVU1RfUFJPUFMpKTt2YXIgQmU9W10sR2U9W107ZnVuY3Rpb24gbnQocG4sS24pe0dlLnB1c2goW3ZlLTEsS24scG5dKX1mdW5jdGlvbiBkdChwbil7QmUucHVzaChbdmUtMSxwbl0pLHpvKEN0LC0xLCIuLi9waXZvdFRhYmxlcy9waXZvdFRhYmxlIitCZS5sZW5ndGgrIi4i'@;
put 'K0wsSGkuUElWT1QpfWZvcih2ZT0xO3ZlPD15LlNoZWV0TmFtZXMubGVuZ3RoOysrdmUpe3ZhciBDdD17IiFpZCI6e319LGN0PXkuU2hlZXRzW3kuU2hlZXROYW1lc1t2ZS0xXV0sYnQ9KGN0fHx7fSlbIiF0eXBlIl18fCJzaGVldCI7c3dpdGNoKGJ0KXtjYXNlImNoYXJ0IjppZih0eXBlb2Yg'@;
put 'd3JpdGVfZHJhd2luZ188InUiKXtZdChnZSxfZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK3ZlKyIuIitMLGxNKHZlLTEsX2UsUCx5LEN0KSkscmUuY2hhcnRzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJjaGFydHNoZWV0cy9zaGVldCIrdmUrIi4iK0wsSGkuQ1MpO2JyZWFrfWRlZmF1bHQ6'@;
put 'WXQoZ2UsX2U9InhsL3dvcmtzaGVldHMvc2hlZXQiK3ZlKyIuIitMLFpMKHZlLTEsX2UsUCx5LEN0KSkscmUuc2hlZXRzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJ3b3Jrc2hlZXRzL3NoZWV0Iit2ZSsiLiIrTCxIaS5XU1swXSl9aWYoY3QpeyJjaGFydCI9PWJ0JiYhY3RbIiFwb3MiXSYm'@;
put 'KGN0WyIhcG9zIl09e3g6MCx5OjAsdzo5MDAsaDo2MDB9KTt2YXIgRnQ9Y3RbIiFjb21tZW50cyJdLGt0PSExO2lmKEZ0JiZGdC5sZW5ndGg+MCl7dmFyIFR0PSJ4bC9jb21tZW50cyIrdmUrIi4iK0w7WXQoZ2UsVHQsSmUoRnQsVHQsUCkpLHJlLmNvbW1lbnRzLnB1c2goVHQpLHpvKEN0LC0x'@;
put 'LCIuLi9jb21tZW50cyIrdmUrIi4iK0wsSGkuQ01OVCksa3Q9ITB9KGN0WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYoa3Q9ITApLGN0WyIhbGVnYWN5Il0mJmt0JiZZdChnZSwieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrdmUrIi52bWwiLHFEKHZlLGN0WyIhY29tbWVudHMiXSxjdFsi'@;
put 'IWNvbnRyb2xzIl0sY3QpKSxjdFsiIWxlZ2FjeUhGIl0mJm42KGdlLDAsdmUsY3RbIiFwcmludCJdLmltYWdlcyk7dmFyIFp0PSgiY2hhcnQiPT1jdFsiIXR5cGUiXT9bY3RdOmN0WyIhY2hhcnRzIl18fFtdKS5jb25jYXQoKGN0WyIhaW1hZ2VzIl18fFtdKS5tYXAoZnVuY3Rpb24ocG4pe3Jl'@;
put 'dHVybiBwblsiIXR5cGUiXXx8KHBuWyIhdHlwZSJdPSJpbWFnZSIpLHBufSkpLmNvbmNhdCgoY3RbIiFzaGFwZXMiXXx8W10pLm1hcChmdW5jdGlvbihwbil7cmV0dXJuIHBuWyIhdHlwZSJdfHwocG5bIiF0eXBlIl09InNoYXBlIikscG59KSk7WnQmJlp0Lmxlbmd0aCYmKHR5cGVvZiB3cml0'@;
put 'ZV9kcmF3aW5nXzwidSI/d3JpdGVfZHJhd2luZ18oZ2UscmUsdmUsY3QsWnQpOihZdChnZSwieGwvZHJhd2luZ3MvZHJhd2luZyIrdmUrIi54bWwiLFJDKCkpLHJlLmRyYXdpbmdzLnB1c2goInhsL2RyYXdpbmdzL2RyYXdpbmciK3ZlKyIueG1sIikpKSxkZWxldGUgY3RbIiFjb21tZW50cyJd'@;
put 'LGRlbGV0ZSBjdFsiIWxlZ2FjeSJdLGRlbGV0ZSBjdFsiIWxlZ2FjeUhGIl19Y3QmJmN0WyIhcGl2b3RzIl0mJiJ4bWwiPT1MJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmY3RbIiFwaXZvdHMiXS5mb3JFYWNoKGR0KSxDdFsiIWlkIl0ucklkMSYmWXQoZ2UsQmkoX2UpLFhhKEN0KSks'@;
put 'Y3QmJmN0WyIhdGFibGVzIl0mJiJ4bWwiPT1MJiZjdFsiIXRhYmxlcyJdLmZvckVhY2gobnQpfXJldHVybiBudWxsIT1QLlN0cmluZ3MmJlAuU3RyaW5ncy5sZW5ndGg+MCYmKFl0KGdlLF9lPSJ4bC9zaGFyZWRTdHJpbmdzLiIrTCxXTChQLlN0cmluZ3MsX2UsUCkpLHJlLnN0cnMucHVzaChf'@;
put 'ZSksem8oUC53YnJlbHMsLTEsInNoYXJlZFN0cmluZ3MuIitMLEhpLlNTVCkpLCJ4bWwiPT1MJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmd3JpdGVfcGl2b3RfeG1sKEJlLHksZ2UscmUsUCksInhtbCI9PUwmJmZ1bmN0aW9uIHE0KHksUCxMLFEpe3kuZm9yRWFjaChmdW5jdGlvbihy'@;
put 'ZSxnZSl7dmFyIF9lPVAuU2hlZXRzW1AuU2hlZXROYW1lc1tyZVswXV1dLHZlPSJ4bC90YWJsZXMvdGFibGUiKyhyZVswXSsxKSsiXyIrcmVbMV0rIi54bWwiO1EudGFibGVzLnB1c2godmUpO3ZhciBTZT1yZVsyXS5yZWZ8fF9lWyIhcmVmIl07InN0cmluZyIhPXR5cGVvZiBTZSYmKFNlPU9v'@;
put 'KFNlKSk7dmFyIEhlPU9pKFNlKSxCZT1yZVsyXS5uYW1lfHwic2pzdGJsXyIrcmVbMF0rIl8iK3JlWzFdLEdlPVtCbl0sbnQ9IWhuKHJlWzJdLmhlYWRlciksZHQ9bnQmJiFobihyZVsyXS5maWx0ZXIpO0dlLnB1c2goJzx0YWJsZSB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h'@;
put 'dHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiBpZD0iJysoZ2UrMSkrJyIgbmFtZT0iJytIcihCZSkrJyIgZGlzcGxheU5hbWU9IicrSHIoQmUpKyciIHJlZj0iJytTZSsnIiAnKyhudWxsIT1yZVsyXS5oZWFkZXImJjEhPXJlWzJdLmhlYWRlcj8naGVhZGVyUm93Q291bnQ9IicrKHJl'@;
put 'WzJdLmhlYWRlcnx8MCkrJyIgJzoiIikrIj4iKSxkdCYmR2UucHVzaCgnPGF1dG9GaWx0ZXIgcmVmPSInK1NlKyciLz4nKSxHZS5wdXNoKCc8dGFibGVDb2x1bW5zIGNvdW50PSInKyhIZS5lLmMtSGUucy5jKzEpKyciPicpO2Zvcih2YXIgQ3Q9W10sY3Q9SGUucy5jO2N0PD1IZS5lLmM7Kytj'@;
put 'dClpZihudCl7Zm9yKHZhciBidD1kaSh7cjpIZS5zLnIsYzpjdH0pLEZ0PV9lW2J0XSxrdD1yZVsyXS5jb2xzJiZyZVsyXS5jb2xzW2N0LUhlLnMuY10mJnJlWzJdLmNvbHNbY3QtSGUucy5jXS5uYW1lfHxGdCYmKEZ0Lnd8fEZ0LnYpfHwiQ29sdW1uICIrKGN0LUhlLnMuYysxKSxUdD1rdCxa'@;
put 'dD0xO0N0LmluZGV4T2YoVHQpPi0xJiYrK1p0PDE2Mzg0OylUdD1rdCtadDtpZihUdCE9a3QpdGhyb3cidGFibGUgY29sdW1ucyAiK2N0KyIgYW5kICIrKEN0LmluZGV4T2Yoa3QpK0hlLnMuYykrIiBoYXZlIHRoZSBzYW1lIGhlYWRlciAnIitrdCsiJzsgdHJ5IHNldHRpbmcgY2VsbCAiK2J0'@;
put 'KyIgdG8gJyIrVHQrIiciO0N0LnB1c2goVHQpLEdlLnB1c2goJzx0YWJsZUNvbHVtbiBpZD0iJysocmVbMl0uY29scyYmcmVbMl0uY29sc1tjdC1IZS5zLmNdJiZudWxsIT1yZVsyXS5jb2xzW2N0LUhlLnMuY10uaWQ/cmVbMl0uY29sc1tjdC1IZS5zLmNdLmlkOmN0LUhlLnMuYysxKSsnIiBu'@;
put 'YW1lPSInK0hyKFR0KSsnIi8+Jyl9ZWxzZSBHZS5wdXNoKHJlWzJdLmNvbHMmJnJlWzJdLmNvbHNbY3QtSGUucy5jXT8nPHRhYmxlQ29sdW1uIGlkPSInK3JlWzJdLmNvbHNbY3QtSGUucy5jXS5pZCsnIiBuYW1lPSInK3JlWzJdLmNvbHNbY3QtSGUucy5jXS5uYW1lKyciLz4nOic8dGFibGVD'@;
put 'b2x1bW4gaWQ9IicrKGN0LUhlLnMuYysxKSsnIiB1bmlxdWVOYW1lPSInKyhjdC1IZS5zLmMrMSkrJyIgbmFtZT0iJysoY3QtSGUucy5jKzEpKyciLz4nKTtHZS5wdXNoKCI8L3RhYmxlQ29sdW1ucz4iKTt2YXIgS249KyghMSE9PShyZVsyXS5zdHlsZXx8e30pLnJvd3N0cmlwZSksdW49KyEh'@;
put 'KHJlWzJdLnN0eWxlfHx7fSkuY29sc3RyaXBlLHFuPSshIShyZVsyXS5zdHlsZXx8e30pLmNvbGZpcnN0LHpuPSshIShyZVsyXS5zdHlsZXx8e30pLmNvbGxhc3Qsa249KHJlWzJdLnN0eWxlfHx7fSkubmFtZXx8Ik1lZGl1bTkiO2tuPWtuLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxk'@;
put 'KyQvKT8iVGFibGVTdHlsZSIra246a24sR2UucHVzaCgnPHRhYmxlU3R5bGVJbmZvIG5hbWU9Iicra24rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK3FuKyciIHNob3dMYXN0Q29sdW1uPSInK3puKyciIHNob3dSb3dTdHJpcGVzPSInK0tuKyciIHNob3dDb2x1bW5TdHJpcGVzPSInK3VuKyciLz4n'@;
put 'KSxHZS5wdXNoKCI8L3RhYmxlPiIpLFl0KEwsdmUsR2Uuam9pbigiIikpfSl9KEdlLHksZ2UscmUpLCJ4bWwiPT1MJiYoeS5FeHRlcm5hbFdCfHxbXSkubGVuZ3RoJiZmdW5jdGlvbiBXOSh5LFAsTCl7TC5saW5rc3x8KEwubGlua3M9W10pLHkuRXh0ZXJuYWxXQiYmeS5FeHRlcm5hbFdCLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oUSxyZSl7dmFyIGdlPSIveGwvZXh0ZXJuYWxMaW5rcy9fcmVscy9leHRlcm5hbExpbmsiKyhyZSsxKSsiLnhtbC5yZWxzIixfZT17fTt6byhfZSwtMSxRLlRhcmdldCxRLk1pc3Npbmc/SGkuWE1JU1M6SGkuWFBBVEgpLFl0KFAsbGMoZ2UpLFhhKF9lKSk7dmFyIHZl'@;
put 'PSIveGwvZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhyZSsxKSsiLnhtbCI7TC5saW5rcy5wdXNoKHZlKSxZdChQLGxjKHZlKSxmdW5jdGlvbiBJQyh5KXt2YXIgUD1bQm4sdDZdO3JldHVybih5LlNoZWV0TmFtZXN8fFtdKS5sZW5ndGgmJihQLnB1c2goJzxleHRlcm5hbEJvb2sgeG1s'@;
put 'bnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIgcjppZD0icklkMSI+JyksUC5wdXNoKCI8c2hlZXROYW1lcz4iKSx5LlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihMKXtQLnB1c2goJzxzaGVldE5hbWUg'@;
put 'dmFsPSInK0hyKEwpKyciLz4nKX0pLFAucHVzaCgiPC9zaGVldE5hbWVzPiIpLFAucHVzaCgiPHNoZWV0RGF0YVNldD4iKSx5LlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihMLFEpe3ZhciByZT15LlNoZWV0c1tMXSxnZT17c2hlZXRJZDpRfSxfZT1udWxsO2lmKG51bGw9PXJlKWdlLnJl'@;
put 'ZnJlc2hFcnJvcj0xO2Vsc2UgaWYocmVbIiFyZWYiXSl7dmFyIHZlPVdzKHJlWyIhcmVmIl0pO19lPSIiO2Zvcih2YXIgU2U9dmUucy5yO1NlPD12ZS5lLnI7KytTZSl7Zm9yKHZhciBIZT0iIixCZT12ZS5zLmM7QmU8PXZlLmUuYzsrK0JlKXt2YXIgR2U9ZGkoe3I6U2UsYzpCZX0pO3JlW0dl'@;
put 'XSYmKEhlfHwoSGU9Jzxyb3cgcj0iJysoU2UrMSkrJyI+JyksSGUrPSc8Y2VsbCByPSInK0dlKyciJysocmVbR2VdLnQ/JyB0PSInK3JlW0dlXS50KyciJzoiIikrIj48dj4iK0hyKHJlW0dlXS52KSsiPC92PjwvY2VsbD4iKX1IZSYmKF9lKz1IZSsiPC9yb3c+Iil9fVAucHVzaChTcigic2hl'@;
put 'ZXREYXRhIixfZSxnZSkpfSksUC5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxQLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfShRKSl9KX0oeSxn'@;
put 'ZSxyZSksInhtbCI9PUwmJmZ1bmN0aW9uIFRDKHkpe3ZhciBQLEw7eS5Xb3JrYm9va3x8KHkuV29ya2Jvb2s9e05hbWVzOltdfSkseS5Xb3JrYm9vay5OYW1lc3x8KHkuV29ya2Jvb2suTmFtZXM9W10pO2Zvcih2YXIgUT15Lldvcmtib29rLk5hbWVzLHJlPTA7cmU8eS5TaGVldE5hbWVzLmxl'@;
put 'bmd0aDsrK3JlKXt2YXIgZ2U9eS5TaGVldE5hbWVzW3JlXSxfZT15LlNoZWV0c1tnZV07aWYoX2UmJl9lWyIhcHJpbnQiXSl7dmFyIHZlPSInIitnZSsiJyEiLFNlPV9lWyIhcHJpbnQiXTtpZihTZSl7dmFyIEhlPSEoUD1TZS5hcmVhKSxCZT0hKEw9U2UudGl0bGVzKSxHZT1QPyJzdHJpbmci'@;
put 'PT10eXBlb2YgUD9QOk9vKFApOiIiO2lmKFAmJihRLmZvckVhY2goZnVuY3Rpb24oZHQpe2R0LlNoZWV0PT1yZSYmIUhlJiYiX3hsbm0uUHJpbnRfQXJlYSI9PWR0Lk5hbWUmJihIZT0hMCxkdC5SZWY9dmUrR2UpfSksSGV8fFEucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfQXJlYSIsUmVmOnZl'@;
put 'K0dlLFNoZWV0OnJlfSkpLEwpe3ZhciBudD0iIjtMLnMuYz4tMSYmTC5lLmM+LTEmJihudCs9dmUrTnMoTC5zLmMpKyI6IitOcyhMLmUuYykrIiwiKSxMLnMucj4tMSYmTC5lLnI+LTEmJihudCs9dmUrSHMoTC5zLnIpKyI6IitIcyhMLmUucikrIiwiKSxudD1udC5zbGljZSgwLC0xKSxRLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oZHQpe2R0LlNoZWV0PT1yZSYmIUJlJiYiX3hsbm0uUHJpbnRfVGl0bGVzIj09ZHQuTmFtZSYmKEhlPSEwLGR0LlJlZj1udCl9KSxCZXx8US5wdXNoKHtOYW1lOiJfeGxubS5QcmludF9UaXRsZXMiLFJlZjpudCxTaGVldDpyZX0pfX19fX0oeSksWXQoZ2UsX2U9Inhs'@;
put 'L3dvcmtib29rLiIrTCxmdW5jdGlvbiBxdih5LFAsTCl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP0hMOlJMKSh5LEwpfSh5LF9lLFApKSxyZS53b3JrYm9va3MucHVzaChfZSksem8oUC5yZWxzLDEsX2UsSGkuV0IpLFl0KGdlLF9lPSJ4bC90aGVtZS90aGVtZTEueG1sIixyZih5LlRo'@;
put 'ZW1lcyxQKSkscmUudGhlbWVzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJ0aGVtZS90aGVtZTEueG1sIixIaS5USEVNRSksWXQoZ2UsX2U9InhsL3N0eWxlcy4iK0wsZnVuY3Rpb24gWUwoeSxQLEwpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9QRDpwQykoeSxMKX0oeSxfZSxQKSks'@;
put 'cmUuc3R5bGVzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJzdHlsZXMuIitMLEhpLlNUWSkseS52YmFyYXcmJlEmJihZdChnZSxfZT0ieGwvdmJhUHJvamVjdC5iaW4iLHkudmJhcmF3KSxyZS52YmEucHVzaChfZSksem8oUC53YnJlbHMsLTEsInZiYVByb2plY3QuYmluIixIaS5WQkEpKSx5'@;
put 'Lm1vZGVsJiZ5Lm1vZGVsLmxlbmd0aCYmKFl0KGdlLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLHkubW9kZWwpLHpvKFAud2JyZWxzLC0xLCJtb2RlbC9pdGVtLmRhdGEiLEhpLlBXUlBEKSkseS5jb25uJiYoWXQoZ2UsInhsL2Nvbm5lY3Rpb25zLnhtbCIseS5jb25uKSxyZS5jb25ucy5wdXNoKCIv'@;
put 'eGwvY29ubmVjdGlvbnMueG1sIiksem8oUC53YnJlbHMsLTEsImNvbm5lY3Rpb25zLnhtbCIsSGkuQ09OTikpLHkuQ3VzdG9tWE1MJiZ5LkN1c3RvbVhNTC5mb3JFYWNoKGZ1bmN0aW9uKHBuLEtuKXtpZihZdChnZSwiY3VzdG9tWG1sL2l0ZW0iKyhLbisxKSsiLnhtbCIscG4uZGF0YSksem8o'@;
put 'UC53YnJlbHMsLTEsIi4uL2N1c3RvbVhtbC9pdGVtIisoS24rMSkrIi54bWwiLEhpLkNYTUwpLHBuLnByb3BzKXtZdChnZSwiY3VzdG9tWG1sL2l0ZW1Qcm9wcyIrKEtuKzEpKyIueG1sIixwbi5wcm9wcykscmUuY3VzdG9teG1scHJvcHMucHVzaCgiL2N1c3RvbVhtbC9pdGVtUHJvcHMiKyhL'@;
put 'bisxKSsiLnhtbCIpO3ZhciB1bj17fTt6byh1biwtMSwiaXRlbVByb3BzIisoS24rMSkrIi54bWwiLEhpLkNYTUxQKSxZdChnZSwiY3VzdG9tWG1sL19yZWxzL2l0ZW0iKyhLbisxKSsiLnhtbC5yZWxzIixYYSh1bikpfX0pLFl0KGdlLCJbQ29udGVudF9UeXBlc10ueG1sIixmdW5jdGlvbiBy'@;
put 'OSh5LFAsTCl7dmFyIHJlLFE9W107THx8KFFbUS5sZW5ndGhdPUJuLFFbUS5sZW5ndGhdPWYzLFE9US5jb25jYXQobjkpKTt2YXIgZ2U9ZnVuY3Rpb24oU2Upe3lbU2VdJiZ5W1NlXS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPVNyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09KHJl'@;
put 'PXlbU2VdWzBdKVswXT8iIjoiLyIpK3JlLENvbnRlbnRUeXBlOklkW1NlXVtQLmJvb2tUeXBlfHwieGxzeCJdfSkpfSxfZT1mdW5jdGlvbihTZSl7KHlbU2VdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihIZSl7UVtRLmxlbmd0aF09U3IoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1I'@;
put 'ZVswXT8iIjoiLyIpK0hlLENvbnRlbnRUeXBlOklkW1NlXVtQLmJvb2tUeXBlfHwieGxzeCJdfSl9KX0sdmU9ZnVuY3Rpb24oU2Upeyh5W1NlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oSGUpe1FbUS5sZW5ndGhdPVNyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09SGVbMF0/IiI6'@;
put 'Ii8iKStIZSxDb250ZW50VHlwZTpOY1tTZV1bMF19KX0pfTtyZXR1cm4gZ2UoIndvcmtib29rcyIpLF9lKCJzaGVldHMiKSxfZSgiY2hhcnRzIiksdmUoInRoZW1lcyIpLFsic3RycyIsInN0eWxlcyIsImNvbm5zIl0uZm9yRWFjaChnZSksWyJjb3JlcHJvcHMiLCJleHRwcm9wcyIsImN1c3Rw'@;
put 'cm9wcyJdLmZvckVhY2godmUpLHZlKCJ2YmEiKSx2ZSgiY29tbWVudHMiKSx2ZSgiZHJhd2luZ3MiKSxfZSgidGFibGVzIiksX2UoInBpdm90cyIpLF9lKCJwaXZvdGNhY2hlcyIpLF9lKCJwaXZvdHJlY29yZHMiKSx2ZSgiZGF0YW1vZGVscyIpLHZlKCJjdHJscHJvcHMiKSx2ZSgiY2hhcnRv'@;
put 'YmpzIiksdmUoImNoYXJ0c3R5bGVzIiksdmUoImNoYXJ0Y29sb3JzIiksdmUoImNoYXJ0ZXhzIiksX2UoImxpbmtzIiksdmUoImN1c3RvbXhtbHByb3BzIiksIUwmJlEubGVuZ3RoPjImJihRW1EubGVuZ3RoXT0iPC9UeXBlcz4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2lu'@;
put 'KCIiKX0ocmUsUCkpLFl0KGdlLCJfcmVscy8ucmVscyIsWGEoUC5yZWxzKSksWXQoZ2UsInhsL19yZWxzL3dvcmtib29rLiIrTCsiLnJlbHMiLFhhKFAud2JyZWxzKSksZGVsZXRlIFAuRm9udHMsZGVsZXRlIFAuRmlsbHMsZGVsZXRlIFAuQm9yZGVycyxkZWxldGUgUC5yZXZzc2YsZGVsZXRl'@;
put 'IFAuc3NmLGdlfWZ1bmN0aW9uIGZfKHksUCl7dmFyIEw9IiI7c3dpdGNoKChQfHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5beVswXSx5WzFdLHlbMl0seVszXSx5WzRdLHlbNV0seVs2XSx5WzddXTtjYXNlImJhc2U2NCI6TD1zZS5kZWNvZGUo'@;
put 'eS5zbGljZSgwLDEyKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkw9eTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIisoUCYmUC50eXBlfHwidW5kZWZpbmVkIikpfXJldHVybltMLmNoYXJDb2RlQXQoMCksTC5jaGFyQ29kZUF0KDEpLEwuY2hhckNvZGVB'@;
put 'dCgyKSxMLmNoYXJDb2RlQXQoMyksTC5jaGFyQ29kZUF0KDQpLEwuY2hhckNvZGVBdCg1KSxMLmNoYXJDb2RlQXQoNiksTC5jaGFyQ29kZUF0KDcpXX1mdW5jdGlvbiBOTSh5LFApe3ZhciBMPTA7ZTpmb3IoO0w8eS5sZW5ndGg7KXN3aXRjaCh5LmNoYXJDb2RlQXQoTCkpe2Nhc2UgMTA6Y2Fz'@;
put 'ZSAxMzpjYXNlIDMyOisrTDticmVhaztjYXNlIDYwOnJldHVybiBqYSh5LnNsaWNlKEwpLFApO2RlZmF1bHQ6YnJlYWsgZX1yZXR1cm4gQjEudG9fd29ya2Jvb2soeSxQKX1mdW5jdGlvbiBwXyh5LFAsTCxRKXtyZXR1cm4gUT8oTC50eXBlPSJzdHJpbmciLEIxLnRvX3dvcmtib29rKHksTCkp'@;
put 'OkIxLnRvX3dvcmtib29rKFAsTCl9ZnVuY3Rpb24gX2YoeSxQKXt2YXIgTD13LmdldGxvY2FsZSgpO0oodyksdy5zZXRsb2NhbGUoTCksVigpO3ZhciBRPVB8fHt9O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gX2YobmV3IFVpbnQ4'@;
put 'QXJyYXkoeSksKChRPW9uKFEpKS50eXBlPSJhcnJheSIsUSkpO3ZhciBnZSxyZT15LF9lPSExO2lmKEZtKG5mPVEuUFBJfHxMOSksUS5jZWxsU3R5bGVzJiYoUS5jZWxsTkY9ITAsUS5zaGVldFN0dWJzPSEwKSxaMz17fSxRLmRhdGVORiYmKFozLmRhdGVORj1RLmRhdGVORiksUS50eXBlfHwo'@;
put 'US50eXBlPWhlJiZCdWZmZXIuaXNCdWZmZXIoeSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09US50eXBlJiYoUS50eXBlPWhlPyJidWZmZXIiOiJiaW5hcnkiLHJlPWZ1bmN0aW9uIFFlKHkpe2lmKHR5cGVvZiBXZTwidSIpcmV0dXJuIFdlLnJlYWRGaWxlU3luYyh5KTtpZih0eXBlb2Yg'@;
put 'JDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciBQPUZpbGUoeSk7UC5vcGVuKCJyIiksUC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgTD1QLnJlYWQoKTtyZXR1cm4gUC5jbG9zZSgpLEx9Y2F0Y2goUSl7aWYoIVEubWVzc2FnZXx8IVEubWVzc2FnZS5tYXRj'@;
put 'aCgvb25zdHJ1Y3QvKSl0aHJvdyBRfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIreSl9KHkpKSwic3RyaW5nIj09US50eXBlJiYoX2U9ITAsUS50eXBlPSJiaW5hcnkiLFEuY29kZXBhZ2U9NjUwMDEscmU9ZnVuY3Rpb24gTVIoeSl7cmV0dXJuIHkubWF0Y2goL1teXHgw'@;
put 'MC1ceDdGXS8pP0xvKHkpOnl9KHkpKSwiYXJyYXkiPT1RLnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmeSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciB2ZT1uZXcgQXJyYXlCdWZmZXIoMyksU2U9bmV3IFVpbnQ4QXJyYXkodmUpO2lmKFNl'@;
put 'LmZvbz0iYmFyIiwhU2UuZm9vKXJldHVybihRPW9uKFEpKS50eXBlPSJhcnJheSIsX2YoQyhyZSksUSl9c3dpdGNoKChnZT1mXyhyZSxRKSlbMF0pe2Nhc2UgMjA4OmlmKDIwNz09PWdlWzFdJiYxNz09PWdlWzJdJiYyMjQ9PT1nZVszXSYmMTYxPT09Z2VbNF0mJjE3Nz09PWdlWzVdJiYyNj09'@;
put 'PWdlWzZdJiYyMjU9PT1nZVs3XSlyZXR1cm4gZnVuY3Rpb24geVIoeSxQKXtyZXR1cm4gamUuZmluZCh5LCJFbmNyeXB0ZWRQYWNrYWdlIik/dlIoeSxQKTpfNSh5LFApfShqZS5yZWFkKHJlLFEpLFEpO2JyZWFrO2Nhc2UgOTppZihnZVsxXTw9OClyZXR1cm4gXzUocmUsUSk7YnJlYWs7Y2Fz'@;
put 'ZSA2MDpyZXR1cm4gamEocmUsUSk7Y2FzZSA3MzppZig3Mz09PWdlWzFdJiY0Mj09PWdlWzJdJiYwPT09Z2VbM10pdGhyb3cgbmV3IEVycm9yKCJUSUZGIEltYWdlIEZpbGUgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTtpZig2OD09PWdlWzFdKXJldHVybiBmdW5jdGlvbiBwWih5LFApe3ZhciBM'@;
put 'PVB8fHt9LFE9ISFMLldURjtMLldURj0hMDt0cnl7dmFyIHJlPUU5LnRvX3dvcmtib29rKHksTCk7cmV0dXJuIEwuV1RGPVEscmV9Y2F0Y2goZ2Upe2lmKEwuV1RGPVEsIWdlLm1lc3NhZ2UubWF0Y2goL1NZTEsgYmFkIHJlY29yZCBJRC8pJiZRKXRocm93IGdlO3JldHVybiBCMS50b193b3Jr'@;
put 'Ym9vayh5LFApfX0ocmUsUSk7YnJlYWs7Y2FzZSA4NDppZig2NT09PWdlWzFdJiY2Nj09PWdlWzJdJiY3Nj09PWdlWzNdKXJldHVybiBNMy50b193b3JrYm9vayhyZSxRKTticmVhaztjYXNlIDgwOnJldHVybiA3NT09PWdlWzFdJiZnZVsyXTw5JiZnZVszXTw5P2Z1bmN0aW9uIHdSKHksUCl7'@;
put 'dmFyIFE9eSxyZT1QfHx7fTtyZXR1cm4gcmUudHlwZXx8KHJlLnR5cGU9aGUmJkJ1ZmZlci5pc0J1ZmZlcih5KT8iYnVmZmVyIjoiYmFzZTY0IiksSE0oeG4oUSxyZSkscmUpfShyZSxRKTpwXyh5LHJlLFEsX2UpO2Nhc2UgMjM5OnJldHVybiA2MD09PWdlWzNdP2phKHJlLFEpOnBfKHkscmUs'@;
put 'USxfZSk7Y2FzZSAyNTU6aWYoMjU0PT09Z2VbMV0pcmV0dXJuIGZ1bmN0aW9uIFNSKHksUCl7dmFyIEw9eTtyZXR1cm4iYmFzZTY0Ij09UC50eXBlJiYoTD1zZS5kZWNvZGUoTCkpLEw9Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxMLnNsaWNlKDIpLCJzdHIiKSxQLnR5cGU9ImJpbmFyeSIs'@;
put 'Tk0oTCxQKX0ocmUsUSk7YnJlYWs7Y2FzZSAwOmlmKDA9PT1nZVsxXSYmZ2VbMl0+PTImJjA9PT1nZVszXSlyZXR1cm4gVG0udG9fd29ya2Jvb2socmUsUSk7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMTQwOnJldHVybiBCMi50b193b3JrYm9vayhyZSxRKTtjYXNlIDEy'@;
put 'MzppZig5Mj09PWdlWzFdJiYxMTQ9PT1nZVsyXSYmMTE2PT09Z2VbM10pcmV0dXJuIE9tLnRvX3dvcmtib29rKHJlLFEpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBDUih5LFApe3ZhciBMPSIiLFE9Zl8oeSxQKTtzd2l0Y2goUC50eXBlKXtjYXNlImJh'@;
put 'c2U2NCI6TD1zZS5kZWNvZGUoeSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkw9eTticmVhaztjYXNlImJ1ZmZlciI6TD15LnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpMPVB0KHkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1Au'@;
put 'dHlwZSl9cmV0dXJuIDIzOT09UVswXSYmMTg3PT1RWzFdJiYxOTE9PVFbMl0mJihMPVBpKEwpKSxOTShMLFApfShyZSxRKX1yZXR1cm4gQjIudmVyc2lvbnMuaW5kZXhPZihnZVswXSk+LTEmJmdlWzJdPD0xMiYmZ2VbM108PTMxP0IyLnRvX3dvcmtib29rKHJlLFEpOnBfKHkscmUsUSxfZSl9'@;
put 'ZnVuY3Rpb24gZ18oeSxQKXt2YXIgTD1QfHx7fTtyZXR1cm4gTC50eXBlPSJmaWxlIixfZih5LEwpfWZ1bmN0aW9uIG1fKHksUCl7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5IjpicmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6UC50eXBlPSIiO2JyZWFrO2Nh'@;
put 'c2UiZmlsZSI6cmV0dXJuIFllKFAuZmlsZSxqZS53cml0ZSh5LHt0eXBlOmhlPyJidWZmZXIiOiIifSkpO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK1AuYm9va1R5cGUrIicgZmlsZXMiKTtkZWZhdWx0OnRocm93IG5l'@;
put 'dyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfXJldHVybiBqZS53cml0ZSh5LFApfWZ1bmN0aW9uIGUxKHksUCxMKXtMfHwoTD0iIik7dmFyIFE9TCt5O3N3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UuZW5jb2RlKExvKFEpKTtjYXNlImJpbmFyeSI6cmV0'@;
put 'dXJuIExvKFEpO2Nhc2Uic3RyaW5nIjpyZXR1cm4geTtjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUsUSwidXRmOCIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaGU/dWUoUSwidXRmOCIpOmUxKFEse3R5cGU6ImJpbmFyeSJ9KS5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUu'@;
put 'Y2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfWZ1bmN0aW9uIHZfKHksUCl7c3dpdGNoKFAudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBMPSIiLFE9MDtRPHkubGVuZ3RoOysrUSlM'@;
put 'Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHlbUV0pO3JldHVybiJiYXNlNjQiPT1QLnR5cGU/c2UuZW5jb2RlKEwpOiJzdHJpbmciPT1QLnR5cGU/UGkoTCk6TDtjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUseSk7Y2FzZSJidWZmZXIiOnJldHVybiB5O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9y'@;
put 'KCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9fWZ1bmN0aW9uIEM1KHksUCl7VigpLGZ1bmN0aW9uIERMKHkpe2lmKCF5fHwheS5TaGVldE5hbWVzfHwheS5TaGVldHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFdvcmtib29rIik7aWYoIXkuU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJXb3JrYm9vayBpcyBlbXB0eSIpOyFmdW5jdGlvbiBZdih5LFAsTCl7eS5mb3JFYWNoKGZ1bmN0aW9uKFEscmUpe1p2KFEpO2Zvcih2YXIgZ2U9MDtnZTxyZTsrK2dlKWlmKFE9PXlbZ2VdKXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIFNoZWV0IE5hbWU6ICIrUSk7aWYo'@;
put 'TCl7dmFyIF9lPVAmJlBbcmVdJiZQW3JlXS5Db2RlTmFtZXx8UTtpZig5NT09X2UuY2hhckNvZGVBdCgwKSYmX2UubGVuZ3RoPjIyKXRocm93IG5ldyBFcnJvcigiQmFkIENvZGUgTmFtZTogV29ya3NoZWV0IitfZSl9fSl9KHkuU2hlZXROYW1lcyx5Lldvcmtib29rJiZ5Lldvcmtib29rLlNo'@;
put 'ZWV0c3x8W10sISF5LnZiYXJhdyk7Zm9yKHZhciBMPTA7TDx5LlNoZWV0TmFtZXMubGVuZ3RoOysrTClzNSh5LlNoZWV0c1t5LlNoZWV0TmFtZXNbTF1dLDAsTCl9KHkpO3ZhciBMPVB8fHt9O2lmKEwuY2VsbFN0eWxlcyYmKEwuY2VsbE5GPSEwLEwuc2hlZXRTdHVicz0hMCksImFycmF5Ij09'@;
put 'TC50eXBlKXtMLnR5cGU9ImJpbmFyeSI7dmFyIFE9QzUoeSxMKTtyZXR1cm4gTC50eXBlPSJhcnJheSIsSChRKX1zd2l0Y2goTC5ib29rVHlwZXx8Inhsc2IiKXtjYXNlInhtbCI6Y2FzZSJ4bG1sIjpyZXR1cm4gZTEoSkwoeSxMKSxMKTtjYXNlInNsayI6Y2FzZSJzeWxrIjpyZXR1cm4gZTEo'@;
put 'dVIoeSxMKSxMKTtjYXNlImh0bSI6Y2FzZSJodG1sIjpyZXR1cm4gZTEobFIoeSxMKSxMKTtjYXNlInR4dCI6cmV0dXJuIGZ1bmN0aW9uIGpNKHksUCl7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBzZS5lbmNvZGUoeSk7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpyZXR1'@;
put 'cm4geTtjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUseSwiYmluYXJ5Iik7Y2FzZSJidWZmZXIiOnJldHVybiBoZT91ZSh5LCJiaW5hcnkiKTp5LnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIEwuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVk'@;
put 'IHR5cGUgIitQLnR5cGUpfShoUih5LEwpLEwpO2Nhc2UiY3N2IjpyZXR1cm4gZTEoY1IoeSxMKSxMLCJcdWZlZmYiKTtjYXNlImRpZiI6cmV0dXJuIGUxKGRSKHksTCksTCk7Y2FzZSJkYmYiOnJldHVybiB2XyhJTSh5LEwpLEwpO2Nhc2UicHJuIjpyZXR1cm4gZTEobF8oeSxMKSxMKTtjYXNl'@;
put 'InJ0ZiI6cmV0dXJuIGUxKHk1KHksTCksTCk7Y2FzZSJldGgiOnJldHVybiBlMShmUih5LEwpLEwpO2Nhc2UiZm9kcyI6cmV0dXJuIGUxKF8wKHksTCksTCk7Y2FzZSJiaWZmMiI6TC5iaWZmfHwoTC5iaWZmPTIpO2Nhc2UiYmlmZjMiOkwuYmlmZnx8KEwuYmlmZj0zKTtjYXNlImJpZmY0Ijpy'@;
put 'ZXR1cm4gTC5iaWZmfHwoTC5iaWZmPTQpLHZfKGlfKHksTCksTCk7Y2FzZSJiaWZmNSI6TC5iaWZmfHwoTC5iaWZmPTUpO2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpjYXNlInhscyI6cmV0dXJuIEwuYmlmZnx8KEwuYmlmZj04KSxmdW5jdGlvbiBCTSh5LFApe3ZhciBMPVB8fHt9O3JldHVybiBt'@;
put 'XyhmdW5jdGlvbiBDTSh5LFApe3ZhciBMPVB8fHt9LFE9amUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KSxyZT0iL1dvcmtib29rIjtzd2l0Y2goTC5ib29rVHlwZXx8InhscyIpe2Nhc2UieGxzIjpMLmJvb2tUeXBlPSJiaWZmOCI7Y2FzZSJ4bGEiOkwuYm9va1R5cGV8fChMLmJvb2tUeXBl'@;
put 'PSJ4bGEiKTtjYXNlImJpZmY4IjpyZT0iL1dvcmtib29rIixMLmJpZmY9ODticmVhaztjYXNlImJpZmY1IjpyZT0iL0Jvb2siLEwuYmlmZj01O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIitMLmJvb2tUeXBlKyIgZm9yIFhMUyBDRkIiKX1yZXR1cm4gamUu'@;
put 'dXRpbHMuY2ZiX2FkZChRLHJlLGlfKHksTCkpLDg9PUwuYmlmZiYmKHkuUHJvcHN8fHkuQ3VzdHByb3BzKSYmZnVuY3Rpb24gd00oeSxQKXt2YXIgX2UsTD1bXSxRPVtdLHJlPVtdLGdlPTA7aWYoeS5Qcm9wcylmb3IoX2U9bHQoeS5Qcm9wcyksZ2U9MDtnZTxfZS5sZW5ndGg7KytnZSkoT2Jq'@;
put 'ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI0LF9lW2dlXSk/TDpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeTQsX2VbZ2VdKT9ROnJlKS5wdXNoKFtfZVtnZV0seS5Qcm9wc1tfZVtnZV1dXSk7aWYoeS5DdXN0cHJvcHMpZm9yKF9lPWx0KHkuQ3VzdHBy'@;
put 'b3BzKSxnZT0wO2dlPF9lLmxlbmd0aDsrK2dlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LlByb3BzfHx7fSxfZVtnZV0pfHwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI0LF9lW2dlXSk/TDpPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl'@;
put 'cnR5LmNhbGwoeTQsX2VbZ2VdKT9ROnJlKS5wdXNoKFtfZVtnZV0seS5DdXN0cHJvcHNbX2VbZ2VdXV0pO3ZhciB2ZT1bXTtmb3IoZ2U9MDtnZTxyZS5sZW5ndGg7KytnZSlmbS5pbmRleE9mKHJlW2dlXVswXSk+LTF8fG51bGwhPXJlW2dlXVsxXSYmdmUucHVzaChyZVtnZV0pO1EubGVuZ3Ro'@;
put 'JiZqZS51dGlscy5jZmJfYWRkKFAsIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIix5aShRLHJwLlNJLHk0LHdyKSksKEwubGVuZ3RofHx2ZS5sZW5ndGgpJiZqZS51dGlscy5jZmJfYWRkKFAsIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iLHlpKEwscnAuRFNJLGI0LF80LHZlLmxl'@;
put 'bmd0aD92ZTpudWxsLHJwLlVESSkpfSh5LFEpLDg9PUwuYmlmZiYmeS52YmFyYXcmJmZ1bmN0aW9uIHRJKHksUCl7UC5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihMLFEpe2lmKDAhPVEpe3ZhciByZT1MLnJlcGxhY2UoL1teXC9dKltcL10vLCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIh'@;
put 'PT1yZS5zbGljZSgtMSkmJmplLnV0aWxzLmNmYl9hZGQoeSxyZSxQLkZpbGVJbmRleFtRXS5jb250ZW50KX19KX0oUSxqZS5yZWFkKHkudmJhcmF3LHt0eXBlOiJzdHJpbmciPT10eXBlb2YgeS52YmFyYXc/ImJpbmFyeSI6ImJ1ZmZlciJ9KSksUX0oeSxMKSxMKX0oeSxMKTtjYXNlInhsc3gi'@;
put 'OmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gVk0oeSxQKXt2YXIgTD1QfHx7fSxRPWJSKHksTCkscmU9e307aWYoTC5jb21wcmVzc2lvbiYmKHJlLmNvbXByZXNzaW9uPSJERUZMQVRFIiksTC5wYXNzd29yZClyZS50eXBlPWhlPyJu'@;
put 'b2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChMLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZS50eXBlPSJiYXNlNjQiO2JyZWFrO2Nhc2UiYmluYXJ5IjpyZS50eXBlPSJzdHJpbmciO2JyZWFrO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGlu'@;
put 'dmFsaWQgZm9yICciK0wuYm9va1R5cGUrIicgZmlsZXMiKTtjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpyZS50eXBlPWhlPyJub2RlYnVmZmVyIjoic3RyaW5nIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitMLnR5cGUpfXZhciBnZT1RLkZ1bGxQ'@;
put 'YXRocz9qZS53cml0ZShRLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1bcmUudHlwZV18fHJlLnR5cGV9KTpRLmdlbmVyYXRlKHJlKTtyZXR1cm4gTC5wYXNzd29yZCYmdHlwZW9mIGIwPCJ1Ij9tXyhiMChnZSxMLnBhc3N3b3JkKSxM'@;
put 'KToiZmlsZSI9PT1MLnR5cGU/WWUoTC5maWxlLGdlKToic3RyaW5nIj09TC50eXBlP1BpKGdlKTpnZX0oeSxMKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGJvb2tUeXBlIHwiK0wuYm9va1R5cGUrInwiKX19ZnVuY3Rpb24gdDEoeSl7aWYoIXkuYm9va1R5cGUpe3Zh'@;
put 'ciBMPXkuZmlsZS5zbGljZSh5LmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTtMLm1hdGNoKC9eXC5bYS16XSskLykmJih5LmJvb2tUeXBlPUwuc2xpY2UoMSkpLHkuYm9va1R5cGU9e3hsczoiYmlmZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgi'@;
put 'LFNoMzN0SlM6IldURiJ9W3kuYm9va1R5cGVdfHx5LmJvb2tUeXBlfX1mdW5jdGlvbiBTNSh5LFAsTCl7dmFyIFE9THx8e307cmV0dXJuIFEudHlwZT0iZmlsZSIsUS5maWxlPVAsdDEoUSksQzUoeSxRKX1mdW5jdGlvbiB6TSh5LFAsTCxRLHJlLGdlLF9lLHZlKXt2YXIgU2U9SHMoTCksSGU9'@;
put 'dmUuZGVmdmFsLEJlPXZlLnJhdyxHZT0hMCxudD0xPT09cmU/W106e307aWYoMSE9PXJlKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG50LCJfX3Jvd051bV9fIix7dmFsdWU6TCxlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7bnQuX19yb3dOdW1fXz1M'@;
put 'fWVsc2UgbnQuX19yb3dOdW1fXz1MO2lmKCFfZXx8eVtMXSlmb3IodmFyIGR0PVAucy5jO2R0PD1QLmUuYzsrK2R0KXt2YXIgQ3Q9X2U/eVtMXVtkdF06eVtRW2R0XStTZV07aWYodm9pZCAwIT09Q3QmJnZvaWQgMCE9PUN0LnQpe3ZhciBjdD1DdC52O3N3aXRjaChDdC50KXtjYXNlInoiOmlm'@;
put 'KG51bGw9PWN0KWJyZWFrO2NvbnRpbnVlO2Nhc2UiZSI6Y3Q9MD09Y3Q/bnVsbDp2b2lkIDA7YnJlYWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIitDdC50KX1pZihudWxsIT1nZVtkdF0p'@;
put 'e2lmKG51bGw9PWN0KWlmKCJlIj09Q3QudCYmbnVsbD09PWN0KW50W2dlW2R0XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PUhlKW50W2dlW2R0XV09SGU7ZWxzZXtpZighQmV8fG51bGwhPT1jdCljb250aW51ZTtudFtnZVtkdF1dPW51bGx9ZWxzZSBudFtnZVtkdF1dPUJlP2N0OmN1KEN0LGN0'@;
put 'LHZlKTtudWxsIT1jdCYmKEdlPSExKX19ZWxzZXtpZih2b2lkIDA9PT1IZSljb250aW51ZTtudWxsIT1nZVtkdF0mJihudFtnZVtkdF1dPUhlKX19cmV0dXJue3JvdzpudCxpc2VtcHR5OkdlfX1mdW5jdGlvbiBINih5LFApe2lmKG51bGw9PXl8fG51bGw9PXlbIiFyZWYiXSlyZXR1cm5bXTt2'@;
put 'YXIgTD17dDoibiIsdjowfSxRPTAscmU9MSxnZT1bXSxfZT0wLHZlPSIiLFNlPUpTT04ucGFyc2UoJ3sicyI6eyJyIjowLCJjIjowfSwiZSI6eyJyIjowLCJjIjowfX0nKSxIZT1QfHx7fSxCZT1udWxsIT1IZS5yYW5nZT9IZS5yYW5nZTp5WyIhcmVmIl07c3dpdGNoKDE9PT1IZS5oZWFkZXI/'@;
put 'UT0xOiJBIj09PUhlLmhlYWRlcj9RPTI6QXJyYXkuaXNBcnJheShIZS5oZWFkZXIpP1E9MzpudWxsPT1IZS5oZWFkZXImJihRPTApLHR5cGVvZiBCZSl7Y2FzZSJzdHJpbmciOlNlPU9pKEJlKTticmVhaztjYXNlIm51bWJlciI6KFNlPU9pKHlbIiFyZWYiXSkpLnMucj1CZTticmVhaztkZWZh'@;
put 'dWx0OlNlPUJlfVE+MCYmKHJlPTApO3ZhciBHZT1IcyhTZS5zLnIpLG50PVtdLGR0PVtdLEN0PTAsY3Q9MCxidD1BcnJheS5pc0FycmF5KHkpLEZ0PVNlLnMucixrdD0wLFR0PTA7Zm9yKGJ0JiYheVtGdF0mJih5W0Z0XT1bXSksa3Q9U2Uucy5jO2t0PD1TZS5lLmM7KytrdClzd2l0Y2gobnRb'@;
put 'a3RdPU5zKGt0KSxMPWJ0P3lbRnRdW2t0XTp5W250W2t0XStHZV0sUSl7Y2FzZSAxOmdlW2t0XT1rdC1TZS5zLmM7YnJlYWs7Y2FzZSAyOmdlW2t0XT1udFtrdF07YnJlYWs7Y2FzZSAzOmdlW2t0XT1IZS5oZWFkZXJba3QtU2Uucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1MJiYoTD1K'@;
put 'U09OLnBhcnNlKCd7InciOiAiX19FTVBUWSIsICJ0IjogInMifScpKSx2ZT1fZT1jdShMLG51bGwsSGUpLGN0PTAsVHQ9MDtUdDxnZS5sZW5ndGg7KytUdClnZVtUdF09PXZlJiYodmU9X2UrIl8iKyArK2N0KTtnZVtrdF09dmV9Zm9yKEZ0PVNlLnMucityZTtGdDw9U2UuZS5yOysrRnQpe3Zh'@;
put 'ciBadD16TSh5LFNlLEZ0LG50LFEsZ2UsYnQsSGUpOyghMT09PVp0LmlzZW1wdHl8fCgxPT09UT8hMSE9PUhlLmJsYW5rcm93czpIZS5ibGFua3Jvd3MpKSYmKGR0W0N0KytdPVp0LnJvdyl9cmV0dXJuIGR0Lmxlbmd0aD1DdCxkdH12YXIgJGQ9LyIvZztmdW5jdGlvbiBVTSh5LFAsTCxRLHJl'@;
put 'LGdlLF9lLHZlKXtmb3IodmFyIFNlPSEwLEhlPVtdLEJlPSIiLEdlPUhzKEwpLG50PVAucy5jO250PD1QLmUuYzsrK250KWlmKFFbbnRdKXt2YXIgZHQ9dmUuZGVuc2U/KHlbTF18fFtdKVtudF06eVtRW250XStHZV07aWYobnVsbD09ZHQpQmU9IiI7ZWxzZSBpZihudWxsIT1kdC52KXtTZT0h'@;
put 'MSxCZT0iIitjdShkdCxudWxsLHZlKTtmb3IodmFyIEN0PTAsY3Q9MDtDdCE9PUJlLmxlbmd0aDsrK0N0KWlmKChjdD1CZS5jaGFyQ29kZUF0KEN0KSk9PT1yZXx8Y3Q9PT1nZXx8MzQ9PT1jdCl7QmU9JyInK0JlLnJlcGxhY2UoJGQsJyIiJykrJyInO2JyZWFrfSJJRCI9PUJlJiYoQmU9JyJJ'@;
put 'RCInKX1lbHNlIG51bGw9PWR0LmZ8fGR0LkY/QmU9IiI6KFNlPSExLChCZT0iPSIrZHQuZikuaW5kZXhPZigiLCIpPj0wJiYoQmU9JyInK0JlLnJlcGxhY2UoJGQsJyIiJykrJyInKSk7SGUucHVzaChCZSl9cmV0dXJuITE9PT12ZS5ibGFua3Jvd3MmJlNlP251bGw6SGUuam9pbihfZSl9ZnVu'@;
put 'Y3Rpb24gamwoeSxQKXt2YXIgTD1bXSxRPVA/P3t9O2lmKG51bGw9PXl8fG51bGw9PXlbIiFyZWYiXSlyZXR1cm4iIjt2YXIgcmU9T2koeVsiIXJlZiJdKSxnZT12b2lkIDAhPT1RLkZTP1EuRlM6IiwiLF9lPWdlLmNoYXJDb2RlQXQoMCksdmU9dm9pZCAwIT09US5SUz9RLlJTOiJcbiIsU2U9'@;
put 'dmUuY2hhckNvZGVBdCgwKSxIZT1uZXcgUmVnRXhwKCgifCI9PWdlPyJcXHwiOmdlKSsiKyQiKSxCZT0iIixHZT1bXTtRLmRlbnNlPUFycmF5LmlzQXJyYXkoeSk7Zm9yKHZhciBudD1RLnNraXBIaWRkZW4mJnlbIiFjb2xzIl18fFtdLGR0PVEuc2tpcEhpZGRlbiYmeVsiIXJvd3MiXXx8W10s'@;
put 'Q3Q9cmUucy5jO0N0PD1yZS5lLmM7KytDdCkobnRbQ3RdfHx7fSkuaGlkZGVufHwoR2VbQ3RdPU5zKEN0KSk7Zm9yKHZhciBjdD1yZS5zLnI7Y3Q8PXJlLmUucjsrK2N0KShkdFtjdF18fHt9KS5oaWRkZW58fG51bGwhPShCZT1VTSh5LHJlLGN0LEdlLF9lLFNlLGdlLFEpKSYmKFEuc3RyaXAm'@;
put 'JihCZT1CZS5yZXBsYWNlKEhlLCIiKSksTC5wdXNoKEJlK3ZlKSk7cmV0dXJuIGRlbGV0ZSBRLmRlbnNlLEwuam9pbigiIil9ZnVuY3Rpb24geFIoeSxQKXtQfHwoUD17fSksUC5GUz0iXHQiLFAuUlM9IlxuIjt2YXIgTD1qbCh5LFApO2lmKHR5cGVvZiBjcHRhYmxlPiJ1Inx8InN0cmluZyI9'@;
put 'PVAudHlwZSlyZXR1cm4gTDt2YXIgUT1jcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEwsInN0ciIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZSgyNTQpK1F9ZnVuY3Rpb24gTjYoeSl7dmFyIEwsUD0iIixRPSIiO2lmKG51bGw9PXl8fG51bGw9'@;
put 'PXlbIiFyZWYiXSlyZXR1cm5bXTt2YXIgdmUscmU9T2koeVsiIXJlZiJdKSxnZT0iIixfZT1bXSxTZT1bXSxIZT1BcnJheS5pc0FycmF5KHkpO2Zvcih2ZT1yZS5zLmM7dmU8PXJlLmUuYzsrK3ZlKV9lW3ZlXT1Ocyh2ZSk7Zm9yKHZhciBCZT1yZS5zLnI7QmU8PXJlLmUucjsrK0JlKWZvcihn'@;
put 'ZT1IcyhCZSksdmU9cmUucy5jO3ZlPD1yZS5lLmM7Kyt2ZSlpZihQPV9lW3ZlXStnZSxRPSIiLHZvaWQgMCE9PShMPUhlPyh5W0JlXXx8W10pW3ZlXTp5W1BdKSl7aWYobnVsbCE9TC5GKXtpZihQPUwuRiwhTC5mKWNvbnRpbnVlO1E9TC5mLC0xPT1QLmluZGV4T2YoIjoiKSYmKFA9UCsiOiIr'@;
put 'UCl9aWYobnVsbCE9TC5mKVE9TC5mO2Vsc2V7aWYoInoiPT1MLnQpY29udGludWU7aWYoIm4iPT1MLnQmJm51bGwhPUwudilRPSIiK0wudjtlbHNlIGlmKCJiIj09TC50KVE9TC52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAwIT09TC53KVE9IiciK0wudztlbHNle2lmKHZvaWQgMD09'@;
put 'PUwudiljb250aW51ZTtRPSJzIj09TC50PyInIitMLnY6IiIrTC52fX1TZVtTZS5sZW5ndGhdPVArIj0iK1F9cmV0dXJuIFNlfWZ1bmN0aW9uIF9fKHksUCxMKXt2YXIgUT1MfHx7fSxyZT0rIVEuc2tpcEhlYWRlcixnZT15fHx7fSxfZT0wLHZlPTA7aWYoZ2UmJm51bGwhPVEub3JpZ2luKWlm'@;
put 'KCJudW1iZXIiPT10eXBlb2YgUS5vcmlnaW4pX2U9US5vcmlnaW47ZWxzZXt2YXIgU2U9InN0cmluZyI9PXR5cGVvZiBRLm9yaWdpbj9zcyhRLm9yaWdpbik6US5vcmlnaW47X2U9U2Uucix2ZT1TZS5jfXZhciBIZSxCZT1KU09OLnBhcnNlKCd7InMiOiB7ImMiOjAsICJyIjowfSwgImUiOiB7'@;
put 'ImMiOjAsICJyIjowfX0nKTtpZihCZS5lLmM9dmUsQmUuZS5yPV9lK1AubGVuZ3RoLTErcmUsZ2VbIiFyZWYiXSl7dmFyIEdlPU9pKGdlWyIhcmVmIl0pO0JlLmUuYz1NYXRoLm1heChCZS5lLmMsR2UuZS5jKSxCZS5lLnI9TWF0aC5tYXgoQmUuZS5yLEdlLmUuciksLTE9PV9lJiYoQmUuZS5y'@;
put 'PShfZT1HZS5lLnIrMSkrUC5sZW5ndGgtMStyZSl9ZWxzZS0xPT1fZSYmKF9lPTAsQmUuZS5yPVAubGVuZ3RoLTErcmUpO3ZhciBudD1RLmhlYWRlcnx8W10sZHQ9MDtQLmZvckVhY2goZnVuY3Rpb24oY3QsYnQpe2x0KGN0KS5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXstMT09KGR0PW50LmluZGV4'@;
put 'T2YoRnQpKSYmKG50W2R0PW50Lmxlbmd0aF09RnQpO3ZhciBrdD1jdFtGdF0sVHQ9InoiLFp0PSIiLHBuPWRpKHtjOnZlK2R0LHI6X2UrYnQrcmV9KTtpZihIZT1xby5zaGVldF9nZXRfY2VsbChnZSxwbiksIWt0fHwib2JqZWN0IiE9dHlwZW9mIGt0fHxrdCBpbnN0YW5jZW9mIERhdGUpe2lm'@;
put 'KCJudW1iZXIiPT10eXBlb2Yga3Q/VHQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGt0P1R0PSJiIjoic3RyaW5nIj09dHlwZW9mIGt0P1R0PSJzIjprdCBpbnN0YW5jZW9mIERhdGU/KFR0PSJkIixRLmNlbGxEYXRlc3x8KFR0PSJuIixrdD1VZShrdCkpLFp0PUhlLnomJncuaXNfZGF0ZShIZS56'@;
put 'KT9IZS56OlEuZGF0ZU5GfHx3Ll90YWJsZVsxNF0pOm51bGw9PT1rdCYmUS5udWxsRXJyb3ImJihUdD0iZSIsa3Q9MCksSGU/KEhlLnQ9VHQsSGUudj1rdCxkZWxldGUgSGUudyxkZWxldGUgSGUuUixadCYmKEhlLno9WnQpKTpnZVtwbl09SGU9e3Q6VHQsdjprdH0sWnQmJihIZS56PVp0KSxI'@;
put 'ZSYmSGUuaCl0cnl7aWYoSGUuUj1GdS5odG1sX3RvX3JzKEhlLmgpLCFIZS52KXtIZS52PSIiO2Zvcih2YXIgS249MDtLbjxIZS5SLmxlbmd0aDsrK0tuKUhlLnYrPUhlLlJbS25dLnZ8fCIifX1jYXRjaHt9fWVsc2UgZ2VbcG5dPWt0fSl9KSxCZS5lLmM9TWF0aC5tYXgoQmUuZS5jLHZlK250'@;
put 'Lmxlbmd0aC0xKTt2YXIgQ3Q9SHMoX2UpO2lmKHJlKWZvcihkdD0wO2R0PG50Lmxlbmd0aDsrK2R0KWdlW05zKGR0K3ZlKStDdF09e3Q6InMiLHY6bnRbZHRdfTtyZXR1cm4gZ2VbIiFyZWYiXT1PbyhCZSksZ2V9dmFyIHFvPXtlbmNvZGVfY29sOk5zLGVuY29kZV9yb3c6SHMsZW5jb2RlX2Nl'@;
put 'bGw6ZGksZW5jb2RlX3JhbmdlOk9vLGRlY29kZV9jb2w6amgsZGVjb2RlX3JvdzpCMCxzcGxpdF9jZWxsOmZ1bmN0aW9uIGg0KHkpe3JldHVybiB5LnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOnNzLGRlY29kZV9yYW5nZTpX'@;
put 'cyxmb3JtYXRfY2VsbDpjdSxnZXRfZm9ybXVsYWU6TjYsbWFrZV9jc3Y6amwsbWFrZV9qc29uOkg2LG1ha2VfZm9ybXVsYWU6TjYsaHRtbF90b19yczpGdS5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6czAsc2hlZXRfYWRkX2pzb246X18sc2hlZXRfYWRkX2RvbTpBTSxhb2FfdG9fc2hlZXQ6'@;
put 'azEsanNvbl90b19zaGVldDpmdW5jdGlvbiBmWSh5LFApe3JldHVybiBfXyhudWxsLHksUCl9LHRhYmxlX3RvX3NoZWV0Okh1LHRhYmxlX3RvX2Jvb2s6ZnVuY3Rpb24gZHIoeSxQKXtyZXR1cm4gRWQoSHUoeSxQKSxQKX0sc2hlZXRfdG9fY3N2OmpsLHNoZWV0X3RvX3R4dDp4UixzaGVldF90'@;
put 'b19qc29uOkg2LHNoZWV0X3RvX2h0bWw6RnUuZnJvbV9zaGVldCxzaGVldF90b19mb3JtdWxhZTpONixzaGVldF90b19yb3dfb2JqZWN0X2FycmF5Okg2fTtmdW5jdGlvbiBaTSh5LFAsTCxRLHJlKXt2YXIgZ2U7aWYoeS5zdHlsZSYmISh5Ll9yYW5nZSYmKGdlPSJzdHJpbmciPT10eXBlb2Yg'@;
put 'eS5fcmFuZ2U/TS51dGlscy5kZWNvZGVfcmFuZ2UoeS5fcmFuZ2UpOnkuX3JhbmdlLEwuYz5nZS5lLmN8fEwuYzxnZS5zLmN8fEwucj5nZS5lLnJ8fEwucjxnZS5zLnIpKSYmZ2Upe3ZhciBfZT15LnN0eWxlLnN0eWxlO2lmKF9lKXtfZS53aG9sZVRhYmxlJiZxby5hcHBseV9zdHlsZV9kZWx0'@;
put 'YShRLF9lLndob2xlVGFibGUpO2U6aWYoX2UuaGVhZGVyUm93KWlmKHJlKXtpZihMLnIhPWdlLnMucilicmVhayBlO2huKHkuc3R5bGUuY29saGVhZCl8fHFvLmFwcGx5X3N0eWxlX2RlbHRhKFEsX2UuaGVhZGVyUm93KX1lbHNle2lmKEwuciE9Z2Uucy5yKWJyZWFrIGU7aG4oeS5oZWFkZXIp'@;
put 'fHxxby5hcHBseV9zdHlsZV9kZWx0YShRLF9lLmhlYWRlclJvdyl9fX19cW8udGVzdF9wYXNzd29yZD1mdW5jdGlvbiBMTSh5LFApe3ZhciBMPUJ1ZmZlci5mcm9tKHkuc2FsdCwiYmFzZTY0IiksUT15LmFsZ28scmU9ZWwoQnVmZmVyLmNvbmNhdChbTCxCdWZmZXIuZnJvbShjcHRhYmxlLnV0'@;
put 'aWxzLmVuY29kZSgxMjAwLFApKV0pLFEpLGdlPUJ1ZmZlci5hbGxvYyg0KTtvbChnZSwwKTtmb3IodmFyIF9lPTA7X2U8eS5zcGluOysrX2UpZ2UubD0wLGdlLndyaXRlX3NoaWZ0KDQsX2UpLHJlPWVsKEJ1ZmZlci5jb25jYXQoW3JlLGdlXSksUSk7dmFyIHZlPUJ1ZmZlci5mcm9tKHkuaGFz'@;
put 'aCwiYmFzZTY0Iik7cmV0dXJuIDA9PXJlLmNvbXBhcmUodmUpfSxxby5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIHVfKHkpe3ZhciBQPXthbGdvOiJTSEEtNTEyIixzYWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4emVBPT0iLHNwaW46MWUzfSxMPUJ1ZmZlci5mcm9tKFAuc2FsdCwiYmFzZTY0Iiks'@;
put 'UT1QLmFsZ28scmU9ZWwoQnVmZmVyLmNvbmNhdChbTCxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLHkpKV0pLFEpLGdlPUJ1ZmZlci5hbGxvYyg0KTtvbChnZSwwKTtmb3IodmFyIF9lPTA7X2U8UC5zcGluOysrX2UpZ2UubD0wLGdlLndyaXRlX3NoaWZ0KDQsX2UpLHJl'@;
put 'PWVsKEJ1ZmZlci5jb25jYXQoW3JlLGdlXSksUSk7cmV0dXJuIFAuaGFzaD1yZS50b1N0cmluZygiYmFzZTY0IiksUH0scW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxlPWZ1bmN0aW9uKHksUCxMKXtpZihMKXt2YXIgUT0ic3RyaW5nIj09dHlwZW9mIFA/T2koUCk6UDtudWxsIT1RLnImJm51bGwh'@;
put 'PVEuYyYmKFE9e3M6USxlOlF9KTt2YXIgdmUscmU9US5zLnIsZ2U9MCxfZT0iIixTZT1Xcyh5WyIhcmVmIl18fCJBMSIpO1NlLnMucj5RLnMuciYmKFNlLnMucj1RLnMuciksU2Uucy5jPlEucy5jJiYoU2Uucy5jPVEucy5jKSxTZS5lLnI8US5lLnImJihTZS5lLnI9US5lLnIpLFNlLmUuYzxR'@;
put 'LmUuYyYmKFNlLmUuYz1RLmUuYykseVsiIXJlZiJdPU9vKFNlKTtmb3IodmFyIEJlPUFycmF5LmlzQXJyYXkoeSk7cmU8PVEuZS5yOysrcmUpZm9yKGdlPVEucy5jO2dlPD1RLmUuYzsrK2dlKUJlPyh5W3JlXXx8KHlbcmVdPVtdKSx5W3JlXVtnZV18fCh5W3JlXVtnZV09e3Q6InoifSksdmU9'@;
put 'eVtyZV1bZ2VdKTooeVtfZT1kaSh7cjpyZSxjOmdlfSldfHwoeVtfZV09e3Q6InoifSksdmU9eVtfZV0pLHZlLnN8fCh2ZS5zPXt9KSxPYmplY3Qua2V5cyhMKS5mb3JFYWNoKEhlKSx2ZS5zLnBhdHRlcm5UeXBlJiYhdmUucy5mZ0NvbG9yJiYoZGVsZXRlIHZlLnMucGF0dGVyblR5cGUsZGVs'@;
put 'ZXRlIHZlLnMuYmdDb2xvciksKHZlLnMuZmdDb2xvcnx8dmUucy5iZ0NvbG9yKSYmIm5vbmUiPT0odmUucy5wYXR0ZXJuVHlwZXx8Im5vbmUiKSYmKHZlLnMucGF0dGVyblR5cGU9InNvbGlkIik7aWYocmU9US5zLnIsTC50b3B8fG51bGw9PT1MLnRvcClmb3IoZ2U9US5zLmM7Z2U8PVEuZS5j'@;
put 'OysrZ2Upe2lmKEJlKXtpZigheVtyZV0pY29udGludWU7dmU9eVtyZV1bZ2VdfWVsc2UgX2U9ZGkoe3I6cmUsYzpnZX0pLHZlPXlbX2VdO3ZlJiYobnVsbD09PUwudG9wP2RlbGV0ZSB2ZS5zLnRvcDp2ZS5zLnRvcD1vbihMLnRvcCkpfWlmKHJlPVEuZS5yLEwuYm90dG9tfHxudWxsPT09TC5i'@;
put 'b3R0b20pZm9yKGdlPVEucy5jO2dlPD1RLmUuYzsrK2dlKXtpZihCZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW2dlXX1lbHNlIF9lPWRpKHtyOnJlLGM6Z2V9KSx2ZT15W19lXTt2ZSYmKG51bGw9PT1MLmJvdHRvbT9kZWxldGUgdmUucy5ib3R0b206dmUucy5ib3R0b209b24oTC5i'@;
put 'b3R0b20pKX1pZihnZT1RLnMuYyxMLmxlZnR8fG51bGw9PT1MLmxlZnQpZm9yKHJlPVEucy5yO3JlPD1RLmUucjsrK3JlKXtpZihCZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW2dlXX1lbHNlIF9lPWRpKHtyOnJlLGM6Z2V9KSx2ZT15W19lXTt2ZSYmKG51bGw9PT1MLmxlZnQ/ZGVs'@;
put 'ZXRlIHZlLnMubGVmdDp2ZS5zLmxlZnQ9b24oTC5sZWZ0KSl9aWYoZ2U9US5lLmMsTC5yaWdodHx8bnVsbD09PUwucmlnaHQpZm9yKHJlPVEucy5yO3JlPD1RLmUucjsrK3JlKXtpZihCZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW2dlXX1lbHNlIF9lPWRpKHtyOnJlLGM6Z2V9KSx2'@;
put 'ZT15W19lXTt2ZSYmKG51bGw9PT1MLnJpZ2h0P2RlbGV0ZSB2ZS5zLnJpZ2h0OnZlLnMucmlnaHQ9b24oTC5yaWdodCkpfX1mdW5jdGlvbiBIZShHZSl7aWYoInRvcCIhPUdlJiYiYm90dG9tIiE9R2UmJiJsZWZ0IiE9R2UmJiJyaWdodCIhPUdlKXtpZigieiI9PUdlKXJldHVybiB2b2lkKHZl'@;
put 'Lno9TC56KTtpZigiYWxpZ25tZW50Ij09R2UpcmV0dXJuIHZvaWQodmUuc1tHZV0/T2JqZWN0LmtleXMoTFtHZV0pLmZvckVhY2goZnVuY3Rpb24obnQpe3ZlLnNbR2VdW250XT1MW0dlXVtudF19KTp2ZS5zW0dlXT1vbihMW0dlXSkpO2lmKCJpbmNvbCI9PUdlKXJldHVybiBnZT5RLnMuYyYm'@;
put 'KG51bGw9PT1MLmxlZnQ/ZGVsZXRlIHZlLnMubGVmdDp2ZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV0pLHZvaWQoZ2U8US5lLmMmJihudWxsPT09TC5yaWdodD9kZWxldGUgdmUucy5yaWdodDp2ZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2YgTFtHZV0/'@;
put 'b24oTFtHZV0pOkxbR2VdKSk7aWYoImlucm93Ij09R2UpcmV0dXJuIHJlPlEucy5yJiYobnVsbD09PUwudG9wP2RlbGV0ZSB2ZS5zLnRvcDp2ZS5zLnRvcD0ib2JqZWN0Ij09dHlwZW9mIExbR2VdP29uKExbR2VdKTpMW0dlXSksdm9pZChyZTxRLmUuciYmKG51bGw9PT1MLmJvdHRvbT9kZWxl'@;
put 'dGUgdmUucy5ib3R0b206dmUucy5ib3R0b209Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV0pKTtudWxsPT09TFtHZV0/ZGVsZXRlIHZlLnNbR2VdOnZlLnNbR2VdPUxbR2VdJiZBcnJheS5pc0FycmF5KExbR2VdKT9MW0dlXS5zbGljZSgpLm1hcChmdW5jdGlvbihudCl7'@;
put 'cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBudD9vbihudCk6bnR9KToib2JqZWN0Ij09dHlwZW9mIExbR2VdP29uKExbR2VdKTpMW0dlXX19fSxxby5hcHBseV9zdHlsZV9kZWx0YT1mdW5jdGlvbih5LFApe1sic3oiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtlIiwibmFtZSIs'@;
put 'InZhbGlnbiJdLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9TDsiYmdDb2xvciI9PUw/UT0iZmdDb2xvciI6ImZnQ29sb3IiPT1MJiYoUT0iYmdDb2xvciIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEwpJiYobnVsbD09PVBbTF0/ZGVsZXRlIHlbUV06bnVsbCE9'@;
put 'UFtMXSYmKHlbUV09UFtMXSkpfSksWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJhbGlnbm1lbnQiLCJwcm90ZWN0aW9uIiwiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmZvckVhY2goZnVuY3Rpb24oTCl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAs'@;
put 'TCkmJihudWxsPT09UFtMXT9kZWxldGUgeVtMXTpudWxsIT1QW0xdJiYoeVtMXT1vbihQW0xdKSkpfSl9LHFvLmdldF9jb21wdXRlZF9zdHlsZT1mdW5jdGlvbih5LFApeyJzdHJpbmciPT10eXBlb2YgUCYmKFA9TS51dGlscy5kZWNvZGVfY2VsbChQKSk7dmFyIEw9QXJyYXkuaXNBcnJheSh5'@;
put 'KT8oeVtQLnJdfHxbXSlbUC5jXTp5W00udXRpbHMuZW5jb2RlX2NlbGwoUCldLFE9b24oTCYmTC5zfHx7fSk7cmV0dXJuIHlbIiF0YWJsZXMiXSYmeVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24ocmUpe1pNKHJlLDAsUCxRKX0pLHlbIiFwaXZvdHMiXSYmeVsiIXBpdm90cyJdLmZvckVh'@;
put 'Y2goZnVuY3Rpb24ocmUpe1pNKHJlLDAsUCxRLCEwKX0pLFF9O3ZhciBZTT17fTtxby5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24oeSxQKXt2YXIgTD1QPz97fSxRPXZvaWQgMCE9PUwuRlM/TC5GUzoiLCIscmU9US5jaGFyQ29kZUF0KDApLGdlPXZvaWQgMCE9PUwuUlM/TC5SUzoi'@;
put 'XG4iLF9lPWdlLmNoYXJDb2RlQXQoMCksdmU9WU1bUV18fChZTVtRXT1uZXcgUmVnRXhwKCgifCI9PVE/IlxcfCI6USkrIiskIikpLFNlPWZ1bmN0aW9uIGlwKHksUCxMLFEscmUpe2Zvcih2YXIgZ2U9ITAsX2U9W10sdmU9IiIsU2U9MDtTZTw9eS5sZW5ndGgtMTsrK1NlKXt2YXIgSGU9eVtT'@;
put 'ZV07aWYobnVsbD09SGUpdmU9IiI7ZWxzZSBpZihudWxsIT1IZS52KXtnZT0hMSx2ZT0iIitjdShIZSxudWxsLHJlKTtmb3IodmFyIEJlPTAsR2U9MDtCZSE9PXZlLmxlbmd0aDsrK0JlKWlmKChHZT12ZS5jaGFyQ29kZUF0KEJlKSk9PT1QfHxHZT09PUx8fDM0PT09R2Upe3ZlPSciJyt2ZS5y'@;
put 'ZXBsYWNlKCRkLCciIicpKyciJzticmVha30iSUQiPT12ZSYmKHZlPSciSUQiJyl9ZWxzZSBudWxsPT1IZS5mfHxIZS5GP3ZlPSIiOihnZT0hMSwodmU9Ij0iK0hlLmYpLmluZGV4T2YoIiwiKT49MCYmKHZlPSciJyt2ZS5yZXBsYWNlKCRkLCciIicpKyciJykpO19lLnB1c2godmUpfXJldHVy'@;
put 'biExPT09cmUuYmxhbmtyb3dzJiZnZT9udWxsOl9lLmpvaW4oUSl9KHkscmUsX2UsUSxMKTtyZXR1cm4gTC5zdHJpcCYmKFNlPVNlLnJlcGxhY2UodmUsIiIpKSxTZStnZX0sZnVuY3Rpb24oeSl7ZnVuY3Rpb24gTChnZSxfZSx2ZSl7cmV0dXJuIG51bGwhPWdlW19lXT9nZVtfZV06Z2VbX2Vd'@;
put 'PXZlfWZ1bmN0aW9uIFEoZ2UsX2UsdmUpe2lmKCJzdHJpbmciPT10eXBlb2YgX2Upe2lmKEFycmF5LmlzQXJyYXkoZ2UpKXt2YXIgU2U9c3MoX2UpO3JldHVybiBnZVtTZS5yXXx8KGdlW1NlLnJdPVtdKSxnZVtTZS5yXVtTZS5jXXx8KGdlW1NlLnJdW1NlLmNdPXt0OiJ6In0pfXJldHVybiBn'@;
put 'ZVtfZV18fChnZVtfZV09e3Q6InoifSl9cmV0dXJuIFEoZ2UsZGkoIm51bWJlciIhPXR5cGVvZiBfZT9fZTp7cjpfZSxjOnZlfHwwfSkpfXkuY29uc3RzPXkuY29uc3RzfHx7fSx5LnNoZWV0X2dldF9jZWxsPVEseS5ib29rX25ldz1mdW5jdGlvbigpe3JldHVybntTaGVldE5hbWVzOltdLFNo'@;
put 'ZWV0czp7fX19LHkuYm9va19hcHBlbmRfc2hlZXQ9ZnVuY3Rpb24oZ2UsX2UsdmUpe2lmKCF2ZSlmb3IodmFyIFNlPTE7U2U8PTY1NTM1JiYtMSE9Z2UuU2hlZXROYW1lcy5pbmRleE9mKHZlPSJTaGVldCIrU2UpOysrU2UpO2lmKFp2KHZlKSxnZS5TaGVldE5hbWVzLmluZGV4T2YodmUpPj0w'@;
put 'KXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8Iit2ZSsifCBhbHJlYWR5IGV4aXN0cyEiKTtnZS5TaGVldE5hbWVzLnB1c2godmUpLGdlLlNoZWV0c1t2ZV09X2V9LHkuYm9va19zZXRfc2hlZXRfdmlzaWJpbGl0eT1mdW5jdGlvbihnZSxfZSx2ZSl7TChnZSwiV29ya2Jv'@;
put 'b2siLHt9KSxMKGdlLldvcmtib29rLCJTaGVldHMiLFtdKTt2YXIgU2U9ZnVuY3Rpb24gcmUoZ2UsX2Upe2lmKCJudW1iZXIiPT10eXBlb2YgX2Upe2lmKF9lPj0wJiZnZS5TaGVldE5hbWVzLmxlbmd0aD5fZSlyZXR1cm4gX2U7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAj'@;
put 'ICIrX2UpfWlmKCJzdHJpbmciPT10eXBlb2YgX2Upe3ZhciB2ZT1nZS5TaGVldE5hbWVzLmluZGV4T2YoX2UpO2lmKHZlPi0xKXJldHVybiB2ZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIrX2UrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNo'@;
put 'ZWV0IHwiK19lKyJ8Iil9KGdlLF9lKTtzd2l0Y2goTChnZS5Xb3JrYm9vay5TaGVldHMsU2Use30pLHZlKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3ZlKX1nZS5Xb3JrYm9vay5TaGVl'@;
put 'dHNbU2VdLkhpZGRlbj12ZX0sZnVuY3Rpb24gUChnZSl7Z2UuZm9yRWFjaChmdW5jdGlvbihfZSl7eS5jb25zdHNbX2VbMF1dPV9lWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLHkuY2VsbF9zZXRfbnVtYmVy'@;
put 'X2Zvcm1hdD1mdW5jdGlvbihnZSxfZSl7cmV0dXJuIGdlLno9X2UsZ2V9LHkuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9uKGdlLF9lLHZlKXtyZXR1cm4gX2U/KGdlLmw9e1RhcmdldDpfZX0sdmUmJihnZS5sLlRvb2x0aXA9dmUpLGdlLnN8fChnZS5zPXt9KSxnZS5zLmNvbG9yPXt0aGVt'@;
put 'ZToxMH0pOihkZWxldGUgZ2UubCxnZS5zJiZnZS5zLmNvbG9yJiYxMD09Z2Uucy5jb2xvci50aGVtZSYmZGVsZXRlIGdlLnMuY29sb3IpLGdlfSx5LmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24oZ2UsX2UsdmUpe3JldHVybiB5LmNlbGxfc2V0X2h5cGVybGluayhnZSwiIyIrX2Us'@;
put 'dmUpfSx5LmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rpb24oZ2UsX2UsdmUpe2dlLmN8fChnZS5jPVtdKSxnZS5jLnB1c2goe3Q6X2UsYTp2ZXx8IlNoZWV0SlMifSl9LHkuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24oZ2UsX2UsdmUpe2Zvcih2YXIgU2U9InN0cmluZyIhPXR5cGVv'@;
put 'ZiBfZT9fZTpPaShfZSksSGU9InN0cmluZyI9PXR5cGVvZiBfZT9fZTpPbyhfZSksQmU9U2Uucy5yO0JlPD1TZS5lLnI7KytCZSlmb3IodmFyIEdlPVNlLnMuYztHZTw9U2UuZS5jOysrR2Upe3ZhciBudD1RKGdlLEJlLEdlKTtudC50PSJuIixudC5GPUhlLGRlbGV0ZSBudC52LEJlPT1TZS5z'@;
put 'LnImJkdlPT1TZS5zLmMmJihudC5mPXZlKX1yZXR1cm4gZ2V9fShxbyksaGUmJmZ1bmN0aW9uKCl7dmFyIHk9Rig1MTc5MykuUmVhZGFibGU7TS5zdHJlYW09e3RvX2pzb246ZnVuY3Rpb24ocmUsZ2Upe3ZhciBfZT15KHtvYmplY3RNb2RlOiEwfSk7aWYobnVsbD09cmV8fG51bGw9PXJlWyIh'@;
put 'cmVmIl0pcmV0dXJuIF9lLnB1c2gobnVsbCksX2U7dmFyIHZlPXt0OiJuIix2OjB9LFNlPTAsSGU9MSxCZT1bXSxHZT0wLG50PSIiLGR0PXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sQ3Q9Z2V8fHt9LGN0PW51bGwhPUN0LnJhbmdlP0N0LnJhbmdlOnJlWyIhcmVmIl07c3dpdGNoKDE9PT1D'@;
put 'dC5oZWFkZXI/U2U9MToiQSI9PT1DdC5oZWFkZXI/U2U9MjpBcnJheS5pc0FycmF5KEN0LmhlYWRlcikmJihTZT0zKSx0eXBlb2YgY3Qpe2Nhc2Uic3RyaW5nIjpkdD1PaShjdCk7YnJlYWs7Y2FzZSJudW1iZXIiOihkdD1PaShyZVsiIXJlZiJdKSkucy5yPWN0O2JyZWFrO2RlZmF1bHQ6ZHQ9'@;
put 'Y3R9U2U+MCYmKEhlPTApO3ZhciBidD1IcyhkdC5zLnIpLEZ0PVtdLGt0PTAsVHQ9QXJyYXkuaXNBcnJheShyZSksWnQ9ZHQucy5yLHBuPTAsS249MDtmb3IoVHQmJiFyZVtadF0mJihyZVtadF09W10pLHBuPWR0LnMuYztwbjw9ZHQuZS5jOysrcG4pc3dpdGNoKEZ0W3BuXT1OcyhwbiksdmU9'@;
put 'VHQ/cmVbWnRdW3BuXTpyZVtGdFtwbl0rYnRdLFNlKXtjYXNlIDE6QmVbcG5dPXBuLWR0LnMuYzticmVhaztjYXNlIDI6QmVbcG5dPUZ0W3BuXTticmVhaztjYXNlIDM6QmVbcG5dPUN0LmhlYWRlcltwbi1kdC5zLmNdO2JyZWFrO2RlZmF1bHQ6Zm9yKG51bGw9PXZlJiYodmU9e3c6Il9fRU1Q'@;
put 'VFkiLHQ6InMifSksbnQ9R2U9Y3UodmUsbnVsbCxDdCksa3Q9MCxLbj0wO0tuPEJlLmxlbmd0aDsrK0tuKUJlW0tuXT09bnQmJihudD1HZSsiXyIrICsra3QpO0JlW3BuXT1udH1yZXR1cm4gWnQ9ZHQucy5yK0hlLF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoWnQ+ZHQuZS5yKXJldHVybiBfZS5w'@;
put 'dXNoKG51bGwpO2Zvcig7WnQ8PWR0LmUucjspe3ZhciB1bj16TShyZSxkdCxadCxGdCxTZSxCZSxUdCxDdCk7aWYoKytadCwhMT09PXVuLmlzZW1wdHl8fCgxPT09U2U/ITEhPT1DdC5ibGFua3Jvd3M6Q3QuYmxhbmtyb3dzKSl7X2UucHVzaCh1bi5yb3cpO2JyZWFrfX19LF9lfSx0b19odG1s'@;
put 'OmZ1bmN0aW9uKHJlLGdlKXt2YXIgX2U9eSgpLHZlPWdlfHx7fSxIZT1udWxsIT12ZS5mb290ZXI/dmUuZm9vdGVyOkZ1LkVORDtfZS5wdXNoKG51bGwhPXZlLmhlYWRlcj92ZS5oZWFkZXI6RnUuQkVHSU4pO3ZhciBCZT1XcyhyZVsiIXJlZiJdKTt2ZS5kZW5zZT1BcnJheS5pc0FycmF5KHJl'@;
put 'KSxfZS5wdXNoKEZ1Ll9wcmVhbWJsZShyZSxCZSx2ZSkpO3ZhciBHZT1CZS5zLnIsbnQ9ITEsZHQ9W107cmV0dXJuIF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoR2U+QmUuZS5yKXJldHVybiBudHx8KG50PSEwLF9lLnB1c2goIjwvdGFibGU+IitIZSkpLF9lLnB1c2gobnVsbCk7Zm9yKDtHZTw9'@;
put 'QmUuZS5yOyl7X2UucHVzaChGdS5fcm93KHJlLEJlLEdlLHZlLGR0LCIiKSksKytHZTticmVha319LF9lfSx0b19jc3Y6ZnVuY3Rpb24ocmUsZ2Upe3ZhciBfZT15KCksdmU9Z2U/P3t9O2lmKG51bGw9PXJlfHxudWxsPT1yZVsiIXJlZiJdKXJldHVybiBfZS5wdXNoKG51bGwpLF9lO3ZhciBT'@;
put 'ZT1PaShyZVsiIXJlZiJdKSxIZT12b2lkIDAhPT12ZS5GUz92ZS5GUzoiLCIsQmU9SGUuY2hhckNvZGVBdCgwKSxHZT12b2lkIDAhPT12ZS5SUz92ZS5SUzoiXG4iLG50PUdlLmNoYXJDb2RlQXQoMCksZHQ9bmV3IFJlZ0V4cCgoInwiPT1IZT8iXFx8IjpIZSkrIiskIiksQ3Q9IiIsY3Q9W107'@;
put 'dmUuZGVuc2U9QXJyYXkuaXNBcnJheShyZSk7Zm9yKHZhciBidD12ZS5za2lwSGlkZGVuJiZyZVsiIWNvbHMiXXx8W10sRnQ9dmUuc2tpcEhpZGRlbiYmcmVbIiFyb3dzIl18fFtdLGt0PVNlLnMuYztrdDw9U2UuZS5jOysra3QpKGJ0W2t0XXx8e30pLmhpZGRlbnx8KGN0W2t0XT1OcyhrdCkp'@;
put 'O3ZhciBUdD1TZS5zLnIsWnQ9ITE7cmV0dXJuIF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoIVp0KXJldHVybiBadD0hMCxfZS5wdXNoKCJcdWZlZmYiKTtmb3IoO1R0PD1TZS5lLnI7KWlmKCsrVHQsIShGdFtUdC0xXXx8e30pLmhpZGRlbiYmbnVsbCE9KEN0PVVNKHJlLFNlLFR0LTEsY3QsQmUs'@;
put 'bnQsSGUsdmUpKSl7dmUuc3RyaXAmJihDdD1DdC5yZXBsYWNlKGR0LCIiKSksX2UucHVzaChDdCtHZSk7YnJlYWt9cmV0dXJuIFR0PlNlLmUucj9fZS5wdXNoKG51bGwpOnZvaWQgMH0sX2V9fX0oKSxNLnBhcnNlX3hsc2NmYj1fNSxNLnBhcnNlX3ppcD1ITSxNLnJlYWQ9X2YsTS5yZWFkRmls'@;
put 'ZT1nXyxNLnJlYWRGaWxlU3luYz1nXyxNLndyaXRlPUM1LE0ud3JpdGVGaWxlPVM1LE0ud3JpdGVGaWxlU3luYz1TNSxNLndyaXRlRmlsZUFzeW5jPWZ1bmN0aW9uIGJmKHksUCxMLFEpe3ZhciByZT1MfHx7fTtyZS50eXBlPSJmaWxlIixyZS5maWxlPXksdDEocmUpLHJlLnR5cGU9ImJ1ZmZl'@;
put 'ciI7dmFyIGdlPVE7cmV0dXJuIGdlIGluc3RhbmNlb2YgRnVuY3Rpb258fChnZT1MKSxXZS53cml0ZUZpbGUoeSxDNShQLHJlKSxnZSl9LE0uc2V0X2RhdGVfc3R5bGU9ZnVuY3Rpb24gemUoeSl7c3dpdGNoKHkpe2Nhc2UgMDpNZSgpO2JyZWFrO2Nhc2UgMTohZnVuY3Rpb24gRGUoKXt2YXIg'@;
put 'eT1uZXcgRGF0ZTtYZT1xZS5nZXRUaW1lKCkrNmU0Kih5LmdldFRpbWV6b25lT2Zmc2V0KCktcWUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7dmFyIFA9eS5nZXRUaW1lem9uZU9mZnNldCgpO1VlPWZ1bmN0aW9uKFEscmUpe3ZhciBnZT1RLmdldFRpbWUoKTtyZXR1cm4gcmUmJihnZS09MTI2MzE2'@;
put 'OGU1KSwoZ2UtKHFlLmdldFRpbWUoKSs2ZTQqKFEuZ2V0VGltZXpvbmVPZmZzZXQoKS1xZS5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fSxodD1mdW5jdGlvbihRKXt2YXIgcmU9bmV3IERhdGU7cmV0dXJuIHJlLnNldFRpbWUoMjQqUSo2MCo2MCoxZTMrWGUpLHJlLmdldFRpbWV6b25l'@;
put 'T2Zmc2V0KCkhPT1QJiZyZS5zZXRUaW1lKHJlLmdldFRpbWUoKSs2ZTQqKHJlLmdldFRpbWV6b25lT2Zmc2V0KCktUCkpLHJlfX0oKX19LE0udXRpbHM9cW8sTS5TU0Y9dyx0eXBlb2YgamU8InUiJiYoTS5DRkI9amUpfShJZSl9LDI3NDE0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25z'@;
put 'dCBhZT1JZTthZS5iaWdudW09Rig1MDQ3KSxhZS5kZWZpbmU9Rig5MDMwMikuZGVmaW5lLGFlLmJhc2U9Rig0MDUxMCksYWUuY29uc3RhbnRzPUYoNDQxNTUpLGFlLmRlY29kZXJzPUYoNzEzMDEpLGFlLmVuY29kZXJzPUYoMjM2OTMpfSw5MDMwMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7'@;
put 'Y29uc3QgYWU9RigyMzY5MykseD1GKDcxMzAxKSxtPUYoNjY2OTgpO2Z1bmN0aW9uIE0oTyxSKXt0aGlzLm5hbWU9Tyx0aGlzLmJvZHk9Uix0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319SWUuZGVmaW5lPWZ1bmN0aW9uKFIseil7cmV0dXJuIG5ldyBNKFIseil9LE0ucHJvdG90'@;
put 'eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihSKXtjb25zdCB6PXRoaXMubmFtZTtmdW5jdGlvbiBLKEkpe3RoaXMuX2luaXROYW1lZChJLHopfXJldHVybiBtKEssUiksSy5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihrLEUpe1IuY2FsbCh0aGlzLGssRSl9LG5ldyBLKHRoaXMpfSxN'@;
put 'LnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShSPVJ8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbUl09dGhpcy5fY3JlYXRlTmFtZWQoeFtSXSkpLHRoaXMuZGVjb2RlcnNbUl19LE0ucHJvdG90eXBlLmRlY29kZT1m'@;
put 'dW5jdGlvbihSLHosSyl7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoeikuZGVjb2RlKFIsSyl9LE0ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKFIpe3JldHVybiB0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KFI9Unx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tSXT10aGlzLl9j'@;
put 'cmVhdGVOYW1lZChhZVtSXSkpLHRoaXMuZW5jb2RlcnNbUl19LE0ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihSLHosSyl7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoeikuZW5jb2RlKFIsSyl9fSw3NTcyMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9Rig2NjY5OCkseD1G'@;
put 'KDk1Njg0KS5iLG09RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIGxlKE8sUil7eC5jYWxsKHRoaXMsUiksbS5pc0J1ZmZlcihPKT8odGhpcy5iYXNlPU8sdGhpcy5vZmZzZXQ9MCx0aGlzLmxlbmd0aD1PLmxlbmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIE0o'@;
put 'TyxSKXtpZihBcnJheS5pc0FycmF5KE8pKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gTS5pc0VuY29kZXJCdWZmZXIoeil8fCh6PW5ldyBNKHosUikpLHRoaXMubGVuZ3RoKz16Lmxlbmd0aCx6fSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBl'@;
put 'b2YgTyl7aWYoISgwPD1PJiZPPD0yNTUpKXJldHVybiBSLmVycm9yKCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1PLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIE8pdGhpcy52YWx1ZT1PLHRoaXMubGVuZ3RoPW0uYnl0ZUxlbmd0aChP'@;
put 'KTtlbHNle2lmKCFtLmlzQnVmZmVyKE8pKXJldHVybiBSLmVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAiK3R5cGVvZiBPKTt0aGlzLnZhbHVlPU8sdGhpcy5sZW5ndGg9Ty5sZW5ndGh9fWFlKGxlLHgpLEllLkM9bGUsbGUuaXNEZWNvZGVyQnVmZmVyPWZ1bmN0aW9uKFIpe3JldHVybiBSIGlu'@;
put 'c3RhbmNlb2YgbGV8fCJvYmplY3QiPT10eXBlb2YgUiYmbS5pc0J1ZmZlcihSLmJhc2UpJiYiRGVjb2RlckJ1ZmZlciI9PT1SLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2YgUi5vZmZzZXQmJiJudW1iZXIiPT10eXBlb2YgUi5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBS'@;
put 'LnNhdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnJlc3RvcmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLmlzRW1wdHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnJlYWRVSW50OCYmImZ1bmN0aW9uIj09dHlwZW9mIFIuc2tpcCYmImZ1bmN0aW9uIj09dHlwZW9mIFIucmF3fSxsZS5wcm90b3R5cGUu'@;
put 'c2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6eC5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sbGUucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oUil7Y29uc3Qgej1uZXcgbGUodGhpcy5iYXNlKTtyZXR1cm4gei5vZmZzZXQ9Ui5vZmZzZXQs'@;
put 'ei5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9Ui5vZmZzZXQseC5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsUi5yZXBvcnRlciksen0sbGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sbGUucHJvdG90eXBl'@;
put 'LnJlYWRVSW50OD1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKFJ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sbGUucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oUix6'@;
put 'KXtpZighKHRoaXMub2Zmc2V0K1I8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcih6fHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7Y29uc3QgSz1uZXcgbGUodGhpcy5iYXNlKTtyZXR1cm4gSy5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLEsub2Zmc2V0PXRoaXMu'@;
put 'b2Zmc2V0LEsubGVuZ3RoPXRoaXMub2Zmc2V0K1IsdGhpcy5vZmZzZXQrPVIsS30sbGUucHJvdG90eXBlLnJhdz1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKFI/Ui5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxJZS5SPU0sTS5pc0VuY29kZXJCdWZmZXI9ZnVu'@;
put 'Y3Rpb24oUil7cmV0dXJuIFIgaW5zdGFuY2VvZiBNfHwib2JqZWN0Ij09dHlwZW9mIFImJiJFbmNvZGVyQnVmZmVyIj09PVIuY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBSLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIFIuam9pbn0sTS5wcm90b3R5cGUuam9pbj1mdW5j'@;
put 'dGlvbihSLHope3JldHVybiBSfHwoUj1tLmFsbG9jKHRoaXMubGVuZ3RoKSksenx8KHo9MCksMD09PXRoaXMubGVuZ3RofHwoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oSyl7Sy5qb2luKFIseikseis9Sy5sZW5ndGh9KTooIm51bWJlciI9'@;
put 'PXR5cGVvZiB0aGlzLnZhbHVlP1Jbel09dGhpcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWU/Ui53cml0ZSh0aGlzLnZhbHVlLHopOm0uaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weShSLHopLHorPXRoaXMubGVuZ3RoKSksUn19LDQwNTEwOihhdCxJZSxG'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5SZXBvcnRlcj1GKDk1Njg0KS5iLGFlLkRlY29kZXJCdWZmZXI9Rig3NTcyMCkuQyxhZS5FbmNvZGVyQnVmZmVyPUYoNzU3MjApLlIsYWUuTm9kZT1GKDU4NTMzKX0sNTg1MzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFl'@;
put 'PUYoOTU2ODQpLmIseD1GKDc1NzIwKS5SLG09Rig3NTcyMCkuQyxsZT1GKDU3Nzk4KSxNPVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIs'@;
put 'ImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sTz1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJp'@;
put 'bXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KE0pO2Z1bmN0aW9uIHooSSxrLEUpe2NvbnN0IGo9e307dGhpcy5fYmFzZVN0YXRlPWosai5uYW1lPUUsai5lbmM9SSxqLnBhcmVudD1rfHxudWxsLGouY2hpbGRyZW49bnVsbCxqLnRhZz1udWxsLGouYXJn'@;
put 'cz1udWxsLGoucmV2ZXJzZUFyZ3M9bnVsbCxqLmNob2ljZT1udWxsLGoub3B0aW9uYWw9ITEsai5hbnk9ITEsai5vYmo9ITEsai51c2U9bnVsbCxqLnVzZURlY29kZXI9bnVsbCxqLmtleT1udWxsLGouZGVmYXVsdD1udWxsLGouZXhwbGljaXQ9bnVsbCxqLmltcGxpY2l0PW51bGwsai5jb250'@;
put 'YWlucz1udWxsLGoucGFyZW50fHwoai5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfWF0LmV4cG9ydHM9ejtjb25zdCBLPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFs'@;
put 'dGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07ei5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX2Jhc2VTdGF0ZSxFPXt9O0suZm9yRWFjaChmdW5jdGlvbihWKXtFW1ZdPWtbVl19KTtjb25zdCBqPW5ldyB0'@;
put 'aGlzLmNvbnN0cnVjdG9yKEUucGFyZW50KTtyZXR1cm4gai5fYmFzZVN0YXRlPUUsan0sei5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX2Jhc2VTdGF0ZTtPLmZvckVhY2goZnVuY3Rpb24oRSl7dGhpc1tFXT1mdW5jdGlvbigpe2NvbnN0IFY9bmV3IHRoaXMuY29u'@;
put 'c3RydWN0b3IodGhpcyk7cmV0dXJuIGsuY2hpbGRyZW4ucHVzaChWKSxWW0VdLmFwcGx5KFYsYXJndW1lbnRzKX19LHRoaXMpfSx6LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtsZShudWxsPT09RS5wYXJlbnQpLGsuY2FsbCh0aGlzKSxFLmNo'@;
put 'aWxkcmVuPUUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiBqLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksbGUuZXF1YWwoRS5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LHoucHJvdG90eXBlLl91c2VBcmdz'@;
put 'PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlLGo9ay5maWx0ZXIoZnVuY3Rpb24oVil7cmV0dXJuIFYgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtrPWsuZmlsdGVyKGZ1bmN0aW9uKFYpe3JldHVybiEoViBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3Ip'@;
put 'fSx0aGlzKSwwIT09ai5sZW5ndGgmJihsZShudWxsPT09RS5jaGlsZHJlbiksRS5jaGlsZHJlbj1qLGouZm9yRWFjaChmdW5jdGlvbihWKXtWLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09ay5sZW5ndGgmJihsZShudWxsPT09RS5hcmdzKSxFLmFyZ3M9ayxFLnJldmVyc2VB'@;
put 'cmdzPWsubWFwKGZ1bmN0aW9uKFYpe2lmKCJvYmplY3QiIT10eXBlb2YgVnx8Vi5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gVjtjb25zdCBCPXt9O3JldHVybiBPYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1k9PSgwfFkpJiYoWXw9MCksQltWW1ldXT1ZfSksQn0pKX0s'@;
put 'WyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2Vu'@;
put 'Y29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oSSl7ei5wcm90b3R5cGVbSV09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoSSsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIr'@;
put 'dGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksTS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3oucHJvdG90eXBlW0ldPWZ1bmN0aW9uKCl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGUsaj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBsZShudWxsPT09RS50YWcpLEUudGFn'@;
put 'PUksdGhpcy5fdXNlQXJncyhqKSx0aGlzfX0pLHoucHJvdG90eXBlLnVzZT1mdW5jdGlvbihrKXtsZShrKTtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUudXNlKSxFLnVzZT1rLHRoaXN9LHoucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSx6LnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmRlZmF1bHQpLEUuZGVmYXVsdD1rLEUub3B0aW9uYWw9ITAsdGhpc30sei5wcm90b3R5cGUuZXhwbGljaXQ9'@;
put 'ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmV4cGxpY2l0JiZudWxsPT09RS5pbXBsaWNpdCksRS5leHBsaWNpdD1rLHRoaXN9LHoucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVy'@;
put 'biBsZShudWxsPT09RS5leHBsaWNpdCYmbnVsbD09PUUuaW1wbGljaXQpLEUuaW1wbGljaXQ9ayx0aGlzfSx6LnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX2Jhc2VTdGF0ZSxFPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGsub2Jq'@;
put 'PSEwLDAhPT1FLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhFKSx0aGlzfSx6LnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmtleSksRS5rZXk9ayx0aGlzfSx6LnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSx6LnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmNob2ljZSksRS5jaG9pY2U9ayx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKGspLm1hcChmdW5jdGlvbihq'@;
put 'KXtyZXR1cm4ga1tqXX0pKSx0aGlzfSx6LnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUudXNlKSxFLmNvbnRhaW5zPWssdGhpc30sei5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9'@;
put 'dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1qLnBhcmVudClyZXR1cm4gay53cmFwUmVzdWx0KGouY2hpbGRyZW5bMF0uX2RlY29kZShrLEUpKTtsZXQgWCxWPWouZGVmYXVsdCxCPSEwLFk9bnVsbDtpZihudWxsIT09ai5rZXkmJihZPWsuZW50ZXJLZXkoai5rZXkpKSxqLm9wdGlvbmFsKXts'@;
put 'ZXQgVT1udWxsO2lmKG51bGwhPT1qLmV4cGxpY2l0P1U9ai5leHBsaWNpdDpudWxsIT09ai5pbXBsaWNpdD9VPWouaW1wbGljaXQ6bnVsbCE9PWoudGFnJiYoVT1qLnRhZyksbnVsbCE9PVV8fGouYW55KXtpZihCPXRoaXMuX3BlZWtUYWcoayxVLGouYW55KSxrLmlzRXJyb3IoQikpcmV0dXJu'@;
put 'IEJ9ZWxzZXtjb25zdCBxPWsuc2F2ZSgpO3RyeXtudWxsPT09ai5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhqLnRhZyxrLEUpOnRoaXMuX2RlY29kZUNob2ljZShrLEUpLEI9ITB9Y2F0Y2h7Qj0hMX1rLnJlc3RvcmUocSl9fWlmKGoub2JqJiZCJiYoWD1rLmVudGVyT2JqZWN0KCkpLEIp'@;
put 'e2lmKG51bGwhPT1qLmV4cGxpY2l0KXtjb25zdCBxPXRoaXMuX2RlY29kZVRhZyhrLGouZXhwbGljaXQpO2lmKGsuaXNFcnJvcihxKSlyZXR1cm4gcTtrPXF9Y29uc3QgVT1rLm9mZnNldDtpZihudWxsPT09ai51c2UmJm51bGw9PT1qLmNob2ljZSl7bGV0IHE7ai5hbnkmJihxPWsuc2F2ZSgp'@;
put 'KTtjb25zdCBlZT10aGlzLl9kZWNvZGVUYWcoayxudWxsIT09ai5pbXBsaWNpdD9qLmltcGxpY2l0OmoudGFnLGouYW55KTtpZihrLmlzRXJyb3IoZWUpKXJldHVybiBlZTtqLmFueT9WPWsucmF3KHEpOms9ZWV9aWYoRSYmRS50cmFjayYmbnVsbCE9PWoudGFnJiZFLnRyYWNrKGsucGF0aCgp'@;
put 'LFUsay5sZW5ndGgsInRhZ2dlZCIpLEUmJkUudHJhY2smJm51bGwhPT1qLnRhZyYmRS50cmFjayhrLnBhdGgoKSxrLm9mZnNldCxrLmxlbmd0aCwiY29udGVudCIpLGouYW55fHwoVj1udWxsPT09ai5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhqLnRhZyxrLEUpOnRoaXMuX2RlY29kZUNo'@;
put 'b2ljZShrLEUpKSxrLmlzRXJyb3IoVikpcmV0dXJuIFY7aWYoIWouYW55JiZudWxsPT09ai5jaG9pY2UmJm51bGwhPT1qLmNoaWxkcmVuJiZqLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZWUpe2VlLl9kZWNvZGUoayxFKX0pLGouY29udGFpbnMmJigib2N0c3RyIj09PWoudGFnfHwiYml0'@;
put 'c3RyIj09PWoudGFnKSl7Y29uc3QgcT1uZXcgbShWKTtWPXRoaXMuX2dldFVzZShqLmNvbnRhaW5zLGsuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKHEsRSl9fXJldHVybiBqLm9iaiYmQiYmKFY9ay5sZWF2ZU9iamVjdChYKSksbnVsbD09PWoua2V5fHxudWxsPT09ViYmITAhPT1CP251'@;
put 'bGwhPT1ZJiZrLmV4aXRLZXkoWSk6ay5sZWF2ZUtleShZLGoua2V5LFYpLFZ9LHoucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PWt8fCJzZXQiPT09az9udWxsOiJzZXFvZiI9PT1rfHwic2V0b2Yi'@;
put 'PT09az90aGlzLl9kZWNvZGVMaXN0KEUsayxWLmFyZ3NbMF0saik6L3N0ciQvLnRlc3Qoayk/dGhpcy5fZGVjb2RlU3RyKEUsayxqKToib2JqaWQiPT09ayYmVi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEUsVi5hcmdzWzBdLFYuYXJnc1sxXSxqKToib2JqaWQiPT09az90aGlzLl9kZWNvZGVP'@;
put 'YmppZChFLG51bGwsbnVsbCxqKToiZ2VudGltZSI9PT1rfHwidXRjdGltZSI9PT1rP3RoaXMuX2RlY29kZVRpbWUoRSxrLGopOiJudWxsXyI9PT1rP3RoaXMuX2RlY29kZU51bGwoRSxqKToiYm9vbCI9PT1rP3RoaXMuX2RlY29kZUJvb2woRSxqKToib2JqRGVzYyI9PT1rP3RoaXMuX2RlY29k'@;
put 'ZVN0cihFLGssaik6ImludCI9PT1rfHwiZW51bSI9PT1rP3RoaXMuX2RlY29kZUludChFLFYuYXJncyYmVi5hcmdzWzBdLGopOm51bGwhPT1WLnVzZT90aGlzLl9nZXRVc2UoVi51c2UsRS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoRSxqKTpFLmVycm9yKCJ1bmtub3duIHRhZzogIitr'@;
put 'KX0sei5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBqLnVzZURlY29kZXI9dGhpcy5fdXNlKGssRSksbGUobnVsbD09PWoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksai51c2VEZWNvZGVyPWoudXNlRGVjb2Rlci5f'@;
put 'YmFzZVN0YXRlLmNoaWxkcmVuWzBdLGouaW1wbGljaXQhPT1qLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKGoudXNlRGVjb2Rlcj1qLnVzZURlY29kZXIuY2xvbmUoKSxqLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1qLmltcGxpY2l0KSxqLnVzZURlY29kZXJ9LHou'@;
put 'cHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgVj1udWxsLEI9ITE7cmV0dXJuIE9iamVjdC5rZXlzKGouY2hvaWNlKS5zb21lKGZ1bmN0aW9uKFkpe2NvbnN0IFg9ay5zYXZlKCksVT1qLmNob2ljZVtZXTt0cnl7Y29uc3Qg'@;
put 'cT1VLl9kZWNvZGUoayxFKTtpZihrLmlzRXJyb3IocSkpcmV0dXJuITE7Vj17dHlwZTpZLHZhbHVlOnF9LEI9ITB9Y2F0Y2h7cmV0dXJuIGsucmVzdG9yZShYKSwhMX1yZXR1cm4hMH0sdGhpcyksQj9WOmsuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSx6LnByb3RvdHlwZS5fY3JlYXRl'@;
put 'RW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IHgoayx0aGlzLnJlcG9ydGVyKX0sei5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihrLEUsail7Y29uc3QgVj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbCE9PVYuZGVmYXVsdCYmVi5kZWZhdWx0PT09aylyZXR1cm47Y29uc3Qg'@;
put 'Qj10aGlzLl9lbmNvZGVWYWx1ZShrLEUsaik7cmV0dXJuIHZvaWQgMD09PUJ8fHRoaXMuX3NraXBEZWZhdWx0KEIsRSxqKT92b2lkIDA6Qn0sei5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vi5wYXJlbnQp'@;
put 'cmV0dXJuIFYuY2hpbGRyZW5bMF0uX2VuY29kZShrLEV8fG5ldyBhZSk7bGV0IEI9bnVsbDtpZih0aGlzLnJlcG9ydGVyPUUsVi5vcHRpb25hbCYmdm9pZCAwPT09ayl7aWYobnVsbD09PVYuZGVmYXVsdClyZXR1cm47az1WLmRlZmF1bHR9bGV0IFk9bnVsbCxYPSExO2lmKFYuYW55KUI9dGhp'@;
put 'cy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihrKTtlbHNlIGlmKFYuY2hvaWNlKUI9dGhpcy5fZW5jb2RlQ2hvaWNlKGssRSk7ZWxzZSBpZihWLmNvbnRhaW5zKVk9dGhpcy5fZ2V0VXNlKFYuY29udGFpbnMsaikuX2VuY29kZShrLEUpLFg9ITA7ZWxzZSBpZihWLmNoaWxkcmVuKVk9Vi5jaGlsZHJl'@;
put 'bi5tYXAoZnVuY3Rpb24oVSl7aWYoIm51bGxfIj09PVUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIFUuX2VuY29kZShudWxsLEUsayk7aWYobnVsbD09PVUuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIEUuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7Y29uc3QgcT1FLmVudGVyS2V5KFUu'@;
put 'X2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgaylyZXR1cm4gRS5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7Y29uc3QgZWU9VS5fZW5jb2RlKGtbVS5fYmFzZVN0YXRlLmtleV0sRSxrKTtyZXR1cm4gRS5sZWF2ZUtleShxKSxlZX0s'@;
put 'dGhpcykuZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVfSksWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkpO2Vsc2UgaWYoInNlcW9mIj09PVYudGFnfHwic2V0b2YiPT09Vi50YWcpe2lmKCFWLmFyZ3N8fDEhPT1WLmFyZ3MubGVuZ3RoKXJldHVybiBFLmVycm9yKCJUb28gbWFueSBh'@;
put 'cmdzIGZvciA6ICIrVi50YWcpO2lmKCFBcnJheS5pc0FycmF5KGspKXJldHVybiBFLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7Y29uc3QgVT10aGlzLmNsb25lKCk7VS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVm'@;
put 'ZmVyKGsubWFwKGZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0saykuX2VuY29kZShxLEUpfSxVKSl9ZWxzZSBudWxsIT09Vi51c2U/Qj10aGlzLl9nZXRVc2UoVi51c2UsaikuX2VuY29kZShrLEUpOihZPXRoaXMuX2VuY29kZVByaW1pdGl2'@;
put 'ZShWLnRhZyxrKSxYPSEwKTtpZighVi5hbnkmJm51bGw9PT1WLmNob2ljZSl7Y29uc3QgVT1udWxsIT09Vi5pbXBsaWNpdD9WLmltcGxpY2l0OlYudGFnLHE9bnVsbD09PVYuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1VP251bGw9PT1WLnVzZSYmRS5lcnJvcigiVGFn'@;
put 'IGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVYudXNlJiYoQj10aGlzLl9lbmNvZGVDb21wb3NpdGUoVSxYLHEsWSkpfXJldHVybiBudWxsIT09Vi5leHBsaWNpdCYmKEI9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFYuZXhwbGljaXQsITEsImNvbnRleHQiLEIpKSxC'@;
put 'fSx6LnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGUsVj1qLmNob2ljZVtrLnR5cGVdO3JldHVybiBWfHxsZSghMSxrLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhqLmNob2ljZSkpKSxW'@;
put 'Ll9lbmNvZGUoay52YWx1ZSxFKX0sei5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KGspKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoRSxrKTtpZigib2JqaWQiPT09ayYmai5hcmdzKXJldHVybiB0'@;
put 'aGlzLl9lbmNvZGVPYmppZChFLGoucmV2ZXJzZUFyZ3NbMF0sai5hcmdzWzFdKTtpZigib2JqaWQiPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoRSxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PWt8fCJ1dGN0aW1lIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoRSxrKTtpZigi'@;
put 'bnVsbF8iPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09a3x8ImVudW0iPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlSW50KEUsai5hcmdzJiZqLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEUpO2lmKCJvYmpEZXNj'@;
put 'Ij09PWspcmV0dXJuIHRoaXMuX2VuY29kZVN0cihFLGspO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK2spfSx6LnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oayl7cmV0dXJuL15bMC05IF0qJC8udGVzdChrKX0sei5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rp'@;
put 'b24oayl7cmV0dXJuL15bQS1aYS16MC05ICcoKSssLS4vOj0/XSokLy50ZXN0KGspfX0sOTU2ODQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpO2Z1bmN0aW9uIHgobGUpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpsZXx8'@;
put 'e30sZXJyb3JzOltdfX1mdW5jdGlvbiBtKGxlLE0pe3RoaXMucGF0aD1sZSx0aGlzLnJldGhyb3coTSl9SWUuYj14LHgucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24oTSl7cmV0dXJuIE0gaW5zdGFuY2VvZiBtfSx4LnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7Y29uc3QgTT10aGlzLl9y'@;
put 'ZXBvcnRlclN0YXRlO3JldHVybntvYmo6TS5vYmoscGF0aExlbjpNLnBhdGgubGVuZ3RofX0seC5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihNKXtjb25zdCBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7Ty5vYmo9TS5vYmosTy5wYXRoPU8ucGF0aC5zbGljZSgwLE0ucGF0aExlbil9LHgucHJv'@;
put 'dG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChNKX0seC5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbihNKXtjb25zdCBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7Ty5wYXRoPU8ucGF0aC5zbGljZSgwLE0tMSl9LHgucHJvdG90'@;
put 'eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKE0sTyxSKXtjb25zdCB6PXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KE0pLG51bGwhPT16Lm9iaiYmKHoub2JqW09dPVIpfSx4LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2lu'@;
put 'KCIvIil9LHgucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7Y29uc3QgTT10aGlzLl9yZXBvcnRlclN0YXRlLE89TS5vYmo7cmV0dXJuIE0ub2JqPXt9LE99LHgucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKE0pe2NvbnN0IE89dGhpcy5fcmVwb3J0ZXJTdGF0ZSxSPU8u'@;
put 'b2JqO3JldHVybiBPLm9iaj1NLFJ9LHgucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKE0pe2xldCBPO2NvbnN0IFI9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx6PU0gaW5zdGFuY2VvZiBtO2lmKE89ej9NOm5ldyBtKFIucGF0aC5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5'@;
put 'KEspKyJdIn0pLmpvaW4oIiIpLE0ubWVzc2FnZXx8TSxNLnN0YWNrKSwhUi5vcHRpb25zLnBhcnRpYWwpdGhyb3cgTztyZXR1cm4genx8Ui5lcnJvcnMucHVzaChPKSxPfSx4LnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKE0pe2NvbnN0IE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1'@;
put 'cm4gTy5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IoTSk/bnVsbDpNLGVycm9yczpPLmVycm9yc306TX0sYWUobSxFcnJvciksbS5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbihNKXtpZih0aGlzLm1lc3NhZ2U9TSsiIGF0OiAiKyh0aGlzLnBhdGh8fCIoc2hhbGxvdyki'@;
put 'KSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxtKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2goTyl7dGhpcy5zdGFjaz1PLnN0YWNrfXJldHVybiB0aGlzfX0sNjUwODY6KGF0LEllKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtmdW5jdGlvbiBGKGFlKXtjb25zdCB4PXt9O3JldHVybiBPYmplY3Qua2V5cyhhZSkuZm9yRWFjaChmdW5jdGlvbihtKXsoMHxtKT09bSYmKG18PTApLHhbYWVbbV1dPW19KSx4fUllLnRhZ0NsYXNzPXswOiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0'@;
put 'IiwzOiJwcml2YXRlIn0sSWUudGFnQ2xhc3NCeU5hbWU9RihJZS50YWdDbGFzcyksSWUudGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6Im51bGxfIiw2OiJvYmppZCIsNzoib2JqRGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVt'@;
put 'IiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZpZGVvc3RyIiwyMjoiaWE1c3RyIiwyMzoidXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIs'@;
put 'MjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxJZS50YWdCeU5hbWU9RihJZS50YWcpfSw0NDE1NTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9SWU7YWUuX3JldmVyc2U9ZnVuY3Rpb24obSl7Y29uc3QgbGU9'@;
put 'e307cmV0dXJuIE9iamVjdC5rZXlzKG0pLmZvckVhY2goZnVuY3Rpb24oTSl7KDB8TSk9PU0mJihNfD0wKSxsZVttW01dXT1NfSksbGV9LGFlLmRlcj1GKDY1MDg2KX0sOTY4MzU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9Rig1MDQ3KSxtPUYoNzU3MjAp'@;
put 'LkMsbGU9Rig1ODUzMyksTT1GKDY1MDg2KTtmdW5jdGlvbiBPKEkpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1JLm5hbWUsdGhpcy5lbnRpdHk9SSx0aGlzLnRyZWU9bmV3IFIsdGhpcy50cmVlLl9pbml0KEkuYm9keSl9ZnVuY3Rpb24gUihJKXtsZS5jYWxsKHRoaXMsImRlciIsSSl9ZnVu'@;
put 'Y3Rpb24geihJLGspe2xldCBFPUkucmVhZFVJbnQ4KGspO2lmKEkuaXNFcnJvcihFKSlyZXR1cm4gRTtjb25zdCBqPU0udGFnQ2xhc3NbRT4+Nl0sVj0wPT0oMzImRSk7aWYoMzE9PSgzMSZFKSl7bGV0IFk9RTtmb3IoRT0wOzEyOD09KDEyOCZZKTspe2lmKFk9SS5yZWFkVUludDgoayksSS5p'@;
put 'c0Vycm9yKFkpKXJldHVybiBZO0U8PD03LEV8PTEyNyZZfX1lbHNlIEUmPTMxO3JldHVybntjbHM6aixwcmltaXRpdmU6Vix0YWc6RSx0YWdTdHI6TS50YWdbRV19fWZ1bmN0aW9uIEsoSSxrLEUpe2xldCBqPUkucmVhZFVJbnQ4KEUpO2lmKEkuaXNFcnJvcihqKSlyZXR1cm4gajtpZighayYm'@;
put 'MTI4PT09ailyZXR1cm4gbnVsbDtpZighKDEyOCZqKSlyZXR1cm4gajtjb25zdCBWPTEyNyZqO2lmKFY+NClyZXR1cm4gSS5lcnJvcigibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZyIpO2o9MDtmb3IobGV0IEI9MDtCPFY7QisrKXtqPDw9ODtjb25zdCBZPUkucmVhZFVJbnQ4KEUpO2lmKEku'@;
put 'aXNFcnJvcihZKSlyZXR1cm4gWTtqfD1ZfXJldHVybiBqfWF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gbS5pc0RlY29kZXJCdWZmZXIoayl8fChrPW5ldyBtKGssRSkpLHRoaXMudHJlZS5fZGVjb2RlKGssRSl9LGFlKFIsbGUpLFIucHJvdG90'@;
put 'eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKGssRSxqKXtpZihrLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdCBWPWsuc2F2ZSgpLEI9eihrLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK0UrJyInKTtyZXR1cm4gay5pc0Vycm9yKEIpP0I6KGsucmVzdG9yZShWKSxCLnRhZz09PUV8fEIudGFnU3RyPT09'@;
put 'RXx8Qi50YWdTdHIrIm9mIj09PUV8fGopfSxSLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXooaywnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgIicrRSsnIicpO2lmKGsuaXNFcnJvcihWKSlyZXR1cm4gVjtsZXQgQj1LKGssVi5wcmltaXRpdmUsJ0ZhaWxl'@;
put 'ZCB0byBnZXQgbGVuZ3RoIG9mICInK0UrJyInKTtpZihrLmlzRXJyb3IoQikpcmV0dXJuIEI7aWYoIWomJlYudGFnIT09RSYmVi50YWdTdHIhPT1FJiZWLnRhZ1N0cisib2YiIT09RSlyZXR1cm4gay5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogIicrRSsnIicpO2lmKFYucHJpbWl0aXZl'@;
put 'fHxudWxsIT09QilyZXR1cm4gay5za2lwKEIsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytFKyciJyk7Y29uc3QgWT1rLnNhdmUoKSxYPXRoaXMuX3NraXBVbnRpbEVuZChrLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVy'@;
put 'biBrLmlzRXJyb3IoWCk/WDooQj1rLm9mZnNldC1ZLm9mZnNldCxrLnJlc3RvcmUoWSksay5za2lwKEIsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytFKyciJykpfSxSLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKGssRSl7Zm9yKDs7KXtjb25zdCBqPXooayxFKTtpZihr'@;
put 'LmlzRXJyb3IoaikpcmV0dXJuIGo7Y29uc3QgVj1LKGssai5wcmltaXRpdmUsRSk7aWYoay5pc0Vycm9yKFYpKXJldHVybiBWO2xldCBCO2lmKEI9ai5wcmltaXRpdmV8fG51bGwhPT1WP2suc2tpcChWKTp0aGlzLl9za2lwVW50aWxFbmQoayxFKSxrLmlzRXJyb3IoQikpcmV0dXJuIEI7aWYo'@;
put 'ImVuZCI9PT1qLnRhZ1N0cilicmVha319LFIucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKGssRSxqLFYpe2NvbnN0IEI9W107Zm9yKDshay5pc0VtcHR5KCk7KXtjb25zdCBZPXRoaXMuX3BlZWtUYWcoaywiZW5kIik7aWYoay5pc0Vycm9yKFkpKXJldHVybiBZO2NvbnN0IFg9ai5k'@;
put 'ZWNvZGUoaywiZGVyIixWKTtpZihrLmlzRXJyb3IoWCkmJlkpYnJlYWs7Qi5wdXNoKFgpfXJldHVybiBCfSxSLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKGssRSl7aWYoImJpdHN0ciI9PT1FKXtjb25zdCBqPWsucmVhZFVJbnQ4KCk7cmV0dXJuIGsuaXNFcnJvcihqKT9qOnt1bnVz'@;
put 'ZWQ6aixkYXRhOmsucmF3KCl9fWlmKCJibXBzdHIiPT09RSl7Y29uc3Qgaj1rLnJhdygpO2lmKGoubGVuZ3RoJTI9PTEpcmV0dXJuIGsuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7bGV0IFY9IiI7Zm9yKGxldCBCPTA7QjxqLmxlbmd0'@;
put 'aC8yO0IrKylWKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGoucmVhZFVJbnQxNkJFKDIqQikpO3JldHVybiBWfWlmKCJudW1zdHIiPT09RSl7Y29uc3Qgaj1rLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihqKT9qOmsuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmlu'@;
put 'ZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09RSlyZXR1cm4gay5yYXcoKTtpZigib2JqRGVzYyI9PT1FKXJldHVybiBrLnJhdygpO2lmKCJwcmludHN0ciI9PT1FKXtjb25zdCBqPWsucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRo'@;
put 'aXMuX2lzUHJpbnRzdHIoaik/ajprLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEUpP2sucmF3KCkudG9TdHJpbmcoKTprLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitF'@;
put 'KyIgdW5zdXBwb3J0ZWQiKX0sUi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKGssRSxqKXtsZXQgVjtjb25zdCBCPVtdO2xldCBZPTAsWD0wO2Zvcig7IWsuaXNFbXB0eSgpOylYPWsucmVhZFVJbnQ4KCksWTw8PTcsWXw9MTI3JlgsMTI4Jlh8fChCLnB1c2goWSksWT0wKTtpZigx'@;
put 'MjgmWCYmQi5wdXNoKFkpLFY9aj9COltCWzBdLzQwfDAsQlswXSU0MF0uY29uY2F0KEIuc2xpY2UoMSkpLEUpe2xldCBlZT1FW1Yuam9pbigiICIpXTt2b2lkIDA9PT1lZSYmKGVlPUVbVi5qb2luKCIuIildKSx2b2lkIDAhPT1lZSYmKFY9ZWUpfXJldHVybiBWfSxSLnByb3RvdHlwZS5fZGVj'@;
put 'b2RlVGltZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9ay5yYXcoKS50b1N0cmluZygpO2xldCBWLEIsWSxYLFUscTtpZigiZ2VudGltZSI9PT1FKVY9MHxqLnNsaWNlKDAsNCksQj0wfGouc2xpY2UoNCw2KSxZPTB8ai5zbGljZSg2LDgpLFg9MHxqLnNsaWNlKDgsMTApLFU9MHxqLnNsaWNlKDEw'@;
put 'LDEyKSxxPTB8ai5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1FKXJldHVybiBrLmVycm9yKCJEZWNvZGluZyAiK0UrIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vj0wfGouc2xpY2UoMCwyKSxCPTB8ai5zbGljZSgyLDQpLFk9MHxqLnNsaWNlKDQsNiksWD0wfGouc2xp'@;
put 'Y2UoNiw4KSxVPTB8ai5zbGljZSg4LDEwKSxxPTB8ai5zbGljZSgxMCwxMiksVj1WPDcwPzJlMytWOjE5MDArVn1yZXR1cm4gRGF0ZS5VVEMoVixCLTEsWSxYLFUscSwwKX0sUi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sUi5wcm90b3R5cGUuX2RlY29k'@;
put 'ZUJvb2w9ZnVuY3Rpb24oayl7Y29uc3QgRT1rLnJlYWRVSW50OCgpO3JldHVybiBrLmlzRXJyb3IoRSk/RTowIT09RX0sUi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihrLEUpe2NvbnN0IGo9ay5yYXcoKTtsZXQgVj1uZXcgeChqKTtyZXR1cm4gRSYmKFY9RVtWLnRvU3RyaW5nKDEw'@;
put 'KV18fFYpLFZ9LFIucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oayxFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgayYmKGs9ayhFKSksay5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDcxMzAxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5kZXI9Rig5NjgzNSks'@;
put 'YWUucGVtPUYoMjIwOCl9LDIyMDg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9RigyNDE3OSkuQnVmZmVyLG09Rig5NjgzNSk7ZnVuY3Rpb24gbGUoTSl7bS5jYWxsKHRoaXMsTSksdGhpcy5lbmM9InBlbSJ9YWUobGUsbSksYXQuZXhwb3J0cz1sZSxsZS5w'@;
put 'cm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKE8sUil7Y29uc3Qgej1PLnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksSz1SLmxhYmVsLnRvVXBwZXJDYXNlKCksST0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC87bGV0IGs9LTEsRT0tMTtmb3IobGV0IEI9MDtCPHoubGVuZ3Ro'@;
put 'O0IrKyl7Y29uc3QgWT16W0JdLm1hdGNoKEkpO2lmKG51bGwhPT1ZJiZZWzJdPT09Syl7aWYoLTEhPT1rKXtpZigiRU5EIiE9PVlbMV0pYnJlYWs7RT1CO2JyZWFrfWlmKCJCRUdJTiIhPT1ZWzFdKWJyZWFrO2s9Qn19aWYoLTE9PT1rfHwtMT09PUUpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2Vj'@;
put 'dGlvbiBub3QgZm91bmQgZm9yOiAiK0spO2NvbnN0IGo9ei5zbGljZShrKzEsRSkuam9pbigiIik7ai5yZXBsYWNlKC9bXmEtejAtOSsvPV0rL2dpLCIiKTtjb25zdCBWPXguZnJvbShqLCJiYXNlNjQiKTtyZXR1cm4gbS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxWLFIpfX0sNjkxMzM6'@;
put 'KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9RigyNDE3OSkuQnVmZmVyLG09Rig1ODUzMyksbGU9Rig2NTA4Nik7ZnVuY3Rpb24gTShLKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Sy5uYW1lLHRoaXMuZW50aXR5PUssdGhpcy50cmVlPW5ldyBPLHRoaXMu'@;
put 'dHJlZS5faW5pdChLLmJvZHkpfWZ1bmN0aW9uIE8oSyl7bS5jYWxsKHRoaXMsImRlciIsSyl9ZnVuY3Rpb24gUihLKXtyZXR1cm4gSzwxMD8iMCIrSzpLfWF0LmV4cG9ydHM9TSxNLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoSSxrKS5q'@;
put 'b2luKCl9LGFlKE8sbSksTy5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihJLGssRSxqKXtjb25zdCBWPWZ1bmN0aW9uIHooSyxJLGssRSl7bGV0IGo7aWYoInNlcW9mIj09PUs/Sz0ic2VxIjoic2V0b2YiPT09SyYmKEs9InNldCIpLGxlLnRhZ0J5TmFtZS5oYXNPd25Qcm9w'@;
put 'ZXJ0eShLKSlqPWxlLnRhZ0J5TmFtZVtLXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgS3x8KDB8SykhPT1LKXJldHVybiBFLmVycm9yKCJVbmtub3duIHRhZzogIitLKTtqPUt9cmV0dXJuIGo+PTMxP0UuZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpOihJ'@;
put 'fHwoanw9MzIpLGp8PWxlLnRhZ0NsYXNzQnlOYW1lW2t8fCJ1bml2ZXJzYWwiXTw8NixqKX0oSSxrLEUsdGhpcy5yZXBvcnRlcik7aWYoai5sZW5ndGg8MTI4KXtjb25zdCBYPXguYWxsb2MoMik7cmV0dXJuIFhbMF09VixYWzFdPWoubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIo'@;
put 'W1gsal0pfWxldCBCPTE7Zm9yKGxldCBYPWoubGVuZ3RoO1g+PTI1NjtYPj49OClCKys7Y29uc3QgWT14LmFsbG9jKDIrQik7WVswXT1WLFlbMV09MTI4fEI7Zm9yKGxldCBYPTErQixVPWoubGVuZ3RoO1U+MDtYLS0sVT4+PTgpWVtYXT0yNTUmVTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2Rl'@;
put 'ckJ1ZmZlcihbWSxqXSl9LE8ucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oSSxrKXtpZigiYml0c3RyIj09PWspcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8SS51bnVzZWQsSS5kYXRhXSk7aWYoImJtcHN0ciI9PT1rKXtjb25zdCBFPXguYWxsb2MoMipJLmxlbmd0'@;
put 'aCk7Zm9yKGxldCBqPTA7ajxJLmxlbmd0aDtqKyspRS53cml0ZVVJbnQxNkJFKEkuY2hhckNvZGVBdChqKSwyKmopO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEUpfXJldHVybiJudW1zdHIiPT09az90aGlzLl9pc051bXN0cihJKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVy'@;
put 'KEkpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6InByaW50c3RyIj09PWs/dGhpcy5faXNQcmludHN0cihJKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpOnRoaXMucmVwb3J0'@;
put 'ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1h'@;
put 'LCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3Qoayl8fCJvYmpEZXNjIj09PWs/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihJKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitr'@;
put 'KyIgdW5zdXBwb3J0ZWQiKX0sTy5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKEksayxFKXtpZigic3RyaW5nIj09dHlwZW9mIEkpe2lmKCFrKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYo'@;
put 'IWsuaGFzT3duUHJvcGVydHkoSSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7ST1rW0ldLnNwbGl0KC9bXHMuXSsvZyk7Zm9yKGxldCBZPTA7WTxJLmxlbmd0aDtZKyspSVtZXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoSSkp'@;
put 'e0k9SS5zbGljZSgpO2ZvcihsZXQgWT0wO1k8SS5sZW5ndGg7WSsrKUlbWV18PTB9aWYoIUFycmF5LmlzQXJyYXkoSSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShJKSk7'@;
put 'aWYoIUUpe2lmKElbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtJLnNwbGljZSgwLDIsNDAqSVswXStJWzFdKX1sZXQgaj0wO2ZvcihsZXQgWT0wO1k8SS5sZW5ndGg7WSsrKXtsZXQgWD1JW1ldO2ZvcihqKys7WD49MTI4'@;
put 'O1g+Pj03KWorK31jb25zdCBWPXguYWxsb2Moaik7bGV0IEI9Vi5sZW5ndGgtMTtmb3IobGV0IFk9SS5sZW5ndGgtMTtZPj0wO1ktLSl7bGV0IFg9SVtZXTtmb3IoVltCLS1dPTEyNyZYOyhYPj49Nyk+MDspVltCLS1dPTEyOHwxMjcmWH1yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZl'@;
put 'cihWKX0sTy5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oSSxrKXtsZXQgRTtjb25zdCBqPW5ldyBEYXRlKEkpO3JldHVybiJnZW50aW1lIj09PWs/RT1bUihqLmdldFVUQ0Z1bGxZZWFyKCkpLFIoai5nZXRVVENNb250aCgpKzEpLFIoai5nZXRVVENEYXRlKCkpLFIoai5nZXRVVENI'@;
put 'b3VycygpKSxSKGouZ2V0VVRDTWludXRlcygpKSxSKGouZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PWs/RT1bUihqLmdldFVUQ0Z1bGxZZWFyKCklMTAwKSxSKGouZ2V0VVRDTW9udGgoKSsxKSxSKGouZ2V0VVRDRGF0ZSgpKSxSKGouZ2V0VVRDSG91cnMoKSks'@;
put 'UihqLmdldFVUQ01pbnV0ZXMoKSksUihqLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK2srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKEUsIm9jdHN0ciIpfSxPLnByb3RvdHlwZS5fZW5j'@;
put 'b2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sTy5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihJLGspe2lmKCJzdHJpbmciPT10eXBlb2YgSSl7aWYoIWspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3Ig'@;
put 'ZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighay5oYXNPd25Qcm9wZXJ0eShJKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoSSkpO0k9a1tJXX1pZigibnVtYmVyIiE9dHlwZW9mIEkmJiF4'@;
put 'LmlzQnVmZmVyKEkpKXtjb25zdCBWPUkudG9BcnJheSgpOyFJLnNpZ24mJjEyOCZWWzBdJiZWLnVuc2hpZnQoMCksST14LmZyb20oVil9aWYoeC5pc0J1ZmZlcihJKSl7bGV0IFY9SS5sZW5ndGg7MD09PUkubGVuZ3RoJiZWKys7Y29uc3QgQj14LmFsbG9jKFYpO3JldHVybiBJLmNvcHkoQiks'@;
put 'MD09PUkubGVuZ3RoJiYoQlswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpfWlmKEk8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpO2lmKEk8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLEldKTtsZXQgRT0xO2ZvcihsZXQgVj1J'@;
put 'O1Y+PTI1NjtWPj49OClFKys7Y29uc3Qgaj1uZXcgQXJyYXkoRSk7Zm9yKGxldCBWPWoubGVuZ3RoLTE7Vj49MDtWLS0paltWXT0yNTUmSSxJPj49ODtyZXR1cm4gMTI4JmpbMF0mJmoudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHguZnJvbShqKSl9LE8ucHJvdG90eXBl'@;
put 'Ll9lbmNvZGVCb29sPWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEk/MjU1OjApfSxPLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEksayl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEkmJihJPUkoaykpLEkuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LE8u'@;
put 'cHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihJLGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGU7bGV0IFY7aWYobnVsbD09PWouZGVmYXVsdClyZXR1cm4hMTtjb25zdCBCPUkuam9pbigpO2lmKHZvaWQgMD09PWouZGVmYXVsdEJ1ZmZlciYmKGouZGVmYXVsdEJ1ZmZlcj10aGlz'@;
put 'Ll9lbmNvZGVWYWx1ZShqLmRlZmF1bHQsayxFKS5qb2luKCkpLEIubGVuZ3RoIT09ai5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoVj0wO1Y8Qi5sZW5ndGg7VisrKWlmKEJbVl0hPT1qLmRlZmF1bHRCdWZmZXJbVl0pcmV0dXJuITE7cmV0dXJuITB9fSwyMzY5MzooYXQsSWUs'@;
put 'Rik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9SWU7YWUuZGVyPUYoNjkxMzMpLGFlLnBlbT1GKDc5MDApfSw3OTAwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoNjkxMzMpO2Z1bmN0aW9uIG0obGUpe3guY2FsbCh0aGlzLGxlKSx0aGlzLmVuYz0icGVt'@;
put 'In1hZShtLHgpLGF0LmV4cG9ydHM9bSxtLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oTSxPKXtjb25zdCB6PXgucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsTSkudG9TdHJpbmcoImJhc2U2NCIpLEs9WyItLS0tLUJFR0lOICIrTy5sYWJlbCsiLS0tLS0iXTtmb3IobGV0IEk9MDtJPHou'@;
put 'bGVuZ3RoO0krPTY0KUsucHVzaCh6LnNsaWNlKEksSSs2NCkpO3JldHVybiBLLnB1c2goIi0tLS0tRU5EICIrTy5sYWJlbCsiLS0tLS0iKSxLLmpvaW4oIlxuIil9fSw1MDQ3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lm'@;
put 'KCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5wcm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlv'@;
put 'biBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJl'@;
put 'IikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig4MDk1MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlv'@;
put 'biBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQs'@;
put 'SCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8'@;
put 'bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNt'@;
put 'cChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9'@;
put 'MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2Uo'@;
put 'YixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMu'@;
put 'bGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxl'@;
put 'bmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMu'@;
put 'bGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0'@;
put 'aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048'@;
put 'Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9w'@;
put 'YXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09'@;
put 'PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIp'@;
put 'Uz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0x'@;
put 'O2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4'@;
put 'NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9'@;
put 'dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlz'@;
put 'Lm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5s'@;
put 'ZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4i'@;
put 'fTt2YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAi'@;
put 'LCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVd'@;
put 'LEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2'@;
put 'NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdh'@;
put 'dGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7'@;
put 'cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3'@;
put 'MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtm'@;
put 'b3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9'@;
put 'Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3Zh'@;
put 'ciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3Ro'@;
put 'JUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVu'@;
put 'Z3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1'@;
put 'MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShP'@;
put 'LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9'@;
put 'ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtw'@;
put 'Kyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90'@;
put 'b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49'@;
put 'MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwo'@;
put 'SCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9u'@;
put 'KCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxl'@;
put 'bmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSks'@;
put 'dGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3Ro'@;
put 'P3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0m'@;
put 'Yi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5k'@;
put 'KHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9'@;
put 'PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5p'@;
put 'dXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/'@;
put 'dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZh'@;
put 'ciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29y'@;
put 'ZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5f'@;
put 'bm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIg'@;
put 'Zz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1E'@;
put 'Pj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFk'@;
put 'ZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIo'@;
put 'dGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRk'@;
put 'KGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJu'@;
put 'IHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRz'@;
put 'W1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jk'@;
put 'c1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixE'@;
put 'LEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9'@;
put 'V2U+Pj4xMyxRZT0wfE5bNF0sbHQ9ODE5MSZRZSxQZT1RZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxvdD04MTkxJnplLHV0PXplPj4+'@;
put 'MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLEhuPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0'@;
put 'PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHxnWzVdLHJ0PTgxOTEmbW4sSXQ9bW4+Pj4xMyxRdD0wfGdbNl0sRHQ9ODE5MSZRdCxwdD1RdD4+PjEzLFl0PTB8Z1s3XSxJbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdb'@;
put 'OV0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBGbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9'@;
put 'KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhGbj4+PjI2KXwwLEZuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoTGUsQ24pfDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChu'@;
put 'ZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1N'@;
put 'YXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUsQ24pfDAsdz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExlLFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0'@;
put 'aC5pbXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENu'@;
put 'KSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoamUsV24pfDAsdz13K01hdGguaW11bChqZSxlbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChMZSxIbil8MCx3PXcrTWF0aC5pbXVsKExlLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwo'@;
put 'ZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9'@;
put 'ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11bChPZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsdz13K01h'@;
put 'dGguaW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCx3PXcrTWF0aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0'@;
put 'aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUs'@;
put 'Q24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXww'@;
put 'KStNYXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCx3PXcrTWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1w'@;
put 'K01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtT'@;
put 'PSgodz13K01hdGguaW11bChkZSxJdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsdz13K01h'@;
put 'dGguaW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8MCx3PXcrTWF0aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0'@;
put 'aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUs'@;
put 'Q24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXww'@;
put 'KStNYXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoamUscnQpfDAsdz13K01hdGguaW11bChqZSxJdCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVsKExlLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGguaW11bChuZSxJbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwo'@;
put 'ZGUsSW4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChvdCxDbikscD0ocD1NYXRoLmltdWwob3QsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9'@;
put 'ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11bChYZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsdz13K01h'@;
put 'dGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5p'@;
put 'bXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCx3PXcrTWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsSW4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLEluKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0'@;
put 'aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENu'@;
put 'KSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChvdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKG90LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwo'@;
put 'VWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxy'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKFBlLEl0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0'@;
put 'KXwwKStNYXRoLmltdWwoamUsSW4pfDAsdz13K01hdGguaW11bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChMZSx4bil8MCx3PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChu'@;
put 'ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1N'@;
put 'YXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwob3QsSG4pfDAscD0ocD1wK01hdGguaW11bChvdCxmdCl8MCkrTWF0aC5pbXVsKHV0LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxo'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXww'@;
put 'LHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsSXQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13'@;
put 'K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxJbil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0'@;
put 'aC5pbXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwoamUsc24pfDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQdCxIbil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChvdCxobil8MCxwPShwPXArTWF0aC5pbXVsKG90LHd0'@;
put 'KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0'@;
put 'aC5pbXVsKGx0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxJbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmlt'@;
put 'dWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAs'@;
put 'cWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGguaW11bChvdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13'@;
put 'K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVsKERlLEl0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0'@;
put 'aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9'@;
put 'dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwob3QscnQpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChvdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0'@;
put 'aC5pbXVsKFhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxJbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmlt'@;
put 'dWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAs'@;
put 'YW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxJdCksdj12K01hdGguaW11bChvdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13'@;
put 'K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxJbil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0'@;
put 'aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChvdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKG90LHp0'@;
put 'KXwwKStNYXRoLmltdWwodXQsSW4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChY'@;
put 'ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxJbikscD0ocD1N'@;
put 'YXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsSW4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwob3QseG4pfDAscD0ocD1wK01hdGguaW11bChvdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0'@;
put 'aC5pbXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhu'@;
put 'KSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKG90LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwob3QsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCkpPDwxMyl8MDtT'@;
put 'PSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsUm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJuKXwwKSk8PDEzKXwwO3JldHVybiBT'@;
put 'PSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1GbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1IcixDWzExXT1xaSxDWzEyXT1K'@;
put 'aSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9'@;
put 'TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZ'@;
put 'KEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxw'@;
put 'PU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02'@;
put 'NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90'@;
put 'b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxE'@;
put 'LWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0'@;
put 'ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9'@;
put 'TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLGplPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPWplKSxOW0orZmVdPUxlK09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109TGUtT2UsZmUhPT12JiYoamU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxu'@;
put 'ZT1qZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8'@;
put 'PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7'@;
put 'dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxD'@;
put 'PTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJh'@;
put 'eShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcg'@;
put 'QXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3'@;
put 'LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0'@;
put 'aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAo'@;
put 'KX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVy'@;
put 'biBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBl'@;
put 'b2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMm'@;
put 'Z31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0u'@;
put 'cHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIg'@;
put 'Tj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9'@;
put 'SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYt'@;
put 'RDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAh'@;
put 'PT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5s'@;
put 'ZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1D'@;
put 'LHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3Ro'@;
put 'aXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIs'@;
put 'RCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVz'@;
put 'aGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShi'@;
put 'LUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0'@;
put 'aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9'@;
put 'PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVn'@;
put 'YXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRo'@;
put 'aXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51'@;
put 'bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMu'@;
put 'bGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTty'@;
put 'ZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9'@;
put 'MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylT'@;
put 'PShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndv'@;
put 'cmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhD'@;
put 'KSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxw'@;
put 'Lmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtu'@;
put 'ZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0'@;
put 'aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkp'@;
put 'LHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcu'@;
put 'bmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2'@;
put 'ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRo'@;
put 'aXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4o'@;
put 'Yi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEx'@;
put 'KS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAh'@;
put 'PT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlw'@;
put 'ZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMp'@;
put 'O2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xv'@;
put 'bmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgw'@;
put 'KSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2'@;
put 'OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8'@;
put 'PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMu'@;
put 'aXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2Qo'@;
put 'Yik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5p'@;
put 'c09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgp'@;
put 'LE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVy'@;
put 'biB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hy'@;
put 'bigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5k'@;
put 'bG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRo'@;
put 'aXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0'@;
put 'aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09'@;
put 'PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRo'@;
put 'aXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJu'@;
put 'IDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBO'@;
put 'PTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlz'@;
put 'LmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0s'@;
put 'TS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJv'@;
put 'bVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5y'@;
put 'ZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRo'@;
put 'aXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'aWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0'@;
put 'aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk'@;
put 'LnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJ'@;
put 'TXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMu'@;
put 'cmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBu'@;
put 'dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMp'@;
put 'LHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlw'@;
put 'ZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMu'@;
put 'cmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9'@;
put 'bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5j'@;
put 'YWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1u'@;
put 'dWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1v'@;
put 'ZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYp'@;
put 'fWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1w'@;
put 'KSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQg'@;
put 'MCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5'@;
put 'cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIg'@;
put 'Qz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEw'@;
put 'PzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihE'@;
put 'Kz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1m'@;
put 'dW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9u'@;
put 'KGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2Ip'@;
put 'O0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5'@;
put 'cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9'@;
put 'ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5z'@;
put 'dWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9'@;
put 'ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBI'@;
put 'LmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5z'@;
put 'aGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5j'@;
put 'dGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIs'@;
put 'Yil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9'@;
put 'Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0u'@;
put 'Yml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9'@;
put 'PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIExlPXRoaXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxk'@;
put 'ZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlv'@;
put 'bihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5b'@;
put 'Z109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9'@;
put 'dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlz'@;
put 'Lm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5j'@;
put 'b252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUu'@;
put 'aW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1I'@;
put 'LmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVy'@;
put 'bygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1n'@;
put 'O3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlz'@;
put 'LnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSwzNjA3MjooYXQsSWUpPT57IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Zvcih2YXIgRj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsYWU9'@;
put 'bmV3IFVpbnQ4QXJyYXkoMjU2KSx4PTA7eDw2NDt4KyspYWVbRi5jaGFyQ29kZUF0KHgpXT14O0llLmM9ZnVuY3Rpb24obSl7dmFyIE0sbGU9bmV3IFVpbnQ4QXJyYXkobSksTz1sZS5sZW5ndGgsUj0iIjtmb3IoTT0wO008TztNKz0zKVIrPUZbbGVbTV0+PjJdLFIrPUZbKDMmbGVbTV0pPDw0'@;
put 'fGxlW00rMV0+PjRdLFIrPUZbKDE1JmxlW00rMV0pPDwyfGxlW00rMl0+PjZdLFIrPUZbNjMmbGVbTSsyXV07cmV0dXJuIE8lMz09Mj9SPVIuc3Vic3RyaW5nKDAsUi5sZW5ndGgtMSkrIj0iOk8lMz09MSYmKFI9Ui5zdWJzdHJpbmcoMCxSLmxlbmd0aC0yKSsiPT0iKSxSfSxJZS5KPWZ1bmN0'@;
put 'aW9uKG0pe3ZhciBPLHosSyxJLGssbGU9Ljc1Km0ubGVuZ3RoLE09bS5sZW5ndGgsUj0wOyI9Ij09PW1bbS5sZW5ndGgtMV0mJihsZS0tLCI9Ij09PW1bbS5sZW5ndGgtMl0mJmxlLS0pO3ZhciBFPW5ldyBBcnJheUJ1ZmZlcihsZSksaj1uZXcgVWludDhBcnJheShFKTtmb3IoTz0wO088TTtP'@;
put 'Kz00KXo9YWVbbS5jaGFyQ29kZUF0KE8pXSxLPWFlW20uY2hhckNvZGVBdChPKzEpXSxJPWFlW20uY2hhckNvZGVBdChPKzIpXSxrPWFlW20uY2hhckNvZGVBdChPKzMpXSxqW1IrK109ejw8MnxLPj40LGpbUisrXT0oMTUmSyk8PDR8ST4+MixqW1IrK109KDMmSSk8PDZ8NjMmaztyZXR1cm4g'@;
put 'RX19KCl9LDk5MTk6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0IjtJZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uIFIoail7dmFyIFY9TyhqKSxZPVZbMV07cmV0dXJuIDMqKFZbMF0rWSkvNC1ZfSxJZS50b0J5dGVBcnJheT1mdW5jdGlvbiBLKGope3ZhciBWLHRlLEI9TyhqKSxZPUJbMF0sWD1CWzFdLFU9'@;
put 'bmV3IHgoZnVuY3Rpb24geihqLFYsQil7cmV0dXJuIDMqKFYrQikvNC1CfSgwLFksWCkpLHE9MCxlZT1YPjA/WS00Olk7Zm9yKHRlPTA7dGU8ZWU7dGUrPTQpVj1hZVtqLmNoYXJDb2RlQXQodGUpXTw8MTh8YWVbai5jaGFyQ29kZUF0KHRlKzEpXTw8MTJ8YWVbai5jaGFyQ29kZUF0KHRlKzIp'@;
put 'XTw8NnxhZVtqLmNoYXJDb2RlQXQodGUrMyldLFVbcSsrXT1WPj4xNiYyNTUsVVtxKytdPVY+PjgmMjU1LFVbcSsrXT0yNTUmVjtyZXR1cm4gMj09PVgmJihWPWFlW2ouY2hhckNvZGVBdCh0ZSldPDwyfGFlW2ouY2hhckNvZGVBdCh0ZSsxKV0+PjQsVVtxKytdPTI1NSZWKSwxPT09WCYmKFY9'@;
put 'YWVbai5jaGFyQ29kZUF0KHRlKV08PDEwfGFlW2ouY2hhckNvZGVBdCh0ZSsxKV08PDR8YWVbai5jaGFyQ29kZUF0KHRlKzIpXT4+MixVW3ErK109Vj4+OCYyNTUsVVtxKytdPTI1NSZWKSxVfSxJZS5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIEUoail7Zm9yKHZhciBWLEI9ai5sZW5ndGgsWT1C'@;
put 'JTMsWD1bXSxVPTE2MzgzLHE9MCxlZT1CLVk7cTxlZTtxKz1VKVgucHVzaChrKGoscSxxK1U+ZWU/ZWU6cStVKSk7cmV0dXJuIDE9PT1ZP1gucHVzaChGWyhWPWpbQi0xXSk+PjJdK0ZbVjw8NCY2M10rIj09Iik6Mj09PVkmJlgucHVzaChGWyhWPShqW0ItMl08PDgpK2pbQi0xXSk+PjEwXStG'@;
put 'W1Y+PjQmNjNdK0ZbVjw8MiY2M10rIj0iKSxYLmpvaW4oIiIpfTtmb3IodmFyIEY9W10sYWU9W10seD10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxtPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsv'@;
put 'IixsZT0wO2xlPDY0OysrbGUpRltsZV09bVtsZV0sYWVbbS5jaGFyQ29kZUF0KGxlKV09bGU7ZnVuY3Rpb24gTyhqKXt2YXIgVj1qLmxlbmd0aDtpZihWJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgQj1q'@;
put 'LmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PUImJihCPVYpLFtCLEI9PT1WPzA6NC1CJTRdfWZ1bmN0aW9uIEkoail7cmV0dXJuIEZbaj4+MTgmNjNdK0Zbaj4+MTImNjNdK0Zbaj4+NiY2M10rRls2MyZqXX1mdW5jdGlvbiBrKGosVixCKXtmb3IodmFyIFg9W10sVT1WO1U8QjtVKz0zKVgucHVz'@;
put 'aChJKChqW1VdPDwxNiYxNjcxMTY4MCkrKGpbVSsxXTw8OCY2NTI4MCkrKDI1NSZqW1UrMl0pKSk7cmV0dXJuIFguam9pbigiIil9YWVbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGFlWyJfIi5jaGFyQ29kZUF0KDApXT02M30sNjI2NjI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgp'@;
put 'eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEgsTil7aWYoIUgpdGhyb3cgbmV3IEVycm9yKE58fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoSCxOKXtILnN1cGVyXz1OO3ZhciBnPWZ1bmN0aW9uKCl7fTtnLnByb3RvdHlwZT1OLnByb3RvdHlwZSxILnByb3RvdHlwZT1uZXcgZyxI'@;
put 'LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1IfWZ1bmN0aW9uIE0oSCxOLGcpe2lmKE0uaXNCTihIKSlyZXR1cm4gSDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09SCYmKCgibGUiPT09Tnx8ImJlIj09PU4pJiYoZz1OLE49'@;
put 'MTApLHRoaXMuX2luaXQoSHx8MCxOfHwxMCxnfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZl'@;
put 'cjpGKDQ2NjAxKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoSCxOKXt2YXIgZz1ILmNoYXJDb2RlQXQoTik7cmV0dXJuIGc+PTQ4JiZnPD01Nz9nLTQ4Omc+PTY1JiZnPD03MD9nLTU1Omc+PTk3JiZnPD0xMDI/Zy04Nzp2b2lkIG0oITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIrSCl9ZnVu'@;
put 'Y3Rpb24geihILE4sZyl7dmFyIEM9UihILGcpO3JldHVybiBnLTE+PU4mJihDfD1SKEgsZy0xKTw8NCksQ31mdW5jdGlvbiBLKEgsTixnLEMpe2Zvcih2YXIgUz0wLHY9MCxwPU1hdGgubWluKEgubGVuZ3RoLGcpLHc9Tjt3PHA7dysrKXt2YXIgSj1ILmNoYXJDb2RlQXQodyktNDg7Uyo9Qyx2'@;
put 'PUo+PTQ5P0otNDkrMTA6Sj49MTc/Si0xNysxMDpKLG0oSj49MCYmdjxDLCJJbnZhbGlkIGNoYXJhY3RlciIpLFMrPXZ9cmV0dXJuIFN9ZnVuY3Rpb24gSShILE4pe0gud29yZHM9Ti53b3JkcyxILmxlbmd0aD1OLmxlbmd0aCxILm5lZ2F0aXZlPU4ubmVnYXRpdmUsSC5yZWQ9Ti5yZWR9aWYo'@;
put 'TS5pc0JOPWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgTXx8bnVsbCE9PU4mJiJvYmplY3QiPT10eXBlb2YgTiYmTi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoTi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKE4sZyl7cmV0dXJuIE4uY21w'@;
put 'KGcpPjA/TjpnfSxNLm1pbj1mdW5jdGlvbihOLGcpe3JldHVybiBOLmNtcChnKTwwP046Z30sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTixnLEMpe2lmKCJudW1iZXIiPT10eXBlb2YgTilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihOLGcsQyk7aWYoIm9iamVjdCI9PXR5cGVvZiBOKXJl'@;
put 'dHVybiB0aGlzLl9pbml0QXJyYXkoTixnLEMpOyJoZXgiPT09ZyYmKGc9MTYpLG0oZz09PSgwfGcpJiZnPj0yJiZnPD0zNik7dmFyIFM9MDsiLSI9PT0oTj1OLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKFMrKyx0aGlzLm5lZ2F0aXZlPTEpLFM8Ti5sZW5ndGgmJigxNj09'@;
put 'PWc/dGhpcy5fcGFyc2VIZXgoTixTLEMpOih0aGlzLl9wYXJzZUJhc2UoTixnLFMpLCJsZSI9PT1DJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZyxDKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihOLGcsQyl7TjwwJiYodGhpcy5uZWdhdGl2ZT0xLE49LU4p'@;
put 'LE48NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJk5dLHRoaXMubGVuZ3RoPTEpOk48NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmTixOLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShOPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9'@;
put 'WzY3MTA4ODYzJk4sTi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09QyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGcsQyl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oTixnLEMpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBOLmxlbmd0'@;
put 'aCksTi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoTi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKXRoaXMud29yZHNb'@;
put 'U109MDt2YXIgdixwLHc9MDtpZigiYmUiPT09Qylmb3IoUz1OLmxlbmd0aC0xLHY9MDtTPj0wO1MtPTMpdGhpcy53b3Jkc1t2XXw9KHA9TltTXXxOW1MtMV08PDh8TltTLTJdPDwxNik8PHcmNjcxMDg4NjMsdGhpcy53b3Jkc1t2KzFdPXA+Pj4yNi13JjY3MTA4ODYzLCh3Kz0yNCk+PTI2JiYo'@;
put 'dy09MjYsdisrKTtlbHNlIGlmKCJsZSI9PT1DKWZvcihTPTAsdj0wO1M8Ti5sZW5ndGg7Uys9Myl0aGlzLndvcmRzW3ZdfD0ocD1OW1NdfE5bUysxXTw8OHxOW1MrMl08PDE2KTw8dyY2NzEwODg2Myx0aGlzLndvcmRzW3YrMV09cD4+PjI2LXcmNjcxMDg4NjMsKHcrPTI0KT49MjYmJih3LT0y'@;
put 'Nix2KyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oTixnLEMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoTi5sZW5ndGgtZykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7'@;
put 'UysrKXRoaXMud29yZHNbU109MDt2YXIgdyx2PTAscD0wO2lmKCJiZSI9PT1DKWZvcihTPU4ubGVuZ3RoLTE7Uz49ZztTLT0yKXc9eihOLGcsUyk8PHYsdGhpcy53b3Jkc1twXXw9NjcxMDg4NjMmdyx2Pj0xOD8odi09MTgsdGhpcy53b3Jkc1twKz0xXXw9dz4+PjI2KTp2Kz04O2Vsc2UgZm9y'@;
put 'KFM9KE4ubGVuZ3RoLWcpJTI9PTA/ZysxOmc7UzxOLmxlbmd0aDtTKz0yKXc9eihOLGcsUyk8PHYsdGhpcy53b3Jkc1twXXw9NjcxMDg4NjMmdyx2Pj0xOD8odi09MTgsdGhpcy53b3Jkc1twKz0xXXw9dz4+PjI2KTp2Kz04O3RoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9'@;
put 'ZnVuY3Rpb24oTixnLEMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBTPTAsdj0xO3Y8PTY3MTA4ODYzO3YqPWcpUysrO1MtLSx2PXYvZ3wwO2Zvcih2YXIgcD1OLmxlbmd0aC1DLHc9cCVTLEo9TWF0aC5taW4ocCxwLXcpK0MsbmU9MCxkZT1DO2RlPEo7ZGUrPVMpbmU9'@;
put 'SyhOLGRlLGRlK1MsZyksdGhpcy5pbXVsbih2KSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKTtpZigwIT09dyl7dmFyIGZlPTE7Zm9yKG5lPUsoTixkZSxOLmxlbmd0aCxnKSxkZT0wO2RlPHc7ZGUrKylmZSo9Zzt0aGlzLmltdWxu'@;
put 'KGZlKSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKX10aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKE4pe04ud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3Ro'@;
put 'O2crKylOLndvcmRzW2ddPXRoaXMud29yZHNbZ107Ti5sZW5ndGg9dGhpcy5sZW5ndGgsTi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLE4ucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihOKXtJKE4sdGhpcyl9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFy'@;
put 'IE49bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShOKSxOfSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKE4pe2Zvcig7dGhpcy5sZW5ndGg8TjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3Io'@;
put 'O3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRo'@;
put 'aXMubmVnYXRpdmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXtNLnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1rfWNhdGNoe00ucHJvdG90eXBlLmluc3BlY3Q9a31lbHNlIE0u'@;
put 'cHJvdG90eXBlLmluc3BlY3Q9aztmdW5jdGlvbiBrKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIEU9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwIl0saj1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxWPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3'@;
put 'MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTEx'@;
put 'NDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFgoSCxOLGcpe2cubmVnYXRpdmU9Ti5uZWdhdGl2ZV5ILm5lZ2F0aXZlO3ZhciBDPUgubGVuZ3RoK04ubGVuZ3RofDA7Zy5sZW5ndGg9QyxDPUMtMXwwO3ZhciBT'@;
put 'PTB8SC53b3Jkc1swXSx2PTB8Ti53b3Jkc1swXSxwPVMqdixKPXAvNjcxMDg4NjR8MDtnLndvcmRzWzBdPTY3MTA4ODYzJnA7Zm9yKHZhciBuZT0xO25lPEM7bmUrKyl7Zm9yKHZhciBkZT1KPj4+MjYsZmU9NjcxMDg4NjMmSix4ZT1NYXRoLm1pbihuZSxOLmxlbmd0aC0xKSxMZT1NYXRoLm1h'@;
put 'eCgwLG5lLUgubGVuZ3RoKzEpO0xlPD14ZTtMZSsrKWRlKz0ocD0oUz0wfEgud29yZHNbbmUtTGV8MF0pKih2PTB8Ti53b3Jkc1tMZV0pK2ZlKS82NzEwODg2NHwwLGZlPTY3MTA4ODYzJnA7Zy53b3Jkc1tuZV09MHxmZSxKPTB8ZGV9cmV0dXJuIDAhPT1KP2cud29yZHNbbmVdPTB8SjpnLmxl'@;
put 'bmd0aC0tLGcuX3N0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oTixnKXt2YXIgQztpZihnPTB8Z3x8MSwxNj09PShOPU58fDEwKXx8ImhleCI9PT1OKXtDPSIiO2Zvcih2YXIgUz0wLHY9MCxwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciB3PXRoaXMud29yZHNbcF0sSj0o'@;
put 'MTY3NzcyMTUmKHc8PFN8dikpLnRvU3RyaW5nKDE2KTt2PXc+Pj4yNC1TJjE2Nzc3MjE1LChTKz0yKT49MjYmJihTLT0yNixwLS0pLEM9MCE9PXZ8fHAhPT10aGlzLmxlbmd0aC0xP0VbNi1KLmxlbmd0aF0rSitDOkorQ31mb3IoMCE9PXYmJihDPXYudG9TdHJpbmcoMTYpK0MpO0MubGVuZ3Ro'@;
put 'JWchPTA7KUM9IjAiK0M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoQz0iLSIrQyksQ31pZihOPT09KDB8TikmJk4+PTImJk48PTM2KXt2YXIgbmU9altOXSxkZT1WW05dO0M9IiI7dmFyIGZlPXRoaXMuY2xvbmUoKTtmb3IoZmUubmVnYXRpdmU9MDshZmUuaXNaZXJvKCk7KXt2YXIgeGU9'@;
put 'ZmUubW9kcm4oZGUpLnRvU3RyaW5nKE4pO0M9KGZlPWZlLmlkaXZuKGRlKSkuaXNaZXJvKCk/eGUrQzpFW25lLXhlLmxlbmd0aF0reGUrQ31mb3IodGhpcy5pc1plcm8oKSYmKEM9IjAiK0MpO0MubGVuZ3RoJWchPTA7KUM9IjAiK0M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoQz0iLSIr'@;
put 'QyksQ31tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP04rPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYx'@;
put 'PT09dGhpcy53b3Jkc1syXT9OKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LU46Tn0sTS5wcm90b3R5cGUudG9K'@;
put 'U09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LE8mJihNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihOLGcpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKE8sTixnKX0pLE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy50b0Fy'@;
put 'cmF5TGlrZShBcnJheSxOLGcpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihOLGcsQyl7dGhpcy5fc3RyaXAoKTt2YXIgUz10aGlzLmJ5dGVMZW5ndGgoKSx2PUN8fE1hdGgubWF4KDEsUyk7bShTPD12LCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiks'@;
put 'bSh2PjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBwPWZ1bmN0aW9uKE4sZyl7cmV0dXJuIE4uYWxsb2NVbnNhZmU/Ti5hbGxvY1Vuc2FmZShnKTpuZXcgTihnKX0oTix2KTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PWc/IkxFIjoiQkUiKV0ocCxTKSxw'@;
put 'fSxNLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihOLGcpe2Zvcih2YXIgQz0wLFM9MCx2PTAscD0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgdz10aGlzLndvcmRzW3ZdPDxwfFM7TltDKytdPTI1NSZ3LEM8Ti5sZW5ndGgmJihOW0MrK109dz4+OCYyNTUpLEM8Ti5sZW5ndGgm'@;
put 'JihOW0MrK109dz4+MTYmMjU1KSw2PT09cD8oQzxOLmxlbmd0aCYmKE5bQysrXT13Pj4yNCYyNTUpLFM9MCxwPTApOihTPXc+Pj4yNCxwKz0yKX1pZihDPE4ubGVuZ3RoKWZvcihOW0MrK109UztDPE4ubGVuZ3RoOylOW0MrK109MH0sTS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rp'@;
put 'b24oTixnKXtmb3IodmFyIEM9Ti5sZW5ndGgtMSxTPTAsdj0wLHA9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFyIHc9dGhpcy53b3Jkc1t2XTw8cHxTO05bQy0tXT0yNTUmdyxDPj0wJiYoTltDLS1dPXc+PjgmMjU1KSxDPj0wJiYoTltDLS1dPXc+PjE2JjI1NSksNj09PXA/KEM+PTAmJihOW0Mt'@;
put 'LV09dz4+MjQmMjU1KSxTPTAscD0wKTooUz13Pj4+MjQscCs9Mil9aWYoQz49MClmb3IoTltDLS1dPVM7Qz49MDspTltDLS1dPTB9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihOKXtyZXR1cm4gMzItTWF0aC5jbHozMihOKX06ZnVuY3Rpb24oTil7dmFyIGc9'@;
put 'TixDPTA7cmV0dXJuIGc+PTQwOTYmJihDKz0xMyxnPj4+PTEzKSxnPj02NCYmKEMrPTcsZz4+Pj03KSxnPj04JiYoQys9NCxnPj4+PTQpLGc+PTImJihDKz0yLGc+Pj49MiksQytnfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIDI2O3ZhciBnPU4s'@;
put 'Qz0wO3JldHVybiA4MTkxJmd8fChDKz0xMyxnPj4+PTEzKSwxMjcmZ3x8KEMrPTcsZz4+Pj03KSwxNSZnfHwoQys9NCxnPj4+PTQpLDMmZ3x8KEMrPTIsZz4+Pj0yKSwxJmd8fEMrKyxDfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9jb3VudEJpdHModGhp'@;
put 'cy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStnfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBOPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgQz10aGlzLl96ZXJvQml0'@;
put 'cyh0aGlzLndvcmRzW2ddKTtpZihOKz1DLDI2IT09QylicmVha31yZXR1cm4gTn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKE4pe3JldHVybiAwIT09dGhp'@;
put 'cy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKE4pLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMudGVzdG4oTi0xKT90aGlzLm5vdG4oTikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUu'@;
put 'aXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0x'@;
put 'KSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKE4pe2Zvcig7dGhpcy5sZW5ndGg8Ti5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGc9MDtnPE4ubGVuZ3RoO2crKyl0aGlzLndvcmRzW2ddPXRoaXMud29yZHNbZ118Ti53b3Jkc1tnXTtyZXR1cm4g'@;
put 'dGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfE4ubmVnYXRpdmUpKSx0aGlzLml1b3IoTil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCku'@;
put 'aW9yKE4pOk4uY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoTik6Ti5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKE4pe3ZhciBnO2c9'@;
put 'dGhpcy5sZW5ndGg+Ti5sZW5ndGg/Tjp0aGlzO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXSZOLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1nLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKE4p'@;
put 'e3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfE4ubmVnYXRpdmUpKSx0aGlzLml1YW5kKE4pfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKE4pOk4uY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlw'@;
put 'ZS51YW5kPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoTik6Ti5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihOKXt2YXIgZyxDO3RoaXMubGVuZ3RoPk4ubGVuZ3RoPyhnPXRoaXMsQz1OKToo'@;
put 'Zz1OLEM9dGhpcyk7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1nLndvcmRzW1NdXkMud29yZHNbU107aWYodGhpcyE9PWcpZm9yKDtTPGcubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPWcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPWcubGVuZ3RoLHRoaXMu'@;
put 'X3N0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oTil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Ti5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoTil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLml4'@;
put 'b3IoTik6Ti5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihOKTpOLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKE4pe20oIm51'@;
put 'bWJlciI9PXR5cGVvZiBOJiZOPj0wKTt2YXIgZz0wfE1hdGguY2VpbChOLzI2KSxDPU4lMjY7dGhpcy5fZXhwYW5kKGcpLEM+MCYmZy0tO2Zvcih2YXIgUz0wO1M8ZztTKyspdGhpcy53b3Jkc1tTXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tTXTtyZXR1cm4gQz4wJiYodGhpcy53b3Jkc1tTXT1+'@;
put 'dGhpcy53b3Jkc1tTXSY2NzEwODg2Mz4+MjYtQyksdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKE4pfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKE4sZyl7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApO3Zh'@;
put 'ciBDPU4vMjZ8MCxTPU4lMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChDKzEpLHRoaXMud29yZHNbQ109Zz90aGlzLndvcmRzW0NdfDE8PFM6dGhpcy53b3Jkc1tDXSZ+KDE8PFMpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oTil7dmFyIGcsQyxTO2lmKDAhPT10aGlz'@;
put 'Lm5lZ2F0aXZlJiYwPT09Ti5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGc9dGhpcy5pc3ViKE4pLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PU4ubmVnYXRpdmUpcmV0dXJuIE4ubmVnYXRpdmU9MCxnPXRoaXMuaXN1'@;
put 'YihOKSxOLm5lZ2F0aXZlPTEsZy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5OLmxlbmd0aD8oQz10aGlzLFM9Tik6KEM9TixTPXRoaXMpO2Zvcih2YXIgdj0wLHA9MDtwPFMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJihnPSgwfEMud29yZHNbcF0pKygwfFMud29yZHNbcF0p'@;
put 'K3YpLHY9Zz4+PjI2O2Zvcig7MCE9PXYmJnA8Qy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmKGc9KDB8Qy53b3Jkc1twXSkrdiksdj1nPj4+MjY7aWYodGhpcy5sZW5ndGg9Qy5sZW5ndGgsMCE9PXYpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09dix0aGlzLmxlbmd0aCsrO2Vs'@;
put 'c2UgaWYoQyE9PXRoaXMpZm9yKDtwPEMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPUMud29yZHNbcF07cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXt2YXIgZztyZXR1cm4gMCE9PU4ubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhOLm5lZ2F0aXZlPTAsZz10'@;
put 'aGlzLnN1YihOKSxOLm5lZ2F0aXZlXj0xLGcpOjA9PT1OLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGc9Ti5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGcpOnRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKE4pOk4uY2xvbmUoKS5p'@;
put 'YWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKE4pe2lmKDAhPT1OLm5lZ2F0aXZlKXtOLm5lZ2F0aXZlPTA7dmFyIGc9dGhpcy5pYWRkKE4pO3JldHVybiBOLm5lZ2F0aXZlPTEsZy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2'@;
put 'ZT0wLHRoaXMuaWFkZChOKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LEM9dGhpcy5jbXAoTik7aWYoMD09PUMpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0M+MD8oUz10aGlzLHY9Tik6KFM9Tix2PXRo'@;
put 'aXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKylwPShnPSgwfFMud29yZHNbd10pLSgwfHYud29yZHNbd10pK3ApPj4yNix0aGlzLndvcmRzW3ddPTY3MTA4ODYzJmc7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3KyspcD0oZz0oMHxTLndvcmRzW3ddKStwKT4+MjYsdGhpcy53b3Jk'@;
put 'c1t3XT02NzEwODg2MyZnO2lmKDA9PT1wJiZ3PFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsdyksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRo'@;
put 'aXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoTil9O3ZhciBVPWZ1bmN0aW9uKE4sZyxDKXt2YXIgSixuZSxkZSxTPU4ud29yZHMsdj1nLndvcmRzLHA9Qy53b3Jkcyx3PTAsZmU9MHxTWzBdLHhlPTgxOTEmZmUsTGU9ZmU+'@;
put 'Pj4xMyxGZT0wfFNbMV0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8U1syXSxLZT04MTkxJldlLFllPVdlPj4+MTMsUWU9MHxTWzNdLGx0PTgxOTEmUWUsUGU9UWU+Pj4xMyxiZT0wfFNbNF0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8U1s1XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMs'@;
put 'aHQ9MHxTWzZdLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfFNbN10sb3Q9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8U1s4XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxTWzldLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfHZbMF0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8'@;
put 'dlsxXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHx2WzJdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfHZbM10sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8dls0XSxydD04MTkxJm1uLEl0PW1uPj4+MTMsUXQ9MHx2WzVdLER0PTgxOTEmUXQscHQ9UXQ+Pj4xMyxZdD0wfHZbNl0s'@;
put 'SW49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8dls3XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHx2WzhdLFJuPTgxOTEmQm4sJHQ9Qm4+Pj4xMyxGbj0wfHZbOV0sbmk9ODE5MSZGbixsbj1Gbj4+PjEzO0MubmVnYXRpdmU9Ti5uZWdhdGl2ZV5nLm5lZ2F0aXZlLEMubGVuZ3RoPTE5O3Zh'@;
put 'ciBqbj0odysoSj1NYXRoLmltdWwoeGUsV24pKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoeGUsZW4pKStNYXRoLmltdWwoTGUsV24pfDApKTw8MTMpfDA7dz0oKGRlPU1hdGguaW11bChMZSxlbikpKyhuZT4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsSj1NYXRoLmlt'@;
put 'dWwoT2UsV24pLG5lPShuZT1NYXRoLmltdWwoT2UsZW4pKStNYXRoLmltdWwoamUsV24pfDAsZGU9TWF0aC5pbXVsKGplLGVuKTt2YXIgcXI9KHcrKEo9SitNYXRoLmltdWwoeGUsSG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhu'@;
put 'KXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsZnQpfDApKyhuZT4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoS2UsV24pLG5lPShuZT1NYXRoLmltdWwoS2UsZW4pKStNYXRoLmltdWwoWWUsV24pfDAsZGU9TWF0aC5pbXVsKFllLGVuKSxK'@;
put 'PUorTWF0aC5pbXVsKE9lLEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChqZSxIbil8MCxkZT1kZStNYXRoLmltdWwoamUsZnQpfDA7dmFyIGdpPSh3KyhKPUorTWF0aC5pbXVsKHhlLGhuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUs'@;
put 'd3QpfDApK01hdGguaW11bChMZSxobil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLHd0KXwwKSsobmU+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGx0LFduKSxuZT0obmU9TWF0aC5pbXVsKGx0LGVuKSkrTWF0aC5pbXVsKFBlLFduKXww'@;
put 'LGRlPU1hdGguaW11bChQZSxlbiksSj1KK01hdGguaW11bChLZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLGZ0KXwwLEo9SitNYXRoLmltdWwoT2UsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSx3'@;
put 'dCl8MCkrTWF0aC5pbXVsKGplLGhuKXwwLGRlPWRlK01hdGguaW11bChqZSx3dCl8MDt2YXIgeHI9KHcrKEo9SitNYXRoLmltdWwoeGUsX3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwKSk8PDEzKXwwO3c9KChkZT1kZStN'@;
put 'YXRoLmltdWwoTGUsTnQpfDApKyhuZT4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQWUsV24pLG5lPShuZT1NYXRoLmltdWwoQWUsZW4pKStNYXRoLmltdWwoVGUsV24pfDAsZGU9TWF0aC5pbXVsKFRlLGVuKSxKPUorTWF0aC5pbXVsKGx0LEhuKXwwLG5l'@;
put 'PShuZT1uZStNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCxkZT1kZStNYXRoLmltdWwoUGUsZnQpfDAsSj1KK01hdGguaW11bChLZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHd0'@;
put 'KXwwLEo9SitNYXRoLmltdWwoT2UsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLGRlPWRlK01hdGguaW11bChqZSxOdCl8MDt2YXIgVWk9KHcrKEo9SitNYXRoLmltdWwoeGUscnQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11'@;
put 'bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsSXQpfDApKyhuZT4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoWGUsV24pLG5lPShuZT1NYXRoLmltdWwoWGUsZW4pKStNYXRoLmltdWwoVWUs'@;
put 'V24pfDAsZGU9TWF0aC5pbXVsKFVlLGVuKSxKPUorTWF0aC5pbXVsKEFlLEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCxkZT1kZStNYXRoLmltdWwoVGUsZnQpfDAsSj1KK01hdGguaW11bChsdCxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVs'@;
put 'KGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHd0KXwwLEo9SitNYXRoLmltdWwoS2UsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLGRlPWRlK01hdGguaW11bChZZSxOdCl8MCxKPUorTWF0aC5pbXVs'@;
put 'KE9lLHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChqZSxydCl8MCxkZT1kZStNYXRoLmltdWwoamUsSXQpfDA7dmFyIEtyPSh3KyhKPUorTWF0aC5pbXVsKHhlLER0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUscHQpfDApK01hdGgu'@;
put 'aW11bChMZSxEdCl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLHB0KXwwKSsobmU+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKE1lLFduKSxuZT0obmU9TWF0aC5pbXVsKE1lLGVuKSkrTWF0aC5pbXVsKERlLFduKXwwLGRlPU1hdGguaW11'@;
put 'bChEZSxlbiksSj1KK01hdGguaW11bChYZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLGZ0KXwwLEo9SitNYXRoLmltdWwoQWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5p'@;
put 'bXVsKFRlLGhuKXwwLGRlPWRlK01hdGguaW11bChUZSx3dCl8MCxKPUorTWF0aC5pbXVsKGx0LF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoUGUsTnQpfDAsSj1KK01hdGguaW11bChLZSxydCl8MCxuZT0obmU9'@;
put 'bmUrTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFllLEl0KXwwLEo9SitNYXRoLmltdWwoT2UsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKGplLER0KXwwLGRlPWRlK01hdGguaW11bChqZSxwdCl8MDt2'@;
put 'YXIgbm89KHcrKEo9SitNYXRoLmltdWwoeGUsSW4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLEluKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsenQpfDApKyhuZT4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9Njcx'@;
put 'MDg4NjMsSj1NYXRoLmltdWwob3QsV24pLG5lPShuZT1NYXRoLmltdWwob3QsZW4pKStNYXRoLmltdWwodXQsV24pfDAsZGU9TWF0aC5pbXVsKHV0LGVuKSxKPUorTWF0aC5pbXVsKE1lLEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCxkZT1k'@;
put 'ZStNYXRoLmltdWwoRGUsZnQpfDAsSj1KK01hdGguaW11bChYZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHd0KXwwLEo9SitNYXRoLmltdWwoQWUsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxO'@;
put 'dCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLGRlPWRlK01hdGguaW11bChUZSxOdCl8MCxKPUorTWF0aC5pbXVsKGx0LHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCxkZT1kZStNYXRoLmltdWwoUGUsSXQpfDAsSj1KK01hdGguaW11bChLZSxE'@;
put 'dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHB0KXwwLEo9SitNYXRoLmltdWwoT2UsSW4pfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKGplLEluKXwwLGRlPWRlK01hdGguaW11'@;
put 'bChqZSx6dCl8MDt2YXIgSHI9KHcrKEo9SitNYXRoLmltdWwoeGUseG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsc24pfDApKyhuZT4+PjEzKXwwKSsoSHI+Pj4y'@;
put 'Nil8MCxIciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoSHQsV24pLG5lPShuZT1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsZGU9TWF0aC5pbXVsKFB0LGVuKSxKPUorTWF0aC5pbXVsKG90LEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsZnQpfDApK01hdGguaW11bCh1'@;
put 'dCxIbil8MCxkZT1kZStNYXRoLmltdWwodXQsZnQpfDAsSj1KK01hdGguaW11bChNZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKERlLHd0KXwwLEo9SitNYXRoLmltdWwoWGUsX3QpfDAsbmU9KG5lPW5lK01h'@;
put 'dGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLGRlPWRlK01hdGguaW11bChVZSxOdCl8MCxKPUorTWF0aC5pbXVsKEFlLHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCxkZT1kZStNYXRoLmltdWwoVGUsSXQpfDAsSj1KK01h'@;
put 'dGguaW11bChsdCxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHB0KXwwLEo9SitNYXRoLmltdWwoS2UsSW4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLEluKXwwLGRl'@;
put 'PWRlK01hdGguaW11bChZZSx6dCl8MCxKPUorTWF0aC5pbXVsKE9lLHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChqZSx4bil8MCxkZT1kZStNYXRoLmltdWwoamUsc24pfDA7dmFyIHFpPSh3KyhKPUorTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEm'@;
put 'KG5lPShuZT1uZStNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxSbil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLCR0KXwwKSsobmU+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLFduKSxuZT0obmU9TWF0aC5pbXVsKENu'@;
put 'LGVuKSkrTWF0aC5pbXVsKFV0LFduKXwwLGRlPU1hdGguaW11bChVdCxlbiksSj1KK01hdGguaW11bChIdCxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LGZ0KXwwKStNYXRoLmltdWwoUHQsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LGZ0KXwwLEo9SitNYXRoLmltdWwob3QsaG4pfDAs'@;
put 'bmU9KG5lPW5lK01hdGguaW11bChvdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLGRlPWRlK01hdGguaW11bCh1dCx3dCl8MCxKPUorTWF0aC5pbXVsKE1lLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoRGUs'@;
put 'TnQpfDAsSj1KK01hdGguaW11bChYZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLEl0KXwwLEo9SitNYXRoLmltdWwoQWUsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVs'@;
put 'KFRlLER0KXwwLGRlPWRlK01hdGguaW11bChUZSxwdCl8MCxKPUorTWF0aC5pbXVsKGx0LEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxJbil8MCxkZT1kZStNYXRoLmltdWwoUGUsenQpfDAsSj1KK01hdGguaW11bChLZSx4bil8MCxuZT0obmU9bmUr'@;
put 'TWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHNuKXwwLEo9SitNYXRoLmltdWwoT2UsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJuKXwwLGRlPWRlK01hdGguaW11bChqZSwkdCl8MDt2YXIg'@;
put 'Smk9KHcrKEo9SitNYXRoLmltdWwoeGUsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKExlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsbG4pfDApKyhuZT4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4'@;
put 'NjMsSj1NYXRoLmltdWwoQ24sSG4pLG5lPShuZT1NYXRoLmltdWwoQ24sZnQpKStNYXRoLmltdWwoVXQsSG4pfDAsZGU9TWF0aC5pbXVsKFV0LGZ0KSxKPUorTWF0aC5pbXVsKEh0LGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsd3QpfDApK01hdGguaW11bChQdCxobil8MCxkZT1kZStN'@;
put 'YXRoLmltdWwoUHQsd3QpfDAsSj1KK01hdGguaW11bChvdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG90LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LE50KXwwLEo9SitNYXRoLmltdWwoTWUscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxJdCl8'@;
put 'MCkrTWF0aC5pbXVsKERlLHJ0KXwwLGRlPWRlK01hdGguaW11bChEZSxJdCl8MCxKPUorTWF0aC5pbXVsKFhlLER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoVWUscHQpfDAsSj1KK01hdGguaW11bChBZSxJbil8'@;
put 'MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKFRlLHp0KXwwLEo9SitNYXRoLmltdWwobHQseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLGRlPWRlK01hdGguaW11bChQ'@;
put 'ZSxzbil8MCxKPUorTWF0aC5pbXVsKEtlLFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8MCxkZT1kZStNYXRoLmltdWwoWWUsJHQpfDA7dmFyIGFvPSh3KyhKPUorTWF0aC5pbXVsKE9lLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoT2UsbG4pfDApK01hdGguaW11bChqZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKGplLGxuKXwwKSsobmU+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLGhuKSxuZT0obmU9TWF0aC5pbXVsKENuLHd0KSkrTWF0aC5pbXVs'@;
put 'KFV0LGhuKXwwLGRlPU1hdGguaW11bChVdCx3dCksSj1KK01hdGguaW11bChIdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LE50KXwwKStNYXRoLmltdWwoUHQsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LE50KXwwLEo9SitNYXRoLmltdWwob3QscnQpfDAsbmU9KG5lPW5lK01hdGgu'@;
put 'aW11bChvdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLGRlPWRlK01hdGguaW11bCh1dCxJdCl8MCxKPUorTWF0aC5pbXVsKE1lLER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoRGUscHQpfDAsSj1KK01hdGgu'@;
put 'aW11bChYZSxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHp0KXwwLEo9SitNYXRoLmltdWwoQWUseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLGRlPWRl'@;
put 'K01hdGguaW11bChUZSxzbil8MCxKPUorTWF0aC5pbXVsKGx0LFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCxkZT1kZStNYXRoLmltdWwoUGUsJHQpfDA7dmFyIHJvPSh3KyhKPUorTWF0aC5pbXVsKEtlLG5pKXwwKXwwKSsoKDgxOTEmKG5l'@;
put 'PShuZT1uZStNYXRoLmltdWwoS2UsbG4pfDApK01hdGguaW11bChZZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFllLGxuKXwwKSsobmU+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLF90KSxuZT0obmU9TWF0aC5pbXVsKENuLE50'@;
put 'KSkrTWF0aC5pbXVsKFV0LF90KXwwLGRlPU1hdGguaW11bChVdCxOdCksSj1KK01hdGguaW11bChIdCxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LEl0KXwwKStNYXRoLmltdWwoUHQscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LEl0KXwwLEo9SitNYXRoLmltdWwob3QsRHQpfDAsbmU9'@;
put 'KG5lPW5lK01hdGguaW11bChvdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLGRlPWRlK01hdGguaW11bCh1dCxwdCl8MCxKPUorTWF0aC5pbXVsKE1lLEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxJbil8MCxkZT1kZStNYXRoLmltdWwoRGUsenQp'@;
put 'fDAsSj1KK01hdGguaW11bChYZSx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHNuKXwwLEo9SitNYXRoLmltdWwoQWUsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRl'@;
put 'LFJuKXwwLGRlPWRlK01hdGguaW11bChUZSwkdCl8MDt2YXIgaW89KHcrKEo9SitNYXRoLmltdWwobHQsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChsdCxsbil8MCkrTWF0aC5pbXVsKFBlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoUGUsbG4pfDAp'@;
put 'KyhuZT4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24scnQpLG5lPShuZT1NYXRoLmltdWwoQ24sSXQpKStNYXRoLmltdWwoVXQscnQpfDAsZGU9TWF0aC5pbXVsKFV0LEl0KSxKPUorTWF0aC5pbXVsKEh0LER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'SHQscHQpfDApK01hdGguaW11bChQdCxEdCl8MCxkZT1kZStNYXRoLmltdWwoUHQscHQpfDAsSj1KK01hdGguaW11bChvdCxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG90LHp0KXwwKStNYXRoLmltdWwodXQsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LHp0KXwwLEo9SitNYXRoLmltdWwo'@;
put 'TWUseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLGRlPWRlK01hdGguaW11bChEZSxzbil8MCxKPUorTWF0aC5pbXVsKFhlLFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCxkZT1kZStNYXRo'@;
put 'LmltdWwoVWUsJHQpfDA7dmFyIEdpPSh3KyhKPUorTWF0aC5pbXVsKEFlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoQWUsbG4pfDApK01hdGguaW11bChUZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFRlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKEdp'@;
put 'Pj4+MjYpfDAsR2kmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLER0KSxuZT0obmU9TWF0aC5pbXVsKENuLHB0KSkrTWF0aC5pbXVsKFV0LER0KXwwLGRlPU1hdGguaW11bChVdCxwdCksSj1KK01hdGguaW11bChIdCxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHp0KXwwKStNYXRoLmlt'@;
put 'dWwoUHQsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHp0KXwwLEo9SitNYXRoLmltdWwob3QseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChvdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLGRlPWRlK01hdGguaW11bCh1dCxzbil8MCxKPUorTWF0aC5pbXVsKE1lLFJuKXwwLG5lPShuZT1u'@;
put 'ZStNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCxkZT1kZStNYXRoLmltdWwoRGUsJHQpfDA7dmFyIGhvPSh3KyhKPUorTWF0aC5pbXVsKFhlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoWGUsbG4pfDApK01hdGguaW11bChVZSxuaSl8MCkpPDwx'@;
put 'Myl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFVlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLEluKSxuZT0obmU9TWF0aC5pbXVsKENuLHp0KSkrTWF0aC5pbXVsKFV0LEluKXwwLGRlPU1hdGguaW11bChVdCx6dCksSj1KK01hdGgu'@;
put 'aW11bChIdCx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHNuKXwwKStNYXRoLmltdWwoUHQseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHNuKXwwLEo9SitNYXRoLmltdWwob3QsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChvdCwkdCl8MCkrTWF0aC5pbXVsKHV0LFJuKXwwLGRlPWRl'@;
put 'K01hdGguaW11bCh1dCwkdCl8MDt2YXIgeXI9KHcrKEo9SitNYXRoLmltdWwoTWUsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChNZSxsbil8MCkrTWF0aC5pbXVsKERlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoRGUsbG4pfDApKyhuZT4+PjEzKXww'@;
put 'KSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24seG4pLG5lPShuZT1NYXRoLmltdWwoQ24sc24pKStNYXRoLmltdWwoVXQseG4pfDAsZGU9TWF0aC5pbXVsKFV0LHNuKSxKPUorTWF0aC5pbXVsKEh0LFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsJHQpfDApK01h'@;
put 'dGguaW11bChQdCxSbil8MCxkZT1kZStNYXRoLmltdWwoUHQsJHQpfDA7dmFyIFBpPSh3KyhKPUorTWF0aC5pbXVsKG90LG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwob3QsbG4pfDApK01hdGguaW11bCh1dCxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVs'@;
put 'KHV0LGxuKXwwKSsobmU+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLFJuKSxuZT0obmU9TWF0aC5pbXVsKENuLCR0KSkrTWF0aC5pbXVsKFV0LFJuKXwwLGRlPU1hdGguaW11bChVdCwkdCk7dmFyIExvPSh3KyhKPUorTWF0aC5pbXVsKEh0LG5pKXww'@;
put 'KXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoSHQsbG4pfDApK01hdGguaW11bChQdCxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFB0LGxuKXwwKSsobmU+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzO3ZhciBocz0odysoSj1NYXRoLmltdWwoQ24s'@;
put 'bmkpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoQ24sbG4pKStNYXRoLmltdWwoVXQsbmkpfDApKTw8MTMpfDA7cmV0dXJuIHc9KChkZT1NYXRoLmltdWwoVXQsbG4pKSsobmU+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzLHBbMF09am4scFsxXT1xcixwWzJdPWdpLHBb'@;
put 'M109eHIscFs0XT1VaSxwWzVdPUtyLHBbNl09bm8scFs3XT1IcixwWzhdPXFpLHBbOV09SmkscFsxMF09YW8scFsxMV09cm8scFsxMl09aW8scFsxM109R2kscFsxNF09aG8scFsxNV09eXIscFsxNl09UGkscFsxN109TG8scFsxOF09aHMsMCE9PXcmJihwWzE5XT13LEMubGVuZ3RoKyspLEN9'@;
put 'O2Z1bmN0aW9uIHEoSCxOLGcpe2cubmVnYXRpdmU9Ti5uZWdhdGl2ZV5ILm5lZ2F0aXZlLGcubGVuZ3RoPUgubGVuZ3RoK04ubGVuZ3RoO2Zvcih2YXIgQz0wLFM9MCx2PTA7djxnLmxlbmd0aC0xO3YrKyl7dmFyIHA9UztTPTA7Zm9yKHZhciB3PTY3MTA4ODYzJkMsSj1NYXRoLm1pbih2LE4u'@;
put 'bGVuZ3RoLTEpLG5lPU1hdGgubWF4KDAsdi1ILmxlbmd0aCsxKTtuZTw9SjtuZSsrKXt2YXIgTGU9KDB8SC53b3Jkc1t2LW5lXSkqKDB8Ti53b3Jkc1tuZV0pLEZlPTY3MTA4ODYzJkxlO3c9NjcxMDg4NjMmKEZlPUZlK3d8MCksUys9KHA9KHA9cCsoTGUvNjcxMDg4NjR8MCl8MCkrKEZlPj4+'@;
put 'MjYpfDApPj4+MjYscCY9NjcxMDg4NjN9Zy53b3Jkc1t2XT13LEM9cCxwPVN9cmV0dXJuIDAhPT1DP2cud29yZHNbdl09QzpnLmxlbmd0aC0tLGcuX3N0cmlwKCl9ZnVuY3Rpb24gZWUoSCxOLGcpe3JldHVybiBxKEgsTixnKX1mdW5jdGlvbiB0ZShILE4pe3RoaXMueD1ILHRoaXMueT1OfU1h'@;
put 'dGguaW11bHx8KFU9WCksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oTixnKXt2YXIgUz10aGlzLmxlbmd0aCtOLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1OLmxlbmd0aD9VKHRoaXMsTixnKTpTPDYzP1godGhpcyxOLGcpOlM8MTAyND9xKHRoaXMsTixnKTplZSh0'@;
put 'aGlzLE4sZyl9LHRlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKE4pe2Zvcih2YXIgZz1uZXcgQXJyYXkoTiksQz1NLnByb3RvdHlwZS5fY291bnRCaXRzKE4pLTEsUz0wO1M8TjtTKyspZ1tTXT10aGlzLnJldkJpbihTLEMsTik7cmV0dXJuIGd9LHRlLnByb3RvdHlwZS5yZXZCaW49ZnVu'@;
put 'Y3Rpb24oTixnLEMpe2lmKDA9PT1OfHxOPT09Qy0xKXJldHVybiBOO2Zvcih2YXIgUz0wLHY9MDt2PGc7disrKVN8PSgxJk4pPDxnLXYtMSxOPj49MTtyZXR1cm4gU30sdGUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oTixnLEMsUyx2LHApe2Zvcih2YXIgdz0wO3c8cDt3KyspU1t3XT1n'@;
put 'W05bd11dLHZbd109Q1tOW3ddXX0sdGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihOLGcsQyxTLHYscCl7dGhpcy5wZXJtdXRlKHAsTixnLEMsUyx2KTtmb3IodmFyIHc9MTt3PHY7dzw8PTEpZm9yKHZhciBKPXc8PDEsbmU9TWF0aC5jb3MoMipNYXRoLlBJL0opLGRlPU1hdGguc2lu'@;
put 'KDIqTWF0aC5QSS9KKSxmZT0wO2ZlPHY7ZmUrPUopZm9yKHZhciB4ZT1uZSxMZT1kZSxGZT0wO0ZlPHc7RmUrKyl7dmFyIE9lPUNbZmUrRmVdLGplPVNbZmUrRmVdLFdlPUNbZmUrRmUrd10sS2U9U1tmZStGZSt3XSxZZT14ZSpXZS1MZSpLZTtLZT14ZSpLZStMZSpXZSxDW2ZlK0ZlXT1PZSso'@;
put 'V2U9WWUpLFNbZmUrRmVdPWplK0tlLENbZmUrRmUrd109T2UtV2UsU1tmZStGZSt3XT1qZS1LZSxGZSE9PUomJihZZT1uZSp4ZS1kZSpMZSxMZT1uZSpMZStkZSp4ZSx4ZT1ZZSl9fSx0ZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oTixnKXt2YXIgQz0xfE1hdGgubWF4KGcsTiks'@;
put 'Uz0xJkMsdj0wO2ZvcihDPUMvMnwwO0M7Qz4+Pj0xKXYrKztyZXR1cm4gMTw8disxK1N9LHRlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oTixnLEMpe2lmKCEoQzw9MSkpZm9yKHZhciBTPTA7UzxDLzI7UysrKXt2YXIgdj1OW1NdO05bU109TltDLVMtMV0sTltDLVMtMV09dix2PWdb'@;
put 'U10sZ1tTXT0tZ1tDLVMtMV0sZ1tDLVMtMV09LXZ9fSx0ZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy8yO1MrKyl7dmFyIHY9ODE5MipNYXRoLnJvdW5kKE5bMipTKzFdL2cpK01hdGgucm91bmQoTlsyKlNdL2cpK0M7TltTXT02NzEw'@;
put 'ODg2MyZ2LEM9djw2NzEwODg2ND8wOnYvNjcxMDg4NjR8MH1yZXR1cm4gTn0sdGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oTixnLEMsUyl7Zm9yKHZhciB2PTAscD0wO3A8ZztwKyspQ1syKnBdPTgxOTEmKHYrPTB8TltwXSksQ1syKnArMV09ODE5MSYodj4+Pj0xMyksdj4+Pj0x'@;
put 'Mztmb3IocD0yKmc7cDxTOysrcClDW3BdPTA7bSgwPT09diksbSgwPT0oLTgxOTImdikpfSx0ZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihOKXtmb3IodmFyIGc9bmV3IEFycmF5KE4pLEM9MDtDPE47QysrKWdbQ109MDtyZXR1cm4gZ30sdGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oTixn'@;
put 'LEMpe3ZhciBTPTIqdGhpcy5ndWVzc0xlbjEzYihOLmxlbmd0aCxnLmxlbmd0aCksdj10aGlzLm1ha2VSQlQoUykscD10aGlzLnN0dWIoUyksdz1uZXcgQXJyYXkoUyksSj1uZXcgQXJyYXkoUyksbmU9bmV3IEFycmF5KFMpLGRlPW5ldyBBcnJheShTKSxmZT1uZXcgQXJyYXkoUykseGU9bmV3'@;
put 'IEFycmF5KFMpLExlPUMud29yZHM7TGUubGVuZ3RoPVMsdGhpcy5jb252ZXJ0MTNiKE4ud29yZHMsTi5sZW5ndGgsdyxTKSx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxkZSxTKSx0aGlzLnRyYW5zZm9ybSh3LHAsSixuZSxTLHYpLHRoaXMudHJhbnNmb3JtKGRlLHAsZmUseGUs'@;
put 'Uyx2KTtmb3IodmFyIEZlPTA7RmU8UztGZSsrKXt2YXIgT2U9SltGZV0qZmVbRmVdLW5lW0ZlXSp4ZVtGZV07bmVbRmVdPUpbRmVdKnhlW0ZlXStuZVtGZV0qZmVbRmVdLEpbRmVdPU9lfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShKLG5lLFMpLHRoaXMudHJhbnNmb3JtKEosbmUsTGUscCxTLHYp'@;
put 'LHRoaXMuY29uanVnYXRlKExlLHAsUyksdGhpcy5ub3JtYWxpemUxM2IoTGUsUyksQy5uZWdhdGl2ZT1OLm5lZ2F0aXZlXmcubmVnYXRpdmUsQy5sZW5ndGg9Ti5sZW5ndGgrZy5sZW5ndGgsQy5fc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4pe3ZhciBnPW5ldyBNKG51bGwp'@;
put 'O3JldHVybiBnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtOLmxlbmd0aCksdGhpcy5tdWxUbyhOLGcpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKE4pe3ZhciBnPW5ldyBNKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtOLmxlbmd0aCksZWUodGhp'@;
put 'cyxOLGcpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oTix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oTil7dmFyIGc9TjwwO2cmJihOPS1OKSxtKCJudW1iZXIiPT10eXBlb2YgTiksbShOPDY3MTA4ODY0KTtmb3IodmFy'@;
put 'IEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKk4scD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRz'@;
put 'W1NdPUMsdGhpcy5sZW5ndGgrKyksZz90aGlzLmluZWcoKTp0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oTil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNx'@;
put 'cj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKE4pe3ZhciBnPWZ1bmN0aW9uIFkoSCl7Zm9yKHZhciBOPW5ldyBBcnJheShILmJpdExlbmd0aCgpKSxnPTA7ZzxOLmxlbmd0aDtnKyspTltnXT1ILndvcmRzW2cvMjZ8'@;
put 'MF0+Pj5nJTI2JjE7cmV0dXJuIE59KE4pO2lmKDA9PT1nLmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBDPXRoaXMsUz0wO1M8Zy5sZW5ndGgmJjA9PT1nW1NdO1MrKyxDPUMuc3FyKCkpO2lmKCsrUzxnLmxlbmd0aClmb3IodmFyIHY9Qy5zcXIoKTtTPGcubGVuZ3RoO1MrKyx2PXYu'@;
put 'c3FyKCkpMCE9PWdbU10mJihDPUMubXVsKHYpKTtyZXR1cm4gQ30sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0wKTt2YXIgdixnPU4lMjYsQz0oTi1nKS8yNixTPTY3MTA4ODYzPj4+MjYtZzw8MjYtZztpZigwIT09Zyl7dmFyIHA9MDtm'@;
put 'b3Iodj0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgdz10aGlzLndvcmRzW3ZdJlM7dGhpcy53b3Jkc1t2XT0oMHx0aGlzLndvcmRzW3ZdKS13PDxnfHAscD13Pj4+MjYtZ31wJiYodGhpcy53b3Jkc1t2XT1wLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1DKXtmb3Iodj10aGlzLmxlbmd0aC0xO3Y+'@;
put 'PTA7di0tKXRoaXMud29yZHNbditDXT10aGlzLndvcmRzW3ZdO2Zvcih2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTA7dGhpcy5sZW5ndGgrPUN9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0'@;
put 'aGlzLml1c2hsbihOKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKE4sZyxDKXt2YXIgUzttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCksUz1nPyhnLWclMjYpLzI2OjA7dmFyIHY9TiUyNixwPU1hdGgubWluKChOLXYpLzI2LHRoaXMubGVuZ3RoKSx3PTY3MTA4ODYzXjY3MTA4ODYz'@;
put 'Pj4+djw8dixKPUM7aWYoUy09cCxTPU1hdGgubWF4KDAsUyksSil7Zm9yKHZhciBuZT0wO25lPHA7bmUrKylKLndvcmRzW25lXT10aGlzLndvcmRzW25lXTtKLmxlbmd0aD1wfWlmKDAhPT1wKWlmKHRoaXMubGVuZ3RoPnApZm9yKHRoaXMubGVuZ3RoLT1wLG5lPTA7bmU8dGhpcy5sZW5ndGg7'@;
put 'bmUrKyl0aGlzLndvcmRzW25lXT10aGlzLndvcmRzW25lK3BdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGRlPTA7Zm9yKG5lPXRoaXMubGVuZ3RoLTE7bmU+PTAmJigwIT09ZGV8fG5lPj1TKTtuZS0tKXt2YXIgZmU9MHx0aGlzLndvcmRzW25lXTt0aGlzLndvcmRz'@;
put 'W25lXT1kZTw8MjYtdnxmZT4+PnYsZGU9ZmUmd31yZXR1cm4gSiYmMCE9PWRlJiYoSi53b3Jkc1tKLmxlbmd0aCsrXT1kZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKE4s'@;
put 'ZyxDKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oTixnLEMpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oTil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXVz'@;
put 'aGxuKE4pfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oTil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKE4pfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihOKXttKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIGc9TiUyNixDPShOLWcpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUN8fCEodGhpcy53b3Jkc1tDXSYxPDxnKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihOKXttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIGc9TiUyNixDPShO'@;
put 'LWcpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Qz90aGlzOigwIT09ZyYmQysrLHRoaXMubGVuZ3RoPU1hdGgubWluKEMsdGhpcy5sZW5ndGgpLDAhPT1nJiYodGhpcy53b3Jkc1t0'@;
put 'aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnKSx0aGlzLl9zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oTil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKE4pe3JldHVybiBtKCJudW1iZXIi'@;
put 'PT10eXBlb2YgTiksbShOPDY3MTA4ODY0KSxOPDA/dGhpcy5pc3VibigtTik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9Tj8odGhpcy53b3Jkc1swXT1OLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5u'@;
put 'ZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oTiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKE4pfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oTil7dGhpcy53b3Jkc1swXSs9Tjtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2ddPj02NzEwODg2NDtnKysp'@;
put 'dGhpcy53b3Jkc1tnXS09NjcxMDg4NjQsZz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tnKzFdPTE6dGhpcy53b3Jkc1tnKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGcrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oTil7aWYobSgi'@;
put 'bnVtYmVyIj09dHlwZW9mIE4pLG0oTjw2NzEwODg2NCksTjwwKXJldHVybiB0aGlzLmlhZGRuKC1OKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oTiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09TiwxPT09dGhp'@;
put 'cy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZ108MDtnKyspdGhpcy53b3Jkc1tnXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tnKzFdLT0x'@;
put 'O3JldHVybiB0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oTil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihOKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihOLGcsQyl7dmFyIHY7dGhpcy5fZXhwYW5kKE4ubGVuZ3RoK0MpO3ZhciBw'@;
put 'LHc9MDtmb3Iodj0wO3Y8Ti5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditDXSkrdzt2YXIgSj0oMHxOLndvcmRzW3ZdKSpnO3c9KChwLT02NzEwODg2MyZKKT4+MjYpLShKLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditDXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1DO3Yr'@;
put 'Kyl3PShwPSgwfHRoaXMud29yZHNbditDXSkrdyk+PjI2LHRoaXMud29yZHNbditDXT02NzEwODg2MyZwO2lmKDA9PT13KXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihtKC0xPT09dyksdz0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl3PShwPS0oMHx0aGlzLndvcmRzW3ZdKSt3KT4+MjYsdGhp'@;
put 'cy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oTixnKXt2YXIgQyxTPXRoaXMuY2xvbmUoKSx2PU4scD0wfHYud29yZHNbdi5sZW5ndGgtMV07MCE9KEM9MjYtdGhpcy5fY291bnRC'@;
put 'aXRzKHApKSYmKHY9di51c2hsbihDKSxTLml1c2hsbihDKSxwPTB8di53b3Jkc1t2Lmxlbmd0aC0xXSk7dmFyIG5lLEo9Uy5sZW5ndGgtdi5sZW5ndGg7aWYoIm1vZCIhPT1nKXsobmU9bmV3IE0obnVsbCkpLmxlbmd0aD1KKzEsbmUud29yZHM9bmV3IEFycmF5KG5lLmxlbmd0aCk7Zm9yKHZh'@;
put 'ciBkZT0wO2RlPG5lLmxlbmd0aDtkZSsrKW5lLndvcmRzW2RlXT0wfXZhciBmZT1TLmNsb25lKCkuX2lzaGxuc3VibXVsKHYsMSxKKTswPT09ZmUubmVnYXRpdmUmJihTPWZlLG5lJiYobmUud29yZHNbSl09MSkpO2Zvcih2YXIgeGU9Si0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCoo'@;
put 'MHxTLndvcmRzW3YubGVuZ3RoK3hlXSkrKDB8Uy53b3Jkc1t2Lmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3B8MCw2NzEwODg2MyksUy5faXNobG5zdWJtdWwodixMZSx4ZSk7MCE9PVMubmVnYXRpdmU7KUxlLS0sUy5uZWdhdGl2ZT0wLFMuX2lzaGxuc3VibXVsKHYsMSx4ZSks'@;
put 'Uy5pc1plcm8oKXx8KFMubmVnYXRpdmVePTEpO25lJiYobmUud29yZHNbeGVdPUxlKX1yZXR1cm4gbmUmJm5lLl9zdHJpcCgpLFMuX3N0cmlwKCksImRpdiIhPT1nJiYwIT09QyYmUy5pdXNocm4oQykse2RpdjpuZXx8bnVsbCxtb2Q6U319LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihO'@;
put 'LGcsQyl7cmV0dXJuIG0oIU4uaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Ti5uZWdhdGl2ZT8ocD10aGlzLm5lZygpLmRpdm1vZChOLGcpLCJtb2QiIT09ZyYmKFM9cC5kaXYubmVnKCkpLCJkaXYiIT09'@;
put 'ZyYmKHY9cC5tb2QubmVnKCksQyYmMCE9PXYubmVnYXRpdmUmJnYuaWFkZChOKSkse2RpdjpTLG1vZDp2fSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1OLm5lZ2F0aXZlPyhwPXRoaXMuZGl2bW9kKE4ubmVnKCksZyksIm1vZCIhPT1nJiYoUz1wLmRpdi5uZWcoKSkse2RpdjpTLG1vZDpwLm1v'@;
put 'ZH0pOnRoaXMubmVnYXRpdmUmTi5uZWdhdGl2ZT8ocD10aGlzLm5lZygpLmRpdm1vZChOLm5lZygpLGcpLCJkaXYiIT09ZyYmKHY9cC5tb2QubmVnKCksQyYmMCE9PXYubmVnYXRpdmUmJnYuaXN1YihOKSkse2RpdjpwLmRpdixtb2Q6dn0pOk4ubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNt'@;
put 'cChOKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1OLmxlbmd0aD8iZGl2Ij09PWc/e2Rpdjp0aGlzLmRpdm4oTi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Zz97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kcm4oTi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihOLndv'@;
put 'cmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RybihOLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoTixnKTt2YXIgUyx2LHB9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5kaXZtb2QoTiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oTil7'@;
put 'cmV0dXJuIHRoaXMuZGl2bW9kKE4sIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5kaXZtb2QoTiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihOKXt2YXIgZz10aGlzLmRpdm1vZChOKTtpZihnLm1vZC5p'@;
put 'c1plcm8oKSlyZXR1cm4gZy5kaXY7dmFyIEM9MCE9PWcuZGl2Lm5lZ2F0aXZlP2cubW9kLmlzdWIoTik6Zy5tb2QsUz1OLnVzaHJuKDEpLHY9Ti5hbmRsbigxKSxwPUMuY21wKFMpO3JldHVybiBwPDB8fDE9PT12JiYwPT09cD9nLmRpdjowIT09Zy5kaXYubmVnYXRpdmU/Zy5kaXYuaXN1Ym4o'@;
put 'MSk6Zy5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKE4pe3ZhciBnPU48MDtnJiYoTj0tTiksbShOPD02NzEwODg2Myk7Zm9yKHZhciBDPSgxPDwyNiklTixTPTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklTjtyZXR1'@;
put 'cm4gZz8tUzpTfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLm1vZHJuKE4pfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihOKXt2YXIgZz1OPDA7ZyYmKE49LU4pLG0oTjw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7'@;
put 'dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvTnwwLEM9diVOfXJldHVybiB0aGlzLl9zdHJpcCgpLGc/dGhpcy5pbmVnKCk6dGhpc30sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKE4pfSxNLnBy'@;
put 'b3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKE4pe20oMD09PU4ubmVnYXRpdmUpLG0oIU4uaXNaZXJvKCkpO3ZhciBnPXRoaXMsQz1OLmNsb25lKCk7Zz0wIT09Zy5uZWdhdGl2ZT9nLnVtb2QoTik6Zy5jbG9uZSgpO2Zvcih2YXIgUz1uZXcgTSgxKSx2PW5ldyBNKDApLHA9bmV3IE0oMCksdz1uZXcg'@;
put 'TSgxKSxKPTA7Zy5pc0V2ZW4oKSYmQy5pc0V2ZW4oKTspZy5pdXNocm4oMSksQy5pdXNocm4oMSksKytKO2Zvcih2YXIgbmU9Qy5jbG9uZSgpLGRlPWcuY2xvbmUoKTshZy5pc1plcm8oKTspe2Zvcih2YXIgZmU9MCx4ZT0xOyEoZy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtp'@;
put 'ZihmZT4wKWZvcihnLml1c2hybihmZSk7ZmUtLSA+MDspKFMuaXNPZGQoKXx8di5pc09kZCgpKSYmKFMuaWFkZChuZSksdi5pc3ViKGRlKSksUy5pdXNocm4oMSksdi5pdXNocm4oMSk7Zm9yKHZhciBMZT0wLEZlPTE7IShDLndvcmRzWzBdJkZlKSYmTGU8MjY7KytMZSxGZTw8PTEpO2lmKExl'@;
put 'PjApZm9yKEMuaXVzaHJuKExlKTtMZS0tID4wOykocC5pc09kZCgpfHx3LmlzT2RkKCkpJiYocC5pYWRkKG5lKSx3LmlzdWIoZGUpKSxwLml1c2hybigxKSx3Lml1c2hybigxKTtnLmNtcChDKT49MD8oZy5pc3ViKEMpLFMuaXN1YihwKSx2LmlzdWIodykpOihDLmlzdWIoZykscC5pc3ViKFMp'@;
put 'LHcuaXN1Yih2KSl9cmV0dXJue2E6cCxiOncsZ2NkOkMuaXVzaGxuKEopfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKE4pe20oMD09PU4ubmVnYXRpdmUpLG0oIU4uaXNaZXJvKCkpO3ZhciBmZSxnPXRoaXMsQz1OLmNsb25lKCk7Zz0wIT09Zy5uZWdhdGl2ZT9nLnVtb2QoTik6Zy5j'@;
put 'bG9uZSgpO2Zvcih2YXIgUz1uZXcgTSgxKSx2PW5ldyBNKDApLHA9Qy5jbG9uZSgpO2cuY21wbigxKT4wJiZDLmNtcG4oMSk+MDspe2Zvcih2YXIgdz0wLEo9MTshKGcud29yZHNbMF0mSikmJnc8MjY7Kyt3LEo8PD0xKTtpZih3PjApZm9yKGcuaXVzaHJuKHcpO3ctLSA+MDspUy5pc09kZCgp'@;
put 'JiZTLmlhZGQocCksUy5pdXNocm4oMSk7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOyl2LmlzT2RkKCkmJnYuaWFkZChwKSx2Lml1c2hybigxKTtnLmNtcChDKT49MD8oZy5pc3Vi'@;
put 'KEMpLFMuaXN1Yih2KSk6KEMuaXN1YihnKSx2LmlzdWIoUykpfXJldHVybihmZT0wPT09Zy5jbXBuKDEpP1M6dikuY21wbigwKTwwJiZmZS5pYWRkKE4pLGZlfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oTil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gTi5hYnMoKTtpZihOLmlzWmVybygp'@;
put 'KXJldHVybiB0aGlzLmFicygpO3ZhciBnPXRoaXMuY2xvbmUoKSxDPU4uY2xvbmUoKTtnLm5lZ2F0aXZlPTAsQy5uZWdhdGl2ZT0wO2Zvcih2YXIgUz0wO2cuaXNFdmVuKCkmJkMuaXNFdmVuKCk7UysrKWcuaXVzaHJuKDEpLEMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtnLmlzRXZlbigpOyln'@;
put 'Lml1c2hybigxKTtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO3ZhciB2PWcuY21wKEMpO2lmKHY8MCl7dmFyIHA9ZztnPUMsQz1wfWVsc2UgaWYoMD09PXZ8fDA9PT1DLmNtcG4oMSkpYnJlYWs7Zy5pc3ViKEMpfXJldHVybiBDLml1c2hsbihTKX0sTS5wcm90b3R5cGUuaW52bT1mdW5j'@;
put 'dGlvbihOKXtyZXR1cm4gdGhpcy5lZ2NkKE4pLmEudW1vZChOKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5'@;
put 'cGUuYW5kbG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMud29yZHNbMF0mTn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oTil7bSgibnVtYmVyIj09dHlwZW9mIE4pO3ZhciBnPU4lMjYsQz0oTi1nKS8yNixTPTE8PGc7aWYodGhpcy5sZW5ndGg8PUMpcmV0dXJuIHRoaXMuX2V4cGFuZChD'@;
put 'KzEpLHRoaXMud29yZHNbQ118PVMsdGhpcztmb3IodmFyIHY9UyxwPUM7MCE9PXYmJnA8dGhpcy5sZW5ndGg7cCsrKXt2YXIgdz0wfHRoaXMud29yZHNbcF07dj0odys9dik+Pj4yNix0aGlzLndvcmRzW3BdPXcmPTY3MTA4ODYzfXJldHVybiAwIT09diYmKHRoaXMud29yZHNbcF09dix0aGlz'@;
put 'Lmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihOKXt2YXIgQyxnPU48MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWcpcmV0dXJuLTE7'@;
put 'aWYoMD09PXRoaXMubmVnYXRpdmUmJmcpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle2cmJihOPS1OKSxtKE48PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBTPTB8dGhpcy53b3Jkc1swXTtDPVM9PT1OPzA6UzxOPy0xOjF9cmV0dXJu'@;
put 'IDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKE4pe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Ti5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PU4ubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGc9dGhpcy51Y21wKE4p'@;
put 'O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1nOmd9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oTil7aWYodGhpcy5sZW5ndGg+Ti5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Ti5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBnPTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0t'@;
put 'KXt2YXIgUz0wfHRoaXMud29yZHNbQ10sdj0wfE4ud29yZHNbQ107aWYoUyE9PXYpe1M8dj9nPS0xOlM+diYmKGc9MSk7YnJlYWt9fXJldHVybiBnfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oTil7cmV0dXJuIDE9PT10aGlzLmNtcG4oTil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKE4p'@;
put 'e3JldHVybiAxPT09dGhpcy5jbXAoTil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY21wbihOKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNtcChOKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKE4pe3JldHVybi0x'@;
put 'PT09dGhpcy5jbXBuKE4pfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihOKXtyZXR1cm4tMT09PXRoaXMuY21wKE4pfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNtcG4oTik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbXAo'@;
put 'Tik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihOKXtyZXR1cm4gMD09PXRoaXMuY21wbihOKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7cmV0dXJuIDA9PT10aGlzLmNtcChOKX0sTS5yZWQ9ZnVuY3Rpb24oTil7cmV0dXJuIG5ldyBiKE4pfSxNLnByb3RvdHlwZS50b1JlZD1m'@;
put 'dW5jdGlvbihOKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLE4uY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChOKX0sTS5wcm90b3R5'@;
put 'cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihOKXtyZXR1cm4g'@;
put 'dGhpcy5yZWQ9Tix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihOKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChOKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKE4pe3JldHVy'@;
put 'biBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp'@;
put 'cy5yZWQuaWFkZCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihOKXtyZXR1'@;
put 'cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo'@;
put 'aXMucmVkLnNobCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLE4pLHRoaXMucmVkLm11bCh0aGlzLE4pfSxNLnByb3RvdHlw'@;
put 'ZS5yZWRJTXVsPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxOKSx0aGlzLnJlZC5pbXVsKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBt'@;
put 'KHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkx'@;
put 'KHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnBy'@;
put 'b3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKE4pe3JldHVybiBt'@;
put 'KHRoaXMucmVkJiYhTi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsTil9O3ZhciBvZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHNlKEgsTil7dGhpcy5uYW1lPUgs'@;
put 'dGhpcy5wPW5ldyBNKE4sMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBoZSgpe3NlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gdWUoKXtzZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGNl'@;
put 'KCl7c2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBHKCl7c2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZm'@;
put 'IGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBiKEgpe2lmKCJzdHJpbmciPT10eXBlb2YgSCl7dmFyIE49TS5fcHJpbWUoSCk7dGhpcy5tPU4ucCx0aGlzLnByaW1lPU59ZWxzZSBtKEguZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09SCx0aGlzLnBy'@;
put 'aW1lPW51bGx9ZnVuY3Rpb24gRChIKXtiLmNhbGwodGhpcyxIKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMu'@;
put 'aW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1p'@;
put 'bnYpfXNlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIE49bmV3IE0obnVsbCk7cmV0dXJuIE4ud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxOfSxzZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihOKXt2YXIgQyxnPU47ZG97dGhpcy5zcGxpdChnLHRoaXMu'@;
put 'dG1wKSxDPShnPShnPXRoaXMuaW11bEsoZykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIFM9Qzx0aGlzLm4/LTE6Zy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1TPyhnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSk6Uz4wP2cuaXN1Yih0aGlzLnApOnZv'@;
put 'aWQgMCE9PWcuc3RyaXA/Zy5zdHJpcCgpOmcuX3N0cmlwKCksZ30sc2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKE4sZyl7Ti5pdXNocm4odGhpcy5uLDAsZyl9LHNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihOKXtyZXR1cm4gTi5pbXVsKHRoaXMuayl9LGxlKGhlLHNlKSxoZS5wcm90'@;
put 'b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9NDE5NDMwMyxTPU1hdGgubWluKE4ubGVuZ3RoLDkpLHY9MDt2PFM7disrKWcud29yZHNbdl09Ti53b3Jkc1t2XTtpZihnLmxlbmd0aD1TLE4ubGVuZ3RoPD05KXJldHVybiBOLndvcmRzWzBdPTAsdm9pZChOLmxlbmd0aD0xKTt2'@;
put 'YXIgcD1OLndvcmRzWzldO2ZvcihnLndvcmRzW2cubGVuZ3RoKytdPXAmQyx2PTEwO3Y8Ti5sZW5ndGg7disrKXt2YXIgdz0wfE4ud29yZHNbdl07Ti53b3Jkc1t2LTEwXT0odyZDKTw8NHxwPj4+MjIscD13fU4ud29yZHNbdi0xMF09cD4+Pj0yMixOLmxlbmd0aC09MD09PXAmJk4ubGVuZ3Ro'@;
put 'PjEwPzEwOjl9LGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihOKXtOLndvcmRzW04ubGVuZ3RoXT0wLE4ud29yZHNbTi5sZW5ndGgrMV09MCxOLmxlbmd0aCs9Mjtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspe3ZhciBTPTB8Ti53b3Jkc1tDXTtOLndvcmRzW0NdPTY3MTA4ODYz'@;
put 'JihnKz05NzcqUyksZz02NCpTKyhnLzY3MTA4ODY0fDApfXJldHVybiAwPT09Ti53b3Jkc1tOLmxlbmd0aC0xXSYmKE4ubGVuZ3RoLS0sMD09PU4ud29yZHNbTi5sZW5ndGgtMV0mJk4ubGVuZ3RoLS0pLE59LGxlKHVlLHNlKSxsZShjZSxzZSksbGUoRyxzZSksRy5wcm90b3R5cGUuaW11bEs9'@;
put 'ZnVuY3Rpb24oTil7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXt2YXIgUz0xOSooMHxOLndvcmRzW0NdKStnLHY9NjcxMDg4NjMmUztTPj4+PTI2LE4ud29yZHNbQ109dixnPVN9cmV0dXJuIDAhPT1nJiYoTi53b3Jkc1tOLmxlbmd0aCsrXT1nKSxOfSxNLl9wcmltZT1mdW5jdGlv'@;
put 'bihOKXtpZihvZVtOXSlyZXR1cm4gb2VbTl07dmFyIGc7aWYoImsyNTYiPT09TilnPW5ldyBoZTtlbHNlIGlmKCJwMjI0Ij09PU4pZz1uZXcgdWU7ZWxzZSBpZigicDE5MiI9PT1OKWc9bmV3IGNlO2Vsc2V7aWYoInAyNTUxOSIhPT1OKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAi'@;
put 'K04pO2c9bmV3IEd9cmV0dXJuIG9lW05dPWcsZ30sYi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oTil7bSgwPT09Ti5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKE4ucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGIucHJvdG90'@;
put 'eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKE4sZyl7bSgwPT0oTi5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKE4ucmVkJiZOLnJlZD09PWcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGIucHJvdG90eXBlLmltb2Q9'@;
put 'ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKE4pLl9mb3JjZVJlZCh0aGlzKTooSShOLE4udW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksTil9LGIucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtyZXR1cm4gTi5pc1plcm8oKT9OLmNsb25lKCk6'@;
put 'dGhpcy5tLnN1YihOKS5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOLGcpe3RoaXMuX3ZlcmlmeTIoTixnKTt2YXIgQz1OLmFkZChnKTtyZXR1cm4gQy5jbXAodGhpcy5tKT49MCYmQy5pc3ViKHRoaXMubSksQy5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBl'@;
put 'LmlhZGQ9ZnVuY3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5pYWRkKGcpO3JldHVybiBDLmNtcCh0aGlzLm0pPj0wJiZDLmlzdWIodGhpcy5tKSxDfSxiLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5zdWIoZyk7cmV0'@;
put 'dXJuIEMuY21wbigwKTwwJiZDLmlhZGQodGhpcy5tKSxDLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihOLGcpe3RoaXMuX3ZlcmlmeTIoTixnKTt2YXIgQz1OLmlzdWIoZyk7cmV0dXJuIEMuY21wbigwKTwwJiZDLmlhZGQodGhpcy5tKSxDfSxiLnByb3RvdHlw'@;
put 'ZS5zaGw9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShOKSx0aGlzLmltb2QoTi51c2hsbihnKSl9LGIucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihOLGcpLHRoaXMuaW1vZChOLmltdWwoZykpfSxiLnByb3RvdHlwZS5tdWw9ZnVu'@;
put 'Y3Rpb24oTixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihOLGcpLHRoaXMuaW1vZChOLm11bChnKSl9LGIucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuaW11bChOLE4uY2xvbmUoKSl9LGIucHJvdG90eXBlLnNxcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5tdWwoTixO'@;
put 'KX0sYi5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihOKXtpZihOLmlzWmVybygpKXJldHVybiBOLmNsb25lKCk7dmFyIGc9dGhpcy5tLmFuZGxuKDMpO2lmKG0oZyUyPT0xKSwzPT09Zyl7dmFyIEM9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhOLEMpfWZv'@;
put 'cih2YXIgUz10aGlzLm0uc3VibigxKSx2PTA7IVMuaXNaZXJvKCkmJjA9PT1TLmFuZGxuKDEpOyl2KyssUy5pdXNocm4oMSk7bSghUy5pc1plcm8oKSk7dmFyIHA9bmV3IE0oMSkudG9SZWQodGhpcyksdz1wLnJlZE5lZygpLEo9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG5lPXRoaXMubS5i'@;
put 'aXRMZW5ndGgoKTtmb3IobmU9bmV3IE0oMipuZSpuZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG5lLEopLmNtcCh3KTspbmUucmVkSUFkZCh3KTtmb3IodmFyIGRlPXRoaXMucG93KG5lLFMpLGZlPXRoaXMucG93KE4sUy5hZGRuKDEpLml1c2hybigxKSkseGU9dGhpcy5wb3coTixTKSxM'@;
put 'ZT12OzAhPT14ZS5jbXAocCk7KXtmb3IodmFyIEZlPXhlLE9lPTA7MCE9PUZlLmNtcChwKTtPZSsrKUZlPUZlLnJlZFNxcigpO20oT2U8TGUpO3ZhciBqZT10aGlzLnBvdyhkZSxuZXcgTSgxKS5pdXNobG4oTGUtT2UtMSkpO2ZlPWZlLnJlZE11bChqZSksZGU9amUucmVkU3FyKCkseGU9eGUu'@;
put 'cmVkTXVsKGRlKSxMZT1PZX1yZXR1cm4gZmV9LGIucHJvdG90eXBlLmludm09ZnVuY3Rpb24oTil7dmFyIGc9Ti5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWcubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx0aGlzLmltb2QoZykucmVkTmVnKCkpOnRoaXMuaW1vZChnKX0sYi5wcm90b3R5cGUu'@;
put 'cG93PWZ1bmN0aW9uKE4sZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PWcuY21wbigxKSlyZXR1cm4gTi5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxTWzFdPU47Zm9yKHZhciB2PTI7djxTLmxl'@;
put 'bmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sTik7dmFyIHA9U1swXSx3PTAsSj0wLG5lPWcuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PWcubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Zy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1k'@;
put 'ZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LGIucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlv'@;
put 'bihOKXt2YXIgZz1OLnVtb2QodGhpcy5tKTtyZXR1cm4gZz09PU4/Zy5jbG9uZSgpOmd9LGIucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKE4pe3ZhciBnPU4uY2xvbmUoKTtyZXR1cm4gZy5yZWQ9bnVsbCxnfSxNLm1vbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIG5ldyBEKE4pfSxsZShE'@;
put 'LGIpLEQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5pbW9kKE4udXNobG4odGhpcy5zaGlmdCkpfSxELnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihOKXt2YXIgZz10aGlzLmltb2QoTi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGcucmVkPW51bGws'@;
put 'Z30sRC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihOLGcpe2lmKE4uaXNaZXJvKCl8fGcuaXNaZXJvKCkpcmV0dXJuIE4ud29yZHNbMF09MCxOLmxlbmd0aD0xLE47dmFyIEM9Ti5pbXVsKGcpLFM9Qy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCku'@;
put 'bXVsKHRoaXMubSksdj1DLmlzdWIoUykuaXVzaHJuKHRoaXMuc2hpZnQpLHA9djtyZXR1cm4gdi5jbXAodGhpcy5tKT49MD9wPXYuaXN1Yih0aGlzLm0pOnYuY21wbigwKTwwJiYocD12LmlhZGQodGhpcy5tKSkscC5fZm9yY2VSZWQodGhpcyl9LEQucHJvdG90eXBlLm11bD1mdW5jdGlvbihO'@;
put 'LGcpe2lmKE4uaXNaZXJvKCl8fGcuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgQz1OLm11bChnKSxTPUMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHY9Qy5pc3ViKFMpLml1c2hybih0'@;
put 'aGlzLnNoaWZ0KSxwPXY7cmV0dXJuIHYuY21wKHRoaXMubSk+PTA/cD12LmlzdWIodGhpcy5tKTp2LmNtcG4oMCk8MCYmKHA9di5pYWRkKHRoaXMubSkpLHAuX2ZvcmNlUmVkKHRoaXMpfSxELnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmltb2QoTi5faW52bXAodGhp'@;
put 'cy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sNjAwODI6KGF0LEllLEYpPT57dmFyIGFlO2Z1bmN0aW9uIHgobGUpe3RoaXMucmFuZD1sZX1pZihhdC5leHBvcnRzPWZ1bmN0aW9uKE0pe3JldHVybiBhZXx8KGFlPW5ldyB4KG51bGwpKSxh'@;
put 'ZS5nZW5lcmF0ZShNKX0sYXQuZXhwb3J0cy5SYW5kPXgseC5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuX3JhbmQoTSl9LHgucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKE0pe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVz'@;
put 'KE0pO2Zvcih2YXIgTz1uZXcgVWludDhBcnJheShNKSxSPTA7UjxPLmxlbmd0aDtSKyspT1tSXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBPfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz94LnByb3RvdHlwZS5fcmFu'@;
put 'ZD1mdW5jdGlvbihNKXt2YXIgTz1uZXcgVWludDhBcnJheShNKTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKE8pLE99OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP3gucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKE0pe3ZhciBPPW5ldyBV'@;
put 'aW50OEFycmF5KE0pO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhPKSxPfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHgucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIg'@;
put 'bT1GKDc3OTAzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbS5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTt4LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihNKXtyZXR1cm4gbS5yYW5kb21CeXRlcyhNKX19Y2F0Y2h7fX0sNjQwMzooYXQsSWUsRik9Pnt2YXIg'@;
put 'YWU9Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiB4KHope2FlLmlzQnVmZmVyKHopfHwoej1hZS5mcm9tKHopKTtmb3IodmFyIEs9ei5sZW5ndGgvNHwwLEk9bmV3IEFycmF5KEspLGs9MDtrPEs7aysrKUlba109ei5yZWFkVUludDMyQkUoNCprKTtyZXR1cm4gSX1mdW5jdGlvbiBtKHope2Zvcig7'@;
put 'MDx6Lmxlbmd0aDt6KyspelswXT0wfWZ1bmN0aW9uIGxlKHosSyxJLGssRSl7Zm9yKHZhciB0ZSxvZSxzZSxoZSxqPUlbMF0sVj1JWzFdLEI9SVsyXSxZPUlbM10sWD16WzBdXktbMF0sVT16WzFdXktbMV0scT16WzJdXktbMl0sZWU9elszXV5LWzNdLHVlPTQsY2U9MTtjZTxFO2NlKyspdGU9'@;
put 'altYPj4+MjRdXlZbVT4+PjE2JjI1NV1eQltxPj4+OCYyNTVdXllbMjU1JmVlXV5LW3VlKytdLG9lPWpbVT4+PjI0XV5WW3E+Pj4xNiYyNTVdXkJbZWU+Pj44JjI1NV1eWVsyNTUmWF1eS1t1ZSsrXSxzZT1qW3E+Pj4yNF1eVltlZT4+PjE2JjI1NV1eQltYPj4+OCYyNTVdXllbMjU1JlVdXktb'@;
put 'dWUrK10saGU9altlZT4+PjI0XV5WW1g+Pj4xNiYyNTVdXkJbVT4+PjgmMjU1XV5ZWzI1NSZxXV5LW3VlKytdLFg9dGUsVT1vZSxxPXNlLGVlPWhlO3JldHVybiB0ZT0oa1tYPj4+MjRdPDwyNHxrW1U+Pj4xNiYyNTVdPDwxNnxrW3E+Pj44JjI1NV08PDh8a1syNTUmZWVdKV5LW3VlKytdLG9l'@;
put 'PShrW1U+Pj4yNF08PDI0fGtbcT4+PjE2JjI1NV08PDE2fGtbZWU+Pj44JjI1NV08PDh8a1syNTUmWF0pXktbdWUrK10sc2U9KGtbcT4+PjI0XTw8MjR8a1tlZT4+PjE2JjI1NV08PDE2fGtbWD4+PjgmMjU1XTw8OHxrWzI1NSZVXSleS1t1ZSsrXSxoZT0oa1tlZT4+PjI0XTw8MjR8a1tYPj4+'@;
put 'MTYmMjU1XTw8MTZ8a1tVPj4+OCYyNTVdPDw4fGtbMjU1JnFdKV5LW3VlKytdLFt0ZT4+Pj0wLG9lPj4+PTAsc2U+Pj49MCxoZT4+Pj0wXX12YXIgTT1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sTz1mdW5jdGlvbigpe2Zvcih2YXIgej1uZXcgQXJyYXkoMjU2KSxLPTA7SzwyNTY7'@;
put 'SysrKXpbS109SzwxMjg/Szw8MTpLPDwxXjI4Mztmb3IodmFyIEk9W10saz1bXSxFPVtbXSxbXSxbXSxbXV0saj1bW10sW10sW10sW11dLFY9MCxCPTAsWT0wO1k8MjU2OysrWSl7dmFyIFg9Ql5CPDwxXkI8PDJeQjw8M15CPDw0O0lbVl09WD1YPj4+OF4yNTUmWF45OSxrW1hdPVY7dmFyIFU9'@;
put 'eltWXSxxPXpbVV0sZWU9eltxXSx0ZT0yNTcqeltYXV4xNjg0MzAwOCpYO0VbMF1bVl09dGU8PDI0fHRlPj4+OCxFWzFdW1ZdPXRlPDwxNnx0ZT4+PjE2LEVbMl1bVl09dGU8PDh8dGU+Pj4yNCxFWzNdW1ZdPXRlLGpbMF1bWF09KHRlPTE2ODQzMDA5KmVlXjY1NTM3KnFeMjU3KlVeMTY4NDMw'@;
put 'MDgqVik8PDI0fHRlPj4+OCxqWzFdW1hdPXRlPDwxNnx0ZT4+PjE2LGpbMl1bWF09dGU8PDh8dGU+Pj4yNCxqWzNdW1hdPXRlLDA9PT1WP1Y9Qj0xOihWPVVeelt6W3pbZWVeVV1dXSxCXj16W3pbQl1dKX1yZXR1cm57U0JPWDpJLElOVl9TQk9YOmssU1VCX01JWDpFLElOVl9TVUJfTUlYOmp9'@;
put 'fSgpO2Z1bmN0aW9uIFIoeil7dGhpcy5fa2V5PXgoeiksdGhpcy5fcmVzZXQoKX1SLmJsb2NrU2l6ZT0xNixSLmtleVNpemU9MzIsUi5wcm90b3R5cGUuYmxvY2tTaXplPVIuYmxvY2tTaXplLFIucHJvdG90eXBlLmtleVNpemU9Ui5rZXlTaXplLFIucHJvdG90eXBlLl9yZXNldD1mdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgej10aGlzLl9rZXksSz16Lmxlbmd0aCxJPUsrNixrPTQqKEkrMSksRT1bXSxqPTA7ajxLO2orKylFW2pdPXpbal07Zm9yKGo9SztqPGs7aisrKXt2YXIgVj1FW2otMV07aiVLPT0wPyhWPU8uU0JPWFsoVj1WPDw4fFY+Pj4yNCk+Pj4yNF08PDI0fE8uU0JPWFtWPj4+MTYm'@;
put 'MjU1XTw8MTZ8Ty5TQk9YW1Y+Pj44JjI1NV08PDh8Ty5TQk9YWzI1NSZWXSxWXj1NW2ovS3wwXTw8MjQpOks+NiYmaiVLPT00JiYoVj1PLlNCT1hbVj4+PjI0XTw8MjR8Ty5TQk9YW1Y+Pj4xNiYyNTVdPDwxNnxPLlNCT1hbVj4+PjgmMjU1XTw8OHxPLlNCT1hbMjU1JlZdKSxFW2pdPUVbai1L'@;
put 'XV5WfWZvcih2YXIgQj1bXSxZPTA7WTxrO1krKyl7dmFyIFg9ay1ZLFU9RVtYLShZJTQ/MDo0KV07QltZXT1ZPDR8fFg8PTQ/VTpPLklOVl9TVUJfTUlYWzBdW08uU0JPWFtVPj4+MjRdXV5PLklOVl9TVUJfTUlYWzFdW08uU0JPWFtVPj4+MTYmMjU1XV1eTy5JTlZfU1VCX01JWFsyXVtPLlNC'@;
put 'T1hbVT4+PjgmMjU1XV1eTy5JTlZfU1VCX01JWFszXVtPLlNCT1hbMjU1JlVdXX10aGlzLl9uUm91bmRzPUksdGhpcy5fa2V5U2NoZWR1bGU9RSx0aGlzLl9pbnZLZXlTY2hlZHVsZT1CfSxSLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oeil7cmV0dXJuIGxlKHo9eCh6KSx0'@;
put 'aGlzLl9rZXlTY2hlZHVsZSxPLlNVQl9NSVgsTy5TQk9YLHRoaXMuX25Sb3VuZHMpfSxSLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oeil7dmFyIEs9dGhpcy5lbmNyeXB0QmxvY2tSYXcoeiksST1hZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEkud3JpdGVVSW50MzJCRShLWzBd'@;
put 'LDApLEkud3JpdGVVSW50MzJCRShLWzFdLDQpLEkud3JpdGVVSW50MzJCRShLWzJdLDgpLEkud3JpdGVVSW50MzJCRShLWzNdLDEyKSxJfSxSLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oeil7dmFyIEs9KHo9eCh6KSlbMV07elsxXT16WzNdLHpbM109Szt2YXIgST1sZSh6LHRo'@;
put 'aXMuX2ludktleVNjaGVkdWxlLE8uSU5WX1NVQl9NSVgsTy5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxrPWFlLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gay53cml0ZVVJbnQzMkJFKElbMF0sMCksay53cml0ZVVJbnQzMkJFKElbM10sNCksay53cml0ZVVJbnQzMkJFKElbMl0sOCksay53cml0'@;
put 'ZVVJbnQzMkJFKElbMV0sMTIpLGt9LFIucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bSh0aGlzLl9rZXlTY2hlZHVsZSksbSh0aGlzLl9pbnZLZXlTY2hlZHVsZSksbSh0aGlzLl9rZXkpfSxhdC5leHBvcnRzLkFFUz1SfSw1NjA4NzooYXQsSWUsRik9Pnt2YXIgYWU9Rig2NDAzKSx4PUYo'@;
put 'ODQzKS5CdWZmZXIsbT1GKDg2NDIwKSxsZT1GKDY2Njk4KSxNPUYoMTUwMyksTz1GKDYzNjM2KSxSPUYoOTEwNyk7ZnVuY3Rpb24gSShrLEUsaixWKXttLmNhbGwodGhpcyk7dmFyIEI9eC5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgYWUuQUVTKEUpO3ZhciBZPXRoaXMuX2NpcGhlci5l'@;
put 'bmNyeXB0QmxvY2soQik7dGhpcy5fZ2hhc2g9bmV3IE0oWSksaj1mdW5jdGlvbiBLKGssRSxqKXtpZigxMj09PUUubGVuZ3RoKXJldHVybiBrLl9maW5JRD14LmNvbmNhdChbRSx4LmZyb20oWzAsMCwwLDFdKV0pLHguY29uY2F0KFtFLHguZnJvbShbMCwwLDAsMl0pXSk7dmFyIFY9bmV3IE0o'@;
put 'aiksQj1FLmxlbmd0aCxZPUIlMTY7Vi51cGRhdGUoRSksWSYmVi51cGRhdGUoeC5hbGxvYyhZPTE2LVksMCkpLFYudXBkYXRlKHguYWxsb2MoOCwwKSk7dmFyIFg9OCpCLFU9eC5hbGxvYyg4KTtVLndyaXRlVUludEJFKFgsMCw4KSxWLnVwZGF0ZShVKSxrLl9maW5JRD1WLnN0YXRlO3ZhciBx'@;
put 'PXguZnJvbShrLl9maW5JRCk7cmV0dXJuIFIocSkscX0odGhpcyxqLFkpLHRoaXMuX3ByZXY9eC5mcm9tKGopLHRoaXMuX2NhY2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9eC5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0w'@;
put 'LHRoaXMuX21vZGU9ayx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfWxlKEksbSksSS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihrKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgRT0xNi10aGlzLl9hbGVuJTE2O0U8MTYmJihFPXguYWxsb2MoRSwwKSx0'@;
put 'aGlzLl9naGFzaC51cGRhdGUoRSkpfXRoaXMuX2NhbGxlZD0hMDt2YXIgaj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxrKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/azpqKSx0aGlzLl9sZW4rPWsubGVuZ3RoLGp9LEkucHJvdG90eXBlLl9maW5hbD1mdW5jdGlv'@;
put 'bigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIGs9Tyh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2Np'@;
put 'cGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiB6KGssRSl7dmFyIGo9MDtrLmxlbmd0aCE9PUUubGVuZ3RoJiZqKys7Zm9yKHZhciBWPU1hdGgubWluKGsubGVuZ3RoLEUubGVuZ3RoKSxCPTA7QjxWOysrQilqKz1rW0JdXkVbQl07cmV0'@;
put 'dXJuIGp9KGssdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPWssdGhpcy5fY2lwaGVyLnNjcnViKCl9LEkucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtp'@;
put 'Zih0aGlzLl9kZWNyeXB0fHwheC5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LEkucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24o'@;
put 'RSl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9RX0sSS5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKEUpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShFKSx0aGlzLl9hbGVuKz1FLmxlbmd0aH0sYXQuZXhwb3J0cz1JfSw4MjQ4OTooYXQsSWUsRik9Pnt2YXIgYWU9RigxMjY4OSkseD1GKDUwMDQ2KSxtPUYoNDQ5NDYpO0ll'@;
put 'LmNyZWF0ZUNpcGhlcj1JZS5DaXBoZXI9YWUuY3JlYXRlQ2lwaGVyLEllLmNyZWF0ZUNpcGhlcml2PUllLkNpcGhlcml2PWFlLmNyZWF0ZUNpcGhlcml2LEllLmNyZWF0ZURlY2lwaGVyPUllLkRlY2lwaGVyPXguY3JlYXRlRGVjaXBoZXIsSWUuY3JlYXRlRGVjaXBoZXJpdj1JZS5EZWNpcGhl'@;
put 'cml2PXguY3JlYXRlRGVjaXBoZXJpdixJZS5saXN0Q2lwaGVycz1JZS5nZXRDaXBoZXJzPWZ1bmN0aW9uIGxlKCl7cmV0dXJuIE9iamVjdC5rZXlzKG0pfX0sNTAwNDY6KGF0LEllLEYpPT57dmFyIGFlPUYoNTYwODcpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoMTI0MjEpLGxlPUYoODkzNTQpLE09'@;
put 'Rig4NjQyMCksTz1GKDY0MDMpLFI9RigzNjUwNSk7ZnVuY3Rpb24gSyhWLEIsWSl7TS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBJLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgTy5BRVMoQiksdGhpcy5fcHJldj14LmZyb20oWSksdGhpcy5fbW9kZT1WLHRoaXMuX2F1'@;
put 'dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIEkoKXt0aGlzLmNhY2hlPXguYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gRShWLEIsWSl7dmFyIFg9bVtWLnRvTG93ZXJDYXNlKCldO2lmKCFYKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'WSYmKFk9eC5mcm9tKFkpKSwiR0NNIiE9PVgubW9kZSYmWS5sZW5ndGghPT1YLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrWS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgQiYmKEI9eC5mcm9tKEIpKSxCLmxlbmd0aCE9PVgua2V5LzgpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrQi5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09WC50eXBlP25ldyBsZShYLm1vZHVsZSxCLFksITApOiJhdXRoIj09PVgudHlwZT9uZXcgYWUoWC5tb2R1bGUsQixZLCEwKTpuZXcgSyhYLm1vZHVsZSxCLFkpfUYoNjY2OTgpKEssTSks'@;
put 'Sy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9jYWNoZS5hZGQoVik7Zm9yKHZhciBCLFksWD1bXTtCPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KVk9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsQiksWC5wdXNoKFkpO3JldHVybiB4LmNvbmNhdChYKX0s'@;
put 'Sy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gayhWKXt2YXIgQj1WWzE1XTtpZihCPDF8fEI+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7'@;
put 'Zm9yKHZhciBZPS0xOysrWTxCOylpZihWW1krKDE2LUIpXSE9PUIpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1CKXJldHVybiBWLnNsaWNlKDAsMTYtQil9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFYpKTtpZihWKXRocm93IG5ldyBFcnJvcigi'@;
put 'ZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEsucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVYsdGhpc30sSS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFYpe3RoaXMuY2FjaGU9eC5jb25jYXQoW3RoaXMu'@;
put 'Y2FjaGUsVl0pfSxJLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVil7dmFyIEI7aWYoVil7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIEI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLEJ9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0'@;
put 'aD49MTYpcmV0dXJuIEI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLEI7cmV0dXJuIG51bGx9LEkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LEllLmNyZWF0ZURl'@;
put 'Y2lwaGVyPWZ1bmN0aW9uIGooVixCKXt2YXIgWT1tW1YudG9Mb3dlckNhc2UoKV07aWYoIVkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIFg9UihCLCExLFkua2V5LFkuaXYpO3JldHVybiBFKFYsWC5rZXksWC5pdil9LEllLmNyZWF0ZURlY2lwaGVyaXY9'@;
put 'RX0sMTI2ODk6KGF0LEllLEYpPT57dmFyIGFlPUYoMTI0MjEpLHg9Rig1NjA4NyksbT1GKDg0MykuQnVmZmVyLGxlPUYoODkzNTQpLE09Rig4NjQyMCksTz1GKDY0MDMpLFI9RigzNjUwNSk7ZnVuY3Rpb24gSyhWLEIsWSl7TS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBrLHRoaXMuX2Np'@;
put 'cGhlcj1uZXcgTy5BRVMoQiksdGhpcy5fcHJldj1tLmZyb20oWSksdGhpcy5fbW9kZT1WLHRoaXMuX2F1dG9wYWRkaW5nPSEwfUYoNjY2OTgpKEssTSksSy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9jYWNoZS5hZGQoVik7Zm9yKHZhciBCLFksWD1bXTtCPXRoaXMuX2Nh'@;
put 'Y2hlLmdldCgpOylZPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEIpLFgucHVzaChZKTtyZXR1cm4gbS5jb25jYXQoWCl9O3ZhciBJPW0uYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIGsoKXt0aGlzLmNhY2hlPW0uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gRShWLEIsWSl7dmFyIFg9YWVbVi50b0xv'@;
put 'd2VyQ2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIEImJihCPW0uZnJvbShCKSksQi5sZW5ndGghPT1YLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK0IubGVuZ3Ro'@;
put 'KTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPW0uZnJvbShZKSksIkdDTSIhPT1YLm1vZGUmJlkubGVuZ3RoIT09WC5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK1kubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVgudHlwZT9uZXcgbGUoWC5tb2R1bGUsQixZ'@;
put 'KToiYXV0aCI9PT1YLnR5cGU/bmV3IHgoWC5tb2R1bGUsQixZKTpuZXcgSyhYLm1vZHVsZSxCLFkpfUsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBWPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFY9dGhpcy5fbW9kZS5lbmNyeXB0KHRo'@;
put 'aXMsViksdGhpcy5fY2lwaGVyLnNjcnViKCksVjtpZighVi5lcXVhbHMoSSkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sSy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVil7cmV0dXJu'@;
put 'IHRoaXMuX2F1dG9wYWRkaW5nPSEhVix0aGlzfSxrLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVil7dGhpcy5jYWNoZT1tLmNvbmNhdChbdGhpcy5jYWNoZSxWXSl9LGsucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVj10aGlzLmNhY2hlLnNs'@;
put 'aWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFZ9cmV0dXJuIG51bGx9LGsucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBWPTE2LXRoaXMuY2FjaGUubGVuZ3RoLEI9bS5hbGxvY1Vuc2FmZShWKSxZPS0xOysrWTxWOylCLndyaXRlVUlu'@;
put 'dDgoVixZKTtyZXR1cm4gbS5jb25jYXQoW3RoaXMuY2FjaGUsQl0pfSxJZS5jcmVhdGVDaXBoZXJpdj1FLEllLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBqKFYsQil7dmFyIFk9YWVbVi50b0xvd2VyQ2FzZSgpXTtpZighWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUi'@;
put 'KTt2YXIgWD1SKEIsITEsWS5rZXksWS5pdik7cmV0dXJuIEUoVixYLmtleSxYLml2KX19LDE1MDM6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXIseD1hZS5hbGxvYygxNiwwKTtmdW5jdGlvbiBsZShPKXt2YXIgUj1hZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIFIud3JpdGVVSW50'@;
put 'MzJCRShPWzBdPj4+MCwwKSxSLndyaXRlVUludDMyQkUoT1sxXT4+PjAsNCksUi53cml0ZVVJbnQzMkJFKE9bMl0+Pj4wLDgpLFIud3JpdGVVSW50MzJCRShPWzNdPj4+MCwxMiksUn1mdW5jdGlvbiBNKE8pe3RoaXMuaD1PLHRoaXMuc3RhdGU9YWUuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1h'@;
put 'ZS5hbGxvY1Vuc2FmZSgwKX1NLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihPKXtmb3IodmFyIFI9LTE7KytSPE8ubGVuZ3RoOyl0aGlzLnN0YXRlW1JdXj1PW1JdO3RoaXMuX211bHRpcGx5KCl9LE0ucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgeixJLE89ZnVuY3Rp'@;
put 'b24gbShPKXtyZXR1cm5bTy5yZWFkVUludDMyQkUoMCksTy5yZWFkVUludDMyQkUoNCksTy5yZWFkVUludDMyQkUoOCksTy5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxSPVswLDAsMCwwXSxrPS0xOysrazwxMjg7KXtmb3IoMCE9KHRoaXMuc3RhdGVbfn4oay84KV0mMTw8Ny1rJTgpJiYo'@;
put 'UlswXV49T1swXSxSWzFdXj1PWzFdLFJbMl1ePU9bMl0sUlszXV49T1szXSksST0wIT0oMSZPWzNdKSx6PTM7ej4wO3otLSlPW3pdPU9bel0+Pj4xfCgxJk9bei0xXSk8PDMxO09bMF09T1swXT4+PjEsSSYmKE9bMF09T1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWxlKFIpfSxNLnByb3RvdHlw'@;
put 'ZS51cGRhdGU9ZnVuY3Rpb24oTyl7dGhpcy5jYWNoZT1hZS5jb25jYXQoW3RoaXMuY2FjaGUsT10pO2Zvcih2YXIgUjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KVI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goUil9LE0u'@;
put 'cHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKE8sUil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGFlLmNvbmNhdChbdGhpcy5jYWNoZSx4XSwxNikpLHRoaXMuZ2hhc2gobGUoWzAsTywwLFJdKSksdGhpcy5zdGF0ZX0sYXQuZXhwb3J0cz1NfSw5MTA3OmF0PT57YXQuZXhw'@;
put 'b3J0cz1mdW5jdGlvbiBJZShGKXtmb3IodmFyIHgsYWU9Ri5sZW5ndGg7YWUtLTspe2lmKDI1NSE9PSh4PUYucmVhZFVJbnQ4KGFlKSkpe3grKyxGLndyaXRlVUludDgoeCxhZSk7YnJlYWt9Ri53cml0ZVVJbnQ4KDAsYWUpfX19LDMxMTc1OihhdCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2KTtJ'@;
put 'ZS5lbmNyeXB0PWZ1bmN0aW9uKHgsbSl7dmFyIGxlPWFlKG0seC5fcHJldik7cmV0dXJuIHguX3ByZXY9eC5fY2lwaGVyLmVuY3J5cHRCbG9jayhsZSkseC5fcHJldn0sSWUuZGVjcnlwdD1mdW5jdGlvbih4LG0pe3ZhciBsZT14Ll9wcmV2O3guX3ByZXY9bTt2YXIgTT14Ll9jaXBoZXIuZGVj'@;
put 'cnlwdEJsb2NrKG0pO3JldHVybiBhZShNLGxlKX19LDQzNjMxOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig2MzYzNik7ZnVuY3Rpb24gbShsZSxNLE8pe3ZhciBSPU0ubGVuZ3RoLHo9eChNLGxlLl9jYWNoZSk7cmV0dXJuIGxlLl9jYWNoZT1sZS5fY2FjaGUuc2xpY2Uo'@;
put 'UiksbGUuX3ByZXY9YWUuY29uY2F0KFtsZS5fcHJldixPP006el0pLHp9SWUuZW5jcnlwdD1mdW5jdGlvbihsZSxNLE8pe2Zvcih2YXIgeixSPWFlLmFsbG9jVW5zYWZlKDApO00ubGVuZ3RoOyl7aWYoMD09PWxlLl9jYWNoZS5sZW5ndGgmJihsZS5fY2FjaGU9bGUuX2NpcGhlci5lbmNyeXB0'@;
put 'QmxvY2sobGUuX3ByZXYpLGxlLl9wcmV2PWFlLmFsbG9jVW5zYWZlKDApKSwhKGxlLl9jYWNoZS5sZW5ndGg8PU0ubGVuZ3RoKSl7Uj1hZS5jb25jYXQoW1IsbShsZSxNLE8pXSk7YnJlYWt9Uj1hZS5jb25jYXQoW1IsbShsZSxNLnNsaWNlKDAsej1sZS5fY2FjaGUubGVuZ3RoKSxPKV0pLE09'@;
put 'TS5zbGljZSh6KX1yZXR1cm4gUn19LDMzODkyOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyO2Z1bmN0aW9uIHgobGUsTSxPKXtmb3IodmFyIGssRSx6PS0xLEk9MDsrK3o8ODspSSs9KDEyOCYoRT1sZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhsZS5fcHJldilbMF1eKGs9TSYxPDw3'@;
put 'LXo/MTI4OjApKSk+PnolOCxsZS5fcHJldj1tKGxlLl9wcmV2LE8/azpFKTtyZXR1cm4gSX1mdW5jdGlvbiBtKGxlLE0pe3ZhciBPPWxlLmxlbmd0aCxSPS0xLHo9YWUuYWxsb2NVbnNhZmUobGUubGVuZ3RoKTtmb3IobGU9YWUuY29uY2F0KFtsZSxhZS5mcm9tKFtNXSldKTsrK1I8TzspeltS'@;
put 'XT1sZVtSXTw8MXxsZVtSKzFdPj43O3JldHVybiB6fUllLmVuY3J5cHQ9ZnVuY3Rpb24obGUsTSxPKXtmb3IodmFyIFI9TS5sZW5ndGgsej1hZS5hbGxvY1Vuc2FmZShSKSxLPS0xOysrSzxSOyl6W0tdPXgobGUsTVtLXSxPKTtyZXR1cm4gen19LDM2Nzg3OihhdCxJZSxGKT0+e3ZhciBhZT1G'@;
put 'KDg0MykuQnVmZmVyO2Z1bmN0aW9uIHgobSxsZSxNKXt2YXIgUj1tLl9jaXBoZXIuZW5jcnlwdEJsb2NrKG0uX3ByZXYpWzBdXmxlO3JldHVybiBtLl9wcmV2PWFlLmNvbmNhdChbbS5fcHJldi5zbGljZSgxKSxhZS5mcm9tKFtNP2xlOlJdKV0pLFJ9SWUuZW5jcnlwdD1mdW5jdGlvbihtLGxl'@;
put 'LE0pe2Zvcih2YXIgTz1sZS5sZW5ndGgsUj1hZS5hbGxvY1Vuc2FmZShPKSx6PS0xOysrejxPOylSW3pdPXgobSxsZVt6XSxNKTtyZXR1cm4gUn19LDg1MjY4OihhdCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2KSx4PUYoODQzKS5CdWZmZXIsbT1GKDkxMDcpO2Z1bmN0aW9uIGxlKE8pe3ZhciBS'@;
put 'PU8uX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoTy5fcHJldik7cmV0dXJuIG0oTy5fcHJldiksUn1JZS5lbmNyeXB0PWZ1bmN0aW9uKE8sUil7dmFyIHo9TWF0aC5jZWlsKFIubGVuZ3RoLzE2KSxLPU8uX2NhY2hlLmxlbmd0aDtPLl9jYWNoZT14LmNvbmNhdChbTy5fY2FjaGUseC5hbGxvY1Vu'@;
put 'c2FmZSgxNip6KV0pO2Zvcih2YXIgST0wO0k8ejtJKyspe3ZhciBrPWxlKE8pLEU9SysxNipJO08uX2NhY2hlLndyaXRlVUludDMyQkUoa1swXSxFKzApLE8uX2NhY2hlLndyaXRlVUludDMyQkUoa1sxXSxFKzQpLE8uX2NhY2hlLndyaXRlVUludDMyQkUoa1syXSxFKzgpLE8uX2NhY2hlLndy'@;
put 'aXRlVUludDMyQkUoa1szXSxFKzEyKX12YXIgaj1PLl9jYWNoZS5zbGljZSgwLFIubGVuZ3RoKTtyZXR1cm4gTy5fY2FjaGU9Ty5fY2FjaGUuc2xpY2UoUi5sZW5ndGgpLGFlKFIsail9fSw0NTk5NTooYXQsSWUpPT57SWUuZW5jcnlwdD1mdW5jdGlvbihGLGFlKXtyZXR1cm4gRi5fY2lwaGVy'@;
put 'LmVuY3J5cHRCbG9jayhhZSl9LEllLmRlY3J5cHQ9ZnVuY3Rpb24oRixhZSl7cmV0dXJuIEYuX2NpcGhlci5kZWNyeXB0QmxvY2soYWUpfX0sMTI0MjE6KGF0LEllLEYpPT57dmFyIGFlPXtFQ0I6Rig0NTk5NSksQ0JDOkYoMzExNzUpLENGQjpGKDQzNjMxKSxDRkI4OkYoMzY3ODcpLENGQjE6'@;
put 'RigzMzg5MiksT0ZCOkYoMzQ1MzIpLENUUjpGKDg1MjY4KSxHQ006Rig4NTI2OCl9LHg9Rig0NDk0Nik7Zm9yKHZhciBtIGluIHgpeFttXS5tb2R1bGU9YWVbeFttXS5tb2RlXTthdC5leHBvcnRzPXh9LDM0NTMyOihhdCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2KTtmdW5jdGlvbiB4KG0pe3Jl'@;
put 'dHVybiBtLl9wcmV2PW0uX2NpcGhlci5lbmNyeXB0QmxvY2sobS5fcHJldiksbS5fcHJldn1JZS5lbmNyeXB0PWZ1bmN0aW9uKG0sbGUpe2Zvcig7bS5fY2FjaGUubGVuZ3RoPGxlLmxlbmd0aDspbS5fY2FjaGU9QnVmZmVyLmNvbmNhdChbbS5fY2FjaGUseChtKV0pO3ZhciBNPW0uX2NhY2hl'@;
put 'LnNsaWNlKDAsbGUubGVuZ3RoKTtyZXR1cm4gbS5fY2FjaGU9bS5fY2FjaGUuc2xpY2UobGUubGVuZ3RoKSxhZShsZSxNKX19LDg5MzU0OihhdCxJZSxGKT0+e3ZhciBhZT1GKDY0MDMpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoODY0MjApO2Z1bmN0aW9uIE0oTyxSLHosSyl7bS5jYWxsKHRoaXMp'@;
put 'LHRoaXMuX2NpcGhlcj1uZXcgYWUuQUVTKFIpLHRoaXMuX3ByZXY9eC5mcm9tKHopLHRoaXMuX2NhY2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9eC5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PUssdGhpcy5fbW9kZT1PfUYoNjY2OTgpKE0sbSksTS5wcm90b3R5cGUu'@;
put 'X3VwZGF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsTyx0aGlzLl9kZWNyeXB0KX0sTS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LGF0LmV4cG9ydHM9TX0sMjU2MDA6KGF0LEllLEYpPT57dmFyIGFlPUYoMTQ5'@;
put 'NDgpLHg9Rig4MjQ4OSksbT1GKDEyNDIxKSxsZT1GKDg5NDAyKSxNPUYoMzY1MDUpO2Z1bmN0aW9uIHooayxFLGope2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10pcmV0dXJuIHguY3JlYXRlQ2lwaGVyaXYoayxFLGopO2lmKGxlW2tdKXJldHVybiBuZXcgYWUoe2tleTpFLGl2OmosbW9kZTpr'@;
put 'fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24gSyhrLEUsail7aWYoaz1rLnRvTG93ZXJDYXNlKCksbVtrXSlyZXR1cm4geC5jcmVhdGVEZWNpcGhlcml2KGssRSxqKTtpZihsZVtrXSlyZXR1cm4gbmV3IGFlKHtrZXk6RSxpdjpqLG1vZGU6ayxk'@;
put 'ZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9SWUuY3JlYXRlQ2lwaGVyPUllLkNpcGhlcj1mdW5jdGlvbiBPKGssRSl7dmFyIGosVjtpZihrPWsudG9Mb3dlckNhc2UoKSxtW2tdKWo9bVtrXS5rZXksVj1tW2tdLml2O2Vsc2V7aWYoIWxlW2td'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2o9OCpsZVtrXS5rZXksVj1sZVtrXS5pdn12YXIgQj1NKEUsITEsaixWKTtyZXR1cm4geihrLEIua2V5LEIuaXYpfSxJZS5jcmVhdGVDaXBoZXJpdj1JZS5DaXBoZXJpdj16LEllLmNyZWF0ZURlY2lwaGVyPUllLkRl'@;
put 'Y2lwaGVyPWZ1bmN0aW9uIFIoayxFKXt2YXIgaixWO2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10paj1tW2tdLmtleSxWPW1ba10uaXY7ZWxzZXtpZighbGVba10pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aj04KmxlW2tdLmtleSxWPWxlW2tdLml2fXZhciBC'@;
put 'PU0oRSwhMSxqLFYpO3JldHVybiBLKGssQi5rZXksQi5pdil9LEllLmNyZWF0ZURlY2lwaGVyaXY9SWUuRGVjaXBoZXJpdj1LLEllLmxpc3RDaXBoZXJzPUllLmdldENpcGhlcnM9ZnVuY3Rpb24gSSgpe3JldHVybiBPYmplY3Qua2V5cyhsZSkuY29uY2F0KHguZ2V0Q2lwaGVycygpKX19LDE0'@;
put 'OTQ4OihhdCxJZSxGKT0+e3ZhciBhZT1GKDg2NDIwKSx4PUYoNDAxMzIpLG09Rig2NjY5OCksbGU9Rig4NDMpLkJ1ZmZlcixNPXsiZGVzLWVkZTMtY2JjIjp4LkNCQy5pbnN0YW50aWF0ZSh4LkVERSksImRlcy1lZGUzIjp4LkVERSwiZGVzLWVkZS1jYmMiOnguQ0JDLmluc3RhbnRpYXRlKHgu'@;
put 'RURFKSwiZGVzLWVkZSI6eC5FREUsImRlcy1jYmMiOnguQ0JDLmluc3RhbnRpYXRlKHguREVTKSwiZGVzLWVjYiI6eC5ERVN9O2Z1bmN0aW9uIE8oUil7YWUuY2FsbCh0aGlzKTt2YXIgSSx6PVIubW9kZS50b0xvd2VyQ2FzZSgpLEs9TVt6XTtJPVIuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5'@;
put 'cHQiO3ZhciBrPVIua2V5O2xlLmlzQnVmZmVyKGspfHwoaz1sZS5mcm9tKGspKSwoImRlcy1lZGUiPT09enx8ImRlcy1lZGUtY2JjIj09PXopJiYoaz1sZS5jb25jYXQoW2ssay5zbGljZSgwLDgpXSkpO3ZhciBFPVIuaXY7bGUuaXNCdWZmZXIoRSl8fChFPWxlLmZyb20oRSkpLHRoaXMuX2Rl'@;
put 'cz1LLmNyZWF0ZSh7a2V5OmssaXY6RSx0eXBlOkl9KX1NLmRlcz1NWyJkZXMtY2JjIl0sTS5kZXMzPU1bImRlcy1lZGUzLWNiYyJdLGF0LmV4cG9ydHM9TyxtKE8sYWUpLE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUil7cmV0dXJuIGxlLmZyb20odGhpcy5fZGVzLnVwZGF0ZShSKSl9'@;
put 'LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBsZS5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDg5NDAyOihhdCxJZSk9PntJZVsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxJZVsiZGVzLWNiYyJdPUllLmRlcz17a2V5OjgsaXY6OH0sSWVbImRlcy1lZGUzLWNiYyJdPUll'@;
put 'LmRlczM9e2tleToyNCxpdjo4fSxJZVsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LEllWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sSWVbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSw3MTk0NjooYXQsSWUsRik9Pnt2YXIgYWU9Rig2MjY2MikseD1GKDQ0MDE5KTtmdW5jdGlvbiBs'@;
put 'ZShPKXt2YXIgeixSPU8ubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97ej1uZXcgYWUoeChSKSl9d2hpbGUoei5jbXAoTy5tb2R1bHVzKT49MHx8IXoudW1vZChPLnByaW1lMSl8fCF6LnVtb2QoTy5wcmltZTIpKTtyZXR1cm4gen1mdW5jdGlvbiBNKE8sUil7dmFyIHo9ZnVuY3Rpb24gbShPKXt2'@;
put 'YXIgUj1sZShPKTtyZXR1cm57YmxpbmRlcjpSLnRvUmVkKGFlLm1vbnQoTy5tb2R1bHVzKSkucmVkUG93KG5ldyBhZShPLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpSLmludm0oTy5tb2R1bHVzKX19KFIpLEs9Ui5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxJPW5ldyBhZShP'@;
put 'KS5tdWwoei5ibGluZGVyKS51bW9kKFIubW9kdWx1cyksaz1JLnRvUmVkKGFlLm1vbnQoUi5wcmltZTEpKSxFPUkudG9SZWQoYWUubW9udChSLnByaW1lMikpLGo9Ui5jb2VmZmljaWVudCxWPVIucHJpbWUxLEI9Ui5wcmltZTIsWT1rLnJlZFBvdyhSLmV4cG9uZW50MSkuZnJvbVJlZCgpLFg9'@;
put 'RS5yZWRQb3coUi5leHBvbmVudDIpLmZyb21SZWQoKSxVPVkuaXN1YihYKS5pbXVsKGopLnVtb2QoVikuaW11bChCKTtyZXR1cm4gWC5pYWRkKFUpLmltdWwoei51bmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKS50b0FycmF5TGlrZShCdWZmZXIsImJlIixLKX1NLmdldHI9bGUsYXQuZXhwb3J0'@;
put 'cz1NfSw4MTY5OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1GKDc1MjA3KX0sMjc2ODY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig5NjM2MiksbT1GKDk2NzQ1KSxsZT1GKDY2Njk4KSxNPUYoNjM2MDIpLE89Rig1MTE3Myks'@;
put 'Uj1GKDc1MjA3KTtmdW5jdGlvbiB6KEUpe20uV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgaj1SW0VdO2lmKCFqKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPWouaGFzaCx0aGlzLl9oYXNoPXgoai5oYXNoKSx0aGlzLl90YWc9ai5pZCx0'@;
put 'aGlzLl9zaWduVHlwZT1qLnNpZ259ZnVuY3Rpb24gSyhFKXttLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGo9UltFXTtpZighail0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPXgoai5oYXNoKSx0aGlzLl90YWc9ai5pZCx0aGlzLl9zaWduVHlw'@;
put 'ZT1qLnNpZ259ZnVuY3Rpb24gSShFKXtyZXR1cm4gbmV3IHooRSl9ZnVuY3Rpb24gayhFKXtyZXR1cm4gbmV3IEsoRSl9T2JqZWN0LmtleXMoUikuZm9yRWFjaChmdW5jdGlvbihFKXtSW0VdLmlkPWFlLmZyb20oUltFXS5pZCwiaGV4IiksUltFLnRvTG93ZXJDYXNlKCldPVJbRV19KSxsZSh6'@;
put 'LG0uV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihqLFYsQil7dGhpcy5faGFzaC51cGRhdGUoaiksQigpfSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oaixWKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBqP2FlLmZyb20oaixWKTpq'@;
put 'KSx0aGlzfSx6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGosVil7dGhpcy5lbmQoKTt2YXIgQj10aGlzLl9oYXNoLmRpZ2VzdCgpLFk9TShCLGosdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gVj9ZLnRvU3RyaW5nKFYpOll9LGxlKEssbS5Xcml0YWJs'@;
put 'ZSksSy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGosVixCKXt0aGlzLl9oYXNoLnVwZGF0ZShqKSxCKCl9LEsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihqLFYpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIGo/YWUuZnJvbShqLFYpOmopLHRoaXN9LEsu'@;
put 'cHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihqLFYsQil7dmFyIFk9InN0cmluZyI9PXR5cGVvZiBWP2FlLmZyb20oVixCKTpWO3RoaXMuZW5kKCk7dmFyIFg9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gTyhZLFgsaix0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxhdC5leHBvcnRzPXtT'@;
put 'aWduOkksVmVyaWZ5OmssY3JlYXRlU2lnbjpJLGNyZWF0ZVZlcmlmeTprfX0sNjM2MDI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig4NTgyNSksbT1GKDcxOTQ2KSxsZT1GKDg4NjUxKS5lYyxNPUYoNjI2NjIpLE89Rig4Nzk4MyksUj1GKDEzMDgp'@;
put 'O2Z1bmN0aW9uIGooVSxxLGVlLHRlKXtpZigoVT1hZS5mcm9tKFUudG9BcnJheSgpKSkubGVuZ3RoPHEuYnl0ZUxlbmd0aCgpKXt2YXIgb2U9YWUuYWxsb2MocS5ieXRlTGVuZ3RoKCktVS5sZW5ndGgpO1U9YWUuY29uY2F0KFtvZSxVXSl9dmFyIHNlPWVlLmxlbmd0aCxoZT1mdW5jdGlvbiBC'@;
put 'KFUscSl7VT0oVT1WKFUscSkpLm1vZChxKTt2YXIgZWU9YWUuZnJvbShVLnRvQXJyYXkoKSk7aWYoZWUubGVuZ3RoPHEuYnl0ZUxlbmd0aCgpKXt2YXIgdGU9YWUuYWxsb2MocS5ieXRlTGVuZ3RoKCktZWUubGVuZ3RoKTtlZT1hZS5jb25jYXQoW3RlLGVlXSl9cmV0dXJuIGVlfShlZSxxKSx1'@;
put 'ZT1hZS5hbGxvYyhzZSk7dWUuZmlsbCgxKTt2YXIgY2U9YWUuYWxsb2Moc2UpO3JldHVybiBjZT14KHRlLGNlKS51cGRhdGUodWUpLnVwZGF0ZShhZS5mcm9tKFswXSkpLnVwZGF0ZShVKS51cGRhdGUoaGUpLmRpZ2VzdCgpLHVlPXgodGUsY2UpLnVwZGF0ZSh1ZSkuZGlnZXN0KCkse2s6Y2U9'@;
put 'eCh0ZSxjZSkudXBkYXRlKHVlKS51cGRhdGUoYWUuZnJvbShbMV0pKS51cGRhdGUoVSkudXBkYXRlKGhlKS5kaWdlc3QoKSx2OnVlPXgodGUsY2UpLnVwZGF0ZSh1ZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFYoVSxxKXt2YXIgZWU9bmV3IE0oVSksdGU9KFUubGVuZ3RoPDwzKS1xLmJpdExlbmd0'@;
put 'aCgpO3JldHVybiB0ZT4wJiZlZS5pc2hybih0ZSksZWV9ZnVuY3Rpb24gWShVLHEsZWUpe3ZhciB0ZSxvZTtkb3tmb3IodGU9YWUuYWxsb2MoMCk7OCp0ZS5sZW5ndGg8VS5iaXRMZW5ndGgoKTspcS52PXgoZWUscS5rKS51cGRhdGUocS52KS5kaWdlc3QoKSx0ZT1hZS5jb25jYXQoW3RlLHEu'@;
put 'dl0pO29lPVYodGUsVSkscS5rPXgoZWUscS5rKS51cGRhdGUocS52KS51cGRhdGUoYWUuZnJvbShbMF0pKS5kaWdlc3QoKSxxLnY9eChlZSxxLmspLnVwZGF0ZShxLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09b2UuY21wKFUpKTtyZXR1cm4gb2V9ZnVuY3Rpb24gWChVLHEsZWUsdGUpe3JldHVy'@;
put 'biBVLnRvUmVkKE0ubW9udChlZSkpLnJlZFBvdyhxKS5mcm9tUmVkKCkubW9kKHRlKX1hdC5leHBvcnRzPWZ1bmN0aW9uIEsoVSxxLGVlLHRlLG9lKXt2YXIgc2U9TyhxKTtpZihzZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PXRlJiYiZWNkc2EvcnNhIiE9PXRlKXRocm93IG5ldyBFcnJvcigid3Jv'@;
put 'bmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBJKFUscSl7dmFyIGVlPVJbcS5jdXJ2ZS5qb2luKCIuIildO2lmKCFlZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitxLmN1cnZlLmpvaW4oIi4iKSk7dmFyIHNlPW5ldyBsZShlZSkua2V5RnJvbVByaXZhdGUo'@;
put 'cS5wcml2YXRlS2V5KS5zaWduKFUpO3JldHVybiBhZS5mcm9tKHNlLnRvREVSKCkpfShVLHNlKX1pZigiZHNhIj09PXNlLnR5cGUpe2lmKCJkc2EiIT09dGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIGsoVSxxLGVlKXtmb3IodmFy'@;
put 'IGNlLHRlPXEucGFyYW1zLnByaXZfa2V5LG9lPXEucGFyYW1zLnAsc2U9cS5wYXJhbXMucSxoZT1xLnBhcmFtcy5nLHVlPW5ldyBNKDApLEc9VihVLHNlKS5tb2Qoc2UpLGI9ITEsRD1qKHRlLHNlLFUsZWUpOyExPT09YjspdWU9WChoZSxjZT1ZKHNlLEQsZWUpLG9lLHNlKSwwPT09KGI9Y2Uu'@;
put 'aW52bShzZSkuaW11bChHLmFkZCh0ZS5tdWwodWUpKSkubW9kKHNlKSkuY21wbigwKSYmKGI9ITEsdWU9bmV3IE0oMCkpO3JldHVybiBmdW5jdGlvbiBFKFUscSl7VT1VLnRvQXJyYXkoKSxxPXEudG9BcnJheSgpLDEyOCZVWzBdJiYoVT1bMF0uY29uY2F0KFUpKSwxMjgmcVswXSYmKHE9WzBd'@;
put 'LmNvbmNhdChxKSk7dmFyIHRlPVs0OCxVLmxlbmd0aCtxLmxlbmd0aCs0LDIsVS5sZW5ndGhdO3JldHVybiB0ZT10ZS5jb25jYXQoVSxbMixxLmxlbmd0aF0scSksYWUuZnJvbSh0ZSl9KHVlLGIpfShVLHNlLGVlKX1pZigicnNhIiE9PXRlJiYiZWNkc2EvcnNhIiE9PXRlKXRocm93IG5ldyBF'@;
put 'cnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO2lmKHZvaWQgMCE9PXEucGFkZGluZyYmMSE9PXEucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7VT1hZS5jb25jYXQoW29lLFVdKTtmb3IodmFyIGhlPXNlLm1vZHVsdXMu'@;
put 'Ynl0ZUxlbmd0aCgpLHVlPVswLDFdO1UubGVuZ3RoK3VlLmxlbmd0aCsxPGhlOyl1ZS5wdXNoKDI1NSk7dWUucHVzaCgwKTtmb3IodmFyIGNlPS0xOysrY2U8VS5sZW5ndGg7KXVlLnB1c2goVVtjZV0pO3JldHVybiBtKHVlLHNlKX0sYXQuZXhwb3J0cy5nZXRLZXk9aixhdC5leHBvcnRzLm1h'@;
put 'a2VLZXk9WX0sNTExNzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig2MjY2MiksbT1GKDg4NjUxKS5lYyxsZT1GKDg3OTgzKSxNPUYoMTMwOCk7ZnVuY3Rpb24gSyhJLGspe2lmKEkuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQg'@;
put 'c2lnIik7aWYoSS5jbXAoayk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfWF0LmV4cG9ydHM9ZnVuY3Rpb24gTyhJLGssRSxqLFYpe3ZhciBCPWxlKEUpO2lmKCJlYyI9PT1CLnR5cGUpe2lmKCJlY2RzYSIhPT1qJiYiZWNkc2EvcnNhIiE9PWopdGhyb3cgbmV3IEVycm9yKCJ3'@;
put 'cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gUihJLGssRSl7dmFyIGo9TVtFLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIWopdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrRS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3Jl'@;
put 'dHVybiBuZXcgbShqKS52ZXJpZnkoayxJLEUuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oSSxrLEIpfWlmKCJkc2EiPT09Qi50eXBlKXtpZigiZHNhIiE9PWopdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24geihJLGssRSl7dmFy'@;
put 'IGo9RS5kYXRhLnAsVj1FLmRhdGEucSxCPUUuZGF0YS5nLFk9RS5kYXRhLnB1Yl9rZXksWD1sZS5zaWduYXR1cmUuZGVjb2RlKEksImRlciIpLFU9WC5zLHE9WC5yO0soVSxWKSxLKHEsVik7dmFyIGVlPXgubW9udChqKSx0ZT1VLmludm0oVik7cmV0dXJuIDA9PT1CLnRvUmVkKGVlKS5yZWRQ'@;
put 'b3cobmV3IHgoaykubXVsKHRlKS5tb2QoVikpLmZyb21SZWQoKS5tdWwoWS50b1JlZChlZSkucmVkUG93KHEubXVsKHRlKS5tb2QoVikpLmZyb21SZWQoKSkubW9kKGopLm1vZChWKS5jbXAocSl9KEksayxCKX1pZigicnNhIiE9PWomJiJlY2RzYS9yc2EiIT09ail0aHJvdyBuZXcgRXJyb3Io'@;
put 'Indyb25nIHB1YmxpYyBrZXkgdHlwZSIpO2s9YWUuY29uY2F0KFtWLGtdKTtmb3IodmFyIFk9Qi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxYPVsxXSxVPTA7ay5sZW5ndGgrWC5sZW5ndGgrMjxZOylYLnB1c2goMjU1KSxVKz0xO1gucHVzaCgwKTtmb3IodmFyIHE9LTE7KytxPGsubGVuZ3RoOylY'@;
put 'LnB1c2goa1txXSk7WD1hZS5mcm9tKFgpO3ZhciBlZT14Lm1vbnQoQi5tb2R1bHVzKTtJPShJPW5ldyB4KEkpLnRvUmVkKGVlKSkucmVkUG93KG5ldyB4KEIucHVibGljRXhwb25lbnQpKSxJPWFlLmZyb20oSS5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdGU9VTw4PzE6MDtmb3IoWT1NYXRo'@;
put 'Lm1pbihJLmxlbmd0aCxYLmxlbmd0aCksSS5sZW5ndGghPT1YLmxlbmd0aCYmKHRlPTEpLHE9LTE7KytxPFk7KXRlfD1JW3FdXlhbcV07cmV0dXJuIDA9PT10ZX19LDYzNjM2OmF0PT57YXQuZXhwb3J0cz1mdW5jdGlvbihGLGFlKXtmb3IodmFyIHg9TWF0aC5taW4oRi5sZW5ndGgsYWUubGVu'@;
put 'Z3RoKSxtPW5ldyBCdWZmZXIoeCksbGU9MDtsZTx4OysrbGUpbVtsZV09RltsZV1eYWVbbGVdO3JldHVybiBtfX0sMzkwMDc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDk5MTkpLHg9RigyMjYwMSksbT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7SWUuQnVmZmVyPVIsSWUuU2xvd0J1ZmZlcj1mdW5jdGlvbiBVKFBlKXtyZXR1cm4rUGUhPVBlJiYoUGU9MCksUi5hbGxvYygrUGUpfSxJZS5JTlNQRUNUX01BWF9CWVRFUz01MDt2'@;
put 'YXIgbGU9MjE0NzQ4MzY0NztmdW5jdGlvbiBPKFBlKXtpZihQZT5sZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1BlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgYmU9bmV3IFVpbnQ4QXJyYXkoUGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBl'@;
put 'T2YoYmUsUi5wcm90b3R5cGUpLGJlfWZ1bmN0aW9uIFIoUGUsYmUsQWUpe2lmKCJudW1iZXIiPT10eXBlb2YgUGUpe2lmKCJzdHJpbmciPT10eXBlb2YgYmUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVk'@;
put 'IHR5cGUgbnVtYmVyJyk7cmV0dXJuIGsoUGUpfXJldHVybiB6KFBlLGJlLEFlKX1mdW5jdGlvbiB6KFBlLGJlLEFlKXtpZigic3RyaW5nIj09dHlwZW9mIFBlKXJldHVybiBmdW5jdGlvbiBFKFBlLGJlKXtpZigoInN0cmluZyIhPXR5cGVvZiBiZXx8IiI9PT1iZSkmJihiZT0idXRmOCIpLCFS'@;
put 'LmlzRW5jb2RpbmcoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYmUpO3ZhciBBZT0wfHEoUGUsYmUpLFRlPU8oQWUpLHFlPVRlLndyaXRlKFBlLGJlKTtyZXR1cm4gcWUhPT1BZSYmKFRlPVRlLnNsaWNlKDAscWUpKSxUZX0oUGUsYmUpO2lmKEFycmF5QnVm'@;
put 'ZmVyLmlzVmlldyhQZSkpcmV0dXJuIGZ1bmN0aW9uIFYoUGUpe2lmKFllKFBlLFVpbnQ4QXJyYXkpKXt2YXIgYmU9bmV3IFVpbnQ4QXJyYXkoUGUpO3JldHVybiBCKGJlLmJ1ZmZlcixiZS5ieXRlT2Zmc2V0LGJlLmJ5dGVMZW5ndGgpfXJldHVybiBqKFBlKX0oUGUpO2lmKG51bGw9PVBlKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFBlKTtpZihZZShQZSxBcnJheUJ1ZmZlcil8'@;
put 'fFBlJiZZZShQZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoWWUoUGUsU2hhcmVkQXJyYXlCdWZmZXIpfHxQZSYmWWUoUGUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEIoUGUsYmUsQWUpO2lmKCJudW1iZXIiPT10eXBlb2Yg'@;
put 'UGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIFRlPVBlLnZhbHVlT2YmJlBlLnZhbHVlT2YoKTtpZihudWxsIT1UZSYmVGUhPT1QZSlyZXR1cm4gUi5mcm9tKFRl'@;
put 'LGJlLEFlKTt2YXIgcWU9ZnVuY3Rpb24gWShQZSl7aWYoUi5pc0J1ZmZlcihQZSkpe3ZhciBiZT0wfFgoUGUubGVuZ3RoKSxBZT1PKGJlKTtyZXR1cm4gMD09PUFlLmxlbmd0aHx8UGUuY29weShBZSwwLDAsYmUpLEFlfXJldHVybiB2b2lkIDAhPT1QZS5sZW5ndGg/Im51bWJlciIhPXR5cGVv'@;
put 'ZiBQZS5sZW5ndGh8fFFlKFBlLmxlbmd0aCk/TygwKTpqKFBlKToiQnVmZmVyIj09PVBlLnR5cGUmJkFycmF5LmlzQXJyYXkoUGUuZGF0YSk/aihQZS5kYXRhKTp2b2lkIDB9KFBlKTtpZihxZSlyZXR1cm4gcWU7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2'@;
put 'ZSYmImZ1bmN0aW9uIj09dHlwZW9mIFBlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIFIuZnJvbShQZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxiZSxBZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5n'@;
put 'LCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgUGUpfWZ1bmN0aW9uIEsoUGUpe2lmKCJudW1iZXIiIT10eXBlb2YgUGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2Yg'@;
put 'dHlwZSBudW1iZXInKTtpZihQZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrUGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIGsoUGUpe3JldHVybiBLKFBlKSxPKFBlPDA/MDowfFgoUGUpKX1mdW5jdGlvbiBqKFBlKXtmb3IodmFyIGJl'@;
put 'PVBlLmxlbmd0aDwwPzA6MHxYKFBlLmxlbmd0aCksQWU9TyhiZSksVGU9MDtUZTxiZTtUZSs9MSlBZVtUZV09MjU1JlBlW1RlXTtyZXR1cm4gQWV9ZnVuY3Rpb24gQihQZSxiZSxBZSl7aWYoYmU8MHx8UGUuYnl0ZUxlbmd0aDxiZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMg'@;
put 'b3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoUGUuYnl0ZUxlbmd0aDxiZSsoQWV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgVGU7cmV0dXJuIFRlPXZvaWQgMD09PWJlJiZ2b2lkIDA9PT1BZT9uZXcgVWlu'@;
put 'dDhBcnJheShQZSk6dm9pZCAwPT09QWU/bmV3IFVpbnQ4QXJyYXkoUGUsYmUpOm5ldyBVaW50OEFycmF5KFBlLGJlLEFlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoVGUsUi5wcm90b3R5cGUpLFRlfWZ1bmN0aW9uIFgoUGUpe2lmKFBlPj1sZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1w'@;
put 'dCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrbGUudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxQZX1mdW5jdGlvbiBxKFBlLGJlKXtpZihSLmlzQnVmZmVyKFBlKSlyZXR1cm4gUGUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhQ'@;
put 'ZSl8fFllKFBlLEFycmF5QnVmZmVyKSlyZXR1cm4gUGUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIFBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVj'@;
put 'ZWl2ZWQgdHlwZSAnK3R5cGVvZiBQZSk7dmFyIEFlPVBlLmxlbmd0aCxUZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFUZSYmMD09PUFlKXJldHVybiAwO2Zvcih2YXIgcWU9ITE7Oylzd2l0Y2goYmUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJp'@;
put 'bmFyeSI6cmV0dXJuIEFlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEZlKFBlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKkFlO2Nhc2UiaGV4IjpyZXR1cm4gQWU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1'@;
put 'cm4gV2UoUGUpLmxlbmd0aDtkZWZhdWx0OmlmKHFlKXJldHVybiBUZT8tMTpGZShQZSkubGVuZ3RoO2JlPSgiIitiZSkudG9Mb3dlckNhc2UoKSxxZT0hMH19ZnVuY3Rpb24gZWUoUGUsYmUsQWUpe3ZhciBUZT0hMTtpZigodm9pZCAwPT09YmV8fGJlPDApJiYoYmU9MCksYmU+dGhpcy5sZW5n'@;
put 'dGh8fCgodm9pZCAwPT09QWV8fEFlPnRoaXMubGVuZ3RoKSYmKEFlPXRoaXMubGVuZ3RoKSxBZTw9MCl8fChBZT4+Pj0wKTw9KGJlPj4+PTApKXJldHVybiIiO2ZvcihQZXx8KFBlPSJ1dGY4Iik7Oylzd2l0Y2goUGUpe2Nhc2UiaGV4IjpyZXR1cm4gdih0aGlzLGJlLEFlKTtjYXNlInV0Zjgi'@;
put 'OmNhc2UidXRmLTgiOnJldHVybiBIKHRoaXMsYmUsQWUpO2Nhc2UiYXNjaWkiOnJldHVybiBDKHRoaXMsYmUsQWUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFModGhpcyxiZSxBZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBEKHRoaXMsYmUsQWUpO2Nhc2UidWNzMiI6Y2FzZSJ1'@;
put 'Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gcCh0aGlzLGJlLEFlKTtkZWZhdWx0OmlmKFRlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrUGUpO1BlPShQZSsiIikudG9Mb3dlckNhc2UoKSxUZT0hMH19ZnVuY3Rpb24gdGUoUGUsYmUs'@;
put 'QWUpe3ZhciBUZT1QZVtiZV07UGVbYmVdPVBlW0FlXSxQZVtBZV09VGV9ZnVuY3Rpb24gb2UoUGUsYmUsQWUsVGUscWUpe2lmKDA9PT1QZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBBZT8oVGU9QWUsQWU9MCk6QWU+MjE0NzQ4MzY0Nz9BZT0yMTQ3NDgzNjQ3OkFlPC0y'@;
put 'MTQ3NDgzNjQ4JiYoQWU9LTIxNDc0ODM2NDgpLFFlKEFlPStBZSkmJihBZT1xZT8wOlBlLmxlbmd0aC0xKSxBZTwwJiYoQWU9UGUubGVuZ3RoK0FlKSxBZT49UGUubGVuZ3RoKXtpZihxZSlyZXR1cm4tMTtBZT1QZS5sZW5ndGgtMX1lbHNlIGlmKEFlPDApe2lmKCFxZSlyZXR1cm4tMTtBZT0w'@;
put 'fWlmKCJzdHJpbmciPT10eXBlb2YgYmUmJihiZT1SLmZyb20oYmUsVGUpKSxSLmlzQnVmZmVyKGJlKSlyZXR1cm4gMD09PWJlLmxlbmd0aD8tMTpzZShQZSxiZSxBZSxUZSxxZSk7aWYoIm51bWJlciI9PXR5cGVvZiBiZSlyZXR1cm4gYmUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhB'@;
put 'cnJheS5wcm90b3R5cGUuaW5kZXhPZj9xZT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoUGUsYmUsQWUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoUGUsYmUsQWUpOnNlKFBlLFtiZV0sQWUsVGUscWUpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBt'@;
put 'dXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHNlKFBlLGJlLEFlLFRlLHFlKXt2YXIgRGUsWGU9MSxVZT1QZS5sZW5ndGgsaHQ9YmUubGVuZ3RoO2lmKHZvaWQgMCE9PVRlJiYoInVjczIiPT09KFRlPVN0cmluZyhUZSkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9'@;
put 'PT1UZXx8InV0ZjE2bGUiPT09VGV8fCJ1dGYtMTZsZSI9PT1UZSkpe2lmKFBlLmxlbmd0aDwyfHxiZS5sZW5ndGg8MilyZXR1cm4tMTtYZT0yLFVlLz0yLGh0Lz0yLEFlLz0yfWZ1bmN0aW9uIE1lKE10LEh0KXtyZXR1cm4gMT09PVhlP010W0h0XTpNdC5yZWFkVUludDE2QkUoSHQqWGUpfWlm'@;
put 'KHFlKXt2YXIgemU9LTE7Zm9yKERlPUFlO0RlPFVlO0RlKyspaWYoTWUoUGUsRGUpPT09TWUoYmUsLTE9PT16ZT8wOkRlLXplKSl7aWYoLTE9PT16ZSYmKHplPURlKSxEZS16ZSsxPT09aHQpcmV0dXJuIHplKlhlfWVsc2UtMSE9PXplJiYoRGUtPURlLXplKSx6ZT0tMX1lbHNlIGZvcihBZSto'@;
put 'dD5VZSYmKEFlPVVlLWh0KSxEZT1BZTtEZT49MDtEZS0tKXtmb3IodmFyIG90PSEwLHV0PTA7dXQ8aHQ7dXQrKylpZihNZShQZSxEZSt1dCkhPT1NZShiZSx1dCkpe290PSExO2JyZWFrfWlmKG90KXJldHVybiBEZX1yZXR1cm4tMX1mdW5jdGlvbiBoZShQZSxiZSxBZSxUZSl7QWU9TnVtYmVy'@;
put 'KEFlKXx8MDt2YXIgcWU9UGUubGVuZ3RoLUFlO1RlPyhUZT1OdW1iZXIoVGUpKT5xZSYmKFRlPXFlKTpUZT1xZTt2YXIgWGU9YmUubGVuZ3RoO1RlPlhlLzImJihUZT1YZS8yKTtmb3IodmFyIFVlPTA7VWU8VGU7KytVZSl7dmFyIGh0PXBhcnNlSW50KGJlLnN1YnN0cigyKlVlLDIpLDE2KTtp'@;
put 'ZihRZShodCkpcmV0dXJuIFVlO1BlW0FlK1VlXT1odH1yZXR1cm4gVWV9ZnVuY3Rpb24gdWUoUGUsYmUsQWUsVGUpe3JldHVybiBLZShGZShiZSxQZS5sZW5ndGgtQWUpLFBlLEFlLFRlKX1mdW5jdGlvbiBjZShQZSxiZSxBZSxUZSl7cmV0dXJuIEtlKGZ1bmN0aW9uIE9lKFBlKXtmb3IodmFy'@;
put 'IGJlPVtdLEFlPTA7QWU8UGUubGVuZ3RoOysrQWUpYmUucHVzaCgyNTUmUGUuY2hhckNvZGVBdChBZSkpO3JldHVybiBiZX0oYmUpLFBlLEFlLFRlKX1mdW5jdGlvbiBHKFBlLGJlLEFlLFRlKXtyZXR1cm4gS2UoV2UoYmUpLFBlLEFlLFRlKX1mdW5jdGlvbiBiKFBlLGJlLEFlLFRlKXtyZXR1'@;
put 'cm4gS2UoZnVuY3Rpb24gamUoUGUsYmUpe2Zvcih2YXIgQWUsVGUsWGU9W10sVWU9MDtVZTxQZS5sZW5ndGgmJiEoKGJlLT0yKTwwKTsrK1VlKVRlPShBZT1QZS5jaGFyQ29kZUF0KFVlKSk+PjgsWGUucHVzaChBZSUyNTYpLFhlLnB1c2goVGUpO3JldHVybiBYZX0oYmUsUGUubGVuZ3RoLUFl'@;
put 'KSxQZSxBZSxUZSl9ZnVuY3Rpb24gRChQZSxiZSxBZSl7cmV0dXJuIGFlLmZyb21CeXRlQXJyYXkoMD09PWJlJiZBZT09PVBlLmxlbmd0aD9QZTpQZS5zbGljZShiZSxBZSkpfWZ1bmN0aW9uIEgoUGUsYmUsQWUpe0FlPU1hdGgubWluKFBlLmxlbmd0aCxBZSk7Zm9yKHZhciBUZT1bXSxxZT1i'@;
put 'ZTtxZTxBZTspe3ZhciBNZSxEZSx6ZSxvdCxYZT1QZVtxZV0sVWU9bnVsbCxodD1YZT4yMzk/NDpYZT4yMjM/MzpYZT4xOTE/MjoxO2lmKHFlK2h0PD1BZSlzd2l0Y2goaHQpe2Nhc2UgMTpYZTwxMjgmJihVZT1YZSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoTWU9UGVbcWUrMV0pKSYmKG90'@;
put 'PSgzMSZYZSk8PDZ8NjMmTWUpPjEyNyYmKFVlPW90KTticmVhaztjYXNlIDM6RGU9UGVbcWUrMl0sMTI4PT0oMTkyJihNZT1QZVtxZSsxXSkpJiYxMjg9PSgxOTImRGUpJiYob3Q9KDE1JlhlKTw8MTJ8KDYzJk1lKTw8Nnw2MyZEZSk+MjA0NyYmKG90PDU1Mjk2fHxvdD41NzM0MykmJihVZT1v'@;
put 'dCk7YnJlYWs7Y2FzZSA0OkRlPVBlW3FlKzJdLHplPVBlW3FlKzNdLDEyOD09KDE5MiYoTWU9UGVbcWUrMV0pKSYmMTI4PT0oMTkyJkRlKSYmMTI4PT0oMTkyJnplKSYmKG90PSgxNSZYZSk8PDE4fCg2MyZNZSk8PDEyfCg2MyZEZSk8PDZ8NjMmemUpPjY1NTM1JiZvdDwxMTE0MTEyJiYoVWU9'@;
put 'b3QpfW51bGw9PT1VZT8oVWU9NjU1MzMsaHQ9MSk6VWU+NjU1MzUmJihUZS5wdXNoKChVZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksVWU9NTYzMjB8MTAyMyZVZSksVGUucHVzaChVZSkscWUrPWh0fXJldHVybiBmdW5jdGlvbiBnKFBlKXt2YXIgYmU9UGUubGVuZ3RoO2lmKGJlPD1OKXJl'@;
put 'dHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxQZSk7Zm9yKHZhciBBZT0iIixUZT0wO1RlPGJlOylBZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsUGUuc2xpY2UoVGUsVGUrPU4pKTtyZXR1cm4gQWV9KFRlKX1JZS5rTWF4TGVuZ3RoPWxlLCEoUi5UWVBF'@;
put 'RF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIE0oKXt0cnl7dmFyIFBlPW5ldyBVaW50OEFycmF5KDEpLGJlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGJlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2Yo'@;
put 'UGUsYmUpLDQyPT09UGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdo'@;
put 'aWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lm'@;
put 'KFIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihSLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksUi5wb29s'@;
put 'U2l6ZT04MTkyLFIuZnJvbT1mdW5jdGlvbihQZSxiZSxBZSl7cmV0dXJuIHooUGUsYmUsQWUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihSLFVpbnQ4QXJyYXkpLFIuYWxsb2M9ZnVuY3Rpb24o'@;
put 'UGUsYmUsQWUpe3JldHVybiBmdW5jdGlvbiBJKFBlLGJlLEFlKXtyZXR1cm4gSyhQZSksUGU8PTA/TyhQZSk6dm9pZCAwIT09YmU/InN0cmluZyI9PXR5cGVvZiBBZT9PKFBlKS5maWxsKGJlLEFlKTpPKFBlKS5maWxsKGJlKTpPKFBlKX0oUGUsYmUsQWUpfSxSLmFsbG9jVW5zYWZlPWZ1bmN0'@;
put 'aW9uKFBlKXtyZXR1cm4gayhQZSl9LFIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFBlKXtyZXR1cm4gayhQZSl9LFIuaXNCdWZmZXI9ZnVuY3Rpb24oYmUpe3JldHVybiBudWxsIT1iZSYmITA9PT1iZS5faXNCdWZmZXImJmJlIT09Ui5wcm90b3R5cGV9LFIuY29tcGFyZT1mdW5jdGlvbihi'@;
put 'ZSxBZSl7aWYoWWUoYmUsVWludDhBcnJheSkmJihiZT1SLmZyb20oYmUsYmUub2Zmc2V0LGJlLmJ5dGVMZW5ndGgpKSxZZShBZSxVaW50OEFycmF5KSYmKEFlPVIuZnJvbShBZSxBZS5vZmZzZXQsQWUuYnl0ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKGJlKXx8IVIuaXNCdWZmZXIoQWUpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGJlPT09QWUpcmV0dXJuIDA7Zm9yKHZhciBUZT1iZS5sZW5ndGgscWU9QWUubGVuZ3RoLFhlPTAsVWU9TWF0aC5taW4oVGUscWUp'@;
put 'O1hlPFVlOysrWGUpaWYoYmVbWGVdIT09QWVbWGVdKXtUZT1iZVtYZV0scWU9QWVbWGVdO2JyZWFrfXJldHVybiBUZTxxZT8tMTpxZTxUZT8xOjB9LFIuaXNFbmNvZGluZz1mdW5jdGlvbihiZSl7c3dpdGNoKFN0cmluZyhiZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6'@;
put 'Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxSLmNvbmNhdD1mdW5jdGlvbihiZSxB'@;
put 'ZSl7aWYoIUFycmF5LmlzQXJyYXkoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09YmUubGVuZ3RoKXJldHVybiBSLmFsbG9jKDApO3ZhciBUZTtpZih2b2lkIDA9PT1BZSlmb3IoQWU9MCxUZT0wO1Rl'@;
put 'PGJlLmxlbmd0aDsrK1RlKUFlKz1iZVtUZV0ubGVuZ3RoO3ZhciBxZT1SLmFsbG9jVW5zYWZlKEFlKSxYZT0wO2ZvcihUZT0wO1RlPGJlLmxlbmd0aDsrK1RlKXt2YXIgVWU9YmVbVGVdO2lmKFllKFVlLFVpbnQ4QXJyYXkpKVhlK1VlLmxlbmd0aD5xZS5sZW5ndGg/Ui5mcm9tKFVlKS5jb3B5'@;
put 'KHFlLFhlKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChxZSxVZSxYZSk7ZWxzZXtpZighUi5pc0J1ZmZlcihVZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1VlLmNvcHkocWUsWGUpfVhlKz1VZS5sZW5n'@;
put 'dGh9cmV0dXJuIHFlfSxSLmJ5dGVMZW5ndGg9cSxSLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsUi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO2lmKGJlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBs'@;
put 'ZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBBZT0wO0FlPGJlO0FlKz0yKXRlKHRoaXMsQWUsQWUrMSk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBiZT10aGlzLmxlbmd0aDtpZihiZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBt'@;
put 'dXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgQWU9MDtBZTxiZTtBZSs9NCl0ZSh0aGlzLEFlLEFlKzMpLHRlKHRoaXMsQWUrMSxBZSsyKTtyZXR1cm4gdGhpc30sUi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO2lmKGJlJTghPTAp'@;
put 'dGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBBZT0wO0FlPGJlO0FlKz04KXRlKHRoaXMsQWUsQWUrNyksdGUodGhpcyxBZSsxLEFlKzYpLHRlKHRoaXMsQWUrMixBZSs1KSx0ZSh0aGlzLEFlKzMsQWUrNCk7'@;
put 'cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPVIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO3JldHVybiAwPT09YmU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/SCh0aGlzLDAsYmUpOmVlLmFwcGx5KHRoaXMsYXJndW1lbnRz'@;
put 'KX0sUi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGJlKXtpZighUi5pc0J1ZmZlcihiZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09YmV8fDA9PT1SLmNvbXBhcmUodGhpcyxiZSl9LFIucHJvdG90eXBlLmluc3BlY3Q9'@;
put 'ZnVuY3Rpb24oKXt2YXIgYmU9IiIsQWU9SWUuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGJlPXRoaXMudG9TdHJpbmcoImhleCIsMCxBZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5BZSYmKGJlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK2JlKyI+In0sbSYm'@;
put 'KFIucHJvdG90eXBlW21dPVIucHJvdG90eXBlLmluc3BlY3QpLFIucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYmUsQWUsVGUscWUsWGUpe2lmKFllKGJlLFVpbnQ4QXJyYXkpJiYoYmU9Ui5mcm9tKGJlLGJlLm9mZnNldCxiZS5ieXRlTGVuZ3RoKSksIVIuaXNCdWZmZXIoYmUpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGJlKTtpZih2b2lkIDA9PT1BZSYmKEFlPTApLHZvaWQgMD09PVRlJiYoVGU9YmU/YmUubGVuZ3RoOjApLHZv'@;
put 'aWQgMD09PXFlJiYocWU9MCksdm9pZCAwPT09WGUmJihYZT10aGlzLmxlbmd0aCksQWU8MHx8VGU+YmUubGVuZ3RofHxxZTwwfHxYZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocWU+PVhlJiZBZT49VGUpcmV0dXJuIDA7aWYocWU+'@;
put 'PVhlKXJldHVybi0xO2lmKEFlPj1UZSlyZXR1cm4gMTtpZih0aGlzPT09YmUpcmV0dXJuIDA7Zm9yKHZhciBVZT0oWGU+Pj49MCktKHFlPj4+PTApLGh0PShUZT4+Pj0wKS0oQWU+Pj49MCksTWU9TWF0aC5taW4oVWUsaHQpLERlPXRoaXMuc2xpY2UocWUsWGUpLHplPWJlLnNsaWNlKEFlLFRl'@;
put 'KSxvdD0wO290PE1lOysrb3QpaWYoRGVbb3RdIT09emVbb3RdKXtVZT1EZVtvdF0saHQ9emVbb3RdO2JyZWFrfXJldHVybiBVZTxodD8tMTpodDxVZT8xOjB9LFIucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihiZSxBZSxUZSl9'@;
put 'LFIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBvZSh0aGlzLGJlLEFlLFRlLCEwKX0sUi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBvZSh0aGlzLGJlLEFlLFRlLCExKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rp'@;
put 'b24oYmUsQWUsVGUscWUpe2lmKHZvaWQgMD09PUFlKXFlPSJ1dGY4IixUZT10aGlzLmxlbmd0aCxBZT0wO2Vsc2UgaWYodm9pZCAwPT09VGUmJiJzdHJpbmciPT10eXBlb2YgQWUpcWU9QWUsVGU9dGhpcy5sZW5ndGgsQWU9MDtlbHNle2lmKCFpc0Zpbml0ZShBZSkpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0FlPj4+PTAsaXNGaW5pdGUoVGUpPyhUZT4+Pj0wLHZvaWQgMD09PXFlJiYocWU9InV0ZjgiKSk6KHFlPVRlLFRlPXZvaWQgMCl9dmFyIFhlPXRoaXMubGVu'@;
put 'Z3RoLUFlO2lmKCh2b2lkIDA9PT1UZXx8VGU+WGUpJiYoVGU9WGUpLGJlLmxlbmd0aD4wJiYoVGU8MHx8QWU8MCl8fEFlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3FlfHwocWU9InV0ZjgiKTtmb3Io'@;
put 'dmFyIFVlPSExOzspc3dpdGNoKHFlKXtjYXNlImhleCI6cmV0dXJuIGhlKHRoaXMsYmUsQWUsVGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHVlKHRoaXMsYmUsQWUsVGUpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNlKHRoaXMsYmUsQWUs'@;
put 'VGUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gRyh0aGlzLGJlLEFlLFRlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGIodGhpcyxiZSxBZSxUZSk7ZGVmYXVsdDppZihVZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29k'@;
put 'aW5nOiAiK3FlKTtxZT0oIiIrcWUpLnRvTG93ZXJDYXNlKCksVWU9ITB9fSxSLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBOPTQwOTY7ZnVuY3Rp'@;
put 'b24gQyhQZSxiZSxBZSl7dmFyIFRlPSIiO0FlPU1hdGgubWluKFBlLmxlbmd0aCxBZSk7Zm9yKHZhciBxZT1iZTtxZTxBZTsrK3FlKVRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZQZVtxZV0pO3JldHVybiBUZX1mdW5jdGlvbiBTKFBlLGJlLEFlKXt2YXIgVGU9IiI7QWU9TWF0aC5taW4o'@;
put 'UGUubGVuZ3RoLEFlKTtmb3IodmFyIHFlPWJlO3FlPEFlOysrcWUpVGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoUGVbcWVdKTtyZXR1cm4gVGV9ZnVuY3Rpb24gdihQZSxiZSxBZSl7dmFyIFRlPVBlLmxlbmd0aDsoIWJlfHxiZTwwKSYmKGJlPTApLCghQWV8fEFlPDB8fEFlPlRlKSYmKEFlPVRl'@;
put 'KTtmb3IodmFyIHFlPSIiLFhlPWJlO1hlPEFlOysrWGUpcWUrPWx0W1BlW1hlXV07cmV0dXJuIHFlfWZ1bmN0aW9uIHAoUGUsYmUsQWUpe2Zvcih2YXIgVGU9UGUuc2xpY2UoYmUsQWUpLHFlPSIiLFhlPTA7WGU8VGUubGVuZ3RoLTE7WGUrPTIpcWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoVGVb'@;
put 'WGVdKzI1NipUZVtYZSsxXSk7cmV0dXJuIHFlfWZ1bmN0aW9uIHcoUGUsYmUsQWUpe2lmKFBlJTEhPTB8fFBlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKFBlK2JlPkFlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9u'@;
put 'ZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gSihQZSxiZSxBZSxUZSxxZSxYZSl7aWYoIVIuaXNCdWZmZXIoUGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihiZT5xZXx8YmU8WGUpdGhyb3cgbmV3IFJhbmdl'@;
put 'RXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKEFlK1RlPlBlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gbmUoUGUsYmUsQWUsVGUscWUsWGUpe2lmKEFlK1RlPlBlLmxlbmd0aCl0aHJvdyBuZXcg'@;
put 'UmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoQWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gZGUoUGUsYmUsQWUsVGUscWUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxxZXx8bmUoUGUsMCxBZSw0KSx4LndyaXRlKFBlLGJl'@;
put 'LEFlLFRlLDIzLDQpLEFlKzR9ZnVuY3Rpb24gZmUoUGUsYmUsQWUsVGUscWUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxxZXx8bmUoUGUsMCxBZSw4KSx4LndyaXRlKFBlLGJlLEFlLFRlLDUyLDgpLEFlKzh9Ui5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oYmUsQWUpe3ZhciBUZT10aGlzLmxl'@;
put 'bmd0aDsoYmU9fn5iZSk8MD8oYmUrPVRlKTwwJiYoYmU9MCk6YmU+VGUmJihiZT1UZSksKEFlPXZvaWQgMD09PUFlP1RlOn5+QWUpPDA/KEFlKz1UZSk8MCYmKEFlPTApOkFlPlRlJiYoQWU9VGUpLEFlPGJlJiYoQWU9YmUpO3ZhciBxZT10aGlzLnN1YmFycmF5KGJlLEFlKTtyZXR1cm4gT2Jq'@;
put 'ZWN0LnNldFByb3RvdHlwZU9mKHFlLFIucHJvdG90eXBlKSxxZX0sUi5wcm90b3R5cGUucmVhZFVpbnRMRT1SLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGJlLEFlLFRlKXtiZT4+Pj0wLEFlPj4+PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcWU9dGhpc1tiZV0s'@;
put 'WGU9MSxVZT0wOysrVWU8QWUmJihYZSo9MjU2KTspcWUrPXRoaXNbYmUrVWVdKlhlO3JldHVybiBxZX0sUi5wcm90b3R5cGUucmVhZFVpbnRCRT1SLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtiZT4+Pj0wLEFlPj4+PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgp'@;
put 'O2Zvcih2YXIgcWU9dGhpc1tiZSstLUFlXSxYZT0xO0FlPjAmJihYZSo9MjU2KTspcWUrPXRoaXNbYmUrLS1BZV0qWGU7cmV0dXJuIHFlfSxSLnByb3RvdHlwZS5yZWFkVWludDg9Ui5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSwx'@;
put 'LHRoaXMubGVuZ3RoKSx0aGlzW2JlXX0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVIucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMix0aGlzLmxlbmd0aCksdGhpc1tiZV18dGhpc1tiZSsxXTw8OH0sUi5wcm90b3R5cGUu'@;
put 'cmVhZFVpbnQxNkJFPVIucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMix0aGlzLmxlbmd0aCksdGhpc1tiZV08PDh8dGhpc1tiZSsxXX0sUi5wcm90b3R5cGUucmVhZFVpbnQzMkxFPVIucHJvdG90eXBlLnJlYWRVSW50MzJM'@;
put 'RT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCksKHRoaXNbYmVdfHRoaXNbYmUrMV08PDh8dGhpc1tiZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbYmUrM119LFIucHJvdG90eXBlLnJlYWRVaW50MzJCRT1SLnByb3RvdHlwZS5yZWFkVUludDMy'@;
put 'QkU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbYmVdKyh0aGlzW2JlKzFdPDwxNnx0aGlzW2JlKzJdPDw4fHRoaXNbYmUrM10pfSxSLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUpe2JlPj4+'@;
put 'PTAsQWU+Pj49MCxUZXx8dyhiZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxZT10aGlzW2JlXSxYZT0xLFVlPTA7KytVZTxBZSYmKFhlKj0yNTYpOylxZSs9dGhpc1tiZStVZV0qWGU7cmV0dXJuIHFlPj0oWGUqPTEyOCkmJihxZS09TWF0aC5wb3coMiw4KkFlKSkscWV9LFIucHJvdG90eXBl'@;
put 'LnJlYWRJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSl7YmU+Pj49MCxBZT4+Pj0wLFRlfHx3KGJlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIHFlPUFlLFhlPTEsVWU9dGhpc1tiZSstLXFlXTtxZT4wJiYoWGUqPTI1Nik7KVVlKz10aGlzW2JlKy0tcWVdKlhlO3JldHVybiBVZT49KFhlKj0xMjgp'@;
put 'JiYoVWUtPU1hdGgucG93KDIsOCpBZSkpLFVlfSxSLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbYmVdPy0xKigyNTUtdGhpc1tiZV0rMSk6dGhpc1tiZV19LFIucHJvdG90eXBlLnJlYWRJ'@;
put 'bnQxNkxFPWZ1bmN0aW9uKGJlLEFlKXtiZT4+Pj0wLEFlfHx3KGJlLDIsdGhpcy5sZW5ndGgpO3ZhciBUZT10aGlzW2JlXXx0aGlzW2JlKzFdPDw4O3JldHVybiAzMjc2OCZUZT80Mjk0OTAxNzYwfFRlOlRlfSxSLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihiZSxBZSl7YmU+Pj49'@;
put 'MCxBZXx8dyhiZSwyLHRoaXMubGVuZ3RoKTt2YXIgVGU9dGhpc1tiZSsxXXx0aGlzW2JlXTw8ODtyZXR1cm4gMzI3NjgmVGU/NDI5NDkwMTc2MHxUZTpUZX0sUi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5n'@;
put 'dGgpLHRoaXNbYmVdfHRoaXNbYmUrMV08PDh8dGhpc1tiZSsyXTw8MTZ8dGhpc1tiZSszXTw8MjR9LFIucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2JlXTw8MjR8dGhpc1tiZSsxXTw8MTZ8'@;
put 'dGhpc1tiZSsyXTw8OHx0aGlzW2JlKzNdfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCkseC5yZWFkKHRoaXMsYmUsITAsMjMsNCl9LFIucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGJl'@;
put 'LEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwhMSwyMyw0KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw4LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwh'@;
put 'MCw1Miw4KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw4LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwhMSw1Miw4KX0sUi5wcm90b3R5cGUud3JpdGVVaW50TEU9Ui5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVu'@;
put 'Y3Rpb24oYmUsQWUsVGUscWUpe2JlPStiZSxBZT4+Pj0wLFRlPj4+PTAscWV8fEoodGhpcyxiZSxBZSxUZSxNYXRoLnBvdygyLDgqVGUpLTEsMCk7dmFyIFVlPTEsaHQ9MDtmb3IodGhpc1tBZV09MjU1JmJlOysraHQ8VGUmJihVZSo9MjU2KTspdGhpc1tBZStodF09YmUvVWUmMjU1O3JldHVy'@;
put 'biBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVVaW50QkU9Ui5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2JlPStiZSxBZT4+Pj0wLFRlPj4+PTAscWV8fEoodGhpcyxiZSxBZSxUZSxNYXRoLnBvdygyLDgqVGUpLTEsMCk7dmFyIFVlPVRlLTEsaHQ9MTtmb3Io'@;
put 'dGhpc1tBZStVZV09MjU1JmJlOy0tVWU+PTAmJihodCo9MjU2KTspdGhpc1tBZStVZV09YmUvaHQmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVVaW50OD1SLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8'@;
put 'fEoodGhpcyxiZSxBZSwxLDI1NSwwKSx0aGlzW0FlXT0yNTUmYmUsQWUrMX0sUi5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1SLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwyLDY1NTM1LDAp'@;
put 'LHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCxBZSsyfSxSLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPVIucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDIsNjU1MzUsMCksdGhp'@;
put 'c1tBZV09YmU+Pj44LHRoaXNbQWUrMV09MjU1JmJlLEFlKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ui5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCw0Mjk0OTY3Mjk1LDApLHRo'@;
put 'aXNbQWUrM109YmU+Pj4yNCx0aGlzW0FlKzJdPWJlPj4+MTYsdGhpc1tBZSsxXT1iZT4+PjgsdGhpc1tBZV09MjU1JmJlLEFlKzR9LFIucHJvdG90eXBlLndyaXRlVWludDMyQkU9Ui5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+'@;
put 'Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbQWVdPWJlPj4+MjQsdGhpc1tBZSsxXT1iZT4+PjE2LHRoaXNbQWUrMl09YmU+Pj44LHRoaXNbQWUrM109MjU1JmJlLEFlKzR9LFIucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2lmKGJl'@;
put 'PStiZSxBZT4+Pj0wLCFxZSl7dmFyIFhlPU1hdGgucG93KDIsOCpUZS0xKTtKKHRoaXMsYmUsQWUsVGUsWGUtMSwtWGUpfXZhciBVZT0wLGh0PTEsTWU9MDtmb3IodGhpc1tBZV09MjU1JmJlOysrVWU8VGUmJihodCo9MjU2KTspYmU8MCYmMD09PU1lJiYwIT09dGhpc1tBZStVZS0xXSYmKE1l'@;
put 'PTEpLHRoaXNbQWUrVWVdPShiZS9odD4+MCktTWUmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7aWYoYmU9K2JlLEFlPj4+PTAsIXFlKXt2YXIgWGU9TWF0aC5wb3coMiw4KlRlLTEpO0oodGhpcyxiZSxBZSxUZSxYZS0xLC1Y'@;
put 'ZSl9dmFyIFVlPVRlLTEsaHQ9MSxNZT0wO2Zvcih0aGlzW0FlK1VlXT0yNTUmYmU7LS1VZT49MCYmKGh0Kj0yNTYpOyliZTwwJiYwPT09TWUmJjAhPT10aGlzW0FlK1VlKzFdJiYoTWU9MSksdGhpc1tBZStVZV09KGJlL2h0Pj4wKS1NZSYyNTU7cmV0dXJuIEFlK1RlfSxSLnByb3RvdHlwZS53'@;
put 'cml0ZUludDg9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDEsMTI3LC0xMjgpLGJlPDAmJihiZT0yNTUrYmUrMSksdGhpc1tBZV09MjU1JmJlLEFlKzF9LFIucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihiZSxBZSxUZSl7'@;
put 'cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMiwzMjc2NywtMzI3NjgpLHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCxBZSsyfSxSLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8'@;
put 'Sih0aGlzLGJlLEFlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0FlXT1iZT4+PjgsdGhpc1tBZSsxXT0yNTUmYmUsQWUrMn0sUi5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSw0LDIxNDc0ODM2NDcs'@;
put 'LTIxNDc0ODM2NDgpLHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCx0aGlzW0FlKzJdPWJlPj4+MTYsdGhpc1tBZSszXT1iZT4+PjI0LEFlKzR9LFIucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRo'@;
put 'aXMsYmUsQWUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxiZTwwJiYoYmU9NDI5NDk2NzI5NStiZSsxKSx0aGlzW0FlXT1iZT4+PjI0LHRoaXNbQWUrMV09YmU+Pj4xNix0aGlzW0FlKzJdPWJlPj4+OCx0aGlzW0FlKzNdPTI1NSZiZSxBZSs0fSxSLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9'@;
put 'ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBkZSh0aGlzLGJlLEFlLCEwLFRlKX0sUi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gZGUodGhpcyxiZSxBZSwhMSxUZSl9LFIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oYmUsQWUsVGUp'@;
put 'e3JldHVybiBmZSh0aGlzLGJlLEFlLCEwLFRlKX0sUi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGZlKHRoaXMsYmUsQWUsITEsVGUpfSxSLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtpZighUi5pc0J1ZmZlcihiZSkpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoVGV8fChUZT0wKSwhcWUmJjAhPT1xZSYmKHFlPXRoaXMubGVuZ3RoKSxBZT49YmUubGVuZ3RoJiYoQWU9YmUubGVuZ3RoKSxBZXx8KEFlPTApLHFlPjAmJnFlPFRlJiYocWU9VGUpLHFlPT09VGV8fDA9'@;
put 'PT1iZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihBZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoVGU8MHx8VGU+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtp'@;
put 'ZihxZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3FlPnRoaXMubGVuZ3RoJiYocWU9dGhpcy5sZW5ndGgpLGJlLmxlbmd0aC1BZTxxZS1UZSYmKHFlPWJlLmxlbmd0aC1BZStUZSk7dmFyIFhlPXFlLVRlO3JldHVybiB0aGlzPT09YmUmJiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihBZSxUZSxxZSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoYmUsdGhpcy5zdWJhcnJheShUZSxxZSksQWUpLFhlfSxSLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGJlLEFl'@;
put 'LFRlLHFlKXtpZigic3RyaW5nIj09dHlwZW9mIGJlKXtpZigic3RyaW5nIj09dHlwZW9mIEFlPyhxZT1BZSxBZT0wLFRlPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIFRlJiYocWU9VGUsVGU9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PXFlJiYic3RyaW5nIiE9dHlwZW9mIHFlKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHFlJiYhUi5pc0VuY29kaW5nKHFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3FlKTtpZigxPT09YmUubGVuZ3RoKXt2YXIgWGU9YmUuY2hhckNv'@;
put 'ZGVBdCgwKTsoInV0ZjgiPT09cWUmJlhlPDEyOHx8ImxhdGluMSI9PT1xZSkmJihiZT1YZSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIGJlP2JlJj0yNTU6ImJvb2xlYW4iPT10eXBlb2YgYmUmJihiZT1OdW1iZXIoYmUpKTtpZihBZTwwfHx0aGlzLmxlbmd0aDxBZXx8dGhpcy5sZW5ndGg8VGUp'@;
put 'dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKFRlPD1BZSlyZXR1cm4gdGhpczt2YXIgVWU7aWYoQWU+Pj49MCxUZT12b2lkIDA9PT1UZT90aGlzLmxlbmd0aDpUZT4+PjAsYmV8fChiZT0wKSwibnVtYmVyIj09dHlwZW9mIGJlKWZvcihVZT1BZTtVZTxUZTsr'@;
put 'K1VlKXRoaXNbVWVdPWJlO2Vsc2V7dmFyIGh0PVIuaXNCdWZmZXIoYmUpP2JlOlIuZnJvbShiZSxxZSksTWU9aHQubGVuZ3RoO2lmKDA9PT1NZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrYmUrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihVZT0w'@;
put 'O1VlPFRlLUFlOysrVWUpdGhpc1tVZStBZV09aHRbVWUlTWVdfXJldHVybiB0aGlzfTt2YXIgeGU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBGZShQZSxiZSl7YmU9YmV8fDEvMDtmb3IodmFyIEFlLFRlPVBlLmxlbmd0aCxxZT1udWxsLFhlPVtdLFVlPTA7VWU8VGU7KytVZSl7aWYo'@;
put 'KEFlPVBlLmNoYXJDb2RlQXQoVWUpKT41NTI5NSYmQWU8NTczNDQpe2lmKCFxZSl7aWYoQWU+NTYzMTkpeyhiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFVlKzE9PT1UZSl7KGJlLT0zKT4tMSYmWGUucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9cWU9QWU7'@;
put 'Y29udGludWV9aWYoQWU8NTYzMjApeyhiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpLHFlPUFlO2NvbnRpbnVlfUFlPTY1NTM2KyhxZS01NTI5Njw8MTB8QWUtNTYzMjApfWVsc2UgcWUmJihiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpO2lmKHFlPW51bGwsQWU8MTI4KXtp'@;
put 'ZigoYmUtPTEpPDApYnJlYWs7WGUucHVzaChBZSl9ZWxzZSBpZihBZTwyMDQ4KXtpZigoYmUtPTIpPDApYnJlYWs7WGUucHVzaChBZT4+NnwxOTIsNjMmQWV8MTI4KX1lbHNlIGlmKEFlPDY1NTM2KXtpZigoYmUtPTMpPDApYnJlYWs7WGUucHVzaChBZT4+MTJ8MjI0LEFlPj42JjYzfDEyOCw2'@;
put 'MyZBZXwxMjgpfWVsc2V7aWYoIShBZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChiZS09NCk8MClicmVhaztYZS5wdXNoKEFlPj4xOHwyNDAsQWU+PjEyJjYzfDEyOCxBZT4+NiY2M3wxMjgsNjMmQWV8MTI4KX19cmV0dXJuIFhlfWZ1bmN0aW9u'@;
put 'IFdlKFBlKXtyZXR1cm4gYWUudG9CeXRlQXJyYXkoZnVuY3Rpb24gTGUoUGUpe2lmKChQZT0oUGU9UGUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoeGUsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO1BlLmxlbmd0aCU0IT0wOylQZSs9Ij0iO3JldHVybiBQZX0oUGUpKX1mdW5j'@;
put 'dGlvbiBLZShQZSxiZSxBZSxUZSl7Zm9yKHZhciBxZT0wO3FlPFRlJiYhKHFlK0FlPj1iZS5sZW5ndGh8fHFlPj1QZS5sZW5ndGgpOysrcWUpYmVbcWUrQWVdPVBlW3FlXTtyZXR1cm4gcWV9ZnVuY3Rpb24gWWUoUGUsYmUpe3JldHVybiBQZSBpbnN0YW5jZW9mIGJlfHxudWxsIT1QZSYmbnVs'@;
put 'bCE9UGUuY29uc3RydWN0b3ImJm51bGwhPVBlLmNvbnN0cnVjdG9yLm5hbWUmJlBlLmNvbnN0cnVjdG9yLm5hbWU9PT1iZS5uYW1lfWZ1bmN0aW9uIFFlKFBlKXtyZXR1cm4gUGUhPVBlfXZhciBsdD1mdW5jdGlvbigpe2Zvcih2YXIgUGU9IjAxMjM0NTY3ODlhYmNkZWYiLGJlPW5ldyBBcnJh'@;
put 'eSgyNTYpLEFlPTA7QWU8MTY7KytBZSlmb3IodmFyIFRlPTE2KkFlLHFlPTA7cWU8MTY7KytxZSliZVtUZStxZV09UGVbQWVdK1BlW3FlXTtyZXR1cm4gYmV9KCl9LDg2NDIwOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig1MTc5MykuVHJhbnNmb3JtLG09Rig3MjAyNCku'@;
put 'cztmdW5jdGlvbiBNKE8pe3guY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgTyx0aGlzLmhhc2hNb2RlP3RoaXNbT109dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhp'@;
put 'cy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9Rig2NjY5OCkoTSx4KSxNLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyxSLHopeyJzdHJpbmciPT10eXBlb2YgTyYmKE89YWUuZnJvbShPLFIpKTt2YXIgSz10aGlzLl91'@;
put 'cGRhdGUoTyk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooeiYmKEs9dGhpcy5fdG9TdHJpbmcoSyx6KSksSyl9LE0ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxNLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcg'@;
put 'dG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LE0ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sTS5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9u'@;
put 'KCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxNLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8sUix6KXt2YXIgSzt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoTyk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShP'@;
put 'KSl9Y2F0Y2goSSl7Sz1JfWZpbmFsbHl7eihLKX19LE0ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgUjt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaCh6KXtSPXp9TyhSKX0sTS5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oTyl7dmFyIFI9dGhp'@;
put 'cy5fX2ZpbmFsKCl8fGFlLmFsbG9jKDApO3JldHVybiBPJiYoUj10aGlzLl90b1N0cmluZyhSLE8sITApKSxSfSxNLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oTyxSLHope2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBtKFIpLHRoaXMuX2VuY29kaW5nPVIpLHRo'@;
put 'aXMuX2VuY29kaW5nIT09Uil0aHJvdyBuZXcgRXJyb3IoImNhbid0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKE8pO3JldHVybiB6JiYoSys9dGhpcy5fZGVjb2Rlci5lbmQoKSksS30sYXQuZXhwb3J0cz1NfSwzODg0MDooYXQsSWUsRik9Pnt2YXIgYWU9'@;
put 'Rig4ODY1MSkseD1GKDMxODUpO2F0LmV4cG9ydHM9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBsZShSKX07dmFyIG09e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6'@;
put 'InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRl'@;
put 'TGVuZ3RoOjY2fX07ZnVuY3Rpb24gbGUoTyl7dGhpcy5jdXJ2ZVR5cGU9bVtPXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOk99KSx0aGlzLmN1cnZlPW5ldyBhZS5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIE0oTyxSLHop'@;
put 'e0FycmF5LmlzQXJyYXkoTyl8fChPPU8udG9BcnJheSgpKTt2YXIgSz1uZXcgQnVmZmVyKE8pO2lmKHomJksubGVuZ3RoPHope3ZhciBJPW5ldyBCdWZmZXIoei1LLmxlbmd0aCk7SS5maWxsKDApLEs9QnVmZmVyLmNvbmNhdChbSSxLXSl9cmV0dXJuIFI/Sy50b1N0cmluZyhSKTpLfW0ucDIy'@;
put 'ND1tLnNlY3AyMjRyMSxtLnAyNTY9bS5zZWNwMjU2cjE9bS5wcmltZTI1NnYxLG0ucDE5Mj1tLnNlY3AxOTJyMT1tLnByaW1lMTkydjEsbS5wMzg0PW0uc2VjcDM4NHIxLG0ucDUyMT1tLnNlY3A1MjFyMSxsZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKE8sUil7cmV0dXJuIHRo'@;
put 'aXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShPLFIpfSxsZS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihPLFIseil7cmV0dXJuIFI9Unx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKSxNKHRoaXMu'@;
put 'Y3VydmUua2V5RnJvbVB1YmxpYyhPKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLHosdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LGxlLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oTyxSKXt2YXIgej10aGlzLmtleXMuZ2V0UHVibGlj'@;
put 'KCJjb21wcmVzc2VkIj09PVIsITApO3JldHVybiJoeWJyaWQiPT09UiYmKHpbMF09elt6Lmxlbmd0aC0xXSUyPzc6NiksTSh6LE8pfSxsZS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihPKXtyZXR1cm4gTSh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLE8pfSxsZS5wcm90b3R5cGUu'@;
put 'c2V0UHVibGljS2V5PWZ1bmN0aW9uKE8sUil7cmV0dXJuIFI9Unx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhPKSx0aGlzfSxsZS5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihPLFIpe1I9Unx8'@;
put 'InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKTt2YXIgej1uZXcgeChPKTtyZXR1cm4gej16LnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKHopLHRoaXN9fSwzMTg1OmZ1bmN0'@;
put 'aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5w'@;
put 'cm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigo'@;
put 'ImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdp'@;
put 'bmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBI'@;
put 'PVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQoQyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1Mt'@;
put 'MTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24o'@;
put 'YixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSks'@;
put 'TjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlz'@;
put 'Lm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0'@;
put 'MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVy'@;
put 'Ij09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0'@;
put 'aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4'@;
put 'NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2Mywo'@;
put 'Uys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49'@;
put 'MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4y'@;
put 'Nik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90'@;
put 'eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1ILFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3'@;
put 'PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVuZ3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihK'@;
put 'KSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIu'@;
put 'd29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlw'@;
put 'ZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRo'@;
put 'aXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5'@;
put 'LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0'@;
put 'ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5'@;
put 'MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0s'@;
put 'Qz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5tYXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShD'@;
put 'PShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxELnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rp'@;
put 'b24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUmKFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4y'@;
put 'NC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSIt'@;
put 'IitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3RyaW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUr'@;
put 'SDpJW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUu'@;
put 'dG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sx'@;
put 'XTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVm'@;
put 'ZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0'@;
put 'aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9Imxl'@;
put 'Ij09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygp'@;
put 'O3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYo'@;
put 'SCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9'@;
put 'MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0p'@;
put 'O3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9'@;
put 'SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5p'@;
put 'bm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVv'@;
put 'cj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29yZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5'@;
put 'cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhp'@;
put 'cyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0'@;
put 'aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRp'@;
put 'dmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtO'@;
put 'PEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9y'@;
put 'PWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMp'@;
put 'fSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFy'@;
put 'IEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2'@;
put 'LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRo'@;
put 'aXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJl'@;
put 'dHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2ln'@;
put 'bigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxI'@;
put 'Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5n'@;
put 'dGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6'@;
put 'MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9'@;
put 'ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRp'@;
put 'dmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKTooTj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5n'@;
put 'dGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8'@;
put 'Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9'@;
put 'ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLExlPWZlPj4+'@;
put 'MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLFFlPTB8Tls0XSxsdD04MTkxJlFlLFBlPVFlPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0'@;
put 'PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLG90PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdb'@;
put 'Ml0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyxtbj0wfGdbNV0scnQ9ODE5MSZtbixJdD1tbj4+PjEzLFF0PTB8Z1s2XSxEdD04MTkxJlF0LHB0PVF0Pj4+MTMsWXQ9MHxnWzddLElu'@;
put 'PTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxSbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIEZuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygo'@;
put 'ODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKEZuPj4+MjYpfDAsRm4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGgu'@;
put 'aW11bChMZSxDbil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+'@;
put 'Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChqZSxDbil8MCx3PU1hdGguaW11bChqZSxVdCksdj12K01hdGguaW11bCh4ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStN'@;
put 'YXRoLmltdWwoTGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsSG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLEhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0'@;
put 'KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Us'@;
put 'ZW4pfDApK01hdGguaW11bChqZSxXbil8MCx3PXcrTWF0aC5pbXVsKGplLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsSG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhuKXwwLHc9dytNYXRoLmltdWwoTGUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVs'@;
put 'KG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShw'@;
put 'PU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9l'@;
put 'LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChqZSxIbil8MCx3PXcrTWF0aC5pbXVsKGplLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKExlLGhuKXwwLHc9dytNYXRoLmltdWwoTGUsd3Qp'@;
put 'fDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVuKXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11'@;
put 'bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCx3PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0ocD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKGpl'@;
put 'LGhuKXwwLHc9dytNYXRoLmltdWwoamUsd3QpfDAsdj12K01hdGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUsX3QpfDAsdz13K01hdGguaW11bChMZSxOdCl8MDt2YXIgZ2k9KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5'@;
put 'MSYocD0ocD1wK01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkr'@;
put 'TWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXwwLHY9ditNYXRoLmltdWwobHQsSG4pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLHc9dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9l'@;
put 'LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChqZSxfdCl8MCx3PXcrTWF0aC5pbXVsKGplLE50KXwwLHY9ditNYXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLHc9dytNYXRoLmltdWwoTGUsSXQp'@;
put 'fDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVuKXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11'@;
put 'bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCx3PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0ocD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBl'@;
put 'LGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2Us'@;
put 'SXQpfDApK01hdGguaW11bChqZSxydCl8MCx3PXcrTWF0aC5pbXVsKGplLEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXwwLHc9dytNYXRoLmltdWwoTGUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVs'@;
put 'KG5lLEluKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChkZSxJbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKG90LENuKSxwPShw'@;
put 'PU1hdGguaW11bChvdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhl'@;
put 'LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxIbil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3Qp'@;
put 'fDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsSXQpfDApK01hdGguaW11bChZZSxydCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKGplLER0KXwwLHc9dytNYXRoLmltdWwoamUscHQpfDAsdj12K01hdGguaW11bCh4ZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStN'@;
put 'YXRoLmltdWwoTGUsSW4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNu'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0aC5pbXVsKG90LFduKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qs'@;
put 'ZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsSG4pfDAscD0ocD1wK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXwwLHc9dytNYXRoLmltdWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditN'@;
put 'YXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsSXQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGgu'@;
put 'aW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxJbil8MCx3PXcrTWF0aC5pbXVsKGplLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVs'@;
put 'KExlLHhuKXwwLHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChkZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+'@;
put 'Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChvdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKG90LGZ0KXwwKStN'@;
put 'YXRoLmltdWwodXQsSG4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsdz13K01hdGguaW11bChUZSxJdCl8MCx2PXYrTWF0aC5pbXVs'@;
put 'KGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwoS2UsSW4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLEluKXwwLHc9dytNYXRoLmltdWwoWWUs'@;
put 'enQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsdz13K01hdGguaW11bChqZSxzbil8MDt2YXIgSHI9KFMrKHY9ditNYXRoLmltdWwoeGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwk'@;
put 'dCl8MCkrTWF0aC5pbXVsKExlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSG4pLHA9KHA9TWF0aC5pbXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LEhuKXwwLHc9TWF0'@;
put 'aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKG90LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAscD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVs'@;
put 'KERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChVZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'QWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsSW4pfDAscD0ocD1wK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLEluKXwwLHc9dytNYXRoLmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmltdWwoT2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJuKXwwKSk8'@;
put 'PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGplLCR0KXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVs'@;
put 'KG90LF90KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUs'@;
put 'SXQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChUZSxJbil8'@;
put 'MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2PXYrTWF0aC5pbXVsKEtlLFJuKXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGgu'@;
put 'aW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGguaW11bChvdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKG90LEl0KXwwKStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1dCxJdCl8MCx2PXYrTWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'TWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsSW4pfDAscD0ocD1wK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLEluKXwwLHc9dytNYXRoLmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmltdWwobHQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJuKXwwKSk8'@;
put 'PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0aC5pbXVsKFB0LHJ0KXwwLHc9TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0aC5pbXVs'@;
put 'KG90LER0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwoTWUsSW4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLEluKXwwLHc9dytNYXRoLmltdWwoRGUs'@;
put 'enQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwk'@;
put 'dCl8MCkrTWF0aC5pbXVsKFRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5pbXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0'@;
put 'aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKG90LEluKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsenQpfDApK01hdGguaW11bCh1dCxJbil8MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAscD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVs'@;
put 'KERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+'@;
put 'Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEluKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxJbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChvdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKG90LHNuKXwwKStN'@;
put 'YXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89KFMrKHY9ditNYXRoLmltdWwob3QsUm4pfDApfDApKygoODE5'@;
put 'MSYocD0ocD1wK01hdGguaW11bChvdCwkdCl8MCkrTWF0aC5pbXVsKHV0LFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHlyPShTKyh2PU1hdGguaW11bChIdCxSbikpfDApKygoODE5MSYo'@;
put 'cD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsUm4pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPUZuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1n'@;
put 'aSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUhyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXty'@;
put 'ZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYx'@;
put 'MD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7'@;
put 'dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1m'@;
put 'ZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnBy'@;
put 'b3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYo'@;
put 'MD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFyIFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltT'@;
put 'XV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8'@;
put 'ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10samU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2ZlXT14ZSsoRmU9amUpLE5bSitmZV09TGUrT2UsSFtKK2ZlK1Nd'@;
put 'PXhlLUZlLE5bSitmZStTXT1MZS1PZSxmZSE9PXYmJihqZT1wKm5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPWplKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0'@;
put 'dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0sRFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3Rv'@;
put 'dHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYzJmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVy'@;
put 'biBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09'@;
put 'KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVu'@;
put 'Z3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiksZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQx'@;
put 'M2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBmZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBb'@;
put 'ZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMsTiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2'@;
put 'ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRv'@;
put 'KGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11'@;
put 'bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMm'@;
put 'RCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11'@;
put 'bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7'@;
put 'Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxE'@;
put 'Lmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVy'@;
put 'Ij09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNbZ10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10p'@;
put 'LVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0'@;
put 'aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+'@;
put 'PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRz'@;
put 'W3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlz'@;
put 'Lmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0w'@;
put 'LHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hs'@;
put 'bihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRo'@;
put 'aXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1h'@;
put 'c2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZI'@;
put 'KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53'@;
put 'b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9'@;
put 'Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tEKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRo'@;
put 'aXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMu'@;
put 'aWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMu'@;
put 'd29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3Vi'@;
put 'bXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10pKkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4'@;
put 'NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxn'@;
put 'PTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xv'@;
put 'bmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51'@;
put 'bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVnYXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2'@;
put 'YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNobG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRl'@;
put 'LS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYwIT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpO'@;
put 'fX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1v'@;
put 'ZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQm'@;
put 'JihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpn'@;
put 'fSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIu'@;
put 'd29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2'@;
put 'fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2'@;
put 'YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21wKE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjow'@;
put 'IT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05d'@;
put 'KSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJu'@;
put 'IHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09'@;
put 'RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNocm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNs'@;
put 'b25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihOLmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1'@;
put 'c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQocCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigx'@;
put 'KTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIu'@;
put 'aXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jk'@;
put 'c1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2OysrcCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0g'@;
put 'PjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5j'@;
put 'dGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtO'@;
put 'KyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxIPUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVh'@;
put 'aztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlz'@;
put 'T2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShi'@;
put 'LUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29y'@;
put 'ZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0'@;
put 'aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYoYj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBi'@;
put 'aWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMu'@;
put 'bmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIu'@;
put 'bGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1yZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4g'@;
put 'dGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBu'@;
put 'KGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0u'@;
put 'cmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0'@;
put 'RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRo'@;
put 'aXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4g'@;
put 'bSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu'@;
put 'cmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVy'@;
put 'biBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu'@;
put 'cmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVk'@;
put 'LmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJl'@;
put 'ZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy'@;
put 'cyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y'@;
put 'ZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGws'@;
put 'cDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVu'@;
put 'Y3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5'@;
put 'IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3Ru'@;
put 'KDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNo'@;
put 'aWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMu'@;
put 'bWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3Rv'@;
put 'dHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1'@;
put 'cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtiLml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmlt'@;
put 'dWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVu'@;
put 'Z3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+'@;
put 'Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9'@;
put 'MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5n'@;
put 'dGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxnPTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1O'@;
put 'fXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcg'@;
put 'c2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2'@;
put 'ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1E'@;
put 'LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJv'@;
put 'dG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMu'@;
put 'bSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5z'@;
put 'dWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5p'@;
put 'c3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhp'@;
put 'cy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIs'@;
put 'Yi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBEPXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQp'@;
put 'e3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJuKDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRv'@;
put 'UmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylwLnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiks'@;
put 'Sj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhlPGRlKTt2YXIgTGU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNo'@;
put 'bG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRo'@;
put 'aXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7Tlsw'@;
put 'XT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2'@;
put 'YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhpcy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0'@;
put 'dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0u'@;
put 'bW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhp'@;
put 'cy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRo'@;
put 'aXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxD'@;
put 'Ll9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tu'@;
put 'KHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUu'@;
put 'aW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDk2MzYyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjY5OCkseD1GKDc1ODI5KSxtPUYo'@;
put 'Mzk3MDYpLGxlPUYoOTc5NjUpLE09Rig4NjQyMCk7ZnVuY3Rpb24gTyhSKXtNLmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1SfWFlKE8sTSksTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihSKXt0aGlzLl9oYXNoLnVwZGF0ZShSKX0sTy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LGF0LmV4cG9ydHM9ZnVuY3Rpb24oeil7cmV0dXJuIm1kNSI9PT0oej16LnRvTG93ZXJDYXNlKCkpP25ldyB4OiJybWQxNjAiPT09enx8InJpcGVtZDE2MCI9PT16P25ldyBtOm5ldyBPKGxlKHopKX19LDg3NTg4OihhdCxJZSxGKT0+'@;
put 'e3ZhciBhZT1GKDc1ODI5KTthdC5leHBvcnRzPWZ1bmN0aW9uKHgpe3JldHVybihuZXcgYWUpLnVwZGF0ZSh4KS5kaWdlc3QoKX19LDg1ODI1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjY5OCkseD1GKDk1OTIyKSxtPUYoODY0MjApLGxlPUYoODQzKS5CdWZmZXIsTT1G'@;
put 'KDg3NTg4KSxPPUYoMzk3MDYpLFI9Rig5Nzk2NSksej1sZS5hbGxvYygxMjgpO2Z1bmN0aW9uIEsoSSxrKXttLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBrJiYoaz1sZS5mcm9tKGspKTt2YXIgRT0ic2hhNTEyIj09PUl8fCJzaGEzODQiPT09ST8xMjg6NjQ7dGhpcy5f'@;
put 'YWxnPUksdGhpcy5fa2V5PWssay5sZW5ndGg+RT9rPSgicm1kMTYwIj09PUk/bmV3IE86UihJKSkudXBkYXRlKGspLmRpZ2VzdCgpOmsubGVuZ3RoPEUmJihrPWxlLmNvbmNhdChbayx6XSxFKSk7Zm9yKHZhciBWPXRoaXMuX2lwYWQ9bGUuYWxsb2NVbnNhZmUoRSksQj10aGlzLl9vcGFkPWxl'@;
put 'LmFsbG9jVW5zYWZlKEUpLFk9MDtZPEU7WSsrKVZbWV09NTRea1tZXSxCW1ldPTkyXmtbWV07dGhpcy5faGFzaD0icm1kMTYwIj09PUk/bmV3IE86UihJKSx0aGlzLl9oYXNoLnVwZGF0ZShWKX1hZShLLG0pLEsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSSl7dGhpcy5faGFzaC51cGRh'@;
put 'dGUoSSl9LEsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBJPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBPOlIodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShJKS5kaWdlc3QoKX0sYXQuZXhwb3J0cz1mdW5j'@;
put 'dGlvbihrLEUpe3JldHVybiJybWQxNjAiPT09KGs9ay50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1rP25ldyBLKCJybWQxNjAiLEUpOiJtZDUiPT09az9uZXcgeChNLEUpOm5ldyBLKGssRSl9fSw5NTkyMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9'@;
put 'Rig4NDMpLkJ1ZmZlcixtPUYoODY0MjApLGxlPXguYWxsb2MoMTI4KSxNPTY0O2Z1bmN0aW9uIE8oUix6KXttLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiB6JiYoej14LmZyb20oeikpLHRoaXMuX2FsZz1SLHRoaXMuX2tleT16LHoubGVuZ3RoPk0/ej1SKHopOnoubGVu'@;
put 'Z3RoPE0mJih6PXguY29uY2F0KFt6LGxlXSxNKSk7Zm9yKHZhciBLPXRoaXMuX2lwYWQ9eC5hbGxvY1Vuc2FmZShNKSxJPXRoaXMuX29wYWQ9eC5hbGxvY1Vuc2FmZShNKSxrPTA7azxNO2srKylLW2tdPTU0Xnpba10sSVtrXT05Ml56W2tdO3RoaXMuX2hhc2g9W0tdfWFlKE8sbSksTy5wcm90'@;
put 'b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihSKXt0aGlzLl9oYXNoLnB1c2goUil9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBSPXRoaXMuX2FsZyh4LmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyh4LmNvbmNhdChbdGhpcy5fb3BhZCxSXSkpfSxhdC5leHBv'@;
put 'cnRzPU99LDc3OTAzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjtJZS5yYW5kb21CeXRlcz1JZS5ybmc9SWUucHNldWRvUmFuZG9tQnl0ZXM9SWUucHJuZz1GKDQ0MDE5KSxJZS5jcmVhdGVIYXNoPUllLkhhc2g9Rig5NjM2MiksSWUuY3JlYXRlSG1hYz1JZS5IbWFjPUYoODU4MjUpO3ZhciBh'@;
put 'ZT1GKDgxNjk5KSx4PU9iamVjdC5rZXlzKGFlKSxtPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdCh4KTtJZS5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbX07dmFyIGxlPUYoNTcxMDApO0llLnBia2RmMj1sZS5w'@;
put 'YmtkZjIsSWUucGJrZGYyU3luYz1sZS5wYmtkZjJTeW5jO3ZhciBNPUYoMjU2MDApO0llLkNpcGhlcj1NLkNpcGhlcixJZS5jcmVhdGVDaXBoZXI9TS5jcmVhdGVDaXBoZXIsSWUuQ2lwaGVyaXY9TS5DaXBoZXJpdixJZS5jcmVhdGVDaXBoZXJpdj1NLmNyZWF0ZUNpcGhlcml2LEllLkRlY2lw'@;
put 'aGVyPU0uRGVjaXBoZXIsSWUuY3JlYXRlRGVjaXBoZXI9TS5jcmVhdGVEZWNpcGhlcixJZS5EZWNpcGhlcml2PU0uRGVjaXBoZXJpdixJZS5jcmVhdGVEZWNpcGhlcml2PU0uY3JlYXRlRGVjaXBoZXJpdixJZS5nZXRDaXBoZXJzPU0uZ2V0Q2lwaGVycyxJZS5saXN0Q2lwaGVycz1NLmxpc3RD'@;
put 'aXBoZXJzO3ZhciBPPUYoNDUxNDQpO0llLkRpZmZpZUhlbGxtYW5Hcm91cD1PLkRpZmZpZUhlbGxtYW5Hcm91cCxJZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9Ty5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsSWUuZ2V0RGlmZmllSGVsbG1hbj1PLmdldERpZmZpZUhlbGxtYW4sSWUuY3Jl'@;
put 'YXRlRGlmZmllSGVsbG1hbj1PLmNyZWF0ZURpZmZpZUhlbGxtYW4sSWUuRGlmZmllSGVsbG1hbj1PLkRpZmZpZUhlbGxtYW47dmFyIFI9RigyNzY4Nik7SWUuY3JlYXRlU2lnbj1SLmNyZWF0ZVNpZ24sSWUuU2lnbj1SLlNpZ24sSWUuY3JlYXRlVmVyaWZ5PVIuY3JlYXRlVmVyaWZ5LEllLlZl'@;
put 'cmlmeT1SLlZlcmlmeSxJZS5jcmVhdGVFQ0RIPUYoMzg4NDApO3ZhciB6PUYoMjcwNTApO0llLnB1YmxpY0VuY3J5cHQ9ei5wdWJsaWNFbmNyeXB0LEllLnByaXZhdGVFbmNyeXB0PXoucHJpdmF0ZUVuY3J5cHQsSWUucHVibGljRGVjcnlwdD16LnB1YmxpY0RlY3J5cHQsSWUucHJpdmF0ZURl'@;
put 'Y3J5cHQ9ei5wcml2YXRlRGVjcnlwdDt2YXIgSz1GKDYxMjM3KTtJZS5yYW5kb21GaWxsPUsucmFuZG9tRmlsbCxJZS5yYW5kb21GaWxsU3luYz1LLnJhbmRvbUZpbGxTeW5jLEllLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFsic29ycnksIGNyZWF0ZUNy'@;
put 'ZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cyIsImh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSJdLmpvaW4oIlxuIikpfSxJZS5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVf'@;
put 'UFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9O'@;
put 'T19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklE'@;
put 'OjZ9fSwxMDAxMjpmdW5jdGlvbihhdCxJZSxGKXt2YXIgYWU7YXQuZXhwb3J0cz0oYWU9YWV8fGZ1bmN0aW9uKHgsbSl7dmFyIGxlO2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYobGU9d2luZG93LmNyeXB0byksdHlwZW9mIHNlbGY8InUiJiZzZWxmLmNyeXB0byYmKGxl'@;
put 'PXNlbGYuY3J5cHRvKSx0eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXMuY3J5cHRvJiYobGU9Z2xvYmFsVGhpcy5jcnlwdG8pLCFsZSYmdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tc0NyeXB0byYmKGxlPXdpbmRvdy5tc0NyeXB0byksIWxlJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYm'@;
put 'Z2xvYmFsLmNyeXB0byYmKGxlPWdsb2JhbC5jcnlwdG8pLCFsZSl0cnl7bGU9Rig3NzkwMyl9Y2F0Y2h7fXZhciBNPWZ1bmN0aW9uKCl7aWYobGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsZS5nZXRSYW5kb21WYWx1ZXMpdHJ5e3JldHVybiBsZS5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQz'@;
put 'MkFycmF5KDEpKVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIGxlLnJhbmRvbUJ5dGVzKXRyeXtyZXR1cm4gbGUucmFuZG9tQnl0ZXMoNCkucmVhZEludDMyTEUoKX1jYXRjaHt9fXRocm93IG5ldyBFcnJvcigiTmF0aXZlIGNyeXB0byBtb2R1bGUgY291bGQgbm90IGJlIHVzZWQg'@;
put 'dG8gZ2V0IHNlY3VyZSByYW5kb20gbnVtYmVyLiIpfSxPPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVSgpe31yZXR1cm4gZnVuY3Rpb24ocSl7dmFyIGVlO3JldHVybiBVLnByb3RvdHlwZT1xLGVlPW5ldyBVLFUucHJvdG90eXBlPW51bGwsZWV9fSgpLFI9e30sej1SLmxp'@;
put 'Yj17fSxLPXouQmFzZT17ZXh0ZW5kOmZ1bmN0aW9uKFUpe3ZhciBxPU8odGhpcyk7cmV0dXJuIFUmJnEubWl4SW4oVSksKCFxLmhhc093blByb3BlcnR5KCJpbml0Iil8fHRoaXMuaW5pdD09PXEuaW5pdCkmJihxLmluaXQ9ZnVuY3Rpb24oKXtxLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJn'@;
put 'dW1lbnRzKX0pLHEuaW5pdC5wcm90b3R5cGU9cSxxLiRzdXBlcj10aGlzLHF9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBVPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIFUuaW5pdC5hcHBseShVLGFyZ3VtZW50cyksVX0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oVSl7Zm9yKHZhciBx'@;
put 'IGluIFUpVS5oYXNPd25Qcm9wZXJ0eShxKSYmKHRoaXNbcV09VVtxXSk7VS5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9VS50b1N0cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX0sST16Lldv'@;
put 'cmRBcnJheT1LLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihVLHEpe1U9dGhpcy53b3Jkcz1VfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPXE/cTo0KlUubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlvbihVKXtyZXR1cm4oVXx8RSkuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24oVSl7dmFy'@;
put 'IHE9dGhpcy53b3JkcyxlZT1VLndvcmRzLHRlPXRoaXMuc2lnQnl0ZXMsb2U9VS5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksdGUlNClmb3IodmFyIHNlPTA7c2U8b2U7c2UrKylxW3RlK3NlPj4+Ml18PShlZVtzZT4+PjJdPj4+MjQtc2UlNCo4JjI1NSk8PDI0LSh0ZStzZSklNCo4O2Vsc2Ug'@;
put 'Zm9yKHZhciB1ZT0wO3VlPG9lO3VlKz00KXFbdGUrdWU+Pj4yXT1lZVt1ZT4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1vZSx0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciBVPXRoaXMud29yZHMscT10aGlzLnNpZ0J5dGVzO1VbcT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1xJTQqOCxVLmxl'@;
put 'bmd0aD14LmNlaWwocS80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVT1LLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFUud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxVfSxyYW5kb206ZnVuY3Rpb24oVSl7Zm9yKHZhciBxPVtdLGVlPTA7ZWU8VTtlZSs9NClxLnB1c2goTSgpKTtyZXR1cm4g'@;
put 'bmV3IEkuaW5pdChxLFUpfX0pLGs9Ui5lbmM9e30sRT1rLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLndvcmRzLGVlPVUuc2lnQnl0ZXMsdGU9W10sb2U9MDtvZTxlZTtvZSsrKXt2YXIgc2U9cVtvZT4+PjJdPj4+MjQtb2UlNCo4JjI1NTt0ZS5wdXNoKChzZT4+PjQp'@;
put 'LnRvU3RyaW5nKDE2KSksdGUucHVzaCgoMTUmc2UpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHRlLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihVKXtmb3IodmFyIHE9VS5sZW5ndGgsZWU9W10sdGU9MDt0ZTxxO3RlKz0yKWVlW3RlPj4+M118PXBhcnNlSW50KFUuc3Vic3RyKHRlLDIpLDE2KTw8'@;
put 'MjQtdGUlOCo0O3JldHVybiBuZXcgSS5pbml0KGVlLHEvMil9fSxqPWsuTGF0aW4xPXtzdHJpbmdpZnk6ZnVuY3Rpb24oVSl7Zm9yKHZhciBxPVUud29yZHMsZWU9VS5zaWdCeXRlcyx0ZT1bXSxvZT0wO29lPGVlO29lKyspdGUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHFbb2U+Pj4yXT4+'@;
put 'PjI0LW9lJTQqOCYyNTUpKTtyZXR1cm4gdGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLmxlbmd0aCxlZT1bXSx0ZT0wO3RlPHE7dGUrKyllZVt0ZT4+PjJdfD0oMjU1JlUuY2hhckNvZGVBdCh0ZSkpPDwyNC10ZSU0Kjg7cmV0dXJuIG5ldyBJLmluaXQoZWUscSl9'@;
put 'fSxWPWsuVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShqLnN0cmluZ2lmeShVKSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKFUpe3JldHVybiBqLnBh'@;
put 'cnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChVKSkpfX0sQj16LkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09Sy5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgSS5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihVKXsic3RyaW5nIj09'@;
put 'dHlwZW9mIFUmJihVPVYucGFyc2UoVSkpLHRoaXMuX2RhdGEuY29uY2F0KFUpLHRoaXMuX25EYXRhQnl0ZXMrPVUuc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKFUpe3ZhciBxLGVlPXRoaXMuX2RhdGEsdGU9ZWUud29yZHMsb2U9ZWUuc2lnQnl0ZXMsc2U9dGhpcy5ibG9ja1NpemUsdWU9'@;
put 'b2UvKDQqc2UpLGNlPSh1ZT1VP3guY2VpbCh1ZSk6eC5tYXgoKDB8dWUpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKnNlLEc9eC5taW4oNCpjZSxvZSk7aWYoY2Upe2Zvcih2YXIgYj0wO2I8Y2U7Yis9c2UpdGhpcy5fZG9Qcm9jZXNzQmxvY2sodGUsYik7cT10ZS5zcGxpY2UoMCxjZSksZWUu'@;
put 'c2lnQnl0ZXMtPUd9cmV0dXJuIG5ldyBJLmluaXQocSxHKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVT1LLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFUuX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLFV9LF9taW5CdWZmZXJTaXplOjB9KSxYPSh6Lkhhc2hlcj1CLmV4dGVuZCh7Y2ZnOksuZXh0'@;
put 'ZW5kKCksaW5pdDpmdW5jdGlvbihVKXt0aGlzLmNmZz10aGlzLmNmZy5leHRlbmQoVSksdGhpcy5yZXNldCgpfSxyZXNldDpmdW5jdGlvbigpe0IucmVzZXQuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9LHVwZGF0ZTpmdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5fYXBwZW5kKFUpLHRoaXMu'@;
put 'X3Byb2Nlc3MoKSx0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbihVKXtyZXR1cm4gVSYmdGhpcy5fYXBwZW5kKFUpLHRoaXMuX2RvRmluYWxpemUoKX0sYmxvY2tTaXplOjE2LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oVSl7cmV0dXJuIGZ1bmN0aW9uKHEsZWUpe3JldHVybiBuZXcgVS5pbml0KGVl'@;
put 'KS5maW5hbGl6ZShxKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxLGVlKXtyZXR1cm4gbmV3IFguSE1BQy5pbml0KFUsZWUpLmZpbmFsaXplKHEpfX19KSxSLmFsZ289e30pO3JldHVybiBSfShNYXRoKSxhZSl9LDkyODczOmZ1bmN0aW9uKGF0LEll'@;
put 'LEYpe3ZhciBhZTthdC5leHBvcnRzPShhZT1GKDEwMDEyKSxmdW5jdGlvbih4KXt2YXIgbT1hZSxsZT1tLmxpYixNPWxlLldvcmRBcnJheSxPPWxlLkhhc2hlcixSPW0uYWxnbyx6PVtdOyFmdW5jdGlvbigpe2Zvcih2YXIgVj0wO1Y8NjQ7VisrKXpbVl09NDI5NDk2NzI5Nip4LmFicyh4LnNp'@;
put 'bihWKzEpKXwwfSgpO3ZhciBLPVIuTUQ1PU8uZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IE0uaW5pdChbMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4XSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihWLEIpe2Zvcih2YXIgWT0w'@;
put 'O1k8MTY7WSsrKXt2YXIgWD1CK1ksVT1WW1hdO1ZbWF09MTY3MTE5MzUmKFU8PDh8VT4+PjI0KXw0Mjc4MjU1MzYwJihVPDwyNHxVPj4+OCl9dmFyIHE9dGhpcy5faGFzaC53b3JkcyxlZT1WW0IrMF0sdGU9VltCKzFdLG9lPVZbQisyXSxzZT1WW0IrM10saGU9VltCKzRdLHVlPVZbQis1XSxj'@;
put 'ZT1WW0IrNl0sRz1WW0IrN10sYj1WW0IrOF0sRD1WW0IrOV0sSD1WW0IrMTBdLE49VltCKzExXSxnPVZbQisxMl0sQz1WW0IrMTNdLFM9VltCKzE0XSx2PVZbQisxNV0scD1xWzBdLHc9cVsxXSxKPXFbMl0sbmU9cVszXTtwPUkocCx3LEosbmUsZWUsNyx6WzBdKSxuZT1JKG5lLHAsdyxKLHRl'@;
put 'LDEyLHpbMV0pLEo9SShKLG5lLHAsdyxvZSwxNyx6WzJdKSx3PUkodyxKLG5lLHAsc2UsMjIselszXSkscD1JKHAsdyxKLG5lLGhlLDcsels0XSksbmU9SShuZSxwLHcsSix1ZSwxMix6WzVdKSxKPUkoSixuZSxwLHcsY2UsMTcsels2XSksdz1JKHcsSixuZSxwLEcsMjIsels3XSkscD1JKHAs'@;
put 'dyxKLG5lLGIsNyx6WzhdKSxuZT1JKG5lLHAsdyxKLEQsMTIsels5XSksSj1JKEosbmUscCx3LEgsMTcselsxMF0pLHc9SSh3LEosbmUscCxOLDIyLHpbMTFdKSxwPUkocCx3LEosbmUsZyw3LHpbMTJdKSxuZT1JKG5lLHAsdyxKLEMsMTIselsxM10pLEo9SShKLG5lLHAsdyxTLDE3LHpbMTRd'@;
put 'KSxwPWsocCx3PUkodyxKLG5lLHAsdiwyMix6WzE1XSksSixuZSx0ZSw1LHpbMTZdKSxuZT1rKG5lLHAsdyxKLGNlLDkselsxN10pLEo9ayhKLG5lLHAsdyxOLDE0LHpbMThdKSx3PWsodyxKLG5lLHAsZWUsMjAselsxOV0pLHA9ayhwLHcsSixuZSx1ZSw1LHpbMjBdKSxuZT1rKG5lLHAsdyxK'@;
put 'LEgsOSx6WzIxXSksSj1rKEosbmUscCx3LHYsMTQselsyMl0pLHc9ayh3LEosbmUscCxoZSwyMCx6WzIzXSkscD1rKHAsdyxKLG5lLEQsNSx6WzI0XSksbmU9ayhuZSxwLHcsSixTLDkselsyNV0pLEo9ayhKLG5lLHAsdyxzZSwxNCx6WzI2XSksdz1rKHcsSixuZSxwLGIsMjAselsyN10pLHA9'@;
put 'ayhwLHcsSixuZSxDLDUselsyOF0pLG5lPWsobmUscCx3LEosb2UsOSx6WzI5XSksSj1rKEosbmUscCx3LEcsMTQselszMF0pLHA9RShwLHc9ayh3LEosbmUscCxnLDIwLHpbMzFdKSxKLG5lLHVlLDQselszMl0pLG5lPUUobmUscCx3LEosYiwxMSx6WzMzXSksSj1FKEosbmUscCx3LE4sMTYs'@;
put 'elszNF0pLHc9RSh3LEosbmUscCxTLDIzLHpbMzVdKSxwPUUocCx3LEosbmUsdGUsNCx6WzM2XSksbmU9RShuZSxwLHcsSixoZSwxMSx6WzM3XSksSj1FKEosbmUscCx3LEcsMTYselszOF0pLHc9RSh3LEosbmUscCxILDIzLHpbMzldKSxwPUUocCx3LEosbmUsQyw0LHpbNDBdKSxuZT1FKG5l'@;
put 'LHAsdyxKLGVlLDExLHpbNDFdKSxKPUUoSixuZSxwLHcsc2UsMTYsels0Ml0pLHc9RSh3LEosbmUscCxjZSwyMyx6WzQzXSkscD1FKHAsdyxKLG5lLEQsNCx6WzQ0XSksbmU9RShuZSxwLHcsSixnLDExLHpbNDVdKSxKPUUoSixuZSxwLHcsdiwxNix6WzQ2XSkscD1qKHAsdz1FKHcsSixuZSxw'@;
put 'LG9lLDIzLHpbNDddKSxKLG5lLGVlLDYsels0OF0pLG5lPWoobmUscCx3LEosRywxMCx6WzQ5XSksSj1qKEosbmUscCx3LFMsMTUsels1MF0pLHc9aih3LEosbmUscCx1ZSwyMSx6WzUxXSkscD1qKHAsdyxKLG5lLGcsNix6WzUyXSksbmU9aihuZSxwLHcsSixzZSwxMCx6WzUzXSksSj1qKEos'@;
put 'bmUscCx3LEgsMTUsels1NF0pLHc9aih3LEosbmUscCx0ZSwyMSx6WzU1XSkscD1qKHAsdyxKLG5lLGIsNix6WzU2XSksbmU9aihuZSxwLHcsSix2LDEwLHpbNTddKSxKPWooSixuZSxwLHcsY2UsMTUsels1OF0pLHc9aih3LEosbmUscCxDLDIxLHpbNTldKSxwPWoocCx3LEosbmUsaGUsNix6'@;
put 'WzYwXSksbmU9aihuZSxwLHcsSixOLDEwLHpbNjFdKSxKPWooSixuZSxwLHcsb2UsMTUsels2Ml0pLHc9aih3LEosbmUscCxELDIxLHpbNjNdKSxxWzBdPXFbMF0rcHwwLHFbMV09cVsxXSt3fDAscVsyXT1xWzJdK0p8MCxxWzNdPXFbM10rbmV8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2'@;
put 'YXIgVj10aGlzLl9kYXRhLEI9Vi53b3JkcyxZPTgqdGhpcy5fbkRhdGFCeXRlcyxYPTgqVi5zaWdCeXRlcztCW1g+Pj41XXw9MTI4PDwyNC1YJTMyO3ZhciBVPXguZmxvb3IoWS80Mjk0OTY3Mjk2KSxxPVk7QlsxNSsoWCs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYoVTw8OHxVPj4+MjQpfDQyNzgy'@;
put 'NTUzNjAmKFU8PDI0fFU+Pj44KSxCWzE0KyhYKzY0Pj4+OTw8NCldPTE2NzExOTM1JihxPDw4fHE+Pj4yNCl8NDI3ODI1NTM2MCYocTw8MjR8cT4+PjgpLFYuc2lnQnl0ZXM9NCooQi5sZW5ndGgrMSksdGhpcy5fcHJvY2VzcygpO2Zvcih2YXIgZWU9dGhpcy5faGFzaCx0ZT1lZS53b3Jkcyxv'@;
put 'ZT0wO29lPDQ7b2UrKyl7dmFyIHNlPXRlW29lXTt0ZVtvZV09MTY3MTE5MzUmKHNlPDw4fHNlPj4+MjQpfDQyNzgyNTUzNjAmKHNlPDwyNHxzZT4+PjgpfXJldHVybiBlZX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVj1PLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFYuX2hhc2g9dGhpcy5faGFz'@;
put 'aC5jbG9uZSgpLFZ9fSk7ZnVuY3Rpb24gSShWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKEImWXx+QiZYKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9ZnVuY3Rpb24gayhWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKEImWHxZJn5YKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMy'@;
put 'LXEpK0J9ZnVuY3Rpb24gRShWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKEJeWV5YKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9ZnVuY3Rpb24gaihWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKFleKEJ8flgpKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9bS5NRDU9'@;
put 'Ty5fY3JlYXRlSGVscGVyKEspLG0uSG1hY01ENT1PLl9jcmVhdGVIbWFjSGVscGVyKEspfShNYXRoKSxhZS5NRDUpfSw0MDEzMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7SWUudXRpbHM9Rig1MjI5NCksSWUuQ2lwaGVyPUYoMjk0ODQpLEllLkRFUz1GKDE0Mzc0KSxJZS5DQkM9RigxMjA2'@;
put 'NiksSWUuRURFPUYoNTk3MTApfSwxMjA2NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTc3OTgpLHg9Rig2NjY5OCksbT17fTtmdW5jdGlvbiBsZShPKXthZS5lcXVhbChPLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2'@;
put 'YXIgUj0wO1I8dGhpcy5pdi5sZW5ndGg7UisrKXRoaXMuaXZbUl09T1tSXX1JZS5pbnN0YW50aWF0ZT1mdW5jdGlvbiBNKE8pe2Z1bmN0aW9uIFIoayl7Ty5jYWxsKHRoaXMsayksdGhpcy5fY2JjSW5pdCgpfXgoUixPKTtmb3IodmFyIHo9T2JqZWN0LmtleXMobSksSz0wO0s8ei5sZW5ndGg7'@;
put 'SysrKXt2YXIgST16W0tdO1IucHJvdG90eXBlW0ldPW1bSV19cmV0dXJuIFIuY3JlYXRlPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgUihFKX0sUn0sbS5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBSPW5ldyBsZSh0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPVJ9LG0uX3VwZGF0ZT1m'@;
put 'dW5jdGlvbihSLHosSyxJKXt2YXIgRT10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsaj10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKWpbVl1ePVJbeitWXTtmb3IoRS5fdXBkYXRlLmNh'@;
put 'bGwodGhpcyxqLDAsSyxJKSxWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspaltWXT1LW0krVl19ZWxzZXtmb3IoRS5fdXBkYXRlLmNhbGwodGhpcyxSLHosSyxJKSxWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspS1tJK1ZdXj1qW1ZdO2ZvcihWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspaltWXT1S'@;
put 'W3orVl19fX0sMjk0ODQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KTtmdW5jdGlvbiB4KG0pe3RoaXMub3B0aW9ucz1tLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXko'@;
put 'dGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09bS5wYWRkaW5nfWF0LmV4cG9ydHM9eCx4LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30seC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGxlKXtyZXR1cm4gMD09PWxlLmxlbmd0aD9bXToiZGVj'@;
put 'cnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChsZSk6dGhpcy5fdXBkYXRlRW5jcnlwdChsZSl9LHgucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24obGUsTSl7Zm9yKHZhciBPPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixsZS5sZW5ndGgt'@;
put 'TSksUj0wO1I8TztSKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrUl09bGVbTStSXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPU8sT30seC5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKGxlLE0pe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxsZSxNKSx0aGlz'@;
put 'LmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSx4LnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihsZSl7dmFyIE09MCxPPTAsej1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitsZS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5i'@;
put 'dWZmZXJPZmYmJihNKz10aGlzLl9idWZmZXIobGUsTSksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihPKz10aGlzLl9mbHVzaEJ1ZmZlcih6LE8pKSk7Zm9yKHZhciBLPWxlLmxlbmd0aC0obGUubGVuZ3RoLU0pJXRoaXMuYmxvY2tTaXplO008SztNKz10aGlzLmJsb2Nr'@;
put 'U2l6ZSl0aGlzLl91cGRhdGUobGUsTSx6LE8pLE8rPXRoaXMuYmxvY2tTaXplO2Zvcig7TTxsZS5sZW5ndGg7TSsrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPWxlW01dO3JldHVybiB6fSx4LnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihs'@;
put 'ZSl7Zm9yKHZhciBNPTAsTz0wLFI9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitsZS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLHo9bmV3IEFycmF5KFIqdGhpcy5ibG9ja1NpemUpO1I+MDtSLS0pTSs9dGhpcy5fYnVmZmVyKGxlLE0pLE8rPXRoaXMuX2ZsdXNoQnVmZmVyKHosTyk7cmV0'@;
put 'dXJuIE0rPXRoaXMuX2J1ZmZlcihsZSxNKSx6fSx4LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihsZSl7dmFyIE0sTztyZXR1cm4gbGUmJihNPXRoaXMudXBkYXRlKGxlKSksTz0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCks'@;
put 'TT9NLmNvbmNhdChPKTpPfSx4LnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKGxlLE0pe2lmKDA9PT1NKXJldHVybiExO2Zvcig7TTxsZS5sZW5ndGg7KWxlW00rK109MDtyZXR1cm4hMH0seC5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZm'@;
put 'ZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBsZT1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxsZSwwKSxsZX0seC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKGxlKXtyZXR1cm4gbGV9LHgucHJvdG90eXBlLl9maW5h'@;
put 'bERlY3J5cHQ9ZnVuY3Rpb24oKXthZS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgbGU9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIobGUsMCksdGhpcy5fdW5wYWQo'@;
put 'bGUpfX0sMTQzNzQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpLG09Rig1MjI5NCksbGU9RigyOTQ4NCk7ZnVuY3Rpb24gTSgpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBPKHope2xlLmNhbGwodGhpcyx6'@;
put 'KTt2YXIgSz1uZXcgTTt0aGlzLl9kZXNTdGF0ZT1LLHRoaXMuZGVyaXZlS2V5cyhLLHoua2V5KX14KE8sbGUpLGF0LmV4cG9ydHM9TyxPLmNyZWF0ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IE8oSyl9O3ZhciBSPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtPLnByb3RvdHlw'@;
put 'ZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKEssSSl7Sy5rZXlzPW5ldyBBcnJheSgzMiksYWUuZXF1YWwoSS5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBrPW0ucmVhZFVJbnQzMkJFKEksMCksRT1tLnJlYWRVSW50MzJCRShJLDQpO20ucGMxKGssRSxLLnRt'@;
put 'cCwwKSxrPUsudG1wWzBdLEU9Sy50bXBbMV07Zm9yKHZhciBqPTA7ajxLLmtleXMubGVuZ3RoO2orPTIpe3ZhciBWPVJbaj4+PjFdO2s9bS5yMjhzaGwoayxWKSxFPW0ucjI4c2hsKEUsViksbS5wYzIoayxFLEsua2V5cyxqKX19LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSyxJLGss'@;
put 'RSl7dmFyIGo9dGhpcy5fZGVzU3RhdGUsVj1tLnJlYWRVSW50MzJCRShLLEkpLEI9bS5yZWFkVUludDMyQkUoSyxJKzQpO20uaXAoVixCLGoudG1wLDApLFY9ai50bXBbMF0sQj1qLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChqLFYsQixqLnRtcCwwKTp0aGlz'@;
put 'Ll9kZWNyeXB0KGosVixCLGoudG1wLDApLEI9ai50bXBbMV0sbS53cml0ZVVJbnQzMkJFKGssVj1qLnRtcFswXSxFKSxtLndyaXRlVUludDMyQkUoayxCLEUrNCl9LE8ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oSyxJKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIGs9'@;
put 'Sy5sZW5ndGgtSSxFPUk7RTxLLmxlbmd0aDtFKyspS1tFXT1rO3JldHVybiEwfSxPLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oSyl7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIEs7Zm9yKHZhciBJPUtbSy5sZW5ndGgtMV0saz1LLmxlbmd0aC1JO2s8Sy5sZW5ndGg7aysrKWFlLmVx'@;
put 'dWFsKEtba10sSSk7cmV0dXJuIEsuc2xpY2UoMCxLLmxlbmd0aC1JKX0sTy5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oSyxJLGssRSxqKXtmb3IodmFyIFY9SSxCPWssWT0wO1k8Sy5rZXlzLmxlbmd0aDtZKz0yKXt2YXIgWD1LLmtleXNbWV0sVT1LLmtleXNbWSsxXTttLmV4cGFuZChC'@;
put 'LEsudG1wLDApO3ZhciBxPW0uc3Vic3RpdHV0ZShYXj1LLnRtcFswXSxVXj1LLnRtcFsxXSksdGU9QjtCPShWXm0ucGVybXV0ZShxKSk+Pj4wLFY9dGV9bS5yaXAoQixWLEUsail9LE8ucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKEssSSxrLEUsail7Zm9yKHZhciBWPWssQj1JLFk9Sy5r'@;
put 'ZXlzLmxlbmd0aC0yO1k+PTA7WS09Mil7dmFyIFg9Sy5rZXlzW1ldLFU9Sy5rZXlzW1krMV07bS5leHBhbmQoVixLLnRtcCwwKTt2YXIgcT1tLnN1YnN0aXR1dGUoWF49Sy50bXBbMF0sVV49Sy50bXBbMV0pLHRlPVY7Vj0oQl5tLnBlcm11dGUocSkpPj4+MCxCPXRlfW0ucmlwKFYsQixFLGop'@;
put 'fX0sNTk3MTA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpLG09RigyOTQ4NCksbGU9RigxNDM3NCk7ZnVuY3Rpb24gTShSLHope2FlLmVxdWFsKHoubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgSz16LnNsaWNlKDAsOCksST16'@;
put 'LnNsaWNlKDgsMTYpLGs9ei5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PVI/W2xlLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okt9KSxsZS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpJfSksbGUuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6a30pXTpbbGUu'@;
put 'Y3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6a30pLGxlLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okl9KSxsZS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpLfSldfWZ1bmN0aW9uIE8oUil7bS5jYWxsKHRoaXMsUik7dmFyIHo9bmV3IE0odGhpcy50eXBlLHRoaXMub3B0aW9ucy5r'@;
put 'ZXkpO3RoaXMuX2VkZVN0YXRlPXp9eChPLG0pLGF0LmV4cG9ydHM9TyxPLmNyZWF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gbmV3IE8oeil9LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeixLLEksayl7dmFyIEU9dGhpcy5fZWRlU3RhdGU7RS5jaXBoZXJzWzBdLl91cGRhdGUoeixLLEks'@;
put 'ayksRS5jaXBoZXJzWzFdLl91cGRhdGUoSSxrLEksayksRS5jaXBoZXJzWzJdLl91cGRhdGUoSSxrLEksayl9LE8ucHJvdG90eXBlLl9wYWQ9bGUucHJvdG90eXBlLl9wYWQsTy5wcm90b3R5cGUuX3VucGFkPWxlLnByb3RvdHlwZS5fdW5wYWR9LDUyMjk0OihhdCxJZSk9PnsidXNlIHN0cmlj'@;
put 'dCI7SWUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGxlLE0pe3JldHVybihsZVswK01dPDwyNHxsZVsxK01dPDwxNnxsZVsyK01dPDw4fGxlWzMrTV0pPj4+MH0sSWUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihsZSxNLE8pe2xlWzArT109TT4+PjI0LGxlWzErT109TT4+PjE2JjI1NSxsZVsyK09d'@;
put 'PU0+Pj44JjI1NSxsZVszK09dPTI1NSZNfSxJZS5pcD1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9NjtJPj0wO0ktPTIpe2Zvcih2YXIgaz0wO2s8PTI0O2srPTgpejw8PTEsenw9TT4+PmsrSSYxO2ZvcihrPTA7azw9MjQ7ays9OCl6PDw9MSx6fD1sZT4+PmsrSSYxfWZv'@;
put 'cihJPTY7ST49MDtJLT0yKXtmb3Ioaz0xO2s8PTI1O2srPTgpSzw8PTEsS3w9TT4+PmsrSSYxO2ZvcihrPTE7azw9MjU7ays9OClLPDw9MSxLfD1sZT4+PmsrSSYxfU9bUiswXT16Pj4+MCxPW1IrMV09Sz4+PjB9LEllLnJpcD1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9'@;
put 'MDtJPDQ7SSsrKWZvcih2YXIgaz0yNDtrPj0wO2stPTgpejw8PTEsenw9TT4+PmsrSSYxLHo8PD0xLHp8PWxlPj4+aytJJjE7Zm9yKEk9NDtJPDg7SSsrKWZvcihrPTI0O2s+PTA7ay09OClLPDw9MSxLfD1NPj4+aytJJjEsSzw8PTEsS3w9bGU+Pj5rK0kmMTtPW1IrMF09ej4+PjAsT1tSKzFd'@;
put 'PUs+Pj4wfSxJZS5wYzE9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9MCxJPTc7ST49NTtJLS0pe2Zvcih2YXIgaz0wO2s8PTI0O2srPTgpejw8PTEsenw9TT4+aytJJjE7Zm9yKGs9MDtrPD0yNDtrKz04KXo8PD0xLHp8PWxlPj5rK0kmMX1mb3Ioaz0wO2s8PTI0O2srPTgpejw8'@;
put 'PTEsenw9TT4+aytJJjE7Zm9yKEk9MTtJPD0zO0krKyl7Zm9yKGs9MDtrPD0yNDtrKz04KUs8PD0xLEt8PU0+PmsrSSYxO2ZvcihrPTA7azw9MjQ7ays9OClLPDw9MSxLfD1sZT4+aytJJjF9Zm9yKGs9MDtrPD0yNDtrKz04KUs8PD0xLEt8PWxlPj5rK0kmMTtPW1IrMF09ej4+PjAsT1tSKzFd'@;
put 'PUs+Pj4wfSxJZS5yMjhzaGw9ZnVuY3Rpb24obGUsTSl7cmV0dXJuIGxlPDxNJjI2ODQzNTQ1NXxsZT4+PjI4LU19O3ZhciBGPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwy'@;
put 'Myw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO0llLnBjMj1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9Ri5sZW5ndGg+Pj4xLGs9MDtrPEk7aysrKXo8PD0xLHp8PWxlPj4+RltrXSYxO2ZvcihrPUk7azxGLmxlbmd0aDtrKyspSzw8PTEsS3w9TT4+PkZb'@;
put 'a10mMTtPW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxJZS5leHBhbmQ9ZnVuY3Rpb24obGUsTSxPKXt2YXIgUj0wLHo9MDtSPSgxJmxlKTw8NXxsZT4+PjI3O2Zvcih2YXIgSz0yMztLPj0xNTtLLT00KVI8PD02LFJ8PWxlPj4+SyY2Mztmb3IoSz0xMTtLPj0zO0stPTQpenw9bGU+Pj5LJjYz'@;
put 'LHo8PD02O3p8PSgzMSZsZSk8PDF8bGU+Pj4zMSxNW08rMF09Uj4+PjAsTVtPKzFdPXo+Pj4wfTt2YXIgYWU9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2'@;
put 'LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwy'@;
put 'LDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQs'@;
put 'MTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwy'@;
put 'LDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywx'@;
put 'MiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDEx'@;
put 'LDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUs'@;
put 'MywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07SWUuc3Vic3RpdHV0ZT1mdW5jdGlvbihsZSxNKXtmb3IodmFyIE89'@;
put 'MCxSPTA7Ujw0O1IrKylPPDw9NCxPfD1hZVs2NCpSKyhsZT4+PjE4LTYqUiY2MyldO2ZvcihSPTA7Ujw0O1IrKylPPDw9NCxPfD1hZVsyNTYrNjQqUisoTT4+PjE4LTYqUiY2MyldO3JldHVybiBPPj4+MH07dmFyIHg9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwy'@;
put 'MiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO0llLnBlcm11dGU9ZnVuY3Rpb24obGUpe2Zvcih2YXIgTT0wLE89MDtPPHgubGVuZ3RoO08rKylNPDw9MSxNfD1sZT4+PnhbT10mMTtyZXR1cm4gTT4+PjB9LEllLnBhZFNwbGl0PWZ1bmN0aW9uKGxlLE0sTyl7'@;
put 'Zm9yKHZhciBSPWxlLnRvU3RyaW5nKDIpO1IubGVuZ3RoPE07KVI9IjAiK1I7Zm9yKHZhciB6PVtdLEs9MDtLPE07Sys9Tyl6LnB1c2goUi5zbGljZShLLEsrTykpO3JldHVybiB6LmpvaW4oIiAiKX19LDQ1MTQ0OihhdCxJZSxGKT0+e3ZhciBhZT1GKDcxMDk2KSx4PUYoMjk3OTkpLG09Rig5'@;
put 'NTU4MCksTT17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O0llLkRpZmZpZUhlbGxtYW5Hcm91cD1JZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9SWUuZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBsZShSKXt2YXIgej1uZXcgQnVmZmVyKHhbUl0ucHJpbWUsImhleCIpLEs9bmV3IEJ1'@;
put 'ZmZlcih4W1JdLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBtKHosSyl9LEllLmNyZWF0ZURpZmZpZUhlbGxtYW49SWUuRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBPKFIseixLLEkpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoeil8fHZvaWQgMD09PU1bel0/TyhSLCJiaW5hcnkiLHosSyk6KHo9enx8'@;
put 'ImJpbmFyeSIsST1JfHwiYmluYXJ5IixLPUt8fG5ldyBCdWZmZXIoWzJdKSxCdWZmZXIuaXNCdWZmZXIoSyl8fChLPW5ldyBCdWZmZXIoSyxJKSksIm51bWJlciI9PXR5cGVvZiBSP25ldyBtKGFlKFIsSyksSywhMCk6KEJ1ZmZlci5pc0J1ZmZlcihSKXx8KFI9bmV3IEJ1ZmZlcihSLHopKSxu'@;
put 'ZXcgbShSLEssITApKSl9fSw5NTU4MDooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NzMwMSksbT1uZXcoRig0ODYwNikpLGxlPW5ldyBhZSgyNCksTT1uZXcgYWUoMTEpLE89bmV3IGFlKDEwKSxSPW5ldyBhZSgzKSx6PW5ldyBhZSg3KSxLPUYoNzEwOTYpLEk9Rig0NDAxOSk7ZnVuY3Rpb24gayhY'@;
put 'LFUpe3JldHVybiBVPVV8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoWCl8fChYPW5ldyBCdWZmZXIoWCxVKSksdGhpcy5fcHViPW5ldyBhZShYKSx0aGlzfWZ1bmN0aW9uIEUoWCxVKXtyZXR1cm4gVT1VfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFgpfHwoWD1uZXcgQnVmZmVyKFgsVSkpLHRo'@;
put 'aXMuX3ByaXY9bmV3IGFlKFgpLHRoaXN9YXQuZXhwb3J0cz1CO3ZhciBqPXt9O2Z1bmN0aW9uIEIoWCxVLHEpe3RoaXMuc2V0R2VuZXJhdG9yKFUpLHRoaXMuX19wcmltZT1uZXcgYWUoWCksdGhpcy5fcHJpbWU9YWUubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPVgubGVuZ3Ro'@;
put 'LHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxxPyh0aGlzLnNldFB1YmxpY0tleT1rLHRoaXMuc2V0UHJpdmF0ZUtleT1FKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBZKFgsVSl7dmFyIHE9bmV3IEJ1ZmZlcihYLnRvQXJyYXko'@;
put 'KSk7cmV0dXJuIFU/cS50b1N0cmluZyhVKTpxfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1'@;
put 'bmN0aW9uIFYoWCxVKXt2YXIgcT1VLnRvU3RyaW5nKCJoZXgiKSxlZT1bcSxYLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGVlIGluIGopcmV0dXJuIGpbZWVdO3ZhciBvZSx0ZT0wO2lmKFguaXNFdmVuKCl8fCFLLnNpbXBsZVNpZXZlfHwhSy5mZXJtYXRUZXN0KFgpfHwhbS50ZXN0KFgp'@;
put 'KXJldHVybiB0ZSs9MSxqW2VlXT10ZSs9IjAyIj09PXF8fCIwNSI9PT1xPzg6NCx0ZTtzd2l0Y2gobS50ZXN0KFguc2hybigxKSl8fCh0ZSs9MikscSl7Y2FzZSIwMiI6WC5tb2QobGUpLmNtcChNKSYmKHRlKz04KTticmVhaztjYXNlIjA1Ijoob2U9WC5tb2QoTykpLmNtcChSKSYmb2UuY21w'@;
put 'KHopJiYodGUrPTgpO2JyZWFrO2RlZmF1bHQ6dGUrPTR9cmV0dXJuIGpbZWVdPXRlLHRlfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxCLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9'@;
put 'bmV3IGFlKEkodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxCLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFgpe3ZhciBVPShYPShY'@;
put 'PW5ldyBhZShYKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHE9bmV3IEJ1ZmZlcihVLnRvQXJyYXkoKSksZWU9dGhpcy5nZXRQcmltZSgpO2lmKHEubGVuZ3RoPGVlLmxlbmd0aCl7dmFyIHRlPW5ldyBCdWZmZXIoZWUubGVuZ3RoLXEubGVuZ3Ro'@;
put 'KTt0ZS5maWxsKDApLHE9QnVmZmVyLmNvbmNhdChbdGUscV0pfXJldHVybiBxfSxCLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oVSl7cmV0dXJuIFkodGhpcy5fcHViLFUpfSxCLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFUpe3JldHVybiBZKHRoaXMuX3ByaXYs'@;
put 'VSl9LEIucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKFgpe3JldHVybiBZKHRoaXMuX19wcmltZSxYKX0sQi5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKFgpe3JldHVybiBZKHRoaXMuX2dlbixYKX0sQi5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKFgsVSl7cmV0'@;
put 'dXJuIFU9VXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihYKXx8KFg9bmV3IEJ1ZmZlcihYLFUpKSx0aGlzLl9fZ2VuPVgsdGhpcy5fZ2VuPW5ldyBhZShYKSx0aGlzfX0sNzEwOTY6KGF0LEllLEYpPT57dmFyIGFlPUYoNDQwMTkpO2F0LmV4cG9ydHM9dGUsdGUuc2ltcGxlU2lldmU9cSx0ZS5m'@;
put 'ZXJtYXRUZXN0PWVlO3ZhciB4PUYoODczMDEpLG09bmV3IHgoMjQpLE09bmV3KEYoNDg2MDYpKSxPPW5ldyB4KDEpLFI9bmV3IHgoMiksej1uZXcgeCg1KSxrPShuZXcgeCgxNiksbmV3IHgoOCksbmV3IHgoMTApKSxFPW5ldyB4KDMpLFY9KG5ldyB4KDcpLG5ldyB4KDExKSksQj1uZXcgeCg0'@;
put 'KSxYPShuZXcgeCgxMiksbnVsbCk7ZnVuY3Rpb24gcShvZSl7Zm9yKHZhciBzZT1mdW5jdGlvbiBVKCl7aWYobnVsbCE9PVgpcmV0dXJuIFg7dmFyIHNlPVtdO3NlWzBdPTI7Zm9yKHZhciBoZT0xLHVlPTM7dWU8MTA0ODU3Njt1ZSs9Mil7Zm9yKHZhciBjZT1NYXRoLmNlaWwoTWF0aC5zcXJ0'@;
put 'KHVlKSksRz0wO0c8aGUmJnNlW0ddPD1jZSYmdWUlc2VbR10hPTA7RysrKTtoZSE9PUcmJnNlW0ddPD1jZXx8KHNlW2hlKytdPXVlKX1yZXR1cm4gWD1zZSxzZX0oKSxoZT0wO2hlPHNlLmxlbmd0aDtoZSsrKWlmKDA9PT1vZS5tb2RuKHNlW2hlXSkpcmV0dXJuIDA9PT1vZS5jbXBuKHNlW2hl'@;
put 'XSk7cmV0dXJuITB9ZnVuY3Rpb24gZWUob2Upe3ZhciBzZT14Lm1vbnQob2UpO3JldHVybiAwPT09Ui50b1JlZChzZSkucmVkUG93KG9lLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIHRlKG9lLHNlKXtpZihvZTwxNilyZXR1cm4gbmV3IHgoMj09PXNlfHw1PT09c2U/WzE0'@;
put 'MCwxMjNdOlsxNDAsMzldKTtzZT1uZXcgeChzZSk7Zm9yKHZhciBoZSx1ZTs7KXtmb3IoaGU9bmV3IHgoYWUoTWF0aC5jZWlsKG9lLzgpKSk7aGUuYml0TGVuZ3RoKCk+b2U7KWhlLmlzaHJuKDEpO2lmKGhlLmlzRXZlbigpJiZoZS5pYWRkKE8pLGhlLnRlc3RuKDEpfHxoZS5pYWRkKFIpLHNl'@;
put 'LmNtcChSKSl7aWYoIXNlLmNtcCh6KSlmb3IoO2hlLm1vZChrKS5jbXAoRSk7KWhlLmlhZGQoQil9ZWxzZSBmb3IoO2hlLm1vZChtKS5jbXAoVik7KWhlLmlhZGQoQik7aWYocSh1ZT1oZS5zaHJuKDEpKSYmcShoZSkmJmVlKHVlKSYmZWUoaGUpJiZNLnRlc3QodWUpJiZNLnRlc3QoaGUpKXJl'@;
put 'dHVybiBoZX19fSw4NzMwMTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rp'@;
put 'b24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlz'@;
put 'LnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9m'@;
put 'IHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoNzc0OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1m'@;
put 'dW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9'@;
put 'Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53'@;
put 'b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5p'@;
put 'dE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYm'@;
put 'KE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5j'@;
put 'dGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0'@;
put 'aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rp'@;
put 'b24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zv'@;
put 'cih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jk'@;
put 'c1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2cr'@;
put 'MV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0'@;
put 'aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0'@;
put 'aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7'@;
put 'dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgu'@;
put 'bWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxT'@;
put 'O3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9'@;
put 'MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlz'@;
put 'LmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndv'@;
put 'cmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90'@;
put 'b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxr'@;
put 'PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcs'@;
put 'MTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNl'@;
put 'NSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndv'@;
put 'cmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0'@;
put 'aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJv'@;
put 'dG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0'@;
put 'cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAh'@;
put 'PT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUou'@;
put 'aWRpdm4odykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIg'@;
put 'YW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2'@;
put 'KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmco'@;
put 'MTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3Rv'@;
put 'dHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlz'@;
put 'LnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3Bd'@;
put 'PTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1i'@;
put 'LEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixI'@;
put 'PTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlz'@;
put 'LndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRz'@;
put 'KHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlz'@;
put 'Lm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5p'@;
put 'c05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEp'@;
put 'LHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0'@;
put 'aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlv'@;
put 'cihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRo'@;
put 'aXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51'@;
put 'YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1i'@;
put 'LEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3Ry'@;
put 'aXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihi'@;
put 'KTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVy'@;
put 'Ij09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlz'@;
put 'LndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1i'@;
put 'LzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxi'@;
put 'Lm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9'@;
put 'RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYo'@;
put 'SCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1'@;
put 'YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRo'@;
put 'aXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo'@;
put 'aXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zv'@;
put 'cih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02'@;
put 'NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3Ry'@;
put 'aXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5b'@;
put 'MV0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxRZT0wfE5bNF0sbHQ9ODE5MSZRZSxQZT1RZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhl'@;
put 'PTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxvdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkx'@;
put 'JmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLEhuPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHxnWzVdLHJ0PTgxOTEmbW4sSXQ9bW4+Pj4xMyxRdD0wfGdbNl0sRHQ9ODE5MSZRdCxw'@;
put 'dD1RdD4+PjEzLFl0PTB8Z1s3XSxJbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBGbj0oUysodj1N'@;
put 'YXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhGbj4+PjI2KXwwLEZuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1N'@;
put 'YXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoTGUsQ24pfDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytN'@;
put 'YXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUsQ24pfDAsdz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1w'@;
put 'K01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExlLFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8MCkpPDwxMyl8MDtT'@;
put 'PSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoamUsV24pfDAsdz13K01hdGguaW11bChqZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChMZSxIbil8MCx3PXcrTWF0aC5pbXVsKExlLGZ0KXwwO3Zh'@;
put 'ciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2'@;
put 'PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUs'@;
put 'ZW4pfDAsdj12K01hdGguaW11bChPZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsdz13K01hdGguaW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8'@;
put 'MCx3PXcrTWF0aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDAp'@;
put 'Kyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVs'@;
put 'KFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'T2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCx3PXcrTWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5p'@;
put 'bXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxJdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxw'@;
put 'PShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVs'@;
put 'KGx0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUs'@;
put 'd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsdz13K01hdGguaW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8'@;
put 'MCx3PXcrTWF0aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDAp'@;
put 'Kyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVs'@;
put 'KFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'bHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoamUscnQpfDAsdz13K01hdGguaW11bChqZSxJdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVsKExlLHB0KXwwO3Zh'@;
put 'ciBVaT0oUysodj12K01hdGguaW11bChuZSxJbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUsSW4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2'@;
put 'PU1hdGguaW11bChvdCxDbikscD0ocD1NYXRoLmltdWwob3QsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUs'@;
put 'ZW4pfDAsdj12K01hdGguaW11bChYZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsdz13K01hdGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8'@;
put 'MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEl0KXww'@;
put 'KStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCx3PXcrTWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsSW4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLEluKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtT'@;
put 'PSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChvdCxXbil8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKG90LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01h'@;
put 'dGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0aC5pbXVsKFBlLEl0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5p'@;
put 'bXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoamUsSW4pfDAsdz13K01hdGguaW11bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoeGUsc24pfDApK01hdGguaW11bChMZSx4bil8MCx3PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytN'@;
put 'YXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwob3QsSG4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChvdCxmdCl8MCkrTWF0aC5pbXVsKHV0LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'VGUsSXQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxJ'@;
put 'bil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwoamUsc24pfDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEm'@;
put 'KHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01h'@;
put 'dGguaW11bChQdCxIbil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChvdCxobil8MCxwPShwPXArTWF0aC5pbXVsKG90LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01hdGguaW11bChBZSxE'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxJbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXww'@;
put 'LHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDAp'@;
put 'K01hdGguaW11bChqZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11'@;
put 'bChQdCx3dCksdj12K01hdGguaW11bChvdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxy'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKERlLEl0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0'@;
put 'KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChL'@;
put 'ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1N'@;
put 'YXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwob3QscnQpfDAscD0ocD1wK01hdGguaW11bChvdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01hdGguaW11bChNZSxE'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxJbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXww'@;
put 'LHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDAp'@;
put 'K01hdGguaW11bChQZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11'@;
put 'bChQdCxJdCksdj12K01hdGguaW11bChvdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxJ'@;
put 'bil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXwwKXwwKSsoKDgxOTEm'@;
put 'KHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01h'@;
put 'dGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChvdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKG90LHp0KXwwKStNYXRoLmltdWwodXQsSW4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytN'@;
put 'YXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxJbikscD0ocD1NYXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsSW4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwob3QseG4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChvdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCkpPDwxMyl8MDtT'@;
put 'PSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5p'@;
put 'bXVsKG90LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwob3QsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmlt'@;
put 'dWwoSHQsUm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJuKXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1GbixDWzFdPW5pLENbMl09bG4s'@;
put 'Q1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1IcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyks'@;
put 'SH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJu'@;
put 'IEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAs'@;
put 'Zz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4'@;
put 'NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIs'@;
put 'RCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZC'@;
put 'aW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylO'@;
put 'W1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5z'@;
put 'aW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLGplPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPWplKSxO'@;
put 'W0orZmVdPUxlK09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109TGUtT2UsZmUhPT12JiYoamU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1qZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9'@;
put 'SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFd'@;
put 'LERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2'@;
put 'ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytD'@;
put 'KUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVz'@;
put 'c0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUu'@;
put 'bGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKysp'@;
put 'e3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFs'@;
put 'aXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0'@;
put 'aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0o'@;
put 'NjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihi'@;
put 'KXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7'@;
put 'Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxu'@;
put 'PWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jk'@;
put 'c1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlz'@;
put 'LndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20o'@;
put 'Im51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsr'@;
put 'KXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0'@;
put 'aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxl'@;
put 'bmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJu'@;
put 'PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYx'@;
put 'PDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxl'@;
put 'bmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRo'@;
put 'aXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0'@;
put 'aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0'@;
put 'aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJu'@;
put 'IHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9'@;
put 'MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJv'@;
put 'dG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9'@;
put 'LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEw'@;
put 'ODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlw'@;
put 'KCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9u'@;
put 'KGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYo'@;
put 'Im1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAm'@;
put 'JihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUs'@;
put 'bmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJu'@;
put 'KEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlz'@;
put 'Lm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9k'@;
put 'KGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1'@;
put 'YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGws'@;
put 'bW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMu'@;
put 'ZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUu'@;
put 'ZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzww'@;
put 'fHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlI'@;
put 'PShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRz'@;
put 'W0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10'@;
put 'aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3Io'@;
put 'dmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1'@;
put 'Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSks'@;
put 'Qy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXtt'@;
put 'KDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zv'@;
put 'cih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+'@;
put 'MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxK'@;
put 'fSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0Qu'@;
put 'aXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09'@;
put 'PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29y'@;
put 'ZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlw'@;
put 'ZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107'@;
put 'Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0s'@;
put 'TS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9Njcx'@;
put 'MDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZl'@;
put 'KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1'@;
put 'cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJv'@;
put 'dG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5n'@;
put 'dGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1'@;
put 'cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZl'@;
put 'LCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250'@;
put 'ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4g'@;
put 'cmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElB'@;
put 'ZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdp'@;
put 'dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJl'@;
put 'ZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zl'@;
put 'cmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMp'@;
put 'fSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigp'@;
put 'e3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk'@;
put 'Ll92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBx'@;
put 'PXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRo'@;
put 'aXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhl'@;
put 'KCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhp'@;
put 'cy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYo'@;
put 'dGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3Vi'@;
put 'bigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0'@;
put 'aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/'@;
put 'LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5u'@;
put 'LDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNb'@;
put 'Z109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53'@;
put 'b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxl'@;
put 'bmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29y'@;
put 'ZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+'@;
put 'Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxz'@;
put 'ZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZl'@;
put 'cyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5f'@;
put 'Zm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRk'@;
put 'KEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhp'@;
put 'cy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5f'@;
put 'dmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1'@;
put 'bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24o'@;
put 'Yil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4o'@;
put 'Myk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVy'@;
put 'bygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zv'@;
put 'cih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIExlPXRo'@;
put 'aXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVn'@;
put 'YXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2'@;
put 'YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxl'@;
put 'bmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSks'@;
put 'dj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTty'@;
put 'ZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9t'@;
put 'PWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9'@;
put 'Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTww'@;
put 'JiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQp'@;
put 'Lm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJl'@;
put 'ZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSw3MDg5NjpmdW5jdGlvbihhdCl7YXQuZXhwb3J0cz1mdW5jdGlvbigp'@;
put 'eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJZShNZSl7cmV0dXJuKEllPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKERlKXtyZXR1cm4gdHlwZW9mIERlfTpmdW5jdGlvbihEZSl7cmV0dXJuIERlJiYiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgU3ltYm9sJiZEZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmRGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBEZX0pKE1lKX1mdW5jdGlvbiBGKE1lLERlKXtyZXR1cm4oRj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKG90LHV0KXtyZXR1cm4gb3Qu'@;
put 'X19wcm90b19fPXV0LG90fSkoTWUsRGUpfWZ1bmN0aW9uIHgoTWUsRGUsemUpe3JldHVybih4PWZ1bmN0aW9uIGFlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKHV0LE10LEh0KXt2YXIg'@;
put 'UHQ9W251bGxdO1B0LnB1c2guYXBwbHkoUHQsTXQpO3ZhciBDbj1uZXcoRnVuY3Rpb24uYmluZC5hcHBseSh1dCxQdCkpO3JldHVybiBIdCYmRihDbixIdC5wcm90b3R5cGUpLENufSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIG0oTWUpe3JldHVybiBmdW5jdGlvbiBsZShNZSl7'@;
put 'aWYoQXJyYXkuaXNBcnJheShNZSkpcmV0dXJuIFIoTWUpfShNZSl8fGZ1bmN0aW9uIE0oTWUpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1NZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1NZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKE1lKX0oTWUpfHxmdW5jdGlvbiBP'@;
put 'KE1lLERlKXtpZihNZSl7aWYoInN0cmluZyI9PXR5cGVvZiBNZSlyZXR1cm4gUihNZSxEZSk7dmFyIHplPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChNZSkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT16ZSYmTWUuY29uc3RydWN0b3ImJih6ZT1NZS5jb25zdHJ1Y3Rvci5uYW1l'@;
put 'KSwiTWFwIj09PXplfHwiU2V0Ij09PXplKXJldHVybiBBcnJheS5mcm9tKE1lKTtpZigiQXJndW1lbnRzIj09PXplfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh6ZSkpcmV0dXJuIFIoTWUsRGUpfX0oTWUpfHxmdW5jdGlvbiB6KCl7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gUihNZSxE'@;
put 'ZSl7KG51bGw9PURlfHxEZT5NZS5sZW5ndGgpJiYoRGU9TWUubGVuZ3RoKTtmb3IodmFyIHplPTAsb3Q9bmV3IEFycmF5KERlKTt6ZTxEZTt6ZSsrKW90W3plXT1NZVt6ZV07cmV0dXJuIG90fXZhciBLPU9iamVjdC5oYXNPd25Qcm9wZXJ0eSxJPU9iamVjdC5zZXRQcm90b3R5cGVPZixrPU9i'@;
put 'amVjdC5pc0Zyb3plbixFPU9iamVjdC5nZXRQcm90b3R5cGVPZixqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsVj1PYmplY3QuZnJlZXplLEI9T2JqZWN0LnNlYWwsWT1PYmplY3QuY3JlYXRlLFg9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LFU9WC5hcHBseSxxPVguY29u'@;
put 'c3RydWN0O1V8fChVPWZ1bmN0aW9uKERlLHplLG90KXtyZXR1cm4gRGUuYXBwbHkoemUsb3QpfSksVnx8KFY9ZnVuY3Rpb24oRGUpe3JldHVybiBEZX0pLEJ8fChCPWZ1bmN0aW9uKERlKXtyZXR1cm4gRGV9KSxxfHwocT1mdW5jdGlvbihEZSx6ZSl7cmV0dXJuIHgoRGUsbSh6ZSkpfSk7dmFy'@;
put 'IGVlPU4oQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLHRlPU4oQXJyYXkucHJvdG90eXBlLnBvcCksb2U9TihBcnJheS5wcm90b3R5cGUucHVzaCksc2U9TihTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxoZT1OKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLHVlPU4oU3RyaW5nLnBy'@;
put 'b3RvdHlwZS5tYXRjaCksY2U9TihTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLEc9TihTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLGI9TihTdHJpbmcucHJvdG90eXBlLnRyaW0pLEQ9TihSZWdFeHAucHJvdG90eXBlLnRlc3QpLEg9ZnVuY3Rpb24gZyhNZSl7cmV0dXJuIGZ1bmN0aW9uKCl7'@;
put 'Zm9yKHZhciBEZT1hcmd1bWVudHMubGVuZ3RoLHplPW5ldyBBcnJheShEZSksb3Q9MDtvdDxEZTtvdCsrKXplW290XT1hcmd1bWVudHNbb3RdO3JldHVybiBxKE1lLHplKX19KFR5cGVFcnJvcik7ZnVuY3Rpb24gTihNZSl7cmV0dXJuIGZ1bmN0aW9uKERlKXtmb3IodmFyIHplPWFyZ3VtZW50'@;
put 'cy5sZW5ndGgsb3Q9bmV3IEFycmF5KHplPjE/emUtMTowKSx1dD0xO3V0PHplO3V0Kyspb3RbdXQtMV09YXJndW1lbnRzW3V0XTtyZXR1cm4gVShNZSxEZSxvdCl9fWZ1bmN0aW9uIEMoTWUsRGUsemUpe3ZhciBvdDt6ZT1udWxsIT09KG90PXplKSYmdm9pZCAwIT09b3Q/b3Q6c2UsSSYmSShN'@;
put 'ZSxudWxsKTtmb3IodmFyIHV0PURlLmxlbmd0aDt1dC0tOyl7dmFyIE10PURlW3V0XTtpZigic3RyaW5nIj09dHlwZW9mIE10KXt2YXIgSHQ9emUoTXQpO0h0IT09TXQmJihrKERlKXx8KERlW3V0XT1IdCksTXQ9SHQpfU1lW010XT0hMH1yZXR1cm4gTWV9ZnVuY3Rpb24gUyhNZSl7dmFyIHpl'@;
put 'LERlPVkobnVsbCk7Zm9yKHplIGluIE1lKSEwPT09VShLLE1lLFt6ZV0pJiYoRGVbemVdPU1lW3plXSk7cmV0dXJuIERlfWZ1bmN0aW9uIHYoTWUsRGUpe2Zvcig7bnVsbCE9PU1lOyl7dmFyIHplPWooTWUsRGUpO2lmKHplKXtpZih6ZS5nZXQpcmV0dXJuIE4oemUuZ2V0KTtpZigiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgemUudmFsdWUpcmV0dXJuIE4oemUudmFsdWUpfU1lPUUoTWUpfXJldHVybiBmdW5jdGlvbiBvdCh1dCl7cmV0dXJuIGNvbnNvbGUud2FybigiZmFsbGJhY2sgdmFsdWUgZm9yIix1dCksbnVsbH19dmFyIHA9VihbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJh'@;
put 'cmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50Iiwi'@;
put 'ZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJo'@;
put 'MiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRl'@;
put 'ciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2Vy'@;
put 'Iiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlk'@;
put 'ZW8iLCJ3YnIiXSksdz1WKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmls'@;
put 'dGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIs'@;
put 'InJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxKPVYoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIs'@;
put 'ImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJm'@;
put 'ZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksbmU9VihbImFuaW1hdGUiLCJjb2xvci1wcm9maWxlIiwiY3Vyc29yIiwiZGlzY2FyZCIs'@;
put 'ImZlZHJvcHNoYWRvdyIsImZvbnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJpIiwiZm9yZWlnbm9iamVjdCIsImhhdGNoIiwiaGF0Y2hwYXRoIiwibWVzaCIsIm1lc2hncmFkaWVudCIsIm1lc2hwYXRjaCIs'@;
put 'Im1lc2hyb3ciLCJtaXNzaW5nLWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVua25vd24iLCJ1c2UiXSksZGU9VihbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMi'@;
put 'LCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIl0pLGZl'@;
put 'PVYoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMi'@;
put 'LCJub25lIl0pLHhlPVYoWyIjdGV4dCJdKSxMZT1WKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNh'@;
put 'cHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwi'@;
put 'ZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIs'@;
put 'ImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3Ro'@;
put 'IiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIs'@;
put 'InJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwi'@;
put 'c3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxGZT1WKFsiYWNjZW50LWhlaWdodCIsImFjY3VtdWxhdGUiLCJhZGRpdGl2ZSIsImFsaWdu'@;
put 'bWVudC1iYXNlbGluZSIsImFzY2VudCIsImF0dHJpYnV0ZW5hbWUiLCJhdHRyaWJ1dGV0eXBlIiwiYXppbXV0aCIsImJhc2VmcmVxdWVuY3kiLCJiYXNlbGluZS1zaGlmdCIsImJlZ2luIiwiYmlhcyIsImJ5IiwiY2xhc3MiLCJjbGlwIiwiY2xpcHBhdGh1bml0cyIsImNsaXAtcGF0aCIsImNs'@;
put 'aXAtcnVsZSIsImNvbG9yIiwiY29sb3ItaW50ZXJwb2xhdGlvbiIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsImNvbG9yLXByb2ZpbGUiLCJjb2xvci1yZW5kZXJpbmciLCJjeCIsImN5IiwiZCIsImR4IiwiZHkiLCJkaWZmdXNlY29uc3RhbnQiLCJkaXJlY3Rpb24iLCJkaXNwbGF5'@;
put 'IiwiZGl2aXNvciIsImR1ciIsImVkZ2Vtb2RlIiwiZWxldmF0aW9uIiwiZW5kIiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250'@;
put 'LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVm'@;
put 'IiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJu'@;
put 'ZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNr'@;
put 'IiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3Ro'@;
put 'IiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVh'@;
put 'dGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNwZWN1bGFyY29uc3RhbnQiLCJzcGVjdWxhcmV4cG9uZW50Iiwic3ByZWFkbWV0aG9kIiwic3RhcnRvZmZzZXQiLCJzdGRkZXZpYXRpb24iLCJz'@;
put 'dGl0Y2h0aWxlcyIsInN0b3AtY29sb3IiLCJzdG9wLW9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNhcCIsInN0cm9rZS1saW5lam9pbiIsInN0cm9rZS1taXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJv'@;
put 'a2Utd2lkdGgiLCJzdHlsZSIsInN1cmZhY2VzY2FsZSIsInN5c3RlbWxhbmd1YWdlIiwidGFiaW5kZXgiLCJ0YXJnZXR4IiwidGFyZ2V0eSIsInRyYW5zZm9ybSIsInRyYW5zZm9ybS1vcmlnaW4iLCJ0ZXh0LWFuY2hvciIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtcmVuZGVyaW5nIiwidGV4'@;
put 'dGxlbmd0aCIsInR5cGUiLCJ1MSIsInUyIiwidW5pY29kZSIsInZhbHVlcyIsInZpZXdib3giLCJ2aXNpYmlsaXR5IiwidmVyc2lvbiIsInZlcnQtYWR2LXkiLCJ2ZXJ0LW9yaWdpbi14IiwidmVydC1vcmlnaW4teSIsIndpZHRoIiwid29yZC1zcGFjaW5nIiwid3JhcCIsIndyaXRpbmctbW9k'@;
put 'ZSIsInhjaGFubmVsc2VsZWN0b3IiLCJ5Y2hhbm5lbHNlbGVjdG9yIiwieCIsIngxIiwieDIiLCJ4bWxucyIsInkiLCJ5MSIsInkyIiwieiIsInpvb21hbmRwYW4iXSksT2U9VihbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWdu'@;
put 'IiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwi'@;
put 'bHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3Bh'@;
put 'Y2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hp'@;
put 'ZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxqZT1WKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksV2U9QigvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLEtlPUIoLzwlW1x3XFddKnxb'@;
put 'XHdcV10qJT4vZ20pLFllPUIoL1wke1tcd1xXXSp9L2dtKSxRZT1CKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLGx0PUIoL15hcmlhLVtcLVx3XSskLyksUGU9QigvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0r'@;
put 'KD86W15hLXorLlwtOl18JCkpL2kpLGJlPUIoL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLEFlPUIoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksVGU9QigvXmh0bWwkL2kpO3JldHVybiBmdW5jdGlvbiBVZSgpe3ZhciBNZT1h'@;
put 'cmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csRGU9ZnVuY3Rpb24oWW4pe3JldHVybiBVZShZbil9O2lmKERlLnZlcnNpb249IjIuNC43IixEZS5yZW1vdmVkPVtdLCFNZXx8IU1lLmRvY3Vt'@;
put 'ZW50fHw5IT09TWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIERlLmlzU3VwcG9ydGVkPSExLERlO3ZhciB6ZT1NZS5kb2N1bWVudCxvdD1NZS5kb2N1bWVudCx1dD1NZS5Eb2N1bWVudEZyYWdtZW50LE10PU1lLkhUTUxUZW1wbGF0ZUVsZW1lbnQsSHQ9TWUuTm9kZSxQdD1NZS5FbGVtZW50'@;
put 'LG9uPU1lLk5vZGVGaWx0ZXIsQ249TWUuTmFtZWROb2RlTWFwLFV0PXZvaWQgMD09PUNuP01lLk5hbWVkTm9kZU1hcHx8TWUuTW96TmFtZWRBdHRyTWFwOkNuLGJuPU1lLkhUTUxGb3JtRWxlbWVudCxXbj1NZS5ET01QYXJzZXIsZW49TWUudHJ1c3RlZFR5cGVzLCRuPVB0LnByb3RvdHlwZSxI'@;
put 'bj12KCRuLCJjbG9uZU5vZGUiKSxmdD12KCRuLCJuZXh0U2libGluZyIpLGZuPXYoJG4sImNoaWxkTm9kZXMiKSxobj12KCRuLCJwYXJlbnROb2RlIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE10KXt2YXIgd3Q9b3QuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3dC5jb250ZW50JiZ3dC5j'@;
put 'b250ZW50Lm93bmVyRG9jdW1lbnQmJihvdD13dC5jb250ZW50Lm93bmVyRG9jdW1lbnQpfXZhciBYdD1mdW5jdGlvbihEZSx6ZSl7aWYoIm9iamVjdCIhPT1JZShEZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBEZS5jcmVhdGVQb2xpY3kpcmV0dXJuIG51bGw7dmFyIG90PW51bGwsdXQ9ImRhdGEt'@;
put 'dHQtcG9saWN5LXN1ZmZpeCI7emUuY3VycmVudFNjcmlwdCYmemUuY3VycmVudFNjcmlwdC5oYXNBdHRyaWJ1dGUodXQpJiYob3Q9emUuY3VycmVudFNjcmlwdC5nZXRBdHRyaWJ1dGUodXQpKTt2YXIgTXQ9ImRvbXB1cmlmeSIrKG90PyIjIitvdDoiIik7dHJ5e3JldHVybiBEZS5jcmVhdGVQ'@;
put 'b2xpY3koTXQse2NyZWF0ZUhUTUw6ZnVuY3Rpb24oUHQpe3JldHVybiBQdH0sY3JlYXRlU2NyaXB0VVJMOmZ1bmN0aW9uKFB0KXtyZXR1cm4gUHR9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK010KyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiks'@;
put 'bnVsbH19KGVuLHplKSxfdD1YdD9YdC5jcmVhdGVIVE1MKCIiKToiIixtbj1vdC5pbXBsZW1lbnRhdGlvbixydD1vdC5jcmVhdGVOb2RlSXRlcmF0b3IsSXQ9b3QuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxRdD1vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSxEdD16ZS5pbXBvcnROb2RlLHB0PXt9'@;
put 'O3RyeXtwdD1TKG90KS5kb2N1bWVudE1vZGU/b3QuZG9jdW1lbnRNb2RlOnt9fWNhdGNoe312YXIgWXQ9e307RGUuaXNTdXBwb3J0ZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIGhuJiZtbiYmdm9pZCAwIT09bW4uY3JlYXRlSFRNTERvY3VtZW50JiY5IT09cHQ7dmFyIGVhLCRhLEluPVdlLHp0PUtl'@;
put 'LHluPVllLHhuPVFlLHNuPWx0LEJuPWJlLFJuPUFlLCR0PVBlLEZuPW51bGwsbmk9Qyh7fSxbXS5jb25jYXQobShwKSxtKHcpLG0oSiksbShkZSksbSh4ZSkpKSxsbj1udWxsLGpuPUMoe30sW10uY29uY2F0KG0oTGUpLG0oRmUpLG0oT2UpLG0oamUpKSkscXI9T2JqZWN0LnNlYWwoT2JqZWN0'@;
put 'LmNyZWF0ZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0'@;
put 'b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksZ2k9bnVsbCx4cj1udWxsLFVpPSEwLEtyPSEwLG5vPSExLEhyPSEwLHFpPSExLEppPSExLGFvPSExLHJvPSExLGlvPSExLEdpPSExLGhvPSExLHlyPSEw'@;
put 'LFBpPSExLGhzPSEwLHJzPSExLFJjPXt9LHVsPW51bGwsT2M9Qyh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlmcmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5v'@;
put 'ZnJhbWVzIiwibm9zY3JpcHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pLE4wPW51bGwsczM9Qyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pLGsy'@;
put 'PW51bGwsZTA9Qyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLHh1PSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0'@;
put 'aE1MIixmcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFBhPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTcj1QYSxBMj0hMSxhMz1udWxsLFBoPUMoe30sW3h1LGZzLFBhXSxoZSksaXM9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXSx0MD1udWxsLFNh'@;
put 'PW90LmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxGaD1mdW5jdGlvbihZbil7cmV0dXJuIFluIGluc3RhbmNlb2YgUmVnRXhwfHxZbiBpbnN0YW5jZW9mIEZ1bmN0aW9ufSxFdT1mdW5jdGlvbihZbil7dDAmJnQwPT09WW58fCgoIVlufHwib2JqZWN0IiE9PUllKFluKSkmJihZbj17fSksWW49UyhZ'@;
put 'biksZWE9ZWE9LTE9PT1pcy5pbmRleE9mKFluLlBBUlNFUl9NRURJQV9UWVBFKT8idGV4dC9odG1sIjpZbi5QQVJTRVJfTUVESUFfVFlQRSwkYT0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWVhP2hlOnNlLEZuPSJBTExPV0VEX1RBR1MiaW4gWW4/Qyh7fSxZbi5BTExPV0VEX1RBR1MsJGEp'@;
put 'Om5pLGxuPSJBTExPV0VEX0FUVFIiaW4gWW4/Qyh7fSxZbi5BTExPV0VEX0FUVFIsJGEpOmpuLGEzPSJBTExPV0VEX05BTUVTUEFDRVMiaW4gWW4/Qyh7fSxZbi5BTExPV0VEX05BTUVTUEFDRVMsaGUpOlBoLGsyPSJBRERfVVJJX1NBRkVfQVRUUiJpbiBZbj9DKFMoZTApLFluLkFERF9VUklf'@;
put 'U0FGRV9BVFRSLCRhKTplMCxOMD0iQUREX0RBVEFfVVJJX1RBR1MiaW4gWW4/QyhTKHMzKSxZbi5BRERfREFUQV9VUklfVEFHUywkYSk6czMsdWw9IkZPUkJJRF9DT05URU5UUyJpbiBZbj9DKHt9LFluLkZPUkJJRF9DT05URU5UUywkYSk6T2MsZ2k9IkZPUkJJRF9UQUdTImluIFluP0Moe30s'@;
put 'WW4uRk9SQklEX1RBR1MsJGEpOnt9LHhyPSJGT1JCSURfQVRUUiJpbiBZbj9DKHt9LFluLkZPUkJJRF9BVFRSLCRhKTp7fSxSYz0iVVNFX1BST0ZJTEVTImluIFluJiZZbi5VU0VfUFJPRklMRVMsVWk9ITEhPT1Zbi5BTExPV19BUklBX0FUVFIsS3I9ITEhPT1Zbi5BTExPV19EQVRBX0FUVFIs'@;
put 'bm89WW4uQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLEhyPSExIT09WW4uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSLHFpPVluLlNBRkVfRk9SX1RFTVBMQVRFU3x8ITEsSmk9WW4uV0hPTEVfRE9DVU1FTlR8fCExLGlvPVluLlJFVFVSTl9ET018fCExLEdpPVluLlJFVFVSTl9ET01fRlJB'@;
put 'R01FTlR8fCExLGhvPVluLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLHJvPVluLkZPUkNFX0JPRFl8fCExLHlyPSExIT09WW4uU0FOSVRJWkVfRE9NLFBpPVluLlNBTklUSVpFX05BTUVEX1BST1BTfHwhMSxocz0hMSE9PVluLktFRVBfQ09OVEVOVCxycz1Zbi5JTl9QTEFDRXx8ITEsJHQ9WW4u'@;
put 'QUxMT1dFRF9VUklfUkVHRVhQfHwkdCxTcj1Zbi5OQU1FU1BBQ0V8fFBhLHFyPVluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSxZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmRmgoWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKHFyLnRhZ05hbWVDaGVj'@;
put 'az1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZGaChZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYocXIuYXR0cmlidXRlTmFtZUNoZWNrPVluLkNVU1RPTV9FTEVNRU5UX0hB'@;
put 'TkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJiJib29sZWFuIj09dHlwZW9mIFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKHFyLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50'@;
put 'cz1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLHFpJiYoS3I9ITEpLEdpJiYoaW89ITApLFJjJiYoRm49Qyh7fSxtKHhlKSksbG49W10sITA9PT1SYy5odG1sJiYoQyhGbixwKSxDKGxuLExlKSksITA9PT1SYy5zdmcmJihDKEZuLHcp'@;
put 'LEMobG4sRmUpLEMobG4samUpKSwhMD09PVJjLnN2Z0ZpbHRlcnMmJihDKEZuLEopLEMobG4sRmUpLEMobG4samUpKSwhMD09PVJjLm1hdGhNbCYmKEMoRm4sZGUpLEMobG4sT2UpLEMobG4samUpKSksWW4uQUREX1RBR1MmJihGbj09PW5pJiYoRm49UyhGbikpLEMoRm4sWW4uQUREX1RBR1Ms'@;
put 'JGEpKSxZbi5BRERfQVRUUiYmKGxuPT09am4mJihsbj1TKGxuKSksQyhsbixZbi5BRERfQVRUUiwkYSkpLFluLkFERF9VUklfU0FGRV9BVFRSJiZDKGsyLFluLkFERF9VUklfU0FGRV9BVFRSLCRhKSxZbi5GT1JCSURfQ09OVEVOVFMmJih1bD09PU9jJiYodWw9Uyh1bCkpLEModWwsWW4uRk9S'@;
put 'QklEX0NPTlRFTlRTLCRhKSksaHMmJihGblsiI3RleHQiXT0hMCksSmkmJkMoRm4sWyJodG1sIiwiaGVhZCIsImJvZHkiXSksRm4udGFibGUmJihDKEZuLFsidGJvZHkiXSksZGVsZXRlIGdpLnRib2R5KSxWJiZWKFluKSx0MD1Zbil9LEFzPUMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10'@;
put 'ZXh0Il0pLG4wPUMoe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSkscWE9Qyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSxfYz1DKHt9LHcpO0MoX2MsSiksQyhfYyxuZSk7dmFyIEhoPUMoe30sZGUpO0MoSGgsZmUp'@;
put 'O3ZhciBibz1mdW5jdGlvbihZbil7b2UoRGUucmVtb3ZlZCx7ZWxlbWVudDpZbn0pO3RyeXtZbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFluKX1jYXRjaHt0cnl7WW4ub3V0ZXJIVE1MPV90fWNhdGNoe1luLnJlbW92ZSgpfX19LHIwPWZ1bmN0aW9uKFluLF9pKXt0cnl7b2UoRGUucmVtb3Zl'@;
put 'ZCx7YXR0cmlidXRlOl9pLmdldEF0dHJpYnV0ZU5vZGUoWW4pLGZyb206X2l9KX1jYXRjaHtvZShEZS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOl9pfSl9aWYoX2kucmVtb3ZlQXR0cmlidXRlKFluKSwiaXMiPT09WW4mJiFsbltZbl0paWYoaW98fEdpKXRyeXtibyhfaSl9Y2F0Y2h7'@;
put 'fWVsc2UgdHJ5e19pLnNldEF0dHJpYnV0ZShZbiwiIil9Y2F0Y2h7fX0sVDI9ZnVuY3Rpb24oWW4pe3ZhciBfaSxiaTtpZihybylZbj0iPHJlbW92ZT48L3JlbW92ZT4iK1luO2Vsc2V7dmFyIG9zPXVlKFluLC9eW1xyXG5cdCBdKy8pO2JpPW9zJiZvc1swXX0iYXBwbGljYXRpb24veGh0bWwr'@;
put 'eG1sIj09PWVhJiZTcj09PVBhJiYoWW49JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytZbisiPC9ib2R5PjwvaHRtbD4iKTt2YXIgRmE9WHQ/WHQuY3JlYXRlSFRNTChZbik6WW47aWYoU3I9PT1QYSl0cnl7X2k9KG5ldyBX'@;
put 'bikucGFyc2VGcm9tU3RyaW5nKEZhLGVhKX1jYXRjaHt9aWYoIV9pfHwhX2kuZG9jdW1lbnRFbGVtZW50KXtfaT1tbi5jcmVhdGVEb2N1bWVudChTciwidGVtcGxhdGUiLG51bGwpO3RyeXtfaS5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPUEyP190OkZhfWNhdGNoe319dmFyIEhhPV9pLmJv'@;
put 'ZHl8fF9pLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gWW4mJmJpJiZIYS5pbnNlcnRCZWZvcmUob3QuY3JlYXRlVGV4dE5vZGUoYmkpLEhhLmNoaWxkTm9kZXNbMF18fG51bGwpLFNyPT09UGE/UXQuY2FsbChfaSxKaT8iaHRtbCI6ImJvZHkiKVswXTpKaT9faS5kb2N1bWVudEVsZW1lbnQ6SGF9'@;
put 'LEQyPWZ1bmN0aW9uKFluKXtyZXR1cm4gcnQuY2FsbChZbi5vd25lckRvY3VtZW50fHxZbixZbixvbi5TSE9XX0VMRU1FTlR8b24uU0hPV19DT01NRU5UfG9uLlNIT1dfVEVYVCxudWxsLCExKX0sQXI9ZnVuY3Rpb24oWW4pe3JldHVybiJvYmplY3QiPT09SWUoSHQpP1luIGluc3RhbmNlb2Yg'@;
put 'SHQ6WW4mJiJvYmplY3QiPT09SWUoWW4pJiYibnVtYmVyIj09dHlwZW9mIFluLm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIFluLm5vZGVOYW1lfSxiYz1mdW5jdGlvbihZbixfaSxiaSl7WXRbWW5dJiZlZShZdFtZbl0sZnVuY3Rpb24ob3Mpe29zLmNhbGwoRGUsX2ksYmksdDApfSl9LGtv'@;
put 'PWZ1bmN0aW9uKFluKXt2YXIgX2k7aWYoYmMoImJlZm9yZVNhbml0aXplRWxlbWVudHMiLFluLG51bGwpLGZ1bmN0aW9uKFluKXtyZXR1cm4gWW4gaW5zdGFuY2VvZiBibiYmKCJzdHJpbmciIT10eXBlb2YgWW4ubm9kZU5hbWV8fCJzdHJpbmciIT10eXBlb2YgWW4udGV4dENvbnRlbnR8fCJm'@;
put 'dW5jdGlvbiIhPXR5cGVvZiBZbi5yZW1vdmVDaGlsZHx8IShZbi5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgVXQpfHwiZnVuY3Rpb24iIT10eXBlb2YgWW4ucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgWW4uc2V0QXR0cmlidXRlfHwic3RyaW5nIiE9dHlwZW9mIFluLm5hbWVz'@;
put 'cGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLmluc2VydEJlZm9yZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLmhhc0NoaWxkTm9kZXMpfShZbil8fEQoL1tcdTAwODAtXHVGRkZGXS8sWW4ubm9kZU5hbWUpKXJldHVybiBibyhZbiksITA7dmFyIGJpPSRhKFluLm5vZGVOYW1lKTtpZihi'@;
put 'YygidXBvblNhbml0aXplRWxlbWVudCIsWW4se3RhZ05hbWU6YmksYWxsb3dlZFRhZ3M6Rm59KSxZbi5oYXNDaGlsZE5vZGVzKCkmJiFBcihZbi5maXJzdEVsZW1lbnRDaGlsZCkmJighQXIoWW4uY29udGVudCl8fCFBcihZbi5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSkmJkQoLzxbL1x3'@;
put 'XS9nLFluLmlubmVySFRNTCkmJkQoLzxbL1x3XS9nLFluLnRleHRDb250ZW50KXx8InNlbGVjdCI9PT1iaSYmRCgvPHRlbXBsYXRlL2ksWW4uaW5uZXJIVE1MKSlyZXR1cm4gYm8oWW4pLCEwO2lmKCFGbltiaV18fGdpW2JpXSl7aWYoIWdpW2JpXSYmbzAoYmkpJiYocXIudGFnTmFtZUNoZWNr'@;
put 'IGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayxiaSl8fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1lQ2hlY2soYmkpKSlyZXR1cm4hMTtpZihocyYmIXVsW2JpXSl7dmFyIG9zPWhuKFluKXx8WW4ucGFyZW50Tm9kZSxGYT1mbihZbil8'@;
put 'fFluLmNoaWxkTm9kZXM7aWYoRmEmJm9zKWZvcih2YXIgJG89RmEubGVuZ3RoLTE7JG8+PTA7LS0kbylvcy5pbnNlcnRCZWZvcmUoSG4oRmFbJG9dLCEwKSxmdChZbikpfXJldHVybiBibyhZbiksITB9cmV0dXJuIFluIGluc3RhbmNlb2YgUHQmJiFmdW5jdGlvbihZbil7dmFyIF9pPWhuKFlu'@;
put 'KTsoIV9pfHwhX2kudGFnTmFtZSkmJihfaT17bmFtZXNwYWNlVVJJOlNyLHRhZ05hbWU6InRlbXBsYXRlIn0pO3ZhciBiaT1zZShZbi50YWdOYW1lKSxvcz1zZShfaS50YWdOYW1lKTtyZXR1cm4hIWEzW1luLm5hbWVzcGFjZVVSSV0mJihZbi5uYW1lc3BhY2VVUkk9PT1mcz9faS5uYW1lc3Bh'@;
put 'Y2VVUkk9PT1QYT8ic3ZnIj09PWJpOl9pLm5hbWVzcGFjZVVSST09PXh1PyJzdmciPT09YmkmJigiYW5ub3RhdGlvbi14bWwiPT09b3N8fEFzW29zXSk6ISFfY1tiaV06WW4ubmFtZXNwYWNlVVJJPT09eHU/X2kubmFtZXNwYWNlVVJJPT09UGE/Im1hdGgiPT09Ymk6X2kubmFtZXNwYWNlVVJJ'@;
put 'PT09ZnM/Im1hdGgiPT09YmkmJm4wW29zXTohIUhoW2JpXTpZbi5uYW1lc3BhY2VVUkk9PT1QYT8hKF9pLm5hbWVzcGFjZVVSST09PWZzJiYhbjBbb3NdfHxfaS5uYW1lc3BhY2VVUkk9PT14dSYmIUFzW29zXSkmJiFIaFtiaV0mJihxYVtiaV18fCFfY1tiaV0pOiEoImFwcGxpY2F0aW9uL3ho'@;
put 'dG1sK3htbCIhPT1lYXx8IWEzW1luLm5hbWVzcGFjZVVSSV0pKX0oWW4pfHwoIm5vc2NyaXB0Ij09PWJpfHwibm9lbWJlZCI9PT1iaXx8Im5vZnJhbWVzIj09PWJpKSYmRCgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSxZbi5pbm5lckhUTUwpPyhibyhZbiksITApOihxaSYmMz09PVlu'@;
put 'Lm5vZGVUeXBlJiYoX2k9Y2UoX2k9WW4udGV4dENvbnRlbnQsSW4sIiAiKSxfaT1jZShfaSx6dCwiICIpLF9pPWNlKF9pLHluLCIgIiksWW4udGV4dENvbnRlbnQhPT1faSYmKG9lKERlLnJlbW92ZWQse2VsZW1lbnQ6WW4uY2xvbmVOb2RlKCl9KSxZbi50ZXh0Q29udGVudD1faSkpLGJjKCJh'@;
put 'ZnRlclNhbml0aXplRWxlbWVudHMiLFluLG51bGwpLCExKX0sQ3M9ZnVuY3Rpb24oWW4sX2ksYmkpe2lmKHlyJiYoImlkIj09PV9pfHwibmFtZSI9PT1faSkmJihiaSBpbiBvdHx8YmkgaW4gU2EpKXJldHVybiExO2lmKCghS3J8fHhyW19pXXx8IUQoeG4sX2kpKSYmKCFVaXx8IUQoc24sX2kp'@;
put 'KSlpZighbG5bX2ldfHx4cltfaV0pe2lmKCEobzAoWW4pJiYocXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayxZbil8fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1lQ2hlY2soWW4pKSYmKHFyLmF0dHJpYnV0'@;
put 'ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci5hdHRyaWJ1dGVOYW1lQ2hlY2ssX2kpfHxxci5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmcXIuYXR0cmlidXRlTmFtZUNoZWNrKF9pKSl8fCJpcyI9PT1faSYmcXIuYWxsb3dDdXN0b21pemVkQnVpbHRJ'@;
put 'bkVsZW1lbnRzJiYocXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayxiaSl8fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1lQ2hlY2soYmkpKSkpcmV0dXJuITF9ZWxzZSBpZighazJbX2ldJiYhRCgkdCxjZShi'@;
put 'aSxSbiwiIikpJiYoInNyYyIhPT1faSYmInhsaW5rOmhyZWYiIT09X2kmJiJocmVmIiE9PV9pfHwic2NyaXB0Ij09PVlufHwwIT09RyhiaSwiZGF0YToiKXx8IU4wW1luXSkmJighbm98fEQoQm4sY2UoYmksUm4sIiIpKSkmJmJpKXJldHVybiExO3JldHVybiEwfSxvMD1mdW5jdGlvbihZbil7'@;
put 'cmV0dXJuIFluLmluZGV4T2YoIi0iKT4wfSxJMj1mdW5jdGlvbihZbil7dmFyIF9pLGJpLG9zLEZhO2JjKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLFluLG51bGwpO3ZhciBIYT1Zbi5hdHRyaWJ1dGVzO2lmKEhhKXt2YXIgJG89e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0'@;
put 'cjohMCxhbGxvd2VkQXR0cmlidXRlczpsbn07Zm9yKEZhPUhhLmxlbmd0aDtGYS0tOyl7dmFyIERhPShfaT1IYVtGYV0pLm5hbWUsVmg9X2kubmFtZXNwYWNlVVJJO2lmKGJpPSJ2YWx1ZSI9PT1EYT9faS52YWx1ZTpiKF9pLnZhbHVlKSxvcz0kYShEYSksJG8uYXR0ck5hbWU9b3MsJG8uYXR0'@;
put 'clZhbHVlPWJpLCRvLmtlZXBBdHRyPSEwLCRvLmZvcmNlS2VlcEF0dHI9dm9pZCAwLGJjKCJ1cG9uU2FuaXRpemVBdHRyaWJ1dGUiLFluLCRvKSxiaT0kby5hdHRyVmFsdWUsISRvLmZvcmNlS2VlcEF0dHImJihyMChEYSxZbiksJG8ua2VlcEF0dHIpKXtpZighSHImJkQoL1wvPi9pLGJpKSl7'@;
put 'cjAoRGEsWW4pO2NvbnRpbnVlfXFpJiYoYmk9Y2UoYmksSW4sIiAiKSxiaT1jZShiaSx6dCwiICIpLGJpPWNlKGJpLHluLCIgIikpO3ZhciBCaD0kYShZbi5ub2RlTmFtZSk7aWYoQ3MoQmgsb3MsYmkpKXtpZihQaSYmKCJpZCI9PT1vc3x8Im5hbWUiPT09b3MpJiYocjAoRGEsWW4pLGJpPSJ1'@;
put 'c2VyLWNvbnRlbnQtIitiaSksWHQmJiJvYmplY3QiPT09SWUoZW4pJiYiZnVuY3Rpb24iPT10eXBlb2YgZW4uZ2V0QXR0cmlidXRlVHlwZSYmIVZoKXN3aXRjaChlbi5nZXRBdHRyaWJ1dGVUeXBlKEJoLG9zKSl7Y2FzZSJUcnVzdGVkSFRNTCI6Ymk9WHQuY3JlYXRlSFRNTChiaSk7YnJlYWs7'@;
put 'Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjpiaT1YdC5jcmVhdGVTY3JpcHRVUkwoYmkpfXRyeXtWaD9Zbi5zZXRBdHRyaWJ1dGVOUyhWaCxEYSxiaSk6WW4uc2V0QXR0cmlidXRlKERhLGJpKSx0ZShEZS5yZW1vdmVkKX1jYXRjaHt9fX19YmMoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixZbixu'@;
put 'dWxsKX19LE5oPWZ1bmN0aW9uIFFpKFluKXt2YXIgX2ksYmk9RDIoWW4pO2ZvcihiYygiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLFluLG51bGwpO19pPWJpLm5leHROb2RlKCk7KWJjKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixfaSxudWxsKSwha28oX2kpJiYoX2kuY29udGVudCBpbnN0'@;
put 'YW5jZW9mIHV0JiZRaShfaS5jb250ZW50KSxJMihfaSkpO2JjKCJhZnRlclNhbml0aXplU2hhZG93RE9NIixZbixudWxsKX07cmV0dXJuIERlLnNhbml0aXplPWZ1bmN0aW9uKFFpKXt2YXIgX2ksYmksb3MsRmEsSGEsWW49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MV0/YXJndW1lbnRzWzFdOnt9O2lmKChBMj0hUWkpJiYoUWk9Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiBRaSYmIUFyKFFpKSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFFpLnRvU3RyaW5nKXRocm93IEgoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIh'@;
put 'PXR5cGVvZihRaT1RaS50b1N0cmluZygpKSl0aHJvdyBIKCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9aWYoIURlLmlzU3VwcG9ydGVkKXtpZigib2JqZWN0Ij09PUllKE1lLnRvU3RhdGljSFRNTCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBNZS50b1N0YXRpY0hUTUwpe2lmKCJz'@;
put 'dHJpbmciPT10eXBlb2YgUWkpcmV0dXJuIE1lLnRvU3RhdGljSFRNTChRaSk7aWYoQXIoUWkpKXJldHVybiBNZS50b1N0YXRpY0hUTUwoUWkub3V0ZXJIVE1MKX1yZXR1cm4gUWl9aWYoYW98fEV1KFluKSxEZS5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgUWkmJihycz0hMSkscnMpe2lm'@;
put 'KFFpLm5vZGVOYW1lKXt2YXIgJG89JGEoUWkubm9kZU5hbWUpO2lmKCFGblskb118fGdpWyRvXSl0aHJvdyBIKCJyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlIil9fWVsc2UgaWYoUWkgaW5zdGFuY2VvZiBIdCkxPT09KGJpPShfaT1UMigi'@;
put 'XHgzYyEtLS0tXHgzZSIpKS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoUWksITApKS5ub2RlVHlwZSYmIkJPRFkiPT09Ymkubm9kZU5hbWV8fCJIVE1MIj09PWJpLm5vZGVOYW1lP19pPWJpOl9pLmFwcGVuZENoaWxkKGJpKTtlbHNle2lmKCFpbyYmIXFpJiYhSmkmJi0xPT09UWkuaW5kZXhP'@;
put 'ZigiPCIpKXJldHVybiBYdCYmaG8/WHQuY3JlYXRlSFRNTChRaSk6UWk7aWYoIShfaT1UMihRaSkpKXJldHVybiBpbz9udWxsOmhvP190OiIifV9pJiZybyYmYm8oX2kuZmlyc3RDaGlsZCk7Zm9yKHZhciBWMD1EMihycz9RaTpfaSk7b3M9VjAubmV4dE5vZGUoKTspMz09PW9zLm5vZGVUeXBl'@;
put 'JiZvcz09PUZhfHxrbyhvcyl8fChvcy5jb250ZW50IGluc3RhbmNlb2YgdXQmJk5oKG9zLmNvbnRlbnQpLEkyKG9zKSxGYT1vcyk7aWYoRmE9bnVsbCxycylyZXR1cm4gUWk7aWYoaW8pe2lmKEdpKWZvcihIYT1JdC5jYWxsKF9pLm93bmVyRG9jdW1lbnQpO19pLmZpcnN0Q2hpbGQ7KUhhLmFw'@;
put 'cGVuZENoaWxkKF9pLmZpcnN0Q2hpbGQpO2Vsc2UgSGE9X2k7cmV0dXJuKGxuLnNoYWRvd3Jvb3R8fGxuLnNoYWRvd3Jvb3Rtb2QpJiYoSGE9RHQuY2FsbCh6ZSxIYSwhMCkpLEhhfXZhciBEYT1KaT9faS5vdXRlckhUTUw6X2kuaW5uZXJIVE1MO3JldHVybiBKaSYmRm5bIiFkb2N0eXBlIl0m'@;
put 'Jl9pLm93bmVyRG9jdW1lbnQmJl9pLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmX2kub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJkQoVGUsX2kub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpJiYoRGE9IjwhRE9DVFlQRSAiK19pLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKyI+XG4i'@;
put 'K0RhKSxxaSYmKERhPWNlKERhLEluLCIgIiksRGE9Y2UoRGEsenQsIiAiKSxEYT1jZShEYSx5biwiICIpKSxYdCYmaG8/WHQuY3JlYXRlSFRNTChEYSk6RGF9LERlLnNldENvbmZpZz1mdW5jdGlvbihRaSl7RXUoUWkpLGFvPSEwfSxEZS5jbGVhckNvbmZpZz1mdW5jdGlvbigpe3QwPW51bGws'@;
put 'YW89ITF9LERlLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oUWksWW4sX2kpe3QwfHxFdSh7fSk7dmFyIGJpPSRhKFFpKSxvcz0kYShZbik7cmV0dXJuIENzKGJpLG9zLF9pKX0sRGUuYWRkSG9vaz1mdW5jdGlvbihRaSxZbil7ImZ1bmN0aW9uIj09dHlwZW9mIFluJiYoWXRbUWldPVl0W1Fp'@;
put 'XXx8W10sb2UoWXRbUWldLFluKSl9LERlLnJlbW92ZUhvb2s9ZnVuY3Rpb24oUWkpe2lmKFl0W1FpXSlyZXR1cm4gdGUoWXRbUWldKX0sRGUucmVtb3ZlSG9va3M9ZnVuY3Rpb24oUWkpe1l0W1FpXSYmKFl0W1FpXT1bXSl9LERlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7WXQ9e319LERl'@;
put 'fSgpfSgpfSw4ODY1MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUllO2FlLnZlcnNpb249RigxODU5NykuaTgsYWUudXRpbHM9Rig0Njc2NyksYWUucmFuZD1GKDYwMDgyKSxhZS5jdXJ2ZT1GKDkxMzIpLGFlLmN1cnZlcz1GKDgwNDkpLGFlLmVjPUYoNjQ0MyksYWUuZWRkc2E9'@;
put 'Rig5OTU3Nyl9LDcxMzI0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDQ2NzY3KSxtPXguZ2V0TkFGLGxlPXguZ2V0SlNGLE09eC5hc3NlcnQ7ZnVuY3Rpb24gTyh6LEspe3RoaXMudHlwZT16LHRoaXMucD1uZXcgYWUoSy5wLDE2KSx0aGlzLnJlZD1LLnBy'@;
put 'aW1lP2FlLnJlZChLLnByaW1lKTphZS5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBhZSgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IGFlKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgYWUoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1LLm4mJm5ldyBhZShLLm4s'@;
put 'MTYpLHRoaXMuZz1LLmcmJnRoaXMucG9pbnRGcm9tSlNPTihLLmcsSy5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0'@;
put 'aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIEk9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IUl8fEkuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gUih6'@;
put 'LEspe3RoaXMuY3VydmU9eix0aGlzLnR5cGU9Syx0aGlzLnByZWNvbXB1dGVkPW51bGx9YXQuZXhwb3J0cz1PLE8ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sTy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJv'@;
put 'dyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxPLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oSyxJKXtNKEsucHJlY29tcHV0ZWQpO3ZhciBrPUsuX2dldERvdWJsZXMoKSxFPW0oSSwxLHRoaXMuX2JpdExlbmd0aCksaj0oMTw8ay5zdGVwKzEpLShrLnN0ZXAlMj09MD8y'@;
put 'OjEpO2ovPTM7dmFyIEIsWSxWPVtdO2ZvcihCPTA7QjxFLmxlbmd0aDtCKz1rLnN0ZXApe1k9MDtmb3IodmFyIFg9QitrLnN0ZXAtMTtYPj1CO1gtLSlZPShZPDwxKStFW1hdO1YucHVzaChZKX1mb3IodmFyIFU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHE9dGhpcy5qcG9pbnQobnVs'@;
put 'bCxudWxsLG51bGwpLGVlPWo7ZWU+MDtlZS0tKXtmb3IoQj0wO0I8Vi5sZW5ndGg7QisrKShZPVZbQl0pPT09ZWU/cT1xLm1peGVkQWRkKGsucG9pbnRzW0JdKTpZPT09LWVlJiYocT1xLm1peGVkQWRkKGsucG9pbnRzW0JdLm5lZygpKSk7VT1VLmFkZChxKX1yZXR1cm4gVS50b1AoKX0sTy5w'@;
put 'cm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oSyxJKXtmb3IodmFyIGs9NCxFPUsuX2dldE5BRlBvaW50cyhrKSxqPUUucG9pbnRzLFY9bShJLGs9RS53bmQsdGhpcy5fYml0TGVuZ3RoKSxCPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxZPVYubGVuZ3RoLTE7WT49MDtZLS0pe2Zvcih2'@;
put 'YXIgWD0wO1k+PTAmJjA9PT1WW1ldO1ktLSlYKys7aWYoWT49MCYmWCsrLEI9Qi5kYmxwKFgpLFk8MClicmVhazt2YXIgVT1WW1ldO00oMCE9PVUpLEI9ImFmZmluZSI9PT1LLnR5cGU/Qi5taXhlZEFkZChVPjA/altVLTE+PjFdOmpbLVUtMT4+MV0ubmVnKCkpOkIuYWRkKFU+MD9qW1UtMT4+'@;
put 'MV06alstVS0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT1LLnR5cGU/Qi50b1AoKTpCfSxPLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihLLEksayxFLGope3ZhciBVLHEsZWUsVj10aGlzLl93bmFmVDEsQj10aGlzLl93bmFmVDIsWT10aGlzLl93bmFmVDMsWD0wO2ZvcihV'@;
put 'PTA7VTxFO1UrKyl7dmFyIHRlPShlZT1JW1VdKS5fZ2V0TkFGUG9pbnRzKEspO1ZbVV09dGUud25kLEJbVV09dGUucG9pbnRzfWZvcihVPUUtMTtVPj0xO1UtPTIpe3ZhciBvZT1VLTEsc2U9VTtpZigxPT09VltvZV0mJjE9PT1WW3NlXSl7dmFyIGhlPVtJW29lXSxudWxsLG51bGwsSVtzZV1d'@;
put 'OzA9PT1JW29lXS55LmNtcChJW3NlXS55KT8oaGVbMV09SVtvZV0uYWRkKElbc2VdKSxoZVsyXT1JW29lXS50b0ooKS5taXhlZEFkZChJW3NlXS5uZWcoKSkpOjA9PT1JW29lXS55LmNtcChJW3NlXS55LnJlZE5lZygpKT8oaGVbMV09SVtvZV0udG9KKCkubWl4ZWRBZGQoSVtzZV0pLGhlWzJd'@;
put 'PUlbb2VdLmFkZChJW3NlXS5uZWcoKSkpOihoZVsxXT1JW29lXS50b0ooKS5taXhlZEFkZChJW3NlXSksaGVbMl09SVtvZV0udG9KKCkubWl4ZWRBZGQoSVtzZV0ubmVnKCkpKTt2YXIgdWU9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10sY2U9bGUoa1tvZV0sa1tzZV0pO2ZvcihYPU1hdGgubWF4'@;
put 'KGNlWzBdLmxlbmd0aCxYKSxZW29lXT1uZXcgQXJyYXkoWCksWVtzZV09bmV3IEFycmF5KFgpLHE9MDtxPFg7cSsrKVlbb2VdW3FdPXVlWzMqKDErKDB8Y2VbMF1bcV0pKSsoMSsoMHxjZVsxXVtxXSkpXSxZW3NlXVtxXT0wLEJbb2VdPWhlfWVsc2UgWVtvZV09bShrW29lXSxWW29lXSx0aGlz'@;
put 'Ll9iaXRMZW5ndGgpLFlbc2VdPW0oa1tzZV0sVltzZV0sdGhpcy5fYml0TGVuZ3RoKSxYPU1hdGgubWF4KFlbb2VdLmxlbmd0aCxYKSxYPU1hdGgubWF4KFlbc2VdLmxlbmd0aCxYKX12YXIgRD10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksSD10aGlzLl93bmFmVDQ7Zm9yKFU9WDtVPj0w'@;
put 'O1UtLSl7Zm9yKHZhciBOPTA7VT49MDspe3ZhciBnPSEwO2ZvcihxPTA7cTxFO3ErKylIW3FdPTB8WVtxXVtVXSwwIT09SFtxXSYmKGc9ITEpO2lmKCFnKWJyZWFrO04rKyxVLS19aWYoVT49MCYmTisrLEQ9RC5kYmxwKE4pLFU8MClicmVhaztmb3IocT0wO3E8RTtxKyspe3ZhciBDPUhbcV07'@;
put 'MCE9PUMmJihDPjA/ZWU9QltxXVtDLTE+PjFdOkM8MCYmKGVlPUJbcV1bLUMtMT4+MV0ubmVnKCkpLEQ9ImFmZmluZSI9PT1lZS50eXBlP0QubWl4ZWRBZGQoZWUpOkQuYWRkKGVlKSl9fWZvcihVPTA7VTxFO1UrKylCW1VdPW51bGw7cmV0dXJuIGo/RDpELnRvUCgpfSxPLkJhc2VQb2ludD1S'@;
put 'LFIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sTy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oSyxJ'@;
put 'KXtLPXgudG9BcnJheShLLEkpO3ZhciBrPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1LWzBdfHw2PT09S1swXXx8Nz09PUtbMF0pJiZLLmxlbmd0aC0xPT0yKmspcmV0dXJuIDY9PT1LWzBdP00oS1tLLmxlbmd0aC0xXSUyPT0wKTo3PT09S1swXSYmTShLW0subGVuZ3RoLTFdJTI9PTEp'@;
put 'LHRoaXMucG9pbnQoSy5zbGljZSgxLDErayksSy5zbGljZSgxK2ssMSsyKmspKTtpZigoMj09PUtbMF18fDM9PT1LWzBdKSYmSy5sZW5ndGgtMT09PWspcmV0dXJuIHRoaXMucG9pbnRGcm9tWChLLnNsaWNlKDEsMStrKSwzPT09S1swXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50'@;
put 'IGZvcm1hdCIpfSxSLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmVuY29kZShLLCEwKX0sUi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihLKXt2YXIgST10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLGs9dGhpcy5nZXRYKCkudG9BcnJheSgi'@;
put 'YmUiLEkpO3JldHVybiBLP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChrKTpbNF0uY29uY2F0KGssdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLEkpKX0sUi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEssSSl7cmV0dXJuIHguZW5jb2RlKHRoaXMuX2VuY29kZShJKSxLKX0s'@;
put 'Ui5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihLKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBJPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gSS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLEkuZG91Ymxlcz10aGlzLl9nZXREb3Vi'@;
put 'bGVzKDQsSyksSS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPUksdGhpc30sUi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oSyl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIEk9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhSSYm'@;
put 'SS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKEsuYml0TGVuZ3RoKCkrMSkvSS5zdGVwKX0sUi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oSyxJKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91'@;
put 'Ymxlcztmb3IodmFyIGs9W3RoaXNdLEU9dGhpcyxqPTA7ajxJO2orPUspe2Zvcih2YXIgVj0wO1Y8SztWKyspRT1FLmRibCgpO2sucHVzaChFKX1yZXR1cm57c3RlcDpLLHBvaW50czprfX0sUi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihLKXtpZih0aGlzLnByZWNvbXB1dGVk'@;
put 'JiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBJPVt0aGlzXSxrPSgxPDxLKS0xLEU9MT09PWs/bnVsbDp0aGlzLmRibCgpLGo9MTtqPGs7aisrKUlbal09SVtqLTFdLmFkZChFKTtyZXR1cm57d25kOksscG9pbnRzOkl9fSxSLnByb3Rv'@;
put 'dHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxSLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEspe2Zvcih2YXIgST10aGlzLGs9MDtrPEs7aysrKUk9SS5kYmwoKTtyZXR1cm4gSX19LDI3NjY1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0Njc2NykseD1G'@;
put 'KDMxMzg3KSxtPUYoNjY2OTgpLGxlPUYoNzEzMjQpLE09YWUuYXNzZXJ0O2Z1bmN0aW9uIE8oeil7dGhpcy50d2lzdGVkPTEhPSgwfHouYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHx6LmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxsZS5jYWxsKHRoaXMsImVkd2FyZHMi'@;
put 'LHopLHRoaXMuYT1uZXcgeCh6LmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyB4KHouYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgeCh6LmQsMTYpLnRvUmVkKHRoaXMu'@;
put 'cmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxNKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHx6LmMpfWZ1bmN0aW9uIFIoeixLLEksayxFKXtsZS5CYXNlUG9pbnQuY2FsbCh0aGlzLHosInByb2plY3RpdmUiKSxu'@;
put 'dWxsPT09SyYmbnVsbD09PUkmJm51bGw9PT1rPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IHgoSywxNiksdGhpcy55PW5ldyB4'@;
put 'KEksMTYpLHRoaXMuej1rP25ldyB4KGssMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1FJiZuZXcgeChFLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSks'@;
put 'dGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYh'@;
put 'dGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1tKE8sbGUpLGF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5tT25lQT9LLnJl'@;
put 'ZE5lZygpOnRoaXMuYS5yZWRNdWwoSyl9LE8ucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLm9uZUM/Szp0aGlzLmMucmVkTXVsKEspfSxPLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oSyxJLGssRSl7cmV0dXJuIHRoaXMucG9pbnQoSyxJLGssRSl9LE8ucHJvdG90'@;
put 'eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oSyxJKXsoSz1uZXcgeChLLDE2KSkucmVkfHwoSz1LLnRvUmVkKHRoaXMucmVkKSk7dmFyIGs9Sy5yZWRTcXIoKSxFPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoaykpLGo9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCku'@;
put 'cmVkTXVsKGspKSxWPUUucmVkTXVsKGoucmVkSW52bSgpKSxCPVYucmVkU3FydCgpO2lmKDAhPT1CLnJlZFNxcigpLnJlZFN1YihWKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgWT1CLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihJJiYhWXx8'@;
put 'IUkmJlkpJiYoQj1CLnJlZE5lZygpKSx0aGlzLnBvaW50KEssQil9LE8ucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oSyxJKXsoSz1uZXcgeChLLDE2KSkucmVkfHwoSz1LLnRvUmVkKHRoaXMucmVkKSk7dmFyIGs9Sy5yZWRTcXIoKSxFPWsucmVkU3ViKHRoaXMuYzIpLGo9ay5yZWRN'@;
put 'dWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVj1FLnJlZE11bChqLnJlZEludm0oKSk7aWYoMD09PVYuY21wKHRoaXMuemVybykpe2lmKEkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLEspfXZhciBC'@;
put 'PVYucmVkU3FydCgpO2lmKDAhPT1CLnJlZFNxcigpLnJlZFN1YihWKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gQi5mcm9tUmVkKCkuaXNPZGQoKSE9PUkmJihCPUIucmVkTmVnKCkpLHRoaXMucG9pbnQoQixLKX0sTy5wcm90b3R5cGUu'@;
put 'dmFsaWRhdGU9ZnVuY3Rpb24oSyl7aWYoSy5pc0luZmluaXR5KCkpcmV0dXJuITA7Sy5ub3JtYWxpemUoKTt2YXIgST1LLngucmVkU3FyKCksaz1LLnkucmVkU3FyKCksRT1JLnJlZE11bCh0aGlzLmEpLnJlZEFkZChrKSxqPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQu'@;
put 'cmVkTXVsKEkpLnJlZE11bChrKSkpO3JldHVybiAwPT09RS5jbXAoail9LG0oUixsZS5CYXNlUG9pbnQpLE8ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oSyl7cmV0dXJuIFIuZnJvbUpTT04odGhpcyxLKX0sTy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oSyxJLGssRSl7cmV0'@;
put 'dXJuIG5ldyBSKHRoaXMsSyxJLGssRSl9LFIuZnJvbUpTT049ZnVuY3Rpb24oSyxJKXtyZXR1cm4gbmV3IFIoSyxJWzBdLElbMV0sSVsyXSl9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMg'@;
put 'UG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVy'@;
put 'biAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxSLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy54LnJlZFNxcigpLEk9dGhpcy55LnJlZFNxcigpLGs9dGhp'@;
put 'cy56LnJlZFNxcigpO2s9ay5yZWRJQWRkKGspO3ZhciBFPXRoaXMuY3VydmUuX211bEEoSyksaj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihLKS5yZWRJU3ViKEkpLFY9RS5yZWRBZGQoSSksQj1WLnJlZFN1YihrKSxZPUUucmVkU3ViKEkpLFg9ai5yZWRNdWwoQiks'@;
put 'VT1WLnJlZE11bChZKSxxPWoucmVkTXVsKFkpLGVlPUIucmVkTXVsKFYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFgsVSxlZSxxKX0sUi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgRSxqLFYsQixZLFgsSz10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksST10aGlz'@;
put 'LngucmVkU3FyKCksaz10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgVT0oQj10aGlzLmN1cnZlLl9tdWxBKEkpKS5yZWRBZGQoayk7dGhpcy56T25lPyhFPUsucmVkU3ViKEkpLnJlZFN1YihrKS5yZWRNdWwoVS5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxqPVUu'@;
put 'cmVkTXVsKEIucmVkU3ViKGspKSxWPVUucmVkU3FyKCkucmVkU3ViKFUpLnJlZFN1YihVKSk6KFk9dGhpcy56LnJlZFNxcigpLFg9VS5yZWRTdWIoWSkucmVkSVN1YihZKSxFPUsucmVkU3ViKEkpLnJlZElTdWIoaykucmVkTXVsKFgpLGo9VS5yZWRNdWwoQi5yZWRTdWIoaykpLFY9VS5yZWRN'@;
put 'dWwoWCkpfWVsc2UgQj1JLnJlZEFkZChrKSxZPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxYPUIucmVkU3ViKFkpLnJlZFN1YihZKSxFPXRoaXMuY3VydmUuX211bEMoSy5yZWRJU3ViKEIpKS5yZWRNdWwoWCksaj10aGlzLmN1cnZlLl9tdWxDKEIpLnJlZE11bChJLnJlZElT'@;
put 'dWIoaykpLFY9Qi5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoRSxqLFYpfSxSLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sUi5w'@;
put 'cm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihLKXt2YXIgST10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKEsueS5yZWRTdWIoSy54KSksaz10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKEsueS5yZWRBZGQoSy54KSksRT10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11'@;
put 'bChLLnQpLGo9dGhpcy56LnJlZE11bChLLnoucmVkQWRkKEsueikpLFY9ay5yZWRTdWIoSSksQj1qLnJlZFN1YihFKSxZPWoucmVkQWRkKEUpLFg9ay5yZWRBZGQoSSksVT1WLnJlZE11bChCKSxxPVkucmVkTXVsKFgpLGVlPVYucmVkTXVsKFgpLHRlPUIucmVkTXVsKFkpO3JldHVybiB0aGlz'@;
put 'LmN1cnZlLnBvaW50KFUscSx0ZSxlZSl9LFIucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKEspe3ZhciBxLGVlLEk9dGhpcy56LnJlZE11bChLLnopLGs9SS5yZWRTcXIoKSxFPXRoaXMueC5yZWRNdWwoSy54KSxqPXRoaXMueS5yZWRNdWwoSy55KSxWPXRoaXMuY3VydmUuZC5yZWRNdWwo'@;
put 'RSkucmVkTXVsKGopLEI9ay5yZWRTdWIoViksWT1rLnJlZEFkZChWKSxYPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoSy54LnJlZEFkZChLLnkpKS5yZWRJU3ViKEUpLnJlZElTdWIoaiksVT1JLnJlZE11bChCKS5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8ocT1J'@;
put 'LnJlZE11bChZKS5yZWRNdWwoai5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShFKSkpLGVlPUIucmVkTXVsKFkpKToocT1JLnJlZE11bChZKS5yZWRNdWwoai5yZWRTdWIoRSkpLGVlPXRoaXMuY3VydmUuX211bEMoQikucmVkTXVsKFkpKSx0aGlzLmN1cnZlLnBvaW50KFUscSxlZSl9LFIucHJv'@;
put 'dG90eXBlLmFkZD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/SzpLLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKEspOnRoaXMuX3Byb2pBZGQoSyl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5f'@;
put 'aGFzRG91YmxlcyhLKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLEspOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxLKX0sUi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKEssSSxrKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEldLFtLLGtdLDIsITEpfSxS'@;
put 'LnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKEssSSxrKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEldLFtLLGtdLDIsITApfSxSLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIEs9dGhpcy56LnJlZElu'@;
put 'dm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoSyksdGhpcy55PXRoaXMueS5yZWRNdWwoSyksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoSykpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sUi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxSLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sUi5wcm90b3R5cGUuZ2V0WT1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LFIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzPT09S3x8MD09PXRoaXMuZ2V0WCgpLmNtcChLLmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoSy5nZXRZKCkpfSxSLnByb3Rv'@;
put 'dHlwZS5lcVhUb1A9ZnVuY3Rpb24oSyl7dmFyIEk9Sy50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoSSkpcmV0dXJuITA7Zm9yKHZhciBrPUsuY2xvbmUoKSxFPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihrLmlhZGQo'@;
put 'dGhpcy5jdXJ2ZS5uKSxrLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEkucmVkSUFkZChFKSwwPT09dGhpcy54LmNtcChJKSlyZXR1cm4hMH19LFIucHJvdG90eXBlLnRvUD1SLnByb3RvdHlwZS5ub3JtYWxpemUsUi5wcm90b3R5cGUubWl4ZWRBZGQ9Ui5wcm90b3R5cGUuYWRk'@;
put 'fSw5MTMyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9SWU7YWUuYmFzZT1GKDcxMzI0KSxhZS5zaG9ydD1GKDg5OTk2KSxhZS5tb250PUYoMjkyNTMpLGFlLmVkd2FyZHM9RigyNzY2NSl9LDI5MjUzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1G'@;
put 'KDY2Njk4KSxtPUYoNzEzMjQpLGxlPUYoNDY3NjcpO2Z1bmN0aW9uIE0oUil7bS5jYWxsKHRoaXMsIm1vbnQiLFIpLHRoaXMuYT1uZXcgYWUoUi5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBhZShSLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBhZSg0KS50b1Jl'@;
put 'ZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBhZSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIE8oUix6LEspe20uQmFzZVBvaW50LmNhbGwodGhpcyxSLCJwcm9qZWN0aXZlIiksbnVs'@;
put 'bD09PXomJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgYWUoeiwxNiksdGhpcy56PW5ldyBhZShLLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8'@;
put 'fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXgoTSxtKSxhdC5leHBvcnRzPU0sTS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7dmFyIEs9ei5ub3JtYWxpemUoKS54LEk9Sy5yZWRTcXIoKSxrPUkucmVkTXVsKEspLnJlZEFkZChJLnJlZE11bCh0aGlzLmEp'@;
put 'KS5yZWRBZGQoSyk7cmV0dXJuIDA9PT1rLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoayl9LHgoTyxtLkJhc2VQb2ludCksTS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oeixLKXtyZXR1cm4gdGhpcy5wb2ludChsZS50b0FycmF5KHosSyksMSl9LE0ucHJvdG90eXBlLnBvaW50PWZ1'@;
put 'bmN0aW9uKHosSyl7cmV0dXJuIG5ldyBPKHRoaXMseixLKX0sTS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4gTy5mcm9tSlNPTih0aGlzLHopfSxPLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxPLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sTy5mcm9tSlNPTj1mdW5jdGlvbih6LEspe3JldHVybiBuZXcgTyh6LEtbMF0sS1sxXXx8ei5vbmUpfSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'aXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LE8ucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gMD09PXRoaXMuei5jbXBuKDApfSxPLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgSz10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksaz10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCksRT1LLnJlZFN1YihrKSxqPUsucmVkTXVsKGspLFY9RS5yZWRNdWwoay5yZWRB'@;
put 'ZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEUpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoaixWKX0sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sTy5wcm90b3R5cGUuZGlmZkFkZD1mdW5j'@;
put 'dGlvbih6LEspe3ZhciBJPXRoaXMueC5yZWRBZGQodGhpcy56KSxrPXRoaXMueC5yZWRTdWIodGhpcy56KSxFPXoueC5yZWRBZGQoei56KSxWPXoueC5yZWRTdWIoei56KS5yZWRNdWwoSSksQj1FLnJlZE11bChrKSxZPUsuei5yZWRNdWwoVi5yZWRBZGQoQikucmVkU3FyKCkpLFg9Sy54LnJl'@;
put 'ZE11bChWLnJlZElTdWIoQikucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFksWCl9LE8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtmb3IodmFyIEs9ei5jbG9uZSgpLEk9dGhpcyxrPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxqPVtdOzAhPT1LLmNtcG4oMCk7Sy5p'@;
put 'dXNocm4oMSkpai5wdXNoKEsuYW5kbG4oMSkpO2Zvcih2YXIgVj1qLmxlbmd0aC0xO1Y+PTA7Vi0tKTA9PT1qW1ZdPyhJPUkuZGlmZkFkZChrLHRoaXMpLGs9ay5kYmwoKSk6KGs9SS5kaWZmQWRkKGssdGhpcyksST1JLmRibCgpKTtyZXR1cm4ga30sTy5wcm90b3R5cGUubXVsQWRkPWZ1bmN0'@;
put 'aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sTy5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LE8ucHJvdG90eXBlLmVxPWZ1bmN0'@;
put 'aW9uKHope3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKHouZ2V0WCgpKX0sTy5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxPLnByb3RvdHlwZS5n'@;
put 'ZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDg5OTk2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0Njc2NykseD1GKDMxMzg3KSxtPUYoNjY2OTgpLGxlPUYoNzEzMjQpLE09YWUuYXNzZXJ0O2Z1bmN0aW9uIE8oSyl7'@;
put 'bGUuY2FsbCh0aGlzLCJzaG9ydCIsSyksdGhpcy5hPW5ldyB4KEsuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgeChLLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigw'@;
put 'KSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKEspLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIFIoSyxJ'@;
put 'LGssRSl7bGUuQmFzZVBvaW50LmNhbGwodGhpcyxLLCJhZmZpbmUiKSxudWxsPT09SSYmbnVsbD09PWs/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyB4KEksMTYpLHRoaXMueT1uZXcgeChrLDE2KSxFJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3Vy'@;
put 'dmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIHoo'@;
put 'SyxJLGssRSl7bGUuQmFzZVBvaW50LmNhbGwodGhpcyxLLCJqYWNvYmlhbiIpLG51bGw9PT1JJiZudWxsPT09ayYmbnVsbD09PUU/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyB4KDApKToodGhpcy54PW5ldyB4KEksMTYpLHRoaXMueT1u'@;
put 'ZXcgeChrLDE2KSx0aGlzLno9bmV3IHgoRSwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0'@;
put 'aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1tKE8sbGUpLGF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKEkpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3Zh'@;
put 'ciBrLEU7aWYoSS5iZXRhKWs9bmV3IHgoSS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgaj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtrPShrPWpbMF0uY21wKGpbMV0pPDA/alswXTpqWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoSS5sYW1iZGEpRT1uZXcgeChJLmxhbWJk'@;
put 'YSwxNik7ZWxzZXt2YXIgVj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChWWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoaykpP0U9VlswXTpNKDA9PT10aGlzLmcubXVsKEU9VlsxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGspKSl9cmV0dXJue2JldGE6ayxs'@;
put 'YW1iZGE6RSxiYXNpczpJLmJhc2lzP0kuYmFzaXMubWFwKGZ1bmN0aW9uKFkpe3JldHVybnthOm5ldyB4KFkuYSwxNiksYjpuZXcgeChZLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhFKX19fSxPLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKEkpe3ZhciBrPUk9PT10aGlz'@;
put 'LnA/dGhpcy5yZWQ6eC5tb250KEkpLEU9bmV3IHgoMikudG9SZWQoaykucmVkSW52bSgpLGo9RS5yZWROZWcoKSxWPW5ldyB4KDMpLnRvUmVkKGspLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoRSk7cmV0dXJuW2oucmVkQWRkKFYpLmZyb21SZWQoKSxqLnJlZFN1YihWKS5mcm9tUmVkKCld'@;
put 'fSxPLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKEkpe2Zvcih2YXIgVSxxLGVlLHRlLG9lLHNlLGhlLGNlLEcsaz10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEU9SSxqPXRoaXMubi5jbG9uZSgpLFY9bmV3IHgoMSksQj1uZXcgeCgwKSxZ'@;
put 'PW5ldyB4KDApLFg9bmV3IHgoMSksdWU9MDswIT09RS5jbXBuKDApOyl7dmFyIGI9ai5kaXYoRSk7Y2U9ai5zdWIoYi5tdWwoRSkpLEc9WS5zdWIoYi5tdWwoVikpO3ZhciBEPVguc3ViKGIubXVsKEIpKTtpZighZWUmJmNlLmNtcChrKTwwKVU9aGUubmVnKCkscT1WLGVlPWNlLm5lZygpLHRl'@;
put 'PUc7ZWxzZSBpZihlZSYmMj09Kyt1ZSlicmVhaztoZT1jZSxqPUUsRT1jZSxZPVYsVj1HLFg9QixCPUR9b2U9Y2UubmVnKCksc2U9Rzt2YXIgSD1lZS5zcXIoKS5hZGQodGUuc3FyKCkpO3JldHVybiBvZS5zcXIoKS5hZGQoc2Uuc3FyKCkpLmNtcChIKT49MCYmKG9lPVUsc2U9cSksZWUubmVn'@;
put 'YXRpdmUmJihlZT1lZS5uZWcoKSx0ZT10ZS5uZWcoKSksb2UubmVnYXRpdmUmJihvZT1vZS5uZWcoKSxzZT1zZS5uZWcoKSksW3thOmVlLGI6dGV9LHthOm9lLGI6c2V9XX0sTy5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihJKXt2YXIgaz10aGlzLmVuZG8uYmFzaXMsRT1rWzBdLGo9'@;
put 'a1sxXSxWPWouYi5tdWwoSSkuZGl2Um91bmQodGhpcy5uKSxCPUUuYi5uZWcoKS5tdWwoSSkuZGl2Um91bmQodGhpcy5uKSxZPVYubXVsKEUuYSksWD1CLm11bChqLmEpLFU9Vi5tdWwoRS5iKSxxPUIubXVsKGouYik7cmV0dXJue2sxOkkuc3ViKFkpLnN1YihYKSxrMjpVLmFkZChxKS5uZWco'@;
put 'KX19LE8ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oSSxrKXsoST1uZXcgeChJLDE2KSkucmVkfHwoST1JLnRvUmVkKHRoaXMucmVkKSk7dmFyIEU9SS5yZWRTcXIoKS5yZWRNdWwoSSkucmVkSUFkZChJLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksaj1FLnJlZFNxcnQo'@;
put 'KTtpZigwIT09ai5yZWRTcXIoKS5yZWRTdWIoRSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFY9ai5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oayYmIVZ8fCFrJiZWKSYmKGo9ai5yZWROZWcoKSksdGhpcy5wb2ludChJLGopfSxPLnByb3Rv'@;
put 'dHlwZS52YWxpZGF0ZT1mdW5jdGlvbihJKXtpZihJLmluZilyZXR1cm4hMDt2YXIgaz1JLngsRT1JLnksaj10aGlzLmEucmVkTXVsKGspLFY9ay5yZWRTcXIoKS5yZWRNdWwoaykucmVkSUFkZChqKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1FLnJlZFNxcigpLnJlZElTdWIoVikuY21w'@;
put 'bigwKX0sTy5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9dGhpcy5fZW5kb1duYWZUMSxWPXRoaXMuX2VuZG9XbmFmVDIsQj0wO0I8SS5sZW5ndGg7QisrKXt2YXIgWT10aGlzLl9lbmRvU3BsaXQoa1tCXSksWD1JW0JdLFU9WC5fZ2V0QmV0YSgp'@;
put 'O1kuazEubmVnYXRpdmUmJihZLmsxLmluZWcoKSxYPVgubmVnKCEwKSksWS5rMi5uZWdhdGl2ZSYmKFkuazIuaW5lZygpLFU9VS5uZWcoITApKSxqWzIqQl09WCxqWzIqQisxXT1VLFZbMipCXT1ZLmsxLFZbMipCKzFdPVkuazJ9Zm9yKHZhciBxPXRoaXMuX3duYWZNdWxBZGQoMSxqLFYsMipC'@;
put 'LEUpLGVlPTA7ZWU8MipCO2VlKyspaltlZV09bnVsbCxWW2VlXT1udWxsO3JldHVybiBxfSxtKFIsbGUuQmFzZVBvaW50KSxPLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihJLGssRSl7cmV0dXJuIG5ldyBSKHRoaXMsSSxrLEUpfSxPLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9u'@;
put 'KEksayl7cmV0dXJuIFIuZnJvbUpTT04odGhpcyxJLGspfSxSLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIEk9dGhpcy5wcmVjb21wdXRlZDtpZihJJiZJLmJldGEpcmV0dXJuIEkuYmV0YTt2YXIgaz10aGlzLmN1cnZlLnBvaW50KHRoaXMu'@;
put 'eC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoSSl7dmFyIEU9dGhpcy5jdXJ2ZSxqPWZ1bmN0aW9uKFYpe3JldHVybiBFLnBvaW50KFYueC5yZWRNdWwoRS5lbmRvLmJldGEpLFYueSl9O0kuYmV0YT1rLGsucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6SS5uYWYm'@;
put 'Jnt3bmQ6SS5uYWYud25kLHBvaW50czpJLm5hZi5wb2ludHMubWFwKGopfSxkb3VibGVzOkkuZG91YmxlcyYme3N0ZXA6SS5kb3VibGVzLnN0ZXAscG9pbnRzOkkuZG91Ymxlcy5wb2ludHMubWFwKGopfX19cmV0dXJuIGt9fSxSLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNl'@;
put 'KDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxSLmZyb21KU09OPWZ1bmN0aW9uKEksayxFKXsic3RyaW5nIj09dHlw'@;
put 'ZW9mIGsmJihrPUpTT04ucGFyc2UoaykpO3ZhciBqPUkucG9pbnQoa1swXSxrWzFdLEUpO2lmKCFrWzJdKXJldHVybiBqO2Z1bmN0aW9uIFYoWSl7cmV0dXJuIEkucG9pbnQoWVswXSxZWzFdLEUpfXZhciBCPWtbMl07cmV0dXJuIGoucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOkIu'@;
put 'ZG91YmxlcyYme3N0ZXA6Qi5kb3VibGVzLnN0ZXAscG9pbnRzOltqXS5jb25jYXQoQi5kb3VibGVzLnBvaW50cy5tYXAoVikpfSxuYWY6Qi5uYWYmJnt3bmQ6Qi5uYWYud25kLHBvaW50czpbal0uY29uY2F0KEIubmFmLnBvaW50cy5tYXAoVikpfX0san0sUi5wcm90b3R5cGUuaW5zcGVjdD1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxSLnByb3RvdHlwZS5pc0lu'@;
put 'ZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxSLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oSSl7aWYodGhpcy5pbmYpcmV0dXJuIEk7aWYoSS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShJKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKEkpKXJldHVybiB0'@;
put 'aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoSS54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBrPXRoaXMueS5yZWRTdWIoSS55KTswIT09ay5jbXBuKDApJiYoaz1rLnJlZE11bCh0aGlzLngucmVkU3ViKEkueCkucmVkSW52bSgp'@;
put 'KSk7dmFyIEU9ay5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihJLngpLGo9ay5yZWRNdWwodGhpcy54LnJlZFN1YihFKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEUsail9LFIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJl'@;
put 'dHVybiB0aGlzO3ZhciBJPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09SS5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGs9dGhpcy5jdXJ2ZS5hLEU9dGhpcy54LnJlZFNxcigpLGo9SS5yZWRJbnZtKCksVj1FLnJlZEFkZChFKS5yZWRJQWRkKEUp'@;
put 'LnJlZElBZGQoaykucmVkTXVsKGopLEI9Vi5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksWT1WLnJlZE11bCh0aGlzLngucmVkU3ViKEIpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoQixZKX0sUi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxSLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihJKXtyZXR1cm4gST1uZXcgeChJLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0Rv'@;
put 'dWJsZXMoSSk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxJKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtJXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEkpfSxSLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oSSxrLEUpe3ZhciBq'@;
put 'PVt0aGlzLGtdLFY9W0ksRV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChqLFYpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxqLFYsMil9LFIucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oSSxrLEUpe3ZhciBqPVt0aGlzLGtdLFY9W0ksRV07'@;
put 'cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChqLFYsITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxqLFYsMiwhMCl9LFIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzPT09SXx8dGhpcy5pbmY9PT1JLmluZiYmKHRoaXMuaW5m'@;
put 'fHwwPT09dGhpcy54LmNtcChJLngpJiYwPT09dGhpcy55LmNtcChJLnkpKX0sUi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEkpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBrPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoSSYmdGhpcy5wcmVjb21wdXRl'@;
put 'ZCl7dmFyIEU9dGhpcy5wcmVjb21wdXRlZCxqPWZ1bmN0aW9uKFYpe3JldHVybiBWLm5lZygpfTtrLnByZWNvbXB1dGVkPXtuYWY6RS5uYWYmJnt3bmQ6RS5uYWYud25kLHBvaW50czpFLm5hZi5wb2ludHMubWFwKGopfSxkb3VibGVzOkUuZG91YmxlcyYme3N0ZXA6RS5kb3VibGVzLnN0ZXAs'@;
put 'cG9pbnRzOkUuZG91Ymxlcy5wb2ludHMubWFwKGopfX19cmV0dXJuIGt9LFIucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9u'@;
put 'ZSl9LG0oeixsZS5CYXNlUG9pbnQpLE8ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihJLGssRSl7cmV0dXJuIG5ldyB6KHRoaXMsSSxrLEUpfSx6LnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwp'@;
put 'O3ZhciBJPXRoaXMuei5yZWRJbnZtKCksaz1JLnJlZFNxcigpLEU9dGhpcy54LnJlZE11bChrKSxqPXRoaXMueS5yZWRNdWwoaykucmVkTXVsKEkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEUsail9LHoucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2lu'@;
put 'dCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LHoucHJvdG90eXBlLmFkZD1mdW5jdGlvbihJKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gSTtpZihJLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgaz1JLnoucmVkU3FyKCksRT10aGlzLnoucmVkU3FyKCksaj10aGlz'@;
put 'LngucmVkTXVsKGspLFY9SS54LnJlZE11bChFKSxCPXRoaXMueS5yZWRNdWwoay5yZWRNdWwoSS56KSksWT1JLnkucmVkTXVsKEUucmVkTXVsKHRoaXMueikpLFg9ai5yZWRTdWIoViksVT1CLnJlZFN1YihZKTtpZigwPT09WC5jbXBuKDApKXJldHVybiAwIT09VS5jbXBuKDApP3RoaXMuY3Vy'@;
put 'dmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBxPVgucmVkU3FyKCksZWU9cS5yZWRNdWwoWCksdGU9ai5yZWRNdWwocSksb2U9VS5yZWRTcXIoKS5yZWRJQWRkKGVlKS5yZWRJU3ViKHRlKS5yZWRJU3ViKHRlKSxzZT1VLnJlZE11bCh0ZS5yZWRJU3ViKG9lKSkucmVk'@;
put 'SVN1YihCLnJlZE11bChlZSkpLGhlPXRoaXMuei5yZWRNdWwoSS56KS5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG9lLHNlLGhlKX0sei5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oSSl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIEkudG9KKCk7aWYoSS5pc0lu'@;
put 'ZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGs9dGhpcy56LnJlZFNxcigpLEU9dGhpcy54LGo9SS54LnJlZE11bChrKSxWPXRoaXMueSxCPUkueS5yZWRNdWwoaykucmVkTXVsKHRoaXMueiksWT1FLnJlZFN1YihqKSxYPVYucmVkU3ViKEIpO2lmKDA9PT1ZLmNtcG4oMCkpcmV0dXJuIDAhPT1Y'@;
put 'LmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIFU9WS5yZWRTcXIoKSxxPVUucmVkTXVsKFkpLGVlPUUucmVkTXVsKFUpLHRlPVgucmVkU3FyKCkucmVkSUFkZChxKS5yZWRJU3ViKGVlKS5yZWRJU3ViKGVlKSxvZT1YLnJlZE11bChlZS5y'@;
put 'ZWRJU3ViKHRlKSkucmVkSVN1YihWLnJlZE11bChxKSksc2U9dGhpcy56LnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGUsb2Usc2UpfSx6LnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEkpe2lmKDA9PT1JKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVy'@;
put 'biB0aGlzO2lmKCFJKXJldHVybiB0aGlzLmRibCgpO3ZhciBrO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgRT10aGlzO2ZvcihrPTA7azxJO2srKylFPUUuZGJsKCk7cmV0dXJuIEV9dmFyIGo9dGhpcy5jdXJ2ZS5hLFY9dGhpcy5jdXJ2ZS50aW52LEI9dGhp'@;
put 'cy54LFk9dGhpcy55LFg9dGhpcy56LFU9WC5yZWRTcXIoKS5yZWRTcXIoKSxxPVkucmVkQWRkKFkpO2ZvcihrPTA7azxJO2srKyl7dmFyIGVlPUIucmVkU3FyKCksdGU9cS5yZWRTcXIoKSxvZT10ZS5yZWRTcXIoKSxzZT1lZS5yZWRBZGQoZWUpLnJlZElBZGQoZWUpLnJlZElBZGQoai5yZWRN'@;
put 'dWwoVSkpLGhlPUIucmVkTXVsKHRlKSx1ZT1zZS5yZWRTcXIoKS5yZWRJU3ViKGhlLnJlZEFkZChoZSkpLGNlPWhlLnJlZElTdWIodWUpLEc9c2UucmVkTXVsKGNlKTtHPUcucmVkSUFkZChHKS5yZWRJU3ViKG9lKTt2YXIgYj1xLnJlZE11bChYKTtrKzE8SSYmKFU9VS5yZWRNdWwob2UpKSxC'@;
put 'PXVlLFg9YixxPUd9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEIscS5yZWRNdWwoViksWCl9LHoucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3Ro'@;
put 'aXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LHoucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIEksayxFO2lmKHRoaXMuek9uZSl7dmFyIGo9dGhpcy54LnJlZFNxcigpLFY9dGhpcy55LnJlZFNxcigpLEI9Vi5yZWRTcXIoKSxZPXRoaXMueC5yZWRBZGQoVikucmVkU3FyKCku'@;
put 'cmVkSVN1YihqKS5yZWRJU3ViKEIpO1k9WS5yZWRJQWRkKFkpO3ZhciBYPWoucmVkQWRkKGopLnJlZElBZGQoaiksVT1YLnJlZFNxcigpLnJlZElTdWIoWSkucmVkSVN1YihZKSxxPUIucmVkSUFkZChCKTtxPShxPXEucmVkSUFkZChxKSkucmVkSUFkZChxKSxJPVUsaz1YLnJlZE11bChZLnJl'@;
put 'ZElTdWIoVSkpLnJlZElTdWIocSksRT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgZWU9dGhpcy54LnJlZFNxcigpLHRlPXRoaXMueS5yZWRTcXIoKSxvZT10ZS5yZWRTcXIoKSxzZT10aGlzLngucmVkQWRkKHRlKS5yZWRTcXIoKS5yZWRJU3ViKGVlKS5yZWRJU3ViKG9lKTtzZT1z'@;
put 'ZS5yZWRJQWRkKHNlKTt2YXIgaGU9ZWUucmVkQWRkKGVlKS5yZWRJQWRkKGVlKSx1ZT1oZS5yZWRTcXIoKSxjZT1vZS5yZWRJQWRkKG9lKTtjZT0oY2U9Y2UucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpLEk9dWUucmVkSVN1YihzZSkucmVkSVN1YihzZSksaz1oZS5yZWRNdWwoc2UucmVkSVN1'@;
put 'YihJKSkucmVkSVN1YihjZSksRT0oRT10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoRSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEksayxFKX0sei5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIEksayxFO2lmKHRoaXMuek9uZSl7dmFyIGo9dGhpcy54LnJlZFNx'@;
put 'cigpLFY9dGhpcy55LnJlZFNxcigpLEI9Vi5yZWRTcXIoKSxZPXRoaXMueC5yZWRBZGQoVikucmVkU3FyKCkucmVkSVN1YihqKS5yZWRJU3ViKEIpO1k9WS5yZWRJQWRkKFkpO3ZhciBYPWoucmVkQWRkKGopLnJlZElBZGQoaikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLFU9WC5yZWRTcXIoKS5y'@;
put 'ZWRJU3ViKFkpLnJlZElTdWIoWSk7ST1VO3ZhciBxPUIucmVkSUFkZChCKTtxPShxPXEucmVkSUFkZChxKSkucmVkSUFkZChxKSxrPVgucmVkTXVsKFkucmVkSVN1YihVKSkucmVkSVN1YihxKSxFPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBlZT10aGlzLnoucmVkU3FyKCksdGU9'@;
put 'dGhpcy55LnJlZFNxcigpLG9lPXRoaXMueC5yZWRNdWwodGUpLHNlPXRoaXMueC5yZWRTdWIoZWUpLnJlZE11bCh0aGlzLngucmVkQWRkKGVlKSk7c2U9c2UucmVkQWRkKHNlKS5yZWRJQWRkKHNlKTt2YXIgaGU9b2UucmVkSUFkZChvZSksdWU9KGhlPWhlLnJlZElBZGQoaGUpKS5yZWRBZGQo'@;
put 'aGUpO0k9c2UucmVkU3FyKCkucmVkSVN1Yih1ZSksRT10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1Yih0ZSkucmVkSVN1YihlZSk7dmFyIGNlPXRlLnJlZFNxcigpO2NlPShjZT0oY2U9Y2UucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSxrPXNlLnJl'@;
put 'ZE11bChoZS5yZWRJU3ViKEkpKS5yZWRJU3ViKGNlKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoSSxrLEUpfSx6LnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5jdXJ2ZS5hLGs9dGhpcy54LEU9dGhpcy55LGo9dGhpcy56LFY9ai5yZWRTcXIoKS5yZWRTcXIoKSxCPWsu'@;
put 'cmVkU3FyKCksWT1FLnJlZFNxcigpLFg9Qi5yZWRBZGQoQikucmVkSUFkZChCKS5yZWRJQWRkKEkucmVkTXVsKFYpKSxVPWsucmVkQWRkKGspLHE9KFU9VS5yZWRJQWRkKFUpKS5yZWRNdWwoWSksZWU9WC5yZWRTcXIoKS5yZWRJU3ViKHEucmVkQWRkKHEpKSx0ZT1xLnJlZElTdWIoZWUpLG9l'@;
put 'PVkucmVkU3FyKCk7b2U9KG9lPShvZT1vZS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSkpLnJlZElBZGQob2UpO3ZhciBzZT1YLnJlZE11bCh0ZSkucmVkSVN1YihvZSksaGU9RS5yZWRBZGQoRSkucmVkTXVsKGopO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChlZSxzZSxoZSl9LHoucHJvdG90'@;
put 'eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIEk9dGhpcy54LnJlZFNxcigpLGs9dGhpcy55LnJlZFNxcigpLEU9dGhpcy56LnJlZFNxcigpLGo9ay5yZWRTcXIoKSxWPUkucmVkQWRkKEkpLnJlZElBZGQoSSks'@;
put 'Qj1WLnJlZFNxcigpLFk9dGhpcy54LnJlZEFkZChrKS5yZWRTcXIoKS5yZWRJU3ViKEkpLnJlZElTdWIoaiksWD0oWT0oWT0oWT1ZLnJlZElBZGQoWSkpLnJlZEFkZChZKS5yZWRJQWRkKFkpKS5yZWRJU3ViKEIpKS5yZWRTcXIoKSxVPWoucmVkSUFkZChqKTtVPShVPShVPVUucmVkSUFkZChV'@;
put 'KSkucmVkSUFkZChVKSkucmVkSUFkZChVKTt2YXIgcT1WLnJlZElBZGQoWSkucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFgpLnJlZElTdWIoVSksZWU9ay5yZWRNdWwocSk7ZWU9KGVlPWVlLnJlZElBZGQoZWUpKS5yZWRJQWRkKGVlKTt2YXIgdGU9dGhpcy54LnJlZE11bChYKS5yZWRJ'@;
put 'U3ViKGVlKTt0ZT0odGU9dGUucmVkSUFkZCh0ZSkpLnJlZElBZGQodGUpO3ZhciBvZT10aGlzLnkucmVkTXVsKHEucmVkTXVsKFUucmVkSVN1YihxKSkucmVkSVN1YihZLnJlZE11bChYKSkpO29lPShvZT0ob2U9b2UucmVkSUFkZChvZSkpLnJlZElBZGQob2UpKS5yZWRJQWRkKG9lKTt2YXIg'@;
put 'c2U9dGhpcy56LnJlZEFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKEUpLnJlZElTdWIoWCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRlLG9lLHNlKX0sei5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEksayl7cmV0dXJuIEk9bmV3IHgoSSxrKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsSSl9'@;
put 'LHoucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEkpe2lmKCJhZmZpbmUiPT09SS50eXBlKXJldHVybiB0aGlzLmVxKEkudG9KKCkpO2lmKHRoaXM9PT1JKXJldHVybiEwO3ZhciBrPXRoaXMuei5yZWRTcXIoKSxFPUkuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChFKS5yZWRJU3ViKEku'@;
put 'eC5yZWRNdWwoaykpLmNtcG4oMCkpcmV0dXJuITE7dmFyIGo9ay5yZWRNdWwodGhpcy56KSxWPUUucmVkTXVsKEkueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFYpLnJlZElTdWIoSS55LnJlZE11bChqKSkuY21wbigwKX0sei5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEkpe3ZhciBr'@;
put 'PXRoaXMuei5yZWRTcXIoKSxFPUkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChrKTtpZigwPT09dGhpcy54LmNtcChFKSlyZXR1cm4hMDtmb3IodmFyIGo9SS5jbG9uZSgpLFY9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChrKTs7KXtpZihqLmlhZGQodGhpcy5jdXJ2ZS5uKSxqLmNtcCh0'@;
put 'aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEUucmVkSUFkZChWKSwwPT09dGhpcy54LmNtcChFKSlyZXR1cm4hMH19LHoucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAi'@;
put 'K3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSx6LnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDgwNDk6KGF0LEllLEYpPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciB6LGFlPUllLHg9Rig3MTA3NiksbT1GKDkxMzIpLE09Rig0Njc2NykuYXNzZXJ0O2Z1bmN0aW9uIE8oSyl7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09Sy50eXBlP25ldyBtLnNob3J0KEspOiJlZHdhcmRzIj09PUsudHlwZT9uZXcgbS5lZHdhcmRzKEspOm5ldyBtLm1v'@;
put 'bnQoSyksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1LLmhhc2gsTSh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLE0odGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5j'@;
put 'dGlvbiBSKEssSSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFlLEsse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBrPW5ldyBPKEkpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWUsSyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAs'@;
put 'dmFsdWU6a30pLGt9fSl9YWUuUHJlc2V0Q3VydmU9TyxSKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyIxODhk'@;
put 'YTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxSKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3'@;
put 'MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAx'@;
put 'MTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxSKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAy'@;
put 'N2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAg'@;
put 'ZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksUigicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAw'@;
put 'MDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOnguc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5'@;
put 'Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0p'@;
put 'LFIoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0'@;
put 'IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQw'@;
put 'OSIsaGFzaDp4LnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBm'@;
put 'OTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlm'@;
put 'ZDE2NjUwIl19KSxSKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAw'@;
put 'MDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksUigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3'@;
put 'OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOnguc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2'@;
put 'NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7ej1GKDI3Mjc0KX1jYXRjaHt6PXZvaWQgMH1SKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJm'@;
put 'IixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDp4LnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVj'@;
put 'MTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkw'@;
put 'YWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgi'@;
put 'LCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4Iix6XX0pfSw2NDQzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDkyNDQ3KSxtPUYoNDY3NjcpLGxlPUYoODA0OSksTT1GKDYwMDgyKSxP'@;
put 'PW0uYXNzZXJ0LFI9Rig5MTM3Myksej1GKDU3NzQ2KTtmdW5jdGlvbiBLKEkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEspKXJldHVybiBuZXcgSyhJKTsic3RyaW5nIj09dHlwZW9mIEkmJihPKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsZSxJKSwiVW5rbm93biBjdXJ2'@;
put 'ZSAiK0kpLEk9bGVbSV0pLEkgaW5zdGFuY2VvZiBsZS5QcmVzZXRDdXJ2ZSYmKEk9e2N1cnZlOkl9KSx0aGlzLmN1cnZlPUkuY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1JLmN1cnZlLmcs'@;
put 'dGhpcy5nLnByZWNvbXB1dGUoSS5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1JLmhhc2h8fEkuY3VydmUuaGFzaH1hdC5leHBvcnRzPUssSy5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IFIodGhpcyxrKX0sSy5wcm90b3R5cGUua2V5RnJvbVByaXZh'@;
put 'dGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gUi5mcm9tUHJpdmF0ZSh0aGlzLGssRSl9LEsucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oayxFKXtyZXR1cm4gUi5mcm9tUHVibGljKHRoaXMsayxFKX0sSy5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihrKXtrfHwoaz17fSk7'@;
put 'Zm9yKHZhciBFPW5ldyB4KHtoYXNoOnRoaXMuaGFzaCxwZXJzOmsucGVycyxwZXJzRW5jOmsucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6ay5lbnRyb3B5fHxNKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6ay5lbnRyb3B5JiZrLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0'@;
put 'aGlzLm4udG9BcnJheSgpfSksaj10aGlzLm4uYnl0ZUxlbmd0aCgpLFY9dGhpcy5uLnN1YihuZXcgYWUoMikpOzspe3ZhciBCPW5ldyBhZShFLmdlbmVyYXRlKGopKTtpZighKEIuY21wKFYpPjApKXJldHVybiBCLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoQil9fSxLLnByb3RvdHlw'@;
put 'ZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oayxFKXt2YXIgaj04KmsuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gaj4wJiYoaz1rLnVzaHJuKGopKSwhRSYmay5jbXAodGhpcy5uKT49MD9rLnN1Yih0aGlzLm4pOmt9LEsucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oayxF'@;
put 'LGosVil7Im9iamVjdCI9PXR5cGVvZiBqJiYoVj1qLGo9bnVsbCksVnx8KFY9e30pLEU9dGhpcy5rZXlGcm9tUHJpdmF0ZShFLGopLGs9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGFlKGssMTYpKTtmb3IodmFyIEI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxZPUUuZ2V0UHJpdmF0ZSgpLnRvQXJyYXko'@;
put 'ImJlIixCKSxYPWsudG9BcnJheSgiYmUiLEIpLFU9bmV3IHgoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6WSxub25jZTpYLHBlcnM6Vi5wZXJzLHBlcnNFbmM6Vi5wZXJzRW5jfHwidXRmOCJ9KSxxPXRoaXMubi5zdWIobmV3IGFlKDEpKSxlZT0wOztlZSsrKXt2YXIgdGU9Vi5rP1YuayhlZSk6'@;
put 'bmV3IGFlKFUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKHRlPXRoaXMuX3RydW5jYXRlVG9OKHRlLCEwKSkuY21wbigxKTw9MHx8dGUuY21wKHEpPj0wKSl7dmFyIG9lPXRoaXMuZy5tdWwodGUpO2lmKCFvZS5pc0luZmluaXR5KCkpe3ZhciBzZT1vZS5nZXRYKCksaGU9'@;
put 'c2UudW1vZCh0aGlzLm4pO2lmKDAhPT1oZS5jbXBuKDApKXt2YXIgdWU9dGUuaW52bSh0aGlzLm4pLm11bChoZS5tdWwoRS5nZXRQcml2YXRlKCkpLmlhZGQoaykpO2lmKDAhPT0odWU9dWUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgY2U9KG9lLmdldFkoKS5pc09kZCgpPzE6MCl8KDAh'@;
put 'PT1zZS5jbXAoaGUpPzI6MCk7cmV0dXJuIFYuY2Fub25pY2FsJiZ1ZS5jbXAodGhpcy5uaCk+MCYmKHVlPXRoaXMubi5zdWIodWUpLGNlXj0xKSxuZXcgeih7cjpoZSxzOnVlLHJlY292ZXJ5UGFyYW06Y2V9KX19fX19fSxLLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oayxFLGosVil7az10'@;
put 'aGlzLl90cnVuY2F0ZVRvTihuZXcgYWUoaywxNikpLGo9dGhpcy5rZXlGcm9tUHVibGljKGosVik7dmFyIEI9KEU9bmV3IHooRSwiaGV4IikpLnIsWT1FLnM7aWYoQi5jbXBuKDEpPDB8fEIuY21wKHRoaXMubik+PTB8fFkuY21wbigxKTwwfHxZLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3Zh'@;
put 'ciBlZSxYPVkuaW52bSh0aGlzLm4pLFU9WC5tdWwoaykudW1vZCh0aGlzLm4pLHE9WC5tdWwoQikudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShlZT10aGlzLmcuam11bEFkZChVLGouZ2V0UHVibGljKCkscSkpLmlzSW5maW5pdHkoKSYmZWUuZXFYVG9Q'@;
put 'KEIpOiEoZWU9dGhpcy5nLm11bEFkZChVLGouZ2V0UHVibGljKCkscSkpLmlzSW5maW5pdHkoKSYmMD09PWVlLmdldFgoKS51bW9kKHRoaXMubikuY21wKEIpfSxLLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKEksayxFLGope08oKDMmRSk9PT1FLCJUaGUgcmVjb3ZlcnkgcGFy'@;
put 'YW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksaz1uZXcgeihrLGopO3ZhciBWPXRoaXMubixCPW5ldyBhZShJKSxZPWsucixYPWsucyxVPTEmRSxxPUU+PjE7aWYoWS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJnEpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8g'@;
put 'ZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtZPXRoaXMuY3VydmUucG9pbnRGcm9tWChxP1kuYWRkKHRoaXMuY3VydmUubik6WSxVKTt2YXIgZWU9ay5yLmludm0oViksdGU9Vi5zdWIoQikubXVsKGVlKS51bW9kKFYpLG9lPVgubXVsKGVlKS51bW9kKFYpO3JldHVybiB0aGlzLmcubXVs'@;
put 'QWRkKHRlLFksb2UpfSxLLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKEksayxFLGope2lmKG51bGwhPT0oaz1uZXcgeihrLGopKS5yZWNvdmVyeVBhcmFtKXJldHVybiBrLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBWPTA7Vjw0O1YrKyl7dmFyIEI7dHJ5e0I9dGhpcy5y'@;
put 'ZWNvdmVyUHViS2V5KEksayxWKX1jYXRjaHtjb250aW51ZX1pZihCLmVxKEUpKXJldHVybiBWfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSw5MTM3MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLG09Rig0'@;
put 'Njc2NykuYXNzZXJ0O2Z1bmN0aW9uIGxlKE0sTyl7dGhpcy5lYz1NLHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsTy5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKE8ucHJpdixPLnByaXZFbmMpLE8ucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoTy5wdWIsTy5wdWJFbmMpfWF0LmV4cG9y'@;
put 'dHM9bGUsbGUuZnJvbVB1YmxpYz1mdW5jdGlvbihPLFIseil7cmV0dXJuIFIgaW5zdGFuY2VvZiBsZT9SOm5ldyBsZShPLHtwdWI6UixwdWJFbmM6en0pfSxsZS5mcm9tUHJpdmF0ZT1mdW5jdGlvbihPLFIseil7cmV0dXJuIFIgaW5zdGFuY2VvZiBsZT9SOm5ldyBsZShPLHtwcml2OlIscHJp'@;
put 'dkVuYzp6fSl9LGxlLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBPPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIE8uaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpPLnZhbGlkYXRlKCk/Ty5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5p'@;
put 'c0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxsZS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKE8sUil7cmV0'@;
put 'dXJuInN0cmluZyI9PXR5cGVvZiBPJiYoUj1PLE89bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLFI/dGhpcy5wdWIuZW5jb2RlKFIsTyk6dGhpcy5wdWJ9LGxlLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKE8pe3JldHVybiJoZXgiPT09'@;
put 'Tz90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxsZS5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oTyxSKXt0aGlzLnByaXY9bmV3IGFlKE8sUnx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxsZS5wcm90b3R5cGUuX2lt'@;
put 'cG9ydFB1YmxpYz1mdW5jdGlvbihPLFIpe2lmKE8ueHx8Ty55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9tKE8ueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmbShP'@;
put 'LngmJk8ueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChPLngsTy55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChPLFIpfSxsZS5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKE8pe3JldHVybiBP'@;
put 'LnZhbGlkYXRlKCl8fG0oTy52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLE8ubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxsZS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihPLFIseil7cmV0dXJuIHRoaXMuZWMuc2lnbihPLHRoaXMsUix6KX0sbGUucHJvdG90eXBlLnZl'@;
put 'cmlmeT1mdW5jdGlvbihPLFIpe3JldHVybiB0aGlzLmVjLnZlcmlmeShPLFIsdGhpcyl9LGxlLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhp'@;
put 'cy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNTc3NDY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoNDY3NjcpLG09eC5hc3NlcnQ7ZnVuY3Rpb24gbGUoSyxJKXtpZihLIGluc3RhbmNlb2YgbGUpcmV0dXJuIEs7dGhpcy5faW1wb3J0REVSKEssSSl8fChtKEsu'@;
put 'ciYmSy5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IGFlKEsuciwxNiksdGhpcy5zPW5ldyBhZShLLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1LLnJlY292ZXJ5UGFyYW0/bnVsbDpLLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIE0oKXt0aGlzLnBs'@;
put 'YWNlPTB9ZnVuY3Rpb24gTyhLLEkpe3ZhciBrPUtbSS5wbGFjZSsrXTtpZighKDEyOCZrKSlyZXR1cm4gazt2YXIgRT0xNSZrO2lmKDA9PT1FfHxFPjQpcmV0dXJuITE7Zm9yKHZhciBqPTAsVj0wLEI9SS5wbGFjZTtWPEU7VisrLEIrKylqPDw9OCxqfD1LW0JdLGo+Pj49MDtyZXR1cm4hKGo8'@;
put 'PTEyNykmJihJLnBsYWNlPUIsail9ZnVuY3Rpb24gUihLKXtmb3IodmFyIEk9MCxrPUsubGVuZ3RoLTE7IUtbSV0mJiEoMTI4JktbSSsxXSkmJkk8azspSSsrO3JldHVybiAwPT09ST9LOksuc2xpY2UoSSl9ZnVuY3Rpb24geihLLEkpe2lmKEk8MTI4KUsucHVzaChJKTtlbHNle3ZhciBrPTEr'@;
put 'KE1hdGgubG9nKEkpL01hdGguTE4yPj4+Myk7Zm9yKEsucHVzaCgxMjh8ayk7LS1rOylLLnB1c2goST4+PihrPDwzKSYyNTUpO0sucHVzaChJKX19YXQuZXhwb3J0cz1sZSxsZS5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbihJLGspe0k9eC50b0FycmF5KEksayk7dmFyIEU9bmV3IE07'@;
put 'aWYoNDghPT1JW0UucGxhY2UrK10pcmV0dXJuITE7dmFyIGo9TyhJLEUpO2lmKCExPT09anx8aitFLnBsYWNlIT09SS5sZW5ndGh8fDIhPT1JW0UucGxhY2UrK10pcmV0dXJuITE7dmFyIFY9TyhJLEUpO2lmKCExPT09VilyZXR1cm4hMTt2YXIgQj1JLnNsaWNlKEUucGxhY2UsVitFLnBsYWNl'@;
put 'KTtpZihFLnBsYWNlKz1WLDIhPT1JW0UucGxhY2UrK10pcmV0dXJuITE7dmFyIFk9TyhJLEUpO2lmKCExPT09WXx8SS5sZW5ndGghPT1ZK0UucGxhY2UpcmV0dXJuITE7dmFyIFg9SS5zbGljZShFLnBsYWNlLFkrRS5wbGFjZSk7aWYoMD09PUJbMF0pe2lmKCEoMTI4JkJbMV0pKXJldHVybiEx'@;
put 'O0I9Qi5zbGljZSgxKX1pZigwPT09WFswXSl7aWYoISgxMjgmWFsxXSkpcmV0dXJuITE7WD1YLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IGFlKEIpLHRoaXMucz1uZXcgYWUoWCksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LGxlLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihJKXt2'@;
put 'YXIgaz10aGlzLnIudG9BcnJheSgpLEU9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JmtbMF0mJihrPVswXS5jb25jYXQoaykpLDEyOCZFWzBdJiYoRT1bMF0uY29uY2F0KEUpKSxrPVIoayksRT1SKEUpOyEoRVswXXx8MTI4JkVbMV0pOylFPUUuc2xpY2UoMSk7dmFyIGo9WzJdO3ooaixrLmxl'@;
put 'bmd0aCksKGo9ai5jb25jYXQoaykpLnB1c2goMikseihqLEUubGVuZ3RoKTt2YXIgVj1qLmNvbmNhdChFKSxCPVs0OF07cmV0dXJuIHooQixWLmxlbmd0aCksQj1CLmNvbmNhdChWKSx4LmVuY29kZShCLEkpfX0sOTk1Nzc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDcxMDc2'@;
put 'KSx4PUYoODA0OSksbT1GKDQ2NzY3KSxsZT1tLmFzc2VydCxNPW0ucGFyc2VCeXRlcyxPPUYoMTcwMTIpLFI9Rig3ODA2Mik7ZnVuY3Rpb24geihLKXtpZihsZSgiZWQyNTUxOSI9PT1LLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgeikpcmV0'@;
put 'dXJuIG5ldyB6KEspO3RoaXMuY3VydmU9Sz14W0tdLmN1cnZlLHRoaXMuZz1LLmcsdGhpcy5nLnByZWNvbXB1dGUoSy5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1LLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoSy5uLmJpdExlbmd0'@;
put 'aCgpLzgpLHRoaXMuaGFzaD1hZS5zaGE1MTJ9YXQuZXhwb3J0cz16LHoucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oSSxrKXtJPU0oSSk7dmFyIEU9dGhpcy5rZXlGcm9tU2VjcmV0KGspLGo9dGhpcy5oYXNoSW50KEUubWVzc2FnZVByZWZpeCgpLEkpLFY9dGhpcy5nLm11bChqKSxCPXRoaXMu'@;
put 'ZW5jb2RlUG9pbnQoViksWT10aGlzLmhhc2hJbnQoQixFLnB1YkJ5dGVzKCksSSkubXVsKEUucHJpdigpKSxYPWouYWRkKFkpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOlYsUzpYLFJlbmNvZGVkOkJ9KX0sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0'@;
put 'aW9uKEksayxFKXtJPU0oSSksaz10aGlzLm1ha2VTaWduYXR1cmUoayk7dmFyIGo9dGhpcy5rZXlGcm9tUHVibGljKEUpLFY9dGhpcy5oYXNoSW50KGsuUmVuY29kZWQoKSxqLnB1YkJ5dGVzKCksSSksQj10aGlzLmcubXVsKGsuUygpKTtyZXR1cm4gay5SKCkuYWRkKGoucHViKCkubXVsKFYp'@;
put 'KS5lcShCKX0sei5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgST10aGlzLmhhc2goKSxrPTA7azxhcmd1bWVudHMubGVuZ3RoO2srKylJLnVwZGF0ZShhcmd1bWVudHNba10pO3JldHVybiBtLmludEZyb21MRShJLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LHou'@;
put 'cHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oSSl7cmV0dXJuIE8uZnJvbVB1YmxpYyh0aGlzLEkpfSx6LnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKEkpe3JldHVybiBPLmZyb21TZWNyZXQodGhpcyxJKX0sei5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlv'@;
put 'bihJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIFI/STpuZXcgUih0aGlzLEkpfSx6LnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihJKXt2YXIgaz1JLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIGtbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9SS5n'@;
put 'ZXRYKCkuaXNPZGQoKT8xMjg6MCxrfSx6LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihJKXt2YXIgaz0oST1tLnBhcnNlQnl0ZXMoSSkpLmxlbmd0aC0xLEU9SS5zbGljZSgwLGspLmNvbmNhdCgtMTI5Jklba10pLGo9MCE9KDEyOCZJW2tdKSxWPW0uaW50RnJvbUxFKEUpO3JldHVy'@;
put 'biB0aGlzLmN1cnZlLnBvaW50RnJvbVkoVixqKX0sei5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKEkpe3JldHVybiBJLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sei5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKEkpe3JldHVybiBtLmludEZyb21MRShJKX0s'@;
put 'ei5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDE3MDEyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0Njc2NykseD1hZS5hc3NlcnQsbT1hZS5wYXJzZUJ5dGVzLGxlPWFlLmNhY2hlZFByb3BlcnR5'@;
put 'O2Z1bmN0aW9uIE0oTyxSKXt0aGlzLmVkZHNhPU8sdGhpcy5fc2VjcmV0PW0oUi5zZWNyZXQpLE8uaXNQb2ludChSLnB1Yik/dGhpcy5fcHViPVIucHViOnRoaXMuX3B1YkJ5dGVzPW0oUi5wdWIpfU0uZnJvbVB1YmxpYz1mdW5jdGlvbihSLHope3JldHVybiB6IGluc3RhbmNlb2YgTT96Om5l'@;
put 'dyBNKFIse3B1Yjp6fSl9LE0uZnJvbVNlY3JldD1mdW5jdGlvbihSLHope3JldHVybiB6IGluc3RhbmNlb2YgTT96Om5ldyBNKFIse3NlY3JldDp6fSl9LE0ucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LGxlKE0sInB1YkJ5dGVzIixmdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksbGUoTSwicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLGxlKE0s'@;
put 'InByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgUj10aGlzLmVkZHNhLHo9dGhpcy5oYXNoKCksSz1SLmVuY29kaW5nTGVuZ3RoLTEsST16LnNsaWNlKDAsUi5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIElbMF0mPTI0OCxJW0tdJj0xMjcsSVtLXXw9NjQsSX0pLGxlKE0sInByaXYiLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksbGUoTSwiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksbGUoTSwibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxNLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFIpe3JldHVybiB4KHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oUix0aGlzKX0sTS5wcm90b3R5'@;
put 'cGUudmVyaWZ5PWZ1bmN0aW9uKFIseil7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KFIseix0aGlzKX0sTS5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKFIpe3JldHVybiB4KHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLGFlLmVuY29kZSh0aGlzLnNlY3JldCgp'@;
put 'LFIpfSxNLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oUil7cmV0dXJuIGFlLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksUil9LGF0LmV4cG9ydHM9TX0sNzgwNjI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoNDY3NjcpLG09eC5hc3NlcnQsbGU9eC5j'@;
put 'YWNoZWRQcm9wZXJ0eSxNPXgucGFyc2VCeXRlcztmdW5jdGlvbiBPKFIseil7dGhpcy5lZGRzYT1SLCJvYmplY3QiIT10eXBlb2YgeiYmKHo9TSh6KSksQXJyYXkuaXNBcnJheSh6KSYmKHo9e1I6ei5zbGljZSgwLFIuZW5jb2RpbmdMZW5ndGgpLFM6ei5zbGljZShSLmVuY29kaW5nTGVuZ3Ro'@;
put 'KX0pLG0oei5SJiZ6LlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLFIuaXNQb2ludCh6LlIpJiYodGhpcy5fUj16LlIpLHouUyBpbnN0YW5jZW9mIGFlJiYodGhpcy5fUz16LlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoei5SKT96LlI6ei5SZW5jb2RlZCx0aGlzLl9TZW5j'@;
put 'b2RlZD1BcnJheS5pc0FycmF5KHouUyk/ei5TOnouU2VuY29kZWR9bGUoTywiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLGxlKE8sIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5j'@;
put 'b2RlZCgpKX0pLGxlKE8sIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLGxlKE8sIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxPLnByb3RvdHlwZS50b0J5dGVz'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sTy5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4geC5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LGF0LmV4cG9ydHM9T30sMjcyNzQ6YXQ9'@;
put 'PnthdC5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5'@;
put 'NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcy'@;
put 'Zjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZm'@;
put 'ZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4'@;
put 'ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2'@;
put 'NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxb'@;
put 'IjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0'@;
put 'YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5'@;
put 'MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFm'@;
put 'NDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5'@;
put 'OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0'@;
put 'YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4'@;
put 'NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwi'@;
put 'NTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJj'@;
put 'MmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhj'@;
put 'OGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4'@;
put 'MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3'@;
put 'MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVh'@;
put 'ZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYx'@;
put 'NGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxb'@;
put 'Ijc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNm'@;
put 'OGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4'@;
put 'OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdj'@;
put 'OTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5'@;
put 'ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIz'@;
put 'ODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2'@;
put 'Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwi'@;
put 'MWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZj'@;
put 'OTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNm'@;
put 'MmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkz'@;
put 'MjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2Vh'@;
put 'NDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJk'@;
put 'ODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2'@;
put 'YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJh'@;
put 'NTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThj'@;
put 'MzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5'@;
put 'MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5'@;
put 'NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5'@;
put 'NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1'@;
put 'MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYw'@;
put 'YzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFl'@;
put 'ZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4'@;
put 'NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRm'@;
put 'MjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1'@;
put 'ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAy'@;
put 'MmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhj'@;
put 'MzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBh'@;
put 'ZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsi'@;
put 'ODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdm'@;
put 'NDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJk'@;
put 'ODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZl'@;
put 'ZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVh'@;
put 'ZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWVi'@;
put 'OTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkz'@;
put 'NDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3'@;
put 'Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJh'@;
put 'MjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhh'@;
put 'NDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxb'@;
put 'ImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZm'@;
put 'NDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRh'@;
put 'MmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQz'@;
put 'MDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2'@;
put 'N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5'@;
put 'YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUx'@;
put 'NDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIy'@;
put 'MTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0'@;
put 'YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAx'@;
put 'YjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAy'@;
put 'ZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1'@;
put 'ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4'@;
put 'NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1'@;
put 'YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3'@;
put 'ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJj'@;
put 'ZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkw'@;
put 'ZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2'@;
put 'ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMy'@;
put 'ZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdl'@;
put 'ODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3'@;
put 'OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5'@;
put 'ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIy'@;
put 'MWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0'@;
put 'MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZl'@;
put 'MDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJk'@;
put 'ZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2Jl'@;
put 'NWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5'@;
put 'MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3'@;
put 'NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlk'@;
put 'NzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdj'@;
put 'NzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUy'@;
put 'YzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZi'@;
put 'MzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1'@;
put 'NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5'@;
put 'MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVk'@;
put 'ZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3'@;
put 'YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4'@;
put 'Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRl'@;
put 'NWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIz'@;
put 'NjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1'@;
put 'NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBj'@;
put 'OTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2'@;
put 'ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2'@;
put 'YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5'@;
put 'ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2Yw'@;
put 'NzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAy'@;
put 'NmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZm'@;
put 'YTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDky'@;
put 'OGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0'@;
put 'YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFm'@;
put 'N2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRl'@;
put 'Il0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVk'@;
put 'NzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgw'@;
put 'MDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThl'@;
put 'YzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUw'@;
put 'MmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2'@;
put 'YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIw'@;
put 'MDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5Iiwi'@;
put 'MmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBj'@;
put 'NzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkz'@;
put 'ZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEz'@;
put 'YTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3'@;
put 'ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNi'@;
put 'YjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTcz'@;
put 'YzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsi'@;
put 'ZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2'@;
put 'ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAz'@;
put 'N2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5'@;
put 'NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgw'@;
put 'ZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMz'@;
put 'ZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFj'@;
put 'YzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwi'@;
put 'ZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVh'@;
put 'OWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJi'@;
put 'ZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5'@;
put 'MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4'@;
put 'ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIz'@;
put 'Yzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0'@;
put 'MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0s'@;
put 'WyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5'@;
put 'MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVh'@;
put 'YWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRk'@;
put 'MzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJh'@;
put 'NDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2'@;
put 'NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5'@;
put 'YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwi'@;
put 'Y2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4'@;
put 'MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIz'@;
put 'ZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2'@;
put 'ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkz'@;
put 'YzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZk'@;
put 'MDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1'@;
put 'YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxb'@;
put 'IjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYz'@;
put 'ZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNk'@;
put 'YTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4'@;
put 'ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5'@;
put 'ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVh'@;
put 'Mzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZi'@;
put 'MDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwi'@;
put 'NDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw0Njc2NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUllLHg9RigzMTM4NyksbT1GKDU3Nzk4KSxsZT1GKDc4MjQ3KTthZS5hc3NlcnQ9bSxhZS50b0Fy'@;
put 'cmF5PWxlLnRvQXJyYXksYWUuemVybzI9bGUuemVybzIsYWUudG9IZXg9bGUudG9IZXgsYWUuZW5jb2RlPWxlLmVuY29kZSxhZS5nZXROQUY9ZnVuY3Rpb24gTShJLGssRSl7dmFyIGo9bmV3IEFycmF5KE1hdGgubWF4KEkuYml0TGVuZ3RoKCksRSkrMSk7ai5maWxsKDApO2Zvcih2YXIgVj0x'@;
put 'PDxrKzEsQj1JLmNsb25lKCksWT0wO1k8ai5sZW5ndGg7WSsrKXt2YXIgWCxVPUIuYW5kbG4oVi0xKTtCLmlzT2RkKCk/Qi5pc3VibihYPVU+KFY+PjEpLTE/KFY+PjEpLVU6VSk6WD0wLGpbWV09WCxCLml1c2hybigxKX1yZXR1cm4gan0sYWUuZ2V0SlNGPWZ1bmN0aW9uIE8oSSxrKXt2YXIg'@;
put 'RT1bW10sW11dO0k9SS5jbG9uZSgpLGs9ay5jbG9uZSgpO2Zvcih2YXIgQixqPTAsVj0wO0kuY21wbigtaik+MHx8ay5jbXBuKC1WKT4wOyl7dmFyIFUscSxZPUkuYW5kbG4oMykraiYzLFg9ay5hbmRsbigzKStWJjM7Mz09PVkmJihZPS0xKSwzPT09WCYmKFg9LTEpLFU9MSZZPzMhPShCPUku'@;
put 'YW5kbG4oNykraiY3KSYmNSE9PUJ8fDIhPT1YP1k6LVk6MCxFWzBdLnB1c2goVSkscT0xJlg/MyE9KEI9ay5hbmRsbig3KStWJjcpJiY1IT09Qnx8MiE9PVk/WDotWDowLEVbMV0ucHVzaChxKSwyKmo9PT1VKzEmJihqPTEtaiksMipWPT09cSsxJiYoVj0xLVYpLEkuaXVzaHJuKDEpLGsuaXVz'@;
put 'aHJuKDEpfXJldHVybiBFfSxhZS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBSKEksayxFKXt2YXIgaj0iXyIraztJLnByb3RvdHlwZVtrXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW2pdP3RoaXNbal06dGhpc1tqXT1FLmNhbGwodGhpcyl9fSxhZS5wYXJzZUJ5dGVzPWZ1bmN0'@;
put 'aW9uIHooSSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBJP2FlLnRvQXJyYXkoSSwiaGV4Iik6SX0sYWUuaW50RnJvbUxFPWZ1bmN0aW9uIEsoSSl7cmV0dXJuIG5ldyB4KEksImhleCIsImxlIil9fSwzMTM4NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3Qi'@;
put 'O2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNv'@;
put 'bnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5p'@;
put 'dChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoODU1NjgpLkJ1'@;
put 'ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihHLGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgmMTV9ZnVuY3Rpb24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWImJihIfD1SKEcsRC0xKTw8NCks'@;
put 'SH1mdW5jdGlvbiBLKEcsYixELEgpe2Zvcih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1ILE4rPVM+PTQ5P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1'@;
put 'cm4gYiBpbnN0YW5jZW9mIE18fG51bGwhPT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGIud29yZHMpfSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rp'@;
put 'b24oYixEKXtyZXR1cm4gYi5jbXAoRCk8MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIs'@;
put 'RCxIKTsiaGV4Ij09PUQmJihEPTE2KSxtKEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihOKyssdGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixI'@;
put 'KToodGhpcy5fcGFyc2VCYXNlKGIsRCxOKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oYixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRz'@;
put 'PVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQm'@;
put 'NjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGIsRCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0'@;
put 'aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJl'@;
put 'Ij09PUgpZm9yKE49Yi5sZW5ndGgtMSxnPTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUi'@;
put 'PT09SClmb3IoTj0wLGc9MDtOPGIubGVuZ3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJp'@;
put 'cCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIg'@;
put 'UyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsx'@;
put 'OkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jk'@;
put 'cz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1NYXRoLm1pbihDLEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhp'@;
put 'cy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0wO3c8Uzt3KyspSio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBd'@;
put 'Kz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVu'@;
put 'Z3RoLGIubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxi'@;
put 'Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5w'@;
put 'cm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3Ro'@;
put 'aXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1'@;
put 'LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1Njks'@;
put 'MzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0'@;
put 'aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8Ry53b3Jkc1swXSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYz'@;
put 'JkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0p'@;
put 'K0opLzY3MTA4ODY0fDAsSj02NzEwODg2MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1NLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTAp'@;
put 'fHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZhciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9JWzYtdi5s'@;
put 'ZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0yNiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9'@;
put 'a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0oSj1KLmlkaXZuKHcpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkm'@;
put 'JihIPSIwIitIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07'@;
put 'cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9iKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBz'@;
put 'YWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIp'@;
put 'LHRoaXMudG9BcnJheUxpa2UoTyxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8'@;
put 'TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2Zv'@;
put 'cihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKyspU1twXT0wO2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFd'@;
put 'PXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFyIEQ9YixIPTA7cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04'@;
put 'JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihIKz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBEPWIsSD0wO3JldHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwo'@;
put 'SCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIsRD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlw'@;
put 'ZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0'@;
put 'ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5'@;
put 'cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7'@;
put 'KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVn'@;
put 'YXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYik6Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0'@;
put 'aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7RD10aGlzLmxlbmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jk'@;
put 'c1tIXT10aGlzLndvcmRzW0hdJmIud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5'@;
put 'cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5k'@;
put 'KGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6KEQ9YixIPXRoaXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5I'@;
put 'LndvcmRzW05dO2lmKHRoaXMhPT1EKWZvcig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8'@;
put 'Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoYil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoYik6Yi5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRo'@;
put 'aXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5k'@;
put 'KEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0wO048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+dGhpcy53b3Jkc1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEg9Yi8yNnwwLE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29y'@;
put 'ZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hdJn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlz'@;
put 'Lm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihI'@;
put 'PWIsTj10aGlzKTtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgw'@;
put 'fEgud29yZHNbQ10pK2cpLGc9RD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0'@;
put 'aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhpcy5zdWIoYiksYi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMu'@;
put 'bmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2'@;
put 'ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTtyZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21w'@;
put 'KGIpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlzKTtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1Nd'@;
put 'KStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0'@;
put 'aGlzLndvcmRzW1NdPU4ud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9'@;
put 'O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9MHxOWzFdLHhlPTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8'@;
put 'TlszXSxLZT04MTkxJldlLFllPVdlPj4+MTMsUWU9MHxOWzRdLGx0PTgxOTEmUWUsUGU9UWU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0s'@;
put 'b3Q9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8Z1syXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgx'@;
put 'OTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdbNF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8Z1s1XSxydD04MTkxJm1uLEl0PW1uPj4+MTMsUXQ9MHxnWzZdLER0PTgxOTEmUXQscHQ9UXQ+Pj4xMyxZdD0wfGdbN10sSW49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnlu'@;
put 'LHNuPXluPj4+MTMsQm49MHxnWzldLFJuPTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgRm49KFMrKHY9TWF0aC5pbXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxVdCkpK01hdGguaW11bChk'@;
put 'ZSxDbil8MCkpPDwxMyl8MDtTPSgodz1NYXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoRm4+Pj4yNil8MCxGbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9KHA9TWF0aC5pbXVsKHhlLFV0KSkrTWF0aC5pbXVsKExlLENuKXwwLHc9TWF0aC5pbXVsKExlLFV0KTt2YXIgbmk9'@;
put 'KFMrKHY9ditNYXRoLmltdWwobmUsV24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRo'@;
put 'LmltdWwoT2UsQ24pLHA9KHA9TWF0aC5pbXVsKE9lLFV0KSkrTWF0aC5pbXVsKGplLENuKXwwLHc9TWF0aC5pbXVsKGplLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChMZSxXbil8MCx3PXcrTWF0aC5pbXVsKExlLGVuKXww'@;
put 'O3ZhciBsbj0oUysodj12K01hdGguaW11bChuZSxIbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsSG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2'@;
put 'Myx2PU1hdGguaW11bChLZSxDbikscD0ocD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2UsV24pfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGplLFduKXwwLHc9dytNYXRoLmltdWwo'@;
put 'amUsZW4pfDAsdj12K01hdGguaW11bCh4ZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsSG4pfDAsdz13K01hdGguaW11bChMZSxmdCl8MDt2YXIgam49KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChu'@;
put 'ZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9'@;
put 'TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVsKFllLGVuKXwwLHY9ditNYXRoLmltdWwoT2UsSG4pfDAscD0ocD1wK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5p'@;
put 'bXVsKGplLEhuKXwwLHc9dytNYXRoLmltdWwoamUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTGUsaG4pfDAsdz13K01hdGguaW11bChMZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRoLmltdWwobmUsX3QpfDApfDAp'@;
put 'KygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFl'@;
put 'LFV0KSkrTWF0aC5pbXVsKFRlLENuKXwwLHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGguaW11bChQZSxXbil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmltdWwoS2UsSG4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLEhuKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoamUsaG4pfDAsdz13K01hdGguaW11bChqZSx3dCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCx3PXcrTWF0aC5pbXVsKExlLE50KXwwO3ZhciBnaT0oUysodj12K01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEl0KXwwKStNYXRoLmltdWwo'@;
put 'ZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsSXQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxDbikscD0ocD1NYXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9'@;
put 'ditNYXRoLmltdWwoQWUsV24pfDAscD0ocD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGguaW11bChsdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsdz13K01h'@;
put 'dGguaW11bChQZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVsKFllLHd0KXwwLHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5p'@;
put 'bXVsKGplLF90KXwwLHc9dytNYXRoLmltdWwoamUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsdz13K01hdGguaW11bChMZSxJdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRoLmltdWwobmUsRHQpfDApfDAp'@;
put 'KygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1l'@;
put 'LFV0KSkrTWF0aC5pbXVsKERlLENuKXwwLHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGguaW11bChVZSxXbil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmltdWwoQWUsSG4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5pbXVsKFRlLEhuKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2UscnQpfDAscD0ocD1wK01hdGguaW11bChPZSxJdCl8MCkrTWF0aC5pbXVsKGplLHJ0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'amUsSXQpfDAsdj12K01hdGguaW11bCh4ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDAsdz13K01hdGguaW11bChMZSxwdCl8MDt2YXIgVWk9KFMrKHY9ditNYXRoLmltdWwobmUsSW4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChu'@;
put 'ZSx6dCl8MCkrTWF0aC5pbXVsKGRlLEluKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwob3QsQ24pLHA9KHA9TWF0aC5pbXVsKG90LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9'@;
put 'TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVsKERlLGVuKXwwLHY9ditNYXRoLmltdWwoWGUsSG4pfDAscD0ocD1wK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5p'@;
put 'bXVsKFVlLEhuKXwwLHc9dytNYXRoLmltdWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsdz13K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxJdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsSXQpfDAsdj12K01hdGguaW11bChPZSxE'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoamUsRHQpfDAsdz13K01hdGguaW11bChqZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChMZSxJbil8MCx3PXcrTWF0aC5pbXVsKExlLHp0KXww'@;
put 'O3ZhciBLcj0oUysodj12K01hdGguaW11bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2'@;
put 'Myx2PU1hdGguaW11bChIdCxDbikscD0ocD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwob3QsV24pfDAscD0ocD1wK01hdGguaW11bChvdCxlbil8MCkrTWF0aC5pbXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwo'@;
put 'dXQsZW4pfDAsdj12K01hdGguaW11bChNZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsdz13K01hdGguaW11bChEZSxmdCl8MCx2PXYrTWF0aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxo'@;
put 'bil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9dytNYXRoLmltdWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEl0'@;
put 'KXwwKStNYXRoLmltdWwoUGUscnQpfDAsdz13K01hdGguaW11bChQZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01hdGguaW11bChZZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRoLmltdWwoT2UsSW4pfDAscD0o'@;
put 'cD1wK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKGplLEluKXwwLHc9dytNYXRoLmltdWwoamUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoTGUseG4pfDAsdz13K01hdGguaW11bChMZSxzbil8MDt2YXIgbm89'@;
put 'KFMrKHY9ditNYXRoLmltdWwobmUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRo'@;
put 'LmltdWwoSHQsV24pLHA9KHA9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKG90LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZnQpfDApK01hdGguaW11bCh1dCxIbil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXww'@;
put 'LHY9ditNYXRoLmltdWwoTWUsaG4pfDAscD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01hdGguaW11bChYZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13'@;
put 'K01hdGguaW11bChVZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5pbXVsKFRlLEl0KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0'@;
put 'aC5pbXVsKFBlLER0KXwwLHc9dytNYXRoLmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsSW4pfDAsdz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoT2Usc24pfDApK01hdGguaW11bChqZSx4bil8MCx3PXcrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBIcj0oUysodj12K01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoTGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9'@;
put 'dytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxIbikscD0ocD1NYXRoLmltdWwoSHQsZnQpKStNYXRoLmltdWwoUHQsSG4pfDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRoLmltdWwob3QsaG4pfDAscD0o'@;
put 'cD1wK01hdGguaW11bChvdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0'@;
put 'aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEl0KXwwLHY9ditNYXRoLmltdWwoQWUsRHQpfDAscD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoVGUscHQpfDAsdj12K01hdGguaW11bChsdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsSW4pfDAsdz13K01hdGguaW11bChQZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usc24pfDApK01hdGguaW11bChZ'@;
put 'ZSx4bil8MCx3PXcrTWF0aC5pbXVsKFllLHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRoLmltdWwoamUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoamUsJHQpfDApKyhwPj4+'@;
put 'MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRoLmltdWwoUHQsd3QpLHY9ditNYXRoLmltdWwob3QsX3QpfDAscD0ocD1wK01hdGguaW11bChvdCxOdCl8MCkrTWF0'@;
put 'aC5pbXVsKHV0LF90KXwwLHc9dytNYXRoLmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRoLmltdWwoRGUscnQpfDAsdz13K01hdGguaW11bChEZSxJdCl8MCx2PXYrTWF0aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsSW4pfDAscD0ocD1wK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLEluKXwwLHc9dytNYXRoLmltdWwoVGUsenQpfDAsdj12K01hdGguaW11bChs'@;
put 'dCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmltdWwoS2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLFJu'@;
put 'KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9KHA9TWF0aC5pbXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0'@;
put 'aC5pbXVsKG90LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEl0KXwwLHY9ditNYXRoLmltdWwoTWUsRHQpfDAscD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoRGUscHQpfDAsdj12K01hdGguaW11bChYZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsSW4pfDAsdz13K01hdGguaW11bChVZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChU'@;
put 'ZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRlLHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+'@;
put 'MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsSXQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRoLmltdWwoUHQsSXQpLHY9ditNYXRoLmltdWwob3QsRHQpfDAscD0ocD1wK01hdGguaW11bChvdCxwdCl8MCkrTWF0'@;
put 'aC5pbXVsKHV0LER0KXwwLHc9dytNYXRoLmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsSW4pfDAsdz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoWGUsc24pfDApK01hdGguaW11bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9'@;
put 'dytNYXRoLmltdWwoVGUsJHQpfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQpKStNYXRoLmltdWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRoLmltdWwob3QsSW4pfDAscD0o'@;
put 'cD1wK01hdGguaW11bChvdCx6dCl8MCkrTWF0aC5pbXVsKHV0LEluKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89'@;
put 'KFMrKHY9ditNYXRoLmltdWwoWGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRo'@;
put 'LmltdWwoSHQsSW4pLHA9KHA9TWF0aC5pbXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LEluKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKG90LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qsc24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXww'@;
put 'O3ZhciBHaT0oUysodj12K01hdGguaW11bChNZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2'@;
put 'Myx2PU1hdGguaW11bChIdCx4bikscD0ocD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01hdGguaW11bChvdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90LCR0KXwwKStNYXRoLmltdWwo'@;
put 'dXQsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0aC5pbXVsKEh0LFJuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkpK01hdGguaW11bChQdCxSbil8'@;
put 'MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09Rm4sQ1sxXT1uaSxDWzJdPWxuLENbM109am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09'@;
put 'SHIsQ1sxMV09cWksQ1sxMl09SmksQ1sxM109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIp'@;
put 'e3RoaXMueD1HLHRoaXMueT1ifU1hdGguaW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixE'@;
put 'KTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAsTj0wLGc9MDtnPEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgu'@;
put 'bWluKGcsYi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3MTA4ODYzJmRlO1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZl'@;
put 'Pj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhpcyxiLEQpOlgodGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5l'@;
put 'dyBBcnJheShiKSxIPU0ucHJvdG90eXBlLl9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7'@;
put 'ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEsYj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztTKyspTltTXT1EW2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxI'@;
put 'LE4sZyxDKXt0aGlzLnBlcm11dGUoQyxiLEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1hdGguc2luKDIqTWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKysp'@;
put 'e3ZhciB4ZT1IW0orZmVdLExlPU5bSitmZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxqZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1qZSksTltKK2ZlXT1MZStPZSxIW0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUxlLU9lLGZlIT09diYmKGplPXAqbmUt'@;
put 'dypkZSxkZT1wKmRlK3cqbmUsbmU9amUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5j'@;
put 'dGlvbihiLEQsSCl7aWYoIShIPD0xKSlmb3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gtTi0xXSxEW0gtTi0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIg'@;
put 'SD0wLE49MDtOPEQvMjtOKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixE'@;
put 'LEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxOOysrQylIW0NdPTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIp'@;
put 'e2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9'@;
put 'bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRzO2RlLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNi'@;
put 'KEQud29yZHMsRC5sZW5ndGgsdyxOKSx0aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8TjtmZSsrKXt2YXIgeGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2Zl'@;
put 'XSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0'@;
put 'aCtELmxlbmd0aCxILnN0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIg'@;
put 'RD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24o'@;
put 'Yil7bSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpiLGc9KDY3MTA4ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlz'@;
put 'LndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYil7dmFyIEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtE'@;
put 'PGIubGVuZ3RoO0QrKyl7dmFyIE49RCUyNjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048'@;
put 'RC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkv'@;
put 'MjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMud29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0'@;
put 'aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKyspdGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlz'@;
put 'aGxuPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTjttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgu'@;
put 'bWluKChiLWcpLzI2LHRoaXMubGVuZ3RoKSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxDO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5D'@;
put 'KWZvcih0aGlzLmxlbmd0aC09QyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBK'@;
put 'PTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlw'@;
put 'ZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1'@;
put 'cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49'@;
put 'ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8RCkpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+'@;
put 'PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSww'@;
put 'IT09RCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2'@;
put 'ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihiKXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNb'@;
put 'RF0+PTY3MTA4ODY0O0QrKyl0aGlzLndvcmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1m'@;
put 'dW5jdGlvbihiKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndv'@;
put 'cmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0'@;
put 'aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxNLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90'@;
put 'eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChi'@;
put 'Lmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09NjcxMDg4NjMmdik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8'@;
put 'dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0oMHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRz'@;
put 'W2ddKStTKT4+MjYsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0y'@;
put 'Ni10aGlzLl9jb3VudEJpdHMoQykpJiYoZz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3RoO2lmKCJtb2QiIT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5n'@;
put 'dGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49SixwJiYocC53b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0Kigw'@;
put 'fE4ud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChnLGRlLG5lKTswIT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxO'@;
put 'LmlzWmVybygpfHwoTi5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3Jl'@;
put 'dHVybiBtKCFiLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMu'@;
put 'bW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChiLm5lZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlz'@;
put 'Lm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlzdWIoYikpLHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97'@;
put 'ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxt'@;
put 'b2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhp'@;
put 'cy5kaXZtb2QoYiwibW9kIiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJl'@;
put 'dHVybiBELmRpdjt2YXIgSD0wIT09RC5kaXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJuIEM8MHx8MT09PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5p'@;
put 'YWRkbigxKX0sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtOLS0pSD0oRCpIKygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlv'@;
put 'bihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53b3Jkc1tIXT1OL2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9u'@;
put 'KGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBO'@;
put 'PW5ldyBNKDEpLGc9bmV3IE0oMCksQz1uZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7Zm9yKHZhciBwPUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShE'@;
put 'LndvcmRzWzBdJm5lKSYmSjwyNjsrK0osbmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxnLmlzdWIodykpLE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZm'@;
put 'ZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtpZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIodykpLEMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1'@;
put 'YihTKSk6KEguaXN1YihEKSxDLmlzdWIoTiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9'@;
put 'PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1'@;
put 'c2hybihTKTtTLS0gPjA7KU4uaXNPZGQoKSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtpZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5j'@;
put 'bXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQoYiksSn0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7'@;
put 'aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49MDtELmlzRXZlbigpJiZILmlzRXZlbigpO04rKylELml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7'@;
put 'RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlmKDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90'@;
put 'eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1sw'@;
put 'XSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0'@;
put 'aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRzW0NdO2c9KFMrPWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndv'@;
put 'cmRzW0NdPWcsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUm'@;
put 'JiFEKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6Tjxi'@;
put 'Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9'@;
put 'dGhpcy51Y21wKGIpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0'@;
put 'aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRoaXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0'@;
put 'PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9u'@;
put 'KGIpe3JldHVybi0xPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1'@;
put 'cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90'@;
put 'b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQo'@;
put 'Yil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIHRoaXMucmVkPWIsdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVk'@;
put 'IG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxi'@;
put 'KX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52'@;
put 'bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gbSh0aGlzLnJlZCYmIWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2YXIgcT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7'@;
put 'dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBNKGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIp'@;
put 'fWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoZSgpe2VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5wLHRoaXMucHJpbWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRo'@;
put 'aXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlm'@;
put 'dCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRo'@;
put 'aXMuci5zdWIodGhpcy5taW52KX1lZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3Ro'@;
put 'aXMuc3BsaXQoRCx0aGlzLnRtcCksSD0oRD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhpcy5uPy0xOkQudWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9E'@;
put 'LmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ELnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRoaXMubiwwLEQpfSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxs'@;
put 'ZSh0ZSxlZSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndvcmRzW2ddPWIud29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZv'@;
put 'aWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2ddO2Iud29yZHNbZy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgt'@;
put 'PTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAsYi5sZW5ndGgrPTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53'@;
put 'b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxo'@;
put 'ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMmTjtOPj4+PTI2LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxi'@;
put 'fSxNLl9wcmltZT1mdW5jdGlvbihiKXtpZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9lO2Vsc2UgaWYoInAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3Io'@;
put 'IlVua25vd24gcHJpbWUgIitiKTtEPW5ldyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKX0sdWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9'@;
put 'LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygp'@;
put 'P2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIpLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9'@;
put 'LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIg'@;
put 'SD1iLnN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5t'@;
put 'KSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVl'@;
put 'LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiB0aGlzLm11bChiLGIpfSx1ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFuZGxuKDMpO2lmKG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3Jl'@;
put 'dHVybiB0aGlzLnBvdyhiLEgpfWZvcih2YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5pc1plcm8oKSk7dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSku'@;
put 'aXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChTKTtmb3IodmFyIHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEpLml1c2hybigxKSksbmU9dGhp'@;
put 'cy5wb3coYixOKSxkZT1nOzAhPT1uZS5jbXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBMZT10aGlzLnBvdyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11bChMZSksdz1MZS5yZWRTcXIo'@;
put 'KSxuZT1uZS5yZWRNdWwodyksZGU9eGV9cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ELm5lZ2F0aXZlPyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnBy'@;
put 'b3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixEKXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25lKCk7dmFyIE49bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9'@;
put 'MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRoaXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9RC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13'@;
put 'Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMuc3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5bU10pLHY9MCxTPTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihi'@;
put 'KXt2YXIgRD1iLnVtb2QodGhpcy5tKTtyZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25lKCk7cmV0dXJuIEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNl'@;
put 'LHVlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51'@;
put 'bGwsRH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3ZhciBIPWIuaW11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hp'@;
put 'ZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0'@;
put 'aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVz'@;
put 'aHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52'@;
put 'bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sODIwMTY6YXQ9PnsidXNlIHN0cmljdCI7dmFyIGFlLEllPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsRj1JZSYmImZ1bmN0aW9uIj09dHlwZW9mIEllLmFw'@;
put 'cGx5P0llLmFwcGx5OmZ1bmN0aW9uKGVlLHRlLG9lKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoZWUsdGUsb2UpfTthZT1JZSYmImZ1bmN0aW9uIj09dHlwZW9mIEllLm93bktleXM/SWUub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9u'@;
put 'KGVlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZWUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGVlKSl9OmZ1bmN0aW9uKGVlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZWUpfTt2YXIgbT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9u'@;
put 'KGVlKXtyZXR1cm4gZWUhPWVlfTtmdW5jdGlvbiBsZSgpe2xlLmluaXQuY2FsbCh0aGlzKX1hdC5leHBvcnRzPWxlLGF0LmV4cG9ydHMub25jZT1mdW5jdGlvbiBZKHEsZWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0ZSxvZSl7ZnVuY3Rpb24gc2UodWUpe3EucmVtb3ZlTGlzdGVu'@;
put 'ZXIoZWUsaGUpLG9lKHVlKX1mdW5jdGlvbiBoZSgpeyJmdW5jdGlvbiI9PXR5cGVvZiBxLnJlbW92ZUxpc3RlbmVyJiZxLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsc2UpLHRlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9VShxLGVlLGhlLHtvbmNlOiEwfSksImVycm9yIiE9PWVlJiZmdW5j'@;
put 'dGlvbiBYKHEsZWUsdGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uJiZVKHEsImVycm9yIixlZSx0ZSl9KHEsc2Use29uY2U6ITB9KX0pfSxsZS5FdmVudEVtaXR0ZXI9bGUsbGUucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLGxlLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxsZS5wcm90b3R5'@;
put 'cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIE09MTA7ZnVuY3Rpb24gTyhxKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2Yg'@;
put 'cSl9ZnVuY3Rpb24gUihxKXtyZXR1cm4gdm9pZCAwPT09cS5fbWF4TGlzdGVuZXJzP2xlLmRlZmF1bHRNYXhMaXN0ZW5lcnM6cS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIHoocSxlZSx0ZSxvZSl7dmFyIHNlLGhlLHVlO2lmKE8odGUpLHZvaWQgMD09PShoZT1xLl9ldmVudHMpPyhoZT1xLl9l'@;
put 'dmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxxLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09aGUubmV3TGlzdGVuZXImJihxLmVtaXQoIm5ld0xpc3RlbmVyIixlZSx0ZS5saXN0ZW5lcj90ZS5saXN0ZW5lcjp0ZSksaGU9cS5fZXZlbnRzKSx1ZT1oZVtlZV0pLHZvaWQgMD09PXVlKXVlPWhl'@;
put 'W2VlXT10ZSwrK3EuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHVlP3VlPWhlW2VlXT1vZT9bdGUsdWVdOlt1ZSx0ZV06b2U/dWUudW5zaGlmdCh0ZSk6dWUucHVzaCh0ZSksKHNlPVIocSkpPjAmJnVlLmxlbmd0aD5zZSYmIXVlLndhcm5lZCl7dWUud2FybmVkPSEw'@;
put 'O3ZhciBjZT1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIit1ZS5sZW5ndGgrIiAiK1N0cmluZyhlZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7Y2UubmFt'@;
put 'ZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixjZS5lbWl0dGVyPXEsY2UudHlwZT1lZSxjZS5jb3VudD11ZS5sZW5ndGgsZnVuY3Rpb24geChxKXtjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihxKX0oY2UpfXJldHVybiBxfWZ1bmN0aW9uIEsoKXtpZighdGhpcy5m'@;
put 'aXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1'@;
put 'bWVudHMpfWZ1bmN0aW9uIEkocSxlZSx0ZSl7dmFyIG9lPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpxLHR5cGU6ZWUsbGlzdGVuZXI6dGV9LHNlPUsuYmluZChvZSk7cmV0dXJuIHNlLmxpc3RlbmVyPXRlLG9lLndyYXBGbj1zZSxzZX1mdW5jdGlvbiBrKHEsZWUsdGUpe3ZhciBv'@;
put 'ZT1xLl9ldmVudHM7aWYodm9pZCAwPT09b2UpcmV0dXJuW107dmFyIHNlPW9lW2VlXTtyZXR1cm4gdm9pZCAwPT09c2U/W106ImZ1bmN0aW9uIj09dHlwZW9mIHNlP3RlP1tzZS5saXN0ZW5lcnx8c2VdOltzZV06dGU/ZnVuY3Rpb24gQihxKXtmb3IodmFyIGVlPW5ldyBBcnJheShxLmxlbmd0'@;
put 'aCksdGU9MDt0ZTxlZS5sZW5ndGg7Kyt0ZSllZVt0ZV09cVt0ZV0ubGlzdGVuZXJ8fHFbdGVdO3JldHVybiBlZX0oc2UpOmooc2Usc2UubGVuZ3RoKX1mdW5jdGlvbiBFKHEpe3ZhciBlZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09ZWUpe3ZhciB0ZT1lZVtxXTtpZigiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgdGUpcmV0dXJuIDE7aWYodm9pZCAwIT09dGUpcmV0dXJuIHRlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBqKHEsZWUpe2Zvcih2YXIgdGU9bmV3IEFycmF5KGVlKSxvZT0wO29lPGVlOysrb2UpdGVbb2VdPXFbb2VdO3JldHVybiB0ZX1mdW5jdGlvbiBVKHEsZWUsdGUsb2Upe2lm'@;
put 'KCJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uKW9lLm9uY2U/cS5vbmNlKGVlLHRlKTpxLm9uKGVlLHRlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBxLmFkZEV2ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJlbWl0dGVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUg'@;
put 'RXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHEpO3EuYWRkRXZlbnRMaXN0ZW5lcihlZSxmdW5jdGlvbiBzZShoZSl7b2Uub25jZSYmcS5yZW1vdmVFdmVudExpc3RlbmVyKGVlLHNlKSx0ZShoZSl9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLCJkZWZhdWx0TWF4TGlz'@;
put 'dGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTX0sc2V0OmZ1bmN0aW9uKHEpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cTwwfHxtKHEpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiBy'@;
put 'YW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrcSsiLiIpO009cX19KSxsZS5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhp'@;
put 'cy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxsZS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXtpZigibnVtYmVyIiE9dHlwZW9mIGVlfHxl'@;
put 'ZTwwfHxtKGVlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2VlKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1lZSx0aGlzfSxsZS5wcm90b3R5'@;
put 'cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcyl9LGxlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlPVtdLG9lPTE7b2U8YXJndW1lbnRzLmxlbmd0aDtvZSsrKXRlLnB1c2goYXJndW1lbnRzW29lXSk7dmFyIHNlPSJlcnJvciI9PT1lZSxo'@;
put 'ZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aGUpc2U9c2UmJnZvaWQgMD09PWhlLmVycm9yO2Vsc2UgaWYoIXNlKXJldHVybiExO2lmKHNlKXt2YXIgdWU7aWYodGUubGVuZ3RoPjAmJih1ZT10ZVswXSksdWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyB1ZTt2YXIgY2U9bmV3IEVycm9yKCJV'@;
put 'bmhhbmRsZWQgZXJyb3IuIisodWU/IiAoIit1ZS5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGNlLmNvbnRleHQ9dWUsY2V9dmFyIEc9aGVbZWVdO2lmKHZvaWQgMD09PUcpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEcpRihHLHRoaXMsdGUpO2Vsc2V7dmFyIGI9Ry5sZW5ndGgsRD1q'@;
put 'KEcsYik7Zm9yKG9lPTA7b2U8YjsrK29lKUYoRFtvZV0sdGhpcyx0ZSl9cmV0dXJuITB9LGxlLnByb3RvdHlwZS5vbj1sZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZWUsdGUpe3JldHVybiB6KHRoaXMsZWUsdGUsITEpfSxsZS5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1'@;
put 'bmN0aW9uKGVlLHRlKXtyZXR1cm4geih0aGlzLGVlLHRlLCEwKX0sbGUucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oZWUsdGUpe3JldHVybiBPKHRlKSx0aGlzLm9uKGVlLEkodGhpcyxlZSx0ZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGVlLHRl'@;
put 'KXtyZXR1cm4gTyh0ZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoZWUsSSh0aGlzLGVlLHRlKSksdGhpc30sbGUucHJvdG90eXBlLm9mZj1sZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZSxzZSxoZSx1ZSxjZTtpZihPKHRlKSx2b2lkIDA9PT0oc2U9dGhp'@;
put 'cy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0ob2U9c2VbZWVdKSlyZXR1cm4gdGhpcztpZihvZT09PXRlfHxvZS5saXN0ZW5lcj09PXRlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBzZVtlZV0sc2UucmVt'@;
put 'b3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGVlLG9lLmxpc3RlbmVyfHx0ZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG9lKXtmb3IoaGU9LTEsdWU9b2UubGVuZ3RoLTE7dWU+PTA7dWUtLSlpZihvZVt1ZV09PT10ZXx8b2VbdWVdLmxpc3RlbmVyPT09dGUp'@;
put 'e2NlPW9lW3VlXS5saXN0ZW5lcixoZT11ZTticmVha31pZihoZTwwKXJldHVybiB0aGlzOzA9PT1oZT9vZS5zaGlmdCgpOmZ1bmN0aW9uIFYocSxlZSl7Zm9yKDtlZSsxPHEubGVuZ3RoO2VlKyspcVtlZV09cVtlZSsxXTtxLnBvcCgpfShvZSxoZSksMT09PW9lLmxlbmd0aCYmKHNlW2VlXT1v'@;
put 'ZVswXSksdm9pZCAwIT09c2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGVlLGNlfHx0ZSl9cmV0dXJuIHRoaXN9LGxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZWUpe3ZhciB0ZSxvZSxzZTtpZih2b2lkIDA9PT0ob2U9dGhpcy5f'@;
put 'ZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1vZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PW9lW2VlXSYmKDA9PS0tdGhpcy5fZXZl'@;
put 'bnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIG9lW2VlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHVlLGhlPU9iamVjdC5rZXlzKG9lKTtmb3Ioc2U9MDtzZTxoZS5sZW5ndGg7KytzZSkicmVtb3ZlTGlzdGVuZXIiIT09KHVlPWhl'@;
put 'W3NlXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKHVlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZih0'@;
put 'ZT1vZVtlZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoZWUsdGUpO2Vsc2UgaWYodm9pZCAwIT09dGUpZm9yKHNlPXRlLmxlbmd0aC0xO3NlPj0wO3NlLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihlZSx0ZVtzZV0pO3JldHVybiB0aGlzfSxsZS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGVl'@;
put 'KXtyZXR1cm4gayh0aGlzLGVlLCEwKX0sbGUucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlZSl7cmV0dXJuIGsodGhpcyxlZSwhMSl9LGxlLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHEubGlzdGVuZXJDb3VudD9xLmxpc3Rl'@;
put 'bmVyQ291bnQoZWUpOkUuY2FsbChxLGVlKX0sbGUucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9RSxsZS5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP2FlKHRoaXMuX2V2ZW50cyk6W119fSwzNjUwNTooYXQsSWUsRik9Pnt2YXIgYWU9'@;
put 'Rig4NDMpLkJ1ZmZlcix4PUYoNzU4MjkpO2F0LmV4cG9ydHM9ZnVuY3Rpb24gbShsZSxNLE8sUil7aWYoYWUuaXNCdWZmZXIobGUpfHwobGU9YWUuZnJvbShsZSwiYmluYXJ5IikpLE0mJihhZS5pc0J1ZmZlcihNKXx8KE09YWUuZnJvbShNLCJiaW5hcnkiKSksOCE9PU0ubGVuZ3RoKSl0aHJv'@;
put 'dyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgej1PLzgsSz1hZS5hbGxvYyh6KSxJPWFlLmFsbG9jKFJ8fDApLGs9YWUuYWxsb2MoMCk7ej4wfHxSPjA7KXt2YXIgRT1uZXcgeDtFLnVwZGF0ZShrKSxFLnVwZGF0ZShs'@;
put 'ZSksTSYmRS51cGRhdGUoTSksaz1FLmRpZ2VzdCgpO3ZhciBqPTA7aWYoej4wKXt2YXIgVj1LLmxlbmd0aC16O2o9TWF0aC5taW4oeixrLmxlbmd0aCksay5jb3B5KEssViwwLGopLHotPWp9aWYoajxrLmxlbmd0aCYmUj4wKXt2YXIgQj1JLmxlbmd0aC1SLFk9TWF0aC5taW4oUixrLmxlbmd0'@;
put 'aC1qKTtrLmNvcHkoSSxCLGosaitZKSxSLT1ZfX1yZXR1cm4gay5maWxsKDApLHtrZXk6SyxpdjpJfX19LDYwMzgwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoOTY3NDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBNKE8pe3guY2FsbCh0aGlzKSx0aGlz'@;
put 'Ll9ibG9jaz1hZS5hbGxvY1Vuc2FmZShPKSx0aGlzLl9ibG9ja1NpemU9Tyx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfUYoNjY2OTgpKE0seCksTS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihPLFIseil7dmFyIEs9'@;
put 'bnVsbDt0cnl7dGhpcy51cGRhdGUoTyxSKX1jYXRjaChJKXtLPUl9eihLKX0sTS5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE8pe3ZhciBSPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaCh6KXtSPXp9TyhSKX0sTS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8s'@;
put 'Uil7aWYoZnVuY3Rpb24gbGUoTyxSKXtpZighYWUuaXNCdWZmZXIoTykmJiJzdHJpbmciIT10eXBlb2YgTyl0aHJvdyBuZXcgVHlwZUVycm9yKFIrIiBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyIil9KE8sIkRhdGEiKSx0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdl'@;
put 'c3QgYWxyZWFkeSBjYWxsZWQiKTthZS5pc0J1ZmZlcihPKXx8KE89YWUuZnJvbShPLFIpKTtmb3IodmFyIHo9dGhpcy5fYmxvY2ssSz0wO3RoaXMuX2Jsb2NrT2Zmc2V0K08ubGVuZ3RoLUs+PXRoaXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgST10aGlzLl9ibG9ja09mZnNldDtJPHRoaXMuX2Js'@;
put 'b2NrU2l6ZTspeltJKytdPU9bSysrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7SzxPLmxlbmd0aDspelt0aGlzLl9ibG9ja09mZnNldCsrXT1PW0srK107Zm9yKHZhciBrPTAsRT04Kk8ubGVuZ3RoO0U+MDsrK2spdGhpcy5fbGVuZ3RoW2tdKz1FLChFPXRoaXMu'@;
put 'X2xlbmd0aFtrXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhba10tPTQyOTQ5NjcyOTYqRSk7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LE0ucHJvdG90eXBlLmRp'@;
put 'Z2VzdD1mdW5jdGlvbihPKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIFI9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09TyYmKFI9Ui50b1N0cmluZyhPKSksdGhpcy5fYmxvY2suZmlsbCgw'@;
put 'KSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgej0wO3o8NDsrK3opdGhpcy5fbGVuZ3RoW3pdPTA7cmV0dXJuIFJ9LE0ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LGF0LmV4cG9ydHM9TX0sNzEw'@;
put 'NzY6KGF0LEllLEYpPT57dmFyIGFlPUllO2FlLnV0aWxzPUYoMTk4NzUpLGFlLmNvbW1vbj1GKDkyMDg1KSxhZS5zaGE9Rig1NzY1OCksYWUucmlwZW1kPUYoNDgzNDQpLGFlLmhtYWM9Rig3NjE5MiksYWUuc2hhMT1hZS5zaGEuc2hhMSxhZS5zaGEyNTY9YWUuc2hhLnNoYTI1NixhZS5zaGEy'@;
put 'MjQ9YWUuc2hhLnNoYTIyNCxhZS5zaGEzODQ9YWUuc2hhLnNoYTM4NCxhZS5zaGE1MTI9YWUuc2hhLnNoYTUxMixhZS5yaXBlbWQxNjA9YWUucmlwZW1kLnJpcGVtZDE2MH0sOTIwODU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoNTc3OTgpO2Z1bmN0aW9u'@;
put 'IG0oKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3Ry'@;
put 'ZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfUllLkJsb2NrSGFzaD1tLG0ucHJvdG90eXBlLnVwZGF0ZT1m'@;
put 'dW5jdGlvbihNLE8pe2lmKE09YWUudG9BcnJheShNLE8pLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdChNKTpNLHRoaXMucGVuZGluZ1RvdGFsKz1NLmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBSPShNPXRoaXMucGVu'@;
put 'ZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9TS5zbGljZShNLmxlbmd0aC1SLE0ubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSxNPWFlLmpvaW4zMihNLDAsTS5sZW5ndGgtUix0aGlzLmVuZGlhbik7Zm9yKHZhciB6PTA7'@;
put 'ejxNLmxlbmd0aDt6Kz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZShNLHoseit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sbS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSkseChudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlz'@;
put 'Ll9kaWdlc3QoTSl9LG0ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgTT10aGlzLnBlbmRpbmdUb3RhbCxPPXRoaXMuX2RlbHRhOCxSPU8tKE0rdGhpcy5wYWRMZW5ndGgpJU8sej1uZXcgQXJyYXkoUit0aGlzLnBhZExlbmd0aCk7elswXT0xMjg7Zm9yKHZhciBLPTE7SzxSO0srKyl6'@;
put 'W0tdPTA7aWYoTTw8PTMsImJpZyI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBJPTg7STx0aGlzLnBhZExlbmd0aDtJKyspeltLKytdPTA7eltLKytdPTAseltLKytdPTAseltLKytdPTAseltLKytdPTAseltLKytdPU0+Pj4yNCYyNTUseltLKytdPU0+Pj4xNiYyNTUseltLKytdPU0+Pj44JjI1'@;
put 'NSx6W0srK109MjU1Jk19ZWxzZSBmb3IoeltLKytdPTI1NSZNLHpbSysrXT1NPj4+OCYyNTUseltLKytdPU0+Pj4xNiYyNTUseltLKytdPU0+Pj4yNCYyNTUseltLKytdPTAseltLKytdPTAseltLKytdPTAseltLKytdPTAsST04O0k8dGhpcy5wYWRMZW5ndGg7SSsrKXpbSysrXT0wO3JldHVy'@;
put 'biB6fX0sNzYxOTI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoNTc3OTgpO2Z1bmN0aW9uIG0obGUsTSxPKXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG0obGUsTSxPKTt0aGlzLkhhc2g9bGUsdGhpcy5ibG9ja1NpemU9bGUuYmxvY2tT'@;
put 'aXplLzgsdGhpcy5vdXRTaXplPWxlLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoYWUudG9BcnJheShNLE8pKX1hdC5leHBvcnRzPW0sbS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTSl7TS5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihNPShu'@;
put 'ZXcgdGhpcy5IYXNoKS51cGRhdGUoTSkuZGlnZXN0KCkpLHgoTS5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIE89TS5sZW5ndGg7Tzx0aGlzLmJsb2NrU2l6ZTtPKyspTS5wdXNoKDApO2ZvcihPPTA7TzxNLmxlbmd0aDtPKyspTVtPXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0'@;
put 'aGlzLkhhc2gpLnVwZGF0ZShNKSxPPTA7TzxNLmxlbmd0aDtPKyspTVtPXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShNKX0sbS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE0sTyl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKE0sTyksdGhpc30sbS5wcm90b3R5'@;
put 'cGUuZGlnZXN0PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChNKX19LDQ4MzQ0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDkyMDg1KSxtPWFlLnJvdGwzMixsZT1h'@;
put 'ZS5zdW0zMixNPWFlLnN1bTMyXzMsTz1hZS5zdW0zMl80LFI9eC5CbG9ja0hhc2g7ZnVuY3Rpb24geigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgejtSLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4'@;
put 'NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24gSyhZLFgsVSxxKXtyZXR1cm4gWTw9MTU/WF5VXnE6WTw9MzE/WCZVfH5YJnE6WTw9NDc/KFh8flUpXnE6WTw9NjM/WCZxfFUmfnE6WF4oVXx+cSl9ZnVuY3Rpb24gayhZKXtyZXR1cm4gWTw9MTU/MTM1MjgyOTkyNjpZPD0z'@;
put 'MT8xNTQ4NjAzNjg0Olk8PTQ3PzE4MzYwNzI2OTE6WTw9NjM/MjA1Mzk5NDIxNzowfWFlLmluaGVyaXRzKHosUiksSWUucmlwZW1kMTYwPXosei5ibG9ja1NpemU9NTEyLHoub3V0U2l6ZT0xNjAsei5obWFjU3RyZW5ndGg9MTkyLHoucGFkTGVuZ3RoPTY0LHoucHJvdG90eXBlLl91cGRhdGU9'@;
put 'ZnVuY3Rpb24oWCxVKXtmb3IodmFyIHE9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSx0ZT10aGlzLmhbMl0sb2U9dGhpcy5oWzNdLHNlPXRoaXMuaFs0XSxoZT1xLHVlPWVlLGNlPXRlLEc9b2UsYj1zZSxEPTA7RDw4MDtEKyspe3ZhciBIPWxlKG0oTyhxLEsoRCxlZSx0ZSxvZSksWFtFW0RdK1Vd'@;
put 'LChZPUQpPD0xNT8wOlk8PTMxPzE1MTg1MDAyNDk6WTw9NDc/MTg1OTc3NTM5MzpZPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4MzgpLFZbRF0pLHNlKTtxPXNlLHNlPW9lLG9lPW0odGUsMTApLHRlPWVlLGVlPUgsSD1sZShtKE8oaGUsSyg3OS1ELHVlLGNlLEcpLFhbaltEXStVXSxrKEQpKSxC'@;
put 'W0RdKSxiKSxoZT1iLGI9RyxHPW0oY2UsMTApLGNlPXVlLHVlPUh9dmFyIFk7SD1NKHRoaXMuaFsxXSx0ZSxHKSx0aGlzLmhbMV09TSh0aGlzLmhbMl0sb2UsYiksdGhpcy5oWzJdPU0odGhpcy5oWzNdLHNlLGhlKSx0aGlzLmhbM109TSh0aGlzLmhbNF0scSx1ZSksdGhpcy5oWzRdPU0odGhp'@;
put 'cy5oWzBdLGVlLGNlKSx0aGlzLmhbMF09SH0sei5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihYKXtyZXR1cm4iaGV4Ij09PVg/YWUudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOmFlLnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIEU9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEs'@;
put 'MTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10s'@;
put 'aj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0'@;
put 'LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxWPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwx'@;
put 'NCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxCPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYs'@;
put 'NiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sNTc2NTg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO0llLnNoYTE9Rig3NTAxMCksSWUuc2hhMjI0'@;
put 'PUYoODM1NzgpLEllLnNoYTI1Nj1GKDk3ODU3KSxJZS5zaGEzODQ9Rig2ODcyMyksSWUuc2hhNTEyPUYoNDUzMDQpfSw3NTAxMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1GKDcyMjEpLGxlPWFlLnJvdGwzMixNPWFlLnN1bTMyLE89YWUu'@;
put 'c3VtMzJfNSxSPW0uZnRfMSx6PXguQmxvY2tIYXNoLEs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIEkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEk7ei5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIz'@;
put 'MjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfWFlLmluaGVyaXRzKEkseiksYXQuZXhwb3J0cz1JLEkuYmxvY2tTaXplPTUxMixJLm91dFNpemU9MTYwLEkuaG1hY1N0cmVuZ3RoPTgwLEkucGFkTGVuZ3RoPTY0LEkucHJvdG90eXBl'@;
put 'Ll91cGRhdGU9ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFY9dGhpcy5XLEI9MDtCPDE2O0IrKylWW0JdPUVbaitCXTtmb3IoO0I8Vi5sZW5ndGg7QisrKVZbQl09bGUoVltCLTNdXlZbQi04XV5WW0ItMTRdXlZbQi0xNl0sMSk7dmFyIFk9dGhpcy5oWzBdLFg9dGhpcy5oWzFdLFU9dGhpcy5oWzJd'@;
put 'LHE9dGhpcy5oWzNdLGVlPXRoaXMuaFs0XTtmb3IoQj0wO0I8Vi5sZW5ndGg7QisrKXt2YXIgdGU9fn4oQi8yMCksb2U9TyhsZShZLDUpLFIodGUsWCxVLHEpLGVlLFZbQl0sS1t0ZV0pO2VlPXEscT1VLFU9bGUoWCwzMCksWD1ZLFk9b2V9dGhpcy5oWzBdPU0odGhpcy5oWzBdLFkpLHRoaXMu'@;
put 'aFsxXT1NKHRoaXMuaFsxXSxYKSx0aGlzLmhbMl09TSh0aGlzLmhbMl0sVSksdGhpcy5oWzNdPU0odGhpcy5oWzNdLHEpLHRoaXMuaFs0XT1NKHRoaXMuaFs0XSxlZSl9LEkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oRSl7cmV0dXJuImhleCI9PT1FP2FlLnRvSGV4MzIodGhpcy5oLCJi'@;
put 'aWciKTphZS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw4MzU3ODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5Nzg1Nyk7ZnVuY3Rpb24gbSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG0pKXJldHVybiBuZXcgbTt4LmNhbGwodGhpcyksdGhpcy5oPVszMjM4'@;
put 'MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1hZS5pbmhlcml0cyhtLHgpLGF0LmV4cG9ydHM9bSxtLmJsb2NrU2l6ZT01MTIsbS5vdXRTaXplPTIyNCxtLmhtYWNTdHJlbmd0aD0xOTIsbS5w'@;
put 'YWRMZW5ndGg9NjQsbS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihNKXtyZXR1cm4iaGV4Ij09PU0/YWUudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw5Nzg1NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7'@;
put 'dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1GKDcyMjEpLGxlPUYoNTc3OTgpLE09YWUuc3VtMzIsTz1hZS5zdW0zMl80LFI9YWUuc3VtMzJfNSx6PW0uY2gzMixLPW0ubWFqMzIsST1tLnMwXzI1NixrPW0uczFfMjU2LEU9bS5nMF8yNTYsaj1tLmcxXzI1NixWPXguQmxvY2tIYXNoLEI9'@;
put 'WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMy'@;
put 'NDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzky'@;
put 'Njk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1Mjgw'@;
put 'NCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2'@;
put 'NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gWSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFkpKXJldHVybiBuZXcgWTtWLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjky'@;
put 'NCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPUIsdGhpcy5XPW5ldyBBcnJheSg2NCl9YWUuaW5oZXJpdHMoWSxWKSxhdC5leHBvcnRzPVksWS5ibG9ja1NpemU9NTEyLFkub3V0U2l6ZT0yNTYsWS5obWFjU3RyZW5ndGg9MTkyLFkucGFkTGVuZ3RoPTY0LFkucHJvdG90eXBlLl91cGRh'@;
put 'dGU9ZnVuY3Rpb24oVSxxKXtmb3IodmFyIGVlPXRoaXMuVyx0ZT0wO3RlPDE2O3RlKyspZWVbdGVdPVVbcSt0ZV07Zm9yKDt0ZTxlZS5sZW5ndGg7dGUrKyllZVt0ZV09TyhqKGVlW3RlLTJdKSxlZVt0ZS03XSxFKGVlW3RlLTE1XSksZWVbdGUtMTZdKTt2YXIgb2U9dGhpcy5oWzBdLHNlPXRo'@;
put 'aXMuaFsxXSxoZT10aGlzLmhbMl0sdWU9dGhpcy5oWzNdLGNlPXRoaXMuaFs0XSxHPXRoaXMuaFs1XSxiPXRoaXMuaFs2XSxEPXRoaXMuaFs3XTtmb3IobGUodGhpcy5rLmxlbmd0aD09PWVlLmxlbmd0aCksdGU9MDt0ZTxlZS5sZW5ndGg7dGUrKyl7dmFyIEg9UihELGsoY2UpLHooY2UsRyxi'@;
put 'KSx0aGlzLmtbdGVdLGVlW3RlXSksTj1NKEkob2UpLEsob2Usc2UsaGUpKTtEPWIsYj1HLEc9Y2UsY2U9TSh1ZSxIKSx1ZT1oZSxoZT1zZSxzZT1vZSxvZT1NKEgsTil9dGhpcy5oWzBdPU0odGhpcy5oWzBdLG9lKSx0aGlzLmhbMV09TSh0aGlzLmhbMV0sc2UpLHRoaXMuaFsyXT1NKHRoaXMu'@;
put 'aFsyXSxoZSksdGhpcy5oWzNdPU0odGhpcy5oWzNdLHVlKSx0aGlzLmhbNF09TSh0aGlzLmhbNF0sY2UpLHRoaXMuaFs1XT1NKHRoaXMuaFs1XSxHKSx0aGlzLmhbNl09TSh0aGlzLmhbNl0sYiksdGhpcy5oWzddPU0odGhpcy5oWzddLEQpfSxZLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9u'@;
put 'KFUpe3JldHVybiJoZXgiPT09VT9hZS50b0hleDMyKHRoaXMuaCwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNjg3MjM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoNDUzMDQpO2Z1bmN0aW9uIG0oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBt'@;
put 'KSlyZXR1cm4gbmV3IG07eC5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUs'@;
put 'MzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19YWUuaW5oZXJpdHMobSx4KSxhdC5leHBvcnRzPW0sbS5ibG9ja1NpemU9MTAyNCxtLm91dFNpemU9Mzg0LG0uaG1hY1N0cmVuZ3RoPTE5MixtLnBhZExlbmd0aD0xMjgsbS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5j'@;
put 'dGlvbihNKXtyZXR1cm4iaGV4Ij09PU0/YWUudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDQ1MzA0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDkyMDg1KSxtPUYoNTc3'@;
put 'OTgpLGxlPWFlLnJvdHI2NF9oaSxNPWFlLnJvdHI2NF9sbyxPPWFlLnNocjY0X2hpLFI9YWUuc2hyNjRfbG8sej1hZS5zdW02NCxLPWFlLnN1bTY0X2hpLEk9YWUuc3VtNjRfbG8saz1hZS5zdW02NF80X2hpLEU9YWUuc3VtNjRfNF9sbyxqPWFlLnN1bTY0XzVfaGksVj1hZS5zdW02NF81X2xv'@;
put 'LEI9eC5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3'@;
put 'MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEw'@;
put 'Myw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1'@;
put 'NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2'@;
put 'OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1'@;
put 'MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQs'@;
put 'MzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3'@;
put 'NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0'@;
put 'NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTky'@;
put 'LDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2'@;
put 'NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIFgoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBYKSlyZXR1cm4gbmV3IFg7Qi5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3'@;
put 'OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAz'@;
put 'MzIwOV0sdGhpcy5rPVksdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIFUoSCxOLGcsQyxTKXt2YXIgdj1IJmdefkgmUztyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBxKEgsTixnLEMsUyx2KXt2YXIgcD1OJkNefk4mdjtyZXR1cm4gcDwwJiYocCs9NDI5NDk2'@;
put 'NzI5NikscH1mdW5jdGlvbiBlZShILE4sZyxDLFMpe3ZhciB2PUgmZ15IJlNeZyZTO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIHRlKEgsTixnLEMsUyx2KXt2YXIgcD1OJkNeTiZ2XkMmdjtyZXR1cm4gcDwwJiYocCs9NDI5NDk2NzI5NikscH1mdW5jdGlvbiBvZShI'@;
put 'LE4pe3ZhciB2PWxlKEgsTiwyOClebGUoTixILDIpXmxlKE4sSCw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBzZShILE4pe3ZhciB2PU0oSCxOLDI4KV5NKE4sSCwyKV5NKE4sSCw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBoZShI'@;
put 'LE4pe3ZhciB2PWxlKEgsTiwxNClebGUoSCxOLDE4KV5sZShOLEgsOSk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gdWUoSCxOKXt2YXIgdj1NKEgsTiwxNCleTShILE4sMTgpXk0oTixILDkpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIGNl'@;
put 'KEgsTil7dmFyIHY9bGUoSCxOLDEpXmxlKEgsTiw4KV5PKEgsTiw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBHKEgsTil7dmFyIHY9TShILE4sMSleTShILE4sOCleUihILE4sNyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gYihILE4p'@;
put 'e3ZhciB2PWxlKEgsTiwxOSlebGUoTixILDI5KV5PKEgsTiw2KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBEKEgsTil7dmFyIHY9TShILE4sMTkpXk0oTixILDI5KV5SKEgsTiw2KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1hZS5pbmhlcml0cyhYLEIp'@;
put 'LGF0LmV4cG9ydHM9WCxYLmJsb2NrU2l6ZT0xMDI0LFgub3V0U2l6ZT01MTIsWC5obWFjU3RyZW5ndGg9MTkyLFgucGFkTGVuZ3RoPTEyOCxYLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPXRoaXMuVyxTPTA7UzwzMjtTKyspQ1tTXT1OW2crU107Zm9y'@;
put 'KDtTPEMubGVuZ3RoO1MrPTIpe3ZhciB2PWIoQ1tTLTRdLENbUy0zXSkscD1EKENbUy00XSxDW1MtM10pLHc9Q1tTLTE0XSxKPUNbUy0xM10sbmU9Y2UoQ1tTLTMwXSxDW1MtMjldKSxkZT1HKENbUy0zMF0sQ1tTLTI5XSksZmU9Q1tTLTMyXSx4ZT1DW1MtMzFdO0NbU109ayh2LHAsdyxKLG5l'@;
put 'LGRlLGZlLHhlKSxDW1MrMV09RSh2LHAsdyxKLG5lLGRlLGZlLHhlKX19LFgucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTixnKXt0aGlzLl9wcmVwYXJlQmxvY2soTixnKTt2YXIgQz10aGlzLlcsUz10aGlzLmhbMF0sdj10aGlzLmhbMV0scD10aGlzLmhbMl0sdz10aGlzLmhbM10sSj10'@;
put 'aGlzLmhbNF0sbmU9dGhpcy5oWzVdLGRlPXRoaXMuaFs2XSxmZT10aGlzLmhbN10seGU9dGhpcy5oWzhdLExlPXRoaXMuaFs5XSxGZT10aGlzLmhbMTBdLE9lPXRoaXMuaFsxMV0samU9dGhpcy5oWzEyXSxXZT10aGlzLmhbMTNdLEtlPXRoaXMuaFsxNF0sWWU9dGhpcy5oWzE1XTttKHRoaXMu'@;
put 'ay5sZW5ndGg9PT1DLmxlbmd0aCk7Zm9yKHZhciBRZT0wO1FlPEMubGVuZ3RoO1FlKz0yKXt2YXIgbHQ9S2UsUGU9WWUsYmU9aGUoeGUsTGUpLEFlPXVlKHhlLExlKSxUZT1VKHhlLDAsRmUsMCxqZSkscWU9cSgwLExlLDAsT2UsMCxXZSksWGU9dGhpcy5rW1FlXSxVZT10aGlzLmtbUWUrMV0s'@;
put 'aHQ9Q1tRZV0sTWU9Q1tRZSsxXSxEZT1qKGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0LE1lKSx6ZT1WKGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0LE1lKTtsdD1vZShTLHYpLFBlPXNlKFMsdiksYmU9ZWUoUywwLHAsMCxKKSxBZT10ZSgwLHYsMCx3LDAsbmUpO3ZhciBvdD1LKGx0LFBl'@;
put 'LGJlLEFlKSx1dD1JKGx0LFBlLGJlLEFlKTtLZT1qZSxZZT1XZSxqZT1GZSxXZT1PZSxGZT14ZSxPZT1MZSx4ZT1LKGRlLGZlLERlLHplKSxMZT1JKGZlLGZlLERlLHplKSxkZT1KLGZlPW5lLEo9cCxuZT13LHA9Uyx3PXYsUz1LKERlLHplLG90LHV0KSx2PUkoRGUsemUsb3QsdXQpfXoodGhp'@;
put 'cy5oLDAsUyx2KSx6KHRoaXMuaCwyLHAsdykseih0aGlzLmgsNCxKLG5lKSx6KHRoaXMuaCw2LGRlLGZlKSx6KHRoaXMuaCw4LHhlLExlKSx6KHRoaXMuaCwxMCxGZSxPZSkseih0aGlzLmgsMTIsamUsV2UpLHoodGhpcy5oLDE0LEtlLFllKX0sWC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlv'@;
put 'bihOKXtyZXR1cm4iaGV4Ij09PU4/YWUudG9IZXgzMih0aGlzLmgsImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDcyMjE6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciB4PUYoMTk4NzUpLnJvdHIzMjtmdW5jdGlvbiBsZShrLEUsail7cmV0dXJuIGsmRV5+ayZqfWZ1bmN0'@;
put 'aW9uIE0oayxFLGope3JldHVybiBrJkVeayZqXkUman1mdW5jdGlvbiBPKGssRSxqKXtyZXR1cm4ga15FXmp9SWUuZnRfMT1mdW5jdGlvbiBtKGssRSxqLFYpe3JldHVybiAwPT09az9sZShFLGosVik6MT09PWt8fDM9PT1rP08oRSxqLFYpOjI9PT1rP00oRSxqLFYpOnZvaWQgMH0sSWUuY2gz'@;
put 'Mj1sZSxJZS5tYWozMj1NLEllLnAzMj1PLEllLnMwXzI1Nj1mdW5jdGlvbiBSKGspe3JldHVybiB4KGssMileeChrLDEzKV54KGssMjIpfSxJZS5zMV8yNTY9ZnVuY3Rpb24geihrKXtyZXR1cm4geChrLDYpXngoaywxMSleeChrLDI1KX0sSWUuZzBfMjU2PWZ1bmN0aW9uIEsoayl7cmV0dXJu'@;
put 'IHgoayw3KV54KGssMTgpXms+Pj4zfSxJZS5nMV8yNTY9ZnVuY3Rpb24gSShrKXtyZXR1cm4geChrLDE3KV54KGssMTkpXms+Pj4xMH19LDE5ODc1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCkseD1GKDY2Njk4KTtmdW5jdGlvbiBtKEQsSCl7cmV0dXJuISg1NTI5'@;
put 'NiE9KDY0NTEyJkQuY2hhckNvZGVBdChIKSl8fEg8MHx8SCsxPj1ELmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImRC5jaGFyQ29kZUF0KEgrMSkpfWZ1bmN0aW9uIE8oRCl7cmV0dXJuKEQ+Pj4yNHxEPj4+OCY2NTI4MHxEPDw4JjE2NzExNjgwfCgyNTUmRCk8PDI0KT4+PjB9ZnVuY3Rpb24geihE'@;
put 'KXtyZXR1cm4gMT09PUQubGVuZ3RoPyIwIitEOkR9ZnVuY3Rpb24gSyhEKXtyZXR1cm4gNz09PUQubGVuZ3RoPyIwIitEOjY9PT1ELmxlbmd0aD8iMDAiK0Q6NT09PUQubGVuZ3RoPyIwMDAiK0Q6ND09PUQubGVuZ3RoPyIwMDAwIitEOjM9PT1ELmxlbmd0aD8iMDAwMDAiK0Q6Mj09PUQubGVu'@;
put 'Z3RoPyIwMDAwMDAiK0Q6MT09PUQubGVuZ3RoPyIwMDAwMDAwIitEOkR9SWUuaW5oZXJpdHM9eCxJZS50b0FycmF5PWZ1bmN0aW9uIGxlKEQsSCl7aWYoQXJyYXkuaXNBcnJheShEKSlyZXR1cm4gRC5zbGljZSgpO2lmKCFEKXJldHVybltdO3ZhciBOPVtdO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'RClpZihIKXtpZigiaGV4Ij09PUgpZm9yKChEPUQucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoRD0iMCIrRCksQz0wO0M8RC5sZW5ndGg7Qys9MilOLnB1c2gocGFyc2VJbnQoRFtDXStEW0MrMV0sMTYpKX1lbHNlIGZvcih2YXIgZz0wLEM9MDtDPEQubGVuZ3Ro'@;
put 'O0MrKyl7dmFyIFM9RC5jaGFyQ29kZUF0KEMpO1M8MTI4P05bZysrXT1TOlM8MjA0OD8oTltnKytdPVM+PjZ8MTkyLE5bZysrXT02MyZTfDEyOCk6bShELEMpPyhTPTY1NTM2KygoMTAyMyZTKTw8MTApKygxMDIzJkQuY2hhckNvZGVBdCgrK0MpKSxOW2crK109Uz4+MTh8MjQwLE5bZysrXT1T'@;
put 'Pj4xMiY2M3wxMjgsTltnKytdPVM+PjYmNjN8MTI4LE5bZysrXT02MyZTfDEyOCk6KE5bZysrXT1TPj4xMnwyMjQsTltnKytdPVM+PjYmNjN8MTI4LE5bZysrXT02MyZTfDEyOCl9ZWxzZSBmb3IoQz0wO0M8RC5sZW5ndGg7QysrKU5bQ109MHxEW0NdO3JldHVybiBOfSxJZS50b0hleD1mdW5j'@;
put 'dGlvbiBNKEQpe2Zvcih2YXIgSD0iIixOPTA7TjxELmxlbmd0aDtOKyspSCs9eihEW05dLnRvU3RyaW5nKDE2KSk7cmV0dXJuIEh9LEllLmh0b25sPU8sSWUudG9IZXgzMj1mdW5jdGlvbiBSKEQsSCl7Zm9yKHZhciBOPSIiLGc9MDtnPEQubGVuZ3RoO2crKyl7dmFyIEM9RFtnXTsibGl0dGxl'@;
put 'Ij09PUgmJihDPU8oQykpLE4rPUsoQy50b1N0cmluZygxNikpfXJldHVybiBOfSxJZS56ZXJvMj16LEllLnplcm84PUssSWUuam9pbjMyPWZ1bmN0aW9uIEkoRCxILE4sZyl7dmFyIEM9Ti1IO2FlKEMlND09MCk7Zm9yKHZhciBTPW5ldyBBcnJheShDLzQpLHY9MCxwPUg7djxTLmxlbmd0aDt2'@;
put 'KysscCs9NClTW3ZdPSgiYmlnIj09PWc/RFtwXTw8MjR8RFtwKzFdPDwxNnxEW3ArMl08PDh8RFtwKzNdOkRbcCszXTw8MjR8RFtwKzJdPDwxNnxEW3ArMV08PDh8RFtwXSk+Pj4wO3JldHVybiBTfSxJZS5zcGxpdDMyPWZ1bmN0aW9uIGsoRCxIKXtmb3IodmFyIE49bmV3IEFycmF5KDQqRC5s'@;
put 'ZW5ndGgpLGc9MCxDPTA7ZzxELmxlbmd0aDtnKyssQys9NCl7dmFyIFM9RFtnXTsiYmlnIj09PUg/KE5bQ109Uz4+PjI0LE5bQysxXT1TPj4+MTYmMjU1LE5bQysyXT1TPj4+OCYyNTUsTltDKzNdPTI1NSZTKTooTltDKzNdPVM+Pj4yNCxOW0MrMl09Uz4+PjE2JjI1NSxOW0MrMV09Uz4+Pjgm'@;
put 'MjU1LE5bQ109MjU1JlMpfXJldHVybiBOfSxJZS5yb3RyMzI9ZnVuY3Rpb24gRShELEgpe3JldHVybiBEPj4+SHxEPDwzMi1IfSxJZS5yb3RsMzI9ZnVuY3Rpb24gaihELEgpe3JldHVybiBEPDxIfEQ+Pj4zMi1IfSxJZS5zdW0zMj1mdW5jdGlvbiBWKEQsSCl7cmV0dXJuIEQrSD4+PjB9LEll'@;
put 'LnN1bTMyXzM9ZnVuY3Rpb24gQihELEgsTil7cmV0dXJuIEQrSCtOPj4+MH0sSWUuc3VtMzJfND1mdW5jdGlvbiBZKEQsSCxOLGcpe3JldHVybiBEK0grTitnPj4+MH0sSWUuc3VtMzJfNT1mdW5jdGlvbiBYKEQsSCxOLGcsQyl7cmV0dXJuIEQrSCtOK2crQz4+PjB9LEllLnN1bTY0PWZ1bmN0'@;
put 'aW9uIFUoRCxILE4sZyl7dmFyIHY9ZytEW0grMV0+Pj4wO0RbSF09KHY8Zz8xOjApK04rRFtIXT4+PjAsRFtIKzFdPXZ9LEllLnN1bTY0X2hpPWZ1bmN0aW9uIHEoRCxILE4sZyl7cmV0dXJuKEgrZz4+PjA8SD8xOjApK0QrTj4+PjB9LEllLnN1bTY0X2xvPWZ1bmN0aW9uIGVlKEQsSCxOLGcp'@;
put 'e3JldHVybiBIK2c+Pj4wfSxJZS5zdW02NF80X2hpPWZ1bmN0aW9uIHRlKEQsSCxOLGcsQyxTLHYscCl7dmFyIHc9MCxKPUg7cmV0dXJuIHcrPShKPUorZz4+PjApPEg/MTowLHcrPShKPUorUz4+PjApPFM/MTowLEQrTitDK3YrKHcrPShKPUorcD4+PjApPHA/MTowKT4+PjB9LEllLnN1bTY0'@;
put 'XzRfbG89ZnVuY3Rpb24gb2UoRCxILE4sZyxDLFMsdixwKXtyZXR1cm4gSCtnK1MrcD4+PjB9LEllLnN1bTY0XzVfaGk9ZnVuY3Rpb24gc2UoRCxILE4sZyxDLFMsdixwLHcsSil7dmFyIG5lPTAsZGU9SDtyZXR1cm4gbmUrPShkZT1kZStnPj4+MCk8SD8xOjAsbmUrPShkZT1kZStTPj4+MCk8'@;
put 'Uz8xOjAsbmUrPShkZT1kZStwPj4+MCk8cD8xOjAsRCtOK0Mrdit3KyhuZSs9KGRlPWRlK0o+Pj4wKTxKPzE6MCk+Pj4wfSxJZS5zdW02NF81X2xvPWZ1bmN0aW9uIGhlKEQsSCxOLGcsQyxTLHYscCx3LEope3JldHVybiBIK2crUytwK0o+Pj4wfSxJZS5yb3RyNjRfaGk9ZnVuY3Rpb24gdWUo'@;
put 'RCxILE4pe3JldHVybihIPDwzMi1OfEQ+Pj5OKT4+PjB9LEllLnJvdHI2NF9sbz1mdW5jdGlvbiBjZShELEgsTil7cmV0dXJuKEQ8PDMyLU58SD4+Pk4pPj4+MH0sSWUuc2hyNjRfaGk9ZnVuY3Rpb24gRyhELEgsTil7cmV0dXJuIEQ+Pj5OfSxJZS5zaHI2NF9sbz1mdW5jdGlvbiBiKEQsSCxO'@;
put 'KXtyZXR1cm4oRDw8MzItTnxIPj4+Tik+Pj4wfX0sOTI0NDc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDcxMDc2KSx4PUYoNzgyNDcpLG09Rig1Nzc5OCk7ZnVuY3Rpb24gbGUoTSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbGUpKXJldHVybiBuZXcgbGUoTSk7dGhpcy5oYXNo'@;
put 'PU0uaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISFNLnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PU0ubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGws'@;
put 'dGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIE89eC50b0FycmF5KE0uZW50cm9weSxNLmVudHJvcHlFbmN8fCJoZXgiKSxSPXgudG9BcnJheShNLm5vbmNlLE0ubm9uY2VFbmN8fCJoZXgiKSx6PXgudG9BcnJheShNLnBlcnMsTS5wZXJzRW5jfHwiaGV4Iik7bShPLmxlbmd0aD49dGhpcy5t'@;
put 'aW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChPLFIseil9YXQuZXhwb3J0cz1sZSxsZS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTyxSLHope3ZhciBLPU8uY29uY2F0KFIpLmNvbmNhdCh6'@;
put 'KTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBJPTA7STx0aGlzLlYubGVuZ3RoO0krKyl0aGlzLktbSV09MCx0aGlzLlZbSV09MTt0aGlzLl91cGRhdGUoSyksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJ'@;
put 'bnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LGxlLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYWUuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sbGUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTyl7dmFyIFI9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0'@;
put 'ZShbMF0pO08mJihSPVIudXBkYXRlKE8pKSx0aGlzLks9Ui5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLE8mJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShPKS5kaWdlc3QoKSx0aGlzLlY9'@;
put 'dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sbGUucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihPLFIseixLKXsic3RyaW5nIiE9dHlwZW9mIFImJihLPXosej1SLFI9bnVsbCksTz14LnRvQXJyYXkoTyxSKSx6PXgudG9BcnJheSh6LEspLG0oTy5sZW5ndGg+PXRoaXMu'@;
put 'bWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShPLmNvbmNhdCh6fHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxsZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oTyxSLHosSyl7aWYodGhp'@;
put 'cy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIFImJihLPXosej1SLFI9bnVsbCkseiYmKHo9eC50b0FycmF5KHosS3x8ImhleCIpLHRoaXMuX3VwZGF0ZSh6KSk7Zm9yKHZhciBJPVtdO0ku'@;
put 'bGVuZ3RoPE87KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksST1JLmNvbmNhdCh0aGlzLlYpO3ZhciBrPUkuc2xpY2UoMCxPKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHopLHRoaXMuX3Jlc2VlZCsrLHguZW5jb2RlKGssUil9fSw1NTgzMzooYXQsSWUsRik9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcjtJZS5fZGJjcz1LO2Zvcih2YXIgeD0tMSxtPS0yLGxlPS0xMCxNPS0xZTMsTz1uZXcgQXJyYXkoMjU2KSx6PTA7ejwyNTY7eisrKU9bel09eDtmdW5jdGlvbiBLKGosVil7aWYodGhpcy5lbmNvZGluZ05hbWU9ai5lbmNvZGluZ05h'@;
put 'bWUsIWopdGhyb3cgbmV3IEVycm9yKCJEQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLiIpO2lmKCFqLnRhYmxlKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrdGhpcy5lbmNvZGluZ05hbWUrIicgaGFzIG5vIGRhdGEuIik7dmFyIEI9ai50YWJsZSgpO3RoaXMuZGVj'@;
put 'b2RlVGFibGVzPVtdLHRoaXMuZGVjb2RlVGFibGVzWzBdPU8uc2xpY2UoMCksdGhpcy5kZWNvZGVUYWJsZVNlcT1bXTtmb3IodmFyIFk9MDtZPEIubGVuZ3RoO1krKyl0aGlzLl9hZGREZWNvZGVDaHVuayhCW1ldKTt0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1WLmRlZmF1bHRDaGFyVW5pY29k'@;
put 'ZSx0aGlzLmVuY29kZVRhYmxlPVtdLHRoaXMuZW5jb2RlVGFibGVTZXE9W107dmFyIFg9e307aWYoai5lbmNvZGVTa2lwVmFscylmb3IoWT0wO1k8ai5lbmNvZGVTa2lwVmFscy5sZW5ndGg7WSsrKXt2YXIgVT1qLmVuY29kZVNraXBWYWxzW1ldO2lmKCJudW1iZXIiPT10eXBlb2YgVSlYW1Vd'@;
put 'PSEwO2Vsc2UgZm9yKHZhciBxPVUuZnJvbTtxPD1VLnRvO3ErKylYW3FdPSEwfWlmKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZSgwLDAsWCksai5lbmNvZGVBZGQpZm9yKHZhciBlZSBpbiBqLmVuY29kZUFkZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoai5lbmNvZGVBZGQs'@;
put 'ZWUpJiZ0aGlzLl9zZXRFbmNvZGVDaGFyKGVlLmNoYXJDb2RlQXQoMCksai5lbmNvZGVBZGRbZWVdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdW1YuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldLHRoaXMuZGVmQ2hhclNCPT09eCYmKHRoaXMuZGVm'@;
put 'Q2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhpcy5kZWZDaGFyU0I9PT14JiYodGhpcy5kZWZDaGFyU0I9Ij8iLmNoYXJDb2RlQXQoMCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBqLmdiMTgwMzApe3RoaXMuZ2IxODAzMD1qLmdiMTgwMzAoKTt2YXIgdGU9dGhpcy5kZWNvZGVUYWJs'@;
put 'ZXMubGVuZ3RoLG9lPXRoaXMuZGVjb2RlVGFibGVzW3RlXT1PLnNsaWNlKDApLHNlPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxoZT10aGlzLmRlY29kZVRhYmxlc1tzZV09Ty5zbGljZSgwKTtmb3IoWT0xMjk7WTw9MjU0O1krKyl7dmFyIGNlPXRoaXMuZGVjb2RlVGFibGVzW00tdGhpcy5k'@;
put 'ZWNvZGVUYWJsZXNbMF1bWV1dO2ZvcihxPTQ4O3E8PTU3O3ErKyljZVtxXT1NLXRlfWZvcihZPTEyOTtZPD0yNTQ7WSsrKW9lW1ldPU0tc2U7Zm9yKFk9NDg7WTw9NTc7WSsrKWhlW1ldPW19fWZ1bmN0aW9uIEkoaixWKXt0aGlzLmxlYWRTdXJyb2dhdGU9LTEsdGhpcy5zZXFPYmo9dm9pZCAw'@;
put 'LHRoaXMuZW5jb2RlVGFibGU9Vi5lbmNvZGVUYWJsZSx0aGlzLmVuY29kZVRhYmxlU2VxPVYuZW5jb2RlVGFibGVTZXEsdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Vi5kZWZDaGFyU0IsdGhpcy5nYjE4MDMwPVYuZ2IxODAzMH1mdW5jdGlvbiBrKGosVil7dGhpcy5ub2RlSWR4PTAsdGhp'@;
put 'cy5wcmV2QnVmPWFlLmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPVYuZGVjb2RlVGFibGVzLHRoaXMuZGVjb2RlVGFibGVTZXE9Vi5kZWNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1WLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9Vi5nYjE4MDMwfWZ1bmN0'@;
put 'aW9uIEUoaixWKXtpZihqWzBdPlYpcmV0dXJuLTE7Zm9yKHZhciBCPTAsWT1qLmxlbmd0aDtCPFktMTspe3ZhciBYPUIrTWF0aC5mbG9vcigoWS1CKzEpLzIpO2pbWF08PVY/Qj1YOlk9WH1yZXR1cm4gQn1LLnByb3RvdHlwZS5lbmNvZGVyPUksSy5wcm90b3R5cGUuZGVjb2Rlcj1rLEsucHJv'@;
put 'dG90eXBlLl9nZXREZWNvZGVUcmllTm9kZT1mdW5jdGlvbihqKXtmb3IodmFyIFY9W107aj4wO2o+Pj04KVYucHVzaCgyNTUmaik7MD09Vi5sZW5ndGgmJlYucHVzaCgwKTtmb3IodmFyIEI9dGhpcy5kZWNvZGVUYWJsZXNbMF0sWT1WLmxlbmd0aC0xO1k+MDtZLS0pe3ZhciBYPUJbVltZXV07'@;
put 'aWYoWD09eClCW1ZbWV1dPU0tdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVzLnB1c2goQj1PLnNsaWNlKDApKTtlbHNle2lmKCEoWDw9TSkpdGhyb3cgbmV3IEVycm9yKCJPdmVyd3JpdGUgYnl0ZSBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIsIGFkZHI6ICIrai50'@;
put 'b1N0cmluZygxNikpO0I9dGhpcy5kZWNvZGVUYWJsZXNbTS1YXX19cmV0dXJuIEJ9LEsucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihqKXt2YXIgVj1wYXJzZUludChqWzBdLDE2KSxCPXRoaXMuX2dldERlY29kZVRyaWVOb2RlKFYpO1YmPTI1NTtmb3IodmFyIFk9MTtZPGou'@;
put 'bGVuZ3RoO1krKyl7dmFyIFg9altZXTtpZigic3RyaW5nIj09dHlwZW9mIFgpZm9yKHZhciBVPTA7VTxYLmxlbmd0aDspe3ZhciBxPVguY2hhckNvZGVBdChVKyspO2lmKDU1Mjk2PD1xJiZxPDU2MzIwKXt2YXIgZWU9WC5jaGFyQ29kZUF0KFUrKyk7aWYoISg1NjMyMDw9ZWUmJmVlPDU3MzQ0'@;
put 'KSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitqWzBdKTtCW1YrK109NjU1MzYrMTAyNCoocS01NTI5NikrKGVlLTU2MzIwKX1lbHNlIGlmKDQwODA8cSYmcTw9NDA5NSl7Zm9yKHZhciB0ZT00MDk1'@;
put 'LXErMixvZT1bXSxzZT0wO3NlPHRlO3NlKyspb2UucHVzaChYLmNoYXJDb2RlQXQoVSsrKSk7QltWKytdPWxlLXRoaXMuZGVjb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChvZSl9ZWxzZSBCW1YrK109cX1lbHNle2lmKCJudW1iZXIiIT10eXBlb2YgWCl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkluY29ycmVjdCB0eXBlICciK3R5cGVvZiBYKyInIGdpdmVuIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK2pbMF0pO3ZhciBoZT1CW1YtMV0rMTtmb3IoVT0wO1U8WDtVKyspQltWKytdPWhlKyt9fWlmKFY+MjU1KXRocm93IG5ldyBFcnJvcigiSW5j'@;
put 'b3JyZWN0IGNodW5rIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBhZGRyICIralswXSsiOiB0b28gbG9uZyIrVil9LEsucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQ9ZnVuY3Rpb24oail7dmFyIFY9aj4+ODtyZXR1cm4gdm9pZCAwPT09dGhpcy5lbmNvZGVUYWJsZVtWXSYmKHRoaXMu'@;
put 'ZW5jb2RlVGFibGVbVl09Ty5zbGljZSgwKSksdGhpcy5lbmNvZGVUYWJsZVtWXX0sSy5wcm90b3R5cGUuX3NldEVuY29kZUNoYXI9ZnVuY3Rpb24oaixWKXt2YXIgQj10aGlzLl9nZXRFbmNvZGVCdWNrZXQoaiksWT0yNTUmajtCW1ldPD1sZT90aGlzLmVuY29kZVRhYmxlU2VxW2xlLUJbWV1d'@;
put 'Wy0xXT1WOkJbWV09PXgmJihCW1ldPVYpfSxLLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2U9ZnVuY3Rpb24oaixWKXt2YXIgVSxCPWpbMF0sWT10aGlzLl9nZXRFbmNvZGVCdWNrZXQoQiksWD0yNTUmQjtZW1hdPD1sZT9VPXRoaXMuZW5jb2RlVGFibGVTZXFbbGUtWVtYXV06KFU9e30s'@;
put 'WVtYXSE9PXgmJihVWy0xXT1ZW1hdKSxZW1hdPWxlLXRoaXMuZW5jb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChVKSk7Zm9yKHZhciBxPTE7cTxqLmxlbmd0aC0xO3ErKyl7dmFyIGVlPVVbQl07Im9iamVjdCI9PXR5cGVvZiBlZT9VPWVlOihVPVVbQl09e30s'@;
put 'dm9pZCAwIT09ZWUmJihVWy0xXT1lZSkpfVVbQj1qW2oubGVuZ3RoLTFdXT1WfSxLLnByb3RvdHlwZS5fZmlsbEVuY29kZVRhYmxlPWZ1bmN0aW9uKGosVixCKXtmb3IodmFyIFk9dGhpcy5kZWNvZGVUYWJsZXNbal0sWD0wO1g8MjU2O1grKyl7dmFyIFU9WVtYXSxxPVYrWDtCW3FdfHwoVT49'@;
put 'MD90aGlzLl9zZXRFbmNvZGVDaGFyKFUscSk6VTw9TT90aGlzLl9maWxsRW5jb2RlVGFibGUoTS1VLHE8PDgsQik6VTw9bGUmJnRoaXMuX3NldEVuY29kZVNlcXVlbmNlKHRoaXMuZGVjb2RlVGFibGVTZXFbbGUtVV0scSkpfX0sSS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oail7Zm9yKHZh'@;
put 'ciBWPWFlLmFsbG9jKGoubGVuZ3RoKih0aGlzLmdiMTgwMzA/NDozKSksQj10aGlzLmxlYWRTdXJyb2dhdGUsWT10aGlzLnNlcU9iaixYPS0xLFU9MCxxPTA7Oyl7aWYoLTE9PT1YKXtpZihVPT1qLmxlbmd0aClicmVhazt2YXIgZWU9ai5jaGFyQ29kZUF0KFUrKyl9ZWxzZSBlZT1YLFg9LTE7'@;
put 'aWYoNTUyOTY8PWVlJiZlZTw1NzM0NClpZihlZTw1NjMyMCl7aWYoLTE9PT1CKXtCPWVlO2NvbnRpbnVlfUI9ZWUsZWU9eH1lbHNlLTEhPT1CPyhlZT02NTUzNisxMDI0KihCLTU1Mjk2KSsoZWUtNTYzMjApLEI9LTEpOmVlPXg7ZWxzZS0xIT09QiYmKFg9ZWUsZWU9eCxCPS0xKTt2YXIgdGU9'@;
put 'eDtpZih2b2lkIDAhPT1ZJiZlZSE9eCl7dmFyIG9lPVlbZWVdO2lmKCJvYmplY3QiPT10eXBlb2Ygb2Upe1k9b2U7Y29udGludWV9Im51bWJlciI9PXR5cGVvZiBvZT90ZT1vZTpudWxsPT1vZSYmdm9pZCAwIT09KG9lPVlbLTFdKSYmKHRlPW9lLFg9ZWUpLFk9dm9pZCAwfWVsc2UgaWYoZWU+'@;
put 'PTApe3ZhciBzZT10aGlzLmVuY29kZVRhYmxlW2VlPj44XTtpZih2b2lkIDAhPT1zZSYmKHRlPXNlWzI1NSZlZV0pLHRlPD1sZSl7WT10aGlzLmVuY29kZVRhYmxlU2VxW2xlLXRlXTtjb250aW51ZX1pZih0ZT09eCYmdGhpcy5nYjE4MDMwKXt2YXIgaGU9RSh0aGlzLmdiMTgwMzAudUNoYXJz'@;
put 'LGVlKTtpZigtMSE9aGUpe3RlPXRoaXMuZ2IxODAzMC5nYkNoYXJzW2hlXSsoZWUtdGhpcy5nYjE4MDMwLnVDaGFyc1toZV0pLFZbcSsrXT0xMjkrTWF0aC5mbG9vcih0ZS8xMjYwMCksdGUlPTEyNjAwLFZbcSsrXT00OCtNYXRoLmZsb29yKHRlLzEyNjApLHRlJT0xMjYwLFZbcSsrXT0xMjkr'@;
put 'TWF0aC5mbG9vcih0ZS8xMCksVltxKytdPTQ4Kyh0ZSU9MTApO2NvbnRpbnVlfX19dGU9PT14JiYodGU9dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUpLHRlPDI1Nj9WW3ErK109dGU6dGU8NjU1MzY/KFZbcSsrXT10ZT4+OCxWW3ErK109MjU1JnRlKTooVltxKytdPXRlPj4xNixWW3ErK109'@;
put 'dGU+PjgmMjU1LFZbcSsrXT0yNTUmdGUpfXJldHVybiB0aGlzLnNlcU9iaj1ZLHRoaXMubGVhZFN1cnJvZ2F0ZT1CLFYuc2xpY2UoMCxxKX0sSS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoLTEhPT10aGlzLmxlYWRTdXJyb2dhdGV8fHZvaWQgMCE9PXRoaXMuc2VxT2JqKXt2YXIgaj1h'@;
put 'ZS5hbGxvYygxMCksVj0wO2lmKHRoaXMuc2VxT2JqKXt2YXIgQj10aGlzLnNlcU9ialstMV07dm9pZCAwIT09QiYmKEI8MjU2P2pbVisrXT1COihqW1YrK109Qj4+OCxqW1YrK109MjU1JkIpKSx0aGlzLnNlcU9iaj12b2lkIDB9cmV0dXJuLTEhPT10aGlzLmxlYWRTdXJyb2dhdGUmJihqW1Yr'@;
put 'K109dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUsdGhpcy5sZWFkU3Vycm9nYXRlPS0xKSxqLnNsaWNlKDAsVil9fSxJLnByb3RvdHlwZS5maW5kSWR4PUUsay5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oail7dmFyIFY9YWUuYWxsb2MoMipqLmxlbmd0aCksQj10aGlzLm5vZGVJZHgsWT10'@;
put 'aGlzLnByZXZCdWYsWD10aGlzLnByZXZCdWYubGVuZ3RoLFU9LXRoaXMucHJldkJ1Zi5sZW5ndGg7WD4wJiYoWT1hZS5jb25jYXQoW1ksai5zbGljZSgwLDEwKV0pKTtmb3IodmFyIGVlPTAsdGU9MDtlZTxqLmxlbmd0aDtlZSsrKXt2YXIgcSxvZT1lZT49MD9qW2VlXTpZW2VlK1hdO2lmKCEo'@;
put 'KHE9dGhpcy5kZWNvZGVUYWJsZXNbQl1bb2VdKT49MCkpaWYocT09PXgpZWU9VSxxPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7ZWxzZSBpZihxPT09bSl7dmFyIHNlPVU+PTA/ai5zbGljZShVLGVlKzEpOlkuc2xpY2UoVStYLGVlKzErWCksaGU9MTI2MDAqKHNlWzBd'@;
put 'LTEyOSkrMTI2MCooc2VbMV0tNDgpKzEwKihzZVsyXS0xMjkpKyhzZVszXS00OCksdWU9RSh0aGlzLmdiMTgwMzAuZ2JDaGFycyxoZSk7cT10aGlzLmdiMTgwMzAudUNoYXJzW3VlXStoZS10aGlzLmdiMTgwMzAuZ2JDaGFyc1t1ZV19ZWxzZXtpZihxPD1NKXtCPU0tcTtjb250aW51ZX1pZigh'@;
put 'KHE8PWxlKSl0aHJvdyBuZXcgRXJyb3IoImljb252LWxpdGUgaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgZGVjb2RpbmcgdGFibGUgdmFsdWUgIitxKyIgYXQgIitCKyIvIitvZSk7Zm9yKHZhciBjZT10aGlzLmRlY29kZVRhYmxlU2VxW2xlLXFdLEc9MDtHPGNlLmxlbmd0aC0xO0crKylWW3Rl'@;
put 'KytdPTI1NSYocT1jZVtHXSksVlt0ZSsrXT1xPj44O3E9Y2VbY2UubGVuZ3RoLTFdfWlmKHE+NjU1MzUpe3EtPTY1NTM2O3ZhciBiPTU1Mjk2K01hdGguZmxvb3IocS8xMDI0KTtWW3RlKytdPTI1NSZiLFZbdGUrK109Yj4+OCxxPTU2MzIwK3ElMTAyNH1WW3RlKytdPTI1NSZxLFZbdGUrK109'@;
put 'cT4+OCxCPTAsVT1lZSsxfXJldHVybiB0aGlzLm5vZGVJZHg9Qix0aGlzLnByZXZCdWY9VT49MD9qLnNsaWNlKFUpOlkuc2xpY2UoVStYKSxWLnNsaWNlKDAsdGUpLnRvU3RyaW5nKCJ1Y3MyIil9LGsucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2Zvcih2YXIgaj0iIjt0aGlzLnByZXZCdWYu'@;
put 'bGVuZ3RoPjA7KXtqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZTt2YXIgVj10aGlzLnByZXZCdWYuc2xpY2UoMSk7dGhpcy5wcmV2QnVmPWFlLmFsbG9jKDApLHRoaXMubm9kZUlkeD0wLFYubGVuZ3RoPjAmJihqKz10aGlzLndyaXRlKFYpKX1yZXR1cm4gdGhpcy5ub2RlSWR4PTAsan19LDMy'@;
put 'NTU0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXtzaGlmdGppczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMjcwMTQpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUyMDNlIjoxMjZ9LGVuY29kZVNraXBWYWxzOlt7ZnJvbTo2MDczNix0bzo2'@;
put 'MzgwOH1dfSxjc3NoaWZ0amlzOiJzaGlmdGppcyIsbXNrYW5qaToic2hpZnRqaXMiLHNqaXM6InNoaWZ0amlzIix3aW5kb3dzMzFqOiJzaGlmdGppcyIsbXMzMWo6InNoaWZ0amlzIix4c2ppczoic2hpZnRqaXMiLHdpbmRvd3M5MzI6InNoaWZ0amlzIixtczkzMjoic2hpZnRqaXMiLDkzMjoi'@;
put 'c2hpZnRqaXMiLGNwOTMyOiJzaGlmdGppcyIsZXVjanA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDMxNTMyKX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fX0sZ2IyMzEyOiJjcDkzNiIsZ2IyMzEyODA6ImNwOTM2IixnYjIzMTIxOTgwOiJjcDkz'@;
put 'NiIsY3NnYjIzMTI6ImNwOTM2Iixjc2lzbzU4Z2IyMzEyODA6ImNwOTM2IixldWNjbjoiY3A5MzYiLHdpbmRvd3M5MzY6ImNwOTM2IixtczkzNjoiY3A5MzYiLDkzNjoiY3A5MzYiLGNwOTM2Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigxMzMzNil9fSxnYms6e3R5'@;
put 'cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDEzMzM2KS5jb25jYXQoRig0NDM0NikpfX0seGdiazoiZ2JrIixpc29pcjU4OiJnYmsiLGdiMTgwMzA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDEzMzM2KS5jb25jYXQoRig0NDM0NikpfSxnYjE4'@;
put 'MDMwOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMzYyNTgpfSxlbmNvZGVTa2lwVmFsczpbMTI4XSxlbmNvZGVBZGQ6eyJcdTIwYWMiOjQxNjk5fX0sY2hpbmVzZToiZ2IxODAzMCIsd2luZG93czk0OToiY3A5NDkiLG1zOTQ5OiJjcDk0OSIsOTQ5OiJjcDk0OSIsY3A5NDk6e3R5cGU6Il9kYmNzIix0'@;
put 'YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDc3MzQ4KX19LGNzZXVja3I6ImNwOTQ5Iixjc2tzYzU2MDExOTg3OiJjcDk0OSIsZXVja3I6ImNwOTQ5Iixpc29pcjE0OToiY3A5NDkiLGtvcmVhbjoiY3A5NDkiLGtzYzU2MDExOTg3OiJjcDk0OSIsa3NjNTYwMTE5ODk6ImNwOTQ5Iixrc2M1NjAx'@;
put 'OiJjcDk0OSIsd2luZG93czk1MDoiY3A5NTAiLG1zOTUwOiJjcDk1MCIsOTUwOiJjcDk1MCIsY3A5NTA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDc0Mjg0KX19LGJpZzU6ImJpZzVoa3NjcyIsYmlnNWhrc2NzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gRig3NDI4NCkuY29uY2F0KEYoNjM0ODApKX0sZW5jb2RlU2tpcFZhbHM6WzQxNjc2XX0sY25iaWc1OiJiaWc1aGtzY3MiLGNzYmlnNToiYmlnNWhrc2NzIix4eGJpZzU6ImJpZzVoa3NjcyJ9fSw0NDY1NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Zm9yKHZhciBhZT1bRigy'@;
put 'NzY0OCksRig5Mjg0NCksRig0MzI4MCksRig3ODM1NCksRig3MTc2NCksRig2NDc3MyksRigyMDUwMyksRig1NTgzMyksRigzMjU1NCldLHg9MDt4PGFlLmxlbmd0aDt4Kyspe3ZhciBtPWFlW3hdO2Zvcih2YXIgbGUgaW4gbSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo'@;
put 'bSxsZSkmJihJZVtsZV09bVtsZV0pfX0sMjc2NDg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChLLEkpe3RoaXMuZW5jPUsuZW5jb2RpbmdOYW1lLHRoaXMuYm9tQXdhcmU9Sy5ib21Bd2FyZSwiYmFzZTY0Ij09PXRoaXMuZW5jP3Ro'@;
put 'aXMuZW5jb2Rlcj1POiJjZXN1OCI9PT10aGlzLmVuYyYmKHRoaXMuZW5jPSJ1dGY4Iix0aGlzLmVuY29kZXI9UiwiXHV7MWY0YTl9IiE9PWFlLmZyb20oImVkYTBiZGVkYjJhOSIsImhleCIpLnRvU3RyaW5nKCkmJih0aGlzLmRlY29kZXI9eix0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1JLmRl'@;
put 'ZmF1bHRDaGFyVW5pY29kZSkpfWF0LmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LGNlc3U4Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1bmljb2RlMTF1dGY4OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYx'@;
put 'NmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4Ont0eXBlOiJfaW50ZXJuYWwifSxfaW50ZXJuYWw6eH0seC5wcm90b3R5cGUuZW5jb2Rlcj1NLHgucHJvdG90eXBlLmRlY29kZXI9bGU7dmFyIG09Rig3MjAyNCkucztmdW5j'@;
put 'dGlvbiBsZShLLEkpe20uY2FsbCh0aGlzLEkuZW5jKX1mdW5jdGlvbiBNKEssSSl7dGhpcy5lbmM9SS5lbmN9ZnVuY3Rpb24gTyhLLEkpe3RoaXMucHJldlN0cj0iIn1mdW5jdGlvbiBSKEssSSl7fWZ1bmN0aW9uIHooSyxJKXt0aGlzLmFjYz0wLHRoaXMuY29udEJ5dGVzPTAsdGhpcy5hY2NC'@;
put 'eXRlcz0wLHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPUkuZGVmYXVsdENoYXJVbmljb2RlfW0ucHJvdG90eXBlLmVuZHx8KG0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30pLGxlLnByb3RvdHlwZT1tLnByb3RvdHlwZSxNLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtyZXR1cm4gYWUu'@;
put 'ZnJvbShLLHRoaXMuZW5jKX0sTS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXt2YXIgST0oSz10aGlzLnByZXZTdHIrSykubGVuZ3RoLUsubGVuZ3RoJTQ7cmV0dXJuIHRoaXMucHJldlN0cj1LLnNsaWNlKEkpLEs9Sy5zbGljZSgwLEkp'@;
put 'LGFlLmZyb20oSywiYmFzZTY0Iil9LE8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiBhZS5mcm9tKHRoaXMucHJldlN0ciwiYmFzZTY0Iil9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2Zvcih2YXIgST1hZS5hbGxvYygzKksubGVuZ3RoKSxrPTAsRT0wO0U8Sy5sZW5n'@;
put 'dGg7RSsrKXt2YXIgaj1LLmNoYXJDb2RlQXQoRSk7ajwxMjg/SVtrKytdPWo6ajwyMDQ4PyhJW2srK109MTkyKyhqPj4+NiksSVtrKytdPTEyOCsoNjMmaikpOihJW2srK109MjI0KyhqPj4+MTIpLElbaysrXT0xMjgrKGo+Pj42JjYzKSxJW2srK109MTI4Kyg2MyZqKSl9cmV0dXJuIEkuc2xp'@;
put 'Y2UoMCxrKX0sUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSx6LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtmb3IodmFyIEk9dGhpcy5hY2Msaz10aGlzLmNvbnRCeXRlcyxFPXRoaXMuYWNjQnl0ZXMsaj0iIixWPTA7VjxLLmxlbmd0aDtWKyspe3ZhciBCPUtbVl07MTI4IT0oMTky'@;
put 'JkIpPyhrPjAmJihqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSxrPTApLEI8MTI4P2orPVN0cmluZy5mcm9tQ2hhckNvZGUoQik6QjwyMjQ/KEk9MzEmQixrPTEsRT0xKTpCPDI0MD8oST0xNSZCLGs9MixFPTEpOmorPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKTprPjA/KEk9STw8Nnw2MyZC'@;
put 'LEUrKywwPT0tLWsmJihqKz0yPT09RSYmSTwxMjgmJkk+MHx8Mz09PUUmJkk8MjA0OD90aGlzLmRlZmF1bHRDaGFyVW5pY29kZTpTdHJpbmcuZnJvbUNoYXJDb2RlKEkpKSk6ais9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGV9cmV0dXJuIHRoaXMuYWNjPUksdGhpcy5jb250Qnl0ZXM9ayx0aGlz'@;
put 'LmFjY0J5dGVzPUUsan0sei5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIEs9MDtyZXR1cm4gdGhpcy5jb250Qnl0ZXM+MCYmKEsrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKSxLfX0sNzE3NjQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVu'@;
put 'Y3Rpb24geChNLE8pe2lmKCFNKXRocm93IG5ldyBFcnJvcigiU0JDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighTS5jaGFyc3x8MTI4IT09TS5jaGFycy5sZW5ndGgmJjI1NiE9PU0uY2hhcnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrTS50'@;
put 'eXBlKyInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NikiKTtpZigxMjg9PT1NLmNoYXJzLmxlbmd0aCl7Zm9yKHZhciBSPSIiLHo9MDt6PDEyODt6KyspUis9U3RyaW5nLmZyb21DaGFyQ29kZSh6KTtNLmNoYXJzPVIrTS5jaGFyc310aGlzLmRlY29k'@;
put 'ZUJ1Zj1hZS5mcm9tKE0uY2hhcnMsInVjczIiKTt2YXIgSz1hZS5hbGxvYyg2NTUzNixPLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtmb3Ioej0wO3o8TS5jaGFycy5sZW5ndGg7eisrKUtbTS5jaGFycy5jaGFyQ29kZUF0KHopXT16O3RoaXMuZW5jb2RlQnVmPUt9ZnVu'@;
put 'Y3Rpb24gbShNLE8pe3RoaXMuZW5jb2RlQnVmPU8uZW5jb2RlQnVmfWZ1bmN0aW9uIGxlKE0sTyl7dGhpcy5kZWNvZGVCdWY9Ty5kZWNvZGVCdWZ9SWUuX3NiY3M9eCx4LnByb3RvdHlwZS5lbmNvZGVyPW0seC5wcm90b3R5cGUuZGVjb2Rlcj1sZSxtLnByb3RvdHlwZS53cml0ZT1mdW5jdGlv'@;
put 'bihNKXtmb3IodmFyIE89YWUuYWxsb2MoTS5sZW5ndGgpLFI9MDtSPE0ubGVuZ3RoO1IrKylPW1JdPXRoaXMuZW5jb2RlQnVmW00uY2hhckNvZGVBdChSKV07cmV0dXJuIE99LG0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sbGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE0pe2Zvcih2'@;
put 'YXIgTz10aGlzLmRlY29kZUJ1ZixSPWFlLmFsbG9jKDIqTS5sZW5ndGgpLHo9MCxLPTAsST0wO0k8TS5sZW5ndGg7SSsrKVJbSz0yKkldPU9bej0yKk1bSV1dLFJbSysxXT1PW3orMV07cmV0dXJuIFIudG9TdHJpbmcoInVjczIiKX0sbGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe319LDIw'@;
put 'NTAzOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ezQzNzoiY3A0MzciLDczNzoiY3A3MzciLDc3NToiY3A3NzUiLDg1MDoiY3A4NTAiLDg1MjoiY3A4NTIiLDg1NToiY3A4NTUiLDg1NjoiY3A4NTYiLDg1NzoiY3A4NTciLDg1ODoiY3A4NTgiLDg2MDoiY3A4NjAiLDg2MToiY3A4NjEi'@;
put 'LDg2MjoiY3A4NjIiLDg2MzoiY3A4NjMiLDg2NDoiY3A4NjQiLDg2NToiY3A4NjUiLDg2NjoiY3A4NjYiLDg2OToiY3A4NjkiLDg3NDoid2luZG93czg3NCIsOTIyOiJjcDkyMiIsMTA0NjoiY3AxMDQ2IiwxMTI0OiJjcDExMjQiLDExMjU6ImNwMTEyNSIsMTEyOToiY3AxMTI5IiwxMTMzOiJj'@;
put 'cDExMzMiLDExNjE6ImNwMTE2MSIsMTE2MjoiY3AxMTYyIiwxMTYzOiJjcDExNjMiLDEyNTA6IndpbmRvd3MxMjUwIiwxMjUxOiJ3aW5kb3dzMTI1MSIsMTI1Mjoid2luZG93czEyNTIiLDEyNTM6IndpbmRvd3MxMjUzIiwxMjU0OiJ3aW5kb3dzMTI1NCIsMTI1NToid2luZG93czEyNTUiLDEy'@;
put 'NTY6IndpbmRvd3MxMjU2IiwxMjU3OiJ3aW5kb3dzMTI1NyIsMTI1ODoid2luZG93czEyNTgiLDI4NTkxOiJpc284ODU5MSIsMjg1OTI6Imlzbzg4NTkyIiwyODU5MzoiaXNvODg1OTMiLDI4NTk0OiJpc284ODU5NCIsMjg1OTU6Imlzbzg4NTk1IiwyODU5NjoiaXNvODg1OTYiLDI4NTk3OiJp'@;
put 'c284ODU5NyIsMjg1OTg6Imlzbzg4NTk4IiwyODU5OToiaXNvODg1OTkiLDI4NjAwOiJpc284ODU5MTAiLDI4NjAxOiJpc284ODU5MTEiLDI4NjAzOiJpc284ODU5MTMiLDI4NjA0OiJpc284ODU5MTQiLDI4NjA1OiJpc284ODU5MTUiLDI4NjA2OiJpc284ODU5MTYiLHdpbmRvd3M4NzQ6e3R5'@;
put 'cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1'@;
put 'MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUy'@;
put 'Zlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1'@;
put 'MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LHdpbjg3NDoid2luZG93czg3NCIsY3A4NzQ6IndpbmRvd3M4NzQi'@;
put 'LHdpbmRvd3MxMjUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAy'@;
put 'Mlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1'@;
put 'XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBc'@;
put 'eGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4'@;
put 'ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSx3aW4xMjUwOiJ3aW5kb3dzMTI1MCIsY3AxMjUwOiJ3aW5kb3dzMTI1MCIsd2luZG93czEyNTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIw'@;
put 'XHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1'@;
put 'ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEy'@;
put 'XHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUw'@;
put 'NDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5'@;
put 'XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sd2luMTI1MToid2luZG93czEyNTEiLGNwMTI1MToid2luZG93czEyNTEiLHdpbmRvd3MxMjUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1'@;
put 'MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhh'@;
put 'NVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNl'@;
put 'XHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4Zjdc'@;
put 'eGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHdpbjEyNTI6IndpbmRvd3MxMjUyIixjcDEyNTI6IndpbmRvd3MxMjUyIix3aW5kb3dzMTI1Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRc'@;
put 'dTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1'@;
put 'XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZc'@;
put 'dTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAz'@;
put 'YjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2Rc'@;
put 'dTAzY2VcdWZmZmQifSx3aW4xMjUzOiJ3aW5kb3dzMTI1MyIsY3AxMjUzOiJ3aW5kb3dzMTI1MyIsd2luZG93czEyNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUw'@;
put 'MTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFi'@;
put 'XHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhk'@;
put 'NFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4'@;
put 'ZmNcdTAxMzFcdTAxNWZceGZmIn0sd2luMTI1NDoid2luZG93czEyNTQiLGNwMTI1NDoid2luZG93czEyNTQiLHdpbmRvd3MxMjU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1'@;
put 'MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhh'@;
put 'OVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdTA1YmFcdTA1YmJcdTA1'@;
put 'YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdc'@;
put 'dTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSx3aW4xMjU1OiJ3aW5kb3dzMTI1'@;
put 'NSIsY3AxMjU1OiJ3aW5kb3dzMTI1NSIsd2luZG93czEyNTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4'@;
put 'XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJc'@;
put 'eGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1'@;
put 'MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJc'@;
put 'dTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiJ9LHdpbjEyNTY6IndpbmRvd3MxMjU2IixjcDEyNTY6IndpbmRvd3MxMjU2Iix3aW5kb3dzMTI1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNc'@;
put 'dWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4'@;
put 'YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUw'@;
put 'MTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1'@;
put 'XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2Vc'@;
put 'dTAyZDkifSx3aW4xMjU3OiJ3aW5kb3dzMTI1NyIsY3AxMjU3OiJ3aW5kb3dzMTI1NyIsd2luZG93czEyNTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4'@;
put 'YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhk'@;
put 'NFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5'@;
put 'XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LHdpbjEyNTg6IndpbmRvd3MxMjU4IixjcDEyNTg6IndpbmRvd3MxMjU4Iixpc284ODU5MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVc'@;
put 'eDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4'@;
put 'YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhl'@;
put 'MVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg1OTE6Imlzbzg4NTkxIixpc284ODU5Mjp7dHlwZToiX3NiY3Mi'@;
put 'LGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAyZDhcdTAxNDFceGE0XHUw'@;
put 'MTNkXHUwMTVhXHhhN1x4YThcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNzlceGFkXHUwMTdkXHUwMTdiXHhiMFx1MDEwNVx1MDJkYlx1MDE0Mlx4YjRcdTAxM2VcdTAxNWJcdTAyYzdceGI4XHUwMTYxXHUwMTVmXHUwMTY1XHUwMTdhXHUwMmRkXHUwMTdlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAx'@;
put 'MDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhl'@;
put 'NFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LGNwMjg1OTI6Imlzbzg4NTkyIixpc284'@;
put 'ODU5Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMjZc'@;
put 'dTAyZDhceGEzXHhhNFx1ZmZmZFx1MDEyNFx4YTdceGE4XHUwMTMwXHUwMTVlXHUwMTFlXHUwMTM0XHhhZFx1ZmZmZFx1MDE3Ylx4YjBcdTAxMjdceGIyXHhiM1x4YjRceGI1XHUwMTI1XHhiN1x4YjhcdTAxMzFcdTAxNWZcdTAxMWZcdTAxMzVceGJkXHVmZmZkXHUwMTdjXHhjMFx4YzFceGMy'@;
put 'XHVmZmZkXHhjNFx1MDEwYVx1MDEwOFx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1ZmZmZFx4ZDFceGQyXHhkM1x4ZDRcdTAxMjBceGQ2XHhkN1x1MDExY1x4ZDlceGRhXHhkYlx4ZGNcdTAxNmNcdTAxNWNceGRmXHhlMFx4ZTFceGUyXHVmZmZkXHhlNFx1MDEwYlx1MDEw'@;
put 'OVx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1ZmZmZFx4ZjFceGYyXHhmM1x4ZjRcdTAxMjFceGY2XHhmN1x1MDExZFx4ZjlceGZhXHhmYlx4ZmNcdTAxNmRcdTAxNWRcdTAyZDkifSxjcDI4NTkzOiJpc284ODU5MyIsaXNvODg1OTQ6e3R5cGU6Il9zYmNzIixjaGFyczoi'@;
put 'XHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTM4XHUwMTU2XHhhNFx1MDEyOFx1MDEz'@;
put 'Ylx4YTdceGE4XHUwMTYwXHUwMTEyXHUwMTIyXHUwMTY2XHhhZFx1MDE3ZFx4YWZceGIwXHUwMTA1XHUwMmRiXHUwMTU3XHhiNFx1MDEyOVx1MDEzY1x1MDJjN1x4YjhcdTAxNjFcdTAxMTNcdTAxMjNcdTAxNjdcdTAxNGFcdTAxN2VcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4'@;
put 'YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHUwMTJhXHUwMTEwXHUwMTQ1XHUwMTRjXHUwMTM2XHhkNFx4ZDVceGQ2XHhkN1x4ZDhcdTAxNzJceGRhXHhkYlx4ZGNcdTAxNjhcdTAxNmFceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUw'@;
put 'MTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx1MDEyYlx1MDExMVx1MDE0Nlx1MDE0ZFx1MDEzN1x4ZjRceGY1XHhmNlx4ZjdceGY4XHUwMTczXHhmYVx4ZmJceGZjXHUwMTY5XHUwMTZiXHUwMmQ5In0sY3AyODU5NDoiaXNvODg1OTQiLGlzbzg4NTk1Ont0eXBlOiJfc2JjcyIsY2hh'@;
put 'cnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQwM1x1MDQwNFx1MDQw'@;
put 'NVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0'@;
put 'MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2Nc'@;
put 'dTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0NTNcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0'@;
put 'NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0sY3AyODU5NToiaXNvODg1OTUiLGlzbzg4NTk2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5'@;
put 'MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MGNceGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFiXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFmXHVmZmZkXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUw'@;
put 'NjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5'@;
put 'XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sY3AyODU5NjoiaXNvODg1OTYiLGlzbzg4NTk3Ont0'@;
put 'eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxOFx1MjAxOVx4'@;
put 'YTNcdTIwYWNcdTIwYWZceGE2XHhhN1x4YThceGE5XHUwMzdhXHhhYlx4YWNceGFkXHVmZmZkXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx1MDM4NVx1MDM4Nlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5'@;
put 'M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1'@;
put 'MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNj'@;
put 'YVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LGNwMjg1OTc6Imlzbzg4NTk3Iixpc284ODU5ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4'@;
put 'OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNc'@;
put 'eGJkXHhiZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxN1x1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVl'@;
put 'NFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LGNwMjg1OTg6Imlzbzg4NTk4Iixpc284ODU5OTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4'@;
put 'OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhi'@;
put 'NFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1'@;
put 'MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LGNwMjg1OTk6Imlzbzg4'@;
put 'NTk5Iixpc284ODU5MTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZc'@;
put 'eGEwXHUwMTA0XHUwMTEyXHUwMTIyXHUwMTJhXHUwMTI4XHUwMTM2XHhhN1x1MDEzYlx1MDExMFx1MDE2MFx1MDE2Nlx1MDE3ZFx4YWRcdTAxNmFcdTAxNGFceGIwXHUwMTA1XHUwMTEzXHUwMTIzXHUwMTJiXHUwMTI5XHUwMTM3XHhiN1x1MDEzY1x1MDExMVx1MDE2MVx1MDE2N1x1MDE3ZVx1'@;
put 'MjAxNVx1MDE2Ylx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAxMThceGNiXHUwMTE2XHhjZFx4Y2VceGNmXHhkMFx1MDE0NVx1MDE0Y1x4ZDNceGQ0XHhkNVx4ZDZcdTAxNjhceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHUw'@;
put 'MTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx4ZWZceGYwXHUwMTQ2XHUwMTRkXHhmM1x4ZjRceGY1XHhmNlx1MDE2OVx4ZjhcdTAxNzNceGZhXHhmYlx4ZmNceGZkXHhmZVx1MDEzOCJ9LGNwMjg2MDA6Imlzbzg4NTkx'@;
put 'MCIsaXNvODg1OTExOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhh'@;
put 'MFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1'@;
put 'MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUz'@;
put 'N1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1'@;
put 'MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg2MDE6Imlzbzg4NTkxMSIsaXNvODg1OTEzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4'@;
put 'OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxZFx4YTJceGEzXHhhNFx1MjAxZVx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4'@;
put 'YjBceGIxXHhiMlx4YjNcdTIwMWNceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUw'@;
put 'MTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNj'@;
put 'XHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTIwMTkifSxjcDI4NjAzOiJpc284ODU5MTMiLGlzbzg4NTkxNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVc'@;
put 'eDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTFlMDJcdTFlMDNceGEzXHUwMTBhXHUwMTBiXHUxZTBhXHhhN1x1MWU4MFx4YTlcdTFlODJcdTFl'@;
put 'MGJcdTFlZjJceGFkXHhhZVx1MDE3OFx1MWUxZVx1MWUxZlx1MDEyMFx1MDEyMVx1MWU0MFx1MWU0MVx4YjZcdTFlNTZcdTFlODFcdTFlNTdcdTFlODNcdTFlNjBcdTFlZjNcdTFlODRcdTFlODVcdTFlNjFceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2Jc'@;
put 'eGNjXHhjZFx4Y2VceGNmXHUwMTc0XHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHUxZTZhXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTc2XHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNzVceGYxXHhmMlx4'@;
put 'ZjNceGY0XHhmNVx4ZjZcdTFlNmJceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxNzdceGZmIn0sY3AyODYwNDoiaXNvODg1OTE0Iixpc284ODU5MTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRc'@;
put 'eDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHUyMGFjXHhhNVx1MDE2MFx4YTdcdTAxNjFceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3ZFx4'@;
put 'YjVceGI2XHhiN1x1MDE3ZVx4YjlceGJhXHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhk'@;
put 'Y1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODYwNToiaXNvODg1OTE1Iixp'@;
put 'c284ODU5MTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUw'@;
put 'MTA0XHUwMTA1XHUwMTQxXHUyMGFjXHUyMDFlXHUwMTYwXHhhN1x1MDE2MVx4YTlcdTAyMThceGFiXHUwMTc5XHhhZFx1MDE3YVx1MDE3Ylx4YjBceGIxXHUwMTBjXHUwMTQyXHUwMTdkXHUyMDFkXHhiNlx4YjdcdTAxN2VcdTAxMGRcdTAyMTlceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHUwMTdj'@;
put 'XHhjMFx4YzFceGMyXHUwMTAyXHhjNFx1MDEwNlx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMTBcdTAxNDNceGQyXHhkM1x4ZDRcdTAxNTBceGQ2XHUwMTVhXHUwMTcwXHhkOVx4ZGFceGRiXHhkY1x1MDExOFx1MDIxYVx4ZGZceGUwXHhlMVx4ZTJcdTAxMDNc'@;
put 'eGU0XHUwMTA3XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExMVx1MDE0NFx4ZjJceGYzXHhmNFx1MDE1MVx4ZjZcdTAxNWJcdTAxNzFceGY5XHhmYVx4ZmJceGZjXHUwMTE5XHUwMjFiXHhmZiJ9LGNwMjg2MDY6Imlzbzg4NTkxNiIsY3A0Mzc6e3R5cGU6Il9z'@;
put 'YmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFc'@;
put 'eGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFj'@;
put 'XHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUy'@;
put 'NTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdm'@;
put 'XHhiMlx1MjVhMFx4YTAifSxpYm00Mzc6ImNwNDM3Iixjc2libTQzNzoiY3A0MzciLGNwNzM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5'@;
put 'Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1'@;
put 'MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUz'@;
put 'Y1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1'@;
put 'MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUy'@;
put 'NWEwXHhhMCJ9LGlibTczNzoiY3A3MzciLGNzaWJtNzM3OiJjcDczNyIsY3A3NzU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMTA2XHhmY1x4ZTlcdTAxMDFceGU0XHUwMTIzXHhlNVx1MDEwN1x1MDE0Mlx1MDExM1x1MDE1Nlx1MDE1N1x1MDEyYlx1MDE3OVx4YzRceGM1XHhjOVx4ZTZceGM2'@;
put 'XHUwMTRkXHhmNlx1MDEyMlx4YTJcdTAxNWFcdTAxNWJceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdceGE0XHUwMTAwXHUwMTJhXHhmM1x1MDE3Ylx1MDE3Y1x1MDE3YVx1MjAxZFx4YTZceGE5XHhhZVx4YWNceGJkXHhiY1x1MDE0MVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUy'@;
put 'NTI0XHUwMTA0XHUwMTBjXHUwMTE4XHUwMTE2XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTJlXHUwMTYwXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTcyXHUwMTZhXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwMTdk'@;
put 'XHUwMTA1XHUwMTBkXHUwMTE5XHUwMTE3XHUwMTJmXHUwMTYxXHUwMTczXHUwMTZiXHUwMTdlXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHhkM1x4ZGZcdTAxNGNcdTAxNDNceGY1XHhkNVx4YjVcdTAxNDRcdTAxMzZcdTAxMzdcdTAxM2JcdTAxM2NcdTAxNDZc'@;
put 'dTAxMTJcdTAxNDVcdTIwMTlceGFkXHhiMVx1MjAxY1x4YmVceGI2XHhhN1x4ZjdcdTIwMWVceGIwXHUyMjE5XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm03NzU6ImNwNzc1Iixjc2libTc3NToiY3A3NzUiLGNwODUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4'@;
put 'ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRc'@;
put 'eGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1'@;
put 'NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRc'@;
put 'eGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1MDoiY3A4NTAiLGNzaWJtODUwOiJjcDg1MCIsY3A4NTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3'@;
put 'XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVcdTAxNDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3'@;
put 'ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAw'@;
put 'XHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDExYlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhk'@;
put 'NFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4XHhiMFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIn0saWJtODUyOiJj'@;
put 'cDg1MiIsY3NpYm04NTI6ImNwODUyIixjcDg1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0NTJcdTA0MDJcdTA0NTNcdTA0MDNcdTA0NTFcdTA0MDFcdTA0NTRcdTA0MDRcdTA0NTVcdTA0MDVcdTA0NTZcdTA0MDZcdTA0NTdcdTA0MDdcdTA0NThcdTA0MDhcdTA0NTlcdTA0MDlcdTA0NWFc'@;
put 'dTA0MGFcdTA0NWJcdTA0MGJcdTA0NWNcdTA0MGNcdTA0NWVcdTA0MGVcdTA0NWZcdTA0MGZcdTA0NGVcdTA0MmVcdTA0NGFcdTA0MmFcdTA0MzBcdTA0MTBcdTA0MzFcdTA0MTFcdTA0NDZcdTA0MjZcdTA0MzRcdTA0MTRcdTA0MzVcdTA0MTVcdTA0NDRcdTA0MjRcdTA0MzNcdTA0MTNceGFi'@;
put 'XHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDQ0NVx1MDQyNVx1MDQzOFx1MDQxOFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDQzOVx1MDQxOVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDQzYVx1MDQxYVx1MjU1YVx1MjU1NFx1MjU2'@;
put 'OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTA0M2JcdTA0MWJcdTA0M2NcdTA0MWNcdTA0M2RcdTA0MWRcdTA0M2VcdTA0MWVcdTA0M2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTA0MWZcdTA0NGZcdTI1ODBcdTA0MmZcdTA0NDBcdTA0MjBcdTA0NDFcdTA0MjFcdTA0NDJcdTA0'@;
put 'MjJcdTA0NDNcdTA0MjNcdTA0MzZcdTA0MTZcdTA0MzJcdTA0MTJcdTA0NGNcdTA0MmNcdTIxMTZceGFkXHUwNDRiXHUwNDJiXHUwNDM3XHUwNDE3XHUwNDQ4XHUwNDI4XHUwNDRkXHUwNDJkXHUwNDQ5XHUwNDI5XHUwNDQ3XHUwNDI3XHhhN1x1MjVhMFx4YTAifSxpYm04NTU6ImNwODU1Iixj'@;
put 'c2libTg1NToiY3A4NTUiLGNwODU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1'@;
put 'MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx4YTNcdWZmZmRceGQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZVx4YWNceGJkXHhiY1x1ZmZmZFx4YWJceGJiXHUyNTkxXHUyNTkyXHUy'@;
put 'NTkzXHUyNTAyXHUyNTI0XHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHVmZmZkXHVmZmZkXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZj'@;
put 'XHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZcdWZmZmRcdTI1ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NjoiY3A4NTYiLGNzaWJtODU2OiJjcDg1NiIsY3A4NTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5'@;
put 'XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZc'@;
put 'eGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1'@;
put 'NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhl'@;
put 'Y1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU3OiJjcDg1NyIsY3NpYm04NTc6ImNwODU3IixjcDg1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4'@;
put 'ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFc'@;
put 'eGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYw'@;
put 'XHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUyMGFjXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFc'@;
put 'dTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTg6ImNwODU4Iixjc2libTg1ODoiY3A4NTgiLGNwODYwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGUzXHhlMFx4YzFceGU3XHhlYVx4Y2FceGU4'@;
put 'XHhjZFx4ZDRceGVjXHhjM1x4YzJceGM5XHhjMFx4YzhceGY0XHhmNVx4ZjJceGRhXHhmOVx4Y2NceGQ1XHhkY1x4YTJceGEzXHhkOVx1MjBhN1x4ZDNceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGQyXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUy'@;
put 'NTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUw'@;
put 'XHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThc'@;
put 'dTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjA6ImNwODYwIixjc2libTg2MDoiY3A4NjAiLGNwODYxOnt0eXBl'@;
put 'OiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFc'@;
put 'eGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1'@;
put 'MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5'@;
put 'MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1'@;
put 'MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYxOiJjcDg2MSIsY3NpYm04NjE6ImNwODYxIixjcDg2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRc'@;
put 'dTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4'@;
put 'YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1Njlc'@;
put 'dTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1'@;
put 'MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MjoiY3A4NjIiLGNzaWJtODYyOiJj'@;
put 'cDg2MiIsY3A4NjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4YzJceGUwXHhiNlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MjAxN1x4YzBceGE3XHhjOVx4YzhceGNhXHhmNFx4Y2JceGNmXHhmYlx4ZjlceGE0XHhkNFx4ZGNceGEyXHhhM1x4ZDlceGRiXHUwMTky'@;
put 'XHhhNlx4YjRceGYzXHhmYVx4YThceGI4XHhiM1x4YWZceGNlXHUyMzEwXHhhY1x4YmRceGJjXHhiZVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUy'@;
put 'NTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4'@;
put 'XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBc'@;
put 'dTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjM6ImNwODYzIixjc2libTg2MzoiY3A4NjMiLGNwODY0Ont0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4'@;
put 'MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJFx1MDY2YSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGIwXHhiN1x1MjIx'@;
put 'OVx1MjIxYVx1MjU5Mlx1MjUwMFx1MjUwMlx1MjUzY1x1MjUyNFx1MjUyY1x1MjUxY1x1MjUzNFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1MDNiMlx1MjIxZVx1MDNjNlx4YjFceGJkXHhiY1x1MjI0OFx4YWJceGJiXHVmZWY3XHVmZWY4XHVmZmZkXHVmZmZkXHVmZWZiXHVmZWZjXHVmZmZk'@;
put 'XHhhMFx4YWRcdWZlODJceGEzXHhhNFx1ZmU4NFx1ZmZmZFx1ZmZmZFx1ZmU4ZVx1ZmU4Zlx1ZmU5NVx1ZmU5OVx1MDYwY1x1ZmU5ZFx1ZmVhMVx1ZmVhNVx1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmVkMVx1MDYxYlx1ZmVi'@;
put 'MVx1ZmViNVx1ZmViOVx1MDYxZlx4YTJcdWZlODBcdWZlODFcdWZlODNcdWZlODVcdWZlY2FcdWZlOGJcdWZlOGRcdWZlOTFcdWZlOTNcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdWZlYTdcdWZlYTlcdWZlYWJcdWZlYWRcdWZlYWZcdWZlYjNcdWZlYjdcdWZlYmJcdWZlYmZcdWZlYzFcdWZl'@;
put 'YzVcdWZlY2JcdWZlY2ZceGE2XHhhY1x4ZjdceGQ3XHVmZWM5XHUwNjQwXHVmZWQzXHVmZWQ3XHVmZWRiXHVmZWRmXHVmZWUzXHVmZWU3XHVmZWViXHVmZWVkXHVmZWVmXHVmZWYzXHVmZWJkXHVmZWNjXHVmZWNlXHVmZWNkXHVmZWUxXHVmZTdkXHUwNjUxXHVmZWU1XHVmZWU5XHVmZWVjXHVm'@;
put 'ZWYwXHVmZWYyXHVmZWQwXHVmZWQ1XHVmZWY1XHVmZWY2XHVmZWRkXHVmZWQ5XHVmZWYxXHUyNWEwXHVmZmZkIn0saWJtODY0OiJjcDg2NCIsY3NpYm04NjQ6ImNwODY0IixjcDg2NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGVi'@;
put 'XHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFc'@;
put 'dTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1'@;
put 'NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNh'@;
put 'Nlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2NToiY3A4NjUiLGNzaWJtODY1OiJjcDg2NSIsY3A4'@;
put 'NjY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUw'@;
put 'NDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkz'@;
put 'XHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUy'@;
put 'NTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5'@;
put 'XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCJ9LGlibTg2NjoiY3A4NjYiLGNzaWJtODY2OiJjcDg2NiIsY3A4Njk6'@;
put 'e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzg2XHVmZmZkXHhiN1x4YWNceGE2XHUyMDE4XHUyMDE5XHUwMzg4XHUyMDE1XHUwMzg5XHUwMzhhXHUwM2FhXHUwMzhjXHVmZmZkXHVmZmZkXHUwMzhlXHUwM2FiXHhhOVx1MDM4Zlx4'@;
put 'YjJceGIzXHUwM2FjXHhhM1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x4YmRcdTAzOThcdTAzOTlceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDM5YVx1MDM5'@;
put 'Ylx1MDM5Y1x1MDM5ZFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDM5ZVx1MDM5Zlx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDNhMFx1MDNhMVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDNhM1x1MDNhNFx1MDNhNVx1'@;
put 'MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDNiNFx1MDNiNVx1MjU4MFx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNj'@;
put 'Mlx1MDNjNFx1MDM4NFx4YWRceGIxXHUwM2M1XHUwM2M2XHUwM2M3XHhhN1x1MDNjOFx1MDM4NVx4YjBceGE4XHUwM2M5XHUwM2NiXHUwM2IwXHUwM2NlXHUyNWEwXHhhMCJ9LGlibTg2OToiY3A4NjkiLGNzaWJtODY5OiJjcDg2OSIsY3A5MjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4'@;
put 'ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhh'@;
put 'YVx4YWJceGFjXHhhZFx4YWVcdTIwM2VceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE2MFx4ZDFceGQy'@;
put 'XHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxN2RceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDE2MVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFc'@;
put 'eGZiXHhmY1x4ZmRcdTAxN2VceGZmIn0saWJtOTIyOiJjcDkyMiIsY3NpYm05MjI6ImNwOTIyIixjcDEwNDY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZTg4XHhkN1x4ZjdcdWY4ZjZcdWY4ZjVcdWY4ZjRcdWY4ZjdcdWZlNzFceDg4XHUyNWEwXHUyNTAyXHUyNTAwXHUyNTEwXHUyNTBjXHUy'@;
put 'NTE0XHUyNTE4XHVmZTc5XHVmZTdiXHVmZTdkXHVmZTdmXHVmZTc3XHVmZThhXHVmZWYwXHVmZWYzXHVmZWYyXHVmZWNlXHVmZWNmXHVmZWQwXHVmZWY2XHVmZWY4XHVmZWZhXHVmZWZjXHhhMFx1ZjhmYVx1ZjhmOVx1ZjhmOFx4YTRcdWY4ZmJcdWZlOGJcdWZlOTFcdWZlOTdcdWZlOWJcdWZl'@;
put 'OWZcdWZlYTNcdTA2MGNceGFkXHVmZWE3XHVmZWIzXHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVmZWI3XHUwNjFiXHVmZWJiXHVmZWJmXHVmZWNhXHUwNjFmXHVmZWNiXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUw'@;
put 'NjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHVmZWM3XHUwNjM5XHUwNjNhXHVmZWNjXHVmZTgyXHVmZTg0XHVmZThlXHVmZWQzXHUwNjQwXHUwNjQx'@;
put 'XHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZWQ3XHVmZWRiXHVmZWRmXHVmOGZjXHVmZWY1XHVmZWY3XHVmZWY5XHVmZWZiXHVmZWUzXHVmZWU3XHVm'@;
put 'ZWVjXHVmZWU5XHVmZmZkIn0saWJtMTA0NjoiY3AxMDQ2Iixjc2libTEwNDY6ImNwMTA0NiIsY3AxMTI0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5'@;
put 'NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQ5MFx1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0'@;
put 'MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZc'@;
put 'dTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0'@;
put 'NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0OTFcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0saWJtMTEyNDoiY3AxMTI0Iixjc2libTExMjQ6ImNwMTEyNCIsY3AxMTI1'@;
put 'Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQy'@;
put 'N1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1'@;
put 'MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2'@;
put 'Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1'@;
put 'MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQ5MFx1MDQ5MVx1MDQwNFx1MDQ1NFx1MDQwNlx1MDQ1Nlx1MDQwN1x1MDQ1N1x4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCJ9LGlibTExMjU6ImNwMTEyNSIsY3NpYm0xMTI1OiJjcDExMjUiLGNw'@;
put 'MTEyOTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhh'@;
put 'Mlx4YTNceGE0XHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5'@;
put 'XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVc'@;
put 'eGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTI5OiJjcDExMjkiLGNzaWJtMTEyOToiY3AxMTI5IixjcDExMzM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRc'@;
put 'eDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTgxXHUwZTgyXHUwZTg0XHUwZTg3XHUwZTg4XHUwZWFhXHUwZThhXHUwZThkXHUwZTk0'@;
put 'XHUwZTk1XHUwZTk2XHUwZTk3XHUwZTk5XHUwZTlhXHUwZTliXHUwZTljXHUwZTlkXHUwZTllXHUwZTlmXHUwZWExXHUwZWEyXHUwZWEzXHUwZWE1XHUwZWE3XHUwZWFiXHUwZWFkXHUwZWFlXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWFmXHUwZWIwXHUwZWIyXHUwZWIzXHUwZWI0XHUwZWI1XHUw'@;
put 'ZWI2XHUwZWI3XHUwZWI4XHUwZWI5XHUwZWJjXHUwZWIxXHUwZWJiXHUwZWJkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWMwXHUwZWMxXHUwZWMyXHUwZWMzXHUwZWM0XHUwZWM4XHUwZWM5XHUwZWNhXHUwZWNiXHUwZWNjXHUwZWNkXHUwZWM2XHVmZmZkXHUwZWRjXHUwZWRkXHUyMGFkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWQwXHUwZWQxXHUwZWQyXHUwZWQzXHUwZWQ0XHUwZWQ1XHUwZWQ2XHUwZWQ3XHUwZWQ4XHUwZWQ5XHVmZmZkXHVmZmZkXHhh'@;
put 'Mlx4YWNceGE2XHVmZmZkIn0saWJtMTEzMzoiY3AxMTMzIixjc2libTExMzM6ImNwMTEzMyIsY3AxMTYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGU0OFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1'@;
put 'MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUy'@;
put 'NFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1MGU0OVx1MGU0YVx1MGU0Ylx1MjBhY1x1MGUzZlx1'@;
put 'MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1'@;
put 'Ylx4YTJceGFjXHhhNlx4YTAifSxpYm0xMTYxOiJjcDExNjEiLGNzaWJtMTE2MToiY3AxMTYxIixjcDExNjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHg4MVx4ODJceDgzXHg4NFx1MjAyNlx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUy'@;
put 'MDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEw'@;
put 'XHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUw'@;
put 'ZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3'@;
put 'XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saWJtMTE2MjoiY3AxMTYyIixj'@;
put 'c2libTExNjI6ImNwMTE2MiIsY3AxMTYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5'@;
put 'ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4'@;
put 'YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlc'@;
put 'eGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTE2MzoiY3AxMTYzIixjc2libTExNjM6ImNwMTE2MyIsbWFjY3JvYXRpYW46e3R5cGU6Il9zYmNzIixj'@;
put 'aGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhi'@;
put 'Nlx4ZGZceGFlXHUwMTYwXHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxN2RceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MjIwNlx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAxNjFcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDE3ZVx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTAx'@;
put 'MDZceGFiXHUwMTBjXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MDExMFx1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdWZmZmRceGE5XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx4YzZceGJiXHUyMDEzXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJc'@;
put 'dTAxMDdceGMxXHUwMTBkXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1MDExMVx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwM2MwXHhjYlx1MDJkYVx4YjhceGNhXHhlNlx1MDJjNyJ9LG1hY2N5cmlsbGljOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1'@;
put 'MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQy'@;
put 'Y1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1'@;
put 'MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUw'@;
put 'NDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQz'@;
put 'XHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LG1hY2dyZWVrOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGI5XHhiMlx4YzlceGIzXHhkNlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAzODRceGE4XHhlN1x4'@;
put 'ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAyMFx1MDM5M1x1MDM5NFx1MDM5OFx1MDM5Ylx1MDM5ZVx1MDNhMFx4ZGZceGFlXHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBceGIwXHUwMzg3XHUw'@;
put 'MzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAzYThcdTAzYTlcdTAzYWNcdTAzOWRceGFjXHUwMzlmXHUwM2ExXHUyMjQ4XHUwM2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1XHUwM2E3XHUwMzg2'@;
put 'XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNhZFx1MDNhZVx1MDNhZlx1MDNjY1x1MDM4Zlx1MDNjZFx1MDNiMVx1MDNiMlx1MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNiM1x1MDNiN1x1MDNi'@;
put 'OVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1MDNjMlx1MDNjN1x1MDNjNVx1MDNiNlx1MDNjYVx1MDNjYlx1MDM5MFx1MDNiMFx1ZmZmZCJ9LG1hY2ljZWxhbmQ6e3R5cGU6Il9zYmNzIixjaGFy'@;
put 'czoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRm'@;
put 'XHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUy'@;
put 'MDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4'@;
put 'Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW46e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4'@;
put 'ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhj'@;
put 'Nlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUz'@;
put 'XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVm'@;
put 'ZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW5pYTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNc'@;
put 'eGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxMDJcdTAxNWVcdTIyMWVceGIx'@;
put 'XHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDEwM1x1MDE1Zlx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAx'@;
put 'NFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1MDE2Mlx1MDE2M1x1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRh'@;
put 'XHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3RoYWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhhYlx4YmJcdTIwMjZcdWY4OGNcdWY4OGZcdWY4OTJcdWY4OTVcdWY4OThcdWY4OGJcdWY4OGVcdWY4OTFc'@;
put 'dWY4OTRcdWY4OTdcdTIwMWNcdTIwMWRcdWY4OTlcdWZmZmRcdTIwMjJcdWY4ODRcdWY4ODlcdWY4ODVcdWY4ODZcdWY4ODdcdWY4ODhcdWY4OGFcdWY4OGRcdWY4OTBcdWY4OTNcdWY4OTZcdTIwMThcdTIwMTlcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2'@;
put 'XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUw'@;
put 'ZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZWZmXHUyMDBiXHUyMDEz'@;
put 'XHUyMDE0XHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUyMTIyXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUw'@;
put 'ZTU5XHhhZVx4YTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxtYWN0dXJraXNoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhm'@;
put 'M1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJi'@;
put 'XHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUw'@;
put 'MTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4'@;
put 'XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdWtyYWluZTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0'@;
put 'MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHUwNDkwXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNc'@;
put 'dTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MDQ5MVx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0'@;
put 'MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUw'@;
put 'NDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LGtvaThyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1'@;
put 'MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFc'@;
put 'eGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2'@;
put 'XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0'@;
put 'Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1'@;
put 'MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaTh1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUx'@;
put 'Y1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUx'@;
put 'XHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkxXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUyNTZjXHhh'@;
put 'OVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1'@;
put 'MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQx'@;
put 'Nlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaThydTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRc'@;
put 'dTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1'@;
put 'MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MDQ1ZVx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MDQwZVx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVc'@;
put 'dTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0'@;
put 'MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRc'@;
put 'dTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OWJcdTA0OTNcdTIwMWFcdTA0OTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTA0YjNcdTIwMzlcdTA0YjJcdTA0YjdcdTA0YjZcdWZmZmRcdTA0OWFcdTIwMThcdTIwMTlcdTIw'@;
put 'MWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0ZWZcdTA0ZWVcdTA0NTFceGE0XHUwNGUzXHhhNlx4YTdcdWZmZmRcdWZmZmRcdWZmZmRceGFiXHhhY1x4YWRceGFlXHVmZmZkXHhiMFx4YjFc'@;
put 'eGIyXHUwNDAxXHVmZmZkXHUwNGUyXHhiNlx4YjdcdWZmZmRcdTIxMTZcdWZmZmRceGJiXHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1'@;
put 'MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQx'@;
put 'OVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGFybXNjaWk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBc'@;
put 'eDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1MDU4N1x1MDU4OSkoXHhiYlx4YWJcdTIwMTQuXHUw'@;
put 'NTVkLC1cdTA1OGFcdTIwMjZcdTA1NWNcdTA1NWJcdTA1NWVcdTA1MzFcdTA1NjFcdTA1MzJcdTA1NjJcdTA1MzNcdTA1NjNcdTA1MzRcdTA1NjRcdTA1MzVcdTA1NjVcdTA1MzZcdTA1NjZcdTA1MzdcdTA1NjdcdTA1MzhcdTA1NjhcdTA1MzlcdTA1NjlcdTA1M2FcdTA1NmFcdTA1M2JcdTA1'@;
put 'NmJcdTA1M2NcdTA1NmNcdTA1M2RcdTA1NmRcdTA1M2VcdTA1NmVcdTA1M2ZcdTA1NmZcdTA1NDBcdTA1NzBcdTA1NDFcdTA1NzFcdTA1NDJcdTA1NzJcdTA1NDNcdTA1NzNcdTA1NDRcdTA1NzRcdTA1NDVcdTA1NzVcdTA1NDZcdTA1NzZcdTA1NDdcdTA1NzdcdTA1NDhcdTA1NzhcdTA1NDlc'@;
put 'dTA1NzlcdTA1NGFcdTA1N2FcdTA1NGJcdTA1N2JcdTA1NGNcdTA1N2NcdTA1NGRcdTA1N2RcdTA1NGVcdTA1N2VcdTA1NGZcdTA1N2ZcdTA1NTBcdTA1ODBcdTA1NTFcdTA1ODFcdTA1NTJcdTA1ODJcdTA1NTNcdTA1ODNcdTA1NTRcdTA1ODRcdTA1NTVcdTA1ODVcdTA1NTZcdTA1ODZcdTA1'@;
put 'NWFcdWZmZmQifSxyazEwNDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDlhXHUwNGJhXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk'@;
put 'XHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDliXHUwNGJiXHUwNDVmXHhhMFx1MDRiMFx1MDRiMVx1MDRkOFx4YTRcdTA0ZThceGE2XHhhN1x1MDQwMVx4YTlcdTA0OTJceGFiXHhhY1x4YWRceGFlXHUwNGFlXHhiMFx4YjFcdTA0MDZcdTA0NTZc'@;
put 'dTA0ZTlceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0OTNceGJiXHUwNGQ5XHUwNGEyXHUwNGEzXHUwNGFmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIw'@;
put 'XHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUw'@;
put 'NDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sdGN2bjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4ZGFcdTFlZTRceDAzXHUx'@;
put 'ZWVhXHUxZWVjXHUxZWVlXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx1MWVlOFx1MWVmMFx1MWVmMlx1MWVmNlx1MWVmOFx4ZGRcdTFlZjRceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9Q'@;
put 'UVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjMFx1MWVhMlx4YzNceGMxXHUxZWEwXHUxZWI2XHUxZWFjXHhjOFx1MWViYVx1MWViY1x4YzlcdTFlYjhcdTFlYzZceGNjXHUxZWM4XHUwMTI4XHhjZFx1MWVjYVx4ZDJcdTFlY2VceGQ1XHhkM1x1'@;
put 'MWVjY1x1MWVkOFx1MWVkY1x1MWVkZVx1MWVlMFx1MWVkYVx1MWVlMlx4ZDlcdTFlZTZcdTAxNjhceGEwXHUwMTAyXHhjMlx4Y2FceGQ0XHUwMWEwXHUwMWFmXHUwMTEwXHUwMTAzXHhlMlx4ZWFceGY0XHUwMWExXHUwMWIwXHUwMTExXHUxZWIwXHUwMzAwXHUwMzA5XHUwMzAzXHUwMzAxXHUw'@;
put 'MzIzXHhlMFx1MWVhM1x4ZTNceGUxXHUxZWExXHUxZWIyXHUxZWIxXHUxZWIzXHUxZWI1XHUxZWFmXHUxZWI0XHUxZWFlXHUxZWE2XHUxZWE4XHUxZWFhXHUxZWE0XHUxZWMwXHUxZWI3XHUxZWE3XHUxZWE5XHUxZWFiXHUxZWE1XHUxZWFkXHhlOFx1MWVjMlx1MWViYlx1MWViZFx4ZTlcdTFl'@;
put 'YjlcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYmZcdTFlYzdceGVjXHUxZWM5XHUxZWM0XHUxZWJlXHUxZWQyXHUwMTI5XHhlZFx1MWVjYlx4ZjJcdTFlZDRcdTFlY2ZceGY1XHhmM1x1MWVjZFx1MWVkM1x1MWVkNVx1MWVkN1x1MWVkMVx1MWVkOVx1MWVkZFx1MWVkZlx1MWVlMVx1MWVkYlx1MWVl'@;
put 'M1x4ZjlcdTFlZDZcdTFlZTdcdTAxNjlceGZhXHUxZWU1XHUxZWViXHUxZWVkXHUxZWVmXHUxZWU5XHUxZWYxXHUxZWYzXHUxZWY3XHUxZWY5XHhmZFx1MWVmNVx1MWVkMCJ9LGdlb3JnaWFuYWNhZGVteTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1'@;
put 'MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNc'@;
put 'eGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHUxMGQwXHUxMGQxXHUxMGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGQ3XHUxMGQ4'@;
put 'XHUxMGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4XHUxMGU5XHUxMGVhXHUxMGViXHUxMGVjXHUxMGVkXHUxMGVlXHUxMGVmXHUxMGYwXHUxMGYxXHUxMGYyXHUxMGYzXHUx'@;
put 'MGY0XHUxMGY1XHUxMGY2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGdlb3JnaWFucHM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFc'@;
put 'dTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEw'@;
put 'XHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBk'@;
put 'Nlx1MTBmMVx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBmMlx1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBmM1x1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1'@;
put 'MTBmNFx1MTBlZlx1MTBmMFx1MTBmNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0scHQxNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDk2XHUw'@;
put 'NDkyXHUwNGVlXHUwNDkzXHUyMDFlXHUyMDI2XHUwNGI2XHUwNGFlXHUwNGIyXHUwNGFmXHUwNGEwXHUwNGUyXHUwNGEyXHUwNDlhXHUwNGJhXHUwNGI4XHUwNDk3XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNGIzXHUwNGI3XHUwNGExXHUwNGUzXHUwNGEz'@;
put 'XHUwNDliXHUwNGJiXHUwNGI5XHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx1MDRlOFx1MDQ5OFx1MDRiMFx4YTdcdTA0MDFceGE5XHUwNGQ4XHhhYlx4YWNcdTA0ZWZceGFlXHUwNDljXHhiMFx1MDRiMVx1MDQwNlx1MDQ1Nlx1MDQ5OVx1MDRlOVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNGQ5XHhi'@;
put 'Ylx1MDQ1OFx1MDRhYVx1MDRhYlx1MDQ5ZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1'@;
put 'MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0'@;
put 'Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHZpc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFcdTFlYjJceDAzXHgwNFx1MWViNFx1MWVhYVx4MDdcYlx0XG5cdlxmXHJceDBlXHgw'@;
put 'Zlx4MTBceDExXHgxMlx4MTNcdTFlZjZceDE1XHgxNlx4MTdceDE4XHUxZWY4XHgxYVx4MWJceDFjXHgxZFx1MWVmNFx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7'@;
put 'fH1+XHg3Zlx1MWVhMFx1MWVhZVx1MWViMFx1MWViNlx1MWVhNFx1MWVhNlx1MWVhOFx1MWVhY1x1MWViY1x1MWViOFx1MWViZVx1MWVjMFx1MWVjMlx1MWVjNFx1MWVjNlx1MWVkMFx1MWVkMlx1MWVkNFx1MWVkNlx1MWVkOFx1MWVlMlx1MWVkYVx1MWVkY1x1MWVkZVx1MWVjYVx1MWVjZVx1'@;
put 'MWVjY1x1MWVjOFx1MWVlNlx1MDE2OFx1MWVlNFx1MWVmMlx4ZDVcdTFlYWZcdTFlYjFcdTFlYjdcdTFlYTVcdTFlYTdcdTFlYTlcdTFlYWRcdTFlYmRcdTFlYjlcdTFlYmZcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYzdcdTFlZDFcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZTBcdTAxYTBcdTFlZDlc'@;
put 'dTFlZGRcdTFlZGZcdTFlY2JcdTFlZjBcdTFlZThcdTFlZWFcdTFlZWNcdTAxYTFcdTFlZGJcdTAxYWZceGMwXHhjMVx4YzJceGMzXHUxZWEyXHUwMTAyXHUxZWIzXHUxZWI1XHhjOFx4YzlceGNhXHUxZWJhXHhjY1x4Y2RcdTAxMjhcdTFlZjNcdTAxMTBcdTFlZTlceGQyXHhkM1x4ZDRcdTFl'@;
put 'YTFcdTFlZjdcdTFlZWJcdTFlZWRceGQ5XHhkYVx1MWVmOVx1MWVmNVx4ZGRcdTFlZTFcdTAxYjBceGUwXHhlMVx4ZTJceGUzXHUxZWEzXHUwMTAzXHUxZWVmXHUxZWFiXHhlOFx4ZTlceGVhXHUxZWJiXHhlY1x4ZWRcdTAxMjlcdTFlYzlcdTAxMTFcdTFlZjFceGYyXHhmM1x4ZjRceGY1XHUx'@;
put 'ZWNmXHUxZWNkXHUxZWU1XHhmOVx4ZmFcdTAxNjlcdTFlZTdceGZkXHUxZWUzXHUxZWVlIn0saXNvNjQ2Y246e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgx'@;
put 'N1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiNceGE1JSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlzbzY0NmpwOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVc'@;
put 'eDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltceGE1XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9'@;
put 'XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGhwcm9tYW44Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4'@;
put 'ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YzBceGMyXHhjOFx4Y2FceGNiXHhjZVx4Y2ZceGI0XHUwMmNiXHUwMmM2XHhh'@;
put 'OFx1MDJkY1x4ZDlceGRiXHUyMGE0XHhhZlx4ZGRceGZkXHhiMFx4YzdceGU3XHhkMVx4ZjFceGExXHhiZlx4YTRceGEzXHhhNVx4YTdcdTAxOTJceGEyXHhlMlx4ZWFceGY0XHhmYlx4ZTFceGU5XHhmM1x4ZmFceGUwXHhlOFx4ZjJceGY5XHhlNFx4ZWJceGY2XHhmY1x4YzVceGVlXHhkOFx4'@;
put 'YzZceGU1XHhlZFx4ZjhceGU2XHhjNFx4ZWNceGQ2XHhkY1x4YzlceGVmXHhkZlx4ZDRceGMxXHhjM1x4ZTNceGQwXHhmMFx4Y2RceGNjXHhkM1x4ZDJceGQ1XHhmNVx1MDE2MFx1MDE2MVx4ZGFcdTAxNzhceGZmXHhkZVx4ZmVceGI3XHhiNVx4YjZceGJlXHUyMDE0XHhiY1x4YmRceGFhXHhi'@;
put 'YVx4YWJcdTI1YTBceGJiXHhiMVx1ZmZmZCJ9LG1hY2ludG9zaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4'@;
put 'ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUy'@;
put 'MTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIw'@;
put 'M2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJc'@;
put 'dTAyYzcifSxhc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx0aXM2MjA6e3R5cGU6Il9zYmNz'@;
put 'IixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUw'@;
put 'ZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMw'@;
put 'XHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUw'@;
put 'ZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn19fSw2NDc3MzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXsxMDAyOToi'@;
put 'bWFjY2VudGV1cm8iLG1hY2NlbnRldXJvOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUw'@;
put 'MTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIy'@;
put 'MDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAx'@;
put 'ZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZi'@;
put 'XHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3In0sODA4OiJjcDgwOCIsaWJtODA4OiJjcDgwOCIsY3A4MDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEz'@;
put 'XHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUw'@;
put 'NDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUx'@;
put 'XHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUy'@;
put 'NTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUx'@;
put 'XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZcdTIwYWNcdTI1YTBceGEwIn0sbWlrOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQx'@;
put 'OVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1'@;
put 'MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjUx'@;
put 'NFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU2M1x1MjU1MVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjUxMFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjExNlx4YTdcdTI1NTdcdTI1NWRcdTI1MThcdTI1MGNcdTI1ODhcdTI1'@;
put 'ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIx'@;
put 'OVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGNwNzIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHhlOVx4ZTJceDg0XHhlMFx4ODZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceDhkXHg4ZVx4OGZceDkwXHUwNjUxXHUwNjUyXHhmNFx4YTRcdTA2NDBceGZiXHhmOVx1'@;
put 'MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx4YTNcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUy'@;
put 'NFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1'@;
put 'MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MVx4YjVcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZc'@;
put 'dTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTIyNjFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sYXNjaWk4Yml0OiJhc2NpaSIsdXNhc2NpaToiYXNjaWkiLGFuc2l4MzQ6ImFzY2lpIixh'@;
put 'bnNpeDM0MTk2ODoiYXNjaWkiLGFuc2l4MzQxOTg2OiJhc2NpaSIsY3Nhc2NpaToiYXNjaWkiLGNwMzY3OiJhc2NpaSIsaWJtMzY3OiJhc2NpaSIsaXNvaXI2OiJhc2NpaSIsaXNvNjQ2dXM6ImFzY2lpIixpc282NDZpcnY6ImFzY2lpIix1czoiYXNjaWkiLGxhdGluMToiaXNvODg1OTEiLGxh'@;
put 'dGluMjoiaXNvODg1OTIiLGxhdGluMzoiaXNvODg1OTMiLGxhdGluNDoiaXNvODg1OTQiLGxhdGluNToiaXNvODg1OTkiLGxhdGluNjoiaXNvODg1OTEwIixsYXRpbjc6Imlzbzg4NTkxMyIsbGF0aW44OiJpc284ODU5MTQiLGxhdGluOToiaXNvODg1OTE1IixsYXRpbjEwOiJpc284ODU5MTYi'@;
put 'LGNzaXNvbGF0aW4xOiJpc284ODU5MSIsY3Npc29sYXRpbjI6Imlzbzg4NTkyIixjc2lzb2xhdGluMzoiaXNvODg1OTMiLGNzaXNvbGF0aW40OiJpc284ODU5NCIsY3Npc29sYXRpbmN5cmlsbGljOiJpc284ODU5NSIsY3Npc29sYXRpbmFyYWJpYzoiaXNvODg1OTYiLGNzaXNvbGF0aW5ncmVl'@;
put 'azoiaXNvODg1OTciLGNzaXNvbGF0aW5oZWJyZXc6Imlzbzg4NTk4Iixjc2lzb2xhdGluNToiaXNvODg1OTkiLGNzaXNvbGF0aW42OiJpc284ODU5MTAiLGwxOiJpc284ODU5MSIsbDI6Imlzbzg4NTkyIixsMzoiaXNvODg1OTMiLGw0OiJpc284ODU5NCIsbDU6Imlzbzg4NTk5IixsNjoiaXNv'@;
put 'ODg1OTEwIixsNzoiaXNvODg1OTEzIixsODoiaXNvODg1OTE0IixsOToiaXNvODg1OTE1IixsMTA6Imlzbzg4NTkxNiIsaXNvaXIxNDoiaXNvNjQ2anAiLGlzb2lyNTc6ImlzbzY0NmNuIixpc29pcjEwMDoiaXNvODg1OTEiLGlzb2lyMTAxOiJpc284ODU5MiIsaXNvaXIxMDk6Imlzbzg4NTkz'@;
put 'Iixpc29pcjExMDoiaXNvODg1OTQiLGlzb2lyMTQ0OiJpc284ODU5NSIsaXNvaXIxMjc6Imlzbzg4NTk2Iixpc29pcjEyNjoiaXNvODg1OTciLGlzb2lyMTM4OiJpc284ODU5OCIsaXNvaXIxNDg6Imlzbzg4NTk5Iixpc29pcjE1NzoiaXNvODg1OTEwIixpc29pcjE2NjoidGlzNjIwIixpc29p'@;
put 'cjE3OToiaXNvODg1OTEzIixpc29pcjE5OToiaXNvODg1OTE0Iixpc29pcjIwMzoiaXNvODg1OTE1Iixpc29pcjIyNjoiaXNvODg1OTE2IixjcDgxOToiaXNvODg1OTEiLGlibTgxOToiaXNvODg1OTEiLGN5cmlsbGljOiJpc284ODU5NSIsYXJhYmljOiJpc284ODU5NiIsYXJhYmljODoiaXNv'@;
put 'ODg1OTYiLGVjbWExMTQ6Imlzbzg4NTk2Iixhc21vNzA4OiJpc284ODU5NiIsZ3JlZWs6Imlzbzg4NTk3IixncmVlazg6Imlzbzg4NTk3IixlY21hMTE4OiJpc284ODU5NyIsZWxvdDkyODoiaXNvODg1OTciLGhlYnJldzoiaXNvODg1OTgiLGhlYnJldzg6Imlzbzg4NTk4Iix0dXJraXNoOiJp'@;
put 'c284ODU5OSIsdHVya2lzaDg6Imlzbzg4NTk5Iix0aGFpOiJpc284ODU5MTEiLHRoYWk4OiJpc284ODU5MTEiLGNlbHRpYzoiaXNvODg1OTE0IixjZWx0aWM4OiJpc284ODU5MTQiLGlzb2NlbHRpYzoiaXNvODg1OTE0Iix0aXM2MjAwOiJ0aXM2MjAiLHRpczYyMDI1MjkxOiJ0aXM2MjAiLHRp'@;
put 'czYyMDI1MzMwOiJ0aXM2MjAiLDFlNDoibWFjcm9tYW4iLDEwMDA2OiJtYWNncmVlayIsMTAwMDc6Im1hY2N5cmlsbGljIiwxMDA3OToibWFjaWNlbGFuZCIsMTAwODE6Im1hY3R1cmtpc2giLGNzcGM4Y29kZXBhZ2U0Mzc6ImNwNDM3Iixjc3BjNzc1YmFsdGljOiJjcDc3NSIsY3NwYzg1MG11'@;
put 'bHRpbGluZ3VhbDoiY3A4NTAiLGNzcGNwODUyOiJjcDg1MiIsY3NwYzg2MmxhdGluaGVicmV3OiJjcDg2MiIsY3BncjoiY3A4NjkiLG1zZWU6ImNwMTI1MCIsbXNjeXJsOiJjcDEyNTEiLG1zYW5zaToiY3AxMjUyIixtc2dyZWVrOiJjcDEyNTMiLG1zdHVyazoiY3AxMjU0Iixtc2hlYnI6ImNw'@;
put 'MTI1NSIsbXNhcmFiOiJjcDEyNTYiLHdpbmJhbHRyaW06ImNwMTI1NyIsY3AyMDg2Njoia29pOHIiLDIwODY2OiJrb2k4ciIsaWJtODc4OiJrb2k4ciIsY3Nrb2k4cjoia29pOHIiLGNwMjE4NjY6ImtvaTh1IiwyMTg2Njoia29pOHUiLGlibTExNjg6ImtvaTh1IixzdHJrMTA0ODIwMDI6InJr'@;
put 'MTA0OCIsdGN2bjU3MTI6InRjdm4iLHRjdm41NzEyMToidGN2biIsZ2IxOTg4ODA6ImlzbzY0NmNuIixjbjoiaXNvNjQ2Y24iLGNzaXNvMTRqaXNjNjIyMHJvOiJpc282NDZqcCIsamlzYzYyMjAxOTY5cm86ImlzbzY0NmpwIixqcDoiaXNvNjQ2anAiLGNzaHByb21hbjg6Imhwcm9tYW44Iixy'@;
put 'ODoiaHByb21hbjgiLHJvbWFuODoiaHByb21hbjgiLHhyb21hbjg6Imhwcm9tYW44IixpYm0xMDUxOiJocHJvbWFuOCIsbWFjOiJtYWNpbnRvc2giLGNzbWFjaW50b3NoOiJtYWNpbnRvc2gifX0sNDMyODA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7'@;
put 'ZnVuY3Rpb24geCgpe31mdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIGxlKCl7dGhpcy5vdmVyZmxvd0J5dGU9LTF9ZnVuY3Rpb24gTShLLEkpe3RoaXMuaWNvbnY9SX1mdW5jdGlvbiBPKEssSSl7dm9pZCAwPT09KEs9S3x8e30pLmFkZEJPTSYmKEsuYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9SS5p'@;
put 'Y29udi5nZXRFbmNvZGVyKCJ1dGYtMTZsZSIsSyl9ZnVuY3Rpb24gUihLLEkpe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPUt8fHt9LHRoaXMuaWNvbnY9SS5pY29udn1mdW5jdGlvbiB6KEssSSl7dmFy'@;
put 'IGs9SXx8InV0Zi0xNmxlIjtpZihLLmxlbmd0aD49MilpZigyNTQ9PUtbMF0mJjI1NT09S1sxXSlrPSJ1dGYtMTZiZSI7ZWxzZSBpZigyNTU9PUtbMF0mJjI1ND09S1sxXSlrPSJ1dGYtMTZsZSI7ZWxzZXtmb3IodmFyIEU9MCxqPTAsVj1NYXRoLm1pbihLLmxlbmd0aC1LLmxlbmd0aCUyLDY0'@;
put 'KSxCPTA7QjxWO0IrPTIpMD09PUtbQl0mJjAhPT1LW0IrMV0mJmorKywwIT09S1tCXSYmMD09PUtbQisxXSYmRSsrO2o+RT9rPSJ1dGYtMTZiZSI6ajxFJiYoaz0idXRmLTE2bGUiKX1yZXR1cm4ga31JZS51dGYxNmJlPXgseC5wcm90b3R5cGUuZW5jb2Rlcj1tLHgucHJvdG90eXBlLmRlY29k'@;
put 'ZXI9bGUseC5wcm90b3R5cGUuYm9tQXdhcmU9ITAsbS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7Zm9yKHZhciBJPWFlLmZyb20oSywidWNzMiIpLGs9MDtrPEkubGVuZ3RoO2srPTIpe3ZhciBFPUlba107SVtrXT1JW2srMV0sSVtrKzFdPUV9cmV0dXJuIEl9LG0ucHJvdG90eXBlLmVu'@;
put 'ZD1mdW5jdGlvbigpe30sbGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKDA9PUsubGVuZ3RoKXJldHVybiIiO3ZhciBJPWFlLmFsbG9jKEsubGVuZ3RoKzEpLGs9MCxFPTA7Zm9yKC0xIT09dGhpcy5vdmVyZmxvd0J5dGUmJihJWzBdPUtbMF0sSVsxXT10aGlzLm92ZXJmbG93Qnl0'@;
put 'ZSxrPTEsRT0yKTtrPEsubGVuZ3RoLTE7ays9MixFKz0yKUlbRV09S1trKzFdLElbRSsxXT1LW2tdO3JldHVybiB0aGlzLm92ZXJmbG93Qnl0ZT1rPT1LLmxlbmd0aC0xP0tbSy5sZW5ndGgtMV06LTEsSS5zbGljZSgwLEUpLnRvU3RyaW5nKCJ1Y3MyIil9LGxlLnByb3RvdHlwZS5lbmQ9ZnVu'@;
put 'Y3Rpb24oKXt9LEllLnV0ZjE2PU0sTS5wcm90b3R5cGUuZW5jb2Rlcj1PLE0ucHJvdG90eXBlLmRlY29kZXI9UixPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKEspfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5l'@;
put 'bmNvZGVyLmVuZCgpfSxSLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtpZighdGhpcy5kZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKEspLHRoaXMuaW5pdGlhbEJ5dGVzTGVuKz1LLmxlbmd0aCx0aGlzLmluaXRpYWxCeXRlc0xlbjwxNilyZXR1cm4iIjt2YXIgST16KEs9'@;
put 'YWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKEksdGhpcy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4g'@;
put 'dGhpcy5kZWNvZGVyLndyaXRlKEspfSxSLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgSz1hZS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLEk9eihLLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252Lmdl'@;
put 'dERlY29kZXIoSSx0aGlzLm9wdGlvbnMpO3ZhciBrPXRoaXMuZGVjb2Rlci53cml0ZShLKSxFPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gRT9rK0U6a31yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTI4NDQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5C'@;
put 'dWZmZXI7ZnVuY3Rpb24geChLLEkpe3RoaXMuaWNvbnY9SSx0aGlzLmJvbUF3YXJlPSEwLHRoaXMuaXNMRT1LLmlzTEV9ZnVuY3Rpb24gbShLLEkpe3RoaXMuaXNMRT1JLmlzTEUsdGhpcy5oaWdoU3Vycm9nYXRlPTB9ZnVuY3Rpb24gbGUoSyxJKXt0aGlzLmlzTEU9SS5pc0xFLHRoaXMuYmFk'@;
put 'Q2hhcj1JLmljb252LmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApLHRoaXMub3ZlcmZsb3c9bnVsbH1mdW5jdGlvbiBNKEssSSl7dGhpcy5pY29udj1JfWZ1bmN0aW9uIE8oSyxJKXt2b2lkIDA9PT0oSz1LfHx7fSkuYWRkQk9NJiYoSy5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1J'@;
put 'Lmljb252LmdldEVuY29kZXIoSy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGYtMzJsZSIsSyl9ZnVuY3Rpb24gUihLLEkpe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPUt8fHt9LHRoaXMuaWNvbnY9SS5pY29u'@;
put 'dn1mdW5jdGlvbiB6KEssSSl7dmFyIGs9SXx8InV0Zi0zMmxlIjtpZihLLmxlbmd0aD49NClpZig2NTI3OT09PUsucmVhZFVJbnQzMkJFKDApKWs9InV0Zi0zMmJlIjtlbHNlIGlmKDY1Mjc5PT09Sy5yZWFkVUludDMyTEUoMCkpaz0idXRmLTMybGUiO2Vsc2V7Zm9yKHZhciBFPTAsaj0wLFY9'@;
put 'MCxCPTAsWT1NYXRoLm1pbihLLmxlbmd0aC1LLmxlbmd0aCU0LDEyOCksWD0wO1g8WTtYKz00KXt2YXIgVT1LW1hdLHE9S1tYKzFdLGVlPUtbWCsyXSx0ZT1LW1grM107KDAhPT1VfHxxPjE2KSYmKytqLCgwIT09dGV8fGVlPjE2KSYmKytFLDA9PT1VJiYwPT09cSYmMD09PWVlJiYwIT09dGUm'@;
put 'JkIrKywwIT09VSYmMD09PXEmJjA9PT1lZSYmMD09PXRlJiZWKyt9ajxFP2s9InV0Zi0zMmJlIjpFPGomJihrPSJ1dGYtMzJsZSIpLEI+Vj9rPSJ1dGYtMzJiZSI6QjxWJiYoaz0idXRmLTMybGUiKX1yZXR1cm4ga31JZS5fdXRmMzI9eCxJZS51dGYzMmxlPXt0eXBlOiJfdXRmMzIiLGlzTEU6'@;
put 'ITB9LEllLnV0ZjMyYmU9e3R5cGU6Il91dGYzMiIsaXNMRTohMX0sSWUudWNzNGxlPSJ1dGYzMmxlIixJZS51Y3M0YmU9InV0ZjMyYmUiLHgucHJvdG90eXBlLmVuY29kZXI9bSx4LnByb3RvdHlwZS5kZWNvZGVyPWxlLG0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2Zvcih2YXIgST1h'@;
put 'ZS5mcm9tKEssInVjczIiKSxrPWFlLmFsbG9jKDIqSS5sZW5ndGgpLEU9dGhpcy5pc0xFP2sud3JpdGVVSW50MzJMRTprLndyaXRlVUludDMyQkUsaj0wLFY9MDtWPEkubGVuZ3RoO1YrPTIpe3ZhciBCPUkucmVhZFVJbnQxNkxFKFYpLFk9NTUyOTY8PUImJkI8NTYzMjA7aWYodGhpcy5oaWdo'@;
put 'U3Vycm9nYXRlKXtpZighWSYmNTYzMjA8PUImJkI8NTczNDQpe0UuY2FsbChrLDY1NTM2Kyh0aGlzLmhpZ2hTdXJyb2dhdGUtNTUyOTY8PDEwfEItNTYzMjApLGopLGorPTQsdGhpcy5oaWdoU3Vycm9nYXRlPTA7Y29udGludWV9RS5jYWxsKGssdGhpcy5oaWdoU3Vycm9nYXRlLGopLGorPTR9'@;
put 'WT90aGlzLmhpZ2hTdXJyb2dhdGU9QjooRS5jYWxsKGssQixqKSxqKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wKX1yZXR1cm4gajxrLmxlbmd0aCYmKGs9ay5zbGljZSgwLGopKSxrfSxtLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhpZ2hTdXJyb2dhdGUpe3ZhciBLPWFlLmFs'@;
put 'bG9jKDQpO3JldHVybiB0aGlzLmlzTEU/Sy53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKTpLLndyaXRlVUludDMyQkUodGhpcy5oaWdoU3Vycm9nYXRlLDApLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wLEt9fSxsZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7aWYoMD09PUsu'@;
put 'bGVuZ3RoKXJldHVybiIiO3RoaXMub3ZlcmZsb3cmJihLPWFlLmNvbmNhdChbdGhpcy5vdmVyZmxvdyxLXSkpO3ZhciBJPUsubGVuZ3RoLUsubGVuZ3RoJTQ7Sy5sZW5ndGghPT1JPyh0aGlzLm92ZXJmbG93PUsuc2xpY2UoSSksSz1LLnNsaWNlKDAsSSkpOnRoaXMub3ZlcmZsb3c9bnVsbDtm'@;
put 'b3IodmFyIGs9YWUuYWxsb2MoSSksRT0wLGo9MDtqPEk7ais9NCl7dmFyIFY9dGhpcy5pc0xFP0sucmVhZFVJbnQzMkxFKGopOksucmVhZFVJbnQzMkJFKGopO2lmKFY8NjU1MzYpay53cml0ZVVJbnQxNkxFKFYsRSksRSs9MjtlbHNlIGlmKFY+MTExNDExMSlrLndyaXRlVUludDE2TEUodGhp'@;
put 'cy5iYWRDaGFyLEUpLEUrPTI7ZWxzZXt2YXIgWT01NjMyMCsoMTAyMyYoVi09NjU1MzYpKTtrLndyaXRlVUludDE2TEUoNTUyOTZ8Vj4+MTAsRSksay53cml0ZVVJbnQxNkxFKFksRSs9MiksRSs9Mn19cmV0dXJuIGsuc2xpY2UoMCxFKS50b1N0cmluZygidWNzMiIpfSxsZS5wcm90b3R5cGUu'@;
put 'ZW5kPWZ1bmN0aW9uKCl7dGhpcy5vdmVyZmxvdz1udWxsfSxJZS51dGYzMj1NLEllLnVjczQ9TSxNLnByb3RvdHlwZS5lbmNvZGVyPU8sTS5wcm90b3R5cGUuZGVjb2Rlcj1SLE8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoSyl9LE8ucHJv'@;
put 'dG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goSyksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPUsubGVuZ3RoLHRoaXMuaW5p'@;
put 'dGlhbEJ5dGVzTGVuPDMyKXJldHVybiIiO3ZhciBrPXooYWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKGssdGhpcy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5n'@;
put 'dGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKEspfSxSLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgSz1hZS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLEk9eihLLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5j'@;
put 'b2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoSSx0aGlzLm9wdGlvbnMpO3ZhciBrPXRoaXMuZGVjb2Rlci53cml0ZShLKSxFPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gRT9rK0U6a31yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sNzgzNTQ6KGF0LEllLEYp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChZLFgpe3RoaXMuaWNvbnY9WH1JZS51dGY3PXgsSWUudW5pY29kZTExdXRmNz0idXRmNyIseC5wcm90b3R5cGUuZW5jb2Rlcj1sZSx4LnByb3RvdHlwZS5kZWNvZGVyPU0seC5wcm90b3R5cGUuYm9tQXdh'@;
put 'cmU9ITA7dmFyIG09L1teQS1aYS16MC05J1woXCksLVwuXC86XD8gXG5cclx0XSsvZztmdW5jdGlvbiBsZShZLFgpe3RoaXMuaWNvbnY9WC5pY29udn1mdW5jdGlvbiBNKFksWCl7dGhpcy5pY29udj1YLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1sZS5wcm90'@;
put 'b3R5cGUud3JpdGU9ZnVuY3Rpb24oWSl7cmV0dXJuIGFlLmZyb20oWS5yZXBsYWNlKG0sZnVuY3Rpb24oWCl7cmV0dXJuIisiKygiKyI9PT1YPyIiOnRoaXMuaWNvbnYuZW5jb2RlKFgsInV0ZjE2LWJlIikudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoLz0rJC8sIiIpKSsiLSJ9LmJpbmQo'@;
put 'dGhpcykpKX0sbGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe307Zm9yKHZhciBPPS9bQS1aYS16MC05XC8rXS8sUj1bXSx6PTA7ejwyNTY7eisrKVJbel09Ty50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoeikpO3ZhciBLPSIrIi5jaGFyQ29kZUF0KDApLEk9Ii0iLmNoYXJDb2RlQXQoMCks'@;
put 'az0iJiIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBFKFksWCl7dGhpcy5pY29udj1YfWZ1bmN0aW9uIGooWSxYKXt0aGlzLmljb252PVguaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPWFlLmFsbG9jKDYpLHRoaXMuYmFzZTY0QWNjdW1JZHg9MH1mdW5jdGlvbiBWKFks'@;
put 'WCl7dGhpcy5pY29udj1YLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1NLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihZKXtmb3IodmFyIFg9IiIsVT0wLHE9dGhpcy5pbkJhc2U2NCxlZT10aGlzLmJhc2U2NEFjY3VtLHRlPTA7dGU8WS5sZW5ndGg7dGUrKylp'@;
put 'ZihxKXtpZighUltZW3RlXV0pe2lmKHRlPT1VJiZZW3RlXT09SSlYKz0iKyI7ZWxzZXt2YXIgb2U9ZWUrWS5zbGljZShVLHRlKS50b1N0cmluZygpO1grPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20ob2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfVlbdGVdIT1JJiZ0ZS0tLFU9dGUrMSxxPSEx'@;
put 'LGVlPSIifX1lbHNlIFlbdGVdPT1LJiYoWCs9dGhpcy5pY29udi5kZWNvZGUoWS5zbGljZShVLHRlKSwiYXNjaWkiKSxVPXRlKzEscT0hMCk7aWYocSl7dmFyIHNlPShvZT1lZStZLnNsaWNlKFUpLnRvU3RyaW5nKCkpLmxlbmd0aC1vZS5sZW5ndGglODtlZT1vZS5zbGljZShzZSksb2U9b2Uu'@;
put 'c2xpY2UoMCxzZSksWCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBYKz10aGlzLmljb252LmRlY29kZShZLnNsaWNlKFUpLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PXEsdGhpcy5iYXNlNjRBY2N1bT1lZSxYfSxNLnByb3Rv'@;
put 'dHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgWT0iIjtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKFk9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0'@;
put 'aGlzLmJhc2U2NEFjY3VtPSIiLFl9LEllLnV0ZjdpbWFwPUUsRS5wcm90b3R5cGUuZW5jb2Rlcj1qLEUucHJvdG90eXBlLmRlY29kZXI9VixFLnByb3RvdHlwZS5ib21Bd2FyZT0hMCxqLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihZKXtmb3IodmFyIFg9dGhpcy5pbkJhc2U2NCxVPXRoaXMu'@;
put 'YmFzZTY0QWNjdW0scT10aGlzLmJhc2U2NEFjY3VtSWR4LGVlPWFlLmFsbG9jKDUqWS5sZW5ndGgrMTApLHRlPTAsb2U9MDtvZTxZLmxlbmd0aDtvZSsrKXt2YXIgc2U9WS5jaGFyQ29kZUF0KG9lKTszMjw9c2UmJnNlPD0xMjY/KFgmJihxPjAmJih0ZSs9ZWUud3JpdGUoVS5zbGljZSgwLHEp'@;
put 'LnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksdGUpLHE9MCksZWVbdGUrK109SSxYPSExKSxYfHwoZWVbdGUrK109c2Usc2U9PT1rJiYoZWVbdGUrK109SSkpKTooWHx8KGVlW3RlKytdPWssWD0hMCksWCYmKFVbcSsrXT1zZT4+OCxVW3Er'@;
put 'K109MjU1JnNlLHE9PVUubGVuZ3RoJiYodGUrPWVlLndyaXRlKFUudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKSx0ZSkscT0wKSkpfXJldHVybiB0aGlzLmluQmFzZTY0PVgsdGhpcy5iYXNlNjRBY2N1bUlkeD1xLGVlLnNsaWNlKDAsdGUpfSxqLnByb3RvdHlwZS5lbmQ9'@;
put 'ZnVuY3Rpb24oKXt2YXIgWT1hZS5hbGxvYygxMCksWD0wO3JldHVybiB0aGlzLmluQmFzZTY0JiYodGhpcy5iYXNlNjRBY2N1bUlkeD4wJiYoWCs9WS53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2Uo'@;
put 'L1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSxYKSx0aGlzLmJhc2U2NEFjY3VtSWR4PTApLFlbWCsrXT1JLHRoaXMuaW5CYXNlNjQ9ITEpLFkuc2xpY2UoMCxYKX07dmFyIEI9Ui5zbGljZSgpO0JbIiwiLmNoYXJDb2RlQXQoMCldPSEwLFYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFkp'@;
put 'e2Zvcih2YXIgWD0iIixVPTAscT10aGlzLmluQmFzZTY0LGVlPXRoaXMuYmFzZTY0QWNjdW0sdGU9MDt0ZTxZLmxlbmd0aDt0ZSsrKWlmKHEpe2lmKCFCW1lbdGVdXSl7aWYodGU9PVUmJllbdGVdPT1JKVgrPSImIjtlbHNle3ZhciBvZT1lZStZLnNsaWNlKFUsdGUpLnRvU3RyaW5nKCkucmVw'@;
put 'bGFjZSgvLC9nLCIvIik7WCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9WVt0ZV0hPUkmJnRlLS0sVT10ZSsxLHE9ITEsZWU9IiJ9fWVsc2UgWVt0ZV09PWsmJihYKz10aGlzLmljb252LmRlY29kZShZLnNsaWNlKFUsdGUpLCJhc2NpaSIpLFU9'@;
put 'dGUrMSxxPSEwKTtpZihxKXt2YXIgc2U9KG9lPWVlK1kuc2xpY2UoVSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLW9lLmxlbmd0aCU4O2VlPW9lLnNsaWNlKHNlKSxvZT1vZS5zbGljZSgwLHNlKSxYKz10aGlzLmljb252LmRlY29kZShhZS5mcm9tKG9lLCJiYXNlNjQi'@;
put 'KSwidXRmMTYtYmUiKX1lbHNlIFgrPXRoaXMuaWNvbnYuZGVjb2RlKFkuc2xpY2UoVSksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9cSx0aGlzLmJhc2U2NEFjY3VtPWVlLFh9LFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBZPSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0'@;
put 'aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYoWT10aGlzLmljb252LmRlY29kZShhZS5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sImJhc2U2NCIpLCJ1dGYxNi1iZSIpKSx0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiIsWX19LDYzMDE4OihhdCxJZSk9PnsidXNlIHN0cmljdCI7'@;
put 'ZnVuY3Rpb24gYWUobSxsZSl7dGhpcy5lbmNvZGVyPW0sdGhpcy5hZGRCT009ITB9ZnVuY3Rpb24geChtLGxlKXt0aGlzLmRlY29kZXI9bSx0aGlzLnBhc3M9ITEsdGhpcy5vcHRpb25zPWxlfHx7fX1JZS5QcmVwZW5kQk9NPWFlLGFlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihtKXtyZXR1'@;
put 'cm4gdGhpcy5hZGRCT00mJihtPSJcdWZlZmYiK20sdGhpcy5hZGRCT009ITEpLHRoaXMuZW5jb2Rlci53cml0ZShtKX0sYWUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LEllLlN0cmlwQk9NPXgseC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24o'@;
put 'bSl7dmFyIGxlPXRoaXMuZGVjb2Rlci53cml0ZShtKTtyZXR1cm4gdGhpcy5wYXNzfHwhbGV8fCgiXHVmZWZmIj09PWxlWzBdJiYobGU9bGUuc2xpY2UoMSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zdHJpcEJPTSYmdGhpcy5vcHRpb25zLnN0cmlwQk9NKCkpLHRoaXMucGFz'@;
put 'cz0hMCksbGV9LHgucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw1MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcix4PUYoNjMwMTgpLG09YXQuZXhwb3J0czttLmVuY29kaW5ncz1udWxsLG0uZGVmYXVs'@;
put 'dENoYXJVbmljb2RlPSJcdWZmZmQiLG0uZGVmYXVsdENoYXJTaW5nbGVCeXRlPSI/IixtLmVuY29kZT1mdW5jdGlvbihSLHosSyl7Uj0iIisoUnx8IiIpO3ZhciBJPW0uZ2V0RW5jb2Rlcih6LEspLGs9SS53cml0ZShSKSxFPUkuZW5kKCk7cmV0dXJuIEUmJkUubGVuZ3RoPjA/YWUuY29uY2F0'@;
put 'KFtrLEVdKTprfSxtLmRlY29kZT1mdW5jdGlvbihSLHosSyl7InN0cmluZyI9PXR5cGVvZiBSJiYobS5za2lwRGVjb2RlV2FybmluZ3x8KGNvbnNvbGUuZXJyb3IoIkljb252LWxpdGUgd2FybmluZzogZGVjb2RlKCktaW5nIHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gUmVmZXIgdG8gaHR0cHM6'@;
put 'Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93aWtpL1VzZS1CdWZmZXJzLXdoZW4tZGVjb2RpbmciKSxtLnNraXBEZWNvZGVXYXJuaW5nPSEwKSxSPWFlLmZyb20oIiIrKFJ8fCIiKSwiYmluYXJ5IikpO3ZhciBJPW0uZ2V0RGVjb2Rlcih6LEspLGs9SS53cml0ZShSKSxFPUku'@;
put 'ZW5kKCk7cmV0dXJuIEU/aytFOmt9LG0uZW5jb2RpbmdFeGlzdHM9ZnVuY3Rpb24oUil7dHJ5e3JldHVybiBtLmdldENvZGVjKFIpLCEwfWNhdGNoe3JldHVybiExfX0sbS50b0VuY29kaW5nPW0uZW5jb2RlLG0uZnJvbUVuY29kaW5nPW0uZGVjb2RlLG0uX2NvZGVjRGF0YUNhY2hlPXt9LG0u'@;
put 'Z2V0Q29kZWM9ZnVuY3Rpb24oUil7bS5lbmNvZGluZ3N8fChtLmVuY29kaW5ncz1GKDQ0NjU3KSk7Zm9yKHZhciB6PW0uX2Nhbm9uaWNhbGl6ZUVuY29kaW5nKFIpLEs9e307Oyl7dmFyIEk9bS5fY29kZWNEYXRhQ2FjaGVbel07aWYoSSlyZXR1cm4gSTt2YXIgaz1tLmVuY29kaW5nc1t6XTtz'@;
put 'd2l0Y2godHlwZW9mIGspe2Nhc2Uic3RyaW5nIjp6PWs7YnJlYWs7Y2FzZSJvYmplY3QiOmZvcih2YXIgRSBpbiBrKUtbRV09a1tFXTtLLmVuY29kaW5nTmFtZXx8KEsuZW5jb2RpbmdOYW1lPXopLHo9ay50eXBlO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBLLmVuY29kaW5nTmFtZXx8'@;
put 'KEsuZW5jb2RpbmdOYW1lPXopLEk9bmV3IGsoSyxtKSxtLl9jb2RlY0RhdGFDYWNoZVtLLmVuY29kaW5nTmFtZV09SSxJO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyBub3QgcmVjb2duaXplZDogJyIrUisiJyAoc2VhcmNoZWQgYXM6ICciK3orIicpIil9fX0sbS5fY2Fub25p'@;
put 'Y2FsaXplRW5jb2Rpbmc9ZnVuY3Rpb24oTyl7cmV0dXJuKCIiK08pLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvOlxkezR9JHxbXjAtOWEtel0vZywiIil9LG0uZ2V0RW5jb2Rlcj1mdW5jdGlvbihSLHope3ZhciBLPW0uZ2V0Q29kZWMoUiksST1uZXcgSy5lbmNvZGVyKHosSyk7cmV0dXJuIEsu'@;
put 'Ym9tQXdhcmUmJnomJnouYWRkQk9NJiYoST1uZXcgeC5QcmVwZW5kQk9NKEkseikpLEl9LG0uZ2V0RGVjb2Rlcj1mdW5jdGlvbihSLHope3ZhciBLPW0uZ2V0Q29kZWMoUiksST1uZXcgSy5kZWNvZGVyKHosSyk7cmV0dXJuIEsuYm9tQXdhcmUmJiEoeiYmITE9PT16LnN0cmlwQk9NKSYmKEk9'@;
put 'bmV3IHguU3RyaXBCT00oSSx6KSksSX07dmFyIGxlPXR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy52ZXJzaW9ucyYmcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO2lmKGxlKXt2YXIgTT1sZS5zcGxpdCgiLiIpLm1hcChOdW1iZXIpOyhNWzBdPjB8fE1bMV0+PTEwKSYmRig2OTMzMSkobSksRigx'@;
put 'OTUyNykobSl9fSwyMjYwMTooYXQsSWUpPT57SWUucmVhZD1mdW5jdGlvbihGLGFlLHgsbSxsZSl7dmFyIE0sTyxSPTgqbGUtbS0xLHo9KDE8PFIpLTEsSz16Pj4xLEk9LTcsaz14P2xlLTE6MCxFPXg/LTE6MSxqPUZbYWUra107Zm9yKGsrPUUsTT1qJigxPDwtSSktMSxqPj49LUksSSs9UjtJ'@;
put 'PjA7TT0yNTYqTStGW2FlK2tdLGsrPUUsSS09OCk7Zm9yKE89TSYoMTw8LUkpLTEsTT4+PS1JLEkrPW07ST4wO089MjU2Kk8rRlthZStrXSxrKz1FLEktPTgpO2lmKDA9PT1NKU09MS1LO2Vsc2V7aWYoTT09PXopcmV0dXJuIE8/TmFOOjEvMCooaj8tMToxKTtPKz1NYXRoLnBvdygyLG0pLE0t'@;
put 'PUt9cmV0dXJuKGo/LTE6MSkqTypNYXRoLnBvdygyLE0tbSl9LEllLndyaXRlPWZ1bmN0aW9uKEYsYWUseCxtLGxlLE0pe3ZhciBPLFIseixLPTgqTS1sZS0xLEk9KDE8PEspLTEsaz1JPj4xLEU9MjM9PT1sZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsaj1tPzA6TS0xLFY9'@;
put 'bT8xOi0xLEI9YWU8MHx8MD09PWFlJiYxL2FlPDA/MTowO2ZvcihhZT1NYXRoLmFicyhhZSksaXNOYU4oYWUpfHxhZT09PTEvMD8oUj1pc05hTihhZSk/MTowLE89SSk6KE89TWF0aC5mbG9vcihNYXRoLmxvZyhhZSkvTWF0aC5MTjIpLGFlKih6PU1hdGgucG93KDIsLU8pKTwxJiYoTy0tLHoq'@;
put 'PTIpLChhZSs9TytrPj0xP0UvejpFKk1hdGgucG93KDIsMS1rKSkqej49MiYmKE8rKyx6Lz0yKSxPK2s+PUk/KFI9MCxPPUkpOk8raz49MT8oUj0oYWUqei0xKSpNYXRoLnBvdygyLGxlKSxPKz1rKTooUj1hZSpNYXRoLnBvdygyLGstMSkqTWF0aC5wb3coMixsZSksTz0wKSk7bGU+PTg7Rlt4'@;
put 'K2pdPTI1NSZSLGorPVYsUi89MjU2LGxlLT04KTtmb3IoTz1PPDxsZXxSLEsrPWxlO0s+MDtGW3gral09MjU1Jk8sais9VixPLz0yNTYsSy09OCk7Rlt4K2otVl18PTEyOCpCfX0sNjY2OTg6YXQ9PnthdC5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9u'@;
put 'KEYsYWUpe2FlJiYoRi5zdXBlcl89YWUsRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpGLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oRixhZSl7aWYoYWUpe0Yuc3VwZXJfPWFl'@;
put 'O3ZhciB4PWZ1bmN0aW9uKCl7fTt4LnByb3RvdHlwZT1hZS5wcm90b3R5cGUsRi5wcm90b3R5cGU9bmV3IHgsRi5wcm90b3R5cGUuY29uc3RydWN0b3I9Rn19fSw3NTgyOTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig2MDM4MCksbT1GKDg0MykuQnVmZmVy'@;
put 'LGxlPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gTSgpe3guY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBPKGssRSl7cmV0dXJuIGs8PEV8az4+PjMyLUV9ZnVuY3Rp'@;
put 'b24gUihrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhFJmp8fkUmVikrQitZfDAsWCkrRXwwfWZ1bmN0aW9uIHooayxFLGosVixCLFksWCl7cmV0dXJuIE8oaysoRSZWfGomflYpK0IrWXwwLFgpK0V8MH1mdW5jdGlvbiBLKGssRSxqLFYsQixZLFgpe3JldHVybiBPKGsrKEVeal5WKStCK1l8'@;
put 'MCxYKStFfDB9ZnVuY3Rpb24gSShrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhqXihFfH5WKSkrQitZfDAsWCkrRXwwfWFlKE0seCksTS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgaz1sZSxFPTA7RTwxNjsrK0Upa1tFXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0'@;
put 'KkUpO3ZhciBqPXRoaXMuX2EsVj10aGlzLl9iLEI9dGhpcy5fYyxZPXRoaXMuX2Q7aj1SKGosVixCLFksa1swXSwzNjE0MDkwMzYwLDcpLFk9UihZLGosVixCLGtbMV0sMzkwNTQwMjcxMCwxMiksQj1SKEIsWSxqLFYsa1syXSw2MDYxMDU4MTksMTcpLFY9UihWLEIsWSxqLGtbM10sMzI1MDQ0'@;
put 'MTk2NiwyMiksaj1SKGosVixCLFksa1s0XSw0MTE4NTQ4Mzk5LDcpLFk9UihZLGosVixCLGtbNV0sMTIwMDA4MDQyNiwxMiksQj1SKEIsWSxqLFYsa1s2XSwyODIxNzM1OTU1LDE3KSxWPVIoVixCLFksaixrWzddLDQyNDkyNjEzMTMsMjIpLGo9UihqLFYsQixZLGtbOF0sMTc3MDAzNTQxNiw3'@;
put 'KSxZPVIoWSxqLFYsQixrWzldLDIzMzY1NTI4NzksMTIpLEI9UihCLFksaixWLGtbMTBdLDQyOTQ5MjUyMzMsMTcpLFY9UihWLEIsWSxqLGtbMTFdLDIzMDQ1NjMxMzQsMjIpLGo9UihqLFYsQixZLGtbMTJdLDE4MDQ2MDM2ODIsNyksWT1SKFksaixWLEIsa1sxM10sNDI1NDYyNjE5NSwxMiks'@;
put 'Qj1SKEIsWSxqLFYsa1sxNF0sMjc5Mjk2NTAwNiwxNyksaj16KGosVj1SKFYsQixZLGosa1sxNV0sMTIzNjUzNTMyOSwyMiksQixZLGtbMV0sNDEyOTE3MDc4Niw1KSxZPXooWSxqLFYsQixrWzZdLDMyMjU0NjU2NjQsOSksQj16KEIsWSxqLFYsa1sxMV0sNjQzNzE3NzEzLDE0KSxWPXooVixC'@;
put 'LFksaixrWzBdLDM5MjEwNjk5OTQsMjApLGo9eihqLFYsQixZLGtbNV0sMzU5MzQwODYwNSw1KSxZPXooWSxqLFYsQixrWzEwXSwzODAxNjA4Myw5KSxCPXooQixZLGosVixrWzE1XSwzNjM0NDg4OTYxLDE0KSxWPXooVixCLFksaixrWzRdLDM4ODk0Mjk0NDgsMjApLGo9eihqLFYsQixZLGtb'@;
put 'OV0sNTY4NDQ2NDM4LDUpLFk9eihZLGosVixCLGtbMTRdLDMyNzUxNjM2MDYsOSksQj16KEIsWSxqLFYsa1szXSw0MTA3NjAzMzM1LDE0KSxWPXooVixCLFksaixrWzhdLDExNjM1MzE1MDEsMjApLGo9eihqLFYsQixZLGtbMTNdLDI4NTAyODU4MjksNSksWT16KFksaixWLEIsa1syXSw0MjQz'@;
put 'NTYzNTEyLDkpLEI9eihCLFksaixWLGtbN10sMTczNTMyODQ3MywxNCksaj1LKGosVj16KFYsQixZLGosa1sxMl0sMjM2ODM1OTU2MiwyMCksQixZLGtbNV0sNDI5NDU4ODczOCw0KSxZPUsoWSxqLFYsQixrWzhdLDIyNzIzOTI4MzMsMTEpLEI9SyhCLFksaixWLGtbMTFdLDE4MzkwMzA1NjIs'@;
put 'MTYpLFY9SyhWLEIsWSxqLGtbMTRdLDQyNTk2NTc3NDAsMjMpLGo9SyhqLFYsQixZLGtbMV0sMjc2Mzk3NTIzNiw0KSxZPUsoWSxqLFYsQixrWzRdLDEyNzI4OTMzNTMsMTEpLEI9SyhCLFksaixWLGtbN10sNDEzOTQ2OTY2NCwxNiksVj1LKFYsQixZLGosa1sxMF0sMzIwMDIzNjY1NiwyMyks'@;
put 'aj1LKGosVixCLFksa1sxM10sNjgxMjc5MTc0LDQpLFk9SyhZLGosVixCLGtbMF0sMzkzNjQzMDA3NCwxMSksQj1LKEIsWSxqLFYsa1szXSwzNTcyNDQ1MzE3LDE2KSxWPUsoVixCLFksaixrWzZdLDc2MDI5MTg5LDIzKSxqPUsoaixWLEIsWSxrWzldLDM2NTQ2MDI4MDksNCksWT1LKFksaixW'@;
put 'LEIsa1sxMl0sMzg3MzE1MTQ2MSwxMSksQj1LKEIsWSxqLFYsa1sxNV0sNTMwNzQyNTIwLDE2KSxqPUkoaixWPUsoVixCLFksaixrWzJdLDMyOTk2Mjg2NDUsMjMpLEIsWSxrWzBdLDQwOTYzMzY0NTIsNiksWT1JKFksaixWLEIsa1s3XSwxMTI2ODkxNDE1LDEwKSxCPUkoQixZLGosVixrWzE0'@;
put 'XSwyODc4NjEyMzkxLDE1KSxWPUkoVixCLFksaixrWzVdLDQyMzc1MzMyNDEsMjEpLGo9SShqLFYsQixZLGtbMTJdLDE3MDA0ODU1NzEsNiksWT1JKFksaixWLEIsa1szXSwyMzk5OTgwNjkwLDEwKSxCPUkoQixZLGosVixrWzEwXSw0MjkzOTE1NzczLDE1KSxWPUkoVixCLFksaixrWzFdLDIy'@;
put 'NDAwNDQ0OTcsMjEpLGo9SShqLFYsQixZLGtbOF0sMTg3MzMxMzM1OSw2KSxZPUkoWSxqLFYsQixrWzE1XSw0MjY0MzU1NTUyLDEwKSxCPUkoQixZLGosVixrWzZdLDI3MzQ3Njg5MTYsMTUpLFY9SShWLEIsWSxqLGtbMTNdLDEzMDkxNTE2NDksMjEpLGo9SShqLFYsQixZLGtbNF0sNDE0OTQ0'@;
put 'NDIyNiw2KSxZPUkoWSxqLFYsQixrWzExXSwzMTc0NzU2OTE3LDEwKSxCPUkoQixZLGosVixrWzJdLDcxODc4NzI1OSwxNSksVj1JKFYsQixZLGosa1s5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2EranwwLHRoaXMuX2I9dGhpcy5fYitWfDAsdGhpcy5fYz10aGlzLl9jK0J8MCx0'@;
put 'aGlzLl9kPXRoaXMuX2QrWXwwfSxNLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUo'@;
put 'KSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBk'@;
put 'YXRlKCk7dmFyIGs9bS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGsud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksay53cml0ZUludDMyTEUodGhpcy5fYiw0KSxrLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLGsud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLGt9LGF0LmV4cG9ydHM9TX0sNDg2MDY6'@;
put 'KGF0LEllLEYpPT57dmFyIGFlPUYoNjAzMDMpLHg9Rig2MDA4Mik7ZnVuY3Rpb24gbShsZSl7dGhpcy5yYW5kPWxlfHxuZXcgeC5SYW5kfWF0LmV4cG9ydHM9bSxtLmNyZWF0ZT1mdW5jdGlvbihNKXtyZXR1cm4gbmV3IG0oTSl9LG0ucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24oTSl7'@;
put 'dmFyIE89TS5iaXRMZW5ndGgoKSxSPU1hdGguY2VpbChPLzgpO2Rve3ZhciB6PW5ldyBhZSh0aGlzLnJhbmQuZ2VuZXJhdGUoUikpfXdoaWxlKHouY21wKE0pPj0wKTtyZXR1cm4gen0sbS5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbihNLE8pe3ZhciBSPU8uc3ViKE0pO3JldHVybiBN'@;
put 'LmFkZCh0aGlzLl9yYW5kYmVsb3coUikpfSxtLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKE0sTyxSKXt2YXIgej1NLmJpdExlbmd0aCgpLEs9YWUubW9udChNKSxJPW5ldyBhZSgxKS50b1JlZChLKTtPfHwoTz1NYXRoLm1heCgxLHovNDh8MCkpO2Zvcih2YXIgaz1NLnN1Ym4oMSksRT0wOyFr'@;
put 'LnRlc3RuKEUpO0UrKyk7Zm9yKHZhciBqPU0uc2hybihFKSxWPWsudG9SZWQoSyk7Tz4wO08tLSl7dmFyIFk9dGhpcy5fcmFuZHJhbmdlKG5ldyBhZSgyKSxrKTtSJiZSKFkpO3ZhciBYPVkudG9SZWQoSykucmVkUG93KGopO2lmKDAhPT1YLmNtcChJKSYmMCE9PVguY21wKFYpKXtmb3IodmFy'@;
put 'IFU9MTtVPEU7VSsrKXtpZigwPT09KFg9WC5yZWRTcXIoKSkuY21wKEkpKXJldHVybiExO2lmKDA9PT1YLmNtcChWKSlicmVha31pZihVPT09RSlyZXR1cm4hMX19cmV0dXJuITB9LG0ucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24oTSxPKXt2YXIgUj1NLmJpdExlbmd0aCgpLHo9YWUu'@;
put 'bW9udChNKSxLPW5ldyBhZSgxKS50b1JlZCh6KTtPfHwoTz1NYXRoLm1heCgxLFIvNDh8MCkpO2Zvcih2YXIgST1NLnN1Ym4oMSksaz0wOyFJLnRlc3RuKGspO2srKyk7Zm9yKHZhciBFPU0uc2hybihrKSxqPUkudG9SZWQoeik7Tz4wO08tLSl7dmFyIFY9dGhpcy5fcmFuZHJhbmdlKG5ldyBh'@;
put 'ZSgyKSxJKSxCPU0uZ2NkKFYpO2lmKDAhPT1CLmNtcG4oMSkpcmV0dXJuIEI7dmFyIFk9Vi50b1JlZCh6KS5yZWRQb3coRSk7aWYoMCE9PVkuY21wKEspJiYwIT09WS5jbXAoaikpe2Zvcih2YXIgWD0xO1g8aztYKyspe2lmKDA9PT0oWT1ZLnJlZFNxcigpKS5jbXAoSykpcmV0dXJuIFkuZnJv'@;
put 'bVJlZCgpLnN1Ym4oMSkuZ2NkKE0pO2lmKDA9PT1ZLmNtcChqKSlicmVha31pZihYPT09aylyZXR1cm4oWT1ZLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2QoTSl9fXJldHVybiExfX0sNjAzMDM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0Ijtm'@;
put 'dW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBEPWZ1bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlwZS5jb25z'@;
put 'dHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMuX2luaXQo'@;
put 'R3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDU2NjE5KS5CdWZm'@;
put 'ZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBIPVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9'@;
put 'ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQoQyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1MtMTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9u'@;
put 'KGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQs'@;
put 'SCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSksTjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6'@;
put 'KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1b'@;
put 'NjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3'@;
put 'MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhp'@;
put 'cy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9'@;
put 'PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09'@;
put 'PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAo'@;
put 'KX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMs'@;
put 'Zz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpE'@;
put 'O048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9'@;
put 'WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1ILFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMu'@;
put 'd29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVuZ3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihKKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9'@;
put 'cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIud29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0'@;
put 'aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yjsp'@;
put 'dGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJv'@;
put 'dG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlz'@;
put 'LnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1'@;
put 'LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0'@;
put 'MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlv'@;
put 'biBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZD'@;
put 'O2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5tYXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShDPShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStK'@;
put 'KS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxELnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8'@;
put 'ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUmKFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4yNC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVu'@;
put 'Z3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtb'@;
put 'Yl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3RyaW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUrSDpJW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYo'@;
put 'SD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3Jl'@;
put 'dHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2Fm'@;
put 'ZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0'@;
put 'aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1h'@;
put 'dGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9ImxlIj09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3Io'@;
put 'cD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12'@;
put 'fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYoSCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYm'@;
put 'KEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgr'@;
put 'PTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUu'@;
put 'emVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVM'@;
put 'ZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBl'@;
put 'LmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0'@;
put 'aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29yZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0'@;
put 'aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhp'@;
put 'cy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNb'@;
put 'SF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBl'@;
put 'LmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChi'@;
put 'KTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtOPEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53'@;
put 'b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIu'@;
put 'bmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlz'@;
put 'Lmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChE'@;
put 'KSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRz'@;
put 'W0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5u'@;
put 'ZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1i'@;
put 'LE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxI'@;
put 'LndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhp'@;
put 'c30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5l'@;
put 'Z2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9'@;
put 'MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChi'@;
put 'KTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKTooTj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkr'@;
put 'Qyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhp'@;
put 'cy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2'@;
put 'YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLExlPWZlPj4+MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfE5b'@;
put 'M10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLFFlPTB8Tls0XSxsdD04MTkxJlFlLFBlPVFlPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLG90'@;
put 'PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdbMl0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkx'@;
put 'JmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyxtbj0wfGdbNV0scnQ9ODE5MSZtbixJdD1tbj4+PjEzLFF0PTB8Z1s2XSxEdD04MTkxJlF0LHB0PVF0Pj4+MTMsWXQ9MHxnWzddLEluPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixz'@;
put 'bj15bj4+PjEzLEJuPTB8Z1s5XSxSbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIEZuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUs'@;
put 'Q24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKEZuPj4+MjYpfDAsRm4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGguaW11bChMZSxDbil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShT'@;
put 'Kyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5p'@;
put 'bXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChqZSxDbil8MCx3PU1hdGguaW11bChqZSxVdCksdj12K01hdGguaW11bCh4ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoTGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2'@;
put 'YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsSG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLEhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMs'@;
put 'dj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChqZSxXbil8MCx3PXcrTWF0aC5pbXVsKGpl'@;
put 'LGVuKXwwLHY9ditNYXRoLmltdWwoeGUsSG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhuKXwwLHc9dytNYXRoLmltdWwoTGUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUs'@;
put 'd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShwPU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1h'@;
put 'dGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11'@;
put 'bChqZSxIbil8MCx3PXcrTWF0aC5pbXVsKGplLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKExlLGhuKXwwLHc9dytNYXRoLmltdWwoTGUsd3QpfDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSso'@;
put 'KDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxV'@;
put 'dCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVuKXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLEhuKXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCx3PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0ocD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKGplLGhuKXwwLHc9dytNYXRoLmltdWwoamUsd3QpfDAsdj12K01hdGguaW11'@;
put 'bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUsX3QpfDAsdz13K01hdGguaW11bChMZSxOdCl8MDt2YXIgZ2k9KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRl'@;
put 'LHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkrTWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYr'@;
put 'TWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXwwLHY9ditNYXRoLmltdWwobHQsSG4pfDAscD0ocD1wK01hdGguaW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLHc9dytNYXRo'@;
put 'LmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11'@;
put 'bChqZSxfdCl8MCx3PXcrTWF0aC5pbXVsKGplLE50KXwwLHY9ditNYXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLHc9dytNYXRoLmltdWwoTGUsSXQpfDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSso'@;
put 'KDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxV'@;
put 'dCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVuKXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLEhuKXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCx3PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0ocD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11'@;
put 'bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChqZSxydCl8MCx3PXcrTWF0aC5pbXVsKGpl'@;
put 'LEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXwwLHc9dytNYXRoLmltdWwoTGUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVsKG5lLEluKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUs'@;
put 'enQpfDApK01hdGguaW11bChkZSxJbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKG90LENuKSxwPShwPU1hdGguaW11bChvdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1h'@;
put 'dGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11'@;
put 'bChVZSxIbil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3QpfDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsSXQpfDApK01hdGguaW11bChZZSxydCl8MCx3PXcrTWF0aC5pbXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKGplLER0KXwwLHc9dytNYXRoLmltdWwoamUscHQpfDAsdj12K01hdGguaW11bCh4ZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoTGUsSW4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2'@;
put 'YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNuKXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMs'@;
put 'dj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0aC5pbXVsKG90LFduKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0'@;
put 'LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsSG4pfDAscD0ocD1wK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXwwLHc9dytNYXRoLmltdWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4p'@;
put 'fDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditNYXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8'@;
put 'MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsSXQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGguaW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLEluKXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxJbil8MCx3PXcrTWF0aC5pbXVsKGplLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXwwLHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShT'@;
put 'Kyh2PXYrTWF0aC5pbXVsKG5lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChkZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5p'@;
put 'bXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChvdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKG90LGZ0KXwwKStNYXRoLmltdWwodXQsSG4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2'@;
put 'PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytN'@;
put 'YXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsdz13K01hdGguaW11bChUZSxJdCl8MCx2PXYrTWF0aC5pbXVsKGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGgu'@;
put 'aW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwoS2UsSW4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLEluKXwwLHc9dytNYXRoLmltdWwoWWUsenQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsdz13K01hdGguaW11bChqZSxzbil8MDt2YXIgSHI9KFMrKHY9ditNYXRoLmltdWwoeGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwkdCl8MCkrTWF0aC5pbXVsKExlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcr'@;
put 'TWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSG4pLHA9KHA9TWF0aC5pbXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LEhuKXwwLHc9TWF0aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKG90LGhuKXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwob3Qsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAscD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGgu'@;
put 'aW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChVZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsSW4pfDAscD0ocD1wK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLEluKXwwLHc9dytNYXRoLmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUs'@;
put 'eG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmltdWwoT2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGplLCR0KXwwKSsocD4+PjEz'@;
put 'KXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVsKG90LF90KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsTnQpfDApK01hdGgu'@;
put 'aW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUsSXQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChUZSxJbil8MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQs'@;
put 'eG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2PXYrTWF0aC5pbXVsKEtlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8'@;
put 'MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGguaW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGgu'@;
put 'aW11bChvdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKG90LEl0KXwwKStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1dCxJdCl8MCx2PXYrTWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsSW4pfDAscD0ocD1wK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLEluKXwwLHc9dytNYXRoLmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUs'@;
put 'eG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmltdWwobHQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEz'@;
put 'KXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0aC5pbXVsKFB0LHJ0KXwwLHc9TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0aC5pbXVsKG90LER0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QscHQpfDApK01hdGgu'@;
put 'aW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwoTWUsSW4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLEluKXwwLHc9dytNYXRoLmltdWwoRGUsenQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcr'@;
put 'TWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5pbXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKG90LEluKXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwob3QsenQpfDApK01hdGguaW11bCh1dCxJbil8MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAscD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShT'@;
put 'Kyh2PXYrTWF0aC5pbXVsKFhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5p'@;
put 'bXVsKEh0LEluKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxJbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChvdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKG90LHNuKXwwKStNYXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2'@;
put 'YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMs'@;
put 'dj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89KFMrKHY9ditNYXRoLmltdWwob3QsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChvdCwkdCl8MCkrTWF0aC5pbXVsKHV0'@;
put 'LFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHlyPShTKyh2PU1hdGguaW11bChIdCxSbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsUm4pfDAp'@;
put 'KTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPUZuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1naSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUhy'@;
put 'LENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXtyZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0'@;
put 'aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6'@;
put 'TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1p'@;
put 'bihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1mZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+'@;
put 'PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcg'@;
put 'QXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYoMD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8'@;
put 'RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFyIFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltTXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxO'@;
put 'LGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2'@;
put 'YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10samU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2ZlXT14ZSsoRmU9amUpLE5bSitmZV09TGUrT2UsSFtKK2ZlK1NdPXhlLUZlLE5bSitmZStTXT1MZS1PZSxmZSE9PXYmJihqZT1wKm5lLXcq'@;
put 'ZGUsZGU9cCpkZSt3Km5lLG5lPWplKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rp'@;
put 'b24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0sRFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9'@;
put 'MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYzJmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxI'@;
put 'LE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtm'@;
put 'b3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5l'@;
put 'dyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiksZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihE'@;
put 'LndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBmZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBbZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0s'@;
put 'dltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMsTiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgr'@;
put 'RC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9'@;
put 'bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIp'@;
put 'e20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMmRCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53'@;
put 'b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxi'@;
put 'Lmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxELmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQu'@;
put 'bGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2'@;
put 'LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNbZ10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhp'@;
put 'cy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hs'@;
put 'bj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1p'@;
put 'bigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylm'@;
put 'b3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0w'@;
put 'fHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUu'@;
put 'aXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1'@;
put 'bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0w'@;
put 'KTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9'@;
put 'PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9'@;
put 'MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0Rd'@;
put 'Pj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tEKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVu'@;
put 'Y3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jk'@;
put 'c1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhp'@;
put 'cy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlw'@;
put 'ZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5s'@;
put 'ZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10pKkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRo'@;
put 'aXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tn'@;
put 'XSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYt'@;
put 'dGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3Ro'@;
put 'KTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVnYXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxO'@;
put 'LndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNobG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRlLS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5p'@;
put 'c1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYwIT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpOfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1'@;
put 'cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1v'@;
put 'ZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5u'@;
put 'ZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2Rp'@;
put 'djpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9k'@;
put 'Om5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMu'@;
put 'ZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1'@;
put 'cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21wKE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjowIT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFk'@;
put 'ZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05dKSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24o'@;
put 'Yil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1u'@;
put 'ZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNocm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNsb25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53'@;
put 'b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihOLmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUp'@;
put 'JiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQocCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIo'@;
put 'UykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1E'@;
put 'Lm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jkc1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNo'@;
put 'cm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2OysrcCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21w'@;
put 'KEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lm'@;
put 'KGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtOKyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0Qu'@;
put 'aXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxIPUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlw'@;
put 'ZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0p'@;
put 'fSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShiLUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhp'@;
put 'cy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29yZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jk'@;
put 'c1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYh'@;
put 'RClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYoYj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8t'@;
put 'MToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRo'@;
put 'aXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgt'@;
put 'MTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1yZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1m'@;
put 'dW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0ucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90'@;
put 'eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIp'@;
put 'fSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9u'@;
put 'KGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBu'@;
put 'dW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9'@;
put 'LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0o'@;
put 'dGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24o'@;
put 'Yil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3Ro'@;
put 'aXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1m'@;
put 'dW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlz'@;
put 'Lm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQp'@;
put 'LHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlz'@;
put 'LnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlz'@;
put 'LnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5p'@;
put 'c3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtiLml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUo'@;
put 'dGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVuZ3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lk'@;
put 'KGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0w'@;
put 'PT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29y'@;
put 'ZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUu'@;
put 'cHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxnPTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1OfXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0s'@;
put 'TS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcgc2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJV'@;
put 'bmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i'@;
put 'ZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1ELnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1'@;
put 'ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9i'@;
put 'LmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1'@;
put 'ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9'@;
put 'Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSks'@;
put 'SH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5w'@;
put 'cm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBEPXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQpe3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1'@;
put 'cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJuKDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRvUmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1'@;
put 'c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylwLnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiksSj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMu'@;
put 'cG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhlPGRlKTt2YXIgTGU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNobG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCks'@;
put 'bmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90'@;
put 'b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7TlswXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7'@;
put 'ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+'@;
put 'SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhpcy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7'@;
put 'dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0ubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1'@;
put 'ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxs'@;
put 'LER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0'@;
put 'KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlv'@;
put 'bihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hy'@;
put 'bih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1w'@;
put 'KHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDU3Nzk4OmF0PT57ZnVuY3Rpb24gSWUoRixhZSl7aWYoIUYpdGhyb3cgbmV3IEVycm9yKGFlfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWF0LmV4cG9ydHM9SWUsSWUuZXF1YWw9ZnVuY3Rp'@;
put 'b24oYWUseCxtKXtpZihhZSE9eCl0aHJvdyBuZXcgRXJyb3IobXx8IkFzc2VydGlvbiBmYWlsZWQ6ICIrYWUrIiAhPSAiK3gpfX0sNzgyNDc6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRj1JZTtmdW5jdGlvbiB4KGxlKXtyZXR1cm4gMT09PWxlLmxlbmd0aD8iMCIrbGU6bGV9ZnVuY3Rp'@;
put 'b24gbShsZSl7Zm9yKHZhciBNPSIiLE89MDtPPGxlLmxlbmd0aDtPKyspTSs9eChsZVtPXS50b1N0cmluZygxNikpO3JldHVybiBNfUYudG9BcnJheT1mdW5jdGlvbiBhZShsZSxNKXtpZihBcnJheS5pc0FycmF5KGxlKSlyZXR1cm4gbGUuc2xpY2UoKTtpZighbGUpcmV0dXJuW107dmFyIE89'@;
put 'W107aWYoInN0cmluZyIhPXR5cGVvZiBsZSl7Zm9yKHZhciBSPTA7UjxsZS5sZW5ndGg7UisrKU9bUl09MHxsZVtSXTtyZXR1cm4gT31pZigiaGV4Ij09PU0pZm9yKChsZT1sZS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihsZT0iMCIrbGUpLFI9MDtSPGxlLmxl'@;
put 'bmd0aDtSKz0yKU8ucHVzaChwYXJzZUludChsZVtSXStsZVtSKzFdLDE2KSk7ZWxzZSBmb3IoUj0wO1I8bGUubGVuZ3RoO1IrKyl7dmFyIHo9bGUuY2hhckNvZGVBdChSKSxLPXo+PjgsST0yNTUmejtLP08ucHVzaChLLEkpOk8ucHVzaChJKX1yZXR1cm4gT30sRi56ZXJvMj14LEYudG9IZXg9'@;
put 'bSxGLmVuY29kZT1mdW5jdGlvbihNLE8pe3JldHVybiJoZXgiPT09Tz9tKE0pOk19fSw4MzI3NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImFmIix7bW9udGhzOiJKYW51YXJpZV9GZWJydWFyaWVfTWFhcnRfQXByaWxfTWVp'@;
put 'X0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU29uZGFnX01hYW5k'@;
put 'YWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTWFfRGlfV29fRG9fVnJfU2EiLnNwbGl0KCJfIiksbWVyaWRp'@;
put 'ZW1QYXJzZTovdm18bm0vaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9ebm0kL2kudGVzdChtKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMj9NPyJ2bSI6IlZNIjpNPyJubSI6Ik5NIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi'@;
put 'REQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVmFuZGFnIG9tXSBMVCIsbmV4dERheToiW01ceGY0cmUgb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21d'@;
put 'IExUIixsYXN0RGF5OiJbR2lzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltMYWFzXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9vciAlcyIscGFzdDoiJXMgZ2VsZWRlIixzOiInbiBwYWFyIHNla29uZGVzIixzczoiJWQgc2Vrb25kZXMiLG06Iidu'@;
put 'IG1pbnV1dCIsbW06IiVkIG1pbnV0ZSIsaDoiJ24gdXVyIixoaDoiJWQgdXJlIixkOiInbiBkYWciLGRkOiIlZCBkYWUiLE06IiduIG1hYW5kIixNTToiJWQgbWFhbmRlIix5OiInbiBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8s'@;
put 'b3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gbSsoMT09PW18fDg9PT1tfHxtPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjE4Njc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ZnVuY3Rpb24oUil7'@;
put 'cmV0dXJuIDA9PT1SPzA6MT09PVI/MToyPT09Uj8yOlIlMTAwPj0zJiZSJTEwMDw9MTA/MzpSJTEwMD49MTE/NDo1fSxtPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFc'@;
put 'dTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBc'@;
put 'dTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2'@;
put 'MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIl'@;
put 'ZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4'@;
put 'XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2Mzlc'@;
put 'dTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYy'@;
put 'N1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1'@;
put 'MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2'@;
put 'MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1'@;
put 'MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sbGU9'@;
put 'ZnVuY3Rpb24oUil7cmV0dXJuIGZ1bmN0aW9uKHosSyxJLGspe3ZhciBFPXgoeiksaj1tW1JdW3goeildO3JldHVybiAyPT09RSYmKGo9altLPzA6MV0pLGoucmVwbGFjZSgvJWQvaSx6KX19LE09WyJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGEiLCJcdTA2NDFcdTA2NGFcdTA2NDFc'@;
put 'dTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGEiLCJcdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjkiLCJcdTA2'@;
put 'MjNcdTA2NDhcdTA2MmEiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2Mjhc'@;
put 'dTA2MzEiXTthZS5kZWZpbmVMb2NhbGUoImFyLWR6Iix7bW9udGhzOk0sbW9udGhzU2hvcnQ6TSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRc'@;
put 'dTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMz'@;
put 'XHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9c'@;
put 'dTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy'@;
put 'c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov'@;
put 'XHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihSKXtyZXR1cm4iXHUwNjQ1Ij09PVJ9LG1lcmlkaWVtOmZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUjwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5'@;
put 'XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRk'@;
put 'IFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRk'@;
put 'ZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpsZSgicyIpLHNz'@;
put 'OmxlKCJzIiksbTpsZSgibSIpLG1tOmxlKCJtIiksaDpsZSgiaCIpLGhoOmxlKCJoIiksZDpsZSgiZCIpLGRkOmxlKCJkIiksTTpsZSgiTSIpLE1NOmxlKCJNIikseTpsZSgieSIpLHl5OmxlKCJ5Iil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvLC9nLCJcdTA2'@;
put 'MGMiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTcwNzg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJhci1rdyIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYy'@;
put 'OFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUw'@;
put 'NjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiks'@;
put 'bW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUw'@;
put 'NjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZc'@;
put 'dTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1'@;
put 'MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNc'@;
put 'dTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1'@;
put 'MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJz'@;
put 'ZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3'@;
put 'XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2Mzlc'@;
put 'dTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYz'@;
put 'OVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2'@;
put 'MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2Mjdc'@;
put 'dTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5'@;
put 'OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MCxkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sNzc3NzY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6IjEiLDI6IjIi'@;
put 'LDM6IjMiLDQ6IjQiLDU6IjUiLDY6IjYiLDc6IjciLDg6IjgiLDk6IjkiLDA6IjAifSxtPWZ1bmN0aW9uKHope3JldHVybiAwPT09ej8wOjE9PT16PzE6Mj09PXo/Mjp6JTEwMD49MyYmeiUxMDA8PTEwPzM6eiUxMDA+PTExPzQ6NX0sbGU9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1'@;
put 'XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUw'@;
put 'NjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUw'@;
put 'NjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRh'@;
put 'XHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1'@;
put 'XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUw'@;
put 'NjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0'@;
put 'YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0'@;
put 'Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUw'@;
put 'NjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYz'@;
put 'OVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIs'@;
put 'IiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSxNPWZ1bmN0aW9uKHope3JldHVybiBmdW5jdGlvbihLLEksayxFKXt2YXIgaj1tKEspLFY9bGVbel1bbShLKV07cmV0dXJuIDI9PT1qJiYoVj1WW0k/MDoxXSksVi5yZXBsYWNlKC8l'@;
put 'ZC9pLEspfX0sTz1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1'@;
put 'MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1'@;
put 'MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO2FlLmRlZmluZUxvY2FsZSgiYXItbHkiLHttb250aHM6Tyxtb250aHNTaG9ydDpPLHdlZWtkYXlzOiJcdTA2MjdcdTA2'@;
put 'NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUw'@;
put 'NjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0'@;
put 'Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgi'@;
put 'XyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZ'@;
put 'IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHope3JldHVybiJcdTA2NDUiPT09en0sbWVyaWRpZW06ZnVuY3Rpb24oeixLLEkp'@;
put 'e3JldHVybiB6PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYy'@;
put 'Zlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUw'@;
put 'NjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJM'@;
put 'In0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOk0oInMiKSxzczpNKCJzIiksbTpNKCJtIiksbW06TSgibSIpLGg6TSgiaCIpLGhoOk0oImgiKSxkOk0oImQiKSxkZDpNKCJkIiksTTpNKCJNIiksTU06'@;
put 'TSgiTSIpLHk6TSgieSIpLHl5Ok0oInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih6KXtyZXR1cm4gei5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEspe3JldHVybiB4W0tdfSkucmVwbGFjZSgvLC9n'@;
put 'LCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDU2Nzg5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYXItbWEiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2'@;
put 'NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1'@;
put 'MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxp'@;
put 'dCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1'@;
put 'MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4'@;
put 'XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJc'@;
put 'dTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0'@;
put 'XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1'@;
put 'MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtk'@;
put 'YXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi'@;
put 'W1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3'@;
put 'XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2'@;
put 'MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUw'@;
put 'NjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMz'@;
put 'XHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1'@;
put 'MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjg5NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUw'@;
put 'NjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sbT17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2'@;
put 'NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifTthZS5kZWZpbmVMb2NhbGUoImFyLXNhIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUw'@;
put 'NjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNh'@;
put 'XHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYz'@;
put 'MSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1'@;
put 'MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4'@;
put 'XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJc'@;
put 'dTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0'@;
put 'XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1'@;
put 'MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9c'@;
put 'dTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQg'@;
put 'TU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4iXHUwNjQ1Ij09PU19LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2'@;
put 'MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYz'@;
put 'OVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUw'@;
put 'NjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1'@;
put 'MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYy'@;
put 'N1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEi'@;
put 'LHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBd'@;
put 'L2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6'@;
put 'Nn19KX0oRigxNjY3NikpfSw3MTU4NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImFyLXRuIix7bW9udGhzOiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1'@;
put 'MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYy'@;
put 'OFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUw'@;
put 'NjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJj'@;
put 'XHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2'@;
put 'MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJi'@;
put 'XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYy'@;
put 'YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1'@;
put 'XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAs'@;
put 'bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2'@;
put 'NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQi'@;
put 'LG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBM'@;
put 'VCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoi'@;
put 'XHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYy'@;
put 'OSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1'@;
put 'MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDIyMDk3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIs'@;
put 'MzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxtPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYi'@;
put 'OiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LGxlPWZ1bmN0aW9uKEspe3JldHVybiAwPT09Sz8wOjE9PT1LPzE6Mj09PUs/MjpLJTEwMD49MyYmSyUxMDA8PTEwPzM6SyUxMDA+PTExPzQ6NX0sTT17czpbIlx1MDYyM1x1MDY0Mlx1MDY0'@;
put 'NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJc'@;
put 'dTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBc'@;
put 'dTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2'@;
put 'NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0'@;
put 'NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFc'@;
put 'dTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1'@;
put 'IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUw'@;
put 'NjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFc'@;
put 'dTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2'@;
put 'NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3'@;
put 'XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LE89ZnVuY3Rpb24oSyl7cmV0dXJuIGZ1bmN0aW9uKEksayxFLGope3ZhciBWPWxlKEkpLEI9TVtLXVtsZShJKV07cmV0dXJuIDI9PT1WJiYoQj1CW2s/MDoxXSksQi5y'@;
put 'ZXBsYWNlKC8lZC9pLEkpfX0sUj1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYy'@;
put 'N1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0'@;
put 'M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO2FlLmRlZmluZUxvY2FsZSgiYXIiLHttb250aHM6Uixtb250aHNTaG9ydDpSLHdlZWtkYXlzOiJcdTA2'@;
put 'MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2'@;
put 'MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYy'@;
put 'Ylx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIw'@;
put 'MGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKEspe3JldHVybiJcdTA2NDUiPT09S30sbWVyaWRpZW06ZnVuY3Rpb24o'@;
put 'SyxJLGspe3JldHVybiBLPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYz'@;
put 'YVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5'@;
put 'OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVF'@;
put 'bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOk8oInMiKSxzczpPKCJzIiksbTpPKCJtIiksbW06TygibSIpLGg6TygiaCIpLGhoOk8oImgiKSxkOk8oImQiKSxkZDpPKCJkIiksTTpPKCJN'@;
put 'IiksTU06TygiTSIpLHk6TygieSIpLHl5Ok8oInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oSyl7cmV0dXJuIEsucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihJKXtyZXR1cm4gbVtJXX0pLnJl'@;
put 'cGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oSyl7cmV0dXJuIEsucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihJKXtyZXR1cm4geFtJXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oRigxNjY3NikpfSwxNTYxMTpmdW5jdGlv'@;
put 'bihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiLWluY2kiLDU6Ii1pbmNpIiw4OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWluY2kiLDI6Ii1uY2kiLDc6Ii1uY2kiLDIwOiItbmNpIiw1MDoiLW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZj'@;
put 'IiwxMDA6Ii1ceGZjbmNceGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1cdTAxMzFuY1x1MDEzMSJ9O2FlLmRlZmluZUxvY2FsZSgiYXoiLHttb250aHM6InlhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9t'@;
put 'YXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inlhbl9mZXZfbWFyX2Fwcl9tYXlfaXluX2l5bF9hdnFfc2VuX29rdF9ub3lfZGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJCYXphcl9CYXphciBlcnRcdTAy'@;
put 'NTlzaV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OV9DXHhmY21cdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9DXHhmY21cdTAyNTlfXHUwMTVlXHUwMjU5bmJcdTAyNTkiLnNwbGl0KCJfIiksd2Vl'@;
put 'a2RheXNTaG9ydDoiQmF6X0J6RV9ceGM3QXhfXHhjN1x1MDI1OXJfQ0F4X0NceGZjbV9cdTAxNWVcdTAyNTluIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJCel9CRV9ceGM3QV9ceGM3XHUwMjU5X0NBX0NceGZjX1x1MDE1ZVx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6'@;
put 'ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2Fh'@;
put 'dF0gTFQiLG5leHREYXk6IltzYWJhaCBzYWF0XSBMVCIsbmV4dFdlZWs6IltnXHUwMjU5bFx1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2RceGZjblx1MDI1OW5dIExUIixsYXN0V2VlazoiW2tlXHhlN1x1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBk'@;
put 'ZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx1MDI1OXZ2XHUwMjU5bCIsczoiYmlyIG5lXHhlN1x1MDI1OSBzYW5peVx1MDI1OSIsc3M6IiVkIHNhbml5XHUwMjU5IixtOiJiaXIgZFx1MDI1OXFpcVx1MDI1OSIs'@;
put 'bW06IiVkIGRcdTAyNTlxaXFcdTAyNTkiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciBpbCIseXk6IiVkIGlsIn0sbWVyaWRpZW1QYXJzZTovZ2VjXHUwMjU5fHNcdTAyNTloXHUwMjU5'@;
put 'cnxnXHhmY25kXHhmY3p8YXhcdTAxNWZhbS8saXNQTTpmdW5jdGlvbihsZSl7cmV0dXJuL14oZ1x4ZmNuZFx4ZmN6fGF4XHUwMTVmYW0pJC8udGVzdChsZSl9LG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIGxlPDQ/ImdlY1x1MDI1OSI6bGU8MTI/InNcdTAyNTloXHUwMjU5ciI6'@;
put 'bGU8MTc/ImdceGZjbmRceGZjeiI6ImF4XHUwMTVmYW0ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTAxMzFuY1x1MDEzMXxpbmNpfG5jaXxceGZjbmNceGZjfG5jXHUwMTMxfHVuY3UpLyxvcmRpbmFsOmZ1bmN0aW9uKGxlKXtpZigwPT09bGUpcmV0dXJuIGxlKyItXHUw'@;
put 'MTMxbmNcdTAxMzEiO3ZhciBNPWxlJTEwO3JldHVybiBsZSsoeFtNXXx8eFtsZSUxMDAtTV18fHhbbGU+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw2MjQ1OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5j'@;
put 'dGlvbiBtKE0sTyxSKXtyZXR1cm4ibSI9PT1SP08/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0MyI6ImgiPT09Uj9PPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0'@;
put 'M2RcdTA0MzAiOiJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDMiOk0rIiAiK2Z1bmN0aW9uIHgoTSxPKXt2YXIgUj1NLnNwbGl0KCJfIik7cmV0dXJuIE8lMTA9PTEmJk8lMTAwIT0xMT9SWzBdOk8lMTA+PTImJk8lMTA8PTQmJihPJTEwMDwxMHx8TyUxMDA+PTIw'@;
put 'KT9SWzFdOlJbMl19KHtzczpPPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1'@;
put 'MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtbTpPPyJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMy'@;
put 'XHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUw'@;
put 'NDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIixoaDpPPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCI6Ilx1MDQz'@;
put 'M1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIixkZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQz'@;
put 'ZFx1MDQ1Nl9cdTA0MzRcdTA0MzdcdTA0NTFcdTA0M2QiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRiX1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzMFx1MDQ1ZSIseXk6Ilx1MDQzM1x1MDQz'@;
put 'ZVx1MDQzNF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDNlXHUwNDVlIn1bUl0sK00pfWFlLmRlZmluZUxvY2FsZSgiYmUiLHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQz'@;
put 'Ylx1MDQ0ZVx1MDQ0Mlx1MDQzMFx1MDQzM1x1MDQzMF9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQ1ZVx1MDQz'@;
put 'ZFx1MDQ0Zl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQ1ZVx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0M2RcdTA0'@;
put 'NGZfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0M2RcdTA0NGYiLnNw'@;
put 'bGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQ0Yl9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxXHUw'@;
put 'NDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1'@;
put 'MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1'@;
put 'MDQzZlx1MDQzMFx1MDQzNF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0MzBcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzYV9cdTA0M2FcdTA0NDBcdTA0'@;
put 'MzBcdTA0NDFfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0NTZcdTA0M2ZfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDMyX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJfXHUwNDNiXHUwNDU2XHUwNDQx'@;
put 'XHUwNDQyX1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNiIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNh'@;
put 'X1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDMwXHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0M19cdTA0'@;
put 'NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0'@;
put 'MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0MzBfXHUwNDQxXHUw'@;
put 'NDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9cWyA/W1x1MDQyM1x1MDQ0M1x1MDQ1ZV0gPyg/Olx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1MDQ0ZXxcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2Rc'@;
put 'dTA0NDNcdTA0NGUpPyA/XF0gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1'@;
put 'MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZ'@;
put 'WVkgXHUwNDMzLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQyMVx1MDQ1MVx1MDQzZFx1MDQzZFx1MDQ0ZiBcdTA0NWVdIExUIixuZXh0RGF5OiJbXHUwNDE3'@;
put 'XHUwNDMwXHUwNDVlXHUwNDQyXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLGxhc3REYXk6IltcdTA0MjNcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgXHUwNDVlXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDQyM10gZGRkZCBbXHUwNDVlXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0'@;
put 'aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGVdIGRkZGQgW1x1MDQ1ZV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDIz'@;
put 'IFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0Yl0gZGRkZCBbXHUwNDVlXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0M2ZcdTA0NDBcdTA0MzBcdTA0MzcgJXMiLHBhc3Q6IiVzIFx1MDQ0Mlx1MDQzMFx1MDQzY1x1MDQ0MyIsczoiXHUw'@;
put 'NDNkXHUwNDM1XHUwNDNhXHUwNDMwXHUwNDNiXHUwNDRjXHUwNDNhXHUwNDU2IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbSxtbTptLGg6bSxoaDptLGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6bSxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0'@;
put 'NGZcdTA0NDYiLE1NOm0seToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTptfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGJ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRifFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBc'@;
put 'dTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCkkLy50ZXN0KE0pfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUw'@;
put 'NDRiIjpNPDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGIiOk08MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ1NnxcdTA0NGJ8XHUw'@;
put 'NDMzXHUwNDMwKS8sb3JkaW5hbDpmdW5jdGlvbihNLE8pe3N3aXRjaChPKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gTSUxMCE9MiYmTSUxMCE9M3x8TSUxMDA9PTEyfHxNJTEwMD09MTM/TSsiLVx1MDQ0YiI6TSsiLVx1MDQ1NiI7Y2FzZSJEIjpy'@;
put 'ZXR1cm4gTSsiLVx1MDQzM1x1MDQzMCI7ZGVmYXVsdDpyZXR1cm4gTX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDkxODI1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYmciLHttb250aHM6Ilx1MDQ0Zlx1'@;
put 'MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNk'@;
put 'XHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQz'@;
put 'OF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0NDNfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1'@;
put 'MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1'@;
put 'MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0'@;
put 'M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDRmXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0YVx1MDQ0MFx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDQxXHUwNDRhXHUwNDMxXHUwNDNlXHUwNDQyXHUw'@;
put 'NDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQ0Zl9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQ0YVx1MDQzMSIu'@;
put 'c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNz'@;
put 'IixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0'@;
put 'Mlx1MDQ0MFx1MDQzNSBcdTA0MzJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2Ug'@;
put 'NjpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDM4XHUwNDRmXSBkZGRkIFtc'@;
put 'dTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4ICVzIixzOiJcdTA0M2RcdTA0NGZcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0M2Ug'@;
put 'XHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0'@;
put 'NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIix3OiJcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0'@;
put 'NDZcdTA0MzAiLHd3OiIlZCBcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzgiLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIseToiXHUwNDMzXHUwNDNlXHUwNDM0XHUw'@;
put 'NDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0'@;
put 'M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwLE09bSUxMDA7cmV0dXJuIDA9PT1tP20rIi1cdTA0MzVcdTA0MzIiOjA9PT1NP20rIi1cdTA0MzVcdTA0M2QiOk0+MTAmJk08MjA/bSsiLVx1MDQ0Mlx1MDQzOCI6MT09PWxlP20rIi1cdTA0MzJcdTA0MzgiOjI9PT1s'@;
put 'ZT9tKyItXHUwNDQwXHUwNDM4Ijo3PT09bGV8fDg9PT1sZT9tKyItXHUwNDNjXHUwNDM4IjptKyItXHUwNDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNzU5MTg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5l'@;
put 'TG9jYWxlKCJibSIse21vbnRoczoiWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTVx1MDI1YmthbG9fWnV3XHUwMjVibmthbG9fWnVsdXlla2Fsb19VdGlrYWxvX1NcdTAyNWJ0YW5idXJ1a2Fsb19cdTAyNTRrdXRcdTAyNTRidXJ1a2Fsb19Ob3dhbmJ1'@;
put 'cnVrYWxvX0Rlc2FuYnVydWthbG8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilphbl9GZXdfTWFyX0F3aV9NXHUwMjViX1p1d19adWxfVXRpX1NcdTAyNWJ0X1x1MDI1NGt1X05vd19EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkthcmlfTnRcdTAyNWJuXHUwMjVibl9UYXJhdGFfQXJhYmFf'@;
put 'QWxhbWlzYV9KdW1hX1NpYmlyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJLYXJfTnRcdTAyNWJfVGFyX0FyYV9BbGFfSnVtX1NpYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiS2FfTnRfVGFfQXJfQWxfSnVfU2kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs'@;
put 'TFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSIsTExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjViXSBISDptbSIsTExMTDoiZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjVi'@;
put 'XSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0RGF5OiJbU2luaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHRXZWVrOiJkZGRkIFtkb24gbFx1MDI1YnJcdTAyNWJdIExUIixsYXN0RGF5OiJbS3VudSBsXHUwMjViclx1MDI1Yl0gTFQiLGxh'@;
put 'c3RXZWVrOiJkZGRkIFt0XHUwMjVibVx1MDI1Ym5lbiBsXHUwMjViclx1MDI1Yl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGtcdTAyNTRuXHUwMjU0IixwYXN0OiJhIGJcdTAyNWIgJXMgYlx1MDI1NCIsczoic2FuZ2EgZGFtYSBkYW1hIixzczoic2Vrb25k'@;
put 'aSAlZCIsbToibWluaXRpIGtlbGVuIixtbToibWluaXRpICVkIixoOiJsXHUwMjViclx1MDI1YiBrZWxlbiIsaGg6ImxcdTAyNWJyXHUwMjViICVkIixkOiJ0aWxlIGtlbGVuIixkZDoidGlsZSAlZCIsTToia2FsbyBrZWxlbiIsTU06ImthbG8gJWQiLHk6InNhbiBrZWxlbiIseXk6InNhbiAl'@;
put 'ZCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQ5NjgzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJc'@;
put 'dTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxtPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUw'@;
put 'OWU2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiYm4tYmQiLHttb250aHM6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJl'@;
put 'XHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUw'@;
put 'OWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUw'@;
put 'OWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZc'@;
put 'dTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUw'@;
put 'OWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5'@;
put 'YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5'@;
put 'YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5'@;
put 'YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVc'@;
put 'dTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1'@;
put 'MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUw'@;
put 'OWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUw'@;
put 'OWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDli'@;
put 'OFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1'@;
put 'MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToi'@;
put 'XHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDliZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tc'@;
put 'dTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZcdTA5ZTZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1l'@;
put 'cmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YWRcdTA5Y2JcdTA5YjB8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUw'@;
put 'OWNkXHUwOWFmXHUwOWJlfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1PP008ND9NOk0rMTI6Ilx1MDlhZFx1MDljYlx1MDliMCI9PT1PfHwiXHUwOWI4XHUwOTk1XHUwOWJl'@;
put 'XHUwOWIyIj09PU8/TToiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PU8/TT49Mz9NOk0rMTI6Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1PfHwiXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIj09PU8/TSsxMjp2b2lkIDB9LG1l'@;
put 'cmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTA5YjBcdTA5YmVcdTA5YTQiOk08Nj8iXHUwOWFkXHUwOWNiXHUwOWIwIjpNPDEyPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOk08MTU/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6TTwxOD8iXHUwOWFjXHUw'@;
put 'OWJmXHUwOTk1XHUwOWJlXHUwOWIyIjpNPDIwPyJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwzNDA2NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUp'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0sbT17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUw'@;
put 'OWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImJuIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5'@;
put 'YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1'@;
put 'MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2Jc'@;
put 'dTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDlj'@;
put 'N1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1'@;
put 'MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1'@;
put 'MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5Yjlc'@;
put 'dTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5'@;
put 'YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9c'@;
put 'dTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUw'@;
put 'OTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6'@;
put 'IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlh'@;
put 'ZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy'@;
put 'ZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThc'@;
put 'dTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5'@;
put 'YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBc'@;
put 'dTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKE8pe3Jl'@;
put 'dHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1'@;
put 'MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWIwXHUwOWJlXHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwOWIwXHUwOWJlXHUwOWE0Ij09PU8mJk0+PTR8fCJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5'@;
put 'YzFcdTA5YjAiPT09TyYmTTw1fHwiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIj09PU8/TSsxMjpNfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwOWIwXHUwOWJlXHUwOWE0IjpNPDEwPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOk08MTc/Ilx1MDlh'@;
put 'Nlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6TTwyMD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMTEwMzQ6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0'@;
put 'cmljdCI7dmFyIHg9ezE6Ilx1MGYyMSIsMjoiXHUwZjIyIiwzOiJcdTBmMjMiLDQ6Ilx1MGYyNCIsNToiXHUwZjI1Iiw2OiJcdTBmMjYiLDc6Ilx1MGYyNyIsODoiXHUwZjI4Iiw5OiJcdTBmMjkiLDA6Ilx1MGYyMCJ9LG09eyJcdTBmMjEiOiIxIiwiXHUwZjIyIjoiMiIsIlx1MGYyMyI6IjMi'@;
put 'LCJcdTBmMjQiOiI0IiwiXHUwZjI1IjoiNSIsIlx1MGYyNiI6IjYiLCJcdTBmMjciOiI3IiwiXHUwZjI4IjoiOCIsIlx1MGYyOSI6IjkiLCJcdTBmMjAiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJibyIse21vbnRoczoiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQ0'@;
put 'XHUwZjBiXHUwZjU0XHUwZjdjX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNjZcdTBmNzRcdTBmNThcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIz'@;
put 'XHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjVlXHUwZjcyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY2M1x1MGY5NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmYjJcdTBmNzRcdTBmNDJcdTBmMGJc'@;
put 'dTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY2Mlx1MGY5Mlx1MGZiMVx1MGY1MVx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJc'@;
put 'dTBmNTZcdTBmMGJcdTBmNTFcdTBmNDJcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1'@;
put 'MGY0NVx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGY1Zlx1MGZiM1x1MGYwYjFf'@;
put 'XHUwZjVmXHUwZmIzXHUwZjBiMl9cdTBmNWZcdTBmYjNcdTBmMGIzX1x1MGY1Zlx1MGZiM1x1MGYwYjRfXHUwZjVmXHUwZmIzXHUwZjBiNV9cdTBmNWZcdTBmYjNcdTBmMGI2X1x1MGY1Zlx1MGZiM1x1MGYwYjdfXHUwZjVmXHUwZmIzXHUwZjBiOF9cdTBmNWZcdTBmYjNcdTBmMGI5X1x1MGY1'@;
put 'Zlx1MGZiM1x1MGYwYjEwX1x1MGY1Zlx1MGZiM1x1MGYwYjExX1x1MGY1Zlx1MGZiM1x1MGYwYjEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwZjVmXHUwZmIzXHUwZjBiXGR7MSwyfSkvLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGY0Mlx1MGY1Zlx1MGY2'@;
put 'MFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBi'@;
put 'X1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZcdTBmNzRfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU0XHUwZjBiXHUwZjY2'@;
put 'XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjVmXHUwZmIzXHUwZjBiXHUw'@;
put 'ZjU2XHUwZjBiX1x1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1'@;
put 'MGYwYl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGY0OVx1MGY3Ml9cdTBmNWZcdTBmYjNfXHUwZjU4XHUwZjcyXHUwZjQyX1x1MGY2M1x1MGZiN1x1MGY0Ml9cdTBmNTVcdTBmNzRcdTBmNjJfXHUwZjY2XHUw'@;
put 'ZjQ0XHUwZjY2X1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1MyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1N'@;
put 'TU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBmNTFcdTBmNzJcdTBmMGJcdTBmNjJcdTBmNzJcdTBmNDRdIExUIixuZXh0RGF5OiJbXHUwZjY2XHUwZjQ0XHUwZjBiXHUwZjQ5XHUwZjcyXHUwZjUzXSBMVCIsbmV4dFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBm'@;
put 'NTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNjJcdTBmOTdcdTBmN2FcdTBmNjZcdTBmMGJcdTBmNThdLCBMVCIsbGFzdERheToiW1x1MGY0MVx1MGYwYlx1MGY2Nlx1MGY0NF0gTFQiLGxhc3RXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUw'@;
put 'ZmIyXHUwZjQyXHUwZjBiXHUwZjU4XHUwZjUwXHUwZjYwXHUwZjBiXHUwZjU4XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZjYzXHUwZjBiIixwYXN0OiIlcyBcdTBmNjZcdTBmOTRcdTBmNTNcdTBmMGJcdTBmNjMiLHM6Ilx1MGY2M1x1MGY1'@;
put 'OFx1MGYwYlx1MGY2Nlx1MGY0NCIsc3M6IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY0Nlx1MGYwZCIsbToiXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixtbToiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUw'@;
put 'ZjU4IixoOiJcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTFcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGhoOiIlZCBcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTEiLGQ6Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3'@;
put 'Mlx1MGY0MiIsZGQ6IiVkIFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYiIsTToiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixNTToiJWQgXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2Iix5OiJcdTBmNjNcdTBmN2NcdTBmMGJcdTBmNDJcdTBm'@;
put 'NDVcdTBmNzJcdTBmNDIiLHl5OiIlZCBcdTBmNjNcdTBmN2MifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwZjIxXHUwZjIyXHUwZjIzXHUwZjI0XHUwZjI1XHUwZjI2XHUwZjI3XHUwZjI4XHUwZjI5XHUwZjIwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09d'@;
put 'fSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2N8XHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQw'@;
put 'XHUwZjY2fFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NHxcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDJ8XHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4g'@;
put 'MTI9PT1NJiYoTT0wKSwiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIj09PU8mJk0+PTR8fCJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiPT09TyYmTTw1fHwiXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIj09'@;
put 'PU8/TSsxMjpNfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIjpNPDEwPyJcdTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZcdTBmMGJcdTBmNDBcdTBmNjYiOk08MTc/Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYw'@;
put 'Ylx1MGY0Mlx1MGY3NFx1MGY0NCI6TTwyMD8iXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIjoiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjc2NzE6ZnVuY3Rpb24oYXQsSWUs'@;
put 'Ril7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChCLFksWCl7cmV0dXJuIEIrIiAiK2Z1bmN0aW9uIE0oQixZKXtyZXR1cm4gMj09PVk/ZnVuY3Rpb24gTyhCKXt2YXIgWT17bToidiIsYjoidiIsZDoieiJ9O3JldHVybiB2b2lkIDA9PT1ZW0IuY2hhckF0KDApXT9COllb'@;
put 'Qi5jaGFyQXQoMCldK0Iuc3Vic3RyaW5nKDEpfShCKTpCfSh7bW06Im11bnV0ZW5uIixNTToibWl6IixkZDoiZGV2ZXpoIn1bWF0sQil9ZnVuY3Rpb24gbGUoQil7cmV0dXJuIEI+OT9sZShCJTEwKTpCfXZhciBSPVsvXmdlbi9pLC9eY1tcdTAyYmNcJ11od2UvaSwvXm1ldS9pLC9eZWJyL2ks'@;
put 'L15tYWUvaSwvXihtZXp8ZXZlKS9pLC9eZ291L2ksL15lb3MvaSwvXmd3ZS9pLC9eaGVyL2ksL15kdS9pLC9ea2VyL2ldLHo9L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2Vu'@;
put 'fGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLGo9Wy9eU3UvaSwvXkx1L2ksL15NZShbXnJdfCQpL2ksL15NZXIvaSwvXllhL2ksL15Hdy9pLC9eU2EvaV07YWUuZGVmaW5lTG9jYWxlKCJiciIse21vbnRoczoiR2VudmVyX0NcdTAyYmNo'@;
put 'd2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiR2VuX0NcdTAyYmNod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXIiLnNwbGl0KCJfIiksd2Vla2Rh'@;
put 'eXM6IlN1bF9MdW5fTWV1cnpoX01lcmNcdTAyYmNoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTHVfTWVfTWVyX1lhX0d3X1NhIi5zcGxpdCgiXyIp'@;
put 'LHdlZWtkYXlzUGFyc2U6aixmdWxsV2Vla2RheXNQYXJzZTpbL15zdWwvaSwvXmx1bi9pLC9ebWV1cnpoL2ksL15tZXJjW1x1MDJiY1wnXWhlci9pLC9eeWFvdS9pLC9eZ3dlbmVyL2ksL15zYWRvcm4vaV0sc2hvcnRXZWVrZGF5c1BhcnNlOlsvXlN1bC9pLC9eTHVuL2ksL15NZXUvaSwvXk1l'@;
put 'ci9pLC9eWWFvL2ksL15Hd2UvaSwvXlNhZC9pXSxtaW5XZWVrZGF5c1BhcnNlOmosbW9udGhzUmVnZXg6eixtb250aHNTaG9ydFJlZ2V4OnosbW9udGhzU3RyaWN0UmVnZXg6L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0'@;
put 'fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksbW9udGhzUGFyc2U6Uixsb25nTW9udGhzUGFyc2U6UixzaG9ydE1vbnRoc1BhcnNlOlIs'@;
put 'bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkiLExMTDoiRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntz'@;
put 'YW1lRGF5OiJbSGl6aXYgZGFdIExUIixuZXh0RGF5OiJbV2FyY1x1MDJiY2hvYXpoIGRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RhXSBMVCIsbGFzdERheToiW0RlY1x1MDJiY2ggZGFdIExUIixsYXN0V2VlazoiZGRkZCBbcGFzZXQgZGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt'@;
put 'ZTp7ZnV0dXJlOiJhLWJlbm4gJXMiLHBhc3Q6IiVzIFx1MDJiY3pvIixzOiJ1biBuZWJldWQgc2Vnb25kZW5ub1x4ZjkiLHNzOiIlZCBlaWxlbm4iLG06InVyIHZ1bnV0ZW5uIixtbTp4LGg6InVuIGV1ciIsaGg6IiVkIGV1ciIsZDoidW4gZGV2ZXpoIixkZDp4LE06InVyIG1peiIsTU06eCx5'@;
put 'OiJ1ciBibG9heiIseXk6ZnVuY3Rpb24gbShCKXtzd2l0Y2gobGUoQikpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIEIrIiBibG9heiI7ZGVmYXVsdDpyZXR1cm4gQisiIHZsb2F6In19fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGFceGYxfHZl'@;
put 'dCkvLG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKDE9PT1CPyJhXHhmMSI6InZldCIpfSx3ZWVrOntkb3c6MSxkb3k6NH0sbWVyaWRpZW1QYXJzZTovYS5tLnxnLm0uLyxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybiJnLm0uIj09PUJ9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsWSxYKXtyZXR1'@;
put 'cm4gQjwxMj8iYS5tLiI6ImcubS4ifX0pfShGKDE2Njc2KSl9LDM4MTUzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPKXt2YXIgUj1sZSsiICI7c3dpdGNoKE8pe2Nhc2Uic3MiOnJldHVybiBSKygxPT09bGU/InNla3VuZGEi'@;
put 'OjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gTT8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gUisoMT09PWxlPyJtaW51dGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1pbnV0ZSI6Im1pbnV0'@;
put 'YSIpO2Nhc2UiaCI6cmV0dXJuIE0/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gUisoMT09PWxlPyJzYXQiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIFIrKDE9PT1sZT8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0i'@;
put 'OnJldHVybiBSKygxPT09bGU/Im1qZXNlYyI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gUisoMT09PWxlPyJnb2RpbmEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/ImdvZGluZSI6ImdvZGluYSIpfX1hZS5kZWZpbmVMb2NhbGUo'@;
put 'ImJzIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F1Zy5fc2Vw'@;
put 'Ll9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9z'@;
put 'cmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixM'@;
put 'TDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXko'@;
put 'KSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0s'@;
put 'bGFzdERheToiW2p1XHUwMTBkZXIgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gZGRkZCBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2Ug'@;
put 'MTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6ImRhbiIs'@;
put 'ZGQ6eCxNOiJtamVzZWMiLE1NOngseToiZ29kaW51Iix5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNTQyODc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0'@;
put 'cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJjYSIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuZXJfZmVicmVyX21hclx4ZTdfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUg'@;
put 'ZmVicmVyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9m'@;
put 'ZWJyLl9tYXJceGU3X2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGl1bWVuZ2VfZGlsbHVuc19kaW1hcnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0'@;
put 'KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kdF9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06'@;
put 'c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsOiJEIE1NTSBZWVlZLCBIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGxsOiJk'@;
put 'ZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthdnVpIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2RlbVx4ZTAgYSAiKygxIT09dGhpcy5ob3VycygpPyJs'@;
put 'ZXMiOiJsYSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYWhpciBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQi'@;
put 'fSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc3NhdCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkJ2FxdVx4ZWQgJXMiLHBhc3Q6ImZhICVzIixzOiJ1bnMgc2Vnb25z'@;
put 'IixzczoiJWQgc2Vnb25zIixtOiJ1biBtaW51dCIsbW06IiVkIG1pbnV0cyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JlcyIsZDoidW4gZGlhIixkZDoiJWQgZGllcyIsTToidW4gbWVzIixNTToiJWQgbWVzb3MiLHk6InVuIGFueSIseXk6IiVkIGFueXMifSxkYXlPZk1vbnRoT3JkaW5hbFBh'@;
put 'cnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7dmFyIE09MT09PW0/InIiOjI9PT1tPyJuIjozPT09bT8iciI6ND09PW0/InQiOiJceGU4IjtyZXR1cm4oInciPT09bGV8fCJXIj09PWxlKSYmKE09ImEiKSxtK019LHdlZWs6e2RvdzoxLGRveTo0fX0p'@;
put 'fShGKDE2Njc2KSl9LDcyNjE2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXtmb3JtYXQ6ImxlZGVuX1x4ZmFub3JfYlx1MDE1OWV6ZW5fZHViZW5fa3ZcdTAxMWJ0ZW5fXHUwMTBkZXJ2ZW5fXHUwMTBkZXJ2ZW5lY19zcnBlbl96XHhlMVx1MDE1'@;
put 'OVx4ZWRfXHUwMTU5XHhlZGplbl9saXN0b3BhZF9wcm9zaW5lYyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJsZWRuYV9ceGZhbm9yYV9iXHUwMTU5ZXpuYV9kdWJuYV9rdlx1MDExYnRuYV9cdTAxMGRlcnZuYV9cdTAxMGRlcnZlbmNlX3NycG5hX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVk'@;
put 'am5hX2xpc3RvcGFkdV9wcm9zaW5jZSIuc3BsaXQoIl8iKX0sbT0ibGVkX1x4ZmFub19iXHUwMTU5ZV9kdWJfa3ZcdTAxMWJfXHUwMTBkdm5fXHUwMTBkdmNfc3JwX3pceGUxXHUwMTU5X1x1MDE1OVx4ZWRqX2xpc19wcm8iLnNwbGl0KCJfIiksbGU9Wy9ebGVkL2ksL15ceGZhbm8vaSwvXmJc'@;
put 'dTAxNTllL2ksL15kdWIvaSwvXmt2XHUwMTFiL2ksL14oXHUwMTBkdm58XHUwMTBkZXJ2ZW4kfFx1MDEwZGVydm5hKS9pLC9eKFx1MDEwZHZjfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZSkvaSwvXnNycC9pLC9eelx4ZTFcdTAxNTkvaSwvXlx1MDE1OVx4ZWRqL2ksL15saXMvaSwvXnBy'@;
put 'by9pXSxNPS9eKGxlZGVufFx4ZmFub3J8Ylx1MDE1OWV6ZW58ZHViZW58a3ZcdTAxMWJ0ZW58XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHxc'@;
put 'eGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pO2Z1bmN0aW9uIE8oSyl7cmV0dXJuIEs+MSYmSzw1JiYxIT1+fihLLzEwKX1mdW5jdGlvbiBSKEssSSxrLEUpe3ZhciBqPUsrIiAiO3N3aXRj'@;
put 'aChrKXtjYXNlInMiOnJldHVybiBJfHxFPyJwXHhlMXIgc2VrdW5kIjoicFx4ZTFyIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIEl8fEU/aisoTyhLKT8ic2VrdW5keSI6InNla3VuZCIpOmorInNla3VuZGFtaSI7Y2FzZSJtIjpyZXR1cm4gST8ibWludXRhIjpFPyJtaW51dHUiOiJtaW51'@;
put 'dG91IjtjYXNlIm1tIjpyZXR1cm4gSXx8RT9qKyhPKEspPyJtaW51dHkiOiJtaW51dCIpOmorIm1pbnV0YW1pIjtjYXNlImgiOnJldHVybiBJPyJob2RpbmEiOkU/ImhvZGludSI6ImhvZGlub3UiO2Nhc2UiaGgiOnJldHVybiBJfHxFP2orKE8oSyk/ImhvZGlueSI6ImhvZGluIik6aisiaG9k'@;
put 'aW5hbWkiO2Nhc2UiZCI6cmV0dXJuIEl8fEU/ImRlbiI6ImRuZW0iO2Nhc2UiZGQiOnJldHVybiBJfHxFP2orKE8oSyk/ImRueSI6ImRuXHhlZCIpOmorImRueSI7Y2FzZSJNIjpyZXR1cm4gSXx8RT8ibVx1MDExYnNceGVkYyI6Im1cdTAxMWJzXHhlZGNlbSI7Y2FzZSJNTSI6cmV0dXJuIEl8'@;
put 'fEU/aisoTyhLKT8ibVx1MDExYnNceGVkY2UiOiJtXHUwMTFic1x4ZWRjXHUwMTZmIik6aisibVx1MDExYnNceGVkY2kiO2Nhc2UieSI6cmV0dXJuIEl8fEU/InJvayI6InJva2VtIjtjYXNlInl5IjpyZXR1cm4gSXx8RT9qKyhPKEspPyJyb2t5IjoibGV0Iik6aisibGV0eSJ9fWFlLmRlZmlu'@;
put 'ZUxvY2FsZSgiY3MiLHttb250aHM6eCxtb250aHNTaG9ydDptLG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGxlZGVufGxlZG5hfFx4ZmFub3JhfFx4ZmFub3J8Ylx1MDE1OWV6ZW58Ylx1MDE1OWV6bmF8ZHViZW58ZHVibmF8a3ZcdTAxMWJ0'@;
put 'ZW58a3ZcdTAxMWJ0bmF8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHNycG5hfHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufFx1MDE1OVx4ZWRqbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLG1v'@;
put 'bnRoc1Nob3J0U3RyaWN0UmVnZXg6L14obGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6'@;
put 'bGUsd2Vla2RheXM6Im5lZFx1MDExYmxlX3BvbmRcdTAxMWJsXHhlZF9ceGZhdGVyXHhmZF9zdFx1MDE1OWVkYV9cdTAxMGR0dnJ0ZWtfcFx4ZTF0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiks'@;
put 'd2Vla2RheXNNaW46Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQg'@;
put 'RC4gTU1NTSBZWVlZIEg6bW0iLGw6IkQuIE0uIFlZWVkifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMgdl0gTFQiLG5leHREYXk6Ilt6XHhlZHRyYSB2XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRcdTAxMWJsaSB2XSBM'@;
put 'VCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW3ZdIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlt2ZSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OnJldHVybiJbdmUgXHUwMTBkdHZydGVrIHZdIExUIjtjYXNlIDU6cmV0dXJuIlt2IHBceGUxdGVrIHZdIExUIjtjYXNlIDY6cmV0dXJuIlt2'@;
put 'IHNvYm90dSB2XSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSB2XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxvdSBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW21pbnVsXHhlOV0gZGRkZCBb'@;
put 'dl0gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsb3Ugc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW3ZdIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bG91IHNvYm90dSB2XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0'@;
put 'dXJlOiJ6YSAlcyIscGFzdDoicFx1MDE1OWVkICVzIixzOlIsc3M6UixtOlIsbW06UixoOlIsaGg6UixkOlIsZGQ6UixNOlIsTU06Uix5OlIseXk6Un0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2'@;
put 'KSl9LDI3MDQ5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiY3YiLHttb250aHM6Ilx1MDQzYVx1MDRkMVx1MDQ0MFx1MDQzYlx1MDQzMFx1MDQ0N19cdTA0M2RcdTA0MzBcdTA0NDBcdTA0ZDFcdTA0NDFfXHUwNDNmXHUwNDQz'@;
put 'XHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwXHUwNDQyXHUwNDNjXHUwNDM1X1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0NDBcdTA0M2JcdTA0MzBfXHUwNDMwXHUwNDMyXHUwNGQxXHUwNDNkX1x1MDQ0ZVx1'@;
put 'MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2FfXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwXHUwNDMyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0M2FcdTA0ZDFcdTA0NDBfXHUwNDNkXHUwNDMwXHUwNDQwX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0'@;
put 'MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MF9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwX1x1MDQzMFx1MDQzMlx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OCIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5czoiXHUwNDMyXHUwNDRiXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Mlx1MDQ0M1x1MDQzZFx1MDQ0Mlx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JcdTA0MzBcdTA0NDBcdTA0Mzhc'@;
put 'dTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRlXHUwNDNkXHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYlx1MDQzZFx1MDQzNVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGRcdTA0NDBcdTA0M2RcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQ4'@;
put 'XHUwNGQxXHUwNDNjXHUwNDMwXHUwNDQyXHUwNDNhXHUwNDQzXHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MF9cdTA0NDJcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJfXHUwNDRk'@;
put 'XHUwNDQwXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQwX1x1MDQ0Mlx1MDQzZF9cdTA0NGJcdTA0NDJfXHUwNDRlXHUwNDNkX1x1MDQzYVx1MDRhYl9cdTA0NGRcdTA0NDBfXHUwNDQ4XHUwNDNjIi5zcGxpdCgiXyIpLGxvbmdE'@;
put 'YXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3'@;
put 'XSIsTExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1'@;
put 'MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDFmXHUwNDMwXHUwNDRmXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUw'@;
put 'NDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dERheToiW1x1MDQyYlx1MDQ0MFx1MDQzMFx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3REYXk6IltcdTA0ZDZcdTA0M2RcdTA0MzVcdTA0NDBdIExUIFtcdTA0NDFcdTA0MzVcdTA0'@;
put 'NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixuZXh0V2VlazoiW1x1MDRhYVx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQ0MV0gZGRkZCBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbGFzdFdlZWs6IltcdTA0MThcdTA0NDBcdTA0NDJcdTA0M2RcdTA0'@;
put 'ZDddIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuIG0rKC9cdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIkL2kuZXhlYyhtKT8iXHUwNDQw'@;
put 'XHUwNDM1XHUwNDNkIjovXHUwNGFiXHUwNDQzXHUwNDNiJC9pLmV4ZWMobSk/Ilx1MDQ0Mlx1MDQzMFx1MDQzZCI6Ilx1MDQ0MFx1MDQzMFx1MDQzZCIpfSxwYXN0OiIlcyBcdTA0M2FcdTA0MzBcdTA0NGZcdTA0M2JcdTA0M2JcdTA0MzAiLHM6Ilx1MDQzZlx1MDRkN1x1MDQ0MC1cdTA0Mzhc'@;
put 'dTA0M2EgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixzczoiJWQgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixtOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUw'@;
put 'NDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixkOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNhXHUwNDQzXHUwNDNkIixk'@;
put 'ZDoiJWQgXHUwNDNhXHUwNDQzXHUwNDNkIixNOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1IixNTToiJWQgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1Iix5OiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNGFiXHUwNDQzXHUwNDNiIix5eToiJWQgXHUwNGFiXHUw'@;
put 'NDQzXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1cdTA0M2NcdTA0ZDdcdTA0NDgvLG9yZGluYWw6IiVkLVx1MDQzY1x1MDRkN1x1MDQ0OCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sOTkxNzI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFl'@;
put 'KXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJjeSIse21vbnRoczoiSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZlbm5hZl9Bd3N0X01lZGlfSHlkcmVmX1RhY2h3ZWRkX1JoYWdmeXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Iklvbl9DaHdl'@;
put 'X01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9IeWRfVGFjaF9SaGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hv'@;
put 'cnQ6IlN1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0xsX01hX01lX0lhX0d3X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9Z'@;
put 'WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIZWRkaXcgYW1dIExUIixuZXh0RGF5OiJbWWZvcnkgYW1dIExUIixuZXh0V2VlazoiZGRkZCBbYW1dIExUIixsYXN0'@;
put 'RGF5OiJbRGRvZSBhbV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkaXdldGhhZiBhbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im1ld24gJXMiLHBhc3Q6IiVzIHluIFx4ZjRsIixzOiJ5Y2h5ZGlnIGVpbGlhZGF1IixzczoiJWQgZWlsaWFkIixtOiJtdW51ZCIsbW06'@;
put 'IiVkIG11bnVkIixoOiJhd3IiLGhoOiIlZCBhd3IiLGQ6ImRpd3Jub2QiLGRkOiIlZCBkaXdybm9kIixNOiJtaXMiLE1NOiIlZCBtaXMiLHk6ImJsd3lkZHluIix5eToiJWQgZmx5bmVkZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZmVkfGFpbnxhZnxpbHx5ZGR8ZWR8ZWcp'@;
put 'LyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBNPSIiO3JldHVybiBtPjIwP009NDA9PT1tfHw1MD09PW18fDYwPT09bXx8ODA9PT1tfHwxMDA9PT1tPyJmZWQiOiJhaW4iOm0+MCYmKE09WyIiLCJhZiIsImlsIiwieWRkIiwieWRkIiwiZWQiLCJlZCIsImVkIiwiZmVkIiwiZmVkIiwiZmVkIiwi'@;
put 'ZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZmVkIl1bbV0pLG0rTX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjA2MDU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJk'@;
put 'YSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3Zf'@;
put 'ZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmOG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sXHhmOHIiLnNwbGl0KCJfIiksd2Vla2RheXNN'@;
put 'aW46InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIFtkLl0gRC4gTU1N'@;
put 'TSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6InBceGU1IGRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGdceGU1ciBrbC5dIExUIixsYXN0V2VlazoiW2ldIGRkZGRbcyBr'@;
put 'bC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6ImZceGU1IHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0IG1pbnV0IixtbToiJWQgbWludXR0ZXIiLGg6ImVuIHRpbWUiLGhoOiIlZCB0aW1lciIsZDoiZW4g'@;
put 'ZGFnIixkZDoiJWQgZGFnZSIsTToiZW4gbVx4ZTVuZWQiLE1NOiIlZCBtXHhlNW5lZGVyIix5OiJldCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDkz'@;
put 'Mzk1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRh'@;
put 'ZyJdLGRkOltsZSsiIFRhZ2UiLGxlKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W2xlKyIgTW9uYXRlIixsZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2xlKyIgSmFo'@;
put 'cmUiLGxlKyIgSmFocmVuIl19O3JldHVybiBNP3pbT11bMF06eltPXVsxXX1hZS5kZWZpbmVMb2NhbGUoImRlLWF0Iix7bW9udGhzOiJKXHhlNG5uZXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVy'@;
put 'Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKXHhlNG4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2No'@;
put 'X0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxv'@;
put 'bmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBb'@;
put 'VWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1l'@;
put 'OntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06eCxtbToiJWQgTWludXRlbiIsaDp4LGhoOiIlZCBTdHVuZGVuIixkOngsZGQ6eCx3Ongsd3c6IiVkIFdvY2hlbiIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9u'@;
put 'dGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5OTgzNTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17bTpbImVpbmUgTWlu'@;
put 'dXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbbGUrIiBUYWdlIixsZSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25h'@;
put 'dCJdLE1NOltsZSsiIE1vbmF0ZSIsbGUrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltsZSsiIEphaHJlIixsZSsiIEphaHJlbiJdfTtyZXR1cm4gTT96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJkZS1jaCIse21vbnRoczoiSmFudWFyX0ZlYnJ1'@;
put 'YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3Bs'@;
put 'aXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5'@;
put 'c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExM'@;
put 'OiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0g'@;
put 'TFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06eCxtbToiJWQgTWludXRlbiIsaDp4LGhoOiIlZCBT'@;
put 'dHVuZGVuIixkOngsZGQ6eCx3Ongsd3c6IiVkIFdvY2hlbiIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5NDAxMzpmdW5jdGlvbihhdCxJZSxGKXshZnVu'@;
put 'Y3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbbGUrIiBUYWdlIixsZSsiIFRh'@;
put 'Z2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltsZSsiIE1vbmF0ZSIsbGUrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltsZSsiIEphaHJlIixsZSsiIEphaHJlbiJdfTtyZXR1cm4g'@;
put 'TT96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJkZSIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9G'@;
put 'ZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQo'@;
put 'Il8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t'@;
put 'OnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2Vu'@;
put 'IHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJl'@;
put 'aW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOngsbW06IiVkIE1pbnV0ZW4iLGg6eCxoaDoiJWQgU3R1bmRlbiIsZDp4LGRkOngsdzp4LHd3OiIlZCBXb2NoZW4iLE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6'@;
put 'IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTQ1NzA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9WyJcdTA3OTZcdTA3YWNcdTA3ODJcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3OGFcdTA3YWNcdTA3'@;
put 'ODRcdTA3YjBcdTA3ODNcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3ODlcdTA3YTdcdTA3ODNcdTA3YThcdTA3OTdcdTA3YWEiLCJcdTA3ODdcdTA3YWRcdTA3OTVcdTA3YjBcdTA3ODNcdTA3YTlcdTA3OGRcdTA3YWEiLCJcdTA3ODlcdTA3YWQiLCJcdTA3OTZcdTA3YWJc'@;
put 'dTA3ODJcdTA3YjAiLCJcdTA3OTZcdTA3YWFcdTA3OGRcdTA3YTZcdTA3ODdcdTA3YTgiLCJcdTA3ODdcdTA3YWZcdTA3OGVcdTA3YTZcdTA3OTBcdTA3YjBcdTA3OTNcdTA3YWEiLCJcdTA3OTBcdTA3YWNcdTA3OTVcdTA3YjBcdTA3OTNcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZc'@;
put 'dTA3ODNcdTA3YWEiLCJcdTA3ODdcdTA3YWVcdTA3ODZcdTA3YjBcdTA3OTNcdTA3YWZcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODJcdTA3YWVcdTA3ODhcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3OTFcdTA3YThcdTA3OTBcdTA3YWNc'@;
put 'dTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiXSxtPVsiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4XHUwNzg3XHUwN2IwXHUwNzhjXHUwN2E2IiwiXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2IiwiXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwXHUwNzhlXHUwN2E3XHUwNzgzXHUw'@;
put 'N2E2IiwiXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3XHUwNzkwXHUwN2IwXHUwNzhhXHUwN2E2XHUwNzhjXHUwN2E4IiwiXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2FhIiwiXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4XHUwNzgw'@;
put 'XHUwN2E4XHUwNzgzXHUwN2FhIl07YWUuZGVmaW5lTG9jYWxlKCJkdiIse21vbnRoczp4LG1vbnRoc1Nob3J0Ongsd2Vla2RheXM6bSx3ZWVrZGF5c1Nob3J0Om0sd2Vla2RheXNNaW46Ilx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOF9cdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTZfXHUwNzg3XHUw'@;
put 'N2E2XHUwNzgyXHUwN2IwX1x1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNl9cdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdfXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhX1x1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t'@;
put 'OnNzIixMOiJEL00vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNzg5XHUwNzg2fFx1MDc4OVx1MDc4YS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4iXHUwNzg5XHUw'@;
put 'NzhhIj09PU19LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUwNzg5XHUwNzg2IjoiXHUwNzg5XHUwNzhhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA3ODlcdTA3YThcdTA3ODdcdTA3YTZcdTA3OGJcdTA3YWFdIExUIixuZXh0RGF5OiJbXHUwNzg5XHUwN2E3XHUw'@;
put 'NzhiXHUwN2E2XHUwNzg5XHUwN2E3XSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltcdTA3ODdcdTA3YThcdTA3ODdcdTA3YjBcdTA3OTRcdTA3YWNdIExUIixsYXN0V2VlazoiW1x1MDc4YVx1MDdhN1x1MDc4N1x1MDdhOFx1MDc4Y1x1MDdhYVx1MDc4OFx1MDdhOF0gZGRkZCBM'@;
put 'VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNzhjXHUwN2FjXHUwNzgzXHUwN2FkXHUwNzhlXHUwN2E2XHUwNzg3XHUwN2E4ICVzIixwYXN0OiJcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YThcdTA3ODJcdTA3YjAgJXMiLHM6Ilx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdh'@;
put 'YVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYVx1MDc4Nlx1MDdhZVx1MDc4NVx1MDdhY1x1MDc4N1x1MDdiMCIsc3M6ImQlIFx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYSIsbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FjXHUwNzg3'@;
put 'XHUwN2IwIixtbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FhICVkIixoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLGhoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNc'@;
put 'dTA3YWEgJWQiLGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsZGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc5MFx1MDdiMCAlZCIsTToiXHUwNzg5XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixNTToiXHUwNzg5XHUwN2E2'@;
put 'XHUwNzkwXHUwN2IwICVkIix5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLHl5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWEgJWQifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cdTA2MGMvZywi'@;
put 'LCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo3LGRveToxMn19KX0oRigxNjY3NikpfSwzMTg1OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVs'@;
put 'Iix7bW9udGhzTm9taW5hdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1'@;
put 'MDNjMVx1MDNjNFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYWZcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiZFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZc'@;
put 'dTAzY2RcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2NkXHUwM2IzXHUwM2JmXHUwM2M1XHUwM2MzXHUwM2M0XHUwM2JmXHUwM2MyX1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWZcdTAzYmFc'@;
put 'dTAzYzRcdTAzY2VcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlkXHUwM2JmXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMiIuc3BsaXQo'@;
put 'Il8iKSxtb250aHNHZW5pdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1'@;
put 'MDNjMVx1MDNjNFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwMzkwXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZc'@;
put 'dTAzYzVcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2M1XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2MzXHUwM2M0XHUwM2JmXHUwM2M1X1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWZcdTAzYmFc'@;
put 'dTAzYzRcdTAzYzlcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlkXHUwM2JmXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIuc3BsaXQo'@;
put 'Il8iKSxtb250aHM6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIGxlPyJzdHJpbmciPT10eXBlb2YgTSYmL0QvLnRlc3QoTS5zdWJzdHJpbmcoMCxNLmluZGV4T2YoIk1NTU0iKSkpP3RoaXMuX21vbnRoc0dlbml0aXZlRWxbbGUubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW2xlLm1v'@;
put 'bnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbH0sbW9udGhzU2hvcnQ6Ilx1MDM5OVx1MDNiMVx1MDNiZF9cdTAzYTZcdTAzYjVcdTAzYjJfXHUwMzljXHUwM2IxXHUwM2MxX1x1MDM5MVx1MDNjMFx1MDNjMV9cdTAzOWNcdTAzYjFcdTAzY2FfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2Jk'@;
put 'X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYl9cdTAzOTFcdTAzYzVcdTAzYjNfXHUwM2EzXHUwM2I1XHUwM2MwX1x1MDM5Zlx1MDNiYVx1MDNjNF9cdTAzOWRcdTAzYmZcdTAzYjVfXHUwMzk0XHUwM2I1XHUwM2JhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTAzOWFcdTAzYzVcdTAzYzFcdTAz'@;
put 'YjlcdTAzYjFcdTAzYmFcdTAzYWVfXHUwMzk0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2FkXHUwM2MxXHUwM2IxX1x1MDNhNFx1MDNjMVx1MDNhZlx1MDNjNFx1MDNiN19cdTAzYTRcdTAzYjVcdTAzYzRcdTAzYWNcdTAzYzFcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2FkXHUwM2JjXHUwM2MwXHUw'@;
put 'M2M0XHUwM2I3X1x1MDNhMFx1MDNiMVx1MDNjMVx1MDNiMVx1MDNjM1x1MDNiYVx1MDNiNVx1MDNjNVx1MDNhZV9cdTAzYTNcdTAzYWNcdTAzYjJcdTAzYjJcdTAzYjFcdTAzYzRcdTAzYmYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMzlhXHUwM2M1XHUwM2MxX1x1MDM5NFx1MDNi'@;
put 'NVx1MDNjNV9cdTAzYTRcdTAzYzFcdTAzYjlfXHUwM2E0XHUwM2I1XHUwM2M0X1x1MDNhMFx1MDNiNVx1MDNiY19cdTAzYTBcdTAzYjFcdTAzYzFfXHUwM2EzXHUwM2IxXHUwM2IyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAzOWFcdTAzYzVfXHUwMzk0XHUwM2I1X1x1MDNhNFx1MDNj'@;
put 'MV9cdTAzYTRcdTAzYjVfXHUwM2EwXHUwM2I1X1x1MDNhMFx1MDNiMV9cdTAzYTNcdTAzYjEiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU+MTE/Tz8iXHUwM2JjXHUwM2JjIjoiXHUwMzljXHUwMzljIjpPPyJcdTAzYzBcdTAzYmMiOiJcdTAzYTBcdTAz'@;
put 'OWMifSxpc1BNOmZ1bmN0aW9uKGxlKXtyZXR1cm4iXHUwM2JjIj09PShsZSsiIikudG9Mb3dlckNhc2UoKVswXX0sbWVyaWRpZW1QYXJzZTovW1x1MDNhMFx1MDM5Y11cLj9cdTAzOWM/XC4/L2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9Z'@;
put 'WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhckVsOntzYW1lRGF5OiJbXHUwM2EzXHUwM2FlXHUwM2JjXHUwM2I1XHUwM2MxXHUwM2IxIHt9XSBMVCIsbmV4dERheToiW1x1MDM5MVx1'@;
put 'MDNjZFx1MDNjMVx1MDNiOVx1MDNiZiB7fV0gTFQiLG5leHRXZWVrOiJkZGRkIFt7fV0gTFQiLGxhc3REYXk6IltcdTAzYTdcdTAzYjhcdTAzYjVcdTAzYzIge31dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiA2PT09dGhpcy5kYXkoKT8iW1x1MDNjNFx1MDNiZiBcdTAzYzBcdTAz'@;
put 'YzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYmZdIGRkZGQgW3t9XSBMVCI6IltcdTAzYzRcdTAzYjdcdTAzYmQgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2I3XSBkZGRk'@;
put 'IFt7fV0gTFQifSxzYW1lRWxzZToiTCJ9LGNhbGVuZGFyOmZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRoaXMuX2NhbGVuZGFyRWxbbGVdLFI9TSYmTS5ob3VycygpO3JldHVybiBmdW5jdGlvbiB4KGxlKXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYmbGUgaW5zdGFuY2VvZiBGdW5jdGlvbnx8'@;
put 'IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsZSl9KE8pJiYoTz1PLmFwcGx5KE0pKSxPLnJlcGxhY2UoInt9IixSJTEyPT0xPyJcdTAzYzNcdTAzYzRcdTAzYjciOiJcdTAzYzNcdTAzYzRcdTAzYjlcdTAzYzIiKX0scmVsYXRpdmVUaW1lOntm'@;
put 'dXR1cmU6Ilx1MDNjM1x1MDNiNSAlcyIscGFzdDoiJXMgXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JkIixzOiJcdTAzYmJcdTAzYWZcdTAzYjNcdTAzYjEgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixzczoi'@;
put 'JWQgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixtOiJcdTAzYWRcdTAzYmRcdTAzYjEgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2NjIixtbToiJWQgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUw'@;
put 'M2FjIixoOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2NlXHUwM2MxXHUwM2IxIixoaDoiJWQgXHUwM2NlXHUwM2MxXHUwM2I1XHUwM2MyIixkOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2IxIixkZDoiJWQgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2I1XHUwM2My'@;
put 'IixNOiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2IxXHUwM2MyIixNTToiJWQgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2I1XHUwM2MyIix5OiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2JmXHUwM2My'@;
put 'Iix5eToiJWQgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2I5XHUwM2IxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDNiNy8sb3JkaW5hbDoiJWRcdTAzYjciLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDU1Nzg1OmZ1bmN0aW9uKGF0LEllLEYpeyFm'@;
put 'dW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tYXUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hv'@;
put 'cnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9u'@;
put 'X1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1N'@;
put 'TSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0'@;
put 'V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVk'@;
put 'IGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0'@;
put 'dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oRigxNjY3NikpfSw4Mzc5MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVM'@;
put 'b2NhbGUoImVuLWNhIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVn'@;
put 'X1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdl'@;
put 'ZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IllZWVktTU0tREQiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBE'@;
put 'LCBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVF'@;
put 'bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixN'@;
put 'OiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09'@;
put 'bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX19KX0oRigxNjY3NikpfSw1NzY1MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWdiIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0Fwcmls'@;
put 'X01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRh'@;
put 'eV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0'@;
put 'ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6'@;
put 'IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBm'@;
put 'ZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZN'@;
put 'b250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19'@;
put 'KX0oRigxNjY3NikpfSw4MTkyOTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWllIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVy'@;
put 'X05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0'@;
put 'dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJE'@;
put 'RC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBM'@;
put 'VCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUi'@;
put 'LG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8s'@;
put 'b3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDE5ODE4OmZ1bmN0aW9uKGF0LEllLEYpeyFm'@;
put 'dW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4taWwiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hv'@;
put 'cnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9u'@;
put 'X1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0g'@;
put 'WVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVr'@;
put 'OiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91'@;
put 'cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4g'@;
put 'bSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9fSl9KEYoMTY2NzYpKX0sNjYxMjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWluIix7bW9udGhzOiJK'@;
put 'YW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQo'@;
put 'Il8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9U'@;
put 'aF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntz'@;
put 'YW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1'@;
put 'cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5'@;
put 'OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/'@;
put 'InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjQ5MDA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1ueiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVu'@;
put 'ZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2Rh'@;
put 'eV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6'@;
put 'e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1Rv'@;
put 'bW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBz'@;
put 'ZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRo'@;
put 'T3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShG'@;
put 'KDE2Njc2KSl9LDcyNzIxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tc2ciLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92'@;
put 'ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRh'@;
put 'eSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01N'@;
put 'L1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIs'@;
put 'bGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1t'@;
put 'OiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3Jk'@;
put 'aW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDk1MTU5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5j'@;
put 'dGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW8iLHttb250aHM6ImphbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9fanVsaW9fYVx1MDE2ZGd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRo'@;
put 'c1Nob3J0OiJqYW5fZmViX21hcnRfYXByX21hal9qdW5fanVsX2FcdTAxNmRnX3NlcHRfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRpbWFuXHUwMTA5b19sdW5kb19tYXJkb19tZXJrcmVkb19cdTAxMzVhXHUwMTZkZG9fdmVuZHJlZG9fc2FiYXRvIi5zcGxpdCgiXyIpLHdl'@;
put 'ZWtkYXlzU2hvcnQ6ImRpbV9sdW5fbWFyZF9tZXJrX1x1MDEzNWFcdTAxNmRfdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfXHUwMTM1YV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZ'@;
put 'LU1NLUREIixMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSIsTExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixMTExMOiJkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDpt'@;
put 'bSJ9LG1lcmlkaWVtUGFyc2U6L1thcF1cLnRcLm0vaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJwIj09PW0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG0+MTE/TT8icC50Lm0uIjoiUC5ULk0uIjpNPyJhLnQubS4iOiJBLlQuTS4i'@;
put 'fSxjYWxlbmRhcjp7c2FtZURheToiW0hvZGlhXHUwMTZkIGplXSBMVCIsbmV4dERheToiW01vcmdhXHUwMTZkIGplXSBMVCIsbmV4dFdlZWs6ImRkZGRbbiBqZV0gTFQiLGxhc3REYXk6IltIaWVyYVx1MDE2ZCBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YW5dIGRkZGRbbiBqZV0gTFQiLHNh'@;
put 'bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvc3QgJXMiLHBhc3Q6ImFudGFcdTAxNmQgJXMiLHM6ImtlbGthaiBzZWt1bmRvaiIsc3M6IiVkIHNla3VuZG9qIixtOiJ1bnUgbWludXRvIixtbToiJWQgbWludXRvaiIsaDoidW51IGhvcm8iLGhoOiIlZCBob3JvaiIsZDoidW51'@;
put 'IHRhZ28iLGRkOiIlZCB0YWdvaiIsTToidW51IG1vbmF0byIsTU06IiVkIG1vbmF0b2oiLHk6InVudSBqYXJvIix5eToiJWQgamFyb2oifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9YS8sb3JkaW5hbDoiJWRhIix3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSwxMTc4'@;
put 'MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBf'@;
put 'b2N0X25vdl9kaWMiLnNwbGl0KCJfIiksbGU9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5p'@;
put 'b3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJlcy1kbyIs'@;
put 'e21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1Iu'@;
put 'bW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1i'@;
put 'cmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQ'@;
put 'YXJzZTpsZSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlz'@;
put 'TWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1N'@;
put 'IFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEi'@;
put 'KygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBh'@;
put 'c3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMi'@;
put 'LE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjM0Njg6ZnVuY3Rpb24oYXQsSWUs'@;
put 'Ril7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLG09ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxp'@;
put 'dCgiXyIpLGxlPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sTT0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNl'@;
put 'cHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO2FlLmRlZmluZUxvY2FsZSgiZXMtbXgiLHttb250aHM6ImVuZXJvX2Zl'@;
put 'YnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/bVtSLm1vbnRoKCldOnhbUi5tb250'@;
put 'aCgpXTp4fSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0'@;
put 'U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6'@;
put 'ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlf'@;
put 'anVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExM'@;
put 'OiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9'@;
put 'PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIi'@;
put 'KSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1'@;
put 'bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMi'@;
put 'LHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfShGKDE2Njc2KSl9LDQ0OTM4OmZ1bmN0aW9u'@;
put 'KGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxtPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2Rp'@;
put 'YyIuc3BsaXQoIl8iKSxsZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLE09L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFn'@;
put 'b3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTthZS5kZWZpbmVMb2NhbGUoImVzLXVzIix7bW9udGhzOiJl'@;
put 'bmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21bUi5tb250aCgpXTp4'@;
put 'W1IubW9udGgoKV06eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250'@;
put 'aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdl'@;
put 'ZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1'@;
put 'X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZ'@;
put 'IGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhm'@;
put 'MWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlz'@;
put 'LmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAl'@;
put 'cyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVz'@;
put 'IixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwyMTk1NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rp'@;
put 'b24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksbGU9'@;
put 'Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxv'@;
put 'Y3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJlcyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19h'@;
put 'YnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1IubW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRo'@;
put 'c1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDov'@;
put 'XihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoiZG9taW5nb19sdW5l'@;
put 'c19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIu'@;
put 'c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2Rl'@;
put 'XSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3Vycygp'@;
put 'PyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFz'@;
put 'dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQg'@;
put 'c2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFv'@;
put 'Iix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KEYoMTY2NzYpKX0sMTE0NTM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1'@;
put 'bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e3M6WyJtXHhmNW5lIHNla3VuZGkiLCJtXHhmNW5pIHNla3VuZCIsInBhYXIgc2VrdW5kaXQiXSxzczpbbGUrInNla3VuZGkiLGxlKyJzZWt1bmRpdCJdLG06WyJceGZjaGUgbWludXRpIiwiXHhmY2tz'@;
put 'IG1pbnV0Il0sbW06W2xlKyIgbWludXRpIixsZSsiIG1pbnV0aXQiXSxoOlsiXHhmY2hlIHR1bm5pIiwidHVuZCBhZWdhIiwiXHhmY2tzIHR1bmQiXSxoaDpbbGUrIiB0dW5uaSIsbGUrIiB0dW5kaSJdLGQ6WyJceGZjaGUgcFx4ZTRldmEiLCJceGZja3MgcFx4ZTRldiJdLE06WyJrdXUgYWph'@;
put 'Iiwia3V1IGFlZ2EiLCJceGZja3Mga3V1Il0sTU06W2xlKyIga3V1IixsZSsiIGt1dWQiXSx5OlsiXHhmY2hlIGFhc3RhIiwiYWFzdGEiLCJceGZja3MgYWFzdGEiXSx5eTpbbGUrIiBhYXN0YSIsbGUrIiBhYXN0YXQiXX07cmV0dXJuIE0/eltPXVsyXT96W09dWzJdOnpbT11bMV06Uj96W09d'@;
put 'WzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJldCIse21vbnRoczoiamFhbnVhcl92ZWVicnVhcl9tXHhlNHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYWFu'@;
put 'X3ZlZWJyX21ceGU0cnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJwXHhmY2hhcFx4ZTRldl9lc21hc3BceGU0ZXZfdGVpc2lwXHhlNGV2X2tvbG1hcFx4ZTRldl9uZWxqYXBceGU0ZXZfcmVlZGVfbGF1cFx4ZTRldiIu'@;
put 'c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixM'@;
put 'TEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVFx4ZTRuYSxdIExUIixuZXh0RGF5OiJbSG9tbWUsXSBMVCIsbmV4dFdlZWs6IltKXHhlNHJnbWluZV0gZGRkZCBMVCIsbGFzdERheToiW0VpbGUsXSBMVCIs'@;
put 'bGFzdFdlZWs6IltFZWxtaW5lXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNHJhc3QiLHBhc3Q6IiVzIHRhZ2FzaSIsczp4LHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDp4LGRkOiIlZCBwXHhlNGV2YSIsTTp4LE1NOngseTp4LHl5Onh9LGRh'@;
put 'eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw0NDY5NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRh'@;
put 'cnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9h'@;
put 'emEuX2FiZS4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJpZy5fYWwuX2FyLl9hei5fb2cu'@;
put 'X29sLl9sci4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImlnX2FsX2FyX2F6X29nX29sX2xyIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWVtrb10gTU1NTVty'@;
put 'ZW5dIERbYV0iLExMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLExMTEw6ImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixsOiJZWVlZLU0tRCIsbGw6IllZWVlba29dIE1NTSBEW2FdIixsbGw6IllZWVlba29dIE1NTSBEW2FdIEhIOm1tIixsbGxsOiJkZGQs'@;
put 'IFlZWVlba29dIE1NTSBEW2FdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltnYXVyXSBMVFtldGFuXSIsbmV4dERheToiW2JpaGFyXSBMVFtldGFuXSIsbmV4dFdlZWs6ImRkZGQgTFRbZXRhbl0iLGxhc3REYXk6IlthdHpvXSBMVFtldGFuXSIsbGFzdFdlZWs6IlthdXJyZWtvXSBkZGRk'@;
put 'IExUW2V0YW5dIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYXJydSIscGFzdDoiZHVlbGEgJXMiLHM6InNlZ3VuZG8gYmF0enVrIixzczoiJWQgc2VndW5kbyIsbToibWludXR1IGJhdCIsbW06IiVkIG1pbnV0dSIsaDoib3JkdSBiYXQiLGhoOiIlZCBvcmR1Iixk'@;
put 'OiJlZ3VuIGJhdCIsZGQ6IiVkIGVndW4iLE06ImhpbGFiZXRlIGJhdCIsTU06IiVkIGhpbGFiZXRlIix5OiJ1cnRlIGJhdCIseXk6IiVkIHVydGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYp'@;
put 'KX0sNTI5MDA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDZmMSIsMjoiXHUwNmYyIiwzOiJcdTA2ZjMiLDQ6Ilx1MDZmNCIsNToiXHUwNmY1Iiw2OiJcdTA2ZjYiLDc6Ilx1MDZmNyIsODoiXHUwNmY4Iiw5OiJcdTA2ZjkiLDA6Ilx1'@;
put 'MDZmMCJ9LG09eyJcdTA2ZjEiOiIxIiwiXHUwNmYyIjoiMiIsIlx1MDZmMyI6IjMiLCJcdTA2ZjQiOiI0IiwiXHUwNmY1IjoiNSIsIlx1MDZmNiI6IjYiLCJcdTA2ZjciOiI3IiwiXHUwNmY4IjoiOCIsIlx1MDZmOSI6IjkiLCJcdTA2ZjAiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJmYSIse21v'@;
put 'bnRoczoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2'@;
put 'NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9c'@;
put 'dTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0'@;
put 'OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1'@;
put 'MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUw'@;
put 'NjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUw'@;
put 'NjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2'@;
put 'MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUw'@;
put 'NjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDYyY19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6'@;
put 'bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMXxcdTA2'@;
put 'MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4vXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLnRlc3QoTSl9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4g'@;
put 'TTwxMj8iXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEiOiJcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ1XHUwNjMxXHUwNjQ4XHUwNjMyIFx1'@;
put 'MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2NDFcdTA2MzFcdTA2MmZcdTA2MjcgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2Y2NcdTA2'@;
put 'MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY3ZVx1MDZjY1x1MDYzNF0gW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyZlx1MDYzMSAlcyIs'@;
put 'cGFzdDoiJXMgXHUwNjdlXHUwNmNjXHUwNjM0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixtOiJcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUw'@;
put 'NjQ3IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixoOiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixkOiJcdTA2Y2NcdTA2YTkgXHUwNjMxXHUwNjQ4XHUwNjMyIixkZDoiJWQgXHUw'@;
put 'NjMxXHUwNjQ4XHUwNjMyIixNOiJcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNjQ3IixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ3Iix5OiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7'@;
put 'cmV0dXJuIE0ucmVwbGFjZSgvW1x1MDZmMC1cdTA2ZjldL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KS5yZXBsYWNl'@;
put 'KC8sL2csIlx1MDYwYyIpfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwNjQ1LyxvcmRpbmFsOiIlZFx1MDY0NSIsd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDQ5Nzc1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4'@;
put 'PSJub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGpceGU0IHZpaXNpIGt1dXNpIHNlaXRzZW1ceGU0biBrYWhkZWtzYW4geWhkZWtzXHhlNG4iLnNwbGl0KCIgIiksbT1bIm5vbGxhIiwieWhkZW4iLCJrYWhkZW4iLCJrb2xtZW4iLCJuZWxqXHhlNG4iLCJ2aWlkZW4iLCJrdXVkZW4iLHhbN10s'@;
put 'eFs4XSx4WzldXTtmdW5jdGlvbiBsZShSLHosSyxJKXt2YXIgaz0iIjtzd2l0Y2goSyl7Y2FzZSJzIjpyZXR1cm4gST8ibXV1dGFtYW4gc2VrdW5uaW4iOiJtdXV0YW1hIHNla3VudGkiO2Nhc2Uic3MiOms9ST8ic2VrdW5uaW4iOiJzZWt1bnRpYSI7YnJlYWs7Y2FzZSJtIjpyZXR1cm4gST8i'@;
put 'bWludXV0aW4iOiJtaW51dXR0aSI7Y2FzZSJtbSI6az1JPyJtaW51dXRpbiI6Im1pbnV1dHRpYSI7YnJlYWs7Y2FzZSJoIjpyZXR1cm4gST8idHVubmluIjoidHVudGkiO2Nhc2UiaGgiOms9ST8idHVubmluIjoidHVudGlhIjticmVhaztjYXNlImQiOnJldHVybiBJPyJwXHhlNGl2XHhlNG4i'@;
put 'OiJwXHhlNGl2XHhlNCI7Y2FzZSJkZCI6az1JPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNFx4ZTQiO2JyZWFrO2Nhc2UiTSI6cmV0dXJuIEk/Imt1dWthdWRlbiI6Imt1dWthdXNpIjtjYXNlIk1NIjprPUk/Imt1dWthdWRlbiI6Imt1dWthdXR0YSI7YnJlYWs7Y2FzZSJ5IjpyZXR1cm4g'@;
put 'ST8idnVvZGVuIjoidnVvc2kiO2Nhc2UieXkiOms9ST8idnVvZGVuIjoidnVvdHRhIn1yZXR1cm4gZnVuY3Rpb24gTShSLHope3JldHVybiBSPDEwP3o/bVtSXTp4W1JdOlJ9KFIsSSkrIiAiK2t9YWUuZGVmaW5lTG9jYWxlKCJmaSIse21vbnRoczoidGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlz'@;
put 'a3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc1x4ZTRrdXVfaGVpblx4ZTRrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InRhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXNceGU0X2hlaW5ceGU0X2Vsb19z'@;
put 'eXlzX2xva2FfbWFycmFzX2pvdWx1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0'@;
put 'KCJfIiksd2Vla2RheXNNaW46InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW3RhXSBZWVlZIixMTEw6IkRvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1t'@;
put 'IixMTExMOiJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsbDoiRC5NLllZWVkiLGxsOiJEbyBNTU0gWVlZWSIsbGxsOiJEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0iLGxsbGw6ImRkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt0'@;
put 'XHhlNG5ceGU0XHhlNG5dIFtrbG9dIExUIixuZXh0RGF5OiJbaHVvbWVubmFdIFtrbG9dIExUIixuZXh0V2VlazoiZGRkZCBba2xvXSBMVCIsbGFzdERheToiW2VpbGVuXSBba2xvXSBMVCIsbGFzdFdlZWs6Ilt2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRp'@;
put 'dmVUaW1lOntmdXR1cmU6IiVzIHBceGU0XHhlNHN0XHhlNCIscGFzdDoiJXMgc2l0dGVuIixzOmxlLHNzOmxlLG06bGUsbW06bGUsaDpsZSxoaDpsZSxkOmxlLGRkOmxlLE06bGUsTU06bGUseTpsZSx5eTpsZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIl'@;
put 'ZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDY0MjgyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZmlsIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdv'@;
put 'c3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3Vs'@;
put 'ZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDpt'@;
put 'bSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5n'@;
put 'XSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcg'@;
put 'bmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6'@;
put 'ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gbX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sODQyMzY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNl'@;
put 'IHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJmbyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJceGVkbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXBy'@;
put 'X21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4ZTFuYWRhZ3VyX3RceGZkc2RhZ3VyX21pa3VkYWd1cl9oXHhmM3NkYWd1cl9mclx4ZWRnZ2phZGFndXJfbGV5Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9y'@;
put 'dDoic3VuX21ceGUxbl90XHhmZHNfbWlrX2hceGYzc19mclx4ZWRfbGV5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlMV90XHhmZF9taV9oXHhmM19mcl9sZSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZ'@;
put 'IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4Y2QgbW9yZ2luIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5d'@;
put 'IExUIixsYXN0RGF5OiJbXHhjZCBnalx4ZTFyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwc3R1XSBkZGRkIFtrbF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InVtICVzIixwYXN0OiIlcyBzXHhlZFx4ZjBhbmkiLHM6ImZceGUxIHNla3VuZCIsc3M6IiVk'@;
put 'IHNla3VuZGlyIixtOiJlaW4gbWludXR0dXIiLG1tOiIlZCBtaW51dHRpciIsaDoiZWluIHRceGVkbWkiLGhoOiIlZCB0XHhlZG1hciIsZDoiZWluIGRhZ3VyIixkZDoiJWQgZGFnYXIiLE06ImVpbiBtXHhlMW5hXHhmMHVyIixNTToiJWQgbVx4ZTFuYVx4ZjBpciIseToiZWl0dCBceGUxciIs'@;
put 'eXk6IiVkIFx4ZTFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDkyODMwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgi'@;
put 'ZnItY2EiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9q'@;
put 'dWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRp'@;
put 'bS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1N'@;
put 'LUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRk'@;
put 'IFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vj'@;
put 'b25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov'@;
put 'XGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIG0rKDE9PT1tPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rKDE9PT1tPyJyZSI6ImUi'@;
put 'KX19fSl9KEYoMTY2NzYpKX0sMjE0MTI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJmci1jaCIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJy'@;
put 'ZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtk'@;
put 'YXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2Ei'@;
put 'LnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNh'@;
put 'bGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNl'@;
put 'OiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIs'@;
put 'ZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJE'@;
put 'IjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gbSsoMT09PW0/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsoMT09PW0/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sODkzNjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNl'@;
put 'IHN0cmljdCI7dmFyIGxlPS8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZFx4ZTljXC4/fGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0'@;
put 'ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSxNPVsvXmphbnYvaSwvXmZceGU5dnIvaSwvXm1hcnMvaSwvXmF2ci9pLC9ebWFpL2ksL15qdWluL2ksL15qdWlsL2ksL15hb1x4ZmJ0L2ksL15zZXB0L2ksL15vY3QvaSwvXm5vdi9pLC9eZFx4ZTljL2ldO2FlLmRlZmluZUxv'@;
put 'Y2FsZSgiZnIiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21h'@;
put 'aV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6bGUsbW9udGhzU2hvcnRSZWdleDpsZSxtb250aHNTdHJpY3RSZWdleDovXihqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhm'@;
put 'YnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5Y1wuPykvaSxtb250'@;
put 'aHNQYXJzZTpNLGxvbmdNb250aHNQYXJzZTpNLHNob3J0TW9udGhzUGFyc2U6TSx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4u'@;
put 'X3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoi'@;
put 'RCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIg'@;
put 'XHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIl'@;
put 'ZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsdzoidW5lIHNlbWFpbmUiLHd3OiIlZCBzZW1haW5lcyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQ'@;
put 'YXJzZTovXGR7MSwyfShlcnwpLyxvcmRpbmFsOmZ1bmN0aW9uKFIseil7c3dpdGNoKHope2Nhc2UiRCI6cmV0dXJuIFIrKDE9PT1SPyJlciI6IiIpO2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBSKygxPT09Uj8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNl'@;
put 'IlciOnJldHVybiBSKygxPT09Uj8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2Njk4NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2Vw'@;
put 'Ll9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTthZS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9udGhzOiJqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVu'@;
put 'eV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKE0sTyl7cmV0dXJuIE0/Ly1NTU0tLy50ZXN0KE8pP21bTS5tb250aCgpXTp4W00ubW9udGgoKV06eH0sbW9udGhzUGFyc2VFeGFjdDohMCx3'@;
put 'ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIu'@;
put 'c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2Fs'@;
put 'ZW5kYXI6e3NhbWVEYXk6Iltoam9lZCBvbV0gTFQiLG5leHREYXk6Ilttb2FybiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltqdXN0ZXIgb21dIExUIixsYXN0V2VlazoiW1x4ZjRmclx4ZmJuZV0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZl'@;
put 'VGltZTp7ZnV0dXJlOiJvZXIgJXMiLHBhc3Q6IiVzIGx5biIsczoiaW4gcGVhciBzZWtvbmRlbiIsc3M6IiVkIHNla29uZGVuIixtOiJpZW4gbWluXHhmYXQiLG1tOiIlZCBtaW51dGVuIixoOiJpZW4gb2VyZSIsaGg6IiVkIG9lcmVuIixkOiJpZW4gZGVpIixkZDoiJWQgZGFnZW4iLE06Imll'@;
put 'biBtb2FubmUiLE1NOiIlZCBtb2FubmVuIix5OiJpZW4gamllciIseXk6IiVkIGppZXJyZW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oTSl7cmV0dXJuIE0rKDE9PT1NfHw4PT09TXx8TT49MjA/InN0ZSI6ImRlIil9LHdlZWs6'@;
put 'e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDkzOTYxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZ2EiLHttb250aHM6WyJFYW5ceGUxaXIiLCJGZWFiaHJhIiwiTVx4ZTFydGEiLCJBaWJyZVx4ZTFuIiwiQmVhbHRhaW5l'@;
put 'IiwiTWVpdGhlYW1oIiwiSVx4ZmFpbCIsIkxceGZhbmFzYSIsIk1lXHhlMW4gRlx4ZjNtaGFpciIsIkRlaXJlYWRoIEZceGYzbWhhaXIiLCJTYW1oYWluIiwiTm9sbGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFuIiwiRmVhYmgiLCJNXHhlMXJ0IiwiQWliIiwiQmVhbCIsIk1laXRoIiwiSVx4ZmFp'@;
put 'bCIsIkxceGZhbiIsIk0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRFx4ZTkgRG9taG5haWdoIiwiRFx4ZTkgTHVhaW4iLCJEXHhlOSBNXHhlMWlydCIsIkRceGU5IENceGU5YWRhb2luIiwiRFx4ZTlhcmRhb2luIiwiRFx4ZTkgaEFv'@;
put 'aW5lIiwiRFx4ZTkgU2F0aGFpcm4iXSx3ZWVrZGF5c1Nob3J0OlsiRG9taCIsIkx1YW4iLCJNXHhlMWlydCIsIkNceGU5YWQiLCJEXHhlOWFyIiwiQW9pbmUiLCJTYXRoIl0sd2Vla2RheXNNaW46WyJEbyIsIkx1IiwiTVx4ZTEiLCJDXHhlOSIsIkRceGU5IiwiQSIsIlNhIl0sbG9uZ0RhdGVG'@;
put 'b3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSW5uaXUgYWddIExUIixuZXh0RGF5OiJb'@;
put 'QW1ceGUxcmFjaCBhZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm5ceGU5IGFnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSAlcyIscGFzdDoiJXMgXHhmMyBzaGlu'@;
put 'IixzOiJjXHhmYXBsYSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToiblx4ZjNpbVx4ZTlhZCIsbW06IiVkIG5ceGYzaW1ceGU5YWQiLGg6InVhaXIgYW4gY2hsb2lnIixoaDoiJWQgdWFpciBhbiBjaGxvaWciLGQ6ImxceGUxIixkZDoiJWQgbFx4ZTEiLE06Im1ceGVkIixNTToiJWQgbVx4'@;
put 'ZWRvbm5hIix5OiJibGlhaW4iLHl5OiIlZCBibGlhaW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKHope3JldHVybiB6KygxPT09ej8iZCI6eiUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3'@;
put 'NikpfSw3ODg0OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImdkIix7bW9udGhzOlsiQW0gRmFvaWxsZWFjaCIsIkFuIEdlYXJyYW4iLCJBbSBNXHhlMHJ0IiwiQW4gR2libGVhbiIsIkFuIENceGU4aXRlYW4iLCJBbiB0LVx4'@;
put 'ZDJnbWhpb3MiLCJBbiB0LUl1Y2hhciIsIkFuIExceGY5bmFzdGFsIiwiQW4gdC1TdWx0YWluIiwiQW4gRFx4ZTBtaGFpciIsIkFuIHQtU2FtaGFpbiIsIkFuIERceGY5YmhsYWNoZCJdLG1vbnRoc1Nob3J0OlsiRmFvaSIsIkdlYXIiLCJNXHhlMHJ0IiwiR2libCIsIkNceGU4aXQiLCJceGQy'@;
put 'Z21oIiwiSXVjaCIsIkxceGY5biIsIlN1bHQiLCJEXHhlMG1oIiwiU2FtaCIsIkRceGY5YmgiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRGlkXHhmMm1obmFpY2giLCJEaWx1YWluIiwiRGltXHhlMGlydCIsIkRpY2lhZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlz'@;
put 'YXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwiRGlhIiwiRGloIiwiRGlzIl0sd2Vla2RheXNNaW46WyJEXHhmMiIsIkx1IiwiTVx4ZTAiLCJDaSIsIkFyIiwiSGEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi'@;
put 'LEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0FuLWRpdWdoIGFpZ10gTFQiLG5leHREYXk6IltBLW1ceGUwaXJlYWNoIGFpZ10gTFQiLG5leHRX'@;
put 'ZWVrOiJkZGRkIFthaWddIExUIixsYXN0RGF5OiJbQW4tZFx4ZTggYWlnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhbm4gYW4gJXMiLHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBk'@;
put 'aW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFuIixoOiJ1YWlyIixoaDoiJWQgdWFpcmVhbiIsZDoibGF0aGEiLGRkOiIlZCBsYXRoYSIsTToibVx4ZWNvcyIsTU06IiVkIG1ceGVjb3NhbiIseToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRh'@;
put 'eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oeil7cmV0dXJuIHorKDE9PT16PyJkIjp6JTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDM0MjczOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlv'@;
put 'bihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZ2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dVx4ZjFvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4'@;
put 'YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHVceGYxLl94dWwuX2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkb21pbmdvX2x1bnNfbWFydGVzX21ceGU5cmNvcmVzX3hvdmVzX3ZlbnJlc19zXHhlMWJhZG8iLnNwbGl0'@;
put 'KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbVx4ZTlyLl94b3YuX3Zlbi5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbVx4ZTlfeG9fdmVfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntM'@;
put 'VDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIltob3hlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxXHhlMSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuImRkZGQgWyIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxIjoiYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW29dIGRkZGQgW3Bhc2Fk'@;
put 'byAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuIDA9PT1tLmluZGV4T2YoInVuIik/Im4iK206ImVuICIrbX0scGFzdDoiaGFpICVzIixzOiJ1bnMgc2VndW5kb3MiLHNz'@;
put 'OiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5oYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9y'@;
put 'ZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNDA2MjM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e3M6WyJcdTA5MjVc'@;
put 'dTA5NGJcdTA5MjFcdTA5MmZcdTA5M2UgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIiwiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTQ3IFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLHNzOltsZSsiIFx1MDkzOFx1MDk0NVx1MDkx'@;
put 'NVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxtOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2Zc'@;
put 'dTA5MjhcdTA5NDJcdTA5MWYiXSxtbTpbbGUrIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyIl0saDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5M2Vc'@;
put 'dTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwIl0saGg6W2xlKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMiJdLGQ6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUw'@;
put 'OTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDk0MFx1MDkzOCJdLGRkOltsZSsiIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MjZcdTA5NDBcdTA5MzgiXSxNOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDky'@;
put 'Zlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGIiXSxNTTpbbGUrIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjhcdTA5NDAiLGxlKyIgXHUw'@;
put 'OTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTQ3Il0seTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4Il0seXk6W2xlKyIgXHUwOTM1XHUwOTMwXHUwOTRk'@;
put 'XHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMiJdfTtyZXR1cm4gUj96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJnb20tZGV2YSIse21vbnRoczp7c3RhbmRhbG9uZToiXHUwOTFjXHUwOTNlXHUw'@;
put 'OTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyX1x1'@;
put 'MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRi'@;
put 'XHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5'@;
put 'M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYVx1MDkzZVx1MDkx'@;
put 'YVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTQ3XHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0Mlx1MDkyOFx1MDkzZVx1MDkx'@;
put 'YVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0'@;
put 'N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAy'@;
put 'XHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1NTShccykrRFtvRF0/L30sbW9udGhzU2hv'@;
put 'cnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwLl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1'@;
put 'MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5Mzhc'@;
put 'dTA5NDdcdTA5MDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkwNlx1MDkyZlx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0'@;
put 'MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5M2ZcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0N1x1MDkyOFx1MDkzNVx1MDkzZVx1MDkzMCIuc3Bs'@;
put 'aXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MDZcdTA5MmZcdTA5MjQuX1x1MDkzOFx1MDk0Ylx1MDkyZS5fXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzLl9cdTA5MmNcdTA5NDFcdTA5MjcuX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNC5fXHUwOTM4XHUwOTQx'@;
put 'XHUwOTE1XHUwOTRkXHUwOTMwLl9cdTA5MzZcdTA5NDdcdTA5MjguIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MDZfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3X1x1MDkzOFx1MDk0MV9cdTA5MzZcdTA5NDciLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMVFM6IkEgaDptbTpzcyBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTDoiREQtTU0tWVlZ'@;
put 'WSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixsbGxsOiJk'@;
put 'ZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTJmXHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkyYlx1MDkzZVx1MDkzMlx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMl0gTFQi'@;
put 'LG5leHRXZWVrOiJbXHUwOTJiXHUwOTQxXHUwOTIxXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmJcdTA5M2VcdTA5MWZcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRp'@;
put 'dmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBcdTA5MDZcdTA5MjZcdTA5NDBcdTA5MDIiLHM6eCxzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6eCxkZDp4LE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MDkzNVx1MDk0N1x1MDkzMCkvLG9y'@;
put 'ZGluYWw6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIkQiPT09TT9sZSsiXHUwOTM1XHUwOTQ3XHUwOTMwIjpsZX0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MHxcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDJ8XHUwOTI2'@;
put 'XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyfFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0Ny8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGxlLE0pe3JldHVybiAxMj09PWxlJiYobGU9MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI9PT1NP2xlPDQ/bGU6bGUrMTI6'@;
put 'Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI9PT1NP2xlOiJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiPT09TT9sZT4xMj9sZTpsZSsxMjoiXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3Ij09PU0/bGUrMTI6dm9pZCAwfSxtZXJp'@;
put 'ZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZTw0PyJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAiOmxlPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiOmxlPDE2PyJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiOmxlPDIwPyJc'@;
put 'dTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAifX0pfShGKDE2Njc2KSl9LDYyNjk2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXtzOlsidGhvZGRlYSBz'@;
put 'ZWtvbmRhbW5pIiwidGhvZGRlIHNla29uZCJdLHNzOltsZSsiIHNla29uZGFtbmkiLGxlKyIgc2Vrb25kIl0sbTpbImVrYSBtaW50YW4iLCJlayBtaW51dCJdLG1tOltsZSsiIG1pbnRhbW5pIixsZSsiIG1pbnRhbSJdLGg6WyJla2Egdm9yYW4iLCJlayB2b3IiXSxoaDpbbGUrIiB2b3JhbW5p'@;
put 'IixsZSsiIHZvcmFtIl0sZDpbImVrYSBkaXNhbiIsImVrIGRpcyJdLGRkOltsZSsiIGRpc2FtbmkiLGxlKyIgZGlzIl0sTTpbImVrYSBtaG9pbmVhbiIsImVrIG1ob2lubyJdLE1NOltsZSsiIG1ob2luZWFtbmkiLGxlKyIgbWhvaW5lIl0seTpbImVrYSB2b3JzYW4iLCJlayB2b3JvcyJdLHl5'@;
put 'OltsZSsiIHZvcnNhbW5pIixsZSsiIHZvcnNhbSJdfTtyZXR1cm4gUj96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJnb20tbGF0biIse21vbnRoczp7c3RhbmRhbG9uZToiSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05v'@;
put 'dmVtYnJfRGV6ZW1iciIuc3BsaXQoIl8iKSxmb3JtYXQ6IkphbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNo'@;
put 'ZWEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiQWl0YXJfU29t'@;
put 'YXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaV9TbV9Nb19CdV9Ccl9TdV9TbiIuc3BsaXQoIl8iKSx3'@;
put 'ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW3ZhenRhXSIsTFRTOiJBIGg6bW06c3MgW3ZhenRhXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdIixMTExMOiJkZGRkLCBNTU1NIERv'@;
put 'LCBZWVlZLCBBIGg6bW0gW3ZhenRhXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQWl6XSBMVCIsbmV4dERheToiW0ZhbGVhbV0gTFQiLG5leHRXZWVrOiJbRnVkZGxvXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbS2FsXSBMVCIs'@;
put 'bGFzdFdlZWs6IltGYXR0bG9dIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBhZGltIixzOngsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOngsZGQ6eCxNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov'@;
put 'XGR7MSwyfShlcikvLG9yZGluYWw6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIkQiPT09TT9sZSsiZXIiOmxlfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovcmF0aXxzb2thbGxpbXxkb25wYXJhbXxzYW5qZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGxlLE0pe3JldHVybiAxMj09'@;
put 'PWxlJiYobGU9MCksInJhdGkiPT09TT9sZTw0P2xlOmxlKzEyOiJzb2thbGxpbSI9PT1NP2xlOiJkb25wYXJhbSI9PT1NP2xlPjEyP2xlOmxlKzEyOiJzYW5qZSI9PT1NP2xlKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8ND8icmF0aSI6bGU8MTI/InNv'@;
put 'a2FsbGltIjpsZTwxNj8iZG9ucGFyYW0iOmxlPDIwPyJzYW5qZSI6InJhdGkifX0pfShGKDE2Njc2KSl9LDY2OTI4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTBhZTciLDI6Ilx1MGFlOCIsMzoiXHUwYWU5Iiw0OiJcdTBhZWEiLDU6'@;
put 'Ilx1MGFlYiIsNjoiXHUwYWVjIiw3OiJcdTBhZWQiLDg6Ilx1MGFlZSIsOToiXHUwYWVmIiwwOiJcdTBhZTYifSxtPXsiXHUwYWU3IjoiMSIsIlx1MGFlOCI6IjIiLCJcdTBhZTkiOiIzIiwiXHUwYWVhIjoiNCIsIlx1MGFlYiI6IjUiLCJcdTBhZWMiOiI2IiwiXHUwYWVkIjoiNyIsIlx1MGFl'@;
put 'ZSI6IjgiLCJcdTBhZWYiOiI5IiwiXHUwYWU2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiZ3UiLHttb250aHM6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzFcdTBhODZcdTBh'@;
put 'YjBcdTBhYzBfXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZlx1MGFiMl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZVx1MGE4OF9cdTBhOTFcdTBhOTdcdTBhYjhcdTBhY2Rc'@;
put 'dTBhOWZfXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYThcdTBhYjVcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWExXHUwYWJmXHUwYWI4'@;
put 'XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzEuX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMS5fXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1'@;
put 'MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZi5fXHUwYWFlXHUwYWM3X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmUuX1x1MGE5MVx1MGE5Ny5fXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3Ll9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2Qu'@;
put 'X1x1MGFhOFx1MGFiNVx1MGFjNy5fXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBhYjBcdTBhYjVcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI4XHUwYWNiXHUwYWFlXHUwYWI1XHUwYWJlXHUwYWIwX1x1'@;
put 'MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM1x1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMFx1MGFiNVx1'@;
put 'MGFiZVx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYWIwXHUwYWI1XHUwYWJmX1x1MGFiOFx1MGFjYlx1MGFhZV9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkX1x1'@;
put 'MGE5N1x1MGFjMVx1MGFiMFx1MGFjMV9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhYjBfXHUwYWI4XHUwYWNiX1x1MGFhZVx1MGE4Ml9cdTBhYWNcdTBhYzFfXHUwYTk3XHUwYWMxX1x1MGFiNlx1'@;
put 'MGFjMV9cdTBhYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMVFM6IkEgaDptbTpzcyBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLEw6IkREL01NL1lZWVkiLExMOiJEIE1N'@;
put 'TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1'@;
put 'MGE4Nlx1MGE5Y10gTFQiLG5leHREYXk6IltcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhOTdcdTBhODdcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixsYXN0V2VlazoiW1x1MGFhYVx1MGFiZVx1MGE5Ylx1MGFiMlx1'@;
put 'MGFiZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGFhZVx1MGFiZSIscGFzdDoiJXMgXHUwYWFhXHUwYWI5XHUwYWM3XHUwYWIyXHUwYWJlIixzOiJcdTBhODVcdTBhYWVcdTBhYzFcdTBhOTUgXHUwYWFhXHUwYWIzXHUwYWNiIixzczoiJWQg'@;
put 'XHUwYWI4XHUwYWM3XHUwYTk1XHUwYTgyXHUwYWExIixtOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixtbToiJWQgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixoOiJcdTBhOGZcdTBhOTUgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixoaDoi'@;
put 'JWQgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixkOiJcdTBhOGZcdTBhOTUgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixkZDoiJWQgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixNOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIixNTToiJWQgXHUwYWFl'@;
put 'XHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIix5OiJcdTBhOGZcdTBhOTUgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3Iix5eToiJWQgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGFlN1x1MGFlOFx1MGFlOVx1MGFl'@;
put 'YVx1MGFlYlx1MGFlY1x1MGFlZFx1MGFlZVx1MGFlZlx1MGFlNl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwYWIwXHUw'@;
put 'YWJlXHUwYWE0fFx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMHxcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjB8XHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwYWIwXHUwYWJlXHUwYWE0Ij09PU8/TTw0P006'@;
put 'TSsxMjoiXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIj09PU8/TToiXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIj09PU8/TT49MTA/TTpNKzEyOiJcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiPT09Tz9NKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1'@;
put 'MGFiMFx1MGFiZVx1MGFhNCI6TTwxMD8iXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIjpNPDE3PyJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiOk08MjA/Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI6Ilx1MGFiMFx1MGFiZVx1MGFhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2'@;
put 'KSl9LDI0ODA0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWRlXHUwNWU4'@;
put 'XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVkOVx1MDVkY19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZDVcdTA1ZTFcdTA1ZDhfXHUwNWUxXHUwNWU0XHUwNWQ4XHUw'@;
put 'NWRlXHUwNWQxXHUwNWU4X1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVkOFx1MDVkNVx1MDVkMVx1MDVlOF9cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWQxXHUwNWU4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA1ZDlcdTA1ZTBc'@;
put 'dTA1ZDVcdTA1ZjNfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUw'@;
put 'NWQyXHUwNWYzX1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVmM19cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZjNfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWYzX1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNWU4XHUwNWQwXHUwNWU5XHUwNWQ1XHUwNWRmX1x1'@;
put 'MDVlOVx1MDVlMFx1MDVkOV9cdTA1ZTlcdTA1ZGNcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU4XHUwNWQxXHUwNWQ5XHUwNWUyXHUwNWQ5X1x1MDVkN1x1MDVkZVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQxXHUwNWVhIi5zcGxpdCgiXyIp'@;
put 'LHdlZWtkYXlzU2hvcnQ6Ilx1MDVkMFx1MDVmM19cdTA1ZDFcdTA1ZjNfXHUwNWQyXHUwNWYzX1x1MDVkM1x1MDVmM19cdTA1ZDRcdTA1ZjNfXHUwNWQ1XHUwNWYzX1x1MDVlOVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNWQwX1x1MDVkMV9cdTA1ZDJfXHUwNWQzX1x1MDVk'@;
put 'NF9cdTA1ZDVfXHUwNWU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIixMTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW1x1MDVkMV1N'@;
put 'TU1NIFlZWVkgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDVkNFx1MDVkOVx1MDVkNVx1MDVkZCBcdTA1ZDFcdTA1YmVdTFQiLG5leHRE'@;
put 'YXk6IltcdTA1ZGVcdTA1ZDdcdTA1ZTggXHUwNWQxXHUwNWJlXUxUIixuZXh0V2VlazoiZGRkZCBbXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsbGFzdERheToiW1x1MDVkMFx1MDVlYVx1MDVkZVx1MDVkNVx1MDVkYyBcdTA1ZDFcdTA1YmVdTFQiLGxhc3RXZWVrOiJbXHUwNWQxXHUw'@;
put 'NWQ5XHUwNWQ1XHUwNWRkXSBkZGRkIFtcdTA1ZDRcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDVcdTA1ZGYgXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNWQxXHUwNWUyXHUwNWQ1XHUwNWQzICVzIixwYXN0OiJcdTA1'@;
put 'ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgJXMiLHM6Ilx1MDVkZVx1MDVlMVx1MDVlNFx1MDVlOCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLHNzOiIlZCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLG06Ilx1MDVkM1x1MDVlN1x1MDVkNCIsbW06IiVkIFx1MDVkM1x1MDVl'@;
put 'N1x1MDVkNVx1MDVlYSIsaDoiXHUwNWU5XHUwNWUyXHUwNWQ0IixoaDpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/Ilx1MDVlOVx1MDVlMlx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6bSsiIFx1MDVlOVx1MDVlMlx1MDVkNVx1MDVlYSJ9LGQ6Ilx1MDVkOVx1MDVkNVx1MDVkZCIsZGQ6ZnVu'@;
put 'Y3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZDlcdTA1ZDVcdTA1ZGVcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm0rIiBcdTA1ZDlcdTA1ZGVcdTA1ZDlcdTA1ZGQifSxNOiJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTkiLE1NOmZ1bmN0aW9uKG0pe3JldHVybiAyPT09bT8iXHUwNWQ3XHUwNWQ1XHUw'@;
put 'NWQzXHUwNWU5XHUwNWQ5XHUwNWQ5XHUwNWRkIjptKyIgXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWRkIn0seToiXHUwNWU5XHUwNWUwXHUwNWQ0Iix5eTpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/Ilx1MDVlOVx1MDVlMFx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6bSUx'@;
put 'MD09MCYmMTAhPT1tP20rIiBcdTA1ZTlcdTA1ZTBcdTA1ZDQiOm0rIiBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZGQifX0sbWVyaWRpZW1QYXJzZTovXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVk'@;
put 'OSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUw'@;
put 'NWU4fFx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEvaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9eKFx1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1'@;
put 'MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEpJC8udGVzdChtKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTw1PyJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjptPDEwPyJcdTA1ZDFcdTA1'@;
put 'ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOm08MTI/TT8nXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNic6Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm08MTg/TT8nXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVl'@;
put 'Nic6Ilx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOiJcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEifX0pfShGKDE2Njc2KSl9LDIzMDE1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3Qi'@;
put 'O3ZhciB4PXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxtPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUw'@;
put 'OTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9LGxlPVsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwfFx1MDkyYlx1MDkzMC9pLC9eXHUwOTJlXHUwOTNlXHUwOTMw'@;
put 'XHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyfFx1MDkzOFx1'@;
put 'MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzV8XHUwOTI4XHUwOTM1XHUwOTAyL2ksL15cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJ8XHUwOTI2XHUwOTNmXHUwOTM4L2ldO2FlLmRlZmluZUxvY2FsZSgiaGkiLHttb250aHM6e2Zv'@;
put 'cm1hdDoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5'@;
put 'NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1'@;
put 'MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVc'@;
put 'dTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5'@;
put 'M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJc'@;
put 'dTA5MWNcdTA5MjguX1x1MDkyYlx1MDkzY1x1MDkzMC5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkwNVx1MDkxNy5fXHUw'@;
put 'OTM4XHUwOTNmXHUwOTI0Ll9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIuX1x1MDkyOFx1MDkzNS5fXHUwOTI2XHUwOTNmXHUwOTM4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkz'@;
put 'NVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5'@;
put 'MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyX1x1MDkyY1x1MDk0MVx1MDky'@;
put 'N19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5'@;
put 'MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDpt'@;
put 'bSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0sbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzAv'@;
put 'aSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkz'@;
put 'Zlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzUvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOC9pXSxtb250aHNSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkz'@;
put 'MFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkz'@;
put 'MFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1'@;
put 'MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4'@;
put 'XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZc'@;
put 'dTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNj'@;
put 'XHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMy'@;
put 'XHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUw'@;
put 'OTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxc'@;
put 'dTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMw'@;
put 'XHUwOTQwP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMj98XHUwOTJlXHUwOTA4P3xcdTA5'@;
put 'MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOD98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0P3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkz'@;
put 'OFx1MDkzZlx1MDkyND9cLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwP3xc'@;
put 'dTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwPykvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMw'@;
put 'XHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkx'@;
put 'Zlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkxNVx1MDkzMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzMl0gTFQi'@;
put 'LGxhc3RXZWVrOiJbXHUwOTJhXHUwOTNmXHUwOTFiXHUwOTMyXHUwOTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOTJlXHUwOTQ3XHUwOTAyIixwYXN0OiIlcyBcdTA5MmFcdTA5MzlcdTA5MzJcdTA5NDciLHM6Ilx1MDkxNVx1MDk0MVx1'@;
put 'MDkxYiBcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUwOTM3XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxIixtOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixoOiJcdTA5'@;
put 'MGZcdTA5MTUgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTNlIixoaDoiJWQgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTQ3IixkOiJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTI4IixkZDoiJWQgXHUwOTI2XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUwOTQw'@;
put 'XHUwOTI4XHUwOTQ3IixNTToiJWQgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3Iix5OiJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3Iix5eToiJWQgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3In0scHJlcGFyc2U6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFj'@;
put 'ZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbih6KXtyZXR1cm4gbVt6XX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oeil7cmV0dXJuIHhbel19'@;
put 'KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0fFx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOXxcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzB8XHUwOTM2XHUwOTNlXHUwOTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oUix6KXtyZXR1cm4gMTI9PT1SJiYoUj0wKSwiXHUw'@;
put 'OTMwXHUwOTNlXHUwOTI0Ij09PXo/Ujw0P1I6UisxMjoiXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5Ij09PXo/UjoiXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIj09PXo/Uj49MTA/UjpSKzEyOiJcdTA5MzZcdTA5M2VcdTA5MmUiPT09ej9SKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVu'@;
put 'Y3Rpb24oUix6LEspe3JldHVybiBSPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNCI6UjwxMD8iXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5IjpSPDE3PyJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiOlI8MjA/Ilx1MDkzNlx1MDkzZVx1MDkyZSI6Ilx1MDkzMFx1MDkzZVx1MDkyNCJ9LHdl'@;
put 'ZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDE3MTM0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPKXt2YXIgUj1sZSsiICI7c3dpdGNoKE8pe2Nhc2Uic3MiOnJldHVybiBSKygxPT09bGU/InNla3VuZGEiOjI9PT1s'@;
put 'ZXx8Mz09PWxlfHw0PT09bGU/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gTT8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gUisoMT09PWxlPyJtaW51dGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nh'@;
put 'c2UiaCI6cmV0dXJuIE0/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gUisoMT09PWxlPyJzYXQiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIFIrKDE9PT1sZT8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVy'@;
put 'biBSKygxPT09bGU/Im1qZXNlYyI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gUisoMT09PWxlPyJnb2RpbmEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/ImdvZGluZSI6ImdvZGluYSIpfX1hZS5kZWZpbmVMb2NhbGUoImhyIix7'@;
put 'bW9udGhzOntmb3JtYXQ6InNpamVcdTAxMGRuamFfdmVsamFcdTAxMGRlX29cdTAxN2V1amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3JwbmphX2tvbG92b3phX3J1am5hX2xpc3RvcGFkYV9zdHVkZW5vZ2FfcHJvc2luY2EiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2lqZVx1MDEwZGFu'@;
put 'al92ZWxqYVx1MDEwZGFfb1x1MDE3ZXVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoic2lqLl92ZWxqLl9vXHUwMTdldS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9r'@;
put 'b2wuX3J1ai5fbGlzLl9zdHUuX3Byby4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24u'@;
put 'X3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0u'@;
put 'WVlZWSIsTEw6IkRvIE1NTU0gWVlZWSIsTExMOiJEbyBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRo'@;
put 'aXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3Vd'@;
put 'IExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltwcm9cdTAxNjFsdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbc3JpamVkdV0gW3VdIExU'@;
put 'IjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWpl'@;
put 'ICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOiJkYW4iLGRkOngsTToibWplc2VjIixNTTp4LHk6ImdvZGludSIseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2'@;
put 'Njc2KSl9LDUwNjcwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJ2YXNceGUxcm5hcCBoXHhlOXRmXHUwMTUxbiBrZWRkZW4gc3plcmRceGUxbiBjc1x4ZmN0XHhmNnJ0XHhmNmtceGY2biBwXHhlOW50ZWtlbiBzem9tYmF0b24iLnNwbGl0KCIg'@;
put 'Iik7ZnVuY3Rpb24gbShPLFIseixLKXt2YXIgST1PO3N3aXRjaCh6KXtjYXNlInMiOnJldHVybiBLfHxSPyJuXHhlOWhceGUxbnkgbVx4ZTFzb2RwZXJjIjoiblx4ZTloXHhlMW55IG1ceGUxc29kcGVyY2UiO2Nhc2Uic3MiOnJldHVybiBJKyhLfHxSKT8iIG1ceGUxc29kcGVyYyI6IiBtXHhl'@;
put 'MXNvZHBlcmNlIjtjYXNlIm0iOnJldHVybiJlZ3kiKyhLfHxSPyIgcGVyYyI6IiBwZXJjZSIpO2Nhc2UibW0iOnJldHVybiBJKyhLfHxSPyIgcGVyYyI6IiBwZXJjZSIpO2Nhc2UiaCI6cmV0dXJuImVneSIrKEt8fFI/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImhoIjpyZXR1cm4g'@;
put 'SSsoS3x8Uj8iIFx4ZjNyYSI6IiBceGYzclx4ZTFqYSIpO2Nhc2UiZCI6cmV0dXJuImVneSIrKEt8fFI/IiBuYXAiOiIgbmFwamEiKTtjYXNlImRkIjpyZXR1cm4gSSsoS3x8Uj8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiTSI6cmV0dXJuImVneSIrKEt8fFI/IiBoXHhmM25hcCI6IiBoXHhmM25h'@;
put 'cGphIik7Y2FzZSJNTSI6cmV0dXJuIEkrKEt8fFI/IiBoXHhmM25hcCI6IiBoXHhmM25hcGphIik7Y2FzZSJ5IjpyZXR1cm4iZWd5IisoS3x8Uj8iIFx4ZTl2IjoiIFx4ZTl2ZSIpO2Nhc2UieXkiOnJldHVybiBJKyhLfHxSPyIgXHhlOXYiOiIgXHhlOXZlIil9cmV0dXJuIiJ9ZnVuY3Rpb24g'@;
put 'bGUoTyl7cmV0dXJuKE8/IiI6IlttXHhmYWx0XSAiKSsiWyIreFt0aGlzLmRheSgpXSsiXSBMVFsta29yXSJ9YWUuZGVmaW5lTG9jYWxlKCJodSIse21vbnRoczoiamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbVx4ZTFyY2l1c19ceGUxcHJpbGlzX21ceGUxanVzX2pceGZhbml1c19qXHhmYWxpdXNf'@;
put 'YXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21ceGUxcmMuX1x4ZTFwci5fbVx4ZTFqLl9qXHhmYW4uX2pceGZhbC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiks'@;
put 'bW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoidmFzXHhlMXJuYXBfaFx4ZTl0Zlx1MDE1MV9rZWRkX3N6ZXJkYV9jc1x4ZmN0XHhmNnJ0XHhmNmtfcFx4ZTludGVrX3N6b21iYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoidmFzX2hceGU5dF9rZWRkX3N6ZV9jc1x4ZmN0X3BceGU5'@;
put 'bl9zem8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InZfaF9rX3N6ZV9jc19wX3N6byIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZLiBNTU1NIEQuIixMTEw6IllZWVkuIE1NTU0gRC4gSDptbSIsTExM'@;
put 'TDoiWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tIn0sbWVyaWRpZW1QYXJzZTovZGV8ZHUvaSxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybiJ1Ij09PU8uY2hhckF0KDEpLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gTzwxMj8hMD09PXo/ImRlIjoiREUiOiEw'@;
put 'PT09ej8iZHUiOiJEVSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJbaG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gbGUuY2FsbCh0aGlzLCEwKX0sbGFzdERheToiW3RlZ25hcF0gTFRbLWtvcl0iLGxhc3RXZWVrOmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGxlLmNhbGwodGhpcywhMSl9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG1ceGZhbHZhIixwYXN0OiIlcyIsczptLHNzOm0sbSxtbTptLGg6bSxoaDptLGQ6bSxkZDptLE06bSxNTTptLHk6bSx5eTptfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNl'@;
put 'Oi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNDUyMzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImh5LWFtIix7bW9udGhzOntmb3JtYXQ6Ilx1MDU3MFx1MDU3OFx1'@;
put 'MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MFx1MDU2Yl9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmXHUwNTZiX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y1x1MDU2Yl9cdTA1NzRcdTA1NjFc'@;
put 'dTA1NzVcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RcdTA1NmJfXHUwNTdk'@;
put 'XHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBc'@;
put 'dTA1NmJfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2Vc'@;
put 'dTA1NjFcdTA1ODBfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y19cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2'@;
put 'Ylx1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1'@;
put 'NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNTcwXHUwNTc2XHUwNTdlX1x1MDU4M1x1MDU3Zlx1MDU4MF9c'@;
put 'dTA1NzRcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUwNTgwX1x1MDU3NFx1MDU3NVx1MDU3ZF9cdTA1NzBcdTA1NzZcdTA1N2RfXHUwNTcwXHUwNTZjXHUwNTdkX1x1MDU4NVx1MDU2M1x1MDU3ZF9cdTA1N2RcdTA1N2FcdTA1N2ZfXHUwNTcwXHUwNTZmXHUwNTdmX1x1MDU3Nlx1MDU3NFx1'@;
put 'MDU2Ml9cdTA1NjRcdTA1NmZcdTA1N2YiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDU2Zlx1MDU2Ylx1MDU4MFx1MDU2MVx1MDU2Zlx1MDU2Yl9cdTA1NjVcdTA1ODBcdTA1NmZcdTA1NzhcdTA1ODJcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTY1XHUw'@;
put 'NTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OVx1MDU3OFx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzBcdTA1NmJcdTA1NzZcdTA1NjNcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTc4XHUwNTgyXHUw'@;
put 'NTgwXHUwNTYyXHUwNTYxXHUwNTY5X1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2MVx1MDU2OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUw'@;
put 'NTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDU2Zlx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1'@;
put 'NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyX1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiIsTExMOiJEIE1NTU0gWVlZWSBc'@;
put 'dTA1NjkuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDU2MVx1MDU3NVx1MDU3ZFx1MDU4NVx1MDU4MF0gTFQiLG5leHREYXk6IltcdTA1N2VcdTA1NjFcdTA1NzJcdTA1NjhdIExUIixsYXN0RGF5OiJbXHUw'@;
put 'NTY1XHUwNTgwXHUwNTY1XHUwNTZmXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNTYxXHUwNTc2XHUwNTgxXHUwNTYxXHUw'@;
put 'NTZlXSBkZGRkIFtcdTA1ODVcdTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDU3MFx1MDU2NVx1MDU3Zlx1MDU3OCIscGFzdDoiJXMgXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdiIixzOiJc'@;
put 'dTA1NzRcdTA1NmIgXHUwNTg0XHUwNTYxXHUwNTc2XHUwNTZiIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsc3M6IiVkIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsbToiXHUwNTgwXHUwNTc4XHUwNTdh'@;
put 'XHUwNTY1IixtbToiJWQgXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixoOiJcdTA1NmFcdTA1NjFcdTA1NzQiLGhoOiIlZCBcdTA1NmFcdTA1NjFcdTA1NzQiLGQ6Ilx1MDU4NVx1MDU4MCIsZGQ6IiVkIFx1MDU4NVx1MDU4MCIsTToiXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIixNTToiJWQg'@;
put 'XHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIix5OiJcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIiLHl5OiIlZCBcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIifSxtZXJpZGllbVBhcnNlOi9cdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjF8XHUwNTYxXHUwNTdjXHUwNTYx'@;
put 'XHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxfFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYvLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuL14oXHUwNTgxXHUwNTY1XHUw'@;
put 'NTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NikkLy50ZXN0KG0pfSxtZXJpZGllbTpmdW5jdGlvbihtKXtyZXR1cm4gbTw0PyJcdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjEi'@;
put 'Om08MTI/Ilx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MSI6bTwxNz8iXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxIjoiXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2In0sZGF5T2ZN'@;
put 'b250aE9yZGluYWxQYXJzZTovXGR7MSwyfXxcZHsxLDJ9LShcdTA1NmJcdTA1NzZ8XHUwNTgwXHUwNTY0KS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2Nhc2UiREREIjpjYXNlInciOmNhc2UiVyI6Y2FzZSJERERvIjpyZXR1cm4gMT09PW0/bSsiLVx1MDU2Ylx1MDU3NiI6'@;
put 'bSsiLVx1MDU4MFx1MDU2NCI7ZGVmYXVsdDpyZXR1cm4gbX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDk5MjMzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVh'@;
put 'cmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5'@;
put 'czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0Rh'@;
put 'dGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5n'@;
put 'fHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwicGFnaSI9PT1sZT9tOiJzaWFuZyI9PT1sZT9tPj0xMT9tOm0rMTI6InNvcmUiPT09bGV8fCJtYWxhbSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxN'@;
put 'KXtyZXR1cm4gbTwxMT8icGFnaSI6bTwxNT8ic2lhbmciOm08MTk/InNvcmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbQmVzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VtYXJp'@;
put 'biBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGFsdSIsczoiYmViZXJhcGEgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2VtZW5pdCIsbW06IiVkIG1l'@;
put 'bml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSw5NDY5MzpmdW5jdGlvbihhdCxJZSxGKXshZnVu'@;
put 'Y3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KE0pe3JldHVybiBNJTEwMD09MTF8fE0lMTAhPTF9ZnVuY3Rpb24gbShNLE8sUix6KXt2YXIgSz1NKyIgIjtzd2l0Y2goUil7Y2FzZSJzIjpyZXR1cm4gT3x8ej8ibm9ra3JhciBzZWtceGZhbmR1ciI6Im5va2tydW0gc2VrXHhmYW5k'@;
put 'dW0iO2Nhc2Uic3MiOnJldHVybiB4KE0pP0srKE98fHo/InNla1x4ZmFuZHVyIjoic2VrXHhmYW5kdW0iKTpLKyJzZWtceGZhbmRhIjtjYXNlIm0iOnJldHVybiBPPyJtXHhlZG5ceGZhdGEiOiJtXHhlZG5ceGZhdHUiO2Nhc2UibW0iOnJldHVybiB4KE0pP0srKE98fHo/Im1ceGVkblx4ZmF0'@;
put 'dXIiOiJtXHhlZG5ceGZhdHVtIik6Tz9LKyJtXHhlZG5ceGZhdGEiOksrIm1ceGVkblx4ZmF0dSI7Y2FzZSJoaCI6cmV0dXJuIHgoTSk/SysoT3x8ej8ia2x1a2t1c3R1bmRpciI6ImtsdWtrdXN0dW5kdW0iKTpLKyJrbHVra3VzdHVuZCI7Y2FzZSJkIjpyZXR1cm4gTz8iZGFndXIiOno/ImRh'@;
put 'ZyI6ImRlZ2kiO2Nhc2UiZGQiOnJldHVybiB4KE0pP08/SysiZGFnYXIiOksrKHo/ImRhZ2EiOiJkXHhmNmd1bSIpOk8/SysiZGFndXIiOksrKHo/ImRhZyI6ImRlZ2kiKTtjYXNlIk0iOnJldHVybiBPPyJtXHhlMW51XHhmMHVyIjp6PyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSI7Y2Fz'@;
put 'ZSJNTSI6cmV0dXJuIHgoTSk/Tz9LKyJtXHhlMW51XHhmMGlyIjpLKyh6PyJtXHhlMW51XHhmMGkiOiJtXHhlMW51XHhmMHVtIik6Tz9LKyJtXHhlMW51XHhmMHVyIjpLKyh6PyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSIpO2Nhc2UieSI6cmV0dXJuIE98fHo/Ilx4ZTFyIjoiXHhlMXJp'@;
put 'IjtjYXNlInl5IjpyZXR1cm4geChNKT9LKyhPfHx6PyJceGUxciI6Ilx4ZTFydW0iKTpLKyhPfHx6PyJceGUxciI6Ilx4ZTFyaSIpfX1hZS5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW5ceGZhYXJfZmViclx4ZmFhcl9tYXJzX2Fwclx4ZWRsX21hXHhlZF9qXHhmYW5ceGVkX2pceGZh'@;
put 'bFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pceGZhbF9ceGUxZ1x4ZmFfc2VwX29rdF9uXHhmM3ZfZGVzIi5zcGxpdCgiXyIpLHdl'@;
put 'ZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVkYWd1cl9taVx4ZjB2aWt1ZGFndXJfZmltbXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX1x4ZmVyaV9taVx4ZjBfZmltX2ZceGY2'@;
put 'c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVyX01pX0ZpX0ZceGY2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBb'@;
put 'a2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhlZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhlZCBnXHhlNnIg'@;
put 'a2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRceGYwYW4iLHM6bSxzczptLG0sbW06bSxoOiJrbHVra3VzdHVuZCIsaGg6bSxkOm0s'@;
put 'ZGQ6bSxNOm0sTU06bSx5Om0seXk6bX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDc4MTE4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmlu'@;
put 'ZUxvY2FsZSgiaXQtY2giLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19n'@;
put 'aXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9n'@;
put 'aW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t'@;
put 'IixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPZ2dpIGFsbGVdIExUIixuZXh0RGF5OiJbRG9tYW5pIGFsbGVdIExUIixuZXh0V2VlazoiZGRkZCBbYWxsZV0gTFQiLGxhc3REYXk6IltJZXJpIGFsbGVdIExUIixsYXN0V2VlazpmdW5jdGlvbigp'@;
put 'e3JldHVybiAwPT09dGhpcy5kYXkoKT8iW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQiOiJbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuKC9eWzAtOV0uKyQvLnRlc3QobSk/InRyYSI6Imlu'@;
put 'IikrIiAiK219LHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5'@;
put 'OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDYzOTM2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Fl'@;
put 'LmRlZmluZUxvY2FsZSgiaXQiLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21h'@;
put 'Z19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21l'@;
put 'cl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhI'@;
put 'Om1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW09nZ2kgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4i'@;
put 'W0RvbWFuaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxh'@;
put 'c3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0llcmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbTGEgc2NvcnNhXSBkZGRkIFthIisodGhpcy5ob3Vy'@;
put 'cygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIjoiW0xvIHNjb3Jzb10gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InRy'@;
put 'YSAlcyIscGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsdzoidW5hIHNldHRpbWFuYSIsd3c6IiVkIHNldHRp'@;
put 'bWFuZSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sODY4NzE6ZnVuY3Rpb24oYXQsSWUs'@;
put 'Ril7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJqYSIse2VyYXM6W3tzaW5jZToiMjAxOS0wNS0wMSIsb2Zmc2V0OjEsbmFtZToiXHU0ZWU0XHU1NDhjIixuYXJyb3c6Ilx1MzJmZiIsYWJicjoiUiJ9LHtzaW5jZToiMTk4OS0wMS0wOCIsdW50aWw6IjIwMTkt'@;
put 'MDQtMzAiLG9mZnNldDoxLG5hbWU6Ilx1NWU3M1x1NjIxMCIsbmFycm93OiJcdTMzN2IiLGFiYnI6IkgifSx7c2luY2U6IjE5MjYtMTItMjUiLHVudGlsOiIxOTg5LTAxLTA3IixvZmZzZXQ6MSxuYW1lOiJcdTY2MmRcdTU0OGMiLG5hcnJvdzoiXHUzMzdjIixhYmJyOiJTIn0se3NpbmNlOiIx'@;
put 'OTEyLTA3LTMwIix1bnRpbDoiMTkyNi0xMi0yNCIsb2Zmc2V0OjEsbmFtZToiXHU1OTI3XHU2YjYzIixuYXJyb3c6Ilx1MzM3ZCIsYWJicjoiVCJ9LHtzaW5jZToiMTg3My0wMS0wMSIsdW50aWw6IjE5MTItMDctMjkiLG9mZnNldDo2LG5hbWU6Ilx1NjYwZVx1NmNiYiIsbmFycm93OiJcdTMz'@;
put 'N2UiLGFiYnI6Ik0ifSx7c2luY2U6IjAwMDEtMDEtMDEiLHVudGlsOiIxODczLTEyLTMxIixvZmZzZXQ6MSxuYW1lOiJcdTg5N2ZcdTY2YTYiLG5hcnJvdzoiQUQiLGFiYnI6IkFEIn0se3NpbmNlOiIwMDAwLTEyLTMxIix1bnRpbDotMS8wLG9mZnNldDoxLG5hbWU6Ilx1N2QwMFx1NTE0M1x1'@;
put 'NTI0ZCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZXJhWWVhck9yZGluYWxSZWdleDovKFx1NTE0M3xcZCspXHU1ZTc0LyxlcmFZZWFyT3JkaW5hbFBhcnNlOmZ1bmN0aW9uKG0sbGUpe3JldHVybiJcdTUxNDMiPT09bGVbMV0/MTpwYXJzZUludChsZVsxXXx8bSwxMCl9LG1vbnRoczoiMVx1'@;
put 'NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2'@;
put 'NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY1ZTVcdTY2ZGNcdTY1ZTVfXHU2NzA4XHU2NmRjXHU2NWU1X1x1NzA2Ylx1NjZkY1x1NjVlNV9cdTZjMzRcdTY2ZGNcdTY1ZTVfXHU2NzI4XHU2NmRj'@;
put 'XHU2NWU1X1x1OTFkMVx1NjZkY1x1NjVlNV9cdTU3MWZcdTY2ZGNcdTY1ZTUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU2NWU1X1x1NjcwOF9cdTcwNmJfXHU2YzM0X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU2NzA4X1x1NzA2'@;
put 'Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0i'@;
put 'LExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBkZGRkIEhIOm1tIixsOiJZWVlZL01NL0REIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1KGRkZCkgSEg6'@;
put 'bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUzNDhcdTUyNGR8XHU1MzQ4XHU1ZjhjL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4iXHU1MzQ4XHU1ZjhjIj09PW19LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTI/Ilx1NTM0OFx1NTI0ZCI6Ilx1NTM0OFx1NWY4YyJ9LGNhbGVu'@;
put 'ZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU2NWU1XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NjVlNV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKG0pe3JldHVybiBtLndlZWsoKSE9PXRoaXMud2VlaygpPyJbXHU2NzY1XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sbGFzdERheToiW1x1NjYyOFx1'@;
put 'NjVlNV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLndlZWsoKSE9PW0ud2VlaygpPyJbXHU1MTQ4XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHU2NWU1LyxvcmRpbmFsOmZ1bmN0aW9u'@;
put 'KG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJ5IjpyZXR1cm4gMT09PW0/Ilx1NTE0M1x1NWU3NCI6bSsiXHU1ZTc0IjtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBtKyJcdTY1ZTUiO2RlZmF1bHQ6cmV0dXJuIG19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6'@;
put 'IiVzXHU1MjRkIixzOiJcdTY1NzBcdTc5ZDIiLHNzOiIlZFx1NzlkMiIsbToiMVx1NTIwNiIsbW06IiVkXHU1MjA2IixoOiIxXHU2NjQyXHU5NTkzIixoaDoiJWRcdTY2NDJcdTk1OTMiLGQ6IjFcdTY1ZTUiLGRkOiIlZFx1NjVlNSIsTToiMVx1MzBmNlx1NjcwOCIsTU06IiVkXHUzMGY2XHU2'@;
put 'NzA4Iix5OiIxXHU1ZTc0Iix5eToiJWRcdTVlNzQifX0pfShGKDE2Njc2KSl9LDY4NzEwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgianYiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlf'@;
put 'SnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWdzX1NlcF9Pa3RfTm9wX0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmVuX1NlbG9zb19S'@;
put 'ZWJ1X0tlbWlzX0plbXV3YWhfU2VwdHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmViX0tlbV9KZW1fU2VwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TcCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixM'@;
put 'VFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L2VuamluZ3xzaXlhbmd8c29udGVufG5kYWx1LyxtZXJp'@;
put 'ZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksImVuamluZyI9PT1sZT9tOiJzaXlhbmciPT09bGU/bT49MTE/bTptKzEyOiJzb250ZW4iPT09bGV8fCJuZGFsdSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwx'@;
put 'MT8iZW5qaW5nIjptPDE1PyJzaXlhbmciOm08MTk/InNvbnRlbiI6Im5kYWx1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCIsbmV4dERheToiW01iZW5qYW5nIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0thbGEg'@;
put 'd2luZ2kgcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBba2VwZW5na2VyIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToid29udGVuIGluZyAlcyIscGFzdDoiJXMgaW5na2FuZyBrZXBlbmdrZXIiLHM6InNhd2V0YXdpcyBkZXRpayIsc3M6IiVkIGRldGlr'@;
put 'IixtOiJzZXR1bmdnYWwgbWVuaXQiLG1tOiIlZCBtZW5pdCIsaDoic2V0dW5nZ2FsIGphbSIsaGg6IiVkIGphbSIsZDoic2VkaW50ZW4iLGRkOiIlZCBkaW50ZW4iLE06InNld3VsYW4iLE1NOiIlZCB3dWxhbiIseToic2V0YXVuIix5eToiJWQgdGF1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0p'@;
put 'fShGKDE2Njc2KSl9LDE3MTI1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgia2EiLHttb250aHM6Ilx1MTBkOFx1MTBkMFx1MTBkY1x1MTBkNVx1MTBkMFx1MTBlMFx1MTBkOF9cdTEwZDdcdTEwZDRcdTEwZDFcdTEwZDRcdTEw'@;
put 'ZTBcdTEwZDVcdTEwZDBcdTEwZGFcdTEwZDhfXHUxMGRiXHUxMGQwXHUxMGUwXHUxMGUyXHUxMGQ4X1x1MTBkMFx1MTBkZVx1MTBlMFx1MTBkOFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1'@;
put 'MTBkOFx1MTBkNVx1MTBkYVx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDBcdTEwZDJcdTEwZDVcdTEwZDhcdTEwZTFcdTEwZTJcdTEwZGRfXHUxMGUxXHUxMGQ0XHUxMGU1XHUxMGUyXHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkZFx1MTBlNVx1MTBlMlx1MTBkZFx1'@;
put 'MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZGNcdTEwZGRcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGQzXHUxMGQ0XHUxMGQ5XHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwZDhc'@;
put 'dTEwZDBcdTEwZGNfXHUxMGQ3XHUxMGQ0XHUxMGQxX1x1MTBkYlx1MTBkMFx1MTBlMF9cdTEwZDBcdTEwZGVcdTEwZTBfXHUxMGRiXHUxMGQwXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkY19cdTEwZDhcdTEwZDVcdTEwZGFfXHUxMGQwXHUxMGQyXHUxMGQ1X1x1MTBlMVx1MTBkNFx1MTBlNV9c'@;
put 'dTEwZGRcdTEwZTVcdTEwZTJfXHUxMGRjXHUxMGRkXHUxMGQ0X1x1MTBkM1x1MTBkNFx1MTBkOSIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7c3RhbmRhbG9uZToiXHUxMGQ5XHUxMGQ1XHUxMGQ4XHUxMGUwXHUxMGQwX1x1MTBkZFx1MTBlMFx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1'@;
put 'MTBkOF9cdTEwZTFcdTEwZDBcdTEwZGJcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGRkXHUxMGQ3XHUxMGVlXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlZVx1MTBlM1x1MTBkN1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1'@;
put 'MTBkOF9cdTEwZGVcdTEwZDBcdTEwZTBcdTEwZDBcdTEwZTFcdTEwZDlcdTEwZDRcdTEwZDVcdTEwZDhfXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4Ii5zcGxpdCgiXyIpLGZvcm1hdDoiXHUxMGQ5XHUxMGQ1XHUxMGQ4XHUxMGUwXHUxMGQwXHUxMGUxX1x1MTBkZFx1MTBl'@;
put 'MFx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZTFcdTEwZDBcdTEwZGJcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGRkXHUxMGQ3XHUxMGVlXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlZVx1MTBlM1x1MTBk'@;
put 'N1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGVcdTEwZDBcdTEwZTBcdTEwZDBcdTEwZTFcdTEwZDlcdTEwZDRcdTEwZDVcdTEwZTFfXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi8oXHUxMGVjXHUxMGQ4'@;
put 'XHUxMGRjXHUxMGQwfFx1MTBlOFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMikvfSx3ZWVrZGF5c1Nob3J0OiJcdTEwZDlcdTEwZDVcdTEwZDhfXHUxMGRkXHUxMGUwXHUxMGU4X1x1MTBlMVx1MTBkMFx1MTBkYl9cdTEwZGRcdTEwZDdcdTEwZWVfXHUxMGVlXHUxMGUzXHUxMGQ3X1x1'@;
put 'MTBkZVx1MTBkMFx1MTBlMF9cdTEwZThcdTEwZDBcdTEwZDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTBkOVx1MTBkNV9cdTEwZGRcdTEwZTBfXHUxMGUxXHUxMGQwX1x1MTBkZFx1MTBkN19cdTEwZWVcdTEwZTNfXHUxMGRlXHUxMGQwX1x1MTBlOFx1MTBkMCIuc3BsaXQoIl8iKSxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTEwZDNcdTEwZTZcdTEw'@;
put 'ZDRcdTEwZTFdIExUWy1cdTEwZDZcdTEwZDRdIixuZXh0RGF5OiJbXHUxMGVlXHUxMGQ1XHUxMGQwXHUxMGRhXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbGFzdERheToiW1x1MTBkMlx1MTBlM1x1MTBlOFx1MTBkOFx1MTBkY10gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHRXZWVrOiJbXHUxMGU4XHUx'@;
put 'MGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyXSBkZGRkIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0V2VlazoiW1x1MTBlY1x1MTBkOFx1MTBkY1x1MTBkMF0gZGRkZCBMVC1cdTEwZDZcdTEwZDQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJu'@;
put 'IG0ucmVwbGFjZSgvKFx1MTBlY1x1MTBkMFx1MTBkYnxcdTEwZWNcdTEwZTNcdTEwZDd8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3fFx1MTBlY1x1MTBkNFx1MTBkYXxcdTEwZDNcdTEwZTZ8XHUxMGQ3XHUxMGQ1KShcdTEwZDh8XHUxMGQ0KS8sZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4iXHUx'@;
put 'MGQ4Ij09PU8/TSsiXHUxMGU4XHUxMGQ4IjpNK08rIlx1MTBlOFx1MTBkOCJ9KX0scGFzdDpmdW5jdGlvbihtKXtyZXR1cm4vKFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOHxcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDh8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4fFx1MTBkM1x1MTBl'@;
put 'Nlx1MTBkNHxcdTEwZDdcdTEwZDVcdTEwZDQpLy50ZXN0KG0pP20ucmVwbGFjZSgvKFx1MTBkOHxcdTEwZDQpJC8sIlx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTovXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4Ly50ZXN0KG0pP20ucmVwbGFjZSgvXHUxMGVjXHUxMGQ0XHUxMGRh'@;
put 'XHUxMGQ4JC8sIlx1MTBlY1x1MTBkYVx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTptfSxzOiJcdTEwZTBcdTEwZDBcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZGNcdTEwZDhcdTEwZGJcdTEwZDQgXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixzczoiJWQgXHUxMGVjXHUxMGQwXHUx'@;
put 'MGRiXHUxMGQ4IixtOiJcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLG1tOiIlZCBcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLGg6Ilx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsaGg6IiVkIFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsZDoiXHUxMGQzXHUxMGU2XHUx'@;
put 'MGQ0IixkZDoiJWQgXHUxMGQzXHUxMGU2XHUxMGQ0IixNOiJcdTEwZDdcdTEwZDVcdTEwZDQiLE1NOiIlZCBcdTEwZDdcdTEwZDVcdTEwZDQiLHk6Ilx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCIseXk6IiVkIFx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFy'@;
put 'c2U6LzB8MS1cdTEwZGFcdTEwZDh8XHUxMGRiXHUxMGQ0LVxkezEsMn18XGR7MSwyfS1cdTEwZDQvLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIDA9PT1tP206MT09PW0/bSsiLVx1MTBkYVx1MTBkOCI6bTwyMHx8bTw9MTAwJiZtJTIwPT0wfHxtJTEwMD09MD8iXHUxMGRiXHUxMGQ0LSIr'@;
put 'bTptKyItXHUxMGQ0In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sODI0NjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezA6Ii1cdTA0NDhcdTA0NTYiLDE6Ii1cdTA0NDhcdTA0NTYiLDI6Ii1cdTA0NDhcdTA0NTYiLDM6Ii1c'@;
put 'dTA0NDhcdTA0NTYiLDQ6Ii1cdTA0NDhcdTA0NTYiLDU6Ii1cdTA0NDhcdTA0NTYiLDY6Ii1cdTA0NDhcdTA0NGIiLDc6Ii1cdTA0NDhcdTA0NTYiLDg6Ii1cdTA0NDhcdTA0NTYiLDk6Ii1cdTA0NDhcdTA0NGIiLDEwOiItXHUwNDQ4XHUwNDRiIiwyMDoiLVx1MDQ0OFx1MDQ0YiIsMzA6Ii1c'@;
put 'dTA0NDhcdTA0NGIiLDQwOiItXHUwNDQ4XHUwNDRiIiw1MDoiLVx1MDQ0OFx1MDQ1NiIsNjA6Ii1cdTA0NDhcdTA0NGIiLDcwOiItXHUwNDQ4XHUwNDU2Iiw4MDoiLVx1MDQ0OFx1MDQ1NiIsOTA6Ii1cdTA0NDhcdTA0NGIiLDEwMDoiLVx1MDQ0OFx1MDQ1NiJ9O2FlLmRlZmluZUxvY2FsZSgi'@;
put 'a2siLHttb250aHM6Ilx1MDQ5Ylx1MDQzMFx1MDRhM1x1MDQ0Mlx1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0OWJcdTA0M2ZcdTA0MzBcdTA0M2RfXHUwNDNkXHUwNDMwXHUwNDQzXHUwNDQwXHUwNDRiXHUwNDM3X1x1MDQ0MVx1MDRkOVx1MDQ0M1x1MDQ1Nlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0'@;
put 'M2NcdTA0NGJcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQzXHUwNDQxXHUwNDRiXHUwNDNjX1x1MDQ0OFx1MDQ1Nlx1MDQzYlx1MDQzNFx1MDQzNV9cdTA0NDJcdTA0MzBcdTA0M2NcdTA0NGJcdTA0MzdfXHUwNDliXHUwNDRiXHUwNDQwXHUwNDNhXHUwNGFmXHUwNDM5XHUwNDM1XHUwNDNhX1x1'@;
put 'MDQ5Ylx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzZF9cdTA0OWJcdTA0MzBcdTA0NDBcdTA0MzBcdTA0NDhcdTA0MzBfXHUwNDM2XHUwNDM1XHUwNDNiXHUwNDQyXHUwNDNlXHUwNDliXHUwNDQxXHUwNDMwXHUwNDNkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0OWJcdTA0MzBcdTA0YTNf'@;
put 'XHUwNDMwXHUwNDliXHUwNDNmX1x1MDQzZFx1MDQzMFx1MDQ0M19cdTA0NDFcdTA0ZDlcdTA0NDNfXHUwNDNjXHUwNDMwXHUwNDNjX1x1MDQzY1x1MDQzMFx1MDQ0M19cdTA0NDhcdTA0NTZcdTA0M2JfXHUwNDQyXHUwNDMwXHUwNDNjX1x1MDQ5Ylx1MDQ0Ylx1MDQ0MF9cdTA0OWJcdTA0MzBc'@;
put 'dTA0MzdfXHUwNDliXHUwNDMwXHUwNDQwX1x1MDQzNlx1MDQzNVx1MDQzYiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDM2XHUwNDM1XHUwNDNhXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzNFx1MDRhZlx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9c'@;
put 'dTA0NDFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNGQ5XHUwNDQwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzMVx1MDQzNVx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzZcdTA0YjFcdTA0M2Nc'@;
put 'dTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzNlx1MDQzNVx1MDQzYV9cdTA0MzRcdTA0YWZcdTA0MzlfXHUwNDQxXHUwNDM1XHUwNDM5X1x1MDQ0MVx1MDRkOVx1MDQ0MF9cdTA0MzFcdTA0MzVcdTA0MzlfXHUwNDM2'@;
put 'XHUwNGIxXHUwNDNjX1x1MDQ0MVx1MDQzNVx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDM2XHUwNDNhX1x1MDQzNFx1MDQzOV9cdTA0NDFcdTA0MzlfXHUwNDQxXHUwNDQwX1x1MDQzMVx1MDQzOV9cdTA0MzZcdTA0M2NfXHUwNDQxXHUwNDNkIi5zcGxpdCgiXyIpLGxvbmdE'@;
put 'YXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1'@;
put 'MDQ1Nlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDE1XHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBc'@;
put 'dTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNDM1XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDRh'@;
put 'M10gZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDU2XHUwNDQ4XHUwNDU2XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0MzFcdTA0YjFcdTA0NDBcdTA0NGJcdTA0M2QiLHM6'@;
put 'Ilx1MDQzMVx1MDQ1Nlx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0'@;
put 'M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGg6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQ1Nlx1'@;
put 'MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZc'@;
put 'dTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDhcdTA0NTZ8XHUwNDQ4XHUwNDRiKS8sb3JkaW5hbDpmdW5jdGlvbihsZSl7cmV0dXJuIGxlKyh4W2xlXXx8eFtsZSUxMF18fHhbbGU+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319'@;
put 'KX0oRigxNjY3NikpfSw3NzM5OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUxN2UxIiwyOiJcdTE3ZTIiLDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgiLDk6Ilx1'@;
put 'MTdlOSIsMDoiXHUxN2UwIn0sbT17Ilx1MTdlMSI6IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6IjQiLCJcdTE3ZTUiOiI1IiwiXHUxN2U2IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTthZS5kZWZpbmVMb2Nh'@;
put 'bGUoImttIix7bW9udGhzOiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdi'@;
put 'N1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUx'@;
put 'N2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxNzk4XHUxNzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3YjhcdTE3OTNcdTE3YjZf'@;
put 'XHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9cdTE3ODBcdTE3ODlcdTE3'@;
put 'ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MTdhMlx1MTdiNlx1MTc5MVx1MTdiN1x1MTc4'@;
put 'Zlx1MTdkMlx1MTc5OV9cdTE3ODVcdTE3ZDBcdTE3OTNcdTE3ZDJcdTE3OTFfXHUxN2EyXHUxNzg0XHUxN2QyXHUxNzgyXHUxN2I2XHUxNzlhX1x1MTc5Nlx1MTdiYlx1MTc5Ml9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YTBcdTE3OWZcdTE3ZDJcdTE3OTRcdTE3OGZcdTE3YjdcdTE3Y2RfXHUx'@;
put 'NzlmXHUxN2JiXHUxNzgwXHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdjNVx1MTc5YVx1MTdjZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTE3YTJcdTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNwbGl0KCJfIiks'@;
put 'd2Vla2RheXNNaW46Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi'@;
put 'REQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdiOVx1MTc4MHxcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUvLGlz'@;
put 'UE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MTc5Nlx1MTdkMlx1MTc5YVx1MTdiOVx1MTc4MCI6Ilx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSJ9LGNh'@;
put 'bGVuZGFyOntzYW1lRGF5OiJbXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzXHUxNzkzXHUxN2MxXHUxN2M3IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLG5leHREYXk6IltcdTE3OWZcdTE3ZDJcdTE3YTJcdTE3YzJcdTE3ODAgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4'@;
put 'dFdlZWs6ImRkZGQgW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3REYXk6IltcdTE3OThcdTE3ZDJcdTE3OWZcdTE3YjdcdTE3OWJcdTE3OThcdTE3YjdcdTE3ODkgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MTc5Zlx1MTc5NFx1MTdk'@;
put 'Mlx1MTc4Zlx1MTdiNlx1MTdhMFx1MTdjZFx1MTc5OFx1MTdiYlx1MTc5M10gW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUxNzkxXHUxN2MwXHUxNzhmIixwYXN0OiIlc1x1MTc5OFx1MTdiYlx1MTc5MyIsczoi'@;
put 'XHUxNzk0XHUxN2M5XHUxN2JiXHUxNzkzXHUxN2QyXHUxNzk4XHUxN2I2XHUxNzkzXHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixzczoiJWQgXHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixtOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTNcdTE3YjZc'@;
put 'dTE3OTFcdTE3YjgiLG1tOiIlZCBcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLGg6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NCIsaGg6IiVkIFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NCIsZDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkwXHUxN2QyXHUxNzg0'@;
put 'XHUxN2MzIixkZDoiJWQgXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixNOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODFcdTE3YzIiLE1NOiIlZCBcdTE3ODFcdTE3YzIiLHk6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiIseXk6IiVkIFx1MTc4Nlx1'@;
put 'MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1MTc5MVx1MTdiOFxkezEsMn0vLG9yZGluYWw6Ilx1MTc5MVx1MTdiOCVkIixwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUxN2UxXHUxN2UyXHUxN2UzXHUxN2U0XHUxN2U1'@;
put 'XHUxN2U2XHUxN2U3XHUxN2U4XHUxN2U5XHUxN2UwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3Nikp'@;
put 'fSwzODcyMDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6Ilx1MGNlOSIsNDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6Ilx1MGNlYyIsNzoiXHUwY2VkIiw4OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoiXHUw'@;
put 'Y2U2In0sbT17Ilx1MGNlNyI6IjEiLCJcdTBjZTgiOiIyIiwiXHUwY2U5IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoiNiIsIlx1MGNlZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUwY2VmIjoiOSIsIlx1MGNlNiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImtuIix7bW9u'@;
put 'dGhzOiJcdTBjOWNcdTBjYThcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwXHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2Rf'@;
put 'XHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNi'@;
put 'MFx1MGNjZF9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZCIuc3Bs'@;
put 'aXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzljXHUwY2E4X1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMF9cdTBjYWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUwY2IwXHUwY2JmXHUwY2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9c'@;
put 'dTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZcdTBjYzZcdTBjODJfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2'@;
put 'XHUwY2MyXHUwY2Q1X1x1MGNhOFx1MGNiNVx1MGNjNlx1MGM4Ml9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiOFx1MGNj'@;
put 'Nlx1MGNjMlx1MGNkNVx1MGNhZVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FjXHUwY2MxXHUwY2E3XHUwY2I1XHUwY2JlXHUwY2IwX1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBj'@;
put 'YjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmXHUwY2I1XHUwY2JlXHUwY2IwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMV9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVf'@;
put 'XHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzX1x1MGNhY1x1MGNjMVx1MGNhN19cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFfXHUwY2I2XHUwY2MxXHUwYzk1XHUwY2NkXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwY2FkXHUwY2JlX1x1MGNiOFx1'@;
put 'MGNjNlx1MGNjMlx1MGNkNV9cdTBjYWVcdTBjODJfXHUwY2FjXHUwY2MxX1x1MGM5N1x1MGNjMV9cdTBjYjZcdTBjYzFfXHUwY2I2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixM'@;
put 'TEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGM4N1x1MGM4Mlx1MGNhNlx1MGNjMV0gTFQiLG5leHREYXk6IltcdTBjYThcdTBjYmVcdTBjYjNcdTBjYzZdIExUIixuZXh0V2VlazoiZGRkZCwg'@;
put 'TFQiLGxhc3REYXk6IltcdTBjYThcdTBjYmZcdTBjYThcdTBjY2RcdTBjYThcdTBjYzZdIExUIixsYXN0V2VlazoiW1x1MGM5NVx1MGNjNlx1MGNjMlx1MGNhOFx1MGNjNlx1MGNhZl0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGNhOFx1MGM4'@;
put 'Mlx1MGNhNFx1MGNiMCIscGFzdDoiJXMgXHUwY2I5XHUwY2JmXHUwYzgyXHUwY2E2XHUwY2M2IixzOiJcdTBjOTVcdTBjYzZcdTBjYjJcdTBjYjVcdTBjYzEgXHUwYzk1XHUwY2NkXHUwY2I3XHUwY2EzXHUwYzk3XHUwY2IzXHUwY2MxIixzczoiJWQgXHUwY2I4XHUwY2M2XHUwYzk1XHUwY2M2'@;
put 'XHUwYzgyXHUwY2ExXHUwY2MxXHUwYzk3XHUwY2IzXHUwY2MxIixtOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2JmXHUwY2I3IixtbToiJWQgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2JmXHUwY2I3IixoOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEg'@;
put 'XHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixoaDoiJWQgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixkOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E2XHUwY2JmXHUwY2E4IixkZDoiJWQgXHUwY2E2XHUwY2JmXHUwY2E4IixNOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUw'@;
put 'Y2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIixNTToiJWQgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIix5OiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3Iix5eToiJWQgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3'@;
put 'In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGNlN1x1MGNlOFx1MGNlOVx1MGNlYVx1MGNlYlx1MGNlY1x1MGNlZFx1MGNlZVx1MGNlZlx1MGNlNl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBN'@;
put 'LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmfFx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNnxcdTBjYWVcdTBjYTdcdTBjY2RcdTBj'@;
put 'YWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTh8XHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIj09PU8/TTw0P006TSsxMjoiXHUwY2FjXHUw'@;
put 'Y2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2Ij09PU8/TToiXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4Ij09PU8/TT49MTA/TTpNKzEyOiJcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiPT09Tz9NKzEyOnZvaWQgMH0sbWVyaWRp'@;
put 'ZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI6TTwxMD8iXHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2IjpNPDE3PyJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBj'@;
put 'YjlcdTBjY2RcdTBjYTgiOk08MjA/Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI6Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwY2E4XHUwY2M2XHUwY2Q1KS8sb3JkaW5hbDpmdW5jdGlvbihNKXtyZXR1'@;
put 'cm4gTSsiXHUwY2E4XHUwY2M2XHUwY2Q1In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sODUzMDY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJrbyIse21vbnRoczoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRf'@;
put 'NFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdWM2ZDRfMlx1YzZkNF8zXHVjNmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85'@;
put 'XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdWM3N2NcdWM2OTRcdWM3N2NfXHVjNmQ0XHVjNjk0XHVjNzdjX1x1ZDY1NFx1YzY5NFx1Yzc3Y19cdWMyMThcdWM2OTRcdWM3N2NfXHViYWE5XHVjNjk0XHVjNzdjX1x1YWUwOFx1YzY5NFx1'@;
put 'Yzc3Y19cdWQxYTBcdWM2OTRcdWM3N2MiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRfXHVjMjE4X1x1YmFhOV9cdWFlMDhfXHVkMWEwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUw'@;
put 'OF9cdWQxYTAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIixMTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIEEgaDptbSIsTExMTDoiWVlZWVx1YjE0NCBN'@;
put 'TU1NIERcdWM3N2MgZGRkZCBBIGg6bW0iLGw6IllZWVkuTU0uREQuIixsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLGxsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixsbGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1l'@;
put 'RGF5OiJcdWM2MjRcdWIyOTggTFQiLG5leHREYXk6Ilx1YjBiNFx1Yzc3YyBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6Ilx1YzViNFx1YzgxYyBMVCIsbGFzdFdlZWs6Ilx1YzljMFx1YjA5Y1x1YzhmYyBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl'@;
put 'OiIlcyBcdWQ2YzQiLHBhc3Q6IiVzIFx1YzgwNCIsczoiXHViYTg3IFx1Y2QwOCIsc3M6IiVkXHVjZDA4IixtOiIxXHViZDg0IixtbToiJWRcdWJkODQiLGg6Ilx1ZDU1YyBcdWMyZGNcdWFjMDQiLGhoOiIlZFx1YzJkY1x1YWMwNCIsZDoiXHVkNTU4XHViOGU4IixkZDoiJWRcdWM3N2MiLE06'@;
put 'Ilx1ZDU1YyBcdWIyZWMiLE1NOiIlZFx1YjJlYyIseToiXHVjNzdjIFx1YjE0NCIseXk6IiVkXHViMTQ0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdWM3N2N8XHVjNmQ0fFx1YzhmYykvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtjYXNlImQiOmNhc2Ui'@;
put 'RCI6Y2FzZSJEREQiOnJldHVybiBtKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIG0rIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKyJcdWM4ZmMiO2RlZmF1bHQ6cmV0dXJuIG19fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9u'@;
put 'KG0pe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09bX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMj8iXHVjNjI0XHVjODA0IjoiXHVjNjI0XHVkNmM0In19KX0oRigxNjY3NikpfSw4Mjk5NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgeD17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sbT17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2'@;
put 'NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxsZT1bIlx1MDZhOVx1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2'@;
put 'MzRcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MmEiLCJcdTA2MjZcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2NDZcdTA2Y2NcdTA2MzNcdTA2MjdcdTA2NDYiLCJcdTA2MjZcdTA2MjdcdTA2Y2NcdTA2MjdcdTA2MzEiLCJcdTA2MmRcdTA2NDhcdTA2MzJcdTA2ZDVcdTA2Y2NcdTA2MzFc'@;
put 'dTA2MjdcdTA2NDYiLCJcdTA2MmFcdTA2ZDVcdTA2NDVcdTA2NDVcdTA2NDhcdTA2MzIiLCJcdTA2MjZcdTA2MjdcdTA2MjgiLCJcdTA2MjZcdTA2ZDVcdTA2Y2NcdTA2NDRcdTA2NDhcdTA2NDhcdTA2NDQiLCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNmNjXHUw'@;
put 'NmQ1XHUwNjQzXHUwNmQ1XHUwNjQ1IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIsIlx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2YTlcdTA2ZDVcdTA2NDUiXTth'@;
put 'ZS5kZWZpbmVMb2NhbGUoImt1Iix7bW9udGhzOmxlLG1vbnRoc1Nob3J0OmxlLHdlZWtkYXlzOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1'@;
put 'XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJj'@;
put 'XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNjQ3XHUy'@;
put 'MDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1'@;
put 'MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJm'@;
put 'X1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDY0N19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDpt'@;
put 'bSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGN8XHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjLyxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybi9cdTA2'@;
put 'MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMvLnRlc3QoTyl9LG1lcmlkaWVtOmZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gTzwxMj8iXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjIjoiXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUw'@;
put 'NjQ3XHUyMDBjIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjZcdTA2NDdcdTIwMGNcdTA2NDVcdTA2MzFcdTA2YzYgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dERheToiW1x1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1'@;
put 'MDZjYyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDY0OFx1MDZjZVx1MDY0Nlx1MDZjZSBcdTA2NDNc'@;
put 'dTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQ0XHUwNjQ3XHUyMDBjICVzIixw'@;
put 'YXN0OiIlcyIsczoiXHUwNjg2XHUwNjQ3XHUyMDBjXHUwNjQ2XHUwNjJmIFx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyIsc3M6Ilx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwYyAlZCIsbToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQz'@;
put 'IFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsbW06IiVkIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsaDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsaGg6IiVkIFx1'@;
put 'MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsZDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY5NVx1MDZjNlx1MDY5OCIsZGQ6IiVkIFx1MDY5NVx1MDZjNlx1MDY5OCIsTToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0NVx1MDYyN1x1MDY0Nlx1'@;
put 'MDZhZiIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIseToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYzM1x1MDYyN1x1MDZiNSIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDZiNSJ9LHByZXBhcnNlOmZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1tcdTA2NjFcdTA2'@;
put 'NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUil7cmV0dXJuIG1bUl19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUil7cmV0'@;
put 'dXJuIHhbUl19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sODc3OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MDoiLVx1MDQ0N1x1MDRhZiIsMToiLVx1MDQ0N1x1MDQzOCIsMjoi'@;
put 'LVx1MDQ0N1x1MDQzOCIsMzoiLVx1MDQ0N1x1MDRhZiIsNDoiLVx1MDQ0N1x1MDRhZiIsNToiLVx1MDQ0N1x1MDQzOCIsNjoiLVx1MDQ0N1x1MDQ0YiIsNzoiLVx1MDQ0N1x1MDQzOCIsODoiLVx1MDQ0N1x1MDQzOCIsOToiLVx1MDQ0N1x1MDQ0MyIsMTA6Ii1cdTA0NDdcdTA0NDMiLDIwOiIt'@;
put 'XHUwNDQ3XHUwNDRiIiwzMDoiLVx1MDQ0N1x1MDQ0MyIsNDA6Ii1cdTA0NDdcdTA0NGIiLDUwOiItXHUwNDQ3XHUwNGFmIiw2MDoiLVx1MDQ0N1x1MDQ0YiIsNzA6Ii1cdTA0NDdcdTA0MzgiLDgwOiItXHUwNDQ3XHUwNDM4Iiw5MDoiLVx1MDQ0N1x1MDQ0MyIsMTAwOiItXHUwNDQ3XHUwNGFm'@;
put 'In07YWUuZGVmaW5lTG9jYWxlKCJreSIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUw'@;
put 'NDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNf'@;
put 'XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQz'@;
put 'Ml9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1'@;
put 'XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MTZcdTA0MzVcdTA0M2FcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE0XHUwNGFmXHUwNDM5XHUwNDQ4XHUwNGU5'@;
put 'XHUwNDNjXHUwNDMxXHUwNGFmX1x1MDQyOFx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MjhcdTA0MzBcdTA0NDBcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDExXHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4'@;
put 'X1x1MDQxNlx1MDQ0M1x1MDQzY1x1MDQzMF9cdTA0MThcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzgiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDE2XHUwNDM1XHUwNDNhX1x1MDQxNFx1MDRhZlx1MDQzOV9cdTA0MjhcdTA0MzVcdTA0MzlfXHUwNDI4XHUwNDMwXHUwNDQw'@;
put 'X1x1MDQxMVx1MDQzNVx1MDQzOV9cdTA0MTZcdTA0NDNcdTA0M2NfXHUwNDE4XHUwNDQ4XHUwNDM1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MTZcdTA0M2FfXHUwNDE0XHUwNDM5X1x1MDQyOFx1MDQzOV9cdTA0MjhcdTA0NDBfXHUwNDExXHUwNDM5X1x1MDQxNlx1MDQzY19cdTA0'@;
put 'MThcdTA0NDgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1l'@;
put 'RGF5OiJbXHUwNDExXHUwNGFmXHUwNDMzXHUwNGFmXHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHREYXk6IltcdTA0MmRcdTA0NDBcdTA0NDJcdTA0MzVcdTA0YTMgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQ0MVx1MDQz'@;
put 'MFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3REYXk6IltcdTA0MWFcdTA0MzVcdTA0NDdcdTA0NGRcdTA0NGQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0NDJcdTA0M2FcdTA0ZTlcdTA0M2QgXHUwNDMwXHUwNDNmXHUwNDQyXHUwNDMwXHUwNDNkXHUw'@;
put 'NDRiXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0YWZcdTA0M2RcdTA0YWZdIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0MzhcdTA0NDdcdTA0MzhcdTA0M2RcdTA0MzRcdTA0MzUiLHBhc3Q6IiVzIFx1MDQz'@;
put 'Y1x1MDQ0M1x1MDQ0MFx1MDQ0M1x1MDQzZCIsczoiXHUwNDMxXHUwNDM4XHUwNDQwXHUwNDNkXHUwNDM1XHUwNDQ3XHUwNDM1IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbToiXHUwNDMx'@;
put 'XHUwNDM4XHUwNDQwIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0MiIs'@;
put 'ZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDRhZlx1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDRhZlx1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzMFx1MDQzOSIsTU06IiVkIFx1MDQzMFx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNlx1MDQ0Ylx1MDQz'@;
put 'YiIseXk6IiVkIFx1MDQzNlx1MDQ0Ylx1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ0N1x1MDQzOHxcdTA0NDdcdTA0NGJ8XHUwNDQ3XHUwNGFmfFx1MDQ0N1x1MDQ0MykvLG9yZGluYWw6ZnVuY3Rpb24obGUpe3JldHVybiBsZSsoeFtsZV18fHhbbGUlMTBd'@;
put 'fHx4W2xlPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNjIwNTc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChSLHosSyxJKXt2YXIgaz17bTpbImVuZyBNaW51dHQiLCJlbmdlciBNaW51dHQi'@;
put 'XSxoOlsiZW5nIFN0b25uIiwiZW5nZXIgU3Rvbm4iXSxkOlsiZWVuIERhZyIsImVuZ2VtIERhZyJdLE06WyJlZSBNb3VudCIsImVuZ2VtIE1vdW50Il0seTpbImVlIEpvZXIiLCJlbmdlbSBKb2VyIl19O3JldHVybiB6P2tbS11bMF06a1tLXVsxXX1mdW5jdGlvbiBNKFIpe2lmKFI9cGFyc2VJ'@;
put 'bnQoUiwxMCksaXNOYU4oUikpcmV0dXJuITE7aWYoUjwwKXJldHVybiEwO2lmKFI8MTApcmV0dXJuIDQ8PVImJlI8PTc7aWYoUjwxMDApe3ZhciB6PVIlMTA7cmV0dXJuIE0oMD09PXo/Ui8xMDp6KX1pZihSPDFlNCl7Zm9yKDtSPj0xMDspUi89MTA7cmV0dXJuIE0oUil9cmV0dXJuIE0oUi89'@;
put 'MWUzKX1hZS5kZWZpbmVMb2NhbGUoImxiIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNGVyel9BYnJceGVibGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmVici5fTXJ6'@;
put 'Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25uZGVnX01ceGU5aW5kZWdfRFx4ZWJuc2NoZGVnX01ceGVidHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9NXHhlOS5fRFx4ZWIuX01ceGViLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTVx4ZTlfRFx4ZWJfTVx4ZWJfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0'@;
put 'OntMVDoiSDptbSBbQXVlcl0iLExUUzoiSDptbTpzcyBbQXVlcl0iLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hh'@;
put 'dXQgdW1dIExUIixzYW1lRWxzZToiTCIsbmV4dERheToiW011ZXIgdW1dIExUIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIixsYXN0RGF5OiJbR1x4ZWJzY2h0ZXIgdW1dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDI6Y2FzZSA0OnJldHVybiJbTGVz'@;
put 'Y2h0ZW5dIGRkZGQgW3VtXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW0xlc2NodGVdIGRkZGQgW3VtXSBMVCJ9fX0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24gbShSKXtyZXR1cm4gTShSLnN1YnN0cigwLFIuaW5kZXhPZigiICIpKSk/ImEgIitSOiJhbiAiK1J9LHBhc3Q6ZnVuY3Rpb24g'@;
put 'bGUoUil7cmV0dXJuIE0oUi5zdWJzdHIoMCxSLmluZGV4T2YoIiAiKSkpPyJ2aXJ1ICIrUjoidmlydW4gIitSfSxzOiJlIHB1ZXIgU2Vrb25uZW4iLHNzOiIlZCBTZWtvbm5lbiIsbTp4LG1tOiIlZCBNaW51dHRlbiIsaDp4LGhoOiIlZCBTdG9ubmVuIixkOngsZGQ6IiVkIERlZWciLE06eCxN'@;
put 'TToiJWQgTVx4ZTlpbnQiLHk6eCx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxNzE5MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0'@;
put 'IjthZS5kZWZpbmVMb2NhbGUoImxvIix7bW9udGhzOiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUw'@;
put 'ZTk0XHUwZWFhXHUwZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1'@;
put 'MGViMl9cdTBlOTVcdTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGVi'@;
put 'OFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUw'@;
put 'ZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlcdTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlc'@;
put 'dTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGVhZFx1MGViMlx1MGU5N1x1MGViNFx1MGU5NF9cdTBlODhcdTBlYjFcdTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFc'@;
put 'dTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVhZFx1MGViMVx1MGU4N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhc'@;
put 'dTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGU5N19cdTBlODhfXHUwZWFkXHUwZTg0X1x1MGU5ZV9cdTBlOWVcdTBlYWJfXHUwZWFhXHUwZTgx'@;
pu